diff --git a/.github/CODEOWNERS b/.github/CODEOWNERS new file mode 100644 index 000000000..9db52d085 --- /dev/null +++ b/.github/CODEOWNERS @@ -0,0 +1,14 @@ +# This is a comment. +# Each line is a file pattern followed by one or more owners. + +# These owners will be the default owners for everything in +# the repo. Unless a later match takes precedence, +# @global-owner1 and @global-owner2 will be requested for +# review when someone opens a pull request. +* @WenMeng-NOAA + + +# Support for public releases and documentation +docs/* @hertneky @fossell @camshe +scripts/run_upp @hertneky @fossell @camshe + diff --git a/.github/workflows/build_and_test.yml b/.github/workflows/build_and_test.yml deleted file mode 100644 index eae74db3a..000000000 --- a/.github/workflows/build_and_test.yml +++ /dev/null @@ -1,67 +0,0 @@ -name: Build and Test -on: [push, pull_request] - -jobs: - build: - runs-on: ubuntu-20.04 - env: - FC: gfortran-9 - CC: gcc-9 - - steps: - - name: install-dependencies - run: | - sudo apt-get update - sudo apt-get install libmpich-dev - sudo apt-get install libnetcdf-dev libnetcdff-dev netcdf-bin pkg-config - sudo apt-get install libpng-dev - sudo apt-get install libjpeg-dev - sudo apt-get install doxygen - - - name: checkout-jasper - uses: actions/checkout@v2 - with: - repository: jasper-software/jasper - path: jasper - ref: version-2.0.22 - - - name: build-jasper - run: | - cd jasper - mkdir build-jasper && cd build-jasper - cmake .. -DCMAKE_INSTALL_PREFIX=~ - make -j2 - make install - - - name: checkout-nceplibs - uses: actions/checkout@v2 - with: - repository: NOAA-EMC/NCEPLIBS - path: nceplibs - ref: v1.2.0 - - - name: build-nceplibs - run: | - cd nceplibs - mkdir build && cd build - cmake .. -DCMAKE_INSTALL_PREFIX=~ -DFLAT=ON -DBUILD_POST=OFF - make -j2 - - - name: checkout-post - uses: actions/checkout@v2 - with: - path: post - submodules: true - - - name: build-post - run: | - cd post - mkdir build && cd build - cmake .. -DCMAKE_PREFIX_PATH=~ -DENABLE_DOCS=ON - make -j2 - - - - - - diff --git a/.github/workflows/gcc.yml b/.github/workflows/gcc.yml new file mode 100644 index 000000000..af627a375 --- /dev/null +++ b/.github/workflows/gcc.yml @@ -0,0 +1,96 @@ +name: GCC Linux Build +on: [push, pull_request, workflow_dispatch] + + +# Use custom shell with -l so .bash_profile is sourced +# without having to do it in manually every step +defaults: + run: + shell: bash -leo pipefail {0} + +env: + cache_key: gcc2 # The number (#) following the cache_key "gcc" is to flush Action cache. + CC: gcc-10 + FC: gfortran-10 + CXX: g++-10 + +# A note on flushing Action cache and relevance to "cache_key" above. +# There is no way to flush the Action cache, and hence a number (#) is appended +# to the "cache_key" (gcc). +# If the dependencies change, increment this number and a new cache will be +# generated by the dependency build step "setup" +# There is a Github issue to force clear the cache. +# See discussion on: +# https://stackoverflow.com/questions/63521430/clear-cache-in-github-actions + +# The jobs are split into: +# 1. a dependency build step (setup), and +# 2. a UPP build step (build) +# The setup is run once and the environment is cached, +# so each build of UPP can reuse the cached dependencies to save time (and compute). + +jobs: + setup: + runs-on: ubuntu-latest + + steps: + - name: checkout-upp # This is for getting spack.yaml + uses: actions/checkout@v2 + with: + path: UPP + + # Cache spack, compiler and dependencies + - name: cache-env + id: cache-env + uses: actions/cache@v2 + with: + path: | + spack + ~/.spack + key: spack-${{ runner.os }}-${{ env.cache_key }}-${{ hashFiles('UPP/ci/spack.yaml') }} + + # Install dependencies using Spack + - name: install-dependencies-with-spack + if: steps.cache-env.outputs.cache-hit != 'true' + run: | + git clone -c feature.manyFiles=true https://github.com/NOAA-EMC/spack.git + source spack/share/spack/setup-env.sh + spack env create upp-env UPP/ci/spack.yaml + spack env activate upp-env + sudo apt install cmake + spack external find + spack add mpich@3.4.2 + spack concretize + spack install -v --fail-fast --dirty + spack clean --all + + build: + needs: setup + runs-on: ubuntu-latest + + steps: + - name: checkout-upp + uses: actions/checkout@v2 + with: + path: UPP + + - name: cache-env + id: cache-env + uses: actions/cache@v2 + with: + path: | + spack + ~/.spack + key: spack-${{ runner.os }}-${{ env.cache_key }}-${{ hashFiles('UPP/ci/spack.yaml') }} + + - name: build-upp + run: | + source spack/share/spack/setup-env.sh + spack env activate upp-env + export CC=mpicc + export FC=mpif90 + cd UPP + mkdir -p build && cd build + cmake -DCMAKE_INSTALL_PREFIX=../install .. + make -j2 VERBOSE=1 + make install diff --git a/.github/workflows/intel.yml b/.github/workflows/intel.yml new file mode 100644 index 000000000..f468fccda --- /dev/null +++ b/.github/workflows/intel.yml @@ -0,0 +1,116 @@ +name: Intel Linux Build +on: [push, pull_request, workflow_dispatch] + +# Use custom shell with -l so .bash_profile is sourced which loads intel/oneapi/setvars.sh +# without having to do it in manually every step +defaults: + run: + shell: bash -leo pipefail {0} + +# Set I_MPI_CC/F90 so Intel MPI wrapper uses icc/ifort instead of gcc/gfortran +env: + cache_key: intel2 # The number (#) following the cache_key "intel" is to flush Action cache. + CC: icc + FC: ifort + CXX: icpc + I_MPI_CC: icc + I_MPI_F90: ifort + +# A note on flushing Action cache and relevance to "cache_key" above. +# There is no way to flush the Action cache, and hence a number (#) is appended +# to the "cache_key" (intel). +# If the dependencies change, increment this number and a new cache will be +# generated by the dependency build step "setup" +# There is a Github issue to force clear the cache. +# See discussion on: +# https://stackoverflow.com/questions/63521430/clear-cache-in-github-actions + +# The jobs are split into: +# 1. a dependency build step (setup), and +# 2. a UPP build step (build) +# The setup is run once and the environment is cached, +# so each build of UPP can reuse the cached dependencies to save time (and compute). + +jobs: + setup: + runs-on: ubuntu-latest + + steps: + - name: checkout-upp # This is for getting spack.yaml + if: steps.cache-env.outputs.cache-hit != 'true' + uses: actions/checkout@v2 + with: + path: UPP + + # Cache spack, compiler and dependencies + - name: cache-env + id: cache-env + uses: actions/cache@v2 + with: + path: | + spack + ~/.spack + /opt/intel + key: spack2-${{ runner.os }}-${{ env.cache_key }}-${{ hashFiles('UPP/ci/spack.yaml') }} + + - name: install-intel-compilers + run: | + wget https://apt.repos.intel.com/intel-gpg-keys/GPG-PUB-KEY-INTEL-SW-PRODUCTS.PUB + sudo apt-key add GPG-PUB-KEY-INTEL-SW-PRODUCTS.PUB + echo "deb https://apt.repos.intel.com/oneapi all main" | sudo tee /etc/apt/sources.list.d/oneAPI.list + sudo apt-get update + sudo apt-get install intel-oneapi-dev-utilities intel-oneapi-mpi-devel intel-oneapi-openmp intel-oneapi-compiler-fortran intel-oneapi-compiler-dpcpp-cpp-and-cpp-classic + echo "source /opt/intel/oneapi/setvars.sh" >> ~/.bash_profile + + # Install dependencies using Spack + - name: install-dependencies-with-spack + if: steps.cache-env.outputs.cache-hit != 'true' + run: | + sudo mv /usr/local/ /usr_local_mv + git clone -c feature.manyFiles=true https://github.com/NOAA-EMC/spack.git + source spack/share/spack/setup-env.sh + spack env create upp-env UPP/ci/spack.yaml + spack env activate upp-env + spack compiler find + sudo apt install cmake + spack external find + spack add intel-oneapi-mpi + spack concretize + spack install --dirty -v --fail-fast + spack clean --all + + build: + needs: setup + runs-on: ubuntu-latest + + steps: + - name: checkout-upp + uses: actions/checkout@v2 + with: + path: UPP + + - name: install-intel + run: | + echo "source /opt/intel/oneapi/setvars.sh" >> ~/.bash_profile + + - name: cache-env + id: cache-env + uses: actions/cache@v2 + with: + path: | + spack + ~/.spack + /opt/intel + key: spack2-${{ runner.os }}-${{ env.cache_key }}-${{ hashFiles('UPP/ci/spack.yaml') }} + + - name: build-upp + run: | + source spack/share/spack/setup-env.sh + spack env activate upp-env + export CC=mpiicc + export FC=mpiifort + cd UPP + mkdir -p build && cd build + cmake -DCMAKE_INSTALL_PREFIX=../install .. + make -j2 VERBOSE=1 + make install diff --git a/.gitignore b/.gitignore index 2dc827ccf..c9d3f6e12 100644 --- a/.gitignore +++ b/.gitignore @@ -9,8 +9,8 @@ # USE CAUTION WHEN ADDING WILDCARDS, as some builds use different filename # # conventions than others # ############################################################################## -build/ -install/ +build*/ +install*/ *.[aox] *.mod diff --git a/.gitmodules b/.gitmodules index 669c691de..42ffe2a3d 100644 --- a/.gitmodules +++ b/.gitmodules @@ -1,4 +1,8 @@ -[submodule "CMakeModules"] - path = CMakeModules - url = https://github.com/noaa-emc/CMakeModules - branch = develop +[submodule "post_gtg.fd"] + path = sorc/ncep_post.fd/post_gtg.fd + url = https://github.com/NCAR/UPP_GTG + update = none +[submodule "sorc/libIFI.fd"] + path = sorc/libIFI.fd + url = https://github.com/NCAR/UPP_IFI + update = none diff --git a/CMakeLists.txt b/CMakeLists.txt index e2beafe4b..5874d98ac 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -7,14 +7,17 @@ file(STRINGS "VERSION" pVersion LIMIT_COUNT 1) project( upp VERSION ${pVersion} - LANGUAGES Fortran) + LANGUAGES Fortran C CXX) -list(APPEND CMAKE_MODULE_PATH "${CMAKE_CURRENT_SOURCE_DIR}/CMakeModules/Modules") +list(APPEND CMAKE_MODULE_PATH "${CMAKE_CURRENT_SOURCE_DIR}/cmake") # Handle user options. option(OPENMP "use OpenMP threading" ON) option(BUILD_POSTEXEC "Build NCEPpost executable" ON) option(BUILD_WITH_WRFIO "Build NCEPpost with WRF-IO library" OFF) +option(BUILD_WITH_IFI "Build NCEPpost with In-Flight Icing (IFI) library if present" OFF) +option(REQUIRE_IFI "Abort if libIFI is not found ; enables BUILD_WITH_IFI=ON" OFF) +option(BUILD_WITH_GTG "Build NCEPpost with NCAR/GTG" OFF) option(ENABLE_DOCS "Enable generation of doxygen-based documentation." OFF) if(NOT CMAKE_BUILD_TYPE MATCHES "^(Debug|Release|RelWithDebInfo|MinSizeRel)$") @@ -47,17 +50,64 @@ find_package(bacio REQUIRED) find_package(crtm REQUIRED) find_package(g2 REQUIRED) find_package(g2tmpl REQUIRED) -find_package(ip REQUIRED) +if(BUILD_WITH_GTG) + find_package(ip REQUIRED) +endif() + +if(INTERNAL_IFI) + if(BUILD_WITH_IFI) + message(SEND_ERROR "Cannot use INTERNAL_IFI with either BUILD_WITH_IFI or REQUIRE_IFI.") + endif() + if(IFI_DIR) + message(SEND_ERROR "When INTERNAL_IFI is specified, do not set IFI_DIR.") + endif() + set(REQUIRE_IFI ON) + set(BUILD_WITH_IFI ON) + set(IFI_FOUND ON) + set(IFI_DIR ${CMAKE_INSTALL_DIR}) + message(NOTICE "Building IFI inside the post.") +else() + if(REQUIRE_IFI) + set(BUILD_WITH_IFI ON) + endif() + + if(BUILD_WITH_IFI) + if(REQUIRE_IFI) + find_package(IFI REQUIRED) + else() + find_package(IFI) + endif() + endif() + if(IFI_FOUND) + message(NOTICE "Linking to IFI external to the post.") + endif() +endif() if(BUILD_POSTEXEC) find_package(nemsio REQUIRED) find_package(sfcio REQUIRED) find_package(sigio REQUIRED) find_package(sp REQUIRED) - find_package(w3nco REQUIRED) + find_package(w3emc REQUIRED) if(BUILD_WITH_WRFIO) find_package(wrf_io REQUIRED) endif() + if(IFI_FOUND) + if(CMAKE_Fortran_COMPILER_ID MATCHES "^Intel$") + set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} -cxxlib") + elseif(CMAKE_Fortran_COMPILER_ID MATCHES "^GNU$") + set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} -lstdc++") + elseif(CMAKE_Fortran_COMPILER_ID MATCHES "^(GNU|AppleClang)$") + # This one is a wild guess. I haven't tried linking a Fortran + # executable with C++ libraries in clang. + set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} -stdlib=libc++ -lc++abi") + endif() + endif() +endif() + +if(IFI_FOUND OR INTERNAL_IFI) + message(NOTICE "Enabling USE_IFI in the post.") + add_definitions(-DUSE_IFI=1) endif() add_subdirectory(sorc) @@ -69,3 +119,28 @@ if(ENABLE_DOCS) add_subdirectory(docs) endif() +### Package config +include(CMakePackageConfigHelpers) +set(CONFIG_INSTALL_DESTINATION lib/cmake/${PROJECT_NAME}) + +export(EXPORT ${PROJECT_NAME}Exports + NAMESPACE ${PROJECT_NAME}:: + FILE ${PROJECT_NAME}-targets.cmake) + +configure_package_config_file( + ${CMAKE_CURRENT_SOURCE_DIR}/cmake/PackageConfig.cmake.in ${CMAKE_BINARY_DIR}/${PROJECT_NAME}-config.cmake + INSTALL_DESTINATION ${CONFIG_INSTALL_DESTINATION}) +install(FILES ${CMAKE_BINARY_DIR}/${PROJECT_NAME}-config.cmake + DESTINATION ${CONFIG_INSTALL_DESTINATION}) + +write_basic_package_version_file( + ${CMAKE_BINARY_DIR}/${PROJECT_NAME}-config-version.cmake + VERSION ${PROJECT_VERSION} + COMPATIBILITY AnyNewerVersion) +install(FILES ${CMAKE_BINARY_DIR}/${PROJECT_NAME}-config-version.cmake + DESTINATION ${CONFIG_INSTALL_DESTINATION}) + +install(EXPORT ${PROJECT_NAME}Exports + NAMESPACE ${PROJECT_NAME}:: + FILE ${PROJECT_NAME}-targets.cmake + DESTINATION ${CONFIG_INSTALL_DESTINATION}) diff --git a/CMakeModules b/CMakeModules deleted file mode 160000 index 09ff76f1f..000000000 --- a/CMakeModules +++ /dev/null @@ -1 +0,0 @@ -Subproject commit 09ff76f1f69ecaab97c59782fc718c124c174dfb diff --git a/Externals.cfg b/Externals.cfg deleted file mode 100644 index 4fa904f9c..000000000 --- a/Externals.cfg +++ /dev/null @@ -1,9 +0,0 @@ -[gtg] -tag = ncep_post_gtg.v2.0.3 -protocol = git -repo_url = git@github.com:NCAR/UPP_GTG.git -local_path = sorc/post_gtg.fd -required = True - -[externals_description] -schema_version = 1.0.0 diff --git a/README.md b/README.md index fc9255270..87803edbb 100644 --- a/README.md +++ b/README.md @@ -8,9 +8,11 @@ output. The UPP is currently used in operations with the Global Forecast System (GFS), GFS Ensemble Forecast System (GEFS), North American Mesoscale (NAM), Rapid Refresh (RAP), High Resolution Rapid Refresh -(HRRR), Short Range Ensemble Forecast (SREF), Hurricane WRF (HWRF) -applications, and is also used in Unified Forecasting System (UFS) -applications. +(HRRR), Short Range Ensemble Forecast (SREF), and Hurricane WRF (HWRF) +applications. It is also used in the Unified Forecasting System (UFS), +including the Rapid Refresh Forecast System (RRFS), Hurricane Application +Forecasting System (HAFS), and the Medium Range Weather (MRW) and Short +Range Weather (SRW) Applications. The UPP provides the capability to compute a variety of diagnostic fields and interpolate to pressure levels or other vertical @@ -41,21 +43,28 @@ Examples of UPP products include: - Radar reflectivity products - Satellite look-alike products -Support for the UFS UPP is provided through the UFS Forum by the -Developmental Testbed Center (DTC) for FV3-based applications. -The UPP uses some of the [NCEPLIBS](https://github.com/NOAA-EMC/NCEPLIBS) -project. +## User Support +Support for the UFS UPP is provided through [GitHub Discussions](https://github.com/NOAA-EMC/UPP/discussions). + +## Documentation +User Guide for latest public release: https://upp.readthedocs.io/en/latest/. + +Technical code-level documentation: https://noaa-emc.github.io/UPP/. + +## Developer Information +Please see review the [wiki](https://github.com/NOAA-EMC/UPP/wiki) ## Authors NCEP/EMC Developers -Code Manager: Wen Meng, Huiya Chuang, Kate Fossell +Code Managers: Wen Meng, Huiya Chuang, Kate Fossell ## Prerequisites -This package requires the following NCEPLIBS packages: +The UPP requires certain NCEPLIB packages to be installed via +the HPC-Stack project. - [NCEPLIBS-g2](https://github.com/NOAA-EMC/NCEPLIBS-g2) - [NCEPLIBS-g2tmpl](https://github.com/NOAA-EMC/NCEPLIBS-g2tmpl) @@ -69,9 +78,9 @@ This package requires the following NCEPLIBS packages: Also required to build NCEPpost executable (cmake option BUILD_POSTEXEC): -- [NCEPLIBS-sigio](https://github.com/NOAA-EMC/NCEPLIBS-sigio) - -- [NCEPLIBS-sfcio](https://github.com/NOAA-EMC/NCEPLIBS-sfcio) - -- [NCEPLIBS-nemsio](https://github.com/NOAA-EMC/NCEPLIBS-nemsio) - +- [NCEPLIBS-sigio](https://github.com/NOAA-EMC/NCEPLIBS-sigio) +- [NCEPLIBS-sfcio](https://github.com/NOAA-EMC/NCEPLIBS-sfcio) +- [NCEPLIBS-nemsio](https://github.com/NOAA-EMC/NCEPLIBS-nemsio) - [NCEPLIBS-gfsio](https://github.com/NOAA-EMC/NCEPLIBS-gfsio) The [NCEPLIBS-wrf_io](https://github.com/NOAA-EMC/NCEPLIBS-wrf_io) @@ -90,29 +99,18 @@ The following third-party libraries are required: Builds include: -- Operational use GNC build as Wen described for both library and - executable (library used for GFS only at this time) - -- MRW App uses UPP packaged with nceplibs and cmake to build/run with - executable (via release/public-v1 branch). - -- SRW App uses UPP repo branch/tag directly and uses cmake to - build/run with executable (via release/public-v2 branch). - -- Community standalone uses UPP repo branch/tag directly and uses - cmake to build/run with executable (via release/public-v2 - branch). For these procedures, we add a - -DCMAKE_PREFIX_PATH=${INSTALL_PREFIX} where INSTALL_PREFIX is the - location of the nceplibs installation as a dependency requirement. - -``` -mkdir build -cd build -cmake .. -DCMAKE_INSTALL_PREFIX=/path/to/install -make -make test -make install -``` +- Inline post (UPP library): Currently only supported for the GFS, RRFS, + HAFS, and the UFS-MRW Application. + +- Offline post (UPP executable): Supported for Regional applications + including SRW, RRFS, HAFS, and standalone applications of UPP. + + +CMake is used to manage all builds of the UPP. +The script `UPP/tests/compile_upp.sh` can be used to automatically +build UPP on fully supported platforms where HPC-stack is supported. +Details in this script can be used to build on new platforms. + ## Disclaimer diff --git a/VERSION b/VERSION index 5219a0df7..275283a18 100644 --- a/VERSION +++ b/VERSION @@ -1 +1 @@ -10.0.8 +11.0.0 diff --git a/ci/spack.yaml b/ci/spack.yaml new file mode 100644 index 000000000..ddfcfe83d --- /dev/null +++ b/ci/spack.yaml @@ -0,0 +1,25 @@ +# Spack environment file to build UPP dependencies +spack: + packages: + all: + compiler: + - intel + - gcc@10:10 + specs: + - netcdf-c@4.7.4 + - netcdf-fortran@4.5.3 + - bacio@2.4.1 + - w3emc@2.9.2 + - g2@3.4.5 + - g2tmpl@1.10.0 + - sp@2.3.3 + - ip@3.3.3 + - sigio@2.3.2 + - sfcio@1.4.1 + - nemsio@2.5.4 + - wrf-io@1.2.0 + - crtm@2.3.0 + view: true + concretizer: + unify: true + diff --git a/cmake/FindNetCDF.cmake b/cmake/FindNetCDF.cmake new file mode 100644 index 000000000..64d039554 --- /dev/null +++ b/cmake/FindNetCDF.cmake @@ -0,0 +1,340 @@ +# (C) Copyright 2011- ECMWF. +# +# This software is licensed under the terms of the Apache Licence Version 2.0 +# which can be obtained at http://www.apache.org/licenses/LICENSE-2.0. +# In applying this licence, ECMWF does not waive the privileges and immunities +# granted to it by virtue of its status as an intergovernmental organisation nor +# does it submit to any jurisdiction. + +# Try to find NetCDF includes and library. +# Supports static and shared libaries and allows each component to be found in sepearte prefixes. +# +# This module defines +# +# - NetCDF_FOUND - System has NetCDF +# - NetCDF_INCLUDE_DIRS - the NetCDF include directories +# - NetCDF_VERSION - the version of NetCDF +# - NetCDF_CONFIG_EXECUTABLE - the netcdf-config executable if found +# - NetCDF_PARALLEL - Boolean True if NetCDF4 has parallel IO support via hdf5 and/or pnetcdf +# - NetCDF_HAS_PNETCDF - Boolean True if NetCDF4 has pnetcdf support +# +# Deprecated Defines +# - NetCDF_LIBRARIES - [Deprecated] Use NetCDF::NetCDF_ targets instead. +# +# +# Following components are available: +# +# - C - C interface to NetCDF (netcdf) +# - CXX - CXX4 interface to NetCDF (netcdf_c++4) +# - Fortran - Fortran interface to NetCDF (netcdff) +# +# For each component the following are defined: +# +# - NetCDF__FOUND - whether the component is found +# - NetCDF__LIBRARIES - the libraries for the component +# - NetCDF__LIBRARY_SHARED - Boolean is true if libraries for component are shared +# - NetCDF__INCLUDE_DIRS - the include directories for specified component +# - NetCDF::NetCDF_ - target of component to be used with target_link_libraries() +# +# The following paths will be searched in order if set in CMake (first priority) or environment (second priority) +# +# - NetCDF_ROOT - root of NetCDF installation +# - NetCDF_PATH - root of NetCDF installation +# +# The search process begins with locating NetCDF Include headers. If these are in a non-standard location, +# set one of the following CMake or environment variables to point to the location: +# +# - NetCDF_INCLUDE_DIR or NetCDF_${comp}_INCLUDE_DIR +# - NetCDF_INCLUDE_DIRS or NetCDF_${comp}_INCLUDE_DIR +# +# Notes: +# +# - Use "NetCDF::NetCDF_" targets only. NetCDF_LIBRARIES exists for backwards compatibility and should not be used. +# - These targets have all the knowledge of include directories and library search directories, and a single +# call to target_link_libraries will provide all these transitive properties to your target. Normally all that is +# needed to build and link against NetCDF is, e.g.: +# target_link_libraries(my_c_tgt PUBLIC NetCDF::NetCDF_C) +# - "NetCDF" is always the preferred naming for this package, its targets, variables, and environment variables +# - For compatibility, some variables are also set/checked using alternate names NetCDF4, NETCDF, or NETCDF4 +# - Environments relying on these older environment variable names should move to using a "NetCDF_ROOT" environment variable +# - Preferred component capitalization follows the CMake LANGUAGES variables: i.e., C, Fortran, CXX +# - For compatibility, alternate capitalizations are supported but should not be used. +# - If no components are defined, all components will be searched +# + +list( APPEND _possible_components C CXX Fortran ) + +## Include names for each component +set( NetCDF_C_INCLUDE_NAME netcdf.h ) +set( NetCDF_CXX_INCLUDE_NAME netcdf ) +set( NetCDF_Fortran_INCLUDE_NAME netcdf.mod ) + +## Library names for each component +set( NetCDF_C_LIBRARY_NAME netcdf ) +set( NetCDF_CXX_LIBRARY_NAME netcdf_c++4 ) +set( NetCDF_Fortran_LIBRARY_NAME netcdff ) + +## Enumerate search components +foreach( _comp ${_possible_components} ) + string( TOUPPER "${_comp}" _COMP ) + set( _arg_${_COMP} ${_comp} ) + set( _name_${_COMP} ${_comp} ) +endforeach() + +set( _search_components C) +foreach( _comp ${${CMAKE_FIND_PACKAGE_NAME}_FIND_COMPONENTS} ) + string( TOUPPER "${_comp}" _COMP ) + set( _arg_${_COMP} ${_comp} ) + list( APPEND _search_components ${_name_${_COMP}} ) + if( NOT _name_${_COMP} ) + message(SEND_ERROR "Find${CMAKE_FIND_PACKAGE_NAME}: COMPONENT ${_comp} is not a valid component. Valid components: ${_possible_components}" ) + endif() +endforeach() +list( REMOVE_DUPLICATES _search_components ) + +## Search hints for finding include directories and libraries +foreach( _comp IN ITEMS "_" "_C_" "_Fortran_" "_CXX_" ) + foreach( _name IN ITEMS NetCDF4 NetCDF NETCDF4 NETCDF ) + foreach( _var IN ITEMS ROOT PATH ) + list(APPEND _search_hints ${${_name}${_comp}${_var}} $ENV{${_name}${_comp}${_var}} ) + list(APPEND _include_search_hints + ${${_name}${_comp}INCLUDE_DIR} $ENV{${_name}${_comp}INCLUDE_DIR} + ${${_name}${_comp}INCLUDE_DIRS} $ENV{${_name}${_comp}INCLUDE_DIRS} ) + endforeach() + endforeach() +endforeach() +#Old-school HPC module env variable names +foreach( _name IN ITEMS NetCDF4 NetCDF NETCDF4 NETCDF ) + foreach( _comp IN ITEMS "_C" "_Fortran" "_CXX" ) + list(APPEND _search_hints ${${_name}} $ENV{${_name}}) + list(APPEND _search_hints ${${_name}${_comp}} $ENV{${_name}${_comp}}) + endforeach() +endforeach() + +## Find headers for each component +set(NetCDF_INCLUDE_DIRS) +set(_new_search_components) +foreach( _comp IN LISTS _search_components ) + if(NOT ${PROJECT_NAME}_NetCDF_${_comp}_FOUND) + list(APPEND _new_search_components ${_comp}) + endif() + find_file(NetCDF_${_comp}_INCLUDE_FILE + NAMES ${NetCDF_${_comp}_INCLUDE_NAME} + DOC "NetCDF ${_comp} include directory" + HINTS ${_include_search_hints} ${_search_hints} + PATH_SUFFIXES include include/netcdf + ) + mark_as_advanced(NetCDF_${_comp}_INCLUDE_FILE) + message(DEBUG "NetCDF_${_comp}_INCLUDE_FILE: ${NetCDF_${_comp}_INCLUDE_FILE}") + if( NetCDF_${_comp}_INCLUDE_FILE ) + get_filename_component(NetCDF_${_comp}_INCLUDE_FILE ${NetCDF_${_comp}_INCLUDE_FILE} ABSOLUTE) + get_filename_component(NetCDF_${_comp}_INCLUDE_DIR ${NetCDF_${_comp}_INCLUDE_FILE} DIRECTORY) + list(APPEND NetCDF_INCLUDE_DIRS ${NetCDF_${_comp}_INCLUDE_DIR}) + endif() +endforeach() +if(NetCDF_INCLUDE_DIRS) + list(REMOVE_DUPLICATES NetCDF_INCLUDE_DIRS) +endif() +set(NetCDF_INCLUDE_DIRS "${NetCDF_INCLUDE_DIRS}" CACHE STRING "NetCDF Include directory paths" FORCE) + +## Find n*-config executables for search components +foreach( _comp IN LISTS _search_components ) + if( _comp MATCHES "^(C)$" ) + set(_conf "c") + elseif( _comp MATCHES "^(Fortran)$" ) + set(_conf "f") + elseif( _comp MATCHES "^(CXX)$" ) + set(_conf "cxx4") + endif() + find_program( NetCDF_${_comp}_CONFIG_EXECUTABLE + NAMES n${_conf}-config + HINTS ${NetCDF_INCLUDE_DIRS} ${_include_search_hints} ${_search_hints} + PATH_SUFFIXES bin Bin ../bin ../../bin + DOC "NetCDF n${_conf}-config helper" ) + message(DEBUG "NetCDF_${_comp}_CONFIG_EXECUTABLE: ${NetCDF_${_comp}_CONFIG_EXECUTABLE}") +endforeach() + +set(_C_libs_flag --libs) +set(_Fortran_libs_flag --flibs) +set(_CXX_libs_flag --libs) +set(_C_includes_flag --includedir) +set(_Fortran_includes_flag --includedir) +set(_CXX_includes_flag --includedir) +function(netcdf_config exec flag output_var) + set(${output_var} False PARENT_SCOPE) + if( exec ) + execute_process( COMMAND ${exec} ${flag} RESULT_VARIABLE _ret OUTPUT_VARIABLE _val) + if( _ret EQUAL 0 ) + string( STRIP ${_val} _val ) + set( ${output_var} ${_val} PARENT_SCOPE ) + endif() + endif() +endfunction() + +## Find libraries for each component +set( NetCDF_LIBRARIES ) +foreach( _comp IN LISTS _search_components ) + string( TOUPPER "${_comp}" _COMP ) + + find_library( NetCDF_${_comp}_LIBRARY + NAMES ${NetCDF_${_comp}_LIBRARY_NAME} + DOC "NetCDF ${_comp} library" + HINTS ${NetCDF_${_comp}_INCLUDE_DIRS} ${_search_hints} + PATH_SUFFIXES lib64 lib ../lib64 ../lib ../../lib64 ../../lib ) + mark_as_advanced( NetCDF_${_comp}_LIBRARY ) + get_filename_component(NetCDF_${_comp}_LIBRARY ${NetCDF_${_comp}_LIBRARY} ABSOLUTE) + set(NetCDF_${_comp}_LIBRARY ${NetCDF_${_comp}_LIBRARY} CACHE STRING "NetCDF ${_comp} library" FORCE) + message(DEBUG "NetCDF_${_comp}_LIBRARY: ${NetCDF_${_comp}_LIBRARY}") + + if( NetCDF_${_comp}_LIBRARY ) + if( NetCDF_${_comp}_LIBRARY MATCHES ".a$" ) + set( NetCDF_${_comp}_LIBRARY_SHARED FALSE ) + set( _library_type STATIC) + else() + list( APPEND NetCDF_LIBRARIES ${NetCDF_${_comp}_LIBRARY} ) + set( NetCDF_${_comp}_LIBRARY_SHARED TRUE ) + set( _library_type SHARED) + endif() + endif() + + #Use nc-config to set per-component LIBRARIES variable if possible + netcdf_config( ${NetCDF_${_comp}_CONFIG_EXECUTABLE} ${_${_comp}_libs_flag} _val ) + if( _val ) + set( NetCDF_${_comp}_LIBRARIES ${_val} ) + if(NOT NetCDF_${_comp}_LIBRARY_SHARED AND NOT NetCDF_${_comp}_FOUND) #Static targets should use nc_config to get a proper link line with all necessary static targets. + list( APPEND NetCDF_LIBRARIES ${NetCDF_${_comp}_LIBRARIES} ) + endif() + else() + set( NetCDF_${_comp}_LIBRARIES ${NetCDF_${_comp}_LIBRARY} ) + if(NOT NetCDF_${_comp}_LIBRARY_SHARED) + message(SEND_ERROR "Unable to properly find NetCDF. Found static libraries at: ${NetCDF_${_comp}_LIBRARY} but could not run nc-config: ${NetCDF_CONFIG_EXECUTABLE}") + endif() + endif() + + #Use nc-config to set per-component INCLUDE_DIRS variable if possible + netcdf_config( ${NetCDF_${_comp}_CONFIG_EXECUTABLE} ${_${_comp}_includes_flag} _val ) + if( _val ) + string( REPLACE " " ";" _val ${_val} ) + set( NetCDF_${_comp}_INCLUDE_DIRS ${_val} ) + else() + set( NetCDF_${_comp}_INCLUDE_DIRS ${NetCDF_${_comp}_INCLUDE_DIR} ) + endif() + + if( NetCDF_${_comp}_LIBRARIES AND NetCDF_${_comp}_INCLUDE_DIRS ) + set( ${CMAKE_FIND_PACKAGE_NAME}_${_arg_${_COMP}}_FOUND TRUE ) + if (NOT TARGET NetCDF::NetCDF_${_comp}) + add_library(NetCDF::NetCDF_${_comp} ${_library_type} IMPORTED) + set_target_properties(NetCDF::NetCDF_${_comp} PROPERTIES + IMPORTED_LOCATION ${NetCDF_${_comp}_LIBRARY} + INTERFACE_INCLUDE_DIRECTORIES "${NetCDF_${_comp}_INCLUDE_DIRS}" + INTERFACE_LINK_LIBRARIES ${NetCDF_${_comp}_LIBRARIES} ) + if( NOT _comp MATCHES "^(C)$" ) + target_link_libraries(NetCDF::NetCDF_${_comp} INTERFACE NetCDF::NetCDF_C) + endif() + endif() + endif() +endforeach() +if(NetCDF_LIBRARIES AND NetCDF_${_comp}_LIBRARY_SHARED) + list(REMOVE_DUPLICATES NetCDF_LIBRARIES) +endif() +set(NetCDF_LIBRARIES "${NetCDF_LIBRARIES}" CACHE STRING "NetCDF library targets" FORCE) + +## Find version via netcdf-config if possible +if (NetCDF_INCLUDE_DIRS) + if( NetCDF_C_CONFIG_EXECUTABLE ) + netcdf_config( ${NetCDF_C_CONFIG_EXECUTABLE} --version _vers ) + if( _vers ) + string(REGEX REPLACE ".* ((([0-9]+)\\.)+([0-9]+)).*" "\\1" NetCDF_VERSION "${_vers}" ) + endif() + else() + foreach( _dir IN LISTS NetCDF_INCLUDE_DIRS) + if( EXISTS "${_dir}/netcdf_meta.h" ) + file(STRINGS "${_dir}/netcdf_meta.h" _netcdf_version_lines + REGEX "#define[ \t]+NC_VERSION_(MAJOR|MINOR|PATCH|NOTE)") + string(REGEX REPLACE ".*NC_VERSION_MAJOR *\([0-9]*\).*" "\\1" _netcdf_version_major "${_netcdf_version_lines}") + string(REGEX REPLACE ".*NC_VERSION_MINOR *\([0-9]*\).*" "\\1" _netcdf_version_minor "${_netcdf_version_lines}") + string(REGEX REPLACE ".*NC_VERSION_PATCH *\([0-9]*\).*" "\\1" _netcdf_version_patch "${_netcdf_version_lines}") + string(REGEX REPLACE ".*NC_VERSION_NOTE *\"\([^\"]*\)\".*" "\\1" _netcdf_version_note "${_netcdf_version_lines}") + set(NetCDF_VERSION "${_netcdf_version_major}.${_netcdf_version_minor}.${_netcdf_version_patch}${_netcdf_version_note}") + unset(_netcdf_version_major) + unset(_netcdf_version_minor) + unset(_netcdf_version_patch) + unset(_netcdf_version_note) + unset(_netcdf_version_lines) + endif() + endforeach() + endif() +endif () + +## Detect additional package properties +netcdf_config(${NetCDF_C_CONFIG_EXECUTABLE} --has-parallel4 _val) +if( NOT _val MATCHES "^(yes|no)$" ) + netcdf_config(${NetCDF_C_CONFIG_EXECUTABLE} --has-parallel _val) +endif() +if( _val MATCHES "^(yes)$" ) + set(NetCDF_PARALLEL TRUE CACHE STRING "NetCDF has parallel IO capability via pnetcdf or hdf5." FORCE) +else() + set(NetCDF_PARALLEL FALSE CACHE STRING "NetCDF has no parallel IO capability." FORCE) +endif() + +## Finalize find_package +include(FindPackageHandleStandardArgs) + +if(NOT NetCDF_FOUND OR _new_search_components) + find_package_handle_standard_args( ${CMAKE_FIND_PACKAGE_NAME} + REQUIRED_VARS NetCDF_INCLUDE_DIRS NetCDF_LIBRARIES + VERSION_VAR NetCDF_VERSION + HANDLE_COMPONENTS ) +endif() + +foreach( _comp IN LISTS _search_components ) + if( NetCDF_${_comp}_FOUND ) + #Record found components to avoid duplication in NetCDF_LIBRARIES for static libraries + set(NetCDF_${_comp}_FOUND ${NetCDF_${_comp}_FOUND} CACHE BOOL "NetCDF ${_comp} Found" FORCE) + #Set a per-package, per-component found variable to communicate between multiple calls to find_package() + set(${PROJECT_NAME}_NetCDF_${_comp}_FOUND True) + endif() +endforeach() + +if( ${CMAKE_FIND_PACKAGE_NAME}_FOUND AND NOT ${CMAKE_FIND_PACKAGE_NAME}_FIND_QUIETLY AND _new_search_components) + message( STATUS "Find${CMAKE_FIND_PACKAGE_NAME} defines targets:" ) + message( STATUS " - NetCDF_VERSION [${NetCDF_VERSION}]") + message( STATUS " - NetCDF_PARALLEL [${NetCDF_PARALLEL}]") + foreach( _comp IN LISTS _new_search_components ) + string( TOUPPER "${_comp}" _COMP ) + message( STATUS " - NetCDF_${_comp}_CONFIG_EXECUTABLE [${NetCDF_${_comp}_CONFIG_EXECUTABLE}]") + if( ${CMAKE_FIND_PACKAGE_NAME}_${_arg_${_COMP}}_FOUND ) + get_filename_component(_root ${NetCDF_${_comp}_INCLUDE_DIR}/.. ABSOLUTE) + if( NetCDF_${_comp}_LIBRARY_SHARED ) + message( STATUS " - NetCDF::NetCDF_${_comp} [SHARED] [Root: ${_root}] Lib: ${NetCDF_${_comp}_LIBRARY} ") + else() + message( STATUS " - NetCDF::NetCDF_${_comp} [STATIC] [Root: ${_root}] Lib: ${NetCDF_${_comp}_LIBRARY} ") + endif() + endif() + endforeach() +endif() + +foreach( _prefix NetCDF NetCDF4 NETCDF NETCDF4 ${CMAKE_FIND_PACKAGE_NAME} ) + set( ${_prefix}_INCLUDE_DIRS ${NetCDF_INCLUDE_DIRS} ) + set( ${_prefix}_LIBRARIES ${NetCDF_LIBRARIES}) + set( ${_prefix}_VERSION ${NetCDF_VERSION} ) + set( ${_prefix}_FOUND ${${CMAKE_FIND_PACKAGE_NAME}_FOUND} ) + set( ${_prefix}_CONFIG_EXECUTABLE ${NetCDF_CONFIG_EXECUTABLE} ) + set( ${_prefix}_PARALLEL ${NetCDF_PARALLEL} ) + + foreach( _comp ${_search_components} ) + string( TOUPPER "${_comp}" _COMP ) + set( _arg_comp ${_arg_${_COMP}} ) + set( ${_prefix}_${_comp}_FOUND ${${CMAKE_FIND_PACKAGE_NAME}_${_arg_comp}_FOUND} ) + set( ${_prefix}_${_COMP}_FOUND ${${CMAKE_FIND_PACKAGE_NAME}_${_arg_comp}_FOUND} ) + set( ${_prefix}_${_arg_comp}_FOUND ${${CMAKE_FIND_PACKAGE_NAME}_${_arg_comp}_FOUND} ) + + set( ${_prefix}_${_comp}_LIBRARIES ${NetCDF_${_comp}_LIBRARIES} ) + set( ${_prefix}_${_COMP}_LIBRARIES ${NetCDF_${_comp}_LIBRARIES} ) + set( ${_prefix}_${_arg_comp}_LIBRARIES ${NetCDF_${_comp}_LIBRARIES} ) + + set( ${_prefix}_${_comp}_INCLUDE_DIRS ${NetCDF_${_comp}_INCLUDE_DIRS} ) + set( ${_prefix}_${_COMP}_INCLUDE_DIRS ${NetCDF_${_comp}_INCLUDE_DIRS} ) + set( ${_prefix}_${_arg_comp}_INCLUDE_DIRS ${NetCDF_${_comp}_INCLUDE_DIRS} ) + endforeach() +endforeach() diff --git a/cmake/PackageConfig.cmake.in b/cmake/PackageConfig.cmake.in index acaf390bf..88f9902d7 100644 --- a/cmake/PackageConfig.cmake.in +++ b/cmake/PackageConfig.cmake.in @@ -30,7 +30,7 @@ find_dependency(ip CONFIG) #find_dependency(sfcio CONFIG) #find_dependency(sigio CONFIG) #find_dependency(sp CONFIG) -#find_dependency(w3nco CONFIG) +#find_dependency(w3emc CONFIG) # Get the build type from library target get_target_property(@PROJECT_NAME@_BUILD_TYPES @PROJECT_NAME@::@PROJECT_NAME@ IMPORTED_CONFIGURATIONS) diff --git a/docs/2D-decomp.md b/docs/2D-decomp.md new file mode 100644 index 000000000..105a28cf0 --- /dev/null +++ b/docs/2D-decomp.md @@ -0,0 +1,21 @@ +# 2-D Decomposition Overview + +**Author:** George Vandenberghe + +**Date:** June 2022 + +## Comparison of 1D vs. 2D Decomposition +The 1D decomposition can read state from a model forecast file, either by reading on rank 0 and scattering, or by doing MPI_IO on the model history file using either nemsio, sigio, or netcdf serial or parallel I/O. Very old post tags also implement the more primitive full state broadcast or (a performance bug rectified 10/17) read the entire state on all tasks. This is mentioned in case a very old tag is encountered. + +The 2D decomposition only supports MPI_IO, namely NetCDF Parallel I/O. But the code is backwards compatible and all I/O methods remain supported for the 1D decomposition cases and works for all cases currently supported by older 1D tags and branches. + +## 2D Decomposition Design + +The 2D decomposition operates on subdomains with some latitudes and some longitudes. The subdomains are lon-lat rectangles rather than strips. This means state must be chopped into pieces in any scatter operation and the pieces reassembled in any gather operation that requires a continuous in memory state. I/O and halo exchanges both require significantly more bookkeeping. + +The structural changes needed for the 2D decomposition are implemented in MPI_FIRST.f and CTLBLK.f. The CTLBLK.f routine contains numerous additional variables describing left and right domain boundaries. Many additional changes are also implemented in EXCH.f to support 2D halos. Many additional routines required addition of the longitude subdomain limits but changes to the layouts are handled in CTLBLK.f and the "many additional routines" do not require additional changes when subdomain shapes are changed and have not been a trouble point. + +Both MPI_FIRST.f and EXCH.f contain significant additional test code to exchange arrays containing grid coordinates and ensure EXACT matches for all exchanges before the domain exchanges are performed. This is intended to trap errors in the larger variety of 2D decomposition layouts that are possible and most of it can eventually be removed or made conditional at build and run time. + +Indices and variables to facilitate the 2D decomposition are found in CTLBLK.f and shared in the rest of UPP through use of CTLBLK.mod. + diff --git a/docs/Acknowledgments.rst b/docs/Acknowledgments.rst index ec69df3a3..f5aa9c98d 100644 --- a/docs/Acknowledgments.rst +++ b/docs/Acknowledgments.rst @@ -18,4 +18,4 @@ acknowledge the Developmental Testbed Center UPP Team. For referencing this document please use: -UPP Users Guide V9.0.0, 24 pp. +UPP Users Guide V10.1.0, 24 pp. diff --git a/docs/AddNewVariable.rst b/docs/AddNewVariable.rst index 3c98540d0..293c89536 100644 --- a/docs/AddNewVariable.rst +++ b/docs/AddNewVariable.rst @@ -9,7 +9,7 @@ requires good knowledge of Fortran and thorough understanding of the code. NOAA UPP developers who wish to add new variables to the UPP, please follow the following procedures: -1. Read and follow procedures on the `UPP wiki page `_ +1. Read and follow procedures on the `UPP wiki page `_ on how to contribute your code changes to the UPP main development. Doing so will ensure your changes are merged to the UPP development quickly. @@ -20,8 +20,8 @@ NOAA UPP developers who wish to add new variables to the UPP, please follow the Hui-Ya Chuang). UPP supports many NOAA operational models and we can not change operational products without coordination and advanced notices. -We encourage non NOAA UPP developers to contact the Developmental Testbed Center (DTC) via the UPP -`forum `_ to make them aware of modifications you +We encourage non NOAA UPP developers to contact EPIC via +`GitHub Discussions `_ to make them aware of modifications you are making. In some cases, if they determine the changes you are making may be relevant for operational and/or community purposes, they will be interested in incorporating your changes into the code base for support and future release. We would then work with you to make this possible. @@ -40,20 +40,20 @@ with examples in the sections below. 1. If no (not available in the NCEP Grib2 Table) - a. NOAA users can email Boi.Vuong@noaa.gov with the following information for your new + a. NOAA users can email Andrew.Benjamin@noaa.gov with the following information for your new variable: variable definition, unit, and what Grib2 discipline and category you think this - variable should belong to. Boi will define your new variable in the `NCEP Grib2 Table + variable should belong to. Andrew will define your new variable in the `NCEP Grib2 Table `_ and inform you of the Grib2 discipline and category numbers you should use. - b. Contact with Boi to update parm/params_grib2_tbl_new.text with your new variable and + b. Contact with Andrew to update parm/params_grib2_tbl_new.text with your new variable and generate a params_grib2_tbl_new which lists in alphabetical order to improve post processing efficiency. c. Save new params_grib2_tbl_new.text and params_grib2_tbl_new under parm/ of your UPP working version. - d. Other users please coordinate through the DTC for the above three steps. + d. Other users please coordinate through EPIC for the above three steps. e. Add a new entry in post_avblflds.xml with your new variable, then follow step B), then step 2) and beyond. You should assign a new UPP ID for your new variable. @@ -79,41 +79,32 @@ with examples in the sections below. This flat file (instead of the xml file) is read in by UPP as it was much faster to read a text file than an xml file. -2. Define the new field: RQSTFLD.F - - This file contains a list of all possible fields to be output by UPP, corresponding Grib1 key-word character - strings, UPP ID (Index) for internal code, and Grib1 IDs. Note that as of December 2020, EMC removed the Grib1 - option from its repository as part of its re-reginnering effort. Users will continue to use UPP ID (Index) for - defining the new variable to be added. However, the character string and Grib1 ID in RQSTFLD.F will no longer - be used by UPP. - -3. Allocate the field: ALLOCATE.f +2. Allocate the field: ALLOCATE.f This file is the instantiation or allocation of the variable. Note that the variables are defined based on the parallel processing capability of UPP - use an example from the file. -4. Deallocate the field: DEALLOCATE.f +3. Deallocate the field: DEALLOCATE.f All good programmers give back their resources when they are done. Please update this routine to return your resource to the system. -5. Declare the new variable: VRBLS2D_mod.f, VRBLS3D_mod.f, or VRBLS4D_mod.f +4. Declare the new variable: VRBLS2D_mod.f, VRBLS3D_mod.f, or VRBLS4D_mod.f The variable is declared in one of these modules defining files depending on its dimension. -6. Read model output if necessary: INITPOST_GFS_NETCDF_PARA.f (current operational netcdf output with GFS V16), - INITPOST_NETCDF.f (LAM FV3 netcdf) +5. Read model output if necessary: INITPOST_NETCDF.f Check first to see if all variables needed to derive your new variable are already available in UPP. If not, you will need to use one of these files for reading the model output files. The appropriate one will need to be chosen based on the model and model output format. -7. Add to appropriate routine for filling the new variable: e.g. SURFCE.f, MDLFLD.f, MDL2P.f, etc +6. Add to appropriate routine for filling the new variable: e.g. SURFCE.f, MDLFLD.f, MDL2P.f, etc This is the place where you will derive your new variable and then fill the Grib2 array with the data to be written out later on. -8. Build or rebuild the code for changes to take effect before running your UPP run script. +7. Build or rebuild the code for changes to take effect before running your UPP run script. **Example Procedure: Steps for adding a new variable ‘TG3’** @@ -122,7 +113,7 @@ with examples in the sections below. and directly output into the Grib2 output files (i.e. in this case no additional computations/calculations are needed for the field). - Additions to each of the routines are highlighted. -- Locations of routines are in EMC_post/sorc/ncep_post.fd unless specified otherwise. +- Locations of routines are in UPP/sorc/ncep_post.fd unless specified otherwise. - The new variable, TG3, added in this example is found in the gfs.t00z.sfcf006.nc; however, both the gfs.t00z.sfcf006.nc and gfs.t00z.atmf006.nc output files are required to run UPP for GFS. - TG3 is the averaged climatology of surface temperature, which the LSMs use to specify bottom soil T, @@ -177,10 +168,10 @@ with examples in the sections below. 2 0 231 1 TG3 - e) Add the new variable to the EMC_post/parm/post_avblflds.xml, which lists all fields available + e) Add the new variable to the UPP/parm/post_avblflds.xml, which lists all fields available for output in GRIB2 format. This file is generally not modified unless adding a new field or modifying an existing one. - - Post_avblfldidx: the unique array number given in the RQSTFLD.f routine. + - Post_avblfldidx: the unique array index number used to store this variable. - Shortname: name describing the variable and level type - Pname: the abbreviation for your variable (should match what is used in params_grib2_tbl_new) - Table info: table used if not standard WMO @@ -229,49 +220,7 @@ with examples in the sections below. This flat file (instead of the xml file) is read in by UPP as it was much faster to read a text file than an xml file. -2. Define the new variable in RQSTFLD.F which includes a list of all possible fields to be output by - UPP, corresponding Grib1 key-word character strings, UPP ID (Index) for internal code, and Grib1 IDs. - Ensure your code is up-to-date and pick a unique identifier that is not already used for the new variable. - Currently, the 900's are being used for new contributions. - - Example Entry - - | ! HWRF addition for v_flux as pass through variable: - - | DATA IFILV(901),AVBL(901),IQ(901),IS(901),AVBLGRB2(901) & - | & /1,'MODEL SFC V WIND STR’,125,001, & - | & 'V_FLX ON surface’/ - - Where: - - **IFILV** Identifies field as MASS/VELOCITY point (e.g. 1) - - **AVBL** is the model output character string variable name for Grib1 (e.g. MODEL SFC V WIND STR) - - **IQ** is the GRIB PDS OCTET 9 (table 2) - Indicator of parameter and units (e.g. 125) - - **IS** is the GRIB PDS OCTET 10 (table 3&3a) - Indicator of type of level or layer (e.g. 001) - - **AVBLGRB2** is the model output character string variable name for Grib2 (e.g. V_FLX ON surface) - - A UNIQUE array Index UPP uses to store this variable in parallel arrays (e.g. **901**) - - User procedure - - Soil temperature (TSOIL) is found in the Grib1 parameter tables as parameter number 085, so this - can be used for the Grib1 ID. - http://www.nco.ncep.noaa.gov/pmb/docs/on388/table2.html - - Use level type 'depth below land surface', which is 111. - http://www.nco.ncep.noaa.gov/pmb/docs/on388/table3.html - - New variables are continuously being added to UPP, so be sure to check that the UPP Index 999 is - still available before using it to add your new variable. If it is already in use, pick the next - available Index. - - Add as: - - :: - - DATA IFILV(999),AVBL(999),IQ(999),IS(999),AVBLGRB2(999) & - & /1,'DEEP SOIL TMP',085,111, & - & 'DEEP TSOIL ON depth_bel_land_sfc'/ - - .. note:: - Since Grib1 is no longer supported, the variable character strings and Grib IDs for Grib1 are not - important, but still need to be included here for correct formatting. - -3. Allocate the new variable in ALLOCATE_ALL.f +2. Allocate the new variable in ALLOCATE_ALL.f This file is the instantiation or allocation of the variable. Note that the variables are defined based on the parallel processing capability of UPP - use an example from the file. @@ -282,7 +231,7 @@ with examples in the sections below. allocate(tg3(im,jsta_2l:jend_2u)) -4. De-allocate the variable to give the resources back in DEALLOCATE.f +3. De-allocate the variable to give the resources back in DEALLOCATE.f All good programmers give back their resources when they are done. Please update this routine to return your resources to the system. @@ -293,7 +242,7 @@ with examples in the sections below. deallocate(tg3) -5. Declare the new variable in the appropriate file depending on its dimensions; +4. Declare the new variable in the appropriate file depending on its dimensions; VRBLS2D_mod.f, VRBLS3D_mod.f or VRBLS4D_mod.f User procedure @@ -304,8 +253,8 @@ with examples in the sections below. tg3(:,:) -6. Read the field from the GFS model output file by adding the new variable into INITPOST_GFS_NETCDF_PARA.f. - This file is used for reading the GFS model FV3 output files in netcdf format. +5. Read the field from the GFS model output file by adding the new variable into INITPOST_NETCDF.f. + This file is used for reading the GFS model FV3 output files in parallel netcdf format. User procedure - Add to top section of the routine in ‘use vrbls2d’ to initiate the new variable as: @@ -324,7 +273,7 @@ with examples in the sections below. call read_netcdf_2d_para(ncid2d,im,jsta,jsta_2l,jend,jend_2u, & spval,VarName,tg3) -7. Determine the appropriate routine to add the new variable to (e.g. SURFCE.f, MDLFLD.f, +6. Determine the appropriate routine to add the new variable to (e.g. SURFCE.f, MDLFLD.f, MDL2P.f, etc). This is the place that you will fill the Grib2 array with the data to be written out later on. The appropriate routine will depend on what your field is. For example, if you have a new diagnostic called foo, and you want it interpolated to pressure levels, you would need to add it to MDL2P.f. If foo was only a @@ -365,14 +314,14 @@ with examples in the sections below. endiF ENDIF -8. Build or rebuild the code for changes to take effect before running your UPP run script. +7. Build or rebuild the code for changes to take effect before running your UPP run script. - User procedure IF you already have the code built. Otherwise, see the User's Guide for instructions on building. + User procedure for building on pre-configured machines. Otherwise, see the User's Guide for instructions on building. :: - >> cd EMC_post/build - >> make install + >> cd UPP/tests + >> ./compile_upp.sh Assuming the modified code built successfully and you were able to produce Grib2 output, you can check the Grib2 file for your new variable. @@ -393,4 +342,3 @@ with examples in the sections below. number of latitudes between pole-equator=96 #points=73728 lat 89.284225 to -89.284225 lon 0.000000 to 359.062500 by 0.937500 - diff --git a/docs/CodeOverview.rst b/docs/CodeOverview.rst index 5ca2284ce..a9689bc19 100644 --- a/docs/CodeOverview.rst +++ b/docs/CodeOverview.rst @@ -2,19 +2,32 @@ Code Overview ************* -The UPP can be used to post-process WRF-ARW, WRF-NMM, NMMB, GFS, CFS, and FV3 forecasts with current -support within UFS applications available for FV3 only. It can ingest FV3 write component files in -netCDF and binarynemsiompiio format. +The UPP is used to post-process model forecasts and provides the capability to compute a variety of +diagnostic fields and interpolate to pressure levels or other vertical coordinates. -UPP Functionalities: +The UPP also incorporates the Joint Center for Satellite Data Assimilation (JCSDA) Community Radiative +Transfer Model (CRTM) to compute model derived brightness temperature (TB) for various instruments and +channels. This additional feature enables the generation of a number of simulated satellite products +including GOES products. - - Interpolates the forecasts from the models native vertical coordinate to NWS standard output - levels (e.g., pressure, height) and computes mean sea level pressure. If the requested parameter - is on a models native level, then no vertical interpolation is performed. +Output from the UPP is in National Weather Service (NWS) and World Meteorological Organization (WMO) +`GRIB2 `_ format and can be used directly by +visualization, plotting, or verification packages, or for further downstream post-processing, e.g. +statistical post-processing techniques. - - Computes diagnostic output quantities (e.g., convective available potential energy, helicity, - relative humidity). A full list of fields that can be generated by the UPP is provided in - :doc:`UPP_GRIB2_Table`. +Examples of UPP products include: - - Outputs the results in NWS and WMO standard GRIB2 format (see - `Grib documentation `_). +- T, Z, humidity, wind, cloud water, cloud ice, rain, and snow on pressure levels +- SLP, shelter level T, humidity, and wind fields +- Precipitation-related fields +- PBL-related fields +- Severe weather products (e.g. CAPE, Vorticity, Wind shear) +- Radiative/Surface fluxes +- Cloud related fields +- Aviation products +- Radar reflectivity products +- Satellite look-alike products + +A full list of fields that can be generated by the UPP is provided in :doc:`UPP_GRIB2_Table`. + +Support for the community UPP is provided through `GitHub Discussions `_. diff --git a/docs/Doxyfile.in b/docs/Doxyfile.in index a5a2d6eb8..f46163210 100644 --- a/docs/Doxyfile.in +++ b/docs/Doxyfile.in @@ -1,3 +1,5 @@ +# Doxyfile 1.9.1 + # This file describes the settings to be used by the documentation system # doxygen (www.doxygen.org) for a project. # @@ -15,11 +17,11 @@ # Project related configuration options #--------------------------------------------------------------------------- -# This tag specifies the encoding used for all characters in the config file -# that follow. The default is UTF-8 which is also the encoding used for all text -# before the first occurrence of this tag. Doxygen uses libiconv (or the iconv -# built into libc) for the transcoding. See http://www.gnu.org/software/libiconv -# for the list of possible encodings. +# This tag specifies the encoding used for all characters in the configuration +# file that follow. The default is UTF-8 which is also the encoding used for all +# text before the first occurrence of this tag. Doxygen uses libiconv (or the +# iconv built into libc) for the transcoding. See +# https://www.gnu.org/software/libiconv/ for the list of possible encodings. # The default value is: UTF-8. DOXYFILE_ENCODING = UTF-8 @@ -44,12 +46,12 @@ PROJECT_NUMBER = @PROJECT_VERSION@ PROJECT_BRIEF = -# With the PROJECT_LOGO tag one can specify an logo or icon that is included in -# the documentation. The maximum height of the logo should not exceed 55 pixels -# and the maximum width should not exceed 200 pixels. Doxygen will copy the logo -# to the output directory. +# With the PROJECT_LOGO tag one can specify a logo or an icon that is included +# in the documentation. The maximum height of the logo should not exceed 55 +# pixels and the maximum width should not exceed 200 pixels. Doxygen will copy +# the logo to the output directory. -PROJECT_LOGO = +PROJECT_LOGO = # The OUTPUT_DIRECTORY tag is used to specify the (relative or absolute) path # into which the generated documentation will be written. If a relative path is @@ -58,7 +60,7 @@ PROJECT_LOGO = OUTPUT_DIRECTORY = -# If the CREATE_SUBDIRS tag is set to YES, then doxygen will create 4096 sub- +# If the CREATE_SUBDIRS tag is set to YES then doxygen will create 4096 sub- # directories (in 2 levels) under the output directory of each output format and # will distribute the generated files over these directories. Enabling this # option can be useful when feeding doxygen a huge amount of source files, where @@ -68,6 +70,14 @@ OUTPUT_DIRECTORY = CREATE_SUBDIRS = NO +# If the ALLOW_UNICODE_NAMES tag is set to YES, doxygen will allow non-ASCII +# characters to appear in the names of generated files. If set to NO, non-ASCII +# characters will be escaped, for example _xE3_x81_x84 will be used for Unicode +# U+3044. +# The default value is: NO. + +ALLOW_UNICODE_NAMES = NO + # The OUTPUT_LANGUAGE tag is used to specify the language in which all # documentation generated by doxygen is written. Doxygen will use this # information to generate all constant output in the proper language. @@ -83,14 +93,22 @@ CREATE_SUBDIRS = NO OUTPUT_LANGUAGE = English -# If the BRIEF_MEMBER_DESC tag is set to YES doxygen will include brief member +# The OUTPUT_TEXT_DIRECTION tag is used to specify the direction in which all +# documentation generated by doxygen is written. Doxygen will use this +# information to generate all generated output in the proper direction. +# Possible values are: None, LTR, RTL and Context. +# The default value is: None. + +OUTPUT_TEXT_DIRECTION = None + +# If the BRIEF_MEMBER_DESC tag is set to YES, doxygen will include brief member # descriptions after the members that are listed in the file and class # documentation (similar to Javadoc). Set to NO to disable this. # The default value is: YES. BRIEF_MEMBER_DESC = YES -# If the REPEAT_BRIEF tag is set to YES doxygen will prepend the brief +# If the REPEAT_BRIEF tag is set to YES, doxygen will prepend the brief # description of a member or function before the detailed description # # Note: If both HIDE_UNDOC_MEMBERS and BRIEF_MEMBER_DESC are set to NO, the @@ -125,7 +143,7 @@ ALWAYS_DETAILED_SEC = YES INLINE_INHERITED_MEMB = YES -# If the FULL_PATH_NAMES tag is set to YES doxygen will prepend the full path +# If the FULL_PATH_NAMES tag is set to YES, doxygen will prepend the full path # before files name in the file list and in the header files. If set to NO the # shortest path that makes the file name unique will be used # The default value is: YES. @@ -169,6 +187,16 @@ SHORT_NAMES = NO JAVADOC_AUTOBRIEF = YES +# If the JAVADOC_BANNER tag is set to YES then doxygen will interpret a line +# such as +# /*************** +# as being the beginning of a Javadoc-style comment "banner". If set to NO, the +# Javadoc-style will behave just like regular comments and it will not be +# interpreted by doxygen. +# The default value is: NO. + +JAVADOC_BANNER = NO + # If the QT_AUTOBRIEF tag is set to YES then doxygen will interpret the first # line (until the first dot) of a Qt-style comment as the brief description. If # set to NO, the Qt-style will behave just like regular Qt-style comments (thus @@ -189,15 +217,23 @@ QT_AUTOBRIEF = YES MULTILINE_CPP_IS_BRIEF = YES +# By default Python docstrings are displayed as preformatted text and doxygen's +# special commands cannot be used. By setting PYTHON_DOCSTRING to NO the +# doxygen's special commands can be used and the contents of the docstring +# documentation blocks is shown as doxygen documentation. +# The default value is: YES. + +PYTHON_DOCSTRING = YES + # If the INHERIT_DOCS tag is set to YES then an undocumented member inherits the # documentation from any documented member that it re-implements. # The default value is: YES. INHERIT_DOCS = YES -# If the SEPARATE_MEMBER_PAGES tag is set to YES, then doxygen will produce a -# new page for each member. If set to NO, the documentation of a member will be -# part of the file/class/namespace that contains it. +# If the SEPARATE_MEMBER_PAGES tag is set to YES then doxygen will produce a new +# page for each member. If set to NO, the documentation of a member will be part +# of the file/class/namespace that contains it. # The default value is: NO. SEPARATE_MEMBER_PAGES = NO @@ -216,16 +252,15 @@ TAB_SIZE = 4 # will allow you to put the command \sideeffect (or @sideeffect) in the # documentation, which will result in a user-defined paragraph with heading # "Side Effects:". You can put \n's in the value part of an alias to insert -# newlines. +# newlines (in the resulting output). You can put ^^ in the value part of an +# alias to insert a newline as if a physical newline was in the original file. +# When you need a literal { or } or , in the value part of an alias you have to +# escape them by means of a backslash (\), this can lead to conflicts with the +# commands \{ and \} for these it is advised to use the version @{ and @} or use +# a double escape (\\{ and \\}) ALIASES = -# This tag can be used to specify a number of word-keyword mappings (TCL only). -# A mapping has the form "name=value". For example adding "class=itcl::class" -# will allow you to use the command class in the itcl::class meaning. - -TCL_SUBST = - # Set the OPTIMIZE_OUTPUT_FOR_C tag to YES if your project consists of C sources # only. Doxygen will then generate output that is more tailored for C. For # instance, some of the names that are used will be different. The list of all @@ -254,25 +289,40 @@ OPTIMIZE_FOR_FORTRAN = YES OPTIMIZE_OUTPUT_VHDL = NO +# Set the OPTIMIZE_OUTPUT_SLICE tag to YES if your project consists of Slice +# sources only. Doxygen will then generate output that is more tailored for that +# language. For instance, namespaces will be presented as modules, types will be +# separated into more groups, etc. +# The default value is: NO. + +OPTIMIZE_OUTPUT_SLICE = NO + # Doxygen selects the parser to use depending on the extension of the files it # parses. With this tag you can assign which parser to use for a given # extension. Doxygen has a built-in mapping, but you can override or extend it # using this tag. The format is ext=language, where ext is a file extension, and -# language is one of the parsers supported by doxygen: IDL, Java, Javascript, -# C#, C, C++, D, PHP, Objective-C, Python, Fortran, VHDL. For instance to make -# doxygen treat .inc files as Fortran files (default is PHP), and .f files as C -# (default is Fortran), use: inc=Fortran f=C. +# language is one of the parsers supported by doxygen: IDL, Java, JavaScript, +# Csharp (C#), C, C++, D, PHP, md (Markdown), Objective-C, Python, Slice, VHDL, +# Fortran (fixed format Fortran: FortranFixed, free formatted Fortran: +# FortranFree, unknown formatted Fortran: Fortran. In the later case the parser +# tries to guess whether the code is fixed or free formatted code, this is the +# default for Fortran type files). For instance to make doxygen treat .inc files +# as Fortran files (default is PHP), and .f files as C (default is Fortran), +# use: inc=Fortran f=C. # -# Note For files without extension you can use no_extension as a placeholder. +# Note: For files without extension you can use no_extension as a placeholder. # # Note that for custom extensions you also need to set FILE_PATTERNS otherwise -# the files are not read by doxygen. +# the files are not read by doxygen. When specifying no_extension you should add +# * to the FILE_PATTERNS. +# +# Note see also the list of default file extension mappings. EXTENSION_MAPPING = # If the MARKDOWN_SUPPORT tag is enabled then doxygen pre-processes all comments # according to the Markdown format, which allows for more readable -# documentation. See http://daringfireball.net/projects/markdown/ for details. +# documentation. See https://daringfireball.net/projects/markdown/ for details. # The output of markdown processing is further processed by doxygen, so you can # mix doxygen, HTML, and XML commands with Markdown formatting. Disable only in # case of backward compatibilities issues. @@ -280,10 +330,19 @@ EXTENSION_MAPPING = MARKDOWN_SUPPORT = YES +# When the TOC_INCLUDE_HEADINGS tag is set to a non-zero value, all headings up +# to that level are automatically included in the table of contents, even if +# they do not have an id attribute. +# Note: This feature currently applies only to Markdown headings. +# Minimum value: 0, maximum value: 99, default value: 5. +# This tag requires that the tag MARKDOWN_SUPPORT is set to YES. + +TOC_INCLUDE_HEADINGS = 5 + # When enabled doxygen tries to link words that correspond to documented # classes, or namespaces to their corresponding documentation. Such a link can -# be prevented in individual cases by by putting a % sign in front of the word -# or globally by setting AUTOLINK_SUPPORT to NO. +# be prevented in individual cases by putting a % sign in front of the word or +# globally by setting AUTOLINK_SUPPORT to NO. # The default value is: YES. AUTOLINK_SUPPORT = YES @@ -305,7 +364,7 @@ BUILTIN_STL_SUPPORT = NO CPP_CLI_SUPPORT = NO # Set the SIP_SUPPORT tag to YES if your project consists of sip (see: -# http://www.riverbankcomputing.co.uk/software/sip/intro) sources only. Doxygen +# https://www.riverbankcomputing.com/software/sip/intro) sources only. Doxygen # will parse them like normal C++ but will assume all classes use public instead # of private inheritance when no explicit protection keyword is present. # The default value is: NO. @@ -323,13 +382,20 @@ SIP_SUPPORT = NO IDL_PROPERTY_SUPPORT = YES # If member grouping is used in the documentation and the DISTRIBUTE_GROUP_DOC -# tag is set to YES, then doxygen will reuse the documentation of the first +# tag is set to YES then doxygen will reuse the documentation of the first # member in the group (if any) for the other members of the group. By default # all members of a group must be documented explicitly. # The default value is: NO. DISTRIBUTE_GROUP_DOC = YES +# If one adds a struct or class to a group and this option is enabled, then also +# any nested class or struct is added to the same group. By default this option +# is disabled and one has to add nested compounds explicitly via \ingroup. +# The default value is: NO. + +GROUP_NESTED_COMPOUNDS = NO + # Set the SUBGROUPING tag to YES to allow class member groups of the same type # (for instance a group of public functions) to be put as a subgroup of that # type (e.g. under the Public Functions section). Set it to NO to prevent @@ -384,11 +450,24 @@ TYPEDEF_HIDES_STRUCT = NO LOOKUP_CACHE_SIZE = 0 +# The NUM_PROC_THREADS specifies the number threads doxygen is allowed to use +# during processing. When set to 0 doxygen will based this on the number of +# cores available in the system. You can set it explicitly to a value larger +# than 0 to get more control over the balance between CPU load and processing +# speed. At this moment only the input processing can be done using multiple +# threads. Since this is still an experimental feature the default is set to 1, +# which efficively disables parallel processing. Please report any issues you +# encounter. Generating dot graphs in parallel is controlled by the +# DOT_NUM_THREADS setting. +# Minimum value: 0, maximum value: 32, default value: 1. + +NUM_PROC_THREADS = 1 + #--------------------------------------------------------------------------- # Build related configuration options #--------------------------------------------------------------------------- -# If the EXTRACT_ALL tag is set to YES doxygen will assume all entities in +# If the EXTRACT_ALL tag is set to YES, doxygen will assume all entities in # documentation are documented, even if no documentation was available. Private # class members and static file members will be hidden unless the # EXTRACT_PRIVATE respectively EXTRACT_STATIC tags are set to YES. @@ -398,35 +477,41 @@ LOOKUP_CACHE_SIZE = 0 EXTRACT_ALL = NO -# If the EXTRACT_PRIVATE tag is set to YES all private members of a class will +# If the EXTRACT_PRIVATE tag is set to YES, all private members of a class will # be included in the documentation. # The default value is: NO. EXTRACT_PRIVATE = NO -# If the EXTRACT_PACKAGE tag is set to YES all members with package or internal +# If the EXTRACT_PRIV_VIRTUAL tag is set to YES, documented private virtual +# methods of a class will be included in the documentation. +# The default value is: NO. + +EXTRACT_PRIV_VIRTUAL = NO + +# If the EXTRACT_PACKAGE tag is set to YES, all members with package or internal # scope will be included in the documentation. # The default value is: NO. EXTRACT_PACKAGE = NO -# If the EXTRACT_STATIC tag is set to YES all static members of a file will be +# If the EXTRACT_STATIC tag is set to YES, all static members of a file will be # included in the documentation. # The default value is: NO. EXTRACT_STATIC = YES -# If the EXTRACT_LOCAL_CLASSES tag is set to YES classes (and structs) defined -# locally in source files will be included in the documentation. If set to NO +# If the EXTRACT_LOCAL_CLASSES tag is set to YES, classes (and structs) defined +# locally in source files will be included in the documentation. If set to NO, # only classes defined in header files are included. Does not have any effect # for Java sources. # The default value is: YES. EXTRACT_LOCAL_CLASSES = NO -# This flag is only useful for Objective-C code. When set to YES local methods, +# This flag is only useful for Objective-C code. If set to YES, local methods, # which are defined in the implementation section but not in the interface are -# included in the documentation. If set to NO only methods in the interface are +# included in the documentation. If set to NO, only methods in the interface are # included. # The default value is: NO. @@ -441,6 +526,13 @@ EXTRACT_LOCAL_METHODS = NO EXTRACT_ANON_NSPACES = YES +# If this flag is set to YES, the name of an unnamed parameter in a declaration +# will be determined by the corresponding definition. By default unnamed +# parameters remain unnamed in the output. +# The default value is: YES. + +RESOLVE_UNNAMED_PARAMS = YES + # If the HIDE_UNDOC_MEMBERS tag is set to YES, doxygen will hide all # undocumented members inside documented classes or files. If set to NO these # members will be included in the various overviews, but no documentation @@ -451,21 +543,21 @@ HIDE_UNDOC_MEMBERS = NO # If the HIDE_UNDOC_CLASSES tag is set to YES, doxygen will hide all # undocumented classes that are normally visible in the class hierarchy. If set -# to NO these classes will be included in the various overviews. This option has -# no effect if EXTRACT_ALL is enabled. +# to NO, these classes will be included in the various overviews. This option +# has no effect if EXTRACT_ALL is enabled. # The default value is: NO. HIDE_UNDOC_CLASSES = NO # If the HIDE_FRIEND_COMPOUNDS tag is set to YES, doxygen will hide all friend -# (class|struct|union) declarations. If set to NO these declarations will be -# included in the documentation. +# declarations. If set to NO, these declarations will be included in the +# documentation. # The default value is: NO. HIDE_FRIEND_COMPOUNDS = NO # If the HIDE_IN_BODY_DOCS tag is set to YES, doxygen will hide any -# documentation blocks found inside the body of a function. If set to NO these +# documentation blocks found inside the body of a function. If set to NO, these # blocks will be appended to the function's detailed documentation block. # The default value is: NO. @@ -478,22 +570,36 @@ HIDE_IN_BODY_DOCS = NO INTERNAL_DOCS = NO -# If the CASE_SENSE_NAMES tag is set to NO then doxygen will only generate file -# names in lower-case letters. If set to YES upper-case letters are also -# allowed. This is useful if you have classes or files whose names only differ -# in case and if your file system supports case sensitive file names. Windows -# and Mac users are advised to set this option to NO. +# With the correct setting of option CASE_SENSE_NAMES doxygen will better be +# able to match the capabilities of the underlying filesystem. In case the +# filesystem is case sensitive (i.e. it supports files in the same directory +# whose names only differ in casing), the option must be set to YES to properly +# deal with such files in case they appear in the input. For filesystems that +# are not case sensitive the option should be be set to NO to properly deal with +# output files written for symbols that only differ in casing, such as for two +# classes, one named CLASS and the other named Class, and to also support +# references to files without having to specify the exact matching casing. On +# Windows (including Cygwin) and MacOS, users should typically set this option +# to NO, whereas on Linux or other Unix flavors it should typically be set to +# YES. # The default value is: system dependent. CASE_SENSE_NAMES = YES # If the HIDE_SCOPE_NAMES tag is set to NO then doxygen will show members with -# their full class and namespace scopes in the documentation. If set to YES the +# their full class and namespace scopes in the documentation. If set to YES, the # scope will be hidden. # The default value is: NO. HIDE_SCOPE_NAMES = NO +# If the HIDE_COMPOUND_REFERENCE tag is set to NO (default) then doxygen will +# append additional text to a page's title, such as Class Reference. If set to +# YES the compound reference will be hidden. +# The default value is: NO. + +HIDE_COMPOUND_REFERENCE= NO + # If the SHOW_INCLUDE_FILES tag is set to YES then doxygen will put a list of # the files that are included by a file in the documentation of that file. # The default value is: YES. @@ -521,14 +627,14 @@ INLINE_INFO = YES # If the SORT_MEMBER_DOCS tag is set to YES then doxygen will sort the # (detailed) documentation of file and class members alphabetically by member -# name. If set to NO the members will appear in declaration order. +# name. If set to NO, the members will appear in declaration order. # The default value is: YES. SORT_MEMBER_DOCS = YES # If the SORT_BRIEF_DOCS tag is set to YES then doxygen will sort the brief # descriptions of file, namespace and class members alphabetically by member -# name. If set to NO the members will appear in declaration order. Note that +# name. If set to NO, the members will appear in declaration order. Note that # this will also influence the order of the classes in the class list. # The default value is: NO. @@ -573,27 +679,25 @@ SORT_BY_SCOPE_NAME = NO STRICT_PROTO_MATCHING = NO -# The GENERATE_TODOLIST tag can be used to enable ( YES) or disable ( NO) the -# todo list. This list is created by putting \todo commands in the -# documentation. +# The GENERATE_TODOLIST tag can be used to enable (YES) or disable (NO) the todo +# list. This list is created by putting \todo commands in the documentation. # The default value is: YES. GENERATE_TODOLIST = NO -# The GENERATE_TESTLIST tag can be used to enable ( YES) or disable ( NO) the -# test list. This list is created by putting \test commands in the -# documentation. +# The GENERATE_TESTLIST tag can be used to enable (YES) or disable (NO) the test +# list. This list is created by putting \test commands in the documentation. # The default value is: YES. GENERATE_TESTLIST = NO -# The GENERATE_BUGLIST tag can be used to enable ( YES) or disable ( NO) the bug +# The GENERATE_BUGLIST tag can be used to enable (YES) or disable (NO) the bug # list. This list is created by putting \bug commands in the documentation. # The default value is: YES. GENERATE_BUGLIST = NO -# The GENERATE_DEPRECATEDLIST tag can be used to enable ( YES) or disable ( NO) +# The GENERATE_DEPRECATEDLIST tag can be used to enable (YES) or disable (NO) # the deprecated list. This list is created by putting \deprecated commands in # the documentation. # The default value is: YES. @@ -618,8 +722,8 @@ ENABLED_SECTIONS = MAX_INITIALIZER_LINES = 30 # Set the SHOW_USED_FILES tag to NO to disable the list of files generated at -# the bottom of the documentation of classes and structs. If set to YES the list -# will mention the files that were used to generate the documentation. +# the bottom of the documentation of classes and structs. If set to YES, the +# list will mention the files that were used to generate the documentation. # The default value is: YES. SHOW_USED_FILES = YES @@ -659,16 +763,15 @@ FILE_VERSION_FILTER = # DoxygenLayout.xml, doxygen will parse it automatically even if the LAYOUT_FILE # tag is left empty. -LAYOUT_FILE = +LAYOUT_FILE = # The CITE_BIB_FILES tag can be used to specify one or more bib files containing # the reference definitions. This must be a list of .bib files. The .bib # extension is automatically appended if omitted. This requires the bibtex tool -# to be installed. See also http://en.wikipedia.org/wiki/BibTeX for more info. +# to be installed. See also https://en.wikipedia.org/wiki/BibTeX for more info. # For LaTeX the style of the bibliography can be controlled using # LATEX_BIB_STYLE. To use this feature you need bibtex and perl available in the -# search path. Do not use file names with spaces, bibtex cannot handle them. See -# also \cite for info how to create references. +# search path. See also \cite for info how to create references. CITE_BIB_FILES = @@ -684,21 +787,20 @@ CITE_BIB_FILES = QUIET = NO # The WARNINGS tag can be used to turn on/off the warning messages that are -# generated to standard error ( stderr) by doxygen. If WARNINGS is set to YES +# generated to standard error (stderr) by doxygen. If WARNINGS is set to YES # this implies that the warnings are on. # # Tip: Turn warnings on while writing the documentation. # The default value is: YES. WARNINGS = YES -WARN_AS_ERROR = YES -# If the WARN_IF_UNDOCUMENTED tag is set to YES, then doxygen will generate +# If the WARN_IF_UNDOCUMENTED tag is set to YES then doxygen will generate # warnings for undocumented members. If EXTRACT_ALL is set to YES then this flag # will automatically be disabled. # The default value is: YES. -WARN_IF_UNDOCUMENTED = NO +WARN_IF_UNDOCUMENTED = YES # If the WARN_IF_DOC_ERROR tag is set to YES, doxygen will generate warnings for # potential errors in the documentation, such as not documenting some parameters @@ -710,12 +812,22 @@ WARN_IF_DOC_ERROR = YES # This WARN_NO_PARAMDOC option can be enabled to get warnings for functions that # are documented, but have no documentation for their parameters or return -# value. If set to NO doxygen will only warn about wrong or incomplete parameter -# documentation, but not about the absence of documentation. +# value. If set to NO, doxygen will only warn about wrong or incomplete +# parameter documentation, but not about the absence of documentation. If +# EXTRACT_ALL is set to YES then this flag will automatically be disabled. # The default value is: NO. WARN_NO_PARAMDOC = YES +# If the WARN_AS_ERROR tag is set to YES then doxygen will immediately stop when +# a warning is encountered. If the WARN_AS_ERROR tag is set to FAIL_ON_WARNINGS +# then doxygen will continue running as if WARN_AS_ERROR tag is set to NO, but +# at the end of the doxygen process doxygen will return with a non-zero status. +# Possible values are: NO, YES and FAIL_ON_WARNINGS. +# The default value is: NO. + +WARN_AS_ERROR = NO + # The WARN_FORMAT tag determines the format of the warning messages that doxygen # can produce. The string should contain the $file, $line, and $text tags, which # will be replaced by the file and line number from which the warning originated @@ -739,30 +851,47 @@ WARN_LOGFILE = # The INPUT tag is used to specify the files and/or directories that contain # documented source files. You may enter file names like myfile.cpp or # directories like /usr/src/myproject. Separate the files or directories with -# spaces. +# spaces. See also FILE_PATTERNS and EXTENSION_MAPPING # Note: If this tag is empty the current directory is searched. -INPUT = @abs_top_srcdir@/docs/user_guide.md @abs_top_srcdir@/sorc/ncep_post.fd @config_srcdir@ +INPUT = @abs_top_srcdir@/docs/user_guide.md \ + = @abs_top_srcdir@/docs/2D-decomp.md \ + @abs_top_srcdir@/sorc/ncep_post.fd \ + @config_srcdir@ # This tag can be used to specify the character encoding of the source files # that doxygen parses. Internally doxygen uses the UTF-8 encoding. Doxygen uses # libiconv (or the iconv built into libc) for the transcoding. See the libiconv -# documentation (see: http://www.gnu.org/software/libiconv) for the list of -# possible encodings. +# documentation (see: +# https://www.gnu.org/software/libiconv/) for the list of possible encodings. # The default value is: UTF-8. INPUT_ENCODING = UTF-8 # If the value of the INPUT tag contains directories, you can use the # FILE_PATTERNS tag to specify one or more wildcard patterns (like *.cpp and -# *.h) to filter out the source-files in the directories. If left blank the -# following patterns are tested:*.c, *.cc, *.cxx, *.cpp, *.c++, *.java, *.ii, -# *.ixx, *.ipp, *.i++, *.inl, *.idl, *.ddl, *.odl, *.h, *.hh, *.hxx, *.hpp, -# *.h++, *.cs, *.d, *.php, *.php4, *.php5, *.phtml, *.inc, *.m, *.markdown, -# *.md, *.mm, *.dox, *.py, *.f90, *.f, *.for, *.tcl, *.vhd, *.vhdl, *.ucf, -# *.qsf, *.as and *.js. - -FILE_PATTERNS = *.F90 *.f90 *.f *.F *.c *.h +# *.h) to filter out the source-files in the directories. +# +# Note that for custom extensions or not directly supported extensions you also +# need to set EXTENSION_MAPPING for the extension otherwise the files are not +# read by doxygen. +# +# Note the list of default checked file patterns might differ from the list of +# default file extension mappings. +# +# If left blank the following patterns are tested:*.c, *.cc, *.cxx, *.cpp, +# *.c++, *.java, *.ii, *.ixx, *.ipp, *.i++, *.inl, *.idl, *.ddl, *.odl, *.h, +# *.hh, *.hxx, *.hpp, *.h++, *.cs, *.d, *.php, *.php4, *.php5, *.phtml, *.inc, +# *.m, *.markdown, *.md, *.mm, *.dox (to be provided as doxygen C comment), +# *.py, *.pyw, *.f90, *.f95, *.f03, *.f08, *.f18, *.f, *.for, *.vhd, *.vhdl, +# *.ucf, *.qsf and *.ice. + +FILE_PATTERNS = *.F90 \ + *.f90 \ + *.f \ + *.F \ + *.c \ + *.h # The RECURSIVE tag can be used to specify whether or not subdirectories should # be searched for input files as well. @@ -810,7 +939,7 @@ EXCLUDE_SYMBOLS = # that contain example code fragments that are included (see the \include # command). -EXAMPLE_PATH = +EXAMPLE_PATH = # If the value of the EXAMPLE_PATH tag contains directories, you can use the # EXAMPLE_PATTERNS tag to specify one or more wildcard pattern (like *.cpp and @@ -830,7 +959,7 @@ EXAMPLE_RECURSIVE = NO # that contain images that are to be included in the documentation (see the # \image command). -IMAGE_PATH = +IMAGE_PATH = # The INPUT_FILTER tag can be used to specify a program that doxygen should # invoke to filter for each input file. Doxygen will invoke the filter program @@ -846,6 +975,10 @@ IMAGE_PATH = # Note that the filter must not add or remove lines; it is applied before the # code is scanned, but not when the output code is generated. If lines are added # or removed, the anchors will not be placed correctly. +# +# Note that for custom extensions or not directly supported extensions you also +# need to set EXTENSION_MAPPING for the extension otherwise the files are not +# properly processed by doxygen. INPUT_FILTER = @@ -855,11 +988,15 @@ INPUT_FILTER = # (like *.cpp=my_cpp_filter). See INPUT_FILTER for further information on how # filters are used. If the FILTER_PATTERNS tag is empty or if none of the # patterns match the file name, INPUT_FILTER is applied. +# +# Note that for custom extensions or not directly supported extensions you also +# need to set EXTENSION_MAPPING for the extension otherwise the files are not +# properly processed by doxygen. FILTER_PATTERNS = # If the FILTER_SOURCE_FILES tag is set to YES, the input filter (if set using -# INPUT_FILTER ) will also be used to filter the input files that are used for +# INPUT_FILTER) will also be used to filter the input files that are used for # producing the source files to browse (i.e. when SOURCE_BROWSER is set to YES). # The default value is: NO. @@ -878,7 +1015,7 @@ FILTER_SOURCE_PATTERNS = # (index.html). This can be useful if you have a project on for instance GitHub # and want to reuse the introduction page also for the doxygen output. -USE_MDFILE_AS_MAINPAGE = @abs_top_srcdir@/docs/sp_user_guide.md +USE_MDFILE_AS_MAINPAGE = @abs_top_srcdir@/docs/sp_user_guide.md #--------------------------------------------------------------------------- # Configuration options related to source browsing @@ -907,19 +1044,19 @@ INLINE_SOURCES = NO STRIP_CODE_COMMENTS = YES # If the REFERENCED_BY_RELATION tag is set to YES then for each documented -# function all documented functions referencing it will be listed. +# entity all documented functions referencing it will be listed. # The default value is: NO. -REFERENCED_BY_RELATION = NO +REFERENCED_BY_RELATION = YES # If the REFERENCES_RELATION tag is set to YES then for each documented function # all documented entities called/used by that function will be listed. # The default value is: NO. -REFERENCES_RELATION = NO +REFERENCES_RELATION = YES # If the REFERENCES_LINK_SOURCE tag is set to YES and SOURCE_BROWSER tag is set -# to YES, then the hyperlinks from functions in REFERENCES_RELATION and +# to YES then the hyperlinks from functions in REFERENCES_RELATION and # REFERENCED_BY_RELATION lists will link to the source code. Otherwise they will # link to the documentation. # The default value is: YES. @@ -939,12 +1076,12 @@ SOURCE_TOOLTIPS = YES # If the USE_HTAGS tag is set to YES then the references to source code will # point to the HTML generated by the htags(1) tool instead of doxygen built-in # source browser. The htags tool is part of GNU's global source tagging system -# (see http://www.gnu.org/software/global/global.html). You will need version +# (see https://www.gnu.org/software/global/global.html). You will need version # 4.8.6 or higher. # # To use it do the following: # - Install the latest version of global -# - Enable SOURCE_BROWSER and USE_HTAGS in the config file +# - Enable SOURCE_BROWSER and USE_HTAGS in the configuration file # - Make sure the INPUT points to the root of the source tree # - Run doxygen as normal # @@ -966,16 +1103,22 @@ USE_HTAGS = NO VERBATIM_HEADERS = YES -# If the CLANG_ASSISTED_PARSING tag is set to YES, then doxygen will use the -# clang parser (see: http://clang.llvm.org/) for more accurate parsing at the -# cost of reduced performance. This can be particularly helpful with template -# rich C++ code for which doxygen's built-in parser lacks the necessary type -# information. +# If the CLANG_ASSISTED_PARSING tag is set to YES then doxygen will use the +# clang parser (see: +# http://clang.llvm.org/) for more accurate parsing at the cost of reduced +# performance. This can be particularly helpful with template rich C++ code for +# which doxygen's built-in parser lacks the necessary type information. # Note: The availability of this option depends on whether or not doxygen was -# compiled with the --with-libclang option. +# generated with the -Duse_libclang=ON option for CMake. # The default value is: NO. -# CLANG_ASSISTED_PARSING = NO +CLANG_ASSISTED_PARSING = NO + +# If clang assisted parsing is enabled and the CLANG_ADD_INC_PATHS tag is set to +# YES then doxygen will add the directory of each input to the include path. +# The default value is: YES. + +CLANG_ADD_INC_PATHS = YES # If clang assisted parsing is enabled you can provide the compiler with command # line options that you would normally use when invoking the compiler. Note that @@ -983,7 +1126,20 @@ VERBATIM_HEADERS = YES # specified with INPUT and INCLUDE_PATH. # This tag requires that the tag CLANG_ASSISTED_PARSING is set to YES. -# CLANG_OPTIONS = +CLANG_OPTIONS = + +# If clang assisted parsing is enabled you can provide the clang parser with the +# path to the directory containing a file called compile_commands.json. This +# file is the compilation database (see: +# http://clang.llvm.org/docs/HowToSetupToolingForLLVM.html) containing the +# options used when the source files were built. This is equivalent to +# specifying the -p option to a clang tool, such as clang-check. These options +# will then be passed to the parser. Any options specified with CLANG_OPTIONS +# will be added as well. +# Note: The availability of this option depends on whether or not doxygen was +# generated with the -Duse_libclang=ON option for CMake. + +CLANG_DATABASE_PATH = #--------------------------------------------------------------------------- # Configuration options related to the alphabetical class index @@ -996,13 +1152,6 @@ VERBATIM_HEADERS = YES ALPHABETICAL_INDEX = NO -# The COLS_IN_ALPHA_INDEX tag can be used to specify the number of columns in -# which the alphabetical index list will be split. -# Minimum value: 1, maximum value: 20, default value: 5. -# This tag requires that the tag ALPHABETICAL_INDEX is set to YES. - -COLS_IN_ALPHA_INDEX = 5 - # In case all classes in a project start with a common prefix, all classes will # be put under the same header in the alphabetical index. The IGNORE_PREFIX tag # can be used to specify a prefix (or a list of prefixes) that should be ignored @@ -1015,7 +1164,7 @@ IGNORE_PREFIX = # Configuration options related to the HTML output #--------------------------------------------------------------------------- -# If the GENERATE_HTML tag is set to YES doxygen will generate HTML output +# If the GENERATE_HTML tag is set to YES, doxygen will generate HTML output # The default value is: YES. GENERATE_HTML = YES @@ -1053,7 +1202,7 @@ HTML_FILE_EXTENSION = .html # of the possible markers and block names see the documentation. # This tag requires that the tag GENERATE_HTML is set to YES. -HTML_HEADER = +HTML_HEADER = # The HTML_FOOTER tag can be used to specify a user-defined HTML footer for each # generated HTML page. If the tag is left blank doxygen will generate a standard @@ -1063,7 +1212,7 @@ HTML_HEADER = # that doxygen normally uses. # This tag requires that the tag GENERATE_HTML is set to YES. -HTML_FOOTER = +HTML_FOOTER = # The HTML_STYLESHEET tag can be used to specify a user-defined cascading style # sheet that is used by each HTML page. It can be used to fine-tune the look of @@ -1077,22 +1226,18 @@ HTML_FOOTER = HTML_STYLESHEET = -# The HTML_EXTRA_STYLESHEET tag can be used to specify an additional user- -# defined cascading style sheet that is included after the standard style sheets +# The HTML_EXTRA_STYLESHEET tag can be used to specify additional user-defined +# cascading style sheets that are included after the standard style sheets # created by doxygen. Using this option one can overrule certain style aspects. # This is preferred over using HTML_STYLESHEET since it does not replace the # standard style sheet and is therefore more robust against future updates. -# Doxygen will copy the style sheet file to the output directory. For an example -# see the documentation. +# Doxygen will copy the style sheet files to the output directory. +# Note: The order of the extra style sheet files is of importance (e.g. the last +# style sheet in the list overrules the setting of the previous ones in the +# list). For an example see the documentation. # This tag requires that the tag GENERATE_HTML is set to YES. -HTML_EXTRA_STYLESHEET = - -# If the HTML_ALIGN_MEMBERS tag is set to YES, the members of classes, -# files or namespaces will be aligned in HTML using tables. If set to -# NO a bullet list will be used. - -# HTML_ALIGN_MEMBERS = YES +HTML_EXTRA_STYLESHEET = # The HTML_EXTRA_FILES tag can be used to specify one or more extra images or # other source files which should be copied to the HTML output directory. Note @@ -1105,9 +1250,9 @@ HTML_EXTRA_STYLESHEET = HTML_EXTRA_FILES = # The HTML_COLORSTYLE_HUE tag controls the color of the HTML output. Doxygen -# will adjust the colors in the stylesheet and background images according to +# will adjust the colors in the style sheet and background images according to # this color. Hue is specified as an angle on a colorwheel, see -# http://en.wikipedia.org/wiki/Hue for more information. For instance the value +# https://en.wikipedia.org/wiki/Hue for more information. For instance the value # 0 represents red, 60 is yellow, 120 is green, 180 is cyan, 240 is blue, 300 # purple, and 360 is red again. # Minimum value: 0, maximum value: 359, default value: 220. @@ -1136,12 +1281,24 @@ HTML_COLORSTYLE_GAMMA = 80 # If the HTML_TIMESTAMP tag is set to YES then the footer of each generated HTML # page will contain the date and time when the page was generated. Setting this -# to NO can help when comparing the output of multiple runs. -# The default value is: YES. +# to YES can help to show when doxygen was last run and thus if the +# documentation is up to date. +# The default value is: NO. # This tag requires that the tag GENERATE_HTML is set to YES. HTML_TIMESTAMP = NO +# If the HTML_DYNAMIC_MENUS tag is set to YES then the generated HTML +# documentation will contain a main index with vertical navigation menus that +# are dynamically created via JavaScript. If disabled, the navigation index will +# consists of multiple levels of tabs that are statically embedded in every HTML +# page. Disable this option to support browsers that do not have JavaScript, +# like the Qt help browser. +# The default value is: YES. +# This tag requires that the tag GENERATE_HTML is set to YES. + +HTML_DYNAMIC_MENUS = YES + # If the HTML_DYNAMIC_SECTIONS tag is set to YES then the generated HTML # documentation will contain sections that can be hidden and shown after the # page has loaded. @@ -1165,13 +1322,14 @@ HTML_INDEX_NUM_ENTRIES = 100 # If the GENERATE_DOCSET tag is set to YES, additional index files will be # generated that can be used as input for Apple's Xcode 3 integrated development -# environment (see: http://developer.apple.com/tools/xcode/), introduced with -# OSX 10.5 (Leopard). To create a documentation set, doxygen will generate a -# Makefile in the HTML output directory. Running make will produce the docset in -# that directory and running make install will install the docset in +# environment (see: +# https://developer.apple.com/xcode/), introduced with OSX 10.5 (Leopard). To +# create a documentation set, doxygen will generate a Makefile in the HTML +# output directory. Running make will produce the docset in that directory and +# running make install will install the docset in # ~/Library/Developer/Shared/Documentation/DocSets so that Xcode will find it at -# startup. See http://developer.apple.com/tools/creatingdocsetswithdoxygen.html -# for more information. +# startup. See https://developer.apple.com/library/archive/featuredarticles/Doxy +# genXcode/_index.html for more information. # The default value is: NO. # This tag requires that the tag GENERATE_HTML is set to YES. @@ -1210,8 +1368,8 @@ DOCSET_PUBLISHER_NAME = Publisher # If the GENERATE_HTMLHELP tag is set to YES then doxygen generates three # additional HTML index files: index.hhp, index.hhc, and index.hhk. The # index.hhp is a project file that can be read by Microsoft's HTML Help Workshop -# (see: http://www.microsoft.com/en-us/download/details.aspx?id=21138) on -# Windows. +# (see: +# https://www.microsoft.com/en-us/download/details.aspx?id=21138) on Windows. # # The HTML Help Workshop contains a compiler that can convert all HTML output # generated by doxygen into a single compiled HTML file (.chm). Compiled HTML @@ -1233,28 +1391,29 @@ GENERATE_HTMLHELP = NO CHM_FILE = # The HHC_LOCATION tag can be used to specify the location (absolute path -# including file name) of the HTML help compiler ( hhc.exe). If non-empty +# including file name) of the HTML help compiler (hhc.exe). If non-empty, # doxygen will try to run the HTML help compiler on the generated index.hhp. # The file has to be specified with full path. # This tag requires that the tag GENERATE_HTMLHELP is set to YES. HHC_LOCATION = -# The GENERATE_CHI flag controls if a separate .chi index file is generated ( -# YES) or that it should be included in the master .chm file ( NO). +# The GENERATE_CHI flag controls if a separate .chi index file is generated +# (YES) or that it should be included in the main .chm file (NO). # The default value is: NO. # This tag requires that the tag GENERATE_HTMLHELP is set to YES. GENERATE_CHI = NO -# The CHM_INDEX_ENCODING is used to encode HtmlHelp index ( hhk), content ( hhc) +# The CHM_INDEX_ENCODING is used to encode HtmlHelp index (hhk), content (hhc) # and project file content. # This tag requires that the tag GENERATE_HTMLHELP is set to YES. CHM_INDEX_ENCODING = -# The BINARY_TOC flag controls whether a binary table of contents is generated ( -# YES) or a normal table of contents ( NO) in the .chm file. +# The BINARY_TOC flag controls whether a binary table of contents is generated +# (YES) or a normal table of contents (NO) in the .chm file. Furthermore it +# enables the Previous and Next buttons. # The default value is: NO. # This tag requires that the tag GENERATE_HTMLHELP is set to YES. @@ -1285,7 +1444,8 @@ QCH_FILE = # The QHP_NAMESPACE tag specifies the namespace to use when generating Qt Help # Project output. For more information please see Qt Help Project / Namespace -# (see: http://qt-project.org/doc/qt-4.8/qthelpproject.html#namespace). +# (see: +# https://doc.qt.io/archives/qt-4.8/qthelpproject.html#namespace). # The default value is: org.doxygen.Project. # This tag requires that the tag GENERATE_QHP is set to YES. @@ -1293,8 +1453,8 @@ QHP_NAMESPACE = org.doxygen.Project # The QHP_VIRTUAL_FOLDER tag specifies the namespace to use when generating Qt # Help Project output. For more information please see Qt Help Project / Virtual -# Folders (see: http://qt-project.org/doc/qt-4.8/qthelpproject.html#virtual- -# folders). +# Folders (see: +# https://doc.qt.io/archives/qt-4.8/qthelpproject.html#virtual-folders). # The default value is: doc. # This tag requires that the tag GENERATE_QHP is set to YES. @@ -1302,30 +1462,30 @@ QHP_VIRTUAL_FOLDER = doc # If the QHP_CUST_FILTER_NAME tag is set, it specifies the name of a custom # filter to add. For more information please see Qt Help Project / Custom -# Filters (see: http://qt-project.org/doc/qt-4.8/qthelpproject.html#custom- -# filters). +# Filters (see: +# https://doc.qt.io/archives/qt-4.8/qthelpproject.html#custom-filters). # This tag requires that the tag GENERATE_QHP is set to YES. QHP_CUST_FILTER_NAME = # The QHP_CUST_FILTER_ATTRS tag specifies the list of the attributes of the # custom filter to add. For more information please see Qt Help Project / Custom -# Filters (see: http://qt-project.org/doc/qt-4.8/qthelpproject.html#custom- -# filters). +# Filters (see: +# https://doc.qt.io/archives/qt-4.8/qthelpproject.html#custom-filters). # This tag requires that the tag GENERATE_QHP is set to YES. QHP_CUST_FILTER_ATTRS = # The QHP_SECT_FILTER_ATTRS tag specifies the list of the attributes this # project's filter section matches. Qt Help Project / Filter Attributes (see: -# http://qt-project.org/doc/qt-4.8/qthelpproject.html#filter-attributes). +# https://doc.qt.io/archives/qt-4.8/qthelpproject.html#filter-attributes). # This tag requires that the tag GENERATE_QHP is set to YES. QHP_SECT_FILTER_ATTRS = -# The QHG_LOCATION tag can be used to specify the location of Qt's -# qhelpgenerator. If non-empty doxygen will try to run qhelpgenerator on the -# generated .qhp file. +# The QHG_LOCATION tag can be used to specify the location (absolute path +# including file name) of Qt's qhelpgenerator. If non-empty doxygen will try to +# run qhelpgenerator on the generated .qhp file. # This tag requires that the tag GENERATE_QHP is set to YES. QHG_LOCATION = @@ -1362,12 +1522,19 @@ ECLIPSE_DOC_ID = org.doxygen.Project DISABLE_INDEX = NO # The GENERATE_TREEVIEW tag is used to specify whether a tree-like index -# structure should be generated to display hierarchical information. -# If the tag value is set to YES, a side panel will be generated -# containing a tree-like index structure (just like the one that -# is generated for HTML Help). For this to work a browser that supports -# JavaScript, DHTML, CSS and frames is required (i.e. any modern browser). -# Windows users are probably better off using the HTML help feature. +# structure should be generated to display hierarchical information. If the tag +# value is set to YES, a side panel will be generated containing a tree-like +# index structure (just like the one that is generated for HTML Help). For this +# to work a browser that supports JavaScript, DHTML, CSS and frames is required +# (i.e. any modern browser). Windows users are probably better off using the +# HTML help feature. Via custom style sheets (see HTML_EXTRA_STYLESHEET) one can +# further fine-tune the look of the index. As an example, the default style +# sheet generated by doxygen has an example that shows how to put an image at +# the root of the tree instead of the PROJECT_NAME. Since the tree basically has +# the same information as the tab index, you could consider setting +# DISABLE_INDEX to YES when enabling this option. +# The default value is: NO. +# This tag requires that the tag GENERATE_HTML is set to YES. GENERATE_TREEVIEW = YES @@ -1388,13 +1555,24 @@ ENUM_VALUES_PER_LINE = 4 TREEVIEW_WIDTH = 250 -# When the EXT_LINKS_IN_WINDOW option is set to YES doxygen will open links to +# If the EXT_LINKS_IN_WINDOW option is set to YES, doxygen will open links to # external symbols imported via tag files in a separate window. # The default value is: NO. # This tag requires that the tag GENERATE_HTML is set to YES. EXT_LINKS_IN_WINDOW = NO +# If the HTML_FORMULA_FORMAT option is set to svg, doxygen will use the pdf2svg +# tool (see https://github.com/dawbarton/pdf2svg) or inkscape (see +# https://inkscape.org) to generate formulas as SVG images instead of PNGs for +# the HTML output. These images will generally look nicer at scaled resolutions. +# Possible values are: png (the default) and svg (looks nicer but requires the +# pdf2svg or inkscape tool). +# The default value is: png. +# This tag requires that the tag GENERATE_HTML is set to YES. + +HTML_FORMULA_FORMAT = png + # Use this tag to change the font size of LaTeX formulas included as images in # the HTML documentation. When you change the font size after a successful # doxygen run you need to manually remove any form_*.png images from the HTML @@ -1404,7 +1582,7 @@ EXT_LINKS_IN_WINDOW = NO FORMULA_FONTSIZE = 10 -# Use the FORMULA_TRANPARENT tag to determine whether or not the images +# Use the FORMULA_TRANSPARENT tag to determine whether or not the images # generated for formulas are transparent PNGs. Transparent PNGs are not # supported properly for IE 6.0, but are supported on all modern browsers. # @@ -1415,9 +1593,15 @@ FORMULA_FONTSIZE = 10 FORMULA_TRANSPARENT = YES +# The FORMULA_MACROFILE can contain LaTeX \newcommand and \renewcommand commands +# to create new LaTeX commands to be used in formulas as building blocks. See +# the section "Including formulas" for details. + +FORMULA_MACROFILE = + # Enable the USE_MATHJAX option to render LaTeX formulas using MathJax (see -# http://www.mathjax.org) which uses client side Javascript for the rendering -# instead of using prerendered bitmaps. Use this if you do not have LaTeX +# https://www.mathjax.org) which uses client side JavaScript for the rendering +# instead of using pre-rendered bitmaps. Use this if you do not have LaTeX # installed or if you want to formulas look prettier in the HTML output. When # enabled you may also need to install MathJax separately and configure the path # to it using the MATHJAX_RELPATH option. @@ -1428,7 +1612,7 @@ USE_MATHJAX = NO # When MathJax is enabled you can set the default output format to be used for # the MathJax output. See the MathJax site (see: -# http://docs.mathjax.org/en/latest/output.html) for more details. +# http://docs.mathjax.org/en/v2.7-latest/output.html) for more details. # Possible values are: HTML-CSS (which is slower, but has the best # compatibility), NativeMML (i.e. MathML) and SVG. # The default value is: HTML-CSS. @@ -1443,8 +1627,8 @@ MATHJAX_FORMAT = HTML-CSS # MATHJAX_RELPATH should be ../mathjax. The default value points to the MathJax # Content Delivery Network so you can quickly see the result without installing # MathJax. However, it is strongly recommended to install a local copy of -# MathJax from http://www.mathjax.org before deployment. -# The default value is: http://cdn.mathjax.org/mathjax/latest. +# MathJax from https://www.mathjax.org before deployment. +# The default value is: https://cdn.jsdelivr.net/npm/mathjax@2. # This tag requires that the tag USE_MATHJAX is set to YES. MATHJAX_RELPATH = http://cdn.mathjax.org/mathjax/latest @@ -1458,7 +1642,8 @@ MATHJAX_EXTENSIONS = # The MATHJAX_CODEFILE tag can be used to specify a file with javascript pieces # of code that will be used on startup of the MathJax code. See the MathJax site -# (see: http://docs.mathjax.org/en/latest/output.html) for more details. For an +# (see: +# http://docs.mathjax.org/en/v2.7-latest/output.html) for more details. For an # example see the documentation. # This tag requires that the tag USE_MATHJAX is set to YES. @@ -1486,12 +1671,12 @@ MATHJAX_CODEFILE = SEARCHENGINE = YES # When the SERVER_BASED_SEARCH tag is enabled the search engine will be -# implemented using a web server instead of a web client using Javascript. There -# are two flavours of web server based searching depending on the -# EXTERNAL_SEARCH setting. When disabled, doxygen will generate a PHP script for -# searching and an index file used by the script. When EXTERNAL_SEARCH is -# enabled the indexing and searching needs to be provided by external tools. See -# the section "External Indexing and Searching" for details. +# implemented using a web server instead of a web client using JavaScript. There +# are two flavors of web server based searching depending on the EXTERNAL_SEARCH +# setting. When disabled, doxygen will generate a PHP script for searching and +# an index file used by the script. When EXTERNAL_SEARCH is enabled the indexing +# and searching needs to be provided by external tools. See the section +# "External Indexing and Searching" for details. # The default value is: NO. # This tag requires that the tag SEARCHENGINE is set to YES. @@ -1503,9 +1688,10 @@ SERVER_BASED_SEARCH = NO # external search engine pointed to by the SEARCHENGINE_URL option to obtain the # search results. # -# Doxygen ships with an example indexer ( doxyindexer) and search engine +# Doxygen ships with an example indexer (doxyindexer) and search engine # (doxysearch.cgi) which are based on the open source search engine library -# Xapian (see: http://xapian.org/). +# Xapian (see: +# https://xapian.org/). # # See the section "External Indexing and Searching" for details. # The default value is: NO. @@ -1516,10 +1702,11 @@ EXTERNAL_SEARCH = NO # The SEARCHENGINE_URL should point to a search engine hosted by a web server # which will return the search results when EXTERNAL_SEARCH is enabled. # -# Doxygen ships with an example indexer ( doxyindexer) and search engine +# Doxygen ships with an example indexer (doxyindexer) and search engine # (doxysearch.cgi) which are based on the open source search engine library -# Xapian (see: http://xapian.org/). See the section "External Indexing and -# Searching" for details. +# Xapian (see: +# https://xapian.org/). See the section "External Indexing and Searching" for +# details. # This tag requires that the tag SEARCHENGINE is set to YES. SEARCHENGINE_URL = @@ -1554,7 +1741,7 @@ EXTRA_SEARCH_MAPPINGS = # Configuration options related to the LaTeX output #--------------------------------------------------------------------------- -# If the GENERATE_LATEX tag is set to YES doxygen will generate LaTeX output. +# If the GENERATE_LATEX tag is set to YES, doxygen will generate LaTeX output. # The default value is: YES. GENERATE_LATEX = YES @@ -1570,22 +1757,36 @@ LATEX_OUTPUT = latex_main # The LATEX_CMD_NAME tag can be used to specify the LaTeX command name to be # invoked. # -# Note that when enabling USE_PDFLATEX this option is only used for generating -# bitmaps for formulas in the HTML output, but not in the Makefile that is -# written to the output directory. -# The default file is: latex. +# Note that when not enabling USE_PDFLATEX the default is latex when enabling +# USE_PDFLATEX the default is pdflatex and when in the later case latex is +# chosen this is overwritten by pdflatex. For specific output languages the +# default can have been set differently, this depends on the implementation of +# the output language. # This tag requires that the tag GENERATE_LATEX is set to YES. LATEX_CMD_NAME = latex # The MAKEINDEX_CMD_NAME tag can be used to specify the command name to generate # index for LaTeX. +# Note: This tag is used in the Makefile / make.bat. +# See also: LATEX_MAKEINDEX_CMD for the part in the generated output file +# (.tex). # The default file is: makeindex. # This tag requires that the tag GENERATE_LATEX is set to YES. MAKEINDEX_CMD_NAME = makeindex -# If the COMPACT_LATEX tag is set to YES doxygen generates more compact LaTeX +# The LATEX_MAKEINDEX_CMD tag can be used to specify the command name to +# generate index for LaTeX. In case there is no backslash (\) as first character +# it will be automatically added in the LaTeX code. +# Note: This tag is used in the generated output file (.tex). +# See also: MAKEINDEX_CMD_NAME for the part in the Makefile / make.bat. +# The default value is: makeindex. +# This tag requires that the tag GENERATE_LATEX is set to YES. + +LATEX_MAKEINDEX_CMD = makeindex + +# If the COMPACT_LATEX tag is set to YES, doxygen generates more compact LaTeX # documents. This may be useful for small projects and may help to save some # trees in general. # The default value is: NO. @@ -1603,9 +1804,12 @@ COMPACT_LATEX = NO PAPER_TYPE = a4wide # The EXTRA_PACKAGES tag can be used to specify one or more LaTeX package names -# that should be included in the LaTeX output. To get the times font for -# instance you can specify -# EXTRA_PACKAGES=times +# that should be included in the LaTeX output. The package can be specified just +# by its name or with the correct syntax as to be used with the LaTeX +# \usepackage command. To get the times font for instance you can specify : +# EXTRA_PACKAGES=times or EXTRA_PACKAGES={times} +# To use the option intlimits with the amsmath package you can specify: +# EXTRA_PACKAGES=[intlimits]{amsmath} # If left blank no extra packages will be included. # This tag requires that the tag GENERATE_LATEX is set to YES. @@ -1619,23 +1823,36 @@ EXTRA_PACKAGES = # # Note: Only use a user-defined header if you know what you are doing! The # following commands have a special meaning inside the header: $title, -# $datetime, $date, $doxygenversion, $projectname, $projectnumber. Doxygen will -# replace them by respectively the title of the page, the current date and time, -# only the current date, the version number of doxygen, the project name (see -# PROJECT_NAME), or the project number (see PROJECT_NUMBER). +# $datetime, $date, $doxygenversion, $projectname, $projectnumber, +# $projectbrief, $projectlogo. Doxygen will replace $title with the empty +# string, for the replacement values of the other commands the user is referred +# to HTML_HEADER. # This tag requires that the tag GENERATE_LATEX is set to YES. LATEX_HEADER = # The LATEX_FOOTER tag can be used to specify a personal LaTeX footer for the # generated LaTeX document. The footer should contain everything after the last -# chapter. If it is left blank doxygen will generate a standard footer. +# chapter. If it is left blank doxygen will generate a standard footer. See +# LATEX_HEADER for more information on how to generate a default footer and what +# special commands can be used inside the footer. # # Note: Only use a user-defined footer if you know what you are doing! # This tag requires that the tag GENERATE_LATEX is set to YES. LATEX_FOOTER = +# The LATEX_EXTRA_STYLESHEET tag can be used to specify additional user-defined +# LaTeX style sheets that are included after the standard style sheets created +# by doxygen. Using this option one can overrule certain style aspects. Doxygen +# will copy the style sheet files to the output directory. +# Note: The order of the extra style sheet files is of importance (e.g. the last +# style sheet in the list overrules the setting of the previous ones in the +# list). +# This tag requires that the tag GENERATE_LATEX is set to YES. + +LATEX_EXTRA_STYLESHEET = + # The LATEX_EXTRA_FILES tag can be used to specify one or more extra images or # other source files which should be copied to the LATEX_OUTPUT output # directory. Note that the files will be copied as-is; there are no commands or @@ -1653,9 +1870,11 @@ LATEX_EXTRA_FILES = PDF_HYPERLINKS = YES -# If the LATEX_PDFLATEX tag is set to YES, doxygen will use pdflatex to generate -# the PDF file directly from the LaTeX files. Set this option to YES to get a -# higher quality PDF documentation. +# If the USE_PDFLATEX tag is set to YES, doxygen will use the engine as +# specified with LATEX_CMD_NAME to generate the PDF file directly from the LaTeX +# files. Set this option to YES, to get a higher quality PDF documentation. +# +# See also section LATEX_CMD_NAME for selecting the engine. # The default value is: YES. # This tag requires that the tag GENERATE_LATEX is set to YES. @@ -1689,17 +1908,33 @@ LATEX_SOURCE_CODE = NO # The LATEX_BIB_STYLE tag can be used to specify the style to use for the # bibliography, e.g. plainnat, or ieeetr. See -# http://en.wikipedia.org/wiki/BibTeX and \cite for more info. +# https://en.wikipedia.org/wiki/BibTeX and \cite for more info. # The default value is: plain. # This tag requires that the tag GENERATE_LATEX is set to YES. LATEX_BIB_STYLE = plain +# If the LATEX_TIMESTAMP tag is set to YES then the footer of each generated +# page will contain the date and time when the page was generated. Setting this +# to NO can help when comparing the output of multiple runs. +# The default value is: NO. +# This tag requires that the tag GENERATE_LATEX is set to YES. + +LATEX_TIMESTAMP = NO + +# The LATEX_EMOJI_DIRECTORY tag is used to specify the (relative or absolute) +# path from which the emoji images will be read. If a relative path is entered, +# it will be relative to the LATEX_OUTPUT directory. If left blank the +# LATEX_OUTPUT directory will be used. +# This tag requires that the tag GENERATE_LATEX is set to YES. + +LATEX_EMOJI_DIRECTORY = + #--------------------------------------------------------------------------- # Configuration options related to the RTF output #--------------------------------------------------------------------------- -# If the GENERATE_RTF tag is set to YES doxygen will generate RTF output. The +# If the GENERATE_RTF tag is set to YES, doxygen will generate RTF output. The # RTF output is optimized for Word 97 and may not look too pretty with other RTF # readers/editors. # The default value is: NO. @@ -1714,7 +1949,7 @@ GENERATE_RTF = NO RTF_OUTPUT = rtf -# If the COMPACT_RTF tag is set to YES doxygen generates more compact RTF +# If the COMPACT_RTF tag is set to YES, doxygen generates more compact RTF # documents. This may be useful for small projects and may help to save some # trees in general. # The default value is: NO. @@ -1734,9 +1969,9 @@ COMPACT_RTF = NO RTF_HYPERLINKS = NO -# Load stylesheet definitions from file. Syntax is similar to doxygen's config -# file, i.e. a series of assignments. You only have to provide replacements, -# missing definitions are set to their default value. +# Load stylesheet definitions from file. Syntax is similar to doxygen's +# configuration file, i.e. a series of assignments. You only have to provide +# replacements, missing definitions are set to their default value. # # See also section "Doxygen usage" for information on how to generate the # default style sheet that doxygen normally uses. @@ -1745,17 +1980,27 @@ RTF_HYPERLINKS = NO RTF_STYLESHEET_FILE = # Set optional variables used in the generation of an RTF document. Syntax is -# similar to doxygen's config file. A template extensions file can be generated -# using doxygen -e rtf extensionFile. +# similar to doxygen's configuration file. A template extensions file can be +# generated using doxygen -e rtf extensionFile. # This tag requires that the tag GENERATE_RTF is set to YES. RTF_EXTENSIONS_FILE = +# If the RTF_SOURCE_CODE tag is set to YES then doxygen will include source code +# with syntax highlighting in the RTF output. +# +# Note that which sources are shown also depends on other settings such as +# SOURCE_BROWSER. +# The default value is: NO. +# This tag requires that the tag GENERATE_RTF is set to YES. + +RTF_SOURCE_CODE = NO + #--------------------------------------------------------------------------- # Configuration options related to the man page output #--------------------------------------------------------------------------- -# If the GENERATE_MAN tag is set to YES doxygen will generate man pages for +# If the GENERATE_MAN tag is set to YES, doxygen will generate man pages for # classes and files. # The default value is: NO. @@ -1779,6 +2024,13 @@ MAN_OUTPUT = man MAN_EXTENSION = .3 +# The MAN_SUBDIR tag determines the name of the directory created within +# MAN_OUTPUT in which the man pages are placed. If defaults to man followed by +# MAN_EXTENSION with the initial . removed. +# This tag requires that the tag GENERATE_MAN is set to YES. + +MAN_SUBDIR = + # If the MAN_LINKS tag is set to YES and doxygen generates man output, then it # will generate one additional man file for each entity documented in the real # man page(s). These additional files only source the real man page, but without @@ -1792,7 +2044,7 @@ MAN_LINKS = YES # Configuration options related to the XML output #--------------------------------------------------------------------------- -# If the GENERATE_XML tag is set to YES doxygen will generate an XML file that +# If the GENERATE_XML tag is set to YES, doxygen will generate an XML file that # captures the structure of the code including all documentation. # The default value is: NO. @@ -1806,7 +2058,7 @@ GENERATE_XML = NO XML_OUTPUT = xml -# If the XML_PROGRAMLISTING tag is set to YES doxygen will dump the program +# If the XML_PROGRAMLISTING tag is set to YES, doxygen will dump the program # listings (including syntax highlighting and cross-referencing information) to # the XML output. Note that enabling this will significantly increase the size # of the XML output. @@ -1815,11 +2067,18 @@ XML_OUTPUT = xml XML_PROGRAMLISTING = YES +# If the XML_NS_MEMB_FILE_SCOPE tag is set to YES, doxygen will include +# namespace members in file scope as well, matching the HTML output. +# The default value is: NO. +# This tag requires that the tag GENERATE_XML is set to YES. + +XML_NS_MEMB_FILE_SCOPE = NO + #--------------------------------------------------------------------------- # Configuration options related to the DOCBOOK output #--------------------------------------------------------------------------- -# If the GENERATE_DOCBOOK tag is set to YES doxygen will generate Docbook files +# If the GENERATE_DOCBOOK tag is set to YES, doxygen will generate Docbook files # that can be used to generate PDF. # The default value is: NO. @@ -1833,14 +2092,23 @@ GENERATE_DOCBOOK = NO DOCBOOK_OUTPUT = docbook +# If the DOCBOOK_PROGRAMLISTING tag is set to YES, doxygen will include the +# program listings (including syntax highlighting and cross-referencing +# information) to the DOCBOOK output. Note that enabling this will significantly +# increase the size of the DOCBOOK output. +# The default value is: NO. +# This tag requires that the tag GENERATE_DOCBOOK is set to YES. + +DOCBOOK_PROGRAMLISTING = NO + #--------------------------------------------------------------------------- # Configuration options for the AutoGen Definitions output #--------------------------------------------------------------------------- -# If the GENERATE_AUTOGEN_DEF tag is set to YES doxygen will generate an AutoGen -# Definitions (see http://autogen.sf.net) file that captures the structure of -# the code including all documentation. Note that this feature is still -# experimental and incomplete at the moment. +# If the GENERATE_AUTOGEN_DEF tag is set to YES, doxygen will generate an +# AutoGen Definitions (see http://autogen.sourceforge.net/) file that captures +# the structure of the code including all documentation. Note that this feature +# is still experimental and incomplete at the moment. # The default value is: NO. GENERATE_AUTOGEN_DEF = NO @@ -1849,7 +2117,7 @@ GENERATE_AUTOGEN_DEF = NO # Configuration options related to the Perl module output #--------------------------------------------------------------------------- -# If the GENERATE_PERLMOD tag is set to YES doxygen will generate a Perl module +# If the GENERATE_PERLMOD tag is set to YES, doxygen will generate a Perl module # file that captures the structure of the code including all documentation. # # Note that this feature is still experimental and incomplete at the moment. @@ -1857,7 +2125,7 @@ GENERATE_AUTOGEN_DEF = NO GENERATE_PERLMOD = NO -# If the PERLMOD_LATEX tag is set to YES doxygen will generate the necessary +# If the PERLMOD_LATEX tag is set to YES, doxygen will generate the necessary # Makefile rules, Perl scripts and LaTeX code to be able to generate PDF and DVI # output from the Perl module output. # The default value is: NO. @@ -1865,9 +2133,9 @@ GENERATE_PERLMOD = NO PERLMOD_LATEX = NO -# If the PERLMOD_PRETTY tag is set to YES the Perl module output will be nicely +# If the PERLMOD_PRETTY tag is set to YES, the Perl module output will be nicely # formatted so it can be parsed by a human reader. This is useful if you want to -# understand what is going on. On the other hand, if this tag is set to NO the +# understand what is going on. On the other hand, if this tag is set to NO, the # size of the Perl module output will be much smaller and Perl will parse it # just the same. # The default value is: YES. @@ -1887,14 +2155,14 @@ PERLMOD_MAKEVAR_PREFIX = # Configuration options related to the preprocessor #--------------------------------------------------------------------------- -# If the ENABLE_PREPROCESSING tag is set to YES doxygen will evaluate all +# If the ENABLE_PREPROCESSING tag is set to YES, doxygen will evaluate all # C-preprocessor directives found in the sources and include files. # The default value is: YES. ENABLE_PREPROCESSING = YES -# If the MACRO_EXPANSION tag is set to YES doxygen will expand all macro names -# in the source code. If set to NO only conditional compilation will be +# If the MACRO_EXPANSION tag is set to YES, doxygen will expand all macro names +# in the source code. If set to NO, only conditional compilation will be # performed. Macro expansion can be done in a controlled way by setting # EXPAND_ONLY_PREDEF to YES. # The default value is: NO. @@ -1910,7 +2178,7 @@ MACRO_EXPANSION = NO EXPAND_ONLY_PREDEF = NO -# If the SEARCH_INCLUDES tag is set to YES the includes files in the +# If the SEARCH_INCLUDES tag is set to YES, the include files in the # INCLUDE_PATH will be searched if a #include is found. # The default value is: YES. # This tag requires that the tag ENABLE_PREPROCESSING is set to YES. @@ -1952,9 +2220,9 @@ PREDEFINED = EXPAND_AS_DEFINED = # If the SKIP_FUNCTION_MACROS tag is set to YES then doxygen's preprocessor will -# remove all references to function-like macros that are alone on a line, have an -# all uppercase name, and do not end with a semicolon. Such function macros are -# typically used for boiler-plate code, and will confuse the parser if not +# remove all references to function-like macros that are alone on a line, have +# an all uppercase name, and do not end with a semicolon. Such function macros +# are typically used for boiler-plate code, and will confuse the parser if not # removed. # The default value is: YES. # This tag requires that the tag ENABLE_PREPROCESSING is set to YES. @@ -1974,11 +2242,11 @@ SKIP_FUNCTION_MACROS = YES # where loc1 and loc2 can be relative or absolute paths or URLs. See the # section "Linking to external documentation" for more information about the use # of tag files. -# Note: Each tag file must have an unique name (where the name does NOT include +# Note: Each tag file must have a unique name (where the name does NOT include # the path). If a tag file is not located in the directory in which doxygen is # run, you must also specify the path to the tagfile here. -TAGFILES = +TAGFILES = # When a file name is specified after GENERATE_TAGFILE, doxygen will create a # tag file that is based on the input files it reads. See section "Linking to @@ -1986,20 +2254,21 @@ TAGFILES = GENERATE_TAGFILE = -# If the ALLEXTERNALS tag is set to YES all external class will be listed in the -# class index. If set to NO only the inherited external classes will be listed. +# If the ALLEXTERNALS tag is set to YES, all external class will be listed in +# the class index. If set to NO, only the inherited external classes will be +# listed. # The default value is: NO. ALLEXTERNALS = NO -# If the EXTERNAL_GROUPS tag is set to YES all external groups will be listed in -# the modules index. If set to NO, only the current project's groups will be +# If the EXTERNAL_GROUPS tag is set to YES, all external groups will be listed +# in the modules index. If set to NO, only the current project's groups will be # listed. # The default value is: YES. EXTERNAL_GROUPS = NO -# If the EXTERNAL_PAGES tag is set to YES all external pages will be listed in +# If the EXTERNAL_PAGES tag is set to YES, all external pages will be listed in # the related pages index. If set to NO, only the current project's pages will # be listed. # The default value is: YES. @@ -2010,7 +2279,7 @@ EXTERNAL_PAGES = NO # Configuration options related to the dot tool #--------------------------------------------------------------------------- -# If the CLASS_DIAGRAMS tag is set to YES doxygen will generate a class diagram +# If the CLASS_DIAGRAMS tag is set to YES, doxygen will generate a class diagram # (in HTML and LaTeX) for classes with base or super classes. Setting the tag to # NO turns the diagrams off. Note that this option also works with HAVE_DOT # disabled, but it is recommended to install and use dot, since it yields more @@ -2026,7 +2295,7 @@ CLASS_DIAGRAMS = YES DIA_PATH = -# If set to YES, the inheritance and collaboration graphs will hide inheritance +# If set to YES the inheritance and collaboration graphs will hide inheritance # and usage relations if the target is undocumented or is not a class. # The default value is: YES. @@ -2037,7 +2306,7 @@ HIDE_UNDOC_RELATIONS = YES # http://www.graphviz.org/), a graph visualization toolkit from AT&T and Lucent # Bell Labs. The other options in this section have no effect if this option is # set to NO -# The default value is: NO. +# The default value is: YES. HAVE_DOT = NO @@ -2051,7 +2320,7 @@ HAVE_DOT = NO DOT_NUM_THREADS = 0 -# When you want a differently looking font n the dot files that doxygen +# When you want a differently looking font in the dot files that doxygen # generates you can specify the font name using DOT_FONTNAME. You need to make # sure dot is able to find the font, which can be done by putting it in a # standard location or by setting the DOTFONTPATH environment variable or by @@ -2099,7 +2368,7 @@ COLLABORATION_GRAPH = YES GROUP_GRAPHS = YES -# If the UML_LOOK tag is set to YES doxygen will generate inheritance and +# If the UML_LOOK tag is set to YES, doxygen will generate inheritance and # collaboration diagrams in a style similar to the OMG's Unified Modeling # Language. # The default value is: NO. @@ -2116,10 +2385,32 @@ UML_LOOK = NO # but if the number exceeds 15, the total amount of fields shown is limited to # 10. # Minimum value: 0, maximum value: 100, default value: 10. -# This tag requires that the tag HAVE_DOT is set to YES. +# This tag requires that the tag UML_LOOK is set to YES. UML_LIMIT_NUM_FIELDS = 10 +# If the DOT_UML_DETAILS tag is set to NO, doxygen will show attributes and +# methods without types and arguments in the UML graphs. If the DOT_UML_DETAILS +# tag is set to YES, doxygen will add type and arguments for attributes and +# methods in the UML graphs. If the DOT_UML_DETAILS tag is set to NONE, doxygen +# will not generate fields with class member information in the UML graphs. The +# class diagrams will look similar to the default class diagrams but using UML +# notation for the relationships. +# Possible values are: NO, YES and NONE. +# The default value is: NO. +# This tag requires that the tag UML_LOOK is set to YES. + +DOT_UML_DETAILS = NO + +# The DOT_WRAP_THRESHOLD tag can be used to set the maximum number of characters +# to display on a single line. If the actual line length exceeds this threshold +# significantly it will wrapped across multiple lines. Some heuristics are apply +# to avoid ugly line breaks. +# Minimum value: 0, maximum value: 1000, default value: 17. +# This tag requires that the tag HAVE_DOT is set to YES. + +DOT_WRAP_THRESHOLD = 17 + # If the TEMPLATE_RELATIONS tag is set to YES then the inheritance and # collaboration graphs will show the relations between templates and their # instances. @@ -2151,7 +2442,8 @@ INCLUDED_BY_GRAPH = YES # # Note that enabling this option will significantly increase the time of a run. # So in most cases it will be better to enable call graphs for selected -# functions only using the \callgraph command. +# functions only using the \callgraph command. Disabling a call graph can be +# accomplished by means of the command \hidecallgraph. # The default value is: NO. # This tag requires that the tag HAVE_DOT is set to YES. @@ -2162,7 +2454,8 @@ CALL_GRAPH = NO # # Note that enabling this option will significantly increase the time of a run. # So in most cases it will be better to enable caller graphs for selected -# functions only using the \callergraph command. +# functions only using the \callergraph command. Disabling a caller graph can be +# accomplished by means of the command \hidecallergraph. # The default value is: NO. # This tag requires that the tag HAVE_DOT is set to YES. @@ -2185,11 +2478,17 @@ GRAPHICAL_HIERARCHY = YES DIRECTORY_GRAPH = YES # The DOT_IMAGE_FORMAT tag can be used to set the image format of the images -# generated by dot. +# generated by dot. For an explanation of the image formats see the section +# output formats in the documentation of the dot tool (Graphviz (see: +# http://www.graphviz.org/)). # Note: If you choose svg you need to set HTML_FILE_EXTENSION to xhtml in order # to make the SVG files visible in IE 9+ (other browsers do not have this # requirement). -# Possible values are: png, jpg, gif and svg. +# Possible values are: png, png:cairo, png:cairo:cairo, png:cairo:gd, png:gd, +# png:gd:gd, jpg, jpg:cairo, jpg:cairo:gd, jpg:gd, jpg:gd:gd, gif, gif:cairo, +# gif:cairo:gd, gif:gd, gif:gd:gd, svg, png:gd, png:gd:gd, png:cairo, +# png:cairo:gd, png:cairo:cairo, png:cairo:gdiplus, png:gdiplus and +# png:gdiplus:gdiplus. # The default value is: png. # This tag requires that the tag HAVE_DOT is set to YES. @@ -2232,6 +2531,24 @@ MSCFILE_DIRS = DIAFILE_DIRS = +# When using plantuml, the PLANTUML_JAR_PATH tag should be used to specify the +# path where java can find the plantuml.jar file. If left blank, it is assumed +# PlantUML is not used or called during a preprocessing step. Doxygen will +# generate a warning when it encounters a \startuml command in this case and +# will not generate output for the diagram. + +PLANTUML_JAR_PATH = + +# When using plantuml, the PLANTUML_CFG_FILE tag can be used to specify a +# configuration file for plantuml. + +PLANTUML_CFG_FILE = + +# When using plantuml, the specified paths are searched for files specified by +# the !include statement in a plantuml block. + +PLANTUML_INCLUDE_PATH = + # The DOT_GRAPH_MAX_NODES tag can be used to set the maximum number of nodes # that will be shown in the graph. If the number of nodes in a graph becomes # larger than this value, doxygen will truncate the graph, which is visualized @@ -2268,7 +2585,7 @@ MAX_DOT_GRAPH_DEPTH = 0 DOT_TRANSPARENT = NO -# Set the DOT_MULTI_TARGETS tag to YES allow dot to generate multiple output +# Set the DOT_MULTI_TARGETS tag to YES to allow dot to generate multiple output # files in one run (i.e. multiple -o and -T options on the command line). This # makes dot run faster, but since only newer versions of dot (>1.8.10) support # this, this feature is disabled by default. @@ -2285,9 +2602,11 @@ DOT_MULTI_TARGETS = NO GENERATE_LEGEND = YES -# If the DOT_CLEANUP tag is set to YES doxygen will remove the intermediate dot +# If the DOT_CLEANUP tag is set to YES, doxygen will remove the intermediate # files that are used to generate the various graphs. +# +# Note: This setting is not only used for dot files but also for msc and +# plantuml temporary files. # The default value is: YES. -# This tag requires that the tag HAVE_DOT is set to YES. DOT_CLEANUP = YES diff --git a/docs/InputsOutputs.rst b/docs/InputsOutputs.rst index 56c65cb9b..ebc1626fc 100644 --- a/docs/InputsOutputs.rst +++ b/docs/InputsOutputs.rst @@ -14,22 +14,37 @@ Input files =========== The UPP requires the following input files: - - The itag namelist + - The model forecast file + - The itag namelist file - The GRIB2 control file - Additional data files (e.g. lookup tables, coefficient files for satellite) +-------------- +Model Forecast +-------------- + +The UPP ingests FV3 write component files in parallel netCDF format. + +The table below is a list of the unified model variables available from the FV3 model core. Whether a +specific variable is able to be read by UPP relies on dependencies such as physics options and model. +This table does not include variables that are diagnosed when running the UPP. + +UFS Unified Model Variables + - :doc:`UFS_unified_variables_table` + ---- ITAG ---- -The :bolditalic:`itag` namelist that is read in by the :bolditalic:`upp.x` executable from stdin (unit 5) is +The file called :bolditalic:`itag` is a text file that contains the fortran namelist &model_inputs. It is +read in by the :bolditalic:`upp.x` executable from stdin (unit 5) and is generated automatically within the UFS application workflow or stand-alone run script based on user-defined options. It should not be necessary to edit this. For description purposes, the namelist -(:bolditalic:`itag`) contains 7 lines for FV3: +&model_inputs (:bolditalic:`itag` file) contains 7 lines for FV3: -#. Name of the FV3 (pressure level) output file to be posted. +#. Name of the FV3 (pressure level) output file to be post-processed. -#. Format of FV3 model output (netcdf, binarynemsiompiio). +#. Format of FV3 model output (netcdfpara). #. Format of UPP output (GRIB2) @@ -53,22 +68,12 @@ which fields and levels to process. A default control file, :bolditalic:`postxconfig-NT.txt`, is provided and read by the UPP. For users wishing to customize the control file to add or remove fields and/or levels, they may do so by modifying the :bolditalic:`postcntrl.xml` and then remaking the text file as described in the later section -:ref:`Creating the Flat Text File`. +:ref:`create_txt_file`. .. Note:: The control file names :bolditalic:`postxconfig-NT.txt` and :bolditalic:`postcntrl.xml` are generic - names and are different depending on the application used. - -The tables below list all fields that are included in the control files for the various UFS -applications. All fields in the tables may not be present in your output depending on whether the field -dependencies are available in your model output. - -UFS MRW Table (GFS model) - - :doc:`MRW_GFSPRS_table` - -UFS SRW Tables (LAM - Limited Area Model) - - :doc:`SRW_BGDAWP_table` - - :doc:`SRW_BGRD3D_table` + names and are different depending on the application used. Control files for various operational + models are located in the :bolditalic:`UPP/parm` directory. Controlling which variables the UPP outputs ------------------------------------------- @@ -107,9 +112,11 @@ levels are currently available for output: - For PBL layer averages, the levels correspond to 6 layers with a thickness of 30 hPa each. - For flight level, the levels are 30 m, 50 m, 80 m, 100 m, 305 m, 457 m, 610 m, 914 m, 1524 m, 1829 m, 2134 m, 2743 m, 3658 m, 4572 m, 6000 m, 7010 m. -- For AGL radar reflectivity, the levels are 4000 and 1000 m (see Appendix A for details). +- For AGL radar reflectivity, the levels are 4000 and 1000 m. - For surface or shelter-level output, the is not necessary. +.. _create_txt_file: + Creating the Flat Text File --------------------------- @@ -130,14 +137,15 @@ run-time failures with UPP. To run the validation: xmllint --noout --schema EMC_POST_CTRL_Schema.xsd postcntrl.xml xmllint --noout --schema EMC_POST_Avblflds_Schema.xsd post_avblflds.xml -Once the xmls are validated, the user will need to generate the flat file. The makefile will call the -perl program :bolditalic:`parm/POSTXMLPreprocessor.pl` to regenerate any post flat files -:bolditalic:`postxconfig-NT.txt` where modifications were made since it was last run. Generate the flat +Once the xmls are validated, the user will need to generate the flat file. The below command will run the +perl program :bolditalic:`parm/POSTXMLPreprocessor.pl` to generate the post flat file. Generate the flat file: .. code-block:: console - make + /usr/bin/perl POSTXMLPreprocessor.pl your_user_defined_xml post_avblflds.xml your_user_defined_flat + +where *your_user_defined_xml* is your modified xml and *your_user_defined_flat* is the output text file. ============ Output Files diff --git a/docs/Installation.rst b/docs/Installation.rst index d5aa3ae7c..8dbf731b6 100644 --- a/docs/Installation.rst +++ b/docs/Installation.rst @@ -7,105 +7,90 @@ Building Stand-Alone ******************** +The UPP uses a CMake-based build system to integrate all the required components for building the UPP. +Once built, the UPP can be run stand-alone (outside the UFS Applications) to post-process model output. + ===================== Software Requirements ===================== -Before installing the UPP code, it is necessary to ensure that you have the required libraries -available on your system. These libraries include: - - - The external NCEP libraries - https://github.com/NOAA-EMC/NCEPLIBS-external - - - The NCEP libraries - https://github.com/NOAA-EMC/NCEPLIBS - -An introduction of each can be found in their respective top level :bolditalic:`README.md` files. -Detailed instructions for building the libraries on various platforms can be found in the -**NCEPLIBS-external/doc** directory. +The UPP is tested on a variety of research platforms, including NOAA HPC systems (e.g. Hera, Orion) and +the NCAR HPC Cheyenne. These supported platforms are pre-configured for building and running the UPP and already +have the required libraries available via `HPC-Stack `_ in a centralized +location. The HPC-Stack is a script-based build system that builds the software stack required by UFS components. -Certain machines do have the NCEP libraries in a pre-installed location for use to build UPP. Paths to -these pre-installed libraries are available on the -`UFS-SRW wiki `_ -and include platform name and compiler version. +Users working on unsupported platforms will need to install the HPC-Stack on their system and can do so following +the instructions in the `HPC-Stack User's Guide `_. ============================ Obtaining and Installing UPP ============================ -Building and running UPP V9.0.0 has been tested on the following platforms using pre-configured libraries. +Building and running UPP V10.1.0 has been tested and is supported on the following pre-configured platforms. +---------------+----------------------+ | System | Compiler and Version | +===============+======================+ -| NCAR Cheyenne | Intel 19.1.1 | +| NCAR Cheyenne | Intel 2021.2 | | +----------------------+ -| | GNU 9.1.0 | | | GNU 10.1.0 | +---------------+----------------------+ | NOAA Hera | Intel 18.0.5.274 | +---------------+----------------------+ +| NOAA Orion | Intel 2018.4 | ++---------------+----------------------+ -Move to the directory where you want to clone and build UPP and clone the repository into the directory -EMC_post. +Move to the directory where you want to install UPP and clone the repository. .. code-block:: console - git clone -b release-tag-name --recurse-submodules https://github.com/NOAA-EMC/EMC_post + git clone -b branch-or-tag-name https://github.com/NOAA-EMC/UPP -where, ``release-tag-name`` is the release tag you wish to clone (e.g. for stand-alone UPP version 9, use -the release tag :bolditalic:`upp_v9.0.0`). +where, ``branch-or-tag-name`` is the release branch or tag you wish to clone. -Move into the top level UPP directory and create and move into the build directory. Then build the UPP code -using the cmake utility. -The path ``INSTALL_PREFIX`` should point to the location of the pre-installed NCEP libraries. +Move to the directory with the build script and build the UPP. .. code-block:: console - cd EMC_post - mkdir build && cd build + cd UPP/tests - cmake .. -DCMAKE_INSTALL_PREFIX=.. -DCMAKE_PREFIX_PATH=${INSTALL_PREFIX} - make install + ./compile_upp.sh .. note:: - To build in debug mode, you can add :bolditalic:`-DCMAKE_BUILD_TYPE=Debug` to the cmake command. + To build in debug mode, you can add :bolditalic:`-DCMAKE_BUILD_TYPE=Debug` to the *cmake_opts* + parameter in the :bolditalic:`compile_upp.sh` script. This removes compiler optimization flags and adds -g to the fortran compilation. You can also use :bolditalic:`-DCMAKE_BUILD_TYPE=RELWITHDEBINFO`, which gives the -g, but keeps the -O2 optimization for the fortran compilation. Move back to the top level UPP directory and create a directory for the CRTM fix files to be unpacked in. Download the fix files from the Github `release page -`_ or use the wget command. Unpack the +`_ or use the wget command. Unpack the tar file. .. code-block:: console cd ../ mkdir crtm && cd crtm - wget https://github.com/NOAA-EMC/EMC_post/releases/download/upp_v9.0.0/fix.tar.gz + wget https://github.com/NOAA-EMC/UPP/releases/download/upp_v10.1.0/fix.tar.gz tar -xzf fix.tar.gz .. note:: - To make a clean build, simply remove both the **/build** directory and the - :bolditalic:`bin/upp.x` executable and then re-create the build from step #2. This is recommended if a - mistake is made during the installation process. If a simple change is made to the code, you can simply - type :bolditalic:`make install` again in the pre-existing build directory. + To make a clean build, simply remove both the **tests/build** and **tests/install** directories and the + :bolditalic:`exec/upp.x` executable and then rerun the :bolditalic:`compile_upp.sh script. This is + recommended if a mistake is made during the installation process. ======================= UPP Directory Structure ======================= -Under the main directory **EMC_post** reside the following relevant subdirectories (The * indicates a +Under the main directory **UPP** reside the following relevant subdirectories (The * indicates a directory that exists only after the build is complete): - | **bin***: Contains the :bolditalic:`upp.x` executable after successful compilation - - | **build**: Contains the UPP build + | **exec***: Contains the :bolditalic:`upp.x` executable after successful compilation - | **include***: Contains include modules built/used during compilation of UPP - - | **lib***: Libraries built/used by UPP that are separate from NCEPlibs + | **modulefiles**: Contains modulefiles for specific platforms and compilers for building on + pre-configured machines. | **parm**: Contains parameter files, which can be modified by the user to control how the post processing is performed. @@ -115,3 +100,7 @@ directory that exists only after the build is complete): | **sorc**: Contains source codes for: | - **ncep_post.fd**: Source code for the UPP + + | **tests**: Contains the scripts used to install UPP + | - **build***: Contains the UPP build + | - **install***: Contains the installed executable (bin/upp.x), modules, and libraries diff --git a/docs/Introduction.rst b/docs/Introduction.rst index 4dc972b54..f5646c1b1 100644 --- a/docs/Introduction.rst +++ b/docs/Introduction.rst @@ -2,32 +2,16 @@ Introduction ************ -The Unified Post Processor (UPP) software package is a software package designed to generate useful -products from raw model output. The UPP is currently used in operations with the Global Forecast -System (GFS), GFS Ensemble Forecast System (GEFS), North American Mesoscale (NAM), Rapid Refresh (RAP), -High Resolution Rapid Refresh (HRRR), Short Range Ensemble Forecast (SREF), Hurricane WRF (HWRF) -applications, and is also used in Unified Forecasting System (UFS) applications. The UPP provides the -capability to compute a variety of diagnostic fields and interpolate to pressure levels or other -vertical coordinates. UPP also incorporates the Joint Center for Satellite Data Assimilation (JCSDA) -Community Radiative Transfer Model (CRTM) to compute model derived brightness temperature (TB) for -various instruments and channels. This additional feature enables the generation of a number of -simulated satellite products including GOES products. Output from the UPP is in National Weather -Service (NWS) and World Meteorological Organization (WMO) GRIB2 format and can be used directly by -visualization, plotting, or verification packages, or for further downstream post-processing, e.g. -statistical post-processing techniques. +The Unified Post Processor (UPP) is a software package designed to generate useful +products from raw model output. -Examples of UPP products include: +The UPP is currently used in operations with the Global Forecast System (GFS), GFS Ensemble Forecast +System (GEFS), North American Mesoscale (NAM), Rapid Refresh (RAP), High Resolution Rapid Refresh +(HRRR), Short Range Ensemble Forecast (SREF), and Hurricane WRF (HWRF) applications. It is also used +in the Unified Forecasting System (UFS), including the Rapid Refresh Forecast System (RRFS), Hurricane +Application Forecasting System (HAFS), and the Medium Range Weather (MRW) and Short Range Weather (SRW) +Applications. -- T, Z, humidity, wind, cloud water, cloud ice, rain, and snow on pressure levels -- SLP, shelter level T, humidity, and wind fields -- Precipitation-related fields -- PBL-related fields -- Severe weather products (e.g. CAPE, Vorticity, Wind shear) -- Radiative/Surface fluxes -- Cloud related fields -- Aviation products -- Radar reflectivity products -- Satellite look-alike products - -Support for the UFS UPP is provided through the UFS Forum by the Developmental Testbed Center (DTC) for -FV3-based applications. +This software package can be run inline, built as a library to be used by the model, and offline, +built stand-alone and run separate from the model. This documentation largely details the offline +procedures. diff --git a/docs/MRW_GFSPRS_table.csv b/docs/MRW_GFSPRS_table.csv deleted file mode 100644 index db595d16d..000000000 --- a/docs/MRW_GFSPRS_table.csv +++ /dev/null @@ -1,188 +0,0 @@ -No.,Field Description,Level Type,Short Name,nlvl -1,Height on pressure surface,isobaric,HGT,57 -2,Temperature on pressure surface,isobaric,TMP,57 -3,Specific humidity on pressure surface,isobaric,SPFH,57 -4,Relative humidity on pressure surface,isobaric,RH,57 -5,U component of wind on pressure surface,isobaric,UGRD,57 -6,V component of wind on pressure surface,isobaric,VGRD,57 -7,Vertical velocity on pressure surface,isobaric,DZDT,45 -8,Omega on pressure surface,isobaric,VVEL,45 -9,Absolute vorticity on pressure surface,isobaric,ABSV,57 -10,Ozone on pressure surface,isobaric,O3MR,32 -11,Cloud water mixing ratio on pressure surface,isobaric,CLWMR,39 -12,Cloud ice mixing ratio on pressure surface,isobaric,ICMR,39 -13,Rain mixing ratio on pressure surface,isobaric,RWMR,39 -14,Snow mixing ratio on pressure surface,isobaric,SNMR,39 -15,Graupel mixing ratio on pressure surface,isobaric,GRLE,39 -16,Composite radar reflectivity,entire atmosphere,REFC,1 -17,Mesinger (Membrane) sea level pressure,mean sea level,MSLET,1 -18,Shuell sea level pressure,mean sea level,PRES,1 -19,Temperature at 2m,height agl,TMP,1 -20,Specific humidity at 2m,height agl,SPFH,1 -21,Dew point temperature at 2m,height agl,DPT,1 -22,Relative humidity at 2m,height agl,RH,1 -23,U component of wind at 10m,height agl,UGRD,1 -24,V component of wind at 10m,height agl,VGRD,1 -25,Surface Pressure,surface,PRES,1 -26,Terrain height,surface,HGT,1 -27,Skin temperature,surface,TMP,1 -28,Soil temperature in between each soil layer,depth below land surface,TSOIL,4 -29,Soil moisture in between each soil layer,depth below land surface,SOILW,4 -30,Liquid soil moisture in between each soil layer,depth below land surface,SOILL,4 -31,Plant canopy surface water,surface,CNWAT,1 -32,Snow water equivalent,surface,WEASD,1 -33,Potential evaporation,surface,PEVPR,1 -34,Ice thickness,surface,ICETK,1 -35,Snow depth,surface,SNOD,1 -36,Wilting point,surface,WILT,1 -37,Field Capacity,surface,FLDCP,1 -38,Surface lifted index,surface,LFTX,1 -39,Best lifted index (4 layer),surface,4LFTX,1 -40,Parcel lifted index,pressure above ground,PLI,1 -41,Convective available potential energy,surface,CAPE,1 -42,Best cape,pressure above ground,CAPE,1 -43,Unstable cape,pressure above ground,CAPE,1 -44,Convective inhibition,surface,CIN,1 -45,Best cin,pressure above ground,CIN,1 -46,Unstable cin,pressure above ground,CIN,1 -47,Column integrated precipitable water,entire atmosphere,PWAT,1 -48,Helicity,height agl,HLCY,1 -49,U component storm motion,height agl,USTM,1 -50,V component storm motion,height agl,VSTM,1 -51,Accumulated total precipitation,surface,APCP,1 -52,Accumulated convective precipitation,surface,ACPCP,1 -53,Accumulated grid-scale precipitation,surface,NCPCP,1 -54,Continuous accumulated total precipitation,surface,APCP,1 -55,Continuous accumulated convective precipitation,surface,ACPCP,1 -56,Continuous accumulated grid-scale precipitation,surface,NCPCP,1 -57,Categorical rain (instantaneous),surface,CRAIN,1 -58,Categorical snow (instantaneous),surface,CSNOW,1 -59,Categorical ice pellets (instantaneous),surface,CICEP,1 -60,Categorical freezing rain (instantaneous),surface,CFRZR,1 -61,Categorical rain (average),surface,CRAIN,1 -62,Categorical snow (average),surface,CSNOW,1 -63,Categorical ice pellets (average),surface,CICEP,1 -64,Categorical freezing rain (average),surface,CFRZR,1 -65,Average precipitation rate,surface,PRATE,1 -66,Average convective precipitation rate,surface,CPRAT,1 -67,Average low cloud fraction,low cloud layer,TCDC,1 -68,Average mid cloud fraction,mid cloud layer,TCDC,1 -69,Average high cloud fraction,high cloud layer,TCDC,1 -70,Average total cloud fraction,entire atmosphere,TCDC,1 -71,Visibility,surface,VIS,1 -72,Average incoming surface shortwave radiation,surface,DSWRF,1 -73,Average clear sky incoming UV-B shortwave,surface,CDUVB,1 -74,Average incoming UV-B shortwave,surface,DUVB,1 -75,Average incoming surface longwave radiation,surface,DLWRF,1 -76,Average outgoing surface shortwave radiation,surface,USWRF,1 -77,Average outgoing surface longwave radiation,surface,ULWRF,1 -78,Average outgoing model top shortwave radiation,top of atmosphere,USWRF,1 -79,Average outgoing model top longwave radiation,top of atmosphere,ULWRF,1 -80,Total spectrum brightness temperature,top of atmosphere,BRTMP,1 -81,Roughness length,surface,SFCR,1 -82,Friction velocity,surface,FRICV,1 -83,Average surface sensible heat flux,surface,SHTFL,1 -84,Average ground heat flux,surface,GFLUX,1 -85,Average surface latent heat flux,surface,LHTFL,1 -86,Average surface zonal momentum flux,surface,UFLX,1 -87,Average surface meridional momentum flux,surface,VFLX,1 -88,Land sea mask (land=1 sea=0),surface,LAND,1 -89,Sea ice mask,surface,ICEC,1 -90,Average albedo,surface,ALBDO,1 -91,Pressure at tropopause,tropopause,PRES,1 -92,Height at tropopause,tropopause,HGT,1 -93,Temperature at tropopause,tropopause,TMP,1 -94,U component of wind at tropopause,tropopause,UGRD,1 -95,V component of wind at tropopause,tropopause,VGRD,1 -96,Wind shear at tropopause,tropopause,VWSH,1 -97,Temperature at flight levels,height msl,TMP,8 -98,U component of wind at flight levels,height msl,UGRD,8 -99,V component of wind at flight levels,height msl,VGRD,8 -100,Temperature at flight levels,height agl,TMP,2 -101,U component of wind at flight levels,height agl,UGRD,6 -102,V component of wind at flight levels,height agl,VGRD,6 -103,Pressure at flight levels,height agl,PRES,1 -104,Specific humidity at flight levels,height agl,SPFH,1 -105,Freezing level height,0 degree isotherm,HGT,1 -106,Freezing level relative humidity,0 degree isotherm,RH,1 -107,Highest freezing level height,highest tropospheric frz lvl,HGT,1 -108,Highest freezing level relative humidity,highest tropospheric frz lvl,RH,1 -109,Temperature in layer between pressure levels,pressure layer agl,TMP,6 -110,Dew point temperature in layer between pressure levels,pressure layer agl,DPT,1 -111,Specific humidity in layer between pressure levels,pressure layer agl,SPFH,6 -112,Relative humidity in layer between pressure levels,pressure layer agl,RH,6 -113,Precipitable water in layer between pressure levels,pressure layer agl,PWAT,1 -114,U component of wind in layer between pressure levels,pressure layer agl,UGRD,6 -115,V component of wind in layer between pressure levels,pressure layer agl,VGRD,6 -116,Relative humidity on sigma level 0.33-1.0,sigma level,RH,1 -117,Relative humidity on sigma level 0.44-1.0,sigma level,RH,1 -118,Relative humidity on sigma level 0.72-0.94,sigma level,RH,1 -119,Relative humidity on sigma level 0.44-0.72,sigma level,RH,1 -120,Temperature on sigma level 0.9950,sigma level,TMP,1 -121,Potential temperature on sigma level 0.9950,sigma level,POT,1 -122,Relative humidity on sigma level 0.9950,sigma level,RH,1 -123,U component of wind on sigma level 0.9950,sigma level,UGRD,1 -124,V component of wind on sigma level 0.9950,sigma level,VGRD,1 -125,Omega on sigma level 0.9950,sigma level,VVEL,1 -126,Maximum wind pressure level,max wind,PRES,1 -127,Maximum wind height,max wind,HGT,1 -128,U component of maximum wind,max wind,UGRD,1 -129,V component of maximum wind,max wind,VGRD,1 -130,Temperature at maximum wind level,max wind,TMP,1 -131,Planetary boundary layer height,surface,HPBL,1 -132,Convective cloud bottom pressure,convective cloud bottom,PRES,1 -133,Convective cloud top pressure,convective cloud top,PRES,1 -134,Average low cloud bottom pressure,low cloud bottom,PRES,1 -135,Average mid cloud bottom pressure,mid cloud bottom,PRES,1 -136,Average high cloud bottom pressure,high cloud bottom,PRES,1 -137,Average low cloud top pressure,low cloud top,PRES,1 -138,Average mid cloud top pressure,mid cloud top,PRES,1 -139,Average high cloud top pressure,high cloud top,PRES,1 -140,Average low cloud top temperature,low cloud top,TMP,1 -141,Average mid cloud top temperature,mid cloud top,TMP,1 -142,Average high cloud top temperature,high cloud top,TMP,1 -143,Total cloud fraction on convective cloud layer,entire atmosphere,TCDC,1 -144,Column integrated cloud water,entire atmosphere,CWAT,1 -145,Total column relative humidity,entire atmosphere,RH,1 -146,Total column ozone,entire atmosphere,TOZNE,1 -147,Surface wind gust,surface,GUST,1 -148,LCL level pressure,pressure layer agl,PLPL,1 -149,Cloud fraction on pressure surface,isobaric,TCDC,39 -150,U component of wind on theta surface,isentropic,UGRD,1 -151,V component of wind on theta surface,isentropic,VGRD,1 -152,Temperature on theta surface,isentropic,TMP,1 -153,Potential vorticity on theta surface,isentropic,PVORT,1 -154,Montgomery stream function on theta surface,isentropic,MNTSF,1 -155,U component of wind on constant PV surface,potential vorticity surface,UGRD,8 -156,V component of wind on constant PV surface,potential vorticity surface,VGRD,8 -157,Temperature on constant PV surface,potential vorticity surface,TMP,8 -158,Height on constant PV surface,potential vorticity surface,HGT,8 -159,Pressure on constant PV surface,potential vorticity surface,PRES,8 -160,Wind shear on constant PV surface,potential vorticity surface,VWSH,8 -161,Average planetary boundary layer cloud fraction,boundary layer cloud layer,TCDC,1 -162,Cloud work function,entire atmosphere,CWORK,1 -163,Average zonal gravity wave stress,surface,U-GWD,1 -164,Average meridional gravity wave stress,surface,V-GWD,1 -165,Average water runoff,surface,WATR,1 -166,Maximum 2m temperature,height agl,TMAX,1 -167,Minimum 2m temperature,height agl,TMIN,1 -168,ICAO height at maximum wind level,max wind,ICAHT,1 -169,ICAO height at tropopause,tropopause,ICAHT,1 -170,Sunshine duration,surface,SUNSD,1 -171,Transport u component of wind,planetary boundary layer,UGRD,1 -172,Transport v component of wind,planetary boundary layer,VGRD,1 -173,Ventilation rate,planetary boundary layer,VRATE,1 -174,Haines index,surface,HINDEX,1 -175,Fraction of frozen precipitation,surface,CPOFP,1 -176,Apparent temperature at 2m,height agl,APTMP,1 -177,Instantaneous precipitation rate,surface,PRATE,1 -178,Convective precipitation rate,surface,CPRAT,1 -179,Snow mixing ratio on model surface,hybrid,SNMR,1 -180,Rain mixing ratio on model surface,hybrid,RWMR,1 -181,Cloud water mixing ratio on model surface,hybrid,CLWMR,1 -182,Cloud ice mixing ratio on model surface,hybrid,ICMR,1 -183,Graupel mixing ratio on model surface,hybrid,GRLE,1 -184,Ice growth rate,height msl,ICEG,1 -185,Soil type,surface,SOTYP,1 -186,Vegetation cover,surface,VEG,1 -187,Sea ice skin temperature,surface,ICETMP,1 diff --git a/docs/MRW_GFSPRS_table.rst b/docs/MRW_GFSPRS_table.rst deleted file mode 100644 index a667226bf..000000000 --- a/docs/MRW_GFSPRS_table.rst +++ /dev/null @@ -1,11 +0,0 @@ -*************************************************** -Fields Requested in the UPP Parameter Table for MRW -*************************************************** - -Field description (column 1), level type as defined by WMO (column 2), abbreviated names -as they appear in the Grib2 output file (column 3), and number of levels output (column 4). - -.. csv-table:: - :file: MRW_GFSPRS_table.csv - :widths: 5, 40, 30, 15, 10 - :header-rows: 1 diff --git a/docs/Running.rst b/docs/Running.rst index c5fadd880..c52db193f 100644 --- a/docs/Running.rst +++ b/docs/Running.rst @@ -26,7 +26,7 @@ A script for running the UPP package is included in the **/scripts** directory: mkdir parm -4. Optional: If desired, edit the control **XML** file(s) in **/EMC_post/parm** to reflect the fields +4. Optional: If desired, edit the control **XML** file(s) in **/UPP/parm** to reflect the fields and levels you want UPP to output. It is recommended that you make copies of the original beforehand. @@ -64,8 +64,8 @@ Run Script Overview | **TOP_DIR**: Top level directory for building and running UPP | **DOMAINPATH**: Working directory for this run - | **UNIPOST_HOME**: Location of the **EMC_post** directory - | **POSTEXEC**: Location of the **EMC_post** executable + | **UPP_HOME**: Location of the **UPP** directory + | **POSTEXEC**: Location of the **UPP** executable | **modelDataPath**: Location of the model output data files to be processed | **txtCntrlFile**: Name and location of the flat text file that lists desired fields for output. @@ -82,7 +82,7 @@ Run Script Overview 3. Specify the format for the input model files and output UPP files - | **inFormat**: Format of the model data ("binarynemsiompiio": GFS only or "netcdf": GFS/LAM) + | **inFormat**: Format of the model data ("netcdfpara") | **outFormat**: Format of output from UPP ("grib2") 4. Specify the forecast cycles to be post-processed @@ -119,7 +119,3 @@ Upon a successful run, UPP will generate output files for each forecast hour in When executed with the provided run script, UPP provides log files in the post-processor working directory named :bolditalic:`upp.fHHH.out`, where :bolditalic:`HHH` is the forecast hour. These log files may be consulted for further run-time information in the event of an error. - -.. note:: - FV3 output is on a Guassian grid. To interpolate to a lat/lon or other projection, use wgrib2 (see - :ref:`Examples-of-wgrib2` section). diff --git a/docs/SRW_BGDAWP_table.csv b/docs/SRW_BGDAWP_table.csv deleted file mode 100644 index 6426ec95b..000000000 --- a/docs/SRW_BGDAWP_table.csv +++ /dev/null @@ -1,258 +0,0 @@ -No.,Field Description,Level Type,Short Name,nlvl -1,Pressure on model surface,hybrid,PRES,2 -2,Height on model surface,hybrid,HGT,2 -3,Temperature on model surface,hybrid,TMP,2 -4,Potential temperature on model surface,hybrid,POT,2 -5,Dew point temperature on model surface,hybrid,DPT,2 -6,Specific humidity on model surface,hybrid,SPFH,1 -7,Relative humidity on model surface,hybrid,RH,1 -8,U component of wind on model surface,hybrid,UGRD,2 -9,V component of wind on model surface,hybrid,VGRD,2 -10,Omega on model surface,hybrid,VVEL,1 -11,Vertical velocity on model surface,hybrid,DZDT,1 -12,Turbulent kinetic energy on model surface,hybrid,TKE,2 -13,Rain mixing ratio on model surface,hybrid,RWMR,2 -14,Snow mixing ratio on model surface,hybrid,SNMR,2 -15,Rimming factor for Ferrier scheme on model surface,hybrid,RIME,2 -16,Total condensate for Ferrier scheme on mode surface,hybrid,TCOND,2 -17,Radar reflectivity on model surface,hybrid,REFD,2 -18,Master length scale on model surface,hybrid,BMIXL,1 -19,Height on pressure surface,isobaric,HGT,46 -20,Temperature on pressure surface,isobaric,TMP,46 -21,Dew point temperature on pressure surface,isobaric,DPT,46 -22,Specific humidity on pressure surface,isobaric,SPFH,46 -23,Relative humidity on pressure surface,isobaric,RH,46 -24,Moisture convergence on pressure surface,isobaric,MCONV,2 -25,U component of wind on pressure surface,isobaric,UGRD,46 -26,V component of wind on pressure surface,isobaric,VGRD,46 -27,Vertical velocity on pressure surface,isobaric,DZDT,46 -28,Omega on pressure surface,isobaric,VVEL,46 -29,Absolute vorticity on pressure surface,isobaric,ABSV,10 -30,Geostrophic streamfunction on pressure surface,isobaric,STRM,2 -31,Turbulent kinetic energy on pressure surface,isobaric,TKE,46 -32,Cloud ice mixing ratio on pressure surface,isobaric,ICMR,46 -33,Cloud water mixing ratio on pressure surface,isobaric,CLWMR,46 -34,Rain mixing ratio on pressure surface,isobaric,RWMR,46 -35,Graupel mixing ratio on pressure surface,isobaric,GRLE,46 -36,Snow mixing ratio on pressure surface,isobaric,SNMR,46 -37,Rimming factor for Ferrier scheme on pressure surface,isobaric,RIME,46 -38,Mesinger (Membrane) sea level pressure,mean sea level,MSLET,1 -39,Shuell sea level pressure,mean sea level,PRES,1 -40,Temperature at 2m,height agl,TMP,1 -41,Specific humidity at 2m,height agl,SPFH,1 -42,Dew point temperature at 2m,height agl,DPT,1 -43,Relative humidity at 2m,height agl,RH,1 -44,U component of wind at 10m,height agl,UGRD,1 -45,V component of wind at 10m,height agl,VGRD,1 -46,Surface wind gust,surface,GUST,1 -47,LCL level pressure,pressure layer agl,PLPL,1 -48,Potential temperature at 10m,height agl,POT,1 -49,Specific humidity at 10m,height agl,SPFH,1 -50,Surface Pressure,surface,PRES,1 -51,Terrain height,surface,HGT,1 -52,Skin potential temperature,surface,POT,1 -53,Skin specific humidity,surface,SPFH,1 -54,Skin temperature,surface,TMP,1 -55,Soil temperature at 3m,depth below land surface,TSOIL,1 -56,Soil temperature in between each soil layer,depth below land surface,TSOIL,4 -57,Soil moisture in between each soil layer,depth below land surface,SOILW,4 -58,Liquid soil moisture in between each soil layer,depth below land surface,SOILL,4 -59,Total soil moisture,depth below land surface,SOILM,1 -60,Plant canopy surface water,surface,CNWAT,1 -61,Snow water equivalent,surface,WEASD,1 -62,Snow cover in percentage,surface,SNOWC,1 -63,Heat exchange coeff at surface,surface,SFEXC,1 -64,Vegetation cover,surface,VEG,1 -65,Vegetation type,surface,VGTYP,1 -66,Soil type,surface,SOTYP,1 -67,Snow free albedo,surface,SNFALB,1 -68,Maximum snow albedo,surface,MXSALB,1 -69,Canopy conductance,surface,CCOND,1 -70,Canopy conductance - solar component,surface,RCS,1 -71,Canopy conductance - temperature component,surface,RCT,1 -72,Canopy conductance - humidity component,surface,RCQ,1 -73,Canopy conductance - soil component,surface,RCSOL,1 -74,Soil moist reference,surface,SMREF,1 -75,Soil moist porosity,surface,POROS,1 -76,Number of root layers,surface,RLYRS,1 -77,Minimum stomatal resistance,surface,RSMIN,1 -78,Snow depth,surface,SNOD,1 -79,Air dry soil moisture,surface,SMDRY,1 -80,Soil moist wilting point,surface,WILT,1 -81,Soil moisture availability,depth below land surface,MSTAV,1 -82,Ground heat flux (instantaneous),surface,GFLUX,1 -83,Lifted index—surface based (500-1000 hPa),isobaric,LFTX,1 -84,Lifted index—best,pressure above ground,4LFTX,1 -85,Lifted index—parcel,pressure above ground,PLI,1 -86,Convective available potential energy,surface,CAPE,1 -87,Best cape,pressure above ground,CAPE,1 -88,Mixed layer cape,pressure above ground,CAPE,1 -89,Unstable cape,pressure above ground,CAPE,1 -90,Convective inhibition,surface,CIN,1 -91,Best cin,pressure above ground,CIN,1 -92,Mixed layer cin,pressure above ground,CIN,1 -93,Unstable cin,pressure above ground,CIN,1 -94,Column integrated precipitable water,entire atmosphere,PWAT,1 -95,Helicity,height agl,HLCY,2 -96,U component storm motion,height agl,USTM,1 -97,V component storm motion,height agl,VSTM,1 -98,Accumulated total precipitation,surface,APCP,1 -99,Accumulated grid-scale precipitation,surface,NCPCP,1 -100,Continuous accumulated total precipitation,surface,APCP,1 -101,Continuous accumulated grid-scale precipitation,surface,NCPCP,1 -102,Accumulated snowfall,surface,WEASD,1 -103,Accumulated total snow melt,surface,SNOM,1 -104,Accumulated storm surface runoff,surface,SSRUN,1 -105,Accumulated base flow runoff,surface,BGRUN,1 -106,Average water runoff,surface,WATR,1 -107,Categorical rain (instantaneous),surface,CRAIN,1 -108,Categorical snow (instantaneous),surface,CSNOW,1 -109,Categorical ice pellets (instantaneous),surface,CICEP,1 -110,Categorical freezing rain (instantaneous),surface,CFRZR,1 -111,Precipitation rate (instantaneous),surface,PRATE,1 -112,Fraction of frozen precipitation,surface,CPOFP,1 -113,Cloud water mixing ratio on model surface,hybrid,CLWMR,2 -114,Cloud ice mixing ratio on model surface,hybrid,ICMR,2 -115,Graupel mixing ratio on model surface,hybrid,GRLE,1 -116,Cloud fraction on model surface,hybrid,TCDC,2 -117,Low level cloud fraction,low cloud layer,LCDC,1 -118,Mid level cloud fraction,mid cloud layer,MCDC,1 -119,High level cloud fraction,high cloud layer,HCDC,1 -120,Total cloud fraction,entire atmosphere,TCDC,1 -121,Total cloud fraction (time-averaged),entire atmosphere,TCDC,1 -122,stratospheric cloud fraction (time-averaged),entire atmosphere,CDLYR,1 -123,Visibility,surface,VIS,1 -124,GSD visibility,cloud top,VIS,1 -125,Above-ground height of LCL,adiabatic condensation from surface,HGT,1 -126,Pressure of LCL,adiabatic condensation from surface,PRES,1 -127,Outgoing surface shortwave radiation (instantaneous),surface,USWRF,1 -128,Outgoing surface longwave radiation (instantaneous),surface,ULWRF,1 -129,Incoming surface shortwave radiation (time-averaged),surface,DSWRF,1 -130,Incoming surface longwave radiation (time-averaged),surface,DLWRF,1 -131,Outgoing surface shortwave radiation (time-averaged),surface,USWRF,1 -132,Outgoing surface longwave radiation (time-averaged),surface,ULWRF,1 -133,Outgoing model top shortwave radiation (time-averaged),top of atmosphere,USWRF,1 -134,Outgoing model top longwave radiation (time-averaged),top of atmosphere,ULWRF,1 -135,Outgoing longwave at top of atmosphere (instantaneous),top of atmosphere,ULWRF,1 -136,Total spectrum brightness temperature,top of atmosphere,BRTMP,1 -137,Incoming surface shortwave radiation (instantaneous),surface,DSWRF,1 -138,Incoming surface longwave radiation (instantaneous),surface,DLWRF,1 -139,Clear sky incoming surface shortwave (instantaneous),surface,CSDSF,1 -140,Roughness length,surface,SFCR,1 -141,Friction velocity,surface,FRICV,1 -142,Surface drag coefficient,surface,CD,1 -143,Surface u wind stress,surface,UFLX,1 -144,Surface v wind stress,surface,VFLX,1 -145,Surface sensible heat flux (time-averaged),surface,SHTFL,1 -146,Ground heat flux (time-averaged),surface,GFLUX,1 -147,Snow phase change heat flux (time-averaged),surface,SNOHF,1 -148,Surface latent heat flux (time-averaged),surface,LHTFL,1 -149,Accumulated surface evaporation,surface,EVP,1 -150,Accumulated potential evaporation,surface,PEVAP,1 -151,Surface sensible heat flux (instantaneous),surface,SHTFL,1 -152,Surface latent heat flux (instantaneous),surface,LHTFL,1 -153,Latitude,surface,NLAT,1 -154,Longitude,surface,ELON,1 -155,Land sea mask (land=1 sea=0),surface,LAND,1 -156,Sea ice mask,surface,ICEC,1 -157,Surface albedo,surface,ALBDO,1 -158,Sea surface temperature,surface,WTMP,1 -159,Pressure at tropopause,tropopause,PRES,1 -160,Height at tropopause,tropopause,HGT,1 -161,Temperature at tropopause,tropopause,TMP,1 -162,Potential temperature at tropopause,tropopause,POT,1 -163,U component of wind at tropopause,tropopause,UGRD,1 -164,V component of wind at tropopause,tropopause,VGRD,1 -165,Wind shear at tropopause,tropopause,VWSH,1 -166,U component of 0-6km level wind shear,height agl,VUCSH,1 -167,V-component of 0-6km level wind shear,height agl,VVCSH,1 -168,Temperature at flight levels,height msl,TMP,10 -169,Temperature at flight levels,height agl,TMP,4 -170,U component of wind at flight levels,height msl,UGRD,10 -171,U component of wind at flight levels,height agl,UGRD,4 -172,V component of wind at flight levels,height msl,VGRD,10 -173,V component of wind at flight levels,height agl,VGRD,4 -174,Specific humidity at flight levels,height msl,SPFH,1 -175,Specific humidity at flight levels,height agl,SPFH,4 -176,Pressure at flight levels,height agl,PRES,4 -177,Freezing level height,0 degree isotherm,HGT,1 -178,Freezing level relative humidity,0 degree isotherm,RH,1 -179,Highest freezing level height,highest tropospheric frz lvl,HGT,1 -180,Lowest wet bulb zero height,lowest lvl wet bulb zero,HGT,1 -181,Pressure in boundary layer (30 mb means),pressure agl,PRES,6 -182,Temperature in boundary layer (30 mb means),pressure agl,TMP,6 -183,Potential temperature in boundary layer (30 mb means),pressure agl,POT,1 -184,Dew point temperature in boundary layer (30 mb means),pressure agl,DPT,1 -185,Specific humidity in boundary layer (30 mb means),pressure agl,SPFH,6 -186,RH in boundary layer (30 mb means),pressure agl,RH,6 -187,Moisture convergence in boundary layer (30 mb means),pressure agl,MCONV,1 -188,Precipitable water in boundary layer (30 mb means),pressure agl,PWAT,1 -189,U wind in boundary layer (30 mb means),pressure agl,UGRD,6 -190,V wind in boundary layer (30 mb means),pressure agl,VGRD,6 -191,Omega in boundary layer (30 mb means),pressure agl,VVEL,3 -192,Cloud bottom pressure,cloud base,PRES,1 -193,Cloud top pressure,cloud top,PRES,1 -194,Cloud top temperature,cloud top,TMP,1 -195,Cloud bottom height (above MSL),cloud base,HGT,1 -196,Cloud top height (above MSL),cloud top,HGT,1 -197,Maximum wind pressure level,max wind,PRES,1 -198,Maximum wind height,max wind,HGT,1 -199,U-component of maximum wind,max wind,UGRD,1 -200,V-component of maximum wind,max wind,VGRD,1 -201,Composite radar reflectivity,entire atmosphere,REFC,1 -202,Composite rain radar reflectivity,entire atmosphere,REFZR,1 -203,Composite ice radar reflectivity,entire atmosphere,REFZI,1 -204,Radar reflectivity at certain above ground heights,height agl,REFD,2 -205,Radar reflectivity from rain,height agl,REFZR,2 -206,Radar reflectivity from ice,height agl,REFZI,2 -207,Planetary boundary layer height,surface,HPBL,1 -208,Grid scale cloud bottom pressure,grid scale cloud bottom,PRES,1 -209,Grid scale cloud top pressure,grid scale cloud top,PRES,1 -210,Column integrated cloud water,entire atmosphere,TCOLW,1 -211,Column integrated cloud ice,entire atmosphere,TCOLI,1 -212,Column integrated rain,entire atmosphere,TCOLR,1 -213,Column integrated snow,entire atmosphere,TCOLS,1 -214,Column integrated total condensate,entire atmosphere,TCOLC,1 -215,Column integrated graupel,entire atmosphere,TCOLG,1 -216,Column integrated super cool liquid water,entire atmosphere,TCLSW,1 -217,Column integrated melting ice,entire atmosphere,TCOLM,1 -218,Height of lowest level super cool liquid water,lwst bot lvl of supercooled liq wtr,HGT,1 -219,Height of highest level super cool liquid water,hghst top lvl of supercooled liq wtr,HGT,1 -220,Ceiling height,cloud ceiling,HGT,1 -221,Accumulated land surface model precipitation,surface,LSPA,1 -222,Model top pressure,top of atmosphere,PRES,1 -223,Total column shortwave temperature tendency,entire atmosphere,SWHR,1 -224,Total column longwave temperature tendency,entire atmosphere,LWHR,1 -225,Total column gridded temperature tendency,entire atmosphere,LRGHR,1 -226,Column integrated moisture convergence,entire atmosphere,MCONV,1 -227,Temperature on sigma levels,sigma level,TMP,5 -228,Planetary boundary layer regime,surface,PBLREG,1 -229,Transport wind u component,planetary boundary layer,UGRD,1 -230,Transport wind v component,planetary boundary layer,VGRD,1 -231,Richardson number planetary boundary layer height,planetary boundary layer,HGT,1 -232,Mixing height,surface,MIXHT,1 -233,Radar echo top,entire atmosphere,RETOP,1 -234,Ventilation rate,planetary boundary layer,VRATE,1 -235,Haines index,surface,HINDEX,1 -236,Maximum 2m temperature,height agl,TMAX,1 -237,Minimum 2m temperature,height agl,TMIN,1 -238,Maximum 2m RH,height agl,MAXRH,1 -239,Minimum 2m RH,height agl,MINRH,1 -240,Maximum U-component wind at 10m,height agl,MAXUW,1 -241,Maximum V-component wind at 10m,height agl,MAXVW,1 -242,Maximum wind speed at 10m,height agl,WIND,1 -243,Maximum 1km reflectivity,height agl,MAXREF,1 -244,Maximum updraft vertical velocity,isobaric layer,MAXUVV,1 -245,Maximum downdraft vertical velocity,isobaric layer,MAXDVV,1 -246,Lightning,surface,LTNG,1 -247,Radar derived vertically integrated liquid,entire atmosphere,VIL,1 -248,Updraft helicity (2-5 km),height agl,UPHL,1 -249,Maximum updraft helicity (2-5 km),height agl,MXUPHL,1 -250,Minimum updraft helicity (2-5 km),height agl,MNUPHL,1 -251,Minimum updraft helicity (0-3 km),height agl,MNUPHL,1 -252,Maximum updraft helicity (0-3 km),height agl,MXUPHL,1 -253,Maximum relative vertical vorticity (0-1 km),height agl,RELV,1 -254,Maximum relative vertical vorticity at hybrid level 1,hybrid,RELV,1 -255,Maximum relative vertical vorticity (0-2 km),height agl,RELV,1 -256,Maximum derived radar reflectivity at -10 C,isothermal,MAXREF,1 -257,Radar reflectivity at -10 C,isothermal,REFD,1 \ No newline at end of file diff --git a/docs/SRW_BGDAWP_table.rst b/docs/SRW_BGDAWP_table.rst deleted file mode 100644 index f578bd310..000000000 --- a/docs/SRW_BGDAWP_table.rst +++ /dev/null @@ -1,11 +0,0 @@ -********************************************************** -Fields Requested in the UPP Parameter Table for SRW BGDAWP -********************************************************** - -Field description (column 1), level type as defined by WMO (column 2), abbreviated names -as they appear in the Grib2 output file (column 3), and number of levels output (column 4). - -.. csv-table:: - :file: SRW_BGDAWP_table.csv - :widths: 5, 40, 30, 15, 10 - :header-rows: 1 diff --git a/docs/SRW_BGRD3D_table.csv b/docs/SRW_BGRD3D_table.csv deleted file mode 100644 index d9567b15d..000000000 --- a/docs/SRW_BGRD3D_table.csv +++ /dev/null @@ -1,217 +0,0 @@ -No.,Field Description,Level Type,Short Name,nlvl -1,Height on pressure surface,isobaric,HGT,4 -2,Temperature on pressure surface,isobaric,TMP,5 -3,Relative humidity on pressure surface,isobaric,RH,4 -4,U component of wind on pressure surface,isobaric,UGRD,4 -5,V component of wind on pressure surface,isobaric,VGRD,4 -6,Omega on pressure surface,isobaric,VVEL,4 -7,Specific humidity on pressure surface,isobaric,SPFH,4 -8,Absolute vorticity on pressure surface,isobaric,ABSV,4 -9,Pressure on model surface,hybrid,PRES,64 -10,Height on model surface,hybrid,HGT,64 -11,Temperature on model surface,hybrid,TMP,64 -12,Specific humidity on model surface,hybrid,SPFH,64 -13,U component of wind on model surface,hybrid,UGRD,64 -14,V component of wind on model surface,hybrid,VGRD,64 -15,Omega on model surface,hybrid,VVEL,64 -16,Vertical velocity on model surface,hybrid,DZDT,64 -17,Turbulent kinetic energy on model surface,hybrid,TKE,64 -18,Temperature tendency from grid scale latent heat release (time-averaged),hybrid,LRGHR,64 -19,Mesinger (Membrane) sea level pressure,mean sea level,MSLET,1 -20,Shuell sea level pressure,mean sea level,PRES,1 -21,Temperature at 2m,height agl,TMP,1 -22,Specific humidity at 2m,height agl,SPFH,1 -23,Dew point temperature at 2m,height agl,DPT,1 -24,Relative humidity at 2m,height agl,RH,1 -25,U component of wind at 10m,height agl,UGRD,1 -26,V component of wind at 10m,height agl,VGRD,1 -27,Potential temperature at 10m,height agl,POT,1 -28,Specific humidity at 10m,height agl,SPFH,1 -29,Surface Pressure,surface,PRES,1 -30,Terrain height,surface,HGT,1 -31,Skin potential temperature,surface,POT,1 -32,Skin specific humidity,surface,SPFH,1 -33,Skin temperature,surface,TMP,1 -34,Maximum updraft vertical velocity (10-100 hPa),isobaric,MAXUVV,1 -35,Maximum downdraft vertical velocity (10-100 hPa),isobaric,MAXDVV,1 -36,Maximum updraft helicity (0-3 km),height agl,MXUPHL,1 -37,Maximum updraft helicity (2-5 km),height agl,MXUPHL,1 -38,Minimum updraft helicity (2-5 km),height agl,MNUPHL,1 -39,Minimum updraft helicity (0-3 km),height agl,MNUPHL,1 -40,Maximum relative vertical vorticity (0-1 km),height agl,RELV,1 -41,Maximum relative vertical vorticity at hybrid level 1,hybrid,RELV,1 -42,Maximum relative vertical vorticity (0-2 km),height agl,RELV,1 -43,Maximum U-component wind at 10m,height agl,MAXUW,1 -44,Maximum V-component wind at 10m,height agl,MAXVW,1 -45,Maximum derived radar reflectivity at 1 km,height agl,MAXREF,1 -46,Maximum derived radar reflectivity at -10 C,isothermal,MAXREF,1 -47,Radar reflectivity at -10 C,isothermal,REFD,1 -48,Maximum 2m temperature,height agl,TMAX,1 -49,Minimum 2m temperature,height agl,TMIN,1 -50,Maximum 2m RH,height agl,MAXRH,1 -51,Minimum 2m RH,height agl,MINRH,1 -52,Soil temperature in between each soil layer,depth below land surface,TSOIL,4 -53,Soil moisture in between each soil layer,depth below land surface,SOILW,4 -54,Total soil moisture,depth below land surface,SOILM,1 -55,Heat exchange coeff at surface,surface,SFEXC,1 -56,Vegetation cover,surface,VEG,1 -57,Soil moisture availability,depth below land surface,MSTAV,1 -58,Soil temperature at 3m,depth below land surface,TSOIL,1 -59,Ground heat flux (instantaneous),surface,GFLUX,1 -60,Plant canopy surface water,surface,CNWAT,1 -61,Snow water equivalent,surface,WEASD,1 -62,Lifted index—best,pressure above ground,4LFTX,1 -63,Column integrated precipitable water,entire atmosphere,PWAT,1 -64,Accumulated total precipitation,surface,APCP,1 -65,Accumulated grid-scale precipitation,surface,NCPCP,1 -66,Continuous accumulated total precipitation,surface,APCP,1 -67,Continuous accumulated grid-scale precipitation,surface,NCPCP,1 -68,Accumulated snowfall,surface,WEASD,1 -69,Accumulated total snow melt,surface,SNOM,1 -70,Accumulated storm surface runoff,surface,SSRUN,1 -71,Accumulated base flow runoff,surface,BGRUN,1 -72,Categorical rain (instantaneous),surface,CRAIN,1 -73,Categorical snow (instantaneous),surface,CSNOW,1 -74,Categorical ice pellets (instantaneous),surface,CICEP,1 -75,Categorical freezing rain (instantaneous),surface,CFRZR,1 -76,Precipitation rate (instantaneous),surface,PRATE,1 -77,Fraction of frozen precipitation,surface,CPOFP,1 -78,Cloud water mixing ratio on model surface,hybrid,CLWMR,64 -79,Cloud ice mixing ratio on model surface,hybrid,ICMR,64 -80,Graupel mixing ratio on mmodel surface,hybrid,GRLE,64 -81,Cloud fraction on model surface,hybrid,TCDC,64 -82,Rain mixing ratio on model surface,hybrid,RWMR,64 -83,Snow mixing ratio on model surface,hybrid,SNMR,64 -84,Rimming factor for Ferrier scheme on model surface,hybrid,RIME,64 -85,Total condensate for Ferrier scheme on mode surface,hybrid,TCOND,64 -86,Model level fraction of rain for Ferrier scheme,hybrid,FRAIN,64 -87,Model level fraction of ice for Ferrier scheme,hybrid,FICE,64 -88,Low level cloud fraction,low cloud layer,LCDC,1 -89,Mid level cloud fraction,mid cloud layer,MCDC,1 -90,High level cloud fraction,high cloud layer,HCDC,1 -91,Total cloud fraction,entire atmosphere,TCDC,1 -92,Total cloud fraction (time-averaged),entire atmosphere,TCDC,1 -93,stratospheric cloud fraction (time-averaged),entire atmosphere,CDLYR,1 -94,Outgoing surface shortwave radiation (instantaneous),surface,USWRF,1 -95,Outgoing surface longwave radiation (instantaneous),surface,ULWRF,1 -96,Incoming surface shortwave radiation (time-averaged),surface,DSWRF,1 -97,Incoming surface longwave radiation (time-averaged),surface,DLWRF,1 -98,Outgoing surface shortwave radiation (time-averaged),surface,USWRF,1 -99,Outgoing surface longwave radiation (time-averaged),surface,ULWRF,1 -100,Outgoing model top shortwave radiation (time-averaged),top of atmosphere,USWRF,1 -101,Outgoing model top longwave radiation (time-averaged),top of atmosphere,ULWRF,1 -102,Incoming surface shortwave radiation (instantaneous),surface,DSWRF,1 -103,Incoming surface longwave radiation (instantaneous),surface,DLWRF,1 -104,Clear sky incoming surface shortwave (instantaneous),surface,CSDSF,1 -105,Roughness length,surface,SFCR,1 -106,Friction velocity,surface,FRICV,1 -107,Surface drag coefficient,surface,CD,1 -108,Surface u wind stress,surface,UFLX,1 -109,Surface v wind stress,surface,VFLX,1 -110,Surface sensible heat flux (time-averaged),surface,SHTFL,1 -111,Ground heat flux (time-averaged),surface,GFLUX,1 -112,Snow phase change heat flux (time-averaged),surface,SNOHF,1 -113,Surface latent heat flux (time-averaged),surface,LHTFL,1 -114,Accumulated surface evaporation,surface,EVP,1 -115,Accumulated potential evaporation,surface,PEVAP,1 -116,Surface sensible heat flux (instantaneous),surface,SHTFL,1 -117,Surface latent heat flux (instantaneous),surface,LHTFL,1 -118,Latitude,surface,NLAT,1 -119,Longitude,surface,ELON,1 -120,Land sea mask (land=1 sea=0),surface,LAND,1 -121,Sea ice mask,surface,ICEC,1 -122,Mass point at eta surface mask,surface,LMH,1 -123,Velocity point at eta surface mask,surface,LMV,1 -124,Surface albedo,surface,ALBDO,1 -125,Sea surface temperature,surface,WTMP,1 -126,Pressure in boundary layer (30 mb means),pressure agl,PRES,6 -127,Temperature in boundary layer (30 mb means),pressure agl,TMP,6 -128,Potential temperature in boundary layer (30 mb means),pressure agl,POT,1 -129,Dew point temperature in boundary layer (30 mb means),pressure agl,DPT,1 -130,Specific humidity in boundary layer (30 mb means),pressure agl,SPFH,6 -131,RH in boundary layer (30 mb means),pressure agl,RH,6 -132,Moisture convergence in boundary layer (30 mb means),pressure agl,MCONV,1 -133,Precipitable water in boundary layer (30 mb means),pressure agl,PWAT,1 -134,U wind in boundary layer (30 mb means),pressure agl,UGRD,6 -135,V wind in boundary layer (30 mb means),pressure agl,VGRD,6 -136,Accumulated land surface model precipitation,surface,LSPA,1 -137,Model top pressure,top of atmosphere,PRES,1 -138,Pressure thickness,hybrid,PRES,1 -139,Sigma pressure thickness,hybrid,PRES,1 -140,Plant canopy surface water,surface,CNWAT,1 -141,Ground heat flux (instantaneous),surface,GFLUX,1 -142,Lifted index—surface based (500-1000 hPa),isobaric,LFTX,1 -143,Convective available potential energy,surface,CAPE,1 -144,Best cape,pressure above ground,CAPE,1 -145,Mixed layer cape,pressure above ground,CAPE,1 -146,Unstable cape,pressure above ground,CAPE,1 -147,Convective inhibition,surface,CIN,1 -148,Best cin,pressure above ground,CIN,1 -149,Mixed layer cin,pressure above ground,CIN,1 -150,Unstable cin,pressure above ground,CIN,1 -151,LCL level pressure,pressure layer agl,PLPL,1 -152,Helicity,height agl,HLCY,2 -153,U component storm motion,height agl,USTM,1 -154,V component storm motion,height agl,VSTM,1 -155,Cloud bottom pressure,cloud base,PRES,1 -156,Cloud top pressure,cloud top,PRES,1 -157,Cloud top temperature,cloud top,TMP,1 -158,Pressure at tropopause,tropopause,PRES,1 -159,Height at tropopause,tropopause,HGT,1 -160,Temperature at tropopause,tropopause,TMP,1 -161,U component of wind at tropopause,tropopause,UGRD,1 -162,V component of wind at tropopause,tropopause,VGRD,1 -163,Wind shear at tropopause,tropopause,VWSH,1 -164,Temperature at flight levels,height msl,TMP,10 -165,U component of wind at flight levels,height msl,UGRD,10 -166,V component of wind at flight levels,height msl,VGRD,10 -167,Freezing level height,0 degree isotherm,HGT,1 -168,Freezing level relative humidity,0 degree isotherm,RH,1 -169,Highest freezing level height,highest tropospheric frz lvl,HGT,1 -170,Maximum wind pressure level,max wind,PRES,1 -171,Maximum wind height,max wind,HGT,1 -172,U-component of maximum wind,max wind,UGRD,1 -173,V-component of maximum wind,max wind,VGRD,1 -174,Maximum wind speed at 10m,height agl,WIND,1 -175,Cloud bottom height (above MSL),cloud base,HGT,1 -176,Cloud top height (above MSL),cloud top,HGT,1 -177,Visibility,surface,VIS,1 -178,Composite radar reflectivity,entire atmosphere,REFC,1 -179,Grid scale cloud bottom pressure,grid scale cloud bottom,PRES,1 -180,Grid scale cloud top pressure,grid scale cloud top,PRES,1 -181,Column integrated cloud water,entire atmosphere,TCOLW,1 -182,Column integrated cloud ice,entire atmosphere,TCOLI,1 -183,Column integrated rain,entire atmosphere,TCOLR,1 -184,Column integrated snow,entire atmosphere,TCOLS,1 -185,Column integrated total condensate,entire atmosphere,TCOLC,1 -186,Column integrated graupel,entire atmosphere,TCOLG,1 -187,Vegetation type,surface,VGTYP,1 -188,Soil type,surface,SOTYP,1 -189,Canopy conductance,surface,CCOND,1 -190,Planetary boundary layer height,surface,HPBL,1 -191,Snow depth,surface,SNOD,1 -192,Snow sublimation,surface,SBSNO,1 -193,Air dry soil moisture,surface,SMDRY,1 -194,Soil moist porosity,surface,POROS,1 -195,Minimum stomatal resistance,surface,RSMIN,1 -196,Number of root layers,surface,RLYRS,1 -197,Soil moist wilting point,surface,WILT,1 -198,Soil moist reference,surface,SMREF,1 -199,Canopy conductance - solar component,surface,RCS,1 -200,Canopy conductance - temperature component,surface,RCT,1 -201,Canopy conductance - humidity component,surface,RCQ,1 -202,Canopy conductance - soil component,surface,RCSOL,1 -203,Potential evaporation,surface,PEVPR,1 -204,Surface wind gust,surface,GUST,1 -205,Lowest wet bulb zero height,lowest lvl wet bulb zero,HGT,1 -206,Leaf area index,surface,LAI,1 -207,Clear sky incoming surface shortwave (instantaneous),surface,CSDSF,1 -208,Cloud fraction on sigma surface,sigma,TCDC,22 -209,Richardson number planetary boundary layer height,planetary boundary layer,HGT,1 -210,Mixing height,surface,MIXHT,1 -211,Temperature at 10m,height agl,TMP,1 -212,Time-averaged percentage snow cover,surface,SNOWC,1 -213,Time-averaged surface pressure,surface,PRES,1 -214,Time-averaged 10m temperature,height agl,TMP,1 -215,Time-averaged mass exchange coefficient,surface,AKHS,1 -216,Time-averaged wind exchange coefficient,surface,AKMS,1 \ No newline at end of file diff --git a/docs/SRW_BGRD3D_table.rst b/docs/SRW_BGRD3D_table.rst deleted file mode 100644 index 246c178a1..000000000 --- a/docs/SRW_BGRD3D_table.rst +++ /dev/null @@ -1,11 +0,0 @@ -********************************************************** -Fields Requested in the UPP Parameter Table for SRW BGRD3D -********************************************************** - -Field description (column 1), level type as defined by WMO (column 2), abbreviated names -as they appear in the Grib2 output file (column 3), and number of levels output (column 4). - -.. csv-table:: - :file: SRW_BGRD3D_table.csv - :widths: 5, 40, 30, 15, 10 - :header-rows: 1 diff --git a/docs/UFS_unified_variables_table.csv b/docs/UFS_unified_variables_table.csv new file mode 100644 index 000000000..e863c9295 --- /dev/null +++ b/docs/UFS_unified_variables_table.csv @@ -0,0 +1,244 @@ +Field Description,Model Variable NetCDF Name,UPP Internal Name,Dimensions,dyn (atm) or phy (sfc),Notes +U-component of wind,ugrd,uh,3d,dyn, +V-component of wind,vgrd,vh,3d,dyn, +Specific humidity,spfh,q,3d,dyn, +Temperature,tmp,t,3d,dyn, +Ozone mixing ratio,o3mr,o3,3d,dyn, +Geometric vertical velocity,dzdt,wh,3d,dyn, +Cloud water mixing ratio,clwmr,qqw,3d,dyn, +Layer thickness in pressure on hybrid levels,dpres,dpres,3d,dyn, +Layer thickness in height,delz,na,3d,dyn, +Ice mixing ratio,icmr,qqi,3d,dyn, +Rain mixing ratio,rwmr,qqr,3d,dyn, +Snow mixing ratio,snmr,qqs,3d,dyn, +Graupel mixing ratio,grle,qqg,3d,dyn, +Instantaneous 3d cloud fraction,cld_amt,cfr,3d,dyn,imp_physics = 11 +Instantaneous 3d cloud fraction,cldfra,cfr,3d,phy,imp_physics ≠ 11 +Max hourly updraft velocity,upvvelmax,w_up_max,2d,dyn,regional FV3 +Max hourly downdraft velocity,dnvvelmax,w_dn_max,2d,dyn,regional FV3 +Max hourly updraft helicity,uhmax25,up_heli_max,2d,dyn,regional FV3 +Min hourly updraft helicity,uhmin25,up_heli_min,2d,dyn,regional FV3 +Max hourly 0-3km updraft helicity,uhmax03,up_heli_max03,2d,dyn,regional FV3 +Min hourly 0-3km updraft helicity,uhmin03,up_heli_min03,2d,dyn,regional FV3 +Max 0-1km relative vorticity max,maxvort01,rel_vort_max01,2d,dyn,regional FV3 +Max 0-2km relative vorticity max,maxvort02,rel_vort_max,2d,dyn,regional FV3 +Max hybrid level 1 relative vorticity max,maxvorthy1,rel_vort_maxhy1,2d,dyn,regional FV3 +Surface height,hgtsfc,"zint(:,:,LM+1)",2d,dyn, +Reflectivity,refl_10cm,REF_10CM,3d,phy, +Turbulence kinetic energy,qke,q2,3d,phy, +Ice-friendly aerosol number concentration,nifa,qqnwfa,3d,phy, +Water-friendly aerosol number concentration,nwfa,qqnwfa,3d,phy, +Land mask,land,sm,2d,phy, +Sea ice mask,icec,sice,2d,phy, +PBL height,hpbl,pblh,2d,phy, +Frictional velocity,fricv,ustar,2d,phy, +Roughness length,sfcr,z0,2d,phy, +Surface exchange coefficient,sfexc,SFCEXC,2d,phy, +Aerodynamic conductance,acond,acond,2d,phy, +Mid day avg albedo,albdo_ave,avgalbedo,2d,phy, +Surface potential temperature,tmpsfc,ths,2d,phy, +Foundation temperature,tref,fdnsst,2d,phy, +Convective precip in m per physics time step,cpratb_ave,avgcprate,2d,phy, +Convective precip - coninuous bucket,cprat_ave,avgcprate_cont,2d,phy, +Average precip rate in m per physics time step,prateb_ave,avgprec,2d,phy, +Average precip rate - continuous bucket,prate_ave,avgprec_cont,2d,phy, +Precip rate,tprcp,prec,2d,phy, +Convective precip rate,cnvprcp,cprate,2d,phy, +Max hourly surface precip rate,pratemax,prate_max,2d,phy, +Max hourly 1 km agl reflectivity,refdmax,refd_max,2d,phy, +Max hourly -10C reflectivity,refdmax263k,refdm10c_max,2d,phy, +Max hourly u comp of 10m agl wind,u10max,u10max,2d,phy, +Max hourly v comp of 10m agl wind,v10max,v10max,2d,phy, +Max hourly 10m agl wind speed,spd10max,wspd10max,2d,phy, +Instantaneous snow water equivalent,weasd,sno,2d,phy, +Average snow cover,snowc_ave,snoavg,2d,phy, +Snow depth in mm,snod,si,2d,phy, +2m temperature,tmp2m,tshltr,2d,phy, +2m specific humidity,spfh2m,qshltr,2d,phy, +Time-averaged column cloud fraction,tcdc_aveclm,avgtcdc,2d,phy, +Maximum snow albedo,snoalb,mxsnal,2d,phy, +Land fraction,lfrac,landfrac,2d,phy, +Average high cloud fraction,tcdc_avehcl,avgcfrach,2d,phy, +Average low cloud fraction,tcdc_avelcl,avgcfracl,2d,phy, +Average mid cloud fraction,tcdc_avemcl,avgcfracm,2d,phy, +Instantaneous convective cloud fraction,tcdccnvcl,cnvcfr,2d,phy, +Slope type,sltyp,islope,2d,phy, +Plant canopy sfc water in m,cnwat,cmc,2d,phy, +Frozen precip fraction,cpofp,sr,2d,phy, +Sea ice skin temperature,tisfc,ti,2d,phy, +Vegetation fraction,veg,vegfrc,2d,phy, +Liquid volumetric soil moisture,soill1/soill2/soill3/soill4,sh2o,2d>3d,phy,all soil levels read into array +Volumetric soil moisture,soilw1/soilw2/soilw3/soilw4.....,smc,2d>3d,phy,"all soil levels read into array, L5-9 RUC only" +Soil temperature,soilt1/soilt2/soilt3/soilt4.....,stc,2d>3d,phy,"all soil levels read into array, L5-9 RUC only" +Time averaged incoming surface longwave,dlwrf_ave,alwin,2d,phy, +Instantaneous incoming surface longwave,dlwrf,rlwin,2d,phy, +Time averaged outgoing surface longwave,ulwrf_ave,alwout,2d,phy, +Instataneous outgoing surface longwave,ulwrf,radot,2d,phy, +Time average outgoing model top longwave,ulwrf_avetoa,alwtoa,2d,phy, +Time averaged incoming surface shortwave,dswrf_ave,aswin,2d,phy, +Instantaneous incoming surface shortwave,dswrf,rswin,2d,phy, +Time averaged incoming sfc uv-b,duvb_ave,auvbin,2d,phy, +Time averaged incoming sfc clear sky uv-b,cduvb_ave,auvbinc,2d,phy, +Time averaged outgoing sfc shortwave,uswrf_ave,aswout,2d,phy, +Inst outgoing sfc shortwave,uswrf,rswout,2d,phy, +Time averaged model top incoming shortwave,dswrf_avetoa,aswintoa,2d,phy, +Time averaged model top outgoing shortwave,uswrf_avetoa,aswtoa,2d,phy, +Time averaged surface sensible heat flux,shtfl_ave,sfcshx,2d,phy, +Inst surface sensible heat flux,shtfl,twbs,2d,phy, +Time averaged surface latent heat flux,lhtfl_ave,sfclhx,2d,phy, +Inst surface latent heat flux,lhtfl,qwbs,2d,phy, +Time averaged ground heat flux,gflux_ave,subshx,2d,phy, +Instantaneous ground heat flux,gflux,grnflx,2d,phy, +Time averaged zonal momentum flux,uflx_ave,sfcux,2d,phy, +Time averaged meridional momentum flux,vflx_ave,sfcvx,2d,phy, +Instantaneous zonal momentum flux,uflx,sfcuxi,2d,phy, +Instantaneous meridional momentum flux,vflx,sfcvxi,2d,phy, +Time averaged zonal gravity wave stress,u-gwd_ave,gtaux,2d,phy, +Time averaged meridional gravity wave stress,v-gwd_ave,gtauy,2d,phy, +Time averaged accumulated potential evaporation,pevpr_ave,avgpotevp,2d,phy, +Instantaneous potential evaporation,pevpr,potevp,2d,phy, +10 m u-wind component,ugrd10m,u10,2d,phy, +10 m v-wind component,vgrd10m,v10,2d,phy, +Vegetation type,vtype,ivgtyp,2d,phy, +Soil type,sotyp,isltyp,2d,phy, +Instantaneous convective cloud top pressure,prescnvclt,ptop,2d,phy, +Instantaneous convective cloud bottom pressure,prescnvclb,pbot,2d,phy, +Time averaged low cloud top pressure,pres_avelct,ptopl,2d,phy, +Time averaged low cloud bottom pressure,pres_avelcb,pbotl,2d,phy, +Time averaged low cloud top temperature,tmp_avelct,Ttopl,2d,phy, +Time averaged middle cloud top pressure,pres_avemct,ptopm,2d,phy, +Time averaged middle cloud bottom pressure,pres_avemcb,pbotm,2d,phy, +Time averaged middle cloud top temperature,tmp_avemct,Ttopm,2d,phy, +Time averaged high cloud top pressure,pres_avehct,ptoph,2d,phy, +Time averaged high cloud bottom pressure,pres_avehcb,pboth,2d,phy, +Time averaged high cloud top temperature,tmp_avehct,Ttoph,2d,phy, +Boundary layer cloud cover,tcdc_avebndcl,pblcfr,2d,phy, +Cloud work function,cwork_aveclm,cldwork,2d,phy, +Accumulated total (base+surface) runoff,watr_acc,runoff,2d,phy, +Total water storage in aquifer,wa_acc,twa,2d,phy, +Accumulated evaporation of intercepted water,ecan_acc,tecan,2d,phy, +Accumulated plant transpiration,etran_acc,tetran,2d,phy, +Accumulated soil surface evaporation,edir_acc,tedir,2d,phy, +Shelter max temperature,t02max,maxtshltr,2d,phy,not GFS +Shelter max temperature,tmax_max2m,maxtshltr,2d,phy,GFS only +Shelter min temperature,t02min,mintshltr,2d,phy,not GFS +Shelter min temperature,tmin_min2m,mintshltr,2d,phy,GFS only +Shelter max rh,rh02max,maxrhshltr,2d,phy, +Shelter min rh,rh02min,minrhshltr,2d,phy, +Shelter max specific humidity,spfhmax_max2m,maxqshltr,2d,phy, +Shelter min specific humidity,spfhmin_min2m,minqshltr,2d,phy, +Ice thickness,icetk,dzice,2d,phy, +Wilting point,wilt,smcwlt,2d,phy, +Sunshine duration,sunsd_acc,suntime,2d,phy, +Field capacity,fldcp,fieldcapa,2d,phy, +Time averaged surface visible beam downward solar flux,vbdsf_ave,avisbeamswin,2d,phy, +Time averaged surface visible diffuse downward solar flux,vddsf_ave,avisdiffswin,2d,phy, +Time averaged surface near ir beam downward solar flux,nbdsf_ave,airbeamswin,2d,phy, +Time averaged surface near ir diffuse downward solar flux,nddsf_ave,airdiffswin,2d,phy, +Time averaged surface clear sky outgoing lw,csulf,alwoutc,2d,phy, +Time averaged toa clear sky outgoing lw,csulftoa,alwtoac,2d,phy, +Time averaged surface clear sky outgoing sw,csusf,aswoutc,2d,phy, +Time averaged toa clear sky outgoing sw,csusftoa,aswtoac,2d,phy, +Time averaged surface clear sky incoming lw,csdlf,alwinc,2d,phy, +Time averaged surface clear sky incoming sw,csdsf,aswinc,2d,phy, +Storm runoff,ssrun_acc,SSROFF,2d,phy, +Direct soil evaporation,evbs_ave,avgedir,2d,phy, +Canopy water evaporation,evcw_ave,avgecan,2d,phy, +Averaged precipitation advected heat flux,pah_ave,paha,2d,phy, +Instantaneous precipitation advected heat flux,pahi,pahi,2d,phy, +Plant transpiration,trans_ave,avgetrans,2d,phy, +Snow sublimation,sbsno_ave,avgesnow,2d,phy, +Total soil moisture,soilm,smstot,2d,phy, +Snow phase change heat flux,snohf,snopcx,2d,phy, +Precipitable water,pwat,pwat,2d,phy, +AQF chemical species,aalk1j,aalk1j,3d,dyn,aqfcmaq_on = True +,aalk2j,aalk2j,3d,dyn,aqfcmaq_on = True +,abnz1j,abnz1j,3d,dyn,aqfcmaq_on = True +,abnz2j,abnz2j,3d,dyn,aqfcmaq_on = True +,abnz3j,abnz3j,3d,dyn,aqfcmaq_on = True +,acaj,acaj,3d,dyn,aqfcmaq_on = True +,acet,acet,3d,dyn,aqfcmaq_on = True +,acli,acli,3d,dyn,aqfcmaq_on = True +,aclj,aclj,3d,dyn,aqfcmaq_on = True +,aclk,aclk,3d,dyn,aqfcmaq_on = True +,acors,acors,3d,dyn,aqfcmaq_on = True +,acro_primary,acro_primary,3d,dyn,aqfcmaq_on = True +,acrolein,acrolein,3d,dyn,aqfcmaq_on = True +,aeci,aeci,3d,dyn,aqfcmaq_on = True +,aecj,aecj,3d,dyn,aqfcmaq_on = True +,afej,afej,3d,dyn,aqfcmaq_on = True +,aglyj,aglyj,3d,dyn,aqfcmaq_on = True +,ah2oi,ah2oi,3d,dyn,aqfcmaq_on = True +,ah2oj,ah2oj,3d,dyn,aqfcmaq_on = True +,ah2ok,ah2ok,3d,dyn,aqfcmaq_on = True +,ah3opi,ah3opi,3d,dyn,aqfcmaq_on = True +,ah3opj,ah3opj,3d,dyn,aqfcmaq_on = True +,ah3opk,ah3opk,3d,dyn,aqfcmaq_on = True +,aiso1j,aiso1j,3d,dyn,aqfcmaq_on = True +,aiso2j,aiso2j,3d,dyn,aqfcmaq_on = True +,aiso3j,aiso3j,3d,dyn,aqfcmaq_on = True +,aivpo1j,aivpo1j,3d,dyn,aqfcmaq_on = True +,akj,akj,3d,dyn,aqfcmaq_on = True +,ald2,ald2,3d,dyn,aqfcmaq_on = True +,ald2_primary,ald2_primary,3d,dyn,aqfcmaq_on = True +,aldx,aldx,3d,dyn,aqfcmaq_on = True +,alvoo1i,alvoo1i,3d,dyn,aqfcmaq_on = True +,alvoo1j,alvoo1j,3d,dyn,aqfcmaq_on = True +,alvoo2i,alvoo2i,3d,dyn,aqfcmaq_on = True +,alvoo2j,alvoo2j,3d,dyn,aqfcmaq_on = True +,alvpo1i,alvpo1i,3d,dyn,aqfcmaq_on = True +,alvpo1j,alvpo1j,3d,dyn,aqfcmaq_on = True +,amgj,amgj,3d,dyn,aqfcmaq_on = True +,amnj,amnj,3d,dyn,aqfcmaq_on = True +,anai,anai,3d,dyn,aqfcmaq_on = True +,anaj,anaj,3d,dyn,aqfcmaq_on = True +,anh4i,anh4i,3d,dyn,aqfcmaq_on = True +,anh4j,anh4j,3d,dyn,aqfcmaq_on = True +,anh4k,anh4k,3d,dyn,aqfcmaq_on = True +,ano3i,ano3i,3d,dyn,aqfcmaq_on = True +,ano3j,ano3j,3d,dyn,aqfcmaq_on = True +,ano3k,ano3k,3d,dyn,aqfcmaq_on = True +,aolgaj,aolgaj,3d,dyn,aqfcmaq_on = True +,aolgbj,aolgbj,3d,dyn,aqfcmaq_on = True +,aorgcj,aorgcj,3d,dyn,aqfcmaq_on = True +,aothri,aothri,3d,dyn,aqfcmaq_on = True +,aothrj,aothrj,3d,dyn,aqfcmaq_on = True +,apah1j,apah1j,3d,dyn,aqfcmaq_on = True +,apah2j,apah2j,3d,dyn,aqfcmaq_on = True +,apah3j,apah3j,3d,dyn,aqfcmaq_on = True +,apcsoj,apcsoj,3d,dyn,aqfcmaq_on = True +,aseacat,aseacat,3d,dyn,aqfcmaq_on = True +,asij,asij,3d,dyn,aqfcmaq_on = True +,aso4i,aso4i,3d,dyn,aqfcmaq_on = True +,aso4j,aso4j,3d,dyn,aqfcmaq_on = True +,aso4k,aso4k,3d,dyn,aqfcmaq_on = True +,asoil,asoil,3d,dyn,aqfcmaq_on = True +,asqtj,asqtj,3d,dyn,aqfcmaq_on = True +,asvoo1i,asvoo1i,3d,dyn,aqfcmaq_on = True +,asvoo1j,asvoo1j,3d,dyn,aqfcmaq_on = True +,asvoo2i,asvoo2i,3d,dyn,aqfcmaq_on = True +,asvoo2j,asvoo2j,3d,dyn,aqfcmaq_on = True +,asvoo3j,asvoo3j,3d,dyn,aqfcmaq_on = True +,asvpo1i,asvpo1i,3d,dyn,aqfcmaq_on = True +,asvpo1j,asvpo1j,3d,dyn,aqfcmaq_on = True +,asvpo2i,asvpo2i,3d,dyn,aqfcmaq_on = True +,asvpo2j,asvpo2j,3d,dyn,aqfcmaq_on = True +,asvpo3j,asvpo3j,3d,dyn,aqfcmaq_on = True +,atij,atij,3d,dyn,aqfcmaq_on = True +,atol1j,atol1j,3d,dyn,aqfcmaq_on = True +,atol2j,atol2j,3d,dyn,aqfcmaq_on = True +,atol3j,atol3j,3d,dyn,aqfcmaq_on = True +,atrp1j,atrp1j,3d,dyn,aqfcmaq_on = True +,atrp2j,atrp2j,3d,dyn,aqfcmaq_on = True +,axyl1j,axyl1j,3d,dyn,aqfcmaq_on = True +,axyl2j,axyl2j,3d,dyn,aqfcmaq_on = True +,axyl3j,axyl3j,3d,dyn,aqfcmaq_on = True +,pm25ac,pm25ac,3d,dyn,aqfcmaq_on = True +,pm25at,pm25at,3d,dyn,aqfcmaq_on = True +,pm25co,pm25co,3d,dyn,aqfcmaq_on = True +Instantaneous aod550 optical depth,aod550,aod550,2d,phy,rdaod = True +,du_aod550,du_aod550,2d,phy,rdaod = True +,ss_aod550,ss_aod550,2d,phy,rdaod = True +,su_aod550,su_aod550,2d,phy,rdaod = True +,oc_aod550,oc_aod550,2d,phy,rdaod = True +,bc_aod550,bc_aod550,2d,phy,rdaod = True diff --git a/docs/UFS_unified_variables_table.rst b/docs/UFS_unified_variables_table.rst new file mode 100644 index 000000000..91294e36e --- /dev/null +++ b/docs/UFS_unified_variables_table.rst @@ -0,0 +1,13 @@ +******************************** +Unified Model Variables from UFS +******************************** + +Unified model variables read by UPP (column 1), the name of the variable in the model NetCDF file (column 2), +corresponding UPP internal name that the variable is read in as (column 3), variable dimension (column 4), +whether the variable resides in the dyn (atm) or phy (sfc) NetCDF file, and relevant notes such as +dependencies (column 5). + +.. csv-table:: + :file: UFS_unified_variables_table.csv + :widths: 25, 15, 15, 10, 15, 20 + :header-rows: 1 diff --git a/fix/Breadboard/2.5km_climo_snoden_fall-SON.gfs.3072.1536.grib2 b/fix/Breadboard/2.5km_climo_snoden_fall-SON.gfs.3072.1536.grib2 new file mode 100644 index 000000000..7024f3f71 Binary files /dev/null and b/fix/Breadboard/2.5km_climo_snoden_fall-SON.gfs.3072.1536.grib2 differ diff --git a/fix/Breadboard/2.5km_climo_snoden_fall-SON.grb b/fix/Breadboard/2.5km_climo_snoden_fall-SON.grb new file mode 100644 index 000000000..f0c5d27ce Binary files /dev/null and b/fix/Breadboard/2.5km_climo_snoden_fall-SON.grb differ diff --git a/fix/Breadboard/2.5km_climo_snoden_spring-MAM.gfs.3072.1536.grib2 b/fix/Breadboard/2.5km_climo_snoden_spring-MAM.gfs.3072.1536.grib2 new file mode 100644 index 000000000..3d862701c Binary files /dev/null and b/fix/Breadboard/2.5km_climo_snoden_spring-MAM.gfs.3072.1536.grib2 differ diff --git a/fix/Breadboard/2.5km_climo_snoden_spring-MAM.grb b/fix/Breadboard/2.5km_climo_snoden_spring-MAM.grb new file mode 100644 index 000000000..6e2a010aa Binary files /dev/null and b/fix/Breadboard/2.5km_climo_snoden_spring-MAM.grb differ diff --git a/fix/Breadboard/2.5km_climo_snoden_winter-DJF.gfs.3072.1536.grib2 b/fix/Breadboard/2.5km_climo_snoden_winter-DJF.gfs.3072.1536.grib2 new file mode 100644 index 000000000..3ca2a2791 Binary files /dev/null and b/fix/Breadboard/2.5km_climo_snoden_winter-DJF.gfs.3072.1536.grib2 differ diff --git a/fix/Breadboard/2.5km_climo_snoden_winter-DJF.grb b/fix/Breadboard/2.5km_climo_snoden_winter-DJF.grb new file mode 100644 index 000000000..e94bd1ba4 Binary files /dev/null and b/fix/Breadboard/2.5km_climo_snoden_winter-DJF.grb differ diff --git a/fix/Breadboard/Breadboard1.nsw b/fix/Breadboard/Breadboard1.nsw new file mode 100644 index 000000000..6e9b2e6be --- /dev/null +++ b/fix/Breadboard/Breadboard1.nsw @@ -0,0 +1,43 @@ +// Weights saved from breadboard C:\MY DOCUMENTS\BREADBOARD1R.NSB. +// Saved after epoch 1, exemplar 0. + +#NSWeightFileVersion 225 + +#inputFile File +7 +1.077844262123108e+000 -1.778443008661270e-001 +2.295625507831574e-001 6.163756549358368e-002 +2.081887423992157e-001 6.210270524024963e-001 +3.646677434444428e-001 1.214343756437302e-001 +2.430133521556854e-001 3.004860281944275e-001 +1.935067623853684e-001 4.185551702976227e-001 +1.962280571460724e-001 -4.804643988609314e-001 +0 + +#inputAxon Axon +7 1 +1 +0 + +#hidden1Axon TanhAxon +40 1 +1 +40 -1.150484442710877e+000 -1.461968779563904e+000 1.349107265472412e+000 6.686212420463562e-001 -8.486616015434265e-001 -1.908162593841553e+000 -1.514992356300354e+000 -1.632351636886597e+000 -1.794843912124634e+000 1.354879975318909e+000 1.389558911323547e+000 1.464104652404785e+000 1.896052122116089e+000 1.401677846908569e+000 1.436681509017944e+000 -1.590880393981934e+000 -1.070504426956177e+000 2.047163248062134e+000 1.564107656478882e+000 1.298712372779846e+000 -1.316817998886108e+000 -1.253177642822266e+000 -1.392926216125488e+000 7.356406450271606e-001 1.594561100006104e+000 -1.532955884933472e+000 -1.021214842796326e+000 1.341110348701477e+000 6.124811172485352e-001 1.415654063224793e+000 -8.509962558746338e-001 1.753035664558411e+000 6.275475621223450e-001 1.482843875885010e+000 1.326028347015381e+000 1.641556143760681e+000 1.339018464088440e+000 -1.374068379402161e+000 -1.220067739486694e+000 1.714797854423523e+000 + +#outputAxon SoftMaxAxon +3 1 +1 +3 0.000000000000000e+000 0.000000000000000e+000 0.000000000000000e+000 + +#hidden1Synapse FullSynapse +280 -4.612099826335907e-001 -3.177818655967712e-001 -2.800635099411011e-001 -6.984808295965195e-002 6.583837419748306e-002 -5.769817233085632e-001 3.955098092556000e-001 -1.624705344438553e-001 -2.889076173305512e-001 -9.411631226539612e-001 -5.058886408805847e-001 -3.110982775688171e-001 -3.723000884056091e-001 8.419776558876038e-001 2.598794996738434e-001 -1.364605724811554e-001 9.416468143463135e-001 -4.025689139962196e-002 4.176554381847382e-001 1.196979433298111e-001 -3.846398293972015e-001 -1.414917409420013e-001 -2.344214916229248e+000 -3.556166291236877e-001 -7.762963771820068e-001 -1.243659138679504e+000 4.907984733581543e-001 -1.891903519630432e+000 -5.802390575408936e-001 -5.546363592147827e-001 -4.520095884799957e-001 -2.473797500133514e-001 -7.757837772369385e-001 -5.350160598754883e-001 1.817676275968552e-001 -1.932217180728912e-001 5.944451093673706e-001 -6.568105518817902e-002 -1.562235504388809e-001 4.926294833421707e-002 -6.931540369987488e-001 7.082754969596863e-001 -3.878217563033104e-002 5.063381195068359e-001 -7.642447352409363e-001 -2.539043128490448e-001 -4.328470230102539e-001 -4.773662984371185e-001 6.699458956718445e-001 -1.670347154140472e-001 6.986252665519714e-001 -6.806275844573975e-001 1.059119179844856e-001 5.320579931139946e-002 -4.806780517101288e-001 7.601988911628723e-001 -1.864496916532517e-001 -3.076690435409546e-001 -6.505665779113770e-001 7.355872541666031e-002 -4.033335149288178e-001 -2.168276757001877e-001 5.354191064834595e-001 2.991014420986176e-001 4.275756180286408e-001 6.465418934822083e-001 -1.401910781860352e-001 5.381527543067932e-001 9.247279167175293e-001 -3.687029778957367e-001 6.354923844337463e-001 -1.423558890819550e-001 9.430686831474304e-001 1.187003701925278e-001 5.426434278488159e-001 7.573884129524231e-001 3.361994773149490e-002 3.300542756915093e-002 -4.439333379268646e-001 5.953744649887085e-001 3.412617444992065e-001 1.421828866004944e-001 5.224847793579102e-001 -8.267756700515747e-001 5.009499788284302e-001 2.736742198467255e-001 8.603093624114990e-001 9.373022615909576e-002 1.714528501033783e-001 9.114132076501846e-002 -1.638108491897583e-001 5.879403948783875e-001 5.585592240095139e-003 8.149939179420471e-001 -1.340572237968445e-001 3.880683779716492e-001 3.857498764991760e-001 -8.105239868164063e-001 5.239543914794922e-001 7.420576363801956e-002 7.694411277770996e-001 -3.954831138253212e-002 5.615213513374329e-001 4.560695886611939e-001 -5.006425976753235e-001 -4.725854694843292e-001 5.887325108051300e-002 -3.199687898159027e-001 -5.229111015796661e-002 -6.034490466117859e-001 -8.414428234100342e-001 1.826022863388062e-001 -6.954011321067810e-001 -5.277091860771179e-001 -9.834931492805481e-001 -2.964940369129181e-001 1.752081327140331e-002 -2.412298470735550e-001 5.861807465553284e-001 3.650662600994110e-001 -1.846716850996018e-001 3.277707397937775e-001 1.213769540190697e-001 1.398152709007263e-001 1.624975651502609e-001 -7.172397375106812e-001 -4.065496101975441e-002 -1.131931394338608e-001 7.050336003303528e-001 3.453079611063004e-002 5.642467141151428e-001 7.171959280967712e-001 -3.295499980449677e-001 5.192958116531372e-001 7.558688521385193e-001 6.164067387580872e-001 -1.597565859556198e-001 1.512383669614792e-001 5.231227278709412e-001 -2.199545800685883e-001 -3.987313508987427e-001 -9.710572957992554e-001 -4.689137935638428e-001 -4.037811756134033e-001 -4.528387784957886e-001 -4.784810543060303e-001 1.759306043386459e-001 7.449938654899597e-001 1.120681285858154e+000 -5.609570741653442e-001 1.393345594406128e+000 1.374282408505678e-002 -2.458193153142929e-001 1.237058401107788e+000 -4.854794219136238e-002 -6.664386391639710e-001 -8.786886334419251e-001 -3.208510577678680e-001 -4.315690398216248e-001 -5.186472535133362e-001 -2.117208093404770e-001 8.998587727546692e-002 7.763032317161560e-001 1.078992128372192e+000 3.667660653591156e-001 5.805531740188599e-001 1.517073512077332e-001 9.344519972801209e-001 3.396262824535370e-001 2.450248003005981e-001 9.134629368782044e-001 7.127542048692703e-002 -1.287281513214111e-001 3.953699469566345e-001 -4.097535610198975e-001 -5.983641743659973e-001 4.500437378883362e-001 -8.147508651018143e-002 -7.916551083326340e-002 -1.505649089813232e-001 -1.703914403915405e-001 1.294612526893616e+000 -4.859757721424103e-001 -1.034098416566849e-001 -6.859915256500244e-001 4.521823674440384e-002 3.100419938564301e-001 -9.373775720596314e-001 5.841451883316040e-001 7.020491957664490e-001 -1.681403964757919e-001 6.397892832756043e-001 1.168430075049400e-001 4.124156236648560e-001 5.404921174049377e-001 -3.311195969581604e-001 -3.494578003883362e-001 1.379718184471130e+000 2.731607258319855e-001 5.512273311614990e-001 2.997024357318878e-001 3.475511670112610e-001 6.777516603469849e-001 1.471205204725266e-001 1.011002138257027e-001 8.974244594573975e-001 8.688372373580933e-002 4.767233729362488e-001 9.785303473472595e-001 -2.200428694486618e-001 -6.173372268676758e-001 -8.801369071006775e-001 -1.111719012260437e+000 -3.223371803760529e-001 -6.491173505783081e-001 -3.894545435905457e-001 -2.843862473964691e-001 7.331426739692688e-001 -3.287445753812790e-002 -5.741032306104899e-003 6.212961673736572e-001 3.749484941363335e-002 6.244438700377941e-003 -6.228777766227722e-001 -4.667133837938309e-002 2.016694307327271e+000 2.834755480289459e-001 6.229624748229981e-001 6.552317738533020e-001 -9.771268069744110e-002 7.506207823753357e-001 6.942567825317383e-001 -1.662521809339523e-001 3.003259599208832e-001 -2.531996071338654e-001 2.399661689996719e-001 5.109554529190064e-001 -7.031706571578980e-001 2.836774885654450e-001 4.888223409652710e-001 1.384589523077011e-001 -3.524579405784607e-001 -2.050135582685471e-001 1.160808563232422e+000 -4.008938968181610e-001 1.656456440687180e-001 -5.116114616394043e-001 8.800522685050964e-001 6.836380064487457e-002 -5.902936309576035e-002 5.672354102134705e-001 -7.219299674034119e-001 3.463289514183998e-002 -1.044675827026367e+000 -8.341925591230393e-002 -3.036961853504181e-001 -5.605638027191162e-001 5.722484588623047e-001 -1.604338049888611e+000 -5.696258544921875e-001 -2.531512081623077e-001 -4.675458073616028e-001 -6.486019492149353e-001 -2.437075823545456e-001 -2.898264527320862e-001 3.836293518543243e-001 4.061043560504913e-001 3.909072279930115e-001 -8.113911151885986e-001 1.260317683219910e+000 -3.924282491207123e-001 3.586370870471001e-002 7.703443765640259e-001 6.714462637901306e-001 -4.909946396946907e-002 3.536651730537415e-001 1.900762617588043e-001 3.638494014739990e-001 2.248179465532303e-001 -6.255846619606018e-001 + +#outputSynapse FullSynapse +120 -4.825605154037476e-001 -1.119017243385315e+000 5.116804838180542e-001 -6.694142222404480e-001 -5.718530416488648e-001 -7.233589291572571e-001 -8.200560212135315e-001 -6.121573448181152e-001 -1.034205436706543e+000 1.015549778938294e+000 1.183975338935852e+000 5.342597365379334e-001 1.186208128929138e+000 7.657266259193420e-001 9.990772604942322e-001 -1.051267385482788e+000 -7.288008332252502e-001 9.447612762451172e-001 6.943449974060059e-001 5.248318314552307e-001 -1.042970657348633e+000 -4.857340827584267e-004 -8.969252705574036e-001 5.206210613250732e-001 7.825390100479126e-001 -3.175100982189179e-001 -7.697273492813110e-001 3.042222857475281e-001 7.400255203247070e-001 1.082547545433044e+000 -1.058874249458313e+000 3.296852707862854e-001 9.955985546112061e-001 7.361931800842285e-001 8.618848919868469e-001 7.109408378601074e-001 1.148022636771202e-001 -6.803723573684692e-001 -4.462003335356712e-002 7.384030222892761e-001 -2.215545326471329e-001 -8.702403903007507e-001 8.234908580780029e-001 6.819239258766174e-001 -4.687527120113373e-001 -6.959788203239441e-001 -6.105158329010010e-001 -7.225347757339478e-001 -7.860832810401917e-001 5.608791112899780e-001 9.937217235565186e-001 6.797130703926086e-001 8.231667280197144e-001 1.115462303161621e+000 5.290299654006958e-001 -4.602016210556030e-001 -5.394889116287231e-001 1.053055644035339e+000 9.533493518829346e-001 8.694807887077332e-001 -4.802323281764984e-001 -1.070514082908630e+000 -8.236010670661926e-001 7.932062149047852e-001 1.111655592918396e+000 -1.025945305824280e+000 -2.268178462982178e-001 6.432797908782959e-001 2.442117929458618e-001 7.986634969711304e-001 -3.561095297336578e-001 1.058865070343018e+000 6.459046602249146e-001 4.042869210243225e-001 2.976681292057037e-002 1.033244490623474e+000 9.110773205757141e-001 -6.528528332710266e-001 -8.971995115280151e-001 1.046785235404968e+000 -5.487565994262695e-001 -1.033755183219910e+000 5.164890289306641e-001 1.108534336090088e+000 -2.507440149784088e-001 -1.150385260581970e+000 -1.040475010871887e+000 -1.114320755004883e+000 -9.695596694946289e-001 9.147439599037170e-001 3.035557866096497e-001 1.044997453689575e+000 1.059857130050659e+000 7.304399013519287e-001 1.102171182632446e+000 -9.304327964782715e-001 -5.997116565704346e-001 1.120478868484497e+000 6.444569826126099e-001 2.137384265661240e-001 -4.117920994758606e-001 -1.000458717346191e+000 -2.041520774364471e-001 -1.859422773122788e-001 3.711319267749786e-001 -9.141649603843689e-001 -7.499164938926697e-001 9.900025129318237e-001 -2.189985066652298e-001 8.942219614982605e-001 -3.195305764675140e-001 6.445295810699463e-001 -2.110123336315155e-001 9.763143658638001e-001 8.833498954772949e-001 1.071311354637146e+000 1.134591102600098e+000 -4.175429344177246e-001 -6.000540852546692e-001 7.281569838523865e-001 + +#activeOutputProbe DataWriter +3 +8.999999761581421e-001 5.000000074505806e-002 +8.999999761581421e-001 5.000000074505806e-002 +8.999999761581421e-001 5.000000074505806e-002 + diff --git a/fix/Breadboard/Breadboard10.nsw b/fix/Breadboard/Breadboard10.nsw new file mode 100644 index 000000000..705a96bec --- /dev/null +++ b/fix/Breadboard/Breadboard10.nsw @@ -0,0 +1,45 @@ +// Weights saved from breadboard C:\My Documents\Breadboard10.nsb. +// Saved after epoch 1, exemplar 0. + +#NSWeightFileVersion 225 + +#inputFile File +7 +1.077844262123108e+000 -1.778443008661270e-001 +2.269289046525955e-001 -1.588500849902630e-002 +1.906577646732330e-001 6.807435750961304e-001 +3.703703582286835e-001 -4.592590779066086e-002 +2.611723542213440e-001 3.901915252208710e-001 +1.911842674016953e-001 4.027296602725983e-001 +1.951007992029190e-001 -4.725341200828552e-001 +0 + +#inputAxon Axon +7 1 +1 +0 + +#hidden1Axon TanhAxon +7 1 +1 +7 1.307985544204712e+000 -1.960705667734146e-001 -1.105142459273338e-001 -1.207442641258240e+000 -1.665081620216370e+000 1.251117825508118e+000 -7.307677268981934e-001 + +#hidden2Axon TanhAxon +4 1 +1 +4 2.186001092195511e-002 3.369570672512054e-001 1.165086925029755e-001 2.747000660747290e-003 + +#outputAxon SoftMaxAxon +3 1 +1 +3 0.000000000000000e+000 0.000000000000000e+000 0.000000000000000e+000 + +#hidden1Synapse FullSynapse +49 -3.375437259674072e-001 -3.020816326141357e+000 -1.435481071472168e+000 1.473870635032654e+000 -7.776365280151367e-001 6.734371185302734e-001 -1.643768787384033e+000 -1.227448821067810e+000 -7.365036606788635e-001 -4.473563134670258e-001 -5.696173906326294e-001 -2.562220990657806e-001 8.557485342025757e-001 -8.057124614715576e-001 4.266147911548615e-001 2.171551227569580e+000 3.776189982891083e-001 5.574828386306763e-001 3.814708292484283e-001 2.591066062450409e-001 1.959651827812195e+000 1.003962755203247e-001 -1.228965446352959e-002 -3.882043361663818e-001 -2.722288109362125e-002 -3.378733694553375e-001 -7.981095314025879e-001 4.839731752872467e-001 1.432798147201538e+000 1.885666996240616e-001 -6.051751971244812e-001 2.924412488937378e+000 1.136252880096436e+000 2.994727194309235e-001 1.604383468627930e+000 -8.440219759941101e-001 6.088087558746338e-001 -3.722844421863556e-001 5.441566109657288e-001 3.944540619850159e-001 7.044004201889038e-001 3.459328413009644e-001 1.054268121719360e+000 -3.348083496093750e+000 -7.199336886405945e-001 -1.489133596420288e+000 -4.090557992458344e-001 8.203456401824951e-001 -1.118073821067810e+000 + +#hidden2Synapse FullSynapse +28 -6.871775984764099e-001 -1.148896694183350e+000 -2.102893590927124e-001 -5.890849828720093e-001 5.899340510368347e-001 7.098034024238586e-001 -1.422515869140625e+000 -1.206974506378174e+000 4.104525446891785e-001 3.567897081375122e-001 2.746991515159607e-001 1.193219542503357e+000 3.167707324028015e-001 -1.222744822502136e+000 -9.918631613254547e-002 4.355156719684601e-001 2.938420772552490e-001 -1.012830615043640e+000 -1.290418803691864e-001 7.479285597801209e-001 -2.292920649051666e-001 -1.372484922409058e+000 -6.534293759614229e-003 1.525195717811585e+000 2.076585590839386e-001 1.434590101242065e+000 7.887706905603409e-002 -1.401232123374939e+000 + +#outputSynapse FullSynapse +12 6.101396083831787e-001 3.122945129871368e-001 3.869898915290833e-001 4.438063502311707e-001 5.161536335945129e-001 -2.700618803501129e-001 -3.105166740715504e-002 -5.569267272949219e-001 -5.549081563949585e-001 -3.867979049682617e-001 1.623111665248871e-001 -6.052750945091248e-001 + diff --git a/fix/Breadboard/Breadboard2.nsw b/fix/Breadboard/Breadboard2.nsw new file mode 100644 index 000000000..7e6eac5d8 --- /dev/null +++ b/fix/Breadboard/Breadboard2.nsw @@ -0,0 +1,43 @@ +// Weights saved from breadboard C:\MY DOCUMENTS\BREADBOARD2.NSB. +// Saved after epoch 1, exemplar 0. + +#NSWeightFileVersion 225 + +#inputFile File +7 +1.077844262123108e+000 -1.778443008661270e-001 +2.188449800014496e-001 1.674167998135090e-002 +1.868382692337036e-001 6.490761637687683e-001 +3.361344337463379e-001 4.151264205574989e-002 +2.621995508670807e-001 2.531536519527435e-001 +1.944894641637802e-001 3.221717774868012e-001 +3.179650008678436e-001 -2.033386379480362e-001 +0 + +#inputAxon Axon +7 1 +1 +0 + +#hidden1Axon TanhAxon +40 1 +1 +40 -9.235364943742752e-002 -5.511198639869690e-001 1.012191653251648e+000 -1.148184835910797e-001 -8.399781584739685e-001 -4.726789295673370e-001 7.570160627365112e-001 -3.985013365745544e-001 1.164000511169434e+000 2.212587594985962e-001 9.570528268814087e-001 -1.504407286643982e+000 -1.262813359498978e-001 9.741528630256653e-001 2.278975844383240e-001 -3.282702267169952e-001 1.716251969337463e-001 4.979004263877869e-001 6.414948105812073e-001 -2.775986790657044e-001 -6.721665859222412e-001 7.226511836051941e-001 -1.020949006080627e+000 -9.638186097145081e-001 4.050622135400772e-002 -8.287806510925293e-001 -2.900803685188294e-001 1.004199028015137e+000 -1.221053838729858e+000 -5.891714692115784e-001 -6.459002494812012e-001 8.228222727775574e-001 1.921370178461075e-001 1.575044542551041e-001 -9.904603362083435e-001 1.186665743589401e-001 1.871918141841888e-001 -6.121324300765991e-001 1.056765243411064e-001 -5.654883384704590e-001 + +#outputAxon SoftMaxAxon +3 1 +1 +3 0.000000000000000e+000 0.000000000000000e+000 0.000000000000000e+000 + +#hidden1Synapse FullSynapse +280 -5.215738341212273e-002 6.958795785903931e-001 -3.700282871723175e-001 4.440588057041168e-001 -9.248711913824081e-002 9.709199517965317e-002 1.255098581314087e-001 -1.359838247299194e-001 3.981630802154541e-001 -4.047442674636841e-001 -5.247595906257629e-001 -5.138890147209168e-001 2.293408364057541e-001 5.139534473419190e-001 2.035804986953735e-001 3.003124892711639e-001 -2.340262830257416e-001 3.037432730197907e-001 4.666079878807068e-001 3.753643631935120e-001 -5.292671918869019e-002 3.674933612346649e-001 3.854512274265289e-001 1.749511361122131e-001 1.320011764764786e-001 2.418431788682938e-001 1.245125234127045e-001 -2.677426636219025e-001 3.884479776024818e-002 -1.385747641324997e-001 -3.117613494396210e-001 3.016934990882874e-001 -2.856997251510620e-001 -4.838032424449921e-001 4.488031566143036e-001 -3.862534165382385e-001 2.520084977149963e-001 -6.066129356622696e-002 -2.037643343210220e-001 -9.749407321214676e-002 1.909288167953491e-001 -2.689029574394226e-001 8.022837042808533e-001 4.543448388576508e-001 1.268999278545380e-001 2.794430553913117e-001 4.331161379814148e-001 -1.717756092548370e-001 -5.167780518531799e-001 6.074145808815956e-002 2.141399085521698e-001 -3.536535203456879e-001 -2.548796236515045e-001 -4.349331259727478e-001 3.771509276703000e-003 1.351494044065476e-001 8.080910146236420e-002 -2.638687789440155e-001 1.792310923337936e-001 -5.317723155021668e-001 6.300682574510574e-002 1.391339004039764e-001 -6.581404209136963e-001 1.574699729681015e-001 -5.979638695716858e-001 -6.864693760871887e-001 -6.892689466476440e-001 -1.189238503575325e-001 -1.904999166727066e-001 -4.838389158248901e-001 4.585682973265648e-002 3.201213181018829e-001 5.204908251762390e-001 -3.531241044402123e-002 4.392628967761993e-001 4.307939708232880e-001 -4.227218031883240e-002 1.247199028730393e-001 1.489800363779068e-001 -3.146159052848816e-001 2.637389600276947e-001 -8.966535329818726e-002 2.010040730237961e-001 3.161593675613403e-001 -8.221558481454849e-002 -4.601925909519196e-001 -3.832246661186218e-001 2.877672016620636e-001 -1.351716276258230e-002 -5.320604424923658e-003 -3.493662178516388e-002 -1.777663826942444e-001 -1.865815520286560e-001 6.387206912040710e-001 -4.405377805233002e-001 4.452396631240845e-001 -1.245370283722878e-001 -2.323225736618042e-001 1.697962284088135e-001 1.118463352322578e-001 -2.475701570510864e-001 -3.791887685656548e-002 5.509998202323914e-001 1.247667223215103e-001 3.189268708229065e-001 -3.584641516208649e-001 8.915060758590698e-001 9.720049053430557e-002 -1.117252558469772e-001 3.543806076049805e-001 -2.351483702659607e-001 5.283502340316773e-001 1.746209561824799e-001 1.741478294134140e-001 2.738423347473145e-001 3.764865398406982e-001 3.486587703227997e-001 -3.462808132171631e-001 9.324266910552979e-001 2.155355364084244e-001 -5.171442404389381e-002 6.311618685722351e-001 -1.088170856237412e-001 4.840107262134552e-001 -2.310744374990463e-001 -3.167505562305450e-001 -2.271509468555450e-001 -2.800688743591309e-001 4.713648185133934e-002 -1.575807780027390e-001 3.583298251032829e-002 -3.308865129947662e-001 -2.662795484066010e-001 1.894978582859039e-001 7.474141567945480e-002 -1.493624746799469e-001 -1.482628136873245e-001 -1.058527529239655e-001 -3.737696707248688e-001 -1.093639135360718e-001 -4.270362555980682e-001 1.249950975179672e-001 -1.971846818923950e-001 3.135327398777008e-001 4.604682624340057e-001 -4.614944458007813e-001 4.820220768451691e-001 3.806282877922058e-001 3.629744052886963e-001 3.986520171165466e-001 -2.283873707056046e-001 1.246029064059258e-001 3.940442204475403e-001 2.390366494655609e-001 8.402416110038757e-002 3.498363792896271e-001 -3.888027667999268e-001 2.272991091012955e-001 -3.421411216259003e-001 1.273499727249146e-001 1.342627108097076e-001 1.159043312072754e-001 1.274240911006928e-001 -2.915177941322327e-001 6.415430903434753e-001 1.699399948120117e-001 -6.556300520896912e-001 9.605846554040909e-002 3.632318377494812e-001 -3.854629993438721e-001 -3.860571384429932e-001 -1.257066577672958e-001 -1.186188161373138e-001 -1.368320286273956e-001 -2.300722897052765e-001 -4.762146174907684e-001 -3.621844053268433e-001 -4.978014528751373e-002 -1.940275430679321e-001 -1.588442362844944e-002 -1.519876420497894e-001 1.312368810176849e-001 1.862339228391647e-001 6.462548375129700e-001 5.544137358665466e-001 -3.416634351015091e-002 9.995899349451065e-002 -6.969342380762100e-002 -1.428494304418564e-001 2.647481858730316e-001 1.083492934703827e-001 5.986538901925087e-002 -1.576850377023220e-002 1.962803453207016e-001 6.334787011146545e-001 -1.408149152994156e-001 -1.756295561790466e-001 -2.156554609537125e-001 -1.412229537963867e-001 -5.801249146461487e-001 -5.700040608644486e-002 -3.019523918628693e-001 -1.161280944943428e-001 -3.032382726669312e-001 1.140000447630882e-001 -2.648598253726959e-001 -2.016042023897171e-001 -3.181084990501404e-002 7.931513339281082e-002 5.399967432022095e-001 -4.595367014408112e-001 9.602636098861694e-002 -4.730868339538574e-001 2.077568918466568e-001 -2.257115393877029e-001 3.216529190540314e-001 1.631081402301788e-001 6.222640164196491e-003 -1.323710232973099e-001 1.348871737718582e-001 1.123578473925591e-001 5.462109446525574e-001 5.289056897163391e-001 5.155519247055054e-001 2.748569846153259e-001 -3.125837743282318e-001 -3.262098431587219e-001 -8.945185691118240e-003 -4.980920553207398e-001 5.064374208450317e-001 -1.056439951062203e-001 -3.115973472595215e-001 3.343601152300835e-002 -7.157339155673981e-002 5.459919571876526e-001 2.175374031066895e-001 -2.892075665295124e-002 1.139620468020439e-001 -4.409461319446564e-001 -4.908669367432594e-002 -2.098206430673599e-001 3.024870157241821e-001 -3.447104394435883e-001 -2.666398882865906e-001 -1.739841997623444e-001 -1.120999976992607e-001 4.268572330474854e-001 4.144327044487000e-001 4.936498403549194e-001 5.718982815742493e-001 5.464938655495644e-002 3.950506746768951e-001 -1.432464718818665e-001 -8.016809076070786e-002 5.947722792625427e-001 -1.419431418180466e-001 -2.328271418809891e-001 -1.958254128694534e-001 -9.914696216583252e-003 -1.478249877691269e-001 4.182004928588867e-001 7.797469943761826e-002 3.761124014854431e-001 4.066407680511475e-001 1.217691525816917e-001 -1.124059110879898e-001 7.020493596792221e-002 1.022125557065010e-001 -5.025411844253540e-001 -2.482684552669525e-001 -5.819427594542503e-002 -1.587846502661705e-002 -1.881837695837021e-001 4.026338756084442e-001 3.339109122753143e-001 2.215891182422638e-001 7.083265781402588e-001 -7.670203596353531e-002 3.171359598636627e-001 8.310161828994751e-001 + +#outputSynapse FullSynapse +120 2.309078276157379e-001 8.006124198436737e-002 5.207773447036743e-001 3.642434999346733e-002 -5.444544181227684e-002 -2.300137132406235e-001 4.965198636054993e-001 -3.590968847274780e-001 1.392439752817154e-001 -2.941058278083801e-001 6.655657291412354e-001 -4.931978881359100e-001 -1.253394484519959e-001 1.540697813034058e-001 1.752252578735352e-001 4.873855113983154e-001 5.741749405860901e-001 1.275441497564316e-001 -4.765471443533897e-002 -5.038099363446236e-002 -8.334141224622726e-002 5.842098593711853e-001 -4.490646719932556e-001 -5.416034907102585e-002 -2.264686524868012e-001 -1.698177903890610e-001 3.113179206848145e-001 4.435532391071320e-001 -5.240975022315979e-001 1.108570247888565e-001 2.321150526404381e-002 2.374080866575241e-001 -2.570592761039734e-001 3.205819129943848e-001 -3.468126952648163e-001 2.772298157215118e-001 1.148034259676933e-001 1.865169033408165e-003 3.649827241897583e-001 5.026416182518005e-001 -2.502067089080811e-001 -6.028710007667542e-001 -6.978485733270645e-002 8.656968921422958e-002 -5.227651596069336e-001 9.525942802429199e-002 -1.903700232505798e-001 1.426358073949814e-001 5.602359771728516e-001 -2.479453980922699e-001 1.296138316392899e-001 -4.612154662609100e-001 -4.198251068592072e-001 6.053315401077271e-001 -1.160371229052544e-001 -4.044520258903503e-001 -1.530461944639683e-002 4.267008602619171e-001 2.162231802940369e-001 1.101492717862129e-001 -9.195729345083237e-002 -3.771322593092918e-002 3.320552408695221e-002 -4.979051947593689e-001 1.581449210643768e-001 -5.021102428436279e-001 1.184114068746567e-002 4.836803376674652e-001 -5.539562702178955e-001 -2.782657444477081e-001 -1.547775119543076e-001 4.582551419734955e-001 2.844007611274719e-001 -4.516306817531586e-001 1.886052638292313e-002 3.602048456668854e-001 4.175081476569176e-002 2.075715661048889e-001 -5.455711483955383e-001 -2.442489415407181e-001 -2.680016458034515e-001 2.636941149830818e-003 4.164874255657196e-001 8.120876550674439e-002 -4.927250146865845e-001 -3.254565298557282e-001 5.583248138427734e-001 -1.608870923519135e-001 5.749610066413879e-001 5.479150414466858e-001 3.469662666320801e-001 -5.061987638473511e-001 3.353976905345917e-001 2.548734247684479e-001 2.064624279737473e-001 -5.114225745201111e-001 -4.629626572132111e-001 -1.936426460742950e-001 2.327886223793030e-001 -4.583241790533066e-002 -5.125665068626404e-001 1.089363321661949e-001 -4.951449036598206e-001 -5.018569827079773e-001 2.582837454974651e-002 4.913705959916115e-002 -2.441505938768387e-001 -3.174663335084915e-002 -1.644173413515091e-001 -2.947083115577698e-001 -5.097694396972656e-001 7.136650383472443e-003 1.942666023969650e-001 1.587397605180740e-001 -4.691866040229797e-001 -4.862202703952789e-001 1.432444006204605e-001 -4.405085742473602e-001 3.072859644889832e-001 -4.172921180725098e-001 + +#activeOutputProbe DataWriter +3 +8.999999761581421e-001 5.000000074505806e-002 +8.999999761581421e-001 5.000000074505806e-002 +8.999999761581421e-001 5.000000074505806e-002 + diff --git a/fix/Breadboard/Breadboard3.nsw b/fix/Breadboard/Breadboard3.nsw new file mode 100644 index 000000000..3c3ec9efe --- /dev/null +++ b/fix/Breadboard/Breadboard3.nsw @@ -0,0 +1,43 @@ +// Weights saved from breadboard C:\My Documents\Breadboard3.nsb. +// Saved after epoch 1, exemplar 0. + +#NSWeightFileVersion 225 + +#inputFile File +7 +1.077844262123108e+000 -1.778443008661270e-001 +2.442665100097656e-001 3.212104737758637e-002 +2.107975035905838e-001 6.168988943099976e-001 +3.646677434444428e-001 1.214343756437302e-001 +2.485501170158386e-001 2.868268489837647e-001 +1.976718604564667e-001 4.469360709190369e-001 +3.208556175231934e-001 -2.509090602397919e-001 +0 + +#inputAxon Axon +7 1 +1 +0 + +#hidden1Axon TanhAxon +40 1 +1 +40 4.393131732940674e-001 -1.290386915206909e-001 6.327351331710815e-001 5.494017004966736e-001 4.969031810760498e-001 2.086368650197983e-001 -2.167895883321762e-001 9.464725255966187e-001 1.640024334192276e-001 2.452306896448135e-001 1.972979009151459e-001 9.276027083396912e-001 2.502645850181580e-001 5.485208034515381e-001 -2.839279770851135e-001 6.810981035232544e-001 -2.170253098011017e-001 -3.821973502635956e-001 8.861125111579895e-001 -6.720829606056213e-001 2.960434183478355e-002 -3.987881243228912e-001 -1.057050973176956e-001 6.963993310928345e-001 -1.413413435220718e-001 7.551014423370361e-001 1.243001222610474e-002 -3.603826761245728e-001 7.450697422027588e-001 7.630060315132141e-001 5.904716849327087e-001 -5.035977959632874e-001 2.082890830934048e-003 -1.259811818599701e-001 -8.103467822074890e-001 -4.683765172958374e-001 -3.666405081748962e-001 -5.880022794008255e-002 -5.269588828086853e-001 -1.594118028879166e-001 + +#outputAxon SoftMaxAxon +3 1 +1 +3 0.000000000000000e+000 0.000000000000000e+000 0.000000000000000e+000 + +#hidden1Synapse FullSynapse +280 2.258135080337524e-001 -8.417334407567978e-002 -6.296884268522263e-002 -1.971755474805832e-001 -2.008096426725388e-001 1.312222182750702e-001 -2.187249064445496e-001 3.300825655460358e-001 -1.458171010017395e-001 -2.447441816329956e-001 2.373344898223877e-001 -3.369296491146088e-001 -2.142974138259888e-001 7.442125119268894e-003 2.400149852037430e-001 5.063241720199585e-001 1.461273133754730e-001 3.199279010295868e-001 2.184794545173645e-001 6.378577351570129e-001 2.826454937458038e-001 1.467282772064209e-001 4.167218208312988e-001 3.410821408033371e-002 -1.507616639137268e-001 1.607457697391510e-001 1.063031926751137e-001 4.860900044441223e-001 -7.546984404325485e-002 3.811344206333160e-001 -3.500247746706009e-002 -3.294828236103058e-001 -2.355449087917805e-002 3.319101631641388e-001 1.341840159147978e-002 -2.975183129310608e-001 -2.044427692890167e-001 7.903610914945602e-002 -2.241216152906418e-001 -1.982768028974533e-001 2.166045308113098e-001 -3.769811093807221e-001 -4.219292849302292e-002 -4.683617055416107e-001 1.365721821784973e-001 -5.708352923393250e-001 -5.482509136199951e-001 -5.697317123413086e-001 3.948671817779541e-001 4.008982181549072e-001 -6.056785583496094e-001 -6.540334783494473e-003 -4.144128859043121e-001 -9.239719808101654e-002 1.977843493223190e-001 -2.407579571008682e-001 -2.472878843545914e-001 -3.429937064647675e-001 -1.058190166950226e-001 -8.456809073686600e-002 4.944565296173096e-001 4.329789280891419e-001 2.303941249847412e-001 2.076211571693420e-001 1.421037223190069e-002 5.740813165903091e-002 1.577541381120682e-001 1.072699949145317e-001 3.550452180206776e-003 -7.603026926517487e-002 1.787180006504059e-001 3.000865578651428e-001 -4.790667295455933e-001 -1.263711899518967e-001 -1.886992603540421e-001 -1.971553862094879e-001 -4.320513010025024e-001 -1.786982715129852e-001 -3.415124714374542e-001 3.517304956912994e-001 3.841716647148132e-001 1.595797836780548e-001 1.466515809297562e-001 3.235963284969330e-001 3.831133618950844e-002 3.778985887765884e-002 4.742037355899811e-001 -1.204959601163864e-001 -6.766954064369202e-002 4.763844013214111e-001 2.847502529621124e-001 -2.614455521106720e-001 4.211461246013641e-001 2.459102123975754e-001 -3.291262984275818e-001 4.159525930881500e-001 1.433917880058289e-001 5.506788492202759e-001 -4.396528601646423e-001 3.432570993900299e-001 -4.605481028556824e-001 -1.657515168190002e-001 2.847986221313477e-001 -3.968485295772553e-001 2.652311325073242e-001 2.413431182503700e-003 6.885899305343628e-001 -1.771224141120911e-001 -2.605379931628704e-002 1.681880354881287e-001 4.201361536979675e-001 -2.905318737030029e-001 -1.065197512507439e-001 2.377779632806778e-001 3.171224892139435e-001 -5.171843245625496e-002 8.248845487833023e-002 -4.904226213693619e-002 3.065647780895233e-001 1.610077768564224e-001 8.712385892868042e-001 3.008154034614563e-001 5.729283690452576e-001 -1.608658432960510e-001 -3.810124993324280e-001 6.462811827659607e-001 -2.662218213081360e-001 -5.297539830207825e-001 -1.356185525655747e-001 2.623566091060638e-001 -1.624718308448792e-001 -2.004417479038239e-001 -3.377428650856018e-002 3.970716595649719e-001 -1.560127288103104e-001 4.747187346220017e-002 -3.162815868854523e-001 -3.350041508674622e-001 -3.987393081188202e-001 -4.969080090522766e-001 -1.142657846212387e-001 -7.119160890579224e-001 1.153976768255234e-001 -6.001577973365784e-001 -3.606468439102173e-001 -3.741255104541779e-001 -7.550917863845825e-001 1.106901541352272e-001 -1.475569456815720e-001 -2.016223073005676e-001 -2.226002812385559e-001 2.520006597042084e-001 -4.015582501888275e-001 -6.874573230743408e-001 -3.860632777214050e-001 1.074488908052445e-001 -3.594025373458862e-001 -2.556712925434113e-001 2.491754293441773e-001 -1.749203801155090e-001 -5.133146420121193e-003 -2.629097700119019e-001 1.706630140542984e-001 5.300921797752380e-001 3.016012907028198e-001 3.024738729000092e-001 1.334729231894016e-002 3.605858981609345e-001 -3.797290921211243e-001 2.125910073518753e-001 -3.324515819549561e-001 -2.657738924026489e-001 8.549436926841736e-002 2.843597829341888e-001 -1.628004312515259e-001 4.068509638309479e-001 -1.096388697624207e-001 1.842555999755859e-001 -2.429902255535126e-001 1.793259531259537e-001 6.289024949073792e-001 4.427114427089691e-001 -8.943214267492294e-002 1.407862901687622e-001 -4.747562706470490e-001 1.607088744640350e-001 2.691341638565064e-001 -1.326033025979996e-001 -6.888723373413086e-002 3.347525000572205e-001 2.391179502010346e-001 -7.601787149906158e-002 3.946174979209900e-001 4.608300328254700e-001 -4.973608553409576e-001 2.180006355047226e-002 -2.155515551567078e-001 4.018128812313080e-001 5.872810482978821e-001 -2.970355451107025e-001 6.164746284484863e-001 -2.832284271717072e-001 -7.214747369289398e-002 3.505393862724304e-001 3.504253327846527e-001 -3.037774860858917e-001 -3.341494500637054e-001 -2.143821418285370e-001 3.230984508991242e-001 -6.691335439682007e-001 -1.196009963750839e-001 2.609530091285706e-001 6.332063078880310e-001 -2.495922595262528e-001 -1.421163380146027e-001 4.370761811733246e-001 2.344440817832947e-001 -4.770855009555817e-001 -1.213536486029625e-001 -4.947537779808044e-001 2.018401175737381e-001 -3.219321966171265e-001 -1.836685538291931e-001 6.838442683219910e-001 -5.349717736244202e-001 5.601373910903931e-001 -3.152181506156921e-001 2.578000128269196e-001 4.295753240585327e-001 -1.423847377300263e-001 6.693964004516602e-001 -2.671292051672936e-002 -2.906464338302612e-001 -6.406581997871399e-001 -5.139582753181458e-001 2.622411847114563e-001 2.534431815147400e-001 -1.518065035343170e-001 -4.292866215109825e-002 4.628975689411163e-001 1.969320774078369e-001 4.264309704303742e-001 -4.475159347057343e-001 -5.727919340133667e-001 5.388451814651489e-001 -2.982297539710999e-001 -3.593768924474716e-002 -1.298359930515289e-001 -4.535509645938873e-001 -1.963836848735809e-001 -2.640297412872315e-001 3.889253437519074e-001 -2.371201291680336e-002 5.441716909408569e-001 -3.557947278022766e-001 -1.912423074245453e-001 3.168485462665558e-001 -3.096546828746796e-001 2.481035888195038e-001 2.293358147144318e-001 -7.027690410614014e-001 -4.839945435523987e-001 -2.963027358055115e-001 -5.126427412033081e-001 2.138081789016724e-001 -2.071801871061325e-001 -9.827529639005661e-002 -4.680003225803375e-001 -3.230824470520020e-001 -2.535474896430969e-001 2.779140770435333e-001 -5.119556188583374e-001 1.893053054809570e-001 -5.211792513728142e-002 4.212611019611359e-001 -5.767111182212830e-001 3.436119556427002e-001 1.560586243867874e-001 -1.338404417037964e-001 2.465801686048508e-001 + +#outputSynapse FullSynapse +120 -1.504478603601456e-001 8.304652571678162e-002 2.053809165954590e-001 4.613898992538452e-001 3.307471871376038e-001 -2.503668665885925e-001 -4.260648787021637e-001 -2.033478170633316e-001 1.205723360180855e-001 3.727485835552216e-001 -2.320208251476288e-001 4.672348499298096e-001 -1.567042618989945e-001 4.181037843227387e-001 -2.018750756978989e-001 2.649243474006653e-001 2.292609065771103e-001 2.745892405509949e-001 2.554303109645844e-001 -3.891312777996063e-001 -4.561745524406433e-001 -3.781261444091797e-001 -2.881123721599579e-001 2.764029800891876e-001 8.924255520105362e-002 4.471623599529266e-001 9.589984267950058e-002 4.323486387729645e-001 4.792469739913940e-001 -9.918873012065888e-002 4.427296221256256e-001 3.841804563999176e-001 1.890532523393631e-001 -4.477364718914032e-001 -2.994475699961186e-002 -7.976207137107849e-002 2.607934474945068e-001 -3.710708916187286e-001 -2.811897993087769e-001 6.034602597355843e-002 4.014556109905243e-001 2.982565164566040e-001 4.447779953479767e-001 -3.612459823489189e-002 -2.895380258560181e-001 2.155442684888840e-001 -3.415147066116333e-001 4.278375506401062e-001 1.896717213094235e-002 -9.841635823249817e-002 1.671093255281448e-001 3.151571452617645e-001 -1.678100675344467e-001 -4.435905069112778e-002 -2.333792001008987e-001 4.360995292663574e-001 3.587894737720490e-001 -1.017290875315666e-001 1.382773071527481e-001 -3.980610668659210e-001 -2.268472909927368e-001 -2.996328286826611e-002 2.546367645263672e-001 1.532198935747147e-001 -1.018586382269859e-002 3.147244155406952e-001 -3.700032234191895e-001 2.747226655483246e-001 4.799823760986328e-001 3.735623657703400e-001 3.757937550544739e-001 -5.869687348604202e-002 7.807171344757080e-002 -1.428240090608597e-001 -5.030028820037842e-001 -4.323083460330963e-001 -2.643692195415497e-001 -4.277939200401306e-001 3.172474205493927e-001 -4.587580561637878e-001 4.488629996776581e-001 -1.273735053837299e-002 2.275637537240982e-001 2.276848852634430e-001 1.995900124311447e-001 -1.224325075745583e-001 -1.321871429681778e-001 4.938367307186127e-001 3.713837862014771e-001 4.943797290325165e-001 -8.973516523838043e-002 3.630679845809937e-001 3.118912279605866e-001 3.763218820095062e-001 -2.658533453941345e-001 5.210888572037220e-003 -3.098636865615845e-001 -4.516429603099823e-001 3.575363755226135e-001 3.780608177185059e-001 3.606519103050232e-001 4.404914379119873e-001 -4.452764391899109e-001 2.741447389125824e-001 1.122588440775871e-001 2.581178247928619e-001 -2.986721992492676e-001 -3.506239950656891e-001 -4.466909915208817e-002 1.343552619218826e-001 -2.677312493324280e-002 -5.070485472679138e-001 -5.414816737174988e-001 3.392856195569038e-002 -4.090670943260193e-001 2.741051837801933e-002 7.242175936698914e-002 4.587205946445465e-001 -2.530987001955509e-002 1.304957270622253e-002 + +#activeOutputProbe DataWriter +3 +8.999999761581421e-001 5.000000074505806e-002 +8.999999761581421e-001 5.000000074505806e-002 +8.999999761581421e-001 5.000000074505806e-002 + diff --git a/fix/Breadboard/Breadboard4.nsw b/fix/Breadboard/Breadboard4.nsw new file mode 100644 index 000000000..ef1a48db0 --- /dev/null +++ b/fix/Breadboard/Breadboard4.nsw @@ -0,0 +1,43 @@ +// Weights saved from breadboard C:\My Documents\Breadboard4.nsb. +// Saved after epoch 1, exemplar 0. + +#NSWeightFileVersion 225 + +#inputFile File +7 +1.077844262123108e+000 -1.778443008661270e-001 +2.296211272478104e-001 6.142363324761391e-002 +2.128665894269943e-001 6.552034020423889e-001 +3.361344337463379e-001 4.151264205574989e-002 +2.430133521556854e-001 3.004860281944275e-001 +1.976718604564667e-001 4.469360709190369e-001 +1.951007992029190e-001 -4.725341200828552e-001 +0 + +#inputAxon Axon +7 1 +1 +0 + +#hidden1Axon TanhAxon +40 1 +1 +40 -1.700838446617127e+000 1.409139156341553e+000 -1.263895153999329e+000 -1.653346180915833e+000 -1.753814935684204e+000 1.510319232940674e+000 -1.652730584144592e+000 1.968622922897339e+000 -1.764715671539307e+000 -1.920537590980530e+000 1.703584432601929e+000 9.688673615455627e-001 1.621924757957459e+000 -1.195185184478760e+000 -1.170735836029053e+000 -1.726262569427490e+000 1.693020582199097e+000 -1.789734363555908e+000 2.076834440231323e+000 -2.054785251617432e+000 1.735462069511414e+000 -1.377997517585754e+000 1.685962557792664e+000 -1.505226492881775e+000 1.329061865806580e+000 -1.970339655876160e+000 1.326048374176025e+000 -1.803932785987854e+000 -1.356570959091187e+000 -7.451403737068176e-001 1.977797389030457e+000 1.962222456932068e+000 -1.924186825752258e+000 -1.927103757858276e+000 1.772511124610901e+000 2.267752170562744e+000 1.343345522880554e+000 -1.727791309356690e+000 -1.688525199890137e+000 -2.020093202590942e+000 + +#outputAxon SoftMaxAxon +3 1 +1 +3 0.000000000000000e+000 0.000000000000000e+000 0.000000000000000e+000 + +#hidden1Synapse FullSynapse +280 -3.217298686504364e-001 -1.535140275955200e-001 -9.374593496322632e-001 -3.773699328303337e-002 -7.610699534416199e-001 1.124547328799963e-003 7.987623810768127e-001 5.171887874603272e-001 1.182283610105515e-001 1.252476930618286e+000 -2.393243610858917e-001 8.846385776996613e-002 4.983871877193451e-001 -1.072657704353333e+000 -5.902777314186096e-001 3.053096830844879e-001 -1.245228290557861e+000 -9.408684819936752e-002 -1.261333227157593e+000 7.626018673181534e-002 -3.566111624240875e-001 -2.651087939739227e-001 5.490935966372490e-002 -1.231116533279419e+000 -3.552156984806061e-001 -4.995369017124176e-001 -1.970071047544479e-001 6.921592950820923e-001 -7.216929793357849e-001 -3.322352096438408e-002 -1.040984153747559e+000 -2.749272584915161e-001 -3.936901688575745e-001 -5.485629439353943e-001 2.315377295017242e-001 3.925201594829559e-001 2.289973348379135e-001 9.091649055480957e-001 -2.400987595319748e-001 2.274930775165558e-001 7.657364010810852e-001 -4.531333744525909e-001 -3.045647442340851e-001 -1.612837314605713e-001 -6.530205607414246e-001 6.988145411014557e-002 -3.664937913417816e-001 -1.209497332572937e+000 1.716423481702805e-001 2.888691425323486e-001 -6.977611780166626e-001 1.001697182655335e+000 -3.773393929004669e-001 -3.817198425531387e-002 3.071420192718506e-001 -1.018374800682068e+000 -3.812201619148254e-001 2.521711289882660e-001 -1.311386704444885e+000 -4.305998682975769e-001 -2.096824795007706e-001 -6.536886692047119e-001 9.946095943450928e-002 -8.006195425987244e-001 6.314782798290253e-002 -9.162106513977051e-001 1.249427199363709e-001 -1.967987567186356e-001 -2.837883234024048e-001 4.405716657638550e-001 7.357195615768433e-001 2.873047888278961e-001 7.006355524063110e-001 -2.267676740884781e-001 1.684177815914154e-001 2.451081871986389e-001 -6.897705197334290e-001 -1.359052062034607e-001 -1.217865824699402e+000 6.268809437751770e-001 -1.108817100524902e+000 -1.098538115620613e-001 6.363938003778458e-002 -2.163156747817993e+000 2.993230819702148e-001 -6.225543469190598e-002 6.338689923286438e-001 2.340336740016937e-001 3.334980309009552e-001 5.768545866012573e-001 -8.454492688179016e-001 -7.557854652404785e-001 -6.227542161941528e-001 -1.105716824531555e+000 2.116404175758362e-001 -2.117430865764618e-001 -1.036560058593750e+000 -1.257222741842270e-001 5.264365077018738e-001 -1.787502527236939e+000 -6.102513074874878e-001 -1.036811590194702e+000 -1.041777491569519e+000 6.762499362230301e-002 -1.829331994056702e+000 -1.342972517013550e-001 2.181535959243774e+000 7.125011086463928e-001 9.849542975425720e-001 4.515964090824127e-001 -5.667360424995422e-001 1.371907234191895e+000 4.193291962146759e-001 -4.483173191547394e-001 1.056447148323059e+000 -4.035096466541290e-001 2.473213225603104e-001 4.283659458160400e-001 -1.105738878250122e+000 -3.882422149181366e-001 1.359030008316040e-001 -1.316889882087708e+000 1.206199750304222e-001 -2.816296517848969e-001 -3.856543898582459e-001 -1.341159194707871e-001 2.931591272354126e-001 -8.115946650505066e-001 1.549627929925919e-001 -3.494594991207123e-002 1.392071247100830e-001 8.500702381134033e-001 -1.105314135551453e+000 -8.855208158493042e-001 -1.129539161920548e-001 -7.288187742233276e-001 2.031663209199905e-001 -2.040854692459106e-001 -2.651244997978210e-001 6.747405529022217e-001 6.289814710617065e-001 3.702930510044098e-001 8.955963253974915e-001 -1.791490912437439e-001 6.291658878326416e-001 3.181912600994110e-001 -7.458741664886475e-001 -5.797970294952393e-001 8.048549294471741e-003 -1.517996788024902e+000 1.586797833442688e-002 -1.968807131052017e-001 -6.696819067001343e-001 2.561997175216675e-001 1.585537791252136e-001 -3.939553797245026e-001 1.001605153083801e+000 -3.178015723824501e-002 2.169712930917740e-001 7.597719430923462e-001 -8.711787462234497e-001 -2.590858340263367e-001 -4.994206726551056e-001 -1.350332260131836e+000 -1.754350513219833e-001 -5.298053622245789e-001 -1.044484019279480e+000 -5.103482306003571e-002 8.845404386520386e-001 4.584137201309204e-001 1.076861619949341e+000 1.874905377626419e-001 2.787777185440064e-001 8.369036912918091e-001 -8.217707276344299e-001 -2.826712131500244e-001 -2.450734227895737e-001 -8.279343843460083e-001 3.510917425155640e-001 -3.488889932632446e-001 -7.627615332603455e-001 3.606846034526825e-001 5.258455872535706e-001 -5.099301040172577e-002 6.352093815803528e-001 -1.835833787918091e-001 1.247637987136841e+000 5.917957425117493e-001 1.019452288746834e-001 -5.673841834068298e-001 1.377126276493073e-001 -1.055184245109558e+000 -2.036373913288117e-001 -6.316062808036804e-001 -3.354403078556061e-001 3.826665878295898e-001 -6.721435189247131e-001 -6.410418748855591e-001 -1.417969822883606e+000 -8.955898880958557e-002 -6.617363095283508e-001 -6.313887238502502e-001 1.284139454364777e-001 -7.438000291585922e-002 3.091568231582642e+000 8.395515084266663e-001 7.227233052253723e-001 8.192335367202759e-001 -2.106423974037170e-001 2.122008800506592e+000 7.060149908065796e-001 3.394779860973358e-001 6.117095947265625e-001 -3.271679580211639e-001 1.616740077733994e-001 1.569840312004089e-001 -1.123665213584900e+000 3.844760954380035e-001 2.845884263515472e-001 7.137780785560608e-001 1.460106819868088e-001 -1.021391227841377e-001 5.172263383865356e-001 -7.423986196517944e-001 -2.789774909615517e-002 -1.258952766656876e-001 -1.325458526611328e+000 -5.270438194274902e-001 -3.967397287487984e-002 -2.709308564662933e-001 1.340401768684387e-001 -6.963784694671631e-001 -3.221498429775238e-001 -8.531031608581543e-001 3.377375304698944e-001 1.652107536792755e-001 -3.512997031211853e-001 -1.630981415510178e-001 3.690161705017090e-001 1.549807284027338e-002 1.193455934524536e+000 2.675475478172302e-001 3.856497108936310e-001 9.223973155021668e-001 -8.005780726671219e-002 7.949089407920837e-001 1.678814589977264e-001 5.589793920516968e-001 -2.890521883964539e-001 -6.459630280733109e-002 1.577395349740982e-001 -6.019581556320190e-001 1.361452788114548e-001 -1.461234450340271e+000 2.132855653762817e-001 -7.116237878799439e-001 -1.837224513292313e-001 6.981704831123352e-001 -1.456485867500305e+000 -8.896524459123612e-002 -6.985316872596741e-001 -9.188821911811829e-001 -1.798982769250870e-001 -3.445543348789215e-001 -9.767906665802002e-001 6.575983762741089e-001 -5.698328614234924e-001 2.794421613216400e-001 -9.889149665832520e-001 2.113757282495499e-001 -4.894487261772156e-001 -9.110729694366455e-001 3.156659901142120e-001 -8.372070193290710e-001 1.710339263081551e-002 -7.162731885910034e-001 -9.848624467849731e-002 -2.407071143388748e-001 -4.630023241043091e-001 5.028110146522522e-001 + +#outputSynapse FullSynapse +120 -1.209702730178833e+000 1.183213353157044e+000 -1.019356846809387e+000 -1.344744205474854e+000 -1.445307731628418e+000 1.024327754974365e+000 -1.584630727767944e+000 1.083521246910095e+000 -1.308865427970886e+000 -1.247952342033386e+000 1.239847064018250e+000 1.287056356668472e-001 9.846584796905518e-001 -1.553632378578186e+000 -1.231866717338562e+000 4.489912092685700e-002 1.253254055976868e+000 -1.430614471435547e+000 1.041161060333252e+000 -1.605084300041199e+000 1.527578949928284e+000 -1.474965572357178e+000 1.355290770530701e+000 -1.745877861976624e+000 1.712602972984314e+000 -1.563431382179260e+000 8.333104252815247e-001 -1.541154265403748e+000 -1.556280970573425e+000 7.898001670837402e-001 1.451943874359131e+000 1.376102089881897e+000 -1.475358963012695e+000 -1.508958697319031e+000 1.723131775856018e+000 1.577485084533691e+000 2.009120136499405e-001 -1.543342947959900e+000 -1.532042622566223e+000 -1.665173649787903e+000 -1.577844977378845e+000 1.509271860122681e+000 -1.648273229598999e+000 -1.399203181266785e+000 -1.230364322662354e+000 1.090018987655640e+000 -7.097014784812927e-001 1.677408456802368e+000 -1.743194699287415e+000 -1.423129081726074e+000 7.856354713439941e-001 1.262704372406006e+000 1.029602646827698e+000 -8.157435655593872e-001 -1.168590903282166e+000 -1.007120013237000e+000 1.498046159744263e+000 -1.094031929969788e+000 1.288908720016480e+000 -1.570232629776001e+000 1.331548571586609e+000 -1.591911792755127e+000 1.173869848251343e+000 -1.569446206092835e+000 1.071457147598267e+000 -1.386015534400940e+000 1.319629669189453e+000 -1.251965403556824e+000 -1.506981730461121e+000 -5.631150603294373e-001 1.476744890213013e+000 1.224819302558899e+000 -1.190375804901123e+000 -4.876171946525574e-001 1.674062848091126e+000 1.343202710151672e+000 8.375900387763977e-001 -1.624152183532715e+000 -1.477828741073608e+000 -1.320914030075073e+000 -1.082759499549866e+000 1.309733152389526e+000 -5.913071632385254e-001 -1.292264103889465e+000 -1.440814852714539e+000 1.020094513893127e+000 -1.208431601524353e+000 1.691915869712830e+000 -1.277797341346741e+000 -1.482174158096314e+000 1.266713261604309e+000 1.296367645263672e+000 1.238657712936401e+000 -7.025628685951233e-001 2.491326481103897e-001 -1.536825418472290e+000 1.577931523323059e+000 -1.065637469291687e+000 1.696800708770752e+000 -1.695444345474243e+000 1.581656932830811e+000 -1.088520646095276e+000 1.492973804473877e+000 -1.063908934593201e+000 1.496415257453919e+000 -1.486176609992981e+000 6.039925217628479e-001 -1.485497832298279e+000 -1.147870540618897e+000 -1.266431331634522e+000 1.607187867164612e+000 1.494379520416260e+000 -1.001191616058350e+000 -1.084854602813721e+000 1.410489916801453e+000 1.581320643424988e+000 1.205576062202454e+000 -1.245357394218445e+000 -1.343545675277710e+000 -1.709581851959229e+000 + +#activeOutputProbe DataWriter +3 +8.999999761581421e-001 5.000000074505806e-002 +8.999999761581421e-001 5.000000074505806e-002 +8.999999761581421e-001 5.000000074505806e-002 + diff --git a/fix/Breadboard/Breadboard5.nsw b/fix/Breadboard/Breadboard5.nsw new file mode 100644 index 000000000..a49f37258 --- /dev/null +++ b/fix/Breadboard/Breadboard5.nsw @@ -0,0 +1,43 @@ +// Weights saved from breadboard C:\My Documents\Breadboard5.nsb. +// Saved after epoch 1, exemplar 0. + +#NSWeightFileVersion 225 + +#inputFile File +7 +1.077844262123108e+000 -1.778443008661270e-001 +2.188449800014496e-001 1.674167998135090e-002 +1.918158382177353e-001 6.903452277183533e-001 +3.361344337463379e-001 4.151264205574989e-002 +2.485501170158386e-001 2.868268489837647e-001 +1.839550286531448e-001 3.534696102142334e-001 +1.951007992029190e-001 -4.725341200828552e-001 +0 + +#inputAxon Axon +7 1 +1 +0 + +#hidden1Axon TanhAxon +40 1 +1 +40 3.177257776260376e-001 -3.444353640079498e-001 5.270494818687439e-001 -5.221590399742127e-001 -2.202716171741486e-001 -4.241476655006409e-001 2.620704658329487e-002 6.034846901893616e-001 -3.619376122951508e-001 -3.380794525146484e-001 4.901479184627533e-002 4.951947927474976e-002 1.800213754177094e-001 -2.407073378562927e-001 -3.286456167697907e-001 -6.795548200607300e-001 -5.868792533874512e-001 -3.454326987266541e-001 1.429300457239151e-001 -2.292728424072266e-001 4.302643239498138e-001 -2.324737906455994e-001 -4.539224207401276e-001 5.544423460960388e-001 -4.054053127765656e-001 -1.476568281650543e-001 -2.141656428575516e-001 1.077265888452530e-001 5.846756696701050e-001 3.272875547409058e-001 1.847147941589356e-003 -4.990870654582977e-001 1.531988829374313e-001 1.791626960039139e-001 -6.736395359039307e-001 -5.093495845794678e-001 -6.099227815866470e-002 3.861090838909149e-001 -6.592265367507935e-001 -2.490588128566742e-001 + +#outputAxon SoftMaxAxon +3 1 +1 +3 0.000000000000000e+000 0.000000000000000e+000 0.000000000000000e+000 + +#hidden1Synapse FullSynapse +280 3.541271016001701e-002 -7.549672126770020e-001 -4.738137125968933e-001 -2.348672598600388e-003 -2.733762562274933e-001 -8.357829414308071e-003 -8.771334886550903e-001 -2.402636408805847e-001 -3.840126693248749e-001 -5.802615284919739e-001 1.073393039405346e-003 -2.714654207229614e-001 -1.682563573122025e-001 2.412795424461365e-001 6.722061038017273e-001 -2.907541096210480e-001 1.961677670478821e-001 -3.303197622299194e-001 1.424128562211990e-001 5.971218943595886e-001 -3.415485620498657e-001 -3.709296286106110e-001 2.636498510837555e-001 -6.461778879165649e-001 -4.282482266426086e-001 -1.192058548331261e-001 -7.758595943450928e-001 -4.671352729201317e-002 -2.137460708618164e-001 -1.528403162956238e-002 -7.986806631088257e-001 -3.911508247256279e-002 -5.328277871012688e-002 -6.519866585731506e-001 3.402085006237030e-001 1.100756451487541e-001 6.820629835128784e-001 7.288114726543427e-002 2.484970390796661e-001 -1.383271068334580e-001 1.246754452586174e-001 6.508666276931763e-001 3.158373534679413e-001 -5.986170172691345e-001 6.103343367576599e-001 -6.012113094329834e-001 -1.359632611274719e-001 -2.586761862039566e-002 -4.111338853836060e-001 1.772232651710510e-001 -6.230232119560242e-001 3.960133790969849e-001 -6.472764015197754e-001 -3.764366805553436e-001 -9.892498701810837e-002 -9.984154999256134e-002 -4.294761717319489e-001 -2.304461598396301e-001 -7.071238160133362e-001 -4.068204462528229e-001 -4.626799225807190e-001 -3.020684123039246e-001 6.521416902542114e-001 1.521919965744019e-001 -7.091572284698486e-001 -4.207086861133575e-001 -5.045717954635620e-001 -3.018378615379334e-001 -4.485827982425690e-001 -5.111956596374512e-001 -8.567054569721222e-002 4.856635630130768e-001 2.459491789340973e-001 -1.496585756540299e-001 -1.183001995086670e-001 4.713786244392395e-001 -2.809847891330719e-001 8.547450602054596e-002 -3.530589640140533e-001 -7.254429459571838e-001 -1.860966980457306e-001 -6.639543771743774e-001 4.769657552242279e-001 -7.412918210029602e-001 3.024796843528748e-001 -6.272576451301575e-001 -5.452296733856201e-001 -2.242822349071503e-001 -3.738160133361816e-001 3.284691274166107e-001 -4.564896821975708e-001 2.556349933147430e-001 4.318492487072945e-002 -1.320876032114029e-001 -9.898099303245544e-002 6.774403899908066e-002 1.919083893299103e-001 2.400640696287155e-001 4.077304899692535e-001 2.524036169052124e-001 5.042297840118408e-001 2.886471152305603e-001 -1.700776815414429e-001 -2.435589283704758e-001 -2.057165205478668e-001 1.996059715747833e-001 2.711705565452576e-001 3.861612975597382e-001 -2.083975523710251e-001 7.296724617481232e-002 -2.396509945392609e-001 -1.525006294250488e-001 -4.502384066581726e-001 -5.351938009262085e-001 -3.890139460563660e-001 1.700514107942581e-001 -4.677065312862396e-001 -3.514041006565094e-001 4.196007549762726e-001 2.812465429306030e-001 -2.938374876976013e-001 -3.160441517829895e-001 -4.980419874191284e-001 3.127529323101044e-001 2.271771281957626e-001 -1.466843336820602e-001 -6.397774219512940e-001 4.446669816970825e-001 8.942086249589920e-002 9.681937843561173e-002 -5.533168092370033e-002 -4.528337121009827e-001 6.882410049438477e-001 -3.133308887481690e-001 -2.058080136775971e-001 -2.226170003414154e-001 -2.296325266361237e-001 -2.966837584972382e-001 -3.301460444927216e-001 -3.557955026626587e-001 3.304032683372498e-001 -8.399857580661774e-002 4.199078381061554e-001 1.194518618285656e-002 7.232509851455689e-001 9.784302115440369e-002 -1.134829670190811e-001 1.034526005387306e-001 -8.523296117782593e-001 5.190717577934265e-001 5.323929339647293e-002 1.697375029325485e-001 5.581731796264648e-001 -9.171869754791260e-001 -1.815564483404160e-001 3.742720186710358e-001 -2.523972094058991e-001 1.490504741668701e-001 -6.334505081176758e-001 2.519290745258331e-001 2.056387513875961e-001 -1.307390183210373e-001 -9.355121254920960e-001 -2.585434913635254e-001 -4.636541008949280e-002 -1.257960349321365e-001 1.712975054979324e-001 -7.756385207176209e-001 -2.476336807012558e-001 2.972539961338043e-001 4.443784654140472e-001 4.029458761215210e-002 -2.695891633629799e-002 -1.858536303043366e-001 -1.682455986738205e-001 -1.443968862295151e-001 3.042537868022919e-001 -4.171138703823090e-001 -1.896526068449020e-001 1.934753060340881e-001 -5.211362838745117e-001 -4.224704951047897e-002 -5.408123731613159e-001 -2.546814382076263e-001 -3.727044463157654e-001 -4.361395835876465e-001 1.507636755704880e-001 8.203987777233124e-002 1.366124451160431e-001 5.710709095001221e-001 3.028809726238251e-001 9.636782407760620e-001 -3.770071640610695e-002 3.973050415515900e-001 2.884645946323872e-003 -8.364310860633850e-001 5.341901779174805e-001 -1.418879022821784e-003 5.416565537452698e-001 3.877540528774262e-001 -1.585132908076048e-003 1.770619601011276e-001 4.701207578182221e-002 4.187163114547730e-001 9.934148788452148e-001 2.260543704032898e-001 7.113759517669678e-001 4.728879332542419e-001 -3.471966087818146e-001 7.732371240854263e-002 -2.182047963142395e-001 8.698941469192505e-001 6.959328651428223e-001 1.184082403779030e-001 1.408587545156479e-001 2.005882859230042e-001 3.091167509555817e-001 -1.955157965421677e-001 -2.792426571249962e-002 -7.336559891700745e-002 1.834385395050049e-001 -3.164150416851044e-001 -5.837532281875610e-001 9.843266010284424e-001 -5.053303837776184e-001 9.432902336120606e-001 2.762463316321373e-002 3.678649663925171e-001 -8.084134012460709e-002 2.041484862565994e-001 5.061163306236267e-001 7.991071939468384e-001 2.264233529567719e-001 7.115226387977600e-001 -5.186138153076172e-001 4.093891084194183e-001 -1.001899018883705e-001 -1.933344826102257e-002 1.815729439258575e-001 -1.810713559389114e-001 -5.504883527755737e-001 7.005249857902527e-001 -1.967341639101505e-002 1.448700390756130e-002 3.791421651840210e-001 -3.687309324741364e-001 6.238684058189392e-001 2.549594640731812e-002 6.611171960830689e-001 -2.348230034112930e-001 4.087108075618744e-001 1.835047304630280e-001 2.745413780212402e-001 -5.477424860000610e-001 4.227129369974136e-002 1.370747834444046e-001 -1.771535575389862e-001 2.915630638599396e-001 8.117929100990295e-002 -5.147354602813721e-001 -7.195407748222351e-001 -2.950702905654907e-001 -8.272841572761536e-001 -8.926602080464363e-003 6.488984823226929e-001 -7.542604207992554e-001 -1.718278229236603e-001 -4.908424615859985e-002 -3.619753718376160e-001 -9.747832268476486e-002 -9.625122696161270e-002 -1.545960754156113e-001 4.842050671577454e-001 -9.618758410215378e-002 1.017526090145111e-001 -1.527849882841110e-001 5.150741338729858e-001 -2.614658325910568e-002 -4.681808650493622e-001 6.698484718799591e-002 + +#outputSynapse FullSynapse +120 -4.252142608165741e-001 -5.190939903259277e-001 2.900628745555878e-001 -4.749988615512848e-001 -2.432068884372711e-001 2.475018054246903e-001 1.508098654448986e-002 -1.032671928405762e-001 -5.695398449897766e-001 -4.341589808464050e-001 3.563072979450226e-001 -1.610363721847534e-001 -1.529531776905060e-001 3.572074323892593e-002 -1.639768481254578e-001 -2.103261351585388e-001 -5.111085772514343e-001 -9.769214689731598e-002 -1.570120900869370e-001 -1.928524225950241e-001 4.143640100955963e-001 -3.950143232941628e-002 -2.028328180313110e-001 -1.475265175104141e-001 -2.296919003129005e-002 -3.979336936026812e-003 -3.908852040767670e-001 4.192969501018524e-001 2.397747188806534e-001 4.962041378021240e-001 4.480696618556976e-001 -2.336141020059586e-001 3.938802778720856e-001 2.352581322193146e-001 1.772783696651459e-002 -5.289353057742119e-002 -3.967223316431046e-002 -4.341553747653961e-001 -2.162312269210815e-001 4.311326891183853e-002 4.480128586292267e-001 1.783114373683929e-001 5.068565607070923e-001 -4.451447725296021e-001 -5.096289515495300e-001 -4.807172119617462e-001 1.144711822271347e-001 3.887178003787994e-001 -3.575057387351990e-001 -1.148879528045654e-001 -3.399987518787384e-002 -2.313354164361954e-001 -7.217752188444138e-002 3.657472431659699e-001 3.738324940204620e-001 4.177713990211487e-001 -4.159389436244965e-001 -1.484509706497192e-001 2.662932872772217e-001 -4.467738270759583e-001 7.071519643068314e-002 3.344006240367889e-001 -5.436876043677330e-002 3.525221049785614e-001 -2.395160868763924e-002 -3.141686320304871e-001 3.852373957633972e-001 4.932067096233368e-001 -1.492380946874619e-001 4.595996737480164e-001 3.445216640830040e-002 -5.653984546661377e-001 -4.437799155712128e-001 1.460446715354919e-001 -4.742037057876587e-001 1.456019878387451e-001 3.867210447788239e-001 4.871259629726410e-001 -4.954726397991180e-001 1.770049333572388e-002 2.028178423643112e-001 -3.220860958099365e-001 2.971330881118774e-001 -1.783177554607391e-001 -2.126741260290146e-001 -2.823735475540161e-001 4.713099896907806e-001 2.155631184577942e-001 -3.713304102420807e-001 2.199546098709106e-001 2.943331003189087e-001 4.534626007080078e-001 3.414066731929779e-001 -1.535274535417557e-001 -1.036400645971298e-001 -4.483501911163330e-001 8.723334968090057e-002 -1.368855964392424e-002 -5.010653138160706e-001 4.472654759883881e-001 1.106471717357636e-001 5.139253139495850e-001 -2.296521663665772e-001 4.545788764953613e-001 1.664130948483944e-002 2.438283525407314e-002 -1.943250745534897e-001 4.952348470687866e-001 3.839295804500580e-001 -3.456721901893616e-001 -1.650201976299286e-001 -3.892767727375031e-001 -3.154349029064179e-001 3.591218292713165e-001 -2.804268598556519e-001 -4.606449007987976e-001 1.020256653428078e-001 2.229744791984558e-001 -4.180959761142731e-001 -4.198006689548492e-001 + +#activeOutputProbe DataWriter +3 +8.999999761581421e-001 5.000000074505806e-002 +8.999999761581421e-001 5.000000074505806e-002 +8.999999761581421e-001 5.000000074505806e-002 + diff --git a/fix/Breadboard/Breadboard6.nsw b/fix/Breadboard/Breadboard6.nsw new file mode 100644 index 000000000..ac52abc13 --- /dev/null +++ b/fix/Breadboard/Breadboard6.nsw @@ -0,0 +1,45 @@ +// Weights saved from breadboard C:\My Documents\Breadboard6.nsb. +// Saved after epoch 1, exemplar 0. + +#NSWeightFileVersion 225 + +#inputFile File +7 +1.353383421897888e+000 -4.533834457397461e-001 +2.269289046525955e-001 -1.588500849902630e-002 +1.868382692337036e-001 6.490761637687683e-001 +4.038590788841248e-001 3.776083141565323e-002 +2.430133521556854e-001 3.004860281944275e-001 +1.935067623853684e-001 4.185551702976227e-001 +1.951007992029190e-001 -4.725341200828552e-001 +0 + +#inputAxon Axon +7 1 +1 +0 + +#hidden1Axon TanhAxon +7 1 +1 +7 7.384125608950853e-003 -2.202851057052612e+000 2.003432661294937e-001 -2.467587143182755e-001 5.973502993583679e-001 3.834692537784576e-001 2.687855064868927e-001 + +#hidden2Axon TanhAxon +4 1 +1 +4 3.643750846385956e-001 2.449363768100739e-001 4.754272103309631e-001 7.550075054168701e-001 + +#outputAxon SoftMaxAxon +3 1 +1 +3 0.000000000000000e+000 0.000000000000000e+000 0.000000000000000e+000 + +#hidden1Synapse FullSynapse +49 7.333400845527649e-001 5.450296998023987e-001 -7.700046896934509e-001 1.426693439483643e+000 -1.024212338961661e-003 -6.459779292345047e-002 1.028800487518311e+000 -2.116347402334213e-001 3.591781139373779e+000 2.435753583908081e+000 -6.687584519386292e-001 1.201278567314148e+000 -3.478864133358002e-001 1.830960988998413e+000 -3.111673295497894e-001 -4.177703261375427e-001 -3.920616805553436e-001 -5.040770769119263e-001 -5.354442000389099e-001 -1.534618530422449e-002 -1.089364647865295e+000 -3.010036647319794e-001 1.486289381980896e+000 1.059559464454651e+000 1.640596628189087e+000 2.254628390073776e-001 4.839954376220703e-001 8.484285473823547e-001 -6.926012784242630e-002 4.926209524273872e-002 2.834132313728333e-001 3.028324842453003e-001 2.161216735839844e-001 7.251360416412354e-001 2.851752638816834e-001 -5.653074979782105e-001 3.640621304512024e-001 1.341893225908279e-001 7.511208057403565e-001 -1.088509336113930e-001 1.044083759188652e-001 6.529347300529480e-001 -6.885128021240234e-001 -1.003871187567711e-001 9.337020665407181e-002 -4.425194561481476e-001 -3.668845295906067e-001 -2.661575675010681e-001 -5.936880707740784e-001 + +#hidden2Synapse FullSynapse +28 -5.461466908454895e-001 -1.490996479988098e+000 7.721499800682068e-001 -3.842977285385132e-001 1.134691461920738e-001 -7.171064615249634e-001 4.990165829658508e-001 -4.233781099319458e-001 5.502462983131409e-001 -1.000102013349533e-001 1.481512188911438e+000 1.637827455997467e-001 5.879161506891251e-002 -3.256742060184479e-001 4.237195849418640e-001 1.471476674079895e+000 -1.982609331607819e-001 6.787789463996887e-001 5.525223612785339e-001 4.395257532596588e-001 1.643348783254623e-001 8.910947442054749e-001 1.772162079811096e+000 -2.550726830959320e-001 4.305597543716431e-001 1.965346336364746e-001 -2.251276820898056e-001 -5.650298595428467e-001 + +#outputSynapse FullSynapse +12 4.605286195874214e-002 1.636024713516235e-001 7.045555710792542e-001 4.994805455207825e-001 5.167593955993652e-001 2.924540340900421e-001 -1.490857079625130e-002 -1.826021969318390e-001 3.571106493473053e-001 -3.790216147899628e-001 -6.031348705291748e-001 -4.664786159992218e-001 + diff --git a/fix/Breadboard/Breadboard7.nsw b/fix/Breadboard/Breadboard7.nsw new file mode 100644 index 000000000..c88453404 --- /dev/null +++ b/fix/Breadboard/Breadboard7.nsw @@ -0,0 +1,45 @@ +// Weights saved from breadboard C:\My Documents\Breadboard7.nsb. +// Saved after epoch 1, exemplar 0. + +#NSWeightFileVersion 225 + +#inputFile File +7 +1.077844262123108e+000 -1.778443008661270e-001 +2.295625507831574e-001 6.163756549358368e-002 +2.081165313720703e-001 6.204994320869446e-001 +3.565062582492828e-001 -1.051693689078093e-002 +2.430133521556854e-001 3.004860281944275e-001 +1.839550286531448e-001 3.534696102142334e-001 +1.951007992029190e-001 -4.725341200828552e-001 +0 + +#inputAxon Axon +7 1 +1 +0 + +#hidden1Axon TanhAxon +7 1 +1 +7 -4.191969335079193e-001 1.229978561401367e+000 -2.403785735368729e-001 5.233071446418762e-001 8.062141537666321e-001 1.000604867935181e+000 -1.015548110008240e-001 + +#hidden2Axon TanhAxon +4 1 +1 +4 -5.321261882781982e-001 -2.396449327468872e+000 -1.170158505439758e+000 -4.097367227077484e-001 + +#outputAxon SoftMaxAxon +3 1 +1 +3 0.000000000000000e+000 0.000000000000000e+000 0.000000000000000e+000 + +#hidden1Synapse FullSynapse +49 1.341468811035156e+000 -4.215665817260742e+000 -1.636691570281982e+000 -2.792109727859497e+000 -1.489341259002686e+000 4.075187742710114e-001 -2.091729402542114e+000 -5.029736161231995e-001 -4.151493072509766e+000 -1.452428579330444e+000 2.398953676223755e+000 -8.748555183410645e-001 1.340690374374390e+000 -2.277854681015015e+000 6.057588458061218e-001 1.353034019470215e+000 -1.214678883552551e+000 -3.864320814609528e-001 1.148570895195007e+000 5.792776346206665e-001 1.344245020300150e-002 -8.885311484336853e-001 -1.594583272933960e+000 4.960928857326508e-001 -1.118881464004517e+000 -2.252289772033691e+000 6.328870654106140e-001 -1.946701169013977e+000 -2.910976111888886e-001 2.447998225688934e-001 2.001658976078033e-001 -1.229660585522652e-002 6.969845890998840e-001 -5.897524300962687e-003 -5.688555836677551e-001 2.619750201702118e-001 -4.162483692169190e+000 -1.468571424484253e+000 -3.118389844894409e+000 6.947994828224182e-001 -2.687734663486481e-001 -2.110401153564453e+000 3.224660456180573e-002 8.378994464874268e-001 9.896742701530457e-001 -7.354493737220764e-001 6.684727072715759e-001 1.465887904167175e+000 -3.726872503757477e-001 + +#hidden2Synapse FullSynapse +28 -3.395457863807678e-001 -5.815528631210327e-001 2.929831743240356e-001 -5.629656314849854e-001 4.701104387640953e-002 -9.300172328948975e-001 -1.461120098829269e-001 -3.458845615386963e-001 1.266251802444458e-001 6.342335790395737e-002 1.869771480560303e-001 -1.476681977510452e-001 5.144428834319115e-002 -3.145390946883708e-004 8.697064518928528e-001 1.057970225811005e-001 2.603019773960114e-001 4.393529295921326e-001 -2.832717299461365e-001 5.771816968917847e-001 -3.896601796150208e-001 -7.260112762451172e-001 -7.957320213317871e-001 6.776907294988632e-002 -3.073690235614777e-001 -1.540119051933289e-001 -6.733091473579407e-001 2.009786069393158e-001 + +#outputSynapse FullSynapse +12 3.156347572803497e-001 -8.236174583435059e-001 -9.946570396423340e-001 4.212915897369385e-001 -7.918102145195007e-001 -2.033229321241379e-001 -1.056663155555725e+000 -5.699685215950012e-001 -9.666987657546997e-001 -5.505290031433106e-001 8.724089711904526e-002 -9.536570906639099e-001 + diff --git a/fix/Breadboard/Breadboard8.nsw b/fix/Breadboard/Breadboard8.nsw new file mode 100644 index 000000000..56b61746e --- /dev/null +++ b/fix/Breadboard/Breadboard8.nsw @@ -0,0 +1,51 @@ +// Weights saved from breadboard C:\My Documents\Breadboard8.nsb. +// Saved after epoch 1, exemplar 0. + +#NSWeightFileVersion 225 + +#inputFile File +7 +1.353383421897888e+000 -4.533834457397461e-001 +2.188449800014496e-001 1.674167998135090e-002 +1.906577646732330e-001 6.807435750961304e-001 +3.361344337463379e-001 4.151264205574989e-002 +2.491349428892136e-001 3.307266235351563e-001 +1.839550286531448e-001 3.534696102142334e-001 +1.951007992029190e-001 -4.725341200828552e-001 +0 + +#inputAxon Axon +7 1 +1 +0 + +#hidden1Axon TanhAxon +7 1 +1 +7 -3.274627029895783e-001 2.668272238224745e-003 -3.019839525222778e-001 -4.557206928730011e-001 -5.515558272600174e-002 3.119016764685512e-004 8.753398060798645e-002 + +#hidden2Axon TanhAxon +4 1 +1 +4 2.733168303966522e-001 -3.423235416412354e-001 8.666662573814392e-001 -6.124708056449890e-001 + +#outputAxon SoftMaxAxon +3 1 +1 +3 0.000000000000000e+000 0.000000000000000e+000 0.000000000000000e+000 + +#hidden1Synapse FullSynapse +49 2.732226848602295e-001 1.847893238067627e+000 -1.084923520684242e-001 1.385403037071228e+000 2.885355055332184e-001 -3.135629594326019e-001 1.057805895805359e+000 -5.868541821837425e-002 3.278825521469116e+000 4.641786217689514e-001 4.461606740951538e-001 -1.952850073575974e-001 -5.789646506309509e-001 1.945697903633118e+000 -9.578172862529755e-002 2.150904417037964e+000 9.114052653312683e-001 1.107189536094666e+000 6.752110123634338e-001 2.475811988115311e-001 1.050705909729004e+000 3.205673992633820e-001 2.478840798139572e-001 -5.084273815155029e-001 -2.407394796609879e-001 -1.702371835708618e-001 1.456947028636932e-001 3.221787512302399e-001 -2.719256579875946e-001 -5.116361379623413e-001 3.973563387989998e-002 -1.733802706003189e-001 -1.649789661169052e-001 -4.471102654933929e-001 -4.071239829063416e-001 -1.492276042699814e-001 -1.245773434638977e+000 -6.851593255996704e-001 -8.733592033386231e-001 -4.348643422126770e-001 -3.520536422729492e-001 -9.930510520935059e-001 1.956800930202007e-002 -9.781590104103088e-001 -6.039583683013916e-001 -6.923800706863403e-001 -6.682770848274231e-001 4.162513464689255e-002 -1.004322052001953e+000 + +#hidden2Synapse FullSynapse +28 -8.183520436286926e-001 -1.621446132659912e+000 -1.045793533325195e+000 -5.855653062462807e-002 4.404523968696594e-001 7.002395391464233e-001 2.097517400979996e-001 -9.925779700279236e-002 -8.263560533523560e-001 -1.043026208877564e+000 4.524357020854950e-001 2.231711596250534e-001 8.736496567726135e-001 8.797182440757752e-001 6.963157653808594e-001 2.816314399242401e-001 1.525615751743317e-001 1.936565339565277e-001 1.900831162929535e-001 1.180221140384674e-001 1.027775928378105e-001 9.149055480957031e-001 1.129598617553711e+000 6.131598353385925e-001 2.547058761119843e-001 2.556352131068707e-002 -3.627143800258637e-002 -6.722733378410339e-001 + +#outputSynapse FullSynapse +12 -5.266965627670288e-001 -1.973343640565872e-001 1.362649053335190e-001 9.479679167270660e-002 2.987665235996246e-001 -3.116582632064819e-001 -1.842434853315353e-001 -4.986568093299866e-001 6.261917948722839e-001 5.454919338226318e-001 -3.484728187322617e-002 -4.687039256095886e-001 + +#activeOutputProbe DataWriter +3 +8.999999761581421e-001 5.000000074505806e-002 +8.999999761581421e-001 5.000000074505806e-002 +8.999999761581421e-001 5.000000074505806e-002 + diff --git a/fix/Breadboard/Breadboard9.nsw b/fix/Breadboard/Breadboard9.nsw new file mode 100644 index 000000000..95b1f1ed6 --- /dev/null +++ b/fix/Breadboard/Breadboard9.nsw @@ -0,0 +1,51 @@ +// Weights saved from breadboard C:\My Documents\Breadboard9.nsb. +// Saved after epoch 1, exemplar 0. + +#NSWeightFileVersion 225 + +#inputFile File +7 +1.077844262123108e+000 -1.778443008661270e-001 +2.188449800014496e-001 1.674167998135090e-002 +1.868382692337036e-001 6.490761637687683e-001 +3.733665347099304e-001 1.051026657223702e-001 +2.430133521556854e-001 3.004860281944275e-001 +2.083092182874680e-001 3.581876754760742e-001 +1.951007992029190e-001 -4.725341200828552e-001 +0 + +#inputAxon Axon +7 1 +1 +0 + +#hidden1Axon TanhAxon +7 1 +1 +7 1.012814998626709e+000 -3.782782554626465e-001 -2.220184087753296e+000 -3.424299955368042e-001 1.449530482292175e+000 -2.592789530754089e-001 -4.670010507106781e-001 + +#hidden2Axon TanhAxon +4 1 +1 +4 3.516010642051697e-001 3.293374776840210e-001 -1.675553172826767e-001 3.799068629741669e-001 + +#outputAxon SoftMaxAxon +3 1 +1 +3 0.000000000000000e+000 0.000000000000000e+000 0.000000000000000e+000 + +#hidden1Synapse FullSynapse +49 1.390573829412460e-001 -3.110583126544952e-001 1.105552077293396e+000 4.394045472145081e-001 4.795211851596832e-001 1.969023197889328e-001 5.574952811002731e-002 1.690310984849930e-001 2.208244323730469e+000 2.111947536468506e+000 3.239532709121704e-001 7.690296173095703e-001 1.264077782630920e+000 1.672740578651428e+000 1.320844173431397e+000 7.965675592422485e-001 -7.341063618659973e-001 3.702043294906616e+000 1.716022133827210e+000 -6.642882823944092e-001 1.686427950859070e+000 -4.863217473030090e-001 1.285641908645630e+000 1.281449794769287e+000 2.356275558471680e+000 -1.406845331192017e+000 6.027717590332031e-001 6.652191877365112e-001 -9.871492385864258e-001 -5.513690948486328e+000 -2.750334143638611e-001 1.229651212692261e+000 -2.504641294479370e+000 -3.219850361347199e-001 -2.744197607040405e+000 -4.023179113864899e-001 9.932321496307850e-003 -6.916724443435669e-001 -2.260914087295532e+000 1.261568814516068e-001 3.248662948608398e-001 6.963043808937073e-001 1.830800414085388e+000 -2.054267644882202e+000 -9.595731496810913e-001 -8.711494207382202e-001 -1.330682396888733e+000 2.109736204147339e+000 -6.145163774490356e-001 + +#hidden2Synapse FullSynapse +28 -3.299105465412140e-001 4.235435724258423e-001 9.191738963127136e-001 6.795659661293030e-001 -1.440919041633606e+000 4.634908214211464e-002 -1.265781879425049e+000 2.394487708806992e-001 1.205053567886353e+000 5.790516138076782e-001 1.087130665779114e+000 -6.723164916038513e-001 -1.834900081157684e-001 -4.767680168151856e-001 8.402896672487259e-002 1.035530328750610e+000 1.644443035125732e+000 4.317290484905243e-001 -1.714672803878784e+000 5.225644707679749e-001 -5.602287650108337e-001 1.068559288978577e+000 -2.211284125223756e-003 -2.943626642227173e-001 1.341261714696884e-001 4.324447214603424e-001 -5.482236146926880e-001 -4.985276758670807e-001 + +#outputSynapse FullSynapse +12 3.726457059383392e-001 7.749153375625610e-001 4.159255921840668e-001 5.234625935554504e-001 -1.592817008495331e-001 5.884559154510498e-001 -7.756121158599854e-001 2.137655019760132e-001 -6.172903776168823e-001 -4.417923986911774e-001 -4.576872885227203e-001 4.440903961658478e-001 + +#activeOutputProbe DataWriter +3 +8.999999761581421e-001 5.000000074505806e-002 +8.999999761581421e-001 5.000000074505806e-002 +8.999999761581421e-001 5.000000074505806e-002 + diff --git a/jobs/JGLOBAL_ATMOS_NCEPPOST b/jobs/JGLOBAL_ATMOS_NCEPPOST index 75da4d5cc..45adca8e5 100755 --- a/jobs/JGLOBAL_ATMOS_NCEPPOST +++ b/jobs/JGLOBAL_ATMOS_NCEPPOST @@ -65,9 +65,6 @@ export g2tmpl_ver=${g2tmpl_ver:-v1.5.0} export CDATE=${CDATE:-${PDY}${cyc}} export CDUMP=${CDUMP:-${RUN:-"gfs"}} export COMPONENT=${COMPONENT:-atmos} -if [ $RUN_ENVIR = "nco" ]; then - export ROTDIR=${COMROOT:?}/$NET/$envir -fi ############################################## @@ -77,17 +74,12 @@ export APRUNP=${APRUN:-$APRUN_NP} export RERUN=${RERUN:-NO} export HOMECRTM=${HOMECRTM:-${NWROOT}/lib/crtm/${crtm_ver}} export FIXCRTM=${CRTM_FIX:-${HOMECRTM}/fix} -#export FIXCRTM=${FIXCRTM:-${NWROOThps}/hwrf.${hwrf_ver}/fix/hwrf-crtm-2.0.6} export PARMpost=${PARMpost:-$HOMEgfs/parm/post} export INLINE_POST=${WRITE_DOPOST:-".false."} -if [ $RUN_ENVIR = "nco" ]; then - export COMIN=${COMIN:-$ROTDIR/$RUN.$PDY/$cyc/$COMPONENT} - export COMOUT=${COMOUT:-$ROTDIR/$RUN.$PDY/$cyc/$COMPONENT} -else - export COMIN="$ROTDIR/$CDUMP.$PDY/$cyc/$COMPONENT" - export COMOUT="$ROTDIR/$CDUMP.$PDY/$cyc/$COMPONENT" -fi +export COMIN=${COMIN:-$ROTDIR/$RUN.$PDY/$cyc/$COMPONENT} +export COMOUT=${COMOUT:-$ROTDIR/$RUN.$PDY/$cyc/$COMPONENT} + [[ ! -d $COMOUT ]] && mkdir -m 775 -p $COMOUT if [ $RUN = gfs ];then @@ -128,7 +120,7 @@ export SLEEP_INT=5 # Run relevant exglobal script env msg="HAS BEGUN on `hostname`" -postmsg "$jlogfile" "$msg" +postmsg "$msg" $LOGSCRIPT @@ -148,7 +140,7 @@ if [ -e "$pgmout" ]; then fi msg="ENDED NORMALLY." -postmsg "$jlogfile" "$msg" +postmsg "$msg" ########################################## diff --git a/jobs/JGLOBAL_ATMOS_POST_MANAGER b/jobs/JGLOBAL_ATMOS_POST_MANAGER index 26b17bcd6..94c848627 100755 --- a/jobs/JGLOBAL_ATMOS_POST_MANAGER +++ b/jobs/JGLOBAL_ATMOS_POST_MANAGER @@ -89,9 +89,9 @@ export EXT_FCST=NO ########################################### export cycle=t${cyc}z setpdy.sh -. PDY +. ./PDY -export ROTDIR=${ROTDIR:-{COMROOT:?}/$NET/$envir} +export ROTDIR=${ROTDIR:-${COMROOT:?}/$NET/$envir} export COMIN=${COMIN:-$ROTDIR/$RUN.$PDY/$cyc/$COMPONENT} export COMOUT=${COMOUT:-$ROTDIR/$RUN.$PDY/$cyc/$COMPONENT} diff --git a/jobs/J_NCEPPOST b/jobs/J_NCEPPOST index 746b6babe..0e1c5070e 100755 --- a/jobs/J_NCEPPOST +++ b/jobs/J_NCEPPOST @@ -24,11 +24,6 @@ mkdir -p $DATA cd $DATA export KEEPDATA=${KEEPDATA:-NO} -#################################### -# File To Log Msgs -#################################### -export jlogfile=${jlogfile:-${COMROOT}/logs/jlogfiles/jlogfile.${job}.${pid}} - #################################### # Determine Job Output Name on System #################################### diff --git a/manage_externals/.dir_locals.el b/manage_externals/.dir_locals.el deleted file mode 100644 index a370490e9..000000000 --- a/manage_externals/.dir_locals.el +++ /dev/null @@ -1,12 +0,0 @@ -; -*- mode: Lisp -*- - -((python-mode - . ( - ;; fill the paragraph to 80 columns when using M-q - (fill-column . 80) - - ;; Use 4 spaces to indent in Python - (python-indent-offset . 4) - (indent-tabs-mode . nil) - ))) - diff --git a/manage_externals/.github/ISSUE_TEMPLATE.md b/manage_externals/.github/ISSUE_TEMPLATE.md deleted file mode 100644 index 8ecb2ae64..000000000 --- a/manage_externals/.github/ISSUE_TEMPLATE.md +++ /dev/null @@ -1,6 +0,0 @@ -### Summary of Issue: -### Expected behavior and actual behavior: -### Steps to reproduce the problem (should include model description file(s) or link to publi c repository): -### What is the changeset ID of the code, and the machine you are using: -### have you modified the code? If so, it must be committed and available for testing: -### Screen output or log file showing the error message and context: diff --git a/manage_externals/.github/PULL_REQUEST_TEMPLATE.md b/manage_externals/.github/PULL_REQUEST_TEMPLATE.md deleted file mode 100644 index b68b1fb5e..000000000 --- a/manage_externals/.github/PULL_REQUEST_TEMPLATE.md +++ /dev/null @@ -1,17 +0,0 @@ -[ 50 character, one line summary ] - -[ Description of the changes in this commit. It should be enough - information for someone not following this development to understand. - Lines should be wrapped at about 72 characters. ] - -User interface changes?: [ No/Yes ] -[ If yes, describe what changed, and steps taken to ensure backward compatibilty ] - -Fixes: [Github issue #s] And brief description of each issue. - -Testing: - test removed: - unit tests: - system tests: - manual testing: - diff --git a/manage_externals/.gitignore b/manage_externals/.gitignore deleted file mode 100644 index 411de5d96..000000000 --- a/manage_externals/.gitignore +++ /dev/null @@ -1,14 +0,0 @@ -# directories that are checked out by the tool -cime/ -cime_config/ -components/ - -# generated local files -*.log - -# editor files -*~ -*.bak - -# generated python files -*.pyc diff --git a/manage_externals/.travis.yml b/manage_externals/.travis.yml deleted file mode 100644 index b32f81bd2..000000000 --- a/manage_externals/.travis.yml +++ /dev/null @@ -1,32 +0,0 @@ -# NOTE(bja, 2017-11) travis-ci dosen't support python language builds -# on mac os. As a work around, we use built-in python on linux, and -# declare osx a 'generic' language, and create our own python env. - -language: python -os: linux -python: - - "2.7" - - "3.4" - - "3.5" - - "3.6" -matrix: - include: - - os: osx - language: generic - before_install: - # NOTE(bja, 2017-11) update is slow, 2.7.12 installed by default, good enough! - # - brew update - # - brew outdated python2 || brew upgrade python2 - - pip install virtualenv - - virtualenv env -p python2 - - source env/bin/activate -install: - - pip install -r test/requirements.txt -before_script: - - git --version -script: - - cd test; make test - - cd test; make lint -after_success: - - cd test; make coverage - - cd test; coveralls diff --git a/manage_externals/LICENSE.txt b/manage_externals/LICENSE.txt deleted file mode 100644 index 665ee03fb..000000000 --- a/manage_externals/LICENSE.txt +++ /dev/null @@ -1,34 +0,0 @@ -Copyright (c) 2017-2018, University Corporation for Atmospheric Research (UCAR) -All rights reserved. - -Developed by: - University Corporation for Atmospheric Research - National Center for Atmospheric Research - https://www2.cesm.ucar.edu/working-groups/sewg - -Permission is hereby granted, free of charge, to any person obtaining -a copy of this software and associated documentation files (the "Software"), -to deal with the Software without restriction, including without limitation -the rights to use, copy, modify, merge, publish, distribute, sublicense, -and/or sell copies of the Software, and to permit persons to whom -the Software is furnished to do so, subject to the following conditions: - - - Redistributions of source code must retain the above copyright notice, - this list of conditions and the following disclaimers. - - Redistributions in binary form must reproduce the above copyright notice, - this list of conditions and the following disclaimers in the documentation - and/or other materials provided with the distribution. - - Neither the names of [Name of Development Group, UCAR], - nor the names of its contributors may be used to endorse or promote - products derived from this Software without specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" -AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE -ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE -LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR -CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF -SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS -INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN -CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) -ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE -POSSIBILITY OF SUCH DAMAGE. diff --git a/manage_externals/README.md b/manage_externals/README.md deleted file mode 100644 index 15e45ffb7..000000000 --- a/manage_externals/README.md +++ /dev/null @@ -1,211 +0,0 @@ --- AUTOMATICALLY GENERATED FILE. DO NOT EDIT -- - -[![Build Status](https://travis-ci.org/ESMCI/manage_externals.svg?branch=master)](https://travis-ci.org/ESMCI/manage_externals)[![Coverage Status](https://coveralls.io/repos/github/ESMCI/manage_externals/badge.svg?branch=master)](https://coveralls.io/github/ESMCI/manage_externals?branch=master) -``` -usage: checkout_externals [-h] [-e [EXTERNALS]] [-o] [-S] [-v] [--backtrace] - [-d] [--no-logging] - -checkout_externals manages checking out groups of externals from revision -control based on a externals description file. By default only the -required externals are checkout out. - -Operations performed by manage_externals utilities are explicit and -data driven. checkout_externals will always make the working copy *exactly* -match what is in the externals file when modifying the working copy of -a repository. - -If checkout_externals isn't doing what you expected, double check the contents -of the externals description file. - -Running checkout_externals without the '--status' option will always attempt to -synchronize the working copy to exactly match the externals description. - -optional arguments: - -h, --help show this help message and exit - -e [EXTERNALS], --externals [EXTERNALS] - The externals description filename. Default: - Externals.cfg. - -o, --optional By default only the required externals are checked - out. This flag will also checkout the optional - externals. - -S, --status Output status of the repositories managed by - checkout_externals. By default only summary - information is provided. Use verbose output to see - details. - -v, --verbose Output additional information to the screen and log - file. This flag can be used up to two times, - increasing the verbosity level each time. - --backtrace DEVELOPER: show exception backtraces as extra - debugging output - -d, --debug DEVELOPER: output additional debugging information to - the screen and log file. - --no-logging DEVELOPER: disable logging. - -``` -NOTE: checkout_externals *MUST* be run from the root of the source tree it -is managing. For example, if you cloned a repository with: - - $ git clone git@github.com/{SOME_ORG}/some-project some-project-dev - -Then the root of the source tree is /path/to/some-project-dev. If you -obtained a sub-project via a checkout of another project: - - $ git clone git@github.com/{SOME_ORG}/some-project some-project-dev - -and you need to checkout the sub-project externals, then the root of the -source tree is /path/to/some-project-dev. Do *NOT* run checkout_externals -from within /path/to/some-project-dev/sub-project - -The root of the source tree will be referred to as `${SRC_ROOT}` below. - -# Supported workflows - - * Checkout all required components from the default externals - description file: - - $ cd ${SRC_ROOT} - $ ./manage_externals/checkout_externals - - * To update all required components to the current values in the - externals description file, re-run checkout_externals: - - $ cd ${SRC_ROOT} - $ ./manage_externals/checkout_externals - - If there are *any* modifications to *any* working copy according - to the git or svn 'status' command, checkout_externals - will not update any external repositories. Modifications - include: modified files, added files, removed files, or missing - files. - - To avoid this safety check, edit the externals description file - and comment out the modified external block. - - * Checkout all required components from a user specified externals - description file: - - $ cd ${SRC_ROOT} - $ ./manage_externals/checkout_externals --excernals my-externals.cfg - - * Status summary of the repositories managed by checkout_externals: - - $ cd ${SRC_ROOT} - $ ./manage_externals/checkout_externals --status - - ./cime - s ./components/cism - ./components/mosart - e-o ./components/rtm - M ./src/fates - e-o ./tools/PTCLM - - where: - * column one indicates the status of the repository in relation - to the externals description file. - * column two indicates whether the working copy has modified files. - * column three shows how the repository is managed, optional or required - - Column one will be one of these values: - * s : out-of-sync : repository is checked out at a different commit - compared with the externals description - * e : empty : directory does not exist - checkout_externals has not been run - * ? : unknown : directory exists but .git or .svn directories are missing - - Column two will be one of these values: - * M : Modified : modified, added, deleted or missing files - * : blank / space : clean - * - : dash : no meaningful state, for empty repositories - - Column three will be one of these values: - * o : optional : optionally repository - * : blank / space : required repository - - * Detailed git or svn status of the repositories managed by checkout_externals: - - $ cd ${SRC_ROOT} - $ ./manage_externals/checkout_externals --status --verbose - -# Externals description file - - The externals description contains a list of the external - repositories that are used and their version control locations. The - file format is the standard ini/cfg configuration file format. Each - external is defined by a section containing the component name in - square brackets: - - * name (string) : component name, e.g. [cime], [cism], etc. - - Each section has the following keyword-value pairs: - - * required (boolean) : whether the component is a required checkout, - 'true' or 'false'. - - * local_path (string) : component path *relative* to where - checkout_externals is called. - - * protoctol (string) : version control protocol that is used to - manage the component. Valid values are 'git', 'svn', - 'externals_only'. - - Switching an external between different protocols is not - supported, e.g. from svn to git. To switch protocols, you need to - manually move the old working copy to a new location. - - Note: 'externals_only' will only process the external's own - external description file without trying to manage a repository - for the component. This is used for retreiving externals for - standalone components like cam and clm. If the source root of the - externals_only component is the same as the main source root, then - the local path must be set to '.', the unix current working - directory, e. g. 'local_path = .' - - * repo_url (string) : URL for the repository location, examples: - * https://svn-ccsm-models.cgd.ucar.edu/glc - * git@github.com:esmci/cime.git - * /path/to/local/repository - * . - - NOTE: To operate on only the local clone and and ignore remote - repositories, set the url to '.' (the unix current path), - i.e. 'repo_url = .' . This can be used to checkout a local branch - instead of the upstream branch. - - If a repo url is determined to be a local path (not a network url) - then user expansion, e.g. ~/, and environment variable expansion, - e.g. $HOME or $REPO_ROOT, will be performed. - - Relative paths are difficult to get correct, especially for mixed - use repos. It is advised that local paths expand to absolute paths. - If relative paths are used, they should be relative to one level - above local_path. If local path is 'src/foo', the the relative url - should be relative to 'src'. - - * tag (string) : tag to checkout - - * hash (string) : the git hash to checkout. Only applies to git - repositories. - - * branch (string) : branch to checkout from the specified - repository. Specifying a branch on a remote repository means that - checkout_externals will checkout the version of the branch in the remote, - not the the version in the local repository (if it exists). - - Note: one and only one of tag, branch hash must be supplied. - - * externals (string) : used to make manage_externals aware of - sub-externals required by an external. This is a relative path to - the external's root directory. For example, the main externals - description has an external checkout out at 'src/useful_library'. - useful_library requires additional externals to be complete. - Those additional externals are managed from the source root by the - externals description file pointed 'useful_library/sub-xternals.cfg', - Then the main 'externals' field in the top level repo should point to - 'sub-externals.cfg'. - - * Lines begining with '#' or ';' are comments and will be ignored. - -# Obtaining this tool, reporting issues, etc. - - The master repository for manage_externals is - https://github.com/ESMCI/manage_externals. Any issues with this tool - should be reported there. diff --git a/manage_externals/README_FIRST b/manage_externals/README_FIRST deleted file mode 100644 index c8a47d780..000000000 --- a/manage_externals/README_FIRST +++ /dev/null @@ -1,54 +0,0 @@ -CESM is comprised of a number of different components that are -developed and managed independently. Each component may have -additional 'external' dependancies and optional parts that are also -developed and managed independently. - -The checkout_externals.py tool manages retreiving and updating the -components and their externals so you have a complete set of source -files for the model. - -checkout_externals.py relies on a model description file that -describes what components are needed, where to find them and where to -put them in the source tree. The default file is called "CESM.xml" -regardless of whether you are checking out CESM or a standalone -component. - -checkout_externals requires access to git and svn repositories that -require authentication. checkout_externals may pass through -authentication requests, but it will not cache them for you. For the -best and most robust user experience, you should have svn and git -working without password authentication. See: - - https://help.github.com/articles/connecting-to-github-with-ssh/ - - ?svn ref? - -NOTE: checkout_externals.py *MUST* be run from the root of the source -tree it is managing. For example, if you cloned CLM with: - - $ git clone git@github.com/ncar/clm clm-dev - -Then the root of the source tree is /path/to/cesm-dev. If you obtained -CLM via an svn checkout of CESM and you need to checkout the CLM -externals, then the root of the source tree for CLM is: - - /path/to/cesm-dev/components/clm - -The root of the source tree will be referred to as ${SRC_ROOT} below. - -To get started quickly, checkout all required components from the -default model description file: - - $ cd ${SRC_ROOT} - $ ./checkout_cesm/checkout_externals.py - -For additional information about using checkout model, please see: - - ${SRC_ROOT}/checkout_cesm/README - -or run: - - $ cd ${SRC_ROOT} - $ ./checkout_cesm/checkout_externals.py --help - - diff --git a/manage_externals/checkout_externals b/manage_externals/checkout_externals deleted file mode 100755 index a0698baef..000000000 --- a/manage_externals/checkout_externals +++ /dev/null @@ -1,36 +0,0 @@ -#!/usr/bin/env python - -"""Main driver wrapper around the manic/checkout utility. - -Tool to assemble external respositories represented in an externals -description file. - -""" -from __future__ import absolute_import -from __future__ import unicode_literals -from __future__ import print_function - -import sys -import traceback - -import manic - -if sys.hexversion < 0x02070000: - print(70 * '*') - print('ERROR: {0} requires python >= 2.7.x. '.format(sys.argv[0])) - print('It appears that you are running python {0}'.format( - '.'.join(str(x) for x in sys.version_info[0:3]))) - print(70 * '*') - sys.exit(1) - - -if __name__ == '__main__': - ARGS = manic.checkout.commandline_arguments() - try: - RET_STATUS, _ = manic.checkout.main(ARGS) - sys.exit(RET_STATUS) - except Exception as error: # pylint: disable=broad-except - manic.printlog(str(error)) - if ARGS.backtrace: - traceback.print_exc() - sys.exit(1) diff --git a/manage_externals/manic/__init__.py b/manage_externals/manic/__init__.py deleted file mode 100644 index 11badedd3..000000000 --- a/manage_externals/manic/__init__.py +++ /dev/null @@ -1,9 +0,0 @@ -"""Public API for the manage_externals library -""" - -from manic import checkout -from manic.utils import printlog - -__all__ = [ - 'checkout', 'printlog', -] diff --git a/manage_externals/manic/checkout.py b/manage_externals/manic/checkout.py deleted file mode 100755 index afd3a2788..000000000 --- a/manage_externals/manic/checkout.py +++ /dev/null @@ -1,409 +0,0 @@ -#!/usr/bin/env python - -""" -Tool to assemble repositories represented in a model-description file. - -If loaded as a module (e.g., in a component's buildcpp), it can be used -to check the validity of existing subdirectories and load missing sources. -""" -from __future__ import absolute_import -from __future__ import unicode_literals -from __future__ import print_function - -import argparse -import logging -import os -import os.path -import sys - -from manic.externals_description import create_externals_description -from manic.externals_description import read_externals_description_file -from manic.externals_status import check_safe_to_update_repos -from manic.sourcetree import SourceTree -from manic.utils import printlog, fatal_error -from manic.global_constants import VERSION_SEPERATOR, LOG_FILE_NAME - -if sys.hexversion < 0x02070000: - print(70 * '*') - print('ERROR: {0} requires python >= 2.7.x. '.format(sys.argv[0])) - print('It appears that you are running python {0}'.format( - VERSION_SEPERATOR.join(str(x) for x in sys.version_info[0:3]))) - print(70 * '*') - sys.exit(1) - - -# --------------------------------------------------------------------- -# -# User input -# -# --------------------------------------------------------------------- -def commandline_arguments(args=None): - """Process the command line arguments - - Params: args - optional args. Should only be used during systems - testing. - - Returns: processed command line arguments - """ - description = ''' - -%(prog)s manages checking out groups of externals from revision -control based on an externals description file. By default only the -required externals are checkout out. - -Running %(prog)s without the '--status' option will always attempt to -synchronize the working copy to exactly match the externals description. -''' - - epilog = ''' -``` -NOTE: %(prog)s *MUST* be run from the root of the source tree it -is managing. For example, if you cloned a repository with: - - $ git clone git@github.com/{SOME_ORG}/some-project some-project-dev - -Then the root of the source tree is /path/to/some-project-dev. If you -obtained a sub-project via a checkout of another project: - - $ git clone git@github.com/{SOME_ORG}/some-project some-project-dev - -and you need to checkout the sub-project externals, then the root of the -source tree remains /path/to/some-project-dev. Do *NOT* run %(prog)s -from within /path/to/some-project-dev/sub-project - -The root of the source tree will be referred to as `${SRC_ROOT}` below. - - -# Supported workflows - - * Checkout all required components from the default externals - description file: - - $ cd ${SRC_ROOT} - $ ./manage_externals/%(prog)s - - * To update all required components to the current values in the - externals description file, re-run %(prog)s: - - $ cd ${SRC_ROOT} - $ ./manage_externals/%(prog)s - - If there are *any* modifications to *any* working copy according - to the git or svn 'status' command, %(prog)s - will not update any external repositories. Modifications - include: modified files, added files, removed files, or missing - files. - - To avoid this safety check, edit the externals description file - and comment out the modified external block. - - * Checkout all required components from a user specified externals - description file: - - $ cd ${SRC_ROOT} - $ ./manage_externals/%(prog)s --externals my-externals.cfg - - * Status summary of the repositories managed by %(prog)s: - - $ cd ${SRC_ROOT} - $ ./manage_externals/%(prog)s --status - - ./cime - s ./components/cism - ./components/mosart - e-o ./components/rtm - M ./src/fates - e-o ./tools/PTCLM - - - where: - * column one indicates the status of the repository in relation - to the externals description file. - * column two indicates whether the working copy has modified files. - * column three shows how the repository is managed, optional or required - - Column one will be one of these values: - * s : out-of-sync : repository is checked out at a different commit - compared with the externals description - * e : empty : directory does not exist - %(prog)s has not been run - * ? : unknown : directory exists but .git or .svn directories are missing - - Column two will be one of these values: - * M : Modified : modified, added, deleted or missing files - * : blank / space : clean - * - : dash : no meaningful state, for empty repositories - - Column three will be one of these values: - * o : optional : optionally repository - * : blank / space : required repository - - * Detailed git or svn status of the repositories managed by %(prog)s: - - $ cd ${SRC_ROOT} - $ ./manage_externals/%(prog)s --status --verbose - -# Externals description file - - The externals description contains a list of the external - repositories that are used and their version control locations. The - file format is the standard ini/cfg configuration file format. Each - external is defined by a section containing the component name in - square brackets: - - * name (string) : component name, e.g. [cime], [cism], etc. - - Each section has the following keyword-value pairs: - - * required (boolean) : whether the component is a required checkout, - 'true' or 'false'. - - * local_path (string) : component path *relative* to where - %(prog)s is called. - - * protoctol (string) : version control protocol that is used to - manage the component. Valid values are 'git', 'svn', - 'externals_only'. - - Switching an external between different protocols is not - supported, e.g. from svn to git. To switch protocols, you need to - manually move the old working copy to a new location. - - Note: 'externals_only' will only process the external's own - external description file without trying to manage a repository - for the component. This is used for retrieving externals for - standalone components like cam and ctsm which also serve as - sub-components within a larger project. If the source root of the - externals_only component is the same as the main source root, then - the local path must be set to '.', the unix current working - directory, e. g. 'local_path = .' - - * repo_url (string) : URL for the repository location, examples: - * https://svn-ccsm-models.cgd.ucar.edu/glc - * git@github.com:esmci/cime.git - * /path/to/local/repository - * . - - NOTE: To operate on only the local clone and and ignore remote - repositories, set the url to '.' (the unix current path), - i.e. 'repo_url = .' . This can be used to checkout a local branch - instead of the upstream branch. - - If a repo url is determined to be a local path (not a network url) - then user expansion, e.g. ~/, and environment variable expansion, - e.g. $HOME or $REPO_ROOT, will be performed. - - Relative paths are difficult to get correct, especially for mixed - use repos. It is advised that local paths expand to absolute paths. - If relative paths are used, they should be relative to one level - above local_path. If local path is 'src/foo', the the relative url - should be relative to 'src'. - - * tag (string) : tag to checkout - - * hash (string) : the git hash to checkout. Only applies to git - repositories. - - * branch (string) : branch to checkout from the specified - repository. Specifying a branch on a remote repository means that - %(prog)s will checkout the version of the branch in the remote, - not the the version in the local repository (if it exists). - - Note: one and only one of tag, branch hash must be supplied. - - * externals (string) : used to make manage_externals aware of - sub-externals required by an external. This is a relative path to - the external's root directory. For example, if LIBX is often used - as a sub-external, it might have an externals file (for its - externals) called Externals_LIBX.cfg. To use libx as a standalone - checkout, it would have another file, Externals.cfg with the - following entry: - - [ libx ] - local_path = . - protocol = externals_only - externals = Externals_LIBX.cfg - required = True - - Now, %(prog)s will process Externals.cfg and also process - Externals_LIBX.cfg as if it was a sub-external. - - * Lines beginning with '#' or ';' are comments and will be ignored. - -# Obtaining this tool, reporting issues, etc. - - The master repository for manage_externals is - https://github.com/ESMCI/manage_externals. Any issues with this tool - should be reported there. - -# Troubleshooting - -Operations performed by manage_externals utilities are explicit and -data driven. %(prog)s will always attempt to make the working copy -*exactly* match what is in the externals file when modifying the -working copy of a repository. - -If %(prog)s is not doing what you expected, double check the contents -of the externals description file or examine the output of -./manage_externals/%(prog)s --status - -''' - - parser = argparse.ArgumentParser( - description=description, epilog=epilog, - formatter_class=argparse.RawDescriptionHelpFormatter) - - # - # user options - # - parser.add_argument("components", nargs="*", - help="Specific component(s) to checkout. By default, " - "all required externals are checked out.") - - parser.add_argument('-e', '--externals', nargs='?', - default='Externals.cfg', - help='The externals description filename. ' - 'Default: %(default)s.') - - parser.add_argument('-o', '--optional', action='store_true', default=False, - help='By default only the required externals ' - 'are checked out. This flag will also checkout the ' - 'optional externals.') - - parser.add_argument('-S', '--status', action='store_true', default=False, - help='Output the status of the repositories managed by ' - '%(prog)s. By default only summary information ' - 'is provided. Use the verbose option to see details.') - - parser.add_argument('-v', '--verbose', action='count', default=0, - help='Output additional information to ' - 'the screen and log file. This flag can be ' - 'used up to two times, increasing the ' - 'verbosity level each time.') - - parser.add_argument('--svn-ignore-ancestry', action='store_true', default=False, - help='By default, subversion will abort if a component is ' - 'already checked out and there is no common ancestry with ' - 'the new URL. This flag passes the "--ignore-ancestry" flag ' - 'to the svn switch call. (This is not recommended unless ' - 'you are sure about what you are doing.)') - - # - # developer options - # - parser.add_argument('--backtrace', action='store_true', - help='DEVELOPER: show exception backtraces as extra ' - 'debugging output') - - parser.add_argument('-d', '--debug', action='store_true', default=False, - help='DEVELOPER: output additional debugging ' - 'information to the screen and log file.') - - logging_group = parser.add_mutually_exclusive_group() - - logging_group.add_argument('--logging', dest='do_logging', - action='store_true', - help='DEVELOPER: enable logging.') - logging_group.add_argument('--no-logging', dest='do_logging', - action='store_false', default=False, - help='DEVELOPER: disable logging ' - '(this is the default)') - - if args: - options = parser.parse_args(args) - else: - options = parser.parse_args() - return options - - -# --------------------------------------------------------------------- -# -# main -# -# --------------------------------------------------------------------- -def main(args): - """ - Function to call when module is called from the command line. - Parse externals file and load required repositories or all repositories if - the --all option is passed. - - Returns a tuple (overall_status, tree_status). overall_status is 0 - on success, non-zero on failure. tree_status gives the full status - *before* executing the checkout command - i.e., the status that it - used to determine if it's safe to proceed with the checkout. - """ - if args.do_logging: - logging.basicConfig(filename=LOG_FILE_NAME, - format='%(levelname)s : %(asctime)s : %(message)s', - datefmt='%Y-%m-%d %H:%M:%S', - level=logging.DEBUG) - - program_name = os.path.basename(sys.argv[0]) - logging.info('Beginning of %s', program_name) - - load_all = False - if args.optional: - load_all = True - - root_dir = os.path.abspath(os.getcwd()) - external_data = read_externals_description_file(root_dir, args.externals) - external = create_externals_description( - external_data, components=args.components) - - for comp in args.components: - if comp not in external.keys(): - fatal_error( - "No component {} found in {}".format( - comp, args.externals)) - - source_tree = SourceTree(root_dir, external, svn_ignore_ancestry=args.svn_ignore_ancestry) - printlog('Checking status of externals: ', end='') - tree_status = source_tree.status() - printlog('') - - if args.status: - # user requested status-only - for comp in sorted(tree_status.keys()): - tree_status[comp].log_status_message(args.verbose) - else: - # checkout / update the external repositories. - safe_to_update = check_safe_to_update_repos(tree_status) - if not safe_to_update: - # print status - for comp in sorted(tree_status.keys()): - tree_status[comp].log_status_message(args.verbose) - # exit gracefully - msg = """The external repositories labeled with 'M' above are not in a clean state. - -The following are two options for how to proceed: - -(1) Go into each external that is not in a clean state and issue either - an 'svn status' or a 'git status' command. Either revert or commit - your changes so that all externals are in a clean state. (Note, - though, that it is okay to have untracked files in your working - directory.) Then rerun {program_name}. - -(2) Alternatively, you do not have to rely on {program_name}. Instead, you - can manually update out-of-sync externals (labeled with 's' above) - as described in the configuration file {config_file}. - - -The external repositories labeled with '?' above are not under version -control using the expected protocol. If you are sure you want to switch -protocols, and you don't have any work you need to save from this -directory, then run "rm -rf [directory]" before re-running the -checkout_externals tool. -""".format(program_name=program_name, config_file=args.externals) - - printlog('-' * 70) - printlog(msg) - printlog('-' * 70) - else: - if not args.components: - source_tree.checkout(args.verbose, load_all) - for comp in args.components: - source_tree.checkout(args.verbose, load_all, load_comp=comp) - printlog('') - - logging.info('%s completed without exceptions.', program_name) - # NOTE(bja, 2017-11) tree status is used by the systems tests - return 0, tree_status diff --git a/manage_externals/manic/externals_description.py b/manage_externals/manic/externals_description.py deleted file mode 100644 index 3cebf525b..000000000 --- a/manage_externals/manic/externals_description.py +++ /dev/null @@ -1,790 +0,0 @@ -#!/usr/bin/env python - -"""Model description - -Model description is the representation of the various externals -included in the model. It processes in input data structure, and -converts it into a standard interface that is used by the rest of the -system. - -To maintain backward compatibility, externals description files should -follow semantic versioning rules, http://semver.org/ - - - -""" -from __future__ import absolute_import -from __future__ import unicode_literals -from __future__ import print_function - -import logging -import os -import os.path -import re - -# ConfigParser in python2 was renamed to configparser in python3. -# In python2, ConfigParser returns byte strings, str, instead of unicode. -# We need unicode to be compatible with xml and json parser and python3. -try: - # python2 - from ConfigParser import SafeConfigParser as config_parser - from ConfigParser import MissingSectionHeaderError - from ConfigParser import NoSectionError, NoOptionError - - USE_PYTHON2 = True - - def config_string_cleaner(text): - """convert strings into unicode - """ - return text.decode('utf-8') -except ImportError: - # python3 - from configparser import ConfigParser as config_parser - from configparser import MissingSectionHeaderError - from configparser import NoSectionError, NoOptionError - - USE_PYTHON2 = False - - def config_string_cleaner(text): - """Python3 already uses unicode strings, so just return the string - without modification. - - """ - return text - -from .utils import printlog, fatal_error, str_to_bool, expand_local_url -from .utils import execute_subprocess -from .global_constants import EMPTY_STR, PPRINTER, VERSION_SEPERATOR - -# -# Globals -# -DESCRIPTION_SECTION = 'externals_description' -VERSION_ITEM = 'schema_version' - - -def read_externals_description_file(root_dir, file_name): - """Read a file containing an externals description and - create its internal representation. - - """ - root_dir = os.path.abspath(root_dir) - msg = 'In directory : {0}'.format(root_dir) - logging.info(msg) - printlog('Processing externals description file : {0}'.format(file_name)) - - file_path = os.path.join(root_dir, file_name) - if not os.path.exists(file_name): - if file_name.lower() == "none": - msg = ('INTERNAL ERROR: Attempt to read externals file ' - 'from {0} when not configured'.format(file_path)) - else: - msg = ('ERROR: Model description file, "{0}", does not ' - 'exist at path:\n {1}\nDid you run from the root of ' - 'the source tree?'.format(file_name, file_path)) - - fatal_error(msg) - - externals_description = None - if file_name == ExternalsDescription.GIT_SUBMODULES_FILENAME: - externals_description = read_gitmodules_file(root_dir, file_name) - else: - try: - config = config_parser() - config.read(file_path) - externals_description = config - except MissingSectionHeaderError: - # not a cfg file - pass - - if externals_description is None: - msg = 'Unknown file format!' - fatal_error(msg) - - return externals_description - -class LstripReader(object): - "LstripReader formats .gitmodules files to be acceptable for configparser" - def __init__(self, filename): - with open(filename, 'r') as infile: - lines = infile.readlines() - self._lines = list() - self._num_lines = len(lines) - self._index = 0 - for line in lines: - self._lines.append(line.lstrip()) - - def readlines(self): - """Return all the lines from this object's file""" - return self._lines - - def readline(self, size=-1): - """Format and return the next line or raise StopIteration""" - try: - line = self.next() - except StopIteration: - line = '' - - if (size > 0) and (len(line) < size): - return line[0:size] - - return line - - def __iter__(self): - """Begin an iteration""" - self._index = 0 - return self - - def next(self): - """Return the next line or raise StopIteration""" - if self._index >= self._num_lines: - raise StopIteration - - self._index = self._index + 1 - return self._lines[self._index - 1] - - def __next__(self): - return self.next() - -def git_submodule_status(repo_dir): - """Run the git submodule status command to obtain submodule hashes. - """ - # This function is here instead of GitRepository to avoid a dependency loop - cwd = os.getcwd() - os.chdir(repo_dir) - cmd = ['git', 'submodule', 'status'] - git_output = execute_subprocess(cmd, output_to_caller=True) - submodules = {} - submods = git_output.split('\n') - for submod in submods: - if submod: - status = submod[0] - items = submod[1:].split(' ') - if len(items) > 2: - tag = items[2] - else: - tag = None - - submodules[items[1]] = {'hash':items[0], 'status':status, 'tag':tag} - - os.chdir(cwd) - return submodules - -def parse_submodules_desc_section(section_items, file_path): - """Find the path and url for this submodule description""" - path = None - url = None - for item in section_items: - name = item[0].strip().lower() - if name == 'path': - path = item[1].strip() - elif name == 'url': - url = item[1].strip() - else: - msg = 'WARNING: Ignoring unknown {} property, in {}' - msg = msg.format(item[0], file_path) # fool pylint - logging.warning(msg) - - return path, url - -def read_gitmodules_file(root_dir, file_name): - # pylint: disable=deprecated-method - # Disabling this check because the method is only used for python2 - """Read a .gitmodules file and convert it to be compatible with an - externals description. - """ - root_dir = os.path.abspath(root_dir) - msg = 'In directory : {0}'.format(root_dir) - logging.info(msg) - printlog('Processing submodules description file : {0}'.format(file_name)) - - file_path = os.path.join(root_dir, file_name) - if not os.path.exists(file_name): - msg = ('ERROR: submodules description file, "{0}", does not ' - 'exist at path:\n {1}'.format(file_name, file_path)) - fatal_error(msg) - - submodules_description = None - externals_description = None - try: - config = config_parser() - if USE_PYTHON2: - config.readfp(LstripReader(file_path), filename=file_name) - else: - config.read_file(LstripReader(file_path), source=file_name) - - submodules_description = config - except MissingSectionHeaderError: - # not a cfg file - pass - - if submodules_description is None: - msg = 'Unknown file format!' - fatal_error(msg) - else: - # Convert the submodules description to an externals description - externals_description = config_parser() - # We need to grab all the commit hashes for this repo - submods = git_submodule_status(root_dir) - for section in submodules_description.sections(): - if section[0:9] == 'submodule': - sec_name = section[9:].strip(' "') - externals_description.add_section(sec_name) - section_items = submodules_description.items(section) - path, url = parse_submodules_desc_section(section_items, - file_path) - - if path is None: - msg = 'Submodule {} missing path'.format(sec_name) - fatal_error(msg) - - if url is None: - msg = 'Submodule {} missing url'.format(sec_name) - fatal_error(msg) - - externals_description.set(sec_name, - ExternalsDescription.PATH, path) - externals_description.set(sec_name, - ExternalsDescription.PROTOCOL, 'git') - externals_description.set(sec_name, - ExternalsDescription.REPO_URL, url) - externals_description.set(sec_name, - ExternalsDescription.REQUIRED, 'True') - git_hash = submods[sec_name]['hash'] - externals_description.set(sec_name, - ExternalsDescription.HASH, git_hash) - - # Required items - externals_description.add_section(DESCRIPTION_SECTION) - externals_description.set(DESCRIPTION_SECTION, VERSION_ITEM, '1.0.0') - - return externals_description - -def create_externals_description( - model_data, model_format='cfg', components=None, parent_repo=None): - """Create the a externals description object from the provided data - """ - externals_description = None - if model_format == 'dict': - externals_description = ExternalsDescriptionDict( - model_data, components=components) - elif model_format == 'cfg': - major, _, _ = get_cfg_schema_version(model_data) - if major == 1: - externals_description = ExternalsDescriptionConfigV1( - model_data, components=components, parent_repo=parent_repo) - else: - msg = ('Externals description file has unsupported schema ' - 'version "{0}".'.format(major)) - fatal_error(msg) - else: - msg = 'Unknown model data format "{0}"'.format(model_format) - fatal_error(msg) - return externals_description - - -def get_cfg_schema_version(model_cfg): - """Extract the major, minor, patch version of the config file schema - - Params: - model_cfg - config parser object containing the externas description data - - Returns: - major = integer major version - minor = integer minor version - patch = integer patch version - """ - semver_str = '' - try: - semver_str = model_cfg.get(DESCRIPTION_SECTION, VERSION_ITEM) - except (NoSectionError, NoOptionError): - msg = ('externals description file must have the required ' - 'section: "{0}" and item "{1}"'.format(DESCRIPTION_SECTION, - VERSION_ITEM)) - fatal_error(msg) - - # NOTE(bja, 2017-11) Assume we don't care about the - # build/pre-release metadata for now! - version_list = re.split(r'[-+]', semver_str) - version_str = version_list[0] - version = version_str.split(VERSION_SEPERATOR) - try: - major = int(version[0].strip()) - minor = int(version[1].strip()) - patch = int(version[2].strip()) - except ValueError: - msg = ('Config file schema version must have integer digits for ' - 'major, minor and patch versions. ' - 'Received "{0}"'.format(version_str)) - fatal_error(msg) - return major, minor, patch - - -class ExternalsDescription(dict): - """Base externals description class that is independent of the user input - format. Different input formats can all be converted to this - representation to provide a consistent represtentation for the - rest of the objects in the system. - - NOTE(bja, 2018-03): do NOT define _schema_major etc at the class - level in the base class. The nested/recursive nature of externals - means different schema versions may be present in a single run! - - All inheriting classes must overwrite: - self._schema_major and self._input_major - self._schema_minor and self._input_minor - self._schema_patch and self._input_patch - - where _schema_x is the supported schema, _input_x is the user - input value. - - """ - # keywords defining the interface into the externals description data - EXTERNALS = 'externals' - BRANCH = 'branch' - SUBMODULE = 'from_submodule' - HASH = 'hash' - NAME = 'name' - PATH = 'local_path' - PROTOCOL = 'protocol' - REPO = 'repo' - REPO_URL = 'repo_url' - REQUIRED = 'required' - TAG = 'tag' - - PROTOCOL_EXTERNALS_ONLY = 'externals_only' - PROTOCOL_GIT = 'git' - PROTOCOL_SVN = 'svn' - GIT_SUBMODULES_FILENAME = '.gitmodules' - KNOWN_PRROTOCOLS = [PROTOCOL_GIT, PROTOCOL_SVN, PROTOCOL_EXTERNALS_ONLY] - - # v1 xml keywords - _V1_TREE_PATH = 'TREE_PATH' - _V1_ROOT = 'ROOT' - _V1_TAG = 'TAG' - _V1_BRANCH = 'BRANCH' - _V1_REQ_SOURCE = 'REQ_SOURCE' - - _source_schema = {REQUIRED: True, - PATH: 'string', - EXTERNALS: 'string', - SUBMODULE : True, - REPO: {PROTOCOL: 'string', - REPO_URL: 'string', - TAG: 'string', - BRANCH: 'string', - HASH: 'string', - } - } - - def __init__(self, parent_repo=None): - """Convert the xml into a standardized dict that can be used to - construct the source objects - - """ - dict.__init__(self) - - self._schema_major = None - self._schema_minor = None - self._schema_patch = None - self._input_major = None - self._input_minor = None - self._input_patch = None - self._parent_repo = parent_repo - - def _verify_schema_version(self): - """Use semantic versioning rules to verify we can process this schema. - - """ - known = '{0}.{1}.{2}'.format(self._schema_major, - self._schema_minor, - self._schema_patch) - received = '{0}.{1}.{2}'.format(self._input_major, - self._input_minor, - self._input_patch) - - if self._input_major != self._schema_major: - # should never get here, the factory should handle this correctly! - msg = ('DEV_ERROR: version "{0}" parser received ' - 'version "{1}" input.'.format(known, received)) - fatal_error(msg) - - if self._input_minor > self._schema_minor: - msg = ('Incompatible schema version:\n' - ' User supplied schema version "{0}" is too new."\n' - ' Can only process version "{1}" files and ' - 'older.'.format(received, known)) - fatal_error(msg) - - if self._input_patch > self._schema_patch: - # NOTE(bja, 2018-03) ignoring for now... Not clear what - # conditions the test is needed. - pass - - def _check_user_input(self): - """Run a series of checks to attempt to validate the user input and - detect errors as soon as possible. - - NOTE(bja, 2018-03) These checks are called *after* the file is - read. That means the schema check can not occur here. - - Note: the order is important. check_optional will create - optional with null data. run check_data first to ensure - required data was provided correctly by the user. - - """ - self._check_data() - self._check_optional() - self._validate() - - def _check_data(self): - # pylint: disable=too-many-branches,too-many-statements - """Check user supplied data is valid where possible. - """ - for ext_name in self.keys(): - if (self[ext_name][self.REPO][self.PROTOCOL] - not in self.KNOWN_PRROTOCOLS): - msg = 'Unknown repository protocol "{0}" in "{1}".'.format( - self[ext_name][self.REPO][self.PROTOCOL], ext_name) - fatal_error(msg) - - if (self[ext_name][self.REPO][self.PROTOCOL] == - self.PROTOCOL_SVN): - if self.HASH in self[ext_name][self.REPO]: - msg = ('In repo description for "{0}". svn repositories ' - 'may not include the "hash" keyword.'.format( - ext_name)) - fatal_error(msg) - - if ((self[ext_name][self.REPO][self.PROTOCOL] != self.PROTOCOL_GIT) - and (self.SUBMODULE in self[ext_name])): - msg = ('self.SUBMODULE is only supported with {0} protocol, ' - '"{1}" is defined as an {2} repository') - fatal_error(msg.format(self.PROTOCOL_GIT, ext_name, - self[ext_name][self.REPO][self.PROTOCOL])) - - if (self[ext_name][self.REPO][self.PROTOCOL] != - self.PROTOCOL_EXTERNALS_ONLY): - ref_count = 0 - found_refs = '' - if self.TAG in self[ext_name][self.REPO]: - ref_count += 1 - found_refs = '"{0} = {1}", {2}'.format( - self.TAG, self[ext_name][self.REPO][self.TAG], - found_refs) - if self.BRANCH in self[ext_name][self.REPO]: - ref_count += 1 - found_refs = '"{0} = {1}", {2}'.format( - self.BRANCH, self[ext_name][self.REPO][self.BRANCH], - found_refs) - if self.HASH in self[ext_name][self.REPO]: - ref_count += 1 - found_refs = '"{0} = {1}", {2}'.format( - self.HASH, self[ext_name][self.REPO][self.HASH], - found_refs) - if (self.SUBMODULE in self[ext_name] and - self[ext_name][self.SUBMODULE]): - ref_count += 1 - found_refs = '"{0} = {1}", {2}'.format( - self.SUBMODULE, - self[ext_name][self.SUBMODULE], found_refs) - - if ref_count > 1: - msg = 'Model description is over specified! ' - if self.SUBMODULE in self[ext_name]: - msg += ('from_submodule is not compatible with ' - '"tag", "branch", or "hash" ') - else: - msg += (' Only one of "tag", "branch", or "hash" ' - 'may be specified ') - - msg += 'for repo description of "{0}".'.format(ext_name) - msg = '{0}\nFound: {1}'.format(msg, found_refs) - fatal_error(msg) - elif ref_count < 1: - msg = ('Model description is under specified! One of ' - '"tag", "branch", or "hash" must be specified for ' - 'repo description of "{0}"'.format(ext_name)) - fatal_error(msg) - - if (self.REPO_URL not in self[ext_name][self.REPO] and - (self.SUBMODULE not in self[ext_name] or - not self[ext_name][self.SUBMODULE])): - msg = ('Model description is under specified! Must have ' - '"repo_url" in repo ' - 'description for "{0}"'.format(ext_name)) - fatal_error(msg) - - if (self.SUBMODULE in self[ext_name] and - self[ext_name][self.SUBMODULE]): - if self.REPO_URL in self[ext_name][self.REPO]: - msg = ('Model description is over specified! ' - 'from_submodule keyword is not compatible ' - 'with {0} keyword for'.format(self.REPO_URL)) - msg = '{0} repo description of "{1}"'.format(msg, - ext_name) - fatal_error(msg) - - if self.PATH in self[ext_name]: - msg = ('Model description is over specified! ' - 'from_submodule keyword is not compatible with ' - '{0} keyword for'.format(self.PATH)) - msg = '{0} repo description of "{1}"'.format(msg, - ext_name) - fatal_error(msg) - - if self.REPO_URL in self[ext_name][self.REPO]: - url = expand_local_url( - self[ext_name][self.REPO][self.REPO_URL], ext_name) - self[ext_name][self.REPO][self.REPO_URL] = url - - def _check_optional(self): - # pylint: disable=too-many-branches - """Some fields like externals, repo:tag repo:branch are - (conditionally) optional. We don't want the user to be - required to enter them in every externals description file, but - still want to validate the input. Check conditions and add - default values if appropriate. - - """ - submod_desc = None # Only load submodules info once - for field in self: - # truely optional - if self.EXTERNALS not in self[field]: - self[field][self.EXTERNALS] = EMPTY_STR - - # git and svn repos must tags and branches for validation purposes. - if self.TAG not in self[field][self.REPO]: - self[field][self.REPO][self.TAG] = EMPTY_STR - if self.BRANCH not in self[field][self.REPO]: - self[field][self.REPO][self.BRANCH] = EMPTY_STR - if self.HASH not in self[field][self.REPO]: - self[field][self.REPO][self.HASH] = EMPTY_STR - if self.REPO_URL not in self[field][self.REPO]: - self[field][self.REPO][self.REPO_URL] = EMPTY_STR - - # from_submodule has a complex relationship with other fields - if self.SUBMODULE in self[field]: - # User wants to use submodule information, is it available? - if self._parent_repo is None: - # No parent == no submodule information - PPRINTER.pprint(self[field]) - msg = 'No parent submodule for "{0}"'.format(field) - fatal_error(msg) - elif self._parent_repo.protocol() != self.PROTOCOL_GIT: - PPRINTER.pprint(self[field]) - msg = 'Parent protocol, "{0}", does not support submodules' - fatal_error(msg.format(self._parent_repo.protocol())) - else: - args = self._repo_config_from_submodule(field, submod_desc) - repo_url, repo_path, ref_hash, submod_desc = args - - if repo_url is None: - msg = ('Cannot checkout "{0}" as a submodule, ' - 'repo not found in {1} file') - fatal_error(msg.format(field, - self.GIT_SUBMODULES_FILENAME)) - # Fill in submodule fields - self[field][self.REPO][self.REPO_URL] = repo_url - self[field][self.REPO][self.HASH] = ref_hash - self[field][self.PATH] = repo_path - - if self[field][self.SUBMODULE]: - # We should get everything from the parent submodule - # configuration. - pass - # No else (from _submodule = False is the default) - else: - # Add the default value (not using submodule information) - self[field][self.SUBMODULE] = False - - def _repo_config_from_submodule(self, field, submod_desc): - """Find the external config information for a repository from - its submodule configuration information. - """ - if submod_desc is None: - repo_path = os.getcwd() # Is this always correct? - submod_file = self._parent_repo.submodules_file(repo_path=repo_path) - if submod_file is None: - msg = ('Cannot checkout "{0}" from submodule information\n' - ' Parent repo, "{1}" does not have submodules') - fatal_error(msg.format(field, self._parent_repo.name())) - - submod_file = read_gitmodules_file(repo_path, submod_file) - submod_desc = create_externals_description(submod_file) - - # Can we find our external? - repo_url = None - repo_path = None - ref_hash = None - for ext_field in submod_desc: - if field == ext_field: - ext = submod_desc[ext_field] - repo_url = ext[self.REPO][self.REPO_URL] - repo_path = ext[self.PATH] - ref_hash = ext[self.REPO][self.HASH] - break - - return repo_url, repo_path, ref_hash, submod_desc - - def _validate(self): - """Validate that the parsed externals description contains all necessary - fields. - - """ - def print_compare_difference(data_a, data_b, loc_a, loc_b): - """Look through the data structures and print the differences. - - """ - for item in data_a: - if item in data_b: - if not isinstance(data_b[item], type(data_a[item])): - printlog(" {item}: {loc} = {val} ({val_type})".format( - item=item, loc=loc_a, val=data_a[item], - val_type=type(data_a[item]))) - printlog(" {item} {loc} = {val} ({val_type})".format( - item=' ' * len(item), loc=loc_b, val=data_b[item], - val_type=type(data_b[item]))) - else: - printlog(" {item}: {loc} = {val} ({val_type})".format( - item=item, loc=loc_a, val=data_a[item], - val_type=type(data_a[item]))) - printlog(" {item} {loc} missing".format( - item=' ' * len(item), loc=loc_b)) - - def validate_data_struct(schema, data): - """Compare a data structure against a schema and validate all required - fields are present. - - """ - is_valid = False - in_ref = True - valid = True - if isinstance(schema, dict) and isinstance(data, dict): - # Both are dicts, recursively verify that all fields - # in schema are present in the data. - for key in schema: - in_ref = in_ref and (key in data) - if in_ref: - valid = valid and ( - validate_data_struct(schema[key], data[key])) - - is_valid = in_ref and valid - else: - # non-recursive structure. verify data and schema have - # the same type. - is_valid = isinstance(data, type(schema)) - - if not is_valid: - printlog(" Unmatched schema and input:") - if isinstance(schema, dict): - print_compare_difference(schema, data, 'schema', 'input') - print_compare_difference(data, schema, 'input', 'schema') - else: - printlog(" schema = {0} ({1})".format( - schema, type(schema))) - printlog(" input = {0} ({1})".format(data, type(data))) - - return is_valid - - for field in self: - valid = validate_data_struct(self._source_schema, self[field]) - if not valid: - PPRINTER.pprint(self._source_schema) - PPRINTER.pprint(self[field]) - msg = 'ERROR: source for "{0}" did not validate'.format(field) - fatal_error(msg) - - -class ExternalsDescriptionDict(ExternalsDescription): - """Create a externals description object from a dictionary using the API - representations. Primarily used to simplify creating model - description files for unit testing. - - """ - - def __init__(self, model_data, components=None): - """Parse a native dictionary into a externals description. - """ - ExternalsDescription.__init__(self) - self._schema_major = 1 - self._schema_minor = 0 - self._schema_patch = 0 - self._input_major = 1 - self._input_minor = 0 - self._input_patch = 0 - self._verify_schema_version() - if components: - for key in model_data.items(): - if key not in components: - del model_data[key] - - self.update(model_data) - self._check_user_input() - - -class ExternalsDescriptionConfigV1(ExternalsDescription): - """Create a externals description object from a config_parser object, - schema version 1. - - """ - - def __init__(self, model_data, components=None, parent_repo=None): - """Convert the config data into a standardized dict that can be used to - construct the source objects - - """ - ExternalsDescription.__init__(self, parent_repo=parent_repo) - self._schema_major = 1 - self._schema_minor = 1 - self._schema_patch = 0 - self._input_major, self._input_minor, self._input_patch = \ - get_cfg_schema_version(model_data) - self._verify_schema_version() - self._remove_metadata(model_data) - self._parse_cfg(model_data, components=components) - self._check_user_input() - - @staticmethod - def _remove_metadata(model_data): - """Remove the metadata section from the model configuration file so - that it is simpler to look through the file and construct the - externals description. - - """ - model_data.remove_section(DESCRIPTION_SECTION) - - def _parse_cfg(self, cfg_data, components=None): - """Parse a config_parser object into a externals description. - """ - def list_to_dict(input_list, convert_to_lower_case=True): - """Convert a list of key-value pairs into a dictionary. - """ - output_dict = {} - for item in input_list: - key = config_string_cleaner(item[0].strip()) - value = config_string_cleaner(item[1].strip()) - if convert_to_lower_case: - key = key.lower() - output_dict[key] = value - return output_dict - - for section in cfg_data.sections(): - name = config_string_cleaner(section.lower().strip()) - if components and name not in components: - continue - self[name] = {} - self[name].update(list_to_dict(cfg_data.items(section))) - self[name][self.REPO] = {} - loop_keys = self[name].copy().keys() - for item in loop_keys: - if item in self._source_schema: - if isinstance(self._source_schema[item], bool): - self[name][item] = str_to_bool(self[name][item]) - elif item in self._source_schema[self.REPO]: - self[name][self.REPO][item] = self[name][item] - del self[name][item] - else: - msg = ('Invalid input: "{sect}" contains unknown ' - 'item "{item}".'.format(sect=name, item=item)) - fatal_error(msg) diff --git a/manage_externals/manic/externals_status.py b/manage_externals/manic/externals_status.py deleted file mode 100644 index d3d238f28..000000000 --- a/manage_externals/manic/externals_status.py +++ /dev/null @@ -1,164 +0,0 @@ -"""ExternalStatus - -Class to store status and state information about repositories and -create a string representation. - -""" -from __future__ import absolute_import -from __future__ import unicode_literals -from __future__ import print_function - -from .global_constants import EMPTY_STR -from .utils import printlog, indent_string -from .global_constants import VERBOSITY_VERBOSE, VERBOSITY_DUMP - - -class ExternalStatus(object): - """Class to represent the status of a given source repository or tree. - - Individual repositories determine their own status in the - Repository objects. This object is just resposible for storing the - information and passing it up to a higher level for reporting or - global decisions. - - There are two states of concern: - - * If the repository is in-sync with the externals description file. - - * If the repostiory working copy is clean and there are no pending - transactions (e.g. add, remove, rename, untracked files). - - """ - DEFAULT = '-' - UNKNOWN = '?' - EMPTY = 'e' - MODEL_MODIFIED = 's' # a.k.a. out-of-sync - DIRTY = 'M' - - STATUS_OK = ' ' - STATUS_ERROR = '!' - - # source types - OPTIONAL = 'o' - STANDALONE = 's' - MANAGED = ' ' - - def __init__(self): - self.sync_state = self.DEFAULT - self.clean_state = self.DEFAULT - self.source_type = self.DEFAULT - self.path = EMPTY_STR - self.current_version = EMPTY_STR - self.expected_version = EMPTY_STR - self.status_output = EMPTY_STR - - def log_status_message(self, verbosity): - """Write status message to the screen and log file - """ - self._default_status_message() - if verbosity >= VERBOSITY_VERBOSE: - self._verbose_status_message() - if verbosity >= VERBOSITY_DUMP: - self._dump_status_message() - - def _default_status_message(self): - """Return the default terse status message string - """ - msg = '{sync}{clean}{src_type} {path}'.format( - sync=self.sync_state, clean=self.clean_state, - src_type=self.source_type, path=self.path) - printlog(msg) - - def _verbose_status_message(self): - """Return the verbose status message string - """ - clean_str = self.DEFAULT - if self.clean_state == self.STATUS_OK: - clean_str = 'clean sandbox' - elif self.clean_state == self.DIRTY: - clean_str = 'modified sandbox' - - sync_str = 'on {0}'.format(self.current_version) - if self.sync_state != self.STATUS_OK: - sync_str = '{current} --> {expected}'.format( - current=self.current_version, expected=self.expected_version) - msg = ' {clean}, {sync}'.format(clean=clean_str, sync=sync_str) - printlog(msg) - - def _dump_status_message(self): - """Return the dump status message string - """ - msg = indent_string(self.status_output, 12) - printlog(msg) - - def safe_to_update(self): - """Report if it is safe to update a repository. Safe is defined as: - - * If a repository is empty, it is safe to update. - - * If a repository exists and has a clean working copy state - with no pending transactions. - - """ - safe_to_update = False - repo_exists = self.exists() - if not repo_exists: - safe_to_update = True - else: - # If the repo exists, it must be in ok or modified - # sync_state. Any other sync_state at this point - # represents a logic error that should have been handled - # before now! - sync_safe = ((self.sync_state == ExternalStatus.STATUS_OK) or - (self.sync_state == ExternalStatus.MODEL_MODIFIED)) - if sync_safe: - # The clean_state must be STATUS_OK to update. Otherwise we - # are dirty or there was a missed error previously. - if self.clean_state == ExternalStatus.STATUS_OK: - safe_to_update = True - return safe_to_update - - def exists(self): - """Determine if the repo exists. This is indicated by: - - * sync_state is not EMPTY - - * if the sync_state is empty, then the valid states for - clean_state are default, empty or unknown. Anything else - and there was probably an internal logic error. - - NOTE(bja, 2017-10) For the moment we are considering a - sync_state of default or unknown to require user intervention, - but we may want to relax this convention. This is probably a - result of a network error or internal logic error but more - testing is needed. - - """ - is_empty = (self.sync_state == ExternalStatus.EMPTY) - clean_valid = ((self.clean_state == ExternalStatus.DEFAULT) or - (self.clean_state == ExternalStatus.EMPTY) or - (self.clean_state == ExternalStatus.UNKNOWN)) - - if is_empty and clean_valid: - exists = False - else: - exists = True - return exists - - -def check_safe_to_update_repos(tree_status): - """Check if *ALL* repositories are in a safe state to update. We don't - want to do a partial update of the repositories then die, leaving - the model in an inconsistent state. - - Note: if there is an update to do, the repositories will by - definiation be out of synce with the externals description, so we - can't use that as criteria for updating. - - """ - safe_to_update = True - for comp in tree_status: - stat = tree_status[comp] - safe_to_update &= stat.safe_to_update() - - return safe_to_update diff --git a/manage_externals/manic/global_constants.py b/manage_externals/manic/global_constants.py deleted file mode 100644 index 0e91cffc9..000000000 --- a/manage_externals/manic/global_constants.py +++ /dev/null @@ -1,18 +0,0 @@ -"""Globals shared across modules -""" - -from __future__ import absolute_import -from __future__ import unicode_literals -from __future__ import print_function - -import pprint - -EMPTY_STR = '' -LOCAL_PATH_INDICATOR = '.' -VERSION_SEPERATOR = '.' -LOG_FILE_NAME = 'manage_externals.log' -PPRINTER = pprint.PrettyPrinter(indent=4) - -VERBOSITY_DEFAULT = 0 -VERBOSITY_VERBOSE = 1 -VERBOSITY_DUMP = 2 diff --git a/manage_externals/manic/repository.py b/manage_externals/manic/repository.py deleted file mode 100644 index 4488c6be9..000000000 --- a/manage_externals/manic/repository.py +++ /dev/null @@ -1,97 +0,0 @@ -"""Base class representation of a repository -""" - -from .externals_description import ExternalsDescription -from .utils import fatal_error -from .global_constants import EMPTY_STR - - -class Repository(object): - """ - Class to represent and operate on a repository description. - """ - - def __init__(self, component_name, repo): - """ - Parse repo externals description - """ - self._name = component_name - self._protocol = repo[ExternalsDescription.PROTOCOL] - self._tag = repo[ExternalsDescription.TAG] - self._branch = repo[ExternalsDescription.BRANCH] - self._hash = repo[ExternalsDescription.HASH] - self._url = repo[ExternalsDescription.REPO_URL] - - if self._url is EMPTY_STR: - fatal_error('repo must have a URL') - - if ((self._tag is EMPTY_STR) and (self._branch is EMPTY_STR) and - (self._hash is EMPTY_STR)): - fatal_error('{0} repo must have a branch, tag or hash element') - - ref_count = 0 - if self._tag is not EMPTY_STR: - ref_count += 1 - if self._branch is not EMPTY_STR: - ref_count += 1 - if self._hash is not EMPTY_STR: - ref_count += 1 - if ref_count != 1: - fatal_error('repo {0} must have exactly one of ' - 'tag, branch or hash.'.format(self._name)) - - def checkout(self, base_dir_path, repo_dir_name, verbosity, recursive): # pylint: disable=unused-argument - """ - If the repo destination directory exists, ensure it is correct (from - correct URL, correct branch or tag), and possibly update the source. - If the repo destination directory does not exist, checkout the correce - branch or tag. - NB: is include as an argument for compatibility with - git functionality (repository_git.py) - """ - msg = ('DEV_ERROR: checkout method must be implemented in all ' - 'repository classes! {0}'.format(self.__class__.__name__)) - fatal_error(msg) - - def status(self, stat, repo_dir_path): # pylint: disable=unused-argument - """Report the status of the repo - - """ - msg = ('DEV_ERROR: status method must be implemented in all ' - 'repository classes! {0}'.format(self.__class__.__name__)) - fatal_error(msg) - - def submodules_file(self, repo_path=None): - # pylint: disable=no-self-use,unused-argument - """Stub for use by non-git VC systems""" - return None - - def url(self): - """Public access of repo url. - """ - return self._url - - def tag(self): - """Public access of repo tag - """ - return self._tag - - def branch(self): - """Public access of repo branch. - """ - return self._branch - - def hash(self): - """Public access of repo hash. - """ - return self._hash - - def name(self): - """Public access of repo name. - """ - return self._name - - def protocol(self): - """Public access of repo protocol. - """ - return self._protocol diff --git a/manage_externals/manic/repository_factory.py b/manage_externals/manic/repository_factory.py deleted file mode 100644 index 80a92a9d8..000000000 --- a/manage_externals/manic/repository_factory.py +++ /dev/null @@ -1,29 +0,0 @@ -"""Factory for creating and initializing the appropriate repository class -""" - -from __future__ import absolute_import -from __future__ import unicode_literals -from __future__ import print_function - -from .repository_git import GitRepository -from .repository_svn import SvnRepository -from .externals_description import ExternalsDescription -from .utils import fatal_error - - -def create_repository(component_name, repo_info, svn_ignore_ancestry=False): - """Determine what type of repository we have, i.e. git or svn, and - create the appropriate object. - - """ - protocol = repo_info[ExternalsDescription.PROTOCOL].lower() - if protocol == 'git': - repo = GitRepository(component_name, repo_info) - elif protocol == 'svn': - repo = SvnRepository(component_name, repo_info, ignore_ancestry=svn_ignore_ancestry) - elif protocol == 'externals_only': - repo = None - else: - msg = 'Unknown repo protocol "{0}"'.format(protocol) - fatal_error(msg) - return repo diff --git a/manage_externals/manic/repository_git.py b/manage_externals/manic/repository_git.py deleted file mode 100644 index c0e64eb55..000000000 --- a/manage_externals/manic/repository_git.py +++ /dev/null @@ -1,790 +0,0 @@ -"""Class for interacting with git repositories -""" - -from __future__ import absolute_import -from __future__ import unicode_literals -from __future__ import print_function - -import copy -import os - -from .global_constants import EMPTY_STR, LOCAL_PATH_INDICATOR -from .global_constants import VERBOSITY_VERBOSE -from .repository import Repository -from .externals_status import ExternalStatus -from .externals_description import ExternalsDescription, git_submodule_status -from .utils import expand_local_url, split_remote_url, is_remote_url -from .utils import fatal_error, printlog -from .utils import execute_subprocess - - -class GitRepository(Repository): - """Class to represent and operate on a repository description. - - For testing purpose, all system calls to git should: - - * be isolated in separate functions with no application logic - * of the form: - - cmd = ['git', ...] - - value = execute_subprocess(cmd, output_to_caller={T|F}, - status_to_caller={T|F}) - - return value - * be static methods (not rely on self) - * name as _git_subcommand_args(user_args) - - This convention allows easy unit testing of the repository logic - by mocking the specific calls to return predefined results. - - """ - - def __init__(self, component_name, repo): - """ - Parse repo (a XML element). - """ - Repository.__init__(self, component_name, repo) - self._gitmodules = None - self._submods = None - - # ---------------------------------------------------------------- - # - # Public API, defined by Repository - # - # ---------------------------------------------------------------- - def checkout(self, base_dir_path, repo_dir_name, verbosity, recursive): - """ - If the repo destination directory exists, ensure it is correct (from - correct URL, correct branch or tag), and possibly update the source. - If the repo destination directory does not exist, checkout the correct - branch or tag. - """ - repo_dir_path = os.path.join(base_dir_path, repo_dir_name) - repo_dir_exists = os.path.exists(repo_dir_path) - if (repo_dir_exists and not os.listdir( - repo_dir_path)) or not repo_dir_exists: - self._clone_repo(base_dir_path, repo_dir_name, verbosity) - self._checkout_ref(repo_dir_path, verbosity, recursive) - gmpath = os.path.join(repo_dir_path, - ExternalsDescription.GIT_SUBMODULES_FILENAME) - if os.path.exists(gmpath): - self._gitmodules = gmpath - self._submods = git_submodule_status(repo_dir_path) - else: - self._gitmodules = None - self._submods = None - - def status(self, stat, repo_dir_path): - """ - If the repo destination directory exists, ensure it is correct (from - correct URL, correct branch or tag), and possibly update the source. - If the repo destination directory does not exist, checkout the correct - branch or tag. - """ - self._check_sync(stat, repo_dir_path) - if os.path.exists(repo_dir_path): - self._status_summary(stat, repo_dir_path) - - def submodules_file(self, repo_path=None): - if repo_path is not None: - gmpath = os.path.join(repo_path, - ExternalsDescription.GIT_SUBMODULES_FILENAME) - if os.path.exists(gmpath): - self._gitmodules = gmpath - self._submods = git_submodule_status(repo_path) - - return self._gitmodules - - # ---------------------------------------------------------------- - # - # Internal work functions - # - # ---------------------------------------------------------------- - def _clone_repo(self, base_dir_path, repo_dir_name, verbosity): - """Prepare to execute the clone by managing directory location - """ - cwd = os.getcwd() - os.chdir(base_dir_path) - self._git_clone(self._url, repo_dir_name, verbosity) - os.chdir(cwd) - - def _current_ref(self): - """Determine the *name* associated with HEAD. - - If we're on a branch, then returns the branch name; otherwise, - if we're on a tag, then returns the tag name; otherwise, returns - the current hash. Returns an empty string if no reference can be - determined (e.g., if we're not actually in a git repository). - """ - ref_found = False - - # If we're on a branch, then use that as the current ref - branch_found, branch_name = self._git_current_branch() - if branch_found: - current_ref = branch_name - ref_found = True - - if not ref_found: - # Otherwise, if we're exactly at a tag, use that as the - # current ref - tag_found, tag_name = self._git_current_tag() - if tag_found: - current_ref = tag_name - ref_found = True - - if not ref_found: - # Otherwise, use current hash as the current ref - hash_found, hash_name = self._git_current_hash() - if hash_found: - current_ref = hash_name - ref_found = True - - if not ref_found: - # If we still can't find a ref, return empty string. This - # can happen if we're not actually in a git repo - current_ref = '' - - return current_ref - - def _check_sync(self, stat, repo_dir_path): - """Determine whether a git repository is in-sync with the model - description. - - Because repos can have multiple remotes, the only criteria is - whether the branch or tag is the same. - - """ - if not os.path.exists(repo_dir_path): - # NOTE(bja, 2017-10) condition should have been determined - # by _Source() object and should never be here! - stat.sync_state = ExternalStatus.STATUS_ERROR - else: - git_dir = os.path.join(repo_dir_path, '.git') - if not os.path.exists(git_dir): - # NOTE(bja, 2017-10) directory exists, but no git repo - # info.... Can't test with subprocess git command - # because git will move up directory tree until it - # finds the parent repo git dir! - stat.sync_state = ExternalStatus.UNKNOWN - else: - self._check_sync_logic(stat, repo_dir_path) - - def _check_sync_logic(self, stat, repo_dir_path): - """Compare the underlying hashes of the currently checkout ref and the - expected ref. - - Output: sets the sync_state as well as the current and - expected ref in the input status object. - - """ - def compare_refs(current_ref, expected_ref): - """Compare the current and expected ref. - - """ - if current_ref == expected_ref: - status = ExternalStatus.STATUS_OK - else: - status = ExternalStatus.MODEL_MODIFIED - return status - - cwd = os.getcwd() - os.chdir(repo_dir_path) - - # get the full hash of the current commit - _, current_ref = self._git_current_hash() - - if self._branch: - if self._url == LOCAL_PATH_INDICATOR: - expected_ref = self._branch - else: - remote_name = self._determine_remote_name() - if not remote_name: - # git doesn't know about this remote. by definition - # this is a modified state. - expected_ref = "unknown_remote/{0}".format(self._branch) - else: - expected_ref = "{0}/{1}".format(remote_name, self._branch) - elif self._hash: - expected_ref = self._hash - elif self._tag: - expected_ref = self._tag - else: - msg = 'In repo "{0}": none of branch, hash or tag are set'.format( - self._name) - fatal_error(msg) - - # record the *names* of the current and expected branches - stat.current_version = self._current_ref() - stat.expected_version = copy.deepcopy(expected_ref) - - if current_ref == EMPTY_STR: - stat.sync_state = ExternalStatus.UNKNOWN - else: - # get the underlying hash of the expected ref - revparse_status, expected_ref_hash = self._git_revparse_commit( - expected_ref) - if revparse_status: - # We failed to get the hash associated with - # expected_ref. Maybe we should assign this to some special - # status, but for now we're just calling this out-of-sync to - # remain consistent with how this worked before. - stat.sync_state = ExternalStatus.MODEL_MODIFIED - else: - # compare the underlying hashes - stat.sync_state = compare_refs(current_ref, expected_ref_hash) - - os.chdir(cwd) - - def _determine_remote_name(self): - """Return the remote name. - - Note that this is for the *future* repo url and branch, not - the current working copy! - - """ - git_output = self._git_remote_verbose() - git_output = git_output.splitlines() - remote_name = '' - for line in git_output: - data = line.strip() - if not data: - continue - data = data.split() - name = data[0].strip() - url = data[1].strip() - if self._url == url: - remote_name = name - break - return remote_name - - def _create_remote_name(self): - """The url specified in the externals description file was not known - to git. We need to add it, which means adding a unique and - safe name.... - - The assigned name needs to be safe for git to use, e.g. can't - look like a path 'foo/bar' and work with both remote and local paths. - - Remote paths include but are not limited to: git, ssh, https, - github, gitlab, bitbucket, custom server, etc. - - Local paths can be relative or absolute. They may contain - shell variables, e.g. ${REPO_ROOT}/repo_name, or username - expansion, i.e. ~/ or ~someuser/. - - Relative paths must be at least one layer of redirection, i.e. - container/../ext_repo, but may be many layers deep, e.g. - container/../../../../../ext_repo - - NOTE(bja, 2017-11) - - The base name below may not be unique, for example if the - user has local paths like: - - /path/to/my/repos/nice_repo - /path/to/other/repos/nice_repo - - But the current implementation should cover most common - use cases for remotes and still provide usable names. - - """ - url = copy.deepcopy(self._url) - if is_remote_url(url): - url = split_remote_url(url) - else: - url = expand_local_url(url, self._name) - url = url.split('/') - repo_name = url[-1] - base_name = url[-2] - # repo name should nominally already be something that git can - # deal with. We need to remove other possibly troublesome - # punctuation, e.g. /, $, from the base name. - unsafe_characters = '!@#$%^&*()[]{}\\/,;~' - for unsafe in unsafe_characters: - base_name = base_name.replace(unsafe, '') - remote_name = "{0}_{1}".format(base_name, repo_name) - return remote_name - - def _checkout_ref(self, repo_dir, verbosity, submodules): - """Checkout the user supplied reference - if is True, recursively initialize and update - the repo's submodules - """ - # import pdb; pdb.set_trace() - cwd = os.getcwd() - os.chdir(repo_dir) - if self._url.strip() == LOCAL_PATH_INDICATOR: - self._checkout_local_ref(verbosity, submodules) - else: - self._checkout_external_ref(verbosity, submodules) - - os.chdir(cwd) - - def _checkout_local_ref(self, verbosity, submodules): - """Checkout the reference considering the local repo only. Do not - fetch any additional remotes or specify the remote when - checkout out the ref. - if is True, recursively initialize and update - the repo's submodules - """ - if self._tag: - ref = self._tag - elif self._branch: - ref = self._branch - else: - ref = self._hash - - self._check_for_valid_ref(ref) - self._git_checkout_ref(ref, verbosity, submodules) - - def _checkout_external_ref(self, verbosity, submodules): - """Checkout the reference from a remote repository - if is True, recursively initialize and update - the repo's submodules - """ - if self._tag: - ref = self._tag - elif self._branch: - ref = self._branch - else: - ref = self._hash - - remote_name = self._determine_remote_name() - if not remote_name: - remote_name = self._create_remote_name() - self._git_remote_add(remote_name, self._url) - self._git_fetch(remote_name) - - # NOTE(bja, 2018-03) we need to send separate ref and remote - # name to check_for_vaild_ref, but the combined name to - # checkout_ref! - self._check_for_valid_ref(ref, remote_name) - - if self._branch: - ref = '{0}/{1}'.format(remote_name, ref) - self._git_checkout_ref(ref, verbosity, submodules) - - def _check_for_valid_ref(self, ref, remote_name=None): - """Try some basic sanity checks on the user supplied reference so we - can provide a more useful error message than calledprocess - error... - - """ - is_tag = self._ref_is_tag(ref) - is_branch = self._ref_is_branch(ref, remote_name) - is_hash = self._ref_is_hash(ref) - - is_valid = is_tag or is_branch or is_hash - if not is_valid: - msg = ('In repo "{0}": reference "{1}" does not appear to be a ' - 'valid tag, branch or hash! Please verify the reference ' - 'name (e.g. spelling), is available from: {2} '.format( - self._name, ref, self._url)) - fatal_error(msg) - - if is_tag: - is_unique_tag, msg = self._is_unique_tag(ref, remote_name) - if not is_unique_tag: - msg = ('In repo "{0}": tag "{1}" {2}'.format( - self._name, self._tag, msg)) - fatal_error(msg) - - return is_valid - - def _is_unique_tag(self, ref, remote_name): - """Verify that a reference is a valid tag and is unique (not a branch) - - Tags may be tag names, or SHA id's. It is also possible that a - branch and tag have the some name. - - Note: values returned by git_showref_* and git_revparse are - shell return codes, which are zero for success, non-zero for - error! - - """ - is_tag = self._ref_is_tag(ref) - is_branch = self._ref_is_branch(ref, remote_name) - is_hash = self._ref_is_hash(ref) - - msg = '' - is_unique_tag = False - if is_tag and not is_branch: - # unique tag - msg = 'is ok' - is_unique_tag = True - elif is_tag and is_branch: - msg = ('is both a branch and a tag. git may checkout the branch ' - 'instead of the tag depending on your version of git.') - is_unique_tag = False - elif not is_tag and is_branch: - msg = ('is a branch, and not a tag. If you intended to checkout ' - 'a branch, please change the externals description to be ' - 'a branch. If you intended to checkout a tag, it does not ' - 'exist. Please check the name.') - is_unique_tag = False - else: # not is_tag and not is_branch: - if is_hash: - # probably a sha1 or HEAD, etc, we call it a tag - msg = 'is ok' - is_unique_tag = True - else: - # undetermined state. - msg = ('does not appear to be a valid tag, branch or hash! ' - 'Please check the name and repository.') - is_unique_tag = False - - return is_unique_tag, msg - - def _ref_is_tag(self, ref): - """Verify that a reference is a valid tag according to git. - - Note: values returned by git_showref_* and git_revparse are - shell return codes, which are zero for success, non-zero for - error! - """ - is_tag = False - value = self._git_showref_tag(ref) - if value == 0: - is_tag = True - return is_tag - - def _ref_is_branch(self, ref, remote_name=None): - """Verify if a ref is any kind of branch (local, tracked remote, - untracked remote). - - """ - local_branch = False - remote_branch = False - if remote_name: - remote_branch = self._ref_is_remote_branch(ref, remote_name) - local_branch = self._ref_is_local_branch(ref) - - is_branch = False - if local_branch or remote_branch: - is_branch = True - return is_branch - - def _ref_is_local_branch(self, ref): - """Verify that a reference is a valid branch according to git. - - show-ref branch returns local branches that have been - previously checked out. It will not necessarily pick up - untracked remote branches. - - Note: values returned by git_showref_* and git_revparse are - shell return codes, which are zero for success, non-zero for - error! - - """ - is_branch = False - value = self._git_showref_branch(ref) - if value == 0: - is_branch = True - return is_branch - - def _ref_is_remote_branch(self, ref, remote_name): - """Verify that a reference is a valid branch according to git. - - show-ref branch returns local branches that have been - previously checked out. It will not necessarily pick up - untracked remote branches. - - Note: values returned by git_showref_* and git_revparse are - shell return codes, which are zero for success, non-zero for - error! - - """ - is_branch = False - value = self._git_lsremote_branch(ref, remote_name) - if value == 0: - is_branch = True - return is_branch - - def _ref_is_commit(self, ref): - """Verify that a reference is a valid commit according to git. - - This could be a tag, branch, sha1 id, HEAD and potentially others... - - Note: values returned by git_showref_* and git_revparse are - shell return codes, which are zero for success, non-zero for - error! - """ - is_commit = False - value, _ = self._git_revparse_commit(ref) - if value == 0: - is_commit = True - return is_commit - - def _ref_is_hash(self, ref): - """Verify that a reference is a valid hash according to git. - - Git doesn't seem to provide an exact way to determine if user - supplied reference is an actual hash. So we verify that the - ref is a valid commit and return the underlying commit - hash. Then check that the commit hash begins with the user - supplied string. - - Note: values returned by git_showref_* and git_revparse are - shell return codes, which are zero for success, non-zero for - error! - - """ - is_hash = False - status, git_output = self._git_revparse_commit(ref) - if status == 0: - if git_output.strip().startswith(ref): - is_hash = True - return is_hash - - def _status_summary(self, stat, repo_dir_path): - """Determine the clean/dirty status of a git repository - - """ - cwd = os.getcwd() - os.chdir(repo_dir_path) - git_output = self._git_status_porcelain_v1z() - is_dirty = self._status_v1z_is_dirty(git_output) - if is_dirty: - stat.clean_state = ExternalStatus.DIRTY - else: - stat.clean_state = ExternalStatus.STATUS_OK - - # Now save the verbose status output incase the user wants to - # see it. - stat.status_output = self._git_status_verbose() - os.chdir(cwd) - - @staticmethod - def _status_v1z_is_dirty(git_output): - """Parse the git status output from --porcelain=v1 -z and determine if - the repo status is clean or dirty. Dirty means: - - * modified files - * missing files - * added files - * removed - * renamed - * unmerged - - Whether untracked files are considered depends on how the status - command was run (i.e., whether it was run with the '-u' option). - - NOTE: Based on the above definition, the porcelain status - should be an empty string to be considered 'clean'. Of course - this assumes we only get an empty string from an status - command on a clean checkout, and not some error - condition... Could alse use 'git diff --quiet'. - - """ - is_dirty = False - if git_output: - is_dirty = True - return is_dirty - - # ---------------------------------------------------------------- - # - # system call to git for information gathering - # - # ---------------------------------------------------------------- - @staticmethod - def _git_current_hash(): - """Return the full hash of the currently checked-out version. - - Returns a tuple, (hash_found, hash), where hash_found is a - logical specifying whether a hash was found for HEAD (False - could mean we're not in a git repository at all). (If hash_found - is False, then hash is ''.) - """ - status, git_output = GitRepository._git_revparse_commit("HEAD") - hash_found = not status - if not hash_found: - git_output = '' - return hash_found, git_output - - @staticmethod - def _git_current_branch(): - """Determines the name of the current branch. - - Returns a tuple, (branch_found, branch_name), where branch_found - is a logical specifying whether a branch name was found for - HEAD. (If branch_found is False, then branch_name is ''.) - """ - cmd = ['git', 'symbolic-ref', '--short', '-q', 'HEAD'] - status, git_output = execute_subprocess(cmd, - output_to_caller=True, - status_to_caller=True) - branch_found = not status - if branch_found: - git_output = git_output.strip() - else: - git_output = '' - return branch_found, git_output - - @staticmethod - def _git_current_tag(): - """Determines the name tag corresponding to HEAD (if any). - - Returns a tuple, (tag_found, tag_name), where tag_found is a - logical specifying whether we found a tag name corresponding to - HEAD. (If tag_found is False, then tag_name is ''.) - """ - # git describe --exact-match --tags HEAD - cmd = ['git', 'describe', '--exact-match', '--tags', 'HEAD'] - status, git_output = execute_subprocess(cmd, - output_to_caller=True, - status_to_caller=True) - tag_found = not status - if tag_found: - git_output = git_output.strip() - else: - git_output = '' - return tag_found, git_output - - @staticmethod - def _git_showref_tag(ref): - """Run git show-ref check if the user supplied ref is a tag. - - could also use git rev-parse --quiet --verify tagname^{tag} - """ - cmd = ['git', 'show-ref', '--quiet', '--verify', - 'refs/tags/{0}'.format(ref), ] - status = execute_subprocess(cmd, status_to_caller=True) - return status - - @staticmethod - def _git_showref_branch(ref): - """Run git show-ref check if the user supplied ref is a local or - tracked remote branch. - - """ - cmd = ['git', 'show-ref', '--quiet', '--verify', - 'refs/heads/{0}'.format(ref), ] - status = execute_subprocess(cmd, status_to_caller=True) - return status - - @staticmethod - def _git_lsremote_branch(ref, remote_name): - """Run git ls-remote to check if the user supplied ref is a remote - branch that is not being tracked - - """ - cmd = ['git', 'ls-remote', '--exit-code', '--heads', - remote_name, ref, ] - status = execute_subprocess(cmd, status_to_caller=True) - return status - - @staticmethod - def _git_revparse_commit(ref): - """Run git rev-parse to detect if a reference is a SHA, HEAD or other - valid commit. - - """ - cmd = ['git', 'rev-parse', '--quiet', '--verify', - '{0}^{1}'.format(ref, '{commit}'), ] - status, git_output = execute_subprocess(cmd, status_to_caller=True, - output_to_caller=True) - git_output = git_output.strip() - return status, git_output - - @staticmethod - def _git_status_porcelain_v1z(): - """Run git status to obtain repository information. - - This is run with '--untracked=no' to ignore untracked files. - - The machine-portable format that is guaranteed not to change - between git versions or *user configuration*. - - """ - cmd = ['git', 'status', '--untracked-files=no', '--porcelain', '-z'] - git_output = execute_subprocess(cmd, output_to_caller=True) - return git_output - - @staticmethod - def _git_status_verbose(): - """Run the git status command to obtain repository information. - """ - cmd = ['git', 'status'] - git_output = execute_subprocess(cmd, output_to_caller=True) - return git_output - - @staticmethod - def _git_remote_verbose(): - """Run the git remote command to obtain repository information. - """ - cmd = ['git', 'remote', '--verbose'] - git_output = execute_subprocess(cmd, output_to_caller=True) - return git_output - - @staticmethod - def has_submodules(repo_dir_path=None): - """Return True iff the repository at (or the current - directory if is None) has a '.gitmodules' file - """ - if repo_dir_path is None: - fname = ExternalsDescription.GIT_SUBMODULES_FILENAME - else: - fname = os.path.join(repo_dir_path, - ExternalsDescription.GIT_SUBMODULES_FILENAME) - - return os.path.exists(fname) - - # ---------------------------------------------------------------- - # - # system call to git for sideffects modifying the working tree - # - # ---------------------------------------------------------------- - @staticmethod - def _git_clone(url, repo_dir_name, verbosity): - """Run git clone for the side effect of creating a repository. - """ - cmd = ['git', 'clone', '--quiet'] - subcmd = None - - cmd.extend([url, repo_dir_name]) - if verbosity >= VERBOSITY_VERBOSE: - printlog(' {0}'.format(' '.join(cmd))) - execute_subprocess(cmd) - if subcmd is not None: - os.chdir(repo_dir_name) - execute_subprocess(subcmd) - - @staticmethod - def _git_remote_add(name, url): - """Run the git remote command for the side effect of adding a remote - """ - cmd = ['git', 'remote', 'add', name, url] - execute_subprocess(cmd) - - @staticmethod - def _git_fetch(remote_name): - """Run the git fetch command for the side effect of updating the repo - """ - cmd = ['git', 'fetch', '--quiet', '--tags', remote_name] - execute_subprocess(cmd) - - @staticmethod - def _git_checkout_ref(ref, verbosity, submodules): - """Run the git checkout command for the side effect of updating the repo - - Param: ref is a reference to a local or remote object in the - form 'origin/my_feature', or 'tag1'. - - """ - cmd = ['git', 'checkout', '--quiet', ref] - if verbosity >= VERBOSITY_VERBOSE: - printlog(' {0}'.format(' '.join(cmd))) - execute_subprocess(cmd) - if submodules: - GitRepository._git_update_submodules(verbosity) - - @staticmethod - def _git_update_submodules(verbosity): - """Run git submodule update for the side effect of updating this - repo's submodules. - """ - # First, verify that we have a .gitmodules file - if os.path.exists(ExternalsDescription.GIT_SUBMODULES_FILENAME): - cmd = ['git', 'submodule', 'update', '--init', '--recursive'] - if verbosity >= VERBOSITY_VERBOSE: - printlog(' {0}'.format(' '.join(cmd))) - - execute_subprocess(cmd) diff --git a/manage_externals/manic/repository_svn.py b/manage_externals/manic/repository_svn.py deleted file mode 100644 index 2f0d4d848..000000000 --- a/manage_externals/manic/repository_svn.py +++ /dev/null @@ -1,284 +0,0 @@ -"""Class for interacting with svn repositories -""" - -from __future__ import absolute_import -from __future__ import unicode_literals -from __future__ import print_function - -import os -import re -import xml.etree.ElementTree as ET - -from .global_constants import EMPTY_STR, VERBOSITY_VERBOSE -from .repository import Repository -from .externals_status import ExternalStatus -from .utils import fatal_error, indent_string, printlog -from .utils import execute_subprocess - - -class SvnRepository(Repository): - """ - Class to represent and operate on a repository description. - - For testing purpose, all system calls to svn should: - - * be isolated in separate functions with no application logic - * of the form: - - cmd = ['svn', ...] - - value = execute_subprocess(cmd, output_to_caller={T|F}, - status_to_caller={T|F}) - - return value - * be static methods (not rely on self) - * name as _svn_subcommand_args(user_args) - - This convention allows easy unit testing of the repository logic - by mocking the specific calls to return predefined results. - - """ - RE_URLLINE = re.compile(r'^URL:') - - def __init__(self, component_name, repo, ignore_ancestry=False): - """ - Parse repo (a XML element). - """ - Repository.__init__(self, component_name, repo) - self._ignore_ancestry = ignore_ancestry - if self._branch: - self._url = os.path.join(self._url, self._branch) - elif self._tag: - self._url = os.path.join(self._url, self._tag) - else: - msg = "DEV_ERROR in svn repository. Shouldn't be here!" - fatal_error(msg) - - # ---------------------------------------------------------------- - # - # Public API, defined by Repository - # - # ---------------------------------------------------------------- - def checkout(self, base_dir_path, repo_dir_name, verbosity, recursive): # pylint: disable=unused-argument - """Checkout or update the working copy - - If the repo destination directory exists, switch the sandbox to - match the externals description. - - If the repo destination directory does not exist, checkout the - correct branch or tag. - NB: is include as an argument for compatibility with - git functionality (repository_git.py) - - """ - repo_dir_path = os.path.join(base_dir_path, repo_dir_name) - if os.path.exists(repo_dir_path): - cwd = os.getcwd() - os.chdir(repo_dir_path) - self._svn_switch(self._url, self._ignore_ancestry, verbosity) - # svn switch can lead to a conflict state, but it gives a - # return code of 0. So now we need to make sure that we're - # in a clean (non-conflict) state. - self._abort_if_dirty(repo_dir_path, - "Expected clean state following switch") - os.chdir(cwd) - else: - self._svn_checkout(self._url, repo_dir_path, verbosity) - - def status(self, stat, repo_dir_path): - """ - Check and report the status of the repository - """ - self._check_sync(stat, repo_dir_path) - if os.path.exists(repo_dir_path): - self._status_summary(stat, repo_dir_path) - - # ---------------------------------------------------------------- - # - # Internal work functions - # - # ---------------------------------------------------------------- - def _check_sync(self, stat, repo_dir_path): - """Check to see if repository directory exists and is at the expected - url. Return: status object - - """ - if not os.path.exists(repo_dir_path): - # NOTE(bja, 2017-10) this state should have been handled by - # the source object and we never get here! - stat.sync_state = ExternalStatus.STATUS_ERROR - else: - svn_output = self._svn_info(repo_dir_path) - if not svn_output: - # directory exists, but info returned nothing. .svn - # directory removed or incomplete checkout? - stat.sync_state = ExternalStatus.UNKNOWN - else: - stat.sync_state, stat.current_version = \ - self._check_url(svn_output, self._url) - stat.expected_version = '/'.join(self._url.split('/')[3:]) - - def _abort_if_dirty(self, repo_dir_path, message): - """Check if the repo is in a dirty state; if so, abort with a - helpful message. - - """ - - stat = ExternalStatus() - self._status_summary(stat, repo_dir_path) - if stat.clean_state != ExternalStatus.STATUS_OK: - status = self._svn_status_verbose(repo_dir_path) - status = indent_string(status, 4) - errmsg = """In directory - {cwd} - -svn status now shows: -{status} - -ERROR: {message} - -One possible cause of this problem is that there may have been untracked -files in your working directory that had the same name as tracked files -in the new revision. - -To recover: Clean up the above directory (resolving conflicts, etc.), -then rerun checkout_externals. -""".format(cwd=repo_dir_path, message=message, status=status) - - fatal_error(errmsg) - - @staticmethod - def _check_url(svn_output, expected_url): - """Determine the svn url from svn info output and return whether it - matches the expected value. - - """ - url = None - for line in svn_output.splitlines(): - if SvnRepository.RE_URLLINE.match(line): - url = line.split(': ')[1].strip() - break - if not url: - status = ExternalStatus.UNKNOWN - elif url == expected_url: - status = ExternalStatus.STATUS_OK - else: - status = ExternalStatus.MODEL_MODIFIED - - if url: - current_version = '/'.join(url.split('/')[3:]) - else: - current_version = EMPTY_STR - - return status, current_version - - def _status_summary(self, stat, repo_dir_path): - """Report whether the svn repository is in-sync with the model - description and whether the sandbox is clean or dirty. - - """ - svn_output = self._svn_status_xml(repo_dir_path) - is_dirty = self.xml_status_is_dirty(svn_output) - if is_dirty: - stat.clean_state = ExternalStatus.DIRTY - else: - stat.clean_state = ExternalStatus.STATUS_OK - - # Now save the verbose status output incase the user wants to - # see it. - stat.status_output = self._svn_status_verbose(repo_dir_path) - - @staticmethod - def xml_status_is_dirty(svn_output): - """Parse svn status xml output and determine if the working copy is - clean or dirty. Dirty is defined as: - - * modified files - * added files - * deleted files - * missing files - - Unversioned files do not affect the clean/dirty status. - - 'external' is also an acceptable state - - """ - # pylint: disable=invalid-name - SVN_EXTERNAL = 'external' - SVN_UNVERSIONED = 'unversioned' - # pylint: enable=invalid-name - - is_dirty = False - try: - xml_status = ET.fromstring(svn_output) - except BaseException: - fatal_error( - "SVN returned invalid XML message {}".format(svn_output)) - xml_target = xml_status.find('./target') - entries = xml_target.findall('./entry') - for entry in entries: - status = entry.find('./wc-status') - item = status.get('item') - if item == SVN_EXTERNAL: - continue - if item == SVN_UNVERSIONED: - continue - else: - is_dirty = True - break - return is_dirty - - # ---------------------------------------------------------------- - # - # system call to svn for information gathering - # - # ---------------------------------------------------------------- - @staticmethod - def _svn_info(repo_dir_path): - """Return results of svn info command - """ - cmd = ['svn', 'info', repo_dir_path] - output = execute_subprocess(cmd, output_to_caller=True) - return output - - @staticmethod - def _svn_status_verbose(repo_dir_path): - """capture the full svn status output - """ - cmd = ['svn', 'status', repo_dir_path] - svn_output = execute_subprocess(cmd, output_to_caller=True) - return svn_output - - @staticmethod - def _svn_status_xml(repo_dir_path): - """ - Get status of the subversion sandbox in repo_dir - """ - cmd = ['svn', 'status', '--xml', repo_dir_path] - svn_output = execute_subprocess(cmd, output_to_caller=True) - return svn_output - - # ---------------------------------------------------------------- - # - # system call to svn for sideffects modifying the working tree - # - # ---------------------------------------------------------------- - @staticmethod - def _svn_checkout(url, repo_dir_path, verbosity): - """ - Checkout a subversion repository (repo_url) to checkout_dir. - """ - cmd = ['svn', 'checkout', '--quiet', url, repo_dir_path] - if verbosity >= VERBOSITY_VERBOSE: - printlog(' {0}'.format(' '.join(cmd))) - execute_subprocess(cmd) - - @staticmethod - def _svn_switch(url, ignore_ancestry, verbosity): - """ - Switch branches for in an svn sandbox - """ - cmd = ['svn', 'switch', '--quiet'] - if ignore_ancestry: - cmd.append('--ignore-ancestry') - cmd.append(url) - if verbosity >= VERBOSITY_VERBOSE: - printlog(' {0}'.format(' '.join(cmd))) - execute_subprocess(cmd) diff --git a/manage_externals/manic/sourcetree.py b/manage_externals/manic/sourcetree.py deleted file mode 100644 index 83676b776..000000000 --- a/manage_externals/manic/sourcetree.py +++ /dev/null @@ -1,350 +0,0 @@ -""" - -FIXME(bja, 2017-11) External and SourceTree have a circular dependancy! -""" - -import errno -import logging -import os - -from .externals_description import ExternalsDescription -from .externals_description import read_externals_description_file -from .externals_description import create_externals_description -from .repository_factory import create_repository -from .repository_git import GitRepository -from .externals_status import ExternalStatus -from .utils import fatal_error, printlog -from .global_constants import EMPTY_STR, LOCAL_PATH_INDICATOR -from .global_constants import VERBOSITY_VERBOSE - -class _External(object): - """ - _External represents an external object inside a SourceTree - """ - - # pylint: disable=R0902 - - def __init__(self, root_dir, name, ext_description, svn_ignore_ancestry): - """Parse an external description file into a dictionary of externals. - - Input: - - root_dir : string - the root directory path where - 'local_path' is relative to. - - name : string - name of the ext_description object. may or may not - correspond to something in the path. - - ext_description : dict - source ExternalsDescription object - - svn_ignore_ancestry : bool - use --ignore-externals with svn switch - - """ - self._name = name - self._repo = None - self._externals = EMPTY_STR - self._externals_sourcetree = None - self._stat = ExternalStatus() - # Parse the sub-elements - - # _path : local path relative to the containing source tree - self._local_path = ext_description[ExternalsDescription.PATH] - # _repo_dir : full repository directory - repo_dir = os.path.join(root_dir, self._local_path) - self._repo_dir_path = os.path.abspath(repo_dir) - # _base_dir : base directory *containing* the repository - self._base_dir_path = os.path.dirname(self._repo_dir_path) - # repo_dir_name : base_dir_path + repo_dir_name = rep_dir_path - self._repo_dir_name = os.path.basename(self._repo_dir_path) - assert(os.path.join(self._base_dir_path, self._repo_dir_name) - == self._repo_dir_path) - - self._required = ext_description[ExternalsDescription.REQUIRED] - self._externals = ext_description[ExternalsDescription.EXTERNALS] - # Treat a .gitmodules file as a backup externals config - if not self._externals: - if GitRepository.has_submodules(self._repo_dir_path): - self._externals = ExternalsDescription.GIT_SUBMODULES_FILENAME - - repo = create_repository( - name, ext_description[ExternalsDescription.REPO], - svn_ignore_ancestry=svn_ignore_ancestry) - if repo: - self._repo = repo - - if self._externals and (self._externals.lower() != 'none'): - self._create_externals_sourcetree() - - def get_name(self): - """ - Return the external object's name - """ - return self._name - - def get_local_path(self): - """ - Return the external object's path - """ - return self._local_path - - def status(self): - """ - If the repo destination directory exists, ensure it is correct (from - correct URL, correct branch or tag), and possibly update the external. - If the repo destination directory does not exist, checkout the correce - branch or tag. - If load_all is True, also load all of the the externals sub-externals. - """ - - self._stat.path = self.get_local_path() - if not self._required: - self._stat.source_type = ExternalStatus.OPTIONAL - elif self._local_path == LOCAL_PATH_INDICATOR: - # LOCAL_PATH_INDICATOR, '.' paths, are standalone - # component directories that are not managed by - # checkout_externals. - self._stat.source_type = ExternalStatus.STANDALONE - else: - # managed by checkout_externals - self._stat.source_type = ExternalStatus.MANAGED - - ext_stats = {} - - if not os.path.exists(self._repo_dir_path): - self._stat.sync_state = ExternalStatus.EMPTY - msg = ('status check: repository directory for "{0}" does not ' - 'exist.'.format(self._name)) - logging.info(msg) - self._stat.current_version = 'not checked out' - # NOTE(bja, 2018-01) directory doesn't exist, so we cannot - # use repo to determine the expected version. We just take - # a best-guess based on the assumption that only tag or - # branch should be set, but not both. - if not self._repo: - self._stat.expected_version = 'unknown' - else: - self._stat.expected_version = self._repo.tag() + self._repo.branch() - else: - if self._repo: - self._repo.status(self._stat, self._repo_dir_path) - - if self._externals and self._externals_sourcetree: - # we expect externals and they exist - cwd = os.getcwd() - # SourceTree expects to be called from the correct - # root directory. - os.chdir(self._repo_dir_path) - ext_stats = self._externals_sourcetree.status(self._local_path) - os.chdir(cwd) - - all_stats = {} - # don't add the root component because we don't manage it - # and can't provide useful info about it. - if self._local_path != LOCAL_PATH_INDICATOR: - # store the stats under tha local_path, not comp name so - # it will be sorted correctly - all_stats[self._stat.path] = self._stat - - if ext_stats: - all_stats.update(ext_stats) - - return all_stats - - def checkout(self, verbosity, load_all): - """ - If the repo destination directory exists, ensure it is correct (from - correct URL, correct branch or tag), and possibly update the external. - If the repo destination directory does not exist, checkout the correct - branch or tag. - If load_all is True, also load all of the the externals sub-externals. - """ - if load_all: - pass - # Make sure we are in correct location - - if not os.path.exists(self._repo_dir_path): - # repository directory doesn't exist. Need to check it - # out, and for that we need the base_dir_path to exist - try: - os.makedirs(self._base_dir_path) - except OSError as error: - if error.errno != errno.EEXIST: - msg = 'Could not create directory "{0}"'.format( - self._base_dir_path) - fatal_error(msg) - - if self._stat.source_type != ExternalStatus.STANDALONE: - if verbosity >= VERBOSITY_VERBOSE: - # NOTE(bja, 2018-01) probably do not want to pass - # verbosity in this case, because if (verbosity == - # VERBOSITY_DUMP), then the previous status output would - # also be dumped, adding noise to the output. - self._stat.log_status_message(VERBOSITY_VERBOSE) - - if self._repo: - if self._stat.sync_state == ExternalStatus.STATUS_OK: - # If we're already in sync, avoid showing verbose output - # from the checkout command, unless the verbosity level - # is 2 or more. - checkout_verbosity = verbosity - 1 - else: - checkout_verbosity = verbosity - - self._repo.checkout(self._base_dir_path, self._repo_dir_name, - checkout_verbosity, self.clone_recursive()) - - def checkout_externals(self, verbosity, load_all): - """Checkout the sub-externals for this object - """ - if self.load_externals(): - if self._externals_sourcetree: - # NOTE(bja, 2018-02): the subtree externals objects - # were created during initial status check. Updating - # the external may have changed which sub-externals - # are needed. We need to delete those objects and - # re-read the potentially modified externals - # description file. - self._externals_sourcetree = None - self._create_externals_sourcetree() - self._externals_sourcetree.checkout(verbosity, load_all) - - def load_externals(self): - 'Return True iff an externals file should be loaded' - load_ex = False - if os.path.exists(self._repo_dir_path): - if self._externals: - if self._externals.lower() != 'none': - load_ex = os.path.exists(os.path.join(self._repo_dir_path, - self._externals)) - - return load_ex - - def clone_recursive(self): - 'Return True iff any .gitmodules files should be processed' - # Try recursive unless there is an externals entry - recursive = not self._externals - - return recursive - - def _create_externals_sourcetree(self): - """ - """ - if not os.path.exists(self._repo_dir_path): - # NOTE(bja, 2017-10) repository has not been checked out - # yet, can't process the externals file. Assume we are - # checking status before code is checkoud out and this - # will be handled correctly later. - return - - cwd = os.getcwd() - os.chdir(self._repo_dir_path) - if self._externals.lower() == 'none': - msg = ('Internal: Attempt to create source tree for ' - 'externals = none in {}'.format(self._repo_dir_path)) - fatal_error(msg) - - if not os.path.exists(self._externals): - if GitRepository.has_submodules(): - self._externals = ExternalsDescription.GIT_SUBMODULES_FILENAME - - if not os.path.exists(self._externals): - # NOTE(bja, 2017-10) this check is redundent with the one - # in read_externals_description_file! - msg = ('External externals description file "{0}" ' - 'does not exist! In directory: {1}'.format( - self._externals, self._repo_dir_path)) - fatal_error(msg) - - externals_root = self._repo_dir_path - model_data = read_externals_description_file(externals_root, - self._externals) - externals = create_externals_description(model_data, - parent_repo=self._repo) - self._externals_sourcetree = SourceTree(externals_root, externals) - os.chdir(cwd) - -class SourceTree(object): - """ - SourceTree represents a group of managed externals - """ - - def __init__(self, root_dir, model, svn_ignore_ancestry=False): - """ - Build a SourceTree object from a model description - """ - self._root_dir = os.path.abspath(root_dir) - self._all_components = {} - self._required_compnames = [] - for comp in model: - src = _External(self._root_dir, comp, model[comp], svn_ignore_ancestry) - self._all_components[comp] = src - if model[comp][ExternalsDescription.REQUIRED]: - self._required_compnames.append(comp) - - def status(self, relative_path_base=LOCAL_PATH_INDICATOR): - """Report the status components - - FIXME(bja, 2017-10) what do we do about situations where the - user checked out the optional components, but didn't add - optional for running status? What do we do where the user - didn't add optional to the checkout but did add it to the - status. -- For now, we run status on all components, and try - to do the right thing based on the results.... - - """ - load_comps = self._all_components.keys() - - summary = {} - for comp in load_comps: - printlog('{0}, '.format(comp), end='') - stat = self._all_components[comp].status() - for name in stat.keys(): - # check if we need to append the relative_path_base to - # the path so it will be sorted in the correct order. - if not stat[name].path.startswith(relative_path_base): - stat[name].path = os.path.join(relative_path_base, - stat[name].path) - # store under key = updated path, and delete the - # old key. - comp_stat = stat[name] - del stat[name] - stat[comp_stat.path] = comp_stat - summary.update(stat) - - return summary - - def checkout(self, verbosity, load_all, load_comp=None): - """ - Checkout or update indicated components into the the configured - subdirs. - - If load_all is True, recursively checkout all externals. - If load_all is False, load_comp is an optional set of components to load. - If load_all is True and load_comp is None, only load the required externals. - """ - if verbosity >= VERBOSITY_VERBOSE: - printlog('Checking out externals: ') - else: - printlog('Checking out externals: ', end='') - - if load_all: - load_comps = self._all_components.keys() - elif load_comp is not None: - load_comps = [load_comp] - else: - load_comps = self._required_compnames - - # checkout the primary externals - for comp in load_comps: - if verbosity < VERBOSITY_VERBOSE: - printlog('{0}, '.format(comp), end='') - else: - # verbose output handled by the _External object, just - # output a newline - printlog(EMPTY_STR) - self._all_components[comp].checkout(verbosity, load_all) - printlog('') - - # now give each external an opportunitity to checkout it's externals. - for comp in load_comps: - self._all_components[comp].checkout_externals(verbosity, load_all) diff --git a/manage_externals/manic/utils.py b/manage_externals/manic/utils.py deleted file mode 100644 index f57f43930..000000000 --- a/manage_externals/manic/utils.py +++ /dev/null @@ -1,330 +0,0 @@ -#!/usr/bin/env python -""" -Common public utilities for manic package - -""" - -from __future__ import absolute_import -from __future__ import unicode_literals -from __future__ import print_function - -import logging -import os -import subprocess -import sys -from threading import Timer - -from .global_constants import LOCAL_PATH_INDICATOR - -# --------------------------------------------------------------------- -# -# screen and logging output and functions to massage text for output -# -# --------------------------------------------------------------------- - - -def log_process_output(output): - """Log each line of process output at debug level so it can be - filtered if necessary. By default, output is a single string, and - logging.debug(output) will only put log info heading on the first - line. This makes it hard to filter with grep. - - """ - output = output.split('\n') - for line in output: - logging.debug(line) - - -def printlog(msg, **kwargs): - """Wrapper script around print to ensure that everything printed to - the screen also gets logged. - - """ - logging.info(msg) - if kwargs: - print(msg, **kwargs) - else: - print(msg) - sys.stdout.flush() - - -def last_n_lines(the_string, n_lines, truncation_message=None): - """Returns the last n lines of the given string - - Args: - the_string: str - n_lines: int - truncation_message: str, optional - - Returns a string containing the last n lines of the_string - - If truncation_message is provided, the returned string begins with - the given message if and only if the string is greater than n lines - to begin with. - """ - - lines = the_string.splitlines(True) - if len(lines) <= n_lines: - return_val = the_string - else: - lines_subset = lines[-n_lines:] - str_truncated = ''.join(lines_subset) - if truncation_message: - str_truncated = truncation_message + '\n' + str_truncated - return_val = str_truncated - - return return_val - - -def indent_string(the_string, indent_level): - """Indents the given string by a given number of spaces - - Args: - the_string: str - indent_level: int - - Returns a new string that is the same as the_string, except that - each line is indented by 'indent_level' spaces. - - In python3, this can be done with textwrap.indent. - """ - - lines = the_string.splitlines(True) - padding = ' ' * indent_level - lines_indented = [padding + line for line in lines] - return ''.join(lines_indented) - -# --------------------------------------------------------------------- -# -# error handling -# -# --------------------------------------------------------------------- - - -def fatal_error(message): - """ - Error output function - """ - logging.error(message) - raise RuntimeError("{0}ERROR: {1}".format(os.linesep, message)) - - -# --------------------------------------------------------------------- -# -# Data conversion / manipulation -# -# --------------------------------------------------------------------- -def str_to_bool(bool_str): - """Convert a sting representation of as boolean into a true boolean. - - Conversion should be case insensitive. - """ - value = None - str_lower = bool_str.lower() - if str_lower in ('true', 't'): - value = True - elif str_lower in ('false', 'f'): - value = False - if value is None: - msg = ('ERROR: invalid boolean string value "{0}". ' - 'Must be "true" or "false"'.format(bool_str)) - fatal_error(msg) - return value - - -REMOTE_PREFIXES = ['http://', 'https://', 'ssh://', 'git@'] - - -def is_remote_url(url): - """check if the user provided a local file path instead of a - remote. If so, it must be expanded to an absolute - path. - - """ - remote_url = False - for prefix in REMOTE_PREFIXES: - if url.startswith(prefix): - remote_url = True - return remote_url - - -def split_remote_url(url): - """check if the user provided a local file path or a - remote. If remote, try to strip off protocol info. - - """ - remote_url = is_remote_url(url) - if not remote_url: - return url - - for prefix in REMOTE_PREFIXES: - url = url.replace(prefix, '') - - if '@' in url: - url = url.split('@')[1] - - if ':' in url: - url = url.split(':')[1] - - return url - - -def expand_local_url(url, field): - """check if the user provided a local file path instead of a - remote. If so, it must be expanded to an absolute - path. - - Note: local paths of LOCAL_PATH_INDICATOR have special meaning and - represent local copy only, don't work with the remotes. - - """ - remote_url = is_remote_url(url) - if not remote_url: - if url.strip() == LOCAL_PATH_INDICATOR: - pass - else: - url = os.path.expandvars(url) - url = os.path.expanduser(url) - if not os.path.isabs(url): - msg = ('WARNING: Externals description for "{0}" contains a ' - 'url that is not remote and does not expand to an ' - 'absolute path. Version control operations may ' - 'fail.\n\nurl={1}'.format(field, url)) - printlog(msg) - else: - url = os.path.normpath(url) - return url - - -# --------------------------------------------------------------------- -# -# subprocess -# -# --------------------------------------------------------------------- - -# Give the user a helpful message if we detect that a command seems to -# be hanging. -_HANGING_SEC = 300 - - -def _hanging_msg(working_directory, command): - print(""" - -Command '{command}' -from directory {working_directory} -has taken {hanging_sec} seconds. It may be hanging. - -The command will continue to run, but you may want to abort -manage_externals with ^C and investigate. A possible cause of hangs is -when svn or git require authentication to access a private -repository. On some systems, svn and git requests for authentication -information will not be displayed to the user. In this case, the program -will appear to hang. Ensure you can run svn and git manually and access -all repositories without entering your authentication information. - -""".format(command=command, - working_directory=working_directory, - hanging_sec=_HANGING_SEC)) - - -def execute_subprocess(commands, status_to_caller=False, - output_to_caller=False): - """Wrapper around subprocess.check_output to handle common - exceptions. - - check_output runs a command with arguments and waits - for it to complete. - - check_output raises an exception on a nonzero return code. if - status_to_caller is true, execute_subprocess returns the subprocess - return code, otherwise execute_subprocess treats non-zero return - status as an error and raises an exception. - - """ - cwd = os.getcwd() - msg = 'In directory: {0}\nexecute_subprocess running command:'.format(cwd) - logging.info(msg) - commands_str = ' '.join(commands) - logging.info(commands_str) - return_to_caller = status_to_caller or output_to_caller - status = -1 - output = '' - hanging_timer = Timer(_HANGING_SEC, _hanging_msg, - kwargs={"working_directory": cwd, - "command": commands_str}) - hanging_timer.start() - try: - output = subprocess.check_output(commands, stderr=subprocess.STDOUT, - universal_newlines=True) - log_process_output(output) - status = 0 - except OSError as error: - msg = failed_command_msg( - 'Command execution failed. Does the executable exist?', - commands) - logging.error(error) - fatal_error(msg) - except ValueError as error: - msg = failed_command_msg( - 'DEV_ERROR: Invalid arguments trying to run subprocess', - commands) - logging.error(error) - fatal_error(msg) - except subprocess.CalledProcessError as error: - # Only report the error if we are NOT returning to the - # caller. If we are returning to the caller, then it may be a - # simple status check. If returning, it is the callers - # responsibility determine if an error occurred and handle it - # appropriately. - if not return_to_caller: - msg_context = ('Process did not run successfully; ' - 'returned status {0}'.format(error.returncode)) - msg = failed_command_msg(msg_context, commands, - output=error.output) - logging.error(error) - logging.error(msg) - log_process_output(error.output) - fatal_error(msg) - status = error.returncode - finally: - hanging_timer.cancel() - - if status_to_caller and output_to_caller: - ret_value = (status, output) - elif status_to_caller: - ret_value = status - elif output_to_caller: - ret_value = output - else: - ret_value = None - - return ret_value - - -def failed_command_msg(msg_context, command, output=None): - """Template for consistent error messages from subprocess calls. - - If 'output' is given, it should provide the output from the failed - command - """ - - if output: - output_truncated = last_n_lines(output, 20, - truncation_message='[... Output truncated for brevity ...]') - errmsg = ('Failed with output:\n' + - indent_string(output_truncated, 4) + - '\nERROR: ') - else: - errmsg = '' - - command_str = ' '.join(command) - errmsg += """In directory - {cwd} -{context}: - {command} -""".format(cwd=os.getcwd(), context=msg_context, command=command_str) - - if output: - errmsg += 'See above for output from failed command.\n' - - return errmsg diff --git a/manage_externals/test/.coveragerc b/manage_externals/test/.coveragerc deleted file mode 100644 index 8b681888b..000000000 --- a/manage_externals/test/.coveragerc +++ /dev/null @@ -1,7 +0,0 @@ -[run] -branch = True -omit = test_unit_*.py - test_sys_*.py - /usr/* - .local/* - */site-packages/* \ No newline at end of file diff --git a/manage_externals/test/.gitignore b/manage_externals/test/.gitignore deleted file mode 100644 index dd5795998..000000000 --- a/manage_externals/test/.gitignore +++ /dev/null @@ -1,7 +0,0 @@ -# virtual environments -env_python* - -# python code coverage tool output -.coverage -htmlcov - diff --git a/manage_externals/test/.pylint.rc b/manage_externals/test/.pylint.rc deleted file mode 100644 index 64abd03e4..000000000 --- a/manage_externals/test/.pylint.rc +++ /dev/null @@ -1,426 +0,0 @@ -[MASTER] - -# A comma-separated list of package or module names from where C extensions may -# be loaded. Extensions are loading into the active Python interpreter and may -# run arbitrary code -extension-pkg-whitelist= - -# Add files or directories to the blacklist. They should be base names, not -# paths. -ignore=.git,.svn,env2 - -# Add files or directories matching the regex patterns to the blacklist. The -# regex matches against base names, not paths. -ignore-patterns= - -# Python code to execute, usually for sys.path manipulation such as -# pygtk.require(). -#init-hook= - -# Use multiple processes to speed up Pylint. -jobs=1 - -# List of plugins (as comma separated values of python modules names) to load, -# usually to register additional checkers. -load-plugins= - -# Pickle collected data for later comparisons. -persistent=yes - -# Specify a configuration file. -#rcfile= - -# Allow loading of arbitrary C extensions. Extensions are imported into the -# active Python interpreter and may run arbitrary code. -unsafe-load-any-extension=no - - -[MESSAGES CONTROL] - -# Only show warnings with the listed confidence levels. Leave empty to show -# all. Valid levels: HIGH, INFERENCE, INFERENCE_FAILURE, UNDEFINED -confidence= - -# Disable the message, report, category or checker with the given id(s). You -# can either give multiple identifiers separated by comma (,) or put this -# option multiple times (only on the command line, not in the configuration -# file where it should appear only once).You can also use "--disable=all" to -# disable everything first and then reenable specific checks. For example, if -# you want to run only the similarities checker, you can use "--disable=all -# --enable=similarities". If you want to run only the classes checker, but have -# no Warning level messages displayed, use"--disable=all --enable=classes -# --disable=W" -disable=bad-continuation,useless-object-inheritance - - -# Enable the message, report, category or checker with the given id(s). You can -# either give multiple identifier separated by comma (,) or put this option -# multiple time (only on the command line, not in the configuration file where -# it should appear only once). See also the "--disable" option for examples. -enable= - - -[REPORTS] - -# Python expression which should return a note less than 10 (10 is the highest -# note). You have access to the variables errors warning, statement which -# respectively contain the number of errors / warnings messages and the total -# number of statements analyzed. This is used by the global evaluation report -# (RP0004). -evaluation=10.0 - ((float(5 * error + warning + refactor + convention) / statement) * 10) - -# Template used to display messages. This is a python new-style format string -# used to format the message information. See doc for all details -msg-template={msg_id}:{line:3d},{column:2d}: {msg} ({symbol}) - -# Set the output format. Available formats are text, parseable, colorized, json -# and msvs (visual studio).You can also give a reporter class, eg -# mypackage.mymodule.MyReporterClass. -output-format=text - -# Tells whether to display a full report or only the messages -#reports=yes - -# Activate the evaluation score. -score=yes - - -[REFACTORING] - -# Maximum number of nested blocks for function / method body -max-nested-blocks=5 - - -[BASIC] - -# Naming hint for argument names -argument-name-hint=(([a-z][a-z0-9_]{2,30})|(_[a-z0-9_]*))$ - -# Regular expression matching correct argument names -argument-rgx=(([a-z][a-z0-9_]{2,30})|(_[a-z0-9_]*))$ - -# Naming hint for attribute names -attr-name-hint=(([a-z][a-z0-9_]{2,30})|(_[a-z0-9_]*))$ - -# Regular expression matching correct attribute names -attr-rgx=(([a-z][a-z0-9_]{2,30})|(_[a-z0-9_]*))$ - -# Bad variable names which should always be refused, separated by a comma -bad-names=foo,bar,baz,toto,tutu,tata - -# Naming hint for class attribute names -class-attribute-name-hint=([A-Za-z_][A-Za-z0-9_]{2,30}|(__.*__))$ - -# Regular expression matching correct class attribute names -class-attribute-rgx=([A-Za-z_][A-Za-z0-9_]{2,30}|(__.*__))$ - -# Naming hint for class names -class-name-hint=[A-Z_][a-zA-Z0-9]+$ - -# Regular expression matching correct class names -class-rgx=[A-Z_][a-zA-Z0-9]+$ - -# Naming hint for constant names -const-name-hint=(([A-Z_][A-Z0-9_]*)|(__.*__))$ - -# Regular expression matching correct constant names -const-rgx=(([A-Z_][A-Z0-9_]*)|(__.*__))$ - -# Minimum line length for functions/classes that require docstrings, shorter -# ones are exempt. -docstring-min-length=-1 - -# Naming hint for function names -function-name-hint=(([a-z][a-z0-9_]{2,30})|(_[a-z0-9_]*))$ - -# Regular expression matching correct function names -function-rgx=(([a-z][a-z0-9_]{2,30})|(_[a-z0-9_]*))$ - -# Good variable names which should always be accepted, separated by a comma -good-names=i,j,k,ex,Run,_ - -# Include a hint for the correct naming format with invalid-name -include-naming-hint=no - -# Naming hint for inline iteration names -inlinevar-name-hint=[A-Za-z_][A-Za-z0-9_]*$ - -# Regular expression matching correct inline iteration names -inlinevar-rgx=[A-Za-z_][A-Za-z0-9_]*$ - -# Naming hint for method names -method-name-hint=(([a-z][a-z0-9_]{2,30})|(_[a-z0-9_]*))$ - -# Regular expression matching correct method names -method-rgx=(([a-z][a-z0-9_]{2,30})|(_[a-z0-9_]*))$ - -# Naming hint for module names -module-name-hint=(([a-z_][a-z0-9_]*)|([A-Z][a-zA-Z0-9]+))$ - -# Regular expression matching correct module names -module-rgx=(([a-z_][a-z0-9_]*)|([A-Z][a-zA-Z0-9]+))$ - -# Colon-delimited sets of names that determine each other's naming style when -# the name regexes allow several styles. -name-group= - -# Regular expression which should only match function or class names that do -# not require a docstring. -no-docstring-rgx=^_ - -# List of decorators that produce properties, such as abc.abstractproperty. Add -# to this list to register other decorators that produce valid properties. -property-classes=abc.abstractproperty - -# Naming hint for variable names -variable-name-hint=(([a-z][a-z0-9_]{2,30})|(_[a-z0-9_]*))$ - -# Regular expression matching correct variable names -variable-rgx=(([a-z][a-z0-9_]{2,30})|(_[a-z0-9_]*))$ - - -[FORMAT] - -# Expected format of line ending, e.g. empty (any line ending), LF or CRLF. -expected-line-ending-format= - -# Regexp for a line that is allowed to be longer than the limit. -ignore-long-lines=^\s*(# )??$ - -# Number of spaces of indent required inside a hanging or continued line. -indent-after-paren=4 - -# String used as indentation unit. This is usually " " (4 spaces) or "\t" (1 -# tab). -indent-string=' ' - -# Maximum number of characters on a single line. -max-line-length=100 - -# Maximum number of lines in a module -max-module-lines=1000 - -# List of optional constructs for which whitespace checking is disabled. `dict- -# separator` is used to allow tabulation in dicts, etc.: {1 : 1,\n222: 2}. -# `trailing-comma` allows a space between comma and closing bracket: (a, ). -# `empty-line` allows space-only lines. -no-space-check=trailing-comma,dict-separator - -# Allow the body of a class to be on the same line as the declaration if body -# contains single statement. -single-line-class-stmt=no - -# Allow the body of an if to be on the same line as the test if there is no -# else. -single-line-if-stmt=no - - -[LOGGING] - -# Logging modules to check that the string format arguments are in logging -# function parameter format -logging-modules=logging - - -[MISCELLANEOUS] - -# List of note tags to take in consideration, separated by a comma. -notes=FIXME,XXX,TODO - - -[SIMILARITIES] - -# Ignore comments when computing similarities. -ignore-comments=yes - -# Ignore docstrings when computing similarities. -ignore-docstrings=yes - -# Ignore imports when computing similarities. -ignore-imports=no - -# Minimum lines number of a similarity. -min-similarity-lines=4 - - -[SPELLING] - -# Spelling dictionary name. Available dictionaries: none. To make it working -# install python-enchant package. -spelling-dict= - -# List of comma separated words that should not be checked. -spelling-ignore-words= - -# A path to a file that contains private dictionary; one word per line. -spelling-private-dict-file= - -# Tells whether to store unknown words to indicated private dictionary in -# --spelling-private-dict-file option instead of raising a message. -spelling-store-unknown-words=no - - -[TYPECHECK] - -# List of decorators that produce context managers, such as -# contextlib.contextmanager. Add to this list to register other decorators that -# produce valid context managers. -contextmanager-decorators=contextlib.contextmanager - -# List of members which are set dynamically and missed by pylint inference -# system, and so shouldn't trigger E1101 when accessed. Python regular -# expressions are accepted. -generated-members= - -# Tells whether missing members accessed in mixin class should be ignored. A -# mixin class is detected if its name ends with "mixin" (case insensitive). -ignore-mixin-members=yes - -# This flag controls whether pylint should warn about no-member and similar -# checks whenever an opaque object is returned when inferring. The inference -# can return multiple potential results while evaluating a Python object, but -# some branches might not be evaluated, which results in partial inference. In -# that case, it might be useful to still emit no-member and other checks for -# the rest of the inferred objects. -ignore-on-opaque-inference=yes - -# List of class names for which member attributes should not be checked (useful -# for classes with dynamically set attributes). This supports the use of -# qualified names. -ignored-classes=optparse.Values,thread._local,_thread._local - -# List of module names for which member attributes should not be checked -# (useful for modules/projects where namespaces are manipulated during runtime -# and thus existing member attributes cannot be deduced by static analysis. It -# supports qualified module names, as well as Unix pattern matching. -ignored-modules= - -# Show a hint with possible names when a member name was not found. The aspect -# of finding the hint is based on edit distance. -missing-member-hint=yes - -# The minimum edit distance a name should have in order to be considered a -# similar match for a missing member name. -missing-member-hint-distance=1 - -# The total number of similar names that should be taken in consideration when -# showing a hint for a missing member. -missing-member-max-choices=1 - - -[VARIABLES] - -# List of additional names supposed to be defined in builtins. Remember that -# you should avoid to define new builtins when possible. -additional-builtins= - -# Tells whether unused global variables should be treated as a violation. -allow-global-unused-variables=yes - -# List of strings which can identify a callback function by name. A callback -# name must start or end with one of those strings. -callbacks=cb_,_cb - -# A regular expression matching the name of dummy variables (i.e. expectedly -# not used). -dummy-variables-rgx=_+$|(_[a-zA-Z0-9_]*[a-zA-Z0-9]+?$)|dummy|^ignored_|^unused_ - -# Argument names that match this expression will be ignored. Default to name -# with leading underscore -ignored-argument-names=_.*|^ignored_|^unused_ - -# Tells whether we should check for unused import in __init__ files. -init-import=no - -# List of qualified module names which can have objects that can redefine -# builtins. -redefining-builtins-modules=six.moves,future.builtins - - -[CLASSES] - -# List of method names used to declare (i.e. assign) instance attributes. -defining-attr-methods=__init__,__new__,setUp - -# List of member names, which should be excluded from the protected access -# warning. -exclude-protected=_asdict,_fields,_replace,_source,_make - -# List of valid names for the first argument in a class method. -valid-classmethod-first-arg=cls - -# List of valid names for the first argument in a metaclass class method. -valid-metaclass-classmethod-first-arg=mcs - - -[DESIGN] - -# Maximum number of arguments for function / method -max-args=5 - -# Maximum number of attributes for a class (see R0902). -max-attributes=7 - -# Maximum number of boolean expressions in a if statement -max-bool-expr=5 - -# Maximum number of branch for function / method body -max-branches=12 - -# Maximum number of locals for function / method body -max-locals=15 - -# Maximum number of parents for a class (see R0901). -max-parents=7 - -# Maximum number of public methods for a class (see R0904). -max-public-methods=20 - -# Maximum number of return / yield for function / method body -max-returns=6 - -# Maximum number of statements in function / method body -max-statements=50 - -# Minimum number of public methods for a class (see R0903). -min-public-methods=2 - - -[IMPORTS] - -# Allow wildcard imports from modules that define __all__. -allow-wildcard-with-all=no - -# Analyse import fallback blocks. This can be used to support both Python 2 and -# 3 compatible code, which means that the block might have code that exists -# only in one or another interpreter, leading to false positives when analysed. -analyse-fallback-blocks=no - -# Deprecated modules which should not be used, separated by a comma -deprecated-modules=regsub,TERMIOS,Bastion,rexec - -# Create a graph of external dependencies in the given file (report RP0402 must -# not be disabled) -ext-import-graph= - -# Create a graph of every (i.e. internal and external) dependencies in the -# given file (report RP0402 must not be disabled) -import-graph= - -# Create a graph of internal dependencies in the given file (report RP0402 must -# not be disabled) -int-import-graph= - -# Force import order to recognize a module as part of the standard -# compatibility libraries. -known-standard-library= - -# Force import order to recognize a module as part of a third party library. -known-third-party=enchant - - -[EXCEPTIONS] - -# Exceptions that will emit a warning when being caught. Defaults to -# "Exception" -overgeneral-exceptions=Exception diff --git a/manage_externals/test/Makefile b/manage_externals/test/Makefile deleted file mode 100644 index 293e36075..000000000 --- a/manage_externals/test/Makefile +++ /dev/null @@ -1,124 +0,0 @@ -python = not-set -verbose = not-set -debug = not-set - -ifneq ($(python), not-set) -PYTHON=$(python) -else -PYTHON=python -endif - -# we need the python path to point one level up to access the package -# and executables -PYPATH=PYTHONPATH=..: - -# common args for running tests -TEST_ARGS=-m unittest discover - -ifeq ($(debug), not-set) - ifeq ($(verbose), not-set) - # summary only output - TEST_ARGS+=--buffer - else - # show individual test summary - TEST_ARGS+=--buffer --verbose - endif -else - # show detailed test output - TEST_ARGS+=--verbose -endif - - -# auto reformat the code -AUTOPEP8=autopep8 -AUTOPEP8_ARGS=--aggressive --in-place - -# run lint -PYLINT=pylint -PYLINT_ARGS=-j 2 --rcfile=.pylint.rc - -# code coverage -COVERAGE=coverage -COVERAGE_ARGS=--rcfile=.coveragerc - -# source files -SRC = \ - ../checkout_externals \ - ../manic/*.py - -CHECKOUT_EXE = ../checkout_externals - -TEST_DIR = . - -README = ../README.md - -# -# testing -# -.PHONY : utest -utest : FORCE - $(PYPATH) $(PYTHON) $(TEST_ARGS) --pattern 'test_unit_*.py' - -.PHONY : stest -stest : FORCE - $(PYPATH) $(PYTHON) $(TEST_ARGS) --pattern 'test_sys_*.py' - -.PHONY : test -test : utest stest - -# -# documentation -# -.PHONY : readme -readme : $(CHECKOUT_EXE) - printf "%s\n\n" "-- AUTOMATICALLY GENERATED FILE. DO NOT EDIT --" > $(README) - printf "%s" '[![Build Status](https://travis-ci.org/ESMCI/manage_externals.svg?branch=master)](https://travis-ci.org/ESMCI/manage_externals)' >> $(README) - printf "%s" '[![Coverage Status](https://coveralls.io/repos/github/ESMCI/manage_externals/badge.svg?branch=master)](https://coveralls.io/github/ESMCI/manage_externals?branch=master)' >> $(README) - printf "\n%s\n" '```' >> $(README) - $(CHECKOUT_EXE) --help >> $(README) - -# -# coding standards -# -.PHONY : style -style : FORCE - $(AUTOPEP8) $(AUTOPEP8_ARGS) --recursive $(SRC) $(TEST_DIR)/test_*.py - -.PHONY : lint -lint : FORCE - $(PYLINT) $(PYLINT_ARGS) $(SRC) $(TEST_DIR)/test_*.py - -.PHONY : stylint -stylint : style lint - -.PHONY : coverage -# Need to use a single coverage run with a single pattern rather than -# using two separate commands with separate patterns for test_unit_*.py -# and test_sys_*.py: The latter clobbers some results from the first -# run, even if we use the --append flag to 'coverage run'. -coverage : FORCE - $(PYPATH) $(COVERAGE) erase - $(PYPATH) $(COVERAGE) run $(COVERAGE_ARGS) $(TEST_ARGS) --pattern 'test_*.py' - $(PYPATH) $(COVERAGE) html - -# -# virtual environment creation -# -.PHONY : env -env : FORCE - $(PYPATH) virtualenv --python $(PYTHON) $@_$(PYTHON) - . $@_$(PYTHON)/bin/activate; pip install -r requirements.txt - -# -# utilites -# -.PHONY : clean -clean : FORCE - -rm -rf *~ *.pyc tmp fake htmlcov - -.PHONY : clobber -clobber : clean - -rm -rf env_* - -FORCE : - diff --git a/manage_externals/test/README.md b/manage_externals/test/README.md deleted file mode 100644 index 938a900ee..000000000 --- a/manage_externals/test/README.md +++ /dev/null @@ -1,77 +0,0 @@ -# Testing for checkout_externals - -NOTE: Python2 is the supported runtime environment. Python3 compatibility is -in progress, complicated by the different proposed input methods -(yaml, xml, cfg/ini, json) and their different handling of strings -(unicode vs byte) in python2. Full python3 compatibility will be -possible once the number of possible input formats has been narrowed. - -## Setup development environment - -Development environments should be setup for python2 and python3: - -```SH - cd checkout_externals/test - make python=python2 env - make python=python3 env -``` - -## Unit tests - -Tests should be run for both python2 and python3. It is recommended -that you have seperate terminal windows open python2 and python3 -testing to avoid errors activating and deactivating environments. - -```SH - cd checkout_externals/test - . env_python2/bin/activate - make utest - deactivate -``` - -```SH - cd checkout_externals/test - . env_python2/bin/activate - make utest - deactivate -``` - -## System tests - -Not yet implemented. - -## Static analysis - -checkout_externals is difficult to test thoroughly because it relies -on git and svn, and svn requires a live network connection and -repository. Static analysis will help catch bugs in code paths that -are not being executed, but it requires conforming to community -standards and best practices. autopep8 and pylint should be run -regularly for automatic code formatting and linting. - -```SH - cd checkout_externals/test - . env_python2/bin/activate - make lint - deactivate -``` - -The canonical formatting for the code is whatever autopep8 -generates. All issues identified by pylint should be addressed. - - -## Code coverage - -All changes to the code should include maintaining existing tests and -writing new tests for new or changed functionality. To ensure test -coverage, run the code coverage tool: - -```SH - cd checkout_externals/test - . env_python2/bin/activate - make coverage - open -a Firefox.app htmlcov/index.html - deactivate -``` - - diff --git a/manage_externals/test/doc/.gitignore b/manage_externals/test/doc/.gitignore deleted file mode 100644 index d4e11e5ea..000000000 --- a/manage_externals/test/doc/.gitignore +++ /dev/null @@ -1,2 +0,0 @@ -_build - diff --git a/manage_externals/test/doc/Makefile b/manage_externals/test/doc/Makefile deleted file mode 100644 index 18f4d5bf9..000000000 --- a/manage_externals/test/doc/Makefile +++ /dev/null @@ -1,20 +0,0 @@ -# Minimal makefile for Sphinx documentation -# - -# You can set these variables from the command line. -SPHINXOPTS = -SPHINXBUILD = sphinx-build -SPHINXPROJ = ManageExternals -SOURCEDIR = . -BUILDDIR = _build - -# Put it first so that "make" without argument is like "make help". -help: - @$(SPHINXBUILD) -M help "$(SOURCEDIR)" "$(BUILDDIR)" $(SPHINXOPTS) $(O) - -.PHONY: help Makefile - -# Catch-all target: route all unknown targets to Sphinx using the new -# "make mode" option. $(O) is meant as a shortcut for $(SPHINXOPTS). -%: Makefile - @$(SPHINXBUILD) -M $@ "$(SOURCEDIR)" "$(BUILDDIR)" $(SPHINXOPTS) $(O) \ No newline at end of file diff --git a/manage_externals/test/doc/conf.py b/manage_externals/test/doc/conf.py deleted file mode 100644 index 469c0b0dc..000000000 --- a/manage_externals/test/doc/conf.py +++ /dev/null @@ -1,172 +0,0 @@ -# -*- coding: utf-8 -*- -# -# Manage Externals documentation build configuration file, created by -# sphinx-quickstart on Wed Nov 29 10:53:25 2017. -# -# This file is execfile()d with the current directory set to its -# containing dir. -# -# Note that not all possible configuration values are present in this -# autogenerated file. -# -# All configuration values have a default; values that are commented out -# serve to show the default. - -# If extensions (or modules to document with autodoc) are in another directory, -# add these directories to sys.path here. If the directory is relative to the -# documentation root, use os.path.abspath to make it absolute, like shown here. -# -# import os -# import sys -# sys.path.insert(0, os.path.abspath('.')) - - -# -- General configuration ------------------------------------------------ - -# If your documentation needs a minimal Sphinx version, state it here. -# -# needs_sphinx = '1.0' - -# Add any Sphinx extension module names here, as strings. They can be -# extensions coming with Sphinx (named 'sphinx.ext.*') or your custom -# ones. -extensions = ['sphinx.ext.autodoc', - 'sphinx.ext.todo', - 'sphinx.ext.coverage', - 'sphinx.ext.viewcode', - 'sphinx.ext.githubpages'] - -# Add any paths that contain templates here, relative to this directory. -templates_path = ['_templates'] - -# The suffix(es) of source filenames. -# You can specify multiple suffix as a list of string: -# -# source_suffix = ['.rst', '.md'] -source_suffix = '.rst' - -# The master toctree document. -master_doc = 'index' - -# General information about the project. -project = u'Manage Externals' -copyright = u'2017, CSEG at NCAR' -author = u'CSEG at NCAR' - -# The version info for the project you're documenting, acts as replacement for -# |version| and |release|, also used in various other places throughout the -# built documents. -# -# The short X.Y version. -version = u'1.0.0' -# The full version, including alpha/beta/rc tags. -release = u'1.0.0' - -# The language for content autogenerated by Sphinx. Refer to documentation -# for a list of supported languages. -# -# This is also used if you do content translation via gettext catalogs. -# Usually you set "language" from the command line for these cases. -language = None - -# List of patterns, relative to source directory, that match files and -# directories to ignore when looking for source files. -# This patterns also effect to html_static_path and html_extra_path -exclude_patterns = ['_build', 'Thumbs.db', '.DS_Store'] - -# The name of the Pygments (syntax highlighting) style to use. -pygments_style = 'sphinx' - -# If true, `todo` and `todoList` produce output, else they produce nothing. -todo_include_todos = True - - -# -- Options for HTML output ---------------------------------------------- - -# The theme to use for HTML and HTML Help pages. See the documentation for -# a list of builtin themes. -# -html_theme = 'alabaster' - -# Theme options are theme-specific and customize the look and feel of a theme -# further. For a list of options available for each theme, see the -# documentation. -# -# html_theme_options = {} - -# Add any paths that contain custom static files (such as style sheets) here, -# relative to this directory. They are copied after the builtin static files, -# so a file named "default.css" will overwrite the builtin "default.css". -html_static_path = ['_static'] - -# Custom sidebar templates, must be a dictionary that maps document names -# to template names. -# -# This is required for the alabaster theme -# refs: http://alabaster.readthedocs.io/en/latest/installation.html#sidebars -html_sidebars = { - '**': [ - 'relations.html', # needs 'show_related': True theme option to display - 'searchbox.html', - ] -} - - -# -- Options for HTMLHelp output ------------------------------------------ - -# Output file base name for HTML help builder. -htmlhelp_basename = 'ManageExternalsdoc' - - -# -- Options for LaTeX output --------------------------------------------- - -latex_elements = { - # The paper size ('letterpaper' or 'a4paper'). - # - # 'papersize': 'letterpaper', - - # The font size ('10pt', '11pt' or '12pt'). - # - # 'pointsize': '10pt', - - # Additional stuff for the LaTeX preamble. - # - # 'preamble': '', - - # Latex figure (float) alignment - # - # 'figure_align': 'htbp', -} - -# Grouping the document tree into LaTeX files. List of tuples -# (source start file, target name, title, -# author, documentclass [howto, manual, or own class]). -latex_documents = [ - (master_doc, 'ManageExternals.tex', u'Manage Externals Documentation', - u'CSEG at NCAR', 'manual'), -] - - -# -- Options for manual page output --------------------------------------- - -# One entry per manual page. List of tuples -# (source start file, name, description, authors, manual section). -man_pages = [ - (master_doc, 'manageexternals', u'Manage Externals Documentation', - [author], 1) -] - - -# -- Options for Texinfo output ------------------------------------------- - -# Grouping the document tree into Texinfo files. List of tuples -# (source start file, target name, title, author, -# dir menu entry, description, category) -texinfo_documents = [ - (master_doc, 'ManageExternals', u'Manage Externals Documentation', - author, 'ManageExternals', 'One line description of project.', - 'Miscellaneous'), -] - - - diff --git a/manage_externals/test/doc/develop.rst b/manage_externals/test/doc/develop.rst deleted file mode 100644 index b817b7b09..000000000 --- a/manage_externals/test/doc/develop.rst +++ /dev/null @@ -1,202 +0,0 @@ -Developer Guidelines -==================== - -The manage externals utilities are a light weight replacement for svn -externals that will work with git repositories pulling in a mixture of -git and svn dependencies. - -Given an externals description and a working copy: - -* *checkout_externals* attempts to make the working copy agree with the - externals description - -* *generate_externals* attempts to make the externals description agree - with the working copy. - -For these operations utilities should: - -* operate consistently across git and svn - -* operate simply with minimal user complexity - -* robustly across a wide range of repository states - -* provide explicit error messages when a problem occurs - -* leave the working copy in a valid state - -The utilities in manage externals are **NOT** generic wrappers around -revision control operations or a replacement for common tasks. Users -are expected to: - -* create branches prior to starting development - -* add remotes and push changes - -* create tags - -* delete branches - -These types of tasks are often highly workflow dependent, e.g. branch -naming conventions may vary between repositories, have the potential -to destroy user data, introduce significant code complexit and 'edge -cases' that are extremely difficult to detect and test, and often -require subtle decision making, especially if a problem occurs. - -Users who want to automate these types are encouraged to create their -own tools. The externals description files are explicitly versioned -and the internal APIs are intended to be stable for these purposes. - -Core Design Principles ------------------------ - -1. Users can, and are actively encouraged to, modify the externals - directories using revision control outside of manage_externals - tools. You can't make any assumptions about the state of the - working copy. Examples: adding a remote, creating a branch, - switching to a branch, deleting the directory entirely. - -2. Give that the user can do anything, the manage externals library - can not preserve state between calls. The only information it can - rely on is what it expectes based on the content of the externals - description file, and what the actual state of the directory tree - is. - -3. Do *not* do anything that will possibly destroy user data! - - a. Do not remove files from the file system. We are operating on - user supplied input. If you don't call 'rm', you can't - accidentally remove the user's data. Thinking of calling - ``shutil.rmtree(user_input)``? What if the user accidentally - specified user_input such that it resolves to their home - directory.... Yeah. Don't go there. - - b. Rely on git and svn to do their job as much as possible. Don't - duplicate functionality. Examples: - - i. We require the working copies to be 'clean' as reported by - ``git status`` and ``svn status``. What if there are misc - editor files floating around that prevent an update? Use the - git and svn ignore functionality so they are not - reported. Don't try to remove them from manage_externals or - determine if they are 'safe' to ignore. - - ii. Do not use '--force'. Ever. This is a sign you are doing - something dangerous, it may not be what the user - wants. Remember, they are encouraged to modify their repo. - -4. There are often multiple ways to obtain a particular piece of - information from git. Scraping screen output is brittle and - generally not considered a stable API across different versions of - git. Given a choice between: - - a. a lower level git 'plumbing' command that processes a - specific request and returns a sucess/failure status. - - b. high level git command that produces a bunch of output - that must be processed. - - We always prefer the former. It almost always involves - writing and maintaining less code and is more likely to be - stable. - -5. Backward compatibility is critical. We have *nested* - repositories. They are trivially easy to change versions. They may - have very different versions of the top level manage_externals. The - ability to read and work with old model description files is - critical to avoid problems for users. We also have automated tools - (testdb) that must generate and read external description - files. Backward compatibility will make staging changes vastly - simpler. - -Model Users ------------ - -Consider the needs of the following model userswhen developing manage_externals: - -* Users who will checkout the code once, and never change versions. - -* Users who will checkout the code once, then work for several years, - never updating. before trying to update or request integration. - -* Users develope code but do not use revision control beyond the - initial checkout. If they have modified or untracked files in the - repo, they may be irreplacable. Don't destroy user data. - -* Intermediate users who are working with multiple repos or branches - on a regular basis. They may only use manage_externals weekly or - monthly. Keep the user interface and documentation simple and - explicit. The more command line options they have to remember or - look up, the more frustrated they git. - -* Software engineers who use the tools multiple times a day. It should - get out of their way. - -User Interface --------------- - -Basic operation for the most standard use cases should be kept as -simple as possible. Many users will only rarely run the manage -utilities. Even advanced users don't like reading a lot of help -documentation or struggling to remember commands and piece together -what they need to run. Having many command line options, even if not -needed, is exteremly frustrating and overwhelming for most users. A few -simple, explicitly named commands are better than a single command -with many options. - -How will users get help if something goes wrong? This is a custom, -one-off solution. Searching the internet for manage_externals, will -only return the user doc for this project at best. There isn't likely -to be a stackoverflow question or blog post where someone else already -answered a user's question. And very few people outside this community -will be able to provide help if something goes wrong. The sooner we -kick users out of these utilities and into standard version control -tools, the better off they are going to be if they run into a problem. - -Repositories ------------- - -There are three basic types of repositories that must be considered: - -* container repositories - repositories that are always top level - repositories, and have a group of externals that must be managed. - -* simple repositories - repositories that are externals to another - repository, and do not have any of their own externals that will be - managed. - -* mixed use repositories - repositories that can act as a top level - container repository or as an external to a top level - container. They may also have their own sub-externals that are - required. They may have different externals needs depening on - whether they are top level or not. - -Repositories must be able to checkout and switch to both branches and -tags. - -Development -=========== - -The functionality to manage externals is broken into a library of core -functionality and applications built with the library. - -The core library is called 'manic', pseduo-homophone of (man)age -(ex)ternals that is: short, pronounceable and spell-checkable. It is -also no more or less meaningful to an unfamiliar user than a random -jumble of letters forming an acronym. - -The core architecture of manic is: - -* externals description - an abstract description on an external, - including of how to obtain it, where to obtain it, where it goes in - the working tree. - -* externals - the software object representing an external. - -* source trees - collection of externals - -* repository wrappers - object oriented wrappers around repository - operations. So the higher level management of the soure tree and - external does not have to be concerned with how a particular - external is obtained and managed. - diff --git a/manage_externals/test/doc/index.rst b/manage_externals/test/doc/index.rst deleted file mode 100644 index 9ab287ad8..000000000 --- a/manage_externals/test/doc/index.rst +++ /dev/null @@ -1,22 +0,0 @@ -.. Manage Externals documentation master file, created by - sphinx-quickstart on Wed Nov 29 10:53:25 2017. - You can adapt this file completely to your liking, but it should at least - contain the root `toctree` directive. - -Welcome to Manage Externals's documentation! -============================================ - -.. toctree:: - :maxdepth: 2 - :caption: Contents: - - - develop.rst - testing.rst - -Indices and tables -================== - -* :ref:`genindex` -* :ref:`modindex` -* :ref:`search` diff --git a/manage_externals/test/doc/testing.rst b/manage_externals/test/doc/testing.rst deleted file mode 100644 index 623f0e431..000000000 --- a/manage_externals/test/doc/testing.rst +++ /dev/null @@ -1,123 +0,0 @@ -Testing -======= - -The manage_externals package has an automated test suite. All pull -requests are expected to pass 100% of the automated tests, as well as -be pep8 and lint 'clean' and maintain approximately constant (at a -minimum) level of code coverage. - -Quick Start ------------ - -Do nothing approach -~~~~~~~~~~~~~~~~~~~ - -When you create a pull request on GitHub, Travis-CI continuous -integration testing will run the test suite in both python2 and -python3. Test results, lint results, and code coverage results are -available online. - -Do something approach -~~~~~~~~~~~~~~~~~~~~~ - -In the test directory, run: - -.. code-block:: shell - - make env - make lint - make test - make coverage - - -Automated Testing ------------------ - -The manage_externals manic library and executables are developed to be -python2 and python3 compatible using only the standard library. The -test suites meet the same requirements. But additional tools are -required to provide lint and code coverage metrics and generate -documentation. The requirements are maintained in the requirements.txt -file, and can be automatically installed into an isolated environment -via Makefile. - -Bootstrap requirements: - -* python2 - version 2.7.x or later - -* python3 - version 3.6 tested other versions may work - -* pip and virtualenv for python2 and python3 - -Note: all make rules can be of the form ``make python=pythonX rule`` -or ``make rule`` depending if you want to use the default system -python or specify a specific version. - -The Makefile in the test directory has the following rules: - -* ``make python=pythonX env`` - create a python virtual environment - for python2 or python3 and install all required packages. These - packages are required to run lint or coverage. - -* ``make style`` - runs autopep8 - -* ``make lint`` - runs autopep8 and pylint - -* ``make test`` - run the full test suite - -* ``make utest`` - run jus the unit tests - -* ``make stest`` - run jus the system integration tests - -* ``make coverage`` - run the full test suite through the code - coverage tool and generate an html report. - -* ``make readme`` - automatically generate the README files. - -* ``make clean`` - remove editor and pyc files - -* ``make clobber`` - remove all generated test files, including - virtual environments, coverage reports, and temporary test - repository directories. - -Unit Tests ----------- - -Unit tests are probably not 'true unit tests' for the pedantic, but -are pragmatic unit tests. They cover small practicle code blocks: -functions, class methods, and groups of functions and class methods. - -System Integration Tests ------------------------- - -NOTE(bja, 2017-11) The systems integration tests currently do not include svn repositories. - -The manage_externals package is extremely tedious and error prone to test manually. - -Combinations that must be tested to ensure basic functionality are: - -* container repository pulling in simple externals - -* container repository pulling in mixed externals with sub-externals. - -* mixed repository acting as a container, pulling in simple externals and sub-externals - -Automatic system tests are handled the same way manual testing is done: - -* clone a test repository - -* create an externals description file for the test - -* run the executable with the desired args - -* check the results - -* potentially modify the repo (checkout a different branch) - -* rerun and test - -* etc - -The automated system stores small test repositories in the main repo -by adding them as bare repositories. These repos are cloned via a -subprocess call to git and manipulated during the tests. diff --git a/manage_externals/test/repos/container.git/HEAD b/manage_externals/test/repos/container.git/HEAD deleted file mode 100644 index cb089cd89..000000000 --- a/manage_externals/test/repos/container.git/HEAD +++ /dev/null @@ -1 +0,0 @@ -ref: refs/heads/master diff --git a/manage_externals/test/repos/container.git/config b/manage_externals/test/repos/container.git/config deleted file mode 100644 index e6da23157..000000000 --- a/manage_externals/test/repos/container.git/config +++ /dev/null @@ -1,6 +0,0 @@ -[core] - repositoryformatversion = 0 - filemode = true - bare = true - ignorecase = true - precomposeunicode = true diff --git a/manage_externals/test/repos/container.git/description b/manage_externals/test/repos/container.git/description deleted file mode 100644 index 498b267a8..000000000 --- a/manage_externals/test/repos/container.git/description +++ /dev/null @@ -1 +0,0 @@ -Unnamed repository; edit this file 'description' to name the repository. diff --git a/manage_externals/test/repos/container.git/info/exclude b/manage_externals/test/repos/container.git/info/exclude deleted file mode 100644 index a5196d1be..000000000 --- a/manage_externals/test/repos/container.git/info/exclude +++ /dev/null @@ -1,6 +0,0 @@ -# git ls-files --others --exclude-from=.git/info/exclude -# Lines that start with '#' are comments. -# For a project mostly in C, the following would be a good set of -# exclude patterns (uncomment them if you want to use them): -# *.[oa] -# *~ diff --git a/manage_externals/test/repos/container.git/objects/41/1de5d96ee418c1c55f3e96e6e6e7c06bb95801 b/manage_externals/test/repos/container.git/objects/41/1de5d96ee418c1c55f3e96e6e6e7c06bb95801 deleted file mode 100644 index f65234e17..000000000 Binary files a/manage_externals/test/repos/container.git/objects/41/1de5d96ee418c1c55f3e96e6e6e7c06bb95801 and /dev/null differ diff --git a/manage_externals/test/repos/container.git/objects/71/5b8f3e4afe1802a178e1d603af404ba45d59de b/manage_externals/test/repos/container.git/objects/71/5b8f3e4afe1802a178e1d603af404ba45d59de deleted file mode 100644 index 9759965b1..000000000 Binary files a/manage_externals/test/repos/container.git/objects/71/5b8f3e4afe1802a178e1d603af404ba45d59de and /dev/null differ diff --git a/manage_externals/test/repos/container.git/objects/b0/f87705e2b9601cb831878f3d51efa78b910d7b b/manage_externals/test/repos/container.git/objects/b0/f87705e2b9601cb831878f3d51efa78b910d7b deleted file mode 100644 index d9976cc44..000000000 Binary files a/manage_externals/test/repos/container.git/objects/b0/f87705e2b9601cb831878f3d51efa78b910d7b and /dev/null differ diff --git a/manage_externals/test/repos/container.git/objects/f9/e08370a737e941de6f6492e3f427c2ef4c1a03 b/manage_externals/test/repos/container.git/objects/f9/e08370a737e941de6f6492e3f427c2ef4c1a03 deleted file mode 100644 index 460fd7781..000000000 Binary files a/manage_externals/test/repos/container.git/objects/f9/e08370a737e941de6f6492e3f427c2ef4c1a03 and /dev/null differ diff --git a/manage_externals/test/repos/container.git/refs/heads/master b/manage_externals/test/repos/container.git/refs/heads/master deleted file mode 100644 index 3ae00f3af..000000000 --- a/manage_externals/test/repos/container.git/refs/heads/master +++ /dev/null @@ -1 +0,0 @@ -715b8f3e4afe1802a178e1d603af404ba45d59de diff --git a/manage_externals/test/repos/error/readme.txt b/manage_externals/test/repos/error/readme.txt deleted file mode 100644 index 6b5753377..000000000 --- a/manage_externals/test/repos/error/readme.txt +++ /dev/null @@ -1,3 +0,0 @@ -Invalid or corrupted git repository (.git dir exists, but is empty) for error -testing. - diff --git a/manage_externals/test/repos/mixed-cont-ext.git/HEAD b/manage_externals/test/repos/mixed-cont-ext.git/HEAD deleted file mode 100644 index cb089cd89..000000000 --- a/manage_externals/test/repos/mixed-cont-ext.git/HEAD +++ /dev/null @@ -1 +0,0 @@ -ref: refs/heads/master diff --git a/manage_externals/test/repos/mixed-cont-ext.git/config b/manage_externals/test/repos/mixed-cont-ext.git/config deleted file mode 100644 index e6da23157..000000000 --- a/manage_externals/test/repos/mixed-cont-ext.git/config +++ /dev/null @@ -1,6 +0,0 @@ -[core] - repositoryformatversion = 0 - filemode = true - bare = true - ignorecase = true - precomposeunicode = true diff --git a/manage_externals/test/repos/mixed-cont-ext.git/description b/manage_externals/test/repos/mixed-cont-ext.git/description deleted file mode 100644 index 498b267a8..000000000 --- a/manage_externals/test/repos/mixed-cont-ext.git/description +++ /dev/null @@ -1 +0,0 @@ -Unnamed repository; edit this file 'description' to name the repository. diff --git a/manage_externals/test/repos/mixed-cont-ext.git/info/exclude b/manage_externals/test/repos/mixed-cont-ext.git/info/exclude deleted file mode 100644 index a5196d1be..000000000 --- a/manage_externals/test/repos/mixed-cont-ext.git/info/exclude +++ /dev/null @@ -1,6 +0,0 @@ -# git ls-files --others --exclude-from=.git/info/exclude -# Lines that start with '#' are comments. -# For a project mostly in C, the following would be a good set of -# exclude patterns (uncomment them if you want to use them): -# *.[oa] -# *~ diff --git a/manage_externals/test/repos/mixed-cont-ext.git/objects/00/437ac2000d5f06fb8a572a01a5bbdae98b17cb b/manage_externals/test/repos/mixed-cont-ext.git/objects/00/437ac2000d5f06fb8a572a01a5bbdae98b17cb deleted file mode 100644 index 145a6990a..000000000 Binary files a/manage_externals/test/repos/mixed-cont-ext.git/objects/00/437ac2000d5f06fb8a572a01a5bbdae98b17cb and /dev/null differ diff --git a/manage_externals/test/repos/mixed-cont-ext.git/objects/01/97458f2dbe5fcd6bc44fa46983be0a30282379 b/manage_externals/test/repos/mixed-cont-ext.git/objects/01/97458f2dbe5fcd6bc44fa46983be0a30282379 deleted file mode 100644 index 032f4b1ca..000000000 Binary files a/manage_externals/test/repos/mixed-cont-ext.git/objects/01/97458f2dbe5fcd6bc44fa46983be0a30282379 and /dev/null differ diff --git a/manage_externals/test/repos/mixed-cont-ext.git/objects/06/ea30b03ffa2f8574705f8b9583f7ca7e2dccf7 b/manage_externals/test/repos/mixed-cont-ext.git/objects/06/ea30b03ffa2f8574705f8b9583f7ca7e2dccf7 deleted file mode 100644 index 13d15a96a..000000000 Binary files a/manage_externals/test/repos/mixed-cont-ext.git/objects/06/ea30b03ffa2f8574705f8b9583f7ca7e2dccf7 and /dev/null differ diff --git a/manage_externals/test/repos/mixed-cont-ext.git/objects/14/368b701616a8c53820b610414a4b9a07540cf6 b/manage_externals/test/repos/mixed-cont-ext.git/objects/14/368b701616a8c53820b610414a4b9a07540cf6 deleted file mode 100644 index 53c4e79ed..000000000 --- a/manage_externals/test/repos/mixed-cont-ext.git/objects/14/368b701616a8c53820b610414a4b9a07540cf6 +++ /dev/null @@ -1 +0,0 @@ -x50S0A1FMWiRh-iitjz h#F+|m"rFd <;s̱۬OEQE}TLU<,9}]IiP. 9ze vA$8#DK \ No newline at end of file diff --git a/manage_externals/test/repos/mixed-cont-ext.git/objects/15/2b57e1cf23721cd17ff681cb9276e3fb9fc091 b/manage_externals/test/repos/mixed-cont-ext.git/objects/15/2b57e1cf23721cd17ff681cb9276e3fb9fc091 deleted file mode 100644 index d09c006f0..000000000 --- a/manage_externals/test/repos/mixed-cont-ext.git/objects/15/2b57e1cf23721cd17ff681cb9276e3fb9fc091 +++ /dev/null @@ -1,2 +0,0 @@ -xKn0 )xEӛP"eCuzb0Su)!h9.!<ے,s$P0/f.M_ɅKjc٧$03Ytz:|HK.p缏BUxzL`N2M2J]K۾># -MPtM0v&>Kci8V; \ No newline at end of file diff --git a/manage_externals/test/repos/mixed-cont-ext.git/objects/1f/01fa46c17b1f38b37e6259f6e9d041bda3144f b/manage_externals/test/repos/mixed-cont-ext.git/objects/1f/01fa46c17b1f38b37e6259f6e9d041bda3144f deleted file mode 100644 index 7bacde68d..000000000 Binary files a/manage_externals/test/repos/mixed-cont-ext.git/objects/1f/01fa46c17b1f38b37e6259f6e9d041bda3144f and /dev/null differ diff --git a/manage_externals/test/repos/mixed-cont-ext.git/objects/37/f0e70b609adc90f4c09ee21d82ed1d79c81d69 b/manage_externals/test/repos/mixed-cont-ext.git/objects/37/f0e70b609adc90f4c09ee21d82ed1d79c81d69 deleted file mode 100644 index 8c6b04837..000000000 Binary files a/manage_externals/test/repos/mixed-cont-ext.git/objects/37/f0e70b609adc90f4c09ee21d82ed1d79c81d69 and /dev/null differ diff --git a/manage_externals/test/repos/mixed-cont-ext.git/objects/38/9a2b876b8965d3c91a3db8d28a483eaf019d5c b/manage_externals/test/repos/mixed-cont-ext.git/objects/38/9a2b876b8965d3c91a3db8d28a483eaf019d5c deleted file mode 100644 index 1a35b74d4..000000000 Binary files a/manage_externals/test/repos/mixed-cont-ext.git/objects/38/9a2b876b8965d3c91a3db8d28a483eaf019d5c and /dev/null differ diff --git a/manage_externals/test/repos/mixed-cont-ext.git/objects/41/1de5d96ee418c1c55f3e96e6e6e7c06bb95801 b/manage_externals/test/repos/mixed-cont-ext.git/objects/41/1de5d96ee418c1c55f3e96e6e6e7c06bb95801 deleted file mode 100644 index f65234e17..000000000 Binary files a/manage_externals/test/repos/mixed-cont-ext.git/objects/41/1de5d96ee418c1c55f3e96e6e6e7c06bb95801 and /dev/null differ diff --git a/manage_externals/test/repos/mixed-cont-ext.git/objects/6e/9f4baa6e94a0af4e094836c2eb55ccedef5fc4 b/manage_externals/test/repos/mixed-cont-ext.git/objects/6e/9f4baa6e94a0af4e094836c2eb55ccedef5fc4 deleted file mode 100644 index 6b2146cae..000000000 Binary files a/manage_externals/test/repos/mixed-cont-ext.git/objects/6e/9f4baa6e94a0af4e094836c2eb55ccedef5fc4 and /dev/null differ diff --git a/manage_externals/test/repos/mixed-cont-ext.git/objects/6f/c379457ecb4e576a13c7610ae1fa73f845ee6a b/manage_externals/test/repos/mixed-cont-ext.git/objects/6f/c379457ecb4e576a13c7610ae1fa73f845ee6a deleted file mode 100644 index 852a05113..000000000 --- a/manage_externals/test/repos/mixed-cont-ext.git/objects/6f/c379457ecb4e576a13c7610ae1fa73f845ee6a +++ /dev/null @@ -1 +0,0 @@ -xAN09sʎ;~2J^M,'8ԝھ_yyR3؍lmvƕPBFC>y*bla-n^]D,xfv2p׭ }GzxNvq~Zc y+QTt;]C:AgA( XAG*=i\_^' \ No newline at end of file diff --git a/manage_externals/test/repos/mixed-cont-ext.git/objects/93/a159deb9175bfeb2820a0006ddd92d78131332 b/manage_externals/test/repos/mixed-cont-ext.git/objects/93/a159deb9175bfeb2820a0006ddd92d78131332 deleted file mode 100644 index 682d79989..000000000 Binary files a/manage_externals/test/repos/mixed-cont-ext.git/objects/93/a159deb9175bfeb2820a0006ddd92d78131332 and /dev/null differ diff --git a/manage_externals/test/repos/mixed-cont-ext.git/objects/95/80ecc12f16334ce44e42287d5d46f927bb7b75 b/manage_externals/test/repos/mixed-cont-ext.git/objects/95/80ecc12f16334ce44e42287d5d46f927bb7b75 deleted file mode 100644 index 33c9f6cdf..000000000 --- a/manage_externals/test/repos/mixed-cont-ext.git/objects/95/80ecc12f16334ce44e42287d5d46f927bb7b75 +++ /dev/null @@ -1 +0,0 @@ -xKN0YcȟLlK7鴟5#{OzғmW%ӓv8&eFٱ$/UɞzRJ%ZY |YSC/'*}A7Cۑϋ1^L0f7c b/Jo5-Ů;҅AH:XADZ:ڇ8M^ \ No newline at end of file diff --git a/manage_externals/test/repos/mixed-cont-ext.git/objects/a9/288dcd8a719a1f4ed3cba43a2a387ae7cd60fd b/manage_externals/test/repos/mixed-cont-ext.git/objects/a9/288dcd8a719a1f4ed3cba43a2a387ae7cd60fd deleted file mode 100644 index 73e7cbfbc..000000000 Binary files a/manage_externals/test/repos/mixed-cont-ext.git/objects/a9/288dcd8a719a1f4ed3cba43a2a387ae7cd60fd and /dev/null differ diff --git a/manage_externals/test/repos/mixed-cont-ext.git/objects/e8/ea32a11d30ee703f6f661ae7c2376f4ab84d38 b/manage_externals/test/repos/mixed-cont-ext.git/objects/e8/ea32a11d30ee703f6f661ae7c2376f4ab84d38 deleted file mode 100644 index 189ed85bb..000000000 Binary files a/manage_externals/test/repos/mixed-cont-ext.git/objects/e8/ea32a11d30ee703f6f661ae7c2376f4ab84d38 and /dev/null differ diff --git a/manage_externals/test/repos/mixed-cont-ext.git/objects/fd/15a5ad5204356229c60a831d2a8120a43ac901 b/manage_externals/test/repos/mixed-cont-ext.git/objects/fd/15a5ad5204356229c60a831d2a8120a43ac901 deleted file mode 100644 index 619e38ee7..000000000 --- a/manage_externals/test/repos/mixed-cont-ext.git/objects/fd/15a5ad5204356229c60a831d2a8120a43ac901 +++ /dev/null @@ -1,2 +0,0 @@ -x=;0 :v =rJf`) noW)zgA >.pA -! w4ݵQ=äZ90k G)* \ No newline at end of file diff --git a/manage_externals/test/repos/mixed-cont-ext.git/refs/heads/master b/manage_externals/test/repos/mixed-cont-ext.git/refs/heads/master deleted file mode 100644 index 1e0eef1ea..000000000 --- a/manage_externals/test/repos/mixed-cont-ext.git/refs/heads/master +++ /dev/null @@ -1 +0,0 @@ -6fc379457ecb4e576a13c7610ae1fa73f845ee6a diff --git a/manage_externals/test/repos/mixed-cont-ext.git/refs/heads/new-feature b/manage_externals/test/repos/mixed-cont-ext.git/refs/heads/new-feature deleted file mode 100644 index 607e80d1b..000000000 --- a/manage_externals/test/repos/mixed-cont-ext.git/refs/heads/new-feature +++ /dev/null @@ -1 +0,0 @@ -9580ecc12f16334ce44e42287d5d46f927bb7b75 diff --git a/manage_externals/test/repos/simple-ext-fork.git/HEAD b/manage_externals/test/repos/simple-ext-fork.git/HEAD deleted file mode 100644 index cb089cd89..000000000 --- a/manage_externals/test/repos/simple-ext-fork.git/HEAD +++ /dev/null @@ -1 +0,0 @@ -ref: refs/heads/master diff --git a/manage_externals/test/repos/simple-ext-fork.git/config b/manage_externals/test/repos/simple-ext-fork.git/config deleted file mode 100644 index 04eba1787..000000000 --- a/manage_externals/test/repos/simple-ext-fork.git/config +++ /dev/null @@ -1,8 +0,0 @@ -[core] - repositoryformatversion = 0 - filemode = true - bare = true - ignorecase = true - precomposeunicode = true -[remote "origin"] - url = /Users/andreb/projects/ncar/git-conversion/checkout-model-dev/cesm-demo-externals/manage_externals/test/repos/simple-ext.git diff --git a/manage_externals/test/repos/simple-ext-fork.git/description b/manage_externals/test/repos/simple-ext-fork.git/description deleted file mode 100644 index 498b267a8..000000000 --- a/manage_externals/test/repos/simple-ext-fork.git/description +++ /dev/null @@ -1 +0,0 @@ -Unnamed repository; edit this file 'description' to name the repository. diff --git a/manage_externals/test/repos/simple-ext-fork.git/info/exclude b/manage_externals/test/repos/simple-ext-fork.git/info/exclude deleted file mode 100644 index a5196d1be..000000000 --- a/manage_externals/test/repos/simple-ext-fork.git/info/exclude +++ /dev/null @@ -1,6 +0,0 @@ -# git ls-files --others --exclude-from=.git/info/exclude -# Lines that start with '#' are comments. -# For a project mostly in C, the following would be a good set of -# exclude patterns (uncomment them if you want to use them): -# *.[oa] -# *~ diff --git a/manage_externals/test/repos/simple-ext-fork.git/objects/00/fd13e76189f9134b0506b4b8ed3172723b467f b/manage_externals/test/repos/simple-ext-fork.git/objects/00/fd13e76189f9134b0506b4b8ed3172723b467f deleted file mode 100644 index ae28c037e..000000000 Binary files a/manage_externals/test/repos/simple-ext-fork.git/objects/00/fd13e76189f9134b0506b4b8ed3172723b467f and /dev/null differ diff --git a/manage_externals/test/repos/simple-ext-fork.git/objects/0b/15e8af3d4615b42314216efeae3fff184046a8 b/manage_externals/test/repos/simple-ext-fork.git/objects/0b/15e8af3d4615b42314216efeae3fff184046a8 deleted file mode 100644 index 32d6896e3..000000000 Binary files a/manage_externals/test/repos/simple-ext-fork.git/objects/0b/15e8af3d4615b42314216efeae3fff184046a8 and /dev/null differ diff --git a/manage_externals/test/repos/simple-ext-fork.git/objects/0b/67df4e7e8e6e1c6e401542738b352d18744677 b/manage_externals/test/repos/simple-ext-fork.git/objects/0b/67df4e7e8e6e1c6e401542738b352d18744677 deleted file mode 100644 index db51ce195..000000000 Binary files a/manage_externals/test/repos/simple-ext-fork.git/objects/0b/67df4e7e8e6e1c6e401542738b352d18744677 and /dev/null differ diff --git a/manage_externals/test/repos/simple-ext-fork.git/objects/11/a76e3d9a67313dec7ce1230852ab5c86352c5c b/manage_externals/test/repos/simple-ext-fork.git/objects/11/a76e3d9a67313dec7ce1230852ab5c86352c5c deleted file mode 100644 index 564e7bba6..000000000 --- a/manage_externals/test/repos/simple-ext-fork.git/objects/11/a76e3d9a67313dec7ce1230852ab5c86352c5c +++ /dev/null @@ -1,2 +0,0 @@ -x%K -0@]se&DԛL!l).u.@_J0lM~v:mLiY*/@p W J&)* \ No newline at end of file diff --git a/manage_externals/test/repos/simple-ext-fork.git/objects/16/5506a7408a482f50493434e13fffeb44af893f b/manage_externals/test/repos/simple-ext-fork.git/objects/16/5506a7408a482f50493434e13fffeb44af893f deleted file mode 100644 index 0d738af68..000000000 Binary files a/manage_externals/test/repos/simple-ext-fork.git/objects/16/5506a7408a482f50493434e13fffeb44af893f and /dev/null differ diff --git a/manage_externals/test/repos/simple-ext-fork.git/objects/24/4386e788c9bc608613e127a329c742450a60e4 b/manage_externals/test/repos/simple-ext-fork.git/objects/24/4386e788c9bc608613e127a329c742450a60e4 deleted file mode 100644 index b6284f841..000000000 Binary files a/manage_externals/test/repos/simple-ext-fork.git/objects/24/4386e788c9bc608613e127a329c742450a60e4 and /dev/null differ diff --git a/manage_externals/test/repos/simple-ext-fork.git/objects/32/7e97d86e941047d809dba58f2804740c6c30cf b/manage_externals/test/repos/simple-ext-fork.git/objects/32/7e97d86e941047d809dba58f2804740c6c30cf deleted file mode 100644 index 0999f0d4b..000000000 Binary files a/manage_externals/test/repos/simple-ext-fork.git/objects/32/7e97d86e941047d809dba58f2804740c6c30cf and /dev/null differ diff --git a/manage_externals/test/repos/simple-ext-fork.git/objects/36/418b4e5665956a90725c9a1b5a8e551c5f3d48 b/manage_externals/test/repos/simple-ext-fork.git/objects/36/418b4e5665956a90725c9a1b5a8e551c5f3d48 deleted file mode 100644 index 9da8434f6..000000000 Binary files a/manage_externals/test/repos/simple-ext-fork.git/objects/36/418b4e5665956a90725c9a1b5a8e551c5f3d48 and /dev/null differ diff --git a/manage_externals/test/repos/simple-ext-fork.git/objects/3d/7099c35404ae6c8640ce263b38bef06e98cc26 b/manage_externals/test/repos/simple-ext-fork.git/objects/3d/7099c35404ae6c8640ce263b38bef06e98cc26 deleted file mode 100644 index 22065ba54..000000000 --- a/manage_externals/test/repos/simple-ext-fork.git/objects/3d/7099c35404ae6c8640ce263b38bef06e98cc26 +++ /dev/null @@ -1,2 +0,0 @@ -xmQ -0EQq $LހO_* t0J8͡bE?؋g4Nmbag[b{_Ic>`}0M؇Bs0/}:: \ No newline at end of file diff --git a/manage_externals/test/repos/simple-ext-fork.git/objects/3d/ec1fdf8e2f5edba28148c5db2fe8d7a842360b b/manage_externals/test/repos/simple-ext-fork.git/objects/3d/ec1fdf8e2f5edba28148c5db2fe8d7a842360b deleted file mode 100644 index 9a31c7ef2..000000000 --- a/manage_externals/test/repos/simple-ext-fork.git/objects/3d/ec1fdf8e2f5edba28148c5db2fe8d7a842360b +++ /dev/null @@ -1,2 +0,0 @@ -xKn0 )x,IEџA#t7o۶vp.zS&od8xLd@̋C6f% -pt$m&JdhݗVxp7^/o7dK1GDs#뿏{o?Z 7,\grPkSkJ^ \ No newline at end of file diff --git a/manage_externals/test/repos/simple-ext-fork.git/objects/a4/2fe9144f5707bc1e9515ce1b44681f7aba6f95 b/manage_externals/test/repos/simple-ext-fork.git/objects/a4/2fe9144f5707bc1e9515ce1b44681f7aba6f95 deleted file mode 100644 index d8ba65454..000000000 --- a/manage_externals/test/repos/simple-ext-fork.git/objects/a4/2fe9144f5707bc1e9515ce1b44681f7aba6f95 +++ /dev/null @@ -1,3 +0,0 @@ -xU[ -0a@%Is+;c/DqV> wWJ ژ>8!!&'S=)CF+I2OTs^Xn`2Bcw'w -\NqݛF)83(2:0x-<׍!6,i 9 \ No newline at end of file diff --git a/manage_externals/test/repos/simple-ext-fork.git/objects/b9/3737be3ea6b19f6255983748a0a0f4d622f936 b/manage_externals/test/repos/simple-ext-fork.git/objects/b9/3737be3ea6b19f6255983748a0a0f4d622f936 deleted file mode 100644 index 9b40a0afa..000000000 Binary files a/manage_externals/test/repos/simple-ext-fork.git/objects/b9/3737be3ea6b19f6255983748a0a0f4d622f936 and /dev/null differ diff --git a/manage_externals/test/repos/simple-ext-fork.git/objects/c5/32bc8fde96fa63103a52057f0baffcc9f00c6b b/manage_externals/test/repos/simple-ext-fork.git/objects/c5/32bc8fde96fa63103a52057f0baffcc9f00c6b deleted file mode 100644 index 3019d2bac..000000000 --- a/manage_externals/test/repos/simple-ext-fork.git/objects/c5/32bc8fde96fa63103a52057f0baffcc9f00c6b +++ /dev/null @@ -1 +0,0 @@ -x5 Dќb*dni Yl YX%bۖ,`W8 .G&ר-T$vڳp,=:-O}3u:]8慴k{|0 \ No newline at end of file diff --git a/manage_externals/test/repos/simple-ext-fork.git/objects/c5/b315915742133dbdfbeed0753e481b55c1d364 b/manage_externals/test/repos/simple-ext-fork.git/objects/c5/b315915742133dbdfbeed0753e481b55c1d364 deleted file mode 100644 index 1d27accb5..000000000 --- a/manage_externals/test/repos/simple-ext-fork.git/objects/c5/b315915742133dbdfbeed0753e481b55c1d364 +++ /dev/null @@ -1 +0,0 @@ -x @TeV`p ;vɼ&מi+b%Ns(G7/nǩ-UlGjV&Y+!| \ No newline at end of file diff --git a/manage_externals/test/repos/simple-ext-fork.git/objects/f2/68d4e56d067da9bd1d85e55bdc40a8bd2b0bca b/manage_externals/test/repos/simple-ext-fork.git/objects/f2/68d4e56d067da9bd1d85e55bdc40a8bd2b0bca deleted file mode 100644 index 3e945cdeb..000000000 --- a/manage_externals/test/repos/simple-ext-fork.git/objects/f2/68d4e56d067da9bd1d85e55bdc40a8bd2b0bca +++ /dev/null @@ -1 +0,0 @@ -x 1ENӀcf+cFBw-ˁù2v0mzO^4rv7"̉z&sb$>D}D>Nv{ZMI?jps8gӽqڥZqo jfJ{]յOm/3$Q_@H \ No newline at end of file diff --git a/manage_externals/test/repos/simple-ext-fork.git/packed-refs b/manage_externals/test/repos/simple-ext-fork.git/packed-refs deleted file mode 100644 index b8f9e8630..000000000 --- a/manage_externals/test/repos/simple-ext-fork.git/packed-refs +++ /dev/null @@ -1,5 +0,0 @@ -# pack-refs with: peeled fully-peeled sorted -36418b4e5665956a90725c9a1b5a8e551c5f3d48 refs/heads/feature2 -9b75494003deca69527bb64bcaa352e801611dd2 refs/heads/master -11a76e3d9a67313dec7ce1230852ab5c86352c5c refs/tags/tag1 -^9b75494003deca69527bb64bcaa352e801611dd2 diff --git a/manage_externals/test/repos/simple-ext-fork.git/refs/heads/feature2 b/manage_externals/test/repos/simple-ext-fork.git/refs/heads/feature2 deleted file mode 100644 index d223b0362..000000000 --- a/manage_externals/test/repos/simple-ext-fork.git/refs/heads/feature2 +++ /dev/null @@ -1 +0,0 @@ -f268d4e56d067da9bd1d85e55bdc40a8bd2b0bca diff --git a/manage_externals/test/repos/simple-ext-fork.git/refs/tags/abandoned-feature b/manage_externals/test/repos/simple-ext-fork.git/refs/tags/abandoned-feature deleted file mode 100644 index 8a18bf08e..000000000 --- a/manage_externals/test/repos/simple-ext-fork.git/refs/tags/abandoned-feature +++ /dev/null @@ -1 +0,0 @@ -a42fe9144f5707bc1e9515ce1b44681f7aba6f95 diff --git a/manage_externals/test/repos/simple-ext-fork.git/refs/tags/forked-feature-v1 b/manage_externals/test/repos/simple-ext-fork.git/refs/tags/forked-feature-v1 deleted file mode 100644 index 2764b552d..000000000 --- a/manage_externals/test/repos/simple-ext-fork.git/refs/tags/forked-feature-v1 +++ /dev/null @@ -1 +0,0 @@ -8d2b3b35126224c975d23f109aa1e3cbac452989 diff --git a/manage_externals/test/repos/simple-ext.git/HEAD b/manage_externals/test/repos/simple-ext.git/HEAD deleted file mode 100644 index cb089cd89..000000000 --- a/manage_externals/test/repos/simple-ext.git/HEAD +++ /dev/null @@ -1 +0,0 @@ -ref: refs/heads/master diff --git a/manage_externals/test/repos/simple-ext.git/config b/manage_externals/test/repos/simple-ext.git/config deleted file mode 100644 index e6da23157..000000000 --- a/manage_externals/test/repos/simple-ext.git/config +++ /dev/null @@ -1,6 +0,0 @@ -[core] - repositoryformatversion = 0 - filemode = true - bare = true - ignorecase = true - precomposeunicode = true diff --git a/manage_externals/test/repos/simple-ext.git/description b/manage_externals/test/repos/simple-ext.git/description deleted file mode 100644 index 498b267a8..000000000 --- a/manage_externals/test/repos/simple-ext.git/description +++ /dev/null @@ -1 +0,0 @@ -Unnamed repository; edit this file 'description' to name the repository. diff --git a/manage_externals/test/repos/simple-ext.git/info/exclude b/manage_externals/test/repos/simple-ext.git/info/exclude deleted file mode 100644 index a5196d1be..000000000 --- a/manage_externals/test/repos/simple-ext.git/info/exclude +++ /dev/null @@ -1,6 +0,0 @@ -# git ls-files --others --exclude-from=.git/info/exclude -# Lines that start with '#' are comments. -# For a project mostly in C, the following would be a good set of -# exclude patterns (uncomment them if you want to use them): -# *.[oa] -# *~ diff --git a/manage_externals/test/repos/simple-ext.git/objects/00/fd13e76189f9134b0506b4b8ed3172723b467f b/manage_externals/test/repos/simple-ext.git/objects/00/fd13e76189f9134b0506b4b8ed3172723b467f deleted file mode 100644 index ae28c037e..000000000 Binary files a/manage_externals/test/repos/simple-ext.git/objects/00/fd13e76189f9134b0506b4b8ed3172723b467f and /dev/null differ diff --git a/manage_externals/test/repos/simple-ext.git/objects/09/0e1034746b2c865f7b0280813dbf4061a700e8 b/manage_externals/test/repos/simple-ext.git/objects/09/0e1034746b2c865f7b0280813dbf4061a700e8 deleted file mode 100644 index e5255047b..000000000 Binary files a/manage_externals/test/repos/simple-ext.git/objects/09/0e1034746b2c865f7b0280813dbf4061a700e8 and /dev/null differ diff --git a/manage_externals/test/repos/simple-ext.git/objects/0b/15e8af3d4615b42314216efeae3fff184046a8 b/manage_externals/test/repos/simple-ext.git/objects/0b/15e8af3d4615b42314216efeae3fff184046a8 deleted file mode 100644 index 32d6896e3..000000000 Binary files a/manage_externals/test/repos/simple-ext.git/objects/0b/15e8af3d4615b42314216efeae3fff184046a8 and /dev/null differ diff --git a/manage_externals/test/repos/simple-ext.git/objects/11/a76e3d9a67313dec7ce1230852ab5c86352c5c b/manage_externals/test/repos/simple-ext.git/objects/11/a76e3d9a67313dec7ce1230852ab5c86352c5c deleted file mode 100644 index 564e7bba6..000000000 --- a/manage_externals/test/repos/simple-ext.git/objects/11/a76e3d9a67313dec7ce1230852ab5c86352c5c +++ /dev/null @@ -1,2 +0,0 @@ -x%K -0@]se&DԛL!l).u.@_J0lM~v:mLiY*/@p W J&)* \ No newline at end of file diff --git a/manage_externals/test/repos/simple-ext.git/objects/31/dbcd6de441e671a467ef317146539b7ffabb11 b/manage_externals/test/repos/simple-ext.git/objects/31/dbcd6de441e671a467ef317146539b7ffabb11 deleted file mode 100644 index 0f0db6797..000000000 Binary files a/manage_externals/test/repos/simple-ext.git/objects/31/dbcd6de441e671a467ef317146539b7ffabb11 and /dev/null differ diff --git a/manage_externals/test/repos/simple-ext.git/objects/36/418b4e5665956a90725c9a1b5a8e551c5f3d48 b/manage_externals/test/repos/simple-ext.git/objects/36/418b4e5665956a90725c9a1b5a8e551c5f3d48 deleted file mode 100644 index 9da8434f6..000000000 Binary files a/manage_externals/test/repos/simple-ext.git/objects/36/418b4e5665956a90725c9a1b5a8e551c5f3d48 and /dev/null differ diff --git a/manage_externals/test/repos/simple-ext.git/objects/41/1de5d96ee418c1c55f3e96e6e6e7c06bb95801 b/manage_externals/test/repos/simple-ext.git/objects/41/1de5d96ee418c1c55f3e96e6e6e7c06bb95801 deleted file mode 100644 index f65234e17..000000000 Binary files a/manage_externals/test/repos/simple-ext.git/objects/41/1de5d96ee418c1c55f3e96e6e6e7c06bb95801 and /dev/null differ diff --git a/manage_externals/test/repos/simple-ext.git/objects/60/b1cc1a38d63a4bcaa1e767262bbe23dbf9f5f5 b/manage_externals/test/repos/simple-ext.git/objects/60/b1cc1a38d63a4bcaa1e767262bbe23dbf9f5f5 deleted file mode 100644 index 68a86c24e..000000000 --- a/manage_externals/test/repos/simple-ext.git/objects/60/b1cc1a38d63a4bcaa1e767262bbe23dbf9f5f5 +++ /dev/null @@ -1,2 +0,0 @@ -xQ {XXdc7Y`ۚo=/3uoPw6YB9MĜc&iښy˦KK9() -Raq$)+| ȧ nMᜟik(|GFkN{]X+, xoC# \ No newline at end of file diff --git a/manage_externals/test/repos/simple-ext.git/objects/63/a99393d1baff97ccef967af30380659867b139 b/manage_externals/test/repos/simple-ext.git/objects/63/a99393d1baff97ccef967af30380659867b139 deleted file mode 100644 index efe17af8f..000000000 --- a/manage_externals/test/repos/simple-ext.git/objects/63/a99393d1baff97ccef967af30380659867b139 +++ /dev/null @@ -1 +0,0 @@ -x5 B1=W b@bf!7dWE0LVmýc᲏N=09%l~hP?rPkևЏ)]5yB.mg4ns$* \ No newline at end of file diff --git a/manage_externals/test/repos/simple-ext.git/objects/95/3256da5612fcd9263590a353bc18c6f224e74f b/manage_externals/test/repos/simple-ext.git/objects/95/3256da5612fcd9263590a353bc18c6f224e74f deleted file mode 100644 index 618762862..000000000 --- a/manage_externals/test/repos/simple-ext.git/objects/95/3256da5612fcd9263590a353bc18c6f224e74f +++ /dev/null @@ -1 +0,0 @@ -x ʱ 0 DԚ&HeO$Edd/] lXe\A7h#wTN){Js-k)=jh2^kH$ \ No newline at end of file diff --git a/manage_externals/test/repos/simple-ext.git/objects/9b/75494003deca69527bb64bcaa352e801611dd2 b/manage_externals/test/repos/simple-ext.git/objects/9b/75494003deca69527bb64bcaa352e801611dd2 deleted file mode 100644 index ba1b51f51..000000000 Binary files a/manage_externals/test/repos/simple-ext.git/objects/9b/75494003deca69527bb64bcaa352e801611dd2 and /dev/null differ diff --git a/manage_externals/test/repos/simple-ext.git/objects/a2/2a5da9119328ea6d693f88861457c07e14ac04 b/manage_externals/test/repos/simple-ext.git/objects/a2/2a5da9119328ea6d693f88861457c07e14ac04 deleted file mode 100644 index fb5feb96c..000000000 --- a/manage_externals/test/repos/simple-ext.git/objects/a2/2a5da9119328ea6d693f88861457c07e14ac04 +++ /dev/null @@ -1 +0,0 @@ -x 0 @;ś?Z&nǕnM kt"a.a-Ѡ>rPkSkJ^ \ No newline at end of file diff --git a/manage_externals/test/repos/simple-ext.git/objects/c5/b315915742133dbdfbeed0753e481b55c1d364 b/manage_externals/test/repos/simple-ext.git/objects/c5/b315915742133dbdfbeed0753e481b55c1d364 deleted file mode 100644 index 1d27accb5..000000000 --- a/manage_externals/test/repos/simple-ext.git/objects/c5/b315915742133dbdfbeed0753e481b55c1d364 +++ /dev/null @@ -1 +0,0 @@ -x @TeV`p ;vɼ&מi+b%Ns(G7/nǩ-UlGjV&Y+!| \ No newline at end of file diff --git a/manage_externals/test/repos/simple-ext.git/objects/df/312890f93ba4d2c694208599b665c4a08afeff b/manage_externals/test/repos/simple-ext.git/objects/df/312890f93ba4d2c694208599b665c4a08afeff deleted file mode 100644 index 4018ea591..000000000 Binary files a/manage_externals/test/repos/simple-ext.git/objects/df/312890f93ba4d2c694208599b665c4a08afeff and /dev/null differ diff --git a/manage_externals/test/repos/simple-ext.git/refs/heads/feature2 b/manage_externals/test/repos/simple-ext.git/refs/heads/feature2 deleted file mode 100644 index 01a0dd6e2..000000000 --- a/manage_externals/test/repos/simple-ext.git/refs/heads/feature2 +++ /dev/null @@ -1 +0,0 @@ -36418b4e5665956a90725c9a1b5a8e551c5f3d48 diff --git a/manage_externals/test/repos/simple-ext.git/refs/heads/feature3 b/manage_externals/test/repos/simple-ext.git/refs/heads/feature3 deleted file mode 100644 index dd24079fc..000000000 --- a/manage_externals/test/repos/simple-ext.git/refs/heads/feature3 +++ /dev/null @@ -1 +0,0 @@ -090e1034746b2c865f7b0280813dbf4061a700e8 diff --git a/manage_externals/test/repos/simple-ext.git/refs/heads/master b/manage_externals/test/repos/simple-ext.git/refs/heads/master deleted file mode 100644 index 5c6750496..000000000 --- a/manage_externals/test/repos/simple-ext.git/refs/heads/master +++ /dev/null @@ -1 +0,0 @@ -9b75494003deca69527bb64bcaa352e801611dd2 diff --git a/manage_externals/test/repos/simple-ext.git/refs/tags/tag1 b/manage_externals/test/repos/simple-ext.git/refs/tags/tag1 deleted file mode 100644 index ee595be8b..000000000 --- a/manage_externals/test/repos/simple-ext.git/refs/tags/tag1 +++ /dev/null @@ -1 +0,0 @@ -11a76e3d9a67313dec7ce1230852ab5c86352c5c diff --git a/manage_externals/test/requirements.txt b/manage_externals/test/requirements.txt deleted file mode 100644 index d66f6f1e6..000000000 --- a/manage_externals/test/requirements.txt +++ /dev/null @@ -1,5 +0,0 @@ -pylint>=1.7.0 -autopep8>=1.3.0 -coverage>=4.4.0 -coveralls>=1.2.0 -sphinx>=1.6.0 diff --git a/manage_externals/test/test_sys_checkout.py b/manage_externals/test/test_sys_checkout.py deleted file mode 100644 index 63adcacdd..000000000 --- a/manage_externals/test/test_sys_checkout.py +++ /dev/null @@ -1,1827 +0,0 @@ -#!/usr/bin/env python - -"""Unit test driver for checkout_externals - -Note: this script assume the path to the manic and -checkout_externals module is already in the python path. This is -usually handled by the makefile. If you call it directly, you may need -to adjust your path. - -NOTE(bja, 2017-11) If a test fails, we want to keep the repo for that -test. But the tests will keep running, so we need a unique name. Also, -tearDown is always called after each test. I haven't figured out how -to determine if an assertion failed and whether it is safe to clean up -the test repos. - -So the solution is: - -* assign a unique id to each test repo. - -* never cleanup during the run. - -* Erase any existing repos at the begining of the module in -setUpModule. - -""" - -# NOTE(bja, 2017-11) pylint complains that the module is too big, but -# I'm still working on how to break up the tests and still have the -# temporary directory be preserved.... -# pylint: disable=too-many-lines - - -from __future__ import absolute_import -from __future__ import unicode_literals -from __future__ import print_function - -import logging -import os -import os.path -import shutil -import unittest - -from manic.externals_description import ExternalsDescription -from manic.externals_description import DESCRIPTION_SECTION, VERSION_ITEM -from manic.externals_description import git_submodule_status -from manic.externals_status import ExternalStatus -from manic.repository_git import GitRepository -from manic.utils import printlog, execute_subprocess -from manic.global_constants import LOCAL_PATH_INDICATOR, VERBOSITY_DEFAULT -from manic.global_constants import LOG_FILE_NAME -from manic import checkout - -# ConfigParser was renamed in python2 to configparser. In python2, -# ConfigParser returns byte strings, str, instead of unicode. We need -# unicode to be compatible with xml and json parser and python3. -try: - # python2 - from ConfigParser import SafeConfigParser as config_parser -except ImportError: - # python3 - from configparser import ConfigParser as config_parser - -# --------------------------------------------------------------------- -# -# Global constants -# -# --------------------------------------------------------------------- - -# environment variable names -MANIC_TEST_BARE_REPO_ROOT = 'MANIC_TEST_BARE_REPO_ROOT' -MANIC_TEST_TMP_REPO_ROOT = 'MANIC_TEST_TMP_REPO_ROOT' - -# directory names -TMP_REPO_DIR_NAME = 'tmp' -BARE_REPO_ROOT_NAME = 'repos' -CONTAINER_REPO_NAME = 'container.git' -MIXED_REPO_NAME = 'mixed-cont-ext.git' -SIMPLE_REPO_NAME = 'simple-ext.git' -SIMPLE_FORK_NAME = 'simple-ext-fork.git' -SIMPLE_LOCAL_ONLY_NAME = '.' -ERROR_REPO_NAME = 'error' -EXTERNALS_NAME = 'externals' -SUB_EXTERNALS_PATH = 'src' -CFG_NAME = 'externals.cfg' -CFG_SUB_NAME = 'sub-externals.cfg' -README_NAME = 'readme.txt' -REMOTE_BRANCH_FEATURE2 = 'feature2' - -SVN_TEST_REPO = 'https://github.com/escomp/cesm' - - -def setUpModule(): # pylint: disable=C0103 - """Setup for all tests in this module. It is called once per module! - """ - logging.basicConfig(filename=LOG_FILE_NAME, - format='%(levelname)s : %(asctime)s : %(message)s', - datefmt='%Y-%m-%d %H:%M:%S', - level=logging.DEBUG) - repo_root = os.path.join(os.getcwd(), TMP_REPO_DIR_NAME) - repo_root = os.path.abspath(repo_root) - # delete if it exists from previous runs - try: - shutil.rmtree(repo_root) - except BaseException: - pass - # create clean dir for this run - os.mkdir(repo_root) - # set into the environment so var will be expanded in externals - # filess when executables are run - os.environ[MANIC_TEST_TMP_REPO_ROOT] = repo_root - - -class GenerateExternalsDescriptionCfgV1(object): - """Class to provide building blocks to create - ExternalsDescriptionCfgV1 files. - - Includes predefined files used in tests. - - """ - - def __init__(self): - self._schema_version = '1.1.0' - self._config = None - - def container_full(self, dest_dir): - """Create the full container config file with simple and mixed use - externals - - """ - self.create_config() - self.create_section(SIMPLE_REPO_NAME, 'simp_tag', - tag='tag1') - - self.create_section(SIMPLE_REPO_NAME, 'simp_branch', - branch=REMOTE_BRANCH_FEATURE2) - - self.create_section(SIMPLE_REPO_NAME, 'simp_opt', - tag='tag1', required=False) - - self.create_section(MIXED_REPO_NAME, 'mixed_req', - branch='master', externals=CFG_SUB_NAME) - - self.write_config(dest_dir) - - def container_simple_required(self, dest_dir): - """Create a container externals file with only simple externals. - - """ - self.create_config() - self.create_section(SIMPLE_REPO_NAME, 'simp_tag', - tag='tag1') - - self.create_section(SIMPLE_REPO_NAME, 'simp_branch', - branch=REMOTE_BRANCH_FEATURE2) - - self.create_section(SIMPLE_REPO_NAME, 'simp_hash', - ref_hash='60b1cc1a38d63') - - self.write_config(dest_dir) - - def container_simple_optional(self, dest_dir): - """Create a container externals file with optional simple externals - - """ - self.create_config() - self.create_section(SIMPLE_REPO_NAME, 'simp_req', - tag='tag1') - - self.create_section(SIMPLE_REPO_NAME, 'simp_opt', - tag='tag1', required=False) - - self.write_config(dest_dir) - - def container_simple_svn(self, dest_dir): - """Create a container externals file with only simple externals. - - """ - self.create_config() - self.create_section(SIMPLE_REPO_NAME, 'simp_tag', tag='tag1') - - self.create_svn_external('svn_branch', branch='trunk') - self.create_svn_external('svn_tag', tag='tags/cesm2.0.beta07') - - self.write_config(dest_dir) - - def mixed_simple_base(self, dest_dir): - """Create a mixed-use base externals file with only simple externals. - - """ - self.create_config() - self.create_section_ext_only('mixed_base') - self.create_section(SIMPLE_REPO_NAME, 'simp_tag', - tag='tag1') - - self.create_section(SIMPLE_REPO_NAME, 'simp_branch', - branch=REMOTE_BRANCH_FEATURE2) - - self.create_section(SIMPLE_REPO_NAME, 'simp_hash', - ref_hash='60b1cc1a38d63') - - self.write_config(dest_dir) - - def mixed_simple_sub(self, dest_dir): - """Create a mixed-use sub externals file with only simple externals. - - """ - self.create_config() - self.create_section(SIMPLE_REPO_NAME, 'simp_tag', - tag='tag1', path=SUB_EXTERNALS_PATH) - - self.create_section(SIMPLE_REPO_NAME, 'simp_branch', - branch=REMOTE_BRANCH_FEATURE2, - path=SUB_EXTERNALS_PATH) - - self.write_config(dest_dir, filename=CFG_SUB_NAME) - - def write_config(self, dest_dir, filename=CFG_NAME): - """Write the configuration file to disk - - """ - dest_path = os.path.join(dest_dir, filename) - with open(dest_path, 'w') as configfile: - self._config.write(configfile) - - def create_config(self): - """Create an config object and add the required metadata section - - """ - self._config = config_parser() - self.create_metadata() - - def create_metadata(self): - """Create the metadata section of the config file - """ - self._config.add_section(DESCRIPTION_SECTION) - - self._config.set(DESCRIPTION_SECTION, VERSION_ITEM, - self._schema_version) - - def create_section(self, repo_type, name, tag='', branch='', - ref_hash='', required=True, path=EXTERNALS_NAME, - externals='', repo_path=None, from_submodule=False): - # pylint: disable=too-many-branches - """Create a config section with autofilling some items and handling - optional items. - - """ - # pylint: disable=R0913 - self._config.add_section(name) - if not from_submodule: - self._config.set(name, ExternalsDescription.PATH, - os.path.join(path, name)) - - self._config.set(name, ExternalsDescription.PROTOCOL, - ExternalsDescription.PROTOCOL_GIT) - - # from_submodules is incompatible with some other options, turn them off - if (from_submodule and - ((repo_path is not None) or tag or ref_hash or branch)): - printlog('create_section: "from_submodule" is incompatible with ' - '"repo_url", "tag", "hash", and "branch" options;\n' - 'Ignoring those options for {}'.format(name)) - repo_url = None - tag = '' - ref_hash = '' - branch = '' - - if repo_path is not None: - repo_url = repo_path - else: - repo_url = os.path.join('${MANIC_TEST_BARE_REPO_ROOT}', repo_type) - - if not from_submodule: - self._config.set(name, ExternalsDescription.REPO_URL, repo_url) - - self._config.set(name, ExternalsDescription.REQUIRED, str(required)) - - if tag: - self._config.set(name, ExternalsDescription.TAG, tag) - - if branch: - self._config.set(name, ExternalsDescription.BRANCH, branch) - - if ref_hash: - self._config.set(name, ExternalsDescription.HASH, ref_hash) - - if externals: - self._config.set(name, ExternalsDescription.EXTERNALS, externals) - - if from_submodule: - self._config.set(name, ExternalsDescription.SUBMODULE, "True") - - def create_section_ext_only(self, name, - required=True, externals=CFG_SUB_NAME): - """Create a config section with autofilling some items and handling - optional items. - - """ - # pylint: disable=R0913 - self._config.add_section(name) - self._config.set(name, ExternalsDescription.PATH, LOCAL_PATH_INDICATOR) - - self._config.set(name, ExternalsDescription.PROTOCOL, - ExternalsDescription.PROTOCOL_EXTERNALS_ONLY) - - self._config.set(name, ExternalsDescription.REPO_URL, - LOCAL_PATH_INDICATOR) - - self._config.set(name, ExternalsDescription.REQUIRED, str(required)) - - if externals: - self._config.set(name, ExternalsDescription.EXTERNALS, externals) - - def create_svn_external(self, name, tag='', branch=''): - """Create a config section for an svn repository. - - """ - self._config.add_section(name) - self._config.set(name, ExternalsDescription.PATH, - os.path.join(EXTERNALS_NAME, name)) - - self._config.set(name, ExternalsDescription.PROTOCOL, - ExternalsDescription.PROTOCOL_SVN) - - self._config.set(name, ExternalsDescription.REPO_URL, SVN_TEST_REPO) - - self._config.set(name, ExternalsDescription.REQUIRED, str(True)) - - if tag: - self._config.set(name, ExternalsDescription.TAG, tag) - - if branch: - self._config.set(name, ExternalsDescription.BRANCH, branch) - - @staticmethod - def create_branch(dest_dir, repo_name, branch, with_commit=False): - """Update a repository branch, and potentially the remote. - """ - # pylint: disable=R0913 - cwd = os.getcwd() - repo_root = os.path.join(dest_dir, EXTERNALS_NAME) - repo_root = os.path.join(repo_root, repo_name) - os.chdir(repo_root) - cmd = ['git', 'checkout', '-b', branch, ] - execute_subprocess(cmd) - if with_commit: - msg = 'start work on {0}'.format(branch) - with open(README_NAME, 'a') as handle: - handle.write(msg) - cmd = ['git', 'add', README_NAME, ] - execute_subprocess(cmd) - cmd = ['git', 'commit', '-m', msg, ] - execute_subprocess(cmd) - os.chdir(cwd) - - @staticmethod - def create_commit(dest_dir, repo_name, local_tracking_branch=None): - """Make a commit on whatever is currently checked out. - - This is used to test sync state changes from local commits on - detached heads and tracking branches. - - """ - cwd = os.getcwd() - repo_root = os.path.join(dest_dir, EXTERNALS_NAME) - repo_root = os.path.join(repo_root, repo_name) - os.chdir(repo_root) - if local_tracking_branch: - cmd = ['git', 'checkout', '-b', local_tracking_branch, ] - execute_subprocess(cmd) - - msg = 'work on great new feature!' - with open(README_NAME, 'a') as handle: - handle.write(msg) - cmd = ['git', 'add', README_NAME, ] - execute_subprocess(cmd) - cmd = ['git', 'commit', '-m', msg, ] - execute_subprocess(cmd) - os.chdir(cwd) - - def update_branch(self, dest_dir, name, branch, repo_type=None, - filename=CFG_NAME): - """Update a repository branch, and potentially the remote. - """ - # pylint: disable=R0913 - self._config.set(name, ExternalsDescription.BRANCH, branch) - - if repo_type: - if repo_type == SIMPLE_LOCAL_ONLY_NAME: - repo_url = SIMPLE_LOCAL_ONLY_NAME - else: - repo_url = os.path.join('${MANIC_TEST_BARE_REPO_ROOT}', - repo_type) - self._config.set(name, ExternalsDescription.REPO_URL, repo_url) - - try: - # remove the tag if it existed - self._config.remove_option(name, ExternalsDescription.TAG) - except BaseException: - pass - - self.write_config(dest_dir, filename) - - def update_svn_branch(self, dest_dir, name, branch, filename=CFG_NAME): - """Update a repository branch, and potentially the remote. - """ - # pylint: disable=R0913 - self._config.set(name, ExternalsDescription.BRANCH, branch) - - try: - # remove the tag if it existed - self._config.remove_option(name, ExternalsDescription.TAG) - except BaseException: - pass - - self.write_config(dest_dir, filename) - - def update_tag(self, dest_dir, name, tag, repo_type=None, - filename=CFG_NAME, remove_branch=True): - """Update a repository tag, and potentially the remote - - NOTE(bja, 2017-11) remove_branch=False should result in an - overspecified external with both a branch and tag. This is - used for error condition testing. - - """ - # pylint: disable=R0913 - self._config.set(name, ExternalsDescription.TAG, tag) - - if repo_type: - repo_url = os.path.join('${MANIC_TEST_BARE_REPO_ROOT}', repo_type) - self._config.set(name, ExternalsDescription.REPO_URL, repo_url) - - try: - # remove the branch if it existed - if remove_branch: - self._config.remove_option(name, ExternalsDescription.BRANCH) - except BaseException: - pass - - self.write_config(dest_dir, filename) - - def update_underspecify_branch_tag(self, dest_dir, name, - filename=CFG_NAME): - """Update a repository protocol, and potentially the remote - """ - # pylint: disable=R0913 - try: - # remove the branch if it existed - self._config.remove_option(name, ExternalsDescription.BRANCH) - except BaseException: - pass - - try: - # remove the tag if it existed - self._config.remove_option(name, ExternalsDescription.TAG) - except BaseException: - pass - - self.write_config(dest_dir, filename) - - def update_underspecify_remove_url(self, dest_dir, name, - filename=CFG_NAME): - """Update a repository protocol, and potentially the remote - """ - # pylint: disable=R0913 - try: - # remove the repo url if it existed - self._config.remove_option(name, ExternalsDescription.REPO_URL) - except BaseException: - pass - - self.write_config(dest_dir, filename) - - def update_protocol(self, dest_dir, name, protocol, repo_type=None, - filename=CFG_NAME): - """Update a repository protocol, and potentially the remote - """ - # pylint: disable=R0913 - self._config.set(name, ExternalsDescription.PROTOCOL, protocol) - - if repo_type: - repo_url = os.path.join('${MANIC_TEST_BARE_REPO_ROOT}', repo_type) - self._config.set(name, ExternalsDescription.REPO_URL, repo_url) - - self.write_config(dest_dir, filename) - - -class BaseTestSysCheckout(unittest.TestCase): - """Base class of reusable systems level test setup for - checkout_externals - - """ - # NOTE(bja, 2017-11) pylint complains about long method names, but - # it is hard to differentiate tests without making them more - # cryptic. - # pylint: disable=invalid-name - - status_args = ['--status'] - checkout_args = [] - optional_args = ['--optional'] - verbose_args = ['--status', '--verbose'] - - def setUp(self): - """Setup for all individual checkout_externals tests - """ - # directory we want to return to after the test system and - # checkout_externals are done cd'ing all over the place. - self._return_dir = os.getcwd() - - self._test_id = self.id().split('.')[-1] - - # path to the executable - self._checkout = os.path.join('../checkout_externals') - self._checkout = os.path.abspath(self._checkout) - - # directory where we have test repositories - self._bare_root = os.path.join(os.getcwd(), BARE_REPO_ROOT_NAME) - self._bare_root = os.path.abspath(self._bare_root) - - # set into the environment so var will be expanded in externals files - os.environ[MANIC_TEST_BARE_REPO_ROOT] = self._bare_root - - # set the input file generator - self._generator = GenerateExternalsDescriptionCfgV1() - # set the input file generator for secondary externals - self._sub_generator = GenerateExternalsDescriptionCfgV1() - - def tearDown(self): - """Tear down for individual tests - """ - # remove the env var we added in setup - del os.environ[MANIC_TEST_BARE_REPO_ROOT] - - # return to our common starting point - os.chdir(self._return_dir) - - def setup_test_repo(self, parent_repo_name, dest_dir_in=None): - """Setup the paths and clone the base test repo - - """ - # unique repo for this test - test_dir_name = self._test_id - print("Test repository name: {0}".format(test_dir_name)) - - parent_repo_dir = os.path.join(self._bare_root, parent_repo_name) - if dest_dir_in is None: - dest_dir = os.path.join(os.environ[MANIC_TEST_TMP_REPO_ROOT], - test_dir_name) - else: - dest_dir = dest_dir_in - - # pylint: disable=W0212 - GitRepository._git_clone(parent_repo_dir, dest_dir, VERBOSITY_DEFAULT) - return dest_dir - - @staticmethod - def _add_file_to_repo(under_test_dir, filename, tracked): - """Add a file to the repository so we can put it into a dirty state - - """ - cwd = os.getcwd() - os.chdir(under_test_dir) - with open(filename, 'w') as tmp: - tmp.write('Hello, world!') - - if tracked: - # NOTE(bja, 2018-01) brittle hack to obtain repo dir and - # file name - path_data = filename.split('/') - repo_dir = os.path.join(path_data[0], path_data[1]) - os.chdir(repo_dir) - tracked_file = path_data[2] - cmd = ['git', 'add', tracked_file] - execute_subprocess(cmd) - - os.chdir(cwd) - - @staticmethod - def execute_cmd_in_dir(under_test_dir, args): - """Extecute the checkout command in the appropriate repo dir with the - specified additional args - - Note that we are calling the command line processing and main - routines and not using a subprocess call so that we get code - coverage results! - - """ - cwd = os.getcwd() - checkout_path = os.path.abspath('{0}/../../checkout_externals') - os.chdir(under_test_dir) - cmdline = ['--externals', CFG_NAME, ] - cmdline += args - repo_root = 'MANIC_TEST_BARE_REPO_ROOT={root}'.format( - root=os.environ[MANIC_TEST_BARE_REPO_ROOT]) - manual_cmd = ('Test cmd:\npushd {cwd}; {env} {checkout} {args}'.format( - cwd=under_test_dir, env=repo_root, checkout=checkout_path, - args=' '.join(cmdline))) - printlog(manual_cmd) - options = checkout.commandline_arguments(cmdline) - overall_status, tree_status = checkout.main(options) - os.chdir(cwd) - return overall_status, tree_status - - # ---------------------------------------------------------------- - # - # Check results for generic perturbation of states - # - # ---------------------------------------------------------------- - def _check_generic_empty_default_required(self, tree, name): - self.assertEqual(tree[name].sync_state, ExternalStatus.EMPTY) - self.assertEqual(tree[name].clean_state, ExternalStatus.DEFAULT) - self.assertEqual(tree[name].source_type, ExternalStatus.MANAGED) - - def _check_generic_ok_clean_required(self, tree, name): - self.assertEqual(tree[name].sync_state, ExternalStatus.STATUS_OK) - self.assertEqual(tree[name].clean_state, ExternalStatus.STATUS_OK) - self.assertEqual(tree[name].source_type, ExternalStatus.MANAGED) - - def _check_generic_ok_dirty_required(self, tree, name): - self.assertEqual(tree[name].sync_state, ExternalStatus.STATUS_OK) - self.assertEqual(tree[name].clean_state, ExternalStatus.DIRTY) - self.assertEqual(tree[name].source_type, ExternalStatus.MANAGED) - - def _check_generic_modified_ok_required(self, tree, name): - self.assertEqual(tree[name].sync_state, ExternalStatus.MODEL_MODIFIED) - self.assertEqual(tree[name].clean_state, ExternalStatus.STATUS_OK) - self.assertEqual(tree[name].source_type, ExternalStatus.MANAGED) - - def _check_generic_empty_default_optional(self, tree, name): - self.assertEqual(tree[name].sync_state, ExternalStatus.EMPTY) - self.assertEqual(tree[name].clean_state, ExternalStatus.DEFAULT) - self.assertEqual(tree[name].source_type, ExternalStatus.OPTIONAL) - - def _check_generic_ok_clean_optional(self, tree, name): - self.assertEqual(tree[name].sync_state, ExternalStatus.STATUS_OK) - self.assertEqual(tree[name].clean_state, ExternalStatus.STATUS_OK) - self.assertEqual(tree[name].source_type, ExternalStatus.OPTIONAL) - - # ---------------------------------------------------------------- - # - # Check results for individual named externals - # - # ---------------------------------------------------------------- - def _check_simple_tag_empty(self, tree, directory=EXTERNALS_NAME): - name = './{0}/simp_tag'.format(directory) - self._check_generic_empty_default_required(tree, name) - - def _check_simple_tag_ok(self, tree, directory=EXTERNALS_NAME): - name = './{0}/simp_tag'.format(directory) - self._check_generic_ok_clean_required(tree, name) - - def _check_simple_tag_dirty(self, tree, directory=EXTERNALS_NAME): - name = './{0}/simp_tag'.format(directory) - self._check_generic_ok_dirty_required(tree, name) - - def _check_simple_tag_modified(self, tree, directory=EXTERNALS_NAME): - name = './{0}/simp_tag'.format(directory) - self._check_generic_modified_ok_required(tree, name) - - def _check_simple_branch_empty(self, tree, directory=EXTERNALS_NAME): - name = './{0}/simp_branch'.format(directory) - self._check_generic_empty_default_required(tree, name) - - def _check_simple_branch_ok(self, tree, directory=EXTERNALS_NAME): - name = './{0}/simp_branch'.format(directory) - self._check_generic_ok_clean_required(tree, name) - - def _check_simple_branch_modified(self, tree, directory=EXTERNALS_NAME): - name = './{0}/simp_branch'.format(directory) - self._check_generic_modified_ok_required(tree, name) - - def _check_simple_hash_empty(self, tree, directory=EXTERNALS_NAME): - name = './{0}/simp_hash'.format(directory) - self._check_generic_empty_default_required(tree, name) - - def _check_simple_hash_ok(self, tree, directory=EXTERNALS_NAME): - name = './{0}/simp_hash'.format(directory) - self._check_generic_ok_clean_required(tree, name) - - def _check_simple_hash_modified(self, tree, directory=EXTERNALS_NAME): - name = './{0}/simp_hash'.format(directory) - self._check_generic_modified_ok_required(tree, name) - - def _check_simple_req_empty(self, tree, directory=EXTERNALS_NAME): - name = './{0}/simp_req'.format(directory) - self._check_generic_empty_default_required(tree, name) - - def _check_simple_req_ok(self, tree, directory=EXTERNALS_NAME): - name = './{0}/simp_req'.format(directory) - self._check_generic_ok_clean_required(tree, name) - - def _check_simple_opt_empty(self, tree, directory=EXTERNALS_NAME): - name = './{0}/simp_opt'.format(directory) - self._check_generic_empty_default_optional(tree, name) - - def _check_simple_opt_ok(self, tree, directory=EXTERNALS_NAME): - name = './{0}/simp_opt'.format(directory) - self._check_generic_ok_clean_optional(tree, name) - - def _check_mixed_ext_branch_empty(self, tree, directory=EXTERNALS_NAME): - name = './{0}/mixed_req'.format(directory) - self._check_generic_empty_default_required(tree, name) - - def _check_mixed_ext_branch_ok(self, tree, directory=EXTERNALS_NAME): - name = './{0}/mixed_req'.format(directory) - self._check_generic_ok_clean_required(tree, name) - - def _check_mixed_ext_branch_modified(self, tree, directory=EXTERNALS_NAME): - name = './{0}/mixed_req'.format(directory) - self._check_generic_modified_ok_required(tree, name) - - # ---------------------------------------------------------------- - # - # Check results for groups of externals under specific conditions - # - # ---------------------------------------------------------------- - def _check_container_simple_required_pre_checkout(self, overall, tree): - self.assertEqual(overall, 0) - self._check_simple_tag_empty(tree) - self._check_simple_branch_empty(tree) - self._check_simple_hash_empty(tree) - - def _check_container_simple_required_checkout(self, overall, tree): - # Note, this is the internal tree status just before checkout - self.assertEqual(overall, 0) - self._check_simple_tag_empty(tree) - self._check_simple_branch_empty(tree) - self._check_simple_hash_empty(tree) - - def _check_container_simple_required_post_checkout(self, overall, tree): - self.assertEqual(overall, 0) - self._check_simple_tag_ok(tree) - self._check_simple_branch_ok(tree) - self._check_simple_hash_ok(tree) - - def _check_container_simple_required_out_of_sync(self, overall, tree): - self.assertEqual(overall, 0) - self._check_simple_tag_modified(tree) - self._check_simple_branch_modified(tree) - self._check_simple_hash_modified(tree) - - def _check_container_simple_optional_pre_checkout(self, overall, tree): - self.assertEqual(overall, 0) - self._check_simple_req_empty(tree) - self._check_simple_opt_empty(tree) - - def _check_container_simple_optional_checkout(self, overall, tree): - self.assertEqual(overall, 0) - self._check_simple_req_empty(tree) - self._check_simple_opt_empty(tree) - - def _check_container_simple_optional_post_checkout(self, overall, tree): - self.assertEqual(overall, 0) - self._check_simple_req_ok(tree) - self._check_simple_opt_empty(tree) - - def _check_container_simple_optional_post_optional(self, overall, tree): - self.assertEqual(overall, 0) - self._check_simple_req_ok(tree) - self._check_simple_opt_ok(tree) - - def _check_container_simple_required_sb_modified(self, overall, tree): - self.assertEqual(overall, 0) - self._check_simple_tag_ok(tree) - self._check_simple_branch_modified(tree) - self._check_simple_hash_ok(tree) - - def _check_container_simple_optional_st_dirty(self, overall, tree): - self.assertEqual(overall, 0) - self._check_simple_tag_dirty(tree) - self._check_simple_branch_ok(tree) - - def _check_container_full_pre_checkout(self, overall, tree): - self.assertEqual(overall, 0) - self._check_simple_tag_empty(tree) - self._check_simple_branch_empty(tree) - self._check_simple_opt_empty(tree) - self._check_mixed_ext_branch_required_pre_checkout(overall, tree) - - def _check_container_component_post_checkout(self, overall, tree): - self.assertEqual(overall, 0) - self._check_simple_opt_ok(tree) - self._check_simple_tag_empty(tree) - self._check_simple_branch_empty(tree) - - def _check_container_component_post_checkout2(self, overall, tree): - self.assertEqual(overall, 0) - self._check_simple_opt_ok(tree) - self._check_simple_tag_empty(tree) - self._check_simple_branch_ok(tree) - - def _check_container_full_post_checkout(self, overall, tree): - self.assertEqual(overall, 0) - self._check_simple_tag_ok(tree) - self._check_simple_branch_ok(tree) - self._check_simple_opt_empty(tree) - self._check_mixed_ext_branch_required_post_checkout(overall, tree) - - def _check_container_full_pre_checkout_ext_change(self, overall, tree): - self.assertEqual(overall, 0) - self._check_simple_tag_ok(tree) - self._check_simple_branch_ok(tree) - self._check_simple_opt_empty(tree) - self._check_mixed_ext_branch_required_pre_checkout_ext_change( - overall, tree) - - def _check_container_full_post_checkout_subext_modified( - self, overall, tree): - self.assertEqual(overall, 0) - self._check_simple_tag_ok(tree) - self._check_simple_branch_ok(tree) - self._check_simple_opt_empty(tree) - self._check_mixed_ext_branch_required_post_checkout_subext_modified( - overall, tree) - - def _check_mixed_ext_branch_required_pre_checkout(self, overall, tree): - # Note, this is the internal tree status just before checkout - self.assertEqual(overall, 0) - self._check_mixed_ext_branch_empty(tree, directory=EXTERNALS_NAME) - # NOTE: externals/mixed_req/src should not exist in the tree - # since this is the status before checkout of mixed_req. - - def _check_mixed_ext_branch_required_post_checkout(self, overall, tree): - # Note, this is the internal tree status just before checkout - self.assertEqual(overall, 0) - self._check_mixed_ext_branch_ok(tree, directory=EXTERNALS_NAME) - check_dir = "{0}/{1}/{2}".format(EXTERNALS_NAME, "mixed_req", - SUB_EXTERNALS_PATH) - self._check_simple_branch_ok(tree, directory=check_dir) - - def _check_mixed_ext_branch_required_pre_checkout_ext_change( - self, overall, tree): - # Note, this is the internal tree status just after change the - # externals description file, but before checkout - self.assertEqual(overall, 0) - self._check_mixed_ext_branch_modified(tree, directory=EXTERNALS_NAME) - check_dir = "{0}/{1}/{2}".format(EXTERNALS_NAME, "mixed_req", - SUB_EXTERNALS_PATH) - self._check_simple_branch_ok(tree, directory=check_dir) - - def _check_mixed_ext_branch_required_post_checkout_subext_modified( - self, overall, tree): - # Note, this is the internal tree status just after change the - # externals description file, but before checkout - self.assertEqual(overall, 0) - self._check_mixed_ext_branch_ok(tree, directory=EXTERNALS_NAME) - check_dir = "{0}/{1}/{2}".format(EXTERNALS_NAME, "mixed_req", - SUB_EXTERNALS_PATH) - self._check_simple_branch_modified(tree, directory=check_dir) - - def _check_mixed_cont_simple_required_pre_checkout(self, overall, tree): - # Note, this is the internal tree status just before checkout - self.assertEqual(overall, 0) - self._check_simple_tag_empty(tree, directory=EXTERNALS_NAME) - self._check_simple_branch_empty(tree, directory=EXTERNALS_NAME) - self._check_simple_branch_empty(tree, directory=SUB_EXTERNALS_PATH) - - def _check_mixed_cont_simple_required_checkout(self, overall, tree): - # Note, this is the internal tree status just before checkout - self.assertEqual(overall, 0) - self._check_simple_tag_empty(tree, directory=EXTERNALS_NAME) - self._check_simple_branch_empty(tree, directory=EXTERNALS_NAME) - self._check_simple_branch_empty(tree, directory=SUB_EXTERNALS_PATH) - - def _check_mixed_cont_simple_required_post_checkout(self, overall, tree): - # Note, this is the internal tree status just before checkout - self.assertEqual(overall, 0) - self._check_simple_tag_ok(tree, directory=EXTERNALS_NAME) - self._check_simple_branch_ok(tree, directory=EXTERNALS_NAME) - self._check_simple_branch_ok(tree, directory=SUB_EXTERNALS_PATH) - - -class TestSysCheckout(BaseTestSysCheckout): - """Run systems level tests of checkout_externals - - """ - # NOTE(bja, 2017-11) pylint complains about long method names, but - # it is hard to differentiate tests without making them more - # cryptic. - # pylint: disable=invalid-name - - # ---------------------------------------------------------------- - # - # Run systems tests - # - # ---------------------------------------------------------------- - def test_container_simple_required(self): - """Verify that a container with simple subrepos - generates the correct initial status. - - """ - # create repo - under_test_dir = self.setup_test_repo(CONTAINER_REPO_NAME) - self._generator.container_simple_required(under_test_dir) - - # status of empty repo - overall, tree = self.execute_cmd_in_dir(under_test_dir, - self.status_args) - self._check_container_simple_required_pre_checkout(overall, tree) - - # checkout - overall, tree = self.execute_cmd_in_dir(under_test_dir, - self.checkout_args) - self._check_container_simple_required_checkout(overall, tree) - - # status clean checked out - overall, tree = self.execute_cmd_in_dir(under_test_dir, - self.status_args) - self._check_container_simple_required_post_checkout(overall, tree) - - def test_container_simple_optional(self): - """Verify that container with an optional simple subrepos - generates the correct initial status. - - """ - # create repo - under_test_dir = self.setup_test_repo(CONTAINER_REPO_NAME) - self._generator.container_simple_optional(under_test_dir) - - # check status of empty repo - overall, tree = self.execute_cmd_in_dir(under_test_dir, - self.status_args) - self._check_container_simple_optional_pre_checkout(overall, tree) - - # checkout required - overall, tree = self.execute_cmd_in_dir(under_test_dir, - self.checkout_args) - self._check_container_simple_optional_checkout(overall, tree) - - # status - overall, tree = self.execute_cmd_in_dir(under_test_dir, - self.status_args) - self._check_container_simple_optional_post_checkout(overall, tree) - - # checkout optional - overall, tree = self.execute_cmd_in_dir(under_test_dir, - self.optional_args) - self._check_container_simple_optional_post_checkout(overall, tree) - - # status - overall, tree = self.execute_cmd_in_dir(under_test_dir, - self.status_args) - self._check_container_simple_optional_post_optional(overall, tree) - - def test_container_simple_verbose(self): - """Verify that container with simple subrepos runs with verbose status - output and generates the correct initial status. - - """ - # create repo - under_test_dir = self.setup_test_repo(CONTAINER_REPO_NAME) - self._generator.container_simple_required(under_test_dir) - - # checkout - overall, tree = self.execute_cmd_in_dir(under_test_dir, - self.checkout_args) - self._check_container_simple_required_checkout(overall, tree) - - # check verbose status - overall, tree = self.execute_cmd_in_dir(under_test_dir, - self.verbose_args) - self._check_container_simple_required_post_checkout(overall, tree) - - def test_container_simple_dirty(self): - """Verify that a container with simple subrepos - and a dirty status exits gracefully. - - """ - under_test_dir = self.setup_test_repo(CONTAINER_REPO_NAME) - self._generator.container_simple_required(under_test_dir) - - # checkout - overall, tree = self.execute_cmd_in_dir(under_test_dir, - self.checkout_args) - self._check_container_simple_required_checkout(overall, tree) - - # add a file to the repo - tracked = True - self._add_file_to_repo(under_test_dir, 'externals/simp_tag/tmp.txt', - tracked) - - # checkout: pre-checkout status should be dirty, did not - # modify working copy. - overall, tree = self.execute_cmd_in_dir(under_test_dir, - self.checkout_args) - self._check_container_simple_optional_st_dirty(overall, tree) - - # verify status is still dirty - overall, tree = self.execute_cmd_in_dir(under_test_dir, - self.status_args) - self._check_container_simple_optional_st_dirty(overall, tree) - - def test_container_simple_untracked(self): - """Verify that a container with simple subrepos and a untracked files - is not considered 'dirty' and will attempt an update. - - """ - under_test_dir = self.setup_test_repo(CONTAINER_REPO_NAME) - self._generator.container_simple_required(under_test_dir) - - # checkout - overall, tree = self.execute_cmd_in_dir(under_test_dir, - self.checkout_args) - self._check_container_simple_required_checkout(overall, tree) - - # add a file to the repo - tracked = False - self._add_file_to_repo(under_test_dir, 'externals/simp_tag/tmp.txt', - tracked) - - # checkout: pre-checkout status should be clean, ignoring the - # untracked file. - overall, tree = self.execute_cmd_in_dir(under_test_dir, - self.checkout_args) - self._check_container_simple_required_post_checkout(overall, tree) - - # verify status is still clean - overall, tree = self.execute_cmd_in_dir(under_test_dir, - self.status_args) - self._check_container_simple_required_post_checkout(overall, tree) - - def test_container_simple_detached_sync(self): - """Verify that a container with simple subrepos generates the correct - out of sync status when making commits from a detached head - state. - - """ - # create repo - under_test_dir = self.setup_test_repo(CONTAINER_REPO_NAME) - self._generator.container_simple_required(under_test_dir) - - # status of empty repo - overall, tree = self.execute_cmd_in_dir(under_test_dir, - self.status_args) - self._check_container_simple_required_pre_checkout(overall, tree) - - # checkout - overall, tree = self.execute_cmd_in_dir(under_test_dir, - self.checkout_args) - self._check_container_simple_required_checkout(overall, tree) - - # make a commit on the detached head of the tag and hash externals - self._generator.create_commit(under_test_dir, 'simp_tag') - self._generator.create_commit(under_test_dir, 'simp_hash') - self._generator.create_commit(under_test_dir, 'simp_branch') - - # status of repo, branch, tag and hash should all be out of sync! - overall, tree = self.execute_cmd_in_dir(under_test_dir, - self.status_args) - self._check_container_simple_required_out_of_sync(overall, tree) - - # checkout - overall, tree = self.execute_cmd_in_dir(under_test_dir, - self.checkout_args) - # same pre-checkout out of sync status - self._check_container_simple_required_out_of_sync(overall, tree) - - # now status should be in-sync - overall, tree = self.execute_cmd_in_dir(under_test_dir, - self.status_args) - self._check_container_simple_required_post_checkout(overall, tree) - - def test_container_remote_branch(self): - """Verify that a container with remote branch change works - - """ - # create repo - under_test_dir = self.setup_test_repo(CONTAINER_REPO_NAME) - self._generator.container_simple_required(under_test_dir) - - # checkout - overall, tree = self.execute_cmd_in_dir(under_test_dir, - self.checkout_args) - self._check_container_simple_required_checkout(overall, tree) - - # update the config file to point to a different remote with - # the same branch - self._generator.update_branch(under_test_dir, 'simp_branch', - REMOTE_BRANCH_FEATURE2, SIMPLE_FORK_NAME) - - # status of simp_branch should be out of sync - overall, tree = self.execute_cmd_in_dir(under_test_dir, - self.status_args) - self._check_container_simple_required_sb_modified(overall, tree) - - # checkout new externals - overall, tree = self.execute_cmd_in_dir(under_test_dir, - self.checkout_args) - self._check_container_simple_required_sb_modified(overall, tree) - - # status should be synced - overall, tree = self.execute_cmd_in_dir(under_test_dir, - self.status_args) - self._check_container_simple_required_post_checkout(overall, tree) - - def test_container_remote_tag_same_branch(self): - """Verify that a container with remote tag change works. The new tag - should not be in the original repo, only the new remote - fork. The new tag is automatically fetched because it is on - the branch. - - """ - # create repo - under_test_dir = self.setup_test_repo(CONTAINER_REPO_NAME) - self._generator.container_simple_required(under_test_dir) - - # checkout - overall, tree = self.execute_cmd_in_dir(under_test_dir, - self.checkout_args) - self._check_container_simple_required_checkout(overall, tree) - - # update the config file to point to a different remote with - # the tag instead of branch. Tag MUST NOT be in the original - # repo! - self._generator.update_tag(under_test_dir, 'simp_branch', - 'forked-feature-v1', SIMPLE_FORK_NAME) - - # status of simp_branch should be out of sync - overall, tree = self.execute_cmd_in_dir(under_test_dir, - self.status_args) - self._check_container_simple_required_sb_modified(overall, tree) - - # checkout new externals - overall, tree = self.execute_cmd_in_dir(under_test_dir, - self.checkout_args) - self._check_container_simple_required_sb_modified(overall, tree) - - # status should be synced - overall, tree = self.execute_cmd_in_dir(under_test_dir, - self.status_args) - self._check_container_simple_required_post_checkout(overall, tree) - - def test_container_remote_tag_fetch_all(self): - """Verify that a container with remote tag change works. The new tag - should not be in the original repo, only the new remote - fork. It should also not be on a branch that will be fetch, - and therefore not fetched by default with 'git fetch'. It will - only be retreived by 'git fetch --tags' - - """ - # create repo - under_test_dir = self.setup_test_repo(CONTAINER_REPO_NAME) - self._generator.container_simple_required(under_test_dir) - - # checkout - overall, tree = self.execute_cmd_in_dir(under_test_dir, - self.checkout_args) - self._check_container_simple_required_checkout(overall, tree) - - # update the config file to point to a different remote with - # the tag instead of branch. Tag MUST NOT be in the original - # repo! - self._generator.update_tag(under_test_dir, 'simp_branch', - 'abandoned-feature', SIMPLE_FORK_NAME) - - # status of simp_branch should be out of sync - overall, tree = self.execute_cmd_in_dir(under_test_dir, - self.status_args) - self._check_container_simple_required_sb_modified(overall, tree) - - # checkout new externals - overall, tree = self.execute_cmd_in_dir(under_test_dir, - self.checkout_args) - self._check_container_simple_required_sb_modified(overall, tree) - - # status should be synced - overall, tree = self.execute_cmd_in_dir(under_test_dir, - self.status_args) - self._check_container_simple_required_post_checkout(overall, tree) - - def test_container_preserve_dot(self): - """Verify that after inital checkout, modifying an external git repo - url to '.' and the current branch will leave it unchanged. - - """ - # create repo - under_test_dir = self.setup_test_repo(CONTAINER_REPO_NAME) - self._generator.container_simple_required(under_test_dir) - - # checkout - overall, tree = self.execute_cmd_in_dir(under_test_dir, - self.checkout_args) - self._check_container_simple_required_checkout(overall, tree) - - # update the config file to point to a different remote with - # the same branch - self._generator.update_branch(under_test_dir, 'simp_branch', - REMOTE_BRANCH_FEATURE2, SIMPLE_FORK_NAME) - # checkout - overall, tree = self.execute_cmd_in_dir(under_test_dir, - self.checkout_args) - - # verify status is clean and unmodified - overall, tree = self.execute_cmd_in_dir(under_test_dir, - self.status_args) - self._check_container_simple_required_post_checkout(overall, tree) - - # update branch to point to a new branch that only exists in - # the local fork - self._generator.create_branch(under_test_dir, 'simp_branch', - 'private-feature', with_commit=True) - self._generator.update_branch(under_test_dir, 'simp_branch', - 'private-feature', - SIMPLE_LOCAL_ONLY_NAME) - overall, tree = self.execute_cmd_in_dir(under_test_dir, - self.checkout_args) - - # verify status is clean and unmodified - overall, tree = self.execute_cmd_in_dir(under_test_dir, - self.status_args) - self._check_container_simple_required_post_checkout(overall, tree) - - def test_container_full(self): - """Verify that 'full' container with simple and mixed subrepos - generates the correct initial status. - - The mixed subrepo has a sub-externals file with different - sub-externals on different branches. - - """ - # create the test repository - under_test_dir = self.setup_test_repo(CONTAINER_REPO_NAME) - - # create the top level externals file - self._generator.container_full(under_test_dir) - - # inital checkout - overall, tree = self.execute_cmd_in_dir(under_test_dir, - self.checkout_args) - self._check_container_full_pre_checkout(overall, tree) - - overall, tree = self.execute_cmd_in_dir(under_test_dir, - self.status_args) - self._check_container_full_post_checkout(overall, tree) - - # update the mixed-use repo to point to different branch - self._generator.update_branch(under_test_dir, 'mixed_req', - 'new-feature', MIXED_REPO_NAME) - - # check status out of sync for mixed_req, but sub-externals - # are still in sync - overall, tree = self.execute_cmd_in_dir(under_test_dir, - self.status_args) - self._check_container_full_pre_checkout_ext_change(overall, tree) - - # run the checkout. Now the mixed use external and it's - # sub-exterals should be changed. Returned status is - # pre-checkout! - overall, tree = self.execute_cmd_in_dir(under_test_dir, - self.checkout_args) - self._check_container_full_pre_checkout_ext_change(overall, tree) - - # check status out of sync for mixed_req, and sub-externals - # are in sync. - overall, tree = self.execute_cmd_in_dir(under_test_dir, - self.status_args) - self._check_container_full_post_checkout(overall, tree) - - def test_container_component(self): - """Verify that optional component checkout works - """ - # create the test repository - under_test_dir = self.setup_test_repo(CONTAINER_REPO_NAME) - - # create the top level externals file - self._generator.container_full(under_test_dir) - - # inital checkout, first try a nonexistant component argument noref - checkout_args = ['simp_opt', 'noref'] - checkout_args.extend(self.checkout_args) - - with self.assertRaises(RuntimeError): - self.execute_cmd_in_dir(under_test_dir, checkout_args) - - checkout_args = ['simp_opt'] - checkout_args.extend(self.checkout_args) - - overall, tree = self.execute_cmd_in_dir(under_test_dir, - checkout_args) - - overall, tree = self.execute_cmd_in_dir(under_test_dir, - self.status_args) - self._check_container_component_post_checkout(overall, tree) - checkout_args.append('simp_branch') - overall, tree = self.execute_cmd_in_dir(under_test_dir, - checkout_args) - overall, tree = self.execute_cmd_in_dir(under_test_dir, - self.status_args) - self._check_container_component_post_checkout2(overall, tree) - - def test_mixed_simple(self): - """Verify that a mixed use repo can serve as a 'full' container, - pulling in a set of externals and a seperate set of sub-externals. - - """ - #import pdb; pdb.set_trace() - # create repository - under_test_dir = self.setup_test_repo(MIXED_REPO_NAME) - # create top level externals file - self._generator.mixed_simple_base(under_test_dir) - # NOTE: sub-externals file is already in the repo so we can - # switch branches during testing. Since this is a mixed-repo - # serving as the top level container repo, we can't switch - # during this test. - - # checkout - overall, tree = self.execute_cmd_in_dir(under_test_dir, - self.checkout_args) - self._check_mixed_cont_simple_required_checkout(overall, tree) - - # verify status is clean and unmodified - overall, tree = self.execute_cmd_in_dir(under_test_dir, - self.status_args) - self._check_mixed_cont_simple_required_post_checkout(overall, tree) - - -class TestSysCheckoutSVN(BaseTestSysCheckout): - """Run systems level tests of checkout_externals accessing svn repositories - - SVN tests - these tests use the svn repository interface. Since - they require an active network connection, they are significantly - slower than the git tests. But svn testing is critical. So try to - design the tests to only test svn repository functionality - (checkout, switch) and leave generic testing of functionality like - 'optional' to the fast git tests. - - Example timing as of 2017-11: - - * All other git and unit tests combined take between 4-5 seconds - - * Just checking if svn is available for a single test takes 2 seconds. - - * The single svn test typically takes between 10 and 25 seconds - (depending on the network)! - - NOTE(bja, 2017-11) To enable CI testing we can't use a real remote - repository that restricts access and it seems inappropriate to hit - a random open source repo. For now we are just hitting one of our - own github repos using the github svn server interface. This - should be "good enough" for basic checkout and swich - functionality. But if additional svn functionality is required, a - better solution will be necessary. I think eventually we want to - create a small local svn repository on the fly (doesn't require an - svn server or network connection!) and use it for testing. - - """ - - def _check_svn_branch_ok(self, tree, directory=EXTERNALS_NAME): - name = './{0}/svn_branch'.format(directory) - self._check_generic_ok_clean_required(tree, name) - - def _check_svn_branch_dirty(self, tree, directory=EXTERNALS_NAME): - name = './{0}/svn_branch'.format(directory) - self._check_generic_ok_dirty_required(tree, name) - - def _check_svn_tag_ok(self, tree, directory=EXTERNALS_NAME): - name = './{0}/svn_tag'.format(directory) - self._check_generic_ok_clean_required(tree, name) - - def _check_svn_tag_modified(self, tree, directory=EXTERNALS_NAME): - name = './{0}/svn_tag'.format(directory) - self._check_generic_modified_ok_required(tree, name) - - def _check_container_simple_svn_post_checkout(self, overall, tree): - self.assertEqual(overall, 0) - self._check_simple_tag_ok(tree) - self._check_svn_branch_ok(tree) - self._check_svn_tag_ok(tree) - - def _check_container_simple_svn_sb_dirty_st_mod(self, overall, tree): - self.assertEqual(overall, 0) - self._check_simple_tag_ok(tree) - self._check_svn_tag_modified(tree) - self._check_svn_branch_dirty(tree) - - def _check_container_simple_svn_sb_clean_st_mod(self, overall, tree): - self.assertEqual(overall, 0) - self._check_simple_tag_ok(tree) - self._check_svn_tag_modified(tree) - self._check_svn_branch_ok(tree) - - @staticmethod - def have_svn_access(): - """Check if we have svn access so we can enable tests that use svn. - - """ - have_svn = False - cmd = ['svn', 'ls', SVN_TEST_REPO, ] - try: - execute_subprocess(cmd) - have_svn = True - except BaseException: - pass - return have_svn - - def skip_if_no_svn_access(self): - """Function decorator to disable svn tests when svn isn't available - """ - have_svn = self.have_svn_access() - if not have_svn: - raise unittest.SkipTest("No svn access") - - def test_container_simple_svn(self): - """Verify that a container repo can pull in an svn branch and svn tag. - - """ - self.skip_if_no_svn_access() - # create repo - under_test_dir = self.setup_test_repo(CONTAINER_REPO_NAME) - self._generator.container_simple_svn(under_test_dir) - - # checkout - overall, tree = self.execute_cmd_in_dir(under_test_dir, - self.checkout_args) - - # verify status is clean and unmodified - overall, tree = self.execute_cmd_in_dir(under_test_dir, - self.status_args) - self._check_container_simple_svn_post_checkout(overall, tree) - - # update description file to make the tag into a branch and - # trigger a switch - self._generator.update_svn_branch(under_test_dir, 'svn_tag', 'trunk') - - # checkout - overall, tree = self.execute_cmd_in_dir(under_test_dir, - self.checkout_args) - - # verify status is clean and unmodified - overall, tree = self.execute_cmd_in_dir(under_test_dir, - self.status_args) - self._check_container_simple_svn_post_checkout(overall, tree) - - # add an untracked file to the repo - tracked = False - self._add_file_to_repo(under_test_dir, - 'externals/svn_branch/tmp.txt', tracked) - - # run a no-op checkout: pre-checkout status should be clean, - # ignoring the untracked file. - overall, tree = self.execute_cmd_in_dir(under_test_dir, - self.checkout_args) - self._check_container_simple_svn_post_checkout(overall, tree) - - # update description file to make the branch into a tag and - # trigger a modified sync status - self._generator.update_svn_branch(under_test_dir, 'svn_tag', - 'tags/cesm2.0.beta07') - - # checkout: pre-checkout status should be clean and modified, - # will modify working copy. - overall, tree = self.execute_cmd_in_dir(under_test_dir, - self.checkout_args) - self._check_container_simple_svn_sb_clean_st_mod(overall, tree) - - # verify status is still clean and unmodified, last - # checkout modified the working dir state. - overall, tree = self.execute_cmd_in_dir(under_test_dir, - self.verbose_args) - self._check_container_simple_svn_post_checkout(overall, tree) - -class TestSubrepoCheckout(BaseTestSysCheckout): - # Need to store information at setUp time for checking - # pylint: disable=too-many-instance-attributes - """Run tests to ensure proper handling of repos with submodules. - - By default, submodules in git repositories are checked out. A git - repository checked out as a submodule is treated as if it was - listed in an external with the same properties as in the source - .gitmodules file. - """ - - def setUp(self): - """Setup for all submodule checkout tests - Create a repo with two submodule repositories. - """ - - # Run the basic setup - super(TestSubrepoCheckout, self).setUp() - # create test repo - # We need to do this here (rather than have a static repo) because - # git submodules do not allow for variables in .gitmodules files - self._test_repo_name = 'test_repo_with_submodules' - self._bare_branch_name = 'subrepo_branch' - self._config_branch_name = 'subrepo_config_branch' - self._container_extern_name = 'externals_container.cfg' - self._my_test_dir = os.path.join(os.environ[MANIC_TEST_TMP_REPO_ROOT], - self._test_id) - self._repo_dir = os.path.join(self._my_test_dir, self._test_repo_name) - self._checkout_dir = 'repo_with_submodules' - check_dir = self.setup_test_repo(CONTAINER_REPO_NAME, - dest_dir_in=self._repo_dir) - self.assertTrue(self._repo_dir == check_dir) - # Add the submodules - cwd = os.getcwd() - fork_repo_dir = os.path.join(self._bare_root, SIMPLE_FORK_NAME) - simple_repo_dir = os.path.join(self._bare_root, SIMPLE_REPO_NAME) - self._simple_ext_fork_name = SIMPLE_FORK_NAME.split('.')[0] - self._simple_ext_name = SIMPLE_REPO_NAME.split('.')[0] - os.chdir(self._repo_dir) - # Add a branch with a subrepo - cmd = ['git', 'branch', self._bare_branch_name, 'master'] - execute_subprocess(cmd) - cmd = ['git', 'checkout', self._bare_branch_name] - execute_subprocess(cmd) - cmd = ['git', 'submodule', 'add', fork_repo_dir] - execute_subprocess(cmd) - cmd = ['git', 'commit', '-am', "'Added simple-ext-fork as a submodule'"] - execute_subprocess(cmd) - # Save the fork repo hash for comparison - os.chdir(self._simple_ext_fork_name) - self._fork_hash_check = self.get_git_hash() - os.chdir(self._repo_dir) - # Now, create a branch to test from_sbmodule - cmd = ['git', 'branch', - self._config_branch_name, self._bare_branch_name] - execute_subprocess(cmd) - cmd = ['git', 'checkout', self._config_branch_name] - execute_subprocess(cmd) - cmd = ['git', 'submodule', 'add', simple_repo_dir] - execute_subprocess(cmd) - # Checkout feature2 - os.chdir(self._simple_ext_name) - cmd = ['git', 'branch', 'feature2', 'origin/feature2'] - execute_subprocess(cmd) - cmd = ['git', 'checkout', 'feature2'] - execute_subprocess(cmd) - # Save the fork repo hash for comparison - self._simple_hash_check = self.get_git_hash() - os.chdir(self._repo_dir) - self.create_externals_file(filename=self._container_extern_name, - dest_dir=self._repo_dir, from_submodule=True) - cmd = ['git', 'add', self._container_extern_name] - execute_subprocess(cmd) - cmd = ['git', 'commit', '-am', "'Added simple-ext as a submodule'"] - execute_subprocess(cmd) - # Reset to master - cmd = ['git', 'checkout', 'master'] - execute_subprocess(cmd) - os.chdir(cwd) - - @staticmethod - def get_git_hash(revision="HEAD"): - """Return the hash for """ - cmd = ['git', 'rev-parse', revision] - git_out = execute_subprocess(cmd, output_to_caller=True) - return git_out.strip() - - def create_externals_file(self, name='', filename=CFG_NAME, dest_dir=None, - branch_name=None, sub_externals=None, - from_submodule=False): - # pylint: disable=too-many-arguments - """Create a container externals file with only simple externals. - - """ - self._generator.create_config() - - if dest_dir is None: - dest_dir = self._my_test_dir - - if from_submodule: - self._generator.create_section(SIMPLE_FORK_NAME, - self._simple_ext_fork_name, - from_submodule=True) - self._generator.create_section(SIMPLE_REPO_NAME, - self._simple_ext_name, - branch='feature3', path='', - from_submodule=False) - else: - if branch_name is None: - branch_name = 'master' - - self._generator.create_section(self._test_repo_name, - self._checkout_dir, - branch=branch_name, - path=name, externals=sub_externals, - repo_path=self._repo_dir) - - self._generator.write_config(dest_dir, filename=filename) - - def idempotence_check(self, checkout_dir): - """Verify that calling checkout_externals and - checkout_externals --status does not cause errors""" - cwd = os.getcwd() - os.chdir(checkout_dir) - overall, _ = self.execute_cmd_in_dir(self._my_test_dir, - self.checkout_args) - self.assertTrue(overall == 0) - overall, _ = self.execute_cmd_in_dir(self._my_test_dir, - self.status_args) - self.assertTrue(overall == 0) - os.chdir(cwd) - - def test_submodule_checkout_bare(self): - """Verify that a git repo with submodule is properly checked out - This test if for where there is no 'externals' keyword in the - parent repo. - Correct behavior is that the submodule is checked out using - normal git submodule behavior. - """ - simple_ext_fork_tag = "(tag1)" - simple_ext_fork_status = " " - self.create_externals_file(branch_name=self._bare_branch_name) - overall, _ = self.execute_cmd_in_dir(self._my_test_dir, - self.checkout_args) - self.assertTrue(overall == 0) - cwd = os.getcwd() - checkout_dir = os.path.join(self._my_test_dir, self._checkout_dir) - fork_file = os.path.join(checkout_dir, - self._simple_ext_fork_name, "readme.txt") - self.assertTrue(os.path.exists(fork_file)) - os.chdir(checkout_dir) - submods = git_submodule_status(checkout_dir) - self.assertEqual(len(submods.keys()), 1) - self.assertTrue(self._simple_ext_fork_name in submods) - submod = submods[self._simple_ext_fork_name] - self.assertTrue('hash' in submod) - self.assertEqual(submod['hash'], self._fork_hash_check) - self.assertTrue('status' in submod) - self.assertEqual(submod['status'], simple_ext_fork_status) - self.assertTrue('tag' in submod) - self.assertEqual(submod['tag'], simple_ext_fork_tag) - os.chdir(cwd) - self.idempotence_check(checkout_dir) - - def test_submodule_checkout_none(self): - """Verify that a git repo with submodule is properly checked out - This test is for when 'externals=None' is in parent repo's - externals cfg file. - Correct behavior is the submodle is not checked out. - """ - self.create_externals_file(branch_name=self._bare_branch_name, - sub_externals="none") - overall, _ = self.execute_cmd_in_dir(self._my_test_dir, - self.checkout_args) - self.assertTrue(overall == 0) - cwd = os.getcwd() - checkout_dir = os.path.join(self._my_test_dir, self._checkout_dir) - fork_file = os.path.join(checkout_dir, - self._simple_ext_fork_name, "readme.txt") - self.assertFalse(os.path.exists(fork_file)) - os.chdir(cwd) - self.idempotence_check(checkout_dir) - - def test_submodule_checkout_config(self): # pylint: disable=too-many-locals - """Verify that a git repo with submodule is properly checked out - This test if for when the 'from_submodule' keyword is used in the - parent repo. - Correct behavior is that the submodule is checked out using - normal git submodule behavior. - """ - tag_check = None # Not checked out as submodule - status_check = "-" # Not checked out as submodule - self.create_externals_file(branch_name=self._config_branch_name, - sub_externals=self._container_extern_name) - overall, _ = self.execute_cmd_in_dir(self._my_test_dir, - self.checkout_args) - self.assertTrue(overall == 0) - cwd = os.getcwd() - checkout_dir = os.path.join(self._my_test_dir, self._checkout_dir) - fork_file = os.path.join(checkout_dir, - self._simple_ext_fork_name, "readme.txt") - self.assertTrue(os.path.exists(fork_file)) - os.chdir(checkout_dir) - # Check submodule status - submods = git_submodule_status(checkout_dir) - self.assertEqual(len(submods.keys()), 2) - self.assertTrue(self._simple_ext_fork_name in submods) - submod = submods[self._simple_ext_fork_name] - self.assertTrue('hash' in submod) - self.assertEqual(submod['hash'], self._fork_hash_check) - self.assertTrue('status' in submod) - self.assertEqual(submod['status'], status_check) - self.assertTrue('tag' in submod) - self.assertEqual(submod['tag'], tag_check) - self.assertTrue(self._simple_ext_name in submods) - submod = submods[self._simple_ext_name] - self.assertTrue('hash' in submod) - self.assertEqual(submod['hash'], self._simple_hash_check) - self.assertTrue('status' in submod) - self.assertEqual(submod['status'], status_check) - self.assertTrue('tag' in submod) - self.assertEqual(submod['tag'], tag_check) - # Check fork repo status - os.chdir(self._simple_ext_fork_name) - self.assertEqual(self.get_git_hash(), self._fork_hash_check) - os.chdir(checkout_dir) - os.chdir(self._simple_ext_name) - hash_check = self.get_git_hash('origin/feature3') - self.assertEqual(self.get_git_hash(), hash_check) - os.chdir(cwd) - self.idempotence_check(checkout_dir) - -class TestSysCheckoutErrors(BaseTestSysCheckout): - """Run systems level tests of error conditions in checkout_externals - - Error conditions - these tests are designed to trigger specific - error conditions and ensure that they are being handled as - runtime errors (and hopefully usefull error messages) instead of - the default internal message that won't mean anything to the - user, e.g. key error, called process error, etc. - - These are not 'expected failures'. They are pass when a - RuntimeError is raised, fail if any other error is raised (or no - error is raised). - - """ - - # NOTE(bja, 2017-11) pylint complains about long method names, but - # it is hard to differentiate tests without making them more - # cryptic. - # pylint: disable=invalid-name - - def test_error_unknown_protocol(self): - """Verify that a runtime error is raised when the user specified repo - protocol is not known. - - """ - # create repo - under_test_dir = self.setup_test_repo(CONTAINER_REPO_NAME) - self._generator.container_simple_required(under_test_dir) - - # update the config file to point to a different remote with - # the tag instead of branch. Tag MUST NOT be in the original - # repo! - self._generator.update_protocol(under_test_dir, 'simp_branch', - 'this-protocol-does-not-exist') - - with self.assertRaises(RuntimeError): - self.execute_cmd_in_dir(under_test_dir, self.checkout_args) - - def test_error_switch_protocol(self): - """Verify that a runtime error is raised when the user switches - protocols, git to svn. - - TODO(bja, 2017-11) This correctly results in an error, but it - isn't a helpful error message. - - """ - # create repo - under_test_dir = self.setup_test_repo(CONTAINER_REPO_NAME) - self._generator.container_simple_required(under_test_dir) - - # update the config file to point to a different remote with - # the tag instead of branch. Tag MUST NOT be in the original - # repo! - self._generator.update_protocol(under_test_dir, 'simp_branch', 'svn') - with self.assertRaises(RuntimeError): - self.execute_cmd_in_dir(under_test_dir, self.checkout_args) - - def test_error_unknown_tag(self): - """Verify that a runtime error is raised when the user specified tag - does not exist. - - """ - # create repo - under_test_dir = self.setup_test_repo(CONTAINER_REPO_NAME) - self._generator.container_simple_required(under_test_dir) - - # update the config file to point to a different remote with - # the tag instead of branch. Tag MUST NOT be in the original - # repo! - self._generator.update_tag(under_test_dir, 'simp_branch', - 'this-tag-does-not-exist', SIMPLE_REPO_NAME) - - with self.assertRaises(RuntimeError): - self.execute_cmd_in_dir(under_test_dir, self.checkout_args) - - def test_error_overspecify_tag_branch(self): - """Verify that a runtime error is raised when the user specified both - tag and a branch - - """ - # create repo - under_test_dir = self.setup_test_repo(CONTAINER_REPO_NAME) - self._generator.container_simple_required(under_test_dir) - - # update the config file to point to a different remote with - # the tag instead of branch. Tag MUST NOT be in the original - # repo! - self._generator.update_tag(under_test_dir, 'simp_branch', - 'this-tag-does-not-exist', SIMPLE_REPO_NAME, - remove_branch=False) - - with self.assertRaises(RuntimeError): - self.execute_cmd_in_dir(under_test_dir, self.checkout_args) - - def test_error_underspecify_tag_branch(self): - """Verify that a runtime error is raised when the user specified - neither a tag or a branch - - """ - # create repo - under_test_dir = self.setup_test_repo(CONTAINER_REPO_NAME) - self._generator.container_simple_required(under_test_dir) - - # update the config file to point to a different remote with - # the tag instead of branch. Tag MUST NOT be in the original - # repo! - self._generator.update_underspecify_branch_tag(under_test_dir, - 'simp_branch') - - with self.assertRaises(RuntimeError): - self.execute_cmd_in_dir(under_test_dir, self.checkout_args) - - def test_error_missing_url(self): - """Verify that a runtime error is raised when the user specified - neither a tag or a branch - - """ - # create repo - under_test_dir = self.setup_test_repo(CONTAINER_REPO_NAME) - self._generator.container_simple_required(under_test_dir) - - # update the config file to point to a different remote with - # the tag instead of branch. Tag MUST NOT be in the original - # repo! - self._generator.update_underspecify_remove_url(under_test_dir, - 'simp_branch') - - with self.assertRaises(RuntimeError): - self.execute_cmd_in_dir(under_test_dir, self.checkout_args) - - -if __name__ == '__main__': - unittest.main() diff --git a/manage_externals/test/test_sys_repository_git.py b/manage_externals/test/test_sys_repository_git.py deleted file mode 100644 index f6dbf8428..000000000 --- a/manage_externals/test/test_sys_repository_git.py +++ /dev/null @@ -1,238 +0,0 @@ -#!/usr/bin/env python - -"""Tests of some of the functionality in repository_git.py that actually -interacts with git repositories. - -We're calling these "system" tests because we expect them to be a lot -slower than most of the unit tests. - -""" - -from __future__ import absolute_import -from __future__ import unicode_literals -from __future__ import print_function - -import os -import shutil -import tempfile -import unittest - -from manic.repository_git import GitRepository -from manic.externals_description import ExternalsDescription -from manic.externals_description import ExternalsDescriptionDict -from manic.utils import execute_subprocess - -# NOTE(wjs, 2018-04-09) I find a mix of camel case and underscores to be -# more readable for unit test names, so I'm disabling pylint's naming -# convention check -# pylint: disable=C0103 - -# Allow access to protected members -# pylint: disable=W0212 - - -class GitTestCase(unittest.TestCase): - """Adds some git-specific unit test functionality on top of TestCase""" - - def assertIsHash(self, maybe_hash): - """Assert that the string given by maybe_hash really does look - like a git hash. - """ - - # Ensure it is non-empty - self.assertTrue(maybe_hash, msg="maybe_hash is empty") - - # Ensure it has a single string - self.assertEqual(1, len(maybe_hash.split()), - msg="maybe_hash has multiple strings: {}".format(maybe_hash)) - - # Ensure that the only characters in the string are ones allowed - # in hashes - allowed_chars_set = set('0123456789abcdef') - self.assertTrue(set(maybe_hash) <= allowed_chars_set, - msg="maybe_hash has non-hash characters: {}".format(maybe_hash)) - - -class TestGitTestCase(GitTestCase): - """Tests GitTestCase""" - - def test_assertIsHash_true(self): - """Ensure that assertIsHash passes for something that looks - like a hash""" - self.assertIsHash('abc123') - - def test_assertIsHash_empty(self): - """Ensure that assertIsHash raises an AssertionError for an - empty string""" - with self.assertRaises(AssertionError): - self.assertIsHash('') - - def test_assertIsHash_multipleStrings(self): - """Ensure that assertIsHash raises an AssertionError when - given multiple strings""" - with self.assertRaises(AssertionError): - self.assertIsHash('abc123 def456') - - def test_assertIsHash_badChar(self): - """Ensure that assertIsHash raises an AssertionError when given a - string that has a character that doesn't belong in a hash - """ - with self.assertRaises(AssertionError): - self.assertIsHash('abc123g') - - -class TestGitRepositoryGitCommands(GitTestCase): - """Test some git commands in RepositoryGit - - It's silly that we need to create a repository in order to test - these git commands. Much or all of the git functionality that is - currently in repository_git.py should eventually be moved to a - separate module that is solely responsible for wrapping git - commands; that would allow us to test it independently of this - repository class. - """ - - # ======================================================================== - # Test helper functions - # ======================================================================== - - def setUp(self): - # directory we want to return to after the test system and - # checkout_externals are done cd'ing all over the place. - self._return_dir = os.getcwd() - - self._tmpdir = tempfile.mkdtemp() - os.chdir(self._tmpdir) - - self._name = 'component' - rdata = {ExternalsDescription.PROTOCOL: 'git', - ExternalsDescription.REPO_URL: - '/path/to/local/repo', - ExternalsDescription.TAG: - 'tag1', - } - - data = {self._name: - { - ExternalsDescription.REQUIRED: False, - ExternalsDescription.PATH: 'junk', - ExternalsDescription.EXTERNALS: '', - ExternalsDescription.REPO: rdata, - }, - } - model = ExternalsDescriptionDict(data) - repo = model[self._name][ExternalsDescription.REPO] - self._repo = GitRepository('test', repo) - - def tearDown(self): - # return to our common starting point - os.chdir(self._return_dir) - - shutil.rmtree(self._tmpdir, ignore_errors=True) - - @staticmethod - def make_git_repo(): - """Turn the current directory into an empty git repository""" - execute_subprocess(['git', 'init']) - - @staticmethod - def add_git_commit(): - """Add a git commit in the current directory""" - with open('README', 'a') as myfile: - myfile.write('more info') - execute_subprocess(['git', 'add', 'README']) - execute_subprocess(['git', 'commit', '-m', 'my commit message']) - - @staticmethod - def checkout_git_branch(branchname): - """Checkout a new branch in the current directory""" - execute_subprocess(['git', 'checkout', '-b', branchname]) - - @staticmethod - def make_git_tag(tagname): - """Make a lightweight tag at the current commit""" - execute_subprocess(['git', 'tag', '-m', 'making a tag', tagname]) - - @staticmethod - def checkout_ref(refname): - """Checkout the given refname in the current directory""" - execute_subprocess(['git', 'checkout', refname]) - - # ======================================================================== - # Begin actual tests - # ======================================================================== - - def test_currentHash_returnsHash(self): - """Ensure that the _git_current_hash function returns a hash""" - self.make_git_repo() - self.add_git_commit() - hash_found, myhash = self._repo._git_current_hash() - self.assertTrue(hash_found) - self.assertIsHash(myhash) - - def test_currentHash_outsideGitRepo(self): - """Ensure that the _git_current_hash function returns False when - outside a git repository""" - hash_found, myhash = self._repo._git_current_hash() - self.assertFalse(hash_found) - self.assertEqual('', myhash) - - def test_currentBranch_onBranch(self): - """Ensure that the _git_current_branch function returns the name - of the branch""" - self.make_git_repo() - self.add_git_commit() - self.checkout_git_branch('foo') - branch_found, mybranch = self._repo._git_current_branch() - self.assertTrue(branch_found) - self.assertEqual('foo', mybranch) - - def test_currentBranch_notOnBranch(self): - """Ensure that the _git_current_branch function returns False - when not on a branch""" - self.make_git_repo() - self.add_git_commit() - self.make_git_tag('mytag') - self.checkout_ref('mytag') - branch_found, mybranch = self._repo._git_current_branch() - self.assertFalse(branch_found) - self.assertEqual('', mybranch) - - def test_currentBranch_outsideGitRepo(self): - """Ensure that the _git_current_branch function returns False - when outside a git repository""" - branch_found, mybranch = self._repo._git_current_branch() - self.assertFalse(branch_found) - self.assertEqual('', mybranch) - - def test_currentTag_onTag(self): - """Ensure that the _git_current_tag function returns the name of - the tag""" - self.make_git_repo() - self.add_git_commit() - self.make_git_tag('some_tag') - tag_found, mytag = self._repo._git_current_tag() - self.assertTrue(tag_found) - self.assertEqual('some_tag', mytag) - - def test_currentTag_notOnTag(self): - """Ensure tha the _git_current_tag function returns False when - not on a tag""" - self.make_git_repo() - self.add_git_commit() - self.make_git_tag('some_tag') - self.add_git_commit() - tag_found, mytag = self._repo._git_current_tag() - self.assertFalse(tag_found) - self.assertEqual('', mytag) - - def test_currentTag_outsideGitRepo(self): - """Ensure that the _git_current_tag function returns False when - outside a git repository""" - tag_found, mytag = self._repo._git_current_tag() - self.assertFalse(tag_found) - self.assertEqual('', mytag) - - -if __name__ == '__main__': - unittest.main() diff --git a/manage_externals/test/test_unit_externals_description.py b/manage_externals/test/test_unit_externals_description.py deleted file mode 100644 index 637f760ee..000000000 --- a/manage_externals/test/test_unit_externals_description.py +++ /dev/null @@ -1,401 +0,0 @@ -#!/usr/bin/env python - -"""Unit test driver for checkout_externals - -Note: this script assume the path to the checkout_externals.py module is -already in the python path. - -""" - -from __future__ import absolute_import -from __future__ import unicode_literals -from __future__ import print_function - -import os -import os.path -import shutil -import unittest - -try: - # python2 - from ConfigParser import SafeConfigParser as config_parser - - def config_string_cleaner(text): - """convert strings into unicode - """ - return text.decode('utf-8') -except ImportError: - # python3 - from configparser import ConfigParser as config_parser - - def config_string_cleaner(text): - """Python3 already uses unicode strings, so just return the string - without modification. - - """ - return text - -from manic.externals_description import DESCRIPTION_SECTION, VERSION_ITEM -from manic.externals_description import ExternalsDescription -from manic.externals_description import ExternalsDescriptionDict -from manic.externals_description import ExternalsDescriptionConfigV1 -from manic.externals_description import get_cfg_schema_version -from manic.externals_description import read_externals_description_file -from manic.externals_description import create_externals_description - -from manic.global_constants import EMPTY_STR - - -class TestCfgSchemaVersion(unittest.TestCase): - """Test that schema identification for the externals description - returns the correct results. - - """ - - def setUp(self): - """Reusable config object - """ - self._config = config_parser() - self._config.add_section('section1') - self._config.set('section1', 'keword', 'value') - - self._config.add_section(DESCRIPTION_SECTION) - - def test_schema_version_valid(self): - """Test that schema identification returns the correct version for a - valid tag. - - """ - version_str = '2.1.3' - self._config.set(DESCRIPTION_SECTION, VERSION_ITEM, version_str) - major, minor, patch = get_cfg_schema_version(self._config) - expected_major = 2 - expected_minor = 1 - expected_patch = 3 - self.assertEqual(expected_major, major) - self.assertEqual(expected_minor, minor) - self.assertEqual(expected_patch, patch) - - def test_schema_section_missing(self): - """Test that an error is returned if the schema section is missing - from the input file. - - """ - self._config.remove_section(DESCRIPTION_SECTION) - with self.assertRaises(RuntimeError): - get_cfg_schema_version(self._config) - - def test_schema_version_missing(self): - """Test that a externals description file without a version raises a - runtime error. - - """ - # Note: the default setup method shouldn't include a version - # keyword, but remove it just to be future proof.... - self._config.remove_option(DESCRIPTION_SECTION, VERSION_ITEM) - with self.assertRaises(RuntimeError): - get_cfg_schema_version(self._config) - - def test_schema_version_not_int(self): - """Test that a externals description file a version that doesn't - decompose to integer major, minor and patch versions raises - runtime error. - - """ - self._config.set(DESCRIPTION_SECTION, VERSION_ITEM, 'unknown') - with self.assertRaises(RuntimeError): - get_cfg_schema_version(self._config) - - -class TestModelDescritionConfigV1(unittest.TestCase): - """Test that parsing config/ini fileproduces a correct dictionary - for the externals description. - - """ - # pylint: disable=R0902 - - def setUp(self): - """Boiler plate construction of string containing xml for multiple components. - """ - self._comp1_name = 'comp1' - self._comp1_path = 'path/to/comp1' - self._comp1_protocol = 'svn' - self._comp1_url = 'https://svn.somewhere.com/path/of/comp1' - self._comp1_tag = 'a_nice_tag_v1' - self._comp1_is_required = 'True' - self._comp1_externals = '' - - self._comp2_name = 'comp2' - self._comp2_path = 'path/to/comp2' - self._comp2_protocol = 'git' - self._comp2_url = '/local/clone/of/comp2' - self._comp2_branch = 'a_very_nice_branch' - self._comp2_is_required = 'False' - self._comp2_externals = 'path/to/comp2.cfg' - - def _setup_comp1(self, config): - """Boiler plate construction of xml string for componet 1 - """ - config.add_section(self._comp1_name) - config.set(self._comp1_name, 'local_path', self._comp1_path) - config.set(self._comp1_name, 'protocol', self._comp1_protocol) - config.set(self._comp1_name, 'repo_url', self._comp1_url) - config.set(self._comp1_name, 'tag', self._comp1_tag) - config.set(self._comp1_name, 'required', self._comp1_is_required) - - def _setup_comp2(self, config): - """Boiler plate construction of xml string for componet 2 - """ - config.add_section(self._comp2_name) - config.set(self._comp2_name, 'local_path', self._comp2_path) - config.set(self._comp2_name, 'protocol', self._comp2_protocol) - config.set(self._comp2_name, 'repo_url', self._comp2_url) - config.set(self._comp2_name, 'branch', self._comp2_branch) - config.set(self._comp2_name, 'required', self._comp2_is_required) - config.set(self._comp2_name, 'externals', self._comp2_externals) - - @staticmethod - def _setup_externals_description(config): - """Add the required exernals description section - """ - - config.add_section(DESCRIPTION_SECTION) - config.set(DESCRIPTION_SECTION, VERSION_ITEM, '1.0.1') - - def _check_comp1(self, model): - """Test that component one was constructed correctly. - """ - self.assertTrue(self._comp1_name in model) - comp1 = model[self._comp1_name] - self.assertEqual(comp1[ExternalsDescription.PATH], self._comp1_path) - self.assertTrue(comp1[ExternalsDescription.REQUIRED]) - repo = comp1[ExternalsDescription.REPO] - self.assertEqual(repo[ExternalsDescription.PROTOCOL], - self._comp1_protocol) - self.assertEqual(repo[ExternalsDescription.REPO_URL], self._comp1_url) - self.assertEqual(repo[ExternalsDescription.TAG], self._comp1_tag) - self.assertEqual(EMPTY_STR, comp1[ExternalsDescription.EXTERNALS]) - - def _check_comp2(self, model): - """Test that component two was constucted correctly. - """ - self.assertTrue(self._comp2_name in model) - comp2 = model[self._comp2_name] - self.assertEqual(comp2[ExternalsDescription.PATH], self._comp2_path) - self.assertFalse(comp2[ExternalsDescription.REQUIRED]) - repo = comp2[ExternalsDescription.REPO] - self.assertEqual(repo[ExternalsDescription.PROTOCOL], - self._comp2_protocol) - self.assertEqual(repo[ExternalsDescription.REPO_URL], self._comp2_url) - self.assertEqual(repo[ExternalsDescription.BRANCH], self._comp2_branch) - self.assertEqual(self._comp2_externals, - comp2[ExternalsDescription.EXTERNALS]) - - def test_one_tag_required(self): - """Test that a component source with a tag is correctly parsed. - """ - config = config_parser() - self._setup_comp1(config) - self._setup_externals_description(config) - model = ExternalsDescriptionConfigV1(config) - print(model) - self._check_comp1(model) - - def test_one_branch_externals(self): - """Test that a component source with a branch is correctly parsed. - """ - config = config_parser() - self._setup_comp2(config) - self._setup_externals_description(config) - model = ExternalsDescriptionConfigV1(config) - print(model) - self._check_comp2(model) - - def test_two_sources(self): - """Test that multiple component sources are correctly parsed. - """ - config = config_parser() - self._setup_comp1(config) - self._setup_comp2(config) - self._setup_externals_description(config) - model = ExternalsDescriptionConfigV1(config) - print(model) - self._check_comp1(model) - self._check_comp2(model) - - def test_cfg_v1_reject_unknown_item(self): - """Test that a v1 description object will reject unknown items - """ - config = config_parser() - self._setup_comp1(config) - self._setup_externals_description(config) - config.set(self._comp1_name, 'junk', 'foobar') - with self.assertRaises(RuntimeError): - ExternalsDescriptionConfigV1(config) - - def test_cfg_v1_reject_v2(self): - """Test that a v1 description object won't try to parse a v2 file. - """ - config = config_parser() - self._setup_comp1(config) - self._setup_externals_description(config) - config.set(DESCRIPTION_SECTION, VERSION_ITEM, '2.0.1') - with self.assertRaises(RuntimeError): - ExternalsDescriptionConfigV1(config) - - def test_cfg_v1_reject_v1_too_new(self): - """Test that a v1 description object won't try to parse a v2 file. - """ - config = config_parser() - self._setup_comp1(config) - self._setup_externals_description(config) - config.set(DESCRIPTION_SECTION, VERSION_ITEM, '1.100.0') - with self.assertRaises(RuntimeError): - ExternalsDescriptionConfigV1(config) - - -class TestReadExternalsDescription(unittest.TestCase): - """Test the application logic of read_externals_description_file - """ - TMP_FAKE_DIR = 'fake' - - def setUp(self): - """Setup directory for tests - """ - if not os.path.exists(self.TMP_FAKE_DIR): - os.makedirs(self.TMP_FAKE_DIR) - - def tearDown(self): - """Cleanup tmp stuff on the file system - """ - if os.path.exists(self.TMP_FAKE_DIR): - shutil.rmtree(self.TMP_FAKE_DIR) - - def test_no_file_error(self): - """Test that a runtime error is raised when the file does not exist - - """ - root_dir = os.getcwd() - filename = 'this-file-should-not-exist' - with self.assertRaises(RuntimeError): - read_externals_description_file(root_dir, filename) - - def test_no_dir_error(self): - """Test that a runtime error is raised when the file does not exist - - """ - root_dir = '/path/to/some/repo' - filename = 'externals.cfg' - with self.assertRaises(RuntimeError): - read_externals_description_file(root_dir, filename) - - def test_no_invalid_error(self): - """Test that a runtime error is raised when the file format is invalid - - """ - root_dir = os.getcwd() - filename = 'externals.cfg' - file_path = os.path.join(root_dir, filename) - file_path = os.path.abspath(file_path) - contents = """ - -invalid file format -""" - with open(file_path, 'w') as fhandle: - fhandle.write(contents) - with self.assertRaises(RuntimeError): - read_externals_description_file(root_dir, filename) - os.remove(file_path) - - -class TestCreateExternalsDescription(unittest.TestCase): - """Test the application logic of creat_externals_description - """ - - def setUp(self): - """Create config object used as basis for all tests - """ - self._config = config_parser() - self._gmconfig = config_parser() - self.setup_config() - - def setup_config(self): - """Boiler plate construction of xml string for componet 1 - """ - # Create a standard externals config with a single external - name = 'test' - self._config.add_section(name) - self._config.set(name, ExternalsDescription.PATH, 'externals') - self._config.set(name, ExternalsDescription.PROTOCOL, 'git') - self._config.set(name, ExternalsDescription.REPO_URL, '/path/to/repo') - self._config.set(name, ExternalsDescription.TAG, 'test_tag') - self._config.set(name, ExternalsDescription.REQUIRED, 'True') - - self._config.add_section(DESCRIPTION_SECTION) - self._config.set(DESCRIPTION_SECTION, VERSION_ITEM, '1.0.0') - - # Create a .gitmodules test - name = 'submodule "gitmodules_test"' - self._gmconfig.add_section(name) - self._gmconfig.set(name, "path", 'externals/test') - self._gmconfig.set(name, "url", '/path/to/repo') - # NOTE(goldy, 2019-03) Should test other possible keywords such as - # fetchRecurseSubmodules, ignore, and shallow - - def test_cfg_v1_ok(self): - """Test that a correct cfg v1 object is created by create_externals_description - - """ - self._config.set(DESCRIPTION_SECTION, VERSION_ITEM, '1.0.3') - ext = create_externals_description(self._config, model_format='cfg') - self.assertIsInstance(ext, ExternalsDescriptionConfigV1) - - def test_cfg_v1_unknown_version(self): - """Test that a config file with unknown schema version is rejected by - create_externals_description. - - """ - self._config.set(DESCRIPTION_SECTION, VERSION_ITEM, '100.0.3') - with self.assertRaises(RuntimeError): - create_externals_description(self._config, model_format='cfg') - - def test_dict(self): - """Test that a correct cfg v1 object is created by create_externals_description - - """ - rdata = {ExternalsDescription.PROTOCOL: 'git', - ExternalsDescription.REPO_URL: '/path/to/repo', - ExternalsDescription.TAG: 'tagv1', - } - - desc = { - 'test': { - ExternalsDescription.REQUIRED: False, - ExternalsDescription.PATH: '../fake', - ExternalsDescription.EXTERNALS: EMPTY_STR, - ExternalsDescription.REPO: rdata, }, - } - - ext = create_externals_description(desc, model_format='dict') - self.assertIsInstance(ext, ExternalsDescriptionDict) - - def test_cfg_unknown_version(self): - """Test that a runtime error is raised when an unknown file version is - received - - """ - self._config.set(DESCRIPTION_SECTION, VERSION_ITEM, '123.456.789') - with self.assertRaises(RuntimeError): - create_externals_description(self._config, model_format='cfg') - - def test_cfg_unknown_format(self): - """Test that a runtime error is raised when an unknown format string is - received - - """ - with self.assertRaises(RuntimeError): - create_externals_description(self._config, model_format='unknown') - - -if __name__ == '__main__': - unittest.main() diff --git a/manage_externals/test/test_unit_externals_status.py b/manage_externals/test/test_unit_externals_status.py deleted file mode 100644 index f8e953f75..000000000 --- a/manage_externals/test/test_unit_externals_status.py +++ /dev/null @@ -1,299 +0,0 @@ -#!/usr/bin/env python - -"""Unit test driver for the manic external status reporting module. - -Note: this script assumes the path to the manic package is already in -the python path. - -""" - -from __future__ import absolute_import -from __future__ import unicode_literals -from __future__ import print_function - -import unittest - -from manic.externals_status import ExternalStatus - - -class TestStatusObject(unittest.TestCase): - """Verify that the Status object behaives as expected. - """ - - def test_exists_empty_all(self): - """If the repository sync-state is empty (doesn't exist), and there is no - clean state, then it is considered not to exist. - - """ - stat = ExternalStatus() - stat.sync_state = ExternalStatus.EMPTY - stat.clean_state = ExternalStatus.DEFAULT - exists = stat.exists() - self.assertFalse(exists) - - stat.clean_state = ExternalStatus.EMPTY - exists = stat.exists() - self.assertFalse(exists) - - stat.clean_state = ExternalStatus.UNKNOWN - exists = stat.exists() - self.assertFalse(exists) - - # this state represtens an internal logic error in how the - # repo status was determined. - stat.clean_state = ExternalStatus.STATUS_OK - exists = stat.exists() - self.assertTrue(exists) - - # this state represtens an internal logic error in how the - # repo status was determined. - stat.clean_state = ExternalStatus.DIRTY - exists = stat.exists() - self.assertTrue(exists) - - def test_exists_default_all(self): - """If the repository sync-state is default, then it is considered to exist - regardless of clean state. - - """ - stat = ExternalStatus() - stat.sync_state = ExternalStatus.DEFAULT - stat.clean_state = ExternalStatus.DEFAULT - exists = stat.exists() - self.assertTrue(exists) - - stat.clean_state = ExternalStatus.EMPTY - exists = stat.exists() - self.assertTrue(exists) - - stat.clean_state = ExternalStatus.UNKNOWN - exists = stat.exists() - self.assertTrue(exists) - - stat.clean_state = ExternalStatus.STATUS_OK - exists = stat.exists() - self.assertTrue(exists) - - stat.clean_state = ExternalStatus.DIRTY - exists = stat.exists() - self.assertTrue(exists) - - def test_exists_unknown_all(self): - """If the repository sync-state is unknown, then it is considered to exist - regardless of clean state. - - """ - stat = ExternalStatus() - stat.sync_state = ExternalStatus.UNKNOWN - stat.clean_state = ExternalStatus.DEFAULT - exists = stat.exists() - self.assertTrue(exists) - - stat.clean_state = ExternalStatus.EMPTY - exists = stat.exists() - self.assertTrue(exists) - - stat.clean_state = ExternalStatus.UNKNOWN - exists = stat.exists() - self.assertTrue(exists) - - stat.clean_state = ExternalStatus.STATUS_OK - exists = stat.exists() - self.assertTrue(exists) - - stat.clean_state = ExternalStatus.DIRTY - exists = stat.exists() - self.assertTrue(exists) - - def test_exists_modified_all(self): - """If the repository sync-state is modified, then it is considered to exist - regardless of clean state. - - """ - stat = ExternalStatus() - stat.sync_state = ExternalStatus.MODEL_MODIFIED - stat.clean_state = ExternalStatus.DEFAULT - exists = stat.exists() - self.assertTrue(exists) - - stat.clean_state = ExternalStatus.EMPTY - exists = stat.exists() - self.assertTrue(exists) - - stat.clean_state = ExternalStatus.UNKNOWN - exists = stat.exists() - self.assertTrue(exists) - - stat.clean_state = ExternalStatus.STATUS_OK - exists = stat.exists() - self.assertTrue(exists) - - stat.clean_state = ExternalStatus.DIRTY - exists = stat.exists() - self.assertTrue(exists) - - def test_exists_ok_all(self): - """If the repository sync-state is ok, then it is considered to exist - regardless of clean state. - - """ - stat = ExternalStatus() - stat.sync_state = ExternalStatus.STATUS_OK - stat.clean_state = ExternalStatus.DEFAULT - exists = stat.exists() - self.assertTrue(exists) - - stat.clean_state = ExternalStatus.EMPTY - exists = stat.exists() - self.assertTrue(exists) - - stat.clean_state = ExternalStatus.UNKNOWN - exists = stat.exists() - self.assertTrue(exists) - - stat.clean_state = ExternalStatus.STATUS_OK - exists = stat.exists() - self.assertTrue(exists) - - stat.clean_state = ExternalStatus.DIRTY - exists = stat.exists() - self.assertTrue(exists) - - def test_update_ok_all(self): - """If the repository in-sync is ok, then it is safe to - update only if clean state is ok - - """ - stat = ExternalStatus() - stat.sync_state = ExternalStatus.STATUS_OK - stat.clean_state = ExternalStatus.DEFAULT - safe_to_update = stat.safe_to_update() - self.assertFalse(safe_to_update) - - stat.clean_state = ExternalStatus.EMPTY - safe_to_update = stat.safe_to_update() - self.assertFalse(safe_to_update) - - stat.clean_state = ExternalStatus.UNKNOWN - safe_to_update = stat.safe_to_update() - self.assertFalse(safe_to_update) - - stat.clean_state = ExternalStatus.STATUS_OK - safe_to_update = stat.safe_to_update() - self.assertTrue(safe_to_update) - - stat.clean_state = ExternalStatus.DIRTY - safe_to_update = stat.safe_to_update() - self.assertFalse(safe_to_update) - - def test_update_modified_all(self): - """If the repository in-sync is modified, then it is safe to - update only if clean state is ok - - """ - stat = ExternalStatus() - stat.sync_state = ExternalStatus.MODEL_MODIFIED - stat.clean_state = ExternalStatus.DEFAULT - safe_to_update = stat.safe_to_update() - self.assertFalse(safe_to_update) - - stat.clean_state = ExternalStatus.EMPTY - safe_to_update = stat.safe_to_update() - self.assertFalse(safe_to_update) - - stat.clean_state = ExternalStatus.UNKNOWN - safe_to_update = stat.safe_to_update() - self.assertFalse(safe_to_update) - - stat.clean_state = ExternalStatus.STATUS_OK - safe_to_update = stat.safe_to_update() - self.assertTrue(safe_to_update) - - stat.clean_state = ExternalStatus.DIRTY - safe_to_update = stat.safe_to_update() - self.assertFalse(safe_to_update) - - def test_update_unknown_all(self): - """If the repository in-sync is unknown, then it is not safe to - update, regardless of the clean state. - - """ - stat = ExternalStatus() - stat.sync_state = ExternalStatus.UNKNOWN - stat.clean_state = ExternalStatus.DEFAULT - safe_to_update = stat.safe_to_update() - self.assertFalse(safe_to_update) - - stat.clean_state = ExternalStatus.EMPTY - safe_to_update = stat.safe_to_update() - self.assertFalse(safe_to_update) - - stat.clean_state = ExternalStatus.UNKNOWN - safe_to_update = stat.safe_to_update() - self.assertFalse(safe_to_update) - - stat.clean_state = ExternalStatus.STATUS_OK - safe_to_update = stat.safe_to_update() - self.assertFalse(safe_to_update) - - stat.clean_state = ExternalStatus.DIRTY - safe_to_update = stat.safe_to_update() - self.assertFalse(safe_to_update) - - def test_update_default_all(self): - """If the repository in-sync is default, then it is not safe to - update, regardless of the clean state. - - """ - stat = ExternalStatus() - stat.sync_state = ExternalStatus.UNKNOWN - stat.clean_state = ExternalStatus.DEFAULT - safe_to_update = stat.safe_to_update() - self.assertFalse(safe_to_update) - - stat.clean_state = ExternalStatus.EMPTY - safe_to_update = stat.safe_to_update() - self.assertFalse(safe_to_update) - - stat.clean_state = ExternalStatus.UNKNOWN - safe_to_update = stat.safe_to_update() - self.assertFalse(safe_to_update) - - stat.clean_state = ExternalStatus.STATUS_OK - safe_to_update = stat.safe_to_update() - self.assertFalse(safe_to_update) - - stat.clean_state = ExternalStatus.DIRTY - safe_to_update = stat.safe_to_update() - self.assertFalse(safe_to_update) - - def test_update_empty_all(self): - """If the repository in-sync is empty, then it is not safe to - update, regardless of the clean state. - - """ - stat = ExternalStatus() - stat.sync_state = ExternalStatus.UNKNOWN - stat.clean_state = ExternalStatus.DEFAULT - safe_to_update = stat.safe_to_update() - self.assertFalse(safe_to_update) - - stat.clean_state = ExternalStatus.EMPTY - safe_to_update = stat.safe_to_update() - self.assertFalse(safe_to_update) - - stat.clean_state = ExternalStatus.UNKNOWN - safe_to_update = stat.safe_to_update() - self.assertFalse(safe_to_update) - - stat.clean_state = ExternalStatus.STATUS_OK - safe_to_update = stat.safe_to_update() - self.assertFalse(safe_to_update) - - stat.clean_state = ExternalStatus.DIRTY - safe_to_update = stat.safe_to_update() - self.assertFalse(safe_to_update) - - -if __name__ == '__main__': - unittest.main() diff --git a/manage_externals/test/test_unit_repository.py b/manage_externals/test/test_unit_repository.py deleted file mode 100644 index 2152503c2..000000000 --- a/manage_externals/test/test_unit_repository.py +++ /dev/null @@ -1,197 +0,0 @@ -#!/usr/bin/env python - -"""Unit test driver for checkout_externals - -Note: this script assume the path to the checkout_externals.py module is -already in the python path. - -""" - -from __future__ import absolute_import -from __future__ import unicode_literals -from __future__ import print_function - -import unittest - -from manic.repository_factory import create_repository -from manic.repository_git import GitRepository -from manic.repository_svn import SvnRepository -from manic.repository import Repository -from manic.externals_description import ExternalsDescription -from manic.global_constants import EMPTY_STR - - -class TestCreateRepositoryDict(unittest.TestCase): - """Test the create_repository functionality to ensure it returns the - propper type of repository and errors for unknown repository - types. - - """ - - def setUp(self): - """Common data needed for all tests in this class - """ - self._name = 'test_name' - self._repo = {ExternalsDescription.PROTOCOL: None, - ExternalsDescription.REPO_URL: 'junk_root', - ExternalsDescription.TAG: 'junk_tag', - ExternalsDescription.BRANCH: EMPTY_STR, - ExternalsDescription.HASH: EMPTY_STR, } - - def test_create_repo_git(self): - """Verify that several possible names for the 'git' protocol - create git repository objects. - - """ - protocols = ['git', 'GIT', 'Git', ] - for protocol in protocols: - self._repo[ExternalsDescription.PROTOCOL] = protocol - repo = create_repository(self._name, self._repo) - self.assertIsInstance(repo, GitRepository) - - def test_create_repo_svn(self): - """Verify that several possible names for the 'svn' protocol - create svn repository objects. - """ - protocols = ['svn', 'SVN', 'Svn', ] - for protocol in protocols: - self._repo[ExternalsDescription.PROTOCOL] = protocol - repo = create_repository(self._name, self._repo) - self.assertIsInstance(repo, SvnRepository) - - def test_create_repo_externals_only(self): - """Verify that an externals only repo returns None. - """ - protocols = ['externals_only', ] - for protocol in protocols: - self._repo[ExternalsDescription.PROTOCOL] = protocol - repo = create_repository(self._name, self._repo) - self.assertEqual(None, repo) - - def test_create_repo_unsupported(self): - """Verify that an unsupported protocol generates a runtime error. - """ - protocols = ['not_a_supported_protocol', ] - for protocol in protocols: - self._repo[ExternalsDescription.PROTOCOL] = protocol - with self.assertRaises(RuntimeError): - create_repository(self._name, self._repo) - - -class TestRepository(unittest.TestCase): - """Test the externals description processing used to create the Repository - base class shared by protocol specific repository classes. - - """ - - def test_tag(self): - """Test creation of a repository object with a tag - """ - name = 'test_repo' - protocol = 'test_protocol' - url = 'test_url' - tag = 'test_tag' - repo_info = {ExternalsDescription.PROTOCOL: protocol, - ExternalsDescription.REPO_URL: url, - ExternalsDescription.TAG: tag, - ExternalsDescription.BRANCH: EMPTY_STR, - ExternalsDescription.HASH: EMPTY_STR, } - repo = Repository(name, repo_info) - print(repo.__dict__) - self.assertEqual(repo.tag(), tag) - self.assertEqual(repo.url(), url) - - def test_branch(self): - """Test creation of a repository object with a branch - """ - name = 'test_repo' - protocol = 'test_protocol' - url = 'test_url' - branch = 'test_branch' - repo_info = {ExternalsDescription.PROTOCOL: protocol, - ExternalsDescription.REPO_URL: url, - ExternalsDescription.BRANCH: branch, - ExternalsDescription.TAG: EMPTY_STR, - ExternalsDescription.HASH: EMPTY_STR, } - repo = Repository(name, repo_info) - print(repo.__dict__) - self.assertEqual(repo.branch(), branch) - self.assertEqual(repo.url(), url) - - def test_hash(self): - """Test creation of a repository object with a hash - """ - name = 'test_repo' - protocol = 'test_protocol' - url = 'test_url' - ref = 'deadc0de' - repo_info = {ExternalsDescription.PROTOCOL: protocol, - ExternalsDescription.REPO_URL: url, - ExternalsDescription.BRANCH: EMPTY_STR, - ExternalsDescription.TAG: EMPTY_STR, - ExternalsDescription.HASH: ref, } - repo = Repository(name, repo_info) - print(repo.__dict__) - self.assertEqual(repo.hash(), ref) - self.assertEqual(repo.url(), url) - - def test_tag_branch(self): - """Test creation of a repository object with a tag and branch raises a - runtimer error. - - """ - name = 'test_repo' - protocol = 'test_protocol' - url = 'test_url' - branch = 'test_branch' - tag = 'test_tag' - ref = EMPTY_STR - repo_info = {ExternalsDescription.PROTOCOL: protocol, - ExternalsDescription.REPO_URL: url, - ExternalsDescription.BRANCH: branch, - ExternalsDescription.TAG: tag, - ExternalsDescription.HASH: ref, } - with self.assertRaises(RuntimeError): - Repository(name, repo_info) - - def test_tag_branch_hash(self): - """Test creation of a repository object with a tag, branch and hash raises a - runtimer error. - - """ - name = 'test_repo' - protocol = 'test_protocol' - url = 'test_url' - branch = 'test_branch' - tag = 'test_tag' - ref = 'deadc0de' - repo_info = {ExternalsDescription.PROTOCOL: protocol, - ExternalsDescription.REPO_URL: url, - ExternalsDescription.BRANCH: branch, - ExternalsDescription.TAG: tag, - ExternalsDescription.HASH: ref, } - with self.assertRaises(RuntimeError): - Repository(name, repo_info) - - def test_no_tag_no_branch(self): - """Test creation of a repository object without a tag or branch raises a - runtimer error. - - """ - name = 'test_repo' - protocol = 'test_protocol' - url = 'test_url' - branch = EMPTY_STR - tag = EMPTY_STR - ref = EMPTY_STR - repo_info = {ExternalsDescription.PROTOCOL: protocol, - ExternalsDescription.REPO_URL: url, - ExternalsDescription.BRANCH: branch, - ExternalsDescription.TAG: tag, - ExternalsDescription.HASH: ref, } - with self.assertRaises(RuntimeError): - Repository(name, repo_info) - - -if __name__ == '__main__': - unittest.main() diff --git a/manage_externals/test/test_unit_repository_git.py b/manage_externals/test/test_unit_repository_git.py deleted file mode 100644 index b025fbd42..000000000 --- a/manage_externals/test/test_unit_repository_git.py +++ /dev/null @@ -1,807 +0,0 @@ -#!/usr/bin/env python - -"""Unit test driver for checkout_externals - -Note: this script assume the path to the checkout_externals.py module is -already in the python path. - -""" -# pylint: disable=too-many-lines,protected-access - -from __future__ import absolute_import -from __future__ import unicode_literals -from __future__ import print_function - -import os -import shutil -import unittest - -from manic.repository_git import GitRepository -from manic.externals_status import ExternalStatus -from manic.externals_description import ExternalsDescription -from manic.externals_description import ExternalsDescriptionDict -from manic.global_constants import EMPTY_STR - -# NOTE(bja, 2017-11) order is important here. origin should be a -# subset of other to trap errors on processing remotes! -GIT_REMOTE_OUTPUT_ORIGIN_UPSTREAM = ''' -upstream /path/to/other/repo (fetch) -upstream /path/to/other/repo (push) -other /path/to/local/repo2 (fetch) -other /path/to/local/repo2 (push) -origin /path/to/local/repo (fetch) -origin /path/to/local/repo (push) -''' - - -class TestGitRepositoryCurrentRef(unittest.TestCase): - """test the current_ref command on a git repository - """ - - def setUp(self): - self._name = 'component' - rdata = {ExternalsDescription.PROTOCOL: 'git', - ExternalsDescription.REPO_URL: - '/path/to/local/repo', - ExternalsDescription.TAG: - 'tag1', - } - - data = {self._name: - { - ExternalsDescription.REQUIRED: False, - ExternalsDescription.PATH: 'junk', - ExternalsDescription.EXTERNALS: EMPTY_STR, - ExternalsDescription.REPO: rdata, - }, - } - - model = ExternalsDescriptionDict(data) - repo = model[self._name][ExternalsDescription.REPO] - self._repo = GitRepository('test', repo) - - # - # mock methods replacing git system calls - # - @staticmethod - def _git_current_branch(branch_found, branch_name): - """Return a function that takes the place of - repo._git_current_branch, which returns the given output.""" - def my_git_current_branch(): - """mock function that can take the place of repo._git_current_branch""" - return branch_found, branch_name - return my_git_current_branch - - @staticmethod - def _git_current_tag(tag_found, tag_name): - """Return a function that takes the place of - repo._git_current_tag, which returns the given output.""" - def my_git_current_tag(): - """mock function that can take the place of repo._git_current_tag""" - return tag_found, tag_name - return my_git_current_tag - - @staticmethod - def _git_current_hash(hash_found, hash_name): - """Return a function that takes the place of - repo._git_current_hash, which returns the given output.""" - def my_git_current_hash(): - """mock function that can take the place of repo._git_current_hash""" - return hash_found, hash_name - return my_git_current_hash - - # ------------------------------------------------------------------------ - # Begin tests - # ------------------------------------------------------------------------ - - def test_ref_branch(self): - """Test that we correctly identify we are on a branch - """ - self._repo._git_current_branch = self._git_current_branch( - True, 'feature3') - self._repo._git_current_tag = self._git_current_tag(True, 'foo_tag') - self._repo._git_current_hash = self._git_current_hash(True, 'abc123') - expected = 'feature3' - result = self._repo._current_ref() - self.assertEqual(result, expected) - - def test_ref_detached_tag(self): - """Test that we correctly identify that the ref is detached at a tag - """ - self._repo._git_current_branch = self._git_current_branch(False, '') - self._repo._git_current_tag = self._git_current_tag(True, 'foo_tag') - self._repo._git_current_hash = self._git_current_hash(True, 'abc123') - expected = 'foo_tag' - result = self._repo._current_ref() - self.assertEqual(result, expected) - - def test_ref_detached_hash(self): - """Test that we can identify ref is detached at a hash - - """ - self._repo._git_current_branch = self._git_current_branch(False, '') - self._repo._git_current_tag = self._git_current_tag(False, '') - self._repo._git_current_hash = self._git_current_hash(True, 'abc123') - expected = 'abc123' - result = self._repo._current_ref() - self.assertEqual(result, expected) - - def test_ref_none(self): - """Test that we correctly identify that we're not in a git repo. - """ - self._repo._git_current_branch = self._git_current_branch(False, '') - self._repo._git_current_tag = self._git_current_tag(False, '') - self._repo._git_current_hash = self._git_current_hash(False, '') - result = self._repo._current_ref() - self.assertEqual(result, EMPTY_STR) - - -class TestGitRepositoryCheckSync(unittest.TestCase): - """Test whether the GitRepository _check_sync_logic functionality is - correct. - - Note: there are a lot of combinations of state: - - - external description - tag, branch - - - working copy - - doesn't exist (not checked out) - - exists, no git info - incorrect protocol, e.g. svn, or tarball? - - exists, git info - - as expected: - - different from expected: - - detached tag, - - detached hash, - - detached branch (compare remote and branch), - - tracking branch (compare remote and branch), - - same remote - - different remote - - untracked branch - - Test list: - - doesn't exist - - exists no git info - - - num_external * (working copy expected + num_working copy different) - - total tests = 16 - - """ - - # NOTE(bja, 2017-11) pylint complains about long method names, but - # it is hard to differentiate tests without making them more - # cryptic. Also complains about too many public methods, but it - # doesn't really make sense to break this up. - # pylint: disable=invalid-name,too-many-public-methods - - TMP_FAKE_DIR = 'fake' - TMP_FAKE_GIT_DIR = os.path.join(TMP_FAKE_DIR, '.git') - - def setUp(self): - """Setup reusable git repository object - """ - self._name = 'component' - rdata = {ExternalsDescription.PROTOCOL: 'git', - ExternalsDescription.REPO_URL: - '/path/to/local/repo', - ExternalsDescription.TAG: 'tag1', - } - - data = {self._name: - { - ExternalsDescription.REQUIRED: False, - ExternalsDescription.PATH: self.TMP_FAKE_DIR, - ExternalsDescription.EXTERNALS: EMPTY_STR, - ExternalsDescription.REPO: rdata, - }, - } - - model = ExternalsDescriptionDict(data) - repo = model[self._name][ExternalsDescription.REPO] - self._repo = GitRepository('test', repo) - # The unit tests here don't care about the result of - # _current_ref, but we replace it here so that we don't need to - # worry about calling a possibly slow and possibly - # error-producing command (since _current_ref calls various git - # functions): - self._repo._current_ref = self._current_ref_empty - self._create_tmp_git_dir() - - def tearDown(self): - """Cleanup tmp stuff on the file system - """ - self._remove_tmp_git_dir() - - def _create_tmp_git_dir(self): - """Create a temporary fake git directory for testing purposes. - """ - if not os.path.exists(self.TMP_FAKE_GIT_DIR): - os.makedirs(self.TMP_FAKE_GIT_DIR) - - def _remove_tmp_git_dir(self): - """Remove the temporary fake git directory - """ - if os.path.exists(self.TMP_FAKE_DIR): - shutil.rmtree(self.TMP_FAKE_DIR) - - # - # mock methods replacing git system calls - # - @staticmethod - def _current_ref_empty(): - """Return an empty string. - """ - return EMPTY_STR - - @staticmethod - def _git_remote_origin_upstream(): - """Return an info string that is a checkout hash - """ - return GIT_REMOTE_OUTPUT_ORIGIN_UPSTREAM - - @staticmethod - def _git_remote_none(): - """Return an info string that is a checkout hash - """ - return EMPTY_STR - - @staticmethod - def _git_current_hash(myhash): - """Return a function that takes the place of repo._git_current_hash, - which returns the given hash - """ - def my_git_current_hash(): - """mock function that can take the place of repo._git_current_hash""" - return 0, myhash - return my_git_current_hash - - def _git_revparse_commit(self, expected_ref, mystatus, myhash): - """Return a function that takes the place of - repo._git_revparse_commit, which returns a tuple: - (mystatus, myhash). - - Expects the passed-in ref to equal expected_ref - - status = 0 implies success, non-zero implies failure - """ - def my_git_revparse_commit(ref): - """mock function that can take the place of repo._git_revparse_commit""" - self.assertEqual(expected_ref, ref) - return mystatus, myhash - return my_git_revparse_commit - - # ---------------------------------------------------------------- - # - # Tests where working copy doesn't exist or is invalid - # - # ---------------------------------------------------------------- - def test_sync_dir_not_exist(self): - """Test that a directory that doesn't exist returns an error status - - Note: the Repository classes should be prevented from ever - working on an empty directory by the _Source object. - - """ - stat = ExternalStatus() - self._repo._check_sync(stat, 'invalid_directory_name') - self.assertEqual(stat.sync_state, ExternalStatus.STATUS_ERROR) - # check_dir should only modify the sync_state, not clean_state - self.assertEqual(stat.clean_state, ExternalStatus.DEFAULT) - - def test_sync_dir_exist_no_git_info(self): - """Test that a non-existent git repo returns an unknown status - """ - stat = ExternalStatus() - # Now we over-ride the _git_remote_verbose method on the repo to return - # a known value without requiring access to git. - self._repo._git_remote_verbose = self._git_remote_origin_upstream - self._repo._tag = 'tag1' - self._repo._git_current_hash = self._git_current_hash('') - self._repo._git_revparse_commit = self._git_revparse_commit( - 'tag1', 1, '') - self._repo._check_sync(stat, self.TMP_FAKE_DIR) - self.assertEqual(stat.sync_state, ExternalStatus.UNKNOWN) - # check_sync should only modify the sync_state, not clean_state - self.assertEqual(stat.clean_state, ExternalStatus.DEFAULT) - - # ------------------------------------------------------------------------ - # - # Tests where version in configuration file is not a valid reference - # - # ------------------------------------------------------------------------ - - def test_sync_invalid_reference(self): - """Test that an invalid reference returns out-of-sync - """ - stat = ExternalStatus() - self._repo._git_remote_verbose = self._git_remote_origin_upstream - self._repo._tag = 'tag1' - self._repo._git_current_hash = self._git_current_hash('abc123') - self._repo._git_revparse_commit = self._git_revparse_commit( - 'tag1', 1, '') - self._repo._check_sync_logic(stat, self.TMP_FAKE_DIR) - self.assertEqual(stat.sync_state, ExternalStatus.MODEL_MODIFIED) - # check_sync should only modify the sync_state, not clean_state - self.assertEqual(stat.clean_state, ExternalStatus.DEFAULT) - - # ---------------------------------------------------------------- - # - # Tests where external description specifies a tag - # - # ---------------------------------------------------------------- - def test_sync_tag_on_same_hash(self): - """Test expect tag on same hash --> status ok - - """ - stat = ExternalStatus() - self._repo._git_remote_verbose = self._git_remote_origin_upstream - self._repo._tag = 'tag1' - self._repo._git_current_hash = self._git_current_hash('abc123') - self._repo._git_revparse_commit = self._git_revparse_commit( - 'tag1', 0, 'abc123') - self._repo._check_sync_logic(stat, self.TMP_FAKE_DIR) - self.assertEqual(stat.sync_state, ExternalStatus.STATUS_OK) - # check_sync should only modify the sync_state, not clean_state - self.assertEqual(stat.clean_state, ExternalStatus.DEFAULT) - - def test_sync_tag_on_different_hash(self): - """Test expect tag on a different hash --> status modified - - """ - stat = ExternalStatus() - self._repo._git_remote_verbose = self._git_remote_origin_upstream - self._repo._tag = 'tag1' - self._repo._git_current_hash = self._git_current_hash('def456') - self._repo._git_revparse_commit = self._git_revparse_commit( - 'tag1', 0, 'abc123') - self._repo._check_sync_logic(stat, self.TMP_FAKE_DIR) - self.assertEqual(stat.sync_state, ExternalStatus.MODEL_MODIFIED) - # check_sync should only modify the sync_state, not clean_state - self.assertEqual(stat.clean_state, ExternalStatus.DEFAULT) - - # ---------------------------------------------------------------- - # - # Tests where external description specifies a hash - # - # ---------------------------------------------------------------- - def test_sync_hash_on_same_hash(self): - """Test expect hash on same hash --> status ok - - """ - stat = ExternalStatus() - self._repo._git_remote_verbose = self._git_remote_origin_upstream - self._repo._tag = '' - self._repo._hash = 'abc' - self._repo._git_current_hash = self._git_current_hash('abc123') - self._repo._git_revparse_commit = self._git_revparse_commit( - 'abc', 0, 'abc123') - self._repo._check_sync_logic(stat, self.TMP_FAKE_DIR) - self.assertEqual(stat.sync_state, ExternalStatus.STATUS_OK) - # check_sync should only modify the sync_state, not clean_state - self.assertEqual(stat.clean_state, ExternalStatus.DEFAULT) - - def test_sync_hash_on_different_hash(self): - """Test expect hash on a different hash --> status modified - - """ - stat = ExternalStatus() - self._repo._git_remote_verbose = self._git_remote_origin_upstream - self._repo._tag = '' - self._repo._hash = 'abc' - self._repo._git_current_hash = self._git_current_hash('def456') - self._repo._git_revparse_commit = self._git_revparse_commit( - 'abc', 0, 'abc123') - self._repo._check_sync_logic(stat, self.TMP_FAKE_DIR) - self.assertEqual(stat.sync_state, ExternalStatus.MODEL_MODIFIED) - # check_sync should only modify the sync_state, not clean_state - self.assertEqual(stat.clean_state, ExternalStatus.DEFAULT) - - # ---------------------------------------------------------------- - # - # Tests where external description specifies a branch - # - # ---------------------------------------------------------------- - def test_sync_branch_on_same_hash(self): - """Test expect branch on same hash --> status ok - - """ - stat = ExternalStatus() - self._repo._git_remote_verbose = self._git_remote_origin_upstream - self._repo._branch = 'feature-2' - self._repo._tag = '' - self._repo._git_current_hash = self._git_current_hash('abc123') - self._repo._git_revparse_commit = ( - self._git_revparse_commit('origin/feature-2', 0, 'abc123')) - self._repo._check_sync_logic(stat, self.TMP_FAKE_DIR) - self.assertEqual(stat.sync_state, ExternalStatus.STATUS_OK) - # check_sync should only modify the sync_state, not clean_state - self.assertEqual(stat.clean_state, ExternalStatus.DEFAULT) - - def test_sync_branch_on_diff_hash(self): - """Test expect branch on diff hash --> status modified - - """ - stat = ExternalStatus() - self._repo._git_remote_verbose = self._git_remote_origin_upstream - self._repo._branch = 'feature-2' - self._repo._tag = '' - self._repo._git_current_hash = self._git_current_hash('abc123') - self._repo._git_revparse_commit = ( - self._git_revparse_commit('origin/feature-2', 0, 'def456')) - self._repo._check_sync_logic(stat, self.TMP_FAKE_DIR) - self.assertEqual(stat.sync_state, ExternalStatus.MODEL_MODIFIED) - # check_sync should only modify the sync_state, not clean_state - self.assertEqual(stat.clean_state, ExternalStatus.DEFAULT) - - def test_sync_branch_diff_remote(self): - """Test _determine_remote_name with a different remote - - """ - stat = ExternalStatus() - self._repo._git_remote_verbose = self._git_remote_origin_upstream - self._repo._branch = 'feature-2' - self._repo._tag = '' - self._repo._url = '/path/to/other/repo' - self._repo._git_current_hash = self._git_current_hash('abc123') - self._repo._git_revparse_commit = ( - self._git_revparse_commit('upstream/feature-2', 0, 'def456')) - self._repo._check_sync_logic(stat, self.TMP_FAKE_DIR) - # The test passes if _git_revparse_commit is called with the - # expected argument - - def test_sync_branch_diff_remote2(self): - """Test _determine_remote_name with a different remote - - """ - stat = ExternalStatus() - self._repo._git_remote_verbose = self._git_remote_origin_upstream - self._repo._branch = 'feature-2' - self._repo._tag = '' - self._repo._url = '/path/to/local/repo2' - self._repo._git_current_hash = self._git_current_hash('abc123') - self._repo._git_revparse_commit = ( - self._git_revparse_commit('other/feature-2', 0, 'def789')) - self._repo._check_sync_logic(stat, self.TMP_FAKE_DIR) - # The test passes if _git_revparse_commit is called with the - # expected argument - - def test_sync_branch_on_unknown_remote(self): - """Test expect branch, but remote is unknown --> status modified - - """ - stat = ExternalStatus() - self._repo._git_remote_verbose = self._git_remote_origin_upstream - self._repo._branch = 'feature-2' - self._repo._tag = '' - self._repo._url = '/path/to/unknown/repo' - self._repo._git_current_hash = self._git_current_hash('abc123') - self._repo._git_revparse_commit = ( - self._git_revparse_commit('unknown_remote/feature-2', 1, '')) - self._repo._check_sync_logic(stat, self.TMP_FAKE_DIR) - self.assertEqual(stat.sync_state, ExternalStatus.MODEL_MODIFIED) - # check_sync should only modify the sync_state, not clean_state - self.assertEqual(stat.clean_state, ExternalStatus.DEFAULT) - - def test_sync_branch_on_untracked_local(self): - """Test expect branch, on untracked branch in local repo --> status ok - - Setting the externals description to '.' indicates that the - user only wants to consider the current local repo state - without fetching from remotes. This is required to preserve - the current branch of a repository during an update. - - """ - stat = ExternalStatus() - self._repo._git_remote_verbose = self._git_remote_origin_upstream - self._repo._branch = 'feature3' - self._repo._tag = '' - self._repo._url = '.' - self._repo._git_current_hash = self._git_current_hash('abc123') - self._repo._git_revparse_commit = ( - self._git_revparse_commit('feature3', 0, 'abc123')) - self._repo._check_sync_logic(stat, self.TMP_FAKE_DIR) - self.assertEqual(stat.sync_state, ExternalStatus.STATUS_OK) - # check_sync should only modify the sync_state, not clean_state - self.assertEqual(stat.clean_state, ExternalStatus.DEFAULT) - - -class TestGitStatusPorcelain(unittest.TestCase): - """Test parsing of output from git status --porcelain=v1 -z - """ - # pylint: disable=C0103 - GIT_STATUS_PORCELAIN_V1_ALL = ( - r' D INSTALL\0MM Makefile\0M README.md\0R cmakelists.txt\0' - r'CMakeLists.txt\0D commit-message-template.txt\0A stuff.txt\0' - r'?? junk.txt') - - GIT_STATUS_PORCELAIN_CLEAN = r'' - - def test_porcelain_status_dirty(self): - """Verify that git status output is considered dirty when there are - listed files. - - """ - git_output = self.GIT_STATUS_PORCELAIN_V1_ALL - is_dirty = GitRepository._status_v1z_is_dirty(git_output) - self.assertTrue(is_dirty) - - def test_porcelain_status_clean(self): - """Verify that git status output is considered clean when there are no - listed files. - - """ - git_output = self.GIT_STATUS_PORCELAIN_CLEAN - is_dirty = GitRepository._status_v1z_is_dirty(git_output) - self.assertFalse(is_dirty) - - -class TestGitCreateRemoteName(unittest.TestCase): - """Test the create_remote_name method on the GitRepository class - """ - - def setUp(self): - """Common infrastructure for testing _create_remote_name - """ - self._rdata = {ExternalsDescription.PROTOCOL: 'git', - ExternalsDescription.REPO_URL: - 'empty', - ExternalsDescription.TAG: - 'very_useful_tag', - ExternalsDescription.BRANCH: EMPTY_STR, - ExternalsDescription.HASH: EMPTY_STR, } - self._repo = GitRepository('test', self._rdata) - - def test_remote_git_proto(self): - """Test remote with git protocol - """ - self._repo._url = 'git@git.github.com:very_nice_org/useful_repo' - remote_name = self._repo._create_remote_name() - self.assertEqual(remote_name, 'very_nice_org_useful_repo') - - def test_remote_https_proto(self): - """Test remote with git protocol - """ - self._repo._url = 'https://www.github.com/very_nice_org/useful_repo' - remote_name = self._repo._create_remote_name() - self.assertEqual(remote_name, 'very_nice_org_useful_repo') - - def test_remote_local_abs(self): - """Test remote with git protocol - """ - self._repo._url = '/path/to/local/repositories/useful_repo' - remote_name = self._repo._create_remote_name() - self.assertEqual(remote_name, 'repositories_useful_repo') - - def test_remote_local_rel(self): - """Test remote with git protocol - """ - os.environ['TEST_VAR'] = '/my/path/to/repos' - self._repo._url = '${TEST_VAR}/../../useful_repo' - remote_name = self._repo._create_remote_name() - self.assertEqual(remote_name, 'path_useful_repo') - del os.environ['TEST_VAR'] - - -class TestVerifyTag(unittest.TestCase): - """Test logic verifying that a tag exists and is unique - - """ - - def setUp(self): - """Setup reusable git repository object - """ - self._name = 'component' - rdata = {ExternalsDescription.PROTOCOL: 'git', - ExternalsDescription.REPO_URL: - '/path/to/local/repo', - ExternalsDescription.TAG: 'tag1', - } - - data = {self._name: - { - ExternalsDescription.REQUIRED: False, - ExternalsDescription.PATH: 'tmp', - ExternalsDescription.EXTERNALS: EMPTY_STR, - ExternalsDescription.REPO: rdata, - }, - } - - model = ExternalsDescriptionDict(data) - repo = model[self._name][ExternalsDescription.REPO] - self._repo = GitRepository('test', repo) - - @staticmethod - def _shell_true(url, remote=None): - _ = url - _ = remote - return 0 - - @staticmethod - def _shell_false(url, remote=None): - _ = url - _ = remote - return 1 - - @staticmethod - def _mock_function_true(ref): - _ = ref - return (TestValidRef._shell_true, '97ebc0e0deadc0de') - - @staticmethod - def _mock_function_false(ref): - _ = ref - return (TestValidRef._shell_false, '97ebc0e0deadc0de') - - def test_tag_not_tag_branch_commit(self): - """Verify a non-tag returns false - """ - self._repo._git_showref_tag = self._shell_false - self._repo._git_showref_branch = self._shell_false - self._repo._git_lsremote_branch = self._shell_false - self._repo._git_revparse_commit = self._mock_function_false - self._repo._tag = 'something' - remote_name = 'origin' - received, _ = self._repo._is_unique_tag(self._repo._tag, remote_name) - self.assertFalse(received) - - def test_tag_not_tag(self): - """Verify a non-tag, untracked remote returns false - """ - self._repo._git_showref_tag = self._shell_false - self._repo._git_showref_branch = self._shell_true - self._repo._git_lsremote_branch = self._shell_true - self._repo._git_revparse_commit = self._mock_function_false - self._repo._tag = 'tag1' - remote_name = 'origin' - received, _ = self._repo._is_unique_tag(self._repo._tag, remote_name) - self.assertFalse(received) - - def test_tag_indeterminant(self): - """Verify an indeterminant tag/branch returns false - """ - self._repo._git_showref_tag = self._shell_true - self._repo._git_showref_branch = self._shell_true - self._repo._git_lsremote_branch = self._shell_true - self._repo._git_revparse_commit = self._mock_function_true - self._repo._tag = 'something' - remote_name = 'origin' - received, _ = self._repo._is_unique_tag(self._repo._tag, remote_name) - self.assertFalse(received) - - def test_tag_is_unique(self): - """Verify a unique tag match returns true - """ - self._repo._git_showref_tag = self._shell_true - self._repo._git_showref_branch = self._shell_false - self._repo._git_lsremote_branch = self._shell_false - self._repo._git_revparse_commit = self._mock_function_true - self._repo._tag = 'tag1' - remote_name = 'origin' - received, _ = self._repo._is_unique_tag(self._repo._tag, remote_name) - self.assertTrue(received) - - def test_tag_is_not_hash(self): - """Verify a commit hash is not classified as a tag - """ - self._repo._git_showref_tag = self._shell_false - self._repo._git_showref_branch = self._shell_false - self._repo._git_lsremote_branch = self._shell_false - self._repo._git_revparse_commit = self._mock_function_true - self._repo._tag = '97ebc0e0' - remote_name = 'origin' - received, _ = self._repo._is_unique_tag(self._repo._tag, remote_name) - self.assertFalse(received) - - def test_hash_is_commit(self): - """Verify a commit hash is not classified as a tag - """ - self._repo._git_showref_tag = self._shell_false - self._repo._git_showref_branch = self._shell_false - self._repo._git_lsremote_branch = self._shell_false - self._repo._git_revparse_commit = self._mock_function_true - self._repo._tag = '97ebc0e0' - remote_name = 'origin' - received, _ = self._repo._is_unique_tag(self._repo._tag, remote_name) - self.assertFalse(received) - - -class TestValidRef(unittest.TestCase): - """Test logic verifying that a reference is a valid tag, branch or sha1 - - """ - - def setUp(self): - """Setup reusable git repository object - """ - self._name = 'component' - rdata = {ExternalsDescription.PROTOCOL: 'git', - ExternalsDescription.REPO_URL: - '/path/to/local/repo', - ExternalsDescription.TAG: 'tag1', - } - - data = {self._name: - { - ExternalsDescription.REQUIRED: False, - ExternalsDescription.PATH: 'tmp', - ExternalsDescription.EXTERNALS: EMPTY_STR, - ExternalsDescription.REPO: rdata, - }, - } - - model = ExternalsDescriptionDict(data) - repo = model[self._name][ExternalsDescription.REPO] - self._repo = GitRepository('test', repo) - - @staticmethod - def _shell_true(url, remote=None): - _ = url - _ = remote - return 0 - - @staticmethod - def _shell_false(url, remote=None): - _ = url - _ = remote - return 1 - - @staticmethod - def _mock_function_false(ref): - _ = ref - return (TestValidRef._shell_false, '') - - @staticmethod - def _mock_function_true(ref): - _ = ref - return (TestValidRef._shell_true, '') - - def test_valid_ref_is_invalid(self): - """Verify an invalid reference raises an exception - """ - self._repo._git_showref_tag = self._shell_false - self._repo._git_showref_branch = self._shell_false - self._repo._git_lsremote_branch = self._shell_false - self._repo._git_revparse_commit = self._mock_function_false - self._repo._tag = 'invalid_ref' - with self.assertRaises(RuntimeError): - self._repo._check_for_valid_ref(self._repo._tag) - - def test_valid_tag(self): - """Verify a valid tag return true - """ - self._repo._git_showref_tag = self._shell_true - self._repo._git_showref_branch = self._shell_false - self._repo._git_lsremote_branch = self._shell_false - self._repo._git_revparse_commit = self._mock_function_true - self._repo._tag = 'tag1' - received = self._repo._check_for_valid_ref(self._repo._tag) - self.assertTrue(received) - - def test_valid_branch(self): - """Verify a valid tag return true - """ - self._repo._git_showref_tag = self._shell_false - self._repo._git_showref_branch = self._shell_true - self._repo._git_lsremote_branch = self._shell_false - self._repo._git_revparse_commit = self._mock_function_true - self._repo._tag = 'tag1' - received = self._repo._check_for_valid_ref(self._repo._tag) - self.assertTrue(received) - - def test_valid_hash(self): - """Verify a valid hash return true - """ - def _mock_revparse_commit(ref): - _ = ref - return (0, '56cc0b539426eb26810af9e') - - self._repo._git_showref_tag = self._shell_false - self._repo._git_showref_branch = self._shell_false - self._repo._git_lsremote_branch = self._shell_false - self._repo._git_revparse_commit = _mock_revparse_commit - self._repo._hash = '56cc0b5394' - received = self._repo._check_for_valid_ref(self._repo._hash) - self.assertTrue(received) - - -if __name__ == '__main__': - unittest.main() diff --git a/manage_externals/test/test_unit_repository_svn.py b/manage_externals/test/test_unit_repository_svn.py deleted file mode 100644 index 7ff31c421..000000000 --- a/manage_externals/test/test_unit_repository_svn.py +++ /dev/null @@ -1,501 +0,0 @@ -#!/usr/bin/env python - -"""Unit test driver for checkout_externals - -Note: this script assume the path to the checkout_externals.py module is -already in the python path. - -""" - -from __future__ import absolute_import -from __future__ import unicode_literals -from __future__ import print_function - -import unittest - -from manic.repository_svn import SvnRepository -from manic.externals_status import ExternalStatus -from manic.externals_description import ExternalsDescription -from manic.externals_description import ExternalsDescriptionDict -from manic.global_constants import EMPTY_STR - -# pylint: disable=W0212 - -SVN_INFO_MOSART = """Path: components/mosart -Working Copy Root Path: /Users/andreb/projects/ncar/git-conversion/clm-dev-experimental/components/mosart -URL: https://svn-ccsm-models.cgd.ucar.edu/mosart/trunk_tags/mosart1_0_26 -Relative URL: ^/mosart/trunk_tags/mosart1_0_26 -Repository Root: https://svn-ccsm-models.cgd.ucar.edu -Repository UUID: fe37f545-8307-0410-aea5-b40df96820b5 -Revision: 86711 -Node Kind: directory -Schedule: normal -Last Changed Author: erik -Last Changed Rev: 86031 -Last Changed Date: 2017-07-07 12:28:10 -0600 (Fri, 07 Jul 2017) -""" -SVN_INFO_CISM = """ -Path: components/cism -Working Copy Root Path: /Users/andreb/projects/ncar/git-conversion/clm-dev-experimental/components/cism -URL: https://svn-ccsm-models.cgd.ucar.edu/glc/trunk_tags/cism2_1_37 -Relative URL: ^/glc/trunk_tags/cism2_1_37 -Repository Root: https://svn-ccsm-models.cgd.ucar.edu -Repository UUID: fe37f545-8307-0410-aea5-b40df96820b5 -Revision: 86711 -Node Kind: directory -Schedule: normal -Last Changed Author: sacks -Last Changed Rev: 85704 -Last Changed Date: 2017-06-15 05:59:28 -0600 (Thu, 15 Jun 2017) -""" - - -class TestSvnRepositoryCheckURL(unittest.TestCase): - """Verify that the svn_check_url function is working as expected. - """ - - def setUp(self): - """Setup reusable svn repository object - """ - self._name = 'component' - rdata = {ExternalsDescription.PROTOCOL: 'svn', - ExternalsDescription.REPO_URL: - 'https://svn-ccsm-models.cgd.ucar.edu/', - ExternalsDescription.TAG: - 'mosart/trunk_tags/mosart1_0_26', - } - - data = {self._name: - { - ExternalsDescription.REQUIRED: False, - ExternalsDescription.PATH: 'junk', - ExternalsDescription.EXTERNALS: '', - ExternalsDescription.REPO: rdata, - }, - } - - model = ExternalsDescriptionDict(data) - repo = model[self._name][ExternalsDescription.REPO] - self._repo = SvnRepository('test', repo) - - def test_check_url_same(self): - """Test that we correctly identify that the correct URL. - """ - svn_output = SVN_INFO_MOSART - expected_url = self._repo.url() - result, current_version = \ - self._repo._check_url(svn_output, expected_url) - self.assertEqual(result, ExternalStatus.STATUS_OK) - self.assertEqual(current_version, 'mosart/trunk_tags/mosart1_0_26') - - def test_check_url_different(self): - """Test that we correctly reject an incorrect URL. - """ - svn_output = SVN_INFO_CISM - expected_url = self._repo.url() - result, current_version = \ - self._repo._check_url(svn_output, expected_url) - self.assertEqual(result, ExternalStatus.MODEL_MODIFIED) - self.assertEqual(current_version, 'glc/trunk_tags/cism2_1_37') - - def test_check_url_none(self): - """Test that we can handle an empty string for output, e.g. not an svn - repo. - - """ - svn_output = EMPTY_STR - expected_url = self._repo.url() - result, current_version = \ - self._repo._check_url(svn_output, expected_url) - self.assertEqual(result, ExternalStatus.UNKNOWN) - self.assertEqual(current_version, '') - - -class TestSvnRepositoryCheckSync(unittest.TestCase): - """Test whether the SvnRepository svn_check_sync functionality is - correct. - - """ - - def setUp(self): - """Setup reusable svn repository object - """ - self._name = "component" - rdata = {ExternalsDescription.PROTOCOL: 'svn', - ExternalsDescription.REPO_URL: - 'https://svn-ccsm-models.cgd.ucar.edu/', - ExternalsDescription.TAG: - 'mosart/trunk_tags/mosart1_0_26', - } - - data = {self._name: - { - ExternalsDescription.REQUIRED: False, - ExternalsDescription.PATH: 'junk', - ExternalsDescription.EXTERNALS: EMPTY_STR, - ExternalsDescription.REPO: rdata, - }, - } - - model = ExternalsDescriptionDict(data) - repo = model[self._name][ExternalsDescription.REPO] - self._repo = SvnRepository('test', repo) - - @staticmethod - def _svn_info_empty(*_): - """Return an empty info string. Simulates svn info failing. - """ - return '' - - @staticmethod - def _svn_info_synced(*_): - """Return an info sting that is synced with the setUp data - """ - return SVN_INFO_MOSART - - @staticmethod - def _svn_info_modified(*_): - """Return and info string that is modified from the setUp data - """ - return SVN_INFO_CISM - - def test_repo_dir_not_exist(self): - """Test that a directory that doesn't exist returns an error status - - Note: the Repository classes should be prevented from ever - working on an empty directory by the _Source object. - - """ - stat = ExternalStatus() - self._repo._check_sync(stat, 'junk') - self.assertEqual(stat.sync_state, ExternalStatus.STATUS_ERROR) - # check_dir should only modify the sync_state, not clean_state - self.assertEqual(stat.clean_state, ExternalStatus.DEFAULT) - - def test_repo_dir_exist_no_svn_info(self): - """Test that an empty info string returns an unknown status - """ - stat = ExternalStatus() - # Now we over-ride the _svn_info method on the repo to return - # a known value without requiring access to svn. - self._repo._svn_info = self._svn_info_empty - self._repo._check_sync(stat, '.') - self.assertEqual(stat.sync_state, ExternalStatus.UNKNOWN) - # check_dir should only modify the sync_state, not clean_state - self.assertEqual(stat.clean_state, ExternalStatus.DEFAULT) - - def test_repo_dir_synced(self): - """Test that a valid info string that is synced to the repo in the - externals description returns an ok status. - - """ - stat = ExternalStatus() - # Now we over-ride the _svn_info method on the repo to return - # a known value without requiring access to svn. - self._repo._svn_info = self._svn_info_synced - self._repo._check_sync(stat, '.') - self.assertEqual(stat.sync_state, ExternalStatus.STATUS_OK) - # check_dir should only modify the sync_state, not clean_state - self.assertEqual(stat.clean_state, ExternalStatus.DEFAULT) - - def test_repo_dir_modified(self): - """Test that a valid svn info string that is out of sync with the - externals description returns a modified status. - - """ - stat = ExternalStatus() - # Now we over-ride the _svn_info method on the repo to return - # a known value without requiring access to svn. - self._repo._svn_info = self._svn_info_modified - self._repo._check_sync(stat, '.') - self.assertEqual(stat.sync_state, ExternalStatus.MODEL_MODIFIED) - # check_dir should only modify the sync_state, not clean_state - self.assertEqual(stat.clean_state, ExternalStatus.DEFAULT) - - -class TestSVNStatusXML(unittest.TestCase): - """Test parsing of svn status xml output - """ - SVN_STATUS_XML_DIRTY_ALL = ''' - - - - - -sacks -2017-06-15T11:59:00.355419Z - - - - - - -sacks -2013-02-07T16:17:56.412878Z - - - - - - -sacks -2017-05-01T16:48:27.893741Z - - - - - - - - - - - - - - - - -''' - - SVN_STATUS_XML_DIRTY_MISSING = ''' - - - - - -sacks -2017-06-15T11:59:00.355419Z - - - - - - - - -''' - - SVN_STATUS_XML_DIRTY_MODIFIED = ''' - - - - - -sacks -2013-02-07T16:17:56.412878Z - - - - - - - - -''' - - SVN_STATUS_XML_DIRTY_DELETED = ''' - - - - - -sacks -2017-05-01T16:48:27.893741Z - - - - - - - - -''' - - SVN_STATUS_XML_DIRTY_UNVERSION = ''' - - - - - - - - - - - -''' - - SVN_STATUS_XML_DIRTY_ADDED = ''' - - - - - - - - - - - -''' - - SVN_STATUS_XML_CLEAN = ''' - - - - - - - - - - - -''' - - def test_xml_status_dirty_missing(self): - """Verify that svn status output is consindered dirty when there is a - missing file. - - """ - svn_output = self.SVN_STATUS_XML_DIRTY_MISSING - is_dirty = SvnRepository.xml_status_is_dirty( - svn_output) - self.assertTrue(is_dirty) - - def test_xml_status_dirty_modified(self): - """Verify that svn status output is consindered dirty when there is a - modified file. - """ - svn_output = self.SVN_STATUS_XML_DIRTY_MODIFIED - is_dirty = SvnRepository.xml_status_is_dirty( - svn_output) - self.assertTrue(is_dirty) - - def test_xml_status_dirty_deleted(self): - """Verify that svn status output is consindered dirty when there is a - deleted file. - """ - svn_output = self.SVN_STATUS_XML_DIRTY_DELETED - is_dirty = SvnRepository.xml_status_is_dirty( - svn_output) - self.assertTrue(is_dirty) - - def test_xml_status_dirty_unversion(self): - """Verify that svn status output ignores unversioned files when making - the clean/dirty decision. - - """ - svn_output = self.SVN_STATUS_XML_DIRTY_UNVERSION - is_dirty = SvnRepository.xml_status_is_dirty( - svn_output) - self.assertFalse(is_dirty) - - def test_xml_status_dirty_added(self): - """Verify that svn status output is consindered dirty when there is a - added file. - """ - svn_output = self.SVN_STATUS_XML_DIRTY_ADDED - is_dirty = SvnRepository.xml_status_is_dirty( - svn_output) - self.assertTrue(is_dirty) - - def test_xml_status_dirty_all(self): - """Verify that svn status output is consindered dirty when there are - multiple dirty files.. - - """ - svn_output = self.SVN_STATUS_XML_DIRTY_ALL - is_dirty = SvnRepository.xml_status_is_dirty( - svn_output) - self.assertTrue(is_dirty) - - def test_xml_status_dirty_clean(self): - """Verify that svn status output is consindered clean when there are - no 'dirty' files. This means accepting untracked and externals. - - """ - svn_output = self.SVN_STATUS_XML_CLEAN - is_dirty = SvnRepository.xml_status_is_dirty( - svn_output) - self.assertFalse(is_dirty) - - -if __name__ == '__main__': - unittest.main() diff --git a/manage_externals/test/test_unit_utils.py b/manage_externals/test/test_unit_utils.py deleted file mode 100644 index c994e58eb..000000000 --- a/manage_externals/test/test_unit_utils.py +++ /dev/null @@ -1,350 +0,0 @@ -#!/usr/bin/env python - -"""Unit test driver for checkout_externals - -Note: this script assume the path to the checkout_externals.py module is -already in the python path. - -""" - -from __future__ import absolute_import -from __future__ import unicode_literals -from __future__ import print_function - -import os -import unittest - -from manic.utils import last_n_lines, indent_string -from manic.utils import str_to_bool, execute_subprocess -from manic.utils import is_remote_url, split_remote_url, expand_local_url - - -class TestExecuteSubprocess(unittest.TestCase): - """Test the application logic of execute_subprocess wrapper - """ - - def test_exesub_return_stat_err(self): - """Test that execute_subprocess returns a status code when caller - requests and the executed subprocess fails. - - """ - cmd = ['false'] - status = execute_subprocess(cmd, status_to_caller=True) - self.assertEqual(status, 1) - - def test_exesub_return_stat_ok(self): - """Test that execute_subprocess returns a status code when caller - requests and the executed subprocess succeeds. - - """ - cmd = ['true'] - status = execute_subprocess(cmd, status_to_caller=True) - self.assertEqual(status, 0) - - def test_exesub_except_stat_err(self): - """Test that execute_subprocess raises an exception on error when - caller doesn't request return code - - """ - cmd = ['false'] - with self.assertRaises(RuntimeError): - execute_subprocess(cmd, status_to_caller=False) - - -class TestLastNLines(unittest.TestCase): - """Test the last_n_lines function. - - """ - - def test_last_n_lines_short(self): - """With a message with <= n lines, result of last_n_lines should - just be the original message. - - """ - mystr = """three -line -string -""" - - mystr_truncated = last_n_lines( - mystr, 3, truncation_message='[truncated]') - self.assertEqual(mystr, mystr_truncated) - - def test_last_n_lines_long(self): - """With a message with > n lines, result of last_n_lines should - be a truncated string. - - """ - mystr = """a -big -five -line -string -""" - expected = """[truncated] -five -line -string -""" - - mystr_truncated = last_n_lines( - mystr, 3, truncation_message='[truncated]') - self.assertEqual(expected, mystr_truncated) - - -class TestIndentStr(unittest.TestCase): - """Test the indent_string function. - - """ - - def test_indent_string_singleline(self): - """Test the indent_string function with a single-line string - - """ - mystr = 'foo' - result = indent_string(mystr, 4) - expected = ' foo' - self.assertEqual(expected, result) - - def test_indent_string_multiline(self): - """Test the indent_string function with a multi-line string - - """ - mystr = """hello -hi -goodbye -""" - result = indent_string(mystr, 2) - expected = """ hello - hi - goodbye -""" - self.assertEqual(expected, result) - - -class TestStrToBool(unittest.TestCase): - """Test the string to boolean conversion routine. - - """ - - def test_case_insensitive_true(self): - """Verify that case insensitive variants of 'true' returns the True - boolean. - - """ - values = ['true', 'TRUE', 'True', 'tRuE', 't', 'T', ] - for value in values: - received = str_to_bool(value) - self.assertTrue(received) - - def test_case_insensitive_false(self): - """Verify that case insensitive variants of 'false' returns the False - boolean. - - """ - values = ['false', 'FALSE', 'False', 'fAlSe', 'f', 'F', ] - for value in values: - received = str_to_bool(value) - self.assertFalse(received) - - def test_invalid_str_error(self): - """Verify that a non-true/false string generates a runtime error. - """ - values = ['not_true_or_false', 'A', '1', '0', - 'false_is_not_true', 'true_is_not_false'] - for value in values: - with self.assertRaises(RuntimeError): - str_to_bool(value) - - -class TestIsRemoteURL(unittest.TestCase): - """Crude url checking to determine if a url is local or remote. - - """ - - def test_url_remote_git(self): - """verify that a remote git url is identified. - """ - url = 'git@somewhere' - is_remote = is_remote_url(url) - self.assertTrue(is_remote) - - def test_url_remote_ssh(self): - """verify that a remote ssh url is identified. - """ - url = 'ssh://user@somewhere' - is_remote = is_remote_url(url) - self.assertTrue(is_remote) - - def test_url_remote_http(self): - """verify that a remote http url is identified. - """ - url = 'http://somewhere' - is_remote = is_remote_url(url) - self.assertTrue(is_remote) - - def test_url_remote_https(self): - """verify that a remote https url is identified. - """ - url = 'https://somewhere' - is_remote = is_remote_url(url) - self.assertTrue(is_remote) - - def test_url_local_user(self): - """verify that a local path with '~/path/to/repo' gets rejected - - """ - url = '~/path/to/repo' - is_remote = is_remote_url(url) - self.assertFalse(is_remote) - - def test_url_local_var_curly(self): - """verify that a local path with env var '${HOME}' gets rejected - """ - url = '${HOME}/path/to/repo' - is_remote = is_remote_url(url) - self.assertFalse(is_remote) - - def test_url_local_var(self): - """verify that a local path with an env var '$HOME' gets rejected - """ - url = '$HOME/path/to/repo' - is_remote = is_remote_url(url) - self.assertFalse(is_remote) - - def test_url_local_abs(self): - """verify that a local abs path gets rejected - """ - url = '/path/to/repo' - is_remote = is_remote_url(url) - self.assertFalse(is_remote) - - def test_url_local_rel(self): - """verify that a local relative path gets rejected - """ - url = '../../path/to/repo' - is_remote = is_remote_url(url) - self.assertFalse(is_remote) - - -class TestSplitRemoteURL(unittest.TestCase): - """Crude url checking to determine if a url is local or remote. - - """ - - def test_url_remote_git(self): - """verify that a remote git url is identified. - """ - url = 'git@somewhere.com:org/repo' - received = split_remote_url(url) - self.assertEqual(received, "org/repo") - - def test_url_remote_ssh(self): - """verify that a remote ssh url is identified. - """ - url = 'ssh://user@somewhere.com/path/to/repo' - received = split_remote_url(url) - self.assertEqual(received, 'somewhere.com/path/to/repo') - - def test_url_remote_http(self): - """verify that a remote http url is identified. - """ - url = 'http://somewhere.org/path/to/repo' - received = split_remote_url(url) - self.assertEqual(received, 'somewhere.org/path/to/repo') - - def test_url_remote_https(self): - """verify that a remote http url is identified. - """ - url = 'http://somewhere.gov/path/to/repo' - received = split_remote_url(url) - self.assertEqual(received, 'somewhere.gov/path/to/repo') - - def test_url_local_url_unchanged(self): - """verify that a local path is unchanged - - """ - url = '/path/to/repo' - received = split_remote_url(url) - self.assertEqual(received, url) - - -class TestExpandLocalURL(unittest.TestCase): - """Crude url checking to determine if a url is local or remote. - - Remote should be unmodified. - - Local, should perform user and variable expansion. - - """ - - def test_url_local_user1(self): - """verify that a local path with '~/path/to/repo' gets expanded to an - absolute path. - - NOTE(bja, 2017-11) we can't test for something like: - '~user/path/to/repo' because the user has to be in the local - machine password directory and we don't know a user name that - is valid on every system....? - - """ - field = 'test' - url = '~/path/to/repo' - received = expand_local_url(url, field) - print(received) - self.assertTrue(os.path.isabs(received)) - - def test_url_local_expand_curly(self): - """verify that a local path with '${HOME}' gets expanded to an absolute path. - """ - field = 'test' - url = '${HOME}/path/to/repo' - received = expand_local_url(url, field) - self.assertTrue(os.path.isabs(received)) - - def test_url_local_expand_var(self): - """verify that a local path with '$HOME' gets expanded to an absolute path. - """ - field = 'test' - url = '$HOME/path/to/repo' - received = expand_local_url(url, field) - self.assertTrue(os.path.isabs(received)) - - def test_url_local_env_missing(self): - """verify that a local path with env var that is missing gets left as-is - - """ - field = 'test' - url = '$TMP_VAR/path/to/repo' - received = expand_local_url(url, field) - print(received) - self.assertEqual(received, url) - - def test_url_local_expand_env(self): - """verify that a local path with another env var gets expanded to an - absolute path. - - """ - field = 'test' - os.environ['TMP_VAR'] = '/some/absolute' - url = '$TMP_VAR/path/to/repo' - received = expand_local_url(url, field) - del os.environ['TMP_VAR'] - print(received) - self.assertTrue(os.path.isabs(received)) - self.assertEqual(received, '/some/absolute/path/to/repo') - - def test_url_local_normalize_rel(self): - """verify that a local path with another env var gets expanded to an - absolute path. - - """ - field = 'test' - url = '/this/is/a/long/../path/to/a/repo' - received = expand_local_url(url, field) - print(received) - self.assertEqual(received, '/this/is/a/path/to/a/repo') - - -if __name__ == '__main__': - unittest.main() diff --git a/modulefiles/cheyenne b/modulefiles/cheyenne new file mode 100644 index 000000000..f5a40a5bd --- /dev/null +++ b/modulefiles/cheyenne @@ -0,0 +1,39 @@ +#%Module# + +proc ModulesHelp { } { +puts stderr "Loads modules required for building upp" +} +module-whatis "Loads UPP prerequisites on Cheyenne for Intel 2021.2" + +module purge + +module load cmake/3.18.2 +module load ncarenv/1.3 +module load intel/2021.2 +module load mpt/2.22 +module load ncarcompilers/0.5.0 +module unload netcdf + +module use /glade/p/ral/jntp/GMTB/tools/hpc-stack-v1.2.0/modulefiles/stack +module load hpc/1.2.0 +module load hpc-intel/2021.2 +module load hpc-mpt/2.22 + +module load jasper/2.0.25 +module load zlib/1.2.11 +module load png/1.6.35 + +module load hdf5/1.10.6 +module load netcdf/4.7.4 + +module load bacio/2.4.1 +module load crtm/2.3.0 +module load g2/3.4.2 +module load g2tmpl/1.10.0 +module load ip/3.3.3 +module load nemsio/2.5.2 +module load sfcio/1.4.1 +module load sigio/2.3.2 +module load sp/2.3.3 +module load w3emc/2.9.2 +module load wrf_io/1.2.0 diff --git a/modulefiles/cheyenne_gnu b/modulefiles/cheyenne_gnu new file mode 100644 index 000000000..d14c372e6 --- /dev/null +++ b/modulefiles/cheyenne_gnu @@ -0,0 +1,40 @@ +#%Module# + +proc ModulesHelp { } { +puts stderr "Loads modules required for building upp" +} +module-whatis "Loads UPP prerequisites on Cheyenne for Intel 2021.2" + +module purge + +module load cmake/3.18.2 +module load ncarenv/1.3 +module load gnu/10.1.0 +module load mpt/2.22 +module load ncarcompilers/0.5.0 +module load python/3.7.9 +module unload netcdf + +module use /glade/p/ral/jntp/GMTB/tools/hpc-stack-v1.2.0/modulefiles/stack +module load hpc/1.2.0 +module load hpc-gnu/10.1.0 +module load hpc-mpt/2.22 + +module load jasper/2.0.25 +module load zlib/1.2.11 +module load png/1.6.35 + +module load hdf5/1.10.6 +module load netcdf/4.7.4 + +module load bacio/2.4.1 +module load crtm/2.3.0 +module load g2/3.4.2 +module load g2tmpl/1.10.0 +module load ip/3.3.3 +module load nemsio/2.5.2 +module load sfcio/1.4.1 +module load sigio/2.3.2 +module load sp/2.3.3 +module load w3emc/2.9.2 +module load wrf_io/1.2.0 diff --git a/modulefiles/hera b/modulefiles/hera deleted file mode 100755 index af118011d..000000000 --- a/modulefiles/hera +++ /dev/null @@ -1,35 +0,0 @@ -#%Module###################################################################### -# Wen Meng 01/2021, Set up config. with the hpc-stack NCEPLIBS. -############################################################################## - -proc ModulesHelp { } { -puts stderr "Loads modules required for building upp" -} -module-whatis "Loads UPP prerequisites on Hera" - -module load cmake/3.16.1 - -module use /scratch2/NCEPDEV/nwprod/hpc-stack/libs/hpc-stack/modulefiles/stack -module load hpc/1.1.0 -module load hpc-intel/18.0.5.274 -module load hpc-impi/2018.0.4 - -module load jasper/2.0.22 -module load zlib/1.2.11 -module load png/1.6.35 - -module load hdf5/1.10.6 -module load netcdf/4.7.4 - -module load bacio/2.4.1 -module load crtm/2.3.0 -module load g2/3.4.1 -module load g2tmpl/1.10.0 -module load ip/3.3.3 -module load nemsio/2.5.2 -module load sfcio/1.4.1 -module load sigio/2.3.2 -module load sp/2.3.3 -module load w3nco/2.4.1 -module load w3emc/2.7.3 -module load wrf_io/1.1.1 diff --git a/modulefiles/hera.lua b/modulefiles/hera.lua new file mode 100644 index 000000000..85bdd8fb5 --- /dev/null +++ b/modulefiles/hera.lua @@ -0,0 +1,61 @@ +help([[ +Load environment to build post on hera +]]) + +cmake_ver=os.getenv("cmake_ver") or "3.20.1" +load(pathJoin("cmake", cmake_ver)) + +prepend_path("MODULEPATH", "/scratch2/NCEPDEV/nwprod/hpc-stack/libs/hpc-stack/modulefiles/stack") + +hpc_ver=os.getenv("hpc_ver") or "1.1.0" +load(pathJoin("hpc", hpc_ver)) + +hpc_intel_ver=os.getenv("hpc_intel_ver") or "2022.1.2" +load(pathJoin("hpc-intel", hpc_intel_ver)) +hpc_impi_ver=os.getenv("hpc_impi_ver") or "2022.1.2" +load(pathJoin("hpc-impi", hpc_impi_ver)) + +hdf5_ver=os.getenv("hdf5_ver") or "1.10.6" +load(pathJoin("hdf5", hdf5_ver)) +netcdf_ver=os.getenv("netcdf_ver") or "4.7.4" +load(pathJoin("netcdf", netcdf_ver)) + +jasper_ver=os.getenv("jasper_ver") or "2.0.25" +load(pathJoin("jasper", jasper_ver)) +libpng_ver=os.getenv("libpng_ver") or "1.6.37" +load(pathJoin("libpng", libpng_ver)) +zlib_ver=os.getenv("zlib_ver") or "1.2.11" +load(pathJoin("zlib", zlib_ver)) + +g2_ver=os.getenv("g2_ver") or "3.4.5" +load(pathJoin("g2", g2_ver)) +g2tmpl_ver=os.getenv("g2tmpl_ver") or "1.10.2" +load(pathJoin("g2tmpl", g2tmpl_ver)) +bacio_ver=os.getenv("bacio_ver") or "2.4.1" +load(pathJoin("bacio", bacio_ver)) +ip_ver=os.getenv("ip_ver") or "3.3.3" +load(pathJoin("ip", ip_ver)) +sp_ver=os.getenv("sp_ver") or "2.3.3" +load(pathJoin("sp", sp_ver)) +crtm_ver=os.getenv("crtm_ver") or "2.4.0" +load(pathJoin("crtm", crtm_ver)) +w3emc_ver=os.getenv("w3emc_ver") or "2.9.2" +load(pathJoin("w3emc", w3emc_ver)) + +nemsio_ver=os.getenv("nemsio_ver") or "2.5.4" +load(pathJoin("nemsio", nemsio_ver)) +sigio_ver=os.getenv("sigio_ver") or "2.3.2" +load(pathJoin("sigio", sigio_ver)) +sfcio_ver=os.getenv("sfcio_ver") or "1.4.1" +load(pathJoin("sfcio", sfcio_ver)) +wrf_io_ver=os.getenv("wrf_io_ver") or "1.2.0" +load(pathJoin("wrf_io", wrf_io_ver)) + +setenv("CC","mpiicc") +setenv("CXX","mpiicpc") +setenv("FC","mpiifort") + +prepend_path("MODULEPATH", "/scratch2/BMC/ifi/modulefiles") +try_load("ifi/20230118-intel-2022.1.2") + +whatis("Description: post build environment") diff --git a/modulefiles/jet b/modulefiles/jet old mode 100755 new mode 100644 index adafe445f..6562100ca --- a/modulefiles/jet +++ b/modulefiles/jet @@ -30,6 +30,8 @@ module load nemsio/2.5.2 module load sfcio/1.4.1 module load sigio/2.3.2 module load sp/2.3.3 -module load w3nco/2.4.1 -module load w3emc/2.7.3 +module load w3emc/2.9.2 module load wrf_io/1.1.1 + +module use /lfs4/BMC/ifi/modulefiles +module try-load ifi/20230118-intel-18.0.5.274 diff --git a/modulefiles/orion b/modulefiles/orion deleted file mode 100755 index 0fa59cec8..000000000 --- a/modulefiles/orion +++ /dev/null @@ -1,35 +0,0 @@ -#%Module###################################################################### -# Wen Meng 01/2021, Set up config. with the hpc-stack NCEPLIBS. -############################################################################## - -proc ModulesHelp { } { -puts stderr "Loads modules required for building upp" -} -module-whatis "Loads UPP prerequisites on Orion" - -module load cmake/3.17.3 - -module use /apps/contrib/NCEP/libs/hpc-stack/modulefiles/stack -module load hpc/1.1.0 -module load hpc-intel/2018.4 -module load hpc-impi/2018.4 - -module load jasper/2.0.22 -module load zlib/1.2.11 -module load png/1.6.35 - -module load hdf5/1.10.6 -module load netcdf/4.7.4 - -module load bacio/2.4.1 -module load crtm/2.3.0 -module load g2/3.4.1 -module load g2tmpl/1.10.0 -module load ip/3.3.3 -module load nemsio/2.5.2 -module load sfcio/1.4.1 -module load sigio/2.3.2 -module load sp/2.3.3 -module load w3nco/2.4.1 -module load w3emc/2.7.3 -module load wrf_io/1.1.1 diff --git a/modulefiles/orion.lua b/modulefiles/orion.lua new file mode 100644 index 000000000..4ba20ad1d --- /dev/null +++ b/modulefiles/orion.lua @@ -0,0 +1,58 @@ +help([[ +Load environment to build post on orion +]]) + +cmake_ver=os.getenv("cmake_ver") or "3.22.1" +load(pathJoin("cmake", cmake_ver)) + +prepend_path("MODULEPATH", "/apps/contrib/NCEP/hpc-stack/libs/hpc-stack/modulefiles/stack") + +hpc_ver=os.getenv("hpc_ver") or "1.2.0" +load(pathJoin("hpc", hpc_ver)) + +hpc_intel_ver=os.getenv("hpc_intel_ver") or "2022.1.2" +load(pathJoin("hpc-intel", hpc_intel_ver)) +hpc_impi_ver=os.getenv("hpc_impi_ver") or "2022.1.2" +load(pathJoin("hpc-impi", hpc_impi_ver)) + +hdf5_ver=os.getenv("hdf5_ver") or "1.10.6" +load(pathJoin("hdf5", hdf5_ver)) +netcdf_ver=os.getenv("netcdf_ver") or "4.7.4" +load(pathJoin("netcdf", netcdf_ver)) + +jasper_ver=os.getenv("jasper_ver") or "2.0.25" +load(pathJoin("jasper", jasper_ver)) +libpng_ver=os.getenv("libpng_ver") or "1.6.37" +load(pathJoin("libpng", libpng_ver)) +zlib_ver=os.getenv("zlib_ver") or "1.2.11" +load(pathJoin("zlib", zlib_ver)) + +g2_ver=os.getenv("g2_ver") or "3.4.5" +load(pathJoin("g2", g2_ver)) +g2tmpl_ver=os.getenv("g2tmpl_ver") or "1.10.2" +load(pathJoin("g2tmpl", g2tmpl_ver)) +bacio_ver=os.getenv("bacio_ver") or "2.4.1" +load(pathJoin("bacio", bacio_ver)) +ip_ver=os.getenv("ip_ver") or "3.3.3" +load(pathJoin("ip", ip_ver)) +sp_ver=os.getenv("sp_ver") or "2.3.3" +load(pathJoin("sp", sp_ver)) +crtm_ver=os.getenv("crtm_ver") or "2.4.0" +load(pathJoin("crtm", crtm_ver)) +w3emc_ver=os.getenv("w3emc_ver") or "2.9.2" +load(pathJoin("w3emc", w3emc_ver)) + +nemsio_ver=os.getenv("nemsio_ver") or "2.5.4" +load(pathJoin("nemsio", nemsio_ver)) +sigio_ver=os.getenv("sigio_ver") or "2.3.2" +load(pathJoin("sigio", sigio_ver)) +sfcio_ver=os.getenv("sfcio_ver") or "1.4.1" +load(pathJoin("sfcio", sfcio_ver)) +wrf_io_ver=os.getenv("wrf_io_ver") or "1.2.0" +load(pathJoin("wrf_io", wrf_io_ver)) + +setenv("CC","mpiicc") +setenv("CXX","mpiicpc") +setenv("FC","mpiifort") + +whatis("Description: post build environment") diff --git a/modulefiles/post/v8.0.0-cray-intel b/modulefiles/post/v8.0.0-cray-intel deleted file mode 100644 index 529fb6c6b..000000000 --- a/modulefiles/post/v8.0.0-cray-intel +++ /dev/null @@ -1,60 +0,0 @@ -#%Module###################################################################### -############################################################# -## Lin.Gan@noaa.gov -## EMC -## post v7.0.0 - Branch based on current trunk as of 20151106 -## Luna Cray with Intel -## Wen Meng 07/2018: set post to v8.0.0 for fv3gfs -############################################################# -proc ModulesHelp { } { -puts stderr "Set environment veriables for post" -puts stderr "This module initializes the users environment" -puts stderr "to build the post for production.\n" -} -module-whatis "post" - -set ver v8.0.0 - -module use -a /usrx/local/prod/modulefiles -module use -a /gpfs/hps/nco/ops/nwprod/lib/modulefiles -module load PrgEnv-intel -module rm intel -module load intel/18.1.163 -module rm NetCDF-intel-sandybridge/4.2 -module load craype-haswell -#module load craype/2.3.0 -module load cray-libsci/13.0.3 - -module load NetCDF-intel-sandybridge/4.7.4 -module load HDF5-parallel-intel-sandybridge/1.10.6 - -module load jasper-gnu-sandybridge/1.900.1 -module load png-gnu-sandybridge/1.2.49 -module load zlib-gnu-sandybridge/1.2.7 - -# Loading nceplibs modules -module load g2-intel/3.2.0 -module load g2tmpl-intel/1.6.0 -module load w3nco-intel/2.2.0 -module load bacio-intel/2.0.3 -module load gfsio-intel/1.1.0 -module load ip-intel/3.0.2 -module load sp-intel/2.0.3 -module load crtm-intel/2.3.0 -module load w3emc-intel/2.4.0 - -module load nemsio-intel/2.2.4 -module load sigio-intel/2.1.0 -module load sfcio-intel/1.0.0 -module load wrfio-intel/1.1.1 - -setenv myFC ftn -setenv OPENMP "-qopenmp" -setenv myFCFLAGS "-O2 -convert big_endian -traceback -g -fp-model source -fpp" -setenv myCPP /lib/cpp -setenv myCPPFLAGS "-P" - -setenv mySFC ftn - - - diff --git a/modulefiles/post/v8.0.0-hera b/modulefiles/post/v8.0.0-hera deleted file mode 100644 index 72b80bc9e..000000000 --- a/modulefiles/post/v8.0.0-hera +++ /dev/null @@ -1,55 +0,0 @@ -#%Module###################################################################### -############################################################# -## Lin.Gan@noaa.gov -## EMC -## post v7.0.0 -## Wen Meng 07/2018: set post to v8.0.0 for fv3gfs -############################################################# -proc ModulesHelp { } { -puts stderr "Set environment veriables for post" -puts stderr "This module initializes the users environment" -puts stderr "to build the post for WCOSS production.\n" -} -module-whatis "post" - -set ver v8.0.0 - -# Loading Intel Compiler Suite -module load intel/18.0.5.274 -module load impi/2018.0.4 - -module use /scratch1/NCEPDEV/nems/emc.nemspara/soft/modulefiles -module load hdf5_parallel/1.10.6 -module load netcdf_parallel/4.7.4 - -module use -a /scratch2/NCEPDEV/nwprod/NCEPLIBS/modulefiles -module load jasper/1.900.1 -module load png/1.2.44 -module load z/1.2.11 - -# Loding nceplibs modules -module load g2/3.2.0 -module load g2tmpl/1.6.0 -module load w3nco/2.2.0 -module load bacio/2.0.3 -module load gfsio/1.1.0 -module load ip/3.0.2 -module load sp/2.0.3 -module load crtm/2.3.0 -module load w3emc/2.4.0 - -module load nemsio/2.2.4 -module load sigio/2.1.1 -module load sfcio/1.1.1 -module load wrfio/1.1.1 - -setenv myFC mpiifort -setenv OPENMP "-qopenmp" -setenv myFCFLAGS "-O3 -convert big_endian -traceback -g -fp-model source -qopenmp -fpp" -# -#setenv myFCFLAGS "-O0 -convert big_endian -fp-model source -openmp -g -check all -ftrapuv -fp-stack-check -fstack-protector -heap-arrays -recursive -traceback" - -setenv myCPP /lib/cpp -setenv myCPPFLAGS "-P" - -setenv mySFC ifort diff --git a/modulefiles/post/v8.0.0-jet b/modulefiles/post/v8.0.0-jet deleted file mode 100644 index b56a5c365..000000000 --- a/modulefiles/post/v8.0.0-jet +++ /dev/null @@ -1,52 +0,0 @@ -#%Module###################################################################### -############################################################# -## Lin.Gan@noaa.gov -## EMC -## post v7.0.0 -## Wen Meng 07/2018: set post to v8.0.0 for fv3gfs -############################################################# -proc ModulesHelp { } { -puts stderr "Set environment veriables for post" -puts stderr "This module initializes the users environment" -puts stderr "to build the post for WCOSS production.\n" -} -module-whatis "post" - -set ver v8.0.0 - -# Loading Intel Compiler Suite -module load intel/18.0.5.274 -module load impi/2018.4.274 - -# Loding nceplibs modules -module use /mnt/lfs4/HFIP/hfv3gfs/nwprod/NCEPLIBS/modulefiles -module load sigio/v2.1.0 -module load jasper/v1.900.1 -module load png/v1.2.44 -module load z/v1.2.6 -module load sfcio/v1.0.0 -module load nemsio/v2.2.3 -module load bacio/v2.0.2 -module load xmlparse/v2.0.0 -module load gfsio/v1.1.0 -module load ip/v3.0.1 -module load sp/v2.0.2 -module load w3emc/v2.4.0 -module load w3nco/v2.0.6 -module load crtm/v2.3.0 -module load g2/v3.1.0 -module load g2tmpl/v1.6.0 -module load wrfio/v1.1.1 -module load hdf5_parallel/1.10.6 -module load netcdf_parallel/4.7.4 - - -#setenv WRFPATH /mnt/lfs3/projects/hfv3gfs/nwprod/wrf_shared.v1.1.0/ -setenv myFC mpiifort -setenv OPENMP "-qopenmp" -setenv myFCFLAGS "-O3 -convert big_endian -traceback -g -fp-model source -qopenmp -fpp" -# -#setenv myFCFLAGS "-O0 -convert big_endian -fp-model source -openmp -g -check all -ftrapuv -fp-stack-check -fstack-protector -heap-arrays -recursive -traceback" - -setenv myCPP /lib/cpp -setenv myCPPFLAGS "-P" diff --git a/modulefiles/post/v8.0.0-odin b/modulefiles/post/v8.0.0-odin deleted file mode 100644 index cde6d1d3b..000000000 --- a/modulefiles/post/v8.0.0-odin +++ /dev/null @@ -1,87 +0,0 @@ -#%Module###################################################################### -############################################################# -## Lin.Gan@noaa.gov -## EMC -## post v7.0.0 -## Wen Meng 07/2018: set post to v8.0.0 for fv3gfs -############################################################# -proc ModulesHelp { } { -puts stderr "Set environment veriables for post" -puts stderr "This module initializes the users environment" -puts stderr "to build the post for WCOSS production.\n" -} -module-whatis "post" - -set ver v8.0.0 - -#module purge - -# Loading Intel Compiler Suite -module load PrgEnv-intel -module swap intel/19.0.5.281 -module load cray-mpich/7.7.10 -module load cray-libsci -module load cray-netcdf-hdf5parallel -module load cray-parallel-netcdf -module load cray-hdf5-parallel -module load gcc/6.1.0 -module load slurm - -# Loding nceplibs modules -module use -a /oldscratch/ywang/external/modulefiles -module load sigio/v2.0.1 -#module load jasper/v1.900.1 -#module load png/v1.2.44 -#module load z/v1.2.6 -module load sfcio/v1.0.0 -module load nemsio/v2.2.2 -module load bacio/v2.0.2 -#module load g2/v2.5.2 -#module load xmlparse/v2.0.0 -module load gfsio/v1.1.0 -module load ip/v3.0.0 -module load sp/v2.0.2 -module load w3emc/v2.3.0 -module load w3nco/v2.0.6 -module load crtm/v2.2.5 -module load g2/v3.1.0 -module load g2tmpl/v1.5.0 -module load wrfio/1.1.1 -#module load netcdf/3.6.3 -#module load netcdf/4.6.1 - -setenv NETCDF /opt/cray/pe/netcdf-hdf5parallel/4.6.3.2/INTEL/19.0 -setenv JASPER_LIB "-ljasper" -setenv PNG_LIB "-lpng" - -#setenv NCEPLIBS /mnt/lfs3/projects/hfv3gfs/gwv/ljtjet/lib - -#module use /mnt/lfs3/projects/hfv3gfs/gwv/ljtjet/lib/modulefiles -#module load g2tmpl-intel/1.5.0 - -#module use /mnt/lfs3/projects/hfv3gfs/gwv/ljtjet/lib/wrf.post.lib/modulefiles -#module load wrf-io-v1.1.1 -# -#setenv WRFIO_LIB /mnt/lfs3/projects/hfv3gfs/gwv/ljtjet/lib/wrf.post.lib/v1.1.1/lib/wrf_io/libwrfio_nf.a - - -#set dlib /mnt/lfs3/projects/hfv3gfs/gwv/ltmp2/lib/g2/v3.1.0/ -#set bname "G2" -# -### Export environment variables -#setenv ${bname}_SRC $dlib/src -#setenv ${bname}_INC4 $dlib/intel/include/g2_v3.1.0_4 -#setenv ${bname}_INCd $dlib/intel/include/g2_v3.1.0_d -#setenv ${bname}_LIB4 $dlib/intel/libg2_v3.1.0_4.a -#setenv ${bname}_LIBd $dlib/intel/libg2_v3.1.0_d.a -#setenv ${bname}_VER v3.1.0 - -#setenv WRFPATH /mnt/lfs3/projects/hfv3gfs/nwprod/wrf_shared.v1.1.0/ -setenv myFC ftn -setenv OPENMP "-qopenmp" -setenv myFCFLAGS "-O3 -convert big_endian -traceback -g -fp-model source -qopenmp -fpp -target-cpu=x86-64" -# -#setenv myFCFLAGS "-O0 -convert big_endian -fp-model source -openmp -g -check all -ftrapuv -fp-stack-check -fstack-protector -heap-arrays -recursive -traceback" - -setenv myCPP /lib/cpp -setenv myCPPFLAGS "-P" diff --git a/modulefiles/post/v8.0.0-orion b/modulefiles/post/v8.0.0-orion deleted file mode 100755 index cf7889526..000000000 --- a/modulefiles/post/v8.0.0-orion +++ /dev/null @@ -1,56 +0,0 @@ -#%Module###################################################################### -############################################################# -## Lin.Gan@noaa.gov -## EMC -## post v7.0.0 -## Wen Meng 07/2018: set post to v8.0.0 for fv3gfs -############################################################# -proc ModulesHelp { } { -puts stderr "Set environment veriables for post" -puts stderr "This module initializes the users environment" -puts stderr "to build the post for WCOSS production.\n" -} -module-whatis "post" - -set ver v8.0.0 - -# Loading Intel Compiler Suite -module load intel/2018.4 -module load impi/2018.4 - -#module use /contrib/modulefiles -module use -a /apps/contrib/NCEPLIBS/orion/modulefiles - -module load netcdf_parallel/4.7.4 -module load hdf5_parallel/1.10.6 - -module load jasper/1.900.2 -module load png/1.2.44 -module load z/1.2.6 - -# Loding nceplibs modules -module load g2/3.2.0 -module load g2tmpl/1.6.0 -module load w3nco/2.2.0 -module load bacio/2.0.3 -module load gfsio/1.2.0 -module load ip/3.0.2 -module load sp/2.0.3 -module load crtm/2.3.0 -module load w3emc/2.4.0 - -module load nemsio/2.2.4 -module load sigio/2.2.0 -module load sfcio/1.2.0 -module load wrfio/1.1.1 - -setenv myFC mpiifort -setenv OPENMP "-qopenmp" -setenv myFCFLAGS "-O3 -convert big_endian -traceback -g -fp-model source -qopenmp -fpp" -# -#setenv myFCFLAGS "-O0 -convert big_endian -fp-model source -qopenmp -g -check all -ftrapuv -fp-stack-check -fstack-protector -heap-arrays -recursive -traceback" - -setenv myCPP /lib/cpp -setenv myCPPFLAGS "-P" - -setenv mySFC ifort diff --git a/modulefiles/post/v8.0.0-stampede b/modulefiles/post/v8.0.0-stampede deleted file mode 100644 index 95ad14a5c..000000000 --- a/modulefiles/post/v8.0.0-stampede +++ /dev/null @@ -1,54 +0,0 @@ -#%Module###################################################################### -############################################################# -## Lin.Gan@noaa.gov -## EMC -## post v7.0.0 -## Wen Meng 07/2018: set post to v8.0.0 for fv3gfs -############################################################# -proc ModulesHelp { } { -puts stderr "Set environment veriables for post" -puts stderr "This module initializes the users environment" -puts stderr "to build the post for WCOSS production.\n" -} -module-whatis "post" - -set ver v8.0.0 - -# Loading Intel Compiler Suite -module purge -module load intel/18.0.2 -module load impi/18.0.2 -module load parallel-netcdf/4.6.2 -module load phdf5/1.10.4 - -# Loding nceplibs modules -#module use -a /mnt/lfs3/projects/hfv3gfs/nwprod/lib/modulefiles -module use -a /work/00315/tg455890/stampede2/external/modulefiles -module load sigio/v2.1.0 -module load sfcio/v1.0.0 -module load nemsio/v2.2.3 -module load bacio/v2.0.2 -#module load g2/v2.5.2 -#module load xmlparse/v2.0.0 -module load gfsio/v1.1.0 -module load ip/v3.0.0 -module load sp/v2.0.2 -module load w3emc/v2.3.0 -module load w3nco/v2.0.6 -module load crtm/v2.2.3 -module load g2/v3.1.0 -module load g2tmpl/v1.6.0 -module load wrfio/1.1.1 - -setenv NETCDF /opt/apps/intel18/netcdf/4.6.2/x86_64 -setenv JASPER_LIB "-ljasper" -setenv PNG_LIB "-lpng" - -setenv myFC mpiifort -setenv OPENMP "-qopenmp" -setenv myFCFLAGS "-O3 -convert big_endian -traceback -g -fp-model source -qopenmp -fpp" -# -#setenv myFCFLAGS "-O0 -convert big_endian -fp-model source -openmp -g -check all -ftrapuv -fp-stack-check -fstack-protector -heap-arrays -recursive -traceback" - -setenv myCPP /lib/cpp -setenv myCPPFLAGS "-P" diff --git a/modulefiles/post/v8.0.0-wcoss b/modulefiles/post/v8.0.0-wcoss deleted file mode 100644 index 38cf2801b..000000000 --- a/modulefiles/post/v8.0.0-wcoss +++ /dev/null @@ -1,45 +0,0 @@ -#%Module###################################################################### -############################################################# -## Lin.Gan@noaa.gov -## EMC -## post v7.0.0 -## Wen Meng 07/2018: set post to v8.0.0 for fv3gfs -############################################################# -proc ModulesHelp { } { -puts stderr "Set environment veriables for post" -puts stderr "This module initializes the users environment" -puts stderr "to build the post for WCOSS production.\n" -} -module-whatis "post" - -set ver v8.0.0 - -# Loading Intel Compiler Suite -module load ics/15.0.3 -module load ibmpe/1.3.0.12 - -# Loding nceplibs modules -module load sigio/v2.1.0 -module load jasper/v1.900.1 -module load png/v1.2.44 -module load z/v1.2.6 -module load sfcio/v1.0.0 -module load nemsio/v2.2.2 -module load bacio/v2.0.1 -module load g2/v3.1.0 -module load xmlparse/v2.0.0 -module load gfsio/v1.1.0 -module load ip/v3.0.0 -module load sp/v2.0.2 -module load w3emc/v2.2.0 -module load w3nco/v2.0.6 -module load crtm/v2.2.4 -module load NetCDF/3.6.3 -module load g2tmpl/v1.5.0 - -setenv WRFPATH /nwprod/sorc/wrf_shared.v1.1.0 -setenv myFC mpiifort -setenv OPENMP "-openmp" -setenv myFCFLAGS "-O3 -convert big_endian -traceback -g -fp-model source -openmp" -setenv myCPP /lib/cpp -setenv myCPPFLAGS "-P" diff --git a/modulefiles/post/v8.0.0-wcoss_dell_p3 b/modulefiles/post/v8.0.0-wcoss_dell_p3 deleted file mode 100644 index 8056ecac5..000000000 --- a/modulefiles/post/v8.0.0-wcoss_dell_p3 +++ /dev/null @@ -1,54 +0,0 @@ -#%Module###################################################################### -############################################################# -## post v7.0.0 - for WCOSS Dell -## Wen Meng 07/2018: set post to v8.0.0 for fv3gfs -############################################################# -proc ModulesHelp { } { -puts stderr "Set environment veriables for post" -puts stderr "This module initializes the users environment" -puts stderr "to build the post for production.\n" -} -module-whatis "post" - -set ver v8.0.0 - -module load ips/18.0.1.163 -module load impi/18.0.1 -#module load prod_util/1.1.0 - -module load NetCDF-parallel/4.7.4 -module load HDF5-parallel/1.10.6 - -module load jasper/1.900.1 -module load libpng/1.2.59 -module load zlib/1.2.11 - -# Loading nceplibs modules -module load g2/3.2.0 -module load g2tmpl/1.6.0 -module load w3nco/2.2.0 -module load bacio/2.0.3 -module load gfsio/1.1.0 -module load ip/3.0.2 -module load sp/2.0.3 -module load crtm/2.3.0 -module load w3emc/2.4.0 - -module load nemsio/2.2.4 -module load sigio/2.1.0 -module load sfcio/1.0.0 -module load wrfio/1.1.1 - -setenv myFC mpiifort -setenv OPENMP "-qopenmp" -setenv myFCFLAGS "-O3 -convert big_endian -traceback -g -fp-model source -qopenmp -fpp" -setenv myCPP /lib/cpp -setenv myCPPFLAGS "-P" -#setenv myFCFLAGS "-g -O0 -check -check noarg_temp_created -check nopointer -fp-stack-check -fstack-protector-all -fpe0 -debug -traceback -ftrapuv" -##setenv myCPPFLAGS "-O0 -g -ftrapuv -traceback" - - -setenv mySFC ifort - - - diff --git a/modulefiles/s4 b/modulefiles/s4 index 3147aa294..f41835c42 100644 --- a/modulefiles/s4 +++ b/modulefiles/s4 @@ -29,6 +29,5 @@ module load nemsio/2.5.2 module load sfcio/1.4.1 module load sigio/2.3.2 module load sp/2.3.3 -module load w3nco/2.4.1 -module load w3emc/2.7.3 +module load w3emc/2.9.2 module load wrf_io/1.1.1 diff --git a/modulefiles/upp/lib-cray-intel b/modulefiles/upp/lib-cray-intel deleted file mode 100755 index 0233f4be4..000000000 --- a/modulefiles/upp/lib-cray-intel +++ /dev/null @@ -1,57 +0,0 @@ -#%Module###################################################################### -## Jun.Wang@noaa.gov: Started NCEPPOST lib v6.3.0 -## Wen.Meng@noaa.gov 10/2019: Upgraded to v8.0.0 -##_____________________________________________________ -proc ModulesHelp { } { -puts stderr "Set environment veriables for NCEPPOST" -puts stderr "This module initializes the enviro nment " -puts stderr "for the Intel Compiler Suite $version\n" -} -module-whatis " NCEPPOST lib whatis description" - -#set ver v6.3.0 -#set envir dev -#set NCEPLIB /nwprod/lib - -#set sys [uname sysname] - -#setenv COMPF_MP mpiifort -setenv myFC ftn -setenv myFCFLAGS "-O2 -convert big_endian -traceback -g -fp-model source -fpp" -setenv myCPP /lib/cpp -setenv myCPPFLAGS "-P" -setenv ARCHV ar -setenv CPPC /lib/cpp -#setenv version v8.0.0 -# - -module purge - -module use -a /usrx/local/prod/modulefiles -module use -a /gpfs/hps/nco/ops/nwprod/lib/modulefiles - -# Loading Intel Compiler Suite -module load PrgEnv-intel -module rm intel -module load intel/18.1.163 -module load craype-haswell -#module load craype/2.3.0 - -module load jasper-gnu-sandybridge/1.900.1 -module load png-gnu-sandybridge/1.2.49 -module load zlib-gnu-sandybridge/1.2.7 - -# Loading nceplibs modules -module load g2-intel/3.2.0 -module load g2tmpl-intel/1.6.0 -#module load xmlparse/v2.0.0 -module load w3nco-intel/2.2.0 -module load bacio-intel/2.0.3 -module load gfsio-intel/1.1.0 -#module load sigio/2.1.0 -module load ip-intel/3.0.2 -module load sp-intel/2.0.3 -module load crtm-intel/2.3.0 -module load w3emc-intel/2.4.0 - - diff --git a/modulefiles/upp/lib-hera b/modulefiles/upp/lib-hera deleted file mode 100755 index 392989db4..000000000 --- a/modulefiles/upp/lib-hera +++ /dev/null @@ -1,52 +0,0 @@ -#%Module###################################################################### -## Jun.Wang@noaa.gov: Started NCEPPOST lib v6.3.0 -## Wen.Meng@noaa.gov 10/2019: Upgraded to v8.0.0 -##_____________________________________________________ -proc ModulesHelp { } { -puts stderr "Set environment veriables for NCEPPOST" -puts stderr "This module initializes the enviro nment " -puts stderr "for the Intel Compiler Suite $version\n" -} -module-whatis " NCEPPOST lib whatis description" - -#set ver v6.3.0 -#set envir dev -#set NCEPLIB /nwprod/lib - -#set sys [uname sysname] - -#setenv COMPF_MP mpiifort -setenv myFC mpiifort -setenv myFCFLAGS "-O3 -convert big_endian -traceback -g -fp-model source -fpp" -setenv myCPP /lib/cpp -setenv myCPPFLAGS "-P" -setenv ARCHV ar -setenv CPPC /lib/cpp -#setenv version v8.0.0 -# - -module purge - -# Loading Intel Compiler Suite -module load intel/18.0.5.274 -module load impi/2018.0.4 - -# Loading nceplibs modules -module use -a /scratch2/NCEPDEV/nwprod/NCEPLIBS/modulefiles -module load jasper/1.900.1 -module load png/1.2.44 -module load z/1.2.11 - -module load g2/3.2.0 -module load g2tmpl/1.6.0 -#module load xmlparse/v2.0.0 -module load w3nco/2.2.0 -module load bacio/2.0.3 -module load gfsio/1.1.0 -#module load sigio/2.1.1 -module load ip/3.0.2 -module load sp/2.0.3 -module load crtm/2.3.0 -module load w3emc/2.4.0 - - diff --git a/modulefiles/upp/lib-jet b/modulefiles/upp/lib-jet deleted file mode 100755 index c9d9cb005..000000000 --- a/modulefiles/upp/lib-jet +++ /dev/null @@ -1,52 +0,0 @@ -#%Module###################################################################### -## Jun.Wang@noaa.gov: Started NCEPPOST lib v6.3.0 -## Wen.Meng@noaa.gov 10/2019: Upgraded to v8.0.0 -##_____________________________________________________ -proc ModulesHelp { } { -puts stderr "Set environment veriables for NCEPPOST" -puts stderr "This module initializes the enviro nment " -puts stderr "for the Intel Compiler Suite $version\n" -} -module-whatis " NCEPPOST lib whatis description" - -#set ver v6.3.0 -#set envir dev -#set NCEPLIB /nwprod/lib - -#set sys [uname sysname] - -#setenv COMPF_MP mpiifort -setenv myFC mpiifort -setenv myFCFLAGS "-O3 -convert big_endian -traceback -g -fp-model source -fpp" -setenv myCPP /lib/cpp -setenv myCPPFLAGS "-P" -setenv ARCHV ar -setenv CPPC /lib/cpp -setenv version v8.0.0 -# - -module purge - -# Loading Intel Compiler Suite -module load intel/18.0.5.274 -module load impi/2018.4.274 - -# Loading nceplibs modules -module use /mnt/lfs4/HFIP/hfv3gfs/nwprod/NCEPLIBS/modulefiles -module load jasper/v1.900.1 -module load png/v1.2.44 -module load z/v1.2.6 -module load g2/v3.1.0 -module load g2tmpl/v1.6.0 -#module load xmlparse/v2.0.0 - -module load w3emc/v2.4.0 -module load w3nco/v2.0.6 -module load bacio/v2.0.2 -module load gfsio/v1.1.0 -#module load sigio/2.1.1 -module load ip/v3.0.1 -module load sp/v2.0.2 -module load crtm/v2.3.0 - - diff --git a/modulefiles/upp/lib-orion b/modulefiles/upp/lib-orion deleted file mode 100755 index 7459163ba..000000000 --- a/modulefiles/upp/lib-orion +++ /dev/null @@ -1,53 +0,0 @@ -#%Module###################################################################### -## Jun.Wang@noaa.gov: Started NCEPPOST lib v6.3.0 -## Wen.Meng@noaa.gov 10/2019: Upgraded to v8.0.0 -##_____________________________________________________ -proc ModulesHelp { } { -puts stderr "Set environment veriables for NCEPPOST" -puts stderr "This module initializes the enviro nment " -puts stderr "for the Intel Compiler Suite $version\n" -} -module-whatis " NCEPPOST lib whatis description" - -#set ver v6.3.0 -#set envir dev -#set NCEPLIB /nwprod/lib - -#set sys [uname sysname] - -#setenv COMPF_MP mpiifort -setenv myFC mpiifort -setenv myFCFLAGS "-O3 -convert big_endian -traceback -g -fp-model source -fpp" -#setenv myFCFLAGS "-O3 -convert big_endian -traceback -g -fp-model source -qopenmp -fpp" -setenv myCPP /lib/cpp -setenv myCPPFLAGS "-P" -setenv ARCHV ar -setenv CPPC /lib/cpp -#setenv version v8.0.0 -# - -module purge - -# Loading Intel Compiler Suite -module load intel/2018.4 -module load impi/2018.4 - -# Loading nceplibs modules -module use -a /apps/contrib/NCEPLIBS/orion/modulefiles -module load jasper/1.900.2 -module load png/1.2.44 -module load z/1.2.6 - -module load g2/3.2.0 -module load g2tmpl/1.6.0 -#module load xmlparse/v2.0.0 -module load w3nco/2.2.0 -module load bacio/2.0.3 -module load gfsio/1.2.0 -#module load sigio/2.1.0 -module load ip/3.0.2 -module load sp/2.0.3 -module load crtm/2.3.0 -module load w3emc/2.4.0 - - diff --git a/modulefiles/upp/lib-wcoss b/modulefiles/upp/lib-wcoss deleted file mode 100755 index 7fa2710b6..000000000 --- a/modulefiles/upp/lib-wcoss +++ /dev/null @@ -1,54 +0,0 @@ -#%Module###################################################################### -## Jun.Wang@noaa.gov: Started NCEPPOST lib v6.3.0 -## Wen.Meng@noaa.gov 10/2019: Upgraded to v8.0.0 -##_____________________________________________________ -proc ModulesHelp { } { -puts stderr "Set environment veriables for NCEPPOST" -puts stderr "This module initializes the enviro nment " -puts stderr "for the Intel Compiler Suite $version\n" -} -module-whatis " NCEPPOST lib whatis description" - -#set ver v6.3.0 -#set envir dev -#set NCEPLIB /nwprod/lib - -#set sys [uname sysname] - -#setenv COMPF_MP mpiifort -setenv myFC mpiifort -setenv myFCFLAGS "-O3 -convert big_endian -traceback -g -fp-model source -qopenmp -fpp" -setenv myCPP /lib/cpp -setenv myCPPFLAGS "-P" -setenv ARCHV ar -setenv CPPC /lib/cpp -setenv version v8.0.0 -# - -module purge - -# Loading Intel Compiler Suite -module load ics/16.0.3 -module load ibmpe -#module load ics/15.0.3 -##module load ibmpe/1.3.0.12 -#module load prod_util/1.1.0 - -# Loading nceplibs modules -module load jasper/v1.900.1 -module load png/v1.2.44 -module load z/v1.2.6 -module load g2/v3.1.0 -module load g2tmpl/v1.5.0 -#module load xmlparse/v2.0.0 - -module load w3emc/v2.2.0 -module load w3nco/v2.0.6 -module load bacio/v2.0.1 -module load gfsio/v1.1.0 -#module load sigio/2.1.0 -module load ip/v3.0.1 -module load sp/v2.0.2 -module load crtm/v2.2.4 - - diff --git a/modulefiles/upp/lib-wcoss_dell_p3 b/modulefiles/upp/lib-wcoss_dell_p3 deleted file mode 100755 index 94eea42e4..000000000 --- a/modulefiles/upp/lib-wcoss_dell_p3 +++ /dev/null @@ -1,53 +0,0 @@ -#%Module###################################################################### -## Jun.Wang@noaa.gov: Started NCEPPOST lib v6.3.0 -## Wen.Meng@noaa.gov 10/2019: Upgraded to v8.0.0 -##_____________________________________________________ -proc ModulesHelp { } { -puts stderr "Set environment veriables for NCEPPOST" -puts stderr "This module initializes the enviro nment " -puts stderr "for the Intel Compiler Suite $version\n" -} -module-whatis " NCEPPOST lib whatis description" - -#set ver v6.3.0 -#set envir dev -#set NCEPLIB /nwprod/lib - -#set sys [uname sysname] - -#setenv COMPF_MP mpiifort -setenv myFC mpiifort -setenv myFCFLAGS "-O3 -convert big_endian -traceback -g -fp-model source -fpp" -#setenv myFCFLAGS "-O3 -convert big_endian -traceback -g -fp-model source -qopenmp -fpp" -setenv myCPP /lib/cpp -setenv myCPPFLAGS "-P" -setenv ARCHV ar -setenv CPPC /lib/cpp -#setenv version v8.0.0 -# - -module purge - -# Loading Intel Compiler Suite -module load ips/18.0.1.163 -module load impi/18.0.1 - -module load jasper/1.900.1 -module load libpng/1.2.59 -module load zlib/1.2.11 - - -# Loading nceplibs modules -module load g2/3.2.0 -module load g2tmpl/1.6.0 -#module load xmlparse/v2.0.0 -module load w3nco/2.2.0 -module load bacio/2.0.3 -module load gfsio/1.1.0 -#module load sigio/2.1.0 -module load ip/3.0.2 -module load sp/2.0.3 -module load crtm/2.3.0 -module load w3emc/2.4.0 - - diff --git a/modulefiles/wcoss2.lua b/modulefiles/wcoss2.lua new file mode 100644 index 000000000..ac3dc9dd8 --- /dev/null +++ b/modulefiles/wcoss2.lua @@ -0,0 +1,54 @@ +help([[ +Load environment to build post on WCOSS2 +]]) + +PrgEnv_intel_ver=os.getenv("PrgEnv_intel_ver") or "8.1.0" +intel_ver=os.getenv("intel_ver") or "19.1.3.304" +craype_ver=os.getenv("craype_ver") or "2.7.10" +cray_mpich_ver=os.getenv("cray_mpich_ver") or "8.1.9" +load(pathJoin("PrgEnv-intel", PrgEnv_intel_ver)) +load(pathJoin("intel", intel_ver)) +load(pathJoin("craype", craype_ver)) +load(pathJoin("cray-mpich", cray_mpich_ver)) + +hdf5_ver=os.getenv("hdf5_ver") or "1.10.6" +netcdf_ver=os.getenv("netcdf_ver") or "4.7.4" +load(pathJoin("hdf5", hdf5_ver)) +load(pathJoin("netcdf", netcdf_ver)) + +jasper_ver=os.getenv("jasper_ver") or "2.0.25" +libpng_ver=os.getenv("libpng_ver") or "1.6.37" +zlib_ver=os.getenv("zlib_ver") or "1.2.11" +load(pathJoin("jasper", jasper_ver)) +load(pathJoin("libpng", libpng_ver)) +load(pathJoin("zlib", zlib_ver)) + +g2_ver=os.getenv("g2_ver") or "3.4.5" +g2tmpl_ver=os.getenv("g2tmpl_ver") or "1.10.2" +bacio_ver=os.getenv("bacio_ver") or "2.4.1" +ip_ver=os.getenv("ip_ver") or "3.3.3" +sp_ver=os.getenv("sp_ver") or "2.3.3" +crtm_ver=os.getenv("crtm_ver") or "2.4.0" +w3emc_ver=os.getenv("w3emc_ver") or "2.9.2" +load(pathJoin("g2", g2_ver)) +load(pathJoin("g2tmpl", g2tmpl_ver)) +load(pathJoin("bacio", bacio_ver)) +load(pathJoin("ip", ip_ver)) +load(pathJoin("sp", sp_ver)) +load(pathJoin("crtm", crtm_ver)) +load(pathJoin("w3emc", w3emc_ver)) + +nemsio_ver=os.getenv("nemsio_ver") or "2.5.2" +sigio_ver=os.getenv("sigio_ver") or "2.3.2" +sfcio_ver=os.getenv("sfcio_ver") or "1.4.1" +wrf_io_ver=os.getenv("wrf_io_ver") or "1.2.0" +load(pathJoin("nemsio", nemsio_ver)) +load(pathJoin("sigio", sigio_ver)) +load(pathJoin("sfcio", sfcio_ver)) +load(pathJoin("wrf_io", wrf_io_ver)) + +setenv("CC","cc") +setenv("CXX","CC") +setenv("FC","ftn") + +whatis("Description: post build environment") diff --git a/modulefiles/wcoss2_a.lua b/modulefiles/wcoss2_a.lua new file mode 100644 index 000000000..91343ac99 --- /dev/null +++ b/modulefiles/wcoss2_a.lua @@ -0,0 +1,73 @@ +help([[ +Load environment to build post on WCOSS2 Acorn +]]) + +PrgEnv_intel_ver=os.getenv("PrgEnv_intel_ver") or "8.1.0" +load(pathJoin("PrgEnv-intel", PrgEnv_intel_ver)) + +intel_ver=os.getenv("intel_ver") or "19.1.3.304" +load(pathJoin("intel", intel_ver)) + +craype_ver=os.getenv("craype_ver") or "2.7.13" +load(pathJoin("craype", craype_ver)) + +cray_mpich_ver=os.getenv("cray_mpich_ver") or "8.1.7" +load(pathJoin("cray-mpich", cray_mpich_ver)) + +cmake_ver=os.getenv("cmake_ver") or "3.20.2" +load(pathJoin("cmake", cmake_ver)) + +prepend_path("MODULEPATH", "/lfs/h1/emc/nceplibs/noscrub/hpc-stack/libs/hpc-stack/modulefiles/stack") + +hpc_ver=os.getenv("hpc_ver") or "1.2.0" +hpc_intel_ver=os.getenv("hpc_intel_ver") or "19.1.3.304" +hpc_cray_mpich_ver=os.getenv("hpc_cray_mpich_ver") or "8.1.7" +load(pathJoin("hpc", hpc_ver)) +load(pathJoin("hpc-intel", hpc_intel_ver)) +load(pathJoin("hpc-cray-mpich", hpc_cray_mpich_ver)) + +hdf5_ver=os.getenv("hdf5_ver") or "1.10.6" +netcdf_ver=os.getenv("netcdf_ver") or "4.7.4" +load(pathJoin("hdf5", hdf5_ver)) +load(pathJoin("netcdf", netcdf_ver)) + +jasper_ver=os.getenv("jasper_ver") or "2.0.25" +libpng_ver=os.getenv("libpng_ver") or "1.6.37" +zlib_ver=os.getenv("zlib_ver") or "1.2.11" +load(pathJoin("jasper", jasper_ver)) +load(pathJoin("libpng", libpng_ver)) +load(pathJoin("zlib", zlib_ver)) + +g2_ver=os.getenv("g2_ver") or "3.4.5" +g2tmpl_ver=os.getenv("g2tmpl_ver") or "1.10.2" +bacio_ver=os.getenv("bacio_ver") or "2.4.1" +ip_ver=os.getenv("ip_ver") or "3.3.3" +sp_ver=os.getenv("sp_ver") or "2.3.3" +crtm_ver=os.getenv("crtm_ver") or "2.4.0" +w3emc_ver=os.getenv("w3emc_ver") or "2.9.2" +load(pathJoin("g2", g2_ver)) +load(pathJoin("g2tmpl", g2tmpl_ver)) +load(pathJoin("bacio", bacio_ver)) +load(pathJoin("ip", ip_ver)) +load(pathJoin("sp", sp_ver)) +load(pathJoin("crtm", crtm_ver)) +load(pathJoin("w3emc", w3emc_ver)) + +nemsio_ver=os.getenv("nemsio_ver") or "2.5.2" +sigio_ver=os.getenv("sigio_ver") or "2.3.2" +sfcio_ver=os.getenv("sfcio_ver") or "1.4.1" +wrf_io_ver=os.getenv("wrf_io_ver") or "1.2.0" +load(pathJoin("nemsio", nemsio_ver)) +load(pathJoin("sigio", sigio_ver)) +load(pathJoin("sfcio", sfcio_ver)) +load(pathJoin("wrf_io", wrf_io_ver)) + +setenv("CC","cc") +setenv("CXX","CC") +setenv("FC","ftn") + + +prepend_path("MODULEPATH", "/lfs/h1/oar/esrl/noscrub/samuel.trahan/ifi/modulefiles") +try_load("ifi/20221006-intel-" .. intel_ver) + +whatis("Description: post build environment") diff --git a/modulefiles/wcoss_cray b/modulefiles/wcoss_cray deleted file mode 100755 index 72457d598..000000000 --- a/modulefiles/wcoss_cray +++ /dev/null @@ -1,41 +0,0 @@ -#%Module###################################################################### -# Wen Meng 01/2021, Set up config. with the hpc-stack NCEPLIBS. -############################################################################## - -proc ModulesHelp { } { -puts stderr "Loads modules required for building upp" -} -module-whatis "Loads UPP prerequisites on WCOSS Luna and Surge" - -module load cmake/3.16.2 - -module use /usrx/local/nceplibs/NCEPLIBS/cmake/install/NCEPLIBS-v1.3.0/modules -module load PrgEnv-intel -module rm intel -module load intel/18.1.163 -module rm NetCDF-intel-sandybridge/4.2 -module load xt-lsfhpc/9.1.3 -module load craype-haswell - -module use /usrx/local/dev/modulefiles -module load HDF5-parallel-intel-sandybridge/1.10.6 -module load NetCDF-intel-sandybridge/4.7.4 - -module load jasper-gnu-sandybridge/1.900.1 -module load zlib-intel-sandybridge/1.2.7 -module load png-intel-sandybridge/1.2.49 -setenv PNG_ROOT /usrx/local/prod//png/1.2.49/intel/sandybridge - -module use /usrx/local/nceplibs/NCEPLIBS/cmake/install/NCEPLIBS-v1.3.0/modules -module load bacio/2.4.1 -module load crtm/2.3.0 -module load g2/3.4.1 -module load g2tmpl/1.10.0 -module load ip/3.3.3 -module load nemsio/2.5.2 -module load sfcio/1.4.1 -module load sigio/2.3.2 -module load sp/2.3.3 -module load w3nco/2.4.1 -module load w3emc/2.7.3 -module load wrf_io/1.1.1 diff --git a/modulefiles/wcoss_dell_p3 b/modulefiles/wcoss_dell_p3 deleted file mode 100755 index c6692ecfa..000000000 --- a/modulefiles/wcoss_dell_p3 +++ /dev/null @@ -1,35 +0,0 @@ -#%Module###################################################################### -# Wen Meng 01/2021, Set up config. with the hpc-stack NCEPLIBS. -############################################################################## - -proc ModulesHelp { } { -puts stderr "Loads modules required for building upp" -} -module-whatis "Loads UPP prerequisites on WCOSS Venus and Mars" - -module load cmake/3.16.2 - -module use /usrx/local/nceplibs/dev/hpc-stack/libs/hpc-stack/modulefiles/stack -module load hpc/1.1.0 -module load hpc-ips/18.0.1.163 -module load hpc-impi/18.0.1 - -module load jasper/2.0.22 -module load zlib/1.2.11 -module load png/1.6.35 - -module load hdf5/1.10.6 -module load netcdf/4.7.4 - -module load bacio/2.4.1 -module load crtm/2.3.0 -module load g2/3.4.1 -module load g2tmpl/1.10.0 -module load ip/3.3.3 -module load nemsio/2.5.2 -module load sfcio/1.4.1 -module load sigio/2.3.2 -module load sp/2.3.3 -module load w3nco/2.4.1 -module load w3emc/2.7.3 -module load wrf_io/1.1.1 diff --git a/parm/3drtma_postcntrl.xml b/parm/3drtma_postcntrl.xml index 7a2e66270..482525a26 100755 --- a/parm/3drtma_postcntrl.xml +++ b/parm/3drtma_postcntrl.xml @@ -633,7 +633,7 @@ - GSD_PRES_ON_CLOUD_BASE + GSD_EXP_CEILING 3.0 @@ -848,22 +848,22 @@ - EFSH_ON_LFC + EFSH_ON_EFBL -1.0 - EFSH_ON_EQUIL_LVL + EFSH_ON_EFTL -1.0 - ELMELT_ON_EQUIL_LVL + ELMELT_ON_EFTL -1.0 - UESH_ON_LFC + UESH_ON_EFL -1.0 @@ -873,7 +873,7 @@ - VESH_ON_LFC + VESH_ON_EFL -1.0 @@ -883,47 +883,47 @@ - ESHR_ON_LFC + ESHR_ON_EFL -1.0 - UEID_ON_LFC + UEID_ON_EFL -1.0 - VEID_ON_LFC + VEID_ON_EFL -1.0 - E3KH_ON_LFC + E3KH_ON_EFL -1.0 - STPC_ON_LFC + STPC_ON_EFL -1.0 - SIGT_ON_LFC + SIGT_ON_EFL -1.0 - SCCP_ON_LFC + SCCP_ON_EFL -1.0 - SIGH_ON_LFC + SIGH_ON_EFL -1.0 - MLFC_ON_LFC + MLFC_ON_EFL -1.0 diff --git a/parm/README.make_flatfile b/parm/README.make_flatfile new file mode 100644 index 000000000..9933405bb --- /dev/null +++ b/parm/README.make_flatfile @@ -0,0 +1,20 @@ +To make a .txt flat file for UPP, follow these steps within the parm/ directory: + +1) Select, then validate, the associated "post_avblflds" file, e.g., + + xmllint --noout --schema EMC_POST_Avblflds_Schema.xsd fv3lam_post_avblflds.xml + +2) Select, then validate, the associated "postcntrl" file, e.g., + + xmllint --noout --schema EMC_POST_CTRL_Schema.xsd fv3lam_rrfs.xml + +3) If file validation succeeds in steps (1) and (2), generate the .txt flat file, e.g., + + perl PostXMLPreprocessor.pl fv3lam_rrfs.xml fv3lam_post_avblflds.xml postxconfig-NT-fv3lam_rrfs.txt + + In this example, "fv3lam_rrfs.xml" and "fv3lam_post_avblflds.xml" are input files, read by the perl + script. The "postxconfig-NT-fv3lam_rrfs.txt" flat file is the output file produced by the script, which + can have any name. + + Note that a log file will be created by this script, in addition to the flat file. + diff --git a/parm/aqm.xml b/parm/aqm.xml new file mode 100644 index 000000000..63f5e7513 --- /dev/null +++ b/parm/aqm.xml @@ -0,0 +1,200 @@ + + + + + CMAQ + 32769 + ncep_nco + v2003 + local_tab_yes1 + fcst + oper + fcst + fcst + hour + nws_ncep + nmm_8km + complex_packing_spatial_diff + 2nd_ord_sptdiff + fltng_pnt + lossless + + + AVE_PM25TOT_ON_HYBRID_LVL + PMTF + NCEP + 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. +25. 26. 27. 28. 29. 30. 31. 32. 33. 34. 35. 36. 37. 38. 39. 40. 41. 42. 43. 44. 45. 46. 47. 48. +49. 50. 51. 52. 53. 54. 55. 56. 57. 58. 59. 60. 61. 62. 63. 64. + 7.0 + + + + AVE_OZCON_ON_HYBRID_LVL + OZCON + NCEP + 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. +25. 26. 27. 28. 29. 30. 31. 32. 33. 34. 35. 36. 37. 38. 39. 40. 41. 42. 43. 44. 45. 46. 47. 48. +49. 50. 51. 52. 53. 54. 55. 56. 57. 58. 59. 60. 61. 62. 63. 64. + 7.0 + + + + TMP_ON_HYBRID_LVL + TMP + 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. +25. 26. 27. 28. 29. 30. 31. 32. 33. 34. 35. 36. 37. 38. 39. 40. 41. 42. 43. 44. 45. 46. 47. 48. +49. 50. 51. 52. 53. 54. 55. 56. 57. 58. 59. 60. 61. 62. 63. 64. + 4.0 + + + + SPFH_ON_HYBRID_LVL + SPFH + 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. +25. 26. 27. 28. 29. 30. 31. 32. 33. 34. 35. 36. 37. 38. 39. 40. 41. 42. 43. 44. 45. 46. 47. 48. +49. 50. 51. 52. 53. 54. 55. 56. 57. 58. 59. 60. 61. 62. 63. 64. + 7.0 + + + + UGRD_ON_HYBRID_LVL + UGRD + 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. +25. 26. 27. 28. 29. 30. 31. 32. 33. 34. 35. 36. 37. 38. 39. 40. 41. 42. 43. 44. 45. 46. 47. 48. +49. 50. 51. 52. 53. 54. 55. 56. 57. 58. 59. 60. 61. 62. 63. 64. + 4.0 + + + + VGRD_ON_HYBRID_LVL + VGRD + 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. +25. 26. 27. 28. 29. 30. 31. 32. 33. 34. 35. 36. 37. 38. 39. 40. 41. 42. 43. 44. 45. 46. 47. 48. +49. 50. 51. 52. 53. 54. 55. 56. 57. 58. 59. 60. 61. 62. 63. 64. + 4.0 + + + + DZDT_ON_HYBRID_LVL + DZDT + 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. +25. 26. 27. 28. 29. 30. 31. 32. 33. 34. 35. 36. 37. 38. 39. 40. 41. 42. 43. 44. 45. 46. 47. 48. +49. 50. 51. 52. 53. 54. 55. 56. 57. 58. 59. 60. 61. 62. 63. 64. + 4.0 + + + + TCDC_ON_HYBRID_LVL + TCDC + 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. +25. 26. 27. 28. 29. 30. 31. 32. 33. 34. 35. 36. 37. 38. 39. 40. 41. 42. 43. 44. 45. 46. 47. 48. +49. 50. 51. 52. 53. 54. 55. 56. 57. 58. 59. 60. 61. 62. 63. 64. + 3.0 + + + + TMP_ON_SPEC_HGT_LVL_ABOVE_GRND_2m + TMP + 4.0 + + + + SPFH_ON_SPEC_HGT_LVL_ABOVE_GRND_2m + SPFH + 4.0 + + + + DPT_ON_SPEC_HGT_LVL_ABOVE_GRND_2m + DPT + 4.0 + + + + RH_ON_SPEC_HGT_LVL_ABOVE_GRND_2m + RH + 3.0 + + + + UGRD_ON_SPEC_HGT_LVL_ABOVE_GRND_10m + UGRD + 10. + 4.0 + + + + VGRD_ON_SPEC_HGT_LVL_ABOVE_GRND_10m + VGRD + 10. + 4.0 + + + + PBLREG_ON_SURFACE + PBLREG + 2.0 + + + + TMP_ON_ISOBARIC_SFC + 50000. 70000. 85000. 92500. 100000. + -4.0 + + + + DPT_ON_ISOBARIC_SFC + 50000. 70000. 85000. 92500. 100000. + -4.0 + + + + HGT_ON_ISOBARIC_SFC + 50000. 70000. 85000. 100000. + -5.0 + + + + UGRD_ON_ISOBARIC_SFC + 25000. 30000. 50000. 70000. 85000. 92500. 100000. + -4.0 + + + + VGRD_ON_ISOBARIC_SFC + 25000. 30000. 50000. 70000. 85000. 92500. 100000. + -4.0 + + + + CAPE_ON_SURFACE + 3.0 + + + + BEST_CAPE_ON_SPEC_PRES_ABOVE_GRND + 18000. + 0. + 3.0 + + + + MIXED_LAYER_CAPE_ON_SPEC_PRES_ABOVE_GRND + 9000. + 0. + 3.0 + + + + AER_OPT_AQM_at550 + + + + HPBL_ON_SURFACE + NCEP + 6.0 + + + + diff --git a/parm/fv3lam.xml b/parm/fv3lam.xml index 4537c8fb2..f0287bfa5 100755 --- a/parm/fv3lam.xml +++ b/parm/fv3lam.xml @@ -740,6 +740,36 @@ -4.0 + + ACM_GRAUPEL_ON_SURFACE + 6.0 + + + + BUCKET_GRAUPEL_ON_SURFACE + 6.0 + + + + ACM_FRAIN_ON_SURFACE + 6.0 + + + + BUCKET_FRAIN_ON_SURFACE + 6.0 + + + + ACM_SNOWFALL_ON_SURFACE + 6.0 + + + + BUCKET_SNOWFALL_ON_SURFACE + 6.0 + + ACM_NCPCP_ON_SURFACE NCPCP @@ -1598,14 +1628,6 @@ 5.0 - - TMP_ON_SIGMA_LVL_HPC - TMP - 4 - 9000. 8500. 8000. 7500. 7000. - -4.0 - - PBLREG_ON_SURFACE PBLREG @@ -1711,7 +1733,7 @@ - MAX_MAXUVV_ON_SPEC_PRES_LVL_ABOVE_GRND_100-1000hpa + MAX_MAXUVV_ON_ISOBARIC_SFC_100-1000hpa MAXUVV NCEP isobaric_sfc @@ -1720,7 +1742,7 @@ - MAX_MAXDVV_ON_SPEC_PRES_LVL_ABOVE_GRND_100-1000hpa + MAX_MAXDVV_ON_ISOBARIC_SFC_100-1000hpa MAXDVV NCEP isobaric_sfc @@ -2082,7 +2104,7 @@ - MAX_MAXUVV_ON_SPEC_PRES_LVL_ABOVE_GRND_100-1000hpa + MAX_MAXUVV_ON_ISOBARIC_SFC_100-1000hpa MAXUVV NCEP isobaric_sfc @@ -2091,7 +2113,7 @@ - MAX_MAXDVV_ON_SPEC_PRES_LVL_ABOVE_GRND_100-1000hpa + MAX_MAXDVV_ON_ISOBARIC_SFC_100-1000hpa MAXDVV NCEP isobaric_sfc @@ -3382,5 +3404,11 @@ 3.0 + + SDEN_ON_SURFACE + SDEN + 6.0 + + diff --git a/parm/fv3lam_cmaq.xml b/parm/fv3lam_cmaq.xml deleted file mode 100644 index 4ef8bd0e9..000000000 --- a/parm/fv3lam_cmaq.xml +++ /dev/null @@ -1,53 +0,0 @@ - - - - - CMAQ - 32769 - ncep_nco - v2003 - local_tab_yes1 - fcst - oper - fcst - fcst - hour - nws_ncep - nmm_8km - complex_packing_spatial_diff - 2nd_ord_sptdiff - fltng_pnt - lossless - - - PM25TOT_ON_HYBRID_LVL - PMTF - NCEP - 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. -25. 26. 27. 28. 29. 30. 31. 32. 33. 34. 35. 36. 37. 38. 39. 40. 41. 42. 43. 44. 45. 46. 47. 48. -49. 50. 51. 52. 53. 54. 55. 56. 57. 58. 59. 60. 61. 62. 63. 64. - 7.0 - - - - O3MR_ON_HYBRID_LVL - O3MR - NCEP - 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. -25. 26. 27. 28. 29. 30. 31. 32. 33. 34. 35. 36. 37. 38. 39. 40. 41. 42. 43. 44. 45. 46. 47. 48. -49. 50. 51. 52. 53. 54. 55. 56. 57. 58. 59. 60. 61. 62. 63. 64. - 7.0 - - - - OZCON_ON_HYBRID_LVL - OZCON - NCEP - 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. -25. 26. 27. 28. 29. 30. 31. 32. 33. 34. 35. 36. 37. 38. 39. 40. 41. 42. 43. 44. 45. 46. 47. 48. -49. 50. 51. 52. 53. 54. 55. 56. 57. 58. 59. 60. 61. 62. 63. 64. - 7.0 - - - - diff --git a/parm/fv3lam_post_avblflds.xml b/parm/fv3lam_post_avblflds.xml index 4f9b7b4ab..ff331dbc0 100644 --- a/parm/fv3lam_post_avblflds.xml +++ b/parm/fv3lam_post_avblflds.xml @@ -5678,6 +5678,52 @@ 4.0 + + 1007 + ICE_PROB_IFI_FLIGHT_LEVEL + ICPRB + NCEP + spec_alt_above_mean_sea_lvl + 4.0 + + 1 + 5000. 10000. 15000. 20000. 25000. 30000. 35000. 40000. 45000. 50000. 55000. 60000. 65000. 70000. 75000. 80000. 85000. 90000. 95000. 100000. 105000. 110000. 115000. 120000. 125000. 130000. 135000. 140000. 145000. 150000. 155000. 160000. 165000. 170000. 175000. 180000. 185000. 190000. 195000. 200000. 205000. 210000. 215000. 220000. 225000. 230000. 235000. 240000. 245000. 250000. 255000. 260000. 265000. 270000. 275000. 280000. 285000. 290000. 295000. 300000. + + + + 1008 + SLD_IFI_FLIGHT_LEVEL + SIPD + NCEP + spec_alt_above_mean_sea_lvl + 4.0 + + 1 + 5000. 10000. 15000. 20000. 25000. 30000. 35000. 40000. 45000. 50000. 55000. 60000. 65000. 70000. 75000. 80000. 85000. 90000. 95000. 100000. 105000. 110000. 115000. 120000. 125000. 130000. 135000. 140000. 145000. 150000. 155000. 160000. 165000. 170000. 175000. 180000. 185000. 190000. 195000. 200000. 205000. 210000. 215000. 220000. 225000. 230000. 235000. 240000. 245000. 250000. 255000. 260000. 265000. 270000. 275000. 280000. 285000. 290000. 295000. 300000. + + + + 1009 + ICE_SEV_CAT_IFI_FLIGHT_LEVEL + ICSEV + NCEP + spec_alt_above_mean_sea_lvl + 4.0 + + 1 + 5000. 10000. 15000. 20000. 25000. 30000. 35000. 40000. 45000. 50000. 55000. 60000. 65000. 70000. 75000. 80000. 85000. 90000. 95000. 100000. 105000. 110000. 115000. 120000. 125000. 130000. 135000. 140000. 145000. 150000. 155000. 160000. 165000. 170000. 175000. 180000. 185000. 190000. 195000. 200000. 205000. 210000. 215000. 220000. 225000. 230000. 235000. 240000. 245000. 250000. 255000. 260000. 265000. 270000. 275000. 280000. 285000. 290000. 295000. 300000. + + + + 1010 + WMO_ICE_SEV_CAT_IFI_FLIGHT_LEVEL + ICESEV + spec_alt_above_mean_sea_lvl + 4.0 + + 1 + 5000. 10000. 15000. 20000. 25000. 30000. 35000. 40000. 45000. 50000. 55000. 60000. 65000. 70000. 75000. 80000. 85000. 90000. 95000. 100000. 105000. 110000. 115000. 120000. 125000. 130000. 135000. 140000. 145000. 150000. 155000. 160000. 165000. 170000. 175000. 180000. 185000. 190000. 195000. 200000. 205000. 210000. 215000. 220000. 225000. 230000. 235000. 240000. 245000. 250000. 255000. 260000. 265000. 270000. 275000. 280000. 285000. 290000. 295000. 300000. + diff --git a/parm/fv3lam_rrfs.xml b/parm/fv3lam_rrfs.xml new file mode 100755 index 000000000..dc09f31f9 --- /dev/null +++ b/parm/fv3lam_rrfs.xml @@ -0,0 +1,3675 @@ + + + + + PRSLEV + 32769 + ncep_nco + v2003 + local_tab_yes1 + fcst + oper + fcst + fcst + hour + nws_ncep + rrfs + complex_packing_spatial_diff + 2nd_ord_sptdiff + fltng_pnt + lossless + + + PRES_ON_HYBRID_LVL + PRES + 1. 2. + 6.0 + + + + HGT_ON_HYBRID_LVL + HGT + 1. 2. + 4.0 + + + + TMP_ON_HYBRID_LVL + TMP + 1. 2. + 4.0 + + + + POT_ON_HYBRID_LVL + POT + 1. 2. + 4.0 + + + + DPT_ON_HYBRID_LVL + DPT + 1. 2. + 5.0 + + + + SPFH_ON_HYBRID_LVL + SPFH + 1. + 7.0 + + + + RH_ON_HYBRID_LVL + RH + 1. + 4.0 + + + + UGRD_ON_HYBRID_LVL + UGRD + 1. 2. + 4.0 + + + + VGRD_ON_HYBRID_LVL + VGRD + 1. 2. + 4.0 + + + + VVEL_ON_HYBRID_LVL + VVEL + 1. + 5.0 + + + + DZDT_ON_HYBRID_LVL + DZDT + 1. + -5.0 + + + + TKE_ON_HYBRID_LVL + TKE + 1. 2. + 3.0 + + + + RWMR_ON_HYBRID_LVL + RWMR + 1. 2. + 3.0 + + + + SNMR_ON_HYBRID_LVL + SNMR + 1. 2. + 3.0 + + + + RIME_ON_HYBRID_LVL + RIME + NCEP + 1. 2. + 3.0 + + + + TCOND_ON_HYBRID_LVL + TCOND + NCEP + 1. 2. + 3.0 + + + + REFD_ON_HYBRID_LVL + REFD + NCEP + 1. 2. + 4.0 + + + + BMIXL_ON_HYBRID_LVL + BMIXL + NCEP + 1. + 3.0 + + + + HGT_ON_ISOBARIC_SFC + HGT + 200. 500. 700. 1000. 2000. 3000. 5000. 7000. 7500. 10000. 12500. 15000. 17500. 20000. 22500. 25000. 27500. 30000. 32500. 35000. 37500. 40000. 42500. 45000. +47500. 50000. 52500. 55000. 57500. 60000. 62500. 65000. 67500. 70000. 72500. 75000. 77500. 80000. 82500. 85000. 87500. 90000. 92500. 95000. 97500. 100000. + 6.0 + + + + TMP_ON_ISOBARIC_SFC + TMP + 200. 500. 700. 1000. 2000. 3000. 5000. 7000. 7500. 10000. 12500. 15000. 17500. 20000. 22500. 25000. 27500. 30000. 32500. 35000. 37500. 40000. 42500. 45000. +47500. 50000. 52500. 55000. 57500. 60000. 62500. 65000. 67500. 70000. 72500. 75000. 77500. 80000. 82500. 85000. 87500. 90000. 92500. 95000. 97500. 100000. + 3.0 + + + + DPT_ON_ISOBARIC_SFC + DPT + 200. 500. 700. 1000. 2000. 3000. 5000. 7000. 7500. 10000. 12500. 15000. 17500. 20000. 22500. 25000. 27500. 30000. 32500. 35000. 37500. 40000. 42500. 45000. +47500. 50000. 52500. 55000. 57500. 60000. 62500. 65000. 67500. 70000. 72500. 75000. 77500. 80000. 82500. 85000. 87500. 90000. 92500. 95000. 97500. 100000. + 5.0 + + + + SPFH_ON_ISOBARIC_SFC + SPFH + 200. 500. 700. 1000. 2000. 3000. 5000. 7000. 7500. 10000. 12500. 15000. 17500. 20000. 22500. 25000. 27500. 30000. 32500. 35000. 37500. 40000. 42500. 45000. +47500. 50000. 52500. 55000. 57500. 60000. 62500. 65000. 67500. 70000. 72500. 75000. 77500. 80000. 82500. 85000. 87500. 90000. 92500. 95000. 97500. 100000. + 4.0 + + + + RH_ON_ISOBARIC_SFC + RH + 200. 500. 700. 1000. 2000. 3000. 5000. 7000. 7500. 10000. 12500. 15000. 17500. 20000. 22500. 25000. 27500. 30000. 32500. 35000. 37500. 40000. 42500. 45000. +47500. 50000. 52500. 55000. 57500. 60000. 62500. 65000. 67500. 70000. 72500. 75000. 77500. 80000. 82500. 85000. 87500. 90000. 92500. 95000. 97500. 100000. + 2.0 + + + + UGRD_ON_ISOBARIC_SFC + UGRD + 200. 500. 700. 1000. 2000. 3000. 5000. 7000. 7500. 10000. 12500. 15000. 17500. 20000. 22500. 25000. 27500. 30000. 32500. 35000. 37500. 40000. 42500. 45000. +47500. 50000. 52500. 55000. 57500. 60000. 62500. 65000. 67500. 70000. 72500. 75000. 77500. 80000. 82500. 85000. 87500. 90000. 92500. 95000. 97500. 100000. + 4.0 + + + + VGRD_ON_ISOBARIC_SFC + VGRD + 200. 500. 700. 1000. 2000. 3000. 5000. 7000. 7500. 10000. 12500. 15000. 17500. 20000. 22500. 25000. 27500. 30000. 32500. 35000. 37500. 40000. 42500. 45000. +47500. 50000. 52500. 55000. 57500. 60000. 62500. 65000. 67500. 70000. 72500. 75000. 77500. 80000. 82500. 85000. 87500. 90000. 92500. 95000. 97500. 100000. + 4.0 + + + + VVEL_ON_ISOBARIC_SFC + VVEL + 200. 500. 700. 1000. 2000. 3000. 5000. 7000. 7500. 10000. 12500. 15000. 17500. 20000. 22500. 25000. 27500. 30000. 32500. 35000. 37500. 40000. 42500. 45000. +47500. 50000. 52500. 55000. 57500. 60000. 62500. 65000. 67500. 70000. 72500. 75000. 77500. 80000. 82500. 85000. 87500. 90000. 92500. 95000. 97500. 100000. + 5.0 + + + + DZDT_ON_ISOBARIC_SFC + DZDT + 200. 500. 700. 1000. 2000. 3000. 5000. 7000. 7500. 10000. 12500. 15000. 17500. 20000. 22500. 25000. 27500. 30000. 32500. 35000. 37500. 40000. 42500. 45000. +47500. 50000. 52500. 55000. 57500. 60000. 62500. 65000. 67500. 70000. 72500. 75000. 77500. 80000. 82500. 85000. 87500. 90000. 92500. 95000. 97500. 100000. + -5.0 + + + + ABSV_ON_ISOBARIC_SFC + ABSV + 20000. 25000. 30000. 40000. 50000. 70000. 75000. 85000. 92500. 100000. + 4.0 + + + + STRM_ON_ISOBARIC_SFC + STRM + 25000. 50000. + 3.0 + + + + ICMR_ON_ISOBARIC_SFC + ICMR + 200. 500. 700. 1000. 2000. 3000. 5000. 7000. 7500. 10000. 12500. 15000. 17500. 20000. 22500. 25000. 27500. 30000. 32500. 35000. 37500. 40000. 42500. 45000. +47500. 50000. 52500. 55000. 57500. 60000. 62500. 65000. 67500. 70000. 72500. 75000. 77500. 80000. 82500. 85000. 87500. 90000. 92500. 95000. 97500. 100000. + 6.0 + + + + CLMR_ON_ISOBARIC_SFC + CLMR + 200. 500. 700. 1000. 2000. 3000. 5000. 7000. 7500. 10000. 12500. 15000. 17500. 20000. 22500. 25000. 27500. 30000. 32500. 35000. 37500. 40000. 42500. 45000. +47500. 50000. 52500. 55000. 57500. 60000. 62500. 65000. 67500. 70000. 72500. 75000. 77500. 80000. 82500. 85000. 87500. 90000. 92500. 95000. 97500. 100000. + 4.0 + + + + RWMR_ON_ISOBARIC_SFC + RWMR + 200. 500. 700. 1000. 2000. 3000. 5000. 7000. 7500. 10000. 12500. 15000. 17500. 20000. 22500. 25000. 27500. 30000. 32500. 35000. 37500. 40000. 42500. 45000. +47500. 50000. 52500. 55000. 57500. 60000. 62500. 65000. 67500. 70000. 72500. 75000. 77500. 80000. 82500. 85000. 87500. 90000. 92500. 95000. 97500. 100000. + 3.0 + + + + GRLE_ON_ISOBARIC_SFC + GRLE + 200. 500. 700. 1000. 2000. 3000. 5000. 7000. 7500. 10000. 12500. 15000. 17500. 20000. 22500. 25000. 27500. 30000. 32500. 35000. 37500. 40000. 42500. 45000. +47500. 50000. 52500. 55000. 57500. 60000. 62500. 65000. 67500. 70000. 72500. 75000. 77500. 80000. 82500. 85000. 87500. 90000. 92500. 95000. 97500. 100000. + 3.0 + + + + SNMR_ON_ISOBARIC_SFC + SNMR + 200. 500. 700. 1000. 2000. 3000. 5000. 7000. 7500. 10000. 12500. 15000. 17500. 20000. 22500. 25000. 27500. 30000. 32500. 35000. 37500. 40000. 42500. 45000. +47500. 50000. 52500. 55000. 57500. 60000. 62500. 65000. 67500. 70000. 72500. 75000. 77500. 80000. 82500. 85000. 87500. 90000. 92500. 95000. 97500. 100000. + 3.0 + + + + MSLET_ON_MEAN_SEA_LVL + MSLET + NCEP + 6.0 + + + + TMP_ON_SPEC_HGT_LVL_ABOVE_GRND_2m + TMP + 4.0 + + + + SPFH_ON_SPEC_HGT_LVL_ABOVE_GRND_2m + SPFH + 4.0 + + + + DPT_ON_SPEC_HGT_LVL_ABOVE_GRND_2m + DPT + 4.0 + + + + RH_ON_SPEC_HGT_LVL_ABOVE_GRND_2m + RH + 3.0 + + + + UGRD_ON_SPEC_HGT_LVL_ABOVE_GRND_10m + UGRD + 10. + 4.0 + + + + VGRD_ON_SPEC_HGT_LVL_ABOVE_GRND_10m + VGRD + 10. + 4.0 + + + + GUST_ON_SURFACE + GUST + 3.0 + + + + PLPL_ON_SPEC_PRES_ABOVE_GRND + PLPL + NCEP + 25500. + 0. + 6.0 + + + + POT_ON_SPEC_HGT_LVL_ABOVE_GRND_10m + POT + 10. + 5.0 + + + + SPFH_ON_SPEC_HGT_LVL_ABOVE_GRND_10m + SPFH + 10. + 3.0 + + + + PRES_ON_SURFACE + PRES + 6.0 + + + + HGT_ON_SURFACE + HGT + 6.0 + + + + POT_ON_SURFACE + POT + 5.0 + + + + SPFH_ON_SURFACE + SPFH + 3.0 + + + + TMP_ON_SURFACE + TMP + 4.0 + + + + TSOIL_ON_DEPTH_BEL_LAND_SFC + TSOIL + 2 + 0. 1. 4. 10. 30. 60. 100. 160. 300. + 2 + 0. 1. 4. 10. 30. 60. 100. 160. 300. + 4.0 + + + + SOILW_ON_DEPTH_BEL_LAND_SFC + SOILW + 2 + 0. 1. 4. 10. 30. 60. 100. 160. 300. + 2 + 0. 1. 4. 10. 30. 60. 100. 160. 300. + 3.0 + + + + CNWAT_ON_SURFACE + CNWAT + NCEP + 1.0 + + + + WEASD_ON_SURFACE + WEASD + 4.0 + + + + SNOWC_ON_SURFACE + SNOWC + NCEP + 3.0 + + + + SFEXC_ON_SURFACE + SFEXC + NCEP + 3.0 + + + + VEG_ON_SURFACE + VEG + 3.0 + + + + VGTYP_ON_SURFACE + VGTYP + NCEP + 3.0 + + + + SOTYP_ON_SURFACE + SOTYP + 3.0 + + + + SNFALB_ON_SURFACE + SNFALB + NCEP + 3.0 + + + + MXSALB_ON_SURFACE + MXSALB + NCEP + 3.0 + + + + CCOND_ON_SURFACE + CCOND + NCEP + 3.0 + + + + RCS_ON_SURFACE + RCS + NCEP + 3.0 + + + + RCT_ON_SURFACE + RCT + NCEP + 5.0 + + + + RCQ_ON_SURFACE + RCQ + NCEP + 3.0 + + + + RCSOL_ON_SURFACE + RCSOL + NCEP + 3.0 + + + + SMREF_ON_SURFACE + SMREF + NCEP + 3.0 + + + + POROS_ON_SURFACE + POROS + NCEP + 3.0 + + + + RLYRS_ON_SURFACE + RLYRS + NCEP + 3.0 + + + + RSMIN_ON_SURFACE + RSMIN + NCEP + 3.0 + + + + SNOD_ON_SURFACE + SNOD + 6.0 + + + + GSD_ACM_SNOD_ON_SURFACE + 5.0 + + + + SMDRY_ON_SURFACE + SMDRY + NCEP + 3.0 + + + + WILT_ON_SURFACE + WILT + NCEP + 3.0 + + + + MSTAV_ON_DEPTH_BEL_LAND_SFC + MSTAV + NCEP + 2 + 0. + 2 + 100. + 3.0 + + + + INST_GFLUX_ON_SURFACE + GFLUX + NCEP + 3.0 + + + + LFTX_ON_ISOBARIC_SFC_500-1000hpa + LFTX + NCEP + 50000. + 100000. + 3.0 + + + + 4LFTX_ON_SPEC_PRES_ABOVE_GRND + 4LFTX + NCEP + 18000. + 0. + 3.0 + + + + PLI_ON_SPEC_PRES_ABOVE_GRND + PLI + 3000. + 0. + 3.0 + + + + CAPE_ON_SURFACE + CAPE + 4.0 + + + + BEST_CAPE_ON_SPEC_PRES_ABOVE_GRND + CAPE + 18000. + 0. + 4.0 + + + + MIXED_LAYER_CAPE_ON_SPEC_PRES_ABOVE_GRND + CAPE + 9000. + 0. + 4.0 + + + + UNSTABLE_CAPE_ON_SPEC_PRES_ABOVE_GRND + CAPE + 25500. + 0. + 4.0 + + + + CIN_ON_SURFACE + CIN + 4.0 + + + + BEST_CIN_ON_SPEC_PRES_ABOVE_GRND + CIN + 18000. + 0. + 4.0 + + + + MIXED_LAYER_CIN_ON_SPEC_PRES_ABOVE_GRND + CIN + 9000. + 0. + 4.0 + + + + UNSTABLE_CIN_ON_SPEC_PRES_ABOVE_GRND + CIN + 25500. + 0. + 4.0 + + + + PWAT_ON_ENTIRE_ATMOS_SINGLE_LYR + PWAT + 3.0 + + + + HLCY_ON_SPEC_HGT_LVL_ABOVE_GRND + HLCY + 3000. 1000. + 4.0 + + + + USTM_ON_SPEC_HGT_LVL_ABOVE_GRND + USTM + NCEP + 6000. + 4.0 + + + + VSTM_ON_SPEC_HGT_LVL_ABOVE_GRND + VSTM + NCEP + 6000. + 4.0 + + + + ACM_APCP_ON_SURFACE + APCP + -4.0 + + + + ACM_GRAUPEL_ON_SURFACE + 6.0 + + + + BUCKET_GRAUPEL_ON_SURFACE + 6.0 + + + + ACM_FRAIN_ON_SURFACE + 6.0 + + + + BUCKET_FRAIN_ON_SURFACE + 6.0 + + + + ACM_SNOWFALL_ON_SURFACE + 6.0 + + + + BUCKET_SNOWFALL_ON_SURFACE + 6.0 + + + + ACM_NCPCP_ON_SURFACE + NCPCP + -4.0 + + + + CACM_APCP_ON_SURFACE + APCP + -4.0 + + + + CACM_NCPCP_ON_SURFACE + NCPCP + -4.0 + + + + ACM_WEASD_ON_SURFACE + WEASD + 4.0 + + + + ACM_SNOM_ON_SURFACE + SNOM + 4.0 + + + + ACM_SSRUN_ON_SURFACE + SSRUN + NCEP + 6.0 + + + + ACM_BGRUN_ON_SURFACE + BGRUN + NCEP + 6.0 + + + + ACM_WATR_ON_SURFACE + WATR + 6.0 + + + + INST_CRAIN_ON_SURFACE + CRAIN + NCEP + 1.0 + + + + CSNOW_ON_SURFACE + CSNOW + NCEP + 1.0 + + + + CICEP_ON_SURFACE + CICEP + NCEP + 1.0 + + + + CFRZR_ON_SURFACE + CFRZR + NCEP + 1.0 + + + + INST_PRATE_ON_SURFACE + PRATE + 3.0 + + + + CPOFP_ON_SURFACE + CPOFP + NCEP + 4.0 + + + + CLMR_ON_HYBRID_LVL + CLMR + 1. 2. + 3.0 + + + + ICMR_ON_HYBRID_LVL + ICMR + 1. 2. + 3.0 + + + + GRLE_ON_HYBRID_LVL + GRLE + 1. 2. + 3.0 + + + + TCDC_ON_HYBRID_LVL + TCDC + 1. 2. + 3.0 + + + + LCDC_ON_LOW_CLOUD_LYR + LCDC + 3.0 + + + + MCDC_ON_MID_CLOUD_LYR + MCDC + 3.0 + + + + HCDC_ON_HIGH_CLOUD_LYR + HCDC + 3.0 + + + + INST_TCDC_ON_ENTIRE_ATMOS + TCDC + 3.0 + + + + AVE_TCDC_ON_ENTIRE_ATMOS + TCDC + 3.0 + + + + AVE_CDLYR_ON_ENTIRE_ATMOS + CDLYR + NCEP + 3.0 + + + + GSD_VIS_ON_SURFACE + VIS + 6.0 + + + + HGT_ON_LVL_OF_ADIAB_COND_FROM_SFC + HGT + 5.0 + + + + PRES_ON_LVL_OF_ADIAB_COND_FROM_SFC + PRES + 6.0 + + + + INST_USWRF_ON_SURFACE + USWRF + NCEP + 4.0 + + + + INST_ULWRF_ON_SURFACE + ULWRF + NCEP + 4.0 + + + + AVE_DSWRF_ON_SURFACE + DSWRF + NCEP + 3.0 + + + + AVE_DLWRF_ON_SURFACE + DLWRF + NCEP + 3.0 + + + + AVE_USWRF_ON_SURFACE + USWRF + NCEP + 3.0 + + + + AVE_ULWRF_ON_SURFACE + ULWRF + NCEP + 3.0 + + + + AVE_USWRF_ON_TOP_OF_ATMOS + USWRF + NCEP + 3.0 + + + + AVE_ULWRF_ON_TOP_OF_ATMOS + ULWRF + NCEP + 3.0 + + + + INST_ULWRF_ON_TOP_OF_ATMOS + ULWRF + NCEP + 4.0 + + + + BRTMP_ON_TOP_OF_ATMOS + BRTMP + 3.0 + + + + INST_DSWRF_ON_SURFACE + DSWRF + NCEP + 4.0 + + + + INST_DLWRF_ON_SURFACE + DLWRF + NCEP + 4.0 + + + + INST_CSDSF_ON_SURFACE + CSDSF + NCEP + 4.0 + + + + SFCR_ON_SURFACE + SFCR + 2.7 + + + + FRICV_ON_SURFACE + FRICV + NCEP + 4.0 + + + + CD_ON_SURFACE + CD + NCEP + 3.0 + + + + UFLX_ON_SURFACE + UFLX + 3.0 + + + + VFLX_ON_SURFACE + VFLX + 3.0 + + + + AVE_SHTFL_ON_SURFACE + SHTFL + 4.0 + + + + AVE_GFLUX_ON_SURFACE + GFLUX + NCEP + 4.0 + + + + AVE_SNOHF_ON_SURFACE + SNOHF + NCEP + 4.0 + + + + AVE_LHTFL_ON_SURFACE + LHTFL + 4.0 + + + + ACM_EVP_ON_SURFACE + EVP + 4.0 + + + + ACM_PEVAP_ON_SURFACE + PEVAP + NCEP + 4.0 + + + + INST_SHTFL_ON_SURFACE + SHTFL + 4.0 + + + + INST_LHTFL_ON_SURFACE + LHTFL + 4.0 + + + + NLAT_ON_SURFACE + NLAT + NCEP + 4.0 + + + + ELON_ON_SURFACE + ELON + NCEP + 4.0 + + + + LAND_ON_SURFACE + LAND + 1.0 + + + + ICEC_ON_SURFACE + ICEC + 3.0 + + + + ALBDO_ON_SURFACE + ALBDO + 3.0 + + + + WTMP_ON_SURFACE + WTMP + 5.0 + + + + PRES_ON_TROPOPAUSE + PRES + 6.0 + + + + HGT_ON_TROPOPAUSE + HGT + 6.0 + + + + TMP_ON_TROPOPAUSE + TMP + 3.0 + + + + POT_ON_TROPOPAUSE + POT + 5.0 + + + + UGRD_ON_TROPOPAUSE + UGRD + 4.0 + + + + VGRD_ON_TROPOPAUSE + VGRD + 4.0 + + + + VWSH_ON_TROPOPAUSE + VWSH + NCEP + 3.0 + + + + VUCSH_ON_SPEC_HGT_LVL_ABOVE_GRND_0-6km + VUCSH + 3.0 + + + + VVCSH_ON_SPEC_HGT_LVL_ABOVE_GRND_0-6km + VVCSH + 3.0 + + + + TMP_ON_SPEC_ALT_ABOVE_MEAN_SEA_LVL + TMP + 305. 457. 610. 914. 1524. 1829. 2134. 2743. 3658. 4572. + 3.0 + + + + TMP_ON_SPEC_HGT_LVL_ABOVE_GRND_FDHGT + TMP + 30. 50. 80. 100. + 3.0 + + + + UGRD_ON_SPEC_ALT_ABOVE_MEAN_SEA_LVL + UGRD + 305. 457. 610. 914. 1524. 1829. 2134. 2743. 3658. 4572. + 4.0 + + + + UGRD_ON_SPEC_HGT_LVL_ABOVE_GRND_FDHGT + UGRD + 30. 50. 80. 100. + 4.0 + + + + VGRD_ON_SPEC_ALT_ABOVE_MEAN_SEA_LVL + VGRD + 305. 457. 610. 914. 1524. 1829. 2134. 2743. 3658. 4572. + 4.0 + + + + VGRD_ON_SPEC_HGT_LVL_ABOVE_GRND_FDHGT + VGRD + 30. 50. 80. 100. + 4.0 + + + + SPFH_ON_SPEC_ALT_ABOVE_MEAN_SEA_LVL + SPFH + 305. + 5.0 + + + + SPFH_ON_SPEC_HGT_LVL_ABOVE_GRND_FDHGT + SPFH + 30. 50. 80. 100. + 5.0 + + + + PRES_ON_SPEC_HGT_LVL_ABOVE_GRND_FDHGT + PRES + 30. 50. 80. 100. + 3.0 + + + + HGT_ON_0C_ISOTHERM + HGT + 6.0 + + + + RH_ON_0C_ISOTHERM + RH + 2.0 + + + + HGT_ON_HGHST_TROP_FRZ_LVL + HGT + 6.0 + + + + HGT_ON_LWST_LVL_OF_WET_BULB_ZERO + HGT + -5.0 + + + + PRES_ON_SPEC_PRES_ABOVE_GRND + PRES + 3000. 6000. 9000. 12000. 15000. 18000. + 0. 3000. 6000. 9000. 12000. 15000. + 6.0 + + + + TMP_ON_SPEC_PRES_ABOVE_GRND + TMP + 3000. 6000. 9000. 12000. 15000. 18000. + 0. 3000. 6000. 9000. 12000. 15000. + 3.0 + + + + POT_ON_SPEC_PRES_ABOVE_GRND + POT + 3000. + 0. + 4.0 + + + + DPT_ON_SPEC_PRES_ABOVE_GRND + DPT + 3000. + 0. + 3.0 + + + + SPFH_ON_SPEC_PRES_ABOVE_GRND + SPFH + 3000. 6000. 9000. 12000. 15000. 18000. + 0. 3000. 6000. 9000. 12000. 15000. + 5.0 + + + + RH_ON_SPEC_PRES_ABOVE_GRND + RH + 3000. 6000. 9000. 12000. 15000. 18000. + 0. 3000. 6000. 9000. 12000. 15000. + 2.0 + + + + PWAT_ON_SPEC_PRES_ABOVE_GRND + PWAT + 3000. + 0. + 3.0 + + + + UGRD_ON_SPEC_PRES_ABOVE_GRND + UGRD + 3000. 6000. 9000. 12000. 15000. 18000. + 0. 3000. 6000. 9000. 12000. 15000. + 4.0 + + + + VGRD_ON_SPEC_PRES_ABOVE_GRND + VGRD + 3000. 6000. 9000. 12000. 15000. 18000. + 0. 3000. 6000. 9000. 12000. 15000. + 4.0 + + + + VVEL_ON_SPEC_PRES_ABOVE_GRND + VVEL + 3000. 9000. 18000. + 0. 6000. 15000. + 5.0 + + + + PRES_ON_CLOUD_BASE + PRES + 6.0 + + + + PRES_ON_CLOUD_TOP + PRES + 6.0 + + + + TMP_ON_CLOUD_TOP + TMP + 5.0 + + + + HGT_ON_CLOUD_BASE + HGT + 6.0 + + + + HGT_ON_CLOUD_TOP + HGT + 6.0 + + + + TMP_ON_CLOUD_TOP + TMP + 5.0 + + + + PRES_ON_MAX_WIND + PRES + 6.0 + + + + HGT_ON_MAX_WIND + HGT + 6.0 + + + + UGRD_ON_MAX_WIND + UGRD + 4.0 + + + + VGRD_ON_MAX_WIND + VGRD + 4.0 + + + + REFC_ON_ENTIRE_ATMOS + REFC + NCEP + 4.0 + + + + REFZR_ON_ENTIRE_ATMOS + REFZR + NCEP + -4.0 + + + + REFZI_ON_ENTIRE_ATMOS + REFZI + NCEP + -4.0 + + + + REFD_ON_SPEC_HGT_LVL_ABOVE_GRND + REFD + NCEP + 4000. 1000. + 4.0 + + + + REFZR_ON_SPEC_HGT_LVL_ABOVE_GRND + REFZR + NCEP + 4000. 1000. + -4.0 + + + + REFZI_ON_SPEC_HGT_LVL_ABOVE_GRND + REFZI + NCEP + 4000. 1000. + -4.0 + + + + HPBL_ON_SURFACE + HPBL + NCEP + 6.0 + + + + PRES_ON_GRID_SCALE_CLOUD_BOT_LVL + PRES + 6.0 + + + + PRES_ON_GRID_SCALE_CLOUD_TOP_LVL + PRES + 6.0 + + + + TCOLW_ON_ENTIRE_ATMOS + TCOLW + NCEP + 5.0 + + + + TCOLI_ON_ENTIRE_ATMOS + TCOLI + NCEP + 5.0 + + + + EFSH_ON_EFBL + -1.0 + + + + EFSH_ON_EFTL + -1.0 + + + + ELMELT_ON_EFTL + -1.0 + + + + UESH_ON_EFL + -1.0 + + + + VESH_ON_EFL + -1.0 + + + + ESHR_ON_EFL + -1.0 + + + + UEID_ON_EFL + -1.0 + + + + VEID_ON_EFL + -1.0 + + + + E3KH_ON_EFL + -1.0 + + + + STPC_ON_EFL + -1.0 + + + + SIGT_ON_EFL + -1.0 + + + + SCCP_ON_EFL + -1.0 + + + + SIGH_ON_EFL + -1.0 + + + + MLFC_ON_EFL + -1.0 + + + + TCOLR_ON_ENTIRE_ATMOS + TCOLR + NCEP + 5.0 + + + + TCOLS_ON_ENTIRE_ATMOS + TCOLS + NCEP + 5.0 + + + + TCOLC_ON_ENTIRE_ATMOS + TCOLC + NCEP + 5.0 + + + + TCOLG_ON_ENTIRE_ATMOS + TCOLG + 5.0 + + + + TCLSW_ON_ENTIRE_ATMOS + TCLSW + NCEP + 5.0 + + + + TCOLM_ON_ENTIRE_ATMOS + TCOLM + NCEP + 5.0 + + + + HGT_ON_LWST_BOT_LVL_OF_SUPERCOOLED_LIQ_WATER_LYR + HGT + 6.0 + + + + HGT_ON_HGHST_TOP_LVL_OF_SUPERCOOLED_LIQ_WATER_LYR + HGT + 5.0 + + + + GSD_HGT_ON_CLOUD_CEILING + HGT + -3.0 + + + + GSD_EXP_CEILING + CEIL + -3.0 + + + + GSD_EXP_CEILING_2 + CEIL + -3.0 + + + + ACM_LSPA_ON_SURFACE + LSPA + NCEP + 3.0 + + + + PRES_ON_TOP_OF_ATMOS + PRES + 3.0 + + + + SWHR_ON_ENTIRE_ATMOS + SWHR + NCEP + 5.0 + + + + LWHR_ON_ENTIRE_ATMOS + LWHR + NCEP + 5.0 + + + + AVE_LRGHR_ON_ENTIRE_ATMOS + LRGHR + NCEP + 5.0 + + + + TMP_ON_SIGMA_LVL_HPC + TMP + 4 + 9000. 8500. 8000. 7500. 7000. + -4.0 + + + + PBLREG_ON_SURFACE + PBLREG + 2.0 + + + + UGRD_ON_PLANETARY_BOUND_LYR + UGRD + -4.0 + + + + VGRD_ON_PLANETARY_BOUND_LYR + VGRD + -4.0 + + + + HGT_ON_PLANETARY_BOUND_LYR + HGT + -4.0 + + + + MIXHT_ON_SURFACE + MIXHT + -4.0 + + + + RETOP_ON_ENTIRE_ATMOS_SINGLE_LYR + RETOP + NCEP + 6.0 + + + + VRATE_ON_PLANETARY_BOUND_LYR + VRATE + NCEP + 3.0 + + + + HINDEX_ON_SURFACE + HINDEX + 3.0 + + + + MAX_TMAX_ON_SPEC_HGT_LVL_ABOVE_GRND_2m + TMAX + 4.0 + + + + MIN_TMIN_ON_SPEC_HGT_LVL_ABOVE_GRND_2m + TMIN + 4.0 + + + + MAX_MAXRH_ON_SPEC_HGT_LVL_ABOVE_GRND_2m + MAXRH + -2.0 + + + + MIN_MINRH_ON_SPEC_HGT_LVL_ABOVE_GRND_2m + MINRH + NCEP + -2.0 + + + + MAX_MAXUW_ON_SPEC_HGT_LVL_ABOVE_GRND_10m + MAXUW + NCEP + 10. + -4.0 + + + + MAX_MAXVW_ON_SPEC_HGT_LVL_ABOVE_GRND_10m + MAXVW + NCEP + 10. + -4.0 + + + + MAX_WIND_ON_SPEC_HGT_LVL_ABOVE_GRND_10m + WIND + -4.0 + + + + MAX_REF_ON_SPEC_HGT_LVL_ABOVE_GRND_1km + MAXREF + NCEP + -3.0 + + + + MAX_MAXUVV_ON_ISOBARIC_SFC_100-1000hpa + MAXUVV + NCEP + -3.0 + + + + MAX_MAXDVV_ON_ISOBARIC_SFC_100-1000hpa + MAXDVV + NCEP + -3.0 + + + + MAX_PRATE_ON_SURFACE + PRATE + 4.0 + + + + MAX_SRWEQ_ON_SURFACE + SRWEQ + 4.0 + + + + LTNG_ON_SURFACE + LTNG + NCEP + 1.0 + + + + VIL_ON_ENTIRE_ATMOS + VIL + 7.0 + + + + UPHL_ON_SPEC_HGT_LVL_ABOVE_GRND_2-5km + UPHL + NCEP + -3.0 + + + + MAX_UPHL_ON_SPEC_HGT_LVL_ABOVE_GRND_2-5km + MXUPHL + NCEP + -3.0 + + + + GSD_MIN_UPHL_ON_SPEC_HGT_LVL_ABOVE_GRND_2-5km + MNUPHL + NCEP + -3.0 + + + + GSD_MIN_UPHL_ON_SPEC_HGT_LVL_ABOVE_GRND_0-3km + MNUPHL + NCEP + -3.0 + + + + GSD_MAX_UPHL_ON_SPEC_HGT_LVL_ABOVE_GRND_0-3km + MXUPHL + NCEP + -3.0 + + + + GSD_MAX_REL_VORT_ON_SPEC_HGT_LVL_ABOVE_GRND_0-1km + 5.0 + + + + GSD_MAX_REL_VORT_ON_SPEC_HGT_LVL_HYBRID1 + 5.0 + + + + GSD_MAX_REL_VORT_ON_SPEC_HGT_LVL_ABOVE_GRND_0-2km + 5.0 + + + + MAX_REF_ON_ISOTHERMAL_-10C + MAXREF + NCEP + -3.0 + + + + REFD_ON_ISOTHERMAL + REFD + NCEP + isothermal + 263. + -4.0 + + + + 1H_FFG_EXCEEDANCE + 5.0 + + + + ACM_FFG_EXCEEDANCE + 5.0 + + + + 1H_2YARI_EXCEEDANCE + 5.0 + + + + ACM_2YARI_EXCEEDANCE + 5.0 + + + + 1H_5YARI_EXCEEDANCE + 5.0 + + + + ACM_5YARI_EXCEEDANCE + 5.0 + + + 1H_10YARI_EXCEEDANCE + 5.0 + + + + ACM_10YARI_EXCEEDANCE + 5.0 + + + 1H_100YARI_EXCEEDANCE + 5.0 + + + + ACM_100YARI_EXCEEDANCE + 5.0 + + + + BIOMASS_BURNING_EMISSIONS + 5.0 + + + + SMOKE_ON_SPEC_HGT_LVL_ABOVE_GRND_8m + 6.0 + + + + SMOKE_ON_ENTIRE_ATMOS_SINGLE_LYR + 5.0 + + + + DUST_ON_SPEC_HGT_LVL_ABOVE_GRND_8m + 6.0 + + + + DUST_ON_ENTIRE_ATMOS_SINGLE_LYR + 5.0 + + + + AOD_ON_ENTIRE_ATMOS_SINGLE_LYR + 5.0 + + + + HWP_ON_SURFACE + FWINX + 5.0 + + + + + + NATLEV + 32769 + ncep_nco + v2003 + local_tab_yes1 + fcst + oper + fcst + fcst + hour + nws_ncep + rrfs + complex_packing_spatial_diff + 2nd_ord_sptdiff + fltng_pnt + lossless + + + HGT_ON_ISOBARIC_SFC + HGT + 25000. 50000. 70000. 85000. + 6.0 + + + + TMP_ON_ISOBARIC_SFC + TMP + 25000. 50000. 70000. 85000. 95000. + 3.0 + + + + RH_ON_ISOBARIC_SFC + RH + 25000. 50000. 70000. 85000. + 2.0 + + + + UGRD_ON_ISOBARIC_SFC + UGRD + 25000. 50000. 70000. 85000. + 4.0 + + + + VGRD_ON_ISOBARIC_SFC + VGRD + 25000. 50000. 70000. 85000. + 4.0 + + + + VVEL_ON_ISOBARIC_SFC + VVEL + 25000. 50000. 70000. 85000. + 5.0 + + + + SPFH_ON_ISOBARIC_SFC + SPFH + 25000. 50000. 70000. 85000. + 4.0 + + + + ABSV_ON_ISOBARIC_SFC + ABSV + 25000. 50000. 70000. 85000. + 4.0 + + + + PRES_ON_HYBRID_LVL + PRES + 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. +25. 26. 27. 28. 29. 30. 31. 32. 33. 34. 35. 36. 37. 38. 39. 40. 41. 42. 43. 44. 45. 46. 47. 48. +49. 50. 51. 52. 53. 54. 55. 56. 57. 58. 59. 60. 61. 62. 63. 64. 65. + 6.0 + + + + HGT_ON_HYBRID_LVL + HGT + 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. +25. 26. 27. 28. 29. 30. 31. 32. 33. 34. 35. 36. 37. 38. 39. 40. 41. 42. 43. 44. 45. 46. 47. 48. +49. 50. 51. 52. 53. 54. 55. 56. 57. 58. 59. 60. 61. 62. 63. 64. 65. + 4.0 + + + + TMP_ON_HYBRID_LVL + TMP + 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. +25. 26. 27. 28. 29. 30. 31. 32. 33. 34. 35. 36. 37. 38. 39. 40. 41. 42. 43. 44. 45. 46. 47. 48. +49. 50. 51. 52. 53. 54. 55. 56. 57. 58. 59. 60. 61. 62. 63. 64. 65. + 4.0 + + + + SPFH_ON_HYBRID_LVL + SPFH + 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. +25. 26. 27. 28. 29. 30. 31. 32. 33. 34. 35. 36. 37. 38. 39. 40. 41. 42. 43. 44. 45. 46. 47. 48. +49. 50. 51. 52. 53. 54. 55. 56. 57. 58. 59. 60. 61. 62. 63. 64. 65. + 7.0 + + + + UGRD_ON_HYBRID_LVL + UGRD + 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. +25. 26. 27. 28. 29. 30. 31. 32. 33. 34. 35. 36. 37. 38. 39. 40. 41. 42. 43. 44. 45. 46. 47. 48. +49. 50. 51. 52. 53. 54. 55. 56. 57. 58. 59. 60. 61. 62. 63. 64. 65. + 4.0 + + + + VGRD_ON_HYBRID_LVL + VGRD + 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. +25. 26. 27. 28. 29. 30. 31. 32. 33. 34. 35. 36. 37. 38. 39. 40. 41. 42. 43. 44. 45. 46. 47. 48. +49. 50. 51. 52. 53. 54. 55. 56. 57. 58. 59. 60. 61. 62. 63. 64. 65. + 4.0 + + + + VVEL_ON_HYBRID_LVL + VVEL + 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. +25. 26. 27. 28. 29. 30. 31. 32. 33. 34. 35. 36. 37. 38. 39. 40. 41. 42. 43. 44. 45. 46. 47. 48. +49. 50. 51. 52. 53. 54. 55. 56. 57. 58. 59. 60. 61. 62. 63. 64. 65. + 5.0 + + + + DZDT_ON_HYBRID_LVL + DZDT + 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. +25. 26. 27. 28. 29. 30. 31. 32. 33. 34. 35. 36. 37. 38. 39. 40. 41. 42. 43. 44. 45. 46. 47. 48. +49. 50. 51. 52. 53. 54. 55. 56. 57. 58. 59. 60. 61. 62. 63. 64. 65. + -5.0 + + + + TKE_ON_HYBRID_LVL + TKE + 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. +25. 26. 27. 28. 29. 30. 31. 32. 33. 34. 35. 36. 37. 38. 39. 40. 41. 42. 43. 44. 45. 46. 47. 48. +49. 50. 51. 52. 53. 54. 55. 56. 57. 58. 59. 60. 61. 62. 63. 64. 65. + 3.0 + + + + MSLET_ON_MEAN_SEA_LVL + MSLET + NCEP + 6.0 + + + + TMP_ON_SPEC_HGT_LVL_ABOVE_GRND_2m + TMP + 4.0 + + + + SPFH_ON_SPEC_HGT_LVL_ABOVE_GRND_2m + SPFH + 4.0 + + + + DPT_ON_SPEC_HGT_LVL_ABOVE_GRND_2m + DPT + 4.0 + + + + RH_ON_SPEC_HGT_LVL_ABOVE_GRND_2m + RH + 3.0 + + + + UGRD_ON_SPEC_HGT_LVL_ABOVE_GRND_10m + UGRD + 10. + 4.0 + + + + VGRD_ON_SPEC_HGT_LVL_ABOVE_GRND_10m + VGRD + 10. + 4.0 + + + + POT_ON_SPEC_HGT_LVL_ABOVE_GRND_10m + POT + 10. + 5.0 + + + + SPFH_ON_SPEC_HGT_LVL_ABOVE_GRND_10m + SPFH + 10. + 3.0 + + + + PRES_ON_SURFACE + PRES + 6.0 + + + + HGT_ON_SURFACE + HGT + 6.0 + + + + POT_ON_SURFACE + POT + 5.0 + + + + SPFH_ON_SURFACE + SPFH + 3.0 + + + + TMP_ON_SURFACE + TMP + 4.0 + + + + MAX_MAXUVV_ON_ISOBARIC_SFC_100-1000hpa + MAXUVV + NCEP + -3.0 + + + + MAX_MAXDVV_ON_ISOBARIC_SFC_100-1000hpa + MAXDVV + NCEP + -3.0 + + + + GSD_MAX_UPHL_ON_SPEC_HGT_LVL_ABOVE_GRND_0-3km + MXUPHL + NCEP + -3.0 + + + + MAX_UPHL_ON_SPEC_HGT_LVL_ABOVE_GRND_2-5km + MXUPHL + NCEP + -3.0 + + + + GSD_MIN_UPHL_ON_SPEC_HGT_LVL_ABOVE_GRND_2-5km + MNUPHL + NCEP + -3.0 + + + + GSD_MIN_UPHL_ON_SPEC_HGT_LVL_ABOVE_GRND_0-3km + MNUPHL + NCEP + -3.0 + + + + GSD_MAX_REL_VORT_ON_SPEC_HGT_LVL_ABOVE_GRND_0-1km + 5.0 + + + + GSD_MAX_REL_VORT_ON_SPEC_HGT_LVL_HYBRID1 + 5.0 + + + + GSD_MAX_REL_VORT_ON_SPEC_HGT_LVL_ABOVE_GRND_0-2km + 5.0 + + + + MAX_MAXUW_ON_SPEC_HGT_LVL_ABOVE_GRND_10m + MAXUW + NCEP + 10. + -4.0 + + + + MAX_MAXVW_ON_SPEC_HGT_LVL_ABOVE_GRND_10m + MAXVW + NCEP + 10. + -4.0 + + + + MAX_REF_ON_SPEC_HGT_LVL_ABOVE_GRND_1km + MAXREF + NCEP + -3.0 + + + + MAX_REF_ON_ISOTHERMAL_-10C + MAXREF + NCEP + -3.0 + + + + REFD_ON_ISOTHERMAL + REFD + NCEP + isothermal + 263. + -4.0 + + + + MAX_TMAX_ON_SPEC_HGT_LVL_ABOVE_GRND_2m + TMAX + 4.0 + + + + MIN_TMIN_ON_SPEC_HGT_LVL_ABOVE_GRND_2m + TMIN + 4.0 + + + + MAX_MAXRH_ON_SPEC_HGT_LVL_ABOVE_GRND_2m + MAXRH + -2.0 + + + + MIN_MINRH_ON_SPEC_HGT_LVL_ABOVE_GRND_2m + MINRH + NCEP + -2.0 + + + + TSOIL_ON_DEPTH_BEL_LAND_SFC + TSOIL + 2 + 0. 1. 4. 10. 30. 60. 100. 160. 300. + 2 + 0. 1. 4. 10. 30. 60. 100. 160. 300. + 4.0 + + + + SOILW_ON_DEPTH_BEL_LAND_SFC + SOILW + 2 + 0. 1. 4. 10. 30. 60. 100. 160. 300. + 2 + 0. 1. 4. 10. 30. 60. 100. 160. 300. + 3.0 + + + + SFEXC_ON_SURFACE + SFEXC + NCEP + 3.0 + + + + VEG_ON_SURFACE + VEG + 3.0 + + + + MSTAV_ON_DEPTH_BEL_LAND_SFC + MSTAV + NCEP + 2 + 0. + 2 + 100. + 3.0 + + + + INST_GFLUX_ON_SURFACE + GFLUX + NCEP + 3.0 + + + + CNWAT_ON_SURFACE + CNWAT + NCEP + 1.0 + + + + WEASD_ON_SURFACE + WEASD + 4.0 + + + + 4LFTX_ON_SPEC_PRES_ABOVE_GRND + 4LFTX + NCEP + 18000. + 0. + 3.0 + + + + PWAT_ON_ENTIRE_ATMOS_SINGLE_LYR + PWAT + 3.0 + + + + ACM_APCP_ON_SURFACE + APCP + -4.0 + + + + ACM_NCPCP_ON_SURFACE + NCPCP + -4.0 + + + + CACM_APCP_ON_SURFACE + APCP + -4.0 + + + + CACM_NCPCP_ON_SURFACE + NCPCP + -4.0 + + + + ACM_WEASD_ON_SURFACE + WEASD + 4.0 + + + + ACM_SNOM_ON_SURFACE + SNOM + 4.0 + + + + ACM_SSRUN_ON_SURFACE + SSRUN + NCEP + 4.0 + + + + ACM_BGRUN_ON_SURFACE + BGRUN + NCEP + 4.0 + + + + INST_CRAIN_ON_SURFACE + CRAIN + NCEP + 1.0 + + + + CSNOW_ON_SURFACE + CSNOW + NCEP + 1.0 + + + + CICEP_ON_SURFACE + CICEP + NCEP + 1.0 + + + + CFRZR_ON_SURFACE + CFRZR + NCEP + 1.0 + + + + INST_PRATE_ON_SURFACE + PRATE + 3.0 + + + + CPOFP_ON_SURFACE + CPOFP + NCEP + 4.0 + + + + CLMR_ON_HYBRID_LVL + CLMR + 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. +25. 26. 27. 28. 29. 30. 31. 32. 33. 34. 35. 36. 37. 38. 39. 40. 41. 42. 43. 44. 45. 46. 47. 48. +49. 50. 51. 52. 53. 54. 55. 56. 57. 58. 59. 60. 61. 62. 63. 64. 65. + 3.0 + + + + ICMR_ON_HYBRID_LVL + ICMR + 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. +25. 26. 27. 28. 29. 30. 31. 32. 33. 34. 35. 36. 37. 38. 39. 40. 41. 42. 43. 44. 45. 46. 47. 48. +49. 50. 51. 52. 53. 54. 55. 56. 57. 58. 59. 60. 61. 62. 63. 64. 65. + 3.0 + + + + GRLE_ON_HYBRID_LVL + GRLE + 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. +25. 26. 27. 28. 29. 30. 31. 32. 33. 34. 35. 36. 37. 38. 39. 40. 41. 42. 43. 44. 45. 46. 47. 48. +49. 50. 51. 52. 53. 54. 55. 56. 57. 58. 59. 60. 61. 62. 63. 64. 65. + 3.0 + + + + TCDC_ON_HYBRID_LVL + TCDC + 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. +25. 26. 27. 28. 29. 30. 31. 32. 33. 34. 35. 36. 37. 38. 39. 40. 41. 42. 43. 44. 45. 46. 47. 48. +49. 50. 51. 52. 53. 54. 55. 56. 57. 58. 59. 60. 61. 62. 63. 64. 65. + 3.0 + + + + RWMR_ON_HYBRID_LVL + RWMR + 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. +25. 26. 27. 28. 29. 30. 31. 32. 33. 34. 35. 36. 37. 38. 39. 40. 41. 42. 43. 44. 45. 46. 47. 48. +49. 50. 51. 52. 53. 54. 55. 56. 57. 58. 59. 60. 61. 62. 63. 64. 65. + 3.0 + + + + SNMR_ON_HYBRID_LVL + SNMR + 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. +25. 26. 27. 28. 29. 30. 31. 32. 33. 34. 35. 36. 37. 38. 39. 40. 41. 42. 43. 44. 45. 46. 47. 48. +49. 50. 51. 52. 53. 54. 55. 56. 57. 58. 59. 60. 61. 62. 63. 64. 65. + 3.0 + + + + GSD_NCWFA_ON_HYBRID_LVL + PMTF + NCEP + 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. +25. 26. 27. 28. 29. 30. 31. 32. 33. 34. 35. 36. 37. 38. 39. 40. 41. 42. 43. 44. 45. 46. 47. 48. +49. 50. 51. 52. 53. 54. 55. 56. 57. 58. 59. 60. 61. 62. 63. 64. 65. + 3.0 + + + + GSD_NCIFA_ON_HYBRID_LVL + PMTC + NCEP + 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. +25. 26. 27. 28. 29. 30. 31. 32. 33. 34. 35. 36. 37. 38. 39. 40. 41. 42. 43. 44. 45. 46. 47. 48. +49. 50. 51. 52. 53. 54. 55. 56. 57. 58. 59. 60. 61. 62. 63. 64. 65. + 3.0 + + + + SMOKE_ON_HYBRID_LVL + 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. +25. 26. 27. 28. 29. 30. 31. 32. 33. 34. 35. 36. 37. 38. 39. 40. 41. 42. 43. 44. 45. 46. 47. 48. +49. 50. 51. 52. 53. 54. 55. 56. 57. 58. 59. 60. 61. 62. 63. 64. 65. + 6.0 + + + + DUST_ON_HYBRID_LVL + 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. +25. 26. 27. 28. 29. 30. 31. 32. 33. 34. 35. 36. 37. 38. 39. 40. 41. 42. 43. 44. 45. 46. 47. 48. +49. 50. 51. 52. 53. 54. 55. 56. 57. 58. 59. 60. 61. 62. 63. 64. 65. + 6.0 + + + + LCDC_ON_LOW_CLOUD_LYR + LCDC + 3.0 + + + + MCDC_ON_MID_CLOUD_LYR + MCDC + 3.0 + + + + HCDC_ON_HIGH_CLOUD_LYR + HCDC + 3.0 + + + + INST_TCDC_ON_ENTIRE_ATMOS + TCDC + 3.0 + + + + AVE_TCDC_ON_ENTIRE_ATMOS + TCDC + 3.0 + + + + AVE_CDLYR_ON_ENTIRE_ATMOS + CDLYR + NCEP + 3.0 + + + + INST_USWRF_ON_SURFACE + USWRF + NCEP + 4.0 + + + + INST_ULWRF_ON_SURFACE + ULWRF + NCEP + 4.0 + + + + AVE_DSWRF_ON_SURFACE + DSWRF + NCEP + 3.0 + + + + AVE_DLWRF_ON_SURFACE + DLWRF + NCEP + 3.0 + + + + AVE_USWRF_ON_SURFACE + USWRF + NCEP + 3.0 + + + + AVE_ULWRF_ON_SURFACE + ULWRF + NCEP + 3.0 + + + + AVE_USWRF_ON_TOP_OF_ATMOS + USWRF + NCEP + 3.0 + + + + AVE_ULWRF_ON_TOP_OF_ATMOS + ULWRF + NCEP + 3.0 + + + + INST_DSWRF_ON_SURFACE + DSWRF + NCEP + 4.0 + + + + INST_DLWRF_ON_SURFACE + DLWRF + NCEP + 4.0 + + + + INST_CSDSF_ON_SURFACE + CSDSF + NCEP + 4.0 + + + + SFCR_ON_SURFACE + SFCR + 2.7 + + + + FRICV_ON_SURFACE + FRICV + NCEP + 4.0 + + + + CD_ON_SURFACE + CD + NCEP + 3.0 + + + + UFLX_ON_SURFACE + UFLX + 3.0 + + + + VFLX_ON_SURFACE + VFLX + 3.0 + + + + AVE_SHTFL_ON_SURFACE + SHTFL + 4.0 + + + + AVE_GFLUX_ON_SURFACE + GFLUX + NCEP + 4.0 + + + + AVE_SNOHF_ON_SURFACE + SNOHF + NCEP + 4.0 + + + + AVE_LHTFL_ON_SURFACE + LHTFL + 4.0 + + + + ACM_EVP_ON_SURFACE + EVP + 4.0 + + + + ACM_PEVAP_ON_SURFACE + PEVAP + NCEP + 4.0 + + + + INST_SHTFL_ON_SURFACE + SHTFL + 4.0 + + + + INST_LHTFL_ON_SURFACE + LHTFL + 4.0 + + + + NLAT_ON_SURFACE + NLAT + NCEP + 4.0 + + + + ELON_ON_SURFACE + ELON + NCEP + 4.0 + + + + LAND_ON_SURFACE + LAND + 1.0 + + + + ICEC_ON_SURFACE + ICEC + 3.0 + + + + LMH_ON_SURFACE + LMH + NCEP + 2.0 + + + + LMV_ON_SURFACE + LMV + NCEP + 2.0 + + + + ALBDO_ON_SURFACE + ALBDO + 3.0 + + + + WTMP_ON_SURFACE + WTMP + 5.0 + + + + PRES_ON_SPEC_PRES_ABOVE_GRND + PRES + 3000. 6000. 9000. 12000. 15000. 18000. + 0. 3000. 6000. 9000. 12000. 15000. + 6.0 + + + + TMP_ON_SPEC_PRES_ABOVE_GRND + TMP + 3000. 6000. 9000. 12000. 15000. 18000. + 0. 3000. 6000. 9000. 12000. 15000. + 3.0 + + + + POT_ON_SPEC_PRES_ABOVE_GRND + POT + 3000. + 0. + 4.0 + + + + DPT_ON_SPEC_PRES_ABOVE_GRND + DPT + 3000. + 0. + 3.0 + + + + SPFH_ON_SPEC_PRES_ABOVE_GRND + SPFH + 3000. 6000. 9000. 12000. 15000. 18000. + 0. 3000. 6000. 9000. 12000. 15000. + 5.0 + + + + RH_ON_SPEC_PRES_ABOVE_GRND + RH + 3000. 6000. 9000. 12000. 15000. 18000. + 0. 3000. 6000. 9000. 12000. 15000. + 2.0 + + + + PWAT_ON_SPEC_PRES_ABOVE_GRND + PWAT + 3000. + 0. + 3.0 + + + + UGRD_ON_SPEC_PRES_ABOVE_GRND + UGRD + 3000. 6000. 9000. 12000. 15000. 18000. + 0. 3000. 6000. 9000. 12000. 15000. + 4.0 + + + + VGRD_ON_SPEC_PRES_ABOVE_GRND + VGRD + 3000. 6000. 9000. 12000. 15000. 18000. + 0. 3000. 6000. 9000. 12000. 15000. + 4.0 + + + + ACM_LSPA_ON_SURFACE + LSPA + NCEP + 3.0 + + + + PRES_ON_TOP_OF_ATMOS + PRES + 3.0 + + + + PRES_ON_HYBRID_LVL_1L + PRES + 1. + 21. + 3.0 + + + + PRES_ON_HYBRID_LVL_LLM + PRES + 1. + 61. + 3.0 + + + + CNWAT_ON_SURFACE + CNWAT + NCEP + 1.0 + + + + INST_GFLUX_ON_SURFACE + GFLUX + NCEP + 3.0 + + + + LFTX_ON_ISOBARIC_SFC_500-1000hpa + LFTX + NCEP + 50000. + 100000. + 3.0 + + + + CAPE_ON_SURFACE + CAPE + 4.0 + + + + BEST_CAPE_ON_SPEC_PRES_ABOVE_GRND + CAPE + 18000. + 0. + 4.0 + + + + MIXED_LAYER_CAPE_ON_SPEC_PRES_ABOVE_GRND + CAPE + 9000. + 0. + 4.0 + + + + UNSTABLE_CAPE_ON_SPEC_PRES_ABOVE_GRND + CAPE + 25500. + 0. + 4.0 + + + + CIN_ON_SURFACE + CIN + 4.0 + + + + BEST_CIN_ON_SPEC_PRES_ABOVE_GRND + CIN + 18000. + 0. + 4.0 + + + + MIXED_LAYER_CIN_ON_SPEC_PRES_ABOVE_GRND + CIN + 9000. + 0. + 4.0 + + + + UNSTABLE_CIN_ON_SPEC_PRES_ABOVE_GRND + CIN + 25500. + 0. + 4.0 + + + + PLPL_ON_SPEC_PRES_ABOVE_GRND + PLPL + NCEP + 25500. + 0. + 6.0 + + + + HLCY_ON_SPEC_HGT_LVL_ABOVE_GRND + HLCY + 3000. 1000. + 4.0 + + + + USTM_ON_SPEC_HGT_LVL_ABOVE_GRND + USTM + NCEP + 6000. + 4.0 + + + + VSTM_ON_SPEC_HGT_LVL_ABOVE_GRND + VSTM + NCEP + 6000. + 4.0 + + + + LCDC_ON_LOW_CLOUD_LYR + LCDC + 3.0 + + + + MCDC_ON_MID_CLOUD_LYR + MCDC + 3.0 + + + + HCDC_ON_HIGH_CLOUD_LYR + HCDC + 3.0 + + + + AVE_TCDC_ON_ENTIRE_ATMOS + TCDC + 3.0 + + + + AVE_CDLYR_ON_ENTIRE_ATMOS + CDLYR + NCEP + 3.0 + + + + PRES_ON_CLOUD_BASE + PRES + 6.0 + + + + PRES_ON_CLOUD_TOP + PRES + 6.0 + + + + TMP_ON_CLOUD_TOP + TMP + 5.0 + + + + AVE_GFLUX_ON_SURFACE + GFLUX + NCEP + 4.0 + + + + AVE_SNOHF_ON_SURFACE + SNOHF + NCEP + 4.0 + + + + ACM_EVP_ON_SURFACE + EVP + 4.0 + + + + INST_SHTFL_ON_SURFACE + SHTFL + 4.0 + + + + INST_LHTFL_ON_SURFACE + LHTFL + 4.0 + + + + PRES_ON_TROPOPAUSE + PRES + 6.0 + + + + HGT_ON_TROPOPAUSE + HGT + 6.0 + + + + TMP_ON_TROPOPAUSE + TMP + 3.0 + + + + UGRD_ON_TROPOPAUSE + UGRD + 4.0 + + + + VGRD_ON_TROPOPAUSE + VGRD + 4.0 + + + + VWSH_ON_TROPOPAUSE + VWSH + NCEP + 3.0 + + + + TMP_ON_SPEC_ALT_ABOVE_MEAN_SEA_LVL + TMP + 305. 457. 610. 914. 1524. 1829. 2134. 2743. 3658. 4572. + 3.0 + + + + UGRD_ON_SPEC_ALT_ABOVE_MEAN_SEA_LVL + UGRD + 305. 457. 610. 914. 1524. 1829. 2134. 2743. 3658. 4572. + 4.0 + + + + VGRD_ON_SPEC_ALT_ABOVE_MEAN_SEA_LVL + VGRD + 305. 457. 610. 914. 1524. 1829. 2134. 2743. 3658. 4572. + 4.0 + + + + HGT_ON_0C_ISOTHERM + HGT + 6.0 + + + + RH_ON_0C_ISOTHERM + RH + 2.0 + + + + HGT_ON_HGHST_TROP_FRZ_LVL + HGT + 6.0 + + + + PRES_ON_MAX_WIND + PRES + 6.0 + + + + HGT_ON_MAX_WIND + HGT + 6.0 + + + + UGRD_ON_MAX_WIND + UGRD + 4.0 + + + + VGRD_ON_MAX_WIND + VGRD + 4.0 + + + + MAX_WIND_ON_SPEC_HGT_LVL_ABOVE_GRND_10m + WIND + -4.0 + + + + HGT_ON_CLOUD_BASE + HGT + 6.0 + + + + HGT_ON_CLOUD_TOP + HGT + 6.0 + + + + GSD_VIS_ON_SURFACE + VIS + 6.0 + + + + REFC_ON_ENTIRE_ATMOS + REFC + NCEP + 4.0 + + + + PRES_ON_GRID_SCALE_CLOUD_BOT_LVL + PRES + 6.0 + + + + PRES_ON_GRID_SCALE_CLOUD_TOP_LVL + PRES + 6.0 + + + + TCOLW_ON_ENTIRE_ATMOS + TCOLW + NCEP + 5.0 + + + + TCOLI_ON_ENTIRE_ATMOS + TCOLI + NCEP + 5.0 + + + + TCOLR_ON_ENTIRE_ATMOS + TCOLR + NCEP + 5.0 + + + + TCOLS_ON_ENTIRE_ATMOS + TCOLS + NCEP + 5.0 + + + + TCOLC_ON_ENTIRE_ATMOS + TCOLC + NCEP + 5.0 + + + + TCOLG_ON_ENTIRE_ATMOS + TCOLG + 5.0 + + + + VGTYP_ON_SURFACE + VGTYP + NCEP + 3.0 + + + + SOTYP_ON_SURFACE + SOTYP + 3.0 + + + + CCOND_ON_SURFACE + CCOND + NCEP + 3.0 + + + + HPBL_ON_SURFACE + HPBL + NCEP + 6.0 + + + + SNOD_ON_SURFACE + SNOD + 6.0 + + + + SBSNO_ON_SURFACE + SBSNO + NCEP + 3.0 + + + + SMDRY_ON_SURFACE + SMDRY + NCEP + 3.0 + + + + POROS_ON_SURFACE + POROS + NCEP + 3.0 + + + + RSMIN_ON_SURFACE + RSMIN + NCEP + 3.0 + + + + RLYRS_ON_SURFACE + RLYRS + NCEP + 3.0 + + + + WILT_ON_SURFACE + WILT + NCEP + 3.0 + + + + SMREF_ON_SURFACE + SMREF + NCEP + 3.0 + + + + RCS_ON_SURFACE + RCS + NCEP + 3.0 + + + + RCT_ON_SURFACE + RCT + NCEP + 5.0 + + + + RCQ_ON_SURFACE + RCQ + NCEP + 3.0 + + + + RCSOL_ON_SURFACE + RCSOL + NCEP + 3.0 + + + + PEVPR_ON_SURFACE + PEVPR + NCEP + 6.0 + + + + GUST_ON_SURFACE + GUST + 3.0 + + + + HGT_ON_LWST_LVL_OF_WET_BULB_ZERO + HGT + -5.0 + + + + LAI_ON_SURFACE + LAI + NCEP + -3.0 + + + + INST_CSDSF_ON_SURFACE + CSDSF + NCEP + 4.0 + + + + TCDC_ON_SIGMA_LVLS + TCDC + 4 + 9975. 9915. 9835. 9745. 9650. 9490. 9260. 9015. 8755. 8480. 8190. 7890. 7585. 7185. 6690. 6180. 5470. 4550. 3595. 2605. 1580. 530. + 3.0 + + + + HGT_ON_PLANETARY_BOUND_LYR + HGT + -4.0 + + + + MIXHT_ON_SURFACE + MIXHT + -4.0 + + + + TMP_ON_SPEC_HGT_LVL_ABOVE_GRND_10m + TMP + 10. + -4.0 + + + + AVE_SNOWC_ON_SURFACE + SNOWC + NCEP + 3.0 + + + + AVE_PRES_ON_SURFACE + PRES + 5.0 + + + + AVE_TMP_ON_SPEC_HGT_LVL_ABOVE_GRND_10m + TMP + 10. + -4.0 + + + + AVE_AKHS_ON_SURFACE + AKHS + NCEP + 3.0 + + + + AVE_AKMS_ON_SURFACE + AKMS + NCEP + 3.0 + + + + SBTA167_ON_TOP_OF_ATMOS + SBTA167 + 4.0 + + + + SBTA168_ON_TOP_OF_ATMOS + SBTA168 + 4.0 + + + + SBTA169_ON_TOP_OF_ATMOS + SBTA169 + 4.0 + + + + SBTA1610_ON_TOP_OF_ATMOS + SBTA1610 + 4.0 + + + + SBTA1611_ON_TOP_OF_ATMOS + SBTA1611 + 4.0 + + + + SBTA1612_ON_TOP_OF_ATMOS + SBTA1612 + 4.0 + + + + SBTA1613_ON_TOP_OF_ATMOS + SBTA1613 + 4.0 + + + + SBTA1614_ON_TOP_OF_ATMOS + SBTA1614 + 4.0 + + + + SBTA1615_ON_TOP_OF_ATMOS + SBTA1615 + 4.0 + + + + SBTA1616_ON_TOP_OF_ATMOS + SBTA1616 + 4.0 + + + + SBTA188_ON_TOP_OF_ATMOS + SBTA188 + 4.0 + + + + SBTA189_ON_TOP_OF_ATMOS + SBTA189 + 4.0 + + + + SBTA1810_ON_TOP_OF_ATMOS + SBTA1810 + 4.0 + + + + SBTA1811_ON_TOP_OF_ATMOS + SBTA1811 + 4.0 + + + + SBTA1812_ON_TOP_OF_ATMOS + SBTA1812 + 4.0 + + + + SBTA1813_ON_TOP_OF_ATMOS + SBTA1813 + 4.0 + + + + SBTA1814_ON_TOP_OF_ATMOS + SBTA1814 + 4.0 + + + + SBTA1815_ON_TOP_OF_ATMOS + SBTA1815 + 4.0 + + + + SBTA1816_ON_TOP_OF_ATMOS + SBTA1816 + 4.0 + + + + SDEN_ON_SURFACE + SDEN + 6.0 + + + + + + IFIFIP + 4 + ncep_emc + v2003 + local_tab_yes1 + fcst + oper + fcst + fcst + hour + nws_ncep + hrrr + complex_packing_spatial_diff + 2nd_ord_sptdiff + fltng_pnt + lossless + + + + + ICE_PROB_IFI_FLIGHT_LEVEL + 4.0 + + 1 + 5000. 10000. 15000. 20000. 25000. 30000. 35000. 40000. 45000. 50000. 55000. 60000. 65000. 70000. 75000. 80000. 85000. 90000. 95000. 100000. 105000. 110000. 115000. 120000. 125000. 130000. 135000. 140000. 145000. 150000. 155000. 160000. 165000. 170000. 175000. 180000. 185000. 190000. 195000. 200000. 205000. 210000. 215000. 220000. 225000. 230000. 235000. 240000. 245000. 250000. 255000. 260000. 265000. 270000. 275000. 280000. 285000. 290000. 295000. 300000. + + + + SLD_IFI_FLIGHT_LEVEL + 4.0 + + 1 + 5000. 10000. 15000. 20000. 25000. 30000. 35000. 40000. 45000. 50000. 55000. 60000. 65000. 70000. 75000. 80000. 85000. 90000. 95000. 100000. 105000. 110000. 115000. 120000. 125000. 130000. 135000. 140000. 145000. 150000. 155000. 160000. 165000. 170000. 175000. 180000. 185000. 190000. 195000. 200000. 205000. 210000. 215000. 220000. 225000. 230000. 235000. 240000. 245000. 250000. 255000. 260000. 265000. 270000. 275000. 280000. 285000. 290000. 295000. 300000. + + + + ICE_SEV_CAT_IFI_FLIGHT_LEVEL + 4.0 + + 1 + 5000. 10000. 15000. 20000. 25000. 30000. 35000. 40000. 45000. 50000. 55000. 60000. 65000. 70000. 75000. 80000. 85000. 90000. 95000. 100000. 105000. 110000. 115000. 120000. 125000. 130000. 135000. 140000. 145000. 150000. 155000. 160000. 165000. 170000. 175000. 180000. 185000. 190000. 195000. 200000. 205000. 210000. 215000. 220000. 225000. 230000. 235000. 240000. 245000. 250000. 255000. 260000. 265000. 270000. 275000. 280000. 285000. 290000. 295000. 300000. + + + + WMO_ICE_SEV_CAT_IFI_FLIGHT_LEVEL + 4.0 + + 1 + 5000. 10000. 15000. 20000. 25000. 30000. 35000. 40000. 45000. 50000. 55000. 60000. 65000. 70000. 75000. 80000. 85000. 90000. 95000. 100000. 105000. 110000. 115000. 120000. 125000. 130000. 135000. 140000. 145000. 150000. 155000. 160000. 165000. 170000. 175000. 180000. 185000. 190000. 195000. 200000. 205000. 210000. 215000. 220000. 225000. 230000. 235000. 240000. 245000. 250000. 255000. 260000. 265000. 270000. 275000. 280000. 285000. 290000. 295000. 300000. + + + diff --git a/parm/global_1x1_paramlist_g2 b/parm/global_1x1_paramlist_g2 index 553a42bc6..3d37d4036 100644 --- a/parm/global_1x1_paramlist_g2 +++ b/parm/global_1x1_paramlist_g2 @@ -45,7 +45,7 @@ ACPCP:surface ALBDO:surface APCP:surface APTMP:2 m above ground -var discipline=0 master_table=2 parmcat=0 parm=21:2 m above ground +AOTK:entire atmosphere CAPE:180-0 mb above ground CAPE:255-0 mb above ground CAPE:90-0 mb above ground @@ -167,6 +167,7 @@ HGT:PV=2e-06 (Km^2/kg/s) surface HGT:surface HGT:tropopause HINDEX:surface +HLCY:1000-0 m above ground HLCY:3000-0 m above ground HPBL:surface ICAHT:max wind @@ -363,6 +364,7 @@ RWMR:950 mb RWMR:975 mb RWMR:1 hybrid level SHTFL:surface +SDEN:surface SFCR:surface SOILW:0-0.1 m below ground SOILW:0.1-0.4 m below ground diff --git a/parm/global_1x1_paramlist_g2.f000 b/parm/global_1x1_paramlist_g2.f000 index 615022063..b1dcb09cc 100644 --- a/parm/global_1x1_paramlist_g2.f000 +++ b/parm/global_1x1_paramlist_g2.f000 @@ -159,6 +159,7 @@ HGT:PV=2e-06 (Km^2/kg/s) surface HGT:surface HGT:tropopause HINDEX:surface +HLCY:1000-0 m above ground HLCY:3000-0 m above ground HPBL:surface ICAHT:max wind diff --git a/parm/global_1x1_paramlist_g2.f000_chem b/parm/global_1x1_paramlist_g2.f000_chem new file mode 100644 index 000000000..00d4c5ebe --- /dev/null +++ b/parm/global_1x1_paramlist_g2.f000_chem @@ -0,0 +1,841 @@ +4LFTX:surface +5WAVH:500 mb +ABSV:1000 mb +ABSV:100 mb +ABSV:10 mb +ABSV:150 mb +ABSV:15 mb +ABSV:200 mb +ABSV:20 mb +ABSV:250 mb +ABSV:300 mb +ABSV:30 mb +ABSV:350 mb +ABSV:400 mb +ABSV:40 mb +ABSV:450 mb +ABSV:500 mb +ABSV:50 mb +ABSV:550 mb +ABSV:600 mb +ABSV:650 mb +ABSV:700 mb +ABSV:70 mb +ABSV:750 mb +ABSV:800 mb +ABSV:850 mb +ABSV:900 mb +ABSV:925 mb +ABSV:950 mb +ABSV:975 mb +ABSV:1 mb +ABSV:2 mb +ABSV:3 mb +ABSV:5 mb +ABSV:7 mb +ABSV:0.1 mb +ABSV:0.2 mb +ABSV:0.4 mb +ABSV:0.7 mb +ABSV:0.01 mb +ABSV:0.02 mb +ABSV:0.04 mb +ABSV:0.07 mb +ACPCP:surface +AEMFLX:surface +AOTK:entire atmosphere +APCP:surface +APTMP:2 m above ground +ASYSFK:entire atmosphere +var discipline=0 master_table=2 parmcat=0 parm=21:2 m above ground +CAPE:180-0 mb above ground +CAPE:255-0 mb above ground +CAPE:90-0 mb above ground +CAPE:surface +CFRZR:surface +CICEP:surface +CIN:180-0 mb above ground +CIN:255-0 mb above ground +CIN:90-0 mb above ground +CIN:surface +CLMR:50 mb +CLMR:1000 mb +CLMR:100 mb +CLMR:150 mb +CLMR:200 mb +CLMR:250 mb +CLMR:300 mb +CLMR:350 mb +CLMR:400 mb +CLMR:450 mb +CLMR:500 mb +CLMR:550 mb +CLMR:600 mb +CLMR:650 mb +CLMR:700 mb +CLMR:750 mb +CLMR:800 mb +CLMR:850 mb +CLMR:900 mb +CLMR:925 mb +CLMR:950 mb +CLMR:975 mb +CLMR:1 hybrid level +CNWAT:surface +COLMD:entire atmosphere +CPOFP:surface +CPRAT:surface +CRAIN:surface +CSNOW:surface +CWAT:entire atmosphere (considered as a single layer) +DDMFLX:entire atmosphere +DPT:2 m above ground +FLDCP:surface +FRICV:surface +GRLE:50 mb +GRLE:1000 mb +GRLE:100 mb +GRLE:150 mb +GRLE:200 mb +GRLE:250 mb +GRLE:300 mb +GRLE:350 mb +GRLE:400 mb +GRLE:450 mb +GRLE:500 mb +GRLE:550 mb +GRLE:600 mb +GRLE:650 mb +GRLE:700 mb +GRLE:750 mb +GRLE:800 mb +GRLE:850 mb +GRLE:900 mb +GRLE:925 mb +GRLE:950 mb +GRLE:975 mb +GRLE:1 hybrid level +GUST:surface +HCDC:high cloud layer +HGT:0C isotherm +HGT:1000 mb +HGT:100 mb +HGT:10 mb +HGT:150 mb +HGT:15 mb +HGT:200 mb +HGT:20 mb +HGT:250 mb +HGT:300 mb +HGT:30 mb +HGT:350 mb +HGT:400 mb +HGT:40 mb +HGT:450 mb +HGT:500 mb +HGT:50 mb +HGT:550 mb +HGT:600 mb +HGT:650 mb +HGT:700 mb +HGT:70 mb +HGT:750 mb +HGT:800 mb +HGT:850 mb +HGT:900 mb +HGT:925 mb +HGT:950 mb +HGT:975 mb +HGT:1 mb +HGT:2 mb +HGT:3 mb +HGT:5 mb +HGT:7 mb +HGT:0.1 mb +HGT:0.2 mb +HGT:0.4 mb +HGT:0.7 mb +HGT:0.01 mb +HGT:0.02 mb +HGT:0.04 mb +HGT:0.07 mb +HGT:cloud ceiling +HGT:highest tropospheric freezing level +HGT:max wind +HGT:PV=-2e-06 (Km^2/kg/s) surface +HGT:PV=2e-06 (Km^2/kg/s) surface +HGT:surface +HGT:tropopause +HINDEX:surface +HLCY:1000-0 m above ground +HLCY:3000-0 m above ground +HPBL:surface +ICAHT:max wind +ICAHT:tropopause +ICEC:surface +ICETK:surface +ICETMP:surface +ICMR:50 mb +ICMR:1000 mb +ICMR:100 mb +ICMR:150 mb +ICMR:200 mb +ICMR:250 mb +ICMR:300 mb +ICMR:350 mb +ICMR:400 mb +ICMR:450 mb +ICMR:500 mb +ICMR:550 mb +ICMR:600 mb +ICMR:650 mb +ICMR:700 mb +ICMR:750 mb +ICMR:800 mb +ICMR:850 mb +ICMR:900 mb +ICMR:925 mb +ICMR:950 mb +ICMR:975 mb +ICMR:1 hybrid level +LAND:surface +LCDC:low cloud layer +LFTX:surface +MASSMR:1000 mb +MASSMR:100 mb +MASSMR:10 mb +MASSMR:15 mb +MASSMR:150 mb +MASSMR:20 mb +MASSMR:200 mb +MASSMR:250 mb +MASSMR:300 mb +MASSMR:30 mb +MASSMR:350 mb +MASSMR:40 mb +MASSMR:400 mb +MASSMR:450 mb +MASSMR:500 mb +MASSMR:50 mb +MASSMR:550 mb +MASSMR:600 mb +MASSMR:650 mb +MASSMR:700 mb +MASSMR:70 mb +MASSMR:750 mb +MASSMR:800 mb +MASSMR:850 mb +MASSMR:900 mb +MASSMR:925 mb +MASSMR:950 mb +MASSMR:975 mb +MASSMR:1 mb +MASSMR:2 mb +MASSMR:3 mb +MASSMR:5 mb +MASSMR:7 mb +MASSMR:0.1 mb +MASSMR:0.2 mb +MASSMR:0.4 mb +MASSMR:0.7 mb +MASSMR:0.01 mb +MASSMR:0.02 mb +MASSMR:0.04 mb +MASSMR:0.07 mb +MASSMR:1 hybrid level +MSLET:mean sea level +O3MR:1000 mb +O3MR:100 mb +O3MR:10 mb +O3MR:150 mb +O3MR:15 mb +O3MR:20 mb +O3MR:200 mb +O3MR:250 mb +O3MR:300 mb +O3MR:30 mb +O3MR:350 mb +O3MR:400 mb +O3MR:40 mb +O3MR:450 mb +O3MR:500 mb +O3MR:50 mb +O3MR:550 mb +O3MR:600 mb +O3MR:650 mb +O3MR:700 mb +O3MR:70 mb +O3MR:750 mb +O3MR:800 mb +O3MR:850 mb +O3MR:900 mb +O3MR:925 mb +O3MR:950 mb +O3MR:975 mb +O3MR:1 mb +O3MR:2 mb +O3MR:3 mb +O3MR:5 mb +O3MR:7 mb +O3MR:0.1 mb +O3MR:0.2 mb +O3MR:0.4 mb +O3MR:0.7 mb +O3MR:0.01 mb +O3MR:0.02 mb +O3MR:0.04 mb +O3MR:0.07 mb +MCDC:middle cloud layer +PLPL:255-0 mb above ground +PMTC:1000 mb +PMTC:100 mb +PMTC:10 mb +PMTC:15 mb +PMTC:150 mb +PMTC:20 mb +PMTC:200 mb +PMTC:250 mb +PMTC:300 mb +PMTC:30 mb +PMTC:350 mb +PMTC:40 mb +PMTC:400 mb +PMTC:450 mb +PMTC:500 mb +PMTC:50 mb +PMTC:550 mb +PMTC:600 mb +PMTC:650 mb +PMTC:700 mb +PMTC:70 mb +PMTC:750 mb +PMTC:800 mb +PMTC:850 mb +PMTC:900 mb +PMTC:925 mb +PMTC:950 mb +PMTC:975 mb +PMTC:1 mb +PMTC:2 mb +PMTC:3 mb +PMTC:5 mb +PMTC:7 mb +PMTC:0.1 mb +PMTC:0.2 mb +PMTC:0.4 mb +PMTC:0.7 mb +PMTC:0.01 mb +PMTC:0.02 mb +PMTC:0.04 mb +PMTC:0.07 mb +PMTC:1 hybrid level +PMTC:entire atmosphere +PMTC:surface +PMTF:1000 mb +PMTF:100 mb +PMTF:10 mb +PMTF:15 mb +PMTF:150 mb +PMTF:20 mb +PMTF:200 mb +PMTF:250 mb +PMTF:300 mb +PMTF:30 mb +PMTF:350 mb +PMTF:40 mb +PMTF:400 mb +PMTF:450 mb +PMTF:500 mb +PMTF:50 mb +PMTF:550 mb +PMTF:600 mb +PMTF:650 mb +PMTF:700 mb +PMTF:70 mb +PMTF:750 mb +PMTF:800 mb +PMTF:850 mb +PMTF:900 mb +PMTF:925 mb +PMTF:950 mb +PMTF:975 mb +PMTF:1 mb +PMTF:2 mb +PMTF:3 mb +PMTF:5 mb +PMTF:7 mb +PMTF:0.1 mb +PMTF:0.2 mb +PMTF:0.4 mb +PMTF:0.7 mb +PMTF:0.01 mb +PMTF:0.02 mb +PMTF:0.04 mb +PMTF:0.07 mb +PMTF:1 hybrid level +PMTF:entire atmosphere +PMTF:surface +POT:0.995 sigma level +PRATE:surface +PRES:80 m above ground +PRES:max wind +PRES:PV=-2e-06 (Km^2/kg/s) surface +PRES:PV=2e-06 (Km^2/kg/s) surface +PRES:surface +PRES:tropopause +PRMSL:mean sea level +PWAT:entire atmosphere +REFC:entire atmosphere +REFD:1 hybrid level +REFD:2 hybrid level +REFD:1000 m above ground +REFD:4000 m above ground +RH:0.33-1 sigma layer +RH:0.44-0.72 sigma layer +RH:0.44-1 sigma layer +RH:0.72-0.94 sigma layer +RH:0.995 sigma level +RH:0C isotherm +RH:1000 mb +RH:100 mb +RH:10 mb +RH:150 mb +RH:15 mb +RH:20 mb +RH:200 mb +RH:250 mb +RH:2 m above ground +RH:30-0 mb above ground +RH:300 mb +RH:30 mb +RH:350 mb +RH:400 mb +RH:40 mb +RH:450 mb +RH:500 mb +RH:50 mb +RH:550 mb +RH:600 mb +RH:650 mb +RH:700 mb +RH:70 mb +RH:750 mb +RH:800 mb +RH:850 mb +RH:900 mb +RH:925 mb +RH:950 mb +RH:975 mb +RH:1 mb +RH:2 mb +RH:3 mb +RH:5 mb +RH:7 mb +RH:0.1 mb +RH:0.2 mb +RH:0.4 mb +RH:0.7 mb +RH:0.01 mb +RH:0.02 mb +RH:0.04 mb +RH:0.07 mb +RH:entire atmosphere (considered as a single layer) +RH:highest tropospheric freezing level +RWMR:50 mb +RWMR:1000 mb +RWMR:100 mb +RWMR:150 mb +RWMR:200 mb +RWMR:250 mb +RWMR:300 mb +RWMR:350 mb +RWMR:400 mb +RWMR:450 mb +RWMR:500 mb +RWMR:550 mb +RWMR:600 mb +RWMR:650 mb +RWMR:700 mb +RWMR:750 mb +RWMR:800 mb +RWMR:850 mb +RWMR:900 mb +RWMR:925 mb +RWMR:950 mb +RWMR:975 mb +RWMR:1 hybrid level +SCTAOTK:entire atmosphere +SEDMFLX:entire atmosphere +SFCR:surface +SNMR:50 mb +SNMR:1000 mb +SNMR:100 mb +SNMR:150 mb +SNMR:200 mb +SNMR:250 mb +SNMR:300 mb +SNMR:350 mb +SNMR:400 mb +SNMR:450 mb +SNMR:500 mb +SNMR:550 mb +SNMR:600 mb +SNMR:650 mb +SNMR:700 mb +SNMR:750 mb +SNMR:800 mb +SNMR:850 mb +SNMR:900 mb +SNMR:925 mb +SNMR:950 mb +SNMR:975 mb +SNMR:1 hybrid level +SOILL:0-0.1 m below ground +SOILL:0.1-0.4 m below ground +SOILL:0.4-1 m below ground +SOILL:1-2 m below ground +SOILW:0-0.1 m below ground +SOILW:0.1-0.4 m below ground +SOILW:0.4-1 m below ground +SOILW:1-2 m below ground +SOTYP:surface +SPFH:1000 mb +SPFH:100 mb +SPFH:10 mb +SPFH:15 mb +SPFH:150 mb +SPFH:200 mb +SPFH:20 mb +SPFH:250 mb +SPFH:300 mb +SPFH:30 mb +SPFH:350 mb +SPFH:400 mb +SPFH:40 mb +SPFH:450 mb +SPFH:500 mb +SPFH:50 mb +SPFH:550 mb +SPFH:600 mb +SPFH:650 mb +SPFH:700 mb +SPFH:70 mb +SPFH:750 mb +SPFH:800 mb +SPFH:850 mb +SPFH:900 mb +SPFH:925 mb +SPFH:950 mb +SPFH:975 mb +SPFH:1 mb +SPFH:2 mb +SPFH:3 mb +SPFH:5 mb +SPFH:7 mb +SPFH:0.1 mb +SPFH:0.2 mb +SPFH:0.4 mb +SPFH:0.7 mb +SPFH:0.01 mb +SPFH:0.02 mb +SPFH:0.04 mb +SPFH:0.07 mb +SPFH:2 m above ground +SPFH:30-0 mb above ground +SPFH:80 m above ground +SUNSD:surface +TCDC:50 mb +TCDC:1000 mb +TCDC:100 mb +TCDC:150 mb +TCDC:200 mb +TCDC:250 mb +TCDC:300 mb +TCDC:350 mb +TCDC:400 mb +TCDC:450 mb +TCDC:500 mb +TCDC:550 mb +TCDC:600 mb +TCDC:650 mb +TCDC:700 mb +TCDC:750 mb +TCDC:800 mb +TCDC:850 mb +TCDC:900 mb +TCDC:925 mb +TCDC:950 mb +TCDC:975 mb +TCDC:entire atmosphere +TCDC:convective cloud layer +TSOIL:0-0.1 m below ground +TSOIL:0.1-0.4 m below ground +TSOIL:0.4-1 m below ground +TMP:0.995 sigma level +TMP:1000 mb +TMP:100 m above ground +TMP:100 mb +TMP:10 mb +TMP:15 mb +TSOIL:1-2 m below ground +TMP:150 mb +TMP:1829 m above mean sea level +TMP:200 mb +TMP:20 mb +TMP:250 mb +TMP:2743 m above mean sea level +TMP:2 m above ground +TMP:30-0 mb above ground +TMP:300 mb +TMP:30 mb +TMP:350 mb +TMP:3658 m above mean sea level +TMP:400 mb +TMP:40 mb +TMP:450 mb +TMP:500 mb +TMP:50 mb +TMP:550 mb +TMP:600 mb +TMP:650 mb +TMP:700 mb +TMP:70 mb +TMP:750 mb +TMP:800 mb +TMP:80 m above ground +TMP:850 mb +TMP:900 mb +TMP:925 mb +TMP:950 mb +TMP:975 mb +TMP:1 mb +TMP:2 mb +TMP:3 mb +TMP:5 mb +TMP:7 mb +TMP:0.1 mb +TMP:0.2 mb +TMP:0.4 mb +TMP:0.7 mb +TMP:0.01 mb +TMP:0.02 mb +TMP:0.04 mb +TMP:0.07 mb +TMP:max wind +TMP:PV=-2e-06 (Km^2/kg/s) surface +TMP:PV=2e-06 (Km^2/kg/s) surface +TMP:surface +TMP:tropopause +TOZNE:entire atmosphere (considered as a single layer) +UGRD:0.995 sigma level +UGRD:1000 mb +UGRD:100 m above ground +UGRD:100 mb +UGRD:10 m above ground +UGRD:10 mb +UGRD:150 mb +UGRD:15 mb +UGRD:1829 m above mean sea level +UGRD:200 mb +UGRD:20 mb +UGRD:20 m above ground +UGRD:250 mb +UGRD:2743 m above mean sea level +UGRD:30-0 mb above ground +UGRD:300 mb +UGRD:30 mb +UGRD:30 m above ground +UGRD:350 mb +UGRD:3658 m above mean sea level +UGRD:400 mb +UGRD:40 mb +UGRD:40 m above ground +UGRD:450 mb +UGRD:500 mb +UGRD:50 mb +UGRD:50 m above ground +UGRD:550 mb +UGRD:600 mb +UGRD:650 mb +UGRD:700 mb +UGRD:70 mb +UGRD:750 mb +UGRD:800 mb +UGRD:80 m above ground +UGRD:850 mb +UGRD:900 mb +UGRD:925 mb +UGRD:950 mb +UGRD:975 mb +UGRD:1 mb +UGRD:2 mb +UGRD:3 mb +UGRD:5 mb +UGRD:7 mb +UGRD:0.1 mb +UGRD:0.2 mb +UGRD:0.4 mb +UGRD:0.7 mb +UGRD:0.01 mb +UGRD:0.02 mb +UGRD:0.04 mb +UGRD:0.07 mb +UGRD:max wind +UGRD:planetary boundary layer +UGRD:PV=-2e-06 (Km^2/kg/s) surface +UGRD:PV=2e-06 (Km^2/kg/s) surface +UGRD:tropopause +USTM:6000-0 m above ground +VEG:surface +VGRD:0.995 sigma level +VGRD:1000 mb +VGRD:100 m above ground +VGRD:100 mb +VGRD:10 m above ground +VGRD:10 mb +VGRD:150 mb +VGRD:15 mb +VGRD:1829 m above mean sea level +VGRD:200 mb +VGRD:20 mb +VGRD:20 m above ground +VGRD:250 mb +VGRD:2743 m above mean sea level +VGRD:30-0 mb above ground +VGRD:300 mb +VGRD:30 mb +VGRD:30 m above ground +VGRD:350 mb +VGRD:3658 m above mean sea level +VGRD:400 mb +VGRD:40 mb +VGRD:40 m above ground +VGRD:450 mb +VGRD:500 mb +VGRD:50 mb +VGRD:50 m above ground +VGRD:550 mb +VGRD:600 mb +VGRD:650 mb +VGRD:700 mb +VGRD:70 mb +VGRD:750 mb +VGRD:800 mb +VGRD:80 m above ground +VGRD:850 mb +VGRD:900 mb +VGRD:925 mb +VGRD:950 mb +VGRD:975 mb +VGRD:1 mb +VGRD:2 mb +VGRD:3 mb +VGRD:5 mb +VGRD:7 mb +VGRD:0.1 mb +VGRD:0.2 mb +VGRD:0.4 mb +VGRD:0.7 mb +VGRD:0.01 mb +VGRD:0.02 mb +VGRD:0.04 mb +VGRD:0.07 mb +VGRD:max wind +VGRD:planetary boundary layer +VGRD:PV=-2e-06 (Km^2/kg/s) surface +VGRD:PV=2e-06 (Km^2/kg/s) surface +VGRD:tropopause +VRATE:planetary boundary layer +VSTM:6000-0 m above ground +DZDT:1000 mb +DZDT:100 mb +DZDT:10 mb +DZDT:15 mb +DZDT:150 mb +DZDT:20 mb +DZDT:200 mb +DZDT:250 mb +DZDT:300 mb +DZDT:30 mb +DZDT:350 mb +DZDT:40 mb +DZDT:400 mb +DZDT:450 mb +DZDT:500 mb +DZDT:50 mb +DZDT:550 mb +DZDT:600 mb +DZDT:650 mb +DZDT:700 mb +DZDT:70 mb +DZDT:750 mb +DZDT:800 mb +DZDT:850 mb +DZDT:900 mb +DZDT:925 mb +DZDT:950 mb +DZDT:975 mb +DZDT:1 mb +DZDT:2 mb +DZDT:3 mb +DZDT:5 mb +DZDT:7 mb +DZDT:0.1 mb +DZDT:0.2 mb +DZDT:0.4 mb +DZDT:0.7 mb +DZDT:0.01 mb +DZDT:0.02 mb +DZDT:0.04 mb +DZDT:0.07 mb +VVEL:0.995 sigma level +VVEL:1000 mb +VVEL:100 mb +VVEL:10 mb +VVEL:15 mb +VVEL:150 mb +VVEL:20 mb +VVEL:200 mb +VVEL:250 mb +VVEL:300 mb +VVEL:30 mb +VVEL:350 mb +VVEL:40 mb +VVEL:400 mb +VVEL:450 mb +VVEL:500 mb +VVEL:50 mb +VVEL:550 mb +VVEL:600 mb +VVEL:650 mb +VVEL:700 mb +VVEL:70 mb +VVEL:750 mb +VVEL:800 mb +VVEL:850 mb +VVEL:900 mb +VVEL:925 mb +VVEL:950 mb +VVEL:975 mb +VVEL:1 mb +VVEL:2 mb +VVEL:3 mb +VVEL:5 mb +VVEL:7 mb +VVEL:0.1 mb +VVEL:0.2 mb +VVEL:0.4 mb +VVEL:0.7 mb +VVEL:0.01 mb +VVEL:0.02 mb +VVEL:0.04 mb +VVEL:0.07 mb +VWSH:PV=-2e-06 (Km^2/kg/s) surface +VWSH:PV=2e-06 (Km^2/kg/s) surface +VWSH:tropopause +WEASD:surface +WILT:surface +WLSMFLX:entire atmosphere +SNOD:surface +VIS:surface +ICEG:10 m above mean sea level diff --git a/parm/global_1x1_paramlist_g2_chem b/parm/global_1x1_paramlist_g2_chem new file mode 100644 index 000000000..3ab111948 --- /dev/null +++ b/parm/global_1x1_paramlist_g2_chem @@ -0,0 +1,894 @@ +4LFTX:surface +5WAVH:500 mb +ABSV:1000 mb +ABSV:100 mb +ABSV:10 mb +ABSV:15 mb +ABSV:150 mb +ABSV:20 mb +ABSV:200 mb +ABSV:250 mb +ABSV:300 mb +ABSV:30 mb +ABSV:350 mb +ABSV:40 mb +ABSV:400 mb +ABSV:450 mb +ABSV:500 mb +ABSV:50 mb +ABSV:550 mb +ABSV:600 mb +ABSV:650 mb +ABSV:700 mb +ABSV:70 mb +ABSV:750 mb +ABSV:800 mb +ABSV:850 mb +ABSV:900 mb +ABSV:925 mb +ABSV:950 mb +ABSV:975 mb +ABSV:1 mb +ABSV:2 mb +ABSV:3 mb +ABSV:5 mb +ABSV:7 mb +ABSV:0.1 mb +ABSV:0.2 mb +ABSV:0.4 mb +ABSV:0.7 mb +ABSV:0.01 mb +ABSV:0.02 mb +ABSV:0.04 mb +ABSV:0.07 mb +ACPCP:surface +AEMFLX:surface +ALBDO:surface +AOTK:entire atmosphere +APCP:surface +APTMP:2 m above ground +ASYSFK:entire atmosphere +var discipline=0 master_table=2 parmcat=0 parm=21:2 m above ground +CAPE:180-0 mb above ground +CAPE:255-0 mb above ground +CAPE:90-0 mb above ground +CAPE:surface +CFRZR:surface +CICEP:surface +CIN:180-0 mb above ground +CIN:255-0 mb above ground +CIN:90-0 mb above ground +CIN:surface +CLMR:50 mb +CLMR:1000 mb +CLMR:100 mb +CLMR:150 mb +CLMR:200 mb +CLMR:250 mb +CLMR:300 mb +CLMR:350 mb +CLMR:400 mb +CLMR:450 mb +CLMR:500 mb +CLMR:550 mb +CLMR:600 mb +CLMR:650 mb +CLMR:700 mb +CLMR:750 mb +CLMR:800 mb +CLMR:850 mb +CLMR:900 mb +CLMR:925 mb +CLMR:950 mb +CLMR:975 mb +CLMR:1 hybrid level +CNWAT:surface +COLMD:entire atmosphere +CPOFP:surface +CPRAT:surface +CRAIN:surface +CSNOW:surface +CWAT:entire atmosphere (considered as a single layer) +CWORK:entire atmosphere (considered as a single layer) +DDMFLX:entire atmosphere +DLWRF:surface +DPT:2 m above ground +DSWRF:surface +FLDCP:surface +FRICV:surface +GFLUX:surface +GRLE:50 mb +GRLE:1000 mb +GRLE:100 mb +GRLE:150 mb +GRLE:200 mb +GRLE:250 mb +GRLE:300 mb +GRLE:350 mb +GRLE:400 mb +GRLE:450 mb +GRLE:500 mb +GRLE:550 mb +GRLE:600 mb +GRLE:650 mb +GRLE:700 mb +GRLE:750 mb +GRLE:800 mb +GRLE:850 mb +GRLE:900 mb +GRLE:925 mb +GRLE:950 mb +GRLE:975 mb +GRLE:1 hybrid level +GUST:surface +HCDC:high cloud layer +HGT:0C isotherm +HGT:1000 mb +HGT:100 mb +HGT:10 mb +HGT:150 mb +HGT:15 mb +HGT:200 mb +HGT:20 mb +HGT:250 mb +HGT:300 mb +HGT:30 mb +HGT:350 mb +HGT:400 mb +HGT:450 mb +HGT:40 mb +HGT:500 mb +HGT:50 mb +HGT:550 mb +HGT:600 mb +HGT:650 mb +HGT:700 mb +HGT:70 mb +HGT:750 mb +HGT:800 mb +HGT:850 mb +HGT:900 mb +HGT:925 mb +HGT:950 mb +HGT:975 mb +HGT:1 mb +HGT:2 mb +HGT:3 mb +HGT:5 mb +HGT:7 mb +HGT:0.1 mb +HGT:0.2 mb +HGT:0.4 mb +HGT:0.7 mb +HGT:0.01 mb +HGT:0.02 mb +HGT:0.04 mb +HGT:0.07 mb +HGT:cloud ceiling +HGT:highest tropospheric freezing level +HGT:max wind +HGT:PV=-2e-06 (Km^2/kg/s) surface +HGT:PV=2e-06 (Km^2/kg/s) surface +HGT:surface +HGT:tropopause +HINDEX:surface +HLCY:3000-0 m above ground +HPBL:surface +ICAHT:max wind +ICAHT:tropopause +ICEC:surface +ICETK:surface +ICETMP:surface +ICSEV:100 mb +ICSEV:150 mb +ICSEV:200 mb +ICSEV:250 mb +ICSEV:300 mb +ICSEV:350 mb +ICSEV:400 mb +ICSEV:450 mb +ICSEV:500 mb +ICSEV:550 mb +ICSEV:600 mb +ICSEV:650 mb +ICSEV:700 mb +ICSEV:750 mb +ICSEV:800 mb +ICSEV:850 mb +ICSEV:900 mb +ICSEV:950 mb +ICSEV:1000 mb +ICMR:50 mb +ICMR:1000 mb +ICMR:100 mb +ICMR:150 mb +ICMR:200 mb +ICMR:250 mb +ICMR:300 mb +ICMR:350 mb +ICMR:400 mb +ICMR:450 mb +ICMR:500 mb +ICMR:550 mb +ICMR:600 mb +ICMR:650 mb +ICMR:700 mb +ICMR:750 mb +ICMR:800 mb +ICMR:850 mb +ICMR:900 mb +ICMR:925 mb +ICMR:950 mb +ICMR:975 mb +ICMR:1 hybrid level +LAND:surface +LCDC:low cloud layer +LFTX:surface +LHTFL:surface +MASSMR:1000 mb +MASSMR:100 mb +MASSMR:10 mb +MASSMR:15 mb +MASSMR:150 mb +MASSMR:20 mb +MASSMR:200 mb +MASSMR:250 mb +MASSMR:300 mb +MASSMR:30 mb +MASSMR:350 mb +MASSMR:40 mb +MASSMR:400 mb +MASSMR:450 mb +MASSMR:500 mb +MASSMR:50 mb +MASSMR:550 mb +MASSMR:600 mb +MASSMR:650 mb +MASSMR:700 mb +MASSMR:70 mb +MASSMR:750 mb +MASSMR:800 mb +MASSMR:850 mb +MASSMR:900 mb +MASSMR:925 mb +MASSMR:950 mb +MASSMR:975 mb +MASSMR:1 mb +MASSMR:2 mb +MASSMR:3 mb +MASSMR:5 mb +MASSMR:7 mb +MASSMR:0.1 mb +MASSMR:0.2 mb +MASSMR:0.4 mb +MASSMR:0.7 mb +MASSMR:0.01 mb +MASSMR:0.02 mb +MASSMR:0.04 mb +MASSMR:0.07 mb +MASSMR:1 hybrid level +MSLET:mean sea level +O3MR:1000 mb +O3MR:100 mb +O3MR:10 mb +O3MR:15 mb +O3MR:150 mb +O3MR:20 mb +O3MR:200 mb +O3MR:250 mb +O3MR:300 mb +O3MR:30 mb +O3MR:350 mb +O3MR:40 mb +O3MR:400 mb +O3MR:450 mb +O3MR:500 mb +O3MR:50 mb +O3MR:550 mb +O3MR:600 mb +O3MR:650 mb +O3MR:700 mb +O3MR:70 mb +O3MR:750 mb +O3MR:800 mb +O3MR:850 mb +O3MR:900 mb +O3MR:925 mb +O3MR:950 mb +O3MR:975 mb +O3MR:1 mb +O3MR:2 mb +O3MR:3 mb +O3MR:5 mb +O3MR:7 mb +O3MR:0.1 mb +O3MR:0.2 mb +O3MR:0.4 mb +O3MR:0.7 mb +O3MR:0.01 mb +O3MR:0.02 mb +O3MR:0.04 mb +O3MR:0.07 mb +MCDC:middle cloud layer +PEVPR:surface +PLPL:255-0 mb above ground +PMTC:1000 mb +PMTC:100 mb +PMTC:10 mb +PMTC:15 mb +PMTC:150 mb +PMTC:20 mb +PMTC:200 mb +PMTC:250 mb +PMTC:300 mb +PMTC:30 mb +PMTC:350 mb +PMTC:40 mb +PMTC:400 mb +PMTC:450 mb +PMTC:500 mb +PMTC:50 mb +PMTC:550 mb +PMTC:600 mb +PMTC:650 mb +PMTC:700 mb +PMTC:70 mb +PMTC:750 mb +PMTC:800 mb +PMTC:850 mb +PMTC:900 mb +PMTC:925 mb +PMTC:950 mb +PMTC:975 mb +PMTC:1 mb +PMTC:2 mb +PMTC:3 mb +PMTC:5 mb +PMTC:7 mb +PMTC:0.1 mb +PMTC:0.2 mb +PMTC:0.4 mb +PMTC:0.7 mb +PMTC:0.01 mb +PMTC:0.02 mb +PMTC:0.04 mb +PMTC:0.07 mb +PMTC:1 hybrid level +PMTC:entire atmosphere +PMTC:surface +PMTF:1000 mb +PMTF:100 mb +PMTF:10 mb +PMTF:15 mb +PMTF:150 mb +PMTF:20 mb +PMTF:200 mb +PMTF:250 mb +PMTF:300 mb +PMTF:30 mb +PMTF:350 mb +PMTF:40 mb +PMTF:400 mb +PMTF:450 mb +PMTF:500 mb +PMTF:50 mb +PMTF:550 mb +PMTF:600 mb +PMTF:650 mb +PMTF:700 mb +PMTF:70 mb +PMTF:750 mb +PMTF:800 mb +PMTF:850 mb +PMTF:900 mb +PMTF:925 mb +PMTF:950 mb +PMTF:975 mb +PMTF:1 mb +PMTF:2 mb +PMTF:3 mb +PMTF:5 mb +PMTF:7 mb +PMTF:0.1 mb +PMTF:0.2 mb +PMTF:0.4 mb +PMTF:0.7 mb +PMTF:0.01 mb +PMTF:0.02 mb +PMTF:0.04 mb +PMTF:0.07 mb +PMTF:1 hybrid level +PMTF:entire atmosphere +PMTF:surface +POT:0.995 sigma level +PRATE:surface +PRES:80 m above ground +PRES:convective cloud bottom level +PRES:convective cloud top level +PRES:high cloud bottom level +PRES:high cloud top level +PRES:low cloud bottom level +PRES:low cloud top level +PRES:max wind +PRES:middle cloud bottom level +PRES:middle cloud top level +PRES:PV=-2e-06 (Km^2/kg/s) surface +PRES:PV=2e-06 (Km^2/kg/s) surface +PRES:surface +PRES:tropopause +PRMSL:mean sea level +PWAT:entire atmosphere +REFC:entire atmosphere +REFD:1 hybrid level +REFD:2 hybrid level +REFD:1000 m above ground +REFD:4000 m above ground +RH:0.33-1 sigma layer +RH:0.44-0.72 sigma layer +RH:0.44-1 sigma layer +RH:0.72-0.94 sigma layer +RH:0.995 sigma level +RH:0C isotherm +RH:1000 mb +RH:100 mb +RH:10 mb +RH:15 mb +RH:150 mb +RH:20 mb +RH:200 mb +RH:250 mb +RH:2 m above ground +RH:300 mb +RH:30-0 mb above ground +RH:30 mb +RH:350 mb +RH:40 mb +RH:400 mb +RH:450 mb +RH:500 mb +RH:50 mb +RH:550 mb +RH:600 mb +RH:650 mb +RH:700 mb +RH:70 mb +RH:750 mb +RH:800 mb +RH:850 mb +RH:900 mb +RH:925 mb +RH:950 mb +RH:975 mb +RH:1 mb +RH:2 mb +RH:3 mb +RH:5 mb +RH:7 mb +RH:0.1 mb +RH:0.2 mb +RH:0.4 mb +RH:0.7 mb +RH:0.01 mb +RH:0.02 mb +RH:0.04 mb +RH:0.07 mb +RH:entire atmosphere (considered as a single layer) +RH:highest tropospheric freezing level +RWMR:50 mb +RWMR:1000 mb +RWMR:100 mb +RWMR:150 mb +RWMR:200 mb +RWMR:250 mb +RWMR:300 mb +RWMR:350 mb +RWMR:400 mb +RWMR:450 mb +RWMR:500 mb +RWMR:550 mb +RWMR:600 mb +RWMR:650 mb +RWMR:700 mb +RWMR:750 mb +RWMR:800 mb +RWMR:850 mb +RWMR:900 mb +RWMR:925 mb +RWMR:950 mb +RWMR:975 mb +RWMR:1 hybrid level +SCTAOTK:entire atmosphere +SEDMFLX:entire atmosphere +SHTFL:surface +SFCR:surface +SOILW:0-0.1 m below ground +SOILW:0.1-0.4 m below ground +SOILW:0.4-1 m below ground +SOILW:1-2 m below ground +SOTYP:surface +SPFH:1000 mb +SPFH:100 mb +SPFH:10 mb +SPFH:15 mb +SPFH:150 mb +SPFH:20 mb +SPFH:200 mb +SPFH:250 mb +SPFH:300 mb +SPFH:30 mb +SPFH:350 mb +SPFH:40 mb +SPFH:400 mb +SPFH:450 mb +SPFH:500 mb +SPFH:50 mb +SPFH:550 mb +SPFH:600 mb +SPFH:650 mb +SPFH:700 mb +SPFH:70 mb +SPFH:750 mb +SPFH:800 mb +SPFH:850 mb +SPFH:900 mb +SPFH:925 mb +SPFH:950 mb +SPFH:975 mb +SPFH:1 mb +SPFH:2 mb +SPFH:3 mb +SPFH:5 mb +SPFH:7 mb +SPFH:0.1 mb +SPFH:0.2 mb +SPFH:0.4 mb +SPFH:0.7 mb +SPFH:0.01 mb +SPFH:0.02 mb +SPFH:0.04 mb +SPFH:0.07 mb +SPFH:2 m above ground +SPFH:30-0 mb above ground +SPFH:80 m above ground +SNMR:50 mb +SNMR:1000 mb +SNMR:100 mb +SNMR:150 mb +SNMR:200 mb +SNMR:250 mb +SNMR:300 mb +SNMR:350 mb +SNMR:400 mb +SNMR:450 mb +SNMR:500 mb +SNMR:550 mb +SNMR:600 mb +SNMR:650 mb +SNMR:700 mb +SNMR:750 mb +SNMR:800 mb +SNMR:850 mb +SNMR:900 mb +SNMR:925 mb +SNMR:950 mb +SNMR:975 mb +SNMR:1 hybrid level +SOILL:0-0.1 m below ground +SOILL:0.1-0.4 m below ground +SOILL:0.4-1 m below ground +SOILL:1-2 m below ground +SSALBK:entire atmosphere +SUNSD:surface +TCDC:50 mb +TCDC:1000 mb +TCDC:100 mb +TCDC:150 mb +TCDC:200 mb +TCDC:250 mb +TCDC:300 mb +TCDC:350 mb +TCDC:400 mb +TCDC:450 mb +TCDC:500 mb +TCDC:550 mb +TCDC:600 mb +TCDC:650 mb +TCDC:700 mb +TCDC:750 mb +TCDC:800 mb +TCDC:850 mb +TCDC:900 mb +TCDC:925 mb +TCDC:950 mb +TCDC:975 mb +TCDC:boundary layer cloud layer +TCDC:convective cloud layer +TCDC:entire atmosphere +TCDC:high cloud layer +TCDC:low cloud layer +TCDC:middle cloud layer +TMAX:2 m above ground +TMIN:2 m above ground +TSOIL:0-0.1 m below ground +TSOIL:0.1-0.4 m below ground +TSOIL:0.4-1 m below ground +TMP:0.995 sigma level +TMP:1000 mb +TMP:100 m above ground +TMP:100 mb +TMP:10 mb +TMP:15 mb +TSOIL:1-2 m below ground +TMP:150 mb +TMP:1829 m above mean sea level +TMP:200 mb +TMP:20 mb +TMP:250 mb +TMP:2743 m above mean sea level +TMP:2 m above ground +TMP:300 mb +TMP:30-0 mb above ground +TMP:30 mb +TMP:350 mb +TMP:3658 m above mean sea level +TMP:400 mb +TMP:40 mb +TMP:450 mb +TMP:500 mb +TMP:50 mb +TMP:550 mb +TMP:600 mb +TMP:650 mb +TMP:700 mb +TMP:70 mb +TMP:750 mb +TMP:800 mb +TMP:80 m above ground +TMP:850 mb +TMP:900 mb +TMP:925 mb +TMP:950 mb +TMP:975 mb +TMP:1 mb +TMP:2 mb +TMP:3 mb +TMP:5 mb +TMP:7 mb +TMP:0.1 mb +TMP:0.2 mb +TMP:0.4 mb +TMP:0.7 mb +TMP:0.01 mb +TMP:0.02 mb +TMP:0.04 mb +TMP:0.07 mb +TMP:high cloud top level +TMP:low cloud top level +TMP:max wind +TMP:middle cloud top level +TMP:PV=-2e-06 (Km^2/kg/s) surface +TMP:PV=2e-06 (Km^2/kg/s) surface +TMP:surface +TMP:tropopause +TOZNE:entire atmosphere (considered as a single layer) +UFLX:surface +UGRD:0.995 sigma level +UGRD:1000 mb +UGRD:100 m above ground +UGRD:100 mb +UGRD:10 m above ground +UGRD:10 mb +UGRD:15 mb +UGRD:150 mb +UGRD:1829 m above mean sea level +UGRD:200 mb +UGRD:20 mb +UGRD:20 m above ground +UGRD:250 mb +UGRD:2743 m above mean sea level +UGRD:300 mb +UGRD:30 m above ground +UGRD:30-0 mb above ground +UGRD:30 mb +UGRD:350 mb +UGRD:3658 m above mean sea level +UGRD:40 mb +UGRD:400 mb +UGRD:40 m above ground +UGRD:450 mb +UGRD:500 mb +UGRD:50 mb +UGRD:50 m above ground +UGRD:550 mb +UGRD:600 mb +UGRD:650 mb +UGRD:700 mb +UGRD:70 mb +UGRD:750 mb +UGRD:800 mb +UGRD:80 m above ground +UGRD:850 mb +UGRD:900 mb +UGRD:925 mb +UGRD:950 mb +UGRD:975 mb +UGRD:1 mb +UGRD:2 mb +UGRD:3 mb +UGRD:5 mb +UGRD:7 mb +UGRD:0.1 mb +UGRD:0.2 mb +UGRD:0.4 mb +UGRD:0.7 mb +UGRD:0.01 mb +UGRD:0.02 mb +UGRD:0.04 mb +UGRD:0.07 mb +UGRD:max wind +UGRD:planetary boundary layer +UGRD:PV=-2e-06 (Km^2/kg/s) surface +UGRD:PV=2e-06 (Km^2/kg/s) surface +UGRD:tropopause +U-GWD:surface +ULWRF:surface +ULWRF:top of atmosphere +USTM:6000-0 m above ground +USWRF:surface +USWRF:top of atmosphere +VEG:surface +VFLX:surface +VGRD:0.995 sigma level +VGRD:1000 mb +VGRD:100 m above ground +VGRD:100 mb +VGRD:10 m above ground +VGRD:10 mb +VGRD:15 mb +VGRD:150 mb +VGRD:1829 m above mean sea level +VGRD:200 mb +VGRD:20 mb +VGRD:20 m above ground +VGRD:250 mb +VGRD:2743 m above mean sea level +VGRD:300 mb +VGRD:30 m above ground +VGRD:30-0 mb above ground +VGRD:30 mb +VGRD:350 mb +VGRD:3658 m above mean sea level +VGRD:40 mb +VGRD:400 mb +VGRD:40 m above ground +VGRD:450 mb +VGRD:500 mb +VGRD:50 mb +VGRD:50 m above ground +VGRD:550 mb +VGRD:600 mb +VGRD:650 mb +VGRD:700 mb +VGRD:70 mb +VGRD:750 mb +VGRD:800 mb +VGRD:80 m above ground +VGRD:850 mb +VGRD:900 mb +VGRD:925 mb +VGRD:950 mb +VGRD:975 mb +VGRD:1 mb +VGRD:2 mb +VGRD:3 mb +VGRD:5 mb +VGRD:7 mb +VGRD:0.1 mb +VGRD:0.2 mb +VGRD:0.4 mb +VGRD:0.7 mb +VGRD:0.01 mb +VGRD:0.02 mb +VGRD:0.04 mb +VGRD:0.07 mb +VGRD:max wind +VGRD:planetary boundary layer +VGRD:PV=-2e-06 (Km^2/kg/s) surface +VGRD:PV=2e-06 (Km^2/kg/s) surface +VGRD:tropopause +V-GWD:surface +VRATE:planetary boundary layer +VSTM:6000-0 m above ground +DZDT:1000 mb +DZDT:100 mb +DZDT:10 mb +DZDT:15 mb +DZDT:150 mb +DZDT:20 mb +DZDT:200 mb +DZDT:250 mb +DZDT:300 mb +DZDT:30 mb +DZDT:350 mb +DZDT:40 mb +DZDT:400 mb +DZDT:450 mb +DZDT:500 mb +DZDT:50 mb +DZDT:550 mb +DZDT:600 mb +DZDT:650 mb +DZDT:700 mb +DZDT:70 mb +DZDT:750 mb +DZDT:800 mb +DZDT:850 mb +DZDT:900 mb +DZDT:925 mb +DZDT:950 mb +DZDT:975 mb +DZDT:1 mb +DZDT:2 mb +DZDT:3 mb +DZDT:5 mb +DZDT:7 mb +DZDT:0.1 mb +DZDT:0.2 mb +DZDT:0.4 mb +DZDT:0.7 mb +DZDT:0.01 mb +DZDT:0.02 mb +DZDT:0.04 mb +DZDT:0.07 mb +VVEL:0.995 sigma level +VVEL:1000 mb +VVEL:100 mb +VVEL:10 mb +VVEL:15 mb +VVEL:150 mb +VVEL:20 mb +VVEL:200 mb +VVEL:250 mb +VVEL:300 mb +VVEL:30 mb +VVEL:350 mb +VVEL:40 mb +VVEL:400 mb +VVEL:450 mb +VVEL:500 mb +VVEL:50 mb +VVEL:550 mb +VVEL:600 mb +VVEL:650 mb +VVEL:700 mb +VVEL:70 mb +VVEL:750 mb +VVEL:800 mb +VVEL:850 mb +VVEL:900 mb +VVEL:925 mb +VVEL:950 mb +VVEL:975 mb +VVEL:1 mb +VVEL:2 mb +VVEL:3 mb +VVEL:5 mb +VVEL:7 mb +VVEL:0.1 mb +VVEL:0.2 mb +VVEL:0.4 mb +VVEL:0.7 mb +VVEL:0.01 mb +VVEL:0.02 mb +VVEL:0.04 mb +VVEL:0.07 mb +VWSH:PV=-2e-06 (Km^2/kg/s) surface +VWSH:PV=2e-06 (Km^2/kg/s) surface +VWSH:tropopause +WATR:surface +WEASD:surface +WILT:surface +WLSMFLX:entire atmosphere +SNOD:surface +VIS:surface +ICEG:10 m above mean sea level diff --git a/parm/makefile b/parm/makefile index d06ab47ea..15ebcca36 100644 --- a/parm/makefile +++ b/parm/makefile @@ -20,12 +20,17 @@ GEFSFLATFILENAME = postxconfig-NT-GEFS.txt GEFSANLFLATFILENAME = postxconfig-NT-GEFS-ANL.txt GEFSF00FLATFILENAME = postxconfig-NT-GEFS-F00.txt FV3LAMFLATFILENAME = postxconfig-NT-fv3lam.txt -HAFSFLATFILENAME = postxconfig-NT-hafs.txt +HAFSSATFLATFILENAME = postxconfig-NT-hafs_sat.txt +HAFSNOSATFLATFILENAME = postxconfig-NT-hafs_nosat.txt GFSTWOFLATFILENAME = postxconfig-NT-GFS-TWO.txt GFSTWOF00FLATFILENAME = postxconfig-NT-GFS-F00-TWO.txt HRRRFLATFILENAME = postxconfig-NT-hrrr.txt RAPFLATFILENAME = postxconfig-NT-rap.txt +RRFSFLATFILENAME = postxconfig-NT-fv3lam_rrfs.txt RTMA3DFLATFILENAME = postxconfig-NT-3drtma.txt +UFSAEROSOLFLATFILENAME = postxconfig-NT-UFS-aerosol.txt +UFSAERO00FLATFILENAME = postxconfig-NT-UFS-aerosol-F00.txt +AQMFLATFILENAME = postxconfig-NT-AQM.txt # Source Post XML file GFSAVAILXMLFILENAME = post_avblflds.xml @@ -45,15 +50,22 @@ GEFSANLCTRLFILENAME = postcntrl_gefs_anl.xml GEFSCTRLF00FILENAME = postcntrl_gefs_f00.xml FV3LAMAVAILXMLFILENAME = post_avblflds.xml FV3LAMCTRLFILENAME = fv3lam.xml -HAFSCTRLFILENAME = postcntrl_hafs.xml +HAFSSATCTRLFILENAME = postcntrl_hafs_sat.xml +HAFSNOSATCTRLFILENAME = postcntrl_hafs_nosat.xml GFSTWOCTRLFILENAME = postcntrl_gfs_two.xml GFSTWOF00CTRLFILENAME = postcntrl_gfs_f00_two.xml HRRRAVAILXMLFILENAME = post_avblflds_raphrrr.xml RAPAVAILXMLFILENAME = post_avblflds_raphrrr.xml HRRRCTRLFILENAME = hrrr_postcntrl.xml RAPCTRLFILENAME = rap_postcntrl.xml +RRFSAVAILXMLFILENAME = post_avblflds.xml +RRFSCTRLFILENAME = fv3lam_rrfs.xml RTMA3DCTRLFILENAME = 3drtma_postcntrl.xml RTMA3DAVAILXMLFILENAME = post_avblflds.xml +UFSAEROSOLCTRFILENAME = postcntrl_ufs_aerosol.xml +UFSAEROSOL00CTRFILENAME = postcntrl_ufs_aerosol_f00.xml +AQMCTRLFILENAME = aqm.xml +AVAILXMLFILENAME = post_avblflds.xml # Post flat file generator PERLXML = PostXMLPreprocessor.pl @@ -72,12 +84,17 @@ PERLXMLGEFS = /usr/bin/perl $(PERLXML) $(GEFSCTRLFILENAME) $(GFSAVAILXMLFILENAM PERLXMLGEFSANL = /usr/bin/perl $(PERLXML) $(GEFSANLCTRLFILENAME) $(GFSAVAILXMLFILENAME) $(GEFSANLFLATFILENAME) PERLXMLGEFSF00 = /usr/bin/perl $(PERLXML) $(GEFSCTRLF00FILENAME) $(GFSAVAILXMLFILENAME) $(GEFSF00FLATFILENAME) PERLXMLFV3LAM = /usr/bin/perl $(PERLXML) $(FV3LAMCTRLFILENAME) $(FV3LAMAVAILXMLFILENAME) $(FV3LAMFLATFILENAME) -PERLXMLHAFS = /usr/bin/perl $(PERLXML) $(HAFSCTRLFILENAME) $(FV3LAMAVAILXMLFILENAME) $(HAFSFLATFILENAME) +PERLXMLHAFSSAT = /usr/bin/perl $(PERLXML) $(HAFSSATCTRLFILENAME) $(FV3LAMAVAILXMLFILENAME) $(HAFSSATFLATFILENAME) +PERLXMLHAFSNOSAT = /usr/bin/perl $(PERLXML) $(HAFSNOSATCTRLFILENAME) $(FV3LAMAVAILXMLFILENAME) $(HAFSNOSATFLATFILENAME) PERLXMLGFSTWO = /usr/bin/perl $(PERLXML) $(GFSTWOCTRLFILENAME) $(GFSAVAILXMLFILENAME) $(GFSTWOFLATFILENAME) PERLXMLGFSTWOF00 = /usr/bin/perl $(PERLXML) $(GFSTWOF00CTRLFILENAME) $(GFSAVAILXMLFILENAME) $(GFSTWOF00FLATFILENAME) PERLXMLHRRR = /usr/bin/perl $(PERLXML) $(HRRRCTRLFILENAME) $(HRRRAVAILXMLFILENAME) $(HRRRFLATFILENAME) PERLXMLRAP = /usr/bin/perl $(PERLXML) $(RAPCTRLFILENAME) $(RAPAVAILXMLFILENAME) $(RAPFLATFILENAME) +PERLXMLRRFS = /usr/bin/perl $(PERLXML) $(RRFSCTRLFILENAME) $(RRFSAVAILXMLFILENAME) $(RRFSFLATFILENAME) PERLXML3DRTMA = /usr/bin/perl $(PERLXML) $(RTMA3DCTRLFILENAME) $(RTMA3DAVAILXMLFILENAME) $(RTMA3DFLATFILENAME) +PERLXMLUFSAEROSOL = /usr/bin/perl $(PERLXML) $(UFSAEROSOLCTRFILENAME) $(RTMA3DAVAILXMLFILENAME) $(UFSAEROSOLFLATFILENAME) +PERLXMLUFSAEROSOL00 = /usr/bin/perl $(PERLXML) $(UFSAEROSOL00CTRFILENAME) $(RTMA3DAVAILXMLFILENAME) $(UFSAERO00FLATFILENAME) +PERLXMLAQM = /usr/bin/perl $(PERLXML) $(AQMCTRLFILENAME) $(AVAILXMLFILENAME) $(AQMFLATFILENAME) # File to look for change GFSXMLS = $(GFSAVAILXMLFILENAME) $(GFSCTRLFILENAME) @@ -93,15 +110,20 @@ GEFSXMLS = $(GFSAVAILXMLFILENAME) $(GEFSCTRLFILENAME) GEFSANLXMLS = $(GFSAVAILXMLFILENAME) $(GEFSANLCTRLFILENAME) GEFSF00XMLS = $(GFSAVAILXMLFILENAME) $(GEFSCTRLF00FILENAME) FV3LAMXMLS = $(FV3LAMAVAILXMLFILENAME) $(FV3LAMCTRLFILENAME) -HAFSXMLS = $(FV3LAMAVAILXMLFILENAME) $(HAFSCTRLFILENAME) +HAFSSATXMLS = $(FV3LAMAVAILXMLFILENAME) $(HAFSSATCTRLFILENAME) +HAFSNOSATXMLS = $(FV3LAMAVAILXMLFILENAME) $(HAFSNOSATCTRLFILENAME) GFSTWOXMLS = $(GFSAVAILXMLFILENAME) $(GFSTWOCTRLFILENAME) GFSTWOF00XMLS = $(GFSAVAILXMLFILENAME) $(GFSTWOF00CTRLFILENAME) HRRRXMLS = $(HRRRAVAILXMLFILENAME) $(HRRRCTRLFILENAME) RAPXMLS = $(RAPAVAILXMLFILENAME) $(RAPCTRLFILENAME) +RRFSXMLS = $(RRFSAVAILXMLFILENAME) $(RRFSCTRLFILENAME) RTMA3DXMLS = $(RTMA3DAVAILXMLFILENAME) $(RTMA3DCTRLFILENAME) +UFSAEROSOLXMLS = $(RTMA3DAVAILXMLFILENAME) $(UFSAEROSOLCTRLFILENAME) +UFSAEROSOL00XMLS = $(RTMA3DAVAILXMLFILENAME) $(UFSAEROSOL00CTRLFILENAME) +AQMXMLS = $(AVAILXMLFILENAME) $(AQMCTRLFILENAME) # If action is triggered; run the following -all: $(GFSFLATFILENAME) $(GFSGOESFLATFILENAME) $(GFSANLFLATFILENAME) $(GFSF00FLATFILENAME) $(GFSFLUXFLATFILENAME) $(GFSFLUXF00FLATFILENAME) $(NMMFLATFILENAME) $(NGACFLATFILENAME) $(GEFSFLATFILENAME) $(GEFSANLFLATFILENAME) $(GEFSF00FLATFILENAME) $(FV3LAMFLATFILENAME) $(HAFSFLATFILENAME) $(GFSTWOFLATFILENAME) $(GFSTWOF00FLATFILENAME) $(HRRRFLATFILENAME) $(RAPFLATFILENAME) $(RTMA3DFLATFILENAME) +all: $(GFSFLATFILENAME) $(GFSGOESFLATFILENAME) $(GFSANLFLATFILENAME) $(GFSF00FLATFILENAME) $(GFSFLUXFLATFILENAME) $(GFSFLUXF00FLATFILENAME) $(NMMFLATFILENAME) $(NGACFLATFILENAME) $(GEFSFLATFILENAME) $(GEFSANLFLATFILENAME) $(GEFSF00FLATFILENAME) $(FV3LAMFLATFILENAME) $(HAFSSATFLATFILENAME) $(HAFSNOSATFLATFILENAME) $(GFSTWOFLATFILENAME) $(GFSTWOF00FLATFILENAME) $(HRRRFLATFILENAME) $(RAPFLATFILENAME) $(RRFSFLATFILENAME) $(RTMA3DFLATFILENAME) $(UFSAEROSOLFLATFILENAME) $(UFSAERO00FLATFILENAME) $(AQMFLATFILENAME) $(GFSFLATFILENAME): $(GFSXMLS) $(PERLXMLGFS) $(GFSGOESFLATFILENAME): $(GFSGOESXMLS) @@ -126,8 +148,10 @@ $(GEFSF00FLATFILENAME): $(GEFSF00XMLS) $(PERLXMLGEFSF00) $(FV3LAMFLATFILENAME): $(FV3LAMXMLS) $(PERLXMLFV3LAM) -$(HAFSFLATFILENAME): $(HAFSXMLS) - $(PERLXMLHAFS) +$(HAFSSATFLATFILENAME): $(HAFSSATXMLS) + $(PERLXMLHAFSSAT) +$(HAFSNOSATFLATFILENAME): $(HAFSNOSATXMLS) + $(PERLXMLHAFSNOSAT) $(GFSTWOFLATFILENAME): $(GFSTWOXMLS) $(PERLXMLGFSTWO) $(GFSTWOF00FLATFILENAME): $(GFSTWOF00XMLS) @@ -136,12 +160,20 @@ $(HRRRFLATFILENAME): $(HRRRXMLS) $(PERLXMLHRRR) $(RAPFLATFILENAME): $(RAPXMLS) $(PERLXMLRAP) +$(RRFSFLATFILENAME): $(RRFSXMLS) + $(PERLXMLRRFS) $(RTMA3DFLATFILENAME): $(RTMA3DXMLS) $(PERLXML3DRTMA) +$(UFSAEROSOLFLATFILENAME): $(UFSAEROSOLXMLS) + $(PERLXMLUFSAEROSOL) +$(UFSAERO00FLATFILENAME): $(UFSAEROSOL00XMLS) + $(PERLXMLUFSAEROSOL00) +$(AQMFLATFILENAME): $(AQMXMLS) + $(PERLXMLAQM) # Make clean clean: @echo @echo '==== CLEAN ===================================================' - /bin/rm -f $(GFSFLATFILENAME) $(GFSGOESFLATFILENAME) $(GFSANLFLATFILENAME) $(GFSF00FLATFILENAME) $(NMMFLATFILENAME) $(NGACFLATFILENAME) $(GEFSFLATFILENAME) $(GEFSANLFLATFILENAME) $(GEFSF00FLATFILENAME) $(FV3LAMFLATFILENAME) $(HAFSFLATFILENAME) $(GFSTWOFLATFILENAME) $(GFSTWOF00FLATFILENAME) $(HRRRFLATFILENAME) $(RAPFLATFILENAME) $(RTMA3DFLATFILENAME) + /bin/rm -f $(GFSFLATFILENAME) $(GFSGOESFLATFILENAME) $(GFSANLFLATFILENAME) $(GFSF00FLATFILENAME) $(NMMFLATFILENAME) $(NGACFLATFILENAME) $(GEFSFLATFILENAME) $(GEFSANLFLATFILENAME) $(GEFSF00FLATFILENAME) $(FV3LAMFLATFILENAME) $(HAFSSATFLATFILENAME) $(GFSTWOFLATFILENAME) $(GFSTWOF00FLATFILENAME) $(HRRRFLATFILENAME) $(RAPFLATFILENAME) $(RTMA3DFLATFILENAME) $(UFSAEROSOLFLATFILENAME) $(UFSAERO00FLATFILENAME) $(AQMFLATFILENAME) diff --git a/parm/nam_cntrl_cmaq.parm b/parm/nam_cntrl_cmaq.parm deleted file mode 100644 index f7ef1a9fd..000000000 --- a/parm/nam_cntrl_cmaq.parm +++ /dev/null @@ -1,1304 +0,0 @@ - KGTYPE******I5*******:(00255)********START OF THIS OUTPUT GRID****** - IMDLTY *I5* :(00089) - DATSET *A6* :(BGDAWP) - (PRESS ON MDL SFCS ) SCAL=( 3.0) - L=(11000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) - (HEIGHT ON MDL SFCS ) SCAL=(-5.0) - L=(11000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) - (TEMP ON MDL SFCS ) SCAL=(-4.0) - L=(11000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) - (POT TEMP ON MDL SFCS) SCAL=(-4.0) - L=(11000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) - (DWPT TEMP ON MDL SFC) SCAL=(-4.0) - L=(11000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) - (SPEC HUM ON MDL SFCS) SCAL=( 3.0) - L=(10000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) - (REL HUM ON MDL SFCS ) SCAL=(-3.0) - L=(10000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) - (MST CNVG ON MDL SFCS) SCAL=( 3.0) - L=(00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) - (U WIND ON MDL SFCS ) SCAL=(-4.0) - L=(11000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) - (V WIND ON MDL SFCS ) SCAL=(-4.0) - L=(11000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) - (OMEGA ON MDL SFCS ) SCAL=(-5.0) - L=(10000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) - (W WIND ON MDL SFCS ) SCAL=(-5.0) - L=(10000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) - (ABS VORT ON MDL SFCS) SCAL=( 3.0) - L=(00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) - (STRMFUNC ON MDL SFCS) SCAL=( 3.0) - L=(00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) - (TRBLNT KE ON MDL SFC) SCAL=( 3.0) - L=(11000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) - (RCHDSN NO ON MDL SFC) SCAL=( 3.0) - L=(00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) - (RAIN ON MDL SFCS ) SCAL=( 3.0) - L=(11000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) - (SNOW ON MDL SFCS ) SCAL=( 3.0) - L=(11000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) - (F_RimeF ON MDL SFCS ) SCAL=( 3.0) - 1=(11000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) - (CONDENSATE MDL SFCS ) SCAL=( 3.0) - L=(11000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) - (RADAR REFL MDL SFCS ) SCAL=(-4.0) - L=(11000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) - (MASTER LENGTH SCALE ) SCAL=( 3.0) - L=(10000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) - (ASYMPT MSTR LEN SCL ) SCAL=( 3.0) - L=(00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) - (HEIGHT OF PRESS SFCS) SCAL=(-5.0) - L=(11111 11111 11111 11111 11111 11111 11111 11111 11111 11000 00000 00000 00000 00000) - (TEMP ON PRESS SFCS ) SCAL=(-4.0) - L=(11111 11111 11111 11111 11111 11111 11111 11111 11111 11000 00000 00000 00000 00000) - (POT TEMP ON P SFCS ) SCAL=(-4.0) - L=(00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) - (DWPT TEMP ON P SFCS ) SCAL=(-4.0) - L=(11111 11111 11111 11111 11111 11111 11111 11111 11111 11000 00000 00000 00000 00000) - (SPEC HUM ON P SFCS ) SCAL=( 3.0) - L=(11111 11111 11111 11111 11111 11111 11111 11111 11111 11000 00000 00000 00000 00000) - (REL HUMID ON P SFCS ) SCAL=(-3.0) - L=(11111 11111 11111 11111 11111 11111 11111 11111 11111 11000 00000 00000 00000 00000) - (MST CNVG ON P SFCS ) SCAL=( 3.0) - L=(00000 00000 00000 00000 00000 00000 00000 00001 00010 00000 00000 00000 00000 00000) - (U WIND ON PRESS SFCS) SCAL=(-4.0) - L=(11111 11111 11111 11111 11111 11111 11111 11111 11111 11000 00000 00000 00000 00000) - (V WIND ON PRESS SFCS) SCAL=(-4.0) - L=(11111 11111 11111 11111 11111 11111 11111 11111 11111 11000 00000 00000 00000 00000) - (OMEGA ON PRESS SFCS ) SCAL=(-5.0) - L=(11111 11111 11111 11111 11111 11111 11111 11111 11111 11000 00000 00000 00000 00000) - (W WIND ON P SFCS ) SCAL=(-5.0) - L=(11111 11111 11111 11111 11111 11111 11111 11111 11111 11000 00000 00000 00000 00000) - (ABS VORT ON P SFCS ) SCAL=( 3.0) - L=(00000 00000 00010 10100 01000 10000 00010 10001 00100 10000 00000 00000 00000 00000) - (STRMFUNC ON P SFCS ) SCAL=( 3.0) - L=(00000 00000 00000 10000 00000 10000 00000 00000 00000 00000 00000 00000 00000 00000) - (TRBLNT KE ON P SFCS ) SCAL=( 3.0) - L=(11111 11111 11111 11111 11111 11111 11111 11111 11111 11000 00000 00000 00000 00000) - (CLOUD ICE ON P SFCS ) SCAL=( 3.0) - L=(11111 11111 11111 11111 11111 11111 11111 11111 11111 11000 00000 00000 00000 00000) - (CLOUD WATR ON P SFCS) SCAL=( 3.0) - L=(11111 11111 11111 11111 11111 11111 11111 11111 11111 11000 00000 00000 00000 00000) - (RAIN ON P SFCS ) SCAL=( 3.0) - L=(11111 11111 11111 11111 11111 11111 11111 11111 11111 11000 00000 00000 00000 00000) - (SNOW ON P SFCS ) SCAL=( 3.0) - L=(11111 11111 11111 11111 11111 11111 11111 11111 11111 11000 00000 00000 00000 00000) - (F_RimeF ON P SFCS ) SCAL=( 3.0) - L=(11111 11111 11111 11111 11111 11111 11111 11111 11111 11000 00000 00000 00000 00000) - (RADAR REFL ON P SFCS) SCAL=(-4.0) - L=(00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) - (RADFLX TMP TNDY ON P) SCAL=( 5.0) - L=(11111 11111 11111 11111 11111 11111 11111 11111 11111 11000 00000 00000 00000 00000) - (MESINGER MEAN SLP ) SCAL=(-0.1) - L=(10000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) - (SHUELL MEAN SLP ) SCAL=(-0.1) - L=(10000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) - (SHELTER PRESSURE ) SCAL=( 3.0) - L=(00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) - (SHELTER TEMPERATURE ) SCAL=(-4.0) - L=(10000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) - (SHELTER SPEC HUMID ) SCAL=( 3.0) - L=(10000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) - (SHELTER DEWPOINT ) SCAL=(-4.0) - L=(10000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) - (SHELTER REL HUMID ) SCAL=(-0.1) - L=(10000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) - (U WIND AT ANEMOM HT ) SCAL=(-4.0) - L=(10000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) - (V WIND AT ANEMOM HT ) SCAL=(-4.0) - L=(10000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) - (SFC WIND GUST ) SCAL=( 3.0) - L=(10000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) - (LIFT PCL LVL PRESS ) SCAL=( 3.0) - L=(10000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) - (POT TEMP AT 10 M ) SCAL=(-4.0) - L=(10000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) - (SPEC HUM AT 10 M ) SCAL=( 3.0) - L=(10000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) - (SURFACE PRESSURE ) SCAL=( 3.0) - L=(10000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) - (SURFACE HEIGHT ) SCAL=(-2.0) - L=(10000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) - (SURFACE POT TEMP ) SCAL=(-4.0) - L=(10000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) - (SURFACE SPEC HUMID ) SCAL=( 3.0) - L=(10000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) - (SURFACE DEWPOINT ) SCAL=(-4.0) - L=(00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) - (SURFACE REL HUMID ) SCAL=(-0.1) - L=(00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) - (SFC (SKIN) TEMPRATUR) SCAL=(-4.0) - L=(10000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) - (BOTTOM SOIL TEMP ) SCAL=( 3.0) - L=(10000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) - (SOIL TEMPERATURE ) SCAL=( 3.0) - L=(11110 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) - (SOIL MOISTURE ) SCAL=( 3.0) - L=(11110 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) - (LIQUID SOIL MOISTURE) SCAL=( 3.0) - L=(11110 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) - (TOTAL SOIL MOISTURE ) SCAL=( 3.0) - L=(10000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) - (PLANT CANOPY SFC WTR) SCAL=( 3.0) - L=(10000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) - (SNOW WATER EQUIVALNT) SCAL=( 3.0) - L=(10000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) - (PERCENT SNOW COVER ) SCAL=( 3.0) - L=(10000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) - (SFC EXCHANGE COEF ) SCAL=( 3.0) - L=(10000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) - (GREEN VEG COVER ) SCAL=( 3.0) - L=(10000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) - (VEGETATION TYPE ) SCAL=( 3.0) - L=(10000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) - (SOIL TYPE ) SCAL=( 3.0) - L=(10000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) - (SLOPE TYPE ) SCAL=( 3.0) - L=(00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) - (SNOW FREE ALBEDO ) SCAL=( 3.0) - L=(10000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) - (MAXIMUM SNOW ALBEDO ) SCAL=( 3.0) - L=(10000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) - (CANOPY CONDUCTANCE ) SCAL=( 3.0) - L=(10000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) - (CANOPY COND SOLAR ) SCAL=( 3.0) - L=(10000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) - (CANOPY COND TEMP ) SCAL=( 3.0) - L=(10000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) - (CANOPY COND HUMID ) SCAL=( 3.0) - L=(10000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) - (CANOPY COND SOILM ) SCAL=( 3.0) - L=(10000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) - (SOIL MOIST REFERENCE) SCAL=( 3.0) - L=(10000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) - (SOIL MOIST POROSITY ) SCAL=( 3.0) - L=(10000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) - (NO OF ROOT LAYERS ) SCAL=( 1.0) - L=(10000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) - (MIN STOMATAL RESIST ) SCAL=( 3.0) - L=(10000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) - (SNOW DEPTH ) SCAL=( 6.0) - L=(10000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) - (AIR DRY SOIL MOIST ) SCAL=( 3.0) - L=(10000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) - (SOIL MOIST WILT PT ) SCAL=( 3.0) - L=(10000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) - (SOIL MOISTURE AVAIL ) SCAL=( 3.0) - L=(10000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) - (INST GROUND HEAT FLX) SCAL=(-3.0) - L=(10000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) - (LIFTED INDEX--SURFCE) SCAL=( 3.0) - L=(10000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) - (LIFTED INDEX--BEST ) SCAL=( 3.0) - L=(10000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) - (LIFTED INDEX--BNDLYR) SCAL=( 3.0) - L=(10000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) - (CNVCT AVBL POT ENRGY) SCAL=( 3.0) - L=(11110 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) - (CNVCT INHIBITION ) SCAL=( 3.0) - L=(11110 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) - (PRECIPITABLE WATER ) SCAL=(-3.0) - L=(10000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) - (STORM REL HELICITY ) SCAL=( 3.0) - L=(11000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) - (U COMP STORM MOTION ) SCAL=( 3.0) - L=(10000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) - (V COMP STORM MOTION ) SCAL=( 3.0) - L=(10000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) - (ACM TOTAL PRECIP ) SCAL=(-3.0) - L=(10000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) - (ACM CONVCTIVE PRECIP) SCAL=(-3.0) - L=(10000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) - (ACM GRD SCALE PRECIP) SCAL=(-3.0) - L=(10000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) - (ACM SNOWFALL ) SCAL=(-3.0) - L=(10000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) - (ACM SNOW TOTAL/MELT ) SCAL=(-3.0) - L=(10000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) - (ACM STORM SFC RNOFF ) SCAL=(-3.0) - L=(10000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) - (ACM BSFL-GDWR RNOFF ) SCAL=(-3.0) - L=(10000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) - (INSTANT PRECIP TYPE ) SCAL=( 1.0) - L=(10000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) - (INSTANT PRECIP RATE ) SCAL=( 3.0) - L=(10000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) - (CONV PRECIP RATE ) SCAL=( 3.0) - L=(10000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) - (FROZEN FRAC CLD SCHM) SCAL=(-4.0) - L=(10000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) - (CLD WTR ON MDL SFCS ) SCAL=( 3.0) - L=(11000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) - (CLD ICE ON MDL SFCS ) SCAL=( 3.0) - L=(11000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) - (CLD FRAC ON MDL SFCS) SCAL=( 3.0) - L=(11000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) - (LOW CLOUD FRACTION ) SCAL=( 3.0) - L=(10000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) - (MID CLOUD FRACTION ) SCAL=( 3.0) - L=(10000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) - (HIGH CLOUD FRACTION ) SCAL=( 3.0) - L=(10000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) - (TOTAL CLD FRACTION ) SCAL=( 3.0) - L=(10000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) - (AVG TOTAL CLD FRAC ) SCAL=( 3.0) - L=(10000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) - (AVG STRAT CLD FRAC ) SCAL=( 3.0) - L=(10000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) - (AVG CNVCT CLD FRAC ) SCAL=( 3.0) - L=(10000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) - (VISIBILITY ) SCAL=( 2.7) - L=(10000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) - (LCL AGL HEIGHT ) SCAL=( 3.0) - L=(10000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) - (LCL PRESSURE ) SCAL=( 3.0) - L=(10000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) - (AVE GRDSCL RN TMPTDY) SCAL=( 3.0) - L=(00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) - (AVE CNVCT RN TMPTDY ) SCAL=( 2.7) - L=(00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) - (RADFLX CNVG TMP TNDY) SCAL=( 3.0) - L=(00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) - (SW RAD TEMP TNDY ) SCAL=( 3.0) - L=(00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) - (LW RAD TEMP TNDY ) SCAL=( 3.0) - L=(00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) - (INSTN OUT SFC SW RAD) SCAL=(-3.0) - L=(10000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) - (INSTN OUT SFC LW RAD) SCAL=(-3.0) - L=(10000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) - (AVE INCMG SFC SW RAD) SCAL=(-3.0) - L=(10000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) - (AVE INCMG SFC LW RAD) SCAL=(-3.0) - L=(10000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) - (AVE OUTGO SFC SW RAD) SCAL=(-3.0) - L=(10000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) - (AVE OUTGO SFC LW RAD) SCAL=(-3.0) - L=(10000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) - (AVE OUTGO TOA SW RAD) SCAL=(-3.0) - L=(10000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) - (AVE OUTGO TOA LW RAD) SCAL=(-3.0) - L=(10000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) - (INSTN OUT TOA LW RAD) SCAL=(-3.0) - L=(10000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) - (BRIGHTNESS TEMP ) SCAL=(-4.0) - L=(00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) - (BRIGHTNESS TEMP NCAR) SCAL=(-4.0) - L=(10000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) - (INSTN INC SFC SW RAD) SCAL=(-3.0) - L=(10000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) - (INSTN INC SFC LW RAD) SCAL=(-3.0) - L=(10000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) - (INSTN CLR INC SFC SW) SCAL=(-3.0) - L=(10000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) - (ROUGHNESS LENGTH ) SCAL=( 4.0) - L=(10000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) - (FRICTION VELOCITY ) SCAL=( 3.0) - L=(10000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) - (SFC DRAG COEFFICIENT) SCAL=( 3.0) - L=(10000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) - (SFC U WIND STRESS ) SCAL=( 3.0) - L=(10000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) - (SFC V WIND STRESS ) SCAL=( 3.0) - L=(10000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) - (AVE SFC SENHEAT FX ) SCAL=(-3.0) - L=(10000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) - (AVE GROUND HEAT FX ) SCAL=(-3.0) - L=(10000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) - (AVE SNO PHSCNG HT FX) SCAL=(-3.0) - L=(10000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) - (AVE SFC LATHEAT FX ) SCAL=(-3.0) - L=(10000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) - (AVE SFC MOMENTUM FX ) SCAL=(-3.0) - L=(00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) - (ACC SFC EVAPORATION ) SCAL=( 3.0) - L=(10000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) - (ACC POT EVAPORATION ) SCAL=( 3.0) - L=(10000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) - (INST SFC SENHEAT FX ) SCAL=(-3.0) - L=(10000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) - (INST SFC LATHEAT FX ) SCAL=(-3.0) - L=(10000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) - (LATITUDE ) SCAL=( 6.0) - L=(10000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) - (LONGITUDE ) SCAL=( 7.0) - L=(10000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) - (LAND/SEA MASK ) SCAL=( 1.0) - L=(10000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) - (SEA ICE MASK ) SCAL=( 1.0) - L=(10000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) - (MASS POINT MDL SFC ) SCAL=( 2.0) - L=(00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) - (VEL POINT MDL SFC ) SCAL=( 2.0) - L=(00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) - (SFC MIDDAY ALBEDO ) SCAL=( 3.0) - L=(10000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) - (SEA SFC TEMPERATURE ) SCAL=(-4.0) - L=(10000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) - (PRESS AT TROPOPAUSE ) SCAL=( 3.0) - L=(10000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) - (HEIGHT AT TROPOPAUSE) SCAL=( 3.0) - L=(10000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) - (TEMP AT TROPOPAUSE ) SCAL=(-4.0) - L=(10000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) - (POTENTL TEMP AT TROP) SCAL=(-4.0) - L=(10000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) - (U WIND AT TROPOPAUSE) SCAL=(-4.0) - L=(10000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) - (V WIND AT TROPOPAUSE) SCAL=(-4.0) - L=(10000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) - (SHEAR AT TROPOPAUSE ) SCAL=( 3.0) - L=(10000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) - L=(10000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) - L=(22221 11111 11110 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) - (U WIND AT FD HEIGHTS) SCAL=(-4.0) - L=(22221 11111 11110 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) - (V WIND AT FD HEIGHTS) SCAL=(-4.0) - L=(22221 11111 11110 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) - (SPE HUM AT FD HEIGHT) SCAL=( 3.0) - L=(22221 11111 11110 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) - (PRESS AT FD HEIGHTS ) SCAL=( 4.0) - L=(22221 11111 11110 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) - (HEIGHT OF FRZ LVL ) SCAL=( 3.0) - L=(10000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) - (REL HUMID AT FRZ LVL) SCAL=(-0.1) - L=(10000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) - (HIGHEST FREEZE LVL ) SCAL=( 3.0) - L=(10000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) - (LOW WET BULB ZERO HT) SCAL=(-5.0) - L=(10000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) - (PRESS IN BNDRY LYR ) SCAL=( 3.0) - L=(11111 10000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) - (TEMP IN BNDRY LYR ) SCAL=(-4.0) - L=(11111 10000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) - (POT TMP IN BNDRY LYR) SCAL=(-4.0) - L=(10000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) - (DWPT IN BNDRY LYR ) SCAL=(-4.0) - L=(10000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) - (SPC HUM IN BNDRY LYR) SCAL=( 3.0) - L=(11111 10000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) - (REL HUM IN BNDRY LYR) SCAL=(-0.1) - L=(11111 10000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) - (MST CNV IN BNDRY LYR) SCAL=( 3.0) - L=(10000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) - (P WATER IN BNDRY LYR) SCAL=( 3.0) - L=(10000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) - (U WIND IN BNDRY LYR ) SCAL=(-4.0) - L=(11111 10000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) - (V WIND IN BNDRY LYR ) SCAL=(-4.0) - L=(11111 10000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) - (OMEGA IN BNDRY LYR ) SCAL=(-5.0) - L=(10100 10000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) - (LFM 0.33-1.00 RELHUM) SCAL=(-0.1) - L=(10000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) - (LFM 0.66-1.00 RELHUM) SCAL=(-0.1) - L=(10000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) - (LFM 0.33-0.66 RELHUM) SCAL=(-0.1) - L=(10000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) - (LFM 0.33-1.00 PWAT ) SCAL=( 3.0) - L=(10000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) - (NGM 0.98230 PRESSURE) SCAL=( 3.0) - L=(10000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) - (NGM 0.98230 TMPRATUR) SCAL=(-4.0) - L=(10000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) - (NGM 0.98230 SPC HUM ) SCAL=( 3.0) - L=(10000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) - (NGM 0.98230 REL HUM ) SCAL=(-0.1) - L=(10000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) - (NGM 0.98230 U WIND ) SCAL=(-4.0) - L=(10000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) - (NGM 0.98230 V WIND ) SCAL=(-4.0) - L=(10000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) - (NGM 0.89671 TMPRATUR) SCAL=(-4.0) - L=(10000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) - (NGM 0.78483 TMPRATUR) SCAL=(-4.0) - L=(10000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) - (NGM 0.47-1.00 RELHUM) SCAL=(-0.1) - L=(10000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) - (NGM 0.47-0.96 RELHUM) SCAL=(-0.1) - L=(10000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) - (NGM 0.18-0.47 RELHUM) SCAL=(-0.1) - L=(10000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) - (NGM 0.84-0.98 RELHUM) SCAL=(-0.1) - L=(10000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) - (NGM 0.85-1.00 QCONVG) SCAL=( 3.0) - L=(10000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) - (CLOUD BOT PRESSURE ) SCAL=( 3.0) - L=(10000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) - (CLOUD TOP PRESSURE ) SCAL=( 3.0) - L=(10000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) - (CLOUD TOP TEMPS ) SCAL=(-3.0) - L=(10000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) - (CLOUD BOTTOM HEIGHT ) SCAL=(-3.0) - L=(10000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) - (CLOUD TOP HEIGHT ) SCAL=(-3.0) - L=(10000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) - (CLOUD TOP TEMPS ) SCAL=(-3.0) - L=(10000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) - (MAX WIND PRESS LEVEL) SCAL=( 3.0) - L=(10000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) - (MAX WIND HGHT LEVEL ) SCAL=( 3.0) - L=(10000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) - (U COMP MAX WIND ) SCAL=(-4.0) - L=(10000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) - (V COMP MAX WIND ) SCAL=(-4.0) - L=(10000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) - (COMPOSITE RADAR REFL) SCAL=(-4.0) - L=(10000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) - (COMPOSITE RAIN REFL ) SCAL=(-4.0) - L=(10000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) - (COMPOSITE ICE REFL ) SCAL=(-4.0) - L=(10000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) - (COMPOSITE CONV REFL ) SCAL=(-4.0) - L=(10000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) - (RADAR REFL AGL ) SCAL=(-4.0) - L=(11000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) - (RAIN RADAR REFL AGL ) SCAL=(-4.0) - L=(01000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) - (ICE RADAR REFL AGL ) SCAL=(-4.0) - L=(01000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) - (CONV RADAR REFL AGL ) SCAL=(-4.0) - L=(01000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) - (PBL HEIGHT ) SCAL=(-4.0) - L=(10000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) - (CONV CLOUD BOT PRESS) SCAL=( 3.0) - L=(10000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) - (CONV CLOUD TOP PRESS) SCAL=( 3.0) - L=(10000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) - (SHAL CU CLD BOT PRES) SCAL=( 3.0) - L=(10000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) - (SHAL CU CLD TOP PRES) SCAL=( 3.0) - L=(10000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) - (DEEP CU CLD BOT PRES) SCAL=( 3.0) - L=(10000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) - (DEEP CU CLD TOP PRES) SCAL=( 3.0) - L=(10000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) - (GRID CLOUD BOT PRESS) SCAL=( 3.0) - L=(10000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) - (GRID CLOUD TOP PRESS) SCAL=( 3.0) - L=(10000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) - (CONV CLOUD FRACTION ) SCAL=( 3.0) - L=(10000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) - (CU CLOUD EFFICIENCY ) SCAL=( 3.0) - L=(10000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) - (TOTAL COLUMN CLD WTR) SCAL=( 5.0) - L=(10000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) - (TOTAL COLUMN CLD ICE) SCAL=( 5.0) - L=(10000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) - (TOTAL COLUMN RAIN ) SCAL=( 5.0) - L=(10000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) - (TOTAL COLUMN SNOW ) SCAL=( 5.0) - L=(10000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) - (TOTAL COL CONDENSATE) SCAL=( 5.0) - L=(10000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) - (TOTAL COLD LIQUID ) SCAL=( 5.0) - L=(10000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) - (TOTAL MELTING ICE ) SCAL=( 5.0) - L=(10000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) - (COLD LIQ BOT HEIGHT ) SCAL=(-5.0) - L=(10000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) - (COLD LIQ TOP HEIGHT ) SCAL=(-5.0) - L=(10000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) - (CEILING ) SCAL=(-3.0) - L=(10000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) - (ACM LSM PRECIP ) SCAL=(-3.0) - L=(10000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) - (MODEL TOP PRESSURE ) SCAL=( 3.0) - L=(10000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) - (TOT COL SW T TNDY ) SCAL=( 5.0) - L=(10000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) - (TOT COL LW T TNDY ) SCAL=( 5.0) - L=(10000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) - (TOT COL GRD T TNDY ) SCAL=( 5.0) - L=(10000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) - (TOT COL CNVCT T TNDY) SCAL=( 5.0) - L=(10000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) - (TOT COL MST CNVG ) SCAL=( 5.0) - L=(10000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) - (HPC T ON SIGMA SFCS ) SCAL=(-4.0) - L=(11111 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) - (PBL REGIME ) SCAL=( 2.0) - L=(10000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) - (TOT COL SW T TNDY ) SCAL=( 5.0) - L=(10000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) - (TOT COL LW T TNDY ) SCAL=( 5.0) - L=(10000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) - (TOT COL GRD T TNDY ) SCAL=( 5.0) - L=(10000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) - (TOT COL CNVCT T TNDY) SCAL=( 5.0) - L=(10000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) - (TOT COL MST CNVG ) SCAL=( 5.0) - L=(10000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) - (TRANSPORT U WIND ) SCAL=(-4.0) - L=(10000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) - (TRANSPORT V WIND ) SCAL=(-4.0) - L=(10000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) - (RICH NO PBL HEIGHT ) SCAL=(-4.0) - L=(10000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) - (MIXHT HEIGHT ) SCAL=(-4.0) - L=(10000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) - (RADAR ECHO TOP ) SCAL=(-6.0) - L=(10000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) - (IN-FLIGHT ICING ) SCAL=( 1.0) - L=(00000 00000 00000 00101 01010 10101 01010 10101 01010 00000 00000 00000 00000 00000) - (CLEAR AIR TURBULENCE) SCAL=( 1.0) - L=(00000 00000 01111 01010 10101 01000 00000 00000 00000 00000 00000 00000 00000 00000) - (U WIND ON THETA SFCS) SCAL=( 4.0) - L=(10000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) - (V WIND ON THETA SFCS) SCAL=( 4.0) - L=(10000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) - (TEMP ON THETA SFCS ) SCAL=( 3.0) - L=(10000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) - (PV ON THETA SFCS ) SCAL=( 4.0) - L=(10000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) - (U WIND ON PV SFCS ) SCAL=( 4.0) - L=(11111 11100 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) - (V WIND ON PV SFCS ) SCAL=( 4.0) - L=(11111 11100 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) - (TEMP ON PV SFCS ) SCAL=( 4.0) - L=(11111 11100 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) - (HEIGHT ON PV SFCS ) SCAL=( 6.0) - L=(11111 11100 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) - (PRESSURE ON PV SFCS ) SCAL=( 6.0) - L=(11111 11100 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) - (SHEAR ON PV SFCS ) SCAL=( 3.0) - L=(11111 11100 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) - (HAINES INDEX ) SCAL=( 1.0) - L=(10000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) - (VENTILATION RATE ) SCAL=(-2.0) - L=(10000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) -***DONE WITH THIS GRID*** - KGTYPE******I5*******:(00255)********START OF THIS OUTPUT GRID****** - IMDLTY *I5* :(00089) - DATSET *A6* :(BGRD3D) - (HEIGHT OF PRESS SFCS) SCAL=(-5.0) - L=(00000 00000 00000 10000 00000 10000 00010 00001 00000 00000 00000 00000 00000 00000) - (TEMP ON PRESS SFCS ) SCAL=(-4.0) - L=(00000 00000 00000 10000 00000 10000 00010 00001 00010 00000 00000 00000 00000 00000) - (REL HUMID ON P SFCS ) SCAL=(-0.1) - L=(00000 00000 00000 10000 00000 10000 00010 00001 00000 00000 00000 00000 00000 00000) - (U WIND ON PRESS SFCS) SCAL=(-4.0) - L=(00000 00000 00000 10000 00000 10000 00010 00001 00000 00000 00000 00000 00000 00000) - (V WIND ON PRESS SFCS) SCAL=(-4.0) - L=(00000 00000 00000 10000 00000 10000 00010 00001 00000 00000 00000 00000 00000 00000) - (OMEGA ON PRESS SFCS ) SCAL=(-5.0) - L=(00000 00000 00000 10000 00000 10000 00010 00001 00000 00000 00000 00000 00000 00000) - (SPEC HUM ON P SFCS ) SCAL=( 2.7) - L=(00000 00000 00000 10000 00000 10000 00010 00001 00000 00000 00000 00000 00000 00000) - (ABS VORT ON P SFCS ) SCAL=( 2.7) - L=(00000 00000 00000 10000 00000 10000 00010 00001 00000 00000 00000 00000 00000 00000) - (PRESS ON MDL SFCS ) SCAL=( 3.0) - L=(11111 11111 11111 11111 11111 11111 11111 11111 11111 11111 11111 11111 00000 00000) - (HEIGHT ON MDL SFCS ) SCAL=(-5.0) - L=(11111 11111 11111 11111 11111 11111 11111 11111 11111 11111 11111 11111 00000 00000) - (TEMP ON MDL SFCS ) SCAL=(-4.0) - L=(11111 11111 11111 11111 11111 11111 11111 11111 11111 11111 11111 11111 00000 00000) - (SPEC HUM ON MDL SFCS) SCAL=( 3.0) - L=(11111 11111 11111 11111 11111 11111 11111 11111 11111 11111 11111 11111 00000 00000) - (U WIND ON MDL SFCS ) SCAL=(-4.0) - L=(11111 11111 11111 11111 11111 11111 11111 11111 11111 11111 11111 11111 00000 00000) - (V WIND ON MDL SFCS ) SCAL=(-4.0) - L=(11111 11111 11111 11111 11111 11111 11111 11111 11111 11111 11111 11111 00000 00000) - (ABS VORT ON MDL SFCS) SCAL=( 3.0) - L=(00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) - (OMEGA ON MDL SFCS ) SCAL=(-5.0) - L=(11111 11111 11111 11111 11111 11111 11111 11111 11111 11111 11111 11111 00000 00000) - (W WIND ON MDL SFCS ) SCAL=(-5.0) - L=(11111 11111 11111 11111 11111 11111 11111 11111 11111 11111 11111 11111 00000 00000) - (TRBLNT KE ON MDL SFC) SCAL=( 3.0) - L=(11111 11111 11111 11111 11111 11111 11111 11111 11111 11111 11111 11111 00000 00000) - (AVE GRDSCL RN TMPTDY) SCAL=( 3.0) - L=(11111 11111 11111 11111 11111 11111 11111 11111 11111 11111 11111 11111 00000 00000) - (AVE CNVCT RN TMPTDY ) SCAL=( 2.7) - L=(11111 11111 11111 11111 11111 11111 11111 11111 11111 11111 11111 11111 00000 00000) - (MESINGER MEAN SLP ) SCAL=(-0.1) - L=(10000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) - (SHUELL MEAN SLP ) SCAL=(-0.1) - L=(10000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) - (SHELTER PRESSURE ) SCAL=( 3.0) - L=(10000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) - (SHELTER TEMPERATURE ) SCAL=(-4.0) - L=(10000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) - (SHELTER SPEC HUMID ) SCAL=( 3.0) - L=(10000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) - (SHELTER DEWPOINT ) SCAL=(-4.0) - L=(10000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) - (SHELTER REL HUMID ) SCAL=(-0.1) - L=(10000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) - (U WIND AT ANEMOM HT ) SCAL=(-4.0) - L=(10000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) - (V WIND AT ANEMOM HT ) SCAL=(-4.0) - L=(10000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) - (POT TEMP AT 10 M ) SCAL=(-4.0) - L=(10000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) - (SPEC HUM AT 10 M ) SCAL=( 3.0) - L=(10000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) - (SURFACE PRESSURE ) SCAL=( 3.0) - L=(10000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) - (SURFACE HEIGHT ) SCAL=(-2.0) - L=(10000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) - (SURFACE POT TEMP ) SCAL=(-4.0) - L=(10000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) - (SURFACE SPEC HUMID ) SCAL=( 3.0) - L=(10000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) - (SFC (SKIN) TEMPRATUR) SCAL=(-4.0) - L=(10000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) - (SOIL TEMPERATURE ) SCAL=( 3.0) - L=(11110 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) - (SOIL MOISTURE ) SCAL=( 3.0) - L=(11110 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) - (TOTAL SOIL MOISTURE ) SCAL=( 3.0) - L=(10000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) - (SFC EXCHANGE COEF ) SCAL=( 3.0) - L=(10000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) - (GREEN VEG COVER ) SCAL=( 3.0) - L=(10000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) - (SOIL MOISTURE AVAIL ) SCAL=( 3.0) - L=(10000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) - (BOTTOM SOIL TEMP ) SCAL=( 3.0) - L=(10000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) - (INST GROUND HEAT FLX) SCAL=(-3.0) - L=(10000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) - (PLANT CANOPY SFC WTR) SCAL=( 3.0) - L=(10000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) - (SNOW WATER EQUIVALNT) SCAL=( 3.0) - L=(10000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) - (LIFTED INDEX--BEST ) SCAL=( 3.0) - L=(10000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) - (CNVCT AVBL POT ENRGY) SCAL=( 3.0) - L=(10000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) - (PRECIPITABLE WATER ) SCAL=(-3.0) - L=(10000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) - (ACM TOTAL PRECIP ) SCAL=(-3.0) - L=(10000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) - (ACM CONVCTIVE PRECIP) SCAL=(-3.0) - L=(10000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) - (ACM GRD SCALE PRECIP) SCAL=(-3.0) - L=(10000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) - (ACM SNOWFALL ) SCAL=(-3.0) - L=(10000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) - (ACM SNOW TOTAL/MELT ) SCAL=(-3.0) - L=(10000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) - (ACM STORM SFC RNOFF ) SCAL=(-3.0) - L=(10000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) - (ACM BSFL-GDWR RNOFF ) SCAL=(-3.0) - L=(10000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) - (INSTANT PRECIP TYPE ) SCAL=( 1.0) - L=(10000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) - (INSTANT PRECIP RATE ) SCAL=( 3.0) - L=(10000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) - (FROZEN FRAC CLD SCHM) SCAL=(-4.0) - L=(10000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) - (CLD WTR ON MDL SFCS ) SCAL=( 3.0) - L=(11111 11111 11111 11111 11111 11111 11111 11111 11111 11111 11111 11111 00000 00000) - (CLD ICE ON MDL SFCS ) SCAL=( 3.0) - L=(11111 11111 11111 11111 11111 11111 11111 11111 11111 11111 11111 11111 00000 00000) - (CLD FRAC ON MDL SFCS) SCAL=( 3.0) - L=(11111 11111 11111 11111 11111 11111 11111 11111 11111 11111 11111 11111 00000 00000) - (RAIN ON MDL SFCS ) SCAL=( 3.0) - L=(11111 11111 11111 11111 11111 11111 11111 11111 11111 11111 11111 11111 00000 00000) - (SNOW ON MDL SFCS ) SCAL=( 3.0) - L=(11111 11111 11111 11111 11111 11111 11111 11111 11111 11111 11111 11111 00000 00000) - (F_RimeF ON MDL SFCS ) SCAL=( 3.0) - L=(11111 11111 11111 11111 11111 11111 11111 11111 11111 11111 11111 11111 00000 00000) - (CONDENSATE MDL SFCS ) SCAL=( 3.0) - L=(11111 11111 11111 11111 11111 11111 11111 11111 11111 11111 11111 11111 00000 00000) - (F_rain ON MDL SFCS ) SCAL=( 3.0) - L=(11111 11111 11111 11111 11111 11111 11111 11111 11111 11111 11111 11111 00000 00000) - (F_ice ON MDL SFCS ) SCAL=( 3.0) - L=(11111 11111 11111 11111 11111 11111 11111 11111 11111 11111 11111 11111 00000 00000) - (LOW CLOUD FRACTION ) SCAL=( 3.0) - L=(10000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) - (MID CLOUD FRACTION ) SCAL=( 3.0) - L=(10000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) - (HIGH CLOUD FRACTION ) SCAL=( 3.0) - L=(10000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) - (TOTAL CLD FRACTION ) SCAL=( 3.0) - L=(10000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) - (AVG TOTAL CLD FRAC ) SCAL=( 3.0) - L=(10000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) - (AVG STRAT CLD FRAC ) SCAL=( 3.0) - L=(10000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) - (AVG CNVCT CLD FRAC ) SCAL=( 3.0) - L=(10000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) - (INSTN OUT SFC SW RAD) SCAL=(-3.0) - L=(10000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) - (INSTN OUT SFC LW RAD) SCAL=(-3.0) - L=(10000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) - (AVE INCMG SFC SW RAD) SCAL=(-3.0) - L=(10000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) - (AVE INCMG SFC LW RAD) SCAL=(-3.0) - L=(10000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) - (AVE OUTGO SFC SW RAD) SCAL=(-3.0) - L=(10000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) - (AVE OUTGO SFC LW RAD) SCAL=(-3.0) - L=(10000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) - (AVE OUTGO TOA SW RAD) SCAL=(-3.0) - L=(10000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) - (AVE OUTGO TOA LW RAD) SCAL=(-3.0) - L=(10000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) - (INSTN INC SFC SW RAD) SCAL=(-3.0) - L=(10000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) - (INSTN INC SFC LW RAD) SCAL=(-3.0) - L=(10000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) - (INSTN CLR INC SFC SW) SCAL=(-3.0) - L=(10000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) - (ROUGHNESS LENGTH ) SCAL=( 4.0) - L=(10000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) - (FRICTION VELOCITY ) SCAL=( 3.0) - L=(10000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) - (SFC DRAG COEFFICIENT) SCAL=( 3.0) - L=(10000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) - (SFC U WIND STRESS ) SCAL=( 3.0) - L=(10000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) - (SFC V WIND STRESS ) SCAL=( 3.0) - L=(10000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) - (AVE SFC SENHEAT FX ) SCAL=(-3.0) - L=(10000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) - (AVE GROUND HEAT FX ) SCAL=(-3.0) - L=(10000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) - (AVE SNO PHSCNG HT FX) SCAL=(-3.0) - L=(10000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) - (AVE SFC LATHEAT FX ) SCAL=(-3.0) - L=(10000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) - (AVE SFC MOMENTUM FX ) SCAL=(-3.0) - L=(00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) - (ACC SFC EVAPORATION ) SCAL=( 3.0) - L=(10000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) - (ACC POT EVAPORATION ) SCAL=( 3.0) - L=(10000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) - (INST SFC SENHEAT FX ) SCAL=(-3.0) - L=(10000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) - (INST SFC LATHEAT FX ) SCAL=(-3.0) - L=(10000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) - (LATITUDE ) SCAL=( 6.0) - L=(10000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) - (LONGITUDE ) SCAL=( 7.0) - L=(10000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) - (LAND/SEA MASK ) SCAL=( 1.0) - L=(10000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) - (SEA ICE MASK ) SCAL=( 1.0) - L=(10000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) - (MASS POINT MDL SFC ) SCAL=( 2.0) - L=(10000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) - (VEL POINT MDL SFC ) SCAL=( 2.0) - L=(10000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) - (SFC MIDDAY ALBEDO ) SCAL=( 3.0) - L=(10000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) - (SEA SFC TEMPERATURE ) SCAL=(-4.0) - L=(10000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) - (PRESS IN BNDRY LYR ) SCAL=( 3.0) - L=(11111 10000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) - (TEMP IN BNDRY LYR ) SCAL=(-4.0) - L=(11111 10000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) - (POT TMP IN BNDRY LYR) SCAL=(-4.0) - L=(10000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) - (DWPT IN BNDRY LYR ) SCAL=(-4.0) - L=(10000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) - (SPC HUM IN BNDRY LYR) SCAL=( 3.0) - L=(11111 10000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) - (REL HUM IN BNDRY LYR) SCAL=(-0.1) - L=(11111 10000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) - (MST CNV IN BNDRY LYR) SCAL=( 3.0) - L=(10000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) - (P WATER IN BNDRY LYR) SCAL=( 3.0) - L=(10000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) - (U WIND IN BNDRY LYR ) SCAL=(-4.0) - L=(11111 10000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) - (V WIND IN BNDRY LYR ) SCAL=(-4.0) - L=(11111 10000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) - (NGM 0.47-1.00 RELHUM) SCAL=(-0.1) - L=(10000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) - (ACM LSM PRECIP ) SCAL=(-3.0) - L=(10000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) - (MODEL TOP PRESSURE ) SCAL=( 3.0) - L=(10000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) - (HYBRID PRESSURE DP ) SCAL=( 3.0) - L=(10000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) - (HYBRID SIGMA DP ) SCAL=( 3.0) - L=(10000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) - (SFC EXCHANGE COEF ) SCAL=( 3.0) - L=(10000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) - (GREEN VEG COVER ) SCAL=( 3.0) - L=(10000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) - (LIFTED INDEX--SURFCE) SCAL=( 3.0) - L=(10000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) - (LIFTED INDEX--BNDLYR) SCAL=( 3.0) - L=(00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) - (CNVCT AVBL POT ENRGY) SCAL=( 3.0) - L=(11110 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) - (CNVCT INHIBITION ) SCAL=( 3.0) - L=(11110 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) - (LIFT PCL LVL PRESS ) SCAL=( 3.0) - L=(10000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) - (PRECIPITABLE WATER ) SCAL=(-3.0) - L=(10000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) - (STORM REL HELICITY ) SCAL=( 3.0) - L=(11000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) - (U COMP STORM MOTION ) SCAL=( 3.0) - L=(10000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) - (V COMP STORM MOTION ) SCAL=( 3.0) - L=(10000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) - (CONV PRECIP RATE ) SCAL=( 3.0) - L=(10000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) - (CLOUD BOT PRESSURE ) SCAL=( 3.0) - L=(10000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) - (CLOUD TOP PRESSURE ) SCAL=( 3.0) - L=(10000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) - (LCL AGL HEIGHT ) SCAL=( 3.0) - L=(00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) - (LCL PRESSURE ) SCAL=( 3.0) - L=(00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) - (CLOUD TOP TEMPS ) SCAL=( 3.0) - L=(10000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) - (RADFLX CNVG TMP TNDY) SCAL=( 3.0) - L=(00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) - (SW RAD TEMP TNDY ) SCAL=( 3.0) - L=(00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) - (LW RAD TEMP TNDY ) SCAL=( 3.0) - L=(11000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) - (INSTN INC SFC SW RAD) SCAL=(-3.0) - L=(10000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) - (INSTN INC SFC LW RAD) SCAL=(-3.0) - L=(10000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) - (PRESS AT TROPOPAUSE ) SCAL=( 3.0) - L=(10000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) - (HEIGHT AT TROPOPAUSE) SCAL=( 3.0) - L=(10000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) - (TEMP AT TROPOPAUSE ) SCAL=(-4.0) - L=(10000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) - (POTENTL TEMP AT TROP) SCAL=(-4.0) - L=(00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) - (U WIND AT TROPOPAUSE) SCAL=(-4.0) - L=(10000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) - (V WIND AT TROPOPAUSE) SCAL=(-4.0) - L=(10000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) - (SHEAR AT TROPOPAUSE ) SCAL=( 3.0) - L=(10000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) - (TEMP AT FD HEIGHTS ) SCAL=(-4.0) - L=(11111 11000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) - (U WIND AT FD HEIGHTS) SCAL=(-4.0) - L=(11111 11000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) - (V WIND AT FD HEIGHTS) SCAL=(-4.0) - L=(11111 11000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) - (HEIGHT OF FRZ LVL ) SCAL=( 3.0) - L=(10000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) - (REL HUMID AT FRZ LVL) SCAL=(-0.1) - L=(10000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) - (HIGHEST FREEZE LVL ) SCAL=( 3.0) - L=(10000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) - (PRESS IN BNDRY LYR ) SCAL=( 3.0) - L=(00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) - (TEMP IN BNDRY LYR ) SCAL=(-4.0) - L=(00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) - (POT TMP IN BNDRY LYR) SCAL=(-4.0) - L=(00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) - (DWPT IN BNDRY LYR ) SCAL=(-4.0) - L=(00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) - (SPC HUM IN BNDRY LYR) SCAL=( 3.0) - L=(00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) - (REL HUM IN BNDRY LYR) SCAL=(-0.1) - L=(00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) - (MST CNV IN BNDRY LYR) SCAL=( 3.0) - L=(00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) - (P WATER IN BNDRY LYR) SCAL=( 3.0) - L=(00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) - (U WIND IN BNDRY LYR ) SCAL=(-4.0) - L=(00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) - (V WIND IN BNDRY LYR ) SCAL=(-4.0) - L=(00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) - (OMEGA IN BNDRY LYR ) SCAL=(-5.0) - L=(00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) - (LFM 0.33-1.00 RELHUM) SCAL=(-0.1) - L=(00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) - (LFM 0.66-1.00 RELHUM) SCAL=(-0.1) - L=(00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) - (LFM 0.33-0.66 RELHUM) SCAL=(-0.1) - L=(00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) - (LFM 0.33-1.00 PWAT ) SCAL=( 3.0) - L=(00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) - (NGM 0.98230 PRESSURE) SCAL=( 3.0) - L=(00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) - (NGM 0.98230 TMPRATUR) SCAL=(-4.0) - L=(00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) - (NGM 0.98230 SPC HUM ) SCAL=( 3.0) - L=(00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) - (NGM 0.98230 REL HUM ) SCAL=(-0.1) - L=(00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) - (NGM 0.98230 U WIND ) SCAL=(-4.0) - L=(00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) - (NGM 0.98230 V WIND ) SCAL=(-4.0) - L=(00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) - (NGM 0.89671 TMPRATUR) SCAL=(-4.0) - L=(00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) - (NGM 0.78483 TMPRATUR) SCAL=(-4.0) - L=(00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) - (NGM 0.47-1.00 RELHUM) SCAL=(-0.1) - L=(00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) - (NGM 0.47-0.96 RELHUM) SCAL=(-0.1) - L=(00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) - (NGM 0.18-0.47 RELHUM) SCAL=(-0.1) - L=(00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) - (NGM 0.84-0.98 RELHUM) SCAL=(-0.1) - L=(00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) - (NGM 0.85-1.00 QCONVG) SCAL=( 3.0) - L=(00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) - (MAX WIND PRESS LEVEL) SCAL=( 3.0) - L=(10000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) - (MAX WIND HGHT LEVEL ) SCAL=( 3.0) - L=(10000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) - (U COMP MAX WIND ) SCAL=(-4.0) - L=(10000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) - (V COMP MAX WIND ) SCAL=(-4.0) - L=(10000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) - (CLOUD BOTTOM HEIGHT ) SCAL=(-3.0) - L=(10000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) - (CLOUD TOP HEIGHT ) SCAL=(-3.0) - L=(10000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) - (VISIBILITY ) SCAL=( 2.7) - L=(10000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) - (COMPOSITE RADAR REFL) SCAL=(-4.0) - L=(10000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) - (CONV CLOUD BOT PRESS) SCAL=( 3.0) - L=(10000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) - (CONV CLOUD TOP PRESS) SCAL=( 3.0) - L=(10000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) - (SHAL CU CLD BOT PRES) SCAL=( 3.0) - L=(10000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) - (SHAL CU CLD TOP PRES) SCAL=( 3.0) - L=(10000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) - (DEEP CU CLD BOT PRES) SCAL=( 3.0) - L=(10000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) - (DEEP CU CLD TOP PRES) SCAL=( 3.0) - L=(10000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) - (GRID CLOUD BOT PRESS) SCAL=( 3.0) - L=(10000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) - (GRID CLOUD TOP PRESS) SCAL=( 3.0) - L=(10000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) - (CONV CLOUD FRACTION ) SCAL=( 3.0) - L=(10000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) - (CU CLOUD EFFICIENCY ) SCAL=( 3.0) - L=(10000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) - (TOTAL COLUMN CLD WTR) SCAL=( 3.0) - L=(10000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) - (TOTAL COLUMN CLD ICE) SCAL=( 3.0) - L=(10000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) - (TOTAL COLUMN RAIN ) SCAL=( 3.0) - L=(10000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) - (TOTAL COLUMN SNOW ) SCAL=( 3.0) - L=(10000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) - (TOTAL COL CONDENSATE) SCAL=( 3.0) - L=(10000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) - (VEGETATION TYPE ) SCAL=( 3.0) - L=(10000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) - (SOIL TYPE ) SCAL=( 3.0) - L=(10000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) - (CANOPY CONDUCTANCE ) SCAL=( 3.0) - L=(10000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) - (PBL HEIGHT ) SCAL=(-4.0) - L=(10000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) - (SLOPE TYPE ) SCAL=( 3.0) - L=(00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) - (SNOW DEPTH ) SCAL=( 3.0) - L=(10000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) - (LIQUID SOIL MOISTURE) SCAL=( 3.0) - L=(00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) - (SNOW FREE ALBEDO ) SCAL=( 3.0) - L=(00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) - (MAXIMUM SNOW ALBEDO ) SCAL=( 3.0) - L=(00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) - (CANOPY WATER EVAP ) SCAL=( 3.0) - L=(00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) - (DIRECT SOIL EVAP ) SCAL=( 3.0) - L=(00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) - (PLANT TRANSPIRATION ) SCAL=( 3.0) - L=(00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) - (SNOW SUBLIMATION ) SCAL=( 3.0) - L=(10000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) - (AIR DRY SOIL MOIST ) SCAL=( 3.0) - L=(10000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) - (SOIL MOIST POROSITY ) SCAL=( 3.0) - L=(10000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) - (MIN STOMATAL RESIST ) SCAL=( 3.0) - L=(10000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) - (NO OF ROOT LAYERS ) SCAL=( 3.0) - L=(10000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) - (SOIL MOIST WILT PT ) SCAL=( 3.0) - L=(10000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) - (SOIL MOIST REFERENCE) SCAL=( 3.0) - L=(10000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) - (CANOPY COND SOLAR ) SCAL=( 3.0) - L=(10000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) - (CANOPY COND TEMP ) SCAL=( 3.0) - L=(10000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) - (CANOPY COND HUMID ) SCAL=( 3.0) - L=(10000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) - (CANOPY COND SOILM ) SCAL=( 3.0) - L=(10000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) - (POTENTIAL EVAP ) SCAL=( 3.0) - L=(10000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) - (SFC WIND GUST ) SCAL=( 3.0) - L=(10000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) - (LOW WET BULB ZERO HT) SCAL=(-3.0) - L=(10000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) - (LEAF AREA INDEX ) SCAL=(-3.0) - L=(10000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) - (INSTN CLR INC SFC SW) SCAL=(-3.0) - L=(10000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) - (CLD FRAC ON SIG SFCS) SCAL=( 3.0) - L=(11111 11111 11111 11111 11000 00000 00000 00000 00000 00000 00000 00000 00000 00000) - (CLD FRAC ON MDL SFCS) SCAL=( 3.0) - L=(11111 11111 11111 11111 11111 11111 11111 11111 11111 11111 11111 11111 00000 00000) - (CLD WTR ON MDL SFCS ) SCAL=( 3.0) - L=(11111 11111 11111 11111 11111 11111 11111 11111 11111 11111 11111 11111 00000 00000) - (CLD ICE ON MDL SFCS ) SCAL=( 3.0) - L=(11111 11111 11111 11111 11111 11111 11111 11111 11111 11111 11111 11111 00000 00000) - (RICH NO PBL HEIGHT ) SCAL=(-4.0) - L=(10000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) - (MIXHT HEIGHT ) SCAL=(-4.0) - L=(10000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) - (PERCENT SNOW COVER ) SCAL=( 3.0) - L=(10000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) -***DONE WITH THIS GRID*** - KGTYPE******I5*******:(00255)********START OF THIS OUTPUT GRID****** - IMDLTY *I5* :(00089) - DATSET *A6* :(BGRDSF) - (PRESS ON MDL SFCS ) SCAL=( 3.0) - L=(10000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) - (HEIGHT ON MDL SFCS ) SCAL=(-5.0) - L=(10000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) - (TEMP ON MDL SFCS ) SCAL=(-4.0) - L=(10000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) - (POT TEMP ON MDL SFCS) SCAL=(-4.0) - L=(10000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) - (SPEC HUM ON MDL SFCS) SCAL=( 3.0) - L=(10000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) - (REL HUM ON MDL SFCS ) SCAL=(-3.0) - L=(10000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) - (U WIND ON MDL SFCS ) SCAL=(-4.0) - L=(10000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) - (V WIND ON MDL SFCS ) SCAL=(-4.0) - L=(10000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) - (TRBLNT KE ON MDL SFC) SCAL=( 3.0) - L=(10000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) - (VEGETATION TYPE ) SCAL=( 3.0) - L=(10000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) - (SOIL TYPE ) SCAL=( 3.0) - L=(10000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) - (SLOPE TYPE ) SCAL=( 3.0) - L=(00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) - (LIQUID SOIL MOISTURE) SCAL=( 3.0) - L=(11110 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) - (SNOW FREE ALBEDO ) SCAL=( 3.0) - L=(10000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) - (MAXIMUM SNOW ALBEDO ) SCAL=( 3.0) - L=(10000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) - (CANOPY CONDUCTANCE ) SCAL=( 3.0) - L=(10000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) - (CANOPY COND SOLAR ) SCAL=( 3.0) - L=(10000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) - (CANOPY COND TEMP ) SCAL=( 3.0) - L=(10000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) - (CANOPY COND HUMID ) SCAL=( 3.0) - L=(10000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) - (CANOPY COND SOILM ) SCAL=( 3.0) - L=(10000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) - (SOIL MOIST REFERENCE) SCAL=( 3.0) - L=(10000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) - (SOIL MOIST POROSITY ) SCAL=( 3.0) - L=(10000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) - (NO OF ROOT LAYERS ) SCAL=( 1.0) - L=(10000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) - (MIN STOMATAL RESIST ) SCAL=( 3.0) - L=(10000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) - (PBL HEIGHT ) SCAL=(-4.0) - L=(10000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) - (SNOW DEPTH ) SCAL=( 6.0) - L=(10000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) - (PERCENT SNOW COVER ) SCAL=( 3.0) - L=(10000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) - (AIR DRY SOIL MOIST ) SCAL=( 3.0) - L=(10000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) - (SOIL MOIST WILT PT ) SCAL=( 3.0) - L=(10000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) - (MASTER LENGTH SCALE ) SCAL=( 3.0) - L=(10000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) - (MESINGER MEAN SLP ) SCAL=(-0.1) - L=(10000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) - (SHUELL MEAN SLP ) SCAL=(-0.1) - L=(10000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) - (SHELTER PRESSURE ) SCAL=( 3.0) - L=(00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) - (SHELTER TEMPERATURE ) SCAL=(-4.0) - L=(10000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) - (SHELTER SPEC HUMID ) SCAL=( 3.0) - L=(10000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) - (SHELTER DEWPOINT ) SCAL=(-4.0) - L=(10000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) - (SHELTER REL HUMID ) SCAL=(-0.1) - L=(10000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) - (U WIND AT ANEMOM HT ) SCAL=(-4.0) - L=(10000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) - (V WIND AT ANEMOM HT ) SCAL=(-4.0) - L=(10000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) - (POT TEMP AT 10 M ) SCAL=(-4.0) - L=(10000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) - (SPEC HUM AT 10 M ) SCAL=( 3.0) - L=(10000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) - (SURFACE PRESSURE ) SCAL=( 3.0) - L=(10000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) - (SURFACE HEIGHT ) SCAL=(-2.0) - L=(10000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) - (SURFACE POT TEMP ) SCAL=(-4.0) - L=(10000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) - (SURFACE SPEC HUMID ) SCAL=( 3.0) - L=(10000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) - (SFC (SKIN) TEMPRATUR) SCAL=(-4.0) - L=(10000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) - (SOIL TEMPERATURE ) SCAL=( 3.0) - L=(11110 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) - (SOIL MOISTURE ) SCAL=( 3.0) - L=(11110 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) - (TOTAL SOIL MOISTURE ) SCAL=( 3.0) - L=(10000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) - (SFC EXCHANGE COEF ) SCAL=( 3.0) - L=(10000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) - (GREEN VEG COVER ) SCAL=( 3.0) - L=(10000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) - (SOIL MOISTURE AVAIL ) SCAL=( 3.0) - L=(10000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) - (BOTTOM SOIL TEMP ) SCAL=( 3.0) - L=(10000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) - (INST GROUND HEAT FLX) SCAL=(-3.0) - L=(10000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) - (PLANT CANOPY SFC WTR) SCAL=( 3.0) - L=(10000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) - (SNOW WATER EQUIVALNT) SCAL=( 3.0) - L=(10000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) - (LIFTED INDEX--BEST ) SCAL=( 3.0) - L=(10000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) - (PRECIPITABLE WATER ) SCAL=(-3.0) - L=(10000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) - (ACM TOTAL PRECIP ) SCAL=(-3.0) - L=(10000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) - (ACM CONVCTIVE PRECIP) SCAL=(-3.0) - L=(10000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) - (ACM SNOWFALL ) SCAL=(-3.0) - L=(10000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) - (ACM SNOW TOTAL/MELT ) SCAL=(-3.0) - L=(10000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) - (ACM STORM SFC RNOFF ) SCAL=(-3.0) - L=(10000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) - (ACM BSFL-GDWR RNOFF ) SCAL=(-3.0) - L=(10000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) - (INSTANT PRECIP TYPE ) SCAL=( 1.0) - L=(10000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) - (INSTANT PRECIP RATE ) SCAL=( 3.0) - L=(10000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) - (TOTAL COLUMN CLD WTR) SCAL=( 5.0) - L=(10000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) - (TOTAL COLUMN CLD ICE) SCAL=( 5.0) - L=(10000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) - (TOTAL COLUMN RAIN ) SCAL=( 5.0) - L=(10000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) - (TOTAL COLUMN SNOW ) SCAL=( 5.0) - L=(10000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) - (TOTAL COL CONDENSATE) SCAL=( 5.0) - L=(10000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) - (FROZEN FRAC CLD SCHM) SCAL=(-4.0) - L=(10000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) - (LOW CLOUD FRACTION ) SCAL=( 3.0) - L=(10000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) - (MID CLOUD FRACTION ) SCAL=( 3.0) - L=(10000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) - (HIGH CLOUD FRACTION ) SCAL=( 3.0) - L=(10000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) - (TOTAL CLD FRACTION ) SCAL=( 3.0) - L=(10000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) - (AVG TOTAL CLD FRAC ) SCAL=( 3.0) - L=(10000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) - (AVG STRAT CLD FRAC ) SCAL=( 3.0) - L=(10000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) - (AVG CNVCT CLD FRAC ) SCAL=( 3.0) - L=(10000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) - (INSTN OUT SFC SW RAD) SCAL=(-3.0) - L=(10000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) - (INSTN OUT SFC LW RAD) SCAL=(-3.0) - L=(10000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) - (AVE INCMG SFC SW RAD) SCAL=(-3.0) - L=(10000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) - (AVE INCMG SFC LW RAD) SCAL=(-3.0) - L=(10000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) - (AVE OUTGO SFC SW RAD) SCAL=(-3.0) - L=(10000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) - (AVE OUTGO SFC LW RAD) SCAL=(-3.0) - L=(10000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) - (AVE OUTGO TOA SW RAD) SCAL=(-3.0) - L=(10000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) - (AVE OUTGO TOA LW RAD) SCAL=(-3.0) - L=(10000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) - (INSTN INC SFC SW RAD) SCAL=(-3.0) - L=(10000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) - (INSTN INC SFC LW RAD) SCAL=(-3.0) - L=(10000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) - (INSTN CLR INC SFC SW) SCAL=(-3.0) - L=(10000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) - (ROUGHNESS LENGTH ) SCAL=( 4.0) - L=(10000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) - (FRICTION VELOCITY ) SCAL=( 3.0) - L=(10000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) - (SFC DRAG COEFFICIENT) SCAL=( 3.0) - L=(10000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) - (SFC U WIND STRESS ) SCAL=( 3.0) - L=(10000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) - (SFC V WIND STRESS ) SCAL=( 3.0) - L=(10000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) - (AVE SFC SENHEAT FX ) SCAL=(-3.0) - L=(10000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) - (AVE GROUND HEAT FX ) SCAL=(-3.0) - L=(10000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) - (AVE SNO PHSCNG HT FX) SCAL=(-3.0) - L=(10000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) - (AVE SFC LATHEAT FX ) SCAL=(-3.0) - L=(10000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) - (AVE SFC MOMENTUM FX ) SCAL=(-3.0) - L=(00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) - (ACC SFC EVAPORATION ) SCAL=( 3.0) - L=(10000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) - (ACC POT EVAPORATION ) SCAL=( 3.0) - L=(10000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) - (INST SFC SENHEAT FX ) SCAL=(-3.0) - L=(10000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) - (INST SFC LATHEAT FX ) SCAL=(-3.0) - L=(10000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) - (LATITUDE ) SCAL=( 6.0) - L=(10000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) - (LONGITUDE ) SCAL=( 7.0) - L=(10000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) - (LAND/SEA MASK ) SCAL=( 1.0) - L=(10000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) - (SEA ICE MASK ) SCAL=( 1.0) - L=(10000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) - (SFC MIDDAY ALBEDO ) SCAL=( 3.0) - L=(10000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) - (SEA SFC TEMPERATURE ) SCAL=(-4.0) - L=(10000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) - (ACM LSM PRECIP ) SCAL=(-3.0) - L=(10000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) - (FROZEN FRAC CLD SCHM) SCAL=(-4.0) - L=(10000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) - (UPDRAFT HELICITY PRM) SCAL=(-3.0) - L=(10000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) -***DONE WITH THIS GRID*** - KGTYPE******I5*******:(00255)********START OF THIS OUTPUT GRID****** - IMDLTY *I5* :(00089) - DATSET *A6* :(BGGOES) - (GOES TB - CH 2 ) SCAL=( 4.0) - L=(10000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) - (GOES TB - CH 3 ) SCAL=( 4.0) - L=(10000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) - (GOES TB - CH 4 ) SCAL=( 4.0) - L=(10000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) - (GOES TB - CH 5 ) SCAL=( 4.0) - L=(10000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) -***DONE WITH THIS GRID*** diff --git a/parm/nmb_cntrl.parm b/parm/nmb_cntrl.parm deleted file mode 100644 index e759debc0..000000000 --- a/parm/nmb_cntrl.parm +++ /dev/null @@ -1,503 +0,0 @@ - KGTYPE******I5*******:(00255)********START OF THIS OUTPUT GRID****** - IMDLTY *I5* :(00125) - DATSET *A6* :(NMBPRS) - (PRESS ON MDL SFCS ) SCAL=( 3.0) - L=(11000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) - (HEIGHT ON MDL SFCS ) SCAL=( 6.0) - L=(11000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) - (TEMP ON MDL SFCS ) SCAL=( 4.0) - L=(11000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) - (POT TEMP ON MDL SFCS) SCAL=( 4.0) - L=(00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) - (DWPT TEMP ON MDL SFC) SCAL=( 5.0) - L=(11000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) - (SPEC HUM ON MDL SFCS) SCAL=( 3.0) - L=(11000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) - (REL HUM ON MDL SFCS ) SCAL=( 4.0) - L=(10000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) - (MST CNVG ON MDL SFCS) SCAL=( 3.0) - L=(00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) - (U WIND ON MDL SFCS ) SCAL=( 4.0) - L=(11000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) - (V WIND ON MDL SFCS ) SCAL=( 4.0) - L=(11000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) - (OMEGA ON MDL SFCS ) SCAL=( 5.0) - L=(00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) - (ABS VORT ON MDL SFCS) SCAL=( 3.0) - L=(00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) - (STRMFUNC ON MDL SFCS) SCAL=( 3.0) - L=(00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) - (TRBLNT KE ON MDL SFC) SCAL=( 3.0) - L=(00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) - (RCHDSN NO ON MDL SFC) SCAL=( 3.0) - L=(00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) - (RAIN ON MDL SFCS ) SCAL=( 6.0) - L=(00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) - (SNOW ON MDL SFCS ) SCAL=( 6.0) - L=(00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) - (F_RimeF ON MDL SFCS ) SCAL=( 3.0) - L=(00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) - (CONDENSATE MDL SFCS ) SCAL=( 3.0) - L=(00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) - (RADAR REFL MDL SFCS ) SCAL=( 4.0) - L=(11000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) - (CLD WTR ON MDL SFCS ) SCAL=( 6.0) - L=(00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) - (CLD ICE ON MDL SFCS ) SCAL=( 6.0) - L=(00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) - (GRAUPEL ON MDL SFCS ) SCAL=( 6.0) - L=(00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) - (CLD FRAC ON MDL SFCS) SCAL=( 3.0) - L=(00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) - (MASTER LENGTH SCALE ) SCAL=( 3.0) - L=(00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) - (ASYMPT MSTR LEN SCL ) SCAL=( 3.0) - L=(00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) - (HEIGHT OF PRESS SFCS) SCAL=( 6.0) - L=(00000 01001 01010 10101 01010 10101 01010 11111 11111 10000 00000 00000 00000 00000) - (TEMP ON PRESS SFCS ) SCAL=( 4.0) - L=(00000 01001 01010 10101 01010 10101 01010 11111 11111 10000 00000 00000 00000 00000) - (POT TEMP ON P SFCS ) SCAL=( 4.0) - L=(00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) - (DWPT TEMP ON P SFCS ) SCAL=( 4.0) - L=(00000 01001 01010 10101 01010 10101 01010 11111 11111 10000 00000 00000 00000 00000) - (SPEC HUM ON P SFCS ) SCAL=( 4.0) - L=(00000 01001 01010 10101 01010 10101 01010 11111 11111 10000 00000 00000 00000 00000) - (REL HUMID ON P SFCS ) SCAL=( 4.0) - L=(00000 01001 01010 10101 01010 10101 01010 11111 11111 10000 00000 00000 00000 00000) - (MST CNVG ON P SFCS ) SCAL=( 3.0) - L=(00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) - (U WIND ON PRESS SFCS) SCAL=( 4.0) - L=(00000 01001 01010 10101 01010 10101 01010 11111 11111 10000 00000 00000 00000 00000) - (V WIND ON PRESS SFCS) SCAL=( 4.0) - L=(00000 01001 01010 10101 01010 10101 01010 11111 11111 10000 00000 00000 00000 00000) - (W WIND ON P SFCS ) SCAL=( 5.0) - L=(00000 01001 01010 10101 01010 10101 01010 11111 11111 10000 00000 00000 00000 00000) - (OMEGA ON PRESS SFCS ) SCAL=( 5.0) - L=(00000 01001 01010 10101 01010 10101 01010 11111 11111 10000 00000 00000 00000 00000) - (ABS VORT ON P SFCS ) SCAL=( 3.0) - L=(00000 01001 01010 10101 01010 10101 01010 11111 11111 10000 00000 00000 00000 00000) - (STRMFUNC ON P SFCS ) SCAL=( 3.0) - L=(00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) - (TRBLNT KE ON P SFCS ) SCAL=( 3.0) - L=(00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) - (CLOUD ICE ON P SFCS ) SCAL=( 6.0) - L=(00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) - (CLOUD WATR ON P SFCS) SCAL=( 6.0) - L=(00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) - (RAIN ON P SFCS ) SCAL=( 6.0) - L=(00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) - (SNOW ON P SFCS ) SCAL=( 6.0) - L=(00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) - (F_RimeF ON P SFCS ) SCAL=( 3.0) - L=(00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) - (RADAR REFL ON P SFCS) SCAL=( 4.0) - L=(00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) - (GRAUPEL ON P SFCS ) SCAL=( 6.0) - L=(10000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) - (MAPS SLP ) SCAL=( 6.0) - L=(10000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) - (MESINGER MEAN SLP ) SCAL=( 6.0) - L=(10000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) - (SHUELL MEAN SLP ) SCAL=( 6.0) - L=(10000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) - (SHELTER PRESSURE ) SCAL=( 6.0) - L=(00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) - (SHELTER TEMPERATURE ) SCAL=( 5.0) - L=(10000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) - (SHELTER SPEC HUMID ) SCAL=( 3.0) - L=(10000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) - (SHELTER DEWPOINT ) SCAL=( 5.0) - L=(10000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) - (SHELTER REL HUMID ) SCAL=( 4.0) - L=(10000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) - (SHELTER MIX RATIO ) SCAL=( 4.0) - L=(00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) - (U WIND AT ANEMOM HT ) SCAL=( 4.0) - L=(10000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) - (V WIND AT ANEMOM HT ) SCAL=( 4.0) - L=(10000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) - (POT TEMP AT 10 M ) SCAL=( 5.0) - L=(00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) - (SPEC HUM AT 10 M ) SCAL=( 3.0) - L=(00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) - (SURFACE PRESSURE ) SCAL=( 6.0) - L=(10000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) - (SURFACE HEIGHT ) SCAL=( 6.0) - L=(10000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) - (SURFACE POT TEMP ) SCAL=( 5.0) - L=(00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) - (SURFACE SPEC HUMID ) SCAL=( 3.0) - L=(00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) - (SURFACE DEWPOINT ) SCAL=( 4.0) - L=(00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) - (SURFACE REL HUMID ) SCAL=( 4.0) - L=(00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) - (SFC (SKIN) TEMPRATUR) SCAL=( 5.0) - L=(10000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) - (BOTTOM SOIL TEMP ) SCAL=( 5.0) - L=(10000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) - (SOIL TEMPERATURE ) SCAL=( 3.0) - L=(11111 10000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) - (SOIL MOISTURE ) SCAL=( 3.0) - L=(11111 10000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) - (LIQUID SOIL MOISTURE) SCAL=( 3.0) - L=(11110 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) - (TOTAL SOIL MOISTURE ) SCAL=( 3.0) - L=(10000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) - (PLANT CANOPY SFC WTR) SCAL=( 3.0) - L=(00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) - (SNOW WATER EQUIVALNT) SCAL=( 3.0) - L=(10000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) - (PERCENT SNOW COVER ) SCAL=( 3.0) - L=(10000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) - (SFC EXCHANGE COEF ) SCAL=( 3.0) - L=(00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) - (GREEN VEG COVER ) SCAL=( 3.0) - L=(10000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) - (VEGETATION TYPE ) SCAL=( 3.0) - L=(00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) - (SOIL TYPE ) SCAL=( 3.0) - L=(00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) - (SLOPE TYPE ) SCAL=( 3.0) - L=(00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) - (SNOW FREE ALBEDO ) SCAL=( 3.0) - L=(00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) - (MAXIMUM SNOW ALBEDO ) SCAL=( 3.0) - L=(00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) - (CANOPY CONDUCTANCE ) SCAL=( 3.0) - L=(00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) - (CANOPY COND SOLAR ) SCAL=( 3.0) - L=(00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) - (CANOPY COND TEMP ) SCAL=( 5.0) - L=(00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) - (CANOPY COND HUMID ) SCAL=( 3.0) - L=(00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) - (CANOPY COND SOILM ) SCAL=( 3.0) - L=(00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) - (SOIL MOIST REFERENCE) SCAL=( 3.0) - L=(00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) - (SOIL MOIST POROSITY ) SCAL=( 3.0) - L=(00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) - (NO OF ROOT LAYERS ) SCAL=( 1.0) - L=(00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) - (MIN STOMATAL RESIST ) SCAL=( 3.0) - L=(00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) - (SNOW DEPTH ) SCAL=( 6.0) - L=(10000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) - (AIR DRY SOIL MOIST ) SCAL=( 3.0) - L=(00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) - (SOIL MOIST WILT PT ) SCAL=( 3.0) - L=(00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) - (SOIL MOISTURE AVAIL ) SCAL=( 3.0) - L=(10000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) - (INST GROUND HEAT FLX) SCAL=( 4.0) - L=(10000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) - (LIFTED INDEX--SURFCE) SCAL=( 3.0) - L=(10000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) - (LIFTED INDEX--BEST ) SCAL=( 3.0) - L=(10000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) - (LIFTED INDEX--BNDLYR) SCAL=( 3.0) - L=(10000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) - (CNVCT AVBL POT ENRGY) SCAL=( 3.0) - L=(11110 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) - (CNVCT INHIBITION ) SCAL=( 3.0) - L=(11110 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) - (PRECIPITABLE WATER ) SCAL=( 3.0) - L=(10000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) - (STORM REL HELICITY ) SCAL=( 3.0) - L=(10000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) - (ACM TOTAL PRECIP ) SCAL=( 5.0) - L=(10000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) - (ACM CONVCTIVE PRECIP) SCAL=( 5.0) - L=(10000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) - (ACM GRD SCALE PRECIP) SCAL=( 5.0) - L=(10000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) - (ACM GRD SCALE SW ICE) SCAL=( 4.0) - L=(10000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) - (ACM SNOWFALL ) SCAL=( 5.0) - L=(10000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) - (BUCKET SNOW PRECIP ) SCAL=( 5.0) - L=(00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) - (BUCKET TOTAL PRECIP ) SCAL=( 5.0) - L=(00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) - (BUCKET CONV PRECIP ) SCAL=( 5.0) - L=(00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) - (BUCKET GRDSCALE PRCP) SCAL=( 5.0) - L=(00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) - (ACM SNOW TOTAL/MELT ) SCAL=( 4.0) - L=(10000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) - (ACM STORM SFC RNOFF ) SCAL=( 4.0) - L=(10000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) - (ACM BSFL-GDWR RNOFF ) SCAL=( 4.0) - L=(00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) - (INSTANT PRECIP TYPE ) SCAL=( 1.0) - L=(10000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) - (GSD PRECIP TYPE ) SCAL=( 1.0) - L=(10000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) - (INSTANT PRECIP RATE ) SCAL=( 3.0) - L=(10000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) - (CONV PRECIP RATE ) SCAL=( 3.0) - L=(10000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) - (FROZEN FRAC CLD SCHM) SCAL=( 4.0) - L=(00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) - (SEA SFC TEMPERATURE ) SCAL=( 5.0) - L=(10000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) - (LOW CLOUD FRACTION ) SCAL=( 3.0) - L=(10000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) - (MID CLOUD FRACTION ) SCAL=( 3.0) - L=(10000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) - (HIGH CLOUD FRACTION ) SCAL=( 3.0) - L=(10000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) - (AVG TOTAL CLD FRAC ) SCAL=( 3.0) - L=(10000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) - (AVG STRAT CLD FRAC ) SCAL=( 3.0) - L=(10000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) - (AVG CNVCT CLD FRAC ) SCAL=( 3.0) - L=(10000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) - (GSD CLD BOT HEIGHT ) SCAL=( 6.0) - L=(10000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) - (GSD CLD TOP HEIGHT ) SCAL=( 6.0) - L=(10000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) - (CLOUD BOT PRESSURE ) SCAL=( 6.0) - L=(10000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) - (CLOUD TOP PRESSURE ) SCAL=( 6.0) - L=(10000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) - (CLOUD TOP TEMPS ) SCAL=( 5.0) - L=(10000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) - (CLOUD BOTTOM HEIGHT ) SCAL=( 6.0) - L=(10000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) - (CLOUD TOP HEIGHT ) SCAL=( 6.0) - L=(10000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) - (CONV CLOUD BOT PRESS) SCAL=( 6.0) - L=(00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) - (CONV CLOUD TOP PRESS) SCAL=( 6.0) - L=(00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) - (SHAL CU CLD BOT PRES) SCAL=( 6.0) - L=(00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) - (SHAL CU CLD TOP PRES) SCAL=( 6.0) - L=(00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) - (DEEP CU CLD BOT PRES) SCAL=( 6.0) - L=(00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) - (DEEP CU CLD TOP PRES) SCAL=( 6.0) - L=(00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) - (GRID CLOUD BOT PRESS) SCAL=( 6.0) - L=(00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) - (GRID CLOUD TOP PRESS) SCAL=( 6.0) - L=(00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) - (CONV CLOUD FRACTION ) SCAL=( 3.0) - L=(10000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) - (MAX WIND PRESS LEVEL) SCAL=( 3.0) - L=(00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) - (MAX WIND HGHT LEVEL ) SCAL=( 3.0) - L=(00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) - (U COMP MAX WIND ) SCAL=( 5.0) - L=(00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) - (V COMP MAX WIND ) SCAL=( 5.0) - L=(00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) - (PBL HEIGHT ) SCAL=( 5.0) - L=(10000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) - (COMPOSITE RADAR REFL) SCAL=( 4.0) - L=(10000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) - (RADAR REFL AGL ) SCAL=( 4.0) - L=(11000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) - (VISIBILITY ) SCAL=( 2.7) - L=(10000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) - (GSD VISIBILITY ) SCAL=( 2.7) - L=(10000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) - (LCL AGL HEIGHT ) SCAL=( 5.0) - L=(00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) - (LCL PRESSURE ) SCAL=( 6.0) - L=(00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) - (AVE GRDSCL RN TMPTDY) SCAL=( 3.0) - L=(00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) - (AVE CNVCT RN TMPTDY ) SCAL=( 2.7) - L=(00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) - (RADFLX CNVG TMP TNDY) SCAL=( 3.0) - L=(00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) - (SW RAD TEMP TNDY ) SCAL=( 3.0) - L=(00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) - (LW RAD TEMP TNDY ) SCAL=( 3.0) - L=(00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) - (INSTN OUT SFC SW RAD) SCAL=( 4.0) - L=(10000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) - (INSTN OUT SFC LW RAD) SCAL=( 4.0) - L=(10000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) - (AVE INCMG SFC SW RAD) SCAL=( 4.0) - L=(10000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) - (AVE INCMG SFC LW RAD) SCAL=( 4.0) - L=(10000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) - (AVE OUTGO SFC SW RAD) SCAL=( 4.0) - L=(10000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) - (AVE OUTGO SFC LW RAD) SCAL=( 4.0) - L=(10000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) - (BRIGHTNESS TEMP ) SCAL=( 5.0) - L=(00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) - (BRIGHTNESS TEMP NCAR) SCAL=( 5.0) - L=(10000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) - (INSTN INC SFC SW RAD) SCAL=( 4.0) - L=(10000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) - (INSTN INC SFC LW RAD) SCAL=( 4.0) - L=(10000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) - (INSTN CLR INC SFC SW) SCAL=( 4.0) - L=(10000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) - (ROUGHNESS LENGTH ) SCAL=( 2.7) - L=(10000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) - (FRICTION VELOCITY ) SCAL=( 3.0) - L=(10000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) - (SFC DRAG COEFFICIENT) SCAL=( 3.0) - L=(00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) - (SFC U WIND STRESS ) SCAL=( 3.0) - L=(00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) - (SFC V WIND STRESS ) SCAL=( 3.0) - L=(00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) - (AVE SFC SENHEAT FX ) SCAL=( 4.0) - L=(10000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) - (AVE GROUND HEAT FX ) SCAL=( 4.0) - L=(10000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) - (AVE SNO PHSCNG HT FX) SCAL=( 4.0) - L=(00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) - (AVE SFC LATHEAT FX ) SCAL=( 4.0) - L=(10000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) - (AVE SFC MOMENTUM FX ) SCAL=( 4.0) - L=(10000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) - (ACC SFC EVAPORATION ) SCAL=( 4.0) - L=(10000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) - (ACC POT EVAPORATION ) SCAL=( 4.0) - L=(10000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) - (INST SFC SENHEAT FX ) SCAL=( 3.0) - L=(10000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) - (INST GROUND HEAT FLX) SCAL=( 3.0) - L=(00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) - (INST SFC LATHEAT FX ) SCAL=( 3.0) - L=(10000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) - (LATITUDE ) SCAL=( 4.0) - L=(10000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) - (LONGITUDE ) SCAL=( 4.0) - L=(10000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) - (LAND/SEA MASK ) SCAL=( 1.0) - L=(10000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) - (SEA ICE MASK ) SCAL=( 1.0) - L=(10000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) - (SFC MIDDAY ALBEDO ) SCAL=( 3.0) - L=(00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) - (LIFT PCL LVL PRESS ) SCAL=( 3.0) - L=(00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) - (PRESS AT TROPOPAUSE ) SCAL=( 6.0) - L=(00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) - (HEIGHT AT TROPOPAUSE) SCAL=( 3.0) - L=(10000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) - (TEMP AT TROPOPAUSE ) SCAL=( 5.0) - L=(00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) - (POTENTL TEMP AT TROP) SCAL=( 5.0) - L=(00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) - (U WIND AT TROPOPAUSE) SCAL=( 5.0) - L=(00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) - (V WIND AT TROPOPAUSE) SCAL=( 5.0) - L=(00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) - (SHEAR AT TROPOPAUSE ) SCAL=( 3.0) - L=(00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) - (SPE HUM AT FD HEIGHT) SCAL=( 5.0) - L=(00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) - (TEMP AT FD HEIGHTS ) SCAL=( 5.0) - L=(00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) - (U WIND AT FD HEIGHTS) SCAL=( 5.0) - L=(00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) - (V WIND AT FD HEIGHTS) SCAL=( 5.0) - L=(00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) - (HEIGHT OF FRZ LVL ) SCAL=( 6.0) - L=(10000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) - (REL HUMID AT FRZ LVL) SCAL=( 4.0) - L=(00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) - (HIGHEST FREEZE LVL ) SCAL=( 5.0) - L=(10000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) - (PRESS IN BNDRY LYR ) SCAL=( 6.0) - L=(00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) - (TEMP IN BNDRY LYR ) SCAL=( 3.0) - L=(00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) - (POT TMP IN BNDRY LYR) SCAL=( 3.0) - L=(00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) - (DWPT IN BNDRY LYR ) SCAL=( 3.0) - L=(00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) - (SPC HUM IN BNDRY LYR) SCAL=( 3.0) - L=(10000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) - (REL HUM IN BNDRY LYR) SCAL=( 3.0) - L=(00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) - (MST CNV IN BNDRY LYR) SCAL=( 3.0) - L=(00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) - (P WATER IN BNDRY LYR) SCAL=( 3.0) - L=(10000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) - (U WIND IN BNDRY LYR ) SCAL=( 5.0) - L=(10000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) - (V WIND IN BNDRY LYR ) SCAL=( 5.0) - L=(10000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) - (OMEGA IN BNDRY LYR ) SCAL=( 5.0) - L=(00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) - (MAX 10m WIND SPEED ) SCAL=( 4.0) - L=(00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) - (MAX UPDRAFT VERT VEL) SCAL=( 3.0) - L=(00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) - (MAX DNDRAFT VERT VEL) SCAL=( 3.0) - L=(00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) - (MAX 1km REFLECTIVITY) SCAL=( 4.0) - L=(00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) - (MAX UPDRAFT HELICITY) SCAL=( 3.0) - L=(00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) - (MEAN VERT VEL ) SCAL=( 3.0) - L=(00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) - (MAX VERT INTEG GRAUP) SCAL=( 3.0) - L=(00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) - (LCL AGL HEIGHT ) SCAL=( 5.0) - L=(00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) - (U COMP STORM MOTION ) SCAL=( 4.0) - L=(00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) - (V COMP STORM MOTION ) SCAL=( 4.0) - L=(00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) - (U COMP 0-1 KM SHEAR ) SCAL=( 4.0) - L=(00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) - (V COMP 0-1 KM SHEAR ) SCAL=( 4.0) - L=(00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) - (U COMP 0-6 KM SHEAR ) SCAL=( 4.0) - L=(00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) - (V COMP 0-6 KM SHEAR ) SCAL=( 4.0) - L=(00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) - (SFC WIND GUST ) SCAL=( 3.0) - L=(10000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) - (AVE OUTGO TOA SW RAD) SCAL=( 4.0) - L=(00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) - (AVE OUTGO TOA LW RAD) SCAL=( 4.0) - L=(00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) - (INSTN OUT TOA LW RAD) SCAL=( 3.0) - L=(10000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) - (TOTAL CLD FRACTION ) SCAL=( 3.0) - L=(10000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) - (TOTAL COLUMN CLD WTR) SCAL=( 5.0) - L=(10000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) - (TOTAL COLUMN CLD ICE) SCAL=( 5.0) - L=(10000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) - (TOTAL COLUMN RAIN ) SCAL=( 5.0) - L=(10000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) - (TOTAL COLUMN SNOW ) SCAL=( 5.0) - L=(10000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) - (TOTAL COL CONDENSATE) SCAL=( 5.0) - L=(10000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) - (TOTAL COLD LIQUID ) SCAL=( 5.0) - L=(00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) - (TOTAL MELTING ICE ) SCAL=( 5.0) - L=(00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) - (CEILING ) SCAL=( 5.0) - L=(10000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) - (EMISSIVITY ) SCAL=( 4.0) - L=(00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) - (GOES TB - CH 2 ) SCAL=( 4.0) - L=(00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) - (GOES TB - CH 3 ) SCAL=( 4.0) - L=(00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) - (GOES TB - CH 4 ) SCAL=( 4.0) - L=(00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) - (GOES TB - CH 5 ) SCAL=( 4.0) - L=(00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) - (PV ON THETA SFCS ) SCAL=( 4.0) - L=(10000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) -***DONE WITH THIS GRID*** - diff --git a/parm/optics_luts_DUST_nasa.dat b/parm/optics_luts_DUST_nasa.dat new file mode 100644 index 000000000..ba114c6ee --- /dev/null +++ b/parm/optics_luts_DUST_nasa.dat @@ -0,0 +1,720 @@ + DUST 1 ext + 1.94864 1.94864 1.94864 1.94864 1.94864 1.94864 1.94864 1.94864 + 1.94864 1.94864 1.94864 1.94864 1.94864 1.94864 1.94864 1.94864 + 1.94864 1.94864 1.94864 1.94864 1.94864 1.94864 1.94864 1.94864 + 1.94864 1.94864 1.94864 1.94864 1.94864 1.94864 1.94864 1.94864 + 1.94864 1.94864 1.94864 1.94864 + 2.01649 2.01649 2.01649 2.01649 2.01649 2.01649 2.01649 2.01649 + 2.01649 2.01649 2.01649 2.01649 2.01649 2.01649 2.01649 2.01649 + 2.01649 2.01649 2.01649 2.01649 2.01649 2.01649 2.01649 2.01649 + 2.01649 2.01649 2.01649 2.01649 2.01649 2.01649 2.01649 2.01649 + 2.01649 2.01649 2.01649 2.01649 + 2.01649 2.01649 2.01649 2.01649 2.01649 2.01649 2.01649 2.01649 + 2.01649 2.01649 2.01649 2.01649 2.01649 2.01649 2.01649 2.01649 + 2.01649 2.01649 2.01649 2.01649 2.01649 2.01649 2.01649 2.01649 + 2.01649 2.01649 2.01649 2.01649 2.01649 2.01649 2.01649 2.01649 + 2.01649 2.01649 2.01649 2.01649 + 1.99528 1.99528 1.99528 1.99528 1.99528 1.99528 1.99528 1.99528 + 1.99528 1.99528 1.99528 1.99528 1.99528 1.99528 1.99528 1.99528 + 1.99528 1.99528 1.99528 1.99528 1.99528 1.99528 1.99528 1.99528 + 1.99528 1.99528 1.99528 1.99528 1.99528 1.99528 1.99528 1.99528 + 1.99528 1.99528 1.99528 1.99528 + 1.93435 1.93435 1.93435 1.93435 1.93435 1.93435 1.93435 1.93435 + 1.93435 1.93435 1.93435 1.93435 1.93435 1.93435 1.93435 1.93435 + 1.93435 1.93435 1.93435 1.93435 1.93435 1.93435 1.93435 1.93435 + 1.93435 1.93435 1.93435 1.93435 1.93435 1.93435 1.93435 1.93435 + 1.93435 1.93435 1.93435 1.93435 + 1.29773 1.29773 1.29773 1.29773 1.29773 1.29773 1.29773 1.29773 + 1.29773 1.29773 1.29773 1.29773 1.29773 1.29773 1.29773 1.29773 + 1.29773 1.29773 1.29773 1.29773 1.29773 1.29773 1.29773 1.29773 + 1.29773 1.29773 1.29773 1.29773 1.29773 1.29773 1.29773 1.29773 + 1.29773 1.29773 1.29773 1.29773 + 0.11377 0.11377 0.11377 0.11377 0.11377 0.11377 0.11377 0.11377 + 0.11377 0.11377 0.11377 0.11377 0.11377 0.11377 0.11377 0.11377 + 0.11377 0.11377 0.11377 0.11377 0.11377 0.11377 0.11377 0.11377 + 0.11377 0.11377 0.11377 0.11377 0.11377 0.11377 0.11377 0.11377 + 0.11377 0.11377 0.11377 0.11377 + DUST 1 sca + 1.74200 1.74200 1.74200 1.74200 1.74200 1.74200 1.74200 1.74200 + 1.74200 1.74200 1.74200 1.74200 1.74200 1.74200 1.74200 1.74200 + 1.74200 1.74200 1.74200 1.74200 1.74200 1.74200 1.74200 1.74200 + 1.74200 1.74200 1.74200 1.74200 1.74200 1.74200 1.74200 1.74200 + 1.74200 1.74200 1.74200 1.74200 + 1.94363 1.94363 1.94363 1.94363 1.94363 1.94363 1.94363 1.94363 + 1.94363 1.94363 1.94363 1.94363 1.94363 1.94363 1.94363 1.94363 + 1.94363 1.94363 1.94363 1.94363 1.94363 1.94363 1.94363 1.94363 + 1.94363 1.94363 1.94363 1.94363 1.94363 1.94363 1.94363 1.94363 + 1.94363 1.94363 1.94363 1.94363 + 1.94363 1.94363 1.94363 1.94363 1.94363 1.94363 1.94363 1.94363 + 1.94363 1.94363 1.94363 1.94363 1.94363 1.94363 1.94363 1.94363 + 1.94363 1.94363 1.94363 1.94363 1.94363 1.94363 1.94363 1.94363 + 1.94363 1.94363 1.94363 1.94363 1.94363 1.94363 1.94363 1.94363 + 1.94363 1.94363 1.94363 1.94363 + 1.94481 1.94481 1.94481 1.94481 1.94481 1.94481 1.94481 1.94481 + 1.94481 1.94481 1.94481 1.94481 1.94481 1.94481 1.94481 1.94481 + 1.94481 1.94481 1.94481 1.94481 1.94481 1.94481 1.94481 1.94481 + 1.94481 1.94481 1.94481 1.94481 1.94481 1.94481 1.94481 1.94481 + 1.94481 1.94481 1.94481 1.94481 + 1.89485 1.89485 1.89485 1.89485 1.89485 1.89485 1.89485 1.89485 + 1.89485 1.89485 1.89485 1.89485 1.89485 1.89485 1.89485 1.89485 + 1.89485 1.89485 1.89485 1.89485 1.89485 1.89485 1.89485 1.89485 + 1.89485 1.89485 1.89485 1.89485 1.89485 1.89485 1.89485 1.89485 + 1.89485 1.89485 1.89485 1.89485 + 1.25799 1.25799 1.25799 1.25799 1.25799 1.25799 1.25799 1.25799 + 1.25799 1.25799 1.25799 1.25799 1.25799 1.25799 1.25799 1.25799 + 1.25799 1.25799 1.25799 1.25799 1.25799 1.25799 1.25799 1.25799 + 1.25799 1.25799 1.25799 1.25799 1.25799 1.25799 1.25799 1.25799 + 1.25799 1.25799 1.25799 1.25799 + 0.00540 0.00540 0.00540 0.00540 0.00540 0.00540 0.00540 0.00540 + 0.00540 0.00540 0.00540 0.00540 0.00540 0.00540 0.00540 0.00540 + 0.00540 0.00540 0.00540 0.00540 0.00540 0.00540 0.00540 0.00540 + 0.00540 0.00540 0.00540 0.00540 0.00540 0.00540 0.00540 0.00540 + 0.00540 0.00540 0.00540 0.00540 + DUST 1 asy + 0.76166 0.76166 0.76166 0.76166 0.76166 0.76166 0.76166 0.76166 + 0.76166 0.76166 0.76166 0.76166 0.76166 0.76166 0.76166 0.76166 + 0.76166 0.76166 0.76166 0.76166 0.76166 0.76166 0.76166 0.76166 + 0.76166 0.76166 0.76166 0.76166 0.76166 0.76166 0.76166 0.76166 + 0.76166 0.76166 0.76166 0.76166 + 0.71088 0.71088 0.71088 0.71088 0.71088 0.71088 0.71088 0.71088 + 0.71088 0.71088 0.71088 0.71088 0.71088 0.71088 0.71088 0.71088 + 0.71088 0.71088 0.71088 0.71088 0.71088 0.71088 0.71088 0.71088 + 0.71088 0.71088 0.71088 0.71088 0.71088 0.71088 0.71088 0.71088 + 0.71088 0.71088 0.71088 0.71088 + 0.71088 0.71088 0.71088 0.71088 0.71088 0.71088 0.71088 0.71088 + 0.71088 0.71088 0.71088 0.71088 0.71088 0.71088 0.71088 0.71088 + 0.71088 0.71088 0.71088 0.71088 0.71088 0.71088 0.71088 0.71088 + 0.71088 0.71088 0.71088 0.71088 0.71088 0.71088 0.71088 0.71088 + 0.71088 0.71088 0.71088 0.71088 + 0.70697 0.70697 0.70697 0.70697 0.70697 0.70697 0.70697 0.70697 + 0.70697 0.70697 0.70697 0.70697 0.70697 0.70697 0.70697 0.70697 + 0.70697 0.70697 0.70697 0.70697 0.70697 0.70697 0.70697 0.70697 + 0.70697 0.70697 0.70697 0.70697 0.70697 0.70697 0.70697 0.70697 + 0.70697 0.70697 0.70697 0.70697 + 0.70487 0.70487 0.70487 0.70487 0.70487 0.70487 0.70487 0.70487 + 0.70487 0.70487 0.70487 0.70487 0.70487 0.70487 0.70487 0.70487 + 0.70487 0.70487 0.70487 0.70487 0.70487 0.70487 0.70487 0.70487 + 0.70487 0.70487 0.70487 0.70487 0.70487 0.70487 0.70487 0.70487 + 0.70487 0.70487 0.70487 0.70487 + 0.65305 0.65305 0.65305 0.65305 0.65305 0.65305 0.65305 0.65305 + 0.65305 0.65305 0.65305 0.65305 0.65305 0.65305 0.65305 0.65305 + 0.65305 0.65305 0.65305 0.65305 0.65305 0.65305 0.65305 0.65305 + 0.65305 0.65305 0.65305 0.65305 0.65305 0.65305 0.65305 0.65305 + 0.65305 0.65305 0.65305 0.65305 + 0.03460 0.03460 0.03460 0.03460 0.03460 0.03460 0.03460 0.03460 + 0.03460 0.03460 0.03460 0.03460 0.03460 0.03460 0.03460 0.03460 + 0.03460 0.03460 0.03460 0.03460 0.03460 0.03460 0.03460 0.03460 + 0.03460 0.03460 0.03460 0.03460 0.03460 0.03460 0.03460 0.03460 + 0.03460 0.03460 0.03460 0.03460 + DUST 1 ssa + 0.89396 0.89396 0.89396 0.89396 0.89396 0.89396 0.89396 0.89396 + 0.89396 0.89396 0.89396 0.89396 0.89396 0.89396 0.89396 0.89396 + 0.89396 0.89396 0.89396 0.89396 0.89396 0.89396 0.89396 0.89396 + 0.89396 0.89396 0.89396 0.89396 0.89396 0.89396 0.89396 0.89396 + 0.89396 0.89396 0.89396 0.89396 + 0.96387 0.96387 0.96387 0.96387 0.96387 0.96387 0.96387 0.96387 + 0.96387 0.96387 0.96387 0.96387 0.96387 0.96387 0.96387 0.96387 + 0.96387 0.96387 0.96387 0.96387 0.96387 0.96387 0.96387 0.96387 + 0.96387 0.96387 0.96387 0.96387 0.96387 0.96387 0.96387 0.96387 + 0.96387 0.96387 0.96387 0.96387 + 0.96387 0.96387 0.96387 0.96387 0.96387 0.96387 0.96387 0.96387 + 0.96387 0.96387 0.96387 0.96387 0.96387 0.96387 0.96387 0.96387 + 0.96387 0.96387 0.96387 0.96387 0.96387 0.96387 0.96387 0.96387 + 0.96387 0.96387 0.96387 0.96387 0.96387 0.96387 0.96387 0.96387 + 0.96387 0.96387 0.96387 0.96387 + 0.97471 0.97471 0.97471 0.97471 0.97471 0.97471 0.97471 0.97471 + 0.97471 0.97471 0.97471 0.97471 0.97471 0.97471 0.97471 0.97471 + 0.97471 0.97471 0.97471 0.97471 0.97471 0.97471 0.97471 0.97471 + 0.97471 0.97471 0.97471 0.97471 0.97471 0.97471 0.97471 0.97471 + 0.97471 0.97471 0.97471 0.97471 + 0.97958 0.97958 0.97958 0.97958 0.97958 0.97958 0.97958 0.97958 + 0.97958 0.97958 0.97958 0.97958 0.97958 0.97958 0.97958 0.97958 + 0.97958 0.97958 0.97958 0.97958 0.97958 0.97958 0.97958 0.97958 + 0.97958 0.97958 0.97958 0.97958 0.97958 0.97958 0.97958 0.97958 + 0.97958 0.97958 0.97958 0.97958 + 0.96938 0.96938 0.96938 0.96938 0.96938 0.96938 0.96938 0.96938 + 0.96938 0.96938 0.96938 0.96938 0.96938 0.96938 0.96938 0.96938 + 0.96938 0.96938 0.96938 0.96938 0.96938 0.96938 0.96938 0.96938 + 0.96938 0.96938 0.96938 0.96938 0.96938 0.96938 0.96938 0.96938 + 0.96938 0.96938 0.96938 0.96938 + 0.04749 0.04749 0.04749 0.04749 0.04749 0.04749 0.04749 0.04749 + 0.04749 0.04749 0.04749 0.04749 0.04749 0.04749 0.04749 0.04749 + 0.04749 0.04749 0.04749 0.04749 0.04749 0.04749 0.04749 0.04749 + 0.04749 0.04749 0.04749 0.04749 0.04749 0.04749 0.04749 0.04749 + 0.04749 0.04749 0.04749 0.04749 + DUST 2 ext + 0.59199 0.59199 0.59199 0.59199 0.59199 0.59199 0.59199 0.59199 + 0.59199 0.59199 0.59199 0.59199 0.59199 0.59199 0.59199 0.59199 + 0.59199 0.59199 0.59199 0.59199 0.59199 0.59199 0.59199 0.59199 + 0.59199 0.59199 0.59199 0.59199 0.59199 0.59199 0.59199 0.59199 + 0.59199 0.59199 0.59199 0.59199 + 0.64447 0.64447 0.64447 0.64447 0.64447 0.64447 0.64447 0.64447 + 0.64447 0.64447 0.64447 0.64447 0.64447 0.64447 0.64447 0.64447 + 0.64447 0.64447 0.64447 0.64447 0.64447 0.64447 0.64447 0.64447 + 0.64447 0.64447 0.64447 0.64447 0.64447 0.64447 0.64447 0.64447 + 0.64447 0.64447 0.64447 0.64447 + 0.64447 0.64447 0.64447 0.64447 0.64447 0.64447 0.64447 0.64447 + 0.64447 0.64447 0.64447 0.64447 0.64447 0.64447 0.64447 0.64447 + 0.64447 0.64447 0.64447 0.64447 0.64447 0.64447 0.64447 0.64447 + 0.64447 0.64447 0.64447 0.64447 0.64447 0.64447 0.64447 0.64447 + 0.64447 0.64447 0.64447 0.64447 + 0.66068 0.66068 0.66068 0.66068 0.66068 0.66068 0.66068 0.66068 + 0.66068 0.66068 0.66068 0.66068 0.66068 0.66068 0.66068 0.66068 + 0.66068 0.66068 0.66068 0.66068 0.66068 0.66068 0.66068 0.66068 + 0.66068 0.66068 0.66068 0.66068 0.66068 0.66068 0.66068 0.66068 + 0.66068 0.66068 0.66068 0.66068 + 0.69937 0.69937 0.69937 0.69937 0.69937 0.69937 0.69937 0.69937 + 0.69937 0.69937 0.69937 0.69937 0.69937 0.69937 0.69937 0.69937 + 0.69937 0.69937 0.69937 0.69937 0.69937 0.69937 0.69937 0.69937 + 0.69937 0.69937 0.69937 0.69937 0.69937 0.69937 0.69937 0.69937 + 0.69937 0.69937 0.69937 0.69937 + 0.89154 0.89154 0.89154 0.89154 0.89154 0.89154 0.89154 0.89154 + 0.89154 0.89154 0.89154 0.89154 0.89154 0.89154 0.89154 0.89154 + 0.89154 0.89154 0.89154 0.89154 0.89154 0.89154 0.89154 0.89154 + 0.89154 0.89154 0.89154 0.89154 0.89154 0.89154 0.89154 0.89154 + 0.89154 0.89154 0.89154 0.89154 + 0.15545 0.15545 0.15545 0.15545 0.15545 0.15545 0.15545 0.15545 + 0.15545 0.15545 0.15545 0.15545 0.15545 0.15545 0.15545 0.15545 + 0.15545 0.15545 0.15545 0.15545 0.15545 0.15545 0.15545 0.15545 + 0.15545 0.15545 0.15545 0.15545 0.15545 0.15545 0.15545 0.15545 + 0.15545 0.15545 0.15545 0.15545 + DUST 2 sca + 0.47257 0.47257 0.47257 0.47257 0.47257 0.47257 0.47257 0.47257 + 0.47257 0.47257 0.47257 0.47257 0.47257 0.47257 0.47257 0.47257 + 0.47257 0.47257 0.47257 0.47257 0.47257 0.47257 0.47257 0.47257 + 0.47257 0.47257 0.47257 0.47257 0.47257 0.47257 0.47257 0.47257 + 0.47257 0.47257 0.47257 0.47257 + 0.59147 0.59147 0.59147 0.59147 0.59147 0.59147 0.59147 0.59147 + 0.59147 0.59147 0.59147 0.59147 0.59147 0.59147 0.59147 0.59147 + 0.59147 0.59147 0.59147 0.59147 0.59147 0.59147 0.59147 0.59147 + 0.59147 0.59147 0.59147 0.59147 0.59147 0.59147 0.59147 0.59147 + 0.59147 0.59147 0.59147 0.59147 + 0.59147 0.59147 0.59147 0.59147 0.59147 0.59147 0.59147 0.59147 + 0.59147 0.59147 0.59147 0.59147 0.59147 0.59147 0.59147 0.59147 + 0.59147 0.59147 0.59147 0.59147 0.59147 0.59147 0.59147 0.59147 + 0.59147 0.59147 0.59147 0.59147 0.59147 0.59147 0.59147 0.59147 + 0.59147 0.59147 0.59147 0.59147 + 0.62094 0.62094 0.62094 0.62094 0.62094 0.62094 0.62094 0.62094 + 0.62094 0.62094 0.62094 0.62094 0.62094 0.62094 0.62094 0.62094 + 0.62094 0.62094 0.62094 0.62094 0.62094 0.62094 0.62094 0.62094 + 0.62094 0.62094 0.62094 0.62094 0.62094 0.62094 0.62094 0.62094 + 0.62094 0.62094 0.62094 0.62094 + 0.66548 0.66548 0.66548 0.66548 0.66548 0.66548 0.66548 0.66548 + 0.66548 0.66548 0.66548 0.66548 0.66548 0.66548 0.66548 0.66548 + 0.66548 0.66548 0.66548 0.66548 0.66548 0.66548 0.66548 0.66548 + 0.66548 0.66548 0.66548 0.66548 0.66548 0.66548 0.66548 0.66548 + 0.66548 0.66548 0.66548 0.66548 + 0.84917 0.84917 0.84917 0.84917 0.84917 0.84917 0.84917 0.84917 + 0.84917 0.84917 0.84917 0.84917 0.84917 0.84917 0.84917 0.84917 + 0.84917 0.84917 0.84917 0.84917 0.84917 0.84917 0.84917 0.84917 + 0.84917 0.84917 0.84917 0.84917 0.84917 0.84917 0.84917 0.84917 + 0.84917 0.84917 0.84917 0.84917 + 0.03505 0.03505 0.03505 0.03505 0.03505 0.03505 0.03505 0.03505 + 0.03505 0.03505 0.03505 0.03505 0.03505 0.03505 0.03505 0.03505 + 0.03505 0.03505 0.03505 0.03505 0.03505 0.03505 0.03505 0.03505 + 0.03505 0.03505 0.03505 0.03505 0.03505 0.03505 0.03505 0.03505 + 0.03505 0.03505 0.03505 0.03505 + DUST 2 asy + 0.82765 0.82765 0.82765 0.82765 0.82765 0.82765 0.82765 0.82765 + 0.82765 0.82765 0.82765 0.82765 0.82765 0.82765 0.82765 0.82765 + 0.82765 0.82765 0.82765 0.82765 0.82765 0.82765 0.82765 0.82765 + 0.82765 0.82765 0.82765 0.82765 0.82765 0.82765 0.82765 0.82765 + 0.82765 0.82765 0.82765 0.82765 + 0.75416 0.75416 0.75416 0.75416 0.75416 0.75416 0.75416 0.75416 + 0.75416 0.75416 0.75416 0.75416 0.75416 0.75416 0.75416 0.75416 + 0.75416 0.75416 0.75416 0.75416 0.75416 0.75416 0.75416 0.75416 + 0.75416 0.75416 0.75416 0.75416 0.75416 0.75416 0.75416 0.75416 + 0.75416 0.75416 0.75416 0.75416 + 0.75416 0.75416 0.75416 0.75416 0.75416 0.75416 0.75416 0.75416 + 0.75416 0.75416 0.75416 0.75416 0.75416 0.75416 0.75416 0.75416 + 0.75416 0.75416 0.75416 0.75416 0.75416 0.75416 0.75416 0.75416 + 0.75416 0.75416 0.75416 0.75416 0.75416 0.75416 0.75416 0.75416 + 0.75416 0.75416 0.75416 0.75416 + 0.72659 0.72659 0.72659 0.72659 0.72659 0.72659 0.72659 0.72659 + 0.72659 0.72659 0.72659 0.72659 0.72659 0.72659 0.72659 0.72659 + 0.72659 0.72659 0.72659 0.72659 0.72659 0.72659 0.72659 0.72659 + 0.72659 0.72659 0.72659 0.72659 0.72659 0.72659 0.72659 0.72659 + 0.72659 0.72659 0.72659 0.72659 + 0.70684 0.70684 0.70684 0.70684 0.70684 0.70684 0.70684 0.70684 + 0.70684 0.70684 0.70684 0.70684 0.70684 0.70684 0.70684 0.70684 + 0.70684 0.70684 0.70684 0.70684 0.70684 0.70684 0.70684 0.70684 + 0.70684 0.70684 0.70684 0.70684 0.70684 0.70684 0.70684 0.70684 + 0.70684 0.70684 0.70684 0.70684 + 0.72831 0.72831 0.72831 0.72831 0.72831 0.72831 0.72831 0.72831 + 0.72831 0.72831 0.72831 0.72831 0.72831 0.72831 0.72831 0.72831 + 0.72831 0.72831 0.72831 0.72831 0.72831 0.72831 0.72831 0.72831 + 0.72831 0.72831 0.72831 0.72831 0.72831 0.72831 0.72831 0.72831 + 0.72831 0.72831 0.72831 0.72831 + 0.14287 0.14287 0.14287 0.14287 0.14287 0.14287 0.14287 0.14287 + 0.14287 0.14287 0.14287 0.14287 0.14287 0.14287 0.14287 0.14287 + 0.14287 0.14287 0.14287 0.14287 0.14287 0.14287 0.14287 0.14287 + 0.14287 0.14287 0.14287 0.14287 0.14287 0.14287 0.14287 0.14287 + 0.14287 0.14287 0.14287 0.14287 + DUST 2 ssa + 0.79826 0.79826 0.79826 0.79826 0.79826 0.79826 0.79826 0.79826 + 0.79826 0.79826 0.79826 0.79826 0.79826 0.79826 0.79826 0.79826 + 0.79826 0.79826 0.79826 0.79826 0.79826 0.79826 0.79826 0.79826 + 0.79826 0.79826 0.79826 0.79826 0.79826 0.79826 0.79826 0.79826 + 0.79826 0.79826 0.79826 0.79826 + 0.91776 0.91776 0.91776 0.91776 0.91776 0.91776 0.91776 0.91776 + 0.91776 0.91776 0.91776 0.91776 0.91776 0.91776 0.91776 0.91776 + 0.91776 0.91776 0.91776 0.91776 0.91776 0.91776 0.91776 0.91776 + 0.91776 0.91776 0.91776 0.91776 0.91776 0.91776 0.91776 0.91776 + 0.91776 0.91776 0.91776 0.91776 + 0.91776 0.91776 0.91776 0.91776 0.91776 0.91776 0.91776 0.91776 + 0.91776 0.91776 0.91776 0.91776 0.91776 0.91776 0.91776 0.91776 + 0.91776 0.91776 0.91776 0.91776 0.91776 0.91776 0.91776 0.91776 + 0.91776 0.91776 0.91776 0.91776 0.91776 0.91776 0.91776 0.91776 + 0.91776 0.91776 0.91776 0.91776 + 0.93984 0.93984 0.93984 0.93984 0.93984 0.93984 0.93984 0.93984 + 0.93984 0.93984 0.93984 0.93984 0.93984 0.93984 0.93984 0.93984 + 0.93984 0.93984 0.93984 0.93984 0.93984 0.93984 0.93984 0.93984 + 0.93984 0.93984 0.93984 0.93984 0.93984 0.93984 0.93984 0.93984 + 0.93984 0.93984 0.93984 0.93984 + 0.95153 0.95153 0.95153 0.95153 0.95153 0.95153 0.95153 0.95153 + 0.95153 0.95153 0.95153 0.95153 0.95153 0.95153 0.95153 0.95153 + 0.95153 0.95153 0.95153 0.95153 0.95153 0.95153 0.95153 0.95153 + 0.95153 0.95153 0.95153 0.95153 0.95153 0.95153 0.95153 0.95153 + 0.95153 0.95153 0.95153 0.95153 + 0.95247 0.95247 0.95247 0.95247 0.95247 0.95247 0.95247 0.95247 + 0.95247 0.95247 0.95247 0.95247 0.95247 0.95247 0.95247 0.95247 + 0.95247 0.95247 0.95247 0.95247 0.95247 0.95247 0.95247 0.95247 + 0.95247 0.95247 0.95247 0.95247 0.95247 0.95247 0.95247 0.95247 + 0.95247 0.95247 0.95247 0.95247 + 0.22547 0.22547 0.22547 0.22547 0.22547 0.22547 0.22547 0.22547 + 0.22547 0.22547 0.22547 0.22547 0.22547 0.22547 0.22547 0.22547 + 0.22547 0.22547 0.22547 0.22547 0.22547 0.22547 0.22547 0.22547 + 0.22547 0.22547 0.22547 0.22547 0.22547 0.22547 0.22547 0.22547 + 0.22547 0.22547 0.22547 0.22547 + DUST 3 ext + 0.30948 0.30948 0.30948 0.30948 0.30948 0.30948 0.30948 0.30948 + 0.30948 0.30948 0.30948 0.30948 0.30948 0.30948 0.30948 0.30948 + 0.30948 0.30948 0.30948 0.30948 0.30948 0.30948 0.30948 0.30948 + 0.30948 0.30948 0.30948 0.30948 0.30948 0.30948 0.30948 0.30948 + 0.30948 0.30948 0.30948 0.30948 + 0.33388 0.33388 0.33388 0.33388 0.33388 0.33388 0.33388 0.33388 + 0.33388 0.33388 0.33388 0.33388 0.33388 0.33388 0.33388 0.33388 + 0.33388 0.33388 0.33388 0.33388 0.33388 0.33388 0.33388 0.33388 + 0.33388 0.33388 0.33388 0.33388 0.33388 0.33388 0.33388 0.33388 + 0.33388 0.33388 0.33388 0.33388 + 0.33388 0.33388 0.33388 0.33388 0.33388 0.33388 0.33388 0.33388 + 0.33388 0.33388 0.33388 0.33388 0.33388 0.33388 0.33388 0.33388 + 0.33388 0.33388 0.33388 0.33388 0.33388 0.33388 0.33388 0.33388 + 0.33388 0.33388 0.33388 0.33388 0.33388 0.33388 0.33388 0.33388 + 0.33388 0.33388 0.33388 0.33388 + 0.34427 0.34427 0.34427 0.34427 0.34427 0.34427 0.34427 0.34427 + 0.34427 0.34427 0.34427 0.34427 0.34427 0.34427 0.34427 0.34427 + 0.34427 0.34427 0.34427 0.34427 0.34427 0.34427 0.34427 0.34427 + 0.34427 0.34427 0.34427 0.34427 0.34427 0.34427 0.34427 0.34427 + 0.34427 0.34427 0.34427 0.34427 + 0.36108 0.36108 0.36108 0.36108 0.36108 0.36108 0.36108 0.36108 + 0.36108 0.36108 0.36108 0.36108 0.36108 0.36108 0.36108 0.36108 + 0.36108 0.36108 0.36108 0.36108 0.36108 0.36108 0.36108 0.36108 + 0.36108 0.36108 0.36108 0.36108 0.36108 0.36108 0.36108 0.36108 + 0.36108 0.36108 0.36108 0.36108 + 0.41983 0.41983 0.41983 0.41983 0.41983 0.41983 0.41983 0.41983 + 0.41983 0.41983 0.41983 0.41983 0.41983 0.41983 0.41983 0.41983 + 0.41983 0.41983 0.41983 0.41983 0.41983 0.41983 0.41983 0.41983 + 0.41983 0.41983 0.41983 0.41983 0.41983 0.41983 0.41983 0.41983 + 0.41983 0.41983 0.41983 0.41983 + 0.22625 0.22625 0.22625 0.22625 0.22625 0.22625 0.22625 0.22625 + 0.22625 0.22625 0.22625 0.22625 0.22625 0.22625 0.22625 0.22625 + 0.22625 0.22625 0.22625 0.22625 0.22625 0.22625 0.22625 0.22625 + 0.22625 0.22625 0.22625 0.22625 0.22625 0.22625 0.22625 0.22625 + 0.22625 0.22625 0.22625 0.22625 + DUST 3 sca + 0.22731 0.22731 0.22731 0.22731 0.22731 0.22731 0.22731 0.22731 + 0.22731 0.22731 0.22731 0.22731 0.22731 0.22731 0.22731 0.22731 + 0.22731 0.22731 0.22731 0.22731 0.22731 0.22731 0.22731 0.22731 + 0.22731 0.22731 0.22731 0.22731 0.22731 0.22731 0.22731 0.22731 + 0.22731 0.22731 0.22731 0.22731 + 0.29583 0.29583 0.29583 0.29583 0.29583 0.29583 0.29583 0.29583 + 0.29583 0.29583 0.29583 0.29583 0.29583 0.29583 0.29583 0.29583 + 0.29583 0.29583 0.29583 0.29583 0.29583 0.29583 0.29583 0.29583 + 0.29583 0.29583 0.29583 0.29583 0.29583 0.29583 0.29583 0.29583 + 0.29583 0.29583 0.29583 0.29583 + 0.29583 0.29583 0.29583 0.29583 0.29583 0.29583 0.29583 0.29583 + 0.29583 0.29583 0.29583 0.29583 0.29583 0.29583 0.29583 0.29583 + 0.29583 0.29583 0.29583 0.29583 0.29583 0.29583 0.29583 0.29583 + 0.29583 0.29583 0.29583 0.29583 0.29583 0.29583 0.29583 0.29583 + 0.29583 0.29583 0.29583 0.29583 + 0.31536 0.31536 0.31536 0.31536 0.31536 0.31536 0.31536 0.31536 + 0.31536 0.31536 0.31536 0.31536 0.31536 0.31536 0.31536 0.31536 + 0.31536 0.31536 0.31536 0.31536 0.31536 0.31536 0.31536 0.31536 + 0.31536 0.31536 0.31536 0.31536 0.31536 0.31536 0.31536 0.31536 + 0.31536 0.31536 0.31536 0.31536 + 0.33467 0.33467 0.33467 0.33467 0.33467 0.33467 0.33467 0.33467 + 0.33467 0.33467 0.33467 0.33467 0.33467 0.33467 0.33467 0.33467 + 0.33467 0.33467 0.33467 0.33467 0.33467 0.33467 0.33467 0.33467 + 0.33467 0.33467 0.33467 0.33467 0.33467 0.33467 0.33467 0.33467 + 0.33467 0.33467 0.33467 0.33467 + 0.38226 0.38226 0.38226 0.38226 0.38226 0.38226 0.38226 0.38226 + 0.38226 0.38226 0.38226 0.38226 0.38226 0.38226 0.38226 0.38226 + 0.38226 0.38226 0.38226 0.38226 0.38226 0.38226 0.38226 0.38226 + 0.38226 0.38226 0.38226 0.38226 0.38226 0.38226 0.38226 0.38226 + 0.38226 0.38226 0.38226 0.38226 + 0.09755 0.09755 0.09755 0.09755 0.09755 0.09755 0.09755 0.09755 + 0.09755 0.09755 0.09755 0.09755 0.09755 0.09755 0.09755 0.09755 + 0.09755 0.09755 0.09755 0.09755 0.09755 0.09755 0.09755 0.09755 + 0.09755 0.09755 0.09755 0.09755 0.09755 0.09755 0.09755 0.09755 + 0.09755 0.09755 0.09755 0.09755 + DUST 3 asy + 0.88057 0.88057 0.88057 0.88057 0.88057 0.88057 0.88057 0.88057 + 0.88057 0.88057 0.88057 0.88057 0.88057 0.88057 0.88057 0.88057 + 0.88057 0.88057 0.88057 0.88057 0.88057 0.88057 0.88057 0.88057 + 0.88057 0.88057 0.88057 0.88057 0.88057 0.88057 0.88057 0.88057 + 0.88057 0.88057 0.88057 0.88057 + 0.79637 0.79637 0.79637 0.79637 0.79637 0.79637 0.79637 0.79637 + 0.79637 0.79637 0.79637 0.79637 0.79637 0.79637 0.79637 0.79637 + 0.79637 0.79637 0.79637 0.79637 0.79637 0.79637 0.79637 0.79637 + 0.79637 0.79637 0.79637 0.79637 0.79637 0.79637 0.79637 0.79637 + 0.79637 0.79637 0.79637 0.79637 + 0.79637 0.79637 0.79637 0.79637 0.79637 0.79637 0.79637 0.79637 + 0.79637 0.79637 0.79637 0.79637 0.79637 0.79637 0.79637 0.79637 + 0.79637 0.79637 0.79637 0.79637 0.79637 0.79637 0.79637 0.79637 + 0.79637 0.79637 0.79637 0.79637 0.79637 0.79637 0.79637 0.79637 + 0.79637 0.79637 0.79637 0.79637 + 0.77332 0.77332 0.77332 0.77332 0.77332 0.77332 0.77332 0.77332 + 0.77332 0.77332 0.77332 0.77332 0.77332 0.77332 0.77332 0.77332 + 0.77332 0.77332 0.77332 0.77332 0.77332 0.77332 0.77332 0.77332 + 0.77332 0.77332 0.77332 0.77332 0.77332 0.77332 0.77332 0.77332 + 0.77332 0.77332 0.77332 0.77332 + 0.75693 0.75693 0.75693 0.75693 0.75693 0.75693 0.75693 0.75693 + 0.75693 0.75693 0.75693 0.75693 0.75693 0.75693 0.75693 0.75693 + 0.75693 0.75693 0.75693 0.75693 0.75693 0.75693 0.75693 0.75693 + 0.75693 0.75693 0.75693 0.75693 0.75693 0.75693 0.75693 0.75693 + 0.75693 0.75693 0.75693 0.75693 + 0.72148 0.72148 0.72148 0.72148 0.72148 0.72148 0.72148 0.72148 + 0.72148 0.72148 0.72148 0.72148 0.72148 0.72148 0.72148 0.72148 + 0.72148 0.72148 0.72148 0.72148 0.72148 0.72148 0.72148 0.72148 + 0.72148 0.72148 0.72148 0.72148 0.72148 0.72148 0.72148 0.72148 + 0.72148 0.72148 0.72148 0.72148 + 0.39855 0.39855 0.39855 0.39855 0.39855 0.39855 0.39855 0.39855 + 0.39855 0.39855 0.39855 0.39855 0.39855 0.39855 0.39855 0.39855 + 0.39855 0.39855 0.39855 0.39855 0.39855 0.39855 0.39855 0.39855 + 0.39855 0.39855 0.39855 0.39855 0.39855 0.39855 0.39855 0.39855 + 0.39855 0.39855 0.39855 0.39855 + DUST 3 ssa + 0.73450 0.73450 0.73450 0.73450 0.73450 0.73450 0.73450 0.73450 + 0.73450 0.73450 0.73450 0.73450 0.73450 0.73450 0.73450 0.73450 + 0.73450 0.73450 0.73450 0.73450 0.73450 0.73450 0.73450 0.73450 + 0.73450 0.73450 0.73450 0.73450 0.73450 0.73450 0.73450 0.73450 + 0.73450 0.73450 0.73450 0.73450 + 0.88604 0.88604 0.88604 0.88604 0.88604 0.88604 0.88604 0.88604 + 0.88604 0.88604 0.88604 0.88604 0.88604 0.88604 0.88604 0.88604 + 0.88604 0.88604 0.88604 0.88604 0.88604 0.88604 0.88604 0.88604 + 0.88604 0.88604 0.88604 0.88604 0.88604 0.88604 0.88604 0.88604 + 0.88604 0.88604 0.88604 0.88604 + 0.88604 0.88604 0.88604 0.88604 0.88604 0.88604 0.88604 0.88604 + 0.88604 0.88604 0.88604 0.88604 0.88604 0.88604 0.88604 0.88604 + 0.88604 0.88604 0.88604 0.88604 0.88604 0.88604 0.88604 0.88604 + 0.88604 0.88604 0.88604 0.88604 0.88604 0.88604 0.88604 0.88604 + 0.88604 0.88604 0.88604 0.88604 + 0.91604 0.91604 0.91604 0.91604 0.91604 0.91604 0.91604 0.91604 + 0.91604 0.91604 0.91604 0.91604 0.91604 0.91604 0.91604 0.91604 + 0.91604 0.91604 0.91604 0.91604 0.91604 0.91604 0.91604 0.91604 + 0.91604 0.91604 0.91604 0.91604 0.91604 0.91604 0.91604 0.91604 + 0.91604 0.91604 0.91604 0.91604 + 0.92686 0.92686 0.92686 0.92686 0.92686 0.92686 0.92686 0.92686 + 0.92686 0.92686 0.92686 0.92686 0.92686 0.92686 0.92686 0.92686 + 0.92686 0.92686 0.92686 0.92686 0.92686 0.92686 0.92686 0.92686 + 0.92686 0.92686 0.92686 0.92686 0.92686 0.92686 0.92686 0.92686 + 0.92686 0.92686 0.92686 0.92686 + 0.91053 0.91053 0.91053 0.91053 0.91053 0.91053 0.91053 0.91053 + 0.91053 0.91053 0.91053 0.91053 0.91053 0.91053 0.91053 0.91053 + 0.91053 0.91053 0.91053 0.91053 0.91053 0.91053 0.91053 0.91053 + 0.91053 0.91053 0.91053 0.91053 0.91053 0.91053 0.91053 0.91053 + 0.91053 0.91053 0.91053 0.91053 + 0.43115 0.43115 0.43115 0.43115 0.43115 0.43115 0.43115 0.43115 + 0.43115 0.43115 0.43115 0.43115 0.43115 0.43115 0.43115 0.43115 + 0.43115 0.43115 0.43115 0.43115 0.43115 0.43115 0.43115 0.43115 + 0.43115 0.43115 0.43115 0.43115 0.43115 0.43115 0.43115 0.43115 + 0.43115 0.43115 0.43115 0.43115 + DUST 4 ext + 0.15845 0.15845 0.15845 0.15845 0.15845 0.15845 0.15845 0.15845 + 0.15845 0.15845 0.15845 0.15845 0.15845 0.15845 0.15845 0.15845 + 0.15845 0.15845 0.15845 0.15845 0.15845 0.15845 0.15845 0.15845 + 0.15845 0.15845 0.15845 0.15845 0.15845 0.15845 0.15845 0.15845 + 0.15845 0.15845 0.15845 0.15845 + 0.16736 0.16736 0.16736 0.16736 0.16736 0.16736 0.16736 0.16736 + 0.16736 0.16736 0.16736 0.16736 0.16736 0.16736 0.16736 0.16736 + 0.16736 0.16736 0.16736 0.16736 0.16736 0.16736 0.16736 0.16736 + 0.16736 0.16736 0.16736 0.16736 0.16736 0.16736 0.16736 0.16736 + 0.16736 0.16736 0.16736 0.16736 + 0.16736 0.16736 0.16736 0.16736 0.16736 0.16736 0.16736 0.16736 + 0.16736 0.16736 0.16736 0.16736 0.16736 0.16736 0.16736 0.16736 + 0.16736 0.16736 0.16736 0.16736 0.16736 0.16736 0.16736 0.16736 + 0.16736 0.16736 0.16736 0.16736 0.16736 0.16736 0.16736 0.16736 + 0.16736 0.16736 0.16736 0.16736 + 0.17134 0.17134 0.17134 0.17134 0.17134 0.17134 0.17134 0.17134 + 0.17134 0.17134 0.17134 0.17134 0.17134 0.17134 0.17134 0.17134 + 0.17134 0.17134 0.17134 0.17134 0.17134 0.17134 0.17134 0.17134 + 0.17134 0.17134 0.17134 0.17134 0.17134 0.17134 0.17134 0.17134 + 0.17134 0.17134 0.17134 0.17134 + 0.17814 0.17814 0.17814 0.17814 0.17814 0.17814 0.17814 0.17814 + 0.17814 0.17814 0.17814 0.17814 0.17814 0.17814 0.17814 0.17814 + 0.17814 0.17814 0.17814 0.17814 0.17814 0.17814 0.17814 0.17814 + 0.17814 0.17814 0.17814 0.17814 0.17814 0.17814 0.17814 0.17814 + 0.17814 0.17814 0.17814 0.17814 + 0.20265 0.20265 0.20265 0.20265 0.20265 0.20265 0.20265 0.20265 + 0.20265 0.20265 0.20265 0.20265 0.20265 0.20265 0.20265 0.20265 + 0.20265 0.20265 0.20265 0.20265 0.20265 0.20265 0.20265 0.20265 + 0.20265 0.20265 0.20265 0.20265 0.20265 0.20265 0.20265 0.20265 + 0.20265 0.20265 0.20265 0.20265 + 0.20360 0.20360 0.20360 0.20360 0.20360 0.20360 0.20360 0.20360 + 0.20360 0.20360 0.20360 0.20360 0.20360 0.20360 0.20360 0.20360 + 0.20360 0.20360 0.20360 0.20360 0.20360 0.20360 0.20360 0.20360 + 0.20360 0.20360 0.20360 0.20360 0.20360 0.20360 0.20360 0.20360 + 0.20360 0.20360 0.20360 0.20360 + DUST 4 sca + 0.10550 0.10550 0.10550 0.10550 0.10550 0.10550 0.10550 0.10550 + 0.10550 0.10550 0.10550 0.10550 0.10550 0.10550 0.10550 0.10550 + 0.10550 0.10550 0.10550 0.10550 0.10550 0.10550 0.10550 0.10550 + 0.10550 0.10550 0.10550 0.10550 0.10550 0.10550 0.10550 0.10550 + 0.10550 0.10550 0.10550 0.10550 + 0.13947 0.13947 0.13947 0.13947 0.13947 0.13947 0.13947 0.13947 + 0.13947 0.13947 0.13947 0.13947 0.13947 0.13947 0.13947 0.13947 + 0.13947 0.13947 0.13947 0.13947 0.13947 0.13947 0.13947 0.13947 + 0.13947 0.13947 0.13947 0.13947 0.13947 0.13947 0.13947 0.13947 + 0.13947 0.13947 0.13947 0.13947 + 0.13947 0.13947 0.13947 0.13947 0.13947 0.13947 0.13947 0.13947 + 0.13947 0.13947 0.13947 0.13947 0.13947 0.13947 0.13947 0.13947 + 0.13947 0.13947 0.13947 0.13947 0.13947 0.13947 0.13947 0.13947 + 0.13947 0.13947 0.13947 0.13947 0.13947 0.13947 0.13947 0.13947 + 0.13947 0.13947 0.13947 0.13947 + 0.14962 0.14962 0.14962 0.14962 0.14962 0.14962 0.14962 0.14962 + 0.14962 0.14962 0.14962 0.14962 0.14962 0.14962 0.14962 0.14962 + 0.14962 0.14962 0.14962 0.14962 0.14962 0.14962 0.14962 0.14962 + 0.14962 0.14962 0.14962 0.14962 0.14962 0.14962 0.14962 0.14962 + 0.14962 0.14962 0.14962 0.14962 + 0.15925 0.15925 0.15925 0.15925 0.15925 0.15925 0.15925 0.15925 + 0.15925 0.15925 0.15925 0.15925 0.15925 0.15925 0.15925 0.15925 + 0.15925 0.15925 0.15925 0.15925 0.15925 0.15925 0.15925 0.15925 + 0.15925 0.15925 0.15925 0.15925 0.15925 0.15925 0.15925 0.15925 + 0.15925 0.15925 0.15925 0.15925 + 0.17476 0.17476 0.17476 0.17476 0.17476 0.17476 0.17476 0.17476 + 0.17476 0.17476 0.17476 0.17476 0.17476 0.17476 0.17476 0.17476 + 0.17476 0.17476 0.17476 0.17476 0.17476 0.17476 0.17476 0.17476 + 0.17476 0.17476 0.17476 0.17476 0.17476 0.17476 0.17476 0.17476 + 0.17476 0.17476 0.17476 0.17476 + 0.10677 0.10677 0.10677 0.10677 0.10677 0.10677 0.10677 0.10677 + 0.10677 0.10677 0.10677 0.10677 0.10677 0.10677 0.10677 0.10677 + 0.10677 0.10677 0.10677 0.10677 0.10677 0.10677 0.10677 0.10677 + 0.10677 0.10677 0.10677 0.10677 0.10677 0.10677 0.10677 0.10677 + 0.10677 0.10677 0.10677 0.10677 + DUST 4 asy + 0.91581 0.91581 0.91581 0.91581 0.91581 0.91581 0.91581 0.91581 + 0.91581 0.91581 0.91581 0.91581 0.91581 0.91581 0.91581 0.91581 + 0.91581 0.91581 0.91581 0.91581 0.91581 0.91581 0.91581 0.91581 + 0.91581 0.91581 0.91581 0.91581 0.91581 0.91581 0.91581 0.91581 + 0.91581 0.91581 0.91581 0.91581 + 0.84029 0.84029 0.84029 0.84029 0.84029 0.84029 0.84029 0.84029 + 0.84029 0.84029 0.84029 0.84029 0.84029 0.84029 0.84029 0.84029 + 0.84029 0.84029 0.84029 0.84029 0.84029 0.84029 0.84029 0.84029 + 0.84029 0.84029 0.84029 0.84029 0.84029 0.84029 0.84029 0.84029 + 0.84029 0.84029 0.84029 0.84029 + 0.84029 0.84029 0.84029 0.84029 0.84029 0.84029 0.84029 0.84029 + 0.84029 0.84029 0.84029 0.84029 0.84029 0.84029 0.84029 0.84029 + 0.84029 0.84029 0.84029 0.84029 0.84029 0.84029 0.84029 0.84029 + 0.84029 0.84029 0.84029 0.84029 0.84029 0.84029 0.84029 0.84029 + 0.84029 0.84029 0.84029 0.84029 + 0.81727 0.81727 0.81727 0.81727 0.81727 0.81727 0.81727 0.81727 + 0.81727 0.81727 0.81727 0.81727 0.81727 0.81727 0.81727 0.81727 + 0.81727 0.81727 0.81727 0.81727 0.81727 0.81727 0.81727 0.81727 + 0.81727 0.81727 0.81727 0.81727 0.81727 0.81727 0.81727 0.81727 + 0.81727 0.81727 0.81727 0.81727 + 0.79887 0.79887 0.79887 0.79887 0.79887 0.79887 0.79887 0.79887 + 0.79887 0.79887 0.79887 0.79887 0.79887 0.79887 0.79887 0.79887 + 0.79887 0.79887 0.79887 0.79887 0.79887 0.79887 0.79887 0.79887 + 0.79887 0.79887 0.79887 0.79887 0.79887 0.79887 0.79887 0.79887 + 0.79887 0.79887 0.79887 0.79887 + 0.77255 0.77255 0.77255 0.77255 0.77255 0.77255 0.77255 0.77255 + 0.77255 0.77255 0.77255 0.77255 0.77255 0.77255 0.77255 0.77255 + 0.77255 0.77255 0.77255 0.77255 0.77255 0.77255 0.77255 0.77255 + 0.77255 0.77255 0.77255 0.77255 0.77255 0.77255 0.77255 0.77255 + 0.77255 0.77255 0.77255 0.77255 + 0.67149 0.67149 0.67149 0.67149 0.67149 0.67149 0.67149 0.67149 + 0.67149 0.67149 0.67149 0.67149 0.67149 0.67149 0.67149 0.67149 + 0.67149 0.67149 0.67149 0.67149 0.67149 0.67149 0.67149 0.67149 + 0.67149 0.67149 0.67149 0.67149 0.67149 0.67149 0.67149 0.67149 + 0.67149 0.67149 0.67149 0.67149 + DUST 4 ssa + 0.66580 0.66580 0.66580 0.66580 0.66580 0.66580 0.66580 0.66580 + 0.66580 0.66580 0.66580 0.66580 0.66580 0.66580 0.66580 0.66580 + 0.66580 0.66580 0.66580 0.66580 0.66580 0.66580 0.66580 0.66580 + 0.66580 0.66580 0.66580 0.66580 0.66580 0.66580 0.66580 0.66580 + 0.66580 0.66580 0.66580 0.66580 + 0.83335 0.83335 0.83335 0.83335 0.83335 0.83335 0.83335 0.83335 + 0.83335 0.83335 0.83335 0.83335 0.83335 0.83335 0.83335 0.83335 + 0.83335 0.83335 0.83335 0.83335 0.83335 0.83335 0.83335 0.83335 + 0.83335 0.83335 0.83335 0.83335 0.83335 0.83335 0.83335 0.83335 + 0.83335 0.83335 0.83335 0.83335 + 0.83335 0.83335 0.83335 0.83335 0.83335 0.83335 0.83335 0.83335 + 0.83335 0.83335 0.83335 0.83335 0.83335 0.83335 0.83335 0.83335 + 0.83335 0.83335 0.83335 0.83335 0.83335 0.83335 0.83335 0.83335 + 0.83335 0.83335 0.83335 0.83335 0.83335 0.83335 0.83335 0.83335 + 0.83335 0.83335 0.83335 0.83335 + 0.87327 0.87327 0.87327 0.87327 0.87327 0.87327 0.87327 0.87327 + 0.87327 0.87327 0.87327 0.87327 0.87327 0.87327 0.87327 0.87327 + 0.87327 0.87327 0.87327 0.87327 0.87327 0.87327 0.87327 0.87327 + 0.87327 0.87327 0.87327 0.87327 0.87327 0.87327 0.87327 0.87327 + 0.87327 0.87327 0.87327 0.87327 + 0.89395 0.89395 0.89395 0.89395 0.89395 0.89395 0.89395 0.89395 + 0.89395 0.89395 0.89395 0.89395 0.89395 0.89395 0.89395 0.89395 + 0.89395 0.89395 0.89395 0.89395 0.89395 0.89395 0.89395 0.89395 + 0.89395 0.89395 0.89395 0.89395 0.89395 0.89395 0.89395 0.89395 + 0.89395 0.89395 0.89395 0.89395 + 0.86236 0.86236 0.86236 0.86236 0.86236 0.86236 0.86236 0.86236 + 0.86236 0.86236 0.86236 0.86236 0.86236 0.86236 0.86236 0.86236 + 0.86236 0.86236 0.86236 0.86236 0.86236 0.86236 0.86236 0.86236 + 0.86236 0.86236 0.86236 0.86236 0.86236 0.86236 0.86236 0.86236 + 0.86236 0.86236 0.86236 0.86236 + 0.52442 0.52442 0.52442 0.52442 0.52442 0.52442 0.52442 0.52442 + 0.52442 0.52442 0.52442 0.52442 0.52442 0.52442 0.52442 0.52442 + 0.52442 0.52442 0.52442 0.52442 0.52442 0.52442 0.52442 0.52442 + 0.52442 0.52442 0.52442 0.52442 0.52442 0.52442 0.52442 0.52442 + 0.52442 0.52442 0.52442 0.52442 + DUST 5 ext + 0.08061 0.08061 0.08061 0.08061 0.08061 0.08061 0.08061 0.08061 + 0.08061 0.08061 0.08061 0.08061 0.08061 0.08061 0.08061 0.08061 + 0.08061 0.08061 0.08061 0.08061 0.08061 0.08061 0.08061 0.08061 + 0.08061 0.08061 0.08061 0.08061 0.08061 0.08061 0.08061 0.08061 + 0.08061 0.08061 0.08061 0.08061 + 0.08391 0.08391 0.08391 0.08391 0.08391 0.08391 0.08391 0.08391 + 0.08391 0.08391 0.08391 0.08391 0.08391 0.08391 0.08391 0.08391 + 0.08391 0.08391 0.08391 0.08391 0.08391 0.08391 0.08391 0.08391 + 0.08391 0.08391 0.08391 0.08391 0.08391 0.08391 0.08391 0.08391 + 0.08391 0.08391 0.08391 0.08391 + 0.08391 0.08391 0.08391 0.08391 0.08391 0.08391 0.08391 0.08391 + 0.08391 0.08391 0.08391 0.08391 0.08391 0.08391 0.08391 0.08391 + 0.08391 0.08391 0.08391 0.08391 0.08391 0.08391 0.08391 0.08391 + 0.08391 0.08391 0.08391 0.08391 0.08391 0.08391 0.08391 0.08391 + 0.08391 0.08391 0.08391 0.08391 + 0.08489 0.08489 0.08489 0.08489 0.08489 0.08489 0.08489 0.08489 + 0.08489 0.08489 0.08489 0.08489 0.08489 0.08489 0.08489 0.08489 + 0.08489 0.08489 0.08489 0.08489 0.08489 0.08489 0.08489 0.08489 + 0.08489 0.08489 0.08489 0.08489 0.08489 0.08489 0.08489 0.08489 + 0.08489 0.08489 0.08489 0.08489 + 0.08850 0.08850 0.08850 0.08850 0.08850 0.08850 0.08850 0.08850 + 0.08850 0.08850 0.08850 0.08850 0.08850 0.08850 0.08850 0.08850 + 0.08850 0.08850 0.08850 0.08850 0.08850 0.08850 0.08850 0.08850 + 0.08850 0.08850 0.08850 0.08850 0.08850 0.08850 0.08850 0.08850 + 0.08850 0.08850 0.08850 0.08850 + 0.09852 0.09852 0.09852 0.09852 0.09852 0.09852 0.09852 0.09852 + 0.09852 0.09852 0.09852 0.09852 0.09852 0.09852 0.09852 0.09852 + 0.09852 0.09852 0.09852 0.09852 0.09852 0.09852 0.09852 0.09852 + 0.09852 0.09852 0.09852 0.09852 0.09852 0.09852 0.09852 0.09852 + 0.09852 0.09852 0.09852 0.09852 + 0.11163 0.11163 0.11163 0.11163 0.11163 0.11163 0.11163 0.11163 + 0.11163 0.11163 0.11163 0.11163 0.11163 0.11163 0.11163 0.11163 + 0.11163 0.11163 0.11163 0.11163 0.11163 0.11163 0.11163 0.11163 + 0.11163 0.11163 0.11163 0.11163 0.11163 0.11163 0.11163 0.11163 + 0.11163 0.11163 0.11163 0.11163 + DUST 5 sca + 0.04899 0.04899 0.04899 0.04899 0.04899 0.04899 0.04899 0.04899 + 0.04899 0.04899 0.04899 0.04899 0.04899 0.04899 0.04899 0.04899 + 0.04899 0.04899 0.04899 0.04899 0.04899 0.04899 0.04899 0.04899 + 0.04899 0.04899 0.04899 0.04899 0.04899 0.04899 0.04899 0.04899 + 0.04899 0.04899 0.04899 0.04899 + 0.06440 0.06440 0.06440 0.06440 0.06440 0.06440 0.06440 0.06440 + 0.06440 0.06440 0.06440 0.06440 0.06440 0.06440 0.06440 0.06440 + 0.06440 0.06440 0.06440 0.06440 0.06440 0.06440 0.06440 0.06440 + 0.06440 0.06440 0.06440 0.06440 0.06440 0.06440 0.06440 0.06440 + 0.06440 0.06440 0.06440 0.06440 + 0.06440 0.06440 0.06440 0.06440 0.06440 0.06440 0.06440 0.06440 + 0.06440 0.06440 0.06440 0.06440 0.06440 0.06440 0.06440 0.06440 + 0.06440 0.06440 0.06440 0.06440 0.06440 0.06440 0.06440 0.06440 + 0.06440 0.06440 0.06440 0.06440 0.06440 0.06440 0.06440 0.06440 + 0.06440 0.06440 0.06440 0.06440 + 0.06937 0.06937 0.06937 0.06937 0.06937 0.06937 0.06937 0.06937 + 0.06937 0.06937 0.06937 0.06937 0.06937 0.06937 0.06937 0.06937 + 0.06937 0.06937 0.06937 0.06937 0.06937 0.06937 0.06937 0.06937 + 0.06937 0.06937 0.06937 0.06937 0.06937 0.06937 0.06937 0.06937 + 0.06937 0.06937 0.06937 0.06937 + 0.07456 0.07456 0.07456 0.07456 0.07456 0.07456 0.07456 0.07456 + 0.07456 0.07456 0.07456 0.07456 0.07456 0.07456 0.07456 0.07456 + 0.07456 0.07456 0.07456 0.07456 0.07456 0.07456 0.07456 0.07456 + 0.07456 0.07456 0.07456 0.07456 0.07456 0.07456 0.07456 0.07456 + 0.07456 0.07456 0.07456 0.07456 + 0.07955 0.07955 0.07955 0.07955 0.07955 0.07955 0.07955 0.07955 + 0.07955 0.07955 0.07955 0.07955 0.07955 0.07955 0.07955 0.07955 + 0.07955 0.07955 0.07955 0.07955 0.07955 0.07955 0.07955 0.07955 + 0.07955 0.07955 0.07955 0.07955 0.07955 0.07955 0.07955 0.07955 + 0.07955 0.07955 0.07955 0.07955 + 0.05695 0.05695 0.05695 0.05695 0.05695 0.05695 0.05695 0.05695 + 0.05695 0.05695 0.05695 0.05695 0.05695 0.05695 0.05695 0.05695 + 0.05695 0.05695 0.05695 0.05695 0.05695 0.05695 0.05695 0.05695 + 0.05695 0.05695 0.05695 0.05695 0.05695 0.05695 0.05695 0.05695 + 0.05695 0.05695 0.05695 0.05695 + DUST 5 asy + 0.93879 0.93879 0.93879 0.93879 0.93879 0.93879 0.93879 0.93879 + 0.93879 0.93879 0.93879 0.93879 0.93879 0.93879 0.93879 0.93879 + 0.93879 0.93879 0.93879 0.93879 0.93879 0.93879 0.93879 0.93879 + 0.93879 0.93879 0.93879 0.93879 0.93879 0.93879 0.93879 0.93879 + 0.93879 0.93879 0.93879 0.93879 + 0.87232 0.87232 0.87232 0.87232 0.87232 0.87232 0.87232 0.87232 + 0.87232 0.87232 0.87232 0.87232 0.87232 0.87232 0.87232 0.87232 + 0.87232 0.87232 0.87232 0.87232 0.87232 0.87232 0.87232 0.87232 + 0.87232 0.87232 0.87232 0.87232 0.87232 0.87232 0.87232 0.87232 + 0.87232 0.87232 0.87232 0.87232 + 0.87232 0.87232 0.87232 0.87232 0.87232 0.87232 0.87232 0.87232 + 0.87232 0.87232 0.87232 0.87232 0.87232 0.87232 0.87232 0.87232 + 0.87232 0.87232 0.87232 0.87232 0.87232 0.87232 0.87232 0.87232 + 0.87232 0.87232 0.87232 0.87232 0.87232 0.87232 0.87232 0.87232 + 0.87232 0.87232 0.87232 0.87232 + 0.85054 0.85054 0.85054 0.85054 0.85054 0.85054 0.85054 0.85054 + 0.85054 0.85054 0.85054 0.85054 0.85054 0.85054 0.85054 0.85054 + 0.85054 0.85054 0.85054 0.85054 0.85054 0.85054 0.85054 0.85054 + 0.85054 0.85054 0.85054 0.85054 0.85054 0.85054 0.85054 0.85054 + 0.85054 0.85054 0.85054 0.85054 + 0.83694 0.83694 0.83694 0.83694 0.83694 0.83694 0.83694 0.83694 + 0.83694 0.83694 0.83694 0.83694 0.83694 0.83694 0.83694 0.83694 + 0.83694 0.83694 0.83694 0.83694 0.83694 0.83694 0.83694 0.83694 + 0.83694 0.83694 0.83694 0.83694 0.83694 0.83694 0.83694 0.83694 + 0.83694 0.83694 0.83694 0.83694 + 0.83165 0.83165 0.83165 0.83165 0.83165 0.83165 0.83165 0.83165 + 0.83165 0.83165 0.83165 0.83165 0.83165 0.83165 0.83165 0.83165 + 0.83165 0.83165 0.83165 0.83165 0.83165 0.83165 0.83165 0.83165 + 0.83165 0.83165 0.83165 0.83165 0.83165 0.83165 0.83165 0.83165 + 0.83165 0.83165 0.83165 0.83165 + 0.80566 0.80566 0.80566 0.80566 0.80566 0.80566 0.80566 0.80566 + 0.80566 0.80566 0.80566 0.80566 0.80566 0.80566 0.80566 0.80566 + 0.80566 0.80566 0.80566 0.80566 0.80566 0.80566 0.80566 0.80566 + 0.80566 0.80566 0.80566 0.80566 0.80566 0.80566 0.80566 0.80566 + 0.80566 0.80566 0.80566 0.80566 + DUST 5 ssa + 0.60776 0.60776 0.60776 0.60776 0.60776 0.60776 0.60776 0.60776 + 0.60776 0.60776 0.60776 0.60776 0.60776 0.60776 0.60776 0.60776 + 0.60776 0.60776 0.60776 0.60776 0.60776 0.60776 0.60776 0.60776 + 0.60776 0.60776 0.60776 0.60776 0.60776 0.60776 0.60776 0.60776 + 0.60776 0.60776 0.60776 0.60776 + 0.76747 0.76747 0.76747 0.76747 0.76747 0.76747 0.76747 0.76747 + 0.76747 0.76747 0.76747 0.76747 0.76747 0.76747 0.76747 0.76747 + 0.76747 0.76747 0.76747 0.76747 0.76747 0.76747 0.76747 0.76747 + 0.76747 0.76747 0.76747 0.76747 0.76747 0.76747 0.76747 0.76747 + 0.76747 0.76747 0.76747 0.76747 + 0.76747 0.76747 0.76747 0.76747 0.76747 0.76747 0.76747 0.76747 + 0.76747 0.76747 0.76747 0.76747 0.76747 0.76747 0.76747 0.76747 + 0.76747 0.76747 0.76747 0.76747 0.76747 0.76747 0.76747 0.76747 + 0.76747 0.76747 0.76747 0.76747 0.76747 0.76747 0.76747 0.76747 + 0.76747 0.76747 0.76747 0.76747 + 0.81716 0.81716 0.81716 0.81716 0.81716 0.81716 0.81716 0.81716 + 0.81716 0.81716 0.81716 0.81716 0.81716 0.81716 0.81716 0.81716 + 0.81716 0.81716 0.81716 0.81716 0.81716 0.81716 0.81716 0.81716 + 0.81716 0.81716 0.81716 0.81716 0.81716 0.81716 0.81716 0.81716 + 0.81716 0.81716 0.81716 0.81716 + 0.84240 0.84240 0.84240 0.84240 0.84240 0.84240 0.84240 0.84240 + 0.84240 0.84240 0.84240 0.84240 0.84240 0.84240 0.84240 0.84240 + 0.84240 0.84240 0.84240 0.84240 0.84240 0.84240 0.84240 0.84240 + 0.84240 0.84240 0.84240 0.84240 0.84240 0.84240 0.84240 0.84240 + 0.84240 0.84240 0.84240 0.84240 + 0.80753 0.80753 0.80753 0.80753 0.80753 0.80753 0.80753 0.80753 + 0.80753 0.80753 0.80753 0.80753 0.80753 0.80753 0.80753 0.80753 + 0.80753 0.80753 0.80753 0.80753 0.80753 0.80753 0.80753 0.80753 + 0.80753 0.80753 0.80753 0.80753 0.80753 0.80753 0.80753 0.80753 + 0.80753 0.80753 0.80753 0.80753 + 0.51019 0.51019 0.51019 0.51019 0.51019 0.51019 0.51019 0.51019 + 0.51019 0.51019 0.51019 0.51019 0.51019 0.51019 0.51019 0.51019 + 0.51019 0.51019 0.51019 0.51019 0.51019 0.51019 0.51019 0.51019 + 0.51019 0.51019 0.51019 0.51019 0.51019 0.51019 0.51019 0.51019 + 0.51019 0.51019 0.51019 0.51019 diff --git a/parm/optics_luts_NITR_nasa.dat b/parm/optics_luts_NITR_nasa.dat new file mode 100644 index 000000000..ad58ae09f --- /dev/null +++ b/parm/optics_luts_NITR_nasa.dat @@ -0,0 +1,432 @@ + NITR 1 ext + 6.02555 7.30874 7.92768 8.54895 9.18698 9.85687 10.38813 11.12264 + 11.90522 12.72627 13.57852 14.47123 15.17235 16.13567 17.14034 18.44349 + 19.80489 20.08519 20.36681 20.64928 20.93495 21.22325 21.80705 22.10250 + 22.70034 23.00269 23.61428 24.23474 25.18231 25.82570 26.80936 28.14929 + 29.17083 30.92049 33.08688 37.20183 + 4.83988 5.84334 6.31702 6.82536 7.37393 7.96715 8.43704 9.09445 + 9.78695 10.51808 11.29206 12.10176 12.73570 13.61482 14.53111 15.72658 + 16.97700 17.23392 17.49339 17.75526 18.01965 18.28651 18.82752 19.10135 + 19.65498 19.93500 20.50215 21.07894 21.96263 22.56255 23.48074 24.73759 + 25.70466 27.36422 29.42888 33.42739 + 3.83608 4.65973 5.05076 5.46913 5.92236 6.41166 6.80302 7.35558 + 7.94239 8.56409 9.22249 9.91910 10.46606 11.22768 12.02772 13.08113 + 14.19395 14.42326 14.65487 14.88900 15.12554 15.36424 15.84924 16.09542 + 16.59412 16.84723 17.36079 17.88416 18.68754 19.23509 20.07383 21.22542 + 22.11465 23.64529 25.56175 29.29947 + 2.72467 3.33663 3.63241 3.95376 4.30260 4.67906 4.97925 5.40230 + 5.85405 6.33539 6.84801 7.39268 7.82231 8.42398 9.06004 9.90361 + 10.80250 10.98910 11.17773 11.36856 11.56170 11.75715 12.15490 12.35722 + 12.76874 12.97796 13.40333 13.83799 14.50749 14.96556 15.67039 16.64355 + 17.39851 18.70466 20.35169 23.59686 + 1.77331 2.19648 2.39891 2.61949 2.85987 3.12114 3.33109 3.63090 + 3.95429 4.30211 4.67532 5.07472 5.39195 5.83898 6.31407 6.94860 + 7.62953 7.77142 7.91523 8.06097 8.20867 8.35831 8.66352 8.81909 + 9.13624 9.29784 9.62712 9.96455 10.48614 10.84428 11.39729 12.16437 + 12.76230 13.80211 15.12288 17.75505 + 0.38845 0.49519 0.54815 0.60686 0.67174 0.74324 0.80146 0.88558 + 0.97753 1.07780 1.18687 1.30523 1.40041 1.53625 1.68277 1.88172 + 2.09917 2.14497 2.19155 2.23894 2.28712 2.33612 2.43659 2.48807 + 2.59359 2.64763 2.75834 2.87259 3.05074 3.17413 3.36630 3.63610 + 3.84891 4.22416 4.70962 5.70471 + 0.07623 0.10583 0.11981 0.13487 0.15105 0.16838 0.18215 0.20160 + 0.22232 0.24435 0.26772 0.29249 0.31201 0.33932 0.36813 0.40633 + 0.44704 0.45549 0.46404 0.47270 0.48146 0.49033 0.50839 0.51758 + 0.53629 0.54580 0.56517 0.58499 0.61557 0.63653 0.66884 0.71359 + 0.74842 0.80894 0.88575 1.03887 + NITR 1 sca + 6.02555 7.30874 7.92768 8.54895 9.18698 9.85687 10.38813 11.12264 + 11.90522 12.72627 13.57852 14.47123 15.17235 16.13567 17.14034 18.44349 + 19.80489 20.08519 20.36681 20.64928 20.93495 21.22325 21.80705 22.10250 + 22.70034 23.00269 23.61428 24.23474 25.18231 25.82570 26.80936 28.14929 + 29.17083 30.92049 33.08688 37.20183 + 4.83988 5.84334 6.31702 6.82536 7.37393 7.96715 8.43704 9.09445 + 9.78695 10.51808 11.29206 12.10176 12.73570 13.61482 14.53111 15.72658 + 16.97700 17.23392 17.49339 17.75526 18.01965 18.28651 18.82752 19.10135 + 19.65498 19.93500 20.50215 21.07894 21.96263 22.56255 23.48074 24.73759 + 25.70466 27.36422 29.42888 33.42739 + 3.83608 4.65973 5.05076 5.46913 5.92236 6.41166 6.80302 7.35558 + 7.94239 8.56409 9.22249 9.91910 10.46606 11.22768 12.02772 13.08113 + 14.19395 14.42326 14.65487 14.88900 15.12554 15.36424 15.84924 16.09542 + 16.59412 16.84723 17.36079 17.88416 18.68754 19.23509 20.07383 21.22542 + 22.11465 23.64529 25.56175 29.29947 + 2.72467 3.33663 3.63241 3.95376 4.30260 4.67906 4.97925 5.40230 + 5.85405 6.33539 6.84801 7.39268 7.82231 8.42398 9.06004 9.90361 + 10.80250 10.98910 11.17773 11.36856 11.56170 11.75715 12.15490 12.35722 + 12.76874 12.97796 13.40333 13.83799 14.50749 14.96556 15.67039 16.64355 + 17.39851 18.70466 20.35169 23.59686 + 1.77331 2.19648 2.39891 2.61949 2.85987 3.12114 3.33109 3.63090 + 3.95429 4.30211 4.67532 5.07472 5.39195 5.83898 6.31407 6.94860 + 7.62953 7.77142 7.91523 8.06097 8.20867 8.35831 8.66352 8.81909 + 9.13624 9.29784 9.62712 9.96455 10.48614 10.84428 11.39729 12.16437 + 12.76230 13.80211 15.12288 17.75490 + 0.38824 0.49479 0.54767 0.60628 0.67106 0.74245 0.80058 0.88458 + 0.97639 1.07652 1.18543 1.30363 1.39868 1.53434 1.68067 1.87936 + 2.09653 2.14227 2.18879 2.23612 2.28424 2.33318 2.43352 2.48495 + 2.59033 2.64431 2.75488 2.86899 3.04693 3.17017 3.36212 3.63160 + 3.84417 4.21898 4.70390 5.69789 + 0.00033 0.00045 0.00051 0.00058 0.00066 0.00075 0.00083 0.00094 + 0.00107 0.00121 0.00137 0.00155 0.00170 0.00192 0.00216 0.00251 + 0.00289 0.00298 0.00306 0.00315 0.00324 0.00333 0.00352 0.00362 + 0.00382 0.00393 0.00415 0.00438 0.00474 0.00499 0.00540 0.00598 + 0.00645 0.00730 0.00844 0.01090 + NITR 1 asy + 0.64352 0.67800 0.68707 0.69577 0.70442 0.71259 0.71793 0.72521 + 0.73121 0.73641 0.74147 0.74611 0.74906 0.75296 0.75639 0.76046 + 0.76408 0.76471 0.76536 0.76605 0.76669 0.76730 0.76846 0.76901 + 0.77006 0.77056 0.77151 0.77240 0.77363 0.77436 0.77529 0.77642 + 0.77731 0.77845 0.77951 0.78165 + 0.63485 0.66956 0.68118 0.69206 0.70183 0.71007 0.71559 0.72244 + 0.72882 0.73455 0.73943 0.74394 0.74692 0.75047 0.75367 0.75735 + 0.76081 0.76147 0.76211 0.76274 0.76334 0.76393 0.76507 0.76562 + 0.76674 0.76730 0.76838 0.76942 0.77086 0.77181 0.77313 0.77476 + 0.77589 0.77758 0.77942 0.78209 + 0.62479 0.65817 0.66965 0.68045 0.69025 0.69902 0.70489 0.71202 + 0.71859 0.72467 0.73019 0.73515 0.73856 0.74279 0.74660 0.75090 + 0.75475 0.75549 0.75623 0.75694 0.75764 0.75833 0.75967 0.76032 + 0.76161 0.76224 0.76345 0.76461 0.76627 0.76734 0.76889 0.77087 + 0.77226 0.77442 0.77677 0.78049 + 0.60553 0.63866 0.65017 0.66076 0.67025 0.67872 0.68450 0.69181 + 0.69858 0.70489 0.71070 0.71609 0.71990 0.72471 0.72918 0.73436 + 0.73911 0.74001 0.74090 0.74179 0.74265 0.74350 0.74516 0.74597 + 0.74755 0.74832 0.74983 0.75129 0.75341 0.75476 0.75672 0.75919 + 0.76094 0.76370 0.76676 0.77176 + 0.57842 0.60994 0.62122 0.63170 0.64143 0.65039 0.65674 0.66470 + 0.67211 0.67903 0.68548 0.69149 0.69574 0.70108 0.70610 0.71197 + 0.71742 0.71847 0.71949 0.72051 0.72151 0.72249 0.72442 0.72536 + 0.72720 0.72810 0.72987 0.73159 0.73408 0.73568 0.73800 0.74096 + 0.74307 0.74643 0.75019 0.75639 + 0.47245 0.49974 0.51028 0.52038 0.53005 0.53930 0.54596 0.55451 + 0.56270 0.57054 0.57806 0.58528 0.59049 0.59720 0.60365 0.61135 + 0.61868 0.62011 0.62152 0.62291 0.62429 0.62566 0.62836 0.62970 + 0.63232 0.63361 0.63616 0.63867 0.64233 0.64472 0.64823 0.65275 + 0.65604 0.66132 0.66737 0.67767 + 0.07409 0.08209 0.08552 0.08901 0.09254 0.09611 0.09880 0.10242 + 0.10605 0.10969 0.11334 0.11700 0.11975 0.12341 0.12707 0.13164 + 0.13620 0.13711 0.13802 0.13893 0.13984 0.14075 0.14256 0.14347 + 0.14528 0.14619 0.14799 0.14980 0.15250 0.15429 0.15698 0.16055 + 0.16321 0.16764 0.17292 0.18249 + NITR 1 ssa + 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 + 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 + 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 + 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 + 1.00000 1.00000 1.00000 1.00000 + 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 + 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 + 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 + 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 + 1.00000 1.00000 1.00000 1.00000 + 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 + 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 + 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 + 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 + 1.00000 1.00000 1.00000 1.00000 + 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 + 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 + 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 + 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 + 1.00000 1.00000 1.00000 1.00000 + 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 + 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 + 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 + 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 + 1.00000 1.00000 1.00000 0.99999 + 0.99944 0.99920 0.99912 0.99905 0.99899 0.99894 0.99891 0.99887 + 0.99884 0.99881 0.99879 0.99877 0.99876 0.99875 0.99875 0.99874 + 0.99874 0.99874 0.99874 0.99874 0.99874 0.99874 0.99874 0.99874 + 0.99874 0.99874 0.99875 0.99875 0.99875 0.99875 0.99876 0.99876 + 0.99877 0.99878 0.99879 0.99880 + 0.00438 0.00426 0.00427 0.00431 0.00438 0.00446 0.00454 0.00466 + 0.00480 0.00496 0.00513 0.00531 0.00545 0.00566 0.00588 0.00617 + 0.00647 0.00653 0.00660 0.00666 0.00673 0.00679 0.00692 0.00699 + 0.00713 0.00720 0.00734 0.00748 0.00770 0.00784 0.00807 0.00838 + 0.00862 0.00902 0.00953 0.01049 + NITR 2 ext + 0.46568 0.55688 0.58919 0.62415 0.66757 0.70487 0.73007 0.77578 + 0.81731 0.86277 0.90045 0.93065 0.96080 1.01726 1.05551 1.09798 + 1.15164 1.16441 1.17570 1.18550 1.19638 1.20812 1.22981 1.24130 + 1.26221 1.27197 1.29529 1.31844 1.34827 1.36726 1.39916 1.44300 + 1.47028 1.51778 1.57263 1.67024 + 0.47758 0.56942 0.60215 0.63786 0.67449 0.72116 0.75426 0.79858 + 0.82650 0.85748 0.91786 0.96077 0.99441 1.03110 1.07315 1.12801 + 1.17193 1.17974 1.18991 1.19909 1.20925 1.22009 1.24410 1.25620 + 1.27135 1.28046 1.29872 1.31571 1.35346 1.37167 1.40510 1.45033 + 1.48608 1.54485 1.60190 1.71954 + 0.48933 0.57134 0.62170 0.64698 0.69036 0.72766 0.76577 0.81089 + 0.85327 0.88111 0.91913 0.97378 1.01385 1.05042 1.09315 1.13909 + 1.19447 1.20434 1.21247 1.22404 1.23689 1.24638 1.26485 1.27668 + 1.29265 1.30216 1.32243 1.34434 1.38060 1.40316 1.42940 1.46676 + 1.49553 1.54894 1.61524 1.72855 + 0.49628 0.58810 0.63640 0.67312 0.71768 0.76343 0.79666 0.82942 + 0.87223 0.90726 0.96043 1.00176 1.03617 1.07648 1.11810 1.16342 + 1.21948 1.23554 1.24366 1.24923 1.25703 1.26725 1.28229 1.29087 + 1.31196 1.32117 1.34202 1.36350 1.39416 1.41359 1.44571 1.49282 + 1.52504 1.57617 1.64114 1.75488 + 0.51675 0.62096 0.65317 0.69648 0.73863 0.77792 0.80596 0.85362 + 0.90057 0.93729 0.97909 1.02997 1.07198 1.12198 1.16230 1.20840 + 1.25287 1.26328 1.27312 1.28143 1.29102 1.30034 1.32006 1.33074 + 1.35311 1.36499 1.38889 1.41220 1.44603 1.46970 1.50533 1.54911 + 1.58998 1.63156 1.69044 1.79782 + 0.56996 0.67204 0.72553 0.77531 0.81923 0.87015 0.90912 0.96127 + 1.00645 1.05333 1.09839 1.14806 1.18687 1.23395 1.28109 1.33914 + 1.39861 1.41065 1.42155 1.43207 1.44302 1.45367 1.47595 1.48744 + 1.51138 1.52358 1.54566 1.56578 1.59555 1.61588 1.64761 1.69127 + 1.72277 1.77679 1.84252 1.96335 + 0.12516 0.15263 0.16527 0.17863 0.19270 0.20746 0.21898 0.23493 + 0.25152 0.26873 0.28656 0.30496 0.31914 0.33851 0.35841 0.38398 + 0.41028 0.41563 0.42100 0.42640 0.43182 0.43727 0.44825 0.45378 + 0.46490 0.47050 0.48177 0.49313 0.51033 0.52191 0.53942 0.56305 + 0.58095 0.61113 0.64785 0.71638 + NITR 2 sca + 0.46568 0.55688 0.58919 0.62415 0.66757 0.70487 0.73007 0.77578 + 0.81731 0.86277 0.90045 0.93065 0.96080 1.01726 1.05551 1.09798 + 1.15164 1.16441 1.17570 1.18550 1.19638 1.20812 1.22981 1.24130 + 1.26221 1.27197 1.29529 1.31844 1.34827 1.36726 1.39916 1.44300 + 1.47028 1.51778 1.57263 1.67024 + 0.47758 0.56942 0.60215 0.63786 0.67449 0.72116 0.75426 0.79858 + 0.82650 0.85748 0.91786 0.96077 0.99441 1.03110 1.07315 1.12801 + 1.17193 1.17974 1.18991 1.19909 1.20925 1.22009 1.24410 1.25620 + 1.27135 1.28046 1.29872 1.31571 1.35346 1.37167 1.40510 1.45033 + 1.48608 1.54485 1.60190 1.71954 + 0.48933 0.57134 0.62170 0.64698 0.69036 0.72766 0.76577 0.81089 + 0.85327 0.88111 0.91913 0.97378 1.01385 1.05042 1.09315 1.13909 + 1.19447 1.20434 1.21247 1.22404 1.23689 1.24638 1.26485 1.27668 + 1.29265 1.30216 1.32243 1.34434 1.38060 1.40316 1.42940 1.46676 + 1.49553 1.54894 1.61524 1.72855 + 0.49628 0.58810 0.63640 0.67312 0.71768 0.76343 0.79666 0.82942 + 0.87223 0.90726 0.96043 1.00176 1.03617 1.07648 1.11810 1.16342 + 1.21948 1.23554 1.24366 1.24923 1.25703 1.26725 1.28229 1.29087 + 1.31196 1.32117 1.34202 1.36350 1.39416 1.41359 1.44571 1.49282 + 1.52504 1.57617 1.64114 1.75488 + 0.51675 0.62096 0.65317 0.69648 0.73863 0.77792 0.80596 0.85362 + 0.90057 0.93729 0.97909 1.02997 1.07198 1.12198 1.16230 1.20840 + 1.25287 1.26328 1.27312 1.28143 1.29102 1.30034 1.32006 1.33074 + 1.35311 1.36499 1.38889 1.41220 1.44603 1.46970 1.50533 1.54911 + 1.58998 1.63156 1.69044 1.79772 + 0.56953 0.67139 0.72469 0.77430 0.81814 0.86892 0.90780 0.95975 + 1.00478 1.05150 1.09647 1.14580 1.18449 1.23150 1.27845 1.33622 + 1.39534 1.40729 1.41819 1.42871 1.43947 1.45025 1.47241 1.48382 + 1.50756 1.51963 1.54159 1.56159 1.59141 1.61174 1.64336 1.68649 + 1.71818 1.77196 1.83725 1.95718 + 0.04367 0.04825 0.05061 0.05325 0.05616 0.05933 0.06189 0.06554 + 0.06945 0.07362 0.07804 0.08272 0.08640 0.09151 0.09686 0.10388 + 0.11126 0.11278 0.11431 0.11585 0.11741 0.11898 0.12217 0.12378 + 0.12704 0.12869 0.13203 0.13542 0.14060 0.14412 0.14947 0.15678 + 0.16237 0.17191 0.18370 0.20619 + NITR 2 asy + 0.74929 0.77061 0.76890 0.78330 0.78902 0.78898 0.79737 0.79689 + 0.80474 0.80366 0.81052 0.81273 0.81576 0.81366 0.81362 0.81909 + 0.82606 0.82622 0.82719 0.82900 0.82982 0.82979 0.83023 0.83004 + 0.83076 0.83201 0.83193 0.83183 0.83388 0.83575 0.83597 0.83472 + 0.83605 0.83545 0.83487 0.83775 + 0.72496 0.74859 0.76404 0.76753 0.78001 0.78165 0.78463 0.78547 + 0.79406 0.80387 0.80049 0.80772 0.80735 0.81014 0.81291 0.80983 + 0.81465 0.81634 0.81631 0.81685 0.81676 0.81630 0.81401 0.81266 + 0.81641 0.81768 0.82098 0.82544 0.82491 0.82831 0.82968 0.82970 + 0.82849 0.82798 0.83327 0.83240 + 0.71442 0.74713 0.74439 0.76098 0.76463 0.77669 0.77740 0.77835 + 0.77853 0.78948 0.79782 0.79955 0.79873 0.80488 0.80244 0.80745 + 0.80686 0.80711 0.80864 0.80805 0.80665 0.80747 0.80973 0.80919 + 0.81293 0.81384 0.81475 0.81468 0.81255 0.81198 0.81629 0.82144 + 0.82524 0.82756 0.82789 0.83021 + 0.71024 0.73704 0.73675 0.75178 0.75397 0.75879 0.75459 0.76452 + 0.76733 0.77932 0.77708 0.78312 0.78238 0.78482 0.78698 0.79401 + 0.79531 0.79211 0.79374 0.79717 0.79930 0.79996 0.80479 0.80665 + 0.80788 0.80927 0.81034 0.81086 0.81252 0.81423 0.81558 0.81509 + 0.81609 0.81844 0.81767 0.81579 + 0.69715 0.70948 0.72422 0.73218 0.73994 0.74466 0.75153 0.75523 + 0.75856 0.76808 0.77599 0.77710 0.77416 0.77378 0.77718 0.78190 + 0.78853 0.78907 0.78996 0.79193 0.79324 0.79478 0.79744 0.79838 + 0.79964 0.79987 0.80009 0.80047 0.80143 0.80134 0.80087 0.80171 + 0.79777 0.80409 0.80683 0.81029 + 0.67469 0.71234 0.71993 0.72819 0.73983 0.74561 0.74831 0.74888 + 0.75364 0.75747 0.76328 0.76631 0.76717 0.77041 0.77264 0.77539 + 0.77697 0.77711 0.77781 0.77871 0.77947 0.78022 0.78139 0.78180 + 0.78209 0.78207 0.78299 0.78495 0.78799 0.78978 0.79180 0.79382 + 0.79548 0.79748 0.79907 0.80011 + 0.63509 0.66292 0.67316 0.68275 0.69177 0.70028 0.70634 0.71404 + 0.72133 0.72825 0.73483 0.74108 0.74557 0.75131 0.75679 0.76329 + 0.76944 0.77063 0.77180 0.77296 0.77411 0.77525 0.77749 0.77859 + 0.78076 0.78183 0.78393 0.78599 0.78900 0.79096 0.79382 0.79750 + 0.80017 0.80444 0.80932 0.81757 + NITR 2 ssa + 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 + 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 + 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 + 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 + 1.00000 1.00000 1.00000 1.00000 + 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 + 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 + 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 + 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 + 1.00000 1.00000 1.00000 1.00000 + 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 + 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 + 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 + 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 + 1.00000 1.00000 1.00000 1.00000 + 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 + 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 + 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 + 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 + 1.00000 1.00000 1.00000 1.00000 + 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 + 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 + 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 + 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 + 1.00000 1.00000 1.00000 0.99994 + 0.99926 0.99904 0.99884 0.99870 0.99867 0.99859 0.99856 0.99842 + 0.99834 0.99827 0.99825 0.99802 0.99800 0.99801 0.99794 0.99782 + 0.99766 0.99762 0.99763 0.99765 0.99754 0.99765 0.99760 0.99757 + 0.99747 0.99741 0.99737 0.99733 0.99740 0.99744 0.99742 0.99717 + 0.99734 0.99728 0.99714 0.99686 + 0.34889 0.31613 0.30625 0.29810 0.29142 0.28599 0.28264 0.27897 + 0.27611 0.27394 0.27235 0.27126 0.27072 0.27032 0.27025 0.27054 + 0.27118 0.27134 0.27152 0.27171 0.27190 0.27211 0.27255 0.27278 + 0.27327 0.27353 0.27406 0.27462 0.27551 0.27613 0.27710 0.27845 + 0.27950 0.28131 0.28356 0.28783 + NITR 3 ext + 0.13395 0.14516 0.14701 0.15138 0.15643 0.15918 0.16088 0.16517 + 0.17002 0.17244 0.17645 0.17795 0.17789 0.18266 0.18537 0.18709 + 0.19050 0.19157 0.19258 0.19344 0.19390 0.19440 0.19543 0.19590 + 0.19635 0.19704 0.19841 0.19992 0.20198 0.20292 0.20436 0.20643 + 0.20708 0.20849 0.21032 0.21358 + 0.13388 0.14525 0.14953 0.15229 0.15724 0.16200 0.16380 0.16745 + 0.16926 0.17211 0.17662 0.17971 0.18187 0.18439 0.18806 0.18913 + 0.19072 0.19113 0.19194 0.19281 0.19351 0.19418 0.19598 0.19679 + 0.19690 0.19739 0.19859 0.19950 0.20147 0.20267 0.20486 0.20700 + 0.20823 0.21020 0.21244 0.21794 + 0.13464 0.14598 0.15194 0.15296 0.15810 0.16182 0.16653 0.16840 + 0.16944 0.17270 0.17666 0.18111 0.18387 0.18675 0.18919 0.18918 + 0.19213 0.19268 0.19289 0.19333 0.19415 0.19520 0.19618 0.19690 + 0.19825 0.19889 0.20041 0.20147 0.20384 0.20413 0.20517 0.20729 + 0.20840 0.21127 0.21534 0.21943 + 0.13758 0.14947 0.15087 0.15559 0.16030 0.16456 0.16404 0.16876 + 0.17416 0.17630 0.18056 0.18211 0.18254 0.18479 0.18797 0.19136 + 0.19525 0.19669 0.19771 0.19796 0.19838 0.19944 0.20014 0.20029 + 0.20187 0.20254 0.20412 0.20576 0.20731 0.20741 0.20837 0.20947 + 0.20984 0.21155 0.21426 0.21888 + 0.13653 0.14798 0.15402 0.15799 0.16010 0.16498 0.16855 0.17137 + 0.17608 0.17532 0.17929 0.18389 0.18676 0.19150 0.19342 0.19609 + 0.19634 0.19654 0.19668 0.19654 0.19719 0.19729 0.19808 0.19864 + 0.19956 0.20027 0.20179 0.20290 0.20530 0.20707 0.20850 0.21085 + 0.21387 0.21554 0.21984 0.22438 + 0.14489 0.15615 0.16193 0.16775 0.16808 0.17399 0.17748 0.18056 + 0.18364 0.18598 0.18777 0.19280 0.19559 0.19749 0.20029 0.20342 + 0.20665 0.20715 0.20731 0.20740 0.20793 0.20805 0.20929 0.21002 + 0.21177 0.21271 0.21366 0.21439 0.21473 0.21498 0.21593 0.21746 + 0.21827 0.21991 0.22296 0.22872 + 0.11996 0.12405 0.12587 0.12776 0.12972 0.13173 0.13327 0.13535 + 0.13747 0.13960 0.14175 0.14391 0.14552 0.14767 0.14981 0.15247 + 0.15509 0.15561 0.15613 0.15665 0.15717 0.15769 0.15871 0.15922 + 0.16024 0.16075 0.16175 0.16275 0.16424 0.16522 0.16668 0.16860 + 0.17002 0.17235 0.17508 0.17990 + NITR 3 sca + 0.13395 0.14516 0.14701 0.15138 0.15643 0.15918 0.16088 0.16517 + 0.17002 0.17244 0.17645 0.17795 0.17789 0.18266 0.18537 0.18709 + 0.19050 0.19157 0.19258 0.19344 0.19390 0.19440 0.19543 0.19590 + 0.19635 0.19704 0.19841 0.19992 0.20198 0.20292 0.20436 0.20643 + 0.20708 0.20849 0.21032 0.21358 + 0.13388 0.14525 0.14953 0.15229 0.15724 0.16200 0.16380 0.16745 + 0.16926 0.17211 0.17662 0.17971 0.18187 0.18439 0.18806 0.18913 + 0.19072 0.19113 0.19194 0.19281 0.19351 0.19418 0.19598 0.19679 + 0.19690 0.19739 0.19859 0.19950 0.20147 0.20267 0.20486 0.20700 + 0.20823 0.21020 0.21244 0.21794 + 0.13464 0.14598 0.15194 0.15296 0.15810 0.16182 0.16653 0.16840 + 0.16944 0.17270 0.17666 0.18111 0.18387 0.18675 0.18919 0.18918 + 0.19213 0.19268 0.19289 0.19333 0.19415 0.19520 0.19618 0.19690 + 0.19825 0.19889 0.20041 0.20147 0.20384 0.20413 0.20517 0.20729 + 0.20840 0.21127 0.21534 0.21943 + 0.13758 0.14947 0.15087 0.15559 0.16030 0.16456 0.16404 0.16876 + 0.17416 0.17630 0.18056 0.18211 0.18254 0.18479 0.18797 0.19136 + 0.19525 0.19669 0.19771 0.19796 0.19838 0.19944 0.20014 0.20029 + 0.20187 0.20254 0.20412 0.20576 0.20731 0.20741 0.20837 0.20947 + 0.20984 0.21155 0.21426 0.21888 + 0.13653 0.14798 0.15402 0.15799 0.16010 0.16498 0.16855 0.17137 + 0.17608 0.17532 0.17929 0.18389 0.18676 0.19150 0.19342 0.19609 + 0.19634 0.19654 0.19668 0.19654 0.19719 0.19729 0.19808 0.19864 + 0.19956 0.20027 0.20179 0.20290 0.20530 0.20707 0.20850 0.21085 + 0.21387 0.21554 0.21984 0.22435 + 0.14453 0.15563 0.16128 0.16699 0.16733 0.17315 0.17659 0.17966 + 0.18267 0.18496 0.18677 0.19157 0.19441 0.19631 0.19907 0.20211 + 0.20520 0.20574 0.20593 0.20604 0.20638 0.20669 0.20788 0.20858 + 0.21030 0.21119 0.21211 0.21272 0.21317 0.21341 0.21436 0.21572 + 0.21667 0.21830 0.22123 0.22688 + 0.06161 0.06051 0.06027 0.06015 0.06015 0.06026 0.06040 0.06068 + 0.06103 0.06145 0.06193 0.06246 0.06289 0.06350 0.06414 0.06498 + 0.06586 0.06604 0.06622 0.06640 0.06658 0.06676 0.06713 0.06731 + 0.06769 0.06787 0.06825 0.06862 0.06919 0.06957 0.07014 0.07090 + 0.07147 0.07242 0.07355 0.07561 + NITR 3 asy + 0.79265 0.80802 0.80974 0.81951 0.82339 0.82436 0.83003 0.83356 + 0.83534 0.83679 0.84161 0.83729 0.84330 0.84287 0.84616 0.85131 + 0.85367 0.85508 0.85371 0.85107 0.85204 0.85308 0.85114 0.85003 + 0.85189 0.85231 0.85298 0.85378 0.85512 0.85816 0.85944 0.85616 + 0.85839 0.85704 0.85661 0.86090 + 0.78525 0.80102 0.81189 0.81513 0.81928 0.82244 0.82668 0.82832 + 0.82598 0.83472 0.83778 0.84167 0.84292 0.84359 0.84785 0.84416 + 0.84789 0.84969 0.85009 0.84950 0.84934 0.84919 0.84647 0.84556 + 0.84962 0.85020 0.85144 0.85407 0.85428 0.85469 0.85565 0.85354 + 0.85204 0.85745 0.85981 0.85959 + 0.78051 0.79873 0.80396 0.81284 0.81462 0.82110 0.82260 0.82825 + 0.82719 0.82798 0.83558 0.83880 0.83955 0.84219 0.83796 0.84759 + 0.84433 0.84323 0.84425 0.84560 0.84582 0.84467 0.84774 0.84879 + 0.85050 0.85127 0.85069 0.85032 0.84549 0.84790 0.85201 0.85361 + 0.85681 0.85831 0.85489 0.85944 + 0.77730 0.79598 0.79786 0.80579 0.81329 0.81522 0.81372 0.81901 + 0.82007 0.83221 0.83048 0.83387 0.83198 0.83269 0.83966 0.83851 + 0.84471 0.84172 0.84002 0.84167 0.84271 0.84128 0.84482 0.84792 + 0.84892 0.84963 0.84920 0.84706 0.84525 0.84668 0.84717 0.85009 + 0.85438 0.85613 0.85291 0.84861 + 0.77138 0.78745 0.79563 0.80417 0.80265 0.80664 0.81392 0.82069 + 0.81498 0.82143 0.82580 0.82543 0.83041 0.82737 0.83291 0.83017 + 0.83221 0.83329 0.83498 0.83826 0.83820 0.84034 0.84210 0.84245 + 0.84411 0.84435 0.84365 0.84426 0.84201 0.84006 0.84255 0.84384 + 0.84050 0.84682 0.84324 0.84631 + 0.74079 0.76310 0.76467 0.77129 0.78497 0.78743 0.78788 0.78938 + 0.79507 0.79651 0.80718 0.80417 0.80423 0.81005 0.81085 0.81251 + 0.81398 0.81435 0.81610 0.81818 0.81938 0.82070 0.82113 0.82081 + 0.81889 0.81751 0.81769 0.81933 0.82364 0.82671 0.82902 0.83171 + 0.83392 0.83753 0.83882 0.83774 + 0.84092 0.86189 0.86853 0.87429 0.87933 0.88377 0.88676 0.89038 + 0.89362 0.89656 0.89922 0.90165 0.90333 0.90542 0.90735 0.90956 + 0.91158 0.91196 0.91234 0.91271 0.91307 0.91343 0.91413 0.91447 + 0.91513 0.91546 0.91609 0.91670 0.91759 0.91816 0.91899 0.92004 + 0.92079 0.92197 0.92329 0.92547 + NITR 3 ssa + 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 + 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 + 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 + 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 + 1.00000 1.00000 1.00000 1.00000 + 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 + 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 + 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 + 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 + 1.00000 1.00000 1.00000 1.00000 + 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 + 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 + 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 + 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 + 1.00000 1.00000 1.00000 1.00000 + 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 + 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 + 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 + 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 + 1.00000 1.00000 1.00000 1.00000 + 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 + 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 + 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 + 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 + 1.00000 1.00000 1.00000 0.99986 + 0.99752 0.99662 0.99600 0.99549 0.99554 0.99521 0.99502 0.99501 + 0.99470 0.99450 0.99465 0.99360 0.99395 0.99406 0.99389 0.99354 + 0.99301 0.99320 0.99335 0.99344 0.99253 0.99347 0.99324 0.99317 + 0.99304 0.99283 0.99279 0.99221 0.99274 0.99270 0.99272 0.99197 + 0.99264 0.99266 0.99225 0.99199 + 0.51359 0.48777 0.47881 0.47081 0.46371 0.45745 0.45325 0.44828 + 0.44393 0.44015 0.43688 0.43405 0.43219 0.43002 0.42816 0.42622 + 0.42465 0.42438 0.42412 0.42387 0.42363 0.42340 0.42297 0.42277 + 0.42240 0.42223 0.42192 0.42163 0.42126 0.42105 0.42078 0.42050 + 0.42035 0.42018 0.42011 0.42027 diff --git a/parm/optics_luts_SALT_nasa.dat b/parm/optics_luts_SALT_nasa.dat new file mode 100644 index 000000000..072997eb9 --- /dev/null +++ b/parm/optics_luts_SALT_nasa.dat @@ -0,0 +1,720 @@ + SALT 1 ext + 3.17897 3.99378 4.24634 4.48175 4.72237 4.97921 5.26095 5.57653 + 5.93651 6.35450 6.84907 7.44698 8.18917 9.14273 10.42767 12.28134 + 15.21861 16.02014 16.92121 17.93841 19.09155 20.40482 21.90863 23.64292 + 25.66279 28.04868 30.92388 34.48236 39.02001 44.94572 52.79671 63.52238 + 63.52238 63.52238 63.52238 63.52238 + 1.41480 1.78979 1.90599 2.01484 2.12690 2.24767 2.38180 2.53443 + 2.71198 2.92317 3.18046 3.50243 3.91808 4.47476 5.25384 6.40334 + 8.21413 8.70158 9.24679 9.85982 10.55342 11.34403 12.25335 13.31101 + 14.55856 16.05621 17.89368 20.20720 23.20430 27.19727 32.65588 40.35828 + 40.35828 40.35828 40.35828 40.35828 + 0.72755 0.94684 1.01535 1.07958 1.14570 1.21686 1.29568 1.38502 + 1.48836 1.61036 1.75754 1.93950 2.17113 2.47690 2.90017 3.52578 + 4.54285 4.82676 5.15015 5.52134 5.95089 6.45239 7.04346 7.74713 + 8.59389 9.62467 10.89546 12.48532 14.51133 17.16031 20.76306 25.98286 + 25.98286 25.98286 25.98286 25.98286 + 0.28579 0.38385 0.41533 0.44518 0.47623 0.50999 0.54778 0.59107 + 0.64173 0.70225 0.77617 0.86873 0.98805 1.14734 1.36959 1.69826 + 2.22550 2.37050 2.53451 2.72134 2.93588 3.18452 3.47575 3.82113 + 4.23677 4.74582 5.38265 6.20020 7.28339 8.77436 10.92122 14.17522 + 14.17522 14.17522 14.17522 14.17522 + 0.10295 0.14049 0.15273 0.16441 0.17664 0.19002 0.20510 0.22252 + 0.24306 0.26785 0.29845 0.33728 0.38810 0.45721 0.55589 0.70605 + 0.95571 1.02594 1.10606 1.19812 1.30474 1.42931 1.57630 1.75173 + 1.96381 2.22405 2.54904 2.96356 3.50611 4.24005 5.27732 6.83648 + 6.83648 6.83648 6.83648 6.83648 + 0.00844 0.01104 0.01189 0.01270 0.01355 0.01448 0.01553 0.01675 + 0.01820 0.01995 0.02213 0.02491 0.02858 0.03363 0.04097 0.05238 + 0.07200 0.07765 0.08418 0.09177 0.10069 0.11126 0.12397 0.13943 + 0.15855 0.18263 0.21361 0.25452 0.31026 0.38923 0.50685 0.69404 + 0.69404 0.69404 0.69404 0.69404 + 0.00528 0.01790 0.02189 0.02565 0.02951 0.03366 0.03824 0.04342 + 0.04937 0.05634 0.06466 0.07481 0.08748 0.10380 0.12561 0.15620 + 0.20220 0.21432 0.22778 0.24284 0.25977 0.27895 0.30088 0.32616 + 0.35564 0.39044 0.43216 0.48306 0.54653 0.62790 0.73592 0.88625 + 0.88625 0.88625 0.88625 0.88625 + SALT 1 sca + 3.17897 3.99378 4.24634 4.48175 4.72237 4.97921 5.26095 5.57653 + 5.93651 6.35450 6.84907 7.44698 8.18917 9.14273 10.42767 12.28134 + 15.21861 16.02014 16.92121 17.93841 19.09155 20.40482 21.90863 23.64292 + 25.66279 28.04868 30.92388 34.48236 39.02001 44.94572 52.79671 63.52238 + 63.52238 63.52238 63.52238 63.52238 + 1.41480 1.78979 1.90599 2.01484 2.12690 2.24767 2.38180 2.53443 + 2.71198 2.92317 3.18046 3.50243 3.91808 4.47476 5.25384 6.40334 + 8.21413 8.70158 9.24679 9.85982 10.55342 11.34403 12.25335 13.31101 + 14.55856 16.05621 17.89368 20.20720 23.20430 27.19727 32.65588 40.35828 + 40.35828 40.35828 40.35828 40.35828 + 0.72755 0.94684 1.01535 1.07958 1.14570 1.21686 1.29568 1.38502 + 1.48836 1.61036 1.75754 1.93950 2.17113 2.47690 2.90017 3.52578 + 4.54285 4.82676 5.15015 5.52134 5.95089 6.45239 7.04346 7.74713 + 8.59389 9.62467 10.89546 12.48532 14.51133 17.16031 20.76306 25.98286 + 25.98286 25.98286 25.98286 25.98286 + 0.28579 0.38385 0.41533 0.44518 0.47623 0.50999 0.54778 0.59107 + 0.64173 0.70225 0.77617 0.86873 0.98805 1.14734 1.36959 1.69826 + 2.22550 2.37050 2.53451 2.72134 2.93588 3.18452 3.47575 3.82113 + 4.23677 4.74582 5.38265 6.20020 7.28339 8.77436 10.92122 14.17522 + 14.17522 14.17522 14.17522 14.17522 + 0.10271 0.14024 0.15247 0.16415 0.17638 0.18975 0.20484 0.22225 + 0.24279 0.26757 0.29818 0.33700 0.38781 0.45692 0.55558 0.70573 + 0.95538 1.02561 1.10573 1.19779 1.30440 1.42896 1.57595 1.75138 + 1.96345 2.22368 2.54866 2.96317 3.50571 4.23963 5.27687 6.83600 + 6.83600 6.83600 6.83600 6.83600 + 0.00643 0.00888 0.00969 0.01047 0.01128 0.01218 0.01319 0.01437 + 0.01577 0.01747 0.01959 0.02230 0.02588 0.03083 0.03802 0.04924 + 0.06857 0.07415 0.08060 0.08810 0.09691 0.10737 0.11994 0.13525 + 0.15420 0.17807 0.20880 0.24940 0.30476 0.38324 0.50021 0.68648 + 0.68648 0.68648 0.68648 0.68648 + 0.00000 0.00000 0.00000 0.00001 0.00001 0.00001 0.00001 0.00001 + 0.00001 0.00001 0.00001 0.00001 0.00001 0.00001 0.00001 0.00002 + 0.00002 0.00002 0.00002 0.00002 0.00003 0.00003 0.00003 0.00004 + 0.00004 0.00005 0.00005 0.00006 0.00008 0.00010 0.00012 0.00017 + 0.00017 0.00017 0.00017 0.00017 + SALT 1 asy + 0.51706 0.55548 0.56412 0.57119 0.57758 0.58363 0.58951 0.59535 + 0.60125 0.60734 0.61379 0.62088 0.62905 0.63905 0.65208 0.66993 + 0.69426 0.69989 0.70571 0.71167 0.71774 0.72384 0.72995 0.73603 + 0.74211 0.74827 0.75468 0.76164 0.76941 0.77804 0.78741 0.79752 + 0.79752 0.79752 0.79752 0.79752 + 0.31211 0.35802 0.37110 0.38286 0.39447 0.40643 0.41904 0.43257 + 0.44725 0.46329 0.48091 0.50026 0.52143 0.54426 0.56828 0.59256 + 0.61614 0.62081 0.62552 0.63033 0.63534 0.64065 0.64644 0.65290 + 0.66030 0.66895 0.67917 0.69116 0.70491 0.71993 0.73533 0.75040 + 0.75040 0.75040 0.75040 0.75040 + 0.20095 0.23024 0.23881 0.24664 0.25449 0.26273 0.27163 0.28143 + 0.29242 0.30495 0.31945 0.33654 0.35702 0.38201 0.41306 0.45218 + 0.50130 0.51237 0.52381 0.53558 0.54758 0.55973 0.57191 0.58397 + 0.59575 0.60715 0.61811 0.62876 0.63952 0.65132 0.66582 0.68536 + 0.68536 0.68536 0.68536 0.68536 + 0.12134 0.13830 0.14324 0.14775 0.15226 0.15700 0.16211 0.16775 + 0.17408 0.18131 0.18973 0.19972 0.21186 0.22700 0.24653 0.27283 + 0.31032 0.31982 0.33020 0.34158 0.35411 0.36794 0.38328 0.40032 + 0.41932 0.44048 0.46402 0.49002 0.51830 0.54824 0.57850 0.60709 + 0.60709 0.60709 0.60709 0.60709 + 0.07303 0.08308 0.08599 0.08864 0.09128 0.09406 0.09704 0.10032 + 0.10400 0.10819 0.11305 0.11880 0.12576 0.13440 0.14551 0.16044 + 0.18177 0.18721 0.19318 0.19977 0.20708 0.21525 0.22443 0.23486 + 0.24679 0.26061 0.27680 0.29604 0.31927 0.34784 0.38359 0.42898 + 0.42898 0.42898 0.42898 0.42898 + 0.01926 0.02192 0.02269 0.02339 0.02409 0.02482 0.02560 0.02647 + 0.02743 0.02853 0.02980 0.03129 0.03310 0.03533 0.03818 0.04198 + 0.04736 0.04871 0.05020 0.05183 0.05364 0.05565 0.05789 0.06043 + 0.06332 0.06665 0.07054 0.07513 0.08068 0.08753 0.09625 0.10781 + 0.10781 0.10781 0.10781 0.10781 + 0.00046 0.00051 0.00052 0.00054 0.00055 0.00057 0.00058 0.00060 + 0.00062 0.00065 0.00067 0.00070 0.00074 0.00079 0.00085 0.00093 + 0.00104 0.00107 0.00110 0.00114 0.00118 0.00122 0.00127 0.00132 + 0.00138 0.00146 0.00154 0.00164 0.00176 0.00190 0.00209 0.00234 + 0.00234 0.00234 0.00234 0.00234 + SALT 1 ssa + 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 + 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 + 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 + 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 + 1.00000 1.00000 1.00000 1.00000 + 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 + 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 + 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 + 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 + 1.00000 1.00000 1.00000 1.00000 + 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 + 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 + 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 + 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 + 1.00000 1.00000 1.00000 1.00000 + 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 + 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 + 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 + 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 + 1.00000 1.00000 1.00000 1.00000 + 0.99768 0.99821 0.99833 0.99844 0.99853 0.99862 0.99871 0.99879 + 0.99888 0.99897 0.99906 0.99916 0.99926 0.99935 0.99946 0.99956 + 0.99966 0.99968 0.99970 0.99972 0.99974 0.99976 0.99978 0.99980 + 0.99982 0.99983 0.99985 0.99987 0.99988 0.99990 0.99992 0.99993 + 0.99993 0.99993 0.99993 0.99993 + 0.76144 0.80474 0.81538 0.82440 0.83286 0.84114 0.84945 0.85792 + 0.86665 0.87571 0.88518 0.89510 0.90552 0.91648 0.92798 0.93998 + 0.95240 0.95492 0.95744 0.95997 0.96250 0.96503 0.96755 0.97006 + 0.97256 0.97503 0.97748 0.97990 0.98228 0.98461 0.98689 0.98910 + 0.98910 0.98910 0.98910 0.98910 + 0.00073 0.00026 0.00022 0.00020 0.00018 0.00017 0.00015 0.00014 + 0.00013 0.00012 0.00012 0.00011 0.00011 0.00010 0.00010 0.00010 + 0.00010 0.00010 0.00010 0.00010 0.00010 0.00010 0.00011 0.00011 + 0.00011 0.00012 0.00012 0.00013 0.00014 0.00015 0.00017 0.00019 + 0.00019 0.00019 0.00019 0.00019 + SALT 2 ext + 3.84084 4.45237 4.65550 4.79789 4.96505 5.15331 5.30847 5.53258 + 5.75320 6.00621 6.30597 6.67327 7.08172 7.63785 8.31344 9.21648 + 10.48133 10.79933 11.13612 11.50541 11.90672 12.37923 12.86888 13.40282 + 14.01578 14.70266 15.43109 16.37182 17.43638 18.71893 20.35023 22.48381 + 22.48381 22.48381 22.48381 22.48381 + 3.74877 4.36270 4.54464 4.70344 4.86532 5.02961 5.20393 5.40612 + 5.63374 5.88137 6.17082 6.50205 6.92582 7.42835 8.07390 8.93477 + 10.14531 10.46298 10.80479 11.18531 11.61903 12.06158 12.60323 13.20474 + 13.89431 14.70132 15.62578 16.77404 18.06191 19.70303 21.75061 24.24523 + 24.24523 24.24523 24.24523 24.24523 + 3.48056 4.09344 4.26851 4.42589 4.58317 4.74916 4.93114 5.13679 + 5.36630 5.62271 5.91683 6.26089 6.68991 7.22050 7.87916 8.77796 + 10.00540 10.32962 10.67562 11.04207 11.45230 11.89440 12.42714 12.99252 + 13.64637 14.38911 15.27882 16.32315 17.61756 19.20708 21.26140 24.02065 + 24.02065 24.02065 24.02065 24.02065 + 2.75510 3.27724 3.43110 3.57356 3.71918 3.87498 4.04559 4.23476 + 4.44696 4.68865 4.96948 5.30546 5.72357 6.25670 6.93658 7.84924 + 9.18277 9.51526 9.87679 10.27689 10.72711 11.23273 11.78934 12.40751 + 13.10464 13.92774 14.86839 15.95151 17.28453 18.86730 20.89511 23.48877 + 23.48877 23.48877 23.48877 23.48877 + 1.81677 2.21583 2.33561 2.44573 2.55707 2.67493 2.80357 2.94751 + 3.11232 3.30536 3.53642 3.81810 4.16688 4.60806 5.18829 6.00392 + 7.22065 7.53323 7.87747 8.26005 8.69005 9.17854 9.73545 10.36804 + 11.08771 11.91729 12.90145 14.09253 15.51547 17.26298 19.51397 22.41546 + 22.41546 22.41546 22.41546 22.41546 + 0.30892 0.40612 0.43681 0.46570 0.49550 0.52762 0.56324 0.60358 + 0.65018 0.70503 0.77089 0.85178 0.95387 1.08719 1.26946 1.53503 + 1.95798 2.07385 2.20453 2.35274 2.52187 2.71619 2.94125 3.20438 + 3.51571 3.88963 4.34737 4.92088 5.65827 6.63155 7.95560 9.84898 + 9.84898 9.84898 9.84898 9.84898 + 0.00565 0.02002 0.02462 0.02895 0.03341 0.03822 0.04354 0.04955 + 0.05648 0.06460 0.07431 0.08617 0.10101 0.12015 0.14577 0.18181 + 0.23617 0.25052 0.26649 0.28436 0.30449 0.32733 0.35347 0.38368 + 0.41897 0.46074 0.51094 0.57240 0.64938 0.74854 0.88105 1.06705 + 1.06705 1.06705 1.06705 1.06705 + SALT 2 sca + 3.84084 4.45237 4.65550 4.79789 4.96505 5.15331 5.30847 5.53258 + 5.75320 6.00621 6.30597 6.67327 7.08172 7.63785 8.31344 9.21648 + 10.48133 10.79933 11.13612 11.50541 11.90672 12.37923 12.86888 13.40282 + 14.01578 14.70266 15.43109 16.37182 17.43638 18.71893 20.35023 22.48381 + 22.48381 22.48381 22.48381 22.48381 + 3.74877 4.36270 4.54464 4.70344 4.86532 5.02961 5.20393 5.40612 + 5.63374 5.88137 6.17082 6.50205 6.92582 7.42835 8.07390 8.93477 + 10.14531 10.46298 10.80479 11.18531 11.61903 12.06158 12.60323 13.20474 + 13.89431 14.70132 15.62578 16.77404 18.06191 19.70303 21.75061 24.24523 + 24.24523 24.24523 24.24523 24.24523 + 3.48056 4.09344 4.26851 4.42589 4.58317 4.74916 4.93114 5.13679 + 5.36630 5.62271 5.91683 6.26089 6.68991 7.22050 7.87916 8.77796 + 10.00540 10.32962 10.67562 11.04207 11.45230 11.89440 12.42714 12.99252 + 13.64637 14.38911 15.27882 16.32315 17.61756 19.20708 21.26140 24.02065 + 24.02065 24.02065 24.02065 24.02065 + 2.75510 3.27724 3.43110 3.57356 3.71918 3.87498 4.04559 4.23476 + 4.44696 4.68865 4.96948 5.30546 5.72357 6.25670 6.93658 7.84924 + 9.18277 9.51526 9.87679 10.27689 10.72711 11.23273 11.78934 12.40751 + 13.10464 13.92774 14.86839 15.95151 17.28453 18.86730 20.89511 23.48877 + 23.48877 23.48877 23.48877 23.48877 + 1.81634 2.21540 2.33517 2.44529 2.55662 2.67448 2.80312 2.94706 + 3.11186 3.30490 3.53596 3.81763 4.16641 4.60758 5.18781 6.00343 + 7.22015 7.53272 7.87696 8.25953 8.68952 9.17801 9.73492 10.36750 + 11.08717 11.91674 12.90089 14.09196 15.51488 17.26237 19.51333 22.41479 + 22.41479 22.41479 22.41479 22.41479 + 0.30604 0.40297 0.43360 0.46242 0.49216 0.52422 0.55976 0.60003 + 0.64656 0.70132 0.76708 0.84785 0.94979 1.08293 1.26497 1.53023 + 1.95269 2.06844 2.19898 2.34703 2.51599 2.71012 2.93496 3.19784 + 3.50888 3.88246 4.33979 4.91279 5.64954 6.62201 7.94499 9.83686 + 9.83686 9.83686 9.83686 9.83686 + 0.00028 0.00035 0.00037 0.00039 0.00041 0.00043 0.00045 0.00048 + 0.00051 0.00055 0.00060 0.00066 0.00074 0.00084 0.00100 0.00124 + 0.00164 0.00176 0.00189 0.00205 0.00223 0.00245 0.00271 0.00303 + 0.00343 0.00392 0.00456 0.00541 0.00656 0.00820 0.01066 0.01460 + 0.01460 0.01460 0.01460 0.01460 + SALT 2 asy + 0.67225 0.69432 0.69676 0.70380 0.70630 0.70950 0.71586 0.71631 + 0.72274 0.72577 0.73154 0.73399 0.74088 0.74489 0.75121 0.75765 + 0.76328 0.76455 0.76624 0.76746 0.76956 0.76873 0.77054 0.77136 + 0.77309 0.77311 0.77554 0.77545 0.77611 0.77636 0.77660 0.77762 + 0.77762 0.77762 0.77762 0.77762 + 0.69381 0.71250 0.71725 0.72119 0.72453 0.72816 0.73111 0.73347 + 0.73670 0.74035 0.74388 0.74689 0.74989 0.75385 0.75660 0.76127 + 0.76646 0.76655 0.76805 0.76831 0.76978 0.77190 0.77216 0.77416 + 0.77558 0.77634 0.77953 0.77976 0.78290 0.78485 0.78628 0.78886 + 0.78886 0.78886 0.78886 0.78886 + 0.70301 0.72332 0.72835 0.73243 0.73597 0.73919 0.74219 0.74534 + 0.74906 0.75294 0.75691 0.76050 0.76377 0.76804 0.77202 0.77530 + 0.77856 0.77867 0.77957 0.78039 0.78097 0.78139 0.78088 0.78217 + 0.78233 0.78220 0.78352 0.78355 0.78409 0.78446 0.78652 0.78850 + 0.78850 0.78850 0.78850 0.78850 + 0.69835 0.71950 0.72444 0.72860 0.73253 0.73647 0.74054 0.74474 + 0.74902 0.75335 0.75770 0.76210 0.76684 0.77246 0.77848 0.78388 + 0.79003 0.79128 0.79239 0.79332 0.79417 0.79522 0.79638 0.79730 + 0.79778 0.79800 0.79878 0.79891 0.79810 0.79804 0.79661 0.79503 + 0.79503 0.79503 0.79503 0.79503 + 0.66241 0.68694 0.69300 0.69812 0.70290 0.70758 0.71228 0.71710 + 0.72214 0.72748 0.73322 0.73941 0.74604 0.75313 0.76090 0.76997 + 0.78028 0.78231 0.78431 0.78632 0.78839 0.79063 0.79308 0.79564 + 0.79811 0.80030 0.80228 0.80450 0.80673 0.80820 0.80965 0.80976 + 0.80976 0.80976 0.80976 0.80976 + 0.42391 0.46989 0.48087 0.49004 0.49851 0.50667 0.51475 0.52287 + 0.53117 0.53977 0.54884 0.55862 0.56948 0.58204 0.59728 0.61663 + 0.64161 0.64733 0.65328 0.65944 0.66579 0.67231 0.67901 0.68589 + 0.69301 0.70047 0.70841 0.71705 0.72653 0.73690 0.74824 0.76086 + 0.76086 0.76086 0.76086 0.76086 + 0.00996 0.01132 0.01172 0.01207 0.01243 0.01281 0.01321 0.01366 + 0.01415 0.01472 0.01538 0.01615 0.01709 0.01825 0.01973 0.02171 + 0.02453 0.02524 0.02602 0.02688 0.02783 0.02888 0.03007 0.03141 + 0.03294 0.03470 0.03676 0.03920 0.04216 0.04582 0.05049 0.05670 + 0.05670 0.05670 0.05670 0.05670 + SALT 2 ssa + 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 + 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 + 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 + 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 + 1.00000 1.00000 1.00000 1.00000 + 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 + 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 + 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 + 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 + 1.00000 1.00000 1.00000 1.00000 + 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 + 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 + 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 + 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 + 1.00000 1.00000 1.00000 1.00000 + 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 + 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 + 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 + 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 + 1.00000 1.00000 1.00000 1.00000 + 0.99977 0.99980 0.99981 0.99982 0.99983 0.99983 0.99984 0.99985 + 0.99985 0.99986 0.99987 0.99988 0.99989 0.99990 0.99991 0.99992 + 0.99993 0.99993 0.99994 0.99994 0.99994 0.99994 0.99995 0.99995 + 0.99995 0.99995 0.99996 0.99996 0.99996 0.99996 0.99997 0.99997 + 0.99997 0.99997 0.99997 0.99997 + 0.99067 0.99225 0.99263 0.99295 0.99325 0.99354 0.99383 0.99412 + 0.99442 0.99473 0.99505 0.99538 0.99573 0.99609 0.99647 0.99687 + 0.99730 0.99739 0.99748 0.99757 0.99767 0.99777 0.99786 0.99796 + 0.99806 0.99816 0.99826 0.99836 0.99846 0.99856 0.99867 0.99877 + 0.99877 0.99877 0.99877 0.99877 + 0.04951 0.01732 0.01493 0.01337 0.01218 0.01121 0.01040 0.00969 + 0.00908 0.00854 0.00806 0.00765 0.00730 0.00703 0.00685 0.00680 + 0.00695 0.00702 0.00710 0.00721 0.00734 0.00749 0.00768 0.00790 + 0.00818 0.00851 0.00893 0.00944 0.01010 0.01096 0.01210 0.01368 + 0.01368 0.01368 0.01368 0.01368 + SALT 3 ext + 0.71835 0.87924 0.88655 0.92836 0.95768 0.99680 1.04236 1.09214 + 1.11243 1.17720 1.26219 1.31898 1.39713 1.51825 1.60509 1.80847 + 2.01861 2.06107 2.11598 2.18695 2.28119 2.40582 2.46234 2.60386 + 2.72094 2.83783 3.02052 3.23288 3.48339 3.81599 4.19433 4.68313 + 4.68313 4.68313 4.68313 4.68313 + 0.75326 0.85803 0.91536 0.93074 0.97050 1.00135 1.04228 1.08441 + 1.12174 1.19930 1.23267 1.30684 1.39136 1.50285 1.66383 1.85402 + 2.13162 2.17065 2.25099 2.22373 2.33807 2.44034 2.51679 2.64961 + 2.79123 2.96849 3.12779 3.31023 3.55333 3.88088 4.20404 4.71706 + 4.71706 4.71706 4.71706 4.71706 + 0.73947 0.89727 0.92869 0.95546 0.99618 1.01607 1.07442 1.10116 + 1.17199 1.21641 1.27072 1.33133 1.41842 1.52401 1.68249 1.81245 + 2.03573 2.10919 2.17449 2.24403 2.42983 2.39412 2.55024 2.69058 + 2.94690 3.04601 3.22146 3.44902 3.58207 3.89810 4.33784 4.84690 + 4.84690 4.84690 4.84690 4.84690 + 0.80886 0.96277 1.00408 1.01747 1.09080 1.08175 1.15036 1.18650 + 1.20424 1.27322 1.32511 1.38169 1.47102 1.57292 1.67421 1.87585 + 2.12111 2.16054 2.24660 2.34009 2.41421 2.50929 2.63169 2.73785 + 2.85421 2.99520 3.16043 3.36720 3.57718 3.92187 4.36465 4.99504 + 4.99504 4.99504 4.99504 4.99504 + 0.83616 0.98394 1.02709 1.06669 1.10366 1.14407 1.18983 1.23688 + 1.28832 1.35332 1.42056 1.49798 1.59685 1.72107 1.87845 2.07740 + 2.31822 2.37031 2.43999 2.50507 2.57340 2.65954 2.74152 2.82800 + 2.98083 3.08542 3.23837 3.46609 3.70437 4.00744 4.42399 4.93962 + 4.93962 4.93962 4.93962 4.93962 + 1.10015 1.29907 1.35683 1.41072 1.46542 1.52234 1.58234 1.64656 + 1.71686 1.79656 1.89099 2.00338 2.13300 2.28517 2.48134 2.72307 + 3.04422 3.11874 3.19597 3.27915 3.37353 3.47567 3.58077 3.69048 + 3.82034 3.96248 4.11023 4.29648 4.49727 4.76437 5.10562 5.59516 + 5.59516 5.59516 5.59516 5.59516 + 0.01740 0.03820 0.04470 0.05076 0.05696 0.06358 0.07086 0.07903 + 0.08836 0.09922 0.11210 0.12769 0.14702 0.17170 0.20438 0.24980 + 0.31740 0.33509 0.35472 0.37661 0.40119 0.42899 0.46068 0.49716 + 0.53962 0.58968 0.64958 0.72259 0.81356 0.93013 1.08492 1.30047 + 1.30047 1.30047 1.30047 1.30047 + SALT 3 sca + 0.71835 0.87924 0.88655 0.92836 0.95768 0.99680 1.04236 1.09214 + 1.11243 1.17720 1.26219 1.31898 1.39713 1.51825 1.60509 1.80847 + 2.01861 2.06107 2.11598 2.18695 2.28119 2.40582 2.46234 2.60386 + 2.72094 2.83783 3.02052 3.23288 3.48339 3.81599 4.19433 4.68313 + 4.68313 4.68313 4.68313 4.68313 + 0.75326 0.85803 0.91536 0.93074 0.97050 1.00135 1.04228 1.08441 + 1.12174 1.19930 1.23267 1.30684 1.39136 1.50285 1.66383 1.85402 + 2.13162 2.17065 2.25099 2.22373 2.33807 2.44034 2.51679 2.64961 + 2.79123 2.96849 3.12779 3.31023 3.55333 3.88088 4.20404 4.71706 + 4.71706 4.71706 4.71706 4.71706 + 0.73947 0.89727 0.92869 0.95546 0.99618 1.01607 1.07442 1.10116 + 1.17199 1.21641 1.27072 1.33133 1.41842 1.52401 1.68249 1.81245 + 2.03573 2.10919 2.17449 2.24403 2.42983 2.39412 2.55024 2.69058 + 2.94690 3.04601 3.22146 3.44902 3.58207 3.89810 4.33784 4.84690 + 4.84690 4.84690 4.84690 4.84690 + 0.80886 0.96277 1.00408 1.01747 1.09080 1.08175 1.15036 1.18650 + 1.20424 1.27322 1.32511 1.38169 1.47102 1.57292 1.67421 1.87585 + 2.12111 2.16054 2.24660 2.34009 2.41421 2.50929 2.63169 2.73785 + 2.85421 2.99520 3.16043 3.36720 3.57718 3.92187 4.36465 4.99504 + 4.99504 4.99504 4.99504 4.99504 + 0.83562 0.98340 1.02654 1.06615 1.10312 1.14353 1.18929 1.23635 + 1.28779 1.35277 1.42002 1.49745 1.59631 1.72053 1.87790 2.07684 + 2.31766 2.36975 2.43943 2.50450 2.57284 2.65897 2.74095 2.82743 + 2.98025 3.08481 3.23777 3.46551 3.70377 4.00682 4.42335 4.93899 + 4.93899 4.93899 4.93899 4.93899 + 1.09559 1.29442 1.35214 1.40597 1.46061 1.51747 1.57743 1.64160 + 1.71184 1.79147 1.88578 1.99805 2.12753 2.27953 2.47542 2.71683 + 3.03743 3.11182 3.18891 3.27192 3.36608 3.46800 3.57286 3.68230 + 3.81179 3.95353 4.10082 4.28644 4.48654 4.75265 5.09260 5.58035 + 5.58035 5.58035 5.58035 5.58035 + 0.01107 0.01318 0.01381 0.01439 0.01498 0.01562 0.01632 0.01710 + 0.01802 0.01909 0.02039 0.02199 0.02405 0.02676 0.03052 0.03603 + 0.04479 0.04719 0.04990 0.05297 0.05649 0.06054 0.06527 0.07084 + 0.07747 0.08550 0.09539 0.10782 0.12387 0.14526 0.17502 0.21881 + 0.21881 0.21881 0.21881 0.21881 + SALT 3 asy + 0.75750 0.77012 0.77914 0.77816 0.78283 0.78271 0.78591 0.78655 + 0.79340 0.79444 0.78898 0.79638 0.79736 0.80219 0.81206 0.81159 + 0.81970 0.81458 0.82078 0.81873 0.82451 0.82888 0.82224 0.83153 + 0.83073 0.82950 0.83124 0.83679 0.83105 0.83251 0.84058 0.84304 + 0.84304 0.84304 0.84304 0.84304 + 0.72976 0.74602 0.74610 0.75349 0.75255 0.75542 0.76117 0.76563 + 0.77488 0.76883 0.77007 0.78259 0.78856 0.78582 0.79749 0.79366 + 0.81361 0.81368 0.81424 0.80942 0.81738 0.80754 0.81538 0.82350 + 0.82328 0.82472 0.82720 0.82630 0.82866 0.83617 0.83367 0.83568 + 0.83568 0.83568 0.83568 0.83568 + 0.70528 0.72458 0.73178 0.73531 0.73245 0.74332 0.73666 0.75222 + 0.75185 0.74640 0.75842 0.76418 0.76841 0.77077 0.77524 0.78354 + 0.78025 0.79604 0.78441 0.79697 0.79647 0.79580 0.80847 0.80850 + 0.81237 0.80887 0.81102 0.81887 0.82178 0.81740 0.82746 0.83016 + 0.83016 0.83016 0.83016 0.83016 + 0.68374 0.70641 0.71027 0.72410 0.71112 0.73031 0.71473 0.73100 + 0.73700 0.72762 0.73468 0.74077 0.74283 0.74551 0.75615 0.75715 + 0.76982 0.77626 0.77555 0.77618 0.78060 0.78318 0.78305 0.78909 + 0.78711 0.79306 0.79577 0.79751 0.79840 0.80580 0.80238 0.81321 + 0.81321 0.81321 0.81321 0.81321 + 0.65571 0.67669 0.68356 0.68689 0.69343 0.69710 0.70025 0.70528 + 0.71206 0.71428 0.72061 0.72861 0.73458 0.73894 0.74687 0.74952 + 0.75942 0.76135 0.76231 0.76192 0.76614 0.76515 0.76600 0.76918 + 0.76741 0.76895 0.77143 0.77597 0.77684 0.77974 0.78916 0.78896 + 0.78896 0.78896 0.78896 0.78896 + 0.76243 0.77996 0.78345 0.78645 0.78945 0.79253 0.79561 0.79853 + 0.80113 0.80332 0.80536 0.80785 0.81059 0.81244 0.81344 0.81421 + 0.81217 0.81178 0.81099 0.80953 0.80763 0.80619 0.80482 0.80256 + 0.79904 0.79627 0.79268 0.78774 0.78348 0.77744 0.77161 0.76740 + 0.76740 0.76740 0.76740 0.76740 + 0.09628 0.11109 0.11543 0.11940 0.12338 0.12757 0.13209 0.13708 + 0.14268 0.14909 0.15654 0.16537 0.17608 0.18939 0.20648 0.22930 + 0.26147 0.26956 0.27838 0.28802 0.29860 0.31028 0.32322 0.33762 + 0.35373 0.37186 0.39236 0.41566 0.44225 0.47268 0.50752 0.54723 + 0.54723 0.54723 0.54723 0.54723 + SALT 3 ssa + 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 + 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 + 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 + 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 + 1.00000 1.00000 1.00000 1.00000 + 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 + 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 + 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 + 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 + 1.00000 1.00000 1.00000 1.00000 + 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 + 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 + 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 + 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 + 1.00000 1.00000 1.00000 1.00000 + 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 + 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 + 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 + 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 + 1.00000 1.00000 1.00000 1.00000 + 0.99935 0.99945 0.99947 0.99949 0.99951 0.99953 0.99954 0.99957 + 0.99959 0.99960 0.99962 0.99965 0.99967 0.99969 0.99971 0.99973 + 0.99976 0.99976 0.99977 0.99977 0.99978 0.99979 0.99979 0.99980 + 0.99980 0.99980 0.99981 0.99983 0.99984 0.99984 0.99985 0.99987 + 0.99987 0.99987 0.99987 0.99987 + 0.99586 0.99642 0.99654 0.99663 0.99672 0.99680 0.99689 0.99699 + 0.99708 0.99716 0.99725 0.99734 0.99744 0.99753 0.99762 0.99771 + 0.99777 0.99778 0.99779 0.99780 0.99779 0.99779 0.99779 0.99778 + 0.99776 0.99774 0.99771 0.99766 0.99761 0.99754 0.99745 0.99735 + 0.99735 0.99735 0.99735 0.99735 + 0.63630 0.34508 0.30898 0.28354 0.26308 0.24563 0.23025 0.21644 + 0.20389 0.19240 0.18187 0.17225 0.16356 0.15586 0.14931 0.14422 + 0.14113 0.14083 0.14067 0.14065 0.14080 0.14113 0.14168 0.14248 + 0.14357 0.14500 0.14685 0.14922 0.15225 0.15618 0.16132 0.16825 + 0.16825 0.16825 0.16825 0.16825 + SALT 4 ext + 0.28678 0.34479 0.36363 0.37600 0.39152 0.40353 0.42127 0.43432 + 0.45795 0.48190 0.50074 0.53549 0.56852 0.61227 0.66407 0.74207 + 0.85056 0.86794 0.89810 0.92900 0.95969 1.00254 1.04676 1.09560 + 1.15624 1.21737 1.29611 1.37209 1.47976 1.60247 1.79054 2.00314 + 2.00314 2.00314 2.00314 2.00314 + 0.29523 0.34812 0.36773 0.38347 0.39517 0.41056 0.42292 0.44620 + 0.47169 0.49141 0.50937 0.53810 0.57570 0.62439 0.67649 0.74484 + 0.85515 0.87765 0.90523 0.95186 0.98835 1.01791 1.05801 1.11765 + 1.15508 1.22751 1.30632 1.39110 1.49351 1.63523 1.79337 2.01633 + 2.01633 2.01633 2.01633 2.01633 + 0.29545 0.35900 0.36558 0.39061 0.39430 0.42287 0.42448 0.44922 + 0.46400 0.49267 0.51584 0.54150 0.58385 0.61542 0.68226 0.75699 + 0.85983 0.89170 0.92880 0.94532 0.98823 1.03348 1.07705 1.11552 + 1.15203 1.23630 1.31215 1.40360 1.48343 1.65374 1.81939 2.02310 + 2.02310 2.02310 2.02310 2.02310 + 0.29807 0.35715 0.36988 0.39089 0.39705 0.42126 0.42755 0.45203 + 0.46471 0.50479 0.52015 0.55423 0.60202 0.63173 0.69236 0.77782 + 0.87057 0.89151 0.91383 0.95970 0.98541 1.03075 1.07894 1.12318 + 1.18225 1.24235 1.32570 1.42460 1.52639 1.65778 1.83947 2.04714 + 2.04714 2.04714 2.04714 2.04714 + 0.31764 0.37403 0.39782 0.40535 0.43345 0.43360 0.46298 0.46632 + 0.50153 0.51672 0.53558 0.56444 0.59786 0.63702 0.69149 0.76081 + 0.86551 0.89720 0.92613 0.96596 0.99950 1.02757 1.07742 1.15115 + 1.18715 1.24806 1.36176 1.43988 1.53003 1.68196 1.83170 2.08062 + 2.08062 2.08062 2.08062 2.08062 + 0.33917 0.40106 0.41449 0.43310 0.44356 0.45986 0.47487 0.49139 + 0.50982 0.53253 0.55587 0.58272 0.61629 0.65826 0.70884 0.78228 + 0.88530 0.91005 0.94228 0.97548 1.01341 1.04926 1.10442 1.16237 + 1.22616 1.29635 1.39063 1.49281 1.63175 1.77579 1.98251 2.23862 + 2.23862 2.23862 2.23862 2.23862 + 0.09959 0.12078 0.12732 0.13342 0.13964 0.14627 0.15355 0.16169 + 0.17098 0.18177 0.19452 0.20992 0.22895 0.25314 0.28499 0.32895 + 0.39374 0.41059 0.42921 0.44991 0.47306 0.49914 0.52873 0.56261 + 0.60181 0.64769 0.70215 0.76790 0.84891 0.95131 1.08511 1.26777 + 1.26777 1.26777 1.26777 1.26777 + SALT 4 sca + 0.28678 0.34479 0.36363 0.37600 0.39152 0.40353 0.42127 0.43432 + 0.45795 0.48190 0.50074 0.53549 0.56852 0.61227 0.66407 0.74207 + 0.85056 0.86794 0.89810 0.92900 0.95969 1.00254 1.04676 1.09560 + 1.15624 1.21737 1.29611 1.37209 1.47976 1.60247 1.79054 2.00314 + 2.00314 2.00314 2.00314 2.00314 + 0.29523 0.34812 0.36773 0.38347 0.39517 0.41056 0.42292 0.44620 + 0.47169 0.49141 0.50937 0.53810 0.57570 0.62439 0.67649 0.74484 + 0.85515 0.87765 0.90523 0.95186 0.98835 1.01791 1.05801 1.11765 + 1.15508 1.22751 1.30632 1.39110 1.49351 1.63523 1.79337 2.01633 + 2.01633 2.01633 2.01633 2.01633 + 0.29545 0.35900 0.36558 0.39061 0.39430 0.42287 0.42448 0.44922 + 0.46400 0.49267 0.51584 0.54150 0.58385 0.61542 0.68226 0.75699 + 0.85983 0.89170 0.92880 0.94532 0.98823 1.03348 1.07705 1.11552 + 1.15203 1.23630 1.31215 1.40360 1.48343 1.65374 1.81939 2.02310 + 2.02310 2.02310 2.02310 2.02310 + 0.29807 0.35715 0.36988 0.39089 0.39705 0.42126 0.42755 0.45203 + 0.46471 0.50479 0.52015 0.55423 0.60202 0.63173 0.69236 0.77782 + 0.87057 0.89151 0.91383 0.95970 0.98541 1.03075 1.07894 1.12318 + 1.18225 1.24235 1.32570 1.42460 1.52639 1.65778 1.83947 2.04714 + 2.04714 2.04714 2.04714 2.04714 + 0.31716 0.37357 0.39733 0.40489 0.43298 0.43315 0.46250 0.46587 + 0.50108 0.51625 0.53513 0.56398 0.59739 0.63655 0.69102 0.76034 + 0.86505 0.89672 0.92567 0.96549 0.99900 1.02705 1.07691 1.15065 + 1.18664 1.24752 1.36122 1.43934 1.52949 1.68141 1.83109 2.08006 + 2.08006 2.08006 2.08006 2.08006 + 0.33464 0.39624 0.40969 0.42831 0.43871 0.45481 0.46995 0.48645 + 0.50471 0.52735 0.55072 0.57738 0.61085 0.65262 0.70304 0.77601 + 0.87866 0.90324 0.93528 0.96829 1.00592 1.04178 1.09658 1.15426 + 1.21770 1.28779 1.38148 1.48321 1.62112 1.76442 1.97021 2.22427 + 2.22427 2.22427 2.22427 2.22427 + 0.09031 0.08665 0.08628 0.08616 0.08621 0.08644 0.08687 0.08753 + 0.08848 0.08982 0.09166 0.09420 0.09773 0.10271 0.10994 0.12086 + 0.13843 0.14323 0.14862 0.15473 0.16169 0.16967 0.17890 0.18967 + 0.20237 0.21754 0.23594 0.25865 0.28728 0.32438 0.37414 0.44404 + 0.44404 0.44404 0.44404 0.44404 + SALT 4 asy + 0.78966 0.79973 0.80622 0.80966 0.80994 0.81338 0.81675 0.81770 + 0.81821 0.82425 0.82293 0.82529 0.82790 0.83335 0.83847 0.83653 + 0.84039 0.84565 0.84291 0.84906 0.84687 0.84685 0.84945 0.84818 + 0.85505 0.84847 0.85506 0.85547 0.85799 0.85891 0.85555 0.85995 + 0.85995 0.85995 0.85995 0.85995 + 0.78552 0.79907 0.80355 0.80757 0.80745 0.81151 0.80951 0.81563 + 0.81703 0.81763 0.82426 0.82260 0.82504 0.82959 0.83002 0.83641 + 0.83720 0.84233 0.84201 0.84443 0.84160 0.84746 0.84522 0.84603 + 0.84982 0.85282 0.84898 0.85256 0.85534 0.85784 0.85574 0.85847 + 0.85847 0.85847 0.85847 0.85847 + 0.77421 0.78543 0.79302 0.79115 0.79982 0.79300 0.80319 0.80039 + 0.81000 0.81490 0.80579 0.81016 0.81890 0.82010 0.82551 0.82835 + 0.83416 0.83651 0.83707 0.83719 0.83951 0.84344 0.84550 0.84359 + 0.84471 0.84778 0.84265 0.84667 0.85197 0.85293 0.85590 0.85415 + 0.85415 0.85415 0.85415 0.85415 + 0.76807 0.78501 0.79038 0.78673 0.79628 0.79297 0.80256 0.79525 + 0.80525 0.81412 0.80311 0.81074 0.81812 0.81489 0.82112 0.82734 + 0.82908 0.83137 0.83126 0.83286 0.83241 0.83724 0.83412 0.83267 + 0.83661 0.84172 0.84300 0.84367 0.84211 0.84616 0.84658 0.85245 + 0.85245 0.85245 0.85245 0.85245 + 0.76474 0.78563 0.77612 0.79421 0.77899 0.79523 0.78950 0.79935 + 0.80212 0.79567 0.80278 0.80748 0.81396 0.80948 0.81186 0.82029 + 0.82435 0.82120 0.82800 0.82456 0.82813 0.82990 0.82770 0.83823 + 0.84026 0.83403 0.83844 0.83855 0.84360 0.84288 0.84342 0.84116 + 0.84116 0.84116 0.84116 0.84116 + 0.68230 0.69870 0.70443 0.70435 0.71082 0.71268 0.71389 0.71798 + 0.71816 0.72375 0.72747 0.72961 0.73095 0.73781 0.73636 0.74905 + 0.75589 0.75485 0.76019 0.76110 0.76598 0.75898 0.77070 0.77457 + 0.77890 0.77518 0.78143 0.78741 0.80474 0.80424 0.81440 0.81811 + 0.81811 0.81811 0.81811 0.81811 + 0.54802 0.58865 0.59843 0.60678 0.61468 0.62252 0.63053 0.63888 + 0.64771 0.65720 0.66749 0.67881 0.69139 0.70556 0.72174 0.74054 + 0.76281 0.76777 0.77293 0.77829 0.78388 0.78969 0.79576 0.80209 + 0.80871 0.81565 0.82293 0.83061 0.83872 0.84735 0.85663 0.86678 + 0.86678 0.86678 0.86678 0.86678 + SALT 4 ssa + 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 + 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 + 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 + 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 + 1.00000 1.00000 1.00000 1.00000 + 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 + 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 + 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 + 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 + 1.00000 1.00000 1.00000 1.00000 + 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 + 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 + 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 + 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 + 1.00000 1.00000 1.00000 1.00000 + 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 + 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 + 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 + 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 + 1.00000 1.00000 1.00000 1.00000 + 0.99848 0.99876 0.99876 0.99887 0.99891 0.99895 0.99895 0.99903 + 0.99910 0.99909 0.99915 0.99920 0.99921 0.99926 0.99933 0.99939 + 0.99947 0.99947 0.99950 0.99952 0.99950 0.99950 0.99953 0.99957 + 0.99957 0.99957 0.99961 0.99962 0.99965 0.99967 0.99967 0.99973 + 0.99973 0.99973 0.99973 0.99973 + 0.98663 0.98798 0.98842 0.98893 0.98907 0.98903 0.98964 0.98994 + 0.98997 0.99027 0.99074 0.99083 0.99117 0.99144 0.99181 0.99199 + 0.99251 0.99251 0.99258 0.99263 0.99260 0.99287 0.99290 0.99302 + 0.99311 0.99340 0.99342 0.99357 0.99348 0.99360 0.99379 0.99359 + 0.99359 0.99359 0.99359 0.99359 + 0.90682 0.71742 0.67764 0.64576 0.61739 0.59096 0.56573 0.54132 + 0.51749 0.49413 0.47120 0.44874 0.42686 0.40576 0.38576 0.36741 + 0.35157 0.34883 0.34628 0.34392 0.34180 0.33993 0.33835 0.33712 + 0.33627 0.33588 0.33603 0.33683 0.33841 0.34098 0.34479 0.35025 + 0.35025 0.35025 0.35025 0.35025 + SALT 5 ext + 0.09643 0.11755 0.12337 0.12773 0.13264 0.13741 0.14355 0.15074 + 0.15716 0.16508 0.17410 0.18502 0.19747 0.21427 0.23332 0.26070 + 0.29842 0.30761 0.31833 0.32981 0.34255 0.35642 0.37108 0.38932 + 0.41010 0.43224 0.45953 0.49200 0.52881 0.57738 0.63544 0.71459 + 0.71459 0.71459 0.71459 0.71459 + 0.09698 0.11795 0.12387 0.12928 0.13293 0.13784 0.14441 0.15091 + 0.15821 0.16554 0.17590 0.18555 0.20012 0.21502 0.23584 0.26252 + 0.29898 0.30900 0.32010 0.33090 0.34334 0.35787 0.37326 0.39082 + 0.41146 0.43484 0.46006 0.49321 0.53072 0.57858 0.64014 0.71840 + 0.71840 0.71840 0.71840 0.71840 + 0.09724 0.11775 0.12376 0.13029 0.13485 0.13841 0.14475 0.15184 + 0.15778 0.16638 0.17635 0.18745 0.19996 0.21583 0.23759 0.26346 + 0.30138 0.31091 0.32159 0.33148 0.34406 0.36030 0.37520 0.39263 + 0.41274 0.43571 0.46319 0.49560 0.53377 0.58079 0.64173 0.72059 + 0.72059 0.72059 0.72059 0.72059 + 0.09874 0.11962 0.12508 0.13032 0.13469 0.13928 0.14655 0.15336 + 0.15872 0.16969 0.17734 0.18836 0.20079 0.21750 0.23698 0.26599 + 0.30194 0.31324 0.32016 0.33486 0.34699 0.36200 0.37749 0.39584 + 0.41488 0.43934 0.46452 0.49648 0.53564 0.57939 0.64258 0.72188 + 0.72188 0.72188 0.72188 0.72188 + 0.10030 0.12208 0.12708 0.13318 0.13812 0.14178 0.14685 0.15288 + 0.16130 0.16957 0.17760 0.18973 0.20355 0.22030 0.23881 0.26651 + 0.30465 0.31554 0.32544 0.33517 0.34894 0.36642 0.37955 0.39876 + 0.41578 0.44019 0.46856 0.50015 0.53696 0.58517 0.64926 0.72099 + 0.72099 0.72099 0.72099 0.72099 + 0.10429 0.12331 0.13229 0.13588 0.13949 0.14529 0.15109 0.15845 + 0.16990 0.17429 0.18438 0.19739 0.20771 0.22388 0.24533 0.27375 + 0.31679 0.32685 0.33765 0.34935 0.36077 0.37476 0.38956 0.40891 + 0.42555 0.45003 0.47617 0.50964 0.55034 0.60692 0.65785 0.74288 + 0.74288 0.74288 0.74288 0.74288 + 0.17092 0.18057 0.18349 0.18624 0.18909 0.19217 0.19560 0.19953 + 0.20412 0.20957 0.21617 0.22430 0.23453 0.24773 0.26533 0.28977 + 0.32569 0.33497 0.34519 0.35651 0.36910 0.38320 0.39910 0.41716 + 0.43786 0.46184 0.48997 0.52344 0.56401 0.61432 0.67856 0.76389 + 0.76389 0.76389 0.76389 0.76389 + SALT 5 sca + 0.09643 0.11755 0.12337 0.12773 0.13264 0.13741 0.14355 0.15074 + 0.15716 0.16508 0.17410 0.18502 0.19747 0.21427 0.23332 0.26070 + 0.29842 0.30761 0.31833 0.32981 0.34255 0.35642 0.37108 0.38932 + 0.41010 0.43224 0.45953 0.49200 0.52881 0.57738 0.63544 0.71459 + 0.71459 0.71459 0.71459 0.71459 + 0.09698 0.11795 0.12387 0.12928 0.13293 0.13784 0.14441 0.15091 + 0.15821 0.16554 0.17590 0.18555 0.20012 0.21502 0.23584 0.26252 + 0.29898 0.30900 0.32010 0.33090 0.34334 0.35787 0.37326 0.39082 + 0.41146 0.43484 0.46006 0.49321 0.53072 0.57858 0.64014 0.71840 + 0.71840 0.71840 0.71840 0.71840 + 0.09724 0.11775 0.12376 0.13029 0.13485 0.13841 0.14475 0.15184 + 0.15778 0.16638 0.17635 0.18745 0.19996 0.21583 0.23759 0.26346 + 0.30138 0.31091 0.32159 0.33148 0.34406 0.36030 0.37520 0.39263 + 0.41274 0.43571 0.46319 0.49560 0.53377 0.58079 0.64173 0.72059 + 0.72059 0.72059 0.72059 0.72059 + 0.09874 0.11962 0.12508 0.13032 0.13469 0.13928 0.14655 0.15336 + 0.15872 0.16969 0.17734 0.18836 0.20079 0.21750 0.23698 0.26599 + 0.30194 0.31324 0.32016 0.33486 0.34699 0.36200 0.37749 0.39584 + 0.41488 0.43934 0.46452 0.49648 0.53564 0.57939 0.64258 0.72188 + 0.72188 0.72188 0.72188 0.72188 + 0.09989 0.12165 0.12666 0.13277 0.13770 0.14137 0.14644 0.15247 + 0.16088 0.16916 0.17719 0.18931 0.20313 0.21988 0.23838 0.26610 + 0.30420 0.31510 0.32499 0.33474 0.34848 0.36599 0.37910 0.39829 + 0.41530 0.43971 0.46807 0.49965 0.53647 0.58467 0.64872 0.72041 + 0.72041 0.72041 0.72041 0.72041 + 0.10033 0.11920 0.12825 0.13175 0.13520 0.14095 0.14670 0.15403 + 0.16571 0.16987 0.17987 0.19273 0.20293 0.21882 0.24005 0.26826 + 0.31071 0.32052 0.33132 0.34301 0.35427 0.36777 0.38206 0.40152 + 0.41779 0.44195 0.46766 0.50073 0.54058 0.59641 0.64590 0.72970 + 0.72970 0.72970 0.72970 0.72970 + 0.15903 0.14384 0.14125 0.13935 0.13782 0.13657 0.13555 0.13480 + 0.13436 0.13429 0.13471 0.13579 0.13776 0.14105 0.14629 0.15467 + 0.16839 0.17212 0.17630 0.18100 0.18631 0.19235 0.19924 0.20718 + 0.21640 0.22720 0.24001 0.25543 0.27430 0.29793 0.32837 0.36912 + 0.36912 0.36912 0.36912 0.36912 + SALT 5 asy + 0.81216 0.82558 0.82805 0.83098 0.83256 0.83503 0.83724 0.83931 + 0.84274 0.84347 0.84516 0.85073 0.85161 0.85190 0.85722 0.85909 + 0.86238 0.86154 0.86524 0.86185 0.86313 0.86546 0.86514 0.86688 + 0.86441 0.86730 0.86592 0.86607 0.86782 0.86785 0.87010 0.87102 + 0.87102 0.87102 0.87102 0.87102 + 0.81106 0.82332 0.82823 0.82902 0.83166 0.83470 0.83834 0.84028 + 0.84187 0.83981 0.84477 0.84827 0.85129 0.85431 0.85466 0.86004 + 0.86403 0.86397 0.86260 0.86276 0.86317 0.86529 0.86411 0.86424 + 0.86619 0.86708 0.86709 0.86762 0.86965 0.86896 0.87021 0.87048 + 0.87048 0.87048 0.87048 0.87048 + 0.80878 0.82122 0.82580 0.82549 0.82834 0.83132 0.83607 0.83839 + 0.83801 0.84247 0.84578 0.84579 0.84533 0.85300 0.85610 0.85852 + 0.86004 0.86218 0.86196 0.86026 0.86161 0.86297 0.86424 0.86247 + 0.86416 0.86616 0.86741 0.86782 0.86763 0.86933 0.86980 0.87053 + 0.87053 0.87053 0.87053 0.87053 + 0.80547 0.82053 0.82116 0.82511 0.82854 0.82863 0.83457 0.83600 + 0.83616 0.83751 0.84347 0.84337 0.84370 0.84617 0.85207 0.85365 + 0.86133 0.85792 0.85954 0.86267 0.86251 0.85961 0.86262 0.86262 + 0.86153 0.86574 0.86746 0.86508 0.86627 0.86909 0.87054 0.87155 + 0.87155 0.87155 0.87155 0.87155 + 0.80210 0.81599 0.81957 0.81945 0.82324 0.82453 0.82729 0.82948 + 0.83330 0.83353 0.83909 0.84194 0.84288 0.84545 0.85143 0.85424 + 0.85516 0.85651 0.85538 0.85564 0.85719 0.85741 0.86149 0.85865 + 0.86039 0.86298 0.86469 0.86341 0.86683 0.86734 0.86819 0.86978 + 0.86978 0.86978 0.86978 0.86978 + 0.80025 0.81055 0.81467 0.81561 0.81602 0.81694 0.81895 0.82146 + 0.82557 0.83141 0.82818 0.83536 0.83079 0.83537 0.84518 0.84386 + 0.84909 0.84846 0.85173 0.85441 0.85474 0.85343 0.85191 0.85315 + 0.85832 0.85555 0.85904 0.86298 0.86548 0.86232 0.86384 0.86685 + 0.86685 0.86685 0.86685 0.86685 + 0.76518 0.83568 0.84783 0.85708 0.86498 0.87209 0.87867 0.88489 + 0.89086 0.89669 0.90241 0.90809 0.91376 0.91950 0.92537 0.93143 + 0.93776 0.93907 0.94040 0.94176 0.94315 0.94457 0.94603 0.94754 + 0.94909 0.95069 0.95234 0.95405 0.95585 0.95773 0.95975 0.96191 + 0.96191 0.96191 0.96191 0.96191 + SALT 5 ssa + 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 + 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 + 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 + 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 + 1.00000 1.00000 1.00000 1.00000 + 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 + 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 + 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 + 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 + 1.00000 1.00000 1.00000 1.00000 + 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 + 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 + 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 + 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 + 1.00000 1.00000 1.00000 1.00000 + 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 + 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 + 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 + 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 + 1.00000 1.00000 1.00000 1.00000 + 0.99589 0.99653 0.99672 0.99688 0.99699 0.99712 0.99722 0.99728 + 0.99741 0.99760 0.99766 0.99778 0.99794 0.99812 0.99819 0.99844 + 0.99855 0.99862 0.99863 0.99870 0.99869 0.99881 0.99881 0.99882 + 0.99885 0.99892 0.99896 0.99900 0.99910 0.99914 0.99917 0.99919 + 0.99919 0.99919 0.99919 0.99919 + 0.96210 0.96664 0.96948 0.96966 0.96926 0.97015 0.97096 0.97211 + 0.97531 0.97464 0.97555 0.97641 0.97698 0.97742 0.97849 0.97994 + 0.98081 0.98062 0.98124 0.98186 0.98199 0.98134 0.98077 0.98192 + 0.98177 0.98205 0.98212 0.98251 0.98227 0.98268 0.98183 0.98225 + 0.98225 0.98225 0.98225 0.98225 + 0.93041 0.79658 0.76977 0.74821 0.72888 0.71066 0.69301 0.67560 + 0.65823 0.64077 0.62316 0.60537 0.58741 0.56935 0.55136 0.53375 + 0.51702 0.51384 0.51074 0.50771 0.50478 0.50195 0.49923 0.49665 + 0.49421 0.49194 0.48985 0.48798 0.48634 0.48498 0.48392 0.48321 + 0.48321 0.48321 0.48321 0.48321 diff --git a/parm/optics_luts_SOOT_nasa.dat b/parm/optics_luts_SOOT_nasa.dat new file mode 100644 index 000000000..0281afce1 --- /dev/null +++ b/parm/optics_luts_SOOT_nasa.dat @@ -0,0 +1,288 @@ + SOOT 1 ext + 17.07566 17.07566 17.07566 17.07566 17.07566 17.07566 17.07566 17.07566 + 17.07566 17.07566 17.07566 17.07566 17.07566 17.07566 17.07566 17.07566 + 17.07566 17.07566 17.07566 17.07566 17.07566 17.07566 17.07566 17.07566 + 17.07566 17.07566 17.07566 17.07566 17.07566 17.07566 17.07566 17.07566 + 17.07566 17.07566 17.07566 17.07566 + 12.37106 12.37106 12.37106 12.37106 12.37106 12.37106 12.37106 12.37106 + 12.37106 12.37106 12.37106 12.37106 12.37106 12.37106 12.37106 12.37106 + 12.37106 12.37106 12.37106 12.37106 12.37106 12.37106 12.37106 12.37106 + 12.37106 12.37106 12.37106 12.37106 12.37106 12.37106 12.37106 12.37106 + 12.37106 12.37106 12.37106 12.37106 + 9.28480 9.28480 9.28480 9.28480 9.28480 9.28480 9.28480 9.28480 + 9.28480 9.28480 9.28480 9.28480 9.28480 9.28480 9.28480 9.28480 + 9.28480 9.28480 9.28480 9.28480 9.28480 9.28480 9.28480 9.28480 + 9.28480 9.28480 9.28480 9.28480 9.28480 9.28480 9.28480 9.28480 + 9.28480 9.28480 9.28480 9.28480 + 6.56657 6.56657 6.56657 6.56657 6.56657 6.56657 6.56657 6.56657 + 6.56657 6.56657 6.56657 6.56657 6.56657 6.56657 6.56657 6.56657 + 6.56657 6.56657 6.56657 6.56657 6.56657 6.56657 6.56657 6.56657 + 6.56657 6.56657 6.56657 6.56657 6.56657 6.56657 6.56657 6.56657 + 6.56657 6.56657 6.56657 6.56657 + 4.70828 4.70828 4.70828 4.70828 4.70828 4.70828 4.70828 4.70828 + 4.70828 4.70828 4.70828 4.70828 4.70828 4.70828 4.70828 4.70828 + 4.70828 4.70828 4.70828 4.70828 4.70828 4.70828 4.70828 4.70828 + 4.70828 4.70828 4.70828 4.70828 4.70828 4.70828 4.70828 4.70828 + 4.70828 4.70828 4.70828 4.70828 + 2.18240 2.18240 2.18240 2.18240 2.18240 2.18240 2.18240 2.18240 + 2.18240 2.18240 2.18240 2.18240 2.18240 2.18240 2.18240 2.18240 + 2.18240 2.18240 2.18240 2.18240 2.18240 2.18240 2.18240 2.18240 + 2.18240 2.18240 2.18240 2.18240 2.18240 2.18240 2.18240 2.18240 + 2.18240 2.18240 2.18240 2.18240 + 0.30928 0.30928 0.30928 0.30928 0.30928 0.30928 0.30928 0.30928 + 0.30928 0.30928 0.30928 0.30928 0.30928 0.30928 0.30928 0.30928 + 0.30928 0.30928 0.30928 0.30928 0.30928 0.30928 0.30928 0.30928 + 0.30928 0.30928 0.30928 0.30928 0.30928 0.30928 0.30928 0.30928 + 0.30928 0.30928 0.30928 0.30928 + SOOT 1 sca + 4.95749 4.95749 4.95749 4.95749 4.95749 4.95749 4.95749 4.95749 + 4.95749 4.95749 4.95749 4.95749 4.95749 4.95749 4.95749 4.95749 + 4.95749 4.95749 4.95749 4.95749 4.95749 4.95749 4.95749 4.95749 + 4.95749 4.95749 4.95749 4.95749 4.95749 4.95749 4.95749 4.95749 + 4.95749 4.95749 4.95749 4.95749 + 3.03268 3.03268 3.03268 3.03268 3.03268 3.03268 3.03268 3.03268 + 3.03268 3.03268 3.03268 3.03268 3.03268 3.03268 3.03268 3.03268 + 3.03268 3.03268 3.03268 3.03268 3.03268 3.03268 3.03268 3.03268 + 3.03268 3.03268 3.03268 3.03268 3.03268 3.03268 3.03268 3.03268 + 3.03268 3.03268 3.03268 3.03268 + 1.93167 1.93167 1.93167 1.93167 1.93167 1.93167 1.93167 1.93167 + 1.93167 1.93167 1.93167 1.93167 1.93167 1.93167 1.93167 1.93167 + 1.93167 1.93167 1.93167 1.93167 1.93167 1.93167 1.93167 1.93167 + 1.93167 1.93167 1.93167 1.93167 1.93167 1.93167 1.93167 1.93167 + 1.93167 1.93167 1.93167 1.93167 + 1.05247 1.05247 1.05247 1.05247 1.05247 1.05247 1.05247 1.05247 + 1.05247 1.05247 1.05247 1.05247 1.05247 1.05247 1.05247 1.05247 + 1.05247 1.05247 1.05247 1.05247 1.05247 1.05247 1.05247 1.05247 + 1.05247 1.05247 1.05247 1.05247 1.05247 1.05247 1.05247 1.05247 + 1.05247 1.05247 1.05247 1.05247 + 0.52130 0.52130 0.52130 0.52130 0.52130 0.52130 0.52130 0.52130 + 0.52130 0.52130 0.52130 0.52130 0.52130 0.52130 0.52130 0.52130 + 0.52130 0.52130 0.52130 0.52130 0.52130 0.52130 0.52130 0.52130 + 0.52130 0.52130 0.52130 0.52130 0.52130 0.52130 0.52130 0.52130 + 0.52130 0.52130 0.52130 0.52130 + 0.06129 0.06129 0.06129 0.06129 0.06129 0.06129 0.06129 0.06129 + 0.06129 0.06129 0.06129 0.06129 0.06129 0.06129 0.06129 0.06129 + 0.06129 0.06129 0.06129 0.06129 0.06129 0.06129 0.06129 0.06129 + 0.06129 0.06129 0.06129 0.06129 0.06129 0.06129 0.06129 0.06129 + 0.06129 0.06129 0.06129 0.06129 + 0.00006 0.00006 0.00006 0.00006 0.00006 0.00006 0.00006 0.00006 + 0.00006 0.00006 0.00006 0.00006 0.00006 0.00006 0.00006 0.00006 + 0.00006 0.00006 0.00006 0.00006 0.00006 0.00006 0.00006 0.00006 + 0.00006 0.00006 0.00006 0.00006 0.00006 0.00006 0.00006 0.00006 + 0.00006 0.00006 0.00006 0.00006 + SOOT 1 asy + 0.42162 0.42162 0.42162 0.42162 0.42162 0.42162 0.42162 0.42162 + 0.42162 0.42162 0.42162 0.42162 0.42162 0.42162 0.42162 0.42162 + 0.42162 0.42162 0.42162 0.42162 0.42162 0.42162 0.42162 0.42162 + 0.42162 0.42162 0.42162 0.42162 0.42162 0.42162 0.42162 0.42162 + 0.42162 0.42162 0.42162 0.42162 + 0.37188 0.37188 0.37188 0.37188 0.37188 0.37188 0.37188 0.37188 + 0.37188 0.37188 0.37188 0.37188 0.37188 0.37188 0.37188 0.37188 + 0.37188 0.37188 0.37188 0.37188 0.37188 0.37188 0.37188 0.37188 + 0.37188 0.37188 0.37188 0.37188 0.37188 0.37188 0.37188 0.37188 + 0.37188 0.37188 0.37188 0.37188 + 0.33357 0.33357 0.33357 0.33357 0.33357 0.33357 0.33357 0.33357 + 0.33357 0.33357 0.33357 0.33357 0.33357 0.33357 0.33357 0.33357 + 0.33357 0.33357 0.33357 0.33357 0.33357 0.33357 0.33357 0.33357 + 0.33357 0.33357 0.33357 0.33357 0.33357 0.33357 0.33357 0.33357 + 0.33357 0.33357 0.33357 0.33357 + 0.28541 0.28541 0.28541 0.28541 0.28541 0.28541 0.28541 0.28541 + 0.28541 0.28541 0.28541 0.28541 0.28541 0.28541 0.28541 0.28541 + 0.28541 0.28541 0.28541 0.28541 0.28541 0.28541 0.28541 0.28541 + 0.28541 0.28541 0.28541 0.28541 0.28541 0.28541 0.28541 0.28541 + 0.28541 0.28541 0.28541 0.28541 + 0.23111 0.23111 0.23111 0.23111 0.23111 0.23111 0.23111 0.23111 + 0.23111 0.23111 0.23111 0.23111 0.23111 0.23111 0.23111 0.23111 + 0.23111 0.23111 0.23111 0.23111 0.23111 0.23111 0.23111 0.23111 + 0.23111 0.23111 0.23111 0.23111 0.23111 0.23111 0.23111 0.23111 + 0.23111 0.23111 0.23111 0.23111 + 0.09029 0.09029 0.09029 0.09029 0.09029 0.09029 0.09029 0.09029 + 0.09029 0.09029 0.09029 0.09029 0.09029 0.09029 0.09029 0.09029 + 0.09029 0.09029 0.09029 0.09029 0.09029 0.09029 0.09029 0.09029 + 0.09029 0.09029 0.09029 0.09029 0.09029 0.09029 0.09029 0.09029 + 0.09029 0.09029 0.09029 0.09029 + 0.00256 0.00256 0.00256 0.00256 0.00256 0.00256 0.00256 0.00256 + 0.00256 0.00256 0.00256 0.00256 0.00256 0.00256 0.00256 0.00256 + 0.00256 0.00256 0.00256 0.00256 0.00256 0.00256 0.00256 0.00256 + 0.00256 0.00256 0.00256 0.00256 0.00256 0.00256 0.00256 0.00256 + 0.00256 0.00256 0.00256 0.00256 + SOOT 1 ssa + 0.29033 0.29033 0.29033 0.29033 0.29033 0.29033 0.29033 0.29033 + 0.29033 0.29033 0.29033 0.29033 0.29033 0.29033 0.29033 0.29033 + 0.29033 0.29033 0.29033 0.29033 0.29033 0.29033 0.29033 0.29033 + 0.29033 0.29033 0.29033 0.29033 0.29033 0.29033 0.29033 0.29033 + 0.29033 0.29033 0.29033 0.29033 + 0.24514 0.24514 0.24514 0.24514 0.24514 0.24514 0.24514 0.24514 + 0.24514 0.24514 0.24514 0.24514 0.24514 0.24514 0.24514 0.24514 + 0.24514 0.24514 0.24514 0.24514 0.24514 0.24514 0.24514 0.24514 + 0.24514 0.24514 0.24514 0.24514 0.24514 0.24514 0.24514 0.24514 + 0.24514 0.24514 0.24514 0.24514 + 0.20805 0.20805 0.20805 0.20805 0.20805 0.20805 0.20805 0.20805 + 0.20805 0.20805 0.20805 0.20805 0.20805 0.20805 0.20805 0.20805 + 0.20805 0.20805 0.20805 0.20805 0.20805 0.20805 0.20805 0.20805 + 0.20805 0.20805 0.20805 0.20805 0.20805 0.20805 0.20805 0.20805 + 0.20805 0.20805 0.20805 0.20805 + 0.16028 0.16028 0.16028 0.16028 0.16028 0.16028 0.16028 0.16028 + 0.16028 0.16028 0.16028 0.16028 0.16028 0.16028 0.16028 0.16028 + 0.16028 0.16028 0.16028 0.16028 0.16028 0.16028 0.16028 0.16028 + 0.16028 0.16028 0.16028 0.16028 0.16028 0.16028 0.16028 0.16028 + 0.16028 0.16028 0.16028 0.16028 + 0.11072 0.11072 0.11072 0.11072 0.11072 0.11072 0.11072 0.11072 + 0.11072 0.11072 0.11072 0.11072 0.11072 0.11072 0.11072 0.11072 + 0.11072 0.11072 0.11072 0.11072 0.11072 0.11072 0.11072 0.11072 + 0.11072 0.11072 0.11072 0.11072 0.11072 0.11072 0.11072 0.11072 + 0.11072 0.11072 0.11072 0.11072 + 0.02808 0.02808 0.02808 0.02808 0.02808 0.02808 0.02808 0.02808 + 0.02808 0.02808 0.02808 0.02808 0.02808 0.02808 0.02808 0.02808 + 0.02808 0.02808 0.02808 0.02808 0.02808 0.02808 0.02808 0.02808 + 0.02808 0.02808 0.02808 0.02808 0.02808 0.02808 0.02808 0.02808 + 0.02808 0.02808 0.02808 0.02808 + 0.00019 0.00019 0.00019 0.00019 0.00019 0.00019 0.00019 0.00019 + 0.00019 0.00019 0.00019 0.00019 0.00019 0.00019 0.00019 0.00019 + 0.00019 0.00019 0.00019 0.00019 0.00019 0.00019 0.00019 0.00019 + 0.00019 0.00019 0.00019 0.00019 0.00019 0.00019 0.00019 0.00019 + 0.00019 0.00019 0.00019 0.00019 + SOOT 2 ext + 17.07566 17.07566 17.07566 17.07566 17.07566 17.07566 17.07566 17.07566 + 17.07566 17.07566 17.07566 17.07566 17.28971 17.28971 17.71600 19.20973 + 21.20762 21.67302 22.14842 22.63472 23.13284 23.90404 24.43542 24.98152 + 25.54314 26.12104 27.02001 27.64177 28.60980 29.27974 30.68176 31.79048 + 33.34959 35.87160 39.07785 48.41591 + 12.37106 12.37106 12.37106 12.37106 12.37106 12.37106 12.37106 12.37106 + 12.37106 12.37106 12.37106 12.37106 12.52116 12.52116 12.81778 13.83462 + 15.15072 15.45197 15.75811 16.06984 16.38784 16.87801 17.21449 17.55941 + 17.91336 18.27692 18.84144 19.23134 19.83785 20.25735 21.13501 21.82906 + 22.80543 24.38717 26.40318 32.32547 + 9.28480 9.28480 9.28480 9.28480 9.28480 9.28480 9.28480 9.28480 + 9.28480 9.28480 9.28480 9.28480 9.39589 9.39589 9.61413 10.34944 + 11.27463 11.48298 11.69365 11.90716 12.12406 12.45682 12.68431 12.91683 + 13.15484 13.39875 13.77662 14.03712 14.44174 14.72129 15.30560 15.76733 + 16.41663 17.46853 18.80973 22.77365 + 6.56657 6.56657 6.56657 6.56657 6.56657 6.56657 6.56657 6.56657 + 6.56657 6.56657 6.56657 6.56657 6.64430 6.64430 6.79591 7.29545 + 7.89980 8.03260 8.16581 8.29983 8.43503 8.64081 8.78049 8.92251 + 9.06721 9.21486 9.44253 9.59884 9.84077 10.00743 10.35479 10.62862 + 11.01305 11.63510 12.42601 14.77543 + 4.70828 4.70828 4.70828 4.70828 4.70828 4.70828 4.70828 4.70828 + 4.70828 4.70828 4.70828 4.70828 4.76372 4.76372 4.87098 5.21531 + 5.61170 5.69590 5.77938 5.86243 5.94531 6.06990 6.15346 6.23770 + 6.32281 6.40901 6.54076 6.63051 6.76846 6.86288 7.05842 7.21156 + 7.42544 7.76956 8.20350 9.49381 + 2.18240 2.18240 2.18240 2.18240 2.18240 2.18240 2.18240 2.18240 + 2.18240 2.18240 2.18240 2.18240 2.21140 2.21140 2.26676 2.43597 + 2.60977 2.64334 2.67544 2.70619 2.73575 2.77810 2.80518 2.83145 + 2.85701 2.88196 2.91839 2.94214 2.97713 3.00012 3.04562 3.07952 + 3.12477 3.19353 3.27341 3.49726 + 0.30928 0.30928 0.30928 0.30928 0.30928 0.30928 0.30928 0.30928 + 0.30928 0.30928 0.30928 0.30928 0.32082 0.32082 0.34409 0.42672 + 0.53363 0.55736 0.58108 0.60479 0.62851 0.66414 0.68796 0.71184 + 0.73582 0.75991 0.79630 0.82076 0.85783 0.88281 0.93353 0.97231 + 1.02513 1.10707 1.20632 1.47435 + SOOT 2 sca + 4.95749 4.95749 4.95749 4.95749 4.95749 4.95749 4.95749 4.95749 + 4.95749 4.95749 4.95749 4.95749 5.04887 5.04887 5.23835 5.98038 + 7.14630 7.44252 7.75349 8.07976 8.42193 8.96624 9.35067 9.75301 + 10.17386 10.61381 11.31083 11.80109 12.57628 13.12045 14.27706 15.20661 + 16.53274 18.71758 21.56316 30.05949 + 3.03268 3.03268 3.03268 3.03268 3.03268 3.03268 3.03268 3.03268 + 3.03268 3.03268 3.03268 3.03268 3.08888 3.08888 3.20522 3.65914 + 4.37029 4.55091 4.74055 4.93960 5.14842 5.48084 5.71581 5.96191 + 6.21954 6.48910 6.91669 7.21782 7.69465 8.02987 8.74375 9.31879 + 10.14108 11.50054 13.28035 18.65006 + 1.93167 1.93167 1.93167 1.93167 1.93167 1.93167 1.93167 1.93167 + 1.93167 1.93167 1.93167 1.93167 1.96836 1.96836 2.04424 2.33955 + 2.80118 2.91838 3.04146 3.17067 3.30626 3.52221 3.67493 3.83498 + 4.00261 4.17811 4.45673 4.65314 4.96446 5.18357 5.65084 6.02790 + 6.56802 7.46323 8.63904 12.21558 + 1.05247 1.05247 1.05247 1.05247 1.05247 1.05247 1.05247 1.05247 + 1.05247 1.05247 1.05247 1.05247 1.07317 1.07317 1.11596 1.28224 + 1.54207 1.60809 1.67746 1.75033 1.82686 1.94887 2.03525 2.12585 + 2.22084 2.32039 2.47865 2.59036 2.76768 2.89266 3.15971 3.37569 + 3.68584 4.20182 4.88226 6.97311 + 0.52130 0.52130 0.52130 0.52130 0.52130 0.52130 0.52130 0.52130 + 0.52130 0.52130 0.52130 0.52130 0.53187 0.53187 0.55369 0.63839 + 0.77080 0.80450 0.83994 0.87719 0.91636 0.97888 1.02321 1.06975 + 1.11862 1.16990 1.25154 1.30928 1.40108 1.46590 1.60471 1.71726 + 1.87933 2.15002 2.50852 3.62305 + 0.06129 0.06129 0.06129 0.06129 0.06129 0.06129 0.06129 0.06129 + 0.06129 0.06129 0.06129 0.06129 0.06271 0.06271 0.06561 0.07669 + 0.09367 0.09796 0.10247 0.10720 0.11217 0.12010 0.12573 0.13164 + 0.13785 0.14438 0.15479 0.16217 0.17394 0.18227 0.20018 0.21477 + 0.23588 0.27143 0.31883 0.47022 + 0.00006 0.00006 0.00006 0.00006 0.00006 0.00006 0.00006 0.00006 + 0.00006 0.00006 0.00006 0.00006 0.00006 0.00006 0.00006 0.00008 + 0.00010 0.00010 0.00010 0.00011 0.00011 0.00012 0.00012 0.00013 + 0.00013 0.00014 0.00015 0.00015 0.00016 0.00017 0.00018 0.00019 + 0.00020 0.00022 0.00025 0.00033 + SOOT 2 asy + 0.42162 0.42162 0.42162 0.42162 0.42162 0.42162 0.42162 0.42162 + 0.42162 0.42162 0.42162 0.42162 0.42665 0.42665 0.43643 0.46813 + 0.50371 0.51091 0.51788 0.52462 0.53115 0.54054 0.54656 0.55238 + 0.55802 0.56349 0.57137 0.57642 0.58370 0.58838 0.59730 0.60365 + 0.61169 0.62292 0.63482 0.65940 + 0.37188 0.37188 0.37188 0.37188 0.37188 0.37188 0.37188 0.37188 + 0.37188 0.37188 0.37188 0.37188 0.37646 0.37646 0.38540 0.41475 + 0.44847 0.45541 0.46217 0.46874 0.47513 0.48441 0.49039 0.49622 + 0.50189 0.50742 0.51544 0.52062 0.52814 0.53300 0.54234 0.54905 + 0.55761 0.56969 0.58271 0.61027 + 0.33357 0.33357 0.33357 0.33357 0.33357 0.33357 0.33357 0.33357 + 0.33357 0.33357 0.33357 0.33357 0.33768 0.33768 0.34574 0.37246 + 0.40371 0.41023 0.41660 0.42283 0.42892 0.43780 0.44356 0.44919 + 0.45470 0.46009 0.46796 0.47307 0.48053 0.48537 0.49475 0.50153 + 0.51024 0.52264 0.53612 0.56532 + 0.28541 0.28541 0.28541 0.28541 0.28541 0.28541 0.28541 0.28541 + 0.28541 0.28541 0.28541 0.28541 0.28893 0.28893 0.29586 0.31911 + 0.34694 0.35283 0.35863 0.36433 0.36993 0.37816 0.38353 0.38881 + 0.39401 0.39912 0.40662 0.41152 0.41871 0.42341 0.43258 0.43926 + 0.44792 0.46039 0.47407 0.50446 + 0.23111 0.23111 0.23111 0.23111 0.23111 0.23111 0.23111 0.23111 + 0.23111 0.23111 0.23111 0.23111 0.23402 0.23402 0.23980 0.25945 + 0.28357 0.28877 0.29392 0.29901 0.30404 0.31149 0.31639 0.32123 + 0.32602 0.33075 0.33774 0.34234 0.34913 0.35359 0.36234 0.36877 + 0.37717 0.38938 0.40289 0.43380 + 0.09029 0.09029 0.09029 0.09029 0.09029 0.09029 0.09029 0.09029 + 0.09029 0.09029 0.09029 0.09029 0.09154 0.09154 0.09406 0.10322 + 0.11574 0.11863 0.12155 0.12452 0.12751 0.13207 0.13514 0.13825 + 0.14138 0.14454 0.14932 0.15253 0.15739 0.16065 0.16721 0.17216 + 0.17879 0.18877 0.19988 0.22757 + 0.00256 0.00256 0.00256 0.00256 0.00256 0.00256 0.00256 0.00256 + 0.00256 0.00256 0.00256 0.00256 0.00258 0.00258 0.00261 0.00274 + 0.00296 0.00302 0.00308 0.00314 0.00321 0.00331 0.00338 0.00345 + 0.00352 0.00360 0.00371 0.00379 0.00391 0.00400 0.00417 0.00430 + 0.00449 0.00477 0.00511 0.00603 + SOOT 2 ssa + 0.29033 0.29033 0.29033 0.29033 0.29033 0.29033 0.29033 0.29033 + 0.29033 0.29033 0.29033 0.29033 0.29202 0.29202 0.29568 0.31132 + 0.33697 0.34340 0.35007 0.35696 0.36407 0.37509 0.38267 0.39041 + 0.39830 0.40633 0.41861 0.42693 0.43958 0.44811 0.46533 0.47834 + 0.49574 0.52179 0.55180 0.62086 + 0.24514 0.24514 0.24514 0.24514 0.24514 0.24514 0.24514 0.24514 + 0.24514 0.24514 0.24514 0.24514 0.24669 0.24669 0.25006 0.26449 + 0.28845 0.29452 0.30083 0.30738 0.31416 0.32473 0.33203 0.33953 + 0.34720 0.35504 0.36710 0.37532 0.38788 0.39639 0.41371 0.42690 + 0.44468 0.47158 0.50298 0.57695 + 0.20805 0.20805 0.20805 0.20805 0.20805 0.20805 0.20805 0.20805 + 0.20805 0.20805 0.20805 0.20805 0.20949 0.20949 0.21263 0.22606 + 0.24845 0.25415 0.26010 0.26628 0.27270 0.28275 0.28972 0.29690 + 0.30427 0.31183 0.32350 0.33149 0.34376 0.35211 0.36920 0.38230 + 0.40008 0.42724 0.45929 0.53639 + 0.16028 0.16028 0.16028 0.16028 0.16028 0.16028 0.16028 0.16028 + 0.16028 0.16028 0.16028 0.16028 0.16152 0.16152 0.16421 0.17576 + 0.19520 0.20020 0.20542 0.21089 0.21658 0.22554 0.23179 0.23826 + 0.24493 0.25181 0.26250 0.26986 0.28125 0.28905 0.30514 0.31760 + 0.33468 0.36113 0.39291 0.47194 + 0.11072 0.11072 0.11072 0.11072 0.11072 0.11072 0.11072 0.11072 + 0.11072 0.11072 0.11072 0.11072 0.11165 0.11165 0.11367 0.12241 + 0.13736 0.14124 0.14533 0.14963 0.15413 0.16127 0.16628 0.17150 + 0.17692 0.18254 0.19135 0.19746 0.20700 0.21360 0.22735 0.23813 + 0.25309 0.27672 0.30579 0.38162 + 0.02808 0.02808 0.02808 0.02808 0.02808 0.02808 0.02808 0.02808 + 0.02808 0.02808 0.02808 0.02808 0.02836 0.02836 0.02895 0.03148 + 0.03589 0.03706 0.03830 0.03961 0.04100 0.04323 0.04482 0.04649 + 0.04825 0.05010 0.05304 0.05512 0.05843 0.06075 0.06573 0.06974 + 0.07549 0.08499 0.09740 0.13445 + 0.00019 0.00019 0.00019 0.00019 0.00019 0.00019 0.00019 0.00019 + 0.00019 0.00019 0.00019 0.00019 0.00019 0.00019 0.00019 0.00018 + 0.00018 0.00018 0.00018 0.00018 0.00018 0.00018 0.00018 0.00018 + 0.00018 0.00018 0.00018 0.00018 0.00019 0.00019 0.00019 0.00019 + 0.00019 0.00020 0.00021 0.00022 diff --git a/parm/optics_luts_SUSO_nasa.dat b/parm/optics_luts_SUSO_nasa.dat new file mode 100644 index 000000000..fcac681bc --- /dev/null +++ b/parm/optics_luts_SUSO_nasa.dat @@ -0,0 +1,144 @@ + SUSO 1 ext + 6.71789 7.34575 7.99075 8.69091 9.46875 10.28886 10.88757 11.69475 + 12.58755 13.58692 14.57186 15.45897 16.14637 17.20462 18.43179 19.75682 + 20.87125 21.11399 21.37268 21.83684 22.12476 22.40634 22.94827 23.21259 + 23.74240 24.01264 24.57235 25.16338 26.10538 26.74188 27.61039 28.66330 + 29.51034 31.20347 33.07931 36.51160 + 4.56469 5.05605 5.59972 6.19833 6.83680 7.50620 8.03742 8.79841 + 9.62224 10.49918 11.40579 12.33402 13.05920 14.08798 15.19487 16.63693 + 18.05379 18.33612 18.62061 18.85984 19.16473 19.47312 20.09947 20.41711 + 21.06072 21.38618 22.04172 22.69888 23.68203 24.33858 25.33589 26.71131 + 27.78360 29.60982 31.73057 35.83813 + 3.14876 3.51491 3.92393 4.37623 4.86752 5.39512 5.81631 6.41614 + 7.06412 7.76499 8.52076 9.32423 9.95116 10.81829 11.73202 12.96055 + 14.29072 14.56739 14.84690 15.04713 15.32685 15.60860 16.17821 16.46629 + 17.04988 17.34579 17.94658 18.55992 19.50413 20.15041 21.14712 22.52597 + 23.58572 25.36972 27.56503 31.91403 + 1.82579 2.06308 2.32959 2.62587 2.95159 3.30674 3.59292 4.00240 + 4.44632 4.92837 5.45257 6.02159 6.47768 7.12267 7.80725 8.71914 + 9.70009 9.90532 10.11373 10.27319 10.48705 10.70418 11.14840 11.37555 + 11.83994 12.07714 12.56131 13.05802 13.82523 14.35071 15.15937 16.27657 + 17.14529 18.65638 20.58504 24.44678 + 0.92838 1.06685 1.22116 1.39201 1.58036 1.78749 1.95614 2.20038 + 2.46891 2.76416 3.08839 3.44323 3.72997 4.13989 4.58131 5.17757 + 5.82470 5.96047 6.09842 6.20188 6.34365 6.48770 6.78283 6.93399 + 7.24369 7.40232 7.72734 8.06294 8.58670 8.94968 9.51495 10.30721 + 10.92983 12.02068 13.41759 16.24252 + 0.09352 0.11136 0.13200 0.15573 0.18286 0.21368 0.23942 0.27750 + 0.32019 0.36783 0.42078 0.47945 0.52745 0.59713 0.67376 0.78014 + 0.89937 0.92486 0.95094 0.97126 0.99834 1.02603 1.08326 1.11283 + 1.17394 1.20550 1.27070 1.33875 1.44638 1.52199 1.64142 1.81240 + 1.94984 2.19729 2.52602 3.22413 + 0.13152 0.14817 0.16530 0.18291 0.20105 0.21977 0.23423 0.25411 + 0.27473 0.29617 0.31849 0.34174 0.35983 0.38488 0.41101 0.44531 + 0.48151 0.48899 0.49655 0.50211 0.50980 0.51756 0.53334 0.54136 + 0.55765 0.56593 0.58274 0.59991 0.62634 0.64442 0.67225 0.71069 + 0.74054 0.79231 0.85784 0.98808 + SUSO 1 sca + 6.71789 7.34575 7.99075 8.69091 9.46875 10.28886 10.88757 11.69475 + 12.58755 13.58692 14.57186 15.45897 16.14637 17.20462 18.43179 19.75682 + 20.87125 21.11399 21.37268 21.83684 22.12476 22.40634 22.94827 23.21259 + 23.74240 24.01264 24.57235 25.16338 26.10538 26.74188 27.61039 28.66330 + 29.51034 31.20347 33.07931 36.51160 + 4.56469 5.05605 5.59972 6.19833 6.83680 7.50620 8.03742 8.79841 + 9.62224 10.49918 11.40579 12.33402 13.05920 14.08798 15.19487 16.63693 + 18.05379 18.33612 18.62061 18.85984 19.16473 19.47312 20.09947 20.41711 + 21.06072 21.38618 22.04172 22.69888 23.68203 24.33858 25.33589 26.71131 + 27.78360 29.60982 31.73057 35.83813 + 3.14876 3.51491 3.92393 4.37623 4.86752 5.39512 5.81631 6.41614 + 7.06412 7.76499 8.52076 9.32423 9.95116 10.81829 11.73202 12.96055 + 14.29072 14.56739 14.84690 15.04713 15.32685 15.60860 16.17821 16.46629 + 17.04988 17.34579 17.94658 18.55992 19.50413 20.15041 21.14712 22.52597 + 23.58572 25.36972 27.56503 31.91403 + 1.82579 2.06308 2.32959 2.62587 2.95159 3.30674 3.59292 4.00240 + 4.44632 4.92837 5.45257 6.02159 6.47768 7.12267 7.80725 8.71914 + 9.70009 9.90532 10.11373 10.27319 10.48705 10.70418 11.14840 11.37555 + 11.83994 12.07714 12.56131 13.05802 13.82523 14.35071 15.15937 16.27657 + 17.14529 18.65638 20.58504 24.44678 + 0.92838 1.06685 1.22116 1.39201 1.58036 1.78749 1.95614 2.20038 + 2.46891 2.76416 3.08839 3.44323 3.72997 4.13989 4.58131 5.17757 + 5.82470 5.96047 6.09842 6.20188 6.34365 6.48770 6.78283 6.93399 + 7.24369 7.40232 7.72734 8.06294 8.58670 8.94968 9.51495 10.30721 + 10.92983 12.02068 13.41749 16.24240 + 0.09183 0.10960 0.13016 0.15380 0.18083 0.21156 0.23722 0.27519 + 0.31776 0.36527 0.41809 0.47662 0.52451 0.59403 0.67050 0.77666 + 0.89565 0.92110 0.94712 0.96741 0.99444 1.02208 1.07920 1.10872 + 1.16972 1.20122 1.26630 1.33423 1.44169 1.51717 1.63640 1.80711 + 1.94434 2.19142 2.51968 3.21685 + 0.00024 0.00026 0.00029 0.00032 0.00034 0.00037 0.00040 0.00043 + 0.00047 0.00051 0.00055 0.00060 0.00063 0.00068 0.00074 0.00082 + 0.00091 0.00093 0.00094 0.00096 0.00098 0.00100 0.00104 0.00106 + 0.00110 0.00113 0.00117 0.00122 0.00130 0.00135 0.00144 0.00156 + 0.00166 0.00184 0.00208 0.00260 + SUSO 1 asy + 0.73442 0.74363 0.75072 0.75644 0.76211 0.76813 0.77198 0.77519 + 0.77734 0.78012 0.78421 0.78667 0.78688 0.78638 0.78772 0.79193 + 0.79150 0.79087 0.79014 0.79018 0.79041 0.79071 0.79131 0.79148 + 0.79146 0.79127 0.79064 0.78983 0.78880 0.78878 0.78986 0.79011 + 0.78866 0.78513 0.78748 0.78044 + 0.71367 0.72361 0.73269 0.74114 0.74865 0.75515 0.75966 0.76545 + 0.77097 0.77606 0.78043 0.78390 0.78613 0.78904 0.79214 0.79609 + 0.79898 0.79936 0.79969 0.79965 0.80003 0.80041 0.80114 0.80150 + 0.80220 0.80257 0.80332 0.80409 0.80511 0.80561 0.80609 0.80642 + 0.80669 0.80752 0.80824 0.80691 + 0.67090 0.68247 0.69360 0.70411 0.71374 0.72250 0.72861 0.73623 + 0.74327 0.74979 0.75584 0.76133 0.76504 0.76954 0.77381 0.77904 + 0.78405 0.78500 0.78592 0.78647 0.78731 0.78812 0.78963 0.79034 + 0.79170 0.79234 0.79359 0.79478 0.79650 0.79761 0.79925 0.80146 + 0.80308 0.80534 0.80724 0.81015 + 0.59425 0.61000 0.62506 0.63900 0.65163 0.66299 0.67076 0.68032 + 0.68918 0.69757 0.70563 0.71337 0.71890 0.72584 0.73227 0.73975 + 0.74672 0.74806 0.74938 0.75033 0.75161 0.75287 0.75533 0.75653 + 0.75887 0.76002 0.76224 0.76437 0.76740 0.76932 0.77205 0.77548 + 0.77794 0.78187 0.78640 0.79387 + 0.49908 0.51627 0.53162 0.54560 0.55865 0.57115 0.58033 0.59246 + 0.60452 0.61644 0.62809 0.63924 0.64718 0.65711 0.66624 0.67662 + 0.68601 0.68779 0.68954 0.69080 0.69250 0.69419 0.69750 0.69912 + 0.70231 0.70388 0.70697 0.71001 0.71445 0.71735 0.72157 0.72697 + 0.73085 0.73698 0.74385 0.75527 + 0.14193 0.15301 0.16460 0.17668 0.18925 0.20232 0.21244 0.22635 + 0.24072 0.25552 0.27073 0.28629 0.29817 0.31424 0.33051 0.35098 + 0.37145 0.37552 0.37959 0.38293 0.38695 0.39096 0.39891 0.40285 + 0.41068 0.41455 0.42221 0.42976 0.44081 0.44800 0.45847 0.47184 + 0.48138 0.49633 0.51273 0.53874 + 0.00417 0.00433 0.00451 0.00471 0.00492 0.00515 0.00533 0.00559 + 0.00586 0.00614 0.00643 0.00674 0.00698 0.00730 0.00764 0.00808 + 0.00854 0.00863 0.00872 0.00882 0.00891 0.00901 0.00920 0.00930 + 0.00950 0.00960 0.00980 0.01000 0.01031 0.01052 0.01084 0.01128 + 0.01161 0.01218 0.01288 0.01423 + SUSO 1 ssa + 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 + 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 + 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 + 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 + 1.00000 1.00000 1.00000 1.00000 + 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 + 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 + 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 + 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 + 1.00000 1.00000 1.00000 1.00000 + 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 + 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 + 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 + 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 + 1.00000 1.00000 1.00000 1.00000 + 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 + 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 + 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 + 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 + 1.00000 1.00000 1.00000 1.00000 + 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 + 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 + 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 + 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 + 1.00000 1.00000 0.99999 0.99999 + 0.98197 0.98416 0.98601 0.98758 0.98891 0.99005 0.99079 0.99166 + 0.99241 0.99305 0.99361 0.99410 0.99443 0.99482 0.99516 0.99554 + 0.99587 0.99593 0.99599 0.99604 0.99609 0.99615 0.99625 0.99630 + 0.99640 0.99645 0.99654 0.99663 0.99675 0.99683 0.99694 0.99708 + 0.99718 0.99733 0.99749 0.99774 + 0.00180 0.00177 0.00174 0.00173 0.00171 0.00170 0.00170 0.00170 + 0.00171 0.00171 0.00173 0.00174 0.00176 0.00178 0.00180 0.00184 + 0.00188 0.00189 0.00190 0.00191 0.00192 0.00193 0.00195 0.00196 + 0.00198 0.00199 0.00201 0.00204 0.00208 0.00210 0.00214 0.00220 + 0.00225 0.00232 0.00243 0.00263 diff --git a/parm/optics_luts_WASO_nasa.dat b/parm/optics_luts_WASO_nasa.dat new file mode 100644 index 000000000..13ecd5258 --- /dev/null +++ b/parm/optics_luts_WASO_nasa.dat @@ -0,0 +1,288 @@ + WASO 1 ext + 5.79780 5.79780 5.79780 5.79780 5.79780 5.79780 5.79780 5.79780 + 5.79780 5.79780 5.79780 5.79780 5.79780 5.79780 5.79780 5.79780 + 5.79780 5.79780 5.79780 5.79780 5.79780 5.79780 5.79780 5.79780 + 5.79780 5.79780 5.79780 5.79780 5.79780 5.79780 5.79780 5.79780 + 5.79780 5.79780 5.79780 5.79780 + 3.93101 3.93101 3.93101 3.93101 3.93101 3.93101 3.93101 3.93101 + 3.93101 3.93101 3.93101 3.93101 3.93101 3.93101 3.93101 3.93101 + 3.93101 3.93101 3.93101 3.93101 3.93101 3.93101 3.93101 3.93101 + 3.93101 3.93101 3.93101 3.93101 3.93101 3.93101 3.93101 3.93101 + 3.93101 3.93101 3.93101 3.93101 + 2.67214 2.67214 2.67214 2.67214 2.67214 2.67214 2.67214 2.67214 + 2.67214 2.67214 2.67214 2.67214 2.67214 2.67214 2.67214 2.67214 + 2.67214 2.67214 2.67214 2.67214 2.67214 2.67214 2.67214 2.67214 + 2.67214 2.67214 2.67214 2.67214 2.67214 2.67214 2.67214 2.67214 + 2.67214 2.67214 2.67214 2.67214 + 1.54060 1.54060 1.54060 1.54060 1.54060 1.54060 1.54060 1.54060 + 1.54060 1.54060 1.54060 1.54060 1.54060 1.54060 1.54060 1.54060 + 1.54060 1.54060 1.54060 1.54060 1.54060 1.54060 1.54060 1.54060 + 1.54060 1.54060 1.54060 1.54060 1.54060 1.54060 1.54060 1.54060 + 1.54060 1.54060 1.54060 1.54060 + 0.80126 0.80126 0.80126 0.80126 0.80126 0.80126 0.80126 0.80126 + 0.80126 0.80126 0.80126 0.80126 0.80126 0.80126 0.80126 0.80126 + 0.80126 0.80126 0.80126 0.80126 0.80126 0.80126 0.80126 0.80126 + 0.80126 0.80126 0.80126 0.80126 0.80126 0.80126 0.80126 0.80126 + 0.80126 0.80126 0.80126 0.80126 + 0.11946 0.11946 0.11946 0.11946 0.11946 0.11946 0.11946 0.11946 + 0.11946 0.11946 0.11946 0.11946 0.11946 0.11946 0.11946 0.11946 + 0.11946 0.11946 0.11946 0.11946 0.11946 0.11946 0.11946 0.11946 + 0.11946 0.11946 0.11946 0.11946 0.11946 0.11946 0.11946 0.11946 + 0.11946 0.11946 0.11946 0.11946 + 0.01885 0.01885 0.01885 0.01885 0.01885 0.01885 0.01885 0.01885 + 0.01885 0.01885 0.01885 0.01885 0.01885 0.01885 0.01885 0.01885 + 0.01885 0.01885 0.01885 0.01885 0.01885 0.01885 0.01885 0.01885 + 0.01885 0.01885 0.01885 0.01885 0.01885 0.01885 0.01885 0.01885 + 0.01885 0.01885 0.01885 0.01885 + WASO 1 sca + 5.63921 5.63921 5.63921 5.63921 5.63921 5.63921 5.63921 5.63921 + 5.63921 5.63921 5.63921 5.63921 5.63921 5.63921 5.63921 5.63921 + 5.63921 5.63921 5.63921 5.63921 5.63921 5.63921 5.63921 5.63921 + 5.63921 5.63921 5.63921 5.63921 5.63921 5.63921 5.63921 5.63921 + 5.63921 5.63921 5.63921 5.63921 + 3.81805 3.81805 3.81805 3.81805 3.81805 3.81805 3.81805 3.81805 + 3.81805 3.81805 3.81805 3.81805 3.81805 3.81805 3.81805 3.81805 + 3.81805 3.81805 3.81805 3.81805 3.81805 3.81805 3.81805 3.81805 + 3.81805 3.81805 3.81805 3.81805 3.81805 3.81805 3.81805 3.81805 + 3.81805 3.81805 3.81805 3.81805 + 2.57014 2.57014 2.57014 2.57014 2.57014 2.57014 2.57014 2.57014 + 2.57014 2.57014 2.57014 2.57014 2.57014 2.57014 2.57014 2.57014 + 2.57014 2.57014 2.57014 2.57014 2.57014 2.57014 2.57014 2.57014 + 2.57014 2.57014 2.57014 2.57014 2.57014 2.57014 2.57014 2.57014 + 2.57014 2.57014 2.57014 2.57014 + 1.45668 1.45668 1.45668 1.45668 1.45668 1.45668 1.45668 1.45668 + 1.45668 1.45668 1.45668 1.45668 1.45668 1.45668 1.45668 1.45668 + 1.45668 1.45668 1.45668 1.45668 1.45668 1.45668 1.45668 1.45668 + 1.45668 1.45668 1.45668 1.45668 1.45668 1.45668 1.45668 1.45668 + 1.45668 1.45668 1.45668 1.45668 + 0.69387 0.69387 0.69387 0.69387 0.69387 0.69387 0.69387 0.69387 + 0.69387 0.69387 0.69387 0.69387 0.69387 0.69387 0.69387 0.69387 + 0.69387 0.69387 0.69387 0.69387 0.69387 0.69387 0.69387 0.69387 + 0.69387 0.69387 0.69387 0.69387 0.69387 0.69387 0.69387 0.69387 + 0.69387 0.69387 0.69387 0.69387 + 0.05918 0.05918 0.05918 0.05918 0.05918 0.05918 0.05918 0.05918 + 0.05918 0.05918 0.05918 0.05918 0.05918 0.05918 0.05918 0.05918 + 0.05918 0.05918 0.05918 0.05918 0.05918 0.05918 0.05918 0.05918 + 0.05918 0.05918 0.05918 0.05918 0.05918 0.05918 0.05918 0.05918 + 0.05918 0.05918 0.05918 0.05918 + 0.00006 0.00006 0.00006 0.00006 0.00006 0.00006 0.00006 0.00006 + 0.00006 0.00006 0.00006 0.00006 0.00006 0.00006 0.00006 0.00006 + 0.00006 0.00006 0.00006 0.00006 0.00006 0.00006 0.00006 0.00006 + 0.00006 0.00006 0.00006 0.00006 0.00006 0.00006 0.00006 0.00006 + 0.00006 0.00006 0.00006 0.00006 + WASO 1 asy + 0.64569 0.64569 0.64569 0.64569 0.64569 0.64569 0.64569 0.64569 + 0.64569 0.64569 0.64569 0.64569 0.64569 0.64569 0.64569 0.64569 + 0.64569 0.64569 0.64569 0.64569 0.64569 0.64569 0.64569 0.64569 + 0.64569 0.64569 0.64569 0.64569 0.64569 0.64569 0.64569 0.64569 + 0.64569 0.64569 0.64569 0.64569 + 0.61683 0.61683 0.61683 0.61683 0.61683 0.61683 0.61683 0.61683 + 0.61683 0.61683 0.61683 0.61683 0.61683 0.61683 0.61683 0.61683 + 0.61683 0.61683 0.61683 0.61683 0.61683 0.61683 0.61683 0.61683 + 0.61683 0.61683 0.61683 0.61683 0.61683 0.61683 0.61683 0.61683 + 0.61683 0.61683 0.61683 0.61683 + 0.57928 0.57928 0.57928 0.57928 0.57928 0.57928 0.57928 0.57928 + 0.57928 0.57928 0.57928 0.57928 0.57928 0.57928 0.57928 0.57928 + 0.57928 0.57928 0.57928 0.57928 0.57928 0.57928 0.57928 0.57928 + 0.57928 0.57928 0.57928 0.57928 0.57928 0.57928 0.57928 0.57928 + 0.57928 0.57928 0.57928 0.57928 + 0.51512 0.51512 0.51512 0.51512 0.51512 0.51512 0.51512 0.51512 + 0.51512 0.51512 0.51512 0.51512 0.51512 0.51512 0.51512 0.51512 + 0.51512 0.51512 0.51512 0.51512 0.51512 0.51512 0.51512 0.51512 + 0.51512 0.51512 0.51512 0.51512 0.51512 0.51512 0.51512 0.51512 + 0.51512 0.51512 0.51512 0.51512 + 0.42834 0.42834 0.42834 0.42834 0.42834 0.42834 0.42834 0.42834 + 0.42834 0.42834 0.42834 0.42834 0.42834 0.42834 0.42834 0.42834 + 0.42834 0.42834 0.42834 0.42834 0.42834 0.42834 0.42834 0.42834 + 0.42834 0.42834 0.42834 0.42834 0.42834 0.42834 0.42834 0.42834 + 0.42834 0.42834 0.42834 0.42834 + 0.12606 0.12606 0.12606 0.12606 0.12606 0.12606 0.12606 0.12606 + 0.12606 0.12606 0.12606 0.12606 0.12606 0.12606 0.12606 0.12606 + 0.12606 0.12606 0.12606 0.12606 0.12606 0.12606 0.12606 0.12606 + 0.12606 0.12606 0.12606 0.12606 0.12606 0.12606 0.12606 0.12606 + 0.12606 0.12606 0.12606 0.12606 + 0.00328 0.00328 0.00328 0.00328 0.00328 0.00328 0.00328 0.00328 + 0.00328 0.00328 0.00328 0.00328 0.00328 0.00328 0.00328 0.00328 + 0.00328 0.00328 0.00328 0.00328 0.00328 0.00328 0.00328 0.00328 + 0.00328 0.00328 0.00328 0.00328 0.00328 0.00328 0.00328 0.00328 + 0.00328 0.00328 0.00328 0.00328 + WASO 1 ssa + 0.97265 0.97265 0.97265 0.97265 0.97265 0.97265 0.97265 0.97265 + 0.97265 0.97265 0.97265 0.97265 0.97265 0.97265 0.97265 0.97265 + 0.97265 0.97265 0.97265 0.97265 0.97265 0.97265 0.97265 0.97265 + 0.97265 0.97265 0.97265 0.97265 0.97265 0.97265 0.97265 0.97265 + 0.97265 0.97265 0.97265 0.97265 + 0.97126 0.97126 0.97126 0.97126 0.97126 0.97126 0.97126 0.97126 + 0.97126 0.97126 0.97126 0.97126 0.97126 0.97126 0.97126 0.97126 + 0.97126 0.97126 0.97126 0.97126 0.97126 0.97126 0.97126 0.97126 + 0.97126 0.97126 0.97126 0.97126 0.97126 0.97126 0.97126 0.97126 + 0.97126 0.97126 0.97126 0.97126 + 0.96183 0.96183 0.96183 0.96183 0.96183 0.96183 0.96183 0.96183 + 0.96183 0.96183 0.96183 0.96183 0.96183 0.96183 0.96183 0.96183 + 0.96183 0.96183 0.96183 0.96183 0.96183 0.96183 0.96183 0.96183 + 0.96183 0.96183 0.96183 0.96183 0.96183 0.96183 0.96183 0.96183 + 0.96183 0.96183 0.96183 0.96183 + 0.94552 0.94552 0.94552 0.94552 0.94552 0.94552 0.94552 0.94552 + 0.94552 0.94552 0.94552 0.94552 0.94552 0.94552 0.94552 0.94552 + 0.94552 0.94552 0.94552 0.94552 0.94552 0.94552 0.94552 0.94552 + 0.94552 0.94552 0.94552 0.94552 0.94552 0.94552 0.94552 0.94552 + 0.94552 0.94552 0.94552 0.94552 + 0.86597 0.86597 0.86597 0.86597 0.86597 0.86597 0.86597 0.86597 + 0.86597 0.86597 0.86597 0.86597 0.86597 0.86597 0.86597 0.86597 + 0.86597 0.86597 0.86597 0.86597 0.86597 0.86597 0.86597 0.86597 + 0.86597 0.86597 0.86597 0.86597 0.86597 0.86597 0.86597 0.86597 + 0.86597 0.86597 0.86597 0.86597 + 0.49542 0.49542 0.49542 0.49542 0.49542 0.49542 0.49542 0.49542 + 0.49542 0.49542 0.49542 0.49542 0.49542 0.49542 0.49542 0.49542 + 0.49542 0.49542 0.49542 0.49542 0.49542 0.49542 0.49542 0.49542 + 0.49542 0.49542 0.49542 0.49542 0.49542 0.49542 0.49542 0.49542 + 0.49542 0.49542 0.49542 0.49542 + 0.00317 0.00317 0.00317 0.00317 0.00317 0.00317 0.00317 0.00317 + 0.00317 0.00317 0.00317 0.00317 0.00317 0.00317 0.00317 0.00317 + 0.00317 0.00317 0.00317 0.00317 0.00317 0.00317 0.00317 0.00317 + 0.00317 0.00317 0.00317 0.00317 0.00317 0.00317 0.00317 0.00317 + 0.00317 0.00317 0.00317 0.00317 + WASO 2 ext + 5.79780 6.03943 6.42109 6.69193 6.97718 7.43097 7.74879 8.23879 + 8.57185 8.91404 9.45341 9.83412 10.44030 11.08576 11.52751 12.63415 + 13.81265 14.32452 14.59114 15.14595 15.43243 16.01248 16.58408 17.14057 + 17.69189 18.53733 19.43839 20.43587 21.74418 23.46807 25.32035 27.97857 + 31.69700 36.51280 44.90171 60.20667 + 3.93101 4.10329 4.37894 4.57256 4.77283 5.08581 5.30439 5.65069 + 5.89536 6.15151 6.55679 6.84072 7.28704 7.75659 8.08113 8.93348 + 9.85897 10.25348 10.45627 10.87291 11.08662 11.52400 11.97286 12.43059 + 12.89527 13.60642 14.34243 15.07664 16.16391 17.59593 19.09815 21.33319 + 24.47980 28.62759 35.87561 49.25817 + 2.67214 2.79269 2.98523 3.12118 3.26312 3.48759 3.64543 3.89545 + 4.07152 4.25540 4.54640 4.75096 5.07462 5.41971 5.66200 6.30830 + 7.00749 7.30238 7.45345 7.76343 7.92255 8.24955 8.58863 8.94003 + 9.30374 9.87178 10.46516 11.02628 11.87784 13.00796 14.21529 16.04385 + 18.61548 22.09383 28.26839 40.01330 + 1.54060 1.61469 1.73318 1.81718 1.90530 2.04549 2.14449 2.30172 + 2.41263 2.52861 2.71259 2.84225 3.04793 3.26788 3.42287 3.84098 + 4.30353 4.50090 4.60221 4.81015 4.91680 5.13560 5.36195 5.59613 + 5.83847 6.21790 6.61718 7.00296 7.59322 8.38552 9.23771 10.53153 + 12.37956 14.95231 19.60971 28.85583 + 0.80126 0.84182 0.90665 0.95268 1.00109 1.07839 1.13323 1.22076 + 1.28282 1.34802 1.45203 1.52574 1.64323 1.76950 1.85879 2.10078 + 2.37076 2.48686 2.54668 2.66992 2.73336 2.86392 2.99950 3.14020 + 3.28615 3.51521 3.75690 3.98987 4.34953 4.83573 5.36514 6.18255 + 7.36849 9.03479 12.13728 18.52812 + 0.11946 0.12473 0.13322 0.13930 0.14575 0.15615 0.16360 0.17561 + 0.18421 0.19331 0.20795 0.21840 0.23517 0.25335 0.26629 0.30173 + 0.34192 0.35944 0.36852 0.38736 0.39713 0.41737 0.43858 0.46082 + 0.48410 0.52110 0.56071 0.59931 0.65994 0.74353 0.83653 0.98402 + 1.20650 1.53463 2.17976 3.61102 + 0.01885 0.02288 0.02946 0.03420 0.03921 0.04725 0.05295 0.06202 + 0.06840 0.07507 0.08558 0.09293 0.10449 0.11668 0.12516 0.14762 + 0.17191 0.18215 0.18739 0.19808 0.20354 0.21470 0.22617 0.23796 + 0.25006 0.26882 0.28832 0.30741 0.33548 0.37250 0.41173 0.47049 + 0.55283 0.66435 0.86170 1.24307 + WASO 2 sca + 5.63921 5.88162 6.26400 6.53499 6.82021 7.27383 7.59164 8.08212 + 8.41573 8.75838 9.29803 9.67863 10.28427 10.92912 11.37080 12.47857 + 13.65736 14.16880 14.43507 14.98906 15.27513 15.85467 16.42641 16.98355 + 17.53560 18.38175 19.28263 20.27897 21.58752 23.31114 25.16248 27.82098 + 31.53811 36.35453 44.74257 60.04543 + 3.81805 3.99028 4.26587 4.45952 4.65990 4.97310 5.19179 5.53811 + 5.78271 6.03873 6.44379 6.72755 7.17363 7.64301 7.96750 8.81983 + 9.74510 10.13941 10.34208 10.75847 10.97205 11.40917 11.85784 12.31545 + 12.78011 13.49130 14.22729 14.96146 16.04839 17.48001 18.98199 21.21660 + 24.36235 28.50974 35.75671 49.13794 + 2.57014 2.69049 2.88276 3.01857 3.16038 3.38469 3.54241 3.79224 + 3.96815 4.15187 4.44260 4.64695 4.97028 5.31502 5.55706 6.20288 + 6.90174 7.19651 7.34751 7.65733 7.81636 8.14316 8.48201 8.83317 + 9.19662 9.76429 10.35734 10.91872 11.76998 12.89970 14.10660 15.93444 + 18.50537 21.98285 28.15617 39.89931 + 1.45668 1.53039 1.64835 1.73203 1.81985 1.95960 2.05833 2.21517 + 2.32581 2.44154 2.62514 2.75454 2.95984 3.17938 3.33410 3.75152 + 4.21345 4.41058 4.51179 4.71951 4.82606 5.04465 5.27079 5.50477 + 5.74689 6.12599 6.52494 6.91074 7.50055 8.29230 9.14400 10.43719 + 12.28443 14.85611 19.51216 28.75619 + 0.69387 0.73371 0.79753 0.84293 0.89074 0.96717 1.02145 1.10817 + 1.16971 1.23439 1.33763 1.41083 1.52757 1.65310 1.74190 1.98271 + 2.25157 2.36724 2.42685 2.54968 2.61292 2.74309 2.87828 3.01860 + 3.16418 3.39271 3.63386 3.86680 4.22576 4.71108 5.23962 6.05586 + 7.24042 8.90513 12.00517 18.39270 + 0.05918 0.06393 0.07169 0.07732 0.08333 0.09310 0.10016 0.11160 + 0.11983 0.12857 0.14268 0.15280 0.16908 0.18678 0.19941 0.23408 + 0.27353 0.29075 0.29969 0.31823 0.32785 0.34780 0.36872 0.39066 + 0.41366 0.45021 0.48938 0.52782 0.58786 0.67070 0.76294 0.90935 + 1.13042 1.45679 2.09916 3.52580 + 0.00006 0.00006 0.00007 0.00007 0.00007 0.00008 0.00008 0.00009 + 0.00009 0.00009 0.00010 0.00010 0.00011 0.00012 0.00013 0.00014 + 0.00016 0.00016 0.00017 0.00018 0.00018 0.00019 0.00020 0.00021 + 0.00022 0.00024 0.00025 0.00027 0.00030 0.00034 0.00038 0.00045 + 0.00056 0.00073 0.00108 0.00196 + WASO 2 asy + 0.64569 0.65180 0.66003 0.66514 0.67011 0.67741 0.68219 0.68913 + 0.69328 0.69699 0.70194 0.70501 0.70947 0.71408 0.71729 0.72442 + 0.72936 0.73105 0.73189 0.73367 0.73467 0.73696 0.73945 0.74173 + 0.74355 0.74545 0.74668 0.74899 0.75176 0.75429 0.75653 0.76053 + 0.76301 0.76787 0.77292 0.77667 + 0.61683 0.62310 0.63229 0.63817 0.64375 0.65148 0.65627 0.66311 + 0.66751 0.67181 0.67803 0.68200 0.68770 0.69311 0.69652 0.70424 + 0.71107 0.71368 0.71496 0.71753 0.71880 0.72133 0.72383 0.72625 + 0.72852 0.73159 0.73428 0.73677 0.74021 0.74430 0.74810 0.75250 + 0.75767 0.76286 0.76952 0.77615 + 0.57928 0.58582 0.59534 0.60141 0.60725 0.61558 0.62087 0.62847 + 0.63334 0.63806 0.64484 0.64918 0.65547 0.66153 0.66546 0.67478 + 0.68315 0.68626 0.68778 0.69075 0.69222 0.69512 0.69798 0.70080 + 0.70356 0.70759 0.71142 0.71470 0.71910 0.72419 0.72893 0.73518 + 0.74250 0.74970 0.75925 0.77002 + 0.51512 0.52219 0.53242 0.53897 0.54530 0.55440 0.56020 0.56856 + 0.57390 0.57909 0.58661 0.59147 0.59859 0.60554 0.61009 0.62115 + 0.63162 0.63559 0.63753 0.64133 0.64318 0.64681 0.65034 0.65378 + 0.65715 0.66205 0.66677 0.67097 0.67682 0.68374 0.69018 0.69844 + 0.70809 0.71885 0.73265 0.74976 + 0.42834 0.43485 0.44442 0.45068 0.45685 0.46599 0.47201 0.48097 + 0.48691 0.49282 0.50164 0.50750 0.51623 0.52486 0.53053 0.54433 + 0.55738 0.56236 0.56479 0.56955 0.57187 0.57641 0.58082 0.58510 + 0.58925 0.59526 0.60104 0.60613 0.61334 0.62200 0.63031 0.64131 + 0.65432 0.66858 0.68782 0.71206 + 0.12606 0.13054 0.13744 0.14217 0.14700 0.15442 0.15949 0.16728 + 0.17258 0.17797 0.18622 0.19183 0.20040 0.20915 0.21508 0.23019 + 0.24570 0.25199 0.25516 0.26152 0.26471 0.27112 0.27756 0.28402 + 0.29049 0.30020 0.30991 0.31871 0.33143 0.34705 0.36227 0.38266 + 0.40702 0.43367 0.46867 0.51450 + 0.00328 0.00335 0.00348 0.00357 0.00366 0.00380 0.00390 0.00406 + 0.00416 0.00427 0.00444 0.00456 0.00473 0.00492 0.00504 0.00537 + 0.00571 0.00585 0.00592 0.00606 0.00613 0.00628 0.00643 0.00658 + 0.00674 0.00697 0.00721 0.00744 0.00778 0.00821 0.00865 0.00929 + 0.01015 0.01126 0.01311 0.01634 + WASO 2 ssa + 0.97265 0.97387 0.97554 0.97655 0.97750 0.97885 0.97972 0.98098 + 0.98179 0.98254 0.98356 0.98419 0.98506 0.98587 0.98641 0.98769 + 0.98876 0.98913 0.98930 0.98964 0.98981 0.99014 0.99049 0.99084 + 0.99117 0.99161 0.99199 0.99232 0.99280 0.99331 0.99377 0.99437 + 0.99499 0.99567 0.99646 0.99732 + 0.97126 0.97246 0.97418 0.97528 0.97634 0.97784 0.97877 0.98008 + 0.98089 0.98167 0.98277 0.98346 0.98444 0.98536 0.98594 0.98728 + 0.98845 0.98887 0.98908 0.98947 0.98967 0.99004 0.99039 0.99074 + 0.99107 0.99154 0.99197 0.99236 0.99285 0.99341 0.99392 0.99453 + 0.99520 0.99588 0.99669 0.99756 + 0.96183 0.96341 0.96568 0.96712 0.96852 0.97049 0.97174 0.97350 + 0.97461 0.97567 0.97717 0.97811 0.97944 0.98068 0.98147 0.98329 + 0.98491 0.98550 0.98579 0.98633 0.98660 0.98710 0.98759 0.98805 + 0.98849 0.98911 0.98970 0.99024 0.99092 0.99168 0.99235 0.99318 + 0.99409 0.99498 0.99603 0.99715 + 0.94552 0.94779 0.95106 0.95314 0.95515 0.95801 0.95982 0.96240 + 0.96402 0.96557 0.96776 0.96914 0.97110 0.97292 0.97406 0.97671 + 0.97907 0.97993 0.98035 0.98116 0.98154 0.98229 0.98300 0.98367 + 0.98431 0.98522 0.98606 0.98683 0.98780 0.98888 0.98986 0.99104 + 0.99232 0.99357 0.99503 0.99655 + 0.86597 0.87158 0.87965 0.88480 0.88977 0.89687 0.90136 0.90777 + 0.91182 0.91570 0.92121 0.92469 0.92961 0.93422 0.93711 0.94379 + 0.94972 0.95190 0.95295 0.95496 0.95594 0.95781 0.95959 0.96128 + 0.96289 0.96515 0.96725 0.96915 0.97154 0.97422 0.97660 0.97951 + 0.98262 0.98565 0.98912 0.99269 + 0.49542 0.51259 0.53818 0.55506 0.57173 0.59625 0.61220 0.63546 + 0.65048 0.66508 0.68615 0.69963 0.71896 0.73724 0.74883 0.77579 + 0.79997 0.80889 0.81321 0.82153 0.82555 0.83331 0.84071 0.84776 + 0.85448 0.86396 0.87278 0.88072 0.89078 0.90205 0.91203 0.92412 + 0.93694 0.94928 0.96302 0.97640 + 0.00317 0.00273 0.00227 0.00204 0.00186 0.00164 0.00153 0.00139 + 0.00132 0.00125 0.00117 0.00113 0.00107 0.00103 0.00100 0.00095 + 0.00092 0.00090 0.00090 0.00089 0.00089 0.00088 0.00088 0.00088 + 0.00088 0.00088 0.00088 0.00088 0.00089 0.00090 0.00092 0.00096 + 0.00101 0.00109 0.00125 0.00157 diff --git a/parm/params_grib2_tbl_new b/parm/params_grib2_tbl_new index 07db84e1e..514fc5fa9 100755 --- a/parm/params_grib2_tbl_new +++ b/parm/params_grib2_tbl_new @@ -294,6 +294,7 @@ 0 7 204 1 EFHL 0 3 222 1 EFSH 0 7 9 0 EHLX + 2 0 237 1 EIWATER 4 2 1 0 ELCDEN 4 0 1 0 ELECTMP 10 3 194 1 ELEV @@ -461,6 +462,8 @@ 10 0 43 0 KSSEDW 0 7 2 0 KX 0 7 198 1 LAI + 2 0 234 1 LAKEFRC + 2 0 233 1 LANDFRC 1 2 8 0 LANDIL 2 0 218 1 LANDN 2 0 8 0 LANDU @@ -642,6 +645,7 @@ 0 14 200 1 OZMAX1 0 14 201 1 OZMAX8 10 3 196 1 P2OMLT + 2 0 235 1 PAHFLX 3 3 2 0 PBINFRC 3 3 1 0 PBLIFRC 0 19 12 0 PBLREG @@ -658,6 +662,7 @@ 0 1 200 1 PEVPR 0 4 10 0 PHOTAR 3 0 8 0 PIXST + 2 0 238 1 PLANTTR 0 7 0 0 PLI 0 3 200 1 PLPL 4 2 0 0 PLSMDEN @@ -807,6 +812,16 @@ 3 192 36 0 SBTA177 3 192 37 0 SBTA178 3 192 38 0 SBTA179 + 3 192 79 0 SBTA1810 + 3 192 80 0 SBTA1811 + 3 192 81 0 SBTA1812 + 3 192 82 0 SBTA1813 + 3 192 83 0 SBTA1814 + 3 192 84 0 SBTA1815 + 3 192 85 0 SBTA1816 + 3 192 76 0 SBTA187 + 3 192 77 0 SBTA188 + 3 192 78 0 SBTA189 3 192 55 0 SBTAGR10 3 192 56 0 SBTAGR11 3 192 57 0 SBTAGR12 @@ -817,6 +832,16 @@ 3 192 52 0 SBTAGR7 3 192 53 0 SBTAGR8 3 192 54 0 SBTAGR9 + 3 192 69 0 SBTAHI10 + 3 192 70 0 SBTAHI11 + 3 192 71 0 SBTAHI12 + 3 192 72 0 SBTAHI13 + 3 192 73 0 SBTAHI14 + 3 192 74 0 SBTAHI15 + 3 192 75 0 SBTAHI16 + 3 192 66 0 SBTAHI7 + 3 192 67 0 SBTAHI8 + 3 192 68 0 SBTAHI9 3 0 2 0 SBTMP 0 7 210 1 SCCP 4 2 10 0 SCINT @@ -911,9 +936,9 @@ 2 3 5 0 SOILL 2 3 192 1 SOILL 2 3 19 0 SOILMOI - 2 0 3 0 SOILM 2 0 22 0 SOILM 2 3 15 0 SOILP + 2 0 239 1 SOILSE 2 3 18 0 SOILTMP 2 0 38 0 SOILVIC 2 0 192 1 SOILW @@ -947,6 +972,10 @@ 0 3 22 0 SSGSO 10 3 195 1 SSHG 3 5 2 0 SSKSSTMP + 3 192 62 0 SSMS1715 + 3 192 63 0 SSMS1716 + 3 192 64 0 SSMS1717 + 3 192 65 0 SSMS1718 0 1 86 0 SSNOWW 1 0 6 0 SSRUN 1 0 193 1 SSRUN @@ -1197,6 +1226,7 @@ 0 2 192 1 VWSH 10 4 17 0 WATDENA 10 4 16 0 WATERDEN + 2 0 236 1 WATERSA 10 4 20 0 WATPDENA 10 4 19 0 WATPDEN 10 4 18 0 WATPTEMP diff --git a/parm/params_grib2_tbl_new.text b/parm/params_grib2_tbl_new.text index bb1ac971b..eef62d2dd 100755 --- a/parm/params_grib2_tbl_new.text +++ b/parm/params_grib2_tbl_new.text @@ -953,7 +953,7 @@ 2 0 0 0 LAND 2 0 1 0 SFCR 2 0 2 0 TSOIL - 2 0 3 0 SOILM +! 2 0 3 0 SOILM 2 0 4 0 VEG 2 0 5 0 WATR 2 0 6 0 EVAPT @@ -1033,6 +1033,14 @@ 2 0 230 1 TRANS 2 0 231 1 VEGMIN 2 0 232 1 VEGMAX +! Added more parameters in 7/14/2021 + 2 0 233 1 LANDFRC + 2 0 234 1 LAKEFRC + 2 0 235 1 PAHFLX + 2 0 236 1 WATERSA + 2 0 237 1 EIWATER + 2 0 238 1 PLANTTR + 2 0 239 1 SOILSE ! ! GRIB2 - TABLE 4.2-2-1 PARAMETERS FOR DISCIPLINE 2 CATEGORY 1 ! @@ -1289,6 +1297,33 @@ 3 192 59 0 SBTAGR14 3 192 60 0 SBTAGR15 3 192 61 0 SBTAGR16 +! Added more parameters in 07/29/2021 + 3 192 62 0 SSMS1715 + 3 192 63 0 SSMS1716 + 3 192 64 0 SSMS1717 + 3 192 65 0 SSMS1718 +! Added more parameters in 09/24/2021 + 3 192 66 0 SBTAHI7 + 3 192 67 0 SBTAHI8 + 3 192 68 0 SBTAHI9 + 3 192 69 0 SBTAHI10 + 3 192 70 0 SBTAHI11 + 3 192 71 0 SBTAHI12 + 3 192 72 0 SBTAHI13 + 3 192 73 0 SBTAHI14 + 3 192 74 0 SBTAHI15 + 3 192 75 0 SBTAHI16 +! Added more parameters in 3/28/2022 + 3 192 76 0 SBTA187 + 3 192 77 0 SBTA188 + 3 192 78 0 SBTA189 + 3 192 79 0 SBTA1810 + 3 192 80 0 SBTA1811 + 3 192 81 0 SBTA1812 + 3 192 82 0 SBTA1813 + 3 192 83 0 SBTA1814 + 3 192 84 0 SBTA1815 + 3 192 85 0 SBTA1816 ! ! GRIB2 - TABLE 4.2-4-0 PARAMETERS FOR DISCIPLINE 4 CATEGORY 0 ! diff --git a/parm/post_avblflds.xml b/parm/post_avblflds.xml index bcca03e07..591f1be5b 100755 --- a/parm/post_avblflds.xml +++ b/parm/post_avblflds.xml @@ -3678,30 +3678,30 @@ 423 - MAX_MAXUVV_ON_SPEC_PRES_LVL_ABOVE_GRND_100-1000hpa + MAX_MAXUVV_ON_ISOBARIC_SFC_100-1000hpa hourly maximum Upward Vertical Velocity between 100-1000hpa tmpl4_8 MAXUVV NCEP MAX - spec_pres_above_grnd + isobaric_sfc 10000. - spec_pres_above_grnd + isobaric_sfc 100000. -3.0 424 - MAX_MAXDVV_ON_SPEC_PRES_LVL_ABOVE_GRND_100-1000hpa + MAX_MAXDVV_ON_ISOBARIC_SFC_100-1000hpa hourly maximum Downward Vertical Velocity between 100-1000hpa tmpl4_8 MAXDVV MAX NCEP - spec_pres_above_grnd + isobaric_sfc 10000. - spec_pres_above_grnd + isobaric_sfc 100000. -3.0 @@ -3857,83 +3857,7 @@ 4.0 - - - - 438 - DUST1_ON_ISOBARIC_LVL - tmpl4_48 - MASSMR - isobaric_lvl - dust_dry - between_first_second_limit_noincl2ndlmt - 7 - 2 - 7 - 20 - 11.0 - - - - 439 - DUST2_ON_ISOBARIC_LVL - tmpl4_48 - MASSMR - isobaric_lvl - dust_dry - between_first_second_limit_noincl2ndlmt - 7 - 20 - 7 - 36 - 11.0 - - - - 440 - DUST3_ON_ISOBARIC_LVL - tmpl4_48 - MASSMR - isobaric_lvl - dust_dry - between_first_second_limit_noincl2ndlmt - 7 - 36 - 7 - 60 - 11.0 - - - - 441 - DUST4_ON_ISOBARIC_LVL - tmpl4_48 - MASSMR - isobaric_lvl - dust_dry - between_first_second_limit_noincl2ndlmt - 7 - 60 - 7 - 120 - 11.0 - - - - 442 - DUST5_ON_ISOBARIC_LVL - tmpl4_48 - MASSMR - isobaric_lvl - dust_dry - between_first_second_limit_noincl2ndlmt - 7 - 120 - 7 - 200 - 11.0 - - + @@ -3959,7 +3883,8 @@ 445 MAPS_PRMSL_ON_MEAN_SEA_LVL - PRMSL + MSLMA + NCEP mean_sea_lvl 4.0 @@ -4282,9 +4207,9 @@ 487 - GSD_PRES_ON_CLOUD_BASE - PRES - cloud_base + GSD_EXP_CEILING + CEIL + cloud_ceilng 3.0 @@ -4692,6 +4617,86 @@ 4.0 + + 531 + SBTA187_ON_TOP_OF_ATMOS + SBTA187 + top_of_atmos + 4.0 + + + + 532 + SBTA188_ON_TOP_OF_ATMOS + SBTA188 + top_of_atmos + 4.0 + + + + 533 + SBTA189_ON_TOP_OF_ATMOS + SBTA189 + top_of_atmos + 4.0 + + + + 534 + SBTA1810_ON_TOP_OF_ATMOS + SBTA1810 + top_of_atmos + 4.0 + + + + 535 + SBTA1811_ON_TOP_OF_ATMOS + SBTA1811 + top_of_atmos + 4.0 + + + + 536 + SBTA1812_ON_TOP_OF_ATMOS + SBTA1812 + top_of_atmos + 4.0 + + + + 537 + SBTA1813_ON_TOP_OF_ATMOS + SBTA1813 + top_of_atmos + 4.0 + + + + 538 + SBTA1814_ON_TOP_OF_ATMOS + SBTA1814 + top_of_atmos + 4.0 + + + + 539 + SBTA1815_ON_TOP_OF_ATMOS + SBTA1815 + top_of_atmos + 4.0 + + + + 540 + SBTA1816_ON_TOP_OF_ATMOS + SBTA1816 + top_of_atmos + 4.0 + + 546 GSD_POT_ON_SPEC_HGT_LVL_ABOVE_GRND_2m @@ -4719,6 +4724,14 @@ 3.0 + + 549 + FDNSSTMP_ON_SURFACE + FDNSSTMP + surface + 4.0 + + 551 CSNOW_ON_SURFACE @@ -5045,82 +5058,116 @@ 4.0 + + + 600 + AER_OPT_GFS_at550 + tmpl4_48 + AOTK + entire_atmos + total_aerosol + smaller_than_first_limit + 6 + 20 + between_first_second_limit + 9 + 545 + 9 + 555 + 9.0 + + 601 - DUST1_ON_SPEC_ALT_ABOVE_MEAN_SEA_LVL_FDHGT + DUST_AER_OPT_GFS_at550 tmpl4_48 - MASSMR - spec_alt_above_mean_sea_lvl + AOTK + entire_atmos dust_dry - between_first_second_limit_noincl2ndlmt - 7 - 2 - 7 - 20 - 11.0 + smaller_than_first_limit + 6 + 20 + between_first_second_limit + 9 + 545 + 9 + 555 + 9.0 602 - DUST2_ON_SPEC_ALT_ABOVE_MEAN_SEA_LVL_FDHGT + SEASALT_AER_OPT_GFS_at550 tmpl4_48 - MASSMR - spec_alt_above_mean_sea_lvl - dust_dry - between_first_second_limit_noincl2ndlmt - 7 + AOTK + entire_atmos + sea_salt_dry + smaller_than_first_limit + 6 20 - 7 - 36 - 11.0 + between_first_second_limit + 9 + 545 + 9 + 555 + 9.0 603 - DUST3_ON_SPEC_ALT_ABOVE_MEAN_SEA_LVL_FDHGT + SULFATE_AER_OPT_GFS_at550 tmpl4_48 - MASSMR - spec_alt_above_mean_sea_lvl - dust_dry - between_first_second_limit_noincl2ndlmt - 7 - 36 - 7 - 60 - 11.0 + AOTK + entire_atmos + sulphate_dry + smaller_than_first_limit + 6 + 20 + between_first_second_limit + 9 + 545 + 9 + 555 + 9.0 604 - DUST4_ON_SPEC_ALT_ABOVE_MEAN_SEA_LVL_FDHGT + ORGANIC_CARBON_AER_OPT_GFS_at550 tmpl4_48 - MASSMR - spec_alt_above_mean_sea_lvl - dust_dry - between_first_second_limit_noincl2ndlmt - 7 - 60 - 7 - 120 - 11.0 + AOTK + entire_atmos + particulate_org_matter_dry + smaller_than_first_limit + 6 + 20 + between_first_second_limit + 9 + 545 + 9 + 555 + 9.0 605 - DUST5_ON_SPEC_ALT_ABOVE_MEAN_SEA_LVL_FDHGT + BLACK_CARBON_AER_OPT_GFS_at550 tmpl4_48 - MASSMR - spec_alt_above_mean_sea_lvl - dust_dry - between_first_second_limit_noincl2ndlmt - 7 - 120 - 7 - 200 - 11.0 + AOTK + entire_atmos + black_carbon_dry + smaller_than_first_limit + 6 + 20 + between_first_second_limit + 9 + 545 + 9 + 555 + 9.0 - + 606 AECOEF_ON_HYBRID_LVL @@ -5157,9 +5204,9 @@ 20 between_first_second_limit 9 - 545 + 550 9 - 565 + 550 9.0 @@ -5175,9 +5222,9 @@ 20 between_first_second_limit 9 - 545 + 550 9 - 565 + 550 9.0 @@ -5193,9 +5240,9 @@ 20 between_first_second_limit 9 - 545 + 550 9 - 565 + 550 9.0 @@ -5211,9 +5258,9 @@ 20 between_first_second_limit 9 - 545 + 550 9 - 565 + 550 9.0 @@ -5229,9 +5276,9 @@ 20 between_first_second_limit 9 - 545 + 550 9 - 565 + 550 9.0 @@ -5247,9 +5294,27 @@ 20 between_first_second_limit 9 - 545 + 550 9 - 565 + 550 + 9.0 + + + + 615 + NITRATE_AER_OPT_DEP_at550 + tmpl4_48 + AOTK + entire_atmos + nitrate_dry + smaller_than_first_limit + 6 + 20 + between_first_second_limit + 9 + 550 + 9 + 550 9.0 @@ -5291,6 +5356,7 @@ 25 9.0 + 619 PM10_SFC_MASS_CON @@ -5871,12 +5937,38 @@ - 659 - DUST_EMISSION_FLUX + 657 + NO3_COL_MASS_DEN tmpl4_48 - AEMFLX + COLMD entire_atmos - dust_dry + nitrate_dry + smaller_than_first_limit + 7 + 25 + 9.0 + + + + 658 + NH4_COL_MASS_DEN + tmpl4_48 + COLMD + entire_atmos + ammonium_dry + smaller_than_first_limit + 7 + 25 + 9.0 + + + + 659 + DUST_EMISSION_FLUX + tmpl4_48 + AEMFLX + surface + dust_dry smaller_than_first_limit 6 20 @@ -5931,7 +6023,7 @@ smaller_than_first_limit 6 20 - entire_atmos + surface 9.0 @@ -5983,7 +6075,7 @@ smaller_than_first_limit 10 236 - entire_atmos + surface 9.0 @@ -6035,7 +6127,7 @@ smaller_than_first_limit 8 70 - entire_atmos + surface 9.0 @@ -6087,7 +6179,7 @@ smaller_than_first_limit 8 70 - entire_atmos + surface 9.0 @@ -6211,16 +6303,17 @@ 685 - DU_CR_AER_SFC_MASS_CON + DUST10_SFC_MASS_CON AVE tmpl4_48 - MASSDEN + PMTC + surface dust_dry smaller_than_first_limit 6 10 surface - 9.0 + 9.0 @@ -6238,30 +6331,47 @@ 687 - BC_AER_SFC_MASS_CON - AVE + NITRATE_AER_SCAT_OPT_DEP_at550 tmpl4_48 - MASSDEN - black_carbon_dry + SCTAOTK + entire_atmos + nitrate_dry smaller_than_first_limit - 6 - 10 - surface + smaller_than_first_limit + 8 + 70 + between_first_second_limit + 9 + 545 + 9 + 565 9.0 688 - OC_AER_SFC_MASS_CON - AVE + NO3_ON_HYBRID_LVL tmpl4_48 - MASSDEN - particulate_org_matter_dry - smaller_than_first_limit - 6 - 10 - surface - 9.0 + PMTF + nitrate_dry + hybrid_lvl + equall_to_first_limit + 9 + 139 + 11.0 + + + + 689 + NH4_ON_HYBRID_LVL + tmpl4_48 + PMTF + ammonium_dry + hybrid_lvl + equall_to_first_limit + 9 + 139 + 11.0 @@ -6396,6 +6506,24 @@ 9.0 + + 699 + MIE_OPT_DEP_at550 + tmpl4_48 + AOTK + entire_atmos + mercury_dry + smaller_than_first_limit + 6 + 20 + between_first_second_limit + 9 + 545 + 9 + 565 + 9.0 + + 700 GSD_MAX_UPHL_ON_SPEC_HGT_LVL_ABOVE_GRND_1-6km @@ -6502,10 +6630,23 @@ 711 - GSD1_HGT_ON_CLOUD_BASE - HGT + GSD_EXP_CEILING_2 + CEIL cloud_base - 6.0 + 3.0 + + + + 712 + AER_OPT_AQM_at550 + tmpl4_48 + AOTK + entire_atmos_single_lyr + total_aerosol + smaller_than_first_limit + 0 + 0 + 9.0 @@ -6631,8 +6772,9 @@ 736 SMOKE_ON_ENTIRE_ATMOS_SINGLE_LYR - tmpl4_0 + tmpl4_48 COLMD + particulate_org_matter_dry entire_atmos_single_lyr 5.0 @@ -6640,8 +6782,9 @@ 737 SMOKE_ON_HYBRID_LVL - tmpl4_0 + tmpl4_48 MASSDEN + particulate_org_matter_dry hybrid_lvl 6.0 @@ -6649,8 +6792,9 @@ 738 SMOKE_ON_ISOBARIC_SFC - tmpl4_0 + tmpl4_48 MASSDEN + particulate_org_matter_dry isobaric_sfc 6.0 @@ -6658,8 +6802,9 @@ 739 SMOKE_ON_SPEC_HGT_LVL_ABOVE_GRND_8m - tmpl4_0 + tmpl4_48 MASSDEN + particulate_org_matter_dry spec_hgt_lvl_above_grnd 8. 6.0 @@ -6668,12 +6813,64 @@ 740 MEAN_FIRE_RDIATV_PWR + tmpl4_0 CFNSF NCEP surface 4.0 + + 741 + DUST_ON_ENTIRE_ATMOS_SINGLE_LYR + tmpl4_48 + COLMD + dust_dry + entire_atmos_single_lyr + 5.0 + + + + 742 + DUST_ON_HYBRID_LVL + tmpl4_48 + MASSDEN + dust_dry + hybrid_lvl + 6.0 + + + + 743 + DUST_ON_ISOBARIC_SFC + tmpl4_48 + MASSDEN + dust_dry + isobaric_sfc + 6.0 + + + + 744 + DUST_ON_SPEC_HGT_LVL_ABOVE_GRND_8m + tmpl4_48 + MASSDEN + dust_dry + spec_hgt_lvl_above_grnd + 8. + 6.0 + + + + 745 + BIOMASS_BURNING_EMISSIONS + tmpl4_48 + AEMFLX + particulate_org_matter_dry + surface + 5.0 + + 746 ACM_GRAUPEL_ON_SURFACE @@ -6754,6 +6951,15 @@ 3.0 + + 755 + HWP_ON_SURFACE + Hourly Wildfire Potential on surface + FWINX + surface + 5.0 + + 756 GSD_PRES_ON_HGHST_TROP_FRZ_LVL @@ -6813,6 +7019,22 @@ 3.0 + + 764 + CSDLF_ON_SURFACE + CSDLF + surface + 3.0 + + + + 765 + CSULF_ON_SURFACE + CSULF + surface + 3.0 + + 766 GSD_NCWFA_ON_HYBRID_LVL @@ -7154,6 +7376,38 @@ 4.0 + + 825 + SSMS1715_ON_TOP_OF_ATMOS + SSMS1715 + top_of_atmos + 4.0 + + + + 826 + SSMS1716_ON_TOP_OF_ATMOS + SSMS1716 + top_of_atmos + 4.0 + + + + 827 + SSMS1717_ON_TOP_OF_ATMOS + SSMS1717 + top_of_atmos + 4.0 + + + + 828 + SSMS1718_ON_TOP_OF_ATMOS + SSMS1718 + top_of_atmos + 4.0 + + 890 GSD_MAX_REL_VORT_ON_SPEC_HGT_LVL_HYBRID1 @@ -7175,6 +7429,106 @@ -4.0 + + 913 + 1H_FFG_EXCEEDANCE + tmpl4_8 + FFLDRO + ACM + surface + 4.0 + + + + 914 + ACM_FFG_EXCEEDANCE + tmpl4_8 + FFLDRO + ACM + surface + 4.0 + + + + 915 + 1H_2YARI_EXCEEDANCE + tmpl4_8 + GWLOWS + ACM + surface + 4.0 + + + + 916 + ACM_2YARI_EXCEEDANCE + tmpl4_8 + GWLOWS + ACM + surface + 4.0 + + + + 917 + 1H_5YARI_EXCEEDANCE + tmpl4_8 + GWLOWS + ACM + surface + 4.0 + + + + 918 + ACM_5YARI_EXCEEDANCE + tmpl4_8 + GWLOWS + ACM + surface + 4.0 + + + + 919 + 1H_10YARI_EXCEEDANCE + tmpl4_8 + GWLOWS + ACM + surface + 4.0 + + + + 920 + ACM_10YARI_EXCEEDANCE + tmpl4_8 + GWLOWS + ACM + surface + 4.0 + + + + 921 + 1H_100YARI_EXCEEDANCE + tmpl4_8 + GWLOWS + ACM + surface + 4.0 + + + + 922 + ACM_100YARI_EXCEEDANCE + tmpl4_8 + GWLOWS + ACM + surface + 4.0 + + 927 SBTA167_ON_TOP_OF_ATMOS @@ -7593,7 +7947,7 @@ 979 - EFSH_ON_LFC + EFSH_ON_EFBL EFSH NCEP level_free_convection @@ -7602,7 +7956,7 @@ 980 - EFSH_ON_EQUIL_LVL + EFSH_ON_EFTL EFSH NCEP equil_lvl @@ -7611,7 +7965,7 @@ 982 - ELMELT_ON_EQUIL_LVL + ELMELT_ON_EFTL ELMELT NCEP equil_lvl @@ -7620,7 +7974,7 @@ 983 - UESH_ON_LFC + UESH_ON_EFL UESH NCEP level_free_convection @@ -7629,7 +7983,7 @@ 984 - VESH_ON_LFC + VESH_ON_EFL VESH NCEP level_free_convection @@ -7638,7 +7992,7 @@ 985 - ESHR_ON_LFC + ESHR_ON_EFL ESHR NCEP level_free_convection @@ -7647,83 +8001,252 @@ 986 - UEID_ON_LFC + UEID_ON_EFL UEID + NCEP level_free_convection 6.0 987 - VEID_ON_LFC + VEID_ON_EFL VEID + NCEP level_free_convection 6.0 988 - E3KH_ON_LFC + E3KH_ON_EFL E3KH + NCEP level_free_convection 6.0 989 - STPC_ON_LFC + STPC_ON_EFL STPC + NCEP level_free_convection 6.0 990 - SIGT_ON_LFC + SIGT_ON_EFL SIGT + NCEP level_free_convection 6.0 991 - SCCP_ON_LFC + SCCP_ON_EFL SCCP + NCEP level_free_convection 6.0 992 - MLFC_ON_LFC + MLFC_ON_EFL MLFC + NCEP level_free_convection 6.0 993 - SIGH_ON_LFC + SIGH_ON_EFL SIGH + NCEP level_free_convection 6.0 - + 994 - OZCON_ON_HYBRID_LVL + AVE_OZCON_ON_HYBRID_LVL + tmpl4_8 OZCON + AVE hybrid_lvl 7.0 - + 995 - PM25TOT_ON_HYBRID_LVL + AVE_PM25TOT_ON_HYBRID_LVL + tmpl4_8 PMTF + AVE hybrid_lvl 7.0 + + + 996 + LAND_FRAC + LANDFRC + NCEP + surface + 3.0 + + + + 997 + INST_PREC_ADVEC_HEAT + PAHFLX + NCEP + surface + 3.0 + + + + 998 + WATER_AQUIFER + WATERSA + NCEP + surface + 3.0 + + + + 999 + ACM_EIWATER_ON_SURFACE + tmpl4_8 + EIWATER + NCEP + ACM + surface + 3.0 + + + + 1000 + ACM_PLANTTR_ON_SURFACE + tmpl4_8 + PLANTTR + NCEP + ACM + surface + 3.0 + + + + 1001 + ACM_SOILSE_ON_SURFACE + tmpl4_8 + SOILSE + NCEP + ACM + surface + 3.0 + + + + 1002 + AVE_PREC_ADVEC_HEAT + tmpl4_8 + PAHFLX + NCEP + AVE + surface + 3.0 + + + + 1003 + BUCKET_FRAIN_ON_SURFACE + tmpl4_8 + FRZR + NCEP + ACM + surface + 4.0 + + + + 1004 + ACM_SNOWFALL_ON_SURFACE + tmpl4_8 + TSNOWP + ACM + surface + 4.0 + + + + 1005 + BUCKET_SNOWFALL_ON_SURFACE + tmpl4_8 + TSNOWP + ACM + surface + 4.0 + + + + 1006 + SDEN_ON_SURFACE + SDEN + surface + 6.0 + + + + 1007 + ICE_PROB_IFI_FLIGHT_LEVEL + ICPRB + NCEP + spec_alt_above_mean_sea_lvl + 4.0 + + 1 + 5000. 10000. 15000. 20000. 25000. 30000. 35000. 40000. 45000. 50000. 55000. 60000. 65000. 70000. 75000. 80000. 85000. 90000. 95000. 100000. 105000. 110000. 115000. 120000. 125000. 130000. 135000. 140000. 145000. 150000. 155000. 160000. 165000. 170000. 175000. 180000. 185000. 190000. 195000. 200000. 205000. 210000. 215000. 220000. 225000. 230000. 235000. 240000. 245000. 250000. 255000. 260000. 265000. 270000. 275000. 280000. 285000. 290000. 295000. 300000. + + + + 1008 + SLD_IFI_FLIGHT_LEVEL + SIPD + NCEP + spec_alt_above_mean_sea_lvl + 4.0 + + 1 + 5000. 10000. 15000. 20000. 25000. 30000. 35000. 40000. 45000. 50000. 55000. 60000. 65000. 70000. 75000. 80000. 85000. 90000. 95000. 100000. 105000. 110000. 115000. 120000. 125000. 130000. 135000. 140000. 145000. 150000. 155000. 160000. 165000. 170000. 175000. 180000. 185000. 190000. 195000. 200000. 205000. 210000. 215000. 220000. 225000. 230000. 235000. 240000. 245000. 250000. 255000. 260000. 265000. 270000. 275000. 280000. 285000. 290000. 295000. 300000. + + + + 1009 + ICE_SEV_CAT_IFI_FLIGHT_LEVEL + ICSEV + NCEP + spec_alt_above_mean_sea_lvl + 4.0 + + 1 + 5000. 10000. 15000. 20000. 25000. 30000. 35000. 40000. 45000. 50000. 55000. 60000. 65000. 70000. 75000. 80000. 85000. 90000. 95000. 100000. 105000. 110000. 115000. 120000. 125000. 130000. 135000. 140000. 145000. 150000. 155000. 160000. 165000. 170000. 175000. 180000. 185000. 190000. 195000. 200000. 205000. 210000. 215000. 220000. 225000. 230000. 235000. 240000. 245000. 250000. 255000. 260000. 265000. 270000. 275000. 280000. 285000. 290000. 295000. 300000. + + + + 1010 + WMO_ICE_SEV_CAT_IFI_FLIGHT_LEVEL + ICESEV + spec_alt_above_mean_sea_lvl + 4.0 + + 1 + 5000. 10000. 15000. 20000. 25000. 30000. 35000. 40000. 45000. 50000. 55000. 60000. 65000. 70000. 75000. 80000. 85000. 90000. 95000. 100000. 105000. 110000. 115000. 120000. 125000. 130000. 135000. 140000. 145000. 150000. 155000. 160000. 165000. 170000. 175000. 180000. 185000. 190000. 195000. 200000. 205000. 210000. 215000. 220000. 225000. 230000. 235000. 240000. 245000. 250000. 255000. 260000. 265000. 270000. 275000. 280000. 285000. 290000. 295000. 300000. + diff --git a/parm/post_avblflds_raphrrr.xml b/parm/post_avblflds_raphrrr.xml index c945f89e3..617a51557 100755 --- a/parm/post_avblflds_raphrrr.xml +++ b/parm/post_avblflds_raphrrr.xml @@ -5616,8 +5616,9 @@ 736 SMOKE_ON_ENTIRE_ATMOS_SINGLE_LYR - tmpl4_0 + tmpl4_48 COLMD + particulate_org_matter_dry entire_atmos_single_lyr 5.0 @@ -5625,8 +5626,9 @@ 737 SMOKE_ON_HYBRID_LVL - tmpl4_0 + tmpl4_48 MASSDEN + particulate_org_matter_dry hybrid_lvl 6.0 @@ -5634,8 +5636,9 @@ 738 SMOKE_ON_ISOBARIC_SFC - tmpl4_0 + tmpl4_48 MASSDEN + particulate_org_matter_dry isobaric_sfc 6.0 @@ -5643,8 +5646,9 @@ 739 SMOKE_ON_SPEC_HGT_LVL_ABOVE_GRND_8m - tmpl4_0 + tmpl4_48 MASSDEN + particulate_org_matter_dry spec_hgt_lvl_above_grnd 8. 6.0 diff --git a/parm/post_tag_gfs128 b/parm/post_tag_gfs128 index 9a9a3bdde..f9246e045 100644 --- a/parm/post_tag_gfs128 +++ b/parm/post_tag_gfs128 @@ -1,3 +1,6 @@ +&MODEL_INPUTS +MODELNAME='GFS' +/ &NAMPGB KPO=57,PO=1000.,975.,950.,925.,900.,875.,850.,825.,800.,775.,750.,725.,700.,675.,650.,625.,600.,575.,550.,525.,500.,475.,450.,425.,400.,375.,350.,325.,300.,275.,250.,225.,200.,175.,150.,125.,100.,70.,50.,40.,30.,20.,15.,10.,7.,5.,3.,2.,1.,0.7,0.4,0.2,0.1,0.07,0.04,0.02,0.01, / diff --git a/parm/post_tag_gfs65 b/parm/post_tag_gfs65 index 2653fea19..7643b75d7 100644 --- a/parm/post_tag_gfs65 +++ b/parm/post_tag_gfs65 @@ -1,3 +1,6 @@ +&MODEL_INPUTS +MODELNAME='GFS' +/ &NAMPGB KPO=50,PO=1000.,975.,950.,925.,900.,875.,850.,825.,800.,775.,750.,725.,700.,675.,650.,625.,600.,575.,550.,525.,500.,475.,450.,425.,400.,375.,350.,325.,300.,275.,250.,225.,200.,175.,150.,125.,100.,70.,50.,40.,30.,20.,15.,10.,7.,5.,3.,2.,1.,0.4, / diff --git a/parm/postcntrl_gefs_chem.xml b/parm/postcntrl_gefs_chem.xml index c4ce522cf..5abf7128b 100755 --- a/parm/postcntrl_gefs_chem.xml +++ b/parm/postcntrl_gefs_chem.xml @@ -225,6 +225,12 @@ 9.0 + + DUST10_SFC_MASS_CON + NCEP + 9.0 + + DUST25_SFC_MASS_CON NCEP diff --git a/parm/postcntrl_gfs.xml b/parm/postcntrl_gfs.xml index 4fe5bb0f8..07cb23077 100755 --- a/parm/postcntrl_gfs.xml +++ b/parm/postcntrl_gfs.xml @@ -314,8 +314,8 @@ HLCY_ON_SPEC_HGT_LVL_ABOVE_GRND - 3000. - 0. + 3000. 1000. + 0. 0. 4.0 @@ -445,7 +445,7 @@ - VIS_ON_SURFACE + GSD_VIS_ON_SURFACE 6.0 @@ -1154,6 +1154,76 @@ 4.0 + + LAND_FRAC + 3.0 + + + + ACM_GRAUPEL_ON_SURFACE + 6.0 + + + + BUCKET_GRAUPEL_ON_SURFACE + 6.0 + + + + ACM_FRAIN_ON_SURFACE + 4.0 + + + + BUCKET_FRAIN_ON_SURFACE + 4.0 + + + + ACM_SNOWFALL_ON_SURFACE + 4.0 + + + + BUCKET_SNOWFALL_ON_SURFACE + 4.0 + + + + AER_OPT_GFS_at550 + 9.0 + + + + DUST_AER_OPT_GFS_at550 + 9.0 + + + + SEASALT_AER_OPT_GFS_at550 + 9.0 + + + + SULFATE_AER_OPT_GFS_at550 + 9.0 + + + + ORGANIC_CARBON_AER_OPT_GFS_at550 + 9.0 + + + + BLACK_CARBON_AER_OPT_GFS_at550 + 9.0 + + + + SDEN_ON_SURFACE + 6.0 + + diff --git a/parm/postcntrl_gfs_anl.xml b/parm/postcntrl_gfs_anl.xml index 42d88f330..1306d2e9f 100755 --- a/parm/postcntrl_gfs_anl.xml +++ b/parm/postcntrl_gfs_anl.xml @@ -553,6 +553,11 @@ 5.0 + + LAND_FRAC + 3.0 + + diff --git a/parm/postcntrl_gfs_f00.xml b/parm/postcntrl_gfs_f00.xml index 6792f1a4e..3473ccdb9 100755 --- a/parm/postcntrl_gfs_f00.xml +++ b/parm/postcntrl_gfs_f00.xml @@ -314,8 +314,8 @@ HLCY_ON_SPEC_HGT_LVL_ABOVE_GRND - 3000. - 0. + 3000. 1000. + 0. 0. 4.0 @@ -360,7 +360,7 @@ - VIS_ON_SURFACE + GSD_VIS_ON_SURFACE 6.0 @@ -902,6 +902,41 @@ 4.0 + + LAND_FRAC + 3.0 + + + + AER_OPT_GFS_at550 + 9.0 + + + + DUST_AER_OPT_GFS_at550 + 9.0 + + + + SEASALT_AER_OPT_GFS_at550 + 9.0 + + + + SULFATE_AER_OPT_GFS_at550 + 9.0 + + + + ORGANIC_CARBON_AER_OPT_GFS_at550 + 9.0 + + + + BLACK_CARBON_AER_OPT_GFS_at550 + 9.0 + + diff --git a/parm/postcntrl_gfs_f00_two.xml b/parm/postcntrl_gfs_f00_two.xml index 13cefa2e8..3d5df294f 100755 --- a/parm/postcntrl_gfs_f00_two.xml +++ b/parm/postcntrl_gfs_f00_two.xml @@ -314,8 +314,8 @@ HLCY_ON_SPEC_HGT_LVL_ABOVE_GRND - 3000. - 0. + 3000. 1000. + 0. 0. 4.0 @@ -360,7 +360,7 @@ - VIS_ON_SURFACE + GSD_VIS_ON_SURFACE 6.0 @@ -902,6 +902,41 @@ 4.0 + + LAND_FRAC + 3.0 + + + + AER_OPT_GFS_at550 + 9.0 + + + + DUST_AER_OPT_GFS_at550 + 9.0 + + + + SEASALT_AER_OPT_GFS_at550 + 9.0 + + + + SULFATE_AER_OPT_GFS_at550 + 9.0 + + + + ORGANIC_CARBON_AER_OPT_GFS_at550 + 9.0 + + + + BLACK_CARBON_AER_OPT_GFS_at550 + 9.0 + + @@ -958,6 +993,11 @@ 4.0 + + FDNSSTMP_ON_SURFACE + 4.0 + + TSOIL_ON_DEPTH_BEL_LAND_SFC 2 2 2 2 @@ -1190,6 +1230,11 @@ 4.0 + + LAND_FRAC + 3.0 + + diff --git a/parm/postcntrl_gfs_flux.xml b/parm/postcntrl_gfs_flux.xml index c5c18210e..2511c3e48 100755 --- a/parm/postcntrl_gfs_flux.xml +++ b/parm/postcntrl_gfs_flux.xml @@ -54,6 +54,11 @@ 4.0 + + FDNSSTMP_ON_SURFACE + 4.0 + + TSOIL_ON_DEPTH_BEL_LAND_SFC 2 2 2 2 @@ -613,6 +618,41 @@ 4.0 + + LAND_FRAC + 3.0 + + + + INST_PREC_ADVEC_HEAT + 3.0 + + + + WATER_AQUIFER + 3.0 + + + + ACM_EIWATER_ON_SURFACE + 3.0 + + + + ACM_PLANTTR_ON_SURFACE + 3.0 + + + + ACM_SOILSE_ON_SURFACE + 3.0 + + + + AVE_PREC_ADVEC_HEAT + 3.0 + + diff --git a/parm/postcntrl_gfs_flux_f00.xml b/parm/postcntrl_gfs_flux_f00.xml index 26b5bdc2a..c8c6c1008 100755 --- a/parm/postcntrl_gfs_flux_f00.xml +++ b/parm/postcntrl_gfs_flux_f00.xml @@ -54,6 +54,11 @@ 4.0 + + FDNSSTMP_ON_SURFACE + 4.0 + + TSOIL_ON_DEPTH_BEL_LAND_SFC 2 2 2 2 @@ -286,6 +291,11 @@ 4.0 + + LAND_FRAC + 3.0 + + diff --git a/parm/postcntrl_gfs_two.xml b/parm/postcntrl_gfs_two.xml index 803799027..b55f7cf66 100755 --- a/parm/postcntrl_gfs_two.xml +++ b/parm/postcntrl_gfs_two.xml @@ -314,8 +314,8 @@ HLCY_ON_SPEC_HGT_LVL_ABOVE_GRND - 3000. - 0. + 3000. 1000. + 0. 0. 4.0 @@ -445,7 +445,7 @@ - VIS_ON_SURFACE + GSD_VIS_ON_SURFACE 6.0 @@ -1154,6 +1154,76 @@ 4.0 + + LAND_FRAC + 3.0 + + + + ACM_GRAUPEL_ON_SURFACE + 6.0 + + + + BUCKET_GRAUPEL_ON_SURFACE + 6.0 + + + + ACM_FRAIN_ON_SURFACE + 4.0 + + + + BUCKET_FRAIN_ON_SURFACE + 4.0 + + + + ACM_SNOWFALL_ON_SURFACE + 4.0 + + + + BUCKET_SNOWFALL_ON_SURFACE + 4.0 + + + + AER_OPT_GFS_at550 + 9.0 + + + + DUST_AER_OPT_GFS_at550 + 9.0 + + + + SEASALT_AER_OPT_GFS_at550 + 9.0 + + + + SULFATE_AER_OPT_GFS_at550 + 9.0 + + + + ORGANIC_CARBON_AER_OPT_GFS_at550 + 9.0 + + + + BLACK_CARBON_AER_OPT_GFS_at550 + 9.0 + + + + SDEN_ON_SURFACE + 6.0 + + @@ -1210,6 +1280,11 @@ 4.0 + + FDNSSTMP_ON_SURFACE + 4.0 + + TSOIL_ON_DEPTH_BEL_LAND_SFC 2 2 2 2 @@ -1769,6 +1844,41 @@ 4.0 + + LAND_FRAC + 3.0 + + + + INST_PREC_ADVEC_HEAT + 3.0 + + + + WATER_AQUIFER + 3.0 + + + + ACM_EIWATER_ON_SURFACE + 3.0 + + + + ACM_PLANTTR_ON_SURFACE + 3.0 + + + + ACM_SOILSE_ON_SURFACE + 3.0 + + + + AVE_PREC_ADVEC_HEAT + 3.0 + + diff --git a/parm/postcntrl_hafs.xml b/parm/postcntrl_hafs_nosat.xml similarity index 86% rename from parm/postcntrl_hafs.xml rename to parm/postcntrl_hafs_nosat.xml index 0e409df2b..aeaf52a06 100755 --- a/parm/postcntrl_hafs.xml +++ b/parm/postcntrl_hafs_nosat.xml @@ -92,16 +92,8 @@ - TKE_ON_ISOBARIC_SFC - TKE - 200. 500. 700. 1000. 2000. 3000. 5000. 7000. 10000. 12500. 15000. 17500. 20000. 22500. 25000. 27500. 30000. 32500. 35000. 37500. 40000. 42500. 45000. -47500. 50000. 52500. 55000. 57500. 60000. 62500. 65000. 67500. 70000. 72500. 75000. 77500. 80000. 82500. 85000. 87500. 90000. 92500. 95000. 97500. 100000. - 3.0 - - - - CLMR_ON_ISOBARIC_SFC - CLMR + CLWMR_ON_ISOBARIC_SFC + CLWMR 200. 500. 700. 1000. 2000. 3000. 5000. 7000. 10000. 12500. 15000. 17500. 20000. 22500. 25000. 27500. 30000. 32500. 35000. 37500. 40000. 42500. 45000. 47500. 50000. 52500. 55000. 57500. 60000. 62500. 65000. 67500. 70000. 72500. 75000. 77500. 80000. 82500. 85000. 87500. 90000. 92500. 95000. 97500. 100000. 6.0 @@ -198,19 +190,6 @@ 4.0 - - GUST_ON_SURFACE - GUST - 4.0 - - - - POT_ON_SPEC_HGT_LVL_ABOVE_GRND_10m - POT - 10. - 4.0 - - PRES_ON_SURFACE PRES @@ -223,31 +202,12 @@ 6.0 - - POT_ON_SURFACE - POT - 4.0 - - - - SPFH_ON_SURFACE - SPFH - 3.0 - - TMP_ON_SURFACE TMP 4.0 - - SNOWC_ON_SURFACE - SNOWC - NCEP - 3.0 - - SFEXC_ON_SURFACE SFEXC @@ -286,6 +246,12 @@ -4.0 + + ACM_ACPCP_ON_SURFACE + ACPCP + -4.0 + + ACM_NCPCP_ON_SURFACE NCPCP @@ -293,28 +259,27 @@ - INST_PRATE_ON_SURFACE + AVE_PRATE_ON_SURFACE PRATE - 6.0 + 4.0 - INST_TCDC_ON_ENTIRE_ATMOS - TCDC + AVE_CPRAT_ON_SURFACE + CPRAT 4.0 - AVE_TCDC_ON_ENTIRE_ATMOS + INST_TCDC_ON_ENTIRE_ATMOS TCDC 4.0 - AVE_CDLYR_ON_ENTIRE_ATMOS - CDLYR - NCEP - 3.0 + AVE_TCDC_ON_ENTIRE_ATMOS + TCDC + 4.0 @@ -380,12 +345,6 @@ 4.0 - - BRTMP_ON_TOP_OF_ATMOS - BRTMP - 4.0 - - INST_DSWRF_ON_SURFACE DSWRF @@ -413,13 +372,6 @@ 4.0 - - CD_ON_SURFACE - CD - NCEP - 6.0 - - UFLX_ON_SURFACE UFLX @@ -432,24 +384,6 @@ 4.0 - - AVE_SHTFL_ON_SURFACE - SHTFL - 4.0 - - - - AVE_LHTFL_ON_SURFACE - LHTFL - 4.0 - - - - ACM_EVP_ON_SURFACE - EVP - 4.0 - - INST_SHTFL_ON_SURFACE SHTFL @@ -506,12 +440,6 @@ 4.0 - - POT_ON_TROPOPAUSE - POT - 4.0 - - UGRD_ON_TROPOPAUSE UGRD @@ -587,37 +515,41 @@ - TCLSW_ON_ENTIRE_ATMOS - TCLSW - NCEP - 5.0 + MAX_WIND_ON_SPEC_HGT_LVL_ABOVE_GRND_10m + WIND + -4.0 - TCOLM_ON_ENTIRE_ATMOS - TCOLM - NCEP - 5.0 + GUST_ON_SURFACE + GUST + 3.0 - LWHR_ON_ENTIRE_ATMOS - LWHR - NCEP - 5.0 + MAX_MAXUVV_ON_ISOBARIC_SFC_100-1000hpa + MAXUVV + -4.0 - AVE_LRGHR_ON_ENTIRE_ATMOS - LRGHR - NCEP - 5.0 + MAX_MAXDVV_ON_ISOBARIC_SFC_100-1000hpa + MAXDVV + -4.0 - MAX_PRATE_ON_SURFACE - PRATE - 6.0 + GSD_MAX_UPHL_ON_SPEC_HGT_LVL_ABOVE_GRND_0-3km + MXUPHL + NCEP + -3.0 + + + + MAX_UPHL_ON_SPEC_HGT_LVL_ABOVE_GRND_2-5km + MXUPHL + NCEP + -3.0 diff --git a/parm/postcntrl_hafs_sat.xml b/parm/postcntrl_hafs_sat.xml new file mode 100755 index 000000000..d19d414c0 --- /dev/null +++ b/parm/postcntrl_hafs_sat.xml @@ -0,0 +1,65 @@ + + + + + HURSAT + 32769 + ncep_nco + v2003 + local_tab_yes1 + fcst + oper + fcst + fcst + hour + nws_ncep + hafs + complex_packing_spatial_diff + 2nd_ord_sptdiff + fltng_pnt + lossless + + + SBTAGR8_ON_TOP_OF_ATMOS + 4.0 + + + + SBTAGR9_ON_TOP_OF_ATMOS + 4.0 + + + + SBTAGR10_ON_TOP_OF_ATMOS + 4.0 + + + + SBTAGR13_ON_TOP_OF_ATMOS + 4.0 + + + + SSMS1715_ON_TOP_OF_ATMOS + 4.0 + + + + SSMS1716_ON_TOP_OF_ATMOS + 4.0 + + + + SSMS1717_ON_TOP_OF_ATMOS + 4.0 + + + + SSMS1718_ON_TOP_OF_ATMOS + 4.0 + + + + + + diff --git a/parm/postcntrl_ufs_aerosol.xml b/parm/postcntrl_ufs_aerosol.xml new file mode 100755 index 000000000..d50d58b9f --- /dev/null +++ b/parm/postcntrl_ufs_aerosol.xml @@ -0,0 +1,330 @@ + + + + + GFSPRS + 0 + ncep_nco + v2003 + local_tab_yes1 + fcst + oper + fcst + fcst + hour + nws_ncep + gfs_avn + complex_packing_spatial_diff + 2nd_ord_sptdiff + fltng_pnt + lossless + + + HGT_ON_ISOBARIC_SFC + 1. 2. 4. 7. 10. 20. 40. 70. 100. 200. 300. 500. 700. 1000. 1500. 2000. 3000. 4000. 5000. 7000. 10000. 12500. 15000. 17500. 20000. 22500. 25000. 27500. 30000. 32500. 35000. 37500. 40000. 42500. + 45000. 47500. 50000. 52500. 55000. 57500. 60000. 62500. 65000. 67500. 70000. 72500. 75000. 77500. 80000. 82500. 85000. 87500. 90000. 92500. 95000. 97500. 100000. + 6.0 + + + + TMP_ON_ISOBARIC_SFC + 1. 2. 4. 7. 10. 20. 40. 70. 100. 200. 300. 500. 700. 1000. 1500. 2000. 3000. 4000. 5000. 7000. 10000. 12500. 15000. 17500. 20000. 22500. 25000. 27500. 30000. 32500. 35000. 37500. 40000. 42500. + 45000. 47500. 50000. 52500. 55000. 57500. 60000. 62500. 65000. 67500. 70000. 72500. 75000. 77500. 80000. 82500. 85000. 87500. 90000. 92500. 95000. 97500. 100000. + 4.0 + + + + UGRD_ON_ISOBARIC_SFC + 1. 2. 4. 7. 10. 20. 40. 70. 100. 200. 300. 500. 700. 1000. 1500. 2000. 3000. 4000. 5000. 7000. 10000. 12500. 15000. 17500. 20000. 22500. 25000. 27500. 30000. 32500. 35000. 37500. 40000. 42500. + 45000. 47500. 50000. 52500. 55000. 57500. 60000. 62500. 65000. 67500. 70000. 72500. 75000. 77500. 80000. 82500. 85000. 87500. 90000. 92500. 95000. 97500. 100000. + 4.0 + + + + VGRD_ON_ISOBARIC_SFC + 1. 2. 4. 7. 10. 20. 40. 70. 100. 200. 300. 500. 700. 1000. 1500. 2000. 3000. 4000. 5000. 7000. 10000. 12500. 15000. 17500. 20000. 22500. 25000. 27500. 30000. 32500. 35000. 37500. 40000. 42500. + 45000. 47500. 50000. 52500. 55000. 57500. 60000. 62500. 65000. 67500. 70000. 72500. 75000. 77500. 80000. 82500. 85000. 87500. 90000. 92500. 95000. 97500. 100000. + 4.0 + + + + O3MR_ON_ISOBARIC_SFC + NCEP + 1. 2. 4. 7. 10. 20. 40. 70. 100. 200. 300. 500. 700. 1000. 1500. 2000. 3000. 4000. 5000. 7000. 10000. 12500. 15000. 17500. 20000. 22500. 25000. 27500. 30000. 32500. 35000. 37500. 40000. 42500. + 45000. 47500. 50000. 52500. 55000. 57500. 60000. 62500. 65000. 67500. 70000. 72500. 75000. 77500. 80000. 82500. 85000. 87500. 90000. 92500. 95000. 97500. 100000. + 5.0 + + + + DUST1_ON_HYBRID_LVL + NCEP + 1. + 11.0 + + + + DUST2_ON_HYBRID_LVL + NCEP + 1. + 11.0 + + + + DUST3_ON_HYBRID_LVL + NCEP + 1. + 11.0 + + + + DUST4_ON_HYBRID_LVL + NCEP + 1. + 11.0 + + + + DUST5_ON_HYBRID_LVL + NCEP + 1. + 11.0 + + + + SEASALT1_ON_HYBRID_LVL + NCEP + 1. + 11.0 + + + + SEASALT2_ON_HYBRID_LVL + NCEP + 1. + 11.0 + + + + SEASALT3_ON_HYBRID_LVL + NCEP + 1. + 11.0 + + + + SEASALT4_ON_HYBRID_LVL + NCEP + 1. + 11.0 + + + + SEASALT5_ON_HYBRID_LVL + NCEP + 1. + 11.0 + + + + BCPHILIC_ON_HYBRID_LVL + NCEP + 1. + 11.0 + + + + BCPHOBIC_ON_HYBRID_LVL + NCEP + 1. + 11.0 + + + + OCPHILIC_ON_HYBRID_LVL + NCEP + 1. + 11.0 + + + + OCPHOBIC_ON_HYBRID_LVL + NCEP + 1. + 11.0 + + + + SO4_ON_HYBRID_LVL + NCEP + 1. + 11.0 + + + + NO3_ON_HYBRID_LVL + NCEP + 1. + 11.0 + + + + NH4_ON_HYBRID_LVL + NCEP + 1. + 11.0 + + + + PRES_ON_MEAN_SEA_LVL + 6.0 + + + + TMP_ON_SURFACE + 4.0 + + + + AER_OPT_DEP_at550 + 9.0 + + + + DUST_AER_OPT_DEP_at550 + 9.0 + + + + SEASALT_AER_OPT_DEP_at550 + 9.0 + + + + SULFATE_AER_OPT_DEP_at550 + 9.0 + + + + ORGANIC_CARBON_AER_OPT_DEP_at550 + 9.0 + + + + BLACK_CARBON_AER_OPT_DEP_at550 + 9.0 + + + + NITRATE_AER_OPT_DEP_at550 + 9.0 + + + + AER_SCAT_OPT_DEP_at550 + 9.0 + + + + DUST25_SFC_MASS_CON + NCEP + 9.0 + + + + DUST10_SFC_MASS_CON + NCEP + 9.0 + + + + SEAS25_SFC_MASS_CON + NCEP + 9.0 + + + + PM10_SFC_MASS_CON + NCEP + 9.0 + + + + PM25_SFC_MASS_CON + NCEP + 9.0 + + + + PM10_COL_MASS_DEN + 9.0 + + + + PM25_COL_MASS_DEN + 9.0 + + + + DUST_COL_MASS_DEN + 9.0 + + + + SEAS_COL_MASS_DEN + 9.0 + + + + BC_COL_MASS_DEN + 9.0 + + + + OC_COL_MASS_DEN + 9.0 + + + + SULF_COL_MASS_DEN + 9.0 + + + + NO3_COL_MASS_DEN + 9.0 + + + + NH4_COL_MASS_DEN + 9.0 + + + + TOZNE_ON_ENTIRE_ATMOS_SINGLE_LYR + 4.0 + + + + AVE_PRATE_ON_SURFACE + 4.0 + + + + AVE_CPRAT_ON_SURFACE + NCEP + 4.0 + + + + ACM_APCP_ON_SURFACE + -4.0 + + + + ACM_ACPCP_ON_SURFACE + -4.0 + + + + + diff --git a/parm/postcntrl_ufs_aerosol_f00.xml b/parm/postcntrl_ufs_aerosol_f00.xml new file mode 100755 index 000000000..b0f7d510f --- /dev/null +++ b/parm/postcntrl_ufs_aerosol_f00.xml @@ -0,0 +1,306 @@ + + + + + GFSPRS + 0 + ncep_nco + v2003 + local_tab_yes1 + fcst + oper + fcst + fcst + hour + nws_ncep + gfs_avn + complex_packing_spatial_diff + 2nd_ord_sptdiff + fltng_pnt + lossless + + + HGT_ON_ISOBARIC_SFC + 1. 2. 4. 7. 10. 20. 40. 70. 100. 200. 300. 500. 700. 1000. 1500. 2000. 3000. 4000. 5000. 7000. 10000. 12500. 15000. 17500. 20000. 22500. 25000. 27500. 30000. 32500. 35000. 37500. 40000. 42500. + 45000. 47500. 50000. 52500. 55000. 57500. 60000. 62500. 65000. 67500. 70000. 72500. 75000. 77500. 80000. 82500. 85000. 87500. 90000. 92500. 95000. 97500. 100000. + 6.0 + + + + TMP_ON_ISOBARIC_SFC + 1. 2. 4. 7. 10. 20. 40. 70. 100. 200. 300. 500. 700. 1000. 1500. 2000. 3000. 4000. 5000. 7000. 10000. 12500. 15000. 17500. 20000. 22500. 25000. 27500. 30000. 32500. 35000. 37500. 40000. 42500. + 45000. 47500. 50000. 52500. 55000. 57500. 60000. 62500. 65000. 67500. 70000. 72500. 75000. 77500. 80000. 82500. 85000. 87500. 90000. 92500. 95000. 97500. 100000. + 4.0 + + + + UGRD_ON_ISOBARIC_SFC + 1. 2. 4. 7. 10. 20. 40. 70. 100. 200. 300. 500. 700. 1000. 1500. 2000. 3000. 4000. 5000. 7000. 10000. 12500. 15000. 17500. 20000. 22500. 25000. 27500. 30000. 32500. 35000. 37500. 40000. 42500. + 45000. 47500. 50000. 52500. 55000. 57500. 60000. 62500. 65000. 67500. 70000. 72500. 75000. 77500. 80000. 82500. 85000. 87500. 90000. 92500. 95000. 97500. 100000. + 4.0 + + + + VGRD_ON_ISOBARIC_SFC + 1. 2. 4. 7. 10. 20. 40. 70. 100. 200. 300. 500. 700. 1000. 1500. 2000. 3000. 4000. 5000. 7000. 10000. 12500. 15000. 17500. 20000. 22500. 25000. 27500. 30000. 32500. 35000. 37500. 40000. 42500. + 45000. 47500. 50000. 52500. 55000. 57500. 60000. 62500. 65000. 67500. 70000. 72500. 75000. 77500. 80000. 82500. 85000. 87500. 90000. 92500. 95000. 97500. 100000. + 4.0 + + + + O3MR_ON_ISOBARIC_SFC + NCEP + 1. 2. 4. 7. 10. 20. 40. 70. 100. 200. 300. 500. 700. 1000. 1500. 2000. 3000. 4000. 5000. 7000. 10000. 12500. 15000. 17500. 20000. 22500. 25000. 27500. 30000. 32500. 35000. 37500. 40000. 42500. + 45000. 47500. 50000. 52500. 55000. 57500. 60000. 62500. 65000. 67500. 70000. 72500. 75000. 77500. 80000. 82500. 85000. 87500. 90000. 92500. 95000. 97500. 100000. + 5.0 + + + + DUST1_ON_HYBRID_LVL + NCEP + 1. + 11.0 + + + + DUST2_ON_HYBRID_LVL + NCEP + 1. + 11.0 + + + + DUST3_ON_HYBRID_LVL + NCEP + 1. + 11.0 + + + + DUST4_ON_HYBRID_LVL + NCEP + 1. + 11.0 + + + + DUST5_ON_HYBRID_LVL + NCEP + 1. + 11.0 + + + + SEASALT1_ON_HYBRID_LVL + NCEP + 1. + 11.0 + + + + SEASALT2_ON_HYBRID_LVL + NCEP + 1. + 11.0 + + + + SEASALT3_ON_HYBRID_LVL + NCEP + 1. + 11.0 + + + + SEASALT4_ON_HYBRID_LVL + NCEP + 1. + 11.0 + + + + SEASALT5_ON_HYBRID_LVL + NCEP + 1. + 11.0 + + + + BCPHILIC_ON_HYBRID_LVL + NCEP + 1. + 11.0 + + + + BCPHOBIC_ON_HYBRID_LVL + NCEP + 1. + 11.0 + + + + OCPHILIC_ON_HYBRID_LVL + NCEP + 1. + 11.0 + + + + OCPHOBIC_ON_HYBRID_LVL + NCEP + 1. + 11.0 + + + + SO4_ON_HYBRID_LVL + NCEP + 1. + 11.0 + + + + PRES_ON_MEAN_SEA_LVL + 6.0 + + + + TMP_ON_SURFACE + 4.0 + + + + AER_OPT_DEP_at550 + 9.0 + + + + DUST_AER_OPT_DEP_at550 + 9.0 + + + + SEASALT_AER_OPT_DEP_at550 + 9.0 + + + + SULFATE_AER_OPT_DEP_at550 + 9.0 + + + + ORGANIC_CARBON_AER_OPT_DEP_at550 + 9.0 + + + + BLACK_CARBON_AER_OPT_DEP_at550 + 9.0 + + + + NITRATE_AER_OPT_DEP_at550 + 9.0 + + + + AER_SCAT_OPT_DEP_at550 + 9.0 + + + + DUST25_SFC_MASS_CON + NCEP + 9.0 + + + + DUST10_SFC_MASS_CON + NCEP + 9.0 + + + + SEAS25_SFC_MASS_CON + NCEP + 9.0 + + + + PM10_SFC_MASS_CON + NCEP + 9.0 + + + + PM25_SFC_MASS_CON + NCEP + 9.0 + + + + PM10_COL_MASS_DEN + 9.0 + + + + PM25_COL_MASS_DEN + 9.0 + + + + DUST_COL_MASS_DEN + 9.0 + + + + SEAS_COL_MASS_DEN + 9.0 + + + + BC_COL_MASS_DEN + 9.0 + + + + OC_COL_MASS_DEN + 9.0 + + + + SULF_COL_MASS_DEN + 9.0 + + + + TOZNE_ON_ENTIRE_ATMOS_SINGLE_LYR + 4.0 + + + + AVE_PRATE_ON_SURFACE + 4.0 + + + + AVE_CPRAT_ON_SURFACE + NCEP + 4.0 + + + + ACM_APCP_ON_SURFACE + -4.0 + + + + ACM_ACPCP_ON_SURFACE + -4.0 + + + + + diff --git a/parm/postxconfig-NT-3drtma.txt b/parm/postxconfig-NT-3drtma.txt index 117c58e78..d480e0ba7 100644 --- a/parm/postxconfig-NT-3drtma.txt +++ b/parm/postxconfig-NT-3drtma.txt @@ -356,8 +356,8 @@ MAPS_PRMSL_ON_MEAN_SEA_LVL ? 1 tmpl4_0 -PRMSL -? +MSLMA +NCEP ? mean_sea_lvl 0 @@ -577,7 +577,7 @@ spec_hgt_lvl_above_grnd SMOKE_ON_SPEC_HGT_LVL_ABOVE_GRND_8m ? 1 -tmpl4_0 +tmpl4_48 MASSDEN ? ? @@ -591,7 +591,7 @@ spec_hgt_lvl_above_grnd ? 0 ? -? +particulate_org_matter_dry ? 0 0.0 @@ -3941,14 +3941,14 @@ spec_hgt_lvl_above_grnd ? ? 487 -GSD_PRES_ON_CLOUD_BASE +GSD_EXP_CEILING ? 1 tmpl4_0 -PRES +CEIL ? ? -cloud_base +cloud_ceilng 0 ? 0 @@ -5424,7 +5424,7 @@ entire_atmos_single_lyr SMOKE_ON_ENTIRE_ATMOS_SINGLE_LYR ? 1 -tmpl4_0 +tmpl4_48 COLMD ? ? @@ -5438,7 +5438,7 @@ entire_atmos_single_lyr ? 0 ? -? +particulate_org_matter_dry ? 0 0.0 @@ -5569,7 +5569,7 @@ entire_atmos_single_lyr ? ? 979 -EFSH_ON_LFC +EFSH_ON_EFBL ? 1 tmpl4_0 @@ -5606,7 +5606,7 @@ level_free_convection ? ? 980 -EFSH_ON_EQUIL_LVL +EFSH_ON_EFTL ? 1 tmpl4_0 @@ -5643,7 +5643,7 @@ equil_lvl ? ? 982 -ELMELT_ON_EQUIL_LVL +ELMELT_ON_EFTL ? 1 tmpl4_0 @@ -5680,7 +5680,7 @@ equil_lvl ? ? 983 -UESH_ON_LFC +UESH_ON_EFL ? 1 tmpl4_0 @@ -5717,7 +5717,7 @@ level_free_convection ? ? 984 -VESH_ON_LFC +VESH_ON_EFL ? 1 tmpl4_0 @@ -5754,7 +5754,7 @@ level_free_convection ? ? 985 -ESHR_ON_LFC +ESHR_ON_EFL ? 1 tmpl4_0 @@ -5791,12 +5791,12 @@ level_free_convection ? ? 986 -UEID_ON_LFC +UEID_ON_EFL ? 1 tmpl4_0 UEID -? +NCEP ? level_free_convection 0 @@ -5828,12 +5828,12 @@ level_free_convection ? ? 987 -VEID_ON_LFC +VEID_ON_EFL ? 1 tmpl4_0 VEID -? +NCEP ? level_free_convection 0 @@ -5865,12 +5865,12 @@ level_free_convection ? ? 988 -E3KH_ON_LFC +E3KH_ON_EFL ? 1 tmpl4_0 E3KH -? +NCEP ? level_free_convection 0 @@ -5902,12 +5902,12 @@ level_free_convection ? ? 989 -STPC_ON_LFC +STPC_ON_EFL ? 1 tmpl4_0 STPC -? +NCEP ? level_free_convection 0 @@ -5939,12 +5939,12 @@ level_free_convection ? ? 990 -SIGT_ON_LFC +SIGT_ON_EFL ? 1 tmpl4_0 SIGT -? +NCEP ? level_free_convection 0 @@ -5976,12 +5976,12 @@ level_free_convection ? ? 991 -SCCP_ON_LFC +SCCP_ON_EFL ? 1 tmpl4_0 SCCP -? +NCEP ? level_free_convection 0 @@ -6013,12 +6013,12 @@ level_free_convection ? ? 993 -SIGH_ON_LFC +SIGH_ON_EFL ? 1 tmpl4_0 SIGH -? +NCEP ? level_free_convection 0 @@ -6050,12 +6050,12 @@ level_free_convection ? ? 992 -MLFC_ON_LFC +MLFC_ON_EFL ? 1 tmpl4_0 MLFC -? +NCEP ? level_free_convection 0 @@ -7417,7 +7417,7 @@ hybrid_lvl SMOKE_ON_HYBRID_LVL ? 1 -tmpl4_0 +tmpl4_48 MASSDEN ? ? @@ -7431,7 +7431,7 @@ hybrid_lvl ? 0 ? -? +particulate_org_matter_dry ? 0 0.0 diff --git a/parm/postxconfig-NT-AQM.txt b/parm/postxconfig-NT-AQM.txt new file mode 100644 index 000000000..54f199471 --- /dev/null +++ b/parm/postxconfig-NT-AQM.txt @@ -0,0 +1,943 @@ +1 +25 +CMAQ +32769 +ncep_nco +v2003 +local_tab_yes1 +fcst +oper +fcst +fcst +hour +nws_ncep +nmm_8km +complex_packing_spatial_diff +2nd_ord_sptdiff +fltng_pnt +lossless +995 +AVE_PM25TOT_ON_HYBRID_LVL +? +1 +tmpl4_8 +PMTF +NCEP +AVE +hybrid_lvl +0 +? +64 +1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29. 30. 31. 32. 33. 34. 35. 36. 37. 38. 39. 40. 41. 42. 43. 44. 45. 46. 47. 48. 49. 50. 51. 52. 53. 54. 55. 56. 57. 58. 59. 60. 61. 62. 63. 64. +? +0 +? +0 +? +? +? +0 +0.0 +0 +0.0 +? +0 +0.0 +0 +0.0 +1 +7.0 +0 +0 +0 +? +? +? +994 +AVE_OZCON_ON_HYBRID_LVL +? +1 +tmpl4_8 +OZCON +NCEP +AVE +hybrid_lvl +0 +? +64 +1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29. 30. 31. 32. 33. 34. 35. 36. 37. 38. 39. 40. 41. 42. 43. 44. 45. 46. 47. 48. 49. 50. 51. 52. 53. 54. 55. 56. 57. 58. 59. 60. 61. 62. 63. 64. +? +0 +? +0 +? +? +? +0 +0.0 +0 +0.0 +? +0 +0.0 +0 +0.0 +1 +7.0 +0 +0 +0 +? +? +? +2 +TMP_ON_HYBRID_LVL +? +1 +tmpl4_0 +TMP +? +? +hybrid_lvl +0 +? +64 +1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29. 30. 31. 32. 33. 34. 35. 36. 37. 38. 39. 40. 41. 42. 43. 44. 45. 46. 47. 48. 49. 50. 51. 52. 53. 54. 55. 56. 57. 58. 59. 60. 61. 62. 63. 64. +? +0 +? +0 +? +? +? +0 +0.0 +0 +0.0 +? +0 +0.0 +0 +0.0 +1 +4.0 +0 +0 +0 +? +? +? +5 +SPFH_ON_HYBRID_LVL +? +1 +tmpl4_0 +SPFH +? +? +hybrid_lvl +0 +? +64 +1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29. 30. 31. 32. 33. 34. 35. 36. 37. 38. 39. 40. 41. 42. 43. 44. 45. 46. 47. 48. 49. 50. 51. 52. 53. 54. 55. 56. 57. 58. 59. 60. 61. 62. 63. 64. +? +0 +? +0 +? +? +? +0 +0.0 +0 +0.0 +? +0 +0.0 +0 +0.0 +1 +7.0 +0 +0 +0 +? +? +? +7 +UGRD_ON_HYBRID_LVL +? +1 +tmpl4_0 +UGRD +? +? +hybrid_lvl +0 +? +64 +1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29. 30. 31. 32. 33. 34. 35. 36. 37. 38. 39. 40. 41. 42. 43. 44. 45. 46. 47. 48. 49. 50. 51. 52. 53. 54. 55. 56. 57. 58. 59. 60. 61. 62. 63. 64. +? +0 +? +0 +? +? +? +0 +0.0 +0 +0.0 +? +0 +0.0 +0 +0.0 +1 +4.0 +0 +0 +0 +? +? +? +8 +VGRD_ON_HYBRID_LVL +? +1 +tmpl4_0 +VGRD +? +? +hybrid_lvl +0 +? +64 +1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29. 30. 31. 32. 33. 34. 35. 36. 37. 38. 39. 40. 41. 42. 43. 44. 45. 46. 47. 48. 49. 50. 51. 52. 53. 54. 55. 56. 57. 58. 59. 60. 61. 62. 63. 64. +? +0 +? +0 +? +? +? +0 +0.0 +0 +0.0 +? +0 +0.0 +0 +0.0 +1 +4.0 +0 +0 +0 +? +? +? +264 +DZDT_ON_HYBRID_LVL +? +1 +tmpl4_0 +DZDT +? +? +hybrid_lvl +0 +? +64 +1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29. 30. 31. 32. 33. 34. 35. 36. 37. 38. 39. 40. 41. 42. 43. 44. 45. 46. 47. 48. 49. 50. 51. 52. 53. 54. 55. 56. 57. 58. 59. 60. 61. 62. 63. 64. +? +0 +? +0 +? +? +? +0 +0.0 +0 +0.0 +? +0 +0.0 +0 +0.0 +1 +4.0 +0 +0 +0 +? +? +? +145 +TCDC_ON_HYBRID_LVL +? +1 +tmpl4_0 +TCDC +? +? +hybrid_lvl +0 +? +64 +1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29. 30. 31. 32. 33. 34. 35. 36. 37. 38. 39. 40. 41. 42. 43. 44. 45. 46. 47. 48. 49. 50. 51. 52. 53. 54. 55. 56. 57. 58. 59. 60. 61. 62. 63. 64. +? +0 +? +0 +? +? +? +0 +0.0 +0 +0.0 +? +0 +0.0 +0 +0.0 +1 +3.0 +0 +0 +0 +? +? +? +106 +TMP_ON_SPEC_HGT_LVL_ABOVE_GRND_2m +? +1 +tmpl4_0 +TMP +? +? +spec_hgt_lvl_above_grnd +0 +? +1 +2. +? +0 +? +0 +? +? +? +0 +0.0 +0 +0.0 +? +0 +0.0 +0 +0.0 +1 +4.0 +0 +0 +0 +? +? +? +112 +SPFH_ON_SPEC_HGT_LVL_ABOVE_GRND_2m +? +1 +tmpl4_0 +SPFH +? +? +spec_hgt_lvl_above_grnd +0 +? +1 +2. +? +0 +? +0 +? +? +? +0 +0.0 +0 +0.0 +? +0 +0.0 +0 +0.0 +1 +4.0 +0 +0 +0 +? +? +? +113 +DPT_ON_SPEC_HGT_LVL_ABOVE_GRND_2m +? +1 +tmpl4_0 +DPT +? +? +spec_hgt_lvl_above_grnd +0 +? +1 +2. +? +0 +? +0 +? +? +? +0 +0.0 +0 +0.0 +? +0 +0.0 +0 +0.0 +1 +4.0 +0 +0 +0 +? +? +? +114 +RH_ON_SPEC_HGT_LVL_ABOVE_GRND_2m +? +1 +tmpl4_0 +RH +? +? +spec_hgt_lvl_above_grnd +0 +? +1 +2. +? +0 +? +0 +? +? +? +0 +0.0 +0 +0.0 +? +0 +0.0 +0 +0.0 +1 +3.0 +0 +0 +0 +? +? +? +64 +UGRD_ON_SPEC_HGT_LVL_ABOVE_GRND_10m +? +1 +tmpl4_0 +UGRD +? +? +spec_hgt_lvl_above_grnd +0 +? +1 +10. +? +0 +? +0 +? +? +? +0 +0.0 +0 +0.0 +? +0 +0.0 +0 +0.0 +1 +4.0 +0 +0 +0 +? +? +? +65 +VGRD_ON_SPEC_HGT_LVL_ABOVE_GRND_10m +? +1 +tmpl4_0 +VGRD +? +? +spec_hgt_lvl_above_grnd +0 +? +1 +10. +? +0 +? +0 +? +? +? +0 +0.0 +0 +0.0 +? +0 +0.0 +0 +0.0 +1 +4.0 +0 +0 +0 +? +? +? +344 +PBLREG_ON_SURFACE +? +1 +tmpl4_0 +PBLREG +? +? +surface +0 +? +0 +? +? +0 +? +0 +? +? +? +0 +0.0 +0 +0.0 +? +0 +0.0 +0 +0.0 +1 +2.0 +0 +0 +0 +? +? +? +13 +TMP_ON_ISOBARIC_SFC +? +1 +tmpl4_0 +TMP +? +? +isobaric_sfc +0 +? +5 +50000. 70000. 85000. 92500. 100000. +? +0 +? +0 +? +? +? +0 +0.0 +0 +0.0 +? +0 +0.0 +0 +0.0 +1 +-4.0 +0 +0 +0 +? +? +? +15 +DPT_ON_ISOBARIC_SFC +? +1 +tmpl4_0 +DPT +? +? +isobaric_sfc +0 +? +5 +50000. 70000. 85000. 92500. 100000. +? +0 +? +0 +? +? +? +0 +0.0 +0 +0.0 +? +0 +0.0 +0 +0.0 +1 +-4.0 +0 +0 +0 +? +? +? +12 +HGT_ON_ISOBARIC_SFC +? +1 +tmpl4_0 +HGT +? +? +isobaric_sfc +0 +? +4 +50000. 70000. 85000. 100000. +? +0 +? +0 +? +? +? +0 +0.0 +0 +0.0 +? +0 +0.0 +0 +0.0 +1 +-5.0 +0 +0 +0 +? +? +? +18 +UGRD_ON_ISOBARIC_SFC +? +1 +tmpl4_0 +UGRD +? +? +isobaric_sfc +0 +? +7 +25000. 30000. 50000. 70000. 85000. 92500. 100000. +? +0 +? +0 +? +? +? +0 +0.0 +0 +0.0 +? +0 +0.0 +0 +0.0 +1 +-4.0 +0 +0 +0 +? +? +? +19 +VGRD_ON_ISOBARIC_SFC +? +1 +tmpl4_0 +VGRD +? +? +isobaric_sfc +0 +? +7 +25000. 30000. 50000. 70000. 85000. 92500. 100000. +? +0 +? +0 +? +? +? +0 +0.0 +0 +0.0 +? +0 +0.0 +0 +0.0 +1 +-4.0 +0 +0 +0 +? +? +? +32 +CAPE_ON_SURFACE +? +1 +tmpl4_0 +CAPE +? +? +surface +0 +? +0 +? +? +0 +? +0 +? +? +? +0 +0.0 +0 +0.0 +? +0 +0.0 +0 +0.0 +1 +3.0 +0 +0 +0 +? +? +? +566 +BEST_CAPE_ON_SPEC_PRES_ABOVE_GRND +? +1 +tmpl4_0 +CAPE +? +? +spec_pres_above_grnd +0 +? +1 +18000. +spec_pres_above_grnd +0 +? +1 +0. +? +? +0 +0.0 +0 +0.0 +? +0 +0.0 +0 +0.0 +1 +3.0 +0 +0 +0 +? +? +? +582 +MIXED_LAYER_CAPE_ON_SPEC_PRES_ABOVE_GRND +? +1 +tmpl4_0 +CAPE +? +? +spec_pres_above_grnd +0 +? +1 +9000. +spec_pres_above_grnd +0 +? +1 +0. +? +? +0 +0.0 +0 +0.0 +? +0 +0.0 +0 +0.0 +1 +3.0 +0 +0 +0 +? +? +? +712 +AER_OPT_AQM_at550 +? +1 +tmpl4_48 +AOTK +? +? +entire_atmos_single_lyr +0 +? +0 +? +? +0 +? +0 +? +total_aerosol +smaller_than_first_limit +0 +0 +0 +0.0 +? +0 +0.0 +0 +0.0 +1 +9.0 +0 +0 +0 +? +? +? +221 +HPBL_ON_SURFACE +? +1 +tmpl4_0 +HPBL +NCEP +? +surface +0 +? +0 +? +? +0 +? +0 +? +? +? +0 +0.0 +0 +0.0 +? +0 +0.0 +0 +0.0 +1 +6.0 +0 +0 +0 +? +? +? diff --git a/parm/postxconfig-NT-GFS-ANL.txt b/parm/postxconfig-NT-GFS-ANL.txt index bab9d8bc8..83c13293b 100644 --- a/parm/postxconfig-NT-GFS-ANL.txt +++ b/parm/postxconfig-NT-GFS-ANL.txt @@ -1,5 +1,5 @@ 1 -92 +93 GFSPRS 0 ncep_nco @@ -3420,3 +3420,40 @@ surface ? ? ? +996 +LAND_FRAC +? +1 +tmpl4_0 +LANDFRC +NCEP +? +surface +0 +? +0 +? +? +0 +? +0 +? +? +? +0 +0.0 +0 +0.0 +? +0 +0.0 +0 +0.0 +1 +3.0 +0 +0 +0 +? +? +? diff --git a/parm/postxconfig-NT-GFS-F00-TWO.txt b/parm/postxconfig-NT-GFS-F00-TWO.txt index 52e08dde7..229c1f52e 100644 --- a/parm/postxconfig-NT-GFS-F00-TWO.txt +++ b/parm/postxconfig-NT-GFS-F00-TWO.txt @@ -1,6 +1,6 @@ 2 -45 -149 +47 +156 GFSPRS 0 ncep_nco @@ -1767,13 +1767,13 @@ HLCY spec_hgt_lvl_above_grnd 0 ? -1 -3000. +2 +3000. 1000. spec_hgt_lvl_above_grnd 0 ? -1 -0. +2 +0. 0. ? ? 0 @@ -2015,9 +2015,9 @@ surface ? ? ? -180 -VIS_ON_SURFACE -? +410 +GSD_VIS_ON_SURFACE +GSD_visibility on surface 1 tmpl4_0 VIS @@ -5530,6 +5530,265 @@ spec_pres_above_grnd ? ? ? +996 +LAND_FRAC +? +1 +tmpl4_0 +LANDFRC +NCEP +? +surface +0 +? +0 +? +? +0 +? +0 +? +? +? +0 +0.0 +0 +0.0 +? +0 +0.0 +0 +0.0 +1 +3.0 +0 +0 +0 +? +? +? +600 +AER_OPT_GFS_at550 +? +1 +tmpl4_48 +AOTK +? +? +entire_atmos +0 +? +0 +? +? +0 +? +0 +? +total_aerosol +smaller_than_first_limit +6 +20 +0 +0.0 +between_first_second_limit +9 +545 +9 +555 +1 +9.0 +0 +0 +0 +? +? +? +601 +DUST_AER_OPT_GFS_at550 +? +1 +tmpl4_48 +AOTK +? +? +entire_atmos +0 +? +0 +? +? +0 +? +0 +? +dust_dry +smaller_than_first_limit +6 +20 +0 +0.0 +between_first_second_limit +9 +545 +9 +555 +1 +9.0 +0 +0 +0 +? +? +? +602 +SEASALT_AER_OPT_GFS_at550 +? +1 +tmpl4_48 +AOTK +? +? +entire_atmos +0 +? +0 +? +? +0 +? +0 +? +sea_salt_dry +smaller_than_first_limit +6 +20 +0 +0.0 +between_first_second_limit +9 +545 +9 +555 +1 +9.0 +0 +0 +0 +? +? +? +603 +SULFATE_AER_OPT_GFS_at550 +? +1 +tmpl4_48 +AOTK +? +? +entire_atmos +0 +? +0 +? +? +0 +? +0 +? +sulphate_dry +smaller_than_first_limit +6 +20 +0 +0.0 +between_first_second_limit +9 +545 +9 +555 +1 +9.0 +0 +0 +0 +? +? +? +604 +ORGANIC_CARBON_AER_OPT_GFS_at550 +? +1 +tmpl4_48 +AOTK +? +? +entire_atmos +0 +? +0 +? +? +0 +? +0 +? +particulate_org_matter_dry +smaller_than_first_limit +6 +20 +0 +0.0 +between_first_second_limit +9 +545 +9 +555 +1 +9.0 +0 +0 +0 +? +? +? +605 +BLACK_CARBON_AER_OPT_GFS_at550 +? +1 +tmpl4_48 +AOTK +? +? +entire_atmos +0 +? +0 +? +? +0 +? +0 +? +black_carbon_dry +smaller_than_first_limit +6 +20 +0 +0.0 +between_first_second_limit +9 +545 +9 +555 +1 +9.0 +0 +0 +0 +? +? +? GFSFLX 0 ncep_nco @@ -5805,6 +6064,43 @@ surface ? ? ? +549 +FDNSSTMP_ON_SURFACE +? +1 +tmpl4_0 +FDNSSTMP +? +? +surface +0 +? +0 +? +? +0 +? +0 +? +? +? +0 +0.0 +0 +0.0 +? +0 +0.0 +0 +0.0 +1 +4.0 +0 +0 +0 +? +? +? 116 TSOIL_ON_DEPTH_BEL_LAND_SFC ? @@ -7211,3 +7507,40 @@ depth_bel_land_sfc ? ? ? +996 +LAND_FRAC +? +1 +tmpl4_0 +LANDFRC +NCEP +? +surface +0 +? +0 +? +? +0 +? +0 +? +? +? +0 +0.0 +0 +0.0 +? +0 +0.0 +0 +0.0 +1 +3.0 +0 +0 +0 +? +? +? diff --git a/parm/postxconfig-NT-GFS-F00.txt b/parm/postxconfig-NT-GFS-F00.txt index 68bfb92cc..bf2548acd 100644 --- a/parm/postxconfig-NT-GFS-F00.txt +++ b/parm/postxconfig-NT-GFS-F00.txt @@ -1,5 +1,5 @@ 1 -149 +156 GFSPRS 0 ncep_nco @@ -1766,13 +1766,13 @@ HLCY spec_hgt_lvl_above_grnd 0 ? -1 -3000. +2 +3000. 1000. spec_hgt_lvl_above_grnd 0 ? -1 -0. +2 +0. 0. ? ? 0 @@ -2014,9 +2014,9 @@ surface ? ? ? -180 -VIS_ON_SURFACE -? +410 +GSD_VIS_ON_SURFACE +GSD_visibility on surface 1 tmpl4_0 VIS @@ -5529,3 +5529,262 @@ spec_pres_above_grnd ? ? ? +996 +LAND_FRAC +? +1 +tmpl4_0 +LANDFRC +NCEP +? +surface +0 +? +0 +? +? +0 +? +0 +? +? +? +0 +0.0 +0 +0.0 +? +0 +0.0 +0 +0.0 +1 +3.0 +0 +0 +0 +? +? +? +600 +AER_OPT_GFS_at550 +? +1 +tmpl4_48 +AOTK +? +? +entire_atmos +0 +? +0 +? +? +0 +? +0 +? +total_aerosol +smaller_than_first_limit +6 +20 +0 +0.0 +between_first_second_limit +9 +545 +9 +555 +1 +9.0 +0 +0 +0 +? +? +? +601 +DUST_AER_OPT_GFS_at550 +? +1 +tmpl4_48 +AOTK +? +? +entire_atmos +0 +? +0 +? +? +0 +? +0 +? +dust_dry +smaller_than_first_limit +6 +20 +0 +0.0 +between_first_second_limit +9 +545 +9 +555 +1 +9.0 +0 +0 +0 +? +? +? +602 +SEASALT_AER_OPT_GFS_at550 +? +1 +tmpl4_48 +AOTK +? +? +entire_atmos +0 +? +0 +? +? +0 +? +0 +? +sea_salt_dry +smaller_than_first_limit +6 +20 +0 +0.0 +between_first_second_limit +9 +545 +9 +555 +1 +9.0 +0 +0 +0 +? +? +? +603 +SULFATE_AER_OPT_GFS_at550 +? +1 +tmpl4_48 +AOTK +? +? +entire_atmos +0 +? +0 +? +? +0 +? +0 +? +sulphate_dry +smaller_than_first_limit +6 +20 +0 +0.0 +between_first_second_limit +9 +545 +9 +555 +1 +9.0 +0 +0 +0 +? +? +? +604 +ORGANIC_CARBON_AER_OPT_GFS_at550 +? +1 +tmpl4_48 +AOTK +? +? +entire_atmos +0 +? +0 +? +? +0 +? +0 +? +particulate_org_matter_dry +smaller_than_first_limit +6 +20 +0 +0.0 +between_first_second_limit +9 +545 +9 +555 +1 +9.0 +0 +0 +0 +? +? +? +605 +BLACK_CARBON_AER_OPT_GFS_at550 +? +1 +tmpl4_48 +AOTK +? +? +entire_atmos +0 +? +0 +? +? +0 +? +0 +? +black_carbon_dry +smaller_than_first_limit +6 +20 +0 +0.0 +between_first_second_limit +9 +545 +9 +555 +1 +9.0 +0 +0 +0 +? +? +? diff --git a/parm/postxconfig-NT-GFS-FLUX-F00.txt b/parm/postxconfig-NT-GFS-FLUX-F00.txt index b21e83277..26b7058c8 100644 --- a/parm/postxconfig-NT-GFS-FLUX-F00.txt +++ b/parm/postxconfig-NT-GFS-FLUX-F00.txt @@ -1,5 +1,5 @@ 1 -45 +47 GFSPRS 0 ncep_nco @@ -275,6 +275,43 @@ surface ? ? ? +549 +FDNSSTMP_ON_SURFACE +? +1 +tmpl4_0 +FDNSSTMP +? +? +surface +0 +? +0 +? +? +0 +? +0 +? +? +? +0 +0.0 +0 +0.0 +? +0 +0.0 +0 +0.0 +1 +4.0 +0 +0 +0 +? +? +? 116 TSOIL_ON_DEPTH_BEL_LAND_SFC ? @@ -1681,3 +1718,40 @@ depth_bel_land_sfc ? ? ? +996 +LAND_FRAC +? +1 +tmpl4_0 +LANDFRC +NCEP +? +surface +0 +? +0 +? +? +0 +? +0 +? +? +? +0 +0.0 +0 +0.0 +? +0 +0.0 +0 +0.0 +1 +3.0 +0 +0 +0 +? +? +? diff --git a/parm/postxconfig-NT-GFS-FLUX.txt b/parm/postxconfig-NT-GFS-FLUX.txt index 6847ad0dc..d5f224d47 100644 --- a/parm/postxconfig-NT-GFS-FLUX.txt +++ b/parm/postxconfig-NT-GFS-FLUX.txt @@ -1,5 +1,5 @@ 1 -104 +112 GFSPRS 0 ncep_nco @@ -275,6 +275,43 @@ surface ? ? ? +549 +FDNSSTMP_ON_SURFACE +? +1 +tmpl4_0 +FDNSSTMP +? +? +surface +0 +? +0 +? +? +0 +? +0 +? +? +? +0 +0.0 +0 +0.0 +? +0 +0.0 +0 +0.0 +1 +4.0 +0 +0 +0 +? +? +? 116 TSOIL_ON_DEPTH_BEL_LAND_SFC ? @@ -3864,3 +3901,262 @@ surface ? ? ? +996 +LAND_FRAC +? +1 +tmpl4_0 +LANDFRC +NCEP +? +surface +0 +? +0 +? +? +0 +? +0 +? +? +? +0 +0.0 +0 +0.0 +? +0 +0.0 +0 +0.0 +1 +3.0 +0 +0 +0 +? +? +? +997 +INST_PREC_ADVEC_HEAT +? +1 +tmpl4_0 +PAHFLX +NCEP +? +surface +0 +? +0 +? +? +0 +? +0 +? +? +? +0 +0.0 +0 +0.0 +? +0 +0.0 +0 +0.0 +1 +3.0 +0 +0 +0 +? +? +? +998 +WATER_AQUIFER +? +1 +tmpl4_0 +WATERSA +NCEP +? +surface +0 +? +0 +? +? +0 +? +0 +? +? +? +0 +0.0 +0 +0.0 +? +0 +0.0 +0 +0.0 +1 +3.0 +0 +0 +0 +? +? +? +999 +ACM_EIWATER_ON_SURFACE +? +1 +tmpl4_8 +EIWATER +NCEP +ACM +surface +0 +? +0 +? +? +0 +? +0 +? +? +? +0 +0.0 +0 +0.0 +? +0 +0.0 +0 +0.0 +1 +3.0 +0 +0 +0 +? +? +? +1000 +ACM_PLANTTR_ON_SURFACE +? +1 +tmpl4_8 +PLANTTR +NCEP +ACM +surface +0 +? +0 +? +? +0 +? +0 +? +? +? +0 +0.0 +0 +0.0 +? +0 +0.0 +0 +0.0 +1 +3.0 +0 +0 +0 +? +? +? +1001 +ACM_SOILSE_ON_SURFACE +? +1 +tmpl4_8 +SOILSE +NCEP +ACM +surface +0 +? +0 +? +? +0 +? +0 +? +? +? +0 +0.0 +0 +0.0 +? +0 +0.0 +0 +0.0 +1 +3.0 +0 +0 +0 +? +? +? +1002 +AVE_PREC_ADVEC_HEAT +? +1 +tmpl4_8 +PAHFLX +NCEP +AVE +surface +0 +? +0 +? +? +0 +? +0 +? +? +? +0 +0.0 +0 +0.0 +? +0 +0.0 +0 +0.0 +1 +3.0 +0 +0 +0 +? +? +? diff --git a/parm/postxconfig-NT-GFS-TWO.txt b/parm/postxconfig-NT-GFS-TWO.txt index 4bd605e54..ba22c218f 100644 --- a/parm/postxconfig-NT-GFS-TWO.txt +++ b/parm/postxconfig-NT-GFS-TWO.txt @@ -1,6 +1,6 @@ 2 -104 -196 +112 +210 GFSPRS 0 ncep_nco @@ -1767,13 +1767,13 @@ HLCY spec_hgt_lvl_above_grnd 0 ? -1 -3000. +2 +3000. 1000. spec_hgt_lvl_above_grnd 0 ? -1 -0. +2 +0. 0. ? ? 0 @@ -2607,9 +2607,9 @@ entire_atmos_single_lyr ? ? ? -180 -VIS_ON_SURFACE -? +410 +GSD_VIS_ON_SURFACE +GSD_visibility on surface 1 tmpl4_0 VIS @@ -7269,35 +7269,19 @@ spec_pres_above_grnd ? ? ? -GFSFLX -0 -ncep_nco -v2003 -local_tab_yes1 -fcst -oper -fcst -fcst -hour -nws_ncep -gfs_avn -complex_packing_spatial_diff -2nd_ord_sptdiff -fltng_pnt -lossless -106 -TMP_ON_SPEC_HGT_LVL_ABOVE_GRND_2m +996 +LAND_FRAC ? 1 tmpl4_0 -TMP +LANDFRC +NCEP ? +surface +0 ? -spec_hgt_lvl_above_grnd 0 ? -1 -2. ? 0 ? @@ -7315,26 +7299,26 @@ spec_hgt_lvl_above_grnd 0 0.0 1 -4.0 +3.0 0 0 0 ? ? ? -112 -SPFH_ON_SPEC_HGT_LVL_ABOVE_GRND_2m +746 +ACM_GRAUPEL_ON_SURFACE ? 1 -tmpl4_0 -SPFH -? +tmpl4_8 +FROZR +NCEP +ACM +surface +0 ? -spec_hgt_lvl_above_grnd 0 ? -1 -2. ? 0 ? @@ -7352,26 +7336,26 @@ spec_hgt_lvl_above_grnd 0 0.0 1 -7.0 +6.0 0 0 0 ? ? ? -64 -UGRD_ON_SPEC_HGT_LVL_ABOVE_GRND_10m -? +775 +BUCKET_GRAUPEL_ON_SURFACE +bucket graupel precipitation on surface 1 -tmpl4_0 -UGRD -? +tmpl4_8 +FROZR +NCEP +ACM +surface +0 ? -spec_hgt_lvl_above_grnd 0 ? -1 -10. ? 0 ? @@ -7389,26 +7373,26 @@ spec_hgt_lvl_above_grnd 0 0.0 1 -4.0 +6.0 0 0 0 ? ? ? -65 -VGRD_ON_SPEC_HGT_LVL_ABOVE_GRND_10m +782 +ACM_FRAIN_ON_SURFACE ? 1 -tmpl4_0 -VGRD -? +tmpl4_8 +FRZR +NCEP +ACM +surface +0 ? -spec_hgt_lvl_above_grnd 0 ? -1 -10. ? 0 ? @@ -7433,14 +7417,14 @@ spec_hgt_lvl_above_grnd ? ? ? -24 -PRES_ON_SURFACE +1003 +BUCKET_FRAIN_ON_SURFACE ? 1 -tmpl4_0 -PRES -? -? +tmpl4_8 +FRZR +NCEP +ACM surface 0 ? @@ -7463,21 +7447,21 @@ surface 0 0.0 1 -6.0 +4.0 0 0 0 ? ? ? -25 -HGT_ON_SURFACE +1004 +ACM_SNOWFALL_ON_SURFACE ? 1 -tmpl4_0 -HGT -? +tmpl4_8 +TSNOWP ? +ACM surface 0 ? @@ -7500,21 +7484,21 @@ surface 0 0.0 1 -6.0 +4.0 0 0 0 ? ? ? -26 -TMP_ON_SURFACE +1005 +BUCKET_SNOWFALL_ON_SURFACE ? 1 -tmpl4_0 -TMP -? +tmpl4_8 +TSNOWP ? +ACM surface 0 ? @@ -7544,163 +7528,163 @@ surface ? ? ? -116 -TSOIL_ON_DEPTH_BEL_LAND_SFC +600 +AER_OPT_GFS_at550 ? 1 -tmpl4_0 -TSOIL +tmpl4_48 +AOTK ? ? -depth_bel_land_sfc -4 -2 2 2 2 -4 -0. 10. 40. 100. -depth_bel_land_sfc -4 -2 2 2 2 -4 -10. 40. 100. 200. -? +entire_atmos +0 ? 0 -0.0 +? +? 0 -0.0 ? 0 -0.0 +? +total_aerosol +smaller_than_first_limit +6 +20 0 0.0 +between_first_second_limit +9 +545 +9 +555 1 -4.0 +9.0 0 0 0 ? ? ? -117 -SOILW_ON_DEPTH_BEL_LAND_SFC +601 +DUST_AER_OPT_GFS_at550 ? 1 -tmpl4_0 -SOILW -NCEP +tmpl4_48 +AOTK ? -depth_bel_land_sfc -4 -2 2 2 2 -4 -0. 10. 40. 100. -depth_bel_land_sfc -4 -2 2 2 2 -4 -10. 40. 100. 200. ? +entire_atmos +0 ? 0 -0.0 +? +? 0 -0.0 ? 0 -0.0 +? +dust_dry +smaller_than_first_limit +6 +20 0 0.0 +between_first_second_limit +9 +545 +9 +555 1 -3.0 +9.0 0 0 0 ? ? ? -225 -SOILL_ON_DEPTH_BEL_LAND_SFC +602 +SEASALT_AER_OPT_GFS_at550 ? 1 -tmpl4_0 -SOILL -NCEP +tmpl4_48 +AOTK ? -depth_bel_land_sfc -4 -2 2 2 2 -4 -0. 10. 40. 100. -depth_bel_land_sfc -4 -2 2 2 2 -4 -10. 40. 100. 200. ? +entire_atmos +0 ? 0 -0.0 +? +? 0 -0.0 ? 0 -0.0 +? +sea_salt_dry +smaller_than_first_limit +6 +20 0 0.0 +between_first_second_limit +9 +545 +9 +555 1 -3.0 +9.0 0 0 0 ? ? ? -118 -CNWAT_ON_SURFACE +603 +SULFATE_AER_OPT_GFS_at550 ? 1 -tmpl4_0 -CNWAT -NCEP -? -surface -0 -? -0 +tmpl4_48 +AOTK ? ? +entire_atmos 0 ? 0 ? ? -? -0 -0.0 0 -0.0 ? 0 -0.0 +? +sulphate_dry +smaller_than_first_limit +6 +20 0 0.0 +between_first_second_limit +9 +545 +9 +555 1 -3.0 +9.0 0 0 0 ? ? ? -119 -WEASD_ON_SURFACE +604 +ORGANIC_CARBON_AER_OPT_GFS_at550 ? 1 -tmpl4_0 -WEASD +tmpl4_48 +AOTK ? ? -surface +entire_atmos 0 ? 0 @@ -7710,69 +7694,69 @@ surface ? 0 ? -? -? -0 -0.0 -0 -0.0 -? -0 -0.0 +particulate_org_matter_dry +smaller_than_first_limit +6 +20 0 0.0 +between_first_second_limit +9 +545 +9 +555 1 -6.0 +9.0 0 0 0 ? ? ? -517 -AVE_PEVPR_ON_SURFACE +605 +BLACK_CARBON_AER_OPT_GFS_at550 ? 1 -tmpl4_8 -PEVPR -NCEP -AVE -surface -0 -? -0 +tmpl4_48 +AOTK ? ? +entire_atmos 0 ? 0 ? ? -? -0 -0.0 0 -0.0 ? 0 -0.0 +? +black_carbon_dry +smaller_than_first_limit +6 +20 0 0.0 +between_first_second_limit +9 +545 +9 +555 1 -6.0 +9.0 0 0 0 ? ? ? -242 -PEVPR_ON_SURFACE +1006 +SDEN_ON_SURFACE ? 1 tmpl4_0 -PEVPR -NCEP +SDEN +? ? surface 0 @@ -7803,15 +7787,586 @@ surface ? ? ? -349 -ICETK_ON_SURFACE -? -1 -tmpl4_0 -ICETK -? -? -surface +GFSFLX +0 +ncep_nco +v2003 +local_tab_yes1 +fcst +oper +fcst +fcst +hour +nws_ncep +gfs_avn +complex_packing_spatial_diff +2nd_ord_sptdiff +fltng_pnt +lossless +106 +TMP_ON_SPEC_HGT_LVL_ABOVE_GRND_2m +? +1 +tmpl4_0 +TMP +? +? +spec_hgt_lvl_above_grnd +0 +? +1 +2. +? +0 +? +0 +? +? +? +0 +0.0 +0 +0.0 +? +0 +0.0 +0 +0.0 +1 +4.0 +0 +0 +0 +? +? +? +112 +SPFH_ON_SPEC_HGT_LVL_ABOVE_GRND_2m +? +1 +tmpl4_0 +SPFH +? +? +spec_hgt_lvl_above_grnd +0 +? +1 +2. +? +0 +? +0 +? +? +? +0 +0.0 +0 +0.0 +? +0 +0.0 +0 +0.0 +1 +7.0 +0 +0 +0 +? +? +? +64 +UGRD_ON_SPEC_HGT_LVL_ABOVE_GRND_10m +? +1 +tmpl4_0 +UGRD +? +? +spec_hgt_lvl_above_grnd +0 +? +1 +10. +? +0 +? +0 +? +? +? +0 +0.0 +0 +0.0 +? +0 +0.0 +0 +0.0 +1 +4.0 +0 +0 +0 +? +? +? +65 +VGRD_ON_SPEC_HGT_LVL_ABOVE_GRND_10m +? +1 +tmpl4_0 +VGRD +? +? +spec_hgt_lvl_above_grnd +0 +? +1 +10. +? +0 +? +0 +? +? +? +0 +0.0 +0 +0.0 +? +0 +0.0 +0 +0.0 +1 +4.0 +0 +0 +0 +? +? +? +24 +PRES_ON_SURFACE +? +1 +tmpl4_0 +PRES +? +? +surface +0 +? +0 +? +? +0 +? +0 +? +? +? +0 +0.0 +0 +0.0 +? +0 +0.0 +0 +0.0 +1 +6.0 +0 +0 +0 +? +? +? +25 +HGT_ON_SURFACE +? +1 +tmpl4_0 +HGT +? +? +surface +0 +? +0 +? +? +0 +? +0 +? +? +? +0 +0.0 +0 +0.0 +? +0 +0.0 +0 +0.0 +1 +6.0 +0 +0 +0 +? +? +? +26 +TMP_ON_SURFACE +? +1 +tmpl4_0 +TMP +? +? +surface +0 +? +0 +? +? +0 +? +0 +? +? +? +0 +0.0 +0 +0.0 +? +0 +0.0 +0 +0.0 +1 +4.0 +0 +0 +0 +? +? +? +549 +FDNSSTMP_ON_SURFACE +? +1 +tmpl4_0 +FDNSSTMP +? +? +surface +0 +? +0 +? +? +0 +? +0 +? +? +? +0 +0.0 +0 +0.0 +? +0 +0.0 +0 +0.0 +1 +4.0 +0 +0 +0 +? +? +? +116 +TSOIL_ON_DEPTH_BEL_LAND_SFC +? +1 +tmpl4_0 +TSOIL +? +? +depth_bel_land_sfc +4 +2 2 2 2 +4 +0. 10. 40. 100. +depth_bel_land_sfc +4 +2 2 2 2 +4 +10. 40. 100. 200. +? +? +0 +0.0 +0 +0.0 +? +0 +0.0 +0 +0.0 +1 +4.0 +0 +0 +0 +? +? +? +117 +SOILW_ON_DEPTH_BEL_LAND_SFC +? +1 +tmpl4_0 +SOILW +NCEP +? +depth_bel_land_sfc +4 +2 2 2 2 +4 +0. 10. 40. 100. +depth_bel_land_sfc +4 +2 2 2 2 +4 +10. 40. 100. 200. +? +? +0 +0.0 +0 +0.0 +? +0 +0.0 +0 +0.0 +1 +3.0 +0 +0 +0 +? +? +? +225 +SOILL_ON_DEPTH_BEL_LAND_SFC +? +1 +tmpl4_0 +SOILL +NCEP +? +depth_bel_land_sfc +4 +2 2 2 2 +4 +0. 10. 40. 100. +depth_bel_land_sfc +4 +2 2 2 2 +4 +10. 40. 100. 200. +? +? +0 +0.0 +0 +0.0 +? +0 +0.0 +0 +0.0 +1 +3.0 +0 +0 +0 +? +? +? +118 +CNWAT_ON_SURFACE +? +1 +tmpl4_0 +CNWAT +NCEP +? +surface +0 +? +0 +? +? +0 +? +0 +? +? +? +0 +0.0 +0 +0.0 +? +0 +0.0 +0 +0.0 +1 +3.0 +0 +0 +0 +? +? +? +119 +WEASD_ON_SURFACE +? +1 +tmpl4_0 +WEASD +? +? +surface +0 +? +0 +? +? +0 +? +0 +? +? +? +0 +0.0 +0 +0.0 +? +0 +0.0 +0 +0.0 +1 +6.0 +0 +0 +0 +? +? +? +517 +AVE_PEVPR_ON_SURFACE +? +1 +tmpl4_8 +PEVPR +NCEP +AVE +surface +0 +? +0 +? +? +0 +? +0 +? +? +? +0 +0.0 +0 +0.0 +? +0 +0.0 +0 +0.0 +1 +6.0 +0 +0 +0 +? +? +? +242 +PEVPR_ON_SURFACE +? +1 +tmpl4_0 +PEVPR +NCEP +? +surface +0 +? +0 +? +? +0 +? +0 +? +? +? +0 +0.0 +0 +0.0 +? +0 +0.0 +0 +0.0 +1 +6.0 +0 +0 +0 +? +? +? +349 +ICETK_ON_SURFACE +? +1 +tmpl4_0 +ICETK +? +? +surface 0 ? 0 @@ -11133,3 +11688,262 @@ surface ? ? ? +996 +LAND_FRAC +? +1 +tmpl4_0 +LANDFRC +NCEP +? +surface +0 +? +0 +? +? +0 +? +0 +? +? +? +0 +0.0 +0 +0.0 +? +0 +0.0 +0 +0.0 +1 +3.0 +0 +0 +0 +? +? +? +997 +INST_PREC_ADVEC_HEAT +? +1 +tmpl4_0 +PAHFLX +NCEP +? +surface +0 +? +0 +? +? +0 +? +0 +? +? +? +0 +0.0 +0 +0.0 +? +0 +0.0 +0 +0.0 +1 +3.0 +0 +0 +0 +? +? +? +998 +WATER_AQUIFER +? +1 +tmpl4_0 +WATERSA +NCEP +? +surface +0 +? +0 +? +? +0 +? +0 +? +? +? +0 +0.0 +0 +0.0 +? +0 +0.0 +0 +0.0 +1 +3.0 +0 +0 +0 +? +? +? +999 +ACM_EIWATER_ON_SURFACE +? +1 +tmpl4_8 +EIWATER +NCEP +ACM +surface +0 +? +0 +? +? +0 +? +0 +? +? +? +0 +0.0 +0 +0.0 +? +0 +0.0 +0 +0.0 +1 +3.0 +0 +0 +0 +? +? +? +1000 +ACM_PLANTTR_ON_SURFACE +? +1 +tmpl4_8 +PLANTTR +NCEP +ACM +surface +0 +? +0 +? +? +0 +? +0 +? +? +? +0 +0.0 +0 +0.0 +? +0 +0.0 +0 +0.0 +1 +3.0 +0 +0 +0 +? +? +? +1001 +ACM_SOILSE_ON_SURFACE +? +1 +tmpl4_8 +SOILSE +NCEP +ACM +surface +0 +? +0 +? +? +0 +? +0 +? +? +? +0 +0.0 +0 +0.0 +? +0 +0.0 +0 +0.0 +1 +3.0 +0 +0 +0 +? +? +? +1002 +AVE_PREC_ADVEC_HEAT +? +1 +tmpl4_8 +PAHFLX +NCEP +AVE +surface +0 +? +0 +? +? +0 +? +0 +? +? +? +0 +0.0 +0 +0.0 +? +0 +0.0 +0 +0.0 +1 +3.0 +0 +0 +0 +? +? +? diff --git a/parm/postxconfig-NT-GFS.txt b/parm/postxconfig-NT-GFS.txt index dd2922259..47cc36f4c 100644 --- a/parm/postxconfig-NT-GFS.txt +++ b/parm/postxconfig-NT-GFS.txt @@ -1,5 +1,5 @@ 1 -196 +210 GFSPRS 0 ncep_nco @@ -1766,13 +1766,13 @@ HLCY spec_hgt_lvl_above_grnd 0 ? -1 -3000. +2 +3000. 1000. spec_hgt_lvl_above_grnd 0 ? -1 -0. +2 +0. 0. ? ? 0 @@ -2606,9 +2606,9 @@ entire_atmos_single_lyr ? ? ? -180 -VIS_ON_SURFACE -? +410 +GSD_VIS_ON_SURFACE +GSD_visibility on surface 1 tmpl4_0 VIS @@ -7268,3 +7268,521 @@ spec_pres_above_grnd ? ? ? +996 +LAND_FRAC +? +1 +tmpl4_0 +LANDFRC +NCEP +? +surface +0 +? +0 +? +? +0 +? +0 +? +? +? +0 +0.0 +0 +0.0 +? +0 +0.0 +0 +0.0 +1 +3.0 +0 +0 +0 +? +? +? +746 +ACM_GRAUPEL_ON_SURFACE +? +1 +tmpl4_8 +FROZR +NCEP +ACM +surface +0 +? +0 +? +? +0 +? +0 +? +? +? +0 +0.0 +0 +0.0 +? +0 +0.0 +0 +0.0 +1 +6.0 +0 +0 +0 +? +? +? +775 +BUCKET_GRAUPEL_ON_SURFACE +bucket graupel precipitation on surface +1 +tmpl4_8 +FROZR +NCEP +ACM +surface +0 +? +0 +? +? +0 +? +0 +? +? +? +0 +0.0 +0 +0.0 +? +0 +0.0 +0 +0.0 +1 +6.0 +0 +0 +0 +? +? +? +782 +ACM_FRAIN_ON_SURFACE +? +1 +tmpl4_8 +FRZR +NCEP +ACM +surface +0 +? +0 +? +? +0 +? +0 +? +? +? +0 +0.0 +0 +0.0 +? +0 +0.0 +0 +0.0 +1 +4.0 +0 +0 +0 +? +? +? +1003 +BUCKET_FRAIN_ON_SURFACE +? +1 +tmpl4_8 +FRZR +NCEP +ACM +surface +0 +? +0 +? +? +0 +? +0 +? +? +? +0 +0.0 +0 +0.0 +? +0 +0.0 +0 +0.0 +1 +4.0 +0 +0 +0 +? +? +? +1004 +ACM_SNOWFALL_ON_SURFACE +? +1 +tmpl4_8 +TSNOWP +? +ACM +surface +0 +? +0 +? +? +0 +? +0 +? +? +? +0 +0.0 +0 +0.0 +? +0 +0.0 +0 +0.0 +1 +4.0 +0 +0 +0 +? +? +? +1005 +BUCKET_SNOWFALL_ON_SURFACE +? +1 +tmpl4_8 +TSNOWP +? +ACM +surface +0 +? +0 +? +? +0 +? +0 +? +? +? +0 +0.0 +0 +0.0 +? +0 +0.0 +0 +0.0 +1 +4.0 +0 +0 +0 +? +? +? +600 +AER_OPT_GFS_at550 +? +1 +tmpl4_48 +AOTK +? +? +entire_atmos +0 +? +0 +? +? +0 +? +0 +? +total_aerosol +smaller_than_first_limit +6 +20 +0 +0.0 +between_first_second_limit +9 +545 +9 +555 +1 +9.0 +0 +0 +0 +? +? +? +601 +DUST_AER_OPT_GFS_at550 +? +1 +tmpl4_48 +AOTK +? +? +entire_atmos +0 +? +0 +? +? +0 +? +0 +? +dust_dry +smaller_than_first_limit +6 +20 +0 +0.0 +between_first_second_limit +9 +545 +9 +555 +1 +9.0 +0 +0 +0 +? +? +? +602 +SEASALT_AER_OPT_GFS_at550 +? +1 +tmpl4_48 +AOTK +? +? +entire_atmos +0 +? +0 +? +? +0 +? +0 +? +sea_salt_dry +smaller_than_first_limit +6 +20 +0 +0.0 +between_first_second_limit +9 +545 +9 +555 +1 +9.0 +0 +0 +0 +? +? +? +603 +SULFATE_AER_OPT_GFS_at550 +? +1 +tmpl4_48 +AOTK +? +? +entire_atmos +0 +? +0 +? +? +0 +? +0 +? +sulphate_dry +smaller_than_first_limit +6 +20 +0 +0.0 +between_first_second_limit +9 +545 +9 +555 +1 +9.0 +0 +0 +0 +? +? +? +604 +ORGANIC_CARBON_AER_OPT_GFS_at550 +? +1 +tmpl4_48 +AOTK +? +? +entire_atmos +0 +? +0 +? +? +0 +? +0 +? +particulate_org_matter_dry +smaller_than_first_limit +6 +20 +0 +0.0 +between_first_second_limit +9 +545 +9 +555 +1 +9.0 +0 +0 +0 +? +? +? +605 +BLACK_CARBON_AER_OPT_GFS_at550 +? +1 +tmpl4_48 +AOTK +? +? +entire_atmos +0 +? +0 +? +? +0 +? +0 +? +black_carbon_dry +smaller_than_first_limit +6 +20 +0 +0.0 +between_first_second_limit +9 +545 +9 +555 +1 +9.0 +0 +0 +0 +? +? +? +1006 +SDEN_ON_SURFACE +? +1 +tmpl4_0 +SDEN +? +? +surface +0 +? +0 +? +? +0 +? +0 +? +? +? +0 +0.0 +0 +0.0 +? +0 +0.0 +0 +0.0 +1 +6.0 +0 +0 +0 +? +? +? diff --git a/parm/postxconfig-NT-UFS-aerosol-F00.txt b/parm/postxconfig-NT-UFS-aerosol-F00.txt new file mode 100644 index 000000000..fd8828777 --- /dev/null +++ b/parm/postxconfig-NT-UFS-aerosol-F00.txt @@ -0,0 +1,1757 @@ +1 +47 +GFSPRS +0 +ncep_nco +v2003 +local_tab_yes1 +fcst +oper +fcst +fcst +hour +nws_ncep +gfs_avn +complex_packing_spatial_diff +2nd_ord_sptdiff +fltng_pnt +lossless +12 +HGT_ON_ISOBARIC_SFC +? +1 +tmpl4_0 +HGT +? +? +isobaric_sfc +0 +? +57 +1. 2. 4. 7. 10. 20. 40. 70. 100. 200. 300. 500. 700. 1000. 1500. 2000. 3000. 4000. 5000. 7000. 10000. 12500. 15000. 17500. 20000. 22500. 25000. 27500. 30000. 32500. 35000. 37500. 40000. 42500. 45000. 47500. 50000. 52500. 55000. 57500. 60000. 62500. 65000. 67500. 70000. 72500. 75000. 77500. 80000. 82500. 85000. 87500. 90000. 92500. 95000. 97500. 100000. +? +0 +? +0 +? +? +? +0 +0.0 +0 +0.0 +? +0 +0.0 +0 +0.0 +1 +6.0 +0 +0 +0 +? +? +? +13 +TMP_ON_ISOBARIC_SFC +? +1 +tmpl4_0 +TMP +? +? +isobaric_sfc +0 +? +57 +1. 2. 4. 7. 10. 20. 40. 70. 100. 200. 300. 500. 700. 1000. 1500. 2000. 3000. 4000. 5000. 7000. 10000. 12500. 15000. 17500. 20000. 22500. 25000. 27500. 30000. 32500. 35000. 37500. 40000. 42500. 45000. 47500. 50000. 52500. 55000. 57500. 60000. 62500. 65000. 67500. 70000. 72500. 75000. 77500. 80000. 82500. 85000. 87500. 90000. 92500. 95000. 97500. 100000. +? +0 +? +0 +? +? +? +0 +0.0 +0 +0.0 +? +0 +0.0 +0 +0.0 +1 +4.0 +0 +0 +0 +? +? +? +18 +UGRD_ON_ISOBARIC_SFC +? +1 +tmpl4_0 +UGRD +? +? +isobaric_sfc +0 +? +57 +1. 2. 4. 7. 10. 20. 40. 70. 100. 200. 300. 500. 700. 1000. 1500. 2000. 3000. 4000. 5000. 7000. 10000. 12500. 15000. 17500. 20000. 22500. 25000. 27500. 30000. 32500. 35000. 37500. 40000. 42500. 45000. 47500. 50000. 52500. 55000. 57500. 60000. 62500. 65000. 67500. 70000. 72500. 75000. 77500. 80000. 82500. 85000. 87500. 90000. 92500. 95000. 97500. 100000. +? +0 +? +0 +? +? +? +0 +0.0 +0 +0.0 +? +0 +0.0 +0 +0.0 +1 +4.0 +0 +0 +0 +? +? +? +19 +VGRD_ON_ISOBARIC_SFC +? +1 +tmpl4_0 +VGRD +? +? +isobaric_sfc +0 +? +57 +1. 2. 4. 7. 10. 20. 40. 70. 100. 200. 300. 500. 700. 1000. 1500. 2000. 3000. 4000. 5000. 7000. 10000. 12500. 15000. 17500. 20000. 22500. 25000. 27500. 30000. 32500. 35000. 37500. 40000. 42500. 45000. 47500. 50000. 52500. 55000. 57500. 60000. 62500. 65000. 67500. 70000. 72500. 75000. 77500. 80000. 82500. 85000. 87500. 90000. 92500. 95000. 97500. 100000. +? +0 +? +0 +? +? +? +0 +0.0 +0 +0.0 +? +0 +0.0 +0 +0.0 +1 +4.0 +0 +0 +0 +? +? +? +268 +O3MR_ON_ISOBARIC_SFC +? +1 +tmpl4_0 +O3MR +NCEP +? +isobaric_sfc +0 +? +57 +1. 2. 4. 7. 10. 20. 40. 70. 100. 200. 300. 500. 700. 1000. 1500. 2000. 3000. 4000. 5000. 7000. 10000. 12500. 15000. 17500. 20000. 22500. 25000. 27500. 30000. 32500. 35000. 37500. 40000. 42500. 45000. 47500. 50000. 52500. 55000. 57500. 60000. 62500. 65000. 67500. 70000. 72500. 75000. 77500. 80000. 82500. 85000. 87500. 90000. 92500. 95000. 97500. 100000. +? +0 +? +0 +? +? +? +0 +0.0 +0 +0.0 +? +0 +0.0 +0 +0.0 +1 +5.0 +0 +0 +0 +? +? +? +629 +DUST1_ON_HYBRID_LVL +? +1 +tmpl4_48 +PMTF +NCEP +? +hybrid_lvl +0 +? +1 +1. +? +0 +? +0 +? +dust_dry +between_first_second_limit_noincl2ndlmt +7 +2 +7 +20 +? +0 +0.0 +0 +0.0 +1 +11.0 +0 +0 +0 +? +? +? +630 +DUST2_ON_HYBRID_LVL +? +1 +tmpl4_48 +PMTF +NCEP +? +hybrid_lvl +0 +? +1 +1. +? +0 +? +0 +? +dust_dry +between_first_second_limit_noincl2ndlmt +7 +20 +7 +36 +? +0 +0.0 +0 +0.0 +1 +11.0 +0 +0 +0 +? +? +? +631 +DUST3_ON_HYBRID_LVL +? +1 +tmpl4_48 +PMTC +NCEP +? +hybrid_lvl +0 +? +1 +1. +? +0 +? +0 +? +dust_dry +between_first_second_limit_noincl2ndlmt +7 +36 +7 +60 +? +0 +0.0 +0 +0.0 +1 +11.0 +0 +0 +0 +? +? +? +632 +DUST4_ON_HYBRID_LVL +? +1 +tmpl4_48 +PMTC +NCEP +? +hybrid_lvl +0 +? +1 +1. +? +0 +? +0 +? +dust_dry +between_first_second_limit_noincl2ndlmt +7 +60 +7 +120 +? +0 +0.0 +0 +0.0 +1 +11.0 +0 +0 +0 +? +? +? +633 +DUST5_ON_HYBRID_LVL +? +1 +tmpl4_48 +PMTC +NCEP +? +hybrid_lvl +0 +? +1 +1. +? +0 +? +0 +? +dust_dry +between_first_second_limit_noincl2ndlmt +7 +120 +7 +200 +? +0 +0.0 +0 +0.0 +1 +11.0 +0 +0 +0 +? +? +? +634 +SEASALT1_ON_HYBRID_LVL +? +1 +tmpl4_48 +PMTF +NCEP +? +hybrid_lvl +0 +? +1 +1. +? +0 +? +0 +? +sea_salt_dry +between_first_second_limit_noincl2ndlmt +8 +6 +8 +20 +? +0 +0.0 +0 +0.0 +1 +11.0 +0 +0 +0 +? +? +? +635 +SEASALT2_ON_HYBRID_LVL +? +1 +tmpl4_48 +PMTF +NCEP +? +hybrid_lvl +0 +? +1 +1. +? +0 +? +0 +? +sea_salt_dry +between_first_second_limit_noincl2ndlmt +7 +2 +7 +10 +? +0 +0.0 +0 +0.0 +1 +11.0 +0 +0 +0 +? +? +? +636 +SEASALT3_ON_HYBRID_LVL +? +1 +tmpl4_48 +PMTC +NCEP +? +hybrid_lvl +0 +? +1 +1. +? +0 +? +0 +? +sea_salt_dry +between_first_second_limit_noincl2ndlmt +7 +10 +7 +30 +? +0 +0.0 +0 +0.0 +1 +11.0 +0 +0 +0 +? +? +? +637 +SEASALT4_ON_HYBRID_LVL +? +1 +tmpl4_48 +PMTC +NCEP +? +hybrid_lvl +0 +? +1 +1. +? +0 +? +0 +? +sea_salt_dry +between_first_second_limit_noincl2ndlmt +7 +30 +7 +100 +? +0 +0.0 +0 +0.0 +1 +11.0 +0 +0 +0 +? +? +? +638 +SEASALT5_ON_HYBRID_LVL +? +1 +tmpl4_48 +PMTC +NCEP +? +hybrid_lvl +0 +? +1 +1. +? +0 +? +0 +? +sea_salt_dry +between_first_second_limit_noincl2ndlmt +7 +100 +7 +200 +? +0 +0.0 +0 +0.0 +1 +11.0 +0 +0 +0 +? +? +? +643 +BCPHILIC_ON_HYBRID_LVL +? +1 +tmpl4_48 +PMTF +NCEP +? +hybrid_lvl +0 +? +1 +1. +? +0 +? +0 +? +black_carbon_hydrophilic +equall_to_first_limit +10 +236 +0 +0.0 +? +0 +0.0 +0 +0.0 +1 +11.0 +0 +0 +0 +? +? +? +642 +BCPHOBIC_ON_HYBRID_LVL +? +1 +tmpl4_48 +PMTF +NCEP +? +hybrid_lvl +0 +? +1 +1. +? +0 +? +0 +? +black_carbon_hydrophobic +equall_to_first_limit +10 +236 +0 +0.0 +? +0 +0.0 +0 +0.0 +1 +11.0 +0 +0 +0 +? +? +? +641 +OCPHILIC_ON_HYBRID_LVL +? +1 +tmpl4_48 +PMTF +NCEP +? +hybrid_lvl +0 +? +1 +1. +? +0 +? +0 +? +particulate_org_matter_hydrophilic +equall_to_first_limit +10 +424 +0 +0.0 +? +0 +0.0 +0 +0.0 +1 +11.0 +0 +0 +0 +? +? +? +640 +OCPHOBIC_ON_HYBRID_LVL +? +1 +tmpl4_48 +PMTF +NCEP +? +hybrid_lvl +0 +? +1 +1. +? +0 +? +0 +? +particulate_org_matter_hydrophobic +equall_to_first_limit +10 +424 +0 +0.0 +? +0 +0.0 +0 +0.0 +1 +11.0 +0 +0 +0 +? +? +? +639 +SO4_ON_HYBRID_LVL +? +1 +tmpl4_48 +PMTF +NCEP +? +hybrid_lvl +0 +? +1 +1. +? +0 +? +0 +? +sulphate_dry +equall_to_first_limit +9 +139 +0 +0.0 +? +0 +0.0 +0 +0.0 +1 +11.0 +0 +0 +0 +? +? +? +105 +PRES_ON_MEAN_SEA_LVL +? +1 +tmpl4_0 +PRMSL +? +? +mean_sea_lvl +0 +? +0 +? +? +0 +? +0 +? +? +? +0 +0.0 +0 +0.0 +? +0 +0.0 +0 +0.0 +1 +6.0 +0 +0 +0 +? +? +? +26 +TMP_ON_SURFACE +? +1 +tmpl4_0 +TMP +? +? +surface +0 +? +0 +? +? +0 +? +0 +? +? +? +0 +0.0 +0 +0.0 +? +0 +0.0 +0 +0.0 +1 +4.0 +0 +0 +0 +? +? +? +609 +AER_OPT_DEP_at550 +? +1 +tmpl4_48 +AOTK +? +? +entire_atmos +0 +? +0 +? +? +0 +? +0 +? +total_aerosol +smaller_than_first_limit +6 +20 +0 +0.0 +between_first_second_limit +9 +550 +9 +550 +1 +9.0 +0 +0 +0 +? +? +? +610 +DUST_AER_OPT_DEP_at550 +? +1 +tmpl4_48 +AOTK +? +? +entire_atmos +0 +? +0 +? +? +0 +? +0 +? +dust_dry +smaller_than_first_limit +6 +20 +0 +0.0 +between_first_second_limit +9 +550 +9 +550 +1 +9.0 +0 +0 +0 +? +? +? +611 +SEASALT_AER_OPT_DEP_at550 +? +1 +tmpl4_48 +AOTK +? +? +entire_atmos +0 +? +0 +? +? +0 +? +0 +? +sea_salt_dry +smaller_than_first_limit +6 +20 +0 +0.0 +between_first_second_limit +9 +550 +9 +550 +1 +9.0 +0 +0 +0 +? +? +? +612 +SULFATE_AER_OPT_DEP_at550 +? +1 +tmpl4_48 +AOTK +? +? +entire_atmos +0 +? +0 +? +? +0 +? +0 +? +sulphate_dry +smaller_than_first_limit +6 +20 +0 +0.0 +between_first_second_limit +9 +550 +9 +550 +1 +9.0 +0 +0 +0 +? +? +? +613 +ORGANIC_CARBON_AER_OPT_DEP_at550 +? +1 +tmpl4_48 +AOTK +? +? +entire_atmos +0 +? +0 +? +? +0 +? +0 +? +particulate_org_matter_dry +smaller_than_first_limit +6 +20 +0 +0.0 +between_first_second_limit +9 +550 +9 +550 +1 +9.0 +0 +0 +0 +? +? +? +614 +BLACK_CARBON_AER_OPT_DEP_at550 +? +1 +tmpl4_48 +AOTK +? +? +entire_atmos +0 +? +0 +? +? +0 +? +0 +? +black_carbon_dry +smaller_than_first_limit +6 +20 +0 +0.0 +between_first_second_limit +9 +550 +9 +550 +1 +9.0 +0 +0 +0 +? +? +? +615 +NITRATE_AER_OPT_DEP_at550 +? +1 +tmpl4_48 +AOTK +? +? +entire_atmos +0 +? +0 +? +? +0 +? +0 +? +nitrate_dry +smaller_than_first_limit +6 +20 +0 +0.0 +between_first_second_limit +9 +550 +9 +550 +1 +9.0 +0 +0 +0 +? +? +? +650 +AER_SCAT_OPT_DEP_at550 +? +1 +tmpl4_48 +SCTAOTK +? +? +entire_atmos +0 +? +0 +? +? +0 +? +0 +? +total_aerosol +smaller_than_first_limit +6 +20 +0 +0.0 +between_first_second_limit +9 +545 +9 +565 +1 +9.0 +0 +0 +0 +? +? +? +686 +DUST25_SFC_MASS_CON +? +1 +tmpl4_48 +PMTF +NCEP +? +surface +0 +? +0 +? +? +0 +? +0 +? +dust_dry +smaller_than_first_limit +7 +25 +0 +0.0 +? +0 +0.0 +0 +0.0 +1 +9.0 +0 +0 +0 +? +? +? +685 +DUST10_SFC_MASS_CON +? +1 +tmpl4_48 +PMTC +NCEP +AVE +surface +0 +? +0 +? +? +0 +? +0 +? +dust_dry +smaller_than_first_limit +6 +10 +0 +0.0 +? +0 +0.0 +0 +0.0 +1 +9.0 +0 +0 +0 +? +? +? +684 +SEAS25_SFC_MASS_CON +? +1 +tmpl4_48 +PMTF +NCEP +? +surface +0 +? +0 +? +? +0 +? +0 +? +sea_salt_dry +smaller_than_first_limit +7 +25 +0 +0.0 +? +0 +0.0 +0 +0.0 +1 +9.0 +0 +0 +0 +? +? +? +619 +PM10_SFC_MASS_CON +? +1 +tmpl4_48 +PMTC +NCEP +? +surface +0 +? +0 +? +? +0 +? +0 +? +total_aerosol +smaller_than_first_limit +6 +10 +0 +0.0 +? +0 +0.0 +0 +0.0 +1 +9.0 +0 +0 +0 +? +? +? +620 +PM25_SFC_MASS_CON +? +1 +tmpl4_48 +PMTF +NCEP +? +surface +0 +? +0 +? +? +0 +? +0 +? +total_aerosol +smaller_than_first_limit +7 +25 +0 +0.0 +? +0 +0.0 +0 +0.0 +1 +9.0 +0 +0 +0 +? +? +? +621 +PM10_COL_MASS_DEN +? +1 +tmpl4_48 +COLMD +? +? +entire_atmos +0 +? +0 +? +? +0 +? +0 +? +total_aerosol +smaller_than_first_limit +6 +10 +0 +0.0 +? +0 +0.0 +0 +0.0 +1 +9.0 +0 +0 +0 +? +? +? +622 +PM25_COL_MASS_DEN +? +1 +tmpl4_48 +COLMD +? +? +entire_atmos +0 +? +0 +? +? +0 +? +0 +? +total_aerosol +smaller_than_first_limit +7 +25 +0 +0.0 +? +0 +0.0 +0 +0.0 +1 +9.0 +0 +0 +0 +? +? +? +646 +DUST_COL_MASS_DEN +? +1 +tmpl4_48 +COLMD +? +? +entire_atmos +0 +? +0 +? +? +0 +? +0 +? +dust_dry +smaller_than_first_limit +7 +25 +0 +0.0 +? +0 +0.0 +0 +0.0 +1 +9.0 +0 +0 +0 +? +? +? +647 +SEAS_COL_MASS_DEN +? +1 +tmpl4_48 +COLMD +? +? +entire_atmos +0 +? +0 +? +? +0 +? +0 +? +sea_salt_dry +smaller_than_first_limit +7 +25 +0 +0.0 +? +0 +0.0 +0 +0.0 +1 +9.0 +0 +0 +0 +? +? +? +616 +BC_COL_MASS_DEN +? +1 +tmpl4_48 +COLMD +? +? +entire_atmos +0 +? +0 +? +? +0 +? +0 +? +black_carbon_dry +smaller_than_first_limit +10 +236 +0 +0.0 +? +0 +0.0 +0 +0.0 +1 +9.0 +0 +0 +0 +? +? +? +617 +OC_COL_MASS_DEN +? +1 +tmpl4_48 +COLMD +? +? +entire_atmos +0 +? +0 +? +? +0 +? +0 +? +particulate_org_matter_dry +smaller_than_first_limit +10 +424 +0 +0.0 +? +0 +0.0 +0 +0.0 +1 +9.0 +0 +0 +0 +? +? +? +618 +SULF_COL_MASS_DEN +? +1 +tmpl4_48 +COLMD +? +? +entire_atmos +0 +? +0 +? +? +0 +? +0 +? +sulphate_dry +smaller_than_first_limit +7 +25 +0 +0.0 +? +0 +0.0 +0 +0.0 +1 +9.0 +0 +0 +0 +? +? +? +299 +TOZNE_ON_ENTIRE_ATMOS_SINGLE_LYR +? +1 +tmpl4_0 +TOZNE +? +? +entire_atmos_single_lyr +0 +? +0 +? +? +0 +? +0 +? +? +? +0 +0.0 +0 +0.0 +? +0 +0.0 +0 +0.0 +1 +4.0 +0 +0 +0 +? +? +? +271 +AVE_PRATE_ON_SURFACE +? +1 +tmpl4_8 +PRATE +? +AVE +surface +0 +? +0 +? +? +0 +? +0 +? +? +? +0 +0.0 +0 +0.0 +? +0 +0.0 +0 +0.0 +1 +4.0 +0 +0 +0 +? +? +? +272 +AVE_CPRAT_ON_SURFACE +? +1 +tmpl4_8 +CPRAT +NCEP +AVE +surface +0 +? +0 +? +? +0 +? +0 +? +? +? +0 +0.0 +0 +0.0 +? +0 +0.0 +0 +0.0 +1 +4.0 +0 +0 +0 +? +? +? +87 +ACM_APCP_ON_SURFACE +? +1 +tmpl4_8 +APCP +? +ACM +surface +0 +? +0 +? +? +0 +? +0 +? +? +? +0 +0.0 +0 +0.0 +? +0 +0.0 +0 +0.0 +1 +-4.0 +0 +0 +0 +? +? +? +33 +ACM_ACPCP_ON_SURFACE +? +1 +tmpl4_8 +ACPCP +? +ACM +surface +0 +? +0 +? +? +0 +? +0 +? +? +? +0 +0.0 +0 +0.0 +? +0 +0.0 +0 +0.0 +1 +-4.0 +0 +0 +0 +? +? +? diff --git a/parm/postxconfig-NT-UFS-aerosol.txt b/parm/postxconfig-NT-UFS-aerosol.txt new file mode 100644 index 000000000..f76bbc1ac --- /dev/null +++ b/parm/postxconfig-NT-UFS-aerosol.txt @@ -0,0 +1,1905 @@ +1 +51 +GFSPRS +0 +ncep_nco +v2003 +local_tab_yes1 +fcst +oper +fcst +fcst +hour +nws_ncep +gfs_avn +complex_packing_spatial_diff +2nd_ord_sptdiff +fltng_pnt +lossless +12 +HGT_ON_ISOBARIC_SFC +? +1 +tmpl4_0 +HGT +? +? +isobaric_sfc +0 +? +57 +1. 2. 4. 7. 10. 20. 40. 70. 100. 200. 300. 500. 700. 1000. 1500. 2000. 3000. 4000. 5000. 7000. 10000. 12500. 15000. 17500. 20000. 22500. 25000. 27500. 30000. 32500. 35000. 37500. 40000. 42500. 45000. 47500. 50000. 52500. 55000. 57500. 60000. 62500. 65000. 67500. 70000. 72500. 75000. 77500. 80000. 82500. 85000. 87500. 90000. 92500. 95000. 97500. 100000. +? +0 +? +0 +? +? +? +0 +0.0 +0 +0.0 +? +0 +0.0 +0 +0.0 +1 +6.0 +0 +0 +0 +? +? +? +13 +TMP_ON_ISOBARIC_SFC +? +1 +tmpl4_0 +TMP +? +? +isobaric_sfc +0 +? +57 +1. 2. 4. 7. 10. 20. 40. 70. 100. 200. 300. 500. 700. 1000. 1500. 2000. 3000. 4000. 5000. 7000. 10000. 12500. 15000. 17500. 20000. 22500. 25000. 27500. 30000. 32500. 35000. 37500. 40000. 42500. 45000. 47500. 50000. 52500. 55000. 57500. 60000. 62500. 65000. 67500. 70000. 72500. 75000. 77500. 80000. 82500. 85000. 87500. 90000. 92500. 95000. 97500. 100000. +? +0 +? +0 +? +? +? +0 +0.0 +0 +0.0 +? +0 +0.0 +0 +0.0 +1 +4.0 +0 +0 +0 +? +? +? +18 +UGRD_ON_ISOBARIC_SFC +? +1 +tmpl4_0 +UGRD +? +? +isobaric_sfc +0 +? +57 +1. 2. 4. 7. 10. 20. 40. 70. 100. 200. 300. 500. 700. 1000. 1500. 2000. 3000. 4000. 5000. 7000. 10000. 12500. 15000. 17500. 20000. 22500. 25000. 27500. 30000. 32500. 35000. 37500. 40000. 42500. 45000. 47500. 50000. 52500. 55000. 57500. 60000. 62500. 65000. 67500. 70000. 72500. 75000. 77500. 80000. 82500. 85000. 87500. 90000. 92500. 95000. 97500. 100000. +? +0 +? +0 +? +? +? +0 +0.0 +0 +0.0 +? +0 +0.0 +0 +0.0 +1 +4.0 +0 +0 +0 +? +? +? +19 +VGRD_ON_ISOBARIC_SFC +? +1 +tmpl4_0 +VGRD +? +? +isobaric_sfc +0 +? +57 +1. 2. 4. 7. 10. 20. 40. 70. 100. 200. 300. 500. 700. 1000. 1500. 2000. 3000. 4000. 5000. 7000. 10000. 12500. 15000. 17500. 20000. 22500. 25000. 27500. 30000. 32500. 35000. 37500. 40000. 42500. 45000. 47500. 50000. 52500. 55000. 57500. 60000. 62500. 65000. 67500. 70000. 72500. 75000. 77500. 80000. 82500. 85000. 87500. 90000. 92500. 95000. 97500. 100000. +? +0 +? +0 +? +? +? +0 +0.0 +0 +0.0 +? +0 +0.0 +0 +0.0 +1 +4.0 +0 +0 +0 +? +? +? +268 +O3MR_ON_ISOBARIC_SFC +? +1 +tmpl4_0 +O3MR +NCEP +? +isobaric_sfc +0 +? +57 +1. 2. 4. 7. 10. 20. 40. 70. 100. 200. 300. 500. 700. 1000. 1500. 2000. 3000. 4000. 5000. 7000. 10000. 12500. 15000. 17500. 20000. 22500. 25000. 27500. 30000. 32500. 35000. 37500. 40000. 42500. 45000. 47500. 50000. 52500. 55000. 57500. 60000. 62500. 65000. 67500. 70000. 72500. 75000. 77500. 80000. 82500. 85000. 87500. 90000. 92500. 95000. 97500. 100000. +? +0 +? +0 +? +? +? +0 +0.0 +0 +0.0 +? +0 +0.0 +0 +0.0 +1 +5.0 +0 +0 +0 +? +? +? +629 +DUST1_ON_HYBRID_LVL +? +1 +tmpl4_48 +PMTF +NCEP +? +hybrid_lvl +0 +? +1 +1. +? +0 +? +0 +? +dust_dry +between_first_second_limit_noincl2ndlmt +7 +2 +7 +20 +? +0 +0.0 +0 +0.0 +1 +11.0 +0 +0 +0 +? +? +? +630 +DUST2_ON_HYBRID_LVL +? +1 +tmpl4_48 +PMTF +NCEP +? +hybrid_lvl +0 +? +1 +1. +? +0 +? +0 +? +dust_dry +between_first_second_limit_noincl2ndlmt +7 +20 +7 +36 +? +0 +0.0 +0 +0.0 +1 +11.0 +0 +0 +0 +? +? +? +631 +DUST3_ON_HYBRID_LVL +? +1 +tmpl4_48 +PMTC +NCEP +? +hybrid_lvl +0 +? +1 +1. +? +0 +? +0 +? +dust_dry +between_first_second_limit_noincl2ndlmt +7 +36 +7 +60 +? +0 +0.0 +0 +0.0 +1 +11.0 +0 +0 +0 +? +? +? +632 +DUST4_ON_HYBRID_LVL +? +1 +tmpl4_48 +PMTC +NCEP +? +hybrid_lvl +0 +? +1 +1. +? +0 +? +0 +? +dust_dry +between_first_second_limit_noincl2ndlmt +7 +60 +7 +120 +? +0 +0.0 +0 +0.0 +1 +11.0 +0 +0 +0 +? +? +? +633 +DUST5_ON_HYBRID_LVL +? +1 +tmpl4_48 +PMTC +NCEP +? +hybrid_lvl +0 +? +1 +1. +? +0 +? +0 +? +dust_dry +between_first_second_limit_noincl2ndlmt +7 +120 +7 +200 +? +0 +0.0 +0 +0.0 +1 +11.0 +0 +0 +0 +? +? +? +634 +SEASALT1_ON_HYBRID_LVL +? +1 +tmpl4_48 +PMTF +NCEP +? +hybrid_lvl +0 +? +1 +1. +? +0 +? +0 +? +sea_salt_dry +between_first_second_limit_noincl2ndlmt +8 +6 +8 +20 +? +0 +0.0 +0 +0.0 +1 +11.0 +0 +0 +0 +? +? +? +635 +SEASALT2_ON_HYBRID_LVL +? +1 +tmpl4_48 +PMTF +NCEP +? +hybrid_lvl +0 +? +1 +1. +? +0 +? +0 +? +sea_salt_dry +between_first_second_limit_noincl2ndlmt +7 +2 +7 +10 +? +0 +0.0 +0 +0.0 +1 +11.0 +0 +0 +0 +? +? +? +636 +SEASALT3_ON_HYBRID_LVL +? +1 +tmpl4_48 +PMTC +NCEP +? +hybrid_lvl +0 +? +1 +1. +? +0 +? +0 +? +sea_salt_dry +between_first_second_limit_noincl2ndlmt +7 +10 +7 +30 +? +0 +0.0 +0 +0.0 +1 +11.0 +0 +0 +0 +? +? +? +637 +SEASALT4_ON_HYBRID_LVL +? +1 +tmpl4_48 +PMTC +NCEP +? +hybrid_lvl +0 +? +1 +1. +? +0 +? +0 +? +sea_salt_dry +between_first_second_limit_noincl2ndlmt +7 +30 +7 +100 +? +0 +0.0 +0 +0.0 +1 +11.0 +0 +0 +0 +? +? +? +638 +SEASALT5_ON_HYBRID_LVL +? +1 +tmpl4_48 +PMTC +NCEP +? +hybrid_lvl +0 +? +1 +1. +? +0 +? +0 +? +sea_salt_dry +between_first_second_limit_noincl2ndlmt +7 +100 +7 +200 +? +0 +0.0 +0 +0.0 +1 +11.0 +0 +0 +0 +? +? +? +643 +BCPHILIC_ON_HYBRID_LVL +? +1 +tmpl4_48 +PMTF +NCEP +? +hybrid_lvl +0 +? +1 +1. +? +0 +? +0 +? +black_carbon_hydrophilic +equall_to_first_limit +10 +236 +0 +0.0 +? +0 +0.0 +0 +0.0 +1 +11.0 +0 +0 +0 +? +? +? +642 +BCPHOBIC_ON_HYBRID_LVL +? +1 +tmpl4_48 +PMTF +NCEP +? +hybrid_lvl +0 +? +1 +1. +? +0 +? +0 +? +black_carbon_hydrophobic +equall_to_first_limit +10 +236 +0 +0.0 +? +0 +0.0 +0 +0.0 +1 +11.0 +0 +0 +0 +? +? +? +641 +OCPHILIC_ON_HYBRID_LVL +? +1 +tmpl4_48 +PMTF +NCEP +? +hybrid_lvl +0 +? +1 +1. +? +0 +? +0 +? +particulate_org_matter_hydrophilic +equall_to_first_limit +10 +424 +0 +0.0 +? +0 +0.0 +0 +0.0 +1 +11.0 +0 +0 +0 +? +? +? +640 +OCPHOBIC_ON_HYBRID_LVL +? +1 +tmpl4_48 +PMTF +NCEP +? +hybrid_lvl +0 +? +1 +1. +? +0 +? +0 +? +particulate_org_matter_hydrophobic +equall_to_first_limit +10 +424 +0 +0.0 +? +0 +0.0 +0 +0.0 +1 +11.0 +0 +0 +0 +? +? +? +639 +SO4_ON_HYBRID_LVL +? +1 +tmpl4_48 +PMTF +NCEP +? +hybrid_lvl +0 +? +1 +1. +? +0 +? +0 +? +sulphate_dry +equall_to_first_limit +9 +139 +0 +0.0 +? +0 +0.0 +0 +0.0 +1 +11.0 +0 +0 +0 +? +? +? +688 +NO3_ON_HYBRID_LVL +? +1 +tmpl4_48 +PMTF +NCEP +? +hybrid_lvl +0 +? +1 +1. +? +0 +? +0 +? +nitrate_dry +equall_to_first_limit +9 +139 +0 +0.0 +? +0 +0.0 +0 +0.0 +1 +11.0 +0 +0 +0 +? +? +? +689 +NH4_ON_HYBRID_LVL +? +1 +tmpl4_48 +PMTF +NCEP +? +hybrid_lvl +0 +? +1 +1. +? +0 +? +0 +? +ammonium_dry +equall_to_first_limit +9 +139 +0 +0.0 +? +0 +0.0 +0 +0.0 +1 +11.0 +0 +0 +0 +? +? +? +105 +PRES_ON_MEAN_SEA_LVL +? +1 +tmpl4_0 +PRMSL +? +? +mean_sea_lvl +0 +? +0 +? +? +0 +? +0 +? +? +? +0 +0.0 +0 +0.0 +? +0 +0.0 +0 +0.0 +1 +6.0 +0 +0 +0 +? +? +? +26 +TMP_ON_SURFACE +? +1 +tmpl4_0 +TMP +? +? +surface +0 +? +0 +? +? +0 +? +0 +? +? +? +0 +0.0 +0 +0.0 +? +0 +0.0 +0 +0.0 +1 +4.0 +0 +0 +0 +? +? +? +609 +AER_OPT_DEP_at550 +? +1 +tmpl4_48 +AOTK +? +? +entire_atmos +0 +? +0 +? +? +0 +? +0 +? +total_aerosol +smaller_than_first_limit +6 +20 +0 +0.0 +between_first_second_limit +9 +550 +9 +550 +1 +9.0 +0 +0 +0 +? +? +? +610 +DUST_AER_OPT_DEP_at550 +? +1 +tmpl4_48 +AOTK +? +? +entire_atmos +0 +? +0 +? +? +0 +? +0 +? +dust_dry +smaller_than_first_limit +6 +20 +0 +0.0 +between_first_second_limit +9 +550 +9 +550 +1 +9.0 +0 +0 +0 +? +? +? +611 +SEASALT_AER_OPT_DEP_at550 +? +1 +tmpl4_48 +AOTK +? +? +entire_atmos +0 +? +0 +? +? +0 +? +0 +? +sea_salt_dry +smaller_than_first_limit +6 +20 +0 +0.0 +between_first_second_limit +9 +550 +9 +550 +1 +9.0 +0 +0 +0 +? +? +? +612 +SULFATE_AER_OPT_DEP_at550 +? +1 +tmpl4_48 +AOTK +? +? +entire_atmos +0 +? +0 +? +? +0 +? +0 +? +sulphate_dry +smaller_than_first_limit +6 +20 +0 +0.0 +between_first_second_limit +9 +550 +9 +550 +1 +9.0 +0 +0 +0 +? +? +? +613 +ORGANIC_CARBON_AER_OPT_DEP_at550 +? +1 +tmpl4_48 +AOTK +? +? +entire_atmos +0 +? +0 +? +? +0 +? +0 +? +particulate_org_matter_dry +smaller_than_first_limit +6 +20 +0 +0.0 +between_first_second_limit +9 +550 +9 +550 +1 +9.0 +0 +0 +0 +? +? +? +614 +BLACK_CARBON_AER_OPT_DEP_at550 +? +1 +tmpl4_48 +AOTK +? +? +entire_atmos +0 +? +0 +? +? +0 +? +0 +? +black_carbon_dry +smaller_than_first_limit +6 +20 +0 +0.0 +between_first_second_limit +9 +550 +9 +550 +1 +9.0 +0 +0 +0 +? +? +? +615 +NITRATE_AER_OPT_DEP_at550 +? +1 +tmpl4_48 +AOTK +? +? +entire_atmos +0 +? +0 +? +? +0 +? +0 +? +nitrate_dry +smaller_than_first_limit +6 +20 +0 +0.0 +between_first_second_limit +9 +550 +9 +550 +1 +9.0 +0 +0 +0 +? +? +? +650 +AER_SCAT_OPT_DEP_at550 +? +1 +tmpl4_48 +SCTAOTK +? +? +entire_atmos +0 +? +0 +? +? +0 +? +0 +? +total_aerosol +smaller_than_first_limit +6 +20 +0 +0.0 +between_first_second_limit +9 +545 +9 +565 +1 +9.0 +0 +0 +0 +? +? +? +686 +DUST25_SFC_MASS_CON +? +1 +tmpl4_48 +PMTF +NCEP +? +surface +0 +? +0 +? +? +0 +? +0 +? +dust_dry +smaller_than_first_limit +7 +25 +0 +0.0 +? +0 +0.0 +0 +0.0 +1 +9.0 +0 +0 +0 +? +? +? +685 +DUST10_SFC_MASS_CON +? +1 +tmpl4_48 +PMTC +NCEP +AVE +surface +0 +? +0 +? +? +0 +? +0 +? +dust_dry +smaller_than_first_limit +6 +10 +0 +0.0 +? +0 +0.0 +0 +0.0 +1 +9.0 +0 +0 +0 +? +? +? +684 +SEAS25_SFC_MASS_CON +? +1 +tmpl4_48 +PMTF +NCEP +? +surface +0 +? +0 +? +? +0 +? +0 +? +sea_salt_dry +smaller_than_first_limit +7 +25 +0 +0.0 +? +0 +0.0 +0 +0.0 +1 +9.0 +0 +0 +0 +? +? +? +619 +PM10_SFC_MASS_CON +? +1 +tmpl4_48 +PMTC +NCEP +? +surface +0 +? +0 +? +? +0 +? +0 +? +total_aerosol +smaller_than_first_limit +6 +10 +0 +0.0 +? +0 +0.0 +0 +0.0 +1 +9.0 +0 +0 +0 +? +? +? +620 +PM25_SFC_MASS_CON +? +1 +tmpl4_48 +PMTF +NCEP +? +surface +0 +? +0 +? +? +0 +? +0 +? +total_aerosol +smaller_than_first_limit +7 +25 +0 +0.0 +? +0 +0.0 +0 +0.0 +1 +9.0 +0 +0 +0 +? +? +? +621 +PM10_COL_MASS_DEN +? +1 +tmpl4_48 +COLMD +? +? +entire_atmos +0 +? +0 +? +? +0 +? +0 +? +total_aerosol +smaller_than_first_limit +6 +10 +0 +0.0 +? +0 +0.0 +0 +0.0 +1 +9.0 +0 +0 +0 +? +? +? +622 +PM25_COL_MASS_DEN +? +1 +tmpl4_48 +COLMD +? +? +entire_atmos +0 +? +0 +? +? +0 +? +0 +? +total_aerosol +smaller_than_first_limit +7 +25 +0 +0.0 +? +0 +0.0 +0 +0.0 +1 +9.0 +0 +0 +0 +? +? +? +646 +DUST_COL_MASS_DEN +? +1 +tmpl4_48 +COLMD +? +? +entire_atmos +0 +? +0 +? +? +0 +? +0 +? +dust_dry +smaller_than_first_limit +7 +25 +0 +0.0 +? +0 +0.0 +0 +0.0 +1 +9.0 +0 +0 +0 +? +? +? +647 +SEAS_COL_MASS_DEN +? +1 +tmpl4_48 +COLMD +? +? +entire_atmos +0 +? +0 +? +? +0 +? +0 +? +sea_salt_dry +smaller_than_first_limit +7 +25 +0 +0.0 +? +0 +0.0 +0 +0.0 +1 +9.0 +0 +0 +0 +? +? +? +616 +BC_COL_MASS_DEN +? +1 +tmpl4_48 +COLMD +? +? +entire_atmos +0 +? +0 +? +? +0 +? +0 +? +black_carbon_dry +smaller_than_first_limit +10 +236 +0 +0.0 +? +0 +0.0 +0 +0.0 +1 +9.0 +0 +0 +0 +? +? +? +617 +OC_COL_MASS_DEN +? +1 +tmpl4_48 +COLMD +? +? +entire_atmos +0 +? +0 +? +? +0 +? +0 +? +particulate_org_matter_dry +smaller_than_first_limit +10 +424 +0 +0.0 +? +0 +0.0 +0 +0.0 +1 +9.0 +0 +0 +0 +? +? +? +618 +SULF_COL_MASS_DEN +? +1 +tmpl4_48 +COLMD +? +? +entire_atmos +0 +? +0 +? +? +0 +? +0 +? +sulphate_dry +smaller_than_first_limit +7 +25 +0 +0.0 +? +0 +0.0 +0 +0.0 +1 +9.0 +0 +0 +0 +? +? +? +657 +NO3_COL_MASS_DEN +? +1 +tmpl4_48 +COLMD +? +? +entire_atmos +0 +? +0 +? +? +0 +? +0 +? +nitrate_dry +smaller_than_first_limit +7 +25 +0 +0.0 +? +0 +0.0 +0 +0.0 +1 +9.0 +0 +0 +0 +? +? +? +658 +NH4_COL_MASS_DEN +? +1 +tmpl4_48 +COLMD +? +? +entire_atmos +0 +? +0 +? +? +0 +? +0 +? +ammonium_dry +smaller_than_first_limit +7 +25 +0 +0.0 +? +0 +0.0 +0 +0.0 +1 +9.0 +0 +0 +0 +? +? +? +299 +TOZNE_ON_ENTIRE_ATMOS_SINGLE_LYR +? +1 +tmpl4_0 +TOZNE +? +? +entire_atmos_single_lyr +0 +? +0 +? +? +0 +? +0 +? +? +? +0 +0.0 +0 +0.0 +? +0 +0.0 +0 +0.0 +1 +4.0 +0 +0 +0 +? +? +? +271 +AVE_PRATE_ON_SURFACE +? +1 +tmpl4_8 +PRATE +? +AVE +surface +0 +? +0 +? +? +0 +? +0 +? +? +? +0 +0.0 +0 +0.0 +? +0 +0.0 +0 +0.0 +1 +4.0 +0 +0 +0 +? +? +? +272 +AVE_CPRAT_ON_SURFACE +? +1 +tmpl4_8 +CPRAT +NCEP +AVE +surface +0 +? +0 +? +? +0 +? +0 +? +? +? +0 +0.0 +0 +0.0 +? +0 +0.0 +0 +0.0 +1 +4.0 +0 +0 +0 +? +? +? +87 +ACM_APCP_ON_SURFACE +? +1 +tmpl4_8 +APCP +? +ACM +surface +0 +? +0 +? +? +0 +? +0 +? +? +? +0 +0.0 +0 +0.0 +? +0 +0.0 +0 +0.0 +1 +-4.0 +0 +0 +0 +? +? +? +33 +ACM_ACPCP_ON_SURFACE +? +1 +tmpl4_8 +ACPCP +? +ACM +surface +0 +? +0 +? +? +0 +? +0 +? +? +? +0 +0.0 +0 +0.0 +? +0 +0.0 +0 +0.0 +1 +-4.0 +0 +0 +0 +? +? +? diff --git a/parm/postxconfig-NT-fv3lam.txt b/parm/postxconfig-NT-fv3lam.txt index dc4a08b94..5881aa4a1 100644 --- a/parm/postxconfig-NT-fv3lam.txt +++ b/parm/postxconfig-NT-fv3lam.txt @@ -1,6 +1,6 @@ 2 -219 -259 +220 +264 PRSLEV 32769 ncep_nco @@ -3643,6 +3643,228 @@ surface ? ? ? +746 +ACM_GRAUPEL_ON_SURFACE +? +1 +tmpl4_8 +FROZR +NCEP +ACM +surface +0 +? +0 +? +? +0 +? +0 +? +? +? +0 +0.0 +0 +0.0 +? +0 +0.0 +0 +0.0 +1 +6.0 +0 +0 +0 +? +? +? +775 +BUCKET_GRAUPEL_ON_SURFACE +bucket graupel precipitation on surface +1 +tmpl4_8 +FROZR +NCEP +ACM +surface +0 +? +0 +? +? +0 +? +0 +? +? +? +0 +0.0 +0 +0.0 +? +0 +0.0 +0 +0.0 +1 +6.0 +0 +0 +0 +? +? +? +782 +ACM_FRAIN_ON_SURFACE +? +1 +tmpl4_8 +FRZR +NCEP +ACM +surface +0 +? +0 +? +? +0 +? +0 +? +? +? +0 +0.0 +0 +0.0 +? +0 +0.0 +0 +0.0 +1 +6.0 +0 +0 +0 +? +? +? +1003 +BUCKET_FRAIN_ON_SURFACE +? +1 +tmpl4_8 +FRZR +NCEP +ACM +surface +0 +? +0 +? +? +0 +? +0 +? +? +? +0 +0.0 +0 +0.0 +? +0 +0.0 +0 +0.0 +1 +6.0 +0 +0 +0 +? +? +? +1004 +ACM_SNOWFALL_ON_SURFACE +? +1 +tmpl4_8 +TSNOWP +? +ACM +surface +0 +? +0 +? +? +0 +? +0 +? +? +? +0 +0.0 +0 +0.0 +? +0 +0.0 +0 +0.0 +1 +6.0 +0 +0 +0 +? +? +? +1005 +BUCKET_SNOWFALL_ON_SURFACE +? +1 +tmpl4_8 +TSNOWP +? +ACM +surface +0 +? +0 +? +? +0 +? +0 +? +? +? +0 +0.0 +0 +0.0 +? +0 +0.0 +0 +0.0 +1 +6.0 +0 +0 +0 +? +? +? 34 ACM_NCPCP_ON_SURFACE ? @@ -8416,43 +8638,6 @@ entire_atmos_single_lyr ? ? ? -296 -TMP_ON_SIGMA_LVL_HPC -? -1 -tmpl4_0 -TMP -? -? -sigma_lvl -1 -4 -5 -9000. 8500. 8000. 7500. 7000. -? -0 -? -0 -? -? -? -0 -0.0 -0 -0.0 -? -0 -0.0 -0 -0.0 -1 --4.0 -0 -0 -0 -? -? -? 344 PBLREG_ON_SURFACE ? @@ -9046,7 +9231,7 @@ spec_hgt_lvl_above_grnd ? ? 423 -MAX_MAXUVV_ON_SPEC_PRES_LVL_ABOVE_GRND_100-1000hpa +MAX_MAXUVV_ON_ISOBARIC_SFC_100-1000hpa hourly maximum Upward Vertical Velocity between 100-1000hpa 1 tmpl4_8 @@ -9083,7 +9268,7 @@ isobaric_sfc ? ? 424 -MAX_MAXDVV_ON_SPEC_PRES_LVL_ABOVE_GRND_100-1000hpa +MAX_MAXDVV_ON_ISOBARIC_SFC_100-1000hpa hourly maximum Downward Vertical Velocity between 100-1000hpa 1 tmpl4_8 @@ -10838,7 +11023,7 @@ surface ? ? 423 -MAX_MAXUVV_ON_SPEC_PRES_LVL_ABOVE_GRND_100-1000hpa +MAX_MAXUVV_ON_ISOBARIC_SFC_100-1000hpa hourly maximum Upward Vertical Velocity between 100-1000hpa 1 tmpl4_8 @@ -10875,7 +11060,7 @@ isobaric_sfc ? ? 424 -MAX_MAXDVV_ON_SPEC_PRES_LVL_ABOVE_GRND_100-1000hpa +MAX_MAXDVV_ON_ISOBARIC_SFC_100-1000hpa hourly maximum Downward Vertical Velocity between 100-1000hpa 1 tmpl4_8 @@ -17719,3 +17904,40 @@ surface ? ? ? +1006 +SDEN_ON_SURFACE +? +1 +tmpl4_0 +SDEN +? +? +surface +0 +? +0 +? +? +0 +? +0 +? +? +? +0 +0.0 +0 +0.0 +? +0 +0.0 +0 +0.0 +1 +6.0 +0 +0 +0 +? +? +? diff --git a/parm/postxconfig-NT-fv3lam_cmaq.txt b/parm/postxconfig-NT-fv3lam_cmaq.txt deleted file mode 100644 index 1eec84111..000000000 --- a/parm/postxconfig-NT-fv3lam_cmaq.txt +++ /dev/null @@ -1,129 +0,0 @@ -1 -3 -CMAQ -32769 -ncep_nco -v2003 -local_tab_yes1 -fcst -oper -fcst -fcst -hour -nws_ncep -nmm_8km -complex_packing_spatial_diff -2nd_ord_sptdiff -fltng_pnt -lossless -995 -PM25TOT_ON_HYBRID_LVL -? -1 -tmpl4_0 -PMTF -NCEP -? -hybrid_lvl -0 -? -64 -1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29. 30. 31. 32. 33. 34. 35. 36. 37. 38. 39. 40. 41. 42. 43. 44. 45. 46. 47. 48. 49. 50. 51. 52. 53. 54. 55. 56. 57. 58. 59. 60. 61. 62. 63. 64. -? -0 -? -0 -? -? -? -0 -0.0 -0 -0.0 -? -0 -0.0 -0 -0.0 -1 -7.0 -0 -0 -0 -? -? -? -267 -O3MR_ON_HYBRID_LVL -? -1 -tmpl4_0 -O3MR -NCEP -? -hybrid_lvl -0 -? -64 -1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29. 30. 31. 32. 33. 34. 35. 36. 37. 38. 39. 40. 41. 42. 43. 44. 45. 46. 47. 48. 49. 50. 51. 52. 53. 54. 55. 56. 57. 58. 59. 60. 61. 62. 63. 64. -? -0 -? -0 -? -? -? -0 -0.0 -0 -0.0 -? -0 -0.0 -0 -0.0 -1 -7.0 -0 -0 -0 -? -? -? -994 -OZCON_ON_HYBRID_LVL -? -1 -tmpl4_0 -OZCON -NCEP -? -hybrid_lvl -0 -? -64 -1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29. 30. 31. 32. 33. 34. 35. 36. 37. 38. 39. 40. 41. 42. 43. 44. 45. 46. 47. 48. 49. 50. 51. 52. 53. 54. 55. 56. 57. 58. 59. 60. 61. 62. 63. 64. -? -0 -? -0 -? -? -? -0 -0.0 -0 -0.0 -? -0 -0.0 -0 -0.0 -1 -7.0 -0 -0 -0 -? -? -? diff --git a/parm/postxconfig-NT-fv3lam_rrfs.txt b/parm/postxconfig-NT-fv3lam_rrfs.txt new file mode 100644 index 000000000..098022236 --- /dev/null +++ b/parm/postxconfig-NT-fv3lam_rrfs.txt @@ -0,0 +1,19810 @@ +3 +4 +241 +289 +PRSLEV +32769 +ncep_nco +v2003 +local_tab_yes1 +fcst +oper +fcst +fcst +hour +nws_ncep +rrfs +complex_packing_spatial_diff +2nd_ord_sptdiff +fltng_pnt +lossless +1 +PRES_ON_HYBRID_LVL +? +1 +tmpl4_0 +PRES +? +? +hybrid_lvl +0 +? +2 +1. 2. +? +0 +? +0 +? +? +? +0 +0.0 +0 +0.0 +? +0 +0.0 +0 +0.0 +1 +6.0 +0 +0 +0 +? +? +? +77 +HGT_ON_HYBRID_LVL +? +1 +tmpl4_0 +HGT +? +? +hybrid_lvl +0 +? +2 +1. 2. +? +0 +? +0 +? +? +? +0 +0.0 +0 +0.0 +? +0 +0.0 +0 +0.0 +1 +4.0 +0 +0 +0 +? +? +? +2 +TMP_ON_HYBRID_LVL +? +1 +tmpl4_0 +TMP +? +? +hybrid_lvl +0 +? +2 +1. 2. +? +0 +? +0 +? +? +? +0 +0.0 +0 +0.0 +? +0 +0.0 +0 +0.0 +1 +4.0 +0 +0 +0 +? +? +? +3 +POT_ON_HYBRID_LVL +? +1 +tmpl4_0 +POT +? +? +hybrid_lvl +0 +? +2 +1. 2. +? +0 +? +0 +? +? +? +0 +0.0 +0 +0.0 +? +0 +0.0 +0 +0.0 +1 +4.0 +0 +0 +0 +? +? +? +4 +DPT_ON_HYBRID_LVL +? +1 +tmpl4_0 +DPT +? +? +hybrid_lvl +0 +? +2 +1. 2. +? +0 +? +0 +? +? +? +0 +0.0 +0 +0.0 +? +0 +0.0 +0 +0.0 +1 +5.0 +0 +0 +0 +? +? +? +5 +SPFH_ON_HYBRID_LVL +? +1 +tmpl4_0 +SPFH +? +? +hybrid_lvl +0 +? +1 +1. +? +0 +? +0 +? +? +? +0 +0.0 +0 +0.0 +? +0 +0.0 +0 +0.0 +1 +7.0 +0 +0 +0 +? +? +? +6 +RH_ON_HYBRID_LVL +? +1 +tmpl4_0 +RH +? +? +hybrid_lvl +0 +? +1 +1. +? +0 +? +0 +? +? +? +0 +0.0 +0 +0.0 +? +0 +0.0 +0 +0.0 +1 +4.0 +0 +0 +0 +? +? +? +7 +UGRD_ON_HYBRID_LVL +? +1 +tmpl4_0 +UGRD +? +? +hybrid_lvl +0 +? +2 +1. 2. +? +0 +? +0 +? +? +? +0 +0.0 +0 +0.0 +? +0 +0.0 +0 +0.0 +1 +4.0 +0 +0 +0 +? +? +? +8 +VGRD_ON_HYBRID_LVL +? +1 +tmpl4_0 +VGRD +? +? +hybrid_lvl +0 +? +2 +1. 2. +? +0 +? +0 +? +? +? +0 +0.0 +0 +0.0 +? +0 +0.0 +0 +0.0 +1 +4.0 +0 +0 +0 +? +? +? +9 +VVEL_ON_HYBRID_LVL +? +1 +tmpl4_0 +VVEL +? +? +hybrid_lvl +0 +? +1 +1. +? +0 +? +0 +? +? +? +0 +0.0 +0 +0.0 +? +0 +0.0 +0 +0.0 +1 +5.0 +0 +0 +0 +? +? +? +264 +DZDT_ON_HYBRID_LVL +? +1 +tmpl4_0 +DZDT +? +? +hybrid_lvl +0 +? +1 +1. +? +0 +? +0 +? +? +? +0 +0.0 +0 +0.0 +? +0 +0.0 +0 +0.0 +1 +-5.0 +0 +0 +0 +? +? +? +11 +TKE_ON_HYBRID_LVL +? +1 +tmpl4_0 +TKE +? +? +hybrid_lvl +0 +? +2 +1. 2. +? +0 +? +0 +? +? +? +0 +0.0 +0 +0.0 +? +0 +0.0 +0 +0.0 +1 +3.0 +0 +0 +0 +? +? +? +181 +RWMR_ON_HYBRID_LVL +? +1 +tmpl4_0 +RWMR +? +? +hybrid_lvl +0 +? +2 +1. 2. +? +0 +? +0 +? +? +? +0 +0.0 +0 +0.0 +? +0 +0.0 +0 +0.0 +1 +3.0 +0 +0 +0 +? +? +? +182 +SNMR_ON_HYBRID_LVL +? +1 +tmpl4_0 +SNMR +? +? +hybrid_lvl +0 +? +2 +1. 2. +? +0 +? +0 +? +? +? +0 +0.0 +0 +0.0 +? +0 +0.0 +0 +0.0 +1 +3.0 +0 +0 +0 +? +? +? +187 +RIME_ON_HYBRID_LVL +? +1 +tmpl4_0 +RIME +NCEP +? +hybrid_lvl +0 +? +2 +1. 2. +? +0 +? +0 +? +? +? +0 +0.0 +0 +0.0 +? +0 +0.0 +0 +0.0 +1 +3.0 +0 +0 +0 +? +? +? +199 +TCOND_ON_HYBRID_LVL +? +1 +tmpl4_0 +TCOND +NCEP +? +hybrid_lvl +0 +? +2 +1. 2. +? +0 +? +0 +? +? +? +0 +0.0 +0 +0.0 +? +0 +0.0 +0 +0.0 +1 +3.0 +0 +0 +0 +? +? +? +250 +REFD_ON_HYBRID_LVL +? +1 +tmpl4_0 +REFD +NCEP +? +hybrid_lvl +0 +? +2 +1. 2. +? +0 +? +0 +? +? +? +0 +0.0 +0 +0.0 +? +0 +0.0 +0 +0.0 +1 +4.0 +0 +0 +0 +? +? +? +146 +BMIXL_ON_HYBRID_LVL +? +1 +tmpl4_0 +BMIXL +NCEP +? +hybrid_lvl +0 +? +1 +1. +? +0 +? +0 +? +? +? +0 +0.0 +0 +0.0 +? +0 +0.0 +0 +0.0 +1 +3.0 +0 +0 +0 +? +? +? +12 +HGT_ON_ISOBARIC_SFC +? +1 +tmpl4_0 +HGT +? +? +isobaric_sfc +0 +? +46 +200. 500. 700. 1000. 2000. 3000. 5000. 7000. 7500. 10000. 12500. 15000. 17500. 20000. 22500. 25000. 27500. 30000. 32500. 35000. 37500. 40000. 42500. 45000. 47500. 50000. 52500. 55000. 57500. 60000. 62500. 65000. 67500. 70000. 72500. 75000. 77500. 80000. 82500. 85000. 87500. 90000. 92500. 95000. 97500. 100000. +? +0 +? +0 +? +? +? +0 +0.0 +0 +0.0 +? +0 +0.0 +0 +0.0 +1 +6.0 +0 +0 +0 +? +? +? +13 +TMP_ON_ISOBARIC_SFC +? +1 +tmpl4_0 +TMP +? +? +isobaric_sfc +0 +? +46 +200. 500. 700. 1000. 2000. 3000. 5000. 7000. 7500. 10000. 12500. 15000. 17500. 20000. 22500. 25000. 27500. 30000. 32500. 35000. 37500. 40000. 42500. 45000. 47500. 50000. 52500. 55000. 57500. 60000. 62500. 65000. 67500. 70000. 72500. 75000. 77500. 80000. 82500. 85000. 87500. 90000. 92500. 95000. 97500. 100000. +? +0 +? +0 +? +? +? +0 +0.0 +0 +0.0 +? +0 +0.0 +0 +0.0 +1 +3.0 +0 +0 +0 +? +? +? +15 +DPT_ON_ISOBARIC_SFC +? +1 +tmpl4_0 +DPT +? +? +isobaric_sfc +0 +? +46 +200. 500. 700. 1000. 2000. 3000. 5000. 7000. 7500. 10000. 12500. 15000. 17500. 20000. 22500. 25000. 27500. 30000. 32500. 35000. 37500. 40000. 42500. 45000. 47500. 50000. 52500. 55000. 57500. 60000. 62500. 65000. 67500. 70000. 72500. 75000. 77500. 80000. 82500. 85000. 87500. 90000. 92500. 95000. 97500. 100000. +? +0 +? +0 +? +? +? +0 +0.0 +0 +0.0 +? +0 +0.0 +0 +0.0 +1 +5.0 +0 +0 +0 +? +? +? +16 +SPFH_ON_ISOBARIC_SFC +? +1 +tmpl4_0 +SPFH +? +? +isobaric_sfc +0 +? +46 +200. 500. 700. 1000. 2000. 3000. 5000. 7000. 7500. 10000. 12500. 15000. 17500. 20000. 22500. 25000. 27500. 30000. 32500. 35000. 37500. 40000. 42500. 45000. 47500. 50000. 52500. 55000. 57500. 60000. 62500. 65000. 67500. 70000. 72500. 75000. 77500. 80000. 82500. 85000. 87500. 90000. 92500. 95000. 97500. 100000. +? +0 +? +0 +? +? +? +0 +0.0 +0 +0.0 +? +0 +0.0 +0 +0.0 +1 +4.0 +0 +0 +0 +? +? +? +17 +RH_ON_ISOBARIC_SFC +? +1 +tmpl4_0 +RH +? +? +isobaric_sfc +0 +? +46 +200. 500. 700. 1000. 2000. 3000. 5000. 7000. 7500. 10000. 12500. 15000. 17500. 20000. 22500. 25000. 27500. 30000. 32500. 35000. 37500. 40000. 42500. 45000. 47500. 50000. 52500. 55000. 57500. 60000. 62500. 65000. 67500. 70000. 72500. 75000. 77500. 80000. 82500. 85000. 87500. 90000. 92500. 95000. 97500. 100000. +? +0 +? +0 +? +? +? +0 +0.0 +0 +0.0 +? +0 +0.0 +0 +0.0 +1 +2.0 +0 +0 +0 +? +? +? +18 +UGRD_ON_ISOBARIC_SFC +? +1 +tmpl4_0 +UGRD +? +? +isobaric_sfc +0 +? +46 +200. 500. 700. 1000. 2000. 3000. 5000. 7000. 7500. 10000. 12500. 15000. 17500. 20000. 22500. 25000. 27500. 30000. 32500. 35000. 37500. 40000. 42500. 45000. 47500. 50000. 52500. 55000. 57500. 60000. 62500. 65000. 67500. 70000. 72500. 75000. 77500. 80000. 82500. 85000. 87500. 90000. 92500. 95000. 97500. 100000. +? +0 +? +0 +? +? +? +0 +0.0 +0 +0.0 +? +0 +0.0 +0 +0.0 +1 +4.0 +0 +0 +0 +? +? +? +19 +VGRD_ON_ISOBARIC_SFC +? +1 +tmpl4_0 +VGRD +? +? +isobaric_sfc +0 +? +46 +200. 500. 700. 1000. 2000. 3000. 5000. 7000. 7500. 10000. 12500. 15000. 17500. 20000. 22500. 25000. 27500. 30000. 32500. 35000. 37500. 40000. 42500. 45000. 47500. 50000. 52500. 55000. 57500. 60000. 62500. 65000. 67500. 70000. 72500. 75000. 77500. 80000. 82500. 85000. 87500. 90000. 92500. 95000. 97500. 100000. +? +0 +? +0 +? +? +? +0 +0.0 +0 +0.0 +? +0 +0.0 +0 +0.0 +1 +4.0 +0 +0 +0 +? +? +? +20 +VVEL_ON_ISOBARIC_SFC +? +1 +tmpl4_0 +VVEL +? +? +isobaric_sfc +0 +? +46 +200. 500. 700. 1000. 2000. 3000. 5000. 7000. 7500. 10000. 12500. 15000. 17500. 20000. 22500. 25000. 27500. 30000. 32500. 35000. 37500. 40000. 42500. 45000. 47500. 50000. 52500. 55000. 57500. 60000. 62500. 65000. 67500. 70000. 72500. 75000. 77500. 80000. 82500. 85000. 87500. 90000. 92500. 95000. 97500. 100000. +? +0 +? +0 +? +? +? +0 +0.0 +0 +0.0 +? +0 +0.0 +0 +0.0 +1 +5.0 +0 +0 +0 +? +? +? +284 +DZDT_ON_ISOBARIC_SFC +? +1 +tmpl4_0 +DZDT +? +? +isobaric_sfc +0 +? +46 +200. 500. 700. 1000. 2000. 3000. 5000. 7000. 7500. 10000. 12500. 15000. 17500. 20000. 22500. 25000. 27500. 30000. 32500. 35000. 37500. 40000. 42500. 45000. 47500. 50000. 52500. 55000. 57500. 60000. 62500. 65000. 67500. 70000. 72500. 75000. 77500. 80000. 82500. 85000. 87500. 90000. 92500. 95000. 97500. 100000. +? +0 +? +0 +? +? +? +0 +0.0 +0 +0.0 +? +0 +0.0 +0 +0.0 +1 +-5.0 +0 +0 +0 +? +? +? +21 +ABSV_ON_ISOBARIC_SFC +? +1 +tmpl4_0 +ABSV +? +? +isobaric_sfc +0 +? +10 +20000. 25000. 30000. 40000. 50000. 70000. 75000. 85000. 92500. 100000. +? +0 +? +0 +? +? +? +0 +0.0 +0 +0.0 +? +0 +0.0 +0 +0.0 +1 +4.0 +0 +0 +0 +? +? +? +86 +STRM_ON_ISOBARIC_SFC +? +1 +tmpl4_0 +STRM +? +? +isobaric_sfc +0 +? +2 +25000. 50000. +? +0 +? +0 +? +? +? +0 +0.0 +0 +0.0 +? +0 +0.0 +0 +0.0 +1 +3.0 +0 +0 +0 +? +? +? +166 +ICMR_ON_ISOBARIC_SFC +? +1 +tmpl4_0 +ICMR +? +? +isobaric_sfc +0 +? +46 +200. 500. 700. 1000. 2000. 3000. 5000. 7000. 7500. 10000. 12500. 15000. 17500. 20000. 22500. 25000. 27500. 30000. 32500. 35000. 37500. 40000. 42500. 45000. 47500. 50000. 52500. 55000. 57500. 60000. 62500. 65000. 67500. 70000. 72500. 75000. 77500. 80000. 82500. 85000. 87500. 90000. 92500. 95000. 97500. 100000. +? +0 +? +0 +? +? +? +0 +0.0 +0 +0.0 +? +0 +0.0 +0 +0.0 +1 +6.0 +0 +0 +0 +? +? +? +153 +CLMR_ON_ISOBARIC_SFC +? +1 +tmpl4_0 +CLMR +? +? +isobaric_sfc +0 +? +46 +200. 500. 700. 1000. 2000. 3000. 5000. 7000. 7500. 10000. 12500. 15000. 17500. 20000. 22500. 25000. 27500. 30000. 32500. 35000. 37500. 40000. 42500. 45000. 47500. 50000. 52500. 55000. 57500. 60000. 62500. 65000. 67500. 70000. 72500. 75000. 77500. 80000. 82500. 85000. 87500. 90000. 92500. 95000. 97500. 100000. +? +0 +? +0 +? +? +? +0 +0.0 +0 +0.0 +? +0 +0.0 +0 +0.0 +1 +4.0 +0 +0 +0 +? +? +? +183 +RWMR_ON_ISOBARIC_SFC +? +1 +tmpl4_0 +RWMR +? +? +isobaric_sfc +0 +? +46 +200. 500. 700. 1000. 2000. 3000. 5000. 7000. 7500. 10000. 12500. 15000. 17500. 20000. 22500. 25000. 27500. 30000. 32500. 35000. 37500. 40000. 42500. 45000. 47500. 50000. 52500. 55000. 57500. 60000. 62500. 65000. 67500. 70000. 72500. 75000. 77500. 80000. 82500. 85000. 87500. 90000. 92500. 95000. 97500. 100000. +? +0 +? +0 +? +? +? +0 +0.0 +0 +0.0 +? +0 +0.0 +0 +0.0 +1 +3.0 +0 +0 +0 +? +? +? +416 +GRLE_ON_ISOBARIC_SFC +Graupel mixing ration on isobaric surface +1 +tmpl4_0 +GRLE +? +? +isobaric_sfc +0 +? +46 +200. 500. 700. 1000. 2000. 3000. 5000. 7000. 7500. 10000. 12500. 15000. 17500. 20000. 22500. 25000. 27500. 30000. 32500. 35000. 37500. 40000. 42500. 45000. 47500. 50000. 52500. 55000. 57500. 60000. 62500. 65000. 67500. 70000. 72500. 75000. 77500. 80000. 82500. 85000. 87500. 90000. 92500. 95000. 97500. 100000. +? +0 +? +0 +? +? +? +0 +0.0 +0 +0.0 +? +0 +0.0 +0 +0.0 +1 +3.0 +0 +0 +0 +? +? +? +184 +SNMR_ON_ISOBARIC_SFC +? +1 +tmpl4_0 +SNMR +? +? +isobaric_sfc +0 +? +46 +200. 500. 700. 1000. 2000. 3000. 5000. 7000. 7500. 10000. 12500. 15000. 17500. 20000. 22500. 25000. 27500. 30000. 32500. 35000. 37500. 40000. 42500. 45000. 47500. 50000. 52500. 55000. 57500. 60000. 62500. 65000. 67500. 70000. 72500. 75000. 77500. 80000. 82500. 85000. 87500. 90000. 92500. 95000. 97500. 100000. +? +0 +? +0 +? +? +? +0 +0.0 +0 +0.0 +? +0 +0.0 +0 +0.0 +1 +3.0 +0 +0 +0 +? +? +? +23 +MSLET_ON_MEAN_SEA_LVL +? +1 +tmpl4_0 +MSLET +NCEP +? +mean_sea_lvl +0 +? +0 +? +? +0 +? +0 +? +? +? +0 +0.0 +0 +0.0 +? +0 +0.0 +0 +0.0 +1 +6.0 +0 +0 +0 +? +? +? +106 +TMP_ON_SPEC_HGT_LVL_ABOVE_GRND_2m +? +1 +tmpl4_0 +TMP +? +? +spec_hgt_lvl_above_grnd +0 +? +1 +2. +? +0 +? +0 +? +? +? +0 +0.0 +0 +0.0 +? +0 +0.0 +0 +0.0 +1 +4.0 +0 +0 +0 +? +? +? +112 +SPFH_ON_SPEC_HGT_LVL_ABOVE_GRND_2m +? +1 +tmpl4_0 +SPFH +? +? +spec_hgt_lvl_above_grnd +0 +? +1 +2. +? +0 +? +0 +? +? +? +0 +0.0 +0 +0.0 +? +0 +0.0 +0 +0.0 +1 +4.0 +0 +0 +0 +? +? +? +113 +DPT_ON_SPEC_HGT_LVL_ABOVE_GRND_2m +? +1 +tmpl4_0 +DPT +? +? +spec_hgt_lvl_above_grnd +0 +? +1 +2. +? +0 +? +0 +? +? +? +0 +0.0 +0 +0.0 +? +0 +0.0 +0 +0.0 +1 +4.0 +0 +0 +0 +? +? +? +114 +RH_ON_SPEC_HGT_LVL_ABOVE_GRND_2m +? +1 +tmpl4_0 +RH +? +? +spec_hgt_lvl_above_grnd +0 +? +1 +2. +? +0 +? +0 +? +? +? +0 +0.0 +0 +0.0 +? +0 +0.0 +0 +0.0 +1 +3.0 +0 +0 +0 +? +? +? +64 +UGRD_ON_SPEC_HGT_LVL_ABOVE_GRND_10m +? +1 +tmpl4_0 +UGRD +? +? +spec_hgt_lvl_above_grnd +0 +? +1 +10. +? +0 +? +0 +? +? +? +0 +0.0 +0 +0.0 +? +0 +0.0 +0 +0.0 +1 +4.0 +0 +0 +0 +? +? +? +65 +VGRD_ON_SPEC_HGT_LVL_ABOVE_GRND_10m +? +1 +tmpl4_0 +VGRD +? +? +spec_hgt_lvl_above_grnd +0 +? +1 +10. +? +0 +? +0 +? +? +? +0 +0.0 +0 +0.0 +? +0 +0.0 +0 +0.0 +1 +4.0 +0 +0 +0 +? +? +? +245 +GUST_ON_SURFACE +? +1 +tmpl4_0 +GUST +? +? +surface +0 +? +0 +? +? +0 +? +0 +? +? +? +0 +0.0 +0 +0.0 +? +0 +0.0 +0 +0.0 +1 +3.0 +0 +0 +0 +? +? +? +246 +PLPL_ON_SPEC_PRES_ABOVE_GRND +? +1 +tmpl4_0 +PLPL +NCEP +? +spec_pres_above_grnd +0 +? +1 +25500. +spec_pres_above_grnd +0 +? +1 +0. +? +? +0 +0.0 +0 +0.0 +? +0 +0.0 +0 +0.0 +1 +6.0 +0 +0 +0 +? +? +? +158 +POT_ON_SPEC_HGT_LVL_ABOVE_GRND_10m +? +1 +tmpl4_0 +POT +? +? +spec_hgt_lvl_above_grnd +0 +? +1 +10. +? +0 +? +0 +? +? +? +0 +0.0 +0 +0.0 +? +0 +0.0 +0 +0.0 +1 +5.0 +0 +0 +0 +? +? +? +159 +SPFH_ON_SPEC_HGT_LVL_ABOVE_GRND_10m +? +1 +tmpl4_0 +SPFH +? +? +spec_hgt_lvl_above_grnd +0 +? +1 +10. +? +0 +? +0 +? +? +? +0 +0.0 +0 +0.0 +? +0 +0.0 +0 +0.0 +1 +3.0 +0 +0 +0 +? +? +? +24 +PRES_ON_SURFACE +? +1 +tmpl4_0 +PRES +? +? +surface +0 +? +0 +? +? +0 +? +0 +? +? +? +0 +0.0 +0 +0.0 +? +0 +0.0 +0 +0.0 +1 +6.0 +0 +0 +0 +? +? +? +25 +HGT_ON_SURFACE +? +1 +tmpl4_0 +HGT +? +? +surface +0 +? +0 +? +? +0 +? +0 +? +? +? +0 +0.0 +0 +0.0 +? +0 +0.0 +0 +0.0 +1 +6.0 +0 +0 +0 +? +? +? +27 +POT_ON_SURFACE +? +1 +tmpl4_0 +POT +? +? +surface +0 +? +0 +? +? +0 +? +0 +? +? +? +0 +0.0 +0 +0.0 +? +0 +0.0 +0 +0.0 +1 +5.0 +0 +0 +0 +? +? +? +28 +SPFH_ON_SURFACE +? +1 +tmpl4_0 +SPFH +? +? +surface +0 +? +0 +? +? +0 +? +0 +? +? +? +0 +0.0 +0 +0.0 +? +0 +0.0 +0 +0.0 +1 +3.0 +0 +0 +0 +? +? +? +26 +TMP_ON_SURFACE +? +1 +tmpl4_0 +TMP +? +? +surface +0 +? +0 +? +? +0 +? +0 +? +? +? +0 +0.0 +0 +0.0 +? +0 +0.0 +0 +0.0 +1 +4.0 +0 +0 +0 +? +? +? +116 +TSOIL_ON_DEPTH_BEL_LAND_SFC +? +1 +tmpl4_0 +TSOIL +? +? +depth_bel_land_sfc +1 +2 +9 +0. 1. 4. 10. 30. 60. 100. 160. 300. +depth_bel_land_sfc +1 +2 +9 +0. 1. 4. 10. 30. 60. 100. 160. 300. +? +? +0 +0.0 +0 +0.0 +? +0 +0.0 +0 +0.0 +1 +4.0 +0 +0 +0 +? +? +? +117 +SOILW_ON_DEPTH_BEL_LAND_SFC +? +1 +tmpl4_0 +SOILW +NCEP +? +depth_bel_land_sfc +1 +2 +9 +0. 1. 4. 10. 30. 60. 100. 160. 300. +depth_bel_land_sfc +1 +2 +9 +0. 1. 4. 10. 30. 60. 100. 160. 300. +? +? +0 +0.0 +0 +0.0 +? +0 +0.0 +0 +0.0 +1 +3.0 +0 +0 +0 +? +? +? +118 +CNWAT_ON_SURFACE +? +1 +tmpl4_0 +CNWAT +NCEP +? +surface +0 +? +0 +? +? +0 +? +0 +? +? +? +0 +0.0 +0 +0.0 +? +0 +0.0 +0 +0.0 +1 +1.0 +0 +0 +0 +? +? +? +119 +WEASD_ON_SURFACE +? +1 +tmpl4_0 +WEASD +? +? +surface +0 +? +0 +? +? +0 +? +0 +? +? +? +0 +0.0 +0 +0.0 +? +0 +0.0 +0 +0.0 +1 +4.0 +0 +0 +0 +? +? +? +120 +SNOWC_ON_SURFACE +? +1 +tmpl4_0 +SNOWC +NCEP +? +surface +0 +? +0 +? +? +0 +? +0 +? +? +? +0 +0.0 +0 +0.0 +? +0 +0.0 +0 +0.0 +1 +3.0 +0 +0 +0 +? +? +? +169 +SFEXC_ON_SURFACE +? +1 +tmpl4_0 +SFEXC +NCEP +? +surface +0 +? +0 +? +? +0 +? +0 +? +? +? +0 +0.0 +0 +0.0 +? +0 +0.0 +0 +0.0 +1 +3.0 +0 +0 +0 +? +? +? +170 +VEG_ON_SURFACE +? +1 +tmpl4_0 +VEG +? +? +surface +0 +? +0 +? +? +0 +? +0 +? +? +? +0 +0.0 +0 +0.0 +? +0 +0.0 +0 +0.0 +1 +3.0 +0 +0 +0 +? +? +? +218 +VGTYP_ON_SURFACE +? +1 +tmpl4_0 +VGTYP +NCEP +? +surface +0 +? +0 +? +? +0 +? +0 +? +? +? +0 +0.0 +0 +0.0 +? +0 +0.0 +0 +0.0 +1 +3.0 +0 +0 +0 +? +? +? +219 +SOTYP_ON_SURFACE +? +1 +tmpl4_0 +SOTYP +? +? +surface +0 +? +0 +? +? +0 +? +0 +? +? +? +0 +0.0 +0 +0.0 +? +0 +0.0 +0 +0.0 +1 +3.0 +0 +0 +0 +? +? +? +226 +SNFALB_ON_SURFACE +? +1 +tmpl4_0 +SNFALB +NCEP +? +surface +0 +? +0 +? +? +0 +? +0 +? +? +? +0 +0.0 +0 +0.0 +? +0 +0.0 +0 +0.0 +1 +3.0 +0 +0 +0 +? +? +? +227 +MXSALB_ON_SURFACE +? +1 +tmpl4_0 +MXSALB +NCEP +? +surface +0 +? +0 +? +? +0 +? +0 +? +? +? +0 +0.0 +0 +0.0 +? +0 +0.0 +0 +0.0 +1 +3.0 +0 +0 +0 +? +? +? +220 +CCOND_ON_SURFACE +? +1 +tmpl4_0 +CCOND +NCEP +? +surface +0 +? +0 +? +? +0 +? +0 +? +? +? +0 +0.0 +0 +0.0 +? +0 +0.0 +0 +0.0 +1 +3.0 +0 +0 +0 +? +? +? +238 +RCS_ON_SURFACE +? +1 +tmpl4_0 +RCS +NCEP +? +surface +0 +? +0 +? +? +0 +? +0 +? +? +? +0 +0.0 +0 +0.0 +? +0 +0.0 +0 +0.0 +1 +3.0 +0 +0 +0 +? +? +? +239 +RCT_ON_SURFACE +? +1 +tmpl4_0 +RCT +NCEP +? +surface +0 +? +0 +? +? +0 +? +0 +? +? +? +0 +0.0 +0 +0.0 +? +0 +0.0 +0 +0.0 +1 +5.0 +0 +0 +0 +? +? +? +240 +RCQ_ON_SURFACE +? +1 +tmpl4_0 +RCQ +NCEP +? +surface +0 +? +0 +? +? +0 +? +0 +? +? +? +0 +0.0 +0 +0.0 +? +0 +0.0 +0 +0.0 +1 +3.0 +0 +0 +0 +? +? +? +241 +RCSOL_ON_SURFACE +? +1 +tmpl4_0 +RCSOL +NCEP +? +surface +0 +? +0 +? +? +0 +? +0 +? +? +? +0 +0.0 +0 +0.0 +? +0 +0.0 +0 +0.0 +1 +3.0 +0 +0 +0 +? +? +? +237 +SMREF_ON_SURFACE +? +1 +tmpl4_0 +SMREF +NCEP +? +surface +0 +? +0 +? +? +0 +? +0 +? +? +? +0 +0.0 +0 +0.0 +? +0 +0.0 +0 +0.0 +1 +3.0 +0 +0 +0 +? +? +? +233 +POROS_ON_SURFACE +? +1 +tmpl4_0 +POROS +NCEP +? +surface +0 +? +0 +? +? +0 +? +0 +? +? +? +0 +0.0 +0 +0.0 +? +0 +0.0 +0 +0.0 +1 +3.0 +0 +0 +0 +? +? +? +235 +RLYRS_ON_SURFACE +? +1 +tmpl4_0 +RLYRS +NCEP +? +surface +0 +? +0 +? +? +0 +? +0 +? +? +? +0 +0.0 +0 +0.0 +? +0 +0.0 +0 +0.0 +1 +3.0 +0 +0 +0 +? +? +? +234 +RSMIN_ON_SURFACE +? +1 +tmpl4_0 +RSMIN +NCEP +? +surface +0 +? +0 +? +? +0 +? +0 +? +? +? +0 +0.0 +0 +0.0 +? +0 +0.0 +0 +0.0 +1 +3.0 +0 +0 +0 +? +? +? +224 +SNOD_ON_SURFACE +? +1 +tmpl4_0 +SNOD +? +? +surface +0 +? +0 +? +? +0 +? +0 +? +? +? +0 +0.0 +0 +0.0 +? +0 +0.0 +0 +0.0 +1 +6.0 +0 +0 +0 +? +? +? +725 +GSD_ACM_SNOD_ON_SURFACE +? +1 +tmpl4_8 +ASNOW +? +ACM +surface +0 +? +0 +? +? +0 +? +0 +? +? +? +0 +0.0 +0 +0.0 +? +0 +0.0 +0 +0.0 +1 +5.0 +0 +0 +0 +? +? +? +232 +SMDRY_ON_SURFACE +? +1 +tmpl4_0 +SMDRY +NCEP +? +surface +0 +? +0 +? +? +0 +? +0 +? +? +? +0 +0.0 +0 +0.0 +? +0 +0.0 +0 +0.0 +1 +3.0 +0 +0 +0 +? +? +? +236 +WILT_ON_SURFACE +? +1 +tmpl4_0 +WILT +NCEP +? +surface +0 +? +0 +? +? +0 +? +0 +? +? +? +0 +0.0 +0 +0.0 +? +0 +0.0 +0 +0.0 +1 +3.0 +0 +0 +0 +? +? +? +171 +MSTAV_ON_DEPTH_BEL_LAND_SFC +? +1 +tmpl4_0 +MSTAV +NCEP +? +depth_bel_land_sfc +1 +2 +1 +0. +depth_bel_land_sfc +1 +2 +1 +100. +? +? +0 +0.0 +0 +0.0 +? +0 +0.0 +0 +0.0 +1 +3.0 +0 +0 +0 +? +? +? +152 +INST_GFLUX_ON_SURFACE +? +1 +tmpl4_0 +GFLUX +NCEP +? +surface +0 +? +0 +? +? +0 +? +0 +? +? +? +0 +0.0 +0 +0.0 +? +0 +0.0 +0 +0.0 +1 +3.0 +0 +0 +0 +? +? +? +30 +LFTX_ON_ISOBARIC_SFC_500-1000hpa +? +1 +tmpl4_0 +LFTX +NCEP +? +isobaric_sfc +0 +? +1 +50000. +isobaric_sfc +0 +? +1 +100000. +? +? +0 +0.0 +0 +0.0 +? +0 +0.0 +0 +0.0 +1 +3.0 +0 +0 +0 +? +? +? +31 +4LFTX_ON_SPEC_PRES_ABOVE_GRND +? +1 +tmpl4_0 +4LFTX +NCEP +? +spec_pres_above_grnd +0 +? +1 +18000. +spec_pres_above_grnd +0 +? +1 +0. +? +? +0 +0.0 +0 +0.0 +? +0 +0.0 +0 +0.0 +1 +3.0 +0 +0 +0 +? +? +? +75 +PLI_ON_SPEC_PRES_ABOVE_GRND +? +1 +tmpl4_0 +PLI +? +? +spec_pres_above_grnd +0 +? +1 +3000. +spec_pres_above_grnd +0 +? +1 +0. +? +? +0 +0.0 +0 +0.0 +? +0 +0.0 +0 +0.0 +1 +3.0 +0 +0 +0 +? +? +? +32 +CAPE_ON_SURFACE +? +1 +tmpl4_0 +CAPE +? +? +surface +0 +? +0 +? +? +0 +? +0 +? +? +? +0 +0.0 +0 +0.0 +? +0 +0.0 +0 +0.0 +1 +4.0 +0 +0 +0 +? +? +? +566 +BEST_CAPE_ON_SPEC_PRES_ABOVE_GRND +? +1 +tmpl4_0 +CAPE +? +? +spec_pres_above_grnd +0 +? +1 +18000. +spec_pres_above_grnd +0 +? +1 +0. +? +? +0 +0.0 +0 +0.0 +? +0 +0.0 +0 +0.0 +1 +4.0 +0 +0 +0 +? +? +? +582 +MIXED_LAYER_CAPE_ON_SPEC_PRES_ABOVE_GRND +? +1 +tmpl4_0 +CAPE +? +? +spec_pres_above_grnd +0 +? +1 +9000. +spec_pres_above_grnd +0 +? +1 +0. +? +? +0 +0.0 +0 +0.0 +? +0 +0.0 +0 +0.0 +1 +4.0 +0 +0 +0 +? +? +? +584 +UNSTABLE_CAPE_ON_SPEC_PRES_ABOVE_GRND +? +1 +tmpl4_0 +CAPE +? +? +spec_pres_above_grnd +0 +? +1 +25500. +spec_pres_above_grnd +0 +? +1 +0. +? +? +0 +0.0 +0 +0.0 +? +0 +0.0 +0 +0.0 +1 +4.0 +0 +0 +0 +? +? +? +107 +CIN_ON_SURFACE +? +1 +tmpl4_0 +CIN +? +? +surface +0 +? +0 +? +? +0 +? +0 +? +? +? +0 +0.0 +0 +0.0 +? +0 +0.0 +0 +0.0 +1 +4.0 +0 +0 +0 +? +? +? +567 +BEST_CIN_ON_SPEC_PRES_ABOVE_GRND +? +1 +tmpl4_0 +CIN +? +? +spec_pres_above_grnd +0 +? +1 +18000. +spec_pres_above_grnd +0 +? +1 +0. +? +? +0 +0.0 +0 +0.0 +? +0 +0.0 +0 +0.0 +1 +4.0 +0 +0 +0 +? +? +? +583 +MIXED_LAYER_CIN_ON_SPEC_PRES_ABOVE_GRND +? +1 +tmpl4_0 +CIN +? +? +spec_pres_above_grnd +0 +? +1 +9000. +spec_pres_above_grnd +0 +? +1 +0. +? +? +0 +0.0 +0 +0.0 +? +0 +0.0 +0 +0.0 +1 +4.0 +0 +0 +0 +? +? +? +585 +UNSTABLE_CIN_ON_SPEC_PRES_ABOVE_GRND +? +1 +tmpl4_0 +CIN +? +? +spec_pres_above_grnd +0 +? +1 +25500. +spec_pres_above_grnd +0 +? +1 +0. +? +? +0 +0.0 +0 +0.0 +? +0 +0.0 +0 +0.0 +1 +4.0 +0 +0 +0 +? +? +? +80 +PWAT_ON_ENTIRE_ATMOS_SINGLE_LYR +? +1 +tmpl4_0 +PWAT +? +? +entire_atmos_single_lyr +0 +? +0 +? +? +0 +? +0 +? +? +? +0 +0.0 +0 +0.0 +? +0 +0.0 +0 +0.0 +1 +3.0 +0 +0 +0 +? +? +? +162 +HLCY_ON_SPEC_HGT_LVL_ABOVE_GRND +? +1 +tmpl4_0 +HLCY +? +? +spec_hgt_lvl_above_grnd +0 +? +2 +3000. 1000. +spec_hgt_lvl_above_grnd +0 +? +0 +? +? +? +0 +0.0 +0 +0.0 +? +0 +0.0 +0 +0.0 +1 +4.0 +0 +0 +0 +? +? +? +163 +USTM_ON_SPEC_HGT_LVL_ABOVE_GRND +? +1 +tmpl4_0 +USTM +NCEP +? +spec_hgt_lvl_above_grnd +0 +? +1 +6000. +spec_hgt_lvl_above_grnd +0 +? +0 +? +? +? +0 +0.0 +0 +0.0 +? +0 +0.0 +0 +0.0 +1 +4.0 +0 +0 +0 +? +? +? +164 +VSTM_ON_SPEC_HGT_LVL_ABOVE_GRND +? +1 +tmpl4_0 +VSTM +NCEP +? +spec_hgt_lvl_above_grnd +0 +? +1 +6000. +spec_hgt_lvl_above_grnd +0 +? +0 +? +? +? +0 +0.0 +0 +0.0 +? +0 +0.0 +0 +0.0 +1 +4.0 +0 +0 +0 +? +? +? +87 +ACM_APCP_ON_SURFACE +? +1 +tmpl4_8 +APCP +? +ACM +surface +0 +? +0 +? +? +0 +? +0 +? +? +? +0 +0.0 +0 +0.0 +? +0 +0.0 +0 +0.0 +1 +-4.0 +0 +0 +0 +? +? +? +746 +ACM_GRAUPEL_ON_SURFACE +? +1 +tmpl4_8 +FROZR +NCEP +ACM +surface +0 +? +0 +? +? +0 +? +0 +? +? +? +0 +0.0 +0 +0.0 +? +0 +0.0 +0 +0.0 +1 +6.0 +0 +0 +0 +? +? +? +775 +BUCKET_GRAUPEL_ON_SURFACE +bucket graupel precipitation on surface +1 +tmpl4_8 +FROZR +NCEP +ACM +surface +0 +? +0 +? +? +0 +? +0 +? +? +? +0 +0.0 +0 +0.0 +? +0 +0.0 +0 +0.0 +1 +6.0 +0 +0 +0 +? +? +? +782 +ACM_FRAIN_ON_SURFACE +? +1 +tmpl4_8 +FRZR +NCEP +ACM +surface +0 +? +0 +? +? +0 +? +0 +? +? +? +0 +0.0 +0 +0.0 +? +0 +0.0 +0 +0.0 +1 +6.0 +0 +0 +0 +? +? +? +1003 +BUCKET_FRAIN_ON_SURFACE +? +1 +tmpl4_8 +FRZR +NCEP +ACM +surface +0 +? +0 +? +? +0 +? +0 +? +? +? +0 +0.0 +0 +0.0 +? +0 +0.0 +0 +0.0 +1 +6.0 +0 +0 +0 +? +? +? +1004 +ACM_SNOWFALL_ON_SURFACE +? +1 +tmpl4_8 +TSNOWP +? +ACM +surface +0 +? +0 +? +? +0 +? +0 +? +? +? +0 +0.0 +0 +0.0 +? +0 +0.0 +0 +0.0 +1 +6.0 +0 +0 +0 +? +? +? +1005 +BUCKET_SNOWFALL_ON_SURFACE +? +1 +tmpl4_8 +TSNOWP +? +ACM +surface +0 +? +0 +? +? +0 +? +0 +? +? +? +0 +0.0 +0 +0.0 +? +0 +0.0 +0 +0.0 +1 +6.0 +0 +0 +0 +? +? +? +34 +ACM_NCPCP_ON_SURFACE +? +1 +tmpl4_8 +NCPCP +? +ACM +surface +0 +? +0 +? +? +0 +? +0 +? +? +? +0 +0.0 +0 +0.0 +? +0 +0.0 +0 +0.0 +1 +-4.0 +0 +0 +0 +? +? +? +417 +CACM_APCP_ON_SURFACE +? +1 +tmpl4_8 +APCP +? +ACM +surface +0 +? +0 +? +? +0 +? +0 +? +? +? +0 +0.0 +0 +0.0 +? +0 +0.0 +0 +0.0 +1 +-4.0 +0 +0 +0 +? +? +? +419 +CACM_NCPCP_ON_SURFACE +? +1 +tmpl4_8 +NCPCP +? +ACM +surface +0 +? +0 +? +? +0 +? +0 +? +? +? +0 +0.0 +0 +0.0 +? +0 +0.0 +0 +0.0 +1 +-4.0 +0 +0 +0 +? +? +? +35 +ACM_WEASD_ON_SURFACE +? +1 +tmpl4_8 +WEASD +? +ACM +surface +0 +? +0 +? +? +0 +? +0 +? +? +? +0 +0.0 +0 +0.0 +? +0 +0.0 +0 +0.0 +1 +4.0 +0 +0 +0 +? +? +? +121 +ACM_SNOM_ON_SURFACE +? +1 +tmpl4_8 +SNOM +? +ACM +surface +0 +? +0 +? +? +0 +? +0 +? +? +? +0 +0.0 +0 +0.0 +? +0 +0.0 +0 +0.0 +1 +4.0 +0 +0 +0 +? +? +? +122 +ACM_SSRUN_ON_SURFACE +? +1 +tmpl4_8 +SSRUN +NCEP +ACM +surface +0 +? +0 +? +? +0 +? +0 +? +? +? +0 +0.0 +0 +0.0 +? +0 +0.0 +0 +0.0 +1 +6.0 +0 +0 +0 +? +? +? +123 +ACM_BGRUN_ON_SURFACE +? +1 +tmpl4_8 +BGRUN +NCEP +ACM +surface +0 +? +0 +? +? +0 +? +0 +? +? +? +0 +0.0 +0 +0.0 +? +0 +0.0 +0 +0.0 +1 +6.0 +0 +0 +0 +? +? +? +343 +ACM_WATR_ON_SURFACE +? +1 +tmpl4_8 +WATR +? +ACM +surface +0 +? +0 +? +? +0 +? +0 +? +? +? +0 +0.0 +0 +0.0 +? +0 +0.0 +0 +0.0 +1 +6.0 +0 +0 +0 +? +? +? +160 +INST_CRAIN_ON_SURFACE +? +1 +tmpl4_0 +CRAIN +NCEP +? +surface +0 +? +0 +? +? +0 +? +0 +? +? +? +0 +0.0 +0 +0.0 +? +0 +0.0 +0 +0.0 +1 +1.0 +0 +0 +0 +? +? +? +551 +CSNOW_ON_SURFACE +Categorical snow on surface +1 +tmpl4_0 +CSNOW +NCEP +? +surface +0 +? +0 +? +? +0 +? +0 +? +? +? +0 +0.0 +0 +0.0 +? +0 +0.0 +0 +0.0 +1 +1.0 +0 +0 +0 +? +? +? +552 +CICEP_ON_SURFACE +Categorical ice pellets on surface +1 +tmpl4_0 +CICEP +NCEP +? +surface +0 +? +0 +? +? +0 +? +0 +? +? +? +0 +0.0 +0 +0.0 +? +0 +0.0 +0 +0.0 +1 +1.0 +0 +0 +0 +? +? +? +553 +CFRZR_ON_SURFACE +Categorical freezing rain on surface +1 +tmpl4_0 +CFRZR +NCEP +? +surface +0 +? +0 +? +? +0 +? +0 +? +? +? +0 +0.0 +0 +0.0 +? +0 +0.0 +0 +0.0 +1 +1.0 +0 +0 +0 +? +? +? +167 +INST_PRATE_ON_SURFACE +? +1 +tmpl4_0 +PRATE +? +? +surface +0 +? +0 +? +? +0 +? +0 +? +? +? +0 +0.0 +0 +0.0 +? +0 +0.0 +0 +0.0 +1 +3.0 +0 +0 +0 +? +? +? +172 +CPOFP_ON_SURFACE +? +1 +tmpl4_0 +CPOFP +NCEP +? +surface +0 +? +0 +? +? +0 +? +0 +? +? +? +0 +0.0 +0 +0.0 +? +0 +0.0 +0 +0.0 +1 +4.0 +0 +0 +0 +? +? +? +124 +CLMR_ON_HYBRID_LVL +? +1 +tmpl4_0 +CLMR +? +? +hybrid_lvl +0 +? +2 +1. 2. +? +0 +? +0 +? +? +? +0 +0.0 +0 +0.0 +? +0 +0.0 +0 +0.0 +1 +3.0 +0 +0 +0 +? +? +? +125 +ICMR_ON_HYBRID_LVL +? +1 +tmpl4_0 +ICMR +? +? +hybrid_lvl +0 +? +2 +1. 2. +? +0 +? +0 +? +? +? +0 +0.0 +0 +0.0 +? +0 +0.0 +0 +0.0 +1 +3.0 +0 +0 +0 +? +? +? +415 +GRLE_ON_HYBRID_LVL +Graupel mixing ration on hybrid level +1 +tmpl4_0 +GRLE +? +? +hybrid_lvl +0 +? +2 +1. 2. +? +0 +? +0 +? +? +? +0 +0.0 +0 +0.0 +? +0 +0.0 +0 +0.0 +1 +3.0 +0 +0 +0 +? +? +? +145 +TCDC_ON_HYBRID_LVL +? +1 +tmpl4_0 +TCDC +? +? +hybrid_lvl +0 +? +2 +1. 2. +? +0 +? +0 +? +? +? +0 +0.0 +0 +0.0 +? +0 +0.0 +0 +0.0 +1 +3.0 +0 +0 +0 +? +? +? +37 +LCDC_ON_LOW_CLOUD_LYR +? +1 +tmpl4_0 +LCDC +? +? +low_cloud_lyr +0 +? +0 +? +? +0 +? +0 +? +? +? +0 +0.0 +0 +0.0 +? +0 +0.0 +0 +0.0 +1 +3.0 +0 +0 +0 +? +? +? +38 +MCDC_ON_MID_CLOUD_LYR +? +1 +tmpl4_0 +MCDC +? +? +mid_cloud_lyr +0 +? +0 +? +? +0 +? +0 +? +? +? +0 +0.0 +0 +0.0 +? +0 +0.0 +0 +0.0 +1 +3.0 +0 +0 +0 +? +? +? +39 +HCDC_ON_HIGH_CLOUD_LYR +? +1 +tmpl4_0 +HCDC +? +? +high_cloud_lyr +0 +? +0 +? +? +0 +? +0 +? +? +? +0 +0.0 +0 +0.0 +? +0 +0.0 +0 +0.0 +1 +3.0 +0 +0 +0 +? +? +? +161 +INST_TCDC_ON_ENTIRE_ATMOS +? +1 +tmpl4_0 +TCDC +? +? +entire_atmos_single_lyr +0 +? +0 +? +? +0 +? +0 +? +? +? +0 +0.0 +0 +0.0 +? +0 +0.0 +0 +0.0 +1 +3.0 +0 +0 +0 +? +? +? +144 +AVE_TCDC_ON_ENTIRE_ATMOS +? +1 +tmpl4_8 +TCDC +? +AVE +entire_atmos_single_lyr +0 +? +0 +? +? +0 +? +0 +? +? +? +0 +0.0 +0 +0.0 +? +0 +0.0 +0 +0.0 +1 +3.0 +0 +0 +0 +? +? +? +139 +AVE_CDLYR_ON_ENTIRE_ATMOS +? +1 +tmpl4_8 +CDLYR +NCEP +AVE +entire_atmos_single_lyr +0 +? +0 +? +? +0 +? +0 +? +? +? +0 +0.0 +0 +0.0 +? +0 +0.0 +0 +0.0 +1 +3.0 +0 +0 +0 +? +? +? +410 +GSD_VIS_ON_SURFACE +GSD_visibility on surface +1 +tmpl4_0 +VIS +? +? +surface +0 +? +0 +? +? +0 +? +0 +? +? +? +0 +0.0 +0 +0.0 +? +0 +0.0 +0 +0.0 +1 +6.0 +0 +0 +0 +? +? +? +109 +HGT_ON_LVL_OF_ADIAB_COND_FROM_SFC +? +1 +tmpl4_0 +HGT +? +? +lvl_of_adiab_cond_from_sfc +0 +? +0 +? +? +0 +? +0 +? +? +? +0 +0.0 +0 +0.0 +? +0 +0.0 +0 +0.0 +1 +5.0 +0 +0 +0 +? +? +? +110 +PRES_ON_LVL_OF_ADIAB_COND_FROM_SFC +? +1 +tmpl4_0 +PRES +? +? +lvl_of_adiab_cond_from_sfc +0 +? +0 +? +? +0 +? +0 +? +? +? +0 +0.0 +0 +0.0 +? +0 +0.0 +0 +0.0 +1 +6.0 +0 +0 +0 +? +? +? +141 +INST_USWRF_ON_SURFACE +? +1 +tmpl4_0 +USWRF +NCEP +? +surface +0 +? +0 +? +? +0 +? +0 +? +? +? +0 +0.0 +0 +0.0 +? +0 +0.0 +0 +0.0 +1 +4.0 +0 +0 +0 +? +? +? +142 +INST_ULWRF_ON_SURFACE +? +1 +tmpl4_0 +ULWRF +NCEP +? +surface +0 +? +0 +? +? +0 +? +0 +? +? +? +0 +0.0 +0 +0.0 +? +0 +0.0 +0 +0.0 +1 +4.0 +0 +0 +0 +? +? +? +126 +AVE_DSWRF_ON_SURFACE +? +1 +tmpl4_8 +DSWRF +NCEP +AVE +surface +0 +? +0 +? +? +0 +? +0 +? +? +? +0 +0.0 +0 +0.0 +? +0 +0.0 +0 +0.0 +1 +3.0 +0 +0 +0 +? +? +? +127 +AVE_DLWRF_ON_SURFACE +? +1 +tmpl4_8 +DLWRF +NCEP +AVE +surface +0 +? +0 +? +? +0 +? +0 +? +? +? +0 +0.0 +0 +0.0 +? +0 +0.0 +0 +0.0 +1 +3.0 +0 +0 +0 +? +? +? +128 +AVE_USWRF_ON_SURFACE +? +1 +tmpl4_8 +USWRF +NCEP +AVE +surface +0 +? +0 +? +? +0 +? +0 +? +? +? +0 +0.0 +0 +0.0 +? +0 +0.0 +0 +0.0 +1 +3.0 +0 +0 +0 +? +? +? +129 +AVE_ULWRF_ON_SURFACE +? +1 +tmpl4_8 +ULWRF +NCEP +AVE +surface +0 +? +0 +? +? +0 +? +0 +? +? +? +0 +0.0 +0 +0.0 +? +0 +0.0 +0 +0.0 +1 +3.0 +0 +0 +0 +? +? +? +130 +AVE_USWRF_ON_TOP_OF_ATMOS +? +1 +tmpl4_8 +USWRF +NCEP +AVE +top_of_atmos +0 +? +0 +? +? +0 +? +0 +? +? +? +0 +0.0 +0 +0.0 +? +0 +0.0 +0 +0.0 +1 +3.0 +0 +0 +0 +? +? +? +131 +AVE_ULWRF_ON_TOP_OF_ATMOS +? +1 +tmpl4_8 +ULWRF +NCEP +AVE +top_of_atmos +0 +? +0 +? +? +0 +? +0 +? +? +? +0 +0.0 +0 +0.0 +? +0 +0.0 +0 +0.0 +1 +3.0 +0 +0 +0 +? +? +? +274 +INST_ULWRF_ON_TOP_OF_ATMOS +? +1 +tmpl4_0 +ULWRF +NCEP +? +top_of_atmos +0 +? +0 +? +? +0 +? +0 +? +? +? +0 +0.0 +0 +0.0 +? +0 +0.0 +0 +0.0 +1 +4.0 +0 +0 +0 +? +? +? +275 +BRTMP_ON_TOP_OF_ATMOS +? +1 +tmpl4_0 +BRTMP +? +? +top_of_atmos +0 +? +0 +? +? +0 +? +0 +? +? +? +0 +0.0 +0 +0.0 +? +0 +0.0 +0 +0.0 +1 +3.0 +0 +0 +0 +? +? +? +156 +INST_DSWRF_ON_SURFACE +? +1 +tmpl4_0 +DSWRF +NCEP +? +surface +0 +? +0 +? +? +0 +? +0 +? +? +? +0 +0.0 +0 +0.0 +? +0 +0.0 +0 +0.0 +1 +4.0 +0 +0 +0 +? +? +? +157 +INST_DLWRF_ON_SURFACE +? +1 +tmpl4_0 +DLWRF +NCEP +? +surface +0 +? +0 +? +? +0 +? +0 +? +? +? +0 +0.0 +0 +0.0 +? +0 +0.0 +0 +0.0 +1 +4.0 +0 +0 +0 +? +? +? +262 +INST_CSDSF_ON_SURFACE +? +1 +tmpl4_0 +CSDSF +NCEP +? +surface +0 +? +0 +? +? +0 +? +0 +? +? +? +0 +0.0 +0 +0.0 +? +0 +0.0 +0 +0.0 +1 +4.0 +0 +0 +0 +? +? +? +44 +SFCR_ON_SURFACE +? +1 +tmpl4_0 +SFCR +? +? +surface +0 +? +0 +? +? +0 +? +0 +? +? +? +0 +0.0 +0 +0.0 +? +0 +0.0 +0 +0.0 +1 +2.7 +0 +0 +0 +? +? +? +45 +FRICV_ON_SURFACE +? +1 +tmpl4_0 +FRICV +NCEP +? +surface +0 +? +0 +? +? +0 +? +0 +? +? +? +0 +0.0 +0 +0.0 +? +0 +0.0 +0 +0.0 +1 +4.0 +0 +0 +0 +? +? +? +132 +CD_ON_SURFACE +? +1 +tmpl4_0 +CD +NCEP +? +surface +0 +? +0 +? +? +0 +? +0 +? +? +? +0 +0.0 +0 +0.0 +? +0 +0.0 +0 +0.0 +1 +3.0 +0 +0 +0 +? +? +? +133 +UFLX_ON_SURFACE +? +1 +tmpl4_0 +UFLX +? +? +surface +0 +? +0 +? +? +0 +? +0 +? +? +? +0 +0.0 +0 +0.0 +? +0 +0.0 +0 +0.0 +1 +3.0 +0 +0 +0 +? +? +? +134 +VFLX_ON_SURFACE +? +1 +tmpl4_0 +VFLX +? +? +surface +0 +? +0 +? +? +0 +? +0 +? +? +? +0 +0.0 +0 +0.0 +? +0 +0.0 +0 +0.0 +1 +3.0 +0 +0 +0 +? +? +? +43 +AVE_SHTFL_ON_SURFACE +? +1 +tmpl4_8 +SHTFL +? +AVE +surface +0 +? +0 +? +? +0 +? +0 +? +? +? +0 +0.0 +0 +0.0 +? +0 +0.0 +0 +0.0 +1 +4.0 +0 +0 +0 +? +? +? +135 +AVE_GFLUX_ON_SURFACE +? +1 +tmpl4_8 +GFLUX +NCEP +AVE +surface +0 +? +0 +? +? +0 +? +0 +? +? +? +0 +0.0 +0 +0.0 +? +0 +0.0 +0 +0.0 +1 +4.0 +0 +0 +0 +? +? +? +136 +AVE_SNOHF_ON_SURFACE +? +1 +tmpl4_8 +SNOHF +NCEP +AVE +surface +0 +? +0 +? +? +0 +? +0 +? +? +? +0 +0.0 +0 +0.0 +? +0 +0.0 +0 +0.0 +1 +4.0 +0 +0 +0 +? +? +? +42 +AVE_LHTFL_ON_SURFACE +? +1 +tmpl4_8 +LHTFL +? +AVE +surface +0 +? +0 +? +? +0 +? +0 +? +? +? +0 +0.0 +0 +0.0 +? +0 +0.0 +0 +0.0 +1 +4.0 +0 +0 +0 +? +? +? +47 +ACM_EVP_ON_SURFACE +? +1 +tmpl4_8 +EVP +? +ACM +surface +0 +? +0 +? +? +0 +? +0 +? +? +? +0 +0.0 +0 +0.0 +? +0 +0.0 +0 +0.0 +1 +4.0 +0 +0 +0 +? +? +? +137 +ACM_PEVAP_ON_SURFACE +? +1 +tmpl4_8 +PEVAP +NCEP +ACM +surface +0 +? +0 +? +? +0 +? +0 +? +? +? +0 +0.0 +0 +0.0 +? +0 +0.0 +0 +0.0 +1 +4.0 +0 +0 +0 +? +? +? +154 +INST_SHTFL_ON_SURFACE +? +1 +tmpl4_0 +SHTFL +? +? +surface +0 +? +0 +? +? +0 +? +0 +? +? +? +0 +0.0 +0 +0.0 +? +0 +0.0 +0 +0.0 +1 +4.0 +0 +0 +0 +? +? +? +155 +INST_LHTFL_ON_SURFACE +? +1 +tmpl4_0 +LHTFL +? +? +surface +0 +? +0 +? +? +0 +? +0 +? +? +? +0 +0.0 +0 +0.0 +? +0 +0.0 +0 +0.0 +1 +4.0 +0 +0 +0 +? +? +? +48 +NLAT_ON_SURFACE +? +1 +tmpl4_0 +NLAT +NCEP +? +surface +0 +? +0 +? +? +0 +? +0 +? +? +? +0 +0.0 +0 +0.0 +? +0 +0.0 +0 +0.0 +1 +4.0 +0 +0 +0 +? +? +? +49 +ELON_ON_SURFACE +? +1 +tmpl4_0 +ELON +NCEP +? +surface +0 +? +0 +? +? +0 +? +0 +? +? +? +0 +0.0 +0 +0.0 +? +0 +0.0 +0 +0.0 +1 +4.0 +0 +0 +0 +? +? +? +50 +LAND_ON_SURFACE +? +1 +tmpl4_0 +LAND +? +? +surface +0 +? +0 +? +? +0 +? +0 +? +? +? +0 +0.0 +0 +0.0 +? +0 +0.0 +0 +0.0 +1 +1.0 +0 +0 +0 +? +? +? +51 +ICEC_ON_SURFACE +? +1 +tmpl4_0 +ICEC +? +? +surface +0 +? +0 +? +? +0 +? +0 +? +? +? +0 +0.0 +0 +0.0 +? +0 +0.0 +0 +0.0 +1 +3.0 +0 +0 +0 +? +? +? +150 +ALBDO_ON_SURFACE +? +1 +tmpl4_0 +ALBDO +? +? +surface +0 +? +0 +? +? +0 +? +0 +? +? +? +0 +0.0 +0 +0.0 +? +0 +0.0 +0 +0.0 +1 +3.0 +0 +0 +0 +? +? +? +151 +WTMP_ON_SURFACE +? +1 +tmpl4_0 +WTMP +? +? +surface +0 +? +0 +? +? +0 +? +0 +? +? +? +0 +0.0 +0 +0.0 +? +0 +0.0 +0 +0.0 +1 +5.0 +0 +0 +0 +? +? +? +54 +PRES_ON_TROPOPAUSE +? +1 +tmpl4_0 +PRES +? +? +tropopause +0 +? +0 +? +? +0 +? +0 +? +? +? +0 +0.0 +0 +0.0 +? +0 +0.0 +0 +0.0 +1 +6.0 +0 +0 +0 +? +? +? +177 +HGT_ON_TROPOPAUSE +? +1 +tmpl4_0 +HGT +? +? +tropopause +0 +? +0 +? +? +0 +? +0 +? +? +? +0 +0.0 +0 +0.0 +? +0 +0.0 +0 +0.0 +1 +6.0 +0 +0 +0 +? +? +? +55 +TMP_ON_TROPOPAUSE +? +1 +tmpl4_0 +TMP +? +? +tropopause +0 +? +0 +? +? +0 +? +0 +? +? +? +0 +0.0 +0 +0.0 +? +0 +0.0 +0 +0.0 +1 +3.0 +0 +0 +0 +? +? +? +108 +POT_ON_TROPOPAUSE +? +1 +tmpl4_0 +POT +? +? +tropopause +0 +? +0 +? +? +0 +? +0 +? +? +? +0 +0.0 +0 +0.0 +? +0 +0.0 +0 +0.0 +1 +5.0 +0 +0 +0 +? +? +? +56 +UGRD_ON_TROPOPAUSE +? +1 +tmpl4_0 +UGRD +? +? +tropopause +0 +? +0 +? +? +0 +? +0 +? +? +? +0 +0.0 +0 +0.0 +? +0 +0.0 +0 +0.0 +1 +4.0 +0 +0 +0 +? +? +? +57 +VGRD_ON_TROPOPAUSE +? +1 +tmpl4_0 +VGRD +? +? +tropopause +0 +? +0 +? +? +0 +? +0 +? +? +? +0 +0.0 +0 +0.0 +? +0 +0.0 +0 +0.0 +1 +4.0 +0 +0 +0 +? +? +? +58 +VWSH_ON_TROPOPAUSE +? +1 +tmpl4_0 +VWSH +NCEP +? +tropopause +0 +? +0 +? +? +0 +? +0 +? +? +? +0 +0.0 +0 +0.0 +? +0 +0.0 +0 +0.0 +1 +3.0 +0 +0 +0 +? +? +? +432 +VUCSH_ON_SPEC_HGT_LVL_ABOVE_GRND_0-6km +Vertical u-component shear between 0 to 6000m Above Ground +1 +tmpl4_0 +VUCSH +? +? +spec_hgt_lvl_above_grnd +0 +? +1 +0. +spec_hgt_lvl_above_grnd +0 +? +1 +6000. +? +? +0 +0.0 +0 +0.0 +? +0 +0.0 +0 +0.0 +1 +3.0 +0 +0 +0 +? +? +? +433 +VVCSH_ON_SPEC_HGT_LVL_ABOVE_GRND_0-6km +Vertical v-component shear between 0 to 6000m Above Ground +1 +tmpl4_0 +VVCSH +? +? +spec_hgt_lvl_above_grnd +0 +? +1 +0. +spec_hgt_lvl_above_grnd +0 +? +1 +6000. +? +? +0 +0.0 +0 +0.0 +? +0 +0.0 +0 +0.0 +1 +3.0 +0 +0 +0 +? +? +? +59 +TMP_ON_SPEC_ALT_ABOVE_MEAN_SEA_LVL +? +1 +tmpl4_0 +TMP +? +? +spec_alt_above_mean_sea_lvl +0 +? +10 +305. 457. 610. 914. 1524. 1829. 2134. 2743. 3658. 4572. +? +0 +? +0 +? +? +? +0 +0.0 +0 +0.0 +? +0 +0.0 +0 +0.0 +1 +3.0 +0 +0 +0 +? +? +? +586 +TMP_ON_SPEC_HGT_LVL_ABOVE_GRND_FDHGT +? +1 +tmpl4_0 +TMP +? +? +spec_hgt_lvl_above_grnd +0 +? +4 +30. 50. 80. 100. +? +0 +? +0 +? +? +? +0 +0.0 +0 +0.0 +? +0 +0.0 +0 +0.0 +1 +3.0 +0 +0 +0 +? +? +? +60 +UGRD_ON_SPEC_ALT_ABOVE_MEAN_SEA_LVL +? +1 +tmpl4_0 +UGRD +? +? +spec_alt_above_mean_sea_lvl +0 +? +10 +305. 457. 610. 914. 1524. 1829. 2134. 2743. 3658. 4572. +? +0 +? +0 +? +? +? +0 +0.0 +0 +0.0 +? +0 +0.0 +0 +0.0 +1 +4.0 +0 +0 +0 +? +? +? +576 +UGRD_ON_SPEC_HGT_LVL_ABOVE_GRND_FDHGT +? +1 +tmpl4_0 +UGRD +? +? +spec_hgt_lvl_above_grnd +0 +? +4 +30. 50. 80. 100. +? +0 +? +0 +? +? +? +0 +0.0 +0 +0.0 +? +0 +0.0 +0 +0.0 +1 +4.0 +0 +0 +0 +? +? +? +61 +VGRD_ON_SPEC_ALT_ABOVE_MEAN_SEA_LVL +? +1 +tmpl4_0 +VGRD +? +? +spec_alt_above_mean_sea_lvl +0 +? +10 +305. 457. 610. 914. 1524. 1829. 2134. 2743. 3658. 4572. +? +0 +? +0 +? +? +? +0 +0.0 +0 +0.0 +? +0 +0.0 +0 +0.0 +1 +4.0 +0 +0 +0 +? +? +? +577 +VGRD_ON_SPEC_HGT_LVL_ABOVE_GRND_FDHGT +? +1 +tmpl4_0 +VGRD +? +? +spec_hgt_lvl_above_grnd +0 +? +4 +30. 50. 80. 100. +? +0 +? +0 +? +? +? +0 +0.0 +0 +0.0 +? +0 +0.0 +0 +0.0 +1 +4.0 +0 +0 +0 +? +? +? +451 +SPFH_ON_SPEC_ALT_ABOVE_MEAN_SEA_LVL +? +1 +tmpl4_0 +SPFH +? +? +spec_alt_above_mean_sea_lvl +0 +? +1 +305. +? +0 +? +0 +? +? +? +0 +0.0 +0 +0.0 +? +0 +0.0 +0 +0.0 +1 +5.0 +0 +0 +0 +? +? +? +578 +SPFH_ON_SPEC_HGT_LVL_ABOVE_GRND_FDHGT +? +1 +tmpl4_0 +SPFH +? +? +spec_hgt_lvl_above_grnd +0 +? +4 +30. 50. 80. 100. +? +0 +? +0 +? +? +? +0 +0.0 +0 +0.0 +? +0 +0.0 +0 +0.0 +1 +5.0 +0 +0 +0 +? +? +? +579 +PRES_ON_SPEC_HGT_LVL_ABOVE_GRND_FDHGT +? +1 +tmpl4_0 +PRES +? +? +spec_hgt_lvl_above_grnd +0 +? +4 +30. 50. 80. 100. +? +0 +? +0 +? +? +? +0 +0.0 +0 +0.0 +? +0 +0.0 +0 +0.0 +1 +3.0 +0 +0 +0 +? +? +? +62 +HGT_ON_0C_ISOTHERM +? +1 +tmpl4_0 +HGT +? +? +0C_isotherm +0 +? +0 +? +? +0 +? +0 +? +? +? +0 +0.0 +0 +0.0 +? +0 +0.0 +0 +0.0 +1 +6.0 +0 +0 +0 +? +? +? +63 +RH_ON_0C_ISOTHERM +? +1 +tmpl4_0 +RH +? +? +0C_isotherm +0 +? +0 +? +? +0 +? +0 +? +? +? +0 +0.0 +0 +0.0 +? +0 +0.0 +0 +0.0 +1 +2.0 +0 +0 +0 +? +? +? +165 +HGT_ON_HGHST_TROP_FRZ_LVL +? +1 +tmpl4_0 +HGT +? +? +hghst_trop_frz_lvl +0 +? +0 +? +? +0 +? +0 +? +? +? +0 +0.0 +0 +0.0 +? +0 +0.0 +0 +0.0 +1 +6.0 +0 +0 +0 +? +? +? +247 +HGT_ON_LWST_LVL_OF_WET_BULB_ZERO +? +1 +tmpl4_0 +HGT +? +? +lwst_lvl_of_wet_bulb_zero +0 +? +0 +? +? +0 +? +0 +? +? +? +0 +0.0 +0 +0.0 +? +0 +0.0 +0 +0.0 +1 +-5.0 +0 +0 +0 +? +? +? +67 +PRES_ON_SPEC_PRES_ABOVE_GRND +? +1 +tmpl4_0 +PRES +? +? +spec_pres_above_grnd +0 +? +6 +3000. 6000. 9000. 12000. 15000. 18000. +spec_pres_above_grnd +0 +? +6 +0. 3000. 6000. 9000. 12000. 15000. +? +? +0 +0.0 +0 +0.0 +? +0 +0.0 +0 +0.0 +1 +6.0 +0 +0 +0 +? +? +? +68 +TMP_ON_SPEC_PRES_ABOVE_GRND +? +1 +tmpl4_0 +TMP +? +? +spec_pres_above_grnd +0 +? +6 +3000. 6000. 9000. 12000. 15000. 18000. +spec_pres_above_grnd +0 +? +6 +0. 3000. 6000. 9000. 12000. 15000. +? +? +0 +0.0 +0 +0.0 +? +0 +0.0 +0 +0.0 +1 +3.0 +0 +0 +0 +? +? +? +69 +POT_ON_SPEC_PRES_ABOVE_GRND +? +1 +tmpl4_0 +POT +? +? +spec_pres_above_grnd +0 +? +1 +3000. +spec_pres_above_grnd +0 +? +1 +0. +? +? +0 +0.0 +0 +0.0 +? +0 +0.0 +0 +0.0 +1 +4.0 +0 +0 +0 +? +? +? +70 +DPT_ON_SPEC_PRES_ABOVE_GRND +? +1 +tmpl4_0 +DPT +? +? +spec_pres_above_grnd +0 +? +1 +3000. +spec_pres_above_grnd +0 +? +1 +0. +? +? +0 +0.0 +0 +0.0 +? +0 +0.0 +0 +0.0 +1 +3.0 +0 +0 +0 +? +? +? +71 +SPFH_ON_SPEC_PRES_ABOVE_GRND +? +1 +tmpl4_0 +SPFH +? +? +spec_pres_above_grnd +0 +? +6 +3000. 6000. 9000. 12000. 15000. 18000. +spec_pres_above_grnd +0 +? +6 +0. 3000. 6000. 9000. 12000. 15000. +? +? +0 +0.0 +0 +0.0 +? +0 +0.0 +0 +0.0 +1 +5.0 +0 +0 +0 +? +? +? +72 +RH_ON_SPEC_PRES_ABOVE_GRND +? +1 +tmpl4_0 +RH +? +? +spec_pres_above_grnd +0 +? +6 +3000. 6000. 9000. 12000. 15000. 18000. +spec_pres_above_grnd +0 +? +6 +0. 3000. 6000. 9000. 12000. 15000. +? +? +0 +0.0 +0 +0.0 +? +0 +0.0 +0 +0.0 +1 +2.0 +0 +0 +0 +? +? +? +89 +PWAT_ON_SPEC_PRES_ABOVE_GRND +? +1 +tmpl4_0 +PWAT +? +? +spec_pres_above_grnd +0 +? +1 +3000. +spec_pres_above_grnd +0 +? +1 +0. +? +? +0 +0.0 +0 +0.0 +? +0 +0.0 +0 +0.0 +1 +3.0 +0 +0 +0 +? +? +? +73 +UGRD_ON_SPEC_PRES_ABOVE_GRND +? +1 +tmpl4_0 +UGRD +? +? +spec_pres_above_grnd +0 +? +6 +3000. 6000. 9000. 12000. 15000. 18000. +spec_pres_above_grnd +0 +? +6 +0. 3000. 6000. 9000. 12000. 15000. +? +? +0 +0.0 +0 +0.0 +? +0 +0.0 +0 +0.0 +1 +4.0 +0 +0 +0 +? +? +? +74 +VGRD_ON_SPEC_PRES_ABOVE_GRND +? +1 +tmpl4_0 +VGRD +? +? +spec_pres_above_grnd +0 +? +6 +3000. 6000. 9000. 12000. 15000. 18000. +spec_pres_above_grnd +0 +? +6 +0. 3000. 6000. 9000. 12000. 15000. +? +? +0 +0.0 +0 +0.0 +? +0 +0.0 +0 +0.0 +1 +4.0 +0 +0 +0 +? +? +? +90 +VVEL_ON_SPEC_PRES_ABOVE_GRND +? +1 +tmpl4_0 +VVEL +? +? +spec_pres_above_grnd +0 +? +3 +3000. 9000. 18000. +spec_pres_above_grnd +0 +? +3 +0. 6000. 15000. +? +? +0 +0.0 +0 +0.0 +? +0 +0.0 +0 +0.0 +1 +5.0 +0 +0 +0 +? +? +? +148 +PRES_ON_CLOUD_BASE +? +1 +tmpl4_0 +PRES +? +? +cloud_base +0 +? +0 +? +? +0 +? +0 +? +? +? +0 +0.0 +0 +0.0 +? +0 +0.0 +0 +0.0 +1 +6.0 +0 +0 +0 +? +? +? +149 +PRES_ON_CLOUD_TOP +? +1 +tmpl4_0 +PRES +? +? +cloud_top +0 +? +0 +? +? +0 +? +0 +? +? +? +0 +0.0 +0 +0.0 +? +0 +0.0 +0 +0.0 +1 +6.0 +0 +0 +0 +? +? +? +168 +TMP_ON_CLOUD_TOP +? +1 +tmpl4_0 +TMP +? +? +cloud_top +0 +? +0 +? +? +0 +? +0 +? +? +? +0 +0.0 +0 +0.0 +? +0 +0.0 +0 +0.0 +1 +5.0 +0 +0 +0 +? +? +? +178 +HGT_ON_CLOUD_BASE +? +1 +tmpl4_0 +HGT +? +? +cloud_base +0 +? +0 +? +? +0 +? +0 +? +? +? +0 +0.0 +0 +0.0 +? +0 +0.0 +0 +0.0 +1 +6.0 +0 +0 +0 +? +? +? +179 +HGT_ON_CLOUD_TOP +? +1 +tmpl4_0 +HGT +? +? +cloud_top +0 +? +0 +? +? +0 +? +0 +? +? +? +0 +0.0 +0 +0.0 +? +0 +0.0 +0 +0.0 +1 +6.0 +0 +0 +0 +? +? +? +168 +TMP_ON_CLOUD_TOP +? +1 +tmpl4_0 +TMP +? +? +cloud_top +0 +? +0 +? +? +0 +? +0 +? +? +? +0 +0.0 +0 +0.0 +? +0 +0.0 +0 +0.0 +1 +5.0 +0 +0 +0 +? +? +? +173 +PRES_ON_MAX_WIND +? +1 +tmpl4_0 +PRES +? +? +max_wind +0 +? +0 +? +? +0 +? +0 +? +? +? +0 +0.0 +0 +0.0 +? +0 +0.0 +0 +0.0 +1 +6.0 +0 +0 +0 +? +? +? +174 +HGT_ON_MAX_WIND +? +1 +tmpl4_0 +HGT +? +? +max_wind +0 +? +0 +? +? +0 +? +0 +? +? +? +0 +0.0 +0 +0.0 +? +0 +0.0 +0 +0.0 +1 +6.0 +0 +0 +0 +? +? +? +175 +UGRD_ON_MAX_WIND +? +1 +tmpl4_0 +UGRD +? +? +max_wind +0 +? +0 +? +? +0 +? +0 +? +? +? +0 +0.0 +0 +0.0 +? +0 +0.0 +0 +0.0 +1 +4.0 +0 +0 +0 +? +? +? +176 +VGRD_ON_MAX_WIND +? +1 +tmpl4_0 +VGRD +? +? +max_wind +0 +? +0 +? +? +0 +? +0 +? +? +? +0 +0.0 +0 +0.0 +? +0 +0.0 +0 +0.0 +1 +4.0 +0 +0 +0 +? +? +? +252 +REFC_ON_ENTIRE_ATMOS +? +1 +tmpl4_0 +REFC +NCEP +? +entire_atmos_single_lyr +0 +? +0 +? +? +0 +? +0 +? +? +? +0 +0.0 +0 +0.0 +? +0 +0.0 +0 +0.0 +1 +4.0 +0 +0 +0 +? +? +? +276 +REFZR_ON_ENTIRE_ATMOS +? +1 +tmpl4_0 +REFZR +NCEP +? +entire_atmos_single_lyr +0 +? +0 +? +? +0 +? +0 +? +? +? +0 +0.0 +0 +0.0 +? +0 +0.0 +0 +0.0 +1 +-4.0 +0 +0 +0 +? +? +? +277 +REFZI_ON_ENTIRE_ATMOS +? +1 +tmpl4_0 +REFZI +NCEP +? +entire_atmos_single_lyr +0 +? +0 +? +? +0 +? +0 +? +? +? +0 +0.0 +0 +0.0 +? +0 +0.0 +0 +0.0 +1 +-4.0 +0 +0 +0 +? +? +? +253 +REFD_ON_SPEC_HGT_LVL_ABOVE_GRND +? +1 +tmpl4_0 +REFD +NCEP +? +spec_hgt_lvl_above_grnd +0 +? +2 +4000. 1000. +? +0 +? +0 +? +? +? +0 +0.0 +0 +0.0 +? +0 +0.0 +0 +0.0 +1 +4.0 +0 +0 +0 +? +? +? +279 +REFZR_ON_SPEC_HGT_LVL_ABOVE_GRND +? +1 +tmpl4_0 +REFZR +NCEP +? +spec_hgt_lvl_above_grnd +0 +? +2 +4000. 1000. +? +0 +? +0 +? +? +? +0 +0.0 +0 +0.0 +? +0 +0.0 +0 +0.0 +1 +-4.0 +0 +0 +0 +? +? +? +280 +REFZI_ON_SPEC_HGT_LVL_ABOVE_GRND +? +1 +tmpl4_0 +REFZI +NCEP +? +spec_hgt_lvl_above_grnd +0 +? +2 +4000. 1000. +? +0 +? +0 +? +? +? +0 +0.0 +0 +0.0 +? +0 +0.0 +0 +0.0 +1 +-4.0 +0 +0 +0 +? +? +? +221 +HPBL_ON_SURFACE +? +1 +tmpl4_0 +HPBL +NCEP +? +surface +0 +? +0 +? +? +0 +? +0 +? +? +? +0 +0.0 +0 +0.0 +? +0 +0.0 +0 +0.0 +1 +6.0 +0 +0 +0 +? +? +? +194 +PRES_ON_GRID_SCALE_CLOUD_BOT_LVL +? +1 +tmpl4_0 +PRES +? +? +grid_scale_cloud_bot_lvl +0 +? +0 +? +? +0 +? +0 +? +? +? +0 +0.0 +0 +0.0 +? +0 +0.0 +0 +0.0 +1 +6.0 +0 +0 +0 +? +? +? +195 +PRES_ON_GRID_SCALE_CLOUD_TOP_LVL +? +1 +tmpl4_0 +PRES +? +? +grid_scale_cloud_top_lvl +0 +? +0 +? +? +0 +? +0 +? +? +? +0 +0.0 +0 +0.0 +? +0 +0.0 +0 +0.0 +1 +6.0 +0 +0 +0 +? +? +? +200 +TCOLW_ON_ENTIRE_ATMOS +? +1 +tmpl4_0 +TCOLW +NCEP +? +entire_atmos_single_lyr +0 +? +0 +? +? +0 +? +0 +? +? +? +0 +0.0 +0 +0.0 +? +0 +0.0 +0 +0.0 +1 +5.0 +0 +0 +0 +? +? +? +201 +TCOLI_ON_ENTIRE_ATMOS +? +1 +tmpl4_0 +TCOLI +NCEP +? +entire_atmos_single_lyr +0 +? +0 +? +? +0 +? +0 +? +? +? +0 +0.0 +0 +0.0 +? +0 +0.0 +0 +0.0 +1 +5.0 +0 +0 +0 +? +? +? +979 +EFSH_ON_EFBL +? +1 +tmpl4_0 +EFSH +NCEP +? +level_free_convection +0 +? +0 +? +? +0 +? +0 +? +? +? +0 +0.0 +0 +0.0 +? +0 +0.0 +0 +0.0 +1 +-1.0 +0 +0 +0 +? +? +? +980 +EFSH_ON_EFTL +? +1 +tmpl4_0 +EFSH +NCEP +? +equil_lvl +0 +? +0 +? +? +0 +? +0 +? +? +? +0 +0.0 +0 +0.0 +? +0 +0.0 +0 +0.0 +1 +-1.0 +0 +0 +0 +? +? +? +982 +ELMELT_ON_EFTL +? +1 +tmpl4_0 +ELMELT +NCEP +? +equil_lvl +0 +? +0 +? +? +0 +? +0 +? +? +? +0 +0.0 +0 +0.0 +? +0 +0.0 +0 +0.0 +1 +-1.0 +0 +0 +0 +? +? +? +983 +UESH_ON_EFL +? +1 +tmpl4_0 +UESH +NCEP +? +level_free_convection +0 +? +0 +? +? +0 +? +0 +? +? +? +0 +0.0 +0 +0.0 +? +0 +0.0 +0 +0.0 +1 +-1.0 +0 +0 +0 +? +? +? +984 +VESH_ON_EFL +? +1 +tmpl4_0 +VESH +NCEP +? +level_free_convection +0 +? +0 +? +? +0 +? +0 +? +? +? +0 +0.0 +0 +0.0 +? +0 +0.0 +0 +0.0 +1 +-1.0 +0 +0 +0 +? +? +? +985 +ESHR_ON_EFL +? +1 +tmpl4_0 +ESHR +NCEP +? +level_free_convection +0 +? +0 +? +? +0 +? +0 +? +? +? +0 +0.0 +0 +0.0 +? +0 +0.0 +0 +0.0 +1 +-1.0 +0 +0 +0 +? +? +? +986 +UEID_ON_EFL +? +1 +tmpl4_0 +UEID +NCEP +? +level_free_convection +0 +? +0 +? +? +0 +? +0 +? +? +? +0 +0.0 +0 +0.0 +? +0 +0.0 +0 +0.0 +1 +-1.0 +0 +0 +0 +? +? +? +987 +VEID_ON_EFL +? +1 +tmpl4_0 +VEID +NCEP +? +level_free_convection +0 +? +0 +? +? +0 +? +0 +? +? +? +0 +0.0 +0 +0.0 +? +0 +0.0 +0 +0.0 +1 +-1.0 +0 +0 +0 +? +? +? +988 +E3KH_ON_EFL +? +1 +tmpl4_0 +E3KH +NCEP +? +level_free_convection +0 +? +0 +? +? +0 +? +0 +? +? +? +0 +0.0 +0 +0.0 +? +0 +0.0 +0 +0.0 +1 +-1.0 +0 +0 +0 +? +? +? +989 +STPC_ON_EFL +? +1 +tmpl4_0 +STPC +NCEP +? +level_free_convection +0 +? +0 +? +? +0 +? +0 +? +? +? +0 +0.0 +0 +0.0 +? +0 +0.0 +0 +0.0 +1 +-1.0 +0 +0 +0 +? +? +? +990 +SIGT_ON_EFL +? +1 +tmpl4_0 +SIGT +NCEP +? +level_free_convection +0 +? +0 +? +? +0 +? +0 +? +? +? +0 +0.0 +0 +0.0 +? +0 +0.0 +0 +0.0 +1 +-1.0 +0 +0 +0 +? +? +? +991 +SCCP_ON_EFL +? +1 +tmpl4_0 +SCCP +NCEP +? +level_free_convection +0 +? +0 +? +? +0 +? +0 +? +? +? +0 +0.0 +0 +0.0 +? +0 +0.0 +0 +0.0 +1 +-1.0 +0 +0 +0 +? +? +? +993 +SIGH_ON_EFL +? +1 +tmpl4_0 +SIGH +NCEP +? +level_free_convection +0 +? +0 +? +? +0 +? +0 +? +? +? +0 +0.0 +0 +0.0 +? +0 +0.0 +0 +0.0 +1 +-1.0 +0 +0 +0 +? +? +? +992 +MLFC_ON_EFL +? +1 +tmpl4_0 +MLFC +NCEP +? +level_free_convection +0 +? +0 +? +? +0 +? +0 +? +? +? +0 +0.0 +0 +0.0 +? +0 +0.0 +0 +0.0 +1 +-1.0 +0 +0 +0 +? +? +? +202 +TCOLR_ON_ENTIRE_ATMOS +? +1 +tmpl4_0 +TCOLR +NCEP +? +entire_atmos_single_lyr +0 +? +0 +? +? +0 +? +0 +? +? +? +0 +0.0 +0 +0.0 +? +0 +0.0 +0 +0.0 +1 +5.0 +0 +0 +0 +? +? +? +203 +TCOLS_ON_ENTIRE_ATMOS +? +1 +tmpl4_0 +TCOLS +NCEP +? +entire_atmos_single_lyr +0 +? +0 +? +? +0 +? +0 +? +? +? +0 +0.0 +0 +0.0 +? +0 +0.0 +0 +0.0 +1 +5.0 +0 +0 +0 +? +? +? +204 +TCOLC_ON_ENTIRE_ATMOS +? +1 +tmpl4_0 +TCOLC +NCEP +? +entire_atmos_single_lyr +0 +? +0 +? +? +0 +? +0 +? +? +? +0 +0.0 +0 +0.0 +? +0 +0.0 +0 +0.0 +1 +5.0 +0 +0 +0 +? +? +? +428 +TCOLG_ON_ENTIRE_ATMOS +? +1 +tmpl4_0 +TCOLG +? +? +entire_atmos_single_lyr +0 +? +0 +? +? +0 +? +0 +? +? +? +0 +0.0 +0 +0.0 +? +0 +0.0 +0 +0.0 +1 +5.0 +0 +0 +0 +? +? +? +285 +TCLSW_ON_ENTIRE_ATMOS +? +1 +tmpl4_0 +TCLSW +NCEP +? +entire_atmos_single_lyr +0 +? +0 +? +? +0 +? +0 +? +? +? +0 +0.0 +0 +0.0 +? +0 +0.0 +0 +0.0 +1 +5.0 +0 +0 +0 +? +? +? +286 +TCOLM_ON_ENTIRE_ATMOS +? +1 +tmpl4_0 +TCOLM +NCEP +? +entire_atmos_single_lyr +0 +? +0 +? +? +0 +? +0 +? +? +? +0 +0.0 +0 +0.0 +? +0 +0.0 +0 +0.0 +1 +5.0 +0 +0 +0 +? +? +? +287 +HGT_ON_LWST_BOT_LVL_OF_SUPERCOOLED_LIQ_WATER_LYR +? +1 +tmpl4_0 +HGT +? +? +lwst_bot_lvl_of_supercooled_liq_water_lyr +0 +? +0 +? +? +0 +? +0 +? +? +? +0 +0.0 +0 +0.0 +? +0 +0.0 +0 +0.0 +1 +6.0 +0 +0 +0 +? +? +? +288 +HGT_ON_HGHST_TOP_LVL_OF_SUPERCOOLED_LIQ_WATER_LYR +? +1 +tmpl4_0 +HGT +? +? +hghst_top_lvl_of_supercooled_liq_water_lyr +0 +? +0 +? +? +0 +? +0 +? +? +? +0 +0.0 +0 +0.0 +? +0 +0.0 +0 +0.0 +1 +5.0 +0 +0 +0 +? +? +? +408 +GSD_HGT_ON_CLOUD_CEILING +GSD_geopotential height on cloud ceiling +1 +tmpl4_0 +HGT +? +? +cloud_ceilng +0 +? +0 +? +? +0 +? +0 +? +? +? +0 +0.0 +0 +0.0 +? +0 +0.0 +0 +0.0 +1 +-3.0 +0 +0 +0 +? +? +? +487 +GSD_EXP_CEILING +? +1 +tmpl4_0 +CEIL +? +? +cloud_ceilng +0 +? +0 +? +? +0 +? +0 +? +? +? +0 +0.0 +0 +0.0 +? +0 +0.0 +0 +0.0 +1 +-3.0 +0 +0 +0 +? +? +? +711 +GSD_EXP_CEILING_2 +? +1 +tmpl4_0 +CEIL +? +? +cloud_base +0 +? +0 +? +? +0 +? +0 +? +? +? +0 +0.0 +0 +0.0 +? +0 +0.0 +0 +0.0 +1 +-3.0 +0 +0 +0 +? +? +? +256 +ACM_LSPA_ON_SURFACE +? +1 +tmpl4_8 +LSPA +NCEP +ACM +surface +0 +? +0 +? +? +0 +? +0 +? +? +? +0 +0.0 +0 +0.0 +? +0 +0.0 +0 +0.0 +1 +3.0 +0 +0 +0 +? +? +? +282 +PRES_ON_TOP_OF_ATMOS +? +1 +tmpl4_0 +PRES +? +? +top_of_atmos +0 +? +0 +? +? +0 +? +0 +? +? +? +0 +0.0 +0 +0.0 +? +0 +0.0 +0 +0.0 +1 +3.0 +0 +0 +0 +? +? +? +290 +SWHR_ON_ENTIRE_ATMOS +? +1 +tmpl4_0 +SWHR +NCEP +? +entire_atmos_single_lyr +0 +? +0 +? +? +0 +? +0 +? +? +? +0 +0.0 +0 +0.0 +? +0 +0.0 +0 +0.0 +1 +5.0 +0 +0 +0 +? +? +? +291 +LWHR_ON_ENTIRE_ATMOS +? +1 +tmpl4_0 +LWHR +NCEP +? +entire_atmos_single_lyr +0 +? +0 +? +? +0 +? +0 +? +? +? +0 +0.0 +0 +0.0 +? +0 +0.0 +0 +0.0 +1 +5.0 +0 +0 +0 +? +? +? +292 +AVE_LRGHR_ON_ENTIRE_ATMOS +? +1 +tmpl4_8 +LRGHR +NCEP +AVE +entire_atmos_single_lyr +0 +? +0 +? +? +0 +? +0 +? +? +? +0 +0.0 +0 +0.0 +? +0 +0.0 +0 +0.0 +1 +5.0 +0 +0 +0 +? +? +? +296 +TMP_ON_SIGMA_LVL_HPC +? +1 +tmpl4_0 +TMP +? +? +sigma_lvl +1 +4 +5 +9000. 8500. 8000. 7500. 7000. +? +0 +? +0 +? +? +? +0 +0.0 +0 +0.0 +? +0 +0.0 +0 +0.0 +1 +-4.0 +0 +0 +0 +? +? +? +344 +PBLREG_ON_SURFACE +? +1 +tmpl4_0 +PBLREG +? +? +surface +0 +? +0 +? +? +0 +? +0 +? +? +? +0 +0.0 +0 +0.0 +? +0 +0.0 +0 +0.0 +1 +2.0 +0 +0 +0 +? +? +? +389 +UGRD_ON_PLANETARY_BOUND_LYR +? +1 +tmpl4_0 +UGRD +? +? +planetary_bound_lyr +0 +? +0 +? +? +0 +? +0 +? +? +? +0 +0.0 +0 +0.0 +? +0 +0.0 +0 +0.0 +1 +-4.0 +0 +0 +0 +? +? +? +390 +VGRD_ON_PLANETARY_BOUND_LYR +? +1 +tmpl4_0 +VGRD +? +? +planetary_bound_lyr +0 +? +0 +? +? +0 +? +0 +? +? +? +0 +0.0 +0 +0.0 +? +0 +0.0 +0 +0.0 +1 +-4.0 +0 +0 +0 +? +? +? +289 +HGT_ON_PLANETARY_BOUND_LYR +? +1 +tmpl4_0 +HGT +? +? +planetary_bound_lyr +0 +? +0 +? +? +0 +? +0 +? +? +? +0 +0.0 +0 +0.0 +? +0 +0.0 +0 +0.0 +1 +-4.0 +0 +0 +0 +? +? +? +381 +MIXHT_ON_SURFACE +? +1 +tmpl4_0 +MIXHT +? +? +surface +0 +? +0 +? +? +0 +? +0 +? +? +? +0 +0.0 +0 +0.0 +? +0 +0.0 +0 +0.0 +1 +-4.0 +0 +0 +0 +? +? +? +400 +RETOP_ON_ENTIRE_ATMOS_SINGLE_LYR +? +1 +tmpl4_0 +RETOP +NCEP +? +entire_atmos_single_lyr +0 +? +0 +? +? +0 +? +0 +? +? +? +0 +0.0 +0 +0.0 +? +0 +0.0 +0 +0.0 +1 +6.0 +0 +0 +0 +? +? +? +454 +VRATE_ON_PLANETARY_BOUND_LYR +Ventilation Rate on planetary boundary layer +1 +tmpl4_0 +VRATE +NCEP +? +planetary_bound_lyr +0 +? +0 +? +? +0 +? +0 +? +? +? +0 +0.0 +0 +0.0 +? +0 +0.0 +0 +0.0 +1 +3.0 +0 +0 +0 +? +? +? +455 +HINDEX_ON_SURFACE +Haines Index on surface +1 +tmpl4_0 +HINDEX +? +? +surface +0 +? +0 +? +? +0 +? +0 +? +? +? +0 +0.0 +0 +0.0 +? +0 +0.0 +0 +0.0 +1 +3.0 +0 +0 +0 +? +? +? +345 +MAX_TMAX_ON_SPEC_HGT_LVL_ABOVE_GRND_2m +? +1 +tmpl4_8 +TMAX +? +MAX +spec_hgt_lvl_above_grnd +0 +? +1 +2. +? +0 +? +0 +? +? +? +0 +0.0 +0 +0.0 +? +0 +0.0 +0 +0.0 +1 +4.0 +0 +0 +0 +? +? +? +346 +MIN_TMIN_ON_SPEC_HGT_LVL_ABOVE_GRND_2m +? +1 +tmpl4_8 +TMIN +? +MIN +spec_hgt_lvl_above_grnd +0 +? +1 +2. +? +0 +? +0 +? +? +? +0 +0.0 +0 +0.0 +? +0 +0.0 +0 +0.0 +1 +4.0 +0 +0 +0 +? +? +? +347 +MAX_MAXRH_ON_SPEC_HGT_LVL_ABOVE_GRND_2m +? +1 +tmpl4_8 +MAXRH +? +MAX +spec_hgt_lvl_above_grnd +0 +? +1 +2. +? +0 +? +0 +? +? +? +0 +0.0 +0 +0.0 +? +0 +0.0 +0 +0.0 +1 +-2.0 +0 +0 +0 +? +? +? +348 +MIN_MINRH_ON_SPEC_HGT_LVL_ABOVE_GRND_2m +? +1 +tmpl4_8 +MINRH +NCEP +MIN +spec_hgt_lvl_above_grnd +0 +? +1 +2. +? +0 +? +0 +? +? +? +0 +0.0 +0 +0.0 +? +0 +0.0 +0 +0.0 +1 +-2.0 +0 +0 +0 +? +? +? +506 +MAX_MAXUW_ON_SPEC_HGT_LVL_ABOVE_GRND_10m +U Component of Hourly Maximum 10m Wind Speed (m/s) +1 +tmpl4_8 +MAXUW +NCEP +MAX +spec_hgt_lvl_above_grnd +0 +? +1 +10. +? +0 +? +0 +? +? +? +0 +0.0 +0 +0.0 +? +0 +0.0 +0 +0.0 +1 +-4.0 +0 +0 +0 +? +? +? +507 +MAX_MAXVW_ON_SPEC_HGT_LVL_ABOVE_GRND_10m +V Component of Hourly Maximum 10m Wind Speed (m/s) +1 +tmpl4_8 +MAXVW +NCEP +MAX +spec_hgt_lvl_above_grnd +0 +? +1 +10. +? +0 +? +0 +? +? +? +0 +0.0 +0 +0.0 +? +0 +0.0 +0 +0.0 +1 +-4.0 +0 +0 +0 +? +? +? +422 +MAX_WIND_ON_SPEC_HGT_LVL_ABOVE_GRND_10m +maximum wind speed on 10 meter Above Ground +1 +tmpl4_8 +WIND +? +MAX +spec_hgt_lvl_above_grnd +0 +? +1 +10. +? +0 +? +0 +? +? +? +0 +0.0 +0 +0.0 +? +0 +0.0 +0 +0.0 +1 +-4.0 +0 +0 +0 +? +? +? +421 +MAX_REF_ON_SPEC_HGT_LVL_ABOVE_GRND_1km +maximum Updraft Helicity on Specified Height Level Above Ground +1 +tmpl4_8 +MAXREF +NCEP +MAX +spec_hgt_lvl_above_grnd +0 +? +1 +1000. +? +0 +? +0 +? +? +? +0 +0.0 +0 +0.0 +? +0 +0.0 +0 +0.0 +1 +-3.0 +0 +0 +0 +? +? +? +423 +MAX_MAXUVV_ON_ISOBARIC_SFC_100-1000hpa +hourly maximum Upward Vertical Velocity between 100-1000hpa +1 +tmpl4_8 +MAXUVV +NCEP +MAX +isobaric_sfc +0 +? +1 +10000. +isobaric_sfc +0 +? +1 +100000. +? +? +0 +0.0 +0 +0.0 +? +0 +0.0 +0 +0.0 +1 +-3.0 +0 +0 +0 +? +? +? +424 +MAX_MAXDVV_ON_ISOBARIC_SFC_100-1000hpa +hourly maximum Downward Vertical Velocity between 100-1000hpa +1 +tmpl4_8 +MAXDVV +NCEP +MAX +isobaric_sfc +0 +? +1 +10000. +isobaric_sfc +0 +? +1 +100000. +? +? +0 +0.0 +0 +0.0 +? +0 +0.0 +0 +0.0 +1 +-3.0 +0 +0 +0 +? +? +? +508 +MAX_PRATE_ON_SURFACE +Maximum Precipitation Rate on surface +1 +tmpl4_8 +PRATE +? +MAX +surface +0 +? +0 +? +? +0 +? +0 +? +? +? +0 +0.0 +0 +0.0 +? +0 +0.0 +0 +0.0 +1 +4.0 +0 +0 +0 +? +? +? +444 +LTNG_ON_SURFACE +lightning +1 +tmpl4_0 +LTNG +NCEP +? +surface +0 +? +0 +? +? +0 +? +0 +? +? +? +0 +0.0 +0 +0.0 +? +0 +0.0 +0 +0.0 +1 +1.0 +0 +0 +0 +? +? +? +581 +VIL_ON_ENTIRE_ATMOS +entire atmosphere Vertically Integrated Liquid (kg/m-2) +1 +tmpl4_0 +VIL +? +? +entire_atmos_single_lyr +0 +? +0 +? +? +0 +? +0 +? +? +? +0 +0.0 +0 +0.0 +? +0 +0.0 +0 +0.0 +1 +7.0 +0 +0 +0 +? +? +? +427 +UPHL_ON_SPEC_HGT_LVL_ABOVE_GRND_2-5km +Updraft Helicity on Specified Height Level Above Ground +1 +tmpl4_0 +UPHL +NCEP +? +spec_hgt_lvl_above_grnd +0 +? +1 +5000. +spec_hgt_lvl_above_grnd +0 +? +1 +2000. +? +? +0 +0.0 +0 +0.0 +? +0 +0.0 +0 +0.0 +1 +-3.0 +0 +0 +0 +? +? +? +420 +MAX_UPHL_ON_SPEC_HGT_LVL_ABOVE_GRND_2-5km +maximum Updraft Helicity on Specified Height Level Above Ground +1 +tmpl4_8 +MXUPHL +NCEP +MAX +spec_hgt_lvl_above_grnd +0 +? +1 +5000. +spec_hgt_lvl_above_grnd +0 +? +1 +2000. +? +? +0 +0.0 +0 +0.0 +? +0 +0.0 +0 +0.0 +1 +-3.0 +0 +0 +0 +? +? +? +786 +GSD_MIN_UPHL_ON_SPEC_HGT_LVL_ABOVE_GRND_2-5km +? +1 +tmpl4_8 +MNUPHL +NCEP +MIN +spec_hgt_lvl_above_grnd +0 +? +1 +5000. +spec_hgt_lvl_above_grnd +0 +? +1 +2000. +? +? +0 +0.0 +0 +0.0 +? +0 +0.0 +0 +0.0 +1 +-3.0 +0 +0 +0 +? +? +? +791 +GSD_MIN_UPHL_ON_SPEC_HGT_LVL_ABOVE_GRND_0-3km +? +1 +tmpl4_8 +MNUPHL +NCEP +MIN +spec_hgt_lvl_above_grnd +0 +? +1 +3000. +spec_hgt_lvl_above_grnd +0 +? +1 +0000. +? +? +0 +0.0 +0 +0.0 +? +0 +0.0 +0 +0.0 +1 +-3.0 +0 +0 +0 +? +? +? +790 +GSD_MAX_UPHL_ON_SPEC_HGT_LVL_ABOVE_GRND_0-3km +? +1 +tmpl4_8 +MXUPHL +NCEP +MAX +spec_hgt_lvl_above_grnd +0 +? +1 +3000. +spec_hgt_lvl_above_grnd +0 +? +1 +0000. +? +? +0 +0.0 +0 +0.0 +? +0 +0.0 +0 +0.0 +1 +-3.0 +0 +0 +0 +? +? +? +793 +GSD_MAX_REL_VORT_ON_SPEC_HGT_LVL_ABOVE_GRND_0-1km +? +1 +tmpl4_8 +RELV +? +MAX +spec_hgt_lvl_above_grnd +0 +? +1 +1000. +spec_hgt_lvl_above_grnd +0 +? +1 +0000. +? +? +0 +0.0 +0 +0.0 +? +0 +0.0 +0 +0.0 +1 +5.0 +0 +0 +0 +? +? +? +890 +GSD_MAX_REL_VORT_ON_SPEC_HGT_LVL_HYBRID1 +Hourly max relative vorticity on hybrid level 1 +1 +tmpl4_8 +RELV +? +MAX +hybrid_lvl +0 +? +1 +1. +? +0 +? +0 +? +? +? +0 +0.0 +0 +0.0 +? +0 +0.0 +0 +0.0 +1 +5.0 +0 +0 +0 +? +? +? +792 +GSD_MAX_REL_VORT_ON_SPEC_HGT_LVL_ABOVE_GRND_0-2km +? +1 +tmpl4_8 +RELV +? +MAX +spec_hgt_lvl_above_grnd +0 +? +1 +2000. +spec_hgt_lvl_above_grnd +0 +? +1 +0000. +? +? +0 +0.0 +0 +0.0 +? +0 +0.0 +0 +0.0 +1 +5.0 +0 +0 +0 +? +? +? +785 +MAX_REF_ON_ISOTHERMAL_-10C +maximum reflectivity on -10C suface +1 +tmpl4_8 +MAXREF +NCEP +MAX +isothermal +0 +? +1 +263. +? +0 +? +0 +? +? +? +0 +0.0 +0 +0.0 +? +0 +0.0 +0 +0.0 +1 +-3.0 +0 +0 +0 +? +? +? +912 +REFD_ON_ISOTHERMAL +? +1 +tmpl4_0 +REFD +NCEP +? +isothermal +0 +? +1 +263. +? +0 +? +0 +? +? +? +0 +0.0 +0 +0.0 +? +0 +0.0 +0 +0.0 +1 +-4.0 +0 +0 +0 +? +? +? +913 +1H_FFG_EXCEEDANCE +? +1 +tmpl4_8 +FFLDRO +? +ACM +surface +0 +? +0 +? +? +0 +? +0 +? +? +? +0 +0.0 +0 +0.0 +? +0 +0.0 +0 +0.0 +1 +5.0 +0 +0 +0 +? +? +? +914 +ACM_FFG_EXCEEDANCE +? +1 +tmpl4_8 +FFLDRO +? +ACM +surface +0 +? +0 +? +? +0 +? +0 +? +? +? +0 +0.0 +0 +0.0 +? +0 +0.0 +0 +0.0 +1 +5.0 +0 +0 +0 +? +? +? +915 +1H_2YARI_EXCEEDANCE +? +1 +tmpl4_8 +GWLOWS +? +ACM +surface +0 +? +0 +? +? +0 +? +0 +? +? +? +0 +0.0 +0 +0.0 +? +0 +0.0 +0 +0.0 +1 +5.0 +0 +0 +0 +? +? +? +916 +ACM_2YARI_EXCEEDANCE +? +1 +tmpl4_8 +GWLOWS +? +ACM +surface +0 +? +0 +? +? +0 +? +0 +? +? +? +0 +0.0 +0 +0.0 +? +0 +0.0 +0 +0.0 +1 +5.0 +0 +0 +0 +? +? +? +917 +1H_5YARI_EXCEEDANCE +? +1 +tmpl4_8 +GWLOWS +? +ACM +surface +0 +? +0 +? +? +0 +? +0 +? +? +? +0 +0.0 +0 +0.0 +? +0 +0.0 +0 +0.0 +1 +5.0 +0 +0 +0 +? +? +? +918 +ACM_5YARI_EXCEEDANCE +? +1 +tmpl4_8 +GWLOWS +? +ACM +surface +0 +? +0 +? +? +0 +? +0 +? +? +? +0 +0.0 +0 +0.0 +? +0 +0.0 +0 +0.0 +1 +5.0 +0 +0 +0 +? +? +? +919 +1H_10YARI_EXCEEDANCE +? +1 +tmpl4_8 +GWLOWS +? +ACM +surface +0 +? +0 +? +? +0 +? +0 +? +? +? +0 +0.0 +0 +0.0 +? +0 +0.0 +0 +0.0 +1 +5.0 +0 +0 +0 +? +? +? +920 +ACM_10YARI_EXCEEDANCE +? +1 +tmpl4_8 +GWLOWS +? +ACM +surface +0 +? +0 +? +? +0 +? +0 +? +? +? +0 +0.0 +0 +0.0 +? +0 +0.0 +0 +0.0 +1 +5.0 +0 +0 +0 +? +? +? +921 +1H_100YARI_EXCEEDANCE +? +1 +tmpl4_8 +GWLOWS +? +ACM +surface +0 +? +0 +? +? +0 +? +0 +? +? +? +0 +0.0 +0 +0.0 +? +0 +0.0 +0 +0.0 +1 +5.0 +0 +0 +0 +? +? +? +922 +ACM_100YARI_EXCEEDANCE +? +1 +tmpl4_8 +GWLOWS +? +ACM +surface +0 +? +0 +? +? +0 +? +0 +? +? +? +0 +0.0 +0 +0.0 +? +0 +0.0 +0 +0.0 +1 +5.0 +0 +0 +0 +? +? +? +745 +BIOMASS_BURNING_EMISSIONS +? +1 +tmpl4_48 +AEMFLX +? +? +surface +0 +? +0 +? +? +0 +? +0 +? +particulate_org_matter_dry +? +0 +0.0 +0 +0.0 +? +0 +0.0 +0 +0.0 +1 +5.0 +0 +0 +0 +? +? +? +739 +SMOKE_ON_SPEC_HGT_LVL_ABOVE_GRND_8m +? +1 +tmpl4_48 +MASSDEN +? +? +spec_hgt_lvl_above_grnd +0 +? +1 +8. +? +0 +? +0 +? +particulate_org_matter_dry +? +0 +0.0 +0 +0.0 +? +0 +0.0 +0 +0.0 +1 +6.0 +0 +0 +0 +? +? +? +736 +SMOKE_ON_ENTIRE_ATMOS_SINGLE_LYR +? +1 +tmpl4_48 +COLMD +? +? +entire_atmos_single_lyr +0 +? +0 +? +? +0 +? +0 +? +particulate_org_matter_dry +? +0 +0.0 +0 +0.0 +? +0 +0.0 +0 +0.0 +1 +5.0 +0 +0 +0 +? +? +? +744 +DUST_ON_SPEC_HGT_LVL_ABOVE_GRND_8m +? +1 +tmpl4_48 +MASSDEN +? +? +spec_hgt_lvl_above_grnd +0 +? +1 +8. +? +0 +? +0 +? +dust_dry +? +0 +0.0 +0 +0.0 +? +0 +0.0 +0 +0.0 +1 +6.0 +0 +0 +0 +? +? +? +741 +DUST_ON_ENTIRE_ATMOS_SINGLE_LYR +? +1 +tmpl4_48 +COLMD +? +? +entire_atmos_single_lyr +0 +? +0 +? +? +0 +? +0 +? +dust_dry +? +0 +0.0 +0 +0.0 +? +0 +0.0 +0 +0.0 +1 +5.0 +0 +0 +0 +? +? +? +735 +AOD_ON_ENTIRE_ATMOS_SINGLE_LYR +? +1 +tmpl4_0 +AOTK +? +? +entire_atmos_single_lyr +0 +? +0 +? +? +0 +? +0 +? +? +? +0 +0.0 +0 +0.0 +? +0 +0.0 +0 +0.0 +1 +5.0 +0 +0 +0 +? +? +? +755 +HWP_ON_SURFACE +Hourly Wildfire Potential on surface +1 +tmpl4_0 +FWINX +? +? +surface +0 +? +0 +? +? +0 +? +0 +? +? +? +0 +0.0 +0 +0.0 +? +0 +0.0 +0 +0.0 +1 +5.0 +0 +0 +0 +? +? +? +NATLEV +32769 +ncep_nco +v2003 +local_tab_yes1 +fcst +oper +fcst +fcst +hour +nws_ncep +rrfs +complex_packing_spatial_diff +2nd_ord_sptdiff +fltng_pnt +lossless +12 +HGT_ON_ISOBARIC_SFC +? +1 +tmpl4_0 +HGT +? +? +isobaric_sfc +0 +? +4 +25000. 50000. 70000. 85000. +? +0 +? +0 +? +? +? +0 +0.0 +0 +0.0 +? +0 +0.0 +0 +0.0 +1 +6.0 +0 +0 +0 +? +? +? +13 +TMP_ON_ISOBARIC_SFC +? +1 +tmpl4_0 +TMP +? +? +isobaric_sfc +0 +? +5 +25000. 50000. 70000. 85000. 95000. +? +0 +? +0 +? +? +? +0 +0.0 +0 +0.0 +? +0 +0.0 +0 +0.0 +1 +3.0 +0 +0 +0 +? +? +? +17 +RH_ON_ISOBARIC_SFC +? +1 +tmpl4_0 +RH +? +? +isobaric_sfc +0 +? +4 +25000. 50000. 70000. 85000. +? +0 +? +0 +? +? +? +0 +0.0 +0 +0.0 +? +0 +0.0 +0 +0.0 +1 +2.0 +0 +0 +0 +? +? +? +18 +UGRD_ON_ISOBARIC_SFC +? +1 +tmpl4_0 +UGRD +? +? +isobaric_sfc +0 +? +4 +25000. 50000. 70000. 85000. +? +0 +? +0 +? +? +? +0 +0.0 +0 +0.0 +? +0 +0.0 +0 +0.0 +1 +4.0 +0 +0 +0 +? +? +? +19 +VGRD_ON_ISOBARIC_SFC +? +1 +tmpl4_0 +VGRD +? +? +isobaric_sfc +0 +? +4 +25000. 50000. 70000. 85000. +? +0 +? +0 +? +? +? +0 +0.0 +0 +0.0 +? +0 +0.0 +0 +0.0 +1 +4.0 +0 +0 +0 +? +? +? +20 +VVEL_ON_ISOBARIC_SFC +? +1 +tmpl4_0 +VVEL +? +? +isobaric_sfc +0 +? +4 +25000. 50000. 70000. 85000. +? +0 +? +0 +? +? +? +0 +0.0 +0 +0.0 +? +0 +0.0 +0 +0.0 +1 +5.0 +0 +0 +0 +? +? +? +16 +SPFH_ON_ISOBARIC_SFC +? +1 +tmpl4_0 +SPFH +? +? +isobaric_sfc +0 +? +4 +25000. 50000. 70000. 85000. +? +0 +? +0 +? +? +? +0 +0.0 +0 +0.0 +? +0 +0.0 +0 +0.0 +1 +4.0 +0 +0 +0 +? +? +? +21 +ABSV_ON_ISOBARIC_SFC +? +1 +tmpl4_0 +ABSV +? +? +isobaric_sfc +0 +? +4 +25000. 50000. 70000. 85000. +? +0 +? +0 +? +? +? +0 +0.0 +0 +0.0 +? +0 +0.0 +0 +0.0 +1 +4.0 +0 +0 +0 +? +? +? +1 +PRES_ON_HYBRID_LVL +? +1 +tmpl4_0 +PRES +? +? +hybrid_lvl +0 +? +65 +1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29. 30. 31. 32. 33. 34. 35. 36. 37. 38. 39. 40. 41. 42. 43. 44. 45. 46. 47. 48. 49. 50. 51. 52. 53. 54. 55. 56. 57. 58. 59. 60. 61. 62. 63. 64. 65. +? +0 +? +0 +? +? +? +0 +0.0 +0 +0.0 +? +0 +0.0 +0 +0.0 +1 +6.0 +0 +0 +0 +? +? +? +77 +HGT_ON_HYBRID_LVL +? +1 +tmpl4_0 +HGT +? +? +hybrid_lvl +0 +? +65 +1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29. 30. 31. 32. 33. 34. 35. 36. 37. 38. 39. 40. 41. 42. 43. 44. 45. 46. 47. 48. 49. 50. 51. 52. 53. 54. 55. 56. 57. 58. 59. 60. 61. 62. 63. 64. 65. +? +0 +? +0 +? +? +? +0 +0.0 +0 +0.0 +? +0 +0.0 +0 +0.0 +1 +4.0 +0 +0 +0 +? +? +? +2 +TMP_ON_HYBRID_LVL +? +1 +tmpl4_0 +TMP +? +? +hybrid_lvl +0 +? +65 +1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29. 30. 31. 32. 33. 34. 35. 36. 37. 38. 39. 40. 41. 42. 43. 44. 45. 46. 47. 48. 49. 50. 51. 52. 53. 54. 55. 56. 57. 58. 59. 60. 61. 62. 63. 64. 65. +? +0 +? +0 +? +? +? +0 +0.0 +0 +0.0 +? +0 +0.0 +0 +0.0 +1 +4.0 +0 +0 +0 +? +? +? +5 +SPFH_ON_HYBRID_LVL +? +1 +tmpl4_0 +SPFH +? +? +hybrid_lvl +0 +? +65 +1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29. 30. 31. 32. 33. 34. 35. 36. 37. 38. 39. 40. 41. 42. 43. 44. 45. 46. 47. 48. 49. 50. 51. 52. 53. 54. 55. 56. 57. 58. 59. 60. 61. 62. 63. 64. 65. +? +0 +? +0 +? +? +? +0 +0.0 +0 +0.0 +? +0 +0.0 +0 +0.0 +1 +7.0 +0 +0 +0 +? +? +? +7 +UGRD_ON_HYBRID_LVL +? +1 +tmpl4_0 +UGRD +? +? +hybrid_lvl +0 +? +65 +1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29. 30. 31. 32. 33. 34. 35. 36. 37. 38. 39. 40. 41. 42. 43. 44. 45. 46. 47. 48. 49. 50. 51. 52. 53. 54. 55. 56. 57. 58. 59. 60. 61. 62. 63. 64. 65. +? +0 +? +0 +? +? +? +0 +0.0 +0 +0.0 +? +0 +0.0 +0 +0.0 +1 +4.0 +0 +0 +0 +? +? +? +8 +VGRD_ON_HYBRID_LVL +? +1 +tmpl4_0 +VGRD +? +? +hybrid_lvl +0 +? +65 +1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29. 30. 31. 32. 33. 34. 35. 36. 37. 38. 39. 40. 41. 42. 43. 44. 45. 46. 47. 48. 49. 50. 51. 52. 53. 54. 55. 56. 57. 58. 59. 60. 61. 62. 63. 64. 65. +? +0 +? +0 +? +? +? +0 +0.0 +0 +0.0 +? +0 +0.0 +0 +0.0 +1 +4.0 +0 +0 +0 +? +? +? +9 +VVEL_ON_HYBRID_LVL +? +1 +tmpl4_0 +VVEL +? +? +hybrid_lvl +0 +? +65 +1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29. 30. 31. 32. 33. 34. 35. 36. 37. 38. 39. 40. 41. 42. 43. 44. 45. 46. 47. 48. 49. 50. 51. 52. 53. 54. 55. 56. 57. 58. 59. 60. 61. 62. 63. 64. 65. +? +0 +? +0 +? +? +? +0 +0.0 +0 +0.0 +? +0 +0.0 +0 +0.0 +1 +5.0 +0 +0 +0 +? +? +? +264 +DZDT_ON_HYBRID_LVL +? +1 +tmpl4_0 +DZDT +? +? +hybrid_lvl +0 +? +65 +1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29. 30. 31. 32. 33. 34. 35. 36. 37. 38. 39. 40. 41. 42. 43. 44. 45. 46. 47. 48. 49. 50. 51. 52. 53. 54. 55. 56. 57. 58. 59. 60. 61. 62. 63. 64. 65. +? +0 +? +0 +? +? +? +0 +0.0 +0 +0.0 +? +0 +0.0 +0 +0.0 +1 +-5.0 +0 +0 +0 +? +? +? +11 +TKE_ON_HYBRID_LVL +? +1 +tmpl4_0 +TKE +? +? +hybrid_lvl +0 +? +65 +1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29. 30. 31. 32. 33. 34. 35. 36. 37. 38. 39. 40. 41. 42. 43. 44. 45. 46. 47. 48. 49. 50. 51. 52. 53. 54. 55. 56. 57. 58. 59. 60. 61. 62. 63. 64. 65. +? +0 +? +0 +? +? +? +0 +0.0 +0 +0.0 +? +0 +0.0 +0 +0.0 +1 +3.0 +0 +0 +0 +? +? +? +23 +MSLET_ON_MEAN_SEA_LVL +? +1 +tmpl4_0 +MSLET +NCEP +? +mean_sea_lvl +0 +? +0 +? +? +0 +? +0 +? +? +? +0 +0.0 +0 +0.0 +? +0 +0.0 +0 +0.0 +1 +6.0 +0 +0 +0 +? +? +? +106 +TMP_ON_SPEC_HGT_LVL_ABOVE_GRND_2m +? +1 +tmpl4_0 +TMP +? +? +spec_hgt_lvl_above_grnd +0 +? +1 +2. +? +0 +? +0 +? +? +? +0 +0.0 +0 +0.0 +? +0 +0.0 +0 +0.0 +1 +4.0 +0 +0 +0 +? +? +? +112 +SPFH_ON_SPEC_HGT_LVL_ABOVE_GRND_2m +? +1 +tmpl4_0 +SPFH +? +? +spec_hgt_lvl_above_grnd +0 +? +1 +2. +? +0 +? +0 +? +? +? +0 +0.0 +0 +0.0 +? +0 +0.0 +0 +0.0 +1 +4.0 +0 +0 +0 +? +? +? +113 +DPT_ON_SPEC_HGT_LVL_ABOVE_GRND_2m +? +1 +tmpl4_0 +DPT +? +? +spec_hgt_lvl_above_grnd +0 +? +1 +2. +? +0 +? +0 +? +? +? +0 +0.0 +0 +0.0 +? +0 +0.0 +0 +0.0 +1 +4.0 +0 +0 +0 +? +? +? +114 +RH_ON_SPEC_HGT_LVL_ABOVE_GRND_2m +? +1 +tmpl4_0 +RH +? +? +spec_hgt_lvl_above_grnd +0 +? +1 +2. +? +0 +? +0 +? +? +? +0 +0.0 +0 +0.0 +? +0 +0.0 +0 +0.0 +1 +3.0 +0 +0 +0 +? +? +? +64 +UGRD_ON_SPEC_HGT_LVL_ABOVE_GRND_10m +? +1 +tmpl4_0 +UGRD +? +? +spec_hgt_lvl_above_grnd +0 +? +1 +10. +? +0 +? +0 +? +? +? +0 +0.0 +0 +0.0 +? +0 +0.0 +0 +0.0 +1 +4.0 +0 +0 +0 +? +? +? +65 +VGRD_ON_SPEC_HGT_LVL_ABOVE_GRND_10m +? +1 +tmpl4_0 +VGRD +? +? +spec_hgt_lvl_above_grnd +0 +? +1 +10. +? +0 +? +0 +? +? +? +0 +0.0 +0 +0.0 +? +0 +0.0 +0 +0.0 +1 +4.0 +0 +0 +0 +? +? +? +158 +POT_ON_SPEC_HGT_LVL_ABOVE_GRND_10m +? +1 +tmpl4_0 +POT +? +? +spec_hgt_lvl_above_grnd +0 +? +1 +10. +? +0 +? +0 +? +? +? +0 +0.0 +0 +0.0 +? +0 +0.0 +0 +0.0 +1 +5.0 +0 +0 +0 +? +? +? +159 +SPFH_ON_SPEC_HGT_LVL_ABOVE_GRND_10m +? +1 +tmpl4_0 +SPFH +? +? +spec_hgt_lvl_above_grnd +0 +? +1 +10. +? +0 +? +0 +? +? +? +0 +0.0 +0 +0.0 +? +0 +0.0 +0 +0.0 +1 +3.0 +0 +0 +0 +? +? +? +24 +PRES_ON_SURFACE +? +1 +tmpl4_0 +PRES +? +? +surface +0 +? +0 +? +? +0 +? +0 +? +? +? +0 +0.0 +0 +0.0 +? +0 +0.0 +0 +0.0 +1 +6.0 +0 +0 +0 +? +? +? +25 +HGT_ON_SURFACE +? +1 +tmpl4_0 +HGT +? +? +surface +0 +? +0 +? +? +0 +? +0 +? +? +? +0 +0.0 +0 +0.0 +? +0 +0.0 +0 +0.0 +1 +6.0 +0 +0 +0 +? +? +? +27 +POT_ON_SURFACE +? +1 +tmpl4_0 +POT +? +? +surface +0 +? +0 +? +? +0 +? +0 +? +? +? +0 +0.0 +0 +0.0 +? +0 +0.0 +0 +0.0 +1 +5.0 +0 +0 +0 +? +? +? +28 +SPFH_ON_SURFACE +? +1 +tmpl4_0 +SPFH +? +? +surface +0 +? +0 +? +? +0 +? +0 +? +? +? +0 +0.0 +0 +0.0 +? +0 +0.0 +0 +0.0 +1 +3.0 +0 +0 +0 +? +? +? +26 +TMP_ON_SURFACE +? +1 +tmpl4_0 +TMP +? +? +surface +0 +? +0 +? +? +0 +? +0 +? +? +? +0 +0.0 +0 +0.0 +? +0 +0.0 +0 +0.0 +1 +4.0 +0 +0 +0 +? +? +? +423 +MAX_MAXUVV_ON_ISOBARIC_SFC_100-1000hpa +hourly maximum Upward Vertical Velocity between 100-1000hpa +1 +tmpl4_8 +MAXUVV +NCEP +MAX +isobaric_sfc +0 +? +1 +10000. +isobaric_sfc +0 +? +1 +100000. +? +? +0 +0.0 +0 +0.0 +? +0 +0.0 +0 +0.0 +1 +-3.0 +0 +0 +0 +? +? +? +424 +MAX_MAXDVV_ON_ISOBARIC_SFC_100-1000hpa +hourly maximum Downward Vertical Velocity between 100-1000hpa +1 +tmpl4_8 +MAXDVV +NCEP +MAX +isobaric_sfc +0 +? +1 +10000. +isobaric_sfc +0 +? +1 +100000. +? +? +0 +0.0 +0 +0.0 +? +0 +0.0 +0 +0.0 +1 +-3.0 +0 +0 +0 +? +? +? +790 +GSD_MAX_UPHL_ON_SPEC_HGT_LVL_ABOVE_GRND_0-3km +? +1 +tmpl4_8 +MXUPHL +NCEP +MAX +spec_hgt_lvl_above_grnd +0 +? +1 +3000. +spec_hgt_lvl_above_grnd +0 +? +1 +0000. +? +? +0 +0.0 +0 +0.0 +? +0 +0.0 +0 +0.0 +1 +-3.0 +0 +0 +0 +? +? +? +420 +MAX_UPHL_ON_SPEC_HGT_LVL_ABOVE_GRND_2-5km +maximum Updraft Helicity on Specified Height Level Above Ground +1 +tmpl4_8 +MXUPHL +NCEP +MAX +spec_hgt_lvl_above_grnd +0 +? +1 +5000. +spec_hgt_lvl_above_grnd +0 +? +1 +2000. +? +? +0 +0.0 +0 +0.0 +? +0 +0.0 +0 +0.0 +1 +-3.0 +0 +0 +0 +? +? +? +786 +GSD_MIN_UPHL_ON_SPEC_HGT_LVL_ABOVE_GRND_2-5km +? +1 +tmpl4_8 +MNUPHL +NCEP +MIN +spec_hgt_lvl_above_grnd +0 +? +1 +5000. +spec_hgt_lvl_above_grnd +0 +? +1 +2000. +? +? +0 +0.0 +0 +0.0 +? +0 +0.0 +0 +0.0 +1 +-3.0 +0 +0 +0 +? +? +? +791 +GSD_MIN_UPHL_ON_SPEC_HGT_LVL_ABOVE_GRND_0-3km +? +1 +tmpl4_8 +MNUPHL +NCEP +MIN +spec_hgt_lvl_above_grnd +0 +? +1 +3000. +spec_hgt_lvl_above_grnd +0 +? +1 +0000. +? +? +0 +0.0 +0 +0.0 +? +0 +0.0 +0 +0.0 +1 +-3.0 +0 +0 +0 +? +? +? +793 +GSD_MAX_REL_VORT_ON_SPEC_HGT_LVL_ABOVE_GRND_0-1km +? +1 +tmpl4_8 +RELV +? +MAX +spec_hgt_lvl_above_grnd +0 +? +1 +1000. +spec_hgt_lvl_above_grnd +0 +? +1 +0000. +? +? +0 +0.0 +0 +0.0 +? +0 +0.0 +0 +0.0 +1 +5.0 +0 +0 +0 +? +? +? +890 +GSD_MAX_REL_VORT_ON_SPEC_HGT_LVL_HYBRID1 +Hourly max relative vorticity on hybrid level 1 +1 +tmpl4_8 +RELV +? +MAX +hybrid_lvl +0 +? +1 +1. +? +0 +? +0 +? +? +? +0 +0.0 +0 +0.0 +? +0 +0.0 +0 +0.0 +1 +5.0 +0 +0 +0 +? +? +? +792 +GSD_MAX_REL_VORT_ON_SPEC_HGT_LVL_ABOVE_GRND_0-2km +? +1 +tmpl4_8 +RELV +? +MAX +spec_hgt_lvl_above_grnd +0 +? +1 +2000. +spec_hgt_lvl_above_grnd +0 +? +1 +0000. +? +? +0 +0.0 +0 +0.0 +? +0 +0.0 +0 +0.0 +1 +5.0 +0 +0 +0 +? +? +? +506 +MAX_MAXUW_ON_SPEC_HGT_LVL_ABOVE_GRND_10m +U Component of Hourly Maximum 10m Wind Speed (m/s) +1 +tmpl4_8 +MAXUW +NCEP +MAX +spec_hgt_lvl_above_grnd +0 +? +1 +10. +? +0 +? +0 +? +? +? +0 +0.0 +0 +0.0 +? +0 +0.0 +0 +0.0 +1 +-4.0 +0 +0 +0 +? +? +? +507 +MAX_MAXVW_ON_SPEC_HGT_LVL_ABOVE_GRND_10m +V Component of Hourly Maximum 10m Wind Speed (m/s) +1 +tmpl4_8 +MAXVW +NCEP +MAX +spec_hgt_lvl_above_grnd +0 +? +1 +10. +? +0 +? +0 +? +? +? +0 +0.0 +0 +0.0 +? +0 +0.0 +0 +0.0 +1 +-4.0 +0 +0 +0 +? +? +? +421 +MAX_REF_ON_SPEC_HGT_LVL_ABOVE_GRND_1km +maximum Updraft Helicity on Specified Height Level Above Ground +1 +tmpl4_8 +MAXREF +NCEP +MAX +spec_hgt_lvl_above_grnd +0 +? +1 +1000. +? +0 +? +0 +? +? +? +0 +0.0 +0 +0.0 +? +0 +0.0 +0 +0.0 +1 +-3.0 +0 +0 +0 +? +? +? +785 +MAX_REF_ON_ISOTHERMAL_-10C +maximum reflectivity on -10C suface +1 +tmpl4_8 +MAXREF +NCEP +MAX +isothermal +0 +? +1 +263. +? +0 +? +0 +? +? +? +0 +0.0 +0 +0.0 +? +0 +0.0 +0 +0.0 +1 +-3.0 +0 +0 +0 +? +? +? +912 +REFD_ON_ISOTHERMAL +? +1 +tmpl4_0 +REFD +NCEP +? +isothermal +0 +? +1 +263. +? +0 +? +0 +? +? +? +0 +0.0 +0 +0.0 +? +0 +0.0 +0 +0.0 +1 +-4.0 +0 +0 +0 +? +? +? +345 +MAX_TMAX_ON_SPEC_HGT_LVL_ABOVE_GRND_2m +? +1 +tmpl4_8 +TMAX +? +MAX +spec_hgt_lvl_above_grnd +0 +? +1 +2. +? +0 +? +0 +? +? +? +0 +0.0 +0 +0.0 +? +0 +0.0 +0 +0.0 +1 +4.0 +0 +0 +0 +? +? +? +346 +MIN_TMIN_ON_SPEC_HGT_LVL_ABOVE_GRND_2m +? +1 +tmpl4_8 +TMIN +? +MIN +spec_hgt_lvl_above_grnd +0 +? +1 +2. +? +0 +? +0 +? +? +? +0 +0.0 +0 +0.0 +? +0 +0.0 +0 +0.0 +1 +4.0 +0 +0 +0 +? +? +? +347 +MAX_MAXRH_ON_SPEC_HGT_LVL_ABOVE_GRND_2m +? +1 +tmpl4_8 +MAXRH +? +MAX +spec_hgt_lvl_above_grnd +0 +? +1 +2. +? +0 +? +0 +? +? +? +0 +0.0 +0 +0.0 +? +0 +0.0 +0 +0.0 +1 +-2.0 +0 +0 +0 +? +? +? +348 +MIN_MINRH_ON_SPEC_HGT_LVL_ABOVE_GRND_2m +? +1 +tmpl4_8 +MINRH +NCEP +MIN +spec_hgt_lvl_above_grnd +0 +? +1 +2. +? +0 +? +0 +? +? +? +0 +0.0 +0 +0.0 +? +0 +0.0 +0 +0.0 +1 +-2.0 +0 +0 +0 +? +? +? +116 +TSOIL_ON_DEPTH_BEL_LAND_SFC +? +1 +tmpl4_0 +TSOIL +? +? +depth_bel_land_sfc +1 +2 +9 +0. 1. 4. 10. 30. 60. 100. 160. 300. +depth_bel_land_sfc +1 +2 +9 +0. 1. 4. 10. 30. 60. 100. 160. 300. +? +? +0 +0.0 +0 +0.0 +? +0 +0.0 +0 +0.0 +1 +4.0 +0 +0 +0 +? +? +? +117 +SOILW_ON_DEPTH_BEL_LAND_SFC +? +1 +tmpl4_0 +SOILW +NCEP +? +depth_bel_land_sfc +1 +2 +9 +0. 1. 4. 10. 30. 60. 100. 160. 300. +depth_bel_land_sfc +1 +2 +9 +0. 1. 4. 10. 30. 60. 100. 160. 300. +? +? +0 +0.0 +0 +0.0 +? +0 +0.0 +0 +0.0 +1 +3.0 +0 +0 +0 +? +? +? +169 +SFEXC_ON_SURFACE +? +1 +tmpl4_0 +SFEXC +NCEP +? +surface +0 +? +0 +? +? +0 +? +0 +? +? +? +0 +0.0 +0 +0.0 +? +0 +0.0 +0 +0.0 +1 +3.0 +0 +0 +0 +? +? +? +170 +VEG_ON_SURFACE +? +1 +tmpl4_0 +VEG +? +? +surface +0 +? +0 +? +? +0 +? +0 +? +? +? +0 +0.0 +0 +0.0 +? +0 +0.0 +0 +0.0 +1 +3.0 +0 +0 +0 +? +? +? +171 +MSTAV_ON_DEPTH_BEL_LAND_SFC +? +1 +tmpl4_0 +MSTAV +NCEP +? +depth_bel_land_sfc +1 +2 +1 +0. +depth_bel_land_sfc +1 +2 +1 +100. +? +? +0 +0.0 +0 +0.0 +? +0 +0.0 +0 +0.0 +1 +3.0 +0 +0 +0 +? +? +? +152 +INST_GFLUX_ON_SURFACE +? +1 +tmpl4_0 +GFLUX +NCEP +? +surface +0 +? +0 +? +? +0 +? +0 +? +? +? +0 +0.0 +0 +0.0 +? +0 +0.0 +0 +0.0 +1 +3.0 +0 +0 +0 +? +? +? +118 +CNWAT_ON_SURFACE +? +1 +tmpl4_0 +CNWAT +NCEP +? +surface +0 +? +0 +? +? +0 +? +0 +? +? +? +0 +0.0 +0 +0.0 +? +0 +0.0 +0 +0.0 +1 +1.0 +0 +0 +0 +? +? +? +119 +WEASD_ON_SURFACE +? +1 +tmpl4_0 +WEASD +? +? +surface +0 +? +0 +? +? +0 +? +0 +? +? +? +0 +0.0 +0 +0.0 +? +0 +0.0 +0 +0.0 +1 +4.0 +0 +0 +0 +? +? +? +31 +4LFTX_ON_SPEC_PRES_ABOVE_GRND +? +1 +tmpl4_0 +4LFTX +NCEP +? +spec_pres_above_grnd +0 +? +1 +18000. +spec_pres_above_grnd +0 +? +1 +0. +? +? +0 +0.0 +0 +0.0 +? +0 +0.0 +0 +0.0 +1 +3.0 +0 +0 +0 +? +? +? +80 +PWAT_ON_ENTIRE_ATMOS_SINGLE_LYR +? +1 +tmpl4_0 +PWAT +? +? +entire_atmos_single_lyr +0 +? +0 +? +? +0 +? +0 +? +? +? +0 +0.0 +0 +0.0 +? +0 +0.0 +0 +0.0 +1 +3.0 +0 +0 +0 +? +? +? +87 +ACM_APCP_ON_SURFACE +? +1 +tmpl4_8 +APCP +? +ACM +surface +0 +? +0 +? +? +0 +? +0 +? +? +? +0 +0.0 +0 +0.0 +? +0 +0.0 +0 +0.0 +1 +-4.0 +0 +0 +0 +? +? +? +34 +ACM_NCPCP_ON_SURFACE +? +1 +tmpl4_8 +NCPCP +? +ACM +surface +0 +? +0 +? +? +0 +? +0 +? +? +? +0 +0.0 +0 +0.0 +? +0 +0.0 +0 +0.0 +1 +-4.0 +0 +0 +0 +? +? +? +417 +CACM_APCP_ON_SURFACE +? +1 +tmpl4_8 +APCP +? +ACM +surface +0 +? +0 +? +? +0 +? +0 +? +? +? +0 +0.0 +0 +0.0 +? +0 +0.0 +0 +0.0 +1 +-4.0 +0 +0 +0 +? +? +? +419 +CACM_NCPCP_ON_SURFACE +? +1 +tmpl4_8 +NCPCP +? +ACM +surface +0 +? +0 +? +? +0 +? +0 +? +? +? +0 +0.0 +0 +0.0 +? +0 +0.0 +0 +0.0 +1 +-4.0 +0 +0 +0 +? +? +? +35 +ACM_WEASD_ON_SURFACE +? +1 +tmpl4_8 +WEASD +? +ACM +surface +0 +? +0 +? +? +0 +? +0 +? +? +? +0 +0.0 +0 +0.0 +? +0 +0.0 +0 +0.0 +1 +4.0 +0 +0 +0 +? +? +? +121 +ACM_SNOM_ON_SURFACE +? +1 +tmpl4_8 +SNOM +? +ACM +surface +0 +? +0 +? +? +0 +? +0 +? +? +? +0 +0.0 +0 +0.0 +? +0 +0.0 +0 +0.0 +1 +4.0 +0 +0 +0 +? +? +? +122 +ACM_SSRUN_ON_SURFACE +? +1 +tmpl4_8 +SSRUN +NCEP +ACM +surface +0 +? +0 +? +? +0 +? +0 +? +? +? +0 +0.0 +0 +0.0 +? +0 +0.0 +0 +0.0 +1 +4.0 +0 +0 +0 +? +? +? +123 +ACM_BGRUN_ON_SURFACE +? +1 +tmpl4_8 +BGRUN +NCEP +ACM +surface +0 +? +0 +? +? +0 +? +0 +? +? +? +0 +0.0 +0 +0.0 +? +0 +0.0 +0 +0.0 +1 +4.0 +0 +0 +0 +? +? +? +160 +INST_CRAIN_ON_SURFACE +? +1 +tmpl4_0 +CRAIN +NCEP +? +surface +0 +? +0 +? +? +0 +? +0 +? +? +? +0 +0.0 +0 +0.0 +? +0 +0.0 +0 +0.0 +1 +1.0 +0 +0 +0 +? +? +? +551 +CSNOW_ON_SURFACE +Categorical snow on surface +1 +tmpl4_0 +CSNOW +NCEP +? +surface +0 +? +0 +? +? +0 +? +0 +? +? +? +0 +0.0 +0 +0.0 +? +0 +0.0 +0 +0.0 +1 +1.0 +0 +0 +0 +? +? +? +552 +CICEP_ON_SURFACE +Categorical ice pellets on surface +1 +tmpl4_0 +CICEP +NCEP +? +surface +0 +? +0 +? +? +0 +? +0 +? +? +? +0 +0.0 +0 +0.0 +? +0 +0.0 +0 +0.0 +1 +1.0 +0 +0 +0 +? +? +? +553 +CFRZR_ON_SURFACE +Categorical freezing rain on surface +1 +tmpl4_0 +CFRZR +NCEP +? +surface +0 +? +0 +? +? +0 +? +0 +? +? +? +0 +0.0 +0 +0.0 +? +0 +0.0 +0 +0.0 +1 +1.0 +0 +0 +0 +? +? +? +167 +INST_PRATE_ON_SURFACE +? +1 +tmpl4_0 +PRATE +? +? +surface +0 +? +0 +? +? +0 +? +0 +? +? +? +0 +0.0 +0 +0.0 +? +0 +0.0 +0 +0.0 +1 +3.0 +0 +0 +0 +? +? +? +172 +CPOFP_ON_SURFACE +? +1 +tmpl4_0 +CPOFP +NCEP +? +surface +0 +? +0 +? +? +0 +? +0 +? +? +? +0 +0.0 +0 +0.0 +? +0 +0.0 +0 +0.0 +1 +4.0 +0 +0 +0 +? +? +? +124 +CLMR_ON_HYBRID_LVL +? +1 +tmpl4_0 +CLMR +? +? +hybrid_lvl +0 +? +65 +1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29. 30. 31. 32. 33. 34. 35. 36. 37. 38. 39. 40. 41. 42. 43. 44. 45. 46. 47. 48. 49. 50. 51. 52. 53. 54. 55. 56. 57. 58. 59. 60. 61. 62. 63. 64. 65. +? +0 +? +0 +? +? +? +0 +0.0 +0 +0.0 +? +0 +0.0 +0 +0.0 +1 +3.0 +0 +0 +0 +? +? +? +125 +ICMR_ON_HYBRID_LVL +? +1 +tmpl4_0 +ICMR +? +? +hybrid_lvl +0 +? +65 +1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29. 30. 31. 32. 33. 34. 35. 36. 37. 38. 39. 40. 41. 42. 43. 44. 45. 46. 47. 48. 49. 50. 51. 52. 53. 54. 55. 56. 57. 58. 59. 60. 61. 62. 63. 64. 65. +? +0 +? +0 +? +? +? +0 +0.0 +0 +0.0 +? +0 +0.0 +0 +0.0 +1 +3.0 +0 +0 +0 +? +? +? +415 +GRLE_ON_HYBRID_LVL +Graupel mixing ration on hybrid level +1 +tmpl4_0 +GRLE +? +? +hybrid_lvl +0 +? +65 +1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29. 30. 31. 32. 33. 34. 35. 36. 37. 38. 39. 40. 41. 42. 43. 44. 45. 46. 47. 48. 49. 50. 51. 52. 53. 54. 55. 56. 57. 58. 59. 60. 61. 62. 63. 64. 65. +? +0 +? +0 +? +? +? +0 +0.0 +0 +0.0 +? +0 +0.0 +0 +0.0 +1 +3.0 +0 +0 +0 +? +? +? +145 +TCDC_ON_HYBRID_LVL +? +1 +tmpl4_0 +TCDC +? +? +hybrid_lvl +0 +? +65 +1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29. 30. 31. 32. 33. 34. 35. 36. 37. 38. 39. 40. 41. 42. 43. 44. 45. 46. 47. 48. 49. 50. 51. 52. 53. 54. 55. 56. 57. 58. 59. 60. 61. 62. 63. 64. 65. +? +0 +? +0 +? +? +? +0 +0.0 +0 +0.0 +? +0 +0.0 +0 +0.0 +1 +3.0 +0 +0 +0 +? +? +? +181 +RWMR_ON_HYBRID_LVL +? +1 +tmpl4_0 +RWMR +? +? +hybrid_lvl +0 +? +65 +1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29. 30. 31. 32. 33. 34. 35. 36. 37. 38. 39. 40. 41. 42. 43. 44. 45. 46. 47. 48. 49. 50. 51. 52. 53. 54. 55. 56. 57. 58. 59. 60. 61. 62. 63. 64. 65. +? +0 +? +0 +? +? +? +0 +0.0 +0 +0.0 +? +0 +0.0 +0 +0.0 +1 +3.0 +0 +0 +0 +? +? +? +182 +SNMR_ON_HYBRID_LVL +? +1 +tmpl4_0 +SNMR +? +? +hybrid_lvl +0 +? +65 +1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29. 30. 31. 32. 33. 34. 35. 36. 37. 38. 39. 40. 41. 42. 43. 44. 45. 46. 47. 48. 49. 50. 51. 52. 53. 54. 55. 56. 57. 58. 59. 60. 61. 62. 63. 64. 65. +? +0 +? +0 +? +? +? +0 +0.0 +0 +0.0 +? +0 +0.0 +0 +0.0 +1 +3.0 +0 +0 +0 +? +? +? +766 +GSD_NCWFA_ON_HYBRID_LVL +? +1 +tmpl4_0 +PMTF +NCEP +? +hybrid_lvl +0 +? +65 +1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29. 30. 31. 32. 33. 34. 35. 36. 37. 38. 39. 40. 41. 42. 43. 44. 45. 46. 47. 48. 49. 50. 51. 52. 53. 54. 55. 56. 57. 58. 59. 60. 61. 62. 63. 64. 65. +? +0 +? +0 +? +? +? +0 +0.0 +0 +0.0 +? +0 +0.0 +0 +0.0 +1 +3.0 +0 +0 +0 +? +? +? +767 +GSD_NCIFA_ON_HYBRID_LVL +? +1 +tmpl4_0 +PMTC +NCEP +? +hybrid_lvl +0 +? +65 +1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29. 30. 31. 32. 33. 34. 35. 36. 37. 38. 39. 40. 41. 42. 43. 44. 45. 46. 47. 48. 49. 50. 51. 52. 53. 54. 55. 56. 57. 58. 59. 60. 61. 62. 63. 64. 65. +? +0 +? +0 +? +? +? +0 +0.0 +0 +0.0 +? +0 +0.0 +0 +0.0 +1 +3.0 +0 +0 +0 +? +? +? +737 +SMOKE_ON_HYBRID_LVL +? +1 +tmpl4_48 +MASSDEN +? +? +hybrid_lvl +0 +? +65 +1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29. 30. 31. 32. 33. 34. 35. 36. 37. 38. 39. 40. 41. 42. 43. 44. 45. 46. 47. 48. 49. 50. 51. 52. 53. 54. 55. 56. 57. 58. 59. 60. 61. 62. 63. 64. 65. +? +0 +? +0 +? +particulate_org_matter_dry +? +0 +0.0 +0 +0.0 +? +0 +0.0 +0 +0.0 +1 +6.0 +0 +0 +0 +? +? +? +742 +DUST_ON_HYBRID_LVL +? +1 +tmpl4_48 +MASSDEN +? +? +hybrid_lvl +0 +? +65 +1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29. 30. 31. 32. 33. 34. 35. 36. 37. 38. 39. 40. 41. 42. 43. 44. 45. 46. 47. 48. 49. 50. 51. 52. 53. 54. 55. 56. 57. 58. 59. 60. 61. 62. 63. 64. 65. +? +0 +? +0 +? +dust_dry +? +0 +0.0 +0 +0.0 +? +0 +0.0 +0 +0.0 +1 +6.0 +0 +0 +0 +? +? +? +37 +LCDC_ON_LOW_CLOUD_LYR +? +1 +tmpl4_0 +LCDC +? +? +low_cloud_lyr +0 +? +0 +? +? +0 +? +0 +? +? +? +0 +0.0 +0 +0.0 +? +0 +0.0 +0 +0.0 +1 +3.0 +0 +0 +0 +? +? +? +38 +MCDC_ON_MID_CLOUD_LYR +? +1 +tmpl4_0 +MCDC +? +? +mid_cloud_lyr +0 +? +0 +? +? +0 +? +0 +? +? +? +0 +0.0 +0 +0.0 +? +0 +0.0 +0 +0.0 +1 +3.0 +0 +0 +0 +? +? +? +39 +HCDC_ON_HIGH_CLOUD_LYR +? +1 +tmpl4_0 +HCDC +? +? +high_cloud_lyr +0 +? +0 +? +? +0 +? +0 +? +? +? +0 +0.0 +0 +0.0 +? +0 +0.0 +0 +0.0 +1 +3.0 +0 +0 +0 +? +? +? +161 +INST_TCDC_ON_ENTIRE_ATMOS +? +1 +tmpl4_0 +TCDC +? +? +entire_atmos_single_lyr +0 +? +0 +? +? +0 +? +0 +? +? +? +0 +0.0 +0 +0.0 +? +0 +0.0 +0 +0.0 +1 +3.0 +0 +0 +0 +? +? +? +144 +AVE_TCDC_ON_ENTIRE_ATMOS +? +1 +tmpl4_8 +TCDC +? +AVE +entire_atmos_single_lyr +0 +? +0 +? +? +0 +? +0 +? +? +? +0 +0.0 +0 +0.0 +? +0 +0.0 +0 +0.0 +1 +3.0 +0 +0 +0 +? +? +? +139 +AVE_CDLYR_ON_ENTIRE_ATMOS +? +1 +tmpl4_8 +CDLYR +NCEP +AVE +entire_atmos_single_lyr +0 +? +0 +? +? +0 +? +0 +? +? +? +0 +0.0 +0 +0.0 +? +0 +0.0 +0 +0.0 +1 +3.0 +0 +0 +0 +? +? +? +141 +INST_USWRF_ON_SURFACE +? +1 +tmpl4_0 +USWRF +NCEP +? +surface +0 +? +0 +? +? +0 +? +0 +? +? +? +0 +0.0 +0 +0.0 +? +0 +0.0 +0 +0.0 +1 +4.0 +0 +0 +0 +? +? +? +142 +INST_ULWRF_ON_SURFACE +? +1 +tmpl4_0 +ULWRF +NCEP +? +surface +0 +? +0 +? +? +0 +? +0 +? +? +? +0 +0.0 +0 +0.0 +? +0 +0.0 +0 +0.0 +1 +4.0 +0 +0 +0 +? +? +? +126 +AVE_DSWRF_ON_SURFACE +? +1 +tmpl4_8 +DSWRF +NCEP +AVE +surface +0 +? +0 +? +? +0 +? +0 +? +? +? +0 +0.0 +0 +0.0 +? +0 +0.0 +0 +0.0 +1 +3.0 +0 +0 +0 +? +? +? +127 +AVE_DLWRF_ON_SURFACE +? +1 +tmpl4_8 +DLWRF +NCEP +AVE +surface +0 +? +0 +? +? +0 +? +0 +? +? +? +0 +0.0 +0 +0.0 +? +0 +0.0 +0 +0.0 +1 +3.0 +0 +0 +0 +? +? +? +128 +AVE_USWRF_ON_SURFACE +? +1 +tmpl4_8 +USWRF +NCEP +AVE +surface +0 +? +0 +? +? +0 +? +0 +? +? +? +0 +0.0 +0 +0.0 +? +0 +0.0 +0 +0.0 +1 +3.0 +0 +0 +0 +? +? +? +129 +AVE_ULWRF_ON_SURFACE +? +1 +tmpl4_8 +ULWRF +NCEP +AVE +surface +0 +? +0 +? +? +0 +? +0 +? +? +? +0 +0.0 +0 +0.0 +? +0 +0.0 +0 +0.0 +1 +3.0 +0 +0 +0 +? +? +? +130 +AVE_USWRF_ON_TOP_OF_ATMOS +? +1 +tmpl4_8 +USWRF +NCEP +AVE +top_of_atmos +0 +? +0 +? +? +0 +? +0 +? +? +? +0 +0.0 +0 +0.0 +? +0 +0.0 +0 +0.0 +1 +3.0 +0 +0 +0 +? +? +? +131 +AVE_ULWRF_ON_TOP_OF_ATMOS +? +1 +tmpl4_8 +ULWRF +NCEP +AVE +top_of_atmos +0 +? +0 +? +? +0 +? +0 +? +? +? +0 +0.0 +0 +0.0 +? +0 +0.0 +0 +0.0 +1 +3.0 +0 +0 +0 +? +? +? +156 +INST_DSWRF_ON_SURFACE +? +1 +tmpl4_0 +DSWRF +NCEP +? +surface +0 +? +0 +? +? +0 +? +0 +? +? +? +0 +0.0 +0 +0.0 +? +0 +0.0 +0 +0.0 +1 +4.0 +0 +0 +0 +? +? +? +157 +INST_DLWRF_ON_SURFACE +? +1 +tmpl4_0 +DLWRF +NCEP +? +surface +0 +? +0 +? +? +0 +? +0 +? +? +? +0 +0.0 +0 +0.0 +? +0 +0.0 +0 +0.0 +1 +4.0 +0 +0 +0 +? +? +? +262 +INST_CSDSF_ON_SURFACE +? +1 +tmpl4_0 +CSDSF +NCEP +? +surface +0 +? +0 +? +? +0 +? +0 +? +? +? +0 +0.0 +0 +0.0 +? +0 +0.0 +0 +0.0 +1 +4.0 +0 +0 +0 +? +? +? +44 +SFCR_ON_SURFACE +? +1 +tmpl4_0 +SFCR +? +? +surface +0 +? +0 +? +? +0 +? +0 +? +? +? +0 +0.0 +0 +0.0 +? +0 +0.0 +0 +0.0 +1 +2.7 +0 +0 +0 +? +? +? +45 +FRICV_ON_SURFACE +? +1 +tmpl4_0 +FRICV +NCEP +? +surface +0 +? +0 +? +? +0 +? +0 +? +? +? +0 +0.0 +0 +0.0 +? +0 +0.0 +0 +0.0 +1 +4.0 +0 +0 +0 +? +? +? +132 +CD_ON_SURFACE +? +1 +tmpl4_0 +CD +NCEP +? +surface +0 +? +0 +? +? +0 +? +0 +? +? +? +0 +0.0 +0 +0.0 +? +0 +0.0 +0 +0.0 +1 +3.0 +0 +0 +0 +? +? +? +133 +UFLX_ON_SURFACE +? +1 +tmpl4_0 +UFLX +? +? +surface +0 +? +0 +? +? +0 +? +0 +? +? +? +0 +0.0 +0 +0.0 +? +0 +0.0 +0 +0.0 +1 +3.0 +0 +0 +0 +? +? +? +134 +VFLX_ON_SURFACE +? +1 +tmpl4_0 +VFLX +? +? +surface +0 +? +0 +? +? +0 +? +0 +? +? +? +0 +0.0 +0 +0.0 +? +0 +0.0 +0 +0.0 +1 +3.0 +0 +0 +0 +? +? +? +43 +AVE_SHTFL_ON_SURFACE +? +1 +tmpl4_8 +SHTFL +? +AVE +surface +0 +? +0 +? +? +0 +? +0 +? +? +? +0 +0.0 +0 +0.0 +? +0 +0.0 +0 +0.0 +1 +4.0 +0 +0 +0 +? +? +? +135 +AVE_GFLUX_ON_SURFACE +? +1 +tmpl4_8 +GFLUX +NCEP +AVE +surface +0 +? +0 +? +? +0 +? +0 +? +? +? +0 +0.0 +0 +0.0 +? +0 +0.0 +0 +0.0 +1 +4.0 +0 +0 +0 +? +? +? +136 +AVE_SNOHF_ON_SURFACE +? +1 +tmpl4_8 +SNOHF +NCEP +AVE +surface +0 +? +0 +? +? +0 +? +0 +? +? +? +0 +0.0 +0 +0.0 +? +0 +0.0 +0 +0.0 +1 +4.0 +0 +0 +0 +? +? +? +42 +AVE_LHTFL_ON_SURFACE +? +1 +tmpl4_8 +LHTFL +? +AVE +surface +0 +? +0 +? +? +0 +? +0 +? +? +? +0 +0.0 +0 +0.0 +? +0 +0.0 +0 +0.0 +1 +4.0 +0 +0 +0 +? +? +? +47 +ACM_EVP_ON_SURFACE +? +1 +tmpl4_8 +EVP +? +ACM +surface +0 +? +0 +? +? +0 +? +0 +? +? +? +0 +0.0 +0 +0.0 +? +0 +0.0 +0 +0.0 +1 +4.0 +0 +0 +0 +? +? +? +137 +ACM_PEVAP_ON_SURFACE +? +1 +tmpl4_8 +PEVAP +NCEP +ACM +surface +0 +? +0 +? +? +0 +? +0 +? +? +? +0 +0.0 +0 +0.0 +? +0 +0.0 +0 +0.0 +1 +4.0 +0 +0 +0 +? +? +? +154 +INST_SHTFL_ON_SURFACE +? +1 +tmpl4_0 +SHTFL +? +? +surface +0 +? +0 +? +? +0 +? +0 +? +? +? +0 +0.0 +0 +0.0 +? +0 +0.0 +0 +0.0 +1 +4.0 +0 +0 +0 +? +? +? +155 +INST_LHTFL_ON_SURFACE +? +1 +tmpl4_0 +LHTFL +? +? +surface +0 +? +0 +? +? +0 +? +0 +? +? +? +0 +0.0 +0 +0.0 +? +0 +0.0 +0 +0.0 +1 +4.0 +0 +0 +0 +? +? +? +48 +NLAT_ON_SURFACE +? +1 +tmpl4_0 +NLAT +NCEP +? +surface +0 +? +0 +? +? +0 +? +0 +? +? +? +0 +0.0 +0 +0.0 +? +0 +0.0 +0 +0.0 +1 +4.0 +0 +0 +0 +? +? +? +49 +ELON_ON_SURFACE +? +1 +tmpl4_0 +ELON +NCEP +? +surface +0 +? +0 +? +? +0 +? +0 +? +? +? +0 +0.0 +0 +0.0 +? +0 +0.0 +0 +0.0 +1 +4.0 +0 +0 +0 +? +? +? +50 +LAND_ON_SURFACE +? +1 +tmpl4_0 +LAND +? +? +surface +0 +? +0 +? +? +0 +? +0 +? +? +? +0 +0.0 +0 +0.0 +? +0 +0.0 +0 +0.0 +1 +1.0 +0 +0 +0 +? +? +? +51 +ICEC_ON_SURFACE +? +1 +tmpl4_0 +ICEC +? +? +surface +0 +? +0 +? +? +0 +? +0 +? +? +? +0 +0.0 +0 +0.0 +? +0 +0.0 +0 +0.0 +1 +3.0 +0 +0 +0 +? +? +? +52 +LMH_ON_SURFACE +? +1 +tmpl4_0 +LMH +NCEP +? +surface +0 +? +0 +? +? +0 +? +0 +? +? +? +0 +0.0 +0 +0.0 +? +0 +0.0 +0 +0.0 +1 +2.0 +0 +0 +0 +? +? +? +53 +LMV_ON_SURFACE +? +1 +tmpl4_0 +LMV +NCEP +? +surface +0 +? +0 +? +? +0 +? +0 +? +? +? +0 +0.0 +0 +0.0 +? +0 +0.0 +0 +0.0 +1 +2.0 +0 +0 +0 +? +? +? +150 +ALBDO_ON_SURFACE +? +1 +tmpl4_0 +ALBDO +? +? +surface +0 +? +0 +? +? +0 +? +0 +? +? +? +0 +0.0 +0 +0.0 +? +0 +0.0 +0 +0.0 +1 +3.0 +0 +0 +0 +? +? +? +151 +WTMP_ON_SURFACE +? +1 +tmpl4_0 +WTMP +? +? +surface +0 +? +0 +? +? +0 +? +0 +? +? +? +0 +0.0 +0 +0.0 +? +0 +0.0 +0 +0.0 +1 +5.0 +0 +0 +0 +? +? +? +67 +PRES_ON_SPEC_PRES_ABOVE_GRND +? +1 +tmpl4_0 +PRES +? +? +spec_pres_above_grnd +0 +? +6 +3000. 6000. 9000. 12000. 15000. 18000. +spec_pres_above_grnd +0 +? +6 +0. 3000. 6000. 9000. 12000. 15000. +? +? +0 +0.0 +0 +0.0 +? +0 +0.0 +0 +0.0 +1 +6.0 +0 +0 +0 +? +? +? +68 +TMP_ON_SPEC_PRES_ABOVE_GRND +? +1 +tmpl4_0 +TMP +? +? +spec_pres_above_grnd +0 +? +6 +3000. 6000. 9000. 12000. 15000. 18000. +spec_pres_above_grnd +0 +? +6 +0. 3000. 6000. 9000. 12000. 15000. +? +? +0 +0.0 +0 +0.0 +? +0 +0.0 +0 +0.0 +1 +3.0 +0 +0 +0 +? +? +? +69 +POT_ON_SPEC_PRES_ABOVE_GRND +? +1 +tmpl4_0 +POT +? +? +spec_pres_above_grnd +0 +? +1 +3000. +spec_pres_above_grnd +0 +? +1 +0. +? +? +0 +0.0 +0 +0.0 +? +0 +0.0 +0 +0.0 +1 +4.0 +0 +0 +0 +? +? +? +70 +DPT_ON_SPEC_PRES_ABOVE_GRND +? +1 +tmpl4_0 +DPT +? +? +spec_pres_above_grnd +0 +? +1 +3000. +spec_pres_above_grnd +0 +? +1 +0. +? +? +0 +0.0 +0 +0.0 +? +0 +0.0 +0 +0.0 +1 +3.0 +0 +0 +0 +? +? +? +71 +SPFH_ON_SPEC_PRES_ABOVE_GRND +? +1 +tmpl4_0 +SPFH +? +? +spec_pres_above_grnd +0 +? +6 +3000. 6000. 9000. 12000. 15000. 18000. +spec_pres_above_grnd +0 +? +6 +0. 3000. 6000. 9000. 12000. 15000. +? +? +0 +0.0 +0 +0.0 +? +0 +0.0 +0 +0.0 +1 +5.0 +0 +0 +0 +? +? +? +72 +RH_ON_SPEC_PRES_ABOVE_GRND +? +1 +tmpl4_0 +RH +? +? +spec_pres_above_grnd +0 +? +6 +3000. 6000. 9000. 12000. 15000. 18000. +spec_pres_above_grnd +0 +? +6 +0. 3000. 6000. 9000. 12000. 15000. +? +? +0 +0.0 +0 +0.0 +? +0 +0.0 +0 +0.0 +1 +2.0 +0 +0 +0 +? +? +? +89 +PWAT_ON_SPEC_PRES_ABOVE_GRND +? +1 +tmpl4_0 +PWAT +? +? +spec_pres_above_grnd +0 +? +1 +3000. +spec_pres_above_grnd +0 +? +1 +0. +? +? +0 +0.0 +0 +0.0 +? +0 +0.0 +0 +0.0 +1 +3.0 +0 +0 +0 +? +? +? +73 +UGRD_ON_SPEC_PRES_ABOVE_GRND +? +1 +tmpl4_0 +UGRD +? +? +spec_pres_above_grnd +0 +? +6 +3000. 6000. 9000. 12000. 15000. 18000. +spec_pres_above_grnd +0 +? +6 +0. 3000. 6000. 9000. 12000. 15000. +? +? +0 +0.0 +0 +0.0 +? +0 +0.0 +0 +0.0 +1 +4.0 +0 +0 +0 +? +? +? +74 +VGRD_ON_SPEC_PRES_ABOVE_GRND +? +1 +tmpl4_0 +VGRD +? +? +spec_pres_above_grnd +0 +? +6 +3000. 6000. 9000. 12000. 15000. 18000. +spec_pres_above_grnd +0 +? +6 +0. 3000. 6000. 9000. 12000. 15000. +? +? +0 +0.0 +0 +0.0 +? +0 +0.0 +0 +0.0 +1 +4.0 +0 +0 +0 +? +? +? +256 +ACM_LSPA_ON_SURFACE +? +1 +tmpl4_8 +LSPA +NCEP +ACM +surface +0 +? +0 +? +? +0 +? +0 +? +? +? +0 +0.0 +0 +0.0 +? +0 +0.0 +0 +0.0 +1 +3.0 +0 +0 +0 +? +? +? +282 +PRES_ON_TOP_OF_ATMOS +? +1 +tmpl4_0 +PRES +? +? +top_of_atmos +0 +? +0 +? +? +0 +? +0 +? +? +? +0 +0.0 +0 +0.0 +? +0 +0.0 +0 +0.0 +1 +3.0 +0 +0 +0 +? +? +? +283 +PRES_ON_HYBRID_LVL_1L +? +1 +tmpl4_0 +PRES +? +? +hybrid_lvl +0 +? +1 +1. +hybrid_lvl +0 +? +1 +21. +? +? +0 +0.0 +0 +0.0 +? +0 +0.0 +0 +0.0 +1 +3.0 +0 +0 +0 +? +? +? +273 +PRES_ON_HYBRID_LVL_LLM +? +1 +tmpl4_0 +PRES +? +? +hybrid_lvl +0 +? +1 +1. +hybrid_lvl +0 +? +1 +61. +? +? +0 +0.0 +0 +0.0 +? +0 +0.0 +0 +0.0 +1 +3.0 +0 +0 +0 +? +? +? +118 +CNWAT_ON_SURFACE +? +1 +tmpl4_0 +CNWAT +NCEP +? +surface +0 +? +0 +? +? +0 +? +0 +? +? +? +0 +0.0 +0 +0.0 +? +0 +0.0 +0 +0.0 +1 +1.0 +0 +0 +0 +? +? +? +152 +INST_GFLUX_ON_SURFACE +? +1 +tmpl4_0 +GFLUX +NCEP +? +surface +0 +? +0 +? +? +0 +? +0 +? +? +? +0 +0.0 +0 +0.0 +? +0 +0.0 +0 +0.0 +1 +3.0 +0 +0 +0 +? +? +? +30 +LFTX_ON_ISOBARIC_SFC_500-1000hpa +? +1 +tmpl4_0 +LFTX +NCEP +? +isobaric_sfc +0 +? +1 +50000. +isobaric_sfc +0 +? +1 +100000. +? +? +0 +0.0 +0 +0.0 +? +0 +0.0 +0 +0.0 +1 +3.0 +0 +0 +0 +? +? +? +32 +CAPE_ON_SURFACE +? +1 +tmpl4_0 +CAPE +? +? +surface +0 +? +0 +? +? +0 +? +0 +? +? +? +0 +0.0 +0 +0.0 +? +0 +0.0 +0 +0.0 +1 +4.0 +0 +0 +0 +? +? +? +566 +BEST_CAPE_ON_SPEC_PRES_ABOVE_GRND +? +1 +tmpl4_0 +CAPE +? +? +spec_pres_above_grnd +0 +? +1 +18000. +spec_pres_above_grnd +0 +? +1 +0. +? +? +0 +0.0 +0 +0.0 +? +0 +0.0 +0 +0.0 +1 +4.0 +0 +0 +0 +? +? +? +582 +MIXED_LAYER_CAPE_ON_SPEC_PRES_ABOVE_GRND +? +1 +tmpl4_0 +CAPE +? +? +spec_pres_above_grnd +0 +? +1 +9000. +spec_pres_above_grnd +0 +? +1 +0. +? +? +0 +0.0 +0 +0.0 +? +0 +0.0 +0 +0.0 +1 +4.0 +0 +0 +0 +? +? +? +584 +UNSTABLE_CAPE_ON_SPEC_PRES_ABOVE_GRND +? +1 +tmpl4_0 +CAPE +? +? +spec_pres_above_grnd +0 +? +1 +25500. +spec_pres_above_grnd +0 +? +1 +0. +? +? +0 +0.0 +0 +0.0 +? +0 +0.0 +0 +0.0 +1 +4.0 +0 +0 +0 +? +? +? +107 +CIN_ON_SURFACE +? +1 +tmpl4_0 +CIN +? +? +surface +0 +? +0 +? +? +0 +? +0 +? +? +? +0 +0.0 +0 +0.0 +? +0 +0.0 +0 +0.0 +1 +4.0 +0 +0 +0 +? +? +? +567 +BEST_CIN_ON_SPEC_PRES_ABOVE_GRND +? +1 +tmpl4_0 +CIN +? +? +spec_pres_above_grnd +0 +? +1 +18000. +spec_pres_above_grnd +0 +? +1 +0. +? +? +0 +0.0 +0 +0.0 +? +0 +0.0 +0 +0.0 +1 +4.0 +0 +0 +0 +? +? +? +583 +MIXED_LAYER_CIN_ON_SPEC_PRES_ABOVE_GRND +? +1 +tmpl4_0 +CIN +? +? +spec_pres_above_grnd +0 +? +1 +9000. +spec_pres_above_grnd +0 +? +1 +0. +? +? +0 +0.0 +0 +0.0 +? +0 +0.0 +0 +0.0 +1 +4.0 +0 +0 +0 +? +? +? +585 +UNSTABLE_CIN_ON_SPEC_PRES_ABOVE_GRND +? +1 +tmpl4_0 +CIN +? +? +spec_pres_above_grnd +0 +? +1 +25500. +spec_pres_above_grnd +0 +? +1 +0. +? +? +0 +0.0 +0 +0.0 +? +0 +0.0 +0 +0.0 +1 +4.0 +0 +0 +0 +? +? +? +246 +PLPL_ON_SPEC_PRES_ABOVE_GRND +? +1 +tmpl4_0 +PLPL +NCEP +? +spec_pres_above_grnd +0 +? +1 +25500. +spec_pres_above_grnd +0 +? +1 +0. +? +? +0 +0.0 +0 +0.0 +? +0 +0.0 +0 +0.0 +1 +6.0 +0 +0 +0 +? +? +? +162 +HLCY_ON_SPEC_HGT_LVL_ABOVE_GRND +? +1 +tmpl4_0 +HLCY +? +? +spec_hgt_lvl_above_grnd +0 +? +2 +3000. 1000. +spec_hgt_lvl_above_grnd +0 +? +0 +? +? +? +0 +0.0 +0 +0.0 +? +0 +0.0 +0 +0.0 +1 +4.0 +0 +0 +0 +? +? +? +163 +USTM_ON_SPEC_HGT_LVL_ABOVE_GRND +? +1 +tmpl4_0 +USTM +NCEP +? +spec_hgt_lvl_above_grnd +0 +? +1 +6000. +spec_hgt_lvl_above_grnd +0 +? +0 +? +? +? +0 +0.0 +0 +0.0 +? +0 +0.0 +0 +0.0 +1 +4.0 +0 +0 +0 +? +? +? +164 +VSTM_ON_SPEC_HGT_LVL_ABOVE_GRND +? +1 +tmpl4_0 +VSTM +NCEP +? +spec_hgt_lvl_above_grnd +0 +? +1 +6000. +spec_hgt_lvl_above_grnd +0 +? +0 +? +? +? +0 +0.0 +0 +0.0 +? +0 +0.0 +0 +0.0 +1 +4.0 +0 +0 +0 +? +? +? +37 +LCDC_ON_LOW_CLOUD_LYR +? +1 +tmpl4_0 +LCDC +? +? +low_cloud_lyr +0 +? +0 +? +? +0 +? +0 +? +? +? +0 +0.0 +0 +0.0 +? +0 +0.0 +0 +0.0 +1 +3.0 +0 +0 +0 +? +? +? +38 +MCDC_ON_MID_CLOUD_LYR +? +1 +tmpl4_0 +MCDC +? +? +mid_cloud_lyr +0 +? +0 +? +? +0 +? +0 +? +? +? +0 +0.0 +0 +0.0 +? +0 +0.0 +0 +0.0 +1 +3.0 +0 +0 +0 +? +? +? +39 +HCDC_ON_HIGH_CLOUD_LYR +? +1 +tmpl4_0 +HCDC +? +? +high_cloud_lyr +0 +? +0 +? +? +0 +? +0 +? +? +? +0 +0.0 +0 +0.0 +? +0 +0.0 +0 +0.0 +1 +3.0 +0 +0 +0 +? +? +? +144 +AVE_TCDC_ON_ENTIRE_ATMOS +? +1 +tmpl4_8 +TCDC +? +AVE +entire_atmos_single_lyr +0 +? +0 +? +? +0 +? +0 +? +? +? +0 +0.0 +0 +0.0 +? +0 +0.0 +0 +0.0 +1 +3.0 +0 +0 +0 +? +? +? +139 +AVE_CDLYR_ON_ENTIRE_ATMOS +? +1 +tmpl4_8 +CDLYR +NCEP +AVE +entire_atmos_single_lyr +0 +? +0 +? +? +0 +? +0 +? +? +? +0 +0.0 +0 +0.0 +? +0 +0.0 +0 +0.0 +1 +3.0 +0 +0 +0 +? +? +? +148 +PRES_ON_CLOUD_BASE +? +1 +tmpl4_0 +PRES +? +? +cloud_base +0 +? +0 +? +? +0 +? +0 +? +? +? +0 +0.0 +0 +0.0 +? +0 +0.0 +0 +0.0 +1 +6.0 +0 +0 +0 +? +? +? +149 +PRES_ON_CLOUD_TOP +? +1 +tmpl4_0 +PRES +? +? +cloud_top +0 +? +0 +? +? +0 +? +0 +? +? +? +0 +0.0 +0 +0.0 +? +0 +0.0 +0 +0.0 +1 +6.0 +0 +0 +0 +? +? +? +168 +TMP_ON_CLOUD_TOP +? +1 +tmpl4_0 +TMP +? +? +cloud_top +0 +? +0 +? +? +0 +? +0 +? +? +? +0 +0.0 +0 +0.0 +? +0 +0.0 +0 +0.0 +1 +5.0 +0 +0 +0 +? +? +? +135 +AVE_GFLUX_ON_SURFACE +? +1 +tmpl4_8 +GFLUX +NCEP +AVE +surface +0 +? +0 +? +? +0 +? +0 +? +? +? +0 +0.0 +0 +0.0 +? +0 +0.0 +0 +0.0 +1 +4.0 +0 +0 +0 +? +? +? +136 +AVE_SNOHF_ON_SURFACE +? +1 +tmpl4_8 +SNOHF +NCEP +AVE +surface +0 +? +0 +? +? +0 +? +0 +? +? +? +0 +0.0 +0 +0.0 +? +0 +0.0 +0 +0.0 +1 +4.0 +0 +0 +0 +? +? +? +47 +ACM_EVP_ON_SURFACE +? +1 +tmpl4_8 +EVP +? +ACM +surface +0 +? +0 +? +? +0 +? +0 +? +? +? +0 +0.0 +0 +0.0 +? +0 +0.0 +0 +0.0 +1 +4.0 +0 +0 +0 +? +? +? +154 +INST_SHTFL_ON_SURFACE +? +1 +tmpl4_0 +SHTFL +? +? +surface +0 +? +0 +? +? +0 +? +0 +? +? +? +0 +0.0 +0 +0.0 +? +0 +0.0 +0 +0.0 +1 +4.0 +0 +0 +0 +? +? +? +155 +INST_LHTFL_ON_SURFACE +? +1 +tmpl4_0 +LHTFL +? +? +surface +0 +? +0 +? +? +0 +? +0 +? +? +? +0 +0.0 +0 +0.0 +? +0 +0.0 +0 +0.0 +1 +4.0 +0 +0 +0 +? +? +? +54 +PRES_ON_TROPOPAUSE +? +1 +tmpl4_0 +PRES +? +? +tropopause +0 +? +0 +? +? +0 +? +0 +? +? +? +0 +0.0 +0 +0.0 +? +0 +0.0 +0 +0.0 +1 +6.0 +0 +0 +0 +? +? +? +177 +HGT_ON_TROPOPAUSE +? +1 +tmpl4_0 +HGT +? +? +tropopause +0 +? +0 +? +? +0 +? +0 +? +? +? +0 +0.0 +0 +0.0 +? +0 +0.0 +0 +0.0 +1 +6.0 +0 +0 +0 +? +? +? +55 +TMP_ON_TROPOPAUSE +? +1 +tmpl4_0 +TMP +? +? +tropopause +0 +? +0 +? +? +0 +? +0 +? +? +? +0 +0.0 +0 +0.0 +? +0 +0.0 +0 +0.0 +1 +3.0 +0 +0 +0 +? +? +? +56 +UGRD_ON_TROPOPAUSE +? +1 +tmpl4_0 +UGRD +? +? +tropopause +0 +? +0 +? +? +0 +? +0 +? +? +? +0 +0.0 +0 +0.0 +? +0 +0.0 +0 +0.0 +1 +4.0 +0 +0 +0 +? +? +? +57 +VGRD_ON_TROPOPAUSE +? +1 +tmpl4_0 +VGRD +? +? +tropopause +0 +? +0 +? +? +0 +? +0 +? +? +? +0 +0.0 +0 +0.0 +? +0 +0.0 +0 +0.0 +1 +4.0 +0 +0 +0 +? +? +? +58 +VWSH_ON_TROPOPAUSE +? +1 +tmpl4_0 +VWSH +NCEP +? +tropopause +0 +? +0 +? +? +0 +? +0 +? +? +? +0 +0.0 +0 +0.0 +? +0 +0.0 +0 +0.0 +1 +3.0 +0 +0 +0 +? +? +? +59 +TMP_ON_SPEC_ALT_ABOVE_MEAN_SEA_LVL +? +1 +tmpl4_0 +TMP +? +? +spec_alt_above_mean_sea_lvl +0 +? +10 +305. 457. 610. 914. 1524. 1829. 2134. 2743. 3658. 4572. +? +0 +? +0 +? +? +? +0 +0.0 +0 +0.0 +? +0 +0.0 +0 +0.0 +1 +3.0 +0 +0 +0 +? +? +? +60 +UGRD_ON_SPEC_ALT_ABOVE_MEAN_SEA_LVL +? +1 +tmpl4_0 +UGRD +? +? +spec_alt_above_mean_sea_lvl +0 +? +10 +305. 457. 610. 914. 1524. 1829. 2134. 2743. 3658. 4572. +? +0 +? +0 +? +? +? +0 +0.0 +0 +0.0 +? +0 +0.0 +0 +0.0 +1 +4.0 +0 +0 +0 +? +? +? +61 +VGRD_ON_SPEC_ALT_ABOVE_MEAN_SEA_LVL +? +1 +tmpl4_0 +VGRD +? +? +spec_alt_above_mean_sea_lvl +0 +? +10 +305. 457. 610. 914. 1524. 1829. 2134. 2743. 3658. 4572. +? +0 +? +0 +? +? +? +0 +0.0 +0 +0.0 +? +0 +0.0 +0 +0.0 +1 +4.0 +0 +0 +0 +? +? +? +62 +HGT_ON_0C_ISOTHERM +? +1 +tmpl4_0 +HGT +? +? +0C_isotherm +0 +? +0 +? +? +0 +? +0 +? +? +? +0 +0.0 +0 +0.0 +? +0 +0.0 +0 +0.0 +1 +6.0 +0 +0 +0 +? +? +? +63 +RH_ON_0C_ISOTHERM +? +1 +tmpl4_0 +RH +? +? +0C_isotherm +0 +? +0 +? +? +0 +? +0 +? +? +? +0 +0.0 +0 +0.0 +? +0 +0.0 +0 +0.0 +1 +2.0 +0 +0 +0 +? +? +? +165 +HGT_ON_HGHST_TROP_FRZ_LVL +? +1 +tmpl4_0 +HGT +? +? +hghst_trop_frz_lvl +0 +? +0 +? +? +0 +? +0 +? +? +? +0 +0.0 +0 +0.0 +? +0 +0.0 +0 +0.0 +1 +6.0 +0 +0 +0 +? +? +? +173 +PRES_ON_MAX_WIND +? +1 +tmpl4_0 +PRES +? +? +max_wind +0 +? +0 +? +? +0 +? +0 +? +? +? +0 +0.0 +0 +0.0 +? +0 +0.0 +0 +0.0 +1 +6.0 +0 +0 +0 +? +? +? +174 +HGT_ON_MAX_WIND +? +1 +tmpl4_0 +HGT +? +? +max_wind +0 +? +0 +? +? +0 +? +0 +? +? +? +0 +0.0 +0 +0.0 +? +0 +0.0 +0 +0.0 +1 +6.0 +0 +0 +0 +? +? +? +175 +UGRD_ON_MAX_WIND +? +1 +tmpl4_0 +UGRD +? +? +max_wind +0 +? +0 +? +? +0 +? +0 +? +? +? +0 +0.0 +0 +0.0 +? +0 +0.0 +0 +0.0 +1 +4.0 +0 +0 +0 +? +? +? +176 +VGRD_ON_MAX_WIND +? +1 +tmpl4_0 +VGRD +? +? +max_wind +0 +? +0 +? +? +0 +? +0 +? +? +? +0 +0.0 +0 +0.0 +? +0 +0.0 +0 +0.0 +1 +4.0 +0 +0 +0 +? +? +? +422 +MAX_WIND_ON_SPEC_HGT_LVL_ABOVE_GRND_10m +maximum wind speed on 10 meter Above Ground +1 +tmpl4_8 +WIND +? +MAX +spec_hgt_lvl_above_grnd +0 +? +1 +10. +? +0 +? +0 +? +? +? +0 +0.0 +0 +0.0 +? +0 +0.0 +0 +0.0 +1 +-4.0 +0 +0 +0 +? +? +? +178 +HGT_ON_CLOUD_BASE +? +1 +tmpl4_0 +HGT +? +? +cloud_base +0 +? +0 +? +? +0 +? +0 +? +? +? +0 +0.0 +0 +0.0 +? +0 +0.0 +0 +0.0 +1 +6.0 +0 +0 +0 +? +? +? +179 +HGT_ON_CLOUD_TOP +? +1 +tmpl4_0 +HGT +? +? +cloud_top +0 +? +0 +? +? +0 +? +0 +? +? +? +0 +0.0 +0 +0.0 +? +0 +0.0 +0 +0.0 +1 +6.0 +0 +0 +0 +? +? +? +410 +GSD_VIS_ON_SURFACE +GSD_visibility on surface +1 +tmpl4_0 +VIS +? +? +surface +0 +? +0 +? +? +0 +? +0 +? +? +? +0 +0.0 +0 +0.0 +? +0 +0.0 +0 +0.0 +1 +6.0 +0 +0 +0 +? +? +? +252 +REFC_ON_ENTIRE_ATMOS +? +1 +tmpl4_0 +REFC +NCEP +? +entire_atmos_single_lyr +0 +? +0 +? +? +0 +? +0 +? +? +? +0 +0.0 +0 +0.0 +? +0 +0.0 +0 +0.0 +1 +4.0 +0 +0 +0 +? +? +? +194 +PRES_ON_GRID_SCALE_CLOUD_BOT_LVL +? +1 +tmpl4_0 +PRES +? +? +grid_scale_cloud_bot_lvl +0 +? +0 +? +? +0 +? +0 +? +? +? +0 +0.0 +0 +0.0 +? +0 +0.0 +0 +0.0 +1 +6.0 +0 +0 +0 +? +? +? +195 +PRES_ON_GRID_SCALE_CLOUD_TOP_LVL +? +1 +tmpl4_0 +PRES +? +? +grid_scale_cloud_top_lvl +0 +? +0 +? +? +0 +? +0 +? +? +? +0 +0.0 +0 +0.0 +? +0 +0.0 +0 +0.0 +1 +6.0 +0 +0 +0 +? +? +? +200 +TCOLW_ON_ENTIRE_ATMOS +? +1 +tmpl4_0 +TCOLW +NCEP +? +entire_atmos_single_lyr +0 +? +0 +? +? +0 +? +0 +? +? +? +0 +0.0 +0 +0.0 +? +0 +0.0 +0 +0.0 +1 +5.0 +0 +0 +0 +? +? +? +201 +TCOLI_ON_ENTIRE_ATMOS +? +1 +tmpl4_0 +TCOLI +NCEP +? +entire_atmos_single_lyr +0 +? +0 +? +? +0 +? +0 +? +? +? +0 +0.0 +0 +0.0 +? +0 +0.0 +0 +0.0 +1 +5.0 +0 +0 +0 +? +? +? +202 +TCOLR_ON_ENTIRE_ATMOS +? +1 +tmpl4_0 +TCOLR +NCEP +? +entire_atmos_single_lyr +0 +? +0 +? +? +0 +? +0 +? +? +? +0 +0.0 +0 +0.0 +? +0 +0.0 +0 +0.0 +1 +5.0 +0 +0 +0 +? +? +? +203 +TCOLS_ON_ENTIRE_ATMOS +? +1 +tmpl4_0 +TCOLS +NCEP +? +entire_atmos_single_lyr +0 +? +0 +? +? +0 +? +0 +? +? +? +0 +0.0 +0 +0.0 +? +0 +0.0 +0 +0.0 +1 +5.0 +0 +0 +0 +? +? +? +204 +TCOLC_ON_ENTIRE_ATMOS +? +1 +tmpl4_0 +TCOLC +NCEP +? +entire_atmos_single_lyr +0 +? +0 +? +? +0 +? +0 +? +? +? +0 +0.0 +0 +0.0 +? +0 +0.0 +0 +0.0 +1 +5.0 +0 +0 +0 +? +? +? +428 +TCOLG_ON_ENTIRE_ATMOS +? +1 +tmpl4_0 +TCOLG +? +? +entire_atmos_single_lyr +0 +? +0 +? +? +0 +? +0 +? +? +? +0 +0.0 +0 +0.0 +? +0 +0.0 +0 +0.0 +1 +5.0 +0 +0 +0 +? +? +? +218 +VGTYP_ON_SURFACE +? +1 +tmpl4_0 +VGTYP +NCEP +? +surface +0 +? +0 +? +? +0 +? +0 +? +? +? +0 +0.0 +0 +0.0 +? +0 +0.0 +0 +0.0 +1 +3.0 +0 +0 +0 +? +? +? +219 +SOTYP_ON_SURFACE +? +1 +tmpl4_0 +SOTYP +? +? +surface +0 +? +0 +? +? +0 +? +0 +? +? +? +0 +0.0 +0 +0.0 +? +0 +0.0 +0 +0.0 +1 +3.0 +0 +0 +0 +? +? +? +220 +CCOND_ON_SURFACE +? +1 +tmpl4_0 +CCOND +NCEP +? +surface +0 +? +0 +? +? +0 +? +0 +? +? +? +0 +0.0 +0 +0.0 +? +0 +0.0 +0 +0.0 +1 +3.0 +0 +0 +0 +? +? +? +221 +HPBL_ON_SURFACE +? +1 +tmpl4_0 +HPBL +NCEP +? +surface +0 +? +0 +? +? +0 +? +0 +? +? +? +0 +0.0 +0 +0.0 +? +0 +0.0 +0 +0.0 +1 +6.0 +0 +0 +0 +? +? +? +224 +SNOD_ON_SURFACE +? +1 +tmpl4_0 +SNOD +? +? +surface +0 +? +0 +? +? +0 +? +0 +? +? +? +0 +0.0 +0 +0.0 +? +0 +0.0 +0 +0.0 +1 +6.0 +0 +0 +0 +? +? +? +231 +SBSNO_ON_SURFACE +? +1 +tmpl4_0 +SBSNO +NCEP +? +surface +0 +? +0 +? +? +0 +? +0 +? +? +? +0 +0.0 +0 +0.0 +? +0 +0.0 +0 +0.0 +1 +3.0 +0 +0 +0 +? +? +? +232 +SMDRY_ON_SURFACE +? +1 +tmpl4_0 +SMDRY +NCEP +? +surface +0 +? +0 +? +? +0 +? +0 +? +? +? +0 +0.0 +0 +0.0 +? +0 +0.0 +0 +0.0 +1 +3.0 +0 +0 +0 +? +? +? +233 +POROS_ON_SURFACE +? +1 +tmpl4_0 +POROS +NCEP +? +surface +0 +? +0 +? +? +0 +? +0 +? +? +? +0 +0.0 +0 +0.0 +? +0 +0.0 +0 +0.0 +1 +3.0 +0 +0 +0 +? +? +? +234 +RSMIN_ON_SURFACE +? +1 +tmpl4_0 +RSMIN +NCEP +? +surface +0 +? +0 +? +? +0 +? +0 +? +? +? +0 +0.0 +0 +0.0 +? +0 +0.0 +0 +0.0 +1 +3.0 +0 +0 +0 +? +? +? +235 +RLYRS_ON_SURFACE +? +1 +tmpl4_0 +RLYRS +NCEP +? +surface +0 +? +0 +? +? +0 +? +0 +? +? +? +0 +0.0 +0 +0.0 +? +0 +0.0 +0 +0.0 +1 +3.0 +0 +0 +0 +? +? +? +236 +WILT_ON_SURFACE +? +1 +tmpl4_0 +WILT +NCEP +? +surface +0 +? +0 +? +? +0 +? +0 +? +? +? +0 +0.0 +0 +0.0 +? +0 +0.0 +0 +0.0 +1 +3.0 +0 +0 +0 +? +? +? +237 +SMREF_ON_SURFACE +? +1 +tmpl4_0 +SMREF +NCEP +? +surface +0 +? +0 +? +? +0 +? +0 +? +? +? +0 +0.0 +0 +0.0 +? +0 +0.0 +0 +0.0 +1 +3.0 +0 +0 +0 +? +? +? +238 +RCS_ON_SURFACE +? +1 +tmpl4_0 +RCS +NCEP +? +surface +0 +? +0 +? +? +0 +? +0 +? +? +? +0 +0.0 +0 +0.0 +? +0 +0.0 +0 +0.0 +1 +3.0 +0 +0 +0 +? +? +? +239 +RCT_ON_SURFACE +? +1 +tmpl4_0 +RCT +NCEP +? +surface +0 +? +0 +? +? +0 +? +0 +? +? +? +0 +0.0 +0 +0.0 +? +0 +0.0 +0 +0.0 +1 +5.0 +0 +0 +0 +? +? +? +240 +RCQ_ON_SURFACE +? +1 +tmpl4_0 +RCQ +NCEP +? +surface +0 +? +0 +? +? +0 +? +0 +? +? +? +0 +0.0 +0 +0.0 +? +0 +0.0 +0 +0.0 +1 +3.0 +0 +0 +0 +? +? +? +241 +RCSOL_ON_SURFACE +? +1 +tmpl4_0 +RCSOL +NCEP +? +surface +0 +? +0 +? +? +0 +? +0 +? +? +? +0 +0.0 +0 +0.0 +? +0 +0.0 +0 +0.0 +1 +3.0 +0 +0 +0 +? +? +? +242 +PEVPR_ON_SURFACE +? +1 +tmpl4_0 +PEVPR +NCEP +? +surface +0 +? +0 +? +? +0 +? +0 +? +? +? +0 +0.0 +0 +0.0 +? +0 +0.0 +0 +0.0 +1 +6.0 +0 +0 +0 +? +? +? +245 +GUST_ON_SURFACE +? +1 +tmpl4_0 +GUST +? +? +surface +0 +? +0 +? +? +0 +? +0 +? +? +? +0 +0.0 +0 +0.0 +? +0 +0.0 +0 +0.0 +1 +3.0 +0 +0 +0 +? +? +? +247 +HGT_ON_LWST_LVL_OF_WET_BULB_ZERO +? +1 +tmpl4_0 +HGT +? +? +lwst_lvl_of_wet_bulb_zero +0 +? +0 +? +? +0 +? +0 +? +? +? +0 +0.0 +0 +0.0 +? +0 +0.0 +0 +0.0 +1 +-5.0 +0 +0 +0 +? +? +? +254 +LAI_ON_SURFACE +? +1 +tmpl4_0 +LAI +NCEP +? +surface +0 +? +0 +? +? +0 +? +0 +? +? +? +0 +0.0 +0 +0.0 +? +0 +0.0 +0 +0.0 +1 +-3.0 +0 +0 +0 +? +? +? +262 +INST_CSDSF_ON_SURFACE +? +1 +tmpl4_0 +CSDSF +NCEP +? +surface +0 +? +0 +? +? +0 +? +0 +? +? +? +0 +0.0 +0 +0.0 +? +0 +0.0 +0 +0.0 +1 +4.0 +0 +0 +0 +? +? +? +222 +TCDC_ON_SIGMA_LVLS +? +1 +tmpl4_0 +TCDC +? +? +sigma_lvl +1 +4 +22 +9975. 9915. 9835. 9745. 9650. 9490. 9260. 9015. 8755. 8480. 8190. 7890. 7585. 7185. 6690. 6180. 5470. 4550. 3595. 2605. 1580. 530. +? +0 +? +0 +? +? +? +0 +0.0 +0 +0.0 +? +0 +0.0 +0 +0.0 +1 +3.0 +0 +0 +0 +? +? +? +289 +HGT_ON_PLANETARY_BOUND_LYR +? +1 +tmpl4_0 +HGT +? +? +planetary_bound_lyr +0 +? +0 +? +? +0 +? +0 +? +? +? +0 +0.0 +0 +0.0 +? +0 +0.0 +0 +0.0 +1 +-4.0 +0 +0 +0 +? +? +? +381 +MIXHT_ON_SURFACE +? +1 +tmpl4_0 +MIXHT +? +? +surface +0 +? +0 +? +? +0 +? +0 +? +? +? +0 +0.0 +0 +0.0 +? +0 +0.0 +0 +0.0 +1 +-4.0 +0 +0 +0 +? +? +? +505 +TMP_ON_SPEC_HGT_LVL_ABOVE_GRND_10m +? +1 +tmpl4_0 +TMP +? +? +spec_hgt_lvl_above_grnd +0 +? +1 +10. +? +0 +? +0 +? +? +? +0 +0.0 +0 +0.0 +? +0 +0.0 +0 +0.0 +1 +-4.0 +0 +0 +0 +? +? +? +500 +AVE_SNOWC_ON_SURFACE +? +1 +tmpl4_8 +SNOWC +NCEP +AVE +surface +0 +? +0 +? +? +0 +? +0 +? +? +? +0 +0.0 +0 +0.0 +? +0 +0.0 +0 +0.0 +1 +3.0 +0 +0 +0 +? +? +? +501 +AVE_PRES_ON_SURFACE +? +1 +tmpl4_8 +PRES +? +AVE +surface +0 +? +0 +? +? +0 +? +0 +? +? +? +0 +0.0 +0 +0.0 +? +0 +0.0 +0 +0.0 +1 +5.0 +0 +0 +0 +? +? +? +502 +AVE_TMP_ON_SPEC_HGT_LVL_ABOVE_GRND_10m +? +1 +tmpl4_8 +TMP +? +AVE +spec_hgt_lvl_above_grnd +0 +? +1 +10. +? +0 +? +0 +? +? +? +0 +0.0 +0 +0.0 +? +0 +0.0 +0 +0.0 +1 +-4.0 +0 +0 +0 +? +? +? +503 +AVE_AKHS_ON_SURFACE +? +1 +tmpl4_8 +AKHS +NCEP +AVE +surface +0 +? +0 +? +? +0 +? +0 +? +? +? +0 +0.0 +0 +0.0 +? +0 +0.0 +0 +0.0 +1 +3.0 +0 +0 +0 +? +? +? +504 +AVE_AKMS_ON_SURFACE +? +1 +tmpl4_8 +AKMS +NCEP +AVE +surface +0 +? +0 +? +? +0 +? +0 +? +? +? +0 +0.0 +0 +0.0 +? +0 +0.0 +0 +0.0 +1 +3.0 +0 +0 +0 +? +? +? +927 +SBTA167_ON_TOP_OF_ATMOS +? +1 +tmpl4_0 +SBTA167 +? +? +top_of_atmos +0 +? +0 +? +? +0 +? +0 +? +? +? +0 +0.0 +0 +0.0 +? +0 +0.0 +0 +0.0 +1 +4.0 +0 +0 +0 +? +? +? +928 +SBTA168_ON_TOP_OF_ATMOS +? +1 +tmpl4_0 +SBTA168 +? +? +top_of_atmos +0 +? +0 +? +? +0 +? +0 +? +? +? +0 +0.0 +0 +0.0 +? +0 +0.0 +0 +0.0 +1 +4.0 +0 +0 +0 +? +? +? +929 +SBTA169_ON_TOP_OF_ATMOS +? +1 +tmpl4_0 +SBTA169 +? +? +top_of_atmos +0 +? +0 +? +? +0 +? +0 +? +? +? +0 +0.0 +0 +0.0 +? +0 +0.0 +0 +0.0 +1 +4.0 +0 +0 +0 +? +? +? +930 +SBTA1610_ON_TOP_OF_ATMOS +? +1 +tmpl4_0 +SBTA1610 +? +? +top_of_atmos +0 +? +0 +? +? +0 +? +0 +? +? +? +0 +0.0 +0 +0.0 +? +0 +0.0 +0 +0.0 +1 +4.0 +0 +0 +0 +? +? +? +931 +SBTA1611_ON_TOP_OF_ATMOS +? +1 +tmpl4_0 +SBTA1611 +? +? +top_of_atmos +0 +? +0 +? +? +0 +? +0 +? +? +? +0 +0.0 +0 +0.0 +? +0 +0.0 +0 +0.0 +1 +4.0 +0 +0 +0 +? +? +? +932 +SBTA1612_ON_TOP_OF_ATMOS +? +1 +tmpl4_0 +SBTA1612 +? +? +top_of_atmos +0 +? +0 +? +? +0 +? +0 +? +? +? +0 +0.0 +0 +0.0 +? +0 +0.0 +0 +0.0 +1 +4.0 +0 +0 +0 +? +? +? +933 +SBTA1613_ON_TOP_OF_ATMOS +? +1 +tmpl4_0 +SBTA1613 +? +? +top_of_atmos +0 +? +0 +? +? +0 +? +0 +? +? +? +0 +0.0 +0 +0.0 +? +0 +0.0 +0 +0.0 +1 +4.0 +0 +0 +0 +? +? +? +934 +SBTA1614_ON_TOP_OF_ATMOS +? +1 +tmpl4_0 +SBTA1614 +? +? +top_of_atmos +0 +? +0 +? +? +0 +? +0 +? +? +? +0 +0.0 +0 +0.0 +? +0 +0.0 +0 +0.0 +1 +4.0 +0 +0 +0 +? +? +? +935 +SBTA1615_ON_TOP_OF_ATMOS +? +1 +tmpl4_0 +SBTA1615 +? +? +top_of_atmos +0 +? +0 +? +? +0 +? +0 +? +? +? +0 +0.0 +0 +0.0 +? +0 +0.0 +0 +0.0 +1 +4.0 +0 +0 +0 +? +? +? +936 +SBTA1616_ON_TOP_OF_ATMOS +? +1 +tmpl4_0 +SBTA1616 +? +? +top_of_atmos +0 +? +0 +? +? +0 +? +0 +? +? +? +0 +0.0 +0 +0.0 +? +0 +0.0 +0 +0.0 +1 +4.0 +0 +0 +0 +? +? +? +532 +SBTA188_ON_TOP_OF_ATMOS +? +1 +tmpl4_0 +SBTA188 +? +? +top_of_atmos +0 +? +0 +? +? +0 +? +0 +? +? +? +0 +0.0 +0 +0.0 +? +0 +0.0 +0 +0.0 +1 +4.0 +0 +0 +0 +? +? +? +533 +SBTA189_ON_TOP_OF_ATMOS +? +1 +tmpl4_0 +SBTA189 +? +? +top_of_atmos +0 +? +0 +? +? +0 +? +0 +? +? +? +0 +0.0 +0 +0.0 +? +0 +0.0 +0 +0.0 +1 +4.0 +0 +0 +0 +? +? +? +534 +SBTA1810_ON_TOP_OF_ATMOS +? +1 +tmpl4_0 +SBTA1810 +? +? +top_of_atmos +0 +? +0 +? +? +0 +? +0 +? +? +? +0 +0.0 +0 +0.0 +? +0 +0.0 +0 +0.0 +1 +4.0 +0 +0 +0 +? +? +? +535 +SBTA1811_ON_TOP_OF_ATMOS +? +1 +tmpl4_0 +SBTA1811 +? +? +top_of_atmos +0 +? +0 +? +? +0 +? +0 +? +? +? +0 +0.0 +0 +0.0 +? +0 +0.0 +0 +0.0 +1 +4.0 +0 +0 +0 +? +? +? +536 +SBTA1812_ON_TOP_OF_ATMOS +? +1 +tmpl4_0 +SBTA1812 +? +? +top_of_atmos +0 +? +0 +? +? +0 +? +0 +? +? +? +0 +0.0 +0 +0.0 +? +0 +0.0 +0 +0.0 +1 +4.0 +0 +0 +0 +? +? +? +537 +SBTA1813_ON_TOP_OF_ATMOS +? +1 +tmpl4_0 +SBTA1813 +? +? +top_of_atmos +0 +? +0 +? +? +0 +? +0 +? +? +? +0 +0.0 +0 +0.0 +? +0 +0.0 +0 +0.0 +1 +4.0 +0 +0 +0 +? +? +? +538 +SBTA1814_ON_TOP_OF_ATMOS +? +1 +tmpl4_0 +SBTA1814 +? +? +top_of_atmos +0 +? +0 +? +? +0 +? +0 +? +? +? +0 +0.0 +0 +0.0 +? +0 +0.0 +0 +0.0 +1 +4.0 +0 +0 +0 +? +? +? +539 +SBTA1815_ON_TOP_OF_ATMOS +? +1 +tmpl4_0 +SBTA1815 +? +? +top_of_atmos +0 +? +0 +? +? +0 +? +0 +? +? +? +0 +0.0 +0 +0.0 +? +0 +0.0 +0 +0.0 +1 +4.0 +0 +0 +0 +? +? +? +540 +SBTA1816_ON_TOP_OF_ATMOS +? +1 +tmpl4_0 +SBTA1816 +? +? +top_of_atmos +0 +? +0 +? +? +0 +? +0 +? +? +? +0 +0.0 +0 +0.0 +? +0 +0.0 +0 +0.0 +1 +4.0 +0 +0 +0 +? +? +? +1006 +SDEN_ON_SURFACE +? +1 +tmpl4_0 +SDEN +? +? +surface +0 +? +0 +? +? +0 +? +0 +? +? +? +0 +0.0 +0 +0.0 +? +0 +0.0 +0 +0.0 +1 +6.0 +0 +0 +0 +? +? +? +IFIFIP +4 +ncep_emc +v2003 +local_tab_yes1 +fcst +oper +fcst +fcst +hour +nws_ncep +hrrr +complex_packing_spatial_diff +2nd_ord_sptdiff +fltng_pnt +lossless +1007 +ICE_PROB_IFI_FLIGHT_LEVEL +? +1 +tmpl4_0 +ICPRB +NCEP +? +spec_alt_above_mean_sea_lvl +1 +1 +60 +5000. 10000. 15000. 20000. 25000. 30000. 35000. 40000. 45000. 50000. 55000. 60000. 65000. 70000. 75000. 80000. 85000. 90000. 95000. 100000. 105000. 110000. 115000. 120000. 125000. 130000. 135000. 140000. 145000. 150000. 155000. 160000. 165000. 170000. 175000. 180000. 185000. 190000. 195000. 200000. 205000. 210000. 215000. 220000. 225000. 230000. 235000. 240000. 245000. 250000. 255000. 260000. 265000. 270000. 275000. 280000. 285000. 290000. 295000. 300000. +? +0 +? +0 +? +? +? +0 +0.0 +0 +0.0 +? +0 +0.0 +0 +0.0 +1 +4.0 +0 +0 +0 +? +? +? +1008 +SLD_IFI_FLIGHT_LEVEL +? +1 +tmpl4_0 +SIPD +NCEP +? +spec_alt_above_mean_sea_lvl +1 +1 +60 +5000. 10000. 15000. 20000. 25000. 30000. 35000. 40000. 45000. 50000. 55000. 60000. 65000. 70000. 75000. 80000. 85000. 90000. 95000. 100000. 105000. 110000. 115000. 120000. 125000. 130000. 135000. 140000. 145000. 150000. 155000. 160000. 165000. 170000. 175000. 180000. 185000. 190000. 195000. 200000. 205000. 210000. 215000. 220000. 225000. 230000. 235000. 240000. 245000. 250000. 255000. 260000. 265000. 270000. 275000. 280000. 285000. 290000. 295000. 300000. +? +0 +? +0 +? +? +? +0 +0.0 +0 +0.0 +? +0 +0.0 +0 +0.0 +1 +4.0 +0 +0 +0 +? +? +? +1009 +ICE_SEV_CAT_IFI_FLIGHT_LEVEL +? +1 +tmpl4_0 +ICSEV +NCEP +? +spec_alt_above_mean_sea_lvl +1 +1 +60 +5000. 10000. 15000. 20000. 25000. 30000. 35000. 40000. 45000. 50000. 55000. 60000. 65000. 70000. 75000. 80000. 85000. 90000. 95000. 100000. 105000. 110000. 115000. 120000. 125000. 130000. 135000. 140000. 145000. 150000. 155000. 160000. 165000. 170000. 175000. 180000. 185000. 190000. 195000. 200000. 205000. 210000. 215000. 220000. 225000. 230000. 235000. 240000. 245000. 250000. 255000. 260000. 265000. 270000. 275000. 280000. 285000. 290000. 295000. 300000. +? +0 +? +0 +? +? +? +0 +0.0 +0 +0.0 +? +0 +0.0 +0 +0.0 +1 +4.0 +0 +0 +0 +? +? +? +1010 +WMO_ICE_SEV_CAT_IFI_FLIGHT_LEVEL +? +1 +tmpl4_0 +ICESEV +? +? +spec_alt_above_mean_sea_lvl +1 +1 +60 +5000. 10000. 15000. 20000. 25000. 30000. 35000. 40000. 45000. 50000. 55000. 60000. 65000. 70000. 75000. 80000. 85000. 90000. 95000. 100000. 105000. 110000. 115000. 120000. 125000. 130000. 135000. 140000. 145000. 150000. 155000. 160000. 165000. 170000. 175000. 180000. 185000. 190000. 195000. 200000. 205000. 210000. 215000. 220000. 225000. 230000. 235000. 240000. 245000. 250000. 255000. 260000. 265000. 270000. 275000. 280000. 285000. 290000. 295000. 300000. +? +0 +? +0 +? +? +? +0 +0.0 +0 +0.0 +? +0 +0.0 +0 +0.0 +1 +4.0 +0 +0 +0 +? +? +? diff --git a/parm/postxconfig-NT-hafs.txt b/parm/postxconfig-NT-hafs_nosat.txt similarity index 85% rename from parm/postxconfig-NT-hafs.txt rename to parm/postxconfig-NT-hafs_nosat.txt index d60fabd68..fc6ea2229 100644 --- a/parm/postxconfig-NT-hafs.txt +++ b/parm/postxconfig-NT-hafs_nosat.txt @@ -1,5 +1,5 @@ 1 -89 +78 HURPRS 32769 ncep_nco @@ -349,80 +349,6 @@ isobaric_sfc ? ? ? -22 -TKE_ON_ISOBARIC_SFC -? -1 -tmpl4_0 -TKE -? -? -isobaric_sfc -0 -? -45 -200. 500. 700. 1000. 2000. 3000. 5000. 7000. 10000. 12500. 15000. 17500. 20000. 22500. 25000. 27500. 30000. 32500. 35000. 37500. 40000. 42500. 45000. 47500. 50000. 52500. 55000. 57500. 60000. 62500. 65000. 67500. 70000. 72500. 75000. 77500. 80000. 82500. 85000. 87500. 90000. 92500. 95000. 97500. 100000. -? -0 -? -0 -? -? -? -0 -0.0 -0 -0.0 -? -0 -0.0 -0 -0.0 -1 -3.0 -0 -0 -0 -? -? -? -153 -CLMR_ON_ISOBARIC_SFC -? -1 -tmpl4_0 -CLMR -? -? -isobaric_sfc -0 -? -45 -200. 500. 700. 1000. 2000. 3000. 5000. 7000. 10000. 12500. 15000. 17500. 20000. 22500. 25000. 27500. 30000. 32500. 35000. 37500. 40000. 42500. 45000. 47500. 50000. 52500. 55000. 57500. 60000. 62500. 65000. 67500. 70000. 72500. 75000. 77500. 80000. 82500. 85000. 87500. 90000. 92500. 95000. 97500. 100000. -? -0 -? -0 -? -? -? -0 -0.0 -0 -0.0 -? -0 -0.0 -0 -0.0 -1 -6.0 -0 -0 -0 -? -? -? 166 ICMR_ON_ISOBARIC_SFC ? @@ -904,80 +830,6 @@ spec_hgt_lvl_above_grnd ? ? ? -245 -GUST_ON_SURFACE -? -1 -tmpl4_0 -GUST -? -? -surface -0 -? -0 -? -? -0 -? -0 -? -? -? -0 -0.0 -0 -0.0 -? -0 -0.0 -0 -0.0 -1 -4.0 -0 -0 -0 -? -? -? -158 -POT_ON_SPEC_HGT_LVL_ABOVE_GRND_10m -? -1 -tmpl4_0 -POT -? -? -spec_hgt_lvl_above_grnd -0 -? -1 -10. -? -0 -? -0 -? -? -? -0 -0.0 -0 -0.0 -? -0 -0.0 -0 -0.0 -1 -4.0 -0 -0 -0 -? -? -? 24 PRES_ON_SURFACE ? @@ -1052,80 +904,6 @@ surface ? ? ? -27 -POT_ON_SURFACE -? -1 -tmpl4_0 -POT -? -? -surface -0 -? -0 -? -? -0 -? -0 -? -? -? -0 -0.0 -0 -0.0 -? -0 -0.0 -0 -0.0 -1 -4.0 -0 -0 -0 -? -? -? -28 -SPFH_ON_SURFACE -? -1 -tmpl4_0 -SPFH -? -? -surface -0 -? -0 -? -? -0 -? -0 -? -? -? -0 -0.0 -0 -0.0 -? -0 -0.0 -0 -0.0 -1 -3.0 -0 -0 -0 -? -? -? 26 TMP_ON_SURFACE ? @@ -1163,43 +941,6 @@ surface ? ? ? -120 -SNOWC_ON_SURFACE -? -1 -tmpl4_0 -SNOWC -NCEP -? -surface -0 -? -0 -? -? -0 -? -0 -? -? -? -0 -0.0 -0 -0.0 -? -0 -0.0 -0 -0.0 -1 -3.0 -0 -0 -0 -? -? -? 169 SFEXC_ON_SURFACE ? @@ -1422,12 +1163,12 @@ surface ? ? ? -34 -ACM_NCPCP_ON_SURFACE +33 +ACM_ACPCP_ON_SURFACE ? 1 tmpl4_8 -NCPCP +ACPCP ? ACM surface @@ -1459,14 +1200,14 @@ surface ? ? ? -167 -INST_PRATE_ON_SURFACE +34 +ACM_NCPCP_ON_SURFACE ? 1 -tmpl4_0 -PRATE -? +tmpl4_8 +NCPCP ? +ACM surface 0 ? @@ -1489,59 +1230,22 @@ surface 0 0.0 1 -6.0 -0 -0 -0 -? -? -? -161 -INST_TCDC_ON_ENTIRE_ATMOS -? -1 -tmpl4_0 -TCDC -? -? -entire_atmos_single_lyr -0 -? -0 -? -? -0 -? -0 -? -? -? -0 -0.0 -0 -0.0 -? -0 -0.0 -0 -0.0 -1 -4.0 +-4.0 0 0 0 ? ? ? -144 -AVE_TCDC_ON_ENTIRE_ATMOS +271 +AVE_PRATE_ON_SURFACE ? 1 tmpl4_8 -TCDC +PRATE ? AVE -entire_atmos_single_lyr +surface 0 ? 0 @@ -1570,51 +1274,14 @@ entire_atmos_single_lyr ? ? ? -139 -AVE_CDLYR_ON_ENTIRE_ATMOS +272 +AVE_CPRAT_ON_SURFACE ? 1 tmpl4_8 -CDLYR -NCEP -AVE -entire_atmos_single_lyr -0 -? -0 -? -? -0 -? -0 -? -? -? -0 -0.0 -0 -0.0 -? -0 -0.0 -0 -0.0 -1 -3.0 -0 -0 -0 -? -? -? -141 -INST_USWRF_ON_SURFACE -? -1 -tmpl4_0 -USWRF -NCEP +CPRAT ? +AVE surface 0 ? @@ -1637,59 +1304,22 @@ surface 0 0.0 1 -6.0 +4.0 0 0 0 ? ? ? -142 -INST_ULWRF_ON_SURFACE +161 +INST_TCDC_ON_ENTIRE_ATMOS ? 1 tmpl4_0 -ULWRF -NCEP -? -surface -0 -? -0 -? -? -0 -? -0 -? -? -? -0 -0.0 -0 -0.0 -? -0 -0.0 -0 -0.0 -1 -6.0 -0 -0 -0 -? -? +TCDC ? -126 -AVE_DSWRF_ON_SURFACE ? -1 -tmpl4_8 -DSWRF -NCEP -AVE -surface +entire_atmos_single_lyr 0 ? 0 @@ -1711,22 +1341,22 @@ surface 0 0.0 1 -6.0 +4.0 0 0 0 ? ? ? -127 -AVE_DLWRF_ON_SURFACE +144 +AVE_TCDC_ON_ENTIRE_ATMOS ? 1 tmpl4_8 -DLWRF -NCEP +TCDC +? AVE -surface +entire_atmos_single_lyr 0 ? 0 @@ -1755,51 +1385,14 @@ surface ? ? ? -128 -AVE_USWRF_ON_SURFACE +141 +INST_USWRF_ON_SURFACE ? 1 -tmpl4_8 +tmpl4_0 USWRF NCEP -AVE -surface -0 -? -0 -? -? -0 ? -0 -? -? -? -0 -0.0 -0 -0.0 -? -0 -0.0 -0 -0.0 -1 -6.0 -0 -0 -0 -? -? -? -129 -AVE_ULWRF_ON_SURFACE -? -1 -tmpl4_8 -ULWRF -NCEP -AVE surface 0 ? @@ -1822,22 +1415,22 @@ surface 0 0.0 1 -4.0 +6.0 0 0 0 ? ? ? -130 -AVE_USWRF_ON_TOP_OF_ATMOS +142 +INST_ULWRF_ON_SURFACE ? 1 -tmpl4_8 -USWRF +tmpl4_0 +ULWRF NCEP -AVE -top_of_atmos +? +surface 0 ? 0 @@ -1866,15 +1459,15 @@ top_of_atmos ? ? ? -131 -AVE_ULWRF_ON_TOP_OF_ATMOS +126 +AVE_DSWRF_ON_SURFACE ? 1 tmpl4_8 -ULWRF +DSWRF NCEP AVE -top_of_atmos +surface 0 ? 0 @@ -1896,22 +1489,22 @@ top_of_atmos 0 0.0 1 -4.0 +6.0 0 0 0 ? ? ? -274 -INST_ULWRF_ON_TOP_OF_ATMOS +127 +AVE_DLWRF_ON_SURFACE ? 1 -tmpl4_0 -ULWRF +tmpl4_8 +DLWRF NCEP -? -top_of_atmos +AVE +surface 0 ? 0 @@ -1940,15 +1533,15 @@ top_of_atmos ? ? ? -275 -BRTMP_ON_TOP_OF_ATMOS +128 +AVE_USWRF_ON_SURFACE ? 1 -tmpl4_0 -BRTMP -? -? -top_of_atmos +tmpl4_8 +USWRF +NCEP +AVE +surface 0 ? 0 @@ -1970,21 +1563,21 @@ top_of_atmos 0 0.0 1 -4.0 +6.0 0 0 0 ? ? ? -156 -INST_DSWRF_ON_SURFACE +129 +AVE_ULWRF_ON_SURFACE ? 1 -tmpl4_0 -DSWRF +tmpl4_8 +ULWRF NCEP -? +AVE surface 0 ? @@ -2007,22 +1600,22 @@ surface 0 0.0 1 -6.0 +4.0 0 0 0 ? ? ? -157 -INST_DLWRF_ON_SURFACE +130 +AVE_USWRF_ON_TOP_OF_ATMOS ? 1 -tmpl4_0 -DLWRF +tmpl4_8 +USWRF NCEP -? -surface +AVE +top_of_atmos 0 ? 0 @@ -2044,22 +1637,22 @@ surface 0 0.0 1 -4.0 +6.0 0 0 0 ? ? ? -44 -SFCR_ON_SURFACE +131 +AVE_ULWRF_ON_TOP_OF_ATMOS ? 1 -tmpl4_0 -SFCR -? -? -surface +tmpl4_8 +ULWRF +NCEP +AVE +top_of_atmos 0 ? 0 @@ -2081,22 +1674,22 @@ surface 0 0.0 1 -6.0 +4.0 0 0 0 ? ? ? -45 -FRICV_ON_SURFACE +274 +INST_ULWRF_ON_TOP_OF_ATMOS ? 1 tmpl4_0 -FRICV +ULWRF NCEP ? -surface +top_of_atmos 0 ? 0 @@ -2125,12 +1718,12 @@ surface ? ? ? -132 -CD_ON_SURFACE +156 +INST_DSWRF_ON_SURFACE ? 1 tmpl4_0 -CD +DSWRF NCEP ? surface @@ -2162,13 +1755,13 @@ surface ? ? ? -133 -UFLX_ON_SURFACE +157 +INST_DLWRF_ON_SURFACE ? 1 tmpl4_0 -UFLX -? +DLWRF +NCEP ? surface 0 @@ -2199,12 +1792,12 @@ surface ? ? ? -134 -VFLX_ON_SURFACE +44 +SFCR_ON_SURFACE ? 1 tmpl4_0 -VFLX +SFCR ? ? surface @@ -2229,21 +1822,21 @@ surface 0 0.0 1 -4.0 +6.0 0 0 0 ? ? ? -43 -AVE_SHTFL_ON_SURFACE +45 +FRICV_ON_SURFACE ? 1 -tmpl4_8 -SHTFL +tmpl4_0 +FRICV +NCEP ? -AVE surface 0 ? @@ -2273,14 +1866,14 @@ surface ? ? ? -42 -AVE_LHTFL_ON_SURFACE +133 +UFLX_ON_SURFACE ? 1 -tmpl4_8 -LHTFL +tmpl4_0 +UFLX +? ? -AVE surface 0 ? @@ -2310,14 +1903,14 @@ surface ? ? ? -47 -ACM_EVP_ON_SURFACE +134 +VFLX_ON_SURFACE ? 1 -tmpl4_8 -EVP +tmpl4_0 +VFLX +? ? -ACM surface 0 ? @@ -2680,43 +2273,6 @@ tropopause ? ? ? -108 -POT_ON_TROPOPAUSE -? -1 -tmpl4_0 -POT -? -? -tropopause -0 -? -0 -? -? -0 -? -0 -? -? -? -0 -0.0 -0 -0.0 -? -0 -0.0 -0 -0.0 -1 -4.0 -0 -0 -0 -? -? -? 56 UGRD_ON_TROPOPAUSE ? @@ -3124,19 +2680,19 @@ entire_atmos_single_lyr ? ? ? -285 -TCLSW_ON_ENTIRE_ATMOS -? +422 +MAX_WIND_ON_SPEC_HGT_LVL_ABOVE_GRND_10m +maximum wind speed on 10 meter Above Ground 1 -tmpl4_0 -TCLSW -NCEP -? -entire_atmos_single_lyr -0 +tmpl4_8 +WIND ? +MAX +spec_hgt_lvl_above_grnd 0 ? +1 +10. ? 0 ? @@ -3154,22 +2710,22 @@ entire_atmos_single_lyr 0 0.0 1 -5.0 +-4.0 0 0 0 ? ? ? -286 -TCOLM_ON_ENTIRE_ATMOS +245 +GUST_ON_SURFACE ? 1 tmpl4_0 -TCOLM -NCEP +GUST ? -entire_atmos_single_lyr +? +surface 0 ? 0 @@ -3191,31 +2747,68 @@ entire_atmos_single_lyr 0 0.0 1 -5.0 +3.0 0 0 0 ? ? ? -291 -LWHR_ON_ENTIRE_ATMOS -? +423 +MAX_MAXUVV_ON_ISOBARIC_SFC_100-1000hpa +hourly maximum Upward Vertical Velocity between 100-1000hpa 1 -tmpl4_0 -LWHR +tmpl4_8 +MAXUVV NCEP +MAX +isobaric_sfc +0 ? -entire_atmos_single_lyr +1 +10000. +isobaric_sfc +0 +? +1 +100000. +? +? +0 +0.0 0 +0.0 ? 0 +0.0 +0 +0.0 +1 +-4.0 +0 +0 +0 +? ? ? +424 +MAX_MAXDVV_ON_ISOBARIC_SFC_100-1000hpa +hourly maximum Downward Vertical Velocity between 100-1000hpa +1 +tmpl4_8 +MAXDVV +NCEP +MAX +isobaric_sfc 0 ? +1 +10000. +isobaric_sfc 0 ? +1 +100000. ? ? 0 @@ -3228,31 +2821,31 @@ entire_atmos_single_lyr 0 0.0 1 -5.0 +-4.0 0 0 0 ? ? ? -292 -AVE_LRGHR_ON_ENTIRE_ATMOS +790 +GSD_MAX_UPHL_ON_SPEC_HGT_LVL_ABOVE_GRND_0-3km ? 1 tmpl4_8 -LRGHR +MXUPHL NCEP -AVE -entire_atmos_single_lyr -0 -? -0 -? -? +MAX +spec_hgt_lvl_above_grnd 0 ? +1 +3000. +spec_hgt_lvl_above_grnd 0 ? +1 +0000. ? ? 0 @@ -3265,31 +2858,31 @@ entire_atmos_single_lyr 0 0.0 1 -5.0 +-3.0 0 0 0 ? ? ? -508 -MAX_PRATE_ON_SURFACE -Maximum Precipitation Rate on surface +420 +MAX_UPHL_ON_SPEC_HGT_LVL_ABOVE_GRND_2-5km +maximum Updraft Helicity on Specified Height Level Above Ground 1 tmpl4_8 -PRATE -? +MXUPHL +NCEP MAX -surface -0 -? -0 -? -? +spec_hgt_lvl_above_grnd 0 ? +1 +5000. +spec_hgt_lvl_above_grnd 0 ? +1 +2000. ? ? 0 @@ -3302,7 +2895,7 @@ surface 0 0.0 1 -6.0 +-3.0 0 0 0 diff --git a/parm/postxconfig-NT-hafs_sat.txt b/parm/postxconfig-NT-hafs_sat.txt new file mode 100644 index 000000000..f7142bd4b --- /dev/null +++ b/parm/postxconfig-NT-hafs_sat.txt @@ -0,0 +1,314 @@ +1 +8 +HURSAT +32769 +ncep_nco +v2003 +local_tab_yes1 +fcst +oper +fcst +fcst +hour +nws_ncep +hafs +complex_packing_spatial_diff +2nd_ord_sptdiff +fltng_pnt +lossless +959 +SBTAGR8_ON_TOP_OF_ATMOS +? +1 +tmpl4_0 +SBTAGR8 +? +? +top_of_atmos +0 +? +0 +? +? +0 +? +0 +? +? +? +0 +0.0 +0 +0.0 +? +0 +0.0 +0 +0.0 +1 +4.0 +0 +0 +0 +? +? +? +960 +SBTAGR9_ON_TOP_OF_ATMOS +? +1 +tmpl4_0 +SBTAGR9 +? +? +top_of_atmos +0 +? +0 +? +? +0 +? +0 +? +? +? +0 +0.0 +0 +0.0 +? +0 +0.0 +0 +0.0 +1 +4.0 +0 +0 +0 +? +? +? +961 +SBTAGR10_ON_TOP_OF_ATMOS +? +1 +tmpl4_0 +SBTAGR10 +? +? +top_of_atmos +0 +? +0 +? +? +0 +? +0 +? +? +? +0 +0.0 +0 +0.0 +? +0 +0.0 +0 +0.0 +1 +4.0 +0 +0 +0 +? +? +? +964 +SBTAGR13_ON_TOP_OF_ATMOS +? +1 +tmpl4_0 +SBTAGR13 +? +? +top_of_atmos +0 +? +0 +? +? +0 +? +0 +? +? +? +0 +0.0 +0 +0.0 +? +0 +0.0 +0 +0.0 +1 +4.0 +0 +0 +0 +? +? +? +825 +SSMS1715_ON_TOP_OF_ATMOS +? +1 +tmpl4_0 +SSMS1715 +? +? +top_of_atmos +0 +? +0 +? +? +0 +? +0 +? +? +? +0 +0.0 +0 +0.0 +? +0 +0.0 +0 +0.0 +1 +4.0 +0 +0 +0 +? +? +? +826 +SSMS1716_ON_TOP_OF_ATMOS +? +1 +tmpl4_0 +SSMS1716 +? +? +top_of_atmos +0 +? +0 +? +? +0 +? +0 +? +? +? +0 +0.0 +0 +0.0 +? +0 +0.0 +0 +0.0 +1 +4.0 +0 +0 +0 +? +? +? +827 +SSMS1717_ON_TOP_OF_ATMOS +? +1 +tmpl4_0 +SSMS1717 +? +? +top_of_atmos +0 +? +0 +? +? +0 +? +0 +? +? +? +0 +0.0 +0 +0.0 +? +0 +0.0 +0 +0.0 +1 +4.0 +0 +0 +0 +? +? +? +828 +SSMS1718_ON_TOP_OF_ATMOS +? +1 +tmpl4_0 +SSMS1718 +? +? +top_of_atmos +0 +? +0 +? +? +0 +? +0 +? +? +? +0 +0.0 +0 +0.0 +? +0 +0.0 +0 +0.0 +1 +4.0 +0 +0 +0 +? +? +? diff --git a/parm/postxconfig-NT-hrrr.txt b/parm/postxconfig-NT-hrrr.txt index eb687ff27..a24976cb5 100644 --- a/parm/postxconfig-NT-hrrr.txt +++ b/parm/postxconfig-NT-hrrr.txt @@ -577,7 +577,7 @@ spec_hgt_lvl_above_grnd SMOKE_ON_SPEC_HGT_LVL_ABOVE_GRND_8m ? 1 -tmpl4_0 +tmpl4_48 MASSDEN ? ? @@ -591,7 +591,7 @@ spec_hgt_lvl_above_grnd ? 0 ? -? +particulate_org_matter_dry ? 0 0.0 @@ -5498,7 +5498,7 @@ entire_atmos_single_lyr SMOKE_ON_ENTIRE_ATMOS_SINGLE_LYR ? 1 -tmpl4_0 +tmpl4_48 COLMD ? ? @@ -5512,7 +5512,7 @@ entire_atmos_single_lyr ? 0 ? -? +particulate_org_matter_dry ? 0 0.0 @@ -6973,7 +6973,7 @@ hybrid_lvl SMOKE_ON_HYBRID_LVL ? 1 -tmpl4_0 +tmpl4_48 MASSDEN ? ? @@ -6987,7 +6987,7 @@ hybrid_lvl ? 0 ? -? +particulate_org_matter_dry ? 0 0.0 diff --git a/parm/postxconfig-NT-rap.txt b/parm/postxconfig-NT-rap.txt index 16e98464e..c76b78397 100644 --- a/parm/postxconfig-NT-rap.txt +++ b/parm/postxconfig-NT-rap.txt @@ -1686,7 +1686,7 @@ spec_hgt_lvl_above_grnd SMOKE_ON_SPEC_HGT_LVL_ABOVE_GRND_8m ? 1 -tmpl4_0 +tmpl4_48 MASSDEN ? ? @@ -1700,7 +1700,7 @@ spec_hgt_lvl_above_grnd ? 0 ? -? +particulate_org_matter_dry ? 0 0.0 @@ -4424,7 +4424,7 @@ entire_atmos_single_lyr SMOKE_ON_ENTIRE_ATMOS_SINGLE_LYR ? 1 -tmpl4_0 +tmpl4_48 COLMD ? ? @@ -4438,7 +4438,7 @@ entire_atmos_single_lyr ? 0 ? -? +particulate_org_matter_dry ? 0 0.0 @@ -7067,7 +7067,7 @@ hybrid_lvl SMOKE_ON_HYBRID_LVL ? 1 -tmpl4_0 +tmpl4_48 MASSDEN ? ? @@ -7081,7 +7081,7 @@ hybrid_lvl ? 0 ? -? +particulate_org_matter_dry ? 0 0.0 @@ -8769,7 +8769,7 @@ spec_hgt_lvl_above_grnd SMOKE_ON_SPEC_HGT_LVL_ABOVE_GRND_8m ? 1 -tmpl4_0 +tmpl4_48 MASSDEN ? ? @@ -8783,7 +8783,7 @@ spec_hgt_lvl_above_grnd ? 0 ? -? +particulate_org_matter_dry ? 0 0.0 @@ -9361,7 +9361,7 @@ entire_atmos_single_lyr SMOKE_ON_ENTIRE_ATMOS_SINGLE_LYR ? 1 -tmpl4_0 +tmpl4_48 COLMD ? ? @@ -9375,7 +9375,7 @@ entire_atmos_single_lyr ? 0 ? -? +particulate_org_matter_dry ? 0 0.0 diff --git a/parm/rap_wrf_cntrl.parm b/parm/rap_wrf_cntrl.parm deleted file mode 100644 index 738966b62..000000000 --- a/parm/rap_wrf_cntrl.parm +++ /dev/null @@ -1,365 +0,0 @@ - KGTYPE******I5*******:(00255)********START OF THIS OUTPUT GRID****** - IMDLTY *I5* :(00125) - DATSET *A6* :(WRFTWO) - (MAPS SLP ) SCAL=(-0.1) - L=(10000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) - (SHELTER TEMPERATURE ) SCAL=(-4.0) - L=(10000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) - (SHELTER POT TEMP ) SCAL=(-4.0) - L=(10000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) - (SHELTER SPEC HUMID ) SCAL=( 3.0) - L=(10000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) - (SHELTER DEWPOINT ) SCAL=(-4.0) - L=(10000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) - (SHELTER DEWP DEPRES ) SCAL=(-4.0) - L=(10000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) - (SURFACE EQ POT TEMP ) SCAL=(-4.0) - L=(10000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) - (SHELTER REL HUMID ) SCAL=(-0.1) - L=(10000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) - (U WIND AT ANEMOM HT ) SCAL=(-4.0) - L=(10000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) - (V WIND AT ANEMOM HT ) SCAL=(-4.0) - L=(10000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) - (SURFACE PRESSURE ) SCAL=( 4.0) - L=(10000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) - (SNOW WATER EQUIVALNT) SCAL=( 5.0) - L=(10000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) - (PERCENT SNOW COVER ) SCAL=( 3.0) - L=(10000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) - (SNOW DEPTH ) SCAL=( 5.0) - L=(10000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) - (PRESS AT TROPOPAUSE ) SCAL=( 3.0) - L=(10000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) - (TEMP AT TROPOPAUSE ) SCAL=(-3.0) - L=(10000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) - (POTENTL TEMP AT TROP) SCAL=( 3.0) - L=(10000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) - (U WIND AT TROPOPAUSE) SCAL=(-4.0) - L=(10000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) - (V WIND AT TROPOPAUSE) SCAL=(-4.0) - L=(10000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) - (HEIGHT OF FRZ LVL ) SCAL=( 3.0) - L=(10000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) - (REL HUMID AT FRZ LVL) SCAL=(-0.1) - L=(10000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) - (HIGHEST FRZ LVL PRES) SCAL=( 3.0) - L=(10000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) - (HIGHEST FREEZE LVL ) SCAL=( 3.0) - L=(10000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) - (HIGHEST FRZ LVL RH ) SCAL=(-0.1) - L=(10000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) - (PRESSURE OF FRZ LVL ) SCAL=( 3.0) - L=(10000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) - (LOW WET BULB ZERO HT) SCAL=(-1.0) - L=(10000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) - (ACM STORM SFC RNOFF ) SCAL=(-3.0) - L=(10000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) - (ACM BSFL-GDWR RNOFF ) SCAL=(-3.0) - L=(10000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) - (LIFTED INDEX--BEST ) SCAL=( 3.0) - L=(10000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) - (LIFTED INDEX--SURFCE) SCAL=( 3.0) - L=(10000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) - (SEA ICE MASK ) SCAL=( 1.0) - L=(10000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) - (CNVCT AVBL POT ENRGY) SCAL=( 3.0) - L=(11110 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) - (CNVCT INHIBITION ) SCAL=( 3.0) - L=(11110 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) - (PRECIPITABLE WATER ) SCAL=(-3.0) - L=(10000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) - (STORM REL HELICITY ) SCAL=( 4.0) - L=(11000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) - (ACM TOTAL PRECIP ) SCAL=( 5.0) - L=(10000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) - (ACM CONVCTIVE PRECIP) SCAL=( 5.0) - L=(10000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) - (ACM GRD SCALE PRECIP) SCAL=( 5.0) - L=(10000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) - (ACM SNOWFALL ) SCAL=( 5.0) - L=(10000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) - (BUCKET SNOW PRECIP ) SCAL=( 5.0) - L=(10000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) - (BUCKET TOTAL PRECIP ) SCAL=( 5.0) - L=(10000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) - (BUCKET CONV PRECIP ) SCAL=( 5.0) - L=(10000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) - (BUCKET GRDSCALE PRCP) SCAL=( 5.0) - L=(10000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) - (GSD PRECIP TYPE ) SCAL=( 1.0) - L=(10000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) - (INSTANT PRECIP RATE ) SCAL=( 3.0) - L=(10000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) - (CONV PRECIP RATE ) SCAL=( 3.0) - L=(10000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) - (SEA SFC TEMPERATURE ) SCAL=(-4.0) - L=(10000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) - (GSD CLD BOT HEIGHT ) SCAL=(-3.0) - L=(10000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) - (GSD CLD TOP HEIGHT ) SCAL=(-3.0) - L=(10000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) - (PBL HEIGHT ) SCAL=(-4.0) - L=(10000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) - (MAX WIND PRESS LEVEL) SCAL=( 3.0) - L=(10000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) - (U COMP MAX WIND ) SCAL=(-4.0) - L=(10000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) - (V COMP MAX WIND ) SCAL=(-4.0) - L=(10000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) - (COMPOSITE RADAR REFL) SCAL=(-4.0) - L=(10000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) - (RADAR REFL AGL ) SCAL=(-4.0) - L=(00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) - (GSD VISIBILITY ) SCAL=( 2.7) - L=(10000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) - (INST GROUND HEAT FLX) SCAL=( 3.0) - L=(00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) - (INST SFC SENHEAT FX ) SCAL=( 3.0) - L=(10000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) - (INST SFC LATHEAT FX ) SCAL=( 3.0) - L=(10000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) - (LIFT PCL LVL PRESS ) SCAL=( 3.0) - L=(10000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) - (TEMP IN BNDRY LYR ) SCAL=( 3.0) - L=(11111 10000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) - (POT TMP IN BNDRY LYR) SCAL=( 3.0) - L=(00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) - (DWPT IN BNDRY LYR ) SCAL=( 3.0) - L=(00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) - (REL HUM IN BNDRY LYR) SCAL=(-0.1) - L=(11111 10000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) - (U WIND IN BNDRY LYR ) SCAL=( 3.0) - L=(11111 10000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) - (V WIND IN BNDRY LYR ) SCAL=( 3.0) - L=(11111 10000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) - (OMEGA IN BNDRY LYR ) SCAL=(-5.0) - L=(11111 10000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) - (RH WRT PRECIP WATER ) SCAL=(-0.1) - L=(10000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) - (SFC (SKIN) TEMPRATUR) SCAL=(-4.0) - L=(10000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) - (HEIGHT AT TROPOPAUSE) SCAL=( 3.0) - L=(10000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) - (SOIL TEMPERATURE ) SCAL=( 3.0) - L=(11111 11110 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) - (SOIL MOISTURE ) SCAL=( 4.0) - L=(11111 11110 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) - (MAX 10m WIND SPEED ) SCAL=(-4.0) - L=(00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) - (MAX UPDRAFT VERT VEL) SCAL=(-4.0) - L=(00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) - (MAX DNDRAFT VERT VEL) SCAL=(-4.0) - L=(00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) - (MAX 1km REFLECTIVITY) SCAL=(-4.0) - L=(00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) - (MAX UPDRAFT HELICITY) SCAL=( 3.0) - L=(00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) - (MEAN VERT VEL ) SCAL=(-4.0) - L=(00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) - (MAX VERT INTEG GRAUP) SCAL=( 3.0) - L=(00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) - (LCL AGL HEIGHT ) SCAL=(-3.0) - L=(00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) - (U COMP STORM MOTION ) SCAL=(-4.0) - L=(10000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) - (V COMP STORM MOTION ) SCAL=(-4.0) - L=(10000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) - (U COMP 0-1 KM SHEAR ) SCAL=(-4.0) - L=(00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) - (V COMP 0-1 KM SHEAR ) SCAL=(-4.0) - L=(00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) - (U COMP 0-6 KM SHEAR ) SCAL=(-4.0) - L=(00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) - (V COMP 0-6 KM SHEAR ) SCAL=(-4.0) - L=(00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) - (SFC WIND GUST ) SCAL=(-4.0) - L=(10000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) - (FRICTION VELOCITY ) SCAL=( 3.0) - L=(10000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) - (INSTN OUT SFC SW RAD) SCAL=(-3.0) - L=(10000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) - (INSTN OUT SFC LW RAD) SCAL=(-3.0) - L=(10000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) - (INSTN INC SFC SW RAD) SCAL=(-3.0) - L=(10000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) - (INSTN INC SFC LW RAD) SCAL=(-3.0) - L=(10000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) - (INSTN OUT TOA LW RAD) SCAL=( 3.0) - L=(10000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) - (DIRECT SOIL EVAP ) SCAL=( 3.0) - L=(10000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) - (CANOPY WATER EVAP ) SCAL=( 4.0) - L=(10000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) - (PLANT TRANSPIRATION ) SCAL=( 3.0) - L=(10000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) - (PLANT CANOPY SFC WTR) SCAL=( 4.0) - L=(10000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) - (INSTN INC SFC SW RAD) SCAL=(-4.0) - L=(10000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) - (TOTAL CLD FRACTION ) SCAL=(-3.0) - L=(10000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) - (LOW CLOUD FRACTION ) SCAL=(-3.0) - L=(10000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) - (MID CLOUD FRACTION ) SCAL=(-3.0) - L=(10000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) - (HIGH CLOUD FRACTION ) SCAL=(-3.0) - L=(10000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) - (LAND/SEA MASK ) SCAL=( 1.0) - L=(10000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) - (VEGETATION TYPE ) SCAL=( 3.0) - L=(10000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) - (SOIL TYPE ) SCAL=( 3.0) - L=(10000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) - (SHAL CU CLD BOT PRES) SCAL=( 3.0) - L=(10000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) - (SHAL CU CLD TOP PRES) SCAL=( 3.0) - L=(10000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) - (DEEP CU CLD BOT PRES) SCAL=( 3.0) - L=(10000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) - (DEEP CU CLD TOP PRES) SCAL=( 3.0) - L=(10000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) - (CONV CLOUD BOT PRESS) SCAL=( 3.0) - L=(10000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) - (CONV CLOUD TOP PRESS) SCAL=( 3.0) - L=(10000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) - (CONV CLD TOP HGHT ) SCAL=(-1.0) - L=(10000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) - (CEILING ) SCAL=(-3.0) - L=(10000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) - (CLEAR AIR TURBULENCE) SCAL=( 4.0) - L=(10000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) - (0-2000FT LLWS ) SCAL=( 4.0) - L=(10000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) - (ECHO TOPS IN KFT ) SCAL=( 4.0) - L=(10000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) - (CONV CLOUD FRACTION ) SCAL=( 3.0) - L=(10000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) - (EQUIL LEVEL HEIGHT ) SCAL=(-1.0) - L=(10000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) - (LIGHTNING ) SCAL=( 1.0) - L=(10000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) - (RADAR REFLECT - 1km ) SCAL=(-4.0) - L=(10000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) - (RADAR REFLECT - 4km ) SCAL=(-4.0) - L=(10000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) - (CLOUD BOT PRESSURE ) SCAL=( 3.0) - L=(10000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) - (CLOUD TOP PRESSURE ) SCAL=( 3.0) - L=(10000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) - (CLOUD TOP TEMPS ) SCAL=(-3.0) - L=(10000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) - (TOTAL SOIL MOISTURE ) SCAL=( 3.0) - L=(10000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) - (BOTTOM SOIL TEMP ) SCAL=( 3.0) - L=(00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) - (SOIL MOISTURE AVAIL ) SCAL=( 3.0) - L=(10000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) - (SURFACE HEIGHT ) SCAL=(-5.0) - L=(10000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) - (RADARVIL ) SCAL=( 6.0) - L=(10000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) - (ECHOTOP ) SCAL=( 6.0) - L=(10000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) -***DONE WITH THIS GRID*** - KGTYPE******I5*******:(00255)********START OF THIS OUTPUT GRID****** - IMDLTY *I5* :(00125) - DATSET *A6* :(WRFPRS) - (HEIGHT OF PRESS SFCS) SCAL=(-5.0) - L=(00000 01011 11111 11111 11111 11111 11111 11111 11111 11000 00000 00000 00000 00000) - (TEMP ON PRESS SFCS ) SCAL=(-4.0) - L=(00000 01011 11111 11111 11111 11111 11111 11111 11111 11000 00000 00000 00000 00000) - (DWPT TEMP ON P SFCS ) SCAL=(-4.0) - L=(00000 01011 11111 11111 11111 11111 11111 11111 11111 11000 00000 00000 00000 00000) - (SPEC HUM ON P SFCS ) SCAL=( 3.0) - L=(00000 01011 11111 11111 11111 11111 11111 11111 11111 11000 00000 00000 00000 00000) - (REL HUMID ON P SFCS ) SCAL=(-3.0) - L=(00000 01011 11111 11111 11111 11111 11111 11111 11111 11000 00000 00000 00000 00000) - (U WIND ON PRESS SFCS) SCAL=(-4.0) - L=(00000 01011 11111 11111 11111 11111 11111 11111 11111 11000 00000 00000 00000 00000) - (V WIND ON PRESS SFCS) SCAL=(-4.0) - L=(00000 01011 11111 11111 11111 11111 11111 11111 11111 11000 00000 00000 00000 00000) - (OMEGA ON PRESS SFCS ) SCAL=(-5.0) - L=(00000 01011 11111 11111 11111 11111 11111 11111 11111 11000 00000 00000 00000 00000) - (ABS VORT ON P SFCS ) SCAL=( 3.0) - L=(00000 01011 11111 11111 11111 11111 11111 11111 11111 11000 00000 00000 00000 00000) - (CLOUD ICE ON P SFCS ) SCAL=( 6.0) - L=(00000 01011 11111 11111 11111 11111 11111 11111 11111 11000 00000 00000 00000 00000) - (CLOUD WATR ON P SFCS) SCAL=( 6.0) - L=(00000 01011 11111 11111 11111 11111 11111 11111 11111 11000 00000 00000 00000 00000) - (RAIN ON P SFCS ) SCAL=( 6.0) - L=(00000 01011 11111 11111 11111 11111 11111 11111 11111 11000 00000 00000 00000 00000) - (SNOW ON P SFCS ) SCAL=( 6.0) - L=(00000 01011 11111 11111 11111 11111 11111 11111 11111 11000 00000 00000 00000 00000) - (GRAUPEL ON P SFCS ) SCAL=( 6.0) - L=(00000 01011 11111 11111 11111 11111 11111 11111 11111 11000 00000 00000 00000 00000) - (TRBLNT KE ON P SFCS ) SCAL=( 3.0) - L=(00000 01011 11111 11111 11111 11111 11111 11111 11111 11000 00000 00000 00000 00000) - (PRESS ON MDL SFCS ) SCAL=( 3.0) - L=(10000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) - (HEIGHT ON MDL SFCS ) SCAL=(-3.0) - L=(10000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) - (TEMP ON MDL SFCS ) SCAL=(-4.0) - L=(10000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) - (SPEC HUM ON MDL SFCS) SCAL=( 6.0) - L=(10000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) - (U WIND ON MDL SFCS ) SCAL=(-4.0) - L=(10000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) - (V WIND ON MDL SFCS ) SCAL=(-4.0) - L=(10000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) - (CLD WTR ON MDL SFCS ) SCAL=( 3.0) - L=(10000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) - (CLD ICE ON MDL SFCS ) SCAL=( 3.0) - L=(10000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) - (SHUELL MEAN SLP ) SCAL=(-0.1) - L=(00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) - (TEMP AT FD HEIGHTS ) SCAL=( 3.0) - L=(00200 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) - (U WIND AT FD HEIGHTS) SCAL=( 3.0) - L=(00200 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) - (V WIND AT FD HEIGHTS) SCAL=( 3.0) - L=(00200 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) - (PRESS AT FD HEIGHTS ) SCAL=( 3.0) - L=(00200 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) - (SPE HUM AT FD HEIGHT) SCAL=( 3.0) - L=(00200 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) -***DONE WITH THIS GRID*** - KGTYPE******I5*******:(00255)********START OF THIS OUTPUT GRID****** - IMDLTY *I5* :(00125) - DATSET *A6* :(WRFNAT) - (PRESS ON MDL SFCS ) SCAL=( 3.0) - L=(11111 11111 11111 11111 11111 11111 11111 11111 11111 11111 00000 00000 00000 00000) - (HEIGHT ON MDL SFCS ) SCAL=(-5.0) - L=(11111 11111 11111 11111 11111 11111 11111 11111 11111 11111 00000 00000 00000 00000) - (TEMP ON MDL SFCS ) SCAL=(-4.0) - L=(11111 11111 11111 11111 11111 11111 11111 11111 11111 11111 00000 00000 00000 00000) - (SPEC HUM ON MDL SFCS) SCAL=( 3.0) - L=(11111 11111 11111 11111 11111 11111 11111 11111 11111 11111 00000 00000 00000 00000) - (U WIND ON MDL SFCS ) SCAL=(-4.0) - L=(11111 11111 11111 11111 11111 11111 11111 11111 11111 11111 00000 00000 00000 00000) - (V WIND ON MDL SFCS ) SCAL=(-4.0) - L=(11111 11111 11111 11111 11111 11111 11111 11111 11111 11111 00000 00000 00000 00000) - (OMEGA ON MDL SFCS ) SCAL=(-4.0) - L=(11111 11111 11111 11111 11111 11111 11111 11111 11111 11111 00000 00000 00000 00000) - (WV MIX R ON MDL SFCS) SCAL=( 3.0) - L=(11111 11111 11111 11111 11111 11111 11111 11111 11111 11111 00000 00000 00000 00000) - (CLD WTR ON MDL SFCS ) SCAL=( 6.0) - L=(11111 11111 11111 11111 11111 11111 11111 11111 11111 11111 00000 00000 00000 00000) - (CLD ICE ON MDL SFCS ) SCAL=( 6.0) - L=(11111 11111 11111 11111 11111 11111 11111 11111 11111 11111 00000 00000 00000 00000) - (RAIN ON MDL SFCS ) SCAL=( 6.0) - L=(11111 11111 11111 11111 11111 11111 11111 11111 11111 11111 00000 00000 00000 00000) - (SNOW ON MDL SFCS ) SCAL=( 6.0) - L=(11111 11111 11111 11111 11111 11111 11111 11111 11111 11111 00000 00000 00000 00000) - (GRAUPEL ON MDL SFCS ) SCAL=( 6.0) - L=(11111 11111 11111 11111 11111 11111 11111 11111 11111 11111 00000 00000 00000 00000) - (TRBLNT KE ON MDL SFC) SCAL=(-2.0) - L=(11111 11111 11111 11111 11111 11111 11111 11111 11111 11111 00000 00000 00000 00000) - (NCICE ON MDL SFCS ) SCAL=( 3.0) - L=(11111 11111 11111 11111 11111 11111 11111 11111 11111 11111 00000 00000 00000 00000) - (NCRAIN ON MDL SFCS ) SCAL=( 3.0) - L=(11111 11111 11111 11111 11111 11111 11111 11111 11111 11111 00000 00000 00000 00000) - (CLD FRAC ON MDL SFCS) SCAL=(-3.0) - L=(11111 11111 11111 11111 11111 11111 11111 11111 11111 11111 00000 00000 00000 00000) -***DONE WITH THIS GRID*** - diff --git a/parm/wrf_cntrl.parm b/parm/wrf_cntrl.parm deleted file mode 100644 index 2a7cac7a7..000000000 --- a/parm/wrf_cntrl.parm +++ /dev/null @@ -1,499 +0,0 @@ - KGTYPE******I5*******:(00255)********START OF THIS OUTPUT GRID****** - IMDLTY *I5* :(00125) - DATSET *A6* :(WRFPRS) - (PRESS ON MDL SFCS ) SCAL=( 3.0) - L=(11000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) - (HEIGHT ON MDL SFCS ) SCAL=( 6.0) - L=(11000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) - (TEMP ON MDL SFCS ) SCAL=( 4.0) - L=(11000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) - (POT TEMP ON MDL SFCS) SCAL=( 4.0) - L=(00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) - (DWPT TEMP ON MDL SFC) SCAL=( 5.0) - L=(11000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) - (SPEC HUM ON MDL SFCS) SCAL=( 3.0) - L=(11000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) - (REL HUM ON MDL SFCS ) SCAL=( 4.0) - L=(10000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) - (MST CNVG ON MDL SFCS) SCAL=( 3.0) - L=(00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) - (U WIND ON MDL SFCS ) SCAL=( 4.0) - L=(11000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) - (V WIND ON MDL SFCS ) SCAL=( 4.0) - L=(11000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) - (OMEGA ON MDL SFCS ) SCAL=( 5.0) - L=(00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) - (ABS VORT ON MDL SFCS) SCAL=( 3.0) - L=(00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) - (STRMFUNC ON MDL SFCS) SCAL=( 3.0) - L=(00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) - (TRBLNT KE ON MDL SFC) SCAL=( 3.0) - L=(00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) - (RCHDSN NO ON MDL SFC) SCAL=( 3.0) - L=(00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) - (RAIN ON MDL SFCS ) SCAL=( 6.0) - L=(00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) - (SNOW ON MDL SFCS ) SCAL=( 6.0) - L=(00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) - (F_RimeF ON MDL SFCS ) SCAL=( 3.0) - L=(00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) - (CONDENSATE MDL SFCS ) SCAL=( 3.0) - L=(00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) - (RADAR REFL MDL SFCS ) SCAL=( 4.0) - L=(11000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) - (CLD WTR ON MDL SFCS ) SCAL=( 6.0) - L=(00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) - (CLD ICE ON MDL SFCS ) SCAL=( 6.0) - L=(00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) - (GRAUPEL ON MDL SFCS ) SCAL=( 6.0) - L=(00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) - (CLD FRAC ON MDL SFCS) SCAL=( 3.0) - L=(00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) - (MASTER LENGTH SCALE ) SCAL=( 3.0) - L=(00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) - (ASYMPT MSTR LEN SCL ) SCAL=( 3.0) - L=(00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) - (HEIGHT OF PRESS SFCS) SCAL=( 6.0) - L=(00000 01001 01010 10101 01010 10101 01010 11111 11111 10000 00000 00000 00000 00000) - (TEMP ON PRESS SFCS ) SCAL=( 4.0) - L=(00000 01001 01010 10101 01010 10101 01010 11111 11111 10000 00000 00000 00000 00000) - (POT TEMP ON P SFCS ) SCAL=( 4.0) - L=(00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) - (DWPT TEMP ON P SFCS ) SCAL=( 4.0) - L=(00000 01001 01010 10101 01010 10101 01010 11111 11111 10000 00000 00000 00000 00000) - (SPEC HUM ON P SFCS ) SCAL=( 4.0) - L=(00000 01001 01010 10101 01010 10101 01010 11111 11111 10000 00000 00000 00000 00000) - (REL HUMID ON P SFCS ) SCAL=( 4.0) - L=(00000 01001 01010 10101 01010 10101 01010 11111 11111 10000 00000 00000 00000 00000) - (MST CNVG ON P SFCS ) SCAL=( 3.0) - L=(00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) - (U WIND ON PRESS SFCS) SCAL=( 4.0) - L=(00000 01001 01010 10101 01010 10101 01010 11111 11111 10000 00000 00000 00000 00000) - (V WIND ON PRESS SFCS) SCAL=( 4.0) - L=(00000 01001 01010 10101 01010 10101 01010 11111 11111 10000 00000 00000 00000 00000) - (W WIND ON P SFCS ) SCAL=( 5.0) - L=(00000 01001 01010 10101 01010 10101 01010 11111 11111 10000 00000 00000 00000 00000) - (OMEGA ON PRESS SFCS ) SCAL=( 5.0) - L=(00000 01001 01010 10101 01010 10101 01010 11111 11111 10000 00000 00000 00000 00000) - (ABS VORT ON P SFCS ) SCAL=( 3.0) - L=(00000 01001 01010 10101 01010 10101 01010 11111 11111 10000 00000 00000 00000 00000) - (STRMFUNC ON P SFCS ) SCAL=( 3.0) - L=(00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) - (TRBLNT KE ON P SFCS ) SCAL=( 3.0) - L=(00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) - (CLOUD ICE ON P SFCS ) SCAL=( 6.0) - L=(00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) - (CLOUD WATR ON P SFCS) SCAL=( 6.0) - L=(00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) - (RAIN ON P SFCS ) SCAL=( 6.0) - L=(00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) - (SNOW ON P SFCS ) SCAL=( 6.0) - L=(00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) - (F_RimeF ON P SFCS ) SCAL=( 3.0) - L=(00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) - (RADAR REFL ON P SFCS) SCAL=( 4.0) - L=(00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) - (GRAUPEL ON P SFCS ) SCAL=( 6.0) - L=(10000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) - (MAPS SLP ) SCAL=( 6.0) - L=(10000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) - (MESINGER MEAN SLP ) SCAL=( 6.0) - L=(10000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) - (SHUELL MEAN SLP ) SCAL=( 6.0) - L=(10000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) - (SHELTER PRESSURE ) SCAL=( 6.0) - L=(00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) - (SHELTER TEMPERATURE ) SCAL=( 5.0) - L=(10000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) - (SHELTER SPEC HUMID ) SCAL=( 3.0) - L=(10000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) - (SHELTER DEWPOINT ) SCAL=( 5.0) - L=(10000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) - (SHELTER REL HUMID ) SCAL=( 4.0) - L=(10000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) - (SHELTER MIX RATIO ) SCAL=( 4.0) - L=(00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) - (U WIND AT ANEMOM HT ) SCAL=( 4.0) - L=(10000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) - (V WIND AT ANEMOM HT ) SCAL=( 4.0) - L=(10000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) - (SURFACE PRESSURE ) SCAL=( 6.0) - L=(10000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) - (SURFACE HEIGHT ) SCAL=( 6.0) - L=(10000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) - (SURFACE POT TEMP ) SCAL=( 5.0) - L=(00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) - (SURFACE SPEC HUMID ) SCAL=( 3.0) - L=(00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) - (SURFACE DEWPOINT ) SCAL=( 4.0) - L=(00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) - (SURFACE REL HUMID ) SCAL=( 4.0) - L=(00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) - (SFC (SKIN) TEMPRATUR) SCAL=( 5.0) - L=(10000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) - (BOTTOM SOIL TEMP ) SCAL=( 5.0) - L=(10000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) - (SOIL TEMPERATURE ) SCAL=( 3.0) - L=(11111 10000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) - (SOIL MOISTURE ) SCAL=( 3.0) - L=(11111 10000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) - (LIQUID SOIL MOISTURE) SCAL=( 3.0) - L=(11110 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) - (TOTAL SOIL MOISTURE ) SCAL=( 3.0) - L=(10000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) - (PLANT CANOPY SFC WTR) SCAL=( 3.0) - L=(00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) - (SNOW WATER EQUIVALNT) SCAL=( 3.0) - L=(10000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) - (PERCENT SNOW COVER ) SCAL=( 3.0) - L=(10000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) - (SFC EXCHANGE COEF ) SCAL=( 3.0) - L=(00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) - (GREEN VEG COVER ) SCAL=( 3.0) - L=(10000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) - (VEGETATION TYPE ) SCAL=( 3.0) - L=(00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) - (SOIL TYPE ) SCAL=( 3.0) - L=(00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) - (SLOPE TYPE ) SCAL=( 3.0) - L=(00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) - (SNOW FREE ALBEDO ) SCAL=( 3.0) - L=(00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) - (MAXIMUM SNOW ALBEDO ) SCAL=( 3.0) - L=(00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) - (CANOPY CONDUCTANCE ) SCAL=( 3.0) - L=(00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) - (CANOPY COND SOLAR ) SCAL=( 3.0) - L=(00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) - (CANOPY COND TEMP ) SCAL=( 5.0) - L=(00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) - (CANOPY COND HUMID ) SCAL=( 3.0) - L=(00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) - (CANOPY COND SOILM ) SCAL=( 3.0) - L=(00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) - (SOIL MOIST REFERENCE) SCAL=( 3.0) - L=(00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) - (SOIL MOIST POROSITY ) SCAL=( 3.0) - L=(00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) - (NO OF ROOT LAYERS ) SCAL=( 1.0) - L=(00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) - (MIN STOMATAL RESIST ) SCAL=( 3.0) - L=(00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) - (SNOW DEPTH ) SCAL=( 6.0) - L=(10000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) - (AIR DRY SOIL MOIST ) SCAL=( 3.0) - L=(00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) - (SOIL MOIST WILT PT ) SCAL=( 3.0) - L=(00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) - (SOIL MOISTURE AVAIL ) SCAL=( 3.0) - L=(10000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) - (INST GROUND HEAT FLX) SCAL=( 4.0) - L=(10000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) - (LIFTED INDEX--SURFCE) SCAL=( 3.0) - L=(10000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) - (LIFTED INDEX--BEST ) SCAL=( 3.0) - L=(10000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) - (LIFTED INDEX--BNDLYR) SCAL=( 3.0) - L=(10000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) - (CNVCT AVBL POT ENRGY) SCAL=( 3.0) - L=(11110 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) - (CNVCT INHIBITION ) SCAL=( 3.0) - L=(11110 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) - (PRECIPITABLE WATER ) SCAL=( 3.0) - L=(10000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) - (STORM REL HELICITY ) SCAL=( 3.0) - L=(10000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) - (ACM TOTAL PRECIP ) SCAL=( 5.0) - L=(10000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) - (ACM CONVCTIVE PRECIP) SCAL=( 5.0) - L=(10000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) - (ACM GRD SCALE PRECIP) SCAL=( 5.0) - L=(10000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) - (ACM GRD SCALE SW ICE) SCAL=( 4.0) - L=(10000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) - (ACM SNOWFALL ) SCAL=( 5.0) - L=(10000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) - (BUCKET SNOW PRECIP ) SCAL=( 5.0) - L=(00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) - (BUCKET TOTAL PRECIP ) SCAL=( 5.0) - L=(00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) - (BUCKET CONV PRECIP ) SCAL=( 5.0) - L=(00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) - (BUCKET GRDSCALE PRCP) SCAL=( 5.0) - L=(00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) - (ACM SNOW TOTAL/MELT ) SCAL=( 4.0) - L=(10000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) - (ACM STORM SFC RNOFF ) SCAL=( 4.0) - L=(10000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) - (ACM BSFL-GDWR RNOFF ) SCAL=( 4.0) - L=(00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) - (INSTANT PRECIP TYPE ) SCAL=( 1.0) - L=(10000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) - (GSD PRECIP TYPE ) SCAL=( 1.0) - L=(10000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) - (INSTANT PRECIP RATE ) SCAL=( 3.0) - L=(10000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) - (CONV PRECIP RATE ) SCAL=( 3.0) - L=(10000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) - (FROZEN FRAC CLD SCHM) SCAL=( 4.0) - L=(00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) - (SEA SFC TEMPERATURE ) SCAL=( 5.0) - L=(10000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) - (LOW CLOUD FRACTION ) SCAL=( 3.0) - L=(10000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) - (MID CLOUD FRACTION ) SCAL=( 3.0) - L=(10000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) - (HIGH CLOUD FRACTION ) SCAL=( 3.0) - L=(10000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) - (AVG TOTAL CLD FRAC ) SCAL=( 3.0) - L=(10000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) - (AVG STRAT CLD FRAC ) SCAL=( 3.0) - L=(10000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) - (AVG CNVCT CLD FRAC ) SCAL=( 3.0) - L=(10000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) - (GSD CLD BOT HEIGHT ) SCAL=( 6.0) - L=(10000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) - (GSD CLD TOP HEIGHT ) SCAL=( 6.0) - L=(10000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) - (CLOUD BOT PRESSURE ) SCAL=( 6.0) - L=(10000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) - (CLOUD TOP PRESSURE ) SCAL=( 6.0) - L=(10000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) - (CLOUD TOP TEMPS ) SCAL=( 5.0) - L=(10000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) - (CLOUD BOTTOM HEIGHT ) SCAL=( 6.0) - L=(10000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) - (CLOUD TOP HEIGHT ) SCAL=( 6.0) - L=(10000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) - (CONV CLOUD BOT PRESS) SCAL=( 6.0) - L=(00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) - (CONV CLOUD TOP PRESS) SCAL=( 6.0) - L=(00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) - (SHAL CU CLD BOT PRES) SCAL=( 6.0) - L=(00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) - (SHAL CU CLD TOP PRES) SCAL=( 6.0) - L=(00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) - (DEEP CU CLD BOT PRES) SCAL=( 6.0) - L=(00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) - (DEEP CU CLD TOP PRES) SCAL=( 6.0) - L=(00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) - (GRID CLOUD BOT PRESS) SCAL=( 6.0) - L=(00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) - (GRID CLOUD TOP PRESS) SCAL=( 6.0) - L=(00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) - (CONV CLOUD FRACTION ) SCAL=( 3.0) - L=(00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) - (MAX WIND PRESS LEVEL) SCAL=( 3.0) - L=(00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) - (MAX WIND HGHT LEVEL ) SCAL=( 3.0) - L=(00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) - (U COMP MAX WIND ) SCAL=( 5.0) - L=(00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) - (V COMP MAX WIND ) SCAL=( 5.0) - L=(00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) - (PBL HEIGHT ) SCAL=( 5.0) - L=(10000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) - (COMPOSITE RADAR REFL) SCAL=( 4.0) - L=(10000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) - (RADAR REFL AGL ) SCAL=( 4.0) - L=(11000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) - (VISIBILITY ) SCAL=( 2.7) - L=(10000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) - (GSD VISIBILITY ) SCAL=( 2.7) - L=(10000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) - (LCL AGL HEIGHT ) SCAL=( 5.0) - L=(00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) - (LCL PRESSURE ) SCAL=( 6.0) - L=(00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) - (AVE GRDSCL RN TMPTDY) SCAL=( 3.0) - L=(00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) - (AVE CNVCT RN TMPTDY ) SCAL=( 2.7) - L=(00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) - (RADFLX CNVG TMP TNDY) SCAL=( 3.0) - L=(00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) - (SW RAD TEMP TNDY ) SCAL=( 3.0) - L=(00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) - (LW RAD TEMP TNDY ) SCAL=( 3.0) - L=(00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) - (INSTN OUT SFC SW RAD) SCAL=( 4.0) - L=(10000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) - (INSTN OUT SFC LW RAD) SCAL=( 4.0) - L=(10000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) - (AVE INCMG SFC SW RAD) SCAL=( 4.0) - L=(10000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) - (AVE INCMG SFC LW RAD) SCAL=( 4.0) - L=(10000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) - (AVE OUTGO SFC SW RAD) SCAL=( 4.0) - L=(10000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) - (AVE OUTGO SFC LW RAD) SCAL=( 4.0) - L=(10000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) - (BRIGHTNESS TEMP ) SCAL=( 5.0) - L=(00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) - (BRIGHTNESS TEMP NCAR) SCAL=( 5.0) - L=(10000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) - (INSTN INC SFC SW RAD) SCAL=( 4.0) - L=(10000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) - (INSTN INC SFC LW RAD) SCAL=( 4.0) - L=(10000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) - (INSTN CLR INC SFC SW) SCAL=( 4.0) - L=(10000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) - (ROUGHNESS LENGTH ) SCAL=( 2.7) - L=(10000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) - (FRICTION VELOCITY ) SCAL=( 3.0) - L=(10000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) - (SFC DRAG COEFFICIENT) SCAL=( 3.0) - L=(00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) - (SFC U WIND STRESS ) SCAL=( 3.0) - L=(00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) - (SFC V WIND STRESS ) SCAL=( 3.0) - L=(00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) - (AVE SFC SENHEAT FX ) SCAL=( 4.0) - L=(10000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) - (AVE GROUND HEAT FX ) SCAL=( 4.0) - L=(10000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) - (AVE SNO PHSCNG HT FX) SCAL=( 4.0) - L=(00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) - (AVE SFC LATHEAT FX ) SCAL=( 4.0) - L=(10000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) - (AVE SFC MOMENTUM FX ) SCAL=( 4.0) - L=(10000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) - (ACC SFC EVAPORATION ) SCAL=( 4.0) - L=(00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) - (ACC POT EVAPORATION ) SCAL=( 4.0) - L=(10000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) - (INST SFC SENHEAT FX ) SCAL=( 3.0) - L=(10000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) - (INST GROUND HEAT FLX) SCAL=( 3.0) - L=(00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) - (INST SFC LATHEAT FX ) SCAL=( 3.0) - L=(10000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) - (LATITUDE ) SCAL=( 4.0) - L=(10000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) - (LONGITUDE ) SCAL=( 4.0) - L=(10000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) - (LAND/SEA MASK ) SCAL=( 1.0) - L=(10000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) - (SEA ICE MASK ) SCAL=( 1.0) - L=(10000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) - (SFC MIDDAY ALBEDO ) SCAL=( 3.0) - L=(00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) - (LIFT PCL LVL PRESS ) SCAL=( 3.0) - L=(00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) - (PRESS AT TROPOPAUSE ) SCAL=( 6.0) - L=(00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) - (HEIGHT AT TROPOPAUSE) SCAL=( 3.0) - L=(10000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) - (TEMP AT TROPOPAUSE ) SCAL=( 5.0) - L=(00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) - (POTENTL TEMP AT TROP) SCAL=( 5.0) - L=(00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) - (U WIND AT TROPOPAUSE) SCAL=( 5.0) - L=(00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) - (V WIND AT TROPOPAUSE) SCAL=( 5.0) - L=(00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) - (SHEAR AT TROPOPAUSE ) SCAL=( 3.0) - L=(00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) - (SPE HUM AT FD HEIGHT) SCAL=( 5.0) - L=(00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) - (TEMP AT FD HEIGHTS ) SCAL=( 5.0) - L=(00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) - (U WIND AT FD HEIGHTS) SCAL=( 5.0) - L=(00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) - (V WIND AT FD HEIGHTS) SCAL=( 5.0) - L=(00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) - (HEIGHT OF FRZ LVL ) SCAL=( 6.0) - L=(10000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) - (REL HUMID AT FRZ LVL) SCAL=( 4.0) - L=(00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) - (HIGHEST FREEZE LVL ) SCAL=( 5.0) - L=(10000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) - (PRESS IN BNDRY LYR ) SCAL=( 6.0) - L=(00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) - (TEMP IN BNDRY LYR ) SCAL=( 3.0) - L=(00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) - (POT TMP IN BNDRY LYR) SCAL=( 3.0) - L=(00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) - (DWPT IN BNDRY LYR ) SCAL=( 3.0) - L=(00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) - (SPC HUM IN BNDRY LYR) SCAL=( 3.0) - L=(10000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) - (REL HUM IN BNDRY LYR) SCAL=( 3.0) - L=(00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) - (MST CNV IN BNDRY LYR) SCAL=( 3.0) - L=(00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) - (P WATER IN BNDRY LYR) SCAL=( 3.0) - L=(10000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) - (U WIND IN BNDRY LYR ) SCAL=( 5.0) - L=(10000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) - (V WIND IN BNDRY LYR ) SCAL=( 5.0) - L=(10000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) - (OMEGA IN BNDRY LYR ) SCAL=( 5.0) - L=(00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) - (MAX 10m WIND SPEED ) SCAL=( 4.0) - L=(00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) - (MAX UPDRAFT VERT VEL) SCAL=( 3.0) - L=(00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) - (MAX DNDRAFT VERT VEL) SCAL=( 3.0) - L=(00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) - (MAX 1km REFLECTIVITY) SCAL=( 4.0) - L=(00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) - (MAX UPDRAFT HELICITY) SCAL=( 3.0) - L=(00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) - (MEAN VERT VEL ) SCAL=( 3.0) - L=(00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) - (MAX VERT INTEG GRAUP) SCAL=( 3.0) - L=(00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) - (LCL AGL HEIGHT ) SCAL=( 5.0) - L=(00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) - (U COMP STORM MOTION ) SCAL=( 4.0) - L=(00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) - (V COMP STORM MOTION ) SCAL=( 4.0) - L=(00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) - (U COMP 0-1 KM SHEAR ) SCAL=( 4.0) - L=(00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) - (V COMP 0-1 KM SHEAR ) SCAL=( 4.0) - L=(00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) - (U COMP 0-6 KM SHEAR ) SCAL=( 4.0) - L=(00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) - (V COMP 0-6 KM SHEAR ) SCAL=( 4.0) - L=(00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) - (SFC WIND GUST ) SCAL=( 3.0) - L=(10000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) - (AVE OUTGO TOA SW RAD) SCAL=( 4.0) - L=(00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) - (AVE OUTGO TOA LW RAD) SCAL=( 4.0) - L=(00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) - (INSTN OUT TOA LW RAD) SCAL=( 3.0) - L=(10000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) - (TOTAL CLD FRACTION ) SCAL=( 3.0) - L=(10000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) - (TOTAL COLUMN CLD WTR) SCAL=( 5.0) - L=(10000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) - (TOTAL COLUMN CLD ICE) SCAL=( 5.0) - L=(10000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) - (TOTAL COLUMN RAIN ) SCAL=( 5.0) - L=(10000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) - (TOTAL COLUMN SNOW ) SCAL=( 5.0) - L=(10000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) - (TOTAL COL CONDENSATE) SCAL=( 5.0) - L=(10000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) - (TOTAL COLD LIQUID ) SCAL=( 5.0) - L=(00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) - (TOTAL MELTING ICE ) SCAL=( 5.0) - L=(00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) - (CEILING ) SCAL=( 5.0) - L=(10000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) - (EMISSIVITY ) SCAL=( 4.0) - L=(00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) - (GOES TB - CH 2 ) SCAL=( 4.0) - L=(00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) - (GOES TB - CH 3 ) SCAL=( 4.0) - L=(00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) - (GOES TB - CH 4 ) SCAL=( 4.0) - L=(00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) - (GOES TB - CH 5 ) SCAL=( 4.0) - L=(00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) - (PV ON THETA SFCS ) SCAL=( 4.0) - L=(10000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) -***DONE WITH THIS GRID*** - diff --git a/scripts/exgdas_atmos_nceppost.sh b/scripts/exgdas_atmos_nceppost.sh index 0faec53c6..dc7b12698 100755 --- a/scripts/exgdas_atmos_nceppost.sh +++ b/scripts/exgdas_atmos_nceppost.sh @@ -16,6 +16,9 @@ echo " Feb 18 - Meng - Removed legacy setting for generating grib1 data" echo " and reading sigio model outputs." echo " Aug 20 - Meng - Remove .ecf extentsion per EE2 review." echo " Sep 20 - Meng - Update clean up files per EE2 review." +echo " Mar 21 - Meng - Update POSTGRB2TBL default setting." +echo " Oct 21 - Meng - Remove jlogfile for wcoss2 transition." +echo " Feb 22 - Lin - Exception handling if anl input not found." echo "-----------------------------------------------------" ##################################################################### @@ -24,7 +27,7 @@ set -x cd $DATA msg="HAS BEGUN on `hostname`" -postmsg "$jlogfile" "$msg" +postmsg "$msg" export POSTGPSH=${POSTGPSH:-$USHgfs/gfs_nceppost.sh} export GFSDOWNSH=${GFSDOWNSH:-$USHgfs/fv3gfs_downstream_nems.sh} @@ -176,6 +179,11 @@ then fi rm pgbfile.grib2 +else + #### atmanl file not found need failing job + echo " *** FATAL ERROR: No model anl file output " + export err=9 + err_chk fi #---------------------------------- @@ -221,7 +229,7 @@ do set -x msg="Starting post for fhr=$fhr" - postmsg "$jlogfile" "$msg" + postmsg "$msg" ############################### # Put restart files into /nwges diff --git a/scripts/exgfs_atmos_nceppost.sh b/scripts/exgfs_atmos_nceppost.sh index 199c1dc1f..500bc1cfb 100755 --- a/scripts/exgfs_atmos_nceppost.sh +++ b/scripts/exgfs_atmos_nceppost.sh @@ -25,6 +25,12 @@ echo " Feb 18 - Meng - Removed legacy setting for generating grib1 data" echo " and reading sigio model outputs." echo " Aug 20 - Meng - Remove .ecf extentsion per EE2 review." echo " Sep 20 - Meng - Update clean up files per EE2 review." +echo " Dec 20 - Meng - Add alert for special data file." +echo " Mar 21 - Meng - Update POSTGRB2TBL default setting." +echo " Jun 21 - Mao - Instead of err_chk, catch err and print out" +echo " WAFS failure warnings to avoid job crashing" +echo " Oct 21 - Meng - Remove jlogfile for wcoss2 transition." +echo " Feb 22 - Lin - Exception handling if anl input not found." echo "-----------------------------------------------------" ##################################################################### @@ -34,7 +40,7 @@ cd $DATA # specify model output format type: 4 for nemsio, 3 for sigio msg="HAS BEGUN on `hostname`" -postmsg "$jlogfile" "$msg" +postmsg "$msg" export POSTGPSH=${POSTGPSH:-$USHgfs/gfs_nceppost.sh} export GFSDOWNSH=${GFSDOWNSH:-$USHgfs/fv3gfs_downstream_nems.sh} @@ -75,7 +81,7 @@ export machine=${machine:-WCOSS_C} ########################### # Specify Output layers ########################### -export POSTGPVARS="KPO=57,PO=1000.,975.,950.,925.,900.,875.,850.,825.,800.,775.,750.,725.,700.,675.,650.,625.,600.,575.,550.,525.,500.,475.,450.,425.,400.,375.,350.,325.,300.,275.,250.,225.,200.,175.,150.,125.,100.,70.,50.,40.,30.,20.,15.,10.,7.,5.,3.,2.,1.,0.7,0.4,0.2,0.1,0.07,0.04,0.02,0.01," +export POSTGPVARS="KPO=57,PO=1000.,975.,950.,925.,900.,875.,850.,825.,800.,775.,750.,725.,700.,675.,650.,625.,600.,575.,550.,525.,500.,475.,450.,425.,400.,375.,350.,325.,300.,275.,250.,225.,200.,175.,150.,125.,100.,70.,50.,40.,30.,20.,15.,10.,7.,5.,3.,2.,1.,0.7,0.4,0.2,0.1,0.07,0.04,0.02,0.01,rdaod=.true.," ########################################################## # Specify variable to directly output pgrb2 files for GDAS/GFS @@ -201,31 +207,40 @@ then export PGIOUT=wafsifile $POSTGPSH - export err=$?; err_chk + export err=$? - # WAFS package doesn't process this part. - # Need to be saved for WAFS U/V/T verification, - # resolution higher than WAFS 1.25 deg for future compatibility - wafsgrid="latlon 0:1440:0.25 90:721:-0.25" - $WGRIB2 $PGBOUT -set_grib_type same -new_grid_winds earth \ + if [ $err -ne 0 ] ; then + echo " *** GFS POST WARNING: WAFS output failed for analysis, err=$err" + else + + # WAFS package doesn't process this part. + # Need to be saved for WAFS U/V/T verification, + # resolution higher than WAFS 1.25 deg for future compatibility + wafsgrid="latlon 0:1440:0.25 90:721:-0.25" + $WGRIB2 $PGBOUT -set_grib_type same -new_grid_winds earth \ -new_grid_interpolation bilinear -set_bitmap 1 \ -new_grid $wafsgrid ${PGBOUT}.tmp - if test $SENDCOM = "YES" - then + if test $SENDCOM = "YES" + then cp ${PGBOUT}.tmp $COMOUT/${PREFIX}wafs.0p25.anl $WGRIB2 -s ${PGBOUT}.tmp > $COMOUT/${PREFIX}wafs.0p25.anl.idx - if [ $SENDDBN = YES ]; then - $DBNROOT/bin/dbn_alert MODEL GFS_WAFS_GB2 $job $COMOUT/${PREFIX}wafs.0p25.anl - $DBNROOT/bin/dbn_alert MODEL GFS_WAFS_GB2__WIDX $job $COMOUT/${PREFIX}wafs.0p25.anl.idx - fi +# if [ $SENDDBN = YES ]; then +# $DBNROOT/bin/dbn_alert MODEL GFS_WAFS_GB2 $job $COMOUT/${PREFIX}wafs.0p25.anl +# $DBNROOT/bin/dbn_alert MODEL GFS_WAFS_GB2__WIDX $job $COMOUT/${PREFIX}wafs.0p25.anl.idx +# fi + fi + rm $PGBOUT ${PGBOUT}.tmp fi - rm $PGBOUT ${PGBOUT}.tmp fi fi ########################## WAFS U/V/T analysis end ########################## - +else + #### atmanl file not found need failing job + echo " *** FATAL ERROR: No model anl file output " + export err=9 + err_chk fi #---------------------------------- @@ -273,7 +288,7 @@ do set -x msg="Starting post for fhr=$fhr" - postmsg "$jlogfile" "$msg" + postmsg "$msg" ############################### # Put restart files into /nwges @@ -487,6 +502,10 @@ do mv goesfile $COMOUT/${SPECIALFL}f$fhr mv goesifile $COMOUT/${SPECIALFLIDX}f$fhr + if [ $SENDDBN = YES ]; then + $DBNROOT/bin/dbn_alert MODEL GFS_SPECIAL_GB2 $job $COMOUT/${SPECIALFL}f$fhr + fi + fi fi # end of satellite processing @@ -523,16 +542,20 @@ do $POSTGPSH fi - export err=$?; err_chk - - if [ -e $PGBOUT ] - then - if test $SENDCOM = "YES" - then - cp $PGBOUT $COMOUT/${PREFIX}wafs.grb2f$fhr - cp $PGIOUT $COMOUT/${PREFIX}wafs.grb2if$fhr - fi - fi + export err=$? + + if [ $err -ne 0 ] ; then + echo " *** GFS POST WARNING: WAFS output failed for f${fhr}, err=$err" + else + if [ -e $PGBOUT ] + then + if test $SENDCOM = "YES" + then + cp $PGBOUT $COMOUT/${PREFIX}wafs.grb2f$fhr + cp $PGIOUT $COMOUT/${PREFIX}wafs.grb2if$fhr + fi + fi + fi fi [[ -f wafsfile ]] && rm wafsfile ; [[ -f wafsifile ]] && rm wafsifile fi diff --git a/scripts/exglobal_atmos_pmgr.sh b/scripts/exglobal_atmos_pmgr.sh index 58784241c..a9bcb4251 100755 --- a/scripts/exglobal_atmos_pmgr.sh +++ b/scripts/exglobal_atmos_pmgr.sh @@ -67,7 +67,7 @@ do sleep 10 icnt=$((icnt + 1)) - if [ $icnt -ge 1001 ] + if [ $icnt -ge 1080 ] then msg="ABORTING after 3 hours of waiting for ${RUN} FCST hours $postjobs." err_exit $msg diff --git a/scripts/run_upp b/scripts/run_upp index a9589391f..39cc9a986 100755 --- a/scripts/run_upp +++ b/scripts/run_upp @@ -22,6 +22,10 @@ set -x # October 2020: Modified to remove WRF and grib1; Add FV3LAM # Updates for cmake build, Change exec name # +# May 2022: Modified to remove binarynemsiompiio; +# Added netcdfpara; Removed netcdf; +# Changed UPP directory name and path +# #-------------------------------------------------------- # # This script runs the stand-alone community version of UPP @@ -31,11 +35,11 @@ set -x #---------------------------------------------------------------------------------- #--- USER EDIT DESCIPTIONS -------------------------------------------------------- # See UPP User's Guide for more information -# https://upp.readthedocs.io/en/ufs-v2.0.0/ +# https://upp.readthedocs.io/en/latest/ #---------------------------------------------------------------------------------- # TOP_DIR : Top level directory for building and running UPP # DOMAINPATH : Working directory for this run. -# UNIPOST_HOME : Location of the EMC-post directory +# UPP_HOME : Location of the UPP directory # POSTEXEC : Location of the UPP executable # modelDataPath : Location of the model output data files to be post-processed # txtCntrlFile : Name and location of the flat text file that lists desired fields for output @@ -44,8 +48,8 @@ set -x # LAM (Limited Area Model): postxconfig-NT-fv3lam.txt # model : What model is used? GFS or LAM (Limited Area Model) # inFormat : Format of the model data -# GFS - "binarynemsiompiio" or "netcdf" -# LAM - "netcdf" +# GFS - "netcdfpara" +# LAM - "netcdfpara" # outFormat : Format of output from UPP # grib2 # startdate : Forecast start date (YYYYMMDDHH) @@ -64,8 +68,8 @@ set -x # as recommended in the users guide where UPP will output. export TOP_DIR=/home/username export DOMAINPATH=${TOP_DIR}/test_case -export UNIPOST_HOME=${TOP_DIR}/EMC_post -export POSTEXEC=${UNIPOST_HOME}/bin +export UPP_HOME=${TOP_DIR}/UPP +export POSTEXEC=${UPP_HOME}/tests/install/bin export modelDataPath=/path/to/model/data export txtCntrlFile=${DOMAINPATH}/parm/postxconfig-NT-GFS.txt @@ -73,7 +77,7 @@ export txtCntrlFile=${DOMAINPATH}/parm/postxconfig-NT-GFS.txt export model="GFS" # Set input format from model and ouput format from UPP -export inFormat="netcdf" +export inFormat="netcdfpara" export outFormat="grib2" # Set date/time information @@ -92,9 +96,6 @@ export RUN_COMMAND="mpirun -np 1 ${POSTEXEC}/upp.x " #export RUN_COMMAND="mpirun.lsf ${POSTEXEC}/upp.x " #export RUN_COMMAND="mpiexec_mpt ${POSTEXEC}/upp.x " -# DEBUG command example found further below, search "DEBUG" - - # Shouldn't need to edit these. # tmmark is an variable used as the file extention of the output # filename .GrbF is used if this variable is not set @@ -135,17 +136,17 @@ else fi if [ ${model} == "GFS" ]; then - if [[ ${inFormat} == "binarynemsiompiio" ]]; then - echo "Check: You are using 'model' 'inFormat'!" - elif [[ ${inFormat} == "netcdf" ]]; then + if [ ${inFormat} == "netcdfpara" ]; then echo "Check: You are using 'model' 'inFormat'!" else - echo "ERROR: 'inFormat' must be 'binarynemsiompiio' or 'netcdf' for GFS model output. Exiting... " + echo "ERROR: 'inFormat' must be 'netcdfpara' for GFS model output. Exiting... " exit 1 fi -elif [[ ${model} == "LAM" ]]; then - if [[ ${inFormat} != "netcdf" ]]; then - echo "ERROR: 'inFormat' must be 'netcdf' for LAM model output. Exiting... " +elif [ ${model} == "LAM" ]; then + if [ ${inFormat} == "netcdfpara" ]; then + echo "Check: You are using 'model' 'inFormat'!" + else + echo "ERROR: 'inFormat' must be 'netcdfpara' for LAM model output. Exiting... " exit 1 fi fi @@ -194,17 +195,17 @@ fi # file which defines the GRIB2 table values if [[ ${outFormat} == "grib2" ]]; then ln -fs ${txtCntrlFile} postxconfig-NT.txt - ln -fs ${UNIPOST_HOME}/parm/post_avblflds.xml post_avblflds.xml - ln -fs ${UNIPOST_HOME}/parm/params_grib2_tbl_new params_grib2_tbl_new + ln -fs ${UPP_HOME}/parm/post_avblflds.xml post_avblflds.xml + ln -fs ${UPP_HOME}/parm/params_grib2_tbl_new params_grib2_tbl_new fi # Link microphysics tables - code will use based on mp_physics option # found in data -ln -fs ${UNIPOST_HOME}/parm/nam_micro_lookup.dat . -ln -fs ${UNIPOST_HOME}/parm/hires_micro_lookup.dat . +ln -fs ${UPP_HOME}/parm/nam_micro_lookup.dat . +ln -fs ${UPP_HOME}/parm/hires_micro_lookup.dat . # link coefficients for crtm2 (simulated synthetic satellites) -CRTMDIR=${UNIPOST_HOME}/crtm/fix +CRTMDIR=${UPP_HOME}/crtm/fix ln -fs $CRTMDIR/EmisCoeff/IR_Water/Big_Endian/Nalli.IRwater.EmisCoeff.bin ./ ln -fs $CRTMDIR/EmisCoeff/MW_Water/Big_Endian/FASTEM4.MWwater.EmisCoeff.bin ./ ln -fs $CRTMDIR/EmisCoeff/MW_Water/Big_Endian/FASTEM5.MWwater.EmisCoeff.bin ./ @@ -289,17 +290,14 @@ echo 'YY' $YY # Create model file name (inFileName) if [ ${model} == "GFS" ]; then - if [[ ${inFormat} == "binarynemsiompiio" ]]; then - inFileName=${modelDataPath}/atmf${fhour}.nemsio - flxFileName=${modelDataPath}/sfcf${fhour}.nemsio - elif [ ${inFormat} == "netcdf" ]; then - inFileName=${modelDataPath}/atmf${fhour}.nc - flxFileName=${modelDataPath}/sfcf${fhour}.nc + if [ ${inFormat} == "netcdfpara" ]; then + inFileName=${modelDataPath}/gfs.t00z.atmf${fhour}.nc + flxFileName=${modelDataPath}/gfs.t00z.sfcf${fhour}.nc fi elif [ ${model} == "LAM" ]; then - if [ ${inFormat} == "netcdf" ]; then + if [ ${inFormat} == "netcdfpara" ]; then inFileName=${modelDataPath}/dynf${fhour}.nc - flxFileName=${modelDataPath}/dynf${fhour}.nc + flxFileName=${modelDataPath}/phyf${fhour}.nc fi fi @@ -323,13 +321,15 @@ fi if [[ ${outFormat} == "grib2" ]]; then if [[ ${model} == "GFS" || ${model} == "LAM" ]]; then cat > itag < is not used. EPV computation is not available for current +!> NCEP/EMC models(NAM, WRF, RSM), so EPV is also not +!> used. +!> +!> @param[in] T1 TEMPERATURE (K) +!> @param[in] RH RELATIVE HUMIDITY (DECIMAL FORM) +!> @param[in] OMGA Vertical velocity (Pa/sec) +!> @param[inout] ICING ICING CONDITION (1 or 0) +!> +!> @author Binbin Zhou NCEP/EMC @date 2005-08-16 SUBROUTINE CALICING (T1,RH,OMGA, ICING) !$$$ SUBPROGRAM DOCUMENTATION BLOCK ! . . . @@ -196,20 +203,20 @@ SUBROUTINE CALICING (T1,RH,OMGA, ICING) ! MACHINE : BLUE AT NCEP !$$$ ! - use ctlblk_mod, only: jsta, jend, im, spval + use ctlblk_mod, only: jsta, jend, im, spval, ista, iend !- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - implicit none ! ! DECLARE VARIABLES. ! - REAL, DIMENSION(IM,jsta:jend), INTENT(IN) :: T1,RH,OMGA - REAL, DIMENSION(IM,jsta:jend), INTENT(INOUT) :: ICING + REAL, DIMENSION(ista:iend,jsta:jend), INTENT(IN) :: T1,RH,OMGA + REAL, DIMENSION(ista:iend,jsta:jend), INTENT(INOUT) :: ICING integer I,J !*************************************************************** ! ! DO J=JSTA,JEND - DO I=1,IM + DO I=ISTA,IEND IF(OMGA(I,J)= 251.0) & @@ -228,56 +235,36 @@ SUBROUTINE CALICING (T1,RH,OMGA, ICING) RETURN END +!> Computes Clear Air Turbulence Index +!> +!> This program computes the Clear Air Turbulence condition which is +!> expressed as Index with Ellrod Algorithm (Gary P. Ellrod: Wea. and +!> Forecast,1992) and Ri number suggested by S. Silberberg of AWC. But Ri +!> number is still not classified into 3 level CAT, so current version +!> does not use Ri as suggested by S. Silberberg. +!> +!> PROGRAM HISTORY LOG: +!> - 05-09-19 H CHUANG - MODIFIED TO COMPUTE GRADIENTS FOR BOTH A AND E GRIDS +!> +!> According to Ellrod, the CAT is classied into 3 levels (index): +!> - Light: CAT = 1 +!> - Middle: CAT = 2 +!> - Severe: CAT = 3 +!> - No CAT: CAT = 0 +!> +!> @param[in] U U wind profile (m/s) (at pressure level) +!> @param[in] V V wind (m/s) (at pressure level) +!> @param[in] H Height (m) (at pressure level) +!> @param[in] U_OLD U wind profile (m/s) (at pressure level) +!> @param[in] V_OLD V wind (m/s) (at pressure level) +!> @param[in] H_OLD Height (m) (at pressure level) +!> @param[inout] CAT CAT Index +!> +!> @author Binbin Zhou NCEP/EMC @date 2005-08-16 SUBROUTINE CALCAT(U,V,H,U_OLD,V_OLD,H_OLD,CAT) -!$$$ SUBPROGRAM DOCUMENTATION BLOCK -! . . . -! SUBPROGRAM: CALCAT COMPUTES Clear Air Turbulence Index -! PRGRMMR: Binbin Zhou /NCEP/EMC DATE: 2005-08-16 -! -! ABSTRACT: -! This program computes the Clear Air Turbulence condition -! which is expressed as Index with Ellrod Algorithm -! (Gary P. Ellrod: Wea. and Forecast,1992) and Ri number -! suggested by S. Silberberg of AWC. But Ri number is still -! not classified into 3 level CAT, so current version does -! not use Ri as suggested by S. Silberberg -! -! PROGRAM HISTORY LOG: -! -! 05-09-19 H CHUANG - MODIFIED TO COMPUTE GRADIENTS FOR BOTH A AND E GRIDS -! -! -! According to Ellrod, the CAT is classied into 3 levels (index) -! Light: CAT = 1 -! Middle: CAT = 2 -! Severe: CAT = 3 -! No CAT: CAT = 0 -! -! USAGE: CALL CALCAT(U,V,H,L,CAT) -! INPUT ARGUMENT LIST: -! U - U wind profile (m/s) (at pressure level) -! V - V wind (m/s) (at pressure level) -! H - Height (m) (at pressure level) -! L - # of pressure level -! -! OUTPUT ARGUMENT LIST: -! CAT - CAT Index -! -! OUTPUT FILES: -! NONE -! -! SUBPROGRAMS CALLED: -! UTILITIES: -! LIBRARY: -! NONE -! -! ATTRIBUTES: -! LANGUAGE: FORTRAN 90/77 -! MACHINE : BLUE AT NCEP -!$$$ use masks, only: dx, dy use ctlblk_mod, only: spval, jsta_2l, jend_2u, jsta_m, jend_m, & - im, jm + im, jm, ista_2l, iend_2u, ista_m, iend_m, ista, iend use gridspec_mod, only: gridtype ! !- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - @@ -286,10 +273,10 @@ SUBROUTINE CALCAT(U,V,H,U_OLD,V_OLD,H_OLD,CAT) ! ! DECLARE VARIABLES. ! - REAL,DIMENSION(IM,jsta_2l:jend_2u),INTENT(IN) :: U,V,H, & + REAL,DIMENSION(ista_2l:iend_2u,jsta_2l:jend_2u),INTENT(IN) :: U,V,H, & U_OLD,V_OLD,H_OLD ! INTEGER,INTENT(IN) :: L - REAL,DIMENSION(IM,jsta_2l:jend_2u),INTENT(INOUT) :: CAT + REAL,DIMENSION(ista_2l:iend_2u,jsta_2l:jend_2u),INTENT(INOUT) :: CAT REAL DSH, DST, DEF, CVG, VWS, TRBINDX INTEGER IHE(JM),IHW(JM) @@ -305,22 +292,22 @@ SUBROUTINE CALCAT(U,V,H,U_OLD,V_OLD,H_OLD,CAT) IF(GRIDTYPE == 'A')THEN IHW(J)=-1 IHE(J)=1 - ISTART=2 - ISTOP=IM-1 + ISTART=ISTA_M + ISTOP=IEND_M JSTART=JSTA_M JSTOP=JEND_M ELSE IF(GRIDTYPE=='E')THEN IHW(J)=-MOD(J,2) IHE(J)=IHW(J)+1 - ISTART=2 - ISTOP=IM-1 + ISTART=ISTA_M + ISTOP=IEND_M JSTART=JSTA_M JSTOP=JEND_M ELSE IF(GRIDTYPE=='B')THEN IHW(J)=-1 IHE(J)=0 - ISTART=2 - ISTOP=IM-1 + ISTART=ISTA_M + ISTOP=IEND_M JSTART=JSTA_M JSTOP=JEND_M ELSE @@ -329,12 +316,12 @@ SUBROUTINE CALCAT(U,V,H,U_OLD,V_OLD,H_OLD,CAT) END IF ENDDO - call exch_f(U) - call exch_f(V) - call exch_f(U_OLD) - call exch_f(V_OLD) - call exch_f(H) - call exch_f(H_OLD) + call exch(U) + call exch(V) + call exch(U_OLD) + call exch(V_OLD) + call exch(H) + call exch(H_OLD) DO 100 J=JSTART,JSTOP DO I=ISTART,ISTOP @@ -494,57 +481,35 @@ SUBROUTINE CALCAT(U,V,H,U_OLD,V_OLD,H_OLD,CAT) RETURN END - +!> Computes ceiling. +!> +!> This program computes the ceiling. Definition: Ceiling is the cloud +!> base height for cloud fraction > 50% The cloud base is from sea level +!> in the model, while ceiling is from surface. If no ceiling, set +!> ceiling height = 20000 m +!> +!> @param[in] CLDZ CLOUD BASE HEIGHT from sea level(M) +!> @param[in] TCLD TOTAL CLOUD FRACTION (%) +!> @param[inout] CEILING CEILING HEIGHT from surface (m) +!> +!> @author Binbin Zhou NCEP/EMC @date 2005-08-18 SUBROUTINE CALCEILING (CLDZ,TCLD,CEILING) -!$$$ SUBPROGRAM DOCUMENTATION BLOCK -! . . . -! SUBPROGRAM: CALCEILING COMPUTES Ceiling -! PRGRMMR: Binbin Zhou /NCEP/EMC DATE: 2005-08-18 -! -! ABSTRACT: -! This program computes the ceiling -! Definition: Ceiling is the cloud base height for cloud fraction > 50% -! The cloud base is from sea level in the model, while ceiling -! is from surface. If no ceiling, set ceiling height = 20000 m -! -! USAGE: CALL CALCEILING (CLDZ,TCLD,CEILING) -! INPUT ARGUMENT LIST: -! CLDZ - CLOUD BASE HEIGHT from sea level(M) -! TCLD - TOTAL CLOUD FRACTION (%) -! -! OUTPUT ARGUMENT LIST: -! CEILING - CEILING HEIGHT from surface (m) -! -! OUTPUT FILES: -! NONE -! -! SUBPROGRAMS CALLED: -! UTILITIES: -! LIBRARY: -! NONE -! -! ATTRIBUTES: -! LANGUAGE: FORTRAN 90/77 -! MACHINE : BLUE AT NCEP -!$$$ -! - USE vrbls2d, only: fis use params_mod, only: small, gi - use ctlblk_mod, only: jsta, jend, spval, im, modelname + use ctlblk_mod, only: jsta, jend, spval, im, modelname, ista, iend !- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - implicit none ! ! DECLARE VARIABLES. ! - REAL, DIMENSION(IM,jsta:jend), INTENT(IN) :: CLDZ, TCLD - REAL, DIMENSION(IM,jsta:jend), INTENT(INOUT) :: CEILING + REAL, DIMENSION(ista:iend,jsta:jend), INTENT(IN) :: CLDZ, TCLD + REAL, DIMENSION(ista:iend,jsta:jend), INTENT(INOUT) :: CEILING integer I,J !*************************************************************** ! ! DO J=JSTA,JEND - DO I=1,IM + DO I=ISTA,IEND IF(ABS(TCLD(I,J)-SPVAL) <= SMALL) THEN CEILING(I,J)=SPVAL ELSE IF(TCLD(I,J) >= 50.) THEN @@ -565,54 +530,33 @@ SUBROUTINE CALCEILING (CLDZ,TCLD,CEILING) RETURN END - +!> Computes Ceiling. +!> +!> This program computes the flight condition restriction +!> which is defined as follow (NOAA/NWS/Instruction for TAF, 2004): +!> +!> Ceiling(feet)| Visibility(miles) | FLTCND +!> -------------|-------------------|------- +!> LIFR | < 200 and/or < 1 | 1 +!> IFR | >= 500 to < 1000 and/or >=1 to < 3 | 2 +!> MVFR | >=1000 to <= 3000 and/or >=3 to <= 5| 3 +!> VFR | > 3000 > 5 | 5 +!> +!> @param[in] CEILING - CEILING HEIGHT from surface (m) NOTE: VIS - +!> Visibility is passed through COMMON /VISB/ +!> @param[inout] FLTCND - FLIGHT CONDITION CATERGORY +!> +!> @author Binbin Zhou NCEP/EMC @date 2005-08-18 SUBROUTINE CALFLTCND (CEILING,FLTCND) -!$$$ SUBPROGRAM DOCUMENTATION BLOCK -! . . . -! SUBPROGRAM: CALFLTCND COMPUTES Ceiling -! PRGRMMR: Binbin Zhou /NCEP/EMC DATE: 2005-08-18 -! -! ABSTRACT: -! This program computes the flight condition restriction -! which is defined as follow (NOAA/NWS/Instruction for TAF, 2004): -! -! Ceiling(feet) Visibility(miles) FLTCND -! LIFR < 200 and/or < 1 1 -! IFR >= 500 to < 1000 and/or >=1 to < 3 2 -! MVFR >=1000 to <= 3000 and/or >=3 to <= 5 3 -! VFR > 3000 > 5 5 -! -! -! USAGE: CALL CALFLTCND(CEILING,FLTCND) -! INPUT ARGUMENT LIST: -! CEILING - CEILING HEIGHT from surface (m) -! NOTE: VIS - Visibility is passed through COMMON /VISB/ -! -! OUTPUT ARGUMENT LIST: -! FLTCND - FLIGHT CONDITION CATERGORY -! -! OUTPUT FILES: -! NONE -! -! SUBPROGRAMS CALLED: -! UTILITIES: -! LIBRARY: -! NONE -! -! ATTRIBUTES: -! LANGUAGE: FORTRAN 90/77 -! MACHINE : BLUE AT NCEP -!$$$ -! use vrbls2d, only: vis - use ctlblk_mod, only: jsta, jend, im, spval + use ctlblk_mod, only: jsta, jend, im, spval, ista, iend !- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - implicit none ! ! DECLARE VARIABLES. ! - REAL, DIMENSION(IM,jsta:jend), INTENT(IN) :: CEILING - REAL, DIMENSION(IM,jsta:jend), INTENT(INOUT) :: FLTCND + REAL, DIMENSION(ista:iend,jsta:jend), INTENT(IN) :: CEILING + REAL, DIMENSION(ista:iend,jsta:jend), INTENT(INOUT) :: FLTCND REAL CEIL,VISI integer I,J ! @@ -620,7 +564,7 @@ SUBROUTINE CALFLTCND (CEILING,FLTCND) ! ! DO J=JSTA,JEND - DO I=1,IM + DO I=ISTA,IEND IF(CEILING(I,J) feet diff --git a/sorc/ncep_post.fd/AllGETHERV_GSD.f b/sorc/ncep_post.fd/AllGETHERV_GSD.f index ae7e64021..63aef1f8d 100644 --- a/sorc/ncep_post.fd/AllGETHERV_GSD.f +++ b/sorc/ncep_post.fd/AllGETHERV_GSD.f @@ -9,8 +9,9 @@ SUBROUTINE AllGETHERV(GRID1) ! ! PROGRAM HISTORY LOG: ! +! 21-09-02 Bo Cui - Decompose UPP in X direction - use ctlblk_mod, only : im,jm,num_procs,me,jsta,jend,mpi_comm_comp + use ctlblk_mod, only : im,jm,num_procs,me,jsta,jend,ista,iend,mpi_comm_comp implicit none @@ -22,11 +23,11 @@ SUBROUTINE AllGETHERV(GRID1) REAL GRID1(IM,JM) REAL ibufrecv(IM*JM) - REAL ibufsend(im*(jend-jsta+1)) + REAL ibufsend((iend-ista+1)*(jend-jsta+1)) integer SENDCOUNT,RECVCOUNTS(num_procs),DISPLS(num_procs) ! ! write(*,*) 'check mpi', im,jm,num_procs,me,jsta,jend - SENDCOUNT=im*(jend-jsta+1) + SENDCOUNT=(iend-ista+1)*(jend-jsta+1) call MPI_ALLGATHER(SENDCOUNT, 1, MPI_INTEGER, RECVCOUNTS,1 , & MPI_INTEGER, mpi_comm_comp, ierr) DISPLS(1)=0 @@ -40,7 +41,7 @@ SUBROUTINE AllGETHERV(GRID1) ij=0 ibufsend=0.0 do j=jsta,jend - do i=1,IM + do i=ista,iend ij=ij+1 ibufsend(ij)=GRID1(i,j) enddo diff --git a/sorc/ncep_post.fd/BNDLYR.f b/sorc/ncep_post.fd/BNDLYR.f index f78c2f08b..72e4cb950 100644 --- a/sorc/ncep_post.fd/BNDLYR.f +++ b/sorc/ncep_post.fd/BNDLYR.f @@ -1,69 +1,50 @@ !> @file +!> @brief Subroutine that computes boundary layer fields. ! +!> Computes constant mass mean fields !> -!! -!! SUBPROGRAM: BNDLYR COMPUTES CONSTANT MASS MEAN FIELDS -!! PRGRMMR: TREADON ORG: W/NP2 DATE: 93-01-29 -!! -!! ABSTRACT: THIS ROUTINE COMPUTES CONSTANT MASS (BOUNDARY LAYER) -!! FIELDS. THE FIELDS ARE A MEAN OVER LAYERS PARAMETER DPBND -!! (PASCALS) THICK. THERE ARE NBND CONSTANT MASS LAYERS, EACH -!! DPBND THICK STARTING FROM THE SURFACE UP. COMPUTED BOUNDARY -!! LAYER FIELDS ARE PRESSURE, TEMPERATURE, SPECIFIC HUMIDITY, -!! RELATIVE HUMIDITY, U AND V WINDS, VERTICAL VELOCITY, -!! AND PRECIPITABLE WATER. GIVEN THESE FUNDAMENTAL VARIABLES -!! OTHER FIELDS MAY BE COMPUTED. -!! -!! ***WARNING*** IF YOU CHANGE PARAMETER NBND IN THIS ROUTINE -!! DON'T FOREGET TO CHANGE IT ALSO IN THE CALLING -!! SUBPROGRAM, MISCLN. -!! -!! PROGRAM HISTORY LOG: -!! 93-01-29 RUSS TREADON -!! 93-05-07 RUSS TREADON - ADDED DOC BLOCK AND MORE COMMENTS. -!! 93-06-19 RUSS TREADON - ADDED LVLBND TO PARAMETER LIST. -!! 96-03-07 MIKE BALDWIN - CHANGE PWTR CALC TO INCLUDE CLD WTR -!! SPEED UP CODE -!! 98-06-16 T BLACK - CONVERSION FROM 1-D TO 2-D -!! 98-08-18 MIKE BALDWIN - CHANGE QSBND TO RHBND IN CALL, -!! COMPUTE RH OVER ICE -!! 98-12-22 MIKE BALDWIN - BACK OUT RH OVER ICE -!! 00-01-04 JIM TUCCILLO - MPI VERSION -!! 02-01-15 MIKE BALDWIN - WRF VERSION -!! 20-11-10 JESSE MENG - USE UPP_PHYSICS MODULE -!! 21-04-01 JESSE MENG - COMPUTATION ON DEFINED POINTS ONLY -!! -!! USAGE: CALL BNDLYR(PBND,TBND,QBND,RHBND,UBND,VBND, -!! WBND,OMGBND,PWTBND,QCNVBND) -!! -!! INPUT ARGUMENT LIST: -!! NONE -!! -!! OUTPUT ARGUMENT LIST: -!! PBND - LAYER MEAN PRESSURE IN NBND BOUNDARY LAYERS (NBL). -!! TBND - LAYER MEAN TEMPERATURE IN NBL. -!! QBND - LAYER MEAN SPECIFIC HUMIDITY IN NBL. -!! RHBND - LAYER MEAN RELATIVE HUM. (QBND/QSBND) IN NBL. -!! UBND - LAYER MEAN U WIND COMPONENT IN NBL. -!! VBND - LAYER MEAN V WIND COMPONENT IN NBL. -!! WBND - LAYER MEAN W WIND COMPONENT IN NBL. -!! OMGBND - LAYER MEAN VERTICAL VELOCITY IN NBL. -!! PWTBND - LAYER PRECIPITABLE WATER IN NBL. -!! LVLBND - ETA LAYER AT MIDPOINT OF NBL. -!! QCNVBND - LAYER MOISTURE CONVERGENCE IN NBL. -!! -!! OUTPUT FILES: -!! NONE -!! -!! SUBPROGRAMS CALLED: -!! UTILITIES: -!! -!! LIBRARY: -!! -!! ATTRIBUTES: -!! LANGUAGE: FORTRAN 90 -!! MACHINE : CRAY C-90 -!! +!> This routine computes constant mass (boundary layer) +!> fields. The fields are a mean over layers parameter DPBND +!> (pascals) thick. There are NBND constant mass layers, each +!> DPBND thick starting from the surface up. Computed boundary +!> layer fields are pressure, temperature, specific humidity, +!> relative humidity, U and V winds, vertical velocity, +!> and precipitable water. Given these fundamental variables +!> other fields may be computed. +!> +!> @note If you change parameter NBND in this routine +!> don't forget to change it also in the calling +!> subprogram, MISCLN. +!> +!> @param[out] PBND - Layer mean pressure in NBND boundary layers (NBL). +!> @param[out] TBND - Layer mean temperature in NBL. +!> @param[out] QBND - Layer mean specific humidity in NBL. +!> @param[out] RHBND - Layer mean relative hum. (QBND/QSBND) in NBL. +!> @param[out] UBND - Layer mean U wind component in NBL. +!> @param[out] VBND - Layer mean V wind component in NBL. +!> @param[out] WBND - Layer mean W wind component in NBL. +!> @param[out] OMGBND - Layer mean vertical velocity in NBL. +!> @param[out] PWTBND - Layer precipitable water in NBL. +!> @param[out] QCNVBND - Layer moisture convergence in NBL. +!> @param[out] LVLBND - ETA layer at midpoint of NBL. +!> +!> Program History +!> - 93-01-29 RUSS TREADON +!> - 93-05-07 RUSS TREADON - ADDED DOC BLOCK AND MORE COMMENTS. +!> - 93-06-19 RUSS TREADON - ADDED LVLBND TO PARAMETER LIST. +!> - 96-03-07 MIKE BALDWIN - CHANGE PWTR CALC TO INCLUDE CLD WTR +!> SPEED UP CODE +!> - 98-06-16 T BLACK - CONVERSION FROM 1-D TO 2-D +!> - 98-08-18 MIKE BALDWIN - CHANGE QSBND TO RHBND IN CALL, +!> COMPUTE RH OVER ICE +!> - 98-12-22 MIKE BALDWIN - BACK OUT RH OVER ICE +!> - 00-01-04 JIM TUCCILLO - MPI VERSION +!> - 02-01-15 MIKE BALDWIN - WRF VERSION +!> - 20-11-10 JESSE MENG - USE UPP_PHYSICS MODULE +!> - 21-08-20 Wen Meng - Retrict computation fro undefined points. +!> - 21-09-02 Bo Cui - Decompose UPP in X direction. +!> +!> @author Russ Treadon W/NP2 @date 1993-01-29 SUBROUTINE BNDLYR(PBND,TBND,QBND,RHBND,UBND,VBND, & WBND,OMGBND,PWTBND,QCNVBND,LVLBND) @@ -73,7 +54,7 @@ SUBROUTINE BNDLYR(PBND,TBND,QBND,RHBND,UBND,VBND, & use masks, only: lmh use params_mod, only: d00, gi, pq0, a2, a3, a4 use ctlblk_mod, only: jsta_2l, jend_2u, lm, jsta, jend, modelname, & - jsta_m, jend_m, im, nbnd, spval + jsta_m, jend_m, im, nbnd, spval, ista_2l, iend_2u, ista_m, iend_m, ista, iend use physcons_post, only: con_rd, con_rv, con_eps, con_epsm1 use gridspec_mod, only: gridtype use upp_physics, only: FPVSNEW @@ -83,12 +64,12 @@ SUBROUTINE BNDLYR(PBND,TBND,QBND,RHBND,UBND,VBND, & ! DECLARE VARIABLES. ! real,PARAMETER :: DPBND=30.E2 - integer, dimension(IM,jsta:jend,NBND),intent(inout) :: LVLBND - real, dimension(IM,jsta:jend,NBND),intent(inout) :: PBND,TBND, & + integer, dimension(ista:iend,jsta:jend,NBND),intent(inout) :: LVLBND + real, dimension(ista:iend,jsta:jend,NBND),intent(inout) :: PBND,TBND, & QBND,RHBND,UBND,VBND,WBND,OMGBND,PWTBND,QCNVBND - REAL Q1D(IM,JSTA_2L:JEND_2U),V1D(IM,JSTA_2L:JEND_2U), & - U1D(IM,JSTA_2L:JEND_2U),QCNV1D(IM,JSTA_2L:JEND_2U) + REAL Q1D(ISTA_2L:IEND_2U,JSTA_2L:JEND_2U),V1D(ISTA_2L:IEND_2U,JSTA_2L:JEND_2U), & + U1D(ISTA_2L:IEND_2U,JSTA_2L:JEND_2U),QCNV1D(ISTA_2L:IEND_2U,JSTA_2L:JEND_2U) ! REAL, ALLOCATABLE :: PBINT(:,:,:),QSBND(:,:,:) REAL, ALLOCATABLE :: PSUM(:,:,:), QCNVG(:,:,:) @@ -101,19 +82,19 @@ SUBROUTINE BNDLYR(PBND,TBND,QBND,RHBND,UBND,VBND, & !***************************************************************************** ! START BNDLYR HERE ! - ALLOCATE (PBINT(IM,JSTA_2L:JEND_2U,NBND+1)) - ALLOCATE (QSBND(IM,JSTA_2L:JEND_2U,NBND)) - ALLOCATE (PSUM(IM,JSTA_2L:JEND_2U,NBND)) - ALLOCATE (QCNVG(IM,JSTA_2L:JEND_2U,LM)) - ALLOCATE (PVSUM(IM,JSTA_2L:JEND_2U,NBND)) - ALLOCATE (NSUM(IM,JSTA_2L:JEND_2U,NBND)) + ALLOCATE (PBINT(ISTA_2L:IEND_2U,JSTA_2L:JEND_2U,NBND+1)) + ALLOCATE (QSBND(ISTA_2L:IEND_2U,JSTA_2L:JEND_2U,NBND)) + ALLOCATE (PSUM(ISTA_2L:IEND_2U,JSTA_2L:JEND_2U,NBND)) + ALLOCATE (QCNVG(ISTA_2L:IEND_2U,JSTA_2L:JEND_2U,LM)) + ALLOCATE (PVSUM(ISTA_2L:IEND_2U,JSTA_2L:JEND_2U,NBND)) + ALLOCATE (NSUM(ISTA_2L:IEND_2U,JSTA_2L:JEND_2U,NBND)) ! ! LOOP OVER HORIZONTAL GRID. AT EACH MASS POINT COMPUTE ! PRESSURE AT THE INTERFACE OF EACH BOUNDARY LAYER. ! !$omp parallel do private(i,j) DO J=JSTA,JEND - DO I=1,IM + DO I=ISTA,IEND PBINT(I,J,1) = PINT(I,J,NINT(LMH(I,J))+1) ENDDO ENDDO @@ -121,7 +102,7 @@ SUBROUTINE BNDLYR(PBND,TBND,QBND,RHBND,UBND,VBND, & DO LBND=2,NBND+1 !$omp parallel do private(i,j) DO J=JSTA,JEND - DO I=1,IM + DO I=ISTA,IEND PBINT(I,J,LBND) = PBINT(I,J,LBND-1) - DPBND ENDDO ENDDO @@ -131,7 +112,7 @@ SUBROUTINE BNDLYR(PBND,TBND,QBND,RHBND,UBND,VBND, & DO L=1,LM !$omp parallel do private(i,j) DO J=JSTA_2L,JEND_2U - DO I=1,IM + DO I=ISTA_2L,IEND_2U Q1D(I,J) = Q(I,J,L) U1D(I,J) = UH(I,J,L) V1D(I,J) = VH(I,J,L) @@ -140,7 +121,7 @@ SUBROUTINE BNDLYR(PBND,TBND,QBND,RHBND,UBND,VBND, & CALL CALMCVG(Q1D,U1D,V1D,QCNV1D) !$omp parallel do private(i,j) DO J=JSTA,JEND - DO I=1,IM + DO I=ISTA,IEND QCNVG(I,J,L)=QCNV1D(I,J) ENDDO ENDDO @@ -156,7 +137,7 @@ SUBROUTINE BNDLYR(PBND,TBND,QBND,RHBND,UBND,VBND, & DO LBND=1,NBND !$omp parallel do private(i,j) DO J=JSTA,JEND - DO I=1,IM + DO I=ISTA,IEND PBND(I,J,LBND) = D00 TBND(I,J,LBND) = D00 QBND(I,J,LBND) = D00 @@ -179,7 +160,7 @@ SUBROUTINE BNDLYR(PBND,TBND,QBND,RHBND,UBND,VBND, & DO L=1,LM !$omp parallel do private(i,j,dp,pm,es,qsat) DO J=JSTA,JEND - DO I=1,IM + DO I=ISTA,IEND ! PM = PMID(I,J,L) IF(PM1.0) THEN RHBND(I,J,LBND) = 1.0 @@ -387,16 +356,13 @@ SUBROUTINE BNDLYR(PBND,TBND,QBND,RHBND,UBND,VBND, & RHBND(I,J,LBND) = 0.01 QBND(I,J,LBND) = RHBND(I,J,LBND)*QSBND(I,J,LBND) ENDIF - ELSE - RHBND(I,J,LBND) = spval - QBND(I,J,LBND) = spval - ENDIF + ENDIF ENDDO ENDDO ! IF(gridtype == 'E')THEN DO J=JSTA_M,JEND_M - DO I=2,IM-1 + DO I=ISTA_M,IEND_M IF(PVSUM(I,J,LBND)==0.)THEN LV = LM PMINV = 9999999. @@ -426,7 +392,7 @@ SUBROUTINE BNDLYR(PBND,TBND,QBND,RHBND,UBND,VBND, & ELSE IF(gridtype=='B')THEN DO J=JSTA_M,JEND_M - DO I=2,IM-1 + DO I=ISTA_M,IEND_M IF(PVSUM(I,J,LBND)==0.)THEN LV=LM PMINV=9999999. diff --git a/sorc/ncep_post.fd/BOUND.f b/sorc/ncep_post.fd/BOUND.f index dc439336d..8c261a073 100644 --- a/sorc/ncep_post.fd/BOUND.f +++ b/sorc/ncep_post.fd/BOUND.f @@ -1,49 +1,35 @@ !> @file -! +!> @brief bound() clips data in passed array. +!> +!> @author Russ Treadon W/NP2 @date 1993-01-18 + +!> This routine bounds data in the passed array +!> FLD (im x jm elements long) and clips data values such +!> that on exiting the routine +!> @code +!> FMIN <= FLD(I,J) <= FMAX +!> @endcode +!> for all points. +!> +!> @param[in] FMIN Lower (inclusive) bound for data. +!> @param[in] FMAX Upper (inclusive) bound for data. +!> @param[out] FLD Array whose elements are bounded by [FMIN,FMAX]. +!> +!> ### Program History Log +!> Date | Programmer | Comments +!> -----|------------|--------- +!> 1993-01-18 | Russ Treadon | Initial +!> 1993-05-07 | Russ Treadon | Added DOCBLOC +!> 1998-05-29 | T Black | Conversion from 1-D to 2-D +!> 2000-01-04 | Jim Tuccillo | MPI Version +!> 2002-04-24 | Mike Baldwin | WRF Version +!> 2021-09002 | Bo Cui | Decompose UPP in X direction !> -!! . . . -!! SUBPROGRAM: BOUND CLIPS DATA IN PASSED ARRAY -!! PRGRMMR: TREADON ORG: W/NP2 DATE: 93-01-18 -!! -!! ABSTRACT: THIS ROUTINE BOUNDS DATA IN THE PASSED ARRAY -!! FLD (IMxJM ELEMENTS LONG) AND CLIPS DATA VALUES SUCH -!! THAT ON EXITING THE ROUTINE -!! FMIN <= FLD(I,J) <= FMAX -!! FOR ALL POINTS. -!! -!! -!! PROGRAM HISTORY LOG: -!! 93-01-18 RUSS TREADON -!! 93-05-07 RUSS TREADON - ADDED DOCBLOC -!! 98-05-29 BLACK - CONVERSION FROM 1-D TO 2-D -!! 00-01-04 JIM TUCCILLO - MPI VERSION -!! 02-04-24 MIKE BALDWIN - WRF VERSION -!! -!! USAGE: CALL bound(fld,fmin,fmax) -!! INPUT ARGUMENT LIST: -!! FMIN - LOWER (INCLUSIVE) BOUND FOR DATA. -!! FMAX - UPPER (INCLUSIVE) BOUND FOR DATA. -!! -!! OUTPUT ARGUMENT LIST: -!! FLD - ARRAY WHOSE ELEMENTS ARE BOUNDED BY [FMIN,FMAX]. -!! -!! OUTPUT FILES: -!! NONE -!! -!! SUBPROGRAMS CALLED: -!! UTILITIES: -!! NONE -!! LIBRARY: -!! NONE -!! -!! ATTRIBUTES: -!! LANGUAGE: FORTRAN 90 -!! MACHINE : CRAY C-90 -!! +!> @author Russ Treadon W/NP2 @date 1993-01-18 SUBROUTINE BOUND(FLD,FMIN,FMAX) ! - use ctlblk_mod, only: jsta, jend, spval, im, jm + use ctlblk_mod, only: jsta, jend, spval, im, jm, ista, iend !- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - implicit none ! @@ -59,7 +45,7 @@ SUBROUTINE BOUND(FLD,FMIN,FMAX) ! BOUND ARRAY. !$omp parallel do private(i,j) DO J=JSTA,JEND - DO I=1,IM + DO I=ISTA,IEND if(fld(i,j) /= spval) then FLD(I,J) = min(FMAX, MAX(FMIN,FLD(I,J))) end if diff --git a/sorc/ncep_post.fd/CALDRG.f b/sorc/ncep_post.fd/CALDRG.f index 88f0d6038..352d6cf59 100644 --- a/sorc/ncep_post.fd/CALDRG.f +++ b/sorc/ncep_post.fd/CALDRG.f @@ -1,42 +1,23 @@ !> @file -! -!> SUBPROGRAM: CALDRG COMPUTE DRAG COEFFICIENT -!! PRGRMMR: TREADON ORG: W/NP2 DATE: 93-09-01 -!! -!! ABSTRACT: THIS ROUTINE COMPUTES A SURFACE LAYER DRAG -!! COEFFICIENT USING EQUATION (7.4.1A) IN "AN INTRODUCTION -!! TO BOUNDARY LAYER METEOROLOGY" BY STULL (1988, KLUWER -!! ACADEMIC PUBLISHERS). -!! -!! PROGRAM HISTORY LOG: -!! 93-09-01 RUSS TREADON -!! 98-06-15 T BLACK - CONVERSION FROM 1-D TO 2-D -!! 00-01-04 JIM TUCCILLO - MPI VERSION -!! 02-01-15 MIKE BALDWIN - WRF VERSION -!! 05-02-22 H CHUANG - ADD WRF NMM COMPONENTS -!! -!! USAGE: CALL CALDRG(DRAGCO) -!! INPUT ARGUMENT LIST: -!! NONE -!! -!! OUTPUT ARGUMENT LIST: -!! DRAGCO - SURFACE LAYER DRAG COEFFICIENT -!! -!! OUTPUT FILES: -!! NONE -!! -!! SUBPROGRAMS CALLED: -!! UTILITIES: -!! NONE -!! LIBRARY: -!! COMMON - LOOPS -!! SRFDSP -!! PVRBLS -!! -!! ATTRIBUTES: -!! LANGUAGE: FORTRAN 90 -!! MACHINE : CRAY C-90 -!! +!> @brief Subroutine that computes drag cofficient. +! +!> This rountine computes a surface layer drag coefficient using +!> equation (7.4.1A) in ["An introduction to boundary layer +!> meteorology" by Stull (1988, Kluwer Academic +!> Publishers)](https://link.springer.com/book/10.1007/978-94-009-3027-8). +!> +!> @param[out] DRAGCO surface layer drag coefficient. +!> +!> ### Program History Log +!> Date | Programmer | Comments +!> -----|------------|--------- +!> 1993-09-01 | Russ Treadon | Initial +!> 1998-06-15 | T Black | Conversion from 1-D to 2-D +!> 2000-01-04 | Jim Tuccillo | MPI version +!> 2002-01-15 | Mike Baldwin | WRF version +!> 2005-02-22 | H Chuang | Add WRF NMM components +!> +!> @author Russ Treadon W/NP2 @date 1993-09-01 SUBROUTINE CALDRG(DRAGCO) ! @@ -46,7 +27,7 @@ SUBROUTINE CALDRG(DRAGCO) use masks, only: lmh use params_mod, only: d00, d50, d25 use ctlblk_mod, only: jsta, jend, jsta_m, jend_m, modelname, spval, im, jm, & - jsta_2l, jend_2u + jsta_2l, jend_2u, ista, iend, ista_m, iend_m, ista_2l, iend_2u use gridspec_mod, only: gridtype !- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - implicit none @@ -54,7 +35,7 @@ SUBROUTINE CALDRG(DRAGCO) ! INCLUDE/SET PARAMETERS. ! ! DECLARE VARIABLES. - REAL,intent(inout) :: DRAGCO(IM,jsta_2l:jend_2u) + REAL,intent(inout) :: DRAGCO(ista_2l:iend_2u,jsta_2l:jend_2u) INTEGER IHE(JM),IHW(JM) integer I,J,LHMK,IE,IW,LMHK real UBAR,VBAR,WSPDSQ,USTRSQ,SUMU,SUMV,ULMH,VLMH,UZ0H,VZ0H @@ -66,7 +47,7 @@ SUBROUTINE CALDRG(DRAGCO) ! !$omp parallel do private(i,j) DO J=JSTA,JEND - DO I=1,IM + DO I=ISTA,IEND ! DRAGCO(I,J) = D00 DRAGCO(I,J) = 0.0 @@ -76,7 +57,7 @@ SUBROUTINE CALDRG(DRAGCO) IF(gridtype=='A')THEN DO J=JSTA,JEND - DO I=1,IM + DO I=ISTA,IEND ! IF (USTAR(I,J) /= SPVAL) THEN @@ -110,7 +91,7 @@ SUBROUTINE CALDRG(DRAGCO) ENDDO DO J=JSTA_M,JEND_M - DO I=2,IM-1 + DO I=ISTA_M,IEND_M ! ! COMPUTE A MEAN MASS POINT WIND IN THE ! FIRST ATMOSPHERIC ETA LAYER. @@ -147,7 +128,7 @@ SUBROUTINE CALDRG(DRAGCO) END DO ELSE IF(gridtype=='B')THEN DO J=JSTA_M,JEND_M - DO I=2,IM-1 + DO I=ISTA_M,IEND_M ! ! COMPUTE A MEAN MASS POINT WIND IN THE ! FIRST ATMOSPHERIC ETA LAYER. @@ -193,7 +174,7 @@ SUBROUTINE CALDRG(DRAGCO) !$omp parallel do private(i,j) DO J=JSTA,JEND - DO I=1,IM + DO I=ISTA,IEND DRAGCO(I,J) = SPVAL ENDDO ENDDO diff --git a/sorc/ncep_post.fd/CALDWP.f b/sorc/ncep_post.fd/CALDWP.f index 9d7d62068..02f309a94 100644 --- a/sorc/ncep_post.fd/CALDWP.f +++ b/sorc/ncep_post.fd/CALDWP.f @@ -1,57 +1,39 @@ !> @file +!> @brief Subroutine related to dewpoint temperature. ! -!> SUBPROGRAM: CALDWP COMPUTES -!! PRGRMMR: TREADON ORG: W/NP2 DATE: 92-12-22 -!! -!! ABSTRACT: COMPUTES DEWPOINT FROM P, T, AND Q -!! -!! PROGRAM HISTORY LOG: -!! 92-12-22 RUSS TREADON -!! 93-10-04 RUSS TREADON - ADDED CHECK TO BOUND DEWPOINT -!! TEMPERATURE TO NOT EXCEED THE -!! AMBIENT TEMPERATURE. -!! 98-06-08 T BLACK - CONVERSION FROM 1-D TO 2-D -!! 00-01-04 JIM TUCCILLO - MPI VERSION -!! -!! USAGE: CALL CALDWP(P1D,Q1D,TDWP,T1D) -!! INPUT ARGUMENT LIST: -!! P1D - PRESSURE (PA) -!! Q1D - SPECIFIC HUMIDITY (KG/KG) -!! T1D - TEMPERATURE (K) -!! -!! OUTPUT ARGUMENT LIST: -!! TDWP - DEWPOINT TEMPERATURE (K) - -!! -!! OUTPUT FILES: -!! NONE -!! -!! SUBPROGRAMS CALLED: -!! UTILITIES: -!! DEWPOINT - COMPUTES DEWPOINT GIVEN VAPOR PRESSURE. -!! LIBRARY: -!! NONE -!! -!! ATTRIBUTES: -!! LANGUAGE: FORTRAN 90 -!! MACHINE : CRAY C-90 -!! +!> Computes dewpoint from P, T, and Q. +!> +!> @param[in] P1D Pressure (Pa). +!> @param[in] Q1D Specific humidity (kg/kg). +!> @param[in] T1D Temperature (K). +!> @param[out] TDWP Dewpoint temperature (K). +!> +!> ### Program history log: +!> Date | Programmer | Comments +!> -----|------------|--------- +!> 1992-12-22 | Russ Treadon | Initial +!> 1993-10-04 | Russ Treadon | Added check to bound dewpoint temperature to not exceed the ambient temperature. +!> 1998-06-08 | T Black | Conversion from 1-D to 2-D +!> 2000-01-04 | Jim Tuccillo | MPI version +!> 2021-07-23 | Wen Meng | Retrict computation from undefined points +!> +!> @author Russ Treadon W/NP2 @date 1992-12-22 SUBROUTINE CALDWP(P1D,Q1D,TDWP,T1D) ! ! ! SET PARAMETERS. use params_mod, only: eps, oneps, d001, h1m12 - use ctlblk_mod, only: jsta, jend, im + use ctlblk_mod, only: jsta, jend, im, spval, ista, iend !- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - implicit none ! ! DECLARE VARIABLES. ! - REAL,dimension(IM,jsta:jend),intent(in) :: P1D,Q1D,T1D - REAL,dimension(IM,jsta:jend),intent(inout) :: TDWP + REAL,dimension(ista:iend,jsta:jend),intent(in) :: P1D,Q1D,T1D + REAL,dimension(ista:iend,jsta:jend),intent(inout) :: TDWP - REAL EVP(IM,jsta:jend) + REAL EVP(ista:iend,jsta:jend) integer I,J ! !**************************************************************************** @@ -61,9 +43,13 @@ SUBROUTINE CALDWP(P1D,Q1D,TDWP,T1D) ! !$omp parallel do private(i,j) DO J=JSTA,JEND - DO I=1,IM + DO I=ISTA,IEND + IF(P1D(I,j) @file -! . . . -!> SUBPROGRAM: CALGUST COMPUTE MAX WIND LEVEL -!! PRGRMMR: MANIKIN ORG: W/NP2 DATE: 97-03-04 -!! -!! ABSTRACT: -!! THIS ROUTINE COMPUTES SURFACE WIND GUST BY MIXING -!! DOWN MOMENTUM FROM THE LEVEL AT THE HEIGHT OF THE PBL -!! -!! -!! PROGRAM HISTORY LOG: -!! 03-10-15 GEOFF MANIKIN -!! 05-03-09 H CHUANG - WRF VERSION -!! 05-07-07 BINBIN ZHOU - ADD RSM -!! 15-03-11 S Moorthi - set sfcwind to spval if u10 and v10 are spvals -!! for A grid and set gust to just wind -!! (in GSM with nemsio, it appears u10 & v10 have spval) -!! -!! USAGE: CALL CALGUST(GUST) -!! INPUT ARGUMENT LIST: -!! NONE -!! -!! OUTPUT ARGUMENT LIST: -!! GUST - SPEED OF THE MAXIMUM SFC WIND GUST -!! -!! OUTPUT FILES: -!! NONE -!! -!! SUBPROGRAMS CALLED: -!! UTILITIES: -!! H2V -!! -!! LIBRARY: -!! COMMON - -!! LOOPS -!! OPTIONS -!! MASKS -!! INDX -!! -!! ATTRIBUTES: -!! LANGUAGE: FORTRAN 90 -!! MACHINE : CRAY C-90 -!! +!> @brief Subroutine that computes max wind level. +! +!> This routine computes surface wind gust by mixing +!> down momentum from the level at the height of the PBL. +!> +!> @param[in] LPBL Model level that is closest to the planetary boundary layer height. +!> @param[in] ZPBL Height of the planetary boundary layer. +!> @param[inout] GUST Speed of the maximum surface wind gust. +!> +!> ### Program history log: +!> Date | Programmer | Comments +!> -----|------------|--------- +!> 2003-10-15 | Geoff Manokin | Initial +!> 2005-03-09 | H Chuang | WRF Version +!> 2005-07-07 | Binbin Zhou | Add RSM +!> 2015-03-11 | S Moorthi | Set sfcwind to spval if u10 and v10 are spvals for A grid and set gust to just wind (in GSM with nemsio, it appears u10 & v10 have spval) +!> 2021-09-02 | Bo Cui | Decompose UPP in X direction +!> 2023-02-21 | Weizhong Zheng| Switch to GSL algorithm for FV3 based models +!> 2023-02-24 | Weizhong Zheng| Revised calculation of wind gust for UFS applications +!> +!> @author Geoff Manikin W/NP2 @date 1997-03-04 + SUBROUTINE CALGUST(LPBL,ZPBL,GUST) ! @@ -49,7 +29,7 @@ SUBROUTINE CALGUST(LPBL,ZPBL,GUST) use vrbls2d , only: u10h, v10h, u10,v10, fis use params_mod, only: d25, gi use ctlblk_mod, only: jsta, jend, spval, jsta_m, jend_m, num_procs, mpi_comm_comp, lm,& - modelname, im, jm, jsta_2l, jend_2u + modelname, im, jm, jsta_2l, jend_2u, ista, iend, ista_m, iend_m, ista_2l, iend_2u use gridspec_mod, only: gridtype implicit none @@ -60,9 +40,9 @@ SUBROUTINE CALGUST(LPBL,ZPBL,GUST) ! ! DECLARE VARIABLES. ! - INTEGER,intent(in) :: LPBL(IM,jsta_2l:jend_2u) - REAL,intent(in) :: ZPBL(IM,jsta_2l:jend_2u) - REAL,intent(inout) :: GUST(IM,jsta_2l:jend_2u) + INTEGER,intent(in) :: LPBL(ista_2l:iend_2u,jsta_2l:jend_2u) + REAL,intent(in) :: ZPBL(ista_2l:iend_2u,jsta_2l:jend_2u) + REAL,intent(inout) :: GUST(ista_2l:iend_2u,jsta_2l:jend_2u) integer I,J,IE,IW, L, K, ISTART, ISTOP, JSTART, JSTOP integer LMIN,LXXX,IERR @@ -76,29 +56,29 @@ SUBROUTINE CALGUST(LPBL,ZPBL,GUST) ! !$omp parallel do private(i,j) DO J=JSTA,JEND - DO I=1,IM + DO I=ISTA,IEND GUST(I,J) = SPVAL ENDDO ENDDO IF(gridtype == 'A') THEN - ISTART = 1 - ISTOP = IM + ISTART = ISTA + ISTOP = IEND JSTART = JSTA JSTOP = JEND ELSE - ISTART = 2 - ISTOP = IM-1 + ISTART = ISTA_M + ISTOP = IEND_M JSTART = JSTA_M JSTOP = JEND_M if ( num_procs > 1 ) then - !CALL EXCH(U10(1,jsta_2l)) - !CALL EXCH(V10(1,jsta_2l)) - LMIN = max(1, minval(lpbl(1:im,jsta:jend))) + !CALL EXCH(U10(ISTA_2L,jsta_2l)) + !CALL EXCH(V10(ISTA_2L,jsta_2l)) + LMIN = max(1, minval(lpbl(ista:iend,jsta:jend))) CALL MPI_ALLREDUCE(LMIN,LXXX,1,MPI_INTEGER,MPI_MIN,MPI_COMM_COMP,IERR) DO L=LXXX,LM - CALL EXCH(UH(1,jsta_2l,L)) - CALL EXCH(VH(1,jsta_2l,L)) + CALL EXCH(UH(ista_2l,jsta_2l,L)) + CALL EXCH(VH(ista_2l,jsta_2l,L)) END DO END IF END IF @@ -155,7 +135,7 @@ SUBROUTINE CALGUST(LPBL,ZPBL,GUST) else sfcwind = spval endif - if(MODELNAME == 'RAPR') then + if(MODELNAME == 'RAPR' .OR. MODELNAME == 'GFS' .OR. MODELNAME == 'FV3R') then ZSFC = ZINT(I,J,LM+1) L = LPBL(I,J) ! in RUC do 342 k=2,k1-1, where k1 - first level above PBLH @@ -189,7 +169,7 @@ SUBROUTINE CALGUST(LPBL,ZPBL,GUST) return END IF - if(MODELNAME /= 'RAPR')then + if(MODELNAME /= 'RAPR' .AND. MODELNAME /= 'GFS' .AND. MODELNAME /= 'FV3R')then if (sfcwind < spval) then DELWIND = WIND - SFCWIND ZSFC = FIS(I,J)*GI diff --git a/sorc/ncep_post.fd/CALHEL.f b/sorc/ncep_post.fd/CALHEL.f index 8520bf5cd..eedc4feeb 100644 --- a/sorc/ncep_post.fd/CALHEL.f +++ b/sorc/ncep_post.fd/CALHEL.f @@ -1,90 +1,56 @@ !> @file -! . . . -!> SUBPROGRAM: CALHEL COMPUTES STORM RELATIVE HELICITY -!! PRGRMMR: BALDWIN ORG: W/NP2 DATE: 94-08-22 -!! -!! ABSTRACT: -!! THIS ROUTINE COMPUTES ESTIMATED STORM MOTION AND -!! STORM-RELATIVE ENVIRONMENTAL HELICITY. -!! (DAVIES-JONES ET AL 1990) THE ALGORITHM PROCEEDS AS -!! FOLLOWS. -!! -!! THE STORM MOTION COMPUTATION NO LONGER EMPLOYS THE DAVIES AND -!! JOHNS (1993) METHOD WHICH DEFINED STORM MOTION AS 30 DEGREES TO -!! THE RIGHT OF THE 0-6 KM MEAN WIND AT 75% OF THE SPEED FOR MEAN -!! SPEEDS LESS THAN 15 M/S AND 20 DEGREES TO THE RIGHT FOR SPEEDS -!! GREATER THAN 15 M/S. INSTEAD, WE NOW USE THE DYNAMIC METHOD -!! (BUNKERS ET AL. 1998) WHICH HAS BEEN FOUND TO DO BETTER IN -!! CASES WITH 'NON-CLASSIC' HODOGRAPHS (SUCH AS NORTHWEST-FLOW -!! EVENTS) AND DO AS WELL OR BETTER THAN THE OLD METHOD IN MORE -!! CLASSIC SITUATIONS. -!! -!! PROGRAM HISTORY LOG: -!! 94-08-22 MICHAEL BALDWIN -!! 97-03-27 MICHAEL BALDWIN - SPEED UP CODE -!! 98-06-15 T BLACK - CONVERSION FROM 1-D TO 2-D -!! 00-01-04 JIM TUCCILLO - MPI VERSION -!! 00-01-10 G MANIKIN - CHANGED TO BUNKERS METHOD -!! 02-05-22 G MANIKIN - NOW ALLOW CHOICE OF COMPUTING -!! HELICITY OVER TWO DIFFERENT -!! (0-1 and 0-3 KM) DEPTHS -!! 03-03-25 G MANIKIN - MODIFIED CODE TO COMPUTE MEAN WINDS -!! USING ARITHMETIC AVERAGES INSTEAD OF -!! MASS WEIGHTING; DIFFERENCES ARE MINOR -!! BUT WANT TO BE CONSISTENT WITH THE -!! BUNKERS METHOD -!! 04-04-16 M PYLE - MINIMAL MODIFICATIONS, BUT PUT INTO -!! NMM WRFPOST CODE -!! 05=02-25 H CHUANG - ADD COMPUTATION FOR ARW A GRID -!! 05-07-07 BINBIN ZHOU - ADD RSM FOR A GRID -!! 19-10-30 Bo CUI - REMOVE "GOTO" STATEMENT -!! -!! USAGE: CALHEL(UST,VST,HELI) -!! INPUT ARGUMENT LIST: -!! DPTH - DEPTH IN METERS OVER WHICH HELICITY SHOULD BE COMPUTED; -!! ALLOWS ONE TO DISTINGUISH 0-3 KM AND 0-1 KM VALUES -!! -!! OUTPUT ARGUMENT LIST: -!! UST - ESTIMATED U COMPONENT (M/S) OF STORM MOTION. -!! VST - ESTIMATED V COMPONENT (M/S) OF STORM MOTION. -!! HELI - STORM-RELATIVE HELICITY (M**2/S**2) -!! CRA -!! USHR1 - U COMPONENT (M/S) OF 0-1 KM SHEAR -!! VSHR1 - V COMPONENT (M/S) OF 0-1 KM SHEAR -!! USHR6 - U COMPONENT (M/S) OF 0-0.5 to 5.5-6.0 KM SHEAR -!! VSHR6 - V COMPONENT (M/S) OF 0-0.5 to 5.5-6.0 KM SHEAR -!! CRA - -!! -!! OUTPUT FILES: -!! NONE -!! -!! SUBPROGRAMS CALLED: -!! UTILITIES: -!! -!! LIBRARY: -!! COMMON - VRBLS -!! LOOPS -!! PHYS -!! EXTRA -!! MASKS -!! OPTIONS -!! INDX -!! -!! ATTRIBUTES: -!! LANGUAGE: FORTRAN 90 -!! MACHINE : IBM SP -!! +!> @brief Subroutine that computes storm relative helicity. +! +!> This routine computes estimated storm motion and storm-relative +!> environmental helicity. (Davies-Jones et al 1990) the algorithm +!> processd as follows. +!> +!> The storm motion computation no longer employs the Davies and Johns (1993) +!> method which defined storm motion as 30 degress to the right of the 0-6 km +!> mean wind at 75% of the speed for mean speeds less than 15 m/s and 20 degrees +!> to the right for speeds greater than 15 m/s. Instead, we now use the dynamic +!> method (Bunkers et al. 1988) which has been found to do better in cases with +!> 'non-classic' hodographs (such as Northwest-flow events) and do as well or +!> better than the old method in more classic situations. +!> +!> @param[in] DEPTH Depth in meters over whcih helicity should be computed; allows one to distinguish 0-3 km and 0-1 km values. +!> @param[out] UST Estimated U Component (m/s) Of Storm motion. +!> @param[out] VST Estimated V Component (m/s) Of Storm motion. +!> @param[out] HELI Storm-relative heliciry (m**2/s**2). +!> @param[out] USHR1 U Component (m/s) Of 0-1 km shear. +!> @param[out] VSHR1 V Component (m/s) Of 0-1 km shear. +!> @param[out] USHR6 U Component (m/s) Of 0-0.5 to 5.5-6.0 km shear. +!> @param[out] VSHR6 V Component (m/s) Of 0-0.5 to 5.5-6.0 km shear. +!> +!> ### Program history log: +!> Date | Programmer | Comments +!> -----|------------|--------- +!> 1994-08-22 | Michael Baldwin | Initial +!> 1997-03-27 | Michael Baldwin | Speed up code +!> 1998-06-15 | T Black | Conversion from 1-D to 2-D +!> 2000-01-04 | Jim Tuccillo | MPI Version +!> 2000-01-10 | G Manikin | Changed to Bunkers method +!> 2002-05-22 | G Manikin | Now allow choice of computing helicity over two different (0-1 and 0-3 km) depths +!> 2003-03-25 | G Manikin | Modified code to compute mean winds using arithmetic averages instead of mass weighting; differences are minor but want to be consistent with the Bunkers method +!> 2004-04-16 | M Pyle | Minimal modifications but put into NMM WRFPOST code +!> 2005-02-25 | H Chuang | Add computation for ARW A grid +!> 2005-07-07 | Binbin Zhou | Add RSM for A grid +!> 2019-10-30 | Bo Cui | Remove "goto" statement +!> 2021-09-02 | Bo Cui | Decompose UPP in X direction +!> 2022-10-07 | Tracy Hertneky | Add left mover for storm motion in SH +!> +!> @author Michael Baldwin W/NP2 @date 1994-08-22 SUBROUTINE CALHEL(DEPTH,UST,VST,HELI,USHR1,VSHR1,USHR6,VSHR6) ! use vrbls3d, only: zmid, uh, vh, u, v, zint use vrbls2d, only: fis, u10, v10 - use masks, only: lmv + use masks, only: lmv, gdlat use params_mod, only: g use lookup_mod, only: ITB,JTB,ITBQ,JTBQ use ctlblk_mod, only: jsta, jend, jsta_m, jend_m, jsta_2l, jend_2u, & - lm, im, jm, me, spval + lm, im, jm, me, spval, & + ista, iend, ista_m, iend_m, ista_2l, iend_2u use gridspec_mod, only: gridtype !- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - implicit none @@ -102,10 +68,10 @@ SUBROUTINE CALHEL(DEPTH,UST,VST,HELI,USHR1,VSHR1,USHR6,VSHR6) ! DECLARE VARIABLES ! real,intent(in) :: DEPTH(2) - REAL,dimension(IM,jsta_2l:jend_2u), intent(out) :: UST,VST - REAL,dimension(IM,jsta_2l:jend_2u,2),intent(out) :: HELI + REAL,dimension(ista_2l:iend_2u,jsta_2l:jend_2u), intent(out) :: UST,VST + REAL,dimension(ista_2l:iend_2u,jsta_2l:jend_2u,2),intent(out) :: HELI ! - real, dimension(im,jsta_2l:jend_2u) :: HTSFC, UST6, VST6, UST5, VST5, & + real, dimension(ista_2l:iend_2u,jsta_2l:jend_2u) :: HTSFC, UST6, VST6, UST5, VST5, & UST1, VST1, USHR1, VSHR1, & USHR6, VSHR6, U1, V1, U2, V2, & HGT1, HGT2, UMEAN, VMEAN @@ -120,7 +86,7 @@ SUBROUTINE CALHEL(DEPTH,UST,VST,HELI,USHR1,VSHR1,USHR6,VSHR6) ! REAL HGT1(IM,JM),HGT2(IM,JM),UMEAN(IM,JM),VMEAN(IM,JM) ! CRA - integer, dimension(im,jsta_2l:jend_2u) :: COUNT6, COUNT5, COUNT1, L1, L2 + integer, dimension(ista_2l:iend_2u,jsta_2l:jend_2u) :: COUNT6, COUNT5, COUNT1, L1, L2 ! INTEGER COUNT6(IM,JM),COUNT5(IM,JM),COUNT1(IM,JM) ! CRA ! INTEGER L1(IM,JM),L2(IM,JM) @@ -140,7 +106,7 @@ SUBROUTINE CALHEL(DEPTH,UST,VST,HELI,USHR1,VSHR1,USHR6,VSHR6) ! !$omp parallel do private(i,j) DO J=JSTA,JEND - DO I=1,IM + DO I=ISTA,IEND UST(I,J) = 0.0 VST(I,J) = 0.0 HELI(I,J,1) = 0.0 @@ -180,8 +146,8 @@ SUBROUTINE CALHEL(DEPTH,UST,VST,HELI,USHR1,VSHR1,USHR6,VSHR6) IVE(J) = MOD(J,2) IVW(J) = IVE(J)-1 enddo - ISTART = 2 - ISTOP = IM-1 + ISTART = ISTA_M + ISTOP = IEND_M JSTART = JSTA_M JSTOP = JEND_M ELSE IF(gridtype == 'B')THEN @@ -191,8 +157,8 @@ SUBROUTINE CALHEL(DEPTH,UST,VST,HELI,USHR1,VSHR1,USHR6,VSHR6) IVE(J)=1 IVW(J)=0 enddo - ISTART = 2 - ISTOP = IM-1 + ISTART = ISTA_M + ISTOP = IEND_M JSTART = JSTA_M JSTOP = JEND_M ELSE @@ -202,8 +168,8 @@ SUBROUTINE CALHEL(DEPTH,UST,VST,HELI,USHR1,VSHR1,USHR6,VSHR6) IVE(J) = 0 IVW(J) = 0 enddo - ISTART = 1 - ISTOP = IM + ISTART = ISTA + ISTOP = IEND JSTART = JSTA JSTOP = JEND END IF @@ -218,9 +184,9 @@ SUBROUTINE CALHEL(DEPTH,UST,VST,HELI,USHR1,VSHR1,USHR6,VSHR6) ! END DO ! !!$omp parallel do private(htsfc,ie,iw) - IF(gridtype /= 'A') CALL EXCH(FIS(1:IM,JSTA_2L:JEND_2U)) + IF(gridtype /= 'A') CALL EXCH(FIS(ISTA_2L:IEND_2U,JSTA_2L:JEND_2U)) DO L = 1,LM - IF(gridtype /= 'A') CALL EXCH(ZMID(1:IM,JSTA_2L:JEND_2U,L)) + IF(gridtype /= 'A') CALL EXCH(ZMID(ISTA_2L:IEND_2U,JSTA_2L:JEND_2U,L)) DO J=JSTART,JSTOP DO I=ISTART,ISTOP IE = I+IVE(J) @@ -343,8 +309,13 @@ SUBROUTINE CALHEL(DEPTH,UST,VST,HELI,USHR1,VSHR1,USHR6,VSHR6) DENOM = USHR6(I,J)*USHR6(I,J)+VSHR6(I,J)*VSHR6(I,J) IF (DENOM /= 0.0) THEN - UST(I,J) = UMEAN6 + (7.5*VSHR6(I,J)/SQRT(DENOM)) - VST(I,J) = VMEAN6 - (7.5*USHR6(I,J)/SQRT(DENOM)) + IF (GDLAT(I,J) >= 0) THEN + UST(I,J) = UMEAN6 + (7.5*VSHR6(I,J)/SQRT(DENOM)) + VST(I,J) = VMEAN6 - (7.5*USHR6(I,J)/SQRT(DENOM)) + ELSE IF (GDLAT(I,J) < 0) THEN + UST(I,J) = UMEAN6 - (7.5*VSHR6(I,J)/SQRT(DENOM)) + VST(I,J) = VMEAN6 + (7.5*USHR6(I,J)/SQRT(DENOM)) + ENDIF ELSE UST(I,J) = 0 VST(I,J) = 0 diff --git a/sorc/ncep_post.fd/CALHEL2.f b/sorc/ncep_post.fd/CALHEL2.f index c7678b1c9..2c1bb8460 100644 --- a/sorc/ncep_post.fd/CALHEL2.f +++ b/sorc/ncep_post.fd/CALHEL2.f @@ -1,84 +1,47 @@ !> @file -! . . . -!> SUBPROGRAM: CALHEL COMPUTES STORM RELATIVE HELICITY -!! PRGRMMR: BALDWIN ORG: W/NP2 DATE: 94-08-22 -!! -!! ABSTRACT: -!! THIS ROUTINE COMPUTES ESTIMATED STORM MOTION AND -!! STORM-RELATIVE ENVIRONMENTAL HELICITY. -!! (DAVIES-JONES ET AL 1990) THE ALGORITHM PROCEEDS AS -!! FOLLOWS. -!! -!! THE STORM MOTION COMPUTATION NO LONGER EMPLOYS THE DAVIES AND -!! JOHNS (1993) METHOD WHICH DEFINED STORM MOTION AS 30 DEGREES TO -!! THE RIGHT OF THE 0-6 KM MEAN WIND AT 75% OF THE SPEED FOR MEAN -!! SPEEDS LESS THAN 15 M/S AND 20 DEGREES TO THE RIGHT FOR SPEEDS -!! GREATER THAN 15 M/S. INSTEAD, WE NOW USE THE DYNAMIC METHOD -!! (BUNKERS ET AL. 1998) WHICH HAS BEEN FOUND TO DO BETTER IN -!! CASES WITH 'NON-CLASSIC' HODOGRAPHS (SUCH AS NORTHWEST-FLOW -!! EVENTS) AND DO AS WELL OR BETTER THAN THE OLD METHOD IN MORE -!! CLASSIC SITUATIONS. -!! -!! PROGRAM HISTORY LOG: -!! 94-08-22 MICHAEL BALDWIN -!! 97-03-27 MICHAEL BALDWIN - SPEED UP CODE -!! 98-06-15 T BLACK - CONVERSION FROM 1-D TO 2-D -!! 00-01-04 JIM TUCCILLO - MPI VERSION -!! 00-01-10 G MANIKIN - CHANGED TO BUNKERS METHOD -!! 02-05-22 G MANIKIN - NOW ALLOW CHOICE OF COMPUTING -!! HELICITY OVER TWO DIFFERENT -!! (0-1 and 0-3 KM) DEPTHS -!! 03-03-25 G MANIKIN - MODIFIED CODE TO COMPUTE MEAN WINDS -!! USING ARITHMETIC AVERAGES INSTEAD OF -!! MASS WEIGHTING; DIFFERENCES ARE MINOR -!! BUT WANT TO BE CONSISTENT WITH THE -!! BUNKERS METHOD -!! 04-04-16 M PYLE - MINIMAL MODIFICATIONS, BUT PUT INTO -!! NMM WRFPOST CODE -!! 05=02-25 H CHUANG - ADD COMPUTATION FOR ARW A GRID -!! 05-07-07 BINBIN ZHOU - ADD RSM FOR A GRID -!! 19-09-03 J MENG - MODIFIED TO COMPUTE EFFECTIVE HELICITY -!! AND CRITICAL ANGLE -!! -!! USAGE: CALHEL(UST,VST,HELI) -!! INPUT ARGUMENT LIST: -!! LLOW - LOWER BOUND CAPE>=100 AND CINS>=-250 -!! LUPP - UPPER BOUND CAPE< 100 OR CINS< -250 -!! DPTH - DEPTH IN METERS OVER WHICH HELICITY SHOULD BE COMPUTED; -!! ALLOWS ONE TO DISTINGUISH 0-3 KM AND 0-1 KM VALUES -!! -!! OUTPUT ARGUMENT LIST: -!! UST - ESTIMATED U COMPONENT (M/S) OF STORM MOTION. -!! VST - ESTIMATED V COMPONENT (M/S) OF STORM MOTION. -!! HELI - STORM-RELATIVE HELICITY (M**2/S**2) -!! CANGLE - CRITICAL ANGLE -!! CRA -!! USHR1 - U COMPONENT (M/S) OF 0-1 KM SHEAR -!! VSHR1 - V COMPONENT (M/S) OF 0-1 KM SHEAR -!! USHR6 - U COMPONENT (M/S) OF 0-0.5 to 5.5-6.0 KM SHEAR -!! VSHR6 - V COMPONENT (M/S) OF 0-0.5 to 5.5-6.0 KM SHEAR -!! CRA - -!! -!! OUTPUT FILES: -!! NONE -!! -!! SUBPROGRAMS CALLED: -!! UTILITIES: -!! -!! LIBRARY: -!! COMMON - VRBLS -!! LOOPS -!! PHYS -!! EXTRA -!! MASKS -!! OPTIONS -!! INDX -!! -!! ATTRIBUTES: -!! LANGUAGE: FORTRAN 90 -!! MACHINE : IBM SP -!! +!> @brief Subroutine that computes storm relative helicity. +! +!> This routine computes estimated storm motion and storm-relative +!> environmental helicity. (Davies-Jones et al 1990) the algorithm +!> processd as follows. +!> +!> The storm motion computation no longer employs the Davies and Johns (1993) +!> method which defined storm motion as 30 degress to the right of the 0-6 km +!> mean wind at 75% of the speed for mean speeds less than 15 m/s and 20 degrees +!> to the right for speeds greater than 15 m/s. Instead, we now use the dynamic +!> method (Bunkers et al. 1988) which has been found to do better in cases with +!> 'non-classic' hodographs (such as Northwest-flow events) and do as well or +!> better than the old method in more classic situations. +!> +!> @param[in] LLOW Lower bound CAPE>=100 and CINS>=-250. +!> @param[in] LUPP Upper bound CAPE< 100 or CINS< -250; allows one to distinguish 0-3 km and 0-1 km values. +!> @param[in] DPTH Depth in meters over whcih helicity should be computed; allows one to distinguish 0-3 km and 0-1 km values. +!> @param[out] UST Estimated U Component (m/s) Of Storm motion. +!> @param[out] VST Estimated V Component (m/s) Of Storm motion. +!> @param[out] HELI Storm-relative heliciry (m**2/s**2). +!> @param[out] CANGLE Critical angle. +!> @param[out] USHR1 U Component (m/s) Of 0-1 km shear. +!> @param[out] VSHR1 V Component (m/s) Of 0-1 km shear. +!> @param[out] USHR6 U Component (m/s) Of 0-0.5 to 5.5-6.0 km shear. +!> @param[out] VSHR6 V Component (m/s) Of 0-0.5 to 5.5-6.0 km shear. +!> +!> ### Program history log: +!> Date | Programmer | Comments +!> -----|------------|--------- +!> 1994-08-22 | Michael Baldwin | Initial +!> 1997-03-27 | Michael Baldwin | Speed up code +!> 1998-06-15 | T Black | Conversion from 1-D to 2-D +!> 2000-01-04 | Jim Tuccillo | MPI Version +!> 2000-01-10 | G Manikin | Changed to Bunkers method +!> 2002-05-22 | G Manikin | Now allow choice of computing helicity over two different (0-1 and 0-3 km) depths +!> 2003-03-25 | G Manikin | Modified code to compute mean winds using arithmetic averages instead of mass weighting; differences are minor but want to be consistent with the Bunkers method +!> 2004-04-16 | M Pyle | Minimal modifications but put into NMM WRFPOST code +!> 2005-02-25 | H Chuang | Add computation for ARW A grid +!> 2005-07-07 | Binbin Zhou | Add RSM for A grid +!> 2019-09-03 | J Meng | Modified to compute effective helicity and critical angle +!> 2021-09-02 | Bo Cui | Decompose UPP in X direction +!> +!> @author Michael Baldwin W/NP2 @date 1994-08-22 SUBROUTINE CALHEL2(LLOW,LUPP,DEPTH,UST,VST,HELI,CANGLE) ! @@ -88,7 +51,8 @@ SUBROUTINE CALHEL2(LLOW,LUPP,DEPTH,UST,VST,HELI,CANGLE) use params_mod, only: g use lookup_mod, only: ITB,JTB,ITBQ,JTBQ use ctlblk_mod, only: jsta, jend, jsta_m, jend_m, jsta_2l, jend_2u, & - lm, im, jm, me, spval + lm, im, jm, me, spval, & + ista, iend, ista_m, iend_m, ista_2l, iend_2u use gridspec_mod, only: gridtype !- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - implicit none @@ -106,17 +70,17 @@ SUBROUTINE CALHEL2(LLOW,LUPP,DEPTH,UST,VST,HELI,CANGLE) ! ! DECLARE VARIABLES ! - integer,dimension(IM,jsta_2l:jend_2u),intent(in) :: LLOW, LUPP + integer,dimension(ista_2l:iend_2u,jsta_2l:jend_2u),intent(in) :: LLOW, LUPP real,intent(in) :: DEPTH(2) - REAL,dimension(IM,jsta_2l:jend_2u), intent(out) :: UST,VST - REAL,dimension(IM,jsta_2l:jend_2u,2),intent(out) :: HELI - REAL,dimension(IM,jsta_2l:jend_2u), intent(out) :: CANGLE + REAL,dimension(ista_2l:iend_2u,jsta_2l:jend_2u), intent(out) :: UST,VST + REAL,dimension(ista_2l:iend_2u,jsta_2l:jend_2u,2),intent(out) :: HELI + REAL,dimension(ista_2l:iend_2u,jsta_2l:jend_2u), intent(out) :: CANGLE ! - real, dimension(im,jsta_2l:jend_2u) :: HTSFC, UST6, VST6, UST5, VST5, & + real, dimension(ista_2l:iend_2u,jsta_2l:jend_2u) :: HTSFC, UST6, VST6, UST5, VST5, & UST1, VST1, USHR1, VSHR1, & USHR6, VSHR6, U1, V1, U2, V2, & HGT1, HGT2, UMEAN, VMEAN - real, dimension(im,jsta_2l:jend_2u) :: USHR05,VSHR05 + real, dimension(ista_2l:iend_2u,jsta_2l:jend_2u) :: USHR05,VSHR05 ! REAL HTSFC(IM,JM) ! @@ -129,7 +93,7 @@ SUBROUTINE CALHEL2(LLOW,LUPP,DEPTH,UST,VST,HELI,CANGLE) ! REAL HGT1(IM,JM),HGT2(IM,JM),UMEAN(IM,JM),VMEAN(IM,JM) ! CRA - integer, dimension(im,jsta_2l:jend_2u) :: COUNT6, COUNT5, COUNT1, L1, L2 + integer, dimension(ista_2l:iend_2u,jsta_2l:jend_2u) :: COUNT6, COUNT5, COUNT1, L1, L2 ! INTEGER COUNT6(IM,JM),COUNT5(IM,JM),COUNT1(IM,JM) ! CRA ! INTEGER L1(IM,JM),L2(IM,JM) @@ -148,7 +112,7 @@ SUBROUTINE CALHEL2(LLOW,LUPP,DEPTH,UST,VST,HELI,CANGLE) ! !$omp parallel do private(i,j) DO J=JSTA,JEND - DO I=1,IM + DO I=ISTA,IEND UST(I,J) = 0.0 VST(I,J) = 0.0 HELI(I,J,1) = 0.0 @@ -191,8 +155,8 @@ SUBROUTINE CALHEL2(LLOW,LUPP,DEPTH,UST,VST,HELI,CANGLE) IVE(J) = MOD(J,2) IVW(J) = IVE(J)-1 enddo - ISTART = 2 - ISTOP = IM-1 + ISTART = ISTA_M + ISTOP = IEND_M JSTART = JSTA_M JSTOP = JEND_M ELSE IF(gridtype == 'B')THEN @@ -202,8 +166,8 @@ SUBROUTINE CALHEL2(LLOW,LUPP,DEPTH,UST,VST,HELI,CANGLE) IVE(J)=1 IVW(J)=0 enddo - ISTART = 2 - ISTOP = IM-1 + ISTART = ISTA_M + ISTOP = IEND_M JSTART = JSTA_M JSTOP = JEND_M ELSE @@ -213,8 +177,8 @@ SUBROUTINE CALHEL2(LLOW,LUPP,DEPTH,UST,VST,HELI,CANGLE) IVE(J) = 0 IVW(J) = 0 enddo - ISTART = 1 - ISTOP = IM + ISTART = ISTA + ISTOP = IEND JSTART = JSTA JSTOP = JEND END IF @@ -229,9 +193,9 @@ SUBROUTINE CALHEL2(LLOW,LUPP,DEPTH,UST,VST,HELI,CANGLE) ! END DO ! !!$omp parallel do private(htsfc,ie,iw) - IF(gridtype /= 'A') CALL EXCH(FIS(1:IM,JSTA_2L:JEND_2U)) + IF(gridtype /= 'A') CALL EXCH(FIS(ISTA_2L:IEND_2U,JSTA_2L:JEND_2U)) DO L = 1,LM - IF(gridtype /= 'A') CALL EXCH(ZMID(1:IM,JSTA_2L:JEND_2U,L)) + IF(gridtype /= 'A') CALL EXCH(ZMID(ISTA_2L:IEND_2U,JSTA_2L:JEND_2U,L)) DO J=JSTART,JSTOP DO I=ISTART,ISTOP IE = I+IVE(J) diff --git a/sorc/ncep_post.fd/CALHEL3.f b/sorc/ncep_post.fd/CALHEL3.f index 976778bfb..c56718cfb 100644 --- a/sorc/ncep_post.fd/CALHEL3.f +++ b/sorc/ncep_post.fd/CALHEL3.f @@ -1,82 +1,48 @@ !> @file -! . . . -!> SUBPROGRAM: CALHEL COMPUTES STORM RELATIVE HELICITY -!! PRGRMMR: BALDWIN ORG: W/NP2 DATE: 94-08-22 -!! -!! ABSTRACT: -!! THIS ROUTINE COMPUTES ESTIMATED STORM MOTION AND -!! STORM-RELATIVE ENVIRONMENTAL HELICITY. -!! (DAVIES-JONES ET AL 1990) THE ALGORITHM PROCEEDS AS -!! FOLLOWS. -!! -!! THE STORM MOTION COMPUTATION NO LONGER EMPLOYS THE DAVIES AND -!! JOHNS (1993) METHOD WHICH DEFINED STORM MOTION AS 30 DEGREES TO -!! THE RIGHT OF THE 0-6 KM MEAN WIND AT 75% OF THE SPEED FOR MEAN -!! SPEEDS LESS THAN 15 M/S AND 20 DEGREES TO THE RIGHT FOR SPEEDS -!! GREATER THAN 15 M/S. INSTEAD, WE NOW USE THE DYNAMIC METHOD -!! (BUNKERS ET AL. 1998) WHICH HAS BEEN FOUND TO DO BETTER IN -!! CASES WITH 'NON-CLASSIC' HODOGRAPHS (SUCH AS NORTHWEST-FLOW -!! EVENTS) AND DO AS WELL OR BETTER THAN THE OLD METHOD IN MORE -!! CLASSIC SITUATIONS. -!! -!! PROGRAM HISTORY LOG: -!! 94-08-22 MICHAEL BALDWIN -!! 97-03-27 MICHAEL BALDWIN - SPEED UP CODE -!! 98-06-15 T BLACK - CONVERSION FROM 1-D TO 2-D -!! 00-01-04 JIM TUCCILLO - MPI VERSION -!! 00-01-10 G MANIKIN - CHANGED TO BUNKERS METHOD -!! 02-05-22 G MANIKIN - NOW ALLOW CHOICE OF COMPUTING -!! HELICITY OVER TWO DIFFERENT -!! (0-1 and 0-3 KM) DEPTHS -!! 03-03-25 G MANIKIN - MODIFIED CODE TO COMPUTE MEAN WINDS -!! USING ARITHMETIC AVERAGES INSTEAD OF -!! MASS WEIGHTING; DIFFERENCES ARE MINOR -!! BUT WANT TO BE CONSISTENT WITH THE -!! BUNKERS METHOD -!! 04-04-16 M PYLE - MINIMAL MODIFICATIONS, BUT PUT INTO -!! NMM WRFPOST CODE -!! 05=02-25 H CHUANG - ADD COMPUTATION FOR ARW A GRID -!! 05-07-07 BINBIN ZHOU - ADD RSM FOR A GRID -!! 19-09-03 J MENG - MODIFIED TO COMPUTE EFFECTIVE HELICITY -!! AND CRITICAL ANGLE -!! 21-03-15 E COLON - CALHEL2 MODIFIED TO COMPUTE EFFECTIVE -!! RATHER THAN FIXED LAYER HELICITY -!! USAGE: CALHEL3(UST,VST,HELI) -!! INPUT ARGUMENT LIST: -!! LLOW - LOWER BOUND CAPE>=100 AND CINS>=-250 -!! LUPP - UPPER BOUND CAPE< 100 OR CINS< -250 -!! -!! OUTPUT ARGUMENT LIST: -!! UST - ESTIMATED U COMPONENT (M/S) OF STORM MOTION. -!! VST - ESTIMATED V COMPONENT (M/S) OF STORM MOTION. -!! HELI - STORM-RELATIVE HELICITY (M**2/S**2) -!! CRA -!! USHR1 - U COMPONENT (M/S) OF 0-1 KM SHEAR -!! VSHR1 - V COMPONENT (M/S) OF 0-1 KM SHEAR -!! USHR6 - U COMPONENT (M/S) OF 0-0.5 to 5.5-6.0 KM SHEAR -!! VSHR6 - V COMPONENT (M/S) OF 0-0.5 to 5.5-6.0 KM SHEAR -!! CRA - -!! -!! OUTPUT FILES: -!! NONE -!! -!! SUBPROGRAMS CALLED: -!! UTILITIES: -!! -!! LIBRARY: -!! COMMON - VRBLS -!! LOOPS -!! PHYS -!! EXTRA -!! MASKS -!! OPTIONS -!! INDX -!! -!! ATTRIBUTES: -!! LANGUAGE: FORTRAN 90 -!! MACHINE : IBM SP -!! +!> @brief Subroutine that computes storm relative helicity. +! +!> This routine computes estimated storm motion and storm-relative +!> environmental helicity. (Davies-Jones et al 1990) the algorithm +!> processd as follows. +!> +!> The storm motion computation no longer employs the Davies and Johns (1993) +!> method which defined storm motion as 30 degress to the right of the 0-6 km +!> mean wind at 75% of the speed for mean speeds less than 15 m/s and 20 degrees +!> to the right for speeds greater than 15 m/s. Instead, we now use the dynamic +!> method (Bunkers et al. 1988) which has been found to do better in cases with +!> 'non-classic' hodographs (such as Northwest-flow events) and do as well or +!> better than the old method in more classic situations. +!> +!> @param[in] LLOW Lower bound CAPE>=100 and CINS>=-250. +!> @param[in] LUPP Upper bound CAPE< 100 or CINS< -250; allows one to distinguish 0-3 km and 0-1 km values. +!> @param[out] UST Estimated U Component (m/s) Of Storm motion. +!> @param[out] VST Estimated V Component (m/s) Of Storm motion. +!> @param[out] HELI Storm-relative heliciry (m**2/s**2). +!> @param[out] CANGLE Critical angle. +!> @param[out] USHR1 U Component (m/s) Of 0-1 km shear. +!> @param[out] VSHR1 V Component (m/s) Of 0-1 km shear. +!> @param[out] USHR6 U Component (m/s) Of 0-0.5 to 5.5-6.0 km shear. +!> @param[out] VSHR6 V Component (m/s) Of 0-0.5 to 5.5-6.0 km shear. +!> +!> ### Program history log: +!> Date | Programmer | Comments +!> -----|------------|--------- +!> 1994-08-22 | Michael Baldwin | Initial +!> 1997-03-27 | Michael Baldwin | Speed up code +!> 1998-06-15 | T Black | Conversion from 1-D to 2-D +!> 2000-01-04 | Jim Tuccillo | MPI Version +!> 2000-01-10 | G Manikin | Changed to Bunkers method +!> 2002-05-22 | G Manikin | Now allow choice of computing helicity over two different (0-1 and 0-3 km) depths +!> 2003-03-25 | G Manikin | Modified code to compute mean winds using arithmetic averages instead of mass weighting; differences are minor but want to be consistent with the Bunkers method +!> 2004-04-16 | M Pyle | Minimal modifications but put into NMM WRFPOST code +!> 2005-02-25 | H Chuang | Add computation for ARW A grid +!> 2005-07-07 | Binbin Zhou | Add RSM for A grid +!> 2019-09-03 | J Meng | Modified to compute effective helicity and critical angle +!> 2021-03-15 | E Colon | CALHEL2 modified to compute effective rather than fixed layer helicity +!> 2021-09-02 | Bo Cui | Decompose UPP in X direction +!> 2022-05-12 | E Colon | Resolved a bug which looped over the calculation of SRH at two fixed levels, erroneously doubling the magnitude. +!> +!> @author Michael Baldwin W/NP2 @date 1994-08-22 SUBROUTINE CALHEL3(LLOW,LUPP,UST,VST,HELI) ! @@ -86,7 +52,8 @@ SUBROUTINE CALHEL3(LLOW,LUPP,UST,VST,HELI) use params_mod, only: g use lookup_mod, only: ITB,JTB,ITBQ,JTBQ use ctlblk_mod, only: jsta, jend, jsta_m, jend_m, jsta_2l, jend_2u, & - lm, im, jm, me, spval + lm, im, jm, me, spval, & + ista, iend, ista_m, iend_m, ista_2l, iend_2u use gridspec_mod, only: gridtype !- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - implicit none @@ -104,15 +71,15 @@ SUBROUTINE CALHEL3(LLOW,LUPP,UST,VST,HELI) ! ! DECLARE VARIABLES ! - integer,dimension(IM,jsta_2l:jend_2u),intent(in) :: LLOW, LUPP - REAL,dimension(IM,jsta_2l:jend_2u), intent(out) :: UST,VST - REAL,dimension(IM,jsta_2l:jend_2u),intent(out) :: HELI + integer,dimension(ista_2l:iend_2u,jsta_2l:jend_2u),intent(in) :: LLOW, LUPP + REAL,dimension(ista_2l:iend_2u,jsta_2l:jend_2u), intent(out) :: UST,VST + REAL,dimension(ista_2l:iend_2u,jsta_2l:jend_2u),intent(out) :: HELI ! - real, dimension(im,jsta_2l:jend_2u) :: HTSFC, UST6, VST6, UST5, VST5, & + real, dimension(ista_2l:iend_2u,jsta_2l:jend_2u) :: HTSFC, UST6, VST6, UST5, VST5, & UST1, VST1, USHR1, VSHR1, & USHR6, VSHR6, U1, V1, U2, V2, & HGT1, HGT2, UMEAN, VMEAN - real, dimension(im,jsta_2l:jend_2u) :: USHR05,VSHR05,ELT,ELB + real, dimension(ista_2l:iend_2u,jsta_2l:jend_2u) :: USHR05,VSHR05,ELT,ELB ! REAL HTSFC(IM,JM) ! @@ -125,7 +92,7 @@ SUBROUTINE CALHEL3(LLOW,LUPP,UST,VST,HELI) ! REAL HGT1(IM,JM),HGT2(IM,JM),UMEAN(IM,JM),VMEAN(IM,JM) ! CRA - integer, dimension(im,jsta_2l:jend_2u) :: COUNT6, COUNT5, COUNT1, L1, L2 + integer, dimension(ista_2l:iend_2u,jsta_2l:jend_2u) :: COUNT6, COUNT5, COUNT1, L1, L2 ! INTEGER COUNT6(IM,JM),COUNT5(IM,JM),COUNT1(IM,JM) ! CRA ! INTEGER L1(IM,JM),L2(IM,JM) @@ -144,7 +111,7 @@ SUBROUTINE CALHEL3(LLOW,LUPP,UST,VST,HELI) ! !$omp parallel do private(i,j) DO J=JSTA,JEND - DO I=1,IM + DO I=ISTA,IEND UST(I,J) = 0.0 VST(I,J) = 0.0 HELI(I,J) = 0.0 @@ -185,8 +152,8 @@ SUBROUTINE CALHEL3(LLOW,LUPP,UST,VST,HELI) IVE(J) = MOD(J,2) IVW(J) = IVE(J)-1 enddo - ISTART = 2 - ISTOP = IM-1 + ISTART = ISTA_M + ISTOP = IEND_M JSTART = JSTA_M JSTOP = JEND_M ELSE IF(gridtype == 'B')THEN @@ -196,8 +163,8 @@ SUBROUTINE CALHEL3(LLOW,LUPP,UST,VST,HELI) IVE(J)=1 IVW(J)=0 enddo - ISTART = 2 - ISTOP = IM-1 + ISTART = ISTA_M + ISTOP = IEND_M JSTART = JSTA_M JSTOP = JEND_M ELSE @@ -207,8 +174,8 @@ SUBROUTINE CALHEL3(LLOW,LUPP,UST,VST,HELI) IVE(J) = 0 IVW(J) = 0 enddo - ISTART = 1 - ISTOP = IM + ISTART = ISTA + ISTOP = IEND JSTART = JSTA JSTOP = JEND END IF @@ -223,9 +190,9 @@ SUBROUTINE CALHEL3(LLOW,LUPP,UST,VST,HELI) ! END DO ! !!$omp parallel do private(htsfc,ie,iw) - IF(gridtype /= 'A') CALL EXCH(FIS(1:IM,JSTA_2L:JEND_2U)) + IF(gridtype /= 'A') CALL EXCH(FIS(ISTA_2L:IEND_2U,JSTA_2L:JEND_2U)) DO L = 1,LM - IF(gridtype /= 'A') CALL EXCH(ZMID(1:IM,JSTA_2L:JEND_2U,L)) + IF(gridtype /= 'A') CALL EXCH(ZMID(ISTA_2L:IEND_2U,JSTA_2L:JEND_2U,L)) DO J=JSTART,JSTOP DO I=ISTART,ISTOP IE = I+IVE(J) @@ -407,7 +374,6 @@ SUBROUTINE CALHEL3(LLOW,LUPP,UST,VST,HELI) ! COMPUTE STORM-RELATIVE HELICITY ! !!$omp parallel do private(i,j,n,l,du1,du2,dv1,dv2,dz,dz1,dz2,dzabv,ie,iw,jn,js,z1,z2,z3) - DO N=1,2 ! for dfferent helicity depth DO L = 2,LM-1 if(GRIDTYPE /= 'A')then call exch(ZINT(1,jsta_2l,L)) @@ -476,7 +442,6 @@ SUBROUTINE CALHEL3(LLOW,LUPP,UST,VST,HELI) ENDDO ENDDO ENDDO - END DO ! end of different helicity depth ! END OF ROUTINE. ! diff --git a/sorc/ncep_post.fd/CALLCL.f b/sorc/ncep_post.fd/CALLCL.f index 1f65cf9bb..6cc377511 100644 --- a/sorc/ncep_post.fd/CALLCL.f +++ b/sorc/ncep_post.fd/CALLCL.f @@ -1,49 +1,33 @@ !> @file -! -!> SUBPROGRAM: CALLCL COMPUTES LCL HEIGHTS AND PRESSURE -!! PRGRMMR: TREADON ORG: W/NP2 DATE: 93-03-15 -!! -!! ABSTRACT: -!! THIS ROUTINE COMPUTES THE LIFTING CONDENSATION LEVEL -!! PRESSURE AND HEIGHT IN EACH COLUMN AT MASS POINTS. -!! THE HEIGHT IS ABOVE GROUND LEVEL. THE EQUATION USED -!! TO FIND THE LCL PRESSURE IS FROM BOLTAN (1980,MWR) -!! AND IS THE SAME AS THAT USED IN SUBROUTINE CALCAPE. -!! -!! THIS ROUTINE IS A TEST VERSION. STILL TO BE RESOLVED -!! IS THE "BEST" PARCEL TO LIFT. -!! -!! PROGRAM HISTORY LOG: -!! 93-03-15 RUSS TREADON -!! 98-06-16 T BLACK - CONVERSION FROM 1-D TO 2-D -!! 00-01-04 JIM TUCCILLO - MPI VERSION -!! 02-04-24 MIKE BALDWIN - WRF VERSION -!! 19-10-30 Bo CUI - REMOVE "GOTO" STATEMENT -!! -!! USAGE: CALL CALLCL(P1D,T1D,Q1D,PLCL,ZLCL) -!! INPUT ARGUMENT LIST: -!! P1D - ARRAY OF PARCEL PRESSURES (PA) -!! T1D - ARRAY OF PARCEL TEMPERATURES (K) -!! Q1D - ARRAY OF PARCEL SPECIFIC HUMIDITIES (KG/KG) -!! -!! OUTPUT ARGUMENT LIST: -!! PLCL - PARCEL PRESSURE AT LCL (PA) -!! ZLCL - PARCEL AGL HEIGHT AT LCL (M) -!! -!! OUTPUT FILES: -!! NONE -!! -!! SUBPROGRAMS CALLED: -!! UTILITIES: -!! NONE -!! LIBRARY: -!! COMMON - LOOPS -!! OPTIONS -!! -!! ATTRIBUTES: -!! LANGUAGE: FORTRAN 90 -!! MACHINE : CRAY C-90 -!! +!> @brief Subroutine that computes LCL heights and pressure. +!> +!> This routine computes the lifting condensation level +!> pressure and height in each column at mass points. +!> The height is above ground level. The equation used +!> to find the LCL pressure is from Boltan (1980, MWR) +!> and is the same as that used in subroutine CALCAPE. +!> +!> This is a test version. Still to be resolved +!> is the "best" parcel to lift. +!> +!> @param[in] P1D Array of parcel pressures (Pa). +!> @param[in] T1D Array of parcel temperatures (K). +!> @param[in] Q1D Array of parcel specific humidities (kg/kg). +!> @param[out] PLCL Parcel Pressure at LCL (Pa). +!> @param[out] ZLCL Parcel AGL height at LCL (m). +!> +!> ### Program history log: +!> Date | Programmer | Comments +!> -----|------------|--------- +!> 1993-03-15 | Russ Treadon | Initial +!> 1998-06-16 | T Black | Convesion from 1-D to 2-D +!> 2000-01-04 | Jim Tuccillo | MPI Version +!> 2002-04-24 | Mike Baldwin | WRF Version +!> 2019-10-30 | Bo Cui | Remove "GOTO" Statement +!> 2021-07-28 | W Meng | Restriction compuatation from undefined grids +!> 2021-09-02 | Bo Cui | Decompose UPP in X direction +!> +!> @author Russ Treadon W/NP2 @date 1993-03-15 SUBROUTINE CALLCL(P1D,T1D,Q1D,PLCL,ZLCL) ! @@ -52,7 +36,8 @@ SUBROUTINE CALLCL(P1D,T1D,Q1D,PLCL,ZLCL) use vrbls2d, only: fis use masks, only: lmh use params_mod, only: eps, oneps, d01, h1m12, gi, d00 - use ctlblk_mod, only: jsta, jend, spval, jsta_m, jend_m, im + use ctlblk_mod, only: jsta, jend, spval, jsta_m, jend_m, im, & + ista, iend, ista_m, iend_m !- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - implicit none ! @@ -61,9 +46,9 @@ SUBROUTINE CALLCL(P1D,T1D,Q1D,PLCL,ZLCL) ! ! DECLARE VARIABLES. ! - REAL,dimension(IM,jsta:jend), intent(in) :: P1D,T1D,Q1D - REAL,dimension(IM,jsta:jend), intent(inout) :: PLCL,ZLCL - REAL TLCL(IM,jsta:jend) + REAL,dimension(ista:iend,jsta:jend), intent(in) :: P1D,T1D,Q1D + REAL,dimension(ista:iend,jsta:jend), intent(inout) :: PLCL,ZLCL + REAL TLCL(ista:iend,jsta:jend) integer I,J,L,LLMH real DLPLCL,ZSFC,DZ,DALP,ALPLCL,RMX,EVP,ARG,RKAPA ! @@ -74,7 +59,7 @@ SUBROUTINE CALLCL(P1D,T1D,Q1D,PLCL,ZLCL) ! !$omp parallel do private(i,j) DO J=JSTA,JEND - DO I=1,IM + DO I=ISTA,IEND PLCL(I,J) = SPVAL TLCL(I,J) = SPVAL ZLCL(I,J) = SPVAL @@ -86,8 +71,8 @@ SUBROUTINE CALLCL(P1D,T1D,Q1D,PLCL,ZLCL) ! Bo Cui 10/30/2019, remove "GOTO" statement DO 30 J=JSTA_M,JEND_M - DO 30 I=2,IM-1 -! DO 30 I=1,IM + DO 30 I=ISTA_M,IEND_M + IF(P1D(I,J) @file -! -!> SUBPROGRAM: CALMCVG COMPUTES MOISTURE CONVERGENCE -!! PRGRMMR: TREADON ORG: W/NP2 DATE: 93-01-22 -!! -!! ABSTRACT: -!! GIVEN SPECIFIC HUMIDITY, Q, AND THE U-V WIND COMPONENTS -!! THIS ROUTINE EVALUATES THE VECTOR OPERATION, -!! DEL DOT (Q*VEC) -!! WHERE, -!! DEL IS THE VECTOR GRADIENT OPERATOR, -!! DOT IS THE STANDARD DOT PRODUCT OPERATOR, AND -!! VEC IS THE VECTOR WIND. -!! MINUS ONE TIMES THE RESULTING SCALAR FIELD IS THE -!! MOISTURE CONVERGENCE WHICH IS RETURNED BY THIS ROUTINE. -!! -!! PROGRAM HISTORY LOG: -!! 93-01-22 RUSS TREADON -!! 98-06-08 T BLACK - CONVERSION FROM 1-D TO 2-D -!! 00-01-04 JIM TUCCILLO - MPI VERSION -!! 02-04-23 MIKE BALDWIN - WRF C-GRID VERSION -!! 05-07-07 BINBIN ZHOU - ADD RSM A GRID -!! 06-04-25 H CHUANG - BUG FIXES TO CORECTLY COMPUTE MC AT BOUNDARIES -!! 21-04-01 J MENG - COMPUTATION ON DEFINED POINTS ONLY -!! -!! USAGE: CALL CALMCVG(Q1D,U1D,V1D,QCNVG) -!! INPUT ARGUMENT LIST: -!! Q1D - SPECIFIC HUMIDITY AT P-POINTS (KG/KG) -!! U1D - U WIND COMPONENT (M/S) AT P-POINTS -!! V1D - V WIND COMPONENT (M/S) AT P-POINTS -!! -!! OUTPUT ARGUMENT LIST: -!! QCNVG - MOISTURE CONVERGENCE (1/S) AT P-POINTS -!! -!! OUTPUT FILES: -!! NONE -!! -!! SUBPROGRAMS CALLED: -!! UTILITIES: -!! NONE -!! LIBRARY: -!! COMMON - MASKS -!! DYNAM -!! OPTIONS -!! INDX -!! -!! ATTRIBUTES: -!! LANGUAGE: FORTRAN 90 -!! MACHINE : CRAY C-90 -!! +!> @brief Subroutine that computes moisture convergence. +!> +!>
+!> Given specific humidity, Q, and the U-V wind components
+!> This routine evaluates the vector operation, 
+!>                  DEL DOT (Q*VEC)
+!> where,
+!>    DEL is the vector gradient operator,
+!>    DOT is the standard dot product operator, and
+!>    VEC is the vector wind.
+!> Minus one times the resulting scalar field is the 
+!> moisture convergence which is returned by this routine.
+!>
+!> +!> @param[in] Q1D - Specific humidity at P-points (kg/kg). +!> @param[in] U1D - U wind component (m/s) at P-points. +!> @param[in] V1D - V wind component (m/s) at P-points. +!> @param[out] QCNVG - Moisture convergence (1/s) at P-points. +!> +!> ### Program history log: +!> Date | Programmer | Comments +!> -----|------------|--------- +!> 1993-01-22 | Russ Treadon | Initial +!> 1998-06-08 | T Black | Conversion From 1-D To 2-D +!> 2000-01-04 | Jim Tuccillo | MPI Version +!> 2002-04-23 | Mike Baldwin | WRF C-Grid Version +!> 2005-07-07 | Binbin Zhou | Add RSM A Grid +!> 2006-04-25 | H Chuang | Bug fixes to correctly compute MC at boundaries +!> 2021-04-01 | J Meng | Computation on defined points only +!> 2021-09-02 | B CUI | REPLACE EXCH_F to EXCH +!> 2021-09-30 | J MENG | 2D DECOMPOSITION +!> +!> @author Russ Treadon W/NP2 @date 1993-01-22 SUBROUTINE CALMCVG(Q1D,U1D,V1D,QCNVG) ! @@ -56,20 +40,21 @@ SUBROUTINE CALMCVG(Q1D,U1D,V1D,QCNVG) use masks, only: dx, dy, hbm2 use params_mod, only: d00, d25 use ctlblk_mod, only: jsta_2l, jend_2u, spval, jsta_m, jend_m, & - jsta_m2, jend_m2, im, jm + jsta_m2, jend_m2, im, jm, & + ista_2l, iend_2u, ista_m, iend_m, ista_m2, iend_m2 use gridspec_mod, only: gridtype !- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - implicit none ! ! DECLARE VARIABLES. ! - REAL,dimension(IM,jsta_2l:jend_2u),intent(in) :: Q1D, U1D, V1D - REAL,dimension(IM,jsta_2l:jend_2u),intent(inout) :: QCNVG + REAL,dimension(ista_2l:iend_2u,jsta_2l:jend_2u),intent(in) :: Q1D, U1D, V1D + REAL,dimension(ista_2l:iend_2u,jsta_2l:jend_2u),intent(inout) :: QCNVG REAL R2DY, R2DX - REAL, dimension(im,jsta_2l:jend_2u) :: UWND, VWND, QV + REAL, dimension(ista_2l:iend_2u,jsta_2l:jend_2u) :: UWND, VWND, QV INTEGER IHE(JM),IHW(JM),IVE(JM),IVW(JM) - integer I,J,ISTA,IEND + integer I,J,ISTA2,IEND2 real QVDY,QUDX ! !*************************************************************************** @@ -78,26 +63,34 @@ SUBROUTINE CALMCVG(Q1D,U1D,V1D,QCNVG) ! ! INITIALIZE MOISTURE CONVERGENCE ARRAY. LOAD TEMPORARY WIND ARRAYS. ! + CALL EXCH(Q1D) + CALL EXCH(U1D) + CALL EXCH(V1D) + !$omp parallel do private(i,j) DO J=JSTA_2L,JEND_2U - DO I=1,IM +! DO I=1,IM + DO I=ISTA_2L,IEND_2U + IF(U1D(I,J) @file -! . . . -!> SUBPROGRAM: CALMIC COMPUTES HYDROMETEORS -!! PRGRMMR: JIN ORG: W/NP2 DATE: 01-08-14 -!! -!! ABSTRACT: -!! THIS ROUTINE COMPUTES THE MIXING RATIOS OF CLOUD WATER, -!! CLOUD ICE, RAIN, AND SNOW. THE CODE IS BASED ON SUBROUTINES -!! GSMDRIVE & GSMCOLUMN IN THE NMM MODEL. -!! -!! PROGRAM HISTORY LOG: -!! 01-08-14 YI JIN -!! 02-02-11 Brad Ferrier - Minor changes for consistency w/ NMM model -!! 04-11-10 Brad Ferrier - Removed cloud fraction algorithm -!! 04-11-17 H CHUANG - WRF VERSION -!! 14-03-11 B Ferrier - Created new & old versions of this subroutine -!! to process new & old versions of the microphysics -!! -!! USAGE: CALL CALMICT_new(P1D,T1D,Q1D,C1D,FI1D,FR1D,FS1D,CUREFL -!! &, QW1,QI1,QR1,QS1,DBZ1,DBZR1,DBZI1,DBZC1) -!! INPUT ARGUMENT LIST: -!! P1D - PRESSURE (PA) -!! T1D - TEMPERATURE (K) -!! Q1D - SPECIFIC HUMIDITY (KG/KG) -!! C1D - TOTAL CONDENSATE (CWM, KG/KG) -!! FI1D - F_ice (fraction of condensate in form of ice) -!! FR1D - F_rain (fraction of liquid water in form of rain) -!! FS1D - F_RimeF ("Rime Factor", ratio of total ice growth -!! to deposition growth) -!! CUREFL - Radar reflectivity contribution from convection (mm**6/m**3) -!! -!! OUTPUT ARGUMENT LIST: -!! QW1 - CLOUD WATER MIXING RATIO (KG/KG) -!! QI1 - CLOUD ICE MIXING RATIO (KG/KG) -!! QR1 - RAIN MIXING RATIO (KG/KG) -!! QS1 - "SNOW" (precipitation ice) MIXING RATIO (KG/KG) -!! DBZ1 - Equivalent radar reflectivity factor in dBZ; i.e., 10*LOG10(Z) -!! DBZR - Equivalent radar reflectivity factor from rain in dBZ -!! DBZI - Equivalent radar reflectivity factor from ice (all forms) in dBZ -!! DBZC - Equivalent radar reflectivity factor from parameterized convection in dBZ -!! -!! OUTPUT FILES: -!! NONE -!! -!! SUBPROGRAMS CALLED: -!! FUNCTIONS: -!! FPVS -!! UTILITIES: -!! LIBRARY: -!! NONE -!! -!! ATTRIBUTES: -!! LANGUAGE: FORTRAN -!! MACHINE : IBM SP -!! +!> @brief Subroutine that computes hydrometeors. +!> +!> This routin computes the mixing ratios of cloud water, +!> cloud ice, rain, and snow. The code is based on subroutines +!> GSMDRIVE and GSMCOLUMN in the NMM model. +!> +!> @param[in] P1D Pressure (Pa). +!> @param[in] T1D Temperature (K). +!> @param[in] Q1D Specific humidity (kg/kg). +!> @param[in] C1D Total condensate (CWM, kg/kg). +!> @param[in] FI1D F_ice (fraction of condensate in form of ice). +!> @param[in] FR1D F_rain (fraction of liquid water in form of rain). +!> @param[in] FS1D F_RimeF ("Rime Factor", ratio of total ice growth to deposition growth). +!> @param[in] CUREFL Radar reflectivity contribution from convection (mm**6/m**3). +!> @param[out] QW1 Cloud water mixing ratio (kg/kg). +!> @param[out] QI1 Cloud ice mixing ratio (kg/kg). +!> @param[out] QR1 Rain mixing ratio (kg/kg). +!> @param[out] QS1 "Snow" (precipitation ice) mixing ratio (kg/kg). +!> @param[out] DBZ1 Equivalent radar reflectivity factor in dBZ; i.e., 10*LOG10(Z). +!> @param[out] DBZR Equivalent radar reflectivity factor from rain in dBZ. +!> @param[out] DBZI Equivalent radar reflectivity factor from ice (all forms) in dBZ. +!> @param[out] DBZC Equivalent radar reflectivity factor from parameterized convection in dBZ. +!> +!> ### Program history log: +!> Date | Programmer | Comments +!> -----|------------|--------- +!> 2001-08-14 | Yi Jin | Initial +!> 2002-02-11 | Brad Ferrier | Minor changes for consistency w/ NMM model +!> 2004-11-10 | Brad Ferrier | Removed cloud fraction algorithm +!> 2004-11-17 | H Chuang | WRF VERSION +!> 2014-03-11 | Brad Ferrier | Created new & old versions of this subroutine to process new & old versions of the microphysics +!> 2021-09-02 | Bo Cui | Decompose UPP in X direction +!> +!> @author Yi Jin W/NP2 @date 2001-08-14 SUBROUTINE CALMICT_new(P1D,T1D,Q1D,C1D,FI1D,FR1D,FS1D,CUREFL, & QW1,QI1,QR1,QS1,DBZ1,DBZR1,DBZI1,DBZC1,NLICE1,NRAIN1) ! use params_mod, only: dbzmin, epsq, tfrz, eps, rd, d608 - use ctlblk_mod, only: jsta, jend, jsta_2l,jend_2u,im + use ctlblk_mod, only: jsta, jend, jsta_2l, jend_2u,im, & + ista, iend, ista_2l, iend_2u use cmassi_mod, only: t_ice, rqr_drmin, n0rmin, cn0r_dmrmin, & mdrmin, rqr_drmax, cn0r_dmrmax, mdrmax, n0r0, xmrmin, & xmrmax, massi, cn0r0, mdimin, xmimax, mdimax @@ -70,9 +51,9 @@ SUBROUTINE CALMICT_new(P1D,T1D,Q1D,C1D,FI1D,FR1D,FS1D,CUREFL, & REAL, PARAMETER :: Cice=1.634e13, Cwet=1./.189, Cboth=Cice/.224, & & NLI_min=1.E3, RFmax=45.259, RQmix=0.1E-3,NSI_max=250.E3 !aligo - real,dimension(IM,jsta_2l:jend_2u),intent(in) :: P1D,T1D,Q1D,C1D,FI1D,FR1D, & + real,dimension(ista_2l:iend_2u,jsta_2l:jend_2u),intent(in) :: P1D,T1D,Q1D,C1D,FI1D,FR1D, & FS1D,CUREFL - real,dimension(IM,jsta_2l:jend_2u),intent(inout) :: QW1,QI1,QR1,QS1,DBZ1,DBZR1,& + real,dimension(ista_2l:iend_2u,jsta_2l:jend_2u),intent(inout) :: QW1,QI1,QR1,QS1,DBZ1,DBZR1,& DBZI1,DBZC1,NLICE1,NRAIN1 integer I,J @@ -88,7 +69,7 @@ SUBROUTINE CALMICT_new(P1D,T1D,Q1D,C1D,FI1D,FR1D,FS1D,CUREFL, & ! Zmin=10.**(0.1*DBZmin) DO J=JSTA,JEND - DO I=1,IM + DO I=ISTA,IEND QW1(I,J)=0. QI1(I,J)=0. QR1(I,J)=0. @@ -102,7 +83,7 @@ SUBROUTINE CALMICT_new(P1D,T1D,Q1D,C1D,FI1D,FR1D,FS1D,CUREFL, & ENDDO ENDDO DO J=JSTA,JEND - DO I=1,IM + DO I=ISTA,IEND Ztot=0. !--- Total radar reflectivity Zrain=0. !--- Radar reflectivity from rain Zice=0. !--- Radar reflectivity from ice @@ -320,68 +301,42 @@ SUBROUTINE CALMICT_new(P1D,T1D,Q1D,C1D,FI1D,FR1D,FS1D,CUREFL, & ! SUBROUTINE CALMICT_old(P1D,T1D,Q1D,C1D,FI1D,FR1D,FS1D,CUREFL, & QW1,QI1,QR1,QS1,DBZ1,DBZR1,DBZI1,DBZC1,NLICE1,NRAIN1) -!$$$ SUBPROGRAM DOCUMENTATION BLOCK -! . . . -! SUBPROGRAM: CALMICT_old COMPUTES HYDROMETEORS FROM THE OLDER VERSION -! OF THE MICROPHYSICS -! -! PRGRMMR: JIN ORG: W/NP2 DATE: 01-08-14 -! -! ABSTRACT: -! THIS ROUTINE COMPUTES THE MIXING RATIOS OF CLOUD WATER, CLOUD ICE, -! RAIN, AND SNOW. THE CODE IS BASED ON OPTION MP_PHYSICS==95 IN THE -! WRF NAMELIST AND OPTION MICRO='fer' in NMMB CONFIGURE FILES. -! -! PROGRAM HISTORY LOG: -! 01-08-14 YI JIN -! 02-02-11 Brad Ferrier - Minor changes for consistency w/ NMM model -! 04-11-10 Brad Ferrier - Removed cloud fraction algorithm -! 04-11-17 H CHUANG - WRF VERSION -! 14-03-11 B Ferrier - Created new & old versions of this subroutine -! to process new & old versions of the microphysics -! -! USAGE: CALL CALMICT_old(P1D,T1D,Q1D,C1D,FI1D,FR1D,FS1D,CUREFL -! &, QW1,QI1,QR1,QS1,DBZ1,DBZR1,DBZI1,DBZC1) -! -! INPUT ARGUMENT LIST: -! P1D - PRESSURE (PA) -! T1D - TEMPERATURE (K) -! Q1D - SPECIFIC HUMIDITY (KG/KG) -! C1D - TOTAL CONDENSATE (CWM, KG/KG) -! FI1D - F_ice (fraction of condensate in form of ice) -! FR1D - F_rain (fraction of liquid water in form of rain) -! FS1D - F_RimeF ("Rime Factor", ratio of total ice growth -! to deposition growth) -! CUREFL - Radar reflectivity contribution from convection (mm**6/m**3) -! -! OUTPUT ARGUMENT LIST: -! QW1 - CLOUD WATER MIXING RATIO (KG/KG) -! QI1 - CLOUD ICE MIXING RATIO (KG/KG) -! QR1 - RAIN MIXING RATIO (KG/KG) -! QS1 - "SNOW" (precipitation ice) MIXING RATIO (KG/KG) -! DBZ1 - Equivalent radar reflectivity factor in dBZ; i.e., 10*LOG10(Z) -! DBZR - Equivalent radar reflectivity factor from rain in dBZ -! DBZI - Equivalent radar reflectivity factor from ice (all forms) in dBZ -! DBZC - Equivalent radar reflectivity factor from parameterized convection -! in dBZ -! -! OUTPUT FILES: -! NONE -! -! SUBPROGRAMS CALLED: -! FUNCTIONS: -! FPVS -! UTILITIES: -! LIBRARY: -! NONE -! -! ATTRIBUTES: -! LANGUAGE: FORTRAN -! MACHINE : IBM SP -!$$$ -! +!> CALMICT_old computes hydrometeors from the older version of the microphysics. +!> +!> This routin computes the mixing ratios of cloud water, cloud ice, +!> rain, and snow. The code is based on option MP_PHYSICS==95 in the +!> WRF namelist and option MICRO='fer' in NMMB configure files. +!> +!> @param[in] P1D Pressure (Pa). +!> @param[in] T1D Temperature (K). +!> @param[in] Q1D Specific humidity (kg/kg). +!> @param[in] C1D Total condensate (CWM, kg/kg). +!> @param[in] FI1D F_ice (fraction of condensate in form of ice). +!> @param[in] FR1D F_rain (fraction of liquid water in form of rain). +!> @param[in] FS1D F_RimeF ("Rime Factor", ratio of total ice growth to deposition growth). +!> @param[in] CUREFL Radar reflectivity contribution from convection (mm**6/m**3). +!> @param[out] QW1 Cloud water mixing ratio (kg/kg). +!> @param[out] QI1 Cloud ice mixing ratio (kg/kg). +!> @param[out] QR1 Rain mixing ratio (kg/kg). +!> @param[out] QS1 "Snow" (precipitation ice) mixing ratio (kg/kg). +!> @param[out] DBZ1 Equivalent radar reflectivity factor in dBZ; i.e., 10*LOG10(Z). +!> @param[out] DBZR Equivalent radar reflectivity factor from rain in dBZ. +!> @param[out] DBZI Equivalent radar reflectivity factor from ice (all forms) in dBZ. +!> @param[out] DBZC Equivalent radar reflectivity factor from parameterized convection in dBZ. +!> +!> ### Program history log: +!> Date | Programmer | Comments +!> -----|------------|--------- +!> 2001-08-14 | Yi Jin | Initial +!> 2002-02-11 | Brad Ferrier | Minor changes for consistency w/ NMM model +!> 2004-11-10 | Brad Ferrier | Removed cloud fraction algorithm +!> 2004-11-17 | H Chuang | WRF VERSION +!> 2014-03-11 | Brad Ferrier | Created new & old versions of this subroutine to process new & old versions of the microphysics +!> +!> @author Yi Jin W/NP2 @date 2001-08-14 use params_mod, only: dbzmin, epsq, tfrz, eps, rd, d608, oneps, nlimin - use ctlblk_mod, only: jsta, jend, jsta_2l, jend_2u, im + use ctlblk_mod, only: jsta, jend, jsta_2l, jend_2u, im, & + ista, iend, ista_2l, iend_2u use rhgrd_mod, only: rhgrd use cmassi_mod, only: t_ice, rqr_drmin, n0rmin, cn0r_dmrmin, mdrmin, & rqr_drmax,cn0r_dmrmax, mdrmax, n0r0, xmrmin, xmrmax,flarge2, & @@ -392,9 +347,9 @@ SUBROUTINE CALMICT_old(P1D,T1D,Q1D,C1D,FI1D,FR1D,FS1D,CUREFL, & INTEGER INDEXS, INDEXR REAL, PARAMETER :: Cice=1.634e13 - real,dimension(IM,jsta_2l:jend_2u),intent(in) :: P1D,T1D,Q1D,C1D,FI1D,FR1D, & + real,dimension(ista_2l:iend_2u,jsta_2l:jend_2u),intent(in) :: P1D,T1D,Q1D,C1D,FI1D,FR1D, & FS1D,CUREFL - real,dimension(IM,jsta_2l:jend_2u),intent(inout) :: QW1,QI1,QR1,QS1,DBZ1,DBZR1,& + real,dimension(ista_2l:iend_2u,jsta_2l:jend_2u),intent(inout) :: QW1,QI1,QR1,QS1,DBZ1,DBZR1,& DBZI1,DBZC1,NLICE1,NRAIN1 REAL N0r,Ztot,Zrain,Zice,Zconv,Zmin @@ -409,7 +364,7 @@ SUBROUTINE CALMICT_old(P1D,T1D,Q1D,C1D,FI1D,FR1D,FS1D,CUREFL, & ! Zmin=10.**(0.1*DBZmin) DO J=JSTA,JEND - DO I=1,IM + DO I=ISTA,IEND QW1(I,J)=0. QI1(I,J)=0. QR1(I,J)=0. @@ -423,7 +378,7 @@ SUBROUTINE CALMICT_old(P1D,T1D,Q1D,C1D,FI1D,FR1D,FS1D,CUREFL, & ENDDO ENDDO DO J=JSTA,JEND - DO I=1,IM + DO I=ISTA,IEND Zrain=0. !--- Radar reflectivity from rain Zice=0. !--- Radar reflectivity from ice Zconv=CUREFL(I,J) !--- Radar reflectivity from convection diff --git a/sorc/ncep_post.fd/CALPBL.f b/sorc/ncep_post.fd/CALPBL.f index d71f9676a..015f4cd10 100644 --- a/sorc/ncep_post.fd/CALPBL.f +++ b/sorc/ncep_post.fd/CALPBL.f @@ -1,34 +1,18 @@ !> @file -! -!> SUBPROGRAM: CALPBL COMPUTES PBL HEIGHT BASED ON BULK RCH NUMBER -!! -!! ABSTRACT: -!! THIS ROUTINE COMPUTES THE BULK RICHARDSON NUMBER -!! AND PBL HEIGHT ABOVE SURFACE -!! -!! PROGRAM HISTORY LOG: -!! 06-05-04 M TSIDULKO -!! -!! USAGE: CALL CALPBL(PBLRI) -!! INPUT ARGUMENT LIST: -!! -!! OUTPUT ARGUMENT LIST: -!! PBLRI - PBL HEIGHT ABOVE GROUND -!! -!! OUTPUT FILES: -!! NONE -!! -!! SUBPROGRAMS CALLED: -!! UTILITIES: -!! NONE -!! LIBRARY: -!! COMMON - -!! CTLBLK -!! -!! ATTRIBUTES: -!! LANGUAGE: FORTRAN -!! MACHINE : -!! +!> @brief Subroutine that computes PBL height based on bulk RCH number. +!> +!> This routine computes the bulk Richardson number +!> and PBL height above surface. +!> +!> @param[out] PBLRI PBL height above ground. +!> +!> ### Program history log: +!> Date | Programmer | Comments +!> -----|------------|--------- +!> 2006-05-04 | M Tsidulko | Initial +!> 2021-09-02 | Bo Cui | Decompose UPP in X direction +!> +!> @author M Tsidulko @date 2006-05-04 SUBROUTINE CALPBL(PBLRI) ! @@ -36,22 +20,23 @@ SUBROUTINE CALPBL(PBLRI) use vrbls2d, only: fis use masks, only: vtm use params_mod, only: h10e5, capa, d608, h1, g, gi - use ctlblk_mod, only: lm, im, jsta, jend, spval, jsta_m, jsta_2l, jend_2u, jend_m + use ctlblk_mod, only: lm, im, jsta, jend, spval, jsta_m, jsta_2l, jend_2u, jend_m, & + ista, iend, ista_m, ista_2l, iend_2u, iend_m use gridspec_mod, only: gridtype !- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - implicit none ! ! DECLARE VARIABLES. ! - real,dimension(IM,jsta_2l:jend_2u),intent(inout) :: PBLRI + real,dimension(ista_2l:iend_2u,jsta_2l:jend_2u),intent(inout) :: PBLRI REAL, ALLOCATABLE :: THV(:,:,:) - INTEGER IFRSTLEV(IM,jsta_2l:jend_2u),ICALPBL(IM,jsta_2l:jend_2u) & - ,LVLP(IM,jsta_2l:jend_2u) - REAL RIF(IM,jsta_2l:jend_2u) & - ,RIBP(IM,jsta_2l:jend_2u),UBOT1(IM,jsta_2l:jend_2u) & - ,VBOT1(IM,jsta_2l:jend_2u),ZBOT1(IM,jsta_2l:jend_2u) & - ,THVBOT1(IM,jsta_2l:jend_2u) + INTEGER IFRSTLEV(ista_2l:iend_2u,jsta_2l:jend_2u),ICALPBL(ista_2l:iend_2u,jsta_2l:jend_2u) & + ,LVLP(ista_2l:iend_2u,jsta_2l:jend_2u) + REAL RIF(ista_2l:iend_2u,jsta_2l:jend_2u) & + ,RIBP(ista_2l:iend_2u,jsta_2l:jend_2u),UBOT1(ista_2l:iend_2u,jsta_2l:jend_2u) & + ,VBOT1(ista_2l:iend_2u,jsta_2l:jend_2u),ZBOT1(ista_2l:iend_2u,jsta_2l:jend_2u) & + ,THVBOT1(ista_2l:iend_2u,jsta_2l:jend_2u) integer I,J,L,IE,IW real APE,BETTA,RICR,USTARR,WMIN,UHKL,ULKL,VHKL,VLKL,WNDSL,WNDSLP, & UBOT,VBOT,VTOP,UTOP,THVTOP,ZTOP,WDL2,RIB @@ -59,13 +44,13 @@ SUBROUTINE CALPBL(PBLRI) !************************************************************************* ! START CALRCHB HERE. ! - ALLOCATE ( THV(IM,JSTA_2L:JEND_2U,LM) ) + ALLOCATE ( THV(ISTA_2L:IEND_2U,JSTA_2L:JEND_2U,LM) ) ! INITIALIZE ARRAYS. ! !$omp parallel do private(i,j) DO J=JSTA,JEND - DO I=1,IM + DO I=ISTA,IEND PBLRI(I,J) = SPVAL ENDDO ENDDO @@ -75,7 +60,7 @@ SUBROUTINE CALPBL(PBLRI) !$omp parallel do private(i,j,l,ape) DO L=LM,1,-1 DO J=JSTA,JEND - DO I=1,IM + DO I=ISTA,IEND if( PMID(I,J,L) @file -! . . . -!> SUBPROGRAM: CALPBL COMPUTES PBL HEIGHT BASED ON BULK RCH NUMBER -!! -!! ABSTRACT: -!! THIS ROUTINE COMPUTES THE BULK RICHARDSON NUMBER BASED ON ALGORITHMS -!! FROM WRF SURFACE LAYER AND THEN DERIVE PBL REGIME AS FOLLOWS: -!! 1. BR >= 0.2; -!! REPRESENTS NIGHTTIME STABLE CONDITIONS (REGIME=1), -!! -!! 2. BR < 0.2 .AND. BR > 0.0; -!! REPRESENTS DAMPED MECHANICAL TURBULENT CONDITIONS -!! (REGIME=2), -!! -!! 3. BR == 0.0 -!! REPRESENTS FORCED CONVECTION CONDITIONS (REGIME=3), -!! -!! 4. BR < 0.0 -!! REPRESENTS FREE CONVECTION CONDITIONS (REGIME=4). -!! . -!! -!! PROGRAM HISTORY LOG: -!! 07-04-27 H CHUANG -!! -!! USAGE: CALL CALPBLREGIME(PBLREGIME) -!! INPUT ARGUMENT LIST: -!! -!! OUTPUT ARGUMENT LIST: -!! PBLRI - PBL HEIGHT ABOVE GROUND -!! -!! OUTPUT FILES: -!! NONE -!! -!! SUBPROGRAMS CALLED: -!! UTILITIES: -!! NONE -!! LIBRARY: -!! COMMON - -!! CTLBLK -!! -!! ATTRIBUTES: -!! LANGUAGE: FORTRAN -!! MACHINE : -!! +!> @brief Subroutine that computes PBL height based on bulk RCH number. +!> +!> This routine computes the bulk Richardson number based on algorithms +!> from WRF surface layer and then derive PBL regime as follows: +!> 1. BR >= 0.2; +!> Represents nighttime stable conditions (Regime=1), +!> +!> 2. BR < 0.2 .AND. BR > 0.0; +!> Represents damped mechanical turbulent conditions +!> (Regime=2), +!> +!> 3. BR == 0.0 +!> Represents forced convection conditions (Regime=3), +!> +!> 4. BR < 0.0 +!> Represnets free convection conditions (Regime=4). +!> +!> @param[out] PBLRI PBL Height above ground. +!> +!> ### Program history log: +!> Date | Programmer | Comments +!> -----|------------|--------- +!> 2007-04-27 | H Chuang | Initial +!> 2021-09-02 | Bo Cui | Decompose UPP in X direction +!> +!> @author H Chuang @date 2007-04-27 SUBROUTINE CALPBLREGIME(PBLREGIME) ! @@ -50,7 +33,7 @@ SUBROUTINE CALPBLREGIME(PBLREGIME) use masks, only: dx use params_mod, only: p1000, capa, d608, h1, g, rd, cp use ctlblk_mod, only: jsta, jend, spval, lm, jsta_m, jend_m, im, & - jsta_2l, jend_2u + jsta_2l, jend_2u, ista, iend, ista_m, iend_m,ista_2l,iend_2u use gridspec_mod, only: gridtype !- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - implicit none @@ -61,7 +44,7 @@ SUBROUTINE CALPBLREGIME(PBLREGIME) ! ! DECLARE VARIABLES. ! - REAL,dimension(IM,jsta_2l:jend_2u),intent(inout) :: PBLREGIME + REAL,dimension(ista_2l:iend_2u,jsta_2l:jend_2u),intent(inout) :: PBLREGIME ! integer I,J,IE,IW,ii,jj real APE,THV,THVX,GOVRTH,UMASS,VMASS,WSPD,TSKV,DTHV,RHOX,fluxc,tsfc, & @@ -75,7 +58,7 @@ SUBROUTINE CALPBLREGIME(PBLREGIME) ! !$omp parallel do private(i,j) DO J=JSTA,JEND - DO I=1,IM + DO I=ISTA,IEND PBLREGIME(I,J) = SPVAL ENDDO ENDDO @@ -102,7 +85,7 @@ SUBROUTINE CALPBLREGIME(PBLREGIME) END IF DO J=JSTA_M,JEND_M - DO I=2,IM-1 + DO I=ISTA_M,IEND_M ! IF(PMID(I,J,LM) @file -! -!> SUBPROGRAM: CALPOT COMPUTES POTENTIAL TEMPERATURE -!! PRGRMMR: TREADON ORG: W/NP2 DATE: 92-12-24 -!! -!! ABSTRACT: -!! GIVEN PRESSURE AND TEMPERATURE THIS ROUTINE RETURNS -!! THE POTENTIAL TEMPERATURE. -!! -!! PROGRAM HISTORY LOG: -!! 92-12-24 RUSS TREADON -!! 98-06-15 T BLACK - CONVERSION FROM 1-D TO 2-D -!! 00-01-04 JIM TUCCILLO - MPI VERSION -!! 02-04-24 MIKE BALDWIN - WRF VERSION -!! -!! USAGE: CALL CALPOT(P1D,T1D,THETA) -!! INPUT ARGUMENT LIST: -!! P1D - PRESSURE (PA) -!! T1D - TEMPERATURE (K) -!! -!! OUTPUT ARGUMENT LIST: -!! THETA - POTENTIAL TEMPERATURE (K) -!! -!! OUTPUT FILES: -!! NONE -!! -!! SUBPROGRAMS CALLED: -!! UTILITIES: -!! NONE -!! LIBRARY: -!! NONE -!! -!! ATTRIBUTES: -!! LANGUAGE: FORTRAN 90 -!! MACHINE : CRAY C-90 -!! +!> @brief Subroutine that computes potential temperature. +!> +!> Given pressure and temperature this routine returns +!> the potential temperature. +!> +!> @param[in] P1D pressures (Pa). +!> @param[in] T1D temperatures (K). +!> @param[out] THETA potential temperatures (K). +!> +!> ### Program history log: +!> Date | Programmer | Comments +!> -----|------------|--------- +!> 1992-12-24 | Russ Treadon | Initial +!> 1998-06-15 | T Black | Convesion from 1-D to 2-D +!> 2000-01-04 | Jim Tuccillo | MPI Version +!> 2002-04-24 | Mike Baldwin | WRF Version +!> 2021-09-02 | Bo Cui | Decompose UPP in X direction +!> +!> @author Russ Treadon W/NP2 @date 1992-12-24 SUBROUTINE CALPOT(P1D,T1D,THETA) ! - use ctlblk_mod, only: jsta, jend, spval, im + use ctlblk_mod, only: jsta, jend, spval, im, ista, iend !- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - implicit none ! @@ -46,8 +30,8 @@ SUBROUTINE CALPOT(P1D,T1D,THETA) ! ! DECLARE VARIABLES. ! - real,dimension(IM,jsta:jend),intent(in) :: P1D,T1D - real,dimension(IM,jsta:jend),intent(inout) :: THETA + real,dimension(ista:iend,jsta:jend),intent(in) :: P1D,T1D + real,dimension(ista:iend,jsta:jend),intent(inout) :: THETA integer I,J ! @@ -58,7 +42,7 @@ SUBROUTINE CALPOT(P1D,T1D,THETA) ! !$omp parallel do private(i,j) DO J=JSTA,JEND - DO I=1,IM + DO I=ISTA,IEND IF(T1D(I,J) < SPVAL) THEN ! IF(ABS(P1D(I,J)) > 1.0) THEN IF(P1D(I,J) > 1.0) THEN diff --git a/sorc/ncep_post.fd/CALPW.f b/sorc/ncep_post.fd/CALPW.f index 2944454c0..1b1613238 100644 --- a/sorc/ncep_post.fd/CALPW.f +++ b/sorc/ncep_post.fd/CALPW.f @@ -1,71 +1,54 @@ !> @file -! . . . -!> SUBPROGRAM: CALPW COMPUTES -!! PRGRMMR: TREADON ORG: W/NP2 DATE: 92-12-24 -!! -!! ABSTRACT: -!! THIS ROUTINE COMPUTES PRECIPITABLE WATER IN A COLUMN -!! EXTENDING FROM THE FIRST ATMOSPHERIC ETA LAYER TO THE -!! MODEL TOP. THE DEFINITION USED IS -!! TOP -!! PRECIPITABLE WATER = SUM (Q+CLDW) DP*HTM/G -!! BOT -!! WHERE, -!! BOT IS THE FIRST ETA LAYER, -!! TOP IS THE MODEL TOP, -!! Q IS THE SPECIFIC HUMIDITY (KG/KG) IN THE LAYER -!! CLDW IS THE CLOUD WATER (KG/KG) IN THE LAYER -!! DP (Pa) IS THE LAYER THICKNESS. -!! HTM IS THE HEIGHT MASK AT THAT LAYER (=0 IF BELOW GROUND) -!! G IS THE GRAVITATIONAL CONSTANT -!! -!! PROGRAM HISTORY LOG: -!! 92-12-24 RUSS TREADON -!! 96-03-04 MIKE BALDWIN - ADD CLOUD WATER AND SPEED UP CODE -!! 98-06-15 T BLACK - CONVERSION FROM 1-D TO 2-D -!! 00-01-04 JIM TUCCILLO - MPI VERSION -!! 02-06-19 MIKE BALDWIN - WRF VERSION -!! 04-12-30 H CHUANG - UPDATE TO CALCULATE TOTAL COLUMN FOR OTHER -!! HYDROMETEORS -!! 14-11-12 SARAH LU - UPDATE TO CALCULATE AEROSOL OPTICAL DEPTH -!! 15-07-02 SARAH LU - UPDATE TO CALCULATE SCATTERING AEROSOL -!! OPTICAL DEPTH (18) -!! 15-07-04 SARAH LU - CORRECT PW INTEGRATION FOR AOD (17) -!! 15-07-10 SARAH LU - UPDATE TO CALCULATE ASYMETRY PARAMETER -!! 19-07-25 Li(Kate) Zhang - MERGE SARHA LU's update for FV3-Chem -!! 20-11-10 JESSE MENG - USE UPP_PHYSICS MODULE -!! -!! USAGE: CALL CALPW(PW) -!! INPUT ARGUMENT LIST: -!! PW - ARRAY OF PRECIPITABLE WATER. -!! -!! OUTPUT ARGUMENT LIST: -!! NONE -!! -!! OUTPUT FILES: -!! NONE -!! -!! SUBPROGRAMS CALLED: -!! UTILITIES: -!! NONE -!! LIBRARY: -!! COMMON - LOOPS -!! MASKS -!! -!! ATTRIBUTES: -!! LANGUAGE: FORTRAN -!! MACHINE : CRAY C-90 -!! +!> @brief Subroutine that computes precipitable water. +!> +!>
+!> This routine computes precipitable water in a column
+!> extending from the first atmospheric ETA layer to the
+!> model top. The definition used is
+!>                      TOP
+!> precipitable water = sum (Q+CLDW) DP*HTM/G
+!>                      BOT
+!> where,
+!> BOT is the first ETA layer,
+!> TOP is the model top,
+!> Q is the specific humidity (kg/kg) in the layer
+!> CLDW is the cloud water (kg/kg) in the layer
+!> DP (Pa) is the layer thickness.
+!> HTM is the height mask at that layer (=0 if below ground)
+!> G is the gravitational constant.
+!>
+!> +!> @param[in] PW Array of precipitable water. +!> +!> ### Program history log: +!> Date | Programmer | Comments +!> -----|------------|--------- +!> 1992-12-24 | Russ Treadon | Initial +!> 1996-03-04 | Mike Baldwin | Add cloud water and speed up code +!> 1998-06-15 | T Black | Convesion from 1-D to 2-D +!> 2000-01-04 | Jim Tuccillo | MPI Version +!> 2002-06-19 | Mike Baldwin | WRF Version +!> 2004-12-30 | H Chuang | Update to calculate total column for other hydrometeors +!> 2014-11-12 | Sarah Lu | Update tp calculate aerosol optical depth +!> 2015-07-02 | Sarah Lu | Update to calculate scattering aerosal optical depth (18) +!> 2015-07-04 | Sarah Lu | Correct PW integration for AOD (17) +!> 2015-07-10 | Sarah Lu | Update to calculate asymetry parameter +!> 2019-07-25 | Li(Kate) Zhang | Merge Sarah Lu's update for FV3-Chem +!> 2020-11-10 | Jesse Meng | Use UPP_PHYSICS Module +!> 2021-09-02 | Bo Cui | Decompose UPP in X direction +!> 2022-11-16 | Eric James | Adding calculation of vertically integrated dust from RRFS +!> +!> @author Russ Treadon W/NP2 @date 1992-12-24 SUBROUTINE CALPW(PW,IDECID) ! use vrbls3d, only: q, qqw, qqi, qqr, qqs, cwm, qqg, t, rswtt, & train, tcucn, mcvg, pmid, o3, ext, pint, rlwtt, & taod5503d,sca, asy - use vrbls4d, only: smoke + use vrbls4d, only: smoke, fv3dust use masks, only: htm use params_mod, only: tfrz, gi - use ctlblk_mod, only: lm, jsta, jend, im, spval + use ctlblk_mod, only: lm, jsta, jend, im, spval, ista, iend use upp_physics, only: FPVSNEW !- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - implicit none @@ -82,10 +65,10 @@ SUBROUTINE CALPW(PW,IDECID) ! DECLARE VARIABLES. ! integer,intent(in) :: IDECID - real,dimension(IM,jsta:jend),intent(inout) :: PW + real,dimension(ista:iend,jsta:jend),intent(inout) :: PW INTEGER LLMH,I,J,L REAL ALPM,DZ,PM,PWSUM,RHOAIR,DP,ES - REAL QDUM(IM,jsta:jend), PWS(IM,jsta:jend),QS(IM,jsta:jend) + REAL QDUM(ista:iend,jsta:jend), PWS(ista:iend,jsta:jend),QS(ista:iend,jsta:jend) ! !*************************************************************** ! START CALPW HERE. @@ -94,7 +77,7 @@ SUBROUTINE CALPW(PW,IDECID) ! !$omp parallel do private(i,j) DO J=JSTA,JEND - DO I=1,IM + DO I=ISTA,IEND PW(i,j) = 0. PWS(i,j) = 0. ENDDO @@ -108,42 +91,42 @@ SUBROUTINE CALPW(PW,IDECID) IF (IDECID <= 1) THEN !$omp parallel do private(i,j) DO J=JSTA,JEND - DO I=1,IM + DO I=ISTA,IEND Qdum(I,J) = Q(I,J,L) ENDDO ENDDO ELSE IF (IDECID == 2) THEN !$omp parallel do private(i,j) DO J=JSTA,JEND - DO I=1,IM + DO I=ISTA,IEND Qdum(I,J) = QQW(I,J,L) ENDDO ENDDO ELSE IF (IDECID == 3) THEN !$omp parallel do private(i,j) DO J=JSTA,JEND - DO I=1,IM + DO I=ISTA,IEND Qdum(I,J) = QQI(I,J,L) ENDDO ENDDO ELSE IF (IDECID == 4) THEN !$omp parallel do private(i,j) DO J=JSTA,JEND - DO I=1,IM + DO I=ISTA,IEND Qdum(I,J) = QQR(I,J,L) ENDDO ENDDO ELSE IF (IDECID == 5) THEN !$omp parallel do private(i,j) DO J=JSTA,JEND - DO I=1,IM + DO I=ISTA,IEND Qdum(I,J) = QQS(I,J,L) ENDDO ENDDO ELSE IF (IDECID == 6) THEN !$omp parallel do private(i,j) DO J=JSTA,JEND - DO I=1,IM + DO I=ISTA,IEND Qdum(I,J) = CWM(I,J,L) ENDDO ENDDO @@ -151,7 +134,7 @@ SUBROUTINE CALPW(PW,IDECID) ELSE IF (IDECID == 16) THEN !$omp parallel do private(i,j) DO J=JSTA,JEND - DO I=1,IM + DO I=ISTA,IEND Qdum(I,J) = QQG(I,J,L) ENDDO ENDDO @@ -160,7 +143,7 @@ SUBROUTINE CALPW(PW,IDECID) !-- Total supercooled liquid !$omp parallel do private(i,j) DO J=JSTA,JEND - DO I=1,IM + DO I=ISTA,IEND IF (T(I,J,L) >= TFRZ) THEN Qdum(I,J) = 0. ELSE @@ -172,7 +155,7 @@ SUBROUTINE CALPW(PW,IDECID) !-- Total melting ice !$omp parallel do private(i,j) DO J=JSTA,JEND - DO I=1,IM + DO I=ISTA,IEND IF (T(I,J,L) <= TFRZ) THEN Qdum(I,J) = 0. ELSE @@ -184,7 +167,7 @@ SUBROUTINE CALPW(PW,IDECID) ! SHORT WAVE T TENDENCY !$omp parallel do private(i,j) DO J=JSTA,JEND - DO I=1,IM + DO I=ISTA,IEND Qdum(I,J) = RSWTT(I,J,L) ENDDO ENDDO @@ -192,7 +175,7 @@ SUBROUTINE CALPW(PW,IDECID) ! LONG WAVE T TENDENCY !$omp parallel do private(i,j) DO J=JSTA,JEND - DO I=1,IM + DO I=ISTA,IEND Qdum(I,J) = RLWTT(I,J,L) ENDDO ENDDO @@ -200,7 +183,7 @@ SUBROUTINE CALPW(PW,IDECID) ! LATENT HEATING FROM GRID SCALE RAIN/EVAP !$omp parallel do private(i,j) DO J=JSTA,JEND - DO I=1,IM + DO I=ISTA,IEND Qdum(I,J) = TRAIN(I,J,L) ENDDO ENDDO @@ -208,7 +191,7 @@ SUBROUTINE CALPW(PW,IDECID) ! LATENT HEATING FROM CONVECTION !$omp parallel do private(i,j) DO J=JSTA,JEND - DO I=1,IM + DO I=ISTA,IEND Qdum(I,J) = TCUCN(I,J,L) ENDDO ENDDO @@ -216,7 +199,7 @@ SUBROUTINE CALPW(PW,IDECID) ! MOISTURE CONVERGENCE !$omp parallel do private(i,j) DO J=JSTA,JEND - DO I=1,IM + DO I=ISTA,IEND Qdum(I,J) = MCVG(I,J,L) ENDDO ENDDO @@ -224,7 +207,7 @@ SUBROUTINE CALPW(PW,IDECID) ELSE IF (IDECID == 14) THEN !$omp parallel do private(i,j,es) DO J=JSTA,JEND - DO I=1,IM + DO I=ISTA,IEND Qdum(I,J) = Q(I,J,L) ES = min(FPVSNEW(T(I,J,L)),PMID(I,J,L)) QS(I,J) = CON_EPS*ES/(PMID(I,J,L)+CON_EPSM1*ES) @@ -234,7 +217,7 @@ SUBROUTINE CALPW(PW,IDECID) ELSE IF (IDECID == 15) THEN !$omp parallel do private(i,j) DO J=JSTA,JEND - DO I=1,IM + DO I=ISTA,IEND Qdum(I,J) = O3(I,J,L) ENDDO END DO @@ -243,7 +226,7 @@ SUBROUTINE CALPW(PW,IDECID) ELSE IF (IDECID == 17) THEN !$omp parallel do private(i,j) DO J=JSTA,JEND - DO I=1,IM + DO I=ISTA,IEND Qdum(I,J) = EXT(I,J,L) ENDDO END DO @@ -253,8 +236,8 @@ SUBROUTINE CALPW(PW,IDECID) ELSE IF (IDECID == 18) THEN !$omp parallel do private(i,j) DO J=JSTA,JEND - DO I=1,IM - Qdum(I,J) = SMOKE(I,J,L,1)/1000000000. + DO I=ISTA,IEND + Qdum(I,J) = SMOKE(I,J,L,1)/(1E9) ENDDO END DO ! @@ -263,7 +246,7 @@ SUBROUTINE CALPW(PW,IDECID) ELSE IF (IDECID == 19) THEN !$omp parallel do private(i,j) DO J=JSTA,JEND - DO I=1,IM + DO I=ISTA,IEND Qdum(I,J) = TAOD5503D(I,J,L) ENDDO END DO @@ -272,7 +255,7 @@ SUBROUTINE CALPW(PW,IDECID) ELSE IF (IDECID == 20) THEN !$omp parallel do private(i,j) DO J=JSTA,JEND - DO I=1,IM + DO I=ISTA,IEND Qdum(I,J) = SCA(I,J,L) ENDDO END DO @@ -281,23 +264,31 @@ SUBROUTINE CALPW(PW,IDECID) ELSE IF (IDECID == 21) THEN !$omp parallel do private(i,j) DO J=JSTA,JEND - DO I=1,IM + DO I=ISTA,IEND Qdum(I,J) = ASY(I,J,L) ENDDO END DO + +! E. James - 14 Sep 2022 +! DUST (from RRFS) + ELSE IF (IDECID == 22) THEN +!$omp parallel do private(i,j) + DO J=JSTA,JEND + DO I=ISTA,IEND + Qdum(I,J) = FV3DUST(I,J,L,1)/(1E9) + ENDDO + END DO ENDIF ! !$omp parallel do private(i,j,dp) DO J=JSTA,JEND - DO I=1,IM + DO I=ISTA,IEND if(PINT(I,J,L+1) @file -! -!> THIS ROUTINE COMPUTES MODEL DERIVED BRIGHTNESS TEMPERATURE -!! USING CRTM. IT IS PATTERNED AFTER GSI SETUPRAD WITH TREADON'S HELP -!! -!! PROGRAM HISTORY LOG: -!! - 11-02-06 Jun WANG - addgrib2 option -!! - 14-12-09 WM LEWIS ADDED: -!! FUNCTION EFFR TO COMPUTE EFFECTIVE PARTICLE RADII -!! CHANNEL SELECTION USING LVLS FROM WRF_CNTRL.PARM -!! - 19-04-01 Sharon NEBUDA - Added output option for GOES-16 & GOES-17 ABI IR Channels 7-16 -!! - 20-04-09 Tracy Hertneky - Added Himawari-8 AHI CH7-CH16 -!! - 21-01-10 Web Meng - Added checking points for skiping grids with filling value spval -!! - 21-03-11 Bo Cui - improve local arrays memory -!! -!! OUTPUT FILES: -!! NONE -!! -!! SUBPROGRAMS CALLED: -!! UTILITIES: -!! -!! LIBRARY: -!! /nwprod/lib/sorc/crtm2 -!! -!! @author CHUANG @date 07-01-17 -!! +!> @brief Subroutine that computes model derived brightness temperature. +!> +!> This routine computes model derived brightness temperature +!> using CRTM. It is patterned after GSI setuprad with Treadon's help. +!> +!> ### Program history log: +!> Date | Programmer | Comments +!> -----|------------|--------- +!> 2007-01-17 | H Chuang | Initial +!> 2011-02-06 | Jun Wang | add grib2 option +!> 2014-12-09 | WM Lewis | added function EFFR to compute effective particle radii channel selection using LVLS from WRF_CNTRL.PARM +!> 2019-04-01 | Sharon Nebuda | Added output option for GOES-16 & GOES-17 ABI IR Channels 7-16 +!> 2020-04-09 | Tracy Hertneky | Added Himawari-8 AHI CH7-CH16 +!> 2021-01-10 | Wen Meng | Added checking points for skiping grids with filling value spval +!> 2021-03-11 | Bo Cui | improve local arrays memory +!> 2021-08-31 | Lin Zhu | added ssmis-f17 channels 15-18 grib2 output +!> 2021-09-02 | Bo Cui | Decompose UPP in X direction +!> 2022-05-26 | WM Lewis | added support for GOES-18 ABI IR Channels 7-16 +!> 2022-09-12 | Wen Meng | Added cloud fraction changes for crtm/2.4.0 +!> +!> @author Chuang @date 2007-01-17 SUBROUTINE CALRAD_WCLOUD use vrbls3d, only: o3, pint, pmid, t, q, qqw, qqi, qqr, f_rimef, nlice, nrain, qqs, qqg, & - qqnr, qqni, qqnw + qqnr, qqni, qqnw, cfr use vrbls2d, only: czen, ivgtyp, sno, pctsno, ths, vegfrc, si, u10h, v10h, u10,& v10, smstot, hbot, htop, cnvcfr use masks, only: gdlat, gdlon, sm, lmh, sice @@ -57,7 +53,7 @@ SUBROUTINE CALRAD_WCLOUD use params_mod, only: pi, rtd, p1000, capa, h1000, h1, g, rd, d608, qconv, small use rqstfld_mod, only: iget, id, lvls, iavblfld use ctlblk_mod, only: modelname, ivegsrc, novegtype, imp_physics, lm, spval, icu_physics,& - grib, cfld, fld_info, datapd, idat, im, jsta, jend, jm, me + grib, cfld, fld_info, datapd, idat, im, jsta, jend, jm, me, ista, iend ! implicit none @@ -114,7 +110,7 @@ SUBROUTINE CALRAD_WCLOUD ! integer,parameter:: n_clouds = 4 integer,parameter:: n_aerosols = 0 ! Add your sensors here - integer(i_kind),parameter:: n_sensors=22 + integer(i_kind),parameter:: n_sensors=23 character(len=20),parameter,dimension(1:n_sensors):: sensorlist= & (/'imgr_g15 ', & 'imgr_g13 ', & @@ -137,6 +133,7 @@ SUBROUTINE CALRAD_WCLOUD 'abi_gr ', & 'abi_g16 ', & 'abi_g17 ', & + 'abi_g18 ', & 'ahi_himawari8 '/) character(len=13),parameter,dimension(1:n_sensors):: obslist= & (/'goes_img ', & @@ -160,6 +157,7 @@ SUBROUTINE CALRAD_WCLOUD 'abi ', & 'abi ', & 'abi ', & + 'abi ', & 'ahi_himawari8'/) character(len=20),dimension(1:n_sensors):: sensorlist_local ! @@ -182,7 +180,7 @@ SUBROUTINE CALRAD_WCLOUD real(r_kind) snodepth,vegcover real snoeqv real snofrac - real(r_kind),dimension(im,jsta:jend):: tb1,tb2,tb3,tb4 + real(r_kind),dimension(ista:iend,jsta:jend):: tb1,tb2,tb3,tb4 real(r_kind),allocatable :: tb(:,:,:) real,dimension(im,jm):: grid1 real sun_zenith,sun_azimuth, dpovg, sun_zenith_rad @@ -202,9 +200,10 @@ SUBROUTINE CALRAD_WCLOUD logical ssmis_las,ssmis_uas,ssmis_env,ssmis_img logical sea,mixed,land,ice,snow,toss logical micrim,microwave - logical post_abig16, post_abig17, post_abigr ! if true, user requested at least one abi channel - logical fix_abig16, fix_abig17 ! if true, abi_g16, abi_g17 fix files are available + logical post_abig16, post_abig17, post_abig18, post_abigr ! if true, user requested at least one abi channel + logical fix_abig16, fix_abig17, fix_abig18 ! if true, abi_g16, abi_g17 fix files are available logical post_ahi8 ! if true, user requested at least on ahi channel (himawari8) + logical post_ssmis17 ! if true, user requested at least on ssmis_f17 channel ! logical,dimension(nobs):: luse logical, parameter :: debugprint = .false. type(crtm_atmosphere_type),dimension(1):: atmosphere @@ -224,6 +223,7 @@ SUBROUTINE CALRAD_WCLOUD ! linked CRTM version is updated with fix files abi_g16 & abi_g17 fix_abig16 = .False. fix_abig17 = .False. + fix_abig18 = .False. do n=1, n_sensors sensorlist_local(n) = sensorlist(n) if (sensorlist(n) == 'abi_g16') then ! check if fix file is available @@ -234,6 +234,10 @@ SUBROUTINE CALRAD_WCLOUD inquire(file='abi_g17.SpcCoeff.bin',exist=fix_abig17) if (.not.fix_abig17) sensorlist_local(n) = 'abi_gr ' endif + if (sensorlist(n) == 'abi_g18') then + inquire(file='abi_g18.SpcCoeff.bin',exist=fix_abig18) + if (.not.fix_abig18) sensorlist_local(n) = 'abi_gr ' + endif enddo @@ -278,6 +282,10 @@ SUBROUTINE CALRAD_WCLOUD do n = 937, 937+9 ! 937 set in RQSTFLD.f if (iget(n) > 0) post_abig17=.true. enddo + post_abig18=.false. + do n = 531, 531+9 ! 531 set in RQSTFLD.f + if (iget(n) > 0) post_abig18=.true. + enddo post_abigr=.false. do n = 958, 958+9 ! 958 set in RQSTFLD.f if (iget(n) > 0) post_abigr=.true. @@ -286,7 +294,10 @@ SUBROUTINE CALRAD_WCLOUD do n = 969, 969+9 ! 969 set in RQSTFLD.f if (iget(n) > 0) post_ahi8=.true. enddo - + post_ssmis17=.false. + do n = 825, 825+3 ! 825 set in RQSTFLD.f + if (iget(n) > 0) post_ssmis17=.true. + enddo ! DO NOT FORGET TO ADD YOUR NEW IGET HERE (IF YOU'VE ADDED ONE) ! START SUBROUTINE CALRAD. @@ -327,8 +338,9 @@ SUBROUTINE CALRAD_WCLOUD .or. iget(874) > 0 .or. iget(875) > 0 .or. iget(876) > 0 & .or. iget(877) > 0 .or. iget(878) > 0 .or. iget(879) > 0 & .or. iget(880) > 0 .or. iget(881) > 0 .or. iget(882) > 0 & - .or. post_ahi8 & - .or. post_abig16 .or. post_abig17 .or. post_abigr ) then + .or. post_ahi8 .or. post_ssmis17 & + .or. post_abig16 .or. post_abig17 .or. post_abig18 & + .or. post_abigr ) then ! specify numbers of cloud species ! Thompson==8, Ferrier==5,95, WSM6==6, Lin==2 @@ -355,7 +367,7 @@ SUBROUTINE CALRAD_WCLOUD ! if (MODELNAME == 'GFS')then jdn=iw3jdn(idat(3),idat(1),idat(2)) do j=jsta,jend - do i=1,im + do i=ista,iend call zensun(jdn,float(idat(4)),gdlat(i,j),gdlon(i,j) & ,pi,sun_zenith,sun_azimuth) sun_zenith_rad=sun_zenith/rtd @@ -419,6 +431,20 @@ SUBROUTINE CALRAD_WCLOUD enddo endif endif + ! GOES-18 + if(post_abig18)then + nchanl=0 + do n = 531, 531+9 ! 531 set in RQSTFLD.f + if (iget(n) > 0) then + nchanl = nchanl+1 + endif + enddo + if (nchanl > 0 .and. nchanl <10) then + do n = 531, 531+9 ! 531 set in RQSTFLD.f + if (iget(n) == 0) channelinfo(21)%Process_Channel(n-531+1)=.False. + enddo + endif + endif ! GOES-R for NADIR output if(post_abigr)then nchanl=0 @@ -448,6 +474,21 @@ SUBROUTINE CALRAD_WCLOUD enddo endif endif + + ! SSMIS F17 (37H, 37V, 91H, 91V) + if(post_ssmis17)then + nchanl=14 + do n = 825, 825+3 ! 825 set in RQSTFLD.f + if (iget(n) > 0) then + nchanl = nchanl+1 + endif + enddo + if (nchanl > 14 .and. nchanl < 19) then + do n = 825, 825+3 ! 825 set in RQSTFLD.f + if (iget(n) == 0) channelinfo(11)%Process_Channel(n-825+15)=.False. ! turn off channel processing + enddo + endif + endif ! SSMI, F13-F15 (19H,19V,??H,37H,37V,85H,85V) if(iget(800)>0)then @@ -463,9 +504,9 @@ SUBROUTINE CALRAD_WCLOUD if(iget(818)>0)then call select_channels_L(channelinfo(10),24,(/ 1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24 /),lvls(1:24,iget(818)),iget(818)) endif - if(iget(825)>0)then - call select_channels_L(channelinfo(11),24,(/ 1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24 /),lvls(1:24,iget(825)),iget(825)) - endif +! if(iget(825)>0)then +! call select_channels_L(channelinfo(11),24,(/ 1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24 /),lvls(1:24,iget(825)),iget(825)) +! endif if(iget(832)>0)then call select_channels_L(channelinfo(12),24,(/ 1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24 /),lvls(1:24,iget(832)),iget(832)) endif @@ -491,11 +532,6 @@ SUBROUTINE CALRAD_WCLOUD if(iget(865)>0)then call select_channels_L(channelinfo(18),4,(/ 1,2,3,4 /),lvls(1:4,iget(865)),iget(865)) endif - ! Himiwari-8 AHI infrared - if(iget(969)>0)then - call select_channels_L(channelinfo(19),10,(/1,2,3,4,5,6,7,8,9,10/),lvls(1:10,iget(969)),iget(969)) - endif - ! Loop over data types to process sensordo: do isat=1,n_sensors @@ -520,7 +556,7 @@ SUBROUTINE CALRAD_WCLOUD (isis=='ssmi_f14' .and. iget(806) > 0 ) .OR. & (isis=='ssmi_f15' .and. iget(812) > 0 ) .OR. & (isis=='ssmis_f16' .and. iget(818) > 0) .OR. & - (isis=='ssmis_f17' .and. iget(825) > 0) .OR. & + (isis=='ssmis_f17' .and. post_ssmis17) .OR. & (isis=='ssmis_f18' .and. iget(832) > 0) .OR. & (isis=='ssmis_f19' .and. iget(839) > 0) .OR. & (isis=='ssmis_f20' .and. iget(846) > 0) .OR. & @@ -531,6 +567,7 @@ SUBROUTINE CALRAD_WCLOUD (isis=='imgr_g15' .and. iget(872)>0) .OR. & (isis=='abi_g16' .and. post_abig16) .OR. & (isis=='abi_g17' .and. post_abig17) .OR. & + (isis=='abi_g18' .and. post_abig18) .OR. & (isis=='abi_gr' .and. post_abigr) .OR. & (isis=='seviri_m10' .and. iget(876)>0) .OR. & (isis=='ahi_himawari8' .and. post_ahi8) )then @@ -585,6 +622,9 @@ SUBROUTINE CALRAD_WCLOUD if (isis=='abi_g17' .and. .not.fix_abig17) then isis_local='abi_gr ' endif + if (isis=='abi_g18' .and. .not.fix_abig18) then + isis_local='abi_gr ' + endif if (channelinfo(j)%sensor_id == isis_local ) then sensorindex = j exit sensor_search @@ -605,11 +645,14 @@ SUBROUTINE CALRAD_WCLOUD if(isis=='abi_g16')channelinfo(sensorindex)%WMO_Sensor_Id=617 if(isis=='abi_g17')channelinfo(sensorindex)%WMO_Satellite_Id=271 if(isis=='abi_g17')channelinfo(sensorindex)%WMO_Sensor_Id=617 +! assuming sat id for g18 is 272 (continuity w/ g16 and g17) + if(isis=='abi_g18')channelinfo(sensorindex)%WMO_Satellite_Id=272 + if(isis=='abi_g18')channelinfo(sensorindex)%WMO_Sensor_Id=617 if(isis=='abi_gr')channelinfo(sensorindex)%WMO_Satellite_Id=270 if(isis=='abi_gr')channelinfo(sensorindex)%WMO_Sensor_Id=617 allocate(rtsolution (channelinfo(sensorindex)%n_channels,1)) - allocate(tb(im,jsta:jend,channelinfo(sensorindex)%n_channels)) + allocate(tb(ista:iend,jsta:jend,channelinfo(sensorindex)%n_channels)) err1=0; err2=0; err3=0; err4=0 if(lm > max_n_layers)then write(6,*) 'CALRAD: lm > max_n_layers - '// & @@ -692,7 +735,7 @@ SUBROUTINE CALRAD_WCLOUD (isis=='abi_gr' .and. post_abigr) )then do j=jsta,jend - loopi1:do i=1,im + loopi1:do i=ista,iend ! Skiping the grids with filling value spval do k=1,lm @@ -919,6 +962,7 @@ SUBROUTINE CALRAD_WCLOUD ! CRTM counts from top down just as post does if(i==ii.and.j==jj.and.debugprint)print*,'TOA= ',atmosphere(1)%level_pressure(0) do k = 1,lm + atmosphere(1)%cloud_fraction(k) = min(max(cfr(i,j,k),0.),1.) atmosphere(1)%level_pressure(k) = pint(i,j,k+1)/r100 atmosphere(1)%pressure(k) = pmid(i,j,k)/r100 atmosphere(1)%temperature(k) = t(i,j,k) @@ -945,10 +989,10 @@ SUBROUTINE CALRAD_WCLOUD ! & atmosphere(1)%absorber(k,1)>1.) & ! & print*,'bad atmosphere o3' end if - if(i==ii.and.j==jj.and.debugprint)print*,'sample atmosphere in CALRAD=', & - i,j,k,atmosphere(1)%level_pressure(k),atmosphere(1)%pressure(k), & - atmosphere(1)%temperature(k),atmosphere(1)%absorber(k,1), & - atmosphere(1)%absorber(k,2) +! if(i==ii.and.j==jj.and.debugprint)print*,'sample atmosphere in CALRAD=', & +! i,j,k,atmosphere(1)%level_pressure(k),atmosphere(1)%pressure(k), & +! atmosphere(1)%temperature(k),atmosphere(1)%absorber(k,1), & +! atmosphere(1)%absorber(k,2) ! Specify clouds dpovg=(pint(i,j,k+1)-pint(i,j,k))/g !crtm uses column integrated field if(imp_physics==99 .or. imp_physics==98)then @@ -1130,14 +1174,14 @@ SUBROUTINE CALRAD_WCLOUD igot=iget(482+ixchan) if(igot>0) then do j=jsta,jend - do i=1,im + do i=ista,iend grid1(i,j)=tb(i,j,ichan) enddo enddo if (grib=="grib2") then cfld=cfld+1 fld_info(cfld)%ifld=IAVBLFLD(igot) - datapd(1:im,1:jend-jsta+1,cfld)=grid1(1:im,jsta:jend) + datapd(1:iend-ista+1,1:jend-jsta+1,cfld)=grid1(ista:iend,jsta:jend) endif endif enddo @@ -1148,14 +1192,14 @@ SUBROUTINE CALRAD_WCLOUD igot=iget(487+ixchan) if(igot>0) then do j=jsta,jend - do i=1,im + do i=ista,iend grid1(i,j) = tb(i,j,ichan) enddo enddo if (grib=="grib2") then cfld=cfld+1 fld_info(cfld)%ifld=IAVBLFLD(igot) - datapd(1:im,1:jend-jsta+1,cfld)=grid1(1:im,jsta:jend) + datapd(1:iend-ista+1,1:jend-jsta+1,cfld)=grid1(ista:iend,jsta:jend) endif endif enddo @@ -1167,14 +1211,14 @@ SUBROUTINE CALRAD_WCLOUD igot=445+ixchan if(igot>0) then do j=jsta,jend - do i=1,im + do i=ista,iend grid1(i,j) = tb(i,j,ichan) enddo enddo if (grib=="grib2") then cfld=cfld+1 fld_info(cfld)%ifld=IAVBLFLD(igot) - datapd(1:im,1:jend-jsta+1,cfld)=grid1(1:im,jsta:jend) + datapd(1:iend-ista+1,1:jend-jsta+1,cfld)=grid1(ista:iend,jsta:jend) endif endif ! IGOT enddo @@ -1186,14 +1230,14 @@ SUBROUTINE CALRAD_WCLOUD igot=iget(326+ixchan) if(igot>0) then do j=jsta,jend - do i=1,im + do i=ista,iend grid1(i,j)=tb(i,j,ichan) enddo enddo if (grib=="grib2") then cfld=cfld+1 fld_info(cfld)%ifld=IAVBLFLD(igot) - datapd(1:im,1:jend-jsta+1,cfld)=grid1(1:im,jsta:jend) + datapd(1:iend-ista+1,1:jend-jsta+1,cfld)=grid1(ista:iend,jsta:jend) endif endif enddo @@ -1205,14 +1249,14 @@ SUBROUTINE CALRAD_WCLOUD igot=iget(957+ixchan) if(igot>0)then do j=jsta,jend - do i=1,im + do i=ista,iend grid1(i,j)=tb(i,j,ichan) enddo enddo if(grib=="grib2" )then cfld=cfld+1 fld_info(cfld)%ifld=IAVBLFLD(igot) - datapd(1:im,1:jend-jsta+1,cfld)=grid1(1:im,jsta:jend) + datapd(1:iend-ista+1,1:jend-jsta+1,cfld)=grid1(ista:iend,jsta:jend) endif endif enddo ! channel loop @@ -1227,7 +1271,7 @@ SUBROUTINE CALRAD_WCLOUD (isis=='ssmi_f14' .and. iget(806) > 0 ) .OR. & (isis=='ssmi_f15' .and. iget(812) > 0 ) .OR. & (isis=='ssmis_f16' .and. iget(818) > 0) .OR. & - (isis=='ssmis_f17' .and. iget(825) > 0) .OR. & + (isis=='ssmis_f17' .and. post_ssmis17) .OR. & (isis=='ssmis_f18' .and. iget(832) > 0) .OR. & (isis=='ssmis_f19' .and. iget(839) > 0) .OR. & (isis=='ssmis_f20' .and. iget(846) > 0) .OR. & @@ -1238,6 +1282,7 @@ SUBROUTINE CALRAD_WCLOUD (isis=='imgr_g15' .and. iget(872)>0) .OR. & (isis=='abi_g16' .and. post_abig16) .OR. & (isis=='abi_g17' .and. post_abig17) .OR. & + (isis=='abi_g18' .and. post_abig18) .OR. & (isis=='seviri_m10' .and. iget(876)>0) .OR. & (isis=='ahi_himawari8' .and. post_ahi8) .OR. & (isis=='imgr_g12' .and. (iget(456)>0 .or. & @@ -1246,7 +1291,7 @@ SUBROUTINE CALRAD_WCLOUD iget(461)>0 .or. iget(462)>0 .or. iget(463)>0)))then do j=jsta,jend - loopi2:do i=1,im + loopi2:do i=ista,iend ! Skiping the grids with filling value spval do k=1,lm @@ -1280,6 +1325,9 @@ SUBROUTINE CALRAD_WCLOUD else if(isis=='abi_g17')then sublat=0.0 sublon=-137.2 + else if(isis=='abi_g18')then + sublat=0.0 + sublon=-137.2 else if(isis=='imgr_g11')then sublat=0.0 sublon=-135.0 @@ -1503,6 +1551,7 @@ SUBROUTINE CALRAD_WCLOUD ! CRTM counts from top down just as post does if(i==ii.and.j==jj)print*,'TOA= ',atmosphere(1)%level_pressure(0) do k = 1,lm + atmosphere(1)%cloud_fraction(k) = min(max(cfr(i,j,k),0.),1.) atmosphere(1)%level_pressure(k) = pint(i,j,k+1)/r100 atmosphere(1)%pressure(k) = pmid(i,j,k)/r100 atmosphere(1)%temperature(k) = t(i,j,k) @@ -1529,10 +1578,10 @@ SUBROUTINE CALRAD_WCLOUD ! & atmosphere(1)%absorber(k,1)>1.) & ! & print*,'bad atmosphere o3' end if - if(i==ii.and.j==jj)print*,'sample atmosphere in CALRAD=', & - i,j,k,atmosphere(1)%level_pressure(k),atmosphere(1)%pressure(k), & - atmosphere(1)%temperature(k),atmosphere(1)%absorber(k,1), & - atmosphere(1)%absorber(k,2) +! if(i==ii.and.j==jj)print*,'sample atmosphere in CALRAD=', & +! i,j,k,atmosphere(1)%level_pressure(k),atmosphere(1)%pressure(k), & +! atmosphere(1)%temperature(k),atmosphere(1)%absorber(k,1), & +! atmosphere(1)%absorber(k,2) ! Specify clouds dpovg=(pint(i,j,k+1)-pint(i,j,k))/g !crtm uses column integrated field if(imp_physics==99 .or. imp_physics==98)then @@ -1706,14 +1755,14 @@ SUBROUTINE CALRAD_WCLOUD if(lvls(ixchan,igot)==1)then nc=nc+1 do j=jsta,jend - do i=1,im + do i=ista,iend grid1(i,j)=tb(i,j,nc) enddo enddo if (grib=="grib2") then cfld=cfld+1 fld_info(cfld)%ifld=IAVBLFLD(igot) - datapd(1:im,1:jend-jsta+1,cfld)=grid1(1:im,jsta:jend) + datapd(1:iend-ista+1,1:jend-jsta+1,cfld)=grid1(ista:iend,jsta:jend) endif endif endif @@ -1728,14 +1777,14 @@ SUBROUTINE CALRAD_WCLOUD if(lvls(ixchan,igot)==1)then nc=nc+1 do j=jsta,jend - do i=1,im + do i=ista,iend grid1(i,j)=tb(i,j,nc) enddo enddo if (grib=="grib2") then cfld=cfld+1 fld_info(cfld)%ifld=IAVBLFLD(igot) - datapd(1:im,1:jend-jsta+1,cfld)=grid1(1:im,jsta:jend) + datapd(1:iend-ista+1,1:jend-jsta+1,cfld)=grid1(ista:iend,jsta:jend) endif endif endif @@ -1750,14 +1799,14 @@ SUBROUTINE CALRAD_WCLOUD if(lvls(ixchan,igot)==1)then nc=nc+1 do j=jsta,jend - do i=1,im + do i=ista,iend grid1(i,j)=tb(i,j,nc) enddo enddo if (grib=="grib2") then cfld=cfld+1 fld_info(cfld)%ifld=IAVBLFLD(igot) - datapd(1:im,1:jend-jsta+1,cfld)=grid1(1:im,jsta:jend) + datapd(1:iend-ista+1,1:jend-jsta+1,cfld)=grid1(ista:iend,jsta:jend) endif endif endif @@ -1773,41 +1822,37 @@ SUBROUTINE CALRAD_WCLOUD if(lvls(ixchan,igot)==1)then nc=nc+1 do j=jsta,jend - do i=1,im + do i=ista,iend grid1(i,j)=tb(i,j,nc) enddo enddo if (grib=="grib2") then cfld=cfld+1 fld_info(cfld)%ifld=IAVBLFLD(igot) - datapd(1:im,1:jend-jsta+1,cfld)=grid1(1:im,jsta:jend) + datapd(1:iend-ista+1,1:jend-jsta+1,cfld)=grid1(ista:iend,jsta:jend) endif endif endif enddo end if ! end of outputting ssmis f16 - if (isis=='ssmis_f17')then ! writing ssmis to grib (183,19,37 &85GHz) - nc=0 - do ixchan=1,24 - ichan=ixchan - igot=iget(825) - if(igot>0) then - if(lvls(ixchan,igot)==1)then - nc=nc+1 - do j=jsta,jend - do i=1,im - grid1(i,j)=tb(i,j,nc) - enddo - enddo - if (grib=="grib2") then - cfld=cfld+1 - fld_info(cfld)%ifld=IAVBLFLD(igot) - datapd(1:im,1:jend-jsta+1,cfld)=grid1(1:im,jsta:jend) - endif - endif - endif - enddo - end if ! end of outputting ssmis f17 + if(isis=='ssmis_f17') then ! writing ssmis f17 to grib (37, 91GHz) + do ixchan=1,4 + ichan=14+ixchan + igot=iget(824+ixchan) + if(igot>0)then + do j=jsta,jend + do i=ista,iend + grid1(i,j)=tb(i,j,ichan) + enddo + enddo + if(grib=="grib2" )then + cfld=cfld+1 + fld_info(cfld)%ifld=IAVBLFLD(igot) + datapd(1:iend-ista+1,1:jend-jsta+1,cfld)=grid1(ista:iend,jsta:jend) + endif + endif + enddo + endif ! end of outputting ssmis f17 if (isis=='ssmis_f18')then ! writing ssmis to grib (183,19,37 &85GHz) nc=0 do ixchan=1,24 @@ -1817,14 +1862,14 @@ SUBROUTINE CALRAD_WCLOUD if(lvls(ixchan,igot)==1)then nc=nc+1 do j=jsta,jend - do i=1,im + do i=ista,iend grid1(i,j)=tb(i,j,nc) enddo enddo if (grib=="grib2") then cfld=cfld+1 fld_info(cfld)%ifld=IAVBLFLD(igot) - datapd(1:im,1:jend-jsta+1,cfld)=grid1(1:im,jsta:jend) + datapd(1:iend-ista+1,1:jend-jsta+1,cfld)=grid1(ista:iend,jsta:jend) endif endif endif @@ -1839,14 +1884,14 @@ SUBROUTINE CALRAD_WCLOUD if(lvls(ixchan,igot)==1)then nc=nc+1 do j=jsta,jend - do i=1,im + do i=ista,iend grid1(i,j)=tb(i,j,nc) enddo enddo if (grib=="grib2") then cfld=cfld+1 fld_info(cfld)%ifld=IAVBLFLD(igot) - datapd(1:im,1:jend-jsta+1,cfld)=grid1(1:im,jsta:jend) + datapd(1:iend-ista+1,1:jend-jsta+1,cfld)=grid1(ista:iend,jsta:jend) endif endif endif @@ -1861,14 +1906,14 @@ SUBROUTINE CALRAD_WCLOUD if(lvls(ixchan,igot)==1)then nc=nc+1 do j=jsta,jend - do i=1,im + do i=ista,iend grid1(i,j)=tb(i,j,nc) enddo enddo if (grib=="grib2") then cfld=cfld+1 fld_info(cfld)%ifld=IAVBLFLD(igot) - datapd(1:im,1:jend-jsta+1,cfld)=grid1(1:im,jsta:jend) + datapd(1:iend-ista+1,1:jend-jsta+1,cfld)=grid1(ista:iend,jsta:jend) endif endif endif @@ -1881,14 +1926,14 @@ SUBROUTINE CALRAD_WCLOUD if(lvls(ichan,igot)==1)then nc=nc+1 do j=jsta,jend - do i=1,im + do i=ista,iend grid1(i,j)=tb(i,j,nc) enddo enddo if(grib=="grib2") then cfld=cfld+1 fld_info(cfld)%ifld=IAVBLFLD(igot) - datapd(1:im,1:jend-jsta+1,cfld)=grid1(1:im,jsta:jend) + datapd(1:iend-ista+1,1:jend-jsta+1,cfld)=grid1(ista:iend,jsta:jend) endif endif enddo @@ -1900,14 +1945,14 @@ SUBROUTINE CALRAD_WCLOUD if(lvls(ichan,igot)==1)then nc=nc+1 do j=jsta,jend - do i=1,im + do i=ista,iend grid1(i,j)=tb(i,j,nc) enddo enddo if(grib=="grib2" )then cfld=cfld+1 fld_info(cfld)%ifld=IAVBLFLD(igot) - datapd(1:im,1:jend-jsta+1,cfld)=grid1(1:im,jsta:jend) + datapd(1:iend-ista+1,1:jend-jsta+1,cfld)=grid1(ista:iend,jsta:jend) endif endif enddo @@ -1919,14 +1964,14 @@ SUBROUTINE CALRAD_WCLOUD if(lvls(ichan,igot)==1)then nc=nc+1 do j=jsta,jend - do i=1,im + do i=ista,iend grid1(i,j)=tb(i,j,nc) enddo enddo if(grib=="grib2" )then cfld=cfld+1 fld_info(cfld)%ifld=IAVBLFLD(igot) - datapd(1:im,1:jend-jsta+1,cfld)=grid1(1:im,jsta:jend) + datapd(1:iend-ista+1,1:jend-jsta+1,cfld)=grid1(ista:iend,jsta:jend) endif endif enddo @@ -1937,14 +1982,14 @@ SUBROUTINE CALRAD_WCLOUD igot=iget(459+ixchan) if(igot>0) then do j=jsta,jend - do i=1,im + do i=ista,iend grid1(i,j)=tb(i,j,ichan) enddo enddo if(grib=="grib2" )then cfld=cfld+1 fld_info(cfld)%ifld=IAVBLFLD(igot) - datapd(1:im,1:jend-jsta+1,cfld)=grid1(1:im,jsta:jend) + datapd(1:iend-ista+1,1:jend-jsta+1,cfld)=grid1(ista:iend,jsta:jend) endif endif enddo @@ -1955,14 +2000,14 @@ SUBROUTINE CALRAD_WCLOUD igot=iget(455+ixchan) if(igot>0) then do j=jsta,jend - do i=1,im + do i=ista,iend grid1(i,j)=tb(i,j,ichan) enddo enddo if(grib=="grib2" )then cfld=cfld+1 fld_info(cfld)%ifld=IAVBLFLD(igot) - datapd(1:im,1:jend-jsta+1,cfld)=grid1(1:im,jsta:jend) + datapd(1:iend-ista+1,1:jend-jsta+1,cfld)=grid1(ista:iend,jsta:jend) endif endif enddo @@ -1976,14 +2021,14 @@ SUBROUTINE CALRAD_WCLOUD if(lvls(ixchan,igot)==1)then nc=nc+1 do j=jsta,jend - do i=1,im + do i=ista,iend grid1(i,j)=tb(i,j,nc) enddo enddo if (grib=="grib2") then cfld=cfld+1 fld_info(cfld)%ifld=IAVBLFLD(igot) - datapd(1:im,1:jend-jsta+1,cfld)=grid1(1:im,jsta:jend) + datapd(1:iend-ista+1,1:jend-jsta+1,cfld)=grid1(ista:iend,jsta:jend) endif endif endif @@ -1998,14 +2043,14 @@ SUBROUTINE CALRAD_WCLOUD if(lvls(ixchan,igot)==1)then nc=nc+1 do j=jsta,jend - do i=1,im + do i=ista,iend grid1(i,j)=tb(i,j,nc) enddo enddo if (grib=="grib2") then cfld=cfld+1 fld_info(cfld)%ifld=IAVBLFLD(igot) - datapd(1:im,1:jend-jsta+1,cfld)=grid1(1:im,jsta:jend) + datapd(1:iend-ista+1,1:jend-jsta+1,cfld)=grid1(ista:iend,jsta:jend) endif endif endif @@ -2020,14 +2065,14 @@ SUBROUTINE CALRAD_WCLOUD if(lvls(ixchan,igot)==1)then nc=nc+1 do j=jsta,jend - do i=1,im + do i=ista,iend grid1(i,j)=tb(i,j,nc) enddo enddo if (grib=="grib2") then cfld=cfld+1 fld_info(cfld)%ifld=IAVBLFLD(igot) - datapd(1:im,1:jend-jsta+1,cfld)=grid1(1:im,jsta:jend) + datapd(1:iend-ista+1,1:jend-jsta+1,cfld)=grid1(ista:iend,jsta:jend) endif endif endif @@ -2040,29 +2085,53 @@ SUBROUTINE CALRAD_WCLOUD igot=iget(926+ixchan) if(igot>0)then do j=jsta,jend - do i=1,im + do i=ista,iend grid1(i,j)=tb(i,j,ichan) enddo enddo if(grib=="grib2" )then cfld=cfld+1 fld_info(cfld)%ifld=IAVBLFLD(igot) - datapd(1:im,1:jend-jsta+1,cfld)=grid1(1:im,jsta:jend) + datapd(1:iend-ista+1,1:jend-jsta+1,cfld)=grid1(ista:iend,jsta:jend) endif endif enddo ! channel loop end if ! end of outputting goes 16 - if (isis=='abi_g17')then ! writing goes 16 to grib + if (isis=='abi_g17')then ! writing goes 17 to grib nc=0 do ixchan=1,10 ichan=ixchan igot=iget(936+ixchan) + if(igot>0)then + do j=jsta,jend + do i=ista,iend + grid1(i,j)=tb(i,j,ichan) + enddo + enddo + if(grib=="grib2" )then + cfld=cfld+1 + fld_info(cfld)%ifld=IAVBLFLD(igot) + datapd(1:iend-ista+1,1:jend-jsta+1,cfld)=grid1(ista:iend,jsta:jend) + endif + endif + enddo ! channel loop + end if ! end of outputting goes 17 +! Wm Lewis updated idx for g18 on 3 JUN 2022 + if (isis=='abi_g18')then ! writing goes 18 to grib + nc=0 + do ixchan=1,10 + igot=iget(530+ixchan) + ichan=ixchan if(igot>0)then do j=jsta,jend do i=1,im grid1(i,j)=tb(i,j,ichan) enddo enddo + id(1:25) = 0 + id(02) = 2 + id(08) = 118 + id(09) = 109 if(grib=="grib2" )then cfld=cfld+1 fld_info(cfld)%ifld=IAVBLFLD(igot) @@ -2070,20 +2139,20 @@ SUBROUTINE CALRAD_WCLOUD endif endif enddo ! channel loop - end if ! end of outputting goes 17 + end if ! end of outputting goes 18 if(isis=='ahi_himawari8') then ! writing Himawari-8 AHI to grib do ichan=1,10 igot=iget(968+ichan) if(igot>0)then do j=jsta,jend - do i=1,im + do i=ista,iend grid1(i,j)=tb(i,j,ichan) enddo enddo if(grib=="grib2" )then cfld=cfld+1 fld_info(cfld)%ifld=IAVBLFLD(igot) - datapd(1:im,1:jend-jsta+1,cfld)=grid1(1:im,jsta:jend) + datapd(1:iend-ista+1,1:jend-jsta+1,cfld)=grid1(ista:iend,jsta:jend) endif endif enddo diff --git a/sorc/ncep_post.fd/CALRCH.f b/sorc/ncep_post.fd/CALRCH.f index 60b5425b6..b1b520aed 100644 --- a/sorc/ncep_post.fd/CALRCH.f +++ b/sorc/ncep_post.fd/CALRCH.f @@ -1,43 +1,26 @@ !> @file -! -!> SUBPROGRAM: CALRCH COMPUTES GRD RCH NUMBER -!! PRGRMMR: TREADON ORG: W/NP2 DATE: 93-10-11 -!! -!! ABSTRACT: -!! THIS ROUTINE COMPUTES THE GRADIENT RICHARDSON NUMBER -!! AS CODED IN ETA MODEL SUBROUTINE PROFQ2.F. -!! FIX TO AVOID UNREASONABLY SMALL ANEMOMETER LEVEL WINDS. -!! -!! PROGRAM HISTORY LOG: -!! 93-10-11 RUSS TREADON -!! 98-06-17 T BLACK - CONVERSION FROM 1-D TO 2-D -!! 00-01-04 JIM TUCCILLO - MPI VERSION -!! 01-10-22 H CHUANG - MODIFIED TO PROCESS HYBRID MODEL OUTPUT -!! 02-01-15 MIKE BALDWIN - WRF VERSION -!! 05-02-25 H CHUANG - ADD COMPUTATION FOR NMM E GRID -!! 05-07-07 BINBIN ZHOU - ADD RSM FOR A GRID -!! -!! USAGE: CALL CALRCH(EL,RICHNO) -!! INPUT ARGUMENT LIST: -!! EL - MIXING LENGTH SCALE. -!! -!! OUTPUT ARGUMENT LIST: -!! RICHNO - GRADIENT RICHARDSON NUMBER. -!! -!! OUTPUT FILES: -!! NONE -!! -!! SUBPROGRAMS CALLED: -!! UTILITIES: -!! NONE -!! LIBRARY: -!! COMMON - -!! CTLBLK -!! -!! ATTRIBUTES: -!! LANGUAGE: FORTRAN -!! MACHINE : CRAY C-90 -!! +!> @brief Subroutine that computes GRD RCH number. +!> +!> This routine computes the gradient Richardson number +!> as coded in ETA model subroutine PROFQ2.F. +!> Fix to avoid unreasonably small anemometer level winds. +!> +!> @param[in] EL Mixing length scale. +!> @param[out] RICHNO Gradient Richardson number. +!> +!> ### Program history log: +!> Date | Programmer | Comments +!> -----|------------|--------- +!> 1993-10-11 | Russ Treadon | Initial +!> 1998-06-17 | T Black | Convesion from 1-D to 2-D +!> 2000-01-04 | Jim Tuccillo | MPI Version +!> 2001-10-22 | H Chuang | Modified to process hybrid model output +!> 2002-01-15 | Mike Baldwin | WRF Version +!> 2005-02-25 | H Chuang | Add computation for NMM E grid +!> 2005-07-07 | Binbin Zhou | Add RSM for A Grid +!> 2021-09-02 | Bo Cui | Decompose UPP in X direction +!> +!> @author Russ Treadon W/NP2 @date 1993-10-11 SUBROUTINE CALRCH(EL,RICHNO) ! @@ -45,15 +28,16 @@ SUBROUTINE CALRCH(EL,RICHNO) use masks, only: vtm use params_mod, only: h10e5, capa, d608,h1, epsq2, g, beta use ctlblk_mod, only: jsta, jend, spval, lm1, jsta_m, jend_m, im, & - jsta_2l, jend_2u, lm + jsta_2l, jend_2u, lm, & + ista, iend, ista_m, iend_m, ista_2l, iend_2u use gridspec_mod, only: gridtype !- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - implicit none ! ! DECLARE VARIABLES. ! - REAL,intent(in) :: EL(IM,jsta_2l:jend_2u,LM) - REAL,intent(inout) :: RICHNO(IM,jsta_2l:jend_2u,LM) + REAL,intent(in) :: EL(ista_2l:iend_2u,jsta_2l:jend_2u,LM) + REAL,intent(inout) :: RICHNO(ista_2l:iend_2u,jsta_2l:jend_2u,LM) ! REAL, ALLOCATABLE :: THV(:,:,:) integer I,J,L,IW,IE @@ -66,13 +50,13 @@ SUBROUTINE CALRCH(EL,RICHNO) !************************************************************************* ! START CALRCH HERE. ! - ALLOCATE ( THV(IM,JSTA_2L:JEND_2U,LM) ) + ALLOCATE ( THV(ISTA_2L:IEND_2U,JSTA_2L:JEND_2U,LM) ) ! INITIALIZE ARRAYS. ! !$omp parallel do DO L = 1,LM DO J=JSTA,JEND - DO I=1,IM + DO I=ISTA,IEND RICHNO(I,J,L)=SPVAL ENDDO ENDDO @@ -83,7 +67,7 @@ SUBROUTINE CALRCH(EL,RICHNO) !$omp parallel do private(i,j,ape) DO L=LM,1,-1 DO J=JSTA,JEND - DO I=1,IM + DO I=ISTA,IEND APE = (H10E5/PMID(I,J,L))**CAPA THV(I,J,L) = (Q(I,J,L)*D608+H1)*T(I,J,L)*APE ENDDO @@ -108,7 +92,7 @@ SUBROUTINE CALRCH(EL,RICHNO) end if DO J=JSTA_M,JEND_M - DO I=2,IM-1 + DO I=ISTA_M,IEND_M ! IF(GRIDTYPE == 'A')THEN UHKL = UH(I,J,L) diff --git a/sorc/ncep_post.fd/CALSTRM.f b/sorc/ncep_post.fd/CALSTRM.f index c9204ccb6..adf7ac43e 100644 --- a/sorc/ncep_post.fd/CALSTRM.f +++ b/sorc/ncep_post.fd/CALSTRM.f @@ -1,43 +1,27 @@ !> @file -! -!> SUBPROGRAM: CALSTRM COMPUTES GEO STREAMFUNCTION -!! PRGRMMR: TREADON ORG: W/NP2 DATE: 92-12-22 -!! -!! ABSTRACT: -!! THIS ROUTINE COMPUTES THE GEOSTROPHIC STREAMFUNCTION, -!! PSI, FROM THE PASSED GEOPOTENTIAL HEIGHT FIELD, Z. -!! THE FORMULA USED IS PSI = G*Z/F0, WHERE G IS THE -!! GRAVITATIONAL ACCELERATION CONSTANT AND F0 IS A -!! CONSTANT CORIOLIS PARAMETER. F0 IS SET TO BE THE -!! VALUE OF THE CORIOLIS PARAMETER NEAR THE CENTER -!! OF THE MODEL GRID. -!! -!! PROGRAM HISTORY LOG: -!! 92-12-22 RUSS TREADON -!! 98-06-08 T BLACK - CONVERSION FROM 1-D TO 2-D -!! 00-01-05 JIM TUCCILLO - MPI VERSION -!! 02-06-13 MIKE BALDWIN - WRF VERSION -!! -!! USAGE: CALL CALSTRM(Z1D,STRM) -!! INPUT ARGUMENT LIST: -!! Z1D - GEOPOTENTIAL HEIGHT (M) -!! -!! OUTPUT ARGUMENT LIST: -!! STRM - GEOSTROPHIC STREAMFUNCTION -!! -!! OUTPUT FILES: -!! NONE -!! -!! SUBPROGRAMS CALLED: -!! UTILITIES: -!! NONE -!! LIBRARY: -!! COMMON - MAPOT -!! -!! ATTRIBUTES: -!! LANGUAGE: FORTRAN -!! MACHINE : CRAY C-90 -!! +!> @brief Subroutine that computes geo streamfunction. +!> +!> This routine computes the geostrophic streamfunction, +!> PSI, from the passed geopotential height field, Z. +!> The formule used it PSI = G*Z/F0, where G is the +!> gravitational acceleration constant and F0 is a +!> constant Coriolis parameter. F0 is set to be the +!> valus of the Coriolis parameter near the center +!> of the model grid. +!> +!> @param[in] Z1D Geopotential height (m). +!> @param[out] STRM Geostrophic streamfunction. +!> +!> ### Program history log: +!> Date | Programmer | Comments +!> -----|------------|--------- +!> 1992-12-22 | Russ Treadon | Initial +!> 1998-06-08 | T Black | Conversion from 1-D TO 2-D +!> 2000-01-05 | Jim Tuccillo | MPI Version +!> 2002-06-13 | Mike Baldwin | WRF Version +!> 2021-09-02 | Bo Cui | Decompose UPP in X direction +!> +!> @author Russ Treadon W/NP2 @date 1992-12-22 SUBROUTINE CALSTRM(Z1D,STRM) ! @@ -48,7 +32,7 @@ SUBROUTINE CALSTRM(Z1D,STRM) ! ! use vrbls2d, only: use params_mod, only: g - use ctlblk_mod, only: jsta, jend, im + use ctlblk_mod, only: jsta, jend, im, ista, iend !- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - implicit none ! @@ -57,8 +41,8 @@ SUBROUTINE CALSTRM(Z1D,STRM) ! DECLARE VARIABLES. ! ! LOGICAL FIRST,OLDRD,RESTRT,RUN,SIGMA,STRD - REAL, dimension(im,jsta:jend), intent(in) :: Z1D - REAL, dimension(im,jsta:jend), intent(inout) :: STRM + REAL, dimension(ista:iend,jsta:jend), intent(in) :: Z1D + REAL, dimension(ista:iend,jsta:jend), intent(inout) :: STRM ! LOGICAL OLDRD,STRD integer IMID,I,J @@ -76,7 +60,7 @@ SUBROUTINE CALSTRM(Z1D,STRM) ! COMPUTE GEOSTROPHIC STREAMFUNCTION. !$omp parallel do DO J=JSTA,JEND - DO I=1,IM + DO I=ISTA,IEND STRM(I,J) = GOF0*Z1D(I,J) ENDDO ENDDO diff --git a/sorc/ncep_post.fd/CALTAU.f b/sorc/ncep_post.fd/CALTAU.f index e90a1394b..08338039d 100644 --- a/sorc/ncep_post.fd/CALTAU.f +++ b/sorc/ncep_post.fd/CALTAU.f @@ -1,45 +1,30 @@ !> @file -! -!> SUBPROGRAM: CALTAU COMPUTE U AND V WIND STRESSES -!! PRGRMMR: TREADON ORG: W/NP2 DATE: 93-09-01 -!! -!! ABSTRACT: THIS ROUTINE COMPUTES SURFACE LAYER U AND V -!! WIND COMPONENT STRESSES USING K THEORY AS PRESENTED -!! IN SECTION 8.4 OF "NUMBERICAL PREDICTION AND DYNAMIC -!! METEOROLOGY" BY HALTINER AND WILLIAMS (1980, JOHN WILEY -!! & SONS). -!! -!! PROGRAM HISTORY LOG: -!! 93-09-01 RUSS TREADON -!! 98-06-11 T BLACK - CONVERSION FROM 1-D TO 2-D -!! 00-01-04 JIM TUCCILLO - MPI VERSION -!! 01-10-25 H CHUANG - MODIFIED TO PROCESS HYBRID OUTPUT -!! 02-01-15 MIKE BALDWIN - WRF VERSION, OUTPUT IS ON MASS-POINTS -!! 05-02-23 H CHUANG - COMPUTE STRESS FOR NMM ON WIND POINTS -!! 05-07-07 BINBIN ZHOU - ADD RSM STRESS for A GRID -!! USAGE: CALL CALTAU(TAUX,TAUY) -!! INPUT ARGUMENT LIST: -!! NONE -!! -!! OUTPUT ARGUMENT LIST: -!! TAUX - SUFACE LAYER U COMPONENT WIND STRESS. -!! TAUY - SUFACE LAYER V COMPONENT WIND STRESS. -!! -!! OUTPUT FILES: -!! NONE -!! -!! SUBPROGRAMS CALLED: -!! UTILITIES: -!! CLMAX -!! MIXLEN -!! -!! LIBRARY: -!! COMMON - -!! -!! ATTRIBUTES: -!! LANGUAGE: FORTRAN -!! MACHINE : CRAY C-90 -!! +!> @brief Subroutine that computes U and V wind stresses. +!> +!> This routine computes surface layer U and V +!> wind component stresses using K theory as presented +!> in section 8.4 of "Numerical prediction and dynamic +!> meteorology" by Haltiner and Williams (1980, John Wiley +!> & Sons). +!> +!> @param[out] TAUX Suface layer U component wind stress. +!> @param[out] TAUY Suface layer V component wind stress. +!> +!> ### Program history log: +!> Date | Programmer | Comments +!> -----|------------|--------- +!> 1993-09-01 | Russ Treadon | Initial +!> 1998-06-11 | T Black | Convesion from 1-D to 2-D +!> 2000-01-04 | Jim Tuccillo | MPI Version +!> 2001-10-25 | H Chuang | Modified to process hybrid output +!> 2002-01-15 | Mike Baldwin | WRF Version, output is on mass-points +!> 2005-02-23 | H Chuang | Compute stress for NMM on wind points +!> 2005-07-07 | Binbin Zhou | Add RSM stress for A Grid +!> 2021-07-26 | W Meng | Restrict computation from undefined grids +!> 2021-09-02 | Bo Cui | Decompose UPP in X direction +!> +!> @author Russ Treadon W/NP2 @date 1993-09-01 + SUBROUTINE CALTAU(TAUX,TAUY) ! @@ -49,7 +34,7 @@ SUBROUTINE CALTAU(TAUX,TAUY) use masks, only: lmh use params_mod, only: d00, d50, h1, d608, rd, d25 use ctlblk_mod, only: jsta_2l, jend_2u, lm, jsta, jend, spval, jsta_m,& - jm, im, jend_m + jm, im, jend_m, ista, iend, ista_m, iend_m, ista_2l, iend_2u use gridspec_mod, only: gridtype implicit none @@ -57,9 +42,9 @@ SUBROUTINE CALTAU(TAUX,TAUY) ! DECLARE VARIABLES. INTEGER, dimension(4) :: KK(4) INTEGER, dimension(jm) :: ive, ivw - REAL, dimension(im,jsta:jend), intent(inout) :: TAUX, TAUY + REAL, dimension(ista:iend,jsta:jend), intent(inout) :: TAUX, TAUY REAL, ALLOCATABLE :: EL(:,:,:) - REAL, dimension(im,jsta:jend) :: EGRIDU,EGRIDV,EGRID4,EGRID5, EL0 + REAL, dimension(ista:iend,jsta:jend) :: EGRIDU,EGRIDV,EGRID4,EGRID5, EL0 REAL UZ0V,VZ0V CHARACTER*1 AGRID integer I,J,LMHK,IE,IW,ii,jj @@ -69,7 +54,7 @@ SUBROUTINE CALTAU(TAUX,TAUY) !******************************************************************** ! START CALTAU HERE. ! - ALLOCATE (EL(IM,JSTA_2L:JEND_2U,LM)) + ALLOCATE (EL(ISTA_2L:IEND_2U,JSTA_2L:JEND_2U,LM)) ! ! COMPUTE MASTER LENGTH SCALE. ! @@ -79,7 +64,7 @@ SUBROUTINE CALTAU(TAUX,TAUY) ! INITIALIZE OUTPUT AND WORK ARRAY TO ZERO. ! DO J=JSTA,JEND - DO I=1,IM + DO I=ISTA,IEND EGRIDU(I,J) = D00 EGRIDV(I,J) = D00 TAUX(I,J) = SPVAL @@ -96,9 +81,11 @@ SUBROUTINE CALTAU(TAUX,TAUY) CALL MIXLEN(EL0,EL) DO J=JSTA,JEND - DO I=1,IM + DO I=ISTA,IEND ! LMHK = NINT(LMH(I,J)) + IF(EL(I,J,LMHK-1) @file -! -!> SUBPROGRAM: CALTHTE COMPUTES THETA-E -!! PRGRMMR: TREADON ORG: W/NP2 DATE: 93-06-18 -!! -!! ABSTRACT: -!! THIS ROUTINE COMPUTES THE EQUIVALENT POTENTIAL TEMPERATURE -!! GIVEN PRESSURE, TEMPERATURE, AND SPECIFIC HUMIDITY. THE -!! EQUATIONS OF BOLTON (MWR,1980) ARE USED. -!! -!! PROGRAM HISTORY LOG: -!! 93-06-18 RUSS TREADON -!! 98-06-16 T BLACK - CONVERSION FROM 1-D TO 2-D -!! 00-01-04 JIM TUCCILLO - MPI VERSION -!! -!! USAGE: CALL CALTHTE(P1D,T1D,Q1D,THTE) -!! INPUT ARGUMENT LIST: -!! P1D - PRESSURE (PA) -!! T1D - TEMPERATURE (K) -!! Q1D - SPECIFIC HUMIDITY (KG/KG) -!! -!! OUTPUT ARGUMENT LIST: -!! THTE - THETA-E (K) -!! -!! OUTPUT FILES: -!! NONE -!! -!! SUBPROGRAMS CALLED: -!! UTILITIES: -!! VAPOR - FUNCTION TO CALCULATE VAPOR PRESSURE. -!! LIBRARY: -!! NONE -!! -!! ATTRIBUTES: -!! LANGUAGE: FORTRAN -!! MACHINE : CRAY C-90 -!! +!> @brief Subroutine that computes Theta-E. +!> +!> This routine computes the equivalent potential temperature +!> given pressure, temperature, and specific humidity. The +!> equations of Bolton (MWR,1980) are used. +!> +!> @param[in] P1D pressure (Pa). +!> @param[in] T1D temperature (K). +!> @param[in] Q1D specific humidity(kg/kg). +!> @param[out] THTE Theta-E (K). +!> +!> ### Program history log: +!> Date | Programmer | Comments +!> -----|------------|--------- +!> 1993-06-18 | Russ Treadon | Initial +!> 1998-06-16 | T Black | Convesion from 1-D to 2-D +!> 2000-01-04 | Jim Tuccillo | MPI Version +!> 2021-07-28 | W Meng | Restrict computation from undefined grids +!> 2021-09-02 | Bo Cui | Decompose UPP in X direction +!> +!> @author Russ Treadon W/NP2 @date 1993-06-18 + SUBROUTINE CALTHTE(P1D,T1D,Q1D,THTE) ! ! use params_mod, only: d00, eps, oneps, d01, h1m12, p1000, h1 - use ctlblk_mod, only: jsta, jend, im + use ctlblk_mod, only: jsta, jend, im, spval, ista, iend !- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - implicit none ! @@ -52,8 +38,8 @@ SUBROUTINE CALTHTE(P1D,T1D,Q1D,THTE) ! ! DECLARE VARIABLES. ! - REAL,dimension(IM,jsta:jend),intent(in) :: P1D,T1D,Q1D - REAL,dimension(IM,jsta:jend),intent(inout) :: THTE + REAL,dimension(ista:iend,jsta:jend),intent(in) :: P1D,T1D,Q1D + REAL,dimension(ista:iend,jsta:jend),intent(inout) :: THTE integer I,J real P,T,Q,EVP,RMX,CKAPA,RKAPA,ARG,DENOM,TLCL,PLCL,FAC, & @@ -65,7 +51,7 @@ SUBROUTINE CALTHTE(P1D,T1D,Q1D,THTE) ! ZERO THETA-E ARRAY !$omp parallel do private(i,j) DO J=JSTA,JEND - DO I=1,IM + DO I=ISTA,IEND THTE(I,J) = D00 ENDDO ENDDO @@ -73,10 +59,11 @@ SUBROUTINE CALTHTE(P1D,T1D,Q1D,THTE) ! COMPUTE THETA-E. ! ! DO J=JSTA_M,JEND_M -! DO I=2,IM-1 +! DO I=ISTA_M,IEND_M !$omp parallel do private(i,j,p,t,q,evp,rmx,ckapa,rkapa,arg,denom,tlcl,plcl,fac,eterm,thetae) DO J=JSTA,JEND - DO I=1,IM + DO I=ISTA,IEND + IF(P1D(I,J) @file -! -!> SUBPROGRAM: CALUPDHEL COMPUTES UPDRAFT HELICITY -!! PRGRMMR: PYLE ORG: W/NP2 DATE: 07-10-22 -!! -!! ABSTRACT: -!! THIS ROUTINE COMPUTES THE UPDRAFT HELICITY -!! -!! PROGRAM HISTORY LOG: -!! 07-10-22 M PYLE - based on SPC Algorithm courtesy of David Bright -!! 11-01-11 M Pyle - converted to F90 for unified post -!! 11-04-05 H Chuang - added B grid option -!! 20-11-06 J Meng - USE UPP_MATH MODULE -!! -!! USAGE: CALL CALUPDHEL(UPDHEL) -!! -!! INPUT ARGUMENT LIST: -!! NONE -!! -!! OUTPUT ARGUMENT LIST: -!! UPDHEL - UPDRAFT HELICITY (M^2/S^2) -!! -!! OUTPUT FILES: -!! NONE -!! -!! SUBPROGRAMS CALLED: -!! UTILITIES: -!! NONE -!! LIBRARY: -!! COMMON - CTLBLK -!! -!! ATTRIBUTES: -!! LANGUAGE: FORTRAN -!! MACHINE : CRAY C-90 -!! +!> @brief Subroutine that computes the updraft helicity. +!> +!> @param[out] UPDHEL Updraft helicity (m^2/s^2). +!> +!> ### Program history log: +!> Date | Programmer | Comments +!> -----|------------|--------- +!> 2007-10-22 | M Pyle | Initial +!> 2007-10-22 | M Pyle | based on SPC Algorithm courtesy of David Bright +!> 2011-01-11 | M Pyle | converted to F90 for unified post +!> 2011-04-05 | H Chuang | added B grid option +!> 2020-11-06 | J Meng | Use UPP_MATH Module +!> 2021-10-31 | J Meng | 2D DECOMPOSITION +!> 2022-05-12 | E James | Adding a check for extremely large positive or negative UH values +!> +!> @author M Pyle W/NP2 @date 2007-10-22 SUBROUTINE CALUPDHEL(UPDHEL) ! @@ -42,7 +24,8 @@ SUBROUTINE CALUPDHEL(UPDHEL) use masks, only: lmh, dx, dy use params_mod, only: d00 use ctlblk_mod, only: lm, jsta_2l, jend_2u, jsta_m, jend_m, & - global, spval, im, jm + global, spval, im, jm, & + ista_2l, iend_2u, ista_m, iend_m use gridspec_mod, only: gridtype use upp_math, only: DVDXDUDY, DDVDX, DDUDY @@ -54,7 +37,7 @@ SUBROUTINE CALUPDHEL(UPDHEL) REAL, PARAMETER:: HLOWER=2000., HUPPER=5000. REAL ZMIDLOC real :: r2dx, r2dy, dz, dcdx, dudy, dvdx - REAL :: HTSFC(IM,jsta_2l:jend_2u),UPDHEL(IM,jsta_2l:jend_2u) + REAL :: HTSFC(ista_2l:iend_2u,jsta_2l:jend_2u),UPDHEL(ista_2l:iend_2u,jsta_2l:jend_2u) integer :: l, j, i INTEGER, dimension(jm) :: IHE,IHW ! INTEGER DXVAL,DYVAL,CENLAT,CENLON,TRUELAT1,TRUELAT2 @@ -67,16 +50,16 @@ SUBROUTINE CALUPDHEL(UPDHEL) ! maxval(WH(:,:,20)) DO L=1,LM - CALL EXCH(UH(1,jsta_2l,L)) + CALL EXCH(UH(ista_2l,jsta_2l,L)) END DO IF (GRIDTYPE == 'B')THEN DO L=1,LM - CALL EXCH(VH(1,jsta_2l,L)) + CALL EXCH(VH(ista_2l,jsta_2l,L)) END DO END IF !$omp parallel do private(i,j) DO J=JSTA_2L,JEND_2U - DO I=1,IM + DO I=ISTA_2L,IEND_2U UPDHEL(I,J) = D00 ENDDO ENDDO @@ -93,13 +76,15 @@ SUBROUTINE CALUPDHEL(UPDHEL) !$omp parallel do private(i,j) DO J=JSTA_M,JEND_M - DO I=1,IM + DO I=ISTA_M,IEND_M HTSFC(I,J) = ZINT(I,J,NINT(LMH(I,J))+1) ENDDO ENDDO DO J=JSTA_M,JEND_M - DO I=2,IM-1 + DO I=ISTA_M,IEND_M + + IF (HTSFC(I,J) < spval) THEN R2DX = 1./(2.*DX(I,J)) R2DY = 1./(2.*DY(I,J)) @@ -131,8 +116,17 @@ SUBROUTINE CALUPDHEL(UPDHEL) UPDHEL(I,J)=UPDHEL(I,J)+(DVDX-DUDY)*WH(I,J,L)*DZ + IF (UPDHEL(I,J) < -9E10 .OR. UPDHEL(I,J) > 9E10) THEN + UPDHEL(I,J) = spval + ENDIF + ENDIF ENDDO l_loop + + ELSE + UPDHEL(I,J) = spval + ENDIF + ENDDO ENDDO diff --git a/sorc/ncep_post.fd/CALVESSEL.f b/sorc/ncep_post.fd/CALVESSEL.f index 9dae6d633..09d329ed1 100644 --- a/sorc/ncep_post.fd/CALVESSEL.f +++ b/sorc/ncep_post.fd/CALVESSEL.f @@ -1,20 +1,24 @@ SUBROUTINE CALVESSEL(ICEG) ! Algorithm for calculating ice growth rate +! +! PROGRAM HISTORY LOG: +! 21-10-31 JESSE MENG - 2D DECOMPOSITION + use vrbls2d, only: sst, u10h, v10h, tshltr use masks, only: sm, sice - use ctlblk_mod, only: jsta, jend, im, spval + use ctlblk_mod, only: jsta, jend, im, spval, ista, iend !------------------------------------------- implicit none integer I, J real TSFC_C,TSHLTR_C,SST_C real, parameter :: C2K=273.15 - real, dimension(im,jsta:jend) :: pr, spd10 - real,intent(out) :: ICEG(im,jsta:jend) + real, dimension(ista:iend,jsta:jend) :: pr, spd10 + real,intent(out) :: ICEG(ista:iend,jsta:jend) -! allocate (thsfc(im,jsta:jend),tsfc(im,jsta:jend)) +! allocate (thsfc(ista:iend,jsta:jend),tsfc(ista:iend,jsta:jend)) DO J=JSTA,JEND - DO I=1,IM + DO I=ISTA,IEND ! CALCULATE SPEED SPD10(i,j)=SQRT(U10H(I,J)**2+V10H(I,J)**2) if (SPD10(i,j)>50) then diff --git a/sorc/ncep_post.fd/CALVIS.f b/sorc/ncep_post.fd/CALVIS.f index 6bcf0ee25..a7bf26fe2 100644 --- a/sorc/ncep_post.fd/CALVIS.f +++ b/sorc/ncep_post.fd/CALVIS.f @@ -57,15 +57,17 @@ SUBROUTINE CALVIS(QV,QC,QR,QI,QS,TT,PP,VIS) ! ! 2021-05 Wen Meng -Add checking for undfined points invloved in ! computation. +! 2021-10-31 Jesse Meng - 2D DECOMPOSITION !------------------------------------------------------------------ use params_mod, only: h1, d608, rd - use ctlblk_mod, only: jsta, jend, im, jsta_2l, jend_2u, spval + use ctlblk_mod, only: jsta, jend, im, jsta_2l, jend_2u, spval, & + ista, iend, ista_2l, iend_2u !- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - implicit none ! - real,dimension(IM,jsta_2l:jend_2u),intent(in) :: QV,QC,QR,QI,QS,TT,PP - real,dimension(IM,jsta_2l:jend_2u),intent(inout) :: VIS + real,dimension(ista_2l:iend_2u,jsta_2l:jend_2u),intent(in) :: QV,QC,QR,QI,QS,TT,PP + real,dimension(ista_2l:iend_2u,jsta_2l:jend_2u),intent(inout) :: VIS CHARACTER METH*1 real CELKEL,TICE,COEFLC,COEFLP,COEFFC,COEFFP,EXPONLC, & @@ -90,7 +92,7 @@ SUBROUTINE CALVIS(QV,QC,QR,QI,QS,TT,PP,VIS) RHOWAT=1000. ! DO J=JSTA,JEND - DO I=1,IM + DO I=ISTA,IEND VIS(I,J)=SPVAL ! IF(IICE==0)THEN ! QPRC=QR diff --git a/sorc/ncep_post.fd/CALVIS_GSD.f b/sorc/ncep_post.fd/CALVIS_GSD.f index d67ed6547..d5fabfe72 100644 --- a/sorc/ncep_post.fd/CALVIS_GSD.f +++ b/sorc/ncep_post.fd/CALVIS_GSD.f @@ -89,21 +89,25 @@ SUBROUTINE CALVIS_GSD(CZEN,VIS) ! (not related to water vapor or RH at this point) ! 2021-05 Wen Meng Unify CONST1 and VISRH. ! 2021-05 Wen Meng - Add checking for undefined points invloved in computation +! 2021-08 Wen Meng - Restrict divided by 0. +! 2021-10 Jesse Meng - 2D DECOMPOSITION ! !------------------------------------------------------------------ ! use vrbls3d, only: qqw, qqi, qqs, qqr, qqg, t, pmid, q, u, v, extcof55, aextc55 use params_mod, only: h1, d608, rd - use ctlblk_mod, only: jm, im, jsta_2l, jend_2u, lm, modelname, spval + use ctlblk_mod, only: jm, im, jsta_2l, jend_2u, lm, modelname, spval,& + ista_2l, iend_2u implicit none integer :: j, i, k, ll integer :: method real :: tx, pol, esx, es, e - REAL VIS(IM,jsta_2l:jend_2u) ,RHB(IM,jsta_2l:jend_2u,LM), CZEN(IM,jsta_2l:jend_2u) - + REAL VIS(ista_2l:iend_2u,jsta_2l:jend_2u) + REAL RHB(ista_2l:iend_2u,jsta_2l:jend_2u,LM) + REAL CZEN(ista_2l:iend_2u,jsta_2l:jend_2u) real celkel,tice,coeflc,coeflp,coeffc,coeffp,coeffg real exponlc,exponlp,exponfc,exponfp,exponfg,const1 @@ -202,7 +206,7 @@ SUBROUTINE CALVIS_GSD(CZEN,VIS) visrh_min = 1.e6 DO J=jsta_2l,jend_2u - DO I=1,IM + DO I=ista_2l,iend_2u VIS(I,J)=spval ! -checking undedined points if(T(I,J,LM) 0.) THEN esx = 6.1078/POL**8 ES = esx E = PMID(I,J,LL)/100.*Q(I,J,LL)/(0.62197+Q(I,J,LL)*0.37803) RHB(I,J,LL) = 100.*AMIN1(1.,E/ES) + ENDIF enddo diff --git a/sorc/ncep_post.fd/CALVOR.f b/sorc/ncep_post.fd/CALVOR.f deleted file mode 100644 index ea5bb3deb..000000000 --- a/sorc/ncep_post.fd/CALVOR.f +++ /dev/null @@ -1,937 +0,0 @@ -!> @file -! -!> SUBPROGRAM: CALVOR COMPUTES ABSOLUTE VORTICITY -!! PRGRMMR: TREADON ORG: W/NP2 DATE: 92-12-22 -!! -!! ABSTRACT: -!! THIS ROUTINE COMPUTES THE ABSOLUTE VORTICITY. -!! -!! PROGRAM HISTORY LOG: -!! 92-12-22 RUSS TREADON -!! 98-06-08 T BLACK - CONVERSION FROM 1-D TO 2-D -!! 00-01-04 JIM TUCCILLO - MPI VERSION -!! 02-01-15 MIKE BALDWIN - WRF VERSION C-GRID -!! 05-03-01 H CHUANG - ADD NMM E GRID -!! 05-05-17 H CHUANG - ADD POTENTIAL VORTICITY CALCULATION -!! 05-07-07 B ZHOU - ADD RSM IN COMPUTING DVDX, DUDY AND UAVG -!! 13-08-09 S MOORTHI - Optimize the vorticity loop including threading -!! 16-08-05 S Moorthi - add zonal filetering -!! 2019-10-17 Y Mao - Skip calculation when U/V is SPVAL -!! 2020-11-06 J Meng - USE UPP_MATH MODULE - - -!! -!! USAGE: CALL CALVOR(UWND,VWND,ABSV) -!! INPUT ARGUMENT LIST: -!! UWND - U WIND (M/S) MASS-POINTS -!! VWND - V WIND (M/S) MASS-POINTS -!! -!! OUTPUT ARGUMENT LIST: -!! ABSV - ABSOLUTE VORTICITY (1/S) MASS-POINTS -!! -!! OUTPUT FILES: -!! NONE -!! -!! SUBPROGRAMS CALLED: -!! UTILITIES: -!! NONE -!! LIBRARY: -!! COMMON - CTLBLK -!! -!! ATTRIBUTES: -!! LANGUAGE: FORTRAN -!! MACHINE : WCOSS -!! - SUBROUTINE CALVOR(UWND,VWND,ABSV) - -! -! - use vrbls2d, only: f - use masks, only: gdlat, gdlon, dx, dy - use params_mod, only: d00, dtr, small, erad - use ctlblk_mod, only: jsta_2l, jend_2u, spval, modelname, global, & - jsta, jend, im, jm, jsta_m, jend_m, gdsdegr - use gridspec_mod, only: gridtype, dyval - use upp_math, only: DVDXDUDY, DDVDX, DDUDY, UUAVG - - implicit none -! -! DECLARE VARIABLES. -! - REAL, dimension(im,jsta_2l:jend_2u), intent(in) :: UWND, VWND - REAL, dimension(im,jsta_2l:jend_2u), intent(inout) :: ABSV -! - real, allocatable :: wrk1(:,:), wrk2(:,:), wrk3(:,:), cosl(:,:) - INTEGER, allocatable :: IHE(:),IHW(:), IE(:),IW(:) -! - integer, parameter :: npass2=2, npass3=3 - integer I,J,ip1,im1,ii,iir,iil,jj,JMT2,imb2, npass, nn, jtem - real R2DX,R2DY,DVDX,DUDY,UAVG,TPH1,TPHI, tx1(im+2), tx2(im+2) -! -!*************************************************************************** -! START CALVOR HERE. -! -! LOOP TO COMPUTE ABSOLUTE VORTICITY FROM WINDS. -! - IF(MODELNAME == 'RAPR') then -!$omp parallel do private(i,j) - DO J=JSTA_2L,JEND_2U - DO I=1,IM - ABSV(I,J) = D00 - ENDDO - ENDDO - else -!$omp parallel do private(i,j) - DO J=JSTA_2L,JEND_2U - DO I=1,IM - ABSV(I,J) = SPVAL - ENDDO - ENDDO - endif - -! print*,'dyval in CALVOR= ',DYVAL - - CALL EXCH_F(UWND) -! - IF (MODELNAME == 'GFS' .or. global) THEN - CALL EXCH(GDLAT(1,JSTA_2L)) - - allocate (wrk1(im,jsta:jend), wrk2(im,jsta:jend), & - & wrk3(im,jsta:jend), cosl(im,jsta_2l:jend_2u)) - allocate(iw(im),ie(im)) - - imb2 = im/2 -!$omp parallel do private(i) - do i=1,im - ie(i) = i+1 - iw(i) = i-1 - enddo - iw(1) = im - ie(im) = 1 - -! if(1>=jsta .and. 1<=jend)then -! if(cos(gdlat(1,1)*dtr)= SMALL) then - wrk1(i,j) = 1.0 / (ERAD*cosl(i,j)) - else - wrk1(i,j) = 0. - end if - if(i == im .or. i == 1) then - wrk2(i,j) = 1.0 / ((360.+GDLON(ip1,J)-GDLON(im1,J))*DTR) !1/dlam - else - wrk2(i,j) = 1.0 / ((GDLON(ip1,J)-GDLON(im1,J))*DTR) !1/dlam - end if - enddo - enddo -! CALL EXCH(cosl(1,JSTA_2L)) - CALL EXCH(cosl) - -!$omp parallel do private(i,j,ii) - DO J=JSTA,JEND - if (j == 1) then - if(gdlat(1,j) > 0.) then ! count from north to south - do i=1,im - ii = i + imb2 - if (ii > im) ii = ii - im - wrk3(i,j) = 1.0 / ((180.-GDLAT(i,J+1)-GDLAT(II,J))*DTR) !1/dphi - enddo - else ! count from south to north - do i=1,im - ii = i + imb2 - if (ii > im) ii = ii - im - wrk3(i,j) = 1.0 / ((180.+GDLAT(i,J+1)+GDLAT(II,J))*DTR) !1/dphi -! - enddo - end if - elseif (j == JM) then - if(gdlat(1,j) < 0.) then ! count from north to south - do i=1,im - ii = i + imb2 - if (ii > im) ii = ii - im - wrk3(i,j) = 1.0 / ((180.+GDLAT(i,J-1)+GDLAT(II,J))*DTR) - enddo - else ! count from south to north - do i=1,im - ii = i + imb2 - if (ii > im) ii = ii - im - wrk3(i,j) = 1.0 / ((180.-GDLAT(i,J-1)-GDLAT(II,J))*DTR) - enddo - end if - else - do i=1,im - wrk3(i,j) = 1.0 / ((GDLAT(I,J-1)-GDLAT(I,J+1))*DTR) !1/dphi - enddo - endif - enddo - - npass = 0 - - jtem = jm / 18 + 1 -!$omp parallel do private(i,j,ip1,im1,ii,jj,tx1,tx2) - DO J=JSTA,JEND -! npass = npass2 -! if (j > jm-jtem+1 .or. j < jtem) npass = npass3 - IF(J == 1) then ! Near North or South pole - if(gdlat(1,j) > 0.) then ! count from north to south - IF(cosl(1,j) >= SMALL) THEN !not a pole point - DO I=1,IM - ip1 = ie(i) - im1 = iw(i) - ii = i + imb2 - if (ii > im) ii = ii - im - if(VWND(ip1,J)==SPVAL .or. VWND(im1,J)==SPVAL .or. & - UWND(II,J)==SPVAL .or. UWND(I,J+1)==SPVAL) cycle - ABSV(I,J) = ((VWND(ip1,J)-VWND(im1,J))*wrk2(i,j) & - & + (UWND(II,J)*COSL(II,J) & - & + UWND(I,J+1)*COSL(I,J+1))*wrk3(i,j)) * wrk1(i,j) & - & + F(I,J) - enddo - ELSE !pole point, compute at j=2 - jj = 2 - DO I=1,IM - ip1 = ie(i) - im1 = iw(i) - if(VWND(ip1,JJ)==SPVAL .or. VWND(im1,JJ)==SPVAL .or. & - UWND(I,J)==SPVAL .or. UWND(I,jj+1)==SPVAL) cycle - ABSV(I,J) = ((VWND(ip1,JJ)-VWND(im1,JJ))*wrk2(i,jj) & - & - (UWND(I,J)*COSL(I,J) & - - UWND(I,jj+1)*COSL(I,Jj+1))*wrk3(i,jj)) * wrk1(i,jj) & - & + F(I,Jj) - enddo - ENDIF - else - IF(cosl(1,j) >= SMALL) THEN !not a pole point - DO I=1,IM - ip1 = ie(i) - im1 = iw(i) - ii = i + imb2 - if (ii > im) ii = ii - im - if(VWND(ip1,J)==SPVAL .or. VWND(im1,J)==SPVAL .or. & - UWND(II,J)==SPVAL .or. UWND(I,J+1)==SPVAL) cycle - ABSV(I,J) = ((VWND(ip1,J)-VWND(im1,J))*wrk2(i,j) & - & - (UWND(II,J)*COSL(II,J) & - & + UWND(I,J+1)*COSL(I,J+1))*wrk3(i,j)) * wrk1(i,j) & - & + F(I,J) - enddo - ELSE !pole point, compute at j=2 - jj = 2 - DO I=1,IM - ip1 = ie(i) - im1 = iw(i) - if(VWND(ip1,JJ)==SPVAL .or. VWND(im1,JJ)==SPVAL .or. & - UWND(I,J)==SPVAL .or. UWND(I,jj+1)==SPVAL) cycle - ABSV(I,J) = ((VWND(ip1,JJ)-VWND(im1,JJ))*wrk2(i,jj) & - & + (UWND(I,J)*COSL(I,J) & - - UWND(I,jj+1)*COSL(I,Jj+1))*wrk3(i,jj)) * wrk1(i,jj) & - & + F(I,Jj) - enddo - ENDIF - endif - ELSE IF(J == JM) THEN ! Near North or South Pole - if(gdlat(1,j) < 0.) then ! count from north to south - IF(cosl(1,j) >= SMALL) THEN !not a pole point - DO I=1,IM - ip1 = ie(i) - im1 = iw(i) - ii = i + imb2 - if (ii > im) ii = ii - im - if(VWND(ip1,J)==SPVAL .or. VWND(im1,J)==SPVAL .or. & - UWND(I,J-1)==SPVAL .or. UWND(II,J)==SPVAL) cycle - ABSV(I,J) = ((VWND(ip1,J)-VWND(im1,J))*wrk2(i,j) & - & - (UWND(I,J-1)*COSL(I,J-1) & - & + UWND(II,J)*COSL(II,J))*wrk3(i,j)) * wrk1(i,j) & - & + F(I,J) - enddo - ELSE !pole point,compute at jm-1 - jj = jm-1 - DO I=1,IM - ip1 = ie(i) - im1 = iw(i) - if(VWND(ip1,JJ)==SPVAL .or. VWND(im1,JJ)==SPVAL .or. & - UWND(I,jj-1)==SPVAL .or. UWND(I,J)==SPVAL) cycle - ABSV(I,J) = ((VWND(ip1,JJ)-VWND(im1,JJ))*wrk2(i,jj) & - & - (UWND(I,jj-1)*COSL(I,Jj-1) & - & - UWND(I,J)*COSL(I,J))*wrk3(i,jj)) * wrk1(i,jj) & - & + F(I,Jj) - enddo - ENDIF - else - IF(cosl(1,j) >= SMALL) THEN !not a pole point - DO I=1,IM - ip1 = ie(i) - im1 = iw(i) - ii = i + imb2 - if (ii > im) ii = ii - im - if(VWND(ip1,J)==SPVAL .or. VWND(im1,J)==SPVAL .or. & - UWND(I,J-1)==SPVAL .or. UWND(II,J)==SPVAL) cycle - ABSV(I,J) = ((VWND(ip1,J)-VWND(im1,J))*wrk2(i,j) & - & + (UWND(I,J-1)*COSL(I,J-1) & - & + UWND(II,J)*COSL(II,J))*wrk3(i,j)) * wrk1(i,j) & - & + F(I,J) - enddo - ELSE !pole point,compute at jm-1 - jj = jm-1 - DO I=1,IM - ip1 = ie(i) - im1 = iw(i) - if(VWND(ip1,JJ)==SPVAL .or. VWND(im1,JJ)==SPVAL .or. & - UWND(I,jj-1)==SPVAL .or. UWND(I,J)==SPVAL) cycle - ABSV(I,J) = ((VWND(ip1,JJ)-VWND(im1,JJ))*wrk2(i,jj) & - & + (UWND(I,jj-1)*COSL(I,Jj-1) & - & - UWND(I,J)*COSL(I,J))*wrk3(i,jj)) * wrk1(i,jj) & - & + F(I,Jj) - enddo - ENDIF - endif - ELSE - DO I=1,IM - ip1 = ie(i) - im1 = iw(i) - if(VWND(ip1,J)==SPVAL .or. VWND(im1,J)==SPVAL .or. & - UWND(I,J-1)==SPVAL .or. UWND(I,J+1)==SPVAL) cycle - ABSV(I,J) = ((VWND(ip1,J)-VWND(im1,J))*wrk2(i,j) & - & - (UWND(I,J-1)*COSL(I,J-1) & - - UWND(I,J+1)*COSL(I,J+1))*wrk3(i,j)) * wrk1(i,j) & - + F(I,J) - ENDDO - END IF -! if(ABSV(I,J)>1.0)print*,'Debug CALVOR',i,j,VWND(ip1,J),VWND(im1,J), & -! wrk2(i,j),UWND(I,J-1),COSL(I,J-1),UWND(I,J+1),COSL(I,J+1),wrk3(i,j),cosl(i,j),F(I,J),ABSV(I,J) - if (npass > 0) then - do i=1,im - tx1(i) = absv(i,j) - enddo - do nn=1,npass - do i=1,im - tx2(i+1) = tx1(i) - enddo - tx2(1) = tx2(im+1) - tx2(im+2) = tx2(2) - do i=2,im+1 - tx1(i-1) = 0.25 * (tx2(i-1) + tx2(i+1)) + 0.5*tx2(i) - enddo - enddo - do i=1,im - absv(i,j) = tx1(i) - enddo - endif - END DO ! end of J loop - -! deallocate (wrk1, wrk2, wrk3, cosl) -! GFS use lon avg as one scaler value for pole point - - call poleavg(IM,JM,JSTA,JEND,SMALL,COSL(1,jsta),SPVAL,ABSV(1,jsta)) - deallocate (wrk1, wrk2, wrk3, cosl, iw, ie) - - ELSE !(MODELNAME == 'GFS' .or. global) - - IF (GRIDTYPE == 'B')THEN - CALL EXCH_F(VWND) - ENDIF - - CALL DVDXDUDY(UWND,VWND) - - IF(GRIDTYPE == 'A')THEN -!$omp parallel do private(i,j,jmt2,tphi,r2dx,r2dy,dvdx,dudy,uavg) - DO J=JSTA_M,JEND_M - JMT2 = JM/2+1 - TPHI = (J-JMT2)*(DYVAL/gdsdegr)*DTR - DO I=2,IM-1 - IF(VWND(I+1,J)= SMALL) then - wrk1(i,j) = 1.0 / (ERAD*cosl(i,j)) - else - wrk1(i,j) = 0. - end if - if(i == im .or. i == 1) then - wrk2(i,j) = 1.0 / ((360.+GDLON(ip1,J)-GDLON(im1,J))*DTR) !1/dlam - else - wrk2(i,j) = 1.0 / ((GDLON(ip1,J)-GDLON(im1,J))*DTR) !1/dlam - end if - enddo - ENDDO - - CALL EXCH(cosl) - -!$omp parallel do private(i,j,ii) - DO J=JSTA,JEND - if (j == 1) then - if(gdlat(1,j) > 0.) then ! count from north to south - do i=1,im - ii = i + imb2 - if (ii > im) ii = ii - im - wrk3(i,j) = 1.0 / ((180.-GDLAT(i,J+1)-GDLAT(II,J))*DTR) !1/dphi - enddo - else ! count from south to north - do i=1,im - ii = i + imb2 - if (ii > im) ii = ii - im - wrk3(i,j) = 1.0 / ((180.+GDLAT(i,J+1)+GDLAT(II,J))*DTR) !1/dphi - enddo - end if - elseif (j == JM) then - if(gdlat(1,j) < 0.) then ! count from north to south - do i=1,im - ii = i + imb2 - if (ii > im) ii = ii - im - wrk3(i,j) = 1.0 / ((180.+GDLAT(i,J-1)+GDLAT(II,J))*DTR) - enddo - else ! count from south to north - do i=1,im - ii = i + imb2 - if (ii > im) ii = ii - im - wrk3(i,j) = 1.0 / ((180.-GDLAT(i,J-1)-GDLAT(II,J))*DTR) - enddo - end if - else - do i=1,im - wrk3(i,j) = 1.0 / ((GDLAT(I,J-1)-GDLAT(I,J+1))*DTR) !1/dphi - enddo - endif - enddo - - do l=1,lm -!$omp parallel do private(i,j) - DO J=JSTA,JEND - DO I=1,IM - DIV(I,J,l) = SPVAL - ENDDO - ENDDO - - CALL EXCH_F(VWND(1,jsta_2l,l)) - -!$omp parallel do private(i,j,ip1,im1,ii,jj) - DO J=JSTA,JEND - IF(J == 1) then ! Near North pole - if(gdlat(1,j) > 0.) then ! count from north to south - IF(cosl(1,j) >= SMALL) THEN !not a pole point - DO I=1,IM - ip1 = ie(i) - im1 = iw(i) - ii = i + imb2 - if (ii > im) ii = ii - im - DIV(I,J,l) = ((UWND(ip1,J,l)-UWND(im1,J,l))*wrk2(i,j) & - & - (VWND(II,J,l)*COSL(II,J) & - & + VWND(I,J+1,l)*COSL(I,J+1))*wrk3(i,j)) * wrk1(i,j) - enddo -!-- - ELSE !North pole point, compute at j=2 - jj = 2 - do i=1,im - ip1 = ie(i) - im1 = iw(i) - DIV(I,J,l) = ((UWND(ip1,jj,l)-UWND(im1,jj,l))*wrk2(i,jj) & - & + (VWND(I,J,l)*COSL(I,J) & - - VWND(I,jj+1,l)*COSL(I,jj+1))*wrk3(i,jj)) * wrk1(i,jj) - enddo -!-- - ENDIF - else - IF(cosl(1,j) >= SMALL) THEN !not a pole point - DO I=1,IM - ip1 = ie(i) - im1 = iw(i) - ii = i + imb2 - if (ii > im) ii = ii - im - DIV(I,J,l) = ((UWND(ip1,J,l)-UWND(im1,J,l))*wrk2(i,j) & - & + (VWND(II,J,l)*COSL(II,J) & - & + VWND(I,J+1,l)*COSL(I,J+1))*wrk3(i,j)) * wrk1(i,j) - enddo -!-- - ELSE !North pole point, compute at j=2 - jj = 2 - do i=1,im - ip1 = ie(i) - im1 = iw(i) - DIV(I,J,l) = ((UWND(ip1,jj,l)-UWND(im1,jj,l))*wrk2(i,jj) & - & - (VWND(I,J,l)*COSL(I,J) & - - VWND(I,jj+1,l)*COSL(I,jj+1))*wrk3(i,jj)) * wrk1(i,jj) - enddo - ENDIF - endif - ELSE IF(J == JM) THEN ! Near South pole - if(gdlat(1,j) < 0.) then ! count from north to south - IF(cosl(1,j) >= SMALL) THEN !not a pole point - DO I=1,IM - ip1 = ie(i) - im1 = iw(i) - ii = i + imb2 - if (ii > im) ii = ii - im - DIV(I,J,l) = ((UWND(ip1,J,l)-UWND(im1,J,l))*wrk2(i,j) & - & + (VWND(I,J-1,l)*COSL(I,J-1) & - & + VWND(II,J,l)*COSL(II,J))*wrk3(i,j)) * wrk1(i,j) - enddo -!-- - ELSE !South pole point,compute at jm-1 - jj = jm-1 - do i=1,im - ip1 = ie(i) - im1 = iw(i) - DIV(I,J,l) = ((UWND(ip1,JJ,l)-UWND(im1,JJ,l))*wrk2(i,jj) & - & + (VWND(I,jj-1,l)*COSL(I,Jj-1) & - & - VWND(I,J,l)*COSL(I,J))*wrk3(i,jj)) * wrk1(i,jj) - - enddo - ENDIF - else - IF(cosl(1,j) >= SMALL) THEN !not a pole point - DO I=1,IM - ip1 = ie(i) - im1 = iw(i) - ii = i + imb2 - if (ii > im) ii = ii - im - DIV(I,J,l) = ((UWND(ip1,J,l)-UWND(im1,J,l))*wrk2(i,j) & - & - (VWND(I,J-1,l)*COSL(I,J-1) & - & + VWND(II,J,l)*COSL(II,J))*wrk3(i,j)) * wrk1(i,j) - enddo -!-- - ELSE !South pole point,compute at jm-1 - jj = jm-1 - do i=1,im - ip1 = ie(i) - im1 = iw(i) - DIV(I,J,l) = ((UWND(ip1,JJ,l)-UWND(im1,JJ,l))*wrk2(i,jj) & - & - (VWND(I,jj-1,l)*COSL(I,Jj-1) & - & - VWND(I,J,l)*COSL(I,J))*wrk3(i,jj)) * wrk1(i,jj) - - enddo - ENDIF - endif - ELSE - DO I=1,IM - ip1 = ie(i) - im1 = iw(i) - DIV(I,J,l) = ((UWND(ip1,J,l)-UWND(im1,J,l))*wrk2(i,j) & - & + (VWND(I,J-1,l)*COSL(I,J-1) & - - VWND(I,J+1,l)*COSL(I,J+1))*wrk3(i,j)) * wrk1(i,j) -!sk06132016 - if(DIV(I,J,l)>1.0)print*,'Debug in CALDIV',i,j,UWND(ip1,J,l),UWND(im1,J,l), & - & wrk2(i,j),VWND(I,J-1,l),COSL(I,J-1),VWND(I,J+1,l),COSL(I,J+1), & - & wrk3(i,j),wrk1(i,j),DIV(I,J,l) -!-- - ENDDO - ENDIF - ENDDO ! end of J loop - -! GFS use lon avg as one scaler value for pole point - call poleavg(IM,JM,JSTA,JEND,SMALL,COSL(1,jsta),SPVAL,DIV(1,jsta,l)) -!sk06142016e - if(DIV(1,jsta,l)>1.0)print*,'Debug in CALDIV',jsta,DIV(1,jsta,l) -! print*,'Debug in CALDIV',' jsta= ',jsta,DIV(1,jsta,l) - - enddo ! end of l looop -!-- - deallocate (wrk1, wrk2, wrk3, cosl, iw, ie) - - - END SUBROUTINE CALDIV - - SUBROUTINE CALGRADPS(PS,PSX,PSY) -!$$$ SUBPROGRAM DOCUMENTATION BLOCK -! . . . -! SUBPROGRAM: CALGRADPS COMPUTES GRADIENTS OF A SCALAR FIELD PS OR LNPS -! PRGRMMR: SAJAL KAR ORG: W/NP2 DATE: 16-05-05 -! -! ABSTRACT: -! FOR GFS, THIS ROUTINE COMPUTES HRIZONTAL GRADIENTS OF PS OR LNPS -! USING 2ND-ORDER CENTERED SCHEME ON A LAT-LON GRID -! -! PROGRAM HISTORY LOG: -! 16-05-05 SAJAL KAR REDUCED FROM CALVORT TO ZONAL AND MERIDIONAL -! GRADIENTS OF GIVEN SURFACE PRESSURE PS, OR LNPS -! -! USAGE: CALL CALGRADPS(PS,PSX,PSY) -! INPUT ARGUMENT LIST: -! PS - SURFACE PRESSURE (PA) MASS-POINTS -! -! OUTPUT ARGUMENT LIST: -! PSX - ZONAL GRADIENT OF PS AT MASS-POINTS -! PSY - MERIDIONAL GRADIENT OF PS AT MASS-POINTS -! -! OUTPUT FILES: -! NONE -! -! SUBPROGRAMS CALLED: -! UTILITIES: -! NONE -! LIBRARY: -! COMMON - CTLBLK -! -! ATTRIBUTES: -! LANGUAGE: FORTRAN -! MACHINE : WCOSS -!$$$ -! - use masks, only: gdlat, gdlon - use params_mod, only: dtr, d00, small, erad - use ctlblk_mod, only: jsta_2l, jend_2u, spval, modelname, global, & - jsta, jend, im, jm, jsta_m, jend_m - use gridspec_mod, only: gridtype - - implicit none -! -! DECLARE VARIABLES. -! - REAL, dimension(im,jsta_2l:jend_2u), intent(in) :: PS - REAL, dimension(im,jsta_2l:jend_2u), intent(inout) :: PSX,PSY -! - real, allocatable :: wrk1(:,:), wrk2(:,:), wrk3(:,:), cosl(:,:) - INTEGER, allocatable :: IHE(:),IHW(:), IE(:),IW(:) -! - integer I,J,ip1,im1,ii,iir,iil,jj,imb2 -! -!*************************************************************************** -! START CALGRADPS HERE. -! -! LOOP TO COMPUTE ZONAL AND MERIDIONAL GRADIENTS OF PS OR LNPS -! -!sk06162016 DO J=JSTA_2L,JEND_2U -!$omp parallel do private(i,j) - DO J=JSTA,JEND - DO I=1,IM - PSX(I,J) = SPVAL - PSY(I,J) = SPVAL -!sk PSX(I,J) = D00 -!sk PSY(I,J) = D00 - ENDDO - ENDDO - - CALL EXCH_F(PS) - -! IF (MODELNAME == 'GFS' .or. global) THEN - CALL EXCH(GDLAT(1,JSTA_2L)) - - allocate (wrk1(im,jsta:jend), wrk2(im,jsta:jend), & - & wrk3(im,jsta:jend), cosl(im,jsta_2l:jend_2u)) - allocate(iw(im),ie(im)) - - imb2 = im/2 -!$omp parallel do private(i) - do i=1,im - ie(i) = i+1 - iw(i) = i-1 - enddo - iw(1) = im - ie(im) = 1 - - -!$omp parallel do private(i,j,ip1,im1) - DO J=JSTA,JEND - do i=1,im - ip1 = ie(i) - im1 = iw(i) - cosl(i,j) = cos(gdlat(i,j)*dtr) - if(cosl(i,j) >= SMALL) then - wrk1(i,j) = 1.0 / (ERAD*cosl(i,j)) - else - wrk1(i,j) = 0. - end if - if(i == im .or. i == 1) then - wrk2(i,j) = 1.0 / ((360.+GDLON(ip1,J)-GDLON(im1,J))*DTR) !1/dlam - else - wrk2(i,j) = 1.0 / ((GDLON(ip1,J)-GDLON(im1,J))*DTR) !1/dlam - end if - enddo - ENDDO - - CALL EXCH(cosl) - -!$omp parallel do private(i,j,ii) - DO J=JSTA,JEND - if (j == 1) then - if(gdlat(1,j) > 0.) then ! count from north to south - do i=1,im - ii = i + imb2 - if (ii > im) ii = ii - im - wrk3(i,j) = 1.0 / ((180.-GDLAT(i,J+1)-GDLAT(II,J))*DTR) !1/dphi - enddo - else ! count from south to north - do i=1,im - ii = i + imb2 - if (ii > im) ii = ii - im - wrk3(i,j) = 1.0 / ((180.+GDLAT(i,J+1)+GDLAT(II,J))*DTR) !1/dphi - enddo - end if - elseif (j == JM) then - if(gdlat(1,j) < 0.) then ! count from north to south - do i=1,im - ii = i + imb2 - if (ii > im) ii = ii - im - wrk3(i,j) = 1.0 / ((180.+GDLAT(i,J-1)+GDLAT(II,J))*DTR) - enddo - else ! count from south to north - do i=1,im - ii = i + imb2 - if (ii > im) ii = ii - im - wrk3(i,j) = 1.0 / ((180.-GDLAT(i,J-1)-GDLAT(II,J))*DTR) - enddo - end if - else - do i=1,im - wrk3(i,j) = 1.0 / ((GDLAT(I,J-1)-GDLAT(I,J+1))*DTR) !1/dphi - enddo - endif - ENDDO - -!$omp parallel do private(i,j,ip1,im1,ii,jj) - DO J=JSTA,JEND - IF(J == 1) then ! Near North pole - if(gdlat(1,j) > 0.) then ! count from north to south - IF(cosl(1,j) >= SMALL) THEN !not a pole point - DO I=1,IM - ip1 = ie(i) - im1 = iw(i) - ii = i + imb2 - if (ii > im) ii = ii - im - PSX(I,J) = (PS(ip1,J)-PS(im1,J))*wrk2(i,j)*wrk1(i,j) - PSY(I,J) = (PS(II,J)-PS(I,J+1))*wrk3(i,j)/ERAD - enddo - ELSE !North pole point, compute at j=2 - jj = 2 - DO I=1,IM - ip1 = ie(i) - im1 = iw(i) - PSX(I,J) = (PS(ip1,jj)-PS(im1,jj))*wrk2(i,jj)*wrk1(i,jj) - PSY(I,J) = (PS(I,J)-PS(I,jj+1))*wrk3(i,jj)/ERAD - enddo - ENDIF - else - IF(cosl(1,j) >= SMALL) THEN !not a pole point - DO I=1,IM - ip1 = ie(i) - im1 = iw(i) - ii = i + imb2 - if (ii > im) ii = ii - im - PSX(I,J) = (PS(ip1,J)-PS(im1,J))*wrk2(i,j)*wrk1(i,j) - PSY(I,J) = - (PS(II,J)-PS(I,J+1))*wrk3(i,j)/ERAD - enddo - ELSE !North pole point, compute at j=2 - jj = 2 - DO I=1,IM - ip1 = ie(i) - im1 = iw(i) - PSX(I,J) = (PS(ip1,jj)-PS(im1,jj))*wrk2(i,jj)*wrk1(i,jj) - PSY(I,J) = - (PS(I,J)-PS(I,jj+1))*wrk3(i,jj)/ERAD - enddo - ENDIF - endif - ELSE IF(J == JM) THEN ! Near South pole - if(gdlat(1,j) < 0.) then ! count from north to south - IF(cosl(1,j) >= SMALL) THEN !not a pole point - DO I=1,IM - ip1 = ie(i) - im1 = iw(i) - ii = i + imb2 - if (ii > im) ii = ii - im - PSX(I,J) = (PS(ip1,J)-PS(im1,J))*wrk2(i,j)*wrk1(i,j) - PSY(I,J) = (PS(I,J-1)-PS(II,J))*wrk3(i,j)/ERAD - enddo - ELSE !South pole point,compute at jm-1 - jj = jm-1 - DO I=1,IM - ip1 = ie(i) - im1 = iw(i) - PSX(I,J) = (PS(ip1,JJ)-PS(im1,JJ))*wrk2(i,jj)*wrk1(i,jj) - PSY(I,J) = (PS(I,jj-1)-PS(I,J))*wrk3(i,jj)/ERAD - enddo - ENDIF - else - IF(cosl(1,j) >= SMALL) THEN !not a pole point - DO I=1,IM - ip1 = ie(i) - im1 = iw(i) - ii = i + imb2 - if (ii > im) ii = ii - im - PSX(I,J) = (PS(ip1,J)-PS(im1,J))*wrk2(i,j)*wrk1(i,j) - PSY(I,J) = - (PS(I,J-1)-PS(II,J))*wrk3(i,j)/ERAD - enddo - ELSE !South pole point,compute at jm-1 - jj = jm-1 - DO I=1,IM - ip1 = ie(i) - im1 = iw(i) - PSX(I,J) = (PS(ip1,JJ)-PS(im1,JJ))*wrk2(i,jj)*wrk1(i,jj) - PSY(I,J) = - (PS(I,jj-1)-PS(I,J))*wrk3(i,jj)/ERAD - enddo - ENDIF - endif - ELSE - DO I=1,IM - ip1 = ie(i) - im1 = iw(i) - PSX(I,J) = (PS(ip1,J)-PS(im1,J))*wrk2(i,j)*wrk1(i,j) - PSY(I,J) = (PS(I,J-1)-PS(I,J+1))*wrk3(i,j)/ERAD -!sk06142016A - if(PSX(I,J)>100.0)print*,'Debug in CALGRADPS: PSX',i,j,PS(ip1,J),PS(im1,J), & -! print*,'Debug in CALGRADPS',i,j,PS(ip1,J),PS(im1,J), & - & wrk2(i,j),wrk1(i,j),PSX(I,J) - if(PSY(I,J)>100.0)print*,'Debug in CALGRADPS: PSY',i,j,PS(i,J-1),PS(i,J+1), & -! print*,'Debug in CALGRADPS',i,j,PS(i,J-1),PS(i,J+1), & - & wrk3(i,j),ERAD,PSY(I,J) -!-- - ENDDO - END IF -! - ENDDO ! end of J loop - - deallocate (wrk1, wrk2, wrk3, cosl, iw, ie) - -! END IF - - END SUBROUTINE CALGRADPS diff --git a/sorc/ncep_post.fd/CALWXT.f b/sorc/ncep_post.fd/CALWXT.f index 2afc51bca..48aac1332 100644 --- a/sorc/ncep_post.fd/CALWXT.f +++ b/sorc/ncep_post.fd/CALWXT.f @@ -9,6 +9,8 @@ SUBROUTINE CALWXT_POST(T,Q,PMID,PINT,HTM,LMH,PREC,ZINT,IWX,ZWET) ! 02-01-15 MIKE BALDWIN - WRF VERSION ! 05-07-07 BINBIN ZHOU - ADD PREC FOR RSM ! 19-10-30 Bo CUI - REMOVE "GOTO" STATEMENT +! 21-07-26 Wen Meng - Restrict computation from undefined grids +! 21-10-31 JESSE MENG - 2D DECOMPOSITION ! ! ! ROUTINE TO COMPUTE PRECIPITATION TYPE USING A DECISION TREE @@ -21,19 +23,20 @@ SUBROUTINE CALWXT_POST(T,Q,PMID,PINT,HTM,LMH,PREC,ZINT,IWX,ZWET) ! use params_mod, only: h1m12, d00, d608, h1, rog use ctlblk_mod, only: jsta, jend, spval, modelname,pthresh, im, & - jsta_2l, jend_2u, lm, lp1 + jsta_2l, jend_2u, lm, lp1, & + ista, iend, ista_2l, iend_2u !- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - implicit none ! ! INPUT: ! T,Q,PMID,HTM,LMH,PREC,ZINT ! - real,dimension(IM,jsta_2l:jend_2u),intent(in) :: LMH - real,dimension(IM,jsta_2l:jend_2u,LM),intent(in) :: T,Q,PMID,HTM - real,dimension(IM,jsta_2l:jend_2u,LP1),intent(in) :: ZINT,PINT - integer,DIMENSION(IM,jsta:jend),intent(inout) :: IWX - real,dimension(IM,jsta_2l:jend_2u),intent(inout) :: PREC - real,DIMENSION(IM,jsta:jend),intent(inout) :: ZWET + real,dimension(ista_2l:iend_2u,jsta_2l:jend_2u),intent(in) :: LMH + real,dimension(ista_2l:iend_2u,jsta_2l:jend_2u,LM),intent(in) :: T,Q,PMID,HTM + real,dimension(ista_2l:iend_2u,jsta_2l:jend_2u,LP1),intent(in) :: ZINT,PINT + integer,DIMENSION(ista:iend,jsta:jend),intent(inout) :: IWX + real,dimension(ista_2l:iend_2u,jsta_2l:jend_2u),intent(inout) :: PREC + real,DIMENSION(ista:iend,jsta:jend),intent(inout) :: ZWET ! OUTPUT: @@ -48,8 +51,8 @@ SUBROUTINE CALWXT_POST(T,Q,PMID,PINT,HTM,LMH,PREC,ZINT,IWX,ZWET) ! INTERNAL: ! REAL, ALLOCATABLE :: TWET(:,:,:) - integer,DIMENSION(IM,jsta:jend) :: KARR,LICEE - real, DIMENSION(IM,jsta:jend) :: TCOLD,TWARM + integer,DIMENSION(ista:iend,jsta:jend) :: KARR,LICEE + real, DIMENSION(ista:iend,jsta:jend) :: TCOLD,TWARM logical :: jcontinue=.true. ! SUBROUTINES CALLED: @@ -68,12 +71,12 @@ SUBROUTINE CALWXT_POST(T,Q,PMID,PINT,HTM,LMH,PREC,ZINT,IWX,ZWET) real PSFCK,TDCHK,A,TDKL,TDPRE,TLMHK,TWRMK,AREAS8,AREAP4, & SURFW,SURFC,DZKL,AREA1,PINTK1,PINTK2,PM150,PKL,TKL,QKL - ALLOCATE ( TWET(IM,JSTA_2L:JEND_2U,LM) ) + ALLOCATE ( TWET(ISTA_2L:IEND_2U,JSTA_2L:JEND_2U,LM) ) ! !!$omp parallel do DO J=JSTA,JEND - DO I=1,IM + DO I=ISTA,IEND IWX(I,J) = 0 ZWET(I,J) = SPVAL ! if (I == 324 .and. J == 390) then @@ -87,7 +90,7 @@ SUBROUTINE CALWXT_POST(T,Q,PMID,PINT,HTM,LMH,PREC,ZINT,IWX,ZWET) IF(MODELNAME=='RSM') THEN !add by Binbin because of different unit DO J=JSTA,JEND - DO I=1,IM + DO I=ISTA,IEND PREC(I,J) = PREC(I,J)*3*3600.0 ENDDO ENDDO @@ -97,7 +100,7 @@ SUBROUTINE CALWXT_POST(T,Q,PMID,PINT,HTM,LMH,PREC,ZINT,IWX,ZWET) ! !!$omp parallel do private(a,lmhk,pkl,psfck,qkl,tdchk,tdkl,tdpre,tkl) DO 800 J=JSTA,JEND - DO 800 I=1,IM + DO 800 I=ISTA,IEND LMHK=NINT(LMH(I,J)) ! ! SKIP THIS POINT IF NO PRECIP THIS TIME STEP @@ -130,12 +133,14 @@ SUBROUTINE CALWXT_POST(T,Q,PMID,PINT,HTM,LMH,PREC,ZINT,IWX,ZWET) ! AND 500 MB ! IF (PKL<50000.0.OR.PKL>PSFCK-7000.0) CYCLE + IF(QKLTWARM(I,J)) TWARM(I,J)=TKL IF (TDPRE @file -! -!> Subprogram: calwxt_bourg Calculate precipitation type (Bourgouin) -!! Prgmmr: Baldwin Org: np22 Date: 1999-07-06 -!! -!! Abstract: This routine computes precipitation type -!! using a decision tree approach that uses the so-called -!! "energy method" of Bourgouin of AES (Canada) 1992 -!! -!! Program history log: -!! 1999-07-06 M Baldwin -!! 1999-09-20 M Baldwin make more consistent with bourgouin (1992) -!! 2005-08-24 G Manikin added to wrf post -!! 2007-06-19 M Iredell mersenne twister, best practices -!! 2015-00-00 S Moorthi changed random number call and optimization and cleanup -!! -!! Usage: call calwxt_bourg(im,jm,jsta_2l,jend_2u,jsta,jend,lm,lp1, & -!! & iseed,g,pthresh, & -!! & t,q,pmid,pint,lmh,prec,zint,ptype) -!! Input argument list: -!! im integer i dimension -!! jm integer j dimension -!! jsta_2l integer j dimension start point (including haloes) -!! jend_2u integer j dimension end point (including haloes) -!! jsta integer j dimension start point (excluding haloes) -!! jend integer j dimension end point (excluding haloes) -!! lm integer k dimension -!! lp1 integer k dimension plus 1 -!! iseed integer random number seed -!! g real gravity (m/s**2) -!! pthresh real precipitation threshold (m) -!! t real(im,jsta_2l:jend_2u,lm) mid layer temp (K) -!! q real(im,jsta_2l:jend_2u,lm) specific humidity (kg/kg) -!! pmid real(im,jsta_2l:jend_2u,lm) mid layer pressure (Pa) -!! pint real(im,jsta_2l:jend_2u,lp1) interface pressure (Pa) -!! lmh real(im,jsta_2l:jend_2u) max number of layers -!! prec real(im,jsta_2l:jend_2u) precipitation (m) -!! zint real(im,jsta_2l:jend_2u,lp1) interface height (m) -!! Output argument list: -!! ptype integer(im,jm) instantaneous weather type () -!! acts like a 4 bit binary -!! 1111 = rain/freezing rain/ice pellets/snow -!! where the one's digit is for snow -!! the two's digit is for ice pellets -!! the four's digit is for freezing rain -!! and the eight's digit is for rain -!! in other words... -!! ptype=1 snow -!! ptype=2 ice pellets/mix with ice pellets -!! ptype=4 freezing rain/mix with freezing rain -!! ptype=8 rain -!! -!! Modules used: -!! mersenne_twister pseudo-random number generator -!! -!! Subprograms called: -!! random_number pseudo-random number generator -!! -!! Attributes: -!! Language: Fortran 90 -!! -!! Remarks: vertical order of arrays must be layer 1 = top -!! and layer lmh = bottom -!! -!! +!> @brief Subroutine that calculate precipitation type (Bourgouin). +!> +!> This routine computes precipitation type. +!> using a decision tree approach that uses the so-called +!> "energy method" of Bourgouin of AES (Canada) 1992. +!> +!> @param[in] im integer i dimension. +!> @param[in] jm integer j dimension. +!> @param[in] jsta_2l integer j dimension start point (including haloes). +!> @param[in] jend_2u integer j dimension end point (including haloes). +!> @param[in] jsta integer j dimension start point (excluding haloes). +!> @param[in] jend integer j dimension end point (excluding haloes). +!> @param[in] lm integer k dimension. +!> @param[in] lp1 integer k dimension plus 1. +!> @param[in] iseed integer random number seed. +!> @param[in] g real gravity (m/s**2). +!> @param[in] pthresh real precipitation threshold (m). +!> @param[in] t real(im,jsta_2l:jend_2u,lm) mid layer temp (K). +!> @param[in] q real(im,jsta_2l:jend_2u,lm) specific humidity (kg/kg). +!> @param[in] pmid real(im,jsta_2l:jend_2u,lm) mid layer pressure (Pa). +!> @param[in] pint real(im,jsta_2l:jend_2u,lp1) interface pressure (Pa). +!> @param[in] lmh real(im,jsta_2l:jend_2u) max number of layers. +!> @param[in] prec real(im,jsta_2l:jend_2u) precipitation (m). +!> @param[in] zint real(im,jsta_2l:jend_2u,lp1) interface height (m). +!> @param[out] ptype integer(im,jm) instantaneous weather type () acts like a 4 bit binary 1111 = rain/freezing rain/ice pellets/snow. +!>
+!>                   where the one's digit is for snow
+!>                         the two's digit is for ice pellets
+!>                         the four's digit is for freezing rain
+!>                         and the eight's digit is for rain
+!>                         in other words...
+!>                         ptype=1 snow
+!>                         ptype=2 ice pellets/mix with ice pellets
+!>                         ptype=4 freezing rain/mix with freezing rain
+!>                         ptype=8 rain
+!>
+!> +!> ### Program history log: +!> Date | Programmer | Comments +!> -----|------------|--------- +!> 1999-07-06 | M Baldwin | Initial +!> 1999-09-20 | M Baldwin | make more consistent with bourgouin (1992) +!> 2005-08-24 | G Manikin | added to wrf post +!> 2007-06-19 | M Iredell | mersenne twister, best practices +!> 2015-??-?? | S Moorthi | changed random number call and optimization and cleanup +!> 2021-10-31 | J Meng | 2D DECOMPOSITION +!> +!> Remarks: vertical order of arrays must be layer 1 = top +!> and layer lmh = bottom +!> +!> @author M Baldwin np22 @date 1999-07-06 - subroutine calwxt_bourg_post(im,jm,jsta_2l,jend_2u,jsta,jend,lm,lp1, & + subroutine calwxt_bourg_post(im,ista_2l,iend_2u,ista,iend,jm,jsta_2l,jend_2u,jsta,jend,lm,lp1, & & iseed,g,pthresh, & & t,q,pmid,pint,lmh,prec,zint,ptype,me) implicit none ! ! input: - integer,intent(in):: im,jm,jsta_2l,jend_2u,jsta,jend,lm,lp1,iseed,me + integer,intent(in):: im,jm,jsta_2l,jend_2u,jsta,jend,lm,lp1,iseed,me,& + ista_2l,iend_2u,ista,iend real,intent(in):: g,pthresh - real,intent(in), dimension(im,jsta_2l:jend_2u,lm) :: t, q, pmid - real,intent(in), dimension(im,jsta_2l:jend_2u,lp1) :: pint, zint - real,intent(in), dimension(im,jsta_2l:jend_2u) :: lmh, prec + real,intent(in), dimension(ista_2l:iend_2u,jsta_2l:jend_2u,lm) :: t, q, pmid + real,intent(in), dimension(ista_2l:iend_2u,jsta_2l:jend_2u,lp1) :: pint, zint + real,intent(in), dimension(ista_2l:iend_2u,jsta_2l:jend_2u) :: lmh, prec ! ! output: ! real,intent(out) :: ptype(im,jm) - integer,intent(out) :: ptype(im,jsta:jend) + integer,intent(out) :: ptype(ista:iend,jsta:jend) ! integer i,j,ifrzl,iwrml,l,lhiwrm,lmhk,jlen real pintk1,areane,tlmhk,areape,pintk2,surfw,area1,dzkl,psfck,r1,r2 @@ -97,7 +85,7 @@ subroutine calwxt_bourg_post(im,jm,jsta_2l,jend_2u,jsta,jend,lm,lp1, & ! !$omp parallel do do j=jsta,jend - do i=1,im + do i=ista,iend ptype(i,j) = 0 enddo enddo @@ -117,7 +105,7 @@ subroutine calwxt_bourg_post(im,jm,jsta_2l,jend_2u,jsta,jend,lm,lp1, & do j=jsta,jend ! if(me==1)print *,'incalwxtbg, j=',j - do i=1,im + do i=ista,iend lmhk = min(nint(lmh(i,j)),lm) psfck = pint(i,j,lmhk+1) ! diff --git a/sorc/ncep_post.fd/CALWXT_DOMINANT.f b/sorc/ncep_post.fd/CALWXT_DOMINANT.f index 6d397be45..7912d80fd 100644 --- a/sorc/ncep_post.fd/CALWXT_DOMINANT.f +++ b/sorc/ncep_post.fd/CALWXT_DOMINANT.f @@ -1,28 +1,32 @@ SUBROUTINE CALWXT_DOMINANT_POST(PREC,RAIN,FREEZR,SLEET,SNOW, & & DOMR,DOMZR,DOMIP,DOMS) ! -! WRITTEN: 24 AUGUST 2005, G MANIKIN +! WRITTEN: 24 AUGUST 2005, G MANIKIN +! +! PROGRAM HISTORY LOG: +! 21-10-31 JESSE MENG - 2D DECOMPOSITION ! ! THIS ROUTINE TAKES THE PRECIP TYPE SOLUTIONS FROM DIFFERENT ! ALGORITHMS AND SUMS THEM UP TO GIVE A DOMINANT TYPE ! ! use params_mod - use ctlblk_mod, only: jsta, jend, pthresh, im, jsta_2l, jend_2u + use ctlblk_mod, only: jsta, jend, pthresh, im, jsta_2l, jend_2u, & + ista, iend, ista_2l, iend_2u ! use ctlblk_mod !- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - implicit none ! integer,PARAMETER :: NALG=5 ! INPUT: - REAL PREC(IM,jsta_2l:jend_2u) - real,DIMENSION(IM,jsta:jend), intent(inout) :: DOMS,DOMR,DOMZR,DOMIP - real,DIMENSION(IM,jsta:jend,NALG),intent(in) :: RAIN,SNOW,SLEET,FREEZR + REAL PREC(ista_2l:iend_2u,jsta_2l:jend_2u) + real,DIMENSION(ista:iend,jsta:jend), intent(inout) :: DOMS,DOMR,DOMZR,DOMIP + real,DIMENSION(ista:iend,jsta:jend,NALG),intent(in) :: RAIN,SNOW,SLEET,FREEZR integer I,J,L real TOTSN,TOTIP,TOTR,TOTZR !-------------------------------------------------------------------------- !$omp parallel do private(i,j) DO J=JSTA,JEND - DO I=1,IM + DO I=ISTA,IEND DOMR(I,J) = 0. DOMS(I,J) = 0. DOMZR(I,J) = 0. @@ -32,7 +36,7 @@ SUBROUTINE CALWXT_DOMINANT_POST(PREC,RAIN,FREEZR,SLEET,SNOW, & ! !$omp parallel do private(i,j,totsn,totip,totr,totzr) DO J=JSTA,JEND - DO I=1,IM + DO I=ISTA,IEND ! SKIP THIS POINT IF NO PRECIP THIS TIME STEP IF (PREC(I,J) <= PTHRESH) cycle TOTSN = 0 diff --git a/sorc/ncep_post.fd/CALWXT_EXPLICIT.f b/sorc/ncep_post.fd/CALWXT_EXPLICIT.f index 36fb23d17..1b8b78367 100644 --- a/sorc/ncep_post.fd/CALWXT_EXPLICIT.f +++ b/sorc/ncep_post.fd/CALWXT_EXPLICIT.f @@ -5,10 +5,13 @@ SUBROUTINE CALWXT_EXPLICIT_POST(LMH,THS,PMID,PREC,SR,F_RIMEF,IWX) ! ! ROUTINE TO COMPUTE PRECIPITATION TYPE USING EXPLICIT FIELDS ! FROM THE MODEL MICROPHYSICS +! +! PROGRAM HISTORY LOG: +! 21-10-31 JESSE MENG - 2D DECOMPOSITION use params_mod, only: p1000, capa use ctlblk_mod, only: jsta, jend, modelname, pthresh, im, jsta_2l, & - jend_2u, lm + jend_2u, lm, ista, iend, ista_2l, iend_2u !- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - implicit none ! @@ -16,9 +19,9 @@ SUBROUTINE CALWXT_EXPLICIT_POST(LMH,THS,PMID,PREC,SR,F_RIMEF,IWX) ! PARAMETERS: ! ! INPUT: - real,dimension(im,jsta_2l:jend_2u,lm),intent(in) :: F_RimeF, pmid - REAL,dimension(im,jsta_2l:jend_2u), intent(in) :: LMH, PREC, THS, SR - integer,dimension(im,jsta:jend), intent(inout) :: IWX + real,dimension(ista_2l:iend_2u,jsta_2l:jend_2u,lm),intent(in) :: F_RimeF, pmid + REAL,dimension(ista_2l:iend_2u,jsta_2l:jend_2u), intent(in) :: LMH, PREC, THS, SR + integer,dimension(ista:iend,jsta:jend), intent(inout) :: IWX integer I,J,LMHK real PSFC,TSKIN,SNOW ! @@ -26,7 +29,7 @@ SUBROUTINE CALWXT_EXPLICIT_POST(LMH,THS,PMID,PREC,SR,F_RIMEF,IWX) ! !$omp parallel do private(i,j) DO J=JSTA,JEND - DO I=1,IM + DO I=ISTA,IEND IWX(I,J) = 0 ENDDO ENDDO @@ -34,7 +37,7 @@ SUBROUTINE CALWXT_EXPLICIT_POST(LMH,THS,PMID,PREC,SR,F_RIMEF,IWX) ! !$omp parallel do private(j,i,lmhk,psfc,tskin) DO J=JSTA,JEND - DO I=1,IM + DO I=ISTA,IEND LMHK=LMH(I,J) ! ! SKIP THIS POINT IF NO PRECIP THIS TIME STEP diff --git a/sorc/ncep_post.fd/CALWXT_RAMER.f b/sorc/ncep_post.fd/CALWXT_RAMER.f index b05f64922..5c573db20 100644 --- a/sorc/ncep_post.fd/CALWXT_RAMER.f +++ b/sorc/ncep_post.fd/CALWXT_RAMER.f @@ -7,9 +7,10 @@ ! Weather Systems, Vienna, VA, Amer. Meteor. Soc., 227-230. ! ! CODE ADAPTED FOR WRF POST 24 AUGUST 2005 G MANIKIN - +! ! PROGRAM HISTORY LOG: ! 10-30-19 Bo CUI - Remove "GOTO" statement +! 21-10-31 JESSE MENG - 2D DECOMPOSITION !ccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc ! SUBROUTINE CALWXT_RAMER_POST(T,Q,PMID,PINT,LMH,PREC,PTYP) @@ -24,7 +25,8 @@ SUBROUTINE CALWXT_RAMER_POST(T,Q,PMID,PINT,LMH,PREC,PTYP) ! + ptyp) ! output(2) phase 2=Rain, 3=Frzg, 4=Solid, ! 6=IP JC 9/16/99 use params_mod, only: pq0, a2, a3, a4 - use CTLBLK_mod, only: me, im, jsta_2l, jend_2u, lm, lp1, jsta, jend, pthresh + use CTLBLK_mod, only: me, im, jsta_2l, jend_2u, lm, lp1, jsta, jend, pthresh,& + ista, iend, ista_2l, iend_2u !- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - implicit none ! @@ -37,13 +39,13 @@ SUBROUTINE CALWXT_RAMER_POST(T,Q,PMID,PINT,LMH,PREC,PTYP) INTEGER*4 i, k1, lll, k2, toodry, iflag, nq ! REAL xxx ,mye, icefrac,flg,flag - real,DIMENSION(IM,jsta_2l:jend_2u,LM), intent(in) :: T,Q,PMID - real,DIMENSION(IM,jsta_2l:jend_2u,LP1),intent(in) :: PINT - real,DIMENSION(IM,jsta_2l:jend_2u), intent(in) :: LMH,PREC - integer,DIMENSION(IM,jsta:jend), intent(inout) :: PTYP + real,DIMENSION(ista_2l:iend_2u,jsta_2l:jend_2u,LM), intent(in) :: T,Q,PMID + real,DIMENSION(ista_2l:iend_2u,jsta_2l:jend_2u,LP1),intent(in) :: PINT + real,DIMENSION(ista_2l:iend_2u,jsta_2l:jend_2u), intent(in) :: LMH,PREC + integer,DIMENSION(ista:iend,jsta:jend), intent(inout) :: PTYP ! - real,DIMENSION(IM,jsta_2l:jend_2u,LM) :: P,TQ,PQ,RHQ - real,DIMENSION(IM,jsta:jend,LM) :: TWQ + real,DIMENSION(ista_2l:iend_2u,jsta_2l:jend_2u,LM) :: P,TQ,PQ,RHQ + real,DIMENSION(ista:iend,jsta:jend,LM) :: TWQ ! REAL, ALLOCATABLE :: TWET(:,:,:) ! integer J,L,LEV,LNQ,LMHK,ii @@ -61,7 +63,7 @@ SUBROUTINE CALWXT_RAMER_POST(T,Q,PMID,PINT,LMH,PREC,PTYP) icefrac = flag ! DO J=JSTA,JEND - DO I=1,IM + DO I=ISTA,IEND PTYP(I,J) = 0 NQ=LMH(I,J) DO L = 1,NQ @@ -77,7 +79,7 @@ SUBROUTINE CALWXT_RAMER_POST(T,Q,PMID,PINT,LMH,PREC,PTYP) ! BIG LOOP DO 800 J=JSTA,JEND - DO 800 I=1,IM + DO 800 I=ISTA,IEND ! ! SKIP THIS POINT IF NO PRECIP THIS TIME STEP ! @@ -372,9 +374,7 @@ SUBROUTINE CALWXT_RAMER_POST(T,Q,PMID,PINT,LMH,PREC,PTYP) IF (trace) WRITE (*,*) "Returned ptyp is:ptyp,lll ", ptyp, lll,'me=',me IF (trace) WRITE (*,*) "Returned icefrac is: ", icefrac,'me=',me 800 CONTINUE - DO 900 J=JSTA,JEND - DO 900 I=1,IM - 900 CONTINUE + RETURN ! END diff --git a/sorc/ncep_post.fd/CALWXT_REVISED.f b/sorc/ncep_post.fd/CALWXT_REVISED.f index 5f72611d6..792680d09 100644 --- a/sorc/ncep_post.fd/CALWXT_REVISED.f +++ b/sorc/ncep_post.fd/CALWXT_REVISED.f @@ -11,6 +11,7 @@ SUBROUTINE CALWXT_REVISED_POST(T,Q,PMID,PINT,HTM,LMH,PREC,ZINT,IWX) ! 05-08-24 GEOFF MANIKIN - MODIFIED THE AREA REQUIREMENTS ! TO MAKE AN ALTERNATE ALGORITHM ! 19-10-30 Bo CUI - REMOVE "GOTO" STATEMENT +! 21-10-31 JESSE MENG - 2D DECOMPOSITION ! ! ! ROUTINE TO COMPUTE PRECIPITATION TYPE USING A DECISION TREE @@ -27,7 +28,7 @@ SUBROUTINE CALWXT_REVISED_POST(T,Q,PMID,PINT,HTM,LMH,PREC,ZINT,IWX) ! use params_mod, only: h1m12, d00, d608, h1, rog use ctlblk_mod, only: jsta, jend, modelname, pthresh, im, jsta_2l, jend_2u, lm,& - lp1 + lp1, spval, ista, iend, ista_2l, iend_2u !- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - implicit none ! @@ -38,10 +39,10 @@ SUBROUTINE CALWXT_REVISED_POST(T,Q,PMID,PINT,HTM,LMH,PREC,ZINT,IWX) ! ! INPUT: ! T,Q,PMID,HTM,LMH,PREC,ZINT - REAL,dimension(IM,jsta_2l:jend_2u,LM), intent(in) :: T,Q,PMID,HTM - REAL,dimension(IM,jsta_2l:jend_2u,LP1),intent(in) :: PINT,ZINT - REAL,dimension(IM,jsta_2l:jend_2u), intent(in) :: LMH - REAL,dimension(IM,jsta_2l:jend_2u), intent(in) :: PREC + REAL,dimension(ista_2l:iend_2u,jsta_2l:jend_2u,LM), intent(in) :: T,Q,PMID,HTM + REAL,dimension(ista_2l:iend_2u,jsta_2l:jend_2u,LP1),intent(in) :: PINT,ZINT + REAL,dimension(ista_2l:iend_2u,jsta_2l:jend_2u), intent(in) :: LMH + REAL,dimension(ista_2l:iend_2u,jsta_2l:jend_2u), intent(in) :: PREC ! OUTPUT: ! IWX - INSTANTANEOUS WEATHER TYPE. ! ACTS LIKE A 4 BIT BINARY @@ -50,12 +51,12 @@ SUBROUTINE CALWXT_REVISED_POST(T,Q,PMID,PINT,HTM,LMH,PREC,ZINT,IWX) ! THE TWO'S DIGIT IS FOR ICE PELLETS ! THE FOUR'S DIGIT IS FOR FREEZING RAIN ! AND THE EIGHT'S DIGIT IS FOR RAIN - integer, DIMENSION(IM,jsta:jend),intent(inout) :: IWX + integer, DIMENSION(ista:iend,jsta:jend),intent(inout) :: IWX ! INTERNAL: ! REAL, ALLOCATABLE :: TWET(:,:,:) - integer,DIMENSION(IM,jsta:jend) :: KARR,LICEE - real, dimension(IM,jsta:jend) :: TCOLD,TWARM + integer,DIMENSION(ista:iend,jsta:jend) :: KARR,LICEE + real, dimension(ista:iend,jsta:jend) :: TCOLD,TWARM ! integer I,J,L,LMHK,LICE,IFREL,IWRML,IFRZL real PSFCK,TDCHK,A,TDKL,TDPRE,TLMHK,TWRMK,AREAS8,AREAP4,AREA1, & @@ -75,11 +76,11 @@ SUBROUTINE CALWXT_REVISED_POST(T,Q,PMID,PINT,HTM,LMH,PREC,ZINT,IWX) ! ! ALLOCATE LOCAL STORAGE ! - ALLOCATE ( TWET(IM,JSTA_2L:JEND_2U,LM) ) + ALLOCATE ( TWET(ISTA_2L:IEND_2U,JSTA_2L:JEND_2U,LM) ) ! !$omp parallel do DO J=JSTA,JEND - DO I=1,IM + DO I=ISTA,IEND IWX(I,J) = 0 ENDDO ENDDO @@ -88,7 +89,7 @@ SUBROUTINE CALWXT_REVISED_POST(T,Q,PMID,PINT,HTM,LMH,PREC,ZINT,IWX) !!$omp parallel do !!$omp& private(a,lmhk,pkl,psfck,qkl,tdchk,tdkl,tdpre,tkl) DO 800 J=JSTA,JEND - DO 800 I=1,IM + DO 800 I=ISTA,IEND LMHK=NINT(LMH(I,J)) ! ! SKIP THIS POINT IF NO PRECIP THIS TIME STEP @@ -121,12 +122,14 @@ SUBROUTINE CALWXT_REVISED_POST(T,Q,PMID,PINT,HTM,LMH,PREC,ZINT,IWX) ! AND 500 MB ! IF (PKL<50000.0.OR.PKL>PSFCK-7000.0) cycle + IF(QKLTWARM(I,J)) TWARM(I,J)=TKL IF (TDPRE0)THEN LMHK=NINT(LMH(I,J)) LICE=LICEE(I,J) diff --git a/sorc/ncep_post.fd/CLDRAD.f b/sorc/ncep_post.fd/CLDRAD.f index b76625746..6f7ddfb71 100644 --- a/sorc/ncep_post.fd/CLDRAD.f +++ b/sorc/ncep_post.fd/CLDRAD.f @@ -1,103 +1,82 @@ !> @file -! . . . -!> SUBPROGRAM: CLDRAD POST SNDING/CLOUD/RADTN FIELDS -!! PRGRMMR: TREADON ORG: W/NP2 DATE: 93-08-30 -!! -!! ABSTRACT: THIS ROUTINE COMPUTES/POSTS SOUNDING, CLOUD -!! RELATED, AND RADIATION FIELDS. UNDER THE HEADING OF -!! SOUNDING FIELDS FALL THE THREE ETA MODEL LIFTED INDICES, -!! CAPE, CIN, AND TOTAL COLUMN PRECIPITABLE WATER. -!! -!! THE THREE ETA MODEL LIFTED INDICES DIFFER ONLY IN THE -!! DEFINITION OF THE PARCEL TO LIFT. ONE LIFTS PARCELS FROM -!! THE LOWEST ABOVE GROUND ETA LAYER. ANOTHER LIFTS MEAN -!! PARCELS FROM ANY OF NBND BOUNDARY LAYERS (SEE SUBROUTINE -!! BNDLYR). THE FINAL TYPE OF LIFTED INDEX IS A BEST LIFTED -!! INDEX BASED ON THE NBND BOUNDARY LAYER LIFTED INDICES. -!! -!! TWO TYPES OF CAPE/CIN ARE AVAILABLE. ONE IS BASED ON PARCELS -!! IN THE LOWEST ETA LAYER ABOVE GROUND. THE OTHER IS BASED -!! ON A LAYER MEAN PARCEL IN THE N-TH BOUNDARY LAYER ABOVE -!! THE GROUND. SEE SUBROUTINE CALCAPE FOR DETAILS. -!! -!! THE CLOUD FRACTION AND LIQUID CLOUD WATER FIELDS ARE DIRECTLY -!! FROM THE MODEL WITH MINIMAL POST PROCESSING. THE LIQUID -!! CLOUD WATER, 3-D CLOUD FRACTION, AND TEMPERATURE TENDENCIES -!! DUE TO PRECIPITATION ARE NOT POSTED IN THIS ROUTINE. SEE -!! SUBROUTINE ETAFLD FOR THESE FIELDS. LIFTING CONDENSATION -!! LEVEL HEIGHT AND PRESSURE ARE COMPUTED AND POSTED IN -!! SUBROUTINE MISCLN. -!! -!! THE RADIATION FIELDS POSTED BY THIS ROUTINE ARE THOSE COMPUTED -!! DIRECTLY IN THE MODEL. -!! -!! PROGRAM HISTORY LOG: -!! 93-08-30 RUSS TREADON -!! 94-08-04 MICHAEL BALDWIN - ADDED OUTPUT OF INSTANTANEOUS SFC -!! FLUXES OF NET SW AND LW DOWN RADIATION -!! 97-04-25 MICHAEL BALDWIN - FIX PDS FOR PRECIPITABLE WATER -!! 97-04-29 GEOFF MANIKIN - MOVED CLOUD TOP TEMPS CALCULATION -!! TO THIS SUBROUTINE. CHANGED METHOD -!! OF DETERMINING WHERE CLOUD BASE AND -!! TOP ARE FOUND AND ADDED HEIGHT OPTION -!! FOR TOP AND BASE. -!! 98-04-29 GEOFF MANIKIN - CHANGED VALUE FOR CLOUD BASE/TOP PRESSURES -!! AND HEIGHTS FROM SPVAL TO -500 -!! 98-06-15 T BLACK - CONVERSION FROM 1-D TO 2-D -!! 98-07-17 MIKE BALDWIN - REMOVED LABL84 -!! 00-01-04 JIM TUCCILLO - MPI VERSION -!! 00-02-22 GEOFF MANIKIN - CHANGED VALUE FOR CLOUD BASE/TOP PRESSURES -!! AND HEIGHTS FROM SPVAL TO -500 (WAS NOT IN -!! PREVIOUS IBM VERSION) -!! 01-10-22 H CHUANG - MODIFIED TO PROCESS HYBRID MODEL OUTPUT -!! 02-01-15 MIKE BALDWIN - WRF VERSION -!! 05-01-06 H CHUANG - ADD VARIOUS CLOUD FIELDS -!! 05-07-07 BINBIN ZHOU - ADD RSM MODEL -!! 05-08-30 BINBIN ZHOU - ADD CEILING and FLIGHT CONDITION RESTRICTION -!! 10-09-09 GEOFF MANIKIN - REVISED CALL TO CALCAPE -!! 11-02-06 Jun Wang - ADD GRIB2 OPTION -!! 11-12-14 SARAH LU - ADD AEROSOL OPTICAL PROPERTIES -!! 11-12-16 SARAH LU - ADD AEROSOL 2D DIAG FIELDS -!! 11-12-23 SARAH LU - CONSOLIDATE ALL GOCART FIELDS TO BLOCK 4 -!! 11-12-23 SARAH LU - ADD AOD AT ADDITIONAL CHANNELS -!! 12-04-03 Jun Wang - Add lftx and GFS convective cloud cover for grib2 -!! 13-05-06 Shrinivas Moorthi - Add cloud condensate to total precip water -!! 13-12-23 LU/Wang - READ AEROSOL OPTICAL PROPERTIES LUTS to compute dust aod, -!! non-dust aod, and use geos5 gocart LUTS -!! 15-??-?? S. Moorthi - threading, optimization, local dimension -!! 19-07-24 Li(Kate) Zhang Merge and update ARAH Lu's work from NGAC into FV3-Chem -!! 19-10-30 Bo CUI - Remove "GOTO" statement -!! 20-03-25 Jesse Meng - remove grib1 -!! 20-05-20 Jesse Meng - CALRH unification with NAM scheme -!! 20-11-10 Jesse Meng - USE UPP_PHYSICS MODULE -!! 21-02-08 Anning Cheng, read aod550, aod550_du/su/ss/oc/bc -!! directly from fv3gfs and output to grib2 by setting rdaod -!! 21-04-01 Jesse Meng - COMPUTATION ON DEFINED POINTS ONLY -!! -!! USAGE: CALL CLDRAD -!! INPUT ARGUMENT LIST: -!! -!! OUTPUT ARGUMENT LIST: -!! NONE -!! -!! OUTPUT FILES: -!! NONE -!! -!! SUBPROGRAMS CALLED: -!! UTILITIES: -!! NONE -!! LIBRARY: -!! COMMON - RQSTFLD -!! CTLBLK -!! -!! ATTRIBUTES: -!! LANGUAGE: FORTRAN -!! MACHINE : IBM SP -!! +!> @brief Subroutine that post SNDING/CLOUD/RADTN fields. +!> +!> This routine computes/posts sounding cloud +!> related, and radiation fields. Under the heading of +!> sounding fields fall the three ETA model lifted indices, +!> CAPE, CIN, and total column precipitable water. +!> +!> The three ETA model lifted indices differ only in the +!> definition of the parcel to lift. One lifts parcels from +!> the lowest above ground ETA layer. Another lifts mean +!> parcels from any of NBND boundary layers (See subroutine +!> BNDLYR). The final type of lifted index is a best lifted +!> inden based on the NBND bouddary layer lifted indices. +!> +!> Two types of CAPE/CIN are available. One is based on parcels +!> in the lowest ETA layer above ground. The other is based +!> on a layer mean parcel in the N-th boundary layer above +!> the ground. See subroutine CALCAPE for details. +!> +!> The cloud fraction and liquid cloud water fields are directly +!> from the model with minimal post processing. The liquid +!> cloud water, 3-D cloud fraction, and temperature tendencies +!> due to precipotation are not posted in this routine. See +!> sunroutine ETAFLD for these fields. Lifting condensation +!> level height and pressure are computed and posted in +!> subroutine MISCLN. +!> +!> The radiation fields posted by this routine are those computed +!> directly in the model. +!> +!> ### Program history log: +!> Date | Programmer | Comments +!> -----|------------|--------- +!> 1993-08-30 | Russ Treadon | Initial +!> 1994-08-04 | Mike Baldwin | Added output of instantaneous SFC fluxes of net SW and LW down radiation +!> 1997-04-25 | Mike Baldwin | Fix PDS for precipitable water +!> 1997-04-29 | Geoff Manikin | Moved cloud top temps calculation to this subroutine. Changed method of determining where cloud base and top are found and added height option for top and base +!> 1998-04-29 | Geoff Manikin | Changed value for cloud base/top pressures and heights from SPVAL to -500 +!> 1998-06-15 | T Black | Conversion from 1-D to 2-D +!> 1998-07-17 | Mike Baldwin | Removed LABL84 +!> 2000-01-04 | Jim Tuccillo | MPI Version +!> 2000-02-22 | Geoff Manikin | Changed value for cloud base/top pressures and heights from SPVAL to -500 (was not in previous IBM version) +!> 2001-10-22 | H Chuang | Modified to process hybrid model output +!> 2002-01-15 | Mike Baldwin | WRF version +!> 2005-01-06 | H Chuang | Add various cloud fields +!> 2005-07-07 | Binbin Zhou | Add RSM model +!> 2005-08-30 | Binbin Zhou | Add ceiling and flight condition restriction +!> 2010-09-09 | Geoff Manikin | Revised call to CALCAPE +!> 2011-02-06 | Jun Wang | Add GRIB2 Option +!> 2011-12-14 | Sarah Lu | Add Aerosol optical properties +!> 2011-12-16 | Sarah Lu | Add Aerosol 2D DIAG fields +!> 2011-12-23 | Sarah Lu | Consolidate all GOCART fields to BLOCK 4 +!> 2011-12-23 | Sarah Lu | Add AOD at additional channels +!> 2012-04-03 | Jun Wang | Add lftx and GFS convective cloud cover for grib2 +!> 2013-05-06 | Shrinivas Moorthi | Add cloud condensate to total precip water +!> 2013-12-23 | Lu/Wang | Read aerosol optical properties LUTS to compute dust aod, non-dust aod, and use geos5 gocart LUTS +!> 2015-??-?? | S. Moorthi | threading, optimization, local dimension +!> 2019-07-24 | Li(Kate) Zhang | Merge and update ARAH Lu's work from NGAC into FV3-Chem +!> 2019-10-30 | Bo Cui | Remove "GOTO" statement +!> 2020-03-25 | Jesse Meng | Remove grib1 +!> 2020-05-20 | Jesse Meng | CALRH unification with NAM scheme +!> 2020-11-10 | Jesse Meng | Use UPP_PHYSICS Module +!> 2021-02-08 | Anning Cheng | read aod550, aod550_du/su/ss/oc/bc directly from fv3gfs and output to grib2 by setting rdaod +!> 2021-04-01 | Jesse Meng | Computation on defined points only +!> 2022-09-22 | Li(Kate Zhang) | Remove duplicated GOCART output variables and add capbility for NASA GOCART (UFS-Aerosols). +!> 2022-09-22 | Li(Kate Zhang) | Update look-up table for NASA GOCART (UFS-Aerosols). +!> 2022-10-20 | Li(Kate Zhang) | Add nitrate look-up table and nitrate AOD for NASA GOCART (UFS-Aerosols). +!> 2022-11-16 | Eric James | Adding total column dust, biomass burning emissions, hourly wildfire potential from RRFS +!> 2022-1207 | Wen Meng | Add AOD for AQM +!> 2022-12-15 | Eric James | Modifying GSL exp2 ceiling diagnostic from HRRR, to correct a low bias in cloud cover +!> 2023-02-02 | Wen Meng | Remove GSL specified clear-sky upward/downward SW +!> 2023-02-10 | Eric James | Removing neighbourhood check from GSL exp2 ceiling diagnostic +!> +!> @author Russ Treadon W/NP2 @date 1993-08-30 SUBROUTINE CLDRAD ! - use vrbls4d, only: DUST,SUSO, SALT, SOOT, WASO + use vrbls4d, only: DUST,SUSO, SALT, SOOT, WASO,NO3,NH4 use vrbls3d, only: QQW, QQR, T, ZINT, CFR, QQI, QQS, Q, EXT, ZMID,PMID,& PINT, DUEM, DUSD, DUDP, DUWT, DUSV, SSEM, SSSD,SSDP,& SSWT, SSSV, BCEM, BCSD, BCDP, BCWT, BCSV, OCEM,OCSD,& @@ -107,18 +86,19 @@ SUBROUTINE CLDRAD HBOT, HBOTD, HBOTS, HTOP, HTOPD, HTOPS, FIS, PBLH, & PBOT, PBOTL, PBOTM, PBOTH, CNVCFR, PTOP, PTOPL, & PTOPM, PTOPH, TTOPL, TTOPM, TTOPH, PBLCFR, CLDWORK, & - ASWIN, AUVBIN, AUVBINC, ASWIN, ASWOUT,ALWOUT, ASWTOA,& + ASWIN, AUVBIN, AUVBINC, ASWOUT,ALWOUT, ASWTOA, & RLWTOA, CZMEAN, CZEN, RSWIN, ALWIN, ALWTOA, RLWIN, & SIGT4, RSWOUT, RADOT, RSWINC, ASWINC, ASWOUTC, & ASWTOAC, ALWOUTC, ASWTOAC, AVISBEAMSWIN, & - AVISDIFFSWIN, ASWINTOA, ASWINC, ASWTOAC, AIRBEAMSWIN,& + AVISDIFFSWIN, ASWINTOA, ASWTOAC, AIRBEAMSWIN, & AIRDIFFSWIN, DUSMASS, DUSMASS25, DUCMASS, DUCMASS25, & ALWINC, ALWTOAC, SWDDNI, SWDDIF, SWDNBC, SWDDNIC, & SWDDIFC, SWUPBC, LWDNBC, LWUPBC, SWUPT, & - TAOD5502D, AERSSA2D, AERASY2D, MEAN_FRP, LWP, IWP, & - AVGCPRATE, & + TAOD5502D, AERSSA2D, AERASY2D, MEAN_FRP, EBB, HWP, & + LWP, IWP, AVGCPRATE, & DUSTCB,SSCB,BCCB,OCCB,SULFCB,DUSTPM,SSPM,aod550, & - du_aod550,ss_aod550,su_aod550,oc_aod550,bc_aod550 + du_aod550,ss_aod550,su_aod550,oc_aod550,bc_aod550, & + PWAT,DUSTPM10,MAOD,NO3CB,NH4CB,aqm_aod550 use masks, only: LMH, HTM use params_mod, only: TFRZ, D00, H99999, QCLDMIN, SMALL, D608, H1, ROG, & GI, RD, QCONV, ABSCOEFI, ABSCOEF, STBOL, PQ0, A2, & @@ -126,8 +106,9 @@ SUBROUTINE CLDRAD use ctlblk_mod, only: JSTA, JEND, SPVAL, MODELNAME, GRIB, CFLD,DATAPD, & FLD_INFO, AVRAIN, THEAT, IFHR, IFMIN, AVCNVC, & TCLOD, ARDSW, TRDSW, ARDLW, NBIN_DU, TRDLW, IM, & - NBIN_SS, NBIN_OC, NBIN_BC, NBIN_SU, DTQ2, & - JM, LM, gocart_on, me, rdaod + NBIN_SS, NBIN_OC,NBIN_BC,NBIN_SU,NBIN_NO3,DTQ2, & + JM, LM, gocart_on, nasa_on, me, rdaod,ISTA, IEND, & + aqf_on use rqstfld_mod, only: IGET, ID, LVLS, IAVBLFLD use gridspec_mod, only: dyval, gridtype use cmassi_mod, only: TRAD_ice @@ -144,10 +125,10 @@ SUBROUTINE CLDRAD ! ! LOGICAL,dimension(im,jm) :: NEED INTEGER :: lcbot,lctop,jc,ic !bsf - INTEGER,dimension(im,jsta:jend) :: IBOTT, IBOTCu, IBOTDCu, IBOTSCu, IBOTGr, & + INTEGER,dimension(ista:iend,jsta:jend) :: IBOTT, IBOTCu, IBOTDCu, IBOTSCu, IBOTGr, & ITOPT, ITOPCu, ITOPDCu, ITOPSCu, ITOPGr REAL,dimension(im,jm) :: GRID1 - REAL,dimension(im,jsta:jend) :: GRID2, EGRID1, EGRID2, EGRID3, & + REAL,dimension(ista:iend,jsta:jend) :: GRID2, EGRID1, EGRID2, EGRID3, & CLDP, CLDZ, CLDT, CLDZCu REAL,dimension(lm) :: RHB, watericetotal, pabovesfc REAL :: watericemax, wimin, zcldbase, zcldtop, zpbltop, & @@ -164,7 +145,7 @@ SUBROUTINE CLDRAD real,dimension(im,jm) :: ceil ! B ZHOU: For aviation: - REAL, dimension(im,jsta:jend) :: TCLD, CEILING + REAL, dimension(ista:iend,jsta:jend) :: TCLD, CEILING real CU_ir(LM), q_conv !bsf !jw integer I,J,L,K,IBOT,ITCLOD,LBOT,LTOP,ITRDSW,ITRDLW, & @@ -175,8 +156,9 @@ SUBROUTINE CLDRAD real FULL_CLD(IM,JM) !-- Must be dimensioned for the full domain real, allocatable :: full_ceil(:,:), full_fis(:,:) ! - real dummy(IM,jsta:jend) - integer idummy(IM,jsta:jend) + real dummy(ista:iend,jsta:jend) + integer idummy(ista:iend,jsta:jend) + real full_dummy(im,jm) ! ! --- Revision added for GOCART --- @@ -187,61 +169,59 @@ SUBROUTINE CLDRAD integer, parameter :: KRHLEV = 36 ! num of rh levels for rh-dep components integer, parameter :: KCM1 = 5 ! num of rh independent aer species - integer, parameter :: KCM2 = 5 ! num of rh dependent aer species + integer, parameter :: KCM2 = 6 ! num of rh dependent aer species integer, parameter :: NBDSW = 7 ! total num of sw bands integer, parameter :: NOAER = 20 ! unit for LUTs file - integer, parameter :: nAero=KCM2 ! num of aer species in LUTs CHARACTER :: AerosolName(KCM2)*4, AerosolName_rd*4, aerosol_file*30 CHARACTER :: AerName_rd*4, AerOpt*3 ! - aerosol optical properties: mass extinction efficiency REAL, ALLOCATABLE :: extrhd_DU(:,:,:), extrhd_SS(:,:,:), & & extrhd_SU(:,:,:), extrhd_BC(:,:,:), & - & extrhd_OC(:,:,:) + & extrhd_OC(:,:,:), extrhd_NI(:,:,:) ! - aerosol optical properties: mass scattering efficienc REAL, ALLOCATABLE :: scarhd_DU(:,:,:), scarhd_SS(:,:,:), & & scarhd_SU(:,:,:), scarhd_BC(:,:,:), & - & scarhd_OC(:,:,:) + & scarhd_OC(:,:,:), scarhd_NI(:,:,:) ! - aerosol optical properties: asymmetry factor REAL, ALLOCATABLE :: asyrhd_DU(:,:,:), asyrhd_SS(:,:,:), & & asyrhd_SU(:,:,:), asyrhd_BC(:,:,:), & - & asyrhd_OC(:,:,:) + & asyrhd_OC(:,:,:), asyrhd_NI(:,:,:) ! - aerosol optical properties: single scatter albedo REAL, ALLOCATABLE :: ssarhd_DU(:,:,:), ssarhd_SS(:,:,:), & & ssarhd_SU(:,:,:), ssarhd_BC(:,:,:), & - & ssarhd_OC(:,:,:) + & ssarhd_OC(:,:,:), ssarhd_NI(:,:,:) ! --- aerosol optical properties mapped onto specified spectral bands ! - relative humidity independent aerosol optical properties: du - real (kind=kind_phys) :: extrhi(KCM1,NBDSW) ! extinction coefficient + real (kind=kind_phys) :: extrhi(KCM2,NBDSW) ! extinction coefficient ! - relative humidity dependent aerosol optical properties: oc, bc, su, ss001-005 real (kind=kind_phys) :: extrhd(KRHLEV,KCM2,NBDSW) ! extinction coefficient ! - REAL,dimension(im,jsta:jend) :: P1D,T1D,Q1D,EGRID4 + REAL,dimension(ista:iend,jsta:jend) :: P1D,T1D,Q1D,EGRID4 ! REAL, allocatable :: RH3D(:,:,:) ! RELATIVE HUMIDITY real, allocatable:: rdrh(:,:,:) integer, allocatable :: ihh(:,:,:) REAL :: rh3d, DRH0, DRH1, EXT01, EXT02,SCA01,ASY01 - INTEGER :: IH1, IH2 + INTEGER :: IH1, IH2,nAero INTEGER :: IOS, INDX, ISSAM, ISSCM, ISUSO, IWASO, ISOOT, NBIN REAL :: CCDRY, CCWET, SSAM, SSCM - REAL,dimension(im,jsta:jend) :: AOD_DU, AOD_SS, AOD_SU, AOD_OC, AOD_BC, AOD - REAL,dimension(im,jsta:jend) :: SCA_DU, SCA_SS, SCA_SU, SCA_OC,SCA_BC, SCA2D - REAL,dimension(im,jsta:jend) :: ASY_DU, ASY_SS, ASY_SU, ASY_OC, ASY_BC,ASY2D - REAL,dimension(im,jsta:jend) :: ANGST, AOD_440, AOD_860 ! FORANGSTROM EXPONENT + REAL,dimension(ista:iend,jsta:jend) :: AOD_DU, AOD_SS, AOD_SU, AOD_OC, AOD_BC, AOD_NI, AOD + REAL,dimension(ista:iend,jsta:jend) :: SCA_DU, SCA_SS, SCA_SU, SCA_OC,SCA_BC, SCA_NI,SCA2D + REAL,dimension(ista:iend,jsta:jend) :: ASY_DU, ASY_SS, ASY_SU, ASY_OC, ASY_BC,ASY_NI,ASY2D + REAL,dimension(ista:iend,jsta:jend) :: ANGST, AOD_440, AOD_860 ! FORANGSTROM EXPONENT REAL :: ANG1, ANG2 - INTEGER :: INDX_EXT(nAero), INDX_SCA(nAero) + INTEGER :: INDX_EXT(KCM2), INDX_SCA(KCM2) LOGICAL :: LAEROPT, LEXT, LSCA, LASY LOGICAL :: LAERSMASS REAL, allocatable :: fPM25_DU(:),fPM25_SS(:) REAL, allocatable, dimension(:,:) :: RHOsfc, smass_du_cr,smass_du_fn, & & smass_ss_cr, smass_ss_fn, smass_oc,smass_bc, & & smass_su, smass_cr, smass_fn - real :: rPM, dmass real (kind=kind_phys), dimension(KRHLEV) :: rhlev data rhlev (:)/ .0, .05, .10, .15, .20, .25, .30, .35, & & .40, .45, .50, .55, .60, .65, .70, .75, & @@ -249,11 +229,12 @@ SUBROUTINE CLDRAD & .88, .89, .90, .91, .92, .93, .94, .95, & & .96, .97, .98, .99/ ! - data AerosolName /'DUST', 'SALT', 'SUSO', 'SOOT', 'WASO'/ + data AerosolName /'DUST', 'SALT', 'SUSO', 'SOOT', 'WASO', 'NITR'/ ! INDEX FOR TOTAL AND SPECIATED AEROSOLS (DU, SS, SU, OC, BC) - data INDX_EXT / 610, 611, 612, 613, 614 / - data INDX_SCA / 651, 652, 653, 654, 655 / + data INDX_EXT / 610, 611, 612, 613, 614, 615 / + data INDX_SCA / 651, 652, 653, 654, 655, 687 / logical, parameter :: debugprint = .false. + logical :: Model_Pwat ! ! !************************************************************************* @@ -272,7 +253,7 @@ SUBROUTINE CLDRAD IF (IGET(030)>0.OR.IGET(572)>0) THEN !$omp parallel do private(i,j) DO J=JSTA,JEND - DO I=1,IM + DO I=ISTA,IEND EGRID1(I,J) = SPVAL ENDDO ENDDO @@ -282,14 +263,14 @@ SUBROUTINE CLDRAD IF(MODELNAME == 'RAPR') THEN !$omp parallel do private(i,j) DO J=JSTA,JEND - DO I=1,IM + DO I=ISTA,IEND IF(EGRID1(I,J) < SPVAL) GRID1(I,J) = EGRID1(I,J) ENDDO ENDDO ELSE !$omp parallel do private(i,j) DO J=JSTA,JEND - DO I=1,IM + DO I=ISTA,IEND IF(EGRID1(I,J) < SPVAL) GRID1(I,J) = EGRID1(I,J) + TFRZ ENDDO ENDDO @@ -299,11 +280,12 @@ SUBROUTINE CLDRAD if(grib == "grib2" )then cfld = cfld+1 fld_info(cfld)%ifld = IAVBLFLD(IGET(030)) -!$omp parallel do private(i,j,jj) +!$omp parallel do private(i,j,ii,jj) do j=1,jend-jsta+1 jj = jsta+j-1 - do i=1,im - datapd(i,j,cfld) = GRID1(i,jj) + do i=1,iend-ista+1 + ii = ista+i-1 + datapd(i,j,cfld) = GRID1(ii,jj) enddo enddo endif @@ -314,12 +296,13 @@ SUBROUTINE CLDRAD cfld = cfld+1 fld_info(cfld)%ifld = IAVBLFLD(IGET(572)) ! where(GRID1 /= SPVAL) GRID1 = GRID1-TFRZ -!$omp parallel do private(i,j,jj) +!$omp parallel do private(i,j,ii,jj) do j=1,jend-jsta+1 jj = jsta+j-1 - do i=1,im - if (grid1(i,jj) /= spval) grid1(i,jj) = grid1(i,jj) - tfrz - datapd(i,j,cfld) = GRID1(i,jj) + do i=1,iend-ista+1 + ii = ista+i-1 + if (grid1(ii,jj) /= spval) grid1(ii,jj) = grid1(ii,jj) - tfrz + datapd(i,j,cfld) = GRID1(ii,jj) enddo enddo endif @@ -343,7 +326,7 @@ SUBROUTINE CLDRAD EGRID3,dummy,dummy) !$omp parallel do private(i,j) DO J=JSTA,JEND - DO I=1,IM + DO I=ISTA,IEND IF(FIS(I,J) < SPVAL) GRID1(I,J) = EGRID1(I,J) ENDDO ENDDO @@ -351,11 +334,12 @@ SUBROUTINE CLDRAD if(grib == "grib2" )then cfld = cfld+1 fld_info(cfld)%ifld = IAVBLFLD(IGET(032)) -!$omp parallel do private(i,j,jj) +!$omp parallel do private(i,j,ii,jj) do j=1,jend-jsta+1 jj = jsta+j-1 - do i=1,im - datapd(i,j,cfld) = GRID1(i,jj) + do i=1,iend-ista+1 + ii=ista+i-1 + datapd(i,j,cfld) = GRID1(ii,jj) enddo enddo endif @@ -371,7 +355,7 @@ SUBROUTINE CLDRAD IF ( (LVLS(1,IGET(032)) > 0) )THEN !$omp parallel do private(i,j) DO J=JSTA,JEND - DO I=1,IM + DO I=ISTA,IEND IF(FIS(I,J) < SPVAL) GRID1(I,J) = - EGRID2(I,J) ENDDO ENDDO @@ -385,7 +369,7 @@ SUBROUTINE CLDRAD EGRID3,dummy,dummy) !$omp parallel do private(i,j) DO J=JSTA,JEND - DO I=1,IM + DO I=ISTA,IEND IF(FIS(I,J) < SPVAL) GRID1(I,J) = - EGRID2(I,J) ENDDO ENDDO @@ -393,18 +377,19 @@ SUBROUTINE CLDRAD CALL BOUND(GRID1,D00,H99999) !$omp parallel do private(i,j) DO J=JSTA,JEND - DO I=1,IM + DO I=ISTA,IEND IF(FIS(I,J) < SPVAL) GRID1(I,J) = - GRID1(I,J) ENDDO ENDDO if(grib == "grib2" )then cfld = cfld+1 fld_info(cfld)%ifld = IAVBLFLD(IGET(107)) -!$omp parallel do private(i,j,jj) +!$omp parallel do private(i,j,ii,jj) do j=1,jend-jsta+1 jj = jsta+j-1 - do i=1,im - datapd(i,j,cfld) = GRID1(i,jj) + do i=1,iend-ista+1 + ii=ista+i-1 + datapd(i,j,cfld) = GRID1(ii,jj) enddo enddo endif @@ -417,21 +402,39 @@ SUBROUTINE CLDRAD IF (IGET(080) > 0) THEN ! dong GRID1 = spval - CALL CALPW(GRID1(1,jsta),1) + Model_Pwat = .false. + DO J=JSTA,JEND + DO I=ISTA,IEND + IF(ABS(PWAT(I,J)-SPVAL)>SMALL) THEN + Model_Pwat = .true. + exit + ENDIF + END DO + END DO + IF (Model_Pwat) THEN + DO J=JSTA,JEND + DO I=ISTA,IEND + GRID1(I,J) = PWAT(I,J) + END DO + END DO + ELSE + CALL CALPW(GRID1(ista:iend,jsta:jend),1) DO J=JSTA,JEND - DO I=1,IM + DO I=ISTA,IEND IF(FIS(I,J) >= SPVAL) GRID1(I,J)=spval END DO END DO + ENDIF CALL BOUND(GRID1,D00,H99999) if(grib == "grib2" )then cfld = cfld + 1 fld_info(cfld)%ifld = IAVBLFLD(IGET(080)) -!$omp parallel do private(i,j,jj) +!$omp parallel do private(i,j,ii,jj) do j=1,jend-jsta+1 jj = jsta+j-1 - do i=1,im - datapd(i,j,cfld) = GRID1(i,jj) + do i=1,iend-ista+1 + ii=ista+i-1 + datapd(i,j,cfld) = GRID1(ii,jj) enddo enddo endif @@ -441,16 +444,17 @@ SUBROUTINE CLDRAD ! TOTAL COLUMN AOD (TAOD553D FROM HRRR-SMOKE) ! IF (IGET(735) > 0) THEN - CALL CALPW(GRID1(1,jsta),19) + CALL CALPW(GRID1(ista:iend,jsta:jend),19) CALL BOUND(GRID1,D00,H99999) if(grib == "grib2" )then cfld = cfld + 1 fld_info(cfld)%ifld = IAVBLFLD(IGET(735)) -!$omp parallel do private(i,j,jj) +!$omp parallel do private(i,j,ii,jj) do j=1,jend-jsta+1 jj = jsta+j-1 - do i=1,im - datapd(i,j,cfld) = GRID1(i,jj) + do i=1,iend-ista+1 + ii=ista+i-1 + datapd(i,j,cfld) = GRID1(ii,jj) enddo enddo endif @@ -460,16 +464,36 @@ SUBROUTINE CLDRAD ! TOTAL COLUMN FIRE SMOKE (tracer_1a FROM HRRR-SMOKE) ! IF (IGET(736) > 0) THEN - CALL CALPW(GRID1(1,jsta),18) + CALL CALPW(GRID1(ista:iend,jsta:iend),18) CALL BOUND(GRID1,D00,H99999) if(grib == "grib2" )then cfld = cfld + 1 fld_info(cfld)%ifld = IAVBLFLD(IGET(736)) -!$omp parallel do private(i,j,jj) +!$omp parallel do private(i,j,ii,jj) do j=1,jend-jsta+1 jj = jsta+j-1 - do i=1,im - datapd(i,j,cfld) = GRID1(i,jj) + do i=1,iend-ista+1 + ii=ista+i-1 + datapd(i,j,cfld) = GRID1(ii,jj) + enddo + enddo + endif + ENDIF +! +! TOTAL COLUMN DUST +! + IF (IGET(741) > 0) THEN + CALL CALPW(GRID1(ista:iend,jsta:iend),22) + CALL BOUND(GRID1,D00,H99999) + if(grib == "grib2" )then + cfld = cfld + 1 + fld_info(cfld)%ifld = IAVBLFLD(IGET(741)) +!$omp parallel do private(i,j,ii,jj) + do j=1,jend-jsta+1 + jj = jsta+j-1 + do i=1,iend-ista+1 + ii=ista+i-1 + datapd(i,j,cfld) = GRID1(ii,jj) enddo enddo endif @@ -481,18 +505,18 @@ SUBROUTINE CLDRAD GRID2 = spval IF (MODELNAME == 'RAPR') THEN DO J=JSTA,JEND - DO I=1,IM + DO I=ISTA,IEND IF(LWP(I,J) < SPVAL) GRID1(I,J) = LWP(I,J)/1000.0 ! use WRF-diagnosed value ENDDO ENDDO ELSE - CALL CALPW(GRID1(1,jsta),2) + CALL CALPW(GRID1(ista:iend,jsta:jend),2) IF(MODELNAME == 'GFS')then ! GFS combines cloud water and cloud ice, hoping to seperate them next implementation - CALL CALPW(GRID2(1,jsta),3) + CALL CALPW(GRID2(ista:iend,jsta:jend),3) !$omp parallel do private(i,j) DO J=JSTA,JEND - DO I=1,IM + DO I=ISTA,IEND IF(GRID1(I,J) 0) THEN - CALL CALPW(GRID1(1,jsta),4) + CALL CALPW(GRID1(ista:iend,jsta:jend),4) CALL BOUND(GRID1,D00,H99999) if(grib=="grib2" )then cfld=cfld+1 fld_info(cfld)%ifld=IAVBLFLD(IGET(202)) -!$omp parallel do private(i,j,jj) +!$omp parallel do private(i,j,ii,jj) do j=1,jend-jsta+1 jj = jsta+j-1 - do i=1,im - datapd(i,j,cfld) = GRID1(i,jj) + do i=1,iend-ista+1 + ii=ista+i-1 + datapd(i,j,cfld) = GRID1(ii,jj) enddo enddo endif @@ -578,16 +606,17 @@ SUBROUTINE CLDRAD ! ! TOTAL COLUMN SNOW IF (IGET(203) > 0) THEN - CALL CALPW(GRID1(1,jsta),5) + CALL CALPW(GRID1(ista:iend,jsta:jend),5) CALL BOUND(GRID1,D00,H99999) if(grib=="grib2" )then cfld=cfld+1 fld_info(cfld)%ifld=IAVBLFLD(IGET(203)) -!$omp parallel do private(i,j,jj) +!$omp parallel do private(i,j,ii,jj) do j=1,jend-jsta+1 jj = jsta+j-1 - do i=1,im - datapd(i,j,cfld) = GRID1(i,jj) + do i=1,iend-ista+1 + ii=ista+i-1 + datapd(i,j,cfld) = GRID1(ii,jj) enddo enddo endif @@ -596,16 +625,17 @@ SUBROUTINE CLDRAD ! SRD ! TOTAL COLUMN GRAUPEL IF (IGET(428) > 0) THEN - CALL CALPW(GRID1(1,jsta),16) + CALL CALPW(GRID1(ista:iend,jsta:jend),16) CALL BOUND(GRID1,D00,H99999) if(grib=="grib2" )then cfld=cfld+1 fld_info(cfld)%ifld=IAVBLFLD(IGET(428)) -!$omp parallel do private(i,j,jj) +!$omp parallel do private(i,j,ii,jj) do j=1,jend-jsta+1 jj = jsta+j-1 - do i=1,im - datapd(i,j,cfld) = GRID1(i,jj) + do i=1,iend-ista+1 + ii=ista+i-1 + datapd(i,j,cfld) = GRID1(ii,jj) enddo enddo endif @@ -614,16 +644,17 @@ SUBROUTINE CLDRAD ! TOTAL COLUMN CONDENSATE IF (IGET(204) > 0) THEN - CALL CALPW(GRID1(1,jsta),6) + CALL CALPW(GRID1(ista:iend,jsta:jend),6) CALL BOUND(GRID1,D00,H99999) if(grib=="grib2" )then cfld=cfld+1 fld_info(cfld)%ifld=IAVBLFLD(IGET(204)) -!$omp parallel do private(i,j,jj) +!$omp parallel do private(i,j,ii,jj) do j=1,jend-jsta+1 jj = jsta+j-1 - do i=1,im - datapd(i,j,cfld) = GRID1(i,jj) + do i=1,iend-ista+1 + ii=ista+i-1 + datapd(i,j,cfld) = GRID1(ii,jj) enddo enddo endif @@ -631,16 +662,17 @@ SUBROUTINE CLDRAD ! ! TOTAL COLUMN SUPERCOOLED (<0C) LIQUID WATER IF (IGET(285) > 0) THEN - CALL CALPW(GRID1(1,jsta),7) + CALL CALPW(GRID1(ista:iend,jsta:jend),7) CALL BOUND(GRID1,D00,H99999) if(grib=="grib2" )then cfld=cfld+1 fld_info(cfld)%ifld=IAVBLFLD(IGET(285)) -!$omp parallel do private(i,j,jj) +!$omp parallel do private(i,j,ii,jj) do j=1,jend-jsta+1 jj = jsta+j-1 - do i=1,im - datapd(i,j,cfld) = GRID1(i,jj) + do i=1,iend-ista+1 + ii=ista+i-1 + datapd(i,j,cfld) = GRID1(ii,jj) enddo enddo endif @@ -648,16 +680,17 @@ SUBROUTINE CLDRAD ! ! TOTAL COLUMN MELTING (>0C) ICE IF (IGET(286) > 0) THEN - CALL CALPW(GRID1(1,jsta),8) + CALL CALPW(GRID1(ista:iend,jsta:jend),8) CALL BOUND(GRID1,D00,H99999) if(grib=="grib2" )then cfld=cfld+1 fld_info(cfld)%ifld=IAVBLFLD(IGET(286)) -!$omp parallel do private(i,j,jj) +!$omp parallel do private(i,j,ii,jj) do j=1,jend-jsta+1 jj = jsta+j-1 - do i=1,im - datapd(i,j,cfld) = GRID1(i,jj) + do i=1,iend-ista+1 + ii=ista+i-1 + datapd(i,j,cfld) = GRID1(ii,jj) enddo enddo endif @@ -665,15 +698,16 @@ SUBROUTINE CLDRAD ! ! TOTAL COLUMN SHORT WAVE T TENDENCY IF (IGET(290) > 0) THEN - CALL CALPW(GRID1(1,jsta),9) + CALL CALPW(GRID1(ista:iend,jsta:jend),9) if(grib=="grib2" )then cfld=cfld+1 fld_info(cfld)%ifld=IAVBLFLD(IGET(290)) -!$omp parallel do private(i,j,jj) +!$omp parallel do private(i,j,ii,jj) do j=1,jend-jsta+1 jj = jsta+j-1 - do i=1,im - datapd(i,j,cfld) = GRID1(i,jj) + do i=1,iend-ista+1 + ii=ista+i-1 + datapd(i,j,cfld) = GRID1(ii,jj) enddo enddo endif @@ -681,15 +715,16 @@ SUBROUTINE CLDRAD ! ! TOTAL COLUMN LONG WAVE T TENDENCY IF (IGET(291) > 0) THEN - CALL CALPW(GRID1(1,jsta),10) + CALL CALPW(GRID1(ista:iend,jsta:jend),10) if(grib=="grib2" )then cfld=cfld+1 fld_info(cfld)%ifld=IAVBLFLD(IGET(291)) -!$omp parallel do private(i,j,jj) +!$omp parallel do private(i,j,ii,jj) do j=1,jend-jsta+1 jj = jsta+j-1 - do i=1,im - datapd(i,j,cfld) = GRID1(i,jj) + do i=1,iend-ista+1 + ii=ista+i-1 + datapd(i,j,cfld) = GRID1(ii,jj) enddo enddo endif @@ -697,15 +732,15 @@ SUBROUTINE CLDRAD ! ! TOTAL COLUMN GRID SCALE LATENT HEATING (TIME AVE) IF (IGET(292) > 0) THEN - CALL CALPW(GRID1(1,jsta),11) + CALL CALPW(GRID1(ista:iend,jsta:jend),11) IF(AVRAIN > 0.)THEN RRNUM = 1./AVRAIN ELSE RRNUM = 0. ENDIF -!$omp parallel do +!$omp parallel do private(i,j) DO J=JSTA,JEND - DO I=1,IM + DO I=ISTA,IEND IF(GRID1(I,J) < SPVAL) GRID1(I,J) = GRID1(I,J)*RRNUM ENDDO ENDDO @@ -735,11 +770,12 @@ SUBROUTINE CLDRAD fld_info(cfld)%ntrange=0 endif fld_info(cfld)%tinvstat=IFHR-ID(18) -!$omp parallel do private(i,j,jj) +!$omp parallel do private(i,j,ii,jj) do j=1,jend-jsta+1 jj = jsta+j-1 - do i=1,im - datapd(i,j,cfld) = GRID1(i,jj) + do i=1,iend-ista+1 + ii=ista+i-1 + datapd(i,j,cfld) = GRID1(ii,jj) enddo enddo endif @@ -747,15 +783,15 @@ SUBROUTINE CLDRAD ! ! TOTAL COLUMN CONVECTIVE LATENT HEATING (TIME AVE) IF (IGET(293) > 0) THEN - CALL CALPW(GRID1(1,jsta),12) + CALL CALPW(GRID1(ista:iend,jsta:jend),12) IF(AVRAIN > 0.)THEN RRNUM = 1./AVCNVC ELSE RRNUM = 0. ENDIF -!$omp parallel do +!$omp parallel do private(i,j) DO J=JSTA,JEND - DO I=1,IM + DO I=ISTA,IEND IF(GRID1(I,J) < SPVAL) GRID1(I,J) = GRID1(I,J)*RRNUM ENDDO ENDDO @@ -785,11 +821,12 @@ SUBROUTINE CLDRAD fld_info(cfld)%ntrange=0 endif fld_info(cfld)%tinvstat=IFHR-ID(18) -!$omp parallel do private(i,j,jj) +!$omp parallel do private(i,j,ii,jj) do j=1,jend-jsta+1 jj = jsta+j-1 - do i=1,im - datapd(i,j,cfld) = GRID1(i,jj) + do i=1,iend-ista+1 + ii=ista+i-1 + datapd(i,j,cfld) = GRID1(ii,jj) enddo enddo endif @@ -797,35 +834,36 @@ SUBROUTINE CLDRAD ! ! TOTAL COLUMN moisture convergence IF (IGET(295)>0) THEN - CALL CALPW(GRID1(1,jsta),13) + CALL CALPW(GRID1(ista:iend,jsta:jend),13) if(grib=="grib2" )then cfld=cfld+1 fld_info(cfld)%ifld=IAVBLFLD(IGET(295)) - datapd(1:im,1:jend-jsta+1,cfld)=GRID1(1:im,jsta:jend) + datapd(1:iend-ista+1,1:jend-jsta+1,cfld)=GRID1(ista:iend,jsta:jend) endif ENDIF ! ! TOTAL COLUMN RH IF (IGET(312)>0) THEN - CALL CALPW(GRID1(1,jsta),14) + CALL CALPW(GRID1(ista:iend,jsta:jend),14) if(grib=="grib2" )then cfld=cfld+1 fld_info(cfld)%ifld=IAVBLFLD(IGET(312)) - datapd(1:im,1:jend-jsta+1,cfld)=GRID1(1:im,jsta:jend) + datapd(1:iend-ista+1,1:jend-jsta+1,cfld)=GRID1(ista:iend,jsta:jend) endif ENDIF ! ! TOTAL COLUMN OZONE IF (IGET(299) > 0) THEN - CALL CALPW(GRID1(1,jsta),15) + CALL CALPW(GRID1(ista:iend,jsta:jend),15) if(grib=="grib2" )then cfld=cfld+1 fld_info(cfld)%ifld=IAVBLFLD(IGET(299)) -!$omp parallel do private(i,j,jj) +!$omp parallel do private(i,j,ii,jj) do j=1,jend-jsta+1 jj = jsta+j-1 - do i=1,im - datapd(i,j,cfld) = GRID1(i,jj) + do i=1,iend-ista+1 + ii=ista+i-1 + datapd(i,j,cfld) = GRID1(ii,jj) enddo enddo endif @@ -834,7 +872,7 @@ SUBROUTINE CLDRAD ! BOTTOM AND/OR TOP OF SUPERCOOLED (<0C) LIQUID WATER LAYER IF (IGET(287)>0 .OR. IGET(288)>0) THEN DO J=JSTA,JEND - DO I=1,IM + DO I=ISTA,IEND GRID1(I,J)=-5000. GRID2(I,J)=-5000. !-- Search for the base first, then look for the top if supercooled liquid exists @@ -868,24 +906,25 @@ SUBROUTINE CLDRAD if(grib=="grib2" )then cfld=cfld+1 fld_info(cfld)%ifld=IAVBLFLD(IGET(287)) - datapd(1:im,1:jend-jsta+1,cfld)=GRID1(1:im,jsta:jend) + datapd(1:iend-ista+1,1:jend-jsta+1,cfld)=GRID1(ista:iend,jsta:jend) endif ENDIF IF (IGET(288)>0) THEN !$omp parallel do private(i,j) DO J=JSTA,JEND - DO I=1,IM + DO I=ISTA,IEND GRID1(I,J)=GRID2(I,J) ENDDO ENDDO if(grib=="grib2" )then cfld=cfld+1 fld_info(cfld)%ifld=IAVBLFLD(IGET(288)) -!$omp parallel do private(i,j,jj) +!$omp parallel do private(i,j,ii,jj) do j=1,jend-jsta+1 jj = jsta+j-1 - do i=1,im - datapd(i,j,cfld) = GRID1(i,jj) + do i=1,iend-ista+1 + ii=ista+i-1 + datapd(i,j,cfld) = GRID1(ii,jj) enddo enddo endif @@ -897,14 +936,14 @@ SUBROUTINE CLDRAD ! from 0.2 (EFIMN in cuparm in model) to 1.0 (Ferrier, Feb '02) IF (IGET(197)>0) THEN DO J=JSTA,JEND - DO I=1,IM + DO I=ISTA,IEND GRID1(I,J) = CLDEFI(I,J) ENDDO ENDDO if(grib=="grib2" )then cfld=cfld+1 fld_info(cfld)%ifld=IAVBLFLD(IGET(197)) - datapd(1:im,1:jend-jsta+1,cfld)=GRID1(1:im,jsta:jend) + datapd(1:iend-ista+1,1:jend-jsta+1,cfld)=GRID1(ista:iend,jsta:jend) endif ENDIF ! @@ -916,7 +955,7 @@ SUBROUTINE CLDRAD ! also a method for cloud ceiling height ! DO J=JSTA,JEND - DO I=1,IM + DO I=ISTA,IEND CFRACL(I,J)=0. CFRACM(I,J)=0. CFRACH(I,J)=0. @@ -933,10 +972,10 @@ SUBROUTINE CLDRAD endif DELY=14259./DY_m numr=NINT(DELY) - ! write (0,*) 'numr,dyval,DY_m=',numr,dyval,DY_m + write (0,*) 'numr,dyval,DY_m=',numr,dyval,DY_m DO L=LM,1,-1 DO J=JSTA,JEND - DO I=1,IM + DO I=ISTA,IEND if(CFR(I,J,L)=PTOP_LOW) THEN @@ -1019,9 +1061,9 @@ SUBROUTINE CLDRAD ! GSD maximum cloud fraction in (PBL + 1 km) (J. Kenyon, 8 Aug 2019) IF (IGET(799)>0) THEN -!$omp parallel do private(i,j) +!$omp parallel do private(i,j,k) DO J=JSTA,JEND - DO I=1,IM + DO I=ISTA,IEND GRID1(I,J)=0.0 DO K = 1,LM IF (ZMID(I,J,LM-K+1) <= PBLH(I,J)+1000.0) THEN @@ -1033,7 +1075,7 @@ SUBROUTINE CLDRAD if(grib=="grib2" )then cfld=cfld+1 fld_info(cfld)%ifld=IAVBLFLD(IGET(799)) - datapd(1:im,1:jend-jsta+1,cfld)=GRID1(1:im,jsta:jend) + datapd(1:iend-ista+1,1:jend-jsta+1,cfld)=GRID1(ista:iend,jsta:jend) endif ENDIF ! @@ -1041,7 +1083,7 @@ SUBROUTINE CLDRAD IF (IGET(037) > 0) THEN !$omp parallel do private(i,j) DO J=JSTA,JEND - DO I=1,IM + DO I=ISTA,IEND IF(CFRACL(I,J) < SPVAL) then GRID1(I,J) = CFRACL(I,J)*100. else @@ -1052,11 +1094,12 @@ SUBROUTINE CLDRAD if(grib=="grib2" )then cfld=cfld+1 fld_info(cfld)%ifld=IAVBLFLD(IGET(037)) -!$omp parallel do private(i,j,jj) +!$omp parallel do private(i,j,ii,jj) do j=1,jend-jsta+1 jj = jsta+j-1 - do i=1,im - datapd(i,j,cfld) = GRID1(i,jj) + do i=1,iend-ista+1 + ii=ista+i-1 + datapd(i,j,cfld) = GRID1(ii,jj) enddo enddo endif @@ -1066,7 +1109,7 @@ SUBROUTINE CLDRAD IF (IGET(300) > 0) THEN !$omp parallel do private(i,j) DO J=JSTA,JEND - DO I=1,IM + DO I=ISTA,IEND IF(AVGCFRACL(I,J) < SPVAL) then GRID1(I,J) = AVGCFRACL(I,J)*100. else @@ -1102,11 +1145,12 @@ SUBROUTINE CLDRAD fld_info(cfld)%ntrange=0 endif fld_info(cfld)%tinvstat=IFHR-ID(18) -!$omp parallel do private(i,j,jj) +!$omp parallel do private(i,j,ii,jj) do j=1,jend-jsta+1 jj = jsta+j-1 - do i=1,im - datapd(i,j,cfld) = GRID1(i,jj) + do i=1,iend-ista+1 + ii=ista+i-1 + datapd(i,j,cfld) = GRID1(ii,jj) enddo enddo endif @@ -1117,7 +1161,7 @@ SUBROUTINE CLDRAD ! GRID1=SPVAL !$omp parallel do private(i,j) DO J=JSTA,JEND - DO I=1,IM + DO I=ISTA,IEND IF(CFRACM(I,J) < SPVAL) then GRID1(I,J) = CFRACM(I,J)*100. else @@ -1128,11 +1172,12 @@ SUBROUTINE CLDRAD if(grib=="grib2" )then cfld=cfld+1 fld_info(cfld)%ifld=IAVBLFLD(IGET(038)) -!$omp parallel do private(i,j,jj) +!$omp parallel do private(i,j,ii,jj) do j=1,jend-jsta+1 jj = jsta+j-1 - do i=1,im - datapd(i,j,cfld) = GRID1(i,jj) + do i=1,iend-ista+1 + ii=ista+i-1 + datapd(i,j,cfld) = GRID1(ii,jj) enddo enddo endif @@ -1142,7 +1187,7 @@ SUBROUTINE CLDRAD IF (IGET(301) > 0) THEN !$omp parallel do private(i,j) DO J=JSTA,JEND - DO I=1,IM + DO I=ISTA,IEND IF(ABS(AVGCFRACM(I,J)-SPVAL)>SMALL)THEN GRID1(I,J) = AVGCFRACM(I,J)*100. ELSE @@ -1178,11 +1223,12 @@ SUBROUTINE CLDRAD fld_info(cfld)%ntrange=0 endif fld_info(cfld)%tinvstat=IFHR-ID(18) -!$omp parallel do private(i,j,jj) +!$omp parallel do private(i,j,ii,jj) do j=1,jend-jsta+1 jj = jsta+j-1 - do i=1,im - datapd(i,j,cfld) = GRID1(i,jj) + do i=1,iend-ista+1 + ii=ista+i-1 + datapd(i,j,cfld) = GRID1(ii,jj) enddo enddo endif @@ -1193,7 +1239,7 @@ SUBROUTINE CLDRAD ! GRID1=SPVAL !$omp parallel do private(i,j) DO J=JSTA,JEND - DO I=1,IM + DO I=ISTA,IEND IF(CFRACH(I,J) < SPVAL) then GRID1(I,J) = CFRACH(I,J)*100. else @@ -1204,11 +1250,12 @@ SUBROUTINE CLDRAD if(grib=="grib2" )then cfld=cfld+1 fld_info(cfld)%ifld=IAVBLFLD(IGET(039)) -!$omp parallel do private(i,j,jj) +!$omp parallel do private(i,j,ii,jj) do j=1,jend-jsta+1 jj = jsta+j-1 - do i=1,im - datapd(i,j,cfld) = GRID1(i,jj) + do i=1,iend-ista+1 + ii = ista+i-1 + datapd(i,j,cfld) = GRID1(ii,jj) enddo enddo endif @@ -1219,7 +1266,7 @@ SUBROUTINE CLDRAD ! GRID1=SPVAL !$omp parallel do private(i,j) DO J=JSTA,JEND - DO I=1,IM + DO I=ISTA,IEND IF(AVGCFRACH(I,J) < SPVAL) then GRID1(I,J) = AVGCFRACH(I,J)*100. else @@ -1255,11 +1302,12 @@ SUBROUTINE CLDRAD fld_info(cfld)%ntrange=0 endif fld_info(cfld)%tinvstat=IFHR-ID(18) -!$omp parallel do private(i,j,jj) +!$omp parallel do private(i,j,ii,jj) do j=1,jend-jsta+1 jj = jsta+j-1 - do i=1,im - datapd(i,j,cfld) = GRID1(i,jj) + do i=1,iend-ista+1 + ii = ista+i-1 + datapd(i,j,cfld) = GRID1(ii,jj) enddo enddo endif @@ -1271,7 +1319,7 @@ SUBROUTINE CLDRAD IF(MODELNAME=='NCAR' .OR. MODELNAME=='RAPR')THEN !$omp parallel do private(i,j) DO J=JSTA,JEND - DO I=1,IM + DO I=ISTA,IEND GRID1(i,j) = SPVAL egrid1(i,j)=0. do l = 1,LM @@ -1283,7 +1331,7 @@ SUBROUTINE CLDRAD ELSE IF (MODELNAME=='NMM'.OR.MODELNAME=='FV3R' & .OR. MODELNAME=='GFS')THEN DO J=JSTA,JEND - DO I=1,IM + DO I=ISTA,IEND ! EGRID1(I,J)=AMAX1(CFRACL(I,J), ! 1 AMAX1(CFRACM(I,J),CFRACH(I,J))) ! EGRID1(I,J)=1.-(1.-CFRACL(I,J))*(1.-CFRACM(I,J))* & @@ -1295,7 +1343,7 @@ SUBROUTINE CLDRAD END IF !$omp parallel do private(i,j) DO J=JSTA,JEND - DO I=1,IM + DO I=ISTA,IEND IF(ABS(EGRID1(I,J)-SPVAL) > SMALL) THEN GRID1(I,J) = EGRID1(I,J)*100. TCLD(I,J) = EGRID1(I,J)*100. !B ZHOU, PASSED to CALCEILING @@ -1306,11 +1354,12 @@ SUBROUTINE CLDRAD if(grib=="grib2" )then cfld=cfld+1 fld_info(cfld)%ifld=IAVBLFLD(IGET(161)) -!$omp parallel do private(i,j,jj) +!$omp parallel do private(i,j,ii,jj) do j=1,jend-jsta+1 jj = jsta+j-1 - do i=1,im - datapd(i,j,cfld) = GRID1(i,jj) + do i=1,iend-ista+1 + ii = ista+i-1 + datapd(i,j,cfld) = GRID1(ii,jj) enddo enddo endif @@ -1323,7 +1372,7 @@ SUBROUTINE CLDRAD IF(MODELNAME == 'GFS' .OR. MODELNAME == 'FV3R')THEN !$omp parallel do private(i,j) DO J=JSTA,JEND - DO I=1,IM + DO I=ISTA,IEND IF(ABS(AVGTCDC(I,J)-SPVAL) > SMALL) then GRID1(I,J) = AVGTCDC(I,J)*100. else @@ -1334,7 +1383,7 @@ SUBROUTINE CLDRAD ELSE IF(MODELNAME == 'NMM')THEN DO J=JSTA,JEND - DO I=1,IM + DO I=ISTA,IEND ! RSUM = NCFRST(I,J)+NCFRCV(I,J) ! IF (RSUM>0.0) THEN ! EGRID1(I,J)=(ACFRST(I,J)+ACFRCV(I,J))/RSUM @@ -1385,11 +1434,12 @@ SUBROUTINE CLDRAD fld_info(cfld)%ntrange=0 endif fld_info(cfld)%tinvstat=IFHR-ID(18) -!$omp parallel do private(i,j,jj) +!$omp parallel do private(i,j,ii,jj) do j=1,jend-jsta+1 jj = jsta+j-1 - do i=1,im - datapd(i,j,cfld) = GRID1(i,jj) + do i=1,iend-ista+1 + ii = ista+i-1 + datapd(i,j,cfld) = GRID1(ii,jj) enddo enddo endif @@ -1401,7 +1451,7 @@ SUBROUTINE CLDRAD GRID1=SPVAL ELSE DO J=JSTA,JEND - DO I=1,IM + DO I=ISTA,IEND IF (NCFRST(I,J)0.0) THEN GRID1(I,J) = ACFRST(I,J)/NCFRST(I,J)*100. @@ -1443,7 +1493,7 @@ SUBROUTINE CLDRAD fld_info(cfld)%ntrange=0 endif fld_info(cfld)%tinvstat=IFHR-ID(18) - datapd(1:im,1:jend-jsta+1,cfld)=GRID1(1:im,jsta:jend) + datapd(1:iend-ista+1,1:jend-jsta+1,cfld)=GRID1(ista:iend,jsta:jend) endif ENDIF ! @@ -1453,7 +1503,7 @@ SUBROUTINE CLDRAD GRID1=SPVAL ELSE DO J=JSTA,JEND - DO I=1,IM + DO I=ISTA,IEND IF (NCFRCV(I,J)0.0) THEN GRID1(I,J) = ACFRCV(I,J)/NCFRCV(I,J)*100. @@ -1495,7 +1545,7 @@ SUBROUTINE CLDRAD fld_info(cfld)%ntrange=0 endif fld_info(cfld)%tinvstat=IFHR-ID(18) - datapd(1:im,1:jend-jsta+1,cfld)=GRID1(1:im,jsta:jend) + datapd(1:iend-ista+1,1:jend-jsta+1,cfld)=GRID1(ista:iend,jsta:jend) endif ENDIF ! @@ -1513,7 +1563,7 @@ SUBROUTINE CLDRAD !--- Rain is not part of cloud, only cloud water + cloud ice + snow ! DO J=JSTA,JEND - DO I=1,IM + DO I=ISTA,IEND ! !--- Various convective cloud base & cloud top levels ! @@ -1644,14 +1694,14 @@ SUBROUTINE CLDRAD IF (IGET(758)>0) THEN DO J=JSTA,JEND - DO I=1,IM + DO I=ISTA,IEND GRID1(I,J) = CLDZCu(I,J) ENDDO ENDDO if(grib=="grib2" )then cfld=cfld+1 fld_info(cfld)%ifld=IAVBLFLD(IGET(758)) - datapd(1:im,1:jend-jsta+1,cfld)=GRID1(1:im,jsta:jend) + datapd(1:iend-ista+1,1:jend-jsta+1,cfld)=GRID1(ista:iend,jsta:jend) endif ENDIF ! @@ -1663,7 +1713,7 @@ SUBROUTINE CLDRAD ! IF ((IGET(148)>0) .OR. (IGET(178)>0) .OR.(IGET(260)>0) ) THEN DO J=JSTA,JEND - DO I=1,IM + DO I=ISTA,IEND IBOT=IBOTT(I,J) !-- Cloud base ("bottoms") IF(MODELNAME == 'RAPR') then IF (IBOT <= 0) THEN @@ -1694,37 +1744,35 @@ SUBROUTINE CLDRAD ! CLOUD BOTTOM PRESSURE IF (IGET(148)>0) THEN DO J=JSTA,JEND - DO I=1,IM + DO I=ISTA,IEND GRID1(I,J) = CLDP(I,J) ENDDO ENDDO if(grib=="grib2" )then cfld=cfld+1 fld_info(cfld)%ifld=IAVBLFLD(IGET(148)) - datapd(1:im,1:jend-jsta+1,cfld)=GRID1(1:im,jsta:jend) + datapd(1:iend-ista+1,1:jend-jsta+1,cfld)=GRID1(ista:iend,jsta:jend) endif ENDIF ! CLOUD BOTTOM HEIGHT IF (IGET(178)>0) THEN !--- Parameter was set to 148 in operational code (Ferrier, Feb '02) DO J=JSTA,JEND - DO I=1,IM + DO I=ISTA,IEND GRID1(I,J) = CLDZ(I,J) ENDDO ENDDO if(grib=="grib2" )then cfld=cfld+1 fld_info(cfld)%ifld=IAVBLFLD(IGET(178)) - datapd(1:im,1:jend-jsta+1,cfld)=GRID1(1:im,jsta:jend) + datapd(1:iend-ista+1,1:jend-jsta+1,cfld)=GRID1(ista:iend,jsta:jend) endif ENDIF ENDIF -! GSD CLOUD CEILING ALGORITHM -! J. Kenyon, 3 Feb 2017: formerly described here as -! "GSD CLOUD BOTTOM HEIGHT". An alternative (experimental) -! GSD cloud ceiling algorithm is offered further below. +! GSD CLOUD CEILING ALGORITHMS... +! Parameter 408: legacy ceiling diagnostic IF (IGET(408)>0) THEN !- imported from RUC post ! -- constants for effect of snow on ceiling @@ -1746,19 +1794,12 @@ SUBROUTINE CLDRAD Cloud_def_p = 0.0000001 DO J=JSTA,JEND - - DO I=1,IM + DO I=ISTA,IEND ! !- imported from RUC post - IF(MODELNAME == 'RAPR') then - CLDZ(I,J) = SPVAL - pcldbase = SPVAL - zcldbase = SPVAL - ELSE - CLDZ(I,J) = -5000. - pcldbase = -50000. - zcldbase = -5000. - ENDIF + CLDZ(I,J) = SPVAL + pcldbase = SPVAL + zcldbase = SPVAL watericemax = -99999. do k=1,lm LL=LM-k+1 @@ -1939,31 +1980,32 @@ SUBROUTINE CLDRAD nlifr = 0 DO J=JSTA,JEND - DO I=1,IM + DO I=ISTA,IEND zcld = CLDZ(i,j) - FIS(I,J)*GI if (CLDZ(i,j)>=0..and.zcld<160.) nlifr = nlifr+1 end do end do write(6,*)'No. pts w/ LIFR ceiling =',nlifr -! GSD CLOUD BOTTOM HEIGHTS +! Parameter 408: legacy ceiling diagnostic IF (IGET(408)>0) THEN !!$omp parallel do private(i,j) DO J=JSTA,JEND - DO I=1,IM + DO I=ISTA,IEND GRID1(I,J) = CLDZ(I,J) ENDDO ENDDO if(grib=="grib2" )then cfld=cfld+1 fld_info(cfld)%ifld=IAVBLFLD(IGET(408)) - datapd(1:im,1:jend-jsta+1,cfld)=GRID1(1:im,jsta:jend) + datapd(1:iend-ista+1,1:jend-jsta+1,cfld)=GRID1(ista:iend,jsta:jend) endif ENDIF ENDIF !End of GSD algorithm ! BEGIN EXPERIMENTAL GSD CEILING DIAGNOSTICS... ! J. Kenyon, 4 Feb 2017: this approach uses model-state cloud fractions +! Parameter 487: experimental ceiling diagnostic #1 IF (IGET(487)>0) THEN ! set some constants for ceiling adjustment in snow (retained from legacy algorithm, also in calvis.f) rhoice = 970. @@ -1974,7 +2016,7 @@ SUBROUTINE CLDRAD ceiling_thresh_cldfra = 0.5 DO J=JSTA,JEND - DO I=1,IM + DO I=ISTA,IEND ceil(I,J) = SPVAL zceil = SPVAL cldfra_max = 0. @@ -2003,7 +2045,6 @@ SUBROUTINE CLDRAD end do ! k ! now search aloft... - ceil(I,J) = zceil ! default is no ceiling found loop471:do k=2,lm k1 = k if (cldfra(k) >= ceiling_thresh_cldfra) then ! go to 472 ! found ceiling @@ -2027,32 +2068,28 @@ SUBROUTINE CLDRAD vertvis = 1000.*min(90., const1/betav) if (vertvis < zceil-FIS(I,J)*GI ) then zceil = FIS(I,J)*GI + vertvis - do k2=2,LM - k1 = k2 - if (ZMID(i,j,lm-k2+1) > zceil) cycle loop471 - end do exit loop471 end if end if + + exit loop471 endif ! cldfra(k) >= ceiling_thresh_cldfra end do loop471 - - else - ceil(I,J) = zceil - endif + endif ! cldfra_max >= ceiling_thresh_cldfra + ceil(I,J) = zceil ENDDO ! i loop ENDDO ! j loop -! proceed to gridding +! Parameter 487: experimental ceiling diagnostic #1 DO J=JSTA,JEND - DO I=1,IM + DO I=ISTA,IEND GRID1(I,J) = ceil(I,J) ENDDO ENDDO if(grib=="grib2" )then cfld=cfld+1 fld_info(cfld)%ifld=IAVBLFLD(IGET(487)) - datapd(1:im,1:jend-jsta+1,cfld)=GRID1(1:im,jsta:jend) + datapd(1:iend-ista+1,1:jend-jsta+1,cfld)=GRID1(ista:iend,jsta:jend) endif ENDIF ! end of parameter-487 conditional code ! END OF EXPERIMENTAL GSD CEILING DIAGNOSTIC 1 @@ -2064,10 +2101,18 @@ SUBROUTINE CLDRAD ! However, for RAPv5/HRRRv4, paramater 711 will be supplied as ! the GSD cloud-base height, and parameter 798 will be the ! corresponding cloud-base pressure. (J. Kenyon, 4 Nov 2019) - +! -- E. James, 15 Dec 2022 +! The above experimental diagnostic, developed for the HRRR with +! lots of "add-ons" to correct for the HRRR's low bias in cloud +! cover, needs to be revised for the RRFS with its more extensive +! cloudiness. For an FAA deliverable due Feb 2023, the diagnostic +! is being modified to get rid of some of the add ons. + +! Parameters 711/798: experimental ceiling diagnostic #2 (height and pressure, respectively) IF ((IGET(711)>0) .OR. (IGET(798)>0)) THEN ! set minimum cloud fraction to represent a ceiling - ceiling_thresh_cldfra = 0.4 +! ceiling_thresh_cldfra = 0.4 + ceiling_thresh_cldfra = 0.5 ! set some constants for ceiling adjustment in snow (retained from legacy algorithm, also in calvis.f) rhoice = 970. coeffp = 10.36 @@ -2075,7 +2120,7 @@ SUBROUTINE CLDRAD const1 = 3.912 DO J=JSTA,JEND - DO I=1,IM + DO I=ISTA,IEND ceil(I,J) = SPVAL zceil = SPVAL zceil1 = SPVAL @@ -2157,23 +2202,24 @@ SUBROUTINE CLDRAD end do !-- end of search 2 - zceil = min(zceil1,zceil2) ! choose lower of zceil1 and zceil2 +! zceil = min(zceil1,zceil2) ! choose lower of zceil1 and zceil2 + zceil = zceil1 !-- Search for "indefinite ceiling" (vertical visibility) conditions: consider ! lowering of apparent ceiling due to falling snow (retained from legacy ! diagnostic); this is extracted from calvis.f (visibility diagnostic) - if (QQS(i,j,LM)>1.e-10) then - TV=T(I,J,lm)*(H1+D608*Q(I,J,lm)) - RHOAIR=PMID(I,J,lm)/(RD*TV) - vovermd = (1.+Q(i,j,LM))/rhoair + QQS(i,j,LM)/rhoice - concfp = QQS(i,j,LM)/vovermd*1000. - betav = coeffp*concfp**exponfp + 1.e-10 - vertvis = 1000.*min(90., const1/betav) - if (vertvis < zceil-FIS(I,J)*GI ) then ! if vertvis is more restictive than zceil found above; set zceil to vertvis - ! note that FIS is geopotential of the surface (ground), and GI is 1/g - zceil = FIS(I,J)*GI + vertvis - end if - end if +! if (QQS(i,j,LM)>1.e-10) then +! TV=T(I,J,lm)*(H1+D608*Q(I,J,lm)) +! RHOAIR=PMID(I,J,lm)/(RD*TV) +! vovermd = (1.+Q(i,j,LM))/rhoair + QQS(i,j,LM)/rhoice +! concfp = QQS(i,j,LM)/vovermd*1000. +! betav = coeffp*concfp**exponfp + 1.e-10 +! vertvis = 1000.*min(90., const1/betav) +! if (vertvis < zceil-FIS(I,J)*GI ) then ! if vertvis is more restictive than zceil found above; set zceil to vertvis +! ! note that FIS is geopotential of the surface (ground), and GI is 1/g +! zceil = FIS(I,J)*GI + vertvis +! end if +! end if ceil(I,J) = zceil ENDDO ! i loop @@ -2193,21 +2239,28 @@ SUBROUTINE CLDRAD ! layer. allocate(full_ceil(IM,JM),full_fis(IM,JM)) DO J=JSTA,JEND - DO I=1,IM + DO I=ISTA,IEND full_ceil(i,j)=ceil(i,j) full_fis(i,j)=fis(i,j) ENDDO ENDDO - CALL AllGETHERV(full_ceil) - CALL AllGETHERV(full_fis) +! CALL AllGETHERV(full_ceil) + full_dummy=spval + CALL COLLECT_ALL(full_ceil(ISTA:IEND,JSTA:JEND),full_dummy) + full_ceil=full_dummy +! CALL AllGETHERV(full_fis) + full_dummy=spval + CALL COLLECT_ALL(full_fis(ISTA:IEND,JSTA:JEND),full_dummy) + full_fis=full_dummy + numr = 1 DO J=JSTA,JEND - DO I=1,IM + DO I=ISTA,IEND ceil_min = max( ceil(I,J)-FIS(I,J)*GI , 5.0) ! ceil_min in AGL do jc = max(1,J-numr),min(JM,J+numr) do ic = max(1,I-numr),min(IM,I+numr) ceil_neighbor = max( full_ceil(ic,jc)-full_fis(ic,jc)*GI , 5.0) ! ceil_neighbor in AGL - ceil_min = min( ceil_min, ceil_neighbor ) +! ceil_min = min( ceil_min, ceil_neighbor ) enddo enddo CLDZ(I,J) = ceil_min + FIS(I,J)*GI ! convert back to ASL and store @@ -2226,33 +2279,33 @@ SUBROUTINE CLDRAD if (allocated(full_ceil)) deallocate(full_ceil) if (allocated(full_fis)) deallocate(full_fis) - ! GSD CLOUD BOTTOM HEIGHT + ! Parameters 711/798: experimental ceiling diagnostic #2 (height and pressure, respectively) IF (IGET(711)>0) THEN !!$omp parallel do private(i,j) DO J=JSTA,JEND - DO I=1,IM + DO I=ISTA,IEND GRID1(I,J) = CLDZ(I,J) ENDDO ENDDO if(grib=="grib2" )then cfld=cfld+1 fld_info(cfld)%ifld=IAVBLFLD(IGET(711)) - datapd(1:im,1:jend-jsta+1,cfld)=GRID1(1:im,jsta:jend) + datapd(1:iend-ista+1,1:jend-jsta+1,cfld)=GRID1(ista:iend,jsta:jend) endif ENDIF - ! GSD CLOUD BOTTOM PRESSURE + ! Parameters 711/798: experimental ceiling diagnostic #2 (height and pressure, respectively) IF (IGET(798)>0) THEN !!$omp parallel do private(i,j) DO J=JSTA,JEND - DO I=1,IM + DO I=ISTA,IEND GRID1(I,J) = CLDP(I,J) ENDDO ENDDO if(grib=="grib2" )then cfld=cfld+1 fld_info(cfld)%ifld=IAVBLFLD(IGET(798)) - datapd(1:im,1:jend-jsta+1,cfld)=GRID1(1:im,jsta:jend) + datapd(1:iend-ista+1,1:jend-jsta+1,cfld)=GRID1(ista:iend,jsta:jend) endif ENDIF ENDIF ! end of parameter-711 and -798 conditional code @@ -2263,32 +2316,33 @@ SUBROUTINE CLDRAD IF (IGET(260)>0) THEN CALL CALCEILING(CLDZ,TCLD,CEILING) DO J=JSTA,JEND - DO I=1,IM + DO I=ISTA,IEND GRID1(I,J) = CEILING(I,J) ENDDO ENDDO if(grib=="grib2" )then cfld=cfld+1 fld_info(cfld)%ifld=IAVBLFLD(IGET(260)) - datapd(1:im,1:jend-jsta+1,cfld)=GRID1(1:im,jsta:jend) + datapd(1:iend-ista+1,1:jend-jsta+1,cfld)=GRID1(ista:iend,jsta:jend) endif ENDIF ! B. ZHOU: FLIGHT CONDITION RESTRICTION IF (IGET(261) > 0) THEN CALL CALFLTCND(CEILING,GRID1(1,jsta)) ! DO J=JSTA,JEND -! DO I=1,IM +! DO I=ISTA,IEND ! GRID1(I,J) = FLTCND(I,J) ! ENDDO ! ENDDO if(grib=="grib2" )then cfld=cfld+1 fld_info(cfld)%ifld=IAVBLFLD(IGET(261)) -!$omp parallel do private(i,j,jj) +!$omp parallel do private(i,j,ii,jj) do j=1,jend-jsta+1 jj = jsta+j-1 - do i=1,im - datapd(i,j,cfld) = GRID1(i,jj) + do i=1,iend-ista+1 + ii=ista+i-1 + datapd(i,j,cfld) = GRID1(ii,jj) enddo enddo endif @@ -2300,13 +2354,13 @@ SUBROUTINE CLDRAD IF(MODELNAME == 'GFS')THEN !$omp parallel do private(i,j) DO J=JSTA,JEND - DO I=1,IM + DO I=ISTA,IEND GRID1(I,J) = PBOT(I,J) ENDDO ENDDO ELSE DO J=JSTA,JEND - DO I=1,IM + DO I=ISTA,IEND IBOT=IBOTCu(I,J) IF (IBOT>0 .AND. IBOT<=NINT(LMH(I,J))) THEN GRID1(I,J) = PMID(I,J,IBOT) @@ -2319,11 +2373,12 @@ SUBROUTINE CLDRAD if(grib=="grib2" )then cfld=cfld+1 fld_info(cfld)%ifld=IAVBLFLD(IGET(188)) -!$omp parallel do private(i,j,jj) +!$omp parallel do private(i,j,ii,jj) do j=1,jend-jsta+1 jj = jsta+j-1 - do i=1,im - datapd(i,j,cfld) = GRID1(i,jj) + do i=1,iend-ista+1 + ii=ista+i-1 + datapd(i,j,cfld) = GRID1(ii,jj) enddo enddo endif @@ -2333,7 +2388,7 @@ SUBROUTINE CLDRAD ! IF (IGET(192) > 0) THEN DO J=JSTA,JEND - DO I=1,IM + DO I=ISTA,IEND IBOT=IBOTDCu(I,J) IF (IBOT>0 .AND. IBOT<=NINT(LMH(I,J))) THEN GRID1(I,J) = PMID(I,J,IBOT) @@ -2345,14 +2400,14 @@ SUBROUTINE CLDRAD if(grib=="grib2" )then cfld=cfld+1 fld_info(cfld)%ifld=IAVBLFLD(IGET(192)) - datapd(1:im,1:jend-jsta+1,cfld)=GRID1(1:im,jsta:jend) + datapd(1:iend-ista+1,1:jend-jsta+1,cfld)=GRID1(ista:iend,jsta:jend) endif ENDIF !--- Shallow convective cloud base pressures (Ferrier, Feb '02) ! IF (IGET(190) > 0) THEN DO J=JSTA,JEND - DO I=1,IM + DO I=ISTA,IEND IBOT=IBOTSCu(I,J) IF (IBOT>0 .AND. IBOT<=NINT(LMH(I,J))) THEN GRID1(I,J) = PMID(I,J,IBOT) @@ -2364,14 +2419,14 @@ SUBROUTINE CLDRAD if(grib=="grib2" )then cfld=cfld+1 fld_info(cfld)%ifld=IAVBLFLD(IGET(190)) - datapd(1:im,1:jend-jsta+1,cfld)=GRID1(1:im,jsta:jend) + datapd(1:iend-ista+1,1:jend-jsta+1,cfld)=GRID1(ista:iend,jsta:jend) endif ENDIF !--- Base of grid-scale cloudiness (Ferrier, Feb '02) ! IF (IGET(194) > 0) THEN DO J=JSTA,JEND - DO I=1,IM + DO I=ISTA,IEND IBOT=IBOTGr(I,J) IF (IBOT>0 .AND. IBOT<=NINT(LMH(I,J))) THEN GRID1(I,J) = PMID(I,J,IBOT) @@ -2383,7 +2438,7 @@ SUBROUTINE CLDRAD if(grib=="grib2" )then cfld=cfld+1 fld_info(cfld)%ifld=IAVBLFLD(IGET(194)) - datapd(1:im,1:jend-jsta+1,cfld)=GRID1(1:im,jsta:jend) + datapd(1:iend-ista+1,1:jend-jsta+1,cfld)=GRID1(ista:iend,jsta:jend) endif ENDIF @@ -2391,7 +2446,7 @@ SUBROUTINE CLDRAD ! IF (IGET(303) > 0) THEN DO J=JSTA,JEND - DO I=1,IM + DO I=ISTA,IEND ! IF(PBOTL(I,J) > SMALL)THEN GRID1(I,J) = PBOTL(I,J) ! ELSE @@ -2427,14 +2482,14 @@ SUBROUTINE CLDRAD endif fld_info(cfld)%tinvstat=IFHR-ID(18) - datapd(1:im,1:jend-jsta+1,cfld)=GRID1(1:im,jsta:jend) + datapd(1:iend-ista+1,1:jend-jsta+1,cfld)=GRID1(ista:iend,jsta:jend) endif ENDIF !--- Base of middle cloud ! IF (IGET(306) > 0) THEN DO J=JSTA,JEND - DO I=1,IM + DO I=ISTA,IEND IF(PBOTM(I,J) > SMALL)THEN GRID1(I,J) = PBOTM(I,J) ELSE @@ -2470,14 +2525,14 @@ SUBROUTINE CLDRAD endif fld_info(cfld)%tinvstat=IFHR-ID(18) - datapd(1:im,1:jend-jsta+1,cfld)=GRID1(1:im,jsta:jend) + datapd(1:iend-ista+1,1:jend-jsta+1,cfld)=GRID1(ista:iend,jsta:jend) endif ENDIF !--- Base of high cloud ! IF (IGET(309) > 0) THEN DO J=JSTA,JEND - DO I=1,IM + DO I=ISTA,IEND IF(PBOTH(I,J) > SMALL)THEN GRID1(I,J) = PBOTH(I,J) ELSE @@ -2513,7 +2568,7 @@ SUBROUTINE CLDRAD endif fld_info(cfld)%tinvstat=IFHR-ID(18) - datapd(1:im,1:jend-jsta+1,cfld)=GRID1(1:im,jsta:jend) + datapd(1:iend-ista+1,1:jend-jsta+1,cfld)=GRID1(ista:iend,jsta:jend) endif ENDIF ! @@ -2526,7 +2581,7 @@ SUBROUTINE CLDRAD IF ((IGET(149)>0) .OR. (IGET(179)>0) .OR. & (IGET(168)>0) .OR. (IGET(275)>0)) THEN DO J=JSTA,JEND - DO I=1,IM + DO I=ISTA,IEND ITOP=ITOPT(I,J) IF (ITOP>0 .AND. ITOP<=NINT(LMH(I,J))) THEN IF(T(I,J,ITOP)0) THEN DO J=JSTA,JEND - DO I=1,IM + DO I=ISTA,IEND GRID1(I,J) = CLDP(I,J) ENDDO ENDDO if(grib=="grib2" )then cfld=cfld+1 fld_info(cfld)%ifld=IAVBLFLD(IGET(149)) - datapd(1:im,1:jend-jsta+1,cfld)=GRID1(1:im,jsta:jend) + datapd(1:iend-ista+1,1:jend-jsta+1,cfld)=GRID1(ista:iend,jsta:jend) endif ENDIF ! CLOUD TOP HEIGHT ! IF (IGET(179)>0) THEN DO J=JSTA,JEND - DO I=1,IM + DO I=ISTA,IEND GRID1(I,J) = CLDZ(I,J) ENDDO ENDDO if(grib=="grib2" )then cfld=cfld+1 fld_info(cfld)%ifld=IAVBLFLD(IGET(179)) - datapd(1:im,1:jend-jsta+1,cfld)=GRID1(1:im,jsta:jend) + datapd(1:iend-ista+1,1:jend-jsta+1,cfld)=GRID1(ista:iend,jsta:jend) endif ENDIF ENDIF @@ -2594,7 +2649,7 @@ SUBROUTINE CLDRAD Cloud_def_p = 0.0000001 DO J=JSTA,JEND - DO I=1,IM + DO I=ISTA,IEND ! imported from RUC post ! Cloud top zcldtop = -5000. @@ -2658,28 +2713,28 @@ SUBROUTINE CLDRAD ! IF (IGET(406)>0) THEN DO J=JSTA,JEND - DO I=1,IM + DO I=ISTA,IEND GRID1(I,J) = CLDP(I,J) ENDDO ENDDO if(grib=="grib2" )then cfld=cfld+1 fld_info(cfld)%ifld=IAVBLFLD(IGET(406)) - datapd(1:im,1:jend-jsta+1,cfld)=GRID1(1:im,jsta:jend) + datapd(1:iend-ista+1,1:jend-jsta+1,cfld)=GRID1(ista:iend,jsta:jend) endif ENDIF ! GSD CLOUD TOP HEIGHT ! IF (IGET(409)>0) THEN DO J=JSTA,JEND - DO I=1,IM + DO I=ISTA,IEND GRID1(I,J) = CLDZ(I,J) ENDDO ENDDO if(grib=="grib2" )then cfld=cfld+1 fld_info(cfld)%ifld=IAVBLFLD(IGET(409)) - datapd(1:im,1:jend-jsta+1,cfld)=GRID1(1:im,jsta:jend) + datapd(1:iend-ista+1,1:jend-jsta+1,cfld)=GRID1(ista:iend,jsta:jend) endif ENDIF ENDIF ! end of GSD algorithm @@ -2688,14 +2743,14 @@ SUBROUTINE CLDRAD ! IF (IGET(168)>0) THEN DO J=JSTA,JEND - DO I=1,IM + DO I=ISTA,IEND GRID1(I,J) = CLDT(I,J) ENDDO ENDDO if(grib=="grib2" )then cfld=cfld+1 fld_info(cfld)%ifld=IAVBLFLD(IGET(168)) - datapd(1:im,1:jend-jsta+1,cfld)=GRID1(1:im,jsta:jend) + datapd(1:iend-ista+1,1:jend-jsta+1,cfld)=GRID1(ista:iend,jsta:jend) endif ENDIF ! @@ -2704,7 +2759,7 @@ SUBROUTINE CLDRAD num_thick=0 ! for debug GRID1=spval DO J=JSTA,JEND - DO I=1,IM + DO I=ISTA,IEND opdepth=0. llmh=nint(lmh(i,j)) !bsf - start @@ -2732,10 +2787,13 @@ SUBROUTINE CLDRAD ! qqi(i,j,k)=qqw(i,j,k) ! because GFS only uses cloud water ! qqw(i,j,k)=0. ! end if + if(pint(i,j,k) 1.) exit enddo if (opdepth > 1.) num_thick=num_thick+1 ! for debug @@ -2793,7 +2851,7 @@ SUBROUTINE CLDRAD if(grib=="grib2" )then cfld=cfld+1 fld_info(cfld)%ifld=IAVBLFLD(IGET(275)) - datapd(1:im,1:jend-jsta+1,cfld)=GRID1(1:im,jsta:jend) + datapd(1:iend-ista+1,1:jend-jsta+1,cfld)=GRID1(ista:iend,jsta:jend) endif ENDIF @@ -2804,13 +2862,13 @@ SUBROUTINE CLDRAD IF(MODELNAME == 'GFS')THEN !$omp parallel do private(i,j) DO J=JSTA,JEND - DO I=1,IM + DO I=ISTA,IEND GRID1(I,J) = PTOP(I,J) ENDDO ENDDO ELSE DO J=JSTA,JEND - DO I=1,IM + DO I=ISTA,IEND ITOP=ITOPCu(I,J) IF (ITOP>0 .AND. ITOP<=NINT(LMH(I,J))) THEN GRID1(I,J) = PMID(I,J,ITOP) @@ -2823,11 +2881,12 @@ SUBROUTINE CLDRAD if(grib=="grib2" )then cfld=cfld+1 fld_info(cfld)%ifld=IAVBLFLD(IGET(189)) -!$omp parallel do private(i,j,jj) +!$omp parallel do private(i,j,ii,jj) do j=1,jend-jsta+1 jj = jsta+j-1 - do i=1,im - datapd(i,j,cfld) = GRID1(i,jj) + do i=1,iend-ista+1 + ii=ista+i-1 + datapd(i,j,cfld) = GRID1(ii,jj) enddo enddo endif @@ -2837,7 +2896,7 @@ SUBROUTINE CLDRAD ! IF (IGET(193) > 0) THEN DO J=JSTA,JEND - DO I=1,IM + DO I=ISTA,IEND ITOP=ITOPDCu(I,J) IF (ITOP>0 .AND. ITOP<=NINT(LMH(I,J))) THEN GRID1(I,J) = PMID(I,J,ITOP) @@ -2849,14 +2908,14 @@ SUBROUTINE CLDRAD if(grib=="grib2" )then cfld=cfld+1 fld_info(cfld)%ifld=IAVBLFLD(IGET(193)) - datapd(1:im,1:jend-jsta+1,cfld)=GRID1(1:im,jsta:jend) + datapd(1:iend-ista+1,1:jend-jsta+1,cfld)=GRID1(ista:iend,jsta:jend) endif END IF !--- Shallow convective cloud top pressures (Ferrier, Feb '02) ! IF (IGET(191) > 0) THEN DO J=JSTA,JEND - DO I=1,IM + DO I=ISTA,IEND ITOP=ITOPSCu(I,J) IF (ITOP>0 .AND. ITOP<=NINT(LMH(I,J))) THEN GRID1(I,J) = PMID(I,J,ITOP) @@ -2868,7 +2927,7 @@ SUBROUTINE CLDRAD if(grib=="grib2" )then cfld=cfld+1 fld_info(cfld)%ifld=IAVBLFLD(IGET(191)) - datapd(1:im,1:jend-jsta+1,cfld)=GRID1(1:im,jsta:jend) + datapd(1:iend-ista+1,1:jend-jsta+1,cfld)=GRID1(ista:iend,jsta:jend) endif END IF ! @@ -2876,7 +2935,7 @@ SUBROUTINE CLDRAD ! IF (IGET(195) > 0) THEN DO J=JSTA,JEND - DO I=1,IM + DO I=ISTA,IEND ITOP=ITOPGr(I,J) IF (ITOP>0 .AND. ITOP<=NINT(LMH(I,J))) THEN GRID1(I,J) = PMID(I,J,ITOP) @@ -2888,7 +2947,7 @@ SUBROUTINE CLDRAD if(grib=="grib2" )then cfld=cfld+1 fld_info(cfld)%ifld=IAVBLFLD(IGET(195)) - datapd(1:im,1:jend-jsta+1,cfld)=GRID1(1:im,jsta:jend) + datapd(1:iend-ista+1,1:jend-jsta+1,cfld)=GRID1(ista:iend,jsta:jend) endif END IF @@ -2896,7 +2955,7 @@ SUBROUTINE CLDRAD ! IF (IGET(304) > 0) THEN DO J=JSTA,JEND - DO I=1,IM + DO I=ISTA,IEND IF(PTOPL(I,J) > SMALL)THEN GRID1(I,J) = PTOPL(I,J) ELSE @@ -2932,14 +2991,14 @@ SUBROUTINE CLDRAD endif fld_info(cfld)%tinvstat=IFHR-ID(18) - datapd(1:im,1:jend-jsta+1,cfld)=GRID1(1:im,jsta:jend) + datapd(1:iend-ista+1,1:jend-jsta+1,cfld)=GRID1(ista:iend,jsta:jend) endif ENDIF !--- top of middle cloud ! IF (IGET(307) > 0) THEN DO J=JSTA,JEND - DO I=1,IM + DO I=ISTA,IEND GRID1(I,J) = PTOPM(I,J) ENDDO ENDDO @@ -2971,14 +3030,14 @@ SUBROUTINE CLDRAD endif fld_info(cfld)%tinvstat=IFHR-ID(18) - datapd(1:im,1:jend-jsta+1,cfld)=GRID1(1:im,jsta:jend) + datapd(1:iend-ista+1,1:jend-jsta+1,cfld)=GRID1(ista:iend,jsta:jend) endif ENDIF !--- top of high cloud ! IF (IGET(310) > 0) THEN DO J=JSTA,JEND - DO I=1,IM + DO I=ISTA,IEND GRID1(I,J) = PTOPH(I,J) ENDDO ENDDO @@ -3010,7 +3069,7 @@ SUBROUTINE CLDRAD endif fld_info(cfld)%tinvstat=IFHR-ID(18) - datapd(1:im,1:jend-jsta+1,cfld)=GRID1(1:im,jsta:jend) + datapd(1:iend-ista+1,1:jend-jsta+1,cfld)=GRID1(ista:iend,jsta:jend) endif ENDIF @@ -3018,7 +3077,7 @@ SUBROUTINE CLDRAD ! IF (IGET(305) > 0) THEN DO J=JSTA,JEND - DO I=1,IM + DO I=ISTA,IEND GRID1(I,J) = TTOPL(I,J) ENDDO ENDDO @@ -3050,14 +3109,14 @@ SUBROUTINE CLDRAD endif fld_info(cfld)%tinvstat=IFHR-ID(18) - datapd(1:im,1:jend-jsta+1,cfld)=GRID1(1:im,jsta:jend) + datapd(1:iend-ista+1,1:jend-jsta+1,cfld)=GRID1(ista:iend,jsta:jend) endif ENDIF !--- Base of middle cloud ! IF (IGET(308) > 0) THEN DO J=JSTA,JEND - DO I=1,IM + DO I=ISTA,IEND GRID1(I,J) = TTOPM(I,J) ENDDO ENDDO @@ -3089,14 +3148,14 @@ SUBROUTINE CLDRAD endif fld_info(cfld)%tinvstat=IFHR-ID(18) - datapd(1:im,1:jend-jsta+1,cfld)=GRID1(1:im,jsta:jend) + datapd(1:iend-ista+1,1:jend-jsta+1,cfld)=GRID1(ista:iend,jsta:jend) endif ENDIF !--- Base of high cloud ! IF (IGET(311) > 0) THEN DO J=JSTA,JEND - DO I=1,IM + DO I=ISTA,IEND GRID1(I,J) = TTOPH(I,J) ENDDO ENDDO @@ -3127,7 +3186,7 @@ SUBROUTINE CLDRAD fld_info(cfld)%ntrange=1 endif fld_info(cfld)%tinvstat=IFHR-ID(18) - datapd(1:im,1:jend-jsta+1,cfld)=GRID1(1:im,jsta:jend) + datapd(1:iend-ista+1,1:jend-jsta+1,cfld)=GRID1(ista:iend,jsta:jend) endif ENDIF ! @@ -3136,7 +3195,7 @@ SUBROUTINE CLDRAD IF (IGET(196) > 0.or.IGET(570)>0) THEN GRID1=SPVAL DO J=JSTA,JEND - DO I=1,IM + DO I=ISTA,IEND if(CNVCFR(I,J)/=SPVAL)GRID1(I,J)=100.*CNVCFR(I,J) !-- convert to percent ENDDO ENDDO @@ -3144,13 +3203,13 @@ SUBROUTINE CLDRAD if(grib=="grib2" )then cfld=cfld+1 fld_info(cfld)%ifld=IAVBLFLD(IGET(196)) - datapd(1:im,1:jend-jsta+1,cfld)=GRID1(1:im,jsta:jend) + datapd(1:iend-ista+1,1:jend-jsta+1,cfld)=GRID1(ista:iend,jsta:jend) endif elseif(IGET(570)>0) then if(grib=="grib2" )then cfld=cfld+1 fld_info(cfld)%ifld=IAVBLFLD(IGET(570)) - datapd(1:im,1:jend-jsta+1,cfld)=GRID1(1:im,jsta:jend) + datapd(1:iend-ista+1,1:jend-jsta+1,cfld)=GRID1(ista:iend,jsta:jend) endif endif END IF @@ -3160,7 +3219,7 @@ SUBROUTINE CLDRAD IF (IGET(342) > 0) THEN GRID1=SPVAL DO J=JSTA,JEND - DO I=1,IM + DO I=ISTA,IEND if(PBLCFR(I,J)/=SPVAL)GRID1(I,J)=100.*PBLCFR(I,J) !-- convert to percent ENDDO ENDDO @@ -3192,7 +3251,7 @@ SUBROUTINE CLDRAD endif fld_info(cfld)%tinvstat=IFHR-ID(18) - datapd(1:im,1:jend-jsta+1,cfld)=GRID1(1:im,jsta:jend) + datapd(1:iend-ista+1,1:jend-jsta+1,cfld)=GRID1(ista:iend,jsta:jend) endif END IF ! @@ -3200,7 +3259,7 @@ SUBROUTINE CLDRAD ! IF (IGET(313) > 0) THEN DO J=JSTA,JEND - DO I=1,IM + DO I=ISTA,IEND GRID1(I,J)=cldwork(I,J) ENDDO ENDDO @@ -3232,7 +3291,7 @@ SUBROUTINE CLDRAD endif fld_info(cfld)%tinvstat=IFHR-ID(18) - datapd(1:im,1:jend-jsta+1,cfld)=GRID1(1:im,jsta:jend) + datapd(1:iend-ista+1,1:jend-jsta+1,cfld)=GRID1(ista:iend,jsta:jend) endif END IF ! @@ -3252,7 +3311,7 @@ SUBROUTINE CLDRAD RRNUM=0. ENDIF DO J=JSTA,JEND - DO I=1,IM + DO I=ISTA,IEND IF(ASWIN(I,J)/=SPVAL)THEN GRID1(I,J) = ASWIN(I,J)*RRNUM ELSE @@ -3288,7 +3347,7 @@ SUBROUTINE CLDRAD fld_info(cfld)%ntrange=0 endif fld_info(cfld)%tinvstat=IFHR-ID(18) - datapd(1:im,1:jend-jsta+1,cfld)=GRID1(1:im,jsta:jend) + datapd(1:iend-ista+1,1:jend-jsta+1,cfld)=GRID1(ista:iend,jsta:jend) endif ENDIF ! @@ -3305,7 +3364,7 @@ SUBROUTINE CLDRAD RRNUM=0. ENDIF DO J=JSTA,JEND - DO I=1,IM + DO I=ISTA,IEND IF(AUVBIN(I,J)/=SPVAL)THEN GRID1(I,J) = AUVBIN(I,J)*RRNUM ELSE @@ -3342,7 +3401,7 @@ SUBROUTINE CLDRAD fld_info(cfld)%ntrange=0 endif fld_info(cfld)%tinvstat=IFHR-ID(18) - datapd(1:im,1:jend-jsta+1,cfld)=GRID1(1:im,jsta:jend) + datapd(1:iend-ista+1,1:jend-jsta+1,cfld)=GRID1(ista:iend,jsta:jend) endif ENDIF ! @@ -3359,7 +3418,7 @@ SUBROUTINE CLDRAD RRNUM=0. ENDIF DO J=JSTA,JEND - DO I=1,IM + DO I=ISTA,IEND IF(AUVBINC(I,J)/=SPVAL)THEN GRID1(I,J) = AUVBINC(I,J)*RRNUM ELSE @@ -3396,7 +3455,7 @@ SUBROUTINE CLDRAD fld_info(cfld)%ntrange=0 endif fld_info(cfld)%tinvstat=IFHR-ID(18) - datapd(1:im,1:jend-jsta+1,cfld)=GRID1(1:im,jsta:jend) + datapd(1:iend-ista+1,1:jend-jsta+1,cfld)=GRID1(ista:iend,jsta:jend) endif ENDIF ! @@ -3412,7 +3471,7 @@ SUBROUTINE CLDRAD RRNUM=0. ENDIF DO J=JSTA,JEND - DO I=1,IM + DO I=ISTA,IEND IF(ALWIN(I,J)/=SPVAL)THEN GRID1(I,J) = ALWIN(I,J)*RRNUM ELSE @@ -3448,7 +3507,7 @@ SUBROUTINE CLDRAD fld_info(cfld)%ntrange=0 endif fld_info(cfld)%tinvstat=IFHR-ID(18) - datapd(1:im,1:jend-jsta+1,cfld)=GRID1(1:im,jsta:jend) + datapd(1:iend-ista+1,1:jend-jsta+1,cfld)=GRID1(ista:iend,jsta:jend) endif ENDIF ! @@ -3464,7 +3523,7 @@ SUBROUTINE CLDRAD RRNUM=0. ENDIF DO J=JSTA,JEND - DO I=1,IM + DO I=ISTA,IEND IF(ASWOUT(I,J)/=SPVAL)THEN GRID1(I,J) = -1.0*ASWOUT(I,J)*RRNUM ELSE @@ -3500,7 +3559,7 @@ SUBROUTINE CLDRAD fld_info(cfld)%ntrange=0 endif fld_info(cfld)%tinvstat=IFHR-ID(18) - datapd(1:im,1:jend-jsta+1,cfld)=GRID1(1:im,jsta:jend) + datapd(1:iend-ista+1,1:jend-jsta+1,cfld)=GRID1(ista:iend,jsta:jend) endif ENDIF ! @@ -3516,7 +3575,7 @@ SUBROUTINE CLDRAD RRNUM=0. ENDIF DO J=JSTA,JEND - DO I=1,IM + DO I=ISTA,IEND IF(ALWOUT(I,J)/=SPVAL)THEN GRID1(I,J) = -1.0*ALWOUT(I,J)*RRNUM ELSE @@ -3552,7 +3611,7 @@ SUBROUTINE CLDRAD fld_info(cfld)%ntrange=0 endif fld_info(cfld)%tinvstat=IFHR-ID(18) - datapd(1:im,1:jend-jsta+1,cfld)=GRID1(1:im,jsta:jend) + datapd(1:iend-ista+1,1:jend-jsta+1,cfld)=GRID1(ista:iend,jsta:jend) endif ENDIF ! @@ -3568,7 +3627,7 @@ SUBROUTINE CLDRAD RRNUM=0. ENDIF DO J=JSTA,JEND - DO I=1,IM + DO I=ISTA,IEND IF(ASWTOA(I,J)/=SPVAL)THEN GRID1(I,J) = ASWTOA(I,J)*RRNUM ELSE @@ -3604,7 +3663,7 @@ SUBROUTINE CLDRAD fld_info(cfld)%ntrange=0 endif fld_info(cfld)%tinvstat=IFHR-ID(18) - datapd(1:im,1:jend-jsta+1,cfld)=GRID1(1:im,jsta:jend) + datapd(1:iend-ista+1,1:jend-jsta+1,cfld)=GRID1(ista:iend,jsta:jend) endif ENDIF ! @@ -3620,7 +3679,7 @@ SUBROUTINE CLDRAD RRNUM=0. ENDIF DO J=JSTA,JEND - DO I=1,IM + DO I=ISTA,IEND IF(ALWTOA(I,J)/=SPVAL)THEN GRID1(I,J) = ALWTOA(I,J)*RRNUM ELSE @@ -3656,7 +3715,7 @@ SUBROUTINE CLDRAD fld_info(cfld)%ntrange=0 endif fld_info(cfld)%tinvstat=IFHR-ID(18) - datapd(1:im,1:jend-jsta+1,cfld)=GRID1(1:im,jsta:jend) + datapd(1:iend-ista+1,1:jend-jsta+1,cfld)=GRID1(ista:iend,jsta:jend) endif ENDIF ! @@ -3666,7 +3725,7 @@ SUBROUTINE CLDRAD GRID1=SPVAL ELSE DO J=JSTA,JEND - DO I=1,IM + DO I=ISTA,IEND GRID1(I,J) = RLWTOA(I,J) ENDDO ENDDO @@ -3674,7 +3733,7 @@ SUBROUTINE CLDRAD if(grib=="grib2" )then cfld=cfld+1 fld_info(cfld)%ifld=IAVBLFLD(IGET(274)) - datapd(1:im,1:jend-jsta+1,cfld)=GRID1(1:im,jsta:jend) + datapd(1:iend-ista+1,1:jend-jsta+1,cfld)=GRID1(ista:iend,jsta:jend) endif ENDIF ! @@ -3685,7 +3744,7 @@ SUBROUTINE CLDRAD GRID1=SPVAL ELSE DO J=JSTA,JEND - DO I=1,IM + DO I=ISTA,IEND IF(RLWTOA(I,J) < SPVAL) & & GRID1(I,J) = (RLWTOA(I,J)*STBOL)**0.25 ENDDO @@ -3694,7 +3753,7 @@ SUBROUTINE CLDRAD if(grib=="grib2" )then cfld=cfld+1 fld_info(cfld)%ifld=IAVBLFLD(IGET(265)) - datapd(1:im,1:jend-jsta+1,cfld)=GRID1(1:im,jsta:jend) + datapd(1:iend-ista+1,1:jend-jsta+1,cfld)=GRID1(ista:iend,jsta:jend) endif ENDIF ! @@ -3702,7 +3761,7 @@ SUBROUTINE CLDRAD IF (IGET(156)>0) THEN GRID1=SPVAL DO J=JSTA,JEND - DO I=1,IM + DO I=ISTA,IEND IF(RSWIN(I,J)1.E-6) THEN FACTRS=CZEN(I,J)/CZMEAN(I,J) @@ -3717,7 +3776,7 @@ SUBROUTINE CLDRAD if(grib=="grib2" )then cfld=cfld+1 fld_info(cfld)%ifld=IAVBLFLD(IGET(156)) - datapd(1:im,1:jend-jsta+1,cfld)=GRID1(1:im,jsta:jend) + datapd(1:iend-ista+1,1:jend-jsta+1,cfld)=GRID1(ista:iend,jsta:jend) endif ENDIF ! @@ -3726,7 +3785,7 @@ SUBROUTINE CLDRAD ! dong add missing value to DLWRF GRID1 = spval DO J=JSTA,JEND - DO I=1,IM + DO I=ISTA,IEND IF(MODELNAME=='RSM' .OR. MODELNAME == 'RAPR') THEN !add by Binbin: RSM has direct RLWIN output GRID1(I,J)=RLWIN(I,J) ELSE @@ -3747,7 +3806,7 @@ SUBROUTINE CLDRAD if(grib=="grib2" )then cfld=cfld+1 fld_info(cfld)%ifld=IAVBLFLD(IGET(157)) - datapd(1:im,1:jend-jsta+1,cfld)=GRID1(1:im,jsta:jend) + datapd(1:iend-ista+1,1:jend-jsta+1,cfld)=GRID1(ista:iend,jsta:jend) endif ENDIF ! @@ -3756,7 +3815,7 @@ SUBROUTINE CLDRAD GRID1 = spval !$omp parallel do private(i,j) DO J=JSTA,JEND - DO I=1,IM + DO I=ISTA,IEND IF(RSWOUT(I,J)1.E-6) THEN FACTRS=CZEN(I,J)/CZMEAN(I,J) @@ -3771,80 +3830,100 @@ SUBROUTINE CLDRAD if(grib=="grib2" )then cfld=cfld+1 fld_info(cfld)%ifld=IAVBLFLD(IGET(141)) - datapd(1:im,1:jend-jsta+1,cfld)=GRID1(1:im,jsta:jend) + datapd(1:iend-ista+1,1:jend-jsta+1,cfld)=GRID1(ista:iend,jsta:jend) endif ENDIF -! Instantaneous clear-sky upwelling SW at the surface - IF (IGET(743)>0) THEN - DO J=JSTA,JEND - DO I=1,IM - GRID1(I,J) = SWUPBC(I,J) - ENDDO - ENDDO - if(grib=='grib2') then - cfld=cfld+1 - fld_info(cfld)%ifld=IAVBLFLD(IGET(743)) - datapd(1:im,1:jend-jsta+1,cfld)=GRID1(1:im,jsta:jend) - endif - ENDIF - ! CURRENT OUTGOING LW RADIATION AT THE SURFACE. IF (IGET(142)>0) THEN !$omp parallel do private(i,j) DO J=JSTA,JEND - DO I=1,IM + DO I=ISTA,IEND GRID1(I,J) = RADOT(I,J) ENDDO ENDDO if(grib=="grib2" )then cfld=cfld+1 fld_info(cfld)%ifld=IAVBLFLD(IGET(142)) - datapd(1:im,1:jend-jsta+1,cfld)=GRID1(1:im,jsta:jend) + datapd(1:iend-ista+1,1:jend-jsta+1,cfld)=GRID1(ista:iend,jsta:jend) endif ENDIF ! Instantaneous clear-sky downwelling LW at the surface - IF (IGET(744)>0) THEN + IF (IGET(764)>0) THEN DO J=JSTA,JEND - DO I=1,IM + DO I=ISTA,IEND GRID1(I,J) = LWDNBC(I,J) ENDDO ENDDO if(grib=='grib2') then cfld=cfld+1 - fld_info(cfld)%ifld=IAVBLFLD(IGET(744)) - datapd(1:im,1:jend-jsta+1,cfld)=GRID1(1:im,jsta:jend) + fld_info(cfld)%ifld=IAVBLFLD(IGET(764)) + datapd(1:iend-ista+1,1:jend-jsta+1,cfld)=GRID1(ista:iend,jsta:jend) endif ENDIF ! Instantaneous clear-sky upwelling LW at the surface - IF (IGET(745)>0) THEN + IF (IGET(765)>0) THEN DO J=JSTA,JEND - DO I=1,IM + DO I=ISTA,IEND GRID1(I,J) = LWUPBC(I,J) ENDDO ENDDO if(grib=='grib2') then cfld=cfld+1 - fld_info(cfld)%ifld=IAVBLFLD(IGET(745)) - datapd(1:im,1:jend-jsta+1,cfld)=GRID1(1:im,jsta:jend) + fld_info(cfld)%ifld=IAVBLFLD(IGET(765)) + datapd(1:iend-ista+1,1:jend-jsta+1,cfld)=GRID1(ista:iend,jsta:jend) endif ENDIF ! Instantaneous MEAN_FRP IF (IGET(740)>0) THEN -! print *,"GETTING INTO MEAN_FRP PART" DO J=JSTA,JEND - DO I=1,IM + DO I=ISTA,IEND GRID1(I,J) = MEAN_FRP(I,J) ENDDO ENDDO if(grib=='grib2') then -! print *,"GETTING INTO MEAN_FRP GRIB2 PART" cfld=cfld+1 fld_info(cfld)%ifld=IAVBLFLD(IGET(740)) - datapd(1:im,1:jend-jsta+1,cfld)=GRID1(1:im,jsta:jend) + datapd(1:iend-ista+1,1:jend-jsta+1,cfld)=GRID1(ista:iend,jsta:jend) + endif + ENDIF + +! Biomass burning emissions (EBB) + IF (IGET(745)>0) THEN + DO J=JSTA,JEND + DO I=ISTA,IEND + IF (EBB(I,J)0) THEN + DO J=JSTA,JEND + DO I=ISTA,IEND + IF (HWP(I,J)1.E-6) THEN FACTRS=CZEN(I,J)/CZMEAN(I,J) @@ -3867,50 +3946,36 @@ SUBROUTINE CLDRAD if(grib=="grib2" )then cfld=cfld+1 fld_info(cfld)%ifld=IAVBLFLD(IGET(262)) - datapd(1:im,1:jend-jsta+1,cfld)=GRID1(1:im,jsta:jend) + datapd(1:iend-ista+1,1:jend-jsta+1,cfld)=GRID1(ista:iend,jsta:jend) endif ENDIF -! Instantaneous clear-sky downwelling SW at surface (GSD version) - IF (IGET(742)>0) THEN - DO J=JSTA,JEND - DO I=1,IM - GRID1(I,J) = SWDNBC(I,J) - ENDDO - ENDDO - if(grib=='grib2') then - cfld=cfld+1 - fld_info(cfld)%ifld=IAVBLFLD(IGET(742)) - datapd(1:im,1:jend-jsta+1,cfld)=GRID1(1:im,jsta:jend) - endif - ENDIF - ! Instantaneous SWDDNI IF (IGET(772)>0)THEN !$omp parallel do private(i,j) DO J=JSTA,JEND - DO I=1,IM + DO I=ISTA,IEND GRID1(I,J) = SWDDNI(I,J) ENDDO ENDDO if(grib=='grib2') then cfld=cfld+1 fld_info(cfld)%ifld=IAVBLFLD(IGET(772)) - datapd(1:im,1:jend-jsta+1,cfld)=GRID1(1:im,jsta:jend) + datapd(1:iend-ista+1,1:jend-jsta+1,cfld)=GRID1(ista:iend,jsta:jend) endif ENDIF ! Instantaneous clear-sky SWDDNI IF (IGET(796)>0) THEN DO J=JSTA,JEND - DO I=1,IM + DO I=ISTA,IEND GRID1(I,J) = SWDDNIC(I,J) ENDDO ENDDO if(grib=='grib2') then cfld=cfld+1 fld_info(cfld)%ifld=IAVBLFLD(IGET(796)) - datapd(1:im,1:jend-jsta+1,cfld)=GRID1(1:im,jsta:jend) + datapd(1:iend-ista+1,1:jend-jsta+1,cfld)=GRID1(ista:iend,jsta:jend) endif ENDIF @@ -3918,35 +3983,35 @@ SUBROUTINE CLDRAD IF (IGET(773)>0) THEN !$omp parallel do private(i,j) DO J=JSTA,JEND - DO I=1,IM + DO I=ISTA,IEND GRID1(I,J) = SWDDIF(I,J) ENDDO ENDDO if(grib=='grib2') then cfld=cfld+1 fld_info(cfld)%ifld=IAVBLFLD(IGET(773)) - datapd(1:im,1:jend-jsta+1,cfld)=GRID1(1:im,jsta:jend) + datapd(1:iend-ista+1,1:jend-jsta+1,cfld)=GRID1(ista:iend,jsta:jend) endif ENDIF ! Instantaneous clear-sky SWDDIF IF (IGET(797)>0) THEN DO J=JSTA,JEND - DO I=1,IM + DO I=ISTA,IEND GRID1(I,J) = SWDDIFC(I,J) ENDDO ENDDO if(grib=='grib2') then cfld=cfld+1 fld_info(cfld)%ifld=IAVBLFLD(IGET(797)) - datapd(1:im,1:jend-jsta+1,cfld)=GRID1(1:im,jsta:jend) + datapd(1:iend-ista+1,1:jend-jsta+1,cfld)=GRID1(ista:iend,jsta:jend) endif ENDIF ! TIME AVERAGED INCOMING CLEARSKY SW RADIATION AT THE SURFACE. IF (IGET(383)>0) THEN DO J=JSTA,JEND - DO I=1,IM + DO I=ISTA,IEND GRID1(I,J) = ASWINC(I,J) ENDDO ENDDO @@ -3977,14 +4042,14 @@ SUBROUTINE CLDRAD fld_info(cfld)%ntrange=0 endif fld_info(cfld)%tinvstat=IFHR-ID(18) - datapd(1:im,1:jend-jsta+1,cfld)=GRID1(1:im,jsta:jend) + datapd(1:iend-ista+1,1:jend-jsta+1,cfld)=GRID1(ista:iend,jsta:jend) endif ENDIF ! ! TIME AVERAGED OUTGOING CLEARSKY SW RADIATION AT THE SURFACE. IF (IGET(386)>0) THEN DO J=JSTA,JEND - DO I=1,IM + DO I=ISTA,IEND GRID1(I,J) = ASWOUTC(I,J) ENDDO ENDDO @@ -4015,28 +4080,28 @@ SUBROUTINE CLDRAD fld_info(cfld)%ntrange=0 endif fld_info(cfld)%tinvstat=IFHR-ID(18) - datapd(1:im,1:jend-jsta+1,cfld)=GRID1(1:im,jsta:jend) + datapd(1:iend-ista+1,1:jend-jsta+1,cfld)=GRID1(ista:iend,jsta:jend) endif ENDIF ! Instantaneous all-sky outgoing SW flux at the model top IF (IGET(719)>0) THEN DO J=JSTA,JEND - DO I=1,IM + DO I=ISTA,IEND GRID1(I,J) = SWUPT(I,J) ENDDO ENDDO if(grib=='grib2') then cfld=cfld+1 fld_info(cfld)%ifld=IAVBLFLD(IGET(719)) - datapd(1:im,1:jend-jsta+1,cfld)=GRID1(1:im,jsta:jend) + datapd(1:iend-ista+1,1:jend-jsta+1,cfld)=GRID1(ista:iend,jsta:jend) endif ENDIF ! TIME AVERAGED OUTGOING CLEARSKY SW RADIATION AT THE MODEL TOP IF (IGET(387)>0) THEN DO J=JSTA,JEND - DO I=1,IM + DO I=ISTA,IEND GRID1(I,J) = ASWTOAC(I,J) ENDDO ENDDO @@ -4067,14 +4132,14 @@ SUBROUTINE CLDRAD fld_info(cfld)%ntrange=0 endif fld_info(cfld)%tinvstat=IFHR-ID(18) - datapd(1:im,1:jend-jsta+1,cfld)=GRID1(1:im,jsta:jend) + datapd(1:iend-ista+1,1:jend-jsta+1,cfld)=GRID1(ista:iend,jsta:jend) endif ENDIF ! ! TIME AVERAGED INCOMING SW RADIATION AT THE MODEL TOP IF (IGET(388)>0) THEN DO J=JSTA,JEND - DO I=1,IM + DO I=ISTA,IEND GRID1(I,J) = ASWINTOA(I,J) ENDDO ENDDO @@ -4105,14 +4170,14 @@ SUBROUTINE CLDRAD fld_info(cfld)%ntrange=0 endif fld_info(cfld)%tinvstat=IFHR-ID(18) - datapd(1:im,1:jend-jsta+1,cfld)=GRID1(1:im,jsta:jend) + datapd(1:iend-ista+1,1:jend-jsta+1,cfld)=GRID1(ista:iend,jsta:jend) endif ENDIF ! ! TIME AVERAGED INCOMING CLEARSKY LW RADIATION AT THE SURFACE IF (IGET(382)>0) THEN DO J=JSTA,JEND - DO I=1,IM + DO I=ISTA,IEND GRID1(I,J) = ALWINC(I,J) ENDDO ENDDO @@ -4143,14 +4208,14 @@ SUBROUTINE CLDRAD fld_info(cfld)%ntrange=0 endif fld_info(cfld)%tinvstat=IFHR-ID(18) - datapd(1:im,1:jend-jsta+1,cfld)=GRID1(1:im,jsta:jend) + datapd(1:iend-ista+1,1:jend-jsta+1,cfld)=GRID1(ista:iend,jsta:jend) endif ENDIF ! ! TIME AVERAGED OUTGOING CLEARSKY LW RADIATION AT THE SURFACE IF (IGET(384)>0) THEN DO J=JSTA,JEND - DO I=1,IM + DO I=ISTA,IEND GRID1(I,J) = ALWOUTC(I,J) ENDDO ENDDO @@ -4181,14 +4246,14 @@ SUBROUTINE CLDRAD fld_info(cfld)%ntrange=0 endif fld_info(cfld)%tinvstat=IFHR-ID(18) - datapd(1:im,1:jend-jsta+1,cfld)=GRID1(1:im,jsta:jend) + datapd(1:iend-ista+1,1:jend-jsta+1,cfld)=GRID1(ista:iend,jsta:jend) endif ENDIF ! ! TIME AVERAGED OUTGOING CLEARSKY LW RADIATION AT THE MODEL TOP IF (IGET(385)>0) THEN DO J=JSTA,JEND - DO I=1,IM + DO I=ISTA,IEND GRID1(I,J) = ALWTOAC(I,J) ENDDO ENDDO @@ -4219,14 +4284,14 @@ SUBROUTINE CLDRAD fld_info(cfld)%ntrange=0 endif fld_info(cfld)%tinvstat=IFHR-ID(18) - datapd(1:im,1:jend-jsta+1,cfld)=GRID1(1:im,jsta:jend) + datapd(1:iend-ista+1,1:jend-jsta+1,cfld)=GRID1(ista:iend,jsta:jend) endif ENDIF ! ! TIME AVERAGED SURFACE VISIBLE BEAM DOWNWARD SOLAR FLUX IF (IGET(401)>0) THEN DO J=JSTA,JEND - DO I=1,IM + DO I=ISTA,IEND GRID1(I,J) = AVISBEAMSWIN(I,J) ENDDO ENDDO @@ -4259,14 +4324,14 @@ SUBROUTINE CLDRAD fld_info(cfld)%ntrange=0 endif fld_info(cfld)%tinvstat=IFHR-ID(18) - datapd(1:im,1:jend-jsta+1,cfld)=GRID1(1:im,jsta:jend) + datapd(1:iend-ista+1,1:jend-jsta+1,cfld)=GRID1(ista:iend,jsta:jend) endif ENDIF ! ! TIME AVERAGED SURFACE VISIBLE DIFFUSE DOWNWARD SOLAR FLUX IF (IGET(402)>0) THEN DO J=JSTA,JEND - DO I=1,IM + DO I=ISTA,IEND GRID1(I,J) = AVISDIFFSWIN(I,J) ENDDO ENDDO @@ -4298,14 +4363,14 @@ SUBROUTINE CLDRAD fld_info(cfld)%ntrange=0 endif fld_info(cfld)%tinvstat=IFHR-ID(18) - datapd(1:im,1:jend-jsta+1,cfld)=GRID1(1:im,jsta:jend) + datapd(1:iend-ista+1,1:jend-jsta+1,cfld)=GRID1(ista:iend,jsta:jend) endif ENDIF ! ! TIME AVERAGED SURFACE VISIBLE BEAM DOWNWARD SOLAR FLUX IF (IGET(403)>0) THEN DO J=JSTA,JEND - DO I=1,IM + DO I=ISTA,IEND GRID1(I,J) = AIRBEAMSWIN(I,J) ENDDO ENDDO @@ -4337,14 +4402,14 @@ SUBROUTINE CLDRAD fld_info(cfld)%ntrange=0 endif fld_info(cfld)%tinvstat=IFHR-ID(18) - datapd(1:im,1:jend-jsta+1,cfld)=GRID1(1:im,jsta:jend) + datapd(1:iend-ista+1,1:jend-jsta+1,cfld)=GRID1(ista:iend,jsta:jend) endif ENDIF ! ! TIME AVERAGED SURFACE VISIBLE DIFFUSE DOWNWARD SOLAR FLUX IF (IGET(404)>0) THEN DO J=JSTA,JEND - DO I=1,IM + DO I=ISTA,IEND GRID1(I,J) = AIRDIFFSWIN(I,J) ENDDO ENDDO @@ -4376,135 +4441,151 @@ SUBROUTINE CLDRAD fld_info(cfld)%ntrange=0 endif fld_info(cfld)%tinvstat=IFHR-ID(18) - datapd(1:im,1:jend-jsta+1,cfld)=GRID1(1:im,jsta:jend) + datapd(1:iend-ista+1,1:jend-jsta+1,cfld)=GRID1(ista:iend,jsta:jend) endif ENDIF !2D AEROSOL OPTICAL DEPTH AT 550 NM IF(rdaod) then - IF (IGET(609).GT.0) THEN + IF (IGET(600).GT.0) THEN DO J=JSTA,JEND - DO I=1,IM + DO I=ISTA,IEND grid1(i,j)=aod550(i,j) ENDDO ENDDO if(grib=="grib2" )then cfld=cfld+1 - fld_info(cfld)%ifld=IAVBLFLD(IGET(609)) - datapd(1:im,1:jend-jsta+1,cfld)=GRID1(1:im,jsta:jend) + fld_info(cfld)%ifld=IAVBLFLD(IGET(600)) + datapd(1:iend-ista+1,1:jend-jsta+1,cfld)=GRID1(ista:iend,jsta:jend) endif ENDIF - IF (IGET(610).GT.0) THEN + IF (IGET(601).GT.0) THEN DO J=JSTA,JEND - DO I=1,IM + DO I=ISTA,IEND grid1(i,j)=du_aod550(i,j) ENDDO ENDDO if(grib=="grib2" )then cfld=cfld+1 - fld_info(cfld)%ifld=IAVBLFLD(IGET(610)) - datapd(1:im,1:jend-jsta+1,cfld)=GRID1(1:im,jsta:jend) + fld_info(cfld)%ifld=IAVBLFLD(IGET(601)) + datapd(1:iend-ista+1,1:jend-jsta+1,cfld)=GRID1(ista:iend,jsta:jend) endif ENDIF - IF (IGET(611).GT.0) THEN + IF (IGET(602).GT.0) THEN DO J=JSTA,JEND - DO I=1,IM + DO I=ISTA,IEND grid1(i,j)=ss_aod550(i,j) ENDDO ENDDO if(grib=="grib2" )then cfld=cfld+1 - fld_info(cfld)%ifld=IAVBLFLD(IGET(611)) - datapd(1:im,1:jend-jsta+1,cfld)=GRID1(1:im,jsta:jend) + fld_info(cfld)%ifld=IAVBLFLD(IGET(602)) + datapd(1:iend-ista+1,1:jend-jsta+1,cfld)=GRID1(ista:iend,jsta:jend) endif ENDIF - IF (IGET(612).GT.0) THEN + IF (IGET(603).GT.0) THEN DO J=JSTA,JEND - DO I=1,IM + DO I=ISTA,IEND grid1(i,j)=su_aod550(i,j) ENDDO ENDDO if(grib=="grib2" )then cfld=cfld+1 - fld_info(cfld)%ifld=IAVBLFLD(IGET(612)) - datapd(1:im,1:jend-jsta+1,cfld)=GRID1(1:im,jsta:jend) + fld_info(cfld)%ifld=IAVBLFLD(IGET(603)) + datapd(1:iend-ista+1,1:jend-jsta+1,cfld)=GRID1(ista:iend,jsta:jend) endif ENDIF - IF (IGET(613).GT.0) THEN + IF (IGET(604).GT.0) THEN DO J=JSTA,JEND - DO I=1,IM + DO I=ISTA,IEND grid1(i,j)=oc_aod550(i,j) ENDDO ENDDO if(grib=="grib2" )then cfld=cfld+1 - fld_info(cfld)%ifld=IAVBLFLD(IGET(613)) - datapd(1:im,1:jend-jsta+1,cfld)=GRID1(1:im,jsta:jend) + fld_info(cfld)%ifld=IAVBLFLD(IGET(604)) + datapd(1:iend-ista+1,1:jend-jsta+1,cfld)=GRID1(ista:iend,jsta:jend) endif ENDIF - IF (IGET(614).GT.0) THEN + IF (IGET(605).GT.0) THEN DO J=JSTA,JEND - DO I=1,IM + DO I=ISTA,IEND grid1(i,j)=bc_aod550(i,j) ENDDO ENDDO if(grib=="grib2" )then cfld=cfld+1 - fld_info(cfld)%ifld=IAVBLFLD(IGET(614)) - datapd(1:im,1:jend-jsta+1,cfld)=GRID1(1:im,jsta:jend) + fld_info(cfld)%ifld=IAVBLFLD(IGET(605)) + datapd(1:iend-ista+1,1:jend-jsta+1,cfld)=GRID1(ista:iend,jsta:jend) endif ENDIF END IF !rdaod + !AQM AEROSOL OPTICAL DEPTH AT 550 NM + IF (aqf_on) THEN + IF (IGET(712).GT.0) THEN + DO J=JSTA,JEND + DO I=ISTA,IEND + grid1(i,j)=aqm_aod550(i,j) + ENDDO + ENDDO + if(grib=="grib2" )then + cfld=cfld+1 + fld_info(cfld)%ifld=IAVBLFLD(IGET(712)) + datapd(1:iend-ista+1,1:jend-jsta+1,cfld)=GRID1(ista:iend,jsta:jend) + endif + ENDIF + END IF !aqf_on + !2D AEROSOL OPTICAL DEPTH AT 550 NM IF (IGET(715)>0) THEN DO J=JSTA,JEND - DO I=1,IM + DO I=ISTA,IEND grid1(i,j)=taod5502d(i,j) ENDDO ENDDO if(grib=="grib2" )then cfld=cfld+1 fld_info(cfld)%ifld=IAVBLFLD(IGET(715)) - datapd(1:im,1:jend-jsta+1,cfld)=GRID1(1:im,jsta:jend) + datapd(1:iend-ista+1,1:jend-jsta+1,cfld)=GRID1(ista:iend,jsta:jend) endif ENDIF !AEROSOL ASYMMETRY FACTOR IF (IGET(716)>0) THEN DO J=JSTA,JEND - DO I=1,IM + DO I=ISTA,IEND grid1(i,j)=aerasy2d(i,j) ENDDO ENDDO if(grib=="grib2" )then cfld=cfld+1 fld_info(cfld)%ifld=IAVBLFLD(IGET(716)) - datapd(1:im,1:jend-jsta+1,cfld)=GRID1(1:im,jsta:jend) + datapd(1:iend-ista+1,1:jend-jsta+1,cfld)=GRID1(ista:iend,jsta:jend) endif ENDIF !AEROSOL SINGLE-SCATTERING ALBEDO IF (IGET(717)>0) THEN DO J=JSTA,JEND - DO I=1,IM + DO I=ISTA,IEND grid1(i,j)=aerssa2d(i,j) ENDDO ENDDO if(grib=="grib2" )then cfld=cfld+1 fld_info(cfld)%ifld=IAVBLFLD(IGET(717)) - datapd(1:im,1:jend-jsta+1,cfld)=GRID1(1:im,jsta:jend) + datapd(1:iend-ista+1,1:jend-jsta+1,cfld)=GRID1(ista:iend,jsta:jend) endif ENDIF ! - if (gocart_on) then + if (gocart_on .or. nasa_on) then ! !*** BLOCK 4. GOCART AEROSOL FIELDS ! @@ -4534,10 +4615,6 @@ SUBROUTINE CLDRAD DO I = 690, 698 ! TOTAL AND SPECIATED AEROSOL IF ( IGET(I)>0 ) LAERSMASS = .TRUE. ENDDO - IF ( rdaod ) THEN - LAEROPT = .FALSE. - LAERSMASS = .FALSE. - END IF IF ( LAEROPT ) THEN PRINT *, 'COMPUTE AEROSOL OPTICAL PROPERTIES' @@ -4566,14 +4643,29 @@ SUBROUTINE CLDRAD ALLOCATE ( ssarhd_SU(KRHLEV,nbin_su,NBDSW)) ALLOCATE ( ssarhd_BC(KRHLEV,nbin_bc,NBDSW)) ALLOCATE ( ssarhd_OC(KRHLEV,nbin_oc,NBDSW)) + + ALLOCATE ( extrhd_NI(KRHLEV,nbin_no3,NBDSW)) + ALLOCATE ( scarhd_NI(KRHLEV,nbin_no3,NBDSW)) + ALLOCATE ( asyrhd_NI(KRHLEV,nbin_no3,NBDSW)) + ALLOCATE ( ssarhd_NI(KRHLEV,nbin_no3,NBDSW)) + + if (gocart_on) then + nAero=KCM1 + else if (nasa_on) then + nAero=KCM2 + endif PRINT *, 'aft AEROSOL allocate, nbin_du=',nbin_du, & 'nbin_ss=',nbin_ss,'nbin_su=',nbin_su,'nbin_bc=', & - 'nbin_oc=',nbin_oc,'nAero=',nAero + 'nbin_oc=',nbin_oc,'nbin_ni=',nbin_no3,'nAero=',nAero !!! READ AEROSOL LUTS DO i = 1, nAero CLOSE(UNIT=NOAER) + if (gocart_on) then aerosol_file='optics_luts_'//AerosolName(i)//'.dat' + else if ( nasa_on ) then + aerosol_file='optics_luts_'//AerosolName(i)//'_nasa.dat' + endif open(unit=NOAER, file=aerosol_file, status='OLD', iostat=ios) IF (IOS > 0) THEN print *,' ERROR! Non-zero iostat for rd_LUTS ', aerosol_file @@ -4586,6 +4678,9 @@ SUBROUTINE CLDRAD IF (AerosolName(i) == 'SUSO') nbin = nbin_su IF (AerosolName(i) == 'SOOT') nbin = nbin_bc IF (AerosolName(i) == 'WASO') nbin = nbin_oc + if (nasa_on) then + IF (AerosolName(i) == 'NITR') nbin = nbin_no3 + endif DO J = 1, NBIN read(NOAER,'(2x,a4,1x,i1,1x,a3)')AerName_rd,ib, AerOpt IF (AerName_rd /= AerosolName(i)) STOP @@ -4676,8 +4771,26 @@ SUBROUTINE CLDRAD do ib = 1, NBDSW read(NOAER,'(8f10.5)') (ssarhd_oc(ii,j,ib), ii=1,KRHLEV) enddo - ENDIF + if ( nasa_on ) then + IF (AerosolName(i) == 'NITR') THEN + do ib = 1, NBDSW + read(NOAER,'(8f10.5)') (extrhd_ni(ii,j,ib), ii=1,KRHLEV) + enddo + read(NOAER,'(2x,a4)') AerName_rd + do ib = 1, NBDSW + read(NOAER,'(8f10.5)') (scarhd_ni(ii,j,ib), ii=1,KRHLEV) + enddo + read(NOAER,'(2x,a4)') AerName_rd + do ib = 1, NBDSW + read(NOAER,'(8f10.5)') (asyrhd_ni(ii,j,ib), ii=1,KRHLEV) + enddo + read(NOAER,'(2x,a4)') AerName_rd + do ib = 1, NBDSW + read(NOAER,'(8f10.5)') (ssarhd_ni(ii,j,ib), ii=1,KRHLEV) + enddo + ENDIF + endif !nasa_on ENDDO ! j-loop for nbin ENDDO ! i-loop for nAero @@ -4686,22 +4799,23 @@ SUBROUTINE CLDRAD CLOSE(UNIT=NOAER) !!! COMPUTES RELATIVE HUMIDITY AND RDRH -! allocate (RH3D(im,jsta:jend,lm)) - allocate (rdrh(im,jsta:jend,lm)) - allocate (ihh(im,jsta:jend,lm)) +! allocate (RH3D(ista:iend,jsta:jend,lm)) + allocate (rdrh(ista:iend,jsta:jend,lm)) + allocate (ihh(ista:iend,jsta:jend,lm)) DO L=1,LM ! L FROM TOA TO SFC LL=LM-L+1 ! LL FROM SFC TO TOA !$omp parallel do private(i,j) DO J=JSTA,JEND - DO I=1,IM + DO I=ISTA,IEND P1D(I,J) = PMID(I,J,LL) T1D(I,J) = T(I,J,LL) Q1D(I,J) = Q(I,J,LL) ENDDO ENDDO + !CALL CALRH(P1D,T1D,Q1D,EGRID4) CALL CALRH(P1D,T1D,Q1D,EGRID4) DO J=JSTA,JEND - DO I=1,IM + DO I=ISTA,IEND ! RH3D(I,J,LL) = EGRID4(I,J) RH3D = EGRID4(I,J) ! DETERMINE RDRH (wgt for IH2) and IHH (index for IH2) @@ -4789,7 +4903,7 @@ SUBROUTINE CLDRAD SCA=0.0 ASY=0.0 DO J=JSTA,JEND - DO I=1,IM + DO I=ISTA,IEND DO L=1,LM DO N=1, NBIN_DU EXT01 = EXTRHD_DU(1,N,IB) @@ -4816,7 +4930,7 @@ SUBROUTINE CLDRAD SCA=0.0 ASY=0.0 DO J=JSTA,JEND - DO I=1,IM + DO I=ISTA,IEND DO L=1,LM ih1 = ihh(I,J,L) ih2 = ih1 + 1 @@ -4850,7 +4964,7 @@ SUBROUTINE CLDRAD SCA=0.0 ASY=0.0 DO J=JSTA,JEND - DO I=1,IM + DO I=ISTA,IEND DO L=1,LM ih1 = ihh (I,J,L) ih2 = ih1 + 1 @@ -4883,7 +4997,7 @@ SUBROUTINE CLDRAD SCA=0.0 ASY=0.0 DO J=JSTA,JEND - DO I=1,IM + DO I=ISTA,IEND DO L=1,LM ih1 = ihh (I,J,L) ih2 = ih1 + 1 @@ -4915,7 +5029,7 @@ SUBROUTINE CLDRAD SCA=0.0 ASY=0.0 DO J=JSTA,JEND - DO I=1,IM + DO I=ISTA,IEND DO L=1,LM ih1 = ihh (I,J,L) ih2 = ih1 + 1 @@ -4940,12 +5054,48 @@ SUBROUTINE CLDRAD CALL CALPW(SCA_OC,20) CALL CALPW(ASY_OC,21) + if ( nasa_on ) then +! COMPUTE ORGANIC CARBON AOD + AOD_NI=SPVAL + SCA_NI=SPVAL + ASY_NI=SPVAL + EXT=0.0 + SCA=0.0 + ASY=0.0 + DO J=JSTA,JEND + DO I=ISTA,IEND + DO L=1,LM + ih1 = ihh (I,J,L) + ih2 = ih1 + 1 + DO N = 1, NBIN_NO3 + EXT01 = EXTRHD_NI(IH1,N,IB) & + & + RDRH(I,J,L)*(EXTRHD_NI(IH2,N,IB)-EXTRHD_NI(IH1,N,IB)) + SCA01 = SCARHD_NI(IH1,N,IB) & + & + RDRH(I,J,L)*(SCARHD_NI(IH2,N,IB)-SCARHD_NI(IH1,N,IB)) + ASY01 = ASYRHD_NI(IH1,N,IB) & + & + RDRH(I,J,L)*(ASYRHD_NI(IH2,N,IB)-ASYRHD_NI(IH1,N,IB)) + EXT(I,J,L) = EXT(I,J,L)+1e-9*NO3(I,J,L,N)*EXT01 + SCA(I,J,L) = SCA(I,J,L)+1e-9*NO3(I,J,L,N)*SCA01 + ASY(I,J,L) = ASY(I,J,L)+1e-9*NO3(I,J,L,N)*SCA01*ASY01 + ENDDO ! N-loop + EXT(I,J,L) = EXT(I,J,L) * 1000. + SCA(I,J,L) = SCA(I,J,L) * 1000. + ASY(I,J,L) = ASY(I,J,L) * 1000. + ENDDO ! L-loop + ENDDO ! I-loop + ENDDO ! J-loop + CALL CALPW(AOD_NI,17) + CALL CALPW(SCA_NI,20) + CALL CALPW(ASY_NI,21) + endif + + ! COMPUTE TOTAL AOD AOD=SPVAL SCA=SPVAL ASY=SPVAL DO J=JSTA,JEND - DO I=1,IM + DO I=ISTA,IEND AOD_DU(I,J) = MAX (AOD_DU(I,J), 0.0) AOD_BC(I,J) = MAX (AOD_BC(I,J), 0.0) AOD_OC(I,J) = MAX (AOD_OC(I,J), 0.0) @@ -4964,12 +5114,28 @@ SUBROUTINE CLDRAD ASY_SU(I,J) = MAX (ASY_SU(I,J), 0.0) ASY_SS(I,J) = MAX (ASY_SS(I,J), 0.0) + if ( nasa_on ) then + AOD_NI(I,J) = MAX (AOD_NI(I,J), 0.0) + SCA_NI(I,J) = MAX (SCA_NI(I,J), 0.0) + ASY_NI(I,J) = MAX (ASY_NI(I,J), 0.0) + + AOD(I,J) = AOD_DU(I,J) + AOD_BC(I,J) + AOD_OC(I,J) + & + & AOD_SU(I,J) + AOD_SS(I,J) + AOD_NI(I,J) + SCA2D(I,J) = SCA_DU(I,J) + SCA_BC(I,J) + SCA_OC(I,J) + & + & SCA_SU(I,J) + SCA_SS(I,J) + SCA_NI(I,J) + ASY2D(I,J) = ASY_DU(I,J) + ASY_BC(I,J) + ASY_OC(I,J) + & + & ASY_SU(I,J) + ASY_SS(I,J) + ASY_NI(I,J) + endif + + if (gocart_on ) then AOD(I,J) = AOD_DU(I,J) + AOD_BC(I,J) + AOD_OC(I,J) + & & AOD_SU(I,J) + AOD_SS(I,J) SCA2D(I,J) = SCA_DU(I,J) + SCA_BC(I,J) + SCA_OC(I,J) + & & SCA_SU(I,J) + SCA_SS(I,J) ASY2D(I,J) = ASY_DU(I,J) + ASY_BC(I,J) + ASY_OC(I,J) + & & ASY_SU(I,J) + ASY_SS(I,J) + endif + ENDDO ! I-loop ENDDO ! J-loop ! FILL UP AOD_440 AND AOD_860, IF ANGSTROM EXP IS REQUESTED @@ -4977,7 +5143,7 @@ SUBROUTINE CLDRAD IF (IB == 2 ) THEN !! AOD AT 440 NM !$omp parallel do private(i,j) DO J=JSTA,JEND - DO I=1,IM + DO I=ISTA,IEND AOD_440(I,J) = AOD(I,J) ENDDO ! I-loop ENDDO ! J-loop @@ -4986,7 +5152,7 @@ SUBROUTINE CLDRAD IF (IB == 5 ) THEN !! AOD AT 860 NM !$omp parallel do private(i,j) DO J=JSTA,JEND - DO I=1,IM + DO I=ISTA,IEND AOD_860(I,J) = AOD(I,J) ENDDO ! I-loop ENDDO ! J-loop @@ -4997,7 +5163,7 @@ SUBROUTINE CLDRAD IF ( IGET(INDX) > 0) THEN !$omp parallel do private(i,j) do j=jsta,jend - do i=1,im + do i=ista,iend GRID1(i,j) = AOD(i,j) enddo enddo @@ -5005,7 +5171,7 @@ SUBROUTINE CLDRAD if(grib=="grib2" )then cfld=cfld+1 fld_info(cfld)%ifld=IAVBLFLD(IGET(INDX)) - datapd(1:im,1:jend-jsta+1,cfld)=GRID1(1:im,jsta:jend) + datapd(1:iend-ista+1,1:jend-jsta+1,cfld)=GRID1(ista:iend,jsta:jend) endif ENDIF ! @@ -5017,7 +5183,7 @@ SUBROUTINE CLDRAD GRID1 = spval !$omp parallel do private(i,j) DO J=JSTA,JEND - DO I=1,IM + DO I=ISTA,IEND IF(SCA2D(I,J) 0.0 ) THEN ASY2D(I,J) = ASY2D(I,J) / SCA2D(I,J) @@ -5032,7 +5198,7 @@ SUBROUTINE CLDRAD if(grib=="grib2" )then cfld=cfld+1 fld_info(cfld)%ifld=IAVBLFLD(IGET(649)) - datapd(1:im,1:jend-jsta+1,cfld)=GRID1(1:im,jsta:jend) + datapd(1:iend-ista+1,1:jend-jsta+1,cfld)=GRID1(ista:iend,jsta:jend) endif ENDIF ! IGET(649) @@ -5041,7 +5207,7 @@ SUBROUTINE CLDRAD GRID1 = SPVAL !$omp parallel do private(i,j) DO J=JSTA,JEND - DO I=1,IM + DO I=ISTA,IEND IF(AOD(I,J) 0.0 ) THEN SCA2D(I,J) = SCA2D(I,J) / AOD(I,J) @@ -5056,7 +5222,7 @@ SUBROUTINE CLDRAD if(grib=="grib2" )then cfld=cfld+1 fld_info(cfld)%ifld=IAVBLFLD(IGET(648)) - datapd(1:im,1:jend-jsta+1,cfld)=GRID1(1:im,jsta:jend) + datapd(1:iend-ista+1,1:jend-jsta+1,cfld)=GRID1(ista:iend,jsta:jend) endif ENDIF ! IGET(648) ! print *,'aft compute sca340' @@ -5072,7 +5238,7 @@ SUBROUTINE CLDRAD IF ( IGET(650) > 0 ) THEN !$omp parallel do private(i,j) DO J=JSTA,JEND - DO I=1,IM + DO I=ISTA,IEND GRID1(I,J)=SCA2D(I,J) ENDDO ENDDO @@ -5080,7 +5246,7 @@ SUBROUTINE CLDRAD if(grib=="grib2" )then cfld=cfld+1 fld_info(cfld)%ifld=IAVBLFLD(IGET(650)) - datapd(1:im,1:jend-jsta+1,cfld)=GRID1(1:im,jsta:jend) + datapd(1:iend-ista+1,1:jend-jsta+1,cfld)=GRID1(ista:iend,jsta:jend) endif ENDIF ! LOOP THROUGH EACH SPECIES @@ -5091,19 +5257,20 @@ SUBROUTINE CLDRAD IF ( IGET(JJ) > 0) THEN ! EXT AOD !$omp parallel do private(i,j) DO J=JSTA,JEND - DO I=1,IM + DO I=ISTA,IEND IF ( II == 1 ) GRID1(I,J) = AOD_DU(I,J) IF ( II == 2 ) GRID1(I,J) = AOD_SS(I,J) IF ( II == 3 ) GRID1(I,J) = AOD_SU(I,J) IF ( II == 4 ) GRID1(I,J) = AOD_OC(I,J) IF ( II == 5 ) GRID1(I,J) = AOD_BC(I,J) + IF ( II == 6 ) GRID1(I,J) = AOD_NI(I,J) ENDDO ENDDO CALL BOUND(GRID1,D00,H99999) if(grib=="grib2" )then cfld=cfld+1 fld_info(cfld)%ifld=IAVBLFLD(IGET(JJ)) - datapd(1:im,1:jend-jsta+1,cfld)=GRID1(1:im,jsta:jend) + datapd(1:iend-ista+1,1:jend-jsta+1,cfld)=GRID1(ista:iend,jsta:jend) endif ENDIF @@ -5112,19 +5279,20 @@ SUBROUTINE CLDRAD IF ( IGET(JJ) > 0) THEN ! SCA AOD !$omp parallel do private(i,j) DO J=JSTA,JEND - DO I=1,IM + DO I=ISTA,IEND IF ( II == 1 ) GRID1(I,J) = SCA_DU(I,J) IF ( II == 2 ) GRID1(I,J) = SCA_SS(I,J) IF ( II == 3 ) GRID1(I,J) = SCA_SU(I,J) IF ( II == 4 ) GRID1(I,J) = SCA_OC(I,J) IF ( II == 5 ) GRID1(I,J) = SCA_BC(I,J) + IF ( II == 6 ) GRID1(I,J) = SCA_NI(I,J) ENDDO ENDDO CALL BOUND(GRID1,D00,H99999) if(grib=="grib2" )then cfld=cfld+1 fld_info(cfld)%ifld=IAVBLFLD(IGET(JJ)) - datapd(1:im,1:jend-jsta+1,cfld)=GRID1(1:im,jsta:jend) + datapd(1:iend-ista+1,1:jend-jsta+1,cfld)=GRID1(ista:iend,jsta:jend) endif ENDIF @@ -5139,9 +5307,9 @@ SUBROUTINE CLDRAD ANGST=SPVAL ! ANG2 = LOG ( 0.860 / 0.440 ) ANG2 = LOG ( 860. / 440. ) -!$omp parallel do private(i,j) +!$omp parallel do private(i,j,ang1) DO J=JSTA,JEND - DO I=1,IM + DO I=ISTA,IEND IF (AOD_860(I,J) > 0.) THEN ANG1 = LOG( AOD_440(I,J)/AOD_860(I,J) ) ANGST(I,J) = ANG1 / ANG2 @@ -5149,120 +5317,55 @@ SUBROUTINE CLDRAD GRID1(I,J)=ANGST(I,J) ENDDO ENDDO - if(debugprint)print *,'output angstrom exp,angst=',maxval(angst(1:im,jsta:jend)), & - minval(angst(1:im,jsta:jend)) + if(debugprint)print *,'output angstrom exp,angst=',maxval(angst(ista:iend,jsta:jend)), & + minval(angst(ista:iend,jsta:jend)) CALL BOUND(GRID1,D00,H99999) if(grib=="grib2" )then cfld=cfld+1 fld_info(cfld)%ifld=IAVBLFLD(IGET(656)) - datapd(1:im,1:jend-jsta+1,cfld)=GRID1(1:im,jsta:jend) + datapd(1:iend-ista+1,1:jend-jsta+1,cfld)=GRID1(ista:iend,jsta:jend) endif ENDIF ! ANGSTROM EXPONENT ENDIF ! END OF LAEROPT IF-BLOCK -!! Multiply by 1.E-6 to revert these fields back - IF (IGET(659)>0) THEN - GRID1=SPVAL -!$omp parallel do private(i,j) - DO J = JSTA,JEND - DO I = 1,IM - IF(DUEM(I,J,1)0) THEN - GRID1=SPVAL +!! ADD AEROSOL SURFACE PM25 DUST MASS CONCENTRATION (ug/m3) + IF (IGET(686)>0 ) THEN !$omp parallel do private(i,j) DO J = JSTA,JEND - DO I = 1,IM - IF(DUSD(I,J,1)0) THEN -! DO J = JSTA,JEND -! DO I = 1,IM -! GRID1(I,J) = DUDP(I,J,1)*1.E-6 -! DO K=2,NBIN_DU -! GRID1(I,J) = GRID1(I,J)+ DUDP(I,J,K)*1.E-6 -! END DO -! END DO -! END DO -! ID(1:25) = 0 -! ID(02)=141 -! if(grib=='grib1') then -! CALL GRIBIT(IGET(661),LVLS(1,IGET(661)),GRID1,IM,JM) -! elseif(grib=='grib2') then -! cfld=cfld+1 -! fld_info(cfld)%ifld=IAVBLFLD(IGET(661)) -! datapd(1:im,1:jend-jsta+1,cfld)=GRID1(1:im,jsta:jend) -! endif -! ENDIF -!! ADD AEROSOL SURFACE PM25 DUST MASS CONCENTRATION (ug/m3) - IF (IGET(686)>0 ) THEN + IF (IGET(685)>0 ) THEN !$omp parallel do private(i,j) DO J = JSTA,JEND - DO I = 1,IM - !GRID1(I,J) = DUSMASS(I,J) * 1.E-6 - GRID1(I,J) = DUSTPM(I,J) !ug/m3 + DO I = ISTA,IEND + GRID1(I,J) = DUSTPM10(I,J) !ug/m3 END DO END DO if(grib=='grib2') then cfld=cfld+1 - fld_info(cfld)%ifld=IAVBLFLD(IGET(686)) - datapd(1:im,1:jend-jsta+1,cfld)=GRID1(1:im,jsta:jend) + fld_info(cfld)%ifld=IAVBLFLD(IGET(685)) + datapd(1:iend-ista+1,1:jend-jsta+1,cfld)=GRID1(ista:iend,jsta:jend) endif ENDIF - -!! ADD DUST WET DEPOSITION FLUXES (kg/m2/sec) -! IF (IGET(662)>0) THEN -! DO J = JSTA,JEND -! DO I = 1,IM -! GRID1(I,J) = DUWT(I,J,1)*1.E-6 -! DO K=2,NBIN_DU -! GRID1(I,J) = GRID1(I,J)+ DUWT(I,J,K)*1.E-6 -! END DO -! END DO -! END DO -! ID(1:25) = 0 -! ID(02)=141 -! if(grib=='grib1') then -! CALL GRIBIT(IGET(662),LVLS(1,IGET(662)),GRID1,IM,JM) -! elseif(grib=='grib2') then -! cfld=cfld+1 -! fld_info(cfld)%ifld=IAVBLFLD(IGET(662)) -! datapd(1:im,1:jend-jsta+1,cfld)=GRID1(1:im,jsta:jend) -! endif -! ENDIF + !! ADD AEROSOL SURFACE PM25 SEA SALT MASS CONCENTRATION (ug/m3) IF (IGET(684)>0 ) THEN !$omp parallel do private(i,j) DO J = JSTA,JEND - DO I = 1,IM + DO I = ISTA,IEND !GRID1(I,J) = DUSMASS(I,J) * 1.E-6 GRID1(I,J) = SSPM(I,J) !ug/m3 END DO @@ -5270,14 +5373,14 @@ SUBROUTINE CLDRAD if(grib=='grib2') then cfld=cfld+1 fld_info(cfld)%ifld=IAVBLFLD(IGET(684)) - datapd(1:im,1:jend-jsta+1,cfld)=GRID1(1:im,jsta:jend) + datapd(1:iend-ista+1,1:jend-jsta+1,cfld)=GRID1(ista:iend,jsta:jend) endif ENDIF !! ADD AEROSOL SURFACE PM10 MASS CONCENTRATION (ug/m3) IF (IGET(619)>0 ) THEN !$omp parallel do private(i,j) DO J = JSTA,JEND - DO I = 1,IM + DO I = ISTA,IEND !GRID1(I,J) = DUSMASS(I,J) * 1.E-6 GRID1(I,J) = DUSMASS(I,J) !ug/m3 END DO @@ -5285,7 +5388,7 @@ SUBROUTINE CLDRAD if(grib=='grib2') then cfld=cfld+1 fld_info(cfld)%ifld=IAVBLFLD(IGET(619)) - datapd(1:im,1:jend-jsta+1,cfld)=GRID1(1:im,jsta:jend) + datapd(1:iend-ista+1,1:jend-jsta+1,cfld)=GRID1(ista:iend,jsta:jend) endif ENDIF @@ -5293,7 +5396,7 @@ SUBROUTINE CLDRAD IF (IGET(620)>0 ) THEN !$omp parallel do private(i,j) DO J = JSTA,JEND - DO I = 1,IM + DO I = ISTA,IEND !GRID1(I,J) = DUSMASS25(I,J) * 1.E-6 GRID1(I,J) = DUSMASS25(I,J) ! ug/m3 END DO @@ -5301,7 +5404,7 @@ SUBROUTINE CLDRAD if(grib=='grib2') then cfld=cfld+1 fld_info(cfld)%ifld=IAVBLFLD(IGET(620)) - datapd(1:im,1:jend-jsta+1,cfld)=GRID1(1:im,jsta:jend) + datapd(1:iend-ista+1,1:jend-jsta+1,cfld)=GRID1(ista:iend,jsta:jend) endif ENDIF !! ADD TOTAL AEROSOL PM10 COLUMN DENSITY (kg/m2) ! @@ -5309,7 +5412,7 @@ SUBROUTINE CLDRAD GRID1=SPVAL !$omp parallel do private(i,j) DO J = JSTA,JEND - DO I = 1,IM + DO I = ISTA,IEND !GRID1(I,J) = DUCMASS(I,J) * 1.E-6 IF(DUCMASS(I,J)0 ) THEN + GRID1=SPVAL +!$omp parallel do private(i,j) + DO J = JSTA,JEND + DO I = ISTA,IEND + IF(NO3CB(I,J)0 ) THEN + GRID1=SPVAL +!$omp parallel do private(i,j) + DO J = JSTA,JEND + DO I = ISTA,IEND + IF(NH4CB(I,J)0) call wrt_aero_diag(674,nbin_oc,ocwt) IF (IGET(682)>0) call wrt_aero_diag(682,nbin_oc,ocsv) ! print *,'aft wrt disg ocwt' - +!! wrt MIE AOD at 550nm + IF (IGET(699).GT.0) call wrt_aero_diag(699,1,maod) + print *,'aft wrt disg maod' + endif !gocart_on + !! wrt SU diag field ! IF (IGET(675)>0) call wrt_aero_diag(675,nbin_su,suem) ! IF (IGET(676)>0) call wrt_aero_diag(676,nbin_su,susd) ! IF (IGET(677)>0) call wrt_aero_diag(677,nbin_su,sudp) ! IF (IGET(678)>0) call wrt_aero_diag(678,nbin_su,suwt) ! print *,'aft wrt disg suwt' - endif ! if gocart_on + endif ! if gocart_on or nasa_on ! CB for WAFS if(IGET(473)>0 .or. IGET(474)>0 .or. IGET(475)>0) then ! CB cover is derived from CPRAT (same as #272 in SURFCE.f) EGRID1 = SPVAL DO J=JSTA,JEND - DO I=1,IM + DO I=ISTA,IEND if(AVGCPRATE(I,J) /= SPVAL) then EGRID1(I,J) = AVGCPRATE(I,J)*(1000./DTQ2) end if @@ -5478,7 +5622,7 @@ SUBROUTINE CLDRAD EGRID3 = SPVAL IF(MODELNAME == 'GFS' .OR. MODELNAME == 'FV3R') then DO J=JSTA,JEND - DO I=1,IM + DO I=ISTA,IEND EGRID2(I,J) = PBOT(I,J) EGRID3(I,J) = PTOP(I,J) END DO @@ -5487,7 +5631,7 @@ SUBROUTINE CLDRAD ! Derive CB base and top, relationship among CB fields DO J=JSTA,JEND - DO I=1,IM + DO I=ISTA,IEND if(EGRID1(I,J)<= 0. .or. EGRID2(I,J)<= 0. .or. EGRID3(I,J) <= 0.) then EGRID1(I,J) = SPVAL EGRID2(I,J) = SPVAL @@ -5496,7 +5640,7 @@ SUBROUTINE CLDRAD END DO END DO DO J=JSTA,JEND - DO I=1,IM + DO I=ISTA,IEND IF(EGRID2(I,J) == SPVAL .or. EGRID3(I,J) == SPVAL) cycle if(EGRID3(I,J) < 400.*100. .and. & (EGRID2(I,J)-EGRID3(I,J)) > 300.*100) then @@ -5545,17 +5689,18 @@ SUBROUTINE CLDRAD IF(IGET(473) > 0) THEN !$omp parallel do private(i,j) DO J=JSTA,JEND - DO I=1,IM + DO I=ISTA,IEND GRID1(I,J) = EGRID1(I,J) ENDDO ENDDO cfld=cfld+1 fld_info(cfld)%ifld=IAVBLFLD(IGET(473)) -!$omp parallel do private(i,j,jj) +!$omp parallel do private(i,j,ii,jj) do j=1,jend-jsta+1 jj = jsta+j-1 - do i=1,im - datapd(i,j,cfld) = GRID1(i,jj) + do i=1,iend-ista+1 + ii=ista+i-1 + datapd(i,j,cfld) = GRID1(ii,jj) enddo enddo END IF @@ -5563,17 +5708,18 @@ SUBROUTINE CLDRAD IF(IGET(474) > 0) THEN !$omp parallel do private(i,j) DO J=JSTA,JEND - DO I=1,IM + DO I=ISTA,IEND GRID1(I,J) = EGRID2(I,J) ENDDO ENDDO cfld=cfld+1 fld_info(cfld)%ifld=IAVBLFLD(IGET(474)) -!$omp parallel do private(i,j,jj) +!$omp parallel do private(i,j,ii,jj) do j=1,jend-jsta+1 jj = jsta+j-1 - do i=1,im - datapd(i,j,cfld) = GRID1(i,jj) + do i=1,iend-ista+1 + ii=ista+i-1 + datapd(i,j,cfld) = GRID1(ii,jj) enddo enddo END IF @@ -5581,17 +5727,18 @@ SUBROUTINE CLDRAD IF(IGET(475) > 0) THEN !$omp parallel do private(i,j) DO J=JSTA,JEND - DO I=1,IM + DO I=ISTA,IEND GRID1(I,J) = EGRID3(I,J) ENDDO ENDDO cfld=cfld+1 fld_info(cfld)%ifld=IAVBLFLD(IGET(475)) -!$omp parallel do private(i,j,jj) +!$omp parallel do private(i,j,ii,jj) do j=1,jend-jsta+1 jj = jsta+j-1 - do i=1,im - datapd(i,j,cfld) = GRID1(i,jj) + do i=1,iend-ista+1 + ii=ista+i-1 + datapd(i,j,cfld) = GRID1(ii,jj) enddo enddo END IF @@ -5604,12 +5751,12 @@ SUBROUTINE CLDRAD END subroutine cb_cover(cbcov) -! Calculate CB coverage by using fuzzy logic -! Evaluate membership of val in a fuzzy set fuzzy. -! Assume f is in x-log scale - use ctlblk_mod, only: SPVAL,JSTA,JEND,IM +!> Calculate CB coverage by using fuzzy logic +!> Evaluate membership of val in a fuzzy set fuzzy. +!> Assume f is in x-log scale + use ctlblk_mod, only: SPVAL,JSTA,JEND,IM,ISTA,IEND implicit none - real, intent(inout) :: cbcov(IM,JSTA:JEND) + real, intent(inout) :: cbcov(ISTA:IEND,JSTA:JEND) ! x - convective precipitation [1.0e6*kg/(m2s)] ! y - cloud cover fraction, between 0 and 1 @@ -5629,7 +5776,7 @@ subroutine cb_cover(cbcov) x = log(x) do j = jsta, jend - do i = 1, IM + do i = ista, iend if(cbcov(i,j) == SPVAL) cycle if(cbcov(i,j) <= 0.) then cbcov(i,j) = 0. @@ -5660,20 +5807,20 @@ end subroutine cb_cover subroutine wrt_aero_diag(igetfld,nbin,data) use ctlblk_mod, only: jsta, jend, SPVAL, im, jm, grib, & - cfld, datapd, fld_info, jsta_2l, jend_2u + cfld, datapd, fld_info, jsta_2l, jend_2u,ista_2l,iend_2u,ista,iend use rqstfld_mod, only: IGET, ID, LVLS, IAVBLFLD implicit none ! integer igetfld,nbin - real, dimension(1:im,jsta_2l:jend_2u,nbin) :: data + real, dimension(ista_2l:iend_2u,jsta_2l:jend_2u,nbin) :: data ! integer i,j,k REAL,dimension(im,jm) :: GRID1 ! GRID1=SPVAL -!$omp parallel do private(i,j) +!$omp parallel do private(i,j,k) DO J = JSTA,JEND - DO I = 1,IM + DO I = ISTA,IEND if(data(I,J,1)/include $) + else() + target_link_libraries(${LIBNAME} PUBLIC IFI) + target_link_libraries(${LIBNAME} PUBLIC tdrp) + endif() +endif() + +if(BUILD_WITH_GTG) + target_link_libraries(${LIBNAME} PUBLIC + ip::ip_4) +endif() + if(OpenMP_Fortran_FOUND) target_link_libraries(${LIBNAME} PUBLIC OpenMP::OpenMP_Fortran) endif() @@ -214,16 +229,21 @@ if(BUILD_POSTEXEC) add_executable(${EXENAME} ${EXE_SRC}) target_link_libraries(${EXENAME} PRIVATE ${LIBNAME} - w3nco::w3nco_4 nemsio::nemsio + w3emc::w3emc_4 sp::sp_4 sfcio::sfcio sigio::sigio) + set_target_properties(${EXENAME} PROPERTIES LINKER_LANGUAGE Fortran) + if(IFI_FOUND) + target_link_libraries(${EXENAME} PRIVATE IFI) + target_link_libraries(${EXENAME} PRIVATE tdrp) + endif() if(wrf_io_FOUND) target_link_libraries(${EXENAME} PRIVATE wrf_io::wrf_io) endif() - install(TARGETS ${EXENAME} RUNTIME DESTINATION bin) + install(TARGETS ${EXENAME} RUNTIME DESTINATION ${exec_dir}) endif() install(DIRECTORY ${module_dir} DESTINATION ${CMAKE_INSTALL_PREFIX}) @@ -231,32 +251,6 @@ install(DIRECTORY ${module_dir} DESTINATION ${CMAKE_INSTALL_PREFIX}) install( TARGETS ${LIBNAME} EXPORT ${PROJECT_NAME}Exports - RUNTIME DESTINATION bin + RUNTIME DESTINATION ${exec_dir} LIBRARY DESTINATION lib ARCHIVE DESTINATION lib) - -### Package config -include(CMakePackageConfigHelpers) -set(CONFIG_INSTALL_DESTINATION lib/cmake/${PROJECT_NAME}) - -export(EXPORT ${PROJECT_NAME}Exports - NAMESPACE ${PROJECT_NAME}:: - FILE ${PROJECT_NAME}-targets.cmake) - -configure_package_config_file( - ${CMAKE_SOURCE_DIR}/cmake/PackageConfig.cmake.in ${CMAKE_BINARY_DIR}/${PROJECT_NAME}-config.cmake - INSTALL_DESTINATION ${CONFIG_INSTALL_DESTINATION}) -install(FILES ${CMAKE_BINARY_DIR}/${PROJECT_NAME}-config.cmake - DESTINATION ${CONFIG_INSTALL_DESTINATION}) - -write_basic_package_version_file( - ${CMAKE_BINARY_DIR}/${PROJECT_NAME}-config-version.cmake - VERSION ${PROJECT_VERSION} - COMPATIBILITY AnyNewerVersion) -install(FILES ${CMAKE_BINARY_DIR}/${PROJECT_NAME}-config-version.cmake - DESTINATION ${CONFIG_INSTALL_DESTINATION}) - -install(EXPORT ${PROJECT_NAME}Exports - NAMESPACE ${PROJECT_NAME}:: - FILE ${PROJECT_NAME}-targets.cmake - DESTINATION ${CONFIG_INSTALL_DESTINATION}) diff --git a/sorc/ncep_post.fd/COLLECT.f b/sorc/ncep_post.fd/COLLECT.f index bcc8fab57..fc1a56f8f 100644 --- a/sorc/ncep_post.fd/COLLECT.f +++ b/sorc/ncep_post.fd/COLLECT.f @@ -1,35 +1,17 @@ !> @file -! -!> SUBPROGRAM: COLLECT GATHERS FROM ALL MPI TASKS -!! PRGRMMR: TUCCILLO ORG: IBM -!! -!! ABSTRACT: -!! GATHER "A" FROM ALL MPI TASKS ONTO TASK 0 -!! -!! PROGRAM HISTORY LOG: -!! 00-01-06 TUCCILLO - ORIGINAL -!! -!! USAGE: CALL COLLECT(A) -!! INPUT ARGUMENT LIST: -!! A - ARRAY BEING GATHERED -!! -!! OUTPUT ARGUMENT LIST: -!! A - GATHERED ARRAY - ONLY VALID ON TASK 0 -!! -!! OUTPUT FILES: -!! STDOUT - RUN TIME STANDARD OUT. -!! -!! SUBPROGRAMS CALLED: -!! MPI_GATHERV -!! UTILITIES: -!! NONE -!! LIBRARY: -!! COMMON - CTLBLK.comm -!! -!! ATTRIBUTES: -!! LANGUAGE: FORTRAN -!! MACHINE : IBM RS/6000 SP -!! +!> @brief Subroutine that collect gathers from all MPI tasks. +!> +!> @param[in] A Array being gathered. +!> @param[out] A gathered array - only valid on task 0. +!> +!> Gather "A" from all MPI tasks onto task 0. +!> +!> ### Program history log: +!> Date | Programmer | Comments +!> -----|------------|--------- +!> 2000-01-06 | Jim Tuccillo | Initial +!> +!> @author Jim Tuccillo IBM @date 2000-01-06 SUBROUTINE COLLECT (A, B) diff --git a/sorc/ncep_post.fd/COLLECT_LOC.f b/sorc/ncep_post.fd/COLLECT_LOC.f index 589cee1ba..bcd005242 100644 --- a/sorc/ncep_post.fd/COLLECT_LOC.f +++ b/sorc/ncep_post.fd/COLLECT_LOC.f @@ -1,54 +1,140 @@ !> @file -! -!> SUBPROGRAM: COLLECT GATHERS FROM ALL MPI TASKS -!! PRGRMMR: TUCCILLO ORG: IBM -!! -!! ABSTRACT: -!! GATHER "A" FROM ALL MPI TASKS ONTO TASK 0 -!! -!! PROGRAM HISTORY LOG: -!! 00-01-06 TUCCILLO - ORIGINAL -!! -!! USAGE: CALL COLLECT(A) -!! INPUT ARGUMENT LIST: -!! A - ARRAY BEING GATHERED -!! -!! OUTPUT ARGUMENT LIST: -!! A - GATHERED ARRAY - ONLY VALID ON TASK 0 -!! -!! OUTPUT FILES: -!! STDOUT - RUN TIME STANDARD OUT. -!! -!! SUBPROGRAMS CALLED: -!! MPI_GATHERV -!! UTILITIES: -!! NONE -!! LIBRARY: -!! COMMON - CTLBLK.comm -!! -!! ATTRIBUTES: -!! LANGUAGE: FORTRAN -!! MACHINE : IBM RS/6000 SP -!! +!> @brief Subroutine that collect gathers from all MPI tasks. +!> +!> @param[in] A Array being gathered. +!> @param[out] A gathered array - only valid on task 0. +!> +!> Gather "A" from all MPI tasks onto task 0. +!> +!> ### Program history log: +!> Date | Programmer | Comments +!> -----------|---------------------|---------- +!> 2000-01-06 | Jim Tuccillo | Initial +!> 2021-06-01 | George Vandenberghe | 2D Decomposition +!> +!> @author Jim Tuccillo IBM @date 2000-01-06 SUBROUTINE COLLECT_LOC ( A, B ) use CTLBLK_mod, only: num_procs, jsta, icnt, idsp, mpi_comm_comp, im,& - jsta_2l, jend_2u, jm, me + jsta_2l, jend_2u, jm, me, & + buff,ista_2l,iend_2u,jexa,iexa,jsxa,isxa,ista,iend !- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - implicit none ! include 'mpif.h' - real, dimension(im,jsta_2l:jend_2u), intent(in) :: a + integer ii,jj,isum + real, dimension(ista_2l:iend_2u,jsta_2l:jend_2u), intent(in) :: a real, dimension(im,jm), intent(out) :: b - integer ierr + integer ierr,n + real, allocatable :: rbufs(:) + allocate(buff(im*jm)) + jj=( jexa(me)-jsxa(me)+1) * (iexa(me)-isxa(me)+1) + allocate( rbufs(( jexa(me)-jsxa(me)+1) * (iexa(me)-isxa(me)+1)) ) ! if ( num_procs <= 1 ) then b = a else - call mpi_gatherv(a(1,jsta),icnt(me),MPI_REAL, & - & b,icnt,idsp,MPI_REAL,0,MPI_COMM_COMP, ierr ) - - end if + +!GWV reshape the receive subdomain + + isum=1 + do jj=jsxa(me),jexa(me) + do ii=isxa(me),iexa(me) + if(isum .gt. im*jm .or. ii .gt. im .or. ii .lt. 1 .or. jj .gt. jm .or. jj.lt. 1) & + write(0,901)' BOUNDS2 FAIL in reshape ',isum,ii,jj,im*jm,im,im*jm + rbufs(isum)=a(ii,jj) + isum=isum+1 + end do + end do + +!GWV end reshape + + call mpi_gatherv(rbufs,icnt(me),MPI_REAL, buff,icnt,idsp,MPI_REAL,0,MPI_COMM_WORLD, ierr ) + +!GWV reshape the gathered array + + if(me .eq. 0) then + isum=1 + do n=0,num_procs-1 + do jj=jsxa(n),jexa(n) + do ii=isxa(n),iexa(n) + if(isum .gt. im*jm .or. ii .gt. im .or. ii .lt. 1 .or. jj .gt. jm .or. jj .lt. 1) & + write(0,901)' BOUNDS FAIL in reshape ',isum,ii,jj,im*jm,im,im*jm + b(ii,jj)=buff(isum) + isum=isum+1 + end do + end do + end do + end if + + endif ! num_procs <= 1 + + 901 format(a30,10i10) + + deallocate(buff) + deallocate(rbufs) end +! +!----------------------------------------------------------------------- +! + SUBROUTINE COLLECT_ALL ( A, B ) + + use CTLBLK_mod, only: num_procs, jsta, icnt, idsp, mpi_comm_comp, im,& + jsta_2l, jend_2u, jm, me, & + buff,ista_2l,iend_2u,jexa,iexa,jsxa,isxa,ista,iend,jend +!- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + implicit none +! + include 'mpif.h' + integer ii,jj,isum + real, dimension(ista:iend,jsta:jend), intent(in) :: a + real, dimension(im,jm), intent(out) :: b + integer ierr,n + real, allocatable :: rbufs(:) + allocate(buff(im*jm)) + jj=( jexa(me)-jsxa(me)+1) * (iexa(me)-isxa(me)+1) + allocate( rbufs(( jexa(me)-jsxa(me)+1) * (iexa(me)-isxa(me)+1)) ) +! + if ( num_procs <= 1 ) then + b = a + else + +!GWV reshape the receive subdomain + isum=1 + do jj=jsxa(me),jexa(me) + do ii=isxa(me),iexa(me) + if(isum .gt. im*jm .or. ii .gt. im .or. ii .lt. 1 .or. jj .gt. jm .or. jj.lt. 1) & + write(0,901)' BOUNDS2 FAIL in reshape',isum,ii,jj,im*jm,im,im*jm + rbufs(isum)=a(ii,jj) + isum=isum+1 + end do + end do +!GWV end reshape + + call mpi_allgatherv(rbufs,icnt(me),MPI_REAL,buff,icnt,idsp,MPI_REAL, mpi_comm_comp, ierr ) + call mpi_barrier(mpi_comm_comp,ierr) + +!GWV reshape the gathered array and collect in all procs + isum=1 + do n=0,num_procs-1 + do jj=jsxa(n),jexa(n) + do ii=isxa(n),iexa(n) + if(isum .gt. im*jm .or. ii .gt. im .or. ii .lt. 1 .or. jj .gt. jm .or. jj .lt. 1) & + write(0,901)' BOUNDS FAIL in reshape',isum,ii,jj,im*jm,im,im*jm + b(ii,jj)=buff(isum) + isum=isum+1 + end do + end do + end do + + endif ! num_procs <= 1 + + 901 format(a30,10i10) + + deallocate(buff) + deallocate(rbufs) + + end + diff --git a/sorc/ncep_post.fd/CTLBLK.f b/sorc/ncep_post.fd/CTLBLK.f index df647f1dd..4b5983ad9 100644 --- a/sorc/ncep_post.fd/CTLBLK.f +++ b/sorc/ncep_post.fd/CTLBLK.f @@ -9,6 +9,10 @@ module CTLBLK_mod ! 2011-02 Jun Wang - ADD variables for grib2 ! 2011-12-14 SARAH LU - ADD AER FILENAME ! 2011-12-23 SARAH LU - ADD NBIN FOR DU, SS, OC, BC, SU +! 2021-09-30 JESSE MENG- 2D DECOMPOSITION +! 2022-09-22 Li(Kate) Zhang- Add option for NASA GOCART as "nasa_on", add NBIN for NO3 and NH4 +! 2022-11-08 Kai Wang - Replace aqfcmaq_on with aqf_on +! 2023-01-24 Sam Trahan - IFI flight levels, runtime of IFI, and record of the bucket time !----------------------------------------------------------------------- ! implicit none @@ -41,7 +45,7 @@ module CTLBLK_mod real*8 :: gdsdegr real,allocatable :: datapd(:,:,:) ! - logical :: gocart_on, d3d_on, hyb_sigp, rdaod, aqfcmaq_on + logical :: gocart_on, nasa_on, d3d_on, hyb_sigp, rdaod, aqf_on logical :: SIGMA,RUN,FIRST,RESTRT logical :: global logical :: SMFLAG @@ -54,11 +58,25 @@ module CTLBLK_mod SPL(komax),ALSL(komax),PREC_ACC_DT,PT_TBL,PREC_ACC_DT1,spval ! real :: SPVAL=9.9e10 ! Moorthi ! - integer :: NUM_PROCS,ME,JSTA,JEND,JSTA_M,JEND_M, & - JSTA_M2,JEND_M2,IUP,IDN,ICNT(0:1023),IDSP(0:1023), & - JSTA_2L, JEND_2U,JVEND_2u,NUM_SERVERS, MPI_COMM_INTER, & + integer :: NUM_PROCS,ME,JSTA,JEND,ISTA,IEND, & + JSTA_M,JEND_M, JSTA_M2,JEND_M2, & + ISTA_M,IEND_M,ISTA_M2,IEND_M2, & + IUP,IDN,ICNT(0:1023),IDSP(0:1023), ICNT2(0:1023),IDSP2(0:1023), & + JSTA_2L, JEND_2U,JVEND_2U, & + ISTA_2L, IEND_2U,IVEND_2U, & + NUM_SERVERS, MPI_COMM_INTER, & MPI_COMM_COMP, IM,JM,LM,NSOIL,LP1,LM1,IM_JM, & + ileft,iright, & + ileftb,irightb , & + ibsize,ibsum, & lsm,lsmp1 !comm mpi + integer, allocatable :: icoords(:,:),ibcoords(:,:) + real , allocatable :: rcoords(:,:),rbcoords(:,:) + real, allocatable :: bufs(:),buff(:) + integer , allocatable :: isxa(:),iexa(:),jsxa(:),jexa(:) + integer numx + integer, allocatable :: ibufs(:) + real, allocatable :: rbufs(:) ! real :: ARDSW, ARDLW, ASRFC, TSRFC,TRDLW,TRDSW,TCLOD,THEAT, & TPREC,TMAXMIN,TD3D !comm rad @@ -68,7 +86,8 @@ module CTLBLK_mod real(kind=8) :: ETAFLD2_tim=0.,ETA2P_tim=0.,SURFCE2_tim=0., & CLDRAD_tim=0.,MISCLN_tim=0.,FIXED_tim=0., & MDL2SIGMA_tim=0.,READxml_tim=0.,MDL2AGL_tim=0., & - MDL2STD_tim=0.,MDL2THANDPV_tim=0.,CALRAD_WCLOUD_tim=0.!comm tim_info + MDL2STD_tim=0.,MDL2THANDPV_tim=0., & + CALRAD_WCLOUD_tim=0.,RUN_IFI_TIM=0. !comm tim_info ! real(kind=8) :: time_output=0., time_e2out=0. !comm jjt ! @@ -88,6 +107,8 @@ module CTLBLK_mod integer, parameter :: nbin_oc = 2 ! organic carbon integer, parameter :: nbin_bc = 2 ! black carbon integer, parameter :: nbin_su = 1 ! sulfate + integer, parameter :: nbin_no3 = 3 ! nitrate + integer, parameter :: nbin_nh4 = 1 ! NH4 integer, parameter :: nbin_sm = 1 ! smoke ! ! SET FD LEVEL HEIGHTS IN GEOPOTENTAL METERS. @@ -99,5 +120,12 @@ module CTLBLK_mod DATA SIGBND / 0.985,0.955,0.925,0.895,0.865,0.835 / DATA PETABND / 15.,45.,75.,105.,135.,165./ ! +! Precipitation bucket time + real :: ITPREC=-1 +! +! Flight levels in feet, provided by libIFI + integer :: ifi_nflight = 0 + real, allocatable :: ifi_flight_levels(:) ! units are FEET +! !----------------------------------------------------------------------- end module CTLBLK_mod diff --git a/sorc/ncep_post.fd/DEALLOCATE.f b/sorc/ncep_post.fd/DEALLOCATE.f index fd3eef1be..75301bfc5 100644 --- a/sorc/ncep_post.fd/DEALLOCATE.f +++ b/sorc/ncep_post.fd/DEALLOCATE.f @@ -1,35 +1,17 @@ !> @file -! -!> SUBPROGRAM: MPI_FIRST SET UP MESSGAE PASSING INFO -!! PRGRMMR: TUCCILLO ORG: IBM -!! -!! ABSTRACT: -!! SETS UP MESSAGE PASSING INFO -!! -!! PROGRAM HISTORY LOG: -!! 00-01-06 TUCCILLO - ORIGINAL -!! 01-10-25 H CHUANG - MODIFIED TO PROCESS HYBRID MODEL OUTPUT -!! 02-06-19 MIKE BALDWIN - WRF VERSION -!! -!! USAGE: CALL MPI_FIRST -!! INPUT ARGUMENT LIST: -!! -!! OUTPUT ARGUMENT LIST: -!! -!! OUTPUT FILES: -!! STDOUT - RUN TIME STANDARD OUT. -!! -!! SUBPROGRAMS CALLED: -!! PARA_RANGE -!! UTILITIES: -!! NONE -!! LIBRARY: -!! COMMON - CTLBLK.comm -!! -!! ATTRIBUTES: -!! LANGUAGE: FORTRAN -!! MACHINE : IBM RS/6000 SP -!! +!> @brief MPI_FIRST set up message passing info. +!> +!> This routine sets up message passing info. +!> +!> ### Program history log: +!> Date | Programmer | Comments +!> -----|------------|--------- +!> 2000-01-06 | Jim Tuccillo | Initial +!> 2001-10-25 | H Chuang | Modified to process hybrid model output +!> 2002-06-19 | Mike Baldwin | WRF version +!> 2022-11-08 | Kai Wang | Replace aqfcmaq_on with aqf_on +!> +!> @author Jim Tuccillo IBM @date 2000-01-06 SUBROUTINE DE_ALLOCATE ! @@ -72,6 +54,7 @@ SUBROUTINE DE_ALLOCATE ! deallocate(rainw(im,jsta_2l:jend_2u,lm)) deallocate(q2) deallocate(omga) + deallocate(dpres) deallocate(T_ADJ) deallocate(ttnd) deallocate(rswtt) @@ -156,6 +139,9 @@ SUBROUTINE DE_ALLOCATE deallocate(stc) deallocate(sh2o) deallocate(SLDPTH) + deallocate(CAPE) + deallocate(CIN) + deallocate(IFI_APCP) deallocate(RTDPTH) deallocate(SLLEVEL) ! @@ -206,6 +192,7 @@ SUBROUTINE DE_ALLOCATE deallocate(tsnow) deallocate(qvg) deallocate(qv2m) + deallocate(qvl1) deallocate(rswin) deallocate(swddni) deallocate(swddif) @@ -214,10 +201,11 @@ SUBROUTINE DE_ALLOCATE deallocate(swddnic) deallocate(swddifc) deallocate(swupt) - deallocate(int_smoke) deallocate(mean_frp) - deallocate(int_aod) + deallocate(ebb) + deallocate(hwp) deallocate(smoke) + deallocate(fv3dust) deallocate(taod5502d) deallocate(aerasy2d) deallocate(aerssa2d) @@ -237,6 +225,7 @@ SUBROUTINE DE_ALLOCATE deallocate(z500) deallocate(z700) deallocate(teql) + deallocate(ieql) deallocate(cfracl) deallocate(cfracm) deallocate(cfrach) @@ -371,12 +360,22 @@ SUBROUTINE DE_ALLOCATE deallocate(avgetrans) deallocate(avgesnow) deallocate(avgpotevp) + deallocate(aod550) deallocate(ti) deallocate(du_aod550) deallocate(ss_aod550) deallocate(su_aod550) deallocate(bc_aod550) deallocate(oc_aod550) + deallocate(landfrac) + deallocate(paha) + deallocate(pahi) + deallocate(tecan) + deallocate(tetran) + deallocate(tedir) + deallocate(twa) + deallocate(fdnsst) + deallocate(pwat) ! GSD deallocate(rainc_bucket) deallocate(rainc_bucket1) @@ -388,6 +387,9 @@ SUBROUTINE DE_ALLOCATE deallocate(snow_bucket1) deallocate(graup_bucket) deallocate(graup_bucket1) + deallocate(frzrn_bucket) + deallocate(snow_acm) + deallocate(snow_bkt) deallocate(qrmax) deallocate(tmax) deallocate(snownc) @@ -469,7 +471,7 @@ SUBROUTINE DE_ALLOCATE deallocate(gtg) ! - if (gocart_on) then + if (gocart_on .or. nasa_on) then ! Deallocate GOCART fields ! vrbls4d deallocate(dust) @@ -477,6 +479,10 @@ SUBROUTINE DE_ALLOCATE deallocate(soot) deallocate(waso) deallocate(suso) + if (nasa_on) then + deallocate(no3) + deallocate(nh4) + endif deallocate(pp25) deallocate(pp10) ! vrbls3d @@ -508,7 +514,6 @@ SUBROUTINE DE_ALLOCATE deallocate(ssdp) deallocate(sswt) deallocate(sssv) - deallocate(dpres) deallocate(rhomid) ! vrbls2d deallocate(dusmass) @@ -538,10 +543,16 @@ SUBROUTINE DE_ALLOCATE deallocate(pp25cb) deallocate(pp10cb) deallocate(sscb) + if (nasa_on) then + deallocate(no3cb) + deallocate(nh4cb) + endif deallocate(dustallcb) deallocate(ssallcb) deallocate(dustpm) + deallocate(dustpm10) deallocate(sspm) + deallocate(maod) endif ! ! HWRF RRTMG output @@ -554,9 +565,10 @@ SUBROUTINE DE_ALLOCATE deallocate(uuavg) ! AQF - if (aqfcmaq_on) then - deallocate(ozcon) - deallocate(pmtf) + if (aqf_on) then + deallocate(avgozcon) + deallocate(avgpmtf) + deallocate(aqm_aod550) endif end diff --git a/sorc/ncep_post.fd/DEWPOINT.f b/sorc/ncep_post.fd/DEWPOINT.f index 676f81438..1b962871d 100644 --- a/sorc/ncep_post.fd/DEWPOINT.f +++ b/sorc/ncep_post.fd/DEWPOINT.f @@ -1,52 +1,49 @@ !> @file -! -!> SUBPROGRAM: DEWPOINT COMPUTES DEWPOINTS FROM VAPOR PRESSURE -!! PRGMMR: J TUCCILLO ORG: W/NP2 DATE: 90-05-19 -!! -!! ABSTRACT: COMPUTES THE DEWPOINTS FOR THE N VALUES -!! OF VAPOR PRESSURE IN ARRAY VP. -!! THE FORMULA: -!! -!! VP = 0.611 * (X**A) * EXP( (A+B)*(1-X) ) -!! -!! IS USED TO GET DEWPOINT TEMPERATURE T, WHERE -!! -!! X = T3/T, T3=TRIPLE PT TEMPERATURE, -!! VP=VAPOR PRESSURE IN CBS, 0.611=VP AT T3, -!! A=(SPEC. HT. OF WATER-CSUBP OF VAPOR)/GAS CONST OF VAPOR -!! AND -!! B=LATENT HEAT AT T3/(GAS CONST OF VAPOR TIMES T3). -!! -!! ON THE FIRST CALL, A TABLE TDP IS CONSTRUCTED GIVING -!! DEWPOINT AS A FUNCTION OF VAPOR PRESSURE. -!! -!! VALUES OF VP LESS THAN THE FIRST TABLE ENTRY -!! (RVP1 IN THE CODE) WILL BE GIVEN DEWPOINTS FOR -!! THAT BEGINNING VALUE. SIMILARLY , VP VALUES THAT -!! EXCEED THE MAXIMUM TABLE VALUE (RVP2 IN THE CODE) -!! WILL BE ASSIGNED DEWPOINTS FOR THAT MAXIMUM VALUE. -!! -!! THE VALUES 0.02 AND 8.0 FOR RVP1 AND RVP2 YIELD -!! DEWPOINTS OF 233.6K AND 314.7K,RESPECTIVELY. -!! -!! PROGRAM HISTORY LOG: -!! - 90-05-19 J TUCCILLO -!! - 93-05-12 R TREADON - EXPANDED TABLE SIZE AND RESET -!! RANGE OF PRESSURES COVERED BY -!! TABLE. -!! - 98-06-12 T BLACK - CONVERSION FROM 1-D TO 2-D -!! - 00-01-04 JIM TUCCILLO - MPI VERSION -!! -!! USAGE: CALL DEWPOINT( VP, TD) -!! INPUT ARGUMENT LIST: -!! VP - ARRAY OF N VAPOR PRESSURES(CENTIBARS) -!! -!! OUTPUT ARGUMENT LIST: -!! TD - DEWPOINT IN DEGREES ABSOLUTE -!! +!> @brief Subroutine that computes dewpoints from vapor pressure. +!> +!> This routine is to computes the dewpoints for the N values +!> of vapor pressure in array VP. +!> The forumla: +!> +!> VP = 0.611 * (X**A) * EXP( (A+B)*(1-X) ) +!> +!> is used to get dewpoint temperature T, where +!> +!> X = T3/T, T3=Triple PT temperature, +!> VP=Vapor pressure in CBS, 0.611=VP at T3, +!> A=(Spec. HT. of WATER-CSUBP of vapor)/gas const of vapor +!> and +!> B=Latent heat at T3/(gas const of vapor times T3). +!> +!> on the first call, a table TDP is constructed giving +!> dewpoint as a function of vapor pressure. +!> +!> Values of VP less than the first table entry +!> (RVP1 in the code) will be given dewpoints for +!> that beginning valus. Similarly, VP vaules that +!> exceed the maximum table value (RVP2 in the code) +!> will be assigned dewpoints for that maximum value. +!> +!> The values 0.02 and 8.0 for RVP1 and RVP2 yield +!> dewpoints of 233.6K and 314.7K,respectively. +!> +!> @param[in] VP Array of N vapor pressures(centibars). +!> @param[out] TD Dewpoint in degrees absolute. +!> +!> ### Program history log: +!> Date | Programmer | Comments +!> -----|------------|--------- +!> 1990-05-19 | Jim Tuccillo | Initial +!> 1993-05-12 | R Treadon | Expanded table size and reset range of pressures covered by table. +!> 1998-06-12 | T Black | Conversion from 1-D to 2-D +!> 2000-01-04 | Jim Tuccillo | MPI Version +!> 2021-07-26 | W Meng | Restrict computation from undefined grids +!> 2021-10-31 | J Meng | 2D Decomposition +!> +!> @author Jim Tuccillo W/NP2 @date 1990-05-19 SUBROUTINE DEWPOINT( VP, TD) - use ctlblk_mod, only: jsta, jend, im + use ctlblk_mod, only: jsta, jend, im, spval, ista, iend !- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - implicit none ! @@ -54,8 +51,8 @@ SUBROUTINE DEWPOINT( VP, TD) integer,PARAMETER :: NT=2000 !...TRANSLATED BY FPP 3.00Z36 11/09/90 14:48:53 !...SWITCHES: OPTON=I47,OPTOFF=VAE0 - real,intent(out) :: TD(IM,jsta:jend) - real,intent(in) :: VP(IM,jsta:jend) + real,intent(out) :: TD(ista:iend,jsta:jend) + real,intent(in) :: VP(ista:iend,jsta:jend) real TDP(NT) !jw integer NN,I,J,JNT @@ -131,11 +128,15 @@ SUBROUTINE DEWPOINT( VP, TD) ! !$omp parallel do private(i,j,w1,w2,jnt) DO J=JSTA,JEND - DO I=1,IM + DO I=ISTA,IEND + IF(VP(I,J) @file -! -!> SUBPROGRAM: EXCH EXCHANGE ONE HALO ROW -!! PRGRMMR: TUCCILLO ORG: IBM -!! -!! ABSTRACT: -!! EXCHANGE ONE HALO ROW -!! -!! PROGRAM HISTORY LOG: -!! 00-01-06 TUCCILLO - ORIGINAL -!! -!! USAGE: CALL EXCH(A) -!! INPUT ARGUMENT LIST: -!! A - ARRAY TO HAVE HALOS EXCHANGED -!! -!! OUTPUT ARGUMENT LIST: -!! A - ARRAY WITH HALOS EXCHANGED -!! -!! OUTPUT FILES: -!! STDOUT - RUN TIME STANDARD OUT. -!! -!! SUBPROGRAMS CALLED: -!! MPI_SENDRECV -!! UTILITIES: -!! NONE -!! LIBRARY: -!! COMMON - CTLBLK.comm -!! -!@PROCESS NOCHECK -! -!--- The 1st line is an inlined compiler directive that turns off -qcheck -! during compilation, even if it's specified as a compiler option in the -! makefile (Tuccillo, personal communication; Ferrier, Feb '02). -! +!> @brief Subroutines that exchange one halo row. +!> +!> These routines are to exchange one halo row. +!> +!> @param[in] A Array to have halos exchanged. +!> @param[out] A Array with halos exchanged. +!> +!> ### Program history log: +!> Date | Programmer | Comments +!> -----------|---------------------|---------- +!> 2000-01-06 | Jim Tuccillo | Initial +!> 2021-06-01 | George Vandenberghe | 2D decomposition +!> +!> @note The 1st line is an inlined compiler directive that turns off -qcheck +!> during compilation, even if it's specified as a compiler option in the +!> makefile (Tuccillo, personal communication; Ferrier, Feb '02). +!> +!> @author Jim Tuccillo IBM @date 2000-01-06 SUBROUTINE EXCH(A) use ctlblk_mod, only: num_procs, jend, iup, jsta, idn, mpi_comm_comp, im,& - jsta_2l, jend_2u + icoords,ibcoords,bufs,ibufs,me,numx, & + jsta_2l, jend_2u,ileft,iright,ista_2l,iend_2u,ista,iend,jm,modelname !- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - implicit none ! include 'mpif.h' ! - real,intent(inout) :: a ( im,jsta_2l:jend_2u ) + real,intent(inout) :: a ( ista_2l:iend_2u,jsta_2l:jend_2u ) + real, allocatable :: coll(:), colr(:) + integer, allocatable :: icoll(:), icolr(:) integer status(MPI_STATUS_SIZE) - integer ierr, jstam1, jendp1 + integer ierr, jstam1, jendp1,j + integer size,ubound,lbound + integer msglenl, msglenr + integer i,ii,jj, ibl,ibu,jbl,jbu,icc,jcc + integer iwest,ieast + integer ifirst + + logical, parameter :: checkcoords = .false. + + data ifirst/0/ + allocate(coll(jm)) + allocate(colr(jm)) + allocate(icolr(jm)) + allocate(icoll(jm)) + ibl=max(ista-1,1) + ibu=min(im,iend+1) + jbu=min(jm,jend+1) + jbl=max(jsta-1,1) ! + ! write(0,*) 'mype=',me,'num_procs=',num_procs,'im=',im,'jsta_2l=', & ! jsta_2l,'jend_2u=',jend_2u,'jend=',jend,'iup=',iup,'jsta=', & ! jsta,'idn=',idn if ( num_procs <= 1 ) return ! +! for global model apply cyclic boundary condition + + IF(MODELNAME == 'GFS') then + if(ifirst .le. 0 .and. me .eq. 0) print *,' CYCLIC BC APPLIED' + if(ileft .eq. MPI_PROC_NULL) iwest=1 ! get eastern bc from western boundary of full domain + if(iright .eq. MPI_PROC_NULL) ieast=1 ! get western bc from eastern boundary of full domain + if(ileft .eq. MPI_PROC_NULL) ileft=me+(numx-1) + if(iright .eq. MPI_PROC_NULL) iright=(me-numx) +1 + endif + jstam1 = max(jsta_2l,jsta-1) ! Moorthi - call mpi_sendrecv(a(1,jend),im,MPI_REAL,iup,1, & - & a(1,jstam1),im,MPI_REAL,idn,1, & + +! send last row to iup's first row+ and receive first row- from idn's last row + + call mpi_sendrecv(a(ista,jend),iend-ista+1,MPI_REAL,iup,1, & + & a(ista,jstam1),iend-ista+1,MPI_REAL,idn,1, & & MPI_COMM_COMP,status,ierr) -! print *,'mype=',me,'in EXCH, after first mpi_sendrecv' + if ( ierr /= 0 ) then - print *, ' problem with first sendrecv in exch, ierr = ',ierr - stop + print *, ' problem with first sendrecv in exch, ierr = ',ierr + stop 6661 + endif + + if (checkcoords) then + if(ifirst .le. 0) then !IFIRST ONLY + call mpi_sendrecv(ibcoords(ista,jend),iend-ista+1,MPI_INTEGER,iup,1, & + & ibcoords(ista,jstam1),iend-ista+1,MPI_INTEGER,idn,1, & + & MPI_COMM_COMP,status,ierr) + if ( ierr /= 0 ) then + print *, ' problem with second sendrecv in exch, ierr = ',ierr + stop 7661 + endif + do i=ista,iend + ii=ibcoords(i,jstam1)/10000 + jj=ibcoords(i,jstam1)-(ii*10000) + if(ii .ne. i .or. jj .ne. jstam1 ) print *,' GWVX JEXCH CHECK FAIL ',ii,jj,ibcoords(i,jstam1),i + end do + endif !IFIRST + endif !checkcoords + +! build the I columns to send and receive + + msglenl=jend-jsta+1 + msglenr=jend-jsta+1 + if(iright .lt. 0) msglenr=1 + if(ileft .lt. 0) msglenl=1 + + do j=jsta,jend + coll(j)=a(ista,j) + end do + + call mpi_barrier(mpi_comm_comp,ierr) + +! send first col to ileft last col+ and receive last col+ from ileft first col + + call mpi_sendrecv(coll(jsta),msglenl ,MPI_REAL,ileft,1, & + & colr(jsta),msglenr ,MPI_REAL,iright,1, & + & MPI_COMM_COMP,status,ierr) + + if ( ierr /= 0 ) then + print *, ' problem with third sendrecv in exch, ierr = ',ierr + stop 6662 + endif + + if(ifirst .le. 0) then ! IFIRST ONLY + call mpi_sendrecv(icoll(jsta),msglenl ,MPI_INTEGER,ileft,1, & + & icolr(jsta),msglenr ,MPI_INTEGER,iright,1, & + & MPI_COMM_COMP,status,ierr) + if ( ierr /= 0 ) then + print *, ' problem with fourth sendrecv in exch, ierr = ',ierr + stop 7662 + endif + endif !IFIRST + + if(iright .ge. 0) then + do j=jsta,jend + a(iend+1,j)=colr(j) + if(checkcoords) then + if(ifirst .le. 0) then !IFIRST ONLY + ibcoords(iend+1,j)=icolr(j) + ii=ibcoords(iend+1,j)/10000 + jj=ibcoords( iend+1,j)-(ii*10000) + if( j .ne. jj .or. ii .ne. iend+1 .and. ii .ne. im .and. ii .ne. 1) & + write(0,921) j,iend+1,ii,jj,ibcoords(iend+1,j),'IEXCH COORD FAIL j,iend+1,ii,jj,ibcoord ' + endif !IFIRST + endif !checkcoords + end do + endif ! for iright + + 921 format(5i10,a50) + +! print *,'mype=',me,'in EXCH, after first mpi_sendrecv' + + if ( ierr /= 0 ) then + print *, ' problem with fifth sendrecv in exch, ierr = ',ierr + stop 6663 end if jendp1 = min(jend+1,jend_2u) ! Moorthi - call mpi_sendrecv(a(1,jsta),im,MPI_REAL,idn,1, & - & a(1,jendp1),im,MPI_REAL,iup,1, & + +!GWV. change from full im row exchange to iend-ista+1 subrow exchange, + + do j=jsta,jend + colr(j)=a(iend,j) + end do + +! send first row to idown's last row+ and receive last row+ from iup's first row + + call mpi_sendrecv(a(ista,jsta),iend-ista+1,MPI_REAL,idn,1, & + & a(ista,jendp1),iend-ista+1,MPI_REAL,iup,1, & + & MPI_COMM_COMP,status,ierr) + if ( ierr /= 0 ) then + print *, ' problem with sixth sendrecv in exch, ierr = ',ierr + stop 6664 + endif + + if (checkcoords) then + if (ifirst .le. 0) then + call mpi_sendrecv(ibcoords(ista,jsta),iend-ista+1,MPI_INTEGER,idn,1, & + & ibcoords(ista,jendp1),iend-ista+1,MPI_INTEGER,iup,1, & & MPI_COMM_COMP,status,ierr) -! print *,'mype=',me,'in EXCH, after second mpi_sendrecv' + if ( ierr /= 0 ) then + print *, ' problem with seventh sendrecv in exch, ierr = ',ierr + stop 7664 + endif + endif ! IFIRST + endif ! checkcoords + +! send last col to iright first col- and receive first col- from ileft last col + + call mpi_sendrecv(colr(jsta),msglenr ,MPI_REAL,iright,1 , & + & coll(jsta),msglenl ,MPI_REAL,ileft ,1, & + & MPI_COMM_COMP,status,ierr) + + if ( ierr /= 0 ) then + print *, ' problem with eighth sendrecv in exch, ierr = ',ierr + stop 6665 + endif + + if (ifirst .le. 0) then + call mpi_sendrecv(icolr(jsta),msglenr ,MPI_integer,iright,1 , & + & icoll(jsta),msglenl ,MPI_integer,ileft ,1, & + & MPI_COMM_COMP,status,ierr) + if ( ierr /= 0 ) then + print *, ' problem with ninth sendrecv in exch, ierr = ',ierr + stop 7665 + endif + endif !IFIRST + + if(ileft .ge. 0) then + do j=jsta,jend + a(ista-1,j)=coll(j) + if(checkcoords) then + if(ifirst .le. 0) then + ibcoords(ista-1,j)=icoll(j) + ii=ibcoords(ista-1,j)/10000 + jj=ibcoords( ista-1,j)-(ii*10000) + if( j .ne. jj .or. ii .ne. ista-1 .and. ii .ne. im .and. ii .ne. 1) & + write(0,921) j,ista-1,ii,jj,ibcoords(ista-1,j),'EXCH COORD FAIL j,ista-1,ii,jj,ibcoord ' + endif !IFIRST + endif !checkcoords + end do + endif + +! interior check + + if(checkcoords) then + if(ifirst .le. 0) then + do j=jsta,jend + do i=ista,iend + ii=ibcoords(i,j)/10000 + jj=ibcoords( i,j)-(ii*10000) + if(ii .ne. i .or. jj .ne. j) write(0,151) 'INFAILED IJ ',i,j,ibcoords(i,j),ibl,jbl,ibu,jbu + end do + end do + endif !IFIRST + endif !checkcoords + +!! corner points. After the exchanges above, corner points are replicated in +! neighbour halos so we can get them from the neighbors rather than +! calculating more corner neighbor numbers +! A(ista-1,jsta-1) is in the ileft a(iend,jsta-1) location +! A(ista-1,jend+1) is in the ileft a(iend,jend+1) location +! A(iend+1,jsta-1) is in the iright a(ista,jsta-1) location +! A(iend+1,jend+1) is in the iright a(ista,jend+1) location +!GWVx ibl=max(ista-1,1) +!GWVx ibu=min(im,iend+1) + + ibl=max(ista-1,1) + ibu=min(im,iend+1) + if(modelname == 'GFS') then + ibl=max(ista-1,0) + ibu=min(im+1,iend+1) + endif + + jbu=min(jm,jend+1) + jbl=max(jsta-1,1) + + call mpi_sendrecv(a(iend,jbl ),1, MPI_REAL,iright,1 , & + & a(ibl ,jbl ),1, MPI_REAL,ileft ,1, & + & MPI_COMM_COMP,status,ierr) + if ( ierr /= 0 ) then + print *, ' problem with tenth sendrecv in exch, ierr = ',ierr + stop 6771 + endif + + call mpi_sendrecv(a(iend,jbu ),1, MPI_REAL,iright,1 , & + & a(ibl ,jbu ),1, MPI_REAL,ileft ,1, & + & MPI_COMM_COMP,status,ierr) + + if ( ierr /= 0 ) then + print *, ' problem with eleventh sendrecv in exch, ierr = ',ierr + stop 6772 + endif + + call mpi_sendrecv(a(ista,jbl ),1, MPI_REAL,ileft ,1, & + & a(ibu ,jbl ),1, MPI_REAL,iright,1, & + & MPI_COMM_COMP,status,ierr) + + if ( ierr /= 0 ) then + print *, ' problem with twelft sendrecv in exch, ierr = ',ierr + stop 6773 + endif + + call mpi_sendrecv(a(ista,jbu ),1, MPI_REAL,ileft ,1 , & + & a(ibu ,jbu ),1, MPI_REAL,iright,1, & + & MPI_COMM_COMP,status,ierr) + + if ( ierr /= 0 ) then + print *, ' problem with thirteenth sendrecv in exch, ierr = ',ierr + stop 6774 + endif + + 139 format(a20,5(i10,i6,i6,'<>')) + + if(checkcoords) then + if(ifirst .le. 0) then + call mpi_sendrecv(ibcoords(iend,jbl ),1 ,MPI_INTEGER,iright,1 , & + & ibcoords(ibl ,jbl ),1 ,MPI_INTEGER,ileft ,1, & + & MPI_COMM_COMP,status,ierr) + + call mpi_sendrecv(ibcoords(iend,jbu ),1 ,MPI_INTEGER,iright,1, & + & ibcoords(ibl ,jbu ),1 ,MPI_INTEGER,ileft ,1, & + & MPI_COMM_COMP,status,ierr) + call mpi_sendrecv(ibcoords(ista,jbl ),1 ,MPI_INTEGER,ileft ,1, & + & ibcoords(ibu ,jbl ),1 ,MPI_INTEGER,iright,1, & + & MPI_COMM_COMP,status,ierr) + call mpi_sendrecv(ibcoords(ista,jbu ),1 ,MPI_INTEGER,ileft ,1 , & + & ibcoords(ibu ,jbu ),1 ,MPI_INTEGER,iright,1, & + MPI_COMM_COMP,status,ierr) + +! corner check for coordnates + + icc=ibl + jcc=jbl + ii=ibcoords(icc,jcc)/10000 + jj=ibcoords(icc,jcc)-(ii*10000) + + if(ii .ne. icc .and. icc .ne. 0) write(0,151) ' CORNER FAILI ilb ll ',icc,jcc,ibcoords(icc,jcc),ii,jj + if( jj .ne. jcc) write(0,151) ' CORNER FAILJ ilb ll ',icc,jcc,ibcoords(icc,jcc),ii,jj + + icc=ibu + jcc=jbl + ii=ibcoords(icc,jcc)/10000 + jj=ibcoords(icc,jcc)-(ii*10000) + if(ii .ne. icc .and. icc .ne. im+1 ) write(0,151) ' CORNER FAILI ilb ul ',icc,jcc,ibcoords(icc,jcc),ii,jj + if( jj .ne. jcc ) write(0,151) ' CORNER FAILJ ilb ul ',icc,jcc,ibcoords(icc,jcc),ii,jj + + icc=ibu + jcc=jbu + ii=ibcoords(icc,jcc)/10000 + jj=ibcoords(icc,jcc)-(ii*10000) + if(ii .ne. icc .and. icc .ne. im+1) write(0,151) ' CORNER FAILI ilb uu ',icc,jcc,ibcoords(icc,jcc),ii,jj + if( jj .ne. jcc ) write(0,151) ' CORNER FAILJ ilb ul ',icc,jcc,ibcoords(icc,jcc),ii,jj + + icc=ibl + jcc=jbu + ii=ibcoords(icc,jcc)/10000. + jj=ibcoords(icc,jcc)-(ii*10000) + if(ii .ne. icc .and. icc .ne. 0 ) write(0,151) ' CORNER FAILI ilb lu ',icc,jcc,ibcoords(icc,jcc),ii,jj + if( jj .ne. jcc ) write(0,151) ' CORNER FAILJ ilb ul ',icc,jcc,ibcoords(icc,jcc),ii,jj + +! if(ileft .ge. 0) then +!119 format(' GWX LEFT EXCHANGE ileft,me,ibcoords(ista-1,jend+1),ibcoords(ista-1,jend-1),ista-1,jend-1,jend+1', & +! 10i10) +! endif + +! if(iright .ge. 0) then +!! write(0,129) iright,me,ibcoords(ista+1,jend+1),ibcoords(ista+1,jend-1),ista-1,jend-1,jend+1 !GWVX +!129 format(' GWX RIGHT EXCHANGE iright,me,ibcoords(ista+1,jend+1),ibcoords(ista-1,jend+1),ista-1,jend-1,jend+1', & +! 10i10) +! endif + +! interior check + + do j=jsta,jend + do i=ista,iend + ii=ibcoords(i,j)/10000 + jj=ibcoords( i,j)-(ii*10000) + if(ii .ne. i .or. jj .ne. j) write(0,151) 'GWVX FAILED IJ ',i,j,ibcoords(i,j),ibl,jbl,ibu,jbu + end do + end do + + 151 format(a70,10i10) + +! bounds check +! first check top and bottom halo rows + + j=jbu + do i=ista,iend + ii=ibcoords(i,j)/10000 + jj=ibcoords( i,j)-(ii*10000) + if(ii .ne. i .or. jj .ne. j) write(0,151) 'GWVX FAILEDI JBU IJ ',i,j,ibcoords(i,j),ibl,jbl,ibu,jbu + end do + + j=jbl + do i=ista,iend + ii=ibcoords(i,j)/10000 + jj=ibcoords( i,j)-(ii*10000) + if(ii .ne. i .or. jj .ne. j) write(0,151) 'GWVX FAILEDI JBL IJ ',i,j,ibcoords(i,j),ibl,jbl,ibu,jbu + end do + +! second and last, check left and right halo columns + + i=ibl + do j=jsta,jend + ii=ibcoords(i,j)/10000 + jj=ibcoords( i,j)-(ii*10000) + if(ii .ne. i .and. ii .ne. im .or. jj .ne. j) write(0,151) 'GWVX FAILED IBL IJ ',ii,i,j,ibcoords(i,j),ibl,jbl,ibu,jbu + end do + + i=ibu + do j=jsta,jend + ii=ibcoords(i,j)/10000 + jj=ibcoords( i,j)-(ii*10000) + if(ii .ne. i .and. ii .ne. 1 .or. jj .ne. j) write(0,151) 'GWVX FAILED IBU ii i j ibcoords ibl,jbl,ibu,jbu',ii,i,j,ibcoords(i,j),ibl,jbl,ibu,jbu + end do + + if(me .eq. 0) write(0,*) ' IFIRST CHECK' + + endif ! IFIRST + endif !checkcoords + +! end halo checks if ( ierr /= 0 ) then print *, ' problem with second sendrecv in exch, ierr = ',ierr stop end if -! + call mpi_barrier(mpi_comm_comp,ierr) + ifirst=ifirst+1 end !!@PROCESS NOCHECK -! -!--- The 1st line is an inlined compiler directive that turns off -qcheck -! during compilation, even if it's specified as a compiler option in the -! makefile (Tuccillo, personal communication; Ferrier, Feb '02). -! +!> +!> @note The 1st line is an inlined compiler directive that turns off -qcheck +!> during compilation, even if it's specified as a compiler option in the +!> makefile (Tuccillo, personal communication; Ferrier, Feb '02). +!> +!> @author Jim Tuccillo IBM @date 2000-01-06 subroutine exch_f(a) use ctlblk_mod, only: num_procs, jend, iup, jsta, idn, & diff --git a/sorc/ncep_post.fd/EXCH2.f b/sorc/ncep_post.fd/EXCH2.f deleted file mode 100644 index d5bce4036..000000000 --- a/sorc/ncep_post.fd/EXCH2.f +++ /dev/null @@ -1,72 +0,0 @@ -!!@PROCESS NOCHECK -! -!--- The 1st line is an inlined compiler directive that turns off -qcheck -! during compilation, even if it's specified as a compiler option in the -! makefile (Tuccillo, personal communication; Ferrier, Feb '02). -! - SUBROUTINE EXCH2(A) -!$$$ SUBPROGRAM DOCUMENTATION BLOCK -! . . . -! SUBPROGRAM: EXCH EXCHANGE ONE HALO ROW -! PRGRMMR: TUCCILLO ORG: IBM -! -! ABSTRACT: -! EXCHANGE ONE HALO ROW -! . -! -! PROGRAM HISTORY LOG: -! 00-01-06 TUCCILLO - ORIGINAL -! -! USAGE: CALL EXCH(A) -! INPUT ARGUMENT LIST: -! A - ARRAY TO HAVE HALOS EXCHANGED -! -! OUTPUT ARGUMENT LIST: -! A - ARRAY WITH HALOS EXCHANGED -! -! OUTPUT FILES: -! STDOUT - RUN TIME STANDARD OUT. -! -! SUBPROGRAMS CALLED: -! MPI_SENDRECV -! UTILITIES: -! NONE -! LIBRARY: -! COMMON - CTLBLK.comm -! -! ATTRIBUTES: -! LANGUAGE: FORTRAN -! MACHINE : IBM RS/6000 SP -!$$$ - use ctlblk_mod, only: num_procs, jend, iup, jsta, idn, mpi_comm_comp, im,& - jsta_2l, jend_2u -!- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - implicit none -! - include 'mpif.h' -! - real,intent(inout) :: a ( im,jsta_2l:jend_2u ) - integer status(MPI_STATUS_SIZE) - integer ierr, jstam2, jendp1 -! - if ( num_procs <= 1 ) return -! - jstam2 = max(jsta_2l,jsta-2) - call mpi_sendrecv(a(1,jend-1),2*im,MPI_REAL,iup,1, & - & a(1,jstam2),2*im,MPI_REAL,idn,1, & - & MPI_COMM_COMP,status,ierr) - if ( ierr /= 0 ) then - print *, ' problem with first sendrecv in exch2, ierr = ',ierr - stop - end if - jendp1 = min(jend+1,jend_2u) - call mpi_sendrecv(a(1,jsta),2*im,MPI_REAL,idn,1, & - & a(1,jendp1),2*im,MPI_REAL,iup,1, & - & MPI_COMM_COMP,status,ierr) - if ( ierr /= 0 ) then - print *, ' problem with second sendrecv in exch2, ierr = ',ierr - stop - end if -! - end - diff --git a/sorc/ncep_post.fd/EXCH_c_float.f b/sorc/ncep_post.fd/EXCH_c_float.f new file mode 100644 index 000000000..8404f80f9 --- /dev/null +++ b/sorc/ncep_post.fd/EXCH_c_float.f @@ -0,0 +1,409 @@ +!> @file +!> @brief Subroutines that exchange one halo row. +!> +!> These routines are to exchange one halo row. +!> +!> @param[in] A Array to have halos exchanged. +!> @param[out] A Array with halos exchanged. +!> +!> ### Program history log: +!> Date | Programmer | Comments +!> -----------|---------------------|---------- +!> 2000-01-06 | Jim Tuccillo | Initial +!> 2021-06-01 | George Vandenberghe | 2D decomposition +!> +!> @note The 1st line is an inlined compiler directive that turns off -qcheck +!> during compilation, even if it's specified as a compiler option in the +!> makefile (Tuccillo, personal communication; Ferrier, Feb '02). +!> +!> @author Jim Tuccillo IBM @date 2000-01-06 + SUBROUTINE EXCH_c_float(A) + + use ctlblk_mod, only: num_procs, jend, iup, jsta, idn, mpi_comm_comp, im,& + icoords,ibcoords,bufs,ibufs,me,numx, & + jsta_2l, jend_2u,ileft,iright,ista_2l,iend_2u,ista,iend,jm,modelname +!- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + use iso_c_binding, only: c_sizeof, c_float + use mpi + implicit none +! + real(kind=c_float),intent(inout) :: a ( ista_2l:iend_2u,jsta_2l:jend_2u ) + real(kind=c_float), allocatable :: coll(:), colr(:) + integer, allocatable :: icoll(:), icolr(:) + integer status(MPI_STATUS_SIZE) + integer ierr, jstam1, jendp1,j + integer size,ubound,lbound + integer msglenl, msglenr + integer i,ii,jj, ibl,ibu,jbl,jbu,icc,jcc + integer iwest,ieast + integer ifirst + integer mpi_kind + + logical, parameter :: checkcoords = .false. + + data ifirst/0/ + allocate(coll(jm)) + allocate(colr(jm)) + allocate(icolr(jm)) + allocate(icoll(jm)) + ibl=max(ista-1,1) + ibu=min(im,iend+1) + jbu=min(jm,jend+1) + jbl=max(jsta-1,1) +! + +! write(0,*) 'mype=',me,'num_procs=',num_procs,'im=',im,'jsta_2l=', & +! jsta_2l,'jend_2u=',jend_2u,'jend=',jend,'iup=',iup,'jsta=', & +! jsta,'idn=',idn + if ( num_procs <= 1 ) return +! +! for global model apply cyclic boundary condition + + IF(MODELNAME == 'GFS') then + if(ifirst .le. 0 .and. me .eq. 0) print *,' CYCLIC BC APPLIED' + if(ileft .eq. MPI_PROC_NULL) iwest=1 ! get eastern bc from western boundary of full domain + if(iright .eq. MPI_PROC_NULL) ieast=1 ! get western bc from eastern boundary of full domain + if(ileft .eq. MPI_PROC_NULL) ileft=me+(numx-1) + if(iright .eq. MPI_PROC_NULL) iright=(me-numx) +1 + endif + + jstam1 = max(jsta_2l,jsta-1) ! Moorthi + +! send last row to iup's first row+ and receive first row- from idn's last row + + call mpi_sendrecv(a(ista,jend),iend-ista+1,MPI_REAL4,iup,1, & + & a(ista,jstam1),iend-ista+1,MPI_REAL4,idn,1, & + & MPI_COMM_COMP,status,ierr) + + if ( ierr /= 0 ) then + print *, ' problem with first sendrecv in exch, ierr = ',ierr + stop 6661 + endif + + if (checkcoords) then + if(ifirst .le. 0) then !IFIRST ONLY + call mpi_sendrecv(ibcoords(ista,jend),iend-ista+1,MPI_INTEGER,iup,1, & + & ibcoords(ista,jstam1),iend-ista+1,MPI_INTEGER,idn,1, & + & MPI_COMM_COMP,status,ierr) + if ( ierr /= 0 ) then + print *, ' problem with second sendrecv in exch, ierr = ',ierr + stop 7661 + endif + do i=ista,iend + ii=ibcoords(i,jstam1)/10000 + jj=ibcoords(i,jstam1)-(ii*10000) + if(ii .ne. i .or. jj .ne. jstam1 ) print *,' GWVX JEXCH CHECK FAIL ',ii,jj,ibcoords(i,jstam1),i + end do + endif !IFIRST + endif !checkcoords + +! build the I columns to send and receive + + msglenl=jend-jsta+1 + msglenr=jend-jsta+1 + if(iright .lt. 0) msglenr=1 + if(ileft .lt. 0) msglenl=1 + + do j=jsta,jend + coll(j)=a(ista,j) + end do + + call mpi_barrier(mpi_comm_comp,ierr) + +! send first col to ileft last col+ and receive last col+ from ileft first col + + call mpi_sendrecv(coll(jsta),msglenl ,MPI_REAL4,ileft,1, & + & colr(jsta),msglenr ,MPI_REAL4,iright,1, & + & MPI_COMM_COMP,status,ierr) + + if ( ierr /= 0 ) then + print *, ' problem with third sendrecv in exch, ierr = ',ierr + stop 6662 + endif + + if(ifirst .le. 0) then ! IFIRST ONLY + call mpi_sendrecv(icoll(jsta),msglenl ,MPI_INTEGER,ileft,1, & + & icolr(jsta),msglenr ,MPI_INTEGER,iright,1, & + & MPI_COMM_COMP,status,ierr) + if ( ierr /= 0 ) then + print *, ' problem with fourth sendrecv in exch, ierr = ',ierr + stop 7662 + endif + endif !IFIRST + + if(iright .ge. 0) then + do j=jsta,jend + a(iend+1,j)=colr(j) + if(checkcoords) then + if(ifirst .le. 0) then !IFIRST ONLY + ibcoords(iend+1,j)=icolr(j) + ii=ibcoords(iend+1,j)/10000 + jj=ibcoords( iend+1,j)-(ii*10000) + if( j .ne. jj .or. ii .ne. iend+1 .and. ii .ne. im .and. ii .ne. 1) & + write(0,921) j,iend+1,ii,jj,ibcoords(iend+1,j),'IEXCH COORD FAIL j,iend+1,ii,jj,ibcoord ' + endif !IFIRST + endif !checkcoords + end do + endif ! for iright + + 921 format(5i10,a50) + +! print *,'mype=',me,'in EXCH, after first mpi_sendrecv' + + if ( ierr /= 0 ) then + print *, ' problem with fifth sendrecv in exch, ierr = ',ierr + stop 6663 + end if + jendp1 = min(jend+1,jend_2u) ! Moorthi + +!GWV. change from full im row exchange to iend-ista+1 subrow exchange, + + do j=jsta,jend + colr(j)=a(iend,j) + end do + +! send first row to idown's last row+ and receive last row+ from iup's first row + + call mpi_sendrecv(a(ista,jsta),iend-ista+1,MPI_REAL4,idn,1, & + & a(ista,jendp1),iend-ista+1,MPI_REAL4,iup,1, & + & MPI_COMM_COMP,status,ierr) + if ( ierr /= 0 ) then + print *, ' problem with sixth sendrecv in exch, ierr = ',ierr + stop 6664 + endif + + if (checkcoords) then + if (ifirst .le. 0) then + call mpi_sendrecv(ibcoords(ista,jsta),iend-ista+1,MPI_INTEGER,idn,1, & + & ibcoords(ista,jendp1),iend-ista+1,MPI_INTEGER,iup,1, & + & MPI_COMM_COMP,status,ierr) + if ( ierr /= 0 ) then + print *, ' problem with seventh sendrecv in exch, ierr = ',ierr + stop 7664 + endif + endif ! IFIRST + endif ! checkcoords + +! send last col to iright first col- and receive first col- from ileft last col + + call mpi_sendrecv(colr(jsta),msglenr ,MPI_REAL4,iright,1 , & + & coll(jsta),msglenl ,MPI_REAL4,ileft ,1, & + & MPI_COMM_COMP,status,ierr) + + if ( ierr /= 0 ) then + print *, ' problem with eighth sendrecv in exch, ierr = ',ierr + stop 6665 + endif + + if (ifirst .le. 0) then + call mpi_sendrecv(icolr(jsta),msglenr ,MPI_integer,iright,1 , & + & icoll(jsta),msglenl ,MPI_integer,ileft ,1, & + & MPI_COMM_COMP,status,ierr) + if ( ierr /= 0 ) then + print *, ' problem with ninth sendrecv in exch, ierr = ',ierr + stop 7665 + endif + endif !IFIRST + + if(ileft .ge. 0) then + do j=jsta,jend + a(ista-1,j)=coll(j) + if(checkcoords) then + if(ifirst .le. 0) then + ibcoords(ista-1,j)=icoll(j) + ii=ibcoords(ista-1,j)/10000 + jj=ibcoords( ista-1,j)-(ii*10000) + if( j .ne. jj .or. ii .ne. ista-1 .and. ii .ne. im .and. ii .ne. 1) & + write(0,921) j,ista-1,ii,jj,ibcoords(ista-1,j),'EXCH COORD FAIL j,ista-1,ii,jj,ibcoord ' + endif !IFIRST + endif !checkcoords + end do + endif + +! interior check + + if(checkcoords) then + if(ifirst .le. 0) then + do j=jsta,jend + do i=ista,iend + ii=ibcoords(i,j)/10000 + jj=ibcoords( i,j)-(ii*10000) + if(ii .ne. i .or. jj .ne. j) write(0,151) 'INFAILED IJ ',i,j,ibcoords(i,j),ibl,jbl,ibu,jbu + end do + end do + endif !IFIRST + endif !checkcoords + +!! corner points. After the exchanges above, corner points are replicated in +! neighbour halos so we can get them from the neighbors rather than +! calculating more corner neighbor numbers +! A(ista-1,jsta-1) is in the ileft a(iend,jsta-1) location +! A(ista-1,jend+1) is in the ileft a(iend,jend+1) location +! A(iend+1,jsta-1) is in the iright a(ista,jsta-1) location +! A(iend+1,jend+1) is in the iright a(ista,jend+1) location +!GWVx ibl=max(ista-1,1) +!GWVx ibu=min(im,iend+1) + + ibl=max(ista-1,1) + ibu=min(im,iend+1) + if(modelname == 'GFS') then + ibl=max(ista-1,0) + ibu=min(im+1,iend+1) + endif + + jbu=min(jm,jend+1) + jbl=max(jsta-1,1) + + call mpi_sendrecv(a(iend,jbl ),1, MPI_REAL4,iright,1 , & + & a(ibl ,jbl ),1, MPI_REAL4,ileft ,1, & + & MPI_COMM_COMP,status,ierr) + if ( ierr /= 0 ) then + print *, ' problem with tenth sendrecv in exch, ierr = ',ierr + stop 6771 + endif + + call mpi_sendrecv(a(iend,jbu ),1, MPI_REAL4,iright,1 , & + & a(ibl ,jbu ),1, MPI_REAL4,ileft ,1, & + & MPI_COMM_COMP,status,ierr) + + if ( ierr /= 0 ) then + print *, ' problem with eleventh sendrecv in exch, ierr = ',ierr + stop 6772 + endif + + call mpi_sendrecv(a(ista,jbl ),1, MPI_REAL4,ileft ,1, & + & a(ibu ,jbl ),1, MPI_REAL4,iright,1, & + & MPI_COMM_COMP,status,ierr) + + if ( ierr /= 0 ) then + print *, ' problem with twelft sendrecv in exch, ierr = ',ierr + stop 6773 + endif + + call mpi_sendrecv(a(ista,jbu ),1, MPI_REAL4,ileft ,1 , & + & a(ibu ,jbu ),1, MPI_REAL4,iright,1, & + & MPI_COMM_COMP,status,ierr) + + if ( ierr /= 0 ) then + print *, ' problem with thirteenth sendrecv in exch, ierr = ',ierr + stop 6774 + endif + + 139 format(a20,5(i10,i6,i6,'<>')) + + if(checkcoords) then + if(ifirst .le. 0) then + call mpi_sendrecv(ibcoords(iend,jbl ),1 ,MPI_INTEGER,iright,1 , & + & ibcoords(ibl ,jbl ),1 ,MPI_INTEGER,ileft ,1, & + & MPI_COMM_COMP,status,ierr) + + call mpi_sendrecv(ibcoords(iend,jbu ),1 ,MPI_INTEGER,iright,1, & + & ibcoords(ibl ,jbu ),1 ,MPI_INTEGER,ileft ,1, & + & MPI_COMM_COMP,status,ierr) + call mpi_sendrecv(ibcoords(ista,jbl ),1 ,MPI_INTEGER,ileft ,1, & + & ibcoords(ibu ,jbl ),1 ,MPI_INTEGER,iright,1, & + & MPI_COMM_COMP,status,ierr) + call mpi_sendrecv(ibcoords(ista,jbu ),1 ,MPI_INTEGER,ileft ,1 , & + & ibcoords(ibu ,jbu ),1 ,MPI_INTEGER,iright,1, & + MPI_COMM_COMP,status,ierr) + +! corner check for coordnates + + icc=ibl + jcc=jbl + ii=ibcoords(icc,jcc)/10000 + jj=ibcoords(icc,jcc)-(ii*10000) + + if(ii .ne. icc .and. icc .ne. 0) write(0,151) ' CORNER FAILI ilb ll ',icc,jcc,ibcoords(icc,jcc),ii,jj + if( jj .ne. jcc) write(0,151) ' CORNER FAILJ ilb ll ',icc,jcc,ibcoords(icc,jcc),ii,jj + + icc=ibu + jcc=jbl + ii=ibcoords(icc,jcc)/10000 + jj=ibcoords(icc,jcc)-(ii*10000) + if(ii .ne. icc .and. icc .ne. im+1 ) write(0,151) ' CORNER FAILI ilb ul ',icc,jcc,ibcoords(icc,jcc),ii,jj + if( jj .ne. jcc ) write(0,151) ' CORNER FAILJ ilb ul ',icc,jcc,ibcoords(icc,jcc),ii,jj + + icc=ibu + jcc=jbu + ii=ibcoords(icc,jcc)/10000 + jj=ibcoords(icc,jcc)-(ii*10000) + if(ii .ne. icc .and. icc .ne. im+1) write(0,151) ' CORNER FAILI ilb uu ',icc,jcc,ibcoords(icc,jcc),ii,jj + if( jj .ne. jcc ) write(0,151) ' CORNER FAILJ ilb ul ',icc,jcc,ibcoords(icc,jcc),ii,jj + + icc=ibl + jcc=jbu + ii=ibcoords(icc,jcc)/10000. + jj=ibcoords(icc,jcc)-(ii*10000) + if(ii .ne. icc .and. icc .ne. 0 ) write(0,151) ' CORNER FAILI ilb lu ',icc,jcc,ibcoords(icc,jcc),ii,jj + if( jj .ne. jcc ) write(0,151) ' CORNER FAILJ ilb ul ',icc,jcc,ibcoords(icc,jcc),ii,jj + +! if(ileft .ge. 0) then +!119 format(' GWX LEFT EXCHANGE ileft,me,ibcoords(ista-1,jend+1),ibcoords(ista-1,jend-1),ista-1,jend-1,jend+1', & +! 10i10) +! endif + +! if(iright .ge. 0) then +!! write(0,129) iright,me,ibcoords(ista+1,jend+1),ibcoords(ista+1,jend-1),ista-1,jend-1,jend+1 !GWVX +!129 format(' GWX RIGHT EXCHANGE iright,me,ibcoords(ista+1,jend+1),ibcoords(ista-1,jend+1),ista-1,jend-1,jend+1', & +! 10i10) +! endif + +! interior check + + do j=jsta,jend + do i=ista,iend + ii=ibcoords(i,j)/10000 + jj=ibcoords( i,j)-(ii*10000) + if(ii .ne. i .or. jj .ne. j) write(0,151) 'GWVX FAILED IJ ',i,j,ibcoords(i,j),ibl,jbl,ibu,jbu + end do + end do + + 151 format(a70,10i10) + +! bounds check +! first check top and bottom halo rows + + j=jbu + do i=ista,iend + ii=ibcoords(i,j)/10000 + jj=ibcoords( i,j)-(ii*10000) + if(ii .ne. i .or. jj .ne. j) write(0,151) 'GWVX FAILEDI JBU IJ ',i,j,ibcoords(i,j),ibl,jbl,ibu,jbu + end do + + j=jbl + do i=ista,iend + ii=ibcoords(i,j)/10000 + jj=ibcoords( i,j)-(ii*10000) + if(ii .ne. i .or. jj .ne. j) write(0,151) 'GWVX FAILEDI JBL IJ ',i,j,ibcoords(i,j),ibl,jbl,ibu,jbu + end do + +! second and last, check left and right halo columns + + i=ibl + do j=jsta,jend + ii=ibcoords(i,j)/10000 + jj=ibcoords( i,j)-(ii*10000) + if(ii .ne. i .and. ii .ne. im .or. jj .ne. j) write(0,151) 'GWVX FAILED IBL IJ ',ii,i,j,ibcoords(i,j),ibl,jbl,ibu,jbu + end do + + i=ibu + do j=jsta,jend + ii=ibcoords(i,j)/10000 + jj=ibcoords( i,j)-(ii*10000) + if(ii .ne. i .and. ii .ne. 1 .or. jj .ne. j) write(0,151) 'GWVX FAILED IBU ii i j ibcoords ibl,jbl,ibu,jbu',ii,i,j,ibcoords(i,j),ibl,jbl,ibu,jbu + end do + + if(me .eq. 0) write(0,*) ' IFIRST CHECK' + + endif ! IFIRST + endif !checkcoords + +! end halo checks + if ( ierr /= 0 ) then + print *, ' problem with second sendrecv in exch, ierr = ',ierr + stop + end if + call mpi_barrier(mpi_comm_comp,ierr) + ifirst=ifirst+1 + end diff --git a/sorc/ncep_post.fd/FDLVL.f b/sorc/ncep_post.fd/FDLVL.f index 81441ac3b..b0a0714c9 100644 --- a/sorc/ncep_post.fd/FDLVL.f +++ b/sorc/ncep_post.fd/FDLVL.f @@ -1,83 +1,58 @@ !> @file -! -!> SUBPROGRAM: FDLVL COMPUTES FD LEVEL T, Q, U, V -!! PRGRMMR: TREADON ORG: W/NP2 DATE: 92-12-22 -!! -!! ABSTRACT: -!! THIS ROUTINE COMPUTES TEMPERATURE, SPEC. HUM, U WIND COMPONENT, -!! AND V WIND COMPONENT ON THE NFD=6 FD LEVELS. THE -!! HEIGHT OF THESE LEVELS (IN METERS) IS GIVEN IN THE -!! DATA STATEMENT BELOW. THE ALGORITHM PROCEEDS AS -!! FOLLOWS. (AGL IN PARENTHESES) -!! -!! AT EACH MASS POINT MOVE UP VERTICALLY FROM THE LM-TH (LOWEST -!! ATMOSPHERIC) ETA LAYER. FIND THE ETA LAYERS WHOSE -!! HEIGHT (ABOVE GROUND) BOUNDS THE TARGET FD LEVEL HEIGHT. -!! VERTICALLY INTERPOLATE TO GET TEMPERATURE AT THIS FD -!! LEVEL. AVERAGE THE FOUR SURROUNDING WINDS -!! TO GET A MASS POINT WIND. VERTICALLY INTERPOLATE THESE -!! MASS POINT WINDS TO THE TARGET FD LEVEL. CONTINUE THIS -!! PROCESS UNTIL ALL NFD=6 FD LEVELS HAVE BEEN PROCESSED. -!! MOVE ON TO THE NEXT MASS POINT. -!! -!! AVERAGING THE FOUR ABOVE GROUND WINDS TO THE MASS POINT -!! WAS FOUND TO SMOOTH THE FIELD AND REDUCE THE OCCURRENCE -!! OF POINT PEAK WINDS FAR IN EXCESS OF THE WINDS AT -!! ADJACENT POINTS. MASS POINT VALUES ARE RETURNED. -!! -!! PROGRAM HISTORY LOG: -!! 92-12-22 RUSS TREADON -!! 93-11-23 RUSS TREADON - CORRECTED ROUTINE TO COMPUTE -!! FD LEVELS WITH REPECT TO MEAN SEA LEVEL. -!! 94-01-04 MICHAEL BALDWIN - INCLUDE OPTIONS FOR COMPUTING -!! EITHER AGL OR MSL -!! 98-06-15 T BLACK - CONVERSION FROM 1-D TO 2-D -!! 00-01-04 JIM TUCCILLO - MPI VERSION -!! 02-01-15 MIKE BALDWIN - WRF VERSION -!! 11-12-14 SARAH LU - ADD GOCART AEROSOL AERFD -!! -!! USAGE: CALL FDLVL(ITYPE,TFD,QFD,UFD,VFD) -!! INPUT ARGUMENT LIST: -!! ITYPE - FLAG THAT DETERMINES WHETHER MSL (1) OR AGL (2) -!! LEVELS ARE USED. -!! -!! OUTPUT ARGUMENT LIST: -!! TFD - TEMPERATURE (K) ON FD LEVELS. -!! QFD - SPEC HUM ON FD LEVELS. -!! UFD - U WIND (M/S) ON FD LEVELS. -!! VFD - V WIND (M/S) ON FD LEVELS. -!! -!! OUTPUT FILES: -!! NONE -!! -!! SUBPROGRAMS CALLED: -!! UTILITIES: -!! -!! LIBRARY: -!! COMMON - -!! LOOPS -!! MASKS -!! OPTIONS -!! INDX -!! -!! ATTRIBUTES: -!! LANGUAGE: FORTRAN -!! MACHINE : CRAY C-90 -!! -! SUBROUTINE FDLVL(NFD,ITYPE,HTFD,TFD,QFD,UFD,VFD,PFD) -! SUBROUTINE FDLVL(ITYPE,TFD,QFD,UFD,VFD,PFD,ICINGFD) - SUBROUTINE FDLVL(ITYPE,TFD,QFD,UFD,VFD,PFD,ICINGFD,AERFD) +!> @brief Subroutine that computes T, Q, U, V on the flight levels (FD). +!> +!> This routine computes temperature, spec. hum, u wind component, +!> and v wind component on the NFD=6 FD levels. The +!> height of these levels (in meters) is given in the +!> data statement below. The alogrithm proceeds as +!> follows. (AGL-Above ground level in parentheses) +!> +!> At each mass point move up vertically from the LM-TH (lowest +!> atmospheric) ETA layer. Find the ETA layers whose +!> height (above ground) bounds the target FD level height. +!> Vertically interpolate to get temperature at this FD +!> level. Average the four surrounding winds +!> to get a mass point wind. Vertically interpolate these +!> mass point winds to the target FD level. Continue this +!> process until all NFD=6 FD levels have been processed. +!> Move on to the next mass point. +!> +!> Averaging the four above ground winds to the mass point +!> was found to smooth the field and reduce the occurrence +!> of point peak winds far in excess of the winds at +!> adjacent points. Mass point values are returned. +!> +!> @param[in] ITYPE Flag that determines whether MSL (1) or AGL (2) Levels are used. +!> @param[out] TFD Temperature (K) on FD levels. +!> @param[out] QFD Spec hum on FD levels. +!> @param[out] UFD U wind (m/s) on FD levels. +!> @param[out] VFD V wind (m/s) on FD levels. +!> +!> ### Program History Log +!> Date | Programmer | Comments +!> -----|------------|--------- +!> 1992-12-22 | Russ Treadon | Initial +!> 1993-11-23 | Russ Treadon | Corrected routine to compute FD levels with respect to mean sea level +!> 1994-01-04 | Mike Baldwin | Include options for computing either AGL or MSL +!> 1998-06-15 | T Black | Conversion from 1-D to 2-D +!> 2000-01-04 | Jim Tuccillo | MPI version +!> 2002-01-15 | Mike Baldwin | WRF version +!> 2011-12-14 | Sarah Lu | Add GOCART aerosol AERFD +!> 2021-10-15 | JESSE MENG | 2D DECOMPOSITION +!> 2022-09-22 | Li(Kate) Zhang | Remove Dust=> AERFD +!> +!> @author Russ Treadon W/NP2 @date 1992-12-22 + SUBROUTINE FDLVL(ITYPE,TFD,QFD,UFD,VFD,PFD,ICINGFD) ! ! - use vrbls4d, only: DUST use vrbls3d, only: ZMID, T, Q, PMID, ICING_GFIP, UH, VH use vrbls2d, only: FIS use masks, only: LMH use params_mod, only: GI, G use ctlblk_mod, only: JSTA, JEND, SPVAL, JSTA_2L, JEND_2U, LM, JSTA_M, & JEND_M, HTFD, NFD, IM, JM, NBIN_DU, gocart_on, & - MODELNAME + MODELNAME, ISTA, IEND, ISTA_2L, IEND_2U, ISTA_M, IEND_M use gridspec_mod, only: GRIDTYPE !- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - implicit none @@ -89,8 +64,7 @@ SUBROUTINE FDLVL(ITYPE,TFD,QFD,UFD,VFD,PFD,ICINGFD,AERFD) ! integer,intent(in) :: ITYPE(NFD) !jw real,intent(in) :: HTFD(NFD) - real,dimension(IM,JSTA:JEND,NFD),intent(out) :: TFD,QFD,UFD,VFD,PFD,ICINGFD - real,dimension(IM,JSTA:JEND,NFD,NBIN_DU),intent(out) :: AERFD + real,dimension(ISTA:IEND,JSTA:JEND,NFD),intent(out) :: TFD,QFD,UFD,VFD,PFD,ICINGFD ! INTEGER LVL(NFD),LHL(NFD) INTEGER IVE(JM),IVW(JM) @@ -113,7 +87,7 @@ SUBROUTINE FDLVL(ITYPE,TFD,QFD,UFD,VFD,PFD,ICINGFD,AERFD) !$omp parallel do DO IFD = 1,NFD DO J=JSTA,JEND - DO I=1,IM + DO I=ISTA,IEND TFD(I,J,IFD) = SPVAL QFD(I,J,IFD) = SPVAL UFD(I,J,IFD) = SPVAL @@ -123,17 +97,6 @@ SUBROUTINE FDLVL(ITYPE,TFD,QFD,UFD,VFD,PFD,ICINGFD,AERFD) ENDDO ENDDO ENDDO - if (gocart_on) then - DO N = 1, NBIN_DU - DO IFD = 1,NFD - DO J=JSTA,JEND - DO I=1,IM - AERFD(I,J,IFD,N) = SPVAL - ENDDO - ENDDO - ENDDO - ENDDO - endif IF(gridtype == 'E') THEN JVN = 1 @@ -145,17 +108,17 @@ SUBROUTINE FDLVL(ITYPE,TFD,QFD,UFD,VFD,PFD,ICINGFD,AERFD) END IF IF(gridtype /= 'A')THEN - CALL EXCH(FIS(1:IM,JSTA_2L:JEND_2U)) + CALL EXCH(FIS(ISTA_2L:IEND_2U,JSTA_2L:JEND_2U)) DO L=1,LM - CALL EXCH(ZMID(1:IM,JSTA_2L:JEND_2U,L)) + CALL EXCH(ZMID(ISTA_2L:IEND_2U,JSTA_2L:JEND_2U,L)) END DO - ISTART = 2 - ISTOP = IM-1 + ISTART = ISTA_M + ISTOP = IEND_M JSTART = JSTA_M JSTOP = JEND_M ELSE - ISTART = 1 - ISTOP = IM + ISTART = ISTA + ISTOP = IEND JSTART = JSTA JSTOP = JEND END IF @@ -249,22 +212,11 @@ SUBROUTINE FDLVL(ITYPE,TFD,QFD,UFD,VFD,PFD,ICINGFD,AERFD) PFD(I,J,IFD) = PMID(I,J,L) - (PMID(I,J,L)-PMID(I,J,L+1))*RDZ*DZABH(IFD) ICINGFD(I,J,IFD) = ICING_GFIP(I,J,L) - & (ICING_GFIP(I,J,L)-ICING_GFIP(I,J,L+1))*RDZ*DZABH(IFD) - if (gocart_on) then - DO N = 1, NBIN_DU - AERFD(I,J,IFD,N) = DUST(I,J,L,N) - & - (DUST(I,J,L,N)-DUST(I,J,L+1,N))*RDZ*DZABH(IFD) - ENDDO - endif ELSEIF (L == LM) THEN TFD(I,J,IFD) = T(I,J,L) QFD(I,J,IFD) = Q(I,J,L) PFD(I,J,IFD) = PMID(I,J,L) ICINGFD(I,J,IFD) = ICING_GFIP(I,J,L) - if (gocart_on) then - DO N = 1, NBIN_DU - AERFD(I,J,IFD,N) = DUST(I,J,L,N) - ENDDO - endif ENDIF L = LVL(IFD) @@ -389,22 +341,11 @@ SUBROUTINE FDLVL(ITYPE,TFD,QFD,UFD,VFD,PFD,ICINGFD,AERFD) PFD(I,J,IFD) = PMID(I,J,L) - (PMID(I,J,L)-PMID(I,J,L+1))*RDZ*DZABH(IFD) ICINGFD(I,J,IFD) = ICING_GFIP(I,J,L) - & (ICING_GFIP(I,J,L)-ICING_GFIP(I,J,L+1))*RDZ*DZABH(IFD) - if (gocart_on) then - DO N = 1, NBIN_DU - AERFD(I,J,IFD,N) = DUST(I,J,L,N) - & - (DUST(I,J,L,N)-DUST(I,J,L+1,N))*RDZ*DZABH(IFD) - ENDDO - endif ELSE TFD(I,J,IFD) = T(I,J,L) QFD(I,J,IFD) = Q(I,J,L) PFD(I,J,IFD) = PMID(I,J,L) ICINGFD(I,J,IFD) = ICING_GFIP(I,J,L) - if (gocart_on) then - DO N = 1, NBIN_DU - AERFD(I,J,IFD,N) = DUST(I,J,L,N) - ENDDO - endif ENDIF L = LVL(IFD) @@ -456,7 +397,7 @@ SUBROUTINE FDLVL(ITYPE,TFD,QFD,UFD,VFD,PFD,ICINGFD,AERFD) IF(MODELNAME=='RAPR' .OR. MODELNAME=='NCAR' .OR. MODELNAME=='NMM') THEN ! DO 420 IFD = 1,NFD DO J=JSTA,JEND - DO I=1,IM + DO I=ISTA,IEND if(QFD(I,J,IFD) < 1.0e-8) QFD(I,J,IFD)=0.0 ENDDO ENDDO @@ -468,74 +409,48 @@ SUBROUTINE FDLVL(ITYPE,TFD,QFD,UFD,VFD,PFD,ICINGFD,AERFD) RETURN END +!> Computes FD level for u,v. +!> +!> This routine computes u/v wind component on NFD FD levels. +!> The height of these levels (in meters) is passed as an +!> input parameter. The alogrithm proceeds as +!> follows. (AGL-Above ground level in parentheses) +!> +!> At each mass point move up vertically from the LM-TH (lowest +!> atmospheric) ETA layer. Find the ETA layers whose +!> height (above ground) bounds the target FD level height. +!> Vertically interpolate to get temperature at this FD +!> level. Average the four surrounding winds +!> to get a mass point wind. Vertically interpolate these +!> mass point winds to the target FD level. Continue this +!> process until all NFD FD levels have been processed. +!> Move on to the next mass point. +!> +!> Averaging the four above ground winds to the mass point +!> was found to smooth the field and reduce the occurrence +!> of point peak winds far in excess of the winds at +!> adjacent points. Mass point values are returned. +!> +!> @param[in] ITYPE Flag that determines whether MSL (1) or AGL (2) Levels are used. +!> @param[in] NFD Number of FD levels. +!> @param[in] HTFD FD levels. +!> @param[out] UFD U wind (m/s) on FD levels. +!> @param[out] VFD V wind (m/s) on FD levels. +!> +!> ### Program History Log +!> Date | Programmer | Comments +!> -----|------------|--------- +!> 1992-12-22 | Russ Treadon | Initial +!> 1993-11-23 | Russ Treadon | Corrected routine to compute FD levels with respect to mean sea level +!> 1994-01-04 | Mike Baldwin | Include options for computing either AGL or MSL +!> 1998-06-15 | T Black | Conversion from 1-D to 2-D +!> 2000-01-04 | Jim Tuccillo | MPI version +!> 2002-01-15 | Mike Baldwin | WRF version +!> 2011-12-14 | Sarah Lu | Add GOCART aerosol AERFD +!> 2019-09-25 | Y Mao | Seperate U/V from mass +!> +!> @author Russ Treadon W/NP2 @date 1992-12-22 SUBROUTINE FDLVL_UV(ITYPE,NFD,HTFD,UFD,VFD) -!$$$ SUBPROGRAM DOCUMENTATION BLOCK -! . . . -! SUBPROGRAM: FDLVL_UV COMPUTES FD LEVEL U, V -! PRGRMMR: TREADON ORG: W/NP2 DATE: 92-12-22 -! -! ABSTRACT: -! THIS ROUTINE COMPUTES U/V WIND COMPONENT ON NFD FD LEVELS. -! THE HEIGHT OF THESE LEVELS (IN METERS) IS PASSED AS AN -! INPUT PARAMETER. THE ALGORITHM PROCEEDS AS -! FOLLOWS. (AGL IN PARENTHESES) -! -! AT EACH MASS POINT MOVE UP VERTICALLY FROM THE LM-TH (LOWEST -! ATMOSPHERIC) ETA LAYER. FIND THE ETA LAYERS WHOSE -! HEIGHT (ABOVE GROUND) BOUNDS THE TARGET FD LEVEL HEIGHT. -! VERTICALLY INTERPOLATE TO GET TEMPERATURE AT THIS FD -! LEVEL. AVERAGE THE FOUR SURROUNDING WINDS -! TO GET A MASS POINT WIND. VERTICALLY INTERPOLATE THESE -! MASS POINT WINDS TO THE TARGET FD LEVEL. CONTINUE THIS -! PROCESS UNTIL ALL NFD FD LEVELS HAVE BEEN PROCESSED. -! MOVE ON TO THE NEXT MASS POINT. -! -! AVERAGING THE FOUR ABOVE GROUND WINDS TO THE MASS POINT -! WAS FOUND TO SMOOTH THE FIELD AND REDUCE THE OCCURRENCE -! OF POINT PEAK WINDS FAR IN EXCESS OF THE WINDS AT -! ADJACENT POINTS. MASS POINT VALUES ARE RETURNED. -! . -! -! PROGRAM HISTORY LOG: -! 92-12-22 RUSS TREADON -! 93-11-23 RUSS TREADON - CORRECTED ROUTINE TO COMPUTE -! FD LEVELS WITH REPECT TO MEAN SEA LEVEL. -! 94-01-04 MICHAEL BALDWIN - INCLUDE OPTIONS FOR COMPUTING -! EITHER AGL OR MSL -! 98-06-15 T BLACK - CONVERSION FROM 1-D TO 2-D -! 00-01-04 JIM TUCCILLO - MPI VERSION -! 02-01-15 MIKE BALDWIN - WRF VERSION -! 11-12-14 SARAH LU - ADD GOCART AEROSOL AERFD -! 19-25-09 Y Mao - Seperate U/V from mass -! -! USAGE: CALL FDLVL_UV(ITYPE,NFD,HTFD,UFD,VFD) -! INPUT ARGUMENT LIST: -! ITYPE - FLAG THAT DETERMINES WHETHER MSL (1) OR AGL (2) -! LEVELS ARE USED. -! NFD - NUMBER OF FD LEVELS -! HTFD - FD LEVELS -! -! OUTPUT ARGUMENT LIST: -! UFD - U WIND (M/S) ON FD LEVELS. -! VFD - V WIND (M/S) ON FD LEVELS. -! -! OUTPUT FILES: -! NONE -! -! SUBPROGRAMS CALLED: -! UTILITIES: -! -! LIBRARY: -! COMMON - -! LOOPS -! MASKS -! OPTIONS -! INDX -! -! ATTRIBUTES: -! LANGUAGE: FORTRAN -! MACHINE : CRAY C-90 -!$$$ ! ! use vrbls3d, only: ZMID, PMID, UH, VH @@ -543,7 +458,8 @@ SUBROUTINE FDLVL_UV(ITYPE,NFD,HTFD,UFD,VFD) use masks, only: LMH use params_mod, only: GI, G use ctlblk_mod, only: JSTA, JEND, SPVAL, JSTA_2L, JEND_2U, LM, JSTA_M, & - JEND_M, IM, JM, MODELNAME + JEND_M, IM, JM, MODELNAME, & + ISTA, IEND, ISTA_2L, IEND_2U, ISTA_M, IEND_M use gridspec_mod, only: GRIDTYPE !- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - implicit none @@ -553,7 +469,7 @@ SUBROUTINE FDLVL_UV(ITYPE,NFD,HTFD,UFD,VFD) integer,intent(in) :: ITYPE(NFD) integer,intent(in) :: NFD ! coming from calling subroutine real,intent(in) :: HTFD(NFD) - real,dimension(IM,JSTA_2L:JEND_2U,NFD),intent(out) :: UFD,VFD + real,dimension(ISTA_2L:IEND_2U,JSTA_2L:JEND_2U,NFD),intent(out) :: UFD,VFD ! INTEGER LVL(NFD) INTEGER IVE(JM),IVW(JM) @@ -571,7 +487,7 @@ SUBROUTINE FDLVL_UV(ITYPE,NFD,HTFD,UFD,VFD) !$omp parallel do DO IFD = 1,NFD DO J=JSTA,JEND - DO I=1,IM + DO I=ISTA,IEND UFD(I,J,IFD) = SPVAL VFD(I,J,IFD) = SPVAL ENDDO @@ -588,17 +504,17 @@ SUBROUTINE FDLVL_UV(ITYPE,NFD,HTFD,UFD,VFD) END IF IF(gridtype /= 'A')THEN - CALL EXCH(FIS(1:IM,JSTA_2L:JEND_2U)) + CALL EXCH(FIS(ISTA_2L:IEND_2U,JSTA_2L:JEND_2U)) DO L=1,LM - CALL EXCH(ZMID(1:IM,JSTA_2L:JEND_2U,L)) + CALL EXCH(ZMID(ISTA_2L:IEND_2U,JSTA_2L:JEND_2U,L)) END DO - ISTART = 2 - ISTOP = IM-1 + ISTART = ISTA_M + ISTOP = IEND_M JSTART = JSTA_M JSTOP = JEND_M ELSE - ISTART = 1 - ISTOP = IM + ISTART = ISTA + ISTOP = IEND JSTART = JSTA JSTOP = JEND END IF @@ -795,112 +711,83 @@ SUBROUTINE FDLVL_UV(ITYPE,NFD,HTFD,UFD,VFD) RETURN END +!> Computes FD level for mass variables. +!> +!> This routine computes mass variables (temperature, spec. hum...) +!> on NFD FD levels. The height of these levels (in meters) is +!> passed as an input parameter. The alogrithm proceeds as +!> follows. (AGL-Above ground level in parentheses) +!> +!> At each mass point move up vertically from the LM-TH (lowest +!> atmospheric) ETA layer. Find the ETA layers whose +!> height (above ground) bounds the target FD level height. +!> Vertically interpolate to get temperature at this FD +!> level. Average the four surrounding winds +!> to get a mass point wind. Vertically interpolate these +!> mass point winds to the target FD level. Continue this +!> process until all NFD FD levels have been processed. +!> Move on to the next mass point. +!> +!> Averaging the four above ground winds to the mass point +!> was found to smooth the field and reduce the occurrence +!> of point peak winds far in excess of the winds at +!> adjacent points. Mass point values are returned. +!> +!> NOTES for Q fields by Y Mao: +!> The following safety check should be executed by the caller of FDLVL subroutines. +!> Safety check to avoid tiny QFD values. +!> KRF: Need NCAR and NMM WRF cores in this check as well? +!> @code +!> IF(MODELNAME=='RAPR' .OR. MODELNAME=='NCAR' .OR. MODELNAME=='NMM') THEN ! +!> DO IFD = 1,NFD +!> DO J=JSTA,JEND +!> DO I=1,IM +!> if(QFD(I,J,IFD) < 1.0e-8) QFD(I,J,IFD)=0.0 +!> ENDDO +!> ENDDO +!> ENDDO +!> endif +!> @endcode +!> +!> @param[in] ITYPE Flag that determines whether MSL (1) or AGL (2) Levels are used. +!> @param[in] NFD Number of FD levels. +!> @param[in] PTFD FD pressure levels. +!> @param[in] HTFD FD height levels. +!> @param[in] NIN Number of input fields. +!> @param[in] QIN Array of mass point value on model levels. +!> @param[in] QTYPE Charater array of variable type to differentiate underground interpolation. +!>
+!>                   C-5 Cloud Species
+!>                   K-TURBULENT KINETIC ENERGY
+!>                   Q-Specific Humidity
+!>                   T-Temperature, 
+!>                   W-Vertical Velocity or Omega
+!>
+!> @param[out] QFD Array of mass point value on FD levels. +!> +!> ### Program History Log +!> Date | Programmer | Comments +!> -----|------------|--------- +!> 1992-12-22 | Russ Treadon | Initial +!> 1993-11-23 | Russ Treadon | Corrected routine to compute FD levels with respect to mean sea level +!> 1994-01-04 | Mike Baldwin | Include options for computing either AGL or MSL +!> 1998-06-15 | T Black | Conversion from 1-D to 2-D +!> 2000-01-04 | Jim Tuccillo | MPI version +!> 2002-01-15 | Mike Baldwin | WRF version +!> 2011-12-14 | Sarah Lu | Add GOCART aerosol AERFD +!> 2017-06-01 | Y Mao | Add FD levels for GTG(EDPARM CATEDR MWTURB) and allow levels input from control file +!> 2019-09-25 | Y Mao | Seperate mass from UV allow array of mass input to interpolate multiple fields with the same levels at one time. Dust=> AERFD can be processed when NIN=NBIN_DU +!> 2020-11-10 | Jesse Meng | Use UPP_PHYSICS module +!> +!> @author Russ Treadon W/NP2 @date 1992-12-22 SUBROUTINE FDLVL_MASS(ITYPE,NFD,PTFD,HTFD,NIN,QIN,QTYPE,QFD) -!$$$ SUBPROGRAM DOCUMENTATION BLOCK -! . . . -! SUBPROGRAM: FDLVL_MASS COMPUTES FD LEVEL FOR MASS VARIABLES -! PRGRMMR: TREADON ORG: W/NP2 DATE: 92-12-22 -! -! ABSTRACT: -! THIS ROUTINE COMPUTES MASS VARIABLES (TEMPERATURE, SPEC. HUM...) -! ON NFD FD LEVELS. THE HEIGHT OF THESE LEVELS (IN METERS) IS -! PASSED AS AN INPUT PARAMETER. THE ALGORITHM PROCEEDS AS -! FOLLOWS. (AGL IN PARENTHESES) -! -! AT EACH MASS POINT MOVE UP VERTICALLY FROM THE LM-TH (LOWEST -! ATMOSPHERIC) ETA LAYER. FIND THE ETA LAYERS WHOSE -! HEIGHT (ABOVE GROUND) BOUNDS THE TARGET FD LEVEL HEIGHT. -! VERTICALLY INTERPOLATE TO GET TEMPERATURE AT THIS FD -! LEVEL. AVERAGE THE FOUR SURROUNDING WINDS -! TO GET A MASS POINT WIND. VERTICALLY INTERPOLATE THESE -! MASS POINT WINDS TO THE TARGET FD LEVEL. CONTINUE THIS -! PROCESS UNTIL ALL NFD FD LEVELS HAVE BEEN PROCESSED. -! MOVE ON TO THE NEXT MASS POINT. -! -! AVERAGING THE FOUR ABOVE GROUND WINDS TO THE MASS POINT -! WAS FOUND TO SMOOTH THE FIELD AND REDUCE THE OCCURRENCE -! OF POINT PEAK WINDS FAR IN EXCESS OF THE WINDS AT -! ADJACENT POINTS. MASS POINT VALUES ARE RETURNED. -! . -! -! PROGRAM HISTORY LOG: -! 92-12-22 RUSS TREADON -! 93-11-23 RUSS TREADON - CORRECTED ROUTINE TO COMPUTE -! FD LEVELS WITH REPECT TO MEAN SEA LEVEL. -! 94-01-04 MICHAEL BALDWIN - INCLUDE OPTIONS FOR COMPUTING -! EITHER AGL OR MSL -! 98-06-15 T BLACK - CONVERSION FROM 1-D TO 2-D -! 00-01-04 JIM TUCCILLO - MPI VERSION -! 02-01-15 MIKE BALDWIN - WRF VERSION -! 11-12-14 SARAH LU - ADD GOCART AEROSOL AERFD -! 17-06-01 Y Mao - ADD FD levels for GTG(EDPARM CATEDR MWTURB) and allow -! levels input from control file -! 19-09-25 Y MAO - SEPERATE MASS FROM UV -! ALLOW ARRAY OF MASS INPUT TO INTERPOLATE MULTIPLE FIELDS -! WITH THE SAME LEVELS AT ONE TIME -! DUST=>AERFD CAN BE PROCESSED WHEN NIN=NBIN_DU -! 20-11-10 JESSE MENG - USE UPP_PHYSICS MODULE -! -! USAGE: CALL FDLVL_MASS(ITYPE,NFD,PTFD,HTFD,NIN,QIN,QTYPE,QFD) -! INPUT ARGUMENT LIST: -! ITYPE - FLAG THAT DETERMINES WHETHER MSL (1) OR AGL (2) -! LEVELS ARE USED. -! NFD - NUMBER OF FD LEVELS -! PTFD - FD PRESSURE LEVELS -! HTFD - FD HEIGHT LEVELS -! NIN - NUMBER OF INPUT FIELDS -! QIN - ARRAY OF MASS POINT VALUE ON MODEL LEVELS -! QTYPE - CHARACTER ARRAY OF VARIABLE TYPE TO DIFFERENTIATE UNDERGROUND INTERPOLATION -! C-5 Cloud Species -! K-TURBULENT KINETIC ENERGY -! Q-Specific Humidity -! T-Temperature, -! W-Vertical Velocity or Omega -! -! OUTPUT ARGUMENT LIST: -! QFD - ARRAY OF MASS POINT VALUE ON FD LEVELS. -! -! OUTPUT FILES: -! NONE -! -! SUBPROGRAMS CALLED: -! UTILITIES: -! -! LIBRARY: -! COMMON - -! LOOPS -! MASKS -! OPTIONS -! INDX -! -! ATTRIBUTES: -! LANGUAGE: FORTRAN -! MACHINE : CRAY C-90 -!$$$ -! -! - -! NOTES for Q fields by Y Mao: -! The following safety check should be executed by the caller of FDLVL subroutines. -! safety check to avoid tiny QFD values -! !KRF: Need NCAR and NMM WRF cores in this check as well? -! IF(MODELNAME=='RAPR' .OR. MODELNAME=='NCAR' .OR. MODELNAME=='NMM') THEN ! -! DO IFD = 1,NFD -! DO J=JSTA,JEND -! DO I=1,IM -! if(QFD(I,J,IFD) < 1.0e-8) QFD(I,J,IFD)=0.0 -! ENDDO -! ENDDO -! ENDDO -! endif -! - use vrbls3d, only: T,Q,ZMID,PMID,PINT,ZINT use vrbls2d, only: FIS use masks, only: LMH use params_mod, only: GI, G, GAMMA,PQ0, A2, A3, A4, RHMIN,RGAMOG use ctlblk_mod, only: JSTA, JEND, SPVAL, JSTA_2L, JEND_2U, LM, JSTA_M, & - JEND_M, IM, JM,global,MODELNAME + JEND_M, IM, JM,global,MODELNAME, & + ISTA, IEND, ISTA_2L, IEND_2U, ISTA_M, IEND_M use gridspec_mod, only: GRIDTYPE use physcons_post,only: CON_FVIRT, CON_ROG, CON_EPS, CON_EPSM1 use upp_physics, only: FPVSNEW @@ -918,9 +805,9 @@ SUBROUTINE FDLVL_MASS(ITYPE,NFD,PTFD,HTFD,NIN,QIN,QTYPE,QFD) real, intent(in) :: PTFD(NFD) real,intent(in) :: HTFD(NFD) integer,intent(in) :: NIN - real,intent(in) :: QIN(IM,JSTA:JEND,LM,NIN) + real,intent(in) :: QIN(ISTA:IEND,JSTA:JEND,LM,NIN) character, intent(in) :: QTYPE(NIN) - real,intent(out) :: QFD(IM,JSTA:JEND,NFD,NIN) + real,intent(out) :: QFD(ISTA:IEND,JSTA:JEND,NFD,NIN) ! INTEGER LHL(NFD) @@ -942,7 +829,7 @@ SUBROUTINE FDLVL_MASS(ITYPE,NFD,PTFD,HTFD,NIN,QIN,QTYPE,QFD) DO N=1,NIN DO IFD = 1,NFD DO J=JSTA,JEND - DO I=1,IM + DO I=ISTA,IEND QFD(I,J,IFD,N) = SPVAL ENDDO ENDDO @@ -950,13 +837,13 @@ SUBROUTINE FDLVL_MASS(ITYPE,NFD,PTFD,HTFD,NIN,QIN,QTYPE,QFD) ENDDO IF(gridtype /= 'A')THEN - ISTART = 2 - ISTOP = IM-1 + ISTART = ISTA_M + ISTOP = IEND_M JSTART = JSTA_M JSTOP = JEND_M ELSE - ISTART = 1 - ISTOP = IM + ISTART = ISTA + ISTOP = IEND JSTART = JSTA JSTOP = JEND END IF diff --git a/sorc/ncep_post.fd/FILL_PSETFLD.f b/sorc/ncep_post.fd/FILL_PSETFLD.f index 63a9757c7..bc0d3d6b9 100644 --- a/sorc/ncep_post.fd/FILL_PSETFLD.f +++ b/sorc/ncep_post.fd/FILL_PSETFLD.f @@ -1,39 +1,22 @@ !> @file -! . . . -!> SUBPROGRAM: READCNTRLgrb2_xml READS POST xml CONTROL FILE -!! PRGRMMR: J. WANG ORG: NCEP/EMC DATE: 12-01-27 -!! -!! ABSTRACT: -!! THIS ROUTINE SET THE OUTPUT FIELD GRIB2 INFORMATION SUCH -!! AS PARAMETER NAME, LEVEL TYPE ETC FROM POST AVAILABLE FIELD -!! TABLE -!! -!! PROGRAM HISTORY LOG: -!! 01_27_2012 Jun Wang - INITIAL CODE -!! 04_03_2012 Jun Wang - Add table info -!! 03_10_2015 Lin Gan - Using flat file data -!! -!! USAGE: CALL READCNTRL_XML(kth,kpv,pv) -!! INPUT ARGUMENT LIST: -!! param_ofld: output field -!! param_afld: available field in POST -!! -!! OUTPUT ARGUMENT LIST: -!! param_ofld: output field -!! -!! OUTPUT FILES: -!! NONE -!! -!! SUBPROGRAMS CALLED: -!! UTILITIES: -!! -!! LIBRARY: -!! MODULE: - xml_data_post_t -!! -!! ATTRIBUTES: -!! LANGUAGE: FORTRAN -!! MACHINE : IBM -!! +!> @brief fill_psetfld() reads post xml control file. +!> +!> This routine set the output field GRIB2 information such +!> as parameter name, level type etc from post available field +!> table. +!> +!> @param[in] param_ofld output field. +!> @param[in] param_afld available field in post. +!> @param[out] param_ofld output field. +!> +!> ### Program History Log +!> Date | Programmer | Comments +!> -----|------------|--------- +!> 2012-01-27 | Jun Wang | Initial +!> 2012-04-03 | Jun Wang | Add table info +!> 2015-03-10 | Lin Gan | Using flat file data +!> +!> @author J. Wang NCEP/EMC @date 2012-01-27 subroutine fill_psetfld(param_ofld,param_afld) ! diff --git a/sorc/ncep_post.fd/FIXED.f b/sorc/ncep_post.fd/FIXED.f index 64c549d7c..80a9d2fde 100644 --- a/sorc/ncep_post.fd/FIXED.f +++ b/sorc/ncep_post.fd/FIXED.f @@ -16,6 +16,7 @@ !! 11-02-06 JUN WANG - grib2 option !! 20-03-25 JESSE MENG - remove grib1 !! 21-04-01 JESSE MENG - computation on defined points only +!! 21-10-15 JESSE MENG - 2D DECOMPOSITION !! !! USAGE: CALL FIXED !! INPUT ARGUMENT LIST: @@ -45,12 +46,13 @@ SUBROUTINE FIXED ! use vrbls3d, only: pint - use vrbls2d, only: albedo, avgalbedo, albase, mxsnal, sst, ths, epsr, ti + use vrbls2d, only: albedo, avgalbedo, albase, mxsnal, sst, ths, epsr, ti& + , fdnsst use masks, only: gdlat, gdlon, sm, sice, lmh, lmv use params_mod, only: small, p1000, capa use lookup_mod, only: ITB,JTB,ITBQ,JTBQ use ctlblk_mod, only: jsta, jend, modelname, grib, cfld, fld_info, datapd, spval, tsrfc,& - ifhr, ifmin, lm, im, jm + ifhr, ifmin, lm, im, jm, ista, iend use rqstfld_mod, only: iget, lvls, iavblfld, id !- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - implicit none @@ -71,21 +73,21 @@ SUBROUTINE FIXED IF (IGET(048)>0) THEN !$omp parallel do private(i,j) DO J = JSTA,JEND - DO I = 1,IM + DO I = ISTA,IEND GRID1(I,J) = GDLAT(I,J) END DO END DO if(grib=='grib2') then cfld=cfld+1 fld_info(cfld)%ifld=IAVBLFLD(IGET(048)) - datapd(1:im,1:jend-jsta+1,cfld)=GRID1(1:im,jsta:jend) + datapd(1:iend-ista+1,1:jend-jsta+1,cfld)=GRID1(ista:iend,jsta:jend) endif ENDIF ! ! LONGITUDE (OUTPUT GRID). CONVERT TO EAST IF (IGET(049)>0) THEN DO J = JSTA,JEND - DO I = 1,IM + DO I = ISTA,IEND IF (GDLON(I,J) < 0.)THEN GRID1(I,J) = 360. + GDLON(I,J) ELSE @@ -98,7 +100,7 @@ SUBROUTINE FIXED if(grib=='grib2') then cfld=cfld+1 fld_info(cfld)%ifld=IAVBLFLD(IGET(049)) - datapd(1:im,1:jend-jsta+1,cfld)=GRID1(1:im,jsta:jend) + datapd(1:iend-ista+1,1:jend-jsta+1,cfld)=GRID1(ista:iend,jsta:jend) endif ENDIF ! @@ -106,17 +108,21 @@ SUBROUTINE FIXED IF (IGET(050)>0) THEN !$omp parallel do private(i,j) DO J = JSTA,JEND - DO I = 1,IM + DO I = ISTA,IEND GRID1(I,J) = SPVAL IF(SM(I,J) /= SPVAL) GRID1(I,J) = 1. - SM(I,J) - IF(SICE(I,J) /= SPVAL .AND. SICE(I,J) > 0.1) GRID1(I,J) = 0. + If(MODELNAME == 'GFS' .or. MODELNAME == 'FV3R')then + IF(SICE(I,J) /= SPVAL .AND. SICE(I,J) > 0.0)GRID1(I,J)=0. + else + IF(SICE(I,J) /= SPVAL .AND. SICE(I,J) > 0.1)GRID1(I,J)=0. + end if ! if(j==jm/2)print*,'i,mask= ',i,grid1(i,j) ENDDO ENDDO if(grib=='grib2') then cfld=cfld+1 fld_info(cfld)%ifld=IAVBLFLD(IGET(050)) - datapd(1:im,1:jend-jsta+1,cfld)=GRID1(1:im,jsta:jend) + datapd(1:iend-ista+1,1:jend-jsta+1,cfld)=GRID1(ista:iend,jsta:jend) endif ENDIF ! @@ -124,14 +130,14 @@ SUBROUTINE FIXED IF (IGET(051)>0) THEN !$omp parallel do private(i,j) DO J = JSTA,JEND - DO I = 1,IM + DO I = ISTA,IEND GRID1(I,J) = SICE(I,J) ENDDO ENDDO if(grib=='grib2') then cfld=cfld+1 fld_info(cfld)%ifld=IAVBLFLD(IGET(051)) - datapd(1:im,1:jend-jsta+1,cfld)=GRID1(1:im,jsta:jend) + datapd(1:iend-ista+1,1:jend-jsta+1,cfld)=GRID1(ista:iend,jsta:jend) endif ENDIF ! @@ -139,14 +145,14 @@ SUBROUTINE FIXED IF (IGET(052)>0) THEN !$omp parallel do private(i,j) DO J=JSTA,JEND - DO I=1,IM + DO I=ISTA,IEND GRID1(I,J) = LMH(I,J) ENDDO ENDDO if(grib=='grib2') then cfld=cfld+1 fld_info(cfld)%ifld=IAVBLFLD(IGET(052)) - datapd(1:im,1:jend-jsta+1,cfld)=GRID1(1:im,jsta:jend) + datapd(1:iend-ista+1,1:jend-jsta+1,cfld)=GRID1(ista:iend,jsta:jend) endif ENDIF ! @@ -154,14 +160,14 @@ SUBROUTINE FIXED IF (IGET(053)>0) THEN !$omp parallel do private(i,j) DO J=JSTA,JEND - DO I=1,IM + DO I=ISTA,IEND GRID1(I,J) = LMV(I,J) ENDDO ENDDO if(grib=='grib2') then cfld=cfld+1 fld_info(cfld)%ifld=IAVBLFLD(IGET(053)) - datapd(1:im,1:jend-jsta+1,cfld)=GRID1(1:im,jsta:jend) + datapd(1:iend-ista+1,1:jend-jsta+1,cfld)=GRID1(ista:iend,jsta:jend) endif ENDIF ! @@ -172,7 +178,7 @@ SUBROUTINE FIXED IF (IGET(150)>0) THEN !$omp parallel do private(i,j) DO J=JSTA,JEND - DO I=1,IM + DO I=ISTA,IEND ! SNOK = AMAX1(SNO(I,J),0.0) ! SNOFAC = AMIN1(SNOK*50.0,1.0) ! EGRID1(I,J)=ALB(I,J)+(1.-VEGFRC(I,J))*SNOFAC @@ -185,11 +191,11 @@ SUBROUTINE FIXED ENDDO ENDDO ! CALL E2OUT(150,000,GRID1,GRID2,GRID1,GRID2,IM,JM) - CALL SCLFLD(GRID1,100.,IM,JM) + CALL SCLFLD(GRID1(ista:iend,jsta:jend),100.,IM,JM) if(grib=='grib2') then cfld=cfld+1 fld_info(cfld)%ifld=IAVBLFLD(IGET(150)) - datapd(1:im,1:jend-jsta+1,cfld)=GRID1(1:im,jsta:jend) + datapd(1:iend-ista+1,1:jend-jsta+1,cfld)=GRID1(ista:iend,jsta:jend) endif ENDIF ! @@ -215,7 +221,7 @@ SUBROUTINE FIXED IF (ID(18)<0) ID(18) = 0 !$omp parallel do private(i,j) DO J=JSTA,JEND - DO I=1,IM + DO I=ISTA,IEND IF(ABS(AVGALBEDO(I,J)-SPVAL)>SMALL) THEN GRID1(I,J) = AVGALBEDO(I,J)*100. ELSE @@ -233,14 +239,14 @@ SUBROUTINE FIXED fld_info(cfld)%ntrange=0 endif fld_info(cfld)%tinvstat=IFHR-ID(18) - datapd(1:im,1:jend-jsta+1,cfld)=GRID1(1:im,jsta:jend) + datapd(1:iend-ista+1,1:jend-jsta+1,cfld)=GRID1(ista:iend,jsta:jend) endif ENDIF ! IF (IGET(226)>0) THEN !$omp parallel do private(i,j) DO J=JSTA,JEND - DO I=1,IM + DO I=ISTA,IEND IF(ABS(ALBASE(I,J)-SPVAL)>SMALL) THEN GRID1(I,J) = ALBASE(I,J)*100. ELSE @@ -251,14 +257,14 @@ SUBROUTINE FIXED if(grib=='grib2') then cfld=cfld+1 fld_info(cfld)%ifld=IAVBLFLD(IGET(226)) - datapd(1:im,1:jend-jsta+1,cfld)=GRID1(1:im,jsta:jend) + datapd(1:iend-ista+1,1:jend-jsta+1,cfld)=GRID1(ista:iend,jsta:jend) endif ENDIF ! Max snow albedo IF (IGET(227)>0) THEN !$omp parallel do private(i,j) DO J=JSTA,JEND - DO I=1,IM + DO I=ISTA,IEND IF (ABS(MXSNAL(I,J)-SPVAL)>SMALL) THEN ! sea point, albedo=0.06 same as snow free albedo IF( (abs(SM(I,J)-1.) < 1.0E-5) ) THEN @@ -276,7 +282,7 @@ SUBROUTINE FIXED !$omp parallel do private(i,j) DO J=JSTA,JEND - DO I=1,IM + DO I=ISTA,IEND IF(ABS(MXSNAL(I,J)-SPVAL)>SMALL) THEN GRID1(I,J) = MXSNAL(I,J)*100. ELSE @@ -287,7 +293,7 @@ SUBROUTINE FIXED if(grib=='grib2') then cfld=cfld+1 fld_info(cfld)%ifld=IAVBLFLD(IGET(227)) - datapd(1:im,1:jend-jsta+1,cfld)=GRID1(1:im,jsta:jend) + datapd(1:iend-ista+1,1:jend-jsta+1,cfld)=GRID1(ista:iend,jsta:jend) endif ENDIF ! @@ -295,7 +301,7 @@ SUBROUTINE FIXED IF (IGET(151)>0) THEN !$omp parallel do private(i,j) DO J=JSTA,JEND - DO I=1,IM + DO I=ISTA,IEND GRID1(I,J) = SPVAL IF (MODELNAME == 'NMM') THEN IF( (abs(SM(I,J)-1.) < 1.0E-5) ) THEN @@ -312,7 +318,7 @@ SUBROUTINE FIXED if(grib=='grib2') then cfld=cfld+1 fld_info(cfld)%ifld=IAVBLFLD(IGET(151)) - datapd(1:im,1:jend-jsta+1,cfld)=GRID1(1:im,jsta:jend) + datapd(1:iend-ista+1,1:jend-jsta+1,cfld)=GRID1(ista:iend,jsta:jend) endif ENDIF @@ -321,14 +327,29 @@ SUBROUTINE FIXED IF (IGET(968)>0) THEN !$omp parallel do private(i,j) DO J=JSTA,JEND - DO I=1,IM + DO I=ISTA,IEND GRID1(I,J) = TI(I,J) ENDDO ENDDO if(grib=='grib2') then cfld=cfld+1 fld_info(cfld)%ifld=IAVBLFLD(IGET(968)) - datapd(1:im,1:jend-jsta+1,cfld)=GRID1(1:im,jsta:jend) + datapd(1:iend-ista+1,1:jend-jsta+1,cfld)=GRID1(ista:iend,jsta:jend) + endif + ENDIF +! +! FOUNDATION TEMPERAURE. + IF (IGET(549)>0) THEN +!$omp parallel do private(i,j) + DO J=JSTA,JEND + DO I=ISTA,IEND + GRID1(I,J) = FDNSST(I,J) + ENDDO + ENDDO + if(grib=='grib2') then + cfld=cfld+1 + fld_info(cfld)%ifld=IAVBLFLD(IGET(549)) + datapd(1:iend-ista+1,1:jend-jsta+1,cfld)=GRID1(ista:iend,jsta:jend) endif ENDIF @@ -336,14 +357,14 @@ SUBROUTINE FIXED IF (IGET(248)>0) THEN !$omp parallel do private(i,j) DO J=JSTA,JEND - DO I=1,IM + DO I=ISTA,IEND GRID1(I,J) = EPSR(I,J) ENDDO ENDDO if(grib=='grib2') then cfld=cfld+1 fld_info(cfld)%ifld=IAVBLFLD(IGET(248)) - datapd(1:im,1:jend-jsta+1,cfld)=GRID1(1:im,jsta:jend) + datapd(1:iend-ista+1,1:jend-jsta+1,cfld)=GRID1(ista:iend,jsta:jend) endif ENDIF diff --git a/sorc/ncep_post.fd/FRZLVL.f b/sorc/ncep_post.fd/FRZLVL.f index d84bd7da4..507e1d086 100644 --- a/sorc/ncep_post.fd/FRZLVL.f +++ b/sorc/ncep_post.fd/FRZLVL.f @@ -1,67 +1,43 @@ !> @file -! -!> SUBPROGRAM: FRZLVL COMPUTES FRZING LVL Z AND RH -!! PRGRMMR: TREADON ORG: W/NP2 DATE: 92-12-22 -!! T. Smirnova - 8-27-2010 - added PFRZL to the output -!! -!! ABSTRACT: -!! THIS ROUTINE COMPUTES THE FREEZING LEVEL HEIGHT AND RELATIVE -!! HUMIDITY AT THIS LEVEL FOR EACH MASS POINT ON THE ETA GRID. -!! THE COMPUTED FREEZING LEVEL HEIGHT IS THE MEAN SEA LEVEL -!! HEIGHT. AT EACH MASS POINT WE MOVE UP FROM THE SURFACE TO -!! FIND THE FIRST ETA LAYER WHERE THE TEMPERATURE IS LESS THAN -!! 273.16K. VERTICAL INTERPOLATION IN TEMPERATURE TO THE FREEZING -!! TEMPERATURE GIVES THE FREEZING LEVEL HEIGHT. PRESSURE AND -!! SPECIFIC HUMIDITY ARE INTERPOLATED TO THIS LEVEL AND ALONG WITH -!! THE TEMPERATURE PROVIDE THE FREEZING LEVEL RELATIVE HUMIDITY. -!! IF THE SURFACE (SKIN) TEMPERATURE IS BELOW FREEZING, THE ROUTINE -!! USES SURFACE BASED FIELDS TO COMPUTE THE RELATIVE HUMIDITY. -!! -!! NOTE THAT IN POSTING FREEZING LEVEL DATA THE LFM LOOK-ALIKE FILE -!! (IE, GRID 26), WE PACK 273.15K AS THE FREEZING TEMPERATURE. ALL -!! OTHER OUTPUT GRIDS USE 273.16K -!! -!! PROGRAM HISTORY LOG: -!! 92-12-22 RUSS TREADON -!! 93-06-10 RUSS TREADON - CORRECTED FREEZING LEVEL HEIGHTS TO BE -!! WITH REPSECT TO MEAN SEA LEVEL, NOT -!! ABOVE GROUND LEVEL. -!! 98-06-15 T BLACK - CONVERSION FROM 1-D TO 2-D -!! 98-08-17 MIKE BALDWIN - COMPUTE RH OVER ICE IF NECESSARY -!! 98-12-22 MIKE BALDWIN - BACK OUT RH OVER ICE -!! 00-01-04 JIM TUCCILLO - MPI VERSION -!! 01-10-25 H CHUANG - MODIFIED TO PROCESS HYBRID MODEL OUTPUT -!! 02-01-15 MIKE BALDWIN - WRF VERSION -!! 19-10-30 Bo CUI - REMOVE "GOTO" STATEMENT -!! 20-11-10 JESSE MENG - USE UPP_PHYSICS MODULE -!! -!! USAGE: CALL FRZLVL(ZFRZ,RHFRZ) -!! INPUT ARGUMENT LIST: -!! NONE -!! -!! OUTPUT ARGUMENT LIST: -!! ZFRZ - ABOVE GROUND LEVEL FREEZING HEIGHT. -!! RHFRZ - RELATIVE HUMIDITY AT FREEZING LEVEL. -!! PFRZL - PRESSURE AT FREEZING LEVEL. -!! -!! OUTPUT FILES: -!! NONE -!! -!! SUBPROGRAMS CALLED: -!! UTILITIES: -!! NONE -!! LIBRARY: -!! COMMON - -!! LOOPS -!! PVRBLS -!! MASKS -!! MAPOT -!! POSTVAR -!! -!! ATTRIBUTES: -!! LANGUAGE: FORTRAN -!! MACHINE : CRAY C-90 -!! +!> @brief Subroutine that computes FRZING LVL, Z and RH. +!> +!> This routine computes the freezing level height and relative +!> humidity at this level for each mass point on the ETA grid. +!> The computed freezing level height is the mean sea level +!> height. At each mass point we move up from the surface to +!> find the first ETA layer where the temperature is less than +!> 273.16K. Vertical interpolation in temperature to the freezing +!> temperature gives the freezing level height. Pressure and +!> specific humidity are interpolated to this level and along with +!> the temperature provide the freezing level relative humidity. +!> If the surface (skin) temperature is below freezing, the routine +!> uses surface based fields to compute the relative humidity. +!> +!> Note that in posting freezing level data the LFM look-alike file +!> (IE, GRID 26), we pack 273.15K as the freezing temperature. All +!> other output grids use 273.16K. +!> +!> @param[out] ZFRZ Above ground level freezing height. +!> @param[out] RHFRZ Relative humidity at freezing level. +!> @param[out] PFRZL pressure at freezing level. +!> +!> ### Program History Log +!> Date | Programmer | Comments +!> -----|------------|--------- +!> 1992-12-22 | Russ Treadon | Initial +!> 1993-06-05 | Russ Treadon | Corrected freezing level heights to be with respect to mean sea level, not above ground level +!> 1998-06-15 | T Black | Conversion from 1-D to 2-D +!> 1998-08-17 | Mike Baldwin | Compute RH over ice if necessary +!> 1998-12-22 | Mike Baldwin | Back out RH over ice +!> 2000-01-04 | Jim Tuccillo | MPI version +!> 2001-10-25 | H Chuang | Modified to process hybrid model output +!> 2002-01-15 | Mike Baldwin | WRF version +!> 2010-08-27 | T. Smirnova | Added PFRZL to the output +!> 2019-10-30 | Bo Cui | Remove "GOTO" statement +!> 2020-11-10 | Jesse Meng | Use UPP_PHYSICS module +!> 2021-10-15 |JESSE MENG | 2D DECOMPOSITION +!> +!> @author Russ Treadon W/NP2 @date 1992-12-22 SUBROUTINE FRZLVL(ZFRZ,RHFRZ,PFRZL) ! @@ -70,7 +46,7 @@ SUBROUTINE FRZLVL(ZFRZ,RHFRZ,PFRZL) use vrbls2d, only: fis, tshltr, pshltr, qshltr use masks, only: lmh use params_mod, only: gi, d00, capa, d0065, tfrz, pq0, a2, a3, a4 - use ctlblk_mod, only: jsta, jend, spval, lm, modelname, im + use ctlblk_mod, only: jsta, jend, spval, lm, modelname, im, ista, iend use physcons_post, only: con_rd, con_rv, con_eps, con_epsm1 use upp_physics, only: FPVSNEW @@ -78,7 +54,7 @@ SUBROUTINE FRZLVL(ZFRZ,RHFRZ,PFRZL) ! ! DECLARE VARIABLES. ! - REAL,dimension(im,jsta:jend) :: RHFRZ, ZFRZ, PFRZL + REAL,dimension(ista:iend,jsta:jend) :: RHFRZ, ZFRZ, PFRZL integer I,J,LLMH,L real HTSFC,PSFC,TSFC,QSFC,QSAT,RHSFC,DELZ,DELT,DELQ,DELALP, & DELZP,ZL,DZABV,QFRZ,ALPL,ALPH,ALPFRZ,PFRZ,QSFRZ,RHZ,ZU, & @@ -98,7 +74,7 @@ SUBROUTINE FRZLVL(ZFRZ,RHFRZ,PFRZL) ! & zl,zu) DO 20 J=JSTA,JEND - DO 20 I=1,IM + DO 20 I=ISTA,IEND HTSFC = FIS(I,J)*GI LLMH = NINT(LMH(I,J)) RHFRZ(I,J) = D00 diff --git a/sorc/ncep_post.fd/FRZLVL2.f b/sorc/ncep_post.fd/FRZLVL2.f index ff1d3ccd7..93e367513 100644 --- a/sorc/ncep_post.fd/FRZLVL2.f +++ b/sorc/ncep_post.fd/FRZLVL2.f @@ -1,65 +1,48 @@ !> @file -! -!> SUBPROGRAM: FRZLVL COMPUTES FRZING LVL Z AND RH -!! PRGRMMR: TREADON ORG: W/NP2 DATE: 92-12-22 -!! -!! ABSTRACT: -!! THIS ROUTINE COMPUTES THE ISOTHERMAL LEVEL HEIGHT AND RELATIVE -!! HUMIDITY AT THIS LEVEL FOR EACH MASS POINT ON THE ETA GRID. -!! THE COMPUTED ISOTHERMAL LEVEL HEIGHT IS THE MEAN SEA LEVEL -!! HEIGHT. AT EACH MASS POINT WE MOVE UP FROM THE SURFACE TO -!! FIND THE LAST ETA LAYER WHERE THE TEMPERATURE IS LESS THAN -!! ISOTHERM AND THE TEMP IN THE LAYER BELOW IS ABOVE ISOTHERM. -!! VERTICAL INTERPOLATION IN TEMPERATURE TO THE ISOTHERMAL -!! TEMPERATURE GIVES THE ISOTHERMAL LEVEL HEIGHT. PRESSURE AND -!! SPECIFIC HUMIDITY ARE INTERPOLATED TO THIS LEVEL AND ALONG WITH -!! THE TEMPERATURE PROVIDE THE ISOTHERMAL LEVEL RELATIVE HUMIDITY. -!! IF THE ENTIRE ATMOSPHERE IS BELOW ISOTHERM, THE ROUTINE -!! USES SURFACE BASED FIELDS TO COMPUTE THE RELATIVE HUMIDITY. -!! -!! NOTE THAT IN POSTING FREEZING LEVEL DATA THE LFM LOOK-ALIKE FILE -!! (IE, GRID 26), WE PACK 273.15K AS THE FREEZING TEMPERATURE. ALL -!! OTHER OUTPUT GRIDS USE 273.16K -!! -!! PROGRAM HISTORY LOG: -!! 92-12-22 RUSS TREADON -!! 93-06-10 RUSS TREADON - CORRECTED FREEZING LEVEL HEIGHTS TO BE -!! WITH REPSECT TO MEAN SEA LEVEL, NOT -!! ABOVE GROUND LEVEL. -!! 95-03-10 MIKE BALDWIN - GET HIGHEST FREEZING LEVEL. -!! 98-06-15 T BLACK - CONVERSION FROM 1-D TO 2-D -!! 98-08-17 MIKE BALDWIN - COMPUTE RH OVER ICE IF NECESSARY -!! 98-12-22 MIKE BALDWIN - BACK OUT RH OVER ICE -!! 98-12-22 MIKE BALDWIN - BACK OUT RH OVER ICE -!! 00-01-04 JIM TUCCILLO - MPI VERSION -!! 01-10-25 H CHUANG - MODIFIED TO PROCESS HYBRID MODEL OUTPUT -!! 02-01-15 MIKE BALDWIN - WRF VERSION -!! 10-08-27 T. Smirnova - added PFRZL to the output -!! 16-01-21 C. Alexander - Generalized function for any isotherm -!! 20-11-10 JESSE MENG - USE UPP_PHYSICS MODULE -!! -!! USAGE: CALL FRZLVL2(ISOTHERM,ZFRZ,RHFRZ,PFRZL) -!! INPUT ARGUMENT LIST: -!! ISOTHERM - ISOTHERMAL VALUE OF HEIGHT TO BE OUTPUT. -!! -!! OUTPUT ARGUMENT LIST: -!! ZFRZ - ABOVE GROUND LEVE/ZFL AT ISOTHERM HEIGHT. -!! RHFRZ - RELATIVE HUMIDITY AT ISOTHERM LEVEL. -!! PFRZL - PRESSURE AT ISOTHERM LEVEL. -!! -!! OUTPUT FILES: -!! NONE -!! -!! SUBPROGRAMS CALLED: -!! UTILITIES: -!! NONE -!! LIBRARY: -!! COMMON - -!! -!! ATTRIBUTES: -!! LANGUAGE: FORTRAN -!! MACHINE : CRAY C-90 -!! +!> @brief Subroutine that computes FRZING LVL, Z and RH. +!> +!> This routine computes the isothermal level height and relative +!> humidity at this level for each mass point on the ETA grid. +!> The computed isothermal level height is the mean sea level +!> height. At each mass point we move up from the surface to +!> find the last ETA layer where the temperature is less than +!> isotherm and the temp in the layer below is above isotherm. +!> Vertical interpolation in temperature to the isotherm +!> temperature gives the isothermal level height. Pressure and +!> specific humidity are interpolated to this level and along with +!> the temperature provide the isothermal level relative humidity. +!> If the entire atmosphere is below isotherm, the routine +!> uses surface based fields to compute the relative humidity. +!> +!> Note that in posting freezing level data the LFM look-alike file +!> (IE, GRID 26), we pack 273.15K as the freezing temperature. All +!> other output grids use 273.16K. +!> +!> @param[in] isotherm isothermal value of height to be output. +!> @param[out] ZFRZ Above ground level/ZFL at isotherm height. +!> @param[out] RHFRZ Relative humidity at isotherm level. +!> @param[out] PFRZL pressure at isotherm level. +!> +!> ### Program History Log +!> Date | Programmer | Comments +!> -----|------------|--------- +!> 1992-12-22 | Russ Treadon | Initial +!> 1993-06-05 | Russ Treadon | Corrected freezing level heights to be with respect to mean sea level, not above ground level +!> 1995-03-10 | Mike Baldwin | Get highest freezing level +!> 1998-06-15 | T Black | Conversion from 1-D to 2-D +!> 1998-08-17 | Mike Baldwin | Compute RH over ice if necessary +!> 1998-12-22 | Mike Baldwin | Back out RH over ice +!> 2000-01-04 | Jim Tuccillo | MPI version +!> 2001-10-25 | H Chuang | Modified to process hybrid model output +!> 2002-01-15 | Mike Baldwin | WRF version +!> 2010-08-27 | T. Smirnova | Added PFRZL to the output +!> 2016-01-21 | C. Alexander | Generalized function for any isotherm +!> 2019-10-30 | Bo Cui | Remove "GOTO" statement +!> 2020-11-10 | Jesse Meng | Use UPP_PHYSICS module +!> 2021-10-15 | JESSE MENG | 2D DECOMPOSITION +!> 2021-07-28 | W. Meng | Restrict compuatation from undefined grids +!> +!> @author Russ Treadon W/NP2 @date 1992-12-22 SUBROUTINE FRZLVL2(ISOTHERM,ZFRZ,RHFRZ,PFRZL) ! @@ -67,7 +50,7 @@ SUBROUTINE FRZLVL2(ISOTHERM,ZFRZ,RHFRZ,PFRZL) use vrbls2d, only: fis, tshltr, pshltr, qz0, qs, qshltr use masks, only: lmh, sm use params_mod, only: gi, d00, capa, d0065, tfrz, pq0, a2, a3, a4, d50 - use ctlblk_mod, only: jsta, jend, spval, lm, modelname, im + use ctlblk_mod, only: jsta, jend, spval, lm, modelname, im, ista, iend use physcons_post, only: con_rd, con_rv, con_eps, con_epsm1 use upp_physics, only: FPVSNEW @@ -80,7 +63,7 @@ SUBROUTINE FRZLVL2(ISOTHERM,ZFRZ,RHFRZ,PFRZL) ! REAL,PARAMETER::PUCAP=300.0E2 real,intent(in) :: ISOTHERM - REAL,dimension(im,jsta:jend),intent(out) :: RHFRZ, ZFRZ, PFRZL + REAL,dimension(ista:iend,jsta:jend),intent(out) :: RHFRZ, ZFRZ, PFRZL !jw integer I,J,L,LICE,LLMH real HTSFC,PSFC,QSFC,RHSFC,QW,QSAT,DELZ,DELT,DELQ,DELALP,DELZP, & @@ -94,7 +77,8 @@ SUBROUTINE FRZLVL2(ISOTHERM,ZFRZ,RHFRZ,PFRZL) ! DO 20 J=JSTA,JEND - DO 20 I=1,IM + DO 20 I=ISTA,IEND + IF(FIS(I,J) @file -! -!> SUBPROGRAM: GET_BITS COMPUTE NUMBER OF BITS AND ROUND FIELD. -!! PRGMMR: IREDELL ORG: W/NP23 DATE: 92-10-31 -!! -!! ABSTRACT: THE NUMBER OF BITS REQUIRED TO PACK A GIVEN FIELD -!! AT A PARTICULAR DECIMAL SCALING IS COMPUTED USING THE FIELD RANGE. -!! THE FIELD IS ROUNDED OFF TO THE DECIMAL SCALING FOR PACKING. -!! THE MINIMUM AND MAXIMUM ROUNDED FIELD VALUES ARE ALSO RETURNED. -!! GRIB BITMAP MASKING FOR VALID DATA IS OPTIONALLY USED. -!! -!! PROGRAM HISTORY LOG: -!! 92-10-31 IREDELL -!! 95-04-14 BALDWIN - MODIFY FOLLOWING KEITH BRILL'S CODE -!! TO USE SIG DIGITS TO COMPUTE DEC SCALE -!! -!! USAGE: CALL GET_BITS(IBM,ISGDS,LEN,MG,G,ISCALE,GROUND,GMIN,GMAX,NBIT) -!! INPUT ARGUMENT LIST: -!! IBM - INTEGER BITMAP FLAG (=0 FOR NO BITMAP) -!! SGDS - MAXIMUM SIGNIFICANT DIGITS TO KEEP -!! (E.G. SGDS=3.0 KEEPS 3 SIGNIFICANT DIGITS) -!! OR BINARY PRECISION IF <0 -!! (E.G. SGDS=-2.0 KEEPS FIELD TO NEAREST 1/4 -!! -3.0 " " 1/8 -!! 2**SGDS PRECISION) -!! LEN - INTEGER LENGTH OF THE FIELD AND BITMAP -!! MG - INTEGER (LEN) BITMAP IF IBM=1 (0 TO SKIP, 1 TO KEEP) -!! G - REAL (LEN) FIELD -!! -!! OUTPUT ARGUMENT LIST: -!! ISCALE - INTEGER DECIMAL SCALING -!! GROUND - REAL (LEN) FIELD ROUNDED TO DECIMAL SCALING -!! GMIN - REAL MINIMUM VALID ROUNDED FIELD VALUE -!! GMAX - REAL MAXIMUM VALID ROUNDED FIELD VALUE -!! NBIT - INTEGER NUMBER OF BITS TO PACK -!! -!! SUBPROGRAMS CALLED: -!! ISRCHNE - FIND FIRST VALUE IN AN ARRAY NOT EQUAL TO TARGET VALUE -!! -!! ATTRIBUTES: -!! LANGUAGE: FORTRAN -!! -!! +!> @brief get_bits() computes number of bits and round field. +!> +!> The number of bits requited to pack a given field +!> at a particular decimal scaling is computed using the field range. +!> The field is rounded off to the decimal scaling for packing. +!> The minimum and maximum rounded field values are also returned. +!> Grib bitmap masking for valid data is optionally used. +!> +!> @param[in] IBM Integer bitmap flag (=0 for no bitmap). +!> @param[in] SGDS Maximum significant digits to keep. +!>
+!> (E.G. SGDS=3.0 keeps 3 significant digits)
+!>  or binary precision if <0
+!> (E.G. SGDS=-2.0 keeps field to nearest 1/4
+!>            -3.0 keeps field to nearest 1/8
+!>            2**SGDS precision)
+!>
+!> @param[in] LEN Integer length of the field and bitmap. +!> @param[in] MG Integet (LEN) bitmap if IBM=1 (0 to skip, 1 tp keep). +!> @param[in] G Real (LEN) field. +!> @param[out] ISCALE Integer decimal scaling. +!> @param[out] GROUND Real (LEN) field rounded to decimal scaling. +!> @param[out] GMIN Real minimum valid rounded field value. +!> @param[out] GMAX Real maximum valid rounded field value. +!> @param[out] NBIT Integer number of bits to pack. +!> +!> ### Program History Log +!> Date | Programmer | Comments +!> -----|------------|--------- +!> 1992-10-31 | Iredell | Initial +!> 1995-04-14 | Baldwin | Modify following Keith Brill's code to use sig digits to compute DEC scale +!> +!> @author Iredell W/NP23 @date 1992-10-31 SUBROUTINE GET_BITS(IBM,SGDS,LEN,MG,G,ISCALE,GROUND, & GMIN,GMAX,NBIT) @@ -91,43 +82,36 @@ SUBROUTINE GET_BITS(IBM,SGDS,LEN,MG,G,ISCALE,GROUND, & ! - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - RETURN END - SUBROUTINE FNDBIT ( rmin, rmax, rdb, nmbts, iscale, iret ) -!************************************************************************ -!* FNDBIT * -!* * -!* This subroutine computes the number of packing bits given the * -!* maximum number of significant digits to preserve or the binary * -!* precision to store the data. The binary precision is given as a * -!* negative integer, ISCALE will always be zero in this case. * -!* * -!* The binary precision translates as follows: * -!* -1 => store data to nearest 1/2 * -!* -2 => store data to nearest 1/4 * -!* -3 => store data to nearest 1/8 * -!* * -!* Note that a fractional number of significant digits is allowed. * -!* * -!* FNDBIT ( AMIN, AMAX, RDB, NBITS, ISCALE, IRET ) * -!* * -!* Input parameters: * -!* AMIN REAL Minimum value * -!* AMAX REAL Maximum value * -!* RDB REAL Maximum # of significant digits * -!* OR binary precision if < 0 * -!* * -!* Output parameters: * -!* NBITS INTEGER Number of bits for packing * -!* ISCALE INTEGER Power of 10 scaling to use * -!* IRET INTEGER Return code * -!* 0 = normal return * -!** * -!* Log: * -!* K. Brill/NMC 06/92 * -!* K. Brill/EMC 12/95 Added binary precision * -!* M. Baldwin 10/96 Added fix for negative nmbts -!************************************************************************ -!* -! +!> fndbit() computes the number of packing bits given the +!> maximum number of significant digits to preserve or the binary +!> precision to store the data. The binary precision is given as a +!> negative integer, ISCALE will always be zero in this case. +!> +!> The binary precision translates as follows: +!>
+!>     -1  =>  store data to nearest 1/2
+!>     -2  =>  store data to nearest 1/4
+!>     -3  =>  store data to nearest 1/8
+!> 
+!> +!> Note that a fractional number of significant digits is allowed. +!> +!> @param[in] AMIN Real Minimum value. +!> @param[in] AMAX Real Maximum value. +!> @param[in] RDB Real Maximum # of significant digits OR binary precision if < 0. +!> @param[out] NBITS Integer Number of bits for packing. +!> @param[out] ISCALE Integer Power of 10 scaling to use. +!> @param[out] IRET Integer Return code. 0 = normal return. +!> +!> ### Program History Log +!> Date | Programmer | Comments +!> -----|------------|--------- +!> 1992-06-?? | K Brill | Initial +!> 1995-12-?? | K Brill | Added binary precision +!> 1996-10-?? | M Baldwin | Added fix for negative nmbts +!> +!> @author K. Brill NMC @date 1992-06-?? + SUBROUTINE FNDBIT ( rmin, rmax, rdb, nmbts, iscale, iret ) implicit none ! integer,intent(inout) :: iscale,nmbts diff --git a/sorc/ncep_post.fd/GFSPOST.F b/sorc/ncep_post.fd/GFSPOST.F index 42202ed89..c64d13b7d 100644 --- a/sorc/ncep_post.fd/GFSPOST.F +++ b/sorc/ncep_post.fd/GFSPOST.F @@ -1,57 +1,43 @@ !> @file -! -!> Subprogram: pvetc Compute potential vorticity, etc -!! Prgmmr: Iredell Org: np23 Date: 1999-10-18 -!! -!! Abstract: This subprogram computes -!! the Montgomery streamfunction -!! hm=cp*t+g*z -!! the specific entropy -!! s=cp*log(t/t0)-r*log(p/p0) -!! the Brunt-Vaisala frequency squared -!! bvf2=g/cp*ds/dz -!! the potential vorticity defined as -!! pvn=(av*ds/dz-dv/dz*ds/dx+du/dz*ds/dy)/rho/cp -!! the potential temperature -!! theta=t0*exp(s/cp) -!! the static stability -!! sigma=t/g*bvf2 -!! and the potential vorticity in PV units -!! pvu=10**-6*theta*pvn -!! -!! Program history log: -!! 1999-10-18 Mark Iredell -!! -!! Usage: call pvetc(km,p,px,py,t,tx,ty,h,u,v,av,s,bvf2,pvn,theta,sigma,pvu) -!! Input argument list: -!! km integer number of levels -!! p real (km) pressure (Pa) -!! px real (km) pressure x-gradient (Pa/m) -!! py real (km) pressure y-gradient (Pa/m) -!! t real (km) (virtual) temperature (K) -!! tx real (km) (virtual) temperature x-gradient (K/m) -!! ty real (km) (virtual) temperature y-gradient (K/m) -!! h real (km) height (m) -!! u real (km) x-component wind (m/s) -!! v real (km) y-component wind (m/s) -!! av real (km) absolute vorticity (1/s) -!! Output argument list: -!! hm real (km) Montgomery streamfunction (m**2/s**2) -!! s real (km) specific entropy (J/K/kg) -!! bvf2 real (km) Brunt-Vaisala frequency squared (1/s**2) -!! pvn real (km) potential vorticity (m**2/kg/s) -!! theta real (km) (virtual) potential temperature (K) -!! sigma real (km) static stability (K/m) -!! pvu real (km) potential vorticity (10**-6*K*m**2/kg/s) -!! -!! Modules used: -!! physcons Physical constants -!! -!! Attributes: -!! Language: Fortran 90 -!! -!! - subroutine pvetc(km,p,px,py,t,tx,ty,h,u,v,av,hm,s,bvf2,pvn,theta,sigma,pvu) +!> pvetc() computes potential vorticity, etc. +!> +!> This subprogram computes +!> computation | equation +!> -----------------|------------ +!> Montgomery streamfunction | hm=cp*t+g*z +!> Specific entropy | s=cp*log(t/t0)-r*log(p/p0) +!> Brunt-Vaisala frequency squared | bvf2=g/cp*ds/dz +!> Potential vorticity | pvn=(av*ds/dz-dv/dz*ds/dx+du/dz*ds/dy)/rho/cp +!> Potential temperature | theta=t0*exp(s/cp) +!> Static stability | sigma=t/g*bvf2 +!> Potential vorticity in PV units | pvu=10**-6*theta*pvn +!> +!> @param[in] km integer number of levels. +!> @param[in] p real (km) pressure (Pa). +!> @param[in] px real (km) pressure x-gradient (Pa/m). +!> @param[in] py real (km) pressure y-gradient (Pa/m). +!> @param[in] t real (km) (virtual) temperature (K). +!> @param[in] tx real (km) (virtual) temperature x-gradient (K/m). +!> @param[in] ty real (km) (virtual) temperature y-gradient (K/m). +!> @param[in] h real (km) height (m). +!> @param[in] u real (km) x-component wind (m/s). +!> @param[in] v real (km) y-component wind (m/s). +!> @param[in] av real (km) absolute vorticity (1/s). +!> @param[out] hm real (km) Montgomery streamfunction (m**2/s**2). +!> @param[out] s real (km) specific entropy (J/K/kg). +!> @param[out] bvf2 real (km) Brunt-Vaisala frequency squared (1/s**2). +!> @param[out] pvn real (km) potential vorticity (m**2/kg/s). +!> @param[out] theta real (km) (virtual) potential temperature (K). +!> @param[out] sigma real (km) static stability (K/m). +!> @param[out] pvu real (km) potential vorticity (10**-6*K*m**2/kg/s). +!> +!> ### Program History Log +!> Date | Programmer | Comments +!> -----|------------|--------- +!> 1999-10-18 | Mark Iredell | Initial +!> +!> @author Mark Iredell np23 @date 1999-10-18 + subroutine pvetc(km,p,px,py,t,tx,ty,h,u,v,av,hm,s,bvf2,pvn,theta,sigma,pvu) use physcons_post, only: con_cp, con_g, con_rd, con_rocp ! @@ -91,46 +77,37 @@ subroutine pvetc(km,p,px,py,t,tx,ty,h,u,v,av,hm,s,bvf2,pvn,theta,sigma,pvu) enddo end subroutine ! - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - subroutine p2th(km,theta,u,v,h,t,pvu,sigma,rh,omga,kth,th & +! - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - +!> p2th() interpolates to isentropic level. +!> +!> This subprogram interpolates fields to given isentropic levels. +!> The interpolation is linear in entropy. +!> Outside the domain the bitmap is set to false. +!> +!> @param[in] km integer number of levels. +!> @param[in] theta real (km) potential temperature (K). +!> @param[in] u real (km) x-component wind (m/s). +!> @param[in] v real (km) y-component wind (m/s). +!> @param[in] h real (km) height (m). +!> @param[in] t real (km) temperature (K). +!> @param[in] pvu real (km) potential vorticity in PV units (10**-6*K*m**2/kg/s). +!> @param[in] kth integer number of isentropic levels. +!> @param[in] th real (kth) isentropic levels (K). +!> @param[out] lpv logical*1 (kth) bitmap. +!> @param[out] uth real (kth) x-component wind (m/s). +!> @param[out] vth real (kth) y-component wind (m/s). +!> @param[out] hth real (kth) height (m). +!> @param[out] tth real (kth) temperature (K). +!> @param[out] zth real (kth) potential vorticity in PV units (10**-6*K*m**2/kg/s). +!> +!> ### Program History Log +!> Date | Programmer | Comments +!> -----|------------|--------- +!> 1999-10-18 | Mark Iredell | Initial +!> +!> @author Mark Iredell np23 @date 1999-10-18 + subroutine p2th(km,theta,u,v,h,t,pvu,sigma,rh,omga,kth,th & ,lth,uth,vth,hth,tth,zth,sigmath,rhth,oth) -!$$$ Subprogram documentation block -! -! Subprogram: p2th Interpolate to isentropic level -! Prgmmr: Iredell Org: np23 Date: 1999-10-18 -! -! Abstract: This subprogram interpolates fields to given isentropic levels. -! The interpolation is linear in entropy. -! Outside the domain the bitmap is set to false. -! -! Program history log: -! 1999-10-18 Mark Iredell -! -! Usage: call p2th(km,theta,u,v,h,t,puv,kth,th,uth,vth,tth) -! Input argument list: -! km integer number of levels -! theta real (km) potential temperature (K) -! u real (km) x-component wind (m/s) -! v real (km) y-component wind (m/s) -! h real (km) height (m) -! t real (km) temperature (K) -! pvu real (km) potential vorticity in PV units (10**-6*K*m**2/kg/s) -! kth integer number of isentropic levels -! th real (kth) isentropic levels (K) -! Output argument list: -! lpv logical*1 (kth) bitmap -! uth real (kth) x-component wind (m/s) -! vth real (kth) y-component wind (m/s) -! hth real (kth) height (m) -! tth real (kth) temperature (K) -! zth real (kth) potential vorticity in PV units (10**-6*K*m**2/kg/s) -! -! Subprograms called: -! rsearch1 search for a surrounding real interval -! -! Attributes: -! Language: Fortran 90 -! -!$$$ implicit none integer,intent(in):: km,kth real,intent(in),dimension(km):: theta,u,v,h,t,pvu,sigma,rh,omga @@ -161,52 +138,42 @@ subroutine p2th(km,theta,u,v,h,t,pvu,sigma,rh,omga,kth,th & enddo end subroutine ! - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - subroutine p2pv(km,pvu,h,t,p,u,v,kpv,pv,pvpt,pvpb,& +!> p2pv() interpolates to potential vorticity level. +!> +!> This subprogram interpolates fields to given potential vorticity +!> levels within given pressure limits. +!> The output level is the first encountered from the top pressure limit. +!> If the given potential vorticity level is not found, the outputs are zero +!> and the bitmap is false. The interpolation is linear in potential vorticity. +!> +!> @param[in] km integer number of levels. +!> @param[in] pvu real (km) potential vorticity in PV units (10**-6*K*m**2/kg/s). +!> @param[in] h real (km) height (m). +!> @param[in] t real (km) temperature (K). +!> @param[in] p real (km) pressure (Pa). +!> @param[in] u real (km) x-component wind (m/s). +!> @param[in] v real (km) y-component wind (m/s). +!> @param[in] kpv integer number of potential vorticity levels. +!> @param[in] pv real (kpv) potential vorticity levels (10**-6*K*m**2/kg/s). +!> @param[in] pvpt real (kpv) top pressures for PV search (Pa). +!> @param[in] pvpb real (kpv) bottom pressures for PV search (Pa). +!> @param[out] lpv logical*1 (kpv) bitmap. +!> @param[out] upv real (kpv) x-component wind (m/s). +!> @param[out] vpv real (kpv) y-component wind (m/s). +!> @param[out] hpv real (kpv) temperature (K). +!> @param[out] tpv real (kpv) temperature (K). +!> @param[out] ppv real (kpv) pressure (Pa). +!> @param[out] spv real (kpv) wind speed shear (1/s). +!> +!> ### Program History Log +!> Date | Programmer | Comments +!> -----|------------|--------- +!> 1999-10-18 | Mark Iredell | Initial +!> 2021-08-31 | Hui-ya Chuang | Increase depth criteria for identifying PV layer from 25 to 50 to avoid finding shallow high level PV layer in high latitudes +!> +!> @author Mark Iredell np23 @date 1999-10-18 + subroutine p2pv(km,pvu,h,t,p,u,v,kpv,pv,pvpt,pvpb,& lpv,upv,vpv,hpv,tpv,ppv,spv) -!$$$ Subprogram documentation block -! -! Subprogram: p2pv Interpolate to potential vorticity level -! Prgmmr: Iredell Org: np23 Date: 1999-10-18 -! -! Abstract: This subprogram interpolates fields to given potential vorticity -! levels within given pressure limits. -! The output level is the first encountered from the top pressure limit. -! If the given potential vorticity level is not found, the outputs are zero -! and the bitmap is false. The interpolation is linear in potential vorticity. -! -! Program history log: -! 1999-10-18 Mark Iredell -! -! Usage: call p2pv(km,pvu,h,t,p,u,v,kpv,pv,pvpt,pvpb,& -! lpv,upv,vpv,hpv,tpv,ppv,spv) -! Input argument list: -! km integer number of levels -! pvu real (km) potential vorticity in PV units (10**-6*K*m**2/kg/s) -! h real (km) height (m) -! t real (km) temperature (K) -! p real (km) pressure (Pa) -! u real (km) x-component wind (m/s) -! v real (km) y-component wind (m/s) -! kpv integer number of potential vorticity levels -! pv real (kpv) potential vorticity levels (10**-6*K*m**2/kg/s) -! pvpt real (kpv) top pressures for PV search (Pa) -! pvpb real (kpv) bottom pressures for PV search (Pa) -! Output argument list: -! lpv logical*1 (kpv) bitmap -! upv real (kpv) x-component wind (m/s) -! vpv real (kpv) y-component wind (m/s) -! hpv real (kpv) temperature (K) -! tpv real (kpv) temperature (K) -! ppv real (kpv) pressure (Pa) -! spv real (kpv) wind speed shear (1/s) -! -! Subprograms called: -! rsearch1 search for a surrounding real interval -! -! Attributes: -! Language: Fortran 90 -! -!$$$ use physcons_post, only: con_rog implicit none integer,intent(in):: km,kpv @@ -214,7 +181,10 @@ subroutine p2pv(km,pvu,h,t,p,u,v,kpv,pv,pvpt,pvpb,& real,intent(in):: pv(kpv),pvpt(kpv),pvpb(kpv) logical*1,intent(out),dimension(kpv):: lpv real,intent(out),dimension(kpv):: upv,vpv,hpv,tpv,ppv,spv - real,parameter:: pd=2500. +! real,parameter:: pd=2500. +! Increase depth criteria for identifying PV layer from 25 to 50 +! to avoid finding shallow high level PV layer in high latitudes + real,parameter:: pd=5000. real w,spdu,spdd integer k,l1,l2,lu,ld,l ! - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - @@ -270,58 +240,33 @@ subroutine p2pv(km,pvu,h,t,p,u,v,kpv,pv,pvpt,pvpb,& !------------------------------------------------------------------------------- !------------------------------------------------------------------------------- -subroutine rsearch1(km1,z1,km2,z2,l2) -!$$$ subprogram documentation block -! -! subprogram: rsearch1 search for a surrounding real interval -! prgmmr: iredell org: w/nmc23 date: 98-05-01 -! -! abstract: this subprogram searches a monotonic sequences of real numbers -! for intervals that surround a given search set of real numbers. -! the sequences may be monotonic in either direction; the real numbers -! may be single or double precision. -! -! program history log: -! 1999-01-05 mark iredell -! -! usage: call rsearch1(km1,z1,km2,z2,l2) -! input argument list: -! km1 integer number of points in the sequence -! z1 real (km1) sequence values to search -! (z1 must be monotonic in either direction) -! km2 integer number of points to search for -! z2 real (km2) set of values to search for -! (z2 need not be monotonic) -! -! output argument list: -! l2 integer (km2) interval locations from 0 to km1 -! (z2 will be between z1(l2) and z1(l2+1)) -! -! subprograms called: -! sbsrch essl binary search -! dbsrch essl binary search -! -! remarks: -! returned values of 0 or km1 indicate that the given search value -! is outside the range of the sequence. -! -! if a search value is identical to one of the sequence values -! then the location returned points to the identical value. -! if the sequence is not strictly monotonic and a search value is -! identical to more than one of the sequence values, then the -! location returned may point to any of the identical values. -! -! if l2(k)=0, then z2(k) is less than the start point z1(1) -! for ascending sequences (or greater than for descending sequences). -! if l2(k)=km1, then z2(k) is greater than or equal to the end point -! z1(km1) for ascending sequences (or less than or equal to for -! descending sequences). otherwise z2(k) is between the values -! z1(l2(k)) and z1(l2(k+1)) and may equal the former. -! -! attributes: -! language: fortran -! -!$$$ +!> rsearch1() searches for a surrounding real interval. +!> +!> This subprogram searches a monotonic sequences of real numbers +!> for intervals that surround a given search set of real numbers. +!> the sequences may be monotonic in either direction; the real numbers +!> may be single or double precision. +!> +!> @param[in] km1 integer number of points in the sequence. +!> @param[in] z1 real (km1) sequence values to search. (z1 must be monotonic in either direction) +!> @param[in] km2 integer number of points to search for. +!> @param[in] z2 real (km2) set of values to search for. (z2 need not be monotonic) +!> @param[out] l2 integer (km2) interval locations from 0 to km1. (z2 will be between z1(l2) and z1(l2+1)) +!> +!> @note +!> * Returned values of 0 or km1 indicate that the given search value is outside the range of the sequence. +!> * If a search value is identical to one of the sequence values then the location returned points to the identical value. +!> * If the sequence is not strictly monotonic and a search value is identical to more than one of the sequence values, then the location returned may point to any of the identical values. +!> * If l2(k)=0, then z2(k) is less than the start point z1(1) for ascending sequences (or greater than for descending sequences). +!> * If l2(k)=km1, then z2(k) is greater than or equal to the end point z1(km1) for ascending sequences (or less than or equal to for descending sequences). Otherwise z2(k) is between the values z1(l2(k)) and z1(l2(k+1)) and may equal the former. +!> +!> ### Program History Log +!> Date | Programmer | Comments +!> -----|------------|--------- +!> 1998-05-01 | Mark Iredell | Initial +!> +!> @author Mark Iredell w/nmc23 @date 1998-05-01 + subroutine rsearch1(km1,z1,km2,z2,l2) implicit none integer,intent(in):: km1,km2 real,intent(in):: z1(km1),z2(km2) @@ -365,51 +310,38 @@ subroutine rsearch1(km1,z1,km2,z2,l2) ! - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - end subroutine ! - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - subroutine tpause(km,p,u,v,t,h,ptp,utp,vtp,ttp,htp,shrtp) -!$$$ Subprogram documentation block -! -! Subprogram: tpause Compute tropopause level fields -! Prgmmr: Iredell Org: np23 Date: 1999-10-18 -! -! Abstract: This subprogram finds the tropopause level and computes fields -! at the tropopause level. The tropopause is defined as the lowest level -! above 500 mb which has a temperature lapse rate of less than 2 K/km. -! The lapse rate must average less than 2 K/km over a 2 km depth. -! If no such level is found below 50 mb, the tropopause is set to 50 mb. -! The tropopause fields are interpolated linearly in lapse rate. -! The tropopause pressure is found hydrostatically. -! The tropopause wind shear is computed as the partial derivative -! of wind speed with respect to height at the tropopause level. -! -! Program history log: -! 1999-10-18 Mark Iredell -! -! Usage: call tpause(km,p,u,v,t,h,ptp,utp,vtp,ttp,htp,shrtp) -! Input argument list: -! km integer number of levels -! p real (km) pressure (Pa) -! u real (km) x-component wind (m/s) -! v real (km) y-component wind (m/s) -! t real (km) temperature (K) -! h real (km) height (m) -! Output argument list: -! ptp real tropopause pressure (Pa) -! utp real tropopause x-component wind (m/s) -! vtp real tropopause y-component wind (m/s) -! ttp real tropopause temperature (K) -! htp real tropopause height (m) -! shrtp real tropopause wind shear (1/s) -! -! Files included: -! physcons.h Physical constants -! -! Subprograms called: -! rsearch1 search for a surrounding real interval -! -! Attributes: -! Language: Fortran 90 -! -!$$$ +!> tpause() computes tropopause level fields. +!> +!> This subprogram finds the tropopause level and computes fields +!> at the tropopause level. The tropopause is defined as the lowest level +!> above 500 mb which has a temperature lapse rate of less than 2 K/km. +!> The lapse rate must average less than 2 K/km over a 2 km depth. +!> If no such level is found below 50 mb, the tropopause is set to 50 mb. +!> The tropopause fields are interpolated linearly in lapse rate. +!> The tropopause pressure is found hydrostatically. +!> The tropopause wind shear is computed as the partial derivative +!> of wind speed with respect to height at the tropopause level. +!> +!> @param[in] km integer number of levels. +!> @param[in] p real (km) pressure (Pa). +!> @param[in] u real (km) x-component wind (m/s). +!> @param[in] v real (km) y-component wind (m/s). +!> @param[in] t real (km) temperature (K). +!> @param[in] h real (km) height (m). +!> @param[out] ptp real tropopause pressure (Pa). +!> @param[out] utp real tropopause x-component wind (m/s). +!> @param[out] vtp real tropopause y-component wind (m/s). +!> @param[out] ttp real tropopause temperature (K). +!> @param[out] htp real tropopause height (m). +!> @param[out] shrtp real tropopause wind shear (1/s). +!> +!> ### Program History Log +!> Date | Programmer | Comments +!> -----|------------|--------- +!> 1999-10-18 | Mark Iredell | Initial +!> +!> @author Mark Iredell np23 @date 1999-10-18 + subroutine tpause(km,p,u,v,t,h,ptp,utp,vtp,ttp,htp,shrtp) use physcons_post, only: con_rog implicit none integer,intent(in):: km @@ -467,49 +399,36 @@ subroutine tpause(km,p,u,v,t,h,ptp,utp,vtp,ttp,htp,shrtp) shrtp=(spdu-spdd)/(h(ktp)-h(ktp+1)) end subroutine ! - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - subroutine mxwind(km,p,u,v,t,h,pmw,umw,vmw,tmw,hmw) -!$$$ Subprogram documentation block -! -! Subprogram: mxwind Compute maximum wind level fields -! Prgmmr: Iredell Org: np23 Date: 1999-10-18 -! -! Abstract: This subprogram finds the maximum wind level and computes fields -! at the maximum wind level. The maximum wind level is searched for -! between 500 mb and 100 mb. The height and wind speed at the maximum wind -! speed level is calculated by assuming the wind speed varies quadratically -! in height in the neighborhood of the maximum wind level. The other fields -! are interpolated linearly in height to the maximum wind level. -! The maximum wind level pressure is found hydrostatically. -! -! Program history log: -! 1999-10-18 Mark Iredell -! 2005-02-02 Mark Iredell changed upper limit to 100 mb -! -! Usage: call mxwind(km,p,u,v,t,h,pmw,umw,vmw,tmw,hmw) -! Input argument list: -! km integer number of levels -! p real (km) pressure (Pa) -! u real (km) x-component wind (m/s) -! v real (km) y-component wind (m/s) -! t real (km) temperature (K) -! h real (km) height (m) -! Output argument list: -! pmw real maximum wind level pressure (Pa) -! umw real maximum wind level x-component wind (m/s) -! vmw real maximum wind level y-component wind (m/s) -! tmw real maximum wind level temperature (K) -! hmw real maximum wind level height (m) -! -! Files included: -! physcons.h Physical constants -! -! Subprograms called: -! rsearch1 search for a surrounding real interval -! -! Attributes: -! Language: Fortran 90 -! -!$$$ +!> mxwind() computes maximum wind level fields. +!> +!> This subprogram finds the maximum wind level and computes fields +!> at the maximum wind level. The maximum wind level is searched for +!> between 500 mb and 100 mb. The height and wind speed at the maximum wind +!> speed level is calculated by assuming the wind speed varies quadratically +!> in height in the neighborhood of the maximum wind level. The other fields +!> are interpolated linearly in height to the maximum wind level. +!> The maximum wind level pressure is found hydrostatically. +!> +!> @param[in] km integer number of levels. +!> @param[in] p real (km) pressure (Pa). +!> @param[in] u real (km) x-component wind (m/s). +!> @param[in] v real (km) y-component wind (m/s). +!> @param[in] t real (km) temperature (K). +!> @param[in] h real (km) height (m). +!> @param[out] pmw real maximum wind level pressure (Pa). +!> @param[out] umw real maximum wind level x-component wind (m/s). +!> @param[out] vmw real maximum wind level y-component wind (m/s). +!> @param[out] tmw maximum wind level temperature (K). +!> @param[out] hmw real maximum wind level height (m). +!> +!> ### Program History Log +!> Date | Programmer | Comments +!> -----|------------|--------- +!> 1999-10-18 | Mark Iredell | Initial +!> 2005-02-02 | Mark Iredell | Changed upper limit to 100 mb +!> +!> @author Mark Iredell np23 @date 1999-10-18 + subroutine mxwind(km,p,u,v,t,h,pmw,umw,vmw,tmw,hmw) use physcons_post, only: con_rog implicit none integer,intent(in):: km @@ -570,40 +489,34 @@ subroutine mxwind(km,p,u,v,t,h,pmw,umw,vmw,tmw,hmw) tmw=t(kmw)-wmw*(t(kmw)-t(kmw+1)) pmw=p(kmw)*exp((h(kmw)-hmw)*(1-0.5*(tmw/t(kmw)-1))/(con_rog*t(kmw))) end subroutine - -subroutine mptgen(mpirank,mpisize,nd,jt1,jt2,j1,j2,jx,jm,jn) -!$$$ Subprogram documentation block -! -! Subprogram: mptgen Generate grid decomposition dimensions -! Prgmmr: Iredell Org: W/NP23 Date: 1999-02-12 -! -! Abstract: This subprogram decomposes total dimensions of a problem -! into smaller domains to be managed on a distributed memory system. -! The last dimension given is decomposed first. If more decompositions -! are possible, the next to last dimension is decomposed next, and so on. -! The transpositions between decompositions should be done by mptran*. -! -! Program history log: -! 1999-02-12 Mark Iredell -! -! Usage: call mptgen(mpirank,mpisize,nd,jt1,jt2,j1,j2,jx,jm,jn) -! Input argument list: -! mpirank integer(kint_mpi) rank of the process (from mpi_comm_rank) -! mpisize integer(kint_mpi) size of the process (from mpi_comm_size) -! nd integer(kint_mpi) number of dimensions to decompose -! jt1 integer(kint_mpi) (nd) lower bounds of total dimensions -! jt2 integer(kint_mpi) (nd) upper bounds of total dimensions -! Output argument list: -! j1 integer(kint_mpi) (nd) lower bounds of local decompositions -! j2 integer(kint_mpi) (nd) upper bounds of local decompositions -! jx integer(kint_mpi) (nd) local size of decompositions -! jm integer(kint_mpi) (nd) maximum size of decompositions -! jn integer(kint_mpi) (nd) number of decompositions -! -! Attributes: -! Language: Fortran 90 -! -!$$$ + +! - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - +!> mptgen() generates grid decomposition dimensions. +!> +!> This subprogram decomposes total dimensions of a problem +!> into smaller domains to be managed on a distributed memory system. +!> The last dimension given is decomposed first. If more decompositions +!> are possible, the next to last dimension is decomposed next, and so on. +!> The transpositions between decompositions should be done by mptran*. +!> +!> @param[in] mpirank integer(kint_mpi) rank of the process (from mpi_comm_rank). +!> @param[in] mpisize integer(kint_mpi) size of the process (from mpi_comm_size). +!> @param[in] nd integer(kint_mpi) number of dimensions to decompose. +!> @param[in] jt1 integer(kint_mpi) (nd) lower bounds of total dimensions. +!> @param[in] jt2 integer(kint_mpi) (nd) upper bounds of total dimensions. +!> @param[out] j1 integer(kint_mpi) (nd) lower bounds of local decompositions. +!> @param[out] j2 integer(kint_mpi) (nd) upper bounds of local decompositions. +!> @param[out] jx integer(kint_mpi) (nd) local size of decompositions. +!> @param[out] jm integer(kint_mpi) (nd) maximum size of decompositions. +!> @param[out] jn integer(kint_mpi) (nd) number of decompositions. +!> +!> ### Program History Log +!> Date | Programmer | Comments +!> -----|------------|--------- +!> 1999-02-12 | Mark Iredell | Initial +!> +!> @author Mark Iredell np23 @date 1999-02-12 + subroutine mptgen(mpirank,mpisize,nd,jt1,jt2,j1,j2,jx,jm,jn) use machine_post,only:kint_mpi implicit none integer(kint_mpi),intent(in):: mpirank,mpisize,nd,jt1(nd),jt2(nd) @@ -636,91 +549,77 @@ subroutine mptgen(mpirank,mpisize,nd,jt1,jt2,j1,j2,jx,jm,jn) ! - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - end subroutine !------------------------------------------------------------------------------- -subroutine mptranr4(mpicomm,mpisize,im,ida,idb,& - jm,jma,jmb,jda,km,kma,kmb,kdb,a,b,ta,tb) -!$$$ Subprogram documentation block -! -! Subprogram: mptranr4 Transpose grid decompositions -! Prgmmr: Iredell Org: W/NP23 Date: 1999-02-12 -! -! Abstract: This subprogram transposes an array of data from one -! grid decomposition to another by using message passing. -! The grid decompositions should be generated by mptgen. -! -! Program history log: -! 1999-02-12 Mark Iredell -! -! Usage: call mptranr4(mpicomm,mpisize,im,ida,idb,& -! jm,jma,jmb,jda,km,kma,kmb,kdb,a,b) -! Input argument list: -! mpicomm integer(kint_mpi) mpi communicator -! mpisize integer(kint_mpi) size of the process (from mpi_comm_size) -! im integer(kint_mpi) undecomposed range -! ida integer(kint_mpi) undecomposed input dimension -! idb integer(kint_mpi) undecomposed output dimension -! jm integer(kint_mpi) output grid decomposition size -! jma integer(kint_mpi) input grid undecomposed range -! jmb integer(kint_mpi) output grid decomposed range -! jda integer(kint_mpi) input grid undecomposed dimension -! km integer(kint_mpi) input grid decomposition size -! kma integer(kint_mpi) input grid decomposed range -! kmb integer(kint_mpi) output grid undecomposed range -! kdb integer(kint_mpi) output grid undecomposed dimension -! a real(4) (ida,jda,kma) input array -! Output argument list: -! b real(4) (idb,kdb,jmb) output array -! ta,tb real(4) (im,jm,km,mpisize) work arrays -! -! Subprograms called: -! mpi_alltoall mpi exchange of data between every process pair -! -! Remarks: -! While this routine serves a wide variety of scalable transpose functions -! for multidimensional grids, -! (a) it does not work with nonrectanguloid grids; -! (b) it does not do any load balancing; -! (c) it does not do any communication hiding. -! -! This subprogram must be used rather than mpi_alltoall -! in any of the following cases: -! (a) The undecomposed range is less than the respective dimension -! (either im1 or jm>1) -! (c) The decomposed range is ever zero -! (either kma==0 or jmb==0 for any process) -! (d) The output grid range is not the full extent -! (either kmb mptranr4() transposes grid decompositions. +!> +!> This subprogram transposes an array of data from one +!> grid decomposition to another by using message passing. +!> The grid decompositions should be generated by mptgen. +!> +!> @param[in] mpicomm integer(kint_mpi) mpi communicator. +!> @param[in] mpisize integer(kint_mpi) size of the process (from mpi_comm_size). +!> @param[in] im integer(kint_mpi) undecomposed range. +!> @param[in] ida integer(kint_mpi) undecomposed input dimension. +!> @param[in] idb integer(kint_mpi) undecomposed output dimension. +!> @param[in] jm integer(kint_mpi) output grid decomposition size. +!> @param[in] jma integer(kint_mpi) input grid undecomposed range. +!> @param[in] jmb integer(kint_mpi) output grid decomposed range. +!> @param[in] jda integer(kint_mpi) input grid undecomposed dimension. +!> @param[in] km integer(kint_mpi) input grid decomposition size. +!> @param[in] kma integer(kint_mpi) input grid decomposed range. +!> @param[in] kmb integer(kint_mpi) output grid undecomposed range. +!> @param[in] kdb integer(kint_mpi) output grid undecomposed dimension. +!> @param[in] a real(4) (ida,jda,kma) input array. +!> @param[out] b real(4) (idb,kdb,jmb) output array. +!> @param[out] ta,tb real(4) (im,jm,km,mpisize) work arrays. +!> +!> @note +!> While this routine serves a wide variety of scalable transpose functions for multidimensional grids, +!> * It does not work with nonrectanguloid grids; +!> * It does not do any load balancing; +!> * It does not do any communication hiding. +!> +!> This subprogram must be used rather than mpi_alltoall in any of the following cases: +!> +!> * The undecomposed range is less than the respective dimension (either im * The decomposition size is greater than one (either km>1 or jm>1) +!> * The decomposed range is ever zero (either kma==0 or jmb==0 for any process) +!> * The output grid range is not the full extent (either kmb +!> If none of these conditions apply, mpi_alltoall could be used directly rather than this subprogram and would be more efficient. +!> @note +!> Example 1. Transpose a 1000 x 10000 matrix. +!>
+!>  include 'mpif.h'                                     ! use mpi
+!>  parameter(jt=1000,kt=10000)                          ! set problem size
+!>  real,allocatable:: a(:,:),b(:,:)                     ! declare arrays
+!>  call mpi_init(ierr)                                  ! initialize mpi
+!>  call mpi_comm_rank(MPI_COMM_WORLD,mpirank,ierr)      ! get mpi rank
+!>  call mpi_comm_size(MPI_COMM_WORLD,mpisize,ierr)      ! get mpi size
+!>  call mptgen(mpirank,mpisize,1,1,jt,j1,j2,jx,jm,jn)   ! decompose output
+!>  call mptgen(mpirank,mpisize,1,1,kt,k1,k2,kx,km,kn)   ! decompose input
+!>  allocate(a(jt,k1:k2),b(kt,j1:j2))                    ! allocate arrays
+!>  a=reshape((/((j+k,j=1,jt),k=k1,k2)/),(/jt,k2-k1+1/)) ! initialize input
+!>  call mptranr4(MPI_COMM_WORLD,mpisize,1,1,1,          ! transpose arrays
+!>  &              jm,jt,j2-j1+1,jt,km,k2-k1+1,kt,kt,a,b)
+!>  print '(2i8,f16.1)',((k,j,b(k,j),k=2000,kt,2000),    ! print some values
+!>  &                    j=((j1-1)/200+1)*200,j2,200)
+!>  call mpi_finalize(ierr)                              ! finalize mpi
+!>  end
+!> 
+!> This transpose took 0.6 seconds on 4 2-way winterhawk nodes. +!> @note +!> A 20000x10000 transpose took 3.4 seconds on 16 2-way winterhawk nodes. +!> @note +!> Thus a transpose may take about 1 second for every 16 Mb per node. +!> +!> ### Program History Log +!> Date | Programmer | Comments +!> -----|------------|--------- +!> 1999-02-12 | Mark Iredell | Initial +!> +!> @author Mark Iredell np23 @date 1999-02-12 + subroutine mptranr4(mpicomm,mpisize,im,ida,idb,& + jm,jma,jmb,jda,km,kma,kmb,kdb,a,b,ta,tb) use machine_post,only:kint_mpi implicit none include 'mpif.h' diff --git a/sorc/ncep_post.fd/GFSPOSTSIG.F b/sorc/ncep_post.fd/GFSPOSTSIG.F index 50b6f358a..5ca911777 100644 --- a/sorc/ncep_post.fd/GFSPOSTSIG.F +++ b/sorc/ncep_post.fd/GFSPOSTSIG.F @@ -1,77 +1,54 @@ !> @file -! -!> Subprogram: rtsig Read and transform sigma file -!! Prgmmr: Iredell Org: np23 Date: 1999-10-18 -!! -!! Abstract: This subprogram reads a sigma file and transforms -!! the fields to a designated global grid. -!! -!! Program history log: -!! 1999-10-18 Mark Iredell -!! 2013-04-19 Jun Wang: add option to get tmp and ps(in pascal) -!! from enthalpy and ps(cb) option -!! 2013-05-06 Shrinivas Moorthi: Initialize midea to 0 -!! 2013-05-07 Shrinivas Moorthi: Remove mo3, mct, midea and define io3, ict etc -!! correctly and get correct cloud condensate. -!! 2013-08-02 Shrinivas Moorthi: Rewrote the whole routine to read the sigma -!! file differently and to read all tracers -!! Addedd sptezj for two 2d fields -!! 2014-02-20 Shrinivas Moorthi: Modified conversion from spectral to grid -!! taking advantage of threding in SP library. -!! This really speeds up the code -!! Also threaded loop for Temperature from Tv - -!! -!! Usage: call rtsig(lusig,head,k1,k2,kgds,ijo,nct, & -!! h,p,px,py,t,tx,ty,u,v,d,z,sh,o3,ct,iret,o,o2) -!! Input argument list: -!! lusig integer(sigio_intkind) sigma file unit number -!! head type(sigio_head) sigma file header -!! k1 integer first model level to return -!! k2 integer last model level to return -!! kgds integer (200) GDS to which to transform -!! ijo integer dimension of output fields -!! levs integer number of total vertical levels -!! ntrac integer number of output tracers -!! jcap integer number of waves -!! lnt2 integer (jcap+1)*(jcap+2) -!! Output argument list: -!! h real (ijo) surface orography (m) -!! p real (ijo) surface pressure (Pa) -!! px real (ijo) log surface pressure x-gradient (1/m) -!! py real (ijo) log surface pressure y-gradient (1/m) -!! t real (ijo,k1:k2) temperature (K) -!! tx real (ijo,k1:k2) virtual temperature x-gradient (K/m) -!! ty real (ijo,k1:k2) virtual temperature y-gradient (K/m) -!! u real (ijo,k1:k2) x-component wind (m/s) -!! v real (ijo,k1:k2) y-component wind (m/s) -!! d real (ijo,k1:k2) wind divergence (1/s) -!! trc real (ijo,k1:k2,ntrac) tracers -!! 1 = specific humidity (kg/kg) -!! 2 = Ozone mixing ratio (kg/kg) -!! 3 = cloud condensate mixing ratio (kg/kg) -!! . -!! . -!! atomic oxyge, oxygen etc -!! -!! iret integer return code -!! -!! Modules used: -!! sigio_r_module sigma file I/O -!! -!! Subprograms called: -!! sigio_rrdati read sigma single data field -!! sptez scalar spectral transform -!! sptezd gradient spectral transform -!! sptezm multiple scalar spectral transform -!! sptezmv multiple vector spectral transform -!! -!! Attributes: -!! Language: Fortran 90 -!! -!! -! Add Iredells subroutine to read sigma files -!------------------------------------------------------------------------------- +!> +!> @brief rtsig() reads and transforms sigma file. +!> +!> This subprogram reads a sigma file and transforms +!> the fields to a designated global grid. +!> Add Iredells subroutine to read sigma files. +!> +!> @param[out] lusig integer(sigio_intkind) sigma file unit number. +!> @param[out] head type(sigio_head) sigma file header. +!> @param[out] k1 integer first model level to return. +!> @param[out] k2 integer last model level to return. +!> @param[out] kgds integer (200) GDS to which to transform. +!> @param[out] ijo integer dimension of output fields. +!> @param[out] levs integer number of total vertical levels. +!> @param[out] ntrac integer number of output tracers. +!> @param[out] jcap integer number of waves. +!> @param[out] lnt2 integer (jcap+1)*(jcap+2). +!> @param[out] h real (ijo) surface orography (m). +!> @param[out] p real (ijo) surface pressure (Pa). +!> @param[out] px real (ijo) log surface pressure x-gradient (1/m). +!> @param[out] py real (ijo) log surface pressure y-gradient (1/m). +!> @param[out] t real (ijo,k1:k2) temperature (K). +!> @param[out] tx real (ijo,k1:k2) virtual temperature x-gradient (K/m). +!> @param[out] ty real (ijo,k1:k2) virtual temperature y-gradient (K/m). +!> @param[out] u real (ijo,k1:k2) x-component wind (m/s). +!> @param[out] v real (ijo,k1:k2) y-component wind (m/s). +!> @param[out] d real (ijo,k1:k2) wind divergence (1/s). +!> @param[out] trc real (ijo,k1:k2,ntrac) tracers. +!>
+!>                                   1 = specific humidity (kg/kg)
+!>                                   2 = Ozone mixing ratio (kg/kg)
+!>                                   3 = cloud condensate mixing ratio (kg/kg)
+!>                                   .
+!>                                   .
+!>                                       atomic oxyge, oxygen etc
+!>
+!>
+!> @param[out] iret Integer return code. +!> +!> ### Program History Log +!> Date | Programmer | Comments +!> -----|------------|--------- +!> 1999-10-18 | Mark Iredell | Initial +!> 2013-04-19 | Jun Wang | Add option to get tmp and ps(in pascal) from enthalpy and ps(cb) option +!> 2013-05-06 | Shrinivas Moorthi | Initialize midea to 0 +!> 2013-05-07 | Shrinivas Moorthi | Remove mo3, mct, midea and define io3, ict etc correctly and get correct cloud condensate. +!> 2013-08-02 | Shrinivas Moorthi | Rewrote the whole routine to read the sigma file differently and to read all tracers. Added sptezj for two 2d fields +!> 2014-02-20 | Shrinivas Moorthi | Modified conversion from spectral to grid taking advantage of threding in SP library. This really speeds up the code. Also threaded loop for Temperature from Tv +!> +!> @author Mark Iredell np23 @date 1999-10-18 subroutine rtsig(lusig,head,k1,k2,kgds,ijo,levs,ntrac,jcap,lnt2,me, & h,p,px,py,t,u,v,d,trc,iret) @@ -248,43 +225,35 @@ subroutine rtsig(lusig,head,k1,k2,kgds,ijo,levs,ntrac,jcap,lnt2,me, & end subroutine ! - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - +!> modstuff() computes model coordinate dependent functions. +!> +!> This subprogram computes fields which depend on the model coordinate +!> such as pressure thickness and vertical velocity. +!> +!> @param[in] km integer number of levels. +!> @param[in] idvc integer vertical coordinate id (1 for sigma and 2 for hybrid). +!> @param[in] idsl integer type of sigma structure (1 for phillips or 2 for mean). +!> @param[in] nvcoord integer number of vertical coordinates. +!> @param[in] vcoord real (km+1,nvcoord) vertical coordinates. +!> @param[in] ps real surface pressure (Pa). +!> @param[in] psx real log surface pressure x-gradient (1/m). +!> @param[in] psy real log surface pressure y-gradient (1/m). +!> @param[in] d real (km) wind divergence (1/s). +!> @param[in] u real (km) x-component wind (m/s). +!> @param[in] v real (km) y-component wind (m/s). +!> @param[out] pi real (km+1) interface pressure (Pa). +!> @param[out] pm real (km) mid-layer pressure (Pa). +!> @param[out] om real (km) vertical velocity (Pa/s). +!> +!> ### Program History Log +!> Date | Programmer | Comments +!> -----|------------|--------- +!> 1999-10-18 | Mark Iredell | Initial +!> 2013-04-19 | Jun Wang | Add option to get pi by using 8 byte real computation +!> +!> @author Mark Iredell np23 @date 1999-10-18 subroutine modstuff(km,idvc,idsl,nvcoord,vcoord,ps,psx,psy,d,u,v,& pi,pm,om) -!$$$ Subprogram documentation block -! -! Subprogram: modstuff Compute model coordinate dependent functions -! Prgmmr: Iredell Org: np23 Date: 1999-10-18 -! -! Abstract: This subprogram computes fields which depend on the model coordinate -! such as pressure thickness and vertical velocity. -! -! Program history log: -! 1999-10-18 Mark Iredell -! 2013-04-19 Jun Wang: add option to get pi by using 8byte real computation -! -! Usage: call modstuff(km,idvc,idsl,nvcoord,vcoord,ps,psx,psy,d,u,v,& -! pd,pi,pm,os,om,px,py) -! Input argument list: -! km integer number of levels -! idvc integer vertical coordinate id (1 for sigma and 2 for hybrid) -! idsl integer type of sigma structure (1 for phillips or 2 for mean) -! nvcoord integer number of vertical coordinates -! vcoord real (km+1,nvcoord) vertical coordinates -! ps real surface pressure (Pa) -! psx real log surface pressure x-gradient (1/m) -! psy real log surface pressure y-gradient (1/m) -! d real (km) wind divergence (1/s) -! u real (km) x-component wind (m/s) -! v real (km) y-component wind (m/s) -! Output argument list: -! pi real (km+1) interface pressure (Pa) -! pm real (km) mid-layer pressure (Pa) -! om real (km) vertical velocity (Pa/s) -! -! Attributes: -! Language: Fortran 90 -! -!$$$ use sigio_module, only: sigio_modprd implicit none integer,intent(in):: km,idvc,idsl,nvcoord @@ -331,46 +300,38 @@ subroutine modstuff(km,idvc,idsl,nvcoord,vcoord,ps,psx,psy,d,u,v,& end subroutine !------------------------------------------------------------------------------- +!> modstuff2() computes model coordinate dependent functions. +!> +!> This subprogram computes fields which depend on the model coordinate +!> such as pressure thickness and vertical velocity. +!> +!> @param[in] im integer inner computational domain. +!> @param[in] ix integer maximum inner dimension. +!> @param[in] km integer number of levels. +!> @param[in] idvc integer vertical coordinate id (1 for sigma and 2 for hybrid). +!> @param[in] idsl integer type of sigma structure (1 for phillips or 2 for mean). +!> @param[in] nvcoord integer number of vertical coordinates. +!> @param[in] vcoord real (km+1,nvcoord) vertical coordinates. +!> @param[in] ps real surface pressure (Pa). +!> @param[in] psx real log surface pressure x-gradient (1/m). +!> @param[in] psy real log surface pressure y-gradient (1/m). +!> @param[in] d real (km) wind divergence (1/s). +!> @param[in] u real (km) x-component wind (m/s). +!> @param[in] v real (km) y-component wind (m/s). +!> @param[out] pi real (km+1) interface pressure (Pa). +!> @param[out] pm real (km) mid-layer pressure (Pa). +!> @param[out] om real (km) vertical velocity (Pa/s). +!> +!> ### Program History Log +!> Date | Programmer | Comments +!> -----|------------|--------- +!> 1999-10-18 | Mark Iredell | Initial +!> 2013-04-19 | Jun Wang | Add option to get pi by using 8 byte real computation +!> 2013-08-13 | Shrinivas Moorthi | Modified to include im points and thread +!> +!> @author Mark Iredell np23 @date 1999-10-18 subroutine modstuff2(im,ix,km,idvc,idsl,nvcoord,vcoord,ps,psx,psy,d,u,v,& pi,pm,om,me) -!$$$ Subprogram documentation block -! -! Subprogram: modstuff Compute model coordinate dependent functions -! Prgmmr: Iredell Org: np23 Date: 1999-10-18 -! -! Abstract: This subprogram computes fields which depend on the model coordinate -! such as pressure thickness and vertical velocity. -! -! Program history log: -! 1999-10-18 Mark Iredell -! 2013-04-19 Jun Wang: add option to get pi by using 8byte real computation -! 2013-08-13 Shrinivas Moorthi - Modified to include im points and thread -! -! Usage: call modstuff(km,idvc,idsl,nvcoord,vcoord,ps,psx,psy,d,u,v,& -! pd,pi,pm,os,om,px,py) -! Input argument list: -! im integer - inner computational domain -! ix integer - maximum inner dimension -! km integer number of levels -! idvc integer vertical coordinate id (1 for sigma and 2 for hybrid) -! idsl integer type of sigma structure (1 for phillips or 2 for mean) -! nvcoord integer number of vertical coordinates -! vcoord real (km+1,nvcoord) vertical coordinates -! ps real surface pressure (Pa) -! psx real log surface pressure x-gradient (1/m) -! psy real log surface pressure y-gradient (1/m) -! d real (km) wind divergence (1/s) -! u real (km) x-component wind (m/s) -! v real (km) y-component wind (m/s) -! Output argument list: -! pi real (km+1) interface pressure (Pa) -! pm real (km) mid-layer pressure (Pa) -! om real (km) vertical velocity (Pa/s) -! -! Attributes: -! Language: Fortran 90 -! -!$$$ use sigio_module, only : sigio_modprd implicit none integer, intent(in) :: im,ix,km,idvc,idsl,nvcoord,me @@ -443,61 +404,47 @@ subroutine modstuff2(im,ix,km,idvc,idsl,nvcoord,vcoord,ps,psx,psy,d,u,v,& end subroutine !----------------------------------------------------------------------- +!> trssc() transforms sigma spectral fields to grid. +!> +!> Transforms sigma spectral fields to grid and converts +!> log surface pressure to surface pressure and virtual temperature +!> to temperature. +!> +!> @param[in] jcap integer spectral truncation. +!> @param[in] nc integer first dimension (nc>=(jcap+1)*(jcap+2)). +!> @param[in] km integer number of levels. +!> @param[in] ntrac integer number of tracers. +!> @param[in] idvm integer mass variable id. +!> @param[in] idrt integer data representation type. +!> @param[in] lonb integer number of longitudes. +!> @param[in] latb integer number of latitudes. +!> @param[in] ijl integer horizontal dimension. +!> @param[in] j1 integer first latitude. +!> @param[in] j2 integer last latitude. +!> @param[in] jc integer number of cpus. +!> @param[in] szs real (nc) orography. +!> @param[in] sps real (nc) log surface pressure. +!> @param[in] st real (nc,levs) virtual temperature. +!> @param[in] sd real (nc,levs) divergence. +!> @param[in] sz real (nc,levs) vorticity. +!> @param[in] sq real (nc,levs*ntrac) tracers. +!> @param[out] zs real (ijl) orography. +!> @param[out] ps real (ijl) surface pressure. +!> @param[out] t real (ijl,km) temperature. +!> @param[out] u real (ijl,km) zonal wind. +!> @param[out] v real (ijl,km) meridional wind. +!> @param[out] q real (ijl,km*ntrac) tracers. +!> +!> ### Program History Log +!> Date | Programmer | Comments +!> -----|------------|--------- +!> 1999-10-18 | Mark Iredell | Initial +!> +!> @author Mark Iredell w/nmc23 @date 1992-10-31 subroutine trssc(jcap,nc,km,ntrac,idvc,idvm,idsl,nvcoord,vcoord, & cpi,idrt,lonb,latb,ijl,ijn,j1,j2,jc,chgq0, & szs,sps,st,sd,sz,sq,gfszs,gfsps,gfsp,gfsdp, & gfst,gfsu,gfsv,gfsq,gfsw) -!$$$ subprogram documentation block -! -! subprogram: trssc transform sigma spectral fields to grid -! prgmmr: iredell org: w/nmc23 date: 92-10-31 -! -! abstract: transforms sigma spectral fields to grid and converts -! log surface pressure to surface pressure and virtual temperature -! to temperature. -! -! program history log: -! 91-10-31 mark iredell -! -! usage: call trssc(jcap,nc,km,ntrac,idvm, -! & idrt,lonb,latb,ijl,j1,j2,jc, -! & szs,sps,st,sd,sz,sq,zs,ps,t,u,v,q) -! input argument list: -! jcap integer spectral truncation -! nc integer first dimension (nc>=(jcap+1)*(jcap+2)) -! km integer number of levels -! ntrac integer number of tracers -! idvm integer mass variable id -! idrt integer data representation type -! lonb integer number of longitudes -! latb integer number of latitudes -! ijl integer horizontal dimension -! j1 integer first latitude -! j2 integer last latitude -! jc integer number of cpus -! szs real (nc) orography -! sps real (nc) log surface pressure -! st real (nc,levs) virtual temperature -! sd real (nc,levs) divergence -! sz real (nc,levs) vorticity -! sq real (nc,levs*ntrac) tracers -! output argument list: -! zs real (ijl) orography -! ps real (ijl) surface pressure -! t real (ijl,km) temperature -! u real (ijl,km) zonal wind -! v real (ijl,km) meridional wind -! q real (ijl,km*ntrac) tracers -! -! subprograms called: -! sptran perform a scalar spherical transform -! -! attributes: -! language: fortran -! -!c$$$ -!! use gfsio_module -! use gfsio_rst implicit none integer,intent(in)::jcap,nc,km,ntrac,idvc,idvm,idsl,nvcoord,idrt,lonb,latb integer,intent(in)::ijl,ijn,j1,j2,jc,chgq0 diff --git a/sorc/ncep_post.fd/GPVS.f b/sorc/ncep_post.fd/GPVS.f index c60dd2f6d..3e91b7d3d 100644 --- a/sorc/ncep_post.fd/GPVS.f +++ b/sorc/ncep_post.fd/GPVS.f @@ -1,36 +1,24 @@ !> @file -! . . . -!> SUBPROGRAM: GPVS COMPUTE SATURATION VAPOR PRESSURE TABLE -!! AUTHOR: N PHILLIPS W/NP2 DATE: 30 DEC 82 -!! -!! ABSTRACT: COMPUTE SATURATION VAPOR PRESSURE TABLE AS A FUNCTION OF -!! TEMPERATURE FOR THE TABLE LOOKUP FUNCTION FPVS. -!! EXACT SATURATION VAPOR PRESSURES ARE CALCULATED IN SUBPROGRAM FPVSX. -!! THE CURRENT IMPLEMENTATION COMPUTES A TABLE WITH A LENGTH -!! OF 7501 FOR TEMPERATURES RANGING FROM 180.0 TO 330.0 KELVIN. -!! -!! PROGRAM HISTORY LOG: -!! 91-05-07 IREDELL -!! 94-12-30 IREDELL EXPAND TABLE -!! 96-02-19 HONG ICE EFFECT -!! -!! USAGE: CALL GPVS -!! -!! SUBPROGRAMS CALLED: -!! (FPVSX) - INLINABLE FUNCTION TO COMPUTE SATURATION VAPOR PRESSURE -!! -!! COMMON BLOCKS: -!! COMPVS - SCALING PARAMETERS AND TABLE FOR FUNCTION FPVS. -!! -!! ATTRIBUTES: -!! LANGUAGE: FORTRAN 90 -!! MACHINE: IBM SP -!! -!! -!####################################################################### -!-- Lookup tables for the saturation vapor pressure w/r/t water & ice -- -!####################################################################### -! +!> @brief gpvs() computes saturation vapor pressure table. +!> +!> Compute saturation vapor pressure table as a function of +!> temperature for the table lookup function FPVS. +!> Exact saturation vapor pressures are calculated in subprogram FPVSX. +!> The current implementation computes a table with a length +!> of 7501 for temperatures ranging from 180.0 to 330.0 Kelvin. +!> +!> @param[out] pvu real (km) potential vorticity (10**-6*K*m**2/kg/s). +!> +!> ### Program History Log +!> Date | Programmer | Comments +!> -----|------------|--------- +!> 1982-12-30 | N Phillips | Initial +!> 1991-05-07 | Mark Iredell | Made into inlinable function +!> 1994-12-30 | Mark Iredell | Expand table +!> 1996-02-19 | Hong | Ice effect +!> +!> @note Lookup tables for the saturation vapor pressure w/r/t water & ice. +!> @author N Phillips W/NP2 @date 1982-12-30 SUBROUTINE GPVS ! ****************************************************************** @@ -65,40 +53,28 @@ SUBROUTINE GPVS !----------------------------------------------------------------------- FUNCTION FPVS(T) !----------------------------------------------------------------------- -!$$$ SUBPROGRAM DOCUMENTATION BLOCK -! . . . -! SUBPROGRAM: FPVS COMPUTE SATURATION VAPOR PRESSURE -! AUTHOR: N PHILLIPS W/NP2 DATE: 30 DEC 82 -! -! ABSTRACT: COMPUTE SATURATION VAPOR PRESSURE FROM THE TEMPERATURE. -! A LINEAR INTERPOLATION IS DONE BETWEEN VALUES IN A LOOKUP TABLE -! COMPUTED IN GPVS. SEE DOCUMENTATION FOR FPVSX FOR DETAILS. -! INPUT VALUES OUTSIDE TABLE RANGE ARE RESET TO TABLE EXTREMA. -! THE INTERPOLATION ACCURACY IS ALMOST 6 DECIMAL PLACES. -! ON THE CRAY, FPVS IS ABOUT 4 TIMES FASTER THAN EXACT CALCULATION. -! THIS FUNCTION SHOULD BE EXPANDED INLINE IN THE CALLING ROUTINE. -! -! PROGRAM HISTORY LOG: -! 91-05-07 IREDELL MADE INTO INLINABLE FUNCTION -! 94-12-30 IREDELL EXPAND TABLE -! 96-02-19 HONG ICE EFFECT -! -! USAGE: PVS=FPVS(T) -! -! INPUT ARGUMENT LIST: -! T - REAL TEMPERATURE IN KELVIN -! -! OUTPUT ARGUMENT LIST: -! FPVS - REAL SATURATION VAPOR PRESSURE IN KILOPASCALS (CB) -! -! COMMON BLOCKS: -! COMPVS - SCALING PARAMETERS AND TABLE COMPUTED IN GPVS. -! -! ATTRIBUTES: -! LANGUAGE: FORTRAN 90 -! MACHINE: IBM SP -! -!$$$ +!> fpvs() computes saturation vapor pressure. +!> +!> Compute saturation vapor pressure from the temperature. +!> A linear interpolation is done between values in a lookup table +!> computed in GPVS. See documentation for FPVSX for details. +!> Input values outside table range are reset to table extrema. +!> The interpolation accuracy is almost 6 decimal places. +!> On the CRAY, FPVS is about 4 times faster than exact calculation. +!> This function should be expanded inline in the calling routine. +!> +!> @param[in] T real temperature in Kelvin. +!> @param[out] FPVS real saturation vapor pressure in kilopascals (CB). +!> +!> ### Program History Log +!> Date | Programmer | Comments +!> -----|------------|--------- +!> 1982-12-30 | N Phillips | Initial +!> 1991-05-07 | Mark Iredell | Made into inlinable function +!> 1994-12-30 | Mark Iredell | Expand table +!> 1996-02-19 | Hong | Ice effect +!> +!> @author N Phillips W/NP2 @date 1982-12-30 !----------------------------------------------------------------------- use svptbl_mod, only : NX,C1XPVS,C2XPVS,TBPVS ! @@ -144,41 +120,33 @@ FUNCTION FPVS0(T,NX,C1XPVS0,C2XPVS0,TBPVS0) !----------------------------------------------------------------------- FUNCTION FPVSX(T) !----------------------------------------------------------------------- -!$$$ SUBPROGRAM DOCUMENTATION BLOCK -! . . . -! SUBPROGRAM: FPVSX COMPUTE SATURATION VAPOR PRESSURE -! AUTHOR: N PHILLIPS W/NP2 DATE: 30 DEC 82 -! -! ABSTRACT: EXACTLY COMPUTE SATURATION VAPOR PRESSURE FROM TEMPERATURE. -! THE WATER MODEL ASSUMES A PERFECT GAS, CONSTANT SPECIFIC HEATS -! FOR GAS AND LIQUID, AND NEGLECTS THE VOLUME OF THE LIQUID. -! THE MODEL DOES ACCOUNT FOR THE VARIATION OF THE LATENT HEAT -! OF CONDENSATION WITH TEMPERATURE. THE ICE OPTION IS NOT INCLUDED. -! THE CLAUSIUS-CLAPEYRON EQUATION IS INTEGRATED FROM THE TRIPLE POINT -! TO GET THE FORMULA -! PVS=PSATK*(TR**XA)*EXP(XB*(1.-TR)) -! WHERE TR IS TTP/T AND OTHER VALUES ARE PHYSICAL CONSTANTS -! THIS FUNCTION SHOULD BE EXPANDED INLINE IN THE CALLING ROUTINE. -! -! PROGRAM HISTORY LOG: -! 91-05-07 IREDELL MADE INTO INLINABLE FUNCTION -! 94-12-30 IREDELL EXACT COMPUTATION -! 96-02-19 HONG ICE EFFECT -! -! USAGE: PVS=FPVSX(T) -! REFERENCE: EMANUEL(1994),116-117 -! -! INPUT ARGUMENT LIST: -! T - REAL TEMPERATURE IN KELVIN -! -! OUTPUT ARGUMENT LIST: -! FPVSX - REAL SATURATION VAPOR PRESSURE IN KILOPASCALS (CB) -! -! ATTRIBUTES: -! LANGUAGE: FORTRAN 90 -! MACHINE: IBM SP -! -!$$$ +!> fpvsx() computes saturation vapor pressure. +!> +!> Exactly compute saturation vapor pressure from temperature. +!> The water model assumes a perfect gas, constant specific heats +!> for gas and liquid, and neglects the volume of the liquid. +!> The model does account for the variation of the latent heat +!> of condensation with temperature. The ice option is not included. +!> The Clausius-Clapeyron equation is integrated from the triple point +!> To get the formula +!> @code +!> PVS=PSATK*(TR**XA)*exp(XB*(1.-TR)) +!> @endcode +!> where TR is TTP/T and other values are physical constants +!> This function should be expanded inline in the calling routine. +!> +!> @param[in] T real temperature in Kelvin. +!> @param[out] FPVSX real saturation vapor pressure in kilopascals (CB). +!> +!> ### Program History Log +!> Date | Programmer | Comments +!> -----|------------|--------- +!> 1982-12-30 | N Phillips | Initial +!> 1991-05-07 | Mark Iredell | Made into inlinable function +!> 1994-12-30 | Mark Iredell | Exact computation +!> 1996-02-19 | Hong | Ice effect +!> +!> @author N Phillips W/NP2 @date 1982-12-30 !----------------------------------------------------------------------- implicit none ! diff --git a/sorc/ncep_post.fd/ICAOHEIGHT.f b/sorc/ncep_post.fd/ICAOHEIGHT.f index f21dc427b..139f99307 100644 --- a/sorc/ncep_post.fd/ICAOHEIGHT.f +++ b/sorc/ncep_post.fd/ICAOHEIGHT.f @@ -18,15 +18,15 @@ SUBROUTINE ICAOHEIGHT(MAXWP, & !input ! Language: Fortran 90 ! Software Standards: UMDP3 v6 -use ctlblk_mod, only: jsta, jend, spval, im +use ctlblk_mod, only: jsta, jend, spval, im, ista, iend use physcons_post, only: con_g, con_rd IMPLICIT None ! Subroutine Arguments: !REAL, INTENT(IN) :: SPVAL -REAL, INTENT(IN) :: MAXWP(IM,jsta:jend) !P field for conversion +REAL, INTENT(IN) :: MAXWP(ista:iend,jsta:jend) !P field for conversion -REAL, INTENT(INOUT) :: MAXWICAOZ(IM,jsta:jend) !ICAO height in m +REAL, INTENT(INOUT) :: MAXWICAOZ(ista:iend,jsta:jend) !ICAO height in m !INTEGER, INTENT(INOUT) :: ErrorStatus ! Local Constants: @@ -62,7 +62,7 @@ SUBROUTINE ICAOHEIGHT(MAXWP, & !input DO J=JSTA,JEND - DO I=1,IM + DO I=ISTA,IEND pressure = MAXWP(i,j) IF ( (pressure <= 1000.) .AND. (pressure >= 0.) ) THEN pressure = 1000. diff --git a/sorc/ncep_post.fd/IFI.F b/sorc/ncep_post.fd/IFI.F new file mode 100644 index 000000000..2b910cc99 --- /dev/null +++ b/sorc/ncep_post.fd/IFI.F @@ -0,0 +1,1371 @@ +#ifndef USE_IFI + +! IFI stubs + +module upp_ifi_mod + use iso_c_binding, only: c_float + implicit none + + private + public run_ifi, set_ifi_dims, ifi_real_t, write_ifi_debug_files + + integer, parameter :: ifi_real_t = c_float + logical :: write_ifi_debug_files = .false. + +contains !============================================================== + + subroutine set_ifi_dims() + use CTLBLK_mod, only: ifi_nflight, ifi_flight_levels + implicit none + integer :: i + + ! Bogus fill value for flight levels to prevent a crash + ifi_nflight = 60 + if(allocated(ifi_flight_levels)) then + deallocate(ifi_flight_levels) + endif + allocate(ifi_flight_levels(ifi_nflight)) + do i=1,ifi_nflight + ifi_flight_levels(i) = 500*i + enddo + end subroutine set_ifi_dims + + ! -------------------------------------------------------------------- + + subroutine run_ifi() + ! Fill any requested IFI fields with missing data. + call send_missing_data(1007) ! ICE_PROB = missing + call send_missing_data(1008) ! SLD = missing + call send_missing_data(1009) ! ICE_SEV_CAT = missing + call send_missing_data(1010) ! ICE_SEV_CAT = missing + end subroutine run_ifi + + ! -------------------------------------------------------------------- + + subroutine send_missing_data(ient) + use CTLBLK_mod, only: ifi_nflight, ifi_flight_levels + use ctlblk_mod, only: spval, ista, iend, jsta, jend, lm, im, cfld, datapd, fld_info, ifi_flight_levels, jsta_2l, jend_2u + use rqstfld_mod, only: iget, iavblfld, lvlsxml, lvls + implicit none + + integer, intent(in) :: ient + + ! Locals + integer :: i,j,k + + logical, save :: wrote_message = .false. ! guarded by an OMP CRITICAL below + + if(size(IGET)0) then + if(.not.wrote_message) then + !$OMP CRITICAL + if(.not.wrote_message) then + write(0,'(A)') 'This post cannot produce IFI icing products because it was not compiled with libIFI.' + wrote_message = .true. + endif + !$OMP END CRITICAL + endif + + cfld = cfld+1 + fld_info(cfld)%ifld = IAVBLFLD(IGET(ient)) + fld_info(cfld)%lvl = k + + !$OMP PARALLEL DO PRIVATE(i,j) COLLAPSE(2) + do j=jsta,jend + do i=ista,iend + datapd(i-ista+1,j-jsta+1,cfld) = spval + enddo + enddo + endif + enddo + end subroutine send_missing_data +end module upp_ifi_mod + +!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! + +#else + +!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! + +! Actual IFI code. +module upp_ifi_mod + use ifi_type_mod + use ifi_mod + use iso_c_binding, only: c_bool, c_int64_t, c_ptr, c_double + + implicit none + + private + public run_ifi, set_ifi_dims, ifi_real_t + + real, parameter :: feet2meters = 0.3048 + + type(IFIConfig) :: ifi_config + logical :: have_read_ifi_config = .false. + logical, public :: write_ifi_debug_files = .false. + + ! Communication-related variables for gathers and + ! scatters. Gathering is done in the i direction first, all to one + ! rank in each row. Then that rank in each row gathers to the + ! destination rank. Scatter follows the same process, in reverse. + + integer :: ifi_mpi_real_kind=-999 + integer :: row_comm = -999 ! communicator for i-direction messages + integer :: col_comm = -999 ! communicator for j-direction messages + integer :: row_comm_rank=-999, col_comm_rank=-999 ! Rank in the i & j comm communicators + integer :: row_comm_size=-999, col_comm_size=-999 ! Size of the i & j comm communicators + integer :: grid_rank ! rank within mpi_comm_comp + + integer, allocatable :: ista_grid(:) ! ista for each rank in mpi_comm_comp in i direction + integer, allocatable :: jsta_grid(:) ! jsta for each rank in mpi_comm_comp in j direction + + real, allocatable :: rearrange(:,:) ! for rearranging data on local processor + integer, allocatable :: row_comm_count(:) ! scatterv&gatherv receive counts for i-direction collectives + integer, allocatable :: row_comm_displ(:) ! scatterv&gatherv displacements for i-direction collectives + integer, allocatable :: row_ista(:) ! i starts for rearranging data (icomm_size) + integer, allocatable :: row_iend(:) ! i ends for rearranging data (icomm_size) + real, allocatable :: rearrange_row1d(:) ! for rearranging data for an entire row (roots of icomm communicators) + + real, allocatable :: rearrange_row2d(:,:) ! for rearranging data for an entire row (roots of icomm communicators) + integer, allocatable :: col_comm_count(:) ! scatterv&gatherv receive counts for j-direction collectives + integer, allocatable :: col_comm_displ(:) ! scatterv&gatherv displacements for j-direction collectives + integer, allocatable :: col_jsta(:) ! j starts for rearranging data (jcomm_size) + integer, allocatable :: col_jend(:) ! j ends for rearranging data (jcomm_size) + + integer, allocatable :: isize_grid(:) ! iend-ista+1 for each gridpoint + +contains !============================================================== + + subroutine make_communicators + use ctlblk_mod, only: jsta, jend, ista, iend, mpi_comm_comp, im, jm + use mpi + use iso_c_binding, only: c_sizeof + implicit none + + integer, allocatable :: key(:) ! ensure ranks are in a consistent order + integer :: size, ierr, local_count, accum, irank, i + real(kind=ifi_real_t) :: testreal + + if(allocated(jsta_grid)) then + return ! Already made communicators + endif + + ! Use the right MPI type for the ifi real kind + if(c_sizeof(testreal)==4) then + ifi_mpi_real_kind=MPI_REAL4 + else + ifi_mpi_real_kind=MPI_REAL8 + endif + + ! Get the correct size of the communicator before we try to split it. + call MPI_Comm_size(mpi_comm_comp,size,ierr) + call MPI_Comm_rank(mpi_comm_comp,grid_rank,ierr) + +! 929 format('Rank ',I0,' ista=',I0,' jsta=',I0) +! print 929,grid_rank,ista,jsta + + if(allocated(ista_grid)) then + deallocate(ista_grid) + deallocate(jsta_grid) + deallocate(rearrange) + deallocate(rearrange_row1d) + deallocate(rearrange_row2d) + deallocate(row_ista) + deallocate(row_iend) + deallocate(row_comm_count) + deallocate(row_comm_displ) + deallocate(col_jsta) + deallocate(col_jend) + deallocate(col_comm_count) + deallocate(col_comm_displ) + endif + + ! Get the start locations on every rank. We need this for the key, + ! and for determining root ranks. + allocate(ista_grid(size)) + allocate(jsta_grid(size)) + ista_grid=-1 + jsta_grid=-1 + call MPI_Allgather(ista,1,MPI_INTEGER,ista_grid,1,MPI_INTEGER,mpi_comm_comp,ierr) + call MPI_Allgather(jsta,1,MPI_INTEGER,jsta_grid,1,MPI_INTEGER,mpi_comm_comp,ierr) + + ! Ensure ranks are arranged in a consistent order. + allocate(key(size)) + do i=1,size + if(ista_grid(i)==-1) then + write(0,*) 'invalid ista_grid ',ista_grid(i) + call mpi_abort(mpi_comm_world,1,ierr) + endif + if(jsta_grid(i)==-1) then + write(0,*) 'invalid jsta_grid ',jsta_grid(i) + call mpi_abort(mpi_comm_world,1,ierr) + endif + key(i) = ista_grid(i) + im*(jsta_grid(i)-1) + enddo + + ! Create a communicator for row gather/scatter (all ranks that share a jsta) + if(all(jsta_grid==jsta_grid(1))) then + row_comm = mpi_comm_comp + else + call mpi_comm_split(mpi_comm_comp,jsta_grid(grid_rank+1),key(grid_rank+1),row_comm,ierr) + endif + if(row_comm==MPI_COMM_NULL .or. row_comm==0) then + write(0,*) 'MPI_Comm_split gave MPI_COMM_NULL for row_comm' + call mpi_abort(mpi_comm_world,1,ierr) + endif + call mpi_comm_rank(row_comm,row_comm_rank,ierr) + call mpi_comm_size(row_comm,row_comm_size,ierr) + + ! Create a communicator for column gather/scatter (all ranks that share an ista) + if(all(ista_grid==ista_grid(1))) then + col_comm = mpi_comm_comp + else + call mpi_comm_split(mpi_comm_comp,ista_grid(grid_rank+1),key(grid_rank+1),col_comm,ierr) + endif + if(col_comm==MPI_COMM_NULL .or. col_comm==0) then + write(0,*) 'MPI_Comm_split gave MPI_COMM_NULL for col_comm' + call mpi_abort(mpi_comm_world,1,ierr) + endif + call mpi_comm_rank(col_comm,col_comm_rank,ierr) + call mpi_comm_size(col_comm,col_comm_size,ierr) + + ! Done with the key. + deallocate(key) + + ! Allocate the arrays used to rearrange data. + allocate(rearrange(ista:iend,jsta:jend)) + allocate(rearrange_row1d(im*(jend-jsta+1))) + allocate(rearrange_row2d(1:im,jsta:jend)) + + ! Calculate information for row MPI_Gatherv and MPI_Scatterv calls. + allocate(row_ista(row_comm_size)) + call MPI_Allgather(ista,1,MPI_INTEGER,row_ista,1,MPI_INTEGER,row_comm,ierr) + allocate(row_iend(row_comm_size)) + call MPI_Allgather(iend,1,MPI_INTEGER,row_iend,1,MPI_INTEGER,row_comm,ierr) + allocate(row_comm_count(row_comm_size)) + allocate(row_comm_displ(row_comm_size)) + call get_count_and_displ(row_comm,row_comm_size,(iend-ista+1)*(jend-jsta+1), & + row_comm_count,row_comm_displ) + + ! Calculate information for j-direction MPI_Gatherv and MPI_Scatterv calls. + allocate(col_jsta(col_comm_size)) + call MPI_Allgather(jsta,1,MPI_INTEGER,col_jsta,1,MPI_INTEGER,col_comm,ierr) + allocate(col_jend(col_comm_size)) + call MPI_Allgather(jend,1,MPI_INTEGER,col_jend,1,MPI_INTEGER,col_comm,ierr) + allocate(col_comm_count(col_comm_size)) + allocate(col_comm_displ(col_comm_size)) + call get_count_and_displ(col_comm,col_comm_size,im*(jend-jsta+1), & + col_comm_count,col_comm_displ) + + end subroutine make_communicators + + ! -------------------------------------------------------------------- + + subroutine get_count_and_displ(comm,comm_size,here,counts,displacements) + use mpi + implicit none + integer, intent(in) :: comm,comm_size,here + integer, intent(inout) :: counts(comm_size),displacements(comm_size) + integer :: accum, ierr, i + + ! Get counts from all ranks + call MPI_Allgather(here,1,MPI_INTEGER,counts,1,MPI_INTEGER,comm,ierr) + + ! Displacements are a cumulative sum starting at 0 for rank 0 + accum=0 + do i=1,comm_size + displacements(i) = accum + accum = accum+counts(i) + end do + end subroutine get_count_and_displ + + ! -------------------------------------------------------------------- + + subroutine find_comm_roots(global_rank,row_root,col_root) + ! Find the roots of the row and column communicators for a gather + ! or scatter with the specified rank as the location of the global + ! array. + use mpi + implicit none + + integer, intent(in) :: global_rank + integer, intent(inout) :: row_root,col_root + integer :: r, destination_ista, destination_jsta, ierr + + ! print *,'find roots for rank ',global_rank + + destination_ista=ista_grid(global_rank+1) + destination_jsta=jsta_grid(global_rank+1) + + row_root=-1 + do r=1,row_comm_size + if(row_ista(r)==destination_ista) then + row_root=r-1 + exit + endif + enddo + + col_root=-1 + do r=1,col_comm_size + if(col_jsta(r)==destination_jsta) then + col_root=r-1 + exit + endif + enddo + +! 201 format('root is row_root=',I0,' col_root=',I0,' for rank ',I0) +! print 201,row_root,col_root,global_rank + + if(col_root==-1) then + write(0,'(A,I0)') 'ABORT: Could not find column root rank for rank ',global_rank + call mpi_abort(mpi_comm_world,1,ierr) + endif + if(row_root==-1) then + write(0,'(A,I0)') 'ABORT: Could not find row root rank for rank ',global_rank + call mpi_abort(mpi_comm_world,1,ierr) + endif + end subroutine find_comm_roots + + ! -------------------------------------------------------------------- + + subroutine global_gather(local,global,global_rank,ista_local,iend_local,jsta_local,jend_local) + ! Gather from local arrays on all ranks to global array on specified rank + use mpi + use ctlblk_mod, only: jsta, jend, ista, iend, im, jm + use iso_c_binding, only: c_sizeof + implicit none + + real(kind=ifi_real_t), intent(in) :: local(ista_local:iend_local,jsta_local:jend_local) + real(kind=ifi_real_t), intent(out) :: global(im,jm) + integer, intent(in) :: global_rank,ista_local,iend_local,jsta_local,jend_local + + integer :: i,j,r,inindex,row_root,col_root, destination_ista, destination_jsta,ni_rank,nj_rank,idxstart, ierr + + if(col_comm==0 .or. col_comm==MPI_COMM_NULL) then + write(0,*) 'somehow, col_comm became invalid ',col_comm + call mpi_abort(mpi_comm_world,1,ierr) + endif + + if(row_comm==0 .or. row_comm==MPI_COMM_NULL) then + write(0,*) 'somehow, row_comm became invalid ',row_comm + call mpi_abort(mpi_comm_world,1,ierr) + endif + + ! Find out who is the root of the i and j direction communications. + call find_comm_roots(global_rank,row_root,col_root) + + ! Store the data in a contiguous local array + !$OMP PARALLEL DO COLLAPSE(2) PRIVATE(i,j) + do j=jsta,jend + do i=ista,iend + rearrange(i,j) = local(i,j) + enddo + enddo + + ! Gather across all ranks in row + call MPI_Gatherv(rearrange,(jend-jsta+1)*(iend-ista+1),ifi_mpi_real_kind, & + rearrange_row1d,row_comm_count,row_comm_displ,ifi_mpi_real_kind,row_root,row_comm,ierr) + + if(row_comm_rank==row_root) then + ! Rearrange from i-j-rank dimensions to i-j dimensions. + idxstart=1 + do r=1,row_comm_size + + ni_rank=row_iend(r)-row_ista(r)+1 + nj_rank=jend-jsta+1 + ! print *,'r,ista,iend=',r,row_ista(r),row_iend(r) + + !$OMP PARALLEL DO COLLAPSE(2) PRIVATE(inindex) + do j=0,nj_rank-1 + do i=0,ni_rank-1 + inindex = idxstart + i + ni_rank*j + rearrange_row2d(i+row_ista(r),j+jsta) = rearrange_row1d(inindex) + enddo + enddo + + idxstart = idxstart + ni_rank*nj_rank + enddo + + ! Gather along columns + ! print *,'global gatherv to rank ',grid_rank + call MPI_Gatherv(rearrange_row2d,im*(jend-jsta+1),ifi_mpi_real_kind, & + global,col_comm_count,col_comm_displ,ifi_mpi_real_kind,col_root,col_comm,ierr) + endif + + ! print *,'global_gather success' + end subroutine global_gather + + ! -------------------------------------------------------------------- + + subroutine global_scatter(local,global,global_rank,ista_local,iend_local,jsta_local,jend_local) + ! Scatter from global array at specified rank to local arrays on all ranks. + ! NOTE: Does NOT update halo regions! + use mpi + use ctlblk_mod, only: jsta, jend, ista, iend, im, jm + use iso_c_binding, only: c_sizeof + implicit none + + real(kind=ifi_real_t), intent(out) :: local(ista_local:iend_local,jsta_local:jend_local) + real(kind=ifi_real_t), intent(in) :: global(im,jm) + integer, intent(in) :: global_rank,ista_local,iend_local,jsta_local,jend_local + + integer :: i,j,r,outindex,idxstart,ni_rank,nj_rank,col_root,ierr,row_root + + if(col_comm==0 .or. col_comm==MPI_COMM_NULL) then + write(0,*) 'somehow, col_comm became invalid ',col_comm + call mpi_abort(mpi_comm_world,1,ierr) + endif + + if(row_comm==0 .or. row_comm==MPI_COMM_NULL) then + write(0,*) 'somehow, row_comm became invalid ',row_comm + call mpi_abort(mpi_comm_world,1,ierr) + endif + + ! Find out who is the root of the i and j direction communications. + call find_comm_roots(global_rank,row_root,col_root) + + if(row_comm_rank==row_root) then + ! Distribute in J direction. + ! print *,'global scatterv from rank ',grid_rank + call MPI_Scatterv(global, col_comm_count, col_comm_displ, ifi_mpi_real_kind, & + rearrange_row2d ,im*(jend-jsta+1), ifi_mpi_real_kind, col_root, col_comm, ierr) + ! Rearrange from i-j dimensions to i-j-rank dimensions + idxstart=1 + do r=1,row_comm_size + + ni_rank=row_iend(r)-row_ista(r)+1 + nj_rank=jend-jsta+1 + + !$OMP PARALLEL DO COLLAPSE(2) PRIVATE(outindex) + do j=0,nj_rank-1 + do i=0,ni_rank-1 + outindex = idxstart + i + ni_rank*j + rearrange_row1d(outindex) = rearrange_row2d(i+row_ista(r),j+jsta) + enddo + enddo + + idxstart = idxstart + ni_rank*nj_rank + enddo + endif + + ! Distribute across row + call MPI_Scatterv(rearrange_row1d,row_comm_count,row_comm_displ,ifi_mpi_real_kind, & + rearrange,(iend-ista+1)*(jend-jsta+1),ifi_mpi_real_kind,row_root,row_comm,ierr) + + ! Copy back to contiguous local array. + ! NOTE: Does NOT update the halo! + !$OMP PARALLEL DO COLLAPSE(2) PRIVATE(i,j) + do j=jsta,jend + do i=ista,iend + local(i,j) = rearrange(i,j) + enddo + enddo + + ! print *,'global_scatter success' + + end subroutine global_scatter + + ! -------------------------------------------------------------------- + + subroutine ifi_check(status,error_message) + use mpi, only: MPI_Abort, MPI_COMM_WORLD + implicit none + integer(c_int64_t), intent(in) :: status + character(*), intent(in) :: error_message + integer :: ierr + + ! Exit program if status is non-zero + if(status/=0) then + write(0,'("IFI Failed: ",A)') trim(error_message) + call MPI_Abort(MPI_COMM_WORLD,1,ierr) + endif + end subroutine ifi_check + + ! -------------------------------------------------------------------- + + subroutine read_ifi_config() + implicit none + ! Only read the config if we haven't already: + if(.not.have_read_ifi_config) then + call ifi_check(ifi_config%init(),'read IFI config') + have_read_ifi_config = .true. + endif + end subroutine read_ifi_config + + ! -------------------------------------------------------------------- + + subroutine set_ifi_dims() + use CTLBLK_mod, only: ifi_nflight, ifi_flight_levels + implicit none + + ! Warning: do not deallocate config_flight_levels_feet. + ! The IFI C++ library manages that array. + integer(kind=c_int64_t), pointer :: config_flight_levels_feet(:) + integer :: i + + ! Make sure the config was read in + call read_ifi_config() + + ! Get the flight levels + call ifi_check(ifi_config%get_flight_levels_feet(config_flight_levels_feet), & + 'cannot get flight levels in feet from IFI config') + + ! Convert from integer to real: + ifi_nflight = size(config_flight_levels_feet) + if(allocated(ifi_flight_levels)) then + deallocate(ifi_flight_levels) + endif + allocate(ifi_flight_levels(ifi_nflight)) + ifi_flight_levels = config_flight_levels_feet + +! print '(A)','IFI flight levels:' +! 38 format(' ifi_flight_level[',I0,'] = ',F15.5) +! do i=1,ifi_nflight +! print 38,i,ifi_flight_levels(i) +! enddo + + end subroutine set_ifi_dims + + ! -------------------------------------------------------------------- + + subroutine send_data(vars,name,ient) + use ctlblk_mod, only: spval, jsta, jend, lm, cfld, datapd, fld_info, ifi_flight_levels, jsta_2l, jend_2u, ista, iend, ista_2l, iend_2u + use rqstfld_mod, only: iget, iavblfld, lvlsxml, lvls + implicit none + + class(IFIData) :: vars + integer, intent(in) :: ient + character(*), intent(in) :: name + + ! Locals + integer(c_int64_t) :: & + ims,ime,jms,jme,kms,kme, ids,ide,jds,jde,kds,kde, ips,ipe,jps,jpe,kps,kpe + real(kind=ifi_real_t), pointer :: data(:) + logical(c_bool) :: missing_value_is_set + real(kind=ifi_real_t) :: missing_value + integer :: i,j,k,nj_local,jpad,ilen,jlen,kstartm1,jstartm1,iloc,ndata,ji,ni_local,ipad + + if(.not. IGET(ient)>0) then + return + endif + + ! WARNING: do not deallocate the data pointer. It is managed by the IFI C++ library. + data => vars%get_data(trim(name),missing_value_is_set,missing_value, & + ims,ime,jms,jme,kms,kme, ids,ide,jds,jde,kds,kde, ips,ipe,jps,jpe,kps,kpe) + if(.not.missing_value_is_set) then + missing_value = MISSING + endif + + ! Get dimensions and do some sanity checks + nj_local = jpe-jps+1 + ni_local = ipe-ips+1 + jpad = jps-jms + ipad = ips-ims + if(nj_local/=jend-jsta+1 .or. jpad/=jsta-jsta_2l .or. ni_local/=iend-ista+1 .or. ipad/=ista-ista_2l) then +94 format(' ',A,' = ',I0,', ',I0) +83 format('Warning: ',A,': IFI output j bounds do not match UPP j bounds') + print 83,trim(name) + print 94,'jps,jsta',jps,jsta + print 94,'jpe,jend',jpe,jend + print 94,'jms,jsta_2l',jms,jsta_2l + print 94,'jme,jend_2u',jme,jend_2u + print 94,'jpad,jsta-jsta_2l',jpad,jsta-jsta_2l + print 94,'nj_local,jend-jsta+1',nj_local,jend-jsta+1 + print 94,'ips,ista',ips,ista + print 94,'ipe,iend',ipe,iend + print 94,'ims,ista_2l',ims,ista_2l + print 94,'ime,iend_2u',ime,iend_2u + print 94,'ipad,ista-ista_2l',ipad,ista-ista_2l + print 94,'ni_local,iend-ista+1',ni_local,iend-ista+1 + !call ifi_check(-1,'Internal error: IFI output j bounds do not match UPP j bounds') + end if + ilen=ime-ims+1 + jlen=jme-jms+1 + ndata=ilen*jlen*(kme-kms+1) + + ! Go level-by-level writing grib2 if requested + do k=kps,kpe + kstartm1=ilen*jlen*(k-kms) + if(LVLS(k,IGET(ient))>0) then + cfld = cfld+1 + fld_info(cfld)%ifld = IAVBLFLD(IGET(ient)) + fld_info(cfld)%lvl = k ! ifi_flight_levels(k)*feet2meters + !$OMP PARALLEL DO PRIVATE(i,j,iloc,jstartm1) COLLAPSE(2) + do j=jps,jpe + do i=ips,ipe + jstartm1 = kstartm1 + (j-jms)*ilen + iloc = jstartm1+(i-ims)+1 + if(iloc<1 .or. iloc>size(data)) then + call ifi_check(-1,'Internal error: out of bounds in send_data.') + endif + if(data(iloc)==missing_value) then + datapd(i-ips+1,j-jps+1,cfld) = spval + else + datapd(i-ips+1,j-jps+1,cfld) = data(iloc) + endif + enddo + enddo + endif + enddo + end subroutine send_data + + ! -------------------------------------------------------------------- + + subroutine gather_ifi(local_buf_c,global_buf_c,receiving_rank) bind(C) + use iso_c_binding, only: c_float, c_double,c_int64_t,c_f_pointer + use mpi + use ctlblk_mod, only: ME, MPI_COMM_COMP, JSTA, JEND, IM, JM, ICNT, IDSP, ISTA, IEND + implicit none + + integer(kind=c_int64_t), value :: receiving_rank + type(c_ptr), value :: global_buf_c, local_buf_c + real(kind=ifi_real_t), pointer :: global_buf(:,:), local_buf(:,:) + + integer :: type, iret + + call c_f_pointer(local_buf_c,local_buf,(/ iend-ista+1, jend-jsta+1 /)) + if(me==receiving_rank) then + call c_f_pointer(global_buf_c,global_buf,(/ im, jm /)) + else + call c_f_pointer(global_buf_c,global_buf,(/ 1,1 /)) + endif + + call gather_for_write(local_buf,global_buf,receiving_rank) + + end subroutine gather_ifi + + ! -------------------------------------------------------------------- + + subroutine gather_for_write(local_buf,global_buf,receiving_rank_c) bind(C) + use iso_c_binding, only: c_float, c_double,c_int64_t,c_f_pointer + use mpi + use ctlblk_mod, only: ME, MPI_COMM_COMP, JSTA, JEND, IM, JM, ISTA, ISTA, IEND + implicit none + + integer(kind=c_int64_t), value :: receiving_rank_c + real(kind=ifi_real_t) :: global_buf(:,:), local_buf(:,:) + integer :: receiving_rank + receiving_rank = receiving_rank_c + call global_gather(local_buf,global_buf,receiving_rank,ista,iend,jsta,jend) + end subroutine gather_for_write + + ! -------------------------------------------------------------------- + + subroutine scatter_ifi(local_buf_c,global_buf_c,sending_rank_c)bind(C) + use iso_c_binding, only: c_float, c_double, c_int64_t, c_f_pointer + use mpi + use ctlblk_mod, only: JSTA, JEND, IM, JM, ISTA, IEND, ME + implicit none + + integer(kind=c_int64_t), value :: sending_rank_c + type(c_ptr), value :: global_buf_c, local_buf_c + real(kind=ifi_real_t), pointer :: global_buf(:,:), local_buf(:,:) + integer :: sending_rank + + sending_rank=sending_rank_c + + call c_f_pointer(local_buf_c,local_buf,(/ iend-ista+1, jend-jsta+1 /)) + if(me==sending_rank) then + call c_f_pointer(global_buf_c,global_buf,(/ im, jm /)) + else + call c_f_pointer(global_buf_c,global_buf,(/ 1,1 /)) + endif + + call global_scatter(local_buf,global_buf,sending_rank,ista,iend,jsta,jend) + end subroutine scatter_ifi + + ! -------------------------------------------------------------------- + + subroutine run_ifi() + use ctlblk_mod, only: spval, lm, lp1, im, jsta_2l,jend_2u, ITPREC, IFHR, IFMIN, grib, & + jm, jsta,jend, me, num_procs, mpi_comm_comp, ista, iend, ista_2l, iend_2u, dtq2 + use vrbls3d, only: & + zmid, & ! = IFI "HGT" + zint, & ! zint(:,:,LM+1) = IFI "HGT_surface" + QQI, & ! = IFI "CIMIXR" + QQG, & ! = IFI "GRLE" + QQW, & ! = IFI "CLMR" + pmid, & ! = IFI "PRES" + QQR, & ! "RWMR" + q, & ! "SPFH" + t, & ! "TMP" + QQS, & ! "SNMR" + OMGA ! "VVEL" + use vrbls2d, only : & + IFI_APCP, & ! IFI "APCP_surface" over ITPREC bucket time + CAPE, CIN, & + AVGPREC_CONT ! Backup plan for points where IFI_APCP is invalid or 0 + use rqstfld_mod, only: IGET + use iso_c_binding, only: c_bool, c_int64_t + + implicit none + + INTERFACE ! implemented in EXCH_c_float.f + SUBROUTINE EXCH_c_float(A) BIND(C) + use ifi_type_mod, only: ifi_real_t + implicit none + real(kind=ifi_real_t) :: a(*) + END SUBROUTINE EXCH_c_float + END INTERFACE + + type(IFIData) :: hybr_vars, pres_vars, derived_vars, fip_algo_vars, flight_vars, cat_vars + type(IFIAlgo) :: algo + character(88) :: outfile + real :: to_hourly + real(c_double) :: fcst_lead_sec + integer :: i, j + + ! FIXME: Once the post is i-decomposed, replace the appropriate 1..im in this routine. + + if(grib/='grib2' .or. (IGET(1007)<=0 .and. IGET(1008)<=0 .and. IGET(1009)<=0 .and. IGET(1010)<=0)) then + if(me==0) then + print '(A)','IFI fields were not requested; skipping IFI' + endif + return ! nothing to do + endif + + if(me==0) then + print '(A)','Running libIFI to get icing products.' + call ifi_print_copyright() + + if(write_ifi_debug_files) then + print '(A)','Will output IFI debug files.' + else + print '(A)','Will NOT output IFI debug files.' + endif + endif + + if(write_ifi_debug_files) then + call make_communicators() + endif + + ! Read config and initialize input data structures: + + call read_ifi_config() + call ifi_check(hybr_vars%init(int(1,c_int64_t),int(im,c_int64_t),int(1,c_int64_t),int(jm,c_int64_t),& + int(1,c_int64_t),int(lm,c_int64_t),int( ista,c_int64_t),int(iend,c_int64_t),int(jsta,c_int64_t),& + int(jend,c_int64_t),int(1,c_int64_t),int(lm,c_int64_t)),& + 'could not initialize IFI input data structures') + + ! Copy 2D vars to IFI internal structures: + + call ifi_check(hybr_vars%add_ij_var('topography',int(ista_2l,c_int64_t),int(iend_2u,c_int64_t),& + int(jsta_2l,c_int64_t),int(jend_2u,c_int64_t), & + zint(:,:,LP1)),'could not send topography to IFI') + + to_hourly=3600*1000.0/dtq2 +!$OMP PARALLEL DO COLLAPSE(2) + do j=jsta,jend + do i=ista,iend + if(ifi_apcp(i,j)>9e9 .or. ifi_apcp(i,j)<-9e9 .or. ifi_apcp(i,j)==0) then + ifi_apcp(i,j) = avgprec_cont(i,j)*to_hourly + else if(ITPREC>1e-5) then + ifi_apcp(i,j) = ifi_apcp(i,j)/itprec + endif + enddo + enddo + + call ifi_check(hybr_vars%add_ij_var('APCP_surface',int(ista_2l,c_int64_t),int(iend_2u,c_int64_t),& + int(jsta_2l,c_int64_t),int(jend_2u,c_int64_t), & + IFI_APCP),'could not send IFI_APCP to IFI') + call ifi_check(hybr_vars%add_ij_var('CAPE_surface',int(ista_2l,c_int64_t),int(iend_2u,c_int64_t), & + int(jsta_2l,c_int64_t),int(jend_2u,c_int64_t),CAPE), & + 'could not send CAPE to IFI') + call ifi_check(hybr_vars%add_ij_var('CIN_surface',int(ista_2l,c_int64_t),int(iend_2u,c_int64_t), & + int(jsta_2l,c_int64_t),int(jend_2u,c_int64_t),CIN), & + 'could not send CIN to IFI') + + ! Copy 3D vars to IFI internal structures, inverting K dimension + + call add_ijk_var('HGT','zmid',zmid) + call add_ijk_var('CIMIXR','QQI',QQI) + call add_ijk_var('CLMR','QQW',QQW) + call add_ijk_var('GRLE','QQG',QQG) + call add_ijk_var('PRES','pmid',pmid) + call add_ijk_var('RWMR','QQR',QQR) + call add_ijk_var('SPFH','Q',Q) + call add_ijk_var('TMP','T',T) + call add_ijk_var('SNMR','QQS',QQS) + call add_ijk_var('VVEL','OMGA',OMGA) + +308 format(A,'_',I0,'.nc') + + fcst_lead_sec=IFHR*3600.0+IFMIN*60.0 + + if(write_ifi_debug_files) then + write(outfile,308) 'hybr_vars',me + call write_fip_output(hybr_vars,fcst_lead_sec,trim(outfile),.true.,'z0','z1') + endif + + ! Initialize the IFI algorithm + + call ifi_check(algo%init(ifi_config,fcst_lead_sec,hybr_vars,ME,NUM_PROCS,MPI_COMM_COMP), & + 'could not initialize IFI algorithm') + + ! Run the IFI algorithm + + call ifi_check(algo%calc_exner(),'calc_exner() failed') + call ifi_check(algo%hybrid_to_pressure(),'hybrid_to_pressure() failed') + + call ifi_check(algo%get_pres_vars(pres_vars),'get_pres_vars()') + if(write_ifi_debug_files) then + write(outfile,308) 'pres_vars',me + call write_fip_output(pres_vars,fcst_lead_sec,trim(outfile),.true.,'z1','z0') + endif + + call ifi_check(algo%discard_hybrid_level_vars(),'discard_hybrid_level_vars() failed') + + call ifi_check(algo%derive_fields(),'derive_fields() failed') + + call ifi_check(algo%get_derived_vars(derived_vars),'get_derived_vars()') + if(write_ifi_debug_files) then + write(outfile,308) 'derived_vars',me + call write_fip_output(derived_vars,fcst_lead_sec,trim(outfile),.false.,'z1','z0') + endif + + call ifi_check(algo%run_fip_algo(),'run_fip_algo() failed') + + call ifi_check(algo%get_fip_algo_vars(pres_vars),'get_fip_algo_vars()') + if(write_ifi_debug_files) then + write(outfile,308) 'fip_algo_vars',me + call write_fip_output(pres_vars,fcst_lead_sec,trim(outfile),.false.,'z1','z0') + endif + + call ifi_check(algo%discard_pressure_level_vars(),'discard_pressure_level_vars() failed') + call ifi_check(algo%discard_derived_vars(),'discard_derived_vars() failed') + call ifi_check(algo%pressure_to_flight(),'pressure_to_flight() failed') + + call ifi_check(algo%get_flight_vars(flight_vars),'get_flight_vars()') + if(write_ifi_debug_files) then + write(outfile,308) 'flight_vars',me + call write_fip_output(flight_vars,fcst_lead_sec,trim(outfile),.false.,'z1','z0') + endif + + call ifi_check(algo%discard_fip_algo_vars(),'discard_fip_algo_vars() failed') + call ifi_check(algo%make_icing_category(),'make_icing_category() failed') + + ! Get the final output fields: + + call ifi_check(algo%get_cat_vars(cat_vars),'get_cat_vars()') + + if(write_ifi_debug_files) then + write(outfile,308) 'cat_vars',me + call write_fip_output(cat_vars,fcst_lead_sec,trim(outfile),.false.,'z1','z0') + endif + + call send_data(cat_vars,'ICE_PROB',1007) + call send_data(cat_vars,'SLD',1008) + call send_data(cat_vars,'ICE_SEV_CAT',1009) + call send_data(cat_vars,'WMO_ICE_SEV_CAT',1010) + + ! When this subroutine ends, a Fortran-2003-compliant compiler + ! will free all memory IFI uses, by calling the destructors (final + ! routines) for cat_vars, hybr_vars, algo, and config. + + contains + + subroutine add_ijk_var(ifi_name,upp_name,upp_var) + implicit none + character(len=*), intent(in) :: ifi_name,upp_name + real, intent(in) :: upp_var(ISTA_2L:IEND_2U,JSTA_2L:JEND_2U,LM) + real(kind=ifi_real_t) :: ifi_var(ISTA_2L:IEND_2U,JSTA_2L:JEND_2U,LM) + integer i,j,k + +!$OMP PARALLEL DO COLLAPSE(2) + do k=1,lm + do j=jsta_2l,jend_2u + do i=ista_2l,iend_2u + ifi_var(i,j,k) = upp_var(i,j,lm-k+1) + enddo + enddo + enddo + + call ifi_check(hybr_vars%add_ijk_var(ifi_name,int(ista_2l,c_int64_t),int(iend_2u,c_int64_t),& + int(jsta_2l,c_int64_t),int(jend_2u,c_int64_t),& + int(1,c_int64_t),int(lm,c_int64_t),ifi_var), & + 'could not send '//ifi_name//' ('//upp_name//') to IFI') + end subroutine add_ijk_var + + end subroutine run_ifi + +!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! + + subroutine find_range(var,count,missing_value_is_set,missing_value,min_not_miss,max_not_miss,all_missing) + USE ieee_arithmetic + use mpi + use ctlblk_mod, only: mpi_comm_comp + implicit none + real(kind=ifi_real_t), intent(in) :: var(*) + real(kind=ifi_real_t), intent(in) :: missing_value + real(kind=ifi_real_t), intent(out) :: min_not_miss,max_not_miss + integer, intent(in) :: count + logical, intent(out) :: all_missing + logical(c_bool), intent(in) :: missing_value_is_set + + real(kind=ifi_real_t) :: minv,maxv,epsilon, global_minv,global_maxv + integer :: i,type,iret + real(kind=ifi_real_t), parameter :: zero = 0 + + print *,'find range begin' + + if(missing_value_is_set) then + epsilon = abs(missing_value)*1e-4 + if(.not. epsilon+1>epsilon) then + epsilon=1 + endif + endif + + ! Initialize to out-of-bounds values so they'll stay that way if no valid values are found: + minv = 1e30 + maxv = -1e30 + + ! Find the min and max values in the array: + if(missing_value_is_set) then + !$OMP PARALLEL DO REDUCTION(min:minv) REDUCTION(max:maxv) + do i=1,count + if(.not. abs(var(i)-missing_value)>epsilon .and. var(i)<9e9 .and. var(i)>-9e9) then + minv=min(minv,var(i)) + maxv=max(maxv,var(i)) + endif + end do + else + !$OMP PARALLEL DO REDUCTION(min:minv) REDUCTION(max:maxv) + do i=1,count + if(var(i)+1>var(i)) then + if(var(i)<9e9 .and. var(i)>-9e9) then + minv=min(minv,var(i)) + maxv=max(maxv,var(i)) + endif + endif + end do + endif + + if(ifi_real_t==c_double) then + type=MPI_REAL8 + else + type=MPI_REAL4 + endif + + ! call MPI_Allreduce(minv,global_minv,1,type,MPI_MIN,mpi_comm_comp,iret) + ! call MPI_Allreduce(maxv,global_maxv,1,type,MPI_MAX,mpi_comm_comp,iret) + global_minv=minv + global_maxv=maxv + + ! If min or max are inf, -inf, or NaN, assume all values are missing. + all_missing = global_minv<-9e9 .or. global_minv>9e9 .or. global_maxv<-9e9 .or. global_maxv>9e9 + + print *,'range min,max = ',global_minv,global_maxv + + if(all_missing) then + min_not_miss=-1 + max_not_miss=1 + else + min_not_miss=global_minv + max_not_miss=global_maxv + endif + + print *,'find range end' + end subroutine find_range + +!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! + + subroutine nc_check(code,file,message) + use netcdf + use mpi + implicit none + integer, intent(in) :: code + character(*), intent(in) :: file, message + integer :: i, ierr + if(code/=0) then + write(0,93) trim(file),trim(message),trim(nf90_strerror(code)),code + call mpi_abort(mpi_comm_world,1,ierr) + endif + 93 format(A,': ',A,': ',A,'(',I0,')') + end subroutine nc_check + + subroutine write_fip_output(ifi_data,fcst_lead_sec,output_file,rename,z2dname,z3dname) + use ifi_mod + use iso_c_binding + use netcdf + use ctlblk_mod, only: me + implicit none + integer, parameter :: maxname=80 + integer, parameter :: maxvars=999 + logical, intent(in) :: rename + double precision, intent(in) :: fcst_lead_sec + character(len=*), intent(in) :: z2dname,z3dname + type var_info + character(len=maxname) :: varname, outname + integer :: varid, ndims, dims(4), dimids(4), count + real(ifi_real_t), pointer :: data(:) + integer :: ims,ime,jms,jme,kms,kme + integer :: ids,ide,jds,jde,kds,kde + integer :: ips,ipe,jps,jpe,kps,kpe + logical :: should_dealloc + real(kind=ifi_real_t) :: missing_value + real(kind=ifi_real_t) :: min_not_miss,max_not_miss + logical(c_bool) :: missing_value_is_set + logical :: all_missing + end type var_info + character(len=*), intent(in) :: output_file + + type(IFIData) :: ifi_data + integer(c_int64_t) :: ids,ide, jds,jde, kds,kde + integer(c_int64_t) :: ips,ipe, jps,jpe, kps,kpe + integer(c_int64_t) :: ims,ime, jms,jme, kms,kme + integer :: count + + character(len=200) :: varname,nextname + + integer :: dimids(4), ncid, ivar, id, nvars, nx0, ny0, nz0, ntime, dims(4) + type(var_info),target :: var_data(maxvars) + + if(me==0) then + write(0,'(A,A)') trim(output_file),': writing IFI debug data' + endif + + call ifi_check(ifi_data%get_dims(ids,ide, jds,jde, kds,kde, ips,ipe, jps,jpe, kps,kpe),"get_dims") + + nx0=ide-ids+1 + ny0=jde-jds+1 + nz0=kde-kds+1 + ntime=1 + + dims = (/nx0,ny0,nz0,ntime/) + + varname=' ' ! special value indicating "start at the beginning" + + ivar=0 + do while(ivar read_var(var_data(ivar),trim(varname),var_data(ivar)%should_dealloc) + if(me==0) then + call set_dims(var_data(ivar),dims,dimids) + var_data(ivar)%varid = def_var(var_data(ivar),rename) + endif + enddo + + if(me/=0) then + ! Ranks that are not writing are done now + return + endif + + nvars=ivar + + if(nvars<1) then + write(0,"(A,A)") output_file,': no data to write!' + return + endif + + call nc_check(nf90_enddef(ncid),output_file,'nf90_enddef') + + write(0,*) 'before write loop ',me + do ivar=1,nvars +24 format(' put var ',A) + print 24,trim(var_data(ivar)%varname) + + call find_range(var_data(ivar)%data,var_data(ivar)%count, & + var_data(ivar)%missing_value_is_set,var_data(ivar)%missing_value,& + var_data(ivar)%min_not_miss,var_data(ivar)%max_not_miss, & + var_data(ivar)%all_missing) + call write_var(var_data(ivar)) + if(var_data(ivar)%should_dealloc) then + deallocate(var_data(ivar)%data) + endif + nullify(var_data(ivar)%data) + enddo + + call nc_check(nf90_close(ncid),output_file,"nf90_close") + contains + + subroutine set_dims(var,dims,dimids) + implicit none + type(var_info), intent(inout), target :: var + integer, intent(in) :: dims(:), dimids(:) + character(len=:), pointer :: varname + + varname=>var%varname(1:len_trim(var%varname)) + + if(me/=0) then + ! Ranks that are not writing are done now + return + endif + + ! These must also be in IFITest.cc IFITest::write_netcdf + + if(varname=='x' .or. varname=='x0') then + var%dims=(/nx0,1,1,1/) + var%dimids=(/dimids(1),-1,-1,-1/) + var%ndims=1 + else if(varname=='y' .or. varname=='y0') then + var%dims=(/ny0,1,1,1/) + var%dimids=(/dimids(2),-1,-1,-1/) + var%ndims=1 + else if(varname=='z' .or. varname=='z0' .or. varname=='z1' .or. & + varname=='pressure_levels' .or. varname=='exner_levels') then + var%dims=(/nz0,1,1,1/) + var%dimids=(/dimids(3),-1,-1,-1/) + var%ndims=1 + else if(varname=='latitude' .or. varname=='longitude') then + var%dims=(/nx0,ny0,1,1/) + var%dimids=(/dimids(1),dimids(2),-1,-1/) + var%ndims=2 + else if(varname=='time') then + var%dims=(/ntime,1,1,1/) + var%dimids=(/dimids(4),-1,-1,-1/) + var%ndims=1 + else if(kme<=kms) then + var%dims=(/nx0,ny0,ntime,1/) + var%dimids=(/dimids(1),dimids(2),dimids(4),-1/) + var%ndims=3 + else + var%dims=(/nx0,ny0,nz0,ntime/) + var%dimids=dimids + var%ndims=4 + endif + + var%count=var%dims(1)*var%dims(2)*var%dims(3)*var%dims(4) + end subroutine set_dims + + subroutine write_var(var) + implicit none + type(var_info), intent(inout) :: var + + integer :: ones(var%ndims), dims(var%ndims) + real(ifi_real_t) :: put(var%count) + integer :: i,j,k,n,ilen,jlen,m,imlen,jmlen + + ones = 1 + dims = var%dims(1:var%ndims) + + if(me/=0) then + ! Ranks that are not writing are done now + return + endif + + call nc_check(nf90_put_var(ncid=ncid,varid=var%varid,values=var%data, & + start=ones,count=dims), & + output_file,"nf90_put_var "//trim(var%outname)) + + call nc_check(nf90_put_att(ncid,var%varid,"min_value",var%min_not_miss), & + output_file,"nf90_put_att "//trim(var%outname)//" min_value") + + call nc_check(nf90_put_att(ncid,var%varid,"max_value",var%max_not_miss), & + output_file,"nf90_put_att "//trim(var%outname)//" max_value") + + end subroutine write_var + + integer function def_var(var,rename) + use iso_c_binding, only: c_float + implicit none + logical :: rename + type(var_info), intent(inout) :: var + + integer :: varid, xtype, dimids(var%ndims) + character(len=100) :: outname + + if(rename) then + var%outname=var%varname + select case(trim(var%varname)) + case('CIMIXR') + var%outname = 'ICMR' + case('SPFH') + var%outname = 'MIXR' + case('GRLE') + var%outname = 'GRMR' + case('CAPE_surface') + var%outname = 'CAPE' + case('CIN_surface') + var%outname = 'CIN' + case('CLMR') + var%outname = 'CLWMR' + case('APCP_surface') + var%outname = 'APCP1Hr' + end select + endif + + var%ims=ims ; var%ime=ime ; var%jms=jms ; var%jme=jme ; var%kms=kms ; var%kme=kme + var%ids=ids ; var%ide=ide ; var%jds=jds ; var%jde=jde ; var%kds=kds ; var%kde=kde + var%ips=ips ; var%ipe=ipe ; var%jps=jps ; var%jpe=jpe ; var%kps=kps ; var%kpe=kpe + + dimids = var%dimids(1:var%ndims) + + if(ifi_real_t==c_float) then + xtype = NF90_FLOAT + else + xtype = NF90_DOUBLE + endif + + call nc_check(nf90_def_var(ncid,trim(var%outname),xtype,dimids,def_var), & + output_file,"nf90_def_var "//trim(var%outname)) + + call nc_check(nf90_put_att(ncid,def_var,"min_value",var%min_not_miss), & + output_file,"nf90_put_att "//trim(var%outname)//" min_value") + + call nc_check(nf90_put_att(ncid,def_var,"max_value",var%max_not_miss), & + output_file,"nf90_put_att "//trim(var%outname)//" max_value") + + if(var%missing_value_is_set) then + call nc_check(nf90_put_att(ncid,def_var,"_FillValue",-9999.0), & + output_file,"nf90_put_att "//trim(var%outname)//" _FillValue") + end if + + end function def_var + + function read_var(var,varname,should_dealloc) + use mpi + implicit none + type(var_info), intent(inout) :: var + real(kind=ifi_real_t), pointer :: read_var(:) + real(kind=ifi_real_t), pointer :: local_data_1D(:) + character(len=*), intent(in) :: varname + logical, intent(out) :: should_dealloc + + real(kind=ifi_real_t), allocatable :: local_data(:,:),global_data(:,:) + real(kind=ifi_real_t), pointer :: global_data_1D(:) + + integer :: nxny_local,nxny_global,nz,count,i,j,k + integer :: local_ilen,local_jlen,local_klen,local_index + integer :: global_ilen,global_jlen,global_klen,global_index, ierr + type(c_ptr) :: global_cptr,local_cptr + + local_data_1D => ifi_data%get_data(trim(varname),var%missing_value_is_set,var%missing_value, & + ims,ime,jms,jme,kms,kme, ids,ide,jds,jde,kds,kde, ips,ipe,jps,jpe,kps,kpe) + + global_ilen=ide-ids+1 + global_jlen=jde-jds+1 + global_klen=kde-kds+1 + local_ilen=ipe-ips+1 + local_jlen=jpe-jps+1 + local_klen=kpe-kps+1 + + if(.not.associated(local_data_1D)) then + write(0,38) trim(varname) +38 format("IFI did not produce ",A," variable.") + call mpi_abort(mpi_comm_world,1,ierr) + end if + + count=global_ilen*global_jlen*global_klen + if(count<=0) then + write(0,39) trim(varname),count +39 format("IFI variable ",A," had no data (size=",I0,")") + call mpi_abort(mpi_comm_world,1,ierr) + endif + + if(ids==ide .or. jds==jde) then + ! This is a 1D variable so we write it as is from rank 0 + read_var => local_data_1D + should_dealloc = .false. + return + endif + +40 format('var ',A,' has bad ',A,'. Got: ',I0,' but expected: ',I0) + + if(global_ilen /= nx0) then + write(0,40) trim(varname),'global_ilen',global_ilen,nx0 + call mpi_abort(mpi_comm_world,1,ierr) + endif + + if(global_jlen /= ny0) then + write(0,40) trim(varname),'global_jlen',global_jlen,ny0 + call mpi_abort(mpi_comm_world,1,ierr) + endif + + if(global_klen/=1 .and. global_klen /= nz0) then + write(0,40) trim(varname),'global_klen',global_klen,nz0 + call mpi_abort(mpi_comm_world,1,ierr) + endif + + + allocate(local_data(local_ilen,local_jlen)) + if(me==0) then + allocate(global_data(global_ilen,global_jlen)) + allocate(global_data_1D(global_ilen*global_jlen*global_klen)) + else + allocate(global_data(1,1)) + allocate(global_data_1D(1)) + endif + + do k=kds,kde + do j=jps,jpe + do i=ips,ipe + local_data(i-ips+1,j-jps+1) = local_data_1D( 1 + (i-ims) + ((j-jms) + (k-kms)*(jme-jms+1))*(ime-ims+1) ) + enddo + enddo + call gather_for_write(local_data,global_data,0) + if(me==0) then + do j=1,global_jlen + do i=1,global_ilen + global_data_1D(1 + (i-1) + ((j-1) + (k-kds)*global_jlen)*global_ilen) = & + global_data(i,j) + enddo + enddo + endif + enddo + + ! Ranks that are not writing data are done. + if(me/=0) then + ! This rank does not have the global data, and will not use the data anyway, + ! but it wants an array, so we'll send it the local data that is managed + ! internally by libIFI. + read_var => local_data_1D + should_dealloc = .false. + deallocate(global_data_1D) + else + read_var => global_data_1D + should_dealloc = .true. + endif + + deallocate(global_data) + deallocate(local_data) + end function read_var + end subroutine write_fip_output + + +end module upp_ifi_mod + + +#endif diff --git a/sorc/ncep_post.fd/INITPOST.F b/sorc/ncep_post.fd/INITPOST.F index 8a8991bc8..195189381 100644 --- a/sorc/ncep_post.fd/INITPOST.F +++ b/sorc/ncep_post.fd/INITPOST.F @@ -1,46 +1,27 @@ !> @file -! -!> SUBPROGRAM: INITPOST INITIALIZE POST FOR RUN -!! PRGRMMR: RUSS TREADON ORG: W/NP2 DATE: 93-11-10 -!! -!! ABSTRACT: THIS ROUTINE INITIALIZES CONSTANTS AND -!! VARIABLES AT THE START OF AN ETA MODEL OR POST -!! PROCESSOR RUN. -!! -!! THIS ROUTINE ASSUMES THAT INTEGERS AND REALS ARE THE SAME SIZE -!! -!! PROGRAM HISTORY LOG: -!! 93-11-10 RUSS TREADON - ADDED DOCBLOC -!! 98-05-29 BLACK - CONVERSION OF POST CODE FROM 1-D TO 2-D -!! 99-01 20 TUCCILLO - MPI VERSION -!! 01-10-25 H CHUANG - MODIFIED TO PROCESS HYBRID MODEL OUTPUT -!! 02-06-19 MIKE BALDWIN - WRF VERSION -!! 02-08-15 H CHUANG - UNIT CORRECTION AND GENERALIZE PROJECTION OPTIONS -!! 21-03-11 Bo Cui - change local arrays to dimension (im,jsta:jend) -!! -!! USAGE: CALL INIT -!! INPUT ARGUMENT LIST: -!! NONE -!! -!! OUTPUT ARGUMENT LIST: -!! NONE -!! -!! OUTPUT FILES: -!! NONE -!! -!! SUBPROGRAMS CALLED: -!! UTILITIES: -!! NONE -!! LIBRARY: -!! COMMON - CTLBLK -!! LOOKUP -!! SOILDEPTH -!! -!! -!! ATTRIBUTES: -!! LANGUAGE: FORTRAN -!! MACHINE : CRAY C-90 -!! +!> @brief initpost() initializes post for run. +!> +!> @author Russ Treadon W/NP2 @date 1993-11-10 + +!> This routine initializes constants and +!> variables at the start of an ETA model or post +!> processor run. +!> +!> This routine assumes that integers and reals are the same size. +!> +!> ### Program History Log +!> Date | Programmer | Comments +!> -----|------------|--------- +!> 1993-11-10 | Russ Treadon | Initial. Added DOCBLOC +!> 1998-05-29 | T Black | Conversion from 1-D to 2-D +!> 1999-01-20 | Jim Tuccillo | MPI Version +!> 2001-10-25 | H CHuang | Modified to process hybrid model output +!> 2002-06-19 | Mike Baldwin | WRF Version +!> 2002-08-15 | H CHuang | Unit correction and generalize projection options +!> 2021-03-11 | Bo Cui | Change local arrays to dimension (im,jsta:jend) +!> 2023-01-24 | Sam Trahan | Comment-out wordy debug writes +!> +!> @author Russ Treadon W/NP2 @date 1993-11-10 SUBROUTINE INITPOST use vrbls4d, only: dust, smoke @@ -393,15 +374,15 @@ SUBROUTINE INITPOST do j = jsta_2l, jend_2u do i = 1, im if((PMID(I,J,ll-1) - PMID(I,J,ll))>=0.) then - write(*,*) 'non-monotonic PMID, i,j,ll ', i,j,ll - write(*,*) 'PMID: ll-1,ll,ll+1', PMID(I,J,LL-1) & - ,PMID(I,J,LL), PMID(I,J,LL+1) +! write(*,*) 'non-monotonic PMID, i,j,ll ', i,j,ll +! write(*,*) 'PMID: ll-1,ll,ll+1', PMID(I,J,LL-1) & +! ,PMID(I,J,LL), PMID(I,J,LL+1) PMID(I,J,LL)=0.5*(PMID(I,J,LL+1)+PMID(I,J,LL-1)) - write(*,*) 'after adjustment-i,j,ll ', i,j,ll - write(*,*) 'PMID: ll-1,ll,ll+1', PMID(I,J,LL-1) & - ,PMID(I,J,LL), PMID(I,J,LL+1) +! write(*,*) 'after adjustment-i,j,ll ', i,j,ll +! write(*,*) 'PMID: ll-1,ll,ll+1', PMID(I,J,LL-1) & +! ,PMID(I,J,LL), PMID(I,J,LL+1) endif end do end do @@ -420,16 +401,16 @@ SUBROUTINE INITPOST do j = jsta_2l, jend_2u do i = 1, im if((PMID(I,J,ll-1) - PMID(I,J,ll))>=0.) then - write(*,*) 'non-monotonic PMID, i,j,ll ', i,j,ll - write(*,*) 'PMID: ll-2,ll-1,ll', PMID(I,J,LL-2) & - ,PMID(I,J,LL-1), PMID(I,J,LL) + ! write(*,*) 'non-monotonic PMID, i,j,ll ', i,j,ll + ! write(*,*) 'PMID: ll-2,ll-1,ll', PMID(I,J,LL-2) & + ! ,PMID(I,J,LL-1), PMID(I,J,LL) PMID(I,J,LL)=PMID(I,J,ll-1) + & fact*(PMID(I,J,LL-1)-PMID(I,J,LL-2)) - write(*,*) 'after adjustment-i,j,ll ', i,j,ll - write(*,*) 'PMID: ll-2,ll-1,ll', PMID(I,J,LL-2) & - ,PMID(I,J,LL-1), PMID(I,J,LL) + ! write(*,*) 'after adjustment-i,j,ll ', i,j,ll + ! write(*,*) 'PMID: ll-2,ll-1,ll', PMID(I,J,LL-2) & + ! ,PMID(I,J,LL-1), PMID(I,J,LL) endif end do end do @@ -866,10 +847,10 @@ SUBROUTINE INITPOST DO J=Jsta,jend DO I=1,IM if((PINT(I,J,lm) - DUMMY(I,J))>=0.) then - write(*,*) 'non-monotonic PINT, i,j,lm ', i,j,lm - write(*,*) 'PINT: lm,lm+1, PMID: lm', PINT(I,J,LM),DUMMY(I,J), PMID(I,J,LM) + ! write(*,*) 'non-monotonic PINT, i,j,lm ', i,j,lm + ! write(*,*) 'PINT: lm,lm+1, PMID: lm', PINT(I,J,LM),DUMMY(I,J), PMID(I,J,LM) DUMMY(I,J)=PMID(I,J,LM)*1.001 - write(*,*) 'after adjustment-i,j,lm+1 ', i,j,lm+1,DUMMY(I,J) + ! write(*,*) 'after adjustment-i,j,lm+1 ', i,j,lm+1,DUMMY(I,J) endif PINT(I,J,LM+1)=DUMMY(I,J) ALPINT(I,J,LM+1)=ALOG(PINT(I,J,LM+1)) @@ -964,10 +945,10 @@ SUBROUTINE INITPOST ! KRF - check surface pressure for monotonic correctness if((PINT(I,J,lm) - PINT(I,J,LM+1))>=0. ) then - write(*,*) 'non-monotonic PINT, i,j,lm ', i,j,lm - write(*,*) 'PINT: lm,lm+1, PMID: lm', PINT(I,J,LM), PINT(I,J,LM+1), PMID(I,J,LM) + ! write(*,*) 'non-monotonic PINT, i,j,lm ', i,j,lm + ! write(*,*) 'PINT: lm,lm+1, PMID: lm', PINT(I,J,LM), PINT(I,J,LM+1), PMID(I,J,LM) PINT(I,J,LM+1) = PINT(I,J,LM)*1.001 - write(*,*) 'after adjustment-i,j,lm+1 PINT ', i,j,lm+1, PINT(I,J,LM+1) + ! write(*,*) 'after adjustment-i,j,lm+1 PINT ', i,j,lm+1, PINT(I,J,LM+1) endif ALPINT(I,J,LM+1)=ALOG(PINT(I,J,LM+1)) ENDDO @@ -1781,7 +1762,7 @@ SUBROUTINE INITPOST IM,1,JM,1,IM,JS,JE,1) do j = jsta_2l, jend_2u do i = 1, im - IF(SUBMODELNAME == 'RTMA')THEN !use 1st level of unstaggered U for U10 + IF(SUBMODELNAME == 'RTMA' .and. MODELNAME == 'RAPR')THEN !use 1st level of unstaggered U for U10 U10 ( i, j ) = uh ( i, j, lm ) ELSE U10 ( i, j ) = dummy( i, j ) @@ -1793,7 +1774,7 @@ SUBROUTINE INITPOST IM,1,JM,1,IM,JS,JE,1) do j = jsta_2l, jend_2u do i = 1, im - IF( SUBMODELNAME == 'RTMA')THEN!use 1st level of unstaggered V for V10 + IF( SUBMODELNAME == 'RTMA' .and. MODELNAME == 'RAPR')THEN!use 1st level of unstaggered V for V10 V10 ( i, j ) = vh ( i, j, lm ) ELSE V10 ( i, j ) = dummy( i, j ) diff --git a/sorc/ncep_post.fd/INITPOST_GFS_NEMS.f b/sorc/ncep_post.fd/INITPOST_GFS_NEMS.f deleted file mode 100644 index 7111fb628..000000000 --- a/sorc/ncep_post.fd/INITPOST_GFS_NEMS.f +++ /dev/null @@ -1,3265 +0,0 @@ -!> @file -! . . . -!> SUBPROGRAM: INITPOST INITIALIZE POST FOR RUN -!! PRGRMMR: Hui-Ya Chuang DATE: 2007-03-01 -!! -!! ABSTRACT: THIS ROUTINE INITIALIZES CONSTANTS AND -!! VARIABLES AT THE START OF GFS MODEL OR POST -!! PROCESSOR RUN. -!! -!! REVISION HISTORY -!! 2011-02-07 Jun Wang add grib2 option -!! 2011-12-14 Sarah Lu add aer option -!! 2012-01-07 Sarah Lu compute air density -!! 2012-12-22 Sarah Lu add aerosol zerout option -!! 2015-03-16 S. Moorthi adding gocart_on option -!! 2015-03-18 S. Moorthi Optimization including threading -!! 2015-08-17 S. Moorthi Add TKE for NEMS/GSM -!! 2021-03-11 Bo Cui change local arrays to dimension (im,jsta:jend) -!! -!! USAGE: CALL INIT -!! INPUT ARGUMENT LIST: -!! NONE -!! -!! OUTPUT ARGUMENT LIST: -!! NONE -!! -!! OUTPUT FILES: -!! NONE -!! -!! SUBPROGRAMS CALLED: -!! UTILITIES: -!! NONE -!! LIBRARY: -!! COMMON - CTLBLK -!! LOOKUP -!! SOILDEPTH -!! -!! -!! ATTRIBUTES: -!! LANGUAGE: FORTRAN -!! MACHINE : CRAY C-90 -!! - SUBROUTINE INITPOST_GFS_NEMS(NREC,iostatusFlux,iostatusD3D, & - iostatusAER,nfile,ffile,rfile) -! SUBROUTINE INITPOST_GFS_NEMS(NREC,iostatusFlux,iostatusD3D,nfile,ffile) - - - use vrbls4d, only: dust, SALT, SUSO, SOOT, WASO - use vrbls3d, only: t, q, uh, vh, pmid, pint, alpint, dpres, zint, zmid, o3, & - qqr, qqs, cwm, qqi, qqw, omga, rhomid, q2, cfr, rlwtt, rswtt, tcucn, & - tcucns, train, el_pbl, exch_h, vdifftt, vdiffmois, dconvmois, nradtt, & - o3vdiff, o3prod, o3tndy, mwpv, unknown, vdiffzacce, zgdrag,cnvctummixing, & - vdiffmacce, mgdrag, cnvctvmmixing, ncnvctcfrac, cnvctumflx, cnvctdmflx, & - cnvctzgdrag, sconvmois, cnvctmgdrag, cnvctdetmflx, duwt, duem, dusd, dudp - use vrbls2d, only: f, pd, fis, pblh, ustar, z0, ths, qs, twbs, qwbs, avgcprate, & - cprate, avgprec, prec, lspa, sno, si, cldefi, th10, q10, tshltr, pshltr, & - tshltr, albase, avgalbedo, avgtcdc, czen, czmean, mxsnal, radot, sigt4, & - cfrach, cfracl, cfracm, avgcfrach, qshltr, avgcfracl, avgcfracm, cnvcfr, & - islope, cmc, grnflx, vegfrc, acfrcv, ncfrcv, acfrst, ncfrst, ssroff, & - bgroff, rlwin, rlwtoa, cldwork, alwin, alwout, alwtoa, rswin, rswinc, & - rswout, aswin, auvbin, auvbinc, aswout, aswtoa, sfcshx, sfclhx, subshx, & - snopcx, sfcux, sfcvx, sfcuvx, gtaux, gtauy, potevp, u10, v10, smstav, & - smstot, ivgtyp, isltyp, sfcevp, sfcexc, acsnow, acsnom, sst, thz0, qz0, & - uz0, vz0, ptop, htop, pbot, hbot, ptopl, pbotl, ttopl, ptopm, pbotm, ttopm, & - ptoph, pboth, pblcfr, ttoph, runoff, maxtshltr, mintshltr, maxrhshltr, & - minrhshltr, dzice, smcwlt, suntime, fieldcapa, htopd, hbotd, htops, hbots, & - cuppt, dusmass, ducmass, dusmass25, ducmass25, aswintoa, & - u10h,v10h - use soil, only: sldpth, sh2o, smc, stc - use masks, only: lmv, lmh, htm, vtm, gdlat, gdlon, dx, dy, hbm2, sm, sice -! use kinds, only: i_llong - use nemsio_module, only: nemsio_gfile, nemsio_getfilehead, nemsio_getheadvar, nemsio_close - use physcons_post, only: grav => con_g, fv => con_fvirt, rgas => con_rd, & - eps => con_eps, epsm1 => con_epsm1 - use params_mod, only: erad, dtr, tfrz, h1, d608, rd, p1000, capa - use lookup_mod, only: thl, plq, ptbl, ttbl, rdq, rdth, rdp, rdthe, pl, qs0, sqs, sthe, & - ttblq, rdpq, rdtheq, stheq, the0q, the0 - use ctlblk_mod, only: me, mpi_comm_comp, icnt, idsp, jsta, jend, ihrst, idat, sdat, ifhr, & - ifmin, filename, tprec, tclod, trdlw, trdsw, tsrfc, tmaxmin, td3d, restrt, sdat, & - jend_m, imin, imp_physics, dt, spval, pdtop, pt, qmin, nbin_du, nphs, dtq2, ardlw,& - ardsw, asrfc, avrain, avcnvc, theat, gdsdegr, spl, lsm, alsl, im, jm, im_jm, lm, & - jsta_2l, jend_2u, nsoil, lp1, icu_physics, ivegsrc, novegtype, nbin_ss, nbin_bc, & - nbin_oc, nbin_su, gocart_on, pt_tbl, hyb_sigp - use gridspec_mod, only: maptype, gridtype, latstart, latlast, lonstart, lonlast, cenlon, & - dxval, dyval, truelat2, truelat1, psmapf, cenlat - use rqstfld_mod, only: igds, avbl, iq, is - use upp_physics, only: fpvsnew -! use wrf_io_flags_mod, only: ! Do we need this? -!- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - implicit none -! - type(nemsio_gfile),intent(inout) :: nfile,ffile,rfile -! -! INCLUDE/SET PARAMETERS. -! - INCLUDE "mpif.h" - -! integer,parameter:: MAXPTS=1000000 ! max im*jm points -! -! real,parameter:: con_g =9.80665e+0! gravity -! real,parameter:: con_rv =4.6150e+2 ! gas constant H2O -! real,parameter:: con_rd =2.8705e+2 ! gas constant air -! real,parameter:: con_fvirt =con_rv/con_rd-1. -! real,parameter:: con_eps =con_rd/con_rv -! real,parameter:: con_epsm1 =con_rd/con_rv-1 -! -! This version of INITPOST shows how to initialize, open, read from, and -! close a NetCDF dataset. In order to change it to read an internal (binary) -! dataset, do a global replacement of _ncd_ with _int_. - - real, parameter :: gravi = 1.0/grav - integer,intent(in) :: NREC,iostatusFlux,iostatusD3D,iostatusAER - character(len=20) :: VarName, VcoordName - integer :: Status - character startdate*19,SysDepInfo*80,cgar*1 - character startdate2(19)*4 -! -! NOTE: SOME INTEGER VARIABLES ARE READ INTO DUMMY ( A REAL ). THIS IS OK -! AS LONG AS REALS AND INTEGERS ARE THE SAME SIZE. -! -! ALSO, EXTRACT IS CALLED WITH DUMMY ( A REAL ) EVEN WHEN THE NUMBERS ARE -! INTEGERS - THIS IS OK AS LONG AS INTEGERS AND REALS ARE THE SAME SIZE. - LOGICAL RUNB,SINGLRST,SUBPOST,NEST,HYDRO,IOOMG,IOALL - logical, parameter :: debugprint = .false., zerout = .false. -! logical, parameter :: debugprint = .true., zerout = .false. - CHARACTER*32 LABEL - CHARACTER*40 CONTRL,FILALL,FILMST,FILTMP,FILTKE,FILUNV,FILCLD,FILRAD,FILSFC - CHARACTER*4 RESTHR - CHARACTER FNAME*255,ENVAR*50 - INTEGER IDATE(8),JDATE(8),JPDS(200),JGDS(200),KPDS(200),KGDS(200) -! LOGICAL*1 LB(IM,JM) -! -! INCLUDE COMMON BLOCKS. -! -! DECLARE VARIABLES. -! -! REAL fhour - integer nfhour ! forecast hour from nems io file - REAL RINC(5) - - REAL DUMMY(IM,JM), DUMMY2(IM,JM) - real, allocatable :: fi(:,:,:) -!jw - integer ii,jj,js,je,iyear,imn,iday,itmp,ioutcount,istatus, & - I,J,L,ll,k,kf,irtn,igdout,n,Index,nframe, & - impf,jmpf,nframed2,iunitd3d,ierr,idum,iret - real TSTART,TLMH,TSPH,ES,FACT,soilayert,soilayerb,zhour,dum, & - tvll,pmll,tv - - character*8, allocatable :: recname(:) - character*16,allocatable :: reclevtyp(:) - integer, allocatable :: reclev(:) - real, allocatable :: glat1d(:), glon1d(:), qstl(:) - real, allocatable :: wrk1(:,:), wrk2(:,:) - real, allocatable :: p2d(:,:), t2d(:,:), q2d(:,:), & - qs2d(:,:), cw2d(:,:), cfr2d(:,:) - real(kind=4),allocatable :: vcoord4(:,:,:) - real, dimension(lm+1) :: ak5, bk5 - real*8, allocatable :: pm2d(:,:), pi2d(:,:) - - real buf(im,jsta_2l:jend_2u) - -! real buf(im,jsta_2l:jend_2u),bufsoil(im,nsoil,jsta_2l:jend_2u) & -! ,buf3d(im,jsta_2l:jend_2u,lm),buf3d2(im,lp1,jsta_2l:jend_2u) - - real LAT, isa, jsa -! REAL, PARAMETER :: QMIN = 1.E-15 - -! DATA BLANK/' '/ -! -!*********************************************************************** -! START INIT HERE. -! - WRITE(6,*)'INITPOST: ENTER INITPOST_GFS_NEMS' - WRITE(6,*)'me=',me,'LMV=',size(LMV,1),size(LMV,2),'LMH=', & - size(LMH,1),size(LMH,2),'jsta_2l=',jsta_2l,'jend_2u=', & - jend_2u,'im=',im -! - isa = im / 2 - jsa = (jsta+jend) / 2 - -!$omp parallel do private(i,j) - do j = jsta_2l, jend_2u - do i=1,im - buf(i,j) = spval - enddo - enddo -! -! STEP 1. READ MODEL OUTPUT FILE -! -! -!*** -! -! LMH and LMV always = LM for sigma-type vert coord - -!$omp parallel do private(i,j) - do j = jsta_2l, jend_2u - do i = 1, im - LMV(i,j) = lm - LMH(i,j) = lm - end do - end do - -! HTM VTM all 1 for sigma-type vert coord - -!$omp parallel do private(i,j,l) - do l = 1, lm - do j = jsta_2l, jend_2u - do i = 1, im - HTM (i,j,l) = 1.0 - VTM (i,j,l) = 1.0 - end do - end do - end do -! -! how do I get the filename? -! fileName = '/ptmp/wx20mb/wrfout_01_030500' -! DateStr = '2002-03-05_18:00:00' -! how do I get the filename? -! call ext_int_ioinit(SysDepInfo,Status) -! print*,'called ioinit', Status -! call ext_int_open_for_read( trim(fileName), 0, 0, " ", -! & DataHandle, Status) -! print*,'called open for read', Status -! if ( Status /= 0 ) then -! print*,'error opening ',fileName, ' Status = ', Status ; stop -! endif -! get date/time info -! this routine will get the next time from the file, not using it -! print *,'DateStr before calling ext_int_get_next_time=',DateStr -! call ext_int_get_next_time(DataHandle, DateStr, Status) -! print *,'DateStri,Status,DataHandle = ',DateStr,Status,DataHandle - -! The end j row is going to be jend_2u for all variables except for V. - - JS = JSTA_2L - JE = JEND_2U - -! get start date - if (me == 0)then - print*,'nrec=',nrec - allocate(recname(nrec),reclevtyp(nrec),reclev(nrec)) - allocate(glat1d(im*jm),glon1d(im*jm)) - allocate(vcoord4(lm+1,3,2)) - call nemsio_getfilehead(nfile,iret=iret & - ,idate=idate(1:7),nfhour=nfhour,recname=recname & - ,reclevtyp=reclevtyp,reclev=reclev,lat=glat1d & - ,lon=glon1d,nframe=nframe,vcoord=vcoord4) - if(iret/=0)print*,'error getting idate,nfhour' - print *,'latstar1=',glat1d(1),glat1d(im*jm) -! print *,'printing an inventory of GFS nemsio file' -! do i=1,nrec -! print *,'recname=',(trim(recname(i))) -! print *,'reclevtyp=',(trim(reclevtyp(i))) -! print *,'reclev=',(reclev(i)) -! end do -! deallocate (recname,reclevtyp,reclev) - -! call nemsio_getfilehead(ffile,nrec=idum) -! print*,'nrec for flux file = ',idum -! allocate(recname(idum),reclevtyp(idum),reclev(idum)) -! call nemsio_getfilehead(ffile,iret=iret, & -! recname=recname,reclevtyp=reclevtyp,reclev=reclev) -! do i=1,idum -! print *,'recname=',(trim(recname(i))) -! print *,'reclevtyp=',(trim(reclevtyp(i))) -! print *,'reclev=',(reclev(i)) -! end do - -!$omp parallel do private(i,j) - do j=1,jm - do i=1,im - dummy(i,j) = glat1d((j-1)*im+i) - dummy2(i,j) = glon1d((j-1)*im+i) - end do - end do -! - if (hyb_sigp) then - do l=1,lm+1 - ak5(l) = vcoord4(l,1,1) - bk5(l) = vcoord4(l,2,1) - enddo - endif -! - deallocate(recname,reclevtyp,reclev,glat1d,glon1d,vcoord4) -! can't get idate and fhour, specify them for now -! idate(4)=2006 -! idate(2)=9 -! idate(3)=16 -! idate(1)=0 -! fhour=6.0 - print*,'idate before broadcast = ',(idate(i),i=1,7) - end if - call mpi_bcast(idate(1), 7, MPI_INTEGER, 0, mpi_comm_comp, iret) - call mpi_bcast(nfhour, 1, MPI_INTEGER, 0, mpi_comm_comp, iret) - call mpi_bcast(nframe, 1, MPI_INTEGER, 0, mpi_comm_comp, iret) - print*,'idate after broadcast = ',(idate(i),i=1,4) - print*,'nfhour = ',nfhour - - if (hyb_sigp) then - call mpi_bcast(ak5, lm+1, MPI_REAL, 0, mpi_comm_comp, iret) - call mpi_bcast(bk5, lm+1, MPI_REAL, 0, mpi_comm_comp, iret) - endif - if (me == 0) print *,' ak5=',ak5 - if (me == 0) print *,' bk5=',bk5 - -! sample print point - ii = im/2 - jj = jm/2 - call mpi_scatterv(dummy(1,1),icnt,idsp,mpi_real & - ,gdlat(1,jsta),icnt(me),mpi_real,0,MPI_COMM_COMP,ierr) - call mpi_scatterv(dummy2(1,1),icnt,idsp,mpi_real & - ,gdlon(1,jsta),icnt(me),mpi_real,0,MPI_COMM_COMP,ierr) - - print *,'before call EXCH,mype=',me,'max(gdlat)=',maxval(gdlat), & - 'max(gdlon)=', maxval(gdlon) - CALL EXCH(gdlat(1,JSTA_2L)) - print *,'after call EXCH,mype=',me - -!$omp parallel do private(i,j) - do j = jsta, jend_m - do i = 1, im-1 - DX (i,j) = ERAD*COS(GDLAT(I,J)*DTR) *(GDLON(I+1,J)-GDLON(I,J))*DTR - DY (i,j) = ERAD*(GDLAT(I,J)-GDLAT(I,J+1))*DTR ! like A*DPH -! F(I,J)=1.454441e-4*sin(gdlat(i,j)*DTR) ! 2*omeg*sin(phi) -! if (i == ii .and. j == jj) print*,'sample LATLON, DY, DY=' & -! ,i,j,GDLAT(I,J),GDLON(I,J),DX(I,J),DY(I,J) - end do - end do - -!$omp parallel do private(i,j) - do j=jsta,jend - do i=1,im - F(I,J) = 1.454441e-4*sin(gdlat(i,j)*DTR) ! 2*omeg*sin(phi) - end do - end do - - impf = im - jmpf = jm - print*,'impf,jmpf,nframe= ',impf,jmpf,nframe - -!MEB not sure how to get these - ! waiting to read in lat lon from GFS soon -! varname='GLAT' -! call retrieve_index(index,VarName,varname_all,nrecs,iret) -! if (iret /= 0) then -! print*,VarName," not found in file-Assigned missing values" -! GDLAT=SPVAL -! else -! this_offset=file_offset(index+1)+(jsta_2l-1)*4*im -! this_length=im*(jend_2u-jsta_2l+1) -! call mpi_file_read_at(iunit,this_offset -! + ,buf,this_length,mpi_real4 -! + , mpi_status_ignore, ierr) -! if (ierr /= 0) then -! print*,"Error reading ", VarName,"Assigned missing values" -! GDLAT=SPVAL -! else -! do j = jsta_2l, jend_2u -! do i = 1, im -! F(I,J)=1.454441e-4*sin(buf(I,J)) ! 2*omeg*sin(phi) -! GDLAT(I,J)=buf(I,J)*RTD - -! enddo -! enddo -! end if -! end if - -! varname='GLON' -! call retrieve_index(index,VarName,varname_all,nrecs,iret) -! if (iret /= 0) then -! print*,VarName," not found in file-Assigned missing values" -! GDLON=SPVAL -! else -! this_offset=file_offset(index+1)+(jsta_2l-1)*4*im -! this_length=im*(jend_2u-jsta_2l+1) -! call mpi_file_read_at(iunit,this_offset -! + ,buf,this_length,mpi_real4 -! + , mpi_status_ignore, ierr) -! if (ierr /= 0) then -! print*,"Error reading ", VarName,"Assigned missing values" -! GDLON=SPVAL -! else -! do j = jsta_2l, jend_2u -! do i = 1, im -! GDLON(I,J)=buf(I,J)*RTD -! if(i == 409.and.j == 835)print*,'GDLAT GDLON in INITPOST=' -! + ,i,j,GDLAT(I,J),GDLON(I,J) -! enddo -! enddo -! end if -! end if - -! if(jsta<=594.and.jend>=594)print*,'gdlon(120,594)= ', -! + gdlon(120,594) - - -! iyear=idate(4)+2000 ! older gfsio only has 2 digit year - iyear = idate(1) - imn = idate(2) ! ask Jun - iday = idate(3) ! ask Jun - ihrst = idate(4) - imin = idate(5) - jdate = 0 - idate = 0 -! -! read(startdate,15)iyear,imn,iday,ihrst,imin - 15 format(i4,1x,i2,1x,i2,1x,i2,1x,i2) - print*,'start yr mo day hr min =',iyear,imn,iday,ihrst,imin - print*,'processing yr mo day hr min=' & - ,idat(3),idat(1),idat(2),idat(4),idat(5) -! - idate(1) = iyear - idate(2) = imn - idate(3) = iday - idate(5) = ihrst - idate(6) = imin - SDAT(1) = imn - SDAT(2) = iday - SDAT(3) = iyear - jdate(1) = idat(3) - jdate(2) = idat(1) - jdate(3) = idat(2) - jdate(5) = idat(4) - jdate(6) = idat(5) -! - print *,' idate=',idate - print *,' jdate=',jdate -! CALL W3DIFDAT(JDATE,IDATE,2,RINC) -! ifhr=nint(rinc(2)) -! - CALL W3DIFDAT(JDATE,IDATE,0,RINC) -! - print *,' rinc=',rinc - ifhr = nint(rinc(2)+rinc(1)*24.) - print *,' ifhr=',ifhr - ifmin = nint(rinc(3)) -! if(ifhr /= nint(fhour))print*,'find wrong Grib file';stop - print*,' in INITPOST ifhr ifmin fileName=',ifhr,ifmin,fileName - -! GFS has the same accumulation bucket for precipitation and fluxes and it is written to header -! the header has the start hour information so post uses it to recontruct bucket - if(me==0)then - call nemsio_getheadvar(ffile,'zhour',zhour,iret=iret) - if(iret==0)then - tprec = 1.0*ifhr-zhour - tclod = tprec - trdlw = tprec - trdsw = tprec - tsrfc = tprec - tmaxmin = tprec - td3d = tprec - print*,'tprec from flux file header= ',tprec - else - print*,'Error reading accumulation bucket from flux file', & - 'header - will try to read from env variable FHZER' - CALL GETENV('FHZER',ENVAR) - read(ENVAR, '(I2)')idum - tprec = idum*1.0 - tclod = tprec - trdlw = tprec - trdsw = tprec - tsrfc = tprec - tmaxmin = tprec - td3d = tprec - print*,'TPREC from FHZER= ',tprec - end if - end if - - call mpi_bcast(tprec, 1,MPI_REAL,0,mpi_comm_comp,iret) - call mpi_bcast(tclod, 1,MPI_REAL,0,mpi_comm_comp,iret) - call mpi_bcast(trdlw, 1,MPI_REAL,0,mpi_comm_comp,iret) - call mpi_bcast(trdsw, 1,MPI_REAL,0,mpi_comm_comp,iret) - call mpi_bcast(tsrfc, 1,MPI_REAL,0,mpi_comm_comp,iret) - call mpi_bcast(tmaxmin,1,MPI_REAL,0,mpi_comm_comp,iret) - call mpi_bcast(td3d, 1,MPI_REAL,0,mpi_comm_comp,iret) - -! Getting tstart - tstart=0. -! VarName='TSTART' -! call retrieve_index(index,VarName,varname_all,nrecs,iret) -! if (iret /= 0) then -! print*,VarName," not found in file" -! else -! call mpi_file_read_at(iunit,file_offset(index)+5*4 -! + ,garb,1,mpi_real4 -! + , mpi_status_ignore, ierr) -! if (ierr /= 0) then -! print*,"Error reading ", VarName," using MPIIO" -! else -! print*,VarName, ' from MPIIO READ= ',garb -! tstart=garb -! end if -! end if - print*,'tstart= ',tstart - -! Getiing restart - - RESTRT=.TRUE. ! set RESTRT as default -! call ext_int_get_dom_ti_integer(DataHandle,'RESTARTBIN',itmp -! + ,1,ioutcount,istatus) - -! IF(itmp < 1)THEN -! RESTRT=.FALSE. -! ELSE -! RESTRT=.TRUE. -! END IF - -! print*,'status for getting RESTARTBIN= ',istatus - -! print*,'Is this a restrt run? ',RESTRT - - IF(tstart > 1.0E-2)THEN - ifhr = ifhr+NINT(tstart) - rinc = 0 - idate = 0 - rinc(2) = -1.0*ifhr - call w3movdat(rinc,jdate,idate) - SDAT(1) = idate(2) - SDAT(2) = idate(3) - SDAT(3) = idate(1) - IHRST = idate(5) - print*,'new forecast hours for restrt run= ',ifhr - print*,'new start yr mo day hr min =',sdat(3),sdat(1) & - ,sdat(2),ihrst,imin - END IF - - imp_physics = 99 !set GFS mp physics to 99 for Zhao scheme - print*,'MP_PHYSICS= ',imp_physics - -! Initializes constants for Ferrier microphysics - if(imp_physics==5 .or. imp_physics==85 .or. imp_physics==95)then - CALL MICROINIT(imp_physics) - end if - -! IVEGSRC=1 for IGBP, 0 for USGS, 2 for UMD - VarName='IVEGSRC' - if(me == 0)then - call nemsio_getheadvar(nfile,trim(VarName),IVEGSRC,iret) - if (iret /= 0) then - print*,VarName,' not found in file-Assigned 2 for UMD as default' - IVEGSRC=1 - end if - end if - call mpi_bcast(IVEGSRC,1,MPI_INTEGER,0,mpi_comm_comp,iret) - print*,'IVEGSRC= ',IVEGSRC - -! set novegtype based on vegetation classification - if(ivegsrc==2)then - novegtype=13 - else if(ivegsrc==1)then - novegtype=20 - else if(ivegsrc==0)then - novegtype=24 - end if - print*,'novegtype= ',novegtype - - VarName='CU_PHYSICS' - if(me == 0)then - call nemsio_getheadvar(nfile,trim(VarName),iCU_PHYSICS,iret) - if (iret /= 0) then - print*,VarName," not found in file-Assigned 4 for SAS as default" - iCU_PHYSICS=4 - end if - end if - call mpi_bcast(iCU_PHYSICS,1,MPI_INTEGER,0,mpi_comm_comp,iret) - if (me == 0) print*,'CU_PHYSICS= ',iCU_PHYSICS -! waiting to retrieve lat lon infor from raw GFS output -! VarName='DX' - -! VarName='DY' - -! GFS does not need DT to compute accumulated fields, set it to one -! VarName='DT' - DT=1 -! GFS does not need truelat -! VarName='TRUELAT1' - -! VarName='TRUELAT2' - -! Specigy maptype=4 for Gaussian grid -! maptype=4 -! write(6,*) 'maptype is ', maptype -! HBM2 is most likely not in Grib message, set them to ones - HBM2=1.0 - -! try to get kgds from flux grib file and then convert to igds that is used by GRIBIT.f -! flux files are now nemsio files so comment the following lines out -! if(me == 0)then -! jpds=-1.0 -! jgds=-1.0 -! igds=0 -! call getgb(iunit,0,im_jm,0,jpds,jgds,kf & -! ,k,kpds,kgds,lb,dummy,ierr) -! if(ierr == 0)then -! call R63W72(KPDS,KGDS,JPDS,IGDS(1:18)) -! print*,'in INITPOST_GFS,IGDS for GFS= ',(IGDS(I),I=1,18) -! end if -! end if -! call mpi_bcast(igds(1),18,MPI_INTEGER,0,mpi_comm_comp,iret) -! print*,'IGDS for GFS= ',(IGDS(I),I=1,18) - -! Specigy grid type -! if(iostatusFlux==0)then - if(IGDS(4)/=0)then - maptype=IGDS(3) - else if((im/2+1)==jm)then - maptype=0 !latlon grid - else - maptype=4 ! default gaussian grid - end if - gridtype='A' - - if (me == 0) write(6,*) 'maptype and gridtype is ', maptype,gridtype - -! start retrieving data using gfsio, first land/sea mask - -! VarName='land' -! VcoordName='sfc' -! l=1 - -! if(me == 0)then -! call gfsio_readrecvw34(gfile,trim(VarName),trim(VcoordName) -! + ,l,dummy,iret=iret) -! if (iret /= 0) then -! print*,VarName," not found in file-Assigned missing values" -! dummy=spval -! else -! -! do j = 1, jm -! do i = 1, im -! dummy(I,J)=1.0 - dummy(I,J) ! convert Grib message to 2D -! if (j == jm/2 .and. mod(i,10) == 0) -! + print*,'sample ',VarName, ' = ',i,j,dummy(i,j) -! -! enddo -! enddo -! end if -! end if -! -! call mpi_scatterv(dummy,icnt,idsp,mpi_real -! + ,sm(1,jsta),icnt(me),mpi_real,0,MPI_COMM_COMP,iret) -! if (iret /= 0)print*,'Error scattering array';stop - - VcoordName='sfc' ! surface fileds - l=1 - -! start retrieving data using getgb, first land/sea mask - VarName='land' - call getnemsandscatter(me,ffile,im,jm,jsta,jsta_2l & - ,jend_2u,MPI_COMM_COMP,icnt,idsp,spval,VarName,VcoordName & - ,l,impf,jmpf,nframe,sm) - -! where(sm /= spval)sm=1.0-sm ! convert to sea mask -!$omp parallel do private(i,j) - do j=jsta,jend - do i=1,im - if (sm(i,j) /= spval) sm(i,j) = 1.0 - sm(i,j) - enddo - enddo -! if(debugprint)print*,'sample ',VarName,' = ',sm(isa,jsa) - - -! sea ice mask using getgb - - VarName='icec' - call getnemsandscatter(me,ffile,im,jm,jsta,jsta_2l & - ,jend_2u,MPI_COMM_COMP,icnt,idsp,spval,VarName,VcoordName & - ,l,im,jm,nframe,sice) - -! if(debugprint)print*,'sample ',VarName,' = ',sice(isa,jsa) - -! where(sice /=spval .and. sice >=1.0)sm=0.0 !sea ice has sea mask=0 -! GFS flux files have land points with non-zero sea ice, per Iredell, these -! points have sea ice changed to zero, i.e., trust land mask more than sea ice -! where(sm/=spval .and. sm==0.0)sice=0.0 !specify sea ice=0 at land - -!$omp parallel do private(i,j) - do j=jsta,jend - do i=1,im - if (sm(i,j) /= spval .and. sm(i,j) == 0.0) sice(i,j) = 0.0 - enddo - enddo - -! Terrain height * G using nemsio - VarName='hgt' - call getnemsandscatter(me,nfile,im,jm,jsta,jsta_2l & - ,jend_2u,MPI_COMM_COMP,icnt,idsp,spval,VarName,VcoordName & - ,l,im,jm,nframe,fis) - -! where(fis /= spval)fis=fis*grav - -!$omp parallel do private(i,j) - do j=jsta,jend - do i=1,im - if (fis(i,j) /= spval) then - zint(i,j,lp1) = fis(i,j) - fis(i,j) = fis(i,j) * grav - - endif - enddo - enddo -! if(debugprint)print*,'sample ',VarName,' = ',fis(isa,jsa) - -! Surface pressure using nemsio - VarName='pres' - call getnemsandscatter(me,nfile,im,jm,jsta,jsta_2l & - ,jend_2u,MPI_COMM_COMP,icnt,idsp,spval,VarName,VcoordName & - ,l,im,jm,nframe,pint(1,jsta_2l,lp1)) - -! if(debugprint)print*,'sample surface pressure = ',pint(isa,jsa,lp1 - -! -! vertical loop for Layer 3d fields -! -------------------------------- - VcoordName = 'mid layer' - - do l=1,lm - ll=lm-l+1 - -! model level T - print*,'start retrieving GFS T using nemsio' - VarName='tmp' - call getnemsandscatter(me,nfile,im,jm,jsta,jsta_2l & - ,jend_2u,MPI_COMM_COMP,icnt,idsp,spval,VarName,VcoordName & - ,l,im,jm,nframe,t(1,jsta_2l,ll)) - -! if(debugprint)print*,'sample ',ll,VarName,' = ',ll,t(isa,jsa,ll) - -! model level q - VarName='spfh' - call getnemsandscatter(me,nfile,im,jm,jsta,jsta_2l & - ,jend_2u,MPI_COMM_COMP,icnt,idsp,spval,VarName,VcoordName & - ,l,im,jm,nframe,q(1,jsta_2l,ll)) -! if(debugprint)print*,'sample ',ll,VarName,' = ',ll,q(isa,jsa,ll) - -! i model level u - VarName='ugrd' - call getnemsandscatter(me,nfile,im,jm,jsta,jsta_2l & - ,jend_2u,MPI_COMM_COMP,icnt,idsp,spval,VarName,VcoordName & - ,l,im,jm,nframe,uh(1,jsta_2l,ll)) -! if(debugprint)print*,'sample ',ll,VarName,' = ',ll,uh(isa,jsa,ll) - -! model level v - VarName='vgrd' - call getnemsandscatter(me,nfile,im,jm,jsta,jsta_2l & - ,jend_2u,MPI_COMM_COMP,icnt,idsp,spval,VarName,VcoordName & - ,l,im,jm,nframe,vh(1,jsta_2l,ll)) -! if(debugprint)print*,'sample ',ll,VarName,' = ',ll,vh(isa,jsa,ll) - -! model level pressure - if (.not. hyb_sigp) then - VarName='pres' - call getnemsandscatter(me,nfile,im,jm,jsta,jsta_2l & - ,jend_2u,MPI_COMM_COMP,icnt,idsp,spval,VarName,VcoordName & - ,l,im,jm,nframe,pmid(1,jsta_2l,ll)) -! if(debugprint)print*,'sample ',ll,VarName,' = ',ll,pmid(isa,jsa,ll) - -! GFS is on A grid and does not need PMIDV - -! dp - VarName='dpres' -! write(0,*)' bef getnemsandscatter ll=',ll,' l=',l,VarName - call getnemsandscatter(me,nfile,im,jm,jsta,jsta_2l & - ,jend_2u,MPI_COMM_COMP,icnt,idsp,spval,VarName,VcoordName & - ,l,im,jm,nframe,dpres(1,jsta_2l,ll)) -! if(debugprint)print*,'sample ',ll,VarName,' = ',ll,pmid(isa,jsa,ll) - endif -! ozone mixing ratio - VarName='o3mr' - call getnemsandscatter(me,nfile,im,jm,jsta,jsta_2l & - ,jend_2u,MPI_COMM_COMP,icnt,idsp,spval,VarName,VcoordName & - ,l,im,jm,nframe,o3(1,jsta_2l,ll)) - -! if(debugprint)print*,'sample ',ll,VarName,' = ',ll,o3(isa,jsa,ll) -! write(1000+me,*)'sample ',ll,VarName,' = ',ll,o3(isa,jsa,ll) - -! cloud water and ice mixing ratio for zhao scheme -! need to look up old eta post to derive cloud water/ice from cwm -! Zhao scheme does not produce suspended rain and snow - -!$omp parallel do private(i,j) - do j = jsta, jend - do i=1,im - qqw(i,j,ll) = 0. - qqr(i,j,ll) = 0. - qqs(i,j,ll) = 0. - qqi(i,j,ll) = 0. - enddo - enddo - - VarName='clwmr' - call getnemsandscatter(me,nfile,im,jm,jsta,jsta_2l & - ,jend_2u,MPI_COMM_COMP,icnt,idsp,spval,VarName,VcoordName & - ,l,im,jm,nframe,cwm(1,jsta_2l,ll)) -! if(debugprint)print*,'sample ',ll,VarName,' = ',ll,cwm(isa,jsa,ll) - -!$omp parallel do private(i,j) - do j=jsta,jend - do i=1,im - if(t(i,j,ll) < (TFRZ-15.) )then ! dividing cloud water from ice - qqi(i,j,ll) = cwm(i,j,ll) - else - qqw(i,j,ll) = cwm(i,j,ll) - end if -! if (j == jm/2 .and. mod(i,50) == 0) -! + print*,'sample ',trim(VarName), ' after scatter= ' -! + ,i,j,ll,cwm(i,j,ll) - end do - end do -! if (iret /= 0)print*,'Error scattering array';stop - -! pressure vertical velocity - VarName='vvel' - call getnemsandscatter(me,nfile,im,jm,jsta,jsta_2l & - ,jend_2u,MPI_COMM_COMP,icnt,idsp,spval,VarName,VcoordName & - ,l,im,jm,nframe,omga(1,jsta_2l,ll)) -! if(debugprint)print*,'sample l ',VarName,' = ',ll,omga(isa,jsa,ll) - -! With SHOC NEMS/GSM does output TKE now - VarName='tke' - call getnemsandscatter(me,nfile,im,jm,jsta,jsta_2l & - ,jend_2u,MPI_COMM_COMP,icnt,idsp,spval,VarName,VcoordName & - ,l,im,jm,nframe,q2(1,jsta_2l,ll)) -! if(debugprint)print*,'sample l ',VarName,' = ',ll,q2(isa,jsa,ll) - - - end do ! do loop for l - -! construct interface pressure from model top (which is zero) and dp from top down PDTOP -! pdtop = spval - pt = 0. -! pd = spval ! GFS does not output PD - - ii = im/2 - jj = (jsta+jend)/2 - -!!!!! COMPUTE Z, GFS integrates Z on mid-layer instead -!!! use GFS contants to see if height becomes more aggreable to GFS pressure grib file - if (hyb_sigp) then - do l=lm,1,-1 -!$omp parallel do private(i,j) - do j=jsta,jend - do i=1,im - pint(i,j,l) = ak5(lm+2-l) + bk5(lm+2-l)*pint(i,j,lp1) - pmid(i,j,l) = 0.5*(pint(i,j,l)+pint(i,j,l+1)) ! for now - Moorthi - enddo - enddo - if (me == 0) print*,'sample pint,pmid' ,ii,jj,l,pint(ii,jj,l),pmid(ii,jj,l) - enddo - else - do l=2,lm -!$omp parallel do private(i,j) - do j=jsta,jend - do i=1,im - pint(i,j,l) = pint(i,j,l-1) + dpres(i,j,l-1) - enddo - enddo - if (me == 0) print*,'sample pint,pmid' ,ii,jj,l,pint(ii,jj,l),pmid(ii,jj,l) - end do - endif - - allocate(wrk1(im,jsta:jend),wrk2(im,jsta:jend)) - allocate(fi(im,jsta:jend,2)) - -!$omp parallel do private(i,j) - do j=jsta,jend - do i=1,im - pd(i,j) = spval ! GFS does not output PD - pint(i,j,1) = PT - alpint(i,j,lp1) = log(pint(i,j,lp1)) - wrk1(i,j) = log(PMID(I,J,LM)) - wrk2(i,j) = T(I,J,LM)*(Q(I,J,LM)*fv+1.0) - FI(I,J,1) = FIS(I,J) & - + wrk2(i,j)*rgas*(ALPINT(I,J,Lp1)-wrk1(i,j)) - ZMID(I,J,LM) = FI(I,J,1) * gravi - end do - end do - - print *,' Tprof=',t(ii,jj,:) - print *,' Qprof=',q(ii,jj,:) - -! SECOND, INTEGRATE HEIGHT HYDROSTATICLY, GFS integrate height on mid-layer - - DO L=LM,2,-1 ! omit computing model top height because it's infinity - ll = l - 1 -! write(0,*)' me=',me,'ll=',ll,' gravi=',gravi,rgas,' fv=',fv -!$omp parallel do private(i,j,tvll,pmll,fact) - do j = jsta, jend -! write(0,*)' j=',j,' me=',me - do i = 1, im - alpint(i,j,l) = log(pint(i,j,l)) - tvll = T(I,J,LL)*(Q(I,J,LL)*fv+1.0) - pmll = log(PMID(I,J,LL)) - -! if (me == 0 .and. i == ii .and. j == jj ) print*,'L ZINT= ',l,' tvll =', tvll, & -! ' pmll=',pmll,' wrk2=',wrk2(i,j),' wrk1=',wrk1(i,j),' fi1=',fi(i,j,1), & -! ' T=',T(i,j,LL),' Q=',Q(i,j,ll) - - FI(I,J,2) = FI(I,J,1) + (0.5*rgas)*(wrk2(i,j)+tvll) & - * (wrk1(i,j)-pmll) - ZMID(I,J,LL) = FI(I,J,2) * gravi -! - FACT = (ALPINT(I,J,L)-wrk1(i,j)) / (pmll-wrk1(i,j)) - ZINT(I,J,L) = ZMID(I,J,L) + (ZMID(I,J,LL)-ZMID(I,J,L)) * FACT - FI(I,J,1) = FI(I,J,2) - wrk1(i,J) = pmll - wrk2(i,j) = tvll -! if (me == 0 .and. i == ii .and. j == jj ) print*,'L ZINT= ',l,zint(ii,jj,l), & -! 'alpint=',ALPINT(ii,jj,l),'pmid=',LOG(PMID(Ii,Jj,L)),'pmid(l-1)=', & -! LOG(PMID(Ii,Jj,L-1)),'zmd=',ZMID(Ii,Jj,L),'zmid(l-1)=',ZMID(Ii,Jj,L-1) - ENDDO - ENDDO - - if (me == 0) print*,'L ZINT= ',l,zint(ii,jj,l), & - 'alpint=',ALPINT(ii,jj,l),'pmid=',LOG(PMID(Ii,Jj,L)),'pmid(l-1)=', & - LOG(PMID(Ii,Jj,L-1)),'zmd=',ZMID(Ii,Jj,L),'zmid(l-1)=',ZMID(Ii,Jj,L-1) - ENDDO - deallocate(wrk1,wrk2,fi) - - - if (gocart_on) then - -! GFS output dust in nemsio (GOCART) - do n=1,nbin_du - do l=1,lm -!$omp parallel do private(i,j) - do j=jsta_2l,jend_2u - do i=1,im - dust(i,j,l,n) = spval - enddo - enddo - enddo - enddo -! DUST = SPVAL - VarName='du001' - VcoordName='mid layer' - do l=1,lm - ll=lm-l+1 - call getnemsandscatter(me,nfile,im,jm,jsta,jsta_2l & - ,jend_2u,MPI_COMM_COMP,icnt,idsp,spval,VarName,VcoordName & - ,l,im,jm,nframe,dust(1,jsta_2l,ll,1)) -! if(debugprint)print*,'sample l ',VarName,' = ',ll,dust(isa,jsa,ll,1) - end do ! do loop for l - - VarName='du002' - VcoordName='mid layer' - do l=1,lm - ll=lm-l+1 - call getnemsandscatter(me,nfile,im,jm,jsta,jsta_2l & - ,jend_2u,MPI_COMM_COMP,icnt,idsp,spval,VarName,VcoordName & - ,l,im,jm,nframe,dust(1,jsta_2l,ll,2)) -! if(debugprint)print*,'sample l ',VarName,' = ',ll,dust(isa,jsa,ll,2) - end do ! do loop for l - - VarName='du003' - VcoordName='mid layer' - do l=1,lm - ll=lm-l+1 - call getnemsandscatter(me,nfile,im,jm,jsta,jsta_2l & - ,jend_2u,MPI_COMM_COMP,icnt,idsp,spval,VarName,VcoordName & - ,l,im,jm,nframe,dust(1,jsta_2l,ll,3)) -! if(debugprint)print*,'sample l ',VarName,' = ',ll,dust(isa,jsa,ll,3) - end do ! do loop for l - - VarName='du004' - VcoordName='mid layer' - do l=1,lm - ll=lm-l+1 - call getnemsandscatter(me,nfile,im,jm,jsta,jsta_2l & - ,jend_2u,MPI_COMM_COMP,icnt,idsp,spval,VarName,VcoordName & - ,l,im,jm,nframe,dust(1,jsta_2l,ll,4)) -! if(debugprint)print*,'sample l ',VarName,' = ',ll,dust(isa,jsa,ll,4) - end do ! do loop for l - - VarName='du005' - VcoordName='mid layer' - do l=1,lm - ll=lm-l+1 - call getnemsandscatter(me,nfile,im,jm,jsta,jsta_2l & - ,jend_2u,MPI_COMM_COMP,icnt,idsp,spval,VarName,VcoordName & - ,l,im,jm,nframe,dust(1,jsta_2l,ll,5)) -! if(debugprint)print*,'sample l ',VarName,' = ',ll,dust(isa,jsa,ll,5) - end do ! do loop for l -! -! GFS output sea salt in nemsio (GOCART) - do n=1,nbin_ss - do l=1,lm -!$omp parallel do private(i,j) - do j=jsta_2l,jend_2u - do i=1,im - salt(i,j,l,n) = spval - enddo - enddo - enddo - enddo -! SALT = SPVAL - VarName='ss001' - VcoordName='mid layer' - do l=1,lm - ll=lm-l+1 - call getnemsandscatter(me,nfile,im,jm,jsta,jsta_2l & - ,jend_2u,MPI_COMM_COMP,icnt,idsp,spval,VarName,VcoordName & - ,l,im,jm,nframe,salt(1,jsta_2l,ll,1)) -! if(debugprint)print*,'sample l ',VarName,' = ',ll,salt(isa,jsa,ll,1) - end do ! do loop for l - - VarName='ss002' - VcoordName='mid layer' - do l=1,lm - ll=lm-l+1 - call getnemsandscatter(me,nfile,im,jm,jsta,jsta_2l & - ,jend_2u,MPI_COMM_COMP,icnt,idsp,spval,VarName,VcoordName & - ,l,im,jm,nframe,salt(1,jsta_2l,ll,2)) -! if(debugprint)print*,'sample l ',VarName,' = ',ll,salt(isa,jsa,ll,2) - end do ! do loop for l - - VarName='ss003' - VcoordName='mid layer' - do l=1,lm - ll=lm-l+1 - call getnemsandscatter(me,nfile,im,jm,jsta,jsta_2l & - ,jend_2u,MPI_COMM_COMP,icnt,idsp,spval,VarName,VcoordName & - ,l,im,jm,nframe,salt(1,jsta_2l,ll,3)) -! if(debugprint)print*,'sample l ',VarName,' = ',ll,salt(isa,jsa,ll,3) - end do ! do loop for l - - VarName='ss004' - VcoordName='mid layer' - do l=1,lm - ll=lm-l+1 - call getnemsandscatter(me,nfile,im,jm,jsta,jsta_2l & - ,jend_2u,MPI_COMM_COMP,icnt,idsp,spval,VarName,VcoordName & - ,l,im,jm,nframe,salt(1,jsta_2l,ll,4)) -! if(debugprint)print*,'sample l ',VarName,' = ',ll,salt(isa,jsa,ll,4) - end do ! do loop for l - - VarName='ss005' - VcoordName='mid layer' - do l=1,lm - ll=lm-l+1 - call getnemsandscatter(me,nfile,im,jm,jsta,jsta_2l & - ,jend_2u,MPI_COMM_COMP,icnt,idsp,spval,VarName,VcoordName & - ,l,im,jm,nframe,salt(1,jsta_2l,ll,5)) -! if(debugprint)print*,'sample l ',VarName,' = ',ll,salt(isa,jsa,ll,5) - end do ! do loop for l - -! GFS output black carbon in nemsio (GOCART) - do n=1,nbin_oc - do l=1,lm -!$omp parallel do private(i,j) - do j=jsta_2l,jend_2u - do i=1,im - soot(i,j,l,n) = spval - enddo - enddo - enddo - enddo -! SOOT = SPVAL - VarName='bcphobic' - VcoordName='mid layer' - do l=1,lm - ll=lm-l+1 - call getnemsandscatter(me,nfile,im,jm,jsta,jsta_2l & - ,jend_2u,MPI_COMM_COMP,icnt,idsp,spval,VarName,VcoordName & - ,l,im,jm,nframe,soot(1,jsta_2l,ll,1)) -! if(debugprint)print*,'sample l ',VarName,' = ',ll,soot(isa,jsa,ll,1) - end do ! do loop for l - - VarName='bcphilic' - VcoordName='mid layer' - do l=1,lm - ll=lm-l+1 - call getnemsandscatter(me,nfile,im,jm,jsta,jsta_2l & - ,jend_2u,MPI_COMM_COMP,icnt,idsp,spval,VarName,VcoordName & - ,l,im,jm,nframe,soot(1,jsta_2l,ll,2)) -! if(debugprint)print*,'sample l ',VarName,' = ',ll,soot(isa,jsa,ll,2) - end do ! do loop for l - -! GFS output organic carbon in nemsio (GOCART) - do n=1,nbin_oc - do l=1,lm -!$omp parallel do private(i,j) - do j=jsta_2l,jend_2u - do i=1,im - waso(i,j,l,n) = spval - enddo - enddo - enddo - enddo -! WASO = SPVAL - VarName='ocphobic' - VcoordName='mid layer' - do l=1,lm - ll=lm-l+1 - call getnemsandscatter(me,nfile,im,jm,jsta,jsta_2l & - ,jend_2u,MPI_COMM_COMP,icnt,idsp,spval,VarName,VcoordName & - ,l,im,jm,nframe,waso(1,jsta_2l,ll,1)) -! if(debugprint)print*,'sample l ',VarName,' = ',ll,waso(isa,jsa,ll,1) - end do ! do loop for l - - VarName='ocphilic' - VcoordName='mid layer' - do l=1,lm - ll=lm-l+1 - call getnemsandscatter(me,nfile,im,jm,jsta,jsta_2l & - ,jend_2u,MPI_COMM_COMP,icnt,idsp,spval,VarName,VcoordName & - ,l,im,jm,nframe,waso(1,jsta_2l,ll,2)) -! if(debugprint)print*,'sample l ',VarName,' = ',ll,waso(isa,jsa,ll,2) - end do ! do loop for l - -! GFS output sulfate in nemsio (GOCART) - do n=1,nbin_su - do l=1,lm -!$omp parallel do private(i,j) - do j=jsta_2l,jend_2u - do i=1,im - suso(i,j,l,n) = spval - enddo - enddo - enddo - enddo -! SUSO = SPVAL - VarName='so4' - VcoordName='mid layer' - do l=1,lm - ll=lm-l+1 - call getnemsandscatter(me,nfile,im,jm,jsta,jsta_2l & - ,jend_2u,MPI_COMM_COMP,icnt,idsp,spval,VarName,VcoordName & - ,l,im,jm,nframe,suso(1,jsta_2l,ll,1)) -! if(debugprint)print*,'sample l ',VarName,' = ',ll,suso(isa,jsa,ll,1) - end do ! do loop for l - - -! -- compute air density RHOMID and remove negative tracer values - do l=1,lm -!$omp parallel do private(i,j,n,tv) - do j=jsta,jend - do i=1,im - - TV = T(I,J,L) * (H1+D608*MAX(Q(I,J,L),QMIN)) - RHOMID(I,J,L) = PMID(I,J,L) / (RD*TV) - do n = 1, NBIN_DU - IF ( dust(i,j,l,n) < SPVAL) THEN - DUST(i,j,l,n) = MAX(DUST(i,j,l,n), 0.0) - ENDIF - enddo - do n = 1, NBIN_SS - IF ( salt(i,j,l,n) < SPVAL) THEN - SALT(i,j,l,n) = MAX(SALT(i,j,l,n), 0.0) - ENDIF - enddo - do n = 1, NBIN_OC - IF ( waso(i,j,l,n) < SPVAL) THEN - WASO(i,j,l,n) = MAX(WASO(i,j,l,n), 0.0) - ENDIF - enddo - do n = 1, NBIN_BC - IF ( soot(i,j,l,n) < SPVAL) THEN - SOOT(i,j,l,n) = MAX(SOOT(i,j,l,n), 0.0) - ENDIF - enddo - do n = 1, NBIN_SU - IF ( suso(i,j,l,n) < SPVAL) THEN - SUSO(i,j,l,n) = MAX(SUSO(i,j,l,n), 0.0) - ENDIF - enddo - - end do - end do - end do - endif ! endif for gocart_on -! - -! PBL height using nemsio - VarName='hpbl' - VcoordName='sfc' - l=1 - call getnemsandscatter(me,ffile,im,jm,jsta,jsta_2l & - ,jend_2u,MPI_COMM_COMP,icnt,idsp,spval,VarName,VcoordName & - ,l,im,jm,nframe,pblh) -! if(debugprint)print*,'sample ',VarName,' = ',pblh(isa,jsa) - -! frictional velocity using nemsio - VarName='fricv' -! VcoordName='sfc' -! l=1 - call getnemsandscatter(me,ffile,im,jm,jsta,jsta_2l & - ,jend_2u,MPI_COMM_COMP,icnt,idsp,spval,VarName,VcoordName & - ,l,im,jm,nframe,ustar) -! if(debugprint)print*,'sample ',VarName,' = ',ustar(isa,jsa) - -! roughness length using getgb - VarName='sfcr' -! VcoordName='sfc' -! l=1 - call getnemsandscatter(me,ffile,im,jm,jsta,jsta_2l & - ,jend_2u,MPI_COMM_COMP,icnt,idsp,spval,VarName,VcoordName & - ,l,im,jm,nframe,z0) -! if(debugprint)print*,'sample ',VarName,' = ',z0(isa,jsa) - -! surface potential T using getgb - VarName='tmp' -! VcoordName='sfc' -! l=1 - call getnemsandscatter(me,ffile,im,jm,jsta,jsta_2l & - ,jend_2u,MPI_COMM_COMP,icnt,idsp,spval,VarName,VcoordName & - ,l,im,jm,nframe,ths) - -! where(ths/=spval)ths=ths*(p1000/pint(:,:,lp1))**CAPA ! convert to THS - -!$omp parallel do private(i,j) - do j=jsta,jend - do i=1,im - if (ths(i,j) /= spval) then -! write(0,*)' i=',i,' j=',j,' ths=',ths(i,j),' pint=',pint(i,j,lp1) - ths(i,j) = ths(i,j) * (p1000/pint(i,j,lp1))**capa - endif - QS(i,j) = SPVAL ! GFS does not have surface specific humidity - twbs(i,j) = SPVAL ! GFS does not have inst sensible heat flux - qwbs(i,j) = SPVAL ! GFS does not have inst latent heat flux - enddo - enddo -! if(debugprint)print*,'sample ',VarName,' = ',ths(isa,jsa) - - -! GFS does not have time step and physics time step, make up ones since they -! are not really used anyway - NPHS=2. - DT=80. - DTQ2 = DT * NPHS !MEB need to get physics DT - TSPH = 3600./DT !MEB need to get DT -! All GFS time-averaged quantities are in 6 hour bucket -! TPREC=6.0 - -! convective precip in m per physics time step using gfsio -! VarName='cprat' -! VcoordName='sfc' -! l=1 -! if(me == 0)then -! call gfsio_readrecvw34(gfile,trim(VarName),trim(VcoordName) & -! + ,l,dummy,iret=iret) -! if (iret /= 0) then -! print*,VarName," not found in file-Assigned missing values" -! dummy=spval -! else -! do j = 1, jm -! do i = 1, im -! dummy(I,J)= dummy(i,j)*dtq2/1000. ! convert to m -! if (j == jm/2 .and. mod(i,50) == 0) -! + print*,'sample ',VarName, ' = ',i,j,dummy(i,j) -! enddo -! enddo -! end if -! end if -! call mpi_scatterv(dummy,icnt,idsp,mpi_real & -! + , avgcprate(1,jsta),icnt(me),mpi_real,0,MPI_COMM_COMP,iret) -! if (iret /= 0)print*,'Error scattering array';stop - -! convective precip in m per physics time step using getgb - VarName='cprat' -! VcoordName='sfc' -! l=1 - call getnemsandscatter(me,ffile,im,jm,jsta,jsta_2l & - ,jend_2u,MPI_COMM_COMP,icnt,idsp,spval,VarName,VcoordName & - ,l,im,jm,nframe,avgcprate) -! where(avgcprate /= spval)avgcprate=avgcprate*dtq2/1000. ! convert to m -!$omp parallel do private(i,j) - do j=jsta,jend - do i=1,im - if (avgcprate(i,j) /= spval) avgcprate(i,j) = avgcprate(i,j) * (dtq2*0.001) - cprate(i,j) = avgcprate(i,j) - enddo - enddo -! if(debugprint)print*,'sample ',VarName,' = ',avgcprate(isa,jsa) - -! print*,'maxval CPRATE: ', maxval(CPRATE) - -! precip rate in m per physics time step using getgb - VarName='prate' -! VcoordName='sfc' -! l=1 - call getnemsandscatter(me,ffile,im,jm,jsta,jsta_2l & - ,jend_2u,MPI_COMM_COMP,icnt,idsp,spval,VarName,VcoordName & - ,l,im,jm,nframe,avgprec) -! where(avgprec /= spval)avgprec=avgprec*dtq2/1000. ! convert to m -!$omp parallel do private(i,j) - do j=jsta,jend - do i=1,im - if (avgprec(i,j) /= spval) avgprec(i,j) = avgprec(i,j) * (dtq2*0.001) - enddo - enddo - -! if(debugprint)print*,'sample ',VarName,' = ',avgprec(isa,jsa) - - prec=avgprec !set avg cprate to inst one to derive other fields - -! GFS does not have accumulated total, gridscale, and convective precip, will use inst precip to derive in SURFCE.f - - -! inst snow water eqivalent using nemsio - VarName='weasd' -! VcoordName='sfc' -! l=1 - call getnemsandscatter(me,ffile,im,jm,jsta,jsta_2l & - ,jend_2u,MPI_COMM_COMP,icnt,idsp,spval,VarName,VcoordName & - ,l,im,jm,nframe,sno) -! if(debugprint)print*,'sample ',VarName,' = ',sno(isa,jsa) - -! snow depth in mm using nemsio - VarName='snod' -! VcoordName='sfc' -! l=1 - call getnemsandscatter(me,ffile,im,jm,jsta,jsta_2l & - ,jend_2u,MPI_COMM_COMP,icnt,idsp,spval,VarName,VcoordName & - ,l,im,jm,nframe,si) -! where(si /= spval)si=si*1000. ! convert to mm -!$omp parallel do private(i,j) - do j=jsta,jend - do i=1,im - if (si(i,j) /= spval) si(i,j) = si(i,j) * 1000.0 - CLDEFI(i,j) = SPVAL ! GFS does not have convective cloud efficiency - lspa(i,j) = spval ! GFS does not have similated precip - TH10(i,j) = SPVAL ! GFS does not have 10 m theta - TH10(i,j) = SPVAL ! GFS does not have 10 m theta - Q10(i,j) = SPVAL ! GFS does not have 10 m humidity - ALBASE(i,j) = SPVAL ! GFS does not have snow free albedo - enddo - enddo -! if(debugprint)print*,'sample ',VarName,' = ',si(isa,jsa) - -!!$omp parallel do private(i,j,l) -! do l=1,lm -! do j=jsta,jend -! do i=1,im -! Q2(i,j,l) = SPVAL ! GFS does not have TKE because it uses MRF scheme -! ! GFS does not have surface exchange coeff -! enddo -! enddo -! enddo - -! 2m T using nemsio - VarName='tmp' - VcoordName='2 m above gnd' -! l=1 - call getnemsandscatter(me,ffile,im,jm,jsta,jsta_2l & - ,jend_2u,MPI_COMM_COMP,icnt,idsp,spval,VarName,VcoordName & - ,l,im,jm,nframe,tshltr) -! if(debugprint)print*,'sample ',VarName,' = ',tshltr(isa,jsa) - -! GFS does not have 2m pres, estimate it, also convert t to theta - Do j=jsta,jend - Do i=1,im - PSHLTR(I,J)=pint(I,J,lm+1)*EXP(-0.068283/tshltr(i,j)) - tshltr(i,j)= tshltr(i,j)*(p1000/PSHLTR(I,J))**CAPA ! convert to theta -! if (j == jm/2 .and. mod(i,50) == 0) -! + print*,'sample 2m T and P after scatter= ' -! + ,i,j,tshltr(i,j),pshltr(i,j) - end do - end do - -! 2m specific humidity using gfsio -! VarName='spfh' -! VcoordName='2m above gnc' -! l=1 -! if(me == 0)then -! call gfsio_readrecvw34(gfile,trim(VarName),trim(VcoordName) & -! + ,l,dummy,iret=iret) -! if (iret /= 0) then -! print*,VarName," not found in file-Assigned missing values" -! dummy=spval -! end if -! end if -! call mpi_scatterv(dummy,icnt,idsp,mpi_real & -! + ,qshltr(1,jsta),icnt(me),mpi_real,0,MPI_COMM_COMP,iret) -! if (iret /= 0)print*,'Error scattering array';stop - -! 2m specific humidity using nemsio - VarName='spfh' - VcoordName='2 m above gnd' -! l=1 - call getnemsandscatter(me,ffile,im,jm,jsta,jsta_2l & - ,jend_2u,MPI_COMM_COMP,icnt,idsp,spval,VarName,VcoordName & - ,l,im,jm,nframe,qshltr) -! if(debugprint)print*,'sample ',VarName,' = ',qshltr(isa,jsa) - - -! mid day avg albedo in fraction using gfsio -! VarName='albdo' -! VcoordName='sfc' -! l=1 -! if(me == 0)then -! call gfsio_readrecvw34(gfile,trim(VarName),trim(VcoordName) & -! + ,l,dummy,iret=iret) -! if (iret /= 0) then -! print*,VarName," not found in file-Assigned missing values" -! dummy=spval -! else -! do j = 1, jm -! do i = 1, im -! dummy(I,J)= dummy(i,j)/100. ! convert to fraction -! if (j == jm/2 .and. mod(i,50) == 0) -! + print*,'sample ',VarName, ' = ',i,j,dummy(i,j) -! enddo -! enddo -! end if -! end if -! call mpi_scatterv(dummy,icnt,idsp,mpi_real & -! + ,avgalbedo(1,jsta),icnt(me),mpi_real,0,MPI_COMM_COMP,iret) -! if (iret /= 0)print*,'Error scattering array';stop - -! mid day avg albedo in fraction using nemsio - VarName='albdo' - VcoordName='sfc' -! l=1 - call getnemsandscatter(me,ffile,im,jm,jsta,jsta_2l & - ,jend_2u,MPI_COMM_COMP,icnt,idsp,spval,VarName,VcoordName & - ,l,im,jm,nframe,avgalbedo) -! where(avgalbedo /= spval)avgalbedo=avgalbedo/100. ! convert to fraction -!$omp parallel do private(i,j) - do j=jsta,jend - do i=1,im - if (avgalbedo(i,j) /= spval) avgalbedo(i,j) = avgalbedo(i,j) * 0.01 - enddo - enddo -! if(debugprint)print*,'sample ',VarName,' = ',avgalbedo(isa,jsa) - -! time averaged column cloud fractionusing nemsio - VarName='tcdc' - VcoordName='atmos col' -! l=1 - call getnemsandscatter(me,ffile,im,jm,jsta,jsta_2l & - ,jend_2u,MPI_COMM_COMP,icnt,idsp,spval,VarName,VcoordName & - ,l,im,jm,nframe,avgtcdc) -! where(avgtcdc /= spval)avgtcdc=avgtcdc/100. ! convert to fraction -!$omp parallel do private(i,j) - do j=jsta,jend - do i=1,im - if (avgtcdc(i,j) /= spval) avgtcdc(i,j) = avgtcdc(i,j) * 0.01 - enddo - enddo -! if(debugprint)print*,'sample ',VarName,' = ',avgtcdc(isa,jsa) - -! GFS probably does not use zenith angle -!$omp parallel do private(i,j) - do j=jsta_2l,jend_2u - do i=1,im - Czen(i,j) = spval - CZMEAN(i,j) = SPVAL - enddo - enddo - -! maximum snow albedo in fraction using nemsio - VarName='mxsalb' - VcoordName='sfc' -! l=1 - call getnemsandscatter(me,ffile,im,jm,jsta,jsta_2l & - ,jend_2u,MPI_COMM_COMP,icnt,idsp,spval,VarName,VcoordName & - ,l,im,jm,nframe,mxsnal) -! where(mxsnal /= spval)mxsnal=mxsnal/100. ! convert to fraction -!$omp parallel do private(i,j) - do j=jsta,jend - do i=1,im - if (mxsnal(i,j) /= spval) mxsnal(i,j) = mxsnal(i,j) * 0.01 - enddo - enddo -! if(debugprint)print*,'sample ',VarName,' = ',mxsnal(isa,jsa) - -!$omp parallel do private(i,j) - do j=jsta_2l,jend_2u - do i=1,im - radot(i,j) = spval ! GFS does not have inst surface outgoing longwave - enddo - enddo - -! GFS probably does not use sigt4, set it to sig*t^4 -!$omp parallel do private(i,j,tlmh) - Do j=jsta,jend - Do i=1,im - TLMH = T(I,J,LM) * T(I,J,LM) - Sigt4(i,j) = 5.67E-8 * TLMH * TLMH - End do - End do - -! TG is not used, skip it for now - -! will retrive f_ice when GFS switches to Ferrier scheme -! varname='F_ICE' -! call retrieve_index(index,VarName,varname_all,nrecs,iret) -! if (iret /= 0) then -! print*,VarName," not found in file-Assigned missing values" -! F_ice=SPVAL -! else -! this_offset=file_offset(index+1)+(jsta_2l-1)*4*im*lm -! this_length=im*(jend_2u-jsta_2l+1)*lm -! call mpi_file_read_at(iunit,this_offset -! + ,buf3d,this_length,mpi_real4 -! + , mpi_status_ignore, ierr) -! if (ierr /= 0) then -! print*,"Error reading ", VarName,"Assigned missing values" -! F_ice=SPVAL -! else -! do l = 1, lm -! ll=lm-l+1 -! do j = jsta_2l, jend_2u -! do i = 1, im -! F_ice( i, j, l ) = buf3d ( i, ll, j ) -! if(i == im/2.and.j == (jsta+jend)/2)print*,'sample F_ice= ', -! + i,j,l,F_ice( i, j, l ) -! end do -! end do -! end do -! end if -! end if - -! varname='F_RAIN' -! call retrieve_index(index,VarName,varname_all,nrecs,iret) -! if (iret /= 0) then -! print*,VarName," not found in file-Assigned missing values" -! F_rain=SPVAL -! else -! this_offset=file_offset(index+1)+(jsta_2l-1)*4*im*lm -! this_length=im*(jend_2u-jsta_2l+1)*lm -! call mpi_file_read_at(iunit,this_offset -! + ,buf3d,this_length,mpi_real4 -! + , mpi_status_ignore, ierr) -! if (ierr /= 0) then -! print*,"Error reading ", VarName,"Assigned missing values" -! F_rain=SPVAL -! else -! do l = 1, lm -! ll=lm-l+1 -! do j = jsta_2l, jend_2u -! do i = 1, im -! F_rain( i, j, l ) = buf3d ( i, ll, j ) -! if(i == im/2.and.j == (jsta+jend)/2)print*,'sample F_rain= ', -! + i,j,l,F_rain( i, j, l ) -! end do -! end do -! end do -! end if -! end if - -! varname='F_RIMEF' -! call retrieve_index(index,VarName,varname_all,nrecs,iret) -! if (iret /= 0) then -! print*,VarName," not found in file-Assigned missing values" -! F_RimeF=SPVAL -! else -! this_offset=file_offset(index+1)+(jsta_2l-1)*4*im*lm -! this_length=im*(jend_2u-jsta_2l+1)*lm -! call mpi_file_read_at(iunit,this_offset -! + ,buf3d,this_length,mpi_real4 -! + , mpi_status_ignore, ierr) -! if (ierr /= 0) then -! print*,"Error reading ", VarName,"Assigned missing values" -! F_RimeF=SPVAL -! else -! do l = 1, lm -! ll=lm-l+1 -! do j = jsta_2l, jend_2u -! do i = 1, im -! F_RimeF( i, j, l ) = buf3d ( i, ll, j ) -! if(i == im/2.and.j == (jsta+jend)/2)print*, -! + 'sample F_RimeF= ',i,j,l,F_RimeF( i, j, l ) -! end do -! end do -! end do -! end if -! end if - -! GFS does not have model level cloud fraction -> derive cloud fraction -! CFR=SPVAL -! allocate(qstl(lm)) -! print*,'start deriving cloud fraction' - -! do j=jsta,jend -! do i=1,im -! do l=1,lm -! if(i==im/2.and.j==jsta)print*,'sample T=',t(i,j,l) -! es=fpvsnew(t(i,j,l)) -! if(i==im/2.and.j==jsta)print*,'sample ES=',es -! es=min(es,pmid(i,j,l)) -! if(i==im/2.and.j==jsta)print*,'sample ES=',es -! qstl(l)=con_eps*es/(pmid(i,j,l)+con_epsm1*es) !saturation q for GFS -! end do -! call progcld1 -!................................... - -! --- inputs: -! & ( pmid(i,j,1:lm)/100.,pint(i,j,1:lm+1)/100., -! & t(i,j,1:lm),q(i,j,1:lm),qstl,cwm(i,j,1:lm), -! & gdlat(i,j),gdlon(i,j), -! & 1, lm, lm+1, 0, -! --- outputs: -! & cfr(i,j,1:lm) -! & ) -! do l=1,lm -! cfr(i,j,l)=cldtot(l) -! end do -! end do -! end do - allocate(p2d(im,lm),t2d(im,lm),q2d(im,lm),cw2d(im,lm), & - qs2d(im,lm),cfr2d(im,lm)) - do j=jsta,jend -!$omp parallel do private(i,k,es) - do k=1,lm - do i=1,im - p2d(i,k) = pmid(i,j,k)*0.01 - t2d(i,k) = t(i,j,k) - q2d(i,k) = q(i,j,k) - cw2d(i,k) = cwm(i,j,k) - es = min(fpvsnew(t(i,j,k)),pmid(i,j,k)) - qs2d(i,k) = eps*es/(pmid(i,j,k)+epsm1*es)!saturation q for GFS - enddo - enddo - call progcld1 & -!................................... -! --- inputs: - ( p2d,t2d,q2d,qs2d,cw2d,im,lm,0, & -! --- outputs: - cfr2d & - ) -!$omp parallel do private(i,k) - do k=1,lm - do i=1,im - cfr(i,j,k) = cfr2d(i,k) - enddo - end do - end do - deallocate(p2d,t2d,q2d,qs2d,cw2d,cfr2d) - - -! ask murthy if there is snow rate in GFS -! varname='SR' -! call retrieve_index(index,VarName,varname_all,nrecs,iret) -! if (iret /= 0) then -! print*,VarName," not found in file-Assigned missing values" -! SR=SPVAL -! else -! this_offset=file_offset(index+1)+(jsta_2l-1)*4*im -! this_length=im*(jend_2u-jsta_2l+1) -! call mpi_file_read_at(iunit,this_offset -! + ,sr,this_length,mpi_real4 -! + , mpi_status_ignore, ierr) -! if (ierr /= 0) then -! print*,"Error reading ", VarName,"Assigned missing values" -! SR=SPVAL -! end if -! end if - -! GFS does not have inst cloud fraction for high, middle, and low cloud -!$omp parallel do private(i,j) - do j=jsta_2l,jend_2u - do i=1,im - cfrach(i,j) = spval - cfracl(i,j) = spval - cfracm(i,j) = spval - enddo - enddo - -! ave high cloud fraction using nemsio - VarName='tcdc' - VcoordName='high cld lay' - l=1 - call getnemsandscatter(me,ffile,im,jm,jsta,jsta_2l & - ,jend_2u,MPI_COMM_COMP,icnt,idsp,spval,VarName,VcoordName & - ,l,im,jm,nframe,avgcfrach) -! where(avgcfrach /= spval)avgcfrach=avgcfrach/100. ! convert to fraction -!$omp parallel do private(i,j) - do j=jsta,jend - do i=1,im - if (avgcfrach(i,j) /= spval) avgcfrach(i,j) = avgcfrach(i,j) * 0.01 - enddo - enddo -! if(debugprint)print*,'sample ',VarName,' = ',avgcfrach(isa,jsa) - -! ave low cloud fraction using nemsio - VarName='tcdc' - VcoordName='low cld lay' - l=1 - call getnemsandscatter(me,ffile,im,jm,jsta,jsta_2l & - ,jend_2u,MPI_COMM_COMP,icnt,idsp,spval,VarName,VcoordName & - ,l,im,jm,nframe,avgcfracl) -! where(avgcfracl /= spval)avgcfracl=avgcfracl/100. ! convert to fraction -!$omp parallel do private(i,j) - do j=jsta,jend - do i=1,im - if (avgcfracl(i,j) /= spval) avgcfracl(i,j) = avgcfracl(i,j) * 0.01 - enddo - enddo -! if(debugprint)print*,'sample ',VarName,' = ',avgcfracl(isa,jsa) - -! ave middle cloud fraction using nemsio - VarName='tcdc' - VcoordName='mid cld lay' - l=1 - call getnemsandscatter(me,ffile,im,jm,jsta,jsta_2l & - ,jend_2u,MPI_COMM_COMP,icnt,idsp,spval,VarName,VcoordName & - ,l,im,jm,nframe,avgcfracm) -! where(avgcfracm /= spval)avgcfracm=avgcfracm/100. ! convert to fraction -!$omp parallel do private(i,j) - do j=jsta,jend - do i=1,im - if (avgcfracm(i,j) /= spval) avgcfracm(i,j) = avgcfracm(i,j) * 0.01 - enddo - enddo -! if(debugprint)print*,'sample ',VarName,' = ',avgcfracm(isa,jsa) - -! inst convective cloud fraction using nemsio - VarName='tcdc' - VcoordName='convect-cld laye' - l=1 - call getnemsandscatter(me,ffile,im,jm,jsta,jsta_2l & - ,jend_2u,MPI_COMM_COMP,icnt,idsp,spval,VarName,VcoordName & - ,l,im,jm,nframe,cnvcfr) -! where(cnvcfr /= spval)cnvcfr=cnvcfr/100. ! convert to fraction -!$omp parallel do private(i,j) - do j=jsta,jend - do i=1,im - if (cnvcfr(i,j) /= spval) cnvcfr (i,j)= cnvcfr(i,j) * 0.01 - enddo - enddo -! if(debugprint)print*,'sample ',VarName,' = ',cnvcfr(isa,jsa) - -! slope type using nemsio - VarName='sltyp' - VcoordName='sfc' - l=1 - call getnemsandscatter(me,ffile,im,jm,jsta,jsta_2l & - ,jend_2u,MPI_COMM_COMP,icnt,idsp,spval,VarName,VcoordName & - ,l,im,jm,nframe,buf) -! where(buf /= spval)islope=nint(buf) -!$omp parallel do private(i,j) - do j = jsta_2l, jend_2u - do i=1,im - if (buf(i,j) < spval) then - islope(i,j) = nint(buf(i,j)) - else - islope(i,j) = 0 - endif - enddo - enddo -! if(debugprint)print*,'sample ',VarName,' = ',islope(isa,jsa) - -! plant canopy sfc wtr in m using nemsio - VarName='cnwat' - VcoordName='sfc' - l=1 - call getnemsandscatter(me,ffile,im,jm,jsta,jsta_2l & - ,jend_2u,MPI_COMM_COMP,icnt,idsp,spval,VarName,VcoordName & - ,l,im,jm,nframe,cmc) -! where(cmc /= spval)cmc=cmc/1000. ! convert from kg*m^2 to m -!$omp parallel do private(i,j) - do j=jsta,jend - do i=1,im - if (cmc(i,j) /= spval) cmc(i,j) = cmc(i,j) * 0.001 - enddo - enddo -! if(debugprint)print*,'sample ',VarName,' = ',cmc(isa,jsa) - -!$omp parallel do private(i,j) - do j=jsta_2l,jend_2u - do i=1,im - grnflx(i,j) = spval ! GFS does not have inst ground heat flux - enddo - enddo - -! GFS does not have snow cover yet -! VarName='gflux' -! VcoordName='sfc' -! l=1 -! if(me == 0)then -! call gfsio_readrecvw34(gfile,trim(VarName),trim(VcoordName) & -! + ,l,dummy,iret=iret) -! if (iret /= 0) then -! print*,VarName," not found in file-Assigned missing values" -! dummy=spval -! end if -! end if -! call mpi_scatterv(dummy,icnt,idsp,mpi_real & -! + , pctsno(1,jsta),icnt(me),mpi_real,0,MPI_COMM_COMP,iret) -! if (iret /= 0)print*,'Error scattering array';stop - -! asuume tg3 in GFS is the same as soiltb in wrf nmm. It's in sfc file, will -! be able to read it when it merges to gfs io -! soiltb is not being put out, comment it out -! VarName='tg3' -! VcoordName='sfc' -! l=1 -! if(me == 0)then -! call gfsio_readrecvw34(gfile,trim(VarName),trim(VcoordName) & -! ,l,dummy,iret=iret) -! if (iret /= 0) then -! print*,VarName," not found in file-Assigned missing values" -! dummy=spval -! end if -! end if -! call mpi_scatterv(dummy(1,1),icnt,idsp,mpi_real & -! , soiltb(1,jsta),icnt(me),mpi_real,0,MPI_COMM_COMP,iret) -! if (iret /= 0)print*,'Error scattering array';stop - -! vegetation fraction in fraction. using nemsio - VarName='veg' - VcoordName='sfc' - l=1 - call getnemsandscatter(me,ffile,im,jm,jsta,jsta_2l & - ,jend_2u,MPI_COMM_COMP,icnt,idsp,spval,VarName,VcoordName & - ,l,im,jm,nframe,vegfrc) -! where(vegfrc /= spval) -! vegfrc=vegfrc/100. ! convert to fraction -! elsewhere (vegfrc == spval) -! vegfrc=0. ! set to zero to be reasonable input for crtm -! end where -!$omp parallel do private(i,j) - do j=jsta,jend - do i=1,im - if (vegfrc(i,j) /= spval) then - vegfrc(i,j) = vegfrc(i,j) * 0.01 - else - vegfrc(i,j) = 0.0 - endif - enddo - enddo -! if(debugprint)print*,'sample ',VarName,' = ',vegfrc(isa,jsa) - -! GFS doesn not yet output soil layer thickness, assign SLDPTH to be the same as nam - - SLDPTH(1) = 0.10 - SLDPTH(2) = 0.3 - SLDPTH(3) = 0.6 - SLDPTH(4) = 1.0 - -! liquid volumetric soil mpisture in fraction using nemsio - VarName='soill' - VcoordName='0-10 cm down' - l=1 - call getnemsandscatter(me,ffile,im,jm,jsta,jsta_2l & - ,jend_2u,MPI_COMM_COMP,icnt,idsp,spval,VarName,VcoordName & - ,l,im,jm,nframe,sh2o(1,jsta_2l,1)) -! if(debugprint)print*,'sample l',VarName,' = ',1,sh2o(isa,jsa,1) - - VarName='soill' - VcoordName='10-40 cm down' - l=1 - call getnemsandscatter(me,ffile,im,jm,jsta,jsta_2l & - ,jend_2u,MPI_COMM_COMP,icnt,idsp,spval,VarName,VcoordName & - ,l,im,jm,nframe,sh2o(1,jsta_2l,2)) -! if(debugprint)print*,'sample l',VarName,' = ',1,sh2o(isa,jsa,2) - - VarName='soill' - VcoordName='40-100 cm down' - l=1 - call getnemsandscatter(me,ffile,im,jm,jsta,jsta_2l & - ,jend_2u,MPI_COMM_COMP,icnt,idsp,spval,VarName,VcoordName & - ,l,im,jm,nframe,sh2o(1,jsta_2l,3)) -! if(debugprint)print*,'sample l',VarName,' = ',1,sh2o(isa,jsa,3) - - VarName='soill' - VcoordName='100-200 cm down' - l=1 - call getnemsandscatter(me,ffile,im,jm,jsta,jsta_2l & - ,jend_2u,MPI_COMM_COMP,icnt,idsp,spval,VarName,VcoordName & - ,l,im,jm,nframe,sh2o(1,jsta_2l,4)) -! if(debugprint)print*,'sample l',VarName,' = ',1,sh2o(isa,jsa,4) - -! volumetric soil moisture using nemsio - VarName='soilw' - VcoordName='0-10 cm down' - l=1 - call getnemsandscatter(me,ffile,im,jm,jsta,jsta_2l & - ,jend_2u,MPI_COMM_COMP,icnt,idsp,spval,VarName,VcoordName & - ,l,im,jm,nframe,smc(1,jsta_2l,1)) -! if(debugprint)print*,'sample l',VarName,' = ',1,smc(isa,jsa,1) - - VarName='soilw' - VcoordName='10-40 cm down' - l=1 - call getnemsandscatter(me,ffile,im,jm,jsta,jsta_2l & - ,jend_2u,MPI_COMM_COMP,icnt,idsp,spval,VarName,VcoordName & - ,l,im,jm,nframe,smc(1,jsta_2l,2)) -! if(debugprint)print*,'sample l',VarName,' = ',1,smc(isa,jsa,2) - - VarName='soilw' - VcoordName='40-100 cm down' - l=1 - call getnemsandscatter(me,ffile,im,jm,jsta,jsta_2l & - ,jend_2u,MPI_COMM_COMP,icnt,idsp,spval,VarName,VcoordName & - ,l,im,jm,nframe,smc(1,jsta_2l,3)) -! if(debugprint)print*,'sample l',VarName,' = ',1,smc(isa,jsa,3) - - VarName='soilw' - VcoordName='100-200 cm down' - l=1 - call getnemsandscatter(me,ffile,im,jm,jsta,jsta_2l & - ,jend_2u,MPI_COMM_COMP,icnt,idsp,spval,VarName,VcoordName & - ,l,im,jm,nframe,smc(1,jsta_2l,4)) -! if(debugprint)print*,'sample l',VarName,' = ',1,smc(isa,jsa,4) - -! soil temperature using nemsio - VarName='tmp' - VcoordName='0-10 cm down' - l=1 - call getnemsandscatter(me,ffile,im,jm,jsta,jsta_2l & - ,jend_2u,MPI_COMM_COMP,icnt,idsp,spval,VarName,VcoordName & - ,l,im,jm,nframe,stc(1,jsta_2l,1)) -! if(debugprint)print*,'sample l','stc',' = ',1,stc(isa,jsa,1) - - VarName='tmp' - VcoordName='10-40 cm down' - l=1 - call getnemsandscatter(me,ffile,im,jm,jsta,jsta_2l & - ,jend_2u,MPI_COMM_COMP,icnt,idsp,spval,VarName,VcoordName & - ,l,im,jm,nframe,stc(1,jsta_2l,2)) -! if(debugprint)print*,'sample stc = ',1,stc(isa,jsa,2) - - VarName='tmp' - VcoordName='40-100 cm down' - l=1 - call getnemsandscatter(me,ffile,im,jm,jsta,jsta_2l & - ,jend_2u,MPI_COMM_COMP,icnt,idsp,spval,VarName,VcoordName & - ,l,im,jm,nframe,stc(1,jsta_2l,3)) -! if(debugprint)print*,'sample stc = ',1,stc(isa,jsa,3) - - VarName='tmp' - VcoordName='100-200 cm down' - l=1 - call getnemsandscatter(me,ffile,im,jm,jsta,jsta_2l & - ,jend_2u,MPI_COMM_COMP,icnt,idsp,spval,VarName,VcoordName & - ,l,im,jm,nframe,stc(1,jsta_2l,4)) -! if(debugprint)print*,'sample stc = ',1,stc(isa,jsa,4) - -!$omp parallel do private(i,j) - do j=jsta,jend - do i=1,im - acfrcv(i,j) = spval ! GFS does not output time averaged convective and strat cloud fraction, set acfrcv to spval, ncfrcv to 1 - ncfrcv(i,j) = 1.0 - acfrst(i,j) = spval ! GFS does not output time averaged cloud fraction, set acfrst to spval, ncfrst to 1 - ncfrst(i,j) = 1.0 - ssroff(i,j) = spval ! GFS does not have storm runoff - bgroff(i,j) = spval ! GFS does not have UNDERGROUND RUNOFF - rlwin(i,j) = spval ! GFS does not have inst incoming sfc longwave - rlwtoa(i,j) = spval ! GFS does not have inst model top outgoing longwave - enddo - enddo -! trdlw(i,j) = 6.0 - ardlw = 1.0 ! GFS incoming sfc longwave has been averaged over 6 hr bucket, set ARDLW to 1 - -! time averaged incoming sfc longwave using nemsio - VarName='dlwrf' - VcoordName='sfc' - l=1 - call getnemsandscatter(me,ffile,im,jm,jsta,jsta_2l & - ,jend_2u,MPI_COMM_COMP,icnt,idsp,spval,VarName,VcoordName & - ,l,im,jm,nframe,alwin) - -! time averaged outgoing sfc longwave using gfsio - VarName='ulwrf' - VcoordName='sfc' - l=1 - call getnemsandscatter(me,ffile,im,jm,jsta,jsta_2l & - ,jend_2u,MPI_COMM_COMP,icnt,idsp,spval,VarName,VcoordName & - ,l,im,jm,nframe,alwout) -! where(alwout /= spval) alwout=-alwout ! CLDRAD puts a minus sign before gribbing -!$omp parallel do private(i,j) - do j=jsta,jend - do i=1,im - if (alwout(i,j) /= spval) alwout(i,j) = -alwout(i,j) - enddo - enddo -! if(debugprint)print*,'sample l',VarName,' = ',1,alwout(isa,jsa) - -! time averaged outgoing model top longwave using gfsio - VarName='ulwrf' - VcoordName='nom. top' - l=1 - call getnemsandscatter(me,ffile,im,jm,jsta,jsta_2l & - ,jend_2u,MPI_COMM_COMP,icnt,idsp,spval,VarName,VcoordName & - ,l,im,jm,nframe,alwtoa) -! if(debugprint)print*,'sample l',VarName,' = ',1,alwtoa(isa,jsa) - -!$omp parallel do private(i,j) - do j=jsta_2l,jend_2u - do i=1,im - rswin(i,j) = spval ! GFS does not have inst incoming sfc shortwave - rswinc(i,j) = spval ! GFS does not have inst incoming clear sky sfc shortwave - rswout(i,j) = spval ! GFS does not have inst outgoing sfc shortwave - enddo - enddo - -! GFS incoming sfc longwave has been averaged, set ARDLW to 1 - ardsw=1.0 -! trdsw=6.0 - -! time averaged incoming sfc shortwave using gfsio - VarName='dswrf' - VcoordName='sfc' - l=1 - call getnemsandscatter(me,ffile,im,jm,jsta,jsta_2l & - ,jend_2u,MPI_COMM_COMP,icnt,idsp,spval,VarName,VcoordName & - ,l,im,jm,nframe,aswin) -! if(debugprint)print*,'sample l',VarName,' = ',1,aswin(isa,jsa) - -! time averaged incoming sfc uv-b using getgb - VarName='duvb' - VcoordName='sfc' - l=1 - call getnemsandscatter(me,ffile,im,jm,jsta,jsta_2l & - ,jend_2u,MPI_COMM_COMP,icnt,idsp,spval,VarName,VcoordName & - ,l,im,jm,nframe,auvbin) -! if(debugprint)print*,'sample l',VarName,' = ',1,auvbin(isa,jsa) - -! time averaged incoming sfc clear sky uv-b using getgb - VarName='cduvb' - VcoordName='sfc' - l=1 - call getnemsandscatter(me,ffile,im,jm,jsta,jsta_2l & - ,jend_2u,MPI_COMM_COMP,icnt,idsp,spval,VarName,VcoordName & - ,l,im,jm,nframe,auvbinc) -! if(debugprint)print*,'sample l',VarName,' = ',1,auvbinc(isa,jsa) - -! time averaged outgoing sfc shortwave using gfsio - VarName='uswrf' - VcoordName='sfc' - l=1 - call getnemsandscatter(me,ffile,im,jm,jsta,jsta_2l & - ,jend_2u,MPI_COMM_COMP,icnt,idsp,spval,VarName,VcoordName & - ,l,im,jm,nframe,aswout) -! where(aswout /= spval) aswout=-aswout ! CLDRAD puts a minus sign before gribbing -!$omp parallel do private(i,j) - do j=jsta,jend - do i=1,im - if (aswout(i,j) /= spval) aswout(i,j) = -aswout(i,j) - enddo - enddo -! if(debugprint)print*,'sample l',VarName,' = ',1,aswout(isa,jsa) - -! time averaged model top incoming shortwave - VarName='dswrf' - VcoordName='nom. top' - l=1 - call getnemsandscatter(me,ffile,im,jm,jsta,jsta_2l & - ,jend_2u,MPI_COMM_COMP,icnt,idsp,spval,VarName,VcoordName & - ,l,im,jm,nframe,aswintoa) - -! time averaged model top outgoing shortwave - VarName='uswrf' - VcoordName='nom. top' - l=1 - call getnemsandscatter(me,ffile,im,jm,jsta,jsta_2l & - ,jend_2u,MPI_COMM_COMP,icnt,idsp,spval,VarName,VcoordName & - ,l,im,jm,nframe,aswtoa) -! if(debugprint)print*,'sample l',VarName,' = ',1,aswtoa(isa,jsa) - -! time averaged surface sensible heat flux, multiplied by -1 because wrf model flux -! has reversed sign convention using gfsio - VarName='shtfl' - VcoordName='sfc' - l=1 - call getnemsandscatter(me,ffile,im,jm,jsta,jsta_2l & - ,jend_2u,MPI_COMM_COMP,icnt,idsp,spval,VarName,VcoordName & - ,l,im,jm,nframe,sfcshx) -! where (sfcshx /= spval)sfcshx=-sfcshx -!$omp parallel do private(i,j) - do j=jsta,jend - do i=1,im - if (sfcshx(i,j) /= spval) sfcshx(i,j) = -sfcshx(i,j) - enddo - enddo -! if(debugprint)print*,'sample l',VarName,' = ',1,sfcshx(isa,jsa) - -! GFS surface flux has been averaged, set ASRFC to 1 - asrfc=1.0 -! tsrfc=6.0 - -! time averaged surface latent heat flux, multiplied by -1 because wrf model flux -! has reversed sign vonvention using gfsio - VarName='lhtfl' - VcoordName='sfc' - l=1 - call getnemsandscatter(me,ffile,im,jm,jsta,jsta_2l & - ,jend_2u,MPI_COMM_COMP,icnt,idsp,spval,VarName,VcoordName & - ,l,im,jm,nframe,sfclhx) -! where (sfclhx /= spval)sfclhx=-sfclhx -!$omp parallel do private(i,j) - do j=jsta,jend - do i=1,im - if (sfclhx(i,j) /= spval) sfclhx(i,j) = -sfclhx(i,j) - enddo - enddo -! if(debugprint)print*,'sample l',VarName,' = ',1,sfclhx(isa,jsa) - -! time averaged ground heat flux using nemsio - VarName='gflux' - VcoordName='sfc' - l=1 - call getnemsandscatter(me,ffile,im,jm,jsta,jsta_2l & - ,jend_2u,MPI_COMM_COMP,icnt,idsp,spval,VarName,VcoordName & - ,l,im,jm,nframe,subshx) -! if(debugprint)print*,'sample l',VarName,' = ',1,subshx(isa,jsa) - -! time averaged zonal momentum flux using gfsio - VarName='uflx' - VcoordName='sfc' - l=1 - call getnemsandscatter(me,ffile,im,jm,jsta,jsta_2l & - ,jend_2u,MPI_COMM_COMP,icnt,idsp,spval,VarName,VcoordName & - ,l,im,jm,nframe,sfcux) -! if(debugprint)print*,'sample l',VarName,' = ',1,sfcux(isa,jsa) - -! time averaged meridional momentum flux using nemsio - VarName='vflx' - VcoordName='sfc' - l=1 - call getnemsandscatter(me,ffile,im,jm,jsta,jsta_2l & - ,jend_2u,MPI_COMM_COMP,icnt,idsp,spval,VarName,VcoordName & - ,l,im,jm,nframe,sfcvx) -! if(debugprint)print*,'sample l',VarName,' = ',1,sfcvx(isa,jsa) - -!$omp parallel do private(i,j) - do j=jsta_2l,jend_2u - do i=1,im - snopcx(i,j) =spval ! GFS does not have snow phase change heat flux - sfcuvx(i,j) = spval ! GFS does not use total momentum flux - enddo - enddo - -! time averaged zonal gravity wave stress using nemsio - VarName='u-gwd' - VcoordName='sfc' - l=1 - call getnemsandscatter(me,ffile,im,jm,jsta,jsta_2l & - ,jend_2u,MPI_COMM_COMP,icnt,idsp,spval,VarName,VcoordName & - ,l,im,jm,nframe,gtaux) -! if(debugprint)print*,'sample l',VarName,' = ',1,gtaux(isa,jsa) - -! time averaged meridional gravity wave stress using getgb - VarName='v-gwd' - VcoordName='sfc' - l=1 - call getnemsandscatter(me,ffile,im,jm,jsta,jsta_2l & - ,jend_2u,MPI_COMM_COMP,icnt,idsp,spval,VarName,VcoordName & - ,l,im,jm,nframe,gtauy) -! if(debugprint)print*,'sample l',VarName,' = ',1,gtauy(isa,jsa) - -! time averaged accumulated potential evaporation - VarName='pevpr' - VcoordName='sfc' - l=1 - call getnemsandscatter(me,ffile,im,jm,jsta,jsta_2l & - ,jend_2u,MPI_COMM_COMP,icnt,idsp,spval,VarName,VcoordName & - ,l,im,jm,nframe,potevp) -! if(debugprint)print*,'sample l',VarName,' = ',1,potevp(isa,jsa) - - do l=1,lm -!$omp parallel do private(i,j) - do j=jsta_2l,jend_2u - do i=1,im -! GFS does not have temperature tendency due to long wave radiation - rlwtt(i,j,l) = spval -! GFS does not have temperature tendency due to short wave radiation - rswtt(i,j,l) = spval -! GFS does not have temperature tendency due to latent heating from convection - tcucn(i,j,l) = spval - tcucns(i,j,l) = spval -! GFS does not have temperature tendency due to latent heating from grid scale - train(i,j,l) = spval - enddo - enddo - enddo - -! set avrain to 1 - avrain=1.0 - avcnvc=1.0 - theat=6.0 ! just in case GFS decides to output T tendency - -! 10 m u using nemsio - VarName='ugrd' - VcoordName='10 m above gnd' - l=1 - call getnemsandscatter(me,ffile,im,jm,jsta,jsta_2l & - ,jend_2u,MPI_COMM_COMP,icnt,idsp,spval,VarName,VcoordName & - ,l,im,jm,nframe,u10) -! if(debugprint)print*,'sample l',VarName,' = ',1,u10(isa,jsa) - do j=jsta,jend - do i=1,im - u10h(i,j)=u10(i,j) - end do - end do - -! 10 m v using gfsio - VarName='vgrd' - VcoordName='10 m above gnd' - l=1 - call getnemsandscatter(me,ffile,im,jm,jsta,jsta_2l & - ,jend_2u,MPI_COMM_COMP,icnt,idsp,spval,VarName,VcoordName & - ,l,im,jm,nframe,v10) - do j=jsta,jend - do i=1,im - v10h(i,j)=v10(i,j) - end do - end do -! if(debugprint)print*,'sample l',VarName,' = ',1,v10(isa,jsa) - -! vegetation type, it's in GFS surface file, hopefully will merge into gfsio soon - VarName='vgtyp' - VcoordName='sfc' - l=1 - call getnemsandscatter(me,ffile,im,jm,jsta,jsta_2l & - ,jend_2u,MPI_COMM_COMP,icnt,idsp,spval,VarName,VcoordName & - ,l,im,jm,nframe,buf) -! where (buf /= spval) -! ivgtyp=nint(buf) -! elsewhere -! ivgtyp=0 !need to feed reasonable value to crtm -! end where -!$omp parallel do private(i,j) - do j = jsta_2l, jend_2u - do i=1,im - if (buf(i,j) < spval) then - ivgtyp(i,j) = nint(buf(i,j)) - else - ivgtyp(i,j) = 0 - endif - enddo - enddo -! if(debugprint)print*,'sample l',VarName,' = ',1,ivgtyp(isa,jsa) - -! soil type, it's in GFS surface file, hopefully will merge into gfsio soon - VarName='sotyp' - VcoordName='sfc' - l=1 - call getnemsandscatter(me,ffile,im,jm,jsta,jsta_2l & - ,jend_2u,MPI_COMM_COMP,icnt,idsp,spval,VarName,VcoordName & - ,l,im,jm,nframe,buf) -! where (buf /= spval) -! isltyp=nint(buf) -! elsewhere -! isltyp=0 !need to feed reasonable value to crtm -! end where -!$omp parallel do private(i,j) - do j = jsta_2l, jend_2u - do i=1,im - if (buf(i,j) < spval) then - isltyp(i,j) = nint(buf(i,j)) - else - isltyp(i,j) = 0 - endif - enddo - enddo -! if(debugprint)print*,'sample l',VarName,' = ',1,isltyp(isa,jsa) - -!$omp parallel do private(i,j) - do j=jsta_2l,jend_2u - do i=1,im - smstav(i,j) = spval ! GFS does not have soil moisture availability - smstot(i,j) = spval ! GFS does not have total soil moisture - sfcevp(i,j) = spval ! GFS does not have accumulated surface evaporation - sfcexc(i,j) = spval ! GFS does not have surface exchange coefficient - acsnow(i,j) = spval ! GFS does not have averaged accumulated snow - acsnom(i,j) = spval ! GFS does not have snow melt - sst(i,j) = spval ! GFS does not have sst???? - thz0(i,j) = ths(i,j) ! GFS does not have THZ0, use THS to substitute - qz0(i,j) = spval ! GFS does not output humidity at roughness length - uz0(i,j) = spval ! GFS does not output u at roughness length - vz0(i,j) = spval ! GFS does not output humidity at roughness length - enddo - enddo - do l=1,lm -!$omp parallel do private(i,j) - do j=jsta_2l,jend_2u - do i=1,im - EL_PBL(i,j,l) = spval ! GFS does not have mixing length - exch_h(i,j,l) = spval ! GFS does not output exchange coefficient - enddo - enddo - enddo -! if(debugprint)print*,'sample l',VarName,' = ',1,thz0(isa,jsa) - -! retrieve inst convective cloud top, GFS has cloud top pressure instead of index, -! will need to modify CLDRAD.f to use pressure directly instead of index - VarName='pres' - VcoordName='convect-cld top' - l=1 - call getnemsandscatter(me,ffile,im,jm,jsta,jsta_2l & - ,jend_2u,MPI_COMM_COMP,icnt,idsp,spval,VarName,VcoordName & - ,l,im,jm,nframe,ptop) -! if(debugprint)print*,'sample l',VarName,' = ',1,ptop(isa,jsa) - -!$omp parallel do private(i,j) - do j=jsta,jend - do i=1,im - htop(i,j) = spval - if(ptop(i,j) <= 0.0) ptop(i,j) = spval - enddo - enddo - do j=jsta,jend - do i=1,im - if(ptop(i,j) < spval)then - do l=1,lm - if(ptop(i,j) <= pmid(i,j,l))then - htop(i,j) = l -! if(i==ii .and. j==jj)print*,'sample ptop,pmid pmid-1,pint= ', & -! ptop(i,j),pmid(i,j,l),pmid(i,j,l-1),pint(i,j,l),htop(i,j) - exit - end if - end do - end if - end do - end do - -! retrieve inst convective cloud bottom, GFS has cloud top pressure instead of index, -! will need to modify CLDRAD.f to use pressure directly instead of index - VarName='pres' - VcoordName='convect-cld bot' - l=1 - call getnemsandscatter(me,ffile,im,jm,jsta,jsta_2l & - ,jend_2u,MPI_COMM_COMP,icnt,idsp,spval,VarName,VcoordName & - ,l,im,jm,nframe,pbot) -! if(debugprint)print*,'sample l',VarName,VcoordName,' = ',1,pbot(isa,jsa) - -!$omp parallel do private(i,j) - do j=jsta,jend - do i=1,im - hbot(i,j) = spval - if(pbot(i,j) <= 0.0) pbot(i,j) = spval - enddo - enddo - do j=jsta,jend - do i=1,im -! if(.not.lb(i,j))print*,'false bitmask for pbot at ' -! + ,i,j,pbot(i,j) - if(pbot(i,j) < spval)then - do l=lm,1,-1 - if(pbot(i,j) >= pmid(i,j,l)) then - hbot(i,j) = l -! if(i==ii .and. j==jj)print*,'sample pbot,pmid= ', & -! pbot(i,j),pmid(i,j,l),hbot(i,j) - exit - end if - end do - end if - end do - end do - -! retrieve time averaged low cloud top pressure using nemsio - VarName='pres' - VcoordName='low cld top' - l=1 - call getnemsandscatter(me,ffile,im,jm,jsta,jsta_2l & - ,jend_2u,MPI_COMM_COMP,icnt,idsp,spval,VarName,VcoordName & - ,l,im,jm,nframe,ptopl) -! if(debugprint)print*,'sample l',VarName,' = ',1,ptopl(isa,jsa) - -! retrieve time averaged low cloud bottom pressure using nemsio - VarName='pres' - VcoordName='low cld bot' - l=1 - call getnemsandscatter(me,ffile,im,jm,jsta,jsta_2l & - ,jend_2u,MPI_COMM_COMP,icnt,idsp,spval,VarName,VcoordName & - ,l,im,jm,nframe,pbotl) -! if(debugprint)print*,'sample l',VarName,' = ',1,pbotl(isa,jsa) - -! retrieve time averaged low cloud top temperature using nemsio - VarName='tmp' - VcoordName='low cld top' - l=1 - call getnemsandscatter(me,ffile,im,jm,jsta,jsta_2l & - ,jend_2u,MPI_COMM_COMP,icnt,idsp,spval,VarName,VcoordName & - ,l,im,jm,nframe,Ttopl) -! if(debugprint)print*,'sample l',VcoordName,VarName,' = ',1,Ttopl(isa,jsa) - -! retrieve time averaged middle cloud top pressure using nemsio - VarName='pres' - VcoordName='mid cld top' - l=1 - call getnemsandscatter(me,ffile,im,jm,jsta,jsta_2l & - ,jend_2u,MPI_COMM_COMP,icnt,idsp,spval,VarName,VcoordName & - ,l,im,jm,nframe,ptopm) -! if(debugprint)print*,'sample l',VcoordName,VarName,' = ',1,ptopm(isa,jsa) - -! retrieve time averaged middle cloud bottom pressure using nemsio - VarName='pres' - VcoordName='mid cld bot' - l=1 - call getnemsandscatter(me,ffile,im,jm,jsta,jsta_2l & - ,jend_2u,MPI_COMM_COMP,icnt,idsp,spval,VarName,VcoordName & - ,l,im,jm,nframe,pbotm) -! if(debugprint)print*,'sample l',VcoordName,VarName,' = ',1,pbotm(isa,jsa) - -! retrieve time averaged middle cloud top temperature using nemsio - VarName='tmp' - VcoordName='mid cld top' - l=1 - call getnemsandscatter(me,ffile,im,jm,jsta,jsta_2l & - ,jend_2u,MPI_COMM_COMP,icnt,idsp,spval,VarName,VcoordName & - ,l,im,jm,nframe,Ttopm) -! if(debugprint)print*,'sample l',VcoordName,VarName,' = ',1,Ttopm(isa,jsa) - -! retrieve time averaged high cloud top pressure using nemsio ********* - VarName='pres' - VcoordName='high cld top' - l=1 - call getnemsandscatter(me,ffile,im,jm,jsta,jsta_2l & - ,jend_2u,MPI_COMM_COMP,icnt,idsp,spval,VarName,VcoordName & - ,l,im,jm,nframe,ptoph) -! if(debugprint)print*,'sample l',VcoordName,VarName,' = ',1,ptoph(isa,jsa) - -! retrieve time averaged high cloud bottom pressure using nemsio - VarName='pres' - VcoordName='high cld bot' - l=1 - call getnemsandscatter(me,ffile,im,jm,jsta,jsta_2l & - ,jend_2u,MPI_COMM_COMP,icnt,idsp,spval,VarName,VcoordName & - ,l,im,jm,nframe,pboth) -! if(debugprint)print*,'sample l',VcoordName,VarName,' = ',1,pboth(isa,jsa) - -! retrieve time averaged high cloud top temperature using nemsio - VarName='tmp' - VcoordName='high cld top' - l=1 - call getnemsandscatter(me,ffile,im,jm,jsta,jsta_2l & - ,jend_2u,MPI_COMM_COMP,icnt,idsp,spval,VarName,VcoordName & - ,l,im,jm,nframe,Ttoph) -! if(debugprint)print*,'sample l',VcoordName,VarName,' = ',1,Ttoph(isa,jsa) - -! retrieve boundary layer cloud cover using nemsio - VarName='tcdc' - VcoordName='bndary-layer cld' - l=1 - call getnemsandscatter(me,ffile,im,jm,jsta,jsta_2l & - ,jend_2u,MPI_COMM_COMP,icnt,idsp,spval,VarName,VcoordName & - ,l,im,jm,nframe,pblcfr) -! if(debugprint)print*,'sample l',VcoordName,VarName,' = ', 1,pblcfr(isa,jsa) -! where (pblcfr /= spval)pblcfr=pblcfr/100. ! convert to fraction -!$omp parallel do private(i,j) - do j = jsta_2l, jend_2u - do i=1,im - if (pblcfr(i,j) < spval) pblcfr(i,j) = pblcfr(i,j) * 0.01 - enddo - enddo - -! retrieve cloud work function using nemsio - VarName='cwork' - VcoordName='atmos col' - l=1 - call getnemsandscatter(me,ffile,im,jm,jsta,jsta_2l & - ,jend_2u,MPI_COMM_COMP,icnt,idsp,spval,VarName,VcoordName & - ,l,im,jm,nframe,cldwork) -! if(debugprint)print*,'sample l',VcoordName,VarName,' = ', 1,cldwork(isa,jsa) - -! retrieve water runoff using nemsio - VarName='watr' - VcoordName='sfc' - l=1 - call getnemsandscatter(me,ffile,im,jm,jsta,jsta_2l & - ,jend_2u,MPI_COMM_COMP,icnt,idsp,spval,VarName,VcoordName & - ,l,im,jm,nframe,runoff) -! if(debugprint)print*,'sample l',VcoordName,VarName,' = ', 1,runoff(isa,jsa) - -! retrieve shelter max temperature using nemsio - VarName='tmax' - VcoordName='2 m above gnd' - l=1 - call getnemsandscatter(me,ffile,im,jm,jsta,jsta_2l & - ,jend_2u,MPI_COMM_COMP,icnt,idsp,spval,VarName,VcoordName & - ,l,im,jm,nframe,maxtshltr) -! if(debugprint)print*,'sample l',VcoordName,VarName,' = ', 1,maxtshltr(isa,jsa) - -! retrieve shelter max temperature using nemsio - VarName='tmin' - VcoordName='2 m above gnd' - l=1 - call getnemsandscatter(me,ffile,im,jm,jsta,jsta_2l & - ,jend_2u,MPI_COMM_COMP,icnt,idsp,spval,VarName,VcoordName & - ,l,im,jm,nframe,mintshltr) -! if(debugprint)print*,'sample l',VcoordName,VarName,' = ', & -! 1,mintshltr(im/2,(jsta+jend)/2) - -!$omp parallel do private(i,j) - do j=jsta_2l,jend_2u - do i=1,im - MAXRHSHLTR(i,j) = SPVAL - MINRHSHLTR(i,j) = SPVAL - enddo - enddo - -! retrieve ice thickness using nemsio - VarName='icetk' - VcoordName='sfc' - l=1 - call getnemsandscatter(me,ffile,im,jm,jsta,jsta_2l & - ,jend_2u,MPI_COMM_COMP,icnt,idsp,spval,VarName,VcoordName & - ,l,im,jm,nframe,dzice) -! if(debugprint)print*,'sample l',VcoordName,VarName,' = ', 1,dzice(isa,jsa) - -! retrieve wilting point using nemsio - VarName='wilt' - VcoordName='sfc' - l=1 - call getnemsandscatter(me,ffile,im,jm,jsta,jsta_2l & - ,jend_2u,MPI_COMM_COMP,icnt,idsp,spval,VarName,VcoordName & - ,l,im,jm,nframe,smcwlt) -! if(debugprint)print*,'sample l',VcoordName,VarName,' = ', 1,smcwlt(isa,jsa) - -! retrieve sunshine duration using nemsio - VarName='sunsd' - VcoordName='sfc' - l=1 - call getnemsandscatter(me,ffile,im,jm,jsta,jsta_2l & - ,jend_2u,MPI_COMM_COMP,icnt,idsp,spval,VarName,VcoordName & - ,l,im,jm,nframe,suntime) -! if(debugprint)print*,'sample l',VcoordName,VarName,' = ', 1,suntime(isa,jsa) - -! retrieve field capacity using nemsio - VarName='fldcp' - VcoordName='sfc' - l=1 - call getnemsandscatter(me,ffile,im,jm,jsta,jsta_2l & - ,jend_2u,MPI_COMM_COMP,icnt,idsp,spval,VarName,VcoordName & - ,l,im,jm,nframe,fieldcapa) -! if(debugprint)print*,'sample l',VcoordName,VarName,' = ', 1,fieldcapa(isa,jsa) - -! GFS does not have deep convective cloud top and bottom fields - -!$omp parallel do private(i,j) - do j=jsta,jend - do i=1,im - HTOPD(i,j) = SPVAL - HBOTD(i,j) = SPVAL - HTOPS(i,j) = SPVAL - HBOTS(i,j) = SPVAL - CUPPT(i,j) = SPVAL - enddo - enddo - -! -!!!! DONE GETTING -! Will derive isobaric OMEGA from continuity equation later. -! OMGA=SPVAL -! -! -! retrieve d3d fields if it's listed -! ---------------------------------- - if (me == 0) print*,'iostatus for d3d file= ',iostatusD3D - if(iostatusD3D == 0) then ! start reading d3d file -! retrieve longwave tendency using getgb - Index=41 - VarName=avbl(index) - jpds=-1.0 - jgds=-1.0 - jpds(5)=iq(index) - jpds(6)=is(index) - do l=1,lm - jpds(7)=l - ll=lm-l+1 !flip 3d fields to count from top down - call getgbandscatter(me,iunitd3d,im,jm,im_jm,jsta,jsta_2l & - ,jend_2u,MPI_COMM_COMP,icnt,idsp,spval,VarName & - ,jpds,jgds,kpds,rlwtt(1,jsta_2l,ll)) - end do - -! retrieve shortwave tendency using getgb - Index=40 - VarName=avbl(index) - jpds=-1.0 - jgds=-1.0 - jpds(5)=iq(index) - jpds(6)=is(index) - do l=1,lm - jpds(7)=l - ll=lm-l+1 !flip 3d fields to count from top down - call getgbandscatter(me,iunitd3d,im,jm,im_jm,jsta,jsta_2l & - ,jend_2u,MPI_COMM_COMP,icnt,idsp,spval,VarName & - ,jpds,jgds,kpds,rswtt(1,jsta_2l,ll)) - end do - -! retrieve vertical diffusion tendency using getgb - Index=356 - VarName='VDIFF TNDY' - jpds=-1.0 - jgds=-1.0 - jpds(5)=iq(index) - jpds(6)=109 - do l=1,lm - jpds(7)=l - ll=lm-l+1 !flip 3d fields to count from top down - call getgbandscatter(me,iunitd3d,im,jm,im_jm,jsta,jsta_2l & - ,jend_2u,MPI_COMM_COMP,icnt,idsp,spval,VarName & - ,jpds,jgds,kpds,vdifftt(1,jsta_2l,ll)) - end do - -! retrieve deep convective tendency using getgb - Index=79 - VarName=avbl(index) - jpds=-1.0 - jgds=-1.0 - jpds(5)=iq(index) - jpds(6)=is(index) - do l=1,lm - jpds(7)=l - ll=lm-l+1 !flip 3d fields to count from top down - call getgbandscatter(me,iunitd3d,im,jm,im_jm,jsta,jsta_2l & - ,jend_2u,MPI_COMM_COMP,icnt,idsp,spval,VarName & - ,jpds,jgds,kpds,tcucn(1,jsta_2l,ll)) - end do - -! retrieve shallow convective tendency using getgb - Index=358 - VarName='S CNVCT TNDY' - jpds=-1.0 - jgds=-1.0 - jpds(5)=iq(index) - jpds(6)=109 - do l=1,lm - jpds(7)=l - ll=lm-l+1 !flip 3d fields to count from top down - call getgbandscatter(me,iunitd3d,im,jm,im_jm,jsta,jsta_2l & - ,jend_2u,MPI_COMM_COMP,icnt,idsp,spval,VarName & - ,jpds,jgds,kpds,tcucns(1,jsta_2l,ll)) - end do - -! retrieve grid scale latent heat tendency using getgb - Index=78 - VarName=avbl(index) - jpds=-1.0 - jgds=-1.0 - jpds(5)=iq(index) - jpds(6)=is(index) - do l=1,lm - jpds(7)=l - ll=lm-l+1 !flip 3d fields to count from top down - call getgbandscatter(me,iunitd3d,im,jm,im_jm,jsta,jsta_2l & - ,jend_2u,MPI_COMM_COMP,icnt,idsp,spval,VarName & - ,jpds,jgds,kpds,train(1,jsta_2l,ll)) - end do - -! retrieve vertical diffusion moistening using getgb - Index=360 - VarName='Vertical diffusion moistening' - jpds=-1.0 - jgds=-1.0 - jpds(5)=iq(index) - jpds(6)=109 - do l=1,lm - jpds(7)=l - ll=lm-l+1 !flip 3d fields to count from top down - call getgbandscatter(me,iunitd3d,im,jm,im_jm,jsta,jsta_2l & - ,jend_2u,MPI_COMM_COMP,icnt,idsp,spval,VarName & - ,jpds,jgds,kpds,vdiffmois(1,jsta_2l,ll)) - end do - -! retrieve deep convection moistening using getgb - Index=361 - VarName='deep convection moistening' - jpds=-1.0 - jgds=-1.0 - jpds(5)=iq(index) - jpds(6)=109 - do l=1,lm - jpds(7)=l - ll=lm-l+1 !flip 3d fields to count from top down - call getgbandscatter(me,iunitd3d,im,jm,im_jm,jsta,jsta_2l & - ,jend_2u,MPI_COMM_COMP,icnt,idsp,spval,VarName & - ,jpds,jgds,kpds,dconvmois(1,jsta_2l,ll)) - end do - -! retrieve shallow convection moistening using getgb - Index=362 - VarName='shallow convection moistening' - jpds=-1.0 - jgds=-1.0 - jpds(5)=iq(index) - jpds(6)=109 - do l=1,lm - jpds(7)=l - ll=lm-l+1 !flip 3d fields to count from top down - call getgbandscatter(me,iunitd3d,im,jm,im_jm,jsta,jsta_2l & - ,jend_2u,MPI_COMM_COMP,icnt,idsp,spval,VarName & - ,jpds,jgds,kpds,sconvmois(1,jsta_2l,ll)) - end do - -! retrieve non-radiation tendency using getgb - Index=363 - VarName='non-radiation tendency' - jpds=-1.0 - jgds=-1.0 - jpds(5)=iq(index) - jpds(6)=109 - do l=1,lm - jpds(7)=l - ll=lm-l+1 !flip 3d fields to count from top down - call getgbandscatter(me,iunitd3d,im,jm,im_jm,jsta,jsta_2l & - ,jend_2u,MPI_COMM_COMP,icnt,idsp,spval,VarName & - ,jpds,jgds,kpds,nradtt(1,jsta_2l,ll)) - end do - -! retrieve Vertical diffusion of ozone using getgb - Index=364 - VarName='Vertical diffusion of ozone' - jpds=-1.0 - jgds=-1.0 - jpds(5)=iq(index) - jpds(6)=109 - do l=1,lm - jpds(7)=l - ll=lm-l+1 !flip 3d fields to count from top down - call getgbandscatter(me,iunitd3d,im,jm,im_jm,jsta,jsta_2l & - ,jend_2u,MPI_COMM_COMP,icnt,idsp,spval,VarName & - ,jpds,jgds,kpds,o3vdiff(1,jsta_2l,ll)) - end do - -! retrieve ozone production using getgb - Index=365 - VarName='Ozone production' - jpds=-1.0 - jgds=-1.0 - jpds(5)=iq(index) - jpds(6)=109 - do l=1,lm - jpds(7)=l - ll=lm-l+1 !flip 3d fields to count from top down - call getgbandscatter(me,iunitd3d,im,jm,im_jm,jsta,jsta_2l & - ,jend_2u,MPI_COMM_COMP,icnt,idsp,spval,VarName & - ,jpds,jgds,kpds,o3prod(1,jsta_2l,ll)) - end do - -! retrieve ozone tendency using getgb - Index=366 - VarName='Ozone tendency' - jpds=-1.0 - jgds=-1.0 - jpds(5)=iq(index) - jpds(6)=109 - do l=1,lm - jpds(7)=l - ll=lm-l+1 !flip 3d fields to count from top down - call getgbandscatter(me,iunitd3d,im,jm,im_jm,jsta,jsta_2l & - ,jend_2u,MPI_COMM_COMP,icnt,idsp,spval,VarName & - ,jpds,jgds,kpds,o3tndy(1,jsta_2l,ll)) - end do - -! retrieve mass weighted PV using getgb - Index=367 - VarName='Mass weighted PV' - jpds=-1.0 - jgds=-1.0 - jpds(5)=iq(index) - jpds(6)=109 - do l=1,lm - jpds(7)=l - ll=lm-l+1 !flip 3d fields to count from top down - call getgbandscatter(me,iunitd3d,im,jm,im_jm,jsta,jsta_2l & - ,jend_2u,MPI_COMM_COMP,icnt,idsp,spval,VarName & - ,jpds,jgds,kpds,mwpv(1,jsta_2l,ll)) - end do - -! retrieve OZONE TNDY using getgb - Index=368 - VarName='?' - jpds=-1.0 - jgds=-1.0 - jpds(5)=iq(index) - jpds(6)=109 - do l=1,lm - jpds(7)=l - ll=lm-l+1 !flip 3d fields to count from top down - call getgbandscatter(me,iunitd3d,im,jm,im_jm,jsta,jsta_2l & - ,jend_2u,MPI_COMM_COMP,icnt,idsp,spval,VarName & - ,jpds,jgds,kpds,unknown(1,jsta_2l,ll)) - end do - -! retrieve vertical diffusion zonal acceleration - Index=369 - VarName='VDIFF Z ACCE' - jpds=-1.0 - jgds=-1.0 - jpds(5)=iq(index) - jpds(6)=109 - do l=1,lm - jpds(7)=l - ll=lm-l+1 !flip 3d fields to count from top down - call getgbandscatter(me,iunitd3d,im,jm,im_jm,jsta,jsta_2l & - ,jend_2u,MPI_COMM_COMP,icnt,idsp,spval,VarName & - ,jpds,jgds,kpds,vdiffzacce(1,jsta_2l,ll)) - end do - -! retrieve gravity drag zonal acceleration - Index=370 - VarName='G DRAG Z ACCE' - jpds=-1.0 - jgds=-1.0 - jpds(5)=iq(index) - jpds(6)=109 - do l=1,lm - jpds(7)=l - ll=lm-l+1 !flip 3d fields to count from top down - call getgbandscatter(me,iunitd3d,im,jm,im_jm,jsta,jsta_2l & - ,jend_2u,MPI_COMM_COMP,icnt,idsp,spval,VarName & - ,jpds,jgds,kpds,zgdrag(1,jsta_2l,ll)) - end do - -! retrieve convective U momemtum mixing - Index=371 - VarName='CNVCT U M MIX' - jpds=-1.0 - jgds=-1.0 - jpds(5)=iq(index) - jpds(6)=109 - do l=1,lm - jpds(7)=l - ll=lm-l+1 !flip 3d fields to count from top down - call getgbandscatter(me,iunitd3d,im,jm,im_jm,jsta,jsta_2l & - ,jend_2u,MPI_COMM_COMP,icnt,idsp,spval,VarName & - ,jpds,jgds,kpds,cnvctummixing(1,jsta_2l,ll)) - end do - -! retrieve vertical diffusion meridional acceleration - Index=372 - VarName='VDIFF M ACCE' - jpds=-1.0 - jgds=-1.0 - jpds(5)=iq(index) - jpds(6)=109 - do l=1,lm - jpds(7)=l - ll=lm-l+1 !flip 3d fields to count from top down - call getgbandscatter(me,iunitd3d,im,jm,im_jm,jsta,jsta_2l & - ,jend_2u,MPI_COMM_COMP,icnt,idsp,spval,VarName & - ,jpds,jgds,kpds,vdiffmacce(1,jsta_2l,ll)) - end do - -! retrieve gravity drag meridional acceleration - Index=373 - VarName='G DRAG M ACCE' - jpds=-1.0 - jgds=-1.0 - jpds(5)=iq(index) - jpds(6)=109 - do l=1,lm - jpds(7)=l - ll=lm-l+1 !flip 3d fields to count from top down - call getgbandscatter(me,iunitd3d,im,jm,im_jm,jsta,jsta_2l & - ,jend_2u,MPI_COMM_COMP,icnt,idsp,spval,VarName & - ,jpds,jgds,kpds,mgdrag(1,jsta_2l,ll)) - end do - -! retrieve convective V momemtum mixing - Index=374 - VarName='CNVCT V M MIX' - jpds=-1.0 - jgds=-1.0 - jpds(5)=iq(index) - jpds(6)=109 - do l=1,lm - jpds(7)=l - ll=lm-l+1 !flip 3d fields to count from top down - call getgbandscatter(me,iunitd3d,im,jm,im_jm,jsta,jsta_2l & - ,jend_2u,MPI_COMM_COMP,icnt,idsp,spval,VarName & - ,jpds,jgds,kpds,cnvctvmmixing(1,jsta_2l,ll)) - end do - -! retrieve nonconvective cloud fraction - Index=375 - VarName='N CNVCT CLD FRA' - jpds=-1.0 - jgds=-1.0 - jpds(5)=iq(index) - jpds(6)=109 - do l=1,lm - jpds(7)=l - ll=lm-l+1 !flip 3d fields to count from top down - call getgbandscatter(me,iunitd3d,im,jm,im_jm,jsta,jsta_2l & - ,jend_2u,MPI_COMM_COMP,icnt,idsp,spval,VarName & - ,jpds,jgds,kpds,ncnvctcfrac(1,jsta_2l,ll)) - end do - -! retrieve convective upward mass flux - Index=391 - VarName='CNVCT U M FLX' - jpds=-1.0 - jgds=-1.0 - jpds(5)=iq(index) - jpds(6)=109 - do l=1,lm - jpds(7)=l - ll=lm-l+1 !flip 3d fields to count from top down - call getgbandscatter(me,iunitd3d,im,jm,im_jm,jsta,jsta_2l & - ,jend_2u,MPI_COMM_COMP,icnt,idsp,spval,VarName & - ,jpds,jgds,kpds,cnvctumflx(1,jsta_2l,ll)) - end do - -! retrieve convective downward mass flux - Index=392 - VarName='CNVCT D M FLX' - jpds=-1.0 - jgds=-1.0 - jpds(5)=iq(index) - jpds(6)=109 - do l=1,lm - jpds(7)=l - ll=lm-l+1 !flip 3d fields to count from top down - call getgbandscatter(me,iunitd3d,im,jm,im_jm,jsta,jsta_2l & - ,jend_2u,MPI_COMM_COMP,icnt,idsp,spval,VarName & - ,jpds,jgds,kpds,cnvctdmflx(1,jsta_2l,ll)) - end do - -! retrieve nonconvective detraintment flux - Index=393 - VarName='CNVCT DET M FLX' - jpds=-1.0 - jgds=-1.0 - jpds(5)=iq(index) - jpds(6)=109 - do l=1,lm - jpds(7)=l - ll=lm-l+1 !flip 3d fields to count from top down - call getgbandscatter(me,iunitd3d,im,jm,im_jm,jsta,jsta_2l & - ,jend_2u,MPI_COMM_COMP,icnt,idsp,spval,VarName & - ,jpds,jgds,kpds,cnvctdetmflx(1,jsta_2l,ll)) - end do - -! retrieve cnvct gravity drag zonal acceleration - Index=394 - VarName='CNVCT G DRAG Z ACCE' - jpds=-1.0 - jgds=-1.0 - jpds(5)=iq(index) - jpds(6)=109 - do l=1,lm - jpds(7)=l - ll=lm-l+1 !flip 3d fields to count from top down - call getgbandscatter(me,iunitd3d,im,jm,im_jm,jsta,jsta_2l & - ,jend_2u,MPI_COMM_COMP,icnt,idsp,spval,VarName & - ,jpds,jgds,kpds,cnvctzgdrag(1,jsta_2l,ll)) - end do - -! retrieve cnvct gravity drag meridional acceleration - Index=395 - VarName='CNVCT G DRAG M ACCE' - jpds=-1.0 - jgds=-1.0 - jpds(5)=iq(index) - jpds(6)=109 - do l=1,lm - jpds(7)=l - ll=lm-l+1 !flip 3d fields to count from top down - call getgbandscatter(me,iunitd3d,im,jm,im_jm,jsta,jsta_2l & - ,jend_2u,MPI_COMM_COMP,icnt,idsp,spval,VarName & - ,jpds,jgds,kpds,cnvctmgdrag(1,jsta_2l,ll)) - end do - - call baclose(iunitd3d,status) - print*,'done reading D3D fields' - - end if ! end of d3d file read - ! -------------------- - print *,'after d3d files reading,mype=',me - -! Retrieve aer fields if it's listed (GOCART) - print *, 'iostatus for aer file=', iostatusAER - if(iostatusAER == 0) then ! start reading aer file - -! retrieve dust emission fluxes - do K = 1, nbin_du - if ( K == 1) VarName='DUEM001' - if ( K == 2) VarName='DUEM002' - if ( K == 3) VarName='DUEM003' - if ( K == 4) VarName='DUEM004' - if ( K == 5) VarName='DUEM005' - VcoordName='atmos col' - l=1 - call getnemsandscatter(me,rfile,im,jm,jsta,jsta_2l & - ,jend_2u,MPI_COMM_COMP,icnt,idsp,spval,VarName,VcoordName & - ,l,im,jm,nframe,duem(1,jsta_2l,K)) -! if(debugprint)print*,'sample ',VarName,' = ',duem(isa,jsa,k) - enddo - -! retrieve dust sedimentation fluxes - do K = 1, nbin_du - if ( K == 1) VarName='DUSD001' - if ( K == 2) VarName='DUSD002' - if ( K == 3) VarName='DUSD003' - if ( K == 4) VarName='DUSD004' - if ( K == 5) VarName='DUSD005' - VcoordName='atmos col' - l=1 - call getnemsandscatter(me,rfile,im,jm,jsta,jsta_2l & - ,jend_2u,MPI_COMM_COMP,icnt,idsp,spval,VarName,VcoordName & - ,l,im,jm,nframe,dusd(1,jsta_2l,K)) -! if(debugprint)print*,'sample ',VarName,' = ',dusd(isa,jsa,k) - enddo - -! retrieve dust dry deposition fluxes - do K = 1, nbin_du - if ( K == 1) VarName='DUDP001' - if ( K == 2) VarName='DUDP002' - if ( K == 3) VarName='DUDP003' - if ( K == 4) VarName='DUDP004' - if ( K == 5) VarName='DUDP005' - VcoordName='atmos col' - l=1 - call getnemsandscatter(me,rfile,im,jm,jsta,jsta_2l & - ,jend_2u,MPI_COMM_COMP,icnt,idsp,spval,VarName,VcoordName & - ,l,im,jm,nframe,dudp(1,jsta_2l,K)) - print *,'dudp,ck=',maxval(dudp(1:im,jsta:jend,k)), & - minval(dudp(1:im,jsta:jend,k)) -! if(debugprint)print*,'sample ',VarName,' = ',dudp(isa,jsa,k) - enddo - -! retrieve dust wet deposition fluxes - do K = 1, nbin_du - if ( K == 1) VarName='DUWT001' - if ( K == 2) VarName='DUWT002' - if ( K == 3) VarName='DUWT003' - if ( K == 4) VarName='DUWT004' - if ( K == 5) VarName='DUWT005' - VcoordName='atmos col' - l=1 - call getnemsandscatter(me,rfile,im,jm,jsta,jsta_2l & - ,jend_2u,MPI_COMM_COMP,icnt,idsp,spval,VarName,VcoordName & - ,l,im,jm,nframe,duwt(1,jsta_2l,K)) -! if(debugprint)print*,'sample ',VarName,' = ',duwt(isa,jsa,k) - enddo - -! retrieve sfc mass concentration - VarName='DUSMASS' - VcoordName='atmos col' - l=1 - call getnemsandscatter(me,rfile,im,jm,jsta,jsta_2l & - ,jend_2u,MPI_COMM_COMP,icnt,idsp,spval,VarName,VcoordName & - ,l,im,jm,nframe,dusmass) -! if(debugprint)print*,'sample ',VarName,' = ',dusmass(isa,jsa) - -! retrieve col mass density - VarName='DUCMASS' - VcoordName='atmos col' - l=1 - call getnemsandscatter(me,rfile,im,jm,jsta,jsta_2l & - ,jend_2u,MPI_COMM_COMP,icnt,idsp,spval,VarName,VcoordName & - ,l,im,jm,nframe,ducmass) -! if(debugprint)print*,'sample ',VarName,' = ',ducmass(isa,jsa) - -! retrieve sfc mass concentration (pm2.5) - VarName='DUSMASS25' - VcoordName='atmos col' - l=1 - call getnemsandscatter(me,rfile,im,jm,jsta,jsta_2l & - ,jend_2u,MPI_COMM_COMP,icnt,idsp,spval,VarName,VcoordName & - ,l,im,jm,nframe,dusmass25) -! if(debugprint)print*,'sample ',VarName,' = ',dusmass25(isa,jsa) - -! retrieve col mass density (pm2.5) - VarName='DUCMASS25' - VcoordName='atmos col' - l=1 - call getnemsandscatter(me,rfile,im,jm,jsta,jsta_2l & - ,jend_2u,MPI_COMM_COMP,icnt,idsp,spval,VarName,VcoordName & - ,l,im,jm,nframe,ducmass25) -! if(debugprint)print*,'sample ',VarName,' = ',ducmass25(isa,jsa) - - if (me == 0) print *,'after aer files reading,mype=',me - end if ! end of aer file read - -! pos east - call collect_loc(gdlat,dummy) - if(me == 0)then - latstart = nint(dummy(1,1)*gdsdegr) - latlast = nint(dummy(im,jm)*gdsdegr) - print*,'laststart,latlast B bcast= ',latstart,latlast,'gdsdegr=',gdsdegr,& - 'dummy(1,1)=',dummy(1,1),dummy(im,jm),'gdlat=',gdlat(1,1) - end if - call mpi_bcast(latstart,1,MPI_INTEGER,0,mpi_comm_comp,irtn) - call mpi_bcast(latlast,1,MPI_INTEGER,0,mpi_comm_comp,irtn) - write(6,*) 'laststart,latlast,me A calling bcast=',latstart,latlast,me - call collect_loc(gdlon,dummy) - if(me == 0)then - lonstart = nint(dummy(1,1)*gdsdegr) - lonlast = nint(dummy(im,jm)*gdsdegr) - end if - call mpi_bcast(lonstart,1,MPI_INTEGER,0,mpi_comm_comp,irtn) - call mpi_bcast(lonlast, 1,MPI_INTEGER,0,mpi_comm_comp,irtn) - - write(6,*)'lonstart,lonlast A calling bcast=',lonstart,lonlast -! -! ncdump -h -!! -!! - write(6,*) 'filename in INITPOST=', filename,' is' - -! status=nf_open(filename,NF_NOWRITE,ncid) -! write(6,*) 'returned ncid= ', ncid -! status=nf_get_att_real(ncid,varid,'DX',tmp) -! dxval=int(tmp) -! status=nf_get_att_real(ncid,varid,'DY',tmp) -! dyval=int(tmp) -! status=nf_get_att_real(ncid,varid,'CEN_LAT',tmp) -! cenlat=int(1000.*tmp) -! status=nf_get_att_real(ncid,varid,'CEN_LON',tmp) -! cenlon=int(1000.*tmp) -! status=nf_get_att_real(ncid,varid,'TRUELAT1',tmp) -! truelat1=int(1000.*tmp) -! status=nf_get_att_real(ncid,varid,'TRUELAT2',tmp) -! truelat2=int(1000.*tmp) -! status=nf_get_att_real(ncid,varid,'MAP_PROJ',tmp) -! maptype=int(tmp) -! status=nf_close(ncid) - -! dxval=30000. -! dyval=30000. -! -! write(6,*) 'dxval= ', dxval -! write(6,*) 'dyval= ', dyval -! write(6,*) 'cenlat= ', cenlat -! write(6,*) 'cenlon= ', cenlon -! write(6,*) 'truelat1= ', truelat1 -! write(6,*) 'truelat2= ', truelat2 -! write(6,*) 'maptype is ', maptype -! - -! close up shop -! call ext_int_ioclose ( DataHandle, Status ) - -! generate look up table for lifted parcel calculations - - THL = 210. - PLQ = 70000. - pt_TBL = 10000. ! this is for 100 hPa added by Moorthi - - CALL TABLE(PTBL,TTBL,PT_TBL, & - RDQ,RDTH,RDP,RDTHE,PL,THL,QS0,SQS,STHE,THE0) - - CALL TABLEQ(TTBLQ,RDPQ,RDTHEQ,PLQ,THL,STHEQ,THE0Q) - -! -! - IF(ME == 0)THEN - WRITE(6,*)' SPL (POSTED PRESSURE LEVELS) BELOW: ' - WRITE(6,51) (SPL(L),L=1,LSM) - 50 FORMAT(14(F4.1,1X)) - 51 FORMAT(8(F8.1,1X)) - ENDIF -! -! COMPUTE DERIVED TIME STEPPING CONSTANTS. -! -!MEB need to get DT -! DT = 120. !MEB need to get DT -! NPHS = 4 !MEB need to get physics DT -! TPREC=float(ifhr) -!MEB need to get DT - -!how am i going to get this information? -! NPREC = INT(TPREC *TSPH+D50) -! NHEAT = INT(THEAT *TSPH+D50) -! NCLOD = INT(TCLOD *TSPH+D50) -! NRDSW = INT(TRDSW *TSPH+D50) -! NRDLW = INT(TRDLW *TSPH+D50) -! NSRFC = INT(TSRFC *TSPH+D50) -!how am i going to get this information? -! -! IF(ME == 0)THEN -! WRITE(6,*)' ' -! WRITE(6,*)'DERIVED TIME STEPPING CONSTANTS' -! WRITE(6,*)' NPREC,NHEAT,NSRFC : ',NPREC,NHEAT,NSRFC -! WRITE(6,*)' NCLOD,NRDSW,NRDLW : ',NCLOD,NRDSW,NRDLW -! ENDIF -! -! COMPUTE DERIVED MAP OUTPUT CONSTANTS. -!$omp parallel do private(l) - DO L = 1,LSM - ALSL(L) = LOG(SPL(L)) - END DO -! -!HC WRITE IGDS OUT FOR WEIGHTMAKER TO READ IN AS KGDSIN - if(me == 0)then - print*,'writing out igds' - igdout = 110 -! open(igdout,file='griddef.out',form='unformatted' -! + ,status='unknown') - if(maptype == 1)THEN ! Lambert conformal - WRITE(igdout)3 - WRITE(6,*)'igd(1)=',3 - WRITE(igdout)im - WRITE(igdout)jm - WRITE(igdout)LATSTART - WRITE(igdout)LONSTART - WRITE(igdout)8 - WRITE(igdout)CENLON - WRITE(igdout)DXVAL - WRITE(igdout)DYVAL - WRITE(igdout)0 - WRITE(igdout)64 - WRITE(igdout)TRUELAT2 - WRITE(igdout)TRUELAT1 - WRITE(igdout)255 - ELSE IF(MAPTYPE == 2)THEN !Polar stereographic - WRITE(igdout)5 - WRITE(igdout)im - WRITE(igdout)jm - WRITE(igdout)LATSTART - WRITE(igdout)LONSTART - WRITE(igdout)8 - WRITE(igdout)CENLON - WRITE(igdout)DXVAL - WRITE(igdout)DYVAL - WRITE(igdout)0 - WRITE(igdout)64 - WRITE(igdout)TRUELAT2 !Assume projection at +-90 - WRITE(igdout)TRUELAT1 - WRITE(igdout)255 - ! Note: The calculation of the map scale factor at the standard - ! lat/lon and the PSMAPF - ! Get map factor at 60 degrees (N or S) for PS projection, which will - ! be needed to correctly define the DX and DY values in the GRIB GDS - if (TRUELAT1 < 0.) THEN - LAT = -60. - else - LAT = 60. - end if - - CALL MSFPS (LAT,TRUELAT1*0.001,PSMAPF) - - ELSE IF(MAPTYPE == 3) THEN !Mercator - WRITE(igdout)1 - WRITE(igdout)im - WRITE(igdout)jm - WRITE(igdout)LATSTART - WRITE(igdout)LONSTART - WRITE(igdout)8 - WRITE(igdout)latlast - WRITE(igdout)lonlast - WRITE(igdout)TRUELAT1 - WRITE(igdout)0 - WRITE(igdout)64 - WRITE(igdout)DXVAL - WRITE(igdout)DYVAL - WRITE(igdout)255 - ELSE IF(MAPTYPE == 0 .OR. MAPTYPE == 203)THEN !A STAGGERED E-GRID - WRITE(igdout)203 - WRITE(igdout)im - WRITE(igdout)jm - WRITE(igdout)LATSTART - WRITE(igdout)LONSTART - WRITE(igdout)136 - WRITE(igdout)CENLAT - WRITE(igdout)CENLON - WRITE(igdout)DXVAL - WRITE(igdout)DYVAL - WRITE(igdout)64 - WRITE(igdout)0 - WRITE(igdout)0 - WRITE(igdout)0 - END IF - end if -! -! close all files -! - call nemsio_close(nfile,iret=status) - call nemsio_close(ffile,iret=status) - call nemsio_close(rfile,iret=status) -! call baclose(iunit,status) - - RETURN - END - - diff --git a/sorc/ncep_post.fd/INITPOST_GFS_NEMS_MPIIO.f b/sorc/ncep_post.fd/INITPOST_GFS_NEMS_MPIIO.f index 33807f269..2452b2f8d 100644 --- a/sorc/ncep_post.fd/INITPOST_GFS_NEMS_MPIIO.f +++ b/sorc/ncep_post.fd/INITPOST_GFS_NEMS_MPIIO.f @@ -1,51 +1,32 @@ !> @file -! . . . -!> SUBPROGRAM: INITPOST_GFS_NEMS_MPIIO INITIALIZE POST FOR RUN -!! PRGRMMR: Hui-Ya Chuang DATE: 2016-03-04 -!! -!! ABSTRACT: THIS ROUTINE INITIALIZES CONSTANTS AND -!! VARIABLES AT THE START OF GFS MODEL OR POST -!! PROCESSOR RUN. -!! -!! REVISION HISTORY -!! 2011-02-07 Jun Wang add grib2 option -!! 2011-12-14 Sarah Lu add aer option -!! 2012-01-07 Sarah Lu compute air density -!! 2012-12-22 Sarah Lu add aerosol zerout option -!! 2015-03-16 S. Moorthi adding gocart_on option -!! 2015-03-18 S. Moorthi Optimization including threading -!! 2015-08-17 S. Moorthi Add TKE for NEMS/GSM -!! 2016-03-04 H CHUANG Add MPI IO option to read GFS nems output -!! 2016-05-16 S. KAR Add computation of omega -!! 2016-07-21 S. Moorthi Convert input upper air data from reduced to full grid -!! and reduce memory in divergence calculatiom -!! 2016-07-21 Jun Wang change averaged field name with suffix -!! 2019-07-24 Li(Kate) Zhang - Merge and update NGAC UPP into FV3-Chem -!! 2021-03-11 Bo Cui change local arrays to dimension (im,jsta:jend) -!! -!! USAGE: CALL INIT -!! INPUT ARGUMENT LIST: -!! NONE -!! -!! OUTPUT ARGUMENT LIST: -!! NONE -!! -!! OUTPUT FILES: -!! NONE -!! -!! SUBPROGRAMS CALLED: -!! UTILITIES: -!! NONE -!! LIBRARY: -!! COMMON - CTLBLK -!! LOOKUP -!! SOILDEPTH -!! -!! -!! ATTRIBUTES: -!! LANGUAGE: FORTRAN -!! MACHINE : CRAY C-90 -!! +!> @brief initpost_gfs_nems_mpiio() initializes post for run. +!> +!> @author Hui-Ya Chuang @date 2007-03-04 + +!> This routine initializes constants and +!> variables at the start of GFS model or post +!> processor run. +!> +!> ### Program History Log +!> Date | Programmer | Comments +!> -----|------------|--------- +!> 2007-03-04 | Hui-Ya Chuang | Initial +!> 2011-02-07 | Jun Wang | Add grib2 option +!> 2011-12-14 | Sarah Lu | Add aer option +!> 2012-01-07 | Sarah Lu | Compute air density +!> 2012-12-22 | Sarah Lu | Add aerosol zerout option +!> 2015-03-16 | S. Moorthi | Adding gocart_on option +!> 2015-03-18 | S. Moorthi | Optimization including threading +!> 2015-08-17 | S. Moorthi | Add TKE for NEMS/GSM +!> 2016-03-04 | H Chuang | Add MPI IO option to read GFS nems output +!> 2016-05-16 | S. Kar | Add computation of omega +!> 2016-07-21 | S. Moorthi | Convert input upper air data from reduced to full grid and reduce memory in divergence calculatiom +!> 2016-07-21 | Jun Wang | Change averaged field name with suffix +!> 2019-07-24 | Li(Kate) Zhang | Merge and update NGAC UPP into FV3-Chem +!> 2021-03-11 | Bo Cui | Change local arrays to dimension (im,jsta:jend) +!> 2022-09-22 | Li(Kate) Zhang | Remove duplicated initializations which have been done in ALLCOCATE_ALL.f +!> +!> @author Hui-Ya Chuang @date 2007-03-04 SUBROUTINE INITPOST_GFS_NEMS_MPIIO(iostatusAER) @@ -75,8 +56,8 @@ SUBROUTINE INITPOST_GFS_NEMS_MPIIO(iostatusAER) avgedir,avgecan,avgetrans,avgesnow,avgprec_cont,avgcprate_cont, & avisbeamswin,avisdiffswin,airbeamswin,airdiffswin, & alwoutc,alwtoac,aswoutc,aswtoac,alwinc,aswinc,avgpotevp,snoavg, & - dustcb,bccb,occb,sulfcb,sscb,dustallcb,ssallcb,dustpm,sspm,pp25cb,pp10cb, & - ti + dustcb,bccb,occb,sulfcb,sscb,dustallcb,ssallcb,dustpm,dustpm10,sspm,pp25cb, & + pp10cb,maod,ti use soil, only: sldpth, sh2o, smc, stc use masks, only: lmv, lmh, htm, vtm, gdlat, gdlon, dx, dy, hbm2, sm, sice ! use kinds, only: i_llong @@ -95,9 +76,8 @@ SUBROUTINE INITPOST_GFS_NEMS_MPIIO(iostatusAER) iSF_SURFACE_PHYSICS use gridspec_mod, only: maptype, gridtype, latstart, latlast, lonstart, lonlast, cenlon, & dxval, dyval, truelat2, truelat1, psmapf, cenlat - use rqstfld_mod, only: igds, avbl, iq, is use nemsio_module_mpi - use upp_physics, only: fpvsnew + use upp_physics, only: fpvsnew, caldiv, calgradps !- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - implicit none ! @@ -376,7 +356,8 @@ SUBROUTINE INITPOST_GFS_NEMS_MPIIO(iostatusAER) print *,me,'max(gdlat)=', maxval(gdlat), & 'max(gdlon)=', maxval(gdlon) - CALL EXCH(gdlat(1,JSTA_2L)) + CALL EXCH(gdlat) + CALL EXCH(gdlon) print *,'after call EXCH,me=',me !$omp parallel do private(i,j,ip1) @@ -1356,16 +1337,6 @@ SUBROUTINE INITPOST_GFS_NEMS_MPIIO(iostatusAER) ! GFS output dust in nemsio (GOCART) dustcb=0.0 dustallcb=0.0 - do n=1,nbin_du - do l=1,lm -!$omp parallel do private(i,j) - do j=jsta_2l,jend_2u - do i=1,im - dust(i,j,l,n) = spval - enddo - enddo - enddo - enddo ! DUST = SPVAL !VarName='du001' VarName='dust1' @@ -1434,7 +1405,7 @@ SUBROUTINE INITPOST_GFS_NEMS_MPIIO(iostatusAER) dustallcb(1:im,jsta_2l:jend_2u)=dustallcb(1:im,jsta_2l:jend_2u)+ & (dust(1:im,jsta_2l:jend_2u,ll,1)+dust(1:im,jsta_2l:jend_2u,ll,2)+ & - dust(1:im,jsta_2l:jend_2u,ll,3)+0.67*dust(1:im,jsta_2l:jend_2u,ll,4))* & + dust(1:im,jsta_2l:jend_2u,ll,3)+0.74*dust(1:im,jsta_2l:jend_2u,ll,4))* & dpres(1:im,jsta_2l:jend_2u,ll)/grav ! if(debugprint)print*,'sample l ',VarName,' = ',ll,dust(isa,jsa,ll,5) @@ -1443,16 +1414,6 @@ SUBROUTINE INITPOST_GFS_NEMS_MPIIO(iostatusAER) ! GFS output sea salt in nemsio (GOCART) sscb=0.0 ssallcb=0.0 - do n=1,nbin_ss - do l=1,lm -!$omp parallel do private(i,j) - do j=jsta_2l,jend_2u - do i=1,im - salt(i,j,l,n) = spval - enddo - enddo - enddo - enddo ! SALT = SPVAL !VarName='ss001' VarName='seas1' @@ -1491,7 +1452,8 @@ SUBROUTINE INITPOST_GFS_NEMS_MPIIO(iostatusAER) ,salt(1:im,jsta_2l:jend_2u,ll,3)) sscb(1:im,jsta_2l:jend_2u)=sscb(1:im,jsta_2l:jend_2u)+ & - (salt(1:im,jsta_2l:jend_2u,ll,2)+0.75*salt(1:im,jsta_2l:jend_2u,ll,3))* & + (salt(1:im,jsta_2l:jend_2u,ll,1)+ & + salt(1:im,jsta_2l:jend_2u,ll,2)+0.83*salt(1:im,jsta_2l:jend_2u,ll,3))* & dpres(1:im,jsta_2l:jend_2u,ll)/grav ! if(debugprint)print*,'sample l ',VarName,' = ',ll,salt(isa,jsa,ll,3) @@ -1522,7 +1484,7 @@ SUBROUTINE INITPOST_GFS_NEMS_MPIIO(iostatusAER) ssallcb(1:im,jsta_2l:jend_2u)=ssallcb(1:im,jsta_2l:jend_2u)+ & (salt(1:im,jsta_2l:jend_2u,ll,1)+salt(1:im,jsta_2l:jend_2u,ll,2)+ & salt(1:im,jsta_2l:jend_2u,ll,3)+ & - salt(1:im,jsta_2l:jend_2u,ll,4)*0.83)* & + salt(1:im,jsta_2l:jend_2u,ll,4))* & dpres(1:im,jsta_2l:jend_2u,ll)/grav ! if(debugprint)print*,'sample l ',VarName,' = ',ll,salt(isa,jsa,ll,5) @@ -1530,16 +1492,6 @@ SUBROUTINE INITPOST_GFS_NEMS_MPIIO(iostatusAER) ! GFS output black carbon in nemsio (GOCART) bccb=0.0 - do n=1,nbin_bc - do l=1,lm -!$omp parallel do private(i,j) - do j=jsta_2l,jend_2u - do i=1,im - soot(i,j,l,n) = spval - enddo - enddo - enddo - enddo ! SOOT = SPVAL !VarName='bcphobic' VarName='bc1' @@ -1573,16 +1525,6 @@ SUBROUTINE INITPOST_GFS_NEMS_MPIIO(iostatusAER) occb=0.0 ! GFS output organic carbon in nemsio (GOCART) - do n=1,nbin_oc - do l=1,lm -!$omp parallel do private(i,j) - do j=jsta_2l,jend_2u - do i=1,im - waso(i,j,l,n) = spval - enddo - enddo - enddo - enddo ! WASO = SPVAL !VarName='ocphobic' VarName='oc1' @@ -1616,16 +1558,6 @@ SUBROUTINE INITPOST_GFS_NEMS_MPIIO(iostatusAER) ! GFS output sulfate in nemsio (GOCART) sulfcb=0.0 - do n=1,nbin_su - do l=1,lm -!$omp parallel do private(i,j) - do j=jsta_2l,jend_2u - do i=1,im - suso(i,j,l,n) = spval - enddo - enddo - enddo - enddo ! SUSO = SPVAL !VarName='so4' VarName='sulf' @@ -1646,16 +1578,6 @@ SUBROUTINE INITPOST_GFS_NEMS_MPIIO(iostatusAER) ! GFS output pp25 in nemsio (GOCART) pp25cb=0.0 - do n=1,nbin_su - do l=1,lm -!$omp parallel do private(i,j) - do j=jsta_2l,jend_2u - do i=1,im - pp25(i,j,l,n) = spval - enddo - enddo - enddo - enddo ! PP25 = SPVAL !VarName='so4' VarName='pp25' @@ -1674,16 +1596,6 @@ SUBROUTINE INITPOST_GFS_NEMS_MPIIO(iostatusAER) end do ! do loop for l ! GFS output pp10 in nemsio (GOCART) pp10cb=0.0 - do n=1,nbin_su - do l=1,lm -!$omp parallel do private(i,j) - do j=jsta_2l,jend_2u - do i=1,im - pp10(i,j,l,n) = spval - enddo - enddo - enddo - enddo ! PP10 = SPVAL !VarName='so4' VarName='pp10' @@ -1749,17 +1661,18 @@ SUBROUTINE INITPOST_GFS_NEMS_MPIIO(iostatusAER) bccb(i,j) = MAX(bccb(i,j), 0.0) occb(i,j) = MAX(occb(i,j), 0.0) sulfcb(i,j) = MAX(sulfcb(i,j), 0.0) - pp25cb(i,j) = MAX(sulfcb(i,j), 0.0) - pp10cb(i,j) = MAX(sulfcb(i,j), 0.0) + pp25cb(i,j) = MAX(pp25cb(i,j), 0.0) + pp10cb(i,j) = MAX(pp10cb(i,j), 0.0) ! PM10 concentration dusmass(i,j)=(dust(i,j,l,1)+dust(i,j,l,2)+dust(i,j,l,3)+ & 0.74*dust(i,j,l,4)+salt(i,j,l,1)+salt(i,j,l,2)+salt(i,j,l,3)+ & - salt(i,j,l,4) + & - salt(i,j,l,5)+soot(i,j,l,1)+soot(i,j,l,2)+waso(i,j,l,1)+ & + salt(i,j,l,4) + soot(i,j,l,1)+soot(i,j,l,2)+waso(i,j,l,1)+ & waso(i,j,l,2) +suso(i,j,l,1)+pp25(i,j,l,1)+pp10(i,j,l,1)) & *RHOMID(i,j,l) !ug/m3 ! PM25 dust and seasalt dustpm(i,j)=(dust(i,j,l,1)+0.38*dust(i,j,l,2))*RHOMID(i,j,l) !ug/m3 + dustpm10(i,j)=(dust(i,j,l,1)+dust(i,j,l,2)+dust(i,j,l,3)+ & + 0.74*dust(i,j,l,4))*RHOMID(i,j,l) !ug/m3 sspm(i,j)=(salt(i,j,l,1)+salt(i,j,l,2)+ & 0.83*salt(i,j,l,3))*RHOMID(i,j,l) !ug/m3 ! PM25 concentration @@ -3694,43 +3607,6 @@ SUBROUTINE INITPOST_GFS_NEMS_MPIIO(iostatusAER) enddo enddo -! done with flux file, close it for now - call nemsio_close(ffile,iret=status) - deallocate(tmp,recname,reclevtyp,reclev) - - -! Retrieve aer fields if it's listed (GOCART) - print *, 'iostatus for aer file=', iostatusAER - if(iostatusAER == 0) then ! start reading aer file - call nemsio_open(rfile,trim(fileNameAER),'read',mpi_comm_comp & - ,iret=status) - if ( Status /= 0 ) then - print*,'error opening ',fileNameAER, ' Status = ', Status - endif - call nemsio_getfilehead(rfile,iret=status,nrec=nrec) - print*,'nrec for aer file=',nrec - allocate(recname(nrec),reclevtyp(nrec),reclev(nrec)) - call nemsio_getfilehead(rfile,iret=iret,recname=recname & - ,reclevtyp=reclevtyp,reclev=reclev) - if(debugprint)then - if (me == 0)then - do i=1,nrec - print *,'recname,reclevtyp,reclev=',trim(recname(i)),' ', & - trim(reclevtyp(i)),reclev(i) - end do - end if - end if -! start reading nemsio aer files using parallel read - fldsize=(jend-jsta+1)*im - allocate(tmp(fldsize*nrec)) - print*,'allocate tmp successfully' - tmp=0. - call nemsio_denseread(rfile,1,im,jsta,jend,tmp,iret=iret) - if(iret/=0)then - print*,"fail to read aer file using mpi io read, stopping" - stop - end if - ! retrieve dust emission fluxes do K = 1, nbin_du if ( K == 1) VarName='duem001' @@ -3738,7 +3614,7 @@ SUBROUTINE INITPOST_GFS_NEMS_MPIIO(iostatusAER) if ( K == 3) VarName='duem003' if ( K == 4) VarName='duem004' if ( K == 5) VarName='duem005' - VcoordName='atmos col' + VcoordName='atmos sfc' l=1 call assignnemsiovar(im,jsta,jend,jsta_2l,jend_2u & ,l,nrec,fldsize,spval,tmp & @@ -3749,12 +3625,12 @@ SUBROUTINE INITPOST_GFS_NEMS_MPIIO(iostatusAER) ! retrieve dust sedimentation fluxes do K = 1, nbin_du - if ( K == 1) VarName='dust1SD' - if ( K == 2) VarName='dust2SD' - if ( K == 3) VarName='dust3SD' - if ( K == 4) VarName='dust4SD' - if ( K == 5) VarName='dsut5SD' - VcoordName='atmos col' + if ( K == 1) VarName='dust1sd' + if ( K == 2) VarName='dust2sd' + if ( K == 3) VarName='dust3sd' + if ( K == 4) VarName='dust4sd' + if ( K == 5) VarName='dsut5sd' + VcoordName='atmos sfc' l=1 call assignnemsiovar(im,jsta,jend,jsta_2l,jend_2u & ,l,nrec,fldsize,spval,tmp & @@ -3770,7 +3646,7 @@ SUBROUTINE INITPOST_GFS_NEMS_MPIIO(iostatusAER) if ( K == 3) VarName='dust3dp' if ( K == 4) VarName='dust4dp' if ( K == 5) VarName='dust5dp' - VcoordName='atmos col' + VcoordName='atmos sfc' l=1 call assignnemsiovar(im,jsta,jend,jsta_2l,jend_2u & ,l,nrec,fldsize,spval,tmp & @@ -3788,7 +3664,7 @@ SUBROUTINE INITPOST_GFS_NEMS_MPIIO(iostatusAER) if ( K == 3) VarName='dust3wtl' if ( K == 4) VarName='dust4wtl' if ( K == 5) VarName='dust5wtl' - VcoordName='atmos col' + VcoordName='atmos sfc' l=1 call assignnemsiovar(im,jsta,jend,jsta_2l,jend_2u & ,l,nrec,fldsize,spval,tmp & @@ -3802,7 +3678,7 @@ SUBROUTINE INITPOST_GFS_NEMS_MPIIO(iostatusAER) if ( K == 3) VarName='dust3wtc' if ( K == 4) VarName='dust4wtc' if ( K == 5) VarName='dust5wtc' - VcoordName='atmos col' + VcoordName='atmos sfc' l=1 call assignnemsiovar(im,jsta,jend,jsta_2l,jend_2u & ,l,nrec,fldsize,spval,tmp & @@ -3817,13 +3693,29 @@ SUBROUTINE INITPOST_GFS_NEMS_MPIIO(iostatusAER) if ( K == 3) VarName='ssem003' if ( K == 4) VarName='ssem004' if ( K == 5) VarName='ssem005' - VcoordName='atmos col' + VcoordName='atmos sfc' l=1 call assignnemsiovar(im,jsta,jend,jsta_2l,jend_2u & ,l,nrec,fldsize,spval,tmp & ,recname,reclevtyp,reclev,VarName,VcoordName& ,ssem(1,jsta_2l,K)) enddo + +! retrieve seasalt emission fluxes + do K = 1, nbin_ss + if ( K == 1) VarName='seas1sd' + if ( K == 2) VarName='seas2sd' + if ( K == 3) VarName='seas3sd' + if ( K == 4) VarName='seas4sd' + if ( K == 5) VarName='seas5sd' + VcoordName='sfc' + l=1 + call assignnemsiovar(im,jsta,jend,jsta_2l,jend_2u & + ,l,nrec,fldsize,spval,tmp & + ,recname,reclevtyp,reclev,VarName,VcoordName& + ,sssd(1,jsta_2l,K)) + enddo + ! retrieve seasalt dry deposition fluxes do K = 1, nbin_ss @@ -3832,7 +3724,7 @@ SUBROUTINE INITPOST_GFS_NEMS_MPIIO(iostatusAER) if ( K == 3) VarName='seas3dp' if ( K == 4) VarName='seas4dp' if ( K == 5) VarName='seas5dp' - VcoordName='atmos col' + VcoordName='atmos sfc' l=1 call assignnemsiovar(im,jsta,jend,jsta_2l,jend_2u & ,l,nrec,fldsize,spval,tmp & @@ -3847,7 +3739,7 @@ SUBROUTINE INITPOST_GFS_NEMS_MPIIO(iostatusAER) if ( K == 3) VarName='seas3wtl' if ( K == 4) VarName='seas4wtl' if ( K == 5) VarName='seas5wtl' - VcoordName='atmos col' + VcoordName='atmos sfc' l=1 call assignnemsiovar(im,jsta,jend,jsta_2l,jend_2u & ,l,nrec,fldsize,spval,tmp & @@ -3862,7 +3754,7 @@ SUBROUTINE INITPOST_GFS_NEMS_MPIIO(iostatusAER) if ( K == 3) VarName='seas1wtc' if ( K == 4) VarName='seas1wtc' if ( K == 5) VarName='seas1wtc' - VcoordName='atmos col' + VcoordName='atmos sfc' l=1 call assignnemsiovar(im,jsta,jend,jsta_2l,jend_2u & ,l,nrec,fldsize,spval,tmp & @@ -3874,7 +3766,7 @@ SUBROUTINE INITPOST_GFS_NEMS_MPIIO(iostatusAER) do K = 1, nbin_bc if ( K == 1) VarName='bceman' if ( K == 2) VarName='bcembb' - VcoordName='atmos col' + VcoordName='atmos sfc' l=1 call assignnemsiovar(im,jsta,jend,jsta_2l,jend_2u & ,l,nrec,fldsize,spval,tmp & @@ -3886,7 +3778,7 @@ SUBROUTINE INITPOST_GFS_NEMS_MPIIO(iostatusAER) do K = 1, nbin_bc if ( K == 1) VarName='bc1sd' if ( K == 2) VarName='bc2sd' - VcoordName='atmos col' + VcoordName='atmos sfc' l=1 call assignnemsiovar(im,jsta,jend,jsta_2l,jend_2u & ,l,nrec,fldsize,spval,tmp & @@ -3898,7 +3790,7 @@ SUBROUTINE INITPOST_GFS_NEMS_MPIIO(iostatusAER) do K = 1, nbin_bc if ( K == 1) VarName='bc1dp' if ( K == 2) VarName='bc2dp' - VcoordName='atmos col' + VcoordName='atmos sfc' l=1 call assignnemsiovar(im,jsta,jend,jsta_2l,jend_2u & ,l,nrec,fldsize,spval,tmp & @@ -3910,7 +3802,7 @@ SUBROUTINE INITPOST_GFS_NEMS_MPIIO(iostatusAER) do K = 1, nbin_bc if ( K == 1) VarName='bc1wtl' if ( K == 2) VarName='bc2wtl' - VcoordName='atmos col' + VcoordName='atmos sfc' l=1 call assignnemsiovar(im,jsta,jend,jsta_2l,jend_2u & ,l,nrec,fldsize,spval,tmp & @@ -3922,7 +3814,7 @@ SUBROUTINE INITPOST_GFS_NEMS_MPIIO(iostatusAER) do K = 1, nbin_bc if ( K == 1) VarName='bc1wtc' if ( K == 2) VarName='bc2wtc' - VcoordName='atmos col' + VcoordName='atmos sfc' l=1 call assignnemsiovar(im,jsta,jend,jsta_2l,jend_2u & ,l,nrec,fldsize,spval,tmp & @@ -3934,7 +3826,7 @@ SUBROUTINE INITPOST_GFS_NEMS_MPIIO(iostatusAER) do K = 1, nbin_oc if ( K == 1) VarName='oceman' if ( K == 2) VarName='ocembb' - VcoordName='atmos col' + VcoordName='atmos sfc' l=1 call assignnemsiovar(im,jsta,jend,jsta_2l,jend_2u & ,l,nrec,fldsize,spval,tmp & @@ -3946,7 +3838,7 @@ SUBROUTINE INITPOST_GFS_NEMS_MPIIO(iostatusAER) do K = 1, nbin_oc if ( K == 1) VarName='oc1sd' if ( K == 2) VarName='oc2sd' - VcoordName='atmos col' + VcoordName='atmos sfc' l=1 call assignnemsiovar(im,jsta,jend,jsta_2l,jend_2u & ,l,nrec,fldsize,spval,tmp & @@ -3956,9 +3848,9 @@ SUBROUTINE INITPOST_GFS_NEMS_MPIIO(iostatusAER) ! retrieve oc dry deposition fluxes do K = 1, nbin_oc - if ( K == 1) VarName='c1dp' - if ( K == 2) VarName='c2dp' - VcoordName='atmos col' + if ( K == 1) VarName='oc1dp' + if ( K == 2) VarName='oc2dp' + VcoordName='atmos sfc' l=1 call assignnemsiovar(im,jsta,jend,jsta_2l,jend_2u & ,l,nrec,fldsize,spval,tmp & @@ -3970,7 +3862,7 @@ SUBROUTINE INITPOST_GFS_NEMS_MPIIO(iostatusAER) do K = 1, nbin_oc if ( K == 1) VarName='oc1wtl' if ( K == 2) VarName='oc2wtl' - VcoordName='atmos col' + VcoordName='atmos sfc' l=1 call assignnemsiovar(im,jsta,jend,jsta_2l,jend_2u & ,l,nrec,fldsize,spval,tmp & @@ -3982,7 +3874,7 @@ SUBROUTINE INITPOST_GFS_NEMS_MPIIO(iostatusAER) do K = 1, nbin_oc if ( K == 1) VarName='oc1wtc' if ( K == 2) VarName='oc2wtc' - VcoordName='atmos col' + VcoordName='atmos sfc' l=1 call assignnemsiovar(im,jsta,jend,jsta_2l,jend_2u & ,l,nrec,fldsize,spval,tmp & @@ -3990,8 +3882,20 @@ SUBROUTINE INITPOST_GFS_NEMS_MPIIO(iostatusAER) ,ocsv(1,jsta_2l,K)) enddo +! retrieve MIE AOD + VarName='maod' + VcoordName='sfc' + l=1 + call assignnemsiovar(im,jsta,jend,jsta_2l,jend_2u & + ,l,nrec,fldsize,spval,tmp & + ,recname,reclevtyp,reclev,VarName,VcoordName& + ,maod(1,jsta_2l)) +! done with flux file, close it for now + call nemsio_close(ffile,iret=status) + deallocate(tmp,recname,reclevtyp,reclev) + !lzhang !! retrieve sfc mass concentration ! VarName='DUSMASS' @@ -4036,11 +3940,6 @@ SUBROUTINE INITPOST_GFS_NEMS_MPIIO(iostatusAER) ! ,ducmass25) ! if(debugprint)print*,'sample ',VarName,' = ',ducmass25(isa,jsa) - if (me == 0) print *,'after aer files reading,mype=',me - call nemsio_close(rfile,iret=status) - deallocate(tmp,recname,reclevtyp,reclev) - end if ! end of aer file read - ! pos east call collect_loc(gdlat,dummy) if(me == 0)then diff --git a/sorc/ncep_post.fd/INITPOST_GFS_NETCDF.f b/sorc/ncep_post.fd/INITPOST_GFS_NETCDF.f deleted file mode 100644 index 164b91163..000000000 --- a/sorc/ncep_post.fd/INITPOST_GFS_NETCDF.f +++ /dev/null @@ -1,2762 +0,0 @@ -!> @file -! . . . -!> SUBPROGRAM: INITPOST_NETCDF INITIALIZE POST FOR RUN -!! PRGRMMR: Hui-Ya Chuang DATE: 2016-03-04 -!! -!! ABSTRACT: THIS ROUTINE INITIALIZES CONSTANTS AND -!! VARIABLES AT THE START OF GFS MODEL OR POST -!! PROCESSOR RUN. -!! -!! REVISION HISTORY -!! 2017-08-11 H Chuang start from INITPOST_GFS_NEMS_MPIIO.f -!! 2021-03-11 Bo Cui change local arrays to dimension (im,jsta:jend) -!! -!! USAGE: CALL INITPOST_NETCDF -!! INPUT ARGUMENT LIST: -!! NONE -!! -!! OUTPUT ARGUMENT LIST: -!! NONE -!! -!! OUTPUT FILES: -!! NONE -!! -!! SUBPROGRAMS CALLED: -!! UTILITIES: -!! NONE -!! LIBRARY: -!! COMMON - CTLBLK -!! LOOKUP -!! SOILDEPTH -!! -!! -!! ATTRIBUTES: -!! LANGUAGE: FORTRAN -!! MACHINE : CRAY C-90 -!! - SUBROUTINE INITPOST_GFS_NETCDF(ncid3d) - - - use netcdf - use vrbls4d, only: dust, SALT, SUSO, SOOT, WASO, PP25, PP10 - use vrbls3d, only: t, q, uh, vh, pmid, pint, alpint, dpres, zint, zmid, o3, & - qqr, qqs, cwm, qqi, qqw, omga, rhomid, q2, cfr, rlwtt, rswtt, tcucn, & - tcucns, train, el_pbl, exch_h, vdifftt, vdiffmois, dconvmois, nradtt, & - o3vdiff, o3prod, o3tndy, mwpv, unknown, vdiffzacce, zgdrag,cnvctummixing, & - vdiffmacce, mgdrag, cnvctvmmixing, ncnvctcfrac, cnvctumflx, cnvctdmflx, & - cnvctzgdrag, sconvmois, cnvctmgdrag, cnvctdetmflx, duwt, duem, dusd, dudp, & - wh, qqg, ref_10cm - use vrbls2d, only: f, pd, fis, pblh, ustar, z0, ths, qs, twbs, qwbs, avgcprate, & - cprate, avgprec, prec, lspa, sno, si, cldefi, th10, q10, tshltr, pshltr, & - tshltr, albase, avgalbedo, avgtcdc, czen, czmean, mxsnal, radot, sigt4, & - cfrach, cfracl, cfracm, avgcfrach, qshltr, avgcfracl, avgcfracm, cnvcfr, & - islope, cmc, grnflx, vegfrc, acfrcv, ncfrcv, acfrst, ncfrst, ssroff, & - bgroff, rlwin, rlwtoa, cldwork, alwin, alwout, alwtoa, rswin, rswinc, & - rswout, aswin, auvbin, auvbinc, aswout, aswtoa, sfcshx, sfclhx, subshx, & - snopcx, sfcux, sfcvx, sfcuxi, sfcvxi, sfcuvx, gtaux, gtauy, potevp, u10, v10, smstav, & - smstot, ivgtyp, isltyp, sfcevp, sfcexc, acsnow, acsnom, sst, thz0, qz0, & - uz0, vz0, ptop, htop, pbot, hbot, ptopl, pbotl, ttopl, ptopm, pbotm, ttopm, & - ptoph, pboth, pblcfr, ttoph, runoff, maxtshltr, mintshltr, maxrhshltr, & - minrhshltr, dzice, smcwlt, suntime, fieldcapa, htopd, hbotd, htops, hbots, & - cuppt, dusmass, ducmass, dusmass25, ducmass25, aswintoa,rel_vort_maxhy1, & - maxqshltr, minqshltr, acond, sr, u10h, v10h,refd_max, w_up_max, w_dn_max, & - up_heli_max,up_heli_min,up_heli_max03,up_heli_min03,rel_vort_max01,u10max, v10max, & - avgedir,avgecan,avgetrans,avgesnow,avgprec_cont,avgcprate_cont,rel_vort_max, & - avisbeamswin,avisdiffswin,airbeamswin,airdiffswin,refdm10c_max,wspd10max, & - alwoutc,alwtoac,aswoutc,aswtoac,alwinc,aswinc,avgpotevp,snoavg, & - ti,aod550,du_aod550,ss_aod550,su_aod550,oc_aod550,bc_aod550 - use soil, only: sldpth, sh2o, smc, stc - use masks, only: lmv, lmh, htm, vtm, gdlat, gdlon, dx, dy, hbm2, sm, sice - use physcons_post, only: grav => con_g, fv => con_fvirt, rgas => con_rd, & - eps => con_eps, epsm1 => con_epsm1 - use params_mod, only: erad, dtr, tfrz, h1, d608, rd, p1000, capa,pi - use lookup_mod, only: thl, plq, ptbl, ttbl, rdq, rdth, rdp, rdthe, pl, qs0, sqs, sthe, & - ttblq, rdpq, rdtheq, stheq, the0q, the0 - use ctlblk_mod, only: me, mpi_comm_comp, icnt, idsp, jsta, jend, ihrst, idat, sdat, ifhr, & - ifmin, filename, tprec, tclod, trdlw, trdsw, tsrfc, tmaxmin, td3d, restrt, sdat, & - jend_m, imin, imp_physics, dt, spval, pdtop, pt, qmin, nbin_du, nphs, dtq2, ardlw,& - ardsw, asrfc, avrain, avcnvc, theat, gdsdegr, spl, lsm, alsl, im, jm, im_jm, lm, & - jsta_2l, jend_2u, nsoil, lp1, icu_physics, ivegsrc, novegtype, nbin_ss, nbin_bc, & - nbin_oc, nbin_su, gocart_on, pt_tbl, hyb_sigp, filenameFlux, fileNameAER,rdaod - use gridspec_mod, only: maptype, gridtype, latstart, latlast, lonstart, lonlast, cenlon, & - dxval, dyval, truelat2, truelat1, psmapf, cenlat,lonstartv, lonlastv, cenlonv, & - latstartv, latlastv, cenlatv,latstart_r,latlast_r,lonstart_r,lonlast_r - use rqstfld_mod, only: igds, avbl, iq, is - use upp_physics, only: fpvsnew -!- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - implicit none -! -! type(nemsio_gfile) :: nfile,ffile,rfile - integer,parameter :: nvar2d=48 -! character(nemsio_charkind) :: name2d(nvar2d) - integer :: nvar3d, numDims -! character(nemsio_charkind), allocatable :: name3din(:), name3dout(:) -! character(nemsio_charkind) :: varname,levtype -! -! INCLUDE/SET PARAMETERS. -! - INCLUDE "mpif.h" - -! integer,parameter:: MAXPTS=1000000 ! max im*jm points -! -! real,parameter:: con_g =9.80665e+0! gravity -! real,parameter:: con_rv =4.6150e+2 ! gas constant H2O -! real,parameter:: con_rd =2.8705e+2 ! gas constant air -! real,parameter:: con_fvirt =con_rv/con_rd-1. -! real,parameter:: con_eps =con_rd/con_rv -! real,parameter:: con_epsm1 =con_rd/con_rv-1 -! -! This version of INITPOST shows how to initialize, open, read from, and -! close a NetCDF dataset. In order to change it to read an internal (binary) -! dataset, do a global replacement of _ncd_ with _int_. - - real, parameter :: gravi = 1.0/grav - character(len=20) :: VarName, VcoordName - integer :: Status, fldsize, fldst, recn, recn_vvel - character startdate*19,SysDepInfo*80,cgar*1 - character startdate2(19)*4 -! -! NOTE: SOME INTEGER VARIABLES ARE READ INTO DUMMY ( A REAL ). THIS IS OK -! AS LONG AS REALS AND INTEGERS ARE THE SAME SIZE. -! -! ALSO, EXTRACT IS CALLED WITH DUMMY ( A REAL ) EVEN WHEN THE NUMBERS ARE -! INTEGERS - THIS IS OK AS LONG AS INTEGERS AND REALS ARE THE SAME SIZE. - LOGICAL RUNB,SINGLRST,SUBPOST,NEST,HYDRO,IOOMG,IOALL -! logical, parameter :: debugprint = .true., zerout = .false. - logical, parameter :: debugprint = .false., zerout = .false. - logical :: convert_rad_to_deg=.false. - CHARACTER*32 varcharval -! CHARACTER*40 CONTRL,FILALL,FILMST,FILTMP,FILTKE,FILUNV,FILCLD,FILRAD,FILSFC - CHARACTER*4 RESTHR - CHARACTER FNAME*255,ENVAR*50 - INTEGER IDATE(8),JDATE(8),JPDS(200),JGDS(200),KPDS(200),KGDS(200) -! LOGICAL*1 LB(IM,JM) -! -! INCLUDE COMMON BLOCKS. -! -! DECLARE VARIABLES. -! -! REAL fhour -! integer nfhour ! forecast hour from nems io file - integer fhzero !bucket - real dtp !physics time step - REAL RINC(5) - -! REAL FI(IM,JM,2) - REAL DUMMY(IM,JM) - -!jw - integer ii,jj,js,je,iyear,imn,iday,itmp,ioutcount,istatus, & - I,J,L,ll,k,kf,irtn,igdout,n,Index,nframe, & - nframed2,iunitd3d,ierr,idum,iret,nrec,idrt - integer ncid3d,ncid2d,varid,nhcas - real TSTART,TLMH,TSPH,ES,FACT,soilayert,soilayerb,zhour,dum, & - tvll,pmll,tv, tx1, tx2 - - character*20,allocatable :: recname(:) - integer, allocatable :: reclev(:), kmsk(:,:) - real, allocatable :: glat1d(:), glon1d(:), qstl(:) - real, allocatable :: wrk1(:,:), wrk2(:,:) - real, allocatable :: p2d(:,:), t2d(:,:), q2d(:,:), & - qs2d(:,:), cw2d(:,:), cfr2d(:,:) - real(kind=4),allocatable :: vcoord4(:,:,:) - real, dimension(lm+1) :: ak5, bk5 - real*8, allocatable :: pm2d(:,:), pi2d(:,:) - real, allocatable :: tmp(:) - real :: buf(im,jsta_2l:jend_2u) - real :: buf3d(im,jsta_2l:jend_2u,lm) - -! real buf(im,jsta_2l:jend_2u),bufsoil(im,nsoil,jsta_2l:jend_2u) & -! ,buf3d(im,jsta_2l:jend_2u,lm),buf3d2(im,lp1,jsta_2l:jend_2u) - - real LAT - integer isa, jsa, latghf, jtem, idvc, idsl, nvcoord, ip1, nn, npass - - integer, parameter :: npass2=5, npass3=30 - real, parameter :: third=1.0/3.0 - INTEGER, DIMENSION(2) :: ij4min, ij4max - REAL :: omgmin, omgmax - real, allocatable :: d2d(:,:), u2d(:,:), v2d(:,:), omga2d(:,:) - REAL, ALLOCATABLE :: ps2d(:,:),psx2d(:,:),psy2d(:,:) - real, allocatable :: div3d(:,:,:) - real(kind=4),allocatable :: vcrd(:,:) - real :: dum_const - -!*********************************************************************** -! START INIT HERE. -! - WRITE(6,*)'INITPOST: ENTER INITPOST_GFS_NETCDF' - WRITE(6,*)'me=',me, & - 'jsta_2l=',jsta_2l,'jend_2u=', & - jend_2u,'im=',im -! - isa = im / 2 - jsa = (jsta+jend) / 2 - -!$omp parallel do private(i,j) - do j = jsta_2l, jend_2u - do i=1,im - buf(i,j) = spval - enddo - enddo - - Status=nf90_get_att(ncid3d,nf90_global,'ak',ak5) - if(Status/=0)then - print*,'ak not found; assigning missing value' - ak5=spval - else - if(me==0)print*,'ak5= ',ak5 - end if - Status=nf90_get_att(ncid3d,nf90_global,'idrt',idrt) - if(Status/=0)then - print*,'idrt not in netcdf file,reading grid' - Status=nf90_get_att(ncid3d,nf90_global,'grid',varcharval) - if(Status/=0)then - print*,'idrt and grid not in netcdf file, set default to latlon' - idrt=0 - MAPTYPE=0 - else - if(trim(varcharval)=='rotated_latlon')then - MAPTYPE=207 - idrt=207 - Status=nf90_get_att(ncid3d,nf90_global,'cen_lon',dum_const) - if(Status/=0)then - print*,'cen_lon not found; assigning missing value' - cenlon=spval - else - if(dum_const<0.)then - cenlon=nint((dum_const+360.)*gdsdegr) - else - cenlon=dum_const*gdsdegr - end if - end if - Status=nf90_get_att(ncid3d,nf90_global,'cen_lat',dum_const) - if(Status/=0)then - print*,'cen_lat not found; assigning missing value' - cenlat=spval - else - cenlat=dum_const*gdsdegr - end if - - Status=nf90_get_att(ncid3d,nf90_global,'lon1',dum_const) - if(Status/=0)then - print*,'lonstart_r not found; assigning missing value' - lonstart_r=spval - else - if(dum_const<0.)then - lonstart_r=nint((dum_const+360.)*gdsdegr) - else - lonstart_r=dum_const*gdsdegr - end if - end if - Status=nf90_get_att(ncid3d,nf90_global,'lat1',dum_const) - if(Status/=0)then - print*,'latstart_r not found; assigning missing value' - latstart_r=spval - else - latstart_r=dum_const*gdsdegr - end if - - Status=nf90_get_att(ncid3d,nf90_global,'lon2',dum_const) - if(Status/=0)then - print*,'lonlast_r not found; assigning missing value' - lonlast_r=spval - else - if(dum_const<0.)then - lonlast_r=nint((dum_const+360.)*gdsdegr) - else - lonlast_r=dum_const*gdsdegr - end if - end if - Status=nf90_get_att(ncid3d,nf90_global,'lat2',dum_const) - if(Status/=0)then - print*,'latlast_r not found; assigning missing value' - latlast_r=spval - else - latlast_r=dum_const*gdsdegr - end if - - Status=nf90_get_att(ncid3d,nf90_global,'dlon',dum_const) - if(Status/=0)then - print*,'dlmd not found; assigning missing value' - dxval=spval - else - dxval=dum_const*gdsdegr - end if - Status=nf90_get_att(ncid3d,nf90_global,'dlat',dum_const) - if(Status/=0)then - print*,'dphd not found; assigning missing value' - dyval=spval - else - dyval=dum_const*gdsdegr - end if - - print*,'lonstart,latstart,cenlon,cenlat,dyval,dxval', & - lonstart,latstart,cenlon,cenlat,dyval,dxval - -! Jili Dong add support for regular lat lon (2019/03/22) start - else if(trim(varcharval)=='latlon')then - MAPTYPE=0 - idrt=0 - - Status=nf90_get_att(ncid3d,nf90_global,'lon1',dum_const) - if(Status/=0)then - print*,'lonstart not found; assigning missing value' - lonstart=spval - else - if(dum_const<0.)then - lonstart=nint((dum_const+360.)*gdsdegr) - else - lonstart=dum_const*gdsdegr - end if - end if - Status=nf90_get_att(ncid3d,nf90_global,'lat1',dum_const) - if(Status/=0)then - print*,'latstart not found; assigning missing value' - latstart=spval - else - latstart=dum_const*gdsdegr - end if - - Status=nf90_get_att(ncid3d,nf90_global,'lon2',dum_const) - if(Status/=0)then - print*,'lonlast not found; assigning missing value' - lonlast=spval - else - if(dum_const<0.)then - lonlast=nint((dum_const+360.)*gdsdegr) - else - lonlast=dum_const*gdsdegr - end if - end if - Status=nf90_get_att(ncid3d,nf90_global,'lat2',dum_const) - if(Status/=0)then - print*,'latlast not found; assigning missing value' - latlast=spval - else - latlast=dum_const*gdsdegr - end if - - Status=nf90_get_att(ncid3d,nf90_global,'dlon',dum_const) - if(Status/=0)then - print*,'dlmd not found; assigning missing value' - dxval=spval - else - dxval=dum_const*gdsdegr - end if - Status=nf90_get_att(ncid3d,nf90_global,'dlat',dum_const) - if(Status/=0)then - print*,'dphd not found; assigning missing value' - dyval=spval - else - dyval=dum_const*gdsdegr - end if - - print*,'lonstart,latstart,dyval,dxval', & - lonstart,lonlast,latstart,latlast,dyval,dxval - -! Jili Dong add support for regular lat lon (2019/03/22) end - - else if(trim(varcharval)=='gaussian')then - MAPTYPE=4 - idrt=4 - else ! setting default maptype - MAPTYPE=0 - idrt=0 - end if - end if !end reading grid - end if !end reading idrt - if(me==0)print*,'idrt MAPTYPE= ',idrt,MAPTYPE -! STEP 1. READ MODEL OUTPUT FILE -! -! -!*** -! -! LMH and LMV always = LM for sigma-type vert coord - -!$omp parallel do private(i,j) - do j = jsta_2l, jend_2u - do i = 1, im - LMV(i,j) = lm - LMH(i,j) = lm - end do - end do - -! HTM VTM all 1 for sigma-type vert coord - -!$omp parallel do private(i,j,l) - do l = 1, lm - do j = jsta_2l, jend_2u - do i = 1, im - HTM (i,j,l) = 1.0 - VTM (i,j,l) = 1.0 - end do - end do - end do - - Status=nf90_get_att(ncid3d,nf90_global,'nhcas',nhcas) - if(Status/=0)then - print*,'nhcas not in netcdf file, set default to nonhydro' - nhcas=0 - end if - if(me==0)print*,'nhcas= ',nhcas - if (nhcas == 0 ) then !non-hydrostatic case - nrec=15 - allocate (recname(nrec)) - recname=[character(len=20) :: 'ugrd','vgrd','spfh','tmp','o3mr', & - 'presnh','dzdt', 'clwmr','dpres', & - 'delz','icmr','rwmr', & - 'snmr','grle','cld_amt'] - else - nrec=8 - allocate (recname(nrec)) - recname=[character(len=20) :: 'ugrd','vgrd','tmp','spfh','o3mr', & - 'hypres', 'clwmr','dpres'] - endif - -! write(0,*)'nrec=',nrec - !allocate(recname(nrec),reclevtyp(nrec),reclev(nrec)) - allocate(glat1d(jm),glon1d(im)) - allocate(vcoord4(lm+1,3,2)) - -! hardwire idate for now -! idate=(/2017,08,07,00,0,0,0,0/) -! get cycle start time - Status=nf90_inq_varid(ncid3d,'time',varid) - if(Status/=0)then - print*,'time not in netcdf file, stopping' - STOP 1 - else - Status=nf90_get_att(ncid3d,varid,'units',varcharval) - if(Status/=0)then - print*,'time unit not available' - else - print*,'time unit read from netcdf file= ',varcharval -! assume use hours as unit -! idate_loc=index(varcharval,'since')+6 - read(varcharval,101)idate(1),idate(2),idate(3),idate(4),idate(5) - end if -! Status=nf90_inquire_dimension(ncid3d,varid,len=ntimes) -! allocate(fhours(ntimes)) -! status = nf90_inq_varid(ncid3d,varid,fhours) -! Status=nf90_get_var(ncid3d,varid,nfhour,start=(/1/), & -! count=(/1/)) -! if(Status/=0)then -! print*,'forecast hour not in netcdf file, stopping' -! STOP 1 -! end if - end if - 101 format(T13,i4,1x,i2,1x,i2,1x,i2,1x,i2) - print*,'idate= ',idate(1:5) -! get longitude - Status=nf90_inq_varid(ncid3d,'grid_xt',varid) - Status=nf90_inquire_variable(ncid3d,varid,ndims = numDims) - if(debugprint)print*,'number of dim for gdlon ',numDims - if(numDims==1)then - Status=nf90_get_var(ncid3d,varid,glon1d) - do j=jsta,jend - do i=1,im - gdlon(i,j) = real(glon1d(i),kind=4) - end do - end do - lonstart = nint(glon1d(1)*gdsdegr) - lonlast = nint(glon1d(im)*gdsdegr) - dxval = nint(abs(glon1d(1)-glon1d(2))*gdsdegr) - else if(numDims==2)then - Status=nf90_get_var(ncid3d,varid,dummy) - if(maxval(abs(dummy))<2.0*pi)convert_rad_to_deg=.true. - if(convert_rad_to_deg)then - do j=jsta,jend - do i=1,im - gdlon(i,j) = real(dummy(i,j),kind=4)*180./pi - end do - end do - else - do j=jsta,jend - do i=1,im - gdlon(i,j) = real(dummy(i,j),kind=4) - end do - end do - end if - if(convert_rad_to_deg)then - lonstart = nint(dummy(1,1)*gdsdegr)*180./pi - lonlast = nint(dummy(im,jm)*gdsdegr)*180./pi - dxval = nint(abs(dummy(1,1)-dummy(2,1))*gdsdegr)*180./pi - else - lonstart = nint(dummy(1,1)*gdsdegr) - lonlast = nint(dummy(im,jm)*gdsdegr) - dxval = nint(abs(dummy(1,1)-dummy(2,1))*gdsdegr) - end if - -! Jili Dong add support for regular lat lon (2019/03/22) start - if (MAPTYPE == 0) then - if(lonstart<0.)then - lonstart=lonstart+360.*gdsdegr - end if - if(lonlast<0.)then - lonlast=lonlast+360.*gdsdegr - end if - end if -! Jili Dong add support for regular lat lon (2019/03/22) end - - end if - print*,'lonstart,lonlast,dxval ',lonstart,lonlast,dxval -! get latitude - Status=nf90_inq_varid(ncid3d,'grid_yt',varid) - Status=nf90_inquire_variable(ncid3d,varid,ndims = numDims) - if(debugprint)print*,'number of dim for gdlat ',numDims - if(numDims==1)then - Status=nf90_get_var(ncid3d,varid,glat1d) - do j=jsta,jend - do i=1,im - gdlat(i,j) = real(glat1d(j),kind=4) - end do - end do - latstart = nint(glat1d(1)*gdsdegr) - latlast = nint(glat1d(jm)*gdsdegr) - dyval = nint(abs(glat1d(1)-glat1d(2))*gdsdegr) - else if(numDims==2)then - Status=nf90_get_var(ncid3d,varid,dummy) - if(maxval(abs(dummy))1.0e5)print*,'bad dpres ',i,j,dpres(i,j,l) -!make sure delz is positive -! if(dpres(i,j,l)/=spval .and. t(i,j,l)/=spval .and. & -! q(i,j,l)/=spval .and. buf3d(i,j,l)/=spval)then -! pmid(i,j,l)=rgas*dpres(i,j,l)* & -! t(i,j,l)*(q(i,j,l)*fv+1.0)/grav/abs(buf3d(i,j,l)) -! else -! pmid(i,j,l)=spval -! end if -! dong add missing value - if (wh(i,j,l) < spval) then - omga(i,j,l)=(-1.)*wh(i,j,l)*dpres(i,j,l)/abs(buf3d(i,j,l)) - else - omga(i,j,l) = spval - end if -! if(t(i,j,l)>1000.)print*,'bad T ',t(i,j,l) - enddo - enddo - enddo - call read_netcdf_3d_scatter(me,ncid3d,1,im,jm,jsta,jsta_2l & - ,jend_2u,MPI_COMM_COMP,icnt,idsp,spval,recname(11) & - ,lm,qqi(1,jsta_2l,1)) - call read_netcdf_3d_scatter(me,ncid3d,1,im,jm,jsta,jsta_2l & - ,jend_2u,MPI_COMM_COMP,icnt,idsp,spval,recname(12) & - ,lm,qqr(1,jsta_2l,1)) - call read_netcdf_3d_scatter(me,ncid3d,1,im,jm,jsta,jsta_2l & - ,jend_2u,MPI_COMM_COMP,icnt,idsp,spval,recname(13) & - ,lm,qqs(1,jsta_2l,1)) - call read_netcdf_3d_scatter(me,ncid3d,1,im,jm,jsta,jsta_2l & - ,jend_2u,MPI_COMM_COMP,icnt,idsp,spval,recname(14) & - ,lm,qqg(1,jsta_2l,1)) - call read_netcdf_3d_scatter(me,ncid3d,1,im,jm,jsta,jsta_2l & - ,jend_2u,MPI_COMM_COMP,icnt,idsp,spval,recname(15) & - ,lm,cfr(1,jsta_2l,1)) -! calculate CWM from FV3 output - do l=1,lm - do j=jsta,jend - do i=1,im - cwm(i,j,l)=qqg(i,j,l)+qqs(i,j,l)+qqr(i,j,l)+qqi(i,j,l)+qqw(i,j,l) - enddo - enddo - if(debugprint)print*,'sample l,t,q,u,v,w,= ',isa,jsa,l & - ,t(isa,jsa,l),q(isa,jsa,l),uh(isa,jsa,l),vh(isa,jsa,l) & - ,wh(isa,jsa,l) - if(debugprint)print*,'sample l cwm for FV3',l, & - cwm(isa,jsa,l) - end do -! max hourly updraft velocity -! VarName='upvvelmax' -! call read_netcdf_2d_scatter(me,ncid3d,1,im,jm,jsta,jsta_2l & -! ,jend_2u,MPI_COMM_COMP,icnt,idsp,spval,VarName,w_up_max) -! if(debugprint)print*,'sample ',VarName,' = ',w_up_max(isa,jsa) - -! max hourly downdraft velocity -! VarName='dnvvelmax' -! call read_netcdf_2d_scatter(me,ncid3d,1,im,jm,jsta,jsta_2l & -! ,jend_2u,MPI_COMM_COMP,icnt,idsp,spval,VarName,w_dn_max) -! if(debugprint)print*,'sample ',VarName,' = ',w_dn_max(isa,jsa) -! max hourly updraft helicity -! VarName='uhmax25' -! call read_netcdf_2d_scatter(me,ncid3d,1,im,jm,jsta,jsta_2l & -! ,jend_2u,MPI_COMM_COMP,icnt,idsp,spval,VarName,up_heli_max) -! if(debugprint)print*,'sample ',VarName,' = ',up_heli_max(isa,jsa) -! min hourly updraft helicity -! VarName='uhmin25' -! call read_netcdf_2d_scatter(me,ncid3d,1,im,jm,jsta,jsta_2l & -! ,jend_2u,MPI_COMM_COMP,icnt,idsp,spval,VarName,up_heli_min) -! if(debugprint)print*,'sample ',VarName,' = ',up_heli_min(isa,jsa) -! max hourly 0-3km updraft helicity -! VarName='uhmax03' -! call read_netcdf_2d_scatter(me,ncid3d,1,im,jm,jsta,jsta_2l & -! ,jend_2u,MPI_COMM_COMP,icnt,idsp,spval,VarName,up_heli_max03) -! if(debugprint)print*,'sample ',VarName,' = ',up_heli_max03(isa,jsa) -! min hourly 0-3km updraft helicity -! VarName='uhmin03' -! call read_netcdf_2d_scatter(me,ncid3d,1,im,jm,jsta,jsta_2l & -! ,jend_2u,MPI_COMM_COMP,icnt,idsp,spval,VarName,up_heli_min03) -! if(debugprint)print*,'sample ',VarName,' = ',up_heli_min03(isa,jsa) - -! max 0-1km relative vorticity max -! VarName='maxvort01' -! call read_netcdf_2d_scatter(me,ncid3d,1,im,jm,jsta,jsta_2l & -! ,jend_2u,MPI_COMM_COMP,icnt,idsp,spval,VarName,rel_vort_max01) -! if(debugprint)print*,'sample ',VarName,' = ',rel_vort_max01(isa,jsa) -! max 0-2km relative vorticity max -! VarName='maxvort02' -! call read_netcdf_2d_scatter(me,ncid3d,1,im,jm,jsta,jsta_2l & -! ,jend_2u,MPI_COMM_COMP,icnt,idsp,spval,VarName,rel_vort_max) -! if(debugprint)print*,'sample ',VarName,' =',rel_vort_max(isa,jsa) -! max hybrid lev 1 relative vorticity max -! VarName='maxvorthy1' -! call read_netcdf_2d_scatter(me,ncid3d,1,im,jm,jsta,jsta_2l & -! ,jend_2u,MPI_COMM_COMP,icnt,idsp,spval,VarName,rel_vort_maxhy1) -! if(debugprint)print*,'sample ',VarName,' =',rel_vort_maxhy1(isa,jsa) -! surface pressure - VarName='pressfc' - call read_netcdf_2d_scatter(me,ncid3d,1,im,jm,jsta,jsta_2l & - ,jend_2u,MPI_COMM_COMP,icnt,idsp,spval,VarName & - ,pint(1,jsta_2l,lp1)) - do j=jsta,jend - do i=1,im -! if(pint(i,j,lp1)>1.0E6 .or. pint(1,jsta_2l,lp1)<50000.) & -! print*,'bad psfc ',i,j,pint(i,j,lp1) - end do - end do - if(debugprint)print*,'sample ',VarName,' =',pint(isa,jsa,lp1) - - pt = ak5(1) - - do j=jsta,jend - do i=1,im - pint(i,j,1)= pt - end do - end do - - do l=2,lp1 - do j=jsta,jend - do i=1,im - pint(i,j,l) = pint(i,j,l-1) + dpres(i,j,l-1) - enddo - enddo -! if (me == 0) print*,'sample model pint,pmid' ,ii,jj,l & -! ,pint(ii,jj,l),pmid(ii,jj,l) - end do - -!compute pmid from averaged two layer pint - do l=lm,1,-1 - do j=jsta,jend - do i=1,im - pmid(i,j,l) = 0.5*(pint(i,j,l)+pint(i,j,l+1)) - enddo - enddo - enddo - -! do l=lm,1,-1 -! do j=jsta,jend -! do i=1,im -! if(pint(i,j,l+1)/=spval .and. dpres(i,j,l)/=spval)then -! pint(i,j,l)=pint(i,j,l+1)-dpres(i,j,l) -! else -! pint(i,j,l)=spval -! end if -! end do -! end do -! print*,'sample pint= ',isa,jsa,l,pint(isa,jsa,l) -! end do - -! surface height from FV3 -! dong set missing value for zint -! zint=spval - VarName='hgtsfc' - call read_netcdf_2d_scatter(me,ncid3d,1,im,jm,jsta,jsta_2l & - ,jend_2u,MPI_COMM_COMP,icnt,idsp,spval,VarName & - ,zint(1,jsta_2l,lp1)) - if(debugprint)print*,'sample ',VarName,' =',zint(isa,jsa,lp1) - do j=jsta,jend - do i=1,im - if (zint(i,j,lp1) /= spval) then - fis(i,j) = zint(i,j,lp1) * grav - else - fis(i,j) = spval - endif - enddo - enddo - - do l=lm,1,-1 - do j=jsta,jend - do i=1,im - if(zint(i,j,l+1)/=spval .and. buf3d(i,j,l)/=spval)then -!make sure delz is positive - zint(i,j,l)=zint(i,j,l+1)+abs(buf3d(i,j,l)) -! if(zint(i,j,l)>1.0E6)print*,'bad H ',i,j,l,zint(i,j,l) - else - zint(i,j,l)=spval - end if - end do - end do - print*,'sample zint= ',isa,jsa,l,zint(isa,jsa,l) - end do - - do l=lp1,1,-1 - do j=jsta,jend - do i=1,im - alpint(i,j,l)=log(pint(i,j,l)) - end do - end do - end do - - do l=lm,1,-1 - do j=jsta,jend - do i=1,im - if(zint(i,j,l+1)/=spval .and. zint(i,j,l)/=spval & - .and. pmid(i,j,l)/=spval)then - zmid(i,j,l)=zint(i,j,l+1)+(zint(i,j,l)-zint(i,j,l+1))* & - (log(pmid(i,j,l))-alpint(i,j,l+1))/ & - (alpint(i,j,l)-alpint(i,j,l+1)) - if(zmid(i,j,l)>1.0E6)print*,'bad Hmid ',i,j,l,zmid(i,j,l) - else - zmid(i,j,l)=spval - endif - end do - end do - end do - - - pt = ak5(1) - -! else -! do l=2,lm -!!$omp parallel do private(i,j) -! do j=jsta,jend -! do i=1,im -! pint(i,j,l) = pint(i,j,l-1) + dpres(i,j,l-1) -! enddo -! enddo -! if (me == 0) print*,'sample pint,pmid' ,ii,jj,l,pint(ii,jj,l),pmid(ii,jj,l) -! end do -! endif -! - - deallocate (vcoord4) -!+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ - -! - -! done with 3d file, close it for now - Status=nf90_close(ncid3d) - deallocate(recname) - -! open flux file - Status = nf90_open(trim(fileNameFlux),NF90_NOWRITE, ncid2d) - - if ( Status /= 0 ) then - print*,'error opening ',fileNameFlux, ' Status = ', Status - print*,'skip reading of flux file' - endif - -! IVEGSRC=1 for IGBP, 0 for USGS, 2 for UMD - VarName='IVEGSRC' - Status=nf90_get_att(ncid2d,nf90_global,'IVEGSRC',IVEGSRC) - if (Status /= 0) then - print*,VarName,' not found-Assigned 1 for IGBP as default' - IVEGSRC=1 - end if - if (me == 0) print*,'IVEGSRC= ',IVEGSRC - -! set novegtype based on vegetation classification - if(ivegsrc==2)then - novegtype=13 - else if(ivegsrc==1)then - novegtype=20 - else if(ivegsrc==0)then - novegtype=24 - end if - if (me == 0) print*,'novegtype= ',novegtype - - Status=nf90_get_att(ncid2d,nf90_global,'imp_physics',imp_physics) - if (Status /= 0) then - print*,VarName,' not found-Assigned 11 GFDL as default' - imp_physics=11 - end if - if (me == 0) print*,'MP_PHYSICS= ',imp_physics -! - Status=nf90_get_att(ncid2d,nf90_global,'fhzero',fhzero) - if (Status /= 0) then - print*,VarName,' not found-Assigned 3 hours as default' - fhzero=3 - end if - if (me == 0) print*,'fhzero= ',fhzero -! - Status=nf90_get_att(ncid2d,nf90_global,'dtp',dtp) - if (Status /= 0) then - print*,VarName,' not found-Assigned 90s as default' - dtp=90 - end if - if (me == 0) print*,'dtp= ',dtp -! Initializes constants for Ferrier microphysics - if(imp_physics==5 .or. imp_physics==85 .or. imp_physics==95) then - CALL MICROINIT(imp_physics) - end if - -! Chuang: zhour is when GFS empties bucket last so using this -! to compute buket will result in changing bucket with forecast time. -! set default bucket for now - -! call nemsio_getheadvar(ffile,'zhour',zhour,iret=iret) -! if(iret == 0) then -! tprec = 1.0*ifhr-zhour -! tclod = tprec -! trdlw = tprec -! trdsw = tprec -! tsrfc = tprec -! tmaxmin = tprec -! td3d = tprec -! print*,'tprec from flux file header= ',tprec -! else -! print*,'Error reading accumulation bucket from flux file', & -! 'header - will try to read from env variable FHZER' -! CALL GETENV('FHZER',ENVAR) -! read(ENVAR, '(I2)')idum -! tprec = idum*1.0 -! tclod = tprec -! trdlw = tprec -! trdsw = tprec -! tsrfc = tprec -! tmaxmin = tprec -! td3d = tprec -! print*,'TPREC from FHZER= ',tprec -! end if - - - tprec = float(fhzero) - if(ifhr>240)tprec=12. - tclod = tprec - trdlw = tprec - trdsw = tprec - tsrfc = tprec - tmaxmin = tprec - td3d = tprec - print*,'tprec = ',tprec - - -! start reading 2d netcdf file -! surface pressure -! VarName='pressfc' -! call read_netcdf_2d_scatter(me,ncid2d,1,im,jm,jsta,jsta_2l & -! ,jend_2u,MPI_COMM_COMP,icnt,idsp,spval,VarName & -! ,pint(1,jsta_2l,lp1)) -! if(debugprint)print*,'sample ',VarName,' =',pint(isa,jsa,lp1) -! do l=lm,1,-1 -! do j=jsta,jend -! do i=1,im -! pint(i,j,l)=pint(i,j,l+1)-dpres(i,j,l) -! if(pint(i,j,l)>1.0E6)print*,'bad P ',i,j,l,pint(i,j,l) & -! ,pint(i,j,l+1),dpres(i,j,l) -! end do -! end do -! print*,'sample pint= ',isa,jsa,l,pint(isa,jsa,l) -! end do -! surface height from FV3 already multiplied by G -! VarName='orog' -! call read_netcdf_2d_scatter(me,ncid2d,1,im,jm,jsta,jsta_2l & -! ,jend_2u,MPI_COMM_COMP,icnt,idsp,spval,VarName,fis) -! if(debugprint)print*,'sample ',VarName,' =',fis(isa,jsa) -! do j=jsta,jend -! do i=1,im -! if (fis(i,j) /= spval) then -! zint(i,j,lp1) = fis(i,j) -! fis(i,j) = fis(i,j) * grav -! else -! zint(i,j,lp1) = spval -! fis(i,j) = spval -! endif -! enddo -! enddo - -! do l=lm,1,-1 -! do j=jsta,jend -! do i=1,im -! if(zint(i,j,l+1)/=spval .and. buf3d(i,j,l)/=spval)then -! zint(i,j,l)=zint(i,j,l+1)+buf3d(i,j,l) -! if(zint(i,j,l)>1.0E6)print*,'bad H ',i,j,l,zint(i,j,l) -! else -! zint(i,j,l)=spval -! end if -! end do -! end do -! print*,'sample zint= ',isa,jsa,l,zint(isa,jsa,l) -! end do - -! Per communication with Fanglin, P from model in not monotonic -! so compute P using ak and bk for now Sep. 2017 -! do l=lm,1,-1 -!!!$omp parallel do private(i,j) -! do j=jsta,jend -! do i=1,im -! pint(i,j,l) = ak5(lm+2-l) + bk5(lm+2-l)*pint(i,j,lp1) -! pmid(i,j,l) = 0.5*(pint(i,j,l)+pint(i,j,l+1)) ! for now - -! enddo -! enddo -! print*,'sample pint,pmid' & -! ,l,pint(isa,jsa,l),pmid(isa,jsa,l) -! enddo - -! allocate(wrk1(im,jsta:jend),wrk2(im,jsta:jend)) -! do j=jsta,jend -! do i=1,im -! pd(i,j) = spval ! GFS does not output PD -! pint(i,j,1) = PT -! alpint(i,j,lp1) = log(pint(i,j,lp1)) -! wrk1(i,j) = log(PMID(I,J,LM)) -! wrk2(i,j) = T(I,J,LM)*(Q(I,J,LM)*fv+1.0) -! FI(I,J,1) = FIS(I,J) & -! + wrk2(i,j)*rgas*(ALPINT(I,J,Lp1)-wrk1(i,j)) -! ZMID(I,J,LM) = FI(I,J,1) * gravi -! end do -! end do - -! SECOND, INTEGRATE HEIGHT HYDROSTATICLY, GFS integrate height on -! mid-layer - -! DO L=LM,2,-1 ! omit computing model top height -! ll = l - 1 -! do j = jsta, jend -! do i = 1, im -! alpint(i,j,l) = log(pint(i,j,l)) -! tvll = T(I,J,LL)*(Q(I,J,LL)*fv+1.0) -! pmll = log(PMID(I,J,LL)) - -! FI(I,J,2) = FI(I,J,1) + (0.5*rgas)*(wrk2(i,j)+tvll) & -! * (wrk1(i,j)-pmll) -! ZMID(I,J,LL) = FI(I,J,2) * gravi -! -! FACT = (ALPINT(I,J,L)-wrk1(i,j)) / (pmll-wrk1(i,j)) -! ZINT(I,J,L) = ZMID(I,J,L) +(ZMID(I,J,LL)-ZMID(I,J,L))*FACT -! FI(I,J,1) = FI(I,J,2) -! wrk1(i,J) = pmll -! wrk2(i,j) = tvll -! ENDDO -! ENDDO - -! print*,'L ZINT= ',l,zint(isa,jsa,l),ZMID(isa,jsa,l) -! ,'alpint=',ALPINT(ii,jj,l),'pmid=',LOG(PMID(Ii,Jj,L)), & -! 'pmid(l-1)=',LOG(PMID(Ii,Jj,L-1)),'zmd=',ZMID(Ii,Jj,L), & -! 'zmid(l-1)=',ZMID(Ii,Jj,L-1) -! ENDDO -! deallocate(wrk1,wrk2) - -! do l=lp1,2,-1 -! do j=jsta,jend -! do i=1,im -! alpint(i,j,l)=log(pint(i,j,l)) -! end do -! end do -! end do - -! do l=lm,2,-1 -! do j=jsta,jend -! do i=1,im -! zmid(i,j,l)=zint(i,j,l+1)+(zint(i,j,l)-zint(i,j,l+1))* & -! (log(pmid(i,j,l))-alpint(i,j,l+1))/ & -! (alpint(i,j,l)-alpint(i,j,l+1)) -! if(zmid(i,j,l)>1.0E6)print*,'bad Hmid ',i,j,l,zmid(i,j,l) -! end do -! end do -! end do - -! VarName='refl_10cm' -! do l=1,lm -! call read_netcdf_3d_scatter(me,ncid2d,1,im,jm,jsta,jsta_2l & -! ,jend_2u,MPI_COMM_COMP,icnt,idsp,spval,VarName & -! ,lm,REF_10CM(1,jsta_2l,1)) -! if(debugprint)print*,'sample ',VarName,'isa,jsa,l =' & -! ,REF_10CM(isa,jsa,l),isa,jsa,l -! enddo -!Set REF_10CM as missning since gfs doesn't ouput it - do l=1,lm - do j=jsta,jend - do i=1,im - REF_10CM(i,j,l)=spval - enddo - enddo - enddo - - VarName='land' - call read_netcdf_2d_scatter(me,ncid2d,1,im,jm,jsta,jsta_2l & - ,jend_2u,MPI_COMM_COMP,icnt,idsp,spval,VarName,sm) - if(debugprint)print*,'sample ',VarName,' =',sm(im/2,(jsta+jend)/2) - -!$omp parallel do private(i,j) - do j=jsta,jend - do i=1,im - if (sm(i,j) /= spval) sm(i,j) = 1.0 - sm(i,j) - enddo - enddo - -! sea ice mask - - VarName = 'icec' - call read_netcdf_2d_scatter(me,ncid2d,1,im,jm,jsta,jsta_2l & - ,jend_2u,MPI_COMM_COMP,icnt,idsp,spval,VarName,sice) - if(debugprint)print*,'sample ',VarName,' = ',sice(isa,jsa) - -! where(sice /=spval .and. sice >=1.0)sm=0.0 !sea ice has sea -! mask=0 -! GFS flux files have land points with non-zero sea ice, per Iredell, -! these -! points have sea ice changed to zero, i.e., trust land mask more than -! sea ice -! where(sm/=spval .and. sm==0.0)sice=0.0 !specify sea ice=0 at land - -!$omp parallel do private(i,j) - do j=jsta,jend - do i=1,im - if (sm(i,j) /= spval .and. sm(i,j) == 0.0) sice(i,j) = 0.0 - enddo - enddo - - -! PBL height using nemsio - VarName = 'hpbl' - call read_netcdf_2d_scatter(me,ncid2d,1,im,jm,jsta,jsta_2l & - ,jend_2u,MPI_COMM_COMP,icnt,idsp,spval,VarName,pblh) - if(debugprint)print*,'sample ',VarName,' = ',pblh(isa,jsa) - -! frictional velocity using nemsio - VarName='fricv' - call read_netcdf_2d_scatter(me,ncid2d,1,im,jm,jsta,jsta_2l & - ,jend_2u,MPI_COMM_COMP,icnt,idsp,spval,VarName,ustar) -! if(debugprint)print*,'sample ',VarName,' = ',ustar(isa,jsa) - -! roughness length using getgb - VarName='sfcr' - call read_netcdf_2d_scatter(me,ncid2d,1,im,jm,jsta,jsta_2l & - ,jend_2u,MPI_COMM_COMP,icnt,idsp,spval,VarName,z0) -! if(debugprint)print*,'sample ',VarName,' = ',z0(isa,jsa) - -! sfc exchange coeff - VarName='sfexc' - call read_netcdf_2d_scatter(me,ncid2d,1,im,jm,jsta,jsta_2l & - ,jend_2u,MPI_COMM_COMP,icnt,idsp,spval,VarName,SFCEXC) - -! aerodynamic conductance - VarName='acond' - call read_netcdf_2d_scatter(me,ncid2d,1,im,jm,jsta,jsta_2l & - ,jend_2u,MPI_COMM_COMP,icnt,idsp,spval,VarName,acond) - if(debugprint)print*,'sample ',VarName,' = ',acond(isa,jsa) -! mid day avg albedo - VarName='albdo_ave' - call read_netcdf_2d_scatter(me,ncid2d,1,im,jm,jsta,jsta_2l & - ,jend_2u,MPI_COMM_COMP,icnt,idsp,spval,VarName,avgalbedo) - if(debugprint)print*,'sample ',VarName,' = ',avgalbedo(isa,jsa) - do j=jsta,jend - do i=1,im - if (avgalbedo(i,j) /= spval) avgalbedo(i,j) = avgalbedo(i,j) * 0.01 - enddo - enddo - -! surface potential T using getgb - VarName='tmpsfc' - call read_netcdf_2d_scatter(me,ncid2d,1,im,jm,jsta,jsta_2l & - ,jend_2u,MPI_COMM_COMP,icnt,idsp,spval,VarName,ths) - -! where(ths/=spval)ths=ths*(p1000/pint(:,:,lp1))**CAPA ! convert to THS - -!$omp parallel do private(i,j) - do j=jsta,jend - do i=1,im - if (ths(i,j) /= spval) then -! write(0,*)' i=',i,' j=',j,' ths=',ths(i,j),' pint=',pint(i,j,lp1) - ths(i,j) = ths(i,j) * (p1000/pint(i,j,lp1))**capa - endif - QS(i,j) = SPVAL ! GFS does not have surface specific humidity - twbs(i,j) = SPVAL ! GFS does not have inst sensible heat flux - qwbs(i,j) = SPVAL ! GFS does not have inst latent heat flux -!assign sst - if (sm(i,j) /= 0.0) then - sst(i,j) = ths(i,j) * (pint(i,j,lp1)/p1000)**capa - else - sst(i,j) = spval - endif - enddo - enddo - if(debugprint)print*,'sample ',VarName,' = ',ths(isa,jsa) - - -! GFS does not have time step and physics time step, make up ones since they -! are not really used anyway -! NPHS=1. -! DT=90. -! DTQ2 = DT * NPHS !MEB need to get physics DT - DTQ2 = DTP !MEB need to get physics DT - NPHS=1 - DT = DTQ2/NPHS !MEB need to get DT - TSPH = 3600./DT - -! convective precip in m per physics time step using getgb -! read 3 hour bucket - VarName='cpratb_ave' - call read_netcdf_2d_scatter(me,ncid2d,1,im,jm,jsta,jsta_2l & - ,jend_2u,MPI_COMM_COMP,icnt,idsp,spval,VarName,avgcprate) -! where(avgcprate /= spval)avgcprate=avgcprate*dtq2/1000. ! convert to m -!$omp parallel do private(i,j) - do j=jsta,jend - do i=1,im - if (avgcprate(i,j) /= spval) avgcprate(i,j) = avgcprate(i,j) * (dtq2*0.001) - enddo - enddo -! if(debugprint)print*,'sample ',VarName,' = ',avgcprate(isa,jsa) - -! print*,'maxval CPRATE: ', maxval(CPRATE) - -! read continuous bucket - VarName='cprat_ave' - call read_netcdf_2d_scatter(me,ncid2d,1,im,jm,jsta,jsta_2l & - ,jend_2u,MPI_COMM_COMP,icnt,idsp,spval,VarName,avgcprate_cont) -!$omp parallel do private(i,j) - do j=jsta,jend - do i=1,im - if (avgcprate_cont(i,j) /= spval) avgcprate_cont(i,j) = & - avgcprate_cont(i,j) * (dtq2*0.001) - enddo - enddo -! if(debugprint)print*,'sample ',VarName,' = ',avgcprate_cont(isa,jsa) - -! print*,'maxval CPRATE: ', maxval(CPRATE) - -! precip rate in m per physics time step using getgb - VarName='prateb_ave' - call read_netcdf_2d_scatter(me,ncid2d,1,im,jm,jsta,jsta_2l & - ,jend_2u,MPI_COMM_COMP,icnt,idsp,spval,VarName,avgprec) -!$omp parallel do private(i,j) - do j=jsta,jend - do i=1,im - if(avgprec(i,j) /= spval)avgprec(i,j)=avgprec(i,j)*(dtq2*0.001) - enddo - enddo - - if(debugprint)print*,'sample ',VarName,' = ',avgprec(isa,jsa) - -! prec = avgprec !set avg cprate to inst one to derive other fields - - VarName='prate_ave' - call read_netcdf_2d_scatter(me,ncid2d,1,im,jm,jsta,jsta_2l & - ,jend_2u,MPI_COMM_COMP,icnt,idsp,spval,VarName,avgprec_cont) -! where(avgprec /= spval)avgprec=avgprec*dtq2/1000. ! convert to m -!$omp parallel do private(i,j) - do j=jsta,jend - do i=1,im - if (avgprec_cont(i,j) /=spval)avgprec_cont(i,j)=avgprec_cont(i,j) & - * (dtq2*0.001) - enddo - enddo - - if(debugprint)print*,'sample ',VarName,' = ',avgprec_cont(isa,jsa) -! precip rate in m per physics time step - VarName='tprcp' - call read_netcdf_2d_scatter(me,ncid2d,1,im,jm,jsta,jsta_2l & - ,jend_2u,MPI_COMM_COMP,icnt,idsp,spval,VarName,prec) -!$omp parallel do private(i,j) - do j=jsta,jend - do i=1,im - if (prec(i,j) /= spval) prec(i,j)=prec(i,j)* (dtq2*0.001) & - * 1000. / dtp - enddo - enddo - -! convective precip rate in m per physics time step - VarName='cnvprcp' - call read_netcdf_2d_scatter(me,ncid2d,1,im,jm,jsta,jsta_2l & - ,jend_2u,MPI_COMM_COMP,icnt,idsp,spval,VarName,cprate) -!$omp parallel do private(i,j) - do j=jsta,jend - do i=1,im - if (cprate(i,j) /= spval) then - cprate(i,j) = max(0.,cprate(i,j)) * (dtq2*0.001) & - * 1000. / dtp - else - cprate(i,j) = 0. - endif - enddo - enddo - if(debugprint)print*,'sample ',VarName,' = ',cprate(isa,jsa) - -! GFS does not have accumulated total, gridscale, and convective precip, will use inst precip to derive in SURFCE.f - -! max hourly 1-km agl reflectivity -! VarName='refdmax' -! call read_netcdf_2d_scatter(me,ncid2d,1,im,jm,jsta,jsta_2l & -! ,jend_2u,MPI_COMM_COMP,icnt,idsp,spval,VarName,refd_max) -! if(debugprint)print*,'sample ',VarName,' = ',refd_max(isa,jsa) -! max hourly -10C reflectivity -! VarName='refdmax263k' -! call read_netcdf_2d_scatter(me,ncid2d,1,im,jm,jsta,jsta_2l & -! ,jend_2u,MPI_COMM_COMP,icnt,idsp,spval,VarName,refdm10c_max) -! if(debugprint)print*,'sample ',VarName,' = ',refdm10c_max(isa,jsa) - -! max hourly u comp of 10m agl wind -! VarName='u10max' -! call read_netcdf_2d_scatter(me,ncid2d,1,im,jm,jsta,jsta_2l & -! ,jend_2u,MPI_COMM_COMP,icnt,idsp,spval,VarName,u10max) -! if(debugprint)print*,'sample ',VarName,' = ',u10max(isa,jsa) -! max hourly v comp of 10m agl wind -! VarName='v10max' -! call read_netcdf_2d_scatter(me,ncid2d,1,im,jm,jsta,jsta_2l & -! ,jend_2u,MPI_COMM_COMP,icnt,idsp,spval,VarName,v10max) -! if(debugprint)print*,'sample ',VarName,' = ',v10max(isa,jsa) -! max hourly 10m agl wind speed -! VarName='spd10max' -! call read_netcdf_2d_scatter(me,ncid2d,1,im,jm,jsta,jsta_2l & -! ,jend_2u,MPI_COMM_COMP,icnt,idsp,spval,VarName,wspd10max) -! if(debugprint)print*,'sample ',VarName,' = ',wspd10max(isa,jsa) - - -! 2m T using nemsio - VarName='tmp2m' - call read_netcdf_2d_scatter(me,ncid2d,1,im,jm,jsta,jsta_2l & - ,jend_2u,MPI_COMM_COMP,icnt,idsp,spval,VarName,tshltr) - if(debugprint)print*,'sample ',VarName,' = ',tshltr(isa,jsa) - -! inst snow water eqivalent using nemsio - VarName='weasd' - call read_netcdf_2d_scatter(me,ncid2d,1,im,jm,jsta,jsta_2l & - ,jend_2u,MPI_COMM_COMP,icnt,idsp,spval,VarName,sno) -! mask water areas -!$omp parallel do private(i,j) - do j=jsta,jend - do i=1,im - if (sm(i,j) == 1.0 .and. sice(i,j)==0.) sno(i,j) = spval - enddo - enddo - if(debugprint)print*,'sample ',VarName,' = ',sno(isa,jsa) - -! ave snow cover - VarName='snowc_ave' - call read_netcdf_2d_scatter(me,ncid2d,1,im,jm,jsta,jsta_2l & - ,jend_2u,MPI_COMM_COMP,icnt,idsp,spval,VarName,snoavg) -! snow cover is multipled by 100 in SURFCE before writing it out - do j=jsta,jend - do i=1,im - if (sm(i,j)==1.0 .and. sice(i,j)==0.) snoavg(i,j)=spval - if(snoavg(i,j)/=spval)snoavg(i,j)=snoavg(i,j)/100. - end do - end do - -! snow depth in mm using nemsio - VarName='snod' - call read_netcdf_2d_scatter(me,ncid2d,1,im,jm,jsta,jsta_2l & - ,jend_2u,MPI_COMM_COMP,icnt,idsp,spval,VarName,si) -!$omp parallel do private(i,j) - do j=jsta,jend - do i=1,im - if (sm(i,j)==1.0 .and. sice(i,j)==0.) si(i,j)=spval - if (si(i,j) /= spval) si(i,j) = si(i,j) * 1000.0 - CLDEFI(i,j) = SPVAL ! GFS does not have convective cloud efficiency - lspa(i,j) = spval ! GFS does not have similated precip - TH10(i,j) = SPVAL ! GFS does not have 10 m theta - TH10(i,j) = SPVAL ! GFS does not have 10 m theta - Q10(i,j) = SPVAL ! GFS does not have 10 m humidity - ALBASE(i,j) = SPVAL ! GFS does not have snow free albedo - enddo - enddo - if(debugprint)print*,'sample ',VarName,' = ',si(isa,jsa) - -! 2m T using nemsio - VarName='tmp2m' - call read_netcdf_2d_scatter(me,ncid2d,1,im,jm,jsta,jsta_2l & - ,jend_2u,MPI_COMM_COMP,icnt,idsp,spval,VarName,tshltr) - if(debugprint)print*,'sample ',VarName,' = ',tshltr(isa,jsa) - -! GFS does not have 2m pres, estimate it, also convert t to theta - Do j=jsta,jend - Do i=1,im - PSHLTR(I,J)=pint(I,J,lm+1)*EXP(-0.068283/tshltr(i,j)) - tshltr(i,j)= tshltr(i,j)*(p1000/PSHLTR(I,J))**CAPA ! convert to theta -! if (j == jm/2 .and. mod(i,50) == 0) -! + print*,'sample 2m T and P after scatter= ' -! + ,i,j,tshltr(i,j),pshltr(i,j) - end do - end do - -! 2m specific humidity using nemsio - VarName='spfh2m' - call read_netcdf_2d_scatter(me,ncid2d,1,im,jm,jsta,jsta_2l & - ,jend_2u,MPI_COMM_COMP,icnt,idsp,spval,VarName,qshltr) - if(debugprint)print*,'sample ',VarName,' = ',qshltr(isa,jsa) - -! mid day avg albedo in fraction using nemsio -! VarName='albdosfc' -! call read_netcdf_2d_scatter(me,ncid2d,1,im,jm,jsta,jsta_2l & -! ,jend_2u,MPI_COMM_COMP,icnt,idsp,spval,VarName,avgalbedo) -!! where(avgalbedo /= spval)avgalbedo=avgalbedo/100. ! convert to fraction -!!$omp parallel do private(i,j) -! do j=jsta,jend -! do i=1,im -! if (avgalbedo(i,j) /= spval) avgalbedo(i,j) = avgalbedo(i,j) * 0.01 -! enddo -! enddo -! if(debugprint)print*,'sample ',VarName,' = ',avgalbedo(isa,jsa) - -! time averaged column cloud fractionusing nemsio - VarName='tcdc_aveclm' - call read_netcdf_2d_scatter(me,ncid2d,1,im,jm,jsta,jsta_2l & - ,jend_2u,MPI_COMM_COMP,icnt,idsp,spval,VarName,avgtcdc) -! where(avgtcdc /= spval)avgtcdc=avgtcdc/100. ! convert to fraction -!$omp parallel do private(i,j) - do j=jsta,jend - do i=1,im - if (avgtcdc(i,j) /= spval) avgtcdc(i,j) = avgtcdc(i,j) * 0.01 - enddo - enddo - if(debugprint)print*,'sample ',VarName,' = ',avgtcdc(isa,jsa) - -! GFS probably does not use zenith angle -!$omp parallel do private(i,j) - do j=jsta_2l,jend_2u - do i=1,im - Czen(i,j) = spval - CZMEAN(i,j) = SPVAL - enddo - enddo - -! maximum snow albedo in fraction using nemsio - VarName='snoalb' - call read_netcdf_2d_scatter(me,ncid2d,1,im,jm,jsta,jsta_2l & - ,jend_2u,MPI_COMM_COMP,icnt,idsp,spval,VarName,mxsnal) -! where(mxsnal /= spval)mxsnal=mxsnal/100. ! convert to fraction -!$omp parallel do private(i,j) - do j=jsta,jend - do i=1,im - if (mxsnal(i,j) /= spval) mxsnal(i,j) = mxsnal(i,j) * 0.01 - enddo - enddo -! if(debugprint)print*,'sample ',VarName,' = ',mxsnal(isa,jsa) - -! GFS probably does not use sigt4, set it to sig*t^4 -!$omp parallel do private(i,j,tlmh) - Do j=jsta,jend - Do i=1,im - TLMH = T(I,J,LM) * T(I,J,LM) - Sigt4(i,j) = 5.67E-8 * TLMH * TLMH - End do - End do - -! TG is not used, skip it for now - -! GFS does not have inst cloud fraction for high, middle, and low cloud -!$omp parallel do private(i,j) - do j=jsta_2l,jend_2u - do i=1,im - cfrach(i,j) = spval - cfracl(i,j) = spval - cfracm(i,j) = spval - enddo - enddo - -! ave high cloud fraction using nemsio - VarName='tcdc_avehcl' - call read_netcdf_2d_scatter(me,ncid2d,1,im,jm,jsta,jsta_2l & - ,jend_2u,MPI_COMM_COMP,icnt,idsp,spval,VarName,avgcfrach) -! where(avgcfrach /= spval)avgcfrach=avgcfrach/100. ! convert to fraction -!$omp parallel do private(i,j) - do j=jsta,jend - do i=1,im - if (avgcfrach(i,j) /= spval) avgcfrach(i,j) = avgcfrach(i,j) * 0.01 - enddo - enddo - if(debugprint)print*,'sample ',VarName,' = ',avgcfrach(isa,jsa) - -! ave low cloud fraction using nemsio - VarName='tcdc_avelcl' - call read_netcdf_2d_scatter(me,ncid2d,1,im,jm,jsta,jsta_2l & - ,jend_2u,MPI_COMM_COMP,icnt,idsp,spval,VarName,avgcfracl) -! where(avgcfracl /= spval)avgcfracl=avgcfracl/100. ! convert to fraction -!$omp parallel do private(i,j) - do j=jsta,jend - do i=1,im - if (avgcfracl(i,j) /= spval) avgcfracl(i,j) = avgcfracl(i,j) * 0.01 - enddo - enddo - if(debugprint)print*,'sample ',VarName,' = ',avgcfracl(isa,jsa) - -! ave middle cloud fraction using nemsio - VarName='tcdc_avemcl' - call read_netcdf_2d_scatter(me,ncid2d,1,im,jm,jsta,jsta_2l & - ,jend_2u,MPI_COMM_COMP,icnt,idsp,spval,VarName,avgcfracm) -! where(avgcfracm /= spval)avgcfracm=avgcfracm/100. ! convert to fraction -!$omp parallel do private(i,j) - do j=jsta,jend - do i=1,im - if (avgcfracm(i,j) /= spval) avgcfracm(i,j) = avgcfracm(i,j) * 0.01 - enddo - enddo - if(debugprint)print*,'sample ',VarName,' = ',avgcfracm(isa,jsa) - -! inst convective cloud fraction using nemsio - VarName='tcdccnvcl' - call read_netcdf_2d_scatter(me,ncid2d,1,im,jm,jsta,jsta_2l & - ,jend_2u,MPI_COMM_COMP,icnt,idsp,spval,VarName,cnvcfr) -! where(cnvcfr /= spval)cnvcfr=cnvcfr/100. ! convert to fraction -!$omp parallel do private(i,j) - do j=jsta,jend - do i=1,im - if (cnvcfr(i,j) /= spval) cnvcfr (i,j)= cnvcfr(i,j) * 0.01 - enddo - enddo -! if(debugprint)print*,'sample ',VarName,' = ',cnvcfr(isa,jsa) - -! slope type using nemsio - VarName='sltyp' - call read_netcdf_2d_scatter(me,ncid2d,1,im,jm,jsta,jsta_2l & - ,jend_2u,MPI_COMM_COMP,icnt,idsp,spval,VarName,buf) -!$omp parallel do private(i,j) - do j = jsta_2l, jend_2u - do i=1,im - if (buf(i,j) < spval) then - islope(i,j) = nint(buf(i,j)) - else - islope(i,j) = 0 - endif - enddo - enddo -! if(debugprint)print*,'sample ',VarName,' = ',islope(isa,jsa) - -! plant canopy sfc wtr in m - VarName='cnwat' - call read_netcdf_2d_scatter(me,ncid2d,1,im,jm,jsta,jsta_2l & - ,jend_2u,MPI_COMM_COMP,icnt,idsp,spval,VarName,cmc) -!$omp parallel do private(i,j) - do j=jsta,jend - do i=1,im - if (cmc(i,j) /= spval) cmc(i,j) = cmc(i,j) * 0.001 - if (sm(i,j) /= 0.0) cmc(i,j) = spval - enddo - enddo -! if(debugprint)print*,'sample ',VarName,' = ',cmc(isa,jsa) - -!$omp parallel do private(i,j) - do j=jsta_2l,jend_2u - do i=1,im - grnflx(i,j) = spval ! GFS does not have inst ground heat flux - enddo - enddo - -! frozen precip fraction using nemsio - VarName='cpofp' - call read_netcdf_2d_scatter(me,ncid2d,1,im,jm,jsta,jsta_2l & - ,jend_2u,MPI_COMM_COMP,icnt,idsp,spval,VarName,sr) -!$omp parallel do private(i,j) - do j=jsta,jend - do i=1,im - if(sr(i,j) /= spval) then -!set range within (0,1) - sr(i,j)=min(1.,max(0.,sr(i,j))) - endif - enddo - enddo - -! sea ice skin temperature - VarName='tisfc' - call read_netcdf_2d_scatter(me,ncid2d,1,im,jm,jsta,jsta_2l & - ,jend_2u,MPI_COMM_COMP,icnt,idsp,spval,VarName,ti) -!$omp parallel do private(i,j) - do j=jsta,jend - do i=1,im - if (sice(i,j) == spval .or. sice(i,j) == 0.) ti(i,j)=spval - enddo - enddo - -! vegetation fraction in fraction. using nemsio - VarName='veg' - call read_netcdf_2d_scatter(me,ncid2d,1,im,jm,jsta,jsta_2l & - ,jend_2u,MPI_COMM_COMP,icnt,idsp,spval,VarName,vegfrc) -!$omp parallel do private(i,j) - do j=jsta,jend - do i=1,im - if (vegfrc(i,j) /= spval) then - vegfrc(i,j) = vegfrc(i,j) * 0.01 - else - vegfrc(i,j) = 0.0 - endif - enddo - enddo -! mask water areas -!$omp parallel do private(i,j) - do j=jsta,jend - do i=1,im - if (sm(i,j) /= 0.0) vegfrc(i,j) = spval - enddo - enddo -! if(debugprint)print*,'sample ',VarName,' = ',vegfrc(isa,jsa) - -! GFS doesn not yet output soil layer thickness, assign SLDPTH to be the same as nam - - SLDPTH(1) = 0.10 - SLDPTH(2) = 0.3 - SLDPTH(3) = 0.6 - SLDPTH(4) = 1.0 - -! liquid volumetric soil mpisture in fraction using nemsio - VarName='soill1' - call read_netcdf_2d_scatter(me,ncid2d,1,im,jm,jsta,jsta_2l & - ,jend_2u,MPI_COMM_COMP,icnt,idsp,spval,VarName,sh2o(1,jsta_2l,1)) -! mask water areas -!$omp parallel do private(i,j) - do j=jsta,jend - do i=1,im - if (sm(i,j) /= 0.0) sh2o(i,j,1) = spval - enddo - enddo - if(debugprint)print*,'sample l',VarName,' = ',1,sh2o(isa,jsa,1) - - VarName='soill2' - call read_netcdf_2d_scatter(me,ncid2d,1,im,jm,jsta,jsta_2l & - ,jend_2u,MPI_COMM_COMP,icnt,idsp,spval,VarName,sh2o(1,jsta_2l,2)) -! mask water areas -!$omp parallel do private(i,j) - do j=jsta,jend - do i=1,im - if (sm(i,j) /= 0.0) sh2o(i,j,2) = spval - enddo - enddo - if(debugprint)print*,'sample l',VarName,' = ',1,sh2o(isa,jsa,2) - - VarName='soill3' - call read_netcdf_2d_scatter(me,ncid2d,1,im,jm,jsta,jsta_2l & - ,jend_2u,MPI_COMM_COMP,icnt,idsp,spval,VarName,sh2o(1,jsta_2l,3)) -! mask water areas -!$omp parallel do private(i,j) - do j=jsta,jend - do i=1,im - if (sm(i,j) /= 0.0) sh2o(i,j,3) = spval - enddo - enddo - if(debugprint)print*,'sample l',VarName,' = ',1,sh2o(isa,jsa,3) - - VarName='soill4' - call read_netcdf_2d_scatter(me,ncid2d,1,im,jm,jsta,jsta_2l & - ,jend_2u,MPI_COMM_COMP,icnt,idsp,spval,VarName,sh2o(1,jsta_2l,4)) -! mask water areas -!$omp parallel do private(i,j) - do j=jsta,jend - do i=1,im - if (sm(i,j) /= 0.0) sh2o(i,j,4) = spval - enddo - enddo - if(debugprint)print*,'sample l',VarName,' = ',1,sh2o(isa,jsa,4) - -! volumetric soil moisture using nemsio - VarName='soilw1' - call read_netcdf_2d_scatter(me,ncid2d,1,im,jm,jsta,jsta_2l & - ,jend_2u,MPI_COMM_COMP,icnt,idsp,spval,VarName,smc(1,jsta_2l,1)) -! mask water areas -!$omp parallel do private(i,j) - do j=jsta,jend - do i=1,im - if (sm(i,j) /= 0.0) smc(i,j,1) = spval - enddo - enddo - if(debugprint)print*,'sample l',VarName,' = ',1,smc(isa,jsa,1) - - VarName='soilw2' - call read_netcdf_2d_scatter(me,ncid2d,1,im,jm,jsta,jsta_2l & - ,jend_2u,MPI_COMM_COMP,icnt,idsp,spval,VarName,smc(1,jsta_2l,2)) -! mask water areas -!$omp parallel do private(i,j) - do j=jsta,jend - do i=1,im - if (sm(i,j) /= 0.0) smc(i,j,2) = spval - enddo - enddo - if(debugprint)print*,'sample l',VarName,' = ',1,smc(isa,jsa,2) - - VarName='soilw3' - call read_netcdf_2d_scatter(me,ncid2d,1,im,jm,jsta,jsta_2l & - ,jend_2u,MPI_COMM_COMP,icnt,idsp,spval,VarName,smc(1,jsta_2l,3)) -! mask water areas -!$omp parallel do private(i,j) - do j=jsta,jend - do i=1,im - if (sm(i,j) /= 0.0) smc(i,j,3) = spval - enddo - enddo - if(debugprint)print*,'sample l',VarName,' = ',1,smc(isa,jsa,3) - - VarName='soilw4' - call read_netcdf_2d_scatter(me,ncid2d,1,im,jm,jsta,jsta_2l & - ,jend_2u,MPI_COMM_COMP,icnt,idsp,spval,VarName,smc(1,jsta_2l,4)) -! mask water areas -!$omp parallel do private(i,j) - do j=jsta,jend - do i=1,im - if (sm(i,j) /= 0.0) smc(i,j,4) = spval - enddo - enddo - if(debugprint)print*,'sample l',VarName,' = ',1,smc(isa,jsa,4) - -! soil temperature using nemsio - VarName='soilt1' - call read_netcdf_2d_scatter(me,ncid2d,1,im,jm,jsta,jsta_2l & - ,jend_2u,MPI_COMM_COMP,icnt,idsp,spval,VarName,stc(1,jsta_2l,1)) -! mask open water areas, combine with sea ice tmp -!$omp parallel do private(i,j) - do j=jsta,jend - do i=1,im - if (sm(i,j) == 1.0 .and. sice(i,j) ==0.) stc(i,j,1) = spval - !if (sm(i,j) /= 0.0) stc(i,j,1) = spval - enddo - enddo - if(debugprint)print*,'sample l','stc',' = ',1,stc(isa,jsa,1) - - VarName='soilt2' - call read_netcdf_2d_scatter(me,ncid2d,1,im,jm,jsta,jsta_2l & - ,jend_2u,MPI_COMM_COMP,icnt,idsp,spval,VarName,stc(1,jsta_2l,2)) -! mask open water areas, combine with sea ice tmp -!$omp parallel do private(i,j) - do j=jsta,jend - do i=1,im - if (sm(i,j) == 1.0 .and. sice(i,j) ==0.) stc(i,j,2) = spval - !if (sm(i,j) /= 0.0) stc(i,j,2) = spval - enddo - enddo - if(debugprint)print*,'sample stc = ',1,stc(isa,jsa,2) - - VarName='soilt3' - call read_netcdf_2d_scatter(me,ncid2d,1,im,jm,jsta,jsta_2l & - ,jend_2u,MPI_COMM_COMP,icnt,idsp,spval,VarName,stc(1,jsta_2l,3)) -! mask open water areas, combine with sea ice tmp -!$omp parallel do private(i,j) - do j=jsta,jend - do i=1,im - if (sm(i,j) == 1.0 .and. sice(i,j) ==0.) stc(i,j,3) = spval - !if (sm(i,j) /= 0.0) stc(i,j,3) = spval - enddo - enddo - if(debugprint)print*,'sample stc = ',1,stc(isa,jsa,3) - - VarName='soilt4' - call read_netcdf_2d_scatter(me,ncid2d,1,im,jm,jsta,jsta_2l & - ,jend_2u,MPI_COMM_COMP,icnt,idsp,spval,VarName,stc(1,jsta_2l,4)) -! mask open water areas, combine with sea ice tmp -!$omp parallel do private(i,j) - do j=jsta,jend - do i=1,im - if (sm(i,j) == 1.0 .and. sice(i,j) ==0.) stc(i,j,4) = spval - !if (sm(i,j) /= 0.0) stc(i,j,4) = spval - enddo - enddo - if(debugprint)print*,'sample stc = ',1,stc(isa,jsa,4) - -!$omp parallel do private(i,j) - do j=jsta,jend - do i=1,im - acfrcv(i,j) = spval ! GFS does not output time averaged convective and strat cloud fraction, set acfrcv to spval, ncfrcv to 1 - ncfrcv(i,j) = 1.0 - acfrst(i,j) = spval ! GFS does not output time averaged cloud fraction, set acfrst to spval, ncfrst to 1 - ncfrst(i,j) = 1.0 - bgroff(i,j) = spval ! GFS does not have UNDERGROUND RUNOFF - rlwtoa(i,j) = spval ! GFS does not have inst model top outgoing longwave - enddo - enddo -! trdlw(i,j) = 6.0 - ardlw = 1.0 ! GFS incoming sfc longwave has been averaged over 6 hr bucket, set ARDLW to 1 - -! time averaged incoming sfc longwave - VarName='dlwrf_ave' - call read_netcdf_2d_scatter(me,ncid2d,1,im,jm,jsta,jsta_2l & - ,jend_2u,MPI_COMM_COMP,icnt,idsp,spval,VarName,alwin) - -! inst incoming sfc longwave - VarName='dlwrf' - call read_netcdf_2d_scatter(me,ncid2d,1,im,jm,jsta,jsta_2l & - ,jend_2u,MPI_COMM_COMP,icnt,idsp,spval,VarName,rlwin) - -! time averaged outgoing sfc longwave - VarName='ulwrf_ave' - call read_netcdf_2d_scatter(me,ncid2d,1,im,jm,jsta,jsta_2l & - ,jend_2u,MPI_COMM_COMP,icnt,idsp,spval,VarName,alwout) -! inst outgoing sfc longwave - VarName='ulwrf' - call read_netcdf_2d_scatter(me,ncid2d,1,im,jm,jsta,jsta_2l & - ,jend_2u,MPI_COMM_COMP,icnt,idsp,spval,VarName,radot) - -! where(alwout /= spval) alwout=-alwout ! CLDRAD puts a minus sign before gribbing -!$omp parallel do private(i,j) - do j=jsta,jend - do i=1,im - if (alwout(i,j) /= spval) alwout(i,j) = -alwout(i,j) - enddo - enddo -! if(debugprint)print*,'sample l',VarName,' = ',1,alwout(isa,jsa) - -! time averaged outgoing model top longwave using gfsio - VarName='ulwrf_avetoa' - call read_netcdf_2d_scatter(me,ncid2d,1,im,jm,jsta,jsta_2l & - ,jend_2u,MPI_COMM_COMP,icnt,idsp,spval,VarName,alwtoa) -! if(debugprint)print*,'sample l',VarName,' = ',1,alwtoa(isa,jsa) - -! GFS incoming sfc longwave has been averaged, set ARDLW to 1 - ardsw=1.0 -! trdsw=6.0 - -! time averaged incoming sfc shortwave - VarName='dswrf_ave' - call read_netcdf_2d_scatter(me,ncid2d,1,im,jm,jsta,jsta_2l & - ,jend_2u,MPI_COMM_COMP,icnt,idsp,spval,VarName,aswin) -! if(debugprint)print*,'sample l',VarName,' = ',1,aswin(isa,jsa) - -! inst incoming sfc shortwave - VarName='dswrf' - call read_netcdf_2d_scatter(me,ncid2d,1,im,jm,jsta,jsta_2l & - ,jend_2u,MPI_COMM_COMP,icnt,idsp,spval,VarName,rswin) - -! inst incoming clear sky sfc shortwave - VarName='csdlf' - call read_netcdf_2d_scatter(me,ncid2d,1,im,jm,jsta,jsta_2l & - ,jend_2u,MPI_COMM_COMP,icnt,idsp,spval,VarName,rswinc) - -! time averaged incoming sfc uv-b using getgb - VarName='duvb_ave' - call read_netcdf_2d_scatter(me,ncid2d,1,im,jm,jsta,jsta_2l & - ,jend_2u,MPI_COMM_COMP,icnt,idsp,spval,VarName,auvbin) -! if(debugprint)print*,'sample l',VarName,' = ',1,auvbin(isa,jsa) - -! time averaged incoming sfc clear sky uv-b using getgb - VarName='cduvb_ave' - call read_netcdf_2d_scatter(me,ncid2d,1,im,jm,jsta,jsta_2l & - ,jend_2u,MPI_COMM_COMP,icnt,idsp,spval,VarName,auvbinc) -! if(debugprint)print*,'sample l',VarName,' = ',1,auvbinc(isa,jsa) - -! time averaged outgoing sfc shortwave using gfsio - VarName='uswrf_ave' - call read_netcdf_2d_scatter(me,ncid2d,1,im,jm,jsta,jsta_2l & - ,jend_2u,MPI_COMM_COMP,icnt,idsp,spval,VarName,aswout) -! where(aswout /= spval) aswout=-aswout ! CLDRAD puts a minus sign before gribbing -!$omp parallel do private(i,j) - do j=jsta,jend - do i=1,im - if (aswout(i,j) /= spval) aswout(i,j) = -aswout(i,j) - enddo - enddo -! if(debugprint)print*,'sample l',VarName,' = ',1,aswout(isa,jsa) - -! inst outgoing sfc shortwave using gfsio - VarName='uswrf' - call read_netcdf_2d_scatter(me,ncid2d,1,im,jm,jsta,jsta_2l & - ,jend_2u,MPI_COMM_COMP,icnt,idsp,spval,VarName,rswout) - -! time averaged model top incoming shortwave - VarName='dswrf_avetoa' - call read_netcdf_2d_scatter(me,ncid2d,1,im,jm,jsta,jsta_2l & - ,jend_2u,MPI_COMM_COMP,icnt,idsp,spval,VarName,aswintoa) -! if(debugprint)print*,'sample l',VarName,' = ',1,aswintoa(isa,jsa) - -! time averaged model top outgoing shortwave - VarName='uswrf_avetoa' - call read_netcdf_2d_scatter(me,ncid2d,1,im,jm,jsta,jsta_2l & - ,jend_2u,MPI_COMM_COMP,icnt,idsp,spval,VarName,aswtoa) -! if(debugprint)print*,'sample l',VarName,' = ',1,aswtoa(isa,jsa) - -! time averaged surface sensible heat flux, multiplied by -1 because wrf model flux -! has reversed sign convention using gfsio - VarName='shtfl_ave' - call read_netcdf_2d_scatter(me,ncid2d,1,im,jm,jsta,jsta_2l & - ,jend_2u,MPI_COMM_COMP,icnt,idsp,spval,VarName,sfcshx) -! where (sfcshx /= spval)sfcshx=-sfcshx -!$omp parallel do private(i,j) - do j=jsta,jend - do i=1,im - if (sfcshx(i,j) /= spval) sfcshx(i,j) = -sfcshx(i,j) - enddo - enddo -! if(debugprint)print*,'sample l',VarName,' = ',1,sfcshx(isa,jsa) - -! inst surface sensible heat flux - VarName='shtfl' - call read_netcdf_2d_scatter(me,ncid2d,1,im,jm,jsta,jsta_2l & - ,jend_2u,MPI_COMM_COMP,icnt,idsp,spval,VarName,twbs) -!$omp parallel do private(i,j) - do j=jsta,jend - do i=1,im - if (twbs(i,j) /= spval) twbs(i,j) = -twbs(i,j) - enddo - enddo - -! GFS surface flux has been averaged, set ASRFC to 1 - asrfc=1.0 -! tsrfc=6.0 - -! time averaged surface latent heat flux, multiplied by -1 because wrf model flux -! has reversed sign vonvention using gfsio - VarName='lhtfl_ave' - call read_netcdf_2d_scatter(me,ncid2d,1,im,jm,jsta,jsta_2l & - ,jend_2u,MPI_COMM_COMP,icnt,idsp,spval,VarName,sfclhx) -! where (sfclhx /= spval)sfclhx=-sfclhx -!$omp parallel do private(i,j) - do j=jsta,jend - do i=1,im - if (sfclhx(i,j) /= spval) sfclhx(i,j) = -sfclhx(i,j) - enddo - enddo -! if(debugprint)print*,'sample l',VarName,' = ',1,sfclhx(isa,jsa) - -! inst surface latent heat flux - VarName='lhtfl' - call read_netcdf_2d_scatter(me,ncid2d,1,im,jm,jsta,jsta_2l & - ,jend_2u,MPI_COMM_COMP,icnt,idsp,spval,VarName,qwbs) -!$omp parallel do private(i,j) - do j=jsta,jend - do i=1,im - if (qwbs(i,j) /= spval) qwbs(i,j) = -qwbs(i,j) - enddo - enddo - - if(me==0)print*,'rdaod= ',rdaod -! inst aod550 optical depth - if(rdaod) then - VarName='aod550' - call read_netcdf_2d_scatter(ncid2d,im,jsta,jsta_2l,jend,jend_2u, & - spval,VarName,aod550) - - VarName='du_aod550' - call read_netcdf_2d_scatter(ncid2d,im,jsta,jsta_2l,jend,jend_2u, & - spval,VarName,du_aod550) - - VarName='ss_aod550' - call read_netcdf_2d_scatter(ncid2d,im,jsta,jsta_2l,jend,jend_2u, & - spval,VarName,ss_aod550) - - VarName='su_aod550' - call read_netcdf_2d_scatter(ncid2d,im,jsta,jsta_2l,jend,jend_2u, & - spval,VarName,su_aod550) - - VarName='oc_aod550' - call read_netcdf_2d_scatter(ncid2d,im,jsta,jsta_2l,jend,jend_2u, & - spval,VarName,oc_aod550) - - VarName='bc_aod550' - call read_netcdf_2d_scatter(ncid2d,im,jsta,jsta_2l,jend,jend_2u, & - spval,VarName,bc_aod550) - end if - -! time averaged ground heat flux using nemsio - VarName='gflux_ave' - call read_netcdf_2d_scatter(me,ncid2d,1,im,jm,jsta,jsta_2l & - ,jend_2u,MPI_COMM_COMP,icnt,idsp,spval,VarName,subshx) -! mask water areas -!$omp parallel do private(i,j) - do j=jsta,jend - do i=1,im - if (sm(i,j) == 1.0 .and. sice(i,j) ==0.) subshx(i,j) = spval - enddo - enddo -! if(debugprint)print*,'sample l',VarName,' = ',1,subshx(isa,jsa) - -! inst ground heat flux using nemsio - VarName='gflux' - call read_netcdf_2d_scatter(me,ncid2d,1,im,jm,jsta,jsta_2l & - ,jend_2u,MPI_COMM_COMP,icnt,idsp,spval,VarName,grnflx) -! mask water areas -!$omp parallel do private(i,j) - do j=jsta,jend - do i=1,im - if (sm(i,j) == 1.0 .and. sice(i,j) ==0.) grnflx(i,j) = spval - enddo - enddo - -! time averaged zonal momentum flux using gfsio - VarName='uflx_ave' - call read_netcdf_2d_scatter(me,ncid2d,1,im,jm,jsta,jsta_2l & - ,jend_2u,MPI_COMM_COMP,icnt,idsp,spval,VarName,sfcux) -! if(debugprint)print*,'sample l',VarName,' = ',1,sfcux(isa,jsa) - -! time averaged meridional momentum flux using nemsio - VarName='vflx_ave' - call read_netcdf_2d_scatter(me,ncid2d,1,im,jm,jsta,jsta_2l & - ,jend_2u,MPI_COMM_COMP,icnt,idsp,spval,VarName,sfcvx) -! if(debugprint)print*,'sample l',VarName,' = ',1,sfcvx(isa,jsa) - -! dong read in inst surface flux -! inst zonal momentum flux using gfsio -! VarName='uflx' -! call read_netcdf_2d_scatter(me,ncid2d,1,im,jm,jsta,jsta_2l & -! ,jend_2u,MPI_COMM_COMP,icnt,idsp,spval,VarName,sfcuxi) -! if(debugprint)print*,'sample l',VarName,' = ',1,sfcuxi(isa,jsa) - -! inst meridional momentum flux using nemsio -! VarName='vflx' -! call read_netcdf_2d_scatter(me,ncid2d,1,im,jm,jsta,jsta_2l & -! ,jend_2u,MPI_COMM_COMP,icnt,idsp,spval,VarName,sfcvxi) -! if(debugprint)print*,'sample l',VarName,' = ',1,sfcvxi(isa,jsa) - - -!$omp parallel do private(i,j) - do j=jsta_2l,jend_2u - do i=1,im - sfcuvx(i,j) = spval ! GFS does not use total momentum flux - enddo - enddo - -! time averaged zonal gravity wave stress using nemsio - VarName='u-gwd_ave' - call read_netcdf_2d_scatter(me,ncid2d,1,im,jm,jsta,jsta_2l & - ,jend_2u,MPI_COMM_COMP,icnt,idsp,spval,VarName,gtaux) -! if(debugprint)print*,'sample l',VarName,' = ',1,gtaux(isa,jsa) - -! time averaged meridional gravity wave stress using getgb - VarName='v-gwd_ave' - call read_netcdf_2d_scatter(me,ncid2d,1,im,jm,jsta,jsta_2l & - ,jend_2u,MPI_COMM_COMP,icnt,idsp,spval,VarName,gtauy) -! if(debugprint)print*,'sample l',VarName,' = ',1,gtauy(isa,jsa) - -! time averaged accumulated potential evaporation - VarName='pevpr_ave' - call read_netcdf_2d_scatter(me,ncid2d,1,im,jm,jsta,jsta_2l & - ,jend_2u,MPI_COMM_COMP,icnt,idsp,spval,VarName,avgpotevp) -! mask water areas -!$omp parallel do private(i,j) - do j=jsta,jend - do i=1,im - if (sm(i,j) == 1.0 .and. sice(i,j) ==0.) avgpotevp(i,j) = spval - enddo - enddo -! if(debugprint)print*,'sample l',VarName,' = ',1,potevp(isa,jsa) - -! inst potential evaporation - VarName='pevpr' - call read_netcdf_2d_scatter(me,ncid2d,1,im,jm,jsta,jsta_2l & - ,jend_2u,MPI_COMM_COMP,icnt,idsp,spval,VarName,potevp) -! mask water areas -!$omp parallel do private(i,j) - do j=jsta,jend - do i=1,im - if (sm(i,j) == 1.0 .and. sice(i,j) ==0.) potevp(i,j) = spval - enddo - enddo - - do l=1,lm -!$omp parallel do private(i,j) - do j=jsta_2l,jend_2u - do i=1,im -! GFS does not have temperature tendency due to long wave radiation - rlwtt(i,j,l) = spval -! GFS does not have temperature tendency due to short wave radiation - rswtt(i,j,l) = spval -! GFS does not have temperature tendency due to latent heating from convection - tcucn(i,j,l) = spval - tcucns(i,j,l) = spval -! GFS does not have temperature tendency due to latent heating from grid scale - train(i,j,l) = spval - enddo - enddo - enddo - -! set avrain to 1 - avrain=1.0 - avcnvc=1.0 - theat=6.0 ! just in case GFS decides to output T tendency - -! 10 m u using nemsio - VarName='ugrd10m' - call read_netcdf_2d_scatter(me,ncid2d,1,im,jm,jsta,jsta_2l & - ,jend_2u,MPI_COMM_COMP,icnt,idsp,spval,VarName,u10) - - do j=jsta,jend - do i=1,im - u10h(i,j)=u10(i,j) - end do - end do -! if(debugprint)print*,'sample l',VarName,' = ',1,u10(isa,jsa) - -! 10 m v using gfsio - VarName='vgrd10m' - call read_netcdf_2d_scatter(me,ncid2d,1,im,jm,jsta,jsta_2l & - ,jend_2u,MPI_COMM_COMP,icnt,idsp,spval,VarName,v10) - - do j=jsta,jend - do i=1,im - v10h(i,j)=v10(i,j) - end do - end do -! if(debugprint)print*,'sample l',VarName,' = ',1,v10(isa,jsa) - -! vegetation type, it's in GFS surface file, hopefully will merge into gfsio soon - VarName='vtype' - call read_netcdf_2d_scatter(me,ncid2d,1,im,jm,jsta,jsta_2l & - ,jend_2u,MPI_COMM_COMP,icnt,idsp,spval,VarName,buf) -! where (buf /= spval) -! ivgtyp=nint(buf) -! elsewhere -! ivgtyp=0 !need to feed reasonable value to crtm -! end where -!$omp parallel do private(i,j) - do j = jsta_2l, jend_2u - do i=1,im - if (buf(i,j) < spval) then - ivgtyp(i,j) = nint(buf(i,j)) - else - ivgtyp(i,j) = 0 - endif - enddo - enddo -! if(debugprint)print*,'sample l',VarName,' = ',1,ivgtyp(isa,jsa) - -! soil type, it's in GFS surface file, hopefully will merge into gfsio soon - VarName='sotyp' - call read_netcdf_2d_scatter(me,ncid2d,1,im,jm,jsta,jsta_2l & - ,jend_2u,MPI_COMM_COMP,icnt,idsp,spval,VarName,buf) - VcoordName='sfc' - l=1 -!$omp parallel do private(i,j) - do j = jsta_2l, jend_2u - do i=1,im - if (buf(i,j) < spval) then - isltyp(i,j) = nint(buf(i,j)) - else - isltyp(i,j) = 0 !need to feed reasonable value to crtm - endif - enddo - enddo -! if(debugprint)print*,'sample l',VarName,' = ',1,isltyp(isa,jsa) - -!$omp parallel do private(i,j) - do j=jsta_2l,jend_2u - do i=1,im - smstav(i,j) = spval ! GFS does not have soil moisture availability -! smstot(i,j) = spval ! GFS does not have total soil moisture - sfcevp(i,j) = spval ! GFS does not have accumulated surface evaporation - acsnow(i,j) = spval ! GFS does not have averaged accumulated snow - acsnom(i,j) = spval ! GFS does not have snow melt -! sst(i,j) = spval ! GFS does not have sst???? - thz0(i,j) = ths(i,j) ! GFS does not have THZ0, use THS to substitute - qz0(i,j) = spval ! GFS does not output humidity at roughness length - uz0(i,j) = spval ! GFS does not output u at roughness length - vz0(i,j) = spval ! GFS does not output humidity at roughness length - enddo - enddo - do l=1,lm -!$omp parallel do private(i,j) - do j=jsta_2l,jend_2u - do i=1,im - EL_PBL(i,j,l) = spval ! GFS does not have mixing length - exch_h(i,j,l) = spval ! GFS does not output exchange coefficient - enddo - enddo - enddo -! if(debugprint)print*,'sample l',VarName,' = ',1,thz0(isa,jsa) - -! retrieve inst convective cloud top, GFS has cloud top pressure instead of index, -! will need to modify CLDRAD.f to use pressure directly instead of index -! VarName='pres' -! VcoordName='convect-cld top' -! l=1 -! if(debugprint)print*,'sample l',VarName,' = ',1,ptop(isa,jsa) - VarName='prescnvclt' - call read_netcdf_2d_scatter(me,ncid2d,1,im,jm,jsta,jsta_2l & - ,jend_2u,MPI_COMM_COMP,icnt,idsp,spval,VarName,ptop) - - -!$omp parallel do private(i,j) - do j=jsta,jend - do i=1,im - htop(i,j) = spval - if(ptop(i,j) <= 0.0) ptop(i,j) = spval - enddo - enddo - do j=jsta,jend - do i=1,im - if(ptop(i,j) < spval)then - do l=1,lm - if(ptop(i,j) <= pmid(i,j,l))then - htop(i,j) = l -! if(i==ii .and. j==jj)print*,'sample ptop,pmid pmid-1,pint= ', & -! ptop(i,j),pmid(i,j,l),pmid(i,j,l-1),pint(i,j,l),htop(i,j) - exit - end if - end do - end if - end do - end do - -! retrieve inst convective cloud bottom, GFS has cloud top pressure instead of index, -! will need to modify CLDRAD.f to use pressure directly instead of index - VarName='prescnvclb' - call read_netcdf_2d_scatter(me,ncid2d,1,im,jm,jsta,jsta_2l & - ,jend_2u,MPI_COMM_COMP,icnt,idsp,spval,VarName,pbot) -! if(debugprint)print*,'sample l',VarName,VcoordName,' = ',1,pbot(isa,jsa) -!$omp parallel do private(i,j) - do j=jsta,jend - do i=1,im - hbot(i,j) = spval - if(pbot(i,j) <= 0.0) pbot(i,j) = spval - enddo - enddo - do j=jsta,jend - do i=1,im -! if(.not.lb(i,j))print*,'false bitmask for pbot at ' -! + ,i,j,pbot(i,j) - if(pbot(i,j) < spval)then - do l=lm,1,-1 - if(pbot(i,j) >= pmid(i,j,l)) then - hbot(i,j) = l -! if(i==ii .and. j==jj)print*,'sample pbot,pmid= ', & -! pbot(i,j),pmid(i,j,l),hbot(i,j) - exit - end if - end do - end if - end do - end do - if(debugprint)print*,'sample hbot = ',hbot(isa,jsa) -! retrieve time averaged low cloud top pressure using nemsio - VarName='pres_avelct' - call read_netcdf_2d_scatter(me,ncid2d,1,im,jm,jsta,jsta_2l & - ,jend_2u,MPI_COMM_COMP,icnt,idsp,spval,VarName,ptopl) -! if(debugprint)print*,'sample l',VarName,' = ',1,ptopl(isa,jsa) - -! retrieve time averaged low cloud bottom pressure using nemsio - VarName='pres_avelcb' - call read_netcdf_2d_scatter(me,ncid2d,1,im,jm,jsta,jsta_2l & - ,jend_2u,MPI_COMM_COMP,icnt,idsp,spval,VarName,pbotl) -! if(debugprint)print*,'sample l',VarName,' = ',1,pbotl(isa,jsa) - -! retrieve time averaged low cloud top temperature using nemsio - VarName='tmp_avelct' - call read_netcdf_2d_scatter(me,ncid2d,1,im,jm,jsta,jsta_2l & - ,jend_2u,MPI_COMM_COMP,icnt,idsp,spval,VarName,Ttopl) -! if(debugprint)print*,'sample l',VcoordName,VarName,' = ',1,Ttopl(isa,jsa) - -! retrieve time averaged middle cloud top pressure using nemsio - VarName='pres_avemct' - call read_netcdf_2d_scatter(me,ncid2d,1,im,jm,jsta,jsta_2l & - ,jend_2u,MPI_COMM_COMP,icnt,idsp,spval,VarName,ptopm) -! if(debugprint)print*,'sample l',VcoordName,VarName,' = ',1,ptopm(isa,jsa) - -! retrieve time averaged middle cloud bottom pressure using nemsio - VarName='pres_avemcb' - call read_netcdf_2d_scatter(me,ncid2d,1,im,jm,jsta,jsta_2l & - ,jend_2u,MPI_COMM_COMP,icnt,idsp,spval,VarName,pbotm) -! if(debugprint)print*,'sample l',VcoordName,VarName,' = ',1,pbotm(isa,jsa) - -! retrieve time averaged middle cloud top temperature using nemsio - VarName='tmp_avemct' - call read_netcdf_2d_scatter(me,ncid2d,1,im,jm,jsta,jsta_2l & - ,jend_2u,MPI_COMM_COMP,icnt,idsp,spval,VarName,Ttopm) -! if(debugprint)print*,'sample l',VcoordName,VarName,' = ',1,Ttopm(isa,jsa) - -! retrieve time averaged high cloud top pressure using nemsio ********* - VarName='pres_avehct' - call read_netcdf_2d_scatter(me,ncid2d,1,im,jm,jsta,jsta_2l & - ,jend_2u,MPI_COMM_COMP,icnt,idsp,spval,VarName,ptoph) -! if(debugprint)print*,'sample l',VcoordName,VarName,' = ',1,ptoph(isa,jsa) - -! retrieve time averaged high cloud bottom pressure using nemsio - VarName='pres_avehcb' - call read_netcdf_2d_scatter(me,ncid2d,1,im,jm,jsta,jsta_2l & - ,jend_2u,MPI_COMM_COMP,icnt,idsp,spval,VarName,pboth) -! if(debugprint)print*,'sample l',VcoordName,VarName,' = ',1,pboth(isa,jsa) - -! retrieve time averaged high cloud top temperature using nemsio - VarName='tmp_avehct' - call read_netcdf_2d_scatter(me,ncid2d,1,im,jm,jsta,jsta_2l & - ,jend_2u,MPI_COMM_COMP,icnt,idsp,spval,VarName,Ttoph) -! if(debugprint)print*,'sample l',VcoordName,VarName,' = ',1,Ttoph(isa,jsa) - -! retrieve boundary layer cloud cover using nemsio - VarName='tcdc_avebndcl' - call read_netcdf_2d_scatter(me,ncid2d,1,im,jm,jsta,jsta_2l & - ,jend_2u,MPI_COMM_COMP,icnt,idsp,spval,VarName,pblcfr) -! if(debugprint)print*,'sample l',VcoordName,VarName,' = ', 1,pblcfr(isa,jsa) -! where (pblcfr /= spval)pblcfr=pblcfr/100. ! convert to fraction -!$omp parallel do private(i,j) - do j = jsta_2l, jend_2u - do i=1,im - if (pblcfr(i,j) < spval) pblcfr(i,j) = pblcfr(i,j) * 0.01 - enddo - enddo - -! retrieve cloud work function - VarName='cwork_aveclm' - call read_netcdf_2d_scatter(me,ncid2d,1,im,jm,jsta,jsta_2l & - ,jend_2u,MPI_COMM_COMP,icnt,idsp,spval,VarName,cldwork) -! if(debugprint)print*,'sample l',VcoordName,VarName,' = ', 1,cldwork(isa,jsa) - -! accumulated total (base+surface) runoff - VarName='watr_acc' - call read_netcdf_2d_scatter(me,ncid2d,1,im,jm,jsta,jsta_2l & - ,jend_2u,MPI_COMM_COMP,icnt,idsp,spval,VarName,runoff) -! mask water areas -!$omp parallel do private(i,j) - do j=jsta,jend - do i=1,im - if (sm(i,j) /= 0.0) runoff(i,j) = spval - enddo - enddo -! if(debugprint)print*,'sample l',VcoordName,VarName,' = ', 1,runoff(isa,jsa) - -! retrieve shelter max temperature using nemsio - VarName='tmax_max2m' - call read_netcdf_2d_scatter(me,ncid2d,1,im,jm,jsta,jsta_2l & - ,jend_2u,MPI_COMM_COMP,icnt,idsp,spval,VarName,maxtshltr) - -! retrieve shelter min temperature using nemsio - VarName='tmin_min2m' - call read_netcdf_2d_scatter(me,ncid2d,1,im,jm,jsta,jsta_2l & - ,jend_2u,MPI_COMM_COMP,icnt,idsp,spval,VarName,mintshltr) -! if(debugprint)print*,'sample l',VcoordName,VarName,' = ', & -! 1,mintshltr(im/2,(jsta+jend)/2) - -! retrieve shelter max RH -! VarName='rh02max' -! call read_netcdf_2d_scatter(me,ncid2d,1,im,jm,jsta,jsta_2l & -! ,jend_2u,MPI_COMM_COMP,icnt,idsp,spval,VarName,maxrhshltr) - -! retrieve shelter min temperature using nemsio -! VarName='rh02min' -! call read_netcdf_2d_scatter(me,ncid2d,1,im,jm,jsta,jsta_2l & -! ,jend_2u,MPI_COMM_COMP,icnt,idsp,spval,VarName,minrhshltr) -! if(debugprint)print*,'sample l',VcoordName,VarName,' = ', & -! 1,mintshltr(im/2,(jsta+jend)/2) - -!$omp parallel do private(i,j) - do j=jsta_2l,jend_2u - do i=1,im - MAXRHSHLTR(i,j) = SPVAL - MINRHSHLTR(i,j) = SPVAL - enddo - enddo - -! retrieve ice thickness using nemsio - VarName='icetk' - call read_netcdf_2d_scatter(me,ncid2d,1,im,jm,jsta,jsta_2l & - ,jend_2u,MPI_COMM_COMP,icnt,idsp,spval,VarName,dzice) -! if(debugprint)print*,'sample l',VcoordName,VarName,' = ', 1,dzice(isa,jsa) - -! retrieve wilting point using nemsio - VarName='wilt' - call read_netcdf_2d_scatter(me,ncid2d,1,im,jm,jsta,jsta_2l & - ,jend_2u,MPI_COMM_COMP,icnt,idsp,spval,VarName,smcwlt) -! mask water areas -!$omp parallel do private(i,j) - do j=jsta,jend - do i=1,im - if (sm(i,j) /= 0.0) smcwlt(i,j) = spval - enddo - enddo -! if(debugprint)print*,'sample l',VcoordName,VarName,' = ', 1,smcwlt(isa,jsa) - -! retrieve sunshine duration using nemsio - VarName='sunsd_acc' - call read_netcdf_2d_scatter(me,ncid2d,1,im,jm,jsta,jsta_2l & - ,jend_2u,MPI_COMM_COMP,icnt,idsp,spval,VarName,suntime) - -! retrieve field capacity using nemsio - VarName='fldcp' - call read_netcdf_2d_scatter(me,ncid2d,1,im,jm,jsta,jsta_2l & - ,jend_2u,MPI_COMM_COMP,icnt,idsp,spval,VarName,fieldcapa) -! mask water areas -!$omp parallel do private(i,j) - do j=jsta,jend - do i=1,im - if (sm(i,j) /= 0.0) fieldcapa(i,j) = spval - enddo - enddo -! if(debugprint)print*,'sample l',VcoordName,VarName,' = ', 1,fieldcapa(isa,jsa) - -! retrieve time averaged surface visible beam downward solar flux - VarName='vbdsf_ave' - call read_netcdf_2d_scatter(me,ncid2d,1,im,jm,jsta,jsta_2l & - ,jend_2u,MPI_COMM_COMP,icnt,idsp,spval,VarName,avisbeamswin) - VcoordName='sfc' - l=1 - -! retrieve time averaged surface visible diffuse downward solar flux - VarName='vddsf_ave' - call read_netcdf_2d_scatter(me,ncid2d,1,im,jm,jsta,jsta_2l & - ,jend_2u,MPI_COMM_COMP,icnt,idsp,spval,VarName,avisdiffswin) - -! retrieve time averaged surface near IR beam downward solar flux - VarName='nbdsf_ave' - call read_netcdf_2d_scatter(me,ncid2d,1,im,jm,jsta,jsta_2l & - ,jend_2u,MPI_COMM_COMP,icnt,idsp,spval,VarName,airbeamswin) - -! retrieve time averaged surface near IR diffuse downward solar flux - VarName='nddsf_ave' - call read_netcdf_2d_scatter(me,ncid2d,1,im,jm,jsta,jsta_2l & - ,jend_2u,MPI_COMM_COMP,icnt,idsp,spval,VarName,airdiffswin) - -! retrieve time averaged surface clear sky outgoing LW - VarName='csulf' - call read_netcdf_2d_scatter(me,ncid2d,1,im,jm,jsta,jsta_2l & - ,jend_2u,MPI_COMM_COMP,icnt,idsp,spval,VarName,alwoutc) - -! retrieve time averaged TOA clear sky outgoing LW - VarName='csulftoa' - call read_netcdf_2d_scatter(me,ncid2d,1,im,jm,jsta,jsta_2l & - ,jend_2u,MPI_COMM_COMP,icnt,idsp,spval,VarName,alwtoac) - -! retrieve time averaged surface clear sky outgoing SW - VarName='csusf' - call read_netcdf_2d_scatter(me,ncid2d,1,im,jm,jsta,jsta_2l & - ,jend_2u,MPI_COMM_COMP,icnt,idsp,spval,VarName,aswoutc) - -! retrieve time averaged TOA clear sky outgoing LW - VarName='csusftoa' - call read_netcdf_2d_scatter(me,ncid2d,1,im,jm,jsta,jsta_2l & - ,jend_2u,MPI_COMM_COMP,icnt,idsp,spval,VarName,aswtoac) - -! retrieve time averaged surface clear sky incoming LW - VarName='csdlf' - call read_netcdf_2d_scatter(me,ncid2d,1,im,jm,jsta,jsta_2l & - ,jend_2u,MPI_COMM_COMP,icnt,idsp,spval,VarName,alwinc) - -! retrieve time averaged surface clear sky incoming SW - VarName='csdsf' - call read_netcdf_2d_scatter(me,ncid2d,1,im,jm,jsta,jsta_2l & - ,jend_2u,MPI_COMM_COMP,icnt,idsp,spval,VarName,aswinc) - -! retrieve shelter max specific humidity using nemsio - VarName='spfhmax_max2m' - call read_netcdf_2d_scatter(me,ncid2d,1,im,jm,jsta,jsta_2l & - ,jend_2u,MPI_COMM_COMP,icnt,idsp,spval,VarName,maxqshltr) -! if(debugprint)print*,'sample l',VcoordName,VarName,' = ', -! 1,maxqshltr(isa,jsa) - -! retrieve shelter min temperature using nemsio - VarName='spfhmin_min2m' - call read_netcdf_2d_scatter(me,ncid2d,1,im,jm,jsta,jsta_2l & - ,jend_2u,MPI_COMM_COMP,icnt,idsp,spval,VarName,minqshltr) - -! retrieve storm runoff using nemsio - VarName='ssrun_acc' - call read_netcdf_2d_scatter(me,ncid2d,1,im,jm,jsta,jsta_2l & - ,jend_2u,MPI_COMM_COMP,icnt,idsp,spval,VarName,SSROFF) -! mask water areas -!$omp parallel do private(i,j) - do j=jsta,jend - do i=1,im - if (sm(i,j) /= 0.0) ssroff(i,j) = spval - enddo - enddo - -! retrieve direct soil evaporation - VarName='evbs_ave' - call read_netcdf_2d_scatter(me,ncid2d,1,im,jm,jsta,jsta_2l & - ,jend_2u,MPI_COMM_COMP,icnt,idsp,spval,VarName,avgedir) -! mask water areas -!$omp parallel do private(i,j) - do j=jsta,jend - do i=1,im - if (sm(i,j) /= 0.0) avgedir(i,j) = spval - enddo - enddo - -! retrieve CANOPY WATER EVAP - VarName='evcw_ave' - call read_netcdf_2d_scatter(me,ncid2d,1,im,jm,jsta,jsta_2l & - ,jend_2u,MPI_COMM_COMP,icnt,idsp,spval,VarName,avgecan) -! mask water areas -!$omp parallel do private(i,j) - do j=jsta,jend - do i=1,im - if (sm(i,j) /= 0.0) avgecan(i,j) = spval - enddo - enddo - -! retrieve PLANT TRANSPIRATION - VarName='trans_ave' - call read_netcdf_2d_scatter(me,ncid2d,1,im,jm,jsta,jsta_2l & - ,jend_2u,MPI_COMM_COMP,icnt,idsp,spval,VarName,avgetrans) -! mask water areas -!$omp parallel do private(i,j) - do j=jsta,jend - do i=1,im - if (sm(i,j) /= 0.0) avgetrans(i,j) = spval - enddo - enddo - -! retrieve snow sublimation - VarName='sbsno_ave' - call read_netcdf_2d_scatter(me,ncid2d,1,im,jm,jsta,jsta_2l & - ,jend_2u,MPI_COMM_COMP,icnt,idsp,spval,VarName,avgesnow) -! mask water areas -!$omp parallel do private(i,j) - do j=jsta,jend - do i=1,im - if (sm(i,j)==1.0 .and. sice(i,j)==0.) avgesnow(i,j)=spval - enddo - enddo - -! retrive total soil moisture - VarName='soilm' - call read_netcdf_2d_scatter(me,ncid2d,1,im,jm,jsta,jsta_2l & - ,jend_2u,MPI_COMM_COMP,icnt,idsp,spval,VarName,smstot) -! mask water areas -!$omp parallel do private(i,j) - do j=jsta,jend - do i=1,im - if (sm(i,j) /= 0.0) smstot(i,j) = spval - enddo - enddo - -! retrieve snow phase change heat flux - VarName='snohf' - call read_netcdf_2d_scatter(me,ncid2d,1,im,jm,jsta,jsta_2l & - ,jend_2u,MPI_COMM_COMP,icnt,idsp,spval,VarName,snopcx) -! mask water areas -!$omp parallel do private(i,j) - do j=jsta,jend - do i=1,im - if (sm(i,j) /= 0.0) snopcx(i,j) = spval - enddo - enddo - -! GFS does not have deep convective cloud top and bottom fields - -!$omp parallel do private(i,j) - do j=jsta,jend - do i=1,im - HTOPD(i,j) = SPVAL - HBOTD(i,j) = SPVAL - HTOPS(i,j) = SPVAL - HBOTS(i,j) = SPVAL - CUPPT(i,j) = SPVAL - enddo - enddo - -! done with flux file, close it for now - Status=nf90_close(ncid2d) -! deallocate(tmp,recname,reclevtyp,reclev) - -! pos east -! call collect_loc(gdlat,dummy) -! if(me == 0)then -! latstart = nint(dummy(1,1)*gdsdegr) -! latlast = nint(dummy(im,jm)*gdsdegr) -! print*,'laststart,latlast B bcast= ',latstart,latlast,'gdsdegr=',gdsdegr,& -! 'dummy(1,1)=',dummy(1,1),dummy(im,jm),'gdlat=',gdlat(1,1) -! end if -! call mpi_bcast(latstart,1,MPI_INTEGER,0,mpi_comm_comp,irtn) -! call mpi_bcast(latlast,1,MPI_INTEGER,0,mpi_comm_comp,irtn) -! write(6,*) 'laststart,latlast,me A calling bcast=',latstart,latlast,me -! call collect_loc(gdlon,dummy) -! if(me == 0)then -! lonstart = nint(dummy(1,1)*gdsdegr) -! lonlast = nint(dummy(im,jm)*gdsdegr) -! end if -! call mpi_bcast(lonstart,1,MPI_INTEGER,0,mpi_comm_comp,irtn) -! call mpi_bcast(lonlast, 1,MPI_INTEGER,0,mpi_comm_comp,irtn) - -! write(6,*)'lonstart,lonlast A calling bcast=',lonstart,lonlast -! - -! generate look up table for lifted parcel calculations - - THL = 210. - PLQ = 70000. - pt_TBL = 10000. ! this is for 100 hPa added by Moorthi - - CALL TABLE(PTBL,TTBL,PT_TBL, & - RDQ,RDTH,RDP,RDTHE,PL,THL,QS0,SQS,STHE,THE0) - - CALL TABLEQ(TTBLQ,RDPQ,RDTHEQ,PLQ,THL,STHEQ,THE0Q) - -! -! - IF(ME == 0)THEN - WRITE(6,*)' SPL (POSTED PRESSURE LEVELS) BELOW: ' - WRITE(6,51) (SPL(L),L=1,LSM) - 50 FORMAT(14(F4.1,1X)) - 51 FORMAT(8(F8.1,1X)) - ENDIF -! -!$omp parallel do private(l) - DO L = 1,LSM - ALSL(L) = LOG(SPL(L)) - END DO -! -!HC WRITE IGDS OUT FOR WEIGHTMAKER TO READ IN AS KGDSIN - if(me == 0)then - print*,'writing out igds' - igdout = 110 -! open(igdout,file='griddef.out',form='unformatted' -! + ,status='unknown') - if(maptype == 1)THEN ! Lambert conformal - WRITE(igdout)3 - WRITE(6,*)'igd(1)=',3 - WRITE(igdout)im - WRITE(igdout)jm - WRITE(igdout)LATSTART - WRITE(igdout)LONSTART - WRITE(igdout)8 - WRITE(igdout)CENLON - WRITE(igdout)DXVAL - WRITE(igdout)DYVAL - WRITE(igdout)0 - WRITE(igdout)64 - WRITE(igdout)TRUELAT2 - WRITE(igdout)TRUELAT1 - WRITE(igdout)255 - ELSE IF(MAPTYPE == 2)THEN !Polar stereographic - WRITE(igdout)5 - WRITE(igdout)im - WRITE(igdout)jm - WRITE(igdout)LATSTART - WRITE(igdout)LONSTART - WRITE(igdout)8 - WRITE(igdout)CENLON - WRITE(igdout)DXVAL - WRITE(igdout)DYVAL - WRITE(igdout)0 - WRITE(igdout)64 - WRITE(igdout)TRUELAT2 !Assume projection at +-90 - WRITE(igdout)TRUELAT1 - WRITE(igdout)255 - ! Note: The calculation of the map scale factor at the standard - ! lat/lon and the PSMAPF - ! Get map factor at 60 degrees (N or S) for PS projection, which will - ! be needed to correctly define the DX and DY values in the GRIB GDS - if (TRUELAT1 < 0.) THEN - LAT = -60. - else - LAT = 60. - end if - - CALL MSFPS (LAT,TRUELAT1*0.001,PSMAPF) - - ELSE IF(MAPTYPE == 3) THEN !Mercator - WRITE(igdout)1 - WRITE(igdout)im - WRITE(igdout)jm - WRITE(igdout)LATSTART - WRITE(igdout)LONSTART - WRITE(igdout)8 - WRITE(igdout)latlast - WRITE(igdout)lonlast - WRITE(igdout)TRUELAT1 - WRITE(igdout)0 - WRITE(igdout)64 - WRITE(igdout)DXVAL - WRITE(igdout)DYVAL - WRITE(igdout)255 - ELSE IF(MAPTYPE == 0 .OR. MAPTYPE == 203)THEN !A STAGGERED E-GRID - WRITE(igdout)203 - WRITE(igdout)im - WRITE(igdout)jm - WRITE(igdout)LATSTART - WRITE(igdout)LONSTART - WRITE(igdout)136 - WRITE(igdout)CENLAT - WRITE(igdout)CENLON - WRITE(igdout)DXVAL - WRITE(igdout)DYVAL - WRITE(igdout)64 - WRITE(igdout)0 - WRITE(igdout)0 - WRITE(igdout)0 - END IF - end if -! -! - - RETURN - END - diff --git a/sorc/ncep_post.fd/INITPOST_GFS_NETCDF_PARA.f b/sorc/ncep_post.fd/INITPOST_GFS_NETCDF_PARA.f deleted file mode 100644 index 3f7cab8f7..000000000 --- a/sorc/ncep_post.fd/INITPOST_GFS_NETCDF_PARA.f +++ /dev/null @@ -1,2565 +0,0 @@ -!> @file -! . . . -!> SUBPROGRAM: INITPOST_GFS_NETCDF_PARA INITIALIZE POST FOR RUN -!! PRGRMMR: Wen Meng DATE: 2020-02-04 -!! -!! ABSTRACT: THIS ROUTINE INITIALIZES CONSTANTS AND -!! VARIABLES AT THE START OF GFS MODEL OR POST -!! PROCESSOR RUN. -!! -!! REVISION HISTORY -!! 2020-02-04 W Meng start from INITPOST_GFS_NETCDF.f -!! 2021-03-11 Bo Cui change local arrays to dimension (im,jsta:jend) -!! -!! USAGE: CALL INITPOST_GFS_NETCDF_PARA -!! INPUT ARGUMENT LIST: -!! NONE -!! -!! OUTPUT ARGUMENT LIST: -!! NONE -!! -!! OUTPUT FILES: -!! NONE -!! -!! SUBPROGRAMS CALLED: -!! UTILITIES: -!! NONE -!! LIBRARY: -!! COMMON - CTLBLK -!! LOOKUP -!! SOILDEPTH -!! -!! -!! ATTRIBUTES: -!! LANGUAGE: FORTRAN -!! MACHINE : CRAY C-90 -!! - SUBROUTINE INITPOST_GFS_NETCDF_PARA(ncid3d) - - - use netcdf - use vrbls4d, only: dust, SALT, SUSO, SOOT, WASO, PP25, PP10 - use vrbls3d, only: t, q, uh, vh, pmid, pint, alpint, dpres, zint, zmid, o3, & - qqr, qqs, cwm, qqi, qqw, omga, rhomid, q2, cfr, rlwtt, rswtt, tcucn, & - tcucns, train, el_pbl, exch_h, vdifftt, vdiffmois, dconvmois, nradtt, & - o3vdiff, o3prod, o3tndy, mwpv, unknown, vdiffzacce, zgdrag,cnvctummixing, & - vdiffmacce, mgdrag, cnvctvmmixing, ncnvctcfrac, cnvctumflx, cnvctdmflx, & - cnvctzgdrag, sconvmois, cnvctmgdrag, cnvctdetmflx, duwt, duem, dusd, dudp, & - wh, qqg, ref_10cm - use vrbls2d, only: f, pd, fis, pblh, ustar, z0, ths, qs, twbs, qwbs, avgcprate, & - cprate, avgprec, prec, lspa, sno, si, cldefi, th10, q10, tshltr, pshltr, & - tshltr, albase, avgalbedo, avgtcdc, czen, czmean, mxsnal, radot, sigt4, & - cfrach, cfracl, cfracm, avgcfrach, qshltr, avgcfracl, avgcfracm, cnvcfr, & - islope, cmc, grnflx, vegfrc, acfrcv, ncfrcv, acfrst, ncfrst, ssroff, & - bgroff, rlwin, rlwtoa, cldwork, alwin, alwout, alwtoa, rswin, rswinc, & - rswout, aswin, auvbin, auvbinc, aswout, aswtoa, sfcshx, sfclhx, subshx, & - snopcx, sfcux, sfcvx, sfcuxi, sfcvxi, sfcuvx, gtaux, gtauy, potevp, u10, v10, smstav, & - smstot, ivgtyp, isltyp, sfcevp, sfcexc, acsnow, acsnom, sst, thz0, qz0, & - uz0, vz0, ptop, htop, pbot, hbot, ptopl, pbotl, ttopl, ptopm, pbotm, ttopm, & - ptoph, pboth, pblcfr, ttoph, runoff, maxtshltr, mintshltr, maxrhshltr, & - minrhshltr, dzice, smcwlt, suntime, fieldcapa, htopd, hbotd, htops, hbots, & - cuppt, dusmass, ducmass, dusmass25, ducmass25, aswintoa,rel_vort_maxhy1, & - maxqshltr, minqshltr, acond, sr, u10h, v10h,refd_max, w_up_max, w_dn_max, & - up_heli_max,up_heli_min,up_heli_max03,up_heli_min03,rel_vort_max01,u10max, v10max, & - avgedir,avgecan,avgetrans,avgesnow,avgprec_cont,avgcprate_cont,rel_vort_max, & - avisbeamswin,avisdiffswin,airbeamswin,airdiffswin,refdm10c_max,wspd10max, & - alwoutc,alwtoac,aswoutc,aswtoac,alwinc,aswinc,avgpotevp,snoavg, & - ti,aod550,du_aod550,ss_aod550,su_aod550,oc_aod550,bc_aod550 - use soil, only: sldpth, sh2o, smc, stc - use masks, only: lmv, lmh, htm, vtm, gdlat, gdlon, dx, dy, hbm2, sm, sice - use physcons_post, only: grav => con_g, fv => con_fvirt, rgas => con_rd, & - eps => con_eps, epsm1 => con_epsm1 - use params_mod, only: erad, dtr, tfrz, h1, d608, rd, p1000, capa,pi - use lookup_mod, only: thl, plq, ptbl, ttbl, rdq, rdth, rdp, rdthe, pl, qs0, sqs, sthe, & - ttblq, rdpq, rdtheq, stheq, the0q, the0 - use ctlblk_mod, only: me, mpi_comm_comp, icnt, idsp, jsta, jend, ihrst, idat, sdat, ifhr, & - ifmin, filename, tprec, tclod, trdlw, trdsw, tsrfc, tmaxmin, td3d, restrt, sdat, & - jend_m, imin, imp_physics, dt, spval, pdtop, pt, qmin, nbin_du, nphs, dtq2, ardlw,& - ardsw, asrfc, avrain, avcnvc, theat, gdsdegr, spl, lsm, alsl, im, jm, im_jm, lm, & - jsta_2l, jend_2u, nsoil, lp1, icu_physics, ivegsrc, novegtype, nbin_ss, nbin_bc, & - nbin_oc, nbin_su, gocart_on, pt_tbl, hyb_sigp, filenameFlux, fileNameAER,rdaod - use gridspec_mod, only: maptype, gridtype, latstart, latlast, lonstart, lonlast, cenlon, & - dxval, dyval, truelat2, truelat1, psmapf, cenlat,lonstartv, lonlastv, cenlonv, & - latstartv, latlastv, cenlatv,latstart_r,latlast_r,lonstart_r,lonlast_r - use rqstfld_mod, only: igds, avbl, iq, is - use upp_physics, only: fpvsnew -!- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - implicit none -! -! type(nemsio_gfile) :: nfile,ffile,rfile - integer,parameter :: nvar2d=48 -! character(nemsio_charkind) :: name2d(nvar2d) - integer :: nvar3d, numDims -! character(nemsio_charkind), allocatable :: name3din(:), name3dout(:) -! character(nemsio_charkind) :: varname,levtype -! -! INCLUDE/SET PARAMETERS. -! - INCLUDE "mpif.h" - -! integer,parameter:: MAXPTS=1000000 ! max im*jm points -! -! real,parameter:: con_g =9.80665e+0! gravity -! real,parameter:: con_rv =4.6150e+2 ! gas constant H2O -! real,parameter:: con_rd =2.8705e+2 ! gas constant air -! real,parameter:: con_fvirt =con_rv/con_rd-1. -! real,parameter:: con_eps =con_rd/con_rv -! real,parameter:: con_epsm1 =con_rd/con_rv-1 -! -! This version of INITPOST shows how to initialize, open, read from, and -! close a NetCDF dataset. In order to change it to read an internal (binary) -! dataset, do a global replacement of _ncd_ with _int_. - - real, parameter :: gravi = 1.0/grav - character(len=20) :: VarName, VcoordName - integer :: Status, fldsize, fldst, recn, recn_vvel - character startdate*19,SysDepInfo*80,cgar*1 - character startdate2(19)*4 -! -! NOTE: SOME INTEGER VARIABLES ARE READ INTO DUMMY ( A REAL ). THIS IS OK -! AS LONG AS REALS AND INTEGERS ARE THE SAME SIZE. -! -! ALSO, EXTRACT IS CALLED WITH DUMMY ( A REAL ) EVEN WHEN THE NUMBERS ARE -! INTEGERS - THIS IS OK AS LONG AS INTEGERS AND REALS ARE THE SAME SIZE. - LOGICAL RUNB,SINGLRST,SUBPOST,NEST,HYDRO,IOOMG,IOALL -! logical, parameter :: debugprint = .true., zerout = .false. - logical, parameter :: debugprint = .false., zerout = .false. - logical :: convert_rad_to_deg=.false. - CHARACTER*32 varcharval -! CHARACTER*40 CONTRL,FILALL,FILMST,FILTMP,FILTKE,FILUNV,FILCLD,FILRAD,FILSFC - CHARACTER*4 RESTHR - CHARACTER FNAME*255,ENVAR*50 - INTEGER IDATE(8),JDATE(8),JPDS(200),JGDS(200),KPDS(200),KGDS(200) -! LOGICAL*1 LB(IM,JM) -! -! INCLUDE COMMON BLOCKS. -! -! DECLARE VARIABLES. -! -! REAL fhour - integer nfhour ! forecast hour from nems io file - integer fhzero !bucket - real dtp !physics time step - REAL RINC(5) - - REAL DUMMY(IM,JM) -!jw - integer ii,jj,js,je,iyear,imn,iday,itmp,ioutcount,istatus, & - I,J,L,ll,k,kf,irtn,igdout,n,Index,nframe, & - nframed2,iunitd3d,ierr,idum,iret,nrec,idrt - integer ncid3d,ncid2d,varid,nhcas - real TSTART,TLMH,TSPH,ES,FACT,soilayert,soilayerb,zhour,dum, & - tvll,pmll,tv, tx1, tx2 - - character*20,allocatable :: recname(:) - integer, allocatable :: reclev(:), kmsk(:,:) - real, allocatable :: glat1d(:), glon1d(:), qstl(:) - real, allocatable :: wrk1(:,:), wrk2(:,:) - real, allocatable :: p2d(:,:), t2d(:,:), q2d(:,:), & - qs2d(:,:), cw2d(:,:), cfr2d(:,:) - real(kind=4),allocatable :: vcoord4(:,:,:) - real, dimension(lm+1) :: ak5, bk5 - real*8, allocatable :: pm2d(:,:), pi2d(:,:) - real, allocatable :: tmp(:) - real :: buf(im,jsta_2l:jend_2u) - real :: buf3d(im,jsta_2l:jend_2u,lm) - -! real buf(im,jsta_2l:jend_2u),bufsoil(im,nsoil,jsta_2l:jend_2u) & -! ,buf3d(im,jsta_2l:jend_2u,lm),buf3d2(im,lp1,jsta_2l:jend_2u) - - real LAT - integer isa, jsa, latghf, jtem, idvc, idsl, nvcoord, ip1, nn, npass - - integer, parameter :: npass2=5, npass3=30 - real, parameter :: third=1.0/3.0 - INTEGER, DIMENSION(2) :: ij4min, ij4max - REAL :: omgmin, omgmax - real, allocatable :: d2d(:,:), u2d(:,:), v2d(:,:), omga2d(:,:) - REAL, ALLOCATABLE :: ps2d(:,:),psx2d(:,:),psy2d(:,:) - real, allocatable :: div3d(:,:,:) - real(kind=4),allocatable :: vcrd(:,:) - real :: dum_const - -!*********************************************************************** -! START INIT HERE. -! - WRITE(6,*)'INITPOST: ENTER INITPOST_GFS_NETCDF_PARA' - WRITE(6,*)'me=',me, & - 'jsta_2l=',jsta_2l,'jend_2u=', & - jend_2u,'im=',im -! - isa = im / 2 - jsa = (jsta+jend) / 2 - -!$omp parallel do private(i,j) - do j = jsta_2l, jend_2u - do i=1,im - buf(i,j) = spval - enddo - enddo - - Status=nf90_get_att(ncid3d,nf90_global,'ak',ak5) - if(Status/=0)then - print*,'ak not found; assigning missing value' - ak5=spval - else - if(me==0)print*,'ak5= ',ak5 - end if - Status=nf90_get_att(ncid3d,nf90_global,'idrt',idrt) - if(Status/=0)then - print*,'idrt not in netcdf file,reading grid' - Status=nf90_get_att(ncid3d,nf90_global,'grid',varcharval) - if(Status/=0)then - print*,'idrt and grid not in netcdf file, set default to latlon' - idrt=0 - MAPTYPE=0 - else - if(trim(varcharval)=='rotated_latlon')then - MAPTYPE=207 - idrt=207 - Status=nf90_get_att(ncid3d,nf90_global,'cen_lon',dum_const) - if(Status/=0)then - print*,'cen_lon not found; assigning missing value' - cenlon=spval - else - if(dum_const<0.)then - cenlon=nint((dum_const+360.)*gdsdegr) - else - cenlon=dum_const*gdsdegr - end if - end if - Status=nf90_get_att(ncid3d,nf90_global,'cen_lat',dum_const) - if(Status/=0)then - print*,'cen_lat not found; assigning missing value' - cenlat=spval - else - cenlat=dum_const*gdsdegr - end if - - Status=nf90_get_att(ncid3d,nf90_global,'lon1',dum_const) - if(Status/=0)then - print*,'lonstart_r not found; assigning missing value' - lonstart_r=spval - else - if(dum_const<0.)then - lonstart_r=nint((dum_const+360.)*gdsdegr) - else - lonstart_r=dum_const*gdsdegr - end if - end if - Status=nf90_get_att(ncid3d,nf90_global,'lat1',dum_const) - if(Status/=0)then - print*,'latstart_r not found; assigning missing value' - latstart_r=spval - else - latstart_r=dum_const*gdsdegr - end if - - Status=nf90_get_att(ncid3d,nf90_global,'lon2',dum_const) - if(Status/=0)then - print*,'lonlast_r not found; assigning missing value' - lonlast_r=spval - else - if(dum_const<0.)then - lonlast_r=nint((dum_const+360.)*gdsdegr) - else - lonlast_r=dum_const*gdsdegr - end if - end if - Status=nf90_get_att(ncid3d,nf90_global,'lat2',dum_const) - if(Status/=0)then - print*,'latlast_r not found; assigning missing value' - latlast_r=spval - else - latlast_r=dum_const*gdsdegr - end if - - Status=nf90_get_att(ncid3d,nf90_global,'dlon',dum_const) - if(Status/=0)then - print*,'dlmd not found; assigning missing value' - dxval=spval - else - dxval=dum_const*gdsdegr - end if - Status=nf90_get_att(ncid3d,nf90_global,'dlat',dum_const) - if(Status/=0)then - print*,'dphd not found; assigning missing value' - dyval=spval - else - dyval=dum_const*gdsdegr - end if - - print*,'lonstart,latstart,cenlon,cenlat,dyval,dxval', & - lonstart,latstart,cenlon,cenlat,dyval,dxval - -! Jili Dong add support for regular lat lon (2019/03/22) start - else if(trim(varcharval)=='latlon')then - MAPTYPE=0 - idrt=0 - - Status=nf90_get_att(ncid3d,nf90_global,'lon1',dum_const) - if(Status/=0)then - print*,'lonstart not found; assigning missing value' - lonstart=spval - else - if(dum_const<0.)then - lonstart=nint((dum_const+360.)*gdsdegr) - else - lonstart=dum_const*gdsdegr - end if - end if - Status=nf90_get_att(ncid3d,nf90_global,'lat1',dum_const) - if(Status/=0)then - print*,'latstart not found; assigning missing value' - latstart=spval - else - latstart=dum_const*gdsdegr - end if - - Status=nf90_get_att(ncid3d,nf90_global,'lon2',dum_const) - if(Status/=0)then - print*,'lonlast not found; assigning missing value' - lonlast=spval - else - if(dum_const<0.)then - lonlast=nint((dum_const+360.)*gdsdegr) - else - lonlast=dum_const*gdsdegr - end if - end if - Status=nf90_get_att(ncid3d,nf90_global,'lat2',dum_const) - if(Status/=0)then - print*,'latlast not found; assigning missing value' - latlast=spval - else - latlast=dum_const*gdsdegr - end if - - Status=nf90_get_att(ncid3d,nf90_global,'dlon',dum_const) - if(Status/=0)then - print*,'dlmd not found; assigning missing value' - dxval=spval - else - dxval=dum_const*gdsdegr - end if - Status=nf90_get_att(ncid3d,nf90_global,'dlat',dum_const) - if(Status/=0)then - print*,'dphd not found; assigning missing value' - dyval=spval - else - dyval=dum_const*gdsdegr - end if - - print*,'lonstart,latstart,dyval,dxval', & - lonstart,lonlast,latstart,latlast,dyval,dxval - -! Jili Dong add support for regular lat lon (2019/03/22) end - - else if(trim(varcharval)=='gaussian')then - MAPTYPE=4 - idrt=4 - else ! setting default maptype - MAPTYPE=0 - idrt=0 - end if - end if !end reading grid - end if !end reading idrt - if(me==0)print*,'idrt MAPTYPE= ',idrt,MAPTYPE -! STEP 1. READ MODEL OUTPUT FILE -! -! -!*** -! -! LMH and LMV always = LM for sigma-type vert coord - -!$omp parallel do private(i,j) - do j = jsta_2l, jend_2u - do i = 1, im - LMV(i,j) = lm - LMH(i,j) = lm - end do - end do - -! HTM VTM all 1 for sigma-type vert coord - -!$omp parallel do private(i,j,l) - do l = 1, lm - do j = jsta_2l, jend_2u - do i = 1, im - HTM (i,j,l) = 1.0 - VTM (i,j,l) = 1.0 - end do - end do - end do - - Status=nf90_get_att(ncid3d,nf90_global,'nhcas',nhcas) - if(Status/=0)then - print*,'nhcas not in netcdf file, set default to nonhydro' - nhcas=0 - end if - if(me==0)print*,'nhcas= ',nhcas - if (nhcas == 0 ) then !non-hydrostatic case - nrec=15 - allocate (recname(nrec)) - recname=[character(len=20) :: 'ugrd','vgrd','spfh','tmp','o3mr', & - 'presnh','dzdt', 'clwmr','dpres', & - 'delz','icmr','rwmr', & - 'snmr','grle','cld_amt'] - else - nrec=8 - allocate (recname(nrec)) - recname=[character(len=20) :: 'ugrd','vgrd','tmp','spfh','o3mr', & - 'hypres', 'clwmr','dpres'] - endif - -! write(0,*)'nrec=',nrec - !allocate(recname(nrec),reclevtyp(nrec),reclev(nrec)) - allocate(glat1d(jm),glon1d(im)) - allocate(vcoord4(lm+1,3,2)) - -! hardwire idate for now -! idate=(/2017,08,07,00,0,0,0,0/) -! get cycle start time - Status=nf90_inq_varid(ncid3d,'time',varid) - if(Status/=0)then - print*,'time not in netcdf file, stopping' - STOP 1 - else - Status=nf90_get_att(ncid3d,varid,'units',varcharval) - if(Status/=0)then - print*,'time unit not available' - else - print*,'time unit read from netcdf file= ',varcharval -! assume use hours as unit -! idate_loc=index(varcharval,'since')+6 - read(varcharval,101)idate(1),idate(2),idate(3),idate(4),idate(5) - end if -! Status=nf90_inquire_dimension(ncid3d,varid,len=ntimes) -! allocate(fhours(ntimes)) -! status = nf90_inq_varid(ncid3d,varid,fhours) -! Status=nf90_get_var(ncid3d,varid,nfhour,start=(/1/), & -! count=(/1/)) -! if(Status/=0)then -! print*,'forecast hour not in netcdf file, stopping' -! STOP 1 -! end if - end if - 101 format(T13,i4,1x,i2,1x,i2,1x,i2,1x,i2) - print*,'idate= ',idate(1:5) -! get longitude - Status=nf90_inq_varid(ncid3d,'grid_xt',varid) - Status=nf90_inquire_variable(ncid3d,varid,ndims = numDims) - if(debugprint)print*,'number of dim for gdlon ',numDims - if(numDims==1)then - Status=nf90_get_var(ncid3d,varid,glon1d) - do j=jsta,jend - do i=1,im - gdlon(i,j) = real(glon1d(i),kind=4) - end do - end do - lonstart = nint(glon1d(1)*gdsdegr) - lonlast = nint(glon1d(im)*gdsdegr) - dxval = nint(abs(glon1d(1)-glon1d(2))*gdsdegr) - else if(numDims==2)then - Status=nf90_get_var(ncid3d,varid,dummy) - if(maxval(abs(dummy))<2.0*pi)convert_rad_to_deg=.true. - if(convert_rad_to_deg)then - do j=jsta,jend - do i=1,im - gdlon(i,j) = real(dummy(i,j),kind=4)*180./pi - end do - end do - else - do j=jsta,jend - do i=1,im - gdlon(i,j) = real(dummy(i,j),kind=4) - end do - end do - end if - if(convert_rad_to_deg)then - lonstart = nint(dummy(1,1)*gdsdegr)*180./pi - lonlast = nint(dummy(im,jm)*gdsdegr)*180./pi - dxval = nint(abs(dummy(1,1)-dummy(2,1))*gdsdegr)*180./pi - else - lonstart = nint(dummy(1,1)*gdsdegr) - lonlast = nint(dummy(im,jm)*gdsdegr) - dxval = nint(abs(dummy(1,1)-dummy(2,1))*gdsdegr) - end if - -! Jili Dong add support for regular lat lon (2019/03/22) start - if (MAPTYPE == 0) then - if(lonstart<0.)then - lonstart=lonstart+360.*gdsdegr - end if - if(lonlast<0.)then - lonlast=lonlast+360.*gdsdegr - end if - end if -! Jili Dong add support for regular lat lon (2019/03/22) end - - end if - print*,'lonstart,lonlast,dxval ',lonstart,lonlast,dxval -! get latitude - Status=nf90_inq_varid(ncid3d,'grid_yt',varid) - Status=nf90_inquire_variable(ncid3d,varid,ndims = numDims) - if(debugprint)print*,'number of dim for gdlat ',numDims - if(numDims==1)then - Status=nf90_get_var(ncid3d,varid,glat1d) - do j=jsta,jend - do i=1,im - gdlat(i,j) = real(glat1d(j),kind=4) - end do - end do - latstart = nint(glat1d(1)*gdsdegr) - latlast = nint(glat1d(jm)*gdsdegr) - dyval = nint(abs(glat1d(1)-glat1d(2))*gdsdegr) - else if(numDims==2)then - Status=nf90_get_var(ncid3d,varid,dummy) - if(maxval(abs(dummy))1000.)print*,'bad T ',t(i,j,l) - enddo - enddo - enddo - call read_netcdf_3d_para(ncid3d,im,jm,jsta,jsta_2l,jend,jend_2u, & - spval,recname(11),qqi(1,jsta_2l,1),lm) - call read_netcdf_3d_para(ncid3d,im,jm,jsta,jsta_2l,jend,jend_2u, & - spval,recname(12),qqr(1,jsta_2l,1),lm) - call read_netcdf_3d_para(ncid3d,im,jm,jsta,jsta_2l,jend,jend_2u, & - spval,recname(13),qqs(1,jsta_2l,1),lm) - call read_netcdf_3d_para(ncid3d,im,jm,jsta,jsta_2l,jend,jend_2u, & - spval,recname(14),qqg(1,jsta_2l,1),lm) - call read_netcdf_3d_para(ncid3d,im,jm,jsta,jsta_2l,jend,jend_2u, & - spval,recname(15),cfr(1,jsta_2l,1),lm) - -! calculate CWM from FV3 output - do l=1,lm - do j=jsta,jend - do i=1,im - cwm(i,j,l)=qqg(i,j,l)+qqs(i,j,l)+qqr(i,j,l)+qqi(i,j,l)+qqw(i,j,l) - enddo - enddo - if(debugprint)print*,'sample l,t,q,u,v,w,= ',isa,jsa,l & - ,t(isa,jsa,l),q(isa,jsa,l),uh(isa,jsa,l),vh(isa,jsa,l) & - ,wh(isa,jsa,l) - if(debugprint)print*,'sample l cwm for FV3',l, & - cwm(isa,jsa,l) - end do - -! surface pressure - VarName='pressfc' - call read_netcdf_2d_para(ncid3d,im,jsta,jsta_2l,jend,jend_2u, & - spval,VarName,pint(1,jsta_2l,lp1)) - do j=jsta,jend - do i=1,im -! if(pint(i,j,lp1)>1.0E6 .or. pint(1,jsta_2l,lp1)<50000.) & -! print*,'bad psfc ',i,j,pint(i,j,lp1) - end do - end do - if(debugprint)print*,'sample ',VarName,' =',pint(isa,jsa,lp1) - - pt = ak5(1) - - do j=jsta,jend - do i=1,im - pint(i,j,1)= pt - end do - end do - - do l=2,lp1 - do j=jsta,jend - do i=1,im - pint(i,j,l) = pint(i,j,l-1) + dpres(i,j,l-1) - enddo - enddo -! if (me == 0) print*,'sample model pint,pmid' ,ii,jj,l & -! ,pint(ii,jj,l),pmid(ii,jj,l) - end do - -!compute pmid from averaged two layer pint - do l=lm,1,-1 - do j=jsta,jend - do i=1,im - pmid(i,j,l) = 0.5*(pint(i,j,l)+pint(i,j,l+1)) - enddo - enddo - enddo - -! surface height from FV3 -! dong set missing value for zint -! zint=spval - VarName='hgtsfc' - call read_netcdf_2d_para(ncid3d,im,jsta,jsta_2l,jend,jend_2u, & - spval,VarName,zint(1,jsta_2l,lp1)) - if(debugprint)print*,'sample ',VarName,' =',zint(isa,jsa,lp1) - do j=jsta,jend - do i=1,im - if (zint(i,j,lp1) /= spval) then - fis(i,j) = zint(i,j,lp1) * grav - else - fis(i,j) = spval - endif - enddo - enddo - - do l=lm,1,-1 - do j=jsta,jend - do i=1,im - if(zint(i,j,l+1)/=spval .and. buf3d(i,j,l)/=spval)then -!make sure delz is positive - zint(i,j,l)=zint(i,j,l+1)+abs(buf3d(i,j,l)) -! if(zint(i,j,l)>1.0E6)print*,'bad H ',i,j,l,zint(i,j,l) - else - zint(i,j,l)=spval - end if - end do - end do - print*,'sample zint= ',isa,jsa,l,zint(isa,jsa,l) - end do - - do l=lp1,1,-1 - do j=jsta,jend - do i=1,im - alpint(i,j,l)=log(pint(i,j,l)) - end do - end do - end do - - do l=lm,1,-1 - do j=jsta,jend - do i=1,im - if(zint(i,j,l+1)/=spval .and. zint(i,j,l)/=spval & - .and. pmid(i,j,l)/=spval)then - zmid(i,j,l)=zint(i,j,l+1)+(zint(i,j,l)-zint(i,j,l+1))* & - (log(pmid(i,j,l))-alpint(i,j,l+1))/ & - (alpint(i,j,l)-alpint(i,j,l+1)) - if(zmid(i,j,l)>1.0E6)print*,'bad Hmid ',i,j,l,zmid(i,j,l) - else - zmid(i,j,l)=spval - endif - end do - end do - end do - - - pt = ak5(1) - -! - - deallocate (vcoord4) -!+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ - -! - -! done with 3d file, close it for now - Status=nf90_close(ncid3d) - deallocate(recname) - -! open flux file - Status = nf90_open(trim(fileNameFlux),ior(nf90_nowrite, nf90_mpiio), & - ncid2d,comm=mpi_comm_world,info=mpi_info_null) - if ( Status /= 0 ) then - print*,'error opening ',fileNameFlux, ' Status = ', Status - print*,'skip reading of flux file' - endif - -! IVEGSRC=1 for IGBP, 0 for USGS, 2 for UMD - VarName='IVEGSRC' - Status=nf90_get_att(ncid2d,nf90_global,'IVEGSRC',IVEGSRC) - if (Status /= 0) then - print*,VarName,' not found-Assigned 1 for IGBP as default' - IVEGSRC=1 - end if - if (me == 0) print*,'IVEGSRC= ',IVEGSRC - -! set novegtype based on vegetation classification - if(ivegsrc==2)then - novegtype=13 - else if(ivegsrc==1)then - novegtype=20 - else if(ivegsrc==0)then - novegtype=24 - end if - if (me == 0) print*,'novegtype= ',novegtype - - Status=nf90_get_att(ncid2d,nf90_global,'imp_physics',imp_physics) - if (Status /= 0) then - print*,VarName,' not found-Assigned 11 GFDL as default' - imp_physics=11 - end if - if (me == 0) print*,'MP_PHYSICS= ',imp_physics -! - Status=nf90_get_att(ncid2d,nf90_global,'fhzero',fhzero) - if (Status /= 0) then - print*,VarName,' not found-Assigned 3 hours as default' - fhzero=3 - end if - if (me == 0) print*,'fhzero= ',fhzero -! - Status=nf90_get_att(ncid2d,nf90_global,'dtp',dtp) - if (Status /= 0) then - print*,VarName,' not found-Assigned 90s as default' - dtp=90 - end if - if (me == 0) print*,'dtp= ',dtp -! Initializes constants for Ferrier microphysics - if(imp_physics==5 .or. imp_physics==85 .or. imp_physics==95) then - CALL MICROINIT(imp_physics) - end if - - tprec = float(fhzero) - if(ifhr>240)tprec=12. - tclod = tprec - trdlw = tprec - trdsw = tprec - tsrfc = tprec - tmaxmin = tprec - td3d = tprec - print*,'tprec = ',tprec - - -!Set REF_10CM as missning since gfs doesn't ouput it - do l=1,lm - do j=jsta,jend - do i=1,im - REF_10CM(i,j,l)=spval - enddo - enddo - enddo - - VarName='land' - call read_netcdf_2d_para(ncid2d,im,jsta,jsta_2l,jend,jend_2u, & - spval,VarName,sm) - if(debugprint)print*,'sample ',VarName,' =',sm(im/2,(jsta+jend)/2) - -!$omp parallel do private(i,j) - do j=jsta,jend - do i=1,im - if (sm(i,j) /= spval) sm(i,j) = 1.0 - sm(i,j) - enddo - enddo - -! sea ice mask - - VarName = 'icec' - call read_netcdf_2d_para(ncid2d,im,jsta,jsta_2l,jend,jend_2u, & - spval,VarName,sice) - if(debugprint)print*,'sample ',VarName,' = ',sice(isa,jsa) - -! where(sice /=spval .and. sice >=1.0)sm=0.0 !sea ice has sea -! mask=0 -! GFS flux files have land points with non-zero sea ice, per Iredell, -! these -! points have sea ice changed to zero, i.e., trust land mask more than -! sea ice -! where(sm/=spval .and. sm==0.0)sice=0.0 !specify sea ice=0 at land - -!$omp parallel do private(i,j) - do j=jsta,jend - do i=1,im - if (sm(i,j) /= spval .and. sm(i,j) == 0.0) sice(i,j) = 0.0 - enddo - enddo - - -! PBL height using nemsio - VarName = 'hpbl' - call read_netcdf_2d_para(ncid2d,im,jsta,jsta_2l,jend,jend_2u, & - spval,VarName,pblh) - if(debugprint)print*,'sample ',VarName,' = ',pblh(isa,jsa) - -! frictional velocity using nemsio - VarName='fricv' - call read_netcdf_2d_para(ncid2d,im,jsta,jsta_2l,jend,jend_2u, & - spval,VarName,ustar) -! if(debugprint)print*,'sample ',VarName,' = ',ustar(isa,jsa) - -! roughness length using getgb - VarName='sfcr' - call read_netcdf_2d_para(ncid2d,im,jsta,jsta_2l,jend,jend_2u, & - spval,VarName,z0) -! if(debugprint)print*,'sample ',VarName,' = ',z0(isa,jsa) - -! sfc exchange coeff - VarName='sfexc' - call read_netcdf_2d_para(ncid2d,im,jsta,jsta_2l,jend,jend_2u, & - spval,VarName,SFCEXC) - -! aerodynamic conductance - VarName='acond' - call read_netcdf_2d_para(ncid2d,im,jsta,jsta_2l,jend,jend_2u, & - spval,VarName,acond) - if(debugprint)print*,'sample ',VarName,' = ',acond(isa,jsa) - -! mid day avg albedo - VarName='albdo_ave' - call read_netcdf_2d_para(ncid2d,im,jsta,jsta_2l,jend,jend_2u, & - spval,VarName,avgalbedo) - if(debugprint)print*,'sample ',VarName,' = ',avgalbedo(isa,jsa) - do j=jsta,jend - do i=1,im - if (avgalbedo(i,j) /= spval) avgalbedo(i,j) = avgalbedo(i,j) * 0.01 - enddo - enddo - -! surface potential T using getgb - VarName='tmpsfc' - call read_netcdf_2d_para(ncid2d,im,jsta,jsta_2l,jend,jend_2u, & - spval,VarName,ths) - -! where(ths/=spval)ths=ths*(p1000/pint(:,:,lp1))**CAPA ! convert to THS - -!$omp parallel do private(i,j) - do j=jsta,jend - do i=1,im - if (ths(i,j) /= spval) then -! write(0,*)' i=',i,' j=',j,' ths=',ths(i,j),' pint=',pint(i,j,lp1) - ths(i,j) = ths(i,j) * (p1000/pint(i,j,lp1))**capa - endif - QS(i,j) = SPVAL ! GFS does not have surface specific humidity - twbs(i,j) = SPVAL ! GFS does not have inst sensible heat flux - qwbs(i,j) = SPVAL ! GFS does not have inst latent heat flux -!assign sst - if (sm(i,j) /= 0.0) then - sst(i,j) = ths(i,j) * (pint(i,j,lp1)/p1000)**capa - else - sst(i,j) = spval - endif - enddo - enddo - if(debugprint)print*,'sample ',VarName,' = ',ths(isa,jsa) - - -! GFS does not have time step and physics time step, make up ones since they -! are not really used anyway -! NPHS=1. -! DT=90. -! DTQ2 = DT * NPHS !MEB need to get physics DT - DTQ2 = DTP !MEB need to get physics DT - NPHS=1 - DT = DTQ2/NPHS !MEB need to get DT - TSPH = 3600./DT - -! convective precip in m per physics time step using getgb -! read 3 hour bucket - VarName='cpratb_ave' - call read_netcdf_2d_para(ncid2d,im,jsta,jsta_2l,jend,jend_2u, & - spval,VarName,avgcprate) -! where(avgcprate /= spval)avgcprate=avgcprate*dtq2/1000. ! convert to m -!$omp parallel do private(i,j) - do j=jsta,jend - do i=1,im - if (avgcprate(i,j) /= spval) avgcprate(i,j) = avgcprate(i,j) * (dtq2*0.001) - enddo - enddo -! if(debugprint)print*,'sample ',VarName,' = ',avgcprate(isa,jsa) - -! print*,'maxval CPRATE: ', maxval(CPRATE) - -! read continuous bucket - VarName='cprat_ave' - call read_netcdf_2d_para(ncid2d,im,jsta,jsta_2l,jend,jend_2u, & - spval,VarName,avgcprate_cont) -!$omp parallel do private(i,j) - do j=jsta,jend - do i=1,im - if (avgcprate_cont(i,j) /= spval) avgcprate_cont(i,j) = & - avgcprate_cont(i,j) * (dtq2*0.001) - enddo - enddo -! if(debugprint)print*,'sample ',VarName,' = ',avgcprate_cont(isa,jsa) - -! print*,'maxval CPRATE: ', maxval(CPRATE) - -! precip rate in m per physics time step using getgb - VarName='prateb_ave' - call read_netcdf_2d_para(ncid2d,im,jsta,jsta_2l,jend,jend_2u, & - spval,VarName,avgprec) -!$omp parallel do private(i,j) - do j=jsta,jend - do i=1,im - if(avgprec(i,j) /= spval)avgprec(i,j)=avgprec(i,j)*(dtq2*0.001) - enddo - enddo - - if(debugprint)print*,'sample ',VarName,' = ',avgprec(isa,jsa) - -! prec = avgprec !set avg cprate to inst one to derive other fields - - VarName='prate_ave' - call read_netcdf_2d_para(ncid2d,im,jsta,jsta_2l,jend,jend_2u, & - spval,VarName,avgprec_cont) -! where(avgprec /= spval)avgprec=avgprec*dtq2/1000. ! convert to m -!$omp parallel do private(i,j) - do j=jsta,jend - do i=1,im - if (avgprec_cont(i,j) /=spval)avgprec_cont(i,j)=avgprec_cont(i,j) & - * (dtq2*0.001) - enddo - enddo - - if(debugprint)print*,'sample ',VarName,' = ',avgprec_cont(isa,jsa) -! precip rate in m per physics time step - VarName='tprcp' - call read_netcdf_2d_para(ncid2d,im,jsta,jsta_2l,jend,jend_2u, & - spval,VarName,prec) -!$omp parallel do private(i,j) - do j=jsta,jend - do i=1,im - if (prec(i,j) /= spval) prec(i,j)=prec(i,j)* (dtq2*0.001) & - * 1000. / dtp - enddo - enddo - -! convective precip rate in m per physics time step - VarName='cnvprcp' - call read_netcdf_2d_para(ncid2d,im,jsta,jsta_2l,jend,jend_2u, & - spval,VarName,cprate) -!$omp parallel do private(i,j) - do j=jsta,jend - do i=1,im - if (cprate(i,j) /= spval) then - cprate(i,j) = max(0.,cprate(i,j)) * (dtq2*0.001) & - * 1000. / dtp - else - cprate(i,j) = 0. - endif - enddo - enddo - if(debugprint)print*,'sample ',VarName,' = ',cprate(isa,jsa) - -! GFS does not have accumulated total, gridscale, and convective precip, will use inst precip to derive in SURFCE.f - -! max hourly 1-km agl reflectivity -! VarName='refdmax' -! call read_netcdf_2d_scatter(me,ncid2d,1,im,jm,jsta,jsta_2l & -! ,jend_2u,MPI_COMM_COMP,icnt,idsp,spval,VarName,refd_max) -! if(debugprint)print*,'sample ',VarName,' = ',refd_max(isa,jsa) -! max hourly -10C reflectivity -! VarName='refdmax263k' -! call read_netcdf_2d_scatter(me,ncid2d,1,im,jm,jsta,jsta_2l & -! ,jend_2u,MPI_COMM_COMP,icnt,idsp,spval,VarName,refdm10c_max) -! if(debugprint)print*,'sample ',VarName,' = ',refdm10c_max(isa,jsa) - -! max hourly u comp of 10m agl wind -! VarName='u10max' -! call read_netcdf_2d_scatter(me,ncid2d,1,im,jm,jsta,jsta_2l & -! ,jend_2u,MPI_COMM_COMP,icnt,idsp,spval,VarName,u10max) -! if(debugprint)print*,'sample ',VarName,' = ',u10max(isa,jsa) -! max hourly v comp of 10m agl wind -! VarName='v10max' -! call read_netcdf_2d_scatter(me,ncid2d,1,im,jm,jsta,jsta_2l & -! ,jend_2u,MPI_COMM_COMP,icnt,idsp,spval,VarName,v10max) -! if(debugprint)print*,'sample ',VarName,' = ',v10max(isa,jsa) -! max hourly 10m agl wind speed -! VarName='spd10max' -! call read_netcdf_2d_scatter(me,ncid2d,1,im,jm,jsta,jsta_2l & -! ,jend_2u,MPI_COMM_COMP,icnt,idsp,spval,VarName,wspd10max) -! if(debugprint)print*,'sample ',VarName,' = ',wspd10max(isa,jsa) - - -! 2m T using nemsio - VarName='tmp2m' - call read_netcdf_2d_para(ncid2d,im,jsta,jsta_2l,jend,jend_2u, & - spval,VarName,tshltr) - if(debugprint)print*,'sample ',VarName,' = ',tshltr(isa,jsa) - -! inst snow water eqivalent using nemsio - VarName='weasd' - call read_netcdf_2d_para(ncid2d,im,jsta,jsta_2l,jend,jend_2u, & - spval,VarName,sno) -! mask water areas -!$omp parallel do private(i,j) - do j=jsta,jend - do i=1,im - if (sm(i,j) == 1.0 .and. sice(i,j)==0.) sno(i,j) = spval - enddo - enddo - if(debugprint)print*,'sample ',VarName,' = ',sno(isa,jsa) - -! ave snow cover - VarName='snowc_ave' - call read_netcdf_2d_para(ncid2d,im,jsta,jsta_2l,jend,jend_2u, & - spval,VarName,snoavg) -! snow cover is multipled by 100 in SURFCE before writing it out - do j=jsta,jend - do i=1,im - if (sm(i,j)==1.0 .and. sice(i,j)==0.) snoavg(i,j)=spval - if(snoavg(i,j)/=spval)snoavg(i,j)=snoavg(i,j)/100. - end do - end do - -! snow depth in mm using nemsio - VarName='snod' - call read_netcdf_2d_para(ncid2d,im,jsta,jsta_2l,jend,jend_2u, & - spval,VarName,si) -!$omp parallel do private(i,j) - do j=jsta,jend - do i=1,im - if (sm(i,j)==1.0 .and. sice(i,j)==0.) si(i,j)=spval - if (si(i,j) /= spval) si(i,j) = si(i,j) * 1000.0 - CLDEFI(i,j) = SPVAL ! GFS does not have convective cloud efficiency - lspa(i,j) = spval ! GFS does not have similated precip - TH10(i,j) = SPVAL ! GFS does not have 10 m theta - TH10(i,j) = SPVAL ! GFS does not have 10 m theta - Q10(i,j) = SPVAL ! GFS does not have 10 m humidity - ALBASE(i,j) = SPVAL ! GFS does not have snow free albedo - enddo - enddo - if(debugprint)print*,'sample ',VarName,' = ',si(isa,jsa) - -! 2m T using nemsio - VarName='tmp2m' - call read_netcdf_2d_para(ncid2d,im,jsta,jsta_2l,jend,jend_2u, & - spval,VarName,tshltr) - if(debugprint)print*,'sample ',VarName,' = ',tshltr(isa,jsa) - -! GFS does not have 2m pres, estimate it, also convert t to theta - Do j=jsta,jend - Do i=1,im - PSHLTR(I,J)=pint(I,J,lm+1)*EXP(-0.068283/tshltr(i,j)) - tshltr(i,j)= tshltr(i,j)*(p1000/PSHLTR(I,J))**CAPA ! convert to theta -! if (j == jm/2 .and. mod(i,50) == 0) -! + print*,'sample 2m T and P after scatter= ' -! + ,i,j,tshltr(i,j),pshltr(i,j) - end do - end do - -! 2m specific humidity using nemsio - VarName='spfh2m' - call read_netcdf_2d_para(ncid2d,im,jsta,jsta_2l,jend,jend_2u, & - spval,VarName,qshltr) - if(debugprint)print*,'sample ',VarName,' = ',qshltr(isa,jsa) - -! mid day avg albedo in fraction using nemsio -! VarName='albdosfc' -! call read_netcdf_2d_scatter(me,ncid2d,1,im,jm,jsta,jsta_2l & -! ,jend_2u,MPI_COMM_COMP,icnt,idsp,spval,VarName,avgalbedo) -!! where(avgalbedo /= spval)avgalbedo=avgalbedo/100. ! convert to fraction -!!$omp parallel do private(i,j) -! do j=jsta,jend -! do i=1,im -! if (avgalbedo(i,j) /= spval) avgalbedo(i,j) = avgalbedo(i,j) * 0.01 -! enddo -! enddo -! if(debugprint)print*,'sample ',VarName,' = ',avgalbedo(isa,jsa) - -! time averaged column cloud fractionusing nemsio - VarName='tcdc_aveclm' - call read_netcdf_2d_para(ncid2d,im,jsta,jsta_2l,jend,jend_2u, & - spval,VarName,avgtcdc) -! where(avgtcdc /= spval)avgtcdc=avgtcdc/100. ! convert to fraction -!$omp parallel do private(i,j) - do j=jsta,jend - do i=1,im - if (avgtcdc(i,j) /= spval) avgtcdc(i,j) = avgtcdc(i,j) * 0.01 - enddo - enddo - if(debugprint)print*,'sample ',VarName,' = ',avgtcdc(isa,jsa) - -! GFS probably does not use zenith angle -!$omp parallel do private(i,j) - do j=jsta_2l,jend_2u - do i=1,im - Czen(i,j) = spval - CZMEAN(i,j) = SPVAL - enddo - enddo - -! maximum snow albedo in fraction using nemsio - VarName='snoalb' - call read_netcdf_2d_para(ncid2d,im,jsta,jsta_2l,jend,jend_2u, & - spval,VarName,mxsnal) -! where(mxsnal /= spval)mxsnal=mxsnal/100. ! convert to fraction -!$omp parallel do private(i,j) - do j=jsta,jend - do i=1,im - if (mxsnal(i,j) /= spval) mxsnal(i,j) = mxsnal(i,j) * 0.01 - enddo - enddo -! if(debugprint)print*,'sample ',VarName,' = ',mxsnal(isa,jsa) - -! GFS probably does not use sigt4, set it to sig*t^4 -!$omp parallel do private(i,j,tlmh) - Do j=jsta,jend - Do i=1,im - TLMH = T(I,J,LM) * T(I,J,LM) - Sigt4(i,j) = 5.67E-8 * TLMH * TLMH - End do - End do - -! TG is not used, skip it for now - -! GFS does not have inst cloud fraction for high, middle, and low cloud -!$omp parallel do private(i,j) - do j=jsta_2l,jend_2u - do i=1,im - cfrach(i,j) = spval - cfracl(i,j) = spval - cfracm(i,j) = spval - enddo - enddo - -! ave high cloud fraction using nemsio - VarName='tcdc_avehcl' - call read_netcdf_2d_para(ncid2d,im,jsta,jsta_2l,jend,jend_2u, & - spval,VarName,avgcfrach) -! where(avgcfrach /= spval)avgcfrach=avgcfrach/100. ! convert to fraction -!$omp parallel do private(i,j) - do j=jsta,jend - do i=1,im - if (avgcfrach(i,j) /= spval) avgcfrach(i,j) = avgcfrach(i,j) * 0.01 - enddo - enddo - if(debugprint)print*,'sample ',VarName,' = ',avgcfrach(isa,jsa) - -! ave low cloud fraction using nemsio - VarName='tcdc_avelcl' - call read_netcdf_2d_para(ncid2d,im,jsta,jsta_2l,jend,jend_2u, & - spval,VarName,avgcfracl) -! where(avgcfracl /= spval)avgcfracl=avgcfracl/100. ! convert to fraction -!$omp parallel do private(i,j) - do j=jsta,jend - do i=1,im - if (avgcfracl(i,j) /= spval) avgcfracl(i,j) = avgcfracl(i,j) * 0.01 - enddo - enddo - if(debugprint)print*,'sample ',VarName,' = ',avgcfracl(isa,jsa) - -! ave middle cloud fraction using nemsio - VarName='tcdc_avemcl' - call read_netcdf_2d_para(ncid2d,im,jsta,jsta_2l,jend,jend_2u, & - spval,VarName,avgcfracm) -! where(avgcfracm /= spval)avgcfracm=avgcfracm/100. ! convert to fraction -!$omp parallel do private(i,j) - do j=jsta,jend - do i=1,im - if (avgcfracm(i,j) /= spval) avgcfracm(i,j) = avgcfracm(i,j) * 0.01 - enddo - enddo - if(debugprint)print*,'sample ',VarName,' = ',avgcfracm(isa,jsa) - -! inst convective cloud fraction using nemsio - VarName='tcdccnvcl' - call read_netcdf_2d_para(ncid2d,im,jsta,jsta_2l,jend,jend_2u, & - spval,VarName,cnvcfr) -! where(cnvcfr /= spval)cnvcfr=cnvcfr/100. ! convert to fraction -!$omp parallel do private(i,j) - do j=jsta,jend - do i=1,im - if (cnvcfr(i,j) /= spval) cnvcfr (i,j)= cnvcfr(i,j) * 0.01 - enddo - enddo -! if(debugprint)print*,'sample ',VarName,' = ',cnvcfr(isa,jsa) - -! slope type using nemsio - VarName='sltyp' - call read_netcdf_2d_para(ncid2d,im,jsta,jsta_2l,jend,jend_2u, & - spval,VarName,buf) -!$omp parallel do private(i,j) - do j = jsta_2l, jend_2u - do i=1,im - if (buf(i,j) < spval) then - islope(i,j) = nint(buf(i,j)) - else - islope(i,j) = 0 - endif - enddo - enddo -! if(debugprint)print*,'sample ',VarName,' = ',islope(isa,jsa) - -! plant canopy sfc wtr in m - VarName='cnwat' - call read_netcdf_2d_para(ncid2d,im,jsta,jsta_2l,jend,jend_2u, & - spval,VarName,cmc) -!$omp parallel do private(i,j) - do j=jsta,jend - do i=1,im - if (cmc(i,j) /= spval) cmc(i,j) = cmc(i,j) * 0.001 - if (sm(i,j) /= 0.0) cmc(i,j) = spval - enddo - enddo -! if(debugprint)print*,'sample ',VarName,' = ',cmc(isa,jsa) - -!$omp parallel do private(i,j) - do j=jsta_2l,jend_2u - do i=1,im - grnflx(i,j) = spval ! GFS does not have inst ground heat flux - enddo - enddo - -! frozen precip fraction using nemsio - VarName='cpofp' - call read_netcdf_2d_para(ncid2d,im,jsta,jsta_2l,jend,jend_2u, & - spval,VarName,sr) -!$omp parallel do private(i,j) - do j=jsta,jend - do i=1,im - if(sr(i,j) /= spval) then -!set range within (0,1) - sr(i,j)=min(1.,max(0.,sr(i,j))) - endif - enddo - enddo - -! sea ice skin temperature - VarName='tisfc' - call read_netcdf_2d_para(ncid2d,im,jsta,jsta_2l,jend,jend_2u, & - spval,VarName,ti) -!$omp parallel do private(i,j) - do j=jsta,jend - do i=1,im - if (sice(i,j) == spval .or. sice(i,j) == 0.) ti(i,j)=spval - enddo - enddo - -! vegetation fraction in fraction. using nemsio - VarName='veg' - call read_netcdf_2d_para(ncid2d,im,jsta,jsta_2l,jend,jend_2u, & - spval,VarName,vegfrc) -!$omp parallel do private(i,j) - do j=jsta,jend - do i=1,im - if (vegfrc(i,j) /= spval) then - vegfrc(i,j) = vegfrc(i,j) * 0.01 - else - vegfrc(i,j) = 0.0 - endif - enddo - enddo -! mask water areas -!$omp parallel do private(i,j) - do j=jsta,jend - do i=1,im - if (sm(i,j) /= 0.0) vegfrc(i,j) = spval - enddo - enddo -! if(debugprint)print*,'sample ',VarName,' = ',vegfrc(isa,jsa) - -! GFS doesn not yet output soil layer thickness, assign SLDPTH to be the same as nam - - SLDPTH(1) = 0.10 - SLDPTH(2) = 0.3 - SLDPTH(3) = 0.6 - SLDPTH(4) = 1.0 - -! liquid volumetric soil mpisture in fraction using nemsio - VarName='soill1' - call read_netcdf_2d_para(ncid2d,im,jsta,jsta_2l,jend,jend_2u, & - spval,VarName,sh2o(1,jsta_2l,1)) -! mask water areas -!$omp parallel do private(i,j) - do j=jsta,jend - do i=1,im - if (sm(i,j) /= 0.0) sh2o(i,j,1) = spval - enddo - enddo - if(debugprint)print*,'sample l',VarName,' = ',1,sh2o(isa,jsa,1) - - VarName='soill2' - call read_netcdf_2d_para(ncid2d,im,jsta,jsta_2l,jend,jend_2u, & - spval,VarName,sh2o(1,jsta_2l,2)) -! mask water areas -!$omp parallel do private(i,j) - do j=jsta,jend - do i=1,im - if (sm(i,j) /= 0.0) sh2o(i,j,2) = spval - enddo - enddo - if(debugprint)print*,'sample l',VarName,' = ',1,sh2o(isa,jsa,2) - - VarName='soill3' - call read_netcdf_2d_para(ncid2d,im,jsta,jsta_2l,jend,jend_2u, & - spval,VarName,sh2o(1,jsta_2l,3)) -! mask water areas -!$omp parallel do private(i,j) - do j=jsta,jend - do i=1,im - if (sm(i,j) /= 0.0) sh2o(i,j,3) = spval - enddo - enddo - if(debugprint)print*,'sample l',VarName,' = ',1,sh2o(isa,jsa,3) - - VarName='soill4' - call read_netcdf_2d_para(ncid2d,im,jsta,jsta_2l,jend,jend_2u, & - spval,VarName,sh2o(1,jsta_2l,4)) -! mask water areas -!$omp parallel do private(i,j) - do j=jsta,jend - do i=1,im - if (sm(i,j) /= 0.0) sh2o(i,j,4) = spval - enddo - enddo - if(debugprint)print*,'sample l',VarName,' = ',1,sh2o(isa,jsa,4) - -! volumetric soil moisture using nemsio - VarName='soilw1' - call read_netcdf_2d_para(ncid2d,im,jsta,jsta_2l,jend,jend_2u, & - spval,VarName,smc(1,jsta_2l,1)) -! mask water areas -!$omp parallel do private(i,j) - do j=jsta,jend - do i=1,im - if (sm(i,j) /= 0.0) smc(i,j,1) = spval - enddo - enddo - if(debugprint)print*,'sample l',VarName,' = ',1,smc(isa,jsa,1) - - VarName='soilw2' - call read_netcdf_2d_para(ncid2d,im,jsta,jsta_2l,jend,jend_2u, & - spval,VarName,smc(1,jsta_2l,2)) -! mask water areas -!$omp parallel do private(i,j) - do j=jsta,jend - do i=1,im - if (sm(i,j) /= 0.0) smc(i,j,2) = spval - enddo - enddo - if(debugprint)print*,'sample l',VarName,' = ',1,smc(isa,jsa,2) - - VarName='soilw3' - call read_netcdf_2d_para(ncid2d,im,jsta,jsta_2l,jend,jend_2u, & - spval,VarName,smc(1,jsta_2l,3)) -! mask water areas -!$omp parallel do private(i,j) - do j=jsta,jend - do i=1,im - if (sm(i,j) /= 0.0) smc(i,j,3) = spval - enddo - enddo - if(debugprint)print*,'sample l',VarName,' = ',1,smc(isa,jsa,3) - - VarName='soilw4' - call read_netcdf_2d_para(ncid2d,im,jsta,jsta_2l,jend,jend_2u, & - spval,VarName,smc(1,jsta_2l,4)) -! mask water areas -!$omp parallel do private(i,j) - do j=jsta,jend - do i=1,im - if (sm(i,j) /= 0.0) smc(i,j,4) = spval - enddo - enddo - if(debugprint)print*,'sample l',VarName,' = ',1,smc(isa,jsa,4) - -! soil temperature using nemsio - VarName='soilt1' - call read_netcdf_2d_para(ncid2d,im,jsta,jsta_2l,jend,jend_2u, & - spval,VarName,stc(1,jsta_2l,1)) -! mask open water areas, combine with sea ice tmp -!$omp parallel do private(i,j) - do j=jsta,jend - do i=1,im - if (sm(i,j) == 1.0 .and. sice(i,j) ==0.) stc(i,j,1) = spval - !if (sm(i,j) /= 0.0) stc(i,j,1) = spval - enddo - enddo - if(debugprint)print*,'sample l','stc',' = ',1,stc(isa,jsa,1) - - VarName='soilt2' - call read_netcdf_2d_para(ncid2d,im,jsta,jsta_2l,jend,jend_2u, & - spval,VarName,stc(1,jsta_2l,2)) -! mask open water areas, combine with sea ice tmp -!$omp parallel do private(i,j) - do j=jsta,jend - do i=1,im - if (sm(i,j) == 1.0 .and. sice(i,j) ==0.) stc(i,j,2) = spval - !if (sm(i,j) /= 0.0) stc(i,j,2) = spval - enddo - enddo - if(debugprint)print*,'sample stc = ',1,stc(isa,jsa,2) - - VarName='soilt3' - call read_netcdf_2d_para(ncid2d,im,jsta,jsta_2l,jend,jend_2u, & - spval,VarName,stc(1,jsta_2l,3)) -! mask open water areas, combine with sea ice tmp -!$omp parallel do private(i,j) - do j=jsta,jend - do i=1,im - if (sm(i,j) == 1.0 .and. sice(i,j) ==0.) stc(i,j,3) = spval - !if (sm(i,j) /= 0.0) stc(i,j,3) = spval - enddo - enddo - if(debugprint)print*,'sample stc = ',1,stc(isa,jsa,3) - - VarName='soilt4' - call read_netcdf_2d_para(ncid2d,im,jsta,jsta_2l,jend,jend_2u, & - spval,VarName,stc(1,jsta_2l,4)) -! mask open water areas, combine with sea ice tmp -!$omp parallel do private(i,j) - do j=jsta,jend - do i=1,im - if (sm(i,j) == 1.0 .and. sice(i,j) ==0.) stc(i,j,4) = spval - !if (sm(i,j) /= 0.0) stc(i,j,4) = spval - enddo - enddo - if(debugprint)print*,'sample stc = ',1,stc(isa,jsa,4) - -!$omp parallel do private(i,j) - do j=jsta,jend - do i=1,im - acfrcv(i,j) = spval ! GFS does not output time averaged convective and strat cloud fraction, set acfrcv to spval, ncfrcv to 1 - ncfrcv(i,j) = 1.0 - acfrst(i,j) = spval ! GFS does not output time averaged cloud fraction, set acfrst to spval, ncfrst to 1 - ncfrst(i,j) = 1.0 - bgroff(i,j) = spval ! GFS does not have UNDERGROUND RUNOFF - rlwtoa(i,j) = spval ! GFS does not have inst model top outgoing longwave - enddo - enddo -! trdlw(i,j) = 6.0 - ardlw = 1.0 ! GFS incoming sfc longwave has been averaged over 6 hr bucket, set ARDLW to 1 - -! time averaged incoming sfc longwave - VarName='dlwrf_ave' - call read_netcdf_2d_para(ncid2d,im,jsta,jsta_2l,jend,jend_2u, & - spval,VarName,alwin) - -! inst incoming sfc longwave - VarName='dlwrf' - call read_netcdf_2d_para(ncid2d,im,jsta,jsta_2l,jend,jend_2u, & - spval,VarName,rlwin) - -! time averaged outgoing sfc longwave - VarName='ulwrf_ave' - call read_netcdf_2d_para(ncid2d,im,jsta,jsta_2l,jend,jend_2u, & - spval,VarName,alwout) -! inst outgoing sfc longwave - VarName='ulwrf' - call read_netcdf_2d_para(ncid2d,im,jsta,jsta_2l,jend,jend_2u, & - spval,VarName,radot) - -! where(alwout /= spval) alwout=-alwout ! CLDRAD puts a minus sign before gribbing -!$omp parallel do private(i,j) - do j=jsta,jend - do i=1,im - if (alwout(i,j) /= spval) alwout(i,j) = -alwout(i,j) - enddo - enddo -! if(debugprint)print*,'sample l',VarName,' = ',1,alwout(isa,jsa) - -! time averaged outgoing model top longwave using gfsio - VarName='ulwrf_avetoa' - call read_netcdf_2d_para(ncid2d,im,jsta,jsta_2l,jend,jend_2u, & - spval,VarName,alwtoa) -! if(debugprint)print*,'sample l',VarName,' = ',1,alwtoa(isa,jsa) - -! GFS incoming sfc longwave has been averaged, set ARDLW to 1 - ardsw=1.0 -! trdsw=6.0 - -! time averaged incoming sfc shortwave - VarName='dswrf_ave' - call read_netcdf_2d_para(ncid2d,im,jsta,jsta_2l,jend,jend_2u, & - spval,VarName,aswin) -! if(debugprint)print*,'sample l',VarName,' = ',1,aswin(isa,jsa) - -! inst incoming sfc shortwave - VarName='dswrf' - call read_netcdf_2d_para(ncid2d,im,jsta,jsta_2l,jend,jend_2u, & - spval,VarName,rswin) - -! inst incoming clear sky sfc shortwave - VarName='csdlf' - call read_netcdf_2d_para(ncid2d,im,jsta,jsta_2l,jend,jend_2u, & - spval,VarName,rswinc) - -! time averaged incoming sfc uv-b using getgb - VarName='duvb_ave' - call read_netcdf_2d_para(ncid2d,im,jsta,jsta_2l,jend,jend_2u, & - spval,VarName,auvbin) -! if(debugprint)print*,'sample l',VarName,' = ',1,auvbin(isa,jsa) - -! time averaged incoming sfc clear sky uv-b using getgb - VarName='cduvb_ave' - call read_netcdf_2d_para(ncid2d,im,jsta,jsta_2l,jend,jend_2u, & - spval,VarName,auvbinc) -! if(debugprint)print*,'sample l',VarName,' = ',1,auvbinc(isa,jsa) - -! time averaged outgoing sfc shortwave using gfsio - VarName='uswrf_ave' - call read_netcdf_2d_para(ncid2d,im,jsta,jsta_2l,jend,jend_2u, & - spval,VarName,aswout) -! where(aswout /= spval) aswout=-aswout ! CLDRAD puts a minus sign before gribbing -!$omp parallel do private(i,j) - do j=jsta,jend - do i=1,im - if (aswout(i,j) /= spval) aswout(i,j) = -aswout(i,j) - enddo - enddo -! if(debugprint)print*,'sample l',VarName,' = ',1,aswout(isa,jsa) - -! inst outgoing sfc shortwave using gfsio - VarName='uswrf' - call read_netcdf_2d_para(ncid2d,im,jsta,jsta_2l,jend,jend_2u, & - spval,VarName,rswout) - -! time averaged model top incoming shortwave - VarName='dswrf_avetoa' - call read_netcdf_2d_para(ncid2d,im,jsta,jsta_2l,jend,jend_2u, & - spval,VarName,aswintoa) -! if(debugprint)print*,'sample l',VarName,' = ',1,aswintoa(isa,jsa) - -! time averaged model top outgoing shortwave - VarName='uswrf_avetoa' - call read_netcdf_2d_para(ncid2d,im,jsta,jsta_2l,jend,jend_2u, & - spval,VarName,aswtoa) -! if(debugprint)print*,'sample l',VarName,' = ',1,aswtoa(isa,jsa) - -! time averaged surface sensible heat flux, multiplied by -1 because wrf model flux -! has reversed sign convention using gfsio - VarName='shtfl_ave' - call read_netcdf_2d_para(ncid2d,im,jsta,jsta_2l,jend,jend_2u, & - spval,VarName,sfcshx) -! where (sfcshx /= spval)sfcshx=-sfcshx -!$omp parallel do private(i,j) - do j=jsta,jend - do i=1,im - if (sfcshx(i,j) /= spval) sfcshx(i,j) = -sfcshx(i,j) - enddo - enddo -! if(debugprint)print*,'sample l',VarName,' = ',1,sfcshx(isa,jsa) - -! inst surface sensible heat flux - VarName='shtfl' - call read_netcdf_2d_para(ncid2d,im,jsta,jsta_2l,jend,jend_2u, & - spval,VarName,twbs) -!$omp parallel do private(i,j) - do j=jsta,jend - do i=1,im - if (twbs(i,j) /= spval) twbs(i,j) = -twbs(i,j) - enddo - enddo - -! GFS surface flux has been averaged, set ASRFC to 1 - asrfc=1.0 -! tsrfc=6.0 - -! time averaged surface latent heat flux, multiplied by -1 because wrf model flux -! has reversed sign vonvention using gfsio - VarName='lhtfl_ave' - call read_netcdf_2d_para(ncid2d,im,jsta,jsta_2l,jend,jend_2u, & - spval,VarName,sfclhx) -! where (sfclhx /= spval)sfclhx=-sfclhx -!$omp parallel do private(i,j) - do j=jsta,jend - do i=1,im - if (sfclhx(i,j) /= spval) sfclhx(i,j) = -sfclhx(i,j) - enddo - enddo -! if(debugprint)print*,'sample l',VarName,' = ',1,sfclhx(isa,jsa) - -! inst surface latent heat flux - VarName='lhtfl' - call read_netcdf_2d_para(ncid2d,im,jsta,jsta_2l,jend,jend_2u, & - spval,VarName,qwbs) -!$omp parallel do private(i,j) - do j=jsta,jend - do i=1,im - if (qwbs(i,j) /= spval) qwbs(i,j) = -qwbs(i,j) - enddo - enddo - - if(me==0)print*,'rdaod= ',rdaod -! inst aod550 optical depth - if(rdaod) then - VarName='aod550' - call read_netcdf_2d_para(ncid2d,im,jsta,jsta_2l,jend,jend_2u, & - spval,VarName,aod550) - - VarName='du_aod550' - call read_netcdf_2d_para(ncid2d,im,jsta,jsta_2l,jend,jend_2u, & - spval,VarName,du_aod550) - - VarName='ss_aod550' - call read_netcdf_2d_para(ncid2d,im,jsta,jsta_2l,jend,jend_2u, & - spval,VarName,ss_aod550) - - VarName='su_aod550' - call read_netcdf_2d_para(ncid2d,im,jsta,jsta_2l,jend,jend_2u, & - spval,VarName,su_aod550) - - VarName='oc_aod550' - call read_netcdf_2d_para(ncid2d,im,jsta,jsta_2l,jend,jend_2u, & - spval,VarName,oc_aod550) - - VarName='bc_aod550' - call read_netcdf_2d_para(ncid2d,im,jsta,jsta_2l,jend,jend_2u, & - spval,VarName,bc_aod550) - endif !end if rdaod - - -! time averaged ground heat flux using nemsio - VarName='gflux_ave' - call read_netcdf_2d_para(ncid2d,im,jsta,jsta_2l,jend,jend_2u, & - spval,VarName,subshx) -! mask water areas -!$omp parallel do private(i,j) - do j=jsta,jend - do i=1,im - if (sm(i,j) == 1.0 .and. sice(i,j) ==0.) subshx(i,j) = spval - enddo - enddo -! if(debugprint)print*,'sample l',VarName,' = ',1,subshx(isa,jsa) - -! inst ground heat flux using nemsio - VarName='gflux' - call read_netcdf_2d_para(ncid2d,im,jsta,jsta_2l,jend,jend_2u, & - spval,VarName,grnflx) -! mask water areas -!$omp parallel do private(i,j) - do j=jsta,jend - do i=1,im - if (sm(i,j) == 1.0 .and. sice(i,j) ==0.) grnflx(i,j) = spval - enddo - enddo - -! time averaged zonal momentum flux using gfsio - VarName='uflx_ave' - call read_netcdf_2d_para(ncid2d,im,jsta,jsta_2l,jend,jend_2u, & - spval,VarName,sfcux) -! if(debugprint)print*,'sample l',VarName,' = ',1,sfcux(isa,jsa) - -! time averaged meridional momentum flux using nemsio - VarName='vflx_ave' - call read_netcdf_2d_para(ncid2d,im,jsta,jsta_2l,jend,jend_2u, & - spval,VarName,sfcvx) -! if(debugprint)print*,'sample l',VarName,' = ',1,sfcvx(isa,jsa) - -! dong read in inst surface flux -! inst zonal momentum flux using gfsio -! VarName='uflx' -! call read_netcdf_2d_scatter(me,ncid2d,1,im,jm,jsta,jsta_2l & -! ,jend_2u,MPI_COMM_COMP,icnt,idsp,spval,VarName,sfcuxi) -! if(debugprint)print*,'sample l',VarName,' = ',1,sfcuxi(isa,jsa) - -! inst meridional momentum flux using nemsio -! VarName='vflx' -! call read_netcdf_2d_scatter(me,ncid2d,1,im,jm,jsta,jsta_2l & -! ,jend_2u,MPI_COMM_COMP,icnt,idsp,spval,VarName,sfcvxi) -! if(debugprint)print*,'sample l',VarName,' = ',1,sfcvxi(isa,jsa) - - -!$omp parallel do private(i,j) - do j=jsta_2l,jend_2u - do i=1,im - sfcuvx(i,j) = spval ! GFS does not use total momentum flux - enddo - enddo - -! time averaged zonal gravity wave stress using nemsio - VarName='u-gwd_ave' - call read_netcdf_2d_para(ncid2d,im,jsta,jsta_2l,jend,jend_2u, & - spval,VarName,gtaux) -! if(debugprint)print*,'sample l',VarName,' = ',1,gtaux(isa,jsa) - -! time averaged meridional gravity wave stress using getgb - VarName='v-gwd_ave' - call read_netcdf_2d_para(ncid2d,im,jsta,jsta_2l,jend,jend_2u, & - spval,VarName,gtauy) -! if(debugprint)print*,'sample l',VarName,' = ',1,gtauy(isa,jsa) - -! time averaged accumulated potential evaporation - VarName='pevpr_ave' - call read_netcdf_2d_para(ncid2d,im,jsta,jsta_2l,jend,jend_2u, & - spval,VarName,avgpotevp) -! mask water areas -!$omp parallel do private(i,j) - do j=jsta,jend - do i=1,im - if (sm(i,j) == 1.0 .and. sice(i,j) ==0.) avgpotevp(i,j) = spval - enddo - enddo -! if(debugprint)print*,'sample l',VarName,' = ',1,potevp(isa,jsa) - -! inst potential evaporation - VarName='pevpr' - call read_netcdf_2d_para(ncid2d,im,jsta,jsta_2l,jend,jend_2u, & - spval,VarName,potevp) -! mask water areas -!$omp parallel do private(i,j) - do j=jsta,jend - do i=1,im - if (sm(i,j) == 1.0 .and. sice(i,j) ==0.) potevp(i,j) = spval - enddo - enddo - - do l=1,lm -!$omp parallel do private(i,j) - do j=jsta_2l,jend_2u - do i=1,im -! GFS does not have temperature tendency due to long wave radiation - rlwtt(i,j,l) = spval -! GFS does not have temperature tendency due to short wave radiation - rswtt(i,j,l) = spval -! GFS does not have temperature tendency due to latent heating from convection - tcucn(i,j,l) = spval - tcucns(i,j,l) = spval -! GFS does not have temperature tendency due to latent heating from grid scale - train(i,j,l) = spval - enddo - enddo - enddo - -! set avrain to 1 - avrain=1.0 - avcnvc=1.0 - theat=6.0 ! just in case GFS decides to output T tendency - -! 10 m u using nemsio - VarName='ugrd10m' - call read_netcdf_2d_para(ncid2d,im,jsta,jsta_2l,jend,jend_2u, & - spval,VarName,u10) - - do j=jsta,jend - do i=1,im - u10h(i,j)=u10(i,j) - end do - end do -! if(debugprint)print*,'sample l',VarName,' = ',1,u10(isa,jsa) - -! 10 m v using gfsio - VarName='vgrd10m' - call read_netcdf_2d_para(ncid2d,im,jsta,jsta_2l,jend,jend_2u, & - spval,VarName,v10) - - do j=jsta,jend - do i=1,im - v10h(i,j)=v10(i,j) - end do - end do -! if(debugprint)print*,'sample l',VarName,' = ',1,v10(isa,jsa) - -! vegetation type, it's in GFS surface file, hopefully will merge into gfsio soon - VarName='vtype' - call read_netcdf_2d_para(ncid2d,im,jsta,jsta_2l,jend,jend_2u, & - spval,VarName,buf) -! where (buf /= spval) -! ivgtyp=nint(buf) -! elsewhere -! ivgtyp=0 !need to feed reasonable value to crtm -! end where -!$omp parallel do private(i,j) - do j = jsta_2l, jend_2u - do i=1,im - if (buf(i,j) < spval) then - ivgtyp(i,j) = nint(buf(i,j)) - else - ivgtyp(i,j) = 0 - endif - enddo - enddo -! if(debugprint)print*,'sample l',VarName,' = ',1,ivgtyp(isa,jsa) - -! soil type, it's in GFS surface file, hopefully will merge into gfsio soon - VarName='sotyp' - call read_netcdf_2d_para(ncid2d,im,jsta,jsta_2l,jend,jend_2u, & - spval,VarName,buf) -!$omp parallel do private(i,j) - do j = jsta_2l, jend_2u - do i=1,im - if (buf(i,j) < spval) then - isltyp(i,j) = nint(buf(i,j)) - else - isltyp(i,j) = 0 !need to feed reasonable value to crtm - endif - enddo - enddo -! if(debugprint)print*,'sample l',VarName,' = ',1,isltyp(isa,jsa) - -!$omp parallel do private(i,j) - do j=jsta_2l,jend_2u - do i=1,im - smstav(i,j) = spval ! GFS does not have soil moisture availability -! smstot(i,j) = spval ! GFS does not have total soil moisture - sfcevp(i,j) = spval ! GFS does not have accumulated surface evaporation - acsnow(i,j) = spval ! GFS does not have averaged accumulated snow - acsnom(i,j) = spval ! GFS does not have snow melt -! sst(i,j) = spval ! GFS does not have sst???? - thz0(i,j) = ths(i,j) ! GFS does not have THZ0, use THS to substitute - qz0(i,j) = spval ! GFS does not output humidity at roughness length - uz0(i,j) = spval ! GFS does not output u at roughness length - vz0(i,j) = spval ! GFS does not output humidity at roughness length - enddo - enddo - do l=1,lm -!$omp parallel do private(i,j) - do j=jsta_2l,jend_2u - do i=1,im - EL_PBL(i,j,l) = spval ! GFS does not have mixing length - exch_h(i,j,l) = spval ! GFS does not output exchange coefficient - enddo - enddo - enddo -! if(debugprint)print*,'sample l',VarName,' = ',1,thz0(isa,jsa) - -! retrieve inst convective cloud top, GFS has cloud top pressure instead of index, -! will need to modify CLDRAD.f to use pressure directly instead of index -! VarName='pres' -! VcoordName='convect-cld top' -! l=1 -! if(debugprint)print*,'sample l',VarName,' = ',1,ptop(isa,jsa) - VarName='prescnvclt' - call read_netcdf_2d_para(ncid2d,im,jsta,jsta_2l,jend,jend_2u, & - spval,VarName,ptop) - - -!$omp parallel do private(i,j) - do j=jsta,jend - do i=1,im - htop(i,j) = spval - if(ptop(i,j) <= 0.0) ptop(i,j) = spval - enddo - enddo - do j=jsta,jend - do i=1,im - if(ptop(i,j) < spval)then - do l=1,lm - if(ptop(i,j) <= pmid(i,j,l))then - htop(i,j) = l -! if(i==ii .and. j==jj)print*,'sample ptop,pmid pmid-1,pint= ', & -! ptop(i,j),pmid(i,j,l),pmid(i,j,l-1),pint(i,j,l),htop(i,j) - exit - end if - end do - end if - end do - end do - -! retrieve inst convective cloud bottom, GFS has cloud top pressure instead of index, -! will need to modify CLDRAD.f to use pressure directly instead of index - VarName='prescnvclb' - call read_netcdf_2d_para(ncid2d,im,jsta,jsta_2l,jend,jend_2u, & - spval,VarName,pbot) -! if(debugprint)print*,'sample l',VarName,VcoordName,' = ',1,pbot(isa,jsa) -!$omp parallel do private(i,j) - do j=jsta,jend - do i=1,im - hbot(i,j) = spval - if(pbot(i,j) <= 0.0) pbot(i,j) = spval - enddo - enddo - do j=jsta,jend - do i=1,im -! if(.not.lb(i,j))print*,'false bitmask for pbot at ' -! + ,i,j,pbot(i,j) - if(pbot(i,j) < spval)then - do l=lm,1,-1 - if(pbot(i,j) >= pmid(i,j,l)) then - hbot(i,j) = l -! if(i==ii .and. j==jj)print*,'sample pbot,pmid= ', & -! pbot(i,j),pmid(i,j,l),hbot(i,j) - exit - end if - end do - end if - end do - end do - if(debugprint)print*,'sample hbot = ',hbot(isa,jsa) -! retrieve time averaged low cloud top pressure using nemsio - VarName='pres_avelct' - call read_netcdf_2d_para(ncid2d,im,jsta,jsta_2l,jend,jend_2u, & - spval,VarName,ptopl) -! if(debugprint)print*,'sample l',VarName,' = ',1,ptopl(isa,jsa) - -! retrieve time averaged low cloud bottom pressure using nemsio - VarName='pres_avelcb' - call read_netcdf_2d_para(ncid2d,im,jsta,jsta_2l,jend,jend_2u, & - spval,VarName,pbotl) -! if(debugprint)print*,'sample l',VarName,' = ',1,pbotl(isa,jsa) - -! retrieve time averaged low cloud top temperature using nemsio - VarName='tmp_avelct' - call read_netcdf_2d_para(ncid2d,im,jsta,jsta_2l,jend,jend_2u, & - spval,VarName,Ttopl) -! if(debugprint)print*,'sample l',VcoordName,VarName,' = ',1,Ttopl(isa,jsa) - -! retrieve time averaged middle cloud top pressure using nemsio - VarName='pres_avemct' - call read_netcdf_2d_para(ncid2d,im,jsta,jsta_2l,jend,jend_2u, & - spval,VarName,ptopm) -! if(debugprint)print*,'sample l',VcoordName,VarName,' = ',1,ptopm(isa,jsa) - -! retrieve time averaged middle cloud bottom pressure using nemsio - VarName='pres_avemcb' - call read_netcdf_2d_para(ncid2d,im,jsta,jsta_2l,jend,jend_2u, & - spval,VarName,pbotm) -! if(debugprint)print*,'sample l',VcoordName,VarName,' = ',1,pbotm(isa,jsa) - -! retrieve time averaged middle cloud top temperature using nemsio - VarName='tmp_avemct' - call read_netcdf_2d_para(ncid2d,im,jsta,jsta_2l,jend,jend_2u, & - spval,VarName,Ttopm) -! if(debugprint)print*,'sample l',VcoordName,VarName,' = ',1,Ttopm(isa,jsa) - -! retrieve time averaged high cloud top pressure using nemsio ********* - VarName='pres_avehct' - call read_netcdf_2d_para(ncid2d,im,jsta,jsta_2l,jend,jend_2u, & - spval,VarName,ptoph) -! if(debugprint)print*,'sample l',VcoordName,VarName,' = ',1,ptoph(isa,jsa) - -! retrieve time averaged high cloud bottom pressure using nemsio - VarName='pres_avehcb' - call read_netcdf_2d_para(ncid2d,im,jsta,jsta_2l,jend,jend_2u, & - spval,VarName,pboth) -! if(debugprint)print*,'sample l',VcoordName,VarName,' = ',1,pboth(isa,jsa) - -! retrieve time averaged high cloud top temperature using nemsio - VarName='tmp_avehct' - call read_netcdf_2d_para(ncid2d,im,jsta,jsta_2l,jend,jend_2u, & - spval,VarName,Ttoph) -! if(debugprint)print*,'sample l',VcoordName,VarName,' = ',1,Ttoph(isa,jsa) - -! retrieve boundary layer cloud cover using nemsio - VarName='tcdc_avebndcl' - call read_netcdf_2d_para(ncid2d,im,jsta,jsta_2l,jend,jend_2u, & - spval,VarName,pblcfr) -! if(debugprint)print*,'sample l',VcoordName,VarName,' = ', 1,pblcfr(isa,jsa) -! where (pblcfr /= spval)pblcfr=pblcfr/100. ! convert to fraction -!$omp parallel do private(i,j) - do j = jsta_2l, jend_2u - do i=1,im - if (pblcfr(i,j) < spval) pblcfr(i,j) = pblcfr(i,j) * 0.01 - enddo - enddo - -! retrieve cloud work function - VarName='cwork_aveclm' - call read_netcdf_2d_para(ncid2d,im,jsta,jsta_2l,jend,jend_2u, & - spval,VarName,cldwork) -! if(debugprint)print*,'sample l',VcoordName,VarName,' = ', 1,cldwork(isa,jsa) - -! accumulated total (base+surface) runoff - VarName='watr_acc' - call read_netcdf_2d_para(ncid2d,im,jsta,jsta_2l,jend,jend_2u, & - spval,VarName,runoff) -! mask water areas -!$omp parallel do private(i,j) - do j=jsta,jend - do i=1,im - if (sm(i,j) /= 0.0) runoff(i,j) = spval - enddo - enddo -! if(debugprint)print*,'sample l',VcoordName,VarName,' = ', 1,runoff(isa,jsa) - -! retrieve shelter max temperature using nemsio - VarName='tmax_max2m' - call read_netcdf_2d_para(ncid2d,im,jsta,jsta_2l,jend,jend_2u, & - spval,VarName,maxtshltr) - -! retrieve shelter min temperature using nemsio - VarName='tmin_min2m' - call read_netcdf_2d_para(ncid2d,im,jsta,jsta_2l,jend,jend_2u, & - spval,VarName,mintshltr) -! if(debugprint)print*,'sample l',VcoordName,VarName,' = ', & -! 1,mintshltr(im/2,(jsta+jend)/2) - -! retrieve shelter max RH -! VarName='rh02max' -! call read_netcdf_2d_scatter(me,ncid2d,1,im,jm,jsta,jsta_2l & -! ,jend_2u,MPI_COMM_COMP,icnt,idsp,spval,VarName,maxrhshltr) - -! retrieve shelter min temperature using nemsio -! VarName='rh02min' -! call read_netcdf_2d_scatter(me,ncid2d,1,im,jm,jsta,jsta_2l & -! ,jend_2u,MPI_COMM_COMP,icnt,idsp,spval,VarName,minrhshltr) -! if(debugprint)print*,'sample l',VcoordName,VarName,' = ', & -! 1,mintshltr(im/2,(jsta+jend)/2) - -!$omp parallel do private(i,j) - do j=jsta_2l,jend_2u - do i=1,im - MAXRHSHLTR(i,j) = SPVAL - MINRHSHLTR(i,j) = SPVAL - enddo - enddo - -! retrieve ice thickness using nemsio - VarName='icetk' - call read_netcdf_2d_para(ncid2d,im,jsta,jsta_2l,jend,jend_2u, & - spval,VarName,dzice) -! if(debugprint)print*,'sample l',VcoordName,VarName,' = ', 1,dzice(isa,jsa) - -! retrieve wilting point using nemsio - VarName='wilt' - call read_netcdf_2d_para(ncid2d,im,jsta,jsta_2l,jend,jend_2u, & - spval,VarName,smcwlt) -! mask water areas -!$omp parallel do private(i,j) - do j=jsta,jend - do i=1,im - if (sm(i,j) /= 0.0) smcwlt(i,j) = spval - enddo - enddo -! if(debugprint)print*,'sample l',VcoordName,VarName,' = ', 1,smcwlt(isa,jsa) - -! retrieve sunshine duration using nemsio - VarName='sunsd_acc' - call read_netcdf_2d_para(ncid2d,im,jsta,jsta_2l,jend,jend_2u, & - spval,VarName,suntime) - -! retrieve field capacity using nemsio - VarName='fldcp' - call read_netcdf_2d_para(ncid2d,im,jsta,jsta_2l,jend,jend_2u, & - spval,VarName,fieldcapa) -! mask water areas -!$omp parallel do private(i,j) - do j=jsta,jend - do i=1,im - if (sm(i,j) /= 0.0) fieldcapa(i,j) = spval - enddo - enddo -! if(debugprint)print*,'sample l',VcoordName,VarName,' = ', 1,fieldcapa(isa,jsa) - -! retrieve time averaged surface visible beam downward solar flux - VarName='vbdsf_ave' - call read_netcdf_2d_para(ncid2d,im,jsta,jsta_2l,jend,jend_2u, & - spval,VarName,avisbeamswin) - l=1 - -! retrieve time averaged surface visible diffuse downward solar flux - VarName='vddsf_ave' - call read_netcdf_2d_para(ncid2d,im,jsta,jsta_2l,jend,jend_2u, & - spval,VarName,avisdiffswin) - -! retrieve time averaged surface near IR beam downward solar flux - VarName='nbdsf_ave' - call read_netcdf_2d_para(ncid2d,im,jsta,jsta_2l,jend,jend_2u, & - spval,VarName,airbeamswin) - -! retrieve time averaged surface near IR diffuse downward solar flux - VarName='nddsf_ave' - call read_netcdf_2d_para(ncid2d,im,jsta,jsta_2l,jend,jend_2u, & - spval,VarName,airdiffswin) - -! retrieve time averaged surface clear sky outgoing LW - VarName='csulf' - call read_netcdf_2d_para(ncid2d,im,jsta,jsta_2l,jend,jend_2u, & - spval,VarName,alwoutc) - -! retrieve time averaged TOA clear sky outgoing LW - VarName='csulftoa' - call read_netcdf_2d_para(ncid2d,im,jsta,jsta_2l,jend,jend_2u, & - spval,VarName,alwtoac) - -! retrieve time averaged surface clear sky outgoing SW - VarName='csusf' - call read_netcdf_2d_para(ncid2d,im,jsta,jsta_2l,jend,jend_2u, & - spval,VarName,aswoutc) - -! retrieve time averaged TOA clear sky outgoing LW - VarName='csusftoa' - call read_netcdf_2d_para(ncid2d,im,jsta,jsta_2l,jend,jend_2u, & - spval,VarName,aswtoac) - -! retrieve time averaged surface clear sky incoming LW - VarName='csdlf' - call read_netcdf_2d_para(ncid2d,im,jsta,jsta_2l,jend,jend_2u, & - spval,VarName,alwinc) - -! retrieve time averaged surface clear sky incoming SW - VarName='csdsf' - call read_netcdf_2d_para(ncid2d,im,jsta,jsta_2l,jend,jend_2u, & - spval,VarName,aswinc) - -! retrieve shelter max specific humidity using nemsio - VarName='spfhmax_max2m' - call read_netcdf_2d_para(ncid2d,im,jsta,jsta_2l,jend,jend_2u, & - spval,VarName,maxqshltr) -! if(debugprint)print*,'sample l',VcoordName,VarName,' = ', -! 1,maxqshltr(isa,jsa) - -! retrieve shelter min temperature using nemsio - VarName='spfhmin_min2m' - call read_netcdf_2d_para(ncid2d,im,jsta,jsta_2l,jend,jend_2u, & - spval,VarName,minqshltr) - -! retrieve storm runoff using nemsio - VarName='ssrun_acc' - call read_netcdf_2d_para(ncid2d,im,jsta,jsta_2l,jend,jend_2u, & - spval,VarName,SSROFF) -! mask water areas -!$omp parallel do private(i,j) - do j=jsta,jend - do i=1,im - if (sm(i,j) /= 0.0) ssroff(i,j) = spval - enddo - enddo - -! retrieve direct soil evaporation - VarName='evbs_ave' - call read_netcdf_2d_para(ncid2d,im,jsta,jsta_2l,jend,jend_2u, & - spval,VarName,avgedir) -! mask water areas -!$omp parallel do private(i,j) - do j=jsta,jend - do i=1,im - if (sm(i,j) /= 0.0) avgedir(i,j) = spval - enddo - enddo - -! retrieve CANOPY WATER EVAP - VarName='evcw_ave' - call read_netcdf_2d_para(ncid2d,im,jsta,jsta_2l,jend,jend_2u, & - spval,VarName,avgecan) -! mask water areas -!$omp parallel do private(i,j) - do j=jsta,jend - do i=1,im - if (sm(i,j) /= 0.0) avgecan(i,j) = spval - enddo - enddo - -! retrieve PLANT TRANSPIRATION - VarName='trans_ave' - call read_netcdf_2d_para(ncid2d,im,jsta,jsta_2l,jend,jend_2u, & - spval,VarName,avgetrans) -! mask water areas -!$omp parallel do private(i,j) - do j=jsta,jend - do i=1,im - if (sm(i,j) /= 0.0) avgetrans(i,j) = spval - enddo - enddo - -! retrieve snow sublimation - VarName='sbsno_ave' - call read_netcdf_2d_para(ncid2d,im,jsta,jsta_2l,jend,jend_2u, & - spval,VarName,avgesnow) -! mask water areas -!$omp parallel do private(i,j) - do j=jsta,jend - do i=1,im - if (sm(i,j)==1.0 .and. sice(i,j)==0.) avgesnow(i,j)=spval - enddo - enddo - -! retrive total soil moisture - VarName='soilm' - call read_netcdf_2d_para(ncid2d,im,jsta,jsta_2l,jend,jend_2u, & - spval,VarName,smstot) -! mask water areas -!$omp parallel do private(i,j) - do j=jsta,jend - do i=1,im - if (sm(i,j) /= 0.0) smstot(i,j) = spval - enddo - enddo - -! retrieve snow phase change heat flux - VarName='snohf' - call read_netcdf_2d_para(ncid2d,im,jsta,jsta_2l,jend,jend_2u, & - spval,VarName,snopcx) -! mask water areas -!$omp parallel do private(i,j) - do j=jsta,jend - do i=1,im - if (sm(i,j) /= 0.0) snopcx(i,j) = spval - enddo - enddo - -! GFS does not have deep convective cloud top and bottom fields - -!$omp parallel do private(i,j) - do j=jsta,jend - do i=1,im - HTOPD(i,j) = SPVAL - HBOTD(i,j) = SPVAL - HTOPS(i,j) = SPVAL - HBOTS(i,j) = SPVAL - CUPPT(i,j) = SPVAL - enddo - enddo - -! done with flux file, close it for now - Status=nf90_close(ncid2d) -! deallocate(tmp,recname,reclevtyp,reclev) - -! pos east -! call collect_loc(gdlat,dummy) -! if(me == 0)then -! latstart = nint(dummy(1,1)*gdsdegr) -! latlast = nint(dummy(im,jm)*gdsdegr) -! print*,'laststart,latlast B bcast= ',latstart,latlast,'gdsdegr=',gdsdegr,& -! 'dummy(1,1)=',dummy(1,1),dummy(im,jm),'gdlat=',gdlat(1,1) -! end if -! call mpi_bcast(latstart,1,MPI_INTEGER,0,mpi_comm_comp,irtn) -! call mpi_bcast(latlast,1,MPI_INTEGER,0,mpi_comm_comp,irtn) -! write(6,*) 'laststart,latlast,me A calling bcast=',latstart,latlast,me -! call collect_loc(gdlon,dummy) -! if(me == 0)then -! lonstart = nint(dummy(1,1)*gdsdegr) -! lonlast = nint(dummy(im,jm)*gdsdegr) -! end if -! call mpi_bcast(lonstart,1,MPI_INTEGER,0,mpi_comm_comp,irtn) -! call mpi_bcast(lonlast, 1,MPI_INTEGER,0,mpi_comm_comp,irtn) - -! write(6,*)'lonstart,lonlast A calling bcast=',lonstart,lonlast -! - -! generate look up table for lifted parcel calculations - - THL = 210. - PLQ = 70000. - pt_TBL = 10000. ! this is for 100 hPa added by Moorthi - - CALL TABLE(PTBL,TTBL,PT_TBL, & - RDQ,RDTH,RDP,RDTHE,PL,THL,QS0,SQS,STHE,THE0) - - CALL TABLEQ(TTBLQ,RDPQ,RDTHEQ,PLQ,THL,STHEQ,THE0Q) - -! -! - IF(ME == 0)THEN - WRITE(6,*)' SPL (POSTED PRESSURE LEVELS) BELOW: ' - WRITE(6,51) (SPL(L),L=1,LSM) - 50 FORMAT(14(F4.1,1X)) - 51 FORMAT(8(F8.1,1X)) - ENDIF -! -!$omp parallel do private(l) - DO L = 1,LSM - ALSL(L) = LOG(SPL(L)) - END DO -! -!HC WRITE IGDS OUT FOR WEIGHTMAKER TO READ IN AS KGDSIN - if(me == 0)then - print*,'writing out igds' - igdout = 110 -! open(igdout,file='griddef.out',form='unformatted' -! + ,status='unknown') - if(maptype == 1)THEN ! Lambert conformal - WRITE(igdout)3 - WRITE(6,*)'igd(1)=',3 - WRITE(igdout)im - WRITE(igdout)jm - WRITE(igdout)LATSTART - WRITE(igdout)LONSTART - WRITE(igdout)8 - WRITE(igdout)CENLON - WRITE(igdout)DXVAL - WRITE(igdout)DYVAL - WRITE(igdout)0 - WRITE(igdout)64 - WRITE(igdout)TRUELAT2 - WRITE(igdout)TRUELAT1 - WRITE(igdout)255 - ELSE IF(MAPTYPE == 2)THEN !Polar stereographic - WRITE(igdout)5 - WRITE(igdout)im - WRITE(igdout)jm - WRITE(igdout)LATSTART - WRITE(igdout)LONSTART - WRITE(igdout)8 - WRITE(igdout)CENLON - WRITE(igdout)DXVAL - WRITE(igdout)DYVAL - WRITE(igdout)0 - WRITE(igdout)64 - WRITE(igdout)TRUELAT2 !Assume projection at +-90 - WRITE(igdout)TRUELAT1 - WRITE(igdout)255 - ! Note: The calculation of the map scale factor at the standard - ! lat/lon and the PSMAPF - ! Get map factor at 60 degrees (N or S) for PS projection, which will - ! be needed to correctly define the DX and DY values in the GRIB GDS - if (TRUELAT1 < 0.) THEN - LAT = -60. - else - LAT = 60. - end if - - CALL MSFPS (LAT,TRUELAT1*0.001,PSMAPF) - - ELSE IF(MAPTYPE == 3) THEN !Mercator - WRITE(igdout)1 - WRITE(igdout)im - WRITE(igdout)jm - WRITE(igdout)LATSTART - WRITE(igdout)LONSTART - WRITE(igdout)8 - WRITE(igdout)latlast - WRITE(igdout)lonlast - WRITE(igdout)TRUELAT1 - WRITE(igdout)0 - WRITE(igdout)64 - WRITE(igdout)DXVAL - WRITE(igdout)DYVAL - WRITE(igdout)255 - ELSE IF(MAPTYPE == 0 .OR. MAPTYPE == 203)THEN !A STAGGERED E-GRID - WRITE(igdout)203 - WRITE(igdout)im - WRITE(igdout)jm - WRITE(igdout)LATSTART - WRITE(igdout)LONSTART - WRITE(igdout)136 - WRITE(igdout)CENLAT - WRITE(igdout)CENLON - WRITE(igdout)DXVAL - WRITE(igdout)DYVAL - WRITE(igdout)64 - WRITE(igdout)0 - WRITE(igdout)0 - WRITE(igdout)0 - END IF - end if -! -! - - RETURN - END - - subroutine read_netcdf_3d_para(ncid,im,jm,jsta,jsta_2l,jend,jend_2u, & - spval,varname,buf,lm) - - use netcdf - implicit none - INCLUDE "mpif.h" - - character(len=20),intent(in) :: varname - real,intent(in) :: spval - integer,intent(in) :: ncid,im,jm,lm,jsta_2l,jend_2u,jsta,jend - real,intent(out) :: buf(im,jsta_2l:jend_2u,lm) - integer :: varid,iret,jj,i,j,l,kk - integer :: start(3), count(3), stride(3) - - iret = nf90_inq_varid(ncid,trim(varname),varid) - if (iret /= 0) then - print*,VarName," not found -Assigned missing values" -!$omp parallel do private(i,j,l) - do l=1,lm - do j=jsta,jend - do i=1,im - buf(i,j,l)=spval - enddo - enddo - enddo - else - start = (/1,jsta,1/) - jj=jend-jsta+1 - count = (/im,jj,lm/) - iret = nf90_get_var(ncid,varid,buf(1:im,jsta:jend,1:lm),start=start,count=count) - endif - - end subroutine read_netcdf_3d_para - - subroutine read_netcdf_2d_para(ncid,im,jsta,jsta_2l,jend,jend_2u, & - spval,VarName,buf) - - use netcdf - implicit none - INCLUDE "mpif.h" - - character(len=20),intent(in) :: VarName - real,intent(in) :: spval - integer,intent(in) :: ncid,im,jsta_2l,jend_2u,jsta,jend - real,intent(out) :: buf(im,jsta_2l:jend_2u) - integer :: varid,iret,jj,i,j - integer :: start(2), count(2) - - iret = nf90_inq_varid(ncid,trim(varname),varid) - if (iret /= 0) then - print*,VarName," not found -Assigned missing values" -!$omp parallel do private(i,j) - do j=jsta,jend - do i=1,im - buf(i,j)=spval - enddo - enddo - else - start = (/1,jsta/) - jj=jend-jsta+1 - count = (/im,jj/) - iret = nf90_get_var(ncid,varid,buf(:,jsta),start=start,count=count) - endif - - end subroutine read_netcdf_2d_para diff --git a/sorc/ncep_post.fd/INITPOST_GFS_SIGIO.f b/sorc/ncep_post.fd/INITPOST_GFS_SIGIO.f deleted file mode 100644 index b8ab8755f..000000000 --- a/sorc/ncep_post.fd/INITPOST_GFS_SIGIO.f +++ /dev/null @@ -1,3062 +0,0 @@ -!> @file -! . . . -!> SUBPROGRAM: INITPOST INITIALIZE POST FOR RUN -!! PRGRMMR: Hui-Ya Chuang DATE: 2007-03-01 -!! -!! ABSTRACT: THIS ROUTINE INITIALIZES CONSTANTS AND -!! VARIABLES AT THE START OF AN ETA MODEL OR POST -!! PROCESSOR RUN. -!! -!! REVISION HISTORY -!! 2011-02-07 Jun Wang add grib2 option -!! 2013-04-19 Jun Wang add changes to read wam tracers -!! 2013-05-04 Shrinivas Moorthi: real * 8 for pm1d and pi1d and pt=100hPa and some cosmetic changes -!! 2021-03-11 Bo Cui change local arrays to dimension (im,jsta:jend) -!! -!! USAGE: CALL INIT -!! INPUT ARGUMENT LIST: -!! NONE -!! -!! OUTPUT ARGUMENT LIST: -!! NONE -!! -!! OUTPUT FILES: -!! NONE -!! -!! SUBPROGRAMS CALLED: -!! UTILITIES: -!! NONE -!! LIBRARY: -!! COMMON - CTLBLK -!! LOOKUP -!! SOILDEPTH -!! -!! -!! ATTRIBUTES: -!! LANGUAGE: FORTRAN -!! MACHINE : CRAY C-90 -!! - SUBROUTINE INITPOST_GFS_SIGIO(lusig,iunit,iostatusFlux,iostatusD3D,idrt,sighead) - - use vrbls3d, only: ZINT, PINT, T, UH, VH, Q, O3, CWM, U, V, QQW, & - OMGA, PMID, PINT, ALPINT, ZMID, QQR, QQS, QQI, Q2, & - CFR, RLWTT, RSWTT, TCUCN, TCUCNS, TRAIN, EL_PBL, & - EXCH_H, VDIFFTT, VDIFFMOIS, DCONVMOIS, SCONVMOIS, & - NRADTT, O3VDIFF, O3PROD, O3TNDY, MWPV, UNKNOWN, & - VDIFFZACCE, ZGDRAG, CNVCTUMMIXING, VDIFFMACCE, & - MGDRAG, CNVCTDETMFLX,NCNVCTCFRAC, CNVCTUMFLX, & - CNVCTVMMIXING, CNVCTDMFLX, CNVCTZGDRAG, CNVCTMGDRAG - - use vrbls2d, only: F, PD, FIS, PBLH, USTAR, Z0, THS, QS, TWBS, QWBS, & - AVGCPRATE, CPRATE, AVGPREC, PREC, SR, LSPA, SNO, SI, & - CLDEFI, TH10, Q10, TSHLTR, PSHLTR, QSHLTR, ALBASE, & - AVGALBEDO,AVGTCDC, CZEN, CZMEAN, MXSNAL, RADOT, & - SIGT4, VEGFRC, CFRACL, CFRACM, AVGCFRACH, CFRACH, & - AVGCFRACL, AVGCFRACM, CNVCFR, ISLOPE, CMC, GRNFLX, & - SOILTB, TG, NCFRCV, ACFRCV, ASWINTOA, ACFRST, NCFRST,& - SSROFF, BGROFF, RLWIN, RLWTOA, ALWIN, ALWOUT, ALWTOA,& - RSWIN, RSWINC, RSWOUT, ASWIN, AUVBIN, AUVBINC, & - ASWOUT, ASWTOA, ASWINC, ASWOUTC, ASWTOAC, ASWINTOA, & - AVISBEAMSWIN, AVISDIFFSWIN, AIRBEAMSWIN, AIRDIFFSWIN,& - SFCSHX, SFCLHX, SUBSHX, SNOPCX, SFCUX, SFCVX, SFCUVX,& - SFCUGS, GTAUX, SFCVGS, GTAUY, POTEVP, U10, V10, & - SMSTAV, SMSTOT, IVGTYP, ISLTYP, SFCEVP, SFCEXC, & - ACSNOW, ACSNOM, SST, QZ0, UZ0, VZ0, PTOP, HTOP, PBOT,& - HBOT, PBOT, PTOPL, PBOTL, TTOPL, PTOPM, PBOTM, TTOPM,& - PTOPH, PBOTH, TTOPH, PBLCFR, CLDWORK, RUNOFF, & - MAXTSHLTR, MINTSHLTR, DZICE, SMCWLT, SUNTIME, & - FIELDCAPA, SNOWFALL, HTOPD, HBOTD, HTOPS, HBOTS, & - CUPPT, THZ0, MAXRHSHLTR, MINRHSHLTR, U10H, V10H - use soil, only: SLDPTH, SH2O, SMC, STC - use masks, only: LMV, LMH, HTM, VTM, GDLAT, GDLON, DX, DY, HBM2, SM, SICE - use physcons_post, only: CON_G, CON_FVIRT, CON_RD, CON_EPS, CON_EPSM1 - use masks, only: LMV, LMH, HTM, VTM, GDLAT, GDLON, DX, DY, HBM2, & - SM, SICE - use params_mod, only: RTD, ERAD, DTR, TFRZ, P1000, CAPA - use lookup_mod, only: THL, PLQ, PTBL, TTBL, RDQ, RDTH, RDP, RDTHE, PL, & - QS0, SQS, STHE, THE0, TTBLQ, RDPQ, RDTHEQ, STHEQ, & - THE0Q - use ctlblk_mod, only: ME, MPI_COMM_COMP, ICNT, IDSP,JEND_M, IHRST, IMIN,& - IDAT, SDAT, IFHR, IFMIN, FILENAME, TPREC, TCLOD, & - TRDLW, TRDSW, TSRFC, TMAXMIN, TD3D, RESTRT, & - IMP_PHYSICS, DT, NUM_PROCS, LP1, PDTOP, SPVAL, PT,& - NPHS, DTQ2, ARDLW, ARDSW, ASRFC, AVRAIN, AVCNVC, & - THEAT, GDSDEGR, SPL, LSM, ALSL, IM, JM, IM_JM, & - LM, JSTA_2L, JEND_2U, NSOIL, JSTA, JEND, ICU_PHYSICS - use gridspec_mod, only: MAPTYPE, GRIDTYPE, LATSTART, LATLAST, LONSTART, & - LONLAST, CENLON, DXVAL, DYVAL, TRUELAT2, & - TRUELAT1, CENLAT - use rqstfld_mod, only: IGDS, AVBL, IQ, IS - use sigio_module, only: SIGIO_HEAD - use sfcio_module, only: sfcio_head, sfcio_data, sfcio_srohdc - use upp_physics, only: fpvsnew -! use wrf_io_flags_mod -!- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - implicit none -! - type(sigio_head):: sighead - !type(sigio_data):: sigdatai - type(sfcio_head):: head - type(sfcio_data):: data -! -! INCLUDE/SET PARAMETERS. -! - INCLUDE "mpif.h" - integer,parameter:: MAXPTS=1000000 ! max im*jm points -! -! real,parameter:: con_g =9.80665e+0! gravity -! real,parameter:: con_rv =4.6150e+2 ! gas constant H2O -! real,parameter:: con_rd =2.8705e+2 ! gas constant air -! real,parameter:: con_fvirt =con_rv/con_rd-1. -! real,parameter:: con_eps =con_rd/con_rv -! real,parameter:: con_epsm1 =con_rd/con_rv-1 -! -! This version of INITPOST shows how to initialize, open, read from, and -! close a NetCDF dataset. In order to change it to read an internal (binary) -! dataset, do a global replacement of _ncd_ with _int_. - - integer,intent(in) :: lusig,iostatusFlux,iostatusD3D,iunit,idrt - character(len=20) :: VarName - character(len=20) :: VcoordName - integer :: Status - character startdate*19,SysDepInfo*80,cgar*1 - character startdate2(19)*4 -! -! NOTE: SOME INTEGER VARIABLES ARE READ INTO DUMMY ( A REAL ). THIS IS OK -! AS LONG AS REALS AND INTEGERS ARE THE SAME SIZE. -! -! ALSO, EXTRACT IS CALLED WITH DUMMY ( A REAL ) EVEN WHEN THE NUMBERS ARE -! INTEGERS - THIS IS OK AS LONG AS INTEGERS AND REALS ARE THE SAME SIZE. - LOGICAL RUNB,SINGLRST,SUBPOST,NEST,HYDRO - LOGICAL IOOMG,IOALL - logical, parameter :: debugprint = .false. -! logical, parameter :: debugprint = .true. - CHARACTER*32 LABEL - CHARACTER*40 CONTRL,FILALL,FILMST,FILTMP,FILTKE,FILUNV & - , FILCLD,FILRAD,FILSFC - CHARACTER*4 RESTHR - CHARACTER FNAME*255,ENVAR*50,sfcfilename*256 - INTEGER IDATE(8),JDATE(8) - INTEGER JPDS(200),JGDS(200),KPDS(200),KGDS(200) - LOGICAL*1 LB(IM,JM) - INTEGER IRET -! REAL BUFF(IM_JM) -! -! INCLUDE COMMON BLOCKS. -! -! DECLARE VARIABLES. -! -! REAL fhour - integer nfhour ! forecast hour from nems io file - REAL RINC(5) - REAL u1d(LM), v1d(LM),omga1d(lm) - real*8 pm1d(lm), pi1d(lm+1) - REAL DUM1D (LM+1) -! REAL DUMMY ( IM, JM ) -! REAL DUMMY2 ( IM, JM ) - REAL, ALLOCATABLE :: dummy_h(:,:),dummy_p(:,:),dummy_px(:,:), & - dummy_py(:,:),dummy_t(:,:,:),dummy_u(:,:,:),dummy_v(:,:,:), & - dummy_d(:,:,:),dummy_trc(:,:,:,:), dummy(:,:), dummy2(:,:) -! dummy18(:,:,:),dummy19(:,:,:) - REAL, ALLOCATABLE :: dummy15(:,:),dummy16(:,:),dummy17(:,:,:) - real, allocatable :: d2d(:,:), u2d(:,:), v2d(:,:), omga2d(:,:), & - p2d(:,:), t2d(:,:), q2d(:,:), qs2d(:,:), & - cw2d(:,:), cfr2d(:,:) - real*8, allocatable :: pm2d(:,:), pi2d(:,:) - real, allocatable :: fi(:,:,:) - -! INTEGER IDUMMY(IM,JM) -!jw - integer ii,jj,js,je,iyear,imn,iday,itmp,ioutcount,istatus, & - I,J,L,ll,k,kf,irtn,igdout,n,Index,nframe, & - impf,jmpf,nframed2,iunitd3d - real TSTART,TLMH,TSPH,ES, FACT,soilayert,soilayerb,zhour,dum - - real, allocatable:: glat1d(:),glon1d(:),qstl(:) - integer ierr,idum -! integer ntrac,nci,ij,ijl,j1,j2 - integer lsta,lend - integer ijmc,ijxc,kna,kxa,kma - real,allocatable :: ri(:),cpi(:) -! integer ibuf(im,jsta_2l:jend_2u) -! real buf(im,jsta_2l:jend_2u),bufsoil(im,nsoil,jsta_2l:jend_2u) - real buf(im,jsta_2l:jend_2u) - real, allocatable :: buf3d(:,:,:), ta(:,:,:,:), tb(:,:,:,:) - real, allocatable :: wrk1(:,:), wrk2(:,:) -! real buf3d(im,lm,jsta:jend) - real tem,tvll,pmll - integer levs,ntrac,ncld,idvt,jcap,lnt2,ntoz,ntcw,ltrc -! -! DATA BLANK/' '/ -! -!*********************************************************************** -! START INIT HERE. -! - if (me == 0) WRITE(6,*)'INITPOST: ENTER INITPOST_GFS_SIGIO' - WRITE(6,*)'me=',me,'LMV=',size(LMV,1),size(LMV,2),'LMH=', & - size(LMH,1),size(LMH,2),'jsta_2l=',jsta_2l,'jend_2u=', & - jend_2u,'im=',im -! -! -! STEP 1. READ MODEL OUTPUT FILE -! -! -!*** -! -! LMH always = LM for sigma-type vert coord -! LMV always = LM for sigma-type vert coord - -!$omp parallel do private(i,j) - do j = jsta_2l, jend_2u - do i = 1, im - LMV ( i, j ) = lm - LMH ( i, j ) = lm - end do - end do - -! write(0,*),' LM=',LM,' LP1=',LP1 - -! HTM VTM all 1 for sigma-type vert coord - -!$omp parallel do private(i,j,l) - do l = 1, lm - do j = jsta_2l, jend_2u - do i = 1, im - HTM ( i, j, l ) = 1.0 - VTM ( i, j, l ) = 1.0 - end do - end do - end do - - allocate (dummy(im,jm), dummy2(im,jm)) - -! The end j row is going to be jend_2u for all variables except for V. - JS = JSTA_2L - JE = JEND_2U -! get start date - if (me == 0)then - idate(1) = sighead%idate(4) - idate(2) = sighead%idate(2) - idate(3) = sighead%idate(3) - idate(4) = sighead%idate(1) - idate(5) = 0 - nfhour = nint(sighead%fhour) - - allocate(glat1d(jm),glon1d(jm)) - -! call splat to compute lat for gaussian grid - call splat(idrt,jm,glat1d,glon1d) - -!$omp parallel do private(i,j,tem) - do j=1,jm - tem = asin(glat1d(j))*RTD - do i=1,im - dummy(i,j) = tem - dummy2(i,j) = 360./im*(i-1) - end do - end do - deallocate(glat1d,glon1d) - - print*,'idate before broadcast = ',(idate(i),i=1,7) - end if - call mpi_bcast(idate(1),7,MPI_INTEGER,0,mpi_comm_comp,iret) - call mpi_bcast(nfhour,1,MPI_INTEGER,0,mpi_comm_comp,iret) - if (me == 0) then - print*,'idate after broadcast = ',(idate(i),i=1,4) - print*,'nfhour = ',nfhour - endif - -! sample print point - ii = im/2 - jj = jm/2 - - call mpi_scatterv(dummy(1,1),icnt,idsp,mpi_real & - ,gdlat(1,jsta),icnt(me),mpi_real,0,MPI_COMM_COMP,ierr) - call mpi_scatterv(dummy2(1,1),icnt,idsp,mpi_real & - ,gdlon(1,jsta),icnt(me),mpi_real,0,MPI_COMM_COMP,ierr) - - -! write(0,*)'before call EXCH,mype=',me,'max(gdlat)=',maxval(gdlat),& -! 'max(gdlon)=', maxval(gdlon) - - CALL EXCH(gdlat(1,JSTA_2L)) - - print *,'after call EXCH,mype=',me - -!$omp parallel do private(i,j) - do j = jsta, jend_m - do i = 1, im-1 - DX( i,j) = ERAD*COS(GDLAT(I,J)*DTR)*(GDLON(I+1,J)-GDLON(I,J))*DTR - DY(i,j) = ERAD*(GDLAT(I,J)-GDLAT(I,J+1))*DTR ! like A*DPH -! F(I,J)=1.454441e-4*sin(gdlat(i,j)*DTR) ! 2*omeg*sin(phi) - end do - end do - if (me == 0) print*,'sample LATLON, DY, DY=',ii,jend, & - GDLAT(II,JEND),GDLON(II,JEND),DX(II,JEND),DY(II,JEND) -!$omp parallel do private(i,j) - do j=jsta,jend - do i=1,im - F(I,J) = 1.454441e-4*sin(gdlat(i,j)*DTR) ! 2*omeg*sin(phi) - end do - end do - - impf = im - jmpf = jm - if (me == 0) print*,'impf,jmpf= ',impf,jmpf -!Moo print*,'impf,jmpf,nframe= ',impf,jmpf,nframe - -! iyear=idate(4)+2000 ! older gfsio only has 2 digit year - iyear = idate(1) - imn = idate(2) ! ask Jun - iday = idate(3) ! ask Jun - ihrst = idate(4) - imin = idate(5) - jdate = 0 - idate = 0 -! -! read(startdate,15)iyear,imn,iday,ihrst,imin - 15 format(i4,1x,i2,1x,i2,1x,i2,1x,i2) - if (me == 0) then - print*,'start yr mo day hr min =',iyear,imn,iday,ihrst,imin - print*,'processing yr mo day hr min=' & - ,idat(3),idat(1),idat(2),idat(4),idat(5) - endif -! - idate(1) = iyear - idate(2) = imn - idate(3) = iday - idate(5) = ihrst - idate(6) = imin - SDAT(1) = imn - SDAT(2) = iday - SDAT(3) = iyear - jdate(1) = idat(3) - jdate(2) = idat(1) - jdate(3) = idat(2) - jdate(5) = idat(4) - jdate(6) = idat(5) -! -! CALL W3DIFDAT(JDATE,IDATE,2,RINC) -! ifhr=nint(rinc(2)) -! - CALL W3DIFDAT(JDATE,IDATE,0,RINC) -! - ifhr = nint(rinc(2)+rinc(1)*24.) - ifmin = nint(rinc(3)) -! if(ifhr /= nint(fhour))print*,'find wrong Grib file';stop - if (me == 0) then - print *,' idate=',idate - print *,' rinc=',rinc - print *,' ifhr=',ifhr - print*,' in INITPOST ifhr ifmin fileName=',ifhr,ifmin,fileName - -! GFS has the same accumulation bucket for precipitation and fluxes and it is written to header -! the header has the start hour information so post uses it to recontruct bucket - tprec = 6. - if(ifhr>240)tprec=12. - tclod = tprec - trdlw = tprec - trdsw = tprec - tsrfc = tprec - tmaxmin = tprec - td3d = tprec - print*,'tprec = ',tprec - end if - - call mpi_bcast(tprec,1,MPI_REAL,0,mpi_comm_comp,iret) - call mpi_bcast(tclod,1,MPI_REAL,0,mpi_comm_comp,iret) - call mpi_bcast(trdlw,1,MPI_REAL,0,mpi_comm_comp,iret) - call mpi_bcast(trdsw,1,MPI_REAL,0,mpi_comm_comp,iret) - call mpi_bcast(tsrfc,1,MPI_REAL,0,mpi_comm_comp,iret) - call mpi_bcast(tmaxmin,1,MPI_REAL,0,mpi_comm_comp,iret) - call mpi_bcast(td3d,1,MPI_REAL,0,mpi_comm_comp,iret) - -! Getting tstart - tstart = 0. - - print*,'tstart= ',tstart - -! Getiing restart - - RESTRT=.TRUE. ! set RESTRT as default - - IF(tstart > 1.0E-2)THEN - ifhr = ifhr+NINT(tstart) - rinc = 0 - idate = 0 - rinc(2) = -1.0*ifhr - call w3movdat(rinc,jdate,idate) - SDAT(1) = idate(2) - SDAT(2) = idate(3) - SDAT(3) = idate(1) - IHRST = idate(5) - print*,'new forecast hours for restrt run= ',ifhr - print*,'new start yr mo day hr min =',sdat(3),sdat(1) & - ,sdat(2),ihrst,imin - END IF - - imp_physics = 99 !set GFS mp physics to 99 for Zhao scheme - iCU_PHYSICS = 4 - print*,'MP_PHYSICS=,cu_physics=',imp_physics,icu_physics - -! Initializes constants for Ferrier microphysics - if(imp_physics==5 .or. imp_physics==85 .or. imp_physics==95)then - CALL MICROINIT(imp_physics) - end if - -! waiting to retrieve lat lon infor from raw GFS output -! VarName='DX' - -! VarName='DY' - -! GFS does not need DT to compute accumulated fields, set it to one -! VarName='DT' - DT = 1 -! GFS does not need truelat -! VarName='TRUELAT1' - -! VarName='TRUELAT2' - -! Specify maptype=4 for Gaussian grid -! maptype=4 -! write(6,*) 'maptype is ', maptype -! HBM2 is most likely not in Grib message, set them to ones - HBM2 = 1.0 - -! try to get kgds from flux grib file and then convert to igds that is used by GRIBIT.f - - if(me == 0)then - jpds = -1.0 - jgds = -1.0 - igds = 0 - call getgb(iunit,0,im_jm,0,jpds,jgds,kf & - ,k,kpds,kgds,lb,dummy,ierr) - if(ierr == 0)then - call R63W72(KPDS,KGDS,JPDS,IGDS(1:18)) - print*,'use IGDS from flux file for GFS= ',(IGDS(I),I=1,18) - else - print*,'no flux file, fill part of kgds with sigma file info' - kgds(1) = idrt - kgds(2) = im - kgds(3) = jm - end if - end if - call mpi_bcast(igds(1),18,MPI_INTEGER,0,mpi_comm_comp,iret) - call mpi_bcast(kgds(1),18,MPI_INTEGER,0,mpi_comm_comp,iret) - print*,'IGDS for GFS= ',(IGDS(I),I=1,18) - -! Specigy grid type -! if(iostatusFlux==0)then - if(IGDS(4) /= 0)then - maptype = IGDS(3) - else if((im/2+1) == jm)then - maptype = 0 !latlon grid - else - maptype = 4 ! default gaussian grid - end if - gridtype = 'A' - - write(6,*) 'maptype and gridtype is ', maptype,gridtype - if(idrt /= maptype)then - print*,'flux file and sigma file are on different grids - ', & - 'post processing isterminated' - call mpi_abort() - stop - end if - - levs = sighead%levs - ntrac = sighead%ntrac - ncld = sighead%ncldt - idvt = sighead%idvt - jcap = sighead%jcap - lnt2 = (jcap+1)*(jcap+2) - ntoz = mod(idvt,10) + 1 -!jw ntcw = idvt/10 + 1 - if( idvt/100 > 0 ) then - ntcw = 3 - else - ntcw = idvt/10 + 1 - endif - -! start reading sigma file -! decompose l to read different levs with different pes - call mptgen(me,num_procs,1,1,lm,lsta,lend,kxa,kma,kna) - - write(0,*)' me=',me,' lsta=',lsta,' lend=',lend,' kxa=',kxa, & - ' kma=',kma,' kna=',kna - ii = im/2 - jj = (jsta+jend)/2 - - print*,'lsta, lend= ',lsta,lend - if (lsta > lend) lend = lsta - - allocate(dummy_h(im,jm),dummy_p(im,jm),dummy_px(im,jm),dummy_py(im,jm) & - ,dummy_t(im,jm,lsta:lend),dummy_u(im,jm,lsta:lend) & - ,dummy_v(im,jm,lsta:lend),dummy_d(im,jm,lsta:lend) & - ,dummy_trc(im,jm,lsta:lend,ntrac)) - -! ,dummy12(im,jm,lsta:lend), & -! dummy13(im,jm,lsta:lend),dummy14(im,jm,lsta:lend), & -! dummy18(im,jm,lsta:lend),dummy19(im,jm,lsta:lend) ) - - if (me == 0) then - print*,'calling rtsig with lusig,lsta,lend,im_jm,kgds= ', & - lusig,lsta,lend,im_jm,kgds(1:20) - - write(0,*)' levs=',levs,' ntrac=',ntrac,' ncld=',ncld,' jcap=',jcap & - ,' lnt2=',lnt2,' ntoz=',ntoz,' ntcw=',ntcw - endif - - call rtsig(lusig,sighead,lsta,lend,kgds,im_jm, & ! input - levs,ntrac,jcap,lnt2,me, & ! input - dummy_h,dummy_p,dummy_px,dummy_py, & ! output - dummy_t,dummy_u,dummy_v,dummy_d, & ! output - dummy_trc,iret) ! output - write(0,*)'aft rtsig,iret=',iret - - if(iret /= 0)then - print*,'error reading sigma file, stopping' - print*,'error massage is ',iret - call mpi_abort() - end if - - if(Debugprint)print*,'done with rtsig, sample t,u,v,q,cwm= ', & - dummy_t(1,1,lsta:lend), dummy_u(1,1,lsta:lend), & - dummy_v(1,1,lsta:lend), dummy_trc(1,1,lsta:lend,1), & - dummy_trc(1,1,lsta:lend,3),' lsta=',lsta,'lend=',lend -! write(0,*)'bf allocate ' - -! set threads for rest of the code -! call getenv('POST_THREADS',ENVAR) -! read(ENVAR, '(I2)')idum -! idum = max(idum+0,1) -! write(0,*)' post_threads=', idum -! if (idum > 0 .and. idum <= 32) then -! call OMP_SET_NUM_THREADS(idum) -! endif - -! scatter to pes - allocate(dummy15(im,jsta_2l:jend_2u), & - dummy16(im,jsta_2l:jend_2u),dummy17(im,jsta_2l:jend_2u,lm)) - -! write(0,*)'af allocate ' - -! call mpi_scatterv(dummy_h(1,1),icnt,idsp,mpi_real & -! ,zint(1,jsta,lp1),icnt(me),mpi_real,0,MPI_COMM_COMP,iret) -! call mpi_scatterv(dummy_p(1,1),icnt,idsp,mpi_real & -! ,pint(1,jsta,lp1),icnt(me),mpi_real,0,MPI_COMM_COMP,iret) -! call mpi_scatterv(dummy_px(1,1),icnt,idsp,mpi_real & -! ,dummy15(1,jsta),icnt(me),mpi_real,0,MPI_COMM_COMP,iret) -! call mpi_scatterv(dummy_py(1,1),icnt,idsp,mpi_real & -! ,dummy16(1,jsta),icnt(me),mpi_real,0,MPI_COMM_COMP,iret) - -!$omp parallel do private(i,j) - do j=jsta, jend - do i=1, im - zint(i,j,lp1) = dummy_h(i,j) - pint(i,j,lp1) = dummy_p(i,j) - dummy15(i,j) = dummy_px(i,j) - dummy16(i,j) = dummy_py(i,j) - enddo - enddo - deallocate (dummy_h,dummy_p,dummy_px,dummy_py) - - write(0,*)'one scattering zs and ps',zint(ii,jj,lp1),pint(ii,jj,lp1) - - - ijmc = (jm-1)/num_procs+1 - ijxc = jend-jsta+1 - - allocate (ta(im,ijmc,kma,num_procs)) - allocate (tb(im,ijmc,kma,num_procs)) - allocate (buf3d(im,lm,jsta:jend)) - -! write(0,*)'be mptranr4' - if(ijxc > ijmc) print*,'ijxc larger than ijmc =',ijxc,ijmc - call mptranr4(MPI_COMM_COMP,num_procs,im,im,im, & - ijmc,jm,ijxc,jm,kma,kxa,lm,lm,dummy_t,buf3d,ta,tb) -! write(0,*)'be set buf3d' -!$omp parallel do private(i,j,l,ll) - do l=1, lm - ll = lm-l+1 - do j=jsta, jend - do i=1, im - T(i,j,l) = buf3d(i,ll,j) - end do - end do - end do - if (debugprint) then - do l=1, lm - print*,'sample i,j,l, T = ',ii,jj,l,t(ii,jj,l) - enddo - endif - -! write(0,*)'be set uh' - call mptranr4(MPI_COMM_COMP,num_procs,im,im,im, & - ijmc,jm,ijxc,jm,kma,kxa,lm,lm,dummy_u,buf3d,ta,tb) -!$omp parallel do private(i,j,l,ll) - do l=1, lm - ll = lm-l+1 - do j=jsta, jend - do i=1, im - uh(i,j,l) = buf3d(i,ll,j) - end do - end do - end do - if (debugprint) then - do l=1, lm - print*,'sample i,j,l,U = ',ii,jj,l,uh(ii,jj,l) - enddo - endif - -! write(0,*)'be set vh' - call mptranr4(MPI_COMM_COMP,num_procs,im,im,im, & - ijmc,jm,ijxc,jm,kma,kxa,lm,lm,dummy_v,buf3d,ta,tb) -!$omp parallel do private(i,j,l,ll) - do l=1, lm - ll = lm-l+1 - do j=jsta, jend - do i=1, im - vh(i,j,l) = buf3d(i,ll,j) - end do - end do - end do - if (debugprint) then - do l=1, lm - print*,'sample i,j,l,V = ',ii,jj,l,vh(ii,jj,l) - enddo - endif -! - -! ltrc = min(lsta,levs) ! For processors greater than levs - -! write(0,*)'be set q' - call mptranr4(MPI_COMM_COMP,num_procs,im,im,im,ijmc,jm, & - ijxc,jm,kma,kxa,lm,lm,dummy_trc(1,1,lsta,1),buf3d,ta,tb) -!$omp parallel do private(i,j,l,ll) - do l=1, lm - ll = lm-l+1 - do j=jsta, jend - do i=1, im - q(i,j,l) = buf3d(i,ll,j) - end do - end do - end do - if (debugprint) then - do l=1, lm - print*,'sample i,j,l,Q = ',ii,jj,l,q(ii,jj,l) - enddo - endif - -! write(0,*)'be set o3' - call mptranr4(MPI_COMM_COMP,num_procs,im,im,im,ijmc,jm, & - ijxc,jm,kma,kxa,lm,lm,dummy_trc(1,1,lsta,ntoz),buf3d,ta,tb) -!$omp parallel do private(i,j,l,ll) - do l=1, lm - ll = lm-l+1 - do j=jsta, jend - do i=1, im - o3(i,j,l) = buf3d (i,ll,j) - end do - end do - end do - if (debugprint) then - do l=1, lm - print*,'sample i,j,l,O3 = ',ii,jj,l,o3(ii,jj,l) - enddo - endif - -! write(0,*)'be set cld,ntcw=',ntcw - call mptranr4(MPI_COMM_COMP,num_procs,im,im,im,ijmc,jm, & - ijxc,jm,kma,kxa,lm,lm,dummy_trc(1,1,lsta,ntcw),buf3d,ta,tb) -! write(0,*)'aft mptranr4 cwm' -!$omp parallel do private(i,j,l,ll) - do l=1, lm - ll = lm-l+1 - do j=jsta, jend - do i=1, im - cwm(i,j,l ) = buf3d (i,ll,j) - end do - end do - end do - if (debugprint) then - do l=1, lm - print*,'sample i,j,l,CWM = ',ii,jj,l,cwm(ii,jj,l) - enddo - endif -! write(0,*)' cwm=',cwm(1,36,100:150)*1000 - -! write(0,*)'be set div' - call mptranr4(MPI_COMM_COMP,num_procs,im,im,im, & - ijmc,jm,ijxc,jm,kma,kxa,lm,lm,dummy_d,buf3d,ta,tb) -!$omp parallel do private(i,j,l) - do l=1, lm - do j=jsta, jend - do i=1, im - dummy17(i,j,l ) = buf3d(i,l,j) - end do - end do - end do - if (debugprint) then - do l=1, lm - print*,'sample i,j,l,DIV = ',ii,jj,l,dummy17(ii,jj,l) - enddo - endif - - deallocate(dummy_t,dummy_u,dummy_v,dummy_d,dummy_trc,ta,tb,buf3d) -! dummy18,dummy19) - -!$omp parallel do private(i,j,l) - do l=1,lm -! if(debugprint)print*,'sample T Q U V,CWM',l,VarName,' = ',l,t(ii,jj,l),& -! q(ii,jj,l),u(ii,jj,l),v(ii,jj,l),cwm(ii,jj,l) - do j=jsta,jend - do i=1,im - if(t(i,j,l) < (TFRZ-15.) ) then ! separating cloud water from ice - qqi(i,j,l) = cwm(i,j,l) - else - qqw(i,j,l) = cwm(i,j,l) - end if - end do - end do - end do ! for l loop - -! write(0,*)'be set qqi' -! write(0,*)' qqw=',qqw(1,36,100:150) -! write(0,*)' qqi=',qqi(1,36,100:150) - -! compute model level pressure and omega - - pdtop = spval -! pt = 0. - pt = 10000. ! this is for 100 hPa added by Moorthi - pd = spval ! GFS does not output PD - - allocate (d2d(im,lm),u2d(im,lm),v2d(im,lm),pi2d(im,lm+1), & - pm2d(im,lm),omga2d(im,lm)) - - do j=jsta,jend -!$omp parallel do private(i,l,ll) - do l=1,lm - ll = lm-l+1 - do i=1,im - u2d(i,l) = uh(i,j,ll) ! flipping u and v for calling modstuff - v2d(i,l) = vh(i,j,ll) - d2d(i,l) = dummy17(i,j,l) - end do - end do - call modstuff2(im,im,lm, & - sighead%idvc,sighead%idsl,sighead%nvcoord, & - sighead%vcoord,pint(1,j,lp1),dummy15(1,j), & - dummy16(1,j),d2d,u2d,v2d, & - pi2d,pm2d,omga2d,me) -!$omp parallel do private(i,l,ll) - do l=1,lm - ll = lm-l+1 - do i=1,im - omga(i,j,l) = omga2d(i,ll) - pmid(i,j,l) = pm2d(i,ll) - pint(i,j,l) = pi2d(i,ll+1) - enddo - enddo - enddo ! end of j loop -! write(0,*)'be set pint' - -! write(0,*)' PINT=',pint(ii,jj,:),' me=',me - - deallocate(dummy15,dummy16,dummy17) - deallocate (d2d,u2d,v2d,pi2d,pm2d,omga2d) - - allocate(wrk1(im,jsta:jend),wrk2(im,jsta:jend)) - allocate(fi(im,jsta:jend,2)) - -!$omp parallel do private(i,j) - do j=jsta,jend - do i=1,im - alpint(i,j,lp1) = log(pint(i,j,lp1)) - wrk1(i,j) = log(PMID(I,J,LM)) - wrk2(i,j) = T(I,J,LM)*(Q(I,J,LM)*con_fvirt+1.0) - fis(i,j) = zint(i,j,lp1)*con_G - FI(I,J,1) = FIS(I,J) & - + wrk2(i,j)*con_rd*(ALPINT(I,J,Lp1)-wrk1(i,j)) - ZMID(I,J,LM) = FI(I,J,1)/con_G - enddo - enddo -! write(0,*)'be set zmid' - -! SECOND, INTEGRATE HEIGHT HYDROSTATICLY, GFS integrate height on mid-layer - ii = im/2 - jj = (jsta+jend)/2 - - DO L=LM,2,-1 ! omit computing model top height because it's infinity - ll = l - 1 -!$omp parallel do private(i,j,tvll,pmll,fact) - do j = jsta, jend -! write(0,*)' j=',j,' l=',l,' T=',T(1,j,l),' Q=',q(1,j,l), & -! ' pmid=',pmid(1,j,ll),pmid(1,j,l),' l=',l - do i = 1, im - -! if (me == 40) & -! write(0,*)' i=',i,' j=',j,' l=',l,' T=',T(i,j,l),' Q=',q(i,j,l),& -! ' pmid=',pmid(i,j,ll),pmid(i,j,l),' l=',l - - alpint(i,j,l) = log(pint(i,j,l)) - tvll = T(I,J,LL)*(Q(I,J,LL)*con_fvirt+1.0) - pmll = log(PMID(I,J,LL)) - - FI(I,J,2) = FI(I,J,1) + (0.5*con_rd)*(wrk2(i,j)+tvll) & - * (wrk1(i,j)-pmll) - ZMID(I,J,LL) = FI(I,J,2)/con_G -! - FACT = (ALPINT(I,J,L)-wrk1(i,j)) / (pmll-wrk1(i,j)) - ZINT(I,J,L) = ZMID(I,J,L) + (ZMID(I,J,LL)-ZMID(I,J,L)) * FACT - -! if(i==ii.and.j==jj) & -! print*,'L,sample T,Q,ALPMID(L+1),ALPMID(L),ZMID= ' & -! ,l,T(I,J,L),Q(I,J,L),LOG(PMID(I,J,L+1)), & -! LOG(PMID(I,J,L)),ZMID(I,J,L) - - FI(I,J,1) = FI(I,J,2) - wrk1(i,J) = pmll - wrk2(i,j) = tvll - ENDDO - ENDDO - - if (me == 0) print*,'L ZINT= ',l,zint(ii,jj,l), & - 'alpint=',ALPINT(ii,jj,l),'pmid=',LOG(PMID(Ii,Jj,L)),'pmid(l-1)=', & - LOG(PMID(Ii,Jj,L-1)),'zmd=',ZMID(Ii,Jj,L),'zmid(l-1)=',ZMID(Ii,Jj,L-1) - ENDDO - deallocate(wrk1,wrk2,fi) - -! write(0,*)'af sigma file' -! start retrieving data using getgb, first land/sea mask - - Index = 50 - VarName = avbl(index) - jpds = -1 - jgds = -1 - jpds(5) = iq(index) - jpds(6) = is(index) - call getgbandscatter(me,iunit,im,jm,im_jm,jsta,jsta_2l & - ,jend_2u,MPI_COMM_COMP,icnt,idsp,spval,VarName & - ,jpds,jgds,kpds,sm) - where(sm /= spval) sm = 1.0 - sm ! convert to sea mask -! write(0,*)'get land-see mask' - - if(debugprint)print*,'sample ',VarName,' = ',sm(im/2,(jsta+jend)/2) - -! sea ice mask using getgb - Index = 51 - VarName = avbl(index) - jpds = -1.0 - jgds = -1.0 - jpds(5) = iq(index) - jpds(6) = is(index) - call getgbandscatter(me,iunit,im,jm,im_jm,jsta,jsta_2l & - ,jend_2u,MPI_COMM_COMP,icnt,idsp,spval,VarName & - ,jpds,jgds,kpds,sice) - where(sm/=spval .and. sm==0.0) sice = 0.0 !specify sea ice=0 at land - - if(debugprint)print*,'sample ',VarName,' = ',sice(im/2,(jsta+jend)/2) - -! Zhao scheme does not produce suspended rain and snow - qqr = 0. - qqs = 0. - -! PBL height using getgb - Index = 221 - VarName = avbl(index) - jpds = -1.0 - jgds = -1.0 - jpds(5) = iq(index) - jpds(6) = is(index) - call getgbandscatter(me,iunit,im,jm,im_jm,jsta,jsta_2l & - ,jend_2u,MPI_COMM_COMP,icnt,idsp,spval,VarName & - ,jpds,jgds,kpds,pblh) - - if(debugprint)print*,'sample ',VarName,' = ',pblh(im/2,(jsta+jend)/2) - -! frictional velocity using getgb - Index=45 - VarName=avbl(index) - jpds=-1.0 - jgds=-1.0 - jpds(5)=iq(index) - jpds(6)=is(index) - call getgbandscatter(me,iunit,im,jm,im_jm,jsta,jsta_2l & - ,jend_2u,MPI_COMM_COMP,icnt,idsp,spval,VarName & - ,jpds,jgds,kpds,ustar) - if(debugprint)print*,'sample ',VarName,' = ',ustar(im/2,(jsta+jend)/2) - -! roughness length using getgb - Index=44 - VarName=avbl(index) - jpds=-1.0 - jgds=-1.0 - jpds(5)=iq(index) - jpds(6)=is(index) - call getgbandscatter(me,iunit,im,jm,im_jm,jsta,jsta_2l & - ,jend_2u,MPI_COMM_COMP,icnt,idsp,spval,VarName & - ,jpds,jgds,kpds,z0) - if(debugprint)print*,'sample ',VarName,' = ',z0(im/2,(jsta+jend)/2) - -! surface potential T using getgb - Index=26 - VarName=avbl(index) - jpds=-1.0 - jgds=-1.0 - jpds(5)=iq(index) - jpds(6)=is(index) - call getgbandscatter(me,iunit,im,jm,im_jm,jsta,jsta_2l & - ,jend_2u,MPI_COMM_COMP,icnt,idsp,spval,VarName & - ,jpds,jgds,kpds,ths) - - -! where(ths/=spval)ths=ths*(p1000/pint(:,:,lp1))**CAPA ! convert to THS - -!$omp parallel do private(i,j) - do j=jsta,jend - do i=1,im - if (ths(i,j) /= spval) then -! write(0,*)' i=',i,' j=',j,' ths=',ths(i,j),' pint=',pint(i,j,lp1) - ths(i,j) = ths(i,j) * (p1000/pint(i,j,lp1))**capa - endif - enddo - enddo - - if(debugprint)print*,'sample ',VarName,' = ',ths(im/2,(jsta+jend)/2) - - QS = SPVAL ! GFS does not have surface specific humidity - twbs = SPVAL ! GFS does not have inst sensible heat flux - qwbs = SPVAL ! GFS does not have inst latent heat flux - -! GFS does not have time step and physics time step, make up ones since they -! are not really used anyway - NPHS = 2. - DT = 80. - DTQ2 = DT * NPHS !MEB need to get physics DT - TSPH = 3600./DT !MEB need to get DT - -! convective precip in m per physics time step using getgb - Index=272 - VarName=avbl(index) - jpds=-1.0 - jgds=-1.0 - jpds(5)=iq(index) - jpds(6)=is(index) -! jpds(16)=3 ! CFSRR uses 1 for fhr>1532 - call getgbandscatter(me,iunit,im,jm,im_jm,jsta,jsta_2l & - ,jend_2u,MPI_COMM_COMP,icnt,idsp,spval,VarName & - ,jpds,jgds,kpds,avgcprate) - where(avgcprate /= spval)avgcprate=avgcprate*dtq2/1000. ! convert to m - if(debugprint)print*,'sample ',VarName,' = ',avgcprate(im/2,(jsta+jend)/2) - - cprate=avgcprate - -! construct tprec from flux grib massage -! comment this out because you can't get precip bucket from flux file -! if(me==0 .and. iostatusFlux==0)then -! if(kpds(16)==3)then ! Grib1 can't specify accumulated field fhr>1532 -! if(KPDS(13)==1)then -! TPREC=float(KPDS(15)-KPDS(14)) -! else if(KPDS(13)==10)then -! TPREC=float(KPDS(15)-KPDS(14))*3.0 -! else if(KPDS(13)==11)then -! TPREC=float(KPDS(15)-KPDS(14))*6.0 -! else if(KPDS(13)==12)then -! TPREC=float(KPDS(15)-KPDS(14))*12.0 -! else if(KPDS(13)==2)then -! TPREC=float(KPDS(15)-KPDS(14))*24.0 -! else -! TPREC=float(KPDS(15)-KPDS(14)) -! end if -! else -! CALL GETENV('FHZER',ENVAR) -! read(ENVAR, '(I2)')idum -! tprec = idum * 1.0 -! print*,'TPREC from FHZER= ',tprec -! end if -! end if -! call mpi_bcast(tprec,1,MPI_REAL,0,mpi_comm_comp,iret) - -! precip rate in m per physics time step using getgb - Index=271 - VarName=avbl(index) - jpds=-1.0 - jgds=-1.0 - jpds(5)=iq(index) - jpds(6)=is(index) - call getgbandscatter(me,iunit,im,jm,im_jm,jsta,jsta_2l & - ,jend_2u,MPI_COMM_COMP,icnt,idsp,spval,VarName & - ,jpds,jgds,kpds,avgprec) - where(avgprec /= spval) avgprec = avgprec*dtq2/1000. ! convert to m - - if(debugprint)print*,'sample ',VarName,' = ',avgprec(im/2,(jsta+jend)/2) - -! inst precip rate in m per physics time step using sfcio - if(me==0)then - call getenv('SFCINPUT',sfcfilename) - print*,'opening sfcfile to read',sfcfilename - call sfcio_srohdc(35,sfcfilename,head,data,iret) - if(iret /=0 )then - print*,'fail to read ',sfcfilename - dummy = spval - dummy2 = spval - else - dummy = data%tprcp - print '(f8.2)',dummy(1,1) -! dummy2 = data%srflag - end if - end if - - call mpi_scatterv(dummy(1,1),icnt,idsp,mpi_real & - ,prec(1,jsta),icnt(me),mpi_real,0,MPI_COMM_COMP,iret) - - print*,'sampe inst precip= ',prec(im/2,jsta) - - where(prec /= spval) prec = prec*dtq2/1000. ! convert to m - -! call mpi_scatterv(dummy2(1,1),icnt,idsp,mpi_real & -! ,sr(1,jsta),icnt(me),mpi_real,0,MPI_COMM_COMP,iret) -! print*,'sampe GFS sr= ',sr(im/2,jsta) - - deallocate(dummy2) -! prec=avgprec !set avg cprate to inst one to derive other fields - -! GFS does not have accumulated total, gridscale, and convective precip, will use inst precip to derive in SURFCE.f - - - lspa = spval ! GFS does not have similated precip - -! inst snow water eqivalent using getgb - Index=119 - VarName=avbl(index) - jpds=-1.0 - jgds=-1.0 - jpds(5)=iq(index) - jpds(6)=is(index) - call getgbandscatter(me,iunit,im,jm,im_jm,jsta,jsta_2l & - ,jend_2u,MPI_COMM_COMP,icnt,idsp,spval,VarName & - ,jpds,jgds,kpds,sno) - - if(debugprint)print*,'sample ',VarName,' = ',sno(im/2,(jsta+jend)/2) - -! snow depth in mm using getgb - Index=224 - VarName=avbl(index) - jpds=-1.0 - jgds=-1.0 - jpds(5)=iq(index) - jpds(6)=is(index) - call getgbandscatter(me,iunit,im,jm,im_jm,jsta,jsta_2l & - ,jend_2u,MPI_COMM_COMP,icnt,idsp,spval,VarName & - ,jpds,jgds,kpds,si) - where(si /= spval) si = si*1000. ! convert to mm - - if(debugprint)print*,'sample ',VarName,' = ',si(im/2,(jsta+jend)/2) - - CLDEFI = SPVAL ! GFS does not have convective cloud efficiency - TH10 = SPVAL ! GFS does not have 10 m theta - Q10 = SPVAL ! GFS does not have 10 m humidity - -! 2m T using nemsio - Index=106 - VarName=avbl(index) - jpds=-1.0 - jgds=-1.0 - jpds(5)=iq(index) - jpds(6)=is(index) - jpds(7)=2 - call getgbandscatter(me,iunit,im,jm,im_jm,jsta,jsta_2l & - ,jend_2u,MPI_COMM_COMP,icnt,idsp,spval,VarName & - ,jpds,jgds,kpds,tshltr) - if(debugprint)print*,'sample ',VarName,' = ',tshltr(im/2,(jsta+jend)/2) - -! GFS does not have 2m pres, estimate it, also convert t to theta -!$omp parallel do private(i,j) - Do j=jsta,jend - Do i=1,im - if(tshltr(i,j) /= spval)then - -! if (me == 127) write(0,*)' i=',i,' j=',j,' tshltr=',tshltr(i,j) & -! ,' pint=',pint(I,J,lm+1) - - PSHLTR(I,J) = pint(I,J,lm+1)*EXP(-0.068283/tshltr(i,j)) - tshltr(i,j) = tshltr(i,j)*(p1000/PSHLTR(I,J))**CAPA ! convert to theta - else - PSHLTR(I,J) = spval - end if -! if (j==jm/2 .and. mod(i,50)==0) -! + print*,'sample 2m T and P after scatter= ' -! + ,i,j,tshltr(i,j),pshltr(i,j) - end do - end do - -! 2m specific humidity using gfsio -! VarName='spfh' -! VcoordName='2m above gnc' -! l=1 -! if(me == 0)then -! call gfsio_readrecvw34(gfile,trim(VarName),trim(VcoordName) & -! + ,l,dummy,iret=iret) -! if (iret /= 0) then -! print*,VarName," not found in file-Assigned missing values" -! dummy=spval -! end if -! end if -! call mpi_scatterv(dummy,icnt,idsp,mpi_real & -! + ,qshltr(1,jsta),icnt(me),mpi_real,0,MPI_COMM_COMP,iret) -! if (iret /= 0)print*,'Error scattering array';stop - -! 2m specific humidity using nemsio - Index=112 - VarName=avbl(index) - jpds=-1.0 - jgds=-1.0 - jpds(5)=iq(index) - jpds(6)=is(index) - call getgbandscatter(me,iunit,im,jm,im_jm,jsta,jsta_2l & - ,jend_2u,MPI_COMM_COMP,icnt,idsp,spval,VarName & - ,jpds,jgds,kpds,qshltr) - if(debugprint)print*,'sample ',VarName,' = ',qshltr(im/2,(jsta+jend)/2) - - Q2 = SPVAL ! GFS does not have TKE because it uses GFS scheme - ! GFS does not have surface exchange coeff - ALBASE = SPVAL ! GFS does not have snow free albedo - -! mid day avg albedo in fraction using nemsio - Index=266 - VarName=avbl(index) - jpds=-1.0 - jgds=-1.0 - jpds(5)=iq(index) - jpds(6)=is(index) - call getgbandscatter(me,iunit,im,jm,im_jm,jsta,jsta_2l & - ,jend_2u,MPI_COMM_COMP,icnt,idsp,spval,VarName & - ,jpds,jgds,kpds,avgalbedo) - where(avgalbedo /= spval)avgalbedo=avgalbedo/100. ! convert to fraction - if(debugprint)print*,'sample ',VarName,' = ',avgalbedo(im/2,(jsta+jend)/2) - -! time averaged column cloud fractionusing nemsio - Index=144 - VarName=avbl(index) - jpds=-1.0 - jgds=-1.0 - jpds(5)=iq(index) - jpds(6)=is(index) - call getgbandscatter(me,iunit,im,jm,im_jm,jsta,jsta_2l & - ,jend_2u,MPI_COMM_COMP,icnt,idsp,spval,VarName & - ,jpds,jgds,kpds,avgtcdc) - where(avgtcdc /= spval)avgtcdc=avgtcdc/100. ! convert to fraction - if(debugprint)print*,'sample ',VarName,' = ',avgtcdc(im/2,(jsta+jend)/2) - -! if(me==0 .and. iostatusFlux==0)then -! if(KPDS(13)==1)then -! TCLOD=float(KPDS(15)-KPDS(14)) -! else if(KPDS(13)==10)then -! TCLOD=float(KPDS(15)-KPDS(14))*3.0 -! else if(KPDS(13)==11)then -! TCLOD=float(KPDS(15)-KPDS(14))*6.0 -! else if(KPDS(13)==12)then -! TCLOD=float(KPDS(15)-KPDS(14))*12.0 -! else if(KPDS(13)==2)then -! TCLOD=float(KPDS(15)-KPDS(14))*24.0 -! else -! TCLOD=float(KPDS(15)-KPDS(14)) -! end if -! end if -! call mpi_bcast(tclod,1,MPI_REAL,0,mpi_comm_comp,iret) -! print*,'TCLOD from flux grib massage= ',TCLOD - - Czen = spval ! GFS probably does not use zenith angle (What???) - CZMEAN = SPVAL - -! maximum snow albedo in fraction using nemsio - Index=227 - VarName=avbl(index) - jpds=-1.0 - jgds=-1.0 - jpds(5)=iq(index) - jpds(6)=is(index) - call getgbandscatter(me,iunit,im,jm,im_jm,jsta,jsta_2l & - ,jend_2u,MPI_COMM_COMP,icnt,idsp,spval,VarName & - ,jpds,jgds,kpds,mxsnal) - where(mxsnal /= spval)mxsnal=mxsnal/100. ! convert to fraction - if(debugprint)print*,'sample ',VarName,' = ',mxsnal(im/2,(jsta+jend)/2) - - radot = spval ! GFS does not have inst surface outgoing longwave - -! GFS probably does not use sigt4, set it to sig*t^4 -!$omp parallel do private(i,j,tlmh) - Do j=jsta,jend - Do i=1,im - TLMH = T(I,J,LM) - Sigt4(I,j) = 5.67E-8*TLMH*TLMH*TLMH*TLMH - End do - End do - -! TG is not used, skip it for now -! allocate(qstl(lm)) - allocate(p2d(im,lm),t2d(im,lm),q2d(im,lm),cw2d(im,lm), & - qs2d(im,lm),cfr2d(im,lm)) - do j=jsta,jend -!$omp parallel do private(i,k,es) - do k=1,lm - do i=1,im - p2d(i,k) = pmid(i,j,k)*0.01 - t2d(i,k) = t(i,j,k) - q2d(i,k) = q(i,j,k) - cw2d(i,k) = cwm(i,j,k) - es = min(fpvsnew(t(i,j,k)),pmid(i,j,k)) - qs2d(i,k) = con_eps*es/(pmid(i,j,k)+con_epsm1*es)!saturation q for GFS - enddo - enddo - call progcld1 & -!................................... -! --- inputs: - ( p2d,t2d,q2d,qs2d,cw2d,im,lm,0, & -! --- outputs: - cfr2d & - ) -!$omp parallel do private(i,k) - do k=1,lm - do i=1,im - cfr(i,j,k) = cfr2d(i,k) - enddo - end do - end do - deallocate(p2d,t2d,q2d,qs2d,cw2d,cfr2d) - -! ask moorthi if there is snow rate in GFS -! varname='SR' -! call retrieve_index(index,VarName,varname_all,nrecs,iret) -! if (iret /= 0) then -! print*,VarName," not found in file-Assigned missing values" -! SR=SPVAL -! else -! this_offset=file_offset(index+1)+(jsta_2l-1)*4*im -! this_length=im*(jend_2u-jsta_2l+1) -! call mpi_file_read_at(iunit,this_offset -! + ,sr,this_length,mpi_real4 -! + , mpi_status_ignore, ierr) -! if (ierr /= 0) then -! print*,"Error reading ", VarName,"Assigned missing values" -! SR=SPVAL -! end if -! end if - -! GFS does not have inst cloud fraction for high, middle, and low cloud - cfrach = spval - cfracl = spval - cfracm = spval - -! ave high cloud fraction using nemsio - Index=302 - VarName=avbl(index) - jpds=-1.0 - jgds=-1.0 - jpds(5)=iq(index) - jpds(6)=is(index) - call getgbandscatter(me,iunit,im,jm,im_jm,jsta,jsta_2l & - ,jend_2u,MPI_COMM_COMP,icnt,idsp,spval,VarName & - ,jpds,jgds,kpds,avgcfrach) - where(avgcfrach /= spval)avgcfrach=avgcfrach/100. ! convert to fraction - - if(debugprint)print*,'sample ',VarName,' = ',avgcfrach(im/2,(jsta+jend)/2) - -! ave low cloud fraction using nemsio - VarName='tcdc' - Index=300 - VarName=avbl(index) - jpds=-1.0 - jgds=-1.0 - jpds(5)=iq(index) - jpds(6)=is(index) - call getgbandscatter(me,iunit,im,jm,im_jm,jsta,jsta_2l & - ,jend_2u,MPI_COMM_COMP,icnt,idsp,spval,VarName & - ,jpds,jgds,kpds,avgcfracl) - where(avgcfracl /= spval)avgcfracl=avgcfracl/100. ! convert to fraction - if(debugprint)print*,'sample ',VarName,' = ',avgcfracl(im/2,(jsta+jend)/2) - -! ave middle cloud fraction using nemsio - VarName='tcdc' - VcoordName='mid cld lay' - Index=301 - VarName=avbl(index) - jpds=-1.0 - jgds=-1.0 - jpds(5)=iq(index) - jpds(6)=is(index) - call getgbandscatter(me,iunit,im,jm,im_jm,jsta,jsta_2l & - ,jend_2u,MPI_COMM_COMP,icnt,idsp,spval,VarName & - ,jpds,jgds,kpds,avgcfracm) - where(avgcfracm /= spval)avgcfracm=avgcfracm/100. ! convert to fraction - if(debugprint)print*,'sample ',VarName,' = ',avgcfracm(im/2,(jsta+jend)/2) - -! inst convective cloud fraction using nemsio - VarName='tcdc' - VcoordName='convect-cld laye' - Index=196 - VarName=avbl(index) - jpds=-1.0 - jgds=-1.0 - jpds(5)=71 - jpds(6)=244 - call getgbandscatter(me,iunit,im,jm,im_jm,jsta,jsta_2l & - ,jend_2u,MPI_COMM_COMP,icnt,idsp,spval,VarName & - ,jpds,jgds,kpds,cnvcfr) - where(cnvcfr /= spval)cnvcfr=cnvcfr/100. ! convert to fraction - if(debugprint)print*,'sample ',VarName,' = ',cnvcfr(im/2,(jsta+jend)/2) - -! slope type using nemsio - Index=223 - VarName=avbl(index) - jpds=-1.0 - jgds=-1.0 - jpds(5)=iq(index) - jpds(6)=is(index) - call getgbandscatter(me,iunit,im,jm,im_jm,jsta,jsta_2l & - ,jend_2u,MPI_COMM_COMP,icnt,idsp,spval,VarName & - ,jpds,jgds,kpds,buf) - where(buf /= spval)islope=nint(buf) - if(debugprint)print*,'sample ',VarName,' = ',islope(im/2,(jsta+jend)/2) - -! plant canopy sfc wtr in m using nemsio - VarName='cnwat' - VcoordName='sfc' - Index=118 - VarName=avbl(index) - jpds=-1.0 - jgds=-1.0 - jpds(5)=iq(index) - jpds(6)=is(index) - jpds(7)=0 - call getgbandscatter(me,iunit,im,jm,im_jm,jsta,jsta_2l & - ,jend_2u,MPI_COMM_COMP,icnt,idsp,spval,VarName & - ,jpds,jgds,kpds,cmc) - where(cmc /= spval)cmc=cmc/1000. ! convert from kg*m^2 to m - if(debugprint)print*,'sample ',VarName,' = ',cmc(im/2,(jsta+jend)/2) - - grnflx = spval ! GFS does not have inst ground heat flux - -! GFS does not have snow cover yet -! VarName='gflux' -! VcoordName='sfc' -! l=1 -! if(me == 0)then -! call gfsio_readrecvw34(gfile,trim(VarName),trim(VcoordName) & -! + ,l,dummy,iret=iret) -! if (iret /= 0) then -! print*,VarName," not found in file-Assigned missing values" -! dummy=spval -! end if -! end if -! call mpi_scatterv(dummy,icnt,idsp,mpi_real & -! + , pctsno(1,jsta),icnt(me),mpi_real,0,MPI_COMM_COMP,iret) -! if (iret /= 0)print*,'Error scattering array';stop - - soiltb = spval - tg = spval -! vegetation fraction in fraction. using nemsio - VarName='veg' - VcoordName='sfc' - Index=170 - VarName=avbl(index) - jpds=-1.0 - jgds=-1.0 - jpds(5)=iq(index) - jpds(6)=is(index) - jpds(7)=0 - call getgbandscatter(me,iunit,im,jm,im_jm,jsta,jsta_2l & - ,jend_2u,MPI_COMM_COMP,icnt,idsp,spval,VarName & - ,jpds,jgds,kpds,vegfrc) - where(vegfrc /= spval) - vegfrc = vegfrc/100. ! convert to fraction - elsewhere (vegfrc == spval) - vegfrc = 0. ! set to zero to be reasonable input for crtm - end where - if(debugprint)print*,'sample ',VarName,' = ',vegfrc(im/2,(jsta+jend)/2) - -! GFS doesn not yet output soil layer thickness, assign SLDPTH to be the same as nam - - SLDPTH(1) = 0.10 - SLDPTH(2) = 0.3 - SLDPTH(3) = 0.6 - SLDPTH(4) = 1.0 - -! liquid volumetric soil mpisture in fraction using nemsio - VarName='soill' - VcoordName='0-10 cm down' - Index=225 - VarName=avbl(index) - jpds=-1.0 - jgds=-1.0 - jpds(5)=iq(index) - jpds(6)=is(index) - do l=1,nsoil - if(l == 1)then - jpds(7)=nint(sldpth(1)*100.) - else - soilayert=0 - do n=1,l-1 - soilayert=soilayert+sldpth(n)*100. - end do - soilayerb=soilayert+sldpth(l)*100. - jpds(7)=nint(soilayert*256.+soilayerb) - end if - - call getgbandscatter(me,iunit,im,jm,im_jm,jsta,jsta_2l & - ,jend_2u,MPI_COMM_COMP,icnt,idsp,spval,VarName & - ,jpds,jgds,kpds,sh2o(1,jsta_2l,l)) - if(debugprint)print*,'sample l',VarName,' = ',l,sh2o(im/2,(jsta+jend)/2,1) - End do ! do loop for l - -! volumetric soil moisture using nemsio - VarName='soilw' - VcoordName='0-10 cm down' - Index=117 - VarName=avbl(index) - jpds=-1.0 - jgds=-1.0 - jpds(5)=iq(index) - jpds(6)=is(index) - do l=1,nsoil - if(l == 1)then - jpds(7)=nint(sldpth(1)*100.) - else - soilayert=0 - do n=1,l-1 - soilayert=soilayert+sldpth(n)*100. - end do - soilayerb=soilayert+sldpth(l)*100. - jpds(7)=nint(soilayert*256.+soilayerb) - end if - - call getgbandscatter(me,iunit,im,jm,im_jm,jsta,jsta_2l & - ,jend_2u,MPI_COMM_COMP,icnt,idsp,spval,VarName & - ,jpds,jgds,kpds,smc(1,jsta_2l,l)) - if(debugprint)print*,'sample l',VarName,' = ',l,smc(im/2,(jsta+jend)/2,1) - End do ! do loop for l - -! soil temperature using nemsio - VarName='tmp' - VcoordName='0-10 cm down' - Index=116 - VarName=avbl(index) - jpds=-1.0 - jgds=-1.0 - jpds(5)=11 ! GFS used 11 for soil T instead of 85 - jpds(6)=is(index) - do l=1,nsoil - if(l == 1)then - jpds(7)=nint(sldpth(1)*100.) - else - soilayert=0 - do n=1,l-1 - soilayert=soilayert+sldpth(n)*100. - end do - soilayerb=soilayert+sldpth(l)*100. - jpds(7)=nint(soilayert*256.+soilayerb) - end if - - call getgbandscatter(me,iunit,im,jm,im_jm,jsta,jsta_2l & - ,jend_2u,MPI_COMM_COMP,icnt,idsp,spval,VarName & - ,jpds,jgds,kpds,stc(1,jsta_2l,l)) - - if(debugprint)print*,'sample l','stc',' = ',1,stc(im/2,(jsta+jend)/2,1) - End do ! do loop for l - -! GFS does not output time averaged convective and strat cloud fraction, set acfrcv to spval, ncfrcv to 1 - acfrcv = spval - ncfrcv = 1.0 -! GFS does not output time averaged cloud fraction, set acfrst to spval, ncfrst to 1 - acfrst = spval - ncfrst = 1.0 - -! GFS does not have storm runoff - ssroff = spval - -! GFS does not have UNDERGROUND RUNOFF - bgroff = spval - -! GFS incoming sfc longwave has been averaged over 6 hr bucket, set ARDLW to 1 - ardlw = 1.0 -! trdlw=6.0 - -! GFS does not have inst incoming sfc longwave - rlwin = spval - -! GFS does not have inst model top outgoing longwave - rlwtoa = spval - -! time averaged incoming sfc longwave using nemsio - VarName='dlwrf' - VcoordName='sfc' - Index=127 - VarName=avbl(index) - jpds=-1.0 - jgds=-1.0 - jpds(5)=iq(index) - jpds(6)=is(index) - jpds(7)=0 - call getgbandscatter(me,iunit,im,jm,im_jm,jsta,jsta_2l & - ,jend_2u,MPI_COMM_COMP,icnt,idsp,spval,VarName & - ,jpds,jgds,kpds,alwin) - -! if(me==0 .and. iostatusFlux==0)then -! if(KPDS(13)==1)then -! TRDLW=float(KPDS(15)-KPDS(14)) -! else if(KPDS(13)==10)then -! TRDLW=float(KPDS(15)-KPDS(14))*3.0 -! else if(KPDS(13)==11)then -! TRDLW=float(KPDS(15)-KPDS(14))*6.0 -! else if(KPDS(13)==12)then -! TRDLW=float(KPDS(15)-KPDS(14))*12.0 -! else if(KPDS(13)==2)then -! TRDLW=float(KPDS(15)-KPDS(14))*24.0 -! else -! TRDLW=float(KPDS(15)-KPDS(14)) -! end if -! end if -! call mpi_bcast(TRDLW,1,MPI_REAL,0,mpi_comm_comp,iret) -! print*,'TRDLW from flux grib massage= ',TRDLW - -! time averaged outgoing sfc longwave using gfsio - VarName='ulwrf' - VcoordName='sfc' - Index=129 - VarName=avbl(index) - jpds=-1.0 - jgds=-1.0 - jpds(5)=iq(index) - jpds(6)=is(index) - jpds(7)=0 - call getgbandscatter(me,iunit,im,jm,im_jm,jsta,jsta_2l & - ,jend_2u,MPI_COMM_COMP,icnt,idsp,spval,VarName & - ,jpds,jgds,kpds,alwout) - where(alwout /= spval) alwout=-alwout ! CLDRAD puts a minus sign before gribbing - if(debugprint)print*,'sample l',VarName,' = ',1,alwout(im/2,(jsta+jend)/2) - -! time averaged outgoing model top longwave using gfsio - VarName='ulwrf' - VcoordName='nom. top' - Index=131 - VarName=avbl(index) - jpds=-1.0 - jgds=-1.0 - jpds(5)=iq(index) - jpds(6)=is(index) - jpds(7)=0 - call getgbandscatter(me,iunit,im,jm,im_jm,jsta,jsta_2l & - ,jend_2u,MPI_COMM_COMP,icnt,idsp,spval,VarName & - ,jpds,jgds,kpds,alwtoa) - if(debugprint)print*,'sample l',VarName,' = ',1,alwtoa(im/2,(jsta+jend)/2) - -! GFS does not have inst incoming sfc shortwave - rswin = spval - -! GFS does not have inst incoming clear sky sfc shortwave - rswinc = spval - -! GFS does not have inst outgoing sfc shortwave - rswout = spval - -! GFS incoming sfc longwave has been averaged, set ARDLW to 1 - ardsw = 1.0 -! trdsw=6.0 - -! time averaged incoming sfc shortwave using gfsio - Index=126 - VarName=avbl(index) - jpds=-1.0 - jgds=-1.0 - jpds(5)=iq(index) - jpds(6)=is(index) - jpds(7)=0 - call getgbandscatter(me,iunit,im,jm,im_jm,jsta,jsta_2l & - ,jend_2u,MPI_COMM_COMP,icnt,idsp,spval,VarName & - ,jpds,jgds,kpds,aswin) - if(debugprint)print*,'sample l',VarName,' = ',1,aswin(im/2,(jsta+jend)/2) - -! if(me==0 .and. iostatusFlux==0)then -! if(KPDS(13)==1)then -! TRDSW=float(KPDS(15)-KPDS(14)) -! else if(KPDS(13)==10)then -! TRDSW=float(KPDS(15)-KPDS(14))*3.0 -! else if(KPDS(13)==11)then -! TRDSW=float(KPDS(15)-KPDS(14))*6.0 -! else if(KPDS(13)==12)then -! TRDSW=float(KPDS(15)-KPDS(14))*12.0 -! else if(KPDS(13)==2)then -! TRDSW=float(KPDS(15)-KPDS(14))*24.0 -! else -! TRDSW=float(KPDS(15)-KPDS(14)) -! end if -! end if -! call mpi_bcast(trdsw,1,MPI_REAL,0,mpi_comm_comp,iret) -! print*,'TRDSW from flux grib massage= ',trdsw - -! time averaged incoming sfc uv-b using getgb - VarName='duvb' - VcoordName='sfc' - Index=298 - VarName=avbl(index) - jpds=-1.0 - jgds=-1.0 - jpds(5)=iq(index) - jpds(6)=is(index) - jpds(7)=0 - call getgbandscatter(me,iunit,im,jm,im_jm,jsta,jsta_2l & - ,jend_2u,MPI_COMM_COMP,icnt,idsp,spval,VarName & - ,jpds,jgds,kpds,auvbin) - if(debugprint)print*,'sample l',VarName,' = ',1,auvbin(im/2,(jsta+jend)/2) - -! time averaged incoming sfc clear sky uv-b using getgb - VarName='cduvb' - VcoordName='sfc' - Index=297 - VarName=avbl(index) - jpds=-1.0 - jgds=-1.0 - jpds(5)=iq(index) - jpds(6)=is(index) - jpds(7)=0 - call getgbandscatter(me,iunit,im,jm,im_jm,jsta,jsta_2l & - ,jend_2u,MPI_COMM_COMP,icnt,idsp,spval,VarName & - ,jpds,jgds,kpds,auvbinc) - if(debugprint)print*,'sample l',VarName,' = ',1,auvbinc(im/2,(jsta+jend)/2) - -! time averaged outgoing sfc shortwave using gfsio - VarName='uswrf' - VcoordName='sfc' - Index=128 - VarName=avbl(index) - jpds=-1.0 - jgds=-1.0 - jpds(5)=iq(index) - jpds(6)=is(index) - jpds(7)=0 - call getgbandscatter(me,iunit,im,jm,im_jm,jsta,jsta_2l & - ,jend_2u,MPI_COMM_COMP,icnt,idsp,spval,VarName & - ,jpds,jgds,kpds,aswout) - where(aswout /= spval) aswout=-aswout ! CLDRAD puts a minus sign before gribbing - if(debugprint)print*,'sample l',VarName,' = ',1,aswout(im/2,(jsta+jend)/2) - -! time averaged model top outgoing shortwave - VarName='uswrf' - VcoordName='nom. top' - Index=130 - VarName=avbl(index) - jpds=-1.0 - jgds=-1.0 - jpds(5)=iq(index) - jpds(6)=is(index) - jpds(7)=0 - call getgbandscatter(me,iunit,im,jm,im_jm,jsta,jsta_2l & - ,jend_2u,MPI_COMM_COMP,icnt,idsp,spval,VarName & - ,jpds,jgds,kpds,aswtoa) - if(debugprint)print*,'sample l',VarName,' = ',1,aswtoa(im/2,(jsta+jend)/2) - -! time averaged incoming clear sky sfc shortwave using getgb - Index=383 - VarName=avbl(index) - jpds=-1.0 - jgds=-1.0 - jpds(5)=iq(index) - jpds(6)=is(index) - jpds(7)=0 - jpds(13)=3 - call getgbandscatter(me,iunit,im,jm,im_jm,jsta,jsta_2l & - ,jend_2u,MPI_COMM_COMP,icnt,idsp,spval,VarName & - ,jpds,jgds,kpds,aswinc) - -! time averaged outgoing clear sky sfc shortwave using getgb - Index=386 - VarName=avbl(index) - jpds=-1.0 - jgds=-1.0 - jpds(5)=iq(index) - jpds(6)=is(index) - jpds(7)=0 - jpds(13)=3 - call getgbandscatter(me,iunit,im,jm,im_jm,jsta,jsta_2l & - ,jend_2u,MPI_COMM_COMP,icnt,idsp,spval,VarName & - ,jpds,jgds,kpds,aswoutc) - -! time averaged outgoing clear sky toa shortwave using getgb - Index=387 - VarName=avbl(index) - jpds=-1.0 - jgds=-1.0 - jpds(5)=iq(index) - jpds(6)=is(index) - jpds(7)=0 - jpds(13)=3 - call getgbandscatter(me,iunit,im,jm,im_jm,jsta,jsta_2l & - ,jend_2u,MPI_COMM_COMP,icnt,idsp,spval,VarName & - ,jpds,jgds,kpds,aswtoac) - -! time averaged model top incoming shortwave - Index=388 - VarName=avbl(index) - jpds=-1.0 - jgds=-1.0 - jpds(5)=iq(index) - jpds(6)=is(index) - jpds(7)=0 - call getgbandscatter(me,iunit,im,jm,im_jm,jsta,jsta_2l & - ,jend_2u,MPI_COMM_COMP,icnt,idsp,spval,VarName & - ,jpds,jgds,kpds,aswintoa) - -! time averaged surface visible beam downward solar flux - Index=401 - VarName=avbl(index) - jpds=-1.0 - jgds=-1.0 - jpds(5)=iq(index) - jpds(6)=is(index) - jpds(7)=0 - call getgbandscatter(me,iunit,im,jm,im_jm,jsta,jsta_2l & - ,jend_2u,MPI_COMM_COMP,icnt,idsp,spval,VarName & - ,jpds,jgds,kpds,avisbeamswin) - -! time averaged surface visible diffuse downward solar flux - Index=402 - VarName=avbl(index) - jpds=-1.0 - jgds=-1.0 - jpds(5)=iq(index) - jpds(6)=is(index) - jpds(7)=0 - call getgbandscatter(me,iunit,im,jm,im_jm,jsta,jsta_2l & - ,jend_2u,MPI_COMM_COMP,icnt,idsp,spval,VarName & - ,jpds,jgds,kpds,avisdiffswin) - -! time averaged surface near IR beam downward solar flux - Index=403 - VarName=avbl(index) - jpds=-1.0 - jgds=-1.0 - jpds(5)=iq(index) - jpds(6)=is(index) - jpds(7)=0 - call getgbandscatter(me,iunit,im,jm,im_jm,jsta,jsta_2l & - ,jend_2u,MPI_COMM_COMP,icnt,idsp,spval,VarName & - ,jpds,jgds,kpds,airbeamswin) - -! time averaged surface near IR diffuse downward solar flux - Index=404 - VarName=avbl(index) - jpds=-1.0 - jgds=-1.0 - jpds(5)=iq(index) - jpds(6)=is(index) - jpds(7)=0 - call getgbandscatter(me,iunit,im,jm,im_jm,jsta,jsta_2l & - ,jend_2u,MPI_COMM_COMP,icnt,idsp,spval,VarName & - ,jpds,jgds,kpds,airdiffswin) - -! time averaged surface sensible heat flux, multiplied by -1 because wrf model flux -! has reversed sign convention using gfsio - VarName='shtfl' - VcoordName='sfc' - Index=43 - VarName=avbl(index) - jpds=-1.0 - jgds=-1.0 - jpds(5)=iq(index) - jpds(6)=is(index) - jpds(7)=0 - call getgbandscatter(me,iunit,im,jm,im_jm,jsta,jsta_2l & - ,jend_2u,MPI_COMM_COMP,icnt,idsp,spval,VarName & - ,jpds,jgds,kpds,sfcshx) - where (sfcshx /= spval)sfcshx=-sfcshx - if(debugprint)print*,'sample l',VarName,' = ',1,sfcshx(im/2,(jsta+jend)/2) - -! if(me==0 .and. iostatusFlux==0)then -! if(KPDS(13)==1)then -! TSRFC=float(KPDS(15)-KPDS(14)) -! else if(KPDS(13)==10)then -! TSRFC=float(KPDS(15)-KPDS(14))*3.0 -! else if(KPDS(13)==11)then -! TSRFC=float(KPDS(15)-KPDS(14))*6.0 -! else if(KPDS(13)==12)then -! TSRFC=float(KPDS(15)-KPDS(14))*12.0 -! else if(KPDS(13)==2)then -! TSRFC=float(KPDS(15)-KPDS(14))*24.0 -! else -! TSRFC=float(KPDS(15)-KPDS(14)) -! end if -! end if -! call mpi_bcast(tsrfc,1,MPI_REAL,0,mpi_comm_comp,iret) -! print*,'TSRFC from flux grib massage= ',tsrfc - -! GFS surface flux has been averaged, set ASRFC to 1 - asrfc=1.0 -! tsrfc=6.0 - -! time averaged surface latent heat flux, multiplied by -1 because wrf model flux -! has reversed sign vonvention using gfsio - Index=42 - VarName=avbl(index) - jpds=-1.0 - jgds=-1.0 - jpds(5)=iq(index) - jpds(6)=is(index) - jpds(7)=0 - call getgbandscatter(me,iunit,im,jm,im_jm,jsta,jsta_2l & - ,jend_2u,MPI_COMM_COMP,icnt,idsp,spval,VarName & - ,jpds,jgds,kpds,sfclhx) - where (sfclhx /= spval)sfclhx=-sfclhx - if(debugprint)print*,'sample l',VarName,' = ',1,sfclhx(im/2,(jsta+jend)/2) - -! time averaged ground heat flux using nemsio - VarName='gflux' - VcoordName='sfc' - Index=135 - VarName=avbl(index) - jpds=-1.0 - jgds=-1.0 - jpds(5)=iq(index) - jpds(6)=is(index) - jpds(7)=0 - call getgbandscatter(me,iunit,im,jm,im_jm,jsta,jsta_2l & - ,jend_2u,MPI_COMM_COMP,icnt,idsp,spval,VarName & - ,jpds,jgds,kpds,subshx) - if(debugprint)print*,'sample l',VarName,' = ',1,subshx(im/2,(jsta+jend)/2) - -! GFS does not have snow phase change heat flux - snopcx=spval - -! time averaged zonal momentum flux using gfsio - VarName='uflx' - VcoordName='sfc' - Index=269 - VarName=avbl(index) - jpds=-1.0 - jgds=-1.0 - jpds(5)=iq(index) - jpds(6)=is(index) - jpds(7)=0 - call getgbandscatter(me,iunit,im,jm,im_jm,jsta,jsta_2l & - ,jend_2u,MPI_COMM_COMP,icnt,idsp,spval,VarName & - ,jpds,jgds,kpds,sfcux) - if(debugprint)print*,'sample l',VarName,' = ',1,sfcux(im/2,(jsta+jend)/2) - -! time averaged meridional momentum flux using nemsio - VarName='vflx' - VcoordName='sfc' - Index=270 - VarName=avbl(index) - jpds=-1.0 - jgds=-1.0 - jpds(5)=iq(index) - jpds(6)=is(index) - jpds(7)=0 - call getgbandscatter(me,iunit,im,jm,im_jm,jsta,jsta_2l & - ,jend_2u,MPI_COMM_COMP,icnt,idsp,spval,VarName & - ,jpds,jgds,kpds,sfcvx) - if(debugprint)print*,'sample l',VarName,' = ',1,sfcvx(im/2,(jsta+jend)/2) - -! GFS does not use total momentum flux - sfcuvx=spval - -! time averaged zonal gravity wave stress using nemsio - VarName='u-gwd' - VcoordName='sfc' - Index=315 - VarName=avbl(index) - jpds=-1.0 - jgds=-1.0 - jpds(5)=iq(index) - jpds(6)=is(index) - jpds(7)=0 - call getgbandscatter(me,iunit,im,jm,im_jm,jsta,jsta_2l & - ,jend_2u,MPI_COMM_COMP,icnt,idsp,spval,VarName & - ,jpds,jgds,kpds,sfcugs) - gtaux=sfcugs - if(debugprint)print*,'sample l',VarName,' = ',1,gtaux(im/2,(jsta+jend)/2) - -! time averaged meridional gravity wave stress using getgb - VarName='v-gwd' - VcoordName='sfc' - Index=316 - VarName=avbl(index) - jpds=-1.0 - jgds=-1.0 - jpds(5)=iq(index) - jpds(6)=is(index) - jpds(7)=0 - call getgbandscatter(me,iunit,im,jm,im_jm,jsta,jsta_2l & - ,jend_2u,MPI_COMM_COMP,icnt,idsp,spval,VarName & - ,jpds,jgds,kpds,sfcvgs) - gtauy=sfcvgs - if(debugprint)print*,'sample l',VarName,' = ',1,gtauy(im/2,(jsta+jend)/2) - -! time averaged accumulated potential evaporation - VarName='pevpr' - VcoordName='sfc' - Index=242 - VarName=avbl(index) - jpds=-1.0 - jgds=-1.0 - jpds(5)=iq(index) - jpds(6)=is(index) - jpds(7)=0 - call getgbandscatter(me,iunit,im,jm,im_jm,jsta,jsta_2l & - ,jend_2u,MPI_COMM_COMP,icnt,idsp,spval,VarName & - ,jpds,jgds,kpds,potevp) - if(debugprint)print*,'sample l',VarName,' = ',1,potevp(im/2,(jsta+jend)/2) - -! GFS does not have temperature tendency due to long wave radiation - rlwtt=spval - -! GFS does not have temperature tendency due to solar radiation - rswtt=spval - -! GFS does not have temperature tendency due to latent heating from convection - tcucn=spval - tcucns=spval - -! set avrain to 1 - avrain=1.0 - avcnvc=1.0 - theat=6.0 ! just in case GFS decides to output T tendency - -! GFS does not have temperature tendency due to latent heating from grid scale - train=spval - -! 10 m u using nemsio - VarName='ugrd' - VcoordName='10 m above gnd' - Index=64 - VarName=avbl(index) - jpds=-1.0 - jgds=-1.0 - jpds(5)=iq(index) - jpds(6)=is(index) - jpds(7)=10 - call getgbandscatter(me,iunit,im,jm,im_jm,jsta,jsta_2l & - ,jend_2u,MPI_COMM_COMP,icnt,idsp,spval,VarName & - ,jpds,jgds,kpds,u10) - if(debugprint)print*,'sample l',VarName,' = ',1,u10(im/2,(jsta+jend)/2) - u10h=u10 -! 10 m v using gfsio - VarName='vgrd' - VcoordName='10 m above gnd' - Index=65 - VarName=avbl(index) - jpds=-1.0 - jgds=-1.0 - jpds(5)=iq(index) - jpds(6)=is(index) - jpds(7)=10 - call getgbandscatter(me,iunit,im,jm,im_jm,jsta,jsta_2l & - ,jend_2u,MPI_COMM_COMP,icnt,idsp,spval,VarName & - ,jpds,jgds,kpds,v10) - if(debugprint)print*,'sample l',VarName,' = ',1,v10(im/2,(jsta+jend)/2) - v10h=v10 -! GFS does not have soil moisture availability - smstav=spval - -! GFS does not have total soil moisture - smstot=spval - -! vegetation type, it's in GFS surface file, hopefully will merge into gfsio soon - VarName='vgtyp' - VcoordName='sfc' - Index=218 - VarName=avbl(index) - jpds=-1.0 - jgds=-1.0 - jpds(5)=iq(index) - jpds(6)=is(index) - jpds(7)=0 - call getgbandscatter(me,iunit,im,jm,im_jm,jsta,jsta_2l & - ,jend_2u,MPI_COMM_COMP,icnt,idsp,spval,VarName & - ,jpds,jgds,kpds,buf) - where (buf /= spval) - ivgtyp=nint(buf) - elsewhere - ivgtyp=0 !need to feed reasonable value to crtm - end where - if(debugprint)print*,'sample l',VarName,' = ',1,ivgtyp(im/2,(jsta+jend)/2) - -! soil type, it's in GFS surface file, hopefully will merge into gfsio soon - VarName='sotyp' - VcoordName='sfc' - Index=219 - VarName=avbl(index) - jpds=-1.0 - jgds=-1.0 - jpds(5)=iq(index) - jpds(6)=is(index) - jpds(7)=0 - call getgbandscatter(me,iunit,im,jm,im_jm,jsta,jsta_2l & - ,jend_2u,MPI_COMM_COMP,icnt,idsp,spval,VarName & - ,jpds,jgds,kpds,buf) - where (buf /= spval) - isltyp=nint(buf) - elsewhere - isltyp=0 !need to feed reasonable value to crtm - end where - if(debugprint)print*,'sample l',VarName,' = ',1,isltyp(im/2,(jsta+jend)/2) - -! GFS does not have accumulated surface evaporation - sfcevp=spval - -! GFS does not have surface exchange coeefficient - sfcexc=spval - -! GFS does not have averaged accumulated snow - acsnow=spval - -! GFS does not have snow melt - acsnom=spval - -! GFS does not have sst???? - sst=spval - -! GFS does not have mixing length - EL_PBL=spval - -! GFS does not output exchange coefficient - exch_h=spval - -! GFS does not have THZ0, use THS to substitute - thz0=ths - if(debugprint)print*,'sample l',VarName,' = ',1,thz0(im/2,(jsta+jend)/2) - -! GFS does not output humidity at roughness length - qz0=spval - -! GFS does not output u at roughness length - uz0=spval - -! GFS does not output humidity at roughness length - vz0=spval - -! retrieve inst convective cloud top, GFS has cloud top pressure instead of index, -! will need to modify CLDRAD.f to use pressure directly instead of index - VarName='pres' - VcoordName='convect-cld top' - Index=189 - VarName=avbl(index) - jpds=-1.0 - jgds=-1.0 - jpds(5)=iq(index) - jpds(6)=is(index) - jpds(7)=0 - call getgbandscatter(me,iunit,im,jm,im_jm,jsta,jsta_2l & - ,jend_2u,MPI_COMM_COMP,icnt,idsp,spval,VarName & - ,jpds,jgds,kpds,ptop) - if(debugprint)print*,'sample l',VarName,' = ',1,ptop(im/2,(jsta+jend)/2) - - htop = spval - do j=jsta,jend - do i=1,im - if(ptop(i,j) <= 0.0) ptop(i,j) = spval - if(ptop(i,j) < spval) then - do l=1,lm - if(ptop(i,j) <= pmid(i,j,l))then - htop(i,j) = l - exit - end if - end do - end if - end do - end do - if (me == 0) then - l = lm/2 - print*,'sample ptop,pmid pmid-1,pint= ', & - ptop(ii,jj),pmid(ii,jj,l),pmid(ii,jj,l-1),pint(ii,jj,l),htop(ii,jj) - endif - -! retrieve inst convective cloud bottom, GFS has cloud top pressure instead of index, -! will need to modify CLDRAD.f to use pressure directly instead of index - VarName='pres' - VcoordName='convect-cld bot' - Index=188 - VarName=avbl(index) - jpds=-1.0 - jgds=-1.0 - jpds(5)=iq(index) - jpds(6)=is(index) - jpds(7)=0 - call getgbandscatter(me,iunit,im,jm,im_jm,jsta,jsta_2l & - ,jend_2u,MPI_COMM_COMP,icnt,idsp,spval,VarName & - ,jpds,jgds,kpds,pbot) - if(debugprint)print*,'sample l',VarName,VcoordName,' = ',1,pbot(im/2,(jsta+jend)/2) - - hbot = spval - do j=jsta,jend - do i=1,im - if(pbot(i,j) <= 0.0) pbot(i,j) = spval -! if(.not.lb(i,j))print*,'false bitmask for pbot at ' -! + ,i,j,pbot(i,j) - if(pbot(i,j) < spval)then - do l=lm,1,-1 - if(pbot(i,j) >= pmid(i,j,l))then - hbot(i,j) = l - exit - end if - end do - end if - end do - end do - print*,'sample pbot,pmid= ', pbot(ii,jj),pmid(ii,jj,l),hbot(ii,jj) - -! retrieve time averaged low cloud top pressure using nemsio - VarName='pres' - VcoordName='low cld top' - Index=304 - VarName=avbl(index) - jpds=-1.0 - jgds=-1.0 - jpds(5)=iq(index) - jpds(6)=is(index) - jpds(7)=0 - call getgbandscatter(me,iunit,im,jm,im_jm,jsta,jsta_2l & - ,jend_2u,MPI_COMM_COMP,icnt,idsp,spval,VarName & - ,jpds,jgds,kpds,ptopl) - if(debugprint)print*,'sample l',VarName,' = ',1,ptopl(im/2,(jsta+jend)/2) - -! retrieve time averaged low cloud bottom pressure using nemsio - VarName='pres' - VcoordName='low cld bot' - Index=303 - VarName=avbl(index) - jpds=-1.0 - jgds=-1.0 - jpds(5)=iq(index) - jpds(6)=is(index) - jpds(7)=0 - call getgbandscatter(me,iunit,im,jm,im_jm,jsta,jsta_2l & - ,jend_2u,MPI_COMM_COMP,icnt,idsp,spval,VarName & - ,jpds,jgds,kpds,pbotl) - if(debugprint)print*,'sample l',VarName,' = ',1,pbotl(im/2,(jsta+jend)/2) - -! retrieve time averaged low cloud top temperature using nemsio - VarName='tmp' - VcoordName='low cld top' - Index=305 - VarName=avbl(index) - jpds=-1.0 - jgds=-1.0 - jpds(5)=iq(index) - jpds(6)=is(index) - jpds(7)=0 - call getgbandscatter(me,iunit,im,jm,im_jm,jsta,jsta_2l & - ,jend_2u,MPI_COMM_COMP,icnt,idsp,spval,VarName & - ,jpds,jgds,kpds,Ttopl) - if(debugprint)print*,'sample l',VcoordName,VarName,' = ', & - 1,Ttopl(im/2,(jsta+jend)/2) - -! retrieve time averaged middle cloud top pressure using nemsio - Index=307 - VarName=avbl(index) - jpds=-1.0 - jgds=-1.0 - jpds(5)=iq(index) - jpds(6)=is(index) - jpds(7)=0 - call getgbandscatter(me,iunit,im,jm,im_jm,jsta,jsta_2l & - ,jend_2u,MPI_COMM_COMP,icnt,idsp,spval,VarName & - ,jpds,jgds,kpds,ptopm) - if(debugprint)print*,'sample l',VcoordName,VarName,' = ', & - 1,ptopm(im/2,(jsta+jend)/2) - -! retrieve time averaged middle cloud bottom pressure using nemsio - VarName='pres' - VcoordName='mid cld bot' - Index=306 - VarName=avbl(index) - jpds=-1.0 - jgds=-1.0 - jpds(5)=iq(index) - jpds(6)=is(index) - jpds(7)=0 - call getgbandscatter(me,iunit,im,jm,im_jm,jsta,jsta_2l & - ,jend_2u,MPI_COMM_COMP,icnt,idsp,spval,VarName & - ,jpds,jgds,kpds,pbotm) - if(debugprint)print*,'sample l',VcoordName,VarName,' = ', & - 1,pbotm(im/2,(jsta+jend)/2) - -! retrieve time averaged middle cloud top temperature using nemsio - VarName='tmp' - VcoordName='mid cld top' - Index=308 - VarName=avbl(index) - jpds=-1.0 - jgds=-1.0 - jpds(5)=iq(index) - jpds(6)=is(index) - jpds(7)=0 - call getgbandscatter(me,iunit,im,jm,im_jm,jsta,jsta_2l & - ,jend_2u,MPI_COMM_COMP,icnt,idsp,spval,VarName & - ,jpds,jgds,kpds,Ttopm) - if(debugprint)print*,'sample l',VcoordName,VarName,' = ', & - 1,Ttopm(im/2,(jsta+jend)/2) - -! retrieve time averaged high cloud top pressure using nemsio ********* - VarName='pres' - VcoordName='high cld top' - Index=310 - VarName=avbl(index) - jpds=-1.0 - jgds=-1.0 - jpds(5)=iq(index) - jpds(6)=is(index) - jpds(7)=0 - call getgbandscatter(me,iunit,im,jm,im_jm,jsta,jsta_2l & - ,jend_2u,MPI_COMM_COMP,icnt,idsp,spval,VarName & - ,jpds,jgds,kpds,ptoph) - if(debugprint)print*,'sample l',VcoordName,VarName,' = ', & - 1,ptoph(im/2,(jsta+jend)/2) - -! retrieve time averaged high cloud bottom pressure using nemsio - VarName='pres' - VcoordName='high cld bot' - Index=309 - VarName=avbl(index) - jpds=-1.0 - jgds=-1.0 - jpds(5)=iq(index) - jpds(6)=is(index) - jpds(7)=0 - call getgbandscatter(me,iunit,im,jm,im_jm,jsta,jsta_2l & - ,jend_2u,MPI_COMM_COMP,icnt,idsp,spval,VarName & - ,jpds,jgds,kpds,pboth) - if(debugprint)print*,'sample l',VcoordName,VarName,' = ', & - 1,pboth(im/2,(jsta+jend)/2) - -! retrieve time averaged high cloud top temperature using nemsio - VarName='tmp' - VcoordName='high cld top' - Index=311 - VarName=avbl(index) - jpds=-1.0 - jgds=-1.0 - jpds(5)=iq(index) - jpds(6)=is(index) - jpds(7)=0 - call getgbandscatter(me,iunit,im,jm,im_jm,jsta,jsta_2l & - ,jend_2u,MPI_COMM_COMP,icnt,idsp,spval,VarName & - ,jpds,jgds,kpds,Ttoph) - if(debugprint)print*,'sample l',VcoordName,VarName,' = ', & - 1,Ttoph(im/2,(jsta+jend)/2) - -! retrieve boundary layer cloud cover using nemsio - VarName='tcdc' - VcoordName='bndary-layer cld' - Index=342 - VarName=avbl(index) - jpds=-1.0 - jgds=-1.0 - jpds(5)=iq(index) - jpds(6)=is(index) - jpds(7)=0 - call getgbandscatter(me,iunit,im,jm,im_jm,jsta,jsta_2l & - ,jend_2u,MPI_COMM_COMP,icnt,idsp,spval,VarName & - ,jpds,jgds,kpds,pblcfr) - if(debugprint)print*,'sample l',VcoordName,VarName,' = ', & - 1,pblcfr(im/2,(jsta+jend)/2) - where (pblcfr /= spval)pblcfr=pblcfr/100. ! convert to fraction - -! retrieve cloud work function using nemsio - Index=313 - VarName=avbl(index) - jpds=-1.0 - jgds=-1.0 - jpds(5)=iq(index) - jpds(6)=is(index) - jpds(7)=0 - call getgbandscatter(me,iunit,im,jm,im_jm,jsta,jsta_2l & - ,jend_2u,MPI_COMM_COMP,icnt,idsp,spval,VarName & - ,jpds,jgds,kpds,cldwork) - if(debugprint)print*,'sample l',VcoordName,VarName,' = ', & - 1,cldwork(im/2,(jsta+jend)/2) - -! retrieve water runoff using nemsio - VarName='watr' - VcoordName='sfc' - Index=343 - VarName=avbl(index) - jpds=-1.0 - jgds=-1.0 - jpds(5)=iq(index) - jpds(6)=is(index) - jpds(7)=0 - call getgbandscatter(me,iunit,im,jm,im_jm,jsta,jsta_2l & - ,jend_2u,MPI_COMM_COMP,icnt,idsp,spval,VarName & - ,jpds,jgds,kpds,runoff) - if(debugprint)print*,'sample l',VcoordName,VarName,' = ', & - 1,runoff(im/2,(jsta+jend)/2) - -! retrieve shelter max temperature using nemsio - VarName='tmax' - VcoordName='2 m above gnd' - Index=345 - VarName=avbl(index) - jpds=-1.0 - jgds=-1.0 - jpds(5)=iq(index) - jpds(6)=is(index) - jpds(7)=2 - call getgbandscatter(me,iunit,im,jm,im_jm,jsta,jsta_2l & - ,jend_2u,MPI_COMM_COMP,icnt,idsp,spval,VarName & - ,jpds,jgds,kpds,maxtshltr) - if(debugprint)print*,'sample l',VcoordName,VarName,' = ', & - 1,maxtshltr(im/2,(jsta+jend)/2) - -! retrieve shelter max temperature using nemsio - Index=346 - VarName=avbl(index) - jpds=-1.0 - jgds=-1.0 - jpds(5)=iq(index) - jpds(6)=is(index) - jpds(7)=2 - call getgbandscatter(me,iunit,im,jm,im_jm,jsta,jsta_2l & - ,jend_2u,MPI_COMM_COMP,icnt,idsp,spval,VarName & - ,jpds,jgds,kpds,mintshltr) - if(debugprint)print*,'sample l',VcoordName,VarName,' = ', & - 1,mintshltr(im/2,(jsta+jend)/2) - - MAXRHSHLTR=SPVAL - MINRHSHLTR=SPVAL - -! bucket for max and min temperature and RH -! if(me==0 .and. iostatusFlux==0)then -! if(KPDS(13)==1)then -! TMAXMIN=float(KPDS(15)-KPDS(14)) -! else if(KPDS(13)==10)then -! TMAXMIN=float(KPDS(15)-KPDS(14))*3.0 -! else if(KPDS(13)==11)then -! TMAXMIN=float(KPDS(15)-KPDS(14))*6.0 -! else if(KPDS(13)==12)then -! TMAXMIN=float(KPDS(15)-KPDS(14))*12.0 -! else if(KPDS(13)==2)then -! TMAXMIN=float(KPDS(15)-KPDS(14))*24.0 -! else -! TMAXMIN=float(KPDS(15)-KPDS(14)) -! end if -! end if -! call mpi_bcast(TMAXMIN,1,MPI_REAL,0,mpi_comm_comp,iret) -! print*,'TMAXMIN from flux grib massage= ',TMAXMIN - -! retrieve ice thickness using nemsio - VarName='icetk' - VcoordName='sfc' - Index=349 - VarName=avbl(index) - jpds=-1.0 - jgds=-1.0 - jpds(5)=iq(index) - jpds(6)=is(index) - call getgbandscatter(me,iunit,im,jm,im_jm,jsta,jsta_2l & - ,jend_2u,MPI_COMM_COMP,icnt,idsp,spval,VarName & - ,jpds,jgds,kpds,dzice) - if(debugprint)print*,'sample l',VcoordName,VarName,' = ', & - 1,dzice(im/2,(jsta+jend)/2) - -! retrieve wilting point using nemsio - VarName='wilt' - VcoordName='sfc' - Index=236 - VarName=avbl(index) - jpds=-1.0 - jgds=-1.0 - jpds(5)=iq(index) - jpds(6)=is(index) - call getgbandscatter(me,iunit,im,jm,im_jm,jsta,jsta_2l & - ,jend_2u,MPI_COMM_COMP,icnt,idsp,spval,VarName & - ,jpds,jgds,kpds,smcwlt) - if(debugprint)print*,'sample l',VcoordName,VarName,' = ', & - 1,smcwlt(im/2,(jsta+jend)/2) - -! retrieve sunshine duration using nemsio - VarName='sunsd' - VcoordName='sfc' - Index=396 - VarName=avbl(index) - jpds=-1.0 - jgds=-1.0 - jpds(5)=iq(index) - jpds(6)=is(index) - call getgbandscatter(me,iunit,im,jm,im_jm,jsta,jsta_2l & - ,jend_2u,MPI_COMM_COMP,icnt,idsp,spval,VarName & - ,jpds,jgds,kpds,suntime) - if(debugprint)print*,'sample l',VcoordName,VarName,' = ', & - 1,suntime(im/2,(jsta+jend)/2) - -! retrieve field capacity using nemsio - VarName='fldcp' - VcoordName='sfc' - Index=397 - VarName=avbl(index) - jpds=-1.0 - jgds=-1.0 - jpds(5)=iq(index) - jpds(6)=is(index) - call getgbandscatter(me,iunit,im,jm,im_jm,jsta,jsta_2l & - ,jend_2u,MPI_COMM_COMP,icnt,idsp,spval,VarName & - ,jpds,jgds,kpds,fieldcapa) - if(debugprint)print*,'sample l',VcoordName,VarName,' = ', & - 1,fieldcapa(im/2,(jsta+jend)/2) - -! retrieve snowfall rate using getgb - Index=405 - VarName=avbl(index) - jpds=-1.0 - jgds=-1.0 - jpds(5)=iq(index) - jpds(6)=is(index) - call getgbandscatter(me,iunit,im,jm,im_jm,jsta,jsta_2l & - ,jend_2u,MPI_COMM_COMP,icnt,idsp,spval,VarName & - ,jpds,jgds,kpds,snowfall) - -! retrieve frozen precipitation fraction using getgb - Index=172 - VarName=avbl(index) - jpds=-1.0 - jgds=-1.0 - jpds(5)=iq(index) - jpds(6)=is(index) - call getgbandscatter(me,iunit,im,jm,im_jm,jsta,jsta_2l & - ,jend_2u,MPI_COMM_COMP,icnt,idsp,spval,VarName & - ,jpds,jgds,kpds,sr) - print*,'sampe GFS sr= ',sr(im/2,jsta) - -! GFS does not have deep convective cloud top and bottom fields - HTOPD = SPVAL - HBOTD = SPVAL - HTOPS = SPVAL - HBOTS = SPVAL - CUPPT = SPVAL - -!!!! DONE GETTING -! Will derive isobaric OMEGA from continuity equation later. -! OMGA=SPVAL -! retrieve d3d fields if it's listed - if (me == 0) print*,'iostatus for d3d file= ',iostatusD3D - if(iostatusD3D == 0) then ! start reading d3d file -! retrieve longwave tendency using getgb - Index=41 - VarName=avbl(index) - jpds=-1.0 - jgds=-1.0 - jpds(5)=iq(index) - jpds(6)=is(index) - do l=1,lm - jpds(7)=l - ll = lm-l+1 !flip 3d fields to count from top down - call getgbandscatter(me,iunitd3d,im,jm,im_jm,jsta,jsta_2l & - ,jend_2u,MPI_COMM_COMP,icnt,idsp,spval,VarName & - ,jpds,jgds,kpds,rlwtt(1,jsta_2l,ll)) - end do - -! bucket for max and min temperature and RH -! if(me==0 .and. iostatusFlux==0)then -! if(KPDS(13)==1)then -! TD3D=float(KPDS(15)-KPDS(14)) -! else if(KPDS(13)==10)then -! TD3D=float(KPDS(15)-KPDS(14))*3.0 -! else if(KPDS(13)==11)then -! TD3D=float(KPDS(15)-KPDS(14))*6.0 -! else if(KPDS(13)==12)then -! TD3D=float(KPDS(15)-KPDS(14))*12.0 -! else if(KPDS(13)==2)then -! TD3D=float(KPDS(15)-KPDS(14))*24.0 -! else -! TD3D=float(KPDS(15)-KPDS(14)) -! end if -! end if -! call mpi_bcast(TD3D,1,MPI_REAL,0,mpi_comm_comp,iret) -! print*,'TD3D from D3D grib massage= ',TD3D - -! retrieve shortwave tendency using getgb - Index=40 - VarName=avbl(index) - jpds=-1.0 - jgds=-1.0 - jpds(5)=iq(index) - jpds(6)=is(index) - do l=1,lm - jpds(7)=l - ll = lm-l+1 !flip 3d fields to count from top down - call getgbandscatter(me,iunitd3d,im,jm,im_jm,jsta,jsta_2l & - ,jend_2u,MPI_COMM_COMP,icnt,idsp,spval,VarName & - ,jpds,jgds,kpds,rswtt(1,jsta_2l,ll)) - end do - -! retrieve vertical diffusion tendency using getgb - Index=356 - VarName='VDIFF TNDY' - jpds=-1.0 - jgds=-1.0 - jpds(5)=iq(index) - jpds(6)=109 - do l=1,lm - jpds(7)=l - ll = lm-l+1 !flip 3d fields to count from top down - call getgbandscatter(me,iunitd3d,im,jm,im_jm,jsta,jsta_2l & - ,jend_2u,MPI_COMM_COMP,icnt,idsp,spval,VarName & - ,jpds,jgds,kpds,vdifftt(1,jsta_2l,ll)) - end do - -! retrieve deep convective tendency using getgb - Index=79 - VarName=avbl(index) - jpds=-1.0 - jgds=-1.0 - jpds(5)=iq(index) - jpds(6)=is(index) - do l=1,lm - jpds(7)=l - ll=lm-l+1 !flip 3d fields to count from top down - call getgbandscatter(me,iunitd3d,im,jm,im_jm,jsta,jsta_2l & - ,jend_2u,MPI_COMM_COMP,icnt,idsp,spval,VarName & - ,jpds,jgds,kpds,tcucn(1,jsta_2l,ll)) - end do - -! retrieve shallow convective tendency using getgb - Index=358 - VarName='S CNVCT TNDY' - jpds=-1.0 - jgds=-1.0 - jpds(5)=iq(index) - jpds(6)=109 - do l=1,lm - jpds(7)=l - ll=lm-l+1 !flip 3d fields to count from top down - call getgbandscatter(me,iunitd3d,im,jm,im_jm,jsta,jsta_2l & - ,jend_2u,MPI_COMM_COMP,icnt,idsp,spval,VarName & - ,jpds,jgds,kpds,tcucns(1,jsta_2l,ll)) - end do - -! retrieve grid scale latent heat tendency using getgb - Index=78 - VarName=avbl(index) - jpds=-1.0 - jgds=-1.0 - jpds(5)=iq(index) - jpds(6)=is(index) - do l=1,lm - jpds(7)=l - ll=lm-l+1 !flip 3d fields to count from top down - call getgbandscatter(me,iunitd3d,im,jm,im_jm,jsta,jsta_2l & - ,jend_2u,MPI_COMM_COMP,icnt,idsp,spval,VarName & - ,jpds,jgds,kpds,train(1,jsta_2l,ll)) - end do - -! retrieve vertical diffusion moistening using getgb - Index=360 - VarName='Vertical diffusion moistening' - jpds=-1.0 - jgds=-1.0 - jpds(5)=iq(index) - jpds(6)=109 - do l=1,lm - jpds(7)=l - ll=lm-l+1 !flip 3d fields to count from top down - call getgbandscatter(me,iunitd3d,im,jm,im_jm,jsta,jsta_2l & - ,jend_2u,MPI_COMM_COMP,icnt,idsp,spval,VarName & - ,jpds,jgds,kpds,vdiffmois(1,jsta_2l,ll)) - end do - -! retrieve deep convection moistening using getgb - Index=361 - VarName='deep convection moistening' - jpds=-1.0 - jgds=-1.0 - jpds(5)=iq(index) - jpds(6)=109 - do l=1,lm - jpds(7)=l - ll=lm-l+1 !flip 3d fields to count from top down - call getgbandscatter(me,iunitd3d,im,jm,im_jm,jsta,jsta_2l & - ,jend_2u,MPI_COMM_COMP,icnt,idsp,spval,VarName & - ,jpds,jgds,kpds,dconvmois(1,jsta_2l,ll)) - end do - -! retrieve shallow convection moistening using getgb - Index=362 - VarName='shallow convection moistening' - jpds=-1.0 - jgds=-1.0 - jpds(5)=iq(index) - jpds(6)=109 - do l=1,lm - jpds(7)=l - ll=lm-l+1 !flip 3d fields to count from top down - call getgbandscatter(me,iunitd3d,im,jm,im_jm,jsta,jsta_2l & - ,jend_2u,MPI_COMM_COMP,icnt,idsp,spval,VarName & - ,jpds,jgds,kpds,sconvmois(1,jsta_2l,ll)) - end do - -! retrieve non-radiation tendency using getgb - Index=363 - VarName='non-radiation tendency' - jpds=-1.0 - jgds=-1.0 - jpds(5)=iq(index) - jpds(6)=109 - do l=1,lm - jpds(7)=l - ll=lm-l+1 !flip 3d fields to count from top down - call getgbandscatter(me,iunitd3d,im,jm,im_jm,jsta,jsta_2l & - ,jend_2u,MPI_COMM_COMP,icnt,idsp,spval,VarName & - ,jpds,jgds,kpds,nradtt(1,jsta_2l,ll)) - end do - -! retrieve Vertical diffusion of ozone using getgb - Index=364 - VarName='Vertical diffusion of ozone' - jpds=-1.0 - jgds=-1.0 - jpds(5)=iq(index) - jpds(6)=109 - do l=1,lm - jpds(7)=l - ll=lm-l+1 !flip 3d fields to count from top down - call getgbandscatter(me,iunitd3d,im,jm,im_jm,jsta,jsta_2l & - ,jend_2u,MPI_COMM_COMP,icnt,idsp,spval,VarName & - ,jpds,jgds,kpds,o3vdiff(1,jsta_2l,ll)) - end do - -! retrieve ozone production using getgb - Index=365 - VarName='Ozone production' - jpds=-1.0 - jgds=-1.0 - jpds(5)=iq(index) - jpds(6)=109 - do l=1,lm - jpds(7)=l - ll=lm-l+1 !flip 3d fields to count from top down - call getgbandscatter(me,iunitd3d,im,jm,im_jm,jsta,jsta_2l & - ,jend_2u,MPI_COMM_COMP,icnt,idsp,spval,VarName & - ,jpds,jgds,kpds,o3prod(1,jsta_2l,ll)) - end do - -! retrieve ozone tendency using getgb - Index=366 - VarName='Ozone tendency' - jpds=-1.0 - jgds=-1.0 - jpds(5)=iq(index) - jpds(6)=109 - do l=1,lm - jpds(7)=l - ll=lm-l+1 !flip 3d fields to count from top down - call getgbandscatter(me,iunitd3d,im,jm,im_jm,jsta,jsta_2l & - ,jend_2u,MPI_COMM_COMP,icnt,idsp,spval,VarName & - ,jpds,jgds,kpds,o3tndy(1,jsta_2l,ll)) - end do - -! retrieve mass weighted PV using getgb - Index=367 - VarName='Mass weighted PV' - jpds=-1.0 - jgds=-1.0 - jpds(5)=iq(index) - jpds(6)=109 - do l=1,lm - jpds(7)=l - ll=lm-l+1 !flip 3d fields to count from top down - call getgbandscatter(me,iunitd3d,im,jm,im_jm,jsta,jsta_2l & - ,jend_2u,MPI_COMM_COMP,icnt,idsp,spval,VarName & - ,jpds,jgds,kpds,mwpv(1,jsta_2l,ll)) - end do - -! retrieve OZONE TNDY using getgb - Index=368 - VarName='?' - jpds=-1.0 - jgds=-1.0 - jpds(5)=iq(index) - jpds(6)=109 - do l=1,lm - jpds(7)=l - ll=lm-l+1 !flip 3d fields to count from top down - call getgbandscatter(me,iunitd3d,im,jm,im_jm,jsta,jsta_2l & - ,jend_2u,MPI_COMM_COMP,icnt,idsp,spval,VarName & - ,jpds,jgds,kpds,unknown(1,jsta_2l,ll)) - end do - -! retrieve vertical diffusion zonal acceleration - Index=369 - VarName='VDIFF Z ACCE' - jpds=-1.0 - jgds=-1.0 - jpds(5)=iq(index) - jpds(6)=109 - do l=1,lm - jpds(7)=l - ll=lm-l+1 !flip 3d fields to count from top down - call getgbandscatter(me,iunitd3d,im,jm,im_jm,jsta,jsta_2l & - ,jend_2u,MPI_COMM_COMP,icnt,idsp,spval,VarName & - ,jpds,jgds,kpds,vdiffzacce(1,jsta_2l,ll)) - end do - -! retrieve gravity drag zonal acceleration - Index=370 - VarName='G DRAG Z ACCE' - jpds=-1.0 - jgds=-1.0 - jpds(5)=iq(index) - jpds(6)=109 - do l=1,lm - jpds(7)=l - ll=lm-l+1 !flip 3d fields to count from top down - call getgbandscatter(me,iunitd3d,im,jm,im_jm,jsta,jsta_2l & - ,jend_2u,MPI_COMM_COMP,icnt,idsp,spval,VarName & - ,jpds,jgds,kpds,zgdrag(1,jsta_2l,ll)) - end do - -! retrieve convective U momemtum mixing - Index=371 - VarName='CNVCT U M MIX' - jpds=-1.0 - jgds=-1.0 - jpds(5)=iq(index) - jpds(6)=109 - do l=1,lm - jpds(7)=l - ll=lm-l+1 !flip 3d fields to count from top down - call getgbandscatter(me,iunitd3d,im,jm,im_jm,jsta,jsta_2l & - ,jend_2u,MPI_COMM_COMP,icnt,idsp,spval,VarName & - ,jpds,jgds,kpds,cnvctummixing(1,jsta_2l,ll)) - end do - -! retrieve vertical diffusion meridional acceleration - Index=372 - VarName='VDIFF M ACCE' - jpds=-1.0 - jgds=-1.0 - jpds(5)=iq(index) - jpds(6)=109 - do l=1,lm - jpds(7)=l - ll=lm-l+1 !flip 3d fields to count from top down - call getgbandscatter(me,iunitd3d,im,jm,im_jm,jsta,jsta_2l & - ,jend_2u,MPI_COMM_COMP,icnt,idsp,spval,VarName & - ,jpds,jgds,kpds,vdiffmacce(1,jsta_2l,ll)) - end do - -! retrieve gravity drag meridional acceleration - Index=373 - VarName='G DRAG M ACCE' - jpds=-1.0 - jgds=-1.0 - jpds(5)=iq(index) - jpds(6)=109 - do l=1,lm - jpds(7)=l - ll=lm-l+1 !flip 3d fields to count from top down - call getgbandscatter(me,iunitd3d,im,jm,im_jm,jsta,jsta_2l & - ,jend_2u,MPI_COMM_COMP,icnt,idsp,spval,VarName & - ,jpds,jgds,kpds,mgdrag(1,jsta_2l,ll)) - end do - -! retrieve convective V momemtum mixing - Index=374 - VarName='CNVCT V M MIX' - jpds=-1.0 - jgds=-1.0 - jpds(5)=iq(index) - jpds(6)=109 - do l=1,lm - jpds(7)=l - ll=lm-l+1 !flip 3d fields to count from top down - call getgbandscatter(me,iunitd3d,im,jm,im_jm,jsta,jsta_2l & - ,jend_2u,MPI_COMM_COMP,icnt,idsp,spval,VarName & - ,jpds,jgds,kpds,cnvctvmmixing(1,jsta_2l,ll)) - end do - -! retrieve nonconvective cloud fraction - Index=375 - VarName='N CNVCT CLD FRA' - jpds=-1.0 - jgds=-1.0 - jpds(5)=iq(index) - jpds(6)=109 - do l=1,lm - jpds(7)=l - ll=lm-l+1 !flip 3d fields to count from top down - call getgbandscatter(me,iunitd3d,im,jm,im_jm,jsta,jsta_2l & - ,jend_2u,MPI_COMM_COMP,icnt,idsp,spval,VarName & - ,jpds,jgds,kpds,ncnvctcfrac(1,jsta_2l,ll)) - end do - -! retrieve convective upward mass flux - Index=391 - VarName='CNVCT U M FLX' - jpds=-1.0 - jgds=-1.0 - jpds(5)=iq(index) - jpds(6)=109 - do l=1,lm - jpds(7)=l - ll=lm-l+1 !flip 3d fields to count from top down - call getgbandscatter(me,iunitd3d,im,jm,im_jm,jsta,jsta_2l & - ,jend_2u,MPI_COMM_COMP,icnt,idsp,spval,VarName & - ,jpds,jgds,kpds,cnvctumflx(1,jsta_2l,ll)) - end do - -! retrieve convective downward mass flux - Index=392 - VarName='CNVCT D M FLX' - jpds=-1.0 - jgds=-1.0 - jpds(5)=iq(index) - jpds(6)=109 - do l=1,lm - jpds(7)=l - ll=lm-l+1 !flip 3d fields to count from top down - call getgbandscatter(me,iunitd3d,im,jm,im_jm,jsta,jsta_2l & - ,jend_2u,MPI_COMM_COMP,icnt,idsp,spval,VarName & - ,jpds,jgds,kpds,cnvctdmflx(1,jsta_2l,ll)) - end do - -! retrieve nonconvective detraintment flux - Index=393 - VarName='CNVCT DET M FLX' - jpds=-1.0 - jgds=-1.0 - jpds(5)=iq(index) - jpds(6)=109 - do l=1,lm - jpds(7)=l - ll=lm-l+1 !flip 3d fields to count from top down - call getgbandscatter(me,iunitd3d,im,jm,im_jm,jsta,jsta_2l & - ,jend_2u,MPI_COMM_COMP,icnt,idsp,spval,VarName & - ,jpds,jgds,kpds,cnvctdetmflx(1,jsta_2l,ll)) - end do - -! retrieve cnvct gravity drag zonal acceleration - Index=394 - VarName='CNVCT G DRAG Z ACCE' - jpds=-1.0 - jgds=-1.0 - jpds(5)=iq(index) - jpds(6)=109 - do l=1,lm - jpds(7)=l - ll=lm-l+1 !flip 3d fields to count from top down - call getgbandscatter(me,iunitd3d,im,jm,im_jm,jsta,jsta_2l & - ,jend_2u,MPI_COMM_COMP,icnt,idsp,spval,VarName & - ,jpds,jgds,kpds,cnvctzgdrag(1,jsta_2l,ll)) - end do - -! retrieve cnvct gravity drag meridional acceleration - Index=395 - VarName='CNVCT G DRAG M ACCE' - jpds=-1.0 - jgds=-1.0 - jpds(5)=iq(index) - jpds(6)=109 - do l=1,lm - jpds(7)=l - ll=lm-l+1 !flip 3d fields to count from top down - call getgbandscatter(me,iunitd3d,im,jm,im_jm,jsta,jsta_2l & - ,jend_2u,MPI_COMM_COMP,icnt,idsp,spval,VarName & - ,jpds,jgds,kpds,cnvctmgdrag(1,jsta_2l,ll)) - end do - - call baclose(iunitd3d,status) - if (me == 0) print*,'done reading D3D fields' - end if ! end of d3d file read - if (me == 0) print *,'after d3d files reading,mype=',me -! pos east - call collect_loc(gdlat,dummy) - if(me == 0) then - latstart=nint(dummy(1,1)*gdsdegr) - latlast=nint(dummy(im,jm)*gdsdegr) - print*,'laststart,latlast B bcast= ',latstart,latlast,'gdsdegr=',gdsdegr,& - 'dummy(1,1)=',dummy(1,1),dummy(im,jm),'gdlat=',gdlat(1,1) - end if - call mpi_bcast(latstart,1,MPI_INTEGER,0,mpi_comm_comp,irtn) - call mpi_bcast(latlast,1,MPI_INTEGER,0,mpi_comm_comp,irtn) - write(6,*) 'laststart,latlast,me A calling bcast=',latstart,latlast,me - call collect_loc(gdlon,dummy) - if(me==0)then - lonstart=nint(dummy(1,1)*gdsdegr) - lonlast=nint(dummy(im,jm)*gdsdegr) - end if - call mpi_bcast(lonstart,1,MPI_INTEGER,0,mpi_comm_comp,irtn) - call mpi_bcast(lonlast,1,MPI_INTEGER,0,mpi_comm_comp,irtn) - write(6,*)'lonstart,lonlast A calling bcast=',lonstart,lonlast -! -! ncdump -h - -!! -!! -!! - write(6,*) 'filename in INITPOST=', filename,' is' - -! status=nf_open(filename,NF_NOWRITE,ncid) -! write(6,*) 'returned ncid= ', ncid -! status=nf_get_att_real(ncid,varid,'DX',tmp) -! dxval=int(tmp) -! status=nf_get_att_real(ncid,varid,'DY',tmp) -! dyval=int(tmp) -! status=nf_get_att_real(ncid,varid,'CEN_LAT',tmp) -! cenlat=int(1000.*tmp) -! status=nf_get_att_real(ncid,varid,'CEN_LON',tmp) -! cenlon=int(1000.*tmp) -! status=nf_get_att_real(ncid,varid,'TRUELAT1',tmp) -! truelat1=int(1000.*tmp) -! status=nf_get_att_real(ncid,varid,'TRUELAT2',tmp) -! truelat2=int(1000.*tmp) -! status=nf_get_att_real(ncid,varid,'MAP_PROJ',tmp) -! maptype=int(tmp) -! status=nf_close(ncid) - -! dxval=30000. -! dyval=30000. -! -! write(6,*) 'dxval= ', dxval -! write(6,*) 'dyval= ', dyval -! write(6,*) 'cenlat= ', cenlat -! write(6,*) 'cenlon= ', cenlon -! write(6,*) 'truelat1= ', truelat1 -! write(6,*) 'truelat2= ', truelat2 -! write(6,*) 'maptype is ', maptype -! - -! close up shop -! call ext_int_ioclose ( DataHandle, Status ) - -! generate look up table for lifted parcel calculations - - THL = 210. - PLQ = 70000. - -! write(0,*)' bef TABLE PT=',PT,' THL=',THL - CALL TABLE(PTBL,TTBL,PT, & - RDQ,RDTH,RDP,RDTHE,PL,THL,QS0,SQS,STHE,THE0) - - CALL TABLEQ(TTBLQ,RDPQ,RDTHEQ,PLQ,THL,STHEQ,THE0Q) - - -! write(0,*)'end ini_gfs_sigio' -! -! - IF(ME==0)THEN - WRITE(6,*)' SPL (POSTED PRESSURE LEVELS) BELOW: ' - WRITE(6,51) (SPL(L),L=1,LSM) - 50 FORMAT(14(F4.1,1X)) - 51 FORMAT(8(F8.1,1X)) - ENDIF -! -! COMPUTE DERIVED TIME STEPPING CONSTANTS. -! -!MEB need to get DT -! DT = 120. !MEB need to get DT -! NPHS = 4 !MEB need to get physics DT -! TPREC=float(ifhr) -!MEB need to get DT - -!how am i going to get this information? -! NPREC = INT(TPREC *TSPH+D50) -! NHEAT = INT(THEAT *TSPH+D50) -! NCLOD = INT(TCLOD *TSPH+D50) -! NRDSW = INT(TRDSW *TSPH+D50) -! NRDLW = INT(TRDLW *TSPH+D50) -! NSRFC = INT(TSRFC *TSPH+D50) -!how am i going to get this information? -! -! IF(ME==0)THEN -! WRITE(6,*)' ' -! WRITE(6,*)'DERIVED TIME STEPPING CONSTANTS' -! WRITE(6,*)' NPREC,NHEAT,NSRFC : ',NPREC,NHEAT,NSRFC -! WRITE(6,*)' NCLOD,NRDSW,NRDLW : ',NCLOD,NRDSW,NRDLW -! ENDIF -! -! COMPUTE DERIVED MAP OUTPUT CONSTANTS. - DO L = 1,LSM - ALSL(L) = LOG(SPL(L)) - END DO -! -!HC WRITE IGDS OUT FOR WEIGHTMAKER TO READ IN AS KGDSIN - if(me==0)then - print*,'writing out igds' - igdout=110 -! open(igdout,file='griddef.out',form='unformatted' -! + ,status='unknown') - if(maptype == 1)THEN ! Lambert conformal - WRITE(igdout)3 - WRITE(6,*)'igd(1)=',3 - WRITE(igdout)im - WRITE(igdout)jm - WRITE(igdout)LATSTART - WRITE(igdout)LONSTART - WRITE(igdout)8 - WRITE(igdout)CENLON - WRITE(igdout)DXVAL - WRITE(igdout)DYVAL - WRITE(igdout)0 - WRITE(igdout)64 - WRITE(igdout)TRUELAT2 - WRITE(igdout)TRUELAT1 - WRITE(igdout)255 - ELSE IF(MAPTYPE == 2)THEN !Polar stereographic - WRITE(igdout)5 - WRITE(igdout)im - WRITE(igdout)jm - WRITE(igdout)LATSTART - WRITE(igdout)LONSTART - WRITE(igdout)8 - WRITE(igdout)CENLON - WRITE(igdout)DXVAL - WRITE(igdout)DYVAL - WRITE(igdout)0 - WRITE(igdout)64 - WRITE(igdout)TRUELAT2 !Assume projection at +-90 - WRITE(igdout)TRUELAT1 - WRITE(igdout)255 - ELSE IF(MAPTYPE == 3)THEN !Mercator - WRITE(igdout)1 - WRITE(igdout)im - WRITE(igdout)jm - WRITE(igdout)LATSTART - WRITE(igdout)LONSTART - WRITE(igdout)8 - WRITE(igdout)latlast - WRITE(igdout)lonlast - WRITE(igdout)TRUELAT1 - WRITE(igdout)0 - WRITE(igdout)64 - WRITE(igdout)DXVAL - WRITE(igdout)DYVAL - WRITE(igdout)255 - ELSE IF(MAPTYPE==0 .OR. MAPTYPE==203)THEN !A STAGGERED E-GRID - WRITE(igdout)203 - WRITE(igdout)im - WRITE(igdout)jm - WRITE(igdout)LATSTART - WRITE(igdout)LONSTART - WRITE(igdout)136 - WRITE(igdout)CENLAT - WRITE(igdout)CENLON - WRITE(igdout)DXVAL - WRITE(igdout)DYVAL - WRITE(igdout)64 - WRITE(igdout)0 - WRITE(igdout)0 - WRITE(igdout)0 - END IF - end if -! -! close all files - - call baclose(iunit,status) - - deallocate(dummy) - - RETURN - END - - diff --git a/sorc/ncep_post.fd/INITPOST_NEMS.f b/sorc/ncep_post.fd/INITPOST_NEMS.f index 51575df3a..a88dfa3d6 100644 --- a/sorc/ncep_post.fd/INITPOST_NEMS.f +++ b/sorc/ncep_post.fd/INITPOST_NEMS.f @@ -1,39 +1,22 @@ !> @file -! . . . -!> SUBPROGRAM: INITPOST INITIALIZE POST FOR RUN -!! PRGRMMR: Hui-Ya Chuang DATE: 2008-03-26 -!! -!! ABSTRACT: THIS ROUTINE INITIALIZES CONSTANTS AND -!! VARIABLES AT THE START OF AN NEMS MODEL OR POST -!! PROCESSOR RUN. -!! -!! REVISION HISTORY -!! 21-03-11 Bo Cui - change local arrays to dimension (im,jsta:jend) -!! -!! USAGE: CALL INITPOST_NEMS -!! INPUT ARGUMENT LIST: -!! NREC -!! NFILE -!! -!! OUTPUT ARGUMENT LIST: -!! NONE -!! -!! OUTPUT FILES: -!! NONE -!! -!! SUBPROGRAMS CALLED: -!! UTILITIES: -!! NONE -!! LIBRARY: -!! COMMON - CTLBLK -!! LOOKUP -!! SOILDEPTH -!! -!! -!! ATTRIBUTES: -!! LANGUAGE: FORTRAN -!! MACHINE : CRAY C-90 -!! +!> @brief initpost_nems() initializes post for run. +!> +!> @author Hui-Ya Chuang @date 2007-03-26 + +!> This routine initializes constants and +!> variables at the start of an NEMS model or post +!> processor run. +!> +!> @param[in] NREC. +!> @param[in] NFILE. +!> +!> ### Program History Log +!> Date | Programmer | Comments +!> -----|------------|--------- +!> 2007-03-01 | Hui-Ya Chuang | Initial +!> 2021-03-11 | Bo Cui | Change local arrays to dimension (im,jsta:jend) +!> +!> @author Hui-Ya Chuang @date 2007-03-26 SUBROUTINE INITPOST_NEMS(NREC,nfile) use vrbls3d, only: t, q, uh, vh, q2, cwm, f_ice, f_rain, f_rimef, cfr, pint,& @@ -67,7 +50,6 @@ SUBROUTINE INITPOST_NEMS(NREC,nfile) use gridspec_mod, only: dyval, dxval, cenlat, cenlon, maptype, gridtype, latstart, latlast, latnw,& latse, lonstart, lonlast, lonnw, lonse, latstartv, latlastv, cenlatv, lonstartv,& lonlastv, cenlonv - use rqstfld_mod, only: use nemsio_module, only: nemsio_gfile, nemsio_getfilehead, nemsio_close, nemsio_getheadvar use upp_math, only: h2u ! diff --git a/sorc/ncep_post.fd/INITPOST_NEMS_MPIIO.f b/sorc/ncep_post.fd/INITPOST_NEMS_MPIIO.f deleted file mode 100644 index 1d472c809..000000000 --- a/sorc/ncep_post.fd/INITPOST_NEMS_MPIIO.f +++ /dev/null @@ -1,2465 +0,0 @@ -!> @file -! . . . -!> SUBPROGRAM: INITPOST INITIALIZE POST FOR RUN -!! PRGRMMR: Hui-Ya Chuang DATE: 2008-03-26 -!! -!! ABSTRACT: THIS ROUTINE INITIALIZES CONSTANTS AND -!! VARIABLES AT THE START OF AN NEMS MODEL OR POST -!! PROCESSOR RUN. -!! -!! REVISION HISTORY -!! 21-03-11 Bo Cui - change local arrays to dimension (im,jsta:jend) -!! -!! USAGE: CALL INITPOST_NEMS -!! INPUT ARGUMENT LIST: -!! NREC -!! NFILE -!! -!! OUTPUT ARGUMENT LIST: -!! NONE -!! -!! OUTPUT FILES: -!! NONE -!! -!! SUBPROGRAMS CALLED: -!! UTILITIES: -!! NONE -!! LIBRARY: -!! COMMON - CTLBLK -!! LOOKUP -!! SOILDEPTH -!! -!! -!! ATTRIBUTES: -!! LANGUAGE: FORTRAN -!! MACHINE : CRAY C-90 -!! - SUBROUTINE INITPOST_NEMS_MPIIO() - - use vrbls3d, only: t, q, uh, vh, q2, cwm, f_ice, f_rain, f_rimef, cfr, pint,& - pint, alpint, pmid, pmidv, zint, zmid, wh, rlwtt, rswtt,& - ttnd, tcucn, train, el_pbl, exch_h, omga - use vrbls2d, only: f, pd, fis, pblh, mixht, ustar, z0, ths, qs, twbs, qwbs, prec,& - acprec, cuprec,ancprc, lspa, sno, snoavg, psfcavg, t10avg, t10m, akhsavg, akmsavg,& - refd_max, w_up_max, w_dn_max, up_heli_max, si, cldefi, th10, q10, pshltr,& - tshltr, qshltr, maxtshltr, mintshltr, maxrhshltr, minrhshltr, akhs, akms, albase,& - albedo, czen, cfracl, cfracm, islope, cmc, grnflx, pctsno, soiltb, vegfrc,& - acfrcv, acfrst, ssroff, bgroff, czmean, mxsnal, radot, sigt4, tg, sr, cfrach,& - rlwin, rlwtoa, alwin, alwout, alwtoa, rswin, rswinc, rswout, aswin,aswout,& - aswtoa, sfcshx, sfclhx, subshx, snopcx, sfcuvx, potevp, ncfrcv, ncfrst, u10h,& - u10, v10h, v10, u10max, v10max, smstav, smstot, sfcevp, ivgtyp, acsnow, acsnom,& - sst, thz0, qz0, uz0, vz0, htop, isltyp, sfcexc, hbot, htopd, htops, cuppt, cprate,& - hbotd, hbots - use soil, only: sldpth, sh2o, smc, stc - use masks, only: lmv, lmh, htm, vtm, dx, dy, hbm2, gdlat, gdlon, sm, sice - use kinds, only: i_llong - use wrf_io_flags_mod, only: - use params_mod, only: pi, dtr, g, d608, rd - use lookup_mod, only: thl, plq, ptbl, ttbl, rdq, rdth, rdp, rdthe, pl, qs0, sqs, sthe, the0,& - ttblq, rdpq, rdtheq, stheq, the0q - use ctlblk_mod, only: me, mpi_comm_comp, global, icnt, idsp, jsta, ihrst, imin, idat, sdat,& - ifhr, ifmin, filename, restrt, imp_physics, isf_surface_physics, icu_physics, jend,& - dt, spval, gdsdegr, grib, pdtop, pt, tmaxmin, nsoil, lp1, jend_m, nprec, nphs, avrain,& - avcnvc, ardlw, ardsw, asrfc, novegtype, spl, lsm, dtq2, tsrfc, trdlw, trdsw, theat, tclod,& - tprec, alsl, lm , im, jm, jsta_2l, jend_2u, ivegsrc, pthresh - use gridspec_mod, only: dyval, dxval, cenlat, cenlon, maptype, gridtype, latstart, latlast, latnw,& - latse, lonstart, lonlast, lonnw, lonse, latstartv, latlastv, cenlatv, lonstartv,& - lonlastv, cenlonv - use rqstfld_mod, only: -! use nemsio_module, only: nemsio_gfile, nemsio_getfilehead, nemsio_close, nemsio_getheadvar - use nemsio_module_mpi - use upp_math, only: h2u -! -! INCLUDE/SET PARAMETERS. - implicit none -! - type(nemsio_gfile) :: nfile -! - INCLUDE "mpif.h" -! This version of INITPOST shows how to initialize, open, read from, and -! close a NetCDF dataset. In order to change it to read an internal (binary) -! dataset, do a global replacement of _ncd_ with _int_. - - character(len=8) :: VarName - character(len=8) :: VcoordName - integer :: Status - integer fldsize,fldst,recn - character startdate*19,SysDepInfo*80,cgar*1 - character startdate2(19)*4 -! -! NOTE: SOME INTEGER VARIABLES ARE READ INTO DUMMY ( A REAL ). THIS IS OK -! AS LONG AS REALS AND INTEGERS ARE THE SAME SIZE. -! -! ALSO, EXTRACT IS CALLED WITH DUMMY ( A REAL ) EVEN WHEN THE NUMBERS ARE -! INTEGERS - THIS IS OK AS LONG AS INTEGERS AND REALS ARE THE SAME SIZE. - LOGICAL RUNB,SINGLRST,SUBPOST,NEST,HYDRO - LOGICAL IOOMG,IOALL - logical, parameter :: debugprint = .false. - logical fliplayer ! whether or not to flip layer - logical :: convert_rad_to_deg=.false. -! logical global - CHARACTER*32 LABEL - CHARACTER*40 CONTRL,FILALL,FILMST,FILTMP,FILTKE,FILUNV & - , FILCLD,FILRAD,FILSFC - CHARACTER*4 RESTHR - CHARACTER FNAME*80,ENVAR*50,BLANK*4 - integer nfhour ! forecast hour from nems io file - INTEGER IDATE(8),JDATE(8) -! -! DECLARE VARIABLES. -! - REAL FACT,tsph,tstart - REAL RINC(5) - REAL ETA1(LM+1), ETA2(LM+1) - REAL GARB - REAL DUM1D (LM+1) - REAL DUMMY ( IM, JM ) -! REAL DUMMY2 ( IM, JM ) - real, allocatable :: fi(:,:,:) - integer ibuf(im,jsta_2l:jend_2u) - real buf(im,jsta_2l:jend_2u) - character*8,allocatable:: recname(:) - character*8,allocatable :: reclevtyp(:) - integer,allocatable:: reclev(:) - real, allocatable:: bufy(:) - real, allocatable:: glat1d(:),glon1d(:) - real, allocatable:: tmp(:) -!jw - integer ii,jj,js,je,jev,iyear,imn,iday,itmp,ioutcount,istatus, & - nsrfc,nrdlw,nrdsw,nheat,nclod, & - iunit,nrec,I,J,L, iret,nframe,impf,jmpf,nframed2, & - igdout,ll,n,im1,jm1,iim1 -! - DATA BLANK/' '/ -! -!*********************************************************************** -! START INIT HERE. -! - WRITE(6,*)'INITPOST: ENTER INITPOST' -! -! -! STEP 1. READ MODEL OUTPUT FILE -! -!*** -! LMH always = LM for sigma-type vert coord -! LMV always = LM for sigma-type vert coord - - do j = jsta_2l, jend_2u - do i = 1, im - LMV ( i, j ) = lm - LMH ( i, j ) = lm - end do - end do - -! HTM VTM all 1 for sigma-type vert coord - - do l = 1, lm - do j = jsta_2l, jend_2u - do i = 1, im - HTM ( i, j, l ) = 1.0 - VTM ( i, j, l ) = 1.0 - end do - end do - end do - -! The end j row is going to be jend_2u for all variables except for V. - JS=JSTA_2L - JE=JEND_2U - IF (JEND_2U==JM) THEN - JEV=JEND_2U+1 - ELSE - JEV=JEND_2U - ENDIF -! sample print point - ii=(1+im)/2 - jj=(1+jm)/2 -! initialize nemsio using mpi io module - call nemsio_init() - call nemsio_open(nfile,trim(filename),'read',mpi_comm_comp,iret=status) - if ( Status /= 0 ) then - print*,'error opening ',fileName, ' Status = ', Status ; stop - endif - call nemsio_getfilehead(nfile,iret=status,nrec=nrec) - print*,'nrec=',nrec - allocate(recname(nrec),reclevtyp(nrec),reclev(nrec)) - call nemsio_getfilehead(nfile,iret=iret & - ,recname=recname ,reclevtyp=reclevtyp,reclev=reclev) - if (me == 0)then - do i=1,nrec - print *,'recname,reclevtyp,reclev=',trim(recname(i)),' ', & - trim(reclevtyp(i)),reclev(i) - end do - end if - -! get start date - idate=0 -! if (me == 0)then - call nemsio_getfilehead(nfile,iret=iret & - ,idate=idate(1:7),nfhour=nfhour,nframe=nframe) - - impf=im+nframe*2 - jmpf=jm+nframe*2 - print*,'nframe,impf,jmpf= ',nframe,impf,jmpf - allocate(glat1d(impf*jmpf),glon1d(impf*jmpf) ) - call nemsio_getfilehead(nfile,dx=glat1d & - ,dy=glon1d,iret=iret) - if(iret/=0)print*,'did not find dx dy' - do j=jsta,jend - do i=1,im - ! dummy(i,j) = glat1d((j-1)*impf+i+nframe) - ! dummy2(i,j) = glon1d((j-1)*impf+i+nframe) - dx(i,j)= glat1d((j-1)*impf+i+nframe) - dy(i,j)= glon1d((j-1)*impf+i+nframe) - end do - end do - deallocate(glat1d,glon1d) - print*,'idate before broadcast = ',(idate(i),i=1,7) -! end if !for me=0 -! call mpi_bcast(idate(1),7,MPI_INTEGER,0,mpi_comm_comp,iret) -! call mpi_bcast(nfhour,1,MPI_INTEGER,0,mpi_comm_comp,iret) -! call mpi_bcast(nframe,1,MPI_INTEGER,0,mpi_comm_comp,iret) - - IF(.not. global)THEN - impf=im+nframe*2 - jmpf=jm+nframe*2 - ELSE - impf=im+1 ! post cut im off because it's the same as i=1 but data from model is till im - jmpf=jm - END IF - print*,'impf,jmpf,nframe for reading fields = ',impf,jmpf,nframe - print*,'idate after broadcast = ',(idate(i),i=1,7) - print*,'nfhour = ',nfhour - !call mpi_scatterv(dummy(1,1),icnt,idsp,mpi_real & - ! ,dx(1,jsta),icnt(me),mpi_real,0,MPI_COMM_COMP,iret) - !call mpi_scatterv(dummy2(1,1),icnt,idsp,mpi_real & - ! ,dy(1,jsta),icnt(me),mpi_real,0,MPI_COMM_COMP,iret) - - - iyear = idate(1) - imn = idate(2) ! ask Jun - iday = idate(3) ! ask Jun - ihrst = idate(4) - imin = idate(5) - jdate = 0 - idate = 0 -! -! read(startdate,15)iyear,imn,iday,ihrst,imin - 15 format(i4,1x,i2,1x,i2,1x,i2,1x,i2) - print*,'start yr mo day hr min =',iyear,imn,iday,ihrst,imin - print*,'processing yr mo day hr min=' & - ,idat(3),idat(1),idat(2),idat(4),idat(5) -! - idate(1) = iyear - idate(2) = imn - idate(3) = iday - idate(5) = ihrst - idate(6) = imin - SDAT(1) = imn - SDAT(2) = iday - SDAT(3) = iyear - jdate(1) = idat(3) - jdate(2) = idat(1) - jdate(3) = idat(2) - jdate(5) = idat(4) - jdate(6) = idat(5) -! - print *,' idate=',idate - print *,' jdate=',jdate -! CALL W3DIFDAT(JDATE,IDATE,2,RINC) -! ifhr=nint(rinc(2)) -! - CALL W3DIFDAT(JDATE,IDATE,0,RINC) -! - print *,' rinc=',rinc - ifhr=nint(rinc(2)+rinc(1)*24.) - print *,' ifhr=',ifhr - ifmin=nint(rinc(3)) -! if(ifhr /= nfhour)print*,'find wrong Model input file';stop - print*,' in INITPOST ifhr ifmin fileName=',ifhr,ifmin,fileName - -! Getting tstart - tstart=0. - print*,'tstart= ',tstart - -! Getiing restart - - RESTRT=.TRUE. ! set RESTRT as default -! call ext_int_get_dom_ti_integer(DataHandle,'RESTARTBIN',itmp -! + ,1,ioutcount,istatus) - -! IF(itmp < 1)THEN -! RESTRT=.FALSE. -! ELSE -! RESTRT=.TRUE. -! END IF - -! print*,'status for getting RESTARTBIN= ',istatus - -! print*,'Is this a restrt run? ',RESTRT - - IF(tstart > 1.0E-2)THEN - ifhr=ifhr+NINT(tstart) - rinc=0 - idate=0 - rinc(2)=-1.0*ifhr - call w3movdat(rinc,jdate,idate) - SDAT(1)=idate(2) - SDAT(2)=idate(3) - SDAT(3)=idate(1) - IHRST=idate(5) - print*,'new forecast hours for restrt run= ',ifhr - print*,'new start yr mo day hr min =',sdat(3),sdat(1) & - ,sdat(2),ihrst,imin - END IF - - VarName='mp_physi' - !if(me == 0)then - call nemsio_getheadvar(nfile,trim(VarName),imp_physics,iret) - if (iret /= 0) then - print*,VarName," not found in file- go to 16 character " - VarName='mp_physics' - call nemsio_getheadvar(nfile,trim(VarName),imp_physics,iret) - if (iret /= 0) then - print*,VarName," not found in file-Assigned 1000" - imp_physics=1000 - end if - end if - !end if - !call mpi_bcast(imp_physics,1,MPI_INTEGER,0,mpi_comm_comp,iret) - print*,'MP_PHYSICS= ',imp_physics - -! Initializes constants for Ferrier microphysics - if(imp_physics==5 .or. imp_physics==85 .or. imp_physics==95)then - CALL MICROINIT(imp_physics) - end if - - VarName='sf_surface_physi' - call nemsio_getheadvar(nfile,trim(VarName),iSF_SURFACE_PHYSICS,iret) - if (iret /= 0) then - print*,VarName," not found in file-Assigned 2 for NOAH LSM as default" - iSF_SURFACE_PHYSICS=2 - end if - print*,'SF_SURFACE_PHYSICS= ',iSF_SURFACE_PHYSICS - -! IVEGSRC=1 for IGBP and 0 for USGS - VarName='IVEGSRC' - call nemsio_getheadvar(nfile,trim(VarName),IVEGSRC,iret) - if (iret /= 0) then - print*,VarName," not found in file-Assigned 1 for IGBP as default" - IVEGSRC=1 - end if - print*,'IVEGSRC= ',IVEGSRC - -! set novegtype based on vegetation classification - if(ivegsrc==1)then - novegtype=20 - else if(ivegsrc==0)then - novegtype=24 - end if - print*,'novegtype= ',novegtype - - VarName='CU_PHYSICS' - call nemsio_getheadvar(nfile,trim(VarName),iCU_PHYSICS,iret) - if (iret /= 0) then - print*,VarName," not found in file-Assigned 2 for BMJ as default" - iCU_PHYSICS=2 - end if - print*,'CU_PHYSICS= ',iCU_PHYSICS - - - allocate(bufy(jm)) - VarName='DX' -! if(me == 0)then -! call nemsio_getheadvar(nfile,trim(VarName),bufy,iret) -! if (iret /= 0) then -! print*,VarName," not found in file-Assigned missing values" -! dx=spval -! end if -! end if -! call mpi_bcast(bufy,jm,MPI_REAL,0,mpi_comm_comp,iret) -! do j=jsta,jend -! do i=1,im -! dx(i,j)=bufy(j) -! end do -! end do - if(debugprint)print*,'sample ',VarName,' = ',dx(im/2,(jsta+jend)/2) - - VarName='DY' -! if(me == 0)then -! call nemsio_getheadvar(nfile,trim(VarName),bufy,iret) -! if (iret /= 0) then -! print*,VarName," not found in file-Assigned missing values" -! dx=spval -! end if -! end if -! call mpi_bcast(bufy,jm,MPI_REAL,0,mpi_comm_comp,iret) -! do j=jsta,jend -! do i=1,im -! dy(i,j)=bufy(j) -! end do -! end do - if(debugprint)print*,'sample ',VarName,' = ',dy(im/2,(jsta+jend)/2) - deallocate(bufy) - - VarName='dt' - call nemsio_getheadvar(nfile,trim(VarName),garb,iret) - if (iret /= 0) then - print*,VarName," not found in file-Assigned missing values" - dt=spval - else - dt=garb - end if - - VarName='dphd' - call nemsio_getheadvar(nfile,trim(VarName),garb,iret) - if (iret /= 0) then - print*,VarName," not found in file-Assigned missing values" - dyval=spval - else - dyval=garb*gdsdegr - end if -! dyval=106 ! hard wire for AQ domain testing - - VarName='dlmd' - call nemsio_getheadvar(nfile,trim(VarName),garb,iret) - if (iret /= 0) then - print*,VarName," not found in file-Assigned missing values" - dxval=spval - else - dxval=garb*gdsdegr - end if -! dxval=124 ! hard wire for AQ domain testing - - print*,'DX, DY, DT=',dxval,dyval,dt - - VarName='TPH0D' - call nemsio_getheadvar(nfile,trim(VarName),garb,iret) - if (iret /= 0) then - print*,VarName," not found in file-Assigned missing values" - cenlat=spval - else - cenlat=nint(garb*gdsdegr) - end if - - VarName='TLM0D' - call nemsio_getheadvar(nfile,trim(VarName),garb,iret) - if (iret /= 0) then - print*,VarName," not found in file-Assigned missing values" - cenlon=spval - else - if(grib=="grib2") then - cenlon=nint((garb+360.)*gdsdegr) - endif - end if - - varname='sg1' - call nemsio_getheadvar(nfile,trim(varname),eta1,iret) - if (iret /= 0) then - print*,VarName," not found in file-Assigned missing values" - ETA1=SPVAL - end if - - varname='sg2' - call nemsio_getheadvar(nfile,trim(varname),eta2,iret) - if (iret /= 0) then - print*,VarName," not found in file-Assigned missing values" - ETA2=SPVAL - end if - if(me==0)then - open(75,file='ETAPROFILE.txt',form='formatted', & - status='unknown') - DO L=1,lm+1 - write(75,1020)L, ETA1(lm+2-l), ETA2(lm+2-l) - END DO - 1020 format(I3,2E17.10) - close (75) - end if - - varname='pdtop' - call nemsio_getheadvar(nfile,trim(varname),pdtop,iret) - if (iret /= 0) then - print*,VarName," not found in file-Assigned missing values" - pdtop=SPVAL - end if - - varname='pt' - call nemsio_getheadvar(nfile,trim(varname),pt,iret) - if (iret /= 0) then - print*,VarName," not found in file-Assigned missing values" - pt=SPVAL - end if - print*,'PT, PDTOP= ',PT,PDTOP - - VarName='sldpth' - call nemsio_getheadvar(nfile,trim(varname),sldpth,iret) - print*,'SLDPTH= ',(SLDPTH(N),N=1,NSOIL) - -! set default to not empty buket - nprec=0 - nphs=0 - nclod=0 - nheat=0 - nrdlw=0 - nrdsw=0 - nsrfc=0 - - VarName='nprec' - call nemsio_getheadvar(nfile,trim(varname),nprec,iret) - if (iret /= 0) then - print*,VarName," not found in file-Assigned zero" - end if - if(debugprint)print*,'sample ',VarName,' = ',nprec - - VarName='nphs' - call nemsio_getheadvar(nfile,trim(varname),nphs,iret) - if (iret /= 0) then - print*,VarName," not found in file-Assigned zero" - end if - if(debugprint)print*,'sample ',VarName,' = ',nphs - - VarName='nclod' - call nemsio_getheadvar(nfile,trim(varname),nclod,iret) - if (iret /= 0) then - print*,VarName," not found in file-Assigned zero" - end if - if(debugprint)print*,'sample ',VarName,' = ',nclod - - VarName='nheat' - call nemsio_getheadvar(nfile,trim(varname),nheat,iret) - if (iret /= 0) then - print*,VarName," not found in file-Assigned zero" - end if - if(debugprint)print*,'sample ',VarName,' = ',nheat - - VarName='nrdlw' - call nemsio_getheadvar(nfile,trim(varname),nrdlw,iret) - if (iret /= 0) then - print*,VarName," not found in file-Assigned zero" - end if - if(debugprint)print*,'sample ',VarName,' = ',nrdlw - - VarName='nrdsw' - call nemsio_getheadvar(nfile,trim(varname),nrdsw,iret) - if (iret /= 0) then - print*,VarName," not found in file-Assigned zero" - end if - if(debugprint)print*,'sample ',VarName,' = ',nrdsw - - VarName='nsrfc' - call nemsio_getheadvar(nfile,trim(varname),nsrfc,iret) - if (iret /= 0) then - print*,VarName," not found in file-Assigned zero" - end if - if(debugprint)print*,'sample ',VarName,' = ',nsrfc - - IF(.not. global)THEN - maptype=205 ! for Arakawa-B grid - gridtype='B' - ELSE - maptype=0 ! for global NMMB on latlon grid - gridtype='A' ! will put wind on mass point for now to make regular latlon - END IF - print*,'maptype and gridtype= ',maptype,gridtype - - HBM2=1.0 - -! start reading nemsio files using parallel read - fldsize=(jend-jsta+1)*im - allocate(tmp(fldsize*nrec)) - print*,'allocate tmp successfully' - tmp=0. - call nemsio_denseread(nfile,1,im,jsta,jend,tmp,iret=iret) - if(iret/=0)then - print*,"fail to read nemsio file using mpi io read, stopping" - stop - end if - - varname='glat' - VcoordName='sfc' - l=1 - call assignnemsiovar(im,jsta,jend,jsta_2l,jend_2u & - ,l,nrec,fldsize,spval,tmp & - ,recname,reclevtyp,reclev,VarName,VcoordName & - ,gdlat) - - call collect_loc(gdlat,dummy) -! decides whether or not to convert to degree - if(me==0)then - if(maxval(abs(dummy))0. .and. gdlon(2,jsta)<0.)then - do j=jsta,jend - gdlon(1,j)=gdlon(1,j)-360.0 - end do - end if - end if - if(debugprint)print*,'sample ',VarName,' = ',(gdlon(i,(jsta+jend)/2),i=1,im,8) - if(debugprint)print*,'max min lon=',maxval(gdlon),minval(gdlon) - call collect_loc(gdlon,dummy) - if(me==0)then - if(grib=='grib2') then - if(dummy(1,1)<0) dummy(1,1)=dummy(1,1)+360. - if(dummy(im,jm)<0) dummy(im,jm)=dummy(im,jm)+360. - endif - lonstart=nint(dummy(1,1)*gdsdegr) - lonlast=nint(dummy(im,jm)*gdsdegr) - lonnw=nint(dummy(1,jm)*gdsdegr) - lonse=nint(dummy(im,1)*gdsdegr) -! dxval=nint((dummy(2,1)-dummy(1,1))*1000.) -! dxval=124 ! hard wire for AQ domain testing - if(mod(im,2)==0)then -! cenlon=nint((dummy(ii,jj)+dummy(ii+1,jj)+dummy(ii+1,jj+1)+dummy(ii,jj+1))/4.0*1000.) - else -! cenlon=nint(dummy(ii,jj)*1000.) - end if - end if - call mpi_bcast(lonstart,1,MPI_INTEGER,0,mpi_comm_comp,iret) - call mpi_bcast(lonlast,1,MPI_INTEGER,0,mpi_comm_comp,iret) -! call mpi_bcast(dxval,1,MPI_INTEGER,0,mpi_comm_comp,iret) -! call mpi_bcast(cenlon,1,MPI_INTEGER,0,mpi_comm_comp,iret) - write(6,*)'lonstart,lonlast A calling bcast=',lonstart,lonlast - print*,'dxval, cenlon= ',dxval, cenlon - - convert_rad_to_deg=.false. - varname='vlat' - VcoordName='sfc' - l=1 - call assignnemsiovar(im,jsta,jend,jsta_2l,jend_2u & - ,l,nrec,fldsize,spval,tmp & - ,recname,reclevtyp,reclev,VarName,VcoordName & - ,buf) - - if(debugprint)print*,'sample ',VarName,' = ',buf(im/2,(jsta+jend)/2) - if(debugprint)print*,'max min vlat=',maxval(buf),minval(buf) - call collect_loc(buf,dummy) - if(me==0)then - if(maxval(abs(dummy)) 27.0 .or. sfcevp(i,j)<1.0)print*, & -! 'bad vegtype=',i,j,sfcevp(i,j) -! end do -! end do - - where(sfcevp /= spval)IVGTYP=nint(sfcevp) - if(debugprint)print*,'sample ',VarName,' = ',IVGTYP(im/2,(jsta+jend)/2) - - sfcevp=spval - VarName='sltyp' - VcoordName='sfc' - l=1 - call assignnemsiovar(im,jsta,jend,jsta_2l,jend_2u & - ,l,nrec,fldsize,spval,tmp & - ,recname,reclevtyp,reclev,VarName,VcoordName & - ,sfcevp) ! temporary use sfcevp because it's real in nemsio - where(sfcevp /= spval)ISLTYP=nint(sfcevp) - if(debugprint)print*,'sample ',VarName,' = ',ISLTYP(im/2,(jsta+jend)/2) - - sfcevp=spval - VarName='sfcevp' - VcoordName='sfc' - l=1 - call assignnemsiovar(im,jsta,jend,jsta_2l,jend_2u & - ,l,nrec,fldsize,spval,tmp & - ,recname,reclevtyp,reclev,VarName,VcoordName & - ,sfcevp) - if(debugprint)print*,'sample ',VarName,' = ',sfcevp(im/2,(jsta+jend)/2) - - VarName='sfcexc' - VcoordName='sfc' - l=1 - call assignnemsiovar(im,jsta,jend,jsta_2l,jend_2u & - ,l,nrec,fldsize,spval,tmp & - ,recname,reclevtyp,reclev,VarName,VcoordName & - ,sfcexc) - if(debugprint)print*,'sample ',VarName,' = ',sfcexc(im/2,(jsta+jend)/2) - if(debugprint)print*,'MAX/MIN ',VarName,' = ' & - ,maxval(sfcexc),minval(sfcexc) - - VarName='acsnow' - VcoordName='sfc' - l=1 - call assignnemsiovar(im,jsta,jend,jsta_2l,jend_2u & - ,l,nrec,fldsize,spval,tmp & - ,recname,reclevtyp,reclev,VarName,VcoordName & - ,acsnow) - if(debugprint)print*,'sample ',VarName,' = ',acsnow(im/2,(jsta+jend)/2) - - VarName='acsnom' - VcoordName='sfc' - l=1 - call assignnemsiovar(im,jsta,jend,jsta_2l,jend_2u & - ,l,nrec,fldsize,spval,tmp & - ,recname,reclevtyp,reclev,VarName,VcoordName & - ,acsnom) - if(debugprint)print*,'sample ',VarName,' = ',acsnom(im/2,(jsta+jend)/2) - - VarName='tsea' - VcoordName='sfc' - l=1 - call assignnemsiovar(im,jsta,jend,jsta_2l,jend_2u & - ,l,nrec,fldsize,spval,tmp & - ,recname,reclevtyp,reclev,VarName,VcoordName & - ,sst) - if(debugprint)print*,'sample ',VarName,' = ',sst(im/2,(jsta+jend)/2) - -! VarName='EL_PBL' ! not in nems io yet - VarName='xlen_mix' - VcoordName='mid layer' - do l=1,lm -! ll=lm-l+1 - ll=l - call assignnemsiovar(im,jsta,jend,jsta_2l,jend_2u & - ,ll,nrec,fldsize,spval,tmp & - ,recname,reclevtyp,reclev,VarName,VcoordName & - ,EL_PBL(1,jsta_2l,ll)) - if(debugprint)print*,'sample l ',VarName,' = ',ll,EL_PBL(im/2,(jsta+jend)/2,ll) - end do ! do loop for l - - VarName='exch_h' - VcoordName='mid layer' - do l=1,lm -! ll=lm-l+1 - ll=l - call assignnemsiovar(im,jsta,jend,jsta_2l,jend_2u & - ,ll,nrec,fldsize,spval,tmp & - ,recname,reclevtyp,reclev,VarName,VcoordName & - ,exch_h(1,jsta_2l,ll)) - if(debugprint)print*,'sample l ',VarName,' = ',ll,exch_h(im/2,(jsta+jend)/2,ll) - end do ! do loop for l - - VarName='thz0' - VcoordName='sfc' - l=1 - call assignnemsiovar(im,jsta,jend,jsta_2l,jend_2u & - ,l,nrec,fldsize,spval,tmp & - ,recname,reclevtyp,reclev,VarName,VcoordName & - ,thz0) - if(debugprint)print*,'sample ',VarName,' = ',thz0(im/2,(jsta+jend)/2) - - VarName='qz0' - VcoordName='sfc' - l=1 - call assignnemsiovar(im,jsta,jend,jsta_2l,jend_2u & - ,l,nrec,fldsize,spval,tmp & - ,recname,reclevtyp,reclev,VarName,VcoordName & - ,qz0) - if(debugprint)print*,'sample ',VarName,' = ',qz0(im/2,(jsta+jend)/2) - - VarName='uz0' - VcoordName='sfc' - l=1 - call assignnemsiovar(im,jsta,jend,jsta_2l,jend_2u & - ,l,nrec,fldsize,spval,tmp & - ,recname,reclevtyp,reclev,VarName,VcoordName & - ,uz0) - if(debugprint)print*,'sample ',VarName,' = ',uz0(im/2,(jsta+jend)/2) - - VarName='vz0' - VcoordName='sfc' - l=1 - call assignnemsiovar(im,jsta,jend,jsta_2l,jend_2u & - ,l,nrec,fldsize,spval,tmp & - ,recname,reclevtyp,reclev,VarName,VcoordName & - ,vz0) - if(debugprint)print*,'sample ',VarName,' = ',vz0(im/2,(jsta+jend)/2) - -! -! Very confusing story ... -! -! Retrieve htop and hbot => They are named CNVTOP, CNVBOT in the model and -! with HBOTS,HTOPS (shallow conv) and HBOTD,HTOPD (deep conv) represent -! the 3 sets of convective cloud base/top arrays tied to the frequency -! that history files are written. -! -! IN THE *MODEL*, arrays HBOT,HTOP are similar to CNVTOP,CNVBOT but are -! used in radiation and are tied to the frequency of radiation updates. -! -! For historical reasons model arrays CNVTOP,CNVBOT are renamed HBOT,HTOP -! and manipulated throughout the post. - -! retrieve htop and hbot -! VarName='HTOP' - VarName='cnvtop' - VcoordName='sfc' - l=1 - call assignnemsiovar(im,jsta,jend,jsta_2l,jend_2u & - ,l,nrec,fldsize,spval,tmp & - ,recname,reclevtyp,reclev,VarName,VcoordName & - ,htop) - where(htop /= spval)htop=float(lm)-htop+1.0 -! where(htop /= spval .and. htop > lm)htop=lm*1.0 - if(debugprint)print*,'sample ',VarName,' = ',htop(im/2,(jsta+jend)/2) - -! VarName='HBOT' - VarName='cnvbot' - VcoordName='sfc' - l=1 - call assignnemsiovar(im,jsta,jend,jsta_2l,jend_2u & - ,l,nrec,fldsize,spval,tmp & - ,recname,reclevtyp,reclev,VarName,VcoordName & - ,hbot) - where(hbot /= spval)hbot=float(lm)-hbot+1.0 -! where(hbot /= spval .and. hbot > lm)hbot=lm*1.0 - if(debugprint)print*,'sample ',VarName,' = ',hbot(im/2,(jsta+jend)/2) - - VarName='htopd' - VcoordName='sfc' - l=1 - call assignnemsiovar(im,jsta,jend,jsta_2l,jend_2u & - ,l,nrec,fldsize,spval,tmp & - ,recname,reclevtyp,reclev,VarName,VcoordName & - ,htopd) - where(htopd /= spval)htopd=float(lm)-htopd+1.0 -! where(htopd /= spval .and. htopd > lm)htopd=lm*1.0 - if(debugprint)print*,'sample ',VarName,' = ',htopd(im/2,(jsta+jend)/2) - - VarName='hbotd' - VcoordName='sfc' - l=1 - call assignnemsiovar(im,jsta,jend,jsta_2l,jend_2u & - ,l,nrec,fldsize,spval,tmp & - ,recname,reclevtyp,reclev,VarName,VcoordName & - ,hbotd) - where(hbotd /= spval)hbotd=float(lm)-hbotd+1.0 -! where(hbotd /= spval .and. hbotd > lm)hbotd=lm*1.0 - if(debugprint)print*,'sample ',VarName,' = ',hbotd(im/2,(jsta+jend)/2) - - VarName='htops' - VcoordName='sfc' - l=1 - call assignnemsiovar(im,jsta,jend,jsta_2l,jend_2u & - ,l,nrec,fldsize,spval,tmp & - ,recname,reclevtyp,reclev,VarName,VcoordName & - ,htops) - where(htops /= spval)htops=float(lm)-htops+1.0 -! where(htops /= spval .and. htops > lm)htops=lm*1.0 - if(debugprint)print*,'sample ',VarName,' = ',htops(im/2,(jsta+jend)/2) - - VarName='hbots' - VcoordName='sfc' - l=1 - call assignnemsiovar(im,jsta,jend,jsta_2l,jend_2u & - ,l,nrec,fldsize,spval,tmp & - ,recname,reclevtyp,reclev,VarName,VcoordName & - ,hbots) - where(hbots /= spval)hbots=float(lm)-hbots+1.0 -! where(hbots /= spval .and. hbots > lm)hbots=lm*1.0 - if(debugprint)print*,'sample ',VarName,' = ',hbots(im/2,(jsta+jend)/2) - - VarName='cuppt' - VcoordName='sfc' - l=1 - call assignnemsiovar(im,jsta,jend,jsta_2l,jend_2u & - ,l,nrec,fldsize,spval,tmp & - ,recname,reclevtyp,reclev,VarName,VcoordName & - ,cuppt) - if(debugprint)print*,'sample ',VarName,' = ',cuppt(im/2,(jsta+jend)/2) - - VarName='cprate' - VcoordName='sfc' - l=1 - call assignnemsiovar(im,jsta,jend,jsta_2l,jend_2u & - ,l,nrec,fldsize,spval,tmp & - ,recname,reclevtyp,reclev,VarName,VcoordName & - ,cprate) - if(debugprint)print*,'sample ',VarName,' = ',cprate(im/2,(jsta+jend)/2) - - deallocate(tmp,recname,reclevtyp,reclev) -!!!! DONE GETTING - - do l = 1, lm - do j = jsta, jend - do i = 1, im - IF(ABS(T(I,J,L))>1.0E-3) & - OMGA(I,J,L) = -WH(I,J,L)*PMID(I,J,L)*G/ & - (RD*T(I,J,L)*(1.+D608*Q(I,J,L))) - - end do - end do - end do - write(0,*)' after OMGA' - - - THL=210. - PLQ=70000. - - CALL TABLE(PTBL,TTBL,PT, & - RDQ,RDTH,RDP,RDTHE,PL,THL,QS0,SQS,STHE,THE0) - - CALL TABLEQ(TTBLQ,RDPQ,RDTHEQ,PLQ,THL,STHEQ,THE0Q) - write(0,*)' after TABLEQ' - - -! -! - IF(ME==0)THEN - WRITE(6,*)' SPL (POSTED PRESSURE LEVELS) BELOW: ' - WRITE(6,51) (SPL(L),L=1,LSM) - 50 FORMAT(14(F4.1,1X)) - 51 FORMAT(8(F8.1,1X)) - ENDIF -! -! COMPUTE DERIVED TIME STEPPING CONSTANTS. -! -!MEB need to get DT -! DT = 120. !MEB need to get DT -! NPHS = 4 !MEB need to get physics DT - DTQ2 = DT * NPHS !MEB need to get physics DT - TSPH = 3600./DT !MEB need to get DT - - IF (PTHRESH>0.) THEN - PTHRESH=0.01*DTQ2/3.6E6 !-- Precip rate >= 0.01 mm/h -! PTHRESH=0.01*DTQ2/(3600.*39.37) !-- Precip rate >= 0.01 inches/h - ENDIF - - TSRFC=float(NSRFC)/TSPH - IF(NSRFC==0)TSRFC=float(ifhr) !in case buket does not get emptied - TRDLW=float(NRDLW)/TSPH - IF(NRDLW==0)TRDLW=float(ifhr) !in case buket does not get emptied - TRDSW=float(NRDSW)/TSPH - IF(NRDSW==0)TRDSW=float(ifhr) !in case buket does not get emptied - THEAT=float(NHEAT)/TSPH - IF(NHEAT==0)THEAT=float(ifhr) !in case buket does not get emptied - TCLOD=float(NCLOD)/TSPH - IF(NCLOD==0)TCLOD=float(ifhr) !in case buket does not get emptied - TPREC=float(NPREC)/TSPH - IF(NPREC==0)TPREC=float(ifhr) !in case buket does not get emptied -! TPREC=float(ifhr) - print*,'TSRFC TRDLW TRDSW THEAT TCLOD TPREC= ' & - ,TSRFC, TRDLW, TRDSW, THEAT, TCLOD, TPREC -!MEB need to get DT - -!how am i going to get this information? -! NPREC = INT(TPREC *TSPH+D50) -! NHEAT = INT(THEAT *TSPH+D50) -! NCLOD = INT(TCLOD *TSPH+D50) -! NRDSW = INT(TRDSW *TSPH+D50) -! NRDLW = INT(TRDLW *TSPH+D50) -! NSRFC = INT(TSRFC *TSPH+D50) -!how am i going to get this information? -! -! IF(ME==0)THEN -! WRITE(6,*)' ' -! WRITE(6,*)'DERIVED TIME STEPPING CONSTANTS' -! WRITE(6,*)' NPREC,NHEAT,NSRFC : ',NPREC,NHEAT,NSRFC -! WRITE(6,*)' NCLOD,NRDSW,NRDLW : ',NCLOD,NRDSW,NRDLW -! ENDIF -! -! COMPUTE DERIVED MAP OUTPUT CONSTANTS. - DO L = 1,LSM - ALSL(L) = ALOG(SPL(L)) - END DO - write(0,*)' after ALSL' -! -!HC WRITE IGDS OUT FOR WEIGHTMAKER TO READ IN AS KGDSIN - if(me==0)then - print*,'writing out igds' - igdout=110 -! open(igdout,file='griddef.out',form='unformatted' -! + ,status='unknown') - IF(MAPTYPE==203)THEN !A STAGGERED E-GRID - WRITE(igdout)203 - WRITE(igdout)im - WRITE(igdout)jm - WRITE(igdout)LATSTART - WRITE(igdout)LONSTART - WRITE(igdout)136 - WRITE(igdout)CENLAT - WRITE(igdout)CENLON - WRITE(igdout)DXVAL - WRITE(igdout)DYVAL - WRITE(igdout)64 - WRITE(igdout)0 - WRITE(igdout)0 - WRITE(igdout)0 - WRITE(igdout)LATLAST - WRITE(igdout)LONLAST - ELSE IF(MAPTYPE==205)THEN !A STAGGERED B-GRID - WRITE(igdout)205 - WRITE(igdout)im - WRITE(igdout)jm - WRITE(igdout)LATSTART - WRITE(igdout)LONSTART - WRITE(igdout)136 - WRITE(igdout)CENLAT - WRITE(igdout)CENLON - WRITE(igdout)DXVAL - WRITE(igdout)DYVAL - WRITE(igdout)64 - WRITE(igdout)LATLAST - WRITE(igdout)LONLAST - WRITE(igdout)0 - WRITE(igdout)0 - WRITE(igdout)0 - END IF - open(111,file='copygb_gridnav.txt',form='formatted' & - ,status='unknown') - IF(MAPTYPE==203)THEN !A STAGGERED E-GRID - write(111,1000) 2*IM-1,JM,LATSTART,LONSTART,CENLON, & - NINT(dxval*107.),NINT(dyval*110.),CENLAT,CENLAT - ELSE IF(MAPTYPE==205)THEN !A STAGGERED B-GRID - if(grib=="grib2") then - write(111,1000) IM,JM,LATSTART/1000,LONSTART/1000,CENLON/1000, & - NINT(dxval*107.)/1000,NINT(dyval*110.)/1000, & - CENLAT/1000,CENLAT/1000, & - LATLAST/1000,LONLAST/1000 - endif - END IF -1000 format('255 3 ',2(I4,x),I6,x,I7,x,'8 ',I7,x,2(I6,x),'0 64', & - 3(x,I6),x,I7) - close(111) -! - IF (MAPTYPE==205)THEN !A STAGGERED B-GRID - open(112,file='latlons_corners.txt',form='formatted' & - ,status='unknown') - if(grib=="grib2") then - write(112,1001)LATSTART/1000,(LONSTART/1000)-360000, & - LATSE/1000, & - LONSE/1000,LATNW/1000,LONNW/1000,LATLAST/1000, & - (LONLAST/1000)-360000 - endif -1001 format(4(I6,x,I7,x)) - close(112) - ENDIF - - end if - -! close all files - call nemsio_close(nfile,iret=status) - call nemsio_finalize() -! - write(0,*)'end of INIT_NEMS' - - RETURN - END diff --git a/sorc/ncep_post.fd/INITPOST_NETCDF.f b/sorc/ncep_post.fd/INITPOST_NETCDF.f index 090f266f0..e6220ff87 100644 --- a/sorc/ncep_post.fd/INITPOST_NETCDF.f +++ b/sorc/ncep_post.fd/INITPOST_NETCDF.f @@ -1,72 +1,73 @@ !> @file -! . . . -!> SUBPROGRAM: INITPOST_NETCDF INITIALIZE POST FOR RUN -!! PRGRMMR: Hui-Ya Chuang DATE: 2016-03-04 -!! -!! ABSTRACT: THIS ROUTINE INITIALIZES CONSTANTS AND -!! VARIABLES AT THE START OF GFS MODEL OR POST -!! PROCESSOR RUN. -!! -!! REVISION HISTORY -!! 2017-08-11 H Chuang start from INITPOST_GFS_NEMS_MPIIO.f -!! 2021-03-11 Bo Cui change local arrays to dimension (im,jsta:jend) -!! -!! USAGE: CALL INITPOST_NETCDF -!! INPUT ARGUMENT LIST: -!! NONE -!! -!! OUTPUT ARGUMENT LIST: -!! NONE -!! -!! OUTPUT FILES: -!! NONE -!! -!! SUBPROGRAMS CALLED: -!! UTILITIES: -!! NONE -!! LIBRARY: -!! COMMON - CTLBLK -!! LOOKUP -!! SOILDEPTH -!! -!! -!! ATTRIBUTES: -!! LANGUAGE: FORTRAN -!! MACHINE : CRAY C-90 -!! - SUBROUTINE INITPOST_NETCDF(ncid3d) +!> @brief initpost_netcdf() initializes post for run. +!> +!> @author Hui-Ya Chuang @date 2016-03-04 + +!> This routine initializes constants and +!> variables at the start of GFS model or post +!> processor run. +!> +!> ### Program History Log +!> Date | Programmer | Comments +!> -----|------------|--------- +!> 2007-03-01 | Hui-Ya Chuang | Initial. Start from INITPOST_GFS_NEMS_MPIIO.f +!> 2021-03-11 | Bo Cui | Change local arrays to dimension (im,jsta:jend) +!> 2021-10-26 | Jesse Meng | 2D DECOMPOSITION +!> 2022-02-07 | Wen Meng | Changes for parallel netcdf read +!> 2022-03-15 | Wen Meng | Unify regional and global interfaces +!> 2022-03-22 | Wen Meng | Read PWAT from model +!> 2022-04-08 | Bo Cui | 2D decomposition for unified fv3 read interfaces +!> 2022-06-05 | Hui-Ya Chuang | Modify dx/dy computation for RRFS domain over north pole +!> 2022-07-10 | Wen Meng | Output lat/lon on four coner points of rotated lat-lon grids in text file. +!> 2022-07-18 | Wen Meng | Read instant top of atmos ULWRF from model +!> 2022-09-18 | Li(Kate) Zhang| Add aerosol fileds for GEFS-Aerosols (gocart_on) and UFS-Aerosols(nasa_on) model +!> 2022-10-28 | Eric James | Modifications to allow passing through soil moisture availability field from RUC LSM for RRFS +!> 2022-11-08 | Kai Wang | Read time averaged PM2.5 and O3 concentration from model +!> 2022-11-08 | Wen Meng | Remove instant PM2.5 calculation +!> 2022-11-16 | Eric James | Read smoke, dust, biomass burning, and hourly wildfire potential from RRFS +!> 2022-12-07 | Wen Meng | Read AOD from AQM model +!> 2022-12-23 | Eric Aligo | Read six winter weather diagnostics from model +!> 2023-01-30 | Sam Trahan | Read cldfra or cldfra_bl, whichever is available +!> +!> @author Hui-Ya Chuang @date 2016-03-04 + SUBROUTINE INITPOST_NETCDF(ncid2d,ncid3d) use netcdf - use vrbls4d, only: dust, SALT, SUSO, SOOT, WASO + use vrbls4d, only: dust, SALT, SUSO, SOOT, WASO, smoke, fv3dust, no3,nh4, PP25, PP10 use vrbls3d, only: t, q, uh, vh, pmid, pint, alpint, dpres, zint, zmid, o3, & qqr, qqs, cwm, qqi, qqw, omga, rhomid, q2, cfr, rlwtt, rswtt, tcucn, & tcucns, train, el_pbl, exch_h, vdifftt, vdiffmois, dconvmois, nradtt, & o3vdiff, o3prod, o3tndy, mwpv, unknown, vdiffzacce, zgdrag,cnvctummixing, & vdiffmacce, mgdrag, cnvctvmmixing, ncnvctcfrac, cnvctumflx, cnvctdmflx, & cnvctzgdrag, sconvmois, cnvctmgdrag, cnvctdetmflx, duwt, duem, dusd, dudp, & - wh, qqg, ref_10cm, pmtf, ozcon + dusv,ssem,sssd,ssdp,sswt,sssv,bcem,bcsd,bcdp,bcwt,bcsv,ocem,ocsd,ocdp,ocwt,ocsv, & + wh, qqg, ref_10cm, qqnifa, qqnwfa, avgpmtf, avgozcon, aextc55, taod5503d use vrbls2d, only: f, pd, fis, pblh, ustar, z0, ths, qs, twbs, qwbs, avgcprate, & - cprate, avgprec, prec, lspa, sno, si, cldefi, th10, q10, tshltr, pshltr, & - tshltr, albase, avgalbedo, avgtcdc, czen, czmean, mxsnal, radot, sigt4, & + cprate, avgprec, prec, lspa, sno, sndepac, si, cldefi, th10, q10, tshltr, pshltr, & + tshltr, albase, avgalbedo, avgtcdc, czen, czmean, mxsnal, landfrac, radot, sigt4, & cfrach, cfracl, cfracm, avgcfrach, qshltr, avgcfracl, avgcfracm, cnvcfr, & islope, cmc, grnflx, vegfrc, acfrcv, ncfrcv, acfrst, ncfrst, ssroff, & bgroff, rlwin, rlwtoa, cldwork, alwin, alwout, alwtoa, rswin, rswinc, & rswout, aswin, auvbin, auvbinc, aswout, aswtoa, sfcshx, sfclhx, subshx, & - snopcx, sfcux, sfcvx, sfcuxi, sfcvxi, sfcuvx, gtaux, gtauy, potevp, u10, v10, smstav, & + snopcx, sfcux, sfcvx, sfcuxi, sfcvxi, sfcuvx, gtaux, gtauy, potevp, u10, v10, smstav,& smstot, ivgtyp, isltyp, sfcevp, sfcexc, acsnow, acsnom, sst, thz0, qz0, & uz0, vz0, ptop, htop, pbot, hbot, ptopl, pbotl, ttopl, ptopm, pbotm, ttopm, & - ptoph, pboth, pblcfr, ttoph, runoff, maxtshltr, mintshltr, maxrhshltr, & + ptoph, pboth, pblcfr, ttoph, runoff, tecan, tetran, tedir, twa, maxtshltr, & + mintshltr, maxrhshltr, fdnsst, acgraup, graup_bucket, acfrain, frzrn_bucket, & + snow_acm, snow_bkt, & minrhshltr, dzice, smcwlt, suntime, fieldcapa, htopd, hbotd, htops, hbots, & cuppt, dusmass, ducmass, dusmass25, ducmass25, aswintoa,rel_vort_maxhy1, & maxqshltr, minqshltr, acond, sr, u10h, v10h,refd_max, w_up_max, w_dn_max, & up_heli_max,up_heli_min,up_heli_max03,up_heli_min03,rel_vort_max01,u10max, v10max, & - avgedir,avgecan,avgetrans,avgesnow,avgprec_cont,avgcprate_cont,rel_vort_max, & + avgedir,avgecan,paha,pahi,avgetrans,avgesnow,avgprec_cont,avgcprate_cont,rel_vort_max, & avisbeamswin,avisdiffswin,airbeamswin,airdiffswin,refdm10c_max,wspd10max, & alwoutc,alwtoac,aswoutc,aswtoac,alwinc,aswinc,avgpotevp,snoavg, & - ti,aod550,du_aod550,ss_aod550,su_aod550,oc_aod550,bc_aod550,prate_max - use soil, only: sldpth, sh2o, smc, stc + ti,aod550,du_aod550,ss_aod550,su_aod550,oc_aod550,bc_aod550,prate_max,maod,dustpm10, & + dustcb,bccb,occb,sulfcb,sscb,dustallcb,ssallcb,dustpm,sspm,pp25cb,pp10cb,no3cb,nh4cb,& + pwat, ebb, hwp, aqm_aod550 + use soil, only: sldpth, sllevel, sh2o, smc, stc use masks, only: lmv, lmh, htm, vtm, gdlat, gdlon, dx, dy, hbm2, sm, sice use physcons_post, only: grav => con_g, fv => con_fvirt, rgas => con_rd, & eps => con_eps, epsm1 => con_epsm1 @@ -78,12 +79,14 @@ SUBROUTINE INITPOST_NETCDF(ncid3d) jend_m, imin, imp_physics, dt, spval, pdtop, pt, qmin, nbin_du, nphs, dtq2, ardlw,& ardsw, asrfc, avrain, avcnvc, theat, gdsdegr, spl, lsm, alsl, im, jm, im_jm, lm, & jsta_2l, jend_2u, nsoil, lp1, icu_physics, ivegsrc, novegtype, nbin_ss, nbin_bc, & - nbin_oc, nbin_su, gocart_on, pt_tbl, hyb_sigp, filenameFlux, fileNameAER, & - iSF_SURFACE_PHYSICS,rdaod, aqfcmaq_on + nbin_oc, nbin_su, nbin_no3, nbin_nh4, gocart_on, nasa_on, pt_tbl, hyb_sigp, & + filenameFlux, fileNameAER, & + iSF_SURFACE_PHYSICS,rdaod, modelname, aqf_on, & + ista, iend, ista_2l, iend_2u,iend_m use gridspec_mod, only: maptype, gridtype, latstart, latlast, lonstart, lonlast, cenlon, & dxval, dyval, truelat2, truelat1, psmapf, cenlat,lonstartv, lonlastv, cenlonv, & - latstartv, latlastv, cenlatv,latstart_r,latlast_r,lonstart_r,lonlast_r, STANDLON - use rqstfld_mod, only: igds, avbl, iq, is + latstartv, latlastv,cenlatv,latstart_r,latlast_r,lonstart_r,lonlast_r, STANDLON, & + latse,lonse,latnw,lonnw use upp_physics, only: fpvsnew !- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - implicit none @@ -116,7 +119,7 @@ SUBROUTINE INITPOST_NETCDF(ncid3d) character(len=20) :: VarName, VcoordName integer :: Status, fldsize, fldst, recn, recn_vvel character startdate*19,SysDepInfo*80,cgar*1 - character startdate2(19)*4 + character startdate2(19)*4, flatlon*40 logical :: read_lonlat=.true. ! ! NOTE: SOME INTEGER VARIABLES ARE READ INTO DUMMY ( A REAL ). THIS IS OK @@ -143,6 +146,7 @@ SUBROUTINE INITPOST_NETCDF(ncid3d) integer nfhour ! forecast hour from nems io file integer fhzero !bucket real dtp !physics time step + real dz REAL RINC(5) REAL DUMMY(IM,JM) @@ -150,7 +154,7 @@ SUBROUTINE INITPOST_NETCDF(ncid3d) integer ii,jj,js,je,iyear,imn,iday,itmp,ioutcount,istatus, & I,J,L,ll,k,kf,irtn,igdout,n,Index,nframe, & nframed2,iunitd3d,ierr,idum,iret,nrec,idrt - integer ncid3d,ncid2d,varid,nhcas + integer ncid3d,ncid2d,varid,nhcas,varid_bl,iret_bl real TSTART,TLMH,TSPH,ES,FACT,soilayert,soilayerb,zhour,dum, & tvll,pmll,tv, tx1, tx2 @@ -160,15 +164,22 @@ SUBROUTINE INITPOST_NETCDF(ncid3d) real, allocatable :: wrk1(:,:), wrk2(:,:) real, allocatable :: p2d(:,:), t2d(:,:), q2d(:,:), & qs2d(:,:), cw2d(:,:), cfr2d(:,:) - real(kind=4),allocatable :: vcoord4(:,:,:) real, dimension(lm+1) :: ak5, bk5 real*8, allocatable :: pm2d(:,:), pi2d(:,:) real, allocatable :: tmp(:) - real :: buf(im,jsta_2l:jend_2u) - real :: buf3d(im,jsta_2l:jend_2u,lm) - -! real buf(im,jsta_2l:jend_2u),bufsoil(im,nsoil,jsta_2l:jend_2u) & -! ,buf3d(im,jsta_2l:jend_2u,lm),buf3d2(im,lp1,jsta_2l:jend_2u) + real :: buf(ista_2l:iend_2u,jsta_2l:jend_2u) + real :: buf2(ista_2l:iend_2u,jsta_2l:jend_2u) + real :: buf3d(ista_2l:iend_2u,jsta_2l:jend_2u,lm) + real :: chem_2d(ista_2l:iend_2u,jsta_2l:jend_2u) + real :: chemT(ista_2l:iend_2u,jsta_2l:jend_2u,lm) + real :: dt1(ista_2l:iend_2u,jsta_2l:jend_2u,lm) + real :: dt2(ista_2l:iend_2u,jsta_2l:jend_2u,lm) + real :: dt3(ista_2l:iend_2u,jsta_2l:jend_2u,lm) + real :: dt4(ista_2l:iend_2u,jsta_2l:jend_2u,lm) + real :: dt5(ista_2l:iend_2u,jsta_2l:jend_2u,lm) + +! real buf(ista_2l:iend_2u,jsta_2l:jend_2u),bufsoil(im,nsoil,jsta_2l:jend_2u) & +! ,buf3d(ista_2l:iend_2u,jsta_2l:jend_2u,lm),buf3d2(im,lp1,jsta_2l:jend_2u) real LAT integer isa, jsa, latghf, jtem, idvc, idsl, nvcoord, ip1, nn, npass @@ -182,191 +193,11 @@ SUBROUTINE INITPOST_NETCDF(ncid3d) real, allocatable :: div3d(:,:,:) real(kind=4),allocatable :: vcrd(:,:) real :: dum_const + real, allocatable :: extsmoke(:,:,:), extdust(:,:,:) -! AQF - - real, allocatable :: aacd(:,:,:), aalj(:,:,:) & - ,aalk1j(:,:,:), aalk2j(:,:,:) & - ,abnz1j(:,:,:), abnz2j(:,:,:), abnz3j(:,:,:) & - ,acaj(:,:,:), acet(:,:,:) & - ,acli(:,:,:), aclj(:,:,:), aclk(:,:,:) & - ,acors(:,:,:), acro_primary(:,:,:) & - ,acrolein(:,:,:), aeci(:,:,:) & - ,aecj(:,:,:), afej(:,:,:) & - ,aglyj(:,:,:) & - ,ah2oi(:,:,:), ah2oj(:,:,:), ah2ok(:,:,:) & - ,ah3opi(:,:,:), ah3opj(:,:,:), ah3opk(:,:,:) & - ,aiso1j(:,:,:), aiso2j(:,:,:), aiso3j(:,:,:) & - ,aivpo1j(:,:,:), akj(:,:,:) & - ,ald2(:,:,:), ald2_primary(:,:,:) & - ,aldx(:,:,:) & - ,alvoo1i(:,:,:), alvoo1j(:,:,:) & - ,alvoo2i(:,:,:), alvoo2j(:,:,:) & - ,alvpo1i(:,:,:), alvpo1j(:,:,:) & - ,amgj(:,:,:), amnj(:,:,:) & - ,amgk(:,:,:), akk(:,:,:), acak(:,:,:) & - ,anai(:,:,:), anaj(:,:,:), anak(:,:,:) & - ,anh4i(:,:,:), anh4j(:,:,:), anh4k(:,:,:) & - ,ano3i(:,:,:), ano3j(:,:,:), ano3k(:,:,:) & - ,aolgaj(:,:,:), aolgbj(:,:,:), aorgcj(:,:,:) & - ,aomi(:,:,:), aomj(:,:,:) & - ,aothri(:,:,:), aothrj(:,:,:) & - ,apah1j(:,:,:), apah2j(:,:,:), apah3j(:,:,:) & - ,apomi(:,:,:), apomj(:,:,:) & - ,apcsoj(:,:,:), aseacat(:,:,:), asij(:,:,:) & - ,aso4i(:,:,:), aso4j(:,:,:), aso4k(:,:,:) & - ,asoil(:,:,:), asqtj(:,:,:) & - ,asomi(:,:,:), asomj(:,:,:) & - ,asvoo1i(:,:,:), asvoo1j(:,:,:) & - ,asvoo2i(:,:,:), asvoo2j(:,:,:) & - ,asvoo3j(:,:,:) & - ,asvpo1i(:,:,:), asvpo1j(:,:,:) & - ,asvpo2i(:,:,:), asvpo2j(:,:,:) & - ,asvpo3j(:,:,:) & - ,atij(:,:,:) & - ,atol1j(:,:,:), atol2j(:,:,:), atol3j(:,:,:) & - ,atoti(:,:,:), atotj(:,:,:), atotk(:,:,:) & - ,atrp1j(:,:,:), atrp2j(:,:,:) & - ,axyl1j(:,:,:), axyl2j(:,:,:), axyl3j(:,:,:) & - ,pm25ac(:,:,:), pm25at(:,:,:), pm25co(:,:,:) - - - if (me == 0) print *,' aqfcmaq_on=', aqfcmaq_on - - if (aqfcmaq_on) then - - allocate(aacd(im,jsta_2l:jend_2u,lm)) - allocate(aalj(im,jsta_2l:jend_2u,lm)) - allocate(aalk1j(im,jsta_2l:jend_2u,lm)) - allocate(aalk2j(im,jsta_2l:jend_2u,lm)) - - allocate(abnz1j(im,jsta_2l:jend_2u,lm)) - allocate(abnz2j(im,jsta_2l:jend_2u,lm)) - allocate(abnz3j(im,jsta_2l:jend_2u,lm)) - - allocate(acaj(im,jsta_2l:jend_2u,lm)) - allocate(acet(im,jsta_2l:jend_2u,lm)) - - allocate(acli(im,jsta_2l:jend_2u,lm)) - allocate(aclj(im,jsta_2l:jend_2u,lm)) - allocate(aclk(im,jsta_2l:jend_2u,lm)) - - allocate(acors(im,jsta_2l:jend_2u,lm)) - allocate(acro_primary(im,jsta_2l:jend_2u,lm)) - allocate(acrolein(im,jsta_2l:jend_2u,lm)) - allocate(aeci(im,jsta_2l:jend_2u,lm)) - allocate(aecj(im,jsta_2l:jend_2u,lm)) - allocate(afej(im,jsta_2l:jend_2u,lm)) - allocate(aglyj(im,jsta_2l:jend_2u,lm)) - - allocate(ah2oi(im,jsta_2l:jend_2u,lm)) - allocate(ah2oj(im,jsta_2l:jend_2u,lm)) - allocate(ah2ok(im,jsta_2l:jend_2u,lm)) - - allocate(ah3opi(im,jsta_2l:jend_2u,lm)) - allocate(ah3opj(im,jsta_2l:jend_2u,lm)) - allocate(ah3opk(im,jsta_2l:jend_2u,lm)) - - allocate(aiso1j(im,jsta_2l:jend_2u,lm)) - allocate(aiso2j(im,jsta_2l:jend_2u,lm)) - allocate(aiso3j(im,jsta_2l:jend_2u,lm)) - - allocate(aivpo1j(im,jsta_2l:jend_2u,lm)) - allocate(akj(im,jsta_2l:jend_2u,lm)) - - allocate(ald2(im,jsta_2l:jend_2u,lm)) - allocate(ald2_primary(im,jsta_2l:jend_2u,lm)) - - allocate(aldx(im,jsta_2l:jend_2u,lm)) - - allocate(alvoo1i(im,jsta_2l:jend_2u,lm)) - allocate(alvoo1j(im,jsta_2l:jend_2u,lm)) - allocate(alvoo2i(im,jsta_2l:jend_2u,lm)) - allocate(alvoo2j(im,jsta_2l:jend_2u,lm)) - allocate(alvpo1i(im,jsta_2l:jend_2u,lm)) - allocate(alvpo1j(im,jsta_2l:jend_2u,lm)) - - allocate(amgj(im,jsta_2l:jend_2u,lm)) - allocate(amnj(im,jsta_2l:jend_2u,lm)) - - allocate(anai(im,jsta_2l:jend_2u,lm)) - allocate(anaj(im,jsta_2l:jend_2u,lm)) - allocate(anak(im,jsta_2l:jend_2u,lm)) - - allocate(anh4i(im,jsta_2l:jend_2u,lm)) - allocate(anh4j(im,jsta_2l:jend_2u,lm)) - allocate(anh4k(im,jsta_2l:jend_2u,lm)) - - allocate(ano3i(im,jsta_2l:jend_2u,lm)) - allocate(ano3j(im,jsta_2l:jend_2u,lm)) - allocate(ano3k(im,jsta_2l:jend_2u,lm)) - - allocate(aolgaj(im,jsta_2l:jend_2u,lm)) - allocate(aolgbj(im,jsta_2l:jend_2u,lm)) - - allocate(aomi(im,jsta_2l:jend_2u,lm)) - allocate(aomj(im,jsta_2l:jend_2u,lm)) - - allocate(aorgcj(im,jsta_2l:jend_2u,lm)) - - allocate(aothri(im,jsta_2l:jend_2u,lm)) - allocate(aothrj(im,jsta_2l:jend_2u,lm)) - - allocate(apah1j(im,jsta_2l:jend_2u,lm)) - allocate(apah2j(im,jsta_2l:jend_2u,lm)) - allocate(apah3j(im,jsta_2l:jend_2u,lm)) - - allocate(apcsoj(im,jsta_2l:jend_2u,lm)) - - allocate(apomi(im,jsta_2l:jend_2u,lm)) - allocate(apomj(im,jsta_2l:jend_2u,lm)) - - allocate(aseacat(im,jsta_2l:jend_2u,lm)) - allocate(asij(im,jsta_2l:jend_2u,lm)) - - allocate(aso4i(im,jsta_2l:jend_2u,lm)) - allocate(aso4j(im,jsta_2l:jend_2u,lm)) - allocate(aso4k(im,jsta_2l:jend_2u,lm)) - allocate(asoil(im,jsta_2l:jend_2u,lm)) - - allocate(asomi(im,jsta_2l:jend_2u,lm)) - allocate(asomj(im,jsta_2l:jend_2u,lm)) - - allocate(asqtj(im,jsta_2l:jend_2u,lm)) - - allocate(asvoo1i(im,jsta_2l:jend_2u,lm)) - allocate(asvoo1j(im,jsta_2l:jend_2u,lm)) - allocate(asvoo2i(im,jsta_2l:jend_2u,lm)) - allocate(asvoo2j(im,jsta_2l:jend_2u,lm)) - allocate(asvoo3j(im,jsta_2l:jend_2u,lm)) - - allocate(asvpo1i(im,jsta_2l:jend_2u,lm)) - allocate(asvpo1j(im,jsta_2l:jend_2u,lm)) - allocate(asvpo2i(im,jsta_2l:jend_2u,lm)) - allocate(asvpo2j(im,jsta_2l:jend_2u,lm)) - allocate(asvpo3j(im,jsta_2l:jend_2u,lm)) - - allocate(atij(im,jsta_2l:jend_2u,lm)) - - allocate(atol1j(im,jsta_2l:jend_2u,lm)) - allocate(atol2j(im,jsta_2l:jend_2u,lm)) - allocate(atol3j(im,jsta_2l:jend_2u,lm)) - - allocate(atoti(im,jsta_2l:jend_2u,lm)) - allocate(atotj(im,jsta_2l:jend_2u,lm)) - allocate(atotk(im,jsta_2l:jend_2u,lm)) - - allocate(atrp1j(im,jsta_2l:jend_2u,lm)) - allocate(atrp2j(im,jsta_2l:jend_2u,lm)) - - allocate(axyl1j(im,jsta_2l:jend_2u,lm)) - allocate(axyl2j(im,jsta_2l:jend_2u,lm)) - allocate(axyl3j(im,jsta_2l:jend_2u,lm)) - - allocate(pm25ac(im,jsta_2l:jend_2u,lm)) - allocate(pm25at(im,jsta_2l:jend_2u,lm)) - allocate(pm25co(im,jsta_2l:jend_2u,lm)) - + if (modelname == 'FV3R') then + allocate(extsmoke(ista_2l:iend_2u,jsta_2l:jend_2u,lm)) + allocate(extdust(ista_2l:iend_2u,jsta_2l:jend_2u,lm)) endif !*********************************************************************** @@ -375,14 +206,17 @@ SUBROUTINE INITPOST_NETCDF(ncid3d) WRITE(6,*)'INITPOST: ENTER INITPOST_NETCDF' WRITE(6,*)'me=',me, & 'jsta_2l=',jsta_2l,'jend_2u=', & - jend_2u,'im=',im + jend_2u,'im=',im, & + 'ista_2l=',ista_2l,'iend_2u=',iend_2u, & + 'ista=',ista,'iend=',iend, & + 'iend_m=',iend_m ! - isa = im / 2 + isa = (ista+iend) / 2 jsa = (jsta+jend) / 2 !$omp parallel do private(i,j) do j = jsta_2l, jend_2u - do i=1,im + do i= ista_2l, iend_2u buf(i,j) = spval enddo enddo @@ -394,14 +228,6 @@ SUBROUTINE INITPOST_NETCDF(ncid3d) else if(me==0)print*,'ak5= ',ak5 end if - Status=nf90_get_att(ncid3d,nf90_global,'sf_surface_physi', & - iSF_SURFACE_PHYSICS) - if(Status/=0)then - print*,'sf_surface_physi not found; assigning to 2' - iSF_SURFACE_PHYSICS=2 !set LSM physics to 2 for NOAH - else - if(me==0)print*,'SF_SURFACE_PHYSICS= ',iSF_SURFACE_PHYSICS - endif Status=nf90_get_att(ncid3d,nf90_global,'idrt',idrt) if(Status/=0)then print*,'idrt not in netcdf file,reading grid' @@ -486,8 +312,8 @@ SUBROUTINE INITPOST_NETCDF(ncid3d) dyval=dum_const*gdsdegr end if - print*,'lonstart,latstart,cenlon,cenlat,dyval,dxval', & - lonstart,latstart,cenlon,cenlat,dyval,dxval +! print*,'lonstart,latstart,cenlon,cenlat,dyval,dxval', & +! lonstart,latstart,cenlon,cenlat,dyval,dxval ! Jili Dong add support for regular lat lon (2019/03/22) start else if(trim(varcharval)=='latlon')then @@ -625,9 +451,13 @@ SUBROUTINE INITPOST_NETCDF(ncid3d) end if STANDLON = cenlon - print*,'lonstart,latstart,cenlon,cenlat,truelat1,truelat2,stadlon,dyval,dxval', & + print*,'lonstart,latstart,cenlon,cenlat,truelat1,truelat2, & + stadlon,dyval,dxval', & lonstart,latstart,cenlon,cenlat,truelat1,truelat2,standlon,dyval,dxval + else if(trim(varcharval)=='gaussian')then + MAPTYPE=4 + idrt=4 else ! setting default maptype MAPTYPE=0 idrt=0 @@ -644,7 +474,7 @@ SUBROUTINE INITPOST_NETCDF(ncid3d) !$omp parallel do private(i,j) do j = jsta_2l, jend_2u - do i = 1, im + do i = ista_2l, iend_2u LMV(i,j) = lm LMH(i,j) = lm end do @@ -655,7 +485,7 @@ SUBROUTINE INITPOST_NETCDF(ncid3d) !$omp parallel do private(i,j,l) do l = 1, lm do j = jsta_2l, jend_2u - do i = 1, im + do i = ista_2l, iend_2u HTM (i,j,l) = 1.0 VTM (i,j,l) = 1.0 end do @@ -669,12 +499,13 @@ SUBROUTINE INITPOST_NETCDF(ncid3d) end if if(me==0)print*,'nhcas= ',nhcas if (nhcas == 0 ) then !non-hydrostatic case - nrec=14 + nrec=18 allocate (recname(nrec)) recname=[character(len=20) :: 'ugrd','vgrd','spfh','tmp','o3mr', & 'presnh','dzdt', 'clwmr','dpres', & 'delz','icmr','rwmr', & - 'snmr','grle'] + 'snmr','grle','smoke','dust', & + 'smoke_ext','dust_ext'] else nrec=8 allocate (recname(nrec)) @@ -685,7 +516,6 @@ SUBROUTINE INITPOST_NETCDF(ncid3d) ! write(0,*)'nrec=',nrec !allocate(recname(nrec),reclevtyp(nrec),reclev(nrec)) allocate(glat1d(jm),glon1d(im)) - allocate(vcoord4(lm+1,3,2)) ! hardwire idate for now ! idate=(/2017,08,07,00,0,0,0,0/) @@ -720,7 +550,7 @@ SUBROUTINE INITPOST_NETCDF(ncid3d) ! Jili Dong check output format for coordinate reading Status=nf90_inq_varid(ncid3d,'grid_xt',varid) Status=nf90_inquire_variable(ncid3d,varid,ndims = numDims) - if(numDims==1) then + if(numDims==1.and.modelname=="FV3R") then read_lonlat=.true. else read_lonlat=.false. @@ -741,7 +571,7 @@ SUBROUTINE INITPOST_NETCDF(ncid3d) if(numDims==1)then Status=nf90_get_var(ncid3d,varid,glon1d) do j=jsta,jend - do i=1,im + do i=ista,iend gdlon(i,j) = real(glon1d(i),kind=4) end do end do @@ -764,13 +594,13 @@ SUBROUTINE INITPOST_NETCDF(ncid3d) if(maxval(abs(dummy))<2.0*pi)convert_rad_to_deg=.true. if(convert_rad_to_deg)then do j=jsta,jend - do i=1,im + do i=ista,iend gdlon(i,j) = real(dummy(i,j),kind=4)*180./pi end do end do else do j=jsta,jend - do i=1,im + do i=ista,iend gdlon(i,j) = real(dummy(i,j),kind=4) end do end do @@ -778,9 +608,13 @@ SUBROUTINE INITPOST_NETCDF(ncid3d) if(convert_rad_to_deg)then lonstart = nint(dummy(1,1)*gdsdegr)*180./pi lonlast = nint(dummy(im,jm)*gdsdegr)*180./pi + lonse = nint(dummy(im,1)*gdsdegr)*180./pi + lonnw = nint(dummy(1,jm)*gdsdegr)*180./pi else lonstart = nint(dummy(1,1)*gdsdegr) lonlast = nint(dummy(im,jm)*gdsdegr) + lonse = nint(dummy(im,1)*gdsdegr) + lonnw = nint(dummy(1,jm)*gdsdegr) end if ! Jili Dong add support for regular lat lon (2019/03/22) start @@ -810,7 +644,7 @@ SUBROUTINE INITPOST_NETCDF(ncid3d) if(numDims==1)then Status=nf90_get_var(ncid3d,varid,glat1d) do j=jsta,jend - do i=1,im + do i=ista,iend gdlat(i,j) = real(glat1d(j),kind=4) end do end do @@ -821,13 +655,13 @@ SUBROUTINE INITPOST_NETCDF(ncid3d) if(maxval(abs(dummy))1.0E6 .or. pint(1,jsta_2l,lp1)<50000.) & + do i=ista,iend +! if(pint(i,j,lp1)>1.0E6 .or. pint(ista_2l,jsta_2l,lp1)<50000.) & ! print*,'bad psfc ',i,j,pint(i,j,lp1) end do end do @@ -1686,14 +1017,14 @@ SUBROUTINE INITPOST_NETCDF(ncid3d) pt = ak5(1) do j=jsta,jend - do i=1,im + do i=ista,iend pint(i,j,1)= pt end do end do do l=2,lp1 do j=jsta,jend - do i=1,im + do i=ista,iend if (dpres(i,j,l-1) @file -! -!> SUBPROGRAM: INITPOST INITIALIZE POST FOR RUN -!! PRGRMMR: RUSS TREADON ORG: W/NP2 DATE: 93-11-10 -!! -!! ABSTRACT: THIS ROUTINE INITIALIZES CONSTANTS AND -!! VARIABLES AT THE START OF AN ETA MODEL OR POST -!! PROCESSOR RUN. -!! -!! THIS ROUTINE ASSUMES THAT INTEGERS AND REALS ARE THE SAME SIZE -!! -!! PROGRAM HISTORY LOG: -!! 93-11-10 RUSS TREADON - ADDED DOCBLOC -!! 98-05-29 BLACK - CONVERSION OF POST CODE FROM 1-D TO 2-D -!! 99-01 20 TUCCILLO - MPI VERSION -!! 01-10-25 H CHUANG - MODIFIED TO PROCESS HYBRID MODEL OUTPUT -!! 02-06-19 MIKE BALDWIN - WRF VERSION -!! 02-08-15 H CHUANG - UNIT CORRECTION AND GENERALIZE PROJECTION OPTIONS -!! 03-07-25 H CHUANG - MODIFIED TO PROCESS NMM WRF -!! 05-12-05 H CHUANG - ADD CAPABILITY TO OUTPUT OFF-HOUR FORECAST WHICH HAS -!! NO INPACTS ON ON-HOUR FORECAST -!! 21-03-11 Bo Cui - change local arrays to dimension (im,jsta:jend) -!! -!! USAGE: CALL INIT -!! INPUT ARGUMENT LIST: -!! NONE -!! -!! OUTPUT ARGUMENT LIST: -!! NONE -!! -!! OUTPUT FILES: -!! NONE -!! -!! SUBPROGRAMS CALLED: -!! UTILITIES: -!! NONE -!! LIBRARY: -!! COMMON - CTLBLK -!! LOOKUP -!! SOILDEPTH -!! -!! -!! ATTRIBUTES: -!! LANGUAGE: FORTRAN -!! MACHINE : CRAY C-90 -!! - SUBROUTINE INITPOST_NMM - - use vrbls3d, only: t, u, uh, v, vh, q, cwm, f_ice, f_rain, f_rimef, q,& - qqw, qqr, qqs, qqi, qqg, qqw, cwm , q2, wh, pint, alpint, pmid,& - omga, pmidv, zmid, rlwtt, rswtt, ttnd, tcucn, train, exch_h,& - el_pbl, cfr, zint, REF_10CM, qqni, qqnr, qrimef - use vrbls2d, only: fis, cfrach, cfracl, cfracm, u10h, u10, v10h, v10,th10,& - q10, tshltr, qshltr, pshltr, smstav, smstot, acfrcv, acfrst, ncfrcv,& - ncfrst, ssroff, bgroff, sfcevp, sfcexc, vegfrc, acsnow, acsnom,& - cmc, sst, mdltaux, mdltauy, thz0, qz0, uz0, vz0, qs, z0, pblh, mixht,& - ustar, akhs, akms, ths, prec, cuprec, acprec, ancprc, cprate, cuppt,& - lspa, cldefi, htop, hbot, htopd, czmean, rswout, rlwin, rlwtoa, sigt4,& - radot, aswin, aswout, alwin, alwout, alwtoa, aswtoa, hbotd, htops,& - hbots, sr, rswin, rswinc, czen, tg, soiltb, twbs, sfcshx, qwbs,& - sfclhx, grnflx, subshx, potevp, sno, si, pctsno, ivgtyp, isltyp,& - islope, albedo, albase, mxsnal, epsr, f, REFC_10CM, REFD_MAX, & - RSWTOA, SWUPT, ACSWUPT, SWDNT, ACSWDNT, CD10, CH10 - use soil, only: smc, sh2o, stc, sldpth, sllevel - use masks, only: lmv, lmh, htm, vtm, hbm2, sm, sice, gdlat, gdlon, dx, dy - use params_mod, only: tfrz, g, rd, d608, rtd, dtr, erad - use lookup_mod, only: thl, plq, ptbl, ttbl, rdq, rdth, rdp, rdthe, pl,& - qs0, sqs, sthe, the0, ttblq, rdpq, rdtheq, stheq, the0q - use ctlblk_mod, only: jsta, jend, nprec, jsta_2l, jend_2u, filename,& - datahandle, datestr, ihrst, imin, sdat, spval, imp_physics, pt,& - icu_physics, pdtop, nsoil, isf_surface_physics, jsta_m, jend_m,& - avrain, avcnvc, ardsw, ardlw, asrfc, me, mpi_comm_comp, nphs, spl,& - lsm, dt, dtq2,tsrfc, trdlw, trdsw, idat, ifhr, ifmin, restrt,& - theat, tclod, tprec, alsl, lm, im, jm , submodelname - use gridspec_mod, only: latstart, latlast, cenlat, lonstart, lonlast,& - cenlon, dxval, dyval, maptype, gridtype, truelat1, truelat2,& - psmapf -! use wrf_io_flags_mod -! - implicit none -! -! INCLUDE/SET PARAMETERS. -! - INCLUDE "mpif.h" -! -! This version of INITPOST shows how to initialize, open, read from, and -! close a NetCDF dataset. In order to change it to read an internal (binary) -! dataset, do a global replacement of _ncd_ with _int_. - real :: dcenlat, dcenlon - character(len=31) :: VarName - integer :: Status, cen1, cen2 - character startdate*19,SysDepInfo*80 -! -! NOTE: SOME INTEGER VARIABLES ARE READ INTO DUMMY ( A REAL ). THIS IS OK -! AS LONG AS REALS AND INTEGERS ARE THE SAME SIZE. -! -! ALSO, EXTRACT IS CALLED WITH DUMMY ( A REAL ) EVEN WHEN THE NUMBERS ARE -! INTEGERS - THIS IS OK AS LONG AS INTEGERS AND REALS ARE THE SAME SIZE. - CHARACTER*4 RESTHR - INTEGER IDATE(8),JDATE(8) - INTEGER :: i_parent_start, j_parent_start -! -! DECLARE VARIABLES. -! - REAL RINC(5) - REAL ETA1(LM), ETA2(LM) - REAL DUMMY ( IM, JM ) -! REAL DUMMY2 ( IM, JM ) - real, allocatable :: fi(:,:,:) - REAL DUM3D ( IM+1, JM+1, LM+1 ) - REAL DUM3D2 ( IM+1, JM+1, LM+1 ) -!mp - INTEGER IDUMMY ( IM, JM ) -! -!jw - integer ii,jj,js,je,jev,iyear,imn,iday,itmp,ioutcount,istatus, & - nsrfc,nrdlw,nrdsw,nheat,nclod, & - I,J,L,LL,N,LONEND,LATEND,IMM,INAV,IRTN, & - IFDX,IFDY,IGDOUT,ICEN,JCEN -! integer iw, ie - real TSPH,fact,dumcst,tstart,tmp - real LAT -! -! Declarations for : -! putting 10 m wind on V points because copygb assume such - INTEGER IE, IW -!code from R.Rozumalski - INTEGER latnm, latsm, lonem, lonwm, idxave, dlat, dlon, nlat, nlon - -!*********************************************************************** -! START INIT HERE. -! - WRITE(6,*)'INITPOST: ENTER INITPOST' - print*,'im,jm,lm= ',im,jm,lm - - ii=im/2 ! diagnostic print indices - jj=(jsta+jend)/2 - ll=lm/2 -! -! STEP 1. READ MODEL OUTPUT FILE -! -! -!*** -! -! set default to not empty buket - NSRFC=0 - NRDLW=0 - NRDSW=0 - NHEAT=0 - NCLOD=0 - NPREC=0 - -! LMH always = LM for sigma-type vert coord -! LMV always = LM for sigma-type vert coord - - do j = jsta_2l, jend_2u - do i = 1, im - LMV ( i, j ) = lm - LMH ( i, j ) = lm - end do - end do - - -! HTM VTM all 1 for sigma-type vert coord - - do l = 1, lm - do j = jsta_2l, jend_2u - do i = 1, im - HTM ( i, j, l ) = 1.0 - VTM ( i, j, l ) = 1.0 - end do - end do - end do -! -! how do I get the filename? -! fileName = '/ptmp/wx20mb/wrfout_01_030500' -! DateStr = '2002-03-05_18:00:00' -! how do I get the filename? - call ext_ncd_ioinit(SysDepInfo,Status) - print*,'called ioinit', Status - call ext_ncd_open_for_read( trim(fileName), 0, 0, " ", & - DataHandle, Status) - print*,'called open for read', Status - if ( Status /= 0 ) then - print*,'error opening ',fileName, ' Status = ', Status ; stop - endif -! get date/time info -! this routine will get the next time from the file, not using it - print *,'DateStr before calling ext_ncd_get_next_time=',DateStr -! call ext_ncd_get_next_time(DataHandle, DateStr, Status) - print *,'DateStri,Status,DataHandle = ',DateStr,Status,DataHandle - -! The end j row is going to be jend_2u for all variables except for V. - JS=JSTA_2L - JE=JEND_2U - IF (JEND_2U==JM) THEN - JEV=JEND_2U+1 - ELSE - JEV=JEND_2U - ENDIF -! -! Getting start time - call ext_ncd_get_dom_ti_char(DataHandle,'START_DATE',startdate, & - status ) -! patch for NMM WRF because it does not have start-date in output yet -! startdate='2003-04-17T00:00:00' - print*,'startdate= ',startdate -! - jdate=0 - idate=0 - read(startdate,15)iyear,imn,iday,ihrst,imin - 15 format(i4,1x,i2,1x,i2,1x,i2,1x,i2) - print*,'start yr mo day hr min =',iyear,imn,iday,ihrst,imin - print*,'processing yr mo day hr min=',idat(3),idat(1),idat(2), & - idat(4),idat(5) - idate(1)=iyear - idate(2)=imn - idate(3)=iday - idate(5)=ihrst - idate(6)=imin - SDAT(1)=imn - SDAT(2)=iday - SDAT(3)=iyear -! - jdate(1)=idat(3) - jdate(2)=idat(1) - jdate(3)=idat(2) - jdate(5)=idat(4) - jdate(6)=idat(5) -! CALL W3DIFDAT(JDATE,IDATE,2,RINC) -! ifhr=nint(rinc(2)) - CALL W3DIFDAT(JDATE,IDATE,0,RINC) - ifhr=nint(rinc(2)+rinc(1)*24.) - ifmin=nint(rinc(3)) - print*,' in INITPOST ifhr ifmin fileName=',ifhr,ifmin,fileName - -! Getting tstart - call ext_ncd_get_dom_ti_real(DataHandle,'TSTART',tmp,1,ioutcount, & - istatus) - if(istatus==0)then - tstart=tmp - else - tstart=0. - end if - print*,'status for getting TSTART= ',istatus - print*,'TSTART= ',TSTART - -! Getting restart - - RESTRT=.TRUE. ! set RESTRT default - call ext_ncd_get_dom_ti_integer(DataHandle,'RESTARTBIN',itmp,1, & - ioutcount,istatus) - - IF(itmp < 1)THEN - RESTRT=.FALSE. - ELSE - RESTRT=.TRUE. - END IF - - print*,'status for getting RESTARTBIN= ',istatus - print*,'Is this a restrt run? ',RESTRT - -! IF(RESTRT)THEN -! ifhr=ifhr+NINT(tstart) -! print*,'new forecast hours for restrt run= ',ifhr -! END IF - - IF(tstart > 1.0E-2)THEN - ifhr=ifhr+NINT(tstart) - rinc=0 - idate=0 - rinc(2)=-1.0*ifhr - call w3movdat(rinc,jdate,idate) - SDAT(1)=idate(2) - SDAT(2)=idate(3) - SDAT(3)=idate(1) - IHRST=idate(5) - print*,'new forecast hours for restrt run= ',ifhr - print*,'new start yr mo day hr min =',sdat(3),sdat(1), & - sdat(2),ihrst,imin - END IF - - VarName='HBM2' - HBM2=SPVAL - call getVariable(fileName,DateStr,DataHandle,VarName,DUMMY, & - IM,1,JM,1,IM,JS,JE,1) - do j = jsta_2l, jend_2u - do i = 1, im - HBM2 ( i, j ) = dummy ( i, j ) - end do - end do - -! OK, since all of the variables are dimensioned/allocated to be -! the same size, this means we have to be careful int getVariable -! to not try to get too much data. For example, -! DUM3D is dimensioned IM+1,JM+1,LM+1 but there might actually -! only be im,jm,lm points of data available for a particular variable. - -! get 3-D variables - VarName='T' - call getVariable(fileName,DateStr,DataHandle,VarName,DUM3D, & - IM+1,1,JM+1,LM+1,IM,JS,JE,LM) - do l = 1, lm - do j = jsta_2l, jend_2u - do i = 1, im - t ( i, j, l ) = dum3d ( i, j, l ) -! if(l==1)print*,'Debug: I,J,T= ',i,j,t ( i, j, l ) -! t ( i, j, l ) = dum3d ( i, j, l ) + 300. -! th ( i, j, l ) = dum3d ( i, j, l ) + 300. - end do - end do - end do - do l=1,lm - if(jj>= jsta .and. jj<=jend)print*,'sample L,T= ',L,T(ii,jj,l) - end do - -! VarName='T_ADJ' -! call getVariable(fileName,DateStr,DataHandle,VarName,DUM3D, -! & IM+1,1,JM+1,LM+1,IM,JS,JE,LM) -! do l = 1, lm -! do j = jsta_2l, jend_2u -! do i = 1, im -! t_ADJ ( i, j, l ) = dum3d ( i, j, l ) -! end do -! end do -! end do -! do l=1,lm -! if(jj>= jsta .and. jj<=jend)print*,'sample L,T_ADJ= ',L -! &,T_ADJ(ii,jj,l) -! end do - - - VarName='U' - call getVariable(fileName,DateStr,DataHandle,VarName,DUM3D, & - IM+1,1,JM+1,LM+1,IM,JS,JE,LM) - do l = 1, lm - do j = jsta_2l, jend_2u - do i = 1, im - u ( i, j, l ) = dum3d ( i, j, l ) - UH( i, j, l ) = dum3d ( i, j, l ) -! if(l==1)print*,'Debug: I,J,U= ',i,j,u( i, j, l ) - end do - end do -! fill up UH which is U at P-points including 2 row halo -! do j = jsta_2l, jend_2u -! do i = 1, im -! UH (I,J,L) = (dum3d(I,J,L)+dum3d(I+1,J,L))*0.5 -! end do -! end do - end do - if(jj>= jsta .and. jj<=jend)print*,'sample U= ',U(ii,jj,ll) - VarName='V' - call getVariable(fileName,DateStr,DataHandle,VarName,DUM3D, & - IM+1,1,JM+1,LM+1,IM,JS,JE,LM) - do l = 1, lm - do j = jsta_2l, jend_2u - do i = 1, im - v ( i, j, l ) = dum3d ( i, j, l ) - VH( i, j, l ) = dum3d ( i, j, l ) - end do - end do -! fill up VH which is V at P-points including 2 row halo -! do j = jsta_2l, jend_2u -! do i = 1, im -! VH(I,J,L) = (dum3d(I,J,L)+dum3d(I,J+1,L))*0.5 -! end do -! end do - end do - if(jj>= jsta .and. jj<=jend)print*,'sample V= ',V(ii,jj,ll) - - call ext_ncd_get_dom_ti_integer(DataHandle,'MP_PHYSICS' & - ,itmp,1,ioutcount,istatus) - imp_physics=itmp -! Chuang: will initialize microphysics constants differently for 85 now -! if(imp_physics == 85) imp_physics=5 !HWRF - print*,'MP_PHYSICS= ',imp_physics - -! Initializes constants for Ferrier microphysics - if(imp_physics==5 .or. imp_physics==15 .or. imp_physics==85 & - .or. imp_physics==95)then - CALL MICROINIT(imp_physics) - end if - - call ext_ncd_get_dom_ti_integer(DataHandle,'CU_PHYSICS' & - ,itmp,1,ioutcount,istatus) - icu_physics=itmp - if (icu_physics == 84 .or. icu_physics == 85) icu_physics = 4 ! HWRF - print*,'CU_PHYSICS= ',icu_physics - - ! Set these values to SPVAL to insure they are initialized a - ! fact that the code relies on later.... - qqw=spval - qqr=spval - qqs=spval - qqi=spval - qqg=spval - -!KRF: NMM and ARW direct read of radar ref for microphysic options -! mp options: 2,4,6,7,8,10,14,16 -! REFL_10cm --> REF_10CM -! REFD_MAX --> REFD_MAX - VarName='REFL_10CM' - call getVariable(fileName,DateStr,DataHandle,VarName,DUM3D, & - IM+1,1,JM+1,LM+1,IM,JS,JE,LM) - do l = 1, lm - do j = jsta_2l, jend_2u - do i = 1, im - REF_10CM ( i, j, l ) = dum3d ( i, j, l ) - end do - end do - end do - do l=1,lm - if(jj>= jsta .and. jj<=jend)print*,'sample L,T= ',L,T(ii,jj,l) - end do - - VarName='REFD_MAX' - call getVariable(fileName,DateStr,DataHandle,VarName,DUMMY, & - IM,1,JM,1,IM,JS,JE,1) - do j = jsta_2l, jend_2u - do i = 1, im - REFD_MAX ( i, j ) = dummy ( i, j ) - end do - end do -! print*,'REFD_MAX at ',ii,jj,' = ',REFD_MAX(ii,jj) -! END KRF - - if(imp_physics==5 .or. imp_physics==15 .or. imp_physics==85 .or. imp_physics==95)then - - VarName='Q' - call getVariable(fileName,DateStr,DataHandle,VarName,DUM3D, & - IM+1,1,JM+1,LM+1,IM,JS,JE,LM) - do l = 1, lm - do j = jsta_2l, jend_2u - do i = 1, im - if (dum3d(i,j,l) < 10E-12) dum3d(i,j,l) = 10E-12 - q ( i, j, l ) = dum3d ( i, j, l ) - end do - end do - end do - print*,'finish reading specific humidity' - if(jj>= jsta .and. jj<=jend)print*,'sample Q= ',Q(ii,jj,ll) - - else - VarName='QVAPOR' - call getVariable(fileName,DateStr,DataHandle,VarName,DUM3D, & - IM+1,1,JM+1,LM+1,IM,JS,JE,LM) - do l = 1, lm - do j = jsta_2l, jend_2u - do i = 1, im -! q ( i, j, l ) = dum3d ( i, j, l ) -! if(l==1)print*,'Debug: I,J,Q= ',i,j,q( i, j, l ) -!CHC CONVERT MIXING RATIO TO SPECIFIC HUMIDITY - if (dum3d(i,j,l) < 10E-12) dum3d(i,j,l) = 10E-12 - q ( i, j, l ) = dum3d ( i, j, l )/(1.0+dum3d ( i, j, l )) - end do - end do - end do - print*,'finish reading specific humidity' - if(jj>= jsta .and. jj<=jend)print*,'sample Q= ',Q(ii,jj,ll) - endif - - if(imp_physics==5 .or. imp_physics==85 .or. imp_physics==95)then - VarName='CWM' !????? - call getVariable(fileName,DateStr,DataHandle,VarName,DUM3D, & - IM+1,1,JM+1,LM+1,IM,JS,JE,LM) - do l = 1, lm - do j = jsta_2l, jend_2u - do i = 1, im - cwm ( i, j, l ) = dum3d ( i, j, l ) - end do - end do - end do - print*,'finish reading cloud mixing ratio' - - VarName='F_ICE' - call getVariable(fileName,DateStr,DataHandle,VarName,DUM3D, & - IM+1,1,JM+1,LM+1,IM,JS,JE,LM) - do l = 1, lm - do j = jsta_2l, jend_2u - do i = 1, im - F_ICE ( i, j, l ) = dum3d ( i, j, l ) - end do - end do - end do - - VarName='F_RAIN' - call getVariable(fileName,DateStr,DataHandle,VarName,DUM3D, & - IM+1,1,JM+1,LM+1,IM,JS,JE,LM) - do l = 1, lm - do j = jsta_2l, jend_2u - do i = 1, im - F_RAIN ( i, j, l ) = dum3d ( i, j, l ) - end do - end do - end do - - VarName='F_RIMEF' - call getVariable(fileName,DateStr,DataHandle,VarName,DUM3D, & - IM+1,1,JM+1,LM+1,IM,JS,JE,LM) - do l = 1, lm - do j = jsta_2l, jend_2u - do i = 1, im - F_RIMEF ( i, j, l ) = dum3d ( i, j, l ) - end do - end do - end do - - else ! retrieve hydrometeo fields directly for non-Ferrier - cwm=spval !make sure set - F_RimeF=spval !make sure set - - if(imp_physics/=0)then - VarName='QCLOUD' - call getVariable(fileName,DateStr,DataHandle,VarName,DUM3D, & - IM+1,1,JM+1,LM+1,IM,JS,JE,LM) - do l = 1, lm - do j = jsta_2l, jend_2u - do i = 1, im -! partition cloud water and ice for WSM3 - if(imp_physics==3)then - if(t(i,j,l) >= TFRZ)then - qqw ( i, j, l ) = dum3d ( i, j, l ) - else - qqi ( i, j, l ) = dum3d ( i, j, l ) - end if - else ! bug fix provided by J CASE - qqw ( i, j, l ) = dum3d ( i, j, l ) - end if - cwm(i,j,l)=dum3d(i,j,l) - end do - end do - end do - end if - if(jj>= jsta .and. jj<=jend)print*,'sample qqw= ' & - ,Qqw(ii,jj,ll) - - if(imp_physics/=1 .and. imp_physics/=3 & - .and. imp_physics/=0)then - VarName='QICE' - call getVariable(fileName,DateStr,DataHandle,VarName,DUM3D, & - IM+1,1,JM+1,LM+1,IM,JS,JE,LM) - do l = 1, lm - do j = jsta_2l, jend_2u - do i = 1, im - qqi ( i, j, l ) = dum3d ( i, j, l ) - cwm(i,j,l)=cwm(i,j,l)+dum3d(i,j,l) - end do - end do - end do - end if - if(jj>= jsta .and. jj<=jend)print*,'sample qqi= ' & - ,Qqi(ii,jj,ll) - - if(imp_physics==15) then - VarName='QRIMEF' - call getVariable(fileName,DateStr,DataHandle,VarName,DUM3D, & - IM+1,1,JM+1,LM+1,IM,JS,JE,LM) - do l = 1, lm - do j = jsta_2l, jend_2u - do i = 1, im - qrimef ( i, j, l ) = dum3d ( i, j, l ) - end do - end do - end do - end if - if(jj>= jsta .and. jj<=jend)print*,'sample qrimef= ' & - ,Qrimef(ii,jj,ll) - - if(imp_physics/=0)then - VarName='QRAIN' - call getVariable(fileName,DateStr,DataHandle,VarName,DUM3D, & - IM+1,1,JM+1,LM+1,IM,JS,JE,LM) - do l = 1, lm - do j = jsta_2l, jend_2u - do i = 1, im -! partition rain and snow for WSM3 - if(imp_physics == 3)then - if(t(i,j,l) >= TFRZ)then - qqr ( i, j, l ) = dum3d ( i, j, l ) - else - qqs ( i, j, l ) = dum3d ( i, j, l ) - end if - else ! bug fix provided by J CASE - qqr ( i, j, l ) = dum3d ( i, j, l ) - end if - cwm(i,j,l)=cwm(i,j,l)+dum3d(i,j,l) - end do - end do - end do - end if - if(jj>= jsta .and. jj<=jend)print*,'sample qqr= ' & - ,Qqr(ii,jj,ll) - - if(imp_physics/=1 .and. imp_physics/=3 & - .and. imp_physics/=0)then - VarName='QSNOW' - call getVariable(fileName,DateStr,DataHandle,VarName,DUM3D, & - IM+1,1,JM+1,LM+1,IM,JS,JE,LM) - do l = 1, lm - do j = jsta_2l, jend_2u - do i = 1, im - qqs ( i, j, l ) = dum3d ( i, j, l ) - cwm(i,j,l)=cwm(i,j,l)+dum3d(i,j,l) - end do - end do - end do - end if - if(jj>= jsta .and. jj<=jend)print*,'sample qqs= ' & - ,Qqs(ii,jj,ll) - - if(imp_physics==2 .or. imp_physics==6 & - .or. imp_physics==8 .or. imp_physics==28)then - VarName='QGRAUP' - call getVariable(fileName,DateStr,DataHandle,VarName,DUM3D, & - IM+1,1,JM+1,LM+1,IM,JS,JE,LM) - do l = 1, lm - do j = jsta_2l, jend_2u - do i = 1, im - qqg ( i, j, l ) = dum3d ( i, j, l ) - cwm(i,j,l)=cwm(i,j,l)+dum3d(i,j,l) - end do - end do - end do - end if - if(jj>= jsta .and. jj<=jend)print*,'sample qqg= ' & - ,Qqg(ii,jj,ll) - -! KRS: Add concentrations for HWRF output - if(imp_physics==8 .or. imp_physics==9)then - VarName='QNICE' - call getVariable(fileName,DateStr,DataHandle,VarName,DUM3D, & - IM+1,1,JM+1,LM+1,IM, JS,JE,LM) - do l = 1, lm - do j = jsta_2l, jend_2u - do i = 1, im - qqni ( i, j, l ) = dum3d ( i, j, l ) - if(i==im/2.and.j==(jsta+jend)/2)print*,'sample QQNI= ', & - i,j,l,QQNI ( i, j, l ) - end do - end do - end do - VarName='QNRAIN' - call getVariable(fileName,DateStr,DataHandle,VarName,DUM3D, & - IM+1,1,JM+1,LM+1,IM, JS,JE,LM) - do l = 1, lm - do j = jsta_2l, jend_2u - do i = 1, im - qqnr ( i, j, l ) = dum3d ( i, j, l ) - if(i==im/2.and.j==(jsta+jend)/2)print*,'sample QQNR= ', & - i,j,l,QQNR ( i, j, l ) - end do - end do - end do - end if -! KRS: End add concentrations for HWRF - - end if ! end of retrieving hydrometeo for different MP options - - -! call getVariable(fileName,DateStr,DataHandle,'TKE_PBL',DUM3D, - call getVariable(fileName,DateStr,DataHandle,'Q2',DUM3D, & - IM+1,1,JM+1,LM+1,IM,JS,JE,LM) - do l = 1, lm - do j = jsta_2l, jend_2u - do i = 1, im - q2 ( i, j, l ) = dum3d ( i, j, l ) - end do - end do - end do - VarName='W' - call getVariable(fileName,DateStr,DataHandle,VarName,DUM3D, & - IM+1,1,JM+1,LM+1,IM,JS,JE,LM+1) -! & IM+1,1,JM+1,LM+1,IM,JS,JE,LM) -! do l = 1, lm+1 -! do j = jsta_2l, jend_2u -! do i = 1, im -! w ( i, j, l ) = dum3d ( i, j, l ) -! end do -! end do -! end do -! fill up WH which is W at P-points including 2 row halo - DO L=1,LM - DO I=1,IM - DO J=JSTA_2L,JEND_2U -! WH(I,J,L) = (W(I,J,L)+W(I,J,L+1))*0.5 - wh ( i, j, l ) = dum3d ( i, j, l+1 ) - ENDDO - ENDDO - ENDDO - print*,'finish reading W' - -!MEB call getVariable(fileName,DateStr,DataHandle,'QRAIN',new) - - VarName='PINT' - call getVariable(fileName,DateStr,DataHandle,VarName,DUM3D, & - IM+1,1,JM+1,LM+1,IM,JS,JE,LM+1) -! VarName='P' -! call getVariable(fileName,DateStr,DataHandle,VarName,DUM3D2, -! & IM+1,1,JM+1,LM+1,IM,JS,JE,LM) - do l = 1, lm+1 - do j = jsta_2l, jend_2u - do i = 1, im -! PMID(I,J,L)=DUM3D(I,J,L)+DUM3D2(I,J,L) - PINT(I,J,L)=DUM3D(I,J,L) - ALPINT(I,J,L)=ALOG(PINT(I,J,L)) - end do - end do - end do -! do l = 1, lm+1 -! if(jj>= jsta .and. jj<=jend)print*,'sample PINT= ' -! & ,PINT(ii,jj,l) -! end do -! - DO L=1,LM - DO I=1,IM - DO J=JSTA_2L,JEND_2U - PMID(I,J,L)=(PINT(I,J,L)+PINT(I,J,L+1))*0.5 -! TH(I,J,L)=T(I,J,L)*(1.E5/PMID(I,J,L))**CAPA - IF(ABS(T(I,J,L))>1.0E-3) & - OMGA(I,J,L) = -WH(I,J,L)*PMID(I,J,L)*G/ & - (RD*T(I,J,L)*(1.+D608*Q(I,J,L))) -! -! PINT(I,J,L)=EXP((ALOG(PMID(I,J,L-1))+ -! & ALOG(PMID(I,J,L)))*0.5) ! ave of ln p -! ALPINT(I,J,L)=ALOG(PINT(I,J,L)) - ENDDO - ENDDO - ENDDO -! - do l = 1, lm - do j = jsta, jend - do i = 1, im-MOD(J,2) - IF(J == 1 .AND. I < IM)THEN !SOUTHERN BC - PMIDV(I,J,L)=0.5*(PMID(I,J,L)+PMID(I+1,J,L)) - ELSE IF(J==JM .AND. I1.0e-5)print*,'nonzero ncfrcv',ncfrcv(i,j) - end do - end do - - VarName='NCFRST' - write(6,*) 'call getIVariable for : ', VarName - call getIVariableN(fileName,DateStr,DataHandle,VarName,IDUMMY, & - IM,1,JM,1,IM,JS,JE,1) - do j = jsta_2l, jend_2u - do i = 1, im - ncfrst ( i, j ) = float(idummy ( i, j )) -! if(ncfrst(i,j)>1.0e-5)print*,'nonzero ncfrst',ncfrst(i,j) - end do - end do - - VarName='SSROFF' - call getVariable(fileName,DateStr,DataHandle,VarName,DUMMY, & - IM,1,JM,1,IM,JS,JE,1) - do j = jsta_2l, jend_2u - do i = 1, im - SSROFF ( i, j ) = dummy ( i, j ) - end do - end do - VarName='UDROFF' - call getVariable(fileName,DateStr,DataHandle,VarName,DUMMY, & - IM,1,JM,1,IM,JS,JE,1) - do j = jsta_2l, jend_2u - do i = 1, im - BGROFF ( i, j ) = dummy ( i, j ) - end do - end do - - VarName='SFCEVP' - call getVariable(fileName,DateStr,DataHandle,VarName,DUMMY, & - IM,1,JM,1,IM,JS,JE,1) - do j = jsta_2l, jend_2u - do i = 1, im - SFCEVP( i, j ) = dummy ( i, j ) - end do - end do -! print*,'SFCEVP at ',ii,jj,' = ',SFCEVP(ii,jj) - - VarName='CD10' - call getVariable(fileName,DateStr,DataHandle,VarName,DUMMY,& - IM,1,JM,1,IM,JS,JE,1) - do j = jsta_2l, jend_2u - do i = 1, im - CD10( i, j ) = dummy ( i, j ) - end do - end do -! print*,'CD10 at ',ii,jj,' = ',CD10(ii,jj) - - VarName='CH10' - call getVariable(fileName,DateStr,DataHandle,VarName,DUMMY,& - IM,1,JM,1,IM,JS,JE,1) - do j = jsta_2l, jend_2u - do i = 1, im - CH10( i, j ) = dummy ( i, j ) - end do - end do -! print*,'CD10 at ',ii,jj,' = ',CD10(ii,jj) - - VarName='SFCEXC' - call getVariable(fileName,DateStr,DataHandle,VarName,DUMMY, & - IM,1,JM,1,IM,JS,JE,1) - do j = jsta_2l, jend_2u - do i = 1, im - SFCEXC( i, j ) = dummy ( i, j ) - end do - end do -! print*,'SFCEXC at ',ii,jj,' = ',SFCEXC(ii,jj) - VarName='VEGFRC' - call getVariable(fileName,DateStr,DataHandle,VarName,DUMMY, & - IM,1,JM,1,IM,JS,JE,1) - do j = jsta_2l, jend_2u - do i = 1, im - VEGFRC ( i, j ) = dummy ( i, j ) - end do - end do - print*,'VEGFRC at ',ii,jj,' = ',VEGFRC(ii,jj) - VarName='ACSNOW' - call getVariable(fileName,DateStr,DataHandle,VarName,DUMMY, & - IM,1,JM,1,IM,JS,JE,1) - do j = jsta_2l, jend_2u - do i = 1, im - ACSNOW ( i, j ) = dummy ( i, j ) - end do - end do - VarName='ACSNOM' - call getVariable(fileName,DateStr,DataHandle,VarName,DUMMY, & - IM,1,JM,1,IM,JS,JE,1) - do j = jsta_2l, jend_2u - do i = 1, im - ACSNOM ( i, j ) = dummy ( i, j ) - end do - end do -! VarName='CANWAT' - VarName='CMC' - call getVariable(fileName,DateStr,DataHandle,VarName,DUMMY, & - IM,1,JM,1,IM,JS,JE,1) - do j = jsta_2l, jend_2u - do i = 1, im - CMC ( i, j ) = dummy ( i, j ) - end do - end do - VarName='SST' - call getVariable(fileName,DateStr,DataHandle,VarName,DUMMY, & - IM,1,JM,1,IM,JS,JE,1) - do j = jsta_2l, jend_2u - do i = 1, im - SST ( i, j ) = dummy ( i, j ) - end do - end do - print*,'SST at ',ii,jj,' = ',sst(ii,jj) - - VarName='TAUX' - call getVariable(fileName,DateStr,DataHandle,VarName,DUMMY, & - IM,1,JM,1,IM,JS,JE,1) - do j = jsta_2l, jend_2u - do i = 1, im - MDLTAUX ( i, j ) = dummy ( i, j ) - end do - end do - print*,'MDLTAUX at ',ii,jj,' = ',mdltaux(ii,jj) - - VarName='TAUY' - call getVariable(fileName,DateStr,DataHandle,VarName,DUMMY, & - IM,1,JM,1,IM,JS,JE,1) - do j = jsta_2l, jend_2u - do i = 1, im - MDLTAUY ( i, j ) = dummy ( i, j ) - end do - end do - print*,'MDLTAUY at ',ii,jj,' = ',mdltauy(ii,jj) - - VarName='EXCH_H' - call getVariable(fileName,DateStr,DataHandle,VarName,DUM3D, & - IM+1,1,JM+1,LM+1,IM,JS,JE,LM) - do l = 1, lm - do j = jsta_2l, jend_2u - do i = 1, im - EXCH_H ( i, j, l ) = dum3d ( i, j, l ) - dummy(i,j)=dum3d ( i, j, l ) - end do - end do - print*,'l, max exch = ',l,maxval(dummy) - end do - do l=1,lm - print*,'sample EXCH_H= ',EXCH_H(ii,jj,l) - end do - - VarName='EL_PBL' - call getVariable(fileName,DateStr,DataHandle,VarName,DUM3D, & - IM+1,1,JM+1,LM+1,IM,JS,JE,LM) - do l = 1, lm - do j = jsta_2l, jend_2u - do i = 1, im - EL_PBL ( i, j, l ) = dum3d ( i, j, l ) - dummy(i,j)=dum3d ( i, j, l ) - end do - end do - print*,'l, max EL_PBL = ',l,maxval(dummy) - end do - - - VarName='THZ0' - call getVariable(fileName,DateStr,DataHandle,VarName,DUMMY, & - IM,1,JM,1,IM,JS,JE,1) - do j = jsta_2l, jend_2u - do i = 1, im - THZ0 ( i, j ) = dummy ( i, j ) - end do - end do - print*,'THZ0 at ',ii,jj,' = ',THZ0(ii,jj) - VarName='QZ0' - call getVariable(fileName,DateStr,DataHandle,VarName,DUMMY, & - IM,1,JM,1,IM,JS,JE,1) - do j = jsta_2l, jend_2u - do i = 1, im - QZ0 ( i, j ) = dummy ( i, j ) - end do - end do - print*,'QZ0 at ',ii,jj,' = ',QZ0(ii,jj) - VarName='UZ0' - call getVariable(fileName,DateStr,DataHandle,VarName,DUMMY, & - IM,1,JM,1,IM,JS,JE,1) - do j = jsta_2l, jend_2u - do i = 1, im - UZ0 ( i, j ) = dummy ( i, j ) - end do - end do - print*,'UZ0 at ',ii,jj,' = ',UZ0(ii,jj) - VarName='VZ0' - call getVariable(fileName,DateStr,DataHandle,VarName,DUMMY, & - IM,1,JM,1,IM,JS,JE,1) - do j = jsta_2l, jend_2u - do i = 1, im - VZ0 ( i, j ) = dummy ( i, j ) - end do - end do - print*,'VZ0 at ',ii,jj,' = ',VZ0(ii,jj) -! VarName='QSFC' - VarName='QS' - call getVariable(fileName,DateStr,DataHandle,VarName,DUMMY, & - IM,1,JM,1,IM,JS,JE,1) - do j = jsta_2l, jend_2u - do i = 1, im - QS ( i, j ) = dummy ( i, j ) -! if(qs(i,j)>1.0e-7)print*,'nonzero qsfc' - end do - end do - - VarName='Z0' - call getVariable(fileName,DateStr,DataHandle,VarName,DUMMY, & - IM,1,JM,1,IM,JS,JE,1) - do j = jsta_2l, jend_2u - do i = 1, im - Z0 ( i, j ) = dummy ( i, j ) - end do - end do - - VarName='PBLH' - call getVariable(fileName,DateStr,DataHandle,VarName,DUMMY, & - IM,1,JM,1,IM,JS,JE,1) - do j = jsta_2l, jend_2u - do i = 1, im - PBLH( i, j ) = dummy ( i, j ) - end do - end do -! write(6,*) 'PBLH(ii,jj): ', DUMMY(ii,jj) - - VarName='MIXHT' !PLee (3/07) - MIXHT=SPVAL !Init value to detect read failure - call getVariable(filename,DateStr,DataHandle,Varname,DUMMY, & - IM,1,JM,1,IM,JS,JE,1) - do j = jsta_2l, jend_2u - do i = 1, im - MIXHT( i, j ) = dummy ( i, j ) - end do - end do - - VarName='USTAR' - call getVariable(fileName,DateStr,DataHandle,VarName,DUMMY, & - IM,1,JM,1,IM,JS,JE,1) - do j = jsta_2l, jend_2u - do i = 1, im - USTAR( i, j ) = dummy ( i, j ) - end do - end do - - print*,'USTAR at ',ii,jj,' = ',USTAR(ii,jj) - VarName='AKHS_OUT' - call getVariable(fileName,DateStr,DataHandle,VarName,DUMMY, & - IM,1,JM,1,IM,JS,JE,1) - do j = jsta_2l, jend_2u - do i = 1, im - AKHS ( i, j ) = dummy ( i, j ) - end do - end do - print*,'max akhs= ',maxval(akhs) - VarName='AKMS_OUT' - call getVariable(fileName,DateStr,DataHandle,VarName,DUMMY, & - IM,1,JM,1,IM,JS,JE,1) - do j = jsta_2l, jend_2u - do i = 1, im - AKMS ( i, j ) = dummy ( i, j ) - end do - end do - print*,'max akms= ',maxval(akms) - -! -! In my version, variable is TSK (skin temp, not skin pot temp) -! -!mp call getVariable(fileName,DateStr,DataHandle,'THSK',DUMMY, -! VarName='TSK' - VarName='THS' - call getVariable(fileName,DateStr,DataHandle,VarName,DUMMY, & - IM,1,JM,1,IM,JS,JE,1) - do j = jsta_2l, jend_2u - do i = 1, im - THS ( i, j ) = dummy ( i, j ) - end do - end do - print*,'THS at ',ii,jj,' = ',THS(ii,jj) - -!C -!CMP -!C -!C RAINC is "ACCUMULATED TOTAL CUMULUS PRECIPITATION" -!C RAINNC is "ACCUMULATED TOTAL GRID SCALE PRECIPITATION" - - write(6,*) 'getting RAINC' - - VarName='PREC' - call getVariable(fileName,DateStr,DataHandle,VarName,DUMMY, & - IM,1,JM,1,IM,JS,JE,1) - do j = jsta_2l, jend_2u - do i = 1, im -! CUPREC ( i, j ) = dummy ( i, j ) * 0.001 - PREC ( i, j ) = dummy ( i, j ) - end do - end do - print*,'PREC at ',ii,jj,' = ',PREC(ii,jj) - -! VarName='RAINC' - VarName='CUPREC' - call getVariable(fileName,DateStr,DataHandle,VarName,DUMMY, & - IM,1,JM,1,IM,JS,JE,1) - do j = jsta_2l, jend_2u - do i = 1, im -! CUPREC ( i, j ) = dummy ( i, j ) * 0.001 - CUPREC ( i, j ) = dummy ( i, j ) - end do - end do - print*,'CUPREC at ',ii,jj,' = ',CUPREC(ii,jj) - write(6,*) 'getting RAINTOTAL' -! VarName='RAINNC' - VarName='ACPREC' - call getVariable(fileName,DateStr,DataHandle,VarName,DUMMY, & - IM,1,JM,1,IM,JS,JE,1) - do j = jsta_2l, jend_2u - do i = 1, im - ACPREC( i, j ) = dummy ( i, j ) - ANCPRC ( i, j ) = ACPREC(I,J)-CUPREC(I,J) - end do - end do - print*,'ACPREC at ',ii,jj,' = ',ACPREC(ii,jj) - print*,'ANCPRC at ',ii,jj,' = ',ANCPRC(ii,jj) -! -! hoping to read instantanous convective precip rate soon, initialize it to spval -! for now - - VarName='CPRATE' - call getVariable(fileName,DateStr,DataHandle,VarName,DUMMY, & - IM,1,JM,1,IM,JS,JE,1) - do j = jsta_2l, jend_2u - do i = 1, im - CPRATE(I,J)=dummy(i,j) - enddo - enddo - - VarName='CUPPT' - call getVariable(fileName,DateStr,DataHandle,VarName,DUMMY, & - IM,1,JM,1,IM,JS,JE,1) - do j = jsta_2l, jend_2u - do i = 1, im - CUPPT ( i, j ) = dummy ( i, j ) - end do - end do - print*,'maxval CUPPT: ', maxval(DUMMY) - -! adding land surface precipitation accumulation for Yin's precip assimilation - - VarName='LSPA' - call getVariable(fileName,DateStr,DataHandle,VarName,DUMMY, & - IM,1,JM,1,IM,JS,JE,1) - do j = jsta_2l, jend_2u - do i = 1, im - LSPA ( i, j ) = dummy ( i, j ) - end do - end do - print*,'maxval LSPA: ', maxval(DUMMY) - - - VarName='CLDEFI' - call getVariable(fileName,DateStr,DataHandle,VarName,DUMMY, & - IM,1,JM,1,IM,JS,JE,1) - do j = jsta_2l, jend_2u - do i = 1, im - CLDEFI ( i, j ) = dummy ( i, j ) - end do - end do - print*,'maxval CLDEFI: ', maxval(DUMMY) - -! -! Very confusing story ... -! -! Retrieve htop and hbot => They are named CNVTOP, CNVBOT in the model and -! with HBOTS,HTOPS (shallow conv) and HBOTD,HTOPD (deep conv) represent -! the 3 sets of convective cloud base/top arrays tied to the frequency -! that history files are written. -! -! IN THE *MODEL*, arrays HBOT,HTOP are similar to CNVTOP,CNVBOT but are -! used in radiation and are tied to the frequency of radiation updates. -! -! For historical reasons model arrays CNVTOP,CNVBOT are renamed HBOT,HTOP -! and manipulated throughout the post. - -! VarName='HTOP' - VarName='CNVTOP' - call getVariable(fileName,DateStr,DataHandle,VarName,DUMMY, & - IM,1,JM,1,IM,JS,JE,1) - do j = jsta_2l, jend_2u - do i = 1, im - HTOP ( i, j ) = float(LM)-dummy(i,j)+1.0 - HTOP ( i, j ) = max(1.0,min(HTOP(I,J),float(LM))) - end do - end do - print*,'maxval HTOP: ', maxval(DUMMY) - -! VarName='HBOT' - VarName='CNVBOT' - call getVariable(fileName,DateStr,DataHandle,VarName,DUMMY, & - IM,1,JM,1,IM,JS,JE,1) - do j = jsta_2l, jend_2u - do i = 1, im - HBOT ( i, j ) = float(LM)-dummy(i,j)+1.0 - HBOT ( i, j ) = max(1.0,min(HBOT(I,J),float(LM))) - end do - end do - print*,'maxval HBOT: ', maxval(DUMMY) - - VarName='HTOPD' - call getVariable(fileName,DateStr,DataHandle,VarName,DUMMY, & - IM,1,JM,1,IM,JS,JE,1) - do j = jsta_2l, jend_2u - do i = 1, im - HTOPD ( i, j ) = float(LM)-dummy(i,j)+1.0 - end do - end do - print*,'maxval HTOPD: ', maxval(DUMMY) - - VarName='HBOTD' - call getVariable(fileName,DateStr,DataHandle,VarName,DUMMY, & - IM,1,JM,1,IM,JS,JE,1) - do j = jsta_2l, jend_2u - do i = 1, im - HBOTD ( i, j ) = float(LM)-dummy(i,j)+1.0 - end do - end do - print*,'maxval HBOTD: ', maxval(DUMMY) - - VarName='HTOPS' - call getVariable(fileName,DateStr,DataHandle,VarName,DUMMY, & - IM,1,JM,1,IM,JS,JE,1) - do j = jsta_2l, jend_2u - do i = 1, im - HTOPS ( i, j ) = float(LM)-dummy(i,j)+1.0 - end do - end do - print*,'maxval HTOPS: ', maxval(DUMMY) - - VarName='HBOTS' - call getVariable(fileName,DateStr,DataHandle,VarName,DUMMY, & - IM,1,JM,1,IM,JS,JE,1) - do j = jsta_2l, jend_2u - do i = 1, im - HBOTS ( i, j ) = float(LM)-dummy(i,j)+1.0 - end do - end do - print*,'maxval HBOTS: ', maxval(DUMMY) - - VarName='CLDFRA' - call getVariable(fileName,DateStr,DataHandle,VarName,DUM3D, & - IM+1,1,JM+1,LM+1,IM,JS,JE,LM) - do l = 1, lm - do j = jsta_2l, jend_2u - do i = 1, im - CFR ( i, j, l ) = dum3d ( i, j, l ) - end do - end do - end do - - - VarName='SR' - call getVariable(fileName,DateStr,DataHandle,VarName,DUMMY, & - IM,1,JM,1,IM,JS,JE,1) - do j = jsta_2l, jend_2u - do i = 1, im - SR ( i, j ) = dummy(i,j) - end do - end do - print*,'maxval SR: ', maxval(DUMMY) - -! call getVariable(fileName,DateStr,DataHandle,'RAINCV',DUMMY, -! & IM,1,JM,1,IM,JS,JE,1) -! do j = jsta_2l, jend_2u -! do i = 1, im -! CUPPT ( i, j ) = dummy ( i, j )* 0.001 -! end do -! end do -! -! VarName='GSW' - VarName='RSWIN' - call getVariable(fileName,DateStr,DataHandle,VarName,DUMMY, & - IM,1,JM,1,IM,JS,JE,1) - do j = jsta_2l, jend_2u - do i = 1, im - RSWIN ( i, j ) = dummy ( i, j ) -! if(abs(dummy(i,j))> 0.0)print*,'rswin=',dummy(i,j) - end do - end do - - VarName='RSWINC' - call getVariable(fileName,DateStr,DataHandle,VarName,DUMMY, & - IM,1,JM,1,IM,JS,JE,1) - do j = jsta_2l, jend_2u - do i = 1, im - RSWINC ( i, j ) = dummy ( i, j ) -! if(abs(dummy(i,j))> 0.0)print*,'rswin=',dummy(i,j) - end do - end do - -! read in zenith angle - VarName='CZEN' - call getVariable(fileName,DateStr,DataHandle,VarName,DUMMY, & - IM,1,JM,1,IM,JS,JE,1) - do j = jsta_2l, jend_2u - do i = 1, im - CZEN ( i, j ) = dummy ( i, j ) -! if(abs(czen(i,j))> 0.0)print*,'czen=',czen(i,j) - end do - end do - - VarName='CZMEAN' - call getVariable(fileName,DateStr,DataHandle,VarName,DUMMY, & - IM,1,JM,1,IM,JS,JE,1) - do j = jsta_2l, jend_2u - do i = 1, im - CZMEAN ( i, j ) = dummy ( i, j ) -! if(abs(dummy(i,j))> 0.0)print*,'czmean=',dummy(i,j) - end do - end do - - VarName='RSWOUT' - call getVariable(fileName,DateStr,DataHandle,VarName,DUMMY, & - IM,1,JM,1,IM,JS,JE,1) - do j = jsta_2l, jend_2u - do i = 1, im - RSWOUT ( i, j ) = dummy ( i, j ) -! if(abs(dummy(i,j))> 0.0)print*,'rswout=',dummy(i,j) - end do - end do - -! VarName='GLW' - VarName='RLWIN' - call getVariable(fileName,DateStr,DataHandle,VarName,DUMMY, & - IM,1,JM,1,IM,JS,JE,1) - do j = jsta_2l, jend_2u - do i = 1, im - RLWIN ( i, j ) = dummy ( i, j ) - end do - end do - - VarName='RLWTOA' - call getVariable(fileName,DateStr,DataHandle,VarName,DUMMY, & - IM,1,JM,1,IM,JS,JE,1) - do j = jsta_2l, jend_2u - do i = 1, im - RLWTOA ( i, j ) = dummy ( i, j ) - end do - end do - - VarName='SIGT4' - call getVariable(fileName,DateStr,DataHandle,VarName,DUMMY, & - IM,1,JM,1,IM,JS,JE,1) - do j = jsta_2l, jend_2u - do i = 1, im - SIGT4 ( i, j ) = dummy ( i, j ) - end do - end do - - VarName='RADOT' - call getVariable(fileName,DateStr,DataHandle,VarName,DUMMY, & - IM,1,JM,1,IM,JS,JE,1) - do j = jsta_2l, jend_2u - do i = 1, im - RADOT ( i, j ) = dummy ( i, j ) - end do - end do - -! accumulated incoming short wave - VarName='ASWIN' - call getVariable(fileName,DateStr,DataHandle,VarName,DUMMY, & - IM,1,JM,1,IM,JS,JE,1) - do j = jsta_2l, jend_2u - do i = 1, im - ASWIN ( i, j ) = dummy ( i, j ) - end do - end do - -! accumulated outgoing short wave - VarName='ASWOUT' - call getVariable(fileName,DateStr,DataHandle,VarName,DUMMY, & - IM,1,JM,1,IM,JS,JE,1) - do j = jsta_2l, jend_2u - do i = 1, im - ASWOUT ( i, j ) = dummy ( i, j ) -! if(abs(dummy(i,j))> 0.0)print*,'aswout=',dummy(i,j) - end do - end do - -! shortwave accumulation frequency - VarName='NRDSW' - call getIVariableN(fileName,DateStr,DataHandle,VarName,NRDSW, & - 1,1,1,1,1,1,1,1) - print*,'NRDSW in INITPOST_NMM=',NRDSW - - VarName='ARDSW' - call getVariable(fileName,DateStr,DataHandle,VarName,ARDSW, & - 1,1,1,1,1,1,1,1) - print*,'ARDSW ARDLW in INITPOST_NMM=',ARDSW, ARDLW -! accumulated incoming long wave - VarName='ALWIN' - call getVariable(fileName,DateStr,DataHandle,VarName,DUMMY, & - IM,1,JM,1,IM,JS,JE,1) - do j = jsta_2l, jend_2u - do i = 1, im - ALWIN ( i, j ) = dummy ( i, j ) - end do - end do - -! accumulated outgoing long wave - VarName='ALWOUT' - call getVariable(fileName,DateStr,DataHandle,VarName,DUMMY, & - IM,1,JM,1,IM,JS,JE,1) - do j = jsta_2l, jend_2u - do i = 1, im - ALWOUT ( i, j ) = dummy ( i, j ) - end do - end do - -! longwave accumulation frequency - VarName='NRDLW' - call getIVariableN(fileName,DateStr,DataHandle,VarName,NRDLW, & - 1,1,1,1,1,1,1,1) - print*,'NRDLW= ',NRDLW - -! longwave accumulation counts - VarName='ARDLW' - call getVariable(fileName,DateStr,DataHandle,VarName,ARDLW, & - 1,1,1,1,1,1,1,1) - -! obtain time averaged radition at the top of atmosphere - VarName='ALWTOA' - call getVariable(fileName,DateStr,DataHandle,VarName,DUMMY, & - IM,1,JM,1,IM,JS,JE,1) - do j = jsta_2l, jend_2u - do i = 1, im - ALWTOA ( i, j ) = dummy ( i, j ) - end do - end do - - VarName='ASWTOA' - call getVariable(fileName,DateStr,DataHandle,VarName,DUMMY, & - IM,1,JM,1,IM,JS,JE,1) - do j = jsta_2l, jend_2u - do i = 1, im - ASWTOA ( i, j ) = dummy ( i, j ) - end do - end do - -! KRS: Add RSWTOA to radiation variable options - VarName='RSWTOA' - call getVariable(fileName,DateStr,DataHandle,VarName,DUMMY, & - IM,1,JM,1,IM,JS,JE,1) - do j = jsta_2l, jend_2u - do i = 1, im - RSWTOA ( i, j ) = dummy ( i, j ) - end do - end do - -! KRS: RRTMG variables for HWRF - VarName='SWUPT' - call getVariable(fileName,DateStr,DataHandle,VarName,DUMMY, & - IM,1,JM,1,IM,JS,JE,1) - do j = jsta_2l, jend_2u - do i = 1, im - SWUPT ( i, j ) = dummy ( i, j ) - end do - end do - - VarName='ACSWUPT' - call getVariable(fileName,DateStr,DataHandle,VarName,DUMMY, & - IM,1,JM,1,IM,JS,JE,1) - do j = jsta_2l, jend_2u - do i = 1, im - ACSWUPT ( i, j ) = dummy ( i, j ) - end do - end do - - VarName='SWDNT' - call getVariable(fileName,DateStr,DataHandle,VarName,DUMMY, & - IM,1,JM,1,IM,JS,JE,1) - do j = jsta_2l, jend_2u - do i = 1, im - SWDNT ( i, j ) = dummy ( i, j ) - end do - end do - - VarName='ACSWDNT' - call getVariable(fileName,DateStr,DataHandle,VarName,DUMMY, & - IM,1,JM,1,IM,JS,JE,1) - do j = jsta_2l, jend_2u - do i = 1, im - ACSWDNT ( i, j ) = dummy ( i, j ) - end do - end do - -! END KRS RRTMG Vars - - -! VarName='TMN' -! VarName='TG' - VarName='TGROUND' - call getVariable(fileName,DateStr,DataHandle,VarName,DUMMY, & - IM,1,JM,1,IM,JS,JE,1) - do j = jsta_2l, jend_2u - do i = 1, im - TG ( i, j ) = dummy ( i, j ) - end do - end do - - VarName='SOILTB' - call getVariable(fileName,DateStr,DataHandle,VarName,DUMMY, & - IM,1,JM,1,IM,JS,JE,1) - do j = jsta_2l, jend_2u - do i = 1, im - SOILTB ( i, j ) = dummy ( i, j ) - end do - end do - -! sensible heat fluxes - VarName='TWBS' - call getVariable(fileName,DateStr,DataHandle,VarName,DUMMY, & - IM,1,JM,1,IM,JS,JE,1) - do j = jsta_2l, jend_2u - do i = 1, im - TWBS ( i, j ) = dummy ( i, j ) - end do - end do - -! accumulated sensible heat fluxes -! VarName='HFX' - VarName='SFCSHX' - call getVariable(fileName,DateStr,DataHandle,VarName,DUMMY, & - IM,1,JM,1,IM,JS,JE,1) - do j = jsta_2l, jend_2u - do i = 1, im - SFCSHX ( i, j ) = dummy ( i, j ) - end do - end do - -! fluxes accumulation frequency - VarName='NSRFC' - call getIVariableN(fileName,DateStr,DataHandle,VarName,NSRFC, & - 1,1,1,1,1,1,1,1) - print*,'NSRFC= ',NSRFC -! fluxes accumulation counts - VarName='ASRFC' - call getVariable(fileName,DateStr,DataHandle,VarName,ASRFC, & - 1,1,1,1,1,1,1,1) - -! instantanous latent heat fluxes - VarName='QWBS' - call getVariable(fileName,DateStr,DataHandle,VarName,DUMMY, & - IM,1,JM,1,IM,JS,JE,1) - do j = jsta_2l, jend_2u - do i = 1, im - QWBS ( i, j ) = dummy ( i, j ) - end do - end do - -! accumulated latent heat fluxes -! VarName='QFX' - VarName='SFCLHX' - call getVariable(fileName,DateStr,DataHandle,VarName,DUMMY, & - IM,1,JM,1,IM,JS,JE,1) - do j = jsta_2l, jend_2u - do i = 1, im - SFCLHX ( i, j ) = dummy ( i, j ) - end do - end do - -! instantanous ground heat fluxes - VarName='GRNFLX' - call getVariable(fileName,DateStr,DataHandle,VarName,DUMMY, & - IM,1,JM,1,IM,JS,JE,1) - do j = jsta_2l, jend_2u - do i = 1, im - GRNFLX ( i, j ) = dummy ( i, j ) - end do - end do - -! accumulated ground heat fluxes - VarName='SUBSHX' - call getVariable(fileName,DateStr,DataHandle,VarName,DUMMY, & - IM,1,JM,1,IM,JS,JE,1) - do j = jsta_2l, jend_2u - do i = 1, im - SUBSHX ( i, j ) = dummy ( i, j ) - end do - end do - -! accumulated ground heat fluxes - VarName='POTEVP' - call getVariable(fileName,DateStr,DataHandle,VarName,DUMMY, & - IM,1,JM,1,IM,JS,JE,1) - do j = jsta_2l, jend_2u - do i = 1, im - POTEVP ( i, j ) = dummy ( i, j ) - end do - end do - -! VarName='SNOWC' -! VarName='SNO' - VarName='WEASD' - call getVariable(fileName,DateStr,DataHandle,VarName,DUMMY, & - IM,1,JM,1,IM,JS,JE,1) -! do j = jsta_2l, jend_2u -! do i = 1, im -! SNO ( i, j ) = dummy ( i, j ) -! end do -! end do - - VarName='SNO' - call getVariable(fileName,DateStr,DataHandle,VarName,DUMMY, & - IM,1,JM,1,IM,JS,JE,1) - do j = jsta_2l, jend_2u - do i = 1, im - SNO ( i, j ) = dummy ( i, j ) - end do - end do - - VarName='SI' - call getVariable(fileName,DateStr,DataHandle,VarName,DUMMY, & - IM,1,JM,1,IM,JS,JE,1) - do j = jsta_2l, jend_2u - do i = 1, im - SI ( i, j ) = dummy ( i, j ) - end do - end do - -! snow cover - VarName='PCTSNO' - call getVariable(fileName,DateStr,DataHandle,VarName,DUMMY, & - IM,1,JM,1,IM,JS,JE,1) - do j = jsta_2l, jend_2u - do i = 1, im - PCTSNO ( i, j ) = dummy ( i, j ) - if(dummy(i,j) > 1.0e-5)print*,'nonzero pctsno' - end do - end do - - -! GET VEGETATION TYPE - -! call getVariable(fileName,DateStr,DataHandle,'IVGTYP',DUMMY -! & ,IM,1,JM,1,IM,JS,JE,1) -! print*,'sample VEG TYPE',DUMMY(20,20) -! XLAND 1 land 2 sea -! VarName='XLAND' - - VarName='IVGTYP' - call getIVariableN(fileName,DateStr,DataHandle,VarName,IDUMMY, & - IM,1,JM,1,IM,JS,JE,1) - do j = jsta_2l, jend_2u - do i = 1, im - IVGTYP ( i, j ) = idummy ( i, j ) - end do - end do - print*,'MAX IVGTYP=', maxval(idummy) - - VarName='ISLTYP' - call getIVariableN(fileName,DateStr,DataHandle,VarName,IDUMMY, & - IM,1,JM,1,IM,JS,JE,1) - do j = jsta_2l, jend_2u - do i = 1, im - ISLTYP ( i, j ) = idummy ( i, j ) - end do - end do - print*,'MAX ISLTYP=', maxval(idummy) - - VarName='ISLOPE' - call getIVariableN(fileName,DateStr,DataHandle,VarName,IDUMMY, & - IM,1,JM,1,IM,JS,JE,1) - do j = jsta_2l, jend_2u - do i = 1, im - ISLOPE( i, j ) = idummy ( i, j ) - end do - end do - - VarName='SM' - call getVariable(fileName,DateStr,DataHandle,VarName,DUMMY, & - IM,1,JM,1,IM,JS,JE,1) - do j = jsta_2l, jend_2u - do i = 1, im - SM ( i, j ) = dummy ( i, j ) - end do - end do - - VarName='SICE' - call getVariable(fileName,DateStr,DataHandle,VarName,DUMMY, & - IM,1,JM,1,IM,JS,JE,1) - do j = jsta_2l, jend_2u - do i = 1, im - SICE ( i, j ) = dummy ( i, j ) - end do - end do - - VarName='ALBEDO' - call getVariable(fileName,DateStr,DataHandle,VarName,DUMMY, & - IM,1,JM,1,IM,JS,JE,1) - do j = jsta_2l, jend_2u - do i = 1, im - ALBEDO( i, j ) = dummy ( i, j ) - end do - end do - - VarName='ALBASE' - call getVariable(fileName,DateStr,DataHandle,VarName,DUMMY, & - IM,1,JM,1,IM,JS,JE,1) - do j = jsta_2l, jend_2u - do i = 1, im - ALBASE( i, j ) = dummy ( i, j ) - end do - end do - - VarName='MXSNAL' - call getVariable(fileName,DateStr,DataHandle,VarName,DUMMY, & - IM,1,JM,1,IM,JS,JE,1) - do j = jsta_2l, jend_2u - do i = 1, im - MXSNAL( i, j ) = dummy ( i, j ) - end do - end do - - VarName='EPSR' - call getVariable(fileName,DateStr,DataHandle,VarName,DUMMY, & - IM,1,JM,1,IM,JS,JE,1) - do j = jsta_2l, jend_2u - do i = 1, im - EPSR( i, j ) = dummy ( i, j ) - end do - end do - -! VarName='XLAT' - VarName='GLAT' - call getVariable(fileName,DateStr,DataHandle,VarName,DUMMY, & - IM,1,JM,1,IM,JS,JE,1) - do j = jsta_2l, jend_2u - do i = 1, im - f(i,j) = 1.454441e-4*sin(dummy(i,j)) - GDLAT ( i, j ) = dummy ( i, j ) * RTD - end do - end do -! pos north - print*,'GDLAT at ',ii,jj,' = ',GDLAT(ii,jj) - print*,'read past GDLAT' -! VarName='XLONG' - VarName='GLON' - call getVariable(fileName,DateStr,DataHandle,VarName,DUMMY, & - IM,1,JM,1,IM,JS,JE,1) - do j = jsta_2l, jend_2u - do i = 1, im - GDLON ( i, j ) = dummy ( i, j ) * RTD -! if(j==1 .or. j==jm)print*,'I,J,GDLON,GDLAT= ',i,j -! 1 ,GDLON( i, j ),GDLAT ( i, j ) -! if(abs(GDLAT(i,j)-20.0)<0.5 .and. abs(GDLON(I,J) -! 1 +157.0)<5.)print* -! 2 ,'Debug:I,J,GDLON,GDLAT,SM,HGT,psfc= ',i,j,GDLON(i,j) -! 3 ,GDLAT(i,j),SM(i,j),FIS(i,j)/G,PINT(I,j,lm+1) - end do - end do - print*,'GDLON at ',ii,jj,' = ',GDLON(ii,jj) - print*,'read past GDLON' -! pos east - call collect_loc(gdlat,dummy) - get_dcenlat: if(me==0)then - latstart=nint(dummy(1,1)*1000.) ! lower left - latlast=nint(dummy(im,jm)*1000.) ! upper right - - icen=im/2 !center grid - jcen=jm/2 -print *, 'dummy(icen,jcen) = ', dummy(icen,jcen) -print *, 'dummy(icen-1,jcen) = ', dummy(icen-1,jcen) -print *, 'dummy(icen+1,jcen) = ', dummy(icen+1,jcen) - - ! Grid navigation for copygb - R.Rozumalski - latnm = nint(dummy(icen,jm)*1000.) - latsm = nint(dummy(icen,1)*1000.) -print *, 'latnm, latsm', latnm, latsm - - ! temporary patch for nmm wrf for moving nest - ! cenlat = glat(im/2,jm/2) -Gopal - - if(mod(im,2)/=0)then !per Pyle, jm is always odd - if(mod(jm+1,4)/=0)then - dcenlat=dummy(icen,jcen) - else - dcenlat=0.5*(dummy(icen-1,jcen)+dummy(icen,jcen)) - end if - else - if(mod(jm+1,4)/=0)then - dcenlat=0.5*(dummy(icen,jcen)+dummy(icen+1,jcen)) - else - dcenlat=dummy(icen,jcen) - end if - end if - endif get_dcenlat - write(6,*) 'laststart,latlast,dcenlat B calling bcast= ', & - latstart,latlast,dcenlat - call mpi_bcast(latstart,1,MPI_INTEGER,0,mpi_comm_comp,irtn) - call mpi_bcast(latlast,1,MPI_INTEGER,0,mpi_comm_comp,irtn) - call mpi_bcast(dcenlat,1,MPI_REAL,0,mpi_comm_comp,irtn) - write(6,*) 'laststart,latlast A calling bcast= ',latstart,latlast - - call collect_loc(gdlon,dummy) - get_dcenlon: if(me==0)then - lonstart=nint(dummy(1,1)*1000.) - lonlast=nint(dummy(im,jm)*1000.) - - ! icen, jcen set above -print *, 'lon dummy(icen,jcen) = ', dummy(icen,jcen) -print *, 'lon dummy(icen-1,jcen) = ', dummy(icen-1,jcen) -print *, 'lon dummy(icen+1,jcen) = ', dummy(icen+1,jcen) - - ! Grid navigation for copygb - R.Rozumalski - lonem = nint(dummy(icen,jm)*1000.) - lonwm = nint(dummy(icen,1)*1000.) - - if(mod(im,2)/=0)then !per Pyle, jm is always odd - if(mod(jm+1,4)/=0)then - cen1=dummy(icen,jcen) - cen2=cen1 - else - cen1=min(dummy(icen-1,jcen),dummy(icen,jcen)) - cen2=max(dummy(icen-1,jcen),dummy(icen,jcen)) - end if - else - if(mod(jm+1,4)/=0)then - cen1=min(dummy(icen+1,jcen),dummy(icen,jcen)) - cen2=max(dummy(icen+1,jcen),dummy(icen,jcen)) - else - cen1=dummy(icen,jcen) - cen2=cen1 - end if - end if - ! Trahan fix: Pyle's code broke at the dateline. - if(cen2-cen1>180) then - ! We're near the dateline - dcenlon=mod(0.5*(cen2+cen1+360)+3600+180,360.)-180. - else - ! We're not near the dateline. Use the original code, - ! unmodified, to maintain bitwise identicality. - dcenlon=0.5*(cen1+cen2) - endif - end if get_dcenlon ! rank 0 - write(6,*)'lonstart,lonlast,cenlon B calling bcast= ',lonstart, & - lonlast,cenlon - call mpi_bcast(lonstart,1,MPI_INTEGER,0,mpi_comm_comp,irtn) - call mpi_bcast(lonlast,1,MPI_INTEGER,0,mpi_comm_comp,irtn) - call mpi_bcast(dcenlon,1,MPI_REAL,0,mpi_comm_comp,irtn) - write(6,*)'lonstart,lonlast,cenlon A calling bcast= ',lonstart, & - lonlast,cenlon - - if(me==0) then - open(1013,file='this-domain-center.ksh.inc',form='formatted',status='unknown') -1013 format(A,'=',F0.3) - write(1013,1013) 'clat',dcenlat - write(1013,1013) 'clon',dcenlon - endif -! -! OBTAIN DX FOR NMM WRF - VarName='DX_NMM' - call getVariable(fileName,DateStr,DataHandle,VarName,DUMMY, & - IM,1,JM,1,IM,JS,JE,1) - do j = jsta_2l, jend_2u - do i = 1, im - DX ( i, j ) = dummy ( i, j ) - if(DX(i,j)<0.1)print*,'zero dx in INIT: I,J,DX= ',i,j & - ,DX( i, j ) -! if(j==1 .or. j==jm)print*,'I,J,DX= ',i,j -! 1 ,DX( i, j ) - end do - end do - - varname='ETA1' - write(6,*) 'call getVariable for : ', VarName - call getVariable(fileName,DateStr,DataHandle,VarName,ETA1, & - LM,1,1,1,LM,1,1,1) - - varname='ETA2' - write(6,*) 'call getVariable for : ', VarName - call getVariable(fileName,DateStr,DataHandle,VarName,ETA2, & - LM,1,1,1,LM,1,1,1) - - open(75,file='ETAPROFILE.txt',form='formatted',status='unknown') - DO L=1,lm+1 - IF(L == 1)THEN - write(75,1020)L, 0., 0. - ELSE - write(75,1020)L, ETA1(lm+2-l), ETA2(lm+2-l) - END IF -! print*,'L, ETA1, ETA2= ',L, ETA1(l), ETA2(l) - END DO - 1020 format(I3,2E17.10) - close (75) - -! physics calling frequency - VarName='NPHS0' - call getIVariableN(fileName,DateStr,DataHandle,VarName,NPHS, & - 1,1,1,1,1,1,1,1) - print*,'NPHS= ',NPHS -! physics calling frequency - VarName='NCLOD' - call getIVariableN(fileName,DateStr,DataHandle,VarName,NCLOD, & - 1,1,1,1,1,1,1,1) - -! physics calling frequency - VarName='NPREC' - call getIVariableN(fileName,DateStr,DataHandle,VarName,NPREC, & - 1,1,1,1,1,1,1,1) - -! physics calling frequency - VarName='NHEAT' - call getIVariableN(fileName,DateStr,DataHandle,VarName,NHEAT, & - 1,1,1,1,1,1,1,1) - print*,'NHEAT= ',NHEAT - - ! Compute f_* arrays from q* arrays - if(imp_physics==15) then - print *,'Convert from Q arrays to F arrays for advected Ferrier.' - call etamp_q2f(QRIMEF,QQI,QQR,QQW,CWM,F_RAIN,F_ICE,F_RIMEF,T) - endif -! -! ncdump -h - -!! -!! -!! - write(6,*) 'filename in INITPOST=', filename,' is' - -! status=nf_open(filename,NF_NOWRITE,ncid) -! write(6,*) 'returned ncid= ', ncid -! status=nf_get_att_real(ncid,varid,'DX',tmp) -! dxval=int(tmp) -! status=nf_get_att_real(ncid,varid,'DY',tmp) -! dyval=int(tmp) -! status=nf_get_att_real(ncid,varid,'CEN_LAT',tmp) -! cenlat=int(1000.*tmp) -! status=nf_get_att_real(ncid,varid,'CEN_LON',tmp) -! cenlon=int(1000.*tmp) -! status=nf_get_att_real(ncid,varid,'TRUELAT1',tmp) -! truelat1=int(1000.*tmp) -! status=nf_get_att_real(ncid,varid,'TRUELAT2',tmp) -! truelat2=int(1000.*tmp) -! status=nf_get_att_real(ncid,varid,'MAP_PROJ',tmp) -! maptype=int(tmp) -! status=nf_close(ncid) - -! dxval=30000. -! dyval=30000. -! -! write(6,*) 'dxval= ', dxval -! write(6,*) 'dyval= ', dyval -! write(6,*) 'cenlat= ', cenlat -! write(6,*) 'cenlon= ', cenlon -! write(6,*) 'truelat1= ', truelat1 -! write(6,*) 'truelat2= ', truelat2 -! write(6,*) 'maptype is ', maptype -! - call ext_ncd_get_dom_ti_real(DataHandle,'DX',tmp, & - 1,ioutcount,istatus) - dxval=nint(tmp*1000.) ! E-grid dlamda in degree - write(6,*) 'dxval= ', dxval - - call ext_ncd_get_dom_ti_real(DataHandle,'DY',tmp, & - 1,ioutcount,istatus) - dyval=nint(tmp*1000.) - write(6,*) 'dyval= ', dyval - - call ext_ncd_get_dom_ti_real(DataHandle,'CEN_LAT',tmp, & - 1,ioutcount,istatus) - cenlat=nint(tmp*1000.) ! E-grid dlamda in degree - write(6,*) 'cenlat= ', cenlat - - call ext_ncd_get_dom_ti_real(DataHandle,'CEN_LON',tmp, & - 1,ioutcount,istatus) - cenlon=nint(tmp*1000.) ! E-grid dlamda in degree - write(6,*) 'cenlon= ', cenlon - -! JW call ext_ncd_get_dom_ti_real(DataHandle,'TRUELAT1',tmp -! JW + ,1,ioutcount,istatus) -! JW truelat1=nint(1000.*tmp) -! JW write(6,*) 'truelat1= ', truelat1 -! JW call ext_ncd_get_dom_ti_real(DataHandle,'TRUELAT2',tmp -! JW + ,1,ioutcount,istatus) -! JW truelat2=nint(1000.*tmp) -! JW write(6,*) 'truelat2= ', truelat2 - call ext_ncd_get_dom_ti_integer(DataHandle,'MAP_PROJ',itmp, & - 1,ioutcount,istatus) - maptype=itmp - gridtype = 'E' - write(6,*) 'maptype, gridtype ', maptype, gridtype - gridtype='E' - - call ext_ncd_get_dom_ti_integer(DataHandle,'I_PARENT_START',itmp, & - 1,ioutcount,istatus) - i_parent_start=itmp - - call ext_ncd_get_dom_ti_integer(DataHandle,'J_PARENT_START',itmp, & - 1,ioutcount,istatus) - j_parent_start=itmp - - do j = jsta_2l, jend_2u - do i = 1, im -! DX ( i, j ) = dxval - DY ( i, j ) = dyval*DTR*ERAD*0.001 - end do - end do - -! generate look up table for lifted parcel calculations - - THL=210. - PLQ=70000. - - CALL TABLE(PTBL,TTBL,PT, & - RDQ,RDTH,RDP,RDTHE,PL,THL,QS0,SQS,STHE,THE0) - - CALL TABLEQ(TTBLQ,RDPQ,RDTHEQ,PLQ,THL,STHEQ,THE0Q) - -! -! - IF(ME==0)THEN - WRITE(6,*)' SPL (POSTED PRESSURE LEVELS) BELOW: ' - WRITE(6,51) (SPL(L),L=1,LSM) - 50 FORMAT(14(F4.1,1X)) - 51 FORMAT(8(F8.1,1X)) - ENDIF -! -! COMPUTE DERIVED TIME STEPPING CONSTANTS. -! - call ext_ncd_get_dom_ti_real(DataHandle,'DT',tmp, & - 1,ioutcount,istatus) - DT=tmp - print*,'DT= ',DT - DTQ2 = DT * NPHS - TSPH = 3600./DT - - TSRFC=float(NSRFC)/TSPH - IF(NSRFC==0)TSRFC=float(ifhr) !in case buket does not get emptied - TRDLW=float(NRDLW)/TSPH - IF(NRDLW==0)TRDLW=float(ifhr) !in case buket does not get emptied - TRDSW=float(NRDSW)/TSPH - IF(NRDSW==0)TRDSW=float(ifhr) !in case buket does not get emptied - THEAT=float(NHEAT)/TSPH - IF(NHEAT==0)THEAT=float(ifhr) !in case buket does not get emptied - TCLOD=float(NCLOD)/TSPH - IF(NCLOD==0)TCLOD=float(ifhr) !in case buket does not get emptied - TPREC=float(NPREC)/TSPH - IF(NPREC==0)TPREC=float(ifhr) !in case buket does not get emptied - print*,'TSRFC TRDLW TRDSW= ',TSRFC, TRDLW, TRDSW - -!how am i going to get this information? -! NPREC = INT(TPREC *TSPH+D50) -! NHEAT = INT(THEAT *TSPH+D50) -! NCLOD = INT(TCLOD *TSPH+D50) -! NRDSW = INT(TRDSW *TSPH+D50) -! NRDLW = INT(TRDLW *TSPH+D50) -! NSRFC = INT(TSRFC *TSPH+D50) -!how am i going to get this information? -! -! IF(ME==0)THEN -! WRITE(6,*)' ' -! WRITE(6,*)'DERIVED TIME STEPPING CONSTANTS' -! WRITE(6,*)' NPREC,NHEAT,NSRFC : ',NPREC,NHEAT,NSRFC -! WRITE(6,*)' NCLOD,NRDSW,NRDLW : ',NCLOD,NRDSW,NRDLW -! ENDIF -! -! COMPUTE DERIVED MAP OUTPUT CONSTANTS. - DO L = 1,LSM - ALSL(L) = ALOG(SPL(L)) - END DO -! - if(submodelname == 'NEST') then - print *,'NMM NEST mode: use projection center as projection center' - elseif(submodelname == 'MOAD') then - print *,'NMM MOAD mode: use domain center as projection center' - CENLAT=NINT(DCENLAT*1000) - CENLON=NINT(DCENLON*1000) - elseif(i_parent_start>1 .or. j_parent_start>1) then - print *,'No submodel specified for nested domain. Using projection center as projection center.' - else - print *,'No submodel specified for MOAD. Using domain center as projection center' - endif - - - if(me==0)then - ! write out copygb_gridnav.txt - ! provided by R.Rozumalski - NWS - - inav=10 - - TRUELAT1 = CENLAT - TRUELAT2 = CENLAT - - IFDX = NINT (dxval*107.) - IFDY = NINT (dyval*110.) - - open(inav,file='copygb_gridnav.txt',form='formatted', & - status='unknown') - - print *, ' MAPTYPE :',maptype - print *, ' IM :',IM*2-1 - print *, ' JM :',JM - print *, ' LATSTART :',LATSTART - print *, ' LONSTART :',LONSTART - print *, ' CENLAT :',CENLAT - print *, ' CENLON :',CENLON - print *, ' TRUELAT2 :',TRUELAT2 - print *, ' TRUELAT1 :',TRUELAT1 - print *, ' DX :',IFDX*0.001 - print *, ' DY :',IFDY*0.001 - - IF(MAPTYPE==0 .OR. MAPTYPE==203)THEN !A STAGGERED E-GRID - - IMM = 2*IM-1 - IDXAVE = ( IFDY + IFDX ) * 0.5 - - ! If the Center Latitude of the domain is located within 15 degrees - ! of the equator then use a a regular Lat/Lon navigation for the - ! remapped grid in copygb; otherwise, use a Lambert conformal. Make - ! sure to specify the correct pole for the S. Hemisphere (LCC). - ! - IF ( abs(CENLAT)>15000) THEN - write(6,*)' Copygb LCC Navigation Information' - IF (CENLAT >0) THEN ! Northern Hemisphere - write(6,1000) IMM,JM,LATSTART,LONSTART,CENLON, & - IFDX,IFDY,CENLAT,CENLAT - write(inav,1000) IMM,JM,LATSTART,LONSTART,CENLON, & - IFDX,IFDY,CENLAT,CENLAT - ELSE ! Southern Hemisphere - write(6,1001) IMM,JM,LATSTART,LONSTART,CENLON, & - IFDX,IFDY,CENLAT,CENLAT - write(inav,1001) IMM,JM,LATSTART,LONSTART,CENLON, & - IFDX,IFDY,CENLAT,CENLAT - END IF - ELSE - dlat = (latnm-latsm)/(JM-1) - nlat = INT (dlat) - - if (lonem < 0) lonem = 360000. + lonem - if (lonwm < 0) lonwm = 360000. + lonwm - - dlon = lonem-lonwm - if (dlon < 0.) dlon = dlon + 360000. - dlon = (dlon)/(IMM-1) - nlon = INT (dlon) - - write(6,*)' Copygb Lat/Lon Navigation Information' - write(6,2000) IMM,JM,latsm,lonwm,latnm,lonem,nlon,nlat - write(inav,2000) IMM,JM,latsm,lonwm,latnm,lonem,nlon,nlat - ENDIF - close(inav) - - 1000 format('255 3 ',2(I3,x),I6,x,I7,x,'8 ',I7,x,2(I6,x),'0 64', & - 2(x,I6)) - 1001 format('255 3 ',2(I3,x),I6,x,I7,x,'8 ',I7,x,2(I6,x),'128 64', & - 2(x,I6),' -90000 0') - 2000 format('255 0 ',2(I3,x),2(I7,x),'8 ',2(I7,x),2(I7,x),'64') - END IF ! maptype - - !HC WRITE IGDS OUT FOR WEIGHTMAKER TO READ IN AS KGDSIN - igdout=110 - if (maptype == 1)THEN ! Lambert conformal - WRITE(igdout)3 - WRITE(6,*)'igd(1)=',3 - WRITE(igdout)im - WRITE(igdout)jm - WRITE(igdout)LATSTART - WRITE(igdout)LONSTART - WRITE(igdout)8 - WRITE(igdout)CENLON - WRITE(igdout)DXVAL - WRITE(igdout)DYVAL - WRITE(igdout)0 - WRITE(igdout)64 -! JW WRITE(igdout)TRUELAT2 -! JW WRITE(igdout)TRUELAT1 - WRITE(igdout)255 - ELSE IF(MAPTYPE == 2)THEN !Polar stereographic - WRITE(igdout)5 - WRITE(igdout)im - WRITE(igdout)jm - WRITE(igdout)LATSTART - WRITE(igdout)LONSTART - WRITE(igdout)8 - WRITE(igdout)CENLON - WRITE(igdout)DXVAL - WRITE(igdout)DYVAL - WRITE(igdout)0 - WRITE(igdout)64 -! JW WRITE(igdout)TRUELAT2 !Assume projection at +-90 -! JW WRITE(igdout)TRUELAT1 - WRITE(igdout)255 - ! Note: The calculation of the map scale factor at the standard - ! lat/lon and the PSMAPF - ! Get map factor at 60 degrees (N or S) for PS projection, which will - ! be needed to correctly define the DX and DY values in the GRIB GDS - if (TRUELAT1 < 0.) THEN - LAT = -60. - else - LAT = 60. - end if - - CALL MSFPS (LAT,TRUELAT1*0.001,PSMAPF) - - ELSE IF(MAPTYPE == 3)THEN !Mercator - WRITE(igdout)1 - WRITE(igdout)im - WRITE(igdout)jm - WRITE(igdout)LATSTART - WRITE(igdout)LONSTART - WRITE(igdout)8 - WRITE(igdout)latlast - WRITE(igdout)lonlast -! JW WRITE(igdout)TRUELAT1 - WRITE(igdout)0 - WRITE(igdout)64 - WRITE(igdout)DXVAL - WRITE(igdout)DYVAL - WRITE(igdout)255 - ELSE IF(MAPTYPE==0 .OR. MAPTYPE==203)THEN !A STAGGERED E-GRID - WRITE(igdout)203 - WRITE(igdout)im - WRITE(igdout)jm - WRITE(igdout)LATSTART - WRITE(igdout)LONSTART - WRITE(igdout)136 - WRITE(igdout)CENLAT - WRITE(igdout)CENLON - WRITE(igdout)DXVAL - WRITE(igdout)DYVAL - WRITE(igdout)64 - WRITE(igdout)0 - WRITE(igdout)0 - WRITE(igdout)0 - -! following for hurricane wrf post - open(inav,file='copygb_hwrf.txt',form='formatted', & - status='unknown') - LATEND=LATSTART+(JM-1)*dyval - LONEND=LONSTART+(IMM-1)*dxval - write(10,1010) IMM,JM,LATSTART,LONSTART,LATEND,LONEND, & - dxval,dyval - -1010 format('255 0 ',2(I3,x),I6,x,I7,x,'136 ',I6,x,I7,x, & - 2(I6,x),'64') - close (inav) - - END IF - end if -! -! -! close up shop - call ext_ncd_ioclose ( DataHandle, Status ) - - RETURN - END diff --git a/sorc/ncep_post.fd/LFMFLD.f b/sorc/ncep_post.fd/LFMFLD.f index a5d83919b..9aeefc635 100644 --- a/sorc/ncep_post.fd/LFMFLD.f +++ b/sorc/ncep_post.fd/LFMFLD.f @@ -1,71 +1,46 @@ !> @file -! . . . -!> SUBPROGRAM: LFMFLD COMPUTES LAYER MEAN LFM FIELDS -!! PRGRMMR: TREADON ORG: W/NP2 DATE: 92-12-22 -!! -!! ABSTRACT: -!! THIS ROUTINE COMPUTES THREE LAYER MEAN RELATIVE HUMIDITIES -!! AND A PRECIPITABLE WATER FIELD FROM ETA LEVEL DATA. THE -!! COMPUTED FIELDS ARE INTENDED TO MIMIC SIMILAR FIELDS COM- -!! PUTED BY THE LFM. THE ALGORITHM USED HERE IS FAIRLY PRI- -!! MATIVE. IN EACH COLUMN ABOVE A MASS POINT ON THE ETA GRID -!! WE SET THE FOLLOWING TARGET PRESSURES: -!! SIGMA LAYER 1.00 PRESSURE: SURFACE PRESSURE -!! SIGMA LAYER 0.66 PRESSURE: 0.50 * SURFACE PRESSURE -!! SIGMA LAYER 0.33 PRESSURE: 0.4356 * SURFACE PRESSURE -!! GIVEN THESE PRESSURES A SURFACE UP SUMMATION IS MADE OF -!! RELATIVE HUMIDITY AND/OR PRECIPITABLE WATER BETWEEN THESE -!! TARGET PRESSURES. EACH TERM IN THE SUMMATION IS WEIGHTED -!! BY THE THICKNESS OF THE ETA LAYER. THE FINAL LAYER MEAN -!! IS THIS SUM NORMALIZED BY THE TOTAL DEPTH OF THE LAYER. -!! THERE IS, OBVIOUSLY, NO NORMALIZATION FOR PRECIPITABLE WATER. -!! -!! -!! PROGRAM HISTORY LOG: -!! 92-12-22 RUSS TREADON -!! 93-07-27 RUSS TREADON - MODIFIED SUMMATION LIMITS FROM -!! 0.66*PSFC TO 0.75*PSFC AND 0.33*PSFC -!! TO 0.50*PSFC, WHERE PSFC IS THE -!! SURFACES PRESSURE. THE REASON FOR -!! THIS CHANGE WAS RECOGNITION THAT IN -!! THE LFM 0.33 AND 0.66 WERE MEASURED -!! FROM THE SURFACE TO THE TROPOPAUSE, -!! NOT THE TOP OF THE MODEL. -!! 93-09-13 RUSS TREADON - RH CALCULATIONS WERE MADE INTERNAL -!! TO THE ROUTINE. -!! 96-03-04 MIKE BALDWIN - CHANGE PW CALC TO INCLUDE CLD WTR -!! 98-06-16 T BLACK - CONVERSION FROM 1-D TO 2-D -!! 98-08-17 MIKE BALDWIN - COMPUTE RH OVER ICE -!! 98-12-22 MIKE BALDWIN - BACK OUT RH OVER ICE -!! 00-01-04 JIM TUCCILLO - MPI VERSION -!! 02-04-24 MIKE BALDWIN - WRF VERSION -!! 19-10-30 Bo CUI - REMOVE "GOTO" STATEMENT -!! 20-11-10 JESSE MENG - USE UPP_PHYSICS MODULE -!! -!! -!! USAGE: CALL LFMFLD(RH3310,RH6610,RH3366,PW3310) -!! INPUT ARGUMENT LIST: -!! NONE -!! -!! OUTPUT ARGUMENT LIST: -!! RH3310 - SIGMA LAYER 0.33-1.00 MEAN RELATIVE HUMIDITY. -!! RH6610 - SIGMA LAYER 0.66-1.00 MEAN RELATIVE HUMIDITY. -!! RH3366 - SIGMA LAYER 0.33-0.66 MEAN RELATIVE HUMIDITY. -!! PW3310 - SIGMA LAYER 0.33-1.00 PRECIPITABLE WATER. -!! -!! OUTPUT FILES: -!! NONE -!! -!! LIBRARY: -!! COMMON - -!! MAPOT -!! LOOPS -!! OPTIONS -!! -!! ATTRIBUTES: -!! LANGUAGE: FORTRAN -!! MACHINE : CRAY C-90 -!! +!> @brief lfmfld() computes layer mean LFM fields. +!> +!> This routine computes three layer mean relative humidities +!> and a precipitable water field from ETA level data. The +!> computed fields are intended to mimic similar fields com- +!> puted by the LFM. The algorithm used here is fairly pri- +!> mative. +!>
+!> In each column above a mass point on the ETA grid we set the following target pressures:
+!>     Sigma layer 1.00 pressure:  Surface pressure
+!>     Sigma layer 0.66 pressure:  0.50 * Surface pressure
+!>     Sigma layer 0.33 pressure:  0.4356 * Surface pressure
+!> 
+!> Given there pressures a surface up summation is made of +!> relative humidity and/or precipitable water between these +!> target pressures. Each term in the summation is weighted +!> By the thickness of the ETA layer. The final layer mean +!> is this sum normalized by the total depth of the layer. +!> There is, obviously, no normalization for precipitable water. +!> +!> @param[out] RH3310 Sigma layer 0.33-1.00 mean relative humidity. +!> @param[out] RH6610 Sigma layer 0.66-1.00 mean relative humidity. +!> @param[out] RH3366 Sigma layer 0.33-0.66 mean relative humidity. +!> @param[out] PW3310 Sigma layer 0.33-1.00 precipitable water. +!> +!> ### Program History Log +!> Date | Programmer | Comments +!> -----|------------|--------- +!> 1992-12-22 | Russ Treadon | Initial +!> 1993-07-27 | Russ Treadon | Modified summation limits from 0.66*PSFC to 0.75*PSFC and 0.33*PSFC to 0.50*PSFC, where PSFC is the surfaces pressure. The reason for this change was recognition that in the LFM 0.33 and 0.66 were measured from the surface to the tropopause not the top of the model. +!> 1993-09-13 | Russ Treadon | RH calculations were made internal to the routine. +!> 1996-03-04 | Mike Baldwin | Change PW CALC to include CLD WTR +!> 1998-06-16 | T Black | Conversion from 1-D to 2-D +!> 1998-08-17 | Mike Baldwin | Compute RH over ice +!> 1998-12-22 | Mike Baldwin | Back out RH over ice +!> 2000-01-04 | Jim Tuccillo | MPI Version +!> 2002-04-24 | Mike Baldwin | WRF Version +!> 2019-10-30 | Bo Cui | Remove "GOTO" statement +!> 2020-11-10 | Jesse Meng | Use UPP_PHYSICS Module +!> 2021-10-14 | JESSE MENG | 2D DECOMPOSITION +!> +!> @author Russ Treadon W/NP2 @date 1992-12-22 SUBROUTINE LFMFLD(RH3310,RH6610,RH3366,PW3310) ! @@ -73,7 +48,7 @@ SUBROUTINE LFMFLD(RH3310,RH6610,RH3366,PW3310) use vrbls3d, only: pint, alpint, zint, t, q, cwm use masks, only: lmh use params_mod, only: d00, d50, pq0, a2, a3, a4, h1, d01, gi - use ctlblk_mod, only: jsta, jend, modelname, spval, im + use ctlblk_mod, only: jsta, jend, modelname, spval, im, ista, iend use physcons_post, only: con_rd, con_rv, con_eps, con_epsm1 use upp_physics, only: FPVSNEW @@ -86,8 +61,8 @@ SUBROUTINE LFMFLD(RH3310,RH6610,RH3366,PW3310) ! DECLARE VARIABLES. ! REAL ALPM, DZ, ES, PM, PWSUM, QM, QS, TM, DP, RH - REAL,dimension(IM,jsta:jend),intent(inout) :: RH3310, RH6610, RH3366 - REAL,dimension(IM,jsta:jend),intent(inout) :: PW3310 + REAL,dimension(ista:iend,jsta:jend),intent(inout) :: RH3310, RH6610, RH3366 + REAL,dimension(ista:iend,jsta:jend),intent(inout) :: PW3310 real Z3310,Z6610,Z3366,P10,P33,P66 integer I,J,L,LLMH ! @@ -98,7 +73,7 @@ SUBROUTINE LFMFLD(RH3310,RH6610,RH3366,PW3310) ! LOOP OVER HORIZONTAL GRID. ! DO 30 J=JSTA,JEND - DO 30 I=1,IM + DO 30 I=ISTA,IEND ! ! ZERO VARIABLES. RH3310(I,J) = D00 diff --git a/sorc/ncep_post.fd/LFMFLD_GFS.f b/sorc/ncep_post.fd/LFMFLD_GFS.f index e89436e39..70ee6e438 100644 --- a/sorc/ncep_post.fd/LFMFLD_GFS.f +++ b/sorc/ncep_post.fd/LFMFLD_GFS.f @@ -1,74 +1,47 @@ !> @file -! . . . -!> SUBPROGRAM: LFMFLD COMPUTES LAYER MEAN LFM FIELDS -!! PRGRMMR: TREADON ORG: W/NP2 DATE: 92-12-22 -!! -!! ABSTRACT: -!! THIS ROUTINE COMPUTES THREE LAYER MEAN RELATIVE HUMIDITIES -!! AND A PRECIPITABLE WATER FIELD FROM ETA LEVEL DATA. THE -!! COMPUTED FIELDS ARE INTENDED TO MIMIC SIMILAR FIELDS COM- -!! PUTED BY THE LFM. THE ALGORITHM USED HERE IS FAIRLY PRI- -!! MATIVE. IN EACH COLUMN ABOVE A MASS POINT ON THE ETA GRID -!! WE SET THE FOLLOWING TARGET PRESSURES: -!! SIGMA LAYER 1.00 PRESSURE: SURFACE PRESSURE -!! SIGMA LAYER 0.66 PRESSURE: 0.50 * SURFACE PRESSURE -!! SIGMA LAYER 0.33 PRESSURE: 0.4356 * SURFACE PRESSURE -!! GIVEN THESE PRESSURES A SURFACE UP SUMMATION IS MADE OF -!! RELATIVE HUMIDITY AND/OR PRECIPITABLE WATER BETWEEN THESE -!! TARGET PRESSURES. EACH TERM IN THE SUMMATION IS WEIGHTED -!! BY THE THICKNESS OF THE ETA LAYER. THE FINAL LAYER MEAN -!! IS THIS SUM NORMALIZED BY THE TOTAL DEPTH OF THE LAYER. -!! THERE IS, OBVIOUSLY, NO NORMALIZATION FOR PRECIPITABLE WATER. -!! -!! -!! PROGRAM HISTORY LOG: -!! 92-12-22 RUSS TREADON -!! 93-07-27 RUSS TREADON - MODIFIED SUMMATION LIMITS FROM -!! 0.66*PSFC TO 0.75*PSFC AND 0.33*PSFC -!! TO 0.50*PSFC, WHERE PSFC IS THE -!! SURFACES PRESSURE. THE REASON FOR -!! THIS CHANGE WAS RECOGNITION THAT IN -!! THE LFM 0.33 AND 0.66 WERE MEASURED -!! FROM THE SURFACE TO THE TROPOPAUSE, -!! NOT THE TOP OF THE MODEL. -!! 93-09-13 RUSS TREADON - RH CALCULATIONS WERE MADE INTERNAL -!! TO THE ROUTINE. -!! 96-03-04 MIKE BALDWIN - CHANGE PW CALC TO INCLUDE CLD WTR -!! 98-06-16 T BLACK - CONVERSION FROM 1-D TO 2-D -!! 98-08-17 MIKE BALDWIN - COMPUTE RH OVER ICE -!! 98-12-22 MIKE BALDWIN - BACK OUT RH OVER ICE -!! 00-01-04 JIM TUCCILLO - MPI VERSION -!! 02-04-24 MIKE BALDWIN - WRF VERSION -!! 06-11-06 H CHUANG - MODIFY TO OUTPUT GFS LFM FIELDS WHICH -!! HAVE DIFFERENT THICKNESS AS MESO AND USE DP -!! RATHER THAN DZ -!! 19-10-30 Bo CUI - REMOVE "GOTO" STATEMENT -!! 20-11-10 JESSE MENG - USE UPP_PHYSICS MODULE -!! -!! -!! USAGE: CALL LFMFLD(RH3310,RH6610,RH3366,PW3310) -!! INPUT ARGUMENT LIST: -!! NONE -!! -!! OUTPUT ARGUMENT LIST: -!! RH3310 - SIGMA LAYER 0.33-1.00 MEAN RELATIVE HUMIDITY. -!! RH6610 - SIGMA LAYER 0.66-1.00 MEAN RELATIVE HUMIDITY. -!! RH3366 - SIGMA LAYER 0.33-0.66 MEAN RELATIVE HUMIDITY. -!! PW3310 - SIGMA LAYER 0.33-1.00 PRECIPITABLE WATER. -!! -!! OUTPUT FILES: -!! NONE -!! -!! LIBRARY: -!! COMMON - -!! MAPOT -!! LOOPS -!! OPTIONS -!! -!! ATTRIBUTES: -!! LANGUAGE: FORTRAN -!! MACHINE : CRAY C-90 -!! +!> @brief lfmfld_gfs() computes layer mean LFM fields. +!> +!> This routine computes three layer mean relative humidities +!> and a precipitable water field from ETA level data. The +!> computed fields are intended to mimic similar fields com- +!> puted by the LFM. The algorithm used here is fairly pri- +!> mative. +!>
+!> In each column above a mass point on the ETA grid we set the following target pressures:
+!>     Sigma layer 1.00 pressure:  Surface pressure
+!>     Sigma layer 0.66 pressure:  0.50 * Surface pressure
+!>     Sigma layer 0.33 pressure:  0.4356 * Surface pressure
+!> 
+!> Given there pressures a surface up summation is made of +!> relative humidity and/or precipitable water between these +!> target pressures. Each term in the summation is weighted +!> By the thickness of the ETA layer. The final layer mean +!> is this sum normalized by the total depth of the layer. +!> There is, obviously, no normalization for precipitable water. +!> +!> @param[out] RH3310 Sigma layer 0.33-1.00 mean relative humidity. +!> @param[out] RH6610 Sigma layer 0.66-1.00 mean relative humidity. +!> @param[out] RH3366 Sigma layer 0.33-0.66 mean relative humidity. +!> @param[out] PW3310 Sigma layer 0.33-1.00 precipitable water. +!> +!> ### Program History Log +!> Date | Programmer | Comments +!> -----|------------|--------- +!> 1992-12-22 | Russ Treadon | Initial +!> 1993-07-27 | Russ Treadon | Modified summation limits from 0.66*PSFC to 0.75*PSFC and 0.33*PSFC to 0.50*PSFC, where PSFC is the surfaces pressure. The reason for this change was recognition that in the LFM 0.33 and 0.66 were measured from the surface to the tropopause not the top of the model. +!> 1993-09-13 | Russ Treadon | RH calculations were made internal to the routine. +!> 1996-03-04 | Mike Baldwin | Change PW CALC to include CLD WTR +!> 1998-06-16 | T Black | Conversion from 1-D to 2-D +!> 1998-08-17 | Mike Baldwin | Compute RH over ice +!> 1998-12-22 | Mike Baldwin | Back out RH over ice +!> 2000-01-04 | Jim Tuccillo | MPI Version +!> 2002-04-24 | Mike Baldwin | WRF Version +!> 2006-11-06 | H CHUANG | Modify to output GFS LFM fields which have different thickness as MESO and use DP rather than DZ +!> 2019-10-30 | Bo Cui | Remove "GOTO" statement +!> 2020-11-10 | Jesse Meng | Use UPP_PHYSICS Module +!> 2021-10-14 | JESSE MENG | 2D DECOMPOSITION +!> +!> @author Russ Treadon W/NP2 @date 1992-12-22 SUBROUTINE LFMFLD_GFS(RH4410,RH7294,RH4472,RH3310) ! @@ -76,7 +49,7 @@ SUBROUTINE LFMFLD_GFS(RH4410,RH7294,RH4472,RH3310) use vrbls3d, only: pint, q, t, pmid use masks, only: lmh use params_mod, only: d00 - use ctlblk_mod, only: jsta, jend, spval, im + use ctlblk_mod, only: jsta, jend, spval, im, ista, iend use upp_physics, only: FPVSNEW ! implicit none @@ -92,7 +65,7 @@ SUBROUTINE LFMFLD_GFS(RH4410,RH7294,RH4472,RH3310) ! DECLARE VARIABLES. ! REAL ALPM, DZ, ES, PM, PWSUM, QM, QS - REAL,dimension(IM,jsta:jend),intent(out) :: RH4410, RH7294, RH4472 & + REAL,dimension(ista:iend,jsta:jend),intent(out) :: RH4410, RH7294, RH4472 & ,RH3310 ! integer I,J,L,LLMH @@ -106,7 +79,7 @@ SUBROUTINE LFMFLD_GFS(RH4410,RH7294,RH4472,RH3310) ! LOOP OVER HORIZONTAL GRID. ! DO 30 J=JSTA,JEND - DO 30 I=1,IM + DO 30 I=ISTA,IEND ! ! ZERO VARIABLES. RH4410(I,J) = D00 diff --git a/sorc/ncep_post.fd/MAPSSLP.f b/sorc/ncep_post.fd/MAPSSLP.f index 3b0728a8f..5d1ca0125 100644 --- a/sorc/ncep_post.fd/MAPSSLP.f +++ b/sorc/ncep_post.fd/MAPSSLP.f @@ -10,7 +10,8 @@ SUBROUTINE MAPSSLP(TPRES) ! !----------------------------------------------------------------------- use ctlblk_mod, only: jsta, jend, spl, smflag, lm, im, jsta_2l, jend_2u, & - lsm, jm, grib, spval + lsm, jm, grib, spval, & + ista, iend, ista_2l, iend_2u use gridspec_mod, only: maptype, dxval use vrbls3d, only: pmid, t, pint use vrbls2d, only: pslp, fis @@ -21,11 +22,11 @@ SUBROUTINE MAPSSLP(TPRES) ! INCLUDE "mpif.h" ! - REAL TPRES(IM,JSTA_2L:JEND_2U,LSM) + REAL TPRES(ISTA_2L:IEND_2U,JSTA_2L:JEND_2U,LSM) real LAPSES, EXPo,EXPINV,TSFCNEW - REAL,dimension(im, jsta_2l:jend_2u) :: T700 + REAL,dimension(ista_2l:iend_2u, jsta_2l:jend_2u) :: T700 real,dimension(im,2) :: sdummy REAL,dimension(im,jm) :: GRID1, TH700 INTEGER NSMOOTH @@ -42,13 +43,15 @@ SUBROUTINE MAPSSLP(TPRES) !$omp parallel do private(i,j) DO J=JSTA,JEND - DO I=1,IM - if(SPL(L) == 70000. .and. TPRES(I,J,L) 100.) THEN @@ -110,7 +113,7 @@ SUBROUTINE MAPSSLP(TPRES) CALL SMOOTH(GRID1,SDUMMY,IM,JM,0.5) end do DO J=JSTA,JEND - DO I=1,IM + DO I=ISTA,IEND PSLP(I,J)=GRID1(I,J) ENDDO ENDDO diff --git a/sorc/ncep_post.fd/MDL2AGL.f b/sorc/ncep_post.fd/MDL2AGL.f index 8847fc148..55d97b07c 100644 --- a/sorc/ncep_post.fd/MDL2AGL.f +++ b/sorc/ncep_post.fd/MDL2AGL.f @@ -15,6 +15,8 @@ !! 20-03-25 J MENG - remove grib1 !! 21-03-11 B Cui - change local arrays to dimension (im,jsta:jend) !! 21-04-01 J MENG - computation on defined points only +!! 21-07-26 W Meng - Restrict computation from undefined grids +!! 21-10-14 J MENG - 2D DECOMPOSITION !! !! USAGE: CALL MDL2P !! INPUT ARGUMENT LIST: @@ -60,7 +62,8 @@ SUBROUTINE MDL2AGL use params_mod, only: dbzmin, small, eps, rd use ctlblk_mod, only: spval, lm, modelname, grib, cfld, fld_info, datapd,& ifhr, global, jsta_m, jend_m, mpi_comm_comp, & - jsta_2l, jend_2u, im, jm, jsta, jend, imp_physics + jsta_2l, jend_2u, im, jm, jsta, jend, imp_physics, & + ista, iend, ista_2l, iend_2u, ista_m, iend_m use rqstfld_mod, only: iget, lvls, iavblfld, lvlsxml, id use gridspec_mod, only: gridtype !- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - @@ -76,10 +79,10 @@ SUBROUTINE MDL2AGL ! DECLARE VARIABLES. ! LOGICAL IOOMG,IOALL - REAL,dimension(im,jsta_2l:jend_2u) :: grid1 - REAL,dimension(im,jsta_2l:jend_2u) :: UAGL, VAGL, tagl, pagl, qagl + REAL,dimension(ista_2l:iend_2u,jsta_2l:jend_2u) :: grid1 + REAL,dimension(ista_2l:iend_2u,jsta_2l:jend_2u) :: UAGL, VAGL, tagl, pagl, qagl ! - INTEGER,dimension(im,jsta_2l:jend_2u) :: NL1X + INTEGER,dimension(ista_2l:iend_2u,jsta_2l:jend_2u) :: NL1X integer,dimension(jm) :: IHE, IHW INTEGER LXXX,IERR, maxll, minll INTEGER ISTART,ISTOP,JSTART,JSTOP @@ -99,7 +102,7 @@ SUBROUTINE MDL2AGL ! ! REAL C1D(IM,JM),QW1(IM,JM),QI1(IM,JM),QR1(IM,JM) ! &, QS1(IM,JM) ,DBZ1(IM,JM) - REAL,dimension(im,jsta:jend) :: DBZ1, DBZR1, DBZI1, DBZC1, dbz1log + REAL,dimension(ista:iend,jsta:jend) :: DBZ1, DBZR1, DBZI1, DBZC1, dbz1log real,dimension(lagl) :: ZAGL real,dimension(lagl2) :: ZAGL2, ZAGL3 real PAGLU,PAGLL,TAGLU,TAGLL,QAGLU,QAGLL, pv, rho @@ -148,10 +151,10 @@ SUBROUTINE MDL2AGL IF (iget1 > 0 .or. iget2 > 0 .or. iget3 > 0 .or. iget4 > 0) then ! jj=float(jsta+jend)/2.0 - ii=float(im)/3.0 + ii=float(ista+iend)/3.0 DO J=JSTA,JEND - DO I=1,IM + DO I=ISTA,IEND DBZ1(I,J) = SPVAL DBZR1(I,J) = SPVAL DBZI1(I,J) = SPVAL @@ -194,7 +197,7 @@ SUBROUTINE MDL2AGL ! DO 220 J=JSTA,JEND DO J=JSTA,JEND - DO I=1,IM + DO I=ISTA,IEND LL = NL1X(I,J) !--------------------------------------------------------------------- !*** VERTICAL INTERPOLATION OF GEOPOTENTIAL, TEMPERATURE, SPECIFIC @@ -204,6 +207,7 @@ SUBROUTINE MDL2AGL !HC IF(NL1X(I,J)<=LM)THEN LLMH = NINT(LMH(I,J)) IF(NL1X(I,J)<=LLMH)THEN + IF(ZMID(I,J,LL)0) )THEN if(MODELNAME=='RAPR') then DO J=JSTA,JEND - DO I=1,IM + DO I=ISTA,IEND GRID1(I,J)=DBZ1LOG(I,J) ENDDO ENDDO else DO J=JSTA,JEND - DO I=1,IM + DO I=ISTA,IEND GRID1(I,J)=DBZ1(I,J) ENDDO ENDDO @@ -292,13 +298,13 @@ SUBROUTINE MDL2AGL cfld=cfld+1 fld_info(cfld)%ifld=IAVBLFLD(IGET(253)) fld_info(cfld)%lvl=LVLSXML(LP,IGET(253)) - datapd(1:im,1:jend-jsta+1,cfld)=GRID1(1:im,jsta:jend) + datapd(1:iend-ista+1,1:jend-jsta+1,cfld)=GRID1(ista:iend,jsta:jend) endif END IF !--- Radar reflectivity from rain IF((IGET(279)>0) )THEN DO J=JSTA,JEND - DO I=1,IM + DO I=ISTA,IEND GRID1(I,J)=DBZR1(I,J) ENDDO ENDDO @@ -306,13 +312,13 @@ SUBROUTINE MDL2AGL cfld=cfld+1 fld_info(cfld)%ifld=IAVBLFLD(IGET(279)) fld_info(cfld)%lvl=LVLSXML(LP,IGET(279)) - datapd(1:im,1:jend-jsta+1,cfld)=GRID1(1:im,jsta:jend) + datapd(1:iend-ista+1,1:jend-jsta+1,cfld)=GRID1(ista:iend,jsta:jend) endif END IF !--- Radar reflectivity from all ice habits (snow + graupel + sleet, etc.) IF((IGET(280)>0) )THEN DO J=JSTA,JEND - DO I=1,IM + DO I=ISTA,IEND GRID1(I,J)=DBZI1(I,J) ENDDO ENDDO @@ -320,13 +326,13 @@ SUBROUTINE MDL2AGL cfld=cfld+1 fld_info(cfld)%ifld=IAVBLFLD(IGET(280)) fld_info(cfld)%lvl=LVLSXML(LP,IGET(280)) - datapd(1:im,1:jend-jsta+1,cfld)=GRID1(1:im,jsta:jend) + datapd(1:iend-ista+1,1:jend-jsta+1,cfld)=GRID1(ista:iend,jsta:jend) endif END IF !--- Radar reflectivity from parameterized convection IF((IGET(281)>0) )THEN DO J=JSTA,JEND - DO I=1,IM + DO I=ISTA,IEND GRID1(I,J)=DBZC1(I,J) ENDDO ENDDO @@ -334,7 +340,7 @@ SUBROUTINE MDL2AGL cfld=cfld+1 fld_info(cfld)%ifld=IAVBLFLD(IGET(281)) fld_info(cfld)%lvl=LVLSXML(LP,IGET(281)) - datapd(1:im,1:jend-jsta+1,cfld)=GRID1(1:im,jsta:jend) + datapd(1:iend-ista+1,1:jend-jsta+1,cfld)=GRID1(ista:iend,jsta:jend) endif END IF ! @@ -351,7 +357,7 @@ SUBROUTINE MDL2AGL !--- Max Derived Radar Reflectivity IF((IGET(421)>0) )THEN DO J=JSTA,JEND - DO I=1,IM + DO I=ISTA,IEND GRID1(I,J)=REFD_MAX(I,J) ENDDO ENDDO @@ -366,14 +372,14 @@ SUBROUTINE MDL2AGL fld_info(cfld)%tinvstat=0 endif fld_info(cfld)%ntrange=1 - datapd(1:im,1:jend-jsta+1,cfld)=GRID1(1:im,jsta:jend) + datapd(1:iend-ista+1,1:jend-jsta+1,cfld)=GRID1(ista:iend,jsta:jend) endif END IF !--- Max Derived Radar Reflectivity at -10C IF((IGET(785)>0) )THEN DO J=JSTA,JEND - DO I=1,IM + DO I=ISTA,IEND GRID1(I,J)=REFDM10C_MAX(I,J) ENDDO ENDDO @@ -387,14 +393,14 @@ SUBROUTINE MDL2AGL fld_info(cfld)%tinvstat=0 endif fld_info(cfld)%ntrange=1 - datapd(1:im,1:jend-jsta+1,cfld)=GRID1(1:im,jsta:jend) + datapd(1:iend-ista+1,1:jend-jsta+1,cfld)=GRID1(ista:iend,jsta:jend) endif END IF !--- Max Updraft Helicity IF((IGET(420)>0) )THEN DO J=JSTA,JEND - DO I=1,IM + DO I=ISTA,IEND GRID1(I,J)=UP_HELI_MAX(I,J) ENDDO ENDDO @@ -408,14 +414,14 @@ SUBROUTINE MDL2AGL fld_info(cfld)%tinvstat = 0 endif fld_info(cfld)%ntrange = 1 - datapd(1:im,1:jend-jsta+1,cfld) = GRID1(1:im,jsta:jend) + datapd(1:iend-ista+1,1:jend-jsta+1,cfld) = GRID1(ista:iend,jsta:jend) endif END IF !--- Max Updraft Helicity 1-6 km IF((IGET(700)>0) )THEN DO J=JSTA,JEND - DO I=1,IM + DO I=ISTA,IEND GRID1(I,J)=UP_HELI_MAX16(I,J) ENDDO ENDDO @@ -429,14 +435,14 @@ SUBROUTINE MDL2AGL fld_info(cfld)%tinvstat = 1 endif fld_info(cfld)%ntrange = 1 - datapd(1:im,1:jend-jsta+1,cfld) = GRID1(1:im,jsta:jend) + datapd(1:iend-ista+1,1:jend-jsta+1,cfld) = GRID1(ista:iend,jsta:jend) endif END IF !--- Min Updraft Helicity IF((IGET(786)>0) )THEN DO J=JSTA,JEND - DO I=1,IM + DO I=ISTA,IEND GRID1(I,J)=UP_HELI_MIN(I,J) ENDDO ENDDO @@ -450,14 +456,14 @@ SUBROUTINE MDL2AGL fld_info(cfld)%tinvstat = 0 endif fld_info(cfld)%ntrange = 1 - datapd(1:im,1:jend-jsta+1,cfld) = GRID1(1:im,jsta:jend) + datapd(1:iend-ista+1,1:jend-jsta+1,cfld) = GRID1(ista:iend,jsta:jend) endif END IF !--- Min Updraft Helicity 1-6 km IF((IGET(787)>0) )THEN DO J=JSTA,JEND - DO I=1,IM + DO I=ISTA,IEND GRID1(I,J)=UP_HELI_MIN16(I,J) ENDDO ENDDO @@ -471,14 +477,14 @@ SUBROUTINE MDL2AGL fld_info(cfld)%tinvstat = 1 endif fld_info(cfld)%ntrange = 1 - datapd(1:im,1:jend-jsta+1,cfld) = GRID1(1:im,jsta:jend) + datapd(1:iend-ista+1,1:jend-jsta+1,cfld) = GRID1(ista:iend,jsta:jend) endif END IF !--- Max Updraft Helicity 0-2 km IF((IGET(788)>0) )THEN DO J=JSTA,JEND - DO I=1,IM + DO I=ISTA,IEND GRID1(I,J)=UP_HELI_MAX02(I,J) ENDDO ENDDO @@ -492,13 +498,13 @@ SUBROUTINE MDL2AGL fld_info(cfld)%tinvstat = 0 endif fld_info(cfld)%ntrange = 1 - datapd(1:im,1:jend-jsta+1,cfld) = GRID1(1:im,jsta:jend) + datapd(1:iend-ista+1,1:jend-jsta+1,cfld) = GRID1(ista:iend,jsta:jend) endif END IF !--- Min Updraft Helicity 0-2 km IF((IGET(789)>0) )THEN DO J=JSTA,JEND - DO I=1,IM + DO I=ISTA,IEND GRID1(I,J)=UP_HELI_MIN02(I,J) ENDDO ENDDO @@ -512,14 +518,14 @@ SUBROUTINE MDL2AGL fld_info(cfld)%tinvstat = 1 endif fld_info(cfld)%ntrange = 1 - datapd(1:im,1:jend-jsta+1,cfld) = GRID1(1:im,jsta:jend) + datapd(1:iend-ista+1,1:jend-jsta+1,cfld) = GRID1(ista:iend,jsta:jend) endif END IF !--- Max Updraft Helicity 0-3 km IF((IGET(790)>0) )THEN DO J=JSTA,JEND - DO I=1,IM + DO I=ISTA,IEND GRID1(I,J)=UP_HELI_MAX03(I,J) ENDDO ENDDO @@ -533,14 +539,14 @@ SUBROUTINE MDL2AGL fld_info(cfld)%tinvstat = 0 endif fld_info(cfld)%ntrange = 1 - datapd(1:im,1:jend-jsta+1,cfld) = GRID1(1:im,jsta:jend) + datapd(1:iend-ista+1,1:jend-jsta+1,cfld) = GRID1(ista:iend,jsta:jend) endif END IF !--- Min Updraft Helicity 0-3 km IF((IGET(791)>0) )THEN DO J=JSTA,JEND - DO I=1,IM + DO I=ISTA,IEND GRID1(I,J)=UP_HELI_MIN03(I,J) ENDDO ENDDO @@ -554,14 +560,14 @@ SUBROUTINE MDL2AGL fld_info(cfld)%tinvstat = 1 endif fld_info(cfld)%ntrange = 1 - datapd(1:im,1:jend-jsta+1,cfld) = GRID1(1:im,jsta:jend) + datapd(1:iend-ista+1,1:jend-jsta+1,cfld) = GRID1(ista:iend,jsta:jend) endif END IF !--- Max Relative Vertical Vorticity 0-2 km IF((IGET(792)>0) )THEN DO J=JSTA,JEND - DO I=1,IM + DO I=ISTA,IEND GRID1(I,J)=REL_VORT_MAX(I,J) ENDDO ENDDO @@ -575,14 +581,14 @@ SUBROUTINE MDL2AGL fld_info(cfld)%tinvstat = 0 endif fld_info(cfld)%ntrange = 1 - datapd(1:im,1:jend-jsta+1,cfld) = GRID1(1:im,jsta:jend) + datapd(1:iend-ista+1,1:jend-jsta+1,cfld) = GRID1(ista:iend,jsta:jend) endif END IF !--- Max Relative Vertical Vorticity 0-1 km IF((IGET(793)>0) )THEN DO J=JSTA,JEND - DO I=1,IM + DO I=ISTA,IEND GRID1(I,J)=REL_VORT_MAX01(I,J) ENDDO ENDDO @@ -596,13 +602,13 @@ SUBROUTINE MDL2AGL fld_info(cfld)%tinvstat = 0 endif fld_info(cfld)%ntrange = 1 - datapd(1:im,1:jend-jsta+1,cfld) = GRID1(1:im,jsta:jend) + datapd(1:iend-ista+1,1:jend-jsta+1,cfld) = GRID1(ista:iend,jsta:jend) endif END IF !--- Max Relative Vertical Vorticity @ hybrid level 1 IF((IGET(890)>0) )THEN DO J=JSTA,JEND - DO I=1,IM + DO I=ISTA,IEND GRID1(I,J)=REL_VORT_MAXHY1(I,J) ENDDO ENDDO @@ -616,14 +622,14 @@ SUBROUTINE MDL2AGL fld_info(cfld)%tinvstat = 0 endif fld_info(cfld)%ntrange = 1 - datapd(1:im,1:jend-jsta+1,cfld) = GRID1(1:im,jsta:jend) + datapd(1:iend-ista+1,1:jend-jsta+1,cfld) = GRID1(ista:iend,jsta:jend) endif END IF !--- Max Hail Diameter in Column IF((IGET(794)>0) )THEN DO J=JSTA,JEND - DO I=1,IM + DO I=ISTA,IEND GRID1(I,J)=HAIL_MAX2D(I,J) ENDDO ENDDO @@ -637,14 +643,14 @@ SUBROUTINE MDL2AGL fld_info(cfld)%tinvstat = 1 endif fld_info(cfld)%ntrange = 1 - datapd(1:im,1:jend-jsta+1,cfld) = GRID1(1:im,jsta:jend) + datapd(1:iend-ista+1,1:jend-jsta+1,cfld) = GRID1(ista:iend,jsta:jend) endif END IF !--- Max Hail Diameter at k=1 IF((IGET(795)>0) )THEN DO J=JSTA,JEND - DO I=1,IM + DO I=ISTA,IEND GRID1(I,J)=HAIL_MAXK1(I,J) ENDDO ENDDO @@ -658,7 +664,7 @@ SUBROUTINE MDL2AGL fld_info(cfld)%tinvstat = 1 endif fld_info(cfld)%ntrange = 1 - datapd(1:im,1:jend-jsta+1,cfld) = GRID1(1:im,jsta:jend) + datapd(1:iend-ista+1,1:jend-jsta+1,cfld) = GRID1(ista:iend,jsta:jend) endif END IF @@ -667,7 +673,7 @@ SUBROUTINE MDL2AGL ! (J. Kenyon/GSD, added 1 May 2019) IF((IGET(728)>0) )THEN DO J=JSTA,JEND - DO I=1,IM + DO I=ISTA,IEND GRID1(I,J)=HAIL_MAXHAILCAST(I,J)/1000.0 ! convert mm to m ENDDO ENDDO @@ -681,14 +687,14 @@ SUBROUTINE MDL2AGL fld_info(cfld)%tinvstat = 1 endif fld_info(cfld)%ntrange = 1 - datapd(1:im,1:jend-jsta+1,cfld) = GRID1(1:im,jsta:jend) + datapd(1:iend-ista+1,1:jend-jsta+1,cfld) = GRID1(ista:iend,jsta:jend) endif END IF !--- Max Column Integrated Graupel IF((IGET(429)>0) )THEN DO J=JSTA,JEND - DO I=1,IM + DO I=ISTA,IEND GRID1(I,J)=GRPL_MAX(I,J) ENDDO ENDDO @@ -702,14 +708,14 @@ SUBROUTINE MDL2AGL fld_info(cfld)%tinvstat = 1 endif fld_info(cfld)%ntrange = 1 - datapd(1:im,1:jend-jsta+1,cfld) = GRID1(1:im,jsta:jend) + datapd(1:iend-ista+1,1:jend-jsta+1,cfld) = GRID1(ista:iend,jsta:jend) endif END IF !--- Max Lightning Threat 1 IF((IGET(702)>0) )THEN DO J=JSTA,JEND - DO I=1,IM + DO I=ISTA,IEND GRID1(I,J)=LTG1_MAX(I,J) ENDDO ENDDO @@ -723,14 +729,14 @@ SUBROUTINE MDL2AGL fld_info(cfld)%tinvstat = 1 endif fld_info(cfld)%ntrange = 1 - datapd(1:im,1:jend-jsta+1,cfld) = GRID1(1:im,jsta:jend) + datapd(1:iend-ista+1,1:jend-jsta+1,cfld) = GRID1(ista:iend,jsta:jend) endif END IF !--- Max Lightning Threat 2 IF((IGET(703)>0) )THEN DO J=JSTA,JEND - DO I=1,IM + DO I=ISTA,IEND GRID1(I,J)=LTG2_MAX(I,J) ENDDO ENDDO @@ -744,14 +750,14 @@ SUBROUTINE MDL2AGL fld_info(cfld)%tinvstat = 1 endif fld_info(cfld)%ntrange = 1 - datapd(1:im,1:jend-jsta+1,cfld) = GRID1(1:im,jsta:jend) + datapd(1:iend-ista+1,1:jend-jsta+1,cfld) = GRID1(ista:iend,jsta:jend) endif END IF !--- Max Lightning Threat 3 IF((IGET(704)>0) )THEN DO J=JSTA,JEND - DO I=1,IM + DO I=ISTA,IEND GRID1(I,J)=LTG3_MAX(I,J) ENDDO ENDDO @@ -765,14 +771,14 @@ SUBROUTINE MDL2AGL fld_info(cfld)%tinvstat = 1 endif fld_info(cfld)%ntrange = 1 - datapd(1:im,1:jend-jsta+1,cfld)=GRID1(1:im,jsta:jend) + datapd(1:iend-ista+1,1:jend-jsta+1,cfld)=GRID1(ista:iend,jsta:jend) endif END IF !--- GSD Updraft Helicity IF((IGET(727)>0) )THEN DO J=JSTA,JEND - DO I=1,IM + DO I=ISTA,IEND GRID1(I,J)=UP_HELI(I,J) ENDDO ENDDO @@ -780,14 +786,14 @@ SUBROUTINE MDL2AGL cfld=cfld+1 fld_info(cfld)%ifld=IAVBLFLD(IGET(727)) fld_info(cfld)%lvl=LVLSXML(LP,IGET(727)) - datapd(1:im,1:jend-jsta+1,cfld)=GRID1(1:im,jsta:jend) + datapd(1:iend-ista+1,1:jend-jsta+1,cfld)=GRID1(ista:iend,jsta:jend) endif END IF !--- Updraft Helicity 1-6 km layer IF((IGET(701)>0) )THEN DO J=JSTA,JEND - DO I=1,IM + DO I=ISTA,IEND GRID1(I,J)=UP_HELI16(I,J) ENDDO ENDDO @@ -795,14 +801,14 @@ SUBROUTINE MDL2AGL cfld=cfld+1 fld_info(cfld)%ifld=IAVBLFLD(IGET(701)) fld_info(cfld)%lvl=LVLSXML(LP,IGET(701)) - datapd(1:im,1:jend-jsta+1,cfld)=GRID1(1:im,jsta:jend) + datapd(1:iend-ista+1,1:jend-jsta+1,cfld)=GRID1(ista:iend,jsta:jend) endif END IF !--- Convective Initiation Lightning IF((IGET(705)>0) )THEN DO J=JSTA,JEND - DO I=1,IM + DO I=ISTA,IEND GRID1(I,J)=NCI_LTG(I,J)/60.0 ENDDO ENDDO @@ -816,14 +822,14 @@ SUBROUTINE MDL2AGL fld_info(cfld)%tinvstat = 1 endif fld_info(cfld)%ntrange = 1 - datapd(1:im,1:jend-jsta+1,cfld)=GRID1(1:im,jsta:jend) + datapd(1:iend-ista+1,1:jend-jsta+1,cfld)=GRID1(ista:iend,jsta:jend) endif END IF !--- Convective Activity Lightning IF((IGET(706)>0) )THEN DO J=JSTA,JEND - DO I=1,IM + DO I=ISTA,IEND GRID1(I,J)=NCA_LTG(I,J)/60.0 ENDDO ENDDO @@ -837,14 +843,14 @@ SUBROUTINE MDL2AGL fld_info(cfld)%tinvstat = 1 endif fld_info(cfld)%ntrange = 1 - datapd(1:im,1:jend-jsta+1,cfld)=GRID1(1:im,jsta:jend) + datapd(1:iend-ista+1,1:jend-jsta+1,cfld)=GRID1(ista:iend,jsta:jend) endif END IF !--- Convective Initiation Vertical Hydrometeor Flux IF((IGET(707)>0) )THEN DO J=JSTA,JEND - DO I=1,IM + DO I=ISTA,IEND GRID1(I,J)=NCI_WQ(I,J)/60.0 ENDDO ENDDO @@ -858,14 +864,14 @@ SUBROUTINE MDL2AGL fld_info(cfld)%tinvstat = 1 endif fld_info(cfld)%ntrange = 1 - datapd(1:im,1:jend-jsta+1,cfld)=GRID1(1:im,jsta:jend) + datapd(1:iend-ista+1,1:jend-jsta+1,cfld)=GRID1(ista:iend,jsta:jend) endif END IF !--- Convective Activity Vertical Hydrometeor Flux IF((IGET(708)>0) )THEN DO J=JSTA,JEND - DO I=1,IM + DO I=ISTA,IEND GRID1(I,J)=NCA_WQ(I,J)/60.0 ENDDO ENDDO @@ -879,14 +885,14 @@ SUBROUTINE MDL2AGL fld_info(cfld)%tinvstat = 1 endif fld_info(cfld)%ntrange = 1 - datapd(1:im,1:jend-jsta+1,cfld)=GRID1(1:im,jsta:jend) + datapd(1:iend-ista+1,1:jend-jsta+1,cfld)=GRID1(ista:iend,jsta:jend) endif END IF !--- Convective Initiation Reflectivity IF((IGET(709)>0) )THEN DO J=JSTA,JEND - DO I=1,IM + DO I=ISTA,IEND GRID1(I,J)=NCI_REFD(I,J)/60.0 ENDDO ENDDO @@ -900,14 +906,14 @@ SUBROUTINE MDL2AGL fld_info(cfld)%tinvstat = 1 endif fld_info(cfld)%ntrange = 1 - datapd(1:im,1:jend-jsta+1,cfld)=GRID1(1:im,jsta:jend) + datapd(1:iend-ista+1,1:jend-jsta+1,cfld)=GRID1(ista:iend,jsta:jend) endif END IF !--- Convective Activity Reflectivity IF((IGET(710)>0) )THEN DO J=JSTA,JEND - DO I=1,IM + DO I=ISTA,IEND GRID1(I,J)=NCA_REFD(I,J)/60.0 ENDDO ENDDO @@ -921,7 +927,7 @@ SUBROUTINE MDL2AGL fld_info(cfld)%tinvstat = 1 endif fld_info(cfld)%ntrange = 1 - datapd(1:im,1:jend-jsta+1,cfld)=GRID1(1:im,jsta:jend) + datapd(1:iend-ista+1,1:jend-jsta+1,cfld)=GRID1(ista:iend,jsta:jend) endif END IF ! @@ -945,9 +951,9 @@ SUBROUTINE MDL2AGL IF(iget1 > 0 .or. iget2 > 0) THEN ! jj=(jsta+jend)/2 - ii=(im)/2 + ii=(ista+iend)/2 DO J=JSTA,JEND - DO I=1,IM + DO I=ISTA,IEND UAGL(I,J) = SPVAL VAGL(I,J) = SPVAL ! @@ -996,13 +1002,13 @@ SUBROUTINE MDL2AGL END IF ENDDO IF(global)then - ISTART=1 - ISTOP=IM + ISTART=ISTA + ISTOP=IEND JSTART=JSTA JSTOP=JEND ELSE - ISTART=2 - ISTOP=IM-1 + ISTART=ISTA_M + ISTOP=IEND_M JSTART=JSTA_M JSTOP=JEND_M END IF @@ -1014,8 +1020,8 @@ SUBROUTINE MDL2AGL MINLL=LXXX ! print*,'exchange wind in MDL2AGL from ',MINLL DO LL=MINLL,LM - call exch(UH(1:IM,JSTA_2L:JEND_2U,LL)) - call exch(VH(1:IM,JSTA_2L:JEND_2U,LL)) + call exch(UH(ISTA_2L:IEND_2U,JSTA_2L:JEND_2U,LL)) + call exch(VH(ISTA_2L:IEND_2U,JSTA_2L:JEND_2U,LL)) END DO END IF DO 230 J=JSTART,JSTOP @@ -1124,7 +1130,7 @@ SUBROUTINE MDL2AGL !--- Wind Shear (wind speed difference in knots between sfc and 2000 ft) DO J=JSTA,JEND - DO I=1,IM + DO I=ISTA,IEND IF(ABS(UAGL(I,J)-SPVAL)>SMALL .AND. & ABS(VAGL(I,J)-SPVAL)>SMALL)THEN IF(GRIDTYPE=='B' .OR. GRIDTYPE=='E')THEN @@ -1145,7 +1151,7 @@ SUBROUTINE MDL2AGL cfld=cfld+1 fld_info(cfld)%ifld=IAVBLFLD(IGET(259)) fld_info(cfld)%lvl=LVLSXML(LP,IGET(259)) - datapd(1:im,1:jend-jsta+1,cfld)=GRID1(1:im,jsta:jend) + datapd(1:iend-ista+1,1:jend-jsta+1,cfld)=GRID1(ista:iend,jsta:jend) endif ! ENDIF ! FOR LEVEL @@ -1174,9 +1180,9 @@ SUBROUTINE MDL2AGL ! jj = float(jsta+jend)/2.0 - ii = float(im)/3.0 + ii = float(ista+iend)/3.0 DO J=JSTA_2L,JEND_2U - DO I=1,IM + DO I=ISTA_2L,IEND_2U ! PAGL(I,J) = SPVAL TAGL(I,J) = SPVAL @@ -1220,7 +1226,7 @@ SUBROUTINE MDL2AGL !chc J=JHOLD(NN) ! DO 220 J=JSTA,JEND DO 240 J=JSTA_2L,JEND_2U - DO 240 I=1,IM + DO 240 I=ISTA_2L,IEND_2U LL = NL1X(I,J) !--------------------------------------------------------------------- !*** VERTICAL INTERPOLATION OF GEOPOTENTIAL, TEMPERATURE, SPECIFIC @@ -1291,7 +1297,7 @@ SUBROUTINE MDL2AGL !--- Wind Energy Potential -- 0.5 * moist air density * wind speed^3 IF((IGET(411)>0) ) THEN DO J=JSTA,JEND - DO I=1,IM + DO I=ISTA,IEND IF(QAGL(I,J)0) ) THEN DO J=JSTA,JEND - DO I=1,IM + DO I=ISTA,IEND GRID1(I,J)=UAGL(I,J) ENDDO ENDDO @@ -1321,13 +1327,13 @@ SUBROUTINE MDL2AGL cfld=cfld+1 fld_info(cfld)%ifld=IAVBLFLD(IGET(412)) fld_info(cfld)%lvl=LVLSXML(LP,IGET(412)) - datapd(1:im,1:jend-jsta+1,cfld)=GRID1(1:im,jsta:jend) + datapd(1:iend-ista+1,1:jend-jsta+1,cfld)=GRID1(ista:iend,jsta:jend) endif ENDIF !--- V Component of wind IF((IGET(413)>0) ) THEN DO J=JSTA,JEND - DO I=1,IM + DO I=ISTA,IEND GRID1(I,J)=VAGL(I,J) ENDDO ENDDO @@ -1335,7 +1341,7 @@ SUBROUTINE MDL2AGL cfld=cfld+1 fld_info(cfld)%ifld=IAVBLFLD(IGET(413)) fld_info(cfld)%lvl=LVLSXML(LP,IGET(413)) - datapd(1:im,1:jend-jsta+1,cfld)=GRID1(1:im,jsta:jend) + datapd(1:iend-ista+1,1:jend-jsta+1,cfld)=GRID1(ista:iend,jsta:jend) endif ENDIF ! diff --git a/sorc/ncep_post.fd/MDL2P.f b/sorc/ncep_post.fd/MDL2P.f index 8f1d27d79..93a070788 100644 --- a/sorc/ncep_post.fd/MDL2P.f +++ b/sorc/ncep_post.fd/MDL2P.f @@ -1,69 +1,46 @@ !> @file -! . . . -!> SUBPROGRAM: MDL2P VERT INTRP OF MODEL LVLS TO PRESSURE -!! PRGRMMR: BLACK ORG: W/NP22 DATE: 99-09-23 -!! -!! ABSTRACT: -!! FOR MOST APPLICATIONS THIS ROUTINE IS THE WORKHORSE OF THE POST PROCESSOR. -!! IN A NUTSHELL IT INTERPOLATES DATA FROM MODEL TO PRESSURE SURFACES. -!! IT ORIGINATED FROM THE VERTICAL INTERPOLATION CODE IN THE OLD ETA -!! POST PROCESSOR SUBROUTINE OUTMAP AND IS A REVISION OF SUBROUTINE ETA2P. -!! -!! PROGRAM HISTORY LOG: -!! 99-09-23 T BLACK - REWRITTEN FROM ETA2P -!! 01-10-25 H CHUANG - MODIFIED TO PROCESS HYBRID MODEL OUTPUT -!! 02-06-12 MIKE BALDWIN - WRF VERSION -!! 02-07-29 H CHUANG - ADD UNDERGROUND FIELDS AND MEMBRANE SLP FOR WRF -!! 04-11-24 H CHUANG - ADD FERRIER'S HYDROMETEOR FIELD -!! 05-07-07 B ZHOU - ADD RSM MODEL for SLP -!! 05--8-30 B ZHOU - ADD AVIATION PRODUCTS: ICING, CAT, LLWS COMPUTATION -!! 08-01-01 H CHUANG - ADD GFS D3D FIELDS TO VERTICAL INTERPOLATION -!! 10-07-01 SMIRNOVA AND HU - ADD RR CHANGES -!! 10-12-30 H CHUANG - ADD HAINES INDEX TO SUPPORT FIRE WEATHER -!! 11-02-06 J Wang - ADD grib2 option TO SUPPORT FIRE WEATHER -!! 12-01-11 S LU - ADD GOCART AEROSOLS -!! 13-08-01 S Moorthi - some optimization -!! 14-02-26 S Moorthi - threading datapd assignment -!! 19-10-30 B CUI - REMOVE "GOTO" STATEMENT -!! 20-03-25 J MENG - remove grib1 -!! 20-05-20 J MENG - CALRH unification with NAM scheme -!! 20-11-10 J MENG - USE UPP_PHYSICS MODULE -!! 21-03-11 B Cui - change local arrays to dimension (im,jsta:jend) -!! 21-04-01 J MENG - COMPUTATION ON DEFINED POINTS ONLY -!! -!! USAGE: CALL MDL2P -!! INPUT ARGUMENT LIST: -!! -!! OUTPUT ARGUMENT LIST: -!! NONE -!! -!! OUTPUT FILES: -!! NONE -!! -!! SUBPROGRAMS CALLED: -!! UTILITIES: -!! SCLFLD - SCALE ARRAY ELEMENTS BY CONSTANT. -!! CALPOT - COMPUTE POTENTIAL TEMPERATURE. -!! CALRH - COMPUTE RELATIVE HUMIDITY. -!! CALDWP - COMPUTE DEWPOINT TEMPERATURE. -!! BOUND - BOUND ARRAY ELEMENTS BETWEEN LOWER AND UPPER LIMITS. -!! CALMCVG - COMPUTE MOISTURE CONVERGENCE. -!! CALVOR - COMPUTE ABSOLUTE VORTICITY. -!! CALSTRM - COMPUTE GEOSTROPHIC STREAMFUNCTION. -!! -!! LIBRARY: -!! COMMON - CTLBLK -!! RQSTFLD -!! -!! ATTRIBUTES: -!! LANGUAGE: FORTRAN 90 -!! MACHINE : IBM SP -!! +!> @brief mdl2p() computes vert intrp of model lvls to pressure. +!> +!> For most applications this routine is the workhorse of the post processor. +!> In a nutshell it interpolates data from model to pressure surfaces. +!> It origiaated from the vertical interpolation code in the old ETA +!> post processor subroutine outmap() and is a revision of subroutine eta2p(). +!> +!> ### Program History Log +!> Date | Programmer | Comments +!> -----|------------|--------- +!> 1999-09-23 | T Black | Rewritten from eta2p() +!> 2001-10-25 | H Chuang | Modified to process hybrid model output +!> 2002-06-12 | Mike Baldwin | WRF Version +!> 2002-07-29 | H Chuang | Add underground fields and membrane SLP for WRF +!> 2004-11-24 | H Chuang | Add FERRIER's hydrometeor field +!> 2005-07-07 | B Zhou | Add RSM model for SLP +!> 2005--8-30 | B Zhou | Add aviation products: ICING, CAT, LLWS computation +!> 2008-01-01 | H Chuang | Add GFS D3D fields to vertical interpolation +!> 2010-07-01 | Smirnova and Hu | Add RR changes +!> 2010-12-30 | H Chuang | Add Haines index to support fire weather +!> 2011-02-06 | J Wang | Add grib2 option to support fire weather +!> 2012-01-11 | S Lu | Add GOCART aerosols +!> 2013-08-01 | S Moorthi | Some optimization +!> 2014-02-26 | S Moorthi | Threading datapd assignment +!> 2019-10-30 | B Cui | Remove "GOTO" statement +!> 2020-03-25 | J Meng | Remove grib1 +!> 2020-05-20 | J Meng | CALRH unification with NAM scheme +!> 2020-11-10 | J Meng | Use UPP_PHYSICS module +!> 2021-03-11 | B Cui | Change local arrays to dimension (im,jsta:jend) +!> 2021-04-01 | J Meng | Computation on defined points only +!> 2021-07-07 | J MENG | 2D DECOMPOSITION +!> 2022-08-03 | W Meng | Modify total cloud fraction(331) +!> 2022-09-22 | L Zhang | Remove DUSTSL +!> 2022-11-16 | E James | Adding dust from RRFS +!> 2022-12-21 | J Meng ! Adding snow density SDEN +!> +!> @author T Black W/NP2 @date 1999-09-23 SUBROUTINE MDL2P(iostatusD3D) ! ! - use vrbls4d, only: DUST, SMOKE + use vrbls4d, only: DUST, SMOKE, FV3DUST use vrbls3d, only: PINT, O3, PMID, T, Q, UH, VH, WH, OMGA, Q2, CWM, & QQW, QQI, QQR, QQS, QQG, DBZ, F_RIMEF, TTND, CFR, & RLWTT, RSWTT, VDIFFTT, TCUCN, TCUCNS, & @@ -83,11 +60,12 @@ SUBROUTINE MDL2P(iostatusD3D) use ctlblk_mod, only: MODELNAME, LP1, ME, JSTA, JEND, LM, SPVAL, SPL, & ALSL, JEND_M, SMFLAG, GRIB, CFLD, FLD_INFO, DATAPD,& TD3D, IFHR, IFMIN, IM, JM, NBIN_DU, JSTA_2L, & - JEND_2U, LSM, d3d_on, gocart_on, ioform, NBIN_SM, & - imp_physics + JEND_2U, LSM, d3d_on, ioform, NBIN_SM, & + imp_physics, ISTA, IEND, ISTA_M, IEND_M, ISTA_2L, & + IEND_2U,nasa_on use rqstfld_mod, only: IGET, LVLS, ID, IAVBLFLD, LVLSXML use gridspec_mod, only: GRIDTYPE, MAPTYPE, DXVAL - use upp_physics, only: FPVSNEW, CALRH + use upp_physics, only: FPVSNEW, CALRH, CALVOR, CALSLR_ROEBBER !- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - ! implicit none @@ -104,17 +82,17 @@ SUBROUTINE MDL2P(iostatusD3D) real,PARAMETER :: CAPA=0.28589641,P1000=1000.E2 LOGICAL IOOMG,IOALL real, dimension(im,jm) :: GRID1, GRID2 - real, dimension(im,jsta_2l:jend_2u) :: FSL, TSL, QSL, OSL, USL, VSL & + real, dimension(ista_2l:iend_2u,jsta_2l:jend_2u) :: FSL, TSL, QSL, OSL, USL, VSL & &, Q2SL, WSL, CFRSL, O3SL, TDSL & &, EGRID1, EGRID2 & &, FSL_OLD, USL_OLD, VSL_OLD & &, OSL_OLD, OSL995 -! REAL D3DSL(IM,JM,27),DUSTSL(IM,JM,NBIN_DU) - REAL, allocatable :: D3DSL(:,:,:), DUSTSL(:,:,:), SMOKESL(:,:,:) + REAL, allocatable :: D3DSL(:,:,:), SMOKESL(:,:,:), FV3DUSTSL(:,:,:) ! integer,intent(in) :: iostatusD3D - INTEGER, dimension(im,jsta_2l:jend_2u) :: NL1X, NL1XF - real, dimension(IM,JSTA_2L:JEND_2U,LSM) :: TPRS, QPRS, FPRS + INTEGER, dimension(ista_2l:iend_2u,jsta_2l:jend_2u) :: NL1X, NL1XF + real, dimension(ISTA_2L:IEND_2U,JSTA_2L:JEND_2U,LSM) :: TPRS, QPRS, FPRS + real, dimension(ISTA_2L:IEND_2U,JSTA_2L:JEND_2U,LSM) :: RHPRS ! INTEGER K, NSMOOTH ! @@ -128,15 +106,15 @@ SUBROUTINE MDL2P(iostatusD3D) ! QG1 - graupel mixing ratio ! DBZ1 - radar reflectivity ! - REAL, dimension(im,jsta_2l:jend_2u) :: C1D, QW1, QI1, QR1, QS1, QG1, DBZ1 & + REAL, dimension(ista_2l:iend_2u,jsta_2l:jend_2u) :: C1D, QW1, QI1, QR1, QS1, QG1, DBZ1 & , FRIME, RAD, HAINES REAL SDUMMY(IM,2) ! SAVE RH, U,V, for Icing, CAT, LLWS computation - REAL SAVRH(IM,jsta:jend) + REAL SAVRH(ista:iend,jsta:jend) !jw - integer I,J,L,LP,LL,LLMH,JJB,JJE,II,JJ,LI,IFINCR,ITD3D,ista,imois,luhi,la + integer I,J,L,LP,LL,LLMH,JJB,JJE,II,JJ,LI,IFINCR,ITD3D,istaa,imois,luhi,la real fact,ALPSL,PSFC,QBLO,PNL1,TBLO,TVRL,TVRBLO,FAC,PSLPIJ, & ALPTH,AHF,PDV,QL,TVU,TVD,GAMMAS,QSAT,RHL,ZL,TL,PL,ES,part,dum1 logical log1 @@ -146,6 +124,8 @@ SUBROUTINE MDL2P(iostatusD3D) ! ! START MDL2P. ! + if(me==0) print*, 'MDL2P SMFLAG=',SMFLAG + if (modelname == 'GFS') then zero = 0.0 else @@ -162,23 +142,21 @@ SUBROUTINE MDL2P(iostatusD3D) enddo enddo endif - if (gocart_on) then - if (.not. allocated(dustsl)) allocate(dustsl(im,jm,nbin_du)) + if (.not. allocated(smokesl)) allocate(smokesl(im,jm,nbin_sm)) !$omp parallel do private(i,j,l) - do l=1,nbin_du - do j=1,jm - do i=1,im - DUSTSL(i,j,l) = SPVAL - enddo + do l=1,nbin_sm + do j=1,jm + do i=1,im + SMOKESL(i,j,l) = SPVAL enddo enddo - endif - if (.not. allocated(smokesl)) allocate(smokesl(im,jm,nbin_sm)) + enddo + if (.not. allocated(fv3dustsl)) allocate(fv3dustsl(im,jm,nbin_sm)) !$omp parallel do private(i,j,l) do l=1,nbin_sm do j=1,jm do i=1,im - SMOKESL(i,j,l) = SPVAL + FV3DUSTSL(i,j,l) = SPVAL enddo enddo enddo @@ -222,11 +200,10 @@ SUBROUTINE MDL2P(iostatusD3D) (IGET(393) > 0) .OR. (IGET(394) > 0) .OR. & (IGET(395) > 0) .OR. (IGET(379) > 0) .OR. & ! ADD DUST FIELDS - (IGET(438) > 0) .OR. (IGET(439) > 0) .OR. & - (IGET(440) > 0) .OR. (IGET(441) > 0) .OR. & - (IGET(442) > 0) .OR. (IGET(455) > 0) .OR. & + (IGET(455) > 0) .OR. & ! ADD SMOKE FIELDS - (IGET(738) > 0) .OR. (MODELNAME == 'RAPR') .OR.& + (IGET(738) > 0) .OR. (IGET(743) > 0) .OR. & + (MODELNAME == 'RAPR') .OR.& ! LIFTED INDEX needs 500 mb T (IGET(030)>0) .OR. (IGET(031)>0) .OR. (IGET(075)>0)) THEN ! @@ -239,7 +216,7 @@ SUBROUTINE MDL2P(iostatusD3D) ! print*,'LSM= ',lsm if(gridtype == 'B' .or. gridtype == 'E') & - call exch(PINT(1:IM,JSTA_2L:JEND_2U,LP1)) + call exch(PINT(ISTA_2L:IEND_2U,JSTA_2L:JEND_2U,LP1)) DO LP=1,LSM @@ -251,7 +228,7 @@ SUBROUTINE MDL2P(iostatusD3D) ! !$omp parallel do private(i,j,l) DO J=JSTA_2L,JEND_2U - DO I=1,IM + DO I=ISTA_2L,IEND_2U TSL(I,J) = SPVAL QSL(I,J) = SPVAL FSL(I,J) = SPVAL @@ -312,12 +289,12 @@ SUBROUTINE MDL2P(iostatusD3D) !hc J=JHOLD(NN) ! DO 220 J=JSTA,JEND - ii = im/2 + ii = (ista+iend)/2 jj = (jsta+jend)/2 !$omp parallel do private(i,j,k,l,ll,llmh,la,tvd,tvu,fact,fac,ahf,rhl,tl,pl,ql,zl,es,qsat,part,tvrl,tvrblo,tblo,qblo,gammas,pnl1) DO J=JSTA,JEND - DO I=1,IM + DO I=ISTA,IEND !--------------------------------------------------------------------- !*** VERTICAL INTERPOLATION OF GEOPOTENTIAL, TEMPERATURE, SPECIFIC !*** HUMIDITY, CLOUD WATER/ICE, OMEGA, WINDS, AND TKE. @@ -362,14 +339,9 @@ SUBROUTINE MDL2P(iostatusD3D) IF(TTND(I,J,1) < SPVAL) RAD(I,J) = TTND(I,J,1) IF(O3(I,J,1) < SPVAL) O3SL(I,J) = O3(I,J,1) IF(CFR(I,J,1) < SPVAL) CFRSL(I,J) = CFR(I,J,1) -! DUST - if (gocart_on) then - DO K = 1, NBIN_DU - IF(DUST(I,J,1,K) < SPVAL) DUSTSL(I,J,K) = DUST(I,J,1,K) - ENDDO - endif DO K = 1, NBIN_SM IF(SMOKE(I,J,1,K) < SPVAL) SMOKESL(I,J,K)=SMOKE(I,J,1,K) + IF(FV3DUST(I,J,1,K) < SPVAL) FV3DUSTSL(I,J,K)=FV3DUST(I,J,1,K) ENDDO ! only interpolate GFS d3d fields when reqested @@ -524,16 +496,11 @@ SUBROUTINE MDL2P(iostatusD3D) IF(CFR(I,J,LL) < SPVAL .AND. CFR(I,J,LL-1) < SPVAL) & CFRSL(I,J) = CFR(I,J,LL) + (CFR(I,J,LL)-CFR(I,J,LL-1))*FACT -! DUST - if (gocart_on) then - DO K = 1, NBIN_DU - IF(DUST(I,J,LL,K) < SPVAL .AND. DUST(I,J,LL-1,K) < SPVAL) & - DUSTSL(I,J,K) = DUST(I,J,LL,K) + (DUST(I,J,LL,K)-DUST(I,J,LL-1,K))*FACT - ENDDO - endif DO K = 1, NBIN_SM IF(SMOKE(I,J,LL,K) < SPVAL .AND. SMOKE(I,J,LL-1,K) < SPVAL) & SMOKESL(I,J,K)=SMOKE(I,J,LL,K)+(SMOKE(I,J,LL,K)-SMOKE(I,J,LL-1,K))*FACT + IF(FV3DUST(I,J,LL,K) < SPVAL .AND. FV3DUST(I,J,LL-1,K) < SPVAL) & + FV3DUSTSL(I,J,K)=FV3DUST(I,J,LL,K)+(FV3DUST(I,J,LL,K)-FV3DUST(I,J,LL-1,K))*FACT ENDDO ! only interpolate GFS d3d fields when == ested @@ -743,7 +710,7 @@ SUBROUTINE MDL2P(iostatusD3D) FRIME(I,J) = 1. RAD(I,J) = 0. O3SL(I,J) = O3(I,J,LLMH) - CFRSL(I,J) = 0. + IF(CFR(I,J,1) 0)THEN !$omp parallel do private(i,j) DO J=JSTA,JEND - DO I=1,IM + DO I=ISTA,IEND GRID1(I,J) = TSL(I,J) ENDDO ENDDO @@ -1166,11 +1136,12 @@ SUBROUTINE MDL2P(iostatusD3D) cfld = cfld + 1 fld_info(cfld)%ifld = IAVBLFLD(IGET(013)) fld_info(cfld)%lvl = LVLSXML(LP,IGET(013)) -!$omp parallel do private(i,j,jj) +!$omp parallel do private(i,j,ii,jj) do j=1,jend-jsta+1 jj = jsta+j-1 - do i=1,im - datapd(i,j,cfld) = GRID1(i,jj) + do i=1,iend-ista+1 + ii=ista+i-1 + datapd(i,j,cfld) = GRID1(ii,jj) enddo enddo endif @@ -1183,7 +1154,7 @@ SUBROUTINE MDL2P(iostatusD3D) IF(LVLS(LP,IGET(910))>0)THEN !$omp parallel do private(i,j) DO J=JSTA,JEND - DO I=1,IM + DO I=ISTA,IEND IF(TSL(I,J) < SPVAL .AND. QSL(I,J) < SPVAL) THEN GRID1(I,J) = TSL(I,J)*(1.+0.608*QSL(I,J)) ELSE @@ -1204,11 +1175,12 @@ SUBROUTINE MDL2P(iostatusD3D) cfld=cfld+1 fld_info(cfld)%ifld = IAVBLFLD(IGET(910)) fld_info(cfld)%lvl = LVLSXML(LP,IGET(910)) -!$omp parallel do private(i,j,jj) +!$omp parallel do private(i,j,ii,jj) do j=1,jend-jsta+1 jj = jsta+j-1 - do i=1,im - datapd(i,j,cfld) = GRID1(i,jj) + do i=1,iend-ista+1 + ii=ista+i-1 + datapd(i,j,cfld) = GRID1(ii,jj) enddo enddo endif @@ -1224,7 +1196,7 @@ SUBROUTINE MDL2P(iostatusD3D) tem = (P1000/spl(lp)) ** capa !$omp parallel do private(i,j) DO J=JSTA,JEND - DO I=1,IM + DO I=ISTA,IEND IF(TSL(I,J) < SPVAL) THEN grid1(I,J) = TSL(I,J) * tem ELSE @@ -1251,11 +1223,12 @@ SUBROUTINE MDL2P(iostatusD3D) cfld = cfld + 1 fld_info(cfld)%ifld=IAVBLFLD(IGET(014)) fld_info(cfld)%lvl=LVLSXML(LP,IGET(014)) -!$omp parallel do private(i,j,jj) +!$omp parallel do private(i,j,ii,jj) do j=1,jend-jsta+1 jj = jsta+j-1 - do i=1,im - datapd(i,j,cfld) = GRID1(i,jj) + do i=1,iend-ista+1 + ii=ista+i-1 + datapd(i,j,cfld) = GRID1(ii,jj) enddo enddo endif @@ -1265,7 +1238,7 @@ SUBROUTINE MDL2P(iostatusD3D) !*** RELATIVE HUMIDITY. ! - IF(IGET(017) > 0 .OR. IGET(257) > 0)THEN + IF(IGET(017) > 0 .OR. IGET(257) > 0 .OR. IGET(1006) > 0)THEN ! if ( me == 0) print *,'IGET(17)=',IGET(017),'LP=',LP,IGET(257), & ! 'LVLS=',LVLS(1,4) log1=.false. @@ -1275,19 +1248,19 @@ SUBROUTINE MDL2P(iostatusD3D) IF(IGET(257) > 0) then if(LVLS(LP,IGET(257)) > 0 ) log1=.true. endif - if ( log1 ) then + !$omp parallel do private(i,j) DO J=JSTA,JEND - DO I=1,IM + DO I=ISTA,IEND EGRID2(I,J) = SPL(LP) ENDDO ENDDO ! - CALL CALRH(EGRID2(1,jsta),TSL(1,jsta),QSL(1,jsta),EGRID1(1,jsta)) + CALL CALRH(EGRID2(ista:iend,jsta:jend),TSL(ista:iend,jsta:jend),QSL(ista:iend,jsta:jend),EGRID1(ista:iend,jsta:jend)) !$omp parallel do private(i,j) DO J=JSTA,JEND - DO I=1,IM + DO I=ISTA,IEND IF(EGRID1(I,J) < SPVAL) THEN GRID1(I,J) = EGRID1(I,J)*100. ELSE @@ -1303,27 +1276,36 @@ SUBROUTINE MDL2P(iostatusD3D) CALL SMOOTH(GRID1,SDUMMY,IM,JM,0.5) end do ENDIF + + if ( log1 ) then if(grib == 'grib2')then cfld = cfld + 1 fld_info(cfld)%ifld=IAVBLFLD(IGET(017)) fld_info(cfld)%lvl=LVLSXML(LP,IGET(017)) -!$omp parallel do private(i,j,jj) +!$omp parallel do private(i,j,ii,jj) do j=1,jend-jsta+1 jj = jsta+j-1 - do i=1,im - datapd(i,j,cfld) = GRID1(i,jj) + do i=1,iend-ista+1 + ii=ista+i-1 + datapd(i,j,cfld) = GRID1(ii,jj) enddo enddo endif !$omp parallel do private(i,j) DO J=JSTA,JEND - DO I=1,IM + DO I=ISTA,IEND SAVRH(I,J) = GRID1(I,J) - ENDDO - ENDDO + ENDDO + ENDDO + ENDIF !if (log1 ) - ENDIF +!$omp parallel do private(i,j) + DO J=JSTA,JEND + DO I=ISTA,IEND + RHPRS(I,J,LP) = GRID1(I,J) + ENDDO + ENDDO ENDIF ! !*** CLOUD FRACTION. @@ -1332,22 +1314,24 @@ SUBROUTINE MDL2P(iostatusD3D) IF(LVLS(LP,IGET(331)) > 0)THEN !$omp parallel do private(i,j) DO J=JSTA,JEND - DO I=1,IM + DO I=ISTA,IEND GRID1(I,J) = SPVAL - CFRSL(I,J) = MIN(MAX(0.0,CFRSL(I,J)),1.0) - IF(abs(CFRSL(I,J)-SPVAL) > SMALL) & - GRID1(I,J) = CFRSL(I,J)*H100 + IF(abs(CFRSL(I,J)-SPVAL) > SMALL) THEN + CFRSL(I,J) = MIN(MAX(0.0,CFRSL(I,J)),1.0) + GRID1(I,J) = CFRSL(I,J)*H100 + ENDIF ENDDO ENDDO if(grib == 'grib2')then cfld = cfld + 1 fld_info(cfld)%ifld = IAVBLFLD(IGET(331)) fld_info(cfld)%lvl = LVLSXML(LP,IGET(331)) -!$omp parallel do private(i,j,jj) +!$omp parallel do private(i,j,ii,jj) do j=1,jend-jsta+1 jj = jsta+j-1 - do i=1,im - datapd(i,j,cfld) = GRID1(i,jj) + do i=1,iend-ista+1 + ii=ista+i-1 + datapd(i,j,cfld) = GRID1(ii,jj) enddo enddo endif @@ -1360,15 +1344,15 @@ SUBROUTINE MDL2P(iostatusD3D) IF(LVLS(LP,IGET(015)) > 0)THEN !$omp parallel do private(i,j) DO J=JSTA,JEND - DO I=1,IM + DO I=ISTA,IEND EGRID2(I,J) = SPL(LP) ENDDO ENDDO ! - CALL CALDWP(EGRID2(1,jsta),QSL(1,jsta),EGRID1(1,jsta),TSL(1,jsta)) + CALL CALDWP(EGRID2(ista:iend,jsta:jend),QSL(ista:iend,jsta:jend),EGRID1(ista:iend,jsta:jend),TSL(ista:iend,jsta:jend)) !$omp parallel do private(i,j) DO J=JSTA,JEND - DO I=1,IM + DO I=ISTA,IEND IF(TSL(I,J) < SPVAL) THEN GRID1(I,J) = EGRID1(I,J) ELSE @@ -1380,11 +1364,12 @@ SUBROUTINE MDL2P(iostatusD3D) cfld = cfld + 1 fld_info(cfld)%ifld=IAVBLFLD(IGET(015)) fld_info(cfld)%lvl=LVLSXML(LP,IGET(015)) -!$omp parallel do private(i,j,jj) +!$omp parallel do private(i,j,ii,jj) do j=1,jend-jsta+1 jj = jsta+j-1 - do i=1,im - datapd(i,j,cfld) = GRID1(i,jj) + do i=1,iend-ista+1 + ii=ista+i-1 + datapd(i,j,cfld) = GRID1(ii,jj) enddo enddo endif @@ -1397,7 +1382,7 @@ SUBROUTINE MDL2P(iostatusD3D) IF(LVLS(LP,IGET(016)) > 0)THEN !$omp parallel do private(i,j) DO J=JSTA,JEND - DO I=1,IM + DO I=ISTA,IEND GRID1(I,J) = QSL(I,J) ENDDO ENDDO @@ -1406,11 +1391,12 @@ SUBROUTINE MDL2P(iostatusD3D) cfld = cfld + 1 fld_info(cfld)%ifld=IAVBLFLD(IGET(016)) fld_info(cfld)%lvl=LVLSXML(LP,IGET(016)) -!$omp parallel do private(i,j,jj) +!$omp parallel do private(i,j,ii,jj) do j=1,jend-jsta+1 jj = jsta+j-1 - do i=1,im - datapd(i,j,cfld) = GRID1(i,jj) + do i=1,iend-ista+1 + ii=ista+i-1 + datapd(i,j,cfld) = GRID1(ii,jj) enddo enddo endif @@ -1423,7 +1409,7 @@ SUBROUTINE MDL2P(iostatusD3D) IF(LVLS(LP,IGET(020)) > 0)THEN !$omp parallel do private(i,j) DO J=JSTA,JEND - DO I=1,IM + DO I=ISTA,IEND GRID1(I,J) = OSL(I,J) ENDDO ENDDO @@ -1449,11 +1435,12 @@ SUBROUTINE MDL2P(iostatusD3D) cfld = cfld + 1 fld_info(cfld)%ifld=IAVBLFLD(IGET(020)) fld_info(cfld)%lvl=LVLSXML(LP,IGET(020)) -!$omp parallel do private(i,j,jj) +!$omp parallel do private(i,j,ii,jj) do j=1,jend-jsta+1 jj = jsta+j-1 - do i=1,im - datapd(i,j,cfld) = GRID1(i,jj) + do i=1,iend-ista+1 + ii=ista+i-1 + datapd(i,j,cfld) = GRID1(ii,jj) enddo enddo endif @@ -1466,7 +1453,7 @@ SUBROUTINE MDL2P(iostatusD3D) IF(LVLS(LP,IGET(284)) > 0)THEN !$omp parallel do private(i,j) DO J=JSTA,JEND - DO I=1,IM + DO I=ISTA,IEND GRID1(I,J) = WSL(I,J) ENDDO ENDDO @@ -1474,11 +1461,12 @@ SUBROUTINE MDL2P(iostatusD3D) cfld = cfld + 1 fld_info(cfld)%ifld=IAVBLFLD(IGET(284)) fld_info(cfld)%lvl=LVLSXML(LP,IGET(284)) -!$omp parallel do private(i,j,jj) +!$omp parallel do private(i,j,ii,jj) do j=1,jend-jsta+1 jj = jsta+j-1 - do i=1,im - datapd(i,j,cfld) = GRID1(i,jj) + do i=1,iend-ista+1 + ii=ista+i-1 + datapd(i,j,cfld) = GRID1(ii,jj) enddo enddo endif @@ -1489,28 +1477,29 @@ SUBROUTINE MDL2P(iostatusD3D) ! IF(IGET(085) > 0)THEN IF(LVLS(LP,IGET(085)) > 0)THEN - CALL CALMCVG(QSL(1,jsta_2l),USL(1,jsta_2l),VSL(1,jsta_2l),EGRID1(1,jsta_2l)) + CALL CALMCVG(QSL(ista_2l,jsta_2l),USL(ista_2l,jsta_2l),VSL(ista_2l,jsta_2l),EGRID1(ista_2l,jsta_2l)) ! if(me == 0) print *,'after calmcvgme=',me,'USL=',USL(1:10,JSTA) !$omp parallel do private(i,j) DO J=JSTA,JEND - DO I=1,IM + DO I=ISTA,IEND GRID1(I,J) = EGRID1(I,J) ENDDO ENDDO !MEB NOT SURE IF I STILL NEED THIS ! CONVERT TO DIVERGENCE FOR GRIB UNITS ! -! CALL SCLFLD(GRID1,-1.0,IM,JM) +! CALL SCLFLD(GRID1(ista:iend,jsta:jend),-1.0,IM,JM) !MEB NOT SURE IF I STILL NEED THIS if(grib == 'grib2')then cfld = cfld + 1 fld_info(cfld)%ifld=IAVBLFLD(IGET(085)) fld_info(cfld)%lvl=LVLSXML(LP,IGET(085)) -!$omp parallel do private(i,j,jj) +!$omp parallel do private(i,j,ii,jj) do j=1,jend-jsta+1 jj = jsta+j-1 - do i=1,im - datapd(i,j,cfld) = GRID1(i,jj) + do i=1,iend-ista+1 + ii=ista+i-1 + datapd(i,j,cfld) = GRID1(ii,jj) enddo enddo ! if(me==0) print *,'in mdl2p,mconv, lp=',fld_info(cfld)%lvl,'lp=',lp @@ -1531,7 +1520,7 @@ SUBROUTINE MDL2P(iostatusD3D) if ( log1 ) then !$omp parallel do private(i,j) DO J=JSTA,JEND - DO I=1,IM + DO I=ISTA,IEND GRID1(I,J) = USL(I,J) GRID2(I,J) = VSL(I,J) ENDDO @@ -1554,22 +1543,24 @@ SUBROUTINE MDL2P(iostatusD3D) cfld = cfld + 1 fld_info(cfld)%ifld=IAVBLFLD(IGET(018)) fld_info(cfld)%lvl=LVLSXML(LP,IGET(018)) -!$omp parallel do private(i,j,jj) +!$omp parallel do private(i,j,ii,jj) do j=1,jend-jsta+1 jj = jsta+j-1 - do i=1,im - datapd(i,j,cfld) = GRID1(i,jj) + do i=1,iend-ista+1 + ii=ista+i-1 + datapd(i,j,cfld) = GRID1(ii,jj) enddo enddo cfld = cfld + 1 fld_info(cfld)%ifld=IAVBLFLD(IGET(019)) fld_info(cfld)%lvl=LVLSXML(LP,IGET(019)) -!$omp parallel do private(i,j,jj) +!$omp parallel do private(i,j,ii,jj) do j=1,jend-jsta+1 jj = jsta+j-1 - do i=1,im - datapd(i,j,cfld) = GRID2(i,jj) + do i=1,iend-ista+1 + ii=ista+i-1 + datapd(i,j,cfld) = GRID2(ii,jj) enddo enddo endif @@ -1584,7 +1575,7 @@ SUBROUTINE MDL2P(iostatusD3D) ! print *,'me=',me,'EGRID1=',EGRID1(1:10,JSTA) !$omp parallel do private(i,j) DO J=JSTA,JEND - DO I=1,IM + DO I=ISTA,IEND GRID1(I,J) = EGRID1(I,J) ENDDO ENDDO @@ -1610,11 +1601,12 @@ SUBROUTINE MDL2P(iostatusD3D) cfld = cfld + 1 fld_info(cfld)%ifld=IAVBLFLD(IGET(021)) fld_info(cfld)%lvl=LVLSXML(LP,IGET(021)) -!$omp parallel do private(i,j,jj) +!$omp parallel do private(i,j,ii,jj) do j=1,jend-jsta+1 jj = jsta+j-1 - do i=1,im - datapd(i,j,cfld) = GRID1(i,jj) + do i=1,iend-ista+1 + ii=ista+i-1 + datapd(i,j,cfld) = GRID1(ii,jj) enddo enddo endif @@ -1626,16 +1618,16 @@ SUBROUTINE MDL2P(iostatusD3D) IF (LVLS(LP,IGET(086)) > 0) THEN !$omp parallel do private(i,j) DO J=JSTA,JEND - DO I=1,IM + DO I=ISTA,IEND IF(FSL(I,J) 0) THEN !$omp parallel do private(i,j) DO J=JSTA,JEND - DO I=1,IM + DO I=ISTA,IEND GRID1(I,J) = Q2SL(I,J) ENDDO ENDDO @@ -1672,11 +1665,12 @@ SUBROUTINE MDL2P(iostatusD3D) cfld = cfld + 1 fld_info(cfld)%ifld=IAVBLFLD(IGET(022)) fld_info(cfld)%lvl=LVLSXML(LP,IGET(022)) -!$omp parallel do private(i,j,jj) +!$omp parallel do private(i,j,ii,jj) do j=1,jend-jsta+1 jj = jsta+j-1 - do i=1,im - datapd(i,j,cfld) = GRID1(i,jj) + do i=1,iend-ista+1 + ii=ista+i-1 + datapd(i,j,cfld) = GRID1(ii,jj) enddo enddo endif @@ -1691,7 +1685,7 @@ SUBROUTINE MDL2P(iostatusD3D) ! GFS does not seperate cloud water from ice, hoping to do that in Feb 08 implementation !$omp parallel do private(i,j) DO J=JSTA,JEND - DO I=1,IM + DO I=ISTA,IEND IF(QW1(I,J) < SPVAL .AND. QI1(I,J) < SPVAL) THEN GRID1(I,J) = QW1(I,J) + QI1(I,J) QI1(I,J) = spval @@ -1703,7 +1697,7 @@ SUBROUTINE MDL2P(iostatusD3D) ELSE !$omp parallel do private(i,j) DO J=JSTA,JEND - DO I=1,IM + DO I=ISTA,IEND GRID1(I,J) = QW1(I,J) ENDDO ENDDO @@ -1712,11 +1706,12 @@ SUBROUTINE MDL2P(iostatusD3D) cfld = cfld + 1 fld_info(cfld)%ifld=IAVBLFLD(IGET(153)) fld_info(cfld)%lvl=LVLSXML(LP,IGET(153)) -!$omp parallel do private(i,j,jj) +!$omp parallel do private(i,j,ii,jj) do j=1,jend-jsta+1 jj = jsta+j-1 - do i=1,im - datapd(i,j,cfld) = GRID1(i,jj) + do i=1,iend-ista+1 + ii=ista+i-1 + datapd(i,j,cfld) = GRID1(ii,jj) enddo enddo endif @@ -1729,7 +1724,7 @@ SUBROUTINE MDL2P(iostatusD3D) IF (LVLS(LP,IGET(166)) > 0) THEN !$omp parallel do private(i,j) DO J=JSTA,JEND - DO I=1,IM + DO I=ISTA,IEND GRID1(I,J) = QI1(I,J) ENDDO ENDDO @@ -1737,11 +1732,12 @@ SUBROUTINE MDL2P(iostatusD3D) cfld = cfld + 1 fld_info(cfld)%ifld=IAVBLFLD(IGET(166)) fld_info(cfld)%lvl=LVLSXML(LP,IGET(166)) -!$omp parallel do private(i,j,jj) +!$omp parallel do private(i,j,ii,jj) do j=1,jend-jsta+1 jj = jsta+j-1 - do i=1,im - datapd(i,j,cfld) = GRID1(i,jj) + do i=1,iend-ista+1 + ii=ista+i-1 + datapd(i,j,cfld) = GRID1(ii,jj) enddo enddo endif @@ -1753,7 +1749,7 @@ SUBROUTINE MDL2P(iostatusD3D) IF (LVLS(LP,IGET(183)) > 0) THEN !$omp parallel do private(i,j) DO J=JSTA,JEND - DO I=1,IM + DO I=ISTA,IEND GRID1(I,J) = QR1(I,J) ENDDO ENDDO @@ -1761,11 +1757,12 @@ SUBROUTINE MDL2P(iostatusD3D) cfld = cfld + 1 fld_info(cfld)%ifld=IAVBLFLD(IGET(183)) fld_info(cfld)%lvl=LVLSXML(LP,IGET(183)) -!$omp parallel do private(i,j,jj) +!$omp parallel do private(i,j,ii,jj) do j=1,jend-jsta+1 jj = jsta+j-1 - do i=1,im - datapd(i,j,cfld) = GRID1(i,jj) + do i=1,iend-ista+1 + ii=ista+i-1 + datapd(i,j,cfld) = GRID1(ii,jj) enddo enddo endif @@ -1777,7 +1774,7 @@ SUBROUTINE MDL2P(iostatusD3D) IF (LVLS(LP,IGET(184)) > 0) THEN !$omp parallel do private(i,j) DO J=JSTA,JEND - DO I=1,IM + DO I=ISTA,IEND GRID1(I,J) = QS1(I,J) ENDDO ENDDO @@ -1785,11 +1782,12 @@ SUBROUTINE MDL2P(iostatusD3D) cfld = cfld + 1 fld_info(cfld)%ifld=IAVBLFLD(IGET(184)) fld_info(cfld)%lvl=LVLSXML(LP,IGET(184)) -!$omp parallel do private(i,j,jj) +!$omp parallel do private(i,j,ii,jj) do j=1,jend-jsta+1 jj = jsta+j-1 - do i=1,im - datapd(i,j,cfld) = GRID1(i,jj) + do i=1,iend-ista+1 + ii=ista+i-1 + datapd(i,j,cfld) = GRID1(ii,jj) enddo enddo endif @@ -1801,7 +1799,7 @@ SUBROUTINE MDL2P(iostatusD3D) IF (LVLS(LP,IGET(416)) > 0) THEN !$omp parallel do private(i,j) DO J=JSTA,JEND - DO I=1,IM + DO I=ISTA,IEND GRID1(I,J) = QG1(I,J) ENDDO ENDDO @@ -1809,11 +1807,12 @@ SUBROUTINE MDL2P(iostatusD3D) cfld = cfld + 1 fld_info(cfld)%ifld=IAVBLFLD(IGET(416)) fld_info(cfld)%lvl=LVLSXML(LP,IGET(416)) -!$omp parallel do private(i,j,jj) +!$omp parallel do private(i,j,ii,jj) do j=1,jend-jsta+1 jj = jsta+j-1 - do i=1,im - datapd(i,j,cfld) = GRID1(i,jj) + do i=1,iend-ista+1 + ii=ista+i-1 + datapd(i,j,cfld) = GRID1(ii,jj) enddo enddo endif @@ -1826,7 +1825,7 @@ SUBROUTINE MDL2P(iostatusD3D) IF (LVLS(LP,IGET(198)) > 0) THEN !$omp parallel do private(i,j) DO J=JSTA,JEND - DO I=1,IM + DO I=ISTA,IEND GRID1(I,J) = C1D(I,J) ENDDO ENDDO @@ -1834,11 +1833,12 @@ SUBROUTINE MDL2P(iostatusD3D) cfld = cfld + 1 fld_info(cfld)%ifld=IAVBLFLD(IGET(198)) fld_info(cfld)%lvl=LVLSXML(LP,IGET(198)) -!$omp parallel do private(i,j,jj) +!$omp parallel do private(i,j,ii,jj) do j=1,jend-jsta+1 jj = jsta+j-1 - do i=1,im - datapd(i,j,cfld) = GRID1(i,jj) + do i=1,iend-ista+1 + ii=ista+i-1 + datapd(i,j,cfld) = GRID1(ii,jj) enddo enddo endif @@ -1850,7 +1850,7 @@ SUBROUTINE MDL2P(iostatusD3D) IF (LVLS(LP,IGET(263)) > 0) THEN !$omp parallel do private(i,j) DO J=JSTA,JEND - DO I=1,IM + DO I=ISTA,IEND GRID1(I,J) = FRIME(I,J) ENDDO ENDDO @@ -1858,11 +1858,12 @@ SUBROUTINE MDL2P(iostatusD3D) cfld = cfld + 1 fld_info(cfld)%ifld=IAVBLFLD(IGET(263)) fld_info(cfld)%lvl=LVLSXML(LP,IGET(263)) -!$omp parallel do private(i,j,jj) +!$omp parallel do private(i,j,ii,jj) do j=1,jend-jsta+1 jj = jsta+j-1 - do i=1,im - datapd(i,j,cfld) = GRID1(i,jj) + do i=1,iend-ista+1 + ii=ista+i-1 + datapd(i,j,cfld) = GRID1(ii,jj) enddo enddo endif @@ -1874,7 +1875,7 @@ SUBROUTINE MDL2P(iostatusD3D) IF (LVLS(LP,IGET(294)) > 0) THEN !$omp parallel do private(i,j) DO J=JSTA,JEND - DO I=1,IM + DO I=ISTA,IEND GRID1(I,J) = RAD(I,J) ENDDO ENDDO @@ -1882,11 +1883,12 @@ SUBROUTINE MDL2P(iostatusD3D) cfld = cfld + 1 fld_info(cfld)%ifld=IAVBLFLD(IGET(294)) fld_info(cfld)%lvl=LVLSXML(LP,IGET(294)) -!$omp parallel do private(i,j,jj) +!$omp parallel do private(i,j,ii,jj) do j=1,jend-jsta+1 jj = jsta+j-1 - do i=1,im - datapd(i,j,cfld) = GRID1(i,jj) + do i=1,iend-ista+1 + ii=ista+i-1 + datapd(i,j,cfld) = GRID1(ii,jj) enddo enddo endif @@ -1898,7 +1900,7 @@ SUBROUTINE MDL2P(iostatusD3D) IF (LVLS(LP,IGET(251)) > 0) THEN !$omp parallel do private(i,j) DO J=JSTA,JEND - DO I=1,IM + DO I=ISTA,IEND GRID1(I,J) = DBZ1(I,J) ENDDO ENDDO @@ -1906,11 +1908,12 @@ SUBROUTINE MDL2P(iostatusD3D) cfld = cfld + 1 fld_info(cfld)%ifld=IAVBLFLD(IGET(251)) fld_info(cfld)%lvl=LVLSXML(LP,IGET(251)) -!$omp parallel do private(i,j,jj) +!$omp parallel do private(i,j,ii,jj) do j=1,jend-jsta+1 jj = jsta+j-1 - do i=1,im - datapd(i,j,cfld) = GRID1(i,jj) + do i=1,iend-ista+1 + ii=ista+i-1 + datapd(i,j,cfld) = GRID1(ii,jj) enddo enddo endif @@ -1920,11 +1923,11 @@ SUBROUTINE MDL2P(iostatusD3D) !--- IN-FLIGHT ICING CONDITION: ADD BY B. ZHOU IF(IGET(257) > 0)THEN IF(LVLS(LP,IGET(257)) > 0)THEN - CALL CALICING(TSL(1,jsta), SAVRH, OSL(1,jsta), EGRID1(1,jsta)) + CALL CALICING(TSL(ista:iend,jsta:jend), SAVRH, OSL(ista:iend,jsta:jend), EGRID1(ista:iend,jsta:jend)) !$omp parallel do private(i,j) DO J=JSTA,JEND - DO I=1,IM + DO I=ISTA,IEND GRID1(I,J) = EGRID1(I,J) ENDDO ENDDO @@ -1932,11 +1935,12 @@ SUBROUTINE MDL2P(iostatusD3D) cfld = cfld + 1 fld_info(cfld)%ifld=IAVBLFLD(IGET(257)) fld_info(cfld)%lvl=LVLSXML(LP,IGET(257)) -!$omp parallel do private(i,j,jj) +!$omp parallel do private(i,j,ii,jj) do j=1,jend-jsta+1 jj = jsta+j-1 - do i=1,im - datapd(i,j,cfld) = GRID1(i,jj) + do i=1,iend-ista+1 + ii=ista+i-1 + datapd(i,j,cfld) = GRID1(ii,jj) enddo enddo endif @@ -1951,7 +1955,7 @@ SUBROUTINE MDL2P(iostatusD3D) IF(LVLS(LP,IGET(258)) > 0)THEN !$omp parallel do private(i,j) DO J=JSTA,JEND - DO I=1,IM + DO I=ISTA,IEND IF(FSL(I,J) 3. .OR. GRID1(I,J) < 0.) ! + print*,'bad CAT',i,j,GRID1(I,J) @@ -1975,11 +1979,12 @@ SUBROUTINE MDL2P(iostatusD3D) cfld = cfld + 1 fld_info(cfld)%ifld=IAVBLFLD(IGET(258)) fld_info(cfld)%lvl=LVLSXML(LP,IGET(258)) -!$omp parallel do private(i,j,jj) +!$omp parallel do private(i,j,ii,jj) do j=1,jend-jsta+1 jj = jsta+j-1 - do i=1,im - datapd(i,j,cfld) = GRID1(i,jj) + do i=1,iend-ista+1 + ii=ista+i-1 + datapd(i,j,cfld) = GRID1(ii,jj) enddo enddo endif @@ -1990,7 +1995,7 @@ SUBROUTINE MDL2P(iostatusD3D) !$omp parallel do private(i,j) DO J=JSTA_2L,JEND_2U - DO I=1,IM + DO I=ISTA_2L,IEND_2U USL_OLD(I,J) = USL(I,J) VSL_OLD(I,J) = VSL(I,J) IF(FSL(I,J) 0) THEN !$omp parallel do private(i,j) DO J=JSTA,JEND - DO I=1,IM + DO I=ISTA,IEND GRID1(I,J) = O3SL(I,J) ENDDO ENDDO @@ -2016,11 +2021,12 @@ SUBROUTINE MDL2P(iostatusD3D) cfld = cfld + 1 fld_info(cfld)%ifld=IAVBLFLD(IGET(268)) fld_info(cfld)%lvl=LVLSXML(LP,IGET(268)) -!$omp parallel do private(i,j,jj) +!$omp parallel do private(i,j,ii,jj) do j=1,jend-jsta+1 jj = jsta+j-1 - do i=1,im - datapd(i,j,cfld) = GRID1(i,jj) + do i=1,iend-ista+1 + ii=ista+i-1 + datapd(i,j,cfld) = GRID1(ii,jj) enddo enddo endif @@ -2032,9 +2038,9 @@ SUBROUTINE MDL2P(iostatusD3D) IF (LVLS(LP,IGET(738)) > 0) THEN !$omp parallel do private(i,j) DO J=JSTA,JEND - DO I=1,IM + DO I=ISTA,IEND IF(SMOKESL(I,J,1) 0) THEN - IF (LVLS(LP,IGET(438)) > 0) THEN -!$omp parallel do private(i,j) - DO J=JSTA,JEND - DO I=1,IM - GRID1(I,J) = DUSTSL(I,J,1) - ENDDO - ENDDO - if(grib == 'grib2')then - cfld = cfld + 1 - fld_info(cfld)%ifld=IAVBLFLD(IGET(438)) - fld_info(cfld)%lvl=LVLSXML(LP,IGET(438)) -!$omp parallel do private(i,j,jj) - do j=1,jend-jsta+1 - jj = jsta+j-1 - do i=1,im - datapd(i,j,cfld) = GRID1(i,jj) - enddo - enddo - endif - ENDIF - ENDIF - - IF (IGET(439) > 0) THEN - IF (LVLS(LP,IGET(439)) > 0) THEN -!$omp parallel do private(i,j) - DO J=JSTA,JEND - DO I=1,IM - GRID1(I,J) = DUSTSL(I,J,2) - ENDDO - ENDDO - if(grib == 'grib2')then - cfld = cfld + 1 - fld_info(cfld)%ifld=IAVBLFLD(IGET(439)) - fld_info(cfld)%lvl=LVLSXML(LP,IGET(439)) -!$omp parallel do private(i,j,jj) - do j=1,jend-jsta+1 - jj = jsta+j-1 - do i=1,im - datapd(i,j,cfld) = GRID1(i,jj) - enddo - enddo - endif - ENDIF - ENDIF - - IF (IGET(440) > 0) THEN - IF (LVLS(LP,IGET(440)) > 0) THEN -!$omp parallel do private(i,j) - DO J=JSTA,JEND - DO I=1,IM - GRID1(I,J) = DUSTSL(I,J,3) - ENDDO - ENDDO - if(grib == 'grib2')then - cfld = cfld + 1 - fld_info(cfld)%ifld=IAVBLFLD(IGET(440)) - fld_info(cfld)%lvl=LVLSXML(LP,IGET(440)) -!$omp parallel do private(i,j,jj) - do j=1,jend-jsta+1 - jj = jsta+j-1 - do i=1,im - datapd(i,j,cfld) = GRID1(i,jj) - enddo - enddo - endif - ENDIF - ENDIF - - IF (IGET(441) > 0) THEN - IF (LVLS(LP,IGET(441)) > 0) THEN -!$omp parallel do private(i,j) - DO J=JSTA,JEND - DO I=1,IM - GRID1(I,J) = DUSTSL(I,J,4) - ENDDO - ENDDO - if(grib == 'grib2')then - cfld = cfld + 1 - fld_info(cfld)%ifld=IAVBLFLD(IGET(441)) - fld_info(cfld)%lvl=LVLSXML(LP,IGET(441)) -!$omp parallel do private(i,j,jj) +!$omp parallel do private(i,j,ii,jj) do j=1,jend-jsta+1 jj = jsta+j-1 - do i=1,im - datapd(i,j,cfld) = GRID1(i,jj) + do i=1,iend-ista+1 + ii=ista+i-1 + datapd(i,j,cfld) = GRID1(ii,jj) enddo enddo endif ENDIF ENDIF - - IF (IGET(442) > 0) THEN - IF (LVLS(LP,IGET(442)) > 0) THEN +! E. James - 14 Sep 2022: DUST from RRFS + IF (IGET(743) > 0) THEN + IF (LVLS(LP,IGET(743)) > 0) THEN !$omp parallel do private(i,j) DO J=JSTA,JEND - DO I=1,IM - GRID1(I,J) = DUSTSL(I,J,5) + DO I=ISTA,IEND + IF(FV3DUSTSL(I,J,1) 0) THEN IF (LVLS(LP,IGET(355)) > 0) THEN !$omp parallel do private(i,j) DO J=JSTA,JEND - DO I=1,IM + DO I=ISTA,IEND GRID1(I,J) = D3DSL(i,j,1) ENDDO ENDDO @@ -2211,11 +2128,12 @@ SUBROUTINE MDL2P(iostatusD3D) fld_info(cfld)%ntrange=(IFHR-ID(18))/ITD3D endif fld_info(cfld)%tinvstat=ITD3D -!$omp parallel do private(i,j,jj) +!$omp parallel do private(i,j,ii,jj) do j=1,jend-jsta+1 jj = jsta+j-1 - do i=1,im - datapd(i,j,cfld) = GRID1(i,jj) + do i=1,iend-ista+1 + ii=ista+i-1 + datapd(i,j,cfld) = GRID1(ii,jj) enddo enddo endif @@ -2226,7 +2144,7 @@ SUBROUTINE MDL2P(iostatusD3D) IF (LVLS(LP,IGET(354)) > 0) THEN !$omp parallel do private(i,j) DO J=JSTA,JEND - DO I=1,IM + DO I=ISTA,IEND GRID1(I,J) = D3DSL(i,j,2) ENDDO ENDDO @@ -2258,11 +2176,12 @@ SUBROUTINE MDL2P(iostatusD3D) fld_info(cfld)%ntrange=(IFHR-ID(18))/ITD3D endif fld_info(cfld)%tinvstat=ITD3D -!$omp parallel do private(i,j,jj) +!$omp parallel do private(i,j,ii,jj) do j=1,jend-jsta+1 jj = jsta+j-1 - do i=1,im - datapd(i,j,cfld) = GRID1(i,jj) + do i=1,iend-ista+1 + ii=ista+i-1 + datapd(i,j,cfld) = GRID1(ii,jj) enddo enddo endif @@ -2273,7 +2192,7 @@ SUBROUTINE MDL2P(iostatusD3D) IF (LVLS(LP,IGET(356)) > 0) THEN !$omp parallel do private(i,j) DO J=JSTA,JEND - DO I=1,IM + DO I=ISTA,IEND GRID1(I,J) = D3DSL(i,j,3) ENDDO ENDDO @@ -2305,11 +2224,12 @@ SUBROUTINE MDL2P(iostatusD3D) fld_info(cfld)%ntrange=(IFHR-ID(18))/ITD3D endif fld_info(cfld)%tinvstat=ITD3D -!$omp parallel do private(i,j,jj) +!$omp parallel do private(i,j,ii,jj) do j=1,jend-jsta+1 jj = jsta+j-1 - do i=1,im - datapd(i,j,cfld) = GRID1(i,jj) + do i=1,iend-ista+1 + ii=ista+i-1 + datapd(i,j,cfld) = GRID1(ii,jj) enddo enddo endif @@ -2320,7 +2240,7 @@ SUBROUTINE MDL2P(iostatusD3D) IF (LVLS(LP,IGET(357)) > 0) THEN !$omp parallel do private(i,j) DO J=JSTA,JEND - DO I=1,IM + DO I=ISTA,IEND GRID1(I,J) = D3DSL(i,j,4) ENDDO ENDDO @@ -2352,11 +2272,12 @@ SUBROUTINE MDL2P(iostatusD3D) fld_info(cfld)%ntrange=(IFHR-ID(18))/ITD3D endif fld_info(cfld)%tinvstat=ITD3D -!$omp parallel do private(i,j,jj) +!$omp parallel do private(i,j,ii,jj) do j=1,jend-jsta+1 jj = jsta+j-1 - do i=1,im - datapd(i,j,cfld) = GRID1(i,jj) + do i=1,iend-ista+1 + ii=ista+i-1 + datapd(i,j,cfld) = GRID1(ii,jj) enddo enddo endif @@ -2367,7 +2288,7 @@ SUBROUTINE MDL2P(iostatusD3D) IF (LVLS(LP,IGET(358)) > 0) THEN !$omp parallel do private(i,j) DO J=JSTA,JEND - DO I=1,IM + DO I=ISTA,IEND GRID1(I,J) = D3DSL(i,j,5) ENDDO ENDDO @@ -2399,11 +2320,12 @@ SUBROUTINE MDL2P(iostatusD3D) fld_info(cfld)%ntrange=(IFHR-ID(18))/ITD3D endif fld_info(cfld)%tinvstat=ITD3D -!$omp parallel do private(i,j,jj) +!$omp parallel do private(i,j,ii,jj) do j=1,jend-jsta+1 jj = jsta+j-1 - do i=1,im - datapd(i,j,cfld) = GRID1(i,jj) + do i=1,iend-ista+1 + ii=ista+i-1 + datapd(i,j,cfld) = GRID1(ii,jj) enddo enddo endif @@ -2414,7 +2336,7 @@ SUBROUTINE MDL2P(iostatusD3D) IF (LVLS(LP,IGET(359)) > 0) THEN !$omp parallel do private(i,j) DO J=JSTA,JEND - DO I=1,IM + DO I=ISTA,IEND GRID1(I,J) = D3DSL(i,j,6) ENDDO ENDDO @@ -2446,11 +2368,12 @@ SUBROUTINE MDL2P(iostatusD3D) fld_info(cfld)%ntrange=(IFHR-ID(18))/ITD3D endif fld_info(cfld)%tinvstat=ITD3D -!$omp parallel do private(i,j,jj) +!$omp parallel do private(i,j,ii,jj) do j=1,jend-jsta+1 jj = jsta+j-1 - do i=1,im - datapd(i,j,cfld) = GRID1(i,jj) + do i=1,iend-ista+1 + ii=ista+i-1 + datapd(i,j,cfld) = GRID1(ii,jj) enddo enddo endif @@ -2461,7 +2384,7 @@ SUBROUTINE MDL2P(iostatusD3D) IF (LVLS(LP,IGET(360)) > 0) THEN !$omp parallel do private(i,j) DO J=JSTA,JEND - DO I=1,IM + DO I=ISTA,IEND GRID1(I,J) = D3DSL(i,j,7) ENDDO ENDDO @@ -2493,11 +2416,12 @@ SUBROUTINE MDL2P(iostatusD3D) fld_info(cfld)%ntrange=(IFHR-ID(18))/ITD3D endif fld_info(cfld)%tinvstat=ITD3D -!$omp parallel do private(i,j,jj) +!$omp parallel do private(i,j,ii,jj) do j=1,jend-jsta+1 jj = jsta+j-1 - do i=1,im - datapd(i,j,cfld) = GRID1(i,jj) + do i=1,iend-ista+1 + ii=ista+i-1 + datapd(i,j,cfld) = GRID1(ii,jj) enddo enddo endif @@ -2508,7 +2432,7 @@ SUBROUTINE MDL2P(iostatusD3D) IF (LVLS(LP,IGET(361)) > 0) THEN !$omp parallel do private(i,j) DO J=JSTA,JEND - DO I=1,IM + DO I=ISTA,IEND GRID1(I,J) = D3DSL(i,j,8) ENDDO ENDDO @@ -2540,11 +2464,12 @@ SUBROUTINE MDL2P(iostatusD3D) fld_info(cfld)%ntrange=(IFHR-ID(18))/ITD3D endif fld_info(cfld)%tinvstat=ITD3D -!$omp parallel do private(i,j,jj) +!$omp parallel do private(i,j,ii,jj) do j=1,jend-jsta+1 jj = jsta+j-1 - do i=1,im - datapd(i,j,cfld) = GRID1(i,jj) + do i=1,iend-ista+1 + ii=ista+i-1 + datapd(i,j,cfld) = GRID1(ii,jj) enddo enddo endif @@ -2555,7 +2480,7 @@ SUBROUTINE MDL2P(iostatusD3D) IF (LVLS(LP,IGET(362)) > 0) THEN !$omp parallel do private(i,j) DO J=JSTA,JEND - DO I=1,IM + DO I=ISTA,IEND GRID1(I,J) = D3DSL(i,j,9) ENDDO ENDDO @@ -2587,11 +2512,12 @@ SUBROUTINE MDL2P(iostatusD3D) fld_info(cfld)%ntrange=(IFHR-ID(18))/ITD3D endif fld_info(cfld)%tinvstat=ITD3D -!$omp parallel do private(i,j,jj) +!$omp parallel do private(i,j,ii,jj) do j=1,jend-jsta+1 jj = jsta+j-1 - do i=1,im - datapd(i,j,cfld) = GRID1(i,jj) + do i=1,iend-ista+1 + ii=ista+i-1 + datapd(i,j,cfld) = GRID1(ii,jj) enddo enddo endif @@ -2602,7 +2528,7 @@ SUBROUTINE MDL2P(iostatusD3D) IF (LVLS(LP,IGET(363)) > 0) THEN !$omp parallel do private(i,j) DO J=JSTA,JEND - DO I=1,IM + DO I=ISTA,IEND GRID1(I,J) = D3DSL(i,j,10) ENDDO ENDDO @@ -2635,11 +2561,12 @@ SUBROUTINE MDL2P(iostatusD3D) fld_info(cfld)%ntrange=(IFHR-ID(18))/ITD3D endif fld_info(cfld)%tinvstat=ITD3D -!$omp parallel do private(i,j,jj) +!$omp parallel do private(i,j,ii,jj) do j=1,jend-jsta+1 jj = jsta+j-1 - do i=1,im - datapd(i,j,cfld) = GRID1(i,jj) + do i=1,iend-ista+1 + ii=ista+i-1 + datapd(i,j,cfld) = GRID1(ii,jj) enddo enddo endif @@ -2650,7 +2577,7 @@ SUBROUTINE MDL2P(iostatusD3D) IF (LVLS(LP,IGET(364)) > 0) THEN !$omp parallel do private(i,j) DO J=JSTA,JEND - DO I=1,IM + DO I=ISTA,IEND GRID1(I,J) = D3DSL(i,j,11) ENDDO ENDDO @@ -2683,11 +2610,12 @@ SUBROUTINE MDL2P(iostatusD3D) fld_info(cfld)%ntrange=(IFHR-ID(18))/ITD3D endif fld_info(cfld)%tinvstat=ITD3D -!$omp parallel do private(i,j,jj) +!$omp parallel do private(i,j,ii,jj) do j=1,jend-jsta+1 jj = jsta+j-1 - do i=1,im - datapd(i,j,cfld) = GRID1(i,jj) + do i=1,iend-ista+1 + ii=ista+i-1 + datapd(i,j,cfld) = GRID1(ii,jj) enddo enddo endif @@ -2698,7 +2626,7 @@ SUBROUTINE MDL2P(iostatusD3D) IF (LVLS(LP,IGET(365)) > 0) THEN !$omp parallel do private(i,j) DO J=JSTA,JEND - DO I=1,IM + DO I=ISTA,IEND GRID1(I,J) = D3DSL(i,j,12) ENDDO ENDDO @@ -2731,11 +2659,12 @@ SUBROUTINE MDL2P(iostatusD3D) fld_info(cfld)%ntrange=(IFHR-ID(18))/ITD3D endif fld_info(cfld)%tinvstat=ITD3D -!$omp parallel do private(i,j,jj) +!$omp parallel do private(i,j,ii,jj) do j=1,jend-jsta+1 jj = jsta+j-1 - do i=1,im - datapd(i,j,cfld) = GRID1(i,jj) + do i=1,iend-ista+1 + ii=ista+i-1 + datapd(i,j,cfld) = GRID1(ii,jj) enddo enddo endif @@ -2746,7 +2675,7 @@ SUBROUTINE MDL2P(iostatusD3D) IF (LVLS(LP,IGET(366)) > 0) THEN !$omp parallel do private(i,j) DO J=JSTA,JEND - DO I=1,IM + DO I=ISTA,IEND GRID1(I,J) = D3DSL(i,j,13) ENDDO ENDDO @@ -2779,11 +2708,12 @@ SUBROUTINE MDL2P(iostatusD3D) fld_info(cfld)%ntrange=(IFHR-ID(18))/ITD3D endif fld_info(cfld)%tinvstat=ITD3D -!$omp parallel do private(i,j,jj) +!$omp parallel do private(i,j,ii,jj) do j=1,jend-jsta+1 jj = jsta+j-1 - do i=1,im - datapd(i,j,cfld) = GRID1(i,jj) + do i=1,iend-ista+1 + ii=ista+i-1 + datapd(i,j,cfld) = GRID1(ii,jj) enddo enddo endif @@ -2794,7 +2724,7 @@ SUBROUTINE MDL2P(iostatusD3D) IF (LVLS(LP,IGET(367)) > 0) THEN !$omp parallel do private(i,j) DO J=JSTA,JEND - DO I=1,IM + DO I=ISTA,IEND GRID1(I,J) = D3DSL(i,j,14) ENDDO ENDDO @@ -2827,11 +2757,12 @@ SUBROUTINE MDL2P(iostatusD3D) fld_info(cfld)%ntrange=(IFHR-ID(18))/ITD3D endif fld_info(cfld)%tinvstat=ITD3D -!$omp parallel do private(i,j,jj) +!$omp parallel do private(i,j,ii,jj) do j=1,jend-jsta+1 jj = jsta+j-1 - do i=1,im - datapd(i,j,cfld) = GRID1(i,jj) + do i=1,iend-ista+1 + ii=ista+i-1 + datapd(i,j,cfld) = GRID1(ii,jj) enddo enddo endif @@ -2842,7 +2773,7 @@ SUBROUTINE MDL2P(iostatusD3D) IF (LVLS(LP,IGET(368)) > 0) THEN !$omp parallel do private(i,j) DO J=JSTA,JEND - DO I=1,IM + DO I=ISTA,IEND GRID1(I,J) = D3DSL(i,j,15) ENDDO ENDDO @@ -2875,11 +2806,12 @@ SUBROUTINE MDL2P(iostatusD3D) fld_info(cfld)%ntrange=(IFHR-ID(18))/ITD3D endif fld_info(cfld)%tinvstat=ITD3D -!$omp parallel do private(i,j,jj) +!$omp parallel do private(i,j,ii,jj) do j=1,jend-jsta+1 jj = jsta+j-1 - do i=1,im - datapd(i,j,cfld) = GRID1(i,jj) + do i=1,iend-ista+1 + ii=ista+i-1 + datapd(i,j,cfld) = GRID1(ii,jj) enddo enddo endif @@ -2890,7 +2822,7 @@ SUBROUTINE MDL2P(iostatusD3D) IF (LVLS(LP,IGET(369)) > 0) THEN !$omp parallel do private(i,j) DO J=JSTA,JEND - DO I=1,IM + DO I=ISTA,IEND GRID1(I,J) = D3DSL(i,j,16) ENDDO ENDDO @@ -2922,11 +2854,12 @@ SUBROUTINE MDL2P(iostatusD3D) fld_info(cfld)%ntrange=(IFHR-ID(18))/ITD3D endif fld_info(cfld)%tinvstat=ITD3D -!$omp parallel do private(i,j,jj) +!$omp parallel do private(i,j,ii,jj) do j=1,jend-jsta+1 jj = jsta+j-1 - do i=1,im - datapd(i,j,cfld) = GRID1(i,jj) + do i=1,iend-ista+1 + ii=ista+i-1 + datapd(i,j,cfld) = GRID1(ii,jj) enddo enddo endif @@ -2937,7 +2870,7 @@ SUBROUTINE MDL2P(iostatusD3D) IF (LVLS(LP,IGET(370)) > 0) THEN !$omp parallel do private(i,j) DO J=JSTA,JEND - DO I=1,IM + DO I=ISTA,IEND GRID1(I,J) = D3DSL(i,j,17) ENDDO ENDDO @@ -2970,11 +2903,12 @@ SUBROUTINE MDL2P(iostatusD3D) fld_info(cfld)%ntrange=(IFHR-ID(18))/ITD3D endif fld_info(cfld)%tinvstat=ITD3D -!$omp parallel do private(i,j,jj) +!$omp parallel do private(i,j,ii,jj) do j=1,jend-jsta+1 jj = jsta+j-1 - do i=1,im - datapd(i,j,cfld) = GRID1(i,jj) + do i=1,iend-ista+1 + ii=ista+i-1 + datapd(i,j,cfld) = GRID1(ii,jj) enddo enddo endif @@ -2985,7 +2919,7 @@ SUBROUTINE MDL2P(iostatusD3D) IF (LVLS(LP,IGET(371)) > 0) THEN !$omp parallel do private(i,j) DO J=JSTA,JEND - DO I=1,IM + DO I=ISTA,IEND GRID1(I,J) = D3DSL(i,j,18) ENDDO ENDDO @@ -3018,11 +2952,12 @@ SUBROUTINE MDL2P(iostatusD3D) fld_info(cfld)%ntrange=(IFHR-ID(18))/ITD3D endif fld_info(cfld)%tinvstat=ITD3D -!$omp parallel do private(i,j,jj) +!$omp parallel do private(i,j,ii,jj) do j=1,jend-jsta+1 jj = jsta+j-1 - do i=1,im - datapd(i,j,cfld) = GRID1(i,jj) + do i=1,iend-ista+1 + ii=ista+i-1 + datapd(i,j,cfld) = GRID1(ii,jj) enddo enddo endif @@ -3033,7 +2968,7 @@ SUBROUTINE MDL2P(iostatusD3D) IF (LVLS(LP,IGET(372)) > 0) THEN !$omp parallel do private(i,j) DO J=JSTA,JEND - DO I=1,IM + DO I=ISTA,IEND GRID1(I,J) = D3DSL(i,j,19) ENDDO ENDDO @@ -3065,11 +3000,12 @@ SUBROUTINE MDL2P(iostatusD3D) fld_info(cfld)%ntrange=(IFHR-ID(18))/ITD3D endif fld_info(cfld)%tinvstat=ITD3D -!$omp parallel do private(i,j,jj) +!$omp parallel do private(i,j,ii,jj) do j=1,jend-jsta+1 jj = jsta+j-1 - do i=1,im - datapd(i,j,cfld) = GRID1(i,jj) + do i=1,iend-ista+1 + ii=ista+i-1 + datapd(i,j,cfld) = GRID1(ii,jj) enddo enddo endif @@ -3080,7 +3016,7 @@ SUBROUTINE MDL2P(iostatusD3D) IF (LVLS(LP,IGET(373)) > 0) THEN !$omp parallel do private(i,j) DO J=JSTA,JEND - DO I=1,IM + DO I=ISTA,IEND GRID1(I,J) = D3DSL(i,j,20) ENDDO ENDDO @@ -3113,11 +3049,12 @@ SUBROUTINE MDL2P(iostatusD3D) fld_info(cfld)%ntrange=(IFHR-ID(18))/ITD3D endif fld_info(cfld)%tinvstat=ITD3D -!$omp parallel do private(i,j,jj) +!$omp parallel do private(i,j,ii,jj) do j=1,jend-jsta+1 jj = jsta+j-1 - do i=1,im - datapd(i,j,cfld) = GRID1(i,jj) + do i=1,iend-ista+1 + ii=ista+i-1 + datapd(i,j,cfld) = GRID1(ii,jj) enddo enddo endif @@ -3128,7 +3065,7 @@ SUBROUTINE MDL2P(iostatusD3D) IF (LVLS(LP,IGET(374)) > 0) THEN !$omp parallel do private(i,j) DO J=JSTA,JEND - DO I=1,IM + DO I=ISTA,IEND GRID1(I,J) = D3DSL(i,j,21) ENDDO ENDDO @@ -3161,11 +3098,12 @@ SUBROUTINE MDL2P(iostatusD3D) fld_info(cfld)%ntrange=(IFHR-ID(18))/ITD3D endif fld_info(cfld)%tinvstat=ITD3D -!$omp parallel do private(i,j,jj) +!$omp parallel do private(i,j,ii,jj) do j=1,jend-jsta+1 jj = jsta+j-1 - do i=1,im - datapd(i,j,cfld) = GRID1(i,jj) + do i=1,iend-ista+1 + ii=ista+i-1 + datapd(i,j,cfld) = GRID1(ii,jj) enddo enddo endif @@ -3176,7 +3114,7 @@ SUBROUTINE MDL2P(iostatusD3D) IF (LVLS(LP,IGET(375)) > 0) THEN !$omp parallel do private(i,j) DO J=JSTA,JEND - DO I=1,IM + DO I=ISTA,IEND GRID1(I,J) = D3DSL(i,j,22) ENDDO ENDDO @@ -3208,11 +3146,12 @@ SUBROUTINE MDL2P(iostatusD3D) fld_info(cfld)%ntrange=(IFHR-ID(18))/ITD3D endif fld_info(cfld)%tinvstat=ITD3D -!$omp parallel do private(i,j,jj) +!$omp parallel do private(i,j,ii,jj) do j=1,jend-jsta+1 jj = jsta+j-1 - do i=1,im - datapd(i,j,cfld) = GRID1(i,jj) + do i=1,iend-ista+1 + ii=ista+i-1 + datapd(i,j,cfld) = GRID1(ii,jj) enddo enddo endif @@ -3223,7 +3162,7 @@ SUBROUTINE MDL2P(iostatusD3D) IF (LVLS(LP,IGET(379)) > 0) THEN !$omp parallel do private(i,j) DO J=JSTA,JEND - DO I=1,IM + DO I=ISTA,IEND IF(D3DSL(i,j,1)/=SPVAL)THEN GRID1(I,J) = D3DSL(i,j,1) + D3DSL(i,j,2) & + D3DSL(i,j,3) + D3DSL(i,j,4) & @@ -3261,11 +3200,12 @@ SUBROUTINE MDL2P(iostatusD3D) fld_info(cfld)%ntrange=(IFHR-ID(18))/ITD3D endif fld_info(cfld)%tinvstat=ITD3D -!$omp parallel do private(i,j,jj) +!$omp parallel do private(i,j,ii,jj) do j=1,jend-jsta+1 jj = jsta+j-1 - do i=1,im - datapd(i,j,cfld) = GRID1(i,jj) + do i=1,iend-ista+1 + ii=ista+i-1 + datapd(i,j,cfld) = GRID1(ii,jj) enddo enddo endif @@ -3276,7 +3216,7 @@ SUBROUTINE MDL2P(iostatusD3D) IF (LVLS(LP,IGET(391)) > 0) THEN !$omp parallel do private(i,j) DO J=JSTA,JEND - DO I=1,IM + DO I=ISTA,IEND GRID1(I,J) = D3DSL(i,j,23) ENDDO ENDDO @@ -3309,11 +3249,12 @@ SUBROUTINE MDL2P(iostatusD3D) fld_info(cfld)%ntrange=(IFHR-ID(18))/ITD3D endif fld_info(cfld)%tinvstat=ITD3D -!$omp parallel do private(i,j,jj) +!$omp parallel do private(i,j,ii,jj) do j=1,jend-jsta+1 jj = jsta+j-1 - do i=1,im - datapd(i,j,cfld) = GRID1(i,jj) + do i=1,iend-ista+1 + ii=ista+i-1 + datapd(i,j,cfld) = GRID1(ii,jj) enddo enddo endif @@ -3324,7 +3265,7 @@ SUBROUTINE MDL2P(iostatusD3D) IF (LVLS(LP,IGET(392)) > 0) THEN !$omp parallel do private(i,j) DO J=JSTA,JEND - DO I=1,IM + DO I=ISTA,IEND GRID1(I,J) = D3DSL(i,j,24) ENDDO ENDDO @@ -3357,11 +3298,12 @@ SUBROUTINE MDL2P(iostatusD3D) fld_info(cfld)%ntrange=(IFHR-ID(18))/ITD3D endif fld_info(cfld)%tinvstat=ITD3D -!$omp parallel do private(i,j,jj) +!$omp parallel do private(i,j,ii,jj) do j=1,jend-jsta+1 jj = jsta+j-1 - do i=1,im - datapd(i,j,cfld) = GRID1(i,jj) + do i=1,iend-ista+1 + ii=ista+i-1 + datapd(i,j,cfld) = GRID1(ii,jj) enddo enddo endif @@ -3372,7 +3314,7 @@ SUBROUTINE MDL2P(iostatusD3D) IF (LVLS(LP,IGET(393)) > 0) THEN !$omp parallel do private(i,j) DO J=JSTA,JEND - DO I=1,IM + DO I=ISTA,IEND GRID1(I,J) = D3DSL(i,j,25) ENDDO ENDDO @@ -3405,11 +3347,12 @@ SUBROUTINE MDL2P(iostatusD3D) fld_info(cfld)%ntrange=(IFHR-ID(18))/ITD3D endif fld_info(cfld)%tinvstat=ITD3D -!$omp parallel do private(i,j,jj) +!$omp parallel do private(i,j,ii,jj) do j=1,jend-jsta+1 jj = jsta+j-1 - do i=1,im - datapd(i,j,cfld) = GRID1(i,jj) + do i=1,iend-ista+1 + ii=ista+i-1 + datapd(i,j,cfld) = GRID1(ii,jj) enddo enddo endif @@ -3420,7 +3363,7 @@ SUBROUTINE MDL2P(iostatusD3D) IF (LVLS(LP,IGET(394)) > 0) THEN !$omp parallel do private(i,j) DO J=JSTA,JEND - DO I=1,IM + DO I=ISTA,IEND GRID1(I,J) = D3DSL(i,j,26) ENDDO ENDDO @@ -3453,11 +3396,12 @@ SUBROUTINE MDL2P(iostatusD3D) fld_info(cfld)%ntrange=(IFHR-ID(18))/ITD3D endif fld_info(cfld)%tinvstat=ITD3D -!$omp parallel do private(i,j,jj) +!$omp parallel do private(i,j,ii,jj) do j=1,jend-jsta+1 jj = jsta+j-1 - do i=1,im - datapd(i,j,cfld) = GRID1(i,jj) + do i=1,iend-ista+1 + ii=ista+i-1 + datapd(i,j,cfld) = GRID1(ii,jj) enddo enddo endif @@ -3468,7 +3412,7 @@ SUBROUTINE MDL2P(iostatusD3D) IF (LVLS(LP,IGET(395)) > 0) THEN !$omp parallel do private(i,j) DO J=JSTA,JEND - DO I=1,IM + DO I=ISTA,IEND GRID1(I,J) = D3DSL(i,j,27) ENDDO ENDDO @@ -3501,11 +3445,12 @@ SUBROUTINE MDL2P(iostatusD3D) fld_info(cfld)%ntrange=(IFHR-ID(18))/ITD3D endif fld_info(cfld)%tinvstat=ITD3D -!$omp parallel do private(i,j,jj) +!$omp parallel do private(i,j,ii,jj) do j=1,jend-jsta+1 jj = jsta+j-1 - do i=1,im - datapd(i,j,cfld) = GRID1(i,jj) + do i=1,iend-ista+1 + ii=ista+i-1 + datapd(i,j,cfld) = GRID1(ii,jj) enddo enddo endif @@ -3515,7 +3460,7 @@ SUBROUTINE MDL2P(iostatusD3D) ! CHUANG: COMPUTE HAINES INDEX IF (IGET(455) > 0) THEN - ii=im/2+100 + ii=(ista+iend)/2+100 jj=(jsta+jend)/2-100 IF(ABS(SPL(LP)-50000.) 17. .AND. DUM1 <= 21.) THEN - ISTA = 2 + ISTAA = 2 ELSE - ISTA = 3 + ISTAA = 3 END IF DUM1 = TSL(I,J)-TDSL(I,J) IF(DUM1 <= 14.) THEN @@ -3551,7 +3496,7 @@ SUBROUTINE MDL2P(iostatusD3D) IMOIS = 3 END IF IF(TSL(I,J) 5. .AND. DUM1 <= 10.) THEN - ISTA = 2 + ISTAA = 2 ELSE - ISTA = 3 + ISTAA = 3 END IF DUM1 = TSL(I,J)-TDSL(I,J) IF(DUM1 <= 5.) THEN @@ -3597,7 +3542,7 @@ SUBROUTINE MDL2P(iostatusD3D) ! if(i==570 .and. j==574)print*,'mid haines index:',i,j,luhi,tsl(i,j) & ! ,tprs(i,j,luhi),tdsl(i,j),ista,imois,spl(luhi),spl(lp),haines(i,j) IF(TSL(I,J) 3. .AND. DUM1 <=7. ) THEN - ISTA = 2 + ISTAA = 2 ELSE - ISTA = 3 + ISTAA = 3 END IF DUM1 = TSL(I,J)-TDSL(I,J) IF(DUM1 <=5. ) THEN @@ -3641,7 +3586,7 @@ SUBROUTINE MDL2P(iostatusD3D) ! if(i==570 .and. j==574)print*,'low haines index:',i,j,luhi,tsl(i,j) & ! ,tprs(i,j,luhi),tdsl(i,j),ista,imois,spl(luhi),spl(lp),haines(i,j) IF(TSL(I,J) WONT DERIVE MESINGER SLP' END IF !$omp parallel do private(i,j) DO J=JSTA,JEND - DO I=1,IM + DO I=ISTA,IEND GRID1(I,J) = PSLP(I,J) ENDDO ENDDO @@ -3795,11 +3744,12 @@ SUBROUTINE MDL2P(iostatusD3D) if(grib == 'grib2')then cfld = cfld + 1 fld_info(cfld)%ifld = IAVBLFLD(IGET(023)) -!$omp parallel do private(i,j,jj) +!$omp parallel do private(i,j,ii,jj) do j=1,jend-jsta+1 jj = jsta+j-1 - do i=1,im - datapd(i,j,cfld) = GRID1(i,jj) + do i=1,iend-ista+1 + ii=ista+i-1 + datapd(i,j,cfld) = GRID1(ii,jj) enddo enddo endif @@ -3811,18 +3761,19 @@ SUBROUTINE MDL2P(iostatusD3D) CALL MAPSSLP(TPRS) !$omp parallel do private(i,j) DO J=JSTA,JEND - DO I=1,IM + DO I=ISTA,IEND GRID1(I,J) = PSLP(I,J) ENDDO ENDDO if(grib == 'grib2') then cfld = cfld + 1 fld_info(cfld)%ifld = IAVBLFLD(IGET(445)) -!$omp parallel do private(i,j,jj) +!$omp parallel do private(i,j,ii,jj) do j=1,jend-jsta+1 jj = jsta+j-1 - do i=1,im - datapd(i,j,cfld) = GRID1(i,jj) + do i=1,iend-ista+1 + ii=ista+i-1 + datapd(i,j,cfld) = GRID1(ii,jj) enddo enddo endif @@ -3843,7 +3794,7 @@ SUBROUTINE MDL2P(iostatusD3D) ! because MOS can't adjust to the much lower H !$omp parallel do private(i,j) DO J=JSTA,JEND - DO I=1,IM + DO I=ISTA,IEND IF(FSL(I,J)0 ) THEN + if(me==0)PRINT*,'CALLING SLR' + egrid1=spval + call calslr_roebber(TPRS,RHPRS,EGRID1) +!$omp parallel do private(i,j) + do j=jsta,jend + do i=ista,iend + if(egrid1(i,j) < spval) then + grid1(i,j)=1000./egrid1(i,j) + else + grid1(i,j)=spval + endif + enddo + enddo + if(grib=='grib2') then + cfld=cfld+1 + fld_info(cfld)%ifld=IAVBLFLD(IGET(1006)) +!$omp parallel do private(i,j,ii,jj) + do j=1,jend-jsta+1 + jj = jsta+j-1 + do i=1,iend-ista+1 + ii=ista+i-1 + datapd(i,j,cfld) = GRID1(ii,jj) + enddo + enddo + endif + ENDIF ! if(allocated(d3dsl)) deallocate(d3dsl) -if(allocated(dustsl)) deallocate(dustsl) if(allocated(smokesl)) deallocate(smokesl) +if(allocated(fv3dustsl)) deallocate(fv3dustsl) + if(me==0)PRINT*,'MDL2P completed' ! END OF ROUTINE. ! RETURN diff --git a/sorc/ncep_post.fd/MDL2SIGMA.f b/sorc/ncep_post.fd/MDL2SIGMA.f index 50bae24bc..6dcb2654e 100644 --- a/sorc/ncep_post.fd/MDL2SIGMA.f +++ b/sorc/ncep_post.fd/MDL2SIGMA.f @@ -20,6 +20,8 @@ !! 11-02064 J WANG - ADD GRIB2 option !! 20-03-25 J MENG - remove grib1 !! 21-03-11 B Cui - change local arrays to dimension (im,jsta:jend) +!! 21-10-14 J MENG - 2D DECOMPOSITION +!! 2022-09-01 S Trahan - fixed bugs where extreme atmospheric conditions can cause out-of-bounds access !! !! USAGE: CALL MDL2P !! INPUT ARGUMENT LIST: @@ -62,7 +64,7 @@ SUBROUTINE MDL2SIGMA h1m12, d00, h2, rd, g, gi, h99999 use ctlblk_mod, only: jsta_2l, jend_2u, spval, lp1, jsta, jend, lm, & grib, cfld, datapd, fld_info, me, jend_m, im, & - jm, im_jm + jm, im_jm, ista, iend, ista_2l, iend_2u, ista_m, iend_m use rqstfld_mod, only: iget, lvls, id, iavblfld, lvlsxml use gridspec_mod, only :gridtype !- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - @@ -80,14 +82,14 @@ SUBROUTINE MDL2SIGMA LOGICAL READTHK LOGICAL IOOMG,IOALL LOGICAL DONEFSL1,TSLDONE - real, dimension(im,jsta_2l:jend_2u) :: FSL, TSL, QSL, OSL, USL, VSL, Q2SL, & + real, dimension(ista_2l:iend_2u,jsta_2l:jend_2u) :: FSL, TSL, QSL, OSL, USL, VSL, Q2SL, & FSL1, CFRSIG, EGRID1, EGRID2 REAL GRID1(IM,JM) - real, dimension(im,jsta_2l:jend_2u) :: grid2 + real, dimension(ista_2l:iend_2u,jsta_2l:jend_2u) :: grid2 REAL SIGO(LSIG+1),DSIGO(LSIG),ASIGO(LSIG) ! - INTEGER,dimension(im,jsta_2l:jend_2u) :: NL1X,NL1XF + INTEGER,dimension(ista_2l:iend_2u,jsta_2l:jend_2u) :: NL1X,NL1XF ! ! !--- Definition of the following 2D (horizontal) dummy variables @@ -98,7 +100,7 @@ SUBROUTINE MDL2SIGMA ! QR1 - rain mixing ratio ! QS1 - snow mixing ratio ! - real, dimension(im,jsta_2l:jend_2u) :: C1D, QW1, QI1, QR1, QS1, QG1, AKH + real, dimension(ista_2l:iend_2u,jsta_2l:jend_2u) :: C1D, QW1, QI1, QR1, QS1, QG1, AKH ! integer I,J,L,LL,LP,LLMH,II,JJ,JJB,JJE,NHOLD real PFSIGO,APFSIGO,PSIGO,APSIGO,PNL1,PU,ZU,TU,QU,QSAT, & @@ -196,7 +198,7 @@ SUBROUTINE MDL2SIGMA END IF ! OBTAIN GEOPOTENTIAL AT 1ST LEVEL DO J=JSTA_2L,JEND_2U - DO I=1,IM + DO I=ISTA_2L,IEND_2U FSL(I,J)=SPVAL AKH(I,J)=SPVAL NL1XF(I,J)=LP1 @@ -208,7 +210,7 @@ SUBROUTINE MDL2SIGMA END DO END DO DO 167 J=JSTA,JEND - DO 167 I=1,IM + DO 167 I=ISTA_2L,IEND_2U DONEFSL1=.FALSE. PFSIGO=PTSIGO APFSIGO=LOG(PFSIGO) @@ -276,8 +278,9 @@ SUBROUTINE MDL2SIGMA AHF =D00 FAC =D00 DONEFSL1=.TRUE. - ELSEIF(T(I,J,NL1XF(I,J))0) THEN !$omp parallel do DO J=JSTA,JEND - DO I=1,IM + DO I=ISTA,IEND IF(FSL1(I,J)0) THEN !$omp parallel do DO J=JSTA,JEND - DO I=1,IM + DO I=ISTA,IEND GRID1(I,J)=AKH(I,J) ENDDO ENDDO if(grib=="grib2" )then cfld=cfld+1 fld_info(cfld)%ifld=IAVBLFLD(IGET(243)) - datapd(1:im,1:jend-jsta+1,cfld)=GRID1(1:im,jsta:jend) + datapd(1:iend-ista+1,1:jend-jsta+1,cfld)=GRID1(ista:iend,jsta:jend) endif if(me==0)print*,'output Heat Diffusivity' @@ -353,7 +357,7 @@ SUBROUTINE MDL2SIGMA NHOLD=0 ! DO J=JSTA_2L,JEND_2U - DO I=1,IM + DO I=ISTA_2L,IEND_2U ! TSL(I,J)=SPVAL @@ -407,7 +411,7 @@ SUBROUTINE MDL2SIGMA !hc J=JHOLD(NN) DO 220 J=JSTA,JEND ! Moorthi on Nov 26 2014 ! DO 220 J=JSTA_2L,JEND_2U - DO 220 I=1,IM + DO 220 I=ISTA,IEND LL=NL1X(I,J) !--------------------------------------------------------------------- !*** VERTICAL INTERPOLATION OF GEOPOTENTIAL, TEMPERATURE, SPECIFIC @@ -555,7 +559,7 @@ SUBROUTINE MDL2SIGMA ! ! OBTAIN GEOPOTENTIAL AND KH ON INTERFACES DO J=JSTA_2L,JEND_2U - DO I=1,IM + DO I=ISTA_2L,IEND_2U FSL(I,J)=SPVAL AKH(I,J)=SPVAL NL1XF(I,J)=LP1 @@ -571,7 +575,7 @@ SUBROUTINE MDL2SIGMA ! ! DO J=JSTA_2L,JEND_2U DO J=JSTA,JEND ! Moorthi on 26 Nov 2014 - DO I=1,IM + DO I=ISTA,IEND DONEFSL1=.FALSE. TSLDONE=.FALSE. LLMH = NINT(LMH(I,J)) @@ -655,8 +659,9 @@ SUBROUTINE MDL2SIGMA TSLDONE=.TRUE. ! ! - ELSEIF(T(I,J,NL1XF(I,J))0)THEN !$omp parallel do DO J=JSTA,JEND - DO I=1,IM + DO I=ISTA,IEND IF(FSL(I,J)0) THEN !$omp parallel do DO J=JSTA,JEND - DO I=1,IM + DO I=ISTA,IEND GRID1(I,J)=AKH(I,J) IF(LP==(LSIG+1))GRID1(I,J)=0.0 !! NO SLIP ASSUMTION FOR CMAQ ENDDO @@ -962,7 +1009,7 @@ SUBROUTINE MDL2SIGMA cfld=cfld+1 fld_info(cfld)%ifld=IAVBLFLD(IGET(243)) fld_info(cfld)%lvl=LVLSXML(LP+1,IGET(243)) - datapd(1:im,1:jend-jsta+1,cfld)=GRID1(1:im,jsta:jend) + datapd(1:iend-ista+1,1:jend-jsta+1,cfld)=GRID1(ista:iend,jsta:jend) endif if(me==0)print*,'output Heat Diffusivity' ENDIF @@ -973,7 +1020,7 @@ SUBROUTINE MDL2SIGMA IF(IGET(206)>0) THEN IF(LVLS(LP,IGET(206))>0) THEN DO J=JSTA,JEND - DO I=1,IM + DO I=ISTA,IEND GRID1(I,J)=TSL(I,J) ENDDO ENDDO @@ -981,7 +1028,7 @@ SUBROUTINE MDL2SIGMA cfld=cfld+1 fld_info(cfld)%ifld=IAVBLFLD(IGET(206)) fld_info(cfld)%lvl=LVLSXML(LP,IGET(206)) - datapd(1:im,1:jend-jsta+1,cfld)=GRID1(1:im,jsta:jend) + datapd(1:iend-ista+1,1:jend-jsta+1,cfld)=GRID1(ista:iend,jsta:jend) endif ENDIF ENDIF @@ -992,7 +1039,7 @@ SUBROUTINE MDL2SIGMA IF(LVLS(LP,IGET(216))>0)THEN !$omp parallel do DO J=JSTA,JEND - DO I=1,IM + DO I=ISTA,IEND LLMH = NINT(LMH(I,J)) GRID1(I,J)=PTSIGO+ASIGO(LP)*(PINT(I,J,LLMH+1)-PTSIGO) ENDDO @@ -1001,7 +1048,7 @@ SUBROUTINE MDL2SIGMA cfld=cfld+1 fld_info(cfld)%ifld=IAVBLFLD(IGET(216)) fld_info(cfld)%lvl=LVLSXML(LP,IGET(216)) - datapd(1:im,1:jend-jsta+1,cfld)=GRID1(1:im,jsta:jend) + datapd(1:iend-ista+1,1:jend-jsta+1,cfld)=GRID1(ista:iend,jsta:jend) endif ENDIF ENDIF @@ -1011,7 +1058,7 @@ SUBROUTINE MDL2SIGMA IF(IGET(207)>0)THEN IF(LVLS(LP,IGET(207))>0)THEN DO J=JSTA,JEND - DO I=1,IM + DO I=ISTA,IEND GRID1(I,J)=QSL(I,J) ENDDO ENDDO @@ -1020,7 +1067,7 @@ SUBROUTINE MDL2SIGMA cfld=cfld+1 fld_info(cfld)%ifld=IAVBLFLD(IGET(207)) fld_info(cfld)%lvl=LVLSXML(LP,IGET(207)) - datapd(1:im,1:jend-jsta+1,cfld)=GRID1(1:im,jsta:jend) + datapd(1:iend-ista+1,1:jend-jsta+1,cfld)=GRID1(ista:iend,jsta:jend) endif ENDIF ENDIF @@ -1030,7 +1077,7 @@ SUBROUTINE MDL2SIGMA IF(IGET(210)>0)THEN IF(LVLS(LP,IGET(210))>0)THEN DO J=JSTA,JEND - DO I=1,IM + DO I=ISTA,IEND GRID1(I,J)=OSL(I,J) ENDDO ENDDO @@ -1038,7 +1085,7 @@ SUBROUTINE MDL2SIGMA cfld=cfld+1 fld_info(cfld)%ifld=IAVBLFLD(IGET(210)) fld_info(cfld)%lvl=LVLSXML(LP,IGET(210)) - datapd(1:im,1:jend-jsta+1,cfld)=GRID1(1:im,jsta:jend) + datapd(1:iend-ista+1,1:jend-jsta+1,cfld)=GRID1(ista:iend,jsta:jend) endif ENDIF ENDIF @@ -1048,7 +1095,7 @@ SUBROUTINE MDL2SIGMA IF(IGET(208)>0.OR.IGET(209)>0)THEN IF(LVLS(LP,IGET(208))>0.OR.LVLS(LP,IGET(209))>0) then DO J=JSTA,JEND - DO I=1,IM + DO I=ISTA,IEND GRID1(I,J)=USL(I,J) GRID2(I,J)=VSL(I,J) ENDDO @@ -1057,11 +1104,11 @@ SUBROUTINE MDL2SIGMA cfld=cfld+1 fld_info(cfld)%ifld=IAVBLFLD(IGET(208)) fld_info(cfld)%lvl=LVLSXML(LP,IGET(208)) - datapd(1:im,1:jend-jsta+1,cfld)=GRID1(1:im,jsta:jend) + datapd(1:iend-ista+1,1:jend-jsta+1,cfld)=GRID1(ista:iend,jsta:jend) cfld=cfld+1 fld_info(cfld)%ifld=IAVBLFLD(IGET(209)) fld_info(cfld)%lvl=LVLSXML(LP,IGET(209)) - datapd(1:im,1:jend-jsta+1,cfld)=GRID1(1:im,jsta:jend) + datapd(1:iend-ista+1,1:jend-jsta+1,cfld)=GRID2(ista:iend,jsta:jend) endif ENDIF ENDIF @@ -1071,7 +1118,7 @@ SUBROUTINE MDL2SIGMA IF (IGET(217)>0) THEN IF (LVLS(LP,IGET(217))>0) THEN DO J=JSTA,JEND - DO I=1,IM + DO I=ISTA,IEND GRID1(I,J)=Q2SL(I,J) ENDDO ENDDO @@ -1079,7 +1126,7 @@ SUBROUTINE MDL2SIGMA cfld=cfld+1 fld_info(cfld)%ifld=IAVBLFLD(IGET(217)) fld_info(cfld)%lvl=LVLSXML(LP,IGET(217)) - datapd(1:im,1:jend-jsta+1,cfld)=GRID1(1:im,jsta:jend) + datapd(1:iend-ista+1,1:jend-jsta+1,cfld)=GRID1(ista:iend,jsta:jend) endif ENDIF ENDIF @@ -1089,7 +1136,7 @@ SUBROUTINE MDL2SIGMA IF (IGET(211)>0) THEN IF (LVLS(LP,IGET(211))>0) THEN DO J=JSTA,JEND - DO I=1,IM + DO I=ISTA,IEND GRID1(I,J)=QW1(I,J) ENDDO ENDDO @@ -1097,7 +1144,7 @@ SUBROUTINE MDL2SIGMA cfld=cfld+1 fld_info(cfld)%ifld=IAVBLFLD(IGET(211)) fld_info(cfld)%lvl=LVLSXML(LP,IGET(211)) - datapd(1:im,1:jend-jsta+1,cfld)=GRID1(1:im,jsta:jend) + datapd(1:iend-ista+1,1:jend-jsta+1,cfld)=GRID1(ista:iend,jsta:jend) endif ENDIF ENDIF @@ -1107,7 +1154,7 @@ SUBROUTINE MDL2SIGMA IF (IGET(212)>0) THEN IF (LVLS(LP,IGET(212))>0) THEN DO J=JSTA,JEND - DO I=1,IM + DO I=ISTA,IEND GRID1(I,J)=QI1(I,J) ENDDO ENDDO @@ -1115,7 +1162,7 @@ SUBROUTINE MDL2SIGMA cfld=cfld+1 fld_info(cfld)%ifld=IAVBLFLD(IGET(212)) fld_info(cfld)%lvl=LVLSXML(LP,IGET(212)) - datapd(1:im,1:jend-jsta+1,cfld)=GRID1(1:im,jsta:jend) + datapd(1:iend-ista+1,1:jend-jsta+1,cfld)=GRID1(ista:iend,jsta:jend) endif ENDIF ENDIF @@ -1124,7 +1171,7 @@ SUBROUTINE MDL2SIGMA IF (IGET(213)>0) THEN IF (LVLS(LP,IGET(213))>0) THEN DO J=JSTA,JEND - DO I=1,IM + DO I=ISTA,IEND GRID1(I,J)=QR1(I,J) ENDDO ENDDO @@ -1132,7 +1179,7 @@ SUBROUTINE MDL2SIGMA cfld=cfld+1 fld_info(cfld)%ifld=IAVBLFLD(IGET(213)) fld_info(cfld)%lvl=LVLSXML(LP,IGET(213)) - datapd(1:im,1:jend-jsta+1,cfld)=GRID1(1:im,jsta:jend) + datapd(1:iend-ista+1,1:jend-jsta+1,cfld)=GRID1(ista:iend,jsta:jend) endif ENDIF ENDIF @@ -1141,7 +1188,7 @@ SUBROUTINE MDL2SIGMA IF (IGET(214)>0) THEN IF (LVLS(LP,IGET(214))>0) THEN DO J=JSTA,JEND - DO I=1,IM + DO I=ISTA,IEND GRID1(I,J)=QS1(I,J) ENDDO ENDDO @@ -1149,7 +1196,7 @@ SUBROUTINE MDL2SIGMA cfld=cfld+1 fld_info(cfld)%ifld=IAVBLFLD(IGET(214)) fld_info(cfld)%lvl=LVLSXML(LP,IGET(214)) - datapd(1:im,1:jend-jsta+1,cfld)=GRID1(1:im,jsta:jend) + datapd(1:iend-ista+1,1:jend-jsta+1,cfld)=GRID1(ista:iend,jsta:jend) endif ENDIF ENDIF @@ -1158,7 +1205,7 @@ SUBROUTINE MDL2SIGMA IF (IGET(255)>0) THEN IF (LVLS(LP,IGET(255))>0) THEN DO J=JSTA,JEND - DO I=1,IM + DO I=ISTA,IEND GRID1(I,J)=QG1(I,J) ENDDO ENDDO @@ -1166,7 +1213,7 @@ SUBROUTINE MDL2SIGMA cfld=cfld+1 fld_info(cfld)%ifld=IAVBLFLD(IGET(255)) fld_info(cfld)%lvl=LVLSXML(LP,IGET(255)) - datapd(1:im,1:jend-jsta+1,cfld)=GRID1(1:im,jsta:jend) + datapd(1:iend-ista+1,1:jend-jsta+1,cfld)=GRID1(ista:iend,jsta:jend) endif ENDIF ENDIF @@ -1175,7 +1222,7 @@ SUBROUTINE MDL2SIGMA IF (IGET(215)>0) THEN IF (LVLS(LP,IGET(215))>0) THEN DO J=JSTA,JEND - DO I=1,IM + DO I=ISTA,IEND GRID1(I,J)=C1D(I,J) ENDDO ENDDO @@ -1183,7 +1230,7 @@ SUBROUTINE MDL2SIGMA cfld=cfld+1 fld_info(cfld)%ifld=IAVBLFLD(IGET(215)) fld_info(cfld)%lvl=LVLSXML(LP,IGET(215)) - datapd(1:im,1:jend-jsta+1,cfld)=GRID1(1:im,jsta:jend) + datapd(1:iend-ista+1,1:jend-jsta+1,cfld)=GRID1(ista:iend,jsta:jend) endif ENDIF ENDIF @@ -1192,7 +1239,7 @@ SUBROUTINE MDL2SIGMA IF (IGET(222)>0) THEN IF (LVLS(LP,IGET(222))>0) THEN DO J=JSTA,JEND - DO I=1,IM + DO I=ISTA,IEND GRID1(I,J)=CFRSIG(I,J) ENDDO ENDDO @@ -1200,7 +1247,7 @@ SUBROUTINE MDL2SIGMA cfld=cfld+1 fld_info(cfld)%ifld=IAVBLFLD(IGET(222)) fld_info(cfld)%lvl=LVLSXML(LP,IGET(222)) - datapd(1:im,1:jend-jsta+1,cfld)=GRID1(1:im,jsta:jend) + datapd(1:iend-ista+1,1:jend-jsta+1,cfld)=GRID1(ista:iend,jsta:jend) endif ENDIF ENDIF diff --git a/sorc/ncep_post.fd/MDL2SIGMA2.f b/sorc/ncep_post.fd/MDL2SIGMA2.f index aea8c2e4b..a02107e10 100644 --- a/sorc/ncep_post.fd/MDL2SIGMA2.f +++ b/sorc/ncep_post.fd/MDL2SIGMA2.f @@ -19,6 +19,8 @@ !! 04-11-24 H CHUANG - ADD FERRIER'S HYDROMETEOR FIELD !! 20-03-25 J MENG - remove grib1 !! 21-03-11 B Cui - change local arrays to dimension (im,jsta:jend) +!! 21-07-26 W Meng - Restrict compuatation from undefined grids +!! 21-10-14 J MENG - 2D DECOMPOSITION !! !! USAGE: CALL MDL2P !! INPUT ARGUMENT LIST: @@ -49,7 +51,8 @@ SUBROUTINE MDL2SIGMA2 use masks, only: lmh use params_mod, only: pq0, a2, a3, a4, rgamog use ctlblk_mod, only: pt, jsta_2l, jend_2u, spval, lp1, lm, jsta, jend,& - grib, cfld, datapd, fld_info, im, jm, im_jm + grib, cfld, datapd, fld_info, im, jm, im_jm, & + ista, iend, ista_2l, iend_2u use rqstfld_mod, only: iget, lvls, id, iavblfld, lvlsxml ! implicit none @@ -60,12 +63,12 @@ SUBROUTINE MDL2SIGMA2 ! LOGICAL READTHK ! REAL,dimension(im,jm) :: FSL, TSL, QSL, osl, usl, vsl, q2sl, fsl1, & - REAL,dimension(im,jsta_2l:jend_2u) :: TSL - REAL,dimension(im,jsta_2l:jend_2u) :: grid1 + REAL,dimension(ista_2l:iend_2u,jsta_2l:jend_2u) :: TSL + REAL,dimension(ista_2l:iend_2u,jsta_2l:jend_2u) :: grid1 REAL SIGO(LSIG+1),DSIGO(LSIG),ASIGO(LSIG) ! ! INTEGER,dimension(im,jm) :: IHOLD,JHOLD,NL1X,NL1XF - INTEGER,dimension(im,jsta_2l:jend_2u) :: NL1X + INTEGER,dimension(ista_2l:iend_2u,jsta_2l:jend_2u) :: NL1X ! ! !--- Definition of the following 2D (horizontal) dummy variables @@ -133,7 +136,7 @@ SUBROUTINE MDL2SIGMA2 NHOLD=0 ! DO J=JSTA_2L,JEND_2U - DO I=1,IM + DO I=ISTA_2L,IEND_2U ! TSL(I,J)=SPVAL @@ -174,7 +177,7 @@ SUBROUTINE MDL2SIGMA2 ! DO 220 J=JSTA,JEND ! DO 220 J=JSTA_2L,JEND_2U DO 220 J=JSTA,JEND ! Moorthi on Nov 26, 2014 - DO 220 I=1,IM + DO 220 I=ISTA,IEND LL=NL1X(I,J) !--------------------------------------------------------------------- !*** VERTICAL INTERPOLATION OF GEOPOTENTIAL, TEMPERATURE, SPECIFIC @@ -185,7 +188,8 @@ SUBROUTINE MDL2SIGMA2 LLMH = NINT(LMH(I,J)) PSIGO=PTSIGO+ASIGO(LP)*(PINT(I,J,LLMH+1)-PTSIGO) APSIGO=LOG(PSIGO) - IF(NL1X(I,J)<=LLMH)THEN + IF(NL1X(I,J)<=LLMH.and. & + (PMID(I,J,LL)-PMID(I,J,LL-1))/=0.)THEN ! !--------------------------------------------------------------------- ! INTERPOLATE LINEARLY IN LOG(P) @@ -262,7 +266,7 @@ SUBROUTINE MDL2SIGMA2 IF(IGET(296)>0) THEN IF(LVLS(LP,IGET(296))>0)THEN DO J=JSTA,JEND - DO I=1,IM + DO I=ISTA,IEND GRID1(I,J)=TSL(I,J) ENDDO ENDDO @@ -270,7 +274,7 @@ SUBROUTINE MDL2SIGMA2 cfld=cfld+1 fld_info(cfld)%ifld=IAVBLFLD(IGET(296)) fld_info(cfld)%lvl=LVLSXML(LP,IGET(296)) - datapd(1:im,1:jend-jsta+1,cfld)=GRID1(1:im,jsta:jend) + datapd(1:iend-ista+1,1:jend-jsta+1,cfld)=GRID1(ista:iend,jsta:jend) endif ENDIF ENDIF diff --git a/sorc/ncep_post.fd/MDL2STD_P.f b/sorc/ncep_post.fd/MDL2STD_P.f index bcb81f375..ee5ff8a94 100644 --- a/sorc/ncep_post.fd/MDL2STD_P.f +++ b/sorc/ncep_post.fd/MDL2STD_P.f @@ -1,40 +1,19 @@ !> @file -! . . . -!> SUBPROGRAM: MDL2STD_P VERT INTRP OF MODEL LVLS TO STANDARD ATMOSPEHRIC PRESSURE -!! PRGRMMR: Y Mao ORG: W/NP22 DATE: Sep 2019 -!! -!! ABSTRACT: -!! ORIGINATED FROM MISCLN.f. THIS ROUTINE INTERPOLATE TO STANDARD -!! ATMOSPHERIC PRESSURE, INSTEAD OF MODEL PRESSURE -!! -!! PROGRAM HISTORY LOG: -!! 19-09-24 Y Mao - REWRITTEN FROM MISCLN.f -!! 20-05-20 J MENG - CALRH unification with NAM scheme -!! 20-11-10 J MENG - USE UPP_PHYSICS MODULE -!! 21-03-11 B Cui - change local arrays to dimension (im,jsta:jend) -!! -!! USAGE: CALL MDL2STD_P -!! INPUT ARGUMENT LIST: -!! -!! OUTPUT ARGUMENT LIST: -!! NONE -!! -!! OUTPUT FILES: -!! NONE -!! -!! SUBPROGRAMS CALLED: -!! UTILITIES: -!! FDLVL_UV - COMPUTE FD LEVEL WIND (AGL OR MSL). -!! FDLVL_MASS - COMPUTE FD LEVEL MASS (AGL OR MSL). -!! -!! LIBRARY: -!! COMMON - CTLBLK -!! RQSTFLD -!! -!! ATTRIBUTES: -!! LANGUAGE: FORTRAN 90 -!! MACHINE : IBM SP -!! +!> @brief mdl2std_p() vert intrp of model lvls to standard atmospheric pressure. +!> +!> Originated from MISCLN.f. This routine interpolate to standard +!> atmospheric pressure, instead of model pressure. +!> +!> ### Program History Log +!> Date | Programmer | Comments +!> -----|------------|--------- +!> 2019-09-24 | Y Mao | Rewritten from MISCLN.f +!> 2020-05-20 | J Meng | CALRH unification with NAM scheme +!> 2020-11-10 | J Meng | Use UPP_PHYSICS Module +!> 2021-03-11 | B Cui | Change local arrays to dimension (im,jsta:jend) +!> 2021-10-14 | J MENG | 2D DECOMPOSITION +!> +!> @author Y Mao W/NP22 @date 2019-09-24 SUBROUTINE MDL2STD_P() ! @@ -44,10 +23,11 @@ SUBROUTINE MDL2STD_P() use vrbls3d, only: ICING_GFIP, ICING_GFIS, catedr, mwt, gtg use ctlblk_mod, only: grib, cfld, fld_info, datapd, im, jsta, jend, jm, & lm, htfd, spval, nfd, me,& - jsta_2l, jend_2u, MODELNAME + jsta_2l, jend_2u, MODELNAME,& + ista, iend, ista_2l, iend_2u use rqstfld_mod, only: iget, lvls, iavblfld, lvlsxml use grib2_module, only: pset - use upp_physics, only: CALRH + use upp_physics, only: CALRH, CALVOR !- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - ! @@ -55,11 +35,11 @@ SUBROUTINE MDL2STD_P() real, external :: P2H, relabel - real,dimension(im,jsta_2l:jend_2u) :: grid1 - real,dimension(im,jsta_2l:jend_2u) :: EGRID1,EGRID2,EGRID3,EGRID4 + real,dimension(ista_2l:iend_2u,jsta_2l:jend_2u) :: grid1 + real,dimension(ista_2l:iend_2u,jsta_2l:jend_2u) :: EGRID1,EGRID2,EGRID3,EGRID4 ! - integer I,J,jj,L,ITYPE,IFD,ITYPEFDLVL(NFD) + integer I,J,ii,jj,L,ITYPE,IFD,ITYPEFDLVL(NFD) ! Variables introduced to allow FD levels from control file - Y Mao integer :: N,NFDCTL @@ -119,8 +99,8 @@ SUBROUTINE MDL2STD_P() ENDDO if(allocated(VAR3D1)) deallocate(VAR3D1) if(allocated(VAR3D2)) deallocate(VAR3D2) - allocate(VAR3D1(IM,JSTA_2L:JEND_2U,NFDCTL)) - allocate(VAR3D2(IM,JSTA_2L:JEND_2U,NFDCTL)) + allocate(VAR3D1(ISTA_2L:IEND_2U,JSTA_2L:JEND_2U,NFDCTL)) + allocate(VAR3D2(ISTA_2L:IEND_2U,JSTA_2L:JEND_2U,NFDCTL)) VAR3D1=SPVAL VAR3D2=SPVAL @@ -131,7 +111,7 @@ SUBROUTINE MDL2STD_P() IF (LVLS(IFD,IGET(520)) > 0) THEN !$omp parallel do private(i,j) DO J=JSTA,JEND - DO I=1,IM + DO I=ISTA,IEND GRID1(I,J)=VAR3D1(I,J,IFD) ENDDO ENDDO @@ -139,11 +119,12 @@ SUBROUTINE MDL2STD_P() cfld=cfld+1 fld_info(cfld)%ifld=IAVBLFLD(IGET(520)) fld_info(cfld)%lvl=LVLSXML(IFD,IGET(520)) -!$omp parallel do private(i,j,jj) +!$omp parallel do private(i,j,ii,jj) do j=1,jend-jsta+1 jj = jsta+j-1 - do i=1,im - datapd(i,j,cfld) = GRID1(i,jj) + do i=1,iend-ista+1 + ii = ista+i-1 + datapd(i,j,cfld) = GRID1(ii,jj) enddo enddo endif @@ -152,7 +133,7 @@ SUBROUTINE MDL2STD_P() IF (LVLS(IFD,IGET(521)) > 0) THEN !$omp parallel do private(i,j) DO J=JSTA,JEND - DO I=1,IM + DO I=ISTA,IEND GRID1(I,J)=VAR3D2(I,J,IFD) ENDDO ENDDO @@ -160,23 +141,24 @@ SUBROUTINE MDL2STD_P() cfld=cfld+1 fld_info(cfld)%ifld=IAVBLFLD(IGET(521)) fld_info(cfld)%lvl=LVLSXML(IFD,IGET(521)) -!$omp parallel do private(i,j,jj) +!$omp parallel do private(i,j,ii,jj) do j=1,jend-jsta+1 jj = jsta+j-1 - do i=1,im - datapd(i,j,cfld) = GRID1(i,jj) + do i=1,iend-ista+1 + ii = ista+i-1 + datapd(i,j,cfld) = GRID1(ii,jj) enddo enddo endif ENDIF ! ABSV IF (LVLS(IFD,IGET(524)) > 0) THEN - EGRID1=VAR3D1(1:IM,JSTA_2L:JEND_2U,IFD) - EGRID2=VAR3D2(1:IM,JSTA_2L:JEND_2U,IFD) + EGRID1=VAR3D1(ISTA_2L:IEND_2U,JSTA_2L:JEND_2U,IFD) + EGRID2=VAR3D2(ISTA_2L:IEND_2U,JSTA_2L:JEND_2U,IFD) call CALVOR(EGRID1,EGRID2,EGRID3) !$omp parallel do private(i,j) DO J=JSTA,JEND - DO I=1,IM + DO I=ISTA,IEND GRID1(I,J)=EGRID3(I,J) ENDDO ENDDO @@ -184,11 +166,12 @@ SUBROUTINE MDL2STD_P() cfld=cfld+1 fld_info(cfld)%ifld=IAVBLFLD(IGET(524)) fld_info(cfld)%lvl=LVLSXML(IFD,IGET(524)) -!$omp parallel do private(i,j,jj) +!$omp parallel do private(i,j,ii,jj) do j=1,jend-jsta+1 jj = jsta+j-1 - do i=1,im - datapd(i,j,cfld) = GRID1(i,jj) + do i=1,iend-ista+1 + ii = ista+i-1 + datapd(i,j,cfld) = GRID1(ii,jj) enddo enddo endif @@ -206,7 +189,7 @@ SUBROUTINE MDL2STD_P() if(allocated(QIN)) deallocate(QIN) if(allocated(QTYPE)) deallocate(QTYPE) - ALLOCATE(QIN(IM,JSTA:JEND,LM,NFDMAX)) + ALLOCATE(QIN(ISTA:IEND,JSTA:JEND,LM,NFDMAX)) ALLOCATE(QTYPE(NFDMAX)) ! INITIALIZE INPUTS @@ -214,53 +197,53 @@ SUBROUTINE MDL2STD_P() IF(IGET(450) > 0) THEN nFDS = nFDS + 1 IDS(nFDS) = 450 - QIN(1:IM,JSTA:JEND,1:LM,nFDS)=icing_gfip(1:IM,JSTA:JEND,1:LM) + QIN(ISTA:IEND,JSTA:JEND,1:LM,nFDS)=icing_gfip(ISTA:IEND,JSTA:JEND,1:LM) QTYPE(nFDS)="O" end if IF(IGET(480) > 0) THEN nFDS = nFDS + 1 IDS(nFDS) = 480 - QIN(1:IM,JSTA:JEND,1:LM,nFDS)=icing_gfis(1:IM,JSTA:JEND,1:LM) + QIN(ISTA:IEND,JSTA:JEND,1:LM,nFDS)=icing_gfis(ISTA:IEND,JSTA:JEND,1:LM) QTYPE(nFDS)="O" end if IF(IGET(464) > 0) THEN nFDS = nFDS + 1 IDS(nFDS) = 464 - QIN(1:IM,JSTA:JEND,1:LM,nFDS)=gtg(1:IM,JSTA:JEND,1:LM) + QIN(ISTA:IEND,JSTA:JEND,1:LM,nFDS)=gtg(ISTA:IEND,JSTA:JEND,1:LM) QTYPE(nFDS)="O" end if IF(IGET(465) > 0) THEN nFDS = nFDS + 1 IDS(nFDS) = 465 - QIN(1:IM,JSTA:JEND,1:LM,nFDS)=catedr(1:IM,JSTA:JEND,1:LM) + QIN(ISTA:IEND,JSTA:JEND,1:LM,nFDS)=catedr(ISTA:IEND,JSTA:JEND,1:LM) QTYPE(nFDS)="O" end if IF(IGET(466) > 0) THEN nFDS = nFDS + 1 IDS(nFDS) = 466 - QIN(1:IM,JSTA:JEND,1:LM,nFDS)=mwt(1:IM,JSTA:JEND,1:LM) + QIN(ISTA:IEND,JSTA:JEND,1:LM,nFDS)=mwt(ISTA:IEND,JSTA:JEND,1:LM) QTYPE(nFDS)="O" end if IF(IGET(519) > 0) THEN nFDS = nFDS + 1 IDS(nFDS) = 519 - QIN(1:IM,JSTA:JEND,1:LM,nFDS)=T(1:IM,JSTA:JEND,1:LM) + QIN(ISTA:IEND,JSTA:JEND,1:LM,nFDS)=T(ISTA:IEND,JSTA:JEND,1:LM) QTYPE(nFDS)="T" end if IF(IGET(523) > 0) THEN nFDS = nFDS + 1 IDS(nFDS) = 523 - QIN(1:IM,JSTA:JEND,1:LM,nFDS)=OMGA(1:IM,JSTA:JEND,1:LM) + QIN(ISTA:IEND,JSTA:JEND,1:LM,nFDS)=OMGA(ISTA:IEND,JSTA:JEND,1:LM) QTYPE(nFDS)="W" end if IF(IGET(525) > 0) THEN nFDS = nFDS + 1 IDS(nFDS) = 525 - QIN(1:IM,JSTA:JEND,1:LM,nFDS)=QQW(1:IM,JSTA:JEND,1:LM)+ & - QQR(1:IM,JSTA:JEND,1:LM)+ & - QQS(1:IM,JSTA:JEND,1:LM)+ & - QQG(1:IM,JSTA:JEND,1:LM)+ & - QQI(1:IM,JSTA:JEND,1:LM) + QIN(ISTA:IEND,JSTA:JEND,1:LM,nFDS)=QQW(ISTA:IEND,JSTA:JEND,1:LM)+ & + QQR(ISTA:IEND,JSTA:JEND,1:LM)+ & + QQS(ISTA:IEND,JSTA:JEND,1:LM)+ & + QQG(ISTA:IEND,JSTA:JEND,1:LM)+ & + QQI(ISTA:IEND,JSTA:JEND,1:LM) QTYPE(nFDS)="C" end if @@ -281,7 +264,7 @@ SUBROUTINE MDL2STD_P() ENDDO if(allocated(QFD)) deallocate(QFD) - ALLOCATE(QFD(IM,JSTA:JEND,NFDCTL,nFDS)) + ALLOCATE(QFD(ISTA:IEND,JSTA:JEND,NFDCTL,nFDS)) QFD=SPVAL call FDLVL_MASS(ITYPEFDLVLCTL,NFDCTL,pset%param(N)%level,HTFDCTL,nFDS,QIN,QTYPE,QFD) @@ -296,7 +279,7 @@ SUBROUTINE MDL2STD_P() N1=N DO IFD = 1,NFDCTL DO J=JSTA,JEND - DO I=1,IM + DO I=ISTA,IEND if(QFD(I,J,IFD,N) < SPVAL) then QFD(I,J,IFD,N)=max(0.0,QFD(I,J,IFD,N)) QFD(I,J,IFD,N)=min(1.0,QFD(I,J,IFD,N)) @@ -311,7 +294,7 @@ SUBROUTINE MDL2STD_P() N1=N DO IFD = 1,NFDCTL DO J=JSTA,JEND - DO I=1,IM + DO I=ISTA,IEND if(QFD(I,J,IFD,N) < SPVAL) then QFD(I,J,IFD,N)=max(0.0,QFD(I,J,IFD,N)) endif @@ -330,7 +313,7 @@ SUBROUTINE MDL2STD_P() if(iID==480) then DO IFD = 1,NFDCTL DO J=JSTA,JEND - DO I=1,IM + DO I=ISTA,IEND if(N1 > 0) then ! Icing severity is 0 when icing potential is too small if(QFD(I,J,IFD,N1) < 0.001) QFD(I,J,IFD,N)=0. @@ -356,7 +339,7 @@ SUBROUTINE MDL2STD_P() if(iID==464 .or. iID==465 .or. iID==466) then DO IFD = 1,NFDCTL DO J=JSTA,JEND - DO I=1,IM + DO I=ISTA,IEND if(QFD(I,J,IFD,N) < SPVAL) then QFD(I,J,IFD,N)=max(0.0,QFD(I,J,IFD,N)) QFD(I,J,IFD,N)=min(1.0,QFD(I,J,IFD,N)) @@ -375,7 +358,7 @@ SUBROUTINE MDL2STD_P() IF (LVLS(IFD,IGET(iID)) > 0) THEN !$omp parallel do private(i,j) DO J=JSTA,JEND - DO I=1,IM + DO I=ISTA,IEND GRID1(I,J)=QFD(I,J,IFD,N) ENDDO ENDDO @@ -383,11 +366,12 @@ SUBROUTINE MDL2STD_P() cfld=cfld+1 fld_info(cfld)%ifld=IAVBLFLD(IGET(iID)) fld_info(cfld)%lvl=LVLSXML(IFD,IGET(iID)) -!$omp parallel do private(i,j,jj) +!$omp parallel do private(i,j,ii,jj) do j=1,jend-jsta+1 jj = jsta+j-1 - do i=1,im - datapd(i,j,cfld) = GRID1(i,jj) + do i=1,iend-ista+1 + ii = ista+i-1 + datapd(i,j,cfld) = GRID1(ii,jj) enddo enddo endif @@ -417,7 +401,7 @@ SUBROUTINE MDL2STD_P() IF (LVLS(IFD,IGET(iID)) > 0) THEN !$omp parallel do private(i,j) DO J=JSTA,JEND - DO I=1,IM + DO I=ISTA,IEND GRID1(I,J)=HTFDCTL(IFD) ENDDO ENDDO @@ -425,11 +409,12 @@ SUBROUTINE MDL2STD_P() cfld=cfld+1 fld_info(cfld)%ifld=IAVBLFLD(IGET(iID)) fld_info(cfld)%lvl=LVLSXML(IFD,IGET(iID)) -!$omp parallel do private(i,j,jj) +!$omp parallel do private(i,j,ii,jj) do j=1,jend-jsta+1 jj = jsta+j-1 - do i=1,im - datapd(i,j,cfld) = GRID1(i,jj) + do i=1,iend-ista+1 + ii = ista+i-1 + datapd(i,j,cfld) = GRID1(ii,jj) enddo enddo endif @@ -456,15 +441,15 @@ SUBROUTINE MDL2STD_P() if(allocated(QIN)) deallocate(QIN) if(allocated(QTYPE)) deallocate(QTYPE) - ALLOCATE(QIN(IM,JSTA:JEND,LM,2)) + ALLOCATE(QIN(ISTA:IEND,JSTA:JEND,LM,2)) ALLOCATE(QTYPE(2)) - QIN(1:IM,JSTA:JEND,1:LM,1)=T(1:IM,JSTA:JEND,1:LM) - QIN(1:IM,JSTA:JEND,1:LM,2)=Q(1:IM,JSTA:JEND,1:LM) + QIN(ISTA:IEND,JSTA:JEND,1:LM,1)=T(ISTA:IEND,JSTA:JEND,1:LM) + QIN(ISTA:IEND,JSTA:JEND,1:LM,2)=Q(ISTA:IEND,JSTA:JEND,1:LM) QTYPE(1)="T" QTYPE(2)="Q" if(allocated(QFD)) deallocate(QFD) - ALLOCATE(QFD(IM,JSTA:JEND,NFDCTL,2)) + ALLOCATE(QFD(ISTA:IEND,JSTA:JEND,NFDCTL,2)) QFD=SPVAL print *, "wafs levels",pset%param(N)%level @@ -476,20 +461,20 @@ SUBROUTINE MDL2STD_P() IF (LVLS(IFD,IGET(iID)) > 0) THEN !$omp parallel do private(i,j) DO J=JSTA,JEND - DO I=1,IM + DO I=ISTA,IEND EGRID2(I,J) = HTFDCTL(IFD) ! P ENDDO ENDDO - EGRID3(1:IM,JSTA:JEND)=QFD(1:IM,JSTA:JEND,IFD,1) ! T - EGRID4(1:IM,JSTA:JEND)=QFD(1:IM,JSTA:JEND,IFD,2) ! Q + EGRID3(ISTA:IEND,JSTA:JEND)=QFD(ISTA:IEND,JSTA:JEND,IFD,1) ! T + EGRID4(ISTA:IEND,JSTA:JEND)=QFD(ISTA:IEND,JSTA:JEND,IFD,2) ! Q EGRID1 = SPVAL - CALL CALRH(EGRID2(1,jsta),EGRID3(1,jsta),EGRID4(1,jsta),EGRID1(1,jsta)) + CALL CALRH(EGRID2(ista:iend,jsta:jend),EGRID3(ista:iend,jsta:jend),EGRID4(ista:iend,jsta:jend),EGRID1(ista:iend,jsta:jend)) !$omp parallel do private(i,j) DO J=JSTA,JEND - DO I=1,IM + DO I=ISTA,IEND IF(EGRID1(I,J) < SPVAL) THEN GRID1(I,J) = EGRID1(I,J)*100. ELSE @@ -502,10 +487,11 @@ SUBROUTINE MDL2STD_P() cfld=cfld+1 fld_info(cfld)%ifld=IAVBLFLD(IGET(iID)) fld_info(cfld)%lvl=LVLSXML(IFD,IGET(iID)) -!$omp parallel do private(i,j,jj) +!$omp parallel do private(i,j,ii,jj) do j=1,jend-jsta+1 jj = jsta+j-1 - do i=1,im + do i=1,iend-ista+1 + ii = ista+i-1 datapd(i,j,cfld) = GRID1(i,jj) enddo enddo diff --git a/sorc/ncep_post.fd/MDL2THANDPV.f b/sorc/ncep_post.fd/MDL2THANDPV.f index bc5d6efef..8d70c2ee4 100644 --- a/sorc/ncep_post.fd/MDL2THANDPV.f +++ b/sorc/ncep_post.fd/MDL2THANDPV.f @@ -1,44 +1,24 @@ !> @file -! -!> SUBPROGRAM: MDL2THANDPV VERT INTRP OF MODEL LVLS TO ISENTROPIC AND PV -!! PRGRMMR: CHUANG ORG: W/NP22 DATE: 07-03-26 -!! -!! ABSTRACT: -!! FOR MOST APPLICATIONS THIS ROUTINE IS THE WORKHORSE -!! OF THE POST PROCESSOR. IN A NUTSHELL IT INTERPOLATES -!! DATA FROM MODEL TO THETA AND PV SURFACES. -!! -!! PROGRAM HISTORY -!! 11-02-06 J. WANG ADD GRIB2 OPTION -!! 14-03-06 S. Moorthi - updated for threading and some optimization -!! 16-12-19 G.P. Lou - Added A-grid regional models -!! 20-03-25 J MENG - remove grib1 -!! 20-03-25 J MENG - remove grib1 -!! 20-11-10 J MENG - USE UPP_MATH and UPP_PHYSICS MODULES -!! 21-03-11 B Cui - change local arrays to dimension (im,jsta:jend) -!! -!! -!! USAGE: CALL MDL2THANDPV -!! INPUT ARGUMENT LIST: -!! -!! OUTPUT ARGUMENT LIST: -!! NONE -!! -!! OUTPUT FILES: -!! NONE -!! -!! SUBPROGRAMS CALLED: -!! UTILITIES: -!! PVETC - -!! P2TH - -!! P2PV - -!! COMMON - CTLBLK -!! RQSTFLD -!! -!! ATTRIBUTES: -!! LANGUAGE: FORTRAN 90 -!! MACHINE : IBM SP -!! +!> @brief mdl2thandpv() vert intrp of model lvls to isentropic and PV. +!> +!> For most applications this routine is the workhorse +!> of the post processor. In a nutshell it interpolates +!> data from model to THETA and PV surfaces. +!> +!> ### Program History Log +!> Date | Programmer | Comments +!> -----|------------|--------- +!> 2007-03-26 | Chuang | Initial +!> 2011-02-06 | J. Wang | Add GRIB2 Option +!> 2014-03-06 | S. Moorthi | Updated for threading and some optimization +!> 2016-12-19 | G.P. Lou | Added A-grid regional models +!> 2020-03-25 | J Meng | Remove grib1 +!> 2020-03-25 | J Meng | Remove grib1 +!> 2020-11-10 | J Meng | Use UPP_MATH and UPP_PHYSICS Modules +!> 2021-03-11 | B Cui | Change local arrays to dimension (im,jsta:jend) +!> 2021-10-26 | J MENG | 2D DECOMPOSITION +!> +!> @author Chuang W/NP22 @date 2007-03-26 SUBROUTINE MDL2THANDPV(kth,kpv,th,pv) ! @@ -48,8 +28,9 @@ SUBROUTINE MDL2THANDPV(kth,kpv,th,pv) use masks, only: gdlat, gdlon, dx, dy use physcons_post, only: con_eps, con_epsm1 use params_mod, only: dtr, small, erad, d608, rhmin - use CTLBLK_mod, only: spval, lm, jsta_2l, jend_2u, jsta_2l, grib, cfld, datapd, fld_info,& - im, jm, jsta, jend, jsta_m, jend_m, modelname, global,gdsdegr,me + use CTLBLK_mod, only: spval, lm, jsta_2l, jend_2u, grib, cfld, datapd, fld_info,& + im, jm, jsta, jend, jsta_m, jend_m, modelname, global,gdsdegr,me,& + ista, iend, ista_m, iend_m, ista_2l, iend_2u use RQSTFLD_mod, only: iget, lvls, id, iavblfld, lvlsxml use gridspec_mod, only: gridtype,dyval use upp_physics, only: FPVSNEW @@ -61,7 +42,7 @@ SUBROUTINE MDL2THANDPV(kth,kpv,th,pv) ! integer,intent(in) :: kth, kpv real, intent(in) :: th(kth), pv(kpv) - real, dimension(im,jsta:jend) :: grid1, grid2 + real, dimension(ista:iend,jsta:jend) :: grid1, grid2 real, dimension(kpv) :: pvpt, pvpb LOGICAL IOOMG,IOALL @@ -72,11 +53,14 @@ SUBROUTINE MDL2THANDPV(kth,kpv,th,pv) , DUM1D9(:), DUM1D10(:),DUM1D11(:) & , DUM1D12(:),DUM1D13(:),DUM1D14(:) ! - real, dimension(IM,JSTA:JEND,KTH) :: UTH, VTH, HMTH, TTH, PVTH, & + real, dimension(ISTA:IEND,JSTA:JEND,KTH) :: UTH, VTH, HMTH, TTH, PVTH, & SIGMATH, RHTH, OTH - real, dimension(IM,JSTA:JEND,KPV) :: UPV, VPV, HPV, TPV, PPV, SPV + real, dimension(ISTA:IEND,JSTA:JEND,KPV) :: UPV, VPV, HPV, TPV, PPV, SPV + real, dimension(IM,2) :: GLATPOLES, COSLPOLES, PVPOLES + real, dimension(IM,2,LM) :: UPOLES, TPOLES, PPOLES + real, dimension(IM,JSTA:JEND) :: COSLTEMP, PVTEMP ! - real, allocatable :: wrk1(:,:), wrk2(:,:), wrk3(:,:), wrk4(:,:), cosl(:,:) + real, allocatable :: wrk1(:,:), wrk2(:,:), wrk3(:,:), wrk4(:,:), cosl(:,:), dum2d(:,:) real, allocatable :: tuv(:,:,:),pmiduv(:,:,:) ! integer, dimension(im) :: iw, ie @@ -88,7 +72,9 @@ SUBROUTINE MDL2THANDPV(kth,kpv,th,pv) !****************************************************************************** ! ! START MDL2TH. -! +! + if(me==0) write(0,*) 'MDL2THANDPV starts' +! ! SET TOTAL NUMBER OF POINTS ON OUTPUT GRID. ! !--------------------------------------------------------------- @@ -119,7 +105,7 @@ SUBROUTINE MDL2THANDPV(kth,kpv,th,pv) do k=1,kth !$omp parallel do private(i,j) do j=jsta,jend - do i=1,im + do i=ista,iend UTH(i,j,k) = SPVAL VTH(i,j,k) = SPVAL HMTH(i,j,k) = SPVAL @@ -134,7 +120,7 @@ SUBROUTINE MDL2THANDPV(kth,kpv,th,pv) do k=1,kpv !$omp parallel do private(i,j) do j=jsta,jend - do i=1,im + do i=ista,iend UPV(i,j,k) = SPVAL VPV(i,j,k) = SPVAL HPV(i,j,k) = SPVAL @@ -151,20 +137,24 @@ SUBROUTINE MDL2THANDPV(kth,kpv,th,pv) ALLOCATE(DUM1D14(LM)) ! DO L=1,LM - CALL EXCH(PMID(1:IM,JSTA_2L:JEND_2U,L)) - CALL EXCH(T(1:IM,JSTA_2L:JEND_2U,L)) - CALL EXCH(UH(1:IM,JSTA_2L:JEND_2U,L)) + CALL EXCH(PMID(ISTA_2L:IEND_2U,JSTA_2L:JEND_2U,L)) + CALL EXCH(T(ISTA_2L:IEND_2U,JSTA_2L:JEND_2U,L)) + CALL EXCH(UH(ISTA_2L:IEND_2U,JSTA_2L:JEND_2U,L)) + CALL EXCH(VH(ISTA_2L:IEND_2U,JSTA_2L:JEND_2U,L)) END DO - CALL EXCH(GDLAT(1,JSTA_2L)) + CALL EXCH(GDLAT(ISTA_2L,JSTA_2L)) + CALL EXCH(GDLON(ISTA_2L,JSTA_2L)) ! print *,' JSTA_2L=',JSTA_2L,' JSTA=',JSTA_2L,' JEND_2U=', & ! &JEND_2U,' JEND=',JEND,' IM=',IM ! print *,' GDLATa=',gdlat(1,:) ! print *,' GDLATb=',gdlat(im,:) ! - allocate (wrk1(im,jsta:jend), wrk2(im,jsta:jend), & - & wrk3(im,jsta:jend), cosl(im,jsta_2l:jend_2u)) - allocate (wrk4(im,jsta:jend)) + allocate (wrk1(ista:iend,jsta:jend), wrk2(ista:iend,jsta:jend), & + & wrk3(ista:iend,jsta:jend), cosl(ista_2l:iend_2u,jsta_2l:jend_2u)) + allocate (dum2d(ista_2l:iend_2u,jsta_2l:jend_2u)) + allocate (wrk4(ista:iend,jsta:jend)) + imb2 = im /2 eradi = 1.0 / erad @@ -175,12 +165,12 @@ SUBROUTINE MDL2THANDPV(kth,kpv,th,pv) ie(i) = i + 1 iw(i) = i - 1 enddo - iw(1) = im - ie(im) = 1 +! iw(1) = im +! ie(im) = 1 ! !$omp parallel do private(i,j,ip1,im1) DO J=JSTA,JEND - do i=1,im + do i=ISTA,IEND ip1 = ie(i) im1 = iw(i) cosl(i,j) = cos(gdlat(i,j)*dtr) @@ -197,27 +187,31 @@ SUBROUTINE MDL2THANDPV(kth,kpv,th,pv) wrk4(i,j) = wrk1(i,j) * wrk2(i,j) ! 1/dx enddo enddo -! CALL EXCH(cosl(1,JSTA_2L)) CALL EXCH(cosl) + + call fullpole(cosl,coslpoles) + call fullpole(gdlat(ista_2l:iend_2u,jsta_2l:jend_2u),glatpoles) !$omp parallel do private(i,j,ii,tem) DO J=JSTA,JEND if (j == 1) then - do i=1,im + do i=ISTA,IEND ii = i + imb2 if (ii > im) ii = ii - im - wrk3(i,j) = 1.0 / ((180.-GDLAT(i,J+1)-GDLAT(II,J))*DTR) !1/dphi + ! wrk3(i,j) = 1.0 / ((180.-GDLAT(i,J+1)-GDLAT(II,J))*DTR) !1/dphi + wrk3(i,j) = 1.0 / ((180.-GDLAT(i,J+1)-GLATPOLES(II,1))*DTR) !1/dphi enddo elseif (j == JM) then - do i=1,im + do i=ISTA,IEND ii = i + imb2 if (ii > im) ii = ii - im - wrk3(i,j) = 1.0 / ((180.+GDLAT(i,J-1)+GDLAT(II,J))*DTR) !1/dphi + ! wrk3(i,j) = 1.0 / ((180.+GDLAT(i,J-1)+GDLAT(II,J))*DTR) !1/dphi + wrk3(i,j) = 1.0 / ((180.+GDLAT(i,J-1)+GLATPOLES(II,2))*DTR) !1/dphi enddo else !print *,' j=',j,' GDLATJm1=',gdlat(:,j-1) !print *,' j=',j,' GDLATJp1=',gdlat(:,j+1) - do i=1,im + do i=ISTA,IEND tem = GDLAT(I,J-1) - GDLAT(I,J+1) if (abs(tem) > small) then wrk3(i,j) = 1.0 / (tem*DTR) !1/dphi @@ -232,7 +226,7 @@ SUBROUTINE MDL2THANDPV(kth,kpv,th,pv) else !!global? !$omp parallel do private(i,j) DO J=JSTA_m,Jend_m - DO I=2,im-1 + DO I=ISTA_M,IEND_M wrk2(i,j) = 0.5 / DX(I,J) wrk3(i,j) = 0.5 / DY(I,J) END DO @@ -241,20 +235,26 @@ SUBROUTINE MDL2THANDPV(kth,kpv,th,pv) ! need to put T and P on V points for computing dp/dx for e grid IF(GRIDTYPE == 'E')THEN - allocate(tuv(1:im,jsta_2l:jend_2u,lm)) - allocate(pmiduv(1:im,jsta_2l:jend_2u,lm)) + allocate(tuv(ista_2l:iend_2u,jsta_2l:jend_2u,lm)) + allocate(pmiduv(ista_2l:iend_2u,jsta_2l:jend_2u,lm)) do l=1,lm - call h2u(t(1:im,jsta_2l:jend_2u,l),tuv(1:im,jsta_2l:jend_2u,l)) - call h2u(pmid(1:im,jsta_2l:jend_2u,l),pmiduv(1:im,jsta_2l:jend_2u,l)) + call h2u(t(ista_2l:iend_2u,jsta_2l:jend_2u,l),tuv(ista_2l:iend_2u,jsta_2l:jend_2u,l)) + call h2u(pmid(ista_2l:iend_2u,jsta_2l:jend_2u,l),pmiduv(ista_2l:iend_2u,jsta_2l:jend_2u,l)) end do end if !add A-grid regional models IF(GRIDTYPE == 'A')THEN IF(MODELNAME == 'GFS' .or. global) THEN + + DO L=1,LM + CALL FULLPOLE(PMID(ISTA_2L:IEND_2U,JSTA_2L:JEND_2U,L),PPOLES(:,:,L)) + CALL FULLPOLE( T(ISTA_2L:IEND_2U,JSTA_2L:JEND_2U,L),TPOLES(:,:,L)) + CALL FULLPOLE( UH(ISTA_2L:IEND_2U,JSTA_2L:JEND_2U,L),UPOLES(:,:,L)) + ENDDO !!$omp parallel do private(i,j,ip1,im1,ii,jj,l,es,dum1d1,dum1d2,dum1d3,dum1d4,dum1d5,dum1d6,dum1d14,tem) DO J=JSTA,JEND - DO I=1,IM + DO I=ISTA,IEND ip1 = ie(i) im1 = iw(i) ii = i + imb2 @@ -270,10 +270,13 @@ SUBROUTINE MDL2THANDPV(kth,kpv,th,pv) DUM1D14(L) = Q(I,J,L) * (PMID(I,J,L)+CON_EPSM1*ES)/(CON_EPS*ES) ! RH DUM1D1(L) = (PMID(ip1,J,L)- PMID(im1,J,L)) * wrk4(i,j) !dp/dx DUM1D3(L) = (T(ip1,J,L) - T(im1,J,L)) * wrk4(i,j) !dt/dx - DUM1D2(L) = (PMID(II,J,L) - PMID(I,J+1,L)) * tem !dp/dy - DUM1D4(L) = (T(II,J,L) - T(I,J+1,L)) * tem !dt/dy + ! DUM1D2(L) = (PMID(II,J,L) - PMID(I,J+1,L)) * tem !dp/dy + DUM1D2(L) = (PPOLES(II,1,L) - PMID(I,J+1,L)) * tem !dp/dy + ! DUM1D4(L) = (T(II,J,L) - T(I,J+1,L)) * tem !dt/dy + DUM1D4(L) = (TPOLES(II,1,L) - T(I,J+1,L)) * tem !dt/dy DUM1D6(L) = ((VH(ip1,J,L)-VH(im1,J,L))*wrk2(i,j) & - & + (UH(II,J,L)*COSL(II,J) & + !& ! + (UH(II,J,L)*COSL(II,J) & + & + (UPOLES(II,1,L)*COSLPOLES(II,1) & & + UH(I,J+1,L)*COSL(I,J+1))*wrk3(i,j))*wrk1(i,j) & & + F(I,J) END DO @@ -305,11 +308,14 @@ SUBROUTINE MDL2THANDPV(kth,kpv,th,pv) DUM1D14(L) = Q(I,J,L) * (PMID(I,J,L)+CON_EPSM1*ES)/(CON_EPS*ES) ! RH DUM1D1(L) = (PMID(ip1,J,L)- PMID(im1,J,L)) * wrk4(i,j) !dp/dx DUM1D3(L) = (T(ip1,J,L) - T(im1,J,L)) * wrk4(i,j) !dt/dx - DUM1D2(L) = (PMID(I,J-1,L)-PMID(II,J,L)) * tem !dp/dy - DUM1D4(L) = (T(I,J-1,L)-T(II,J,L)) * tem !dt/dy + ! DUM1D2(L) = (PMID(I,J-1,L)-PMID(II,J,L)) * tem !dp/dy + DUM1D2(L) = (PMID(I,J-1,L)-PPOLES(II,2,L)) * tem !dp/dy + ! DUM1D4(L) = (T(I,J-1,L)-T(II,J,L)) * tem !dt/dy + DUM1D4(L) = (T(I,J-1,L)-TPOLES(II,2,L)) * tem !dt/dy DUM1D6(L) = ((VH(ip1,J,L)-VH(im1,J,L))* wrk2(i,j) & & + (UH(I,J-1,L)*COSL(I,J-1) & - & + UH(II,J,L)*COSL(II,J))*wrk3(i,j))*wrk1(i,j) & + !& ! + UH(II,J,L)*COSL(II,J))*wrk3(i,j))*wrk1(i,j) & + & + UPOLES(II,2,L)*COSLPOLES(II,2))*wrk3(i,j))*wrk1(i,j) & & + F(I,J) END DO ELSE !pole point, compute at j=jm-1 @@ -357,7 +363,7 @@ SUBROUTINE MDL2THANDPV(kth,kpv,th,pv) DO L=1,LM print*,pmid(i,j,l),dum1d1(l),dum1d2(l),dum1d5(l) & ,dum1d3(l),dum1d4(l),zmid(i,j,l),uh(i,j,l),vh(i,j,l) & - ,dum1d6(l) + ,dum1d6(l),L end do end if @@ -371,7 +377,7 @@ SUBROUTINE MDL2THANDPV(kth,kpv,th,pv) ,'hm,s,bvf2,pvn,theta,sigma,pvu= ' DO L=1,LM print*,dum1d7(l),dum1d8(l),dum1d9(l),dum1d10(l),dum1d11(l) & - ,dum1d12(l),dum1d13(l) + ,dum1d12(l),dum1d13(l),L end do end if @@ -410,7 +416,7 @@ SUBROUTINE MDL2THANDPV(kth,kpv,th,pv) DO J=JSTA_m,Jend_m JMT2=JM/2+1 TPHI=(J-JMT2)*(DYVAL/gdsdegr)*DTR - DO I=2,im-1 + DO I=ISTA_M,IEND_M ip1 = i + 1 im1 = i - 1 tem = wrk3(i,j) * eradi @@ -450,7 +456,7 @@ SUBROUTINE MDL2THANDPV(kth,kpv,th,pv) ,'hm,s,bvf2,pvn,theta,sigma,pvu,pvort= ' DO L=1,LM print*,dum1d7(l),dum1d8(l),dum1d9(l),dum1d10(l),dum1d11(l) & - ,dum1d12(l),dum1d13(l),DUM1D6(l) + ,dum1d12(l),dum1d13(l),DUM1D6(l),L end do end if @@ -486,14 +492,15 @@ SUBROUTINE MDL2THANDPV(kth,kpv,th,pv) ENDIF !regional models and A-grid end here !----------------------------------------------------------------- ELSE IF (GRIDTYPE == 'B')THEN - allocate(DVDXL(1:im,jsta_m:jend_m,lm)) - allocate(DUDYL(1:im,jsta_m:jend_m,lm)) - allocate(UAVGL(1:im,jsta_m:jend_m,lm)) + allocate(DVDXL(ista_m:iend_m,jsta_m:jend_m,lm)) + allocate(DUDYL(ista_m:iend_m,jsta_m:jend_m,lm)) + allocate(UAVGL(ista_m:iend_m,jsta_m:jend_m,lm)) DO L=1,LM - CALL EXCH(VH(1:IM,JSTA_2L:JEND_2U,L)) + CALL EXCH(VH(ISTA_2L:IEND_2U,JSTA_2L:JEND_2U,L)) + CALL EXCH(UH(ISTA_2L:IEND_2U,JSTA_2L:JEND_2U,L)) CALL DVDXDUDY(UH(:,:,L),VH(:,:,L)) DO J=JSTA_m,Jend_m - DO I=2,im-1 + DO I=ISTA_M,IEND_M DVDXL(I,J,L) = DDVDX(I,J) DUDYL(I,J,L) = DDUDY(I,J) UAVGL(I,J,L) = UUAVG(I,J) @@ -503,7 +510,7 @@ SUBROUTINE MDL2THANDPV(kth,kpv,th,pv) DO J=JSTA_m,Jend_m JMT2=JM/2+1 TPHI=(J-JMT2)*(DYVAL/gdsdegr)*DTR - DO I=2,im-1 + DO I=ISTA_M,IEND_M ip1 = i + 1 im1 = i - 1 DO L=1,LM @@ -580,7 +587,7 @@ SUBROUTINE MDL2THANDPV(kth,kpv,th,pv) TPHI = (J-JMT2)*(DYVAL/gdsdegr)*DTR IHW= - MOD(J,2) IHE = IHW + 1 - DO I=2,im-1 + DO I=ISTA_M,IEND_M ip1 = i + 1 im1 = i - 1 DO L=1,LM @@ -673,7 +680,7 @@ SUBROUTINE MDL2THANDPV(kth,kpv,th,pv) IF(LVLS(LP,IGET(332)) > 0 .OR. LVLS(LP,IGET(333)) > 0)THEN !$omp parallel do private(i,j) DO J=JSTA,JEND - DO I=1,IM + DO I=ISTA,IEND GRID1(I,J) = UTH(I,J,LP) GRID2(I,J) = VTH(I,J,LP) ENDDO @@ -682,21 +689,23 @@ SUBROUTINE MDL2THANDPV(kth,kpv,th,pv) cfld = cfld + 1 fld_info(cfld)%ifld = IAVBLFLD(IGET(332)) fld_info(cfld)%lvl = LVLSXML(lp,IGET(332)) -!$omp parallel do private(i,j,jj) +!$omp parallel do private(i,j,ii,jj) do j=1,jend-jsta+1 jj = jsta+j-1 - do i=1,im - datapd(i,j,cfld) = GRID1(i,jj) + do i=1,iend-ista+1 + ii = ista+i-1 + datapd(i,j,cfld) = GRID1(ii,jj) enddo enddo cfld = cfld + 1 fld_info(cfld)%ifld = IAVBLFLD(IGET(333)) fld_info(cfld)%lvl = LVLSXML(lp,IGET(333)) -!$omp parallel do private(i,j,jj) +!$omp parallel do private(i,j,ii,jj) do j=1,jend-jsta+1 jj = jsta+j-1 - do i=1,im - datapd(i,j,cfld) = GRID2(i,jj) + do i=1,iend-ista+1 + ii = ista+i-1 + datapd(i,j,cfld) = GRID2(ii,jj) enddo enddo endif @@ -731,7 +740,7 @@ SUBROUTINE MDL2THANDPV(kth,kpv,th,pv) ! END IF !$omp parallel do private(i,j) DO J=JSTA,JEND - DO I=1,IM + DO I=ISTA,IEND GRID1(I,J) = TTH(I,J,LP) ENDDO ENDDO @@ -739,11 +748,12 @@ SUBROUTINE MDL2THANDPV(kth,kpv,th,pv) cfld = cfld + 1 fld_info(cfld)%ifld=IAVBLFLD(IGET(334)) fld_info(cfld)%lvl=LVLSXML(lp,IGET(334)) -!$omp parallel do private(i,j,jj) +!$omp parallel do private(i,j,ii,jj) do j=1,jend-jsta+1 jj = jsta+j-1 - do i=1,im - datapd(i,j,cfld) = GRID1(i,jj) + do i=1,iend-ista+1 + ii = ista+i-1 + datapd(i,j,cfld) = GRID1(ii,jj) enddo enddo endif @@ -754,14 +764,30 @@ SUBROUTINE MDL2THANDPV(kth,kpv,th,pv) ! IF(IGET(335) > 0) THEN IF(LVLS(LP,IGET(335)) > 0)THEN - call poleavg(IM,JM,JSTA,JEND,SMALL,COSL(1:IM,JSTA:JEND) & - ,SPVAL,PVTH(1:IM,JSTA:JEND,LP)) - IF(1>=jsta .and. 1<=jend)print*,'PVTH at N POLE= ' & - ,pvth(1,1,lp),pvth(im/2,1,lp) & - ,pvth(10,10,lp),pvth(im/2,10,lp),SPVAL,grib,LP + ! call poleavg(IM,JM,JSTA,JEND,SMALL,COSL(1:IM,JSTA:JEND) & + ! ,SPVAL,PVTH(1:IM,JSTA:JEND,LP)) + ! IF(1>=jsta .and. 1<=jend)print*,'PVTH at N POLE= ' & + ! ,pvth(1,1,lp),pvth(im/2,1,lp) & + ! ,pvth(10,10,lp),pvth(im/2,10,lp),SPVAL,grib,LP + DUM2D(ISTA:IEND,JSTA:JEND)=PVTH(ISTA:IEND,JSTA:JEND,LP) + CALL EXCH(DUM2D) + CALL FULLPOLE(DUM2D,PVPOLES) + COSLTEMP=SPVAL + IF(JSTA== 1) COSLTEMP(1:IM, 1)=COSLPOLES(1:IM,1) + IF(JEND==JM) COSLTEMP(1:IM,JM)=COSLPOLES(1:IM,2) + PVTEMP=SPVAL + IF(JSTA== 1) PVTEMP(1:IM, 1)=PVPOLES(1:IM,1) + IF(JEND==JM) PVTEMP(1:IM,JM)=PVPOLES(1:IM,2) + + call poleavg(IM,JM,JSTA,JEND,SMALL,COSLTEMP(1:IM,JSTA:JEND) & + ,SPVAL,PVTEMP(1:IM,JSTA:JEND)) + + IF(JSTA== 1) PVTH(ISTA:IEND, 1,LP)=PVTEMP(ISTA:IEND, 1) + IF(JEND==JM) PVTH(ISTA:IEND,JM,LP)=PVTEMP(ISTA:IEND,JM) + !$omp parallel do private(i,j) DO J=JSTA,JEND - DO I=1,IM + DO I=ISTA,IEND IF(PVTH(I,J,LP) /= SPVAL)THEN GRID1(I,J) = PVTH(I,J,LP)*1.0E-6 ELSE @@ -773,11 +799,12 @@ SUBROUTINE MDL2THANDPV(kth,kpv,th,pv) cfld=cfld+1 fld_info(cfld)%ifld=IAVBLFLD(IGET(335)) fld_info(cfld)%lvl=LVLSXML(lp,IGET(335)) -!$omp parallel do private(i,j,jj) +!$omp parallel do private(i,j,ii,jj) do j=1,jend-jsta+1 jj = jsta+j-1 - do i=1,im - datapd(i,j,cfld) = GRID1(i,jj) + do i=1,iend-ista+1 + ii = ista+i-1 + datapd(i,j,cfld) = GRID1(ii,jj) enddo enddo endif @@ -790,7 +817,7 @@ SUBROUTINE MDL2THANDPV(kth,kpv,th,pv) IF(LVLS(LP,IGET(353)) > 0)THEN !$omp parallel do private(i,j) DO J=JSTA,JEND - DO I=1,IM + DO I=ISTA,IEND GRID1(I,J) = HMTH(I,J,LP) ENDDO ENDDO @@ -798,11 +825,12 @@ SUBROUTINE MDL2THANDPV(kth,kpv,th,pv) cfld=cfld+1 fld_info(cfld)%ifld=IAVBLFLD(IGET(353)) fld_info(cfld)%lvl=LVLSXML(lp,IGET(353)) -!$omp parallel do private(i,j,jj) +!$omp parallel do private(i,j,ii,jj) do j=1,jend-jsta+1 jj = jsta+j-1 - do i=1,im - datapd(i,j,cfld) = GRID1(i,jj) + do i=1,iend-ista+1 + ii = ista+i-1 + datapd(i,j,cfld) = GRID1(ii,jj) enddo enddo endif @@ -815,7 +843,7 @@ SUBROUTINE MDL2THANDPV(kth,kpv,th,pv) IF(LVLS(LP,IGET(351)) > 0)THEN !$omp parallel do private(i,j) DO J=JSTA,JEND - DO I=1,IM + DO I=ISTA,IEND GRID1(I,J) = SIGMATH(I,J,LP) ENDDO ENDDO @@ -823,11 +851,12 @@ SUBROUTINE MDL2THANDPV(kth,kpv,th,pv) cfld=cfld+1 fld_info(cfld)%ifld=IAVBLFLD(IGET(351)) fld_info(cfld)%lvl=LVLSXML(lp,IGET(351)) -!$omp parallel do private(i,j,jj) +!$omp parallel do private(i,j,ii,jj) do j=1,jend-jsta+1 jj = jsta+j-1 - do i=1,im - datapd(i,j,cfld) = GRID1(i,jj) + do i=1,iend-ista+1 + ii = ista+i-1 + datapd(i,j,cfld) = GRID1(ii,jj) enddo enddo endif @@ -840,7 +869,7 @@ SUBROUTINE MDL2THANDPV(kth,kpv,th,pv) IF(LVLS(LP,IGET(352)) > 0)THEN !$omp parallel do private(i,j) DO J=JSTA,JEND - DO I=1,IM + DO I=ISTA,IEND IF(RHTH(I,J,LP) /= SPVAL) THEN GRID1(I,J) = 100.0 * MIN(1.,MAX(RHmin,RHTH(I,J,LP))) ELSE @@ -852,11 +881,12 @@ SUBROUTINE MDL2THANDPV(kth,kpv,th,pv) cfld=cfld+1 fld_info(cfld)%ifld=IAVBLFLD(IGET(352)) fld_info(cfld)%lvl=LVLSXML(lp,IGET(352)) -!$omp parallel do private(i,j,jj) +!$omp parallel do private(i,j,ii,jj) do j=1,jend-jsta+1 jj = jsta+j-1 - do i=1,im - datapd(i,j,cfld) = GRID1(i,jj) + do i=1,iend-ista+1 + ii = ista+i-1 + datapd(i,j,cfld) = GRID1(ii,jj) enddo enddo endif @@ -869,7 +899,7 @@ SUBROUTINE MDL2THANDPV(kth,kpv,th,pv) IF(LVLS(LP,IGET(378)) > 0)THEN !$omp parallel do private(i,j) DO J=JSTA,JEND - DO I=1,IM + DO I=ISTA,IEND GRID1(I,J) = OTH(I,J,LP) ENDDO ENDDO @@ -877,11 +907,12 @@ SUBROUTINE MDL2THANDPV(kth,kpv,th,pv) cfld=cfld+1 fld_info(cfld)%ifld=IAVBLFLD(IGET(378)) fld_info(cfld)%lvl=LVLSXML(lp,IGET(378)) -!$omp parallel do private(i,j,jj) +!$omp parallel do private(i,j,ii,jj) do j=1,jend-jsta+1 jj = jsta+j-1 - do i=1,im - datapd(i,j,cfld) = GRID1(i,jj) + do i=1,iend-ista+1 + ii = ista+i-1 + datapd(i,j,cfld) = GRID1(ii,jj) enddo enddo endif @@ -895,11 +926,27 @@ SUBROUTINE MDL2THANDPV(kth,kpv,th,pv) IF(IGET(336) > 0.OR.IGET(337) > 0)THEN IF(LVLS(LP,IGET(336)) > 0.OR.LVLS(LP,IGET(337)) > 0)THEN ! GFS use lon avg as one scaler value for pole point - call poleavg(IM,JM,JSTA,JEND,SMALL,COSL(1:IM,JSTA:JEND) & - ,SPVAL,VPV(1:IM,JSTA:JEND,LP)) + ! call poleavg(IM,JM,JSTA,JEND,SMALL,COSL(1:IM,JSTA:JEND) & + ! ,SPVAL,VPV(1:IM,JSTA:JEND,LP)) + DUM2D(ISTA:IEND,JSTA:JEND)=VPV(ISTA:IEND,JSTA:JEND,LP) + CALL EXCH(DUM2D) + CALL FULLPOLE(DUM2D,PVPOLES) + COSLTEMP=SPVAL + IF(JSTA== 1) COSLTEMP(1:IM, 1)=COSLPOLES(1:IM,1) + IF(JEND==JM) COSLTEMP(1:IM,JM)=COSLPOLES(1:IM,2) + PVTEMP=SPVAL + IF(JSTA== 1) PVTEMP(1:IM, 1)=PVPOLES(1:IM,1) + IF(JEND==JM) PVTEMP(1:IM,JM)=PVPOLES(1:IM,2) + + call poleavg(IM,JM,JSTA,JEND,SMALL,COSLTEMP(1:IM,JSTA:JEND) & + ,SPVAL,PVTEMP(1:IM,JSTA:JEND)) + + IF(JSTA== 1) VPV(ISTA:IEND, 1,LP)=PVTEMP(ISTA:IEND, 1) + IF(JEND==JM) VPV(ISTA:IEND,JM,LP)=PVTEMP(ISTA:IEND,JM) + !$omp parallel do private(i,j) DO J=JSTA,JEND - DO I=1,IM + DO I=ISTA,IEND GRID1(I,J) = UPV(I,J,LP) GRID2(I,J) = VPV(I,J,LP) ENDDO @@ -908,21 +955,23 @@ SUBROUTINE MDL2THANDPV(kth,kpv,th,pv) cfld=cfld+1 fld_info(cfld)%ifld=IAVBLFLD(IGET(336)) fld_info(cfld)%lvl=LVLSXML(lp,IGET(336)) -!$omp parallel do private(i,j,jj) +!$omp parallel do private(i,j,ii,jj) do j=1,jend-jsta+1 jj = jsta+j-1 - do i=1,im - datapd(i,j,cfld) = GRID1(i,jj) + do i=1,iend-ista+1 + ii = ista+i-1 + datapd(i,j,cfld) = GRID1(ii,jj) enddo enddo cfld=cfld+1 fld_info(cfld)%ifld=IAVBLFLD(IGET(337)) fld_info(cfld)%lvl=LVLSXML(lp,IGET(337)) -!$omp parallel do private(i,j,jj) +!$omp parallel do private(i,j,ii,jj) do j=1,jend-jsta+1 jj = jsta+j-1 - do i=1,im - datapd(i,j,cfld) = GRID2(i,jj) + do i=1,iend-ista+1 + ii = ista+i-1 + datapd(i,j,cfld) = GRID2(ii,jj) enddo enddo endif @@ -935,11 +984,27 @@ SUBROUTINE MDL2THANDPV(kth,kpv,th,pv) IF(IGET(338) > 0)THEN IF(LVLS(LP,IGET(338)) > 0)THEN ! GFS use lon avg as one scaler value for pole point - call poleavg(IM,JM,JSTA,JEND,SMALL,COSL(1:IM,JSTA:JEND) & - ,SPVAL,TPV(1:IM,JSTA:JEND,LP)) + ! call poleavg(IM,JM,JSTA,JEND,SMALL,COSL(1:IM,JSTA:JEND) & + ! ,SPVAL,TPV(1:IM,JSTA:JEND,LP)) + DUM2D(ISTA:IEND,JSTA:JEND)=TPV(ISTA:IEND,JSTA:JEND,LP) + CALL EXCH(DUM2D) + CALL FULLPOLE(DUM2D,PVPOLES) + COSLTEMP=SPVAL + IF(JSTA== 1) COSLTEMP(1:IM, 1)=COSLPOLES(1:IM,1) + IF(JEND==JM) COSLTEMP(1:IM,JM)=COSLPOLES(1:IM,2) + PVTEMP=SPVAL + IF(JSTA== 1) PVTEMP(1:IM, 1)=PVPOLES(1:IM,1) + IF(JEND==JM) PVTEMP(1:IM,JM)=PVPOLES(1:IM,2) + + call poleavg(IM,JM,JSTA,JEND,SMALL,COSLTEMP(1:IM,JSTA:JEND) & + ,SPVAL,PVTEMP(1:IM,JSTA:JEND)) + + IF(JSTA== 1) TPV(ISTA:IEND, 1,LP)=PVTEMP(ISTA:IEND, 1) + IF(JEND==JM) TPV(ISTA:IEND,JM,LP)=PVTEMP(ISTA:IEND,JM) + !$omp parallel do private(i,j) DO J=JSTA,JEND - DO I=1,IM + DO I=ISTA,IEND GRID1(I,J) = TPV(I,J,LP) ENDDO ENDDO @@ -947,11 +1012,12 @@ SUBROUTINE MDL2THANDPV(kth,kpv,th,pv) cfld=cfld+1 fld_info(cfld)%ifld=IAVBLFLD(IGET(338)) fld_info(cfld)%lvl=LVLSXML(lp,IGET(338)) -!$omp parallel do private(i,j,jj) +!$omp parallel do private(i,j,ii,jj) do j=1,jend-jsta+1 jj = jsta+j-1 - do i=1,im - datapd(i,j,cfld) = GRID1(i,jj) + do i=1,iend-ista+1 + ii = ista+i-1 + datapd(i,j,cfld) = GRID1(ii,jj) enddo enddo endif @@ -963,11 +1029,27 @@ SUBROUTINE MDL2THANDPV(kth,kpv,th,pv) IF(IGET(339) > 0) THEN IF(LVLS(LP,IGET(339)) > 0)THEN ! GFS use lon avg as one scaler value for pole point - call poleavg(IM,JM,JSTA,JEND,SMALL,COSL(1:IM,JSTA:JEND) & - ,SPVAL,HPV(1:IM,JSTA:JEND,LP)) + ! call poleavg(IM,JM,JSTA,JEND,SMALL,COSL(1:IM,JSTA:JEND) & + ! ,SPVAL,HPV(1:IM,JSTA:JEND,LP)) + DUM2D(ISTA:IEND,JSTA:JEND)=HPV(ISTA:IEND,JSTA:JEND,LP) + CALL EXCH(DUM2D) + CALL FULLPOLE(DUM2D,PVPOLES) + COSLTEMP=SPVAL + IF(JSTA== 1) COSLTEMP(1:IM, 1)=COSLPOLES(1:IM,1) + IF(JEND==JM) COSLTEMP(1:IM,JM)=COSLPOLES(1:IM,2) + PVTEMP=SPVAL + IF(JSTA== 1) PVTEMP(1:IM, 1)=PVPOLES(1:IM,1) + IF(JEND==JM) PVTEMP(1:IM,JM)=PVPOLES(1:IM,2) + + call poleavg(IM,JM,JSTA,JEND,SMALL,COSLTEMP(1:IM,JSTA:JEND) & + ,SPVAL,PVTEMP(1:IM,JSTA:JEND)) + + IF(JSTA== 1) HPV(ISTA:IEND, 1,LP)=PVTEMP(ISTA:IEND, 1) + IF(JEND==JM) HPV(ISTA:IEND,JM,LP)=PVTEMP(ISTA:IEND,JM) + !$omp parallel do private(i,j) DO J=JSTA,JEND - DO I=1,IM + DO I=ISTA,IEND GRID1(I,J) = HPV(I,J,LP) ENDDO ENDDO @@ -975,11 +1057,12 @@ SUBROUTINE MDL2THANDPV(kth,kpv,th,pv) cfld=cfld+1 fld_info(cfld)%ifld=IAVBLFLD(IGET(339)) fld_info(cfld)%lvl=LVLSXML(lp,IGET(339)) -!$omp parallel do private(i,j,jj) +!$omp parallel do private(i,j,ii,jj) do j=1,jend-jsta+1 jj = jsta+j-1 - do i=1,im - datapd(i,j,cfld) = GRID1(i,jj) + do i=1,iend-ista+1 + ii = ista+i-1 + datapd(i,j,cfld) = GRID1(ii,jj) enddo enddo endif @@ -991,11 +1074,27 @@ SUBROUTINE MDL2THANDPV(kth,kpv,th,pv) IF(IGET(340) > 0) THEN IF(LVLS(LP,IGET(340)) > 0)THEN ! GFS use lon avg as one scaler value for pole point - call poleavg(IM,JM,JSTA,JEND,SMALL,COSL(1:IM,JSTA:JEND) & - ,SPVAL,PPV(1:IM,JSTA:JEND,LP)) + ! call poleavg(IM,JM,JSTA,JEND,SMALL,COSL(1:IM,JSTA:JEND) & + ! ,SPVAL,PPV(1:IM,JSTA:JEND,LP)) + DUM2D(ISTA:IEND,JSTA:JEND)=PPV(ISTA:IEND,JSTA:JEND,LP) + CALL EXCH(DUM2D) + CALL FULLPOLE(DUM2D,PVPOLES) + COSLTEMP=SPVAL + IF(JSTA== 1) COSLTEMP(1:IM, 1)=COSLPOLES(1:IM,1) + IF(JEND==JM) COSLTEMP(1:IM,JM)=COSLPOLES(1:IM,2) + PVTEMP=SPVAL + IF(JSTA== 1) PVTEMP(1:IM, 1)=PVPOLES(1:IM,1) + IF(JEND==JM) PVTEMP(1:IM,JM)=PVPOLES(1:IM,2) + + call poleavg(IM,JM,JSTA,JEND,SMALL,COSLTEMP(1:IM,JSTA:JEND) & + ,SPVAL,PVTEMP(1:IM,JSTA:JEND)) + + IF(JSTA== 1) PPV(ISTA:IEND, 1,LP)=PVTEMP(ISTA:IEND, 1) + IF(JEND==JM) PPV(ISTA:IEND,JM,LP)=PVTEMP(ISTA:IEND,JM) + !$omp parallel do private(i,j) DO J=JSTA,JEND - DO I=1,IM + DO I=ISTA,IEND GRID1(I,J) = PPV(I,J,LP) ENDDO ENDDO @@ -1003,11 +1102,12 @@ SUBROUTINE MDL2THANDPV(kth,kpv,th,pv) cfld=cfld+1 fld_info(cfld)%ifld=IAVBLFLD(IGET(340)) fld_info(cfld)%lvl=LVLSXML(lp,IGET(340)) -!$omp parallel do private(i,j,jj) +!$omp parallel do private(i,j,ii,jj) do j=1,jend-jsta+1 jj = jsta+j-1 - do i=1,im - datapd(i,j,cfld) = GRID1(i,jj) + do i=1,iend-ista+1 + ii = ista+i-1 + datapd(i,j,cfld) = GRID1(ii,jj) enddo enddo endif @@ -1019,11 +1119,27 @@ SUBROUTINE MDL2THANDPV(kth,kpv,th,pv) IF(IGET(341) > 0) THEN IF(LVLS(LP,IGET(341)) > 0)THEN ! GFS use lon avg as one scaler value for pole point - call poleavg(IM,JM,JSTA,JEND,SMALL,COSL(1:IM,JSTA:JEND) & - ,SPVAL,SPV(1:IM,JSTA:JEND,LP)) + ! call poleavg(IM,JM,JSTA,JEND,SMALL,COSL(1:IM,JSTA:JEND) & + ! ,SPVAL,SPV(1:IM,JSTA:JEND,LP)) + DUM2D(ISTA:IEND,JSTA:JEND)=SPV(ISTA:IEND,JSTA:JEND,LP) + CALL EXCH(DUM2D) + CALL FULLPOLE(DUM2D,PVPOLES) + COSLTEMP=SPVAL + IF(JSTA== 1) COSLTEMP(1:IM, 1)=COSLPOLES(1:IM,1) + IF(JEND==JM) COSLTEMP(1:IM,JM)=COSLPOLES(1:IM,2) + PVTEMP=SPVAL + IF(JSTA== 1) PVTEMP(1:IM, 1)=PVPOLES(1:IM,1) + IF(JEND==JM) PVTEMP(1:IM,JM)=PVPOLES(1:IM,2) + + call poleavg(IM,JM,JSTA,JEND,SMALL,COSLTEMP(1:IM,JSTA:JEND) & + ,SPVAL,PVTEMP(1:IM,JSTA:JEND)) + + IF(JSTA== 1) SPV(ISTA:IEND, 1,LP)=PVTEMP(ISTA:IEND, 1) + IF(JEND==JM) SPV(ISTA:IEND,JM,LP)=PVTEMP(ISTA:IEND,JM) + !$omp parallel do private(i,j) DO J=JSTA,JEND - DO I=1,IM + DO I=ISTA,IEND GRID1(I,J) = SPV(I,J,LP) ENDDO ENDDO @@ -1031,11 +1147,12 @@ SUBROUTINE MDL2THANDPV(kth,kpv,th,pv) cfld=cfld+1 fld_info(cfld)%ifld=IAVBLFLD(IGET(341)) fld_info(cfld)%lvl=LVLSXML(lp,IGET(341)) -!$omp parallel do private(i,j,jj) +!$omp parallel do private(i,j,ii,jj) do j=1,jend-jsta+1 jj = jsta+j-1 - do i=1,im - datapd(i,j,cfld) = GRID1(i,jj) + do i=1,iend-ista+1 + ii = ista+i-1 + datapd(i,j,cfld) = GRID1(ii,jj) enddo enddo endif @@ -1046,10 +1163,10 @@ SUBROUTINE MDL2THANDPV(kth,kpv,th,pv) DEALLOCATE(DUM1D1,DUM1D2,DUM1D3,DUM1D4,DUM1D5,DUM1D6,DUM1D7, & DUM1D8,DUM1D9,DUM1D10,DUM1D11,DUM1D12,DUM1D13, & - DUM1D14,wrk1, wrk2, wrk3, wrk4, cosl) + DUM1D14,wrk1, wrk2, wrk3, wrk4, cosl, dum2d) END IF ! end of selection for isentropic and constant PV fields - if(me==0)print *,'end of MDL2THandpv' + if(me==0) write(0,*) 'MDL2THANDPV ends' ! ! ! END OF ROUTINE. diff --git a/sorc/ncep_post.fd/MDLFLD.f b/sorc/ncep_post.fd/MDLFLD.f index fba6eb383..f59602eac 100644 --- a/sorc/ncep_post.fd/MDLFLD.f +++ b/sorc/ncep_post.fd/MDLFLD.f @@ -43,6 +43,12 @@ !! 20-11-10 J MENG - USE UPP_MATH MODULE !! 20-11-10 J MENG - USE UPP_PHYSICS MODULE !! 21-04-01 J MENG - COMPUTATION ON DEFINED POINTS ONLY +!! 21-07-07 J MENG - 2D DECOMPOSITION +!! 22-09-22 L Zhang - ADD NO3 and NH4 output for UFS-Aerosols model +!! 22-10-20 W Meng - Bug fix for cloud fraction and vertically integrated liquid +!! 22-11-08 W Meng - Output hourly averaged PM2.5 and O3 for AQM model only (aqf_on) +!! 22-11-16 E James - Adding dust from RRFS +!! 23-02-10 E James - Adding an extra IGET value to if statement for NGMSLP calculation !! !! USAGE: CALL MDLFLD !! INPUT ARGUMENT LIST: @@ -80,12 +86,12 @@ SUBROUTINE MDLFLD ! - use vrbls4d, only: dust, salt, suso, waso, soot, smoke + use vrbls4d, only: dust, salt, suso, waso, soot, no3, nh4, smoke, fv3dust use vrbls3d, only: zmid, t, pmid, q, cwm, f_ice, f_rain, f_rimef, qqw, qqi,& qqr, qqs, cfr, cfr_raw, dbz, dbzr, dbzi, dbzc, qqw, nlice, nrain, qqg, zint, qqni,& qqnr, qqnw, qqnwfa, qqnifa, uh, vh, mcvg, omga, wh, q2, ttnd, rswtt, & rlwtt, train, tcucn, o3, rhomid, dpres, el_pbl, pint, icing_gfip, icing_gfis, & - catedr,mwt,gtg, REF_10CM, pmtf, ozcon + catedr,mwt,gtg, REF_10CM, avgpmtf, avgozcon use vrbls2d, only: slp, hbot, htop, cnvcfr, cprate, cnvcfr, sfcshx,sfclhx,ustar,z0,& sr, prec, vis, czen, pblh, pblhgust, u10, v10, avgprec, avgcprate, & @@ -97,10 +103,11 @@ SUBROUTINE MDLFLD tops, dsnow, drain,const_ng1, const_ng2, gon, topg, dgraupel use ctlblk_mod, only: jsta_2l, jend_2u, lm, jsta, jend, grib, cfld, datapd,& fld_info, modelname, imp_physics, dtq2, spval, icount_calmict,& - me, dt, avrain, theat, ifhr, ifmin, avcnvc, lp1, im, jm, aqfcmaq_on + me, dt, avrain, theat, ifhr, ifmin, avcnvc, lp1, im, jm, & + ista, iend, ista_2l, iend_2u, aqf_on, gocart_on, nasa_on use rqstfld_mod, only: iget, id, lvls, iavblfld, lvlsxml use gridspec_mod, only: gridtype,maptype,dxval - use upp_physics, only: CALRH, CALCAPE + use upp_physics, only: CALRH, CALCAPE, CALVOR use upp_math, only: H2U, H2V, U2H, V2H ! @@ -120,7 +127,7 @@ SUBROUTINE MDLFLD REAL CC(10), PPT(10) DATA CC / 0.1, 0.2, 0.3, 0.4, 0.5, 0.6, 0.7, 0.8, 0.9, 1.0 / DATA PPT/ 0., .14, .31, .70, 1.6, 3.4, 7.7, 17., 38., 85. / - INTEGER, dimension(im,jsta_2l:jend_2u) :: ICBOT, ICTOP, LPBL + INTEGER, dimension(ista_2l:iend_2u,jsta_2l:jend_2u) :: ICBOT, ICTOP, LPBL ! ! DECLARE VARIABLES. @@ -129,7 +136,7 @@ SUBROUTINE MDLFLD LOGICAL NMM_GFSmicro LOGiCAL Model_Radar real, dimension(im,jm) :: GRID1, GRID2 - real, dimension(im,jsta_2l:jend_2u) :: EGRID1, EGRID2, EGRID3, EGRID4, EGRID5,& + real, dimension(ista_2l:iend_2u,jsta_2l:jend_2u) :: EGRID1, EGRID2, EGRID3, EGRID4, EGRID5,& EL0, P1D, T1D, Q1D, C1D, & FI1D, FR1D, FS1D, QW1, QI1, & QR1, QS1, CUREFL_S, & @@ -160,8 +167,8 @@ SUBROUTINE MDLFLD integer ks,nsmooth REAL SDUMMY(IM,2),dxm ! added to calculate cape and cin for icing - real, dimension(im,jsta:jend) :: dummy, cape, cin - integer idummy(IM,jsta:jend) + real, dimension(ista:iend,jsta:jend) :: dummy, cape, cin + integer idummy(ista:iend,jsta:jend) real, PARAMETER :: ZSL=0.0, TAUCR=RD*GI*290.66, CONST=0.005*G/RD, GORD=G/RD logical, parameter :: debugprint = .false. @@ -186,7 +193,7 @@ SUBROUTINE MDLFLD ! IF (ABS(MAXVAL(REF_10CM)-SPVAL)>SMALL)Model_Radar=.True. check_ref: DO L=1,LM DO J=JSTA,JEND - DO I=1,IM + DO I=ista,iend IF(ABS(REF_10CM(I,J,L)-SPVAL)>SMALL) THEN Model_Radar=.True. exit check_ref @@ -196,27 +203,30 @@ SUBROUTINE MDLFLD ENDDO check_ref if(debugprint .and. me==0)print*,'Did post read in model derived radar ref ',Model_Radar, & 'MODELNAME=',trim(MODELNAME),' imp_physics=',imp_physics - ALLOCATE(EL (IM,JSTA_2L:JEND_2U,LM)) - ALLOCATE(RICHNO (IM,JSTA_2L:JEND_2U,LM)) - ALLOCATE(PBLRI (IM,JSTA_2L:JEND_2U)) + ALLOCATE(EL (ista_2l:iend_2u,JSTA_2L:JEND_2U,LM)) + ALLOCATE(RICHNO (ista_2l:iend_2u,JSTA_2L:JEND_2U,LM)) + ALLOCATE(PBLRI (ista_2l:iend_2u,JSTA_2L:JEND_2U)) ! ! SECOND, STANDARD NGM SEA LEVEL PRESSURE. + IF (IGET(023) > 0 .OR. IGET(105) > 0 .OR. IGET(445) > 0) THEN + CALL NGMSLP ! this value is used in some later calculation. + ENDIF IF (IGET(105) > 0) THEN - CALL NGMSLP !$omp parallel do private(i,j) DO J=JSTA,JEND - DO I=1,IM + DO I=ista,iend GRID1(I,J) = SLP(I,J) ENDDO ENDDO if(grib=="grib2") then cfld=cfld+1 fld_info(cfld)%ifld=IAVBLFLD(IGET(105)) -!$omp parallel do private(i,j,jj) +!$omp parallel do private(i,j,ii,jj) do j=1,jend-jsta+1 jj = jsta+j-1 - do i=1,im - datapd(i,j,cfld) = GRID1(i,jj) + do i=1,iend-ista+1 + ii = ista+i-1 + datapd(i,j,cfld) = GRID1(ii,jj) enddo enddo endif @@ -231,7 +241,7 @@ SUBROUTINE MDLFLD ! print*,'DTQ2 in MDLFLD= ',DTQ2 RDTPHS=24.*3.6E6/DTQ2 DO J=JSTA,JEND - DO I=1,IM + DO I=ista,iend IF ((HBOT(I,J)-HTOP(I,J)) <= 1.0) THEN ICBOT(I,J)=0 ICTOP(I,J)=0 @@ -259,7 +269,7 @@ SUBROUTINE MDLFLD ! CNVCFR(I,J)=100.*CFRdum CNVCFR(I,J)=CFRdum ENDIF !--- End IF (HBOT(I,J)-HTOP(I,J) <= 1.0) ... - ENDDO !--- DO I=1,IM + ENDDO !--- DO I=ista,iend ENDDO !--- DO J=JSTA,JEND ENDIF !-- IF (MODELNAME=='NMM' .OR. imp_physics==5) THEN ! @@ -277,7 +287,7 @@ SUBROUTINE MDLFLD .or. NMM_GFSmicro)THEN RDTPHS=3.6E6/DTQ2 DO J=JSTA,JEND - DO I=1,IM + DO I=ista,iend CUPRATE=RDTPHS*CPRATE(I,J) !--- Cu precip rate, R (mm/h) ! CUPRATE=CUPPT(I,J)*1000./TRDLW !--- mm/h Zfrz(I,J)=ZMID(I,J,NINT(LMH(I,J))) !-- Initialize to lowest model level @@ -313,7 +323,7 @@ SUBROUTINE MDLFLD if(icount_calmict==0)then !only call calmict once in multiple grid processing DO L=1,LM DO J=JSTA,JEND - DO I=1,IM + DO I=ista,iend P1D(I,J)=PMID(I,J,L) T1D(I,J)=T(I,J,L) Q1D(I,J)=Q(I,J,L) @@ -366,7 +376,7 @@ SUBROUTINE MDLFLD refl_miss: IF (Model_Radar) THEN ! - Model output DBZ is present - proceed with calc DO J=JSTA,JEND - DO I=1,IM + DO I=ista,iend IF(P1D(I,J) LLMH) THEN QQW(I,J,L) = D00 @@ -493,7 +503,7 @@ SUBROUTINE MDLFLD ELSE IF(MODELNAME == 'NMM' .and. GRIDTYPE=='B' .and. imp_physics==99)THEN !NMMB+Zhao DO L=1,LM DO J=JSTA,JEND - DO I=1,IM + DO I=ista,iend LLMH = NINT(LMH(I,J)) IF (L > LLMH) THEN QQW(I,J,L) = D00 @@ -521,7 +531,7 @@ SUBROUTINE MDLFLD ELSE IF(MODELNAME == 'NMM' .and. GRIDTYPE=='B' .and. imp_physics==6)THEN !NMMB+WSM6 DO L=1,LM DO J=JSTA,JEND - DO I=1,IM + DO I=ista,iend LLMH = NINT(LMH(I,J)) IF (L > LLMH) THEN QQW(I,J,L)=D00 @@ -560,7 +570,7 @@ SUBROUTINE MDLFLD .and. imp_physics==8)THEN !NMMB or FV3R +THOMPSON DO L=1,LM DO J=JSTA,JEND - DO I=1,IM + DO I=ista,iend DBZ(I,J,L)=REF_10CM(I,J,L) ENDDO ENDDO @@ -568,7 +578,7 @@ SUBROUTINE MDLFLD ELSE IF(imp_physics==99 .or. imp_physics==98)THEN ! Zhao MP DO L=1,LM DO J=JSTA,JEND - DO I=1,IM + DO I=ista,iend DBZ(I,J,L)=SPVAL ENDDO ENDDO @@ -586,7 +596,7 @@ SUBROUTINE MDLFLD ! Chuang: add convective contribution for all MP schemes RDTPHS=3.6E6/DTQ2 DO J=JSTA,JEND - DO I=1,IM + DO I=ista,iend CUPRATE=RDTPHS*CPRATE(I,J) !--- Cu precip rate, R (mm/h) Zfrz(I,J)=ZMID(I,J,NINT(LMH(I,J))) !-- Initialize to lowest model level DO L=1,NINT(LMH(I,J)) !-- Start from the top, work down @@ -618,7 +628,7 @@ SUBROUTINE MDLFLD !$omp parallel do private(i,j,l,curefl,fctr,dens,llmh,lctop,delz,ze_nc) DO L=1,LM DO J=JSTA,JEND - DO I=1,IM + DO I=ista,iend !--- Estimate radar reflectivity factor from convection at level L ! CUREFL(I,J)=0. @@ -735,7 +745,7 @@ SUBROUTINE MDLFLD ze_gmax = -1.E30 DO J=JSTA,JEND - DO I=1,IM + DO I=ista,iend refl(i,j) = -10. ze_max = -10. @@ -883,7 +893,7 @@ SUBROUTINE MDLFLD ! ABSOLUTE VORTICITY ON MDL SURFACES. ! ! - allocate (RH3D(im,jsta_2l:jend_2u,lm)) + allocate (RH3D(ista_2l:iend_2u,jsta_2l:jend_2u,lm)) IF ( (IGET(001)>0).OR.(IGET(077)>0).OR. & (IGET(002)>0).OR.(IGET(003)>0).OR. & (IGET(004)>0).OR.(IGET(005)>0).OR. & @@ -909,6 +919,7 @@ SUBROUTINE MDLFLD (IGET(629)>0).OR.(IGET(630)>0).OR. & (IGET(470)>0).OR. & (IGET(909)>0).OR.(IGET(737)>0).OR. & + (IGET(742)>0).OR. & (IGET(994)>0).OR.(IGET(995)>0) ) THEN DO 190 L=1,LM @@ -919,7 +930,7 @@ SUBROUTINE MDLFLD LL=LM-L+1 !$omp parallel do private(i,j) DO J=JSTA,JEND - DO I=1,IM + DO I=ista,iend GRID1(I,J) = PMID(I,J,LL) ENDDO ENDDO @@ -927,11 +938,12 @@ SUBROUTINE MDLFLD cfld=cfld+1 fld_info(cfld)%ifld=IAVBLFLD(IGET(001)) fld_info(cfld)%lvl=LVLSXML(L,IGET(001)) -!$omp parallel do private(i,j,jj) +!$omp parallel do private(i,j,ii,jj) do j=1,jend-jsta+1 jj = jsta+j-1 - do i=1,im - datapd(i,j,cfld) = GRID1(i,jj) + do i=1,iend-ista+1 + ii = ista+i-1 + datapd(i,j,cfld) = GRID1(ii,jj) enddo enddo endif @@ -946,7 +958,7 @@ SUBROUTINE MDLFLD LL=LM-L+1 !$omp parallel do private(i,j) DO J=JSTA,JEND - DO I=1,IM + DO I=ista,iend GRID1(I,J) = QQW(I,J,LL) if(GRID1(I,J)<1e-20) GRID1(I,J) = 0.0 ENDDO @@ -955,11 +967,12 @@ SUBROUTINE MDLFLD cfld=cfld+1 fld_info(cfld)%ifld=IAVBLFLD(IGET(124)) fld_info(cfld)%lvl=LVLSXML(L,IGET(124)) -!$omp parallel do private(i,j,jj) +!$omp parallel do private(i,j,ii,jj) do j=1,jend-jsta+1 jj = jsta+j-1 - do i=1,im - datapd(i,j,cfld) = GRID1(i,jj) + do i=1,iend-ista+1 + ii = ista+i-1 + datapd(i,j,cfld) = GRID1(ii,jj) enddo enddo endif @@ -971,9 +984,9 @@ SUBROUTINE MDLFLD IF (IGET(125) > 0) THEN IF (LVLS(L,IGET(125)) > 0) THEN LL=LM-L+1 -!$omp parallel do private(i,j,jj) +!$omp parallel do private(i,j) DO J=JSTA,JEND - DO I=1,IM + DO I=ista,iend GRID1(I,J) = QQI(I,J,LL) if(GRID1(I,J)<1e-20) GRID1(I,J) = 0.0 ENDDO @@ -982,11 +995,12 @@ SUBROUTINE MDLFLD cfld=cfld+1 fld_info(cfld)%ifld=IAVBLFLD(IGET(125)) fld_info(cfld)%lvl=LVLSXML(L,IGET(125)) -!$omp parallel do private(i,j,jj) +!$omp parallel do private(i,j,ii,jj) do j=1,jend-jsta+1 jj = jsta+j-1 - do i=1,im - datapd(i,j,cfld) = GRID1(i,jj) + do i=1,iend-ista+1 + ii = ista+i-1 + datapd(i,j,cfld) = GRID1(ii,jj) enddo enddo endif @@ -1000,7 +1014,7 @@ SUBROUTINE MDLFLD LL=LM-L+1 !$omp parallel do private(i,j) DO J=JSTA,JEND - DO I=1,IM + DO I=ista,iend GRID1(I,J) = QQR(I,J,LL) if(GRID1(I,J)<1e-20) GRID1(I,J) = 0.0 ENDDO @@ -1009,11 +1023,12 @@ SUBROUTINE MDLFLD cfld=cfld+1 fld_info(cfld)%ifld=IAVBLFLD(IGET(181)) fld_info(cfld)%lvl=LVLSXML(L,IGET(181)) -!$omp parallel do private(i,j,jj) +!$omp parallel do private(i,j,ii,jj) do j=1,jend-jsta+1 jj = jsta+j-1 - do i=1,im - datapd(i,j,cfld) = GRID1(i,jj) + do i=1,iend-ista+1 + ii = ista+i-1 + datapd(i,j,cfld) = GRID1(ii,jj) enddo enddo endif @@ -1027,7 +1042,7 @@ SUBROUTINE MDLFLD LL=LM-L+1 !$omp parallel do private(i,j) DO J=JSTA,JEND - DO I=1,IM + DO I=ista,iend GRID1(I,J) = QQS(I,J,LL) if(GRID1(I,J)<1e-20) GRID1(I,J) = 0.0 ENDDO @@ -1036,11 +1051,12 @@ SUBROUTINE MDLFLD cfld=cfld+1 fld_info(cfld)%ifld=IAVBLFLD(IGET(182)) fld_info(cfld)%lvl=LVLSXML(L,IGET(182)) -!$omp parallel do private(i,j,jj) +!$omp parallel do private(i,j,ii,jj) do j=1,jend-jsta+1 jj = jsta+j-1 - do i=1,im - datapd(i,j,cfld) = GRID1(i,jj) + do i=1,iend-ista+1 + ii = ista+i-1 + datapd(i,j,cfld) = GRID1(ii,jj) enddo enddo endif @@ -1054,7 +1070,7 @@ SUBROUTINE MDLFLD LL=LM-L+1 !$omp parallel do private(i,j) DO J=JSTA,JEND - DO I=1,IM + DO I=ista,iend if(QQG(I,J,LL) < 1.e-12) QQG(I,J,LL) = 0. !tgs GRID1(I,J) = QQG(I,J,LL) ENDDO @@ -1063,11 +1079,12 @@ SUBROUTINE MDLFLD cfld=cfld+1 fld_info(cfld)%ifld=IAVBLFLD(IGET(415)) fld_info(cfld)%lvl=LVLSXML(L,IGET(415)) -!$omp parallel do private(i,j,jj) +!$omp parallel do private(i,j,ii,jj) do j=1,jend-jsta+1 jj = jsta+j-1 - do i=1,im - datapd(i,j,cfld) = GRID1(i,jj) + do i=1,iend-ista+1 + ii = ista+i-1 + datapd(i,j,cfld) = GRID1(ii,jj) enddo enddo endif @@ -1081,7 +1098,7 @@ SUBROUTINE MDLFLD LL=LM-L+1 !$omp parallel do private(i,j) DO J=JSTA,JEND - DO I=1,IM + DO I=ista,iend if(QQNW(I,J,LL) < 1.e-8) QQNW(I,J,LL) = 0. !tgs GRID1(I,J) = QQNW(I,J,LL) ENDDO @@ -1090,11 +1107,12 @@ SUBROUTINE MDLFLD cfld=cfld+1 fld_info(cfld)%ifld=IAVBLFLD(IGET(747)) fld_info(cfld)%lvl=LVLSXML(L,IGET(747)) -!$omp parallel do private(i,j,jj) +!$omp parallel do private(i,j,ii,jj) do j=1,jend-jsta+1 jj = jsta+j-1 - do i=1,im - datapd(i,j,cfld) = GRID1(i,jj) + do i=1,iend-ista+1 + ii = ista+i-1 + datapd(i,j,cfld) = GRID1(ii,jj) enddo enddo endif @@ -1108,7 +1126,7 @@ SUBROUTINE MDLFLD LL=LM-L+1 !$omp parallel do private(i,j) DO J=JSTA,JEND - DO I=1,IM + DO I=ista,iend if(QQNI(I,J,LL) < 1.e-8) QQNI(I,J,LL) = 0. !tgs GRID1(I,J) = QQNI(I,J,LL) ENDDO @@ -1117,11 +1135,12 @@ SUBROUTINE MDLFLD cfld=cfld+1 fld_info(cfld)%ifld=IAVBLFLD(IGET(752)) fld_info(cfld)%lvl=LVLSXML(L,IGET(752)) -!$omp parallel do private(i,j,jj) +!$omp parallel do private(i,j,ii,jj) do j=1,jend-jsta+1 jj = jsta+j-1 - do i=1,im - datapd(i,j,cfld) = GRID1(i,jj) + do i=1,iend-ista+1 + ii = ista+i-1 + datapd(i,j,cfld) = GRID1(ii,jj) enddo enddo endif @@ -1135,7 +1154,7 @@ SUBROUTINE MDLFLD LL=LM-L+1 !$omp parallel do private(i,j) DO J=JSTA,JEND - DO I=1,IM + DO I=ista,iend if(QQNR(I,J,LL) < 1.e-8) QQNR(I,J,LL) = 0. !tgs GRID1(I,J) = QQNR(I,J,LL) ENDDO @@ -1144,11 +1163,12 @@ SUBROUTINE MDLFLD cfld=cfld+1 fld_info(cfld)%ifld=IAVBLFLD(IGET(754)) fld_info(cfld)%lvl=LVLSXML(L,IGET(754)) -!$omp parallel do private(i,j,jj) +!$omp parallel do private(i,j,ii,jj) do j=1,jend-jsta+1 jj = jsta+j-1 - do i=1,im - datapd(i,j,cfld) = GRID1(i,jj) + do i=1,iend-ista+1 + ii = ista+i-1 + datapd(i,j,cfld) = GRID1(ii,jj) enddo enddo endif @@ -1160,7 +1180,7 @@ SUBROUTINE MDLFLD IF (LVLS(L,IGET(766)) > 0)THEN LL=LM-L+1 DO J=JSTA,JEND - DO I=1,IM + DO I=ista,iend if(QQNWFA(I,J,LL)<1.e-8)QQNWFA(I,J,LL)=0. !tgs GRID1(I,J)=QQNWFA(I,J,LL) ENDDO @@ -1169,7 +1189,7 @@ SUBROUTINE MDLFLD cfld=cfld+1 fld_info(cfld)%ifld=IAVBLFLD(IGET(766)) fld_info(cfld)%lvl=LVLSXML(L,IGET(766)) - datapd(1:im,1:jend-jsta+1,cfld)=GRID1(1:im,jsta:jend) + datapd(1:iend-ista+1,1:jend-jsta+1,cfld)=GRID1(ista:iend,jsta:jend) endif ENDIF ENDIF @@ -1180,7 +1200,7 @@ SUBROUTINE MDLFLD IF (LVLS(L,IGET(767)) > 0)THEN LL=LM-L+1 DO J=JSTA,JEND - DO I=1,IM + DO I=ista,iend if(QQNIFA(I,J,LL)<1.e-8)QQNIFA(I,J,LL)=0. !tgs GRID1(I,J)=QQNIFA(I,J,LL) ENDDO @@ -1189,7 +1209,7 @@ SUBROUTINE MDLFLD cfld=cfld+1 fld_info(cfld)%ifld=IAVBLFLD(IGET(767)) fld_info(cfld)%lvl=LVLSXML(L,IGET(767)) - datapd(1:im,1:jend-jsta+1,cfld)=GRID1(1:im,jsta:jend) + datapd(1:iend-ista+1,1:jend-jsta+1,cfld)=GRID1(ista:iend,jsta:jend) endif ENDIF ENDIF @@ -1201,9 +1221,12 @@ SUBROUTINE MDLFLD LL=LM-L+1 !$omp parallel do private(i,j) DO J=JSTA,JEND - DO I=1,IM - IF(abs(CFR(I,J,LL)-SPVAL) > SMALL) & - & GRID1(I,J) = CFR(I,J,LL)*H100 + DO I=ista,iend + IF(abs(CFR(I,J,LL)-SPVAL) > SMALL) THEN + GRID1(I,J) = CFR(I,J,LL)*H100 + ELSE + GRID1(I,J) = SPVAL + ENDIF ENDDO ENDDO CALL BOUND(GRID1,D00,H100) @@ -1211,11 +1234,12 @@ SUBROUTINE MDLFLD cfld=cfld+1 fld_info(cfld)%ifld=IAVBLFLD(IGET(145)) fld_info(cfld)%lvl=LVLSXML(L,IGET(145)) -!$omp parallel do private(i,j,jj) +!$omp parallel do private(i,j,ii,jj) do j=1,jend-jsta+1 jj = jsta+j-1 - do i=1,im - datapd(i,j,cfld) = GRID1(i,jj) + do i=1,iend-ista+1 + ii = ista+i-1 + datapd(i,j,cfld) = GRID1(ii,jj) enddo enddo endif @@ -1229,7 +1253,7 @@ SUBROUTINE MDLFLD LL=LM-L+1 !$omp parallel do private(i,j) DO J=JSTA,JEND - DO I=1,IM + DO I=ista,iend IF(MODELNAME == 'RAPR') THEN GRID1(I,J) = CFR(I,J,LL) ELSE @@ -1241,11 +1265,12 @@ SUBROUTINE MDLFLD cfld=cfld+1 fld_info(cfld)%ifld=IAVBLFLD(IGET(774)) fld_info(cfld)%lvl=LVLSXML(L,IGET(774)) -!$omp parallel do private(i,j,jj) +!$omp parallel do private(i,j,ii,jj) do j=1,jend-jsta+1 jj = jsta+j-1 - do i=1,im - datapd(i,j,cfld) = GRID1(i,jj) + do i=1,iend-ista+1 + ii = ista+i-1 + datapd(i,j,cfld) = GRID1(ii,jj) enddo enddo endif @@ -1268,14 +1293,14 @@ SUBROUTINE MDLFLD IF(IMP_PHYSICS == 8 .or. IMP_PHYSICS == 28) THEN !$omp parallel do private(i,j) DO J=JSTA,JEND - DO I=1,IM + DO I=ista,iend GRID1(I,J) = REF_10CM(I,J,LL) ENDDO ENDDO ELSE !$omp parallel do private(i,j) DO J=JSTA,JEND - DO I=1,IM + DO I=ista,iend GRID1(I,J) = DBZ(I,J,LL) ENDDO ENDDO @@ -1286,11 +1311,12 @@ SUBROUTINE MDLFLD cfld=cfld+1 fld_info(cfld)%ifld=IAVBLFLD(IGET(250)) fld_info(cfld)%lvl=LVLSXML(L,IGET(250)) -!$omp parallel do private(i,j,jj) +!$omp parallel do private(i,j,ii,jj) do j=1,jend-jsta+1 jj = jsta+j-1 - do i=1,im - datapd(i,j,cfld) = GRID1(i,jj) + do i=1,iend-ista+1 + ii = ista+i-1 + datapd(i,j,cfld) = GRID1(ii,jj) enddo enddo endif @@ -1305,7 +1331,7 @@ SUBROUTINE MDLFLD LL=LM-L+1 !$omp parallel do private(i,j) DO J=JSTA,JEND - DO I=1,IM + DO I=ista,iend GRID1(I,J) = CWM(I,J,LL) ENDDO ENDDO @@ -1313,11 +1339,12 @@ SUBROUTINE MDLFLD cfld=cfld+1 fld_info(cfld)%ifld=IAVBLFLD(IGET(199)) fld_info(cfld)%lvl=LVLSXML(L,IGET(199)) -!$omp parallel do private(i,j,jj) +!$omp parallel do private(i,j,ii,jj) do j=1,jend-jsta+1 jj = jsta+j-1 - do i=1,im - datapd(i,j,cfld) = GRID1(i,jj) + do i=1,iend-ista+1 + ii = ista+i-1 + datapd(i,j,cfld) = GRID1(ii,jj) enddo enddo endif @@ -1331,7 +1358,7 @@ SUBROUTINE MDLFLD LL=LM-L+1 !$omp parallel do private(i,j) DO J=JSTA,JEND - DO I=1,IM + DO I=ista,iend GRID1(I,J) = F_rain(I,J,LL) ENDDO ENDDO @@ -1339,11 +1366,12 @@ SUBROUTINE MDLFLD cfld=cfld+1 fld_info(cfld)%ifld=IAVBLFLD(IGET(185)) fld_info(cfld)%lvl=LVLSXML(L,IGET(185)) -!$omp parallel do private(i,j,jj) +!$omp parallel do private(i,j,ii,jj) do j=1,jend-jsta+1 jj = jsta+j-1 - do i=1,im - datapd(i,j,cfld) = GRID1(i,jj) + do i=1,iend-ista+1 + ii = ista+i-1 + datapd(i,j,cfld) = GRID1(ii,jj) enddo enddo endif @@ -1357,7 +1385,7 @@ SUBROUTINE MDLFLD LL=LM-L+1 !$omp parallel do private(i,j) DO J=JSTA,JEND - DO I=1,IM + DO I=ista,iend GRID1(I,J) = F_ice(I,J,LL) ENDDO ENDDO @@ -1365,11 +1393,12 @@ SUBROUTINE MDLFLD cfld=cfld+1 fld_info(cfld)%ifld=IAVBLFLD(IGET(186)) fld_info(cfld)%lvl=LVLSXML(L,IGET(186)) -!$omp parallel do private(i,j,jj) +!$omp parallel do private(i,j,ii,jj) do j=1,jend-jsta+1 jj = jsta+j-1 - do i=1,im - datapd(i,j,cfld) = GRID1(i,jj) + do i=1,iend-ista+1 + ii = ista+i-1 + datapd(i,j,cfld) = GRID1(ii,jj) enddo enddo endif @@ -1384,7 +1413,7 @@ SUBROUTINE MDLFLD LL=LM-L+1 !$omp parallel do private(i,j) DO J=JSTA,JEND - DO I=1,IM + DO I=ista,iend GRID1(I,J) = F_RimeF(I,J,LL) ENDDO ENDDO @@ -1392,11 +1421,12 @@ SUBROUTINE MDLFLD cfld=cfld+1 fld_info(cfld)%ifld=IAVBLFLD(IGET(187)) fld_info(cfld)%lvl=LVLSXML(L,IGET(187)) -!$omp parallel do private(i,j,jj) +!$omp parallel do private(i,j,ii,jj) do j=1,jend-jsta+1 jj = jsta+j-1 - do i=1,im - datapd(i,j,cfld) = GRID1(i,jj) + do i=1,iend-ista+1 + ii = ista+i-1 + datapd(i,j,cfld) = GRID1(ii,jj) enddo enddo endif @@ -1410,7 +1440,7 @@ SUBROUTINE MDLFLD LL=LM-L+1 !$omp parallel do private(i,j) DO J=JSTA,JEND - DO I=1,IM + DO I=ista,iend GRID1(I,J) = ZMID(I,J,LL) ENDDO ENDDO @@ -1418,11 +1448,12 @@ SUBROUTINE MDLFLD cfld=cfld+1 fld_info(cfld)%ifld=IAVBLFLD(IGET(077)) fld_info(cfld)%lvl=LVLSXML(L,IGET(077)) -!$omp parallel do private(i,j,jj) +!$omp parallel do private(i,j,ii,jj) do j=1,jend-jsta+1 jj = jsta+j-1 - do i=1,im - datapd(i,j,cfld) = GRID1(i,jj) + do i=1,iend-ista+1 + ii = ista+i-1 + datapd(i,j,cfld) = GRID1(ii,jj) enddo enddo endif @@ -1436,7 +1467,7 @@ SUBROUTINE MDLFLD LL=LM-L+1 !$omp parallel do private(i,j) DO J=JSTA,JEND - DO I=1,IM + DO I=ista,iend GRID1(I,J) = T(I,J,LL) ENDDO ENDDO @@ -1444,11 +1475,12 @@ SUBROUTINE MDLFLD cfld=cfld+1 fld_info(cfld)%ifld=IAVBLFLD(IGET(002)) fld_info(cfld)%lvl=LVLSXML(L,IGET(002)) -!$omp parallel do private(i,j,jj) +!$omp parallel do private(i,j,ii,jj) do j=1,jend-jsta+1 jj = jsta+j-1 - do i=1,im - datapd(i,j,cfld) = GRID1(i,jj) + do i=1,iend-ista+1 + ii = ista+i-1 + datapd(i,j,cfld) = GRID1(ii,jj) enddo enddo endif @@ -1462,7 +1494,7 @@ SUBROUTINE MDLFLD LL=LM-L+1 !$omp parallel do private(i,j) DO J=JSTA,JEND - DO I=1,IM + DO I=ista,iend IF(T(I,J,LL)0) THEN !HC IF (LVLS(L,IGET(124))>0) THEN !HC DO J=JSTA,JEND -!HC DO I=1,IM +!HC DO I=ista,iend !HC IF(CWM(I,J,L)<0..AND.CWM(I,J,L)>-1.E-10) !HC 1 CWM(I,J,L)=0. !HC GRID1(I,J)=CWM(I,J,L) !HC ENDDO !HC ENDDO !HC ID(1:25) = 0 -!HC CALL GRIBIT(IGET(124),L,GRID1,IM,JM) +!HC CALL GRIBIT(IGET(124),L,GRIDista,iend,JM) !HC ENDIF !HC ENDIF ! @@ -1941,12 +1987,12 @@ SUBROUTINE MDLFLD ! IF (IGET(125)>0) THEN ! IF (LVLS(L,IGET(125))>0) THEN ! DO J=JSTA,JEND -! DO I=1,IM +! DO I=ista,iend ! GRID1(I,J)=QICE(I,J,L) ! ENDDO ! ENDDO ! ID(1:25) = 0 -! CALL GRIBIT(IGET(125),L,GRID1,IM,JM) +! CALL GRIBIT(IGET(125),L,GRIDista,iend,JM) ! ENDIF ! ENDIF ! @@ -1956,12 +2002,12 @@ SUBROUTINE MDLFLD ! IF (IGET(145)>0) THEN ! IF (LVLS(L,IGET(145))>0) THEN ! DO J=JSTA,JEND -! DO I=1,IM +! DO I=ista,iend ! GRID1(I,J)=CFRC(I,J,L) ! ENDDO ! ENDDO ! ID(1:25) = 0 -! CALL GRIBIT(IGET(145),L,GRID1,IM,JM) +! CALL GRIBIT(IGET(145),L,GRIDista,iend,JM) ! ENDIF ! ENDIF ! @@ -1972,7 +2018,7 @@ SUBROUTINE MDLFLD LL=LM-L+1 !$omp parallel do private(i,j) DO J=JSTA,JEND - DO I=1,IM + DO I=ista,iend GRID1(I,J) = TTND(I,J,LL) ENDDO ENDDO @@ -1980,11 +2026,12 @@ SUBROUTINE MDLFLD cfld=cfld+1 fld_info(cfld)%ifld=IAVBLFLD(IGET(140)) fld_info(cfld)%lvl=LVLSXML(L,IGET(140)) -!$omp parallel do private(i,j,jj) +!$omp parallel do private(i,j,ii,jj) do j=1,jend-jsta+1 jj = jsta+j-1 - do i=1,im - datapd(i,j,cfld) = GRID1(i,jj) + do i=1,iend-ista+1 + ii = ista+i-1 + datapd(i,j,cfld) = GRID1(ii,jj) enddo enddo endif @@ -1998,7 +2045,7 @@ SUBROUTINE MDLFLD LL=LM-L+1 !$omp parallel do private(i,j) DO J=JSTA,JEND - DO I=1,IM + DO I=ista,iend GRID1(I,J) = RSWTT(I,J,LL) ENDDO ENDDO @@ -2006,11 +2053,12 @@ SUBROUTINE MDLFLD cfld=cfld+1 fld_info(cfld)%ifld=IAVBLFLD(IGET(040)) fld_info(cfld)%lvl=LVLSXML(L,IGET(040)) -!$omp parallel do private(i,j,jj) +!$omp parallel do private(i,j,ii,jj) do j=1,jend-jsta+1 jj = jsta+j-1 - do i=1,im - datapd(i,j,cfld) = GRID1(i,jj) + do i=1,iend-ista+1 + ii = ista+i-1 + datapd(i,j,cfld) = GRID1(ii,jj) enddo enddo endif @@ -2024,7 +2072,7 @@ SUBROUTINE MDLFLD LL=LM-L+1 !$omp parallel do private(i,j) DO J=JSTA,JEND - DO I=1,IM + DO I=ista,iend GRID1(I,J) = RLWTT(I,J,LL) ENDDO ENDDO @@ -2032,11 +2080,12 @@ SUBROUTINE MDLFLD cfld=cfld+1 fld_info(cfld)%ifld=IAVBLFLD(IGET(041)) fld_info(cfld)%lvl=LVLSXML(L,IGET(041)) -!$omp parallel do private(i,j,jj) +!$omp parallel do private(i,j,ii,jj) do j=1,jend-jsta+1 jj = jsta+j-1 - do i=1,im - datapd(i,j,cfld) = GRID1(i,jj) + do i=1,iend-ista+1 + ii = ista+i-1 + datapd(i,j,cfld) = GRID1(ii,jj) enddo enddo endif @@ -2055,9 +2104,9 @@ SUBROUTINE MDLFLD ELSE RRNUM=0. ENDIF -!$omp parallel do +!$omp parallel do private(i,j) DO J=JSTA,JEND - DO I=1,IM + DO I=ista,iend IF(TRAIN(I,J,LL)0) THEN IF (LVLS(L,IGET(994))>0) THEN LL=LM-L+1 !$omp parallel do private(i,j) DO J=JSTA,JEND - DO I=1,IM - GRID1(I,J) = OZCON(I,J,LL)*1000. ! convert ppm to ppb + DO I=ISTA,IEND + IF(AVGOZCON(I,J,LL)ug/m3 + DO I=ISTA,IEND + GRID1(I,J) = AVGPMTF(I,J,LL) !ug/m3 ENDDO ENDDO - + ID(1:25) = 0 + ITHEAT = INT(THEAT) + ID(19) = IFHR + ID(20) = 3 + IF (IFHR==0) THEN + ID(18) = 0 + ELSE + ID(18) = IFHR-1 + ENDIF if(grib=="grib2") then cfld=cfld+1 fld_info(cfld)%ifld=IAVBLFLD(IGET(995)) fld_info(cfld)%lvl=LVLSXML(L,IGET(995)) -!$omp parallel do private(i,j,jj) + if(IFHR==0) then + fld_info(cfld)%ntrange=0 + else + fld_info(cfld)%ntrange=1 + endif + fld_info(cfld)%tinvstat=IFHR-ID(18) +!$omp parallel do private(i,j,ii,jj) do j=1,jend-jsta+1 jj = jsta+j-1 - do i=1,im - datapd(i,j,cfld) = GRID1(i,jj) + do i=1,iend-ista+1 + ii = ista+i-1 + datapd(i,j,cfld) = GRID1(ii,jj) enddo enddo endif @@ -2255,9 +2340,9 @@ SUBROUTINE MDLFLD LL=LM-L+1 !$omp parallel do private(i,j) DO J=JSTA,JEND - DO I=1,IM + DO I=ista,iend IF(PMID(I,J,LL)0) THEN + IF (LVLS(L,IGET(742))>0) THEN + LL=LM-L+1 +!$omp parallel do private(i,j) + DO J=JSTA,JEND + DO I=ista,iend + IF(PMID(I,J,LL)0) THEN IF (LVLS(L,IGET(629))>0) THEN LL=LM-L+1 !$omp parallel do private(i,j) DO J=JSTA,JEND - DO I=1,IM + DO I=ista,iend IF(DUST(I,J,LL,1)ug/m3 @@ -2297,11 +2414,12 @@ SUBROUTINE MDLFLD cfld=cfld+1 fld_info(cfld)%ifld=IAVBLFLD(IGET(629)) fld_info(cfld)%lvl=LVLSXML(L,IGET(629)) -!$omp parallel do private(i,j,jj) +!$omp parallel do private(i,j,ii,jj) do j=1,jend-jsta+1 jj = jsta+j-1 - do i=1,im - datapd(i,j,cfld) = GRID1(i,jj) + do i=1,iend-ista+1 + ii = ista+i-1 + datapd(i,j,cfld) = GRID1(ii,jj) enddo enddo endif @@ -2314,7 +2432,7 @@ SUBROUTINE MDLFLD LL=LM-L+1 !$omp parallel do private(i,j) DO J=JSTA,JEND - DO I=1,IM + DO I=ista,iend IF(DUST(I,J,LL,2)ug/m3 @@ -2327,11 +2445,12 @@ SUBROUTINE MDLFLD cfld=cfld+1 fld_info(cfld)%ifld=IAVBLFLD(IGET(630)) fld_info(cfld)%lvl=LVLSXML(L,IGET(630)) -!$omp parallel do private(i,j,jj) +!$omp parallel do private(i,j,ii,jj) do j=1,jend-jsta+1 jj = jsta+j-1 - do i=1,im - datapd(i,j,cfld) = GRID1(i,jj) + do i=1,iend-ista+1 + ii = ista+i-1 + datapd(i,j,cfld) = GRID1(ii,jj) enddo enddo endif @@ -2344,7 +2463,7 @@ SUBROUTINE MDLFLD LL=LM-L+1 !$omp parallel do private(i,j) DO J=JSTA,JEND - DO I=1,IM + DO I=ista,iend IF(DUST(I,J,LL,3)ug/m3 @@ -2357,11 +2476,12 @@ SUBROUTINE MDLFLD cfld=cfld+1 fld_info(cfld)%ifld=IAVBLFLD(IGET(631)) fld_info(cfld)%lvl=LVLSXML(L,IGET(631)) -!$omp parallel do private(i,j,jj) +!$omp parallel do private(i,j,ii,jj) do j=1,jend-jsta+1 jj = jsta+j-1 - do i=1,im - datapd(i,j,cfld) = GRID1(i,jj) + do i=1,iend-ista+1 + ii = ista+i-1 + datapd(i,j,cfld) = GRID1(ii,jj) enddo enddo endif @@ -2374,7 +2494,7 @@ SUBROUTINE MDLFLD LL=LM-L+1 !$omp parallel do private(i,j) DO J=JSTA,JEND - DO I=1,IM + DO I=ista,iend IF(DUST(I,J,LL,4)ug/m3 @@ -2387,11 +2507,12 @@ SUBROUTINE MDLFLD cfld=cfld+1 fld_info(cfld)%ifld=IAVBLFLD(IGET(632)) fld_info(cfld)%lvl=LVLSXML(L,IGET(632)) -!$omp parallel do private(i,j,jj) +!$omp parallel do private(i,j,ii,jj) do j=1,jend-jsta+1 jj = jsta+j-1 - do i=1,im - datapd(i,j,cfld) = GRID1(i,jj) + do i=1,iend-ista+1 + ii = ista+i-1 + datapd(i,j,cfld) = GRID1(ii,jj) enddo enddo endif @@ -2404,7 +2525,7 @@ SUBROUTINE MDLFLD LL=LM-L+1 !$omp parallel do private(i,j) DO J=JSTA,JEND - DO I=1,IM + DO I=ista,iend IF(DUST(I,J,LL,5)ug/m3 @@ -2417,11 +2538,12 @@ SUBROUTINE MDLFLD cfld=cfld+1 fld_info(cfld)%ifld=IAVBLFLD(IGET(633)) fld_info(cfld)%lvl=LVLSXML(L,IGET(633)) -!$omp parallel do private(i,j,jj) +!$omp parallel do private(i,j,ii,jj) do j=1,jend-jsta+1 jj = jsta+j-1 - do i=1,im - datapd(i,j,cfld) = GRID1(i,jj) + do i=1,iend-ista+1 + ii = ista+i-1 + datapd(i,j,cfld) = GRID1(ii,jj) enddo enddo endif @@ -2434,7 +2556,7 @@ SUBROUTINE MDLFLD LL=LM-L+1 !$omp parallel do private(i,j) DO J=JSTA,JEND - DO I=1,IM + DO I=ista,iend IF(SALT(I,J,LL,1)ug/m3 ELSE @@ -2446,11 +2568,12 @@ SUBROUTINE MDLFLD cfld=cfld+1 fld_info(cfld)%ifld=IAVBLFLD(IGET(634)) fld_info(cfld)%lvl=LVLSXML(L,IGET(634)) -!$omp parallel do private(i,j,jj) +!$omp parallel do private(i,j,ii,jj) do j=1,jend-jsta+1 jj = jsta+j-1 - do i=1,im - datapd(i,j,cfld) = GRID1(i,jj) + do i=1,iend-ista+1 + ii = ista+i-1 + datapd(i,j,cfld) = GRID1(ii,jj) enddo enddo endif @@ -2463,7 +2586,7 @@ SUBROUTINE MDLFLD LL=LM-L+1 !$omp parallel do private(i,j) DO J=JSTA,JEND - DO I=1,IM + DO I=ista,iend IF(SALT(I,J,LL,2)ug/m3 ELSE @@ -2475,11 +2598,12 @@ SUBROUTINE MDLFLD cfld=cfld+1 fld_info(cfld)%ifld=IAVBLFLD(IGET(635)) fld_info(cfld)%lvl=LVLSXML(L,IGET(635)) -!$omp parallel do private(i,j,jj) +!$omp parallel do private(i,j,ii,jj) do j=1,jend-jsta+1 jj = jsta+j-1 - do i=1,im - datapd(i,j,cfld) = GRID1(i,jj) + do i=1,iend-ista+1 + ii = ista+i-1 + datapd(i,j,cfld) = GRID1(ii,jj) enddo enddo endif @@ -2492,7 +2616,7 @@ SUBROUTINE MDLFLD LL=LM-L+1 !$omp parallel do private(i,j) DO J=JSTA,JEND - DO I=1,IM + DO I=ista,iend IF(SALT(I,J,LL,3)ug/m3 ELSE @@ -2504,11 +2628,12 @@ SUBROUTINE MDLFLD cfld=cfld+1 fld_info(cfld)%ifld=IAVBLFLD(IGET(636)) fld_info(cfld)%lvl=LVLSXML(L,IGET(636)) -!$omp parallel do private(i,j,jj) +!$omp parallel do private(i,j,ii,jj) do j=1,jend-jsta+1 jj = jsta+j-1 - do i=1,im - datapd(i,j,cfld) = GRID1(i,jj) + do i=1,iend-ista+1 + ii = ista+i-1 + datapd(i,j,cfld) = GRID1(ii,jj) enddo enddo endif @@ -2521,7 +2646,7 @@ SUBROUTINE MDLFLD LL=LM-L+1 !$omp parallel do private(i,j) DO J=JSTA,JEND - DO I=1,IM + DO I=ista,iend IF(SALT(I,J,LL,4)ug/m3 ELSE @@ -2533,11 +2658,12 @@ SUBROUTINE MDLFLD cfld=cfld+1 fld_info(cfld)%ifld=IAVBLFLD(IGET(637)) fld_info(cfld)%lvl=LVLSXML(L,IGET(637)) -!$omp parallel do private(i,j,jj) +!$omp parallel do private(i,j,ii,jj) do j=1,jend-jsta+1 jj = jsta+j-1 - do i=1,im - datapd(i,j,cfld) = GRID1(i,jj) + do i=1,iend-ista+1 + ii = ista+i-1 + datapd(i,j,cfld) = GRID1(ii,jj) enddo enddo endif @@ -2550,7 +2676,7 @@ SUBROUTINE MDLFLD LL=LM-L+1 !$omp parallel do private(i,j) DO J=JSTA,JEND - DO I=1,IM + DO I=ista,iend IF(SALT(I,J,LL,5)ug/m3 ELSE @@ -2562,11 +2688,12 @@ SUBROUTINE MDLFLD cfld=cfld+1 fld_info(cfld)%ifld=IAVBLFLD(IGET(638)) fld_info(cfld)%lvl=LVLSXML(L,IGET(638)) -!$omp parallel do private(i,j,jj) +!$omp parallel do private(i,j,ii,jj) do j=1,jend-jsta+1 jj = jsta+j-1 - do i=1,im - datapd(i,j,cfld) = GRID1(i,jj) + do i=1,iend-ista+1 + ii = ista+i-1 + datapd(i,j,cfld) = GRID1(ii,jj) enddo enddo endif @@ -2579,7 +2706,7 @@ SUBROUTINE MDLFLD LL=LM-L+1 !$omp parallel do private(i,j) DO J=JSTA,JEND - DO I=1,IM + DO I=ista,iend IF(SUSO(I,J,LL,1)ug/m3 @@ -2592,11 +2719,12 @@ SUBROUTINE MDLFLD cfld=cfld+1 fld_info(cfld)%ifld=IAVBLFLD(IGET(639)) fld_info(cfld)%lvl=LVLSXML(L,IGET(639)) -!$omp parallel do private(i,j,jj) +!$omp parallel do private(i,j,ii,jj) do j=1,jend-jsta+1 jj = jsta+j-1 - do i=1,im - datapd(i,j,cfld) = GRID1(i,jj) + do i=1,iend-ista+1 + ii = ista+i-1 + datapd(i,j,cfld) = GRID1(ii,jj) enddo enddo endif @@ -2609,7 +2737,7 @@ SUBROUTINE MDLFLD LL=LM-L+1 !$omp parallel do private(i,j) DO J=JSTA,JEND - DO I=1,IM + DO I=ista,iend IF(WASO(I,J,LL,1)0) THEN + IF (LVLS(L,IGET(688))>0) THEN + LL=LM-L+1 +!$omp parallel do private(i,j) + DO J=JSTA,JEND + DO I=ista,iend + IF(NO3(I,J,LL,1)ug/m3 + ELSE + GRID1(I,J) = spval + ENDIF + ENDDO + ENDDO + if(grib=="grib2") then + cfld=cfld+1 + fld_info(cfld)%ifld=IAVBLFLD(IGET(688)) + fld_info(cfld)%lvl=LVLSXML(L,IGET(688)) +!$omp parallel do private(i,j,ii,jj) do j=1,jend-jsta+1 jj = jsta+j-1 - do i=1,im - datapd(i,j,cfld) = GRID1(i,jj) + do i=1,iend-ista+1 + ii = ista+i-1 + datapd(i,j,cfld) = GRID1(ii,jj) enddo enddo endif END IF ENDIF +! NH4 + IF (IGET(689)>0) THEN + IF (LVLS(L,IGET(689))>0) THEN + LL=LM-L+1 +!$omp parallel do private(i,j) + DO J=JSTA,JEND + DO I=ista,iend + IF(NH4(I,J,LL,1)ug/m3 + ELSE + GRID1(I,J) = spval + ENDIF + ENDDO + ENDDO + if(grib=="grib2") then + cfld=cfld+1 + fld_info(cfld)%ifld=IAVBLFLD(IGET(689)) + fld_info(cfld)%lvl=LVLSXML(L,IGET(689)) +!$omp parallel do private(i,j,ii,jj) + do j=1,jend-jsta+1 + jj = jsta+j-1 + do i=1,iend-ista+1 + ii = ista+i-1 + datapd(i,j,cfld) = GRID1(ii,jj) + enddo + enddo + endif + END IF + ENDIF + endif !nasa_on + endif !gocart_on + ! AIR DENSITY IF (IGET(644)>0) THEN IF (LVLS(L,IGET(644))>0) THEN LL=LM-L+1 !$omp parallel do private(i,j) DO J=JSTA,JEND - DO I=1,IM + DO I=ista,iend GRID1(I,J) = RHOMID(I,J,LL) ENDDO ENDDO @@ -2737,11 +2933,12 @@ SUBROUTINE MDLFLD cfld=cfld+1 fld_info(cfld)%ifld=IAVBLFLD(IGET(644)) fld_info(cfld)%lvl=LVLSXML(L,IGET(644)) -!$omp parallel do private(i,j,jj) +!$omp parallel do private(i,j,ii,jj) do j=1,jend-jsta+1 jj = jsta+j-1 - do i=1,im - datapd(i,j,cfld) = GRID1(i,jj) + do i=1,iend-ista+1 + ii = ista+i-1 + datapd(i,j,cfld) = GRID1(ii,jj) enddo enddo endif @@ -2754,7 +2951,7 @@ SUBROUTINE MDLFLD LL=LM-L+1 !$omp parallel do private(i,j) DO J=JSTA,JEND - DO I=1,IM + DO I=ista,iend GRID1(I,J) = DPRES(I,J,LL) ENDDO ENDDO @@ -2762,11 +2959,12 @@ SUBROUTINE MDLFLD cfld=cfld+1 fld_info(cfld)%ifld=IAVBLFLD(IGET(645)) fld_info(cfld)%lvl=LVLSXML(L,IGET(645)) -!$omp parallel do private(i,j,jj) +!$omp parallel do private(i,j,ii,jj) do j=1,jend-jsta+1 jj = jsta+j-1 - do i=1,im - datapd(i,j,cfld) = GRID1(i,jj) + do i=1,iend-ista+1 + ii = ista+i-1 + datapd(i,j,cfld) = GRID1(ii,jj) enddo enddo endif @@ -2793,7 +2991,7 @@ SUBROUTINE MDLFLD !MEB Eta-specific code ! NEED TO CALCULATE RAIN WATER AND SNOW MIXING RATIOS ! DO J=JSTA,JEND -! DO I=1,IM +! DO I=ista,iend !MEB IF (PREC(I,J)==0) THEN !MEB QSNO(I,J)=0. !MEB QRAIN(I,J)=0. @@ -2822,13 +3020,13 @@ SUBROUTINE MDLFLD ! ENDDO ! CALL CALVIS(QV,QCD,QRAIN1,QICE1,QSNO1,TT,PPP,VIS) ! DO J=JSTA,JEND -! DO I=1,IM +! DO I=ista,iend ! GRID1(I,J)=VIS(I,J) ! ENDDO ! ENDDO ! ID(1:25) = 0 ! CALL GRIBIT(IGET(180),LVLS(1,IGET(180)), -! X GRID1,IM,JM) +! X GRIDista,iend,JM) ! ENDIF ! ! INSTANTANEOUS CONVECTIVE PRECIPITATION RATE. @@ -2836,13 +3034,13 @@ SUBROUTINE MDLFLD ! IF (IGET(249)>0) THEN ! RDTPHS=1000./DTQ2 ! DO J=JSTA,JEND -! DO I=1,IM +! DO I=ista,iend ! GRID1(I,J)=CPRATE(I,J)*RDTPHS ! GRID1(I,J)=SPVAL ! ENDDO ! ENDDO ! ID(1:25) = 0 -! CALL GRIBIT(IGET(249),LM,GRID1,IM,JM) +! CALL GRIBIT(IGET(249),LM,GRIDista,iend,JM) ! ENDIF ! ! COMPOSITE RADAR REFLECTIVITY (maximum dBZ in each column) @@ -2851,7 +3049,7 @@ SUBROUTINE MDLFLD IF(IMP_PHYSICS /= 8 .and. IMP_PHYSICS /= 28) THEN !$omp parallel do private(i,j,l) DO J=JSTA,JEND - DO I=1,IM + DO I=ista,iend GRID1(I,J) = DBZmin DO L=1,NINT(LMH(I,J)) GRID1(I,J) = MAX( GRID1(I,J), DBZ(I,J,L) ) @@ -2871,7 +3069,7 @@ SUBROUTINE MDLFLD MODELNAME=='NMM' .and. gridtype=='E')THEN !$omp parallel do private(i,j,l) DO J=JSTA,JEND - DO I=1,IM + DO I=ista,iend GRID1(I,J) = DBZmin DO L=1,NINT(LMH(I,J)) GRID1(I,J) = MAX( GRID1(I,J), REF_10CM(I,J,L) ) @@ -2881,7 +3079,7 @@ SUBROUTINE MDLFLD ELSE !$omp parallel do private(i,j) DO J=JSTA,JEND - DO I=1,IM + DO I=ista,iend GRID1(I,J) = REFC_10CM(I,J) ENDDO ENDDO @@ -2890,7 +3088,7 @@ SUBROUTINE MDLFLD ELSE !$omp parallel do private(i,j) DO J=JSTA,JEND - DO I=1,IM + DO I=ista,iend GRID1(I,J) = refl(i,j) ENDDO ENDDO @@ -2900,11 +3098,12 @@ SUBROUTINE MDLFLD if(grib=="grib2") then cfld=cfld+1 fld_info(cfld)%ifld=IAVBLFLD(IGET(252)) -!$omp parallel do private(i,j,jj) +!$omp parallel do private(i,j,ii,jj) do j=1,jend-jsta+1 jj = jsta+j-1 - do i=1,im - datapd(i,j,cfld) = GRID1(i,jj) + do i=1,iend-ista+1 + ii = ista+i-1 + datapd(i,j,cfld) = GRID1(ii,jj) enddo enddo endif @@ -2915,12 +3114,14 @@ SUBROUTINE MDLFLD ! on emprical conversion factors (0.00344) IF (IGET(581)>0) THEN DO J=JSTA,JEND - DO I=1,IM + DO I=ista,iend GRID1(I,J)=0.0 DO L=1,NINT(LMH(I,J)) if(zint(i,j,l) < spval .and.zint(i,j,l+1)0) THEN DO J=JSTA,JEND - DO I=1,IM + DO I=ista,iend GRID1(I,J)=DBZmin DO L=1,NINT(LMH(I,J)) GRID1(I,J)=MAX( GRID1(I,J), DBZR(I,J,L) ) @@ -2952,11 +3154,12 @@ SUBROUTINE MDLFLD if(grib=="grib2") then cfld=cfld+1 fld_info(cfld)%ifld=IAVBLFLD(IGET(276)) -!$omp parallel do private(i,j,jj) +!$omp parallel do private(i,j,ii,jj) do j=1,jend-jsta+1 jj = jsta+j-1 - do i=1,im - datapd(i,j,cfld) = GRID1(i,jj) + do i=1,iend-ista+1 + ii = ista+i-1 + datapd(i,j,cfld) = GRID1(ii,jj) enddo enddo endif @@ -2967,7 +3170,7 @@ SUBROUTINE MDLFLD ! IF (IGET(277)>0) THEN DO J=JSTA,JEND - DO I=1,IM + DO I=ista,iend GRID1(I,J)=DBZmin DO L=1,NINT(LMH(I,J)) GRID1(I,J)=MAX( GRID1(I,J), DBZI(I,J,L) ) @@ -2977,11 +3180,12 @@ SUBROUTINE MDLFLD if(grib=="grib2") then cfld=cfld+1 fld_info(cfld)%ifld=IAVBLFLD(IGET(277)) -!$omp parallel do private(i,j,jj) +!$omp parallel do private(i,j,ii,jj) do j=1,jend-jsta+1 jj = jsta+j-1 - do i=1,im - datapd(i,j,cfld) = GRID1(i,jj) + do i=1,iend-ista+1 + ii = ista+i-1 + datapd(i,j,cfld) = GRID1(ii,jj) enddo enddo endif @@ -2994,7 +3198,7 @@ SUBROUTINE MDLFLD ! IF (IGET(278)>0) THEN DO J=JSTA,JEND - DO I=1,IM + DO I=ista,iend GRID1(I,J)=DBZmin DO L=1,NINT(LMH(I,J)) GRID1(I,J)=MAX( GRID1(I,J), DBZC(I,J,L) ) @@ -3004,11 +3208,12 @@ SUBROUTINE MDLFLD if(grib=="grib2") then cfld=cfld+1 fld_info(cfld)%ifld=IAVBLFLD(IGET(278)) -!$omp parallel do private(i,j,jj) +!$omp parallel do private(i,j,ii,jj) do j=1,jend-jsta+1 jj = jsta+j-1 - do i=1,im - datapd(i,j,cfld) = GRID1(i,jj) + do i=1,iend-ista+1 + ii = ista+i-1 + datapd(i,j,cfld) = GRID1(ii,jj) enddo enddo endif @@ -3020,7 +3225,7 @@ SUBROUTINE MDLFLD IF (IGET(426)>0) THEN DO J=JSTA,JEND - DO I=1,IM + DO I=ista,iend GRID1(I,J)=0.0 DO L=1,NINT(LMH(I,J)) IF (DBZ(I,J,L)>=18.0) THEN @@ -3033,11 +3238,12 @@ SUBROUTINE MDLFLD if(grib=="grib2") then cfld=cfld+1 fld_info(cfld)%ifld=IAVBLFLD(IGET(426)) -!$omp parallel do private(i,j,jj) +!$omp parallel do private(i,j,ii,jj) do j=1,jend-jsta+1 jj = jsta+j-1 - do i=1,im - datapd(i,j,cfld) = GRID1(i,jj) + do i=1,iend-ista+1 + ii = ista+i-1 + datapd(i,j,cfld) = GRID1(ii,jj) enddo enddo endif @@ -3055,7 +3261,7 @@ SUBROUTINE MDLFLD IF (IGET(768) > 0) THEN IF(MODELNAME == 'RAPR' .AND. (IMP_PHYSICS == 8 .or. IMP_PHYSICS == 28)) THEN DO J=JSTA,JEND - DO I=1,IM + DO I=ista,iend GRID1(I,J) = -999. DO L=1,NINT(LMH(I,J)) IF (REF_10CM(I,J,L)>=18.0) THEN @@ -3084,7 +3290,7 @@ SUBROUTINE MDLFLD ENDDO ELSE DO J=JSTA,JEND - DO I=1,IM + DO I=ista,iend GRID1(I,J) = -999. DO L=1,NINT(LMH(I,J)) IF (DBZ(I,J,L) >= 18.0) THEN @@ -3098,11 +3304,12 @@ SUBROUTINE MDLFLD if(grib=="grib2") then cfld=cfld+1 fld_info(cfld)%ifld=IAVBLFLD(IGET(768)) -!$omp parallel do private(i,j,jj) +!$omp parallel do private(i,j,ii,jj) do j=1,jend-jsta+1 jj = jsta+j-1 - do i=1,im - datapd(i,j,cfld) = GRID1(i,jj) + do i=1,iend-ista+1 + ii = ista+i-1 + datapd(i,j,cfld) = GRID1(ii,jj) enddo enddo endif @@ -3112,7 +3319,7 @@ SUBROUTINE MDLFLD ! IF (IGET(769)>0) THEN DO J=JSTA,JEND - DO I=1,IM + DO I=ista,iend GRID1(I,J)=0.0 DO L=1,NINT(LMH(I,J)) IF(QQR(I,J,L) 0) THEN IF(MODELNAME == 'RAPR' .AND. (IMP_PHYSICS == 8 .or. IMP_PHYSICS == 28)) THEN DO J=JSTA,JEND - DO I=1,IM + DO I=ista,iend GRID1(I,J) = 0.0 DO L=1,NINT(LMH(I,J)) IF (REF_10CM(I,J,L) > -10.0 ) THEN @@ -3161,7 +3369,7 @@ SUBROUTINE MDLFLD ENDDO ELSE DO J=JSTA,JEND - DO I=1,IM + DO I=ista,iend GRID1(I,J) = 0.0 DO L=1,NINT(LMH(I,J)) GRID1(I,J) = GRID1(I,J) + 0.00344 * & @@ -3174,11 +3382,12 @@ SUBROUTINE MDLFLD if(grib=="grib2") then cfld=cfld+1 fld_info(cfld)%ifld=IAVBLFLD(IGET(770)) -!$omp parallel do private(i,j,jj) +!$omp parallel do private(i,j,ii,jj) do j=1,jend-jsta+1 jj = jsta+j-1 - do i=1,im - datapd(i,j,cfld) = GRID1(i,jj) + do i=1,iend-ista+1 + ii = ista+i-1 + datapd(i,j,cfld) = GRID1(ii,jj) enddo enddo endif @@ -3194,7 +3403,7 @@ SUBROUTINE MDLFLD !--- Needed values at 1st level above ground (Jin, '01; Ferrier, Feb '02) ! DO J=JSTA,JEND - DO I=1,IM + DO I=ista,iend LLMH=NINT(LMH(I,J)) Q1D(I,J)=Q(I,J,LLMH) if(Q1D(I,J)<=0.) Q1D(I,J)=0. !tgs @@ -3262,7 +3471,7 @@ SUBROUTINE MDLFLD ! !-- Visibility using Warner-Stoelinga algorithm (Jin, '01) ! - ii=im/2 + ii=(ista+iend)/2 jj=(jsta+jend)/2 ! print*,'Debug: Visbility ',Q1D(ii,jj),QW1(ii,jj),QR1(ii,jj) ! +,QI1(ii,jj) ,QS1(ii,jj),T1D(ii,jj),P1D(ii,jj) @@ -3274,8 +3483,8 @@ SUBROUTINE MDLFLD ! DO J=JSTA,JEND - DO I=1,IM - IF(abs(vis(i,j))>24135.1)print*,'bad visbility' & + DO I=ista,iend + IF(vis(i,j)/=spval.and.abs(vis(i,j))>24135.1)print*,'bad visbility' & , i,j,Q1D(i,j),QW1(i,j),QR1(i,j),QI1(i,j) & , QS1(i,j),T1D(i,j),P1D(i,j),vis(i,j) @@ -3286,7 +3495,7 @@ SUBROUTINE MDLFLD cfld=cfld+1 fld_info(cfld)%ifld=IAVBLFLD(IGET(180)) fld_info(cfld)%lvl=LVLSXML(1,IGET(180)) - datapd(1:im,1:jend-jsta+1,cfld)=GRID1(1:im,jsta:jend) + datapd(1:iend-ista+1,1:jend-jsta+1,cfld)=GRID1(ista:iend,jsta:jend) endif ENDIF @@ -3296,7 +3505,7 @@ SUBROUTINE MDLFLD IF (IGET(410)>0) THEN CALL CALVIS_GSD(CZEN,VIS) DO J=JSTA,JEND - DO I=1,IM + DO I=ista,iend GRID1(I,J)=VIS(I,J) END DO END DO @@ -3304,7 +3513,7 @@ SUBROUTINE MDLFLD cfld=cfld+1 fld_info(cfld)%ifld=IAVBLFLD(IGET(410)) fld_info(cfld)%lvl=LVLSXML(1,IGET(410)) - datapd(1:im,1:jend-jsta+1,cfld)=GRID1(1:im,jsta:jend) + datapd(1:iend-ista+1,1:jend-jsta+1,cfld)=GRID1(ista:iend,jsta:jend) endif ENDIF ! @@ -3319,7 +3528,7 @@ SUBROUTINE MDLFLD GRID1 = -20.0 !$omp parallel do private(i,j) DO J=JSTA,JEND - DO I=1,IM + DO I=ista,iend GRID1(I,J) = REF1KM_10CM(I,J) END DO END DO @@ -3327,7 +3536,7 @@ SUBROUTINE MDLFLD ELSE !$omp parallel do private(i,j) DO J=JSTA,JEND - DO I=1,IM + DO I=ista,iend GRID1(I,J) = refl1km(I,J) END DO END DO @@ -3338,7 +3547,7 @@ SUBROUTINE MDLFLD cfld=cfld+1 fld_info(cfld)%ifld=IAVBLFLD(IGET(748)) fld_info(cfld)%lvl=LVLSXML(1,IGET(748)) - datapd(1:im,1:jend-jsta+1,cfld)=GRID1(1:im,jsta:jend) + datapd(1:iend-ista+1,1:jend-jsta+1,cfld)=GRID1(ista:iend,jsta:jend) endif ENDIF @@ -3353,7 +3562,7 @@ SUBROUTINE MDLFLD IF(MODELNAME == 'RAPR' .AND. (IMP_PHYSICS == 8 .or. IMP_PHYSICS == 28)) THEN !$omp parallel do private(i,j) DO J=JSTA,JEND - DO I=1,IM + DO I=ista,iend GRID1(I,J) = REF4KM_10CM(I,J) END DO END DO @@ -3361,7 +3570,7 @@ SUBROUTINE MDLFLD ELSE !$omp parallel do private(i,j) DO J=JSTA,JEND - DO I=1,IM + DO I=ista,iend GRID1(I,J) = refl4km(I,J) END DO END DO @@ -3372,7 +3581,7 @@ SUBROUTINE MDLFLD cfld=cfld+1 fld_info(cfld)%ifld=IAVBLFLD(IGET(757)) fld_info(cfld)%lvl=LVLSXML(1,IGET(757)) - datapd(1:im,1:jend-jsta+1,cfld)=GRID1(1:im,jsta:jend) + datapd(1:iend-ista+1,1:jend-jsta+1,cfld)=GRID1(ista:iend,jsta:jend) endif ENDIF @@ -3380,7 +3589,7 @@ SUBROUTINE MDLFLD IF (IGET(912)>0) THEN Zm10c=spval DO J=JSTA,JEND - DO I=1,IM + DO I=ista,iend ! dong handle missing value if (slp(i,j) < spval) then Zm10c(I,J)=ZMID(I,J,NINT(LMH(I,J))) @@ -3404,7 +3613,7 @@ SUBROUTINE MDLFLD IF(IMP_PHYSICS==8 .or. IMP_PHYSICS==28) THEN !$omp parallel do private(i,j) DO J=JSTA,JEND - DO I=1,IM + DO I=ista,iend GRID1(I,J)=spval ! dong handle missing value if (slp(i,j) < spval) then @@ -3415,7 +3624,7 @@ SUBROUTINE MDLFLD ELSE !$omp parallel do private(i,j) DO J=JSTA,JEND - DO I=1,IM + DO I=ista,iend GRID1(I,J)=spval ! dong handle missing value if (slp(i,j) < spval) then @@ -3431,7 +3640,7 @@ SUBROUTINE MDLFLD cfld=cfld+1 fld_info(cfld)%ifld=IAVBLFLD(IGET(912)) fld_info(cfld)%lvl=LVLSXML(L,IGET(912)) - datapd(1:im,1:jend-jsta+1,cfld)=GRID1(1:im,jsta:jend) + datapd(1:iend-ista+1,1:jend-jsta+1,cfld)=GRID1(ista:iend,jsta:jend) endif ENDIF ! @@ -3448,14 +3657,14 @@ SUBROUTINE MDLFLD IF (IGET(147)>0) THEN ! DO J=JSTA,JEND - DO I=1,IM + DO I=ista,iend GRID1(I,J) = EL0(I,J) ENDDO ENDDO if(grib=="grib2") then cfld=cfld+1 fld_info(cfld)%ifld=IAVBLFLD(IGET(147)) - datapd(1:im,1:jend-jsta+1,cfld)=GRID1(1:im,jsta:jend) + datapd(1:iend-ista+1,1:jend-jsta+1,cfld)=GRID1(ista:iend,jsta:jend) endif ENDIF ! @@ -3468,7 +3677,7 @@ SUBROUTINE MDLFLD !$omp parallel do private(i,j,l) DO L=1,LM DO J=JSTA,JEND - DO I=1,IM + DO I=ista,iend EL(I,J,L) = D00 ENDDO ENDDO @@ -3479,7 +3688,7 @@ SUBROUTINE MDLFLD ELSE IF(MODELNAME == 'NMM')THEN DO L=1,LM DO J=JSTA,JEND - DO I=1,IM + DO I=ista,iend EL(I,J,L)=EL_PBL(I,J,L) !NOW EL COMES OUT OF WRF NMM ENDDO ENDDO @@ -3502,7 +3711,7 @@ SUBROUTINE MDLFLD LL=LM-L+1 !$omp parallel do private(i,j) DO J=JSTA,JEND - DO I=1,IM + DO I=ista,iend GRID1(I,J) = EL(I,J,LL) ENDDO ENDDO @@ -3510,11 +3719,12 @@ SUBROUTINE MDLFLD cfld=cfld+1 fld_info(cfld)%ifld=IAVBLFLD(IGET(146)) fld_info(cfld)%lvl=LVLSXML(L,IGET(146)) -!$omp parallel do private(i,j,jj) +!$omp parallel do private(i,j,ii,jj) do j=1,jend-jsta+1 jj = jsta+j-1 - do i=1,im - datapd(i,j,cfld) = GRID1(i,jj) + do i=1,iend-ista+1 + ii = ista+i-1 + datapd(i,j,cfld) = GRID1(ii,jj) enddo enddo endif @@ -3529,7 +3739,7 @@ SUBROUTINE MDLFLD LL=LM-L+1 !$omp parallel do private(i,j) DO J=JSTA,JEND - DO I=1,IM + DO I=ista,iend GRID1(I,J) = RICHNO(I,J,LL) ENDDO ENDDO @@ -3537,11 +3747,12 @@ SUBROUTINE MDLFLD cfld=cfld+1 fld_info(cfld)%ifld=IAVBLFLD(IGET(111)) fld_info(cfld)%lvl=LVLSXML(L,IGET(111)) -!$omp parallel do private(i,j,jj) +!$omp parallel do private(i,j,ii,jj) do j=1,jend-jsta+1 jj = jsta+j-1 - do i=1,im - datapd(i,j,cfld) = GRID1(i,jj) + do i=1,iend-ista+1 + ii = ista+i-1 + datapd(i,j,cfld) = GRID1(ii,jj) enddo enddo endif @@ -3563,7 +3774,7 @@ SUBROUTINE MDLFLD ! should only compute pblri if pblh from model is not computed based on Ri ! post does not yet read pbl scheme used by model. Will do this soon ! For now, compute PBLRI for non GFS models. - IF(MODELNAME == 'GFS')THEN + IF(MODELNAME == 'GFS' .OR. MODELNAME == 'FV3R')THEN PBLRI=PBLH ELSE CALL CALPBL(PBLRI) @@ -3573,7 +3784,7 @@ SUBROUTINE MDLFLD IF (IGET(289) > 0) THEN !$omp parallel do private(i,j) DO J=JSTA,JEND - DO I=1,IM + DO I=ista,iend GRID1(I,J) = PBLRI(I,J) ! PBLH(I,J) = PBLRI(I,J) ENDDO @@ -3581,11 +3792,12 @@ SUBROUTINE MDLFLD if(grib=="grib2") then Cfld=cfld+1 fld_info(cfld)%ifld=IAVBLFLD(IGET(289)) -!$omp parallel do private(i,j,jj) +!$omp parallel do private(i,j,ii,jj) do j=1,jend-jsta+1 jj = jsta+j-1 - do i=1,im - datapd(i,j,cfld) = GRID1(i,jj) + do i=1,iend-ista+1 + ii = ista+i-1 + datapd(i,j,cfld) = GRID1(ii,jj) enddo enddo endif @@ -3598,7 +3810,7 @@ SUBROUTINE MDLFLD IF ( (IGET(389) > 0) .OR. (IGET(454) > 0) ) THEN !$omp parallel do private(i,j) DO J=JSTA,JEND - DO I=1,IM + DO I=ista,iend IF(PBLRI(I,J) 0.)THEN GRID1(I,J) = EGRID1(I,J)/EGRID2(I,J) ELSE @@ -3652,10 +3864,10 @@ SUBROUTINE MDLFLD END DO END DO ! compute v component now - CALL H2V(EGRID3(1:im,JSTA_2L:JEND_2U),EGRID4) + CALL H2V(EGRID3(ista_2l:iend_2u,JSTA_2L:JEND_2U),EGRID4) !$omp parallel do private(i,j) DO J=JSTA,JEND - DO I=1,IM + DO I=ista,iend EGRID1(i,j) = 0. EGRID2(i,j) = 0. EGRID5(i,j) = 0. @@ -3664,12 +3876,12 @@ SUBROUTINE MDLFLD END DO END DO vert_loopv: DO L=LM,1,-1 - CALL H2V(ZMID(1:IM,JSTA_2L:JEND_2U,L), EGRID5) - CALL H2V(PINT(1:IM,JSTA_2L:JEND_2U,L+1),EGRID6) - CALL H2V(PINT(1:IM,JSTA_2L:JEND_2U,L), EGRID7) + CALL H2V(ZMID(ista_2l:iend_2u,JSTA_2L:JEND_2U,L), EGRID5) + CALL H2V(PINT(ista_2l:iend_2u,JSTA_2L:JEND_2U,L+1),EGRID6) + CALL H2V(PINT(ista_2l:iend_2u,JSTA_2L:JEND_2U,L), EGRID7) HCOUNT=0 DO J=JSTA,JEND - DO I=1,IM + DO I=ista,iend if (EGRID4(I,J) 0.)THEN GRID2(I,J) = EGRID1(I,J)/EGRID2(I,J) ELSE @@ -3698,18 +3910,18 @@ SUBROUTINE MDLFLD END DO - CALL U2H(GRID1(1,JSTA_2L),EGRID1) - CALL V2H(GRID2(1,JSTA_2L),EGRID2) + CALL U2H(GRID1(ISTA_2L:IEND_2U,JSTA_2L:JEND_2U),EGRID1) + CALL V2H(GRID2(ISTA_2L:IEND_2U,JSTA_2L:JEND_2U),EGRID2) !$omp parallel do private(i,j) DO J=JSTA,JEND - DO I=1,IM + DO I=ista,iend ! EGRID1 is transport wind speed ! prevent floating overflow if either component is undefined - IF (EGRID1(I,J)==SPVAL .or. EGRID2(I,J)==SPVAL) THEN - EGRID3(I,J) = SPVAL - ELSe + IF (EGRID1(I,J)0) THEN - allocate(PBLREGIME(im,jsta_2l:jend_2u)) + allocate(PBLREGIME(ista_2l:iend_2u,jsta_2l:jend_2u)) CALL CALPBLREGIME(PBLREGIME) !$omp parallel do private(i,j) DO J=JSTA,JEND - DO I=1,IM + DO I=ista,iend GRID1(I,J) = PBLREGIME(I,J) ENDDO ENDDO if(grib=="grib2") then cfld=cfld+1 fld_info(cfld)%ifld=IAVBLFLD(IGET(344)) -!$omp parallel do private(i,j,jj) +!$omp parallel do private(i,j,ii,jj) do j=1,jend-jsta+1 jj = jsta+j-1 - do i=1,im - datapd(i,j,cfld) = GRID1(i,jj) + do i=1,iend-ista+1 + ii = ista+i-1 + datapd(i,j,cfld) = GRID1(ii,jj) enddo enddo endif @@ -3904,7 +4121,7 @@ SUBROUTINE MDLFLD ! IF(IGET(400)>0)THEN DO J=JSTA,JEND - DO I=1,IM + DO I=ista,iend !Initialed as 'undetected'. Nov. 17, 2014, B. ZHOU: !changed from SPVAL to -5000. to distinguish missing grids and undetected ! GRID1(I,J) = SPVAL @@ -3932,11 +4149,12 @@ SUBROUTINE MDLFLD if(grib=="grib2") then cfld=cfld+1 fld_info(cfld)%ifld=IAVBLFLD(IGET(400)) -!$omp parallel do private(i,j,jj) +!$omp parallel do private(i,j,ii,jj) do j=1,jend-jsta+1 jj = jsta+j-1 - do i=1,im - datapd(i,j,cfld) = GRID1(i,jj) + do i=1,iend-ista+1 + ii = ista+i-1 + datapd(i,j,cfld) = GRID1(ii,jj) enddo enddo endif @@ -3945,7 +4163,7 @@ SUBROUTINE MDLFLD ! ! COMPUTE NCAR GTG turbulence IF(IGET(464)>0 .or. IGET(467)>0 .or. IGET(470)>0)THEN - i=IM/2 + i=(ista+iend)/2 j=(jsta+jend)/2 ! if(me == 0) print*,'sending input to GTG i,j,hgt,gust',i,j,ZINT(i,j,LP1),gust(i,j) @@ -3955,10 +4173,10 @@ SUBROUTINE MDLFLD call gtg_algo(im,jm,lm,jsta,jend,jsta_2L,jend_2U,& uh,vh,wh,zmid,pmid,t,q,qqw,qqr,qqs,qqg,qqi,& - ZINT(1:IM,JSTA_2L:JEND_2U,LP1),pblh,sfcshx,sfclhx,ustar,& + ZINT(ista_2l:iend_2u,JSTA_2L:JEND_2U,LP1),pblh,sfcshx,sfclhx,ustar,& z0,gdlat,gdlon,dx,dy,u10,v10,GUST,avgprec,sm,sice,catedr,mwt,EL,gtg,RICHNO,item) - i=IM/2 + i=iend j=jend ! 321,541 ! print*,'GTG output: l,cat,mwt,gtg at',i,j ! do l=1,lm @@ -3971,7 +4189,7 @@ SUBROUTINE MDLFLD IF (LVLS(L,IGET(470))>0) THEN LL=LM-L+1 DO J=JSTA,JEND - DO I=1,IM + DO I=ista,iend GRID1(I,J)=gtg(i,j,LL) ENDDO ENDDO @@ -3979,18 +4197,19 @@ SUBROUTINE MDLFLD cfld=cfld+1 fld_info(cfld)%ifld=IAVBLFLD(IGET(470)) fld_info(cfld)%lvl=LVLSXML(L,IGET(470)) -!$omp parallel do private(i,j,jj) +!$omp parallel do private(i,j,ii,jj) do j=1,jend-jsta+1 jj = jsta+j-1 - do i=1,im - datapd(i,j,cfld) = GRID1(i,jj) + do i=1,iend-ista+1 + ii = ista+i-1 + datapd(i,j,cfld) = GRID1(ii,jj) enddo enddo endif DO J=JSTA,JEND - DO I=1,IM + DO I=ista,iend GRID1(I,J)=catedr(i,j,LL) ENDDO ENDDO @@ -3998,17 +4217,18 @@ SUBROUTINE MDLFLD cfld=cfld+1 fld_info(cfld)%ifld=IAVBLFLD(IGET(471)) fld_info(cfld)%lvl=LVLSXML(L,IGET(471)) -!$omp parallel do private(i,j,jj) +!$omp parallel do private(i,j,ii,jj) do j=1,jend-jsta+1 jj = jsta+j-1 - do i=1,im - datapd(i,j,cfld) = GRID1(i,jj) + do i=1,iend-ista+1 + ii = ista+i-1 + datapd(i,j,cfld) = GRID1(ii,jj) enddo enddo endif DO J=JSTA,JEND - DO I=1,IM + DO I=ista,iend GRID1(I,J)=mwt(i,j,LL) ENDDO ENDDO @@ -4016,11 +4236,12 @@ SUBROUTINE MDLFLD cfld=cfld+1 fld_info(cfld)%ifld=IAVBLFLD(IGET(472)) fld_info(cfld)%lvl=LVLSXML(L,IGET(472)) -!$omp parallel do private(i,j,jj) +!$omp parallel do private(i,j,ii,jj) do j=1,jend-jsta+1 jj = jsta+j-1 - do i=1,im - datapd(i,j,cfld) = GRID1(i,jj) + do i=1,iend-ista+1 + ii = ista+i-1 + datapd(i,j,cfld) = GRID1(ii,jj) enddo enddo endif @@ -4043,7 +4264,7 @@ SUBROUTINE MDLFLD icing_gfip = spval icing_gfis = spval DO J=JSTA,JEND - DO I=1,IM + DO I=ista,iend if(debugprint .and. i==50 .and. j==jsta .and. me == 0) then print*,'sending input to FIP ',i,j,lm,gdlat(i,j),gdlon(i,j), & zint(i,j,lp1),cprate(i,j),prec(i,j),avgcprate(i,j),cape(i,j),cin(i,j) @@ -4077,12 +4298,12 @@ SUBROUTINE MDLFLD ! do l=1,lm ! if(LVLS(L,IGET(450))>0 .or. LVLS(L,IGET(480))>0)then ! do j=jsta,jend -! do i=1,im +! do i=ista,iend ! grid1(i,j)=icing_gfip(i,j,l) ! end do ! end do ! ID(1:25) = 0 -! CALL GRIBIT(IGET(450),L,GRID1,IM,JM) +! CALL GRIBIT(IGET(450),L,GRIDista,iend,JM) ! end if ! end do ENDIF diff --git a/sorc/ncep_post.fd/MISCLN.f b/sorc/ncep_post.fd/MISCLN.f index 3538cd00e..eabd6d042 100644 --- a/sorc/ncep_post.fd/MISCLN.f +++ b/sorc/ncep_post.fd/MISCLN.f @@ -45,6 +45,13 @@ !! 20-11-10 J Meng - USE UPP_PHYSICS MODULE !! 21-03-25 E Colon - 3D-RTMA-specific SPC fields added as output !! 21-04-01 J Meng - computation on defined points only +!! 21-09-01 E Colon - Correction to the effective layer top and +!! bottoma calculation which is only employed +!! for RTMA usage. +!! 21-10-14 J MENG - 2D DECOMPOSITION +!! 22-09-22 L Zhang - Li(Kate) Zhang - Remove Dust=> AERFD +!! 22-10-06 W Meng - Generate SPC fields with RRFS input +!! 23-01-24 Sam Trahan - when IFI is enabled, calculate and store CAPE & CIN. Add allocate_cape_arrays !! !! USAGE: CALL MISCLN !! INPUT ARGUMENT LIST: @@ -86,13 +93,15 @@ SUBROUTINE MISCLN use vrbls3d, only: pmid, uh, vh, t, zmid, zint, pint, alpint, q, omga use vrbls3d, only: catedr,mwt,gtg use vrbls2d, only: pblh, cprate, fis, T500, T700, Z500, Z700,& - teql + teql,ieql, cape,cin use masks, only: lmh use params_mod, only: d00, d50, h99999, h100, h1, h1m12, pq0, a2, a3, a4, & rhmin, rgamog, tfrz, small, g use ctlblk_mod, only: grib, cfld, fld_info, datapd, im, jsta, jend, jm, jsta_m, jend_m, & nbnd, nbin_du, lm, htfd, spval, pthresh, nfd, petabnd, me,& - jsta_2l, jend_2u, MODELNAME, SUBMODELNAME + jsta_2l, jend_2u, MODELNAME, SUBMODELNAME, & + ista, iend, ista_m, iend_M, ista_2l, iend_2u, & + ifi_flight_levels use rqstfld_mod, only: iget, lvls, id, iavblfld, lvlsxml use grib2_module, only: pset use upp_physics, only: FPVSNEW,CALRH_PW,CALCAPE,CALCAPE2,TVIRTUAL @@ -114,29 +123,30 @@ SUBROUTINE MISCLN real,PARAMETER :: D2000=2000 real,PARAMETER :: HCONST=42000000. real,PARAMETER :: K2C=273.16 + REAL,PARAMETER :: DM9999=-9999.0 ! ! DECLARE VARIABLES. ! - LOGICAL NORTH, FIELD1,FIELD2 - LOGICAL, dimension(IM,JSTA:JEND) :: DONE, DONE1 + LOGICAL NORTH, FIELD1,FIELD2, NEED_IFI + LOGICAL, dimension(ISTA:IEND,JSTA:JEND) :: DONE, DONE1 INTEGER, allocatable :: LVLBND(:,:,:),LB2(:,:) ! INTEGER LVLBND(IM,JM,NBND),LB2(IM,JM),LPBL(IM,JM) real,dimension(im,jm) :: GRID1, GRID2 - real,dimension(im,jsta:jend) :: P1D, T1D, Q1D, U1D, V1D, SHR1D, Z1D, & + real,dimension(ista:iend,jsta:jend) :: P1D, T1D, Q1D, U1D, V1D, SHR1D, Z1D, & RH1D, EGRID1, EGRID2, EGRID3, EGRID4, & EGRID5, EGRID6, EGRID7, EGRID8, & - MLCAPE,MLCIN,MLLCL,MUCAPE,MUCIN,MUMIXR, & - FREEZELVL,MUQ1D,SLCL + MLCAPE,MLCIN,MLLCL,MUCAPE,MUCIN, & + FREEZELVL,MUQ1D,SLCL,THE,MAXTHE + integer,dimension(ista:iend,jsta:jend) :: MAXTHEPOS real, dimension(:,:,:),allocatable :: OMGBND, PWTBND, QCNVBND, & PBND, TBND, QBND, & UBND, VBND, RHBND, & WBND, T7D, Q7D, & U7D, V6D, P7D, & ICINGFD,GTGFD,CATFD,MWTFD - real, dimension(:,:,:,:),allocatable :: AERFD real, dimension(:,:),allocatable :: QM8510, RH4710, RH8498, & RH4796, RH1847, UST, VST, & @@ -154,8 +164,8 @@ SUBROUTINE MISCLN EFFUST,EFFVST,FSHR,HTSFC,& ESRH ! - integer I,J,jj,L,ITYPE,ISVALUE,LBND,ILVL,IFD,ITYPEFDLVL(NFD), & - iget1, iget2, iget3, LLMH + integer I,J,ii,jj,L,ITYPE,ISVALUE,LBND,ILVL,IFD,ITYPEFDLVL(NFD), & + iget1, iget2, iget3, LLMH,imax,jmax,lmax real DPBND,PKL1,PKU1,FAC1,FAC2,PL,TL,QL,QSAT,RHL,TVRL,TVRBLO, & ES1,ES2,QS1,QS2,RH1,RH2,ZSF,DEPTH(2),work1,work2,work3, & SCINtmp,MUCAPEtmp,MUCINtmp,MLLCLtmp,ESHRtmp,MLCAPEtmp,STP,& @@ -167,17 +177,40 @@ SUBROUTINE MISCLN integer, allocatable :: ITYPEFDLVLCTL(:) integer IE,IW,JN,JS,IVE(JM),IVW(JM),JVN,JVS integer ISTART,ISTOP,JSTART,JSTOP,MIDCAL - real dummy(IM,jsta:jend) - integer idummy(IM,jsta:jend) + real dummy(ista:iend,jsta:jend) + integer idummy(ista:iend,jsta:jend) +! NEW VARIABLES USED FOR EFFECTIVE LAYER + INTEGER,dimension(:,:),allocatable :: EL_BASE, EL_TOPS + LOGICAL,dimension(:,:),allocatable :: FOUND_BASE, FOUND_TOPS + INTEGER,dimension(:,:),allocatable :: L_THETAE_MAX + INTEGER,dimension(:,:),allocatable :: CAPE9, CINS9 + CHARACTER(LEN=5) :: IM_CH, JSTA_CH, JEND_CH, ME_CH + CHARACTER(LEN=60) :: EFFL_FNAME + CHARACTER(LEN=60) :: EFFL_FNAME2 + INTEGER :: IREC, IUNIT + INTEGER :: IREC2, IUNIT2 + LOGICAL :: debugprint + INTEGER :: LLL + INTEGER :: LLCL_PAR, LEQL_PAR + REAL :: LMASK, PSFC, CAPE_PAR, CINS_PAR, LPAR0 + REAL, DIMENSION(4) :: PARCEL0 + REAL, DIMENSION(:), ALLOCATABLE :: TPAR_B, TPAR_T + REAL, DIMENSION(:), ALLOCATABLE :: TPAR_TMP + REAL, DIMENSION(:), ALLOCATABLE :: P_AMB, T_AMB, Q_AMB, ZINT_AMB + REAL, DIMENSION(:,:,:), ALLOCATABLE :: TPAR_BASE, TPAR_TOPS ! !**************************************************************************** ! START MISCLN HERE. ! - allocate(USHR1(IM,jsta_2l:jend_2u),VSHR1(IM,jsta_2l:jend_2u), & - USHR6(IM,jsta_2l:jend_2u),VSHR6(IM,jsta_2l:jend_2u)) - allocate(UST(IM,jsta_2l:jend_2u),VST(IM,jsta_2l:jend_2u), & - HELI(IM,jsta_2l:jend_2u,2),FSHR(IM,jsta_2l:jend_2u)) + debugprint = .FALSE. + + NEED_IFI = IGET(1007)>0 .or. IGET(1008)>0 .or. IGET(1009)>0 .or. IGET(1010)>0 + + allocate(USHR1(ista_2l:iend_2u,jsta_2l:jend_2u),VSHR1(ista_2l:iend_2u,jsta_2l:jend_2u), & + USHR6(ista_2l:iend_2u,jsta_2l:jend_2u),VSHR6(ista_2l:iend_2u,jsta_2l:jend_2u)) + allocate(UST(ista_2l:iend_2u,jsta_2l:jend_2u),VST(ista_2l:iend_2u,jsta_2l:jend_2u), & + HELI(ista_2l:iend_2u,jsta_2l:jend_2u,2),FSHR(ista_2l:iend_2u,jsta_2l:jend_2u)) ! ! HELICITY AND STORM MOTION. iget1 = IGET(162) @@ -194,7 +227,7 @@ SUBROUTINE MISCLN IF (iget2 > 0) then !$omp parallel do private(i,j) DO J=JSTA,JEND - DO I=1,IM + DO I=ISTA,IEND GRID1(I,J) = HELI(I,J,1) ENDDO ENDDO @@ -202,11 +235,12 @@ SUBROUTINE MISCLN cfld=cfld+1 fld_info(cfld)%ifld=IAVBLFLD(iget1) fld_info(cfld)%lvl=LVLSXML(1,iget1) -!$omp parallel do private(i,j,jj) +!$omp parallel do private(i,j,ii,jj) do j=1,jend-jsta+1 jj = jsta+j-1 - do i=1,im - datapd(i,j,cfld) = GRID1(i,jj) + do i=1,iend-ista+1 + ii = ista+i-1 + datapd(i,j,cfld) = GRID1(ii,jj) enddo enddo endif @@ -215,7 +249,7 @@ SUBROUTINE MISCLN IF (iget3 > 0) then !$omp parallel do private(i,j) DO J=JSTA,JEND - DO I=1,IM + DO I=ISTA,IEND GRID1(I,J) = HELI(I,J,2) ENDDO ENDDO @@ -223,11 +257,12 @@ SUBROUTINE MISCLN cfld=cfld+1 fld_info(cfld)%ifld=IAVBLFLD(iget1) fld_info(cfld)%lvl=LVLSXML(2,iget1) -!$omp parallel do private(i,j,jj) +!$omp parallel do private(i,j,ii,jj) do j=1,jend-jsta+1 jj = jsta+j-1 - do i=1,im - datapd(i,j,cfld) = GRID1(i,jj) + do i=1,iend-ista+1 + ii = ista+i-1 + datapd(i,j,cfld) = GRID1(ii,jj) enddo enddo endif @@ -236,18 +271,19 @@ SUBROUTINE MISCLN IF (IGET(163) > 0) THEN !$omp parallel do private(i,j) DO J=JSTA,JEND - DO I=1,IM + DO I=ISTA,IEND GRID1(I,J) = UST(I,J) ENDDO ENDDO if(grib=='grib2') then cfld=cfld+1 fld_info(cfld)%ifld=IAVBLFLD(IGET(163)) -!$omp parallel do private(i,j,jj) +!$omp parallel do private(i,j,ii,jj) do j=1,jend-jsta+1 jj = jsta+j-1 - do i=1,im - datapd(i,j,cfld) = GRID1(i,jj) + do i=1,iend-ista+1 + ii = ista+i-1 + datapd(i,j,cfld) = GRID1(ii,jj) enddo enddo endif @@ -255,18 +291,19 @@ SUBROUTINE MISCLN IF (IGET(164) > 0) THEN !$omp parallel do private(i,j) DO J=JSTA,JEND - DO I=1,IM + DO I=ISTA,IEND GRID1(I,J) = VST(I,J) ENDDO ENDDO if(grib=='grib2') then cfld=cfld+1 fld_info(cfld)%ifld=IAVBLFLD(IGET(164)) -!$omp parallel do private(i,j,jj) +!$omp parallel do private(i,j,ii,jj) do j=1,jend-jsta+1 jj = jsta+j-1 - do i=1,im - datapd(i,j,cfld) = GRID1(i,jj) + do i=1,iend-ista+1 + ii = ista+i-1 + datapd(i,j,cfld) = GRID1(ii,jj) enddo enddo endif @@ -276,15 +313,16 @@ SUBROUTINE MISCLN ! UPDRAFT HELICITY if (IGET(427) > 0) THEN - CALL CALUPDHEL(GRID1(1,jsta_2l)) + CALL CALUPDHEL(GRID1(ista_2l:iend_2u,jsta_2l:jend_2u)) if(grib=='grib2') then cfld=cfld+1 fld_info(cfld)%ifld=IAVBLFLD(IGET(427)) -!$omp parallel do private(i,j,jj) +!$omp parallel do private(i,j,ii,jj) do j=1,jend-jsta+1 jj = jsta+j-1 - do i=1,im - datapd(i,j,cfld) = GRID1(i,jj) + do i=1,iend-ista+1 + ii = ista+i-1 + datapd(i,j,cfld) = GRID1(ii,jj) enddo enddo endif @@ -301,25 +339,26 @@ SUBROUTINE MISCLN ! 0-6 km shear magnitude !$omp parallel do private(i,j) DO J=JSTA,JEND - DO I=1,IM + DO I=ISTA,IEND FSHR(I,J) = SQRT(USHR6(I,J)**2+VSHR6(I,J)**2) ENDDO ENDDO IF(IGET(430) > 0) THEN !$omp parallel do private(i,j) DO J=JSTA,JEND - DO I=1,IM + DO I=ISTA,IEND GRID1(I,J) = USHR1(I,J) ENDDO ENDDO if(grib=='grib2') then cfld=cfld+1 fld_info(cfld)%ifld=IAVBLFLD(IGET(430)) -!$omp parallel do private(i,j,jj) +!$omp parallel do private(i,j,ii,jj) do j=1,jend-jsta+1 jj = jsta+j-1 - do i=1,im - datapd(i,j,cfld) = GRID1(i,jj) + do i=1,iend-ista+1 + ii = ista+i-1 + datapd(i,j,cfld) = GRID1(ii,jj) enddo enddo endif @@ -327,18 +366,19 @@ SUBROUTINE MISCLN IF(IGET(431) > 0) THEN !$omp parallel do private(i,j) DO J=JSTA,JEND - DO I=1,IM + DO I=ISTA,IEND GRID1(I,J) = VSHR1(I,J) ENDDO ENDDO if(grib=='grib2') then cfld=cfld+1 fld_info(cfld)%ifld=IAVBLFLD(IGET(431)) -!$omp parallel do private(i,j,jj) +!$omp parallel do private(i,j,ii,jj) do j=1,jend-jsta+1 jj = jsta+j-1 - do i=1,im - datapd(i,j,cfld) = GRID1(i,jj) + do i=1,iend-ista+1 + ii = ista+i-1 + datapd(i,j,cfld) = GRID1(ii,jj) enddo enddo endif @@ -346,18 +386,19 @@ SUBROUTINE MISCLN IF(IGET(432) > 0) THEN !$omp parallel do private(i,j) DO J=JSTA,JEND - DO I=1,IM + DO I=ISTA,IEND GRID1(I,J) = USHR6(I,J) ENDDO ENDDO if(grib=='grib2') then cfld=cfld+1 fld_info(cfld)%ifld=IAVBLFLD(IGET(432)) -!$omp parallel do private(i,j,jj) +!$omp parallel do private(i,j,ii,jj) do j=1,jend-jsta+1 jj = jsta+j-1 - do i=1,im - datapd(i,j,cfld) = GRID1(i,jj) + do i=1,iend-ista+1 + ii = ista+i-1 + datapd(i,j,cfld) = GRID1(ii,jj) enddo enddo endif @@ -365,18 +406,19 @@ SUBROUTINE MISCLN IF(IGET(433) > 0) THEN !$omp parallel do private(i,j) DO J=JSTA,JEND - DO I=1,IM + DO I=ISTA,IEND GRID1(I,J) = VSHR6(I,J) ENDDO ENDDO if(grib=='grib2') then cfld=cfld+1 fld_info(cfld)%ifld=IAVBLFLD(IGET(433)) -!$omp parallel do private(i,j,jj) +!$omp parallel do private(i,j,ii,jj) do j=1,jend-jsta+1 jj = jsta+j-1 - do i=1,im - datapd(i,j,cfld) = GRID1(i,jj) + do i=1,iend-ista+1 + ii = ista+i-1 + datapd(i,j,cfld) = GRID1(ii,jj) enddo enddo endif @@ -402,7 +444,7 @@ SUBROUTINE MISCLN ! Chuang: Use GFS algorithm per Iredell's and DiMego's decision on unification !$omp parallel do private(i,j) DO J=JSTA,JEND - DO I=1,IM + DO I=ISTA,IEND if(PMID(I,J,1) 0) THEN !$omp parallel do private(i,j) DO J=JSTA,JEND - DO I=1,IM + DO I=ISTA,IEND GRID1(I,J) = P1D(I,J) ENDDO ENDDO if(grib=='grib2') then cfld=cfld+1 fld_info(cfld)%ifld=IAVBLFLD(IGET(054)) -!$omp parallel do private(i,j,jj) +!$omp parallel do private(i,j,ii,jj) do j=1,jend-jsta+1 jj = jsta+j-1 - do i=1,im - datapd(i,j,cfld) = GRID1(i,jj) + do i=1,iend-ista+1 + ii = ista+i-1 + datapd(i,j,cfld) = GRID1(ii,jj) enddo enddo endif @@ -448,16 +491,17 @@ SUBROUTINE MISCLN ! ICAO HEIGHT OF TROPOPAUSE IF (IGET(399)>0) THEN - CALL ICAOHEIGHT(P1D, GRID1(1,jsta)) + CALL ICAOHEIGHT(P1D, GRID1(ista:iend,jsta:jend)) ! print*,'sample TROPOPAUSE ICAO HEIGHTS',GRID1(im/2,(jsta+jend)/2) if(grib=='grib2') then cfld=cfld+1 fld_info(cfld)%ifld=IAVBLFLD(IGET(399)) -!$omp parallel do private(i,j,jj) +!$omp parallel do private(i,j,ii,jj) do j=1,jend-jsta+1 jj = jsta+j-1 - do i=1,im - datapd(i,j,cfld) = GRID1(i,jj) + do i=1,iend-ista+1 + ii = ista+i-1 + datapd(i,j,cfld) = GRID1(ii,jj) enddo enddo endif @@ -467,18 +511,19 @@ SUBROUTINE MISCLN IF (IGET(177) > 0) THEN !$omp parallel do private(i,j) DO J=JSTA,JEND - DO I=1,IM + DO I=ISTA,IEND GRID1(I,J) = Z1D(I,J) ENDDO ENDDO if(grib=='grib2') then cfld=cfld+1 fld_info(cfld)%ifld=IAVBLFLD(IGET(177)) -!$omp parallel do private(i,j,jj) +!$omp parallel do private(i,j,ii,jj) do j=1,jend-jsta+1 jj = jsta+j-1 - do i=1,im - datapd(i,j,cfld) = GRID1(i,jj) + do i=1,iend-ista+1 + ii = ista+i-1 + datapd(i,j,cfld) = GRID1(ii,jj) enddo enddo endif @@ -488,18 +533,19 @@ SUBROUTINE MISCLN IF (IGET(055) > 0) THEN !$omp parallel do private(i,j) DO J=JSTA,JEND - DO I=1,IM + DO I=ISTA,IEND GRID1(I,J) = T1D(I,J) ENDDO ENDDO if(grib=='grib2') then cfld=cfld+1 fld_info(cfld)%ifld=IAVBLFLD(IGET(055)) -!$omp parallel do private(i,j,jj) +!$omp parallel do private(i,j,ii,jj) do j=1,jend-jsta+1 jj = jsta+j-1 - do i=1,im - datapd(i,j,cfld) = GRID1(i,jj) + do i=1,iend-ista+1 + ii = ista+i-1 + datapd(i,j,cfld) = GRID1(ii,jj) enddo enddo endif @@ -507,15 +553,16 @@ SUBROUTINE MISCLN ! ! TROPOPAUSE POTENTIAL TEMPERATURE. IF (IGET(108) > 0) THEN - CALL CALPOT(P1D,T1D,GRID1(1,jsta)) + CALL CALPOT(P1D,T1D,GRID1(ista:iend,jsta:jend)) if(grib=='grib2') then cfld=cfld+1 fld_info(cfld)%ifld=IAVBLFLD(IGET(108)) -!$omp parallel do private(i,j,jj) +!$omp parallel do private(i,j,ii,jj) do j=1,jend-jsta+1 jj = jsta+j-1 - do i=1,im - datapd(i,j,cfld) = GRID1(i,jj) + do i=1,iend-ista+1 + ii = ista+i-1 + datapd(i,j,cfld) = GRID1(ii,jj) enddo enddo endif @@ -525,7 +572,7 @@ SUBROUTINE MISCLN IF ((IGET(056) > 0).OR.(IGET(057) > 0)) THEN !$omp parallel do private(i,j) DO J=JSTA,JEND - DO I=1,IM + DO I=ISTA,IEND GRID1(I,J)=U1D(I,J) GRID2(I,J)=V1D(I,J) ENDDO @@ -534,22 +581,24 @@ SUBROUTINE MISCLN if(IGET(056)>0) then cfld=cfld+1 fld_info(cfld)%ifld=IAVBLFLD(IGET(056)) -!$omp parallel do private(i,j,jj) +!$omp parallel do private(i,j,ii,jj) do j=1,jend-jsta+1 jj = jsta+j-1 - do i=1,im - datapd(i,j,cfld) = GRID1(i,jj) + do i=1,iend-ista+1 + ii = ista+i-1 + datapd(i,j,cfld) = GRID1(ii,jj) enddo enddo endif if(IGET(057)>0) then cfld=cfld+1 fld_info(cfld)%ifld=IAVBLFLD(IGET(057)) -!$omp parallel do private(i,j,jj) +!$omp parallel do private(i,j,ii,jj) do j=1,jend-jsta+1 jj = jsta+j-1 - do i=1,im - datapd(i,j,cfld) = GRID2(i,jj) + do i=1,iend-ista+1 + ii = ista+i-1 + datapd(i,j,cfld) = GRID2(ii,jj) enddo enddo endif @@ -560,18 +609,19 @@ SUBROUTINE MISCLN IF (IGET(058) > 0) THEN !$omp parallel do private(i,j) DO J=JSTA,JEND - DO I=1,IM + DO I=ISTA,IEND GRID1(I,J) = SHR1D(I,J) ENDDO ENDDO if(grib=='grib2') then cfld=cfld+1 fld_info(cfld)%ifld=IAVBLFLD(IGET(058)) -!$omp parallel do private(i,j,jj) +!$omp parallel do private(i,j,ii,jj) do j=1,jend-jsta+1 jj = jsta+j-1 - do i=1,im - datapd(i,j,cfld) = GRID1(i,jj) + do i=1,iend-ista+1 + ii = ista+i-1 + datapd(i,j,cfld) = GRID1(ii,jj) enddo enddo endif @@ -585,11 +635,11 @@ SUBROUTINE MISCLN IF ((IGET(173)>0) .OR. (IGET(174)>0) .OR. & (IGET(175)>0) .OR. (IGET(176)>0)) THEN - allocate(MAXWP(IM,jsta:jend), MAXWZ(IM,jsta:jend), & - MAXWU(IM,jsta:jend), MAXWV(IM,jsta:jend),MAXWT(IM,jsta:jend)) + allocate(MAXWP(ista:iend,jsta:jend), MAXWZ(ista:iend,jsta:jend), & + MAXWU(ista:iend,jsta:jend), MAXWV(ista:iend,jsta:jend),MAXWT(ista:iend,jsta:jend)) !$omp parallel do private(i,j) DO J=JSTA,JEND - DO I=1,IM + DO I=ISTA,IEND MAXWP(I,J)=SPVAL MAXWZ(I,J)=SPVAL MAXWU(I,J)=SPVAL @@ -601,7 +651,7 @@ SUBROUTINE MISCLN ! Chuang: Use GFS algorithm per Iredell's and DiMego's decision on unification !$omp parallel do private(i,j) DO J=JSTA,JEND - loopI:DO I=1,IM + loopI:DO I=ISTA,IEND DO L=1,LM IF (ABS(PMID(I,J,L)-SPVAL)<=SMALL .OR. & ABS(UH(I,J,L)-SPVAL)<=SMALL .OR. & @@ -624,34 +674,36 @@ SUBROUTINE MISCLN IF (IGET(173) > 0) THEN !$omp parallel do private(i,j) DO J=JSTA,JEND - DO I=1,IM + DO I=ISTA,IEND GRID1(I,J) = MAXWP(I,J) ENDDO ENDDO if(grib=='grib2') then cfld=cfld+1 fld_info(cfld)%ifld=IAVBLFLD(IGET(173)) -!$omp parallel do private(i,j,jj) +!$omp parallel do private(i,j,ii,jj) do j=1,jend-jsta+1 jj = jsta+j-1 - do i=1,im - datapd(i,j,cfld) = GRID1(i,jj) + do i=1,iend-ista+1 + ii = ista+i-1 + datapd(i,j,cfld) = GRID1(ii,jj) enddo enddo endif ENDIF ! ICAO HEIGHT OF MAX WIND LEVEL IF (IGET(398)>0) THEN - CALL ICAOHEIGHT(MAXWP, GRID1(1,jsta)) + CALL ICAOHEIGHT(MAXWP, GRID1(ista:iend,jsta:jend)) ! print*,'sample MAX WIND ICAO HEIGHTS',GRID1(im/2,(jsta+jend)/2) if(grib=='grib2') then cfld=cfld+1 fld_info(cfld)%ifld=IAVBLFLD(IGET(398)) -!$omp parallel do private(i,j,jj) +!$omp parallel do private(i,j,ii,jj) do j=1,jend-jsta+1 jj = jsta+j-1 - do i=1,im - datapd(i,j,cfld) = GRID1(i,jj) + do i=1,iend-ista+1 + ii = ista+i-1 + datapd(i,j,cfld) = GRID1(ii,jj) enddo enddo endif @@ -660,18 +712,19 @@ SUBROUTINE MISCLN IF (IGET(174) > 0) THEN !$omp parallel do private(i,j) DO J=JSTA,JEND - DO I=1,IM + DO I=ISTA,IEND GRID1(I,J) = MAXWZ(I,J) ENDDO ENDDO if(grib=='grib2') then cfld=cfld+1 fld_info(cfld)%ifld=IAVBLFLD(IGET(174)) -!$omp parallel do private(i,j,jj) +!$omp parallel do private(i,j,ii,jj) do j=1,jend-jsta+1 jj = jsta+j-1 - do i=1,im - datapd(i,j,cfld) = GRID1(i,jj) + do i=1,iend-ista+1 + ii = ista+i-1 + datapd(i,j,cfld) = GRID1(ii,jj) enddo enddo endif @@ -681,7 +734,7 @@ SUBROUTINE MISCLN IF ((IGET(175) > 0).OR.(IGET(176) > 0)) THEN !$omp parallel do private(i,j) DO J=JSTA,JEND - DO I=1,IM + DO I=ISTA,IEND GRID1(I,J) = MAXWU(I,J) GRID2(I,J) = MAXWV(I,J) ENDDO @@ -689,20 +742,22 @@ SUBROUTINE MISCLN if(grib=='grib2') then cfld=cfld+1 fld_info(cfld)%ifld=IAVBLFLD(IGET(175)) -!$omp parallel do private(i,j,jj) +!$omp parallel do private(i,j,ii,jj) do j=1,jend-jsta+1 jj = jsta+j-1 - do i=1,im - datapd(i,j,cfld) = GRID1(i,jj) + do i=1,iend-ista+1 + ii = ista+i-1 + datapd(i,j,cfld) = GRID1(ii,jj) enddo enddo cfld=cfld+1 fld_info(cfld)%ifld=IAVBLFLD(IGET(176)) -!$omp parallel do private(i,j,jj) +!$omp parallel do private(i,j,ii,jj) do j=1,jend-jsta+1 jj = jsta+j-1 - do i=1,im - datapd(i,j,cfld) = GRID2(i,jj) + do i=1,iend-ista+1 + ii = ista+i-1 + datapd(i,j,cfld) = GRID2(ii,jj) enddo enddo endif @@ -711,18 +766,19 @@ SUBROUTINE MISCLN IF (IGET(314) > 0) THEN !$omp parallel do private(i,j) DO J=JSTA,JEND - DO I=1,IM + DO I=ISTA,IEND GRID1(I,J)=MAXWT(I,J) ENDDO ENDDO if(grib=='grib2') then cfld=cfld+1 fld_info(cfld)%ifld=IAVBLFLD(IGET(314)) -!$omp parallel do private(i,j,jj) +!$omp parallel do private(i,j,ii,jj) do j=1,jend-jsta+1 jj = jsta+j-1 - do i=1,im - datapd(i,j,cfld) = GRID1(i,jj) + do i=1,iend-ista+1 + ii = ista+i-1 + datapd(i,j,cfld) = GRID1(ii,jj) enddo enddo endif @@ -736,14 +792,11 @@ SUBROUTINE MISCLN IF ( (IGET(059)>0.or.IGET(586)>0).OR.IGET(911)>0.OR. & (IGET(060)>0.or.IGET(576)>0).OR. & (IGET(061)>0.or.IGET(577)>0).OR. & - (IGET(601)>0.or.IGET(602)>0.or.IGET(603)>0).OR. & - (IGET(604)>0.or.IGET(605)>0).OR. & (IGET(451)>0.or.IGET(578)>0).OR.IGET(580)>0 ) THEN - ALLOCATE(T7D(IM,JSTA:JEND,NFD), Q7D(IM,JSTA:JEND,NFD), & - U7D(IM,JSTA:JEND,NFD), V6D(IM,JSTA:JEND,NFD), & - P7D(IM,JSTA:JEND,NFD), ICINGFD(IM,JSTA:JEND,NFD) & - ,AERFD(IM,JSTA:JEND,NFD,NBIN_DU)) + ALLOCATE(T7D(ISTA:IEND,JSTA:JEND,NFD), Q7D(ISTA:IEND,JSTA:JEND,NFD), & + U7D(ISTA:IEND,JSTA:JEND,NFD), V6D(ISTA:IEND,JSTA:JEND,NFD), & + P7D(ISTA:IEND,JSTA:JEND,NFD), ICINGFD(ISTA:IEND,JSTA:JEND,NFD)) ! ! DETERMINE WHETHER TO DO MSL OR AGL FD LEVELS @@ -786,29 +839,13 @@ SUBROUTINE MISCLN if(LVLS(IFD,IGET(587))>0) ITYPEFDLVL(IFD)=2 ENDIF - IF (IGET(601)>0) THEN - IF (LVLS(IFD,IGET(601))>1) ITYPEFDLVL(IFD)=2 - ENDIF - IF (IGET(602)>0) THEN - IF (LVLS(IFD,IGET(602))>1) ITYPEFDLVL(IFD)=2 - ENDIF - IF (IGET(603)>0) THEN - IF (LVLS(IFD,IGET(603))>1) ITYPEFDLVL(IFD)=2 - ENDIF - IF (IGET(604)>0) THEN - IF (LVLS(IFD,IGET(604))>1) ITYPEFDLVL(IFD)=2 - ENDIF - IF (IGET(605)>0) THEN - IF (LVLS(IFD,IGET(605))>1) ITYPEFDLVL(IFD)=2 - ENDIF - ENDDO ! print *,'call FDLVL with ITYPEFDLVL: ', ITYPEFDLVL,'for tmp,lvls=',LVLS(1:15,iget(59)), & ! 'grib2tmp lvs=',LVLS(1:15,iget(586)) - - CALL FDLVL(ITYPEFDLVL,T7D,Q7D,U7D,V6D,P7D,ICINGFD,AERFD) + + CALL FDLVL(ITYPEFDLVL,T7D,Q7D,U7D,V6D,P7D,ICINGFD) ! - DO 10 IFD = 1,NFD + loop_10: DO IFD = 1,NFD ! ! FD LEVEL TEMPERATURE. iget1 = IGET(059) @@ -828,7 +865,7 @@ SUBROUTINE MISCLN !$omp parallel do private(i,j) DO J=JSTA,JEND - DO I=1,IM + DO I=ISTA,IEND GRID1(I,J) = T7D(I,J,IFD) ENDDO ENDDO @@ -837,11 +874,12 @@ SUBROUTINE MISCLN cfld = cfld + 1 fld_info(cfld)%ifld = IAVBLFLD(IGET1) fld_info(cfld)%lvl = LVLSXML(IFD,IGET1) -!$omp parallel do private(i,j,jj) +!$omp parallel do private(i,j,ii,jj) do j=1,jend-jsta+1 jj = jsta+j-1 - do i=1,im - datapd(i,j,cfld) = GRID1(i,jj) + do i=1,iend-ista+1 + ii = ista+i-1 + datapd(i,j,cfld) = GRID1(ii,jj) enddo enddo endif @@ -851,11 +889,12 @@ SUBROUTINE MISCLN cfld = cfld + 1 fld_info(cfld)%ifld = IAVBLFLD(IGET2) fld_info(cfld)%lvl = LVLSXML(IFD,IGET2) -!$omp parallel do private(i,j,jj) +!$omp parallel do private(i,j,ii,jj) do j=1,jend-jsta+1 jj = jsta+j-1 - do i=1,im - datapd(i,j,cfld) = GRID1(i,jj) + do i=1,iend-ista+1 + ii = ista+i-1 + datapd(i,j,cfld) = GRID1(ii,jj) enddo enddo endif @@ -867,7 +906,7 @@ SUBROUTINE MISCLN IF (IGET(911)>0) THEN IF (LVLS(IFD,IGET(911))>0) THEN DO J=JSTA,JEND - DO I=1,IM + DO I=ISTA,IEND if ( T7D(I,J,IFD) > 600 ) then GRID1(I,J)=SPVAL else @@ -881,7 +920,7 @@ SUBROUTINE MISCLN cfld=cfld+1 fld_info(cfld)%ifld=IAVBLFLD(IGET(911)) fld_info(cfld)%lvl=LVLSXML(IFD,IGET(911)) - datapd(1:im,1:jend-jsta+1,cfld)=GRID1(1:im,jsta:jend) + datapd(1:iend-ista+1,1:jend-jsta+1,cfld)=GRID1(ista:iend,jsta:jend) endif ENDIF ENDIF @@ -905,7 +944,7 @@ SUBROUTINE MISCLN IF (work1 > 0 .or. work2 > 0)THEN !$omp parallel do private(i,j) DO J=JSTA,JEND - DO I=1,IM + DO I=ISTA,IEND GRID1(I,J) = Q7D(I,J,IFD) ENDDO ENDDO @@ -914,11 +953,12 @@ SUBROUTINE MISCLN cfld = cfld + 1 fld_info(cfld)%ifld = IAVBLFLD(IGET1) fld_info(cfld)%lvl = LVLSXML(IFD,IGET1) -!$omp parallel do private(i,j,jj) +!$omp parallel do private(i,j,ii,jj) do j=1,jend-jsta+1 jj = jsta+j-1 - do i=1,im - datapd(i,j,cfld) = GRID1(i,jj) + do i=1,iend-ista+1 + ii = ista+i-1 + datapd(i,j,cfld) = GRID1(ii,jj) enddo enddo endif @@ -928,11 +968,12 @@ SUBROUTINE MISCLN cfld = cfld + 1 fld_info(cfld)%ifld = IAVBLFLD(IGET2) fld_info(cfld)%lvl = LVLSXML(IFD,IGET2) -!$omp parallel do private(i,j,jj) +!$omp parallel do private(i,j,ii,jj) do j=1,jend-jsta+1 jj = jsta+j-1 - do i=1,im - datapd(i,j,cfld) = GRID1(i,jj) + do i=1,iend-ista+1 + ii = ista+i-1 + datapd(i,j,cfld) = GRID1(ii,jj) enddo enddo endif @@ -957,7 +998,7 @@ SUBROUTINE MISCLN IF (work1 > 0 .or. work2 > 0) THEN !$omp parallel do private(i,j) DO J=JSTA,JEND - DO I=1,IM + DO I=ISTA,IEND GRID1(I,J) = P7D(I,J,IFD) ENDDO ENDDO @@ -966,11 +1007,12 @@ SUBROUTINE MISCLN cfld = cfld + 1 fld_info(cfld)%ifld = IAVBLFLD(IGET1) fld_info(cfld)%lvl = LVLSXML(IFD,IGET1) -!$omp parallel do private(i,j,jj) +!$omp parallel do private(i,j,ii,jj) do j=1,jend-jsta+1 jj = jsta+j-1 - do i=1,im - datapd(i,j,cfld) = GRID1(i,jj) + do i=1,iend-ista+1 + ii = ista+i-1 + datapd(i,j,cfld) = GRID1(ii,jj) enddo enddo endif @@ -980,11 +1022,12 @@ SUBROUTINE MISCLN cfld = cfld + 1 fld_info(cfld)%ifld = IAVBLFLD(IGET2) fld_info(cfld)%lvl = LVLSXML(IFD,IGET2) -!$omp parallel do private(i,j,jj) +!$omp parallel do private(i,j,ii,jj) do j=1,jend-jsta+1 jj = jsta+j-1 - do i=1,im - datapd(i,j,cfld) = GRID1(i,jj) + do i=1,iend-ista+1 + ii = ista+i-1 + datapd(i,j,cfld) = GRID1(ii,jj) enddo enddo endif @@ -1009,7 +1052,7 @@ SUBROUTINE MISCLN IF (work1 > 0 .or. work2 > 0) THEN !$omp parallel do private(i,j) DO J=JSTA,JEND - DO I=1,IM + DO I=ISTA,IEND GRID1(I,J) = ICINGFD(I,J,IFD) ENDDO ENDDO @@ -1018,11 +1061,12 @@ SUBROUTINE MISCLN cfld = cfld + 1 fld_info(cfld)%ifld = IAVBLFLD(IGET1) fld_info(cfld)%lvl = LVLSXML(IFD,IGET1) -!$omp parallel do private(i,j,jj) +!$omp parallel do private(i,j,ii,jj) do j=1,jend-jsta+1 jj = jsta+j-1 - do i=1,im - datapd(i,j,cfld) = GRID1(i,jj) + do i=1,iend-ista+1 + ii = ista+i-1 + datapd(i,j,cfld) = GRID1(ii,jj) enddo enddo endif @@ -1032,11 +1076,12 @@ SUBROUTINE MISCLN cfld = cfld + 1 fld_info(cfld)%ifld = IAVBLFLD(IGET2) fld_info(cfld)%lvl = LVLSXML(IFD,IGET2) -!$omp parallel do private(i,j,jj) +!$omp parallel do private(i,j,ii,jj) do j=1,jend-jsta+1 jj = jsta+j-1 - do i=1,im - datapd(i,j,cfld) = GRID1(i,jj) + do i=1,iend-ista+1 + ii = ista+i-1 + datapd(i,j,cfld) = GRID1(ii,jj) enddo enddo endif @@ -1045,131 +1090,6 @@ SUBROUTINE MISCLN ENDIF ENDIF ! -! ADD FD LEVEL DUST/ASH (GOCART) - IF (IGET(601)>0) THEN ! DUST 1 - IF (LVLS(IFD,IGET(601))>0) THEN -!$omp parallel do private(i,j) - DO J=JSTA,JEND - DO I=1,IM - GRID1(I,J)=AERFD(I,J,IFD,1) - ENDDO - ENDDO - if(iget(601)>0) then - if(grib=='grib2') then - cfld=cfld+1 - fld_info(cfld)%ifld=IAVBLFLD(IGET(601)) - fld_info(cfld)%lvl=LVLSXML(IFD,IGET(601)) -!$omp parallel do private(i,j,jj) - do j=1,jend-jsta+1 - jj = jsta+j-1 - do i=1,im - datapd(i,j,cfld) = GRID1(i,jj) - enddo - enddo - endif - endif - ENDIF - ENDIF - - IF (IGET(602)>0) THEN ! DUST 2 - IF (LVLS(IFD,IGET(602))>0) THEN -!$omp parallel do private(i,j) - DO J=JSTA,JEND - DO I=1,IM - GRID1(I,J)=AERFD(I,J,IFD,2) - ENDDO - ENDDO - if(iget(602)>0) then - if(grib=='grib2') then - cfld=cfld+1 - fld_info(cfld)%ifld=IAVBLFLD(IGET(602)) - fld_info(cfld)%lvl=LVLSXML(IFD,IGET(602)) -!$omp parallel do private(i,j,jj) - do j=1,jend-jsta+1 - jj = jsta+j-1 - do i=1,im - datapd(i,j,cfld) = GRID1(i,jj) - enddo - enddo - endif - endif - ENDIF - ENDIF - - IF (IGET(603)>0) THEN ! DUST 3 - IF (LVLS(IFD,IGET(603))>0) THEN -!$omp parallel do private(i,j) - DO J=JSTA,JEND - DO I=1,IM - GRID1(I,J)=AERFD(I,J,IFD,3) - ENDDO - ENDDO - if(iget(603)>0) then - if(grib=='grib2') then - cfld=cfld+1 - fld_info(cfld)%ifld=IAVBLFLD(IGET(603)) - fld_info(cfld)%lvl=LVLSXML(IFD,IGET(603)) -!$omp parallel do private(i,j,jj) - do j=1,jend-jsta+1 - jj = jsta+j-1 - do i=1,im - datapd(i,j,cfld) = GRID1(i,jj) - enddo - enddo - endif - endif - ENDIF - ENDIF - - IF (IGET(604)>0) THEN ! DUST 4 - IF (LVLS(IFD,IGET(604))>0) THEN -!$omp parallel do private(i,j) - DO J=JSTA,JEND - DO I=1,IM - GRID1(I,J)=AERFD(I,J,IFD,4) - ENDDO - ENDDO - if(iget(604)>0) then - if(grib=='grib2') then - cfld=cfld+1 - fld_info(cfld)%ifld=IAVBLFLD(IGET(604)) - fld_info(cfld)%lvl=LVLSXML(IFD,IGET(604)) -!$omp parallel do private(i,j,jj) - do j=1,jend-jsta+1 - jj = jsta+j-1 - do i=1,im - datapd(i,j,cfld) = GRID1(i,jj) - enddo - enddo - endif - endif - ENDIF - ENDIF - - IF (IGET(605)>0) THEN ! DUST 5 - IF (LVLS(IFD,IGET(605))>0) THEN -!$omp parallel do private(i,j) - DO J=JSTA,JEND - DO I=1,IM - GRID1(I,J)=AERFD(I,J,IFD,5) - ENDDO - ENDDO - if(iget(605)>0) then - if(grib=='grib2') then - cfld=cfld+1 - fld_info(cfld)%ifld=IAVBLFLD(IGET(605)) - fld_info(cfld)%lvl=LVLSXML(IFD,IGET(605)) -!$omp parallel do private(i,j,jj) - do j=1,jend-jsta+1 - jj = jsta+j-1 - do i=1,im - datapd(i,j,cfld) = GRID1(i,jj) - enddo - enddo - endif - endif - ENDIF - ENDIF ! ! @@ -1177,7 +1097,7 @@ SUBROUTINE MISCLN IF ((IGET(060)>0).OR.(IGET(061)>0)) THEN !$omp parallel do private(i,j) DO J=JSTA,JEND - DO I=1,IM + DO I=ISTA,IEND GRID1(I,J)=U7D(I,J,IFD) GRID2(I,J)=V6D(I,J,IFD) ENDDO @@ -1188,11 +1108,12 @@ SUBROUTINE MISCLN cfld=cfld+1 fld_info(cfld)%ifld=IAVBLFLD(IGET(060)) fld_info(cfld)%lvl=LVLSXML(IFD,IGET(060)) -!$omp parallel do private(i,j,jj) +!$omp parallel do private(i,j,ii,jj) do j=1,jend-jsta+1 jj = jsta+j-1 - do i=1,im - datapd(i,j,cfld) = GRID1(i,jj) + do i=1,iend-ista+1 + ii = ista+i-1 + datapd(i,j,cfld) = GRID1(ii,jj) enddo enddo endif @@ -1204,11 +1125,12 @@ SUBROUTINE MISCLN cfld=cfld+1 fld_info(cfld)%ifld=IAVBLFLD(IGET(061)) fld_info(cfld)%lvl=LVLSXML(IFD,IGET(061)) -!$omp parallel do private(i,j,jj) +!$omp parallel do private(i,j,ii,jj) do j=1,jend-jsta+1 jj = jsta+j-1 - do i=1,im - datapd(i,j,cfld) = GRID2(i,jj) + do i=1,iend-ista+1 + ii = ista+i-1 + datapd(i,j,cfld) = GRID2(ii,jj) enddo enddo endif @@ -1220,7 +1142,7 @@ SUBROUTINE MISCLN IF ((IGET(576)>0).OR.(IGET(577)>0)) THEN !$omp parallel do private(i,j) DO J=JSTA,JEND - DO I=1,IM + DO I=ISTA,IEND GRID1(I,J) = U7D(I,J,IFD) GRID2(I,J) = V6D(I,J,IFD) ENDDO @@ -1231,11 +1153,12 @@ SUBROUTINE MISCLN cfld=cfld+1 fld_info(cfld)%ifld=IAVBLFLD(IGET(576)) fld_info(cfld)%lvl=LVLSXML(IFD,IGET(576)) -!$omp parallel do private(i,j,jj) +!$omp parallel do private(i,j,ii,jj) do j=1,jend-jsta+1 jj = jsta+j-1 - do i=1,im - datapd(i,j,cfld) = GRID1(i,jj) + do i=1,iend-ista+1 + ii = ista+i-1 + datapd(i,j,cfld) = GRID1(ii,jj) enddo enddo endif @@ -1247,11 +1170,12 @@ SUBROUTINE MISCLN cfld=cfld+1 fld_info(cfld)%ifld=IAVBLFLD(IGET(577)) fld_info(cfld)%lvl=LVLSXML(IFD,IGET(577)) -!$omp parallel do private(i,j,jj) +!$omp parallel do private(i,j,ii,jj) do j=1,jend-jsta+1 jj = jsta+j-1 - do i=1,im - datapd(i,j,cfld) = GRID2(i,jj) + do i=1,iend-ista+1 + ii = ista+i-1 + datapd(i,j,cfld) = GRID2(ii,jj) enddo enddo endif @@ -1259,8 +1183,8 @@ SUBROUTINE MISCLN ENDIF ENDIF - 10 CONTINUE - DEALLOCATE(T7D,Q7D,U7D,V6D,P7D,ICINGFD,AERFD) + END DO loop_10 + DEALLOCATE(T7D,Q7D,U7D,V6D,P7D,ICINGFD) ENDIF ! @@ -1279,14 +1203,14 @@ SUBROUTINE MISCLN allocate(HTFDCTL(NFDCTL)) HTFDCTL=pset%param(N)%level ! print *, "GTG 467 levels=",pset%param(N)%level - allocate(GTGFD(IM,JSTA:JEND,NFDCTL)) + allocate(GTGFD(ISTA:IEND,JSTA:JEND,NFDCTL)) call FDLVL_MASS(ITYPEFDLVLCTL,NFDCTL,HTFDCTL,GTG,GTGFD) ! print *, "GTG 467 Done GTGFD=",me,GTGFD(IM/2,jend,1:NFDCTL) DO IFD = 1,NFDCTL IF (LVLS(IFD,IGET(467))>0) THEN !$omp parallel do private(i,j) DO J=JSTA,JEND - DO I=1,IM + DO I=ISTA,IEND GRID1(I,J)=GTGFD(I,J,IFD) ENDDO ENDDO @@ -1294,11 +1218,12 @@ SUBROUTINE MISCLN cfld=cfld+1 fld_info(cfld)%ifld=IAVBLFLD(IGET(467)) fld_info(cfld)%lvl=LVLSXML(IFD,IGET(467)) -!$omp parallel do private(i,j,jj) +!$omp parallel do private(i,j,ii,jj) do j=1,jend-jsta+1 jj = jsta+j-1 - do i=1,im - datapd(i,j,cfld) = GRID1(i,jj) + do i=1,iend-ista+1 + ii = ista+i-1 + datapd(i,j,cfld) = GRID1(ii,jj) enddo enddo endif @@ -1317,13 +1242,13 @@ SUBROUTINE MISCLN if(allocated(HTFDCTL)) deallocate(HTFDCTL) allocate(HTFDCTL(NFDCTL)) HTFDCTL=pset%param(N)%level - allocate(CATFD(IM,JSTA:JEND,NFDCTL)) + allocate(CATFD(ISTA:IEND,JSTA:JEND,NFDCTL)) call FDLVL_MASS(ITYPEFDLVLCTL,NFDCTL,HTFDCTL,catedr,CATFD) DO IFD = 1,NFDCTL IF (LVLS(IFD,IGET(468))>0) THEN !$omp parallel do private(i,j) DO J=JSTA,JEND - DO I=1,IM + DO I=ISTA,IEND GRID1(I,J)=CATFD(I,J,IFD) ENDDO ENDDO @@ -1331,11 +1256,12 @@ SUBROUTINE MISCLN cfld=cfld+1 fld_info(cfld)%ifld=IAVBLFLD(IGET(468)) fld_info(cfld)%lvl=LVLSXML(IFD,IGET(468)) -!$omp parallel do private(i,j,jj) +!$omp parallel do private(i,j,ii,jj) do j=1,jend-jsta+1 jj = jsta+j-1 - do i=1,im - datapd(i,j,cfld) = GRID1(i,jj) + do i=1,iend-ista+1 + ii = ista+i-1 + datapd(i,j,cfld) = GRID1(ii,jj) enddo enddo endif @@ -1354,13 +1280,13 @@ SUBROUTINE MISCLN if(allocated(HTFDCTL)) deallocate(HTFDCTL) allocate(HTFDCTL(NFDCTL)) HTFDCTL=pset%param(N)%level - allocate(MWTFD(IM,JSTA:JEND,NFDCTL)) + allocate(MWTFD(ISTA:IEND,JSTA:JEND,NFDCTL)) call FDLVL_MASS(ITYPEFDLVLCTL,NFDCTL,HTFDCTL,MWT,MWTFD) DO IFD = 1,NFDCTL IF (LVLS(IFD,IGET(469))>0) THEN !$omp parallel do private(i,j) DO J=JSTA,JEND - DO I=1,IM + DO I=ISTA,IEND GRID1(I,J)=MWTFD(I,J,IFD) ENDDO ENDDO @@ -1368,11 +1294,12 @@ SUBROUTINE MISCLN cfld=cfld+1 fld_info(cfld)%ifld=IAVBLFLD(IGET(469)) fld_info(cfld)%lvl=LVLSXML(IFD,IGET(469)) -!$omp parallel do private(i,j,jj) +!$omp parallel do private(i,j,ii,jj) do j=1,jend-jsta+1 jj = jsta+j-1 - do i=1,im - datapd(i,j,cfld) = GRID1(i,jj) + do i=1,iend-ista+1 + ii = ista+i-1 + datapd(i,j,cfld) = GRID1(ii,jj) enddo enddo endif @@ -1399,20 +1326,23 @@ SUBROUTINE MISCLN IF (IGET(062)>0) THEN !$omp parallel do private(i,j) DO J=JSTA,JEND - DO I=1,IM + DO I=ISTA,IEND GRID1(I,J)=Z1D(I,J) - IF (SUBMODELNAME == 'RTMA') FREEZELVL(I,J)=GRID1(I,J) + IF (SUBMODELNAME == 'RTMA') THEN + FREEZELVL(I,J)=GRID1(I,J) + ENDIF ENDDO ENDDO CALL BOUND (GRID1,D00,H99999) if(grib=='grib2') then cfld=cfld+1 fld_info(cfld)%ifld=IAVBLFLD(IGET(062)) -!$omp parallel do private(i,j,jj) +!$omp parallel do private(i,j,ii,jj) do j=1,jend-jsta+1 jj = jsta+j-1 - do i=1,im - datapd(i,j,cfld) = GRID1(i,jj) + do i=1,iend-ista+1 + ii = ista+i-1 + datapd(i,j,cfld) = GRID1(ii,jj) enddo enddo endif @@ -1422,20 +1352,21 @@ SUBROUTINE MISCLN IF (IGET(063)>0) THEN !$omp parallel do private(i,j) DO J=JSTA,JEND - DO I=1,IM + DO I=ISTA,IEND GRID1(I,J) = RH1D(I,J) ENDDO ENDDO - CALL SCLFLD(GRID1,H100,IM,JM) + CALL SCLFLD(GRID1(ista:iend,jsta:jend),H100,IM,JM) CALL BOUND(GRID1,H1,H100) if(grib=='grib2') then cfld=cfld+1 fld_info(cfld)%ifld=IAVBLFLD(IGET(063)) -!$omp parallel do private(i,j,jj) +!$omp parallel do private(i,j,ii,jj) do j=1,jend-jsta+1 jj = jsta+j-1 - do i=1,im - datapd(i,j,cfld) = GRID1(i,jj) + do i=1,iend-ista+1 + ii = ista+i-1 + datapd(i,j,cfld) = GRID1(ii,jj) enddo enddo endif @@ -1445,18 +1376,19 @@ SUBROUTINE MISCLN IF (IGET(753)>0) THEN !$omp parallel do private(i,j) DO J=JSTA,JEND - DO I=1,IM + DO I=ISTA,IEND GRID1(I,J) = P1D(I,J) ENDDO ENDDO if(grib=='grib2') then cfld=cfld+1 fld_info(cfld)%ifld=IAVBLFLD(IGET(753)) -!$omp parallel do private(i,j,jj) +!$omp parallel do private(i,j,ii,jj) do j=1,jend-jsta+1 jj = jsta+j-1 - do i=1,im - datapd(i,j,cfld) = GRID1(i,jj) + do i=1,iend-ista+1 + ii = ista+i-1 + datapd(i,j,cfld) = GRID1(ii,jj) enddo enddo endif @@ -1471,7 +1403,7 @@ SUBROUTINE MISCLN IF (IGET(165)>0)THEN !$omp parallel do private(i,j) DO J=JSTA,JEND - DO I=1,IM + DO I=ISTA,IEND GRID1(I,J)=Z1D(I,J) ENDDO ENDDO @@ -1479,22 +1411,23 @@ SUBROUTINE MISCLN if(grib=='grib2') then cfld=cfld+1 fld_info(cfld)%ifld=IAVBLFLD(IGET(165)) -!$omp parallel do private(i,j,jj) +!$omp parallel do private(i,j,ii,jj) do j=1,jend-jsta+1 jj = jsta+j-1 - do i=1,im - datapd(i,j,cfld) = GRID1(i,jj) + do i=1,iend-ista+1 + ii = ista+i-1 + datapd(i,j,cfld) = GRID1(ii,jj) enddo enddo endif END IF ! HIGHEST FREEZING LEVEL RELATIVE HUMIDITY - IF (IGET(350)>0)THEN + IF (IGET(350)>0)THEN GRID1=spval !$omp parallel do private(i,j) DO J=JSTA,JEND - DO I=1,IM + DO I=ISTA,IEND IF(RH1D(I,J) < spval) GRID1(I,J)=RH1D(I,J)*100. ENDDO ENDDO @@ -1502,11 +1435,12 @@ SUBROUTINE MISCLN if(grib=='grib2') then cfld=cfld+1 fld_info(cfld)%ifld=IAVBLFLD(IGET(350)) -!$omp parallel do private(i,j,jj) +!$omp parallel do private(i,j,ii,jj) do j=1,jend-jsta+1 jj = jsta+j-1 - do i=1,im - datapd(i,j,cfld) = GRID1(i,jj) + do i=1,iend-ista+1 + ii = ista+i-1 + datapd(i,j,cfld) = GRID1(ii,jj) enddo enddo endif @@ -1516,18 +1450,19 @@ SUBROUTINE MISCLN IF (IGET(756)>0) THEN !$omp parallel do private(i,j) DO J=JSTA,JEND - DO I=1,IM + DO I=ISTA,IEND GRID1(I,J) = P1D(I,J) ENDDO ENDDO if(grib=='grib2') then cfld=cfld+1 fld_info(cfld)%ifld=IAVBLFLD(IGET(756)) -!$omp parallel do private(i,j,jj) +!$omp parallel do private(i,j,ii,jj) do j=1,jend-jsta+1 jj = jsta+j-1 - do i=1,im - datapd(i,j,cfld) = GRID1(i,jj) + do i=1,iend-ista+1 + ii = ista+i-1 + datapd(i,j,cfld) = GRID1(ii,jj) enddo enddo endif @@ -1544,7 +1479,7 @@ SUBROUTINE MISCLN IF (IGET(776)>0)THEN !$omp parallel do private(i,j) DO J=JSTA,JEND - DO I=1,IM + DO I=ISTA,IEND GRID1(I,J)=Z1D(I,J) ENDDO ENDDO @@ -1552,22 +1487,23 @@ SUBROUTINE MISCLN if(grib=='grib2') then cfld=cfld+1 fld_info(cfld)%ifld=IAVBLFLD(IGET(776)) -!$omp parallel do private(i,j,jj) +!$omp parallel do private(i,j,ii,jj) do j=1,jend-jsta+1 jj = jsta+j-1 - do i=1,im - datapd(i,j,cfld) = GRID1(i,jj) + do i=1,iend-ista+1 + ii = ista+i-1 + datapd(i,j,cfld) = GRID1(ii,jj) enddo enddo endif END IF ! HIGHEST -10C ISOTHERM RELATIVE HUMIDITY - IF (IGET(777)>0)THEN + IF (IGET(777)>0)THEN GRID1=spval !$omp parallel do private(i,j) DO J=JSTA,JEND - DO I=1,IM + DO I=ISTA,IEND IF(RH1D(I,J) < spval) GRID1(I,J)=RH1D(I,J)*100. ENDDO ENDDO @@ -1575,11 +1511,12 @@ SUBROUTINE MISCLN if(grib=='grib2') then cfld=cfld+1 fld_info(cfld)%ifld=IAVBLFLD(IGET(777)) -!$omp parallel do private(i,j,jj) +!$omp parallel do private(i,j,ii,jj) do j=1,jend-jsta+1 jj = jsta+j-1 - do i=1,im - datapd(i,j,cfld) = GRID1(i,jj) + do i=1,iend-ista+1 + ii = ista+i-1 + datapd(i,j,cfld) = GRID1(ii,jj) enddo enddo endif @@ -1589,18 +1526,19 @@ SUBROUTINE MISCLN IF (IGET(778)>0) THEN !$omp parallel do private(i,j) DO J=JSTA,JEND - DO I=1,IM + DO I=ISTA,IEND GRID1(I,J)=P1D(I,J) ENDDO ENDDO if(grib=='grib2') then cfld=cfld+1 fld_info(cfld)%ifld=IAVBLFLD(IGET(778)) -!$omp parallel do private(i,j,jj) +!$omp parallel do private(i,j,ii,jj) do j=1,jend-jsta+1 jj = jsta+j-1 - do i=1,im - datapd(i,j,cfld) = GRID1(i,jj) + do i=1,iend-ista+1 + ii = ista+i-1 + datapd(i,j,cfld) = GRID1(ii,jj) enddo enddo endif @@ -1617,7 +1555,7 @@ SUBROUTINE MISCLN IF (IGET(779)>0)THEN !$omp parallel do private(i,j) DO J=JSTA,JEND - DO I=1,IM + DO I=ISTA,IEND GRID1(I,J)=Z1D(I,J) ENDDO ENDDO @@ -1625,11 +1563,12 @@ SUBROUTINE MISCLN if(grib=='grib2') then cfld=cfld+1 fld_info(cfld)%ifld=IAVBLFLD(IGET(779)) -!$omp parallel do private(i,j,jj) +!$omp parallel do private(i,j,ii,jj) do j=1,jend-jsta+1 jj = jsta+j-1 - do i=1,im - datapd(i,j,cfld) = GRID1(i,jj) + do i=1,iend-ista+1 + ii = ista+i-1 + datapd(i,j,cfld) = GRID1(ii,jj) enddo enddo endif @@ -1640,7 +1579,7 @@ SUBROUTINE MISCLN GRID1=spval !$omp parallel do private(i,j) DO J=JSTA,JEND - DO I=1,IM + DO I=ISTA,IEND IF(RH1D(I,J) < spval) GRID1(I,J)=RH1D(I,J)*100. ENDDO ENDDO @@ -1648,11 +1587,12 @@ SUBROUTINE MISCLN if(grib=='grib2') then cfld=cfld+1 fld_info(cfld)%ifld=IAVBLFLD(IGET(780)) -!$omp parallel do private(i,j,jj) +!$omp parallel do private(i,j,ii,jj) do j=1,jend-jsta+1 jj = jsta+j-1 - do i=1,im - datapd(i,j,cfld) = GRID1(i,jj) + do i=1,iend-ista+1 + ii = ista+i-1 + datapd(i,j,cfld) = GRID1(ii,jj) enddo enddo endif @@ -1662,18 +1602,19 @@ SUBROUTINE MISCLN IF (IGET(781)>0) THEN !$omp parallel do private(i,j) DO J=JSTA,JEND - DO I=1,IM + DO I=ISTA,IEND GRID1(I,J)=P1D(I,J) ENDDO ENDDO if(grib=='grib2') then cfld=cfld+1 fld_info(cfld)%ifld=IAVBLFLD(IGET(781)) -!$omp parallel do private(i,j,jj) +!$omp parallel do private(i,j,ii,jj) do j=1,jend-jsta+1 jj = jsta+j-1 - do i=1,im - datapd(i,j,cfld) = GRID1(i,jj) + do i=1,iend-ista+1 + ii = ista+i-1 + datapd(i,j,cfld) = GRID1(ii,jj) enddo enddo endif @@ -1681,10 +1622,10 @@ SUBROUTINE MISCLN ENDIF ! - allocate(PBND(IM,jsta:jend,NBND), TBND(IM,jsta:jend,NBND), & - QBND(IM,jsta:jend,NBND), UBND(IM,jsta:jend,NBND), & - VBND(IM,jsta:jend,NBND), RHBND(IM,jsta:jend,NBND), & - WBND(IM,jsta:jend,NBND)) + allocate(PBND(ista:iend,jsta:jend,NBND), TBND(ista:iend,jsta:jend,NBND), & + QBND(ista:iend,jsta:jend,NBND), UBND(ista:iend,jsta:jend,NBND), & + VBND(ista:iend,jsta:jend,NBND), RHBND(ista:iend,jsta:jend,NBND), & + WBND(ista:iend,jsta:jend,NBND)) ! ! ***BLOCK 5: BOUNDARY LAYER FIELDS. @@ -1697,38 +1638,35 @@ SUBROUTINE MISCLN (IGET(090)>0).OR.(IGET(075)>0).OR. & (IGET(109)>0).OR.(IGET(110)>0).OR. & (IGET(031)>0).OR.(IGET(032)>0).OR. & - (IGET(573)>0).OR. & + (IGET(573)>0).OR. NEED_IFI .OR. & (IGET(107)>0).OR.(IGET(091)>0).OR. & (IGET(092)>0).OR.(IGET(093)>0).OR. & (IGET(094)>0).OR.(IGET(095)>0).OR. & (IGET(096)>0).OR.(IGET(097)>0).OR. & (IGET(098)>0).OR.(IGET(221)>0) ) THEN ! - allocate(OMGBND(IM,jsta:jend,NBND),PWTBND(IM,jsta:jend,NBND), & - QCNVBND(IM,jsta:jend,NBND),LVLBND(IM,jsta:jend,NBND), & - LB2(IM,jsta:jend)) - + call allocate_cape_arrays ! COMPUTE ETA BOUNDARY LAYER FIELDS. CALL BNDLYR(PBND,TBND,QBND,RHBND,UBND,VBND, & WBND,OMGBND,PWTBND,QCNVBND,LVLBND) !$omp parallel do private(i,j) DO J=JSTA,JEND - DO I=1,IM + DO I=ISTA,IEND EGRID2(i,j) = SPVAL ENDDO ENDDO ! ! LOOP OVER NBND BOUNDARY LAYERS. - DO 20 LBND = 1,NBND + boundary_layer_loop: DO LBND = 1,NBND ! ! BOUNDARY LAYER PRESSURE. IF (IGET(067)>0) THEN IF (LVLS(LBND,IGET(067))>0) THEN !$omp parallel do private(i,j) DO J=JSTA,JEND - DO I=1,IM + DO I=ISTA,IEND GRID1(I,J) = PBND(I,J,LBND) ENDDO ENDDO @@ -1736,11 +1674,12 @@ SUBROUTINE MISCLN cfld=cfld+1 fld_info(cfld)%ifld=IAVBLFLD(IGET(067)) fld_info(cfld)%lvl=LVLSXML(LBND,IGET(067)) -!$omp parallel do private(i,j,jj) +!$omp parallel do private(i,j,ii,jj) do j=1,jend-jsta+1 jj = jsta+j-1 - do i=1,im - datapd(i,j,cfld) = GRID1(i,jj) + do i=1,iend-ista+1 + ii = ista+i-1 + datapd(i,j,cfld) = GRID1(ii,jj) enddo enddo endif @@ -1752,7 +1691,7 @@ SUBROUTINE MISCLN IF (LVLS(LBND,IGET(068))>0) THEN !$omp parallel do private(i,j) DO J=JSTA,JEND - DO I=1,IM + DO I=ISTA,IEND GRID1(I,J)=TBND(I,J,LBND) ENDDO ENDDO @@ -1760,11 +1699,12 @@ SUBROUTINE MISCLN cfld=cfld+1 fld_info(cfld)%ifld=IAVBLFLD(IGET(068)) fld_info(cfld)%lvl=LVLSXML(LBND,IGET(068)) -!$omp parallel do private(i,j,jj) +!$omp parallel do private(i,j,ii,jj) do j=1,jend-jsta+1 jj = jsta+j-1 - do i=1,im - datapd(i,j,cfld) = GRID1(i,jj) + do i=1,iend-ista+1 + ii = ista+i-1 + datapd(i,j,cfld) = GRID1(ii,jj) enddo enddo endif @@ -1774,16 +1714,17 @@ SUBROUTINE MISCLN ! BOUNDARY LAYER POTENTIAL TEMPERATURE. IF (IGET(069)>0) THEN IF (LVLS(LBND,IGET(069))>0) THEN - CALL CALPOT(PBND(1,jsta,LBND),TBND(1,jsta,LBND),GRID1(1,jsta)) + CALL CALPOT(PBND(ista,jsta,LBND),TBND(ista,jsta,LBND),GRID1(ista:iend,jsta:jend)) if(grib=='grib2') then cfld=cfld+1 fld_info(cfld)%ifld=IAVBLFLD(IGET(069)) fld_info(cfld)%lvl=LVLSXML(IFD,IGET(069)) -!$omp parallel do private(i,j,jj) +!$omp parallel do private(i,j,ii,jj) do j=1,jend-jsta+1 jj = jsta+j-1 - do i=1,im - datapd(i,j,cfld) = GRID1(i,jj) + do i=1,iend-ista+1 + ii = ista+i-1 + datapd(i,j,cfld) = GRID1(ii,jj) enddo enddo endif @@ -1795,21 +1736,22 @@ SUBROUTINE MISCLN IF (LVLS(LBND,IGET(072))>0) THEN !$omp parallel do private(i,j) DO J=JSTA,JEND - DO I=1,IM + DO I=ISTA,IEND GRID1(I,J)=RHBND(I,J,LBND) ENDDO ENDDO - CALL SCLFLD(GRID1,H100,IM,JM) + CALL SCLFLD(GRID1(ista:iend,jsta:jend),H100,IM,JM) CALL BOUND(GRID1,H1,H100) if(grib=='grib2') then cfld=cfld+1 fld_info(cfld)%lvl=LVLSXML(LBND,IGET(072)) fld_info(cfld)%ifld=IAVBLFLD(IGET(072)) -!$omp parallel do private(i,j,jj) +!$omp parallel do private(i,j,ii,jj) do j=1,jend-jsta+1 jj = jsta+j-1 - do i=1,im - datapd(i,j,cfld) = GRID1(i,jj) + do i=1,iend-ista+1 + ii = ista+i-1 + datapd(i,j,cfld) = GRID1(ii,jj) enddo enddo endif @@ -1819,17 +1761,18 @@ SUBROUTINE MISCLN ! BOUNDARY LAYER DEWPOINT TEMPERATURE. IF (IGET(070)>0) THEN IF (LVLS(LBND,IGET(070))>0) THEN - CALL CALDWP(PBND(1,jsta,LBND), QBND(1,jsta,LBND), & - GRID1(1,jsta), TBND(1,jsta,LBND)) + CALL CALDWP(PBND(ista:iend,jsta:jend,LBND), QBND(ista:iend,jsta:jend,LBND), & + GRID1(ista:iend,jsta:jend), TBND(ista:iend,jsta:jend,LBND)) if(grib=='grib2') then cfld=cfld+1 fld_info(cfld)%ifld=IAVBLFLD(IGET(070)) fld_info(cfld)%lvl=LVLSXML(LBND,IGET(070)) -!$omp parallel do private(i,j,jj) +!$omp parallel do private(i,j,ii,jj) do j=1,jend-jsta+1 jj = jsta+j-1 - do i=1,im - datapd(i,j,cfld) = GRID1(i,jj) + do i=1,iend-ista+1 + ii = ista+i-1 + datapd(i,j,cfld) = GRID1(ii,jj) enddo enddo endif @@ -1841,7 +1784,7 @@ SUBROUTINE MISCLN IF (LVLS(LBND,IGET(071))>0) THEN !$omp parallel do private(i,j) DO J=JSTA,JEND - DO I=1,IM + DO I=ISTA,IEND GRID1(I,J)=QBND(I,J,LBND) ENDDO ENDDO @@ -1850,11 +1793,12 @@ SUBROUTINE MISCLN cfld=cfld+1 fld_info(cfld)%ifld=IAVBLFLD(IGET(071)) fld_info(cfld)%lvl=LVLSXML(LBND,IGET(071)) -!$omp parallel do private(i,j,jj) +!$omp parallel do private(i,j,ii,jj) do j=1,jend-jsta+1 jj = jsta+j-1 - do i=1,im - datapd(i,j,cfld) = GRID1(i,jj) + do i=1,iend-ista+1 + ii = ista+i-1 + datapd(i,j,cfld) = GRID1(ii,jj) enddo enddo endif @@ -1866,7 +1810,7 @@ SUBROUTINE MISCLN IF (LVLS(LBND,IGET(088))>0) THEN !$omp parallel do private(i,j) DO J=JSTA,JEND - DO I=1,IM + DO I=ISTA,IEND GRID1(I,J) = QCNVBND(I,J,LBND) ENDDO ENDDO @@ -1874,11 +1818,12 @@ SUBROUTINE MISCLN cfld=cfld+1 fld_info(cfld)%ifld=IAVBLFLD(IGET(088)) fld_info(cfld)%lvl=LVLSXML(LBND,IGET(088)) -!$omp parallel do private(i,j,jj) +!$omp parallel do private(i,j,ii,jj) do j=1,jend-jsta+1 jj = jsta+j-1 - do i=1,im - datapd(i,j,cfld) = GRID1(i,jj) + do i=1,iend-ista+1 + ii = ista+i-1 + datapd(i,j,cfld) = GRID1(ii,jj) enddo enddo endif @@ -1900,7 +1845,7 @@ SUBROUTINE MISCLN IF(FIELD1.OR.FIELD2)THEN !$omp parallel do private(i,j) DO J=JSTA,JEND - DO I=1,IM + DO I=ISTA,IEND GRID1(I,J) = UBND(I,J,LBND) GRID2(I,J) = VBND(I,J,LBND) ENDDO @@ -1912,11 +1857,12 @@ SUBROUTINE MISCLN cfld=cfld+1 fld_info(cfld)%ifld=IAVBLFLD(IGET(073)) fld_info(cfld)%lvl=LVLSXML(LBND,IGET(073)) -!$omp parallel do private(i,j,jj) +!$omp parallel do private(i,j,ii,jj) do j=1,jend-jsta+1 jj = jsta+j-1 - do i=1,im - datapd(i,j,cfld) = GRID1(i,jj) + do i=1,iend-ista+1 + ii = ista+i-1 + datapd(i,j,cfld) = GRID1(ii,jj) enddo enddo endif @@ -1928,11 +1874,12 @@ SUBROUTINE MISCLN cfld=cfld+1 fld_info(cfld)%ifld=IAVBLFLD(IGET(074)) fld_info(cfld)%lvl=LVLSXML(LBND,IGET(074)) -!$omp parallel do private(i,j,jj) +!$omp parallel do private(i,j,ii,jj) do j=1,jend-jsta+1 jj = jsta+j-1 - do i=1,im - datapd(i,j,cfld) = GRID2(i,jj) + do i=1,iend-ista+1 + ii = ista+i-1 + datapd(i,j,cfld) = GRID2(ii,jj) enddo enddo endif @@ -1945,7 +1892,7 @@ SUBROUTINE MISCLN IF (LVLS(LBND,IGET(090))>0) THEN !$omp parallel do private(i,j) DO J=JSTA,JEND - DO I=1,IM + DO I=ISTA,IEND GRID1(I,J) = OMGBND(I,J,LBND) ENDDO ENDDO @@ -1953,11 +1900,12 @@ SUBROUTINE MISCLN cfld=cfld+1 fld_info(cfld)%ifld=IAVBLFLD(IGET(090)) fld_info(cfld)%lvl=LVLSXML(LBND,IGET(090)) -!$omp parallel do private(i,j,jj) +!$omp parallel do private(i,j,ii,jj) do j=1,jend-jsta+1 jj = jsta+j-1 - do i=1,im - datapd(i,j,cfld) = GRID1(i,jj) + do i=1,iend-ista+1 + ii = ista+i-1 + datapd(i,j,cfld) = GRID1(ii,jj) enddo enddo endiF @@ -1969,7 +1917,7 @@ SUBROUTINE MISCLN IF (LVLS(LBND,IGET(089))>0) THEN !$omp parallel do private(i,j) DO J=JSTA,JEND - DO I=1,IM + DO I=ISTA,IEND GRID1(I,J) = PWTBND(I,J,LBND) ENDDO ENDDO @@ -1978,11 +1926,12 @@ SUBROUTINE MISCLN cfld=cfld+1 fld_info(cfld)%ifld=IAVBLFLD(IGET(089)) fld_info(cfld)%lvl=LVLSXML(LBND,IGET(089)) -!$omp parallel do private(i,j,jj) +!$omp parallel do private(i,j,ii,jj) do j=1,jend-jsta+1 jj = jsta+j-1 - do i=1,im - datapd(i,j,cfld) = GRID1(i,jj) + do i=1,iend-ista+1 + ii = ista+i-1 + datapd(i,j,cfld) = GRID1(ii,jj) enddo enddo endif @@ -1991,19 +1940,20 @@ SUBROUTINE MISCLN ! ! BOUNDARY LAYER LIFTED INDEX. IF (IGET(075)>0 .OR. IGET(031)>0 .OR. IGET(573)>0) THEN - CALL OTLFT(PBND(1,jsta,LBND),TBND(1,jsta,LBND), & - QBND(1,jsta,LBND),GRID1(1,jsta)) + CALL OTLFT(PBND(ista,jsta,LBND),TBND(ista,jsta,LBND), & + QBND(ista,jsta,LBND),GRID1(ista:iend,jsta:jend)) IF(IGET(075)>0)THEN IF (LVLS(LBND,IGET(075))>0) THEN if(grib=='grib2') then cfld=cfld+1 fld_info(cfld)%ifld=IAVBLFLD(IGET(075)) fld_info(cfld)%lvl=LVLSXML(LBND,IGET(075)) -!$omp parallel do private(i,j,jj) +!$omp parallel do private(i,j,ii,jj) do j=1,jend-jsta+1 jj = jsta+j-1 - do i=1,im - datapd(i,j,cfld) = GRID1(i,jj) + do i=1,iend-ista+1 + ii = ista+i-1 + datapd(i,j,cfld) = GRID1(ii,jj) enddo enddo endif @@ -2012,7 +1962,7 @@ SUBROUTINE MISCLN IF(IGET(031)>0 .or. IGET(573)>0)THEN !$omp parallel do private(i,j) DO J=JSTA,JEND - DO I=1,IM + DO I=ISTA,IEND EGRID2(I,J) = MIN(EGRID2(I,J),GRID1(I,J)) END DO END DO @@ -2020,14 +1970,14 @@ SUBROUTINE MISCLN ENDIF ! ! END OF ETA BOUNDARY LAYER LOOP. - 20 CONTINUE + END DO boundary_layer_loop deallocate(OMGBND,PWTBND,QCNVBND) ! ! BEST LIFTED INDEX FROM BOUNDARY LAYER FIELDS. ! IF (IGET(031)>0 .OR. IGET(573)>0 ) THEN ! DO J=JSTA,JEND -! DO I=1,IM +! DO I=ISTA,IEND ! EGRID1(I,J) = H99999 ! EGRID2(I,J) = H99999 ! ENDDO @@ -2037,14 +1987,14 @@ SUBROUTINE MISCLN ! CALL OTLFT(PBND(1,1,LBND),TBND(1,1,LBND), & ! QBND(1,1,LBND),EGRID2) ! DO J=JSTA,JEND -! DO I=1,IM +! DO I=ISTA,IEND ! EGRID1(I,J)=AMIN1(EGRID1(I,J),EGRID2(I,J)) ! ENDDO ! ENDDO ! 50 CONTINUE !$omp parallel do private(i,j) DO J=JSTA,JEND - DO I=1,IM + DO I=ISTA,IEND GRID1(I,J)=EGRID2(I,J) ENDDO ENDDO @@ -2054,7 +2004,7 @@ SUBROUTINE MISCLN if(grib=='grib2') then cfld=cfld+1 fld_info(cfld)%ifld=IAVBLFLD(IGET(031)) - datapd(1:im,1:jend-jsta+1,cfld)=GRID1(1:im,jsta:jend) + datapd(1:iend-ista+1,1:jend-jsta+1,cfld)=GRID1(ista:iend,jsta:jend) endif endif @@ -2062,11 +2012,12 @@ SUBROUTINE MISCLN if(grib=='grib2') then cfld=cfld+1 fld_info(cfld)%ifld=IAVBLFLD(IGET(573)) -!$omp parallel do private(i,j,jj) +!$omp parallel do private(i,j,ii,jj) do j=1,jend-jsta+1 jj = jsta+j-1 - do i=1,im - datapd(i,j,cfld) = GRID1(i,jj) + do i=1,iend-ista+1 + ii = ista+i-1 + datapd(i,j,cfld) = GRID1(ii,jj) enddo enddo endif @@ -2098,24 +2049,24 @@ SUBROUTINE MISCLN ! LVLSXML(1,IGET(566)),'LVLSXML(1,IGET(567)=', & ! LVLSXML(1,IGET(567)),'field1=',field1,'field2=',field2 ! - IF(FIELD1.OR.FIELD2)THEN + IF(FIELD1.OR.FIELD2.OR.NEED_IFI)THEN ITYPE = 2 + call allocate_cape_arrays ! !$omp parallel do private(i,j) DO J=JSTA,JEND - DO I=1,IM + DO I=ISTA,IEND EGRID1(I,J) = -H99999 EGRID2(I,J) = -H99999 ENDDO ENDDO ! - DO 80 LBND = 1,NBND - CALL CALTHTE(PBND(1,jsta,LBND),TBND(1,jsta,LBND), & - QBND(1,jsta,LBND),EGRID1) + loop_80: DO LBND = 1,NBND + CALL CALTHTE(PBND(ista,jsta,LBND),TBND(ista,jsta,LBND), & + QBND(ista,jsta,LBND),EGRID1) !$omp parallel do private(i,j) DO J=JSTA,JEND - DO I=1,IM - + DO I=ISTA,IEND IF (EGRID1(I,J) > EGRID2(I,J)) THEN EGRID2(I,J) = EGRID1(I,J) LB2(I,J) = LVLBND(I,J,LBND) @@ -2125,42 +2076,52 @@ SUBROUTINE MISCLN ENDIF ENDDO ENDDO - 80 CONTINUE + ENDDO loop_80 ! DPBND = 0. CALL CALCAPE(ITYPE,DPBND,P1D,T1D,Q1D,LB2,EGRID1, & EGRID2,EGRID3,EGRID4,EGRID5) + ! - IF (IGET(566)>0) THEN -! dong add missing value for cape + IF(IGET(566)>0 .or. NEED_IFI) THEN GRID1=spval !$omp parallel do private(i,j) DO J=JSTA,JEND - DO I=1,IM + DO I=ISTA,IEND IF(T1D(I,J) < spval) GRID1(I,J) = EGRID1(I,J) ENDDO ENDDO - CALL BOUND(GRID1,D00,H99999) + CALL BOUND(GRID1,D00,H99999) +!$omp parallel do private(i,j) + DO J=JSTA,JEND + DO I=ISTA,IEND + CAPE(I,J) = GRID1(I,J) + ENDDO + ENDDO + ENDIF + + IF (IGET(566)>0) THEN if(grib=='grib2') then cfld=cfld+1 fld_info(cfld)%ifld=IAVBLFLD(IGET(566)) fld_info(cfld)%lvl=LVLSXML(1,IGET(566)) -!$omp parallel do private(i,j,jj) +!$omp parallel do private(i,j,ii,jj) do j=1,jend-jsta+1 jj = jsta+j-1 - do i=1,im - datapd(i,j,cfld) = GRID1(i,jj) + do i=1,iend-ista+1 + ii = ista+i-1 + datapd(i,j,cfld) = CAPE(ii,jj) enddo enddo endif ENDIF ! - IF (IGET(567) > 0) THEN -! dong add missing value for cape + IF (IGET(567) > 0 .or. NEED_IFI) THEN +! dong add missing value for CIN GRID1=spval !$omp parallel do private(i,j) DO J=JSTA,JEND - DO I=1,IM + DO I=ISTA,IEND IF(T1D(I,J) < spval) GRID1(I,J) = - EGRID2(I,J) ENDDO ENDDO @@ -2169,20 +2130,24 @@ SUBROUTINE MISCLN ! !$omp parallel do private(i,j) DO J=JSTA,JEND - DO I=1,IM + DO I=ISTA,IEND IF(T1D(I,J) < spval) GRID1(I,J) = - GRID1(I,J) + CIN(I,J) = GRID1(I,J) ENDDO ENDDO -! + ENDIF + + IF(IGET(567) > 0) THEN if(grib=='grib2') then cfld=cfld+1 fld_info(cfld)%ifld=IAVBLFLD(IGET(567)) fld_info(cfld)%lvl=LVLSXML(1,IGET(567)) -!$omp parallel do private(i,j,jj) +!$omp parallel do private(i,j,ii,jj) do j=1,jend-jsta+1 jj = jsta+j-1 - do i=1,im - datapd(i,j,cfld) = GRID1(i,jj) + do i=1,iend-ista+1 + ii = ista+i-1 + datapd(i,j,cfld) = CIN(ii,jj) enddo enddo endif @@ -2194,18 +2159,19 @@ SUBROUTINE MISCLN IF(IGET(221) > 0) THEN !$omp parallel do private(i,j) DO J=JSTA,JEND - DO I=1,IM + DO I=ISTA,IEND GRID1(I,J) = PBLH(I,J) ENDDO ENDDO if(grib=='grib2') then cfld=cfld+1 fld_info(cfld)%ifld=IAVBLFLD(IGET(221)) -!$omp parallel do private(i,j,jj) +!$omp parallel do private(i,j,ii,jj) do j=1,jend-jsta+1 jj = jsta+j-1 - do i=1,im - datapd(i,j,cfld) = GRID1(i,jj) + do i=1,iend-ista+1 + ii = ista+i-1 + datapd(i,j,cfld) = GRID1(ii,jj) enddo enddo endif @@ -2214,44 +2180,46 @@ SUBROUTINE MISCLN ! EGRID1 IS LCL PRESSURE. EGRID2 IS LCL HEIGHT. ! IF ( (IGET(109)>0).OR.(IGET(110)>0) ) THEN - CALL CALLCL(PBND(1,jsta,1),TBND(1,jsta,1), & - QBND(1,jsta,1),EGRID1,EGRID2) + CALL CALLCL(PBND(ista,jsta,1),TBND(ista,jsta,1), & + QBND(ista,jsta,1),EGRID1,EGRID2) IF (IGET(109)>0) THEN GRID1=spval !$omp parallel do private(i,j) DO J=JSTA,JEND - DO I=1,IM + DO I=ISTA,IEND IF(TBND(I,J,1) < spval) GRID1(I,J) = EGRID2(I,J) ENDDO ENDDO if(grib=='grib2') then cfld=cfld+1 fld_info(cfld)%ifld=IAVBLFLD(IGET(109)) -!$omp parallel do private(i,j,jj) +!$omp parallel do private(i,j,ii,jj) do j=1,jend-jsta+1 jj = jsta+j-1 - do i=1,im - datapd(i,j,cfld) = GRID1(i,jj) + do i=1,iend-ista+1 + ii = ista+i-1 + datapd(i,j,cfld) = GRID1(ii,jj) enddo enddo endif ENDIF IF (IGET(110)>0) THEN - GRID1=spval + GRID1=spval !$omp parallel do private(i,j) DO J=JSTA,JEND - DO I=1,IM + DO I=ISTA,IEND IF(TBND(I,J,1) < spval) GRID1(I,J) = EGRID1(I,J) ENDDO ENDDO if(grib=='grib2') then cfld=cfld+1 fld_info(cfld)%ifld=IAVBLFLD(IGET(110)) -!$omp parallel do private(i,j,jj) +!$omp parallel do private(i,j,ii,jj) do j=1,jend-jsta+1 jj = jsta+j-1 - do i=1,im - datapd(i,j,cfld) = GRID1(i,jj) + do i=1,iend-ista+1 + ii = ista+i-1 + datapd(i,j,cfld) = GRID1(ii,jj) enddo enddo endif @@ -2266,15 +2234,15 @@ SUBROUTINE MISCLN (IGET(096)>0).OR.(IGET(097)>0).OR. & (IGET(098)>0) ) THEN - allocate(T78483(im,jsta:jend), T89671(im,jsta:jend), & - P78483(im,jsta:jend), P89671(im,jsta:jend)) + allocate(T78483(ista:iend,jsta:jend), T89671(ista:iend,jsta:jend), & + P78483(ista:iend,jsta:jend), P89671(ista:iend,jsta:jend)) ! ! COMPUTE SIGMA 0.89671 AND 0.78483 TEMPERATURES ! INTERPOLATE LINEAR IN LOG P IF (IGET(097)>0.OR.IGET(098)>0) THEN !$omp parallel do private(i,j) DO J=JSTA,JEND - DO I=1,IM + DO I=ISTA,IEND P78483(I,J) = LOG(PINT(I,J,NINT(LMH(I,J)))*0.78483) P89671(I,J) = LOG(PINT(I,J,NINT(LMH(I,J)))*0.89671) ENDDO @@ -2284,7 +2252,7 @@ SUBROUTINE MISCLN !!$omp parallel do private(fac1,fac2,pkl1,pku1,t78483,t89671) DO L=2,LM DO J=JSTA,JEND - DO I=1,IM + DO I=ISTA,IEND PKL1=0.5*(ALPINT(I,J,L)+ALPINT(I,J,L+1)) PKU1=0.5*(ALPINT(I,J,L)+ALPINT(I,J,L-1)) ! IF(I==1 .AND. J==1)PRINT*,'L,P89671,PKL1,PKU1= ', & @@ -2308,7 +2276,7 @@ SUBROUTINE MISCLN ! print*,'done(1,1)= ',done(1,1) !$omp parallel do private(i,j,pl,tl,ql,qsat,rhl) DO J=JSTA,JEND - DO I=1,IM + DO I=ISTA,IEND IF(.NOT. DONE(I,J)) THEN PL = PINT(I,J,LM-1) TL = 0.5*(T(I,J,LM-2)+T(I,J,LM-1)) @@ -2378,7 +2346,7 @@ SUBROUTINE MISCLN GRID1=spval !$omp parallel do private(i,j) DO J=JSTA,JEND - DO I=1,IM + DO I=ISTA,IEND IF(T(I,J,LM) < spval) GRID1(I,J) = T89671(I,J) ! IF(T89671(I,J)>350.)PRINT*,'LARGE T89671 ', & ! I,J,T89671(I,J) @@ -2388,11 +2356,12 @@ SUBROUTINE MISCLN cfld=cfld+1 fld_info(cfld)%ifld=IAVBLFLD(IGET(097)) fld_info(cfld)%lvl=LVLSXML(1,IGET(097)) -!$omp parallel do private(i,j,jj) +!$omp parallel do private(i,j,ii,jj) do j=1,jend-jsta+1 jj = jsta+j-1 - do i=1,im - datapd(i,j,cfld) = GRID1(i,jj) + do i=1,iend-ista+1 + ii = ista+i-1 + datapd(i,j,cfld) = GRID1(ii,jj) enddo enddo endif @@ -2403,7 +2372,7 @@ SUBROUTINE MISCLN GRID1=spval !$omp parallel do private(i,j) DO J=JSTA,JEND - DO I=1,IM + DO I=ISTA,IEND IF(T(I,J,LM) < spval) GRID1(I,J) = T78483(I,J) ENDDO ENDDO @@ -2411,11 +2380,12 @@ SUBROUTINE MISCLN cfld=cfld+1 fld_info(cfld)%ifld=IAVBLFLD(IGET(098)) fld_info(cfld)%lvl=LVLSXML(1,IGET(098)) -!$omp parallel do private(i,j,jj) +!$omp parallel do private(i,j,ii,jj) do j=1,jend-jsta+1 jj = jsta+j-1 - do i=1,im - datapd(i,j,cfld) = GRID1(i,jj) + do i=1,iend-ista+1 + ii = ista+i-1 + datapd(i,j,cfld) = GRID1(ii,jj) enddo enddo endif @@ -2437,18 +2407,19 @@ SUBROUTINE MISCLN IF (IGET(091)>0) THEN !$omp parallel do private(i,j) DO J=JSTA,JEND - DO I=1,IM + DO I=ISTA,IEND GRID1(I,J) = PBND(I,J,1) ENDDO ENDDO if(grib=='grib2') then cfld=cfld+1 fld_info(cfld)%ifld=IAVBLFLD(IGET(091)) -!$omp parallel do private(i,j,jj) +!$omp parallel do private(i,j,ii,jj) do j=1,jend-jsta+1 jj = jsta+j-1 - do i=1,im - datapd(i,j,cfld) = GRID1(i,jj) + do i=1,iend-ista+1 + ii = ista+i-1 + datapd(i,j,cfld) = GRID1(ii,jj) enddo enddo endif @@ -2458,7 +2429,7 @@ SUBROUTINE MISCLN IF (IGET(092)>0) THEN !$omp parallel do private(i,j) DO J=JSTA,JEND - DO I=1,IM + DO I=ISTA,IEND GRID1(I,J) = TBND(I,J,1) ENDDO ENDDO @@ -2466,11 +2437,12 @@ SUBROUTINE MISCLN cfld=cfld+1 fld_info(cfld)%ifld=IAVBLFLD(IGET(092)) fld_info(cfld)%lvl=LVLSXML(1,IGET(092)) -!$omp parallel do private(i,j,jj) +!$omp parallel do private(i,j,ii,jj) do j=1,jend-jsta+1 jj = jsta+j-1 - do i=1,im - datapd(i,j,cfld) = GRID1(i,jj) + do i=1,iend-ista+1 + ii = ista+i-1 + datapd(i,j,cfld) = GRID1(ii,jj) enddo enddo endif @@ -2480,7 +2452,7 @@ SUBROUTINE MISCLN IF (IGET(093)>0) THEN !$omp parallel do private(i,j) DO J=JSTA,JEND - DO I=1,IM + DO I=ISTA,IEND GRID1(I,J) = QBND(I,J,1) ENDDO ENDDO @@ -2489,11 +2461,12 @@ SUBROUTINE MISCLN cfld=cfld+1 fld_info(cfld)%ifld=IAVBLFLD(IGET(093)) fld_info(cfld)%lvl=LVLSXML(1,IGET(093)) -!$omp parallel do private(i,j,jj) +!$omp parallel do private(i,j,ii,jj) do j=1,jend-jsta+1 jj = jsta+j-1 - do i=1,im - datapd(i,j,cfld) = GRID1(i,jj) + do i=1,iend-ista+1 + ii = ista+i-1 + datapd(i,j,cfld) = GRID1(ii,jj) enddo enddo endif @@ -2503,21 +2476,22 @@ SUBROUTINE MISCLN IF (IGET(094)>0) THEN !$omp parallel do private(i,j) DO J=JSTA,JEND - DO I=1,IM + DO I=ISTA,IEND GRID1(I,J) = RHBND(I,J,1) ENDDO ENDDO - CALL SCLFLD(GRID1,H100,IM,JM) + CALL SCLFLD(GRID1(ista:iend,jsta:jend),H100,IM,JM) CALL BOUND(GRID1,H1,H100) if(grib=='grib2') then cfld=cfld+1 fld_info(cfld)%ifld=IAVBLFLD(IGET(094)) fld_info(cfld)%lvl=LVLSXML(1,IGET(094)) -!$omp parallel do private(i,j,jj) +!$omp parallel do private(i,j,ii,jj) do j=1,jend-jsta+1 jj = jsta+j-1 - do i=1,im - datapd(i,j,cfld) = GRID1(i,jj) + do i=1,iend-ista+1 + ii = ista+i-1 + datapd(i,j,cfld) = GRID1(ii,jj) enddo enddo endif @@ -2527,7 +2501,7 @@ SUBROUTINE MISCLN IF ((IGET(095)>0).OR.(IGET(096)>0)) THEN !$omp parallel do private(i,j) DO J=JSTA,JEND - DO I=1,IM + DO I=ISTA,IEND GRID1(I,J) = UBND(I,J,1) GRID2(I,J) = VBND(I,J,1) ENDDO @@ -2537,11 +2511,12 @@ SUBROUTINE MISCLN cfld=cfld+1 fld_info(cfld)%ifld=IAVBLFLD(IGET(095)) fld_info(cfld)%lvl=LVLSXML(1,IGET(095)) -!$omp parallel do private(i,j,jj) +!$omp parallel do private(i,j,ii,jj) do j=1,jend-jsta+1 jj = jsta+j-1 - do i=1,im - datapd(i,j,cfld) = GRID1(i,jj) + do i=1,iend-ista+1 + ii = ista+i-1 + datapd(i,j,cfld) = GRID1(ii,jj) enddo enddo endif @@ -2551,11 +2526,12 @@ SUBROUTINE MISCLN cfld=cfld+1 fld_info(cfld)%ifld=IAVBLFLD(IGET(096)) fld_info(cfld)%lvl=LVLSXML(1,IGET(096)) -!$omp parallel do private(i,j,jj) +!$omp parallel do private(i,j,ii,jj) do j=1,jend-jsta+1 jj = jsta+j-1 - do i=1,im - datapd(i,j,cfld) = GRID2(i,jj) + do i=1,iend-ista+1 + ii = ista+i-1 + datapd(i,j,cfld) = GRID2(ii,jj) enddo enddo endif @@ -2581,29 +2557,30 @@ SUBROUTINE MISCLN ! IF ( (IGET(066)>0).OR.(IGET(081)>0).OR. & (IGET(082)>0).OR.(IGET(104)>0) ) THEN - allocate(RH3310(IM,jsta:jend),RH6610(IM,jsta:jend), & - RH3366(IM,jsta:jend),PW3310(IM,jsta:jend)) + allocate(RH3310(ista:iend,jsta:jend),RH6610(ista:iend,jsta:jend), & + RH3366(ista:iend,jsta:jend),PW3310(ista:iend,jsta:jend)) CALL LFMFLD(RH3310,RH6610,RH3366,PW3310) ! ! SIGMA 0.33-1.00 MEAN RELATIVE HUMIIDITY. IF (IGET(066)>0) THEN !$omp parallel do private(i,j) DO J=JSTA,JEND - DO I=1,IM + DO I=ISTA,IEND GRID1(I,J) = RH3310(I,J) ENDDO ENDDO - CALL SCLFLD(GRID1,H100,IM,JM) + CALL SCLFLD(GRID1(ista:iend,jsta:jend),H100,IM,JM) CALL BOUND(GRID1,H1,H100) if(grib=='grib2') then cfld=cfld+1 fld_info(cfld)%ifld=IAVBLFLD(IGET(066)) fld_info(cfld)%lvl=LVLSXML(1,IGET(066)) -!$omp parallel do private(i,j,jj) +!$omp parallel do private(i,j,ii,jj) do j=1,jend-jsta+1 jj = jsta+j-1 - do i=1,im - datapd(i,j,cfld) = GRID1(i,jj) + do i=1,iend-ista+1 + ii = ista+i-1 + datapd(i,j,cfld) = GRID1(ii,jj) enddo enddo ! print *,'in miscln,RH0.33-1.0,cfld=',cfld,'fld=', & @@ -2615,21 +2592,22 @@ SUBROUTINE MISCLN IF (IGET(081)>0) THEN !$omp parallel do private(i,j) DO J=JSTA,JEND - DO I=1,IM + DO I=ISTA,IEND GRID1(I,J) = RH6610(I,J) ENDDO ENDDO - CALL SCLFLD(GRID1,H100,IM,JM) + CALL SCLFLD(GRID1(ista:iend,jsta:jend),H100,IM,JM) CALL BOUND(GRID1,H1,H100) if(grib=='grib2') then cfld=cfld+1 fld_info(cfld)%ifld=IAVBLFLD(IGET(081)) fld_info(cfld)%lvl=LVLSXML(1,IGET(081)) -!$omp parallel do private(i,j,jj) +!$omp parallel do private(i,j,ii,jj) do j=1,jend-jsta+1 jj = jsta+j-1 - do i=1,im - datapd(i,j,cfld) = GRID1(i,jj) + do i=1,iend-ista+1 + ii = ista+i-1 + datapd(i,j,cfld) = GRID1(ii,jj) enddo enddo endif @@ -2639,21 +2617,22 @@ SUBROUTINE MISCLN IF (IGET(082)>0) THEN !$omp parallel do private(i,j) DO J=JSTA,JEND - DO I=1,IM + DO I=ISTA,IEND GRID1(I,J) = RH3366(I,J) ENDDO ENDDO - CALL SCLFLD(GRID1,H100,IM,JM) + CALL SCLFLD(GRID1(ista:iend,jsta:jend),H100,IM,JM) CALL BOUND(GRID1,H1,H100) if(grib=='grib2') then cfld=cfld+1 fld_info(cfld)%ifld=IAVBLFLD(IGET(082)) fld_info(cfld)%lvl=LVLSXML(1,IGET(082)) -!$omp parallel do private(i,j,jj) +!$omp parallel do private(i,j,ii,jj) do j=1,jend-jsta+1 jj = jsta+j-1 - do i=1,im - datapd(i,j,cfld) = GRID1(i,jj) + do i=1,iend-ista+1 + ii = ista+i-1 + datapd(i,j,cfld) = GRID1(ii,jj) enddo enddo endif @@ -2663,7 +2642,7 @@ SUBROUTINE MISCLN IF (IGET(104)>0) THEN !$omp parallel do private(i,j) DO J=JSTA,JEND - DO I=1,IM + DO I=ISTA,IEND GRID1(I,J) = PW3310(I,J) ENDDO ENDDO @@ -2672,11 +2651,12 @@ SUBROUTINE MISCLN cfld=cfld+1 fld_info(cfld)%ifld=IAVBLFLD(IGET(104)) fld_info(cfld)%lvl=LVLSXML(1,IGET(104)) -!$omp parallel do private(i,j,jj) +!$omp parallel do private(i,j,ii,jj) do j=1,jend-jsta+1 jj = jsta+j-1 - do i=1,im - datapd(i,j,cfld) = GRID1(i,jj) + do i=1,iend-ista+1 + ii = ista+i-1 + datapd(i,j,cfld) = GRID1(ii,jj) enddo enddo endif @@ -2689,9 +2669,9 @@ SUBROUTINE MISCLN IF ( (IGET(099)>0).OR.(IGET(100)>0).OR. & (IGET(101)>0).OR.(IGET(102)>0).OR. & (IGET(103)>0) ) THEN - allocate(RH4710(IM,jsta_2l:jend_2u),RH4796(IM,jsta_2l:jend_2u), & - RH1847(IM,jsta_2l:jend_2u)) - allocate(RH8498(IM,jsta_2l:jend_2u),QM8510(IM,jsta_2l:jend_2u)) + allocate(RH4710(ista_2l:iend_2u,jsta_2l:jend_2u),RH4796(ista_2l:iend_2u,jsta_2l:jend_2u), & + RH1847(ista_2l:iend_2u,jsta_2l:jend_2u)) + allocate(RH8498(ista_2l:iend_2u,jsta_2l:jend_2u),QM8510(ista_2l:iend_2u,jsta_2l:jend_2u)) CALL NGMFLD(RH4710,RH4796,RH1847,RH8498,QM8510) ! @@ -2699,21 +2679,22 @@ SUBROUTINE MISCLN IF (IGET(099)>0) THEN !$omp parallel do private(i,j) DO J=JSTA,JEND - DO I=1,IM + DO I=ISTA,IEND GRID1(I,J) = RH4710(I,J) ENDDO ENDDO - CALL SCLFLD(GRID1,H100,IM,JM) + CALL SCLFLD(GRID1(ista:iend,jsta:jend),H100,IM,JM) CALL BOUND(GRID1,H1,H100) if(grib=='grib2') then cfld=cfld+1 fld_info(cfld)%ifld=IAVBLFLD(IGET(099)) fld_info(cfld)%lvl=LVLSXML(1,IGET(099)) -!$omp parallel do private(i,j,jj) +!$omp parallel do private(i,j,ii,jj) do j=1,jend-jsta+1 jj = jsta+j-1 - do i=1,im - datapd(i,j,cfld) = GRID1(i,jj) + do i=1,iend-ista+1 + ii = ista+i-1 + datapd(i,j,cfld) = GRID1(ii,jj) enddo enddo endif @@ -2723,21 +2704,22 @@ SUBROUTINE MISCLN IF (IGET(100)>0) THEN !$omp parallel do private(i,j) DO J=JSTA,JEND - DO I=1,IM + DO I=ISTA,IEND GRID1(I,J) = RH4796(I,J) ENDDO ENDDO - CALL SCLFLD(GRID1,H100,IM,JM) + CALL SCLFLD(GRID1(ista:iend,jsta:jend),H100,IM,JM) CALL BOUND(GRID1,H1,H100) if(grib=='grib2') then cfld=cfld+1 fld_info(cfld)%ifld=IAVBLFLD(IGET(100)) fld_info(cfld)%lvl=LVLSXML(1,IGET(100)) -!$omp parallel do private(i,j,jj) +!$omp parallel do private(i,j,ii,jj) do j=1,jend-jsta+1 jj = jsta+j-1 - do i=1,im - datapd(i,j,cfld) = GRID1(i,jj) + do i=1,iend-ista+1 + ii = ista+i-1 + datapd(i,j,cfld) = GRID1(ii,jj) enddo enddo endif @@ -2747,21 +2729,22 @@ SUBROUTINE MISCLN IF (IGET(101)>0) THEN !$omp parallel do private(i,j) DO J=JSTA,JEND - DO I=1,IM + DO I=ISTA,IEND GRID1(I,J) = RH1847(I,J) ENDDO ENDDO - CALL SCLFLD(GRID1,H100,IM,JM) + CALL SCLFLD(GRID1(ista:iend,jsta:jend),H100,IM,JM) CALL BOUND(GRID1,H1,H100) if(grib=='grib2') then cfld=cfld+1 fld_info(cfld)%ifld=IAVBLFLD(IGET(101)) fld_info(cfld)%lvl=LVLSXML(1,IGET(101)) -!$omp parallel do private(i,j,jj) +!$omp parallel do private(i,j,ii,jj) do j=1,jend-jsta+1 jj = jsta+j-1 - do i=1,im - datapd(i,j,cfld) = GRID1(i,jj) + do i=1,iend-ista+1 + ii = ista+i-1 + datapd(i,j,cfld) = GRID1(ii,jj) enddo enddo endif @@ -2771,21 +2754,22 @@ SUBROUTINE MISCLN IF (IGET(102)>0) THEN !$omp parallel do private(i,j) DO J=JSTA,JEND - DO I=1,IM + DO I=ISTA,IEND GRID1(I,J) = RH8498(I,J) ENDDO ENDDO - CALL SCLFLD(GRID1,H100,IM,JM) + CALL SCLFLD(GRID1(ista:iend,jsta:jend),H100,IM,JM) CALL BOUND(GRID1,H1,H100) if(grib=='grib2') then cfld=cfld+1 fld_info(cfld)%ifld=IAVBLFLD(IGET(102)) fld_info(cfld)%lvl=LVLSXML(1,IGET(102)) -!$omp parallel do private(i,j,jj) +!$omp parallel do private(i,j,ii,jj) do j=1,jend-jsta+1 jj = jsta+j-1 - do i=1,im - datapd(i,j,cfld) = GRID1(i,jj) + do i=1,iend-ista+1 + ii = ista+i-1 + datapd(i,j,cfld) = GRID1(ii,jj) enddo enddo endif @@ -2793,11 +2777,11 @@ SUBROUTINE MISCLN ! ! SIGMA 0.85000-1.00000 MOISTURE CONVERGENCE. IF (IGET(103)>0) THEN + GRID1=spval ! CONVERT TO DIVERGENCE FOR GRIB - GRID1=spval !$omp parallel do private(i,j) DO J=JSTA,JEND - DO I=1,IM + DO I=ISTA,IEND IF(QM8510(I,J) < spval) GRID1(I,J) = -1.0*QM8510(I,J) ENDDO ENDDO @@ -2805,11 +2789,12 @@ SUBROUTINE MISCLN cfld=cfld+1 fld_info(cfld)%ifld=IAVBLFLD(IGET(103)) fld_info(cfld)%lvl=LVLSXML(1,IGET(103)) -!$omp parallel do private(i,j,jj) +!$omp parallel do private(i,j,ii,jj) do j=1,jend-jsta+1 jj = jsta+j-1 - do i=1,im - datapd(i,j,cfld) = GRID1(i,jj) + do i=1,iend-ista+1 + ii = ista+i-1 + datapd(i,j,cfld) = GRID1(ii,jj) enddo enddo endif @@ -2821,8 +2806,8 @@ SUBROUTINE MISCLN IF ( (IGET(318)>0).OR.(IGET(319)>0).OR. & (IGET(320)>0))THEN - allocate(RH4410(IM,jsta:jend),RH7294(IM,jsta:jend), & - RH4472(IM,jsta:jend),RH3310(IM,jsta:jend)) + allocate(RH4410(ista:iend,jsta:jend),RH7294(ista:iend,jsta:jend), & + RH4472(ista:iend,jsta:jend),RH3310(ista:iend,jsta:jend)) CALL LFMFLD_GFS(RH4410,RH7294,RH4472,RH3310) ! ! SIGMA 0.44-1.00 MEAN RELATIVE HUMIIDITY. @@ -2830,7 +2815,7 @@ SUBROUTINE MISCLN GRID1=spval !$omp parallel do private(i,j) DO J=JSTA,JEND - DO I=1,IM + DO I=ISTA,IEND IF(RH4410(I,J) < spval) GRID1(I,J) = RH4410(I,J)*100. ENDDO ENDDO @@ -2839,11 +2824,12 @@ SUBROUTINE MISCLN cfld=cfld+1 fld_info(cfld)%ifld=IAVBLFLD(IGET(318)) fld_info(cfld)%lvl=LVLSXML(1,IGET(318)) -!$omp parallel do private(i,j,jj) +!$omp parallel do private(i,j,ii,jj) do j=1,jend-jsta+1 jj = jsta+j-1 - do i=1,im - datapd(i,j,cfld) = GRID1(i,jj) + do i=1,iend-ista+1 + ii = ista+i-1 + datapd(i,j,cfld) = GRID1(ii,jj) enddo enddo endif @@ -2854,7 +2840,7 @@ SUBROUTINE MISCLN GRID1=spval !$omp parallel do private(i,j) DO J=JSTA,JEND - DO I=1,IM + DO I=ISTA,IEND IF(RH7294(I,J) < spval) GRID1(I,J) = RH7294(I,J)*100. ENDDO ENDDO @@ -2863,11 +2849,12 @@ SUBROUTINE MISCLN cfld=cfld+1 fld_info(cfld)%ifld=IAVBLFLD(IGET(319)) fld_info(cfld)%lvl=LVLSXML(1,IGET(319)) -!$omp parallel do private(i,j,jj) +!$omp parallel do private(i,j,ii,jj) do j=1,jend-jsta+1 jj = jsta+j-1 - do i=1,im - datapd(i,j,cfld) = GRID1(i,jj) + do i=1,iend-ista+1 + ii = ista+i-1 + datapd(i,j,cfld) = GRID1(ii,jj) enddo enddo endif @@ -2878,7 +2865,7 @@ SUBROUTINE MISCLN GRID1=spval !$omp parallel do private(i,j) DO J=JSTA,JEND - DO I=1,IM + DO I=ISTA,IEND IF(RH4472(I,J) < spval) GRID1(I,J)=RH4472(I,J)*100. ENDDO ENDDO @@ -2887,11 +2874,12 @@ SUBROUTINE MISCLN cfld=cfld+1 fld_info(cfld)%ifld=IAVBLFLD(IGET(320)) fld_info(cfld)%lvl=LVLSXML(1,IGET(320)) -!$omp parallel do private(i,j,jj) +!$omp parallel do private(i,j,ii,jj) do j=1,jend-jsta+1 jj = jsta+j-1 - do i=1,im - datapd(i,j,cfld) = GRID1(i,jj) + do i=1,iend-ista+1 + ii = ista+i-1 + datapd(i,j,cfld) = GRID1(ii,jj) enddo enddo endif @@ -2905,13 +2893,13 @@ SUBROUTINE MISCLN (IGET(325)>0).OR.(IGET(326)>0)) THEN !$omp parallel do private(i,j) DO J=JSTA,JEND - DO I=1,IM + DO I=ISTA,IEND EGRID2(I,J) = 0.995*PINT(I,J,LM+1) EGRID1(I,J) = LOG(PMID(I,J,LM)/EGRID2(I,J)) & / LOG(PMID(I,J,LM)/PMID(I,J,LM-1)) IF (MODELNAME == 'GFS' .OR. MODELNAME == 'FV3R') THEN - EGRID1(I,J) = LOG(PMID(I,J,LM)/EGRID2(I,J)) & + EGRID1(I,J) = LOG(PMID(I,J,LM)/EGRID2(I,J)) & / max(1.e-6,LOG(PMID(I,J,LM)/PMID(I,J,LM-1))) EGRID1(I,J) =max(-10.0,min(EGRID1(I,J), 10.0)) IF ( ABS(PMID(I,J,LM)-PMID(I,J,LM-1)) < 0.5 ) THEN @@ -2926,7 +2914,7 @@ SUBROUTINE MISCLN GRID1=spval !$omp parallel do private(i,j) DO J=JSTA,JEND - DO I=1,IM + DO I=ISTA,IEND IF(T(I,J,LM)0) THEN + IF (IGET(582)>0) THEN ! dong add missing value for cape GRID1=spval !$omp parallel do private(i,j) DO J=JSTA,JEND - DO I=1,IM - IF(T1D(I,J) < spval) THEN - GRID1(I,J) = EGRID1(I,J) - IF (SUBMODELNAME == 'RTMA') MLCAPE(I,J)=GRID1(I,J) - ENDIF + DO I=ISTA,IEND + IF(T1D(I,J) < spval) THEN + GRID1(I,J) = EGRID1(I,J) + IF (SUBMODELNAME == 'RTMA')MLCAPE(I,J)=GRID1(I,J) + ENDIF ENDDO ENDDO CALL BOUND(GRID1,D00,H99999) @@ -3138,11 +3128,12 @@ SUBROUTINE MISCLN cfld=cfld+1 fld_info(cfld)%ifld=IAVBLFLD(IGET(582)) fld_info(cfld)%lvl=LVLSXML(1,IGET(582)) -!$omp parallel do private(i,j,jj) +!$omp parallel do private(i,j,ii,jj) do j=1,jend-jsta+1 jj = jsta+j-1 - do i=1,im - datapd(i,j,cfld) = GRID1(i,jj) + do i=1,iend-ista+1 + ii = ista+i-1 + datapd(i,j,cfld) = GRID1(ii,jj) enddo enddo endif @@ -3152,7 +3143,7 @@ SUBROUTINE MISCLN GRID1=spval !$omp parallel do private(i,j) DO J=JSTA,JEND - DO I=1,IM + DO I=ISTA,IEND IF(T1D(I,J) < spval) GRID1(I,J) = - EGRID2(I,J) ENDDO ENDDO @@ -3161,11 +3152,11 @@ SUBROUTINE MISCLN ! !$omp parallel do private(i,j) DO J=JSTA,JEND - DO I=1,IM - IF(T1D(I,J) < spval) THEN - GRID1(I,J) = - GRID1(I,J) - IF (SUBMODELNAME == 'RTMA') MLCIN(I,J) = GRID1(I,J) - ENDIF + DO I=ISTA,IEND + IF(T1D(I,J) < spval) THEN + GRID1(I,J) = - GRID1(I,J) + IF (SUBMODELNAME == 'RTMA') MLCIN(I,J)=GRID1(I,J) + ENDIF ENDDO ENDDO ! @@ -3173,11 +3164,12 @@ SUBROUTINE MISCLN cfld=cfld+1 fld_info(cfld)%ifld=IAVBLFLD(IGET(583)) fld_info(cfld)%lvl=LVLSXML(1,IGET(583)) -!$omp parallel do private(i,j,jj) +!$omp parallel do private(i,j,ii,jj) do j=1,jend-jsta+1 jj = jsta+j-1 - do i=1,im - datapd(i,j,cfld) = GRID1(i,jj) + do i=1,iend-ista+1 + ii = ista+i-1 + datapd(i,j,cfld) = GRID1(ii,jj) enddo enddo endif @@ -3192,7 +3184,7 @@ SUBROUTINE MISCLN IF (IGET(109)>0) THEN GRID1=spval DO J=JSTA,JEND - DO I=1,IM + DO I=ISTA,IEND IF(T1D(I,J) < spval) GRID1(I,J)=EGRID2(I,J) IF (SUBMODELNAME == 'RTMA') MLLCL(I,J) = GRID1(I,J) ENDDO @@ -3206,7 +3198,7 @@ SUBROUTINE MISCLN ! ! IF (IGET(110)>0) THEN ! DO J=JSTA,JEND -! DO I=1,IM +! DO I=ISTA,IEND ! GRID1(I,J)=EGRID1(I,J) ! ENDDO ! ENDDO @@ -3238,12 +3230,13 @@ SUBROUTINE MISCLN FIELD2=.TRUE. ENDIF ! - IF(FIELD1.OR.FIELD2)THEN + IF(FIELD1.OR.FIELD2.OR.NEED_IFI)THEN ITYPE = 1 + call allocate_cape_arrays ! !$omp parallel do private(i,j) DO J=JSTA,JEND - DO I=1,IM + DO I=ISTA,IEND EGRID1(I,J) = -H99999 EGRID2(I,J) = -H99999 ENDDO @@ -3252,68 +3245,83 @@ SUBROUTINE MISCLN DPBND = 300.E2 CALL CALCAPE(ITYPE,DPBND,P1D,T1D,Q1D,LB2,EGRID1, & EGRID2,EGRID3,EGRID4,EGRID5) - IF (SUBMODELNAME == 'RTMA') MUMIXR(I,J) = Q1D(I,J) - IF (IGET(584)>0) THEN + IF (IGET(584)>0 .or. NEED_IFI) THEN ! dong add missing value to cin GRID1 = spval !$omp parallel do private(i,j) DO J=JSTA,JEND - DO I=1,IM - IF(T1D(I,J) < spval) THEN - GRID1(I,J) = EGRID1(I,J) - IF (SUBMODELNAME == 'RTMA') MUCAPE(I,J) = GRID1(I,J) - ENDIF + DO I=ISTA,IEND + IF(T1D(I,J) < spval) THEN + GRID1(I,J) = EGRID1(I,J) + IF (SUBMODELNAME == 'RTMA') MUCAPE(I,J)=GRID1(I,J) + ENDIF ENDDO ENDDO CALL BOUND(GRID1,D00,H99999) ! IF (SUBMODELNAME == 'RTMA') THEN ! CALL BOUND(MUCAPE,D00,H99999) ! ENDIF - if(grib=='grib2') then +!$omp parallel do private(i,j) + DO J=JSTA,JEND + DO I=ISTA,IEND + CAPE(I,J) = GRID1(I,J) + ENDDO + ENDDO + if(IGET(584)>0 .and. grib=='grib2') then cfld=cfld+1 fld_info(cfld)%ifld=IAVBLFLD(IGET(584)) fld_info(cfld)%lvl=LVLSXML(1,IGET(584)) -!$omp parallel do private(i,j,jj) +!$omp parallel do private(i,j,ii,jj) do j=1,jend-jsta+1 jj = jsta+j-1 - do i=1,im - datapd(i,j,cfld) = GRID1(i,jj) + do i=1,iend-ista+1 + ii = ista+i-1 + datapd(i,j,cfld) = GRID1(ii,jj) enddo enddo endif ENDIF - IF (IGET(585)>0) THEN + IF (IGET(585)>0 .or. NEED_IFI) THEN ! dong add missing value to cin GRID1 = spval !$omp parallel do private(i,j) DO J=JSTA,JEND - DO I=1,IM + DO I=ISTA,IEND IF(T1D(I,J) < spval) GRID1(I,J) = - EGRID2(I,J) ENDDO ENDDO CALL BOUND(GRID1,D00,H99999) DO J=JSTA,JEND - DO I=1,IM + DO I=ISTA,IEND IF(T1D(I,J) < spval) THEN GRID1(I,J) = - GRID1(I,J) - IF (SUBMODELNAME == 'RTMA') THEN + IF (SUBMODELNAME == 'RTMA')THEN MUCAPE(I,J) = GRID1(I,J) MUQ1D(I,J) = Q1D(I,J) ENDIF ENDIF ENDDO ENDDO - if(grib=='grib2') then + +!$omp parallel do private(i,j) + DO J=JSTA,JEND + DO I=ISTA,IEND + CIN(I,J) = GRID1(I,J) + ENDDO + ENDDO + + if(IGET(585)>0 .and. grib=='grib2') then cfld=cfld+1 fld_info(cfld)%ifld=IAVBLFLD(IGET(585)) fld_info(cfld)%lvl=LVLSXML(1,IGET(585)) -!$omp parallel do private(i,j,jj) +!$omp parallel do private(i,j,ii,jj) do j=1,jend-jsta+1 jj = jsta+j-1 - do i=1,im - datapd(i,j,cfld) = GRID1(i,jj) + do i=1,iend-ista+1 + ii = ista+i-1 + datapd(i,j,cfld) = GRID1(ii,jj) enddo enddo endif @@ -3325,7 +3333,7 @@ SUBROUTINE MISCLN GRID1 = spval !$omp parallel do private(i,j) DO J=JSTA,JEND - DO I=1,IM + DO I=ISTA,IEND IF(T1D(I,J) < spval) GRID1(I,J) = EGRID4(I,J) ENDDO ENDDO @@ -3333,20 +3341,20 @@ SUBROUTINE MISCLN cfld=cfld+1 fld_info(cfld)%ifld=IAVBLFLD(IGET(443)) fld_info(cfld)%lvl=LVLSXML(1,IGET(443)) -!$omp parallel do private(i,j,jj) +!$omp parallel do private(i,j,ii,jj) do j=1,jend-jsta+1 jj = jsta+j-1 - do i=1,im - datapd(i,j,cfld) = GRID1(i,jj) + do i=1,iend-ista+1 + ii = ista+i-1 + datapd(i,j,cfld) = GRID1(ii,jj) enddo enddo endif ENDIF - !Equilibrium Temperature IF (IGET(982)>0) THEN DO J=JSTA,JEND - DO I=1,IM + DO I=ISTA,IEND GRID1(I,J) = TEQL(I,J) ENDDO ENDDO @@ -3354,11 +3362,12 @@ SUBROUTINE MISCLN cfld=cfld+1 fld_info(cfld)%ifld=IAVBLFLD(IGET(982)) fld_info(cfld)%lvl=LVLSXML(1,IGET(982)) -!$omp parallel do private(i,j,jj) +!$omp parallel do private(i,j,ii,jj) do j=1,jend-jsta+1 jj = jsta+j-1 - do i=1,im - datapd(i,j,cfld) = GRID1(i,jj) + do i=1,iend-ista+1 + ii = ista+i-1 + datapd(i,j,cfld) = GRID1(ii,jj) enddo enddo endif @@ -3371,7 +3380,7 @@ SUBROUTINE MISCLN GRID1 = spval !$omp parallel do private(i,j) DO J=JSTA,JEND - DO I=1,IM + DO I=ISTA,IEND IF(T1D(I,J) < spval) GRID1(I,J) = EGRID3(I,J) ENDDO ENDDO @@ -3382,11 +3391,12 @@ SUBROUTINE MISCLN cfld=cfld+1 fld_info(cfld)%ifld=IAVBLFLD(IGET(246)) fld_info(cfld)%lvl=LVLSXML(1,IGET(246)) -!$omp parallel do private(i,j,jj) +!$omp parallel do private(i,j,ii,jj) do j=1,jend-jsta+1 jj = jsta+j-1 - do i=1,im - datapd(i,j,cfld) = GRID1(i,jj) + do i=1,iend-ista+1 + ii = ista+i-1 + datapd(i,j,cfld) = GRID1(ii,jj) enddo enddo endif @@ -3394,10 +3404,10 @@ SUBROUTINE MISCLN ! GENERAL THUNDER PARAMETER ??? 458 ??? IF (IGET(444)>0) THEN - GRID1 = spval + GRID1 = spval !$omp parallel do private(i,j) DO J=JSTA,JEND - DO I=1,IM + DO I=ISTA,IEND IF(CPRATE(I,J) < spval) THEN IF (CPRATE(I,J) > PTHRESH) THEN GRID1(I,J) = EGRID5(I,J) @@ -3412,21 +3422,133 @@ SUBROUTINE MISCLN cfld=cfld+1 fld_info(cfld)%ifld=IAVBLFLD(IGET(444)) fld_info(cfld)%lvl=LVLSXML(1,IGET(444)) -!$omp parallel do private(i,j,jj) +!$omp parallel do private(i,j,ii,jj) do j=1,jend-jsta+1 jj = jsta+j-1 - do i=1,im - datapd(i,j,cfld) = GRID1(i,jj) + do i=1,iend-ista+1 + ii = ista+i-1 + datapd(i,j,cfld) = GRID1(ii,jj) enddo enddo endif ENDIF ENDIF + + + IF (SUBMODELNAME == 'RTMA')THEN + +! +! --- Effective (inflow) Layer (EL) +! + + ALLOCATE(EL_BASE(ISTA_2L:IEND_2U,JSTA_2L:JEND_2U)) + ALLOCATE(EL_TOPS(ISTA_2L:IEND_2U,JSTA_2L:JEND_2U)) + ALLOCATE(FOUND_BASE(ISTA_2L:IEND_2U,JSTA_2L:JEND_2U)) + ALLOCATE(FOUND_TOPS(ISTA_2L:IEND_2U,JSTA_2L:JEND_2U)) +!$omp parallel do private(i,j) + DO J=JSTA,JEND + DO I=ISTA,IEND + EL_BASE(I,J) = LM + EL_TOPS(I,J) = LM + FOUND_BASE(I,J) = .FALSE. + FOUND_TOPS(I,J) = .FALSE. + ENDDO + ENDDO + +! + + ITYPE = 2 + DPBND = 0. + + DO L = LM, 1, -1 + +! SET AIR PARCELS FOR LEVEL L +!$omp parallel do private(i,j) + DO J=JSTA,JEND + DO I=ISTA,IEND + EGRID1(I,J) = -H99999 + EGRID2(I,J) = -H99999 + IDUMMY(I,J) = 0 + P1D(I,J) = PMID(I,J,L) + T1D(I,J) = T(I,J,L) + Q1D(I,J) = Q(I,J,L) + ENDDO + ENDDO + +!--- CALCULATE CAPE/CIN FOR ALL AIR PARCELS on LEVEL L + IF (debugprint) WRITE(1000+ME,'(A,I3)') & + ' CALCULATING CAPE/CINS ON LEVEL:',L + CALL CALCAPE(ITYPE,DPBND,P1D,T1D,Q1D,IDUMMY,EGRID1, & + EGRID2,EGRID3,EGRID4,EGRID5) + +!--- CHECK CAPE/CIN OF EACH AIR PARCELS WITH EL CRITERIA +!$omp parallel do private(i,j) + DO J=JSTA,JEND + DO I=ISTA,IEND + IF ( .NOT. FOUND_BASE(I,J) ) THEN + IF ( EGRID1(I,J) >= 100. .AND. EGRID2(I,J) >= -250. ) THEN + EL_BASE(I,J) = L + FOUND_BASE(I,J) = .TRUE. + ELSE + EL_BASE(I,J) = LM + FOUND_BASE(I,J) = .FALSE. + END IF + ELSE + IF ( .NOT. FOUND_TOPS(I,J) ) THEN + IF ( EGRID1(I,J) < 100. .OR. EGRID2(I,J) < -250. ) THEN + EL_TOPS(I,J) = L + 1 + FOUND_TOPS(I,J) = .TRUE. + ELSE + EL_TOPS(I,J) = LM + FOUND_TOPS(I,J) = .FALSE. + END IF + END IF + END IF + ENDDO + ENDDO + + END DO ! L + + + IF (ALLOCATED(FOUND_BASE)) DEALLOCATE(FOUND_BASE) + IF (ALLOCATED(FOUND_TOPS)) DEALLOCATE(FOUND_TOPS) + + IF (debugprint) THEN + WRITE(IM_CH,'(I5.5)') IM + WRITE(JSTA_CH,'(I5.5)') JSTA + WRITE(JEND_CH,'(I5.5)') JEND + EFFL_FNAME="EFFL_NEW_"//IM_CH//"_"//JSTA_CH//"_"//JEND_CH & + //".dat" + EFFL_FNAME2="EFFL_NEW_LVLS_"//IM_CH//"_"//JSTA_CH//"_"//JEND_CH & + //".dat" + IUNIT=10000+JSTA + IUNIT2=20000+JSTA + IREC=0 + IREC2=0 + OPEN(IUNIT,FILE=TRIM(ADJUSTL(EFFL_FNAME)),FORM='FORMATTED') + + + DO J=JSTA,JEND + DO I=ISTA,IEND + IREC = IREC + 1 + IREC2 = IREC2 + 1 + WRITE(IUNIT,'(1x,I6,2x,I6,2(2x,I6,2x,F12.3))') I, J, & + EL_BASE(I,J),PMID(I,J,EL_BASE(I,J)), & + EL_TOPS(I,J),PMID(I,J,EL_TOPS(I,J)) + END DO + ENDDO + CLOSE(IUNIT) + ENDIF + + IF(ALLOCATED(TPAR_BASE)) DEALLOCATE(TPAR_BASE) + IF(ALLOCATED(TPAR_TOPS)) DEALLOCATE(TPAR_TOPS) + + ENDIF ! ! EXPAND HRRR CAPE/CIN RELATED VARIABLES ! ! CAPE AND CINS 0-3KM, FOLLOW ML PROCEDURE WITH HEIGHT 0-3KM - +! FIELD1=.FALSE. FIELD2=.FALSE. ! @@ -3443,13 +3565,23 @@ SUBROUTINE MISCLN IF(IGET(951)>0)THEN FIELD2=.TRUE. ENDIF + IF(MODELNAME == "FV3R" .and. SUBMODELNAME == "RTMA") THEN + FIELD1=.TRUE. + FIELD2=.TRUE. + ENDIF ! +! IF(FIELD1)ITYPE=2 +! IF(FIELD2)ITYPE=2 + IF(FIELD1.OR.FIELD2)THEN ITYPE = 2 + + call allocate_cape_arrays + ! !$omp parallel do private(i,j) DO J=JSTA,JEND - DO I=1,IM + DO I=ISTA,IEND EGRID1(I,J) = -H99999 EGRID2(I,J) = -H99999 EGRID3(I,J) = -H99999 @@ -3461,7 +3593,7 @@ SUBROUTINE MISCLN ! ENDDO ! ENDDO ! DO J=JSTA,JEND -! DO I=1,IM +! DO I=ISTA,IEND LB2(I,J) = (LVLBND(I,J,1) + LVLBND(I,J,2) + & LVLBND(I,J,3))/3 P1D(I,J) = (PBND(I,J,1) + PBND(I,J,2) + PBND(I,J,3))/3 @@ -3469,12 +3601,12 @@ SUBROUTINE MISCLN Q1D(I,J) = (QBND(I,J,1) + QBND(I,J,2) + QBND(I,J,3))/3 ENDDO ENDDO -! + DPBND = 0. CALL CALCAPE2(ITYPE,DPBND,P1D,T1D,Q1D,LB2, & EGRID1,EGRID2,EGRID3,EGRID4,EGRID5, & EGRID6,EGRID7,EGRID8) -! + ! CAPE1, CINS2, LFC3, ESRHL4,ESRHH5, ! DCAPE6,DGLD7, ESP8) ! @@ -3483,7 +3615,7 @@ SUBROUTINE MISCLN GRID1=spval !$omp parallel do private(i,j) DO J=JSTA,JEND - DO I=1,IM + DO I=ISTA,IEND IF(T1D(I,J) < spval) GRID1(I,J) = EGRID1(I,J) ENDDO ENDDO @@ -3492,11 +3624,12 @@ SUBROUTINE MISCLN cfld=cfld+1 fld_info(cfld)%ifld=IAVBLFLD(IGET(950)) fld_info(cfld)%lvl=LVLSXML(1,IGET(950)) -!$omp parallel do private(i,j,jj) +!$omp parallel do private(i,j,ii,jj) do j=1,jend-jsta+1 jj = jsta+j-1 - do i=1,im - datapd(i,j,cfld) = GRID1(i,jj) + do i=1,iend-ista+1 + ii = ista+i-1 + datapd(i,j,cfld) = GRID1(ii,jj) enddo enddo endif @@ -3507,7 +3640,7 @@ SUBROUTINE MISCLN GRID1=spval !$omp parallel do private(i,j) DO J=JSTA,JEND - DO I=1,IM + DO I=ISTA,IEND IF(T1D(I,J) < spval) GRID1(I,J) = - EGRID2(I,J) ENDDO ENDDO @@ -3516,7 +3649,7 @@ SUBROUTINE MISCLN ! !$omp parallel do private(i,j) DO J=JSTA,JEND - DO I=1,IM + DO I=ISTA,IEND IF(T1D(I,J) < spval) GRID1(I,J) = - GRID1(I,J) ENDDO ENDDO @@ -3525,11 +3658,12 @@ SUBROUTINE MISCLN cfld=cfld+1 fld_info(cfld)%ifld=IAVBLFLD(IGET(951)) fld_info(cfld)%lvl=LVLSXML(1,IGET(951)) -!$omp parallel do private(i,j,jj) +!$omp parallel do private(i,j,ii,jj) do j=1,jend-jsta+1 jj = jsta+j-1 - do i=1,im - datapd(i,j,cfld) = GRID1(i,jj) + do i=1,iend-ista+1 + ii = ista+i-1 + datapd(i,j,cfld) = GRID1(ii,jj) enddo enddo endif @@ -3538,10 +3672,10 @@ SUBROUTINE MISCLN ! LFC HEIGHT IF (IGET(952)>0) THEN - GRID1=spval + GRID1=spval !$omp parallel do private(i,j) DO J=JSTA,JEND - DO I=1,IM + DO I=ISTA,IEND IF(T1D(I,J) < spval) GRID1(I,J) = EGRID3(I,J) ENDDO ENDDO @@ -3550,22 +3684,24 @@ SUBROUTINE MISCLN cfld=cfld+1 fld_info(cfld)%ifld=IAVBLFLD(IGET(952)) fld_info(cfld)%lvl=LVLSXML(1,IGET(952)) -!$omp parallel do private(i,j,jj) +!$omp parallel do private(i,j,ii,jj) do j=1,jend-jsta+1 jj = jsta+j-1 - do i=1,im - datapd(i,j,cfld) = GRID1(i,jj) + do i=1,iend-ista+1 + ii = ista+i-1 + datapd(i,j,cfld) = GRID1(ii,jj) enddo enddo endif ENDIF !952 + ! EFFECTIVE STORM RELATIVE HELICITY AND STORM MOTION. - allocate(UST(IM,jsta_2l:jend_2u),VST(IM,jsta_2l:jend_2u), & - HELI(IM,jsta_2l:jend_2u,2)) - allocate(LLOW(IM,jsta_2l:jend_2u),LUPP(IM,jsta_2l:jend_2u), & - CANGLE(IM,jsta_2l:jend_2u)) + allocate(UST(ista_2l:iend_2u,jsta_2l:jend_2u),VST(ista_2l:iend_2u,jsta_2l:jend_2u), & + HELI(ista_2l:iend_2u,jsta_2l:jend_2u,2)) + allocate(LLOW(ista_2l:iend_2u,jsta_2l:jend_2u),LUPP(ista_2l:iend_2u,jsta_2l:jend_2u), & + CANGLE(ista_2l:iend_2u,jsta_2l:jend_2u)) iget1 = IGET(953) iget2 = -1 @@ -3578,13 +3714,47 @@ SUBROUTINE MISCLN IF (iget1 > 0 .OR. IGET(162) > 0 .OR. IGET(953) > 0) THEN DEPTH(1) = 3000.0 DEPTH(2) = 1000.0 + IF (SUBMODELNAME == 'RTMA') THEN +!--- IF USSING EL BASE & TOP COMPUTED BY NEW SCHEME FOR THE +!RELATED VARIABLES !$omp parallel do private(i,j) - DO J=JSTA,JEND - DO I=1,IM - LLOW(I,J) = INT(EGRID4(I,J)) - LUPP(I,J) = INT(EGRID5(I,J)) + DO J=JSTA,JEND + DO I=ISTA,IEND + LLOW(I,J) = EL_BASE(I,J) + LUPP(I,J) = EL_TOPS(I,J) + ENDDO ENDDO - ENDDO + ELSE +!$omp parallel do private(i,j) + DO J=JSTA,JEND + DO I=ISTA,IEND + LLOW(I,J) = INT(EGRID4(I,J)) + LUPP(I,J) = INT(EGRID5(I,J)) + ENDDO + ENDDO + ENDIF +!--- OUTPUT EL BASE & TOP COMPUTED BY OLD SCHEME + IF (debugprint) THEN + WRITE(IM_CH,'(I5.5)') IM + WRITE(JSTA_CH,'(I5.5)') JSTA + WRITE(JEND_CH,'(I5.5)') JEND + EFFL_FNAME="EFFL_OLD_"//IM_CH//"_"//JSTA_CH//"_"//JEND_CH & + //".dat" + IUNIT=10000+JSTA + IREC=0 + OPEN(IUNIT,FILE=TRIM(ADJUSTL(EFFL_FNAME)),FORM='FORMATTED') + DO J=JSTA,JEND + DO I=ISTA,IEND + IREC = IREC + 1 +! WRITE(IUNIT,'(1x,I6,2x,I6,2x,I6,2x,I6)')I,J,LLOW(I,J),LUPP(I,J) + WRITE(IUNIT,'(1x,I6,2x,I6,2(2x,I6,2x,F12.3))') I, J, & + LLOW(I,J),PMID(I,J,LLOW(I,J)), & + LUPP(I,J),PMID(I,J,LUPP(I,J)) + END DO + ENDDO + CLOSE(IUNIT) + ENDIF + ! CALL CALHEL(DEPTH,UST,VST,HELI,USHR1,VSHR1,USHR6,VSHR6) CALL CALHEL2(LLOW,LUPP,DEPTH,UST,VST,HELI,CANGLE) @@ -3592,7 +3762,7 @@ SUBROUTINE MISCLN IF (iget2 > 0) then !$omp parallel do private(i,j) DO J=JSTA,JEND - DO I=1,IM + DO I=ISTA,IEND GRID1(I,J) = HELI(I,J,1) ! GRID1(I,J) = HELI(I,J,2) ENDDO @@ -3601,11 +3771,12 @@ SUBROUTINE MISCLN cfld=cfld+1 fld_info(cfld)%ifld=IAVBLFLD(iget1) fld_info(cfld)%lvl=LVLSXML(1,iget1) -!$omp parallel do private(i,j,jj) +!$omp parallel do private(i,j,ii,jj) do j=1,jend-jsta+1 jj = jsta+j-1 - do i=1,im - datapd(i,j,cfld) = GRID1(i,jj) + do i=1,iend-ista+1 + ii = ista+i-1 + datapd(i,j,cfld) = GRID1(ii,jj) enddo enddo endif @@ -3613,15 +3784,50 @@ SUBROUTINE MISCLN ENDIF !953 + IF (SUBMODELNAME == 'RTMA') THEN !Start RTMA block !EL field allocation - allocate(ESHR(IM,jsta_2l:jend_2u),UVECT(IM,jsta_2l:jend_2u),& - VVECT(IM,jsta_2l:jend_2u),HTSFC(IM,jsta_2l:jend_2u)) - allocate(EFFUST(IM,jsta_2l:jend_2u),EFFVST(IM,jsta_2l:jend_2u),& - ESRH(IM,jsta_2l:jend_2u)) + allocate(ESHR(ista_2l:iend_2u,jsta_2l:jend_2u),UVECT(ista_2l:iend_2u,jsta_2l:jend_2u),& + VVECT(ista_2l:iend_2u,jsta_2l:jend_2u),HTSFC(ista_2l:iend_2u,jsta_2l:jend_2u)) + allocate(EFFUST(ista_2l:iend_2u,jsta_2l:jend_2u),EFFVST(ista_2l:iend_2u,jsta_2l:jend_2u),& + ESRH(ista_2l:iend_2u,jsta_2l:jend_2u)) +! + DO J=JSTA,JEND + DO I=ISTA,IEND + MAXTHE(I,J)=-H99999 + THE(I,J)=-H99999 + MAXTHEPOS(I,J)=0 + MUQ1D(I,J) = 0. + ENDDO + ENDDO + DO L=LM,1,-1 + + DO J=JSTA,JEND + DO I=ISTA,IEND + EGRID1(I,J) = -H99999 + P1D(I,J)=PMID(I,J,L) + T1D(I,J)=T(I,J,L) + Q1D(I,J)=Q(I,J,L) + ENDDO + ENDDO + CALL CALTHTE(P1D,T1D,Q1D,EGRID1) + DO J=JSTA,JEND + DO I=ISTA,IEND + THE(I,J)=EGRID1(I,J) + IF(THE(I,J)>=MAXTHE(I,J))THEN + MAXTHE(I,J)=THE(I,J) + MAXTHEPOS(I,J)=L + MUQ1D(I,J) = Q(I,J,L) ! save the Q of air parcel with max theta-e (MU Parcel) + ENDIF + ENDDO + ENDDO + + ENDDO + +! !get surface height IF(gridtype == 'E')THEN JVN = 1 @@ -3630,8 +3836,8 @@ SUBROUTINE MISCLN IVE(J) = MOD(J,2) IVW(J) = IVE(J)-1 enddo - ISTART = 2 - ISTOP = IM-1 + ISTART = ISTA_M + ISTOP = IEND_M JSTART = JSTA_M JSTOP = JEND_M ELSE IF(gridtype == 'B')THEN @@ -3641,8 +3847,8 @@ SUBROUTINE MISCLN IVE(J)=1 IVW(J)=0 enddo - ISTART = 2 - ISTOP = IM-1 + ISTART = ISTA_M + ISTOP = IEND_M JSTART = JSTA_M JSTOP = JEND_M ELSE @@ -3652,13 +3858,13 @@ SUBROUTINE MISCLN IVE(J) = 0 IVW(J) = 0 enddo - ISTART = 1 - ISTOP = IM + ISTART = ISTA + ISTOP = IEND JSTART = JSTA JSTOP = JEND END IF - IF(gridtype /= 'A') CALL EXCH(FIS(1:IM,JSTA:JEND)) + IF(gridtype /= 'A') CALL EXCH(FIS(ISTA_2L:IEND_2U,JSTA_2L:JEND_2U)) DO J=JSTART,JSTOP DO I=ISTART,ISTOP IE = I+IVE(J) @@ -3677,7 +3883,7 @@ SUBROUTINE MISCLN IF (IGET(979)>0) THEN GRID1=spval DO J=JSTA,JEND - DO I=1,IM + DO I=ISTA,IEND IF(ZINT(I,J,LLOW(I,J))0) THEN GRID1=spval DO J=JSTA,JEND - DO I=1,IM + DO I=ISTA,IEND IF(ZINT(I,J,LUPP(I,J))0) THEN GRID1=spval DO J=JSTA,JEND - DO I=1,IM - IF(LLOW(I,J)0) THEN GRID1=spval DO J=JSTA,JEND - DO I=1,IM + DO I=ISTA,IEND IF(LLOW(I,J)0) THEN GRID1=spval DO J=JSTA,JEND - DO I=1,IM + DO I=ISTA,IEND IF(UVECT(I,J)0) THEN GRID1=spval DO J=JSTA,JEND - DO I=1,IM + DO I=ISTA,IEND IF(LLOW(I,J)0) THEN GRID1=spval DO J=JSTA,JEND - DO I=1,IM + DO I=ISTA,IEND IF(LLOW(I,J)0) THEN GRID1=spval DO J=JSTA,JEND - DO I=1,IM + DO I=ISTA,IEND IF(LLOW(I,J)0) THEN DO J=JSTA,JEND - DO I=1,IM + DO I=ISTA,IEND IF (MLLCL(I,J)>D2000) THEN MLLCLtmp=D00 ELSEIF (MLLCL(I,J)0) THEN GRID1(I,J)=STP @@ -3922,11 +4135,12 @@ SUBROUTINE MISCLN cfld=cfld+1 fld_info(cfld)%ifld=IAVBLFLD(IGET(989)) fld_info(cfld)%lvl=LVLSXML(1,IGET(989)) -! $omp parallel do private(i,j,jj) +! $omp parallel do private(i,j,ii,jj) do j=1,jend-jsta+1 jj = jsta+j-1 - do i=1,im - datapd(i,j,cfld) = GRID1(i,jj) + do i=1,iend-ista+1 + ii = ista+i-1 + datapd(i,j,cfld) = GRID1(ii,jj) enddo enddo endif @@ -3934,8 +4148,8 @@ SUBROUTINE MISCLN !Fixed Layer Tornado Parameter IF (IGET(990)>0) THEN - DO J=JSTA,JEND - DO I=1,IM + DO J=JSTA,JEND + DO I=ISTA,IEND LLMH = NINT(LMH(I,J)) P1D(I,J) = PMID(I,J,LLMH) T1D(I,J) = T(I,J,LLMH) @@ -3944,7 +4158,7 @@ SUBROUTINE MISCLN ENDDO CALL CALLCL(P1D,T1D,Q1D,EGRID1,EGRID2) DO J=JSTA,JEND - DO I=1,IM + DO I=ISTA,IEND SLCL(I,J)=EGRID2(I,J) ENDDO ENDDO @@ -3957,7 +4171,7 @@ SUBROUTINE MISCLN EGRID3,dummy,dummy) DO J=JSTA,JEND - DO I=1,IM + DO I=ISTA,IEND IF (SLCL(I,J)>D2000) THEN SLCLtmp=D00 ELSEIF (SLCL(I,J)<=D1000) THEN @@ -3995,11 +4209,12 @@ SUBROUTINE MISCLN cfld=cfld+1 fld_info(cfld)%ifld=IAVBLFLD(IGET(990)) fld_info(cfld)%lvl=LVLSXML(1,IGET(990)) -! $omp parallel do private(i,j,jj) +! $omp parallel do private(i,j,ii,jj) do j=1,jend-jsta+1 jj = jsta+j-1 - do i=1,im - datapd(i,j,cfld) = GRID1(i,jj) + do i=1,iend-ista+1 + ii = ista+i-1 + datapd(i,j,cfld) = GRID1(ii,jj) enddo enddo endif @@ -4008,7 +4223,7 @@ SUBROUTINE MISCLN !Effective Layer Supercell Parameter IF (IGET(991)>0) THEN DO J=JSTA,JEND - DO I=1,IM + DO I=ISTA,IEND IF (ESHR(I,J)<10.) THEN ESHRtmp=D00 ELSEIF (ESHR(I,J)>20.0) THEN @@ -4037,11 +4252,12 @@ SUBROUTINE MISCLN cfld=cfld+1 fld_info(cfld)%ifld=IAVBLFLD(IGET(991)) fld_info(cfld)%lvl=LVLSXML(1,IGET(991)) -! $omp parallel do private(i,j,jj) +! $omp parallel do private(i,j,ii,jj) do j=1,jend-jsta+1 jj = jsta+j-1 - do i=1,im - datapd(i,j,cfld) = GRID1(i,jj) + do i=1,iend-ista+1 + ii = ista+i-1 + datapd(i,j,cfld) = GRID1(ii,jj) enddo enddo endif @@ -4052,7 +4268,7 @@ SUBROUTINE MISCLN IF (IGET(992)>0) THEN !$omp parallel do private(i,j) DO J=JSTA,JEND - DO I=1,IM + DO I=ISTA,IEND EGRID1(I,J) = -H99999 EGRID2(I,J) = -H99999 EGRID3(I,J) = -H99999 @@ -4077,9 +4293,10 @@ SUBROUTINE MISCLN CALL CALCAPE2(ITYPE,DPBND,P1D,T1D,Q1D,LB2, & EGRID1,EGRID2,EGRID3,EGRID4,EGRID5, & EGRID6,EGRID7,EGRID8) + GRID1=spval DO J=JSTA,JEND - DO I=1,IM + DO I=ISTA,IEND IF(T1D(I,J) < spval) GRID1(I,J) = EGRID3(I,J) ENDDO ENDDO @@ -4088,11 +4305,12 @@ SUBROUTINE MISCLN cfld=cfld+1 fld_info(cfld)%ifld=IAVBLFLD(IGET(992)) fld_info(cfld)%lvl=LVLSXML(1,IGET(992)) -!$omp parallel do private(i,j,jj) +!$omp parallel do private(i,j,ii,jj) do j=1,jend-jsta+1 jj = jsta+j-1 - do i=1,im - datapd(i,j,cfld) = GRID1(i,jj) + do i=1,iend-ista+1 + ii = ista+i-1 + datapd(i,j,cfld) = GRID1(ii,jj) enddo enddo endif @@ -4103,7 +4321,7 @@ SUBROUTINE MISCLN !$omp parallel do private(i,j) ! EGRID3 is Virtual LFC DO J=JSTA,JEND - DO I=1,IM + DO I=ISTA,IEND GRID1(I,J) = Q1D(I,J) ENDDO ENDDO @@ -4111,11 +4329,12 @@ SUBROUTINE MISCLN cfld=cfld+1 fld_info(cfld)%ifld=IAVBLFLD(IGET(763)) fld_info(cfld)%lvl=LVLSXML(1,IGET(763)) -!$omp parallel do private(i,j,jj) +!$omp parallel do private(i,j,ii,jj) do j=1,jend-jsta+1 jj = jsta+j-1 - do i=1,im - datapd(i,j,cfld) = GRID1(i,jj) + do i=1,iend-ista+1 + ii = ista+i-1 + datapd(i,j,cfld) = GRID1(ii,jj) enddo enddo endif @@ -4125,10 +4344,7 @@ SUBROUTINE MISCLN IF (IGET(993)>0) THEN GRID1=spval DO J=JSTA,JEND - DO I=1,IM - IF(T700(I,J) < spval .and. T500(I,J) < spval .and.& - Z700(I,J) < spval .and. Z500(I,J) < spval .and.& - MUCAPE(I,J) < spval .and. MUQ1D(I,J) < spval .and. FSHR(I,J) < spval) THEN + DO I=ISTA,IEND LAPSE=-((T700(I,J)-T500(I,J))/((Z700(I,J)-Z500(I,J)))) SHIP=(MUCAPE(I,J)*D1000*MUQ1D(I,J)*LAPSE*(T500(I,J)-K2C)*FSHR(I,J))/HCONST IF (MUCAPE(I,J)<1300.)THEN @@ -4141,18 +4357,18 @@ SUBROUTINE MISCLN SHIP=SHIP*(FREEZELVL(I,J)/2400.) ENDIF GRID1(I,J)=SHIP - ENDIF ENDDO ENDDO if(grib=='grib2') then cfld=cfld+1 fld_info(cfld)%ifld=IAVBLFLD(IGET(993)) fld_info(cfld)%lvl=LVLSXML(1,IGET(993)) -! $omp parallel do private(i,j,jj) +! $omp parallel do private(i,j,ii,jj) do j=1,jend-jsta+1 jj = jsta+j-1 - do i=1,im - datapd(i,j,cfld) = GRID1(i,jj) + do i=1,iend-ista+1 + ii = ista+i-1 + datapd(i,j,cfld) = GRID1(ii,jj) enddo enddo endif @@ -4167,8 +4383,8 @@ SUBROUTINE MISCLN GRID1=spval !$omp parallel do private(i,j) DO J=JSTA,JEND - DO I=1,IM - IF(T1D(I,J) < spval ) GRID1(I,J) = CANGLE(I,J) + DO I=ISTA,IEND + IF(T1D(I,J) < spval ) GRID1(I,J) = CANGLE(I,J) ! IF(EGRID1(I,J)<100. .OR. EGRID2(I,J)>-250.) THEN ! GRID1(I,J) = 0. ! ENDIF @@ -4178,11 +4394,12 @@ SUBROUTINE MISCLN cfld=cfld+1 fld_info(cfld)%ifld=IAVBLFLD(IGET(957)) fld_info(cfld)%lvl=LVLSXML(1,IGET(957)) -!$omp parallel do private(i,j,jj) +!$omp parallel do private(i,j,ii,jj) do j=1,jend-jsta+1 jj = jsta+j-1 - do i=1,im - datapd(i,j,cfld) = GRID1(i,jj) + do i=1,iend-ista+1 + ii = ista+i-1 + datapd(i,j,cfld) = GRID1(ii,jj) enddo enddo endif @@ -4194,7 +4411,7 @@ SUBROUTINE MISCLN GRID1=spval !$omp parallel do private(i,j) DO J=JSTA,JEND - DO I=1,IM + DO I=ISTA,IEND IF(T1D(I,J) < spval ) GRID1(I,J) = EGRID7(I,J) ENDDO ENDDO @@ -4203,11 +4420,12 @@ SUBROUTINE MISCLN cfld=cfld+1 fld_info(cfld)%ifld=IAVBLFLD(IGET(955)) fld_info(cfld)%lvl=LVLSXML(1,IGET(955)) -!$omp parallel do private(i,j,jj) +!$omp parallel do private(i,j,ii,jj) do j=1,jend-jsta+1 jj = jsta+j-1 - do i=1,im - datapd(i,j,cfld) = GRID1(i,jj) + do i=1,iend-ista+1 + ii = ista+i-1 + datapd(i,j,cfld) = GRID1(ii,jj) enddo enddo endif @@ -4219,7 +4437,7 @@ SUBROUTINE MISCLN GRID1=spval !$omp parallel do private(i,j) DO J=JSTA,JEND - DO I=1,IM + DO I=ISTA,IEND IF(T1D(I,J) < spval ) GRID1(I,J) = EGRID8(I,J) ENDDO ENDDO @@ -4228,11 +4446,12 @@ SUBROUTINE MISCLN cfld=cfld+1 fld_info(cfld)%ifld=IAVBLFLD(IGET(956)) fld_info(cfld)%lvl=LVLSXML(1,IGET(956)) -!$omp parallel do private(i,j,jj) +!$omp parallel do private(i,j,ii,jj) do j=1,jend-jsta+1 jj = jsta+j-1 - do i=1,im - datapd(i,j,cfld) = GRID1(i,jj) + do i=1,iend-ista+1 + ii = ista+i-1 + datapd(i,j,cfld) = GRID1(ii,jj) enddo enddo endif @@ -4240,27 +4459,27 @@ SUBROUTINE MISCLN ! Downdraft CAPE - ITYPE = 1 - ! DO J=JSTA,JEND - ! DO I=1,IM - ! LB2(I,J) = (LVLBND(I,J,1) + LVLBND(I,J,2) + & - ! LVLBND(I,J,3))/3 - ! P1D(I,J) = (PBND(I,J,1) + PBND(I,J,2) + PBND(I,J,3))/3 - ! T1D(I,J) = (TBND(I,J,1) + TBND(I,J,2) + TBND(I,J,3))/3 - ! Q1D(I,J) = (QBND(I,J,1) + QBND(I,J,2) + QBND(I,J,3))/3 - ! ENDDO - ! ENDDO - - DPBND = 400.E2 - ! CALL CALCAPE2(ITYPE,DPBND,P1D,T1D,Q1D,LB2, & - ! EGRID1,EGRID2,EGRID3,EGRID4,EGRID5, & - ! EGRID6,EGRID7,EGRID8) +! ITYPE = 1 +! DO J=JSTA,JEND +! DO I=ISTA,IEND +! LB2(I,J) = (LVLBND(I,J,1) + LVLBND(I,J,2) + & +! LVLBND(I,J,3))/3 +! P1D(I,J) = (PBND(I,J,1) + PBND(I,J,2) + PBND(I,J,3))/3 +! T1D(I,J) = (TBND(I,J,1) + TBND(I,J,2) + TBND(I,J,3))/3 +! Q1D(I,J) = (QBND(I,J,1) + QBND(I,J,2) + QBND(I,J,3))/3 +! ENDDO +! ENDDO + +! DPBND = 400.E2 +! CALL CALCAPE2(ITYPE,DPBND,P1D,T1D,Q1D,LB2, & +! EGRID1,EGRID2,EGRID3,EGRID4,EGRID5, & +! EGRID6,EGRID7,EGRID8) IF (IGET(954)>0) THEN GRID1 = spval !$omp parallel do private(i,j) DO J=JSTA,JEND - DO I=1,IM + DO I=ISTA,IEND IF(T1D(I,J) < spval) GRID1(I,J) = -EGRID6(I,J) ENDDO ENDDO @@ -4269,11 +4488,12 @@ SUBROUTINE MISCLN cfld=cfld+1 fld_info(cfld)%ifld=IAVBLFLD(IGET(954)) fld_info(cfld)%lvl=LVLSXML(1,IGET(954)) -!$omp parallel do private(i,j,jj) +!$omp parallel do private(i,j,ii,jj) do j=1,jend-jsta+1 jj = jsta+j-1 - do i=1,im - datapd(i,j,cfld) = GRID1(i,jj) + do i=1,iend-ista+1 + ii = ista+i-1 + datapd(i,j,cfld) = GRID1(ii,jj) enddo enddo endif @@ -4313,15 +4533,16 @@ SUBROUTINE MISCLN ! ! RELATIVE HUMIDITY WITH RESPECT TO PRECIPITABLE WATER IF (IGET(749)>0) THEN - CALL CALRH_PW(GRID1(1,jsta)) + CALL CALRH_PW(GRID1(ista:iend,jsta:jend)) if(grib=='grib2') then cfld=cfld+1 fld_info(cfld)%ifld=IAVBLFLD(IGET(749)) -!$omp parallel do private(i,j,jj) +!$omp parallel do private(i,j,ii,jj) do j=1,jend-jsta+1 jj = jsta+j-1 - do i=1,im - datapd(i,j,cfld) = GRID1(i,jj) + do i=1,iend-ista+1 + ii = ista+i-1 + datapd(i,j,cfld) = GRID1(ii,jj) enddo enddo endif @@ -4331,4 +4552,14 @@ SUBROUTINE MISCLN ! END OF ROUTINE. ! RETURN - END + CONTAINS + + subroutine allocate_cape_arrays + if(.not.allocated(OMGBND)) allocate(OMGBND(ista:iend,jsta:jend,NBND)) + if(.not.allocated(PWTBND)) allocate(PWTBND(ista:iend,jsta:jend,NBND)) + if(.not.allocated(QCNVBND)) allocate(QCNVBND(ista:iend,jsta:jend,NBND)) + if(.not.allocated(LVLBND)) allocate(LVLBND(ista:iend,jsta:jend,NBND)) + if(.not.allocated(LB2)) allocate(LB2(ista:iend,jsta:jend)) + end subroutine allocate_cape_arrays + + END SUBROUTINE MISCLN diff --git a/sorc/ncep_post.fd/MIXLEN.f b/sorc/ncep_post.fd/MIXLEN.f index 513cf6901..767bcad0e 100644 --- a/sorc/ncep_post.fd/MIXLEN.f +++ b/sorc/ncep_post.fd/MIXLEN.f @@ -10,6 +10,7 @@ SUBROUTINE MIXLEN(EL0,EL) ! 01-10-25 H CHUANG - MODIFIED TO PROCESS HYBRID MODEL OUTPUT ! 02-06-19 MIKE BALDWIN - WRF VERSION ! 21-03-11 B Cui - change local arrays to dimension (im,jsta:jend) +! 21-09-30 J MENG - 2D DECOMPOSITION ! ! ! INPUT: @@ -42,7 +43,8 @@ SUBROUTINE MIXLEN(EL0,EL) use masks, only: lmh, htm use params_mod, only: EPSQ2, CAPA use ctlblk_mod, only: jsta, jend, jsta_m, jend_m, im, jm, jsta_2l, jend_2u,& - lm, lm1 + lm, lm1, spval,& + ista, iend, ista_m, iend_m, ista_2l, iend_2u !- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - implicit none @@ -54,9 +56,9 @@ SUBROUTINE MIXLEN(EL0,EL) ! ! ------------------------------------------------------------------ ! - real,intent(in) :: el0(im,jsta_2l:jend_2u) - real,intent(out) :: EL(IM,jsta_2l:jend_2u,LM) - real HGT(IM,JSTA:JEND),APE(IM,JSTA_M:JEND_M,2) + real,intent(in) :: el0(ista_2l:iend_2u,jsta_2l:jend_2u) + real,intent(out) :: EL(ista_2l:iend_2u,jsta_2l:jend_2u,LM) + real HGT(ISTA:IEND,JSTA:JEND),APE(ISTA_M:IEND_M,JSTA_M:JEND_M,2) ! integer I,J,L real ZL,VKRMZ,ENSQ,Q2KL,ELST,ZIAG,ELVGD @@ -66,13 +68,13 @@ SUBROUTINE MIXLEN(EL0,EL) !$omp parallel do DO L=1,LM DO J=JSTA,JEND - DO I=1,IM + DO I=ISTA,IEND EL(I,J,L)=0. ENDDO ENDDO ENDDO DO J=JSTA,JEND - DO I=1,IM + DO I=ISTA,IEND HGT(I,J)=ZINT(I,J,NINT(LMH(I,J))+1) ENDDO ENDDO @@ -83,10 +85,14 @@ SUBROUTINE MIXLEN(EL0,EL) !$omp parallel do private(i,j,l,vkrmz,zl) DO L=1,LM DO J=JSTA,JEND - DO I=1,IM + DO I=ISTA,IEND + IF(HGT(I,J)=(num_procs-numx))then + jend_m=jm-1 + jend_m2=jm-2 + end if + + if(mod(me+1,numx)==0)then + iend_m=im-1 + iend_m2=im-2 + end if + + 102 format(6i10,a20) + +! if ( me == 0 ) then - idn = MPI_PROC_NULL + idn = MPI_PROC_NULL end if if ( me == num_procs - 1 ) then - iup = MPI_PROC_NULL + iup = MPI_PROC_NULL end if ! -! print *, ' ME, NUM_PROCS = ',me,num_procs -! print *, ' ME, JSTA, JSTA_M, JSTA_M2 = ',me,jsta,jsta_m,jsta_m2 -! print *, ' ME, JEND, JEND_M, JEND_M2 = ',me,jend,jend_m,jend_m2 -! print *, ' ME, IUP, IDN = ',me,iup,idn -! -! counts, disps for gatherv and scatterv -! - do i = 0, num_procs - 1 - call para_range(1,jm,num_procs,i,jsx,jex) - icnt(i) = (jex-jsx+1)*im - idsp(i) = (jsx-1)*im - if ( me == 0 ) then - print *, ' i, icnt(i),idsp(i) = ',i,icnt(i), & - idsp(i) - end if +! GWV. Array of i/j coordinates for bookkeeping tests. Not used in +! calculations but to check if scatter,gather, and exchanges are doing as +! expected. Both real and integer arrays are sent. Integer will be needed +! for very large domains because real mantissas overflow and both coordinates' +! information can't be packed into a real mantisa. Real is easier to use +! because the datatype is the same as for actual data + + allocate(icoords(im,jm)) + allocate(rcoords(im,jm)) + allocate(ibuff(im*jm)) + allocate(rbuff(im*jm)) + do j=1,jm + do i=1,im + icoords(i,j)=10000*I+j ! both I and J information is in each element + rcoords(i,j)=4000*i+j ! both I and J information is in each element but it overflows for large I I to 3600 is safe + end do end do + +! end COORDS test + +! counts, disps for gatherv and scatterv + + isum=1 + allocate(isxa(0:num_procs-1) ) + allocate(jsxa(0:num_procs-1) ) + allocate(iexa(0:num_procs-1) ) + allocate(jexa(0:num_procs-1) ) + do i = 0, num_procs - 1 + call para_range2(im,jm,numx,num_procs/numx,i,isx,iex,jsx,jex) + icnt(i) = ((jex-jsx)+1)*((iex-isx)+1) + isxa(i)=isx + iexa(i)=iex + jsxa(i)=jsx + jexa(i)=jex + + idsp(i)=isumm + isumm=isumm+icnt(i) + if(jsx .eq. 1 .or. jex .eq. jm) then + icnt2(i) = (iex-isx+1) + else + icnt2(i)=0 + endif + idsp2(i)=isumm2 + if(jsx .eq. 1 .or. jex .eq. jm) isumm2=isumm2+(iex-isx+1) + +! GWV Create send buffer for scatter. This is now needed because we are no +! longer sending contiguous slices of the im,jm full state arrays to the +! processors with scatter. Instead we are sending a slice of I and a slice of J +! and so have to reshape the send buffer below to make it contiguous groups of +! isx:iex,jsx:jex arrays + + do jj=jsx,jex + do ii=isx,iex + ibuff(isum)=icoords(ii,jj) + rbuff(isum)=rcoords(ii,jj) + isum=isum+1 + end do + end do + + end do ! enddo of num_procs ! ! extraction limits -- set to two rows ! jsta_2l = max(jsta - 2, 1 ) jend_2u = min(jend + 2, jm ) + if(modelname=='GFS') then + ista_2l=max(ista-2,0) + iend_2u=min(iend+2,im+1) + else + ista_2l=max(ista-2,1) + iend_2u=min(iend+2,im) + endif + ! special for c-grid v jvend_2u = min(jend + 2, jm+1 ) -! special for c-grid v -! print *, ' me, jvend_2u = ',me,jvend_2u ! +! NEW neighbors + + ileft = me - 1 + iright = me + 1 + iup=MPI_PROC_NULL + idn=MPI_PROC_NULL + + if(mod(me,numx) .eq. 0) print *,' LEFT POINT',me + if(mod(me+1,numx) .eq. 0) print *,' RIGHT POINT',me + if(mod(me,numx) .eq. 0) ileft=MPI_PROC_NULL + if(mod(me,numx) .eq. 0) ileftb=me+numx-1 + if(mod(me+1,numx) .eq. 0 .or. me .eq. num_procs-1) iright=MPI_PROC_NULL + if(mod(me+1,numx) .eq. 0 .or. me .eq. num_procs-1) irightb=me-numx+1 + if(me .ge. numx) idn=me-numx + if(me+1 .le. num_procs-numx) iup=me+numx + + print 102,me,ileft,iright,iup,idn,num_procs,'GWVX BOUNDS' + ! allocate arrays + + ibsize = ( (iend-ista) +1) * ( (jend-jsta)+1) + allocate(ibcoords(ista_2l:iend_2u,jsta_2l:jend_2u)) + allocate(rbcoords(ista_2l:iend_2u,jsta_2l:jend_2u)) + allocate(ibufs(ibsize)) + allocate(rbufs(ibsize)) + call mpi_scatterv(ibuff,icnt,idsp,mpi_integer & + ,ibufs,icnt(me),mpi_integer ,0,MPI_COMM_WORLD,j) + call mpi_scatterv(rbuff,icnt,idsp,mpi_real & + ,rbufs,icnt(me),mpi_real ,0,MPI_COMM_WORLD,j) + ! -! -! FROM VRBLS3D +!GWV reshape the receive subdomain + + isum=1 + do j=jsta,jend + do i=ista,iend + ibcoords(i,j)=ibufs(isum) + rbcoords(i,j)=rbufs(isum) + isum=isum+1 + end do + end do + +!GWV end reshape + do j=jsta,jend + do i=ista,iend + ii=ibcoords(i,j)/10000 + jj=ibcoords( i,j)-(ii*10000) + if(ii .ne. i .or. jj .ne. j) then + print *,i,j,ii,jj,ibcoords(i,j),' GWVX FAIL ' + else + continue + endif + end do + end do + + allocate(ipoles(im,2),ipole(ista:iend)) + allocate(rpoles(im,2),rpole(ista:iend)) + ipole=9900000 + ipoles=-999999999 + + do i=ista,iend + if(me .lt. num_procs/2. .and. jsta_2l .le. 1 .and. icnt2(me) .gt. 0) ipole(i)=ibcoords(i,1) + if(me .lt. num_procs/2. .and. jsta_2l .le. 1 .and. icnt2(me) .gt. 0) rpole(i)=rbcoords(i,1) + if(me .gt. num_procs/2. .and. jend_2u .ge. jm .and. icnt2(me) .gt. 0) ipole(i)=ibcoords(i,jm) + if(me .gt. num_procs/2. .and. jend_2u .ge. jm .and. icnt2(me) .gt. 0) rpole(i)=rbcoords(i,jm) + +! check code to be removed upon debugging + if(me .lt. num_procs/2. .and. jsx .eq. 1) then + continue + endif + if(me .gt. num_procs/2. .and. jend_2u .ge. jm) then + continue + endif + end do ! end check code + +! test pole gather + print 105,' GWVX GATHER DISP ',icnt2(me),idsp2(me),me + 105 format(a30,3i12) + + call mpi_gatherv(ipole(ista),icnt2(me),MPI_INTEGER, ipoles,icnt2,idsp2,MPI_INTEGER,0,MPI_COMM_WORLD, ierr ) + call mpi_gatherv(rpole(ista),icnt2(me),MPI_REAL , rpoles,icnt2,idsp2,MPI_REAL ,0,MPI_COMM_WORLD, ierr ) + + if(me .eq. 0) then + do j=1,2 + do i=1,im + ii=rpoles(i,j)/4000 + jj=rpoles(i,j) -ii*4000 + if(ii .ne. i .or. jj .ne. 1 .and. jj .ne. jm ) then + write(0,169)' IPOLES BAD POINT',rpoles(i,j),ii,i,jj,' jm= ',jm + else + continue +! write(0,169)' IPOLES GOOD POINT',rpoles(i,j),ii,i,jj,' jm= ',jm + endif + end do + end do + endif + + 107 format(a20,10i10) + 169 format(a25,f20.1,3i10,a10,4i10) ! print *, ' me, jsta_2l, jend_2u = ',me,jsta_2l, jend_2u, & 'jvend_2u=',jvend_2u,'im=',im,'jm=',jm,'lm=',lm, & 'lp1=',lp1 + write(0,'(A,5I10)') 'MPI_FIRST me,jsta,jend,ista,iend,=',me,jsta,jend,ista,iend + + end + +! subroutine sub(a) +! return +! end + + + + subroutine fullpole(a,rpoles) + + use ctlblk_mod, only: num_procs, jend, iup, jsta, idn, mpi_comm_comp, im,MODELNAME,numx,& + icoords,ibcoords,rbcoords,bufs,ibufs,me, & + jsta_2l,jend_2u,ileft,iright,ista_2l,iend_2u,ista,iend,jm,icnt2,idsp2 +!- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + implicit none +! + include 'mpif.h' +! + real,intent(inout) :: a ( ista_2l:iend_2u,jsta_2l:jend_2u ),rpoles(im,2) + real, allocatable :: rpole(:) + + integer status(MPI_STATUS_SIZE) + integer ierr + integer size,ubound,lbound + integer i,ii,jj, ibl,ibu,jbl,jbu,icc,jcc + integer ifirst + data ifirst/0/ + integer iwest,ieast + data iwest,ieast/0,0/ + allocate(rpole(ista:iend)) + + do i=ista,iend + if(me .lt. num_procs/2. .and. jsta_2l .le. 1 .and. icnt2(me) .gt. 0) rpole(i)=a(i,1) + if(me .ge. num_procs/2. .and. jend_2u .ge. jm .and. icnt2(me) .gt. 0) rpole(i)=a(i,jm) + end do + + call mpi_allgatherv(rpole(ista),icnt2(me),MPI_REAL,rpoles,icnt2,idsp2,MPI_REAL, MPI_COMM_COMP,ierr) + + call mpi_barrier(mpi_comm_comp,ierr) + ifirst=1 end + diff --git a/sorc/ncep_post.fd/MSFPS.f b/sorc/ncep_post.fd/MSFPS.f index 06b2bc63d..14aa915d4 100644 --- a/sorc/ncep_post.fd/MSFPS.f +++ b/sorc/ncep_post.fd/MSFPS.f @@ -1,25 +1,18 @@ !> @file -! . . . -!> SUBPROGRAM: MSFPS Computes the map scale factor for a Polar -!! Stereographic grid at a give latitude. -!! -!! ABSTRACT: -!! Computes the map scale factor for a Polar Stereographic -!! grid at a give latitude. -!! -!! PROGRAM HISTORY LOG: -!! 06-11-01 SWIPED FROM WRF SI PACKAGE BY ROZUMALSKI -!! -!! INPUT ARGUMENT LIST: -!! LAT - LATITUDE AT WHICH MAP FACTOR IS VALID -!! TRUELAT1 - TRUELAT 1 -!! -!! OUTPUT ARGUMENT LIST: -!! MSF - MAP SCALE FACTOR -!! -!! ATTRIBUTES: -!! LANGUAGE: FORTRAN -!! +!> @brief msfps() computes the map scale factor for a polar stereographic grid at a give latitude. +!> +!> This subroutine computes the map scale factor for a polar stereographic grid at a give latitude. +!> +!> @param[in] LAT Latitude at which map factor is valid. +!> @param[in] TRUELAT1 TRUELAT 1. +!> @param[out] MSF Map scale factor. +!> +!> ### Program History Log +!> Date | Programmer | Comments +!> -----|------------|--------- +!> 2006-11-01 | Rozumalski | Swiped from WRF si package +!> +!> @author Rozumalski @date 2006-11-01 SUBROUTINE MSFPS(LAT,TRUELAT1,MSF) diff --git a/sorc/ncep_post.fd/NGMFLD.f b/sorc/ncep_post.fd/NGMFLD.f index 7bd962e14..2d7052e35 100644 --- a/sorc/ncep_post.fd/NGMFLD.f +++ b/sorc/ncep_post.fd/NGMFLD.f @@ -1,81 +1,48 @@ !> @file -! . . . -!> SUBPROGRAM: NGMFLD COMPUTES LAYER MEAN NGM FIELDS -!! PRGRMMR: TREADON ORG: W/NP2 DATE: 92-12-22 -!! -!! ABSTRACT: -!! THIS ROUTINE COMPUTES A HANDFUL OF NGM LAYER MEAN -!! FIELDS. THIS IS DONE TO PROVIDE A FULLY COMPLETE -!! ETA NGM LOOK-ALIKE OUTPUT FILE. THE SIGMA (LAYER) -!! FIELDS COMPUTED BY THIS ROUTINE ARE TABULATED BELOW. -!! -!! SIGMA (LAYER) FIELD(S) -!! --------------- -------------- -!! 0.47191-1.00000 RH -!! 0.47171-0.96470 RH -!! 0.18019-0.47191 RH -!! 0.84368-0.98230 RH -!! 0.85000-1.00000 MCONV -!! WHERE -!! RH = RELATIVE HUMIDITY -!! MCONV = MOISTURE CONVERGENCE -!! -!! LAYER MEANS ARE A SUMMATION OVER ETA LAYERS MAPPING INTO -!! THE PRESSURE RANGE CORRESPONDING TO THE SIGMA RANGE ABOVE. -!! THE CALCULATION OF THESE BOUNDING PRESSURES IS DONE AT -!! EACH HORIZONTAL GRID POINT BASED ON THE SURFACE PRESSURE. -!! EACH TERM IN THE SUMMATION IS WEIGHTED BY THE THICKNESS OF -!! THE ETA LAYER. THE FINAL LAYER MEAN IS THIS SUM NORMALIZED -!! BY THE TOTAL DEPTH OF THE LAYER. - -!! -!! -!! PROGRAM HISTORY LOG: -!! 92-12-22 RUSS TREADON -!! 93-07-27 RUSS TREADON - MODIFIED SUMMATION LIMITS FROM -!! 0.66*PSFC TO 0.75*PSFC AND 0.33*PSFC -!! TO 0.50*PSFC, WHERE PSFC IS THE -!! SURFACES PRESSURE. THE REASON FOR -!! THIS CHANGE WAS RECOGNITION THAT IN -!! THE LFM 0.33 AND 0.66 WERE MEASURED -!! FROM THE SURFACE TO THE TROPOPAUSE, -!! NOT THE TOP OF THE MODEL. -!! 93-09-13 RUSS TREADON - RH CALCULATIONS WERE MADE INTERNAL -!! TO THE ROUTINE. -!! 98-06-16 T BLACK - CONVERSION FROM 1-D TO 2-D -!! 98-08-18 MIKE BALDWIN - COMPUTE RH OVER ICE -!! 98-12-22 MIKE BALDWIN - BACK OUT RH OVER ICE -!! 00-01-04 JIM TUCCILLO - MPI VERSION -!! 02-04-24 MIKE BALDWIN - WRF VERSION -!! -!! -!! USAGE: CALL NGMFLD(RH4710,RH4796,RH1847,RH8498,QM8510) -!! INPUT ARGUMENT LIST: -!! NONE -!! -!! OUTPUT ARGUMENT LIST: -!! RH4710 - SIGMA LAYER 0.47-1.00 MEAN RELATIVE HUMIDITY. -!! RH4796 - SIGMA LAYER 0.47-0.96 MEAN RELATIVE HUMIDITY. -!! RH1847 - SIGMA LAYER 0.18-0.47 MEAN RELATIVE HUMIDITY. -!! RH8498 - SIGMA LAYER 0.84-0.98 MEAN RELATIVE HUMIDITY. -!! QM8510 - SIGMA LAYER 0.85-1.00 MEAN MOISTURE CONVERGENCE. -!! -!! OUTPUT FILES: -!! NONE -!! -!! LIBRARY: -!! COMMON - -!! MASKS -!! OPTIONS -!! LOOPS -!! MAPOT -!! DYNAMD -!! INDX -!! -!! ATTRIBUTES: -!! LANGUAGE: FORTRAN -!! MACHINE : CRAY C-90 -!! +!> @brief ngmfld() computes layer mean NGM fields +!> +!> This routine computes a handful of NGM layer mean +!> fields. This is done to provide a fully complete +!> ETA NGM look-alike output file. +!> ### The sigma (layer) fields computed bu this routine are tabulated below. +!> Sigma (layer) | Field(s) | +!> --------------|----------| +!> 0.47191 - 1.00000 | RH | +!> 0.47171 - 0.96470 | RH | +!> 0.18019 - 0.47191 | RH | +!> 0.84368 - 0.98230 | RH | +!> 0.85000 - 1.00000 | MCONV | +!> where RH = Relative humidity and MCONV = Moisture convergence +!> +!> Layer means are a summation over ETA layers mapping into +!> The pressure range corresponding to the sigma range above. +!> The calculation of these bounding pressures is done at +!> each horizontal grid point based on the surface pressure. +!> Each term in the summation is weighted by the thickness of +!> the ETA layer. The final layer mean is this sum normalized +!> by the total depth of the layer. +!> +!> @param[out] RH4710 Sigma layer 0.47-1.00 mean relative humidity. +!> @param[out] RH4796 Sigma layer 0.47-0.96 mean relative humidity. +!> @param[out] RH1847 Sigma layer 0.18-0.47 mean relative humidity. +!> @param[out] RH8498 Sigma layer 0.84-0.98 mean relative humidity. +!> @param[out] QM8510 Sigma layer 0.85-1.00 mean moisture convergence. +!> +!> ### Program History Log +!> Date | Programmer | Comments +!> -----|------------|--------- +!> 1992-12-22 | Russ Treadon | Initial +!> 1993-07-27 | Russ Treadon | Modified summation limits from 0.66*PSFC to 0.75*PSFC and 0.33*PSFC to 0.50*PSFC, where PSFC is the surfaces pressure. The reason for this change was recognition that in the LFM 0.33 and 0.66 were measured from the surface to the tropopause not the top of the model. +!> 1993-09-13 | Russ Treadon | RH calculations were made internal to the routine. +!> 1996-03-04 | Mike Baldwin | Change PW CALC to include CLD WTR +!> 1998-06-16 | T Black | Conversion from 1-D to 2-D +!> 1998-08-17 | Mike Baldwin | Compute RH over ice +!> 1998-12-22 | Mike Baldwin | Back out RH over ice +!> 2000-01-04 | Jim Tuccillo | MPI Version +!> 2002-04-24 | Mike Baldwin | WRF Version +!> 2021-09-30 | JESSE MENG | 2D DECOMPOSITION +!> +!> @author Russ Treadon W/NP2 @date 1992-12-22 SUBROUTINE NGMFLD(RH4710,RH4796,RH1847,RH8498,QM8510) ! @@ -85,7 +52,8 @@ SUBROUTINE NGMFLD(RH4710,RH4796,RH1847,RH8498,QM8510) use masks, only: lmh use params_mod, only: d00, d50, h1m12, pq0, a2, a3, a4, h1, d01, small use ctlblk_mod, only: jsta, jend, lm, jsta_2l, jend_2u, jsta_m2, jend_m2,& - spval, im + spval, im, & + ista, iend, ista_2l, iend_2u, ista_m2, iend_m2, ista_m, iend_m ! !- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - implicit none @@ -96,10 +64,10 @@ SUBROUTINE NGMFLD(RH4710,RH4796,RH1847,RH8498,QM8510) ! ! DECLARE VARIABLES. LOGICAL GOT8510,GOT4710,GOT4796,GOT1847,GOT8498 - REAL,dimension(IM,jsta_2l:jend_2u),intent(out) :: QM8510,RH4710,RH8498, & + REAL,dimension(ista_2l:iend_2u,jsta_2l:jend_2u),intent(out) :: QM8510,RH4710,RH8498, & RH4796,RH1847 - REAL,dimension(im,jsta_2l:jend_2u) :: Z8510,Z4710,Z8498,Z4796,Z1847 - real,dimension(im,jsta_2l:jend_2u) :: Q1D, U1D, V1D, QCNVG + REAL,dimension(ista_2l:iend_2u,jsta_2l:jend_2u) :: Z8510,Z4710,Z8498,Z4796,Z1847 + real,dimension(ista_2l:iend_2u,jsta_2l:jend_2u) :: Q1D, U1D, V1D, QCNVG ! integer I,J,L real P100,P85,P98,P96,P84,P47,P18,ALPM,DE,PM,TM,QM, & @@ -110,7 +78,7 @@ SUBROUTINE NGMFLD(RH4710,RH4796,RH1847,RH8498,QM8510) ! INITIALIZE ARRAYS. !$omp parallel do private(i,j) DO J=JSTA,JEND - DO I=1,IM + DO I=ISTA,IEND QM8510(I,J) = D00 RH4710(I,J) = D00 RH8498(I,J) = D00 @@ -137,7 +105,7 @@ SUBROUTINE NGMFLD(RH4710,RH4796,RH1847,RH8498,QM8510) ! COMPUTE MOISTURE CONVERGENCE !$omp parallel do private(i,j) DO J=JSTA_2L,JEND_2U - DO I=1,IM + DO I=ISTA_2L,IEND_2U Q1D(I,J) = Q(I,J,L) U1D(I,J) = UH(I,J,L) V1D(I,J) = VH(I,J,L) @@ -146,7 +114,7 @@ SUBROUTINE NGMFLD(RH4710,RH4796,RH1847,RH8498,QM8510) CALL CALMCVG(Q1D,U1D,V1D,QCNVG) ! COMPUTE MOISTURE CONVERGENCE DO J=JSTA_M2,JEND_M2 - DO I=2,IM-1 + DO I=ISTA_M,IEND_M ! ! SET TARGET PRESSURES. @@ -220,7 +188,7 @@ SUBROUTINE NGMFLD(RH4710,RH4796,RH1847,RH8498,QM8510) ENDDO ! DO J=JSTA_M2,JEND_M2 - DO I=2,IM-1 + DO I=ISTA_M,IEND_M ! NORMALIZE TO GET LAYER MEAN VALUES. IF (Z8510(I,J)>0) THEN QM8510(I,J) = QM8510(I,J)/Z8510(I,J) diff --git a/sorc/ncep_post.fd/NGMSLP.f b/sorc/ncep_post.fd/NGMSLP.f index 56fdda56c..40f8bdb1c 100644 --- a/sorc/ncep_post.fd/NGMSLP.f +++ b/sorc/ncep_post.fd/NGMSLP.f @@ -65,6 +65,7 @@ !! CONSISTENT WITH MESINGER SLP !! 02-06-13 MIKE BALDWIN - WRF VERSION !! 06-12-18 H CHUANG - BUG FIX TO CORRECT TAU AT SFC +!! 21-09-30 J MENG - 2D DECOMPOSITION !! !! USAGE: CALL NGMSLP !! INPUT ARGUMENT LIST: @@ -93,7 +94,7 @@ SUBROUTINE NGMSLP use vrbls2d, only: slp, fis, z1000 use masks, only: lmh use params_mod, only: rd, gi, g, h1, d608, gamma, d50, p1000 - use ctlblk_mod, only: jsta, jend, im, jm, spval + use ctlblk_mod, only: jsta, jend, im, jm, spval, ista, iend !- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - implicit none ! @@ -117,7 +118,7 @@ SUBROUTINE NGMSLP !!$omp& tau,tauavg,tausfc,tausl,tavg,tvrbar,tvrsfc,tvrsl, !!$omp& tvrt,tvrtal,zbar,zl,zsfc) DO J=JSTA,JEND - DO I=1,IM + DO I=ISTA,IEND LLMH = NINT(LMH(I,J)) if( PINT(I,J,LLMH+1) @file -! -!> SUBPROGRAM: OTLFT COMPUTES LIFTED INDEX -!! PRGRMMR: TREADON ORG: W/NP2 DATE: 93-03-10 -!! -!! ABSTRACT: -!! THIS ROUTINE COMPUTES LIFTS A PARCEL SPECIFIED BY THE -!! PASSED PRESSURE, TEMPERATURE, AND SPECIFIC HUMIDITY TO -!! 500MB AND THEN COMPUTES A LIFTED INDEX. THIS LIFTED -!! LIFTED INDEX IS THE DIFFERENCE BETWEEN THE LIFTED -!! PARCEL'S TEMPERATURE AT 500MB AND THE AMBIENT 500MB -!! TEMPERATURE. -!! -!! PROGRAM HISTORY LOG: -!! 93-03-10 RUSS TREADON - MODIFIED OTLIFT2 TO LIFT PARCELS -!! SPECIFIED BY PASSED P, T, AND Q. -!! 98-06-15 T BLACK - CONVERSION FROM 1-D TO 2-D -!! 00-01-04 JIM TUCCILLO - MPI VERSION -!! 02-06-17 MIKE BALDWIN - WRF VERSION -!! 11-04-12 GEOFF MANIKIN - USE VIRTUAL TEMPERATURE -!! 20-11-10 JESSE MENG - USE UPP_PHYSICS MODULE -!! -!! USAGE: CALL OTLFT(PBND,TBND,QBND,SLINDX) -!! INPUT ARGUMENT LIST: -!! PBND - PARCEL PRESSURE. -!! TBND - PARCEL TEMPERATURE. -!! QBND - PARCEL SPECIFIC HUMIDITY. -!! -!! OUTPUT ARGUMENT LIST: -!! SLINDX - LIFTED INDEX. -!! -!! OUTPUT FILES: -!! NONE -!! -!! SUBPROGRAMS CALLED: -!! UTILITIES: -!! NONE -!! LIBRARY: -!! COMMON - CTLBLK -!! LOOPS -!! MASKS -!! PHYS -!! -!! ATTRIBUTES: -!! LANGUAGE: FORTRAN -!! MACHINE : CRAY C-90 -!! +!> @brief otlft() computes lifted index. +!> +!> This routine computes lifts a parcel specified by the +!> passed pressure, temperature, and specific humidity to +!> 500mb and then computes a lifted index. This lifted +!> lifted index is the difference between the lifted +!> parcel's temperature at 500mb and the ambient 500mb +!> temperature. +!> +!> @param[in] PBND Parcel pressure. +!> @param[in] TBND Parcel temperature. +!> @param[in] QBND Parcel specific humidity. +!> @param[out] SLINDX Lifted index. +!> +!> ### Program History Log +!> Date | Programmer | Comments +!> -----|------------|--------- +!> 1993-03-10 | Russ Treadon | Initial. Modified OTLIFT2 to lift parcels specified by passed P, T, and Q. +!> 1998-06-15 | T Black | Conversion from 1-D to 2-D +!> 2000-01-04 | Jim Tuccillo | MPI Version +!> 2002-06-17 | Mike Baldwin | WRF Version +!> 2011-04-12 | Geoff Manikin | Use virtual temperature +!> 2020-11-10 | Jesse Meng | Use UPP_PHYSICS Module +!> 2021-09-30 | JESSE MENG | 2D DECOMPOSITION +!> +!> @author Russ Treadon W/NP2 @date 1993-03-10 SUBROUTINE OTLFT(PBND,TBND,QBND,SLINDX) ! @@ -52,7 +32,7 @@ SUBROUTINE OTLFT(PBND,TBND,QBND,SLINDX) use vrbls2d, only: T500 use lookup_mod, only: THL, RDTH, JTB, QS0, SQS, RDQ, ITB, PTBL, & PL, RDP, THE0, STHE, RDTHE, TTBL - use ctlblk_mod, only: JSTA, JEND, IM, spval + use ctlblk_mod, only: JSTA, JEND, IM, spval, ISTA, IEND use params_mod, only: D00, H10E5, CAPA, ELOCP, EPS, ONEPS use upp_physics, only: FPVSNEW !- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - @@ -63,8 +43,8 @@ SUBROUTINE OTLFT(PBND,TBND,QBND,SLINDX) ! ! DECLARE VARIABLES. - real,dimension(IM,jsta:jend),intent(in) :: PBND,TBND,QBND - real,dimension(IM,jsta:jend),intent(out) :: SLINDX + real,dimension(ista:iend,jsta:jend),intent(in) :: PBND,TBND,QBND + real,dimension(ista:iend,jsta:jend),intent(out) :: SLINDX REAL :: TVP, ESATP, QSATP REAL :: BQS00, SQS00, BQS10, SQS10, P00, P10, P01, P11, BQ, SQ, TQ REAL :: BTHE00, STHE00, BTHE10, STHE10, BTH, STH, TTH @@ -81,7 +61,7 @@ SUBROUTINE OTLFT(PBND,TBND,QBND,SLINDX) ! !$omp parallel do private(i,j) DO J=JSTA,JEND - DO I=1,IM + DO I=ISTA,IEND SLINDX(I,J) = D00 ENDDO ENDDO @@ -89,7 +69,7 @@ SUBROUTINE OTLFT(PBND,TBND,QBND,SLINDX) !--------------FIND EXNER IN BOUNDARY LAYER----------------------------- ! DO J=JSTA,JEND - DO I=1,IM + DO I=ISTA,IEND TBT = TBND(I,J) QBT = QBND(I,J) ! diff --git a/sorc/ncep_post.fd/OTLIFT.f b/sorc/ncep_post.fd/OTLIFT.f index f1abe6575..2270113da 100644 --- a/sorc/ncep_post.fd/OTLIFT.f +++ b/sorc/ncep_post.fd/OTLIFT.f @@ -1,44 +1,28 @@ !> @file -! -!> SUBPROGRAM: OTLIFT COMPUTES SFC TO 500MB LIFTED INDEX -!! PRGRMMR: TREADON ORG: W/NP2 DATE: 93-03-10 -!! -!! ABSTRACT: -!! THIS ROUTINE COMPUTES A SURFACE TO 500MB LIFTED INDEX. -!! THE LIFTED PARCEL IS FROM THE FIRST ATMOSPHERIC ETA -!! LAYER (IE, THE ETA LAYER CLOSEST TO THE MODEL GROUND). -!! THE LIFTED INDEX IS THE DIFFERENCE BETWEEN THIS PARCEL'S -!! TEMPERATURE AT 500MB AND THE AMBIENT 500MB TEMPERATURE. -!! -!! PROGRAM HISTORY LOG: -!! ??-??-?? ??? - SUBROUTINE OTLIFT IN ETA MODEL. -!! 93-03-10 RUSS TREADON - ADAPTED OTLIFT FOR USE WITH NEW POST. -!! 98-06-18 T BLACK - CONVERSION FROM 1-D TO 2-D -!! 00-01-04 JIM TUCCILLO - MPI VERSION -!! 01-10-25 H CHUANG - MODIFIED TO PROCESS HYBRID MODEL OUTPUT -!! 02-06-11 MIKE BALDWIN - WRF VERSION -!! 11-04-12 GEOFF MANIKIN - USE VIRTUAL TEMPERATURE -!! 20-11-10 JESSE MENG - USE UPP_PHYSICS MODULE -!! -!! USAGE: CALL OTLIFT(SLINDX) -!! INPUT ARGUMENT LIST: -!! -!! OUTPUT ARGUMENT LIST: -!! SLINDX - LIFTED INDEX. -!! -!! OUTPUT FILES: -!! NONE -!! -!! SUBPROGRAMS CALLED: -!! UTILITIES: -!! NONE -!! LIBRARY: -!! COMMON - CTLBLK -!! -!! ATTRIBUTES: -!! LANGUAGE: FORTRAN -!! MACHINE : CRAY C-90 -!! +!> @brief otlift() computes SFC to 500mb lifted index. +!> +!> This routine computes a surface to 500mb lifted index. +!> The lifted parcel is from the first atmpspheric ETA +!> layer (ie, the ETA layer closest to the model ground). +!> The lifted index is the difference between this parcel's +!> temperature at 500mb and the ambient 500mb temperature. +!> +!> @param[out] SLINDX lifted index. +!> +!> ### Program History Log +!> Date | Programmer | Comments +!> -----|------------|--------- +!> ????-??-?? | ??? | Subroutine OTLIFT in ETA model. +!> 1993-03-10 | Russ Treadon | Adapted OTLIFT for use with new post. +!> 1998-06-18 | T Black | Conversion from 1-D to 2-D +!> 2000-01-04 | Jim Tuccillo | MPI Version +!> 2001-10-25 | H Chuang | Modified to process hybrid model output +!> 2002-06-11 | Mike Baldwin | WRF Version +!> 2011-04-12 | Geoff Manikin | Use virtual temperature +!> 2020-11-10 | Jesse Meng | Use UPP_PHYSICS Module +!> 2021-09-30 | JESSE MENG | 2D DECOMPOSITION +!> +!> @author Russ Treadon W/NP2 @date 1993-03-10 SUBROUTINE OTLIFT(SLINDX) ! @@ -47,7 +31,7 @@ SUBROUTINE OTLIFT(SLINDX) use masks, only: LMH use lookup_mod, only: THL, RDTH, JTB, QS0, SQS, RDQ,ITB, PTBL, PL, & RDP, THE0, STHE, RDTHE, TTBL - use ctlblk_mod, only: JSTA, JEND, IM, SPVAL + use ctlblk_mod, only: JSTA, JEND, IM, SPVAL, ISTA, IEND use params_mod, only: D00,H10E5, CAPA, ELOCP, EPS, ONEPS use upp_physics, only: FPVSNEW ! @@ -60,7 +44,7 @@ SUBROUTINE OTLIFT(SLINDX) ! ! DECLARE VARIABLES. - real,intent(out) :: SLINDX(IM,jsta:jend) + real,intent(out) :: SLINDX(ista:iend,jsta:jend) REAL :: TVP, ESATP, QSATP REAL :: TTH, TP, APESP, PARTMP, THESP, TPSP REAL :: BQS00, SQS00, BQS10, SQS10, BQ, SQ, TQ @@ -77,13 +61,13 @@ SUBROUTINE OTLIFT(SLINDX) ! INTIALIZE LIFTED INDEX ARRAY TO ZERO. !$omp parallel do private(i,j) DO J=JSTA,JEND - DO I=1,IM + DO I=ISTA,IEND SLINDX(I,J) = D00 ENDDO ENDDO !--------------FIND EXNER AT LOWEST LEVEL------------------------------- DO J=JSTA,JEND - DO I=1,IM + DO I=ISTA,IEND LBTM=NINT(LMH(I,J)) IF(T(I,J,LBTM) @file -! -!> SUBPROGRAM: PARA_RANGE SET UP DECOMPOSITION VALUES -!! PRGRMMR: TUCCILLO ORG: IBM -!! -!! ABSTRACT: -!! SETS UP DECOMOSITION VALUES -!! -!! PROGRAM HISTORY LOG: -!! 00-01-06 TUCCILLO - ORIGINAL +!> @brief para_range() sets up decomposition values. +!> +!> This subroutine sets up decomposition values. +!> +!> @param[in] N1 First interate value. +!> @param[in] N2 Last interate value. +!> @param[in] NPROCS Number of MPI tasks. +!> @param[in] IRANK My taks ID. +!> @param[out] ISTA First loop value. +!> @param[out] IEND Last loop value. +!> +!> ### Program History Log +!> Date | Programmer | Comments +!> -----|------------|--------- +!> 2000-01-06 | Jim Tuccillo | Initial +!> +!> @author Jim Tuccillo IBM @date 2000-01-06 + SUBROUTINE PARA_RANGE (N1,N2,NPROCS,IRANK,ISTA,IEND) + + implicit none + integer,intent(in) :: n1,n2,nprocs,irank + integer,intent(out) :: ista,iend + integer iwork1, iwork2 + + iwork1 = ( n2 - n1 + 1 ) / nprocs + iwork2 = mod ( n2 - n1 + 1, nprocs ) + ista = irank * iwork1 + n1 + min ( irank, iwork2 ) + iend = ista + iwork1 - 1 + if ( iwork2 > irank ) iend = iend + 1 + return + end !! -!! USAGE: CALL PARA_RANGE (N1,N2,NPROCS,IRANK,ISTA,IEND)(A) +!! USAGE: CALL PARA_RANGE2(N1,N2,NX,NY,NRANK,ISTA,IEND,JSTA,JEND)(A) !! INPUT ARGUMENT LIST: -!! N1 - FIRST INTERATE VALUE -!! N2 - LAST INTERATE VALUE -!! NPROCS - NUMBER OF MPI TASKS -!! IRANK - MY TAKS ID +!! N1 - LAAT INTERATE VALUE I dimension +!! N2 - LAST INTERATE VALUE J dimension +!! NX NUMBER OF subdomains in Z dimension +!! NY NUMBER OF subdomains in Y dimension +!! NX * NY should be the total number of MPI procs +!! NRANK - MY TAKS ID !! !! OUTPUT ARGUMENT LIST: -!! ISTA - FIRST LOOP VALUE -!! IEND - LAST LOOP VALUE +!! ISTA - FIRST LOOP VALUE I +!! IEND - LAST LOOP VALUE I +!! JSTA - FIRST LOOP VALUE J +!! JEND - LAST LOOP VALUE J !! !! OUTPUT FILES: !! STDOUT - RUN TIME STANDARD OUT. @@ -32,18 +58,20 @@ !! LANGUAGE: FORTRAN !! MACHINE : IBM RS/6000 SP !! - SUBROUTINE PARA_RANGE (N1,N2,NPROCS,IRANK,ISTA,IEND) + subroutine para_range2(im,jm,nx,ny,nrank,ista,iend,jsta,jend) implicit none - integer,intent(in) :: n1,n2,nprocs,irank - integer,intent(out) :: ista,iend - integer iwork1, iwork2 + integer,intent(in) :: im,jm,nx,ny,nrank + integer,intent(out) :: ista,iend,jsta,jend + integer :: ix,jx + + jx=nrank/nx + ix=nrank-(jx*nx) + call para_range(1,im,nx,ix,ista,iend) + call para_range(1,jm,ny,jx,jsta,jend) +! print 101,n,ix,jx,ista,iend,jsta,jend +! 101 format(16i8) + return + end - iwork1 = ( n2 - n1 + 1 ) / nprocs - iwork2 = mod ( n2 - n1 + 1, nprocs ) - ista = irank * iwork1 + n1 + min ( irank, iwork2 ) - iend = ista + iwork1 - 1 - if ( iwork2 > irank ) iend = iend + 1 - return - end diff --git a/sorc/ncep_post.fd/PROCESS.f b/sorc/ncep_post.fd/PROCESS.f index 034de6caf..1f0423a68 100644 --- a/sorc/ncep_post.fd/PROCESS.f +++ b/sorc/ncep_post.fd/PROCESS.f @@ -1,62 +1,40 @@ !> @file -! -!> SUBPROGRAM: PROCESS DRIVER FOR MAJOR POST ROUTINES. -!! PRGRMMR: TREADON ORG: W/NP2 DATE: 92-12-21 -!! -!! ABSTRACT: -!! THIS ROUTINE CALLS THE MAJOR POST PROCESSOR ROUTINES. -!! THESE ROUTINES ARE -!! MDLFLD - CALCULATE NMC SLP, SET BELOW SURFACE FIELDS, -!! AND POSTS DATA ON MODEL SURFACES. -!! MDL2P - POSTS DATA ON ISOBARIC SURFACES. -!! SURFCE - POSTS SOUNDING DATA, SURFACE BASED FIELDS, -!! AND STATIC OR FIXED FIELDS. -!! CLDRAD - POST SOUNDING/CLOUD/RADIATION FIELDS. -!! MISCLN - POST MISCELLANEOUS (SPECIAL) FIELDS. -!! FIXED - POST FIXED FIELDS. -!! -!! PROGRAM HISTORY LOG: -!! 92-12-21 RUSS TREADON -!! 98-06-01 T BLACK - CONVERSION OF POST FROM 1-D TO 2-D -!! 00-01-05 JIM TUCCILLO - MPI VERSION -!! 01-10-25 H CHUANG - MODIFIED TO PROCESS HYBRID MODEL OUTPUT -!! 02-06-19 MIKE BALDWIN - WRF VERSION -!! 11-02-04 Jun Wang - add grib2 option -!! -!! USAGE: CALL PROCESS -!! INPUT ARGUMENT LIST: -!! NONE -!! -!! OUTPUT ARGUMENT LIST: -!! NONE -!! -!! OUTPUT FILES: -!! NONE -!! -!! SUBPROGRAMS CALLED: -!! UTILITIES: -!! MDLFLD - POST DATA MDL SURFACES. -!! MDL2P - POST DATA ON PRESSURE SURFACES. -!! SURFCE - POST SURFACE BASED FIELDS. -!! CLDRAD - POST SOUNDING/CLOUD/RADIATION FIELDS. -!! MISCLN - POST MISCELLANEOUS FIELDS. -!! FIXED - POST FIXED FIELDS. -!! LIBRARY: -!! COMMON - OUTGRD -!! -!! ATTRIBUTES: -!! LANGUAGE: FORTRAN -!! MACHINE : CRAY C-90 -!! +!> @brief process() is a driver for major post routines. +!> +!> This routine calls the major post processor routines. +!>
+!> These routines are
+!> MDLFLD  - Calculate NMC SLP, set below surface fields,
+!>           and posts data on model surfaces.
+!> MDL2P   - Posts data on isobaric surfaces.
+!> SURFCE  - Posts sounding data  surface based fields,
+!>           and static or fixed fields.
+!> CLDRAD  - Post sounding/cloud/radiation fields.
+!> MISCLN  - Post miscellaneous (special) fields.
+!> FIXED   - Post fixed fields.
+!> 
+!> +!> ### Program History Log +!> Date | Programmer | Comments +!> -----|------------|--------- +!> 1992-12-21 | Russ Treadon | Initial +!> 1998-06-01 | T Black | Conversion from 1-D to 2-D +!> 2000-01-05 | Jim Tuccillo | MPI Version +!> 2001-10-25 | H CHUANG | Modified to process hybrid model output +!> 2002-06-19 | Mike Baldwin | WRF Version +!> 2011-02-04 | Jun Wang | Add grib2 option +!> 2023-01-24 | Sam Trahan | run IFI and compute its runtime +!> +!> @author Russ Treadon W/NP2 @date 1992-12-21 SUBROUTINE PROCESS(kth,kpv,th,pv,iostatusD3D) ! !---------------------------------------------------------------------------- ! use mpi, only: mpi_wtime - + use upp_ifi_mod, only: run_ifi use CTLBLK_mod, only: cfld, etafld2_tim, eta2p_tim, mdl2sigma_tim, surfce2_tim,& mdl2agl_tim, mdl2std_tim, mdl2thandpv_tim, calrad_wcloud_tim,& - cldrad_tim, miscln_tim, fixed_tim, ntlfld, me + cldrad_tim, miscln_tim, fixed_tim, ntlfld, me, run_ifi_tim !- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - implicit none ! @@ -76,37 +54,45 @@ SUBROUTINE PROCESS(kth,kpv,th,pv,iostatusD3D) ! START SUBROUTINE PROCESS. ! cfld=0 + if(me==0) write(0,*) "PROCESS starts" ! ! COMPUTE/POST FIELDS ON MDL SURFACES. ! btim = mpi_wtime() CALL MDLFLD + if(me==0) write(0,*) "PROCESS MDLFLD done" ETAFLD2_tim = ETAFLD2_tim +(mpi_wtime() - btim) ! ! COMPUTE/POST FIELDS ON PRESSURE SURFACES. btim = mpi_wtime() CALL MDL2P(iostatusD3D) + if(me==0) write(0,*) "PROCESS MDL2P done" ETA2P_tim = ETA2P_tim +(mpi_wtime() - btim) ! ! COMPUTE/POST FIELDS ON SIGMA SURFACES. btim = mpi_wtime() CALL MDL2SIGMA + if(me==0) write(0,*) "PROCESS MDL2SIGMA done" CALL MDL2SIGMA2 + if(me==0) write(0,*) "PROCESS MDL2SIGMA2 done" MDL2SIGMA_tim = MDL2SIGMA_tim +(mpi_wtime() - btim) ! ! COMPUTE/POST FIELDS ON AGL SURFCES. btim = mpi_wtime() CALL MDL2AGL + if(me==0) write(0,*) "PROCESS MDL2AGL done" MDL2AGL_tim = MDL2AGL_tim +(mpi_wtime() - btim) ! ! COMPUTE/POST SURFACE RELATED FIELDS. btim = mpi_wtime() CALL SURFCE + if(me==0) write(0,*) "PROCESS SURFCE done" SURFCE2_tim = SURFCE2_tim +(mpi_wtime() - btim) ! ! COMPUTE/POST SOUNDING AND CLOUD RELATED FIELDS. btim = mpi_wtime() CALL CLDRAD + if(me==0) write(0,*) "PROCESS CLDRAD done" CLDRAD_tim = CLDRAD_tim +(mpi_wtime() - btim) ! ! COMPUTE/POST TROPOPAUSE DATA, FD LEVEL FIELDS, @@ -114,6 +100,7 @@ SUBROUTINE PROCESS(kth,kpv,th,pv,iostatusD3D) ! AND LFM-NGM LOOK-ALIKE FIELDS. btim = mpi_wtime() CALL MISCLN + if(me==0) write(0,*) "PROCESS MISCLN done" MISCLN_tim = MISCLN_tim +(mpi_wtime() - btim) ! COMPUTE/POST TROPOPAUSE DATA, FD LEVEL FIELDS, @@ -121,27 +108,37 @@ SUBROUTINE PROCESS(kth,kpv,th,pv,iostatusD3D) ! AND LFM-NGM LOOK-ALIKE FIELDS. btim = mpi_wtime() CALL MDL2STD_P + if(me==0) write(0,*) "PROCESS MDL2STD_P done" MDL2STD_tim = MDL2STD_tim +(mpi_wtime() - btim) ! ! POST FIXED FIELDS. btim = mpi_wtime() CALL FIXED + if(me==0) write(0,*) "PROCESS FIXED done" FIXED_tim = FIXED_tim +(mpi_wtime() - btim) ! ! COMPUTE/POST FIELDS ON SIGMA SURFACES. btim = mpi_wtime() CALL MDL2THANDPV(kth,kpv,th,pv) + if(me==0) write(0,*) "PROCESS MDL2THANDPV done" MDL2THANDPV_tim = MDL2THANDPV_tim +(mpi_wtime() - btim) ! ! POST RADIANCE AND BRIGHTNESS FIELDS. btim = mpi_wtime() CALL CALRAD_WCLOUD + if(me==0) write(0,*) "PROCESS CALRAD_WCLOUD done" CALRAD_WCLOUD_tim = CALRAD_WCLOUD_tim +(mpi_wtime() - btim) ! +! IN-FLIGHT ICING PRODUCTS + btim = mpi_wtime() + CALL RUN_IFI + RUN_IFI_tim = RUN_IFI_tim +(mpi_wtime()-btim) +! ! END OF ROUTINE. ! NTLFLD=cfld if(me==0)print *,'nTLFLD=',NTLFLD + if(me==0) write(0,*) "PROCESS done" ! RETURN END diff --git a/sorc/ncep_post.fd/READCNTRL.F b/sorc/ncep_post.fd/READCNTRL.F deleted file mode 100644 index 5be718901..000000000 --- a/sorc/ncep_post.fd/READCNTRL.F +++ /dev/null @@ -1,240 +0,0 @@ -!> @file -! -!> SUBPROGRAM: READCNTRL READS CONTROL FILE -!! PRGRMMR: TREADON ORG: W/NP2 DATE: 92-12-20 -!! -!! ABSTRACT: -!! THIS ROUTINE READS THE CONTROL FILE SPECIFYING -!! DATA FORMAT(S) AND FIELD(S) TO POST. THE -!! ORDER OF OPERATIONS IS -!! (1) READ HEADER BLOCK OF CONTROL FILE, -!! (2) SET FLAGS, CLOSE OPEN UNITS -!! (3) READ BODY OF CONTROL FILE (FIELD SPECIFICATIONS) -!! -!! PROGRAM HISTORY LOG: -!! 92-12-20 RUSS TREADON -!! 93-06-15 RUSS TREADON - ADD PROJECTION CONTROL CARD -!! 98-06-01 BLACK - CONVERSION OF POST FROM 1-D TO 2-D -!! 98-07-17 MIKE BALDWIN - REMOVED PACK84 -!! 01-10-22 H CHUANG - MODIFIED TO PROCESS HYBRID MODEL OUTPUT -!! 02-01-16 MIKE BALDWIN - WRF VERSION -!! 21-03-11 B Cui - change local arrays to dimension (im,jsta:jend) -!! -!! USAGE: CALL READCNTRL(IEOF) -!! INPUT ARGUMENT LIST: -!! NONE -!! -!! OUTPUT ARGUMENT LIST: -!! IEOF - INTEGER FLAG FOR EOF IN CONTROL FILE. -!! IEOF=0 WHEN AN EOF IS READ IN THE -!! CONTROL FILE. IEOF=1 OTHERWISE. -!! -!! OUTPUT FILES: -!! NONE -!! -!! SUBPROGRAMS CALLED: -!! UTILITIES: -!! -!! LIBRARY: -!! COMMON - RQSTFLD -!! CTLBLK -!! -!! ATTRIBUTES: -!! LANGUAGE: FORTRAN -!! MACHINE : CRAY C-90 -!! - SUBROUTINE READCNTRL(kth,IEOF) -! - -! -! -! INCLUDE ETA GRID DIMENSIONS. SET/DERIVE PARAMETERS. -! - use lookup_mod,only: ITB,JTB,ITBQ,JTBQ - use ctlblk_mod, only: me, ifhr, ihrst, sdat, imdlty, im, jm - use rqstfld_mod, only: mxfld, iget, kgtype, datset, ritehd, & - field, dec, lvls, mxlvl, avbl, ident, nfld -!- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - implicit none -! - real,PARAMETER :: DTR=1.745329E-2,RTD=1./DTR -! -! DECLARE VARIABLES. -! - LOGICAL NORTH - CHARACTER*2 CHAR2 - CHARACTER*4 CHAR4 - CHARACTER*80 LINE -!jw - integer, intent(in) :: KTH - integer, intent(inout) :: IEOF - integer LCNTRL,LUNOUT,ISUM,L,IFLD,IAVBL -! -!****************************************************************************** -! START READCNTRL HERE. -! - - LCNTRL=14 - LUNOUT=60 - - IF(ME==0)THEN - WRITE(6,*)'READCNTRL: POSTING FCST HR ',IFHR,' FROM ', & - IHRST,'UTC ',SDAT(1),'-',SDAT(2),'-',SDAT(3),' RUN' - ENDIF -! -! INITIALIZE VARIABLES. -! IEOF IS THE END OF FILE FLAG FOR THE CONTROL FILE. -! ARRAY IGET IS THE "GET FIELD" FLAG ARRAY. -! - IEOF=0 - DO 100 IFLD=1,MXFLD - IGET(IFLD)=-1 - 100 CONTINUE -! - if(me==0)print*,'start reading control file' -! - READ(LCNTRL,1000,ERR=990,END=999) KGTYPE - READ(LCNTRL,1000,ERR=990,END=999) IMDLTY - READ(LCNTRL,1030,ERR=990,END=999) DATSET - 1000 FORMAT(T28,I5) - 1030 FORMAT(T28,A6) -! -! SET FLAG TO OPEN NEW OUTPUT FILE -! - RITEHD = .TRUE. -! -! ECHO HEADER INFO TO 6. -! - IF(ME==0)THEN - WRITE(6,*)'READCNTRL: HEADER INFORMATION' - WRITE(6,*)' KGTYPE : ',KGTYPE - WRITE(6,*)' IMDLTY : ',IMDLTY - WRITE(6,*)' DATSET : ',DATSET - WRITE(6,*)' RITEHD : ',RITEHD - ENDIF -! -! NOW READ WHICH FIELDS ON -! WHICH LEVELS TO INTERPOLATE TO THE OUTPUT GRID. THE -! CHARACTER STRING "DONE" MARKS THE END OF THE OUTPUT -! FIELD SPECIFICATIONS. -! - IFLD = 0 - 10 CONTINUE - READ(LCNTRL,1060,ERR=996) LINE - IF (INDEX(LINE,'DONE')/=0) GOTO 40 - IF (INDEX(LINE,'SCAL=')==0) GOTO 10 - IFLD = IFLD+1 - FIELD(IFLD) = LINE(3:22) - READ(LINE,1061) DEC(IFLD) - READ(LCNTRL,1090,ERR=996) (LVLS(L,IFLD),L=1,MXLVL) - 1060 FORMAT(A80) - 1061 FORMAT(30X,F4.1) - 1070 FORMAT(A4) - 1080 FORMAT(A2) - -#ifdef COMMCODE - 1090 FORMAT(T5,14(5I1,1X)) -#else - 1090 FORMAT(T5,100(5I1,1X)) -#endif -! -! SEE IF WE WANT THIS FIELD. THE SUM OF THE LEVELS -! INDICATORS MUST BE GREATER THAN ZERO IF WE WANT -! THIS FIELD. -! - ISUM = 0 - DO 15 L = 1,MXLVL - ISUM = ISUM + LVLS(L,IFLD) - 15 CONTINUE - IF (ISUM<1) THEN - IFLD = IFLD - 1 - GOTO 10 - ENDIF -! -! SEE IF REQUESTED FIELD IS AVAILABLE. IF NOT, -! WRITE MESSAGE TO 6 AND DECREMENT FIELD -! COUNTER BY ONE. THEN READ NEXT REQUESTED FIELD. -! - DO 20 IAVBL = 1,MXFLD - IF (INDEX(FIELD(IFLD),AVBL(IAVBL))/=0)GO TO 30 - 20 CONTINUE - IF(ME==0)THEN - WRITE(6,*)'FIELD ',FIELD(IFLD),' NOT AVAILABLE' - ENDIF - IFLD = IFLD-1 - GOTO 10 -! -! IF FIELD IS AVAILABLE, TURN THE GET SWITCH ON. -! - 30 CONTINUE - IGET(IAVBL) = IFLD - IDENT(IFLD) = IAVBL - GOTO 10 -! -! ALL DONE READING REQUESTED FIELDS FOR CURRENT OUTPUT GRID. -! SET NFLD TO TOTAL NUMBER OF REQUESTED OUTPUT FIELDS THAT -! ARE AVAILABLE. -! - 40 CONTINUE - - NFLD = IFLD -! skip creating ipv files if kth=0 and no isobaric fields are requested in ctl file - - - if(kth==0 .and. iget(013)<=0)go to 999 -! -! ECHO OUTPUT FIELDS/LEVELS TO 6. -! - IF(ME==0)THEN - WRITE(6,*)'BELOW ARE FIELD/LEVEL/SMOOTHING ', & - 'SPECIFICATIONS.,NFLD=',NFLD,'MXLVL=',MXLVL - ENDIF - DO 50 IFLD = 1,NFLD - IF(ME==0)THEN - WRITE(6,2060) FIELD(IFLD) - WRITE(6,2070) (LVLS(L,IFLD),L=1,MXLVL) - 2060 FORMAT('(',A20,')') - 2070 FORMAT('L=(',14(5I1,1X),')') - ENDIF - 50 CONTINUE -! -! WE HAVE AN OUTPUT GRID AND THE FIELDS TO GENERATE ON IT. -! SKIP OVER THE FOLLOWING EOF MESSAGE TO EXIT THIS ROUTINE. -! - GOTO 60 -! -! WE REACH THIS BLOCK ONLY IF THERE IS AN ERROR WHILE READING -! IN THE CONTROL FILE. PRINT AN ERROR MESSAGE TO STANDARD -! OUT AND CARRY ON. -! - 990 CONTINUE - IF(ME==0)THEN - WRITE(6,*)' READCNTRL: ERROR READING CNTRL HEADER INFO' - WRITE(6,*)' BELOW IS CNTRL GRID INFO' - WRITE(6,*)' KGTYPE,DATSET: ',KGTYPE,' ',DATSET - ENDIF - GOTO 999 - 996 CONTINUE - IF(ME==0)THEN - WRITE(6,*)' READCNTRL: ERROR READING CNTRL FLD/LVL INFO' - ENDIF -! -! WE REACH THIS BLOCK ONLY WHEN AN EOF HAS BEEN READ FROM -! THE CONTROL FILE. THAT MEANS WE'VE PROCESSED ALL GRIDS -! AND ALL FIELDS. WE'RE DONE. SET THE EOF FLAG TO ANY -! NONZERO INTEGER, SAY ONE. CLOSE THE UNIT CONNECTED TO -! THE LAST OUTPUT FILE AND EXIT THE ROUTINE. -! - 999 CONTINUE - IEOF=1 - CLOSE(LUNOUT) - IF(ME==0)THEN - WRITE(6,*)' READCNTRL: ALL GRIDS PROCESSED. ', & - 'CLOSED ',LUNOUT - ENDIF -! -! END OF ROUTINE. -! - 60 CONTINUE - RETURN - END diff --git a/sorc/ncep_post.fd/RQSTFLD.F b/sorc/ncep_post.fd/RQSTFLD.F deleted file mode 100644 index d1af714d5..000000000 --- a/sorc/ncep_post.fd/RQSTFLD.F +++ /dev/null @@ -1,2719 +0,0 @@ - module RQSTFLD_mod -!-------------------------------------------------------------------- -! revision history -! 2011-02-06 Jun Wang add grib2 option -! 2011-10-18 Sarah Lu add GOCART aerosol fields -! 2011-12-18 Sarah Lu add GOCART aerosol optical properties, mass -! fields, and production/removal fluxes -! 2011-12-29 Sarah Lu add GOCART AOD at multiple channels -! 2012-01-06 Sarah Lu add GOCART SS, OC, BC, SU aerosols -! 2012-01-07 Sarah Lu add air density and dpres -! 2012-01-27 Sarah Lu use index 601-700 for GOCART -! 2012-01-30 Jun Wang add post available fields from xml file for grib2 -! 2012-05-07 Tricia Slovacek use index 800-899 for satellite -! use index 900-949 for HWRF -! 2014-12-09 William Lewis added MSG/SEVIRI imager, -! GOES-13 and GOES-15 imagers, -! and completed SSMI and SSMIS (F13-F20) -! 2019-04-01 Sharon Nebuda added GOES-16 GOES-17 ABI IR Channels 7-16 -! 2019-04-22 Wen Meng increased model MXLVL to 500 -! 2019-05-08 Wen Meng added continuous accumulated precipitations(417, 418, -! 419). -! 2019-09-03 Jesse Meng added cape related variables for hrrr (950-957) -!-------------------------------------------------------------------- - - implicit none -! -! increase MXFLD each time you add a new field - INTEGER, PARAMETER :: MXFLD=1200 -#ifdef COMMCODE - INTEGER, PARAMETER :: MXLVL=70 -#else - INTEGER, PARAMETER :: MXLVL=500 -#endif - CHARACTER*20 AVBL(MXFLD),FIELD(MXFLD) - CHARACTER*50 AVBLGRB2(MXFLD) - CHARACTER*6 DATSET -! - LOGICAL RITEHD,RITE2 -! - integer :: KGTYPE,IOUTYP,SVALUE,NFLD,IGET(MXFLD), & - IQ(MXFLD),IS(MXFLD),ISMSTG(MXFLD), & - ISMFUL(MXFLD),ISMOUT(MXFLD),LVLS(MXLVL,MXFLD), & - IDENT(MXFLD),IFILV(MXFLD),IAVBLFLD(MXFLD), & - ID(25),IGDS(18) - real :: DEC(MXFLD) - integer :: num_post_afld - integer,allocatable :: LVLSXML(:,:) -! -!initialization -! -! THIS FILE CONTAINS ALL THE UNIQUE FIELDS THE -! ETA POST PROCESSOR CAN CURRENTLY GENERATE. -! -! IFILV IS FLAG FOR IDENTIFYING MASS OR VELOCITY POINT -! =0 DATA IS VELOCITY POINT -! =1 DATA IS MASS POINT -! AVBL IS CHARACTER STRING IDENTIFYING THE FIELD. -! IQ IS THE GRIB PDS OCTET 9 - PARAMETER (TABLE 2) -! IS IS THE GRIB PDS OCTET 10 - LEVEL TYPE (TABLE 3 & 3a) -! -! WANT MORE/DIFFERENT FIELDS? -! (1) ADD CODE TO CALCULATE FIELD(S) IN APPROPRIATE ROUTINE(S), -! (2) ADD FIELD(S) TO THIS LIST WITH A UNIQUE ITAG TAG, -! (3) EDIT INPUT (CONTROL) FILE ACCORDINGLY, -! (3) INCREASE PARAMETER MXFLD IN COMMON BLOCK RQSTFLD.comm. -! -! CURRENT NUMBER OF FIELDS LISTED: 180 -! -!0 1 2 3 4 5 6 7 -!234567890123456789012345678901234567890123456789012345678901234567890 -! - DATA IFILV(001),AVBL(001),IQ(001),IS(001),AVBLGRB2(001) & - & /1,'PRESS ON MDL SFCS ',001,109, & - & 'PRES ON hybrid_lvl'/ - DATA IFILV(077),AVBL(077),IQ(077),IS(077),AVBLGRB2(077) & - & /1,'HEIGHT ON MDL SFCS ',007,109, & - & 'HGT ON hybrid_lvl'/ - DATA IFILV(002),AVBL(002),IQ(002),IS(002),AVBLGRB2(002) & - & /1,'TEMP ON MDL SFCS ',011,109, & - & 'TMP ON hybrid_lvl'/ - DATA IFILV(003),AVBL(003),IQ(003),IS(003),AVBLGRB2(003) & - & /1,'POT TEMP ON MDL SFCS',013,109, & - & 'POT ON hybrid_lvl'/ - DATA IFILV(004),AVBL(004),IQ(004),IS(004),AVBLGRB2(004) & - & /1,'DWPT TEMP ON MDL SFC',017,109, & - & 'DPT ON hybrid_lvl'/ - DATA IFILV(005),AVBL(005),IQ(005),IS(005),AVBLGRB2(005) & - & /1,'SPEC HUM ON MDL SFCS',051,109, & - & 'SPF_H ON hybrid_lvl'/ - DATA IFILV(006),AVBL(006),IQ(006),IS(006),AVBLGRB2(006) & - & /1,'REL HUM ON MDL SFCS ',052,109, & - & 'RH ON hybrid_lvl'/ - DATA IFILV(083),AVBL(083),IQ(083),IS(083),AVBLGRB2(083) & - & /1,'MST CNVG ON MDL SFCS',135,109, & - & 'MCONV ON hybrid_lvl'/ - DATA IFILV(007),AVBL(007),IQ(007),IS(007),AVBLGRB2(007) & - & /0,'U WIND ON MDL SFCS ',033,109, & - & 'U_GRD ON hybrid_lvl'/ - DATA IFILV(008),AVBL(008),IQ(008),IS(008),AVBLGRB2(008) & - & /0,'V WIND ON MDL SFCS ',034,109, & - & 'V_GRD ON hybrid_lvl'/ - DATA IFILV(009),AVBL(009),IQ(009),IS(009),AVBLGRB2(009) & - & /1,'OMEGA ON MDL SFCS ',039,109, & - & 'V_VEL ON hybrid_lvl'/ - DATA IFILV(010),AVBL(010),IQ(010),IS(010),AVBLGRB2(010) & - & /1,'ABS VORT ON MDL SFCS',041,109, & - & 'ABS_V ON hybrid_lvl'/ - DATA IFILV(084),AVBL(084),IQ(084),IS(084),AVBLGRB2(084) & - & /1,'STRMFUNC ON MDL SFCS',035,109, & - & 'STRM ON hybrid_lvl'/ - DATA IFILV(011),AVBL(011),IQ(011),IS(011),AVBLGRB2(011) & - & /1,'TRBLNT KE ON MDL SFC',158,109, & - & 'TKE ON hybrid_lvl'/ - DATA IFILV(111),AVBL(111),IQ(111),IS(111),AVBLGRB2(111) & - & /1,'RCHDSN NO ON MDL SFC',254,109, & - & 'RI ON hybrid_lvl'/ - DATA IFILV(146),AVBL(146),IQ(146),IS(146),AVBLGRB2(146) & - & /1,'MASTER LENGTH SCALE ',226,109, & - & 'BMIXL ON hybrid_lvl'/ - DATA IFILV(147),AVBL(147),IQ(147),IS(147),AVBLGRB2(147) & - & /1,'ASYMPT MSTR LEN SCL ',227,109, & - & 'AMIXL ON hybrid_lvl'/ - DATA IFILV(012),AVBL(012),IQ(012),IS(012),AVBLGRB2(012) & - & /1,'HEIGHT OF PRESS SFCS',007,100, & - & 'HGT ON isobaric_sfc'/ - DATA IFILV(013),AVBL(013),IQ(013),IS(013),AVBLGRB2(013) & - & /1,'TEMP ON PRESS SFCS ',011,100, & - & 'TMP ON isobaric_sfc'/ - DATA IFILV(014),AVBL(014),IQ(014),IS(014),AVBLGRB2(014) & - & /1,'POT TEMP ON P SFCS ',013,100, & - & 'POT ON isobaric_sfc'/ - DATA IFILV(015),AVBL(015),IQ(015),IS(015),AVBLGRB2(015) & - & /1,'DWPT TEMP ON P SFCS ',017,100, & - & 'DPT ON isobaric_sfc'/ - DATA IFILV(016),AVBL(016),IQ(016),IS(016),AVBLGRB2(016) & - & /1,'SPEC HUM ON P SFCS ',051,100, & - & 'SPF_H ON isobaric_sfc'/ - DATA IFILV(017),AVBL(017),IQ(017),IS(017),AVBLGRB2(017) & - & /1,'REL HUMID ON P SFCS ',052,100, & - & 'RH ON isobaric_sfc'/ - DATA IFILV(085),AVBL(085),IQ(085),IS(085),AVBLGRB2(085) & - & /1,'MST CNVG ON P SFCS ',135,100, & - & 'MCONV ON isobaric_sfc'/ - DATA IFILV(018),AVBL(018),IQ(018),IS(018),AVBLGRB2(018) & - & /1,'U WIND ON PRESS SFCS',033,100, & - & 'U_GRD ON isobaric_sfc'/ - DATA IFILV(019),AVBL(019),IQ(019),IS(019),AVBLGRB2(019) & - & /1,'V WIND ON PRESS SFCS',034,100, & - & 'V_GRD ON isobaric_sfc'/ - DATA IFILV(020),AVBL(020),IQ(020),IS(020),AVBLGRB2(020) & - & /1,'OMEGA ON PRESS SFCS ',039,100, & - & 'V_VEL ON isobaric_sfc'/ - DATA IFILV(021),AVBL(021),IQ(021),IS(021),AVBLGRB2(021) & - & /1,'ABS VORT ON P SFCS ',041,100, & - & 'ABS_V ON isobaric_sfc'/ - DATA IFILV(086),AVBL(086),IQ(086),IS(086),AVBLGRB2(086) & - & /1,'STRMFUNC ON P SFCS ',035,100, & - & 'STRM ON isobaric_sfc'/ - DATA IFILV(022),AVBL(022),IQ(022),IS(022),AVBLGRB2(022) & - & /1,'TRBLNT KE ON P SFCS ',158,100, & - & 'TKE ON isobaric_sfc'/ - DATA IFILV(153),AVBL(153),IQ(153),IS(153),AVBLGRB2(153) & - & /1,'CLOUD WATR ON P SFCS',153,100, & - & 'CLWMR ON isobaric_sfc'/ - DATA IFILV(166),AVBL(166),IQ(166),IS(166),AVBLGRB2(166) & - & /1,'CLOUD ICE ON P SFCS ',058,100, & - & 'C_ICE ON isobaric_sfc'/ - DATA IFILV(023),AVBL(023),IQ(023),IS(023),AVBLGRB2(023) & - & /1,'MESINGER MEAN SLP ',130,102, & - & 'MSLET ON mean_sea_lvl'/ - DATA IFILV(105),AVBL(105),IQ(105),IS(105),AVBLGRB2(105) & - & /1,'SHUELL MEAN SLP ',002,102, & - & 'PRES ON mean_sea_lvl'/ - DATA IFILV(445),AVBL(445),IQ(445),IS(445),AVBLGRB2(445) & !445 - & /1,'MAPS SLP ',129,102, & - & 'MAPS PRMSL ON mean_sea_lvl'/ - DATA IFILV(138),AVBL(138),IQ(138),IS(138),AVBLGRB2(138) & - & /1,'SHELTER PRESSURE ',001,105, & - & 'PRES ON spec_hgt_lvl_above_grnd'/ - DATA IFILV(106),AVBL(106),IQ(106),IS(106),AVBLGRB2(106) & - & /1,'SHELTER TEMPERATURE ',011,105, & - & 'TMP ON spec_hgt_lvl_above_grnd'/ - DATA IFILV(112),AVBL(112),IQ(112),IS(112),AVBLGRB2(112) & - & /1,'SHELTER SPEC HUMID ',051,105, & - & 'SPF_H ON spec_hgt_lvl_above_grnd'/ - DATA IFILV(414),AVBL(414),IQ(414),IS(414),AVBLGRB2(414) & - & /1,'SHELTER MIX RATIO ',053,105, & - & 'MIXR ON spec_hgt_lvl_above_grnd'/ - DATA IFILV(113),AVBL(113),IQ(113),IS(113),AVBLGRB2(113) & - & /1,'SHELTER DEWPOINT ',017,105, & - & 'DPT ON spec_hgt_lvl_above_grnd'/ - DATA IFILV(114),AVBL(114),IQ(114),IS(114),AVBLGRB2(114) & - & /1,'SHELTER REL HUMID ',052,105, & - & 'RH ON spec_hgt_lvl_above_grnd'/ - DATA IFILV(064),AVBL(064),IQ(064),IS(064),AVBLGRB2(064) & - & /1,'U WIND AT ANEMOM HT ',033,105, & - & 'U_GRD ON spec_hgt_lvl_above_grnd'/ - DATA IFILV(065),AVBL(065),IQ(065),IS(065),AVBLGRB2(065) & - & /1,'V WIND AT ANEMOM HT ',034,105, & - & 'V_GRD ON spec_hgt_lvl_above_grnd'/ - DATA IFILV(158),AVBL(158),IQ(158),IS(158),AVBLGRB2(158) & - & /1,'POT TEMP AT 10 M ',013,105, & - & 'POT ON spec_hgt_lvl_above_grnd'/ - DATA IFILV(159),AVBL(159),IQ(159),IS(159),AVBLGRB2(159) & - & /1,'SPEC HUM AT 10 M ',051,105, & - & 'SRF_H ON spec_hgt_lvl_above_grnd'/ - DATA IFILV(024),AVBL(024),IQ(024),IS(024),AVBLGRB2(024) & - & /1,'SURFACE PRESSURE ',001,001, & - & 'PRES ON surface'/ - DATA IFILV(025),AVBL(025),IQ(025),IS(025),AVBLGRB2(025) & - & /1,'SURFACE HEIGHT ',007,001, & - & 'HGT ON surface'/ - DATA IFILV(027),AVBL(027),IQ(027),IS(027),AVBLGRB2(027) & - & /1,'SURFACE POT TEMP ',013,001, & - & 'POT ON surface'/ - DATA IFILV(028),AVBL(028),IQ(028),IS(028),AVBLGRB2(028) & - & /1,'SURFACE SPEC HUMID ',051,001, & - & 'SPF_H ON surface'/ - DATA IFILV(029),AVBL(029),IQ(029),IS(029),AVBLGRB2(029) & - & /1,'SURFACE DEWPOINT ',017,001, & - & 'DPT ON surface'/ - DATA IFILV(076),AVBL(076),IQ(076),IS(076),AVBLGRB2(076) & - & /1,'SURFACE REL HUMID ',052,001, & - & 'RH ON surface'/ - DATA IFILV(026),AVBL(026),IQ(026),IS(026),AVBLGRB2(026) & - & /1,'SFC (SKIN) TEMPRATUR',011,001, & - & 'TMP ON surface'/ - DATA IFILV(115),AVBL(115),IQ(115),IS(115),AVBLGRB2(115) & - & /1,'BOTTOM SOIL TEMP ',085,111, & - & 'TSOIL ON depth_bel_land_sfc'/ - DATA IFILV(116),AVBL(116),IQ(116),IS(116),AVBLGRB2(116) & - & /1,'SOIL TEMPERATURE ',085,112, & - & 'TSOIL ON depth_bel_land_sfc'/ - DATA IFILV(117),AVBL(117),IQ(117),IS(117),AVBLGRB2(117) & - & /1,'SOIL MOISTURE ',144,112, & - & 'SOILW ON depth_bel_land_sfc'/ - DATA IFILV(036),AVBL(036),IQ(036),IS(036),AVBLGRB2(036) & - & /1,'TOTAL SOIL MOISTURE ',086,112, & - & 'SOILM ON depth_bel_land_sfc'/ - DATA IFILV(118),AVBL(118),IQ(118),IS(118),AVBLGRB2(118) & - & /1,'PLANT CANOPY SFC WTR',223,001, & - & 'CNWAT ON surface'/ - DATA IFILV(119),AVBL(119),IQ(119),IS(119),AVBLGRB2(119) & - & /1,'SNOW WATER EQUIVALNT',065,001, & - & 'INST WEASD ON surface'/ - DATA IFILV(120),AVBL(120),IQ(120),IS(120),AVBLGRB2(120) & - & /1,'PERCENT SNOW COVER ',238,001, & - & 'SNOWC ON surface'/ - DATA IFILV(169),AVBL(169),IQ(169),IS(169),AVBLGRB2(169) & - & /1,'SFC EXCHANGE COEF ',208,001, & - & 'SFEXC ON surface'/ - DATA IFILV(170),AVBL(170),IQ(170),IS(170),AVBLGRB2(170) & - & /1,'GREEN VEG COVER ',087,001, & - & 'VEG ON surface'/ - DATA IFILV(171),AVBL(171),IQ(171),IS(171),AVBLGRB2(171) & - & /1,'SOIL MOISTURE AVAIL ',207,112, & - & 'MSTAV ON depth_bel_land_sfc'/ - DATA IFILV(152),AVBL(152),IQ(152),IS(152),AVBLGRB2(152) & - & /1,'INST GROUND HEAT FLX',155,001, & - & 'INST GFLUX ON surface'/ - DATA IFILV(030),AVBL(030),IQ(030),IS(030),AVBLGRB2(030) & - & /1,'LIFTED INDEX--SURFCE',131,101, & - & 'LFT_X ON isobaric_sfc'/ - DATA IFILV(031),AVBL(031),IQ(031),IS(031),AVBLGRB2(031) & - & /1,'LIFTED INDEX--BEST ',132,116, & - & '4LFTX ON spec_pres_above_grnd'/ - DATA IFILV(075),AVBL(075),IQ(075),IS(075),AVBLGRB2(075) & - & /1,'LIFTED INDEX--BNDLYR',024,116, & - & 'PLI ON spec_pres_above_grnd'/ - DATA IFILV(032),AVBL(032),IQ(032),IS(032),AVBLGRB2(032) & - & /1,'CNVCT AVBL POT ENRGY',157,001, & - & 'CAPE ON surface'/ - DATA IFILV(107),AVBL(107),IQ(107),IS(107),AVBLGRB2(107) & - & /1,'CNVCT INHIBITION ',156,001, & - & 'CIN ON surface'/ - DATA IFILV(080),AVBL(080),IQ(080),IS(080),AVBLGRB2(080) & - & /1,'PRECIPITABLE WATER ',054,200, & - & 'PWAT ON entire_atmos_single_lyr'/ - DATA IFILV(162),AVBL(162),IQ(162),IS(162),AVBLGRB2(162) & - & /1,'STORM REL HELICITY ',190,106, & - & 'HLCY ON spec_hgt_lvl_above_grnd'/ - DATA IFILV(163),AVBL(163),IQ(163),IS(163),AVBLGRB2(163) & - & /1,'U COMP STORM MOTION ',196,106, & - & 'USTM ON spec_hgt_lvl_above_grnd'/ - DATA IFILV(164),AVBL(164),IQ(164),IS(164),AVBLGRB2(164) & - & /1,'V COMP STORM MOTION ',197,106, & - & 'VSTM ON spec_hgt_lvl_above_grnd'/ - DATA IFILV(087),AVBL(087),IQ(087),IS(087),AVBLGRB2(087) & - & /1,'ACM TOTAL PRECIP ',061,001, & - & 'ACM A_PCP ON surface'/ - DATA IFILV(033),AVBL(033),IQ(033),IS(033),AVBLGRB2(033) & - & /1,'ACM CONVCTIVE PRECIP',063,001, & - & 'ACM ACPCP ON surface'/ - DATA IFILV(034),AVBL(034),IQ(034),IS(034),AVBLGRB2(034) & - & /1,'ACM GRD SCALE PRECIP',062,001, & - & 'ACM NCPCP ON surface'/ - DATA IFILV(417),AVBL(417),IQ(417),IS(417),AVBLGRB2(417) & - & /1,'CACM TOTAL PRECIP ',061,001, & - & 'CACM A_PCP ON surface'/ - DATA IFILV(418),AVBL(418),IQ(418),IS(418),AVBLGRB2(418) & - & /1,'CACM CONVCTIVE PRECIP',063,001, & - & 'CACM ACPCP ON surface'/ - DATA IFILV(419),AVBL(419),IQ(419),IS(419),AVBLGRB2(419) & - & /1,'ACM GRD SCALE PRECIP',062,001, & - & 'CACM NCPCP ON surface'/ - DATA IFILV(035),AVBL(035),IQ(035),IS(035),AVBLGRB2(035) & - & /1,'ACM SNOWFALL ',065,001, & - & 'ACM WEASD ON surface'/ - DATA IFILV(746),AVBL(746),IQ(746),IS(746),AVBLGRB2(746) & - & /1,'ACM GRAUPEL ',079,001, & - & 'ACM WEAGD ON surface'/ - DATA IFILV(724),AVBL(724),IQ(724),IS(724),AVBLGRB2(724) & - & /1,'SNOWFALL DENSITY ',089,001, & - & 'SNOWFALL DEN surface '/ - DATA IFILV(725),AVBL(725),IQ(725),IS(725),AVBLGRB2(725) & - & /1,'ACM SNOW DEPTH ',066,001, & - & 'ACM SNOWDEP on surface'/ - DATA IFILV(244),AVBL(244),IQ(244),IS(244),AVBLGRB2(244) & - & /1,'ACM GRD SCALE SW ICE',079,001, & - & 'ACM SNO_L ON surface'/ - DATA IFILV(121),AVBL(121),IQ(121),IS(121),AVBLGRB2(121) & - & /1,'ACM SNOW TOTAL/MELT ',099,001, & - & 'ACM SNO_M ON surface'/ - DATA IFILV(122),AVBL(122),IQ(122),IS(122),AVBLGRB2(122) & - & /1,'ACM STORM SFC RNOFF ',235,001, & - & 'ACM SSRUN ON surface'/ - DATA IFILV(123),AVBL(123),IQ(123),IS(123),AVBLGRB2(123) & - & /1,'ACM BSFL-GDWR RNOFF ',234,001, & - & 'ACM BGRUN ON surface'/ - DATA IFILV(160),AVBL(160),IQ(160),IS(160),AVBLGRB2(160) & - & /1,'INSTANT PRECIP TYPE ',140,001, & - & 'INST CRAIN ON surface'/ - DATA IFILV(407),AVBL(407),IQ(407),IS(407),AVBLGRB2(407) & !407 - & /1,'GSD PRECIP TYPE ',140,001, & - & 'GSD INST CRAIN ON surface'/ - DATA IFILV(167),AVBL(167),IQ(167),IS(167),AVBLGRB2(167) & - & /1,'INSTANT PRECIP RATE ',059,001, & - & 'INST PRATE ON surface'/ - DATA IFILV(172),AVBL(172),IQ(172),IS(172),AVBLGRB2(172) & - & /1,'FROZEN FRAC CLD SCHM',194,001, & - & 'CPOFP ON surface'/ - DATA IFILV(124),AVBL(124),IQ(124),IS(124),AVBLGRB2(124) & - & /1,'CLD WTR ON MDL SFCS ',153,109, & - & 'CLWMR ON hybrid_lvl'/ - DATA IFILV(125),AVBL(125),IQ(125),IS(125),AVBLGRB2(125) & - & /1,'CLD ICE ON MDL SFCS ',058,109, & - & 'C_ICE ON hybrid_lvl'/ - DATA IFILV(145),AVBL(145),IQ(145),IS(145),AVBLGRB2(145) & - & /1,'CLD FRAC ON MDL SFCS',071,109, & - & 'T_CDC ON hybrid_lvl'/ - DATA IFILV(037),AVBL(037),IQ(037),IS(037),AVBLGRB2(037) & - & /1,'LOW CLOUD FRACTION ',073,214, & - & 'L_CDC ON low_cloud_lyr'/ - DATA IFILV(038),AVBL(038),IQ(038),IS(038),AVBLGRB2(038) & - & /1,'MID CLOUD FRACTION ',074,224, & - & 'M_CDC ON mid_cloud_lyr'/ - DATA IFILV(039),AVBL(039),IQ(039),IS(039),AVBLGRB2(039) & - & /1,'HIGH CLOUD FRACTION ',075,234, & - & 'H_CDC ON high_cloud_lyr'/ - DATA IFILV(161),AVBL(161),IQ(161),IS(161),AVBLGRB2(161) & - & /1,'TOTAL CLD FRACTION ',071,200, & - & 'INST T_CDC ON entire_atmos'/ - DATA IFILV(144),AVBL(144),IQ(144),IS(144),AVBLGRB2(144) & - & /1,'AVG TOTAL CLD FRAC ',071,200, & - & 'AVE T_CDC ON entire_atmos'/ - DATA IFILV(139),AVBL(139),IQ(139),IS(139),AVBLGRB2(139) & - & /1,'AVG STRAT CLD FRAC ',213,200, & - & 'AVE CDLYR ON entire_atmos'/ - DATA IFILV(143),AVBL(143),IQ(143),IS(143),AVBLGRB2(143) & - & /1,'AVG CNVCT CLD FRAC ',072,200, & - & 'AVE CDCON ON entire_atmos'/ - DATA IFILV(148),AVBL(148),IQ(148),IS(148),AVBLGRB2(148) & - & /1,'CLOUD BOT PRESSURE ',001,002, & - & 'PRES ON cloud_base'/ - DATA IFILV(798),AVBL(798),IQ(798),IS(798),AVBLGRB2(798) & - & /1,'GSD CLD BOT PRESSURE',001,002, & - & 'GSD PRES ON cloud_base'/ - DATA IFILV(149),AVBL(149),IQ(149),IS(149),AVBLGRB2(149) & - & /1,'CLOUD TOP PRESSURE ',001,003, & - & 'PRES ON cloud_top'/ - DATA IFILV(406),AVBL(406),IQ(406),IS(406),AVBLGRB2(406) & - & /1,'GSD CLD TOP PRESSURE',001,003, & - & 'PRES ON cloud_top'/ !406 - DATA IFILV(109),AVBL(109),IQ(109),IS(109),AVBLGRB2(109) & - & /1,'LCL AGL HEIGHT ',007,005, & - & 'HGT ON lvl_of_adiab_cond_from_sfc'/ - DATA IFILV(110),AVBL(110),IQ(110),IS(110),AVBLGRB2(110) & - & /1,'LCL PRESSURE ',001,005, & - & 'PRES ON lvl_of_adiab_cond_from_sfc'/ - DATA IFILV(078),AVBL(078),IQ(078),IS(078),AVBLGRB2(078) & - & /1,'AVE GRDSCL RN TMPTDY',241,109, & - & 'AVE LRGHR ON hybrid_lvl'/ - DATA IFILV(079),AVBL(079),IQ(079),IS(079),AVBLGRB2(079) & - & /1,'AVE CNVCT RN TMPTDY ',242,109, & - & 'AVE CNVHR ON hybrid_lvl'/ - DATA IFILV(168),AVBL(168),IQ(168),IS(168),AVBLGRB2(168) & - & /1,'CLOUD TOP TEMPS ',011,003, & - & 'TMP ON cloud_top'/ - DATA IFILV(140),AVBL(140),IQ(140),IS(140),AVBLGRB2(140) & - & /1,'RADFLX CNVG TMP TNDY',216,109, & - & 'TTRAD ON hybrid_lvl'/ - DATA IFILV(040),AVBL(040),IQ(040),IS(040),AVBLGRB2(040) & - & /1,'SW RAD TEMP TNDY ',250,109, & - & 'SWHR ON hybrid_lvl'/ - DATA IFILV(041),AVBL(041),IQ(041),IS(041),AVBLGRB2(041) & - & /1,'LW RAD TEMP TNDY ',251,109, & - & 'LWHR ON hybrid_lvl'/ - DATA IFILV(141),AVBL(141),IQ(141),IS(141),AVBLGRB2(141) & - & /1,'INSTN OUT SFC SW RAD',211,001, & - & 'INST USWRF ON surface'/ - DATA IFILV(142),AVBL(142),IQ(142),IS(142),AVBLGRB2(142) & - & /1,'INSTN OUT SFC LW RAD',212,001, & - & 'INST ULWRF ON surface'/ - DATA IFILV(126),AVBL(126),IQ(126),IS(126),AVBLGRB2(126) & - & /1,'AVE INCMG SFC SW RAD',204,001, & - & 'AVE DSWRF ON surface'/ - DATA IFILV(127),AVBL(127),IQ(127),IS(127),AVBLGRB2(127) & - & /1,'AVE INCMG SFC LW RAD',205,001, & - & 'AVE DLWRF ON surface'/ - DATA IFILV(128),AVBL(128),IQ(128),IS(128),AVBLGRB2(128) & - & /1,'AVE OUTGO SFC SW RAD',211,001, & - & 'AVE USWRF ON surface'/ - DATA IFILV(129),AVBL(129),IQ(129),IS(129),AVBLGRB2(129) & - & /1,'AVE OUTGO SFC LW RAD',212,001, & - & 'AVE ULWRF ON surface'/ - DATA IFILV(130),AVBL(130),IQ(130),IS(130),AVBLGRB2(130) & - & /1,'AVE OUTGO TOA SW RAD',211,008, & - & 'AVE USWRF ON top_of_atmos'/ - DATA IFILV(131),AVBL(131),IQ(131),IS(131),AVBLGRB2(131) & - & /1,'AVE OUTGO TOA LW RAD',212,008, & - & 'AVE ULWRF ON top_of_atmos'/ - DATA IFILV(156),AVBL(156),IQ(156),IS(156),AVBLGRB2(156) & - & /1,'INSTN INC SFC SW RAD',204,001, & - & 'INST DSWRF ON surface'/ - DATA IFILV(157),AVBL(157),IQ(157),IS(157),AVBLGRB2(157) & - & /1,'INSTN INC SFC LW RAD',205,001, & - & 'INST DLWRF ON surface'/ - DATA IFILV(044),AVBL(044),IQ(044),IS(044),AVBLGRB2(044) & - & /1,'ROUGHNESS LENGTH ',083,001, & - & 'SFC_R ON surface'/ - DATA IFILV(045),AVBL(045),IQ(045),IS(045),AVBLGRB2(045) & - & /1,'FRICTION VELOCITY ',253,001, & - & 'FRICV ON surface'/ - DATA IFILV(132),AVBL(132),IQ(132),IS(132),AVBLGRB2(132) & - & /1,'SFC DRAG COEFFICIENT',252,001, & - & 'CD ON surface'/ - DATA IFILV(133),AVBL(133),IQ(133),IS(133),AVBLGRB2(133) & - & /1,'SFC U WIND STRESS ',124,001, & - & 'U_FLX ON surface'/ - DATA IFILV(134),AVBL(134),IQ(134),IS(134),AVBLGRB2(134) & - & /1,'SFC V WIND STRESS ',125,001, & - & 'V_FLX ON surface'/ - DATA IFILV(043),AVBL(043),IQ(043),IS(043),AVBLGRB2(043) & - & /1,'AVE SFC SENHEAT FX ',122,001, & - & 'AVE SHTFL ON surface'/ - DATA IFILV(135),AVBL(135),IQ(135),IS(135),AVBLGRB2(135) & - & /1,'AVE GROUND HEAT FX ',155,001, & - & 'AVE GFLUX ON surface'/ - DATA IFILV(136),AVBL(136),IQ(136),IS(136),AVBLGRB2(136) & - & /1,'AVE SNO PHSCNG HT FX',229,001, & - & 'AVE SNOHF ON surface'/ - DATA IFILV(042),AVBL(042),IQ(042),IS(042),AVBLGRB2(042) & - & /1,'AVE SFC LATHEAT FX ',121,001, & - & 'AVE LHTFL ON surface'/ - DATA IFILV(046),AVBL(046),IQ(046),IS(046),AVBLGRB2(046) & - & /1,'AVE SFC MOMENTUM FX ',172,001, & - & 'AVE M_FLX ON surface'/ - DATA IFILV(047),AVBL(047),IQ(047),IS(047),AVBLGRB2(047) & - & /1,'ACC SFC EVAPORATION ',057,001, & - & 'ACM EVP ON surface'/ - DATA IFILV(137),AVBL(137),IQ(137),IS(137),AVBLGRB2(137) & - & /1,'ACC POT EVAPORATION ',228,001, & - & 'ACM PEVAP ON surface'/ - DATA IFILV(154),AVBL(154),IQ(154),IS(154),AVBLGRB2(154) & - & /1,'INST SFC SENHEAT FX ',122,001, & - & 'INST SHTFL ON surface'/ - DATA IFILV(155),AVBL(155),IQ(155),IS(155),AVBLGRB2(155) & - & /1,'INST SFC LATHEAT FX ',121,001, & - & 'INST LHTFL ON surface'/ - DATA IFILV(048),AVBL(048),IQ(048),IS(048),AVBLGRB2(048) & - & /1,'LATITUDE ',176,001, & - & 'NLAT ON surface'/ - DATA IFILV(049),AVBL(049),IQ(049),IS(049),AVBLGRB2(049) & - & /1,'LONGITUDE ',177,001, & - & 'ELON ON surface'/ - DATA IFILV(050),AVBL(050),IQ(050),IS(050),AVBLGRB2(050) & - & /1,'LAND/SEA MASK ',081,001, & - & 'LAND ON surface'/ - DATA IFILV(051),AVBL(051),IQ(051),IS(051),AVBLGRB2(051) & - & /1,'SEA ICE MASK ',091,001, & - & 'ICE_C ON surface'/ - DATA IFILV(052),AVBL(052),IQ(052),IS(052),AVBLGRB2(052) & - & /1,'MASS POINT MDL SFC ',173,001, & - & 'LMH ON surface'/ - DATA IFILV(053),AVBL(053),IQ(053),IS(053),AVBLGRB2(053) & - & /1,'VEL POINT MDL SFC ',174,001, & - & 'LMV ON surface'/ - DATA IFILV(150),AVBL(150),IQ(150),IS(150),AVBLGRB2(150) & - & /1,'SFC MIDDAY ALBEDO ',084,001, & - & 'ALBDO ON surface'/ - DATA IFILV(151),AVBL(151),IQ(151),IS(151),AVBLGRB2(151) & - & /1,'SEA SFC TEMPERATURE ',080,001, & - & 'WTMP ON surface'/ - DATA IFILV(054),AVBL(054),IQ(054),IS(054),AVBLGRB2(054) & - & /1,'PRESS AT TROPOPAUSE ',001,007, & - & 'PRES ON tropopause'/ - DATA IFILV(055),AVBL(055),IQ(055),IS(055),AVBLGRB2(055) & - & /1,'TEMP AT TROPOPAUSE ',011,007, & - & 'TMP ON tropopause'/ - DATA IFILV(108),AVBL(108),IQ(108),IS(108),AVBLGRB2(108) & - & /1,'POTENTL TEMP AT TROP',013,007, & - & 'POT ON tropopause'/ - DATA IFILV(056),AVBL(056),IQ(056),IS(056),AVBLGRB2(056) & - & /1,'U WIND AT TROPOPAUSE',033,007, & - & 'U_GRD ON tropopause'/ - DATA IFILV(057),AVBL(057),IQ(057),IS(057),AVBLGRB2(057) & - & /1,'V WIND AT TROPOPAUSE',034,007, & - & 'V_GRD ON tropopause'/ - DATA IFILV(058),AVBL(058),IQ(058),IS(058),AVBLGRB2(058) & - & /1,'SHEAR AT TROPOPAUSE ',136,007, & - & 'VW_SH ON tropopause'/ - DATA IFILV(059),AVBL(059),IQ(059),IS(059),AVBLGRB2(059) & - & /1,'TEMP AT FD HEIGHTS ',011,103, & - & 'TMP ON spec_alt_above_mean_sea_lvl'/ - DATA IFILV(060),AVBL(060),IQ(060),IS(060),AVBLGRB2(060) & - & /1,'U WIND AT FD HEIGHTS',033,103, & - & 'U_GRD ON spec_alt_above_mean_sea_lvl'/ - DATA IFILV(061),AVBL(061),IQ(061),IS(061),AVBLGRB2(061) & - & /1,'V WIND AT FD HEIGHTS',034,103, & - & 'V_GRD ON spec_alt_above_mean_sea_lvl'/ - DATA IFILV(062),AVBL(062),IQ(062),IS(062),AVBLGRB2(062) & - & /1,'HEIGHT OF FRZ LVL ',007,004, & - & 'HGT ON 0C_isotherm'/ - DATA IFILV(063),AVBL(063),IQ(063),IS(063),AVBLGRB2(063) & - & /1,'REL HUMID AT FRZ LVL',052,004, & - & 'RH ON 0C_isotherm'/ - DATA IFILV(165),AVBL(165),IQ(165),IS(165),AVBLGRB2(165) & - & /1,'HIGHEST FREEZE LVL ',007,204, & - & 'HGT ON hghst_trop_frz_lvl'/ - DATA IFILV(350),AVBL(350),IQ(350),IS(350),AVBLGRB2(350) & - & /1,'HIGHEST FRZ LVL RH ',052,204, & - & 'RH ON hghst_trop_frz_lvl'/ - DATA IFILV(067),AVBL(067),IQ(067),IS(067),AVBLGRB2(067) & - & /1,'PRESS IN BNDRY LYR ',001,116, & - & 'PRES ON spec_pres_above_grnd'/ - DATA IFILV(068),AVBL(068),IQ(068),IS(068),AVBLGRB2(068) & - & /1,'TEMP IN BNDRY LYR ',011,116, & - & 'TMP ON spec_pres_above_grnd'/ - DATA IFILV(069),AVBL(069),IQ(069),IS(069),AVBLGRB2(069) & - & /1,'POT TMP IN BNDRY LYR',013,116, & - & 'POT ON spec_pres_above_grnd'/ - DATA IFILV(070),AVBL(070),IQ(070),IS(070),AVBLGRB2(070) & - & /1,'DWPT IN BNDRY LYR ',017,116, & - & 'DPT ON spec_pres_above_grnd'/ - DATA IFILV(071),AVBL(071),IQ(071),IS(071),AVBLGRB2(071) & - & /1,'SPC HUM IN BNDRY LYR',051,116, & - & 'SPF_H ON spec_pres_above_grnd'/ - DATA IFILV(072),AVBL(072),IQ(072),IS(072),AVBLGRB2(072) & - & /1,'REL HUM IN BNDRY LYR',052,116, & - & 'RH ON spec_pres_above_grnd'/ - DATA IFILV(088),AVBL(088),IQ(088),IS(088),AVBLGRB2(088) & - & /1,'MST CNV IN BNDRY LYR',135,116, & - & 'MCONV ON spec_pres_above_grnd'/ - DATA IFILV(089),AVBL(089),IQ(089),IS(089),AVBLGRB2(089) & - & /1,'P WATER IN BNDRY LYR',054,116, & - & 'PWAT ON spec_pres_above_grnd'/ - DATA IFILV(073),AVBL(073),IQ(073),IS(073),AVBLGRB2(073) & - & /1,'U WIND IN BNDRY LYR ',033,116, & - & 'U_GRD ON spec_pres_above_grnd'/ - DATA IFILV(074),AVBL(074),IQ(074),IS(074),AVBLGRB2(074) & - & /1,'V WIND IN BNDRY LYR ',034,116, & - & 'V_GRD ON spec_pres_above_grnd'/ - DATA IFILV(090),AVBL(090),IQ(090),IS(090),AVBLGRB2(090) & - & /1,'OMEGA IN BNDRY LYR ',039,116, & - & 'V_VEL ON spec_pres_above_grnd'/ - DATA IFILV(066),AVBL(066),IQ(066),IS(066),AVBLGRB2(066) & - & /1,'LFM 0.33-1.00 RELHUM',052,108, & - & 'RH ON sigma_lvl'/ - DATA IFILV(081),AVBL(081),IQ(081),IS(081),AVBLGRB2(081) & - & /1,'LFM 0.66-1.00 RELHUM',052,108, & - & 'RH ON sigma_lvl'/ - DATA IFILV(082),AVBL(082),IQ(082),IS(082),AVBLGRB2(082) & - & /1,'LFM 0.33-0.66 RELHUM',052,108, & - & 'RH ON sigma_lvl'/ - DATA IFILV(104),AVBL(104),IQ(104),IS(104),AVBLGRB2(104) & - & /1,'LFM 0.33-1.00 PWAT ',054,108, & - & 'PWAT ON sigma_lvl'/ - DATA IFILV(091),AVBL(091),IQ(091),IS(091),AVBLGRB2(091) & - & /1,'NGM 0.98230 PRESSURE',001,107, & - & 'PRES ON sigma_lvl'/ - DATA IFILV(092),AVBL(092),IQ(092),IS(092),AVBLGRB2(092) & - & /1,'NGM 0.98230 TMPRATUR',011,107, & - & 'TMP ON sigma_lvl'/ - DATA IFILV(093),AVBL(093),IQ(093),IS(093),AVBLGRB2(093) & - & /1,'NGM 0.98230 SPC HUM ',051,107, & - & 'SPF_H ON sigma_lvl'/ - DATA IFILV(094),AVBL(094),IQ(094),IS(094),AVBLGRB2(094) & - & /1,'NGM 0.98230 REL HUM ',052,107, & - & 'RH ON sigma_lvl'/ - DATA IFILV(095),AVBL(095),IQ(095),IS(095),AVBLGRB2(095) & - & /1,'NGM 0.98230 U WIND ',033,107, & - & 'U_GRD ON sigma_lvl'/ - DATA IFILV(096),AVBL(096),IQ(096),IS(096),AVBLGRB2(096) & - & /1,'NGM 0.98230 V WIND ',034,107, & - & 'V_GRD ON sigma_lvl'/ - DATA IFILV(097),AVBL(097),IQ(097),IS(097),AVBLGRB2(097) & - & /1,'NGM 0.89671 TMPRATUR',011,107, & - & 'TMP ON sigma_lvl'/ - DATA IFILV(098),AVBL(098),IQ(098),IS(098),AVBLGRB2(098) & - & /1,'NGM 0.78483 TMPRATUR',011,107, & - & 'TMP ON sigma_lvl'/ - DATA IFILV(099),AVBL(099),IQ(099),IS(099),AVBLGRB2(099) & - & /1,'NGM 0.47-1.00 RELHUM',052,108, & - & 'RH ON sigma_lvl'/ - DATA IFILV(100),AVBL(100),IQ(100),IS(100),AVBLGRB2(100) & - & /1,'NGM 0.47-0.96 RELHUM',052,108, & - & 'RH ON sigma_lvl'/ - DATA IFILV(101),AVBL(101),IQ(101),IS(101),AVBLGRB2(101) & - & /1,'NGM 0.18-0.47 RELHUM',052,108, & - & 'RH ON sigma_lvl'/ - DATA IFILV(102),AVBL(102),IQ(102),IS(102),AVBLGRB2(102) & - & /1,'NGM 0.84-0.98 RELHUM',052,108, & - & 'RH ON sigma_lvl'/ - DATA IFILV(103),AVBL(103),IQ(103),IS(103),AVBLGRB2(103) & - & /1,'NGM 0.85-1.00 QCONVG',135,108, & - & 'MCONV ON sigma_lvl'/ - DATA IFILV(173),AVBL(173),IQ(173),IS(173),AVBLGRB2(173) & - & /1,'MAX WIND PRESS LEVEL',001,006, & - & 'PRES ON max_wind'/ - DATA IFILV(174),AVBL(174),IQ(174),IS(174),AVBLGRB2(174) & - & /1,'MAX WIND HGHT LEVEL ',007,006, & - & 'HGT ON max_wind'/ - DATA IFILV(175),AVBL(175),IQ(175),IS(175),AVBLGRB2(175) & - & /1,'U COMP MAX WIND ',033,006, & - & 'U_GRD ON max_wind'/ - DATA IFILV(176),AVBL(176),IQ(176),IS(176),AVBLGRB2(176) & - & /1,'V COMP MAX WIND ',034,006, & - & 'V_GRD ON max_wind'/ - DATA IFILV(177),AVBL(177),IQ(177),IS(177),AVBLGRB2(177) & - & /1,'HEIGHT AT TROPOPAUSE',007,007, & - & 'HGT ON tropopause'/ - DATA IFILV(178),AVBL(178),IQ(178),IS(178),AVBLGRB2(178) & - & /1,'CLOUD BOTTOM HEIGHT ',007,002, & - & 'HGT ON cloud_base'/ - DATA IFILV(179),AVBL(179),IQ(179),IS(179),AVBLGRB2(179) & - & /1,'CLOUD TOP HEIGHT ',007,003, & - & 'HGT ON cloud_top'/ - DATA IFILV(180),AVBL(180),IQ(180),IS(180),AVBLGRB2(180) & - & /1,'VISIBILITY ',020,001, & - & 'VIS ON surface'/ - DATA IFILV(408),AVBL(408),IQ(408),IS(408),AVBLGRB2(408) & - & /1,'GSD CLD BOT HEIGHT ',007,002, & - & 'GSD HGT ON cloud_base'/ !408 - DATA IFILV(409),AVBL(409),IQ(409),IS(409),AVBLGRB2(409) & - & /1,'GSD CLD TOP HEIGHT ',007,003, & - & 'GSD HGT ON cloud_top'/ !408 - DATA IFILV(410),AVBL(410),IQ(410),IS(410),AVBLGRB2(410) & - & /1,'GSD VISIBILITY ',020,003, & - & 'GSD VIS ON cloud top'/ !410 -! CRA - DATA IFILV(411),AVBL(411),IQ(411),IS(411),AVBLGRB2(411) & - & /1,'INSTN WIND POWER AGL',126,105, & - & 'INST WMIXE ON spec_hgt_lvl_above_grnd'/ !411 - DATA IFILV(412),AVBL(412),IQ(412),IS(412),AVBLGRB2(412) & - & /1,'U WIND AT 80M AGL ',049,105, & - & 'UGRD ON 80M spec_hgt_lvl_above_grnd'/ !412 - DATA IFILV(413),AVBL(413),IQ(413),IS(413),AVBLGRB2(413) & - & /1,'V WIND AT 80M AGL ',050,105, & - & 'VGRD ON 80M spec_hgt_lvl_above_grnd'/ !413 -! - DATA IFILV(181),AVBL(181),IQ(181),IS(181),AVBLGRB2(181) & - & /1,'RAIN ON MDL SFCS ',170,109, & - & 'RWMR ON hybrid_lvl'/ - DATA IFILV(182),AVBL(182),IQ(182),IS(182),AVBLGRB2(182) & - & /1,'SNOW ON MDL SFCS ',171,109, & - & 'SNMR ON hybrid_lvl'/ - DATA IFILV(183),AVBL(183),IQ(183),IS(183),AVBLGRB2(183) & - & /1,'RAIN ON P SFCS ',170,100, & - & 'RWMR ON isobaric_sfc'/ - DATA IFILV(184),AVBL(184),IQ(184),IS(184),AVBLGRB2(184) & - & /1,'SNOW ON P SFCS ',171,100, & - & 'SNMR ON isobaric_sfc'/ - DATA IFILV(415),AVBL(415),IQ(415),IS(415),AVBLGRB2(415) & - & /1,'GRAUPEL ON MDL SFCS ',179,109, & - & 'GRLE ON hybrid_lvl'/ !415 - DATA IFILV(416),AVBL(416),IQ(416),IS(416),AVBLGRB2(416) & - & /1,'GRAUPEL ON P SFCS ',179,100, & - & 'GRLE ON isobaric_sfc'/ !416 - -! SRD - DATA IFILV(420),AVBL(420),IQ(420),IS(420),AVBLGRB2(420) & - & /1,'MAX UPDRAFT HELICITY',236,106, & - & 'MAX UPHL ON spec_hgt_lvl_above_grnd'/ !420 - DATA IFILV(421),AVBL(421),IQ(421),IS(421),AVBLGRB2(421) & - & /1,'MAX 1km REFLECTIVITY',235,105, & - & 'MAX REF ON 1000M spec_hgt_lvl_above_grnd'/ !421 - DATA IFILV(422),AVBL(422),IQ(422),IS(422),AVBLGRB2(422) & - & /1,'MAX 10m WIND SPEED ',229,105, & - & 'MAX WIND ON 10M spec_hgt_lvl_above_grnd'/ !422 - DATA IFILV(423),AVBL(423),IQ(423),IS(423),AVBLGRB2(423) & - & /1,'MAX UPDRAFT VERT VEL',237,106, & - & 'MAX UPDZDT ON spec_hgt_lvl_above_grnd'/ !423 - DATA IFILV(424),AVBL(424),IQ(424),IS(424),AVBLGRB2(424) & - & /1,'MAX DNDRAFT VERT VEL',238,106, & - & 'MAX DNDZDT ON spec_hgt_lvl_above_grnd'/ !424 - DATA IFILV(425),AVBL(425),IQ(425),IS(425),AVBLGRB2(425) & - & /1,'MEAN VERT VEL ',040,108, & - & 'AVE DZDT ON spec_hgt_lvl_above_grnd'/ !425 - DATA IFILV(426),AVBL(426),IQ(426),IS(426),AVBLGRB2(426) & - & /1,'ECHO TOPS IN KFT ',007,105, & - & 'HGT ON spec_hgt_lvl_above_grnd'/ !426 - DATA IFILV(427),AVBL(427),IQ(427),IS(427),AVBLGRB2(427) & - & /1,'UPDRAFT HELICITY PRM',227,106, & - & 'UPHL ON spec_hgt_lvl_above_grnd'/ !427 - DATA IFILV(428),AVBL(428),IQ(428),IS(428),AVBLGRB2(428) & - & /1,'VERT INTEG GRAUP ',179,200, & - & 'TCOLG ON entire_atmos_single_lyr'/ !428 - DATA IFILV(429),AVBL(429),IQ(429),IS(429),AVBLGRB2(429) & - & /1,'MAX VERT INTEG GRAUP',239,200, & - & 'MAXVIG ON entire_atmos_single_lyr'/ !429 -! SRD -! CRA - DATA IFILV(430),AVBL(430),IQ(430),IS(430),AVBLGRB2(430) & - & /1,'U COMP 0-1 KM SHEAR ',045,106, & - & 'UUCSH ON spec_hgt_lvl_above_grnd'/ !430 - DATA IFILV(431),AVBL(431),IQ(431),IS(431),AVBLGRB2(431) & - & /1,'V COMP 0-1 KM SHEAR ',046,106, & - & 'VVCSH ON spec_hgt_lvl_above_grnd'/ !431 - DATA IFILV(432),AVBL(432),IQ(432),IS(432),AVBLGRB2(432) & - & /1,'U COMP 0-6 KM SHEAR ',045,106, & - & 'UUCSH ON spec_hgt_lvl_above_grnd'/ !432 - DATA IFILV(433),AVBL(433),IQ(433),IS(433),AVBLGRB2(433) & - & /1,'V COMP 0-6 KM SHEAR ',046,106, & - & 'VVCSH ON spec_hgt_lvl_above_grnd'/ !433 -! CRA - -! Add precipitation buckets between outputs - DATA IFILV(434),AVBL(434),IQ(434),IS(434),AVBLGRB2(434) & - & /1,'BUCKET TOTAL PRECIP ',061,001, & - & 'A_PCP ON surface'/ !434 - DATA IFILV(435),AVBL(435),IQ(435),IS(435),AVBLGRB2(435) & - & /1,'BUCKET CONV PRECIP ',063,001, & - & 'ACPCP ON surface'/ !435 - DATA IFILV(436),AVBL(436),IQ(436),IS(436),AVBLGRB2(436) & - & /1,'BUCKET GRDSCALE PRCP',062,001, & - & 'NCPCP ON surface'/ !436 - DATA IFILV(437),AVBL(437),IQ(437),IS(437),AVBLGRB2(437) & - & /1,'BUCKET SNOW PRECIP ',065,001, & - & 'WEASD ON surface'/ !437 - DATA IFILV(487),AVBL(487),IQ(487),IS(487),AVBLGRB2(487) & - & /1,'GSD CEILING ',008,002, & - & 'HGT ON cloud_ceiling'/ !487 -!JSK - add model-state cloud fraction; not the same as field 145 ("TCDC") - DATA IFILV(774),AVBL(774),IQ(774),IS(774),AVBLGRB2(774) & - & /1,'RAW CLD FRA MDL SFCS',071,109, & - & 'FRACCC ON hybrid_lvl'/ -!tgs - need to find the correct Grid table number for 775 field - DATA IFILV(775),AVBL(775),IQ(775),IS(775),AVBLGRB2(775) & - & /1,'BUCKET GRAUP PRECIP ',179,001, & !775 - & 'GRAUP ON surface'/ -!CRA - -10C and -20C isothermal heigths, RH, pressure - DATA IFILV(776),AVBL(776),IQ(776),IS(776),AVBLGRB2(776) & - & /1,'HIGHEST -10C LVL ',007,020, & - & 'HGT ON -10C_isotherm'/ !776 - DATA IFILV(777),AVBL(777),IQ(777),IS(777),AVBLGRB2(777) & - & /1,'HIGHEST -10C RH ',052,020, & - & 'RH ON -10C_isotherm'/ !777 - DATA IFILV(778),AVBL(778),IQ(778),IS(778),AVBLGRB2(778) & - & /1,'HIGHEST -10C PRES ',001,020, & - & 'PRES ON -10C_isotherm'/ !778 - DATA IFILV(779),AVBL(779),IQ(779),IS(779),AVBLGRB2(779) & - & /1,'HIGHEST -20C LVL ',007,020, & - & 'HGT ON -20C_isotherm'/ !779 - DATA IFILV(780),AVBL(780),IQ(780),IS(780),AVBLGRB2(780) & - & /1,'HIGHEST -20C RH ',052,020, & - & 'RH ON -20C_isotherm'/ !780 - DATA IFILV(781),AVBL(781),IQ(781),IS(781),AVBLGRB2(781) & - & /1,'HIGHEST -20C PRES ',001,020, & - & 'PRES ON -20C_isotherm'/ !781 - DATA IFILV(782),AVBL(782),IQ(782),IS(782),AVBLGRB2(782) & - & /1,'ACM FRAIN ',193,001, & - & 'ACM FRAIN ON surface'/ !782 -! CRA -! -!--- Added new cloud microphysics fields & displaying more -! convective cloud properties (Jin, '01; Ferrier, Feb '02) -! -! -!--- The following fields have been added to the post under -! PDS Octet 4 = 129. All other fields above are with PDS Octet -! 4 = 2. Most of the fields below, except for the cloud top -! and cloud base pressures, have PDS Octet 4 = 129. These new -! grib parameters are listed in Table 129 of the GRIB documentation. -! See Table 2 in Office Note 388 (ON388) for more details. -! -!--- F_rain, F_ice, F_RimeF => PDS Octet 4 = 129 -! - DATA IFILV(185),AVBL(185),IQ(185),IS(185),AVBLGRB2(185) & - & /1,'F_rain ON MDL SFCS ',131,109, & - & 'FRAIN ON hybrid_lvl'/ - DATA IFILV(186),AVBL(186),IQ(186),IS(186),AVBLGRB2(186) & - & /1,'F_ice ON MDL SFCS ',132,109, & - & 'FICE ON hybrid_lvl'/ - DATA IFILV(187),AVBL(187),IQ(187),IS(187),AVBLGRB2(187) & - & /1,'F_RimeF ON MDL SFCS ',133,109, & - & 'RIME ON hybrid_lvl'/ -! -!--- The following cloud pressure fields have PDS Octet 4 = 2 -! - DATA IFILV(188),AVBL(188),IQ(188),IS(188),AVBLGRB2(188) & - & /1,'CONV CLOUD BOT PRESS',001,242, & - & 'PRES ON convective_cloud_bot_lvl'/ - DATA IFILV(189),AVBL(189),IQ(189),IS(189),AVBLGRB2(189) & - & /1,'CONV CLOUD TOP PRESS',001,243, & - & 'PRES ON convective_cloud_top_lvl'/ - DATA IFILV(190),AVBL(190),IQ(190),IS(190),AVBLGRB2(190) & - & /1,'SHAL CU CLD BOT PRES',001,248, & - & 'PRES ON shall_convective_cloud_bot_lvl'/ - DATA IFILV(191),AVBL(191),IQ(191),IS(191),AVBLGRB2(191) & - & /1,'SHAL CU CLD TOP PRES',001,249, & - & 'PRES ON shall_convective_cloud_top_lvl'/ - DATA IFILV(192),AVBL(192),IQ(192),IS(192),AVBLGRB2(192) & - & /1,'DEEP CU CLD BOT PRES',001,251, & - & 'PRES ON deep_convective_cloud_bot_lvl'/ - DATA IFILV(193),AVBL(193),IQ(193),IS(193),AVBLGRB2(193) & - & /1,'DEEP CU CLD TOP PRES',001,252, & - & 'PRES ON deep_convective_cloud_top_lvl'/ - DATA IFILV(194),AVBL(194),IQ(194),IS(194),AVBLGRB2(194) & - & /1,'GRID CLOUD BOT PRESS',001,206, & - & 'PRES ON grid_scale_cloud_bot_lvl'/ - DATA IFILV(195),AVBL(195),IQ(195),IS(195),AVBLGRB2(195) & - & /1,'GRID CLOUD TOP PRESS',001,207, & - & 'PRES ON grid_scale_cloud_top_lvl'/ - DATA IFILV(196),AVBL(196),IQ(196),IS(196),AVBLGRB2(196) & - & /1,'CONV CLOUD FRACTION ',072,200, & - & 'T_CDC ON entire_atmos_single_lyr'/ -! DATA IFILV(196),AVBL(196),IQ(196),IS(196),AVBLGRB2(196) & -! & /1,'CONV CLOUD FRACTION ',072,200, & -! & 'T_CDC ON convective_cloud_lyr'/ -! -!--- These remaining fields have PDS Octet 4 = 129 (Table 129, ON388) -! - DATA IFILV(197),AVBL(197),IQ(197),IS(197),AVBLGRB2(197) & - & /1,'CU CLOUD EFFICIENCY ',134,200, & - & 'CUEFI ON entire_atmos_single_lyr'/ - DATA IFILV(198),AVBL(198),IQ(198),IS(198),AVBLGRB2(198) & - & /1,'CONDENSATE ON P SFCS',135,100, & - & 'TCOND ON isobaric_sfc'/ - DATA IFILV(199),AVBL(199),IQ(199),IS(199),AVBLGRB2(199) & - & /1,'CONDENSATE MDL SFCS ',135,109, & - & 'TCOND ON hybrid_lvl'/ - DATA IFILV(200),AVBL(200),IQ(200),IS(200),AVBLGRB2(200) & - & /1,'TOTAL COLUMN CLD WTR',136,200, & - & 'TCOLW ON entire_atmos_single_lyr'/ - DATA IFILV(201),AVBL(201),IQ(201),IS(201),AVBLGRB2(201) & - & /1,'TOTAL COLUMN CLD ICE',137,200, & - & 'TCOLI ON entire_atmos_single_lyr'/ - DATA IFILV(202),AVBL(202),IQ(202),IS(202),AVBLGRB2(202) & - & /1,'TOTAL COLUMN RAIN ',138,200, & - & 'TCOLR ON entire_atmos_single_lyr'/ - DATA IFILV(203),AVBL(203),IQ(203),IS(203),AVBLGRB2(203) & - & /1,'TOTAL COLUMN SNOW ',139,200, & - & 'TCOLS ON entire_atmos_single_lyr'/ - DATA IFILV(204),AVBL(204),IQ(204),IS(204),AVBLGRB2(204) & - & /1,'TOTAL COL CONDENSATE',140,200, & - & 'TCOLC ON entire_atmos_single_lyr'/ -! See below for total supercooled liquid & melting ice ... IFILV(285) -! H CHUANG--ADD INTERPOLATED FIELDS ON SIGMA LEVELS - DATA IFILV(205),AVBL(205),IQ(205),IS(205),AVBLGRB2(205) & - & /1,'HEIGHT OF SIGMA SFCS',007,107, & - & 'HGT ON sigma_lvl'/ - DATA IFILV(206),AVBL(206),IQ(206),IS(206),AVBLGRB2(206) & - & /1,'TEMP ON SIGMA SFCS ',011,107, & - & 'TMP ON sigma_lvl'/ - DATA IFILV(207),AVBL(207),IQ(207),IS(207),AVBLGRB2(207) & - & /1,'SPEC HUM ON S SFCS ',051,107, & - & 'SPF_H ON sigma_lvl'/ - DATA IFILV(208),AVBL(208),IQ(208),IS(208),AVBLGRB2(208) & - & /0,'U WIND ON SIGMA SFCS',033,107, & - & 'U_GRD ON sigma_lvl'/ - DATA IFILV(209),AVBL(209),IQ(209),IS(209),AVBLGRB2(209) & - & /0,'V WIND ON SIGMA SFCS',034,107, & - & 'V_GRD ON sigma_lvl'/ - DATA IFILV(210),AVBL(210),IQ(210),IS(210),AVBLGRB2(210) & - & /1,'OMEGA ON SIGMA SFCS ',039,107, & - & 'V_VEL ON sigma_lvl'/ - DATA IFILV(211),AVBL(211),IQ(211),IS(211),AVBLGRB2(211) & - & /1,'CLOUD WATR ON S SFCS',153,107, & - & 'CLWMR ON sigma_lvl'/ - DATA IFILV(212),AVBL(212),IQ(212),IS(212),AVBLGRB2(212) & - & /1,'CLOUD ICE ON S SFCS ',058,107, & - & 'C_ICE ON sigma_lvl'/ - DATA IFILV(213),AVBL(213),IQ(213),IS(213),AVBLGRB2(213) & - & /1,'RAIN ON S SFCS ',170,107, & - & 'RWMR ON sigma_lvl'/ - DATA IFILV(214),AVBL(214),IQ(214),IS(214),AVBLGRB2(214) & - & /1,'SNOW ON S SFCS ',171,107, & - & 'SNMR ON sigma_lvl'/ - DATA IFILV(215),AVBL(215),IQ(215),IS(215),AVBLGRB2(215) & - & /1,'CONDENSATE ON S SFCS',135,107, & - & 'TCOND ON sigma_lvl'/ - DATA IFILV(216),AVBL(216),IQ(216),IS(216),AVBLGRB2(216) & - & /1,'PRESS ON SIG SFCS ',001,107, & - & 'PRES ON sigma_lvl'/ - DATA IFILV(217),AVBL(217),IQ(217),IS(217),AVBLGRB2(217) & - & /1,'TRBLNT KE ON S SFCS ',158,107, & - & 'TKE ON sigma_lvl'/ - DATA IFILV(222),AVBL(222),IQ(222),IS(222),AVBLGRB2(222) & - & /1,'CLD FRAC ON SIG SFCS',071,107, & - & 'T_CDC ON sigma_lvl'/ - DATA IFILV(255),AVBL(255),IQ(255),IS(255),AVBLGRB2(255) & !255 - & /1,'GRAUPEL ON S SFCS ',179,107, & - & 'GRLE ON sigma_lvl'/ -! H CHUANG--ADD FIXED AND LSM FIELDS - DATA IFILV(218),AVBL(218),IQ(218),IS(218),AVBLGRB2(218) & - & /1,'VEGETATION TYPE ',225,001, & - & 'VGTYP ON surface'/ - DATA IFILV(219),AVBL(219),IQ(219),IS(219),AVBLGRB2(219) & - & /1,'SOIL TYPE ',224,001, & - & 'SOTYP ON surface'/ - DATA IFILV(220),AVBL(220),IQ(220),IS(220),AVBLGRB2(220) & - & /1,'CANOPY CONDUCTANCE ',181,001, & - & 'CCOND ON surface'/ - DATA IFILV(221),AVBL(221),IQ(221),IS(221),AVBLGRB2(221) & - & /1,'PBL HEIGHT ',221,001, & - & 'HPBL ON surface'/ - DATA IFILV(223),AVBL(223),IQ(223),IS(223),AVBLGRB2(223) & - & /1,'SLOPE TYPE ',222,001, & - & 'SLTYP ON surface'/ - DATA IFILV(224),AVBL(224),IQ(224),IS(224),AVBLGRB2(224) & - & /1,'SNOW DEPTH ',066,001, & - & 'SNO_D ON surface'/ - DATA IFILV(225),AVBL(225),IQ(225),IS(225),AVBLGRB2(225) & - & /1,'LIQUID SOIL MOISTURE',160,112, & - & 'SOILL ON depth_bel_land_sfc'/ - DATA IFILV(226),AVBL(226),IQ(226),IS(226),AVBLGRB2(226) & - & /1,'SNOW FREE ALBEDO ',170,001, & - & '/SNFALB ON surface'/ - DATA IFILV(227),AVBL(227),IQ(227),IS(227),AVBLGRB2(227) & - & /1,'MAXIMUM SNOW ALBEDO ',159,001, & - & 'MXSALB ON surface'/ - DATA IFILV(228),AVBL(228),IQ(228),IS(228),AVBLGRB2(228) & - & /1,'CANOPY WATER EVAP ',200,001, & - & 'EVCW ON surface'/ - DATA IFILV(229),AVBL(229),IQ(229),IS(229),AVBLGRB2(229) & - & /1,'DIRECT SOIL EVAP ',199,001, & - & 'EVBS ON surface'/ - DATA IFILV(230),AVBL(230),IQ(230),IS(230),AVBLGRB2(230) & - & /1,'PLANT TRANSPIRATION ',210,001, & - & 'TRANS ON surface'/ - DATA IFILV(231),AVBL(231),IQ(231),IS(231),AVBLGRB2(231) & - & /1,'SNOW SUBLIMATION ',198,001, & - & 'SBSNO ON surface'/ - DATA IFILV(232),AVBL(232),IQ(232),IS(232),AVBLGRB2(232) & - & /1,'AIR DRY SOIL MOIST ',231,001, & - & 'SMDRY ON surface'/ - DATA IFILV(233),AVBL(233),IQ(233),IS(233),AVBLGRB2(233) & - & /1,'SOIL MOIST POROSITY ',240,001, & - & 'POROS ON surface'/ - DATA IFILV(234),AVBL(234),IQ(234),IS(234),AVBLGRB2(234) & - & /1,'MIN STOMATAL RESIST ',203,001, & - & 'RSMIN ON surface'/ - DATA IFILV(235),AVBL(235),IQ(235),IS(235),AVBLGRB2(235) & - & /1,'NO OF ROOT LAYERS ',171,001, & - & 'RLYRS ON surface'/ - DATA IFILV(236),AVBL(236),IQ(236),IS(236),AVBLGRB2(236) & - & /1,'SOIL MOIST WILT PT ',219,001, & - & 'WILT ON surface'/ - DATA IFILV(237),AVBL(237),IQ(237),IS(237),AVBLGRB2(237) & - & /1,'SOIL MOIST REFERENCE',230,001, & - & 'SMREF ON surface'/ - DATA IFILV(238),AVBL(238),IQ(238),IS(238),AVBLGRB2(238) & - & /1,'CANOPY COND SOLAR ',246,001, & - & 'RCS ON surface'/ - DATA IFILV(239),AVBL(239),IQ(239),IS(239),AVBLGRB2(239) & - & /1,'CANOPY COND TEMP ',247,001, & - & 'RCT ON surface'/ - DATA IFILV(240),AVBL(240),IQ(240),IS(240),AVBLGRB2(240) & - & /1,'CANOPY COND HUMID ',248,001, & - & 'RCQ ON surface'/ - DATA IFILV(241),AVBL(241),IQ(241),IS(241),AVBLGRB2(241) & - & /1,'CANOPY COND SOILM ',249,001, & - & 'RCSOL ON surface'/ - DATA IFILV(242),AVBL(242),IQ(242),IS(242),AVBLGRB2(242) & - & /1,'POTENTIAL EVAP ',145,001, & - & 'PEVPR ON surface'/ - DATA IFILV(243),AVBL(243),IQ(243),IS(243),AVBLGRB2(243) & - & /1,'DIFFUSION H RATE S S',182,107, & - & 'VEDH ON sigma_lvl'/ -! - DATA IFILV(245),AVBL(245),IQ(245),IS(245),AVBLGRB2(245) & - & /1,'SFC WIND GUST ',180,001, & - & 'GUST ON surface'/ - DATA IFILV(246),AVBL(246),IQ(246),IS(246),AVBLGRB2(246) & - & /1,'LIFT PCL LVL PRESS ',141,116, & - & 'PLPL ON spec_pres_above_grnd'/ - DATA IFILV(247),AVBL(247),IQ(247),IS(247),AVBLGRB2(247) & - & /1,'LOW WET BULB ZERO HT',007,245, & - & 'HGT ON lwst_lvl_of_wet_bulb_zero'/ - DATA IFILV(248),AVBL(248),IQ(248),IS(248), AVBLGRB2(248) & - & /1,'EMISSIVITY ',193,001, & - 'EMISSIVITY ON surface'/ - DATA IFILV(249),AVBL(249),IQ(249),IS(249),AVBLGRB2(249) & - & /1,'CONV PRECIP RATE ',214,001, & - & 'CPRAT ON surface'/ -!--- USING Table 129 -! - DATA IFILV(250),AVBL(250),IQ(250),IS(250),AVBLGRB2(250) & - & /1,'RADAR REFL MDL SFCS ',211,109, & - & 'REFD ON hybrid_lvl'/ - DATA IFILV(251),AVBL(251),IQ(251),IS(251),AVBLGRB2(251) & - & /1,'RADAR REFL ON P SFCS',211,100, & - & 'REFD ON isobaric_sfc'/ - DATA IFILV(252),AVBL(252),IQ(252),IS(252),AVBLGRB2(252) & - & /1,'COMPOSITE RADAR REFL',212,200, & - & 'REFC ON entire_atmos_single_lyr'/ - DATA IFILV(253),AVBL(253),IQ(253),IS(253),AVBLGRB2(253) & - & /1,'RADAR REFL AGL ',211,105, & - & 'REFD ON spec_hgt_lvl_above_grnd'/ - DATA IFILV(254),AVBL(254),IQ(254),IS(254),AVBLGRB2(254) & - & /1,'LEAF AREA INDEX ',182,001, & - & 'LAI ON surface'/ -! - DATA IFILV(256),AVBL(256),IQ(256),IS(256),AVBLGRB2(256) & - & /1,'ACM LSM PRECIP ',154,001, & - & 'ACM LSPA ON surface'/ -! -!--- FOLLOWINGS ARE AVIATION-RELATED FIELDS: ADDED BY BINBIN ZHOU -! - DATA IFILV(257),AVBL(257),IQ(257),IS(257),AVBLGRB2(257) & - & /1,'IN-FLIGHT ICING ',186,100, & - & 'TIPD ON isobaric_sfc'/ - DATA IFILV(258),AVBL(258),IQ(258),IS(258),AVBLGRB2(258) & - & /1,'CLEAR AIR TURBULENCE',185,100, & - & 'TPFI ON isobaric_sfc'/ - DATA IFILV(259),AVBL(259),IQ(259),IS(259),AVBLGRB2(259) & - & /1,'0-2000FT LLWS ',136,106, & - & 'VW_SH ON spec_hgt_lvl_above_grnd'/ - DATA IFILV(260),AVBL(260),IQ(260),IS(260),AVBLGRB2(260) & - & /1,'CEILING ',007,215, & - & 'HGT ON cloud_ceilng'/ - DATA IFILV(261),AVBL(261),IQ(261),IS(261),AVBLGRB2(261) & - & /1,'FLIGHT RESTRICTION ',020,002, & - & 'VIS ON cloud_base'/ -! - DATA IFILV(262),AVBL(262),IQ(262),IS(262),AVBLGRB2(262) & - & /1,'INSTN CLR INC SFC SW',161,001, & - & 'INST CSDSF ON surface'/ - DATA IFILV(263),AVBL(263),IQ(263),IS(263),AVBLGRB2(263) & - & /1,'F_RimeF ON P SFCS ',133,100, & - & 'RIME ON isobaric_sfc'/ - DATA IFILV(264),AVBL(264),IQ(264),IS(264),AVBLGRB2(264) & - & /1,'W WIND ON MDL SFCS ',040,109, & - & 'DZDT ON hybrid_lvl'/ -! DATA IFILV(265),AVBL(265),IQ(265),IS(265),AVBLGRB2(265) & -! & /1,'BRIGHTNESS TEMP ',118,008, & - DATA IFILV(265),AVBL(265),IQ(265),IS(265),AVBLGRB2(265) & - & /1,'BRIGHTNESS TEMP ',213,008, & - & 'SBT122 ON top_of_atmos'/ -! H CHUANG--ADD GFS products - DATA IFILV(266),AVBL(266),IQ(266),IS(266),AVBLGRB2(266) & - & /1,'AVE ALBEDO ',084,001, & - & 'AVE ALBDO ON surface'/ - DATA IFILV(267),AVBL(267),IQ(267),IS(267),AVBLGRB2(267) & - & /1,'OZONE ON MDL SFCS ',154,109, & - & 'O3MR ON hybrid_lvl'/ - DATA IFILV(268),AVBL(268),IQ(268),IS(268),AVBLGRB2(268) & - & /1,'OZONE ON P SFCS ',154,100, & - & 'O3MR ON isobaric_sfc'/ - DATA IFILV(269),AVBL(269),IQ(269),IS(269),AVBLGRB2(269) & - & /1,'SFC ZONAL MOMEN FX ',124,001, & - & 'AVE U_FLX ON surface'/ - DATA IFILV(270),AVBL(270),IQ(270),IS(270),AVBLGRB2(270) & - & /1,'SFC MERID MOMEN FX ',125,001, & - & 'AVE V_FLX ON surface'/ - DATA IFILV(271),AVBL(271),IQ(271),IS(271),AVBLGRB2(271) & - & /1,'AVE PRECIP RATE ',059,001, & - & 'AVE PRATE ON surface'/ - DATA IFILV(272),AVBL(272),IQ(272),IS(272),AVBLGRB2(272) & - & /1,'AVE CONV PRECIP RATE',214,001, & - & 'AVE CPRAT ON surface'/ -! CMAQ requested fields - DATA IFILV(273),AVBL(273),IQ(273),IS(273),AVBLGRB2(273) & - & /1,'HYBRID SIGMA DP ',001,110, & - & 'PRES ON hybrid_lvl_1L'/ - DATA IFILV(274),AVBL(274),IQ(274),IS(274),AVBLGRB2(274) & - & /1,'INSTN OUT TOA LW RAD',212,008, & - & 'INST ULWRF ON top_of_atmos'/ -! DATA IFILV(275),AVBL(275),IQ(275),IS(275),AVBLGRB2(002) & -! & /1,'BRIGHTNESS TEMP NCAR',213,008, & - DATA IFILV(275),AVBL(275),IQ(275),IS(275),AVBLGRB2(275) & - & /1,'BRIGHTNESS TEMP NCAR',118,008, & - & 'BRTMP ON top_of_atmos'/ - DATA IFILV(282),AVBL(282),IQ(282),IS(282),AVBLGRB2(282) & - & /1,'MODEL TOP PRESSURE ',001,008, & - & 'PRES ON top_of_atmos'/ - DATA IFILV(283),AVBL(283),IQ(283),IS(283),AVBLGRB2(283) & - & /1,'HYBRID PRESSURE DP ',001,110, & - & 'PRES ON hybrid_lvl_LLM'/ -! -!--- USING Table 129 -! - DATA IFILV(276),AVBL(276),IQ(276),IS(276),AVBLGRB2(276) & - & /1,'COMPOSITE RAIN REFL ',165,200, & - & 'REFZR ON entire_atmos_single_lyr'/ - DATA IFILV(277),AVBL(277),IQ(277),IS(277),AVBLGRB2(277) & - & /1,'COMPOSITE ICE REFL ',166,200, & - & 'REFZI ON entire_atmos_single_lyr'/ - DATA IFILV(278),AVBL(278),IQ(278),IS(278),AVBLGRB2(278) & - & /1,'COMPOSITE CONV REFL ',167,200, & - & 'REFZC ON entire_atmos_single_lyr'/ - DATA IFILV(279),AVBL(279),IQ(279),IS(279),AVBLGRB2(279) & - & /1,'RAIN RADAR REFL AGL ',165,105, & - & 'REFZR ON spec_hgt_lvl_above_grnd'/ - DATA IFILV(280),AVBL(280),IQ(280),IS(280),AVBLGRB2(280) & - & /1,'ICE RADAR REFL AGL ',166,105, & - & 'REFZI ON spec_hgt_lvl_above_grnd'/ - DATA IFILV(281),AVBL(281),IQ(281),IS(281),AVBLGRB2(281) & - & /1,'CONV RADAR REFL AGL ',167,105, & - & 'REFZC ON spec_hgt_lvl_above_grnd'/ -! -!--- USING Table 2 -! - DATA IFILV(284),AVBL(284),IQ(284),IS(284),AVBLGRB2(284) & - & /1,'W WIND ON P SFCS ',040,100, & - & 'DZDT ON isobaric_sfc'/ -! -!--- USING Table 129 -! - DATA IFILV(285),AVBL(285),IQ(285),IS(285),AVBLGRB2(285) & - & /1,'TOTAL COLD LIQUID ',168,200, & - & 'TCLSW ON entire_atmos_single_lyr'/ - DATA IFILV(286),AVBL(286),IQ(286),IS(286),AVBLGRB2(286) & - & /1,'TOTAL MELTING ICE ',169,200, & - & 'TCOLM ON entire_atmos_single_lyr'/ -! -!--- USING Table 2 -! - DATA IFILV(287),AVBL(287),IQ(287),IS(287),AVBLGRB2(287) & - & /1,'COLD LIQ BOT HEIGHT ',007,253, & - & 'HGT ON lwst_bot_lvl_of_supercooled_liq_water_lyr'/ - DATA IFILV(288),AVBL(288),IQ(288),IS(288),AVBLGRB2(288) & - & /1,'COLD LIQ TOP HEIGHT ',007,254, & - & 'HGT ON hghst_top_lvl_of_supercooled_liq_water_lyr'/ - DATA IFILV(289),AVBL(289),IQ(289),IS(289),AVBLGRB2(289) & - & /1,'RICH NO PBL HEIGHT ',007,220, & - & 'HGT ON planetary_bound_lyr'/ -! -!---- New Column-integrated fields - DATA IFILV(290),AVBL(290),IQ(290),IS(290),AVBLGRB2(290) & - & /1,'TOT COL SW T TNDY ',250,200, & - & 'SWHR ON entire_atmos_single_lyr'/ - DATA IFILV(291),AVBL(291),IQ(291),IS(291),AVBLGRB2(291) & - & /1,'TOT COL LW T TNDY ',251,200, & - & 'LWHR ON entire_atmos_single_lyr'/ - DATA IFILV(292),AVBL(292),IQ(292),IS(292),AVBLGRB2(292) & - & /1,'TOT COL GRD T TNDY ',241,200, & - & 'AVE LRGHR ON entire_atmos_single_lyr'/ - DATA IFILV(293),AVBL(293),IQ(293),IS(293),AVBLGRB2(293) & - & /1,'TOT COL CNVCT T TNDY',242,200, & - & 'AVE CNVHR ON entire_atmos_single_lyr'/ - DATA IFILV(294),AVBL(294),IQ(294),IS(294),AVBLGRB2(294) & - & /1,'RADFLX TMP TNDY ON P',216,100, & - & 'TTRAD ON isobaric_sfc'/ - DATA IFILV(295),AVBL(295),IQ(295),IS(295),AVBLGRB2(295) & - & /1,'TOT COL MST CNVG ',135,200, & - & 'MCONV ON entire_atmos_single_lyr'/ - DATA IFILV(296),AVBL(296),IQ(296),IS(296),AVBLGRB2(296) & - & /1,'HPC T ON SIGMA SFCS ',011,107, & - & 'TMP ON sigma_lvl'/ -! H CHUANG--ADD GFS products - DATA IFILV(297),AVBL(297),IQ(297),IS(297),AVBLGRB2(297) & - & /1,'AVE CLR INC UV-B SW ',201,001, & - & 'AVE CDUVB ON surface'/ - DATA IFILV(298),AVBL(298),IQ(298),IS(298),AVBLGRB2(298) & - & /1,'AVE INC UV-B SW ',200,001, & - & 'AVE DUVB ON surface'/ - DATA IFILV(299),AVBL(299),IQ(299),IS(299),AVBLGRB2(299) & - & /1,'TOT COL OZONE ',010,200, & - & 'TOZNE ON entire_atmos_single_lyr'/ - DATA IFILV(300),AVBL(300),IQ(300),IS(300),AVBLGRB2(300) & - & /1,'AVE LOW CLOUD FRAC ',071,214, & - & 'AVE T_CDC ON low_cloud_lyr'/ - DATA IFILV(301),AVBL(301),IQ(301),IS(301),AVBLGRB2(301) & - & /1,'AVE MID CLOUD FRAC ',071,224, & - & 'AVE T_CDC ON mid_cloud_lyr'/ - DATA IFILV(302),AVBL(302),IQ(302),IS(302),AVBLGRB2(302) & - & /1,'AVE HIGH CLOUD FRAC ',071,234, & - & 'AVE T_CDC ON high_cloud_lyr'/ - DATA IFILV(303),AVBL(303),IQ(303),IS(303),AVBLGRB2(303) & - & /1,'AVE LOW CLOUD BOT P ',001,212, & - & 'AVE PRES ON low_cloud_bot_lvl'/ - DATA IFILV(304),AVBL(304),IQ(304),IS(304),AVBLGRB2(304) & - & /1,'AVE LOW CLOUD TOP P ',001,213, & - & 'AVE PRES ON low_cloud_top_lvl'/ - DATA IFILV(305),AVBL(305),IQ(305),IS(305),AVBLGRB2(305) & - & /1,'AVE LOW CLOUD TOP T ',011,213, & - & 'AVE TMP ON low_cloud_top_lvl'/ - DATA IFILV(306),AVBL(306),IQ(306),IS(306),AVBLGRB2(306) & - & /1,'AVE MID CLOUD BOT P ',001,222, & - & 'AVE PRES ON mid_cloud_bot_lvl'/ - DATA IFILV(307),AVBL(307),IQ(307),IS(307),AVBLGRB2(307) & - & /1,'AVE MID CLOUD TOP P ',001,223, & - & 'AVE PRES ON mid_cloud_top_lvl'/ - DATA IFILV(308),AVBL(308),IQ(308),IS(308),AVBLGRB2(308) & - & /1,'AVE MID CLOUD TOP T ',011,223, & - & 'AVE TMP ON mid_cloud_top_lvl'/ - DATA IFILV(309),AVBL(309),IQ(309),IS(309),AVBLGRB2(309) & - & /1,'AVE HIGH CLOUD BOT P',001,232, & - & 'AVE PRES ON high_cloud_bot_lvl'/ - DATA IFILV(310),AVBL(310),IQ(310),IS(310),AVBLGRB2(310) & - & /1,'AVE HIGH CLOUD TOP P',001,233, & - & 'AVE PRES ON high_cloud_top_lvl'/ - DATA IFILV(311),AVBL(311),IQ(311),IS(311),AVBLGRB2(311) & - & /1,'AVE HIGH CLOUD TOP T',011,233, & - & 'AVE TMP ON high_cloud_top_lvl'/ - DATA IFILV(312),AVBL(312),IQ(312),IS(312),AVBLGRB2(312) & - & /1,'TOT COL REL HUM ',052,200, & - & 'RH ON entire_atmos_single_lyr'/ - DATA IFILV(313),AVBL(313),IQ(313),IS(313),AVBLGRB2(313) & - & /1,'CLOUD WORK FUNCTION ',146,200, & - & 'AVE CWORK ON entire_atmos_single_lyr'/ - DATA IFILV(314),AVBL(314),IQ(314),IS(314),AVBLGRB2(314) & - & /1,'MAX WIND TEMPERATURE',011,006, & - & 'TMP ON max_wind'/ - DATA IFILV(315),AVBL(315),IQ(315),IS(315),AVBLGRB2(315) & - & /1,'AVE Z GRAVITY STRESS',147,001, & - & 'AVE U_GWD ON surface'/ - DATA IFILV(316),AVBL(316),IQ(316),IS(316),AVBLGRB2(316) & - & /1,'AVE M GRAVITY STRESS',148,001, & - & 'AVE V_GWD ON surface'/ - DATA IFILV(317),AVBL(317),IQ(317),IS(317),AVBLGRB2(317) & - & /1,'AVE PRECIP TYPE ',140,001, & - & 'AVE CRAIN ON surface'/ - DATA IFILV(318),AVBL(318),IQ(318),IS(318),AVBLGRB2(318) & - & /1,'LFM 0.44-1.00 RELHUM',052,108, & - & 'RH ON sigma_lvl'/ - DATA IFILV(319),AVBL(319),IQ(319),IS(319),AVBLGRB2(319) & - & /1,'LFM 0.72-0.94 RELHUM',052,108, & - & 'RH ON sigma_lvl'/ - DATA IFILV(320),AVBL(320),IQ(320),IS(320),AVBLGRB2(320) & - & /1,'LFM 0.44-0.72 RELHUM',052,108, & - & 'RH ON sigma_lvl'/ - DATA IFILV(321),AVBL(321),IQ(321),IS(321),AVBLGRB2(321) & - & /1,'NGM 0.9950 TEMP ',011,107, & - & 'TMP ON sigma_lvl'/ - DATA IFILV(322),AVBL(322),IQ(322),IS(322),AVBLGRB2(322) & - & /1,'NGM 0.9950 POT TEMP ',013,107, & - & 'POT ON sigma_lvl'/ - DATA IFILV(323),AVBL(323),IQ(323),IS(323),AVBLGRB2(323) & - & /1,'NGM 0.9950 REL HUM ',052,107, & - & 'RH ON sigma_lvl'/ - DATA IFILV(324),AVBL(324),IQ(324),IS(324),AVBLGRB2(324) & - & /1,'NGM 0.9950 U WIND ',033,107, & - & 'U_GRD ON sigma_lvl'/ - DATA IFILV(325),AVBL(325),IQ(325),IS(325),AVBLGRB2(325) & - & /1,'NGM 0.9950 V WIND ',034,107, & - & 'V_GRD ON sigma_lvl'/ - DATA IFILV(326),AVBL(326),IQ(326),IS(326),AVBLGRB2(326) & - & /1,'NGM 0.9950 OMEGA ',039,107, & - & 'V_VEL ON sigma_lvl'/ - DATA IFILV(327),AVBL(327),IQ(327),IS(327),AVBLGRB2(327) & - & /1,'GOES TB - CH 2 ',213,008, & !table 129 - & 'SBT122 ON top_of_atmos'/ - DATA IFILV(328),AVBL(328),IQ(328),IS(328),AVBLGRB2(328) & - & /1,'GOES TB - CH 3 ',214,008, & !table 129 - & 'SBT123 ON top_of_atmos'/ - DATA IFILV(329),AVBL(329),IQ(329),IS(329),AVBLGRB2(329) & - & /1,'GOES TB - CH 4 ',215,008, & !table 129 - & 'SBT124 ON top_of_atmos'/ - DATA IFILV(330),AVBL(330),IQ(330),IS(330),AVBLGRB2(330) & - & /1,'GOES TB - CH 5 ',216,008, & !table 129 - & 'SBT125 ON top_of_atmos'/ - DATA IFILV(331),AVBL(331),IQ(331),IS(331),AVBLGRB2(331) & - & /1,'CLD FRAC ON P SFCS ',071,100, & - & 'T_CDC ON isobaric_sfc'/ - DATA IFILV(332),AVBL(332),IQ(332),IS(332),AVBLGRB2(332) & - & /1,'U WIND ON THETA SFCS',033,113, & - & 'U_GRD ON isentropic_lvl'/ - DATA IFILV(333),AVBL(333),IQ(333),IS(333),AVBLGRB2(333) & - & /1,'V WIND ON THETA SFCS',034,113, & - & 'V_GRD ON isentropic_lvl'/ - DATA IFILV(334),AVBL(334),IQ(334),IS(334),AVBLGRB2(334) & - & /1,'TEMP ON THETA SFCS ',011,113, & - & 'TMP ON isentropic_lvl'/ - DATA IFILV(335),AVBL(335),IQ(335),IS(335),AVBLGRB2(335) & - & /1,'PV ON THETA SFCS ',004,113, & - & 'PVORT ON isentropic_lvl'/ - DATA IFILV(353),AVBL(353),IQ(353),IS(353),AVBLGRB2(353) & !353 - & /1,'M STRMFUNC ON THETA ',037,113, & - & 'MNTSF ON isentropic_lvl'/ - DATA IFILV(351),AVBL(351),IQ(351),IS(351),AVBLGRB2(351) & !351 - & /1,'S STAB ON THETA SFCS',019,113, & - & 'LAPR ON isentropic_lvl'/ - DATA IFILV(352),AVBL(352),IQ(352),IS(352),AVBLGRB2(352) & !352 - & /1,'RH ON THETA SFCS ',052,113, & - & 'RH ON isentropic_lvl'/ - DATA IFILV(336),AVBL(336),IQ(336),IS(336),AVBLGRB2(336) & - & /1,'U WIND ON PV SFCS ',033,117, & - & 'U_GRD ON pot_vort_sfc'/ - DATA IFILV(337),AVBL(337),IQ(337),IS(337),AVBLGRB2(337) & - & /1,'V WIND ON PV SFCS ',034,117, & - & 'V_GRD ON pot_vort_sfc'/ - DATA IFILV(338),AVBL(338),IQ(338),IS(338),AVBLGRB2(338) & - & /1,'TEMP ON PV SFCS ',011,117, & - & 'TMP ON pot_vort_sfc'/ - DATA IFILV(339),AVBL(339),IQ(339),IS(339),AVBLGRB2(339) & - & /1,'HEIGHT ON PV SFCS ',007,117, & - & 'HGT ON pot_vort_sfc'/ - DATA IFILV(340),AVBL(340),IQ(340),IS(340),AVBLGRB2(340) & - & /1,'PRESSURE ON PV SFCS ',001,117, & - & 'PRES ON pot_vort_sfc'/ - DATA IFILV(341),AVBL(341),IQ(341),IS(341),AVBLGRB2(341) & - & /1,'SHEAR ON PV SFCS ',136,117, & - & 'VW_SH ON pot_vort_sfc'/ - DATA IFILV(342),AVBL(342),IQ(342),IS(342),AVBLGRB2(342) & - & /1,'PBL CLD FRACTION ',071,211, & - & 'AVE T_CDC ON bound_lyr_cloud_lyr'/ - DATA IFILV(343),AVBL(343),IQ(343),IS(343),AVBLGRB2(343) & - & /1,'AVE WATER RUNOFF ',090,001, & - & 'AVE WATR ON surface'/ - DATA IFILV(344),AVBL(344),IQ(344),IS(344),AVBLGRB2(344) & - & /1,'PBL REGIME ',220,001, & - & 'PBLREG ON surface'/ - DATA IFILV(345),AVBL(345),IQ(345),IS(345),AVBLGRB2(345) & - & /1,'MAX SHELTER TEMP ',015,105, & - & 'TMAX ON spec_hgt_lvl_above_grnd'/ - DATA IFILV(346),AVBL(346),IQ(346),IS(346),AVBLGRB2(346) & - & /1,'MIN SHELTER TEMP ',016,105, & - & 'TMIN ON spec_hgt_lvl_above_grnd'/ - DATA IFILV(347),AVBL(347),IQ(347),IS(347),AVBLGRB2(347) & - & /1,'MAX SHELTER RH ',218,105, & !table129 - & 'RHMAX ON spec_hgt_lvl_above_grnd'/ - DATA IFILV(348),AVBL(348),IQ(348),IS(348),AVBLGRB2(348) & - & /1,'MIN SHELTER RH ',217,105, & !table129 - & 'RHMIN ON spec_hgt_lvl_above_grnd'/ - DATA IFILV(510),AVBL(510),IQ(510),IS(510),AVBLGRB2(510) & - & /1,'MAX SHELTER SPFH ',051,105, & !table129 - & 'QMAX ON spec_hgt_lvl_above_grnd'/ - DATA IFILV(511),AVBL(511),IQ(511),IS(511),AVBLGRB2(511) & - & /1,'MIN SHELTER SPFH ',051,105, & !table129 - & 'QMIN ON spec_hgt_lvl_above_grnd'/ - DATA IFILV(512),AVBL(512),IQ(512),IS(512),AVBLGRB2(512) & - & /1,'AERO CONDUCTANCE ',179,001, & !table129 - & 'ACOND ON surface'/ - DATA IFILV(349),AVBL(349),IQ(349),IS(349),AVBLGRB2(349) & - & /1,'ICE THICKNESS ',092,001, & - & 'ICETK ON surface'/ - DATA IFILV(354),AVBL(354),IQ(354),IS(354),AVBLGRB2(354) & - & /1,'SW TNDY ON P SFCS ',250,100, & - & 'SWHR ON isobaric_sfc'/ - DATA IFILV(355),AVBL(355),IQ(355),IS(355),AVBLGRB2(355) & - & /1,'LW TNDY ON P SFCS ',251,100, & - & 'LWHR ON isobaric_sfc'/ - DATA IFILV(356),AVBL(356),IQ(356),IS(356),AVBLGRB2(356) & - & /1,'VDIFF TNDY ON P SFCS',246,100, & - & 'VDFHR ON isobaric_sfc'/ - DATA IFILV(357),AVBL(357),IQ(357),IS(357),AVBLGRB2(357) & - & /1,'D CNVCT TNDY ON P SF',242,100, & - & 'CNVHR ON isobaric_sfc'/ - DATA IFILV(358),AVBL(358),IQ(358),IS(358),AVBLGRB2(358) & - & /1,'S CNVCT TNDY ON P SF',244,100, & - & 'SHAHR ON isobaric_sfc'/ - DATA IFILV(359),AVBL(359),IQ(359),IS(359),AVBLGRB2(359) & - & /1,'GRDSCL TNDY ON P SFC',241,100, & - & 'LRGHR ON isobaric_sfc'/ - DATA IFILV(360),AVBL(360),IQ(360),IS(360),AVBLGRB2(360) & - & /1,'VDIFF MOIS ON P SFCS',249,100, & - & 'VDFMR ON isobaric_sfc'/ - DATA IFILV(361),AVBL(361),IQ(361),IS(361),AVBLGRB2(361) & - & /1,'D CNVCT MOIS ON P SF',243,100, & - & 'CNVMR ON isobaric_sfc'/ - DATA IFILV(362),AVBL(362),IQ(362),IS(362),AVBLGRB2(362) & - & /1,'S CNVCT MOIS ON P SF',245,100, & - & 'SHAMR ON isobaric_sfc'/ - DATA IFILV(363),AVBL(363),IQ(363),IS(363),AVBLGRB2(363) & - & /1,'N RAD TNDY ON P SFCS',173,100, & - & 'LRGMR ON isobaric_sfc'/ - DATA IFILV(364),AVBL(364),IQ(364),IS(364),AVBLGRB2(364) & - & /1,'OZONE VDIFF ON P SFC',174,100, & - & 'VDFOZ ON isobaric_sfc'/ - DATA IFILV(365),AVBL(365),IQ(365),IS(365),AVBLGRB2(365) & - & /1,'OZONE PROD ON P SFCS',175,100, & - & 'POZ ON isobaric_sfc'/ - DATA IFILV(366),AVBL(366),IQ(366),IS(366),AVBLGRB2(366) & - & /1,'OZONE TNDY ON P SFCS',188,100, & - & 'TOZ ON isobaric_sfc'/ - DATA IFILV(367),AVBL(367),IQ(367),IS(367),AVBLGRB2(367) & - & /1,'MASS WEIGHTED PV ',139,100, & - & 'PV_MW ON isobaric_sfc'/ - DATA IFILV(368),AVBL(368),IQ(368),IS(368),AVBLGRB2(368) & - & /1,'UNKNOWN D3D ON P SFC',239,100, & - & 'SNOT ON isobaric_sfc'/ - DATA IFILV(369),AVBL(369),IQ(369),IS(369),AVBLGRB2(369) & - & /1,'VDIFF Z ACCE ON P SF',247,100, & - & 'VDFUA ON isobaric_sfc'/ - DATA IFILV(370),AVBL(370),IQ(370),IS(370),AVBLGRB2(370) & - & /1,'G DRAG Z ACCE ON P S',181,100, & - & 'GWDU ON isobaric_sfc'/ - DATA IFILV(371),AVBL(371),IQ(371),IS(371),AVBLGRB2(371) & - & /1,'CNVCT U M MIX ON P S',183,100, & - & 'CNVU ON isobaric_sfc'/ - DATA IFILV(372),AVBL(372),IQ(372),IS(372),AVBLGRB2(372) & - & /1,'VDIFF M ACCE ON P SF',248,100, & - & 'VDFVA ON isobaric_sfc'/ - DATA IFILV(373),AVBL(373),IQ(373),IS(373),AVBLGRB2(373) & - & /1,'G DRAG M ACCE ON P S',182,100, & - & 'GWDV ON isobaric_sfc'/ - DATA IFILV(374),AVBL(374),IQ(374),IS(374),AVBLGRB2(374) & - & /1,'CNVCT V M MIX ON P S',184,100, & - & 'CNVV ON isobaric_sfc'/ - DATA IFILV(375),AVBL(375),IQ(375),IS(375),AVBLGRB2(375) & - & /1,'N CNVCT CLD FRA ON P',213,100, & - & 'CDLYR ON isobaric_sfc'/ - DATA IFILV(376),AVBL(376),IQ(376),IS(376),AVBLGRB2(376) & - & /1,'GOES BRIGHTNESS-CH 3',221,008, & !table 129 - & 'SBC123 ON top_of_atmos'/ - DATA IFILV(377),AVBL(377),IQ(377),IS(377),AVBLGRB2(377) & - & /1,'GOES BRIGHTNESS-CH 4',222,008, & !table 129 - & 'SBC124 ON top_of_atmos'/ - DATA IFILV(378),AVBL(378),IQ(378),IS(378),AVBLGRB2(378) & - & /1,'OMEGA ON THETA SFCS ',039,113, & - & 'V_VEL ON isentropic_lvl'/ -! D3D fields - DATA IFILV(379),AVBL(379),IQ(379),IS(379),AVBLGRB2(379) & - & /1,'T DIAB TNDY ON P SFC',215,100, & - & 'TTDIA ON isobaric_sfc'/ - DATA IFILV(391),AVBL(391),IQ(391),IS(391),AVBLGRB2(391) & - & /1,'CNVCT U M FLX ON P S',202,100, & - & 'CNVUMF ON isobaric_sfc'/ - DATA IFILV(392),AVBL(392),IQ(392),IS(392),AVBLGRB2(392) & - & /1,'CNVCT D M FLX ON P S',209,100, & - & 'CNVDMF ON isobaric_sfc'/ - DATA IFILV(393),AVBL(393),IQ(393),IS(393),AVBLGRB2(393) & - & /1,'CNVCT DET M FLX ON P',219,100, & - & 'CNVDEMF ON isobaric_sfc'/ - DATA IFILV(394),AVBL(394),IQ(394),IS(394),AVBLGRB2(394) & - & /1,'CNVCT Z G DRAG ON P ',196,100, & - & 'CNGWDU ON isobaric_sfc'/ - DATA IFILV(395),AVBL(395),IQ(395),IS(395),AVBLGRB2(395) & - & /1,'CNVCT M G DRAG ON P ',197,100, & - & 'CNGWDV ON isobaric_sfc'/ -!---- Using table 129 !aqm PLee 1/07 - DATA IFILV(380),AVBL(380),IQ(380),IS(380),AVBLGRB2(380) & - & /1,'DIFFUSION H RATE MDL',182,109, & - & 'VEDH ON hybrid_lvl'/ -!---- Using table 2 !aqm PLee 3/07 - DATA IFILV(381),AVBL(381),IQ(381),IS(381),AVBLGRB2(381) & - & /1,'MIXHT HEIGHT ',067,001, & - & 'MIXHT ON surface'/ -! NEW GFS FLUX FILE FIELDS - DATA IFILV(382),AVBL(382),IQ(382),IS(382),AVBLGRB2(382) & - & /1,'AVE CLR INC SFC LW ',163,001, & - & 'AVE CSDLF ON surface'/ - DATA IFILV(383),AVBL(383),IQ(383),IS(383),AVBLGRB2(383) & - & /1,'AVE CLR INC SFC SW ',161,001, & - & 'AVE CSDSF ON surface'/ - DATA IFILV(384),AVBL(384),IQ(384),IS(384),AVBLGRB2(384) & - & /1,'AVE CLR OUT SFC LW ',162,001, & - & 'AVE CSULF ON surface'/ - DATA IFILV(385),AVBL(385),IQ(385),IS(385),AVBLGRB2(385) & - & /1,'AVE CLR OUT TOA LW ',162,008, & - & 'AVE CSULF ON top_of_atmos'/ - DATA IFILV(386),AVBL(386),IQ(386),IS(386),AVBLGRB2(386) & - & /1,'AVE CLR OUT SFC SW ',160,001, & - & 'AVE CSUSF ON surface'/ - DATA IFILV(387),AVBL(387),IQ(387),IS(387),AVBLGRB2(387) & - & /1,'AVE CLR OUT TOA SW ',160,008, & - & 'AVE CSUSF ON top_of_atmos'/ - DATA IFILV(388),AVBL(388),IQ(388),IS(388),AVBLGRB2(388) & - & /1,'AVE INC TOA SW ',204,008, & - & 'AVE DSWRF ON top_of_atmos'/ - DATA IFILV(389),AVBL(389),IQ(389),IS(389),AVBLGRB2(389) & - & /1,'TRANSPORT U WIND ',033,220, & - & 'U_GRD ON planetary_bound_lyr'/ - DATA IFILV(390),AVBL(390),IQ(390),IS(390),AVBLGRB2(390) & - & /1,'TRANSPORT V WIND ',034,220, & - & 'V_GRD ON planetary_bound_lyr'/ -! Add TIGGE FIELDS - DATA IFILV(396),AVBL(396),IQ(396),IS(396),AVBLGRB2(396) & - & /1,'SUNSHINE DURATION ',191,001, & !table 133 - & 'SUNSD ON surface'/ - DATA IFILV(397),AVBL(397),IQ(397),IS(397),AVBLGRB2(397) & - & /1,'FIELD CAPACITY ',220,001, & !table 130 - & 'FLDCP ON surface'/ -! Add ICAO FIELDS - DATA IFILV(398),AVBL(398),IQ(398),IS(398),AVBLGRB2(398) & - & /1,'ICAO HGHT MAX WIND ',005,006, & - & 'ICAHT ON max_wind'/ - DATA IFILV(399),AVBL(399),IQ(399),IS(399),AVBLGRB2(399) & - & /1,'ICAO HGHT AT TROP ',005,007, & - & 'ICAHT ON tropopause'/ - DATA IFILV(400),AVBL(400),IQ(400),IS(400),AVBLGRB2(400) & - & /1,'RADAR ECHO TOP ',240,200, & - & 'RETOP ON entire_atmos_single_lyr'/ -! -! Add MORE CFSRR FIELDS -! surface Visible beam downward solar flux - DATA IFILV(401),AVBL(401),IQ(401),IS(401),AVBLGRB2(401) & - & /1,'AVE IN SFC VIS SW BE',166,001, & - & 'AVE VBDSF ON surface'/ -!surface Visible diffuse downward solar flux - DATA IFILV(402),AVBL(402),IQ(402),IS(402),AVBLGRB2(402) & - & /1,'AVE IN SFC VIS SW DF',167,001, & - & 'AVE VDDSF ON surface'/ -!surface Near IR beam downward solar flux - DATA IFILV(403),AVBL(403),IQ(403),IS(403),AVBLGRB2(403) & - & /1,'AVE IN SFC IR SW BE ',168,001, & - & 'AVE NBDSF ON surface'/ -!surface Near IR diffuse downward solar flux - DATA IFILV(404),AVBL(404),IQ(404),IS(404),AVBLGRB2(404) & - & /1,'AVE IN SFC IR SW DF ',169,001, & - & 'AVE NDDSF ON surface'/ -! SNOWFALL RATE - DATA IFILV(405),AVBL(405),IQ(405),IS(405),AVBLGRB2(405) & - & /1,'AVE SNOWFALL RATE ',064,001, & - & 'AVE SRWEQ ON surface'/ -! ADD DUST FIELDS ON P SFCS (GOCART) - DATA IFILV(438),AVBL(438),IQ(438),IS(438),AVBLGRB2(438) & - & /1,'DUST 1 ON P SFCS ',240,100, & - & 'DU1 ON isobaric_sfc'/ - DATA IFILV(439),AVBL(439),IQ(439),IS(439),AVBLGRB2(439) & - & /1,'DUST 2 ON P SFCS ',241,100, & - & 'DU2 ON isobaric_sfc'/ - DATA IFILV(440),AVBL(440),IQ(440),IS(440),AVBLGRB2(440) & - & /1,'DUST 3 ON P SFCS ',242,100, & - & 'DU3 ON isobaric_sfc'/ - DATA IFILV(441),AVBL(441),IQ(441),IS(441),AVBLGRB2(441) & - & /1,'DUST 4 ON P SFCS ',243,100, & - & 'DU4 ON isobaric_sfc'/ - DATA IFILV(442),AVBL(442),IQ(442),IS(442),AVBLGRB2(442) & - & /1,'DUST 5 ON P SFCS ',244,100, & - & 'DU5 ON isobaric_sfc'/ -! - DATA IFILV(443),AVBL(443),IQ(443),IS(443),AVBLGRB2(443) & - & /1,'EQUIL LEVEL HEIGHT ',007,247, & - & 'HGT ON equil_lvl'/ - DATA IFILV(444),AVBL(444),IQ(444),IS(444),AVBLGRB2(444) & - & /1,'LIGHTNING ',187,001, & - & 'LTNG ON surface'/ - -! GOES WEST - DATA IFILV(446),AVBL(446),IQ(446),IS(446),AVBLGRB2(446) & - & /1,'GOES W TB - CH 2 ',241,008, & - & 'SBT112 ON top_of_atmos'/ !Table 130 - DATA IFILV(447),AVBL(447),IQ(447),IS(447),AVBLGRB2(447) & - & /1,'GOES W TB - CH 3 ',242,008, & - & 'SBT113 ON top_of_atmos'/ !Table 130 - DATA IFILV(448),AVBL(448),IQ(448),IS(448),AVBLGRB2(448) & - & /1,'GOES W TB - CH 4 ',243,008, & - & 'SBT114 ON top_of_atmos'/ !Table 130 - DATA IFILV(449),AVBL(449),IQ(449),IS(449),AVBLGRB2(449) & - & /1,'GOES W TB - CH 5 ',244,008, & - & 'SBT115 ON top_of_atmos'/ !Table 130 - -! NCAR GFIP - DATA IFILV(450),AVBL(450),IQ(450),IS(450),AVBLGRB2(450) & - & /1,'NCAR IN-FLIGHT ICING',168,100, & - & 'TIPD ON isobaric_sfc'/ -! Flight level Q - DATA IFILV(451),AVBL(451),IQ(451),IS(451),AVBLGRB2(451) & - & /1,'SPE HUM AT FD HEIGHT',051,103, & - & 'SPF_H ON spec_alt_above_mean_sea_lvl'/ -! Virtual T based CAPE - DATA IFILV(452),AVBL(452),IQ(452),IS(452),AVBLGRB2(452) & - & /1,'TV CNVCT AVBL POT EN',202,001, & - & 'VTCAPE ON surface'/ - DATA IFILV(453),AVBL(453),IQ(453),IS(453),AVBLGRB2(453) & - & /1,'TV CNVCT INHIBITION ',201,001, & - & 'VTCIN ON surface'/ - DATA IFILV(454),AVBL(454),IQ(454),IS(454),AVBLGRB2(454) & - & /1,'VENTILATION RATE ',241,220, & - & 'VRATE ON planetary_bound_lyr'/ - DATA IFILV(455),AVBL(455),IQ(455),IS(455),AVBLGRB2(455) & - & /1,'HAINES INDEX ',250,001, & - & 'HINDEX ON surface'/ - DATA IFILV(456),AVBL(456),IQ(456),IS(456),AVBLGRB2(456) & - & /1,'GOESE TB-2 NON NADIR',213,008, & - & 'SBT122 ON top_of_atmos'/ !table 129 - DATA IFILV(457),AVBL(457),IQ(457),IS(457),AVBLGRB2(457) & - & /1,'GOESE TB-3 NON NADIR',214,008, & - & 'SBT123 ON top_of_atmos'/ !table 129 - DATA IFILV(458),AVBL(458),IQ(458),IS(458),AVBLGRB2(458) & - & /1,'GOESE TB-4 NON NADIR',215,008, & - & 'SBT124 ON top_of_atmos'/ !table 129 - DATA IFILV(459),AVBL(459),IQ(459),IS(459),AVBLGRB2(459) & - & /1,'GOESE TB-5 NON NADIR',216,008, & - & 'SBT126 ON top_of_atmos'/ !table 129 - DATA IFILV(460),AVBL(460),IQ(460),IS(460),AVBLGRB2(460) & - & /1,'GOESW TB-2 NON NADIR',241,008, & - & 'SBT112 ON top_of_atmos'/ !table 130 - DATA IFILV(461),AVBL(461),IQ(461),IS(461),AVBLGRB2(461) & - & /1,'GOESW TB-3 NON NADIR',242,008, & - & 'SBT113 ON top_of_atmos'/ !table 130 - DATA IFILV(462),AVBL(462),IQ(462),IS(462),AVBLGRB2(462) & - & /1,'GOESW TB-4 NON NADIR',243,008, & - & 'SBT114 ON top_of_atmos'/ !table 130 - DATA IFILV(463),AVBL(463),IQ(463),IS(463),AVBLGRB2(463) & - & /1,'GOESW TB-5 NON NADIR',244,008, & - & 'SBT115 ON top_of_atmos'/ !table 130 - - -! NCAR GFIP Severity - DATA IFILV(480),AVBL(480),IQ(480),IS(480),AVBLGRB2(480) & - & /1,'NCAR INFLT ICING SEV',175,100, & - & 'SEV ON isobaric_sfc'/ !table 129 -! - DATA IFILV(482),AVBL(482),IQ(482),IS(482),AVBLGRB2(482) & - & /1,'PRESS AT FD HEIGHTS ',001,103, & - 'PRES ON spec_alt_above_mean_sea_lvl'/ - - DATA IFILV(483),AVBL(483),IQ(483),IS(483),AVBLGRB2(483) & - & /1,'AMSRE TB - CH 9 ',176,008, & - 'AMSRETBCH9 ON top_of_atmos'/ !table 133 - DATA IFILV(484),AVBL(484),IQ(484),IS(484),AVBLGRB2(484) & - & /1,'AMSRE TB - CH 10 ',177,008, & - 'AMSRETBCH10 ON top_of_atmos'/ !table 133 - DATA IFILV(485),AVBL(485),IQ(485),IS(485),AVBLGRB2(485) & - & /1,'AMSRE TB - CH 11 ',178,008, & - 'AMSRETBCH11 ON top_of_atmos'/ !table 133 - DATA IFILV(486),AVBL(486),IQ(486),IS(486),AVBLGRB2(486) & - & /1,'AMSRE TB - CH 12 ',179,008, & - 'AMSRETBCH12 ON top_of_atmos'/ !table 133 -! - DATA IFILV(488),AVBL(488),IQ(488),IS(488),AVBLGRB2(488) & - & /1,'TMI TB - CH 6 ',176,008, & - & 'TMITBCH6 ON top_of_atmos'/ !table 133 - DATA IFILV(489),AVBL(489),IQ(489),IS(489),AVBLGRB2(489) & - & /1,'TMI TB - CH 7 ',177,008, & - & 'TMITBCH7 ON top_of_atmos'/ !table 133 - DATA IFILV(490),AVBL(490),IQ(490),IS(490),AVBLGRB2(490) & - & /1,'TMI TB - CH 8 ',178,008, & - & 'TMITBCH8 ON top_of_atmos'/ !table 133 - DATA IFILV(491),AVBL(491),IQ(491),IS(491),AVBLGRB2(491) & - & /1,'TMI TB - CH 9 ',179,008, & - & 'TMITBCH9 ON top_of_atmos'/ !table 133 - -! -! NAMB additions - DATA IFILV(500),AVBL(500),IQ(500),IS(500),AVBLGRB2(500) & - & /1,'TIME AVG PCT SNW CVR',238,001, & - & 'AVG SNOWC ON surface' / - DATA IFILV(501),AVBL(501),IQ(501),IS(501),AVBLGRB2(501) & - & /1,'TIME AVG SFC PRESS ',001,001, & - & 'AVG PRES ON surface' / - DATA IFILV(502),AVBL(502),IQ(502),IS(502),AVBLGRB2(502) & - & /1,'TIME AVG TMP AT 10M ',011,105, & - & 'AVG TMP ON spec_hgt_lvl_above_grnd' / - DATA IFILV(503),AVBL(503),IQ(503),IS(503),AVBLGRB2(503) & - & /1,'TAVG MASS EXCH COEF ',185,001, & - & 'AVG AKHS ON surface' / - DATA IFILV(504),AVBL(504),IQ(504),IS(504),AVBLGRB2(504) & - & /1,'TAVG WIND EXCH COEF ',186,001, & - & 'AVG AKMS ON surface' / - DATA IFILV(505),AVBL(505),IQ(505),IS(505),AVBLGRB2(505) & - & /1,'TEMP AT 10 M ',011,105, & - & 'TMP ON spec_hgt_lvl_above_grnd' / - DATA IFILV(506),AVBL(506),IQ(506),IS(506),AVBLGRB2(506) & - & /1,'U COMP MAX 10 M WIND',253,105, & - & 'MAXUW ON spec_hgt_lvl_above_grnd' / - DATA IFILV(507),AVBL(507),IQ(507),IS(507),AVBLGRB2(507) & - & /1,'V COMP MAX 10 M WIND',254,105, & - & 'MAXVW ON spec_hgt_lvl_above_grnd' / - DATA IFILV(508),AVBL(508),IQ(508),IS(508),AVBLGRB2(508) & - & /1,'MAX PRECIP RATE ',059,001, & - & 'MAX PRATE ON surface' / - DATA IFILV(509),AVBL(509),IQ(509),IS(509),AVBLGRB2(509) & - & /1,'MAX FROZ PRECIP RATE',064,001, & - & 'MAX FROZ PRATE ON surface' / - DATA IFILV(513),AVBL(513),IQ(513),IS(513),AVBLGRB2(513) & - & /1,'AV CANOPY WATER EVAP',200,001, & - & 'AVE EVCW ON surface'/ - DATA IFILV(514),AVBL(514),IQ(514),IS(514),AVBLGRB2(514) & - & /1,'DIRECT SOIL EVAP ',199,001, & - & 'AVE EVBS ON surface'/ - DATA IFILV(515),AVBL(515),IQ(515),IS(515),AVBLGRB2(515) & - & /1,'PLANT TRANSPIRATION ',210,001, & - & 'AVE TRANS ON surface'/ - DATA IFILV(516),AVBL(516),IQ(516),IS(516),AVBLGRB2(516) & - & /1,'SNOW SUBLIMATION ',198,001, & - & 'AVE SBSNO ON surface'/ - DATA IFILV(517),AVBL(517),IQ(517),IS(517),AVBLGRB2(517) & - & /1,'AVE POTENTIAL EVAP ',145,001, & - & 'AVE PEVPR ON surface'/ - -! -! Reserving Index 550-600 for Jun Wang -! - -! -!for grid2 -!-- ADD for INST CRAIN, CSNOW,CICEP,CFRZR (CRAIN 160) - DATA IFILV(551),AVBL(551),IQ(551),IS(551),AVBLGRB2(551) & - & /1,'INST CATEG SNOW ',143,001, & - & 'INST CSNOW ON surface'/ - DATA IFILV(552),AVBL(552),IQ(552),IS(552),AVBLGRB2(552) & - & /1,'INST CATEG ICE PELLE',142,001, & - & 'INST CICEP ON surface'/ - DATA IFILV(553),AVBL(553),IQ(553),IS(553),AVBLGRB2(553) & - & /1,'INST CATEG FRZ RAIN ',141,001, & - & 'INST CFRZR ON surface'/ -! -!-- ADD for AVE CSNOW,CICEP,CFRZR, (CRAIN 317) - DATA IFILV(555),AVBL(555),IQ(555),IS(555),AVBLGRB2(555) & - & /1,'AVE CATEG SNOW ',143,001, & - & 'AVE CSNOW ON surface'/ - DATA IFILV(556),AVBL(556),IQ(556),IS(556),AVBLGRB2(556) & - & /1,'AVE CATEG ICE PELLE',142,001, & - & 'AVE CICEP ON surface'/ - DATA IFILV(557),AVBL(557),IQ(557),IS(557),AVBLGRB2(557) & - & /1,'AVE CATEG FRZ RAIN ',141,001, & - & 'AVE CFRZR ON surface'/ -! -!-- ADD for INST CRAIN, CSNOW,CICEP,CFRZR (CRAIN 160) - DATA IFILV(559),AVBL(559),IQ(559),IS(559),AVBLGRB2(559) & - & /1,'INST CATEG SNOW ',143,001, & - & 'INST CSNOW ON surface'/ - DATA IFILV(560),AVBL(560),IQ(560),IS(560),AVBLGRB2(560) & - & /1,'INST CATEG ICE PELLE',142,001, & - & 'INST CICEP ON surface'/ - DATA IFILV(561),AVBL(561),IQ(561),IS(561),AVBLGRB2(561) & - & /1,'INST CATEG FRZ RAIN ',141,001, & - & 'INST CFRZR ON surface'/ -! -!-- ADD for AVE CSNOW,CICEP,CFRZR, (CRAIN 317) - DATA IFILV(563),AVBL(563),IQ(563),IS(563),AVBLGRB2(563) & - & /1,'AVE CATEG SNOW ',143,001, & - & 'AVE CSNOW ON surface'/ - DATA IFILV(564),AVBL(564),IQ(564),IS(564),AVBLGRB2(564) & - & /1,'AVE CATEG ICE PELLET',142,001, & - & 'AVE CICEP ON surface'/ - DATA IFILV(565),AVBL(565),IQ(565),IS(565),AVBLGRB2(565) & - & /1,'AVE CATEG FRZ RAIN ',141,001, & - & 'AVE CFRZR ON surface'/ -! -!-- ADD BEST CAPE CIN - DATA IFILV(566),AVBL(566),IQ(566),IS(566),AVBLGRB2(566) & - & /1,'BEST CAPE ON PRESLEV',157,116, & - & 'CAPE ON spec_pres_above_grnd'/ - DATA IFILV(567),AVBL(567),IQ(567),IS(567),AVBLGRB2(567) & - & /1,'BEST CIN ON PRESLEV ',156,116, & - & 'CIN ON spec_pres_above_grnd'/ -!-- add PRES Mean sea level---gfs - DATA IFILV(568),AVBL(568),IQ(568),IS(568),AVBLGRB2(568) & - & /1,'PRES ON MEAN SLP ',001,102, & - & 'PRES ON mean_sea_lvl'/ -!-- add T_CDC on convective_cloud_lyr --gfs - DATA IFILV(569),AVBL(569),IQ(569),IS(569),AVBLGRB2(569) & - & /1,'AVG CNVCT CLDLY FRAC',072,200, & - & 'AVE T_CDC ON convective_cloud_lyr'/ -!-- add T_CDC on entire_atmos_single_lyr --gfs - DATA IFILV(570),AVBL(570),IQ(570),IS(570),AVBLGRB2(570) & - & /1,'CONV CLOUD FRACTION ',072,200, & - & 'T_CDC ON convective_cloud_lyr'/ -! -!-- GFS use different kpds5 and kpds6 for surface lifted index, -!-- best lifted index(surface), soil temperature(TMP), -!-- total column cloud water - DATA IFILV(571),AVBL(571),IQ(571),IS(571),AVBLGRB2(571) & - & /1,'BOTTOM SOIL TEMP ',085,111, & - & 'TMP ON depth_bel_land_sfc'/ -! Chuang: remove this redendent index after communicating with Smirnova -! DATA IFILV(572),AVBL(572),IQ(572),IS(572),AVBLGRB2(572) & -! & /1,'LIFTED INDEX--SURFCE',131,101, & -! & 'LFT_X ON surface'/ - DATA IFILV(573),AVBL(573),IQ(573),IS(573),AVBLGRB2(573) & - & /1,'LIFTED INDEX--BEST ',132,116, & - & '4LFTX ON surface'/ - DATA IFILV(574),AVBL(574),IQ(574),IS(574),AVBLGRB2(574) & - & /1,'GFS SOIL TEMPERATURE',085,112, & - & 'TMP ON depth_bel_land_sfc'/ - DATA IFILV(575),AVBL(575),IQ(575),IS(575),AVBLGRB2(575) & - & /1,'TOTAL COLUMN CLD WTR',136,200, & - & 'C_WAT ON entire_atmos_single_lyr'/ -!-- NMMB grib2 - DATA IFILV(576),AVBL(576),IQ(576),IS(576),AVBLGRB2(576) & - & /1,'UWD AT FDHEIGHTS HGT',033,105, & - & 'U_GRD ON spec_hgt_lvl_above_grnd'/ - DATA IFILV(577),AVBL(577),IQ(577),IS(577),AVBLGRB2(577) & - & /1,'VWD AT FDHEIGHTS HGT',034,105, & - & 'V_GRD ON spec_hgt_lvl_above_grnd'/ -!grib2: use same fld #451 for two diffent level types - DATA IFILV(578),AVBL(578),IQ(578),IS(578),AVBLGRB2(578) & - & /1,'SPFH AT FDHEIGHT HGT',051,105, & - & 'SPF_H ON spec_hgt_lvl_above_grnd'/ -!grib2: use same fld #482 for two diffent level types - DATA IFILV(579),AVBL(579),IQ(579),IS(579),AVBLGRB2(579) & - & /1,'PRES AT FDHEIGHT HGT',001,105, & - 'PRES ON spec_hgt_lvl_above_grnd'/ - DATA IFILV(580),AVBL(580),IQ(580),IS(580),AVBLGRB2(580) & - & /1,'ICING AT FD HEIGHTS ',168,103, & - 'ICI ON spec_alt_above_mean_sea_lvl'/ - DATA IFILV(581),AVBL(581),IQ(581),IS(581),AVBLGRB2(581) & - & /1,'RADAR DERIVED VIL ',206,200, & - 'VIL ON entire_atmos'/ -! -!-- ADD mixed layer CAPE CIN - DATA IFILV(582),AVBL(582),IQ(582),IS(582),AVBLGRB2(582) & - & /1,'MIXED LAYER CAPE ',157,116, & - & 'CAPE ON spec_pres_above_grnd'/ - DATA IFILV(583),AVBL(583),IQ(583),IS(583),AVBLGRB2(583) & - & /1,'MIXED LAYER CIN ',156,116, & - & 'CIN ON spec_pres_above_grnd'/ -!-- ADD MOST UNSTABLE CAPE/CIN -LOWEST 300 MB - DATA IFILV(584),AVBL(584),IQ(584),IS(584),AVBLGRB2(584) & - & /1,'MOST UNSTABLE CAPE ',157,116, & - & 'CAPE ON spec_pres_above_grnd'/ - DATA IFILV(585),AVBL(585),IQ(585),IS(585),AVBLGRB2(585) & - & /1,'MOST UNSTABLE CIN ',156,116, & - & 'CIN ON spec_pres_above_grnd'/ -!-- tmp at fd hgt (specified hgt level above ground) - DATA IFILV(586),AVBL(586),IQ(586),IS(586),AVBLGRB2(586) & - & /1,'TEMP AT FDHEIGHT HGT',011,105, & - & 'TMP ON spec_hgt_above_mean_sea_lvl'/ -!icing at fd hgt (specified hgt level above ground) - DATA IFILV(587),AVBL(587),IQ(587),IS(587),AVBLGRB2(587) & - & /1,'ICING FDHEIGHT HGT ',168,105, & - 'ICI ON spec_alt_above_mean_sea_lvl'/ -!icing vessel - - DATA IFILV(588),AVBL(588),IQ(588),IS(588),AVBLGRB2(588) & - & /1,'ICE GROWTH RATE AT FDHEIGHT HGT ', & - 097,001, & - & 'ICEG ON spec-hgt_above_mean_sea_lvl'/ - - -! Reserving Index 550-600 for grib2 - -! Reserving Index 601-700 for GOCART -! ADD DUST AT FD HEIGHTS (GOCART) - DATA IFILV(601),AVBL(601),IQ(601),IS(601),AVBLGRB2(601) & - & /1,'DUST 1 AT FD HEIGHTS',240,103, & - 'DU1 ON spec_alt_above_mean_sea_lvl'/ - DATA IFILV(602),AVBL(602),IQ(602),IS(602),AVBLGRB2(602) & - & /1,'DUST 2 AT FD HEIGHTS',241,103, & - 'DU2 ON spec_alt_above_mean_sea_lvl'/ - DATA IFILV(603),AVBL(603),IQ(603),IS(603),AVBLGRB2(603) & - & /1,'DUST 3 AT FD HEIGHTS',242,103, & - 'DU3 ON spec_alt_above_mean_sea_lvl'/ - DATA IFILV(604),AVBL(604),IQ(604),IS(604),AVBLGRB2(604) & - & /1,'DUST 4 AT FD HEIGHTS',243,103, & - 'DU4 ON spec_alt_above_mean_sea_lvl'/ - DATA IFILV(605),AVBL(605),IQ(605),IS(605),AVBLGRB2(605) & - & /1,'DUST 5 AT FD HEIGHTS',244,103, & - 'DU5 ON spec_alt_above_mean_sea_lvl'/ -! ADD AEROSOL OPTICAL PROPERTIES (GOCART) - DATA IFILV(606),AVBL(606),IQ(606),IS(606),AVBLGRB2(606) & - & /1,'AEROSOL EXTINCTION ',128,109, & - 'Aerosol extinction coefficient '/ - DATA IFILV(607),AVBL(607),IQ(607),IS(607),AVBLGRB2(607) & - & /1,'AER ASYMMETRY FACTOR',130,109, & - 'Aerosol asymmetry factor '/ - DATA IFILV(608),AVBL(608),IQ(608),IS(608),AVBLGRB2(608) & - & /1,'SINGLE SCATTER ALBD ',131,109, & - 'Aerosol single scatter albedo '/ -! ADD AEROSOL OPTICAL DEPTH AT 550 NM (GOCART) - DATA IFILV(609),AVBL(609),IQ(609),IS(609),AVBLGRB2(609) & - & /1,'AER OPT DEP AT 550 ',129,200, & - 'Total aerosol optical depth at 550'/ - DATA IFILV(610),AVBL(610),IQ(610),IS(610),AVBLGRB2(610) & - & /1,'DU AER OPT DEP 550 ',133,200, & - 'Dust aerosol optical depth at 550 '/ - DATA IFILV(611),AVBL(611),IQ(611),IS(611),AVBLGRB2(611) & - & /1,'SS AER OPT DEP 550 ',134,200, & - 'Seasalt aer optical depth at 550 '/ - DATA IFILV(612),AVBL(612),IQ(612),IS(612),AVBLGRB2(612) & - & /1,'SU AER OPT DEP 550 ',135,200, & - 'Sulfate aer optical depth at 550 '/ - DATA IFILV(613),AVBL(613),IQ(613),IS(613),AVBLGRB2(613) & - & /1,'OC AER OPT DEP 550 ',136,200, & - 'Organic carbon aer opt dep at 550 '/ - DATA IFILV(614),AVBL(614),IQ(614),IS(614),AVBLGRB2(614) & - & /1,'BC AER OPT DEP 550 ',137,200, & - 'Black carbon aer opt dep at 550 '/ -! ADD BC, OC, SULF AEROSOL COLUMN MASS DENSITY (GOCART) - DATA IFILV(616),AVBL(616),IQ(616),IS(616),AVBLGRB2(616) & - & /1,'BC COL MASS DEN ',151,200, & - 'fine bc col mass density '/ - DATA IFILV(617),AVBL(617),IQ(617),IS(617),AVBLGRB2(617) & - & /1,'OC COL MASS DEN ',152,200, & - 'fine oc col mass density '/ - DATA IFILV(618),AVBL(618),IQ(618),IS(618),AVBLGRB2(618) & - & /1,'SULF COL MASS DEN ',153,200, & - 'fine sulf col mass density '/ -! ADD AEROSOL SURFACE MASS CONCENTRATION (GOCART), use table 129 - DATA IFILV(619),AVBL(619),IQ(619),IS(619),AVBLGRB2(619) & - & /1,'PM10 SFC MASS CON ',154,001, & - 'coarse sfc mass concentration '/ - DATA IFILV(620),AVBL(620),IQ(620),IS(620),AVBLGRB2(620) & - & /1,'PM25 SFC MASS CON ',155,001, & - 'fine sfc mass concentration '/ -! ADD PM10 and PM25 AEROSOL COLUMN MASS DENSITY (GOCART) - DATA IFILV(621),AVBL(621),IQ(621),IS(621),AVBLGRB2(621) & - & /1,'PM10 COL MASS DEN ',156,200, & - 'coarse aerosol col mass density '/ - DATA IFILV(622),AVBL(622),IQ(622),IS(622),AVBLGRB2(622) & - & /1,'PM25 COL MASS DEN ',157,200, & - 'fine aerosol col mass density '/ -! ADD AEROSOL OPTICAL DEPTH AT OTHER CHANNELS (GOCART) - DATA IFILV(623),AVBL(623),IQ(623),IS(623),AVBLGRB2(623) & - & /1,'AER OPT DEP AT 340 ',129,200, & - 'Total aerosol optical depth at 340'/ - DATA IFILV(624),AVBL(624),IQ(624),IS(624),AVBLGRB2(624) & - & /1,'AER OPT DEP AT 440 ',129,200, & - 'Total aerosol optical depth at 440'/ - DATA IFILV(625),AVBL(625),IQ(625),IS(625),AVBLGRB2(625) & - & /1,'AER OPT DEP AT 660 ',129,200, & - 'Total aerosol optical depth at 660'/ - DATA IFILV(626),AVBL(626),IQ(626),IS(626),AVBLGRB2(626) & - & /1,'AER OPT DEP AT 860 ',129,200, & - 'Total aerosol optical depth at 860'/ - DATA IFILV(627),AVBL(627),IQ(627),IS(627),AVBLGRB2(627) & - & /1,'AER OPT DEP AT 1630 ',129,200, & - 'Total aer optical depth at 1630 '/ - DATA IFILV(628),AVBL(628),IQ(628),IS(628),AVBLGRB2(628) & - & /1,'AER OPT DEP AT 11100',129,200, & - 'Total aer optical dep at 11 micron'/ -! ADD DUST FIELDS ON MDL SFCS (GOCART) - DATA IFILV(629),AVBL(629),IQ(629),IS(629),AVBLGRB2(629) & - & /1,'DUST 1 ON MDL SFCS ',240,109, & - & 'DU1 ON hybrid_lvl'/ - DATA IFILV(630),AVBL(630),IQ(630),IS(630),AVBLGRB2(630) & - & /1,'DUST 2 ON MDL SFCS ',241,109, & - & 'DU2 ON hybrid_lvl'/ - DATA IFILV(631),AVBL(631),IQ(631),IS(631),AVBLGRB2(631) & - & /1,'DUST 3 ON MDL SFCS ',242,109, & - & 'DU3 ON hybrid_lvl'/ - DATA IFILV(632),AVBL(632),IQ(632),IS(632),AVBLGRB2(632) & - & /1,'DUST 4 ON MDL SFCS ',243,109, & - & 'DU4 ON hybrid_lvl'/ - DATA IFILV(633),AVBL(633),IQ(633),IS(633),AVBLGRB2(633) & - & /1,'DUST 5 ON MDL SFCS ',244,109, & - & 'DU5 ON hybrid_lvl'/ -! ADD NON-DUST AEROSOL FIELDS ON MDL SFCS (GOCART) - DATA IFILV(634),AVBL(634),IQ(634),IS(634),AVBLGRB2(634) & - & /1,'SEASALT 1 ON MDL SFC',245,109, & - & 'SS1 ON hybrid_lvl'/ - DATA IFILV(635),AVBL(635),IQ(635),IS(635),AVBLGRB2(635) & - & /1,'SEASALT 2 ON MDL SFC',246,109, & - & 'SS2 ON hybrid_lvl'/ - DATA IFILV(636),AVBL(636),IQ(636),IS(636),AVBLGRB2(636) & - & /1,'SEASALT 3 ON MDL SFC',247,109, & - & 'SS3 ON hybrid_lvl'/ - DATA IFILV(637),AVBL(637),IQ(637),IS(637),AVBLGRB2(637) & - & /1,'SEASALT 4 ON MDL SFC',248,109, & - & 'SS4 ON hybrid_lvl'/ - DATA IFILV(638),AVBL(638),IQ(638),IS(638),AVBLGRB2(638) & - & /1,'SEASALT 5 ON MDL SFC',253,109, & - & 'SS5 ON hybrid_lvl'/ - DATA IFILV(639),AVBL(639),IQ(639),IS(639),AVBLGRB2(639) & - & /1,'SULFATE ON MDL SFC ',254,109, & - & 'SO4 ON hybrid_lvl'/ - DATA IFILV(640),AVBL(640),IQ(640),IS(640),AVBLGRB2(640) & - & /1,'OC DRY ON MDL SFC ',249,109, & - & 'OC_DRY hybrid_lvl'/ - DATA IFILV(641),AVBL(641),IQ(641),IS(641),AVBLGRB2(641) & - & /1,'OC WET ON MDL SFC ',250,109, & - & 'OC_WET hybrid_lvl'/ - DATA IFILV(642),AVBL(642),IQ(642),IS(642),AVBLGRB2(642) & - & /1,'BC DRY ON MDL SFC ',251,109, & - & 'BC_DRY hybrid_lvl'/ - DATA IFILV(643),AVBL(643),IQ(643),IS(643),AVBLGRB2(643) & - & /1,'BC WET ON MDL SFC ',252,109, & - & 'BC_WET hybrid_lvl'/ -! ADD AIR DENSITY AND LAYER THICKNESS - DATA IFILV(644),AVBL(644),IQ(644),IS(644),AVBLGRB2(644) & - & /1,'AIR DEN ON MDL SFCS ',189,109, & - & 'AIRDEN hybrid_lvl'/ - DATA IFILV(645),AVBL(645),IQ(645),IS(645),AVBLGRB2(645) & - & /1,'DPRES ON MDL SFCS ',1,110, & - & 'DPRES hybrid_lvl '/ -! ADD OTHER PM2.5 AEROSOL COLUMN MASS DENSITY (GOCART) - DATA IFILV(646),AVBL(646),IQ(646),IS(646),AVBLGRB2(646) & - & /1,'DUST COL MASS DEN ',159,200, & - 'fine dust col mass density '/ - DATA IFILV(647),AVBL(647),IQ(647),IS(647),AVBLGRB2(647) & - & /1,'SEAS COL MASS DEN ',160,200, & - 'fine seas col mass density '/ - DATA IFILV(648),AVBL(648),IQ(648),IS(648),AVBLGRB2(648) & - & /1,'SINGLE SCAT ALBD 340',131,200, & - 'Aer single scatter alb at 340 nm'/ - DATA IFILV(649),AVBL(649),IQ(649),IS(649),AVBLGRB2(649) & - & /1,'AER ASYM FACTOR 340 ',130,200, & - 'Aerosol asymmetry factor at 340 nm'/ -! ADD AEROSOL SCATTERING AOT - DATA IFILV(650),AVBL(650),IQ(650),IS(650),AVBLGRB2(650) & - & /1,'AER SCAT OPT DEP 550',129,200, & - 'Total scat aer opt dep at 550 nm'/ - DATA IFILV(651),AVBL(651),IQ(651),IS(651),AVBLGRB2(651) & - & /1,'DU SCAT OPT DEP 550 ',129,200, & - 'DUST scat aer opt dep at 550 nm'/ - DATA IFILV(652),AVBL(652),IQ(652),IS(652),AVBLGRB2(652) & - & /1,'SS SCAT OPT DEP 550 ',129,200, & - 'SALT scat aer opt dep at 550 nm'/ - DATA IFILV(653),AVBL(653),IQ(653),IS(653),AVBLGRB2(653) & - & /1,'SU SCAT OPT DEP 550 ',129,200, & - 'SUSO scat aer opt dep at 550 nm'/ - DATA IFILV(654),AVBL(654),IQ(654),IS(654),AVBLGRB2(654) & - & /1,'OC SCAT OPT DEP 550 ',129,200, & - 'WASO scat aer opt dep at 550 nm'/ - DATA IFILV(655),AVBL(655),IQ(655),IS(655),AVBLGRB2(655) & - & /1,'BC SCAT OPT DEP 550 ',129,200, & - 'SOOT scat aer opt dep at 550 nm'/ -! ADD AEROSOL ANGTROM EXPONENT - DATA IFILV(656),AVBL(656),IQ(656),IS(656),AVBLGRB2(656) & - & /1,'ANGSTROM EXP 440_860',255,200, & - 'Angstrom exponent 440-860 nm '/ - -! ADD DUST,SS, OC,BC, SU PRODUCTION AND REMOVAL FLUXES (GOCART) - DATA IFILV(659),AVBL(659),IQ(659),IS(659),AVBLGRB2(659) & - & /1,'DUST EMISSION FLUX ',151,200, & - 'dust emission fluxes '/ - DATA IFILV(660),AVBL(660),IQ(660),IS(660),AVBLGRB2(660) & - & /1,'DUST SEDIMENTATION ',152,200, & - 'dust sedimentation fluxes '/ - DATA IFILV(661),AVBL(661),IQ(661),IS(661),AVBLGRB2(661) & - & /1,'DUST DRY DEPOSITION ',153,200, & - 'dust dry deposition fluxes '/ - DATA IFILV(662),AVBL(662),IQ(662),IS(662),AVBLGRB2(662) & - & /1,'DUST WET DEPOSITION ',154,200, & - 'dust wet deposition fluxes '/ - DATA IFILV(663),AVBL(663),IQ(663),IS(663),AVBLGRB2(663) & - & /1,'SS EMISSION FLUX ',151,200, & - 'seasalt emission fluxes '/ - DATA IFILV(664),AVBL(664),IQ(664),IS(664),AVBLGRB2(664) & - & /1,'SS SEDIMENTATION ',152,200, & - 'seasalt sedimentation fluxes '/ - DATA IFILV(665),AVBL(665),IQ(665),IS(665),AVBLGRB2(665) & - & /1,'SS DRY DEPOSITION ',153,200, & - 'seasalt dry deposition fluxes '/ - DATA IFILV(666),AVBL(666),IQ(666),IS(666),AVBLGRB2(666) & - & /1,'SS WET DEPOSITION ',154,200, & - 'seasalt wet deposition fluxes '/ - DATA IFILV(667),AVBL(667),IQ(667),IS(667),AVBLGRB2(667) & - & /1,'BC EMISSION FLUX ',151,200, & - 'black carbon emission fluxes '/ - DATA IFILV(668),AVBL(668),IQ(668),IS(668),AVBLGRB2(668) & - & /1,'BC SEDIMENTATION ',152,200, & - 'black carbon sedimentation fluxes '/ - DATA IFILV(669),AVBL(669),IQ(669),IS(669),AVBLGRB2(669) & - & /1,'BC DRY DEPOSITION ',153,200, & - 'black carbon dry deposition fluxes'/ - DATA IFILV(670),AVBL(670),IQ(670),IS(670),AVBLGRB2(670) & - & /1,'BC WET DEPOSITION ',154,200, & - 'black carbon wet deposition fluxes'/ - DATA IFILV(671),AVBL(671),IQ(671),IS(671),AVBLGRB2(671) & - & /1,'OC EMISSION FLUX ',151,200, & - 'pom emission fluxes '/ - DATA IFILV(672),AVBL(672),IQ(672),IS(672),AVBLGRB2(672) & - & /1,'OC SEDIMENTATION ',152,200, & - 'pom sedimentation fluxes '/ - DATA IFILV(673),AVBL(673),IQ(673),IS(673),AVBLGRB2(673) & - & /1,'OC DRY DEPOSITION ',153,200, & - 'pom dry deposition fluxes '/ - DATA IFILV(674),AVBL(674),IQ(674),IS(674),AVBLGRB2(674) & - & /1,'OC WET DEPOSITION ',154,200, & - 'pom wet deposition fluxes '/ - DATA IFILV(675),AVBL(675),IQ(675),IS(675),AVBLGRB2(675) & - & /1,'SU EMISSION FLUX ',151,200, & - 'suldate emission fluxes '/ - DATA IFILV(676),AVBL(676),IQ(676),IS(676),AVBLGRB2(676) & - & /1,'SU SEDIMENTATION ',152,200, & - 'sulfate sedimentation fluxes '/ - DATA IFILV(677),AVBL(677),IQ(677),IS(677),AVBLGRB2(677) & - & /1,'SU DRY DEPOSITION ',153,200, & - 'sulfate dry deposition fluxes '/ - DATA IFILV(678),AVBL(678),IQ(678),IS(678),AVBLGRB2(678) & - & /1,'SU WET DEPOSITION ',154,200, & - 'sulfate wet deposition fluxes '/ - DATA IFILV(679),AVBL(679),IQ(679),IS(679),AVBLGRB2(679) & - & /1,'DU SCAVENGING FLUX ',155,200, & - 'dust scavenging fluxes '/ - DATA IFILV(680),AVBL(680),IQ(680),IS(680),AVBLGRB2(680) & - & /1,'SS SCAVENGING FLUX ',156,200, & - 'seasalt scavenging fluxes '/ - DATA IFILV(681),AVBL(681),IQ(681),IS(681),AVBLGRB2(681) & - & /1,'BC SCAVENGING FLUX ',157,200, & - 'black carbon scavenging fluxes '/ - DATA IFILV(682),AVBL(682),IQ(682),IS(682),AVBLGRB2(682) & - & /1,'OC SCAVENGING FLUX ',158,200, & - 'organic carbon scavenging fluxes '/ -! DATA IFILV(683),AVBL(683),IQ(683),IS(683),AVBLGRB2(683) & -! & /1,'SS CR SFC MASS CON ',159,200, & -! 'seasalt cr sfc mass concentration '/ - DATA IFILV(684),AVBL(684),IQ(684),IS(684),AVBLGRB2(684) & - & /1,'SEAS25 SFC MASS CON ',159,200, & - 'seas pm25 sfc mass concentration '/ -! DATA IFILV(685),AVBL(685),IQ(685),IS(685),AVBLGRB2(685) & -! & /1,'DU CR SFC MASS CON ',160,001, & -! 'dust cr sfc mass con '/ - DATA IFILV(686),AVBL(686),IQ(686),IS(686),AVBLGRB2(686) & - & /1,'DUST25 SFC MASS CON ',161,001, & - 'dust pm25 sfc mass con '/ - DATA IFILV(687),AVBL(687),IQ(687),IS(687),AVBLGRB2(687) & - & /1,'BC SFC MASS CON ',162,001, & - 'black carbon sfc mass con '/ - DATA IFILV(688),AVBL(688),IQ(688),IS(688),AVBLGRB2(688) & - & /1,'OC SFC MASS CON ',163,001, & - 'organic carbon sfc mass con '/ - DATA IFILV(689),AVBL(689),IQ(689),IS(689),AVBLGRB2(689) & - & /1,'SU SFC MASS CON ',164,001, & - 'sulfate sfc mass con '/ - DATA IFILV(690),AVBL(690),IQ(690),IS(690),AVBLGRB2(690) & - & /1,'INST SU SFC MASS CON',164,001, & - 'instn sulfate sfc mass con '/ - DATA IFILV(691),AVBL(691),IQ(691),IS(691),AVBLGRB2(691) & - & /1,'INST OC SFC MASS CON',164,001, & - 'instn organic carbon sfc mass con '/ - DATA IFILV(692),AVBL(692),IQ(692),IS(692),AVBLGRB2(692) & - & /1,'INST BC SFC MASS CON',164,001, & - 'instn black carbon sfc mass con '/ - DATA IFILV(693),AVBL(693),IQ(693),IS(693),AVBLGRB2(693) & - & /1,'INST DU CR SMASS ',164,001, & - 'instn du coarse mode sfc mass con '/ - DATA IFILV(694),AVBL(694),IQ(694),IS(694),AVBLGRB2(694) & - & /1,'INST DU FN SMASS ',164,001, & - 'instn du fine mode sfc mass con '/ - DATA IFILV(695),AVBL(695),IQ(695),IS(695),AVBLGRB2(695) & - & /1,'INST SS CR SMASS ',164,001, & - 'instn ss coarse mode sfc mass con '/ - DATA IFILV(696),AVBL(696),IQ(696),IS(696),AVBLGRB2(696) & - & /1,'INST SS FN SMASS ',164,001, & - 'instn ss fine mode sfc mass con '/ - DATA IFILV(697),AVBL(697),IQ(697),IS(697),AVBLGRB2(697) & - & /1,'INST AER CR SMASS ',164,001, & - 'instn aer coarse mode sfc mass con'/ - DATA IFILV(698),AVBL(698),IQ(698),IS(698),AVBLGRB2(698) & - & /1,'INST AER FN SMASS ',164,001, & - 'instn aer fine mode sfc mass con '/ - DATA IFILV(711),AVBL(711),IQ(711),IS(711),AVBLGRB2(711) & - & /1,'GSD CLD BOT HEIGHT ',007,002, & - & 'GSD HGT ON cloud_base'/ -! Reserving Index 601-700 for GOCART -! - -! Reserve index 700-799 for GSD -! Chuang: remove DUST 1-5 output from GSD because GOCART also outputs -! the same variables above - DATA IFILV(771),AVBL(771),IQ(771),IS(771),AVBLGRB2(771) & - & /1,'FIRST LEVEL DEWPOINT',017,105, & - & 'DPT ON spec_hgt_lvl_above_grnd'/ - -! GSD HRRR-CHEM output - DATA IFILV(720),AVBL(720),IQ(720),IS(720),AVBLGRB2(720) & - & /1,'PM 2.5 ON MDL SFCS ',240,107, & - & 'PM 2.5 ON MDL SFCS '/ - DATA IFILV(721),AVBL(721),IQ(721),IS(721),AVBLGRB2(721) & - & /1,'PM 10 ON MDL SFCS ',241,107, & - & 'PM 10 ON MDL SFCS '/ - DATA IFILV(722),AVBL(722),IQ(722),IS(722),AVBLGRB2(722) & - & /1,'SO2 ON MDL SFCS ',242,107, & - & 'SO2 ON MDL SFCS '/ - DATA IFILV(723),AVBL(723),IQ(723),IS(723),AVBLGRB2(723) & - & /1,'PM 2.5 ON P SFCS ',240,100, & - & 'PM 2.5 ON MDL SFCS '/ -! no entry in GRIB table for NCLOUD use 147 - Zonal flux of gravity wave stress - DATA IFILV(747),AVBL(747),IQ(747),IS(747),AVBLGRB2(747) & - & /1,'NCCLOUD ON MDL SFCS ',147,109, & - & 'NCCLOUD ON MDL SFCS '/ - DATA IFILV(750),AVBL(750),IQ(750),IS(750),AVBLGRB2(750) & - & /1,'WV MIX R ON MDL SFCS',053,109, & - & 'WV MIX R ON MDL SFCS'/ - DATA IFILV(751),AVBL(751),IQ(751),IS(751),AVBLGRB2(751) & - & /1,'VP TEMP ON MDL SFCS ',189,109, & - & 'VP TEMP ON MDL SFCS '/ - DATA IFILV(752),AVBL(752),IQ(752),IS(752),AVBLGRB2(752) & - & /1,'NCICE ON MDL SFCS ',198,109, & - & 'NCICE ON MDL SFCS '/ - -! no entry in GRIB table for NRAIN, use 148 - Meridional flux of gravity wave stress - DATA IFILV(754),AVBL(754),IQ(754),IS(754),AVBLGRB2(754) & - & /1,'NCRAIN ON MDL SFCS ',148,109, & - & 'NCRAIN ON MDL SFCS '/ -! water friendly aerosol: entry 157, Table 129 - DATA IFILV(766),AVBL(766),IQ(766),IS(766),AVBLGRB2(766) & - & /1,'NWFA ON MDL SFCS ',157,109, & - & 'NWFA ON MDL SFCS '/ -! ice friendly aerosol: entry 156, Table 129 - DATA IFILV(767),AVBL(767),IQ(767),IS(767),AVBLGRB2(767) & - & /1,'NIFA ON MDL SFCS ',156,109, & - & 'NIFA ON MDL SFCS '/ - -! --- - DATA IFILV(546),AVBL(546),IQ(546),IS(546),AVBLGRB2(546) & - & /1,'SHELTER POT TEMP ',013,105, & - & 'SHELTER POT TEMP '/ - DATA IFILV(547),AVBL(547),IQ(547),IS(547),AVBLGRB2(547) & - & /1,'SHELTER DEWP DEPRES ',018,105, & - & 'SHELTER DEWP DEPRES '/ - DATA IFILV(548),AVBL(548),IQ(548),IS(548),AVBLGRB2(548) & - & /1,'SURFACE EQ POT TEMP ',014,001, & - & 'SURFACE EQ POT TEMP '/ - DATA IFILV(755),AVBL(755),IQ(755),IS(755),AVBLGRB2(755) & - & /1,'EQUIL LEVEL HEIGHT ',007,247, & - & 'EQUIL LEVEL HEIGHT '/ - DATA IFILV(753),AVBL(753),IQ(753),IS(753),AVBLGRB2(753) & - & /1,'PRESSURE OF FRZ LVL ',001,004, & - & 'PRESSURE OF FRZ LVL '/ - DATA IFILV(756),AVBL(756),IQ(756),IS(756),AVBLGRB2(756) & - & /1,'HIGHEST FRZ LVL PRES',001,204, & - & 'HIGHEST FRZ LVL PRES'/ - DATA IFILV(700),AVBL(700),IQ(700),IS(700),AVBLGRB2(700) & - & /1,'MAX UPDR HELICITY16 ',216,106, & - & 'MAX UPDR HELICITY16 '/ - DATA IFILV(701),AVBL(701),IQ(701),IS(701),AVBLGRB2(701) & - & /1,'UPDRAFT HELICITY16 ',214,106, & - & 'UPDRAFT HELICITY16 '/ - DATA IFILV(702),AVBL(702),IQ(702),IS(702),AVBLGRB2(702) & - & /1,'MAX LTG THREAT1 ',188,200, & - & 'MAX LTG THREAT1 '/ - DATA IFILV(703),AVBL(703),IQ(703),IS(703),AVBLGRB2(703) & - & /1,'MAX LTG THREAT2 ',186,200, & - & 'MAX LTG THREAT2 '/ - DATA IFILV(704),AVBL(704),IQ(704),IS(704),AVBLGRB2(704) & - & /1,'MAX LTG THREAT3 ',187,200, & - & 'MAX LTG THREAT3 '/ - DATA IFILV(705),AVBL(705),IQ(705),IS(705),AVBLGRB2(705) & - & /1,'NCI_LTG ',241,200, & - & 'NCI_LTG '/ - DATA IFILV(706),AVBL(706),IQ(706),IS(706),AVBLGRB2(706) & - & /1,'NCA_LTG ',242,200, & - & 'NCA_LTG '/ - DATA IFILV(707),AVBL(707),IQ(707),IS(707),AVBLGRB2(707) & - & /1,'NCI_WQ ',243,200, & - & 'NCI_WQ '/ - DATA IFILV(708),AVBL(708),IQ(708),IS(708),AVBLGRB2(708) & - & /1,'NCA_WQ ',244,200, & - & 'NCA_WQ '/ - DATA IFILV(709),AVBL(709),IQ(709),IS(709),AVBLGRB2(709) & - & /1,'NCI_REFL ',245,200, & - & 'NCI_REFL '/ - DATA IFILV(710),AVBL(710),IQ(710),IS(710),AVBLGRB2(710) & - & /1,'NCA_REFL ',246,200, & - & 'NCA_REFL '/ - -! Add variables to produce the same output as in RUC - DATA IFILV(749),AVBL(749),IQ(749),IS(749),AVBLGRB2(749) & - & /1,'RH WRT PRECIP WATER ',230,200, & - & 'RH WRT PRECIP WATER '/ - DATA IFILV(748),AVBL(748),IQ(748),IS(748),AVBLGRB2(748) & - & /1,'RADAR REFLECT - 1km ',211,105, & - & 'RADAR REFLECT - 1km '/ - DATA IFILV(757),AVBL(757),IQ(757),IS(757),AVBLGRB2(757) & - & /1,'RADAR REFLECT - 4km ',211,105, & - & 'RADAR REFLECT - 4km '/ - DATA IFILV(758),AVBL(758),IQ(758),IS(758),AVBLGRB2(758) & - & /1,'CONV CLD TOP HGHT ',007,243, & - & 'CONV CLD TOP HGHT '/ - DATA IFILV(760),AVBL(760),IQ(760),IS(760),AVBLGRB2(760) & - & /1,'SHELTER MIXING RATIO',053,105, & - & 'SHELTER MIXING RATIO'/ - DATA IFILV(762),AVBL(762),IQ(762),IS(762),AVBLGRB2(762) & - & /1,'SURFACE MIXING RATIO',053,001, & - & 'SURFACE MIXING RATIO'/ - DATA IFILV(761),AVBL(761),IQ(761),IS(761),AVBLGRB2(761) & - & /1,'TEMP INSIDE SNOW ',011,001, & - & 'TEMP INSIDE SNOW '/ - DATA IFILV(763),AVBL(763),IQ(763),IS(763),AVBLGRB2(763) & - & /1,'MIXING LAYER MIXING RATIO',053,001,& - & 'MIXING LAYER MIXING RATIO'/ -! CRA Add variables to produce NCAR fields - DATA IFILV(768),AVBL(768),IQ(768),IS(768),AVBLGRB2(768) & - & /1,'ECHOTOP ',240,200, & - & 'ECHOTOP '/ - DATA IFILV(769),AVBL(769),IQ(769),IS(769),AVBLGRB2(769) & - & /1,'VIL ',206,200, & - & 'VIL '/ - DATA IFILV(770),AVBL(770),IQ(770),IS(770),AVBLGRB2(770) & - & /1,'RADARVIL ',206,200, & - & 'RADARVIL '/ - DATA IFILV(727),AVBL(727),IQ(727),IS(727),AVBLGRB2(727) & - & /1,'GSD UPDRAFT HELICITY',227,106, & - & 'GSD UPHL ON spec_hgt_lvl_above_grnd'/ -! CRA -! CRA -! RAP/HRRR Time-averaged variables - DATA IFILV(730),AVBL(730),IQ(730),IS(730),AVBLGRB2(730) & - & /1,'AVE 10m WIND SPEED ',229,105, & - & 'AVE WIND ON 10M spec_hgt_lvl_above_grnd'/ !422 - DATA IFILV(731),AVBL(731),IQ(731),IS(731),AVBLGRB2(731) & - & /1,'AVE 10m U ',229,105, & - & 'AVE WIND ON 10M spec_hgt_lvl_above_grnd'/ !422 - DATA IFILV(732),AVBL(732),IQ(732),IS(732),AVBLGRB2(732) & - & /1,'AVE 10m V ',229,105, & - & 'AVE WIND ON 10M spec_hgt_lvl_above_grnd'/ !422 - DATA IFILV(733),AVBL(733),IQ(733),IS(733),AVBLGRB2(733) & - & /1,'AVE INCOMING SW RAD ',204,001, & - & 'AVE NSWRF ON surface'/ - DATA IFILV(734),AVBL(734),IQ(734),IS(734),AVBLGRB2(734) & - & /1,'AVE NORMAL SW RAD ',254,001, & - & 'AVE NSWRF ON surface'/ -! E. James -! 15 Jun 2016 -! Adding vertically-integrated smoke AOD - DATA IFILV(735),AVBL(735),IQ(735),IS(735),AVBLGRB2(735) & - & /1,'VRTCLY INTGRTD AOD ',129,200, & - & 'AOD ON entire_atmos_single_lyr'/ -! Adding vertically-integrated smoke variable - DATA IFILV(736),AVBL(736),IQ(736),IS(736),AVBLGRB2(736) & - & /1,'VRTCLY INTGRTD SMOKE',237,200, & - & 'SMOKE ON entire_atmos_single_lyr'/ -! Adding smoke variable on mdl surfaces - DATA IFILV(737),AVBL(737),IQ(737),IS(737),AVBLGRB2(737) & - & /1,'SMOKE ON MDL SURFCS ',203,109, & - & 'SM1 ON hybrid_lvl'/ -! Adding smoke variable on p surfaces - DATA IFILV(738),AVBL(738),IQ(738),IS(738),AVBLGRB2(738) & - & /1,'SMOKE ON P SURFCS ',203,100, & - & 'SM1 ON isobaric_sfc'/ -! Adding lowest model level smoke - DATA IFILV(739),AVBL(739),IQ(739),IS(739),AVBLGRB2(739) & - & /1,'SMOKE NEAR SURFACE ',203,105, & - & 'SM1 ON spec_hgt_lvl_above_grnd'/ -! Adding mean fire radiative power - DATA IFILV(740),AVBL(740),IQ(740),IS(740),AVBLGRB2(740) & - & /1,'MEAN FIRE RDIATV PWR',164,001, & - & 'MEAN FIRE RADIATIVE POWER ON surface'/ -! E. James -! 28 Mar 2016 -! Adding clear-sky surface up and downwelling short and longwave irradiance - DATA IFILV(742),AVBL(742),IQ(742),IS(742),AVBLGRB2(742) & - & /1,'INSTN CLRSKY SHWV DN',161,001, & - & 'INST SWDNBC ON surface'/ - DATA IFILV(743),AVBL(743),IQ(743),IS(743),AVBLGRB2(743) & - & /1,'INSTN CLRSKY SHWV UP',160,001, & - & 'INST SWUPBC ON surface'/ - DATA IFILV(744),AVBL(744),IQ(744),IS(744),AVBLGRB2(744) & - & /1,'INSTN CLRSKY LGWV DN',163,001, & - & 'INST LWDNBC ON surface'/ - DATA IFILV(745),AVBL(745),IQ(745),IS(745),AVBLGRB2(745) & - & /1,'INSTN CLRSKY LGWV UP',162,001, & - & 'INST LWUPBC ON surface'/ -! E. James -! 11 May 2015 -! Adding instantaneous direct normal and diffuse horizontal irradiance - DATA IFILV(772),AVBL(772),IQ(772),IS(772),AVBLGRB2(772) & - & /1,'INSTN DIR NOR IRRAD ',166,001, & - & 'INST SWDDNI ON surface'/ - DATA IFILV(773),AVBL(773),IQ(773),IS(773),AVBLGRB2(773) & - & /1,'INSTN DIF HOR IRRAD ',167,001, & - & 'INST SWDDIF ON surface'/ -! -! satellite index 800-899 - -! 2014-12-09 WM LEWIS ADDED SSMI_F13-F15, SSMIS_F16-F20 -! WITH LVLS-DRIVEN CONTROL OF CHANNEL SELECTION -! SSMI_F13 (L(1)-L(6) -> ID8: 176-181 -> 19H, 19V, 37H, 37V, 85H, 85V) - DATA IFILV(800),AVBL(800),IQ(800),IS(800),AVBLGRB2(800) & - & /1,'F13 SSMI NON-NADIR ',118,109, & - & 'SSMI TB top_of_atmos '/ !table 133 - -! SSMI_F14 (L(1)-L(6) -> ID8: 182-187 -> 19H, 19V, 37H, 37V, 85H, 85V) - DATA IFILV(806),AVBL(806),IQ(806),IS(806),AVBLGRB2(806) & - & /1,'F14 SSMI NON-NADIR ',118,109, & - & 'SSMI TB top_of_atmos '/ !table 133 - -! SSMI_F15 (L(1)-L(6) -> ID8: 188-193 -> 19H, 19V, 37H, 37V, 85H, 85V) - DATA IFILV(812),AVBL(812),IQ(812),IS(812),AVBLGRB2(812) & - & /1,'F15 SSMI NON-NADIR ',118,109, & - & 'SSMI TB top_of_atmos '/ !table 133 - -! SSMIS_F16 (L(1)-L(7) -> ID8: 194-200 -> 183H, 19H, 19V, 37H, 37V, 85H, 85V) - DATA IFILV(818),AVBL(818),IQ(818),IS(818),AVBLGRB2(818) & - & /1,'F16 SSMIS NON-NADIR ',118,109, & - & 'SSMIS TB top_of_atmos '/ !table 133 - -! SSMIS_F17 (L(1)-L(7) -> ID8: 201-207 -> 183H, 19H, 19V, 37H, 37V, 85H, 85V) - DATA IFILV(825),AVBL(825),IQ(825),IS(825),AVBLGRB2(825) & - & /1,'F17 SSMIS NON-NADIR ',118,109, & - & 'SSMIS TB top_of_atmos '/ !table 133 - -! SSMIS_F18 (L(1)-L(7) -> ID8: 208-214 -> 183H, 19H, 19V, 37H, 37V, 85H, 85V) - DATA IFILV(832),AVBL(832),IQ(832),IS(832),AVBLGRB2(832) & - & /1,'F18 SSMIS NON-NADIR ',118,109, & - & 'SSMIS TB top_of_atmos '/ !table 133 - -! SSMIS_F19 (L(1)-L(7) -> ID8: 215-221 -> 183H, 19H, 19V, 37H, 37V, 85H, 85V) - DATA IFILV(839),AVBL(839),IQ(839),IS(839),AVBLGRB2(839) & - & /1,'F19 SSMIS NON-NADIR ',118,109, & - & 'SSMIS TB top_of_atmos '/ !table 133 - -! SSMIS_F20 (L(1)-L(7) -> ID8: 222-228 -> 183H, 19H, 19V, 37H, 37V, 85H, 85V) - DATA IFILV(846),AVBL(846),IQ(846),IS(846),AVBLGRB2(846) & - & /1,'F20 SSMIS NON-NADIR ',118,109, & - & 'SSMIS TB top_of_atmos '/ !table 133 - -! Apparent Temperature, -! March 2013: use faked Grib1 and Grib2 IDs -! Sib will no longer support new Grib1 ID and -! is in the process of getting Grib2 ID from WMO. - DATA IFILV(808),AVBL(808),IQ(808),IS(808),AVBLGRB2(808) & - & /1,'APPARENT TEMPERATURE',168,105, & - & 'TIPD ON entire_atmos_single_lyr'/ - -! 2014-12-09 WM LEWIS MODIFIED MTSTAT-2 and MTSAT-1r to COMPLY WITH NEW -! LVLS-DRIVEN CHANNEL SELECTION (L(1)-L(4)> CH1-CH4) -! HWRF satellite additions: MTSAT-2 imager: - DATA IFILV(860),AVBL(860),IQ(860),IS(860),AVBLGRB2(860) & - & /1,'MTSAT2 NON-NADIR ',118,109, & !table 130 - & 'MTSAT2 CH1 NON NAD top_of_atmos'/ - -! LVLS-DRIVEN CHANNEL SELECTION (L(1)-L(4)> CH1-CH4) -! HWRF satellite additions: MTSAT-1r imager (MTSAT-2 backup satellite): - DATA IFILV(864),AVBL(864),IQ(864),IS(864),AVBLGRB2(864) & - & /1,'MTSAT1R NON-NADIR ',118,109, & !table 130 - & 'MTSAT1RCH1 NON NAD top_of_atmos'/ - -! LVLS-DRIVEN CHANNEL SELECTION (L(1)-L(4)> IR CH1-CH4) -! HWRF satellite additions: INSAT-3D imager - DATA IFILV(865),AVBL(865),IQ(865),IS(865),AVBLGRB2(865) & - & /1,'INSAT 3D NON-NADIR ',118,109, & !table 130 - & 'INSAT 3D NON NAD top_of_atmos'/ - -! 2014-12-09 WM LEWIS ADDED GOES-13, GOES-15, MSG-10 -! GOES-13 imager (L(1)-L(4) -> ID8: 237-240 -> CH2, CH3, CH4, CH5) - DATA IFILV(868),AVBL(868),IQ(868),IS(868),AVBLGRB2(868) & - & /1,'GOES-13 NON-NADIR ',118,109, & - & 'GOES-13 IMGR TB TOA '/ !Table 130 - -! GOES-15 imager (L(1)-L(4) -> ID8: 241-244 -> CH2, CH3, CH4, CH5) - DATA IFILV(872),AVBL(872),IQ(872),IS(872),AVBLGRB2(872) & - & /1,'GOES-15 NON-NADIR ',118,109, & - & 'GOES-15 IMGR TB TOA '/ !Table 130 - -! MSG/SEVIRI imager (L(1)-L(7) -> ID8: 230-236 -> -! CH5, CH6, CH7, CH8, CH9, CH10, CH11) - DATA IFILV(876),AVBL(876),IQ(876),IS(876),AVBLGRB2(876) & - & /1,'SEVIRI NON-NADIR ',118,109, & - & 'MSG/SEVIRI TB TOA '/ !Table 130 - -! HWRF additions (900-949) - DATA IFILV(900),AVBL(900),IQ(900),IS(900),AVBLGRB2(900) & - & /1,'MODEL SFC U WIND STR',124,001, & - & 'U_FLX ON surface' / - DATA IFILV(901),AVBL(901),IQ(901),IS(901),AVBLGRB2(901) & - & /1,'MODEL SFC V WIND STR',125,001, & - & 'V_FLX ON surface' / - DATA IFILV(902),AVBL(902),IQ(902),IS(902),AVBLGRB2(902) & - & /1,'INSTN OUT TOA SW RAD',211,008, & - & 'INST USWRF ON top_of_atmos'/ -! HWRF reflectivity output from wrf -! Passed-through wrf derived variable, works for non-ferrier -! physics. -! Use Table 129 (PDS Octet 4 = 129) - DATA IFILV(903),AVBL(903),IQ(903),IS(903),AVBLGRB2(903) & - & /1,'WRFOUT REFL 10CM MDL',211,109, & - & 'WRFOUT REFL 10CM ON model '/ - DATA IFILV(904),AVBL(904),IQ(904),IS(904),AVBLGRB2(904) & - & /1,'WRFOUT COMP MAX REF ',212,200, & - & 'WRFOUT COMP MAX REFLC'/ -! Add Radiation variables output from RRTMG and CAM -! radiation schemes in wrf. (SWUPT,ACSWUPT,SWDNT,ACSWDNT) - DATA IFILV(905),AVBL(905),IQ(905),IS(905),AVBLGRB2(905) & - & /1,'INST SW UP TOA RAD ',211,008, & - & 'INST SW UPWELL RAD top_of_atmos'/ - DATA IFILV(906),AVBL(906),IQ(906),IS(906),AVBLGRB2(906) & - & /1,'AVE SW UP TOA RAD ',211,008, & - & 'AVE SW UPWELL RAD top_of_atmos'/ - DATA IFILV(907),AVBL(907),IQ(907),IS(907),AVBLGRB2(907) & - & /1,'INST SW DOWN TOA RAD',204,008, & - & 'INST SW DOWNWELL RAD top_of_atmos'/ - DATA IFILV(908),AVBL(908),IQ(908),IS(908),AVBLGRB2(908) & - & /1,'AVE SW DOWN TOA RAD ',204,008, & - & 'AVE SW DOWNWELL RAD top_of_atmos'/ - DATA IFILV(909),AVBL(909),IQ(909),IS(909),AVBLGRB2(909) & - & /1,'VTEMP ON MDL SFCS ',012,109, & - & 'VTMP ON hybrid_lvl'/ - DATA IFILV(910),AVBL(910),IQ(910),IS(910),AVBLGRB2(910) & - & /1,'VTEMP ON PRESS SFCS ',012,100, & - & 'VTMP ON isobaric_sfc'/ - DATA IFILV(911),AVBL(911),IQ(911),IS(911),AVBLGRB2(911) & - & /1,'VTEMP AT FD HEIGHTS ',012,103, & - & 'VTMP ON spec_alt_above_mean_sea_lvl'/ -! CD and CH exchange coefficients - DATA IFILV(922),AVBL(922),IQ(922),IS(922),AVBLGRB2(922) & - & /1,'10M DRAG EXCH COEF ',252,105, & !table 2 - & '10M SFC DRAG EXCH COEF CD '/ - DATA IFILV(923),AVBL(923),IQ(923),IS(923),AVBLGRB2(923) & - & /1,'10M HEAT EXCH COEF ',144,105, & !table 128 - & '10M SFC HEAT EXCH COEF CH '/ -! Add GOES-16 & GOES-17 ABI IR Channels 7-16 -! Grib2 defines each channel as a separate output field - DATA IFILV(927),AVBL(927),IQ(927),IS(927),AVBLGRB2(927) & - & /1,'G16 CH7 NON-NADIR ',118,109, & - & 'G16 CH7 ABI TB TOA '/ !Table 130 - - DATA IFILV(928),AVBL(928),IQ(928),IS(928),AVBLGRB2(928) & - & /1,'G16 CH8 NON-NADIR ',118,109, & - & 'G16 CH8 ABI TB TOA '/ !Table 130 - - DATA IFILV(929),AVBL(929),IQ(929),IS(929),AVBLGRB2(929) & - & /1,'G16 CH9 NON-NADIR ',118,109, & - & 'G16 CH9 ABI TB TOA '/ !Table 130 - - DATA IFILV(930),AVBL(930),IQ(930),IS(930),AVBLGRB2(930) & - & /1,'G16 CH10 NON-NADIR ',118,109, & - & 'G16 CH10 ABI TB TOA '/ !Table 130 - - DATA IFILV(931),AVBL(931),IQ(931),IS(931),AVBLGRB2(931) & - & /1,'G16 CH11 NON-NADIR ',118,109, & - & 'G16 CH11 ABI TB TOA '/ !Table 130 - - DATA IFILV(932),AVBL(932),IQ(932),IS(932),AVBLGRB2(932) & - & /1,'G16 CH12 NON-NADIR ',118,109, & - & 'G16 CH12 ABI TB TOA '/ !Table 130 - - DATA IFILV(933),AVBL(933),IQ(933),IS(933),AVBLGRB2(933) & - & /1,'G16 CH13 NON-NADIR ',118,109, & - & 'G16 CH13 ABI TB TOA '/ !Table 130 - - DATA IFILV(934),AVBL(934),IQ(934),IS(934),AVBLGRB2(934) & - & /1,'G16 CH14 NON-NADIR ',118,109, & - & 'G16 CH14 ABI TB TOA '/ !Table 130 - - DATA IFILV(935),AVBL(935),IQ(935),IS(935),AVBLGRB2(935) & - & /1,'G16 CH15 NON-NADIR ',118,109, & - & 'G16 CH15 ABI TB TOA '/ !Table 130 - - DATA IFILV(936),AVBL(936),IQ(936),IS(936),AVBLGRB2(936) & - & /1,'G16 CH16 NON-NADIR ',118,109, & - & 'G16 CH16 ABI TB TOA '/ !Table 130 - - DATA IFILV(937),AVBL(937),IQ(937),IS(937),AVBLGRB2(937) & - & /1,'G17 CH7 NON-NADIR ',118,109, & - & 'G17 CH7 ABI TB TOA '/ !Table 130 - - DATA IFILV(938),AVBL(938),IQ(938),IS(938),AVBLGRB2(938) & - & /1,'G17 CH8 NON-NADIR ',118,109, & - & 'G17 CH8 ABI TB TOA '/ !Table 130 - - DATA IFILV(939),AVBL(939),IQ(939),IS(939),AVBLGRB2(939) & - & /1,'G17 CH9 NON-NADIR ',118,109, & - & 'G17 CH9 ABI TB TOA '/ !Table 130 - - DATA IFILV(940),AVBL(940),IQ(940),IS(940),AVBLGRB2(940) & - & /1,'G17 CH10 NON-NADIR ',118,109, & - & 'G17 CH10 ABI TB TOA '/ !Table 130 - - DATA IFILV(941),AVBL(941),IQ(941),IS(941),AVBLGRB2(941) & - & /1,'G17 CH11 NON-NADIR ',118,109, & - & 'G17 CH11 ABI TB TOA '/ !Table 130 - - DATA IFILV(942),AVBL(942),IQ(942),IS(942),AVBLGRB2(942) & - & /1,'G17 CH12 NON-NADIR ',118,109, & - & 'G17 CH12 ABI TB TOA '/ !Table 130 - - DATA IFILV(943),AVBL(943),IQ(943),IS(943),AVBLGRB2(943) & - & /1,'G17 CH13 NON-NADIR ',118,109, & - & 'G17 CH13 ABI TB TOA '/ !Table 130 - - DATA IFILV(944),AVBL(944),IQ(944),IS(944),AVBLGRB2(944) & - & /1,'G17 CH14 NON-NADIR ',118,109, & - & 'G17 CH14 ABI TB TOA '/ !Table 130 - - DATA IFILV(945),AVBL(945),IQ(945),IS(945),AVBLGRB2(945) & - & /1,'G17 CH15 NON-NADIR ',118,109, & - & 'G17 CH15 ABI TB TOA '/ !Table 130 - - DATA IFILV(946),AVBL(946),IQ(946),IS(946),AVBLGRB2(946) & - & /1,'G17 CH16 NON-NADIR ',118,109, & - & 'G17 CH16 ABI TB TOA '/ !Table 130 - -!-- ADD HRRR CAPE/CIN RELATED VARIABLES - DATA IFILV(950),AVBL(950),IQ(950),IS(950),AVBLGRB2(950) & - & /1,'CAPE 0-3KM ',157,116, & - & 'CAPE ON spec_hgt_above_grnd'/ - DATA IFILV(951),AVBL(951),IQ(951),IS(951),AVBLGRB2(951) & - & /1,'CIN 0-3KM ',156,116, & - & 'CIN ON spec_hgt_above_grnd'/ - DATA IFILV(952),AVBL(952),IQ(952),IS(952),AVBLGRB2(952) & - & /1,'LFC AGL HEIGHT ',007,014, & - & 'HGT ON lvl_of_free_convection'/ - DATA IFILV(953),AVBL(953),IQ(953),IS(953),AVBLGRB2(953) & - & /1,'STORM REL HELICITY ',190,255, & - & 'HLCY ON spec_hgt_lvl_above_grnd'/ - DATA IFILV(954),AVBL(954),IQ(954),IS(954),AVBLGRB2(954) & - & /1,'DOWNDRAFT CAPE ',157,116, & - & 'CAPE ON spec_pres_above_grnd'/ - DATA IFILV(955),AVBL(955),IQ(955),IS(955),AVBLGRB2(955) & - & /1,'DENDRITIC LAYER DEPTH',007,020, & - & 'THICHNESS -12C_-17C_isotherm'/ - DATA IFILV(956),AVBL(956),IQ(956),IS(956),AVBLGRB2(956) & - & /1,'ENHANCED STRETCHING POTENTIAL',157,116,& - & 'ESP ON spec_pres_above_grnd'/ - DATA IFILV(957),AVBL(957),IQ(957),IS(957),AVBLGRB2(957) & - & /1,'CRITICAL ANGLE ',157,116, & - & 'CRITICAL ANGLE ON spec_pres_above_grnd'/ - DATA IFILV(958),AVBL(958),IQ(958),IS(958),AVBLGRB2(958) & - & /1,'GR CH7 NADIR ',118,109, & - & 'GR CH7 ABI TB TOA '/ !Table 130 - - DATA IFILV(959),AVBL(959),IQ(959),IS(959),AVBLGRB2(959) & - & /1,'GR CH8 NADIR ',118,109, & - & 'GR CH8 ABI TB TOA '/ !Table 130 - - DATA IFILV(960),AVBL(960),IQ(960),IS(960),AVBLGRB2(960) & - & /1,'GR CH9 NADIR ',118,109, & - & 'GR CH9 ABI TB TOA '/ !Table 130 - - DATA IFILV(961),AVBL(961),IQ(961),IS(961),AVBLGRB2(961) & - & /1,'GR CH10 NADIR ',118,109, & - & 'GR CH10 ABI TB TOA '/ !Table 130 - - DATA IFILV(962),AVBL(962),IQ(962),IS(962),AVBLGRB2(962) & - & /1,'GR CH11 NADIR ',118,109, & - & 'GR CH11 ABI TB TOA '/ !Table 130 - - DATA IFILV(963),AVBL(963),IQ(963),IS(963),AVBLGRB2(963) & - & /1,'GR CH12 NADIR ',118,109, & - & 'GR CH12 ABI TB TOA '/ !Table 130 - - DATA IFILV(964),AVBL(964),IQ(964),IS(964),AVBLGRB2(964) & - & /1,'GR CH13 NADIR ',118,109, & - & 'GR CH13 ABI TB TOA '/ !Table 130 - - DATA IFILV(965),AVBL(965),IQ(965),IS(965),AVBLGRB2(965) & - & /1,'GR CH14 NADIR ',118,109, & - & 'GR CH14 ABI TB TOA '/ !Table 130 - - DATA IFILV(966),AVBL(966),IQ(966),IS(966),AVBLGRB2(966) & - & /1,'GR CH15 NADIR ',118,109, & - & 'GR CH15 ABI TB TOA '/ !Table 130 - - DATA IFILV(967),AVBL(967),IQ(967),IS(967),AVBLGRB2(967) & - & /1,'GR CH16 NADIR ',118,109, & - & 'GR CH16 ABI TB TOA '/ !Table 130 - DATA IFILV(968),AVBL(968),IQ(968),IS(968),AVBLGRB2(968) & - & /1,'SEA ICE SKI TEMPERATURE ',080,001, & - & 'ICETMP ON surface'/ -! LVLS-DRIVEN CHANNEL SELECTION (L(1)-L(10)> CRTM CH1-CH10 > AHI CH7-16) -! HWRF satellite additions: Himawari-8, replacement for MTSAT-2 - DATA IFILV(969),AVBL(969),IQ(969),IS(969),AVBLGRB2(969) & - & /1,'HIM-8 AHI CH7 NNADR',118,109, & !table 130 - & 'HIM-8 AHI CH7 NON-NADIR BRTEMP'/ - DATA IFILV(970),AVBL(970),IQ(970),IS(970),AVBLGRB2(970) & - & /1,'HIM-8 AHI CH8 NNADR',118,109, & !table 130 - & 'HIM-8 AHI CH8 NON-NADIR BRTEMP'/ - DATA IFILV(971),AVBL(971),IQ(971),IS(971),AVBLGRB2(971) & - & /1,'HIM-8 AHI CH9 NNADR',118,109, & !table 130 - & 'HIM-8 AHI CH9 NON-NADIR BRTEMP'/ - DATA IFILV(972),AVBL(972),IQ(972),IS(972),AVBLGRB2(972) & - & /1,'HIM-8 AHI CH10 NNADR',118,109, & !table 130 - & 'HIM-8 AHI CH10 NON-NADIR BRTEMP'/ - DATA IFILV(973),AVBL(973),IQ(973),IS(973),AVBLGRB2(973) & - & /1,'HIM-8 AHI CH11 NNADR',118,109, & !table 130 - & 'HIM-8 AHI CH11 NON-NADIR BRTEMP'/ - DATA IFILV(974),AVBL(974),IQ(974),IS(974),AVBLGRB2(974) & - & /1,'HIM-8 AHI CH12 NNADR',118,109, & !table 130 - & 'HIM-8 AHI CH12 NON-NADIR BRTEMP'/ - DATA IFILV(975),AVBL(975),IQ(975),IS(975),AVBLGRB2(975) & - & /1,'HIM-8 AHI CH13 NNADR',118,109, & !table 130 - & 'HIM-8 AHI CH13 NON-NADIR BRTEMP'/ - DATA IFILV(976),AVBL(976),IQ(976),IS(976),AVBLGRB2(976) & - & /1,'HIM-8 AHI CH14 NNADR',118,109, & !table 130 - & 'HIM-8 AHI CH14 NON-NADIR BRTEMP'/ - DATA IFILV(977),AVBL(977),IQ(977),IS(977),AVBLGRB2(977) & - & /1,'HIM-8 AHI CH15 NNADR',118,109, & !table 130 - & 'HIM-8 AHI CH15 NON-NADIR BRTEMP'/ - DATA IFILV(978),AVBL(978),IQ(978),IS(978),AVBLGRB2(978) & - & /1,'HIM-8 AHI CH16 NNADR',118,109, & !table 130 - & 'HIM-8 AHI CH16 NON-NADIR BRTEMP'/ - DATA IFILV(979),AVBL(979),IQ(979),IS(979),AVBLGRB2(979) & - & /1,'EFFECTIVE LEVEL BOT',205,217, & - & 'EFSH ON effbot_lvl'/ - DATA IFILV(980),AVBL(980),IQ(980),IS(980),AVBLGRB2(980) & - & /1,'EFFECTIVE LEVEL BOT',205,217, & - & 'EFSH ON efftop_lvl'/ - DATA IFILV(981),AVBL(981),IQ(981),IS(981),AVBLGRB2(981) & - & /1,'EFFECTIVE LEVEL BOT',205,217, & - & 'ELMELT ON effbot_lvl'/ - DATA IFILV(982),AVBL(982),IQ(982),IS(982),AVBLGRB2(982) & - & /1,'EFFECTIVE LEVEL BOT',205,217, & - & 'ELMELT ON efftop_lvl'/ - DATA IFILV(983),AVBL(983),IQ(983),IS(983),AVBLGRB2(983) & - & /1,'EFFECTIVE LEVEL BOT',205,217, & - & 'ESHR ON effbot_lvl'/ - DATA IFILV(984),AVBL(984),IQ(984),IS(984),AVBLGRB2(984) & - & /1,'EFFECTIVE LEVEL BOT',205,217, & - & 'UESH ON effbot_lvl'/ - DATA IFILV(985),AVBL(985),IQ(985),IS(985),AVBLGRB2(985) & - & /1,'EFFECTIVE LEVEL BOT',205,217, & - & 'VESH ON effbot_lvl'/ - DATA IFILV(986),AVBL(986),IQ(986),IS(986),AVBLGRB2(986) & - & /1,'EFFECTIVE LEVEL BOT',205,217, & - & 'VESH ON effbot_lvl'/ - DATA IFILV(987),AVBL(987),IQ(987),IS(987),AVBLGRB2(987) & - & /1,'EFFECTIVE LEVEL BOT',205,217, & - & 'VESH ON effbot_lvl'/ - DATA IFILV(988),AVBL(988),IQ(988),IS(988),AVBLGRB2(988) & - & /1,'EFFECTIVE LEVEL BOT',205,217, & - & 'VESH ON effbot_lvl'/ - DATA IFILV(989),AVBL(989),IQ(989),IS(989),AVBLGRB2(989) & - & /1,'EFFECTIVE LEVEL BOT',205,217, & - & 'VESH ON effbot_lvl'/ - DATA IFILV(990),AVBL(990),IQ(990),IS(990),AVBLGRB2(990) & - & /1,'EFFECTIVE LEVEL BOT',205,217, & - & 'VESH ON effbot_lvl'/ - DATA IFILV(991),AVBL(991),IQ(991),IS(991),AVBLGRB2(991) & - & /1,'EFFECTIVE LEVEL BOT',205,217, & - & 'VESH ON effbot_lvl'/ - DATA IFILV(992),AVBL(992),IQ(992),IS(992),AVBLGRB2(992) & - & /1,'EFFECTIVE LEVEL BOT',205,217, & - & 'VESH ON effbot_lvl'/ - DATA IFILV(993),AVBL(993),IQ(993),IS(993),AVBLGRB2(993) & - & /1,'EFFECTIVE LEVEL BOT',205,217, & - & 'VESH ON effbot_lvl'/ - -! AQF - DATA IFILV(994),AVBL(994),IQ(994),IS(994), AVBLGRB2(994) & - & /1,'OZCON ',167,109, & - & 'OZCON ON hybrid_lvl'/ - - DATA IFILV(995),AVBL(995),IQ(995),IS(995), AVBLGRB2(995) & - & /1,'PMTF ',167,109, & !table 141 - & 'PM25TOT ON Hybrid level'/ - -!end initialization -! - end module RQSTFLD_mod diff --git a/sorc/ncep_post.fd/RQSTFLD.f b/sorc/ncep_post.fd/RQSTFLD.f new file mode 100644 index 000000000..ecdcb0388 --- /dev/null +++ b/sorc/ncep_post.fd/RQSTFLD.f @@ -0,0 +1,44 @@ + module RQSTFLD_mod +!-------------------------------------------------------------------- +! revision history +! 2011-02-06 Jun Wang add grib2 option +! 2011-10-18 Sarah Lu add GOCART aerosol fields +! 2011-12-18 Sarah Lu add GOCART aerosol optical properties, mass +! fields, and production/removal fluxes +! 2011-12-29 Sarah Lu add GOCART AOD at multiple channels +! 2012-01-06 Sarah Lu add GOCART SS, OC, BC, SU aerosols +! 2012-01-07 Sarah Lu add air density and dpres +! 2012-01-27 Sarah Lu use index 601-700 for GOCART +! 2012-01-30 Jun Wang add post available fields from xml file for grib2 +! 2012-05-07 Tricia Slovacek use index 800-899 for satellite +! use index 900-949 for HWRF +! 2014-12-09 William Lewis added MSG/SEVIRI imager, +! GOES-13 and GOES-15 imagers, +! and completed SSMI and SSMIS (F13-F20) +! 2019-04-01 Sharon Nebuda added GOES-16 GOES-17 ABI IR Channels 7-16 +! 2019-04-22 Wen Meng increased model MXLVL to 500 +! 2019-05-08 Wen Meng added continuous accumulated precipitations(417, 418, +! 419). +! 2019-09-03 Jesse Meng added cape related variables for hrrr (950-957) +! 2021-08-31 Lin Zhu added ssmis-f17 channels 15-18 grib2 output +! 2021-11-03 Tracy Hertneky removed all grib1 settings +!-------------------------------------------------------------------- + + implicit none +! +! increase MXFLD each time you add a new field + INTEGER, PARAMETER :: MXFLD=1200 + INTEGER, PARAMETER :: MXLVL=500 + + CHARACTER*6 DATSET +! + LOGICAL RITEHD +! + integer :: NFLD,IGET(MXFLD), & + LVLS(MXLVL,MXFLD), & + IDENT(MXFLD),IAVBLFLD(MXFLD), & + ID(25) + integer :: num_post_afld + integer,allocatable :: LVLSXML(:,:) + + end module RQSTFLD_mod diff --git a/sorc/ncep_post.fd/SCLFLD.f b/sorc/ncep_post.fd/SCLFLD.f index fc4087ea8..4450bb9f4 100644 --- a/sorc/ncep_post.fd/SCLFLD.f +++ b/sorc/ncep_post.fd/SCLFLD.f @@ -1,48 +1,34 @@ !> @file -! -!> SUBPROGRAM: SCLFLD SCALE ARRAY ELEMENT BY CONSTANT -!! PRGRMMR: TREADON ORG: W/NP2 DATE: 92-09-13 -!! -!! ABSTRACT: -!! THIS ROUTINE MULTIPLES (SCALES) THE FIRST IMO*JMO -!! ELEMENTS OF ARRAY FLD BY THE REAL SCALAR SCALE. -!! ARRAY ELEMENTS WHICH EQUAL A SPECIAL VALUE WILL -!! NOT BE SCALED BY SCALE. THEY WILL BE LEFT AS IS. -!! THE SPECIAL VALUE, SPVAL, IS PASSED THROUGH COMMON -!! BLOCK OPTIONS. IT IS SET IN INCLUDE FILE OPTIONS. -!! -!! PROGRAM HISTORY LOG: -!! 92-09-13 RUSS TREADON -!! 00-01-04 JIM TUCCILLO -!! -!! USAGE: CALL SCLFLD(FLD,SCALE,IMO,JMO) -!! INPUT ARGUMENT LIST: -!! FLD - ARRAY WHOSE ELEMENTS ARE TO BE SCALED. -!! SCALE - CONSTANT BY WHICH TO SCALE ELEMENTS OF FLD. -!! IMO,JMO - DIMENSION OF ARRAY FLD. -!! -!! OUTPUT ARGUMENT LIST: -!! FLD - ARRAY WHOSE ELEMENTS HAVE BEEN SCALED BY SCALE. -!! -!! OUTPUT FILES: -!! NONE -!! -!! SUBPROGRAMS CALLED: -!! UTILITIES: -!! NONE -!! LIBRARY: -!! COMMON - OPTIONS -!! -!! ATTRIBUTES: -!! LANGUAGE: FORTRAN -!! MACHINE : CRAY C-90 -!! +!> @brief sclfld() scale array element by constant. +!> +!> @author Russ Treadon W/NP2 @date 1992-09-13 + +!> This routine multiples (scales) the first IMO*JMO +!> elements of array fld by the real scalar scale. +!> Array elements which equal a special value will +!> not be scaled by scale. They will be left as is. +!> The special value, spval, is passed through common +!> block options. It is set in include file options. +!> +!> @param[in] FLD Array whose elements are to be scaled. +!> @param[in] SCALE Constant by which to scale elements of fld. +!> @param[in] IMO,JMO Dimension of array fld. +!> @param[out] FLD Array whose elements have been scaled by scale. +!> +!> ### Program History Log +!> Date | Programmer | Comments +!> -----|------------|--------- +!> 1992-09-13 | Russ Treadon | Initial +!> 2000-01-04 | Jim Tuccillo | MPI Version +!> 2021-09-29 | JESSE MENG | 2D DECOMPOSITION +!> +!> @author Russ Treadon W/NP2 @date 1992-09-13 SUBROUTINE SCLFLD(FLD,SCALE,IMO,JMO) ! ! use params_mod, only: small - use ctlblk_mod, only: jsta, jend, spval + use ctlblk_mod, only: jsta, jend, spval, ista, iend !- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - implicit none ! @@ -50,7 +36,7 @@ SUBROUTINE SCLFLD(FLD,SCALE,IMO,JMO) ! integer,intent(in) :: IMO,JMO REAL,intent(in) :: SCALE - REAL,dimension(imo,jmo),intent(inout) :: FLD + REAL,dimension(ista:iend,jsta:jend),intent(inout) :: FLD integer I,J ! ! @@ -61,7 +47,7 @@ SUBROUTINE SCLFLD(FLD,SCALE,IMO,JMO) ! !$omp parallel do DO J=JSTA,JEND - DO I=1,IMO + DO I=ISTA,IEND IF(ABS(FLD(I,J)-SPVAL)>SMALL) FLD(I,J)=SCALE*FLD(I,J) ENDDO ENDDO diff --git a/sorc/ncep_post.fd/SELECT_CHANNELS.f b/sorc/ncep_post.fd/SELECT_CHANNELS.f index f78828044..8964566a0 100644 --- a/sorc/ncep_post.fd/SELECT_CHANNELS.f +++ b/sorc/ncep_post.fd/SELECT_CHANNELS.f @@ -1,27 +1,21 @@ !> @file -! -!> SELECT_CHANNEL -!! @author HWRF @date 20120927 -!! -!! Verify channel information and print error to output file if -!! detected, finally excuting a program STOP - which may cause -!! a hang condifition if run on multiple processors. -!! If data passed validation the channel indices passed in via -!! the "channels" array are stored in the structure defining -!! the channel object -!! -!! @param[inout] channelinfo - structure defining channel object -!! @param[in] nchannels - number of channels for sensor -!! @param[in] channels -!! -!! OUTPUT FILES: -!! NONE -!! -!! SUBPROGRAMS CALLED: -!! UTILITIES: NONE -!! -!! LIBRARY: NONE -!! +!> @brief select_channels() verifies channel information. +!> +!> @author HWRF @date 2012-09-27 + +!> This subroutine verifies channel information and print error to output file if +!> detected, finally excuting a program STOP - which may cause +!> a hang condifition if run on multiple processors. +!> +!> If data passed validation the channel indices passed in via +!> the "channels" array are stored in the structure defining +!> the channel object. +!> +!> @param[inout] channelinfo structure defining channel object. +!> @param[in] nchannels number of channels for sensor. +!> @param[in] channels. +!> +!> @author HWRF @date 2012-09-27 subroutine SELECT_CHANNELS(channelinfo,nchannels,channels) use crtm_channelinfo_define, only: crtm_channelinfo_type diff --git a/sorc/ncep_post.fd/SETUP_SERVERS.f b/sorc/ncep_post.fd/SETUP_SERVERS.f index 9f2a2b084..8acd4332b 100644 --- a/sorc/ncep_post.fd/SETUP_SERVERS.f +++ b/sorc/ncep_post.fd/SETUP_SERVERS.f @@ -1,56 +1,22 @@ !> @file -! . . . -!> SUBROUTINE: SETUP_SERVERS SETUP I/O SERVERS -!! PRGRMMR: TUCCILLO ORG: IBM DATE: 00-03-20 -!! -!! ABSTRACT: SETUP I/O SERVERS -!! -!! PROGRAM HISTORY LOG: -!! 00-03-11 TUCCILLO - ORIGINATOR -!! -!! USAGE: CALL SETUP_SERVERS(MYPE, -!! * NPES, -!! * INUMQ, -!! * MPI_COMM_COMP, -!! * MPI_COMM_INTER) -!! -!! INPUT ARGUMENT LIST: -!! NONE -!! -!! OUTPUT ARGUMENT LIST: -!! MYPE - MY RANK -!! INUMQ - ARRAY THAT HOLDS THE NUMBER OF SERVERS IN EACH GROUP -!! NPES - NUMBER OF MPI TASKS FOR POSTING -!! MPI_COMM_COMP - THE NEW INTRACOMMUNICATOR FOR ALL TASKS -!! MPI_COMM_INTER - THE INTERCOMMUNICATOR FOR THE I/O SERVERS -!! -!! INPUT FILES: NONE -!! -!! OUTPUT FILES: -!! -!! SUBPROGRAMS CALLED: -!! UNIQUE: -!! PARA_RANGE -!! MPI_INIT -!! MPI_COMM_RANK -!! MPI_COMM_SIZE -!! MPI_COMM_DUP -!! MPI_COMM_SPLIT -!! MPI_COMM_GROUP -!! MPI_GROUP_EXCL -!! MPI_COMM_CREATE -!! MPI_GROUP_FREE -!! MPI_INTERCOMM_CREATE -!! MPI_BARRIER -!! -!! EXIT STATES: -!! COND = 0 - NORMAL EXIT -!! -!! ATTRIBUTES: -!! LANGUAGE: FORTRAN 90 -!! MACHINE : IBM SP -!! -!! +!> @brief setup_servers() setups I/O servers. +!> +!> @author Jim Tuccillo IBM @date 2000-03-20 + +!> This subroutine is to setup I/O servers. +!> +!> @param[out] MYPE My rank. +!> @param[out] INUMQ Array that holds the number of servers in each group. +!> @param[out] NPES Number of MPI tasks for posting. +!> @param[out] MPI_COMM_COMP The new intracommunicator for all tasks. +!> @param[out] MPI_COMM_INTER The intercommunicator for the I/O servers. +!> +!> ### Program history log: +!> Date | Programmer | Comments +!> -----|------------|--------- +!> 2000-03-20 | Jim Tuccillo | Initial +!> +!> @author Jim Tuccillo IBM @date 2000-03-20 SUBROUTINE SETUP_SERVERS(MYPE, & & NPES, & & INUMQ, & diff --git a/sorc/ncep_post.fd/SET_LVLSXML.f b/sorc/ncep_post.fd/SET_LVLSXML.f index ed51e12d1..3073aeb4e 100644 --- a/sorc/ncep_post.fd/SET_LVLSXML.f +++ b/sorc/ncep_post.fd/SET_LVLSXML.f @@ -16,6 +16,7 @@ subroutine SET_LVLSXML(param,ifld,irec,kpv,pv,kth,th) ! 03_10_2015 Lin Gan - Replace XML file with flat file implementation ! 07_08_2016 J. Carley - Comment out debug prints ! 06_01_2017 Y Mao - For MISCLN.f and FDLVL.f, allow FD levels input from control file +! 01-24-2023 Sam Trahan - IFI flight levels and related unit conversions ! ! USAGE: CALL SET_LVLSXML(param,ifld,irec,kpv,pv,kth,th) ! INPUT ARGUMENT LIST: @@ -47,7 +48,7 @@ subroutine SET_LVLSXML(param,ifld,irec,kpv,pv,kth,th) ! use xml_perl_data, only: param_t use ctlblk_mod, only: lsm, spl, nsoil, isf_surface_physics, nfd, htfd, & - petabnd, nbnd + petabnd, nbnd, ifi_nflight, ifi_flight_levels use soil, only: SLDPTH,SLLEVEL use rqstfld_mod,only : mxlvl,LVLS,LVLSXML implicit none @@ -65,7 +66,7 @@ subroutine SET_LVLSXML(param,ifld,irec,kpv,pv,kth,th) real,parameter :: small2=1 integer,parameter :: LSIG1=22,LSIG2=5 integer i,j,l,nlevel,scalef,lvlcape,lvlcin - logical READTHK,logrec + logical READTHK,logrec,found REAL :: SIGO2(LSIG2+1),ASIGO2(LSIG2),DSIGO2(LSIG2) REAL :: SIGO1(LSIG1+1),ASIGO1(LSIG1),DSIGO1(LSIG1) ! @@ -187,23 +188,48 @@ subroutine SET_LVLSXML(param,ifld,irec,kpv,pv,kth,th) endif ! if(trim(param%fixed_sfc1_type)=='spec_alt_above_mean_sea_lvl') then - if(index(param%shortname,"GTG_ON_SPEC_ALT_ABOVE_MEAN_SEA_LVL")<=0) then - do j=1, nlevel + if(index(param%shortname,"SPECIFIC_IFI_FLIGHT_LEVEL")>0) then + do j=1, nlevel + found=.false. + iloop411: do i=1, ifi_nflight + if(nint(param%level(j)/10)==nint(ifi_flight_levels(i)/10) )then + LVLS(i,ifld)=1 + LVLSXML(i,ifld)=j + !print *,'SPECIFIC_IFI_FLIGHT_LEVEL ',j,' is ',param%level(j) + irec=irec+1 + found=.true. + exit iloop411 + endif + enddo iloop411 + if(.not.found) then + write(0,*) 'ERROR: No such IFI flight level: ',param%level(j)/10 + LVLS(i,ifld)=0 + endif + enddo + else if(index(param%shortname,"IFI_FLIGHT_LEVEL")>0) then + do j=1, ifi_nflight + LVLS(j,ifld)=1 + LVLSXML(j,ifld)=j + !print *,'IFI_FLIGHT_LEVEL ',j,' is ',param%level(j) + irec=irec+1 + enddo + elseif(index(param%shortname,"GTG_ON_SPEC_ALT_ABOVE_MEAN_SEA_LVL")<=0) then + do j=1, nlevel iloop4: do i=1, NFD - if(nint(param%level(j))==nint(HTFD(i)) )then - if(HTFD(i)>300.) then - LVLS(i,ifld)=1 - else - LVLS(i,ifld)=2 + if(nint(param%level(j))==nint(HTFD(i)) )then + if(HTFD(i)>300.) then + LVLS(i,ifld)=1 + else + LVLS(i,ifld)=2 + endif + LVLSXML(i,ifld)=j + irec=irec+1 + exit iloop4 endif - LVLSXML(i,ifld)=j - irec=irec+1 - exit iloop4 - endif - enddo iloop4 - enddo - return - endif + enddo iloop4 + enddo + return + endif ! Allow inputs of FD levels from control file. For GTG (EDPARM CATEDR MWTURB) ! SET LVLS to 1 do j=1, nlevel @@ -277,15 +303,16 @@ subroutine SET_LVLSXML(param,ifld,irec,kpv,pv,kth,th) endif enddo iloop41 enddo - return + return endif do j=1, nlevel - LVLS(j,ifld)=1 - LVLSXML(j,ifld)=j - irec=irec+1 + LVLS(j,ifld)=1 + LVLSXML(j,ifld)=j + irec=irec+1 enddo return endif +! !for hpc tmp at sigma lvl if(trim(param%shortname)=='TMP_ON_SIGMA_LVL_HPC') then IF(READTHK)THEN ! EITHER READ DSG THICKNESS diff --git a/sorc/ncep_post.fd/SET_OUTFLDS.f b/sorc/ncep_post.fd/SET_OUTFLDS.f index a12d60106..a21f98fa5 100644 --- a/sorc/ncep_post.fd/SET_OUTFLDS.f +++ b/sorc/ncep_post.fd/SET_OUTFLDS.f @@ -1,43 +1,25 @@ !> @file -! . . . -!> SUBPROGRAM: READCNTRLgrb2_xml READS POST xml CONTROL FILE -!! PRGRMMR: J. WANG ORG: NCEP/EMC DATE: 12-01-27 -!! -!! ABSTRACT: -!! THIS ROUTINE READS THE CONTROL FILE IN XML FORMAT SPECIFYING -!! FIELD(S) TO POST, AND SAVE ALL THE FIELD INFORMATION IN -!! A DATATYPE array PSET -!! -!! PROGRAM HISTORY LOG: -!! 01_27_2012 Jun Wang - INITIAL CODE -!! 03_10_2015 Lin Gan - Replace XML file with flat file implementation -!! 10_30_2019 Bo CUI - REMOVE "GOTO" STATEMENT +!> @ brief set_outflds() reads post xml control file. +!> +!> @author J. Wang NCEP/EMC @date 2012-01-27 -!! -!! USAGE: CALL READCNTRL_XML(kth,kpv,pv,th) -!! INPUT ARGUMENT LIST: -!! KTH -!! TH -!! KPV -!! PV -!! -!! OUTPUT ARGUMENT LIST: -!! NONE - -!! -!! OUTPUT FILES: -!! NONE -!! -!! SUBPROGRAMS CALLED: -!! UTILITIES: -!! -!! LIBRARY: -!! COMMON - RQSTFLDGRB2 -!! CTLBLK -!! -!! ATTRIBUTES: -!! LANGUAGE: FORTRAN -!! MACHINE : IBM -!! +!> This routine reads the control file in xml format specifying +!> field(s) to post, and save all the field information in +!> a datatype array PSET. +!> +!> @param[in] KTH +!> @param[in] TH +!> @param[in] KPV +!> @param[in] PV +!> +!> ### Program History Log +!> Date | Programmer | Comments +!> -----|------------|--------- +!> 2012-01-27 | Jun Wang | Initial +!> 2015-03-10 | Lin Gan | Replace XML file with flat file implementation +!> 2019-10-30 | Bo Cui | Removw "GOTO" Statement +!> +!> @author J. Wang NCEP/EMC @date 2012-01-27 SUBROUTINE SET_OUTFLDS(kth,th,kpv,pv) ! diff --git a/sorc/ncep_post.fd/SLP_NMM.f b/sorc/ncep_post.fd/SLP_NMM.f deleted file mode 100644 index 9c8a3669e..000000000 --- a/sorc/ncep_post.fd/SLP_NMM.f +++ /dev/null @@ -1,411 +0,0 @@ - SUBROUTINE MEMSLP_NMM(TPRES,QPRES,FIPRES) -! -!$$$ SUBPROGRAM DOCUMENTATION BLOCK -! . . . -! SUBROUTINE: MEMSLP MEMBRANE SLP REDUCTION -! -! ABSTRACT: THIS ROUTINE COMPUTES THE SEA LEVEL PRESSURE -! REDUCTION USING THE MESINGER RELAXATION -! METHOD FOR SIGMA COORDINATES. -! A BY-PRODUCT IS THE -! SET OF VALUES FOR THE UNDERGROUND TEMPERATURES -! ON THE SPECIFIED PRESSURE LEVELS -! -! PROGRAM HISTORY LOG: -! 99-09-23 T BLACK - REWRITTEN FROM ROUTINE SLP (ETA -! COORDINATES) -! 02-07-26 H CHUANG - PARALLIZE AND MODIFIED FOR WRF A/C GRIDS -! ALSO REDUCE S.O.R. COEFF FROM 1.75 to 1.25 -! BECAUSE THERE WAS NUMERICAL INSTABILITY -! 02-08-21 H CHUANG - MODIFIED TO ALWAYS USE OLD TTV FOR RELAXATION -! SO THAT THERE WAS BIT REPRODUCIBILITY BETWEEN -! USING ONE AND MULTIPLE TASKS -! 13-12-06 H CHUANG - REMOVE EXTRA SMOOTHING OF SLP AT THE END -! 19-10-30 Bo CUI - REMOVE "GOTO" STATEMENT -! -! USAGE: CALL SLPSIG FROM SUBROUITNE ETA2P -! -! INPUT ARGUMENT LIST: -! PD - SFC PRESSURE MINUS PTOP -! FIS - SURFACE GEOPOTENTIAL -! T - TEMPERATURE -! Q - SPECIFIC HUMIDITY -! FI - GEOPOTENTIAL -! PT - TOP PRESSURE OF DOMAIN -! -! OUTPUT ARGUMENT LIST: -! PSLP - THE FINAL REDUCED SEA LEVEL PRESSURE ARRAY -! -! SUBPROGRAMS CALLED: -! UNIQUE: -! NONE -! -!----------------------------------------------------------------------- - use vrbls3d, only: pint, zint, t, q - use vrbls2d, only: pslp, fis - use masks, only: lmh - use params_mod, only: overrc, ad05, cft0, g, rd, d608, h1, kslpd - use ctlblk_mod, only: jsta, jend, spl, num_procs, mpi_comm_comp, lsmp1, jsta_m2, jend_m2,& - lm, jsta_m, jend_m, im, jsta_2l, jend_2u, im_jm, lsm, jm -!- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - implicit none -! - INCLUDE "mpif.h" -!----------------------------------------------------------------------- - integer, PARAMETER :: NFILL=0,NRLX1=500,NRLX2=100 -!----------------------------------------------------------------------- - real,dimension(IM,JSTA_2L:JEND_2U,LSM),intent(in) :: QPRES - real,dimension(IM,JSTA_2L:JEND_2U,LSM),intent(inout) :: TPRES,FIPRES - REAL :: TTV(IM,JSTA_2L:JEND_2U),TNEW(IM,JSTA_2L:JEND_2U) & - ,SLPX(IM,JSTA_2L:JEND_2U) & - ,P1(IM,JSTA_2L:JEND_2U),HTM2D(IM,JSTA_2L:JEND_2U) - REAL :: HTMO(IM,JSTA_2L:JEND_2U,LSM) - real P2,GZ1,GZ2,TLYR,SPLL,PCHK,PSFC,SLOPE,TVRT,DIS,TINIT -!----------------------------------------------------------------------- -!----------------------------------------------------------------------- - INTEGER :: KMNTM(LSM),IMNT(IM_JM,LSM),JMNT(IM_JM,LSM) & - ,LMHO(IM,JSTA_2L:JEND_2U) - INTEGER :: IHE(JM),IHW(JM),IVE(JM),IVW(JM),IHS(JM),IHN(JM) - integer ii,jj,I,J,L,N,KM,KS,KP,KMN,KMM,KOUNT,LP,LLMH,LHMNT & - ,LMHIJ,LMAP1,LXXX,IERR,NRLX,IHH2 -!----------------------------------------------------------------------- - LOGICAL :: DONE(IM,JSTA_2L:JEND_2U) - logical, parameter :: debugprint = .false. -!----------------------------------------------------------------------- -!----------------------------------------------------------------------- -!*** -!*** CALCULATE THE I-INDEX EAST-WEST INCREMENTS -!*** -! - ii=279 - jj=314 - DO J=1,JM - IHE(J)=MOD(J+1,2) - IHW(J)=IHE(J)-1 - ENDDO -! print*,'relaxation coeff= ',OVERRC -!----------------------------------------------------------------------- -!*** -!*** INITIALIZE ARRAYS. LOAD SLP ARRAY WITH SURFACE PRESSURE. -!*** -!$omp parallel do - DO J=JSTA,JEND - DO I=1,IM - LLMH=NINT(LMH(I,J)) - PSLP(I,J)=PINT(I,J,LLMH+1) - if(debugprint .and. i==ii .and. j==jj)print*,'Debug: FIS,IC for PSLP=' & - ,FIS(i,j),PSLP(I,J) - TTV(I,J)=0. - LMHO(I,J)=0 - DONE(I,J)=.FALSE. - ENDDO - ENDDO -! -!*** CALCULATE SEA LEVEL PRESSURE FOR PROFILES (AND POSSIBLY -!*** FOR POSTING BY POST PROCESSOR). -! -!-------------------------------------------------------------------- -!*** -!*** CREATE A 3-D "HEIGHT MASK" FOR THE SPECIFIED PRESSURE LEVELS -!*** (1 => ABOVE GROUND) AND A 2-D INDICATOR ARRAY THAT SAYS -!*** WHICH PRESSURE LEVEL IS THE LOWEST ONE ABOVE THE GROUND -!*** - DO 100 L=1,LSM - SPLL=SPL(L) -! - DO J=JSTA,JEND - DO I=1,IM - PSFC=PSLP(I,J) - PCHK=PSFC - IF(NFILL>0)THEN - PCHK=PINT(I,J,NINT(LMH(I,J))+1-NFILL) - ENDIF -! IF(SM(I,J)>0.5.AND.FIS(I,J)<1.)PCHK=PSLP(I,J) - IF(FIS(I,J)<1.)PCHK=PSLP(I,J) -! -! IF(SPLL1.AND.HTMO(I,J,L-1)>0.5)LMHO(I,J)=L-1 - ENDIF -! - IF(L==LSM.AND.HTMO(I,J,L)>0.5)LMHO(I,J)=LSM - if(debugprint .and. i==ii .and. j==jj)print*,'Debug: HTMO= ',HTMO(I,J,L) - ENDDO - ENDDO -! - 100 CONTINUE -! if(jj>=jsta.and.jj<=jend) -! +print*,'Debug: LMHO=',LMHO(ii,jj) -!-------------------------------------------------------------------- -!*** -!*** WE REACH THIS LINE IF WE WANT THE MESINGER ETA SLP REDUCTION -!*** BASED ON RELAXATION TEMPERATURES. THE FIRST STEP IS TO -!*** FIND THE HIGHEST LAYER CONTAINING MOUNTAINS. -!*** - loop210: DO L=LSM,1,-1 -! - DO J=JSTA,JEND - DO I=1,IM - IF(HTMO(I,J,L)<0.5) cycle loop210 - ENDDO - ENDDO -! - LHMNT=L+1 - exit loop210 - enddo loop210 - - if(debugprint)print*,'Debug in SLP: LHMNT=',LHMNT - if ( num_procs > 1 ) then - CALL MPI_ALLREDUCE & - (LHMNT,LXXX,1,MPI_INTEGER,MPI_MIN,MPI_COMM_COMP,IERR) - LHMNT = LXXX - end if - - IF(LHMNT==LSMP1)THEN - GO TO 325 - ENDIF - if(debugprint)print*,'Debug in SLP: LHMNT A ALLREDUCE=',LHMNT -!*** -!*** NOW GATHER THE ADDRESSES OF ALL THE UNDERGROUND POINTS. -!*** -!$omp parallel do private(kmn,kount) - DO 250 L=LHMNT,LSM - KMN=0 - KMNTM(L)=0 - KOUNT=0 - DO 240 J=JSTA_M2,JEND_M2 -! DO 240 J=JSTA_M,JEND_M - DO 240 I=2,IM-1 - KOUNT=KOUNT+1 - IMNT(KOUNT,L)=0 - JMNT(KOUNT,L)=0 - IF(HTMO(I,J,L)>0.5) CYCLE - KMN=KMN+1 - IMNT(KMN,L)=I - JMNT(KMN,L)=J - 240 CONTINUE - KMNTM(L)=KMN - 250 CONTINUE -! -! -!*** CREATE A TEMPORARY TV ARRAY, AND FOLLOW BY SEQUENTIAL -!*** OVERRELAXATION, DOING NRLX PASSES. -! -! IF(NTSD==1)THEN - NRLX=NRLX1 -! ELSE -! NRLX=NRLX2 -! ENDIF -! -!!$omp parallel do private(i,j,tinit,ttv) - DO 300 L=LHMNT,LSM -! - DO 270 J=JSTA,JEND - DO 270 I=1,IM - TTV(I,J)=TPRES(I,J,L) - IF(TTV(I,J)<150. .and. TTV(I,J)>325.0)print* & - ,'abnormal IC for T relaxation',i,j,TTV(I,J) - HTM2D(I,J)=HTMO(I,J,L) - 270 CONTINUE -! -!*** FOR GRID BOXES NEXT TO MOUNTAINS, COMPUTE TV TO USE AS -!*** BOUNDARY CONDITIONS FOR THE RELAXATION UNDERGROUND -! - CALL EXCH2(HTM2D(1,JSTA_2L)) !NEED TO EXCHANGE TWO ROW FOR E GRID - DO J=JSTA_M2,JEND_M2 - DO I=2,IM-1 - IF(HTM2D(I,J)>0.5.AND.HTM2D(I+IHW(J),J-1)*HTM2D(I+IHE(J),J-1) & - *HTM2D(I+IHW(J),J+1)*HTM2D(I+IHE(J),J+1) & - *HTM2D(I-1 ,J )*HTM2D(I+1 ,J ) & - *HTM2D(I ,J-2)*HTM2D(I ,J+2)<0.5)THEN -!HC MODIFICATION FOR C AND A GRIDS -!HC IF(HTM2D(I,J)>0.5.AND. -!HC 1 HTM2D(I-1,J)*HTM2D(I+1,J) -!HC 2 *HTM2D(I,J-1)*HTM2D(I,J+1) -!HC 3 *HTM2D(I-1,J-1)*HTM2D(I+1,J-1) -!HC 4 *HTM2D(I-1,J+1)*HTM2D(I+1,J+1)<0.5)THEN -! - TTV(I,J)=TPRES(I,J,L)*(1.+0.608*QPRES(I,J,L)) - ENDIF -! if(i==ii.and.j==jj)print*,'Debug:L,TTV B SMOO= ',l,TTV(I,J) - ENDDO - ENDDO -! - KMM=KMNTM(L) -! - DO 285 N=1,NRLX - CALL EXCH2(TTV(1,JSTA_2L)) -! print*,'Debug:L,KMM=',L,KMM - DO 280 KM=1,KMM - I=IMNT(KM,L) - J=JMNT(KM,L) - TINIT=TTV(I,J) - TNEW(I,J)=AD05*(4.*(TTV(I+IHW(J),J-1)+TTV(I+IHE(J),J-1) & - +TTV(I+IHW(J),J+1)+TTV(I+IHE(J),J+1)) & - +TTV(I-1,J) +TTV(I+1,J) & - +TTV(I,J-2) +TTV(I,J+2)) & - -CFT0*TTV(I,J) -!HC MODIFICATION FOR C AND A GRIDS -! eight point relaxation using old TTV -!HC TNEW(I,J)=AD05*(4.*(TTV(I-1,J)+TTV(I+1,J) -!HC 1 +TTV(I,J-1)+TTV(I,J+1)) -!HC 2 +TTV(I-1,J-1)+TTV(I+1,J-1) -!HC 3 +TTV(I-1,J+1)+TTV(I+1,J+1)) -!HC 4 -CFT0*TTV(I,J) -! -! if(i==ii.and.j==jj)print*,'Debug: L,TTV A S' -! 1,l,TTV(I,J),N -! 1,l,TNEW(I,J),N - 280 CONTINUE -! - DO KM=1,KMM - I=IMNT(KM,L) - J=JMNT(KM,L) - TTV(I,J)=TNEW(I,J) - END DO - 285 CONTINUE -! - DO 290 KM=1,KMM - I=IMNT(KM,L) - J=JMNT(KM,L) - TPRES(I,J,L)=TTV(I,J) - 290 CONTINUE - 300 CONTINUE -!---------------------------------------------------------------- -!*** -!*** CALCULATE THE SEA LEVEL PRESSURE AS PER THE NEW SCHEME. -!*** INTEGRATE THE HYDROSTATIC EQUATION DOWNWARD FROM THE -!*** GROUND THROUGH EACH OUTPUT PRESSURE LEVEL (WHERE TV -!*** IS NOW KNOWN) TO FIND GZ AT THE NEXT MIDPOINT BETWEEN -!*** PRESSURE LEVELS. WHEN GZ=0 IS REACHED, SOLVE FOR THE -!*** PRESSURE. -!*** -! -!*** COUNT THE POINTS WHERE SLP IS DONE BELOW EACH OUTPUT LEVEL -! - KOUNT=0 - DO J=JSTA,JEND - DO I=1,IM -! P1(I,J)=SPL(NINT(LMH(I,J))) -! DONE(I,J)=.FALSE. - IF(abs(FIS(I,J))<1.)THEN - PSLP(I,J)=PINT(I,J,NINT(LMH(I,J))+1) - DONE(I,J)=.TRUE. - KOUNT=KOUNT+1 - if(i==ii.and.j==jj)print*,'Debug:DONE,PSLP A S1=' & - ,done(i,j),PSLP(I,J) - ELSE IF(FIS(I,J)<-1.0) THEN - DO L=LM,1,-1 - IF(ZINT(I,J,L)>0.)THEN - PSLP(I,J)=PINT(I,J,L)/EXP(-ZINT(I,J,L)*G & - /(RD*T(I,J,L)*(Q(I,J,L)*D608+1.0))) - DONE(I,J)=.TRUE. - if(debugprint .and. i==ii.and.j==jj)print* & - ,'Debug:DONE,PINT,PSLP A S1=' & - ,done(i,j),PINT(I,J,L),PSLP(I,J) - EXIT - END IF - END DO - ENDIF - ENDDO - ENDDO -! - KMM=KMNTM(LSM) -!$omp parallel do private(gz1,gz2,i,j,lmap1,p1,p2),shared(pslp) - -LOOP320: DO KM=1,KMM - I=IMNT(KM,LSM) - J=JMNT(KM,LSM) - IF(DONE(I,J)) CYCLE - LMHIJ=LMHO(I,J) - GZ1=FIPRES(I,J,LMHIJ) - P1(I,J)=SPL(LMHIJ) -! - LMAP1=LMHIJ+1 - DO L=LMAP1,LSM - P2=SPL(L) - TLYR=0.5*(TPRES(I,J,L)+TPRES(I,J,L-1)) - GZ2=GZ1+RD*TLYR*ALOG(P1(I,J)/P2) - FIPRES(I,J,L)=GZ2 -! if(i==ii.and.j==jj)print*,'Debug:L,FI A S2=',L,GZ2 - IF(GZ2<=0.)THEN - PSLP(I,J)=P1(I,J)/EXP(-GZ1/(RD*TPRES(I,J,L-1))) -! if(i==ii.and.j==jj)print*,'Debug:PSLP A S2=',PSLP(I,J) - DONE(I,J)=.TRUE. - KOUNT=KOUNT+1 - CYCLE LOOP320 - ENDIF - P1(I,J)=P2 - GZ1=GZ2 - ENDDO -!HC EXPERIMENT - LP=LSM - SLOPE=-6.6E-4 - TLYR=TPRES(I,J,LP)-0.5*FIPRES(I,J,LP)*SLOPE - PSLP(I,J)=spl(lp)/EXP(-FIPRES(I,J,LP)/(RD*TLYR)) - DONE(I,J)=.TRUE. -! if(i==ii.and.j==jj)print*,'Debug:spl,FI,TLYR,PSLPA3=' & -! ,spl(lp),FIPRES(I,J,LP),TLYR,PSLP(I,J) -!HC EXPERIMENT -ENDDO LOOP320 -! -!*** WHEN SEA LEVEL IS BELOW THE LOWEST OUTPUT PRESSURE LEVEL, -!*** SOLVE THE HYDROSTATIC EQUATION BY CHOOSING A TEMPERATURE -!*** AT THE MIDPOINT OF THE LAYER BETWEEN THAT LOWEST PRESSURE -!*** LEVEL AND THE GROUND BY EXTRAPOLATING DOWNWARD FROM T ON -!*** THE LOWEST PRESSURE LEVEL USING THE DT/DFI BETWEEN THE -!*** LOWEST PRESSURE LEVEL AND THE ONE ABOVE IT. -! -! TOTAL=(IM-2)*(JM-4) -! -!HC DO 340 LP=LSM,1,-1 -! IF(KOUNT==TOTAL)GO TO 350 -!HC MODIFICATION FOR SMALL HILL HIGH PRESSURE SITUATION -!HC IF SURFACE PRESSURE IS CLOSER TO SEA LEVEL THAN LWOEST -!HC OUTPUT PRESSURE LEVEL, USE SURFACE PRESSURE TO DO EXTRAPOLATION - 325 CONTINUE - LP=LSM - DO 330 J=JSTA,JEND - DO 330 I=1,IM - if(debugprint .and. i==ii.and.j==jj)print*,'Debug: with 330 loop' - IF(DONE(I,J)) cycle - if(debugprint .and. i==ii.and.j==jj)print*,'Debug: still within 330 loop' -!HC Comment out the following line for situation with terrain -!HC at boundary (ie FIPRES<0) -!HC because they were not counted as undergound point for 8 pt -!HC relaxation -!HC IF(FIPRES(I,J,LP)<0.)GO TO 330 -! IF(FIPRES(I,J,LP)<0.)THEN -! DO LP=LSM,1,-1 -! IF (FIPRES(I,J) <= 0) - -! IF(FIPRES(I,J,LP)<0..OR.DONE(I,J))GO TO 330 -! SLOPE=(TPRES(I,J,LP)-TPRES(I,J,LP-1)) -! & /(FIPRES(I,J,LP)-FIPRES(I,J,LP-1)) - SLOPE=-6.6E-4 - IF(PINT(I,J,NINT(LMH(I,J))+1)>SPL(LP))THEN - LLMH=NINT(LMH(I,J)) - TVRT=T(I,J,LLMH)*(H1+D608*Q(I,J,LLMH)) - DIS=ZINT(I,J,LLMH+1)-ZINT(I,J,LLMH)+0.5*ZINT(I,J,LLMH+1) - TLYR=TVRT-DIS*G*SLOPE - PSLP(I,J)=PINT(I,J,LLMH+1)*EXP(ZINT(I,J,LLMH+1)*G/(RD*TLYR)) -! if(i==ii.and.j==jj)print*,'Debug:PSFC,zsfc,TLYR,PSLPA3=' -! 1,PINT(I,J,LLMH+1),ZINT(I,J,LLMH+1),TLYR,PSLP(I,J) - ELSE - TLYR=TPRES(I,J,LP)-0.5*FIPRES(I,J,LP)*SLOPE - PSLP(I,J)=spl(lp)/EXP(-FIPRES(I,J,LP)/(RD*TLYR)) - if(debugprint .and. i==ii.and.j==jj)print*,'Debug:spl,FI,TLYR,PSLPA3=' & - ,spl(lp),FIPRES(I,J,LP),TLYR,PSLP(I,J) - END IF - DONE(I,J)=.TRUE. - KOUNT=KOUNT+1 - 330 CONTINUE -!HC 340 CONTINUE -! - 350 CONTINUE -!---------------------------------------------------------------- - RETURN - END diff --git a/sorc/ncep_post.fd/SLP_new.f b/sorc/ncep_post.fd/SLP_new.f index 0ad9fc847..ef7a31d75 100644 --- a/sorc/ncep_post.fd/SLP_new.f +++ b/sorc/ncep_post.fd/SLP_new.f @@ -26,6 +26,10 @@ SUBROUTINE MEMSLP(TPRES,QPRES,FIPRES) ! CHANGES TO AVOID RELAXATION FOR ABOVE G GIBSING ! ARE COMMENTED OUT FOR NOW ! 19-10-30 Bo CUI - REMOVE "GOTO" STATEMENT +! 21-07-26 W Meng - Restrict computation from undefined grids +! 21-07-07 J Meng - 2D DECOMPOSITION +! 21-09-25 W Meng - Further modification for restricting computation +! from undefined grids. ! ! USAGE: CALL SLPSIG FROM SUBROUITNE ETA2P ! @@ -51,7 +55,7 @@ SUBROUTINE MEMSLP(TPRES,QPRES,FIPRES) use params_mod, only: overrc, ad05, cft0, g, rd, d608, h1, kslpd use ctlblk_mod, only: jend, jsta, spval, spl, num_procs, mpi_comm_comp, lsmp1, & jsta_m, jend_m, lm, im, jsta_2l, jend_2u, lsm, jm,& - im_jm + im_jm, iend, ista, ista_m, iend_m, ista_2l, iend_2u !- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - implicit none ! @@ -60,29 +64,29 @@ SUBROUTINE MEMSLP(TPRES,QPRES,FIPRES) integer,PARAMETER :: NFILL=0,NRLX1=500,NRLX2=100 real,parameter:: def_of_mountain=2.0 !----------------------------------------------------------------------- - real,dimension(IM,JSTA_2L:JEND_2U,LSM),intent(in) :: QPRES - real,dimension(IM,JSTA_2L:JEND_2U,LSM),intent(inout) :: TPRES,FIPRES - REAL :: TTV(IM,JSTA_2L:JEND_2U),TNEW(IM,JSTA_2L:JEND_2U) & - , P1(IM,JSTA_2L:JEND_2U),HTM2D(IM,JSTA_2L:JEND_2U) - REAL :: HTMO(IM,JSTA_2L:JEND_2U,LSM) + real,dimension(ISTA_2L:IEND_2U,JSTA_2L:JEND_2U,LSM),intent(in) :: QPRES + real,dimension(ISTA_2L:IEND_2U,JSTA_2L:JEND_2U,LSM),intent(inout) :: TPRES,FIPRES + REAL :: TTV(ISTA_2L:IEND_2U,JSTA_2L:JEND_2U),TNEW(ISTA_2L:IEND_2U,JSTA_2L:JEND_2U) & + , P1(ISTA_2L:IEND_2U,JSTA_2L:JEND_2U),HTM2D(ISTA_2L:IEND_2U,JSTA_2L:JEND_2U) + REAL :: HTMO(ISTA_2L:IEND_2U,JSTA_2L:JEND_2U,LSM) real :: P2,TLYR,GZ1,GZ2,SPLL,PSFC,PCHK,SLOPE,TVRTC,DIS,TVRT,tem !----------------------------------------------------------------------- !----------------------------------------------------------------------- INTEGER :: KMNTM(LSM),IMNT(IM_JM,LSM),JMNT(IM_JM,LSM) & - , LMHO(IM,JSTA_2L:JEND_2U) + , LMHO(ISTA_2L:IEND_2U,JSTA_2L:JEND_2U) INTEGER :: IHE(JM),IHW(JM),IVE(JM),IVW(JM),IHS(JM),IHN(JM) integer ii,jj,I,J,L,N,LLMH,KM,KS,IHH2,KOUNT,KMN,NRLX,LHMNT, & LMHIJ,LMAP1,KMM,LP,LXXX,IERR ! dong real a1,a2,a3,a4,a5,a6,a7,a8 !----------------------------------------------------------------------- - LOGICAL :: DONE(IM,JSTA_2L:JEND_2U) + LOGICAL :: DONE(ISTA_2L:IEND_2U,JSTA_2L:JEND_2U) !----------------------------------------------------------------------- !*** !*** CALCULATE THE I-INDEX EAST-WEST INCREMENTS !*** ! - ii = IM/2 + ii = (IEND-ISTA)/2 jj = (JEND-JSTA)/2 DO J=1,JM IHE(J) = 1 @@ -99,7 +103,7 @@ SUBROUTINE MEMSLP(TPRES,QPRES,FIPRES) !*** !$omp parallel do private(i,j,llmh) DO J=JSTA,JEND - DO I=1,IM + DO I=ISTA,IEND LLMH = NINT(LMH(I,J)) PSLP(I,J) = PINT(I,J,LLMH+1) ! dong @@ -108,7 +112,7 @@ SUBROUTINE MEMSLP(TPRES,QPRES,FIPRES) TNEW(I,J) = spval - LMHO(I,J) = 0 + LMHO(I,J) = LSM DONE(I,J) = .FALSE. ENDDO ENDDO @@ -124,9 +128,9 @@ SUBROUTINE MEMSLP(TPRES,QPRES,FIPRES) ! !$omp parallel do private(j,i,psfc,pchk) DO J=JSTA,JEND - DO I=1,IM + DO I=ISTA,IEND - HTMO(I,J,L)=spval + HTMO(I,J,L)=1. if(PSLP(I,J)0)THEN @@ -240,11 +258,12 @@ SUBROUTINE SURFCE if(grib == 'grib2') then cfld = cfld+1 fld_info(cfld)%ifld = IAVBLFLD(IGET(024)) -!$omp parallel do private(i,j,jj) +!$omp parallel do private(i,j,ii,jj) do j=1,jend-jsta+1 jj = jsta+j-1 - do i=1,im - datapd(i,j,cfld) = PSFC(i,jj) + do i=1,iend-ista+1 + ii = ista+i-1 + datapd(i,j,cfld) = PSFC(ii,jj) enddo enddo endif @@ -256,11 +275,12 @@ SUBROUTINE SURFCE if(grib == 'grib2') then cfld=cfld+1 fld_info(cfld)%ifld = IAVBLFLD(IGET(025)) -!$omp parallel do private(i,j,jj) +!$omp parallel do private(i,j,ii,jj) do j=1,jend-jsta+1 jj = jsta+j-1 - do i=1,im - datapd(i,j,cfld) = ZSFC(i,jj) + do i=1,iend-ista+1 + ii = ista+i-1 + datapd(i,j,cfld) = ZSFC(ii,jj) enddo enddo endif @@ -273,11 +293,12 @@ SUBROUTINE SURFCE if(grib == 'grib2') then cfld = cfld+1 fld_info(cfld)%ifld = IAVBLFLD(IGET(026)) -!$omp parallel do private(i,j,jj) +!$omp parallel do private(i,j,ii,jj) do j=1,jend-jsta+1 jj = jsta+j-1 - do i=1,im - datapd(i,j,cfld) = TSFC(i,jj) + do i=1,iend-ista+1 + ii = ista+i-1 + datapd(i,j,cfld) = TSFC(ii,jj) enddo enddo endif @@ -289,11 +310,12 @@ SUBROUTINE SURFCE if(grib=='grib2') then cfld=cfld+1 fld_info(cfld)%ifld=IAVBLFLD(IGET(027)) -!$omp parallel do private(i,j,jj) +!$omp parallel do private(i,j,ii,jj) do j=1,jend-jsta+1 jj = jsta+j-1 - do i=1,im - datapd(i,j,cfld) = THSFC(i,jj) + do i=1,iend-ista+1 + ii = ista+i-1 + datapd(i,j,cfld) = THSFC(ii,jj) enddo enddo endif @@ -302,15 +324,16 @@ SUBROUTINE SURFCE ! ! SURFACE SPECIFIC HUMIDITY. IF (IGET(028)>0) THEN - CALL BOUND(GRID1,H1M12,H99999) + !CALL BOUND(GRID1,H1M12,H99999) if(grib=='grib2') then cfld=cfld+1 fld_info(cfld)%ifld=IAVBLFLD(IGET(028)) -!$omp parallel do private(i,j,jj) +!$omp parallel do private(i,j,ii,jj) do j=1,jend-jsta+1 jj = jsta+j-1 - do i=1,im - datapd(i,j,cfld) = QSFC(i,jj) + do i=1,iend-ista+1 + ii = ista+i-1 + datapd(i,j,cfld) = QSFC(ii,jj) enddo enddo endif @@ -319,16 +342,17 @@ SUBROUTINE SURFCE ! ! SURFACE DEWPOINT TEMPERATURE. IF (IGET(029)>0) THEN - allocate(dwpsfc(im,jsta:jend)) + allocate(dwpsfc(ista:iend,jsta:jend)) CALL DEWPOINT(EVP,DWPSFC) if(grib=='grib2') then cfld=cfld+1 fld_info(cfld)%ifld=IAVBLFLD(IGET(029)) -!$omp parallel do private(i,j,jj) +!$omp parallel do private(i,j,ii,jj) do j=1,jend-jsta+1 jj = jsta+j-1 - do i=1,im - datapd(i,j,cfld) = DWPSFC(i,jj) + do i=1,iend-ista+1 + ii = ista+i-1 + datapd(i,j,cfld) = DWPSFC(ii,jj) enddo enddo endif @@ -341,11 +365,12 @@ SUBROUTINE SURFCE if(grib=='grib2') then cfld=cfld+1 fld_info(cfld)%ifld=IAVBLFLD(IGET(076)) -!$omp parallel do private(i,j,jj) +!$omp parallel do private(i,j,ii,jj) do j=1,jend-jsta+1 jj = jsta+j-1 - do i=1,im - datapd(i,j,cfld) = RHSFC(i,jj) + do i=1,iend-ista+1 + ii = ista+i-1 + datapd(i,j,cfld) = RHSFC(ii,jj) enddo enddo endif @@ -361,11 +386,12 @@ SUBROUTINE SURFCE if(grib=='grib2') then cfld=cfld+1 fld_info(cfld)%ifld=IAVBLFLD(IGET(762)) -!$omp parallel do private(i,j,jj) +!$omp parallel do private(i,j,ii,jj) do j=1,jend-jsta+1 jj = jsta+j-1 - do i=1,im - datapd(i,j,cfld) = QVG(i,jj) + do i=1,iend-ista+1 + ii = ista+i-1 + datapd(i,j,cfld) = QVG(ii,jj) enddo enddo endif @@ -377,11 +403,12 @@ SUBROUTINE SURFCE if(grib=='grib2') then cfld=cfld+1 fld_info(cfld)%ifld=IAVBLFLD(IGET(760)) -!$omp parallel do private(i,j,jj) +!$omp parallel do private(i,j,ii,jj) do j=1,jend-jsta+1 jj = jsta+j-1 - do i=1,im - datapd(i,j,cfld) = QV2M(i,jj) + do i=1,iend-ista+1 + ii = ista+i-1 + datapd(i,j,cfld) = QV2M(ii,jj) enddo enddo endif @@ -392,11 +419,12 @@ SUBROUTINE SURFCE if(grib=='grib2') then cfld=cfld+1 fld_info(cfld)%ifld=IAVBLFLD(IGET(761)) -!$omp parallel do private(i,j,jj) +!$omp parallel do private(i,j,ii,jj) do j=1,jend-jsta+1 jj = jsta+j-1 - do i=1,im - datapd(i,j,cfld) = TSNOW(i,jj) + do i=1,iend-ista+1 + ii = ista+i-1 + datapd(i,j,cfld) = TSNOW(ii,jj) enddo enddo endif @@ -407,11 +435,12 @@ SUBROUTINE SURFCE if(grib=='grib2') then cfld=cfld+1 fld_info(cfld)%ifld=IAVBLFLD(IGET(724)) -!$omp parallel do private(i,j,jj) +!$omp parallel do private(i,j,ii,jj) do j=1,jend-jsta+1 jj = jsta+j-1 - do i=1,im - datapd(i,j,cfld) = SNFDEN(i,jj) + do i=1,iend-ista+1 + ii = ista+i-1 + datapd(i,j,cfld) = SNFDEN(ii,jj) enddo enddo endif @@ -444,12 +473,21 @@ SUBROUTINE SURFCE cfld=cfld+1 fld_info(cfld)%ifld=IAVBLFLD(IGET(725)) fld_info(cfld)%ntrange=1 - fld_info(cfld)%tinvstat=IFHR-ID(18) -!$omp parallel do private(i,j,jj) + fld_info(cfld)%tinvstat=IFHR +!$omp parallel do private(i,j,ii,jj) do j=1,jend-jsta+1 jj = jsta+j-1 - do i=1,im - datapd(i,j,cfld) = SNDEPAC(i,jj) + do i=1,iend-ista+1 + ii = ista+i-1 + if(SNDEPAC(ii,jj)0.and.grib=='grib2') then cfld=cfld+1 fld_info(cfld)%ifld=IAVBLFLD(IGET(571)) -!$omp parallel do private(i,j,jj) +!$omp parallel do private(i,j,ii,jj) do j=1,jend-jsta+1 jj = jsta+j-1 - do i=1,im - datapd(i,j,cfld) = TG(i,jj) + do i=1,iend-ista+1 + ii = ista+i-1 + datapd(i,j,cfld) = TG(ii,jj) enddo enddo endif @@ -613,9 +659,13 @@ SUBROUTINE SURFCE IF (IGET(171)>0) THEN !!$omp parallel do private(i,j) DO J=JSTA,JEND - DO I=1,IM + DO I=ISTA,IEND IF(SMSTAV(I,J) /= SPVAL)THEN - GRID1(I,J) = SMSTAV(I,J)*100. + IF ( MODELNAME == 'FV3R') THEN + GRID1(I,J) = SMSTAV(I,J) + ELSE + GRID1(I,J) = SMSTAV(I,J)*100. + ENDIF ELSE GRID1(I,J) = 0. ENDIF @@ -624,11 +674,12 @@ SUBROUTINE SURFCE if(grib=='grib2') then cfld=cfld+1 fld_info(cfld)%ifld=IAVBLFLD(IGET(171)) -!$omp parallel do private(i,j,jj) +!$omp parallel do private(i,j,ii,jj) do j=1,jend-jsta+1 jj = jsta+j-1 - do i=1,im - datapd(i,j,cfld) = GRID1(i,jj) + do i=1,iend-ista+1 + ii = ista+i-1 + datapd(i,j,cfld) = GRID1(ii,jj) enddo enddo endif @@ -638,7 +689,7 @@ SUBROUTINE SURFCE IF (IGET(036)>0) THEN !$omp parallel do private(i,j) DO J=JSTA,JEND - DO I=1,IM + DO I=ISTA,IEND IF(SMSTOT(I,J)/=SPVAL) THEN IF(SM(I,J) > SMALL .AND. SICE(I,J) < SMALL) THEN GRID1(I,J) = 1000.0 ! TEMPORY FIX TO MAKE SURE SMSTOT=1 FOR WATER @@ -653,11 +704,12 @@ SUBROUTINE SURFCE if(grib=='grib2') then cfld=cfld+1 fld_info(cfld)%ifld=IAVBLFLD(IGET(036)) -!$omp parallel do private(i,j,jj) +!$omp parallel do private(i,j,ii,jj) do j=1,jend-jsta+1 jj = jsta+j-1 - do i=1,im - datapd(i,j,cfld) = GRID1(i,jj) + do i=1,iend-ista+1 + ii = ista+i-1 + datapd(i,j,cfld) = GRID1(ii,jj) enddo enddo endif @@ -668,7 +720,7 @@ SUBROUTINE SURFCE IF(MODELNAME == 'RAPR') THEN !$omp parallel do private(i,j) DO J=JSTA,JEND - DO I=1,IM + DO I=ISTA,IEND IF(CMC(I,J) /= SPVAL) then GRID1(I,J) = CMC(I,J) else @@ -679,7 +731,7 @@ SUBROUTINE SURFCE else !$omp parallel do private(i,j) DO J=JSTA,JEND - DO I=1,IM + DO I=ISTA,IEND IF(CMC(I,J) /= SPVAL) then GRID1(I,J) = CMC(I,J)*1000. else @@ -691,11 +743,12 @@ SUBROUTINE SURFCE if(grib=='grib2') then cfld=cfld+1 fld_info(cfld)%ifld=IAVBLFLD(IGET(118)) -!$omp parallel do private(i,j,jj) +!$omp parallel do private(i,j,ii,jj) do j=1,jend-jsta+1 jj = jsta+j-1 - do i=1,im - datapd(i,j,cfld) = GRID1(i,jj) + do i=1,iend-ista+1 + ii = ista+i-1 + datapd(i,j,cfld) = GRID1(ii,jj) enddo enddo endif @@ -707,11 +760,12 @@ SUBROUTINE SURFCE if(grib=='grib2') then cfld=cfld+1 fld_info(cfld)%ifld=IAVBLFLD(IGET(119)) -!$omp parallel do private(i,j,jj) +!$omp parallel do private(i,j,ii,jj) do j=1,jend-jsta+1 jj = jsta+j-1 - do i=1,im - datapd(i,j,cfld) = SNO(i,jj) + do i=1,iend-ista+1 + ii = ista+i-1 + datapd(i,j,cfld) = SNO(ii,jj) enddo enddo endiF @@ -722,7 +776,7 @@ SUBROUTINE SURFCE ! GRID1=SPVAL !$omp parallel do private(i,j) DO J=JSTA,JEND - DO I=1,IM + DO I=ISTA,IEND ! GRID1(I,J) = 100.*SNOAVG(I,J) GRID1(I,J) = SNOAVG(I,J) if (SNOAVG(I,J) /= spval) GRID1(I,J) = 100.*SNOAVG(I,J) @@ -758,11 +812,12 @@ SUBROUTINE SURFCE fld_info(cfld)%tinvstat=IFHR-ID(18) ! fld_info(cfld)%ntrange=IFHR-ID(18) ! fld_info(cfld)%tinvstat=1 -!$omp parallel do private(i,j,jj) +!$omp parallel do private(i,j,ii,jj) do j=1,jend-jsta+1 jj = jsta+j-1 - do i=1,im - datapd(i,j,cfld) = GRID1(i,jj) + do i=1,iend-ista+1 + ii = ista+i-1 + datapd(i,j,cfld) = GRID1(ii,jj) enddo enddo endif @@ -779,16 +834,22 @@ SUBROUTINE SURFCE ID(18) = IFHR - 1 ENDIF ID(20) = 3 + ITSRFC = NINT(TSRFC) if(grib=='grib2') then cfld=cfld+1 fld_info(cfld)%ifld=IAVBLFLD(IGET(501)) - fld_info(cfld)%ntrange=IFHR-ID(18) - fld_info(cfld)%tinvstat=1 -!$omp parallel do private(i,j,jj) + if(ITSRFC>0) then + fld_info(cfld)%ntrange=1 + else + fld_info(cfld)%ntrange=0 + endif + fld_info(cfld)%tinvstat=IFHR-ID(18) +!$omp parallel do private(i,j,ii,jj) do j=1,jend-jsta+1 jj = jsta+j-1 - do i=1,im - datapd(i,j,cfld) = PSFCAVG(i,jj) + do i=1,iend-ista+1 + ii = ista+i-1 + datapd(i,j,cfld) = PSFCAVG(ii,jj) enddo enddo endif @@ -808,16 +869,22 @@ SUBROUTINE SURFCE ISVALUE = 10 ID(10) = MOD(ISVALUE/256,256) ID(11) = MOD(ISVALUE,256) + ITSRFC = NINT(TSRFC) if(grib=='grib2') then cfld=cfld+1 fld_info(cfld)%ifld=IAVBLFLD(IGET(502)) - fld_info(cfld)%ntrange=IFHR-ID(18) - fld_info(cfld)%tinvstat=1 -!$omp parallel do private(i,j,jj) + if(ITSRFC>0) then + fld_info(cfld)%ntrange=1 + else + fld_info(cfld)%ntrange=0 + endif + fld_info(cfld)%tinvstat=IFHR-ID(18) +!$omp parallel do private(i,j,ii,jj) do j=1,jend-jsta+1 jj = jsta+j-1 - do i=1,im - datapd(i,j,cfld) = T10AVG(i,jj) + do i=1,iend-ista+1 + ii = ista+i-1 + datapd(i,j,cfld) = T10AVG(ii,jj) enddo enddo endif @@ -827,7 +894,7 @@ SUBROUTINE SURFCE IF ( IGET(244)>0 ) THEN !$omp parallel do private(i,j) DO J=JSTA,JEND - DO I=1,IM + DO I=ISTA,IEND GRID1(I,J) = SNONC(I,J) ENDDO ENDDO @@ -856,7 +923,7 @@ SUBROUTINE SURFCE if(grib=='grib2') then cfld=cfld+1 fld_info(cfld)%ifld=IAVBLFLD(IGET(244)) - datapd(1:im,1:jend-jsta+1,cfld)=GRID1(1:im,jsta:jend) + datapd(1:iend-ista+1,1:jend-jsta+1,cfld)=GRID1(ista:iend,jsta:jend) endif ENDIF ! @@ -864,7 +931,7 @@ SUBROUTINE SURFCE IF ( IGET(120)>0 ) THEN GRID1=SPVAL DO J=JSTA,JEND - DO I=1,IM + DO I=ISTA,IEND ! GRID1(I,J)=PCTSNO(I,J) IF ( SNO(I,J) /= SPVAL ) THEN SNEQV = SNO(I,J) @@ -879,23 +946,24 @@ SUBROUTINE SURFCE if(grib=='grib2') then cfld=cfld+1 fld_info(cfld)%ifld=IAVBLFLD(IGET(120)) -!$omp parallel do private(i,j,jj) +!$omp parallel do private(i,j,ii,jj) do j=1,jend-jsta+1 jj = jsta+j-1 - do i=1,im - datapd(i,j,cfld) = GRID1(i,jj) + do i=1,iend-ista+1 + ii = ista+i-1 + datapd(i,j,cfld) = GRID1(ii,jj) enddo enddo endif ENDIF ! ADD SNOW DEPTH IF ( IGET(224)>0 ) THEN - ii = im/2 + ii = (ista+iend)/2 jj = (jsta+jend)/2 ! GRID1=SPVAL !$omp parallel do private(i,j) DO J=JSTA,JEND - DO I=1,IM + DO I=ISTA,IEND GRID1(I,J) = SPVAL IF(SI(I,J) /= SPVAL) GRID1(I,J) = SI(I,J)*0.001 ! SI comes out of WRF in mm ENDDO @@ -904,11 +972,12 @@ SUBROUTINE SURFCE if(grib=='grib2') then cfld=cfld+1 fld_info(cfld)%ifld=IAVBLFLD(IGET(224)) -!$omp parallel do private(i,j,jj) +!$omp parallel do private(i,j,ii,jj) do j=1,jend-jsta+1 jj = jsta+j-1 - do i=1,im - datapd(i,j,cfld) = GRID1(i,jj) + do i=1,iend-ista+1 + ii = ista+i-1 + datapd(i,j,cfld) = GRID1(ii,jj) enddo enddo endif @@ -918,11 +987,12 @@ SUBROUTINE SURFCE if(grib=='grib2') then cfld=cfld+1 fld_info(cfld)%ifld=IAVBLFLD(IGET(242)) -!$omp parallel do private(i,j,jj) +!$omp parallel do private(i,j,ii,jj) do j=1,jend-jsta+1 jj = jsta+j-1 - do i=1,im - datapd(i,j,cfld) = POTEVP(i,jj) + do i=1,iend-ista+1 + ii = ista+i-1 + datapd(i,j,cfld) = POTEVP(ii,jj) enddo enddo endif @@ -932,11 +1002,12 @@ SUBROUTINE SURFCE if(grib=='grib2') then cfld=cfld+1 fld_info(cfld)%ifld=IAVBLFLD(IGET(349)) -!$omp parallel do private(i,j,jj) +!$omp parallel do private(i,j,ii,jj) do j=1,jend-jsta+1 jj = jsta+j-1 - do i=1,im - datapd(i,j,cfld) = DZICE(i,jj) + do i=1,iend-ista+1 + ii = ista+i-1 + datapd(i,j,cfld) = DZICE(ii,jj) enddo enddo endif @@ -958,10 +1029,10 @@ SUBROUTINE SURFCE .OR.IGET(230)>0 .OR. IGET(231)>0 & .OR.IGET(232)>0 .OR. IGET(233)>0) THEN - allocate(smcdry(im,jsta:jend), & - smcmax(im,jsta:jend)) + allocate(smcdry(ista:iend,jsta:jend), & + smcmax(ista:iend,jsta:jend)) DO J=JSTA,JEND - DO I=1,IM + DO I=ISTA,IEND ! ---------------------------------------------------------------------- ! IF(QWBS(I,J)>0.001)print*,'NONZERO QWBS',i,j,QWBS(I,J) ! IF(abs(SM(I,J)-0.)<1.0E-5)THEN @@ -987,11 +1058,12 @@ SUBROUTINE SURFCE if(grib=='grib2') then cfld=cfld+1 fld_info(cfld)%ifld=IAVBLFLD(IGET(228)) -!$omp parallel do private(i,j,jj) +!$omp parallel do private(i,j,ii,jj) do j=1,jend-jsta+1 jj = jsta+j-1 - do i=1,im - datapd(i,j,cfld) = ECAN(i,jj) + do i=1,iend-ista+1 + ii = ista+i-1 + datapd(i,j,cfld) = ECAN(ii,jj) enddo enddo endiF @@ -1001,11 +1073,12 @@ SUBROUTINE SURFCE if(grib=='grib2') then cfld=cfld+1 fld_info(cfld)%ifld=IAVBLFLD(IGET(229)) -!$omp parallel do private(i,j,jj) +!$omp parallel do private(i,j,ii,jj) do j=1,jend-jsta+1 jj = jsta+j-1 - do i=1,im - datapd(i,j,cfld) = EDIR(i,jj) + do i=1,iend-ista+1 + ii = ista+i-1 + datapd(i,j,cfld) = EDIR(ii,jj) enddo enddo endif @@ -1015,7 +1088,7 @@ SUBROUTINE SURFCE if(grib=='grib2') then cfld=cfld+1 fld_info(cfld)%ifld=IAVBLFLD(IGET(230)) - datapd(1:im,1:jend-jsta+1,cfld) = ETRANS(1:im,jsta:jend) + datapd(1:iend-ista+1,1:jend-jsta+1,cfld) = ETRANS(ista:iend,jsta:jend) endif ENDIF @@ -1023,7 +1096,7 @@ SUBROUTINE SURFCE if(grib=='grib2') then cfld=cfld+1 fld_info(cfld)%ifld=IAVBLFLD(IGET(231)) - datapd(1:im,1:jend-jsta+1,cfld) = ESNOW(1:im,jsta:jend) + datapd(1:iend-ista+1,1:jend-jsta+1,cfld) = ESNOW(ista:iend,jsta:jend) endif ENDIF @@ -1031,11 +1104,12 @@ SUBROUTINE SURFCE if(grib=='grib2') then cfld=cfld+1 fld_info(cfld)%ifld=IAVBLFLD(IGET(232)) -!$omp parallel do private(i,j,jj) +!$omp parallel do private(i,j,ii,jj) do j=1,jend-jsta+1 jj = jsta+j-1 - do i=1,im - datapd(i,j,cfld) = SMCDRY(i,jj) + do i=1,iend-ista+1 + ii = ista+i-1 + datapd(i,j,cfld) = SMCDRY(ii,jj) enddo enddo endif @@ -1045,11 +1119,12 @@ SUBROUTINE SURFCE if(grib=='grib2') then cfld=cfld+1 fld_info(cfld)%ifld=IAVBLFLD(IGET(233)) -!$omp parallel do private(i,j,jj) +!$omp parallel do private(i,j,ii,jj) do j=1,jend-jsta+1 jj = jsta+j-1 - do i=1,im - datapd(i,j,cfld) = SMCMAX(i,jj) + do i=1,iend-ista+1 + ii = ista+i-1 + datapd(i,j,cfld) = SMCMAX(ii,jj) enddo enddo endif @@ -1069,11 +1144,12 @@ SUBROUTINE SURFCE if(grib=='grib2') then cfld=cfld+1 fld_info(cfld)%ifld=IAVBLFLD(IGET(512)) -!$omp parallel do private(i,j,jj) +!$omp parallel do private(i,j,ii,jj) do j=1,jend-jsta+1 jj = jsta+j-1 - do i=1,im - datapd(i,j,cfld) = acond(i,jj) + do i=1,iend-ista+1 + ii = ista+i-1 + datapd(i,j,cfld) = acond(ii,jj) enddo enddo endiF @@ -1107,11 +1183,12 @@ SUBROUTINE SURFCE fld_info(cfld)%ntrange=0 endif fld_info(cfld)%tinvstat=IFHR-ID(18) -!$omp parallel do private(i,j,jj) +!$omp parallel do private(i,j,ii,jj) do j=1,jend-jsta+1 jj = jsta+j-1 - do i=1,im - datapd(i,j,cfld) = avgECAN(i,jj) + do i=1,iend-ista+1 + ii = ista+i-1 + datapd(i,j,cfld) = avgECAN(ii,jj) enddo enddo endiF @@ -1145,11 +1222,12 @@ SUBROUTINE SURFCE fld_info(cfld)%ntrange=0 endif fld_info(cfld)%tinvstat=IFHR-ID(18) -!$omp parallel do private(i,j,jj) +!$omp parallel do private(i,j,ii,jj) do j=1,jend-jsta+1 jj = jsta+j-1 - do i=1,im - datapd(i,j,cfld) = avgEDIR(i,jj) + do i=1,iend-ista+1 + ii = ista+i-1 + datapd(i,j,cfld) = avgEDIR(ii,jj) enddo enddo endif @@ -1183,7 +1261,7 @@ SUBROUTINE SURFCE fld_info(cfld)%ntrange=0 endif fld_info(cfld)%tinvstat=IFHR-ID(18) - datapd(1:im,1:jend-jsta+1,cfld) = avgETRANS(1:im,jsta:jend) + datapd(1:iend-ista+1,1:jend-jsta+1,cfld) = avgETRANS(ista:iend,jsta:jend) endif ENDIF @@ -1215,10 +1293,227 @@ SUBROUTINE SURFCE fld_info(cfld)%ntrange=0 endif fld_info(cfld)%tinvstat=IFHR-ID(18) - datapd(1:im,1:jend-jsta+1,cfld) = avgESNOW(1:im,jsta:jend) + datapd(1:iend-ista+1,1:jend-jsta+1,cfld) = avgESNOW(ista:iend,jsta:jend) endif ENDIF + IF ( IGET(996)>0 )THEN + if(grib=='grib2') then + cfld=cfld+1 + fld_info(cfld)%ifld=IAVBLFLD(IGET(996)) +!$omp parallel do private(i,j,ii,jj) + do j=1,jend-jsta+1 + jj = jsta+j-1 + do i=1,iend-ista+1 + ii = ista+i-1 + datapd(i,j,cfld) = LANDFRAC(ii,jj) + enddo + enddo + endif + ENDIF + + IF ( IGET(997)>0 )THEN + if(grib=='grib2') then + cfld=cfld+1 + fld_info(cfld)%ifld=IAVBLFLD(IGET(997)) +!$omp parallel do private(i,j,ii,jj) + do j=1,jend-jsta+1 + jj = jsta+j-1 + do i=1,iend-ista+1 + ii = ista+i-1 + datapd(i,j,cfld) = PAHI(ii,jj) + enddo + enddo + endif + ENDIF + + IF ( IGET(998)>0 )THEN + if(grib=='grib2') then + cfld=cfld+1 + fld_info(cfld)%ifld=IAVBLFLD(IGET(998)) +!$omp parallel do private(i,j,ii,jj) + do j=1,jend-jsta+1 + jj = jsta+j-1 + do i=1,iend-ista+1 + ii = ista+i-1 + datapd(i,j,cfld) = TWA(ii,jj) + enddo + enddo + endif + ENDIF + + IF ( IGET(999)>0 )THEN +!$omp parallel do private(i,j) + DO J=JSTA,JEND + DO I=ISTA,IEND + GRID1(I,J) = TECAN(I,J) + ENDDO + ENDDO + ID(1:25) = 0 + ITPREC = NINT(TPREC) + if (ITPREC /= 0) then + IFINCR = MOD(IFHR,ITPREC) + IF(IFMIN >= 1)IFINCR= MOD(IFHR*60+IFMIN,ITPREC*60) + else + IFINCR = 0 + endif + ID(18) = 0 + ID(19) = IFHR + IF(IFMIN >= 1)ID(19)=IFHR*60+IFMIN + ID(20) = 4 + IF (IFINCR==0) THEN + ID(18) = IFHR-ITPREC + ELSE + ID(18) = IFHR-IFINCR + IF(IFMIN >= 1)ID(18)=IFHR*60+IFMIN-IFINCR + ENDIF + IF (ID(18)<0) ID(18) = 0 + if(grib=='grib2') then + cfld=cfld+1 + fld_info(cfld)%ifld=IAVBLFLD(IGET(999)) + fld_info(cfld)%ntrange=1 + fld_info(cfld)%tinvstat=IFHR-ID(18) +!$omp parallel do private(i,j,ii,jj) + do j=1,jend-jsta+1 + jj = jsta+j-1 + do i=1,iend-ista+1 + ii = ista+i-1 + datapd(i,j,cfld) = GRID1(ii,jj) + enddo + enddo + endif + ENDIF + + IF ( IGET(1000)>0 )THEN +!$omp parallel do private(i,j) + DO J=JSTA,JEND + DO I=ISTA,IEND + GRID1(I,J) = TETRAN(I,J) + ENDDO + ENDDO + ID(1:25) = 0 + ITPREC = NINT(TPREC) + if (ITPREC /= 0) then + IFINCR = MOD(IFHR,ITPREC) + IF(IFMIN >= 1)IFINCR= MOD(IFHR*60+IFMIN,ITPREC*60) + else + IFINCR = 0 + endif + ID(18) = 0 + ID(19) = IFHR + IF(IFMIN >= 1)ID(19)=IFHR*60+IFMIN + ID(20) = 4 + IF (IFINCR==0) THEN + ID(18) = IFHR-ITPREC + ELSE + ID(18) = IFHR-IFINCR + IF(IFMIN >= 1)ID(18)=IFHR*60+IFMIN-IFINCR + ENDIF + IF (ID(18)<0) ID(18) = 0 + if(grib=='grib2') then + cfld=cfld+1 + fld_info(cfld)%ifld=IAVBLFLD(IGET(1000)) + fld_info(cfld)%ntrange=1 + fld_info(cfld)%tinvstat=IFHR-ID(18) +!$omp parallel do private(i,j,ii,jj) + do j=1,jend-jsta+1 + jj = jsta+j-1 + do i=1,iend-ista+1 + ii = ista+i-1 + datapd(i,j,cfld) = GRID1(ii,jj) + enddo + enddo + endif + ENDIF +! + IF ( IGET(1001)>0 )THEN +!$omp parallel do private(i,j) + DO J=JSTA,JEND + DO I=ISTA,IEND + GRID1(I,J) = TEDIR(I,J) + ENDDO + ENDDO + ID(1:25) = 0 + ITPREC = NINT(TPREC) + if (ITPREC /= 0) then + IFINCR = MOD(IFHR,ITPREC) + IF(IFMIN >= 1)IFINCR= MOD(IFHR*60+IFMIN,ITPREC*60) + else + IFINCR = 0 + endif + ID(18) = 0 + ID(19) = IFHR + IF(IFMIN >= 1)ID(19)=IFHR*60+IFMIN + ID(20) = 4 + IF (IFINCR==0) THEN + ID(18) = IFHR-ITPREC + ELSE + ID(18) = IFHR-IFINCR + IF(IFMIN >= 1)ID(18)=IFHR*60+IFMIN-IFINCR + ENDIF + IF (ID(18)<0) ID(18) = 0 + if(grib=='grib2') then + cfld=cfld+1 + fld_info(cfld)%ifld=IAVBLFLD(IGET(1001)) + fld_info(cfld)%ntrange=1 + fld_info(cfld)%tinvstat=IFHR-ID(18) +!$omp parallel do private(i,j,ii,jj) + do j=1,jend-jsta+1 + jj = jsta+j-1 + do i=1,iend-ista+1 + ii = ista+i-1 + datapd(i,j,cfld) = GRID1(ii,jj) + enddo + enddo + endif + ENDIF +! + + IF (IGET(1002)>0) THEN + IF(ASRFC>0.)THEN + RRNUM=1./ASRFC + ELSE + RRNUM=0. + ENDIF + DO J=JSTA,JEND + DO I=ISTA,IEND + IF(PAHA(I,J)/=SPVAL)THEN + GRID1(I,J)=-1.*PAHA(I,J)*RRNUM !change the sign to conform with Grib + ELSE + GRID1(I,J)=PAHA(I,J) + END IF + ENDDO + ENDDO + ID(1:25) = 0 + ITSRFC = NINT(TSRFC) + IF(ITSRFC /= 0) then + IFINCR = MOD(IFHR,ITSRFC) + IF(IFMIN >= 1)IFINCR= MOD(IFHR*60+IFMIN,ITSRFC*60) + ELSE + IFINCR = 0 + endif + ID(19) = IFHR + IF(IFMIN >= 1)ID(19)=IFHR*60+IFMIN + ID(20) = 3 + IF (IFINCR==0) THEN + ID(18) = IFHR-ITSRFC + ELSE + ID(18) = IFHR-IFINCR + IF(IFMIN >= 1)ID(18)=IFHR*60+IFMIN-IFINCR + ENDIF + IF (ID(18)<0) ID(18) = 0 + if(grib=='grib2') then + cfld=cfld+1 + fld_info(cfld)%ifld=IAVBLFLD(IGET(1002)) + if(ITSRFC>0) then + fld_info(cfld)%ntrange=1 + else + fld_info(cfld)%ntrange=0 + endif + fld_info(cfld)%tinvstat=IFHR-ID(18) + datapd(1:iend-ista+1,1:jend-jsta+1,cfld)=GRID1(ista:iend,jsta:jend) + endif + ENDIF ! ! ! @@ -1231,14 +1526,14 @@ SUBROUTINE SURFCE (IGET(138)>0).OR.(IGET(414)>0).OR. & (IGET(546)>0).OR.(IGET(547)>0).OR. & (IGET(548)>0).OR.(IGET(739)>0).OR. & - (IGET(771)>0)) THEN + (IGET(744)>0).OR.(IGET(771)>0)) THEN - if (.not. allocated(psfc)) allocate(psfc(im,jsta:jend)) + if (.not. allocated(psfc)) allocate(psfc(ista:iend,jsta:jend)) ! !HC COMPUTE SHELTER PRESSURE BECAUSE IT WAS NOT OUTPUT FROM WRF IF(MODELNAME == 'NCAR' .OR. MODELNAME=='RSM'.OR. MODELNAME=='RAPR')THEN DO J=JSTA,JEND - DO I=1,IM + DO I=ISTA,IEND TLOW = T(I,J,NINT(LMH(I,J))) PSFC(I,J) = PINT(I,J,NINT(LMH(I,J))+1) !May not have been set above PSHLTR(I,J) = PSFC(I,J)*EXP(-0.068283/TLOW) @@ -1255,7 +1550,7 @@ SUBROUTINE SURFCE IF (IGET(106)>0) THEN GRID1=SPVAL DO J=JSTA,JEND - DO I=1,IM + DO I=ISTA,IEND ! GRID1(I,J)=TSHLTR(I,J) !HC CONVERT FROM THETA TO T if(tshltr(i,j)/=spval)GRID1(I,J)=TSHLTR(I,J)*(PSHLTR(I,J)*1.E-5)**CAPA @@ -1264,12 +1559,12 @@ SUBROUTINE SURFCE ! TSHLTR(I,J)=GRID1(I,J) ENDDO ENDDO -! print *,'2m tmp=',maxval(TSHLTR(1:im,jsta:jend)), & -! minval(TSHLTR(1:im,jsta:jend)),TSHLTR(1:3,jsta),'grd=',grid1(1:3,jsta) +! print *,'2m tmp=',maxval(TSHLTR(ista:iend,jsta:jend)), & +! minval(TSHLTR(ista:iend,jsta:jend)),TSHLTR(1:3,jsta),'grd=',grid1(1:3,jsta) if(grib=='grib2') then cfld=cfld+1 fld_info(cfld)%ifld=IAVBLFLD(IGET(106)) - datapd(1:im,1:jend-jsta+1,cfld) = GRID1(1:im,jsta:jend) + datapd(1:iend-ista+1,1:jend-jsta+1,cfld) = GRID1(ista:iend,jsta:jend) endif ENDIF ! @@ -1277,21 +1572,21 @@ SUBROUTINE SURFCE IF (IGET(546)>0) THEN ! GRID1=spval ! DO J=JSTA,JEND -! DO I=1,IM +! DO I=ISTA,IEND ! GRID1(I,J)=TSHLTR(I,J) ! ENDDO ! ENDDO if(grib=='grib2') then cfld=cfld+1 fld_info(cfld)%ifld=IAVBLFLD(IGET(546)) - datapd(1:im,1:jend-jsta+1,cfld) = TSHLTR(1:im,jsta:jend) + datapd(1:iend-ista+1,1:jend-jsta+1,cfld) = TSHLTR(ista:iend,jsta:jend) endif ENDIF ! ! SHELTER LEVEL SPECIFIC HUMIDITY. IF (IGET(112)>0) THEN DO J=JSTA,JEND - DO I=1,IM + DO I=ISTA,IEND GRID1(I,J) = QSHLTR(I,J) ENDDO ENDDO @@ -1299,30 +1594,30 @@ SUBROUTINE SURFCE if(grib=='grib2') then cfld=cfld+1 fld_info(cfld)%ifld=IAVBLFLD(IGET(112)) - datapd(1:im,1:jend-jsta+1,cfld) = GRID1(1:im,jsta:jend) + datapd(1:iend-ista+1,1:jend-jsta+1,cfld) = GRID1(ista:iend,jsta:jend) endif ENDIF -! +! GRID1 ! SHELTER MIXING RATIO. IF (IGET(414)>0) THEN DO J=JSTA,JEND - DO I=1,IM + DO I=ISTA,IEND GRID1(I,J) = MRSHLTR(I,J) ENDDO ENDDO if(grib=='grib2') then cfld=cfld+1 fld_info(cfld)%ifld=IAVBLFLD(IGET(414)) - datapd(1:im,1:jend-jsta+1,cfld)=GRID1(1:im,jsta:jend) + datapd(1:iend-ista+1,1:jend-jsta+1,cfld)=GRID1(ista:iend,jsta:jend) endif ENDIF ! ! SHELTER LEVEL DEWPOINT, DEWPOINT DEPRESSION AND SFC EQUIV POT TEMP. - allocate(p1d(im,jsta:jend), t1d(im,jsta:jend)) + allocate(p1d(ista:iend,jsta:jend), t1d(ista:iend,jsta:jend)) IF ((IGET(113)>0) .OR.(IGET(547)>0).OR.(IGET(548)>0)) THEN DO J=JSTA,JEND - DO I=1,IM + DO I=ISTA,IEND !tgs The next 4 lines are GSD algorithm for Dew Point computation !tgs Results are very close to dew point computed in DEWPOINT subroutine @@ -1336,18 +1631,22 @@ SUBROUTINE SURFCE ! EGRID1(I,J) = DWPT + IF(QSHLTR(I,J)0) THEN GRID1=spval if(MODELNAME=='RAPR')THEN DO J=JSTA,JEND - DO I=1,IM + DO I=ISTA,IEND ! DEWPOINT can't be higher than T2 t2=TSHLTR(I,J)*(PSHLTR(I,J)*1.E-5)**CAPA if(qshltr(i,j)/=spval)GRID1(I,J)=min(EGRID1(I,J),T2) @@ -1355,7 +1654,7 @@ SUBROUTINE SURFCE ENDDO else DO J=JSTA,JEND - DO I=1,IM + DO I=ISTA,IEND if(qshltr(i,j)/=spval) GRID1(I,J) = EGRID1(I,J) ENDDO ENDDO @@ -1363,7 +1662,7 @@ SUBROUTINE SURFCE if(grib=='grib2') then cfld=cfld+1 fld_info(cfld)%ifld=IAVBLFLD(IGET(113)) - datapd(1:im,1:jend-jsta+1,cfld)=GRID1(1:im,jsta:jend) + datapd(1:iend-ista+1,1:jend-jsta+1,cfld)=GRID1(ista:iend,jsta:jend) endif ENDIF @@ -1372,16 +1671,16 @@ SUBROUTINE SURFCE ! DEWPOINT at level 1 ------ p1d and t1d are undefined !! -- Moorthi IF (IGET(771)>0) THEN DO J=JSTA,JEND - DO I=1,IM + DO I=ISTA,IEND EVP(I,J)=P1D(I,J)*QVl1(I,J)/(EPS+ONEPS*QVl1(I,J)) EVP(I,J)=EVP(I,J)*D001 ENDDO ENDDO - CALL DEWPOINT(EVP,EGRID1(1,jsta)) + CALL DEWPOINT(EVP,EGRID1(ista:iend,jsta:jend)) ! print *,' MAX DEWPOINT at level 1',maxval(egrid1) GRID1=spval DO J=JSTA,JEND - DO I=1,IM + DO I=ISTA,IEND !tgs 30 dec 2013 - 1st leel dewpoint can't be higher than 1-st level temperature if(qvl1(i,j)/=spval)GRID1(I,J) = min(EGRID1(I,J),T1D(I,J)) ENDDO @@ -1389,7 +1688,7 @@ SUBROUTINE SURFCE if(grib=='grib2') then cfld=cfld+1 fld_info(cfld)%ifld=IAVBLFLD(IGET(771)) - datapd(1:im,1:jend-jsta+1,cfld)=GRID1(1:im,jsta:jend) + datapd(1:iend-ista+1,1:jend-jsta+1,cfld)=GRID1(ista:iend,jsta:jend) endif ENDIF !------------------------------------------------------------------------- @@ -1399,7 +1698,7 @@ SUBROUTINE SURFCE GRID1=SPVAL GRID2=SPVAL DO J=JSTA,JEND - DO I=1,IM + DO I=ISTA,IEND if(TSHLTR(I,J)/=spval.and.PSHLTR(I,J)/=spval.and.QSHLTR(I,J)/=spval) then ! DEWPOINT DEPRESSION in GRID1 GRID1(i,j)=max(0.,TSHLTR(I,J)*(PSHLTR(I,J)*1.E-5)**CAPA-EGRID1(i,j)) @@ -1419,7 +1718,7 @@ SUBROUTINE SURFCE if(grib=='grib2') then cfld=cfld+1 fld_info(cfld)%ifld=IAVBLFLD(IGET(547)) - datapd(1:im,1:jend-jsta+1,cfld)=GRID1(1:im,jsta:jend) + datapd(1:iend-ista+1,1:jend-jsta+1,cfld)=GRID1(ista:iend,jsta:jend) endif ENDIF @@ -1427,7 +1726,7 @@ SUBROUTINE SURFCE if(grib=='grib2') then cfld=cfld+1 fld_info(cfld)%ifld=IAVBLFLD(IGET(548)) - datapd(1:im,1:jend-jsta+1,cfld)=GRID2(1:im,jsta:jend) + datapd(1:iend-ista+1,1:jend-jsta+1,cfld)=GRID2(ista:iend,jsta:jend) endif ENDIF ENDIF @@ -1437,10 +1736,10 @@ SUBROUTINE SURFCE ! ! SHELTER LEVEL RELATIVE HUMIDITY AND APPARENT TEMPERATURE IF (IGET(114) > 0 .OR. IGET(808) > 0) THEN - allocate(q1d(im,jsta:jend)) + allocate(q1d(ista:iend,jsta:jend)) !$omp parallel do private(i,j,llmh) DO J=JSTA,JEND - DO I=1,IM + DO I=ISTA,IEND IF(MODELNAME=='RAPR')THEN LLMH = NINT(LMH(I,J)) ! P1D(I,J)=PINT(I,J,LLMH+1) @@ -1454,12 +1753,12 @@ SUBROUTINE SURFCE ENDDO ENDDO - CALL CALRH(P1D,T1D,Q1D,EGRID1(1,jsta)) + CALL CALRH(P1D,T1D,Q1D,EGRID1(ista:iend,jsta:jend)) if (allocated(q1d)) deallocate(q1d) !$omp parallel do private(i,j) DO J=JSTA,JEND - DO I=1,IM + DO I=ISTA,IEND if(qshltr(i,j) /= spval)then GRID1(I,J) = EGRID1(I,J)*100. else @@ -1472,11 +1771,12 @@ SUBROUTINE SURFCE if(grib == 'grib2') then cfld = cfld+1 fld_info(cfld)%ifld = IAVBLFLD(IGET(114)) -!$omp parallel do private(i,j,jj) +!$omp parallel do private(i,j,ii,jj) do j=1,jend-jsta+1 jj = jsta+j-1 - do i=1,im - datapd(i,j,cfld) = GRID1(i,jj) + do i=1,iend-ista+1 + ii = ista+i-1 + datapd(i,j,cfld) = GRID1(ii,jj) enddo enddo endif @@ -1486,7 +1786,7 @@ SUBROUTINE SURFCE GRID2=SPVAL !$omp parallel do private(i,j,dum1,dum2,dum3,dum216,dum1s,dum3s) DO J=JSTA,JEND - DO I=1,IM + DO I=ISTA,IEND if(T1D(I,J)/=spval.and.U10H(I,J)/=spval.and.V10H(I,J)0) THEN ! DO J=JSTA,JEND -! DO I=1,IM +! DO I=ISTA,IEND ! GRID1(I,J)=PSHLTR(I,J) ! ENDDO ! ENDDO if(grib=='grib2') then cfld=cfld+1 fld_info(cfld)%ifld=IAVBLFLD(IGET(138)) -!$omp parallel do private(i,j,jj) +!$omp parallel do private(i,j,ii,jj) do j=1,jend-jsta+1 jj = jsta+j-1 - do i=1,im - datapd(i,j,cfld) = PSHLTR(i,jj) + do i=1,iend-ista+1 + ii = ista+i-1 + datapd(i,j,cfld) = PSHLTR(ii,jj) enddo enddo endif @@ -1563,7 +1865,7 @@ SUBROUTINE SURFCE ! SHELTER LEVEL MAX TEMPERATURE. IF (IGET(345)>0) THEN ! DO J=JSTA,JEND -! DO I=1,IM +! DO I=ISTA,IEND ! GRID1(I,J)=MAXTSHLTR(I,J) ! ENDDO ! ENDDO @@ -1597,11 +1899,12 @@ SUBROUTINE SURFCE endif fld_info(cfld)%tinvstat=IFHR-ID(18) if(IFHR==0) fld_info(cfld)%tinvstat=0 -!$omp parallel do private(i,j,jj) +!$omp parallel do private(i,j,ii,jj) do j=1,jend-jsta+1 jj = jsta+j-1 - do i=1,im - datapd(i,j,cfld) = MAXTSHLTR(i,jj) + do i=1,iend-ista+1 + ii = ista+i-1 + datapd(i,j,cfld) = MAXTSHLTR(ii,jj) enddo enddo endif @@ -1611,7 +1914,7 @@ SUBROUTINE SURFCE IF (IGET(346)>0) THEN !!$omp parallel do private(i,j) ! DO J=JSTA,JEND -! DO I=1,IM +! DO I=ISTA,IEND ! GRID1(I,J) = MINTSHLTR(I,J) ! ENDDO ! ENDDO @@ -1643,11 +1946,12 @@ SUBROUTINE SURFCE endif fld_info(cfld)%tinvstat=IFHR-ID(18) if(IFHR==0) fld_info(cfld)%tinvstat=0 -!$omp parallel do private(i,j,jj) +!$omp parallel do private(i,j,ii,jj) do j=1,jend-jsta+1 jj = jsta+j-1 - do i=1,im - datapd(i,j,cfld) = MINTSHLTR(i,jj) + do i=1,iend-ista+1 + ii = ista+i-1 + datapd(i,j,cfld) = MINTSHLTR(ii,jj) enddo enddo endif @@ -1657,7 +1961,7 @@ SUBROUTINE SURFCE IF (IGET(347)>0) THEN GRID1=SPVAL DO J=JSTA,JEND - DO I=1,IM + DO I=ISTA,IEND if(MAXRHSHLTR(I,J)/=spval) GRID1(I,J)=MAXRHSHLTR(I,J)*100. ENDDO ENDDO @@ -1695,11 +1999,12 @@ SUBROUTINE SURFCE if(IFHR==0) fld_info(cfld)%tinvstat=0 ! print*,'id(18),tinvstat,IFHR,ITMAXMIN in rhmax= ',ID(18),fld_info(cfld)%tinvstat, & ! IFHR, ITMAXMIN -!$omp parallel do private(i,j,jj) +!$omp parallel do private(i,j,ii,jj) do j=1,jend-jsta+1 jj = jsta+j-1 - do i=1,im - datapd(i,j,cfld) = GRID1(i,jj) + do i=1,iend-ista+1 + ii = ista+i-1 + datapd(i,j,cfld) = GRID1(ii,jj) enddo enddo endif @@ -1709,7 +2014,7 @@ SUBROUTINE SURFCE IF (IGET(348)>0) THEN GRID1=SPVAL DO J=JSTA,JEND - DO I=1,IM + DO I=ISTA,IEND if(MINRHSHLTR(I,J)/=spval) GRID1(I,J)=MINRHSHLTR(I,J)*100. ENDDO ENDDO @@ -1745,11 +2050,12 @@ SUBROUTINE SURFCE ! fld_info(cfld)%tinvstat=ITMAXMIN fld_info(cfld)%tinvstat=IFHR-ID(18) if(IFHR==0) fld_info(cfld)%tinvstat=0 -!$omp parallel do private(i,j,jj) +!$omp parallel do private(i,j,ii,jj) do j=1,jend-jsta+1 jj = jsta+j-1 - do i=1,im - datapd(i,j,cfld) = GRID1(i,jj) + do i=1,iend-ista+1 + ii = ista+i-1 + datapd(i,j,cfld) = GRID1(ii,jj) enddo enddo endif @@ -1785,11 +2091,12 @@ SUBROUTINE SURFCE fld_info(cfld)%ntrange=1 endif fld_info(cfld)%tinvstat=IFHR-ID(18) -!$omp parallel do private(i,j,jj) +!$omp parallel do private(i,j,ii,jj) do j=1,jend-jsta+1 jj = jsta+j-1 - do i=1,im - datapd(i,j,cfld) = maxqshltr(i,jj) + do i=1,iend-ista+1 + ii = ista+i-1 + datapd(i,j,cfld) = maxqshltr(ii,jj) enddo enddo endif @@ -1824,11 +2131,12 @@ SUBROUTINE SURFCE fld_info(cfld)%ntrange=1 endif fld_info(cfld)%tinvstat=IFHR-ID(18) -!$omp parallel do private(i,j,jj) +!$omp parallel do private(i,j,ii,jj) do j=1,jend-jsta+1 jj = jsta+j-1 - do i=1,im - datapd(i,j,cfld) = minqshltr(i,jj) + do i=1,iend-ista+1 + ii = ista+i-1 + datapd(i,j,cfld) = minqshltr(ii,jj) enddo enddo endif @@ -1839,18 +2147,36 @@ SUBROUTINE SURFCE IF (IGET(739)>0) THEN GRID1=SPVAL DO J=JSTA,JEND - DO I=1,IM + DO I=ISTA,IEND if(T(I,J,LM)/=spval.and.PMID(I,J,LM)/=spval.and.SMOKE(I,J,LM,1)/=spval)& - GRID1(I,J) = (1./RD)*(PMID(I,J,LM)/T(I,J,LM))*SMOKE(I,J,LM,1) + GRID1(I,J) = (1./RD)*(PMID(I,J,LM)/T(I,J,LM))*SMOKE(I,J,LM,1)/(1E9) ENDDO ENDDO if(grib=='grib2') then cfld=cfld+1 fld_info(cfld)%ifld=IAVBLFLD(IGET(739)) - datapd(1:im,1:jend-jsta+1,cfld) = GRID1(1:im,jsta:jend) + datapd(1:iend-ista+1,1:jend-jsta+1,cfld) = GRID1(ista:iend,jsta:jend) + endif + ENDIF +! +! E. James - 14 Sep 2022: DUST from RRFS on lowest model level +! + IF (IGET(744)>0) THEN + GRID1=SPVAL + DO J=JSTA,JEND + DO I=ISTA,IEND + if(T(I,J,LM)/=spval.and.PMID(I,J,LM)/=spval.and.FV3DUST(I,J,LM,1)/=spval)& + GRID1(I,J) = (1./RD)*(PMID(I,J,LM)/T(I,J,LM))*FV3DUST(I,J,LM,1)/(1E9) + ENDDO + ENDDO + if(grib=='grib2') then + cfld=cfld+1 + fld_info(cfld)%ifld=IAVBLFLD(IGET(744)) + datapd(1:iend-ista+1,1:jend-jsta+1,cfld) = GRID1(ista:iend,jsta:jend) endif ENDIF ! +! ! BLOCK 3. ANEMOMETER LEVEL (10M) WINDS, THETA, AND Q. ! IF ( (IGET(064)>0).OR.(IGET(065)>0).OR. & @@ -1860,7 +2186,7 @@ SUBROUTINE SURFCE IF ((IGET(064)>0).OR.(IGET(065)>0)) THEN !$omp parallel do private(i,j) DO J=JSTA,JEND - DO I=1,IM + DO I=ISTA,IEND GRID1(I,J) = U10(I,J) GRID2(I,J) = V10(I,J) ENDDO @@ -1868,20 +2194,22 @@ SUBROUTINE SURFCE if(grib=='grib2') then cfld=cfld+1 fld_info(cfld)%ifld=IAVBLFLD(IGET(064)) -!$omp parallel do private(i,j,jj) +!$omp parallel do private(i,j,ii,jj) do j=1,jend-jsta+1 jj = jsta+j-1 - do i=1,im - datapd(i,j,cfld) = GRID1(i,jj) + do i=1,iend-ista+1 + ii = ista+i-1 + datapd(i,j,cfld) = GRID1(ii,jj) enddo enddo cfld=cfld+1 fld_info(cfld)%ifld=IAVBLFLD(IGET(065)) -!$omp parallel do private(i,j,jj) +!$omp parallel do private(i,j,ii,jj) do j=1,jend-jsta+1 jj = jsta+j-1 - do i=1,im - datapd(i,j,cfld) = GRID2(i,jj) + do i=1,iend-ista+1 + ii = ista+i-1 + datapd(i,j,cfld) = GRID2(ii,jj) enddo enddo endif @@ -1890,7 +2218,7 @@ SUBROUTINE SURFCE IF (IGET(730)>0) THEN IFINCR = 5 DO J=JSTA,JEND - DO I=1,IM + DO I=ISTA,IEND GRID1(I,J)=SPDUV10MEAN(I,J) ENDDO ENDDO @@ -1906,7 +2234,7 @@ SUBROUTINE SURFCE endif fld_info(cfld)%ntrange=1 end if - datapd(1:im,1:jend-jsta+1,cfld)=GRID1(1:im,jsta:jend) + datapd(1:iend-ista+1,1:jend-jsta+1,cfld)=GRID1(ista:iend,jsta:jend) endif ENDIF !--- @@ -1914,7 +2242,7 @@ SUBROUTINE SURFCE IF (IGET(731)>0) THEN IFINCR = 5 DO J=JSTA,JEND - DO I=1,IM + DO I=ISTA,IEND GRID1(I,J)=U10MEAN(I,J) ENDDO ENDDO @@ -1929,14 +2257,14 @@ SUBROUTINE SURFCE endif fld_info(cfld)%ntrange=1 end if - datapd(1:im,1:jend-jsta+1,cfld)=GRID1(1:im,jsta:jend) + datapd(1:iend-ista+1,1:jend-jsta+1,cfld)=GRID1(ista:iend,jsta:jend) endif ENDIF ! GSD - Time-averaged V wind speed (forecast time labels will all be in minutes) IF (IGET(732)>0) THEN IFINCR = 5 DO J=JSTA,JEND - DO I=1,IM + DO I=ISTA,IEND GRID1(I,J)=V10MEAN(I,J) ENDDO ENDDO @@ -1951,14 +2279,14 @@ SUBROUTINE SURFCE endif fld_info(cfld)%ntrange=1 end if - datapd(1:im,1:jend-jsta+1,cfld)=GRID1(1:im,jsta:jend) + datapd(1:iend-ista+1,1:jend-jsta+1,cfld)=GRID1(ista:iend,jsta:jend) endif ENDIF ! Time-averaged SWDOWN (forecast time labels will all be in minutes) IF (IGET(733)>0 )THEN IFINCR = 15 DO J=JSTA,JEND - DO I=1,IM + DO I=ISTA,IEND GRID1(I,J) = SWRADMEAN(I,J) ENDDO ENDDO @@ -1973,14 +2301,14 @@ SUBROUTINE SURFCE endif fld_info(cfld)%ntrange=1 end if - datapd(1:im,1:jend-jsta+1,cfld)=GRID1(1:im,jsta:jend) + datapd(1:iend-ista+1,1:jend-jsta+1,cfld)=GRID1(ista:iend,jsta:jend) endif ENDIF ! Time-averaged SWNORM (forecast time labels will all be in minutes) IF (IGET(734)>0 )THEN IFINCR = 15 DO J=JSTA,JEND - DO I=1,IM + DO I=ISTA,IEND GRID1(I,J) = SWNORMMEAN(I,J) ENDDO ENDDO @@ -1995,7 +2323,7 @@ SUBROUTINE SURFCE endif fld_info(cfld)%ntrange=1 endif - datapd(1:im,1:jend-jsta+1,cfld)=GRID1(1:im,jsta:jend) + datapd(1:iend-ista+1,1:jend-jsta+1,cfld)=GRID1(ista:iend,jsta:jend) endif ENDIF ! @@ -2010,32 +2338,43 @@ SUBROUTINE SURFCE ENDIF !$omp parallel do private(i,j) DO J=JSTA,JEND - DO I=1,IM + DO I=ISTA,IEND GRID1(I,J) = U10MAX(I,J) GRID2(I,J) = V10MAX(I,J) ENDDO ENDDO + ITSRFC = NINT(TSRFC) if(grib=='grib2') then cfld=cfld+1 fld_info(cfld)%ifld=IAVBLFLD(IGET(506)) - fld_info(cfld)%ntrange=IFHR-ID(18) - fld_info(cfld)%tinvstat=1 -!$omp parallel do private(i,j,jj) + if(ITSRFC>0) then + fld_info(cfld)%ntrange=1 + else + fld_info(cfld)%ntrange=0 + endif + fld_info(cfld)%tinvstat=IFHR-ID(18) +!$omp parallel do private(i,j,ii,jj) do j=1,jend-jsta+1 jj = jsta+j-1 - do i=1,im - datapd(i,j,cfld) = GRID1(i,jj) + do i=1,iend-ista+1 + ii = ista+i-1 + datapd(i,j,cfld) = GRID1(ii,jj) enddo enddo cfld=cfld+1 fld_info(cfld)%ifld=IAVBLFLD(IGET(507)) - fld_info(cfld)%ntrange=IFHR-ID(18) - fld_info(cfld)%tinvstat=1 -!$omp parallel do private(i,j,jj) + if(ITSRFC>0) then + fld_info(cfld)%ntrange=1 + else + fld_info(cfld)%ntrange=0 + endif + fld_info(cfld)%tinvstat=IFHR-ID(18) +!$omp parallel do private(i,j,ii,jj) do j=1,jend-jsta+1 jj = jsta+j-1 - do i=1,im - datapd(i,j,cfld) = GRID2(i,jj) + do i=1,iend-ista+1 + ii = ista+i-1 + datapd(i,j,cfld) = GRID2(ii,jj) enddo enddo endif @@ -2048,18 +2387,19 @@ SUBROUTINE SURFCE IF (IGET(158)>0) THEN !$omp parallel do private(i,j) DO J=JSTA,JEND - DO I=1,IM + DO I=ISTA,IEND GRID1(I,J)=TH10(I,J) ENDDO ENDDO if(grib=='grib2') then cfld=cfld+1 fld_info(cfld)%ifld=IAVBLFLD(IGET(158)) -!$omp parallel do private(i,j,jj) +!$omp parallel do private(i,j,ii,jj) do j=1,jend-jsta+1 jj = jsta+j-1 - do i=1,im - datapd(i,j,cfld) = GRID1(i,jj) + do i=1,iend-ista+1 + ii = ista+i-1 + datapd(i,j,cfld) = GRID1(ii,jj) enddo enddo endif @@ -2070,18 +2410,19 @@ SUBROUTINE SURFCE IF (IGET(505)>0) THEN !$omp parallel do private(i,j) DO J=JSTA,JEND - DO I=1,IM + DO I=ISTA,IEND GRID1(I,J)=T10M(I,J) ENDDO ENDDO if(grib=='grib2') then cfld=cfld+1 fld_info(cfld)%ifld=IAVBLFLD(IGET(505)) -!$omp parallel do private(i,j,jj) +!$omp parallel do private(i,j,ii,jj) do j=1,jend-jsta+1 jj = jsta+j-1 - do i=1,im - datapd(i,j,cfld) = GRID1(i,jj) + do i=1,iend-ista+1 + ii = ista+i-1 + datapd(i,j,cfld) = GRID1(ii,jj) enddo enddo endif @@ -2092,18 +2433,19 @@ SUBROUTINE SURFCE IF (IGET(159)>0) THEN !$omp parallel do private(i,j) DO J=JSTA,JEND - DO I=1,IM + DO I=ISTA,IEND GRID1(I,J) = Q10(I,J) ENDDO ENDDO if(grib=='grib2') then cfld=cfld+1 fld_info(cfld)%ifld=IAVBLFLD(IGET(159)) -!$omp parallel do private(i,j,jj) +!$omp parallel do private(i,j,ii,jj) do j=1,jend-jsta+1 jj = jsta+j-1 - do i=1,im - datapd(i,j,cfld) = GRID1(i,jj) + do i=1,iend-ista+1 + ii = ista+i-1 + datapd(i,j,cfld) = GRID1(ii,jj) enddo enddo endif @@ -2116,7 +2458,7 @@ SUBROUTINE SURFCE IF (IGET(422)>0) THEN !$omp parallel do private(i,j) DO J=JSTA,JEND - DO I=1,IM + DO I=ISTA,IEND GRID1(I,J) = WSPD10MAX(I,J) ENDDO ENDDO @@ -2129,11 +2471,12 @@ SUBROUTINE SURFCE fld_info(cfld)%tinvstat=1 endif fld_info(cfld)%ntrange=1 -!$omp parallel do private(i,j,jj) +!$omp parallel do private(i,j,ii,jj) do j=1,jend-jsta+1 jj = jsta+j-1 - do i=1,im - datapd(i,j,cfld) = GRID1(i,jj) + do i=1,iend-ista+1 + ii = ista+i-1 + datapd(i,j,cfld) = GRID1(ii,jj) enddo enddo endif @@ -2144,7 +2487,7 @@ SUBROUTINE SURFCE IF (IGET(783)>0) THEN !$omp parallel do private(i,j) DO J=JSTA,JEND - DO I=1,IM + DO I=ISTA,IEND GRID1(I,J) = WSPD10UMAX(I,J) ENDDO ENDDO @@ -2157,11 +2500,12 @@ SUBROUTINE SURFCE fld_info(cfld)%tinvstat=1 endif fld_info(cfld)%ntrange=1 -!$omp parallel do private(i,j,jj) +!$omp parallel do private(i,j,ii,jj) do j=1,jend-jsta+1 jj = jsta+j-1 - do i=1,im - datapd(i,j,cfld) = GRID1(i,jj) + do i=1,iend-ista+1 + ii = ista+i-1 + datapd(i,j,cfld) = GRID1(ii,jj) enddo enddo endif @@ -2172,7 +2516,7 @@ SUBROUTINE SURFCE IF (IGET(784)>0) THEN !$omp parallel do private(i,j) DO J=JSTA,JEND - DO I=1,IM + DO I=ISTA,IEND GRID1(I,J) = WSPD10VMAX(I,J) ENDDO ENDDO @@ -2185,10 +2529,11 @@ SUBROUTINE SURFCE fld_info(cfld)%tinvstat=1 endif fld_info(cfld)%ntrange=1 -!$omp parallel do private(i,j,jj) +!$omp parallel do private(i,j,ii,jj) do j=1,jend-jsta+1 jj = jsta+j-1 - do i=1,im + do i=1,iend-ista+1 + ii = ista+i-1 datapd(i,j,cfld) = GRID1(i,jj) enddo enddo @@ -2203,10 +2548,10 @@ SUBROUTINE SURFCE ! IF (IGET(588)>0) THEN - CALL CALVESSEL(ICEG(1,jsta)) + CALL CALVESSEL(ICEG(ista:iend,jsta:jend)) DO J=JSTA,JEND - DO I=1,IM + DO I=ISTA,IEND GRID1(I,J) = ICEG(I,J) ENDDO ENDDO @@ -2221,11 +2566,12 @@ SUBROUTINE SURFCE endif fld_info(cfld)%ntrange=1 -!$omp parallel do private(i,j,jj) +!$omp parallel do private(i,j,ii,jj) do j=1,jend-jsta+1 jj = jsta+j-1 - do i=1,im - datapd(i,j,cfld) = GRID1(i,jj) + do i=1,iend-ista+1 + ii = ista+i-1 + datapd(i,j,cfld) = GRID1(ii,jj) enddo enddo endif @@ -2251,7 +2597,7 @@ SUBROUTINE SURFCE IF (IGET(172)>0) THEN !$omp parallel do private(i,j) DO J=JSTA,JEND - DO I=1,IM + DO I=ISTA,IEND IF (PREC(I,J) <= PTHRESH .OR. SR(I,J)==spval) THEN GRID1(I,J) = -50. ELSE @@ -2262,11 +2608,12 @@ SUBROUTINE SURFCE if(grib=='grib2') then cfld=cfld+1 fld_info(cfld)%ifld=IAVBLFLD(IGET(172)) -!$omp parallel do private(i,j,jj) +!$omp parallel do private(i,j,ii,jj) do j=1,jend-jsta+1 jj = jsta+j-1 - do i=1,im - datapd(i,j,cfld) = GRID1(i,jj) + do i=1,iend-ista+1 + ii = ista+i-1 + datapd(i,j,cfld) = GRID1(ii,jj) enddo enddo endif @@ -2280,7 +2627,7 @@ SUBROUTINE SURFCE GRID1=SPVAL !$omp parallel do private(i,j) DO J=JSTA,JEND - DO I=1,IM + DO I=ISTA,IEND if(CPRATE(I,J)/=spval) GRID1(I,J) = CPRATE(I,J)*RDTPHS ! GRID1(I,J) = CUPPT(I,J)*RDTPHS ENDDO @@ -2288,11 +2635,12 @@ SUBROUTINE SURFCE if(grib=='grib2') then cfld=cfld+1 fld_info(cfld)%ifld=IAVBLFLD(IGET(249)) -!$omp parallel do private(i,j,jj) +!$omp parallel do private(i,j,ii,jj) do j=1,jend-jsta+1 jj = jsta+j-1 - do i=1,im - datapd(i,j,cfld) = GRID1(i,jj) + do i=1,iend-ista+1 + ii = ista+i-1 + datapd(i,j,cfld) = GRID1(ii,jj) enddo enddo endif @@ -2306,7 +2654,7 @@ SUBROUTINE SURFCE GRID1=SPVAL !$omp parallel do private(i,j) DO J=JSTA,JEND - DO I=1,IM + DO I=ISTA,IEND if(PREC(I,J)/=spval) then IF(MODELNAME /= 'RSM') THEN GRID1(I,J) = PREC(I,J)*RDTPHS*1000. @@ -2319,11 +2667,12 @@ SUBROUTINE SURFCE if(grib=='grib2') then cfld=cfld+1 fld_info(cfld)%ifld=IAVBLFLD(IGET(167)) -!$omp parallel do private(i,j,jj) +!$omp parallel do private(i,j,ii,jj) do j=1,jend-jsta+1 jj = jsta+j-1 - do i=1,im - datapd(i,j,cfld) = GRID1(i,jj) + do i=1,iend-ista+1 + ii = ista+i-1 + datapd(i,j,cfld) = GRID1(ii,jj) enddo enddo endif @@ -2334,7 +2683,7 @@ SUBROUTINE SURFCE !-- PRATE_MAX in units of mm/h from NMMB history files GRID1=SPVAL DO J=JSTA,JEND - DO I=1,IM + DO I=ISTA,IEND if(PRATE_MAX(I,J)/=spval) GRID1(I,J)=PRATE_MAX(I,J)*SEC2HR ENDDO ENDDO @@ -2348,11 +2697,12 @@ SUBROUTINE SURFCE else fld_info(cfld)%ntrange=0 endif -!$omp parallel do private(i,j,jj) +!$omp parallel do private(i,j,ii,jj) do j=1,jend-jsta+1 jj = jsta+j-1 - do i=1,im - datapd(i,j,cfld) = GRID1(i,jj) + do i=1,iend-ista+1 + ii = ista+i-1 + datapd(i,j,cfld) = GRID1(ii,jj) enddo enddo endif @@ -2363,7 +2713,7 @@ SUBROUTINE SURFCE !-- FPRATE_MAX in units of mm/h from NMMB history files GRID1=SPVAL DO J=JSTA,JEND - DO I=1,IM + DO I=ISTA,IEND if(FPRATE_MAX(I,J)/=spval) GRID1(I,J)=FPRATE_MAX(I,J)*SEC2HR ENDDO ENDDO @@ -2377,11 +2727,12 @@ SUBROUTINE SURFCE else fld_info(cfld)%ntrange=0 endif -!$omp parallel do private(i,j,jj) +!$omp parallel do private(i,j,ii,jj) do j=1,jend-jsta+1 jj = jsta+j-1 - do i=1,im - datapd(i,j,cfld) = GRID1(i,jj) + do i=1,iend-ista+1 + ii = ista+i-1 + datapd(i,j,cfld) = GRID1(ii,jj) enddo enddo endif @@ -2414,7 +2765,7 @@ SUBROUTINE SURFCE grid1=spval !$omp parallel do private(i,j) DO J=JSTA,JEND - DO I=1,IM + DO I=ISTA,IEND if(AVGCPRATE(I,J)/=spval) GRID1(I,J) = AVGCPRATE(I,J)*RDTPHS ENDDO ENDDO @@ -2433,11 +2784,12 @@ SUBROUTINE SURFCE endif fld_info(cfld)%tinvstat=IFHR-ID(18) -!$omp parallel do private(i,j,jj) +!$omp parallel do private(i,j,ii,jj) do j=1,jend-jsta+1 jj = jsta+j-1 - do i=1,im - datapd(i,j,cfld) = GRID1(i,jj) + do i=1,iend-ista+1 + ii = ista+i-1 + datapd(i,j,cfld) = GRID1(ii,jj) enddo enddo endif @@ -2471,7 +2823,7 @@ SUBROUTINE SURFCE grid1=spval !$omp parallel do private(i,j) DO J=JSTA,JEND - DO I=1,IM + DO I=ISTA,IEND if(avgprec(i,j)/=spval) GRID1(I,J) = AVGPREC(I,J)*RDTPHS ENDDO ENDDO @@ -2487,11 +2839,12 @@ SUBROUTINE SURFCE endif fld_info(cfld)%tinvstat=IFHR-ID(18) -!$omp parallel do private(i,j,jj) +!$omp parallel do private(i,j,ii,jj) do j=1,jend-jsta+1 jj = jsta+j-1 - do i=1,im - datapd(i,j,cfld) = GRID1(i,jj) + do i=1,iend-ista+1 + ii = ista+i-1 + datapd(i,j,cfld) = GRID1(ii,jj) enddo enddo endif @@ -2522,7 +2875,7 @@ SUBROUTINE SURFCE IF(MODELNAME == 'GFS' .OR. MODELNAME == 'FV3R') THEN !$omp parallel do private(i,j) DO J=JSTA,JEND - DO I=1,IM + DO I=ISTA,IEND IF(AVGPREC(I,J) < SPVAL)THEN GRID1(I,J) = AVGPREC(I,J)*FLOAT(ID(19)-ID(18))*3600.*1000./DTQ2 ELSE @@ -2532,7 +2885,7 @@ SUBROUTINE SURFCE ENDDO !! Chuang 3/29/2018: add continuous bucket ! DO J=JSTA,JEND -! DO I=1,IM +! DO I=ISTA,IEND ! IF(AVGPREC_CONT(I,J) < SPVAL)THEN ! GRID2(I,J) = AVGPREC_CONT(I,J)*FLOAT(IFHR)*3600.*1000./DTQ2 ! ELSE @@ -2543,7 +2896,7 @@ SUBROUTINE SURFCE ELSE !$omp parallel do private(i,j) DO J=JSTA,JEND - DO I=1,IM + DO I=ISTA,IEND IF(ACPREC(I,J) < SPVAL)THEN GRID1(I,J) = ACPREC(I,J)*1000. ELSE @@ -2565,11 +2918,12 @@ SUBROUTINE SURFCE fld_info(cfld)%ntrange=1 fld_info(cfld)%tinvstat=IFHR-ID(18) ! print*,'id(18),tinvstat in apcp= ',ID(18),fld_info(cfld)%tinvstat -!$omp parallel do private(i,j,jj) +!$omp parallel do private(i,j,ii,jj) do j=1,jend-jsta+1 jj = jsta+j-1 - do i=1,im - datapd(i,j,cfld) = GRID1(i,jj) + do i=1,iend-ista+1 + ii = ista+i-1 + datapd(i,j,cfld) = GRID1(ii,jj) enddo enddo !! add continuous bucket @@ -2616,7 +2970,7 @@ SUBROUTINE SURFCE ! Chuang 3/29/2018: add continuous bucket !$omp parallel do private(i,j) DO J=JSTA,JEND - DO I=1,IM + DO I=ISTA,IEND IF(AVGPREC_CONT(I,J) < SPVAL)THEN GRID2(I,J) = AVGPREC_CONT(I,J)*FLOAT(IFHR)*3600.*1000./DTQ2 ELSE @@ -2634,11 +2988,12 @@ SUBROUTINE SURFCE fld_info(cfld)%ntrange=1 fld_info(cfld)%tinvstat=IFHR ! print*,'tinvstat in cont bucket= ',fld_info(cfld)%tinvstat -!$omp parallel do private(i,j,jj) +!$omp parallel do private(i,j,ii,jj) do j=1,jend-jsta+1 jj = jsta+j-1 - do i=1,im - datapd(i,j,cfld) = GRID2(i,jj) + do i=1,iend-ista+1 + ii = ista+i-1 + datapd(i,j,cfld) = GRID2(ii,jj) enddo enddo endif @@ -2671,7 +3026,7 @@ SUBROUTINE SURFCE IF(MODELNAME == 'GFS' .OR. MODELNAME == 'FV3R') THEN !$omp parallel do private(i,j) DO J=JSTA,JEND - DO I=1,IM + DO I=ISTA,IEND IF(AVGCPRATE(I,J) < SPVAL)THEN GRID1(I,J) = AVGCPRATE(I,J)* & FLOAT(ID(19)-ID(18))*3600.*1000./DTQ2 @@ -2682,7 +3037,7 @@ SUBROUTINE SURFCE ENDDO !! Chuang 3/29/2018: add continuous bucket ! DO J=JSTA,JEND -! DO I=1,IM +! DO I=ISTA,IEND ! IF(AVGCPRATE_CONT(I,J) < SPVAL)THEN ! GRID2(I,J) = AVGCPRATE_CONT(I,J)*FLOAT(IFHR)*3600.*1000./DTQ2 ! ELSE @@ -2693,7 +3048,7 @@ SUBROUTINE SURFCE ELSE !$omp parallel do private(i,j) DO J=JSTA,JEND - DO I=1,IM + DO I=ISTA,IEND IF(CUPREC(I,J) < SPVAL)THEN GRID1(I,J) = CUPREC(I,J)*1000. ELSE @@ -2708,11 +3063,12 @@ SUBROUTINE SURFCE fld_info(cfld)%ifld=IAVBLFLD(IGET(033)) fld_info(cfld)%ntrange=1 fld_info(cfld)%tinvstat=IFHR-ID(18) -!$omp parallel do private(i,j,jj) +!$omp parallel do private(i,j,ii,jj) do j=1,jend-jsta+1 jj = jsta+j-1 - do i=1,im - datapd(i,j,cfld) = GRID1(i,jj) + do i=1,iend-ista+1 + ii = ista+i-1 + datapd(i,j,cfld) = GRID1(ii,jj) enddo enddo !! add continuous bucket @@ -2758,7 +3114,7 @@ SUBROUTINE SURFCE ! Chuang 3/29/2018: add continuous bucket !$omp parallel do private(i,j) DO J=JSTA,JEND - DO I=1,IM + DO I=ISTA,IEND IF(AVGCPRATE_CONT(I,J) < SPVAL)THEN GRID2(I,J) = AVGCPRATE_CONT(I,J)*FLOAT(IFHR)*3600.*1000./DTQ2 ELSE @@ -2775,11 +3131,12 @@ SUBROUTINE SURFCE fld_info(cfld)%ifld=IAVBLFLD(IGET(418)) fld_info(cfld)%ntrange=1 fld_info(cfld)%tinvstat=IFHR -!$omp parallel do private(i,j,jj) +!$omp parallel do private(i,j,ii,jj) do j=1,jend-jsta+1 jj = jsta+j-1 - do i=1,im - datapd(i,j,cfld) = GRID2(i,jj) + do i=1,iend-ista+1 + ii = ista+i-1 + datapd(i,j,cfld) = GRID2(ii,jj) enddo enddo endif @@ -2813,7 +3170,7 @@ SUBROUTINE SURFCE IF(MODELNAME == 'GFS' .OR. MODELNAME == 'FV3R') THEN !$omp parallel do private(i,j) DO J=JSTA,JEND - DO I=1,IM + DO I=ISTA,IEND IF(AVGCPRATE(I,J) < SPVAL .AND. AVGPREC(I,J) < SPVAL) then GRID1(I,J) = ( AVGPREC(I,J) - AVGCPRATE(I,J) ) * & FLOAT(ID(19)-ID(18))*3600.*1000./DTQ2 @@ -2824,7 +3181,7 @@ SUBROUTINE SURFCE ENDDO !! Chuang 3/29/2018: add continuous bucket ! DO J=JSTA,JEND -! DO I=1,IM +! DO I=ISTA,IEND ! IF(AVGCPRATE_CONT(I,J) < SPVAL .AND. AVGPREC_CONT(I,J) < SPVAL)THEN ! GRID2(I,J) = (AVGPREC_CONT(I,J) - AVGCPRATE_CONT(I,J)) & ! *FLOAT(IFHR)*3600.*1000./DTQ2 @@ -2836,7 +3193,7 @@ SUBROUTINE SURFCE ELSE !$omp parallel do private(i,j) DO J=JSTA,JEND - DO I=1,IM + DO I=ISTA,IEND GRID1(I,J) = ANCPRC(I,J)*1000. ENDDO ENDDO @@ -2847,11 +3204,12 @@ SUBROUTINE SURFCE fld_info(cfld)%ifld=IAVBLFLD(IGET(034)) fld_info(cfld)%ntrange=1 fld_info(cfld)%tinvstat=IFHR-ID(18) -!$omp parallel do private(i,j,jj) +!$omp parallel do private(i,j,ii,jj) do j=1,jend-jsta+1 jj = jsta+j-1 - do i=1,im - datapd(i,j,cfld) = GRID1(i,jj) + do i=1,iend-ista+1 + ii = ista+i-1 + datapd(i,j,cfld) = GRID1(ii,jj) enddo enddo !! add continuous bucket @@ -2862,8 +3220,9 @@ SUBROUTINE SURFCE ! fld_info(cfld)%tinvstat=IFHR ! do j=1,jend-jsta+1 ! jj = jsta+j-1 -! do i=1,im -! datapd(i,j,cfld) = GRID2(i,jj) +! do i=1,iend-ista+1 +! ii = ista+1-1 +! datapd(i,j,cfld) = GRID2(ii,jj) ! enddo ! enddo ! endif @@ -2897,7 +3256,7 @@ SUBROUTINE SURFCE ! Chuang 3/29/2018: add continuous bucket !$omp parallel do private(i,j) DO J=JSTA,JEND - DO I=1,IM + DO I=ISTA,IEND IF(AVGCPRATE_CONT(I,J) < SPVAL .AND. AVGPREC_CONT(I,J) < SPVAL)THEN GRID2(I,J) = (AVGPREC_CONT(I,J) - AVGCPRATE_CONT(I,J)) & *FLOAT(IFHR)*3600.*1000./DTQ2 @@ -2915,11 +3274,12 @@ SUBROUTINE SURFCE fld_info(cfld)%ifld=IAVBLFLD(IGET(419)) fld_info(cfld)%ntrange=1 fld_info(cfld)%tinvstat=IFHR -!$omp parallel do private(i,j,jj) +!$omp parallel do private(i,j,ii,jj) do j=1,jend-jsta+1 jj = jsta+j-1 - do i=1,im - datapd(i,j,cfld) = GRID2(i,jj) + do i=1,iend-ista+1 + ii = ista+i-1 + datapd(i,j,cfld) = GRID2(ii,jj) enddo enddo endif @@ -2931,7 +3291,7 @@ SUBROUTINE SURFCE GRID1=SPVAL !$omp parallel do private(i,j) DO J=JSTA,JEND - DO I=1,IM + DO I=ISTA,IEND IF(LSPA(I,J)<=-1.0E-6)THEN if(ACPREC(I,J)/=spval) GRID1(I,J) = ACPREC(I,J)*1000 ELSE @@ -2966,11 +3326,12 @@ SUBROUTINE SURFCE fld_info(cfld)%ifld=IAVBLFLD(IGET(256)) fld_info(cfld)%ntrange=1 fld_info(cfld)%tinvstat=IFHR-ID(18) -!$omp parallel do private(i,j,jj) +!$omp parallel do private(i,j,ii,jj) do j=1,jend-jsta+1 jj = jsta+j-1 - do i=1,im - datapd(i,j,cfld) = GRID1(i,jj) + do i=1,iend-ista+1 + ii = ista+i-1 + datapd(i,j,cfld) = GRID1(ii,jj) enddo enddo endif @@ -2980,7 +3341,7 @@ SUBROUTINE SURFCE IF (IGET(035)>0) THEN !$omp parallel do private(i,j) DO J=JSTA,JEND - DO I=1,IM + DO I=ISTA,IEND ! GRID1(I,J) = ACSNOW(I,J)*1000. GRID1(I,J) = ACSNOW(I,J) ENDDO @@ -3010,12 +3371,13 @@ SUBROUTINE SURFCE cfld=cfld+1 fld_info(cfld)%ifld=IAVBLFLD(IGET(035)) fld_info(cfld)%ntrange=1 - fld_info(cfld)%tinvstat=IFHR-ID(18) -!$omp parallel do private(i,j,jj) + fld_info(cfld)%tinvstat=IFHR +!$omp parallel do private(i,j,ii,jj) do j=1,jend-jsta+1 jj = jsta+j-1 - do i=1,im - datapd(i,j,cfld) = GRID1(i,jj) + do i=1,iend-ista+1 + ii = ista+i-1 + datapd(i,j,cfld) = GRID1(ii,jj) enddo enddo endif @@ -3025,7 +3387,7 @@ SUBROUTINE SURFCE IF (IGET(746)>0) THEN !$omp parallel do private(i,j) DO J=JSTA,JEND - DO I=1,IM + DO I=ISTA,IEND GRID1(I,J) = ACGRAUP(I,J) ENDDO ENDDO @@ -3055,11 +3417,13 @@ SUBROUTINE SURFCE fld_info(cfld)%ifld=IAVBLFLD(IGET(746)) fld_info(cfld)%ntrange=1 fld_info(cfld)%tinvstat=IFHR-ID(18) -!$omp parallel do private(i,j,jj) + if(MODELNAME=='FV3R' .OR. MODELNAME=='GFS')fld_info(cfld)%tinvstat=IFHR +!$omp parallel do private(i,j,ii,jj) do j=1,jend-jsta+1 jj = jsta+j-1 - do i=1,im - datapd(i,j,cfld) = GRID1(i,jj) + do i=1,iend-ista+1 + ii = ista+i-1 + datapd(i,j,cfld) = GRID1(ii,jj) enddo enddo endif @@ -3069,7 +3433,7 @@ SUBROUTINE SURFCE IF (IGET(782)>0) THEN !$omp parallel do private(i,j) DO J=JSTA,JEND - DO I=1,IM + DO I=ISTA,IEND GRID1(I,J) = ACFRAIN(I,J) ENDDO ENDDO @@ -3099,21 +3463,71 @@ SUBROUTINE SURFCE fld_info(cfld)%ifld=IAVBLFLD(IGET(782)) fld_info(cfld)%ntrange=1 fld_info(cfld)%tinvstat=IFHR-ID(18) -!$omp parallel do private(i,j,jj) + if(MODELNAME=='FV3R' .OR. MODELNAME=='GFS')fld_info(cfld)%tinvstat=IFHR +!$omp parallel do private(i,j,ii,jj) do j=1,jend-jsta+1 jj = jsta+j-1 - do i=1,im - datapd(i,j,cfld) = GRID1(i,jj) + do i=1,iend-ista+1 + ii = ista+i-1 + datapd(i,j,cfld) = GRID1(ii,jj) enddo enddo endif ENDIF + +! ACCUMULATED SNOWFALL. + IF (IGET(1004)>0) THEN +!$omp parallel do private(i,j) + DO J=JSTA,JEND + DO I=ISTA,IEND + GRID1(I,J) = SNOW_ACM(I,J) + ENDDO + ENDDO + ID(1:25) = 0 + ITPREC = NINT(TPREC) +!mp + if (ITPREC /= 0) then + IFINCR = MOD(IFHR,ITPREC) + IF(IFMIN >= 1)IFINCR= MOD(IFHR*60+IFMIN,ITPREC*60) + else + IFINCR = 0 + endif +!mp + ID(18) = 0 + ID(19) = IFHR + IF(IFMIN >= 1)ID(19)=IFHR*60+IFMIN + ID(20) = 4 + IF (IFINCR==0) THEN + ID(18) = IFHR-ITPREC + ELSE + ID(18) = IFHR-IFINCR + IF(IFMIN >= 1)ID(18)=IFHR*60+IFMIN-IFINCR + ENDIF + IF (ID(18)<0) ID(18) = 0 + if(grib=='grib2') then + cfld=cfld+1 + fld_info(cfld)%ifld=IAVBLFLD(IGET(1004)) + fld_info(cfld)%ntrange=1 + fld_info(cfld)%tinvstat=IFHR-ID(18) + if(MODELNAME=='FV3R' .or. MODELNAME=='GFS')fld_info(cfld)%tinvstat=IFHR +! print*,'id(18),tinvstat in acgraup= ',ID(18),fld_info(cfld)%tinvstat +!$omp parallel do private(i,j,ii,jj) + do j=1,jend-jsta+1 + jj = jsta+j-1 + do i=1,iend-ista+1 + ii = ista+i-1 + datapd(i,j,cfld) = GRID1(ii,jj) + enddo + enddo + endif + ENDIF + ! ! ACCUMULATED SNOW MELT. IF (IGET(121)>0) THEN !$omp parallel do private(i,j) DO J=JSTA,JEND - DO I=1,IM + DO I=ISTA,IEND ! GRID1(I,J) = ACSNOM(I,J)*1000. GRID1(I,J) = ACSNOM(I,J) ENDDO @@ -3144,11 +3558,12 @@ SUBROUTINE SURFCE fld_info(cfld)%ifld=IAVBLFLD(IGET(121)) fld_info(cfld)%ntrange=1 fld_info(cfld)%tinvstat=IFHR-ID(18) -!$omp parallel do private(i,j,jj) +!$omp parallel do private(i,j,ii,jj) do j=1,jend-jsta+1 jj = jsta+j-1 - do i=1,im - datapd(i,j,cfld) = GRID1(i,jj) + do i=1,iend-ista+1 + ii = ista+i-1 + datapd(i,j,cfld) = GRID1(ii,jj) enddo enddo endif @@ -3158,7 +3573,7 @@ SUBROUTINE SURFCE IF (IGET(405)>0) THEN !$omp parallel do private(i,j) DO J=JSTA,JEND - DO I=1,IM + DO I=ISTA,IEND GRID1(I,J) = SNOWFALL(I,J) ENDDO ENDDO @@ -3189,11 +3604,12 @@ SUBROUTINE SURFCE fld_info(cfld)%ifld=IAVBLFLD(IGET(405)) fld_info(cfld)%ntrange=1 fld_info(cfld)%tinvstat=IFHR-ID(18) -!$omp parallel do private(i,j,jj) +!$omp parallel do private(i,j,ii,jj) do j=1,jend-jsta+1 jj = jsta+j-1 - do i=1,im - datapd(i,j,cfld) = GRID1(i,jj) + do i=1,iend-ista+1 + ii = ista+i-1 + datapd(i,j,cfld) = GRID1(ii,jj) enddo enddo endif @@ -3203,7 +3619,7 @@ SUBROUTINE SURFCE IF (IGET(122)>0) THEN !$omp parallel do private(i,j) DO J=JSTA,JEND - DO I=1,IM + DO I=ISTA,IEND ! GRID1(I,J) = SSROFF(I,J)*1000. GRID1(I,J) = SSROFF(I,J) ENDDO @@ -3242,11 +3658,12 @@ SUBROUTINE SURFCE fld_info(cfld)%ifld=IAVBLFLD(IGET(122)) fld_info(cfld)%ntrange=1 fld_info(cfld)%tinvstat=IFHR-ID(18) -!$omp parallel do private(i,j,jj) +!$omp parallel do private(i,j,ii,jj) do j=1,jend-jsta+1 jj = jsta+j-1 - do i=1,im - datapd(i,j,cfld) = GRID1(i,jj) + do i=1,iend-ista+1 + ii = ista+i-1 + datapd(i,j,cfld) = GRID1(ii,jj) enddo enddo endif @@ -3256,7 +3673,7 @@ SUBROUTINE SURFCE IF (IGET(123)>0) THEN !$omp parallel do private(i,j) DO J=JSTA,JEND - DO I=1,IM + DO I=ISTA,IEND ! GRID1(I,J) = BGROFF(I,J)*1000. GRID1(I,J) = BGROFF(I,J) ENDDO @@ -3295,11 +3712,12 @@ SUBROUTINE SURFCE fld_info(cfld)%ifld=IAVBLFLD(IGET(123)) fld_info(cfld)%ntrange=1 fld_info(cfld)%tinvstat=IFHR-ID(18) -!$omp parallel do private(i,j,jj) +!$omp parallel do private(i,j,ii,jj) do j=1,jend-jsta+1 jj = jsta+j-1 - do i=1,im - datapd(i,j,cfld) = GRID1(i,jj) + do i=1,iend-ista+1 + ii = ista+i-1 + datapd(i,j,cfld) = GRID1(ii,jj) enddo enddo endif @@ -3309,7 +3727,7 @@ SUBROUTINE SURFCE IF (IGET(343)>0) THEN !$omp parallel do private(i,j) DO J=JSTA,JEND - DO I=1,IM + DO I=ISTA,IEND GRID1(I,J) = RUNOFF(I,J) ENDDO ENDDO @@ -3342,11 +3760,12 @@ SUBROUTINE SURFCE fld_info(cfld)%ifld=IAVBLFLD(IGET(343)) fld_info(cfld)%ntrange=1 fld_info(cfld)%tinvstat=IFHR-ID(18) -!$omp parallel do private(i,j,jj) +!$omp parallel do private(i,j,ii,jj) do j=1,jend-jsta+1 jj = jsta+j-1 - do i=1,im - datapd(i,j,cfld) = GRID1(i,jj) + do i=1,iend-ista+1 + ii = ista+i-1 + datapd(i,j,cfld) = GRID1(ii,jj) enddo enddo endif @@ -3354,17 +3773,22 @@ SUBROUTINE SURFCE ! PRECIPITATION BUCKETS - accumulated between output times ! 'BUCKET TOTAL PRECIP ' - IF (IGET(434)>0.) THEN + NEED_IFI = IGET(1007)>0 .or. IGET(1008)>0 .or. IGET(1009)>0 .or. IGET(1010)>0 + IF (IGET(434)>0. .or. NEED_IFI) THEN !$omp parallel do private(i,j) DO J=JSTA,JEND - DO I=1,IM + DO I=ISTA,IEND IF (IFHR == 0) THEN - GRID1(I,J) = 0.0 + IFI_APCP(I,J) = 0.0 ELSE - GRID1(I,J) = PCP_BUCKET(I,J) + IFI_APCP(I,J) = PCP_BUCKET(I,J) ENDIF ENDDO ENDDO + ! Note: IFI.F may replace IFI_APCP with other values where it is spval or 0 + ENDIF + + IF (IGET(434)>0.) THEN ID(1:25) = 0 ITPREC = NINT(TPREC) !mp @@ -3387,7 +3811,7 @@ SUBROUTINE SURFCE IF(IFMIN >= 1)ID(18)=IFHR*60+IFMIN-IFINCR ENDIF IF (ID(18)<0) ID(18) = 0 - if(grib=='grib2') then + if(grib=='grib2' .and. IGET(434)>0) then cfld=cfld+1 fld_info(cfld)%ifld=IAVBLFLD(IGET(434)) if(ITPREC>0) then @@ -3404,11 +3828,12 @@ SUBROUTINE SURFCE endif fld_info(cfld)%ntrange=1 end if -!$omp parallel do private(i,j,jj) +!$omp parallel do private(i,j,ii,jj) do j=1,jend-jsta+1 jj = jsta+j-1 - do i=1,im - datapd(i,j,cfld) = GRID1(i,jj) + do i=1,iend-ista+1 + ii = ista+i-1 + datapd(i,j,cfld) = IFI_APCP(ii,jj) enddo enddo endif @@ -3419,7 +3844,7 @@ SUBROUTINE SURFCE IF (IGET(435)>0.) THEN !$omp parallel do private(i,j) DO J=JSTA,JEND - DO I=1,IM + DO I=ISTA,IEND IF (IFHR == 0) THEN GRID1(I,J) = 0.0 ELSE @@ -3473,11 +3898,12 @@ SUBROUTINE SURFCE endif fld_info(cfld)%ntrange=1 end if -!$omp parallel do private(i,j,jj) +!$omp parallel do private(i,j,ii,jj) do j=1,jend-jsta+1 jj = jsta+j-1 - do i=1,im - datapd(i,j,cfld) = GRID1(i,jj) + do i=1,iend-ista+1 + ii = ista+i-1 + datapd(i,j,cfld) = GRID1(ii,jj) enddo enddo endif @@ -3487,7 +3913,7 @@ SUBROUTINE SURFCE IF (IGET(436)>0.) THEN !$omp parallel do private(i,j) DO J=JSTA,JEND - DO I=1,IM + DO I=ISTA,IEND IF (IFHR == 0) THEN GRID1(I,J) = 0.0 ELSE @@ -3534,11 +3960,12 @@ SUBROUTINE SURFCE endif fld_info(cfld)%ntrange=1 end if -!$omp parallel do private(i,j,jj) +!$omp parallel do private(i,j,ii,jj) do j=1,jend-jsta+1 jj = jsta+j-1 - do i=1,im - datapd(i,j,cfld) = GRID1(i,jj) + do i=1,iend-ista+1 + ii = ista+i-1 + datapd(i,j,cfld) = GRID1(ii,jj) enddo enddo endif @@ -3548,7 +3975,7 @@ SUBROUTINE SURFCE IF (IGET(437)>0.) THEN !$omp parallel do private(i,j) DO J=JSTA,JEND - DO I=1,IM + DO I=ISTA,IEND GRID1(I,J) = SNOW_BUCKET(I,J) ENDDO ENDDO @@ -3592,11 +4019,12 @@ SUBROUTINE SURFCE endif fld_info(cfld)%ntrange=1 end if -!$omp parallel do private(i,j,jj) +!$omp parallel do private(i,j,ii,jj) do j=1,jend-jsta+1 jj = jsta+j-1 - do i=1,im - datapd(i,j,cfld) = GRID1(i,jj) + do i=1,iend-ista+1 + ii = ista+i-1 + datapd(i,j,cfld) = GRID1(ii,jj) enddo enddo endif @@ -3606,7 +4034,7 @@ SUBROUTINE SURFCE IF (IGET(775)>0.) THEN !$omp parallel do private(i,j) DO J=JSTA,JEND - DO I=1,IM + DO I=ISTA,IEND GRID1(I,J) = GRAUP_BUCKET(I,J) ENDDO ENDDO @@ -3650,23 +4078,267 @@ SUBROUTINE SURFCE endif fld_info(cfld)%ntrange=1 end if -!$omp parallel do private(i,j,jj) + if(MODELNAME == 'GFS' .OR. MODELNAME == 'FV3R') then + fld_info(cfld)%ntrange=1 + fld_info(cfld)%tinvstat=IFHR-ID(18) + endif +!$omp parallel do private(i,j,ii,jj) + do j=1,jend-jsta+1 + jj = jsta+j-1 + do i=1,iend-ista+1 + ii = ista+i-1 + datapd(i,j,cfld) = GRID1(ii,jj) + enddo + enddo + endif + ENDIF + +! 'BUCKET FREEZING RAIN ' + IF (IGET(1003)>0.) THEN +!$omp parallel do private(i,j) + DO J=JSTA,JEND + DO I=ISTA,IEND + GRID1(I,J) = FRZRN_BUCKET(I,J) + ENDDO + ENDDO + ID(1:25) = 0 + ITPREC = NINT(TPREC) +!mp + if (ITPREC /= 0) then + IFINCR = MOD(IFHR,ITPREC) + IF(IFMIN >= 1)IFINCR= MOD(IFHR*60+IFMIN,ITPREC*60) + else + IFINCR = 0 + endif +!mp + ID(18) = 0 + ID(19) = IFHR + IF(IFMIN >= 1)ID(19)=IFHR*60+IFMIN + ID(20) = 4 + IF (IFINCR==0) THEN + ID(18) = IFHR-ITPREC + ELSE + ID(18) = IFHR-IFINCR + IF(IFMIN >= 1)ID(18)=IFHR*60+IFMIN-IFINCR + ENDIF + IF (ID(18)<0) ID(18) = 0 +! print*,'maxval BUCKET FREEZING RAIN: ', maxval(GRID1) + if(grib=='grib2') then + cfld=cfld+1 + fld_info(cfld)%ifld=IAVBLFLD(IGET(1003)) + fld_info(cfld)%ntrange=1 + fld_info(cfld)%tinvstat=IFHR-ID(18) +! if(ITPREC>0) then +! fld_info(cfld)%ntrange=(IFHR-ID(18))/ITPREC +! else +! fld_info(cfld)%ntrange=0 +! endif +! fld_info(cfld)%tinvstat=ITPREC +! if(fld_info(cfld)%ntrange==0) then +! if (ifhr==0) then +! fld_info(cfld)%tinvstat=0 +! else +! fld_info(cfld)%tinvstat=1 +! endif +! fld_info(cfld)%ntrange=1 +! end if +!$omp parallel do private(i,j,ii,jj) + do j=1,jend-jsta+1 + jj = jsta+j-1 + do i=1,iend-ista+1 + ii = ista+i-1 + datapd(i,j,cfld) = GRID1(ii,jj) + enddo + enddo + endif + ENDIF + +! 'BUCKET SNOWFALL ' + IF (IGET(1005)>0.) THEN +!$omp parallel do private(i,j) + DO J=JSTA,JEND + DO I=ISTA,IEND + GRID1(I,J) = SNOW_BKT(I,J) + ENDDO + ENDDO + ID(1:25) = 0 + ITPREC = NINT(TPREC) +!mp + if (ITPREC /= 0) then + IFINCR = MOD(IFHR,ITPREC) + IF(IFMIN >= 1)IFINCR= MOD(IFHR*60+IFMIN,ITPREC*60) + else + IFINCR = 0 + endif +!mp + ID(18) = 0 + ID(19) = IFHR + IF(IFMIN >= 1)ID(19)=IFHR*60+IFMIN + ID(20) = 4 + IF (IFINCR==0) THEN + ID(18) = IFHR-ITPREC + ELSE + ID(18) = IFHR-IFINCR + IF(IFMIN >= 1)ID(18)=IFHR*60+IFMIN-IFINCR + ENDIF + IF (ID(18)<0) ID(18) = 0 +! print*,'maxval BUCKET FREEZING RAIN: ', maxval(GRID1) + if(grib=='grib2') then + cfld=cfld+1 + fld_info(cfld)%ifld=IAVBLFLD(IGET(1005)) + fld_info(cfld)%ntrange=1 + fld_info(cfld)%tinvstat=IFHR-ID(18) +!$omp parallel do private(i,j,ii,jj) do j=1,jend-jsta+1 jj = jsta+j-1 - do i=1,im - datapd(i,j,cfld) = GRID1(i,jj) + do i=1,iend-ista+1 + ii = ista+i-1 + datapd(i,j,cfld) = GRID1(ii,jj) enddo enddo endif ENDIF + +! ERIC JAMES: 10 JUN 2021 -- adding precip comparison to FFG +! thresholds. 913 is for 1h QPF, 914 for run total QPF. + IF (IGET(913).GT.0) THEN + ffgfile='ffg_01h.grib2' + call qpf_comp(913,ffgfile,1) + ENDIF + IF (IGET(914).GT.0) THEN + IF (IFHR .EQ. 1) THEN + ffgfile='ffg_01h.grib2' + call qpf_comp(914,ffgfile,1) + ELSEIF (IFHR .EQ. 3) THEN + ffgfile='ffg_03h.grib2' + call qpf_comp(914,ffgfile,3) + ELSEIF (IFHR .EQ. 6) THEN + ffgfile='ffg_06h.grib2' + call qpf_comp(914,ffgfile,6) + ELSEIF (IFHR .EQ. 12) THEN + ffgfile='ffg_12h.grib2' + call qpf_comp(914,ffgfile,12) + ELSE + ffgfile='ffg_01h.grib2' + call qpf_comp(914,ffgfile,0) + ENDIF + ENDIF + +! ERIC JAMES: 8 OCT 2021 -- adding precip comparison to ARI +! thresholds. 915 is for 1h QPF, 916 for run total QPF. + + IF (IGET(915).GT.0) THEN + arifile='ari2y_01h.grib2' + call qpf_comp(915,arifile,1) + ENDIF + IF (IGET(916).GT.0) THEN + IF (IFHR .EQ. 1) THEN + arifile='ari2y_01h.grib2' + call qpf_comp(916,arifile,1) + ELSEIF (IFHR .EQ. 3) THEN + arifile='ari2y_03h.grib2' + call qpf_comp(916,arifile,3) + ELSEIF (IFHR .EQ. 6) THEN + arifile='ari2y_06h.grib2' + call qpf_comp(916,arifile,6) + ELSEIF (IFHR .EQ. 12) THEN + arifile='ari2y_12h.grib2' + call qpf_comp(916,arifile,12) + ELSEIF (IFHR .EQ. 24) THEN + arifile='ari2y_24h.grib2' + call qpf_comp(916,arifile,24) + ELSE + arifile='ari2y_01h.grib2' + call qpf_comp(916,arifile,0) + ENDIF + ENDIF + + IF (IGET(917).GT.0) THEN + arifile='ari5y_01h.grib2' + call qpf_comp(917,arifile,1) + ENDIF + IF (IGET(918).GT.0) THEN + IF (IFHR .EQ. 1) THEN + arifile='ari5y_01h.grib2' + call qpf_comp(918,arifile,1) + ELSEIF (IFHR .EQ. 3) THEN + arifile='ari5y_03h.grib2' + call qpf_comp(918,arifile,3) + ELSEIF (IFHR .EQ. 6) THEN + arifile='ari5y_06h.grib2' + call qpf_comp(918,arifile,6) + ELSEIF (IFHR .EQ. 12) THEN + arifile='ari5y_12h.grib2' + call qpf_comp(918,arifile,12) + ELSEIF (IFHR .EQ. 24) THEN + arifile='ari5y_24h.grib2' + call qpf_comp(918,arifile,24) + ELSE + arifile='ari5y_01h.grib2' + call qpf_comp(918,arifile,0) + ENDIF + ENDIF + + IF (IGET(919).GT.0) THEN + arifile='ari10y_01h.grib2' + call qpf_comp(919,arifile,1) + ENDIF + IF (IGET(920).GT.0) THEN + IF (IFHR .EQ. 1) THEN + arifile='ari10y_01h.grib2' + call qpf_comp(920,arifile,1) + ELSEIF (IFHR .EQ. 3) THEN + arifile='ari10y_03h.grib2' + call qpf_comp(920,arifile,3) + ELSEIF (IFHR .EQ. 6) THEN + arifile='ari10y_06h.grib2' + call qpf_comp(920,arifile,6) + ELSEIF (IFHR .EQ. 12) THEN + arifile='ari10y_12h.grib2' + call qpf_comp(920,arifile,12) + ELSEIF (IFHR .EQ. 24) THEN + arifile='ari10y_24h.grib2' + call qpf_comp(920,arifile,24) + ELSE + arifile='ari10y_01h.grib2' + call qpf_comp(920,arifile,0) + ENDIF + ENDIF + + IF (IGET(921).GT.0) THEN + arifile='ari100y_01h.grib2' + call qpf_comp(921,arifile,1) + ENDIF + IF (IGET(922).GT.0) THEN + IF (IFHR .EQ. 1) THEN + arifile='ari100y_01h.grib2' + call qpf_comp(922,arifile,1) + ELSEIF (IFHR .EQ. 3) THEN + arifile='ari100y_03h.grib2' + call qpf_comp(922,arifile,3) + ELSEIF (IFHR .EQ. 6) THEN + arifile='ari100y_06h.grib2' + call qpf_comp(922,arifile,6) + ELSEIF (IFHR .EQ. 12) THEN + arifile='ari100y_12h.grib2' + call qpf_comp(922,arifile,12) + ELSEIF (IFHR .EQ. 24) THEN + arifile='ari100y_24h.grib2' + call qpf_comp(922,arifile,24) + ELSE + arifile='ari100y_01h.grib2' + call qpf_comp(922,arifile,0) + ENDIF + ENDIF + ! ERIC JAMES: 10 APR 2019 -- adding 15min precip output for RAP/HRRR ! PRECIPITATION BUCKETS - accumulated between output times ! 'BUCKET1 TOTAL PRECIP ' IF (IGET(526)>0.) THEN !$omp parallel do private(i,j) DO J=JSTA,JEND - DO I=1,IM + DO I=ISTA,IEND IF (IFHR == 0 .AND. IFMIN == 0) THEN GRID1(I,J) = 0.0 ELSE @@ -3686,11 +4358,12 @@ SUBROUTINE SURFCE endif fld_info(cfld)%ntrange=1 end if -!$omp parallel do private(i,j,jj) +!$omp parallel do private(i,j,ii,jj) do j=1,jend-jsta+1 jj = jsta+j-1 - do i=1,im - datapd(i,j,cfld) = GRID1(i,jj) + do i=1,iend-ista+1 + ii = ista+i-1 + datapd(i,j,cfld) = GRID1(ii,jj) enddo enddo endif @@ -3699,7 +4372,7 @@ SUBROUTINE SURFCE IF (IGET(527)>0.) THEN !$omp parallel do private(i,j) DO J=JSTA,JEND - DO I=1,IM + DO I=ISTA,IEND IF (IFHR == 0 .AND. IFMIN == 0) THEN GRID1(I,J) = 0.0 ELSE @@ -3719,11 +4392,12 @@ SUBROUTINE SURFCE endif fld_info(cfld)%ntrange=1 end if -!$omp parallel do private(i,j,jj) +!$omp parallel do private(i,j,ii,jj) do j=1,jend-jsta+1 jj = jsta+j-1 - do i=1,im - datapd(i,j,cfld) = GRID1(i,jj) + do i=1,iend-ista+1 + ii = ista+i-1 + datapd(i,j,cfld) = GRID1(ii,jj) enddo enddo endif @@ -3732,7 +4406,7 @@ SUBROUTINE SURFCE IF (IGET(528)>0.) THEN !$omp parallel do private(i,j) DO J=JSTA,JEND - DO I=1,IM + DO I=ISTA,IEND IF (IFHR == 0 .AND. IFMIN == 0) THEN GRID1(I,J) = 0.0 ELSE @@ -3752,11 +4426,12 @@ SUBROUTINE SURFCE endif fld_info(cfld)%ntrange=1 end if -!$omp parallel do private(i,j,jj) +!$omp parallel do private(i,j,ii,jj) do j=1,jend-jsta+1 jj = jsta+j-1 - do i=1,im - datapd(i,j,cfld) = GRID1(i,jj) + do i=1,iend-ista+1 + ii = ista+i-1 + datapd(i,j,cfld) = GRID1(ii,jj) enddo enddo endif @@ -3765,7 +4440,7 @@ SUBROUTINE SURFCE IF (IGET(529)>0.) THEN !$omp parallel do private(i,j) DO J=JSTA,JEND - DO I=1,IM + DO I=ISTA,IEND IF (IFHR == 0 .AND. IFMIN == 0) THEN GRID1(I,J) = 0.0 ELSE @@ -3786,11 +4461,12 @@ SUBROUTINE SURFCE endif fld_info(cfld)%ntrange=1 end if -!$omp parallel do private(i,j,jj) +!$omp parallel do private(i,j,ii,jj) do j=1,jend-jsta+1 jj = jsta+j-1 - do i=1,im - datapd(i,j,cfld) = GRID1(i,jj) + do i=1,iend-ista+1 + ii = ista+i-1 + datapd(i,j,cfld) = GRID1(ii,jj) enddo enddo endif @@ -3799,7 +4475,7 @@ SUBROUTINE SURFCE IF (IGET(530)>0.) THEN !$omp parallel do private(i,j) DO J=JSTA,JEND - DO I=1,IM + DO I=ISTA,IEND IF (IFHR == 0 .AND. IFMIN == 0) THEN GRID1(I,J) = 0.0 ELSE @@ -3820,11 +4496,12 @@ SUBROUTINE SURFCE endif fld_info(cfld)%ntrange=1 end if -!$omp parallel do private(i,j,jj) +!$omp parallel do private(i,j,ii,jj) do j=1,jend-jsta+1 jj = jsta+j-1 - do i=1,im - datapd(i,j,cfld) = GRID1(i,jj) + do i=1,iend-ista+1 + ii = ista+i-1 + datapd(i,j,cfld) = GRID1(ii,jj) enddo enddo endif @@ -3834,9 +4511,9 @@ SUBROUTINE SURFCE ! print *,'in surfce,iget(160)=',iget(160),'iget(247)=',iget(247) IF (IGET(160)>0 .OR.(IGET(247)>0)) THEN - allocate(sleet(im,jsta:jend,nalg), rain(im,jsta:jend,nalg), & - freezr(im,jsta:jend,nalg), snow(im,jsta:jend,nalg)) - allocate(zwet(im,jsta:jend)) + allocate(sleet(ista:iend,jsta:jend,nalg), rain(ista:iend,jsta:jend,nalg), & + freezr(ista:iend,jsta:jend,nalg), snow(ista:iend,jsta:jend,nalg)) + allocate(zwet(ista:iend,jsta:jend)) CALL CALWXT_POST(T,Q,PMID,PINT,HTM,LMH,PREC,ZINT,IWX1,ZWET) ! write(0,*)' after first CALWXT_POST' @@ -3844,12 +4521,19 @@ SUBROUTINE SURFCE IF (IGET(160)>0) THEN !$omp parallel do private(i,j,iwx) DO J=JSTA,JEND - DO I=1,IM + DO I=ISTA,IEND + IF(ZWET(I,J)0) THEN DO J=JSTA,JEND - DO I=1,IM + DO I=ISTA,IEND GRID1(I,J) = ZWET(I,J) ENDDO ENDDO if(grib=='grib2') then cfld=cfld+1 fld_info(cfld)%ifld=IAVBLFLD(IGET(247)) -!$omp parallel do private(i,j,jj) +!$omp parallel do private(i,j,ii,jj) do j=1,jend-jsta+1 jj = jsta+j-1 - do i=1,im - datapd(i,j,cfld) = GRID1(i,jj) + do i=1,iend-ista+1 + ii = ista+i-1 + datapd(i,j,cfld) = GRID1(ii,jj) enddo enddo endif @@ -3888,7 +4573,7 @@ SUBROUTINE SURFCE ! !$omp parallel do private(i,j,iwx) DO J=JSTA,JEND - DO I=1,IM + DO I=ISTA,IEND IWX = IWX1(I,J) SNOW(I,J,2) = MOD(IWX,2) SLEET(I,J,2) = MOD(IWX,4)/2 @@ -3901,7 +4586,7 @@ SUBROUTINE SURFCE ISEED=44641*(INT(SDAT(1)-1)*24*31+INT(SDAT(2))*24+IHRST)+ & & MOD(IFHR*60+IFMIN,44641)+4357 ! write(0,*)'in SURFCE,me=',me,'bef 1st CALWXT_BOURG_POST iseed=',iseed - CALL CALWXT_BOURG_POST(IM,JM,JSTA_2L,JEND_2U,JSTA,JEND,LM,LP1,& + CALL CALWXT_BOURG_POST(IM,ISTA_2L,IEND_2U,ISTA,IEND,JM,JSTA_2L,JEND_2U,JSTA,JEND,LM,LP1,& & ISEED,G,PTHRESH, & & T,Q,PMID,PINT,LMH,PREC,ZINT,IWX1,me) ! write(0,*)'in SURFCE,me=',me,'aft 1st CALWXT_BOURG_POST' @@ -3911,7 +4596,7 @@ SUBROUTINE SURFCE ! !$omp parallel do private(i,j,iwx) DO J=JSTA,JEND - DO I=1,IM + DO I=ISTA,IEND IWX = IWX1(I,J) SNOW(I,J,3) = MOD(IWX,2) SLEET(I,J,3) = MOD(IWX,4)/2 @@ -3927,7 +4612,7 @@ SUBROUTINE SURFCE ! !$omp parallel do private(i,j,iwx) DO J=JSTA,JEND - DO I=1,IM + DO I=ISTA,IEND IWX = IWX1(I,J) SNOW(I,J,4) = MOD(IWX,2) SLEET(I,J,4) = MOD(IWX,4)/2 @@ -3943,7 +4628,7 @@ SUBROUTINE SURFCE else !$omp parallel do private(i,j) DO J=JSTA,JEND - DO I=1,IM + DO I=ISTA,IEND IWX1(I,J) = 0 ENDDO ENDDO @@ -3953,7 +4638,7 @@ SUBROUTINE SURFCE ! !$omp parallel do private(i,j,iwx) DO J=JSTA,JEND - DO I=1,IM + DO I=ISTA,IEND IWX = IWX1(I,J) SNOW(I,J,5) = MOD(IWX,2) SLEET(I,J,5) = MOD(IWX,4)/2 @@ -3962,27 +4647,28 @@ SUBROUTINE SURFCE ENDDO ENDDO - allocate(domr(im,jsta:jend), doms(im,jsta:jend), & - domzr(im,jsta:jend), domip(im,jsta:jend)) - CALL CALWXT_DOMINANT_POST(PREC(1,jsta_2l),RAIN,FREEZR,SLEET,SNOW, & + allocate(domr(ista:iend,jsta:jend), doms(ista:iend,jsta:jend), & + domzr(ista:iend,jsta:jend), domip(ista:iend,jsta:jend)) + CALL CALWXT_DOMINANT_POST(PREC(ista_2l,jsta_2l),RAIN,FREEZR,SLEET,SNOW, & DOMR,DOMZR,DOMIP,DOMS) ! if ( me==0) print *,'after CALWXT_DOMINANT, no avrg' ! SNOW. grid1 = spval !$omp parallel do private(i,j) DO J=JSTA,JEND - DO I=1,IM + DO I=ISTA,IEND if(prec(i,j) /= spval) GRID1(I,J) = DOMS(I,J) ENDDO ENDDO if(grib=='grib2') then cfld=cfld+1 fld_info(cfld)%ifld=IAVBLFLD(IGET(551)) -!$omp parallel do private(i,j,jj) +!$omp parallel do private(i,j,ii,jj) do j=1,jend-jsta+1 jj = jsta+j-1 - do i=1,im - datapd(i,j,cfld) = GRID1(i,jj) + do i=1,iend-ista+1 + ii = ista+i-1 + datapd(i,j,cfld) = GRID1(ii,jj) enddo enddo endif @@ -3990,18 +4676,19 @@ SUBROUTINE SURFCE grid1=spval !$omp parallel do private(i,j) DO J=JSTA,JEND - DO I=1,IM + DO I=ISTA,IEND if(prec(i,j)/=spval) GRID1(I,J) = DOMIP(I,J) ENDDO ENDDO if(grib=='grib2') then cfld=cfld+1 fld_info(cfld)%ifld=IAVBLFLD(IGET(552)) -!$omp parallel do private(i,j,jj) +!$omp parallel do private(i,j,ii,jj) do j=1,jend-jsta+1 jj = jsta+j-1 - do i=1,im - datapd(i,j,cfld) = GRID1(i,jj) + do i=1,iend-ista+1 + ii = ista+i-1 + datapd(i,j,cfld) = GRID1(ii,jj) enddo enddo endif @@ -4009,7 +4696,7 @@ SUBROUTINE SURFCE grid1=spval !$omp parallel do private(i,j) DO J=JSTA,JEND - DO I=1,IM + DO I=ISTA,IEND ! if (DOMZR(I,J) == 1) THEN ! PSFC(I,J)=PINT(I,J,NINT(LMH(I,J))+1) ! print *, 'aha ', I, J, PSFC(I,J) @@ -4022,11 +4709,12 @@ SUBROUTINE SURFCE if(grib=='grib2') then cfld=cfld+1 fld_info(cfld)%ifld=IAVBLFLD(IGET(553)) -!$omp parallel do private(i,j,jj) +!$omp parallel do private(i,j,ii,jj) do j=1,jend-jsta+1 jj = jsta+j-1 - do i=1,im - datapd(i,j,cfld) = GRID1(i,jj) + do i=1,iend-ista+1 + ii = ista+i-1 + datapd(i,j,cfld) = GRID1(ii,jj) enddo enddo endif @@ -4034,18 +4722,19 @@ SUBROUTINE SURFCE grid1=spval !$omp parallel do private(i,j) DO J=JSTA,JEND - DO I=1,IM + DO I=ISTA,IEND if(prec(i,j)/=spval)GRID1(I,J) = DOMR(I,J) ENDDO ENDDO if(grib=='grib2') then cfld=cfld+1 fld_info(cfld)%ifld=IAVBLFLD(IGET(160)) -!$omp parallel do private(i,j,jj) +!$omp parallel do private(i,j,ii,jj) do j=1,jend-jsta+1 jj = jsta+j-1 - do i=1,im - datapd(i,j,cfld) = GRID1(i,jj) + do i=1,iend-ista+1 + ii = ista+i-1 + datapd(i,j,cfld) = GRID1(ii,jj) enddo enddo endif @@ -4055,26 +4744,33 @@ SUBROUTINE SURFCE ! TIME AVERAGED PRECIPITATION TYPE. IF (IGET(317)>0) THEN - if (.not. allocated(sleet)) allocate(sleet(im,jsta:jend,nalg)) - if (.not. allocated(rain)) allocate(rain(im,jsta:jend,nalg)) - if (.not. allocated(freezr)) allocate(freezr(im,jsta:jend,nalg)) - if (.not. allocated(snow)) allocate(snow(im,jsta:jend,nalg)) - if (.not. allocated(zwet)) allocate(zwet(im,jsta:jend)) + if (.not. allocated(sleet)) allocate(sleet(ista:iend,jsta:jend,nalg)) + if (.not. allocated(rain)) allocate(rain(ista:iend,jsta:jend,nalg)) + if (.not. allocated(freezr)) allocate(freezr(ista:iend,jsta:jend,nalg)) + if (.not. allocated(snow)) allocate(snow(ista:iend,jsta:jend,nalg)) + if (.not. allocated(zwet)) allocate(zwet(ista:iend,jsta:jend)) CALL CALWXT_POST(T,Q,PMID,PINT,HTM,LMH,AVGPREC,ZINT,IWX1,ZWET) - if (allocated(zwet)) deallocate(zwet) -! write(0,*)' after second CALWXT_POST me=',me -! print *,'in SURFCE,me=',me,'IWX1=',IWX1(1:30,JSTA) !$omp parallel do private(i,j,iwx) DO J=JSTA,JEND - DO I=1,IM + DO I=ISTA,IEND + IF(ZWET(I,J)0 .or. IGET(559)>0 .or. & IGET(560)>0 .or. IGET(561)>0) THEN - if (.not. allocated(domr)) allocate(domr(im,jsta:jend)) - if (.not. allocated(doms)) allocate(doms(im,jsta:jend)) - if (.not. allocated(domzr)) allocate(domzr(im,jsta:jend)) - if (.not. allocated(domip)) allocate(domip(im,jsta:jend)) + if (.not. allocated(domr)) allocate(domr(ista:iend,jsta:jend)) + if (.not. allocated(doms)) allocate(doms(ista:iend,jsta:jend)) + if (.not. allocated(domzr)) allocate(domzr(ista:iend,jsta:jend)) + if (.not. allocated(domip)) allocate(domip(ista:iend,jsta:jend)) !$omp parallel do private(i,j) DO J=JSTA,JEND - DO I=1,IM + DO I=ISTA,IEND DOMS(I,J) = 0. !-- snow DOMR(I,J) = 0. !-- rain DOMZR(I,J) = 0. !-- freezing rain @@ -4404,7 +5104,7 @@ SUBROUTINE SURFCE ENDDO DO J=JSTA,JEND - DO I=1,IM + DO I=ISTA,IEND !-- TOTPRCP is total 1-hour accumulated precipitation in [m] totprcp = (RAINC_BUCKET(I,J) + RAINNC_BUCKET(I,J))*1.e-3 snowratio = 0.0 @@ -4525,7 +5225,7 @@ SUBROUTINE SURFCE maxval(snow_bucket)*0.1,minval(snow_bucket)*0.1 DO J=JSTA,JEND - DO I=1,IM + DO I=ISTA,IEND do icat=1,10 if (snow_bucket(i,j)*0.1<0.1*float(icat).and. & snow_bucket(i,j)*0.1>0.1*float(icat-1)) then @@ -4542,7 +5242,7 @@ SUBROUTINE SURFCE icnt_snow_rain_mixed = 0 DO J=JSTA,JEND - DO I=1,IM + DO I=ISTA,IEND if (DOMR(i,j)==1 .and. DOMS(i,j)==1) then icnt_snow_rain_mixed = icnt_snow_rain_mixed + 1 endif @@ -4556,25 +5256,26 @@ SUBROUTINE SURFCE ! SNOW. !$omp parallel do private(i,j) DO J=JSTA,JEND - DO I=1,IM + DO I=ISTA,IEND GRID1(I,J)=DOMS(I,J) ENDDO ENDDO if(grib=='grib2') then cfld=cfld+1 fld_info(cfld)%ifld=IAVBLFLD(IGET(559)) -!$omp parallel do private(i,j,jj) +!$omp parallel do private(i,j,ii,jj) do j=1,jend-jsta+1 jj = jsta+j-1 - do i=1,im - datapd(i,j,cfld) = GRID1(i,jj) + do i=1,iend-ista+1 + ii = ista+i-1 + datapd(i,j,cfld) = GRID1(ii,jj) enddo enddo endif ! ICE PELLETS. !$omp parallel do private(i,j) DO J=JSTA,JEND - DO I=1,IM + DO I=ISTA,IEND GRID1(I,J) = DOMIP(I,J) ! if (DOMIP(I,J) == 1) THEN ! print *, 'ICE PELLETS at I,J ', I, J @@ -4584,18 +5285,19 @@ SUBROUTINE SURFCE if(grib=='grib2') then cfld=cfld+1 fld_info(cfld)%ifld=IAVBLFLD(IGET(560)) -!$omp parallel do private(i,j,jj) +!$omp parallel do private(i,j,ii,jj) do j=1,jend-jsta+1 jj = jsta+j-1 - do i=1,im - datapd(i,j,cfld) = GRID1(i,jj) + do i=1,iend-ista+1 + ii = ista+i-1 + datapd(i,j,cfld) = GRID1(ii,jj) enddo enddo endif ! FREEZING RAIN. !$omp parallel do private(i,j) DO J=JSTA,JEND - DO I=1,IM + DO I=ISTA,IEND ! if (DOMZR(I,J) == 1) THEN ! PSFC(I,J)=PINT(I,J,NINT(LMH(I,J))+1) ! print *, 'FREEZING RAIN AT I,J ', I, J, PSFC(I,J) @@ -4606,29 +5308,31 @@ SUBROUTINE SURFCE if(grib=='grib2') then cfld=cfld+1 fld_info(cfld)%ifld=IAVBLFLD(IGET(561)) -!$omp parallel do private(i,j,jj) +!$omp parallel do private(i,j,ii,jj) do j=1,jend-jsta+1 jj = jsta+j-1 - do i=1,im - datapd(i,j,cfld) = GRID1(i,jj) + do i=1,iend-ista+1 + ii = ista+i-1 + datapd(i,j,cfld) = GRID1(ii,jj) enddo enddo endif ! RAIN. !$omp parallel do private(i,j) DO J=JSTA,JEND - DO I=1,IM + DO I=ISTA,IEND GRID1(I,J) = DOMR(I,J) ENDDO ENDDO if(grib=='grib2') then cfld=cfld+1 fld_info(cfld)%ifld=IAVBLFLD(IGET(407)) -!$omp parallel do private(i,j,jj) +!$omp parallel do private(i,j,ii,jj) do j=1,jend-jsta+1 jj = jsta+j-1 - do i=1,im - datapd(i,j,cfld) = GRID1(i,jj) + do i=1,iend-ista+1 + ii = ista+i-1 + datapd(i,j,cfld) = GRID1(ii,jj) enddo enddo endif @@ -4657,7 +5361,7 @@ SUBROUTINE SURFCE RRNUM=0. ENDIF DO J=JSTA,JEND - DO I=1,IM + DO I=ISTA,IEND IF(SFCLHX(I,J)/=SPVAL)THEN GRID1(I,J)=-1.*SFCLHX(I,J)*RRNUM !change the sign to conform with Grib ELSE @@ -4692,7 +5396,7 @@ SUBROUTINE SURFCE fld_info(cfld)%ntrange=0 endif fld_info(cfld)%tinvstat=IFHR-ID(18) - datapd(1:im,1:jend-jsta+1,cfld)=GRID1(1:im,jsta:jend) + datapd(1:iend-ista+1,1:jend-jsta+1,cfld)=GRID1(ista:iend,jsta:jend) endif END IF ENDIF @@ -4710,7 +5414,7 @@ SUBROUTINE SURFCE RRNUM=0. ENDIF DO J=JSTA,JEND - DO I=1,IM + DO I=ISTA,IEND IF(SFCSHX(I,J)/=SPVAL)THEN GRID1(I,J) = -1.* SFCSHX(I,J)*RRNUM !change the sign to conform with Grib ELSE @@ -4746,7 +5450,7 @@ SUBROUTINE SURFCE fld_info(cfld)%ntrange=0 endif fld_info(cfld)%tinvstat=IFHR-ID(18) - datapd(1:im,1:jend-jsta+1,cfld)=GRID1(1:im,jsta:jend) + datapd(1:iend-ista+1,1:jend-jsta+1,cfld)=GRID1(ista:iend,jsta:jend) endif ENDIF ! @@ -4764,7 +5468,7 @@ SUBROUTINE SURFCE ENDIF GRID1=SPVAL DO J=JSTA,JEND - DO I=1,IM + DO I=ISTA,IEND if(SUBSHX(I,J)/=spval) GRID1(I,J) = SUBSHX(I,J)*RRNUM ENDDO ENDDO @@ -4796,7 +5500,7 @@ SUBROUTINE SURFCE fld_info(cfld)%ntrange=0 endif fld_info(cfld)%tinvstat=IFHR-ID(18) - datapd(1:im,1:jend-jsta+1,cfld)=GRID1(1:im,jsta:jend) + datapd(1:iend-ista+1,1:jend-jsta+1,cfld)=GRID1(ista:iend,jsta:jend) endif ENDIF ! @@ -4814,7 +5518,7 @@ SUBROUTINE SURFCE ENDIF GRID1=SPVAL DO J=JSTA,JEND - DO I=1,IM + DO I=ISTA,IEND if(SNOPCX(I,J)/=spval) GRID1(I,J) = SNOPCX(I,J)*RRNUM ENDDO ENDDO @@ -4846,7 +5550,7 @@ SUBROUTINE SURFCE fld_info(cfld)%ntrange=0 endif fld_info(cfld)%tinvstat=IFHR-ID(18) - datapd(1:im,1:jend-jsta+1,cfld)=GRID1(1:im,jsta:jend) + datapd(1:iend-ista+1,1:jend-jsta+1,cfld)=GRID1(ista:iend,jsta:jend) endif ENDIF ! @@ -4863,7 +5567,7 @@ SUBROUTINE SURFCE RRNUM=0. ENDIF DO J=JSTA,JEND - DO I=1,IM + DO I=ISTA,IEND IF(SFCUVX(I,J)/=SPVAL)THEN GRID1(I,J) = SFCUVX(I,J)*RRNUM ELSE @@ -4899,7 +5603,7 @@ SUBROUTINE SURFCE fld_info(cfld)%ntrange=0 endif fld_info(cfld)%tinvstat=IFHR-ID(18) - datapd(1:im,1:jend-jsta+1,cfld)=GRID1(1:im,jsta:jend) + datapd(1:iend-ista+1,1:jend-jsta+1,cfld)=GRID1(ista:iend,jsta:jend) endif ENDIF ! @@ -4917,7 +5621,7 @@ SUBROUTINE SURFCE ENDIF GRID1=SPVAL DO J=JSTA,JEND - DO I=1,IM + DO I=ISTA,IEND if(SFCUX(I,J)/=spval) GRID1(I,J) = SFCUX(I,J)*RRNUM ENDDO ENDDO @@ -4949,7 +5653,7 @@ SUBROUTINE SURFCE fld_info(cfld)%ntrange=0 endif fld_info(cfld)%tinvstat=IFHR-ID(18) - datapd(1:im,1:jend-jsta+1,cfld)=GRID1(1:im,jsta:jend) + datapd(1:iend-ista+1,1:jend-jsta+1,cfld)=GRID1(ista:iend,jsta:jend) endif ENDIF ! @@ -4967,7 +5671,7 @@ SUBROUTINE SURFCE ENDIF GRID1=SPVAL DO J=JSTA,JEND - DO I=1,IM + DO I=ISTA,IEND if(SFCVX(I,J)/=spval) GRID1(I,J) = SFCVX(I,J)*RRNUM ENDDO ENDDO @@ -4999,7 +5703,7 @@ SUBROUTINE SURFCE fld_info(cfld)%ntrange=0 endif fld_info(cfld)%tinvstat=IFHR-ID(18) - datapd(1:im,1:jend-jsta+1,cfld)=GRID1(1:im,jsta:jend) + datapd(1:iend-ista+1,1:jend-jsta+1,cfld)=GRID1(ista:iend,jsta:jend) endif ENDIF ! @@ -5007,7 +5711,7 @@ SUBROUTINE SURFCE IF (IGET(047)>0) THEN GRID1=SPVAL DO J=JSTA,JEND - DO I=1,IM + DO I=ISTA,IEND if(SFCEVP(I,J)/=spval) GRID1(I,J) = SFCEVP(I,J)*1000. ENDDO ENDDO @@ -5041,7 +5745,7 @@ SUBROUTINE SURFCE fld_info(cfld)%ntrange=0 endif fld_info(cfld)%tinvstat=IFHR-ID(18) - datapd(1:im,1:jend-jsta+1,cfld)=GRID1(1:im,jsta:jend) + datapd(1:iend-ista+1,1:jend-jsta+1,cfld)=GRID1(ista:iend,jsta:jend) endif ENDIF @@ -5050,7 +5754,7 @@ SUBROUTINE SURFCE IF (IGET(137)>0) THEN GRID1=SPVAL DO J=JSTA,JEND - DO I=1,IM + DO I=ISTA,IEND if(POTEVP(I,J)/=spval) GRID1(I,J) = POTEVP(I,J)*1000. ENDDO ENDDO @@ -5084,35 +5788,35 @@ SUBROUTINE SURFCE fld_info(cfld)%ntrange=0 endif fld_info(cfld)%tinvstat=IFHR-ID(18) - datapd(1:im,1:jend-jsta+1,cfld)=GRID1(1:im,jsta:jend) + datapd(1:iend-ista+1,1:jend-jsta+1,cfld)=GRID1(ista:iend,jsta:jend) endif ENDIF ! ! ROUGHNESS LENGTH. IF (IGET(044)>0) THEN DO J=JSTA,JEND - DO I=1,IM + DO I=ISTA,IEND GRID1(I,J) = Z0(I,J) ENDDO ENDDO if(grib=='grib2') then cfld=cfld+1 fld_info(cfld)%ifld=IAVBLFLD(IGET(044)) - datapd(1:im,1:jend-jsta+1,cfld)=GRID1(1:im,jsta:jend) + datapd(1:iend-ista+1,1:jend-jsta+1,cfld)=GRID1(ista:iend,jsta:jend) endif ENDIF ! ! FRICTION VELOCITY. IF (IGET(045)>0) THEN DO J=JSTA,JEND - DO I=1,IM + DO I=ISTA,IEND GRID1(I,J) = USTAR(I,J) ENDDO ENDDO if(grib=='grib2') then cfld=cfld+1 fld_info(cfld)%ifld=IAVBLFLD(IGET(045)) - datapd(1:im,1:jend-jsta+1,cfld)=GRID1(1:im,jsta:jend) + datapd(1:iend-ista+1,1:jend-jsta+1,cfld)=GRID1(ista:iend,jsta:jend) endif ENDIF ! @@ -5120,41 +5824,41 @@ SUBROUTINE SURFCE ! dong add missing value for cd IF (IGET(132)>0) THEN GRID1=spval - CALL CALDRG(EGRID1(1,jsta_2l)) + CALL CALDRG(EGRID1(ista_2l:iend_2u,jsta_2l:jend_2u)) DO J=JSTA,JEND - DO I=1,IM + DO I=ISTA,IEND IF(USTAR(I,J) < spval) GRID1(I,J)=EGRID1(I,J) ENDDO ENDDO if(grib=='grib2') then cfld=cfld+1 fld_info(cfld)%ifld=IAVBLFLD(IGET(132)) - datapd(1:im,1:jend-jsta+1,cfld)=GRID1(1:im,jsta:jend) + datapd(1:iend-ista+1,1:jend-jsta+1,cfld)=GRID1(ista:iend,jsta:jend) endif ENDIF - write_cd: IF(IGET(922)>0) THEN + write_cd: IF(IGET(924)>0) THEN DO J=JSTA,JEND - DO I=1,IM + DO I=ISTA,IEND GRID1(I,J)=CD10(I,J) ENDDO ENDDO if(grib=='grib2') then cfld=cfld+1 - fld_info(cfld)%ifld=IAVBLFLD(IGET(922)) - datapd(1:im,1:jend-jsta+1,cfld)=GRID1(1:im,jsta:jend) + fld_info(cfld)%ifld=IAVBLFLD(IGET(924)) + datapd(1:iend-ista+1,1:jend-jsta+1,cfld)=GRID1(ista:iend,jsta:jend) endif ENDIF write_cd write_ch: IF(IGET(923)>0) THEN DO J=JSTA,JEND - DO I=1,IM + DO I=ISTA,IEND GRID1(I,J)=CH10(I,J) ENDDO ENDDO if(grib=='grib2') then cfld=cfld+1 fld_info(cfld)%ifld=IAVBLFLD(IGET(923)) - datapd(1:im,1:jend-jsta+1,cfld)=GRID1(1:im,jsta:jend) + datapd(1:iend-ista+1,1:jend-jsta+1,cfld)=GRID1(ista:iend,jsta:jend) endif ENDIF write_ch ! @@ -5164,14 +5868,14 @@ SUBROUTINE SURFCE ! MODEL OUTPUT SURFACE U COMPONENT WIND STRESS. IF (IGET(900)>0) THEN DO J=JSTA,JEND - DO I=1,IM + DO I=ISTA,IEND GRID1(I,J)=MDLTAUX(I,J) ENDDO ENDDO if(grib=='grib2') then cfld=cfld+1 fld_info(cfld)%ifld=IAVBLFLD(IGET(900)) - datapd(1:im,1:jend-jsta+1,cfld)=GRID1(1:im,jsta:jend) + datapd(1:iend-ista+1,1:jend-jsta+1,cfld)=GRID1(ista:iend,jsta:jend) endif ENDIF @@ -5179,14 +5883,14 @@ SUBROUTINE SURFCE ! MODEL OUTPUT SURFACE V COMPONENT WIND STRESS IF (IGET(901)>0) THEN DO J=JSTA,JEND - DO I=1,IM + DO I=ISTA,IEND GRID1(I,J)=MDLTAUY(I,J) ENDDO ENDDO if(grib=='grib2') then cfld=cfld+1 fld_info(cfld)%ifld=IAVBLFLD(IGET(901)) - datapd(1:im,1:jend-jsta+1,cfld)=GRID1(1:im,jsta:jend) + datapd(1:iend-ista+1,1:jend-jsta+1,cfld)=GRID1(ista:iend,jsta:jend) endif ENDIF ENDIF @@ -5195,41 +5899,44 @@ SUBROUTINE SURFCE IF ( (IGET(133)>0) .OR. (IGET(134)>0) ) THEN ! dong add missing value GRID1 = spval - CALL CALTAU(EGRID1(1,jsta),EGRID2(1,jsta)) + IF(MODELNAME /= 'FV3R') & + CALL CALTAU(EGRID1(ista:iend,jsta:jend),EGRID2(ista:iend,jsta:jend)) ! ! SURFACE U COMPONENT WIND STRESS. ! dong for FV3, directly use model output IF (IGET(133)>0) THEN DO J=JSTA,JEND - DO I=1,IM - GRID1(I,J)=EGRID1(I,J) - IF(MODELNAME == 'FV3R') THEN - GRID1(I,J)=SFCUXI(I,J) - END IF + DO I=ISTA,IEND + IF(MODELNAME == 'FV3R') THEN + GRID1(I,J)=SFCUXI(I,J) + ELSE + GRID1(I,J)=EGRID1(I,J) + ENDIF ENDDO ENDDO ! if(grib=='grib2') then cfld=cfld+1 fld_info(cfld)%ifld=IAVBLFLD(IGET(133)) - datapd(1:im,1:jend-jsta+1,cfld)=GRID1(1:im,jsta:jend) + datapd(1:iend-ista+1,1:jend-jsta+1,cfld)=GRID1(ista:iend,jsta:jend) endif ENDIF ! ! SURFACE V COMPONENT WIND STRESS IF (IGET(134)>0) THEN DO J=JSTA,JEND - DO I=1,IM - GRID1(I,J)=EGRID2(I,J) - IF(MODELNAME == 'FV3R') THEN - GRID1(I,J)=SFCVXI(I,J) - END IF + DO I=ISTA,IEND + IF(MODELNAME == 'FV3R') THEN + GRID1(I,J)=SFCVXI(I,J) + ELSE + GRID1(I,J)=EGRID2(I,J) + END IF ENDDO ENDDO if(grib=='grib2') then cfld=cfld+1 fld_info(cfld)%ifld=IAVBLFLD(IGET(134)) - datapd(1:im,1:jend-jsta+1,cfld)=GRID1(1:im,jsta:jend) + datapd(1:iend-ista+1,1:jend-jsta+1,cfld)=GRID1(ista:iend,jsta:jend) endif ENDIF ENDIF @@ -5240,7 +5947,7 @@ SUBROUTINE SURFCE ! GRAVITY U COMPONENT WIND STRESS. IF (IGET(315)>0) THEN DO J=JSTA,JEND - DO I=1,IM + DO I=ISTA,IEND GRID1(I,J) = GTAUX(I,J) ENDDO ENDDO @@ -5271,14 +5978,14 @@ SUBROUTINE SURFCE fld_info(cfld)%ntrange=1 endif fld_info(cfld)%tinvstat=IFHR-ID(18) - datapd(1:im,1:jend-jsta+1,cfld)=GRID1(1:im,jsta:jend) + datapd(1:iend-ista+1,1:jend-jsta+1,cfld)=GRID1(ista:iend,jsta:jend) endif ENDIF ! ! SURFACE V COMPONENT WIND STRESS IF (IGET(316)>0) THEN DO J=JSTA,JEND - DO I=1,IM + DO I=ISTA,IEND GRID1(I,J)=GTAUY(I,J) ENDDO ENDDO @@ -5309,7 +6016,7 @@ SUBROUTINE SURFCE fld_info(cfld)%ntrange=1 endif fld_info(cfld)%tinvstat=IFHR-ID(18) - datapd(1:im,1:jend-jsta+1,cfld)=GRID1(1:im,jsta:jend) + datapd(1:iend-ista+1,1:jend-jsta+1,cfld)=GRID1(ista:iend,jsta:jend) endif ENDIF ENDIF @@ -5322,14 +6029,14 @@ SUBROUTINE SURFCE MODELNAME=='RAPR')THEN !4omp parallel do private(i,j) DO J=JSTA,JEND - DO I=1,IM + DO I=ISTA,IEND GRID1(I,J) = TWBS(I,J) ENDDO ENDDO ELSE !4omp parallel do private(i,j) DO J=JSTA,JEND - DO I=1,IM + DO I=ISTA,IEND IF(TWBS(I,J) < spval) GRID1(I,J) = -TWBS(I,J) ENDDO ENDDO @@ -5337,7 +6044,7 @@ SUBROUTINE SURFCE if(grib=='grib2') then cfld=cfld+1 fld_info(cfld)%ifld=IAVBLFLD(IGET(154)) - datapd(1:im,1:jend-jsta+1,cfld)=GRID1(1:im,jsta:jend) + datapd(1:iend-ista+1,1:jend-jsta+1,cfld)=GRID1(ista:iend,jsta:jend) endif ENDIF ! @@ -5349,14 +6056,14 @@ SUBROUTINE SURFCE MODELNAME=='RAPR')THEN !4omp parallel do private(i,j) DO J=JSTA,JEND - DO I=1,IM + DO I=ISTA,IEND GRID1(I,J) = QWBS(I,J) ENDDO ENDDO ELSE !4omp parallel do private(i,j) DO J=JSTA,JEND - DO I=1,IM + DO I=ISTA,IEND IF(QWBS(I,J) < spval) GRID1(I,J) = -QWBS(I,J) ENDDO ENDDO @@ -5364,21 +6071,21 @@ SUBROUTINE SURFCE if(grib=='grib2') then cfld=cfld+1 fld_info(cfld)%ifld=IAVBLFLD(IGET(155)) - datapd(1:im,1:jend-jsta+1,cfld)=GRID1(1:im,jsta:jend) + datapd(1:iend-ista+1,1:jend-jsta+1,cfld)=GRID1(ista:iend,jsta:jend) endif ENDIF ! ! SURFACE EXCHANGE COEFF IF (IGET(169)>0) THEN DO J=JSTA,JEND - DO I=1,IM + DO I=ISTA,IEND GRID1(I,J)=SFCEXC(I,J) ENDDO ENDDO if(grib=='grib2') then cfld=cfld+1 fld_info(cfld)%ifld=IAVBLFLD(IGET(169)) - datapd(1:im,1:jend-jsta+1,cfld)=GRID1(1:im,jsta:jend) + datapd(1:iend-ista+1,1:jend-jsta+1,cfld)=GRID1(ista:iend,jsta:jend) endif ENDIF ! @@ -5386,14 +6093,14 @@ SUBROUTINE SURFCE IF (IGET(170)>0) THEN GRID1=SPVAL DO J=JSTA,JEND - DO I=1,IM + DO I=ISTA,IEND if(VEGFRC(I,J)/=spval) GRID1(I,J)=VEGFRC(I,J)*100. ENDDO ENDDO if(grib=='grib2') then cfld=cfld+1 fld_info(cfld)%ifld=IAVBLFLD(IGET(170)) - datapd(1:im,1:jend-jsta+1,cfld)=GRID1(1:im,jsta:jend) + datapd(1:iend-ista+1,1:jend-jsta+1,cfld)=GRID1(ista:iend,jsta:jend) endif ENDIF @@ -5402,14 +6109,14 @@ SUBROUTINE SURFCE IF (IGET(726)>0) THEN GRID1=SPVAL DO J=JSTA,JEND - DO I=1,IM + DO I=ISTA,IEND if(shdmin(I,J)/=spval) GRID1(I,J)=shdmin(I,J)*100. ENDDO ENDDO if(grib=='grib2') then cfld=cfld+1 fld_info(cfld)%ifld=IAVBLFLD(IGET(726)) - datapd(1:im,1:jend-jsta+1,cfld)=GRID1(1:im,jsta:jend) + datapd(1:iend-ista+1,1:jend-jsta+1,cfld)=GRID1(ista:iend,jsta:jend) endif ENDIF ! @@ -5417,14 +6124,14 @@ SUBROUTINE SURFCE IF (IGET(729)>0) THEN GRID1=SPVAL DO J=JSTA,JEND - DO I=1,IM + DO I=ISTA,IEND if(shdmax(I,J)/=spval) GRID1(I,J)=shdmax(I,J)*100. ENDDO ENDDO if(grib=='grib2') then cfld=cfld+1 fld_info(cfld)%ifld=IAVBLFLD(IGET(729)) - datapd(1:im,1:jend-jsta+1,cfld)=GRID1(1:im,jsta:jend) + datapd(1:iend-ista+1,1:jend-jsta+1,cfld)=GRID1(ista:iend,jsta:jend) endif ENDIF ! @@ -5434,7 +6141,7 @@ SUBROUTINE SURFCE IF (iSF_SURFACE_PHYSICS == 2 .OR. MODELNAME=='RAPR') THEN IF (IGET(254)>0) THEN DO J=JSTA,JEND - DO I=1,IM + DO I=ISTA,IEND IF (MODELNAME=='RAPR')THEN GRID1(I,J)=LAI(I,J) ELSE @@ -5445,7 +6152,7 @@ SUBROUTINE SURFCE if(grib=='grib2') then cfld=cfld+1 fld_info(cfld)%ifld=IAVBLFLD(IGET(254)) - datapd(1:im,1:jend-jsta+1,cfld)=GRID1(1:im,jsta:jend) + datapd(1:iend-ista+1,1:jend-jsta+1,cfld)=GRID1(ista:iend,jsta:jend) endif ENDIF ENDIF @@ -5454,54 +6161,54 @@ SUBROUTINE SURFCE ! INSTANTANEOUS GROUND HEAT FLUX IF (IGET(152)>0) THEN DO J=JSTA,JEND - DO I=1,IM + DO I=ISTA,IEND GRID1(I,J)=GRNFLX(I,J) ENDDO ENDDO if(grib=='grib2') then cfld=cfld+1 fld_info(cfld)%ifld=IAVBLFLD(IGET(152)) - datapd(1:im,1:jend-jsta+1,cfld)=GRID1(1:im,jsta:jend) + datapd(1:iend-ista+1,1:jend-jsta+1,cfld)=GRID1(ista:iend,jsta:jend) endif ENDIF ! VEGETATION TYPE IF (IGET(218)>0) THEN DO J=JSTA,JEND - DO I=1,IM + DO I=ISTA,IEND GRID1(I,J) = FLOAT(IVGTYP(I,J)) ENDDO ENDDO if(grib=='grib2') then cfld=cfld+1 fld_info(cfld)%ifld=IAVBLFLD(IGET(218)) - datapd(1:im,1:jend-jsta+1,cfld)=GRID1(1:im,jsta:jend) + datapd(1:iend-ista+1,1:jend-jsta+1,cfld)=GRID1(ista:iend,jsta:jend) endif ENDIF ! ! SOIL TYPE IF (IGET(219)>0) THEN DO J=JSTA,JEND - DO I=1,IM + DO I=ISTA,IEND GRID1(I,J) = FLOAT(ISLTYP(I,J)) ENDDO ENDDO if(grib=='grib2') then cfld=cfld+1 fld_info(cfld)%ifld=IAVBLFLD(IGET(219)) - datapd(1:im,1:jend-jsta+1,cfld)=GRID1(1:im,jsta:jend) + datapd(1:iend-ista+1,1:jend-jsta+1,cfld)=GRID1(ista:iend,jsta:jend) endif ENDIF ! SLOPE TYPE IF (IGET(223)>0) THEN DO J=JSTA,JEND - DO I=1,IM + DO I=ISTA,IEND GRID1(I,J) = FLOAT(ISLOPE(I,J)) ENDDO ENDDO if(grib=='grib2') then cfld=cfld+1 fld_info(cfld)%ifld=IAVBLFLD(IGET(223)) - datapd(1:im,1:jend-jsta+1,cfld)=GRID1(1:im,jsta:jend) + datapd(1:iend-ista+1,1:jend-jsta+1,cfld)=GRID1(ista:iend,jsta:jend) endif ENDIF ! if (me==0)print*,'starting computing canopy conductance' @@ -5517,10 +6224,10 @@ SUBROUTINE SURFCE & .OR. IGET(241)>0 ) THEN IF (iSF_SURFACE_PHYSICS == 2) THEN !NSOIL == 4 ! if(me==0)print*,'starting computing canopy conductance' - allocate(rsmin(im,jsta:jend), smcref(im,jsta:jend), gc(im,jsta:jend), & - rcq(im,jsta:jend), rct(im,jsta:jend), rcsoil(im,jsta:jend), rcs(im,jsta:jend)) + allocate(rsmin(ista:iend,jsta:jend), smcref(ista:iend,jsta:jend), gc(ista:iend,jsta:jend), & + rcq(ista:iend,jsta:jend), rct(ista:iend,jsta:jend), rcsoil(ista:iend,jsta:jend), rcs(ista:iend,jsta:jend)) DO J=JSTA,JEND - DO I=1,IM + DO I=ISTA,IEND IF( (abs(SM(I,J)-0.) < 1.0E-5) .AND. & & (abs(SICE(I,J)-0.) < 1.0E-5) ) THEN IF(CZMEAN(I,J)>1.E-6) THEN @@ -5563,118 +6270,118 @@ SUBROUTINE SURFCE IF (IGET(220)>0 )THEN DO J=JSTA,JEND - DO I=1,IM + DO I=ISTA,IEND GRID1(I,J) = GC(I,J) ENDDO ENDDO if(grib=='grib2') then cfld=cfld+1 fld_info(cfld)%ifld=IAVBLFLD(IGET(220)) - datapd(1:im,1:jend-jsta+1,cfld)=GRID1(1:im,jsta:jend) + datapd(1:iend-ista+1,1:jend-jsta+1,cfld)=GRID1(ista:iend,jsta:jend) endif ENDIF IF (IGET(234)>0 )THEN DO J=JSTA,JEND - DO I=1,IM + DO I=ISTA,IEND GRID1(I,J) = RSMIN(I,J) ENDDO ENDDO if(grib=='grib2') then cfld=cfld+1 fld_info(cfld)%ifld=IAVBLFLD(IGET(234)) - datapd(1:im,1:jend-jsta+1,cfld)=GRID1(1:im,jsta:jend) + datapd(1:iend-ista+1,1:jend-jsta+1,cfld)=GRID1(ista:iend,jsta:jend) endif ENDIF IF (IGET(235)>0 )THEN DO J=JSTA,JEND - DO I=1,IM + DO I=ISTA,IEND GRID1(I,J) = FLOAT(NROOTS(I,J)) ENDDO ENDDO if(grib=='grib2') then cfld=cfld+1 fld_info(cfld)%ifld=IAVBLFLD(IGET(235)) - datapd(1:im,1:jend-jsta+1,cfld)=GRID1(1:im,jsta:jend) + datapd(1:iend-ista+1,1:jend-jsta+1,cfld)=GRID1(ista:iend,jsta:jend) endif ENDIF IF (IGET(236)>0 )THEN DO J=JSTA,JEND - DO I=1,IM + DO I=ISTA,IEND GRID1(I,J) = SMCWLT(I,J) ENDDO ENDDO if(grib=='grib2') then cfld=cfld+1 fld_info(cfld)%ifld=IAVBLFLD(IGET(236)) - datapd(1:im,1:jend-jsta+1,cfld)=GRID1(1:im,jsta:jend) + datapd(1:iend-ista+1,1:jend-jsta+1,cfld)=GRID1(ista:iend,jsta:jend) endif ENDIF IF (IGET(237)>0 )THEN DO J=JSTA,JEND - DO I=1,IM + DO I=ISTA,IEND GRID1(I,J) = SMCREF(I,J) ENDDO ENDDO if(grib=='grib2') then cfld=cfld+1 fld_info(cfld)%ifld=IAVBLFLD(IGET(237)) - datapd(1:im,1:jend-jsta+1,cfld)=GRID1(1:im,jsta:jend) + datapd(1:iend-ista+1,1:jend-jsta+1,cfld)=GRID1(ista:iend,jsta:jend) endif ENDIF IF (IGET(238)>0 )THEN DO J=JSTA,JEND - DO I=1,IM + DO I=ISTA,IEND GRID1(I,J) = RCS(I,J) ENDDO ENDDO if(grib=='grib2') then cfld=cfld+1 fld_info(cfld)%ifld=IAVBLFLD(IGET(238)) - datapd(1:im,1:jend-jsta+1,cfld)=GRID1(1:im,jsta:jend) + datapd(1:iend-ista+1,1:jend-jsta+1,cfld)=GRID1(ista:iend,jsta:jend) endif ENDIF IF (IGET(239)>0 )THEN DO J=JSTA,JEND - DO I=1,IM + DO I=ISTA,IEND GRID1(I,J) = RCT(I,J) ENDDO ENDDO if(grib=='grib2') then cfld=cfld+1 fld_info(cfld)%ifld=IAVBLFLD(IGET(239)) - datapd(1:im,1:jend-jsta+1,cfld)=GRID1(1:im,jsta:jend) + datapd(1:iend-ista+1,1:jend-jsta+1,cfld)=GRID1(ista:iend,jsta:jend) endif ENDIF IF (IGET(240)>0 )THEN DO J=JSTA,JEND - DO I=1,IM + DO I=ISTA,IEND GRID1(I,J) = RCQ(I,J) ENDDO ENDDO if(grib=='grib2') then cfld=cfld+1 fld_info(cfld)%ifld=IAVBLFLD(IGET(240)) - datapd(1:im,1:jend-jsta+1,cfld)=GRID1(1:im,jsta:jend) + datapd(1:iend-ista+1,1:jend-jsta+1,cfld)=GRID1(ista:iend,jsta:jend) endif ENDIF IF (IGET(241)>0 )THEN DO J=JSTA,JEND - DO I=1,IM + DO I=ISTA,IEND GRID1(I,J) = RCSOIL(I,J) ENDDO ENDDO if(grib=='grib2') then cfld=cfld+1 fld_info(cfld)%ifld=IAVBLFLD(IGET(241)) - datapd(1:im,1:jend-jsta+1,cfld)=GRID1(1:im,jsta:jend) + datapd(1:iend-ista+1,1:jend-jsta+1,cfld)=GRID1(ista:iend,jsta:jend) endif ENDIF @@ -5696,7 +6403,7 @@ SUBROUTINE SURFCE IF(IGET(236)>0)THEN !$omp parallel do private(i,j) DO J=JSTA,JEND - DO I=1,IM + DO I=ISTA,IEND GRID1(I,J) = smcwlt(i,j) ! IF(isltyp(i,j)/=0)THEN ! GRID1(I,J) = WLTSMC(isltyp(i,j)) @@ -5708,11 +6415,12 @@ SUBROUTINE SURFCE if(grib=='grib2') then cfld=cfld+1 fld_info(cfld)%ifld=IAVBLFLD(IGET(236)) -!$omp parallel do private(i,j,jj) +!$omp parallel do private(i,j,ii,jj) do j=1,jend-jsta+1 jj = jsta+j-1 - do i=1,im - datapd(i,j,cfld) = GRID1(i,jj) + do i=1,iend-ista+1 + ii = ista+i-1 + datapd(i,j,cfld) = GRID1(ii,jj) enddo enddo endif @@ -5721,7 +6429,7 @@ SUBROUTINE SURFCE IF(IGET(397)>0)THEN !$omp parallel do private(i,j) DO J=JSTA,JEND - DO I=1,IM + DO I=ISTA,IEND GRID1(I,J) = fieldcapa(i,j) ! IF(isltyp(i,j)/=0)THEN ! GRID1(I,J) = REFSMC(isltyp(i,j)) @@ -5733,11 +6441,12 @@ SUBROUTINE SURFCE if(grib=='grib2') then cfld=cfld+1 fld_info(cfld)%ifld=IAVBLFLD(IGET(397)) -!$omp parallel do private(i,j,jj) +!$omp parallel do private(i,j,ii,jj) do j=1,jend-jsta+1 jj = jsta+j-1 - do i=1,im - datapd(i,j,cfld) = GRID1(i,jj) + do i=1,iend-ista+1 + ii = ista+i-1 + datapd(i,j,cfld) = GRID1(ii,jj) enddo enddo endif @@ -5746,7 +6455,7 @@ SUBROUTINE SURFCE IF(IGET(396)>0)THEN !$omp parallel do private(i,j) DO J=JSTA,JEND - DO I=1,IM + DO I=ISTA,IEND GRID1(I,J) = suntime(i,j) ENDDO ENDDO @@ -5777,11 +6486,12 @@ SUBROUTINE SURFCE fld_info(cfld)%ntrange=0 endif fld_info(cfld)%tinvstat=IFHR-ID(18) -!$omp parallel do private(i,j,jj) +!$omp parallel do private(i,j,ii,jj) do j=1,jend-jsta+1 jj = jsta+j-1 - do i=1,im - datapd(i,j,cfld) = GRID1(i,jj) + do i=1,iend-ista+1 + ii = ista+i-1 + datapd(i,j,cfld) = GRID1(ii,jj) enddo enddo endif @@ -5790,7 +6500,7 @@ SUBROUTINE SURFCE IF(IGET(517)>0)THEN !$omp parallel do private(i,j) DO J=JSTA,JEND - DO I=1,IM + DO I=ISTA,IEND GRID1(I,J) = avgpotevp(i,j) ENDDO ENDDO @@ -5821,11 +6531,12 @@ SUBROUTINE SURFCE fld_info(cfld)%ntrange=0 endif fld_info(cfld)%tinvstat=IFHR-ID(18) -!$omp parallel do private(i,j,jj) +!$omp parallel do private(i,j,ii,jj) do j=1,jend-jsta+1 jj = jsta+j-1 - do i=1,im - datapd(i,j,cfld) = GRID1(i,jj) + do i=1,iend-ista+1 + ii = ista+i-1 + datapd(i,j,cfld) = GRID1(ii,jj) enddo enddo endif @@ -5837,21 +6548,21 @@ SUBROUTINE SURFCE IF (IGET(282)>0) THEN !$omp parallel do private(i,j) DO J=JSTA,JEND - DO I=1,IM + DO I=ISTA,IEND GRID1(I,J) = PT ENDDO ENDDO if(grib=='grib2') then cfld=cfld+1 fld_info(cfld)%ifld=IAVBLFLD(IGET(282)) - datapd(1:im,1:jend-jsta+1,cfld)=GRID1(1:im,jsta:jend) + datapd(1:iend-ista+1,1:jend-jsta+1,cfld)=GRID1(ista:iend,jsta:jend) endif ENDIF ! ! PRESSURE THICKNESS REQUESTED BY CMAQ IF (IGET(283)>0) THEN DO J=JSTA,JEND - DO I=1,IM + DO I=ISTA,IEND GRID1(I,J)=PDTOP ENDDO ENDDO @@ -5868,14 +6579,14 @@ SUBROUTINE SURFCE fld_info(cfld)%ifld=IAVBLFLD(IGET(283)) fld_info(cfld)%lvl1=1 fld_info(cfld)%lvl2=L - datapd(1:im,1:jend-jsta+1,cfld)=GRID1(1:im,jsta:jend) + datapd(1:iend-ista+1,1:jend-jsta+1,cfld)=GRID1(ista:iend,jsta:jend) endif ENDIF ! ! SIGMA PRESSURE THICKNESS REQUESTED BY CMAQ IF (IGET(273)>0) THEN DO J=JSTA,JEND - DO I=1,IM + DO I=ISTA,IEND GRID1(I,J)=PD(I,J) ENDDO ENDDO @@ -5892,7 +6603,7 @@ SUBROUTINE SURFCE fld_info(cfld)%ifld=IAVBLFLD(IGET(273)) fld_info(cfld)%lvl1=L fld_info(cfld)%lvl2=LM+1 - datapd(1:im,1:jend-jsta+1,cfld)=GRID1(1:im,jsta:jend) + datapd(1:iend-ista+1,1:jend-jsta+1,cfld)=GRID1(ista:iend,jsta:jend) endif ENDIF @@ -5900,7 +6611,7 @@ SUBROUTINE SURFCE ! TIME-AVERAGED EXCHANGE COEFFICIENTS FOR MASS REQUESTED FOR CMAQ IF (IGET(503)>0) THEN DO J=JSTA,JEND - DO I=1,IM + DO I=ISTA,IEND GRID1(I,J)=AKHSAVG(I,J) ENDDO ENDDO @@ -5913,19 +6624,24 @@ SUBROUTINE SURFCE ID(18) = IFHR - 1 ENDIF ID(20) = 3 + ITSRFC = NINT(TSRFC) if(grib=='grib2') then cfld=cfld+1 fld_info(cfld)%ifld=IAVBLFLD(IGET(503)) - fld_info(cfld)%ntrange=IFHR-ID(18) - fld_info(cfld)%tinvstat=1 - datapd(1:im,1:jend-jsta+1,cfld)=GRID1(1:im,jsta:jend) + if(ITSRFC>0) then + fld_info(cfld)%ntrange=1 + else + fld_info(cfld)%ntrange=0 + endif + fld_info(cfld)%tinvstat=IFHR-ID(18) + datapd(1:iend-ista+1,1:jend-jsta+1,cfld)=GRID1(ista:iend,jsta:jend) endif ENDIF ! TIME-AVERAGED EXCHANGE COEFFICIENTS FOR WIND REQUESTED FOR CMAQ IF (IGET(504)>0) THEN DO J=JSTA,JEND - DO I=1,IM + DO I=ISTA,IEND GRID1(I,J)=AKMSAVG(I,J) ENDDO ENDDO @@ -5938,15 +6654,155 @@ SUBROUTINE SURFCE ID(18) = IFHR - 1 ENDIF ID(20) = 3 + ITSRFC = NINT(TSRFC) if(grib=='grib2') then cfld=cfld+1 fld_info(cfld)%ifld=IAVBLFLD(IGET(504)) - fld_info(cfld)%ntrange=IFHR-ID(18) - fld_info(cfld)%tinvstat=1 - datapd(1:im,1:jend-jsta+1,cfld)=GRID1(1:im,jsta:jend) + if(ITSRFC>0) then + fld_info(cfld)%ntrange=1 + else + fld_info(cfld)%ntrange=0 + endif + fld_info(cfld)%tinvstat=IFHR-ID(18) + datapd(1:iend-ista+1,1:jend-jsta+1,cfld)=GRID1(ista:iend,jsta:jend) endif ENDIF RETURN END + + subroutine qpf_comp(igetfld,compfile,fcst) +! Read in QPF threshold for exceedance grid. +! Calculate exceedance grid. +! compfile: file name for reference grid. +! fcst: forecast length in hours. + use ctlblk_mod, only: SPVAL,JSTA,JEND,IM,DTQ2,IFHR,IFMIN,TPREC,GRIB, & + MODELNAME,JM,CFLD,DATAPD,FLD_INFO,JSTA_2L,JEND_2U,& + ISTA,IEND,ISTA_2L,IEND_2U + use rqstfld_mod, only: IGET, ID, LVLS, IAVBLFLD + use grib2_module, only: read_grib2_head, read_grib2_sngle + use vrbls2d, only: AVGPREC, AVGPREC_CONT + implicit none + character(len=256), intent(in) :: compfile + integer, intent(in) :: igetfld,fcst + integer :: trange,invstat + real, dimension(IM,JM) :: outgrid + + real, allocatable, dimension(:,:) :: mscValue + + integer :: nx, ny, nz, ntot, mscNlon, mscNlat, height + integer :: ITPREC, IFINCR + real :: rlonmin, rlatmax + real*8 rdx, rdy + + logical :: file_exists + + integer :: i, j, k, ii, jj + +! Read in reference grid. + INQUIRE(FILE=compfile, EXIST=file_exists) + if (file_exists) then + call read_grib2_head(compfile,nx,ny,nz,rlonmin,rlatmax,& + rdx,rdy) + mscNlon=nx + mscNlat=ny + if (.not. allocated(mscValue)) then + allocate(mscValue(mscNlon,mscNlat)) + endif + ntot = nx*ny + call read_grib2_sngle(compfile,ntot,height,mscValue) + else + write(*,*) 'WARNING: FFG file not available for hour: ', fcst + endif + +! Set GRIB variables. + ID(1:25) = 0 + ITPREC = NINT(TPREC) + if (ITPREC /= 0) then + IFINCR = MOD(IFHR,ITPREC) + IF(IFMIN >= 1)IFINCR= MOD(IFHR*60+IFMIN,ITPREC*60) + else + IFINCR = 0 + endif + ID(18) = 0 + ID(19) = IFHR + IF(IFMIN >= 1)ID(19)=IFHR*60+IFMIN + ID(20) = 4 + IF (IFINCR==0) THEN + ID(18) = IFHR-ITPREC + ELSE + ID(18) = IFHR-IFINCR + IF(IFMIN >= 1)ID(18)=IFHR*60+IFMIN-IFINCR + ENDIF + +! Calculate exceedance grid. + IF(MODELNAME == 'GFS' .OR. MODELNAME == 'FV3R') THEN +! !$omp parallel do private(i,j) + IF (file_exists) THEN + DO J=JSTA,JEND + DO I=ISTA,IEND + IF (IFHR .EQ. 0 .OR. fcst .EQ. 0) THEN + outgrid(I,J) = 0.0 + ELSE IF (mscValue(I,J) .LE. 0.0) THEN + outgrid(I,J) = 0.0 + ELSE IF (fcst .EQ. 1 .AND. AVGPREC(I,J)*FLOAT(ID(19)-ID(18))*3600.*1000./DTQ2 .GT. mscValue(I,J)) THEN + outgrid(I,J) = 1.0 + ELSE IF (fcst .GT. 1 .AND. AVGPREC_CONT(I,J)*FLOAT(IFHR)*3600.*1000./DTQ2 .GT. mscValue(I,J)) THEN + outgrid(I,J) = 1.0 + ELSE + outgrid(I,J) = 0.0 + ENDIF + ENDDO + ENDDO + ELSE + outgrid = 0.0*AVGPREC + ENDIF + ENDIF +! write(*,*) 'FFG MAX, MIN:', & +! maxval(mscValue),minval(mscValue) + IF (ID(18).LT.0) ID(18) = 0 + +! Set GRIB2 variables. + IF(fcst .EQ. 1) THEN + IF(ITPREC>0) THEN + trange = (IFHR-ID(18))/ITPREC + ELSE + trange = 0 + ENDIF + invstat = ITPREC + IF(trange .EQ. 0) THEN + IF (IFHR .EQ. 0) THEN + invstat = 0 + ELSE + invstat = 1 + ENDIF + trange = 1 + ENDIF + ELSE + trange = 1 + IF (IFHR .EQ. fcst) THEN + invstat = fcst + ELSE + invstat = 0 + ENDIF + ENDIF + + IF(grib=='grib2') then + cfld=cfld+1 + fld_info(cfld)%ifld=IAVBLFLD(IGET(igetfld)) + fld_info(cfld)%ntrange=trange + fld_info(cfld)%tinvstat=invstat +!$omp parallel do private(i,j,ii,jj) + do j=1,jend-jsta+1 + jj = jsta+j-1 + do i=1,iend-ista+1 + ii = ista+i-1 + datapd(i,j,cfld) = outgrid(ii,jj) + enddo + enddo + endif + + RETURN + + end subroutine qpf_comp diff --git a/sorc/ncep_post.fd/TRPAUS.f b/sorc/ncep_post.fd/TRPAUS.f index 2523717b5..24a27d71d 100644 --- a/sorc/ncep_post.fd/TRPAUS.f +++ b/sorc/ncep_post.fd/TRPAUS.f @@ -1,53 +1,37 @@ !> @file -! -!> SUBPROGRAM: TRPAUS COMPUTE TROPOPAUSE DATA. -!! PRGRMMR: TREADON ORG: W/NP2 DATE: 92-12-22 -!! -!! ABSTRACT: -!! THIS ROUTINE COMPUTES TROPOPAUSE DATA. AT EACH MASS -!! POINT A SURFACE UP SEARCH IS MADE FOR THE FIRST -!! OCCURRENCE OF A THREE LAYER MEAN LAPSE RATE LESS THAN -!! OR EQUAL TO A CRITICAL LAPSE RATE. THIS CRITCAL LAPSE -!! RATE IS 2DEG/KM. THIS IS IN ACCORD WITH THE WMO -!! DEFINITION OF A TROPOPAUSE. A MAXIMUM TROPOPAUSE -!! PRESSURE OF 500MB IS ENFORCED. ONC THE TROPOPAUSE -!! IS LOCATED IN A COLUMN, PRESSURE, TEMPERATURE, U -!! AND V WINDS, AND VERTICAL WIND SHEAR ARE COMPUTED. -!! -!! PROGRAM HISTORY LOG: -!! 92-12-22 RUSS TREADON -!! 97-03-06 GEOFF MANIKIN - CHANGED CRITERIA FOR DETERMINING -!! THE TROPOPAUSE AND ADDED HEIGHT -!! 98-06-15 T BLACK - CONVERSION FROM 1-D TO 2-D -!! 00-01-04 JIM TUCCILLO - MPI VERSION -!! 02-04-23 MIKE BALDWIN - WRF VERSION -!! 19-10-30 Bo CUI - REMOVE "GOTO" STATEMENT +!> @brief trpaus() computes tropopause data. +!> +!> @author Russ Treadon W/NP2 @date 1992-12-22 -!! -!! USAGE: CALL TRPAUS(PTROP,TTROP,ZTROP,UTROP,VTROP,SHTROP) -!! INPUT ARGUMENT LIST: -!! NONE -!! -!! OUTPUT ARGUMENT LIST: -!! PTROP - TROPOPAUSE PRESSURE. -!! TTROP - TROPOPAUSE TEMPERATURE. -!! ZTROP - TROPOPAUSE HEIGHT -!! UTROP - TROPOPAUSE U WIND COMPONENT. -!! VTROP - TROPOPAUSE V WIND COMPONENT. -!! SHTROP - VERTICAL WIND SHEAR AT TROPOPAUSE. -!! -!! OUTPUT FILES: -!! NONE -!! -!! SUBPROGRAMS CALLED: -!! UTILITIES: -!! -!! LIBRARY: -!! -!! ATTRIBUTES: -!! LANGUAGE: FORTRAN -!! MACHINE : CRAY C-90 -!! +!> This routine computes tropopause data. At each mass +!> point a surface up search is made for the first +!> occurrence of a three layer mean lapse rate less than +!> or equal to a critical lapse rate. This critcal lapse +!> rate is 2deg/km. This is in accord with the WMO +!> definition of a tropopause. A maximum tropopause +!> pressure of 500mb is enforced. Onc the tropopause +!> is located in a column, pressure, temperature, u +!> and v winds, and vertical wind shear are computed. +!> +!> @param[out] PTROP Tropopause pressure. +!> @param[out] TTROP Tropopause temperature. +!> @param[out] ZTROP Tropopause height. +!> @param[out] UTROP Tropopause u wind component. +!> @param[out] VTROP Tropopause v wind component. +!> @param[out] SHTROP Vertical wind shear at tropopause. +!> +!> ### Program history log: +!> Date | Programmer | Comments +!> -----|------------|--------- +!> 1992-12-22 | Russ Treadon | Initial +!> 1997-03-06 | Geoff Manikin | Changed criteria for determining the tropopause and added height +!> 1998-06-15 | T Black | Conversion from 1-D TO 2-D +!> 2000-01-04 | Jim Tuccillo | MPI Version +!> 2002-04-23 | Mike Baldwin | WRF Version +!> 2019-10-30 | Bo Cui | ReMOVE "GOTO" STATEMENT +!> 2021-09-13 | JESSE MENG | 2D DECOMPOSITION +!> +!> @author Russ Treadon W/NP2 @date 1992-12-22 SUBROUTINE TRPAUS(PTROP,TTROP,ZTROP,UTROP,VTROP,SHTROP) ! @@ -57,7 +41,8 @@ SUBROUTINE TRPAUS(PTROP,TTROP,ZTROP,UTROP,VTROP,SHTROP) use vrbls3d, only: pint, t, zint, uh, vh use masks, only: lmh use params_mod, only: d50 - use ctlblk_mod, only: jsta, jend, spval, im, jm, lm + use ctlblk_mod, only: jsta, jend, spval, im, jm, lm, & + ista, iend !- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - implicit none ! @@ -82,7 +67,7 @@ SUBROUTINE TRPAUS(PTROP,TTROP,ZTROP,UTROP,VTROP,SHTROP) ! LOOP OVER THE HORIZONTAL GRID. ! DO J=JSTA,JEND - DO I=1,IM + DO I=ISTA,IEND PTROP(I,J) = SPVAL TTROP(I,J) = SPVAL ZTROP(I,J) = SPVAL @@ -97,7 +82,7 @@ SUBROUTINE TRPAUS(PTROP,TTROP,ZTROP,UTROP,VTROP,SHTROP) !!$omp& tlapse,tlapse2,u0,u0l,uh,uh0,ul, !!$omp& v0,v0l,vh,vh0) DO J=JSTA,JEND - loopI:DO I=1,IM + loopI:DO I=ISTA,IEND ! ! COMPUTE THE TEMPERATURE LAPSE RATE (-DT/DZ) BETWEEN ETA ! LAYERS MOVING UP FROM THE GROUND. THE FIRST ETA LAYER diff --git a/sorc/ncep_post.fd/TRPAUS_NAM.f b/sorc/ncep_post.fd/TRPAUS_NAM.f index caf8785f4..7ea734f58 100644 --- a/sorc/ncep_post.fd/TRPAUS_NAM.f +++ b/sorc/ncep_post.fd/TRPAUS_NAM.f @@ -1,43 +1,37 @@ !> @file -! -!> SUBPROGRAM: TRPAUS COMPUTE TROPOPAUSE DATA. -!! PRGRMMR: TREADON ORG: W/NP2 DATE: 92-12-22 -!! -!! ABSTRACT: -!! THIS ROUTINE COMPUTES TROPOPAUSE DATA. AT EACH MASS -!! POINT A SURFACE UP SEARCH IS MADE FOR THE FIRST -!! OCCURRENCE OF A THREE LAYER MEAN LAPSE RATE LESS THAN -!! OR EQUAL TO A CRITICAL LAPSE RATE. THIS CRITCAL LAPSE -!! RATE IS 2DEG/KM. THIS IS IN ACCORD WITH THE WMO -!! DEFINITION OF A TROPOPAUSE. A MAXIMUM TROPOPAUSE -!! PRESSURE OF 500MB IS ENFORCED. ONC THE TROPOPAUSE -!! IS LOCATED IN A COLUMN, PRESSURE, TEMPERATURE, U -!! AND V WINDS, AND VERTICAL WIND SHEAR ARE COMPUTED. -!! -!! PROGRAM HISTORY LOG: -!! - 92-12-22 RUSS TREADON -!! - 97-03-06 GEOFF MANIKIN - CHANGED CRITERIA FOR DETERMINING -!! THE TROPOPAUSE AND ADDED HEIGHT -!! - 98-06-15 T BLACK - CONVERSION FROM 1-D TO 2-D -!! - 00-01-04 JIM TUCCILLO - MPI VERSION -!! - 02-04-23 MIKE BALDWIN - WRF VERSION -!! - 19-10-30 Bo CUI - REMOVE "GOTO" STATEMENT -!! -!! USAGE: CALL TRPAUS(PTROP,TTROP,ZTROP,UTROP,VTROP,SHTROP) -!! INPUT ARGUMENT LIST: -!! NONE -!! -!! OUTPUT ARGUMENT LIST: -!! PTROP - TROPOPAUSE PRESSURE. -!! TTROP - TROPOPAUSE TEMPERATURE. -!! ZTROP - TROPOPAUSE HEIGHT -!! UTROP - TROPOPAUSE U WIND COMPONENT. -!! VTROP - TROPOPAUSE V WIND COMPONENT. -!! SHTROP - VERTICAL WIND SHEAR AT TROPOPAUSE. -!! -!! OUTPUT FILES: -!! NONE -!! +!> @brief trpaus() computes tropopause data. +!> +!> @author Russ Treadon W/NP2 @date 1992-12-22 + +!> This routine computes tropopause data. At each mass +!> point a surface up search is made for the first +!> occurrence of a three layer mean lapse rate less than +!> or equal to a critical lapse rate. This critcal lapse +!> rate is 2deg/km. This is in accord with the WMO +!> definition of a tropopause. A maximum tropopause +!> pressure of 500mb is enforced. Onc the tropopause +!> is located in a column, pressure, temperature, u +!> and v winds, and vertical wind shear are computed. +!> +!> @param[out] PTROP Tropopause pressure. +!> @param[out] TTROP Tropopause temperature. +!> @param[out] ZTROP Tropopause height. +!> @param[out] UTROP Tropopause u wind component. +!> @param[out] VTROP Tropopause v wind component. +!> @param[out] SHTROP Vertical wind shear at tropopause. +!> +!> ### Program history log: +!> Date | Programmer | Comments +!> -----|------------|--------- +!> 1992-12-22 | Russ Treadon | Initial +!> 1997-03-06 | Geoff Manikin | Changed criteria for determining the tropopause and added height +!> 1998-06-15 | T Black | Conversion from 1-D TO 2-D +!> 2000-01-04 | Jim Tuccillo | MPI Version +!> 2002-04-23 | Mike Baldwin | WRF Version +!> 2019-10-30 | Bo Cui | ReMOVE "GOTO" STATEMENT +!> 2021-09-13 | JESSE MENG | 2D DECOMPOSITION +!> +!> @author Russ Treadon W/NP2 @date 1992-12-22 SUBROUTINE TRPAUS(PTROP,TTROP,ZTROP,UTROP,VTROP,SHTROP) ! @@ -59,8 +53,8 @@ SUBROUTINE TRPAUS(PTROP,TTROP,ZTROP,UTROP,VTROP,SHTROP) ! ! DECLARE VARIABLES. ! - REAL PTROP(IM,JM),TTROP(IM,JM),ZTROP(IM,JM),UTROP(IM,JM) - REAL VTROP(IM,JM),SHTROP(IM,JM) + REAL PTROP(ISTA:IEND,JSTA:JEND),TTROP(ISTA:IEND,JSTA:JEND),ZTROP(ISTA:IEND,JSTA:JEND),UTROP(ISTA:IEND,JSTA:JEND) + REAL VTROP(ISTA:IEND,JSTA:JEND),SHTROP(ISTA:IEND,JSTA:JEND) REAL TLAPSE(LM),DZ2(LM),DELT2(LM),TLAPSE2(LM) ! integer I,J @@ -72,7 +66,7 @@ SUBROUTINE TRPAUS(PTROP,TTROP,ZTROP,UTROP,VTROP,SHTROP) ! LOOP OVER THE HORIZONTAL GRID. ! DO J=JSTA,JEND - DO I=1,IM + DO I=ISTA,IEND PTROP(I,J) = SPVAL TTROP(I,J) = SPVAL ZTROP(I,J) = SPVAL @@ -87,7 +81,7 @@ SUBROUTINE TRPAUS(PTROP,TTROP,ZTROP,UTROP,VTROP,SHTROP) !$omp& tlapse,tlapse2,u0,u0l,uh,uh0,ul, !$omp& v0,v0l,vh,vh0) DO J=JSTA,JEND - loopI:DO I=1,IM + loopI:DO I=ISTA,IEND ! ! COMPUTE THE TEMPERATURE LAPSE RATE (-DT/DZ) BETWEEN ETA ! LAYERS MOVING UP FROM THE GROUND. THE FIRST ETA LAYER diff --git a/sorc/ncep_post.fd/TTBLEX.f b/sorc/ncep_post.fd/TTBLEX.f index 09bd3423b..5dad0ae76 100644 --- a/sorc/ncep_post.fd/TTBLEX.f +++ b/sorc/ncep_post.fd/TTBLEX.f @@ -19,6 +19,7 @@ SUBROUTINE TTBLEX(TREF,TTBL,ITB,JTB,KARR,PMIDL & ! 00-01-04 JIM TUCCILLO - MPI VERSION ! 01-10-22 H CHUANG - MODIFIED TO PROCESS HYBRID MODEL OUTPUT ! 02-01-15 MIKE BALDWIN - WRF VERSION +! 21-09-13 J MENG - 2D DECOMPOSITION ! ! OUTPUT FILES: ! NONE @@ -30,20 +31,21 @@ SUBROUTINE TTBLEX(TREF,TTBL,ITB,JTB,KARR,PMIDL & ! ATTRIBUTES: ! LANGUAGE: FORTRAN !---------------------------------------------------------------------- - use ctlblk_mod, only: jsta, jend, im, jsta_2l, jend_2u, me + use ctlblk_mod, only: jsta, jend, im, jsta_2l, jend_2u, me, & + ista, iend, ista_2l, iend_2u !- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - implicit none !---------------------------------------------------------------------- integer,intent(in) :: ITB,JTB - integer,intent(in) :: KARR(IM,jsta:jend) + integer,intent(in) :: KARR(ista:iend,jsta:jend) real,dimension(JTB,ITB),intent(in) :: TTBL - real,dimension(IM,JSTA_2L:JEND_2U),intent(in) :: PMIDL - real,dimension(IM,JSTA_2L:JEND_2U),intent(out) :: TREF - real,dimension(IM,jsta:jend),intent(out) :: QQ,PP - real,dimension(IM,jsta:jend),intent(in) :: THESP + real,dimension(ISTA_2L:IEND_2U,JSTA_2L:JEND_2U),intent(in) :: PMIDL + real,dimension(ISTA_2L:IEND_2U,JSTA_2L:JEND_2U),intent(out) :: TREF + real,dimension(ista:iend,jsta:jend),intent(out) :: QQ,PP + real,dimension(ista:iend,jsta:jend),intent(in) :: THESP real,dimension(ITB), intent(in) :: THE0,STHE - integer,dimension(IM,jsta:jend),intent(out) :: IPTB,ITHTB + integer,dimension(ista:iend,jsta:jend),intent(out) :: IPTB,ITHTB real,intent(in) :: PL,RDP,RDTHE ! @@ -55,7 +57,7 @@ SUBROUTINE TTBLEX(TREF,TTBL,ITB,JTB,KARR,PMIDL & !$omp& private(i,j,bthe00k,bthe10k,bthk,ip,iptbk,ith,pk,sthe00k,sthe10k,& !$omp& sthk,t00k,t01k,t10k,t11k,tpk,tthk) DO J=JSTA,JEND - DO I=1,IM + DO I=ISTA,IEND IF(KARR(I,J) > 0) THEN !--------------SCALING PRESSURE & TT TABLE INDEX------------------------ PK = PMIDL(I,J) @@ -112,5 +114,8 @@ SUBROUTINE TTBLEX(TREF,TTBL,ITB,JTB,KARR,PMIDL & ENDDO ! RETURN - END + END SUBROUTINE TTBLEX !&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&& +! +!------------------------------------------------------------------------------------- +! diff --git a/sorc/ncep_post.fd/UPP_MATH.f b/sorc/ncep_post.fd/UPP_MATH.f index 2b1ad4a75..a19eaf06d 100644 --- a/sorc/ncep_post.fd/UPP_MATH.f +++ b/sorc/ncep_post.fd/UPP_MATH.f @@ -1,25 +1,25 @@ !> @file -! -!> SUBPROGRAM: UPP_MATH -!! @author JMENG @date 2020-05-20 -!! -!! A collection of UPP subroutines for numerical math functions calculation. -!! -!! DVDXDUDY -!! computes dudy, dvdx, uwnd -!! -!! H2U, H2V, U2H, V2H -!! interpolates variables between U, V, H, points -!! adopted from UPP subroutine GRIDAVG.f -!! -!! PROGRAM HISTORY LOG: -!! MAY 20 2020 Jesse Meng Initial code -!!------------------------------------------------------------------------ -!! +!> +!> @brief upp_math is a collection of UPP subroutines for numerical math functions calculation. +!> @author Jesse Meng @date 2020-05-20 + +!> dvdxdudy() computes dudy, dvdx, uwnd +!> +!> h2u(), h2v(), u2h(), v2h() interpolate variables between U, V, H, points +!> adopted from UPP subroutine GRIDAVG.f +!> +!> ### Program history log: +!> Date | Programmer | Comments +!> -----|------------|--------- +!> 2020-05-20 | Jesse Meng | Initial +!> 2022-06-10 | Wen Meng | Modify dvdxdudy to retrict computation on undefined grids +!> +!> @author Jesse Meng @date 2020-05-20 module upp_math use masks, only: dx, dy - use ctlblk_mod, only: im, jsta_2l, jend_2u, jsta_m, jend_m, spval + use ctlblk_mod, only: im, jsta_2l, jend_2u, jsta_m, jend_m, spval,& + ista_2l, iend_2u, ista_m, iend_m use gridspec_mod, only: gridtype ! implicit none @@ -43,20 +43,31 @@ subroutine dvdxdudy(uwnd,vwnd) ! implicit none - REAL, dimension(im,jsta_2l:jend_2u), intent(in) :: UWND, VWND + REAL, dimension(ista_2l:iend_2u,jsta_2l:jend_2u), intent(in) :: UWND, VWND ! !-- local variables !-- integer i, j real r2dx, r2dy INTEGER, allocatable :: IHE(:),IHW(:) -! + +!Initializing + DO J=JSTA_M,JEND_M + DO I=ISTA_M,IEND_M + DDVDX(I,J)=SPVAL + DDUDY(I,J)=SPVAL + UUAVG(I,J)=SPVAL + ENDDO + ENDDO + IF(GRIDTYPE == 'A')THEN !$omp parallel do private(i,j,r2dx,r2dy) DO J=JSTA_M,JEND_M - DO I=2,IM-1 - IF(VWND(I+1,J)1.E-5.AND.ABS(DY(I,J))>1.E-5) THEN R2DX = 1./(2.*DX(I,J)) R2DY = 1./(2.*DY(I,J)) DDVDX(I,J) = (VWND(I+1,J)-VWND(I-1,J))*R2DX @@ -74,7 +85,7 @@ subroutine dvdxdudy(uwnd,vwnd) ENDDO !$omp parallel do private(i,j,r2dx,r2dy) DO J=JSTA_M,JEND_M - DO I=2,IM-1 + DO I=ISTA_M,IEND_M IF(VWND(I+IHE(J),J) < SPVAL.AND.VWND(I+IHW(J),J) < SPVAL .AND. & & UWND(I,J+1) < SPVAL .AND.UWND(I,J-1) < SPVAL) THEN R2DX = 1./(2.*DX(I,J)) @@ -90,7 +101,7 @@ subroutine dvdxdudy(uwnd,vwnd) ELSE IF (GRIDTYPE == 'B')THEN !$omp parallel do private(i,j,r2dx,r2dy) DO J=JSTA_M,JEND_M - DO I=2,IM-1 + DO I=ISTA_M,IEND_M R2DX = 1./DX(I,J) R2DY = 1./DY(I,J) if(VWND(I, J)==SPVAL .or. VWND(I, J-1)==SPVAL .or. & @@ -115,51 +126,51 @@ subroutine H2U(ingrid,outgrid) ! This subroutine interpolates from H points onto U points ! Author: CHUANG, EMC, Dec. 2010 - use ctlblk_mod, only: spval, jsta, jend, jsta_m, jend, me, num_procs, jm,& - im, jsta_2l, jend_2u , jend_m + use ctlblk_mod, only: spval, jsta, jend, jsta_m, jend_m, me, num_procs, jm,& + im, jsta_2l, jend_2u, ista, iend, ista_m, iend_m, ista_2l, iend_2u use gridspec_mod, only: gridtype implicit none INCLUDE "mpif.h" integer:: i,j,ie,iw - real,dimension(IM,JSTA_2L:JEND_2U),intent(in)::ingrid - real,dimension(IM,JSTA_2L:JEND_2U),intent(out)::outgrid + real,dimension(ISTA_2L:IEND_2U,JSTA_2L:JEND_2U),intent(in)::ingrid + real,dimension(ISTA_2L:IEND_2U,JSTA_2L:JEND_2U),intent(out)::outgrid outgrid=spval if(GRIDTYPE == 'A')THEN do j=jsta,jend - do i=1,im + do i=ista,iend outgrid(i,j)=ingrid(i,j) end do end do else IF(GRIDTYPE == 'E')THEN - call exch(ingrid(1,jsta_2l)) + call exch(ingrid(ista_2l,jsta_2l)) DO J=JSTA_M,JEND_M - DO I=2,IM-1 + DO I=ISTA_M,IEND_M IE=I+MOD(J,2) IW=IE-1 outgrid(i,j)=(ingrid(IW,J)+ingrid(IE,J)+ingrid(I,J+1)+ingrid(I,J-1))/4.0 end do end do ELSE IF(GRIDTYPE == 'B')THEN - call exch(ingrid(1,jsta_2l)) + call exch(ingrid(ista_2l,jsta_2l)) DO J=JSTA,JEND_M - DO I=1,IM-1 + DO I=ISTA,IEND_M outgrid(i,j)=(ingrid(i,j)+ingrid(i,j+1)+ingrid(i+1,j)+ingrid(i+1,j+1))/4.0 end do end do ! Fill in boundary points because hysplit fails when 10 m wind has bitmaps do j=jsta,jend_m - outgrid(im,j)=outgrid(im-1,j) + outgrid(iend,j)=outgrid(iend-1,j) end do IF(me == (num_procs-1) .and. jend_2u >= jm) then - DO I=1,IM - outgrid(i,jm) = outgrid(i,jm-1) + DO I=ISTA,IEND + outgrid(i,jend) = outgrid(i,jend-1) END DO END IF ELSE IF(GRIDTYPE == 'C')THEN DO J=JSTA,JEND - DO I=1,IM-1 + DO I=ISTA,IEND_M outgrid(i,j)=(ingrid(i,j)+ingrid(i+1,j))/2.0 end do end do @@ -172,40 +183,41 @@ end subroutine H2U subroutine H2V(ingrid,outgrid) ! This subroutine interpolates from H points onto V points ! Author: CHUANG, EMC, Dec. 2010 - use ctlblk_mod, only: spval, jsta, jend, jsta_m, jend_m, im, jsta_2l, jend_2u + use ctlblk_mod, only: spval, jsta, jend, jsta_m, jend_m, im, jsta_2l, jend_2u,& + ista, iend, ista_m, iend_m, ista_2l, iend_2u use gridspec_mod, only: gridtype implicit none INCLUDE "mpif.h" integer:: i,j,ie,iw - real,dimension(IM,JSTA_2L:JEND_2U),intent(in)::ingrid - real,dimension(IM,JSTA_2L:JEND_2U),intent(out)::outgrid + real,dimension(ISTA_2L:IEND_2U,JSTA_2L:JEND_2U),intent(in)::ingrid + real,dimension(ISTA_2L:IEND_2U,JSTA_2L:JEND_2U),intent(out)::outgrid outgrid=spval if(GRIDTYPE == 'A')THEN do j=jsta,jend - do i=1,im + do i=ista,iend outgrid(i,j)=ingrid(i,j) end do end do else IF(GRIDTYPE == 'E')THEN - call exch(ingrid(1,jsta_2l)) + call exch(ingrid(ista_2l,jsta_2l)) DO J=JSTA_M,JEND_M - DO I=2,IM-1 + DO I=ISTA_M,IEND_M IE=I+MOD(J,2) IW=IE-1 outgrid(i,j)=(ingrid(IW,J)+ingrid(IE,J)+ingrid(I,J+1)+ingrid(I,J-1))/4.0 end do end do ELSE IF(GRIDTYPE == 'B')THEN - call exch(ingrid(1,jsta_2l)) + call exch(ingrid(ista_2l,jsta_2l)) DO J=JSTA,JEND_M - DO I=1,IM-1 + DO I=ISTA,IEND_M outgrid(i,j)=(ingrid(i,j)+ingrid(i,j+1)+ingrid(i+1,j)+ingrid(i+1,j+1))/4.0 end do end do ELSE IF(GRIDTYPE == 'C')THEN - call exch(ingrid(1,jsta_2l)) + call exch(ingrid(ista_2l,jsta_2l)) DO J=JSTA,JEND_M - DO I=1,IM + DO I=ISTA,IEND outgrid(i,j)=(ingrid(i,j)+ingrid(i,j+1))/2.0 end do end do @@ -218,39 +230,40 @@ end subroutine H2V subroutine U2H(ingrid,outgrid) ! This subroutine interpolates from U points onto H points ! Author: CHUANG, EMC, Dec. 2010 - use ctlblk_mod, only: spval, jsta, jend, jsta_m, jend_m, im, jsta_2l, jend_2u + use ctlblk_mod, only: spval, jsta, jend, jsta_m, jend_m, im, jsta_2l, jend_2u,& + ista, iend, ista_m, iend_m, ista_2l, iend_2u use gridspec_mod, only: gridtype implicit none INCLUDE "mpif.h" integer:: i,j,ie,iw - real,dimension(IM,JSTA_2L:JEND_2U),intent(in)::ingrid - real,dimension(IM,JSTA_2L:JEND_2U),intent(out)::outgrid + real,dimension(ISTA_2L:IEND_2U,JSTA_2L:JEND_2U),intent(in)::ingrid + real,dimension(ISTA_2L:IEND_2U,JSTA_2L:JEND_2U),intent(out)::outgrid outgrid=spval if(GRIDTYPE == 'A')THEN do j=jsta,jend - do i=1,im + do i=ista,iend outgrid(i,j)=ingrid(i,j) end do end do else IF(GRIDTYPE == 'E')THEN - call exch(ingrid(1,jsta_2l)) + call exch(ingrid(ista_2l,jsta_2l)) DO J=JSTA_M,JEND_M - DO I=2,IM-1 + DO I=ISTA_M,IEND_M IE=I+MOD(J+1,2) IW=IE-1 outgrid(i,j)=(ingrid(IW,J)+ingrid(IE,J)+ingrid(I,J+1)+ingrid(I,J-1))/4.0 end do end do ELSE IF(GRIDTYPE == 'B')THEN - call exch(ingrid(1,jsta_2l)) + call exch(ingrid(ista_2l,jsta_2l)) DO J=JSTA_M,JEND_M - DO I=2,IM-1 + DO I=ISTA_M,IEND_M outgrid(i,j)=(ingrid(i-1,j-1)+ingrid(i,j-1)+ingrid(i-1,j)+ingrid(i,j))/4.0 end do end do ELSE IF(GRIDTYPE == 'C')THEN DO J=JSTA,JEND - DO I=2,IM + DO I=ISTA_M,IEND outgrid(i,j)=(ingrid(i-1,j)+ingrid(i,j))/2.0 end do end do @@ -263,40 +276,41 @@ end subroutine U2H subroutine V2H(ingrid,outgrid) ! This subroutine interpolates from V points onto H points ! Author: CHUANG, EMC, Dec. 2010 - use ctlblk_mod, only: spval, jsta, jend, jsta_m, jend_m, im, jsta_2l, jend_2u + use ctlblk_mod, only: spval, jsta, jend, jsta_m, jend_m, im, jsta_2l, jend_2u,& + ista, iend, ista_m, iend_m, ista_2l, iend_2u use gridspec_mod, only: gridtype implicit none INCLUDE "mpif.h" integer:: i,j,ie,iw - real,dimension(IM,JSTA_2L:JEND_2U),intent(in)::ingrid - real,dimension(IM,JSTA_2L:JEND_2U),intent(out)::outgrid + real,dimension(ISTA_2L:IEND_2U,JSTA_2L:JEND_2U),intent(in)::ingrid + real,dimension(ISTA_2L:IEND_2U,JSTA_2L:JEND_2U),intent(out)::outgrid outgrid=spval if(GRIDTYPE == 'A')THEN do j=jsta,jend - do i=1,im + do i=ista,iend outgrid(i,j)=ingrid(i,j) end do end do else IF(GRIDTYPE == 'E')THEN - call exch(ingrid(1,jsta_2l)) + call exch(ingrid(ista_2l,jsta_2l)) DO J=JSTA_M,JEND_M - DO I=2,IM-1 + DO I=ISTA_M,IEND_M IE=I+MOD(J,2) IW=IE-1 outgrid(i,j)=(ingrid(IW,J)+ingrid(IE,J)+ingrid(I,J+1)+ingrid(I,J-1))/4.0 end do end do ELSE IF(GRIDTYPE == 'B')THEN - call exch(ingrid(1,jsta_2l)) + call exch(ingrid(ista_2l,jsta_2l)) DO J=JSTA_M,JEND_M - DO I=2,IM-1 + DO I=ISTA_M,IEND_M outgrid(i,j)=(ingrid(i-1,j-1)+ingrid(i,j-1)+ingrid(i-1,j)+ingrid(i,j))/4.0 end do end do ELSE IF(GRIDTYPE == 'C')THEN - call exch(ingrid(1,jsta_2l)) + call exch(ingrid(ista_2l,jsta_2l)) DO J=JSTA_M,JEND - DO I=1,IM + DO I=ISTA,IEND outgrid(i,j)=(ingrid(i,j-1)+ingrid(i,j))/2.0 end do end do diff --git a/sorc/ncep_post.fd/UPP_PHYSICS.f b/sorc/ncep_post.fd/UPP_PHYSICS.f index b9ca9995d..11ef417e3 100644 --- a/sorc/ncep_post.fd/UPP_PHYSICS.f +++ b/sorc/ncep_post.fd/UPP_PHYSICS.f @@ -1,37 +1,31 @@ !> @file -! -!> SUBPROGRAM: UPP_PHYSICS -!! @author JMENG @date 2020-05-20 -!! -!! A collection of UPP subroutines for physics variables calculation. -!! -!! CALCAPE -!! Compute CAPE/CINS and other storm related variables. -!! -!! CALCAPE2 -!! Compute additional storm related variables. -!! -!! CALRH -!! CALRH_NAM -!! CALRH_GFS -!! CALRH_GSD -!! Compute RH using various algorithms. -!! The NAM v4.1.18 ALGORITHM (CALRH_NAM) is selected as default for -!! NMMB and FV3GFS, FV3GEFS, and FV3R for the UPP 2020 unification. -!! -!! CALRH_PW -!! Algorithm use at GSD for RUC and Rapid Refresh -!! -!! FPVSNEW -!! Compute saturation vapor pressure. -!! -!! TVIRTUAL -!! Compute virtual temperature. -!! -!! PROGRAM HISTORY LOG: -!! MAY, 2020 Jesse Meng Initial code -!!------------------------------------------------------------------------------------- -!! +!> +!> @brief upp_physics is a collection of UPP subroutines for physics variables calculation. +!> @author Jesse Meng @date 2020-05-20 + +!> calcape() computes CAPE/CINS and other storm related variables. +!> +!> calcape2() computes additional storm related variables. +!> +!> calrh(), calrh_nam(), calrh_gfs(), calrh_gsd() compute RH using various algorithms. +!> +!> The NAM v4.1.18 algorithm (calrh_nam()) is selected as default for +!> NMMB and FV3GFS, FV3GEFS, and FV3R for the UPP 2020 unification. +!> +!> calrh_pw() algorithm use at GSD for RUC and Rapid Refresh. +!> +!> calslr_roebber() computes snow solid-liquid-ratio slr using the Roebber algorithm. +!> +!> fpvsnew() computes saturation vapor pressure. +!> +!> tvirtual() computes virtual temperature. +!> +!> ### Program history log: +!> Date | Programmer | Comments +!> -----|------------|--------- +!> 2020-05-20 | Jesse Meng | Initial +!> +!> @author Jesse Meng @date 2020-05-20 module upp_physics implicit none @@ -39,9 +33,14 @@ module upp_physics private public :: CALCAPE, CALCAPE2 + public :: CALDIV + public :: CALGRADPS public :: CALRH public :: CALRH_GFS, CALRH_GSD, CALRH_NAM public :: CALRH_PW + public :: CALSLR_ROEBBER + public :: CALVOR + public :: FPVSNEW public :: TVIRTUAL @@ -51,12 +50,12 @@ module upp_physics ! SUBROUTINE CALRH(P1,T1,Q1,RH) - use ctlblk_mod, only: im, jsta, jend, MODELNAME + use ctlblk_mod, only: ista, iend, jsta, jend, MODELNAME implicit none - REAL,dimension(IM,jsta:jend),intent(in) :: P1,T1 - REAL,dimension(IM,jsta:jend),intent(inout) :: Q1 - REAL,dimension(IM,jsta:jend),intent(out) :: RH + REAL,dimension(ista:iend,jsta:jend),intent(in) :: P1,T1 + REAL,dimension(ista:iend,jsta:jend),intent(inout) :: Q1 + REAL,dimension(ista:iend,jsta:jend),intent(out) :: RH IF(MODELNAME == 'RAPR')THEN CALL CALRH_GSD(P1,T1,Q1,RH) @@ -68,57 +67,37 @@ END SUBROUTINE CALRH ! !------------------------------------------------------------------------------------- ! - SUBROUTINE CALRH_NAM(P1,T1,Q1,RH) -! SUBROUTINE CALRH(P1,T1,Q1,RH) -!$$$ SUBPROGRAM DOCUMENTATION BLOCK -! . . . -! SUBPROGRAM: CALRH COMPUTES RELATIVE HUMIDITY -! PRGRMMR: TREADON ORG: W/NP2 DATE: 92-12-22 -! -! ABSTRACT: -! THIS ROUTINE COMPUTES RELATIVE HUMIDITY GIVEN PRESSURE, -! TEMPERATURE, SPECIFIC HUMIDITY. AN UPPER AND LOWER BOUND -! OF 100 AND 1 PERCENT RELATIVE HUMIDITY IS ENFORCED. WHEN -! THESE BOUNDS ARE APPLIED THE PASSED SPECIFIC HUMIDITY -! ARRAY IS ADJUSTED AS NECESSARY TO PRODUCE THE SET RELATIVE -! HUMIDITY. -! . -! -! PROGRAM HISTORY LOG: -! ??-??-?? DENNIS DEAVEN -! 92-12-22 RUSS TREADON - MODIFIED AS DESCRIBED ABOVE. -! 98-06-08 T BLACK - CONVERSION FROM 1-D TO 2-D -! 98-08-18 MIKE BALDWIN - MODIFY TO COMPUTE RH OVER ICE AS IN MODEL -! 98-12-16 GEOFF MANIKIN - UNDO RH COMPUTATION OVER ICE -! 00-01-04 JIM TUCCILLO - MPI VERSION -! 02-06-11 MIKE BALDWIN - WRF VERSION -! 06-03-19 Wen Meng - MODIFY TOP PRESSURE to 1 PA -! -! USAGE: CALL CALRH(P1,T1,Q1,RH) -! INPUT ARGUMENT LIST: -! P1 - PRESSURE (PA) -! T1 - TEMPERATURE (K) -! Q1 - SPECIFIC HUMIDITY (KG/KG) -! -! OUTPUT ARGUMENT LIST: -! RH - RELATIVE HUMIDITY (DECIMAL FORM) -! Q1 - ADJUSTED SPECIFIC HUMIDITY (KG/KG) -! -! OUTPUT FILES: -! NONE -! -! SUBPROGRAMS CALLED: -! UTILITIES: -! LIBRARY: -! NONE -! -! ATTRIBUTES: -! LANGUAGE: FORTRAN -! MACHINE : CRAY C-90 -!$$$ -! +!> calrh_nam() computes relative humidity. +!> +!> This routine computes relative humidity given pressure, +!> temperature, specific humidity. an upper and lower bound +!> of 100 and 1 percent relative humidity is enforced. When +!> these bounds are applied the passed specific humidity +!> array is adjusted as necessary to produce the set relative +!> humidity. +!> +!> @param[in] P1 Pressure (pa) +!> @param[in] T1 Temperature (K) +!> @param[in] Q1 Specific humidity (kg/kg) +!> @param[out] RH Relative humidity (decimal form) +!> @param[out] Q1 Specific humidity (kg/kg) +!> +!> ### Program History Log +!> Date | Programmer | Comments +!> -----|------------|--------- +!> ????-??-?? | DENNIS DEAVEN | Initial +!> 1992-12-22 | Russ Treadon | Modified as described above +!> 1998-06-08 | T Black | Conversion from 1-D to 2-D +!> 1998-08-18 | Mike Baldwin | Modify to compute RH over ice as in model +!> 1998-12-16 | Geoff Manikin | undo RH computation over ice +!> 2000-01-04 | Jim Tuccillo | MPI Version +!> 2002-06-11 | Mike Baldwin | WRF Version +!> 2006-03-19 | Wen Meng | Modify top pressure to 1 pa +!> +!> @author Russ Treadon W/NP2 @date 1992-12-22 + SUBROUTINE CALRH_NAM(P1,T1,Q1,RH) use params_mod, only: PQ0, a2, a3, a4, rhmin - use ctlblk_mod, only: jsta, jend, spval, im + use ctlblk_mod, only: ista, iend, jsta, jend, spval !- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - implicit none ! @@ -126,9 +105,9 @@ SUBROUTINE CALRH_NAM(P1,T1,Q1,RH) ! ! DECLARE VARIABLES. ! - REAL,dimension(IM,jsta:jend),intent(in) :: P1,T1 - REAL,dimension(IM,jsta:jend),intent(inout) :: Q1 - REAL,dimension(IM,jsta:jend),intent(out) :: RH + REAL,dimension(ista:iend,jsta:jend),intent(in) :: P1,T1 + REAL,dimension(ista:iend,jsta:jend),intent(inout) :: Q1 + REAL,dimension(ista:iend,jsta:jend),intent(out) :: RH REAL QC integer I,J !*************************************************************** @@ -136,8 +115,8 @@ SUBROUTINE CALRH_NAM(P1,T1,Q1,RH) ! START CALRH. ! DO J=JSTA,JEND - DO I=1,IM - IF (T1(I,J) < SPVAL) THEN + DO I=ISTA,IEND + IF (T1(I,J) < spval) THEN IF (ABS(P1(I,J)) >= 1) THEN QC = PQ0/P1(I,J)*EXP(A2*(T1(I,J)-A3)/(T1(I,J)-A4)) ! @@ -156,7 +135,7 @@ SUBROUTINE CALRH_NAM(P1,T1,Q1,RH) ! ENDIF ELSE - RH(I,J) = SPVAL + RH(I,J) = spval ENDIF ENDDO ENDDO @@ -167,57 +146,38 @@ END SUBROUTINE CALRH_NAM ! !------------------------------------------------------------------------------------- ! +!> calrh_gfs() computes relative humidity. +!> +!> This routine computes relative humidity given pressure, +!> temperature, specific humidity. an upper and lower bound +!> of 100 and 1 percent relative humidity is enforced. When +!> these bounds are applied the passed specific humidity +!> array is adjusted as necessary to produce the set relative +!> humidity. +!> +!> @param[in] P1 Pressure (pa) +!> @param[in] T1 Temperature (K) +!> @param[in] Q1 Specific humidity (kg/kg) +!> @param[out] RH Relative humidity (decimal form) +!> @param[out] Q1 Specific humidity (kg/kg) +!> +!> ### Program History Log +!> Date | Programmer | Comments +!> -----|------------|--------- +!> ????-??-?? | DENNIS DEAVEN | Initial +!> 1992-12-22 | Russ Treadon | Modified as described above +!> 1998-06-08 | T Black | Conversion from 1-D to 2-D +!> 1998-08-18 | Mike Baldwin | Modify to compute RH over ice as in model +!> 1998-12-16 | Geoff Manikin | undo RH computation over ice +!> 2000-01-04 | Jim Tuccillo | MPI Version +!> 2002-06-11 | Mike Baldwin | WRF Version +!> 2013-08-13 | S. Moorthi | Threading +!> 2006-03-19 | Wen Meng | Modify top pressure to 1 pa +!> +!> @author Russ Treadon W/NP2 @date 1992-12-22 SUBROUTINE CALRH_GFS(P1,T1,Q1,RH) -!$$$ SUBPROGRAM DOCUMENTATION BLOCK -! . . . -! SUBPROGRAM: CALRH COMPUTES RELATIVE HUMIDITY -! PRGRMMR: TREADON ORG: W/NP2 DATE: 92-12-22 -! -! ABSTRACT: -! THIS ROUTINE COMPUTES RELATIVE HUMIDITY GIVEN PRESSURE, -! TEMPERATURE, SPECIFIC HUMIDITY. AN UPPER AND LOWER BOUND -! OF 100 AND 1 PERCENT RELATIVE HUMIDITY IS ENFORCED. WHEN -! THESE BOUNDS ARE APPLIED THE PASSED SPECIFIC HUMIDITY -! ARRAY IS ADJUSTED AS NECESSARY TO PRODUCE THE SET RELATIVE -! HUMIDITY. -! . -! -! PROGRAM HISTORY LOG: -! ??-??-?? DENNIS DEAVEN -! 92-12-22 RUSS TREADON - MODIFIED AS DESCRIBED ABOVE. -! 98-06-08 T BLACK - CONVERSION FROM 1-D TO 2-D -! 98-08-18 MIKE BALDWIN - MODIFY TO COMPUTE RH OVER ICE AS IN MODEL -! 98-12-16 GEOFF MANIKIN - UNDO RH COMPUTATION OVER ICE -! 00-01-04 JIM TUCCILLO - MPI VERSION -! 02-06-11 MIKE BALDWIN - WRF VERSION -! 13-08-13 S. Moorthi - Threading -! 06-03-19 Wen Meng - MODIFY TOP PRESSURE to 1 PA -! -! USAGE: CALL CALRH(P1,T1,Q1,RH) -! INPUT ARGUMENT LIST: -! P1 - PRESSURE (PA) -! T1 - TEMPERATURE (K) -! Q1 - SPECIFIC HUMIDITY (KG/KG) -! -! OUTPUT ARGUMENT LIST: -! RH - RELATIVE HUMIDITY (DECIMAL FORM) -! Q1 - ADJUSTED SPECIFIC HUMIDITY (KG/KG) -! -! OUTPUT FILES: -! NONE -! -! SUBPROGRAMS CALLED: -! UTILITIES: -! LIBRARY: -! NONE -! -! ATTRIBUTES: -! LANGUAGE: FORTRAN -! MACHINE : CRAY C-90 -!$$$ -! use params_mod, only: rhmin - use ctlblk_mod, only: jsta, jend, spval, im + use ctlblk_mod, only: ista, iend, jsta, jend, spval !- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - implicit none ! @@ -234,8 +194,8 @@ SUBROUTINE CALRH_GFS(P1,T1,Q1,RH) ! END FUNCTION FPVSNEW ! END INTERFACE ! - REAL,dimension(IM,jsta:jend),intent(in) :: P1,T1 - REAL,dimension(IM,jsta:jend),intent(inout):: Q1,RH + REAL,dimension(ista:iend,jsta:jend),intent(in) :: P1,T1 + REAL,dimension(ista:iend,jsta:jend),intent(inout):: Q1,RH REAL ES,QC integer :: I,J !*************************************************************** @@ -244,8 +204,8 @@ SUBROUTINE CALRH_GFS(P1,T1,Q1,RH) ! !$omp parallel do private(i,j,es,qc) DO J=JSTA,JEND - DO I=1,IM - IF (T1(I,J) < SPVAL .AND. P1(I,J) < SPVAL.AND.Q1(I,J)/=SPVAL) THEN + DO I=ISTA,IEND + IF (T1(I,J) < spval .AND. P1(I,J) < spval.AND.Q1(I,J)/=spval) THEN ! IF (ABS(P1(I,J)) > 1.0) THEN ! IF (P1(I,J) > 1.0) THEN IF (P1(I,J) >= 1.0) THEN @@ -269,7 +229,7 @@ SUBROUTINE CALRH_GFS(P1,T1,Q1,RH) ENDIF ELSE - RH(I,J) = SPVAL + RH(I,J) = spval ENDIF ENDDO ENDDO @@ -284,18 +244,18 @@ SUBROUTINE CALRH_GSD(P1,T1,Q1,RHB) !------------------------------------------------------------------ ! - use ctlblk_mod, only: jsta, jend, im, spval + use ctlblk_mod, only: ista, iend, jsta, jend, spval implicit none integer :: j, i real :: tx, pol, esx, es, e - real, dimension(im,jsta:jend) :: P1, T1, Q1, RHB + real, dimension(ista:iend,jsta:jend) :: P1, T1, Q1, RHB DO J=JSTA,JEND - DO I=1,IM - IF (T1(I,J) < SPVAL .AND. P1(I,J) < SPVAL .AND. Q1(I,J) < SPVAL) THEN + DO I=ISTA,IEND + IF (T1(I,J) < spval .AND. P1(I,J) < spval .AND. Q1(I,J) < spval) THEN ! - compute relative humidity Tx=T1(I,J)-273.15 POL = 0.99999683 + TX*(-0.90826951E-02 + & @@ -309,7 +269,7 @@ SUBROUTINE CALRH_GSD(P1,T1,Q1,RHB) E = P1(I,J)/100.*Q1(I,J)/(0.62197+Q1(I,J)*0.37803) RHB(I,J) = MIN(1.,E/ES) ELSE - RHB(I,J) = SPVAL + RHB(I,J) = spval ENDIF ENDDO ENDDO @@ -326,13 +286,13 @@ SUBROUTINE CALRH_PW(RHPW) use vrbls3d, only: q, pmid, t use params_mod, only: g - use ctlblk_mod, only: lm, jsta, jend, lm, im, spval + use ctlblk_mod, only: lm, ista, iend, jsta, jend, spval !- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - implicit none real,PARAMETER :: svp1=6.1153,svp2=17.67,svp3=29.65 - REAL, dimension(im,jsta:jend):: PW, PW_SAT, RHPW + REAL, dimension(ista:iend,jsta:jend):: PW, PW_SAT, RHPW REAL deltp,sh,qv,temp,es,qs,qv_sat integer i,j,l,k,ka,kb @@ -343,9 +303,9 @@ SUBROUTINE CALRH_PW(RHPW) DO L=1,LM k=lm-l+1 DO J=JSTA,JEND - DO I=1,IM - if(t(i,j,k) fpvsnew() computes saturation vapor pressure. +!> +!> Compute saturation vapor pressure from the temperature. +!> A linear interpolation is done between values in a lookup table +!> computed in gpvs. See documentation for fpvsx for details. +!> Input values outside table range are reset to table extrema. +!> The interpolation accuracy is almost 6 decimal places. +!> On the Cray, fpvs is about 4 times faster than exact calculation. +!> This function should be expanded inline in the calling routine. +!> +!> @param[in] t Real(krealfp) Temperature in Kelvin. +!> @param[out] fpvsnew Real(krealfp) Saturation vapor pressure in Pascals. +!> +!> ### Program history log: +!> Date | Programmer | Comments +!> -----|------------|--------- +!> 1991-05-07 | Iredell | Initial. Made into inlinable function +!> 1994-12-30 | Iredell | Expand table +!> 1999-03-01 | Iredell | F90 module +!> 2001-02-26 | Iredell | Ice phase +!> +!> @author N Phillips w/NMC2X2 @date 1982-12-30 implicit none integer,parameter:: nxpvs=7501 real,parameter:: con_ttp =2.7316e+2 ! temp at H2O 3pt @@ -486,137 +437,108 @@ elemental function fpvsnew(t) end function fpvsnew ! !------------------------------------------------------------------------------------- -! - +!> calcape() computes CAPE and CINS. +!> +!> This routine computes CAPE and CINS given temperature, +!> pressure, and specific humidty. In "storm and cloud +!> dynamics" (1989, academic press) cotton and anthes define +!> CAPE (equation 9.16, p501) as +!> +!> @code +!> EL +!> CAPE = SUM G * LN(THETAP/THETAA) DZ +!> LCL +!> +!> Where, +!> EL = Equilibrium level, +!> LCL = Lifting condenstation level, +!> G = Gravitational acceleration, +!> THETAP = Lifted parcel potential temperature, +!> THETAA = Ambient potential temperature. +!> @endcode +!> +!> Note that the integrand ln(THETAP/THETAA) approximately +!> equals (THETAP-THETAA)/THETAA. This ratio is often used +!> in the definition of CAPE/CINS. +!> +!> Two types of CAPE/CINS can be computed by this routine. The +!> summation process is the same For both cases. What differs +!> is the definition of the parcel to lift. FOR ITYPE=1 the +!> parcel with the warmest THETA-E in A DPBND pascal layer above +!> the model surface is lifted. the arrays P1D, T1D, and Q1D +!> are not used. For itype=2 the arrays P1D, T1D, and Q1D +!> define the parcel to lift in each column. Both types of +!> CAPE/CINS may be computed in a single execution of the post +!> processor. +!> +!> This algorithm proceeds as follows. +!> For each column, +!> (1) Initialize running CAPE and CINS SUM TO 0.0 +!> (2) Compute temperature and pressure at the LCL using +!> look up table (PTBL). Use either parcel that gives +!> max THETAE in lowest DPBND above ground (ITYPE=1) +!> or given parcel from t1D,Q1D,...(ITYPE=2). +!> (3) Compute the temp of a parcel lifted from the LCL. +!> We know that the parcel's +!> equivalent potential temperature (THESP) remains +!> constant through this process. we can +!> compute tpar using this knowledge using look +!> up table (subroutine TTBLEX). +!> (4) Find the equilibrium level. This is defined as the +!> highest positively buoyant layer. +!> (If there is no positively buoyant layer, CAPE/CINS +!> will be zero) +!> (5) Compute CAPE/CINS. +!> (A) Compute THETAP. We know TPAR and P. +!> (B) Compute THETAA. We know T and P. +!> (6) Add G*(THETAP-THETAA)*DZ to the running CAPE or CINS sum. +!> (A) If THETAP > THETAA, add to the CAPE sum. +!> (B) If THETAP < THETAA, add to the CINS sum. +!> (7) Are we at equilibrium level? +!> (A) If yes, stop the summation. +!> (b) if no, contiunue the summation. +!> (8) Enforce limits on CAPE and CINS (i.e. no negative CAPE) +!> +!> @param[in] ITYPE INTEGER Flag specifying how parcel to lift is identified. See comments above. +!> @param[in] DPBND Depth over which one searches for most unstable parcel. +!> @param[in] P1D Array of pressure of parcels to lift. +!> @param[in] T1D Array of temperature of parcels to lift. +!> @param[in] Q1D Array of specific humidity of parcels to lift. +!> @param[in] L1D Array of model level of parcels to lift. +!> @param[out] CAPE Convective available potential energy (J/kg). +!> @param[out] CINS Convective inhibition (J/kg). +!> @param[out] PPARC Pressure level of parcel lifted when one searches over a particular depth to compute CAPE/CIN. +!> +!> ### Program history log: +!> Date | Programmer | Comments +!> -----|------------|--------- +!> 1993-02-10 | Russ Treadon | Initial +!> 1993-06-19 | Russ Treadon | Generalized routine to allow for type 2 CAPE/CINS calculations +!> 1994-09-23 | Mike Baldwin | Modified to use look up tables instead of complicated equations +!> 1994-10-13 | Mike Baldwin | Modified to continue CAPE/CINS calc up to at highest buoyant layer +!> 1998-06-12 | T Black | Conversion from 1-D TO 2-D +!> 1998-08-18 | T Black | Compute APE internally +!> 2000-01-04 | Jim Tuccillo | MPI Version +!> 2002-01-15 | Mike Baldwin | WRF Version +!> 2003-08-24 | G Manikin | Added level of parcel being lifted as output from the routine and added the depth over which one searches for the most unstable parcel as input +!> 2010-09-09 | G Manikin | Changed computation to use virtual temp added eq lvl hght and thunder parameter +!> 2015-??-?? | S Moorthi | Optimization and threading +!> 2021-07-28 | W Meng | Restrict computation from undefined grids +!> 2021-09-01 | E Colon | Equivalent level height index for RTMA +!> +!> @author Russ Treadon W/NP2 @date 1993-02-10 SUBROUTINE CALCAPE(ITYPE,DPBND,P1D,T1D,Q1D,L1D,CAPE, & CINS,PPARC,ZEQL,THUND) -!$$$ SUBPROGRAM DOCUMENTATION BLOCK -! . . . -! SUBPROGRAM: CALCAPE COMPUTES CAPE AND CINS -! PRGRMMR: TREADON ORG: W/NP2 DATE: 93-02-10 -! -! ABSTRACT: -! -! THIS ROUTINE COMPUTES CAPE AND CINS GIVEN TEMPERATURE, -! PRESSURE, AND SPECIFIC HUMIDTY. IN "STORM AND CLOUD -! DYNAMICS" (1989, ACADEMIC PRESS) COTTON AND ANTHES DEFINE -! CAPE (EQUATION 9.16, P501) AS -! -! EL -! CAPE = SUM G * LN(THETAP/THETAA) DZ -! LCL -! -! WHERE, -! EL = EQUILIBRIUM LEVEL, -! LCL = LIFTING CONDENSTATION LEVEL, -! G = GRAVITATIONAL ACCELERATION, -! THETAP = LIFTED PARCEL POTENTIAL TEMPERATURE, -! THETAA = AMBIENT POTENTIAL TEMPERATURE. -! -! NOTE THAT THE INTEGRAND LN(THETAP/THETAA) APPROXIMATELY -! EQUALS (THETAP-THETAA)/THETAA. THIS RATIO IS OFTEN USED -! IN THE DEFINITION OF CAPE/CINS. -! -! TWO TYPES OF CAPE/CINS CAN BE COMPUTED BY THIS ROUTINE. THE -! SUMMATION PROCESS IS THE SAME FOR BOTH CASES. WHAT DIFFERS -! IS THE DEFINITION OF THE PARCEL TO LIFT. FOR ITYPE=1 THE -! PARCEL WITH THE WARMEST THETA-E IN A DPBND PASCAL LAYER ABOVE -! THE MODEL SURFACE IS LIFTED. THE ARRAYS P1D, T1D, AND Q1D -! ARE NOT USED. FOR ITYPE=2 THE ARRAYS P1D, T1D, AND Q1D -! DEFINE THE PARCEL TO LIFT IN EACH COLUMN. BOTH TYPES OF -! CAPE/CINS MAY BE COMPUTED IN A SINGLE EXECUTION OF THE POST -! PROCESSOR. -! -! THIS ALGORITHM PROCEEDS AS FOLLOWS. -! FOR EACH COLUMN, -! (1) INITIALIZE RUNNING CAPE AND CINS SUM TO 0.0 -! (2) COMPUTE TEMPERATURE AND PRESSURE AT THE LCL USING -! LOOK UP TABLE (PTBL). USE EITHER PARCEL THAT GIVES -! MAX THETAE IN LOWEST DPBND ABOVE GROUND (ITYPE=1) -! OR GIVEN PARCEL FROM T1D,Q1D,...(ITYPE=2). -! (3) COMPUTE THE TEMP OF A PARCEL LIFTED FROM THE LCL. -! WE KNOW THAT THE PARCEL'S -! EQUIVALENT POTENTIAL TEMPERATURE (THESP) REMAINS -! CONSTANT THROUGH THIS PROCESS. WE CAN -! COMPUTE TPAR USING THIS KNOWLEDGE USING LOOK -! UP TABLE (SUBROUTINE TTBLEX). -! (4) FIND THE EQUILIBRIUM LEVEL. THIS IS DEFINED AS THE -! HIGHEST POSITIVELY BUOYANT LAYER. -! (IF THERE IS NO POSITIVELY BUOYANT LAYER, CAPE/CINS -! WILL BE ZERO) -! (5) COMPUTE CAPE/CINS. -! (A) COMPUTE THETAP. WE KNOW TPAR AND P. -! (B) COMPUTE THETAA. WE KNOW T AND P. -! (6) ADD G*(THETAP-THETAA)*DZ TO THE RUNNING CAPE OR CINS SUM. -! (A) IF THETAP > THETAA, ADD TO THE CAPE SUM. -! (B) IF THETAP < THETAA, ADD TO THE CINS SUM. -! (7) ARE WE AT EQUILIBRIUM LEVEL? -! (A) IF YES, STOP THE SUMMATION. -! (B) IF NO, CONTIUNUE THE SUMMATION. -! (8) ENFORCE LIMITS ON CAPE AND CINS (I.E. NO NEGATIVE CAPE) -! -! PROGRAM HISTORY LOG: -! 93-02-10 RUSS TREADON -! 93-06-19 RUSS TREADON - GENERALIZED ROUTINE TO ALLOW FOR -! TYPE 2 CAPE/CINS CALCULATIONS. -! 94-09-23 MIKE BALDWIN - MODIFIED TO USE LOOK UP TABLES -! INSTEAD OF COMPLICATED EQUATIONS. -! 94-10-13 MIKE BALDWIN - MODIFIED TO CONTINUE CAPE/CINS CALC -! UP TO AT HIGHEST BUOYANT LAYER. -! 98-06-12 T BLACK - CONVERSION FROM 1-D TO 2-D -! 98-08-18 T BLACK - COMPUTE APE INTERNALLY -! 00-01-04 JIM TUCCILLO - MPI VERSION -! 02-01-15 MIKE BALDWIN - WRF VERSION -! 03-08-24 G MANIKIN - ADDED LEVEL OF PARCEL BEING LIFTED -! AS OUTPUT FROM THE ROUTINE AND ADDED -! THE DEPTH OVER WHICH ONE SEARCHES FOR -! THE MOST UNSTABLE PARCEL AS INPUT -! 10-09-09 G MANIKIN - CHANGED COMPUTATION TO USE VIRTUAL TEMP -! - ADDED EQ LVL HGHT AND THUNDER PARAMETER -! 15-xx-xx S MOORTHI - optimization and threading -! -! USAGE: CALL CALCAPE(ITYPE,DPBND,P1D,T1D,Q1D,L1D,CAPE, -! CINS,PPARC) -! INPUT ARGUMENT LIST: -! ITYPE - INTEGER FLAG SPECIFYING HOW PARCEL TO LIFT IS -! IDENTIFIED. SEE COMMENTS ABOVE. -! DPBND - DEPTH OVER WHICH ONE SEARCHES FOR MOST UNSTABLE PARCEL -! P1D - ARRAY OF PRESSURE OF PARCELS TO LIFT. -! T1D - ARRAY OF TEMPERATURE OF PARCELS TO LIFT. -! Q1D - ARRAY OF SPECIFIC HUMIDITY OF PARCELS TO LIFT. -! L1D - ARRAY OF MODEL LEVEL OF PARCELS TO LIFT. -! -! OUTPUT ARGUMENT LIST: -! CAPE - CONVECTIVE AVAILABLE POTENTIAL ENERGY (J/KG) -! CINS - CONVECTIVE INHIBITION (J/KG) -! PPARC - PRESSURE LEVEL OF PARCEL LIFTED WHEN ONE SEARCHES -! OVER A PARTICULAR DEPTH TO COMPUTE CAPE/CIN -! -! OUTPUT FILES: -! STDOUT - RUN TIME STANDARD OUT. -! -! SUBPROGRAMS CALLED: -! UTILITIES: -! BOUND - BOUND (CLIP) DATA BETWEEN UPPER AND LOWER LIMTS. -! TTBLEX - LOOKUP TABLE ROUTINE TO GET T FROM THETAE AND P -! -! LIBRARY: -! COMMON - -! -! ATTRIBUTES: -! LANGUAGE: FORTRAN 90 -! MACHINE : CRAY C-90 -!$$$ -! use vrbls3d, only: pmid, t, q, zint - use vrbls2d, only: teql + use vrbls2d, only: teql,ieql use masks, only: lmh use params_mod, only: d00, h1m12, h99999, h10e5, capa, elocp, eps, & oneps, g use lookup_mod, only: thl, rdth, jtb, qs0, sqs, rdq, itb, ptbl, & plq, ttbl, pl, rdp, the0, sthe, rdthe, ttblq, & itbq, jtbq, rdpq, the0q, stheq, rdtheq - use ctlblk_mod, only: jsta_2l, jend_2u, lm, jsta, jend, im, me + use ctlblk_mod, only: jsta_2l, jend_2u, lm, jsta, jend, im, me, spval, & + ista_2l, iend_2u, ista, iend ! !- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - implicit none @@ -628,16 +550,16 @@ SUBROUTINE CALCAPE(ITYPE,DPBND,P1D,T1D,Q1D,L1D,CAPE, & ! integer,intent(in) :: ITYPE real,intent(in) :: DPBND - integer, dimension(IM,Jsta:jend),intent(in) :: L1D - real, dimension(IM,Jsta:jend),intent(in) :: P1D,T1D - real, dimension(IM,jsta:jend),intent(inout) :: Q1D,CAPE,CINS,PPARC,ZEQL + integer, dimension(ista:iend,Jsta:jend),intent(in) :: L1D + real, dimension(ista:iend,Jsta:jend),intent(in) :: P1D,T1D + real, dimension(ista:iend,jsta:jend),intent(inout) :: Q1D,CAPE,CINS,PPARC,ZEQL ! - integer, dimension(im,jsta:jend) :: IEQL, IPTB, ITHTB, PARCEL, KLRES, KHRES, LCL, IDX + integer, dimension(ista:iend,jsta:jend) :: IPTB, ITHTB, PARCEL, KLRES, KHRES, LCL, IDX ! - real, dimension(im,jsta:jend) :: THESP, PSP, CAPE20, QQ, PP, THUND + real, dimension(ista:iend,jsta:jend) :: THESP, PSP, CAPE20, QQ, PP, THUND REAL, ALLOCATABLE :: TPAR(:,:,:) - LOGICAL THUNDER(IM,jsta:jend), NEEDTHUN + LOGICAL THUNDER(ista:iend,jsta:jend), NEEDTHUN real PSFCK,PKL,TBTK,QBTK,APEBTK,TTHBTK,TTHK,APESPK,TPSPK, & BQS00K,SQS00K,BQS10K,SQS10K,BQK,SQK,TQK,PRESK,GDZKL,THETAP, & THETAA,P00K,P10K,P01K,P11K,TTHESK,ESATP,QSATP,TVP,TV @@ -649,7 +571,7 @@ SUBROUTINE CALCAPE(ITYPE,DPBND,P1D,T1D,Q1D,L1D,CAPE, & !************************************************************** ! START CALCAPE HERE. ! - ALLOCATE(TPAR(IM,JSTA_2L:JEND_2U,LM)) + ALLOCATE(TPAR(ISTA_2L:IEND_2U,JSTA_2L:JEND_2U,LM)) ! ! COMPUTE CAPE/CINS ! @@ -673,7 +595,7 @@ SUBROUTINE CALCAPE(ITYPE,DPBND,P1D,T1D,Q1D,L1D,CAPE, & ! !$omp parallel do DO J=JSTA,JEND - DO I=1,IM + DO I=ISTA,IEND CAPE(I,J) = D00 CAPE20(I,J) = D00 CINS(I,J) = D00 @@ -690,7 +612,7 @@ SUBROUTINE CALCAPE(ITYPE,DPBND,P1D,T1D,Q1D,L1D,CAPE, & !$omp parallel do DO L=1,LM DO J=JSTA,JEND - DO I=1,IM + DO I=ISTA,IEND TPAR(I,J,L) = D00 ENDDO ENDDO @@ -703,7 +625,7 @@ SUBROUTINE CALCAPE(ITYPE,DPBND,P1D,T1D,Q1D,L1D,CAPE, & IF (ITYPE == 2) THEN !$omp parallel do private(i,j) DO J=JSTA,JEND - DO I=1,IM + DO I=ISTA,IEND Q1D(I,J) = MIN(MAX(H1M12,Q1D(I,J)),H99999) ENDDO ENDDO @@ -720,9 +642,10 @@ SUBROUTINE CALCAPE(ITYPE,DPBND,P1D,T1D,Q1D,L1D,CAPE, & !$omp & p00k,p01k,p10k,p11k,pkl,psfck,qbtk,sqk,sqs00k, & !$omp & sqs10k,tbtk,tpspk,tqk,tthbtk,tthesk,tthk) DO J=JSTA,JEND - DO I=1,IM + DO I=ISTA,IEND PSFCK = PMID(I,J,NINT(LMH(I,J))) PKL = PMID(I,J,KB) + IF(PSFCKPSFCK)) cycle IF (ITYPE ==2 .OR. & @@ -802,6 +725,7 @@ SUBROUTINE CALCAPE(ITYPE,DPBND,P1D,T1D,Q1D,L1D,CAPE, & PARCEL(I,J) = KB ENDIF END IF + ENDIF !end PSFCK NINT(LMH(I,J))) LCL(I,J) = NINT(LMH(I,J)) IF (ITYPE > 2) THEN IF (T(I,J,LCL(I,J)) < 263.15) THEN @@ -846,7 +770,7 @@ SUBROUTINE CALCAPE(ITYPE,DPBND,P1D,T1D,Q1D,L1D,CAPE, & KNUML = 0 KNUMH = 0 DO J=JSTA,JEND - DO I=1,IM + DO I=ISTA,IEND KLRES(I,J) = 0 KHRES(I,J) = 0 IF(L <= LCL(I,J)) THEN @@ -864,23 +788,23 @@ SUBROUTINE CALCAPE(ITYPE,DPBND,P1D,T1D,Q1D,L1D,CAPE, & !*** COMPUTE PARCEL TEMPERATURE ALONG MOIST ADIABAT FOR PRESSURE 0) THEN - CALL TTBLEX(TPAR(1,JSTA_2L,L),TTBL,ITB,JTB,KLRES & - , PMID(1,JSTA_2L,L),PL,QQ,PP,RDP,THE0,STHE & + CALL TTBLEX(TPAR(ISTA_2L,JSTA_2L,L),TTBL,ITB,JTB,KLRES & + , PMID(ISTA_2L,JSTA_2L,L),PL,QQ,PP,RDP,THE0,STHE & , RDTHE,THESP,IPTB,ITHTB) ENDIF !*** !*** COMPUTE PARCEL TEMPERATURE ALONG MOIST ADIABAT FOR PRESSURE>PLQ !** IF(KNUMH > 0) THEN - CALL TTBLEX(TPAR(1,JSTA_2L,L),TTBLQ,ITBQ,JTBQ,KHRES & - , PMID(1,JSTA_2L,L),PLQ,QQ,PP,RDPQ & + CALL TTBLEX(TPAR(ISTA_2L,JSTA_2L,L),TTBLQ,ITBQ,JTBQ,KHRES & + , PMID(ISTA_2L,JSTA_2L,L),PLQ,QQ,PP,RDPQ & ,THE0Q,STHEQ,RDTHEQ,THESP,IPTB,ITHTB) ENDIF !------------SEARCH FOR EQ LEVEL---------------------------------------- !$omp parallel do private(i,j) DO J=JSTA,JEND - DO I=1,IM + DO I=ISTA,IEND IF(KHRES(I,J) > 0) THEN IF(TPAR(I,J,L) > T(I,J,L)) IEQL(I,J) = L ENDIF @@ -889,7 +813,7 @@ SUBROUTINE CALCAPE(ITYPE,DPBND,P1D,T1D,Q1D,L1D,CAPE, & ! !$omp parallel do private(i,j) DO J=JSTA,JEND - DO I=1,IM + DO I=ISTA,IEND IF(KLRES(I,J) > 0) THEN IF(TPAR(I,J,L) > T(I,J,L) .AND. & PMID(I,J,L)>100.) IEQL(I,J) = L @@ -902,7 +826,7 @@ SUBROUTINE CALCAPE(ITYPE,DPBND,P1D,T1D,Q1D,L1D,CAPE, & LBEG = 1000 LEND = 0 DO J=JSTA,JEND - DO I=1,IM + DO I=ISTA,IEND LBEG = MIN(IEQL(I,J),LBEG) LEND = MAX(LCL(I,J),LEND) ENDDO @@ -910,7 +834,7 @@ SUBROUTINE CALCAPE(ITYPE,DPBND,P1D,T1D,Q1D,L1D,CAPE, & ! !$omp parallel do private(i,j) DO J=JSTA,JEND - DO I=1,IM + DO I=ISTA,IEND IF(T(I,J,IEQL(I,J)) > 255.65) THEN THUNDER(I,J) = .FALSE. ENDIF @@ -921,7 +845,7 @@ SUBROUTINE CALCAPE(ITYPE,DPBND,P1D,T1D,Q1D,L1D,CAPE, & !$omp parallel do private(i,j) DO J=JSTA,JEND - DO I=1,IM + DO I=ISTA,IEND IDX(I,J) = 0 IF(L >= IEQL(I,J).AND.L <= LCL(I,J)) THEN IDX(I,J) = 1 @@ -931,7 +855,7 @@ SUBROUTINE CALCAPE(ITYPE,DPBND,P1D,T1D,Q1D,L1D,CAPE, & ! !$omp parallel do private(i,j,gdzkl,presk,thetaa,thetap,esatp,qsatp,tvp,tv) DO J=JSTA,JEND - DO I=1,IM + DO I=ISTA,IEND IF(IDX(I,J) > 0) THEN PRESK = PMID(I,J,L) GDZKL = (ZINT(I,J,L)-ZINT(I,J,L+1)) * G @@ -962,7 +886,7 @@ SUBROUTINE CALCAPE(ITYPE,DPBND,P1D,T1D,Q1D,L1D,CAPE, & ! !$omp parallel do private(i,j) DO J=JSTA,JEND - DO I=1,IM + DO I=ISTA,IEND CAPE(I,J) = MAX(D00,CAPE(I,J)) CINS(I,J) = MIN(CINS(I,J),D00) ! add equillibrium height @@ -984,141 +908,108 @@ SUBROUTINE CALCAPE(ITYPE,DPBND,P1D,T1D,Q1D,L1D,CAPE, & END SUBROUTINE CALCAPE ! !------------------------------------------------------------------------------------- -! +!> calcape2() computes CAPE and CINS. +!> +!> This routine computes CAPE and CINS given temperature, +!> pressure, and specific humidty. In "storm and cloud +!> dynamics" (1989, academic press) cotton and anthes define +!> CAPE (equation 9.16, p501) as +!> +!> @code +!> EL +!> CAPE = SUM G * ln(THETAP/THETAA) DZ +!> LCL +!> +!> Where, +!> EL = Equilibrium level, +!> LCL = Lifting condenstation level, +!> G = Gravitational acceleration, +!> THETAP = Lifted parcel potential temperature, +!> THETAA = Ambient potential temperature. +!> @endcode +!> +!> Note that the integrand ln(THETAP/THETAA) approximately +!> equals (THETAP-THETAA)/THETAA. This ratio is often used +!> in the definition of CAPE/CINS. +!> +!> Two types of CAPE/CINS can be computed by this routine. The +!> summation process is the same For both cases. What differs +!> is the definition of the parcel to lift. FOR ITYPE=1 the +!> parcel with the warmest THETA-E in A DPBND pascal layer above +!> the model surface is lifted. the arrays P1D, T1D, and Q1D +!> are not used. For itype=2 the arrays P1D, T1D, and Q1D +!> define the parcel to lift in each column. Both types of +!> CAPE/CINS may be computed in a single execution of the post +!> processor. +!> +!> This algorithm proceeds as follows. +!> For each column, +!> (1) Initialize running CAPE and CINS SUM TO 0.0 +!> (2) Compute temperature and pressure at the LCL using +!> look up table (PTBL). Use either parcel that gives +!> max THETAE in lowest DPBND above ground (ITYPE=1) +!> or given parcel from t1D,Q1D,...(ITYPE=2). +!> (3) Compute the temp of a parcel lifted from the LCL. +!> We know that the parcel's +!> equivalent potential temperature (THESP) remains +!> constant through this process. we can +!> compute tpar using this knowledge using look +!> up table (subroutine TTBLEX). +!> (4) Find the equilibrium level. This is defined as the +!> highest positively buoyant layer. +!> (If there is no positively buoyant layer, CAPE/CINS +!> will be zero) +!> (5) Compute CAPE/CINS. +!> (A) Compute THETAP. We know TPAR and P. +!> (B) Compute THETAA. We know T and P. +!> (6) Add G*(THETAP-THETAA)*DZ to the running CAPE or CINS sum. +!> (A) If THETAP > THETAA, add to the CAPE sum. +!> (B) If THETAP < THETAA, add to the CINS sum. +!> (7) Are we at equilibrium level? +!> (A) If yes, stop the summation. +!> (b) if no, contiunue the summation. +!> (8) Enforce limits on CAPE and CINS (i.e. no negative CAPE) +!> +!> @param[in] ITYPE INTEGER Flag specifying how parcel to lift is identified. See comments above. +!> @param[in] DPBND Depth over which one searches for most unstable parcel. +!> @param[in] P1D Array of pressure of parcels to lift. +!> @param[in] T1D Array of temperature of parcels to lift. +!> @param[in] Q1D Array of specific humidity of parcels to lift. +!> @param[in] L1D Array of model level of parcels to lift. +!> @param[out] CAPE Convective available potential energy (J/kg). +!> @param[out] CINS Convective inhibition (J/kg). +!> @param[out] LFC level of free convection (m). +!> @param[out] ESRHL Lower bound to account for effective helicity calculation. +!> @param[out] ESRHH Upper bound to account for effective helicity calculation. +!> @param[out] DCAPE downdraft CAPE (J/KG). +!> @param[out] DGLD Dendritic growth layer depth (m). +!> @param[out] ESP Enhanced stretching potential. +!> +!> ### Program history log: +!> Date | Programmer | Comments +!> -----|------------|--------- +!> 1993-02-10 | Russ Treadon | Initial +!> 1993-06-19 | Russ Treadon | Generalized routine to allow for type 2 CAPE/CINS calculations +!> 1994-09-23 | Mike Baldwin | Modified to use look up tables instead of complicated equations +!> 1994-10-13 | Mike Baldwin | Modified to continue CAPE/CINS calc up to at highest buoyant layer +!> 1998-06-12 | T Black | Conversion from 1-D TO 2-D +!> 1998-08-18 | T Black | Compute APE internally +!> 2000-01-04 | Jim Tuccillo | MPI Version +!> 2002-01-15 | Mike Baldwin | WRF Version +!> 2003-08-24 | G Manikin | Added level of parcel being lifted as output from the routine and added the depth over which one searches for the most unstable parcel as input +!> 2010-09-09 | G Manikin | Changed computation to use virtual temp added eq lvl hght and thunder parameter +!> 2015-??-?? | S Moorthi | Optimization and threading +!> 2021-09-03 | J Meng | Modified to add 0-3km CAPE/CINS, LFC, effective helicity, downdraft CAPE, dendritic growth layer depth, ESP +!> 2021-09-01 | E Colon | Equivalent level height index for RTMA +!> 2022-08-27 | S Trahan | Fixed bug in CALCAPE2 where extreme atmospheric conditions cause an out-of-bounds access +!> 2022-09-01 | S Trahan | Fixed another bug in CALCAPE2 where extreme atmospheric conditions cause an out-of-bounds access +!> +!> @author Russ Treadon W/NP2 @date 1993-02-10 SUBROUTINE CALCAPE2(ITYPE,DPBND,P1D,T1D,Q1D,L1D, & CAPE,CINS,LFC,ESRHL,ESRHH, & DCAPE,DGLD,ESP) -! SUBROUTINE CALCAPE(ITYPE,DPBND,P1D,T1D,Q1D,L1D,CAPE, & -! CINS,PPARC,ZEQL,THUND) -!$$$ SUBPROGRAM DOCUMENTATION BLOCK -! . . . -! SUBPROGRAM: CALCAPE COMPUTES CAPE AND CINS -! PRGRMMR: TREADON ORG: W/NP2 DATE: 93-02-10 -! -! ABSTRACT: -! -! THIS ROUTINE COMPUTES CAPE AND CINS GIVEN TEMPERATURE, -! PRESSURE, AND SPECIFIC HUMIDTY. IN "STORM AND CLOUD -! DYNAMICS" (1989, ACADEMIC PRESS) COTTON AND ANTHES DEFINE -! CAPE (EQUATION 9.16, P501) AS -! -! EL -! CAPE = SUM G * LN(THETAP/THETAA) DZ -! LCL -! -! WHERE, -! EL = EQUILIBRIUM LEVEL, -! LCL = LIFTING CONDENSTATION LEVEL, -! G = GRAVITATIONAL ACCELERATION, -! THETAP = LIFTED PARCEL POTENTIAL TEMPERATURE, -! THETAA = AMBIENT POTENTIAL TEMPERATURE. -! -! NOTE THAT THE INTEGRAND LN(THETAP/THETAA) APPROXIMATELY -! EQUALS (THETAP-THETAA)/THETAA. THIS RATIO IS OFTEN USED -! IN THE DEFINITION OF CAPE/CINS. -! -! TWO TYPES OF CAPE/CINS CAN BE COMPUTED BY THIS ROUTINE. THE -! SUMMATION PROCESS IS THE SAME FOR BOTH CASES. WHAT DIFFERS -! IS THE DEFINITION OF THE PARCEL TO LIFT. FOR ITYPE=1 THE -! PARCEL WITH THE WARMEST THETA-E IN A DPBND PASCAL LAYER ABOVE -! THE MODEL SURFACE IS LIFTED. THE ARRAYS P1D, T1D, AND Q1D -! ARE NOT USED. FOR ITYPE=2 THE ARRAYS P1D, T1D, AND Q1D -! DEFINE THE PARCEL TO LIFT IN EACH COLUMN. BOTH TYPES OF -! CAPE/CINS MAY BE COMPUTED IN A SINGLE EXECUTION OF THE POST -! PROCESSOR. -! -! THIS ALGORITHM PROCEEDS AS FOLLOWS. -! FOR EACH COLUMN, -! (1) INITIALIZE RUNNING CAPE AND CINS SUM TO 0.0 -! (2) COMPUTE TEMPERATURE AND PRESSURE AT THE LCL USING -! LOOK UP TABLE (PTBL). USE EITHER PARCEL THAT GIVES -! MAX THETAE IN LOWEST DPBND ABOVE GROUND (ITYPE=1) -! OR GIVEN PARCEL FROM T1D,Q1D,...(ITYPE=2). -! (3) COMPUTE THE TEMP OF A PARCEL LIFTED FROM THE LCL. -! WE KNOW THAT THE PARCEL'S -! EQUIVALENT POTENTIAL TEMPERATURE (THESP) REMAINS -! CONSTANT THROUGH THIS PROCESS. WE CAN -! COMPUTE TPAR USING THIS KNOWLEDGE USING LOOK -! UP TABLE (SUBROUTINE TTBLEX). -! (4) FIND THE EQUILIBRIUM LEVEL. THIS IS DEFINED AS THE -! HIGHEST POSITIVELY BUOYANT LAYER. -! (IF THERE IS NO POSITIVELY BUOYANT LAYER, CAPE/CINS -! WILL BE ZERO) -! (5) COMPUTE CAPE/CINS. -! (A) COMPUTE THETAP. WE KNOW TPAR AND P. -! (B) COMPUTE THETAA. WE KNOW T AND P. -! (6) ADD G*(THETAP-THETAA)*DZ TO THE RUNNING CAPE OR CINS SUM. -! (A) IF THETAP > THETAA, ADD TO THE CAPE SUM. -! (B) IF THETAP < THETAA, ADD TO THE CINS SUM. -! (7) ARE WE AT EQUILIBRIUM LEVEL? -! (A) IF YES, STOP THE SUMMATION. -! (B) IF NO, CONTIUNUE THE SUMMATION. -! (8) ENFORCE LIMITS ON CAPE AND CINS (I.E. NO NEGATIVE CAPE) -! -! PROGRAM HISTORY LOG: -! 93-02-10 RUSS TREADON -! 93-06-19 RUSS TREADON - GENERALIZED ROUTINE TO ALLOW FOR -! TYPE 2 CAPE/CINS CALCULATIONS. -! 94-09-23 MIKE BALDWIN - MODIFIED TO USE LOOK UP TABLES -! INSTEAD OF COMPLICATED EQUATIONS. -! 94-10-13 MIKE BALDWIN - MODIFIED TO CONTINUE CAPE/CINS CALC -! UP TO AT HIGHEST BUOYANT LAYER. -! 98-06-12 T BLACK - CONVERSION FROM 1-D TO 2-D -! 98-08-18 T BLACK - COMPUTE APE INTERNALLY -! 00-01-04 JIM TUCCILLO - MPI VERSION -! 02-01-15 MIKE BALDWIN - WRF VERSION -! 03-08-24 G MANIKIN - ADDED LEVEL OF PARCEL BEING LIFTED -! AS OUTPUT FROM THE ROUTINE AND ADDED -! THE DEPTH OVER WHICH ONE SEARCHES FOR -! THE MOST UNSTABLE PARCEL AS INPUT -! 10-09-09 G MANIKIN - CHANGED COMPUTATION TO USE VIRTUAL TEMP -! - ADDED EQ LVL HGHT AND THUNDER PARAMETER -! 15-xx-xx S MOORTHI - optimization and threading -! 19-09-03 J MENG - MODIFIED TO ADD 0-3KM CAPE/CINS, LFC, -! EFFECTIVE HELICITY, DOWNDRAFT CAPE, -! DENDRITIC GROWTH LAYER DEPTH, ESP -! -! USAGE: CALL CALCAPE2(ITYPE,DPBND,P1D,T1D,Q1D,L1D, & -! CAPE,CINS,LFC,ESRHL,ESRHH, & -! DCAPE,DGLD,ESP) -! -! INPUT ARGUMENT LIST: -! ITYPE - INTEGER FLAG SPECIFYING HOW PARCEL TO LIFT IS -! IDENTIFIED. SEE COMMENTS ABOVE. -! DPBND - DEPTH OVER WHICH ONE SEARCHES FOR MOST UNSTABLE PARCEL -! P1D - ARRAY OF PRESSURE OF PARCELS TO LIFT. -! T1D - ARRAY OF TEMPERATURE OF PARCELS TO LIFT. -! Q1D - ARRAY OF SPECIFIC HUMIDITY OF PARCELS TO LIFT. -! L1D - ARRAY OF MODEL LEVEL OF PARCELS TO LIFT. -! -! OUTPUT ARGUMENT LIST: -! CAPE - CONVECTIVE AVAILABLE POTENTIAL ENERGY (J/KG) -! CINS - CONVECTIVE INHIBITION (J/KG) -! LFC - LEVEL OF FREE CONVECTION (M) -! ESRHL - LOWER BOUND TO ACCOUNT FOR EFFECTIVE HELICITY CALCULATION -! ESRHH - UPPER BOUND TO ACCOUNT FOR EFFECTIVE HELICITY CALCULATION -! DCAPE - DOWNDRAFT CAPE (J/KG) -! DGLD - DENDRITIC GROWTH LAYER DEPTH (M) -! ESP - ENHANCED STRETCHING POTENTIAL -! -! OUTPUT FILES: -! STDOUT - RUN TIME STANDARD OUT. -! -! SUBPROGRAMS CALLED: -! UTILITIES: -! BOUND - BOUND (CLIP) DATA BETWEEN UPPER AND LOWER LIMTS. -! TTBLEX - LOOKUP TABLE ROUTINE TO GET T FROM THETAE AND P -! -! LIBRARY: -! COMMON - -! -! ATTRIBUTES: -! LANGUAGE: FORTRAN 90 -! MACHINE : CRAY C-90 -!$$$ -! use vrbls3d, only: pmid, t, q, zint - use vrbls2d, only: fis + use vrbls2d, only: fis,ieql use gridspec_mod, only: gridtype use masks, only: lmh use params_mod, only: d00, h1m12, h99999, h10e5, capa, elocp, eps, & @@ -1126,7 +1017,8 @@ SUBROUTINE CALCAPE2(ITYPE,DPBND,P1D,T1D,Q1D,L1D, & use lookup_mod, only: thl, rdth, jtb, qs0, sqs, rdq, itb, ptbl, & plq, ttbl, pl, rdp, the0, sthe, rdthe, ttblq, & itbq, jtbq, rdpq, the0q, stheq, rdtheq - use ctlblk_mod, only: jsta_2l, jend_2u, lm, jsta, jend, im, jm, me, jsta_m, jend_m + use ctlblk_mod, only: jsta_2l, jend_2u, lm, jsta, jend, im, jm, me, jsta_m, jend_m, spval,& + ista_2l, iend_2u, ista, iend, ista_m, iend_m ! !- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - implicit none @@ -1138,25 +1030,25 @@ SUBROUTINE CALCAPE2(ITYPE,DPBND,P1D,T1D,Q1D,L1D, & ! integer,intent(in) :: ITYPE real,intent(in) :: DPBND - integer, dimension(IM,Jsta:jend),intent(in) :: L1D - real, dimension(IM,Jsta:jend),intent(in) :: P1D,T1D -! real, dimension(IM,jsta:jend),intent(inout) :: Q1D,CAPE,CINS,PPARC,ZEQL - real, dimension(IM,jsta:jend),intent(inout) :: Q1D,CAPE,CINS - real, dimension(IM,jsta:jend) :: PPARC,ZEQL - real, dimension(IM,jsta:jend),intent(inout) :: LFC,ESRHL,ESRHH - real, dimension(IM,jsta:jend),intent(inout) :: DCAPE,DGLD,ESP - integer, dimension(im,jsta:jend) ::L12,L17,L3KM + integer, dimension(ista:iend,Jsta:jend),intent(in) :: L1D + real, dimension(ista:iend,Jsta:jend),intent(in) :: P1D,T1D +! real, dimension(ista:iend,jsta:jend),intent(inout) :: Q1D,CAPE,CINS,PPARC,ZEQL + real, dimension(ista:iend,jsta:jend),intent(inout) :: Q1D,CAPE,CINS + real, dimension(ista:iend,jsta:jend) :: PPARC,ZEQL + real, dimension(ista:iend,jsta:jend),intent(inout) :: LFC,ESRHL,ESRHH + real, dimension(ista:iend,jsta:jend),intent(inout) :: DCAPE,DGLD,ESP + integer, dimension(ista:iend,jsta:jend) ::L12,L17,L3KM ! - integer, dimension(im,jsta:jend) :: IEQL, IPTB, ITHTB, PARCEL, KLRES, KHRES, LCL, IDX + integer, dimension(ista:iend,jsta:jend) :: IPTB, ITHTB, PARCEL, KLRES, KHRES, LCL, IDX ! - real, dimension(im,jsta:jend) :: THESP, PSP, CAPE20, QQ, PP, THUND - integer, dimension(im,jsta:jend) :: PARCEL2 - real, dimension(im,jsta:jend) :: THESP2,PSP2 - real, dimension(im,jsta:jend) :: CAPE4,CINS4 + real, dimension(ista:iend,jsta:jend) :: THESP, PSP, CAPE20, QQ, PP, THUND + integer, dimension(ista:iend,jsta:jend) :: PARCEL2 + real, dimension(ista:iend,jsta:jend) :: THESP2,PSP2 + real, dimension(ista:iend,jsta:jend) :: CAPE4,CINS4 REAL, ALLOCATABLE :: TPAR(:,:,:) REAL, ALLOCATABLE :: TPAR2(:,:,:) - LOGICAL THUNDER(IM,jsta:jend), NEEDTHUN + LOGICAL THUNDER(ista:iend,jsta:jend), NEEDTHUN real PSFCK,PKL,TBTK,QBTK,APEBTK,TTHBTK,TTHK,APESPK,TPSPK, & BQS00K,SQS00K,BQS10K,SQS10K,BQK,SQK,TQK,PRESK,GDZKL,THETAP, & THETAA,P00K,P10K,P01K,P11K,TTHESK,ESATP,QSATP,TVP,TV @@ -1165,15 +1057,15 @@ SUBROUTINE CALCAPE2(ITYPE,DPBND,P1D,T1D,Q1D,L1D, & integer I,J,L,KNUML,KNUMH,LBEG,LEND,IQ, KB,ITTBK integer IE,IW,JN,JS,IVE(JM),IVW(JM),JVN,JVS integer ISTART,ISTOP,JSTART,JSTOP - real, dimension(IM,jsta:jend) :: HTSFC + real, dimension(ista:iend,jsta:jend) :: HTSFC ! integer I,J,L,KNUML,KNUMH,LBEG,LEND,IQ,IT,LMHK, KB,ITTBK ! !************************************************************** ! START CALCAPE HERE. ! - ALLOCATE(TPAR(IM,JSTA_2L:JEND_2U,LM)) - ALLOCATE(TPAR2(IM,JSTA_2L:JEND_2U,LM)) + ALLOCATE(TPAR(ISTA_2L:IEND_2U,JSTA_2L:JEND_2U,LM)) + ALLOCATE(TPAR2(ISTA_2L:IEND_2U,JSTA_2L:JEND_2U,LM)) ! ! COMPUTE CAPE/CINS ! @@ -1197,7 +1089,7 @@ SUBROUTINE CALCAPE2(ITYPE,DPBND,P1D,T1D,Q1D,L1D, & ! !$omp parallel do DO J=JSTA,JEND - DO I=1,IM + DO I=ISTA,IEND CAPE(I,J) = D00 CAPE20(I,J) = D00 CAPE4(I,J) = D00 @@ -1225,7 +1117,7 @@ SUBROUTINE CALCAPE2(ITYPE,DPBND,P1D,T1D,Q1D,L1D, & !$omp parallel do DO L=1,LM DO J=JSTA,JEND - DO I=1,IM + DO I=ISTA,IEND TPAR(I,J,L) = D00 TPAR2(I,J,L) = D00 ENDDO @@ -1241,8 +1133,8 @@ SUBROUTINE CALCAPE2(ITYPE,DPBND,P1D,T1D,Q1D,L1D, & IVE(J) = MOD(J,2) IVW(J) = IVE(J)-1 enddo - ISTART = 2 - ISTOP = IM-1 + ISTART = ISTA_M + ISTOP = IEND_M JSTART = JSTA_M JSTOP = JEND_M ELSE IF(gridtype == 'B')THEN @@ -1252,8 +1144,8 @@ SUBROUTINE CALCAPE2(ITYPE,DPBND,P1D,T1D,Q1D,L1D, & IVE(J)=1 IVW(J)=0 enddo - ISTART = 2 - ISTOP = IM-1 + ISTART = ISTA_M + ISTOP = IEND_M JSTART = JSTA_M JSTOP = JEND_M ELSE @@ -1263,13 +1155,13 @@ SUBROUTINE CALCAPE2(ITYPE,DPBND,P1D,T1D,Q1D,L1D, & IVE(J) = 0 IVW(J) = 0 enddo - ISTART = 1 - ISTOP = IM + ISTART = ISTA + ISTOP = IEND JSTART = JSTA JSTOP = JEND END IF !!$omp parallel do private(htsfc,ie,iw) - IF(gridtype /= 'A') CALL EXCH(FIS(1:IM,JSTA:JEND)) + IF(gridtype /= 'A') CALL EXCH(FIS(ISTA:IEND,JSTA:JEND)) DO J=JSTART,JSTOP DO I=ISTART,ISTOP IE = I+IVE(J) @@ -1294,7 +1186,7 @@ SUBROUTINE CALCAPE2(ITYPE,DPBND,P1D,T1D,Q1D,L1D, & IF (ITYPE == 2) THEN !$omp parallel do private(i,j) DO J=JSTA,JEND - DO I=1,IM + DO I=ISTA,IEND Q1D(I,J) = MIN(MAX(H1M12,Q1D(I,J)),H99999) ENDDO ENDDO @@ -1311,7 +1203,7 @@ SUBROUTINE CALCAPE2(ITYPE,DPBND,P1D,T1D,Q1D,L1D, & !$omp & p00k,p01k,p10k,p11k,pkl,psfck,qbtk,sqk,sqs00k, & !$omp & sqs10k,tbtk,tpspk,tqk,tthbtk,tthesk,tthk) DO J=JSTA,JEND - DO I=1,IM + DO I=ISTA,IEND PSFCK = PMID(I,J,NINT(LMH(I,J))) PKL = PMID(I,J,KB) @@ -1407,7 +1299,7 @@ SUBROUTINE CALCAPE2(ITYPE,DPBND,P1D,T1D,Q1D,L1D, & !----FIND THE PRESSURE OF THE PARCEL THAT WAS LIFTED !$omp parallel do private(i,j) DO J=JSTA,JEND - DO I=1,IM + DO I=ISTA,IEND PPARC(I,J) = PMID(I,J,PARCEL(I,J)) ENDDO ENDDO @@ -1418,20 +1310,23 @@ SUBROUTINE CALCAPE2(ITYPE,DPBND,P1D,T1D,Q1D,L1D, & DO L=1,LM !$omp parallel do private(i,j) DO J=JSTA,JEND - DO I=1,IM + DO I=ISTA,IEND IF (PMID(I,J,L) < PSP(I,J)) LCL(I,J) = L+1 ENDDO ENDDO ENDDO !$omp parallel do private(i,j) DO J=JSTA,JEND - DO I=1,IM + DO I=ISTA,IEND IF (LCL(I,J) > NINT(LMH(I,J))) LCL(I,J) = NINT(LMH(I,J)) IF (ITYPE > 2) THEN IF (T(I,J,LCL(I,J)) < 263.15) THEN THUNDER(I,J) = .FALSE. ENDIF ENDIF + + ! Limit LCL to prevent out-of-bounds accesses later + LCL(I,J) = max(min(LCL(I,J),LM-1),1) ENDDO ENDDO !----------------------------------------------------------------------- @@ -1442,7 +1337,7 @@ SUBROUTINE CALCAPE2(ITYPE,DPBND,P1D,T1D,Q1D,L1D, & KNUML = 0 KNUMH = 0 DO J=JSTA,JEND - DO I=1,IM + DO I=ISTA,IEND KLRES(I,J) = 0 KHRES(I,J) = 0 IF(L <= LCL(I,J)) THEN @@ -1460,23 +1355,23 @@ SUBROUTINE CALCAPE2(ITYPE,DPBND,P1D,T1D,Q1D,L1D, & !*** COMPUTE PARCEL TEMPERATURE ALONG MOIST ADIABAT FOR PRESSURE 0) THEN - CALL TTBLEX(TPAR(1,JSTA_2L,L),TTBL,ITB,JTB,KLRES & - , PMID(1,JSTA_2L,L),PL,QQ,PP,RDP,THE0,STHE & + CALL TTBLEX(TPAR(ISTA_2L,JSTA_2L,L),TTBL,ITB,JTB,KLRES & + , PMID(ISTA_2L,JSTA_2L,L),PL,QQ,PP,RDP,THE0,STHE & , RDTHE,THESP,IPTB,ITHTB) ENDIF !*** !*** COMPUTE PARCEL TEMPERATURE ALONG MOIST ADIABAT FOR PRESSURE>PLQ !** IF(KNUMH > 0) THEN - CALL TTBLEX(TPAR(1,JSTA_2L,L),TTBLQ,ITBQ,JTBQ,KHRES & - , PMID(1,JSTA_2L,L),PLQ,QQ,PP,RDPQ & + CALL TTBLEX(TPAR(ISTA_2L,JSTA_2L,L),TTBLQ,ITBQ,JTBQ,KHRES & + , PMID(ISTA_2L,JSTA_2L,L),PLQ,QQ,PP,RDPQ & ,THE0Q,STHEQ,RDTHEQ,THESP,IPTB,ITHTB) ENDIF !------------SEARCH FOR EQ LEVEL---------------------------------------- !$omp parallel do private(i,j) DO J=JSTA,JEND - DO I=1,IM + DO I=ISTA,IEND IF(KHRES(I,J) > 0) THEN IF(TPAR(I,J,L) > T(I,J,L)) IEQL(I,J) = L ENDIF @@ -1485,7 +1380,7 @@ SUBROUTINE CALCAPE2(ITYPE,DPBND,P1D,T1D,Q1D,L1D, & ! !$omp parallel do private(i,j) DO J=JSTA,JEND - DO I=1,IM + DO I=ISTA,IEND IF(KLRES(I,J) > 0) THEN IF(TPAR(I,J,L) > T(I,J,L)) IEQL(I,J) = L ENDIF @@ -1497,7 +1392,7 @@ SUBROUTINE CALCAPE2(ITYPE,DPBND,P1D,T1D,Q1D,L1D, & LBEG = 1000 LEND = 0 DO J=JSTA,JEND - DO I=1,IM + DO I=ISTA,IEND LBEG = MIN(IEQL(I,J),LBEG) LEND = MAX(LCL(I,J),LEND) ENDDO @@ -1505,13 +1400,17 @@ SUBROUTINE CALCAPE2(ITYPE,DPBND,P1D,T1D,Q1D,L1D, & ! !$omp parallel do private(i,j) DO J=JSTA,JEND - DO I=1,IM + DO I=ISTA,IEND IF(T(I,J,IEQL(I,J)) > 255.65) THEN THUNDER(I,J) = .FALSE. ENDIF ENDDO ENDDO ! +!Ensure later calculations do not access LM+1 +! + LEND=MIN(LEND,LM-1) +! !reverse L order from bottom up for ESRH calculation ! ESRHH = LCL @@ -1521,7 +1420,7 @@ SUBROUTINE CALCAPE2(ITYPE,DPBND,P1D,T1D,Q1D,L1D, & !$omp parallel do private(i,j) DO J=JSTA,JEND - DO I=1,IM + DO I=ISTA,IEND IDX(I,J) = 0 IF(L >= IEQL(I,J).AND.L <= LCL(I,J)) THEN IDX(I,J) = 1 @@ -1532,7 +1431,7 @@ SUBROUTINE CALCAPE2(ITYPE,DPBND,P1D,T1D,Q1D,L1D, & !$omp parallel do private(i,j,gdzkl,presk,thetaa,thetap,esatp,qsatp,tvp,tv,& !$omp & presk2,esatp2,qsatp2,tvp2,thetap2,tv2,thetaa2) DO J=JSTA,JEND - DO I=1,IM + DO I=ISTA,IEND IF(IDX(I,J) > 0) THEN PRESK = PMID(I,J,L) GDZKL = (ZINT(I,J,L)-ZINT(I,J,L+1)) * G @@ -1593,7 +1492,7 @@ SUBROUTINE CALCAPE2(ITYPE,DPBND,P1D,T1D,Q1D,L1D, & !$omp parallel do private(i,j) DO J=JSTA,JEND - DO I=1,IM + DO I=ISTA,IEND IF(ESRHH(I,J) > ESRHL(I,J)) ESRHH(I,J)=IEQL(I,J) ENDDO ENDDO @@ -1604,7 +1503,7 @@ SUBROUTINE CALCAPE2(ITYPE,DPBND,P1D,T1D,Q1D,L1D, & ! !$omp parallel do private(i,j) DO J=JSTA,JEND - DO I=1,IM + DO I=ISTA,IEND CAPE(I,J) = MAX(D00,CAPE(I,J)) CINS(I,J) = MIN(CINS(I,J),D00) ! equillibrium height @@ -1632,7 +1531,7 @@ SUBROUTINE CALCAPE2(ITYPE,DPBND,P1D,T1D,Q1D,L1D, & KNUML = 0 KNUMH = 0 DO J=JSTA,JEND - DO I=1,IM + DO I=ISTA,IEND KLRES(I,J) = 0 KHRES(I,J) = 0 PSFCK = PMID(I,J,NINT(LMH(I,J))) @@ -1652,16 +1551,16 @@ SUBROUTINE CALCAPE2(ITYPE,DPBND,P1D,T1D,Q1D,L1D, & !*** COMPUTE PARCEL TEMPERATURE ALONG MOIST ADIABAT FOR PRESSURE 0) THEN - CALL TTBLEX(TPAR2(1,JSTA_2L,L),TTBL,ITB,JTB,KLRES & - , PMID(1,JSTA_2L,L),PL,QQ,PP,RDP,THE0,STHE & + CALL TTBLEX(TPAR2(ISTA_2L,JSTA_2L,L),TTBL,ITB,JTB,KLRES & + , PMID(ISTA_2L,JSTA_2L,L),PL,QQ,PP,RDP,THE0,STHE & , RDTHE,THESP2,IPTB,ITHTB) ENDIF !*** !*** COMPUTE PARCEL TEMPERATURE ALONG MOIST ADIABAT FOR PRESSURE>PLQ !** IF(KNUMH > 0) THEN - CALL TTBLEX(TPAR2(1,JSTA_2L,L),TTBLQ,ITBQ,JTBQ,KHRES & - , PMID(1,JSTA_2L,L),PLQ,QQ,PP,RDPQ & + CALL TTBLEX(TPAR2(ISTA_2L,JSTA_2L,L),TTBLQ,ITBQ,JTBQ,KHRES & + , PMID(ISTA_2L,JSTA_2L,L),PLQ,QQ,PP,RDPQ & , THE0Q,STHEQ,RDTHEQ,THESP2,IPTB,ITHTB) ENDIF ENDDO ! end of do l=lm,1,-1 loop @@ -1672,7 +1571,7 @@ SUBROUTINE CALCAPE2(ITYPE,DPBND,P1D,T1D,Q1D,L1D, & DO L=LBEG,LEND !$omp parallel do private(i,j) DO J=JSTA,JEND - DO I=1,IM + DO I=ISTA,IEND IDX(I,J) = 0 IF(L >= PARCEL2(I,J).AND.L < NINT(LMH(I,J))) THEN IDX(I,J) = 1 @@ -1682,7 +1581,7 @@ SUBROUTINE CALCAPE2(ITYPE,DPBND,P1D,T1D,Q1D,L1D, & ! !$omp parallel do private(i,j,gdzkl,presk,thetaa,thetap,esatp,qsatp,tvp,tv) DO J=JSTA,JEND - DO I=1,IM + DO I=ISTA,IEND IF(IDX(I,J) > 0) THEN PRESK = PMID(I,J,L) GDZKL = (ZINT(I,J,L)-ZINT(I,J,L+1)) * G @@ -1704,7 +1603,7 @@ SUBROUTINE CALCAPE2(ITYPE,DPBND,P1D,T1D,Q1D,L1D, & !$omp parallel do private(i,j) DO J=JSTA,JEND - DO I=1,IM + DO I=ISTA,IEND DCAPE(I,J) = MIN(D00,DCAPE(I,J)) ENDDO ENDDO @@ -1720,7 +1619,7 @@ SUBROUTINE CALCAPE2(ITYPE,DPBND,P1D,T1D,Q1D,L1D, & DO L=LM,1,-1 !$omp parallel do private(i,j) DO J=JSTA,JEND - DO I=1,IM + DO I=ISTA,IEND IF(T(I,J,L) <= TFRZ-12. .AND. L12(I,J)==LM) L12(I,J)=L IF(T(I,J,L) <= TFRZ-17. .AND. L17(I,J)==LM) L17(I,J)=L ENDDO @@ -1728,7 +1627,7 @@ SUBROUTINE CALCAPE2(ITYPE,DPBND,P1D,T1D,Q1D,L1D, & ENDDO !$omp parallel do private(i,j) DO J=JSTA,JEND - DO I=1,IM + DO I=ISTA,IEND IF(L12(I,J)/=LM .AND. L17(I,J)/=LM) THEN DGLD(I,J)=ZINT(I,J,L17(I,J))-ZINT(I,J,L12(I,J)) DGLD(I,J)=MAX(DGLD(I,J),0.) @@ -1744,14 +1643,14 @@ SUBROUTINE CALCAPE2(ITYPE,DPBND,P1D,T1D,Q1D,L1D, & DO L=LM,1,-1 !$omp parallel do private(i,j) DO J=JSTA,JEND - DO I=1,IM + DO I=ISTA,IEND IF(ZINT(I,J,L)-HTSFC(I,J) <= 3000.) L3KM(I,J)=L ENDDO ENDDO ENDDO !$omp parallel do private(i,j) DO J=JSTA,JEND - DO I=1,IM + DO I=ISTA,IEND ESP(I,J) = (CAPE(I,J) / 50.) * (T(I,J,LM) - T(I,J,L3KM(I,J)) - 7.0) IF((T(I,J,LM) - T(I,J,L3KM(I,J))) < 7.0) ESP(I,J) = 0. ! IF(CAPE(I,J) < 250.) ESP(I,J) = 0. @@ -1764,6 +1663,9 @@ SUBROUTINE CALCAPE2(ITYPE,DPBND,P1D,T1D,Q1D,L1D, & END SUBROUTINE CALCAPE2 ! !------------------------------------------------------------------------------------- +! +! +!------------------------------------------------------------------------------------- ! elemental function TVIRTUAL(T,Q) ! @@ -1778,5 +1680,2619 @@ elemental function TVIRTUAL(T,Q) end function TVIRTUAL ! !------------------------------------------------------------------------------------- +! +!> @file +!> @brief Subroutine that computes absolute vorticity. +!> +!> This routine computes the absolute vorticity. +!> +!> @param[in] UWND U wind (m/s) mass-points. +!> @param[in] VWND V wind (m/s) mass-points. +!> @param[out] ABSV absolute vorticity (1/s) mass-points. +!> +!> ### Program history log: +!> Date | Programmer | Comments +!> -----|------------|--------- +!> 1992-12-22 | Russ Treadon | Initial +!> 1998-06-08 | T Black | Convesion from 1-D to 2-D +!> 2000-01-04 | Jim Tuccillo | MPI Version +!> 2002-01-15 | Mike Baldwin | WRF Version C-grid +!> 2005-03-01 | H Chuang | Add NMM E grid +!> 2005-05-17 | H Chuang | Add Potential vorticity calculation +!> 2005-07-07 | B Zhou | Add RSM in computing DVDX, DUDY and UAVG +!> 2013-08-09 | S Moorthi | Optimize the vorticity loop including threading +!> 2016-08-05 | S Moorthi | add zonal filetering +!> 2019-10-17 | Y Mao | Skip calculation when U/V is SPVAL +!> 2020-11-06 | J Meng | Use UPP_MATH Module +!> 2022-05-26 | H Chuang | Use GSL approach for FV3R +!> +!> @author Russ Treadon W/NP2 @date 1992-12-22 + SUBROUTINE CALVOR(UWND,VWND,ABSV) + +! +! + use vrbls2d, only: f + use masks, only: gdlat, gdlon, dx, dy + use params_mod, only: d00, dtr, small, erad + use ctlblk_mod, only: jsta_2l, jend_2u, spval, modelname, global, & + jsta, jend, im, jm, jsta_m, jend_m, gdsdegr,& + ista, iend, ista_m, iend_m, ista_2l, iend_2u, me, num_procs + use gridspec_mod, only: gridtype, dyval + use upp_math, only: DVDXDUDY, DDVDX, DDUDY, UUAVG + + implicit none +! +! DECLARE VARIABLES. +! + REAL, dimension(ista_2l:iend_2u,jsta_2l:jend_2u), intent(in) :: UWND, VWND + REAL, dimension(ista_2l:iend_2u,jsta_2l:jend_2u), intent(inout) :: ABSV + REAL, dimension(IM,2) :: GLATPOLES, COSLPOLES, UPOLES, AVPOLES + REAL, dimension(IM,JSTA:JEND) :: COSLTEMP, AVTEMP +! + real, allocatable :: wrk1(:,:), wrk2(:,:), wrk3(:,:), cosl(:,:) + INTEGER, allocatable :: IHE(:),IHW(:), IE(:),IW(:) +! + integer, parameter :: npass2=2, npass3=3 + integer I,J,ip1,im1,ii,iir,iil,jj,JMT2,imb2, npass, nn, jtem + real R2DX,R2DY,DVDX,DUDY,UAVG,TPH1,TPHI, tx1(im+2), tx2(im+2) +! +!*************************************************************************** +! START CALVOR HERE. +! +! LOOP TO COMPUTE ABSOLUTE VORTICITY FROM WINDS. +! + IF(MODELNAME == 'RAPR') then +!$omp parallel do private(i,j) + DO J=JSTA_2L,JEND_2U + DO I=ISTA_2L,IEND_2U + ABSV(I,J) = D00 + ENDDO + ENDDO + else +!$omp parallel do private(i,j) + DO J=JSTA_2L,JEND_2U + DO I=ISTA_2L,IEND_2U + ABSV(I,J) = SPVAL + ENDDO + ENDDO + endif + +! print*,'dyval in CALVOR= ',DYVAL + + CALL EXCH(UWND) + CALL EXCH(VWND) +! + IF (MODELNAME == 'GFS' .or. global) THEN + CALL EXCH(GDLAT(ISTA_2L,JSTA_2L)) + CALL EXCH(GDLON(ISTA_2L,JSTA_2L)) + + allocate (wrk1(ista:iend,jsta:jend), wrk2(ista:iend,jsta:jend), & + & wrk3(ista:iend,jsta:jend), cosl(ista_2l:iend_2u,jsta_2l:jend_2u)) + allocate(iw(im),ie(im)) + + imb2 = im/2 +!$omp parallel do private(i) + do i=ista,iend + ie(i) = i+1 + iw(i) = i-1 + enddo +! iw(1) = im +! ie(im) = 1 + +! if(1>=jsta .and. 1<=jend)then +! if(cos(gdlat(1,1)*dtr)= SMALL) then + wrk1(i,j) = 1.0 / (ERAD*cosl(i,j)) + else + wrk1(i,j) = 0. + end if + if(i == im .or. i == 1) then + wrk2(i,j) = 1.0 / ((360.+GDLON(ip1,J)-GDLON(im1,J))*DTR) !1/dlam + else + wrk2(i,j) = 1.0 / ((GDLON(ip1,J)-GDLON(im1,J))*DTR) !1/dlam + end if + enddo + enddo +! CALL EXCH(cosl(1,JSTA_2L)) + CALL EXCH(cosl) + + call fullpole( cosl(ista_2l:iend_2u,jsta_2l:jend_2u),coslpoles) + call fullpole(gdlat(ista_2l:iend_2u,jsta_2l:jend_2u),glatpoles) + + if(me==0 ) print*,'CALVOR ',me,glatpoles(ista,1),glatpoles(ista,2) + if(me==num_procs-1) print*,'CALVOR ',me,glatpoles(ista,1),glatpoles(ista,2) + +!$omp parallel do private(i,j,ii) + DO J=JSTA,JEND + if (j == 1) then + if(gdlat(ista,j) > 0.) then ! count from north to south + do i=ista,iend + ii = i + imb2 + if (ii > im) ii = ii - im + ! wrk3(i,j) = 1.0 / ((180.-GDLAT(i,J+1)-GDLAT(II,J))*DTR) !1/dphi + wrk3(i,j) = 1.0 / ((180.-GDLAT(i,J+1)-GLATPOLES(ii,1))*DTR) !1/dphi + enddo + else ! count from south to north + do i=ista,iend + ii = i + imb2 + if (ii > im) ii = ii - im + ! wrk3(i,j) = 1.0 / ((180.+GDLAT(i,J+1)+GDLAT(II,J))*DTR) !1/dphi + wrk3(i,j) = 1.0 / ((180.+GDLAT(i,J+1)+GLATPOLES(ii,1))*DTR) !1/dphi +! + enddo + end if + elseif (j == JM) then + if(gdlat(ista,j) < 0.) then ! count from north to south + do i=ista,iend + ii = i + imb2 + if (ii > im) ii = ii - im + ! wrk3(i,j) = 1.0 / ((180.+GDLAT(i,J-1)+GDLAT(II,J))*DTR) + wrk3(i,j) = 1.0 / ((180.+GDLAT(i,J-1)+GLATPOLES(ii,2))*DTR) + enddo + else ! count from south to north + do i=ista,iend + ii = i + imb2 + if (ii > im) ii = ii - im + ! wrk3(i,j) = 1.0 / ((180.-GDLAT(i,J-1)-GDLAT(II,J))*DTR) + wrk3(i,j) = 1.0 / ((180.-GDLAT(i,J-1)-GLATPOLES(ii,2))*DTR) + enddo + end if + else + do i=ista,iend + wrk3(i,j) = 1.0 / ((GDLAT(I,J-1)-GDLAT(I,J+1))*DTR) !1/dphi + enddo + endif + enddo + + npass = 0 + + jtem = jm / 18 + 1 + + call fullpole(uwnd(ista_2l:iend_2u,jsta_2l:jend_2u),upoles) + +!$omp parallel do private(i,j,ip1,im1,ii,jj,tx1,tx2) + DO J=JSTA,JEND +! npass = npass2 +! if (j > jm-jtem+1 .or. j < jtem) npass = npass3 + IF(J == 1) then ! Near North or South pole + if(gdlat(ista,j) > 0.) then ! count from north to south + IF(cosl(ista,j) >= SMALL) THEN !not a pole point + DO I=ISTA,IEND + ip1 = ie(i) + im1 = iw(i) + ii = i + imb2 + if (ii > im) ii = ii - im + if(VWND(ip1,J)==SPVAL .or. VWND(im1,J)==SPVAL .or. & +! UWND(II,J)==SPVAL .or. UWND(I,J+1)==SPVAL) cycle + UPOLES(II,1)==SPVAL .or. UWND(I,J+1)==SPVAL) cycle + ABSV(I,J) = ((VWND(ip1,J)-VWND(im1,J))*wrk2(i,j) & +! & + (UWND(II,J)*COSL(II,J) & + & + (upoles(II,1)*coslpoles(II,1) & + & + UWND(I,J+1)*COSL(I,J+1))*wrk3(i,j)) * wrk1(i,j) & + & + F(I,J) + enddo + ELSE !pole point, compute at j=2 + jj = 2 + DO I=ISTA,IEND + ip1 = ie(i) + im1 = iw(i) + if(VWND(ip1,JJ)==SPVAL .or. VWND(im1,JJ)==SPVAL .or. & + UWND(I,J)==SPVAL .or. UWND(I,jj+1)==SPVAL) cycle + ABSV(I,J) = ((VWND(ip1,JJ)-VWND(im1,JJ))*wrk2(i,jj) & + & - (UWND(I,J)*COSL(I,J) & + - UWND(I,jj+1)*COSL(I,Jj+1))*wrk3(i,jj)) * wrk1(i,jj) & + & + F(I,Jj) + enddo + ENDIF + else + IF(cosl(ista,j) >= SMALL) THEN !not a pole point + DO I=ISTA,IEND + ip1 = ie(i) + im1 = iw(i) + ii = i + imb2 + if (ii > im) ii = ii - im + if(VWND(ip1,J)==SPVAL .or. VWND(im1,J)==SPVAL .or. & +! UWND(II,J)==SPVAL .or. UWND(I,J+1)==SPVAL) cycle + UPOLES(II,1)==SPVAL .or. UWND(I,J+1)==SPVAL) cycle + ABSV(I,J) = ((VWND(ip1,J)-VWND(im1,J))*wrk2(i,j) & +! & - (UWND(II,J)*COSL(II,J) & + & - (upoles(II,1)*coslpoles(II,1) & + & + UWND(I,J+1)*COSL(I,J+1))*wrk3(i,j)) * wrk1(i,j) & + & + F(I,J) + enddo + ELSE !pole point, compute at j=2 + jj = 2 + DO I=ISTA,IEND + ip1 = ie(i) + im1 = iw(i) + if(VWND(ip1,JJ)==SPVAL .or. VWND(im1,JJ)==SPVAL .or. & + UWND(I,J)==SPVAL .or. UWND(I,jj+1)==SPVAL) cycle + ABSV(I,J) = ((VWND(ip1,JJ)-VWND(im1,JJ))*wrk2(i,jj) & + & + (UWND(I,J)*COSL(I,J) & + - UWND(I,jj+1)*COSL(I,Jj+1))*wrk3(i,jj)) * wrk1(i,jj) & + & + F(I,Jj) + enddo + ENDIF + endif + ELSE IF(J == JM) THEN ! Near North or South Pole + if(gdlat(ista,j) < 0.) then ! count from north to south + IF(cosl(ista,j) >= SMALL) THEN !not a pole point + DO I=ISTA,IEND + ip1 = ie(i) + im1 = iw(i) + ii = i + imb2 + if (ii > im) ii = ii - im + if(VWND(ip1,J)==SPVAL .or. VWND(im1,J)==SPVAL .or. & +! UWND(I,J-1)==SPVAL .or. UWND(II,J)==SPVAL) cycle + UWND(I,J-1)==SPVAL .or. UPOLES(II,2)==SPVAL) cycle + ABSV(I,J) = ((VWND(ip1,J)-VWND(im1,J))*wrk2(i,j) & + & - (UWND(I,J-1)*COSL(I,J-1) & +! & + UWND(II,J)*COSL(II,J))*wrk3(i,j)) * wrk1(i,j) & + & + upoles(II,2)*coslpoles(II,2))*wrk3(i,j)) * wrk1(i,j) & + & + F(I,J) + enddo + ELSE !pole point,compute at jm-1 + jj = jm-1 + DO I=ISTA,IEND + ip1 = ie(i) + im1 = iw(i) + if(VWND(ip1,JJ)==SPVAL .or. VWND(im1,JJ)==SPVAL .or. & + UWND(I,jj-1)==SPVAL .or. UWND(I,J)==SPVAL) cycle + ABSV(I,J) = ((VWND(ip1,JJ)-VWND(im1,JJ))*wrk2(i,jj) & + & - (UWND(I,jj-1)*COSL(I,Jj-1) & + & - UWND(I,J)*COSL(I,J))*wrk3(i,jj)) * wrk1(i,jj) & + & + F(I,Jj) + enddo + ENDIF + else + IF(cosl(ista,j) >= SMALL) THEN !not a pole point + DO I=ISTA,IEND + ip1 = ie(i) + im1 = iw(i) + ii = i + imb2 + if (ii > im) ii = ii - im + if(VWND(ip1,J)==SPVAL .or. VWND(im1,J)==SPVAL .or. & +! UWND(I,J-1)==SPVAL .or. UWND(II,J)==SPVAL) cycle + UWND(I,J-1)==SPVAL .or. UPOLES(II,2)==SPVAL) cycle + ABSV(I,J) = ((VWND(ip1,J)-VWND(im1,J))*wrk2(i,j) & + & + (UWND(I,J-1)*COSL(I,J-1) & +! & + UWND(II,J)*COSL(II,J))*wrk3(i,j)) * wrk1(i,j) & + & + upoles(II,2)*coslpoles(II,2))*wrk3(i,j)) * wrk1(i,j) & + & + F(I,J) + enddo + ELSE !pole point,compute at jm-1 + jj = jm-1 + DO I=ISTA,IEND + ip1 = ie(i) + im1 = iw(i) + if(VWND(ip1,JJ)==SPVAL .or. VWND(im1,JJ)==SPVAL .or. & + UWND(I,jj-1)==SPVAL .or. UWND(I,J)==SPVAL) cycle + ABSV(I,J) = ((VWND(ip1,JJ)-VWND(im1,JJ))*wrk2(i,jj) & + & + (UWND(I,jj-1)*COSL(I,Jj-1) & + & - UWND(I,J)*COSL(I,J))*wrk3(i,jj)) * wrk1(i,jj) & + & + F(I,Jj) + enddo + ENDIF + endif + ELSE + DO I=ISTA,IEND + ip1 = ie(i) + im1 = iw(i) + if(VWND(ip1,J)==SPVAL .or. VWND(im1,J)==SPVAL .or. & + UWND(I,J-1)==SPVAL .or. UWND(I,J+1)==SPVAL) cycle + ABSV(I,J) = ((VWND(ip1,J)-VWND(im1,J))*wrk2(i,j) & + & - (UWND(I,J-1)*COSL(I,J-1) & + - UWND(I,J+1)*COSL(I,J+1))*wrk3(i,j)) * wrk1(i,j) & + + F(I,J) + ENDDO + END IF +! if(ABSV(I,J)>1.0)print*,'Debug CALVOR',i,j,VWND(ip1,J),VWND(im1,J), & +! wrk2(i,j),UWND(I,J-1),COSL(I,J-1),UWND(I,J+1),COSL(I,J+1),wrk3(i,j),cosl(i,j),F(I,J),ABSV(I,J) + if (npass > 0) then + do i=ista,iend + tx1(i) = absv(i,j) + enddo + do nn=1,npass + do i=ista,iend + tx2(i+1) = tx1(i) + enddo + tx2(1) = tx2(im+1) + tx2(im+2) = tx2(2) + do i=2,im+1 + tx1(i-1) = 0.25 * (tx2(i-1) + tx2(i+1)) + 0.5*tx2(i) + enddo + enddo + do i=ista,iend + absv(i,j) = tx1(i) + enddo + endif + END DO ! end of J loop + +! deallocate (wrk1, wrk2, wrk3, cosl) +! GFS use lon avg as one scaler value for pole point + + ! call poleavg(IM,JM,JSTA,JEND,SMALL,COSL(1,jsta),SPVAL,ABSV(1,jsta)) + + call exch(absv(ista_2l:iend_2u,jsta_2l:jend_2u)) + call fullpole(absv(ista_2l:iend_2u,jsta_2l:jend_2u),avpoles) + + cosltemp=spval + if(jsta== 1) cosltemp(1:im, 1)=coslpoles(1:im,1) + if(jend==jm) cosltemp(1:im,jm)=coslpoles(1:im,2) + avtemp=spval + if(jsta== 1) avtemp(1:im, 1)=avpoles(1:im,1) + if(jend==jm) avtemp(1:im,jm)=avpoles(1:im,2) + + call poleavg(IM,JM,JSTA,JEND,SMALL,cosltemp(1,jsta),SPVAL,avtemp(1,jsta)) + + if(jsta== 1) absv(ista:iend, 1)=avtemp(ista:iend, 1) + if(jend==jm) absv(ista:iend,jm)=avtemp(ista:iend,jm) + + deallocate (wrk1, wrk2, wrk3, cosl, iw, ie) + + ELSE !(MODELNAME == 'GFS' .or. global) + + IF (GRIDTYPE == 'B')THEN + CALL EXCH(VWND) + CALL EXCH(UWND) + ENDIF + + CALL DVDXDUDY(UWND,VWND) + + IF(GRIDTYPE == 'A')THEN +!$omp parallel do private(i,j,jmt2,tphi,r2dx,r2dy,dvdx,dudy,uavg) + DO J=JSTA_M,JEND_M + JMT2 = JM/2+1 + TPHI = (J-JMT2)*(DYVAL/gdsdegr)*DTR + DO I=ISTA_M,IEND_M + IF(DDVDX(I,J) CALDIV computes divergence. +!> +!> For GFS, this routine copmutes the horizontal divergence +!> using 2nd-order centered scheme on a lat-lon grid +!> +!> @param[in] UWND U wind (m/s) mass-points. +!> @param[in] VWND V wind (m/s) mass-points. +!> @param[out] DIV divergence (1/s) mass-points. +!> +!> ### Program history log: +!> Date | Programmer | Comments +!> -----|------------|--------- +!> 2016-05-05 | Sajal Kar | Modified CALVORT to compute divergence from wind components +!> 2016-07-22 | S Moorthi | Modified polar divergence calculation +!> +!> @author Sajal Kar W/NP2 @date 2016-05-05 + SUBROUTINE CALDIV(UWND,VWND,DIV) + use masks, only: gdlat, gdlon + use params_mod, only: d00, dtr, small, erad + use ctlblk_mod, only: jsta_2l, jend_2u, spval, modelname, global, & + jsta, jend, im, jm, jsta_m, jend_m, lm, & + ista, iend, ista_m, iend_m, ista_2l, iend_2u + use gridspec_mod, only: gridtype + + implicit none +! +! DECLARE VARIABLES. +! + REAL, dimension(ista_2l:iend_2u,jsta_2l:jend_2u,lm), intent(in) :: UWND,VWND + REAL, dimension(ista:iend,jsta:jend,lm), intent(inout) :: DIV + REAL, dimension(IM,2) :: GLATPOLES, COSLPOLES, UPOLES, VPOLES, DIVPOLES + REAL, dimension(IM,JSTA:JEND) :: COSLTEMP, DIVTEMP +! + real, allocatable :: wrk1(:,:), wrk2(:,:), wrk3(:,:), cosl(:,:) + INTEGER, allocatable :: IHE(:),IHW(:), IE(:),IW(:) +! + real :: dnpole, dspole, tem + integer I,J,ip1,im1,ii,iir,iil,jj,imb2, l +! +!*************************************************************************** +! START CALDIV HERE. +! +! LOOP TO COMPUTE DIVERGENCE FROM WINDS. +! + CALL EXCH(GDLAT(ISTA_2L,JSTA_2L)) + CALL EXCH(GDLON(ISTA_2L,JSTA_2L)) + + allocate (wrk1(ista:iend,jsta:jend), wrk2(ista:iend,jsta:jend), & + & wrk3(ista:iend,jsta:jend), cosl(ista_2l:iend_2u,jsta_2l:jend_2u)) + allocate(iw(im),ie(im)) + + imb2 = im/2 +!$omp parallel do private(i) + do i=ista,iend + ie(i) = i+1 + iw(i) = i-1 + enddo +! iw(1) = im +! ie(im) = 1 + + +!$omp parallel do private(i,j,ip1,im1) + DO J=JSTA,JEND + do i=ista,iend + ip1 = ie(i) + im1 = iw(i) + cosl(i,j) = cos(gdlat(i,j)*dtr) + IF(cosl(i,j) >= SMALL) then + wrk1(i,j) = 1.0 / (ERAD*cosl(i,j)) + else + wrk1(i,j) = 0. + end if + if(i == im .or. i == 1) then + wrk2(i,j) = 1.0 / ((360.+GDLON(ip1,J)-GDLON(im1,J))*DTR) !1/dlam + else + wrk2(i,j) = 1.0 / ((GDLON(ip1,J)-GDLON(im1,J))*DTR) !1/dlam + end if + enddo + ENDDO + + CALL EXCH(cosl) + CALL FULLPOLE(cosl,coslpoles) + CALL FULLPOLE(gdlat(ista_2l:iend_2u,jsta_2l:jend_2u),glatpoles) + +!$omp parallel do private(i,j,ii) + DO J=JSTA,JEND + if (j == 1) then + if(gdlat(ista,j) > 0.) then ! count from north to south + do i=ista,iend + ii = i + imb2 + if (ii > im) ii = ii - im + ! wrk3(i,j) = 1.0 / ((180.-GDLAT(i,J+1)-GDLAT(II,J))*DTR) !1/dphi + wrk3(i,j) = 1.0 / ((180.-GDLAT(i,J+1)-GLATPOLES(II,1))*DTR) !1/dphi + enddo + else ! count from south to north + do i=ista,iend + ii = i + imb2 + if (ii > im) ii = ii - im + ! wrk3(i,j) = 1.0 / ((180.+GDLAT(i,J+1)+GDLAT(II,J))*DTR) !1/dphi + wrk3(i,j) = 1.0 / ((180.+GDLAT(i,J+1)+GLATPOLES(II,1))*DTR) !1/dphi + enddo + end if + elseif (j == JM) then + if(gdlat(ista,j) < 0.) then ! count from north to south + do i=ista,iend + ii = i + imb2 + if (ii > im) ii = ii - im + ! wrk3(i,j) = 1.0 / ((180.+GDLAT(i,J-1)+GDLAT(II,J))*DTR) + wrk3(i,j) = 1.0 / ((180.+GDLAT(i,J-1)+GLATPOLES(II,2))*DTR) + enddo + else ! count from south to north + do i=ista,iend + ii = i + imb2 + if (ii > im) ii = ii - im + ! wrk3(i,j) = 1.0 / ((180.-GDLAT(i,J-1)-GDLAT(II,J))*DTR) + wrk3(i,j) = 1.0 / ((180.-GDLAT(i,J-1)-GLATPOLES(II,2))*DTR) + enddo + end if + else + do i=ista,iend + wrk3(i,j) = 1.0 / ((GDLAT(I,J-1)-GDLAT(I,J+1))*DTR) !1/dphi + enddo + endif + enddo + + do l=1,lm +!$omp parallel do private(i,j) + DO J=JSTA,JEND + DO I=ISTA,IEND + DIV(I,J,l) = SPVAL + ENDDO + ENDDO + + CALL EXCH(VWND(ista_2l,jsta_2l,l)) + CALL EXCH(UWND(ista_2l,jsta_2l,l)) + + CALL FULLPOLE(VWND(ista_2l:iend_2u,jsta_2l:jend_2u,l),VPOLES) + CALL FULLPOLE(UWND(ista_2l:iend_2u,jsta_2l:jend_2u,l),UPOLES) + +!$omp parallel do private(i,j,ip1,im1,ii,jj) + DO J=JSTA,JEND + IF(J == 1) then ! Near North pole + if(gdlat(ista,j) > 0.) then ! count from north to south + IF(cosl(ista,j) >= SMALL) THEN !not a pole point + DO I=ISTA,IEND + ip1 = ie(i) + im1 = iw(i) + ii = i + imb2 + if (ii > im) ii = ii - im + DIV(I,J,l) = ((UWND(ip1,J,l)-UWND(im1,J,l))*wrk2(i,j) & + !& ! - (VWND(II,J,l)*COSL(II,J) & + & - (VPOLES(II,1)*COSLPOLEs(II,1) & + & + VWND(I,J+1,l)*COSL(I,J+1))*wrk3(i,j)) * wrk1(i,j) + enddo +!-- + ELSE !North pole point, compute at j=2 + jj = 2 + do i=ista,iend + ip1 = ie(i) + im1 = iw(i) + DIV(I,J,l) = ((UWND(ip1,jj,l)-UWND(im1,jj,l))*wrk2(i,jj) & + & + (VWND(I,J,l)*COSL(I,J) & + - VWND(I,jj+1,l)*COSL(I,jj+1))*wrk3(i,jj)) * wrk1(i,jj) + enddo +!-- + ENDIF + else + IF(cosl(ista,j) >= SMALL) THEN !not a pole point + DO I=ISTA,IEND + ip1 = ie(i) + im1 = iw(i) + ii = i + imb2 + if (ii > im) ii = ii - im + DIV(I,J,l) = ((UWND(ip1,J,l)-UWND(im1,J,l))*wrk2(i,j) & + !& ! + (VWND(II,J,l)*COSL(II,J) & + & + (VPOLES(II,1)*COSLPOLES(II,1) & + & + VWND(I,J+1,l)*COSL(I,J+1))*wrk3(i,j)) * wrk1(i,j) + enddo +!-- + ELSE !North pole point, compute at j=2 + jj = 2 + do i=ista,iend + ip1 = ie(i) + im1 = iw(i) + DIV(I,J,l) = ((UWND(ip1,jj,l)-UWND(im1,jj,l))*wrk2(i,jj) & + & - (VWND(I,J,l)*COSL(I,J) & + - VWND(I,jj+1,l)*COSL(I,jj+1))*wrk3(i,jj)) * wrk1(i,jj) + enddo + ENDIF + endif + ELSE IF(J == JM) THEN ! Near South pole + if(gdlat(ista,j) < 0.) then ! count from north to south + IF(cosl(ista,j) >= SMALL) THEN !not a pole point + DO I=ISTA,IEND + ip1 = ie(i) + im1 = iw(i) + ii = i + imb2 + if (ii > im) ii = ii - im + DIV(I,J,l) = ((UWND(ip1,J,l)-UWND(im1,J,l))*wrk2(i,j) & + & + (VWND(I,J-1,l)*COSL(I,J-1) & + !& ! + VWND(II,J,l)*COSL(II,J))*wrk3(i,j)) * wrk1(i,j) + & + VPOLES(II,2)*COSLPOLES(II,2))*wrk3(i,j)) * wrk1(i,j) + enddo +!-- + ELSE !South pole point,compute at jm-1 + jj = jm-1 + do i=ista,iend + ip1 = ie(i) + im1 = iw(i) + DIV(I,J,l) = ((UWND(ip1,JJ,l)-UWND(im1,JJ,l))*wrk2(i,jj) & + & + (VWND(I,jj-1,l)*COSL(I,Jj-1) & + & - VWND(I,J,l)*COSL(I,J))*wrk3(i,jj)) * wrk1(i,jj) + + enddo + ENDIF + else + IF(cosl(ista,j) >= SMALL) THEN !not a pole point + DO I=ISTA,IEND + ip1 = ie(i) + im1 = iw(i) + ii = i + imb2 + if (ii > im) ii = ii - im + DIV(I,J,l) = ((UWND(ip1,J,l)-UWND(im1,J,l))*wrk2(i,j) & + & - (VWND(I,J-1,l)*COSL(I,J-1) & + !& ! + VWND(II,J,l)*COSL(II,J))*wrk3(i,j)) * wrk1(i,j) + & + VPOLES(II,2)*COSLPOLES(II,2))*wrk3(i,j)) * wrk1(i,j) + enddo +!-- + ELSE !South pole point,compute at jm-1 + jj = jm-1 + do i=ista,iend + ip1 = ie(i) + im1 = iw(i) + DIV(I,J,l) = ((UWND(ip1,JJ,l)-UWND(im1,JJ,l))*wrk2(i,jj) & + & - (VWND(I,jj-1,l)*COSL(I,Jj-1) & + & - VWND(I,J,l)*COSL(I,J))*wrk3(i,jj)) * wrk1(i,jj) + + enddo + ENDIF + endif + ELSE + DO I=ISTA,IEND + ip1 = ie(i) + im1 = iw(i) + DIV(I,J,l) = ((UWND(ip1,J,l)-UWND(im1,J,l))*wrk2(i,j) & + & + (VWND(I,J-1,l)*COSL(I,J-1) & + - VWND(I,J+1,l)*COSL(I,J+1))*wrk3(i,j)) * wrk1(i,j) +!sk06132016 + if(DIV(I,J,l)>1.0)print*,'Debug in CALDIV',i,j,UWND(ip1,J,l),UWND(im1,J,l), & + & wrk2(i,j),VWND(I,J-1,l),COSL(I,J-1),VWND(I,J+1,l),COSL(I,J+1), & + & wrk3(i,j),wrk1(i,j),DIV(I,J,l) +!-- + ENDDO + ENDIF + ENDDO ! end of J loop + +! GFS use lon avg as one scaler value for pole point +! call poleavg(IM,JM,JSTA,JEND,SMALL,COSL(1,jsta),SPVAL,DIV(1,jsta,l)) + + call exch(div(ista_2l:iend_2u,jsta_2l:jend_2u,l)) + call fullpole(div(ista_2l:iend_2u,jsta_2l:jend_2u,l),divpoles) + + COSLTEMP=SPVAL + IF(JSTA== 1) COSLTEMP(1:IM, 1)=COSLPOLES(1:IM,1) + IF(JEND==JM) COSLTEMP(1:IM,JM)=COSLPOLES(1:IM,2) + DIVTEMP=SPVAL + IF(JSTA== 1) DIVTEMP(1:IM, 1)=DIVPOLES(1:IM,1) + IF(JEND==JM) DIVTEMP(1:IM,JM)=DIVPOLES(1:IM,2) + + call poleavg(IM,JM,JSTA,JEND,SMALL,COSLTEMP(1:IM,JSTA:JEND) & + ,SPVAL,DIVTEMP(1:IM,JSTA:JEND)) + + IF(JSTA== 1) DIV(ISTA:IEND, 1,L)=DIVTEMP(ISTA:IEND, 1) + IF(JEND==JM) DIV(ISTA:IEND,JM,L)=DIVTEMP(ISTA:IEND,JM) + +!sk06142016e + if(DIV(ista,jsta,l)>1.0)print*,'Debug in CALDIV',jsta,DIV(ista,jsta,l) +! print*,'Debug in CALDIV',' jsta= ',jsta,DIV(1,jsta,l) + + enddo ! end of l looop +!-- + deallocate (wrk1, wrk2, wrk3, cosl, iw, ie) + + + END SUBROUTINE CALDIV + + SUBROUTINE CALGRADPS(PS,PSX,PSY) +!> CALGRADPS computes gardients of a scalar field PS or LNPS. +!> +!> For GFS, this routine computes horizontal gradients of PS or LNPS. +!> Using 2nd-order centered scheme on a lat-lon grid. +!> +!> @param[in] PS Surface pressure (Pa) mass-points. +!> @param[out] PSX Zonal gradient of PS at mass-points. +!> @param[out] PSY Meridional gradient of PS at mass-points. +!> +!> ### Program history log: +!> Date | Programmer | Comments +!> -----|------------|--------- +!> 2016-05-05 | Sajal Kar | Reduced from CALVORT to zonal and meridional gradients of given surface pressure PS, or LNPS +!> +!> @author Sajal Kar W/NP2 @date 2016-05-05 + use masks, only: gdlat, gdlon + use params_mod, only: dtr, d00, small, erad + use ctlblk_mod, only: jsta_2l, jend_2u, spval, modelname, global, & + jsta, jend, im, jm, jsta_m, jend_m, & + ista, iend, ista_m, iend_m, ista_2l, iend_2u + + use gridspec_mod, only: gridtype + + implicit none +! +! DECLARE VARIABLES. +! + REAL, dimension(ista_2l:iend_2u,jsta_2l:jend_2u), intent(in) :: PS + REAL, dimension(ista_2l:iend_2u,jsta_2l:jend_2u), intent(inout) :: PSX,PSY +! + real, allocatable :: wrk1(:,:), wrk2(:,:), wrk3(:,:), cosl(:,:) + INTEGER, allocatable :: IHE(:),IHW(:), IE(:),IW(:) +! + integer I,J,ip1,im1,ii,iir,iil,jj,imb2 +! +!*************************************************************************** +! START CALGRADPS HERE. +! +! LOOP TO COMPUTE ZONAL AND MERIDIONAL GRADIENTS OF PS OR LNPS +! +!sk06162016 DO J=JSTA_2L,JEND_2U +!$omp parallel do private(i,j) + DO J=JSTA,JEND + DO I=ISTA,IEND + PSX(I,J) = SPVAL + PSY(I,J) = SPVAL +!sk PSX(I,J) = D00 +!sk PSY(I,J) = D00 + ENDDO + ENDDO + + CALL EXCH(PS) + +! IF (MODELNAME == 'GFS' .or. global) THEN + CALL EXCH(GDLAT(ISTA_2L,JSTA_2L)) + CALL EXCH(GDLON(ISTA_2L,JSTA_2L)) + + allocate (wrk1(ista:iend,jsta:jend), wrk2(ista:iend,jsta:jend), & + & wrk3(ista:iend,jsta:jend), cosl(ista_2l:iend_2u,jsta_2l:jend_2u)) + allocate(iw(im),ie(im)) + + imb2 = im/2 +!$omp parallel do private(i) + do i=ista,iend + ie(i) = i+1 + iw(i) = i-1 + enddo +! iw(1) = im +! ie(im) = 1 + + +!$omp parallel do private(i,j,ip1,im1) + DO J=JSTA,JEND + do i=ista,iend + ip1 = ie(i) + im1 = iw(i) + cosl(i,j) = cos(gdlat(i,j)*dtr) + if(cosl(i,j) >= SMALL) then + wrk1(i,j) = 1.0 / (ERAD*cosl(i,j)) + else + wrk1(i,j) = 0. + end if + if(i == im .or. i == 1) then + wrk2(i,j) = 1.0 / ((360.+GDLON(ip1,J)-GDLON(im1,J))*DTR) !1/dlam + else + wrk2(i,j) = 1.0 / ((GDLON(ip1,J)-GDLON(im1,J))*DTR) !1/dlam + end if + enddo + ENDDO + + CALL EXCH(cosl) + +!$omp parallel do private(i,j,ii) + DO J=JSTA,JEND + if (j == 1) then + if(gdlat(ista,j) > 0.) then ! count from north to south + do i=ista,iend + ii = i + imb2 + if (ii > im) ii = ii - im + wrk3(i,j) = 1.0 / ((180.-GDLAT(i,J+1)-GDLAT(II,J))*DTR) !1/dphi + enddo + else ! count from south to north + do i=ista,iend + ii = i + imb2 + if (ii > im) ii = ii - im + wrk3(i,j) = 1.0 / ((180.+GDLAT(i,J+1)+GDLAT(II,J))*DTR) !1/dphi + enddo + end if + elseif (j == JM) then + if(gdlat(ista,j) < 0.) then ! count from north to south + do i=ista,iend + ii = i + imb2 + if (ii > im) ii = ii - im + wrk3(i,j) = 1.0 / ((180.+GDLAT(i,J-1)+GDLAT(II,J))*DTR) + enddo + else ! count from south to north + do i=ista,iend + ii = i + imb2 + if (ii > im) ii = ii - im + wrk3(i,j) = 1.0 / ((180.-GDLAT(i,J-1)-GDLAT(II,J))*DTR) + enddo + end if + else + do i=ista,iend + wrk3(i,j) = 1.0 / ((GDLAT(I,J-1)-GDLAT(I,J+1))*DTR) !1/dphi + enddo + endif + ENDDO + +!$omp parallel do private(i,j,ip1,im1,ii,jj) + DO J=JSTA,JEND + IF(J == 1) then ! Near North pole + if(gdlat(ista,j) > 0.) then ! count from north to south + IF(cosl(ista,j) >= SMALL) THEN !not a pole point + DO I=ISTA,IEND + ip1 = ie(i) + im1 = iw(i) + ii = i + imb2 + if (ii > im) ii = ii - im + PSX(I,J) = (PS(ip1,J)-PS(im1,J))*wrk2(i,j)*wrk1(i,j) + PSY(I,J) = (PS(II,J)-PS(I,J+1))*wrk3(i,j)/ERAD + enddo + ELSE !North pole point, compute at j=2 + jj = 2 + DO I=ISTA,IEND + ip1 = ie(i) + im1 = iw(i) + PSX(I,J) = (PS(ip1,jj)-PS(im1,jj))*wrk2(i,jj)*wrk1(i,jj) + PSY(I,J) = (PS(I,J)-PS(I,jj+1))*wrk3(i,jj)/ERAD + enddo + ENDIF + else + IF(cosl(ista,j) >= SMALL) THEN !not a pole point + DO I=ISTA,IEND + ip1 = ie(i) + im1 = iw(i) + ii = i + imb2 + if (ii > im) ii = ii - im + PSX(I,J) = (PS(ip1,J)-PS(im1,J))*wrk2(i,j)*wrk1(i,j) + PSY(I,J) = - (PS(II,J)-PS(I,J+1))*wrk3(i,j)/ERAD + enddo + ELSE !North pole point, compute at j=2 + jj = 2 + DO I=ISTA,IEND + ip1 = ie(i) + im1 = iw(i) + PSX(I,J) = (PS(ip1,jj)-PS(im1,jj))*wrk2(i,jj)*wrk1(i,jj) + PSY(I,J) = - (PS(I,J)-PS(I,jj+1))*wrk3(i,jj)/ERAD + enddo + ENDIF + endif + ELSE IF(J == JM) THEN ! Near South pole + if(gdlat(ista,j) < 0.) then ! count from north to south + IF(cosl(ista,j) >= SMALL) THEN !not a pole point + DO I=ISTA,IEND + ip1 = ie(i) + im1 = iw(i) + ii = i + imb2 + if (ii > im) ii = ii - im + PSX(I,J) = (PS(ip1,J)-PS(im1,J))*wrk2(i,j)*wrk1(i,j) + PSY(I,J) = (PS(I,J-1)-PS(II,J))*wrk3(i,j)/ERAD + enddo + ELSE !South pole point,compute at jm-1 + jj = jm-1 + DO I=ISTA,IEND + ip1 = ie(i) + im1 = iw(i) + PSX(I,J) = (PS(ip1,JJ)-PS(im1,JJ))*wrk2(i,jj)*wrk1(i,jj) + PSY(I,J) = (PS(I,jj-1)-PS(I,J))*wrk3(i,jj)/ERAD + enddo + ENDIF + else + IF(cosl(ista,j) >= SMALL) THEN !not a pole point + DO I=ISTA,IEND + ip1 = ie(i) + im1 = iw(i) + ii = i + imb2 + if (ii > im) ii = ii - im + PSX(I,J) = (PS(ip1,J)-PS(im1,J))*wrk2(i,j)*wrk1(i,j) + PSY(I,J) = - (PS(I,J-1)-PS(II,J))*wrk3(i,j)/ERAD + enddo + ELSE !South pole point,compute at jm-1 + jj = jm-1 + DO I=ISTA,IEND + ip1 = ie(i) + im1 = iw(i) + PSX(I,J) = (PS(ip1,JJ)-PS(im1,JJ))*wrk2(i,jj)*wrk1(i,jj) + PSY(I,J) = - (PS(I,jj-1)-PS(I,J))*wrk3(i,jj)/ERAD + enddo + ENDIF + endif + ELSE + DO I=ISTA,IEND + ip1 = ie(i) + im1 = iw(i) + PSX(I,J) = (PS(ip1,J)-PS(im1,J))*wrk2(i,j)*wrk1(i,j) + PSY(I,J) = (PS(I,J-1)-PS(I,J+1))*wrk3(i,j)/ERAD +!sk06142016A + if(PSX(I,J)>100.0)print*,'Debug in CALGRADPS: PSX',i,j,PS(ip1,J),PS(im1,J), & +! print*,'Debug in CALGRADPS',i,j,PS(ip1,J),PS(im1,J), & + & wrk2(i,j),wrk1(i,j),PSX(I,J) + if(PSY(I,J)>100.0)print*,'Debug in CALGRADPS: PSY',i,j,PS(i,J-1),PS(i,J+1), & +! print*,'Debug in CALGRADPS',i,j,PS(i,J-1),PS(i,J+1), & + & wrk3(i,j),ERAD,PSY(I,J) +!-- + ENDDO + END IF +! + ENDDO ! end of J loop + + deallocate (wrk1, wrk2, wrk3, cosl, iw, ie) + +! END IF + + END SUBROUTINE CALGRADPS + +!> calslr_roebber() computes snow solid-liquid-ratio slr using the Roebber algorithm. +!> +!> Obtained the code and data from WPC. WPC's SLR products include SLR computed from +!> GFS and NAM, SLR climotology, and averaged SLR. UPP computes SLR for GFS and RRFS. +!> SLR climatology is not used in UPP calculation but the data is saved in fix directory +!> for reference. Breadboard coefficients are included in this module to enhance the +!> performance. Original Breadboard coefficients files are also saved in fix directory. +!> +!> ### Program history log: +!> Date | Programmer | Comments +!> -----|------------|--------- +!> 2022-07-11 | Jesse Meng | Initial +!> 2023-01-06 | Jesse Meng ! Import Breadboard coefficients into module +!> +!> @author Jesse Meng @date 2022-07-11 + + SUBROUTINE CALSLR_ROEBBER(tprs,rhprs,slr) + + use masks, only: lmh + use vrbls2d, only: slp, avgprec_cont, u10, v10, pshltr, tshltr, qshltr + use vrbls3d, only: T, Q, PMID, PINT + use ctlblk_mod, only: ista, iend, jsta, jend, & + ista_2l, iend_2u, jsta_2l, jend_2u, & + IM, JM, LM, LSM, SPL, MODELNAME, spval, me, idat + use params_mod, only: CAPA, H1, H100 + use grib2_module, only: read_grib2_sngle + + implicit none + + real,dimension(ista_2l:iend_2u,jsta_2l:jend_2u,lsm),intent(in) :: tprs + real,dimension(ista_2l:iend_2u,jsta_2l:jend_2u,lsm),intent(in) :: rhprs + real,dimension(ista_2l:iend_2u,jsta_2l:jend_2u), intent(out) :: slr !slr=snod/weasd=1000./sndens + +! local variables + + character*256 :: climoFile + logical file_exists + integer :: ntot, height + real,dimension(im,jm) :: CLIMO + real,dimension(ista:iend,jsta:jend) :: CLIMOSUB + + real,dimension(ista:iend,jsta:jend) :: P1D,T1D,Q1D,RH1D + real,dimension(ista:iend,jsta:jend) :: T2M,RH2M + + type all_grids + real :: grid + real :: sigma + end type all_grids + + real prob1, prob2, prob3 + real,dimension(0:14), parameter :: sig = & + (/0.0, 1.0, 0.975, 0.95, 0.925, 0.9, 0.875, 0.85, & + 0.8, 0.75, 0.7, 0.65, 0.6, 0.5, 0.4/) + real,dimension(12), parameter :: mf = & + (/1.0, 0.67, 0.33, 0.0, -0.33, -0.67, -1.00, -0.67, -0.33, 0.0, 0.33, 0.67/) + integer, dimension(0:37), parameter :: levels = & + (/2, 1000, 975, 950, 925, 900, 875, 850, 825, 800, 775, 750, 725, 700, & + 675, 650, 625, 600, 575, 550, 525, 500, 475, 450, 425, 400, & + 375, 350, 325, 300, 275, 250, 225, 200, 175, 150, 125, 100/) + + real,dimension(0:14) :: tm, rhm + + real,dimension(0:30), parameter :: co1 = & + (/0.0, -.2926, .0070, -.0099, .0358, .0356, .0353, .0333, .0291, & + .0235, .0169, .0060, -.0009, -.0052, -.0079, -.0093,& + -.0116, -.0137, .0030, .0033, -.0005, -.0024, -.0023,& + -.0021, -.0007, .0013, .0023, .0024, .0012, .0002, -.0010/) + + real,dimension(0:30), parameter :: co2 = & + (/0.0, -9.7961, .0099, -.0222, -.0036, -.0012, .0010, .0018, .0018,& + .0011, -.0001, -.0016, -.0026, -.0021, -.0015, -.0010,& + -.0008, -.0017, .0238, .0213, .0253, .0232, .0183, .0127,& + .0041, -.0063, -.0088, -.0062, -.0029, .0002, .0019/) + + real,dimension(0:30), parameter :: co3 = & + (/0.0, 5.0037, -0.0097, -.0130, -.0170, -.0158, -.0141, -.0097,& + -.0034, .0032, .0104, .0200, .0248, .0273, .0280, .0276,& + .0285, .0308, -.0036, -.0042, -.0013, .0011, .0014, .0023,& + .0011, -.0004, -.0022, -.0030, -.0033, -.0031, -.0019/) + + real,dimension(0:30), parameter :: co4 = & + (/0.0, -5.0141, .0172, -.0267, .0015, .0026, .0033, .0015, -.0007,& + -.0030, -.0063, -.0079, -.0074, -.0055, -.0035, -.0015,& + -.0038, -.0093, .0052, .0059, .0019, -.0022, -.0077, -.0102,& + -.0109, -.0077, .0014, .0160, .0217, .0219, .0190/) + + real,dimension(0:30), parameter :: co5 = & + (/0.0, -5.2807, -.0240, .0228, .0067, .0019, -.0010, -.0003, .0012,& + .0027, .0056, .0067, .0067, .0034, .0005, -.0026, -.0039,& + -.0033, -.0225, -.0152, -.0157, -.0094, .0049, .0138,& + .0269, .0388, .0334, .0147, .0018, -.0066, -.0112/) + + real,dimension(0:30), parameter :: co6 = & + (/0.0, -2.2663, .0983, .3666, .0100, .0062, .0020, -.0008, -.0036,& + -.0052, -.0074, -.0086, -.0072, -.0057, -.0040, -.0011,& + .0006, .0014, .0012, -.0005, -.0019, .0003, -.0007, -.0008,& + .0022, .0005, -.0016, -.0052, -.0024, .0008, .0037/) + + type(all_grids), dimension(ista:iend,jsta:jend,0:lsm) :: tmpk_grids, rh_grids + integer, dimension(ista:iend,jsta:jend,0:lsm) :: tmpk_levels, rh_levels + + real,dimension(ista:iend,jsta:jend) :: hprob,mprob,lprob + real,dimension(ista:iend,jsta:jend) :: slrgrid, slrgrid2 + real,dimension(ista:iend,jsta:jend) :: psfc,pres,qpf,swnd,prp + + character*20 nswFileName + real :: psurf,p,sgw,sg1,sg2,dtds,rhds + real :: f1,f2,f3,f4,f5,f6 + real :: p1,p2,p3 + real :: hprob_tot + real :: mprob_tot + real :: lprob_tot + + integer :: i,j,k,ks,L,LL,imo,iday +! +!*************************************************************************** +! +! day and month of the year + + imo = idat(1) + iday= idat(2) + +! climatology +! currently not used, snoden climatology files saved in fix directory +! +! climoFile='climo_snoden' +! ntot=im*jm +! CLIMO = spval +! CLIMOSUB = spval +! INQUIRE(FILE=climoFile, EXIST=file_exists) +! if(file_exists) then +! print*,trim(climoFile),' FOUND' +! call read_grib2_sngle(climoFile,ntot,height,CLIMO) +! do j=jsta,jend +! do i=ista,iend +! if(CLIMO(i,j).gt.0 .and. CLIMO(i,j).lt.1000) CLIMOSUB(i,j)=1000./CLIMO(i,j) +! endif +! end do +! end do +! else +! print*,trim(climoFile),' NOT FOUND' +! endif !if(file_exist) + +! surface variables + +!$omp parallel do private(i,j) + DO J=JSTA,JEND + DO I=ISTA,IEND + PSFC(I,J)=PINT(I,J,NINT(LMH(I,J))+1) + PRES(I,J)=SLP(I,J) + QPF(I,J)=AVGPREC_CONT(I,J)*3600.*3. + SWND(I,J)=SPVAL + IF(U10(I,J)/=SPVAL .AND. V10(I,J)/=SPVAL) & + SWND(I,J)=SQRT(U10(I,J)*U10(I,J)+V10(I,J)*V10(I,J)) + END DO + END DO + +! T2M and RH2M + +!$omp parallel do private(i,j) + DO J=JSTA,JEND + DO I=ISTA,IEND + IF(MODELNAME=='RAPR')THEN + P1D(I,J) = PMID(I,J,NINT(LMH(I,J))) + T1D(I,J) = T(I,J,NINT(LMH(I,J))) + ELSE + P1D(I,J) = PINT(I,J,LM+1)*EXP(-0.068283/TSHLTR(I,J)) + T1D(I,J) = TSHLTR(I,J)*(PSHLTR(I,J)*1.E-5)**CAPA + ENDIF + Q1D(I,J) = QSHLTR(I,J) + T2M(I,J) = T1D(I,J) + ENDDO + ENDDO + + CALL CALRH(P1D,T1D,Q1D,RH1D) + +!$omp parallel do private(i,j) + DO J=JSTA,JEND + DO I=ISTA,IEND + if(qshltr(i,j) /= spval)then + RH2M(I,J) = RH1D(I,J)*100. + else + RH2M(I,J) = spval + endif + ENDDO + ENDDO + CALL BOUND(RH2M,H1,H100) + +!$omp parallel do private(i,j) + do j=jsta,jend + do i=ista,iend + tmpk_grids(i,j,0)%grid=T2M(I,J)-273.15 + tmpk_levels(i,j,0)=pres(i,j) + rh_grids(i,j,0)%grid=RH2M(I,J) + rh_levels(i,j,0)=pres(i,j) + end do + end do + +! T and RH all pressure levels + + DO L=1,LSM + LL=LSM-L+1 +!!!$omp parallel do private(i,j,ll) + do j=jsta,jend + do i=ista,iend + tmpk_grids(i,j,LL)%grid=tprs(I,J,L)-273.15 + tmpk_levels(i,j,LL)=SPL(L) + rh_grids(i,j,LL)%grid=rhprs(I,J,L) + rh_levels(i,j,LL)=SPL(L) + end do + end do + END DO + +! convert to sigma + + tmpk_grids(:,:,0)%sigma = 1.0 + rh_grids(:,:,0)%sigma = 1.0 + + DO L=1,LSM + LL=LSM-L+1 +!!!$omp parallel do private(i,j,ll) + do j=jsta,jend + do i=ista,iend + if(pres(i,j) == spval) then + tmpk_grids(i,j,LL)%sigma=spval + rh_grids(i,j,LL)%sigma=spval + else + tmpk_grids(i,j,LL)%sigma=tmpk_levels(i,j,LL)/pres(i,j) + rh_grids(i,j,LL)%sigma=rh_levels(i,j,LL)/pres(i,j) + prp(i,j)=pres(i,j)/psfc(i,j) + prp(i,j)=prp(i,j)*100000./psfc(i,j) + endif + end do + end do + END DO + +! main slr i/j loop starts + + do j=jsta,jend + do i=ista,iend + tm=spval + rhm=spval + slr(i,j)=spval + slrgrid(i,j)=spval + slrgrid2(i,j)=spval + hprob(i,j)=spval + mprob(i,j)=spval + lprob(i,j)=spval + + if(pres(i,j)/=spval .and. qpf(i,j)/=spval .and. swnd(i,j)/=spval) then + +! Interpolate T and RH to the 14 sigma levels + + do ks=1,14 + psurf=pres(i,j) + sgw=sig(ks) + p=prp(i,j) + do LL=0,LSM-1 + if(LL==0) then + sg1 = psurf/psurf + else + sg1 = tmpk_levels(i,j,LL)/psurf + endif + sg2 = tmpk_levels(i,j,LL+1)/psurf + + if(sg1 == sgw) then + tm(ks) = tmpk_grids(i,j,LL)%grid + rhm(ks)= rh_grids(i,j,LL)%grid + elseif (sg2 == sgw) then + tm(ks) = tmpk_grids(i,j,LL+1)%grid + rhm(ks)= rh_grids(i,j,LL+1)%grid + elseif ((sgw < sg1) .and. (sgw > sg2)) then + dtds = (tmpk_grids(i,j,LL+1)%grid - tmpk_grids(i,j,LL)%grid)/(sg2-sg1) + tm(ks) = ((sgw - sg1) * dtds) + tmpk_grids(i,j,LL)%grid + rhds = (rh_grids(i,j,LL+1)%grid - rh_grids(i,j,LL)%grid)/(sg2-sg1) + rhm(ks)= ((sgw - sg1) * rhds) + rh_grids(i,j,LL)%grid + endif + end do + end do !loop ks + +! Have surface wind, QPF, and temp/RH on the 14 sigma levels. +! Convert these data to the factors using regression equations + + f1 = co1(1)+co1(2)*qpf(i,j)+co1(3)*swnd(i,j)+co1(4)*tm(1)+co1(5)*tm(2)+co1(6)*tm(3)+ & + co1(7)*tm(4)+co1(8)*tm(5)+co1(9)*tm(6)+co1(10)*tm(7)+co1(11)*tm(8)+ & + co1(12)*tm(9)+co1(13)*tm(10)+co1(14)*tm(11)+co1(15)*tm(12)+co1(16)*tm(13)+ & + co1(17)*tm(14)+co1(18)*rhm(1)+co1(19)*rhm(2)+co1(20)*rhm(3)+co1(21)*rhm(4)+ & + co1(22)*rhm(5)+co1(23)*rhm(6)+co1(24)*rhm(7)+co1(25)*rhm(8)+co1(26)*rhm(9)+ & + co1(27)*rhm(10)+co1(28)*rhm(11)+co1(29)*rhm(12)+co1(30)*rhm(13) + + f2 = co2(1)+co2(2)*qpf(i,j)+co2(3)*swnd(i,j)+co2(4)*tm(1)+co2(5)*tm(2)+co2(6)*tm(3)+ & + co2(7)*tm(4)+co2(8)*tm(5)+co2(9)*tm(6)+co2(10)*tm(7)+co2(11)*tm(8)+ & + co2(12)*tm(9)+co2(13)*tm(10)+co2(14)*tm(11)+co2(15)*tm(12)+co2(16)*tm(13)+ & + co2(17)*tm(14)+co2(18)*rhm(1)+co2(19)*rhm(2)+co2(20)*rhm(3)+co2(21)*rhm(4)+ & + co2(22)*rhm(5)+co2(23)*rhm(6)+co2(24)*rhm(7)+co2(25)*rhm(8)+co2(26)*rhm(9)+ & + co2(27)*rhm(10)+co2(28)*rhm(11)+co2(29)*rhm(12)+co2(30)*rhm(13) + + f3 = co3(1)+co3(2)*qpf(i,j)+co3(3)*swnd(i,j)+co3(4)*tm(1)+co3(5)*tm(2)+co3(6)*tm(3)+ & + co3(7)*tm(4)+co3(8)*tm(5)+co3(9)*tm(6)+co3(10)*tm(7)+co3(11)*tm(8)+ & + co3(12)*tm(9)+co3(13)*tm(10)+co3(14)*tm(11)+co3(15)*tm(12)+co3(16)*tm(13)+ & + co3(17)*tm(14)+co3(18)*rhm(1)+co3(19)*rhm(2)+co3(20)*rhm(3)+co3(21)*rhm(4)+ & + co3(22)*rhm(5)+co3(23)*rhm(6)+co3(24)*rhm(7)+co3(25)*rhm(8)+co3(26)*rhm(9)+ & + co3(27)*rhm(10)+co3(28)*rhm(11)+co3(29)*rhm(12)+co3(30)*rhm(13) + + f4 = co4(1)+co4(2)*qpf(i,j)+co4(3)*swnd(i,j)+co4(4)*tm(1)+co4(5)*tm(2)+co4(6)*tm(3)+ & + co4(7)*tm(4)+co4(8)*tm(5)+co4(9)*tm(6)+co4(10)*tm(7)+co4(11)*tm(8)+ & + co4(12)*tm(9)+co4(13)*tm(10)+co4(14)*tm(11)+co4(15)*tm(12)+co4(16)*tm(13)+ & + co4(17)*tm(14)+co4(18)*rhm(1)+co4(19)*rhm(2)+co4(20)*rhm(3)+co4(21)*rhm(4)+ & + co4(22)*rhm(5)+co4(23)*rhm(6)+co4(24)*rhm(7)+co4(25)*rhm(8)+co4(26)*rhm(9)+ & + co4(27)*rhm(10)+co4(28)*rhm(11)+co4(29)*rhm(12)+co4(30)*rhm(13) + + f5 = co5(1)+co5(2)*qpf(i,j)+co5(3)*swnd(i,j)+co5(4)*tm(1)+co5(5)*tm(2)+co5(6)*tm(3)+ & + co5(7)*tm(4)+co5(8)*tm(5)+co5(9)*tm(6)+co5(10)*tm(7)+co5(11)*tm(8)+ & + co5(12)*tm(9)+co5(13)*tm(10)+co5(14)*tm(11)+co5(15)*tm(12)+co5(16)*tm(13)+ & + co5(17)*tm(14)+co5(18)*rhm(1)+co5(19)*rhm(2)+co5(20)*rhm(3)+co5(21)*rhm(4)+ & + co5(22)*rhm(5)+co5(23)*rhm(6)+co5(24)*rhm(7)+co5(25)*rhm(8)+co5(26)*rhm(9)+ & + co5(27)*rhm(10)+co5(28)*rhm(11)+co5(29)*rhm(12)+co5(30)*rhm(13) + + f6 = co6(1)+co6(2)*qpf(i,j)+co6(3)*swnd(i,j)+co6(4)*tm(1)+co6(5)*tm(2)+co6(6)*tm(3)+ & + co6(7)*tm(4)+co6(8)*tm(5)+co6(9)*tm(6)+co6(10)*tm(7)+co6(11)*tm(8)+ & + co6(12)*tm(9)+co6(13)*tm(10)+co6(14)*tm(11)+co6(15)*tm(12)+co6(16)*tm(13)+ & + co6(17)*tm(14)+co6(18)*rhm(1)+co6(19)*rhm(2)+co6(20)*rhm(3)+co6(21)*rhm(4)+ & + co6(22)*rhm(5)+co6(23)*rhm(6)+co6(24)*rhm(7)+co6(25)*rhm(8)+co6(26)*rhm(9)+ & + co6(27)*rhm(10)+co6(28)*rhm(11)+co6(29)*rhm(12)+co6(30)*rhm(13) + + hprob_tot = 0. + mprob_tot = 0. + lprob_tot = 0. + do k=1,10 + if(k==1) then + nswFileName='Breadboard1.nsw' + call breadboard1_main(nswFileName,mf(imo),f1,f2,f3,f4,f5,f6,p1,p2,p3) + elseif(k==2) then + nswFileName='Breadboard2.nsw' + call breadboard1_main(nswFileName,mf(imo),f1,f2,f3,f4,f5,f6,p1,p2,p3) + elseif(k==3) then + nswFileName='Breadboard3.nsw' + call breadboard1_main(nswFileName,mf(imo),f1,f2,f3,f4,f5,f6,p1,p2,p3) + elseif(k==4) then + nswFileName='Breadboard4.nsw' + call breadboard1_main(nswFileName,mf(imo),f1,f2,f3,f4,f5,f6,p1,p2,p3) + elseif(k==5) then + nswFileName='Breadboard5.nsw' + call breadboard1_main(nswFileName,mf(imo),f1,f2,f3,f4,f5,f6,p1,p2,p3) + elseif(k==6) then + nswFileName='Breadboard6.nsw' + call breadboard6_main(nswFileName,mf(imo),f1,f2,f3,f4,f5,f6,p1,p2,p3) + elseif(k==7) then + nswFileName='Breadboard7.nsw' + call breadboard6_main(nswFileName,mf(imo),f1,f2,f3,f4,f5,f6,p1,p2,p3) + elseif(k==8) then + nswFileName='Breadboard8.nsw' + call breadboard6_main(nswFileName,mf(imo),f1,f2,f3,f4,f5,f6,p1,p2,p3) + elseif(k==9) then + nswFileName='Breadboard9.nsw' + call breadboard6_main(nswFileName,mf(imo),f1,f2,f3,f4,f5,f6,p1,p2,p3) + elseif(k==10) then + nswFileName='Breadboard10.nsw' + call breadboard6_main(nswFileName,mf(imo),f1,f2,f3,f4,f5,f6,p1,p2,p3) + endif + hprob_tot = hprob_tot+p1 + mprob_tot = mprob_tot+p2 + lprob_tot = lprob_tot+p3 + enddo + hprob(i,j) = hprob_tot/10. + mprob(i,j) = mprob_tot/10. + lprob(i,j) = lprob_tot/10. + + if(hprob(i,j) > mprob(i,j) .and. hprob(i,j) > lprob(i,j)) then + slrgrid(i,j) = 8.0 + elseif(mprob(i,j) >= hprob(i,j) .and. mprob(i,j) >= lprob(i,j)) then + slrgrid(i,j) = 13.0 + elseif(lprob(i,j) > hprob(i,j) .and. lprob(i,j) > mprob(i,j)) then + if(lprob(i,j) < .67) then + slrgrid(i,j) = 18.0 + else + slrgrid(i,j) = 27.0 + endif + endif + +! Weighted SLR + + if(lprob(i,j) < .67) then + slrgrid2(i,j) = hprob(i,j)*8.0+mprob(i,j)*13.0+lprob(i,j)*18.0 + slrgrid2(i,j) = slrgrid2(i,j)*p/(hprob(i,j)+mprob(i,j)+lprob(i,j)) + else + slrgrid2(i,j) = hprob(i,j)*8.0+mprob(i,j)*13.0+lprob(i,j)*27.0 + slrgrid2(i,j) = slrgrid2(i,j)*p/(hprob(i,j)+mprob(i,j)+lprob(i,j)) + endif + +! slr(i,j) = climosub(i,j) +! slr(i,j) = slrgrid(i,j) + slr(i,j) = slrgrid2(i,j) + slr(i,j) = max(1.,min(25.,slr(i,j))) + + endif !if(pres(i,j), qpf(i,j), swnd(i,j) /= spval) + enddo + enddo + +! main slr i/j loop ends + + END SUBROUTINE CALSLR_ROEBBER +! +!------------------------------------------------------------------------------------- +! + SUBROUTINE breadboard1_main(nswFileName,mf,f1,f2,f3,f4,f5,f6,p1,p2,p3) + + implicit none + + character*20 nswFileName + real mf, f1, f2, f3, f4, f5, f6 + real p1, p2, p3 + + real f(7) + + real inputFile(2,7) + real inputAxon(7) + real hidden1Axon(40) + real outputAxon(3) + real hidden1Synapse(7,40) + real outputSynapse(40,3) + real activeOutputProbe(2,3) + + real fgrid1(40), fgrid2(3), fgridsum + + integer i,j +! + f(1) = mf + f(2) = f1 + f(3) = f2 + f(4) = f3 + f(5) = f4 + f(6) = f5 + f(7) = f6 + +! Read nsw file and load weights + + inputFile(1,:)=1. + inputFile(2,:)=0. + inputAxon=0. + hidden1Axon=0. + outputAxon=0. + hidden1Synapse=1. + outputSynapse=1. + activeOutputProbe(1,:)=1. + activeOutputProbe(2,:)=0. + + if(trim(nswFileName)=='Breadboard1.nsw') then + call Breadboard1(inputFile,hidden1Axon,hidden1Synapse,outputSynapse) + elseif(trim(nswFileName)=='Breadboard2.nsw') then + call Breadboard2(inputFile,hidden1Axon,hidden1Synapse,outputSynapse) + elseif(trim(nswFileName)=='Breadboard3.nsw') then + call Breadboard3(inputFile,hidden1Axon,hidden1Synapse,outputSynapse) + elseif(trim(nswFileName)=='Breadboard4.nsw') then + call Breadboard4(inputFile,hidden1Axon,hidden1Synapse,outputSynapse) + elseif(trim(nswFileName)=='Breadboard5.nsw') then + call Breadboard5(inputFile,hidden1Axon,hidden1Synapse,outputSynapse) + endif + + if(activeOutputProbe(1,1)==1.) then + do j=1,3 + activeOutputProbe(1,j)=8.999999761581421e-001 + activeOutputProbe(2,j)=5.000000074505806e-002 + enddo + endif + +! Run Network + + do j=1,7 + inputAxon(j) = inputFile(1,j) * f(j) + inputFile(2,j) + enddo + + fgrid1=0. +!$omp parallel do private(i,j) + do j=1,40 + do i=1,7 + fgrid1(j) = fgrid1(j) + hidden1Synapse(i,j) * inputAxon(i) + enddo + fgrid1(j) = fgrid1(j) + hidden1Axon(j) + fgrid1(j) = (exp(fgrid1(j))-exp(-fgrid1(j)))/(exp(fgrid1(j))+exp(-fgrid1(j))) + enddo + + fgrid2=0. + fgridsum=0. + do j=1,3 + do i=1,40 + fgrid2(j) = fgrid2(j) + outputSynapse(i,j) * fgrid1(i) + enddo + fgrid2(j) = fgrid2(j) + outputAxon(j) + fgrid2(j) = exp(fgrid2(j)) + fgridsum = fgridsum + fgrid2(j) + enddo + do j=1,3 + fgrid2(j) = fgrid2(j) / fgridsum +! fgrid2(j) = activeOutputProbe(1,j) * fgrid2(j) + activeOutputProbe(2,j) + enddo + + p1 = fgrid2(1) + p2 = fgrid2(2) + p3 = fgrid2(3) + + END SUBROUTINE breadboard1_main +! +!------------------------------------------------------------------------------------- +! + SUBROUTINE breadboard6_main(nswFileName,mf,f1,f2,f3,f4,f5,f6,p1,p2,p3) + + implicit none + + character*20 nswFileName + real mf, f1, f2, f3, f4, f5, f6 + real p1, p2, p3 + + real f(7) + + real inputFile(2,7) + real inputAxon(7) + real hidden1Axon(7) + real hidden2Axon(4) + real outputAxon(3) + real hidden1Synapse(7,7) + real hidden2Synapse(7,4) + real outputSynapse(4,3) + real activeOutputProbe(2,3) + + real fgrid1(7), fgrid2(4), fgrid3(3), fgridsum + + integer i,j +! + f(1) = mf + f(2) = f1 + f(3) = f2 + f(4) = f3 + f(5) = f4 + f(6) = f5 + f(7) = f6 +! + inputFile(1,:)=1. + inputFile(2,:)=0. + inputAxon=0. + hidden1Axon=0. + hidden2Axon=0. + outputAxon=0. + hidden1Synapse=1. + hidden2Synapse=1. + outputSynapse=1. + activeOutputProbe(1,:)=1. + activeOutputProbe(2,:)=0. + + if(trim(nswFileName)=='Breadboard6.nsw') then + call Breadboard6(inputFile,hidden1Axon,hidden2Axon,& + hidden1Synapse,hidden2Synapse,outputSynapse) + elseif(trim(nswFileName)=='Breadboard7.nsw') then + call Breadboard7(inputFile,hidden1Axon,hidden2Axon,& + hidden1Synapse,hidden2Synapse,outputSynapse) + elseif(trim(nswFileName)=='Breadboard8.nsw') then + call Breadboard8(inputFile,hidden1Axon,hidden2Axon,& + hidden1Synapse,hidden2Synapse,outputSynapse) + elseif(trim(nswFileName)=='Breadboard9.nsw') then + call Breadboard9(inputFile,hidden1Axon,hidden2Axon,& + hidden1Synapse,hidden2Synapse,outputSynapse) + elseif(trim(nswFileName)=='Breadboard10.nsw') then + call Breadboard10(inputFile,hidden1Axon,hidden2Axon,& + hidden1Synapse,hidden2Synapse,outputSynapse) + endif + + if(activeOutputProbe(1,1)==1.) then + do j=1,3 + activeOutputProbe(1,j)=8.999999761581421e-001 + activeOutputProbe(2,j)=5.000000074505806e-002 + enddo + endif + +! Run Network + + do j=1,7 + inputAxon(j) = inputFile(1,j) * f(j) + inputFile(2,j) + enddo + + fgrid1=0. +!$omp parallel do private(i,j) + do j=1,7 + do i=1,7 + fgrid1(j) = fgrid1(j) + hidden1Synapse(i,j) * inputAxon(i) + enddo + fgrid1(j) = fgrid1(j) + hidden1Axon(j) + fgrid1(j) = (exp(fgrid1(j))-exp(-fgrid1(j)))/(exp(fgrid1(j))+exp(-fgrid1(j))) + enddo + + fgrid2=0. +!$omp parallel do private(i,j) + do j=1,4 + do i=1,7 + fgrid2(j) = fgrid2(j) + hidden2Synapse(i,j) * fgrid1(i) + enddo + fgrid2(j) = fgrid2(j) + hidden2Axon(j) + fgrid2(j) = (exp(fgrid2(j))-exp(-fgrid2(j)))/(exp(fgrid2(j))+exp(-fgrid2(j))) + enddo + + fgrid3=0. + fgridsum=0. + do j=1,3 + do i=1,4 + fgrid3(j) = fgrid3(j) + outputSynapse(i,j) * fgrid2(i) + enddo + fgrid3(j) = fgrid3(j) + outputAxon(j) + fgrid3(j) = exp(fgrid3(j)) + fgridsum = fgridsum + fgrid3(j) + enddo + do j=1,3 + fgrid3(j) = fgrid3(j) / fgridsum +! fgrid3(j) = activeOutputProbe(1,j) * fgrid3(j) + activeOutputProbe(2,j) + enddo + + p1 = fgrid3(1) + p2 = fgrid3(2) + p3 = fgrid3(3) + + END SUBROUTINE breadboard6_main +! +!------------------------------------------------------------------------------ +! + SUBROUTINE Breadboard1(inputFile,hidden1Axon,hidden1Synapse,outputSynapse) + + implicit none + + real inputFile(2,7) + real hidden1Axon(40) + real hidden1Synapse(7,40) + real outputSynapse(40,3) + + inputFile = reshape((/ & + 1.077844262123108E+00, -1.778443008661270E-01,& + 2.295625507831573E-01, 6.163756549358368E-02,& + 2.081887423992157E-01, 6.210270524024963E-01,& + 3.646677434444427E-01, 1.214343756437302E-01,& + 2.430133521556854E-01, 3.004860281944275E-01,& + 1.935067623853683E-01, 4.185551702976227E-01,& + 1.962280571460724E-01, -4.804643988609314E-01 & + /), shape(inputFile)) + + hidden1Axon = & + (/-1.150484442710876E+00, -1.461968779563904E+00, 1.349107265472412E+00, 6.686212420463562E-01,& + -8.486616015434265E-01, -1.908162593841553E+00, -1.514992356300354E+00, -1.632351636886597E+00,& + -1.794843912124634E+00, 1.354879975318909E+00, 1.389558911323547E+00, 1.464104652404785E+00,& + 1.896052122116089E+00, 1.401677846908569E+00, 1.436681509017944E+00, -1.590880393981934E+00,& + -1.070504426956177E+00, 2.047163248062134E+00, 1.564107656478882E+00, 1.298712372779846E+00,& + -1.316817998886108E+00, -1.253177642822266E+00, -1.392926216125488E+00, 7.356406450271606E-01,& + 1.594561100006104E+00, -1.532955884933472E+00, -1.021214842796326E+00, 1.341110348701477E+00,& + 6.124811172485352E-01, 1.415654063224792E+00, -8.509962558746338E-01, 1.753035664558411E+00,& + 6.275475621223450E-01, 1.482843875885010E+00, 1.326028347015381E+00, 1.641556143760681E+00,& + 1.339018464088440E+00, -1.374068379402161E+00, -1.220067739486694E+00, 1.714797854423523E+00/) + + hidden1Synapse = reshape((/ & + -4.612099826335907E-01, -3.177818655967712E-01, -2.800635099411011E-01, -6.984808295965195E-02,& + 6.583837419748306E-02, -5.769817233085632E-01, 3.955098092556000E-01, -1.624705344438553E-01,& + -2.889076173305511E-01, -9.411631226539612E-01, -5.058886408805847E-01, -3.110982775688171E-01,& + -3.723000884056091E-01, 8.419776558876038E-01, 2.598794996738434E-01, -1.364605724811554E-01,& + 9.416468143463135E-01, -4.025689139962196E-02, 4.176554381847382E-01, 1.196979433298111E-01,& + -3.846398293972015E-01, -1.414917409420013E-01, -2.344214916229248E+00, -3.556166291236877E-01,& + -7.762963771820068E-01, -1.243659138679504E+00, 4.907984733581543E-01, -1.891903519630432E+00,& + -5.802390575408936E-01, -5.546363592147827E-01, -4.520095884799957E-01, -2.473797500133514E-01,& + -7.757837772369385E-01, -5.350160598754883E-01, 1.817676275968552E-01, -1.932217180728912E-01,& + 5.944451093673706E-01, -6.568105518817902E-02, -1.562235504388809E-01, 4.926294833421707E-02,& + -6.931540369987488E-01, 7.082754969596863E-01, -3.878217563033104E-02, 5.063381195068359E-01,& + -7.642447352409363E-01, -2.539043128490448E-01, -4.328470230102539E-01, -4.773662984371185E-01,& + 6.699458956718445E-01, -1.670347154140472E-01, 6.986252665519714E-01, -6.806275844573975E-01,& + 1.059119179844856E-01, 5.320579931139946E-02, -4.806780517101288E-01, 7.601988911628723E-01,& + -1.864496916532516E-01, -3.076690435409546E-01, -6.505665779113770E-01, 7.355872541666031E-02,& + -4.033335149288177E-01, -2.168276757001877E-01, 5.354191064834595E-01, 2.991014420986176E-01,& + 4.275756180286407E-01, 6.465418934822083E-01, -1.401910781860352E-01, 5.381527543067932E-01,& + 9.247279167175293E-01, -3.687029778957367E-01, 6.354923844337463E-01, -1.423558890819550E-01,& + 9.430686831474304E-01, 1.187003701925278E-01, 5.426434278488159E-01, 7.573884129524231E-01,& + 3.361994773149490E-02, 3.300542756915092E-02, -4.439333379268646E-01, 5.953744649887085E-01,& + 3.412617444992065E-01, 1.421828866004944E-01, 5.224847793579102E-01, -8.267756700515747E-01,& + 5.009499788284302E-01, 2.736742198467255E-01, 8.603093624114990E-01, 9.373022615909576E-02,& + 1.714528501033783E-01, 9.114132076501846E-02, -1.638108491897583E-01, 5.879403948783875E-01,& + 5.585592240095139E-03, 8.149939179420471E-01, -1.340572237968445E-01, 3.880683779716492E-01,& + 3.857498764991760E-01, -8.105239868164062E-01, 5.239543914794922E-01, 7.420576363801956E-02,& + 7.694411277770996E-01, -3.954831138253212E-02, 5.615213513374329E-01, 4.560695886611938E-01,& + -5.006425976753235E-01, -4.725854694843292E-01, 5.887325108051300E-02, -3.199687898159027E-01,& + -5.229111015796661E-02, -6.034490466117859E-01, -8.414428234100342E-01, 1.826022863388062E-01,& + -6.954011321067810E-01, -5.277091860771179E-01, -9.834931492805481E-01, -2.964940369129181E-01,& + 1.752081327140331E-02, -2.412298470735550E-01, 5.861807465553284E-01, 3.650662600994110E-01,& + -1.846716850996017E-01, 3.277707397937775E-01, 1.213769540190697E-01, 1.398152709007263E-01,& + 1.624975651502609E-01, -7.172397375106812E-01, -4.065496101975441E-02, -1.131931394338608E-01,& + 7.050336003303528E-01, 3.453079611063004E-02, 5.642467141151428E-01, 7.171959280967712E-01,& + -3.295499980449677E-01, 5.192958116531372E-01, 7.558688521385193E-01, 6.164067387580872E-01,& + -1.597565859556198E-01, 1.512383669614792E-01, 5.231227278709412E-01, -2.199545800685883E-01,& + -3.987313508987427E-01, -9.710572957992554E-01, -4.689137935638428E-01, -4.037811756134033E-01,& + -4.528387784957886E-01, -4.784810543060303E-01, 1.759306043386459E-01, 7.449938654899597E-01,& + 1.120681285858154E+00, -5.609570741653442E-01, 1.393345594406128E+00, 1.374282408505678E-02,& + -2.458193153142929E-01, 1.237058401107788E+00, -4.854794219136238E-02, -6.664386391639709E-01,& + -8.786886334419250E-01, -3.208510577678680E-01, -4.315690398216248E-01, -5.186472535133362E-01,& + -2.117208093404770E-01, 8.998587727546692E-02, 7.763032317161560E-01, 1.078992128372192E+00,& + 3.667660653591156E-01, 5.805531740188599E-01, 1.517073512077332E-01, 9.344519972801208E-01,& + 3.396262824535370E-01, 2.450248003005981E-01, 9.134629368782043E-01, 7.127542048692703E-02,& + -1.287281513214111E-01, 3.953699469566345E-01, -4.097535610198975E-01, -5.983641743659973E-01,& + 4.500437378883362E-01, -8.147508651018143E-02, -7.916551083326340E-02, -1.505649089813232E-01,& + -1.703914403915405E-01, 1.294612526893616E+00, -4.859757721424103E-01, -1.034098416566849E-01,& + -6.859915256500244E-01, 4.521823674440384E-02, 3.100419938564301E-01, -9.373775720596313E-01,& + 5.841451883316040E-01, 7.020491957664490E-01, -1.681403964757919E-01, 6.397892832756042E-01,& + 1.168430075049400E-01, 4.124156236648560E-01, 5.404921174049377E-01, -3.311195969581604E-01,& + -3.494578003883362E-01, 1.379718184471130E+00, 2.731607258319855E-01, 5.512273311614990E-01,& + 2.997024357318878E-01, 3.475511670112610E-01, 6.777516603469849E-01, 1.471205204725266E-01,& + 1.011002138257027E-01, 8.974244594573975E-01, 8.688372373580933E-02, 4.767233729362488E-01,& + 9.785303473472595E-01, -2.200428694486618E-01, -6.173372268676758E-01, -8.801369071006775E-01,& + -1.111719012260437E+00, -3.223371803760529E-01, -6.491173505783081E-01, -3.894545435905457E-01,& + -2.843862473964691E-01, 7.331426739692688E-01, -3.287445753812790E-02, -5.741032306104898E-03,& + 6.212961673736572E-01, 3.749484941363335E-02, 6.244438700377941E-03, -6.228777766227722E-01,& + -4.667133837938309E-02, 2.016694307327271E+00, 2.834755480289459E-01, 6.229624748229980E-01,& + 6.552317738533020E-01, -9.771268069744110E-02, 7.506207823753357E-01, 6.942567825317383E-01,& + -1.662521809339523E-01, 3.003259599208832E-01, -2.531996071338654E-01, 2.399661689996719E-01,& + 5.109554529190063E-01, -7.031706571578979E-01, 2.836774885654449E-01, 4.888223409652710E-01,& + 1.384589523077011E-01, -3.524579405784607E-01, -2.050135582685471E-01, 1.160808563232422E+00,& + -4.008938968181610E-01, 1.656456440687180E-01, -5.116114616394043E-01, 8.800522685050964E-01,& + 6.836380064487457E-02, -5.902936309576035E-02, 5.672354102134705E-01, -7.219299674034119E-01,& + 3.463289514183998E-02, -1.044675827026367E+00, -8.341925591230392E-02, -3.036961853504181E-01,& + -5.605638027191162E-01, 5.722484588623047E-01, -1.604338049888611E+00, -5.696258544921875E-01,& + -2.531512081623077E-01, -4.675458073616028E-01, -6.486019492149353E-01, -2.437075823545456E-01,& + -2.898264527320862E-01, 3.836293518543243E-01, 4.061043560504913E-01, 3.909072279930115E-01,& + -8.113911151885986E-01, 1.260317683219910E+00, -3.924282491207123E-01, 3.586370870471001E-02,& + 7.703443765640259E-01, 6.714462637901306E-01, -4.909946396946907E-02, 3.536651730537415E-01,& + 1.900762617588043E-01, 3.638494014739990E-01, 2.248179465532303E-01, -6.255846619606018E-01 & + /), shape(hidden1Synapse)) + + outputSynapse = reshape((/ & + -4.825605154037476E-01, -1.119017243385315E+00, 5.116804838180542E-01, -6.694142222404480E-01,& + -5.718530416488647E-01, -7.233589291572571E-01, -8.200560212135315E-01, -6.121573448181152E-01,& + -1.034205436706543E+00, 1.015549778938293E+00, 1.183975338935852E+00, 5.342597365379333E-01,& + 1.186208128929138E+00, 7.657266259193420E-01, 9.990772604942322E-01, -1.051267385482788E+00,& + -7.288008332252502E-01, 9.447612762451172E-01, 6.943449974060059E-01, 5.248318314552307E-01,& + -1.042970657348633E+00, -4.857340827584267E-04, -8.969252705574036E-01, 5.206210613250732E-01,& + 7.825390100479126E-01, -3.175100982189178E-01, -7.697273492813110E-01, 3.042222857475281E-01,& + 7.400255203247070E-01, 1.082547545433044E+00, -1.058874249458313E+00, 3.296852707862854E-01,& + 9.955985546112061E-01, 7.361931800842285E-01, 8.618848919868469E-01, 7.109408378601074E-01,& + 1.148022636771202E-01, -6.803723573684692E-01, -4.462003335356712E-02, 7.384030222892761E-01,& + -2.215545326471329E-01, -8.702403903007507E-01, 8.234908580780029E-01, 6.819239258766174E-01,& + -4.687527120113373E-01, -6.959788203239441E-01, -6.105158329010010E-01, -7.225347757339478E-01,& + -7.860832810401917E-01, 5.608791112899780E-01, 9.937217235565186E-01, 6.797130703926086E-01,& + 8.231667280197144E-01, 1.115462303161621E+00, 5.290299654006958E-01, -4.602016210556030E-01,& + -5.394889116287231E-01, 1.053055644035339E+00, 9.533493518829346E-01, 8.694807887077332E-01,& + -4.802323281764984E-01, -1.070514082908630E+00, -8.236010670661926E-01, 7.932062149047852E-01,& + 1.111655592918396E+00, -1.025945305824280E+00, -2.268178462982178E-01, 6.432797908782959E-01,& + 2.442117929458618E-01, 7.986634969711304E-01, -3.561095297336578E-01, 1.058865070343018E+00,& + 6.459046602249146E-01, 4.042869210243225E-01, 2.976681292057037E-02, 1.033244490623474E+00,& + 9.110773205757141E-01, -6.528528332710266E-01, -8.971995115280151E-01, 1.046785235404968E+00,& + -5.487565994262695E-01, -1.033755183219910E+00, 5.164890289306641E-01, 1.108534336090088E+00,& + -2.507440149784088E-01, -1.150385260581970E+00, -1.040475010871887E+00, -1.114320755004883E+00,& + -9.695596694946289E-01, 9.147439599037170E-01, 3.035557866096497E-01, 1.044997453689575E+00,& + 1.059857130050659E+00, 7.304399013519287E-01, 1.102171182632446E+00, -9.304327964782715E-01,& + -5.997116565704346E-01, 1.120478868484497E+00, 6.444569826126099E-01, 2.137384265661240E-01,& + -4.117920994758606E-01, -1.000458717346191E+00, -2.041520774364471E-01, -1.859422773122787E-01,& + 3.711319267749786E-01, -9.141649603843689E-01, -7.499164938926697E-01, 9.900025129318237E-01,& + -2.189985066652298E-01, 8.942219614982605E-01, -3.195305764675140E-01, 6.445295810699463E-01,& + -2.110123336315155E-01, 9.763143658638000E-01, 8.833498954772949E-01, 1.071311354637146E+00,& + 1.134591102600098E+00, -4.175429344177246E-01, -6.000540852546692E-01, 7.281569838523865E-01 & + /), shape(outputSynapse)) + + END SUBROUTINE Breadboard1 +! +!------------------------------------------------------------------------------ +! + SUBROUTINE Breadboard2(inputFile,hidden1Axon,hidden1Synapse,outputSynapse) + + implicit none + + real inputFile(2,7) + real hidden1Axon(40) + real hidden1Synapse(7,40) + real outputSynapse(40,3) + + inputFile = reshape((/ & + 1.077844262123108E+00, -1.778443008661270E-01,& + 2.188449800014496E-01, 1.674167998135090E-02,& + 1.868382692337036E-01, 6.490761637687683E-01,& + 3.361344337463379E-01, 4.151264205574989E-02,& + 2.621995508670807E-01, 2.531536519527435E-01,& + 1.944894641637802E-01, 3.221717774868011E-01,& + 3.179650008678436E-01, -2.033386379480362E-01 & + /), shape(inputFile)) + + hidden1Axon = & + (/-9.235364943742752E-02, -5.511198639869690E-01, 1.012191653251648E+00, -1.148184835910797E-01,& + -8.399781584739685E-01, -4.726789295673370E-01, 7.570160627365112E-01, -3.985013365745544E-01,& + 1.164000511169434E+00, 2.212587594985962E-01, 9.570528268814087E-01, -1.504407286643982E+00,& + -1.262813359498978E-01, 9.741528630256653E-01, 2.278975844383240E-01, -3.282702267169952E-01,& + 1.716251969337463E-01, 4.979004263877869E-01, 6.414948105812073E-01, -2.775986790657043E-01,& + -6.721665859222412E-01, 7.226511836051941E-01, -1.020949006080627E+00, -9.638186097145081E-01,& + 4.050622135400772E-02, -8.287806510925293E-01, -2.900803685188293E-01, 1.004199028015137E+00,& + -1.221053838729858E+00, -5.891714692115784E-01, -6.459002494812012E-01, 8.228222727775574E-01,& + 1.921370178461075E-01, 1.575044542551041E-01, -9.904603362083435E-01, 1.186665743589401E-01,& + 1.871918141841888E-01, -6.121324300765991E-01, 1.056765243411064E-01, -5.654883384704590E-01/) + + hidden1Synapse = reshape((/ & + -5.215738341212273E-02, 6.958795785903931E-01, -3.700282871723175E-01, 4.440588057041168E-01,& + -9.248711913824081E-02, 9.709199517965317E-02, 1.255098581314087E-01, -1.359838247299194E-01,& + 3.981630802154541E-01, -4.047442674636841E-01, -5.247595906257629E-01, -5.138890147209167E-01,& + 2.293408364057541E-01, 5.139534473419189E-01, 2.035804986953735E-01, 3.003124892711639E-01,& + -2.340262830257416E-01, 3.037432730197906E-01, 4.666079878807068E-01, 3.753643631935120E-01,& + -5.292671918869019E-02, 3.674933612346649E-01, 3.854512274265289E-01, 1.749511361122131E-01,& + 1.320011764764786E-01, 2.418431788682938E-01, 1.245125234127045E-01, -2.677426636219025E-01,& + 3.884479776024818E-02, -1.385747641324997E-01, -3.117613494396210E-01, 3.016934990882874E-01,& + -2.856997251510620E-01, -4.838032424449921E-01, 4.488031566143036E-01, -3.862534165382385E-01,& + 2.520084977149963E-01, -6.066129356622696E-02, -2.037643343210220E-01, -9.749407321214676E-02,& + 1.909288167953491E-01, -2.689029574394226E-01, 8.022837042808533E-01, 4.543448388576508E-01,& + 1.268999278545380E-01, 2.794430553913116E-01, 4.331161379814148E-01, -1.717756092548370E-01,& + -5.167780518531799E-01, 6.074145808815956E-02, 2.141399085521698E-01, -3.536535203456879E-01,& + -2.548796236515045E-01, -4.349331259727478E-01, 3.771509276703000E-03, 1.351494044065475E-01,& + 8.080910146236420E-02, -2.638687789440155E-01, 1.792310923337936E-01, -5.317723155021667E-01,& + 6.300682574510574E-02, 1.391339004039764E-01, -6.581404209136963E-01, 1.574699729681015E-01,& + -5.979638695716858E-01, -6.864693760871887E-01, -6.892689466476440E-01, -1.189238503575325E-01,& + -1.904999166727066E-01, -4.838389158248901E-01, 4.585682973265648E-02, 3.201213181018829E-01,& + 5.204908251762390E-01, -3.531241044402122E-02, 4.392628967761993E-01, 4.307939708232880E-01,& + -4.227218031883240E-02, 1.247199028730392E-01, 1.489800363779068E-01, -3.146159052848816E-01,& + 2.637389600276947E-01, -8.966535329818726E-02, 2.010040730237961E-01, 3.161593675613403E-01,& + -8.221558481454849E-02, -4.601925909519196E-01, -3.832246661186218E-01, 2.877672016620636E-01,& + -1.351716276258230E-02, -5.320604424923658E-03, -3.493662178516388E-02, -1.777663826942444E-01,& + -1.865815520286560E-01, 6.387206912040710E-01, -4.405377805233002E-01, 4.452396631240845E-01,& + -1.245370283722878E-01, -2.323225736618042E-01, 1.697962284088135E-01, 1.118463352322578E-01,& + -2.475701570510864E-01, -3.791887685656548E-02, 5.509998202323914E-01, 1.247667223215103E-01,& + 3.189268708229065E-01, -3.584641516208649E-01, 8.915060758590698E-01, 9.720049053430557E-02,& + -1.117252558469772E-01, 3.543806076049805E-01, -2.351483702659607E-01, 5.283502340316772E-01,& + 1.746209561824799E-01, 1.741478294134140E-01, 2.738423347473145E-01, 3.764865398406982E-01,& + 3.486587703227997E-01, -3.462808132171631E-01, 9.324266910552979E-01, 2.155355364084244E-01,& + -5.171442404389381E-02, 6.311618685722351E-01, -1.088170856237411E-01, 4.840107262134552E-01,& + -2.310744374990463E-01, -3.167505562305450E-01, -2.271509468555450E-01, -2.800688743591309E-01,& + 4.713648185133934E-02, -1.575807780027390E-01, 3.583298251032829E-02, -3.308865129947662E-01,& + -2.662795484066010E-01, 1.894978582859039E-01, 7.474141567945480E-02, -1.493624746799469E-01,& + -1.482628136873245E-01, -1.058527529239655E-01, -3.737696707248688E-01, -1.093639135360718E-01,& + -4.270362555980682E-01, 1.249950975179672E-01, -1.971846818923950E-01, 3.135327398777008E-01,& + 4.604682624340057E-01, -4.614944458007812E-01, 4.820220768451691E-01, 3.806282877922058E-01,& + 3.629744052886963E-01, 3.986520171165466E-01, -2.283873707056046E-01, 1.246029064059258E-01,& + 3.940442204475403E-01, 2.390366494655609E-01, 8.402416110038757E-02, 3.498363792896271E-01,& + -3.888027667999268E-01, 2.272991091012955E-01, -3.421411216259003E-01, 1.273499727249146E-01,& + 1.342627108097076E-01, 1.159043312072754E-01, 1.274240911006927E-01, -2.915177941322327E-01,& + 6.415430903434753E-01, 1.699399948120117E-01, -6.556300520896912E-01, 9.605846554040909E-02,& + 3.632318377494812E-01, -3.854629993438721E-01, -3.860571384429932E-01, -1.257066577672958E-01,& + -1.186188161373138E-01, -1.368320286273956E-01, -2.300722897052765E-01, -4.762146174907684E-01,& + -3.621844053268433E-01, -4.978014528751373E-02, -1.940275430679321E-01, -1.588442362844944E-02,& + -1.519876420497894E-01, 1.312368810176849E-01, 1.862339228391647E-01, 6.462548375129700E-01,& + 5.544137358665466E-01, -3.416634351015091E-02, 9.995899349451065E-02, -6.969342380762100E-02,& + -1.428494304418564E-01, 2.647481858730316E-01, 1.083492934703827E-01, 5.986538901925087E-02,& + -1.576850377023220E-02, 1.962803453207016E-01, 6.334787011146545E-01, -1.408149152994156E-01,& + -1.756295561790466E-01, -2.156554609537125E-01, -1.412229537963867E-01, -5.801249146461487E-01,& + -5.700040608644485E-02, -3.019523918628693E-01, -1.161280944943428E-01, -3.032382726669312E-01,& + 1.140000447630882E-01, -2.648598253726959E-01, -2.016042023897171E-01, -3.181084990501404E-02,& + 7.931513339281082E-02, 5.399967432022095E-01, -4.595367014408112E-01, 9.602636098861694E-02,& + -4.730868339538574E-01, 2.077568918466568E-01, -2.257115393877029E-01, 3.216529190540314E-01,& + 1.631081402301788E-01, 6.222640164196491E-03, -1.323710232973099E-01, 1.348871737718582E-01,& + 1.123578473925591E-01, 5.462109446525574E-01, 5.289056897163391E-01, 5.155519247055054E-01,& + 2.748569846153259E-01, -3.125837743282318E-01, -3.262098431587219E-01, -8.945185691118240E-03,& + -4.980920553207397E-01, 5.064374208450317E-01, -1.056439951062202E-01, -3.115973472595215E-01,& + 3.343601152300835E-02, -7.157339155673981E-02, 5.459919571876526E-01, 2.175374031066895E-01,& + -2.892075665295124E-02, 1.139620468020439E-01, -4.409461319446564E-01, -4.908669367432594E-02,& + -2.098206430673599E-01, 3.024870157241821E-01, -3.447104394435883E-01, -2.666398882865906E-01,& + -1.739841997623444E-01, -1.120999976992607E-01, 4.268572330474854E-01, 4.144327044487000E-01,& + 4.936498403549194E-01, 5.718982815742493E-01, 5.464938655495644E-02, 3.950506746768951E-01,& + -1.432464718818665E-01, -8.016809076070786E-02, 5.947722792625427E-01, -1.419431418180466E-01,& + -2.328271418809891E-01, -1.958254128694534E-01, -9.914696216583252E-03, -1.478249877691269E-01,& + 4.182004928588867E-01, 7.797469943761826E-02, 3.761124014854431E-01, 4.066407680511475E-01,& + 1.217691525816917E-01, -1.124059110879898E-01, 7.020493596792221E-02, 1.022125557065010E-01,& + -5.025411844253540E-01, -2.482684552669525E-01, -5.819427594542503E-02, -1.587846502661705E-02,& + -1.881837695837021E-01, 4.026338756084442E-01, 3.339109122753143E-01, 2.215891182422638E-01,& + 7.083265781402588E-01, -7.670203596353531E-02, 3.171359598636627E-01, 8.310161828994751E-01 & + /), shape(hidden1Synapse)) + + outputSynapse = reshape((/ & + 2.309078276157379E-01, 8.006124198436737E-02, 5.207773447036743E-01, 3.642434999346733E-02,& + -5.444544181227684E-02, -2.300137132406235E-01, 4.965198636054993E-01, -3.590968847274780E-01,& + 1.392439752817154E-01, -2.941058278083801E-01, 6.655657291412354E-01, -4.931978881359100E-01,& + -1.253394484519958E-01, 1.540697813034058E-01, 1.752252578735352E-01, 4.873855113983154E-01,& + 5.741749405860901E-01, 1.275441497564316E-01, -4.765471443533897E-02, -5.038099363446236E-02,& + -8.334141224622726E-02, 5.842098593711853E-01, -4.490646719932556E-01, -5.416034907102585E-02,& + -2.264686524868011E-01, -1.698177903890610E-01, 3.113179206848145E-01, 4.435532391071320E-01,& + -5.240975022315979E-01, 1.108570247888565E-01, 2.321150526404381E-02, 2.374080866575241E-01,& + -2.570592761039734E-01, 3.205819129943848E-01, -3.468126952648163E-01, 2.772298157215118E-01,& + 1.148034259676933E-01, 1.865169033408165E-03, 3.649827241897583E-01, 5.026416182518005E-01,& + -2.502067089080811E-01, -6.028710007667542E-01, -6.978485733270645E-02, 8.656968921422958E-02,& + -5.227651596069336E-01, 9.525942802429199E-02, -1.903700232505798E-01, 1.426358073949814E-01,& + 5.602359771728516E-01, -2.479453980922699E-01, 1.296138316392899E-01, -4.612154662609100E-01,& + -4.198251068592072E-01, 6.053315401077271E-01, -1.160371229052544E-01, -4.044520258903503E-01,& + -1.530461944639683E-02, 4.267008602619171E-01, 2.162231802940369E-01, 1.101492717862129E-01,& + -9.195729345083237E-02, -3.771322593092918E-02, 3.320552408695221E-02, -4.979051947593689E-01,& + 1.581449210643768E-01, -5.021102428436279E-01, 1.184114068746567E-02, 4.836803376674652E-01,& + -5.539562702178955E-01, -2.782657444477081E-01, -1.547775119543076E-01, 4.582551419734955E-01,& + 2.844007611274719E-01, -4.516306817531586E-01, 1.886052638292313E-02, 3.602048456668854E-01,& + 4.175081476569176E-02, 2.075715661048889E-01, -5.455711483955383E-01, -2.442489415407181E-01,& + -2.680016458034515E-01, 2.636941149830818E-03, 4.164874255657196E-01, 8.120876550674438E-02,& + -4.927250146865845E-01, -3.254565298557281E-01, 5.583248138427734E-01, -1.608870923519135E-01,& + 5.749610066413879E-01, 5.479150414466858E-01, 3.469662666320801E-01, -5.061987638473511E-01,& + 3.353976905345917E-01, 2.548734247684479E-01, 2.064624279737473E-01, -5.114225745201111E-01,& + -4.629626572132111E-01, -1.936426460742950E-01, 2.327886223793030E-01, -4.583241790533066E-02,& + -5.125665068626404E-01, 1.089363321661949E-01, -4.951449036598206E-01, -5.018569827079773E-01,& + 2.582837454974651E-02, 4.913705959916115E-02, -2.441505938768387E-01, -3.174663335084915E-02,& + -1.644173413515091E-01, -2.947083115577698E-01, -5.097694396972656E-01, 7.136650383472443E-03,& + 1.942666023969650E-01, 1.587397605180740E-01, -4.691866040229797E-01, -4.862202703952789E-01,& + 1.432444006204605E-01, -4.405085742473602E-01, 3.072859644889832E-01, -4.172921180725098E-01 & + /), shape(outputSynapse)) + + END SUBROUTINE Breadboard2 +! +!------------------------------------------------------------------------------ +! + SUBROUTINE Breadboard3(inputFile,hidden1Axon,hidden1Synapse,outputSynapse) + + implicit none + + real inputFile(2,7) + real hidden1Axon(40) + real hidden1Synapse(7,40) + real outputSynapse(40,3) + + inputFile = reshape((/ & + 1.077844262123108E+00, -1.778443008661270E-01,& + 2.442665100097656E-01, 3.212104737758636E-02,& + 2.107975035905838E-01, 6.168988943099976E-01,& + 3.646677434444427E-01, 1.214343756437302E-01,& + 2.485501170158386E-01, 2.868268489837646E-01,& + 1.976718604564667E-01, 4.469360709190369E-01,& + 3.208556175231934E-01, -2.509090602397919E-01 & + /), shape(inputFile)) + + hidden1Axon = & + (/4.393131732940674E-01, -1.290386915206909E-01, 6.327351331710815E-01, 5.494017004966736E-01,& + 4.969031810760498E-01, 2.086368650197983E-01, -2.167895883321762E-01, 9.464725255966187E-01,& + 1.640024334192276E-01, 2.452306896448135E-01, 1.972979009151459E-01, 9.276027083396912E-01,& + 2.502645850181580E-01, 5.485208034515381E-01, -2.839279770851135E-01, 6.810981035232544E-01,& + -2.170253098011017E-01, -3.821973502635956E-01, 8.861125111579895E-01, -6.720829606056213E-01,& + 2.960434183478355E-02, -3.987881243228912E-01, -1.057050973176956E-01, 6.963993310928345E-01,& + -1.413413435220718E-01, 7.551014423370361E-01, 1.243001222610474E-02, -3.603826761245728E-01,& + 7.450697422027588E-01, 7.630060315132141E-01, 5.904716849327087E-01, -5.035977959632874E-01,& + 2.082890830934048E-03, -1.259811818599701E-01, -8.103467822074890E-01, -4.683765172958374E-01,& + -3.666405081748962E-01, -5.880022794008255E-02, -5.269588828086853E-01, -1.594118028879166E-01/) + + hidden1Synapse = reshape((/ & + 2.258135080337524E-01, -8.417334407567978E-02, -6.296884268522263E-02, -1.971755474805832E-01,& + -2.008096426725388E-01, 1.312222182750702E-01, -2.187249064445496E-01, 3.300825655460358E-01,& + -1.458171010017395E-01, -2.447441816329956E-01, 2.373344898223877E-01, -3.369296491146088E-01,& + -2.142974138259888E-01, 7.442125119268894E-03, 2.400149852037430E-01, 5.063241720199585E-01,& + 1.461273133754730E-01, 3.199279010295868E-01, 2.184794545173645E-01, 6.378577351570129E-01,& + 2.826454937458038E-01, 1.467282772064209E-01, 4.167218208312988E-01, 3.410821408033371E-02,& + -1.507616639137268E-01, 1.607457697391510E-01, 1.063031926751137E-01, 4.860900044441223E-01,& + -7.546984404325485E-02, 3.811344206333160E-01, -3.500247746706009E-02, -3.294828236103058E-01,& + -2.355449087917805E-02, 3.319101631641388E-01, 1.341840159147978E-02, -2.975183129310608E-01,& + -2.044427692890167E-01, 7.903610914945602E-02, -2.241216152906418E-01, -1.982768028974533E-01,& + 2.166045308113098E-01, -3.769811093807220E-01, -4.219292849302292E-02, -4.683617055416107E-01,& + 1.365721821784973E-01, -5.708352923393250E-01, -5.482509136199951E-01, -5.697317123413086E-01,& + 3.948671817779541E-01, 4.008982181549072E-01, -6.056785583496094E-01, -6.540334783494473E-03,& + -4.144128859043121E-01, -9.239719808101654E-02, 1.977843493223190E-01, -2.407579571008682E-01,& + -2.472878843545914E-01, -3.429937064647675E-01, -1.058190166950226E-01, -8.456809073686600E-02,& + 4.944565296173096E-01, 4.329789280891418E-01, 2.303941249847412E-01, 2.076211571693420E-01,& + 1.421037223190069E-02, 5.740813165903091E-02, 1.577541381120682E-01, 1.072699949145317E-01,& + 3.550452180206776E-03, -7.603026926517487E-02, 1.787180006504059E-01, 3.000865578651428E-01,& + -4.790667295455933E-01, -1.263711899518967E-01, -1.886992603540421E-01, -1.971553862094879E-01,& + -4.320513010025024E-01, -1.786982715129852E-01, -3.415124714374542E-01, 3.517304956912994E-01,& + 3.841716647148132E-01, 1.595797836780548E-01, 1.466515809297562E-01, 3.235963284969330E-01,& + 3.831133618950844E-02, 3.778985887765884E-02, 4.742037355899811E-01, -1.204959601163864E-01,& + -6.766954064369202E-02, 4.763844013214111E-01, 2.847502529621124E-01, -2.614455521106720E-01,& + 4.211461246013641E-01, 2.459102123975754E-01, -3.291262984275818E-01, 4.159525930881500E-01,& + 1.433917880058289E-01, 5.506788492202759E-01, -4.396528601646423E-01, 3.432570993900299E-01,& + -4.605481028556824E-01, -1.657515168190002E-01, 2.847986221313477E-01, -3.968485295772552E-01,& + 2.652311325073242E-01, 2.413431182503700E-03, 6.885899305343628E-01, -1.771224141120911E-01,& + -2.605379931628704E-02, 1.681880354881287E-01, 4.201361536979675E-01, -2.905318737030029E-01,& + -1.065197512507439E-01, 2.377779632806778E-01, 3.171224892139435E-01, -5.171843245625496E-02,& + 8.248845487833023E-02, -4.904226213693619E-02, 3.065647780895233E-01, 1.610077768564224E-01,& + 8.712385892868042E-01, 3.008154034614563E-01, 5.729283690452576E-01, -1.608658432960510E-01,& + -3.810124993324280E-01, 6.462811827659607E-01, -2.662218213081360E-01, -5.297539830207825E-01,& + -1.356185525655746E-01, 2.623566091060638E-01, -1.624718308448792E-01, -2.004417479038239E-01,& + -3.377428650856018E-02, 3.970716595649719E-01, -1.560127288103104E-01, 4.747187346220016E-02,& + -3.162815868854523E-01, -3.350041508674622E-01, -3.987393081188202E-01, -4.969080090522766E-01,& + -1.142657846212387E-01, -7.119160890579224E-01, 1.153976768255234E-01, -6.001577973365784E-01,& + -3.606468439102173E-01, -3.741255104541779E-01, -7.550917863845825E-01, 1.106901541352272E-01,& + -1.475569456815720E-01, -2.016223073005676E-01, -2.226002812385559E-01, 2.520006597042084E-01,& + -4.015582501888275E-01, -6.874573230743408E-01, -3.860632777214050E-01, 1.074488908052444E-01,& + -3.594025373458862E-01, -2.556712925434113E-01, 2.491754293441772E-01, -1.749203801155090E-01,& + -5.133146420121193E-03, -2.629097700119019E-01, 1.706630140542984E-01, 5.300921797752380E-01,& + 3.016012907028198E-01, 3.024738729000092E-01, 1.334729231894016E-02, 3.605858981609344E-01,& + -3.797290921211243E-01, 2.125910073518753E-01, -3.324515819549561E-01, -2.657738924026489E-01,& + 8.549436926841736E-02, 2.843597829341888E-01, -1.628004312515259E-01, 4.068509638309479E-01,& + -1.096388697624207E-01, 1.842555999755859E-01, -2.429902255535126E-01, 1.793259531259537E-01,& + 6.289024949073792E-01, 4.427114427089691E-01, -8.943214267492294E-02, 1.407862901687622E-01,& + -4.747562706470490E-01, 1.607088744640350E-01, 2.691341638565063E-01, -1.326033025979996E-01,& + -6.888723373413086E-02, 3.347525000572205E-01, 2.391179502010345E-01, -7.601787149906158E-02,& + 3.946174979209900E-01, 4.608300328254700E-01, -4.973608553409576E-01, 2.180006355047226E-02,& + -2.155515551567078E-01, 4.018128812313080E-01, 5.872810482978821E-01, -2.970355451107025E-01,& + 6.164746284484863E-01, -2.832284271717072E-01, -7.214747369289398E-02, 3.505393862724304E-01,& + 3.504253327846527E-01, -3.037774860858917E-01, -3.341494500637054E-01, -2.143821418285370E-01,& + 3.230984508991241E-01, -6.691335439682007E-01, -1.196009963750839E-01, 2.609530091285706E-01,& + 6.332063078880310E-01, -2.495922595262527E-01, -1.421163380146027E-01, 4.370761811733246E-01,& + 2.344440817832947E-01, -4.770855009555817E-01, -1.213536486029625E-01, -4.947537779808044E-01,& + 2.018401175737381E-01, -3.219321966171265E-01, -1.836685538291931E-01, 6.838442683219910E-01,& + -5.349717736244202E-01, 5.601373910903931E-01, -3.152181506156921E-01, 2.578000128269196E-01,& + 4.295753240585327E-01, -1.423847377300262E-01, 6.693964004516602E-01, -2.671292051672935E-02,& + -2.906464338302612E-01, -6.406581997871399E-01, -5.139582753181458E-01, 2.622411847114563E-01,& + 2.534431815147400E-01, -1.518065035343170E-01, -4.292866215109825E-02, 4.628975689411163E-01,& + 1.969320774078369E-01, 4.264309704303741E-01, -4.475159347057343E-01, -5.727919340133667E-01,& + 5.388451814651489E-01, -2.982297539710999E-01, -3.593768924474716E-02, -1.298359930515289E-01,& + -4.535509645938873E-01, -1.963836848735809E-01, -2.640297412872314E-01, 3.889253437519073E-01,& + -2.371201291680336E-02, 5.441716909408569E-01, -3.557947278022766E-01, -1.912423074245453E-01,& + 3.168485462665558E-01, -3.096546828746796E-01, 2.481035888195038E-01, 2.293358147144318E-01,& + -7.027690410614014E-01, -4.839945435523987E-01, -2.963027358055115E-01, -5.126427412033081E-01,& + 2.138081789016724E-01, -2.071801871061325E-01, -9.827529639005661E-02, -4.680003225803375E-01,& + -3.230824470520020E-01, -2.535474896430969E-01, 2.779140770435333E-01, -5.119556188583374E-01,& + 1.893053054809570E-01, -5.211792513728142E-02, 4.212611019611359E-01, -5.767111182212830E-01,& + 3.436119556427002E-01, 1.560586243867874E-01, -1.338404417037964E-01, 2.465801686048508E-01 & + /), shape(hidden1Synapse)) + + outputSynapse = reshape((/ & + -1.504478603601456E-01, 8.304652571678162E-02, 2.053809165954590E-01, 4.613898992538452E-01,& + 3.307471871376038E-01, -2.503668665885925E-01, -4.260648787021637E-01, -2.033478170633316E-01,& + 1.205723360180855E-01, 3.727485835552216E-01, -2.320208251476288E-01, 4.672348499298096E-01,& + -1.567042618989944E-01, 4.181037843227386E-01, -2.018750756978989E-01, 2.649243474006653E-01,& + 2.292609065771103E-01, 2.745892405509949E-01, 2.554303109645844E-01, -3.891312777996063E-01,& + -4.561745524406433E-01, -3.781261444091797E-01, -2.881123721599579E-01, 2.764029800891876E-01,& + 8.924255520105362E-02, 4.471623599529266E-01, 9.589984267950058E-02, 4.323486387729645E-01,& + 4.792469739913940E-01, -9.918873012065887E-02, 4.427296221256256E-01, 3.841804563999176E-01,& + 1.890532523393631E-01, -4.477364718914032E-01, -2.994475699961185E-02, -7.976207137107849E-02,& + 2.607934474945068E-01, -3.710708916187286E-01, -2.811897993087769E-01, 6.034602597355843E-02,& + 4.014556109905243E-01, 2.982565164566040E-01, 4.447779953479767E-01, -3.612459823489189E-02,& + -2.895380258560181E-01, 2.155442684888840E-01, -3.415147066116333E-01, 4.278375506401062E-01,& + 1.896717213094234E-02, -9.841635823249817E-02, 1.671093255281448E-01, 3.151571452617645E-01,& + -1.678100675344467E-01, -4.435905069112778E-02, -2.333792001008987E-01, 4.360995292663574E-01,& + 3.587894737720490E-01, -1.017290875315666E-01, 1.382773071527481E-01, -3.980610668659210E-01,& + -2.268472909927368E-01, -2.996328286826611E-02, 2.546367645263672E-01, 1.532198935747147E-01,& + -1.018586382269859E-02, 3.147244155406952E-01, -3.700032234191895E-01, 2.747226655483246E-01,& + 4.799823760986328E-01, 3.735623657703400E-01, 3.757937550544739E-01, -5.869687348604202E-02,& + 7.807171344757080E-02, -1.428240090608597E-01, -5.030028820037842E-01, -4.323083460330963E-01,& + -2.643692195415497E-01, -4.277939200401306E-01, 3.172474205493927E-01, -4.587580561637878E-01,& + 4.488629996776581E-01, -1.273735053837299E-02, 2.275637537240982E-01, 2.276848852634430E-01,& + 1.995900124311447E-01, -1.224325075745583E-01, -1.321871429681778E-01, 4.938367307186127E-01,& + 3.713837862014771E-01, 4.943797290325165E-01, -8.973516523838043E-02, 3.630679845809937E-01,& + 3.118912279605865E-01, 3.763218820095062E-01, -2.658533453941345E-01, 5.210888572037220E-03,& + -3.098636865615845E-01, -4.516429603099823E-01, 3.575363755226135E-01, 3.780608177185059E-01,& + 3.606519103050232E-01, 4.404914379119873E-01, -4.452764391899109E-01, 2.741447389125824E-01,& + 1.122588440775871E-01, 2.581178247928619E-01, -2.986721992492676E-01, -3.506239950656891E-01,& + -4.466909915208817E-02, 1.343552619218826E-01, -2.677312493324280E-02, -5.070485472679138E-01,& + -5.414816737174988E-01, 3.392856195569038E-02, -4.090670943260193E-01, 2.741051837801933E-02,& + 7.242175936698914E-02, 4.587205946445465E-01, -2.530987001955509E-02, 1.304957270622253E-02 & + /), shape(outputSynapse)) + + END SUBROUTINE Breadboard3 +! +!------------------------------------------------------------------------------ +! + SUBROUTINE Breadboard4(inputFile,hidden1Axon,hidden1Synapse,outputSynapse) + + implicit none + + real inputFile(2,7) + real hidden1Axon(40) + real hidden1Synapse(7,40) + real outputSynapse(40,3) + + inputFile = reshape((/ & + 1.077844262123108E+00, -1.778443008661270E-01,& + 2.296211272478104E-01, 6.142363324761391E-02,& + 2.128665894269943E-01, 6.552034020423889E-01,& + 3.361344337463379E-01, 4.151264205574989E-02,& + 2.430133521556854E-01, 3.004860281944275E-01,& + 1.976718604564667E-01, 4.469360709190369E-01,& + 1.951007992029190E-01, -4.725341200828552E-01 & + /), shape(inputFile)) + + hidden1Axon = & + (/-1.700838446617126E+00, 1.409139156341553E+00, -1.263895153999329E+00, -1.653346180915833E+00,& + -1.753814935684204E+00, 1.510319232940674E+00, -1.652730584144592E+00, 1.968622922897339E+00,& + -1.764715671539307E+00, -1.920537590980530E+00, 1.703584432601929E+00, 9.688673615455627E-01,& + 1.621924757957458E+00, -1.195185184478760E+00, -1.170735836029053E+00, -1.726262569427490E+00,& + 1.693020582199097E+00, -1.789734363555908E+00, 2.076834440231323E+00, -2.054785251617432E+00,& + 1.735462069511414E+00, -1.377997517585754E+00, 1.685962557792664E+00, -1.505226492881775E+00,& + 1.329061865806580E+00, -1.970339655876160E+00, 1.326048374176025E+00, -1.803932785987854E+00,& + -1.356570959091187E+00, -7.451403737068176E-01, 1.977797389030457E+00, 1.962222456932068E+00,& + -1.924186825752258E+00, -1.927103757858276E+00, 1.772511124610901E+00, 2.267752170562744E+00,& + 1.343345522880554E+00, -1.727791309356689E+00, -1.688525199890137E+00, -2.020093202590942E+00/) + + hidden1Synapse = reshape((/ & + -3.217298686504364E-01, -1.535140275955200E-01, -9.374593496322632E-01, -3.773699328303337E-02,& + -7.610699534416199E-01, 1.124547328799963E-03, 7.987623810768127E-01, 5.171887874603271E-01,& + 1.182283610105515E-01, 1.252476930618286E+00, -2.393243610858917E-01, 8.846385776996613E-02,& + 4.983871877193451E-01, -1.072657704353333E+00, -5.902777314186096E-01, 3.053096830844879E-01,& + -1.245228290557861E+00, -9.408684819936752E-02, -1.261333227157593E+00, 7.626018673181534E-02,& + -3.566111624240875E-01, -2.651087939739227E-01, 5.490935966372490E-02, -1.231116533279419E+00,& + -3.552156984806061E-01, -4.995369017124176E-01, -1.970071047544479E-01, 6.921592950820923E-01,& + -7.216929793357849E-01, -3.322352096438408E-02, -1.040984153747559E+00, -2.749272584915161E-01,& + -3.936901688575745E-01, -5.485629439353943E-01, 2.315377295017242E-01, 3.925201594829559E-01,& + 2.289973348379135E-01, 9.091649055480957E-01, -2.400987595319748E-01, 2.274930775165558E-01,& + 7.657364010810852E-01, -4.531333744525909E-01, -3.045647442340851E-01, -1.612837314605713E-01,& + -6.530205607414246E-01, 6.988145411014557E-02, -3.664937913417816E-01, -1.209497332572937E+00,& + 1.716423481702805E-01, 2.888691425323486E-01, -6.977611780166626E-01, 1.001697182655334E+00,& + -3.773393929004669E-01, -3.817198425531387E-02, 3.071420192718506E-01, -1.018374800682068E+00,& + -3.812201619148254E-01, 2.521711289882660E-01, -1.311386704444885E+00, -4.305998682975769E-01,& + -2.096824795007706E-01, -6.536886692047119E-01, 9.946095943450928E-02, -8.006195425987244E-01,& + 6.314782798290253E-02, -9.162106513977051E-01, 1.249427199363708E-01, -1.967987567186356E-01,& + -2.837883234024048E-01, 4.405716657638550E-01, 7.357195615768433E-01, 2.873047888278961E-01,& + 7.006355524063110E-01, -2.267676740884781E-01, 1.684177815914154E-01, 2.451081871986389E-01,& + -6.897705197334290E-01, -1.359052062034607E-01, -1.217865824699402E+00, 6.268809437751770E-01,& + -1.108817100524902E+00, -1.098538115620613E-01, 6.363938003778458E-02, -2.163156747817993E+00,& + 2.993230819702148E-01, -6.225543469190598E-02, 6.338689923286438E-01, 2.340336740016937E-01,& + 3.334980309009552E-01, 5.768545866012573E-01, -8.454492688179016E-01, -7.557854652404785E-01,& + -6.227542161941528E-01, -1.105716824531555E+00, 2.116404175758362E-01, -2.117430865764618E-01,& + -1.036560058593750E+00, -1.257222741842270E-01, 5.264365077018738E-01, -1.787502527236938E+00,& + -6.102513074874878E-01, -1.036811590194702E+00, -1.041777491569519E+00, 6.762499362230301E-02,& + -1.829331994056702E+00, -1.342972517013550E-01, 2.181535959243774E+00, 7.125011086463928E-01,& + 9.849542975425720E-01, 4.515964090824127E-01, -5.667360424995422E-01, 1.371907234191895E+00,& + 4.193291962146759E-01, -4.483173191547394E-01, 1.056447148323059E+00, -4.035096466541290E-01,& + 2.473213225603104E-01, 4.283659458160400E-01, -1.105738878250122E+00, -3.882422149181366E-01,& + 1.359030008316040E-01, -1.316889882087708E+00, 1.206199750304222E-01, -2.816296517848969E-01,& + -3.856543898582458E-01, -1.341159194707870E-01, 2.931591272354126E-01, -8.115946650505066E-01,& + 1.549627929925919E-01, -3.494594991207123E-02, 1.392071247100830E-01, 8.500702381134033E-01,& + -1.105314135551453E+00, -8.855208158493042E-01, -1.129539161920547E-01, -7.288187742233276E-01,& + 2.031663209199905E-01, -2.040854692459106E-01, -2.651244997978210E-01, 6.747405529022217E-01,& + 6.289814710617065E-01, 3.702930510044098E-01, 8.955963253974915E-01, -1.791490912437439E-01,& + 6.291658878326416E-01, 3.181912600994110E-01, -7.458741664886475E-01, -5.797970294952393E-01,& + 8.048549294471741E-03, -1.517996788024902E+00, 1.586797833442688E-02, -1.968807131052017E-01,& + -6.696819067001343E-01, 2.561997175216675E-01, 1.585537791252136E-01, -3.939553797245026E-01,& + 1.001605153083801E+00, -3.178015723824501E-02, 2.169712930917740E-01, 7.597719430923462E-01,& + -8.711787462234497E-01, -2.590858340263367E-01, -4.994206726551056E-01, -1.350332260131836E+00,& + -1.754350513219833E-01, -5.298053622245789E-01, -1.044484019279480E+00, -5.103482306003571E-02,& + 8.845404386520386E-01, 4.584137201309204E-01, 1.076861619949341E+00, 1.874905377626419E-01,& + 2.787777185440063E-01, 8.369036912918091E-01, -8.217707276344299E-01, -2.826712131500244E-01,& + -2.450734227895737E-01, -8.279343843460083E-01, 3.510917425155640E-01, -3.488889932632446E-01,& + -7.627615332603455E-01, 3.606846034526825E-01, 5.258455872535706E-01, -5.099301040172577E-02,& + 6.352093815803528E-01, -1.835833787918091E-01, 1.247637987136841E+00, 5.917957425117493E-01,& + 1.019452288746834E-01, -5.673841834068298E-01, 1.377126276493073E-01, -1.055184245109558E+00,& + -2.036373913288116E-01, -6.316062808036804E-01, -3.354403078556061E-01, 3.826665878295898E-01,& + -6.721435189247131E-01, -6.410418748855591E-01, -1.417969822883606E+00, -8.955898880958557E-02,& + -6.617363095283508E-01, -6.313887238502502E-01, 1.284139454364777E-01, -7.438000291585922E-02,& + 3.091568231582642E+00, 8.395515084266663E-01, 7.227233052253723E-01, 8.192335367202759E-01,& + -2.106423974037170E-01, 2.122008800506592E+00, 7.060149908065796E-01, 3.394779860973358E-01,& + 6.117095947265625E-01, -3.271679580211639E-01, 1.616740077733994E-01, 1.569840312004089E-01,& + -1.123665213584900E+00, 3.844760954380035E-01, 2.845884263515472E-01, 7.137780785560608E-01,& + 1.460106819868088E-01, -1.021391227841377E-01, 5.172263383865356E-01, -7.423986196517944E-01,& + -2.789774909615517E-02, -1.258952766656876E-01, -1.325458526611328E+00, -5.270438194274902E-01,& + -3.967397287487984E-02, -2.709308564662933E-01, 1.340401768684387E-01, -6.963784694671631E-01,& + -3.221498429775238E-01, -8.531031608581543E-01, 3.377375304698944E-01, 1.652107536792755E-01,& + -3.512997031211853E-01, -1.630981415510178E-01, 3.690161705017090E-01, 1.549807284027338E-02,& + 1.193455934524536E+00, 2.675475478172302E-01, 3.856497108936310E-01, 9.223973155021667E-01,& + -8.005780726671219E-02, 7.949089407920837E-01, 1.678814589977264E-01, 5.589793920516968E-01,& + -2.890521883964539E-01, -6.459630280733109E-02, 1.577395349740982E-01, -6.019581556320190E-01,& + 1.361452788114548E-01, -1.461234450340271E+00, 2.132855653762817E-01, -7.116237878799438E-01,& + -1.837224513292313E-01, 6.981704831123352E-01, -1.456485867500305E+00, -8.896524459123611E-02,& + -6.985316872596741E-01, -9.188821911811829E-01, -1.798982769250870E-01, -3.445543348789215E-01,& + -9.767906665802002E-01, 6.575983762741089E-01, -5.698328614234924E-01, 2.794421613216400E-01,& + -9.889149665832520E-01, 2.113757282495499E-01, -4.894487261772156E-01, -9.110729694366455E-01,& + 3.156659901142120E-01, -8.372070193290710E-01, 1.710339263081551E-02, -7.162731885910034E-01,& + -9.848624467849731E-02, -2.407071143388748E-01, -4.630023241043091E-01, 5.028110146522522E-01 & + /), shape(hidden1Synapse)) + + outputSynapse = reshape((/ & + -1.209702730178833E+00, 1.183213353157043E+00, -1.019356846809387E+00, -1.344744205474854E+00,& + -1.445307731628418E+00, 1.024327754974365E+00, -1.584630727767944E+00, 1.083521246910095E+00,& + -1.308865427970886E+00, -1.247952342033386E+00, 1.239847064018250E+00, 1.287056356668472E-01,& + 9.846584796905518E-01, -1.553632378578186E+00, -1.231866717338562E+00, 4.489912092685699E-02,& + 1.253254055976868E+00, -1.430614471435547E+00, 1.041161060333252E+00, -1.605084300041199E+00,& + 1.527578949928284E+00, -1.474965572357178E+00, 1.355290770530701E+00, -1.745877861976624E+00,& + 1.712602972984314E+00, -1.563431382179260E+00, 8.333104252815247E-01, -1.541154265403748E+00,& + -1.556280970573425E+00, 7.898001670837402E-01, 1.451943874359131E+00, 1.376102089881897E+00,& + -1.475358963012695E+00, -1.508958697319031E+00, 1.723131775856018E+00, 1.577485084533691E+00,& + 2.009120136499405E-01, -1.543342947959900E+00, -1.532042622566223E+00, -1.665173649787903E+00,& + -1.577844977378845E+00, 1.509271860122681E+00, -1.648273229598999E+00, -1.399203181266785E+00,& + -1.230364322662354E+00, 1.090018987655640E+00, -7.097014784812927E-01, 1.677408456802368E+00,& + -1.743194699287415E+00, -1.423129081726074E+00, 7.856354713439941E-01, 1.262704372406006E+00,& + 1.029602646827698E+00, -8.157435655593872E-01, -1.168590903282166E+00, -1.007120013237000E+00,& + 1.498046159744263E+00, -1.094031929969788E+00, 1.288908720016479E+00, -1.570232629776001E+00,& + 1.331548571586609E+00, -1.591911792755127E+00, 1.173869848251343E+00, -1.569446206092834E+00,& + 1.071457147598267E+00, -1.386015534400940E+00, 1.319629669189453E+00, -1.251965403556824E+00,& + -1.506981730461121E+00, -5.631150603294373E-01, 1.476744890213013E+00, 1.224819302558899E+00,& + -1.190375804901123E+00, -4.876171946525574E-01, 1.674062848091125E+00, 1.343202710151672E+00,& + 8.375900387763977E-01, -1.624152183532715E+00, -1.477828741073608E+00, -1.320914030075073E+00,& + -1.082759499549866E+00, 1.309733152389526E+00, -5.913071632385254E-01, -1.292264103889465E+00,& + -1.440814852714539E+00, 1.020094513893127E+00, -1.208431601524353E+00, 1.691915869712830E+00,& + -1.277797341346741E+00, -1.482174158096313E+00, 1.266713261604309E+00, 1.296367645263672E+00,& + 1.238657712936401E+00, -7.025628685951233E-01, 2.491326481103897E-01, -1.536825418472290E+00,& + 1.577931523323059E+00, -1.065637469291687E+00, 1.696800708770752E+00, -1.695444345474243E+00,& + 1.581656932830811E+00, -1.088520646095276E+00, 1.492973804473877E+00, -1.063908934593201E+00,& + 1.496415257453918E+00, -1.486176609992981E+00, 6.039925217628479E-01, -1.485497832298279E+00,& + -1.147870540618896E+00, -1.266431331634521E+00, 1.607187867164612E+00, 1.494379520416260E+00,& + -1.001191616058350E+00, -1.084854602813721E+00, 1.410489916801453E+00, 1.581320643424988E+00,& + 1.205576062202454E+00, -1.245357394218445E+00, -1.343545675277710E+00, -1.709581851959229E+00 & + /), shape(outputSynapse)) + + END SUBROUTINE Breadboard4 +! +!------------------------------------------------------------------------------ +! + SUBROUTINE Breadboard5(inputFile,hidden1Axon,hidden1Synapse,outputSynapse) + + implicit none + + real inputFile(2,7) + real hidden1Axon(40) + real hidden1Synapse(7,40) + real outputSynapse(40,3) + + inputFile = reshape((/ & + 1.077844262123108E+00, -1.778443008661270E-01,& + 2.188449800014496E-01, 1.674167998135090E-02,& + 1.918158382177353E-01, 6.903452277183533E-01,& + 3.361344337463379E-01, 4.151264205574989E-02,& + 2.485501170158386E-01, 2.868268489837646E-01,& + 1.839550286531448E-01, 3.534696102142334E-01,& + 1.951007992029190E-01, -4.725341200828552E-01 & + /), shape(inputFile)) + + hidden1Axon = & + (/3.177257776260376E-01, -3.444353640079498E-01, 5.270494818687439E-01, -5.221590399742126E-01,& + -2.202716171741486E-01, -4.241476655006409E-01, 2.620704658329487E-02, 6.034846901893616E-01,& + -3.619376122951508E-01, -3.380794525146484E-01, 4.901479184627533E-02, 4.951947927474976E-02,& + 1.800213754177094E-01, -2.407073378562927E-01, -3.286456167697906E-01, -6.795548200607300E-01,& + -5.868792533874512E-01, -3.454326987266541E-01, 1.429300457239151E-01, -2.292728424072266E-01,& + 4.302643239498138E-01, -2.324737906455994E-01, -4.539224207401276E-01, 5.544423460960388E-01,& + -4.054053127765656E-01, -1.476568281650543E-01, -2.141656428575516E-01, 1.077265888452530E-01,& + 5.846756696701050E-01, 3.272875547409058E-01, 1.847147941589355E-03, -4.990870654582977E-01,& + 1.531988829374313E-01, 1.791626960039139E-01, -6.736395359039307E-01, -5.093495845794678E-01,& + -6.099227815866470E-02, 3.861090838909149E-01, -6.592265367507935E-01, -2.490588128566742E-01/) + + hidden1Synapse = reshape((/ & + 3.541271016001701E-02, -7.549672126770020E-01, -4.738137125968933E-01, -2.348672598600388E-03,& + -2.733762562274933E-01, -8.357829414308071E-03, -8.771334886550903E-01, -2.402636408805847E-01,& + -3.840126693248749E-01, -5.802615284919739E-01, 1.073393039405346E-03, -2.714654207229614E-01,& + -1.682563573122025E-01, 2.412795424461365E-01, 6.722061038017273E-01, -2.907541096210480E-01,& + 1.961677670478821E-01, -3.303197622299194E-01, 1.424128562211990E-01, 5.971218943595886E-01,& + -3.415485620498657E-01, -3.709296286106110E-01, 2.636498510837555E-01, -6.461778879165649E-01,& + -4.282482266426086E-01, -1.192058548331261E-01, -7.758595943450928E-01, -4.671352729201317E-02,& + -2.137460708618164E-01, -1.528403162956238E-02, -7.986806631088257E-01, -3.911508247256279E-02,& + -5.328277871012688E-02, -6.519866585731506E-01, 3.402085006237030E-01, 1.100756451487541E-01,& + 6.820629835128784E-01, 7.288114726543427E-02, 2.484970390796661E-01, -1.383271068334579E-01,& + 1.246754452586174E-01, 6.508666276931763E-01, 3.158373534679413E-01, -5.986170172691345E-01,& + 6.103343367576599E-01, -6.012113094329834E-01, -1.359632611274719E-01, -2.586761862039566E-02,& + -4.111338853836060E-01, 1.772232651710510E-01, -6.230232119560242E-01, 3.960133790969849E-01,& + -6.472764015197754E-01, -3.764366805553436E-01, -9.892498701810837E-02, -9.984154999256134E-02,& + -4.294761717319489E-01, -2.304461598396301E-01, -7.071238160133362E-01, -4.068204462528229E-01,& + -4.626799225807190E-01, -3.020684123039246E-01, 6.521416902542114E-01, 1.521919965744019E-01,& + -7.091572284698486E-01, -4.207086861133575E-01, -5.045717954635620E-01, -3.018378615379333E-01,& + -4.485827982425690E-01, -5.111956596374512E-01, -8.567054569721222E-02, 4.856635630130768E-01,& + 2.459491789340973E-01, -1.496585756540298E-01, -1.183001995086670E-01, 4.713786244392395E-01,& + -2.809847891330719E-01, 8.547450602054596E-02, -3.530589640140533E-01, -7.254429459571838E-01,& + -1.860966980457306E-01, -6.639543771743774E-01, 4.769657552242279E-01, -7.412918210029602E-01,& + 3.024796843528748E-01, -6.272576451301575E-01, -5.452296733856201E-01, -2.242822349071503E-01,& + -3.738160133361816E-01, 3.284691274166107E-01, -4.564896821975708E-01, 2.556349933147430E-01,& + 4.318492487072945E-02, -1.320876032114029E-01, -9.898099303245544E-02, 6.774403899908066E-02,& + 1.919083893299103E-01, 2.400640696287155E-01, 4.077304899692535E-01, 2.524036169052124E-01,& + 5.042297840118408E-01, 2.886471152305603E-01, -1.700776815414429E-01, -2.435589283704758E-01,& + -2.057165205478668E-01, 1.996059715747833E-01, 2.711705565452576E-01, 3.861612975597382E-01,& + -2.083975523710251E-01, 7.296724617481232E-02, -2.396509945392609E-01, -1.525006294250488E-01,& + -4.502384066581726E-01, -5.351938009262085E-01, -3.890139460563660E-01, 1.700514107942581E-01,& + -4.677065312862396E-01, -3.514041006565094E-01, 4.196007549762726E-01, 2.812465429306030E-01,& + -2.938374876976013E-01, -3.160441517829895E-01, -4.980419874191284E-01, 3.127529323101044E-01,& + 2.271771281957626E-01, -1.466843336820602E-01, -6.397774219512939E-01, 4.446669816970825E-01,& + 8.942086249589920E-02, 9.681937843561172E-02, -5.533168092370033E-02, -4.528337121009827E-01,& + 6.882410049438477E-01, -3.133308887481689E-01, -2.058080136775970E-01, -2.226170003414154E-01,& + -2.296325266361237E-01, -2.966837584972382E-01, -3.301460444927216E-01, -3.557955026626587E-01,& + 3.304032683372498E-01, -8.399857580661774E-02, 4.199078381061554E-01, 1.194518618285656E-02,& + 7.232509851455688E-01, 9.784302115440369E-02, -1.134829670190811E-01, 1.034526005387306E-01,& + -8.523296117782593E-01, 5.190717577934265E-01, 5.323929339647293E-02, 1.697375029325485E-01,& + 5.581731796264648E-01, -9.171869754791260E-01, -1.815564483404160E-01, 3.742720186710358E-01,& + -2.523972094058990E-01, 1.490504741668701E-01, -6.334505081176758E-01, 2.519290745258331E-01,& + 2.056387513875961E-01, -1.307390183210373E-01, -9.355121254920959E-01, -2.585434913635254E-01,& + -4.636541008949280E-02, -1.257960349321365E-01, 1.712975054979324E-01, -7.756385207176208E-01,& + -2.476336807012558E-01, 2.972539961338043E-01, 4.443784654140472E-01, 4.029458761215210E-02,& + -2.695891633629799E-02, -1.858536303043365E-01, -1.682455986738205E-01, -1.443968862295151E-01,& + 3.042537868022919E-01, -4.171138703823090E-01, -1.896526068449020E-01, 1.934753060340881E-01,& + -5.211362838745117E-01, -4.224704951047897E-02, -5.408123731613159E-01, -2.546814382076263E-01,& + -3.727044463157654E-01, -4.361395835876465E-01, 1.507636755704880E-01, 8.203987777233124E-02,& + 1.366124451160431E-01, 5.710709095001221E-01, 3.028809726238251E-01, 9.636782407760620E-01,& + -3.770071640610695E-02, 3.973050415515900E-01, 2.884645946323872E-03, -8.364310860633850E-01,& + 5.341901779174805E-01, -1.418879022821784E-03, 5.416565537452698E-01, 3.877540528774261E-01,& + -1.585132908076048E-03, 1.770619601011276E-01, 4.701207578182220E-02, 4.187163114547729E-01,& + 9.934148788452148E-01, 2.260543704032898E-01, 7.113759517669678E-01, 4.728879332542419E-01,& + -3.471966087818146E-01, 7.732371240854263E-02, -2.182047963142395E-01, 8.698941469192505E-01,& + 6.959328651428223E-01, 1.184082403779030E-01, 1.408587545156479E-01, 2.005882859230042E-01,& + 3.091167509555817E-01, -1.955157965421677E-01, -2.792426571249962E-02, -7.336559891700745E-02,& + 1.834385395050049E-01, -3.164150416851044E-01, -5.837532281875610E-01, 9.843266010284424E-01,& + -5.053303837776184E-01, 9.432902336120605E-01, 2.762463316321373E-02, 3.678649663925171E-01,& + -8.084134012460709E-02, 2.041484862565994E-01, 5.061163306236267E-01, 7.991071939468384E-01,& + 2.264233529567719E-01, 7.115226387977600E-01, -5.186138153076172E-01, 4.093891084194183E-01,& + -1.001899018883705E-01, -1.933344826102257E-02, 1.815729439258575E-01, -1.810713559389114E-01,& + -5.504883527755737E-01, 7.005249857902527E-01, -1.967341639101505E-02, 1.448700390756130E-02,& + 3.791421651840210E-01, -3.687309324741364E-01, 6.238684058189392E-01, 2.549594640731812E-02,& + 6.611171960830688E-01, -2.348230034112930E-01, 4.087108075618744E-01, 1.835047304630280E-01,& + 2.745413780212402E-01, -5.477424860000610E-01, 4.227129369974136E-02, 1.370747834444046E-01,& + -1.771535575389862E-01, 2.915630638599396E-01, 8.117929100990295E-02, -5.147354602813721E-01,& + -7.195407748222351E-01, -2.950702905654907E-01, -8.272841572761536E-01, -8.926602080464363E-03,& + 6.488984823226929E-01, -7.542604207992554E-01, -1.718278229236603E-01, -4.908424615859985E-02,& + -3.619753718376160E-01, -9.747832268476486E-02, -9.625122696161270E-02, -1.545960754156113E-01,& + 4.842050671577454E-01, -9.618758410215378E-02, 1.017526090145111E-01, -1.527849882841110E-01,& + 5.150741338729858E-01, -2.614658325910568E-02, -4.681808650493622E-01, 6.698484718799591E-02 & + /), shape(hidden1Synapse)) + + outputSynapse = reshape((/ & + -4.252142608165741E-01, -5.190939903259277E-01, 2.900628745555878E-01, -4.749988615512848E-01,& + -2.432068884372711E-01, 2.475018054246902E-01, 1.508098654448986E-02, -1.032671928405762E-01,& + -5.695398449897766E-01, -4.341589808464050E-01, 3.563072979450226E-01, -1.610363721847534E-01,& + -1.529531776905060E-01, 3.572074323892593E-02, -1.639768481254578E-01, -2.103261351585388E-01,& + -5.111085772514343E-01, -9.769214689731598E-02, -1.570120900869370E-01, -1.928524225950241E-01,& + 4.143640100955963E-01, -3.950143232941628E-02, -2.028328180313110E-01, -1.475265175104141E-01,& + -2.296919003129005E-02, -3.979336936026812E-03, -3.908852040767670E-01, 4.192969501018524E-01,& + 2.397747188806534E-01, 4.962041378021240E-01, 4.480696618556976E-01, -2.336141020059586E-01,& + 3.938802778720856E-01, 2.352581322193146E-01, 1.772783696651459E-02, -5.289353057742119E-02,& + -3.967223316431046E-02, -4.341553747653961E-01, -2.162312269210815E-01, 4.311326891183853E-02,& + 4.480128586292267E-01, 1.783114373683929E-01, 5.068565607070923E-01, -4.451447725296021E-01,& + -5.096289515495300E-01, -4.807172119617462E-01, 1.144711822271347E-01, 3.887178003787994E-01,& + -3.575057387351990E-01, -1.148879528045654E-01, -3.399987518787384E-02, -2.313354164361954E-01,& + -7.217752188444138E-02, 3.657472431659698E-01, 3.738324940204620E-01, 4.177713990211487E-01,& + -4.159389436244965E-01, -1.484509706497192E-01, 2.662932872772217E-01, -4.467738270759583E-01,& + 7.071519643068314E-02, 3.344006240367889E-01, -5.436876043677330E-02, 3.525221049785614E-01,& + -2.395160868763924E-02, -3.141686320304871E-01, 3.852373957633972E-01, 4.932067096233368E-01,& + -1.492380946874619E-01, 4.595996737480164E-01, 3.445216640830040E-02, -5.653984546661377E-01,& + -4.437799155712128E-01, 1.460446715354919E-01, -4.742037057876587E-01, 1.456019878387451E-01,& + 3.867210447788239E-01, 4.871259629726410E-01, -4.954726397991180E-01, 1.770049333572388E-02,& + 2.028178423643112E-01, -3.220860958099365E-01, 2.971330881118774E-01, -1.783177554607391E-01,& + -2.126741260290146E-01, -2.823735475540161E-01, 4.713099896907806E-01, 2.155631184577942E-01,& + -3.713304102420807E-01, 2.199546098709106E-01, 2.943331003189087E-01, 4.534626007080078E-01,& + 3.414066731929779E-01, -1.535274535417557E-01, -1.036400645971298E-01, -4.483501911163330E-01,& + 8.723334968090057E-02, -1.368855964392424E-02, -5.010653138160706E-01, 4.472654759883881E-01,& + 1.106471717357635E-01, 5.139253139495850E-01, -2.296521663665771E-01, 4.545788764953613E-01,& + 1.664130948483944E-02, 2.438283525407314E-02, -1.943250745534897E-01, 4.952348470687866E-01,& + 3.839295804500580E-01, -3.456721901893616E-01, -1.650201976299286E-01, -3.892767727375031E-01,& + -3.154349029064178E-01, 3.591218292713165E-01, -2.804268598556519E-01, -4.606449007987976E-01,& + 1.020256653428078E-01, 2.229744791984558E-01, -4.180959761142731E-01, -4.198006689548492E-01 & + /), shape(outputSynapse)) + + END SUBROUTINE Breadboard5 +! +!------------------------------------------------------------------------------ +! + SUBROUTINE Breadboard6(inputFile,hidden1Axon,hidden2Axon,& + hidden1Synapse,hidden2Synapse,outputSynapse) + + implicit none + + real inputFile(2,7) + real hidden1Axon(7) + real hidden2Axon(4) + real hidden1Synapse(7,7) + real hidden2Synapse(7,4) + real outputSynapse(4,3) + + inputFile = reshape((/ & + 1.353383421897888E+00, -4.533834457397461E-01,& + 2.269289046525955E-01, -1.588500849902630E-02,& + 1.868382692337036E-01, 6.490761637687683E-01,& + 4.038590788841248E-01, 3.776083141565323E-02,& + 2.430133521556854E-01, 3.004860281944275E-01,& + 1.935067623853683E-01, 4.185551702976227E-01,& + 1.951007992029190E-01, -4.725341200828552E-01 & + /), shape(inputFile)) + + hidden1Axon = & + (/ 7.384125608950853E-03, -2.202851057052612E+00, 2.003432661294937E-01, -2.467587143182755E-01,& + 5.973502993583679E-01, 3.834692537784576E-01, 2.687855064868927E-01/) + + hidden2Axon = & + (/ 3.643750846385956E-01, 2.449363768100739E-01, 4.754272103309631E-01, 7.550075054168701E-01/) + + hidden1Synapse = reshape((/ & + 7.333400845527649E-01, 5.450296998023987E-01, -7.700046896934509E-01, 1.426693439483643E+00,& + -1.024212338961661E-03, -6.459779292345047E-02, 1.028800487518311E+00, -2.116347402334213E-01,& + 3.591781139373779E+00, 2.435753583908081E+00, -6.687584519386292E-01, 1.201278567314148E+00,& + -3.478864133358002E-01, 1.830960988998413E+00, -3.111673295497894E-01, -4.177703261375427E-01,& + -3.920616805553436E-01, -5.040770769119263E-01, -5.354442000389099E-01, -1.534618530422449E-02,& + -1.089364647865295E+00, -3.010036647319794E-01, 1.486289381980896E+00, 1.059559464454651E+00,& + 1.640596628189087E+00, 2.254628390073776E-01, 4.839954376220703E-01, 8.484285473823547E-01,& + -6.926012784242630E-02, 4.926209524273872E-02, 2.834132313728333E-01, 3.028324842453003E-01,& + 2.161216735839844E-01, 7.251360416412354E-01, 2.851752638816833E-01, -5.653074979782104E-01,& + 3.640621304512024E-01, 1.341893225908279E-01, 7.511208057403564E-01, -1.088509336113930E-01,& + 1.044083759188652E-01, 6.529347300529480E-01, -6.885128021240234E-01, -1.003871187567711E-01,& + 9.337020665407181E-02, -4.425194561481476E-01, -3.668845295906067E-01, -2.661575675010681E-01,& + -5.936880707740784E-01 & + /), shape(hidden1Synapse)) + + hidden2Synapse = reshape((/ & + -5.461466908454895E-01, -1.490996479988098E+00, 7.721499800682068E-01, -3.842977285385132E-01,& + 1.134691461920738E-01, -7.171064615249634E-01, 4.990165829658508E-01, -4.233781099319458E-01,& + 5.502462983131409E-01, -1.000102013349533E-01, 1.481512188911438E+00, 1.637827455997467E-01,& + 5.879161506891251E-02, -3.256742060184479E-01, 4.237195849418640E-01, 1.471476674079895E+00,& + -1.982609331607819E-01, 6.787789463996887E-01, 5.525223612785339E-01, 4.395257532596588E-01,& + 1.643348783254623E-01, 8.910947442054749E-01, 1.772162079811096E+00, -2.550726830959320E-01,& + 4.305597543716431E-01, 1.965346336364746E-01, -2.251276820898056E-01, -5.650298595428467E-01 & + /), shape(hidden2Synapse)) + + outputSynapse = reshape((/ & + 4.605286195874214E-02, 1.636024713516235E-01, 7.045555710792542E-01, 4.994805455207825E-01,& + 5.167593955993652E-01, 2.924540340900421E-01, -1.490857079625130E-02, -1.826021969318390E-01,& + 3.571106493473053E-01, -3.790216147899628E-01, -6.031348705291748E-01, -4.664786159992218E-01 & + /), shape(outputSynapse)) + + END SUBROUTINE Breadboard6 +! +!------------------------------------------------------------------------------ +! + SUBROUTINE Breadboard7(inputFile,hidden1Axon,hidden2Axon,& + hidden1Synapse,hidden2Synapse,outputSynapse) + + implicit none + + real inputFile(2,7) + real hidden1Axon(7) + real hidden2Axon(4) + real hidden1Synapse(7,7) + real hidden2Synapse(7,4) + real outputSynapse(4,3) + + inputFile = reshape((/ & + 1.077844262123108E+00, -1.778443008661270E-01,& + 2.295625507831573E-01, 6.163756549358368E-02,& + 2.081165313720703E-01, 6.204994320869446E-01,& + 3.565062582492828E-01, -1.051693689078093E-02,& + 2.430133521556854E-01, 3.004860281944275E-01,& + 1.839550286531448E-01, 3.534696102142334E-01,& + 1.951007992029190E-01, -4.725341200828552E-01 & + /), shape(inputFile)) + + hidden1Axon = & + (/-4.191969335079193E-01, 1.229978561401367E+00, -2.403785735368729E-01, 5.233071446418762E-01,& + 8.062141537666321E-01, 1.000604867935181E+00, -1.015548110008240E-01/) + + hidden2Axon = & + (/-5.321261882781982E-01, -2.396449327468872E+00, -1.170158505439758E+00, -4.097367227077484E-01/) + + hidden1Synapse = reshape((/ & + 1.341468811035156E+00, -4.215665817260742E+00, -1.636691570281982E+00, -2.792109727859497E+00,& + -1.489341259002686E+00, 4.075187742710114E-01, -2.091729402542114E+00, -5.029736161231995E-01,& + -4.151493072509766E+00, -1.452428579330444E+00, 2.398953676223755E+00, -8.748555183410645E-01,& + 1.340690374374390E+00, -2.277854681015015E+00, 6.057588458061218E-01, 1.353034019470215E+00,& + -1.214678883552551E+00, -3.864320814609528E-01, 1.148570895195007E+00, 5.792776346206665E-01,& + 1.344245020300150E-02, -8.885311484336853E-01, -1.594583272933960E+00, 4.960928857326508E-01,& + -1.118881464004517E+00, -2.252289772033691E+00, 6.328870654106140E-01, -1.946701169013977E+00,& + -2.910976111888885E-01, 2.447998225688934E-01, 2.001658976078033E-01, -1.229660585522652E-02,& + 6.969845890998840E-01, -5.897524300962687E-03, -5.688555836677551E-01, 2.619750201702118E-01,& + -4.162483692169189E+00, -1.468571424484253E+00, -3.118389844894409E+00, 6.947994828224182E-01,& + -2.687734663486481E-01, -2.110401153564453E+00, 3.224660456180573E-02, 8.378994464874268E-01,& + 9.896742701530457E-01, -7.354493737220764E-01, 6.684727072715759E-01, 1.465887904167175E+00,& + -3.726872503757477E-01 & + /), shape(hidden1Synapse)) + + hidden2Synapse = reshape((/ & + -3.395457863807678E-01, -5.815528631210327E-01, 2.929831743240356E-01, -5.629656314849854E-01,& + 4.701104387640953E-02, -9.300172328948975E-01, -1.461120098829269E-01, -3.458845615386963E-01,& + 1.266251802444458E-01, 6.342335790395737E-02, 1.869771480560303E-01, -1.476681977510452E-01,& + 5.144428834319115E-02, -3.145390946883708E-04, 8.697064518928528E-01, 1.057970225811005E-01,& + 2.603019773960114E-01, 4.393529295921326E-01, -2.832717299461365E-01, 5.771816968917847E-01,& + -3.896601796150208E-01, -7.260112762451172E-01, -7.957320213317871E-01, 6.776907294988632E-02,& + -3.073690235614777E-01, -1.540119051933289E-01, -6.733091473579407E-01, 2.009786069393158E-01 & + /), shape(hidden2Synapse)) + + outputSynapse = reshape((/ & + 3.156347572803497E-01, -8.236174583435059E-01, -9.946570396423340E-01, 4.212915897369385E-01,& + -7.918102145195007E-01, -2.033229321241379E-01, -1.056663155555725E+00, -5.699685215950012E-01,& + -9.666987657546997E-01, -5.505290031433105E-01, 8.724089711904526E-02, -9.536570906639099E-01 & + /), shape(outputSynapse)) + + END SUBROUTINE Breadboard7 +! +!------------------------------------------------------------------------------ +! + SUBROUTINE Breadboard8(inputFile,hidden1Axon,hidden2Axon,& + hidden1Synapse,hidden2Synapse,outputSynapse) + + implicit none + + real inputFile(2,7) + real hidden1Axon(7) + real hidden2Axon(4) + real hidden1Synapse(7,7) + real hidden2Synapse(7,4) + real outputSynapse(4,3) + + inputFile = reshape((/ & + 1.353383421897888E+00, -4.533834457397461E-01,& + 2.188449800014496E-01, 1.674167998135090E-02,& + 1.906577646732330E-01, 6.807435750961304E-01,& + 3.361344337463379E-01, 4.151264205574989E-02,& + 2.491349428892136E-01, 3.307266235351562E-01,& + 1.839550286531448E-01, 3.534696102142334E-01,& + 1.951007992029190E-01, -4.725341200828552E-01 & + /), shape(inputFile)) + + hidden1Axon = & + (/-3.274627029895782E-01, 2.668272238224745E-03, -3.019839525222778E-01, -4.557206928730011E-01,& + -5.515558272600174E-02, 3.119016764685512E-04, 8.753398060798645E-02/) + + hidden2Axon = & + (/ 2.733168303966522E-01, -3.423235416412354E-01, 8.666662573814392E-01, -6.124708056449890E-01/) + + hidden1Synapse = reshape((/ & + 2.732226848602295E-01, 1.847893238067627E+00, -1.084923520684242E-01, 1.385403037071228E+00,& + 2.885355055332184E-01, -3.135629594326019E-01, 1.057805895805359E+00, -5.868541821837425E-02,& + 3.278825521469116E+00, 4.641786217689514E-01, 4.461606740951538E-01, -1.952850073575974E-01,& + -5.789646506309509E-01, 1.945697903633118E+00, -9.578172862529755E-02, 2.150904417037964E+00,& + 9.114052653312683E-01, 1.107189536094666E+00, 6.752110123634338E-01, 2.475811988115311E-01,& + 1.050705909729004E+00, 3.205673992633820E-01, 2.478840798139572E-01, -5.084273815155029E-01,& + -2.407394796609879E-01, -1.702371835708618E-01, 1.456947028636932E-01, 3.221787512302399E-01,& + -2.719256579875946E-01, -5.116361379623413E-01, 3.973563387989998E-02, -1.733802706003189E-01,& + -1.649789661169052E-01, -4.471102654933929E-01, -4.071239829063416E-01, -1.492276042699814E-01,& + -1.245773434638977E+00, -6.851593255996704E-01, -8.733592033386230E-01, -4.348643422126770E-01,& + -3.520536422729492E-01, -9.930510520935059E-01, 1.956800930202007E-02, -9.781590104103088E-01,& + -6.039583683013916E-01, -6.923800706863403E-01, -6.682770848274231E-01, 4.162513464689255E-02,& + -1.004322052001953E+00 & + /), shape(hidden1Synapse)) + + hidden2Synapse = reshape((/ & + -8.183520436286926E-01, -1.621446132659912E+00, -1.045793533325195E+00, -5.855653062462807E-02,& + 4.404523968696594E-01, 7.002395391464233E-01, 2.097517400979996E-01, -9.925779700279236E-02,& + -8.263560533523560E-01, -1.043026208877563E+00, 4.524357020854950E-01, 2.231711596250534E-01,& + 8.736496567726135E-01, 8.797182440757751E-01, 6.963157653808594E-01, 2.816314399242401E-01,& + 1.525615751743317E-01, 1.936565339565277E-01, 1.900831162929535E-01, 1.180221140384674E-01,& + 1.027775928378105E-01, 9.149055480957031E-01, 1.129598617553711E+00, 6.131598353385925E-01,& + 2.547058761119843E-01, 2.556352131068707E-02, -3.627143800258636E-02, -6.722733378410339E-01 & + /), shape(hidden2Synapse)) + + outputSynapse = reshape((/ & + -5.266965627670288E-01, -1.973343640565872E-01, 1.362649053335190E-01, 9.479679167270660E-02,& + 2.987665235996246E-01, -3.116582632064819E-01, -1.842434853315353E-01, -4.986568093299866E-01,& + 6.261917948722839E-01, 5.454919338226318E-01, -3.484728187322617E-02, -4.687039256095886E-01 & + /), shape(outputSynapse)) + + END SUBROUTINE Breadboard8 +! +!------------------------------------------------------------------------------ +! + SUBROUTINE Breadboard9(inputFile,hidden1Axon,hidden2Axon,& + hidden1Synapse,hidden2Synapse,outputSynapse) + + implicit none + + real inputFile(2,7) + real hidden1Axon(7) + real hidden2Axon(4) + real hidden1Synapse(7,7) + real hidden2Synapse(7,4) + real outputSynapse(4,3) + + inputFile = reshape((/ & + 1.077844262123108E+00, -1.778443008661270E-01,& + 2.188449800014496E-01, 1.674167998135090E-02,& + 1.868382692337036E-01, 6.490761637687683E-01,& + 3.733665347099304E-01, 1.051026657223701E-01,& + 2.430133521556854E-01, 3.004860281944275E-01,& + 2.083092182874680E-01, 3.581876754760742E-01,& + 1.951007992029190E-01, -4.725341200828552E-01 & + /), shape(inputFile)) + + hidden1Axon = & + (/ 1.012814998626709E+00, -3.782782554626465E-01, -2.220184087753296E+00, -3.424299955368042E-01,& + 1.449530482292175E+00, -2.592789530754089E-01, -4.670010507106781E-01/) + + hidden2Axon = & + (/ 3.516010642051697E-01, 3.293374776840210E-01, -1.675553172826767E-01, 3.799068629741669E-01/) + + hidden1Synapse = reshape((/ & + 1.390573829412460E-01, -3.110583126544952E-01, 1.105552077293396E+00, 4.394045472145081E-01,& + 4.795211851596832E-01, 1.969023197889328E-01, 5.574952811002731E-02, 1.690310984849930E-01,& + 2.208244323730469E+00, 2.111947536468506E+00, 3.239532709121704E-01, 7.690296173095703E-01,& + 1.264077782630920E+00, 1.672740578651428E+00, 1.320844173431396E+00, 7.965675592422485E-01,& + -7.341063618659973E-01, 3.702043294906616E+00, 1.716022133827209E+00, -6.642882823944092E-01,& + 1.686427950859070E+00, -4.863217473030090E-01, 1.285641908645630E+00, 1.281449794769287E+00,& + 2.356275558471680E+00, -1.406845331192017E+00, 6.027717590332031E-01, 6.652191877365112E-01,& + -9.871492385864258E-01, -5.513690948486328E+00, -2.750334143638611E-01, 1.229651212692261E+00,& + -2.504641294479370E+00, -3.219850361347198E-01, -2.744197607040405E+00, -4.023179113864899E-01,& + 9.932321496307850E-03, -6.916724443435669E-01, -2.260914087295532E+00, 1.261568814516068E-01,& + 3.248662948608398E-01, 6.963043808937073E-01, 1.830800414085388E+00, -2.054267644882202E+00,& + -9.595731496810913E-01, -8.711494207382202E-01, -1.330682396888733E+00, 2.109736204147339E+00,& + -6.145163774490356E-01 & + /), shape(hidden1Synapse)) + + hidden2Synapse = reshape((/ & + -3.299105465412140E-01, 4.235435724258423E-01, 9.191738963127136E-01, 6.795659661293030E-01,& + -1.440919041633606E+00, 4.634908214211464E-02, -1.265781879425049E+00, 2.394487708806992E-01,& + 1.205053567886353E+00, 5.790516138076782E-01, 1.087130665779114E+00, -6.723164916038513E-01,& + -1.834900081157684E-01, -4.767680168151855E-01, 8.402896672487259E-02, 1.035530328750610E+00,& + 1.644443035125732E+00, 4.317290484905243E-01, -1.714672803878784E+00, 5.225644707679749E-01,& + -5.602287650108337E-01, 1.068559288978577E+00, -2.211284125223756E-03, -2.943626642227173E-01,& + 1.341261714696884E-01, 4.324447214603424E-01, -5.482236146926880E-01, -4.985276758670807E-01 & + /), shape(hidden2Synapse)) + + outputSynapse = reshape((/ & + 3.726457059383392E-01, 7.749153375625610E-01, 4.159255921840668E-01, 5.234625935554504E-01,& + -1.592817008495331E-01, 5.884559154510498E-01, -7.756121158599854E-01, 2.137655019760132E-01,& + -6.172903776168823E-01, -4.417923986911774E-01, -4.576872885227203E-01, 4.440903961658478E-01 & + /), shape(outputSynapse)) + + END SUBROUTINE Breadboard9 +! +!------------------------------------------------------------------------------ +! + SUBROUTINE Breadboard10(inputFile,hidden1Axon,hidden2Axon,& + hidden1Synapse,hidden2Synapse,outputSynapse) + + implicit none + + real inputFile(2,7) + real hidden1Axon(7) + real hidden2Axon(4) + real hidden1Synapse(7,7) + real hidden2Synapse(7,4) + real outputSynapse(4,3) + + inputFile = reshape((/ & + 1.077844262123108E+00, -1.778443008661270E-01,& + 2.269289046525955E-01, -1.588500849902630E-02,& + 1.906577646732330E-01, 6.807435750961304E-01,& + 3.703703582286835E-01, -4.592590779066086E-02,& + 2.611723542213440E-01, 3.901915252208710E-01,& + 1.911842674016953E-01, 4.027296602725983E-01,& + 1.951007992029190E-01, -4.725341200828552E-01 & + /), shape(inputFile)) + + hidden1Axon = & + (/ 1.307985544204712E+00, -1.960705667734146E-01, -1.105142459273338E-01, -1.207442641258240E+00,& + -1.665081620216370E+00, 1.251117825508118E+00, -7.307677268981934E-01/) + + hidden2Axon = & + (/ 2.186001092195511E-02, 3.369570672512054E-01, 1.165086925029755E-01, 2.747000660747290E-03/) + + hidden1Synapse = reshape((/ & + -3.375437259674072E-01, -3.020816326141357E+00, -1.435481071472168E+00, 1.473870635032654E+00,& + -7.776365280151367E-01, 6.734371185302734E-01, -1.643768787384033E+00, -1.227448821067810E+00,& + -7.365036606788635E-01, -4.473563134670258E-01, -5.696173906326294E-01, -2.562220990657806E-01,& + 8.557485342025757E-01, -8.057124614715576E-01, 4.266147911548615E-01, 2.171551227569580E+00,& + 3.776189982891083E-01, 5.574828386306763E-01, 3.814708292484283E-01, 2.591066062450409E-01,& + 1.959651827812195E+00, 1.003962755203247E-01, -1.228965446352959E-02, -3.882043361663818E-01,& + -2.722288109362125E-02, -3.378733694553375E-01, -7.981095314025879E-01, 4.839731752872467E-01,& + 1.432798147201538E+00, 1.885666996240616E-01, -6.051751971244812E-01, 2.924412488937378E+00,& + 1.136252880096436E+00, 2.994727194309235E-01, 1.604383468627930E+00, -8.440219759941101E-01,& + 6.088087558746338E-01, -3.722844421863556E-01, 5.441566109657288E-01, 3.944540619850159E-01,& + 7.044004201889038E-01, 3.459328413009644E-01, 1.054268121719360E+00, -3.348083496093750E+00,& + -7.199336886405945E-01, -1.489133596420288E+00, -4.090557992458344E-01, 8.203456401824951E-01,& + -1.118073821067810E+00 & + /), shape(hidden1Synapse)) + + hidden2Synapse = reshape((/ & + -6.871775984764099E-01, -1.148896694183350E+00, -2.102893590927124E-01, -5.890849828720093E-01,& + 5.899340510368347E-01, 7.098034024238586E-01, -1.422515869140625E+00, -1.206974506378174E+00,& + 4.104525446891785E-01, 3.567897081375122E-01, 2.746991515159607E-01, 1.193219542503357E+00,& + 3.167707324028015E-01, -1.222744822502136E+00, -9.918631613254547E-02, 4.355156719684601E-01,& + 2.938420772552490E-01, -1.012830615043640E+00, -1.290418803691864E-01, 7.479285597801208E-01,& + -2.292920649051666E-01, -1.372484922409058E+00, -6.534293759614229E-03, 1.525195717811584E+00,& + 2.076585590839386E-01, 1.434590101242065E+00, 7.887706905603409E-02, -1.401232123374939E+00 & + /), shape(hidden2Synapse)) + + outputSynapse = reshape((/ & + 6.101396083831787E-01, 3.122945129871368E-01, 3.869898915290833E-01, 4.438063502311707E-01,& + 5.161536335945129E-01, -2.700618803501129E-01, -3.105166740715504E-02, -5.569267272949219E-01,& + -5.549081563949585E-01, -3.867979049682617E-01, 1.623111665248871E-01, -6.052750945091248E-01 & + /), shape(outputSynapse)) + + END SUBROUTINE Breadboard10 +! +!------------------------------------------------------------------------------------- ! end module upp_physics + diff --git a/sorc/ncep_post.fd/VRBLS2D_mod.f b/sorc/ncep_post.fd/VRBLS2D_mod.f index 1067d1432..8e919dd98 100644 --- a/sorc/ncep_post.fd/VRBLS2D_mod.f +++ b/sorc/ncep_post.fd/VRBLS2D_mod.f @@ -28,7 +28,9 @@ module vrbls2d ,PBLH(:,:),PBLHGUST(:,:),HBOTD(:,:),HTOPD(:,:),HBOTS(:,:),HTOPS(:,:) & ,CLDEFI(:,:),ALBASE(:,:),SI(:,:),LSPA(:,:) & ,RSWINC(:,:),VIS(:,:),PD(:,:),MXSNAL(:,:),MIXHT(:,:) & - ,SNONC(:,:),EPSR(:,:),RSWTOA(:,:),TEQL(:,:) & + ,SNONC(:,:),EPSR(:,:),RSWTOA(:,:),TEQL(:,:) & +! Variables saved for input to IFI + ,IFI_APCP(:,:),CAPE(:,:),CIN(:,:) & ! HWRF additions ,MDLTAUX(:,:),MDLTAUY(:,:),CD10(:,:),CH10(:,:) & ,ACSWUPT(:,:),SWDNT(:,:),ACSWDNT(:,:) & @@ -51,6 +53,7 @@ module vrbls2d ,NCI_REFD(:,:),NCA_REFD(:,:),RAINC_BUCKET1(:,:),RAINNC_BUCKET1(:,:) & ,RAINC_BUCKET(:,:),RAINNC_BUCKET(:,:),SNOW_BUCKET(:,:) & ,GRAUP_BUCKET(:,:),PCP_BUCKET(:,:),ACGRAUP(:,:),ACFRAIN(:,:) & + ,FRZRN_BUCKET(:,:),SNOW_ACM(:,:),SNOW_BKT(:,:) & ,SNOW_BUCKET1(:,:),GRAUP_BUCKET1(:,:),PCP_BUCKET1(:,:) & ,SNOWNC(:,:),GRAUPELNC(:,:),TMAX(:,:),W_MEAN(:,:) & ,TSNOW(:,:),QVG(:,:),QV2m(:,:),QVl1(:,:) & @@ -58,9 +61,8 @@ module vrbls2d ,SWRADmean(:,:),U10mean(:,:),V10mean(:,:),SPDUV10mean(:,:) & ,SWNORMmean(:,:),SNFDEN(:,:),SNDEPAC(:,:),SWDDNI(:,:),SWDDIF(:,:) & ,SWDNBC(:,:),SWDDNIC(:,:),SWDDIFC(:,:), SWUPBC(:,:), SWUPT(:,:) & - ,TAOD5502D(:,:),AERASY2D(:,:),AERSSA2D(:,:),MEAN_FRP(:,:) & - ,LWP(:,:),IWP(:,:) & - ,INT_SMOKE(:,:),INT_AOD(:,:) & + ,TAOD5502D(:,:),AERASY2D(:,:),AERSSA2D(:,:),MEAN_FRP(:,:),EBB(:,:) & + ,HWP(:,:),LWP(:,:),IWP(:,:) & ! add new fields for GFS ,SFCUX(:,:),SFCVX(:,:),SFCUXI(:,:), SFCVXI(:,:),AVGALBEDO(:,:),AVGCPRATE(:,:) & ,AVGPREC(:,:),PTOP(:,:),PBOT(:,:),AVGCFRACH(:,:) & @@ -81,8 +83,11 @@ module vrbls2d ,etrans(:,:),esnow(:,:),avgedir(:,:),avgecan(:,:),avgetrans(:,:)& ,avgesnow(:,:),avgpotevp(:,:),avgprec_cont(:,:),avgcprate_cont(:,:)& ,ti(:,:),aod550(:,:),du_aod550(:,:),ss_aod550(:,:),su_aod550(:,:) & - ,bc_aod550(:,:),oc_aod550(:,:) - integer, allocatable :: IVGTYP(:,:),ISLTYP(:,:),ISLOPE(:,:) + ,bc_aod550(:,:),oc_aod550(:,:),landfrac(:,:),paha(:,:),pahi(:,:) & + ,tecan(:,:),tetran(:,:),tedir(:,:),twa(:,:),fdnsst(:,:),pwat(:,:) + integer, allocatable :: IVGTYP(:,:),ISLTYP(:,:),ISLOPE(:,:) & + ,IEQL(:,:) + ! Add 2d aerosol diagnosis fields for GOCART (NGAC) real, allocatable :: & DUSMASS(:,:),DUCMASS(:,:),DUSMASS25(:,:),DUCMASS25(:,:) & @@ -92,7 +97,10 @@ module vrbls2d ,SSSMASS(:,:),SSCMASS(:,:),SSSMASS25(:,:),SSCMASS25(:,:) & ,DUSTCB(:,:),SSCB(:,:),OCCB(:,:),BCCB(:,:),SULFCB(:,:) & ,DUSTALLCB(:,:),SSALLCB(:,:),DUSTPM(:,:),SSPM(:,:),PP25CB(:,:) & - ,PP10CB(:,:)!lzhang, add for FV3-Chem + ,DUSTPM10(:,:),PP10CB(:,:),NO3CB(:,:),NH4CB(:,:),maod(:,:)!lzhang, add for FV3-Chem + +! Add new field for AQM + real, allocatable :: aqm_aod550(:,:) ! end module vrbls2d diff --git a/sorc/ncep_post.fd/VRBLS3D_mod.f b/sorc/ncep_post.fd/VRBLS3D_mod.f index f27428f3a..0db1423d2 100644 --- a/sorc/ncep_post.fd/VRBLS3D_mod.f +++ b/sorc/ncep_post.fd/VRBLS3D_mod.f @@ -80,8 +80,7 @@ module vrbls3d ,icing_gfip(:,:,:),icing_gfis(:,:,:) & ! Add NCAR GTG turbulence ,catedr(:,:,:),mwt(:,:,:),gtg(:,:,:) & - ! AQF - ,ozcon(:,:,:),pmtf(:,:,:) + ,avgozcon(:,:,:),avgpmtf(:,:,:) end module vrbls3d diff --git a/sorc/ncep_post.fd/VRBLS4D_mod.f b/sorc/ncep_post.fd/VRBLS4D_mod.f index 9606a56a0..0c9799836 100644 --- a/sorc/ncep_post.fd/VRBLS4D_mod.f +++ b/sorc/ncep_post.fd/VRBLS4D_mod.f @@ -1,6 +1,7 @@ ! 01-10-22 H CHUANG - MODIFIED TO PROCESS HYBRID MODEL OUTPUT ! 02-04-17 BALDWIN - MODIFIED TO INCLUDE ALL 3D ARRAYS ! 11-10-18 SARAH LU - MODIFIED TO INCLUDE GOCART AEROSOLS +! 22-09-18 Li(Kate) Zhang - MODIFIED TO INCLUDE new NASA GOCART AEROSOLS of NO3 and NH4 module vrbls4d !- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - implicit none @@ -10,7 +11,10 @@ module vrbls4d real, allocatable :: SOOT(:,:,:,:) ! black carbon real, allocatable :: WASO(:,:,:,:) ! organic carbon real, allocatable :: SUSO(:,:,:,:) ! sulfate + real, allocatable :: NO3(:,:,:,:) ! no3 + real, allocatable :: NH4(:,:,:,:) ! nh4 real, allocatable :: SMOKE(:,:,:,:) + real, allocatable :: FV3DUST(:,:,:,:) real, allocatable :: PP25(:,:,:,:) ! PP25 real, allocatable :: PP10(:,:,:,:) ! PP10 ! diff --git a/sorc/ncep_post.fd/WETBULB.f b/sorc/ncep_post.fd/WETBULB.f index feab60343..f63b9c73b 100644 --- a/sorc/ncep_post.fd/WETBULB.f +++ b/sorc/ncep_post.fd/WETBULB.f @@ -7,6 +7,8 @@ SUBROUTINE WETBULB(T,Q,PMID,HTM,KARR,TWET) ! MPI VERSION: 04 Jan 2000 ( JIM TUCCILLO ) ! MODIFIED FOR HYBRID: OCT 2001, H CHUANG ! 02-01-15 MIKE BALDWIN - WRF VERSION +! 21-07-26 Wen Meng - Restrict compuation from undefined grids +! 21-09-13 Jesse Meng- 2D DECOMPOSITION ! !----------------------------------------------------------------------- ! ROUTINE TO COMPUTE WET BULB TEMPERATURES USING THE LOOK UP TABLE @@ -22,7 +24,8 @@ SUBROUTINE WETBULB(T,Q,PMID,HTM,KARR,TWET) use lookup_mod, only: thl, rdth, jtb, qs0, sqs, rdq, itb, ptbl, plq, ttbl,& pl, rdp, the0, sthe, rdthe, ttblq, itbq, jtbq, rdpq, the0q, stheq,& rdtheq - use ctlblk_mod, only: jsta, jend, im, jsta_2l, jend_2u, lm + use ctlblk_mod, only: jsta, jend, im, jsta_2l, jend_2u, lm, spval, & + ista, iend, ista_2l, iend_2u use cuparm_mod, only: h10e5, capa, epsq, d00, elocp !- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - implicit none @@ -38,14 +41,14 @@ SUBROUTINE WETBULB(T,Q,PMID,HTM,KARR,TWET) ! SUBROUTINES CALLED: ! TTBLEX ! - real,dimension(IM,jsta_2l:jend_2u,LM),intent(in) :: T,Q, & + real,dimension(ista_2l:iend_2u,jsta_2l:jend_2u,LM),intent(in) :: T,Q, & PMID,HTM - integer,dimension(IM,jsta:jend), intent(in) :: KARR - real,dimension(IM,jsta_2l:jend_2u,LM),intent(out) :: TWET + integer,dimension(ista:iend,jsta:jend), intent(in) :: KARR + real,dimension(ista_2l:iend_2u,jsta_2l:jend_2u,LM),intent(out) :: TWET - real, dimension(im,jsta:jend) :: THESP, QQ, PP - integer, dimension(im,jsta:jend) :: KLRES,KHRES,IPTB,ITHTB + real, dimension(ista:iend,jsta:jend) :: THESP, QQ, PP + integer, dimension(ista:iend,jsta:jend) :: KLRES,KHRES,IPTB,ITHTB ! integer I,J,L,ITTB1,ITTBK,IQTBK,IT,KNUML,KNUMH,IQ real TBTK,QBTK,APEBTK,TTHBTK,TTHK,QQK,BQS00K,SQS00K,BQS10K, & @@ -59,13 +62,14 @@ SUBROUTINE WETBULB(T,Q,PMID,HTM,KARR,TWET) !!$omp& presk,qbtk,qqk,sqk,sqs00k,sqs10k,tbtk,thesp,tpspk, !!$omp& tqk,tthbtk,tthk) !----------------------------------------------------------------------- - DO 300 L=1,LM + DO 300 L=1,LM DO 125 J=JSTA,JEND - DO 125 I=1,IM + DO 125 I=ISTA,IEND IF (HTM(I,J,L)<1.0) THEN THESP(I,J)=273.15 cycle ENDIF + IF(T(I,J,L)0)THEN + IF(PMID(I,J,L)==spval)CYCLE PRESK=PMID(I,J,L) ! IF(PRESK0)THEN - CALL TTBLEX(TWET(1,jsta_2l,L),TTBL,ITB,JTB,KLRES & - ,PMID(1,jsta_2l,L),PL,QQ,PP,RDP,THE0,STHE & + CALL TTBLEX(TWET(ista_2l,jsta_2l,L),TTBL,ITB,JTB,KLRES & + ,PMID(ista_2l,jsta_2l,L),PL,QQ,PP,RDP,THE0,STHE & ,RDTHE,THESP,IPTB,ITHTB) ENDIF !*** !*** COMPUTE PARCEL TEMPERATURE ALONG MOIST ADIABAT FOR PRESSURE>PL !** IF(KNUMH>0)THEN - CALL TTBLEX(TWET(1,jsta_2l,L),TTBLQ,ITBQ,JTBQ,KHRES & - ,PMID(1,jsta_2l,L),PLQ,QQ,PP,RDPQ,THE0Q,STHEQ & + CALL TTBLEX(TWET(ista_2l,jsta_2l,L),TTBLQ,ITBQ,JTBQ,KHRES & + ,PMID(ista_2l,jsta_2l,L),PLQ,QQ,PP,RDPQ,THE0Q,STHEQ & ,RDTHEQ,THESP,IPTB,ITHTB) ENDIF !----------------------------------------------------------------------- diff --git a/sorc/ncep_post.fd/WETFRZLVL.f b/sorc/ncep_post.fd/WETFRZLVL.f index d44d7c8dc..63aa39c9e 100644 --- a/sorc/ncep_post.fd/WETFRZLVL.f +++ b/sorc/ncep_post.fd/WETFRZLVL.f @@ -1,51 +1,33 @@ !> @file -! . . . -!> SUBPROGRAM: WETFRZLVL COMPUTES LEVEL OF 0 WET BULB -!! PRGRMMR: MANIKIN ORG: W/NP2 DATE: 03-11-14 -!! -!! ABSTRACT: -!! THIS ROUTINE COMPUTES THE LOWEST HEIGHT WITH A WET BULB -!! TEMPERATURE OF FREEZING FOR EACH MASS POINT ON THE ETA GRID. -!! THE COMPUTED WET BULB ZERO HEIGHT IS THE MEAN SEA LEVEL -!! HEIGHT. AT EACH MASS POINT WE MOVE UP FROM THE SURFACE TO -!! FIND THE FIRST ETA LAYER WHERE THE TW IS LESS THAN -!! 273.16K. VERTICAL INTERPOLATION IN TEMPERATURE TO THE FREEZING -!! TEMPERATURE GIVES THE FREEZING LEVEL HEIGHT. PRESSURE AND -!! SPECIFIC HUMIDITY ARE INTERPOLATED TO THIS LEVEL AND ALONG WITH -!! THE TEMPERATURE PROVIDE THE FREEZING LEVEL RELATIVE HUMIDITY. -!! IF THE SURFACE (SKIN) TEMPERATURE IS BELOW FREEZING, THE ROUTINE -!! USES SURFACE BASED FIELDS TO COMPUTE THE RELATIVE HUMIDITY. -!! -!! PROGRAM HISTORY LOG: -!! 03-11-14 GEOFF MANIKIN - NEW PROGRAM -!! 04-12-06 G MANIKIN - CORRECTED COMPUTATION OF SFC TEMPERATURE -!! 05-03-11 H CHUANG - WRF VERSION -!! -!! USAGE: CALL WETFRZLVL(TWET,ZWET) -!! INPUT ARGUMENT LIST: -!! TWET - WET BULB TEMPERATURES -!! -!! OUTPUT ARGUMENT LIST: -!! ZWET - ABOVE GROUND LEVEL HEIGHT OF LEVEL WITH 0 WET BULB. -!! -!! OUTPUT FILES: -!! NONE -!! -!! SUBPROGRAMS CALLED: -!! UTILITIES: -!! REL_HUM -!! LIBRARY: -!! COMMON - -!! LOOPS -!! PVRBLS -!! MASKS -!! MAPOT -!! POSTVAR -!! -!! ATTRIBUTES: -!! LANGUAGE: FORTRAN -!! MACHINE : CRAY C-90 -!! +!> @brief wetfrzlvl() computes level of 0 wet bulb. +!> +!> @author Geoff Manikin W/NP2 @date 2003-11-14 + +!> This routine computes the lowest height with a wet bulb +!> temperature of freezing for each mass point on the eta grid. +!> The computed wet bulb zero height is the mean sea level +!> height. At each mass point we move up from the surface to +!> find the first eta layer where the tw is less than +!> 273.16K. Vertical interpolation in temperature to the freezing +!> temperature gives the freezing level height. Pressure and +!> specific humidity are interpolated to this level and along with +!> the temperature provide the freezing level relative humidity. +!> If the surface (skin) temperature is below freezing, the routine +!> uses surface based fields to compute the relative humidity. +!> +!> @param[in] TWET Wet bulb temperatures. +!> @param[out] ZWET Above ground level height of level with 0 wet bulb. +!> +!> ### Program history log: +!> Date | Programmer | Comments +!> -----|------------|--------- +!> 2003-11-14 | Geoff Manikin | Initial +!> 2004-12-06 | Geoff Manikin | Corrected computation of SFC temperature +!> 2005-03-11 | H CHUANG | WRF Version +!> 2021-07-26 | W Meng | Restrict computation from undefined grids +!> 2021-09-13 | J Meng | 2D DECOMPOSITION +!> +!> @author Geoff Manikin W/NP2 @date 2003-11-14 SUBROUTINE WETFRZLVL(TWET,ZWET) ! @@ -54,14 +36,15 @@ SUBROUTINE WETFRZLVL(TWET,ZWET) use vrbls2d, only: fis, thz0, ths use masks, only: lmh, sm use params_mod, only: gi, p1000, capa, tfrz, d0065, d50 - use ctlblk_mod, only: jsta, jend, im, jsta_2l, jend_2u, lm + use ctlblk_mod, only: jsta, jend, im, jsta_2l, jend_2u, lm, spval, & + ista, iend, ista_2l, iend_2u !- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - implicit none ! ! DECLARE VARIABLES. ! - REAL,intent(in) :: TWET(IM,JSTA_2L:JEND_2U,LM) - REAL,intent(out) :: ZWET(IM,jsta:jend) + REAL,intent(in) :: TWET(ISTA_2L:IEND_2U,JSTA_2L:JEND_2U,LM) + REAL,intent(out) :: ZWET(ista:iend,jsta:jend) ! integer I,J,LLMH,L real HTSFC,THSFC,PSFC,TSFC,DELZ,DELT,ZL,ZU @@ -74,7 +57,11 @@ SUBROUTINE WETFRZLVL(TWET,ZWET) !!$omp& private(delt,delz,htsfc,l,llmh !!$omp& tsfc,zl,zu) DO J=JSTA,JEND - DO I=1,IM + DO I=ISTA,IEND + IF(FIS(I,J)==spval)THEN + ZWET(I,J)=spval + CYCLE + ENDIF HTSFC = FIS(I,J)*GI LLMH = NINT(LMH(I,J)) ZWET(I,J) = HTSFC diff --git a/sorc/ncep_post.fd/WRFPOST.f b/sorc/ncep_post.fd/WRFPOST.f index c7c7c3d45..05707b0a8 100644 --- a/sorc/ncep_post.fd/WRFPOST.f +++ b/sorc/ncep_post.fd/WRFPOST.f @@ -1,66 +1,38 @@ !> @file -! . . . -!> MAIN PROGRAM: WRFPOST -!! PRGMMR: BALDWIN ORG: NSSL/SPC DATE: 2002-06-18 -!! -!! ABSTRACT: -!! THIS PROGRAM DRIVES THE EXTERNAL WRF POST PROCESSOR. -!! -!! PROGRAM HISTORY LOG: -!! 92-12-24 RUSS TREADON - CODED ETAPOST AS STAND ALONE CODE -!! 98-05-29 BLACK - CONVERSION OF POST CODE FROM 1-D TO 2-D -!! 00-02-04 JIM TUCCILLO - PARALLEL VERSION VIA MPI -!! 01-02-15 JIM TUCCILLO - MANY COMMON BLOCKS REPLACED WITH MODULES -!! TO SUPPORT FORTRAN "ALLOCATE"s FOR THE EXACT SIZE OF THE -!! ARRAYS NEEDED BASED ON THE NUMBER OF MPI TASKS. -!! THIS WAS DONE TO REDUCE THE ADDRESS SPACE THAT THE LOADER SEES. -!! THESE CHANGES WERE NECESSARY FOR RUNNING LARGER DOMAINS SUCH AS -!! 12 KMS -!! 01-06-15 JIM TUCCILLO - ADDED ASYNCRONOUS I/O CAPABILITY. IF THERE ARE MORE -!! THAN ONE MPI TASK, THE IO WILL BE DONE AYNCHRONOUSLY BY THE LAST -!! MPI TASK. -!! 02-06-17 MIKE BALDWIN - CONVERT ETAPOST TO WRFPOST. INCLUDE WRF I/O API -!! FOR INPUT OF MODEL DATA. MODIFY CODE TO DEAL WITH C-GRID -!! DATA. STREAMLINE OUTPUT TO A CALL OF ONE SUBROUTINE INSTEAD OF THREE. -!! REPLACE COMMON BLOCKS WITH A LIMITED NUMBER OF MODULES. -!! 04-01-01 H CHUANG - ADDED NMM IO MODULE AND BINARY OPTIONS -!! 05-07-08 Binbin Zhou: Aadded RSM model -!! 05-12-05 H CHUANG - ADDED CAPABILITY TO OUTPUT OFF-HOUR FORECAST WHICH HAS -!! NO IMPACTS ON ON-HOUR FORECAST -!! 06-02-20 CHUANG, BLACK, AND ROGERS - FINALIZED COMPLETE LIST OF NAM -!! OPERATIONAL PRODUCTS FROM WRF -!! 06-02-27 H CHUANG - MODIFIED TO POST MULTIPLE -!! FORECAST HOURS IN ONE EXECUTION -!! 06-03-03 H CHUANG - ADDED PARRISH'S MPI BINARY IO TO READ BINARY -!! WRF FILE AS RANDOM ASSCESS SO THAT VARIABLES IN WRF OUTPUT -!! DON'T HAVE TO BE READ IN IN SPECIFIC ORDER -!! 11-02-06 J WANG - ADD GRIB2 OPTION -!! 11-12-14 SARAH LU - ADD THE OPTION TO READ NGAC AER FILE -!! 12-01-28 J WANG - Use post available fields in xml file for grib2 -!! 13-06-25 S MOORTHI - add gocart_on logical option to save memory -!! 13-10-03 J WANG - add option for po to be pascal, and -!! add gocart_on,d3d_on and popascal to namelist -!! 20-03-25 J MENG - remove grib1 -!! 21-06-20 W Meng - remove reading grib1 and gfsio lib -!! -!! USAGE: WRFPOST -!! INPUT ARGUMENT LIST: -!! NONE -!! -!! OUTPUT ARGUMENT LIST: -!! NONE -!! -!! SUBPROGRAMS CALLED: -!! UTILITIES: -!! NONE -!! LIBRARY: -!! COMMON - CTLBLK -!! RQSTFLD -!! -!! ATTRIBUTES: -!! LANGUAGE: FORTRAN 90 -!! MACHINE : IBM RS/6000 SP -!! +!> @brief wrfpost() drives the external wrf post processor. +!> +!> ### Program history log: +!> Date | Programmer | Comments +!> -----|------------|--------- +!> 1992-12-24 | Russ Treadon | Coded etapost as stand alone code +!> 1998-05-29 | Black | Conversion of post code from 1-D to 2-D +!> 1900-02-04 | Jim Tuccillo | Parallel version via MPI +!> 2001-02-15 | Jim Tuccillo | Many common blocks replaced with modules to support fortran "allocate"s for the exact size of the arrays needed based on the number of mpi tasks. This was done to reduce the address space that the loader sees. These changes were necessary for running larger domains such as 12 kms +!> 2001-06-15 | JIM Tuccillo | Added asyncronous I/O capability. if there are more than one mpi task, the io will be done aynchronously by the last MPI task. +!> 2002-06-17 | Mike Baldwin | Convert etapost to wrfpost. Include wrf I/O api for input of model data. Modify code to deal with C-grid data. Streamline output to a call of one subroutine instead of three. Replace common blocks with a limited number of modules. +!> 2004-01-01 | H Chuang | Added nmm io module and binary options +!> 2005-07-08 | Binbin Zhou | Added RSM model +!> 2005-12-05 | H Chuang | Added capability to output off-hour forecast which has no impacts on on-hour forecast +!> 2006-02-20 | Chuang, Black, and Rogers | Finalized complete list of NAM operational products from WRF +!> 2006-02-27 | H Chuang | Modified to post multiple forecast hours in one execution +!> 2006-03-03 | H Chuang | Added parrish's mpi binary io to read binary WRF file as random asscess so that variables in WRF output don't have to be read in in specific order +!> 2011-02-06 | J Wang | Add grib2 option +!> 2011-12-14 | Sarah Lu | Add the option to read ngac aer file +!> 2012-01-28 | J WANG | Use post available fields in xml file for grib2 +!> 2013-06-25 | S Moorthi | Add gocart_on logical option to save memory +!> 2013-10-03 | J Wang |Add option for po to be pascal, and add gocart_on,d3d_on and popascal to namelist +!> 2020-03-25 | J Meng | Remove grib1 +!> 2021-06-20 | W Meng | Remove reading grib1 and gfsio lib +!> 2021-07-07 | J MENG |2D DECOMPOSITION +!> 2021-10-22 | KaYee Wong | Created formal fortran namelist for itag +!> 2021-11-03 | Tracy Hertneky | Removed SIGIO option +!> 2022-01-14 | W Meng | Remove interfaces INITPOST_GS_NEMS, INITPOST_NEMS_MPIIO, INITPOST_NMM and INITPOST_GFS_NETCDF +!> 2022-03-15 | W Meng | Unify FV3 based interfaces +!> 2022-09-22 | L Zhang | Add option of nasa_on to process ufs-aerosols +!> 2022-11-08 | K Wang | Replace aqfamaq_on with aqf_on +!> 2023-01-24 | Sam Trahan | write_ifi_debug_files flag for IFI debug capability +!> +!> @author Mike Bladwin NSSL/SPC @date 2002-06-18 PROGRAM WRFPOST ! @@ -140,20 +112,20 @@ PROGRAM WRFPOST use CTLBLK_mod, only: filenameaer, me, num_procs, num_servers, mpi_comm_comp, datestr, & mpi_comm_inter, filename, ioform, grib, idat, filenameflux, filenamed3d, gdsdegr, & spldef, modelname, ihrst, lsmdef,vtimeunits, tprec, pthresh, datahandle, im, jm, lm, & - lp1, lm1, im_jm, isf_surface_physics, nsoil, spl, lsmp1, global, & + lp1, lm1, im_jm, isf_surface_physics, nsoil, spl, lsmp1, global, imp_physics, & + ista, iend, ista_m, iend_m, ista_2l, iend_2u, & jsta, jend, jsta_m, jend_m, jsta_2l, jend_2u, novegtype, icount_calmict, npset, datapd,& lsm, fld_info, etafld2_tim, eta2p_tim, mdl2sigma_tim, cldrad_tim, miscln_tim, & - mdl2agl_tim, mdl2std_tim, mdl2thandpv_tim, calrad_wcloud_tim, & + mdl2agl_tim, mdl2std_tim, mdl2thandpv_tim, calrad_wcloud_tim,nasa_on, & fixed_tim, time_output, imin, surfce2_tim, komax, ivegsrc, d3d_on, gocart_on,rdaod, & - readxml_tim, spval, fullmodelname, submodelname, hyb_sigp, filenameflat, aqfcmaq_on + readxml_tim, spval, fullmodelname, submodelname, hyb_sigp, filenameflat, aqf_on,numx, & + run_ifi_tim use grib2_module, only: gribit2,num_pset,nrecout,first_grbtbl,grib_info_finalize - use sigio_module, only: sigio_head - use sigio_r_module, only: sigio_rropen, sigio_rrhead + use upp_ifi_mod, only: write_ifi_debug_files !- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - implicit none ! type(nemsio_gfile) :: nfile,ffile,rfile - type(sigio_head) :: sighead INCLUDE "mpif.h" ! ! DECLARE VARIABLES. @@ -165,7 +137,7 @@ PROGRAM WRFPOST real(kind=8) :: time_initpost=0.,INITPOST_tim=0.,btim,bbtim real rinc(5), untcnvt integer :: status=0,iostatusD3D=0,iostatusFlux=0 - integer i,j,iii,l,k,ierr,nrec,ist,lusig,idrt,ncid3d,varid + integer i,j,iii,l,k,ierr,nrec,ist,lusig,idrt,ncid3d,ncid2d,varid integer :: PRNTSEC,iim,jjm,llm,ioutcount,itmp,iret,iunit, & iunitd3d,iyear,imn,iday,LCNTRL,ieof integer :: iostatusAER @@ -173,8 +145,11 @@ PROGRAM WRFPOST ! integer :: kpo,kth,kpv real,dimension(komax) :: po,th,pv - namelist/nampgb/kpo,po,kth,th,kpv,pv,fileNameAER,d3d_on,gocart_on,popascal & - ,hyb_sigp,rdaod,aqfcmaq_on + namelist/nampgb/kpo,po,kth,th,kpv,pv,fileNameAER,d3d_on,gocart_on,nasa_on,popascal & + ,hyb_sigp,rdaod,aqf_on,vtimeunits,numx,write_ifi_debug_files + integer :: itag_ierr + namelist/model_inputs/fileName,IOFORM,grib,DateStr,MODELNAME,SUBMODELNAME & + ,fileNameFlux,fileNameFlat character startdate*19,SysDepInfo*80,IOWRFNAME*3,post_fname*255 character cgar*1,cdum*4,line*10 @@ -215,42 +190,38 @@ PROGRAM WRFPOST spval = 9.9e10 ! !************************************************************************** -!read namelist - open(5,file='itag') - 98 read(5,111,end=1000) fileName - if (me==0) print*,'fileName= ',fileName - read(5,113) IOFORM - if (me==0) print*,'IOFORM= ',IOFORM - read(5,120) grib - if (me==0) print*,'OUTFORM= ',grib - if(index(grib,"grib") == 0) then -! grib='grib1' !GRIB1 IS NOT SUPPORTED ANYMORE. - grib='grib2' - rewind(5,iostat=ierr) - read(5,111,end=1000) fileName - read(5,113) IOFORM - endif - if (me==0) print*,'OUTFORM2= ',grib - read(5,112) DateStr - read(5,114) FULLMODELNAME - MODELNAME=FULLMODELNAME(1:4) - SUBMODELNAME=FULLMODELNAME(5:) - IF(len_trim(FULLMODELNAME)<5) THEN - SUBMODELNAME='NONE' - ENDIF -! if(MODELNAME == 'NMM')then +!KaYee: Read itag in Fortran Namelist format +!Set default + SUBMODELNAME='NONE' + numx=1 +!open namelist + open(5,file='itag') + read(5,nml=model_inputs,iostat=itag_ierr,err=888) + !print*,'itag_ierr=',itag_ierr +888 if (itag_ierr /= 0) then + print*,'Incorrect namelist variable(s) found in the itag file,stopping!' + stop + endif + + if (me==0) print*,'fileName= ',fileName + if (me==0) print*,'IOFORM= ',IOFORM + !if (me==0) print*,'OUTFORM= ',grib + if (me==0) print*,'OUTFORM= ',grib + if (me==0) print*,'DateStr= ',DateStr + if (me==0) print*,'MODELNAME= ',MODELNAME + if (me==0) print*,'SUBMODELNAME= ',SUBMODELNAME + if (me==0) print*,'numx= ',numx +! if(MODELNAME == 'NMM')then ! read(5,1114) VTIMEUNITS ! 1114 format(a4) ! if (me==0) print*,'VALID TIME UNITS = ', VTIMEUNITS -! endif +! endif ! - 303 format('FULLMODELNAME="',A,'" MODELNAME="',A,'" & - SUBMODELNAME="',A,'"') + 303 format('MODELNAME="',A,'" SUBMODELNAME="',A,'"') - write(0,*)'FULLMODELNAME: ', FULLMODELNAME -! MODELNAME, SUBMODELNAME + write(0,*)'MODELNAME: ', MODELNAME, SUBMODELNAME - if (me==0) print 303,FULLMODELNAME,MODELNAME,SUBMODELNAME + if (me==0) print 303,MODELNAME,SUBMODELNAME ! assume for now that the first date in the stdin file is the start date read(DateStr,300) iyear,imn,iday,ihrst,imin if (me==0) write(*,*) 'in WRFPOST iyear,imn,iday,ihrst,imin', & @@ -270,25 +241,13 @@ PROGRAM WRFPOST 120 format(a5) 121 format(a4) +!KaYee: Read in GFS/FV3 runs in Fortran Namelist Format. if (me==0) print*,'MODELNAME= ',MODELNAME,'grib=',grib -!Chuang: If model is GFS, read in flux file name from unit5 if(MODELNAME == 'GFS' .OR. MODELNAME == 'FV3R') then - read(5,111,end=117) fileNameFlux if (me == 0) print*,'first two file names in GFS or FV3= ' & ,trim(fileName),trim(fileNameFlux) - 117 continue - - read(5,111,end=118) fileNameD3D - if (me == 0) print*,'D3D names in GFS= ',trim(fileNameD3D) - 118 continue - end if -! -! set ndegr -! if(grib=='grib1') then -! gdsdegr = 1000. -! else if (grib=='grib2') then if(grib=='grib2') then gdsdegr = 1.d6 endif @@ -305,28 +264,62 @@ PROGRAM WRFPOST hyb_sigp = .true. d3d_on = .false. gocart_on = .false. - aqfcmaq_on = .false. + nasa_on = .false. + aqf_on = .false. popascal = .false. fileNameAER = '' rdaod = .false. ! gocart_on = .true. ! d3d_on = .true. - if(MODELNAME == 'RAPR') then - read(5,*,iostat=iret,end=119) kpo - else - read(5,nampgb,iostat=iret,end=119) - endif -! if(kpo > komax)print*,'pressure levels cannot exceed ',komax; STOP -! if(kth > komax)print*,'isent levels cannot exceed ',komax; STOP -! if(kpv > komax)print*,'PV levels cannot exceed ',komax; STOP +!set control file name + fileNameFlat='postxconfig-NT.txt' + read(5,nampgb,iostat=iret,end=119) 119 continue + if (me==0) print*,'in itag, write_ifi_debug_files=', write_ifi_debug_files + if (me==0) print*,'in itag, mod(num_procs,numx)=', mod(num_procs,numx) + if(mod(num_procs,numx)/=0) then + if (me==0) then + print*,'total proces, num_procs=', num_procs + print*,'number of subdomain in x direction, numx=', numx + print*,'remainder of num_procs/numx = ', mod(num_procs,numx) + print*,'Warning!!! the remainder of num_procs/numx is not 0, reset numx=1 & + & in this run or you adjust numx in the itag file to restart' + endif +! stop 9999 + numx=1 + if(me == 0) print*,'Warning!!! Reset numx as 1, numx=',numx + endif + if(numx>num_procs/2) then + if (me==0) then + print*,'total proces, num_procs=', num_procs + print*,'number of subdomain in x direction, numx=', numx + print*,'Warning!!! numx cannot exceed num_procs/2, reset numx=1 in this run' + print*,'or you adjust numx in the itag file to restart' + endif + numx=1 + if(me == 0) print*,'Warning!!! Reset numx as 1, numx=',numx + endif if(me == 0) then print*,'komax,iret for nampgb= ',komax,iret - print*,'komax,kpo,kth,th,kpv,pv,fileNameAER,popascal= ',komax,kpo & - & ,kth,th(1:kth),kpv,pv(1:kpv),trim(fileNameAER),popascal + print*,'komax,kpo,kth,th,kpv,pv,fileNameAER,nasa_on,popascal= ',komax,kpo & + & ,kth,th(1:kth),kpv,pv(1:kpv),trim(fileNameAER),nasa_on,popascal + print*,'NUM_PROCS=',NUM_PROCS + print*,'numx= ',numx endif + IF(TRIM(IOFORM) /= 'netcdfpara' .AND. TRIM(IOFORM) /= 'netcdf' ) THEN + numx=1 + if(me == 0) print*,'2D decomposition only supports netcdfpara IO.' + if(me == 0) print*,'Reset numx= ',numx + ENDIF + + IF(MODELNAME /= 'FV3R' .AND. MODELNAME /= 'GFS') THEN + numx=1 + if(me == 0) print*,'2D decomposition only supports GFS and FV3R.' + if(me == 0) print*,'Reset numx= ',numx + ENDIF + ! set up pressure level from POSTGPVARS or DEFAULT if(kpo == 0) then ! use default pressure levels @@ -342,15 +335,6 @@ PROGRAM WRFPOST if(me == 0) then print*,'using pressure levels from POSTGPVARS' endif - if(MODELNAME == 'RAPR')then - read(5,*) (po(l),l=1,kpo) -! CRA READ VALID TIME UNITS - read(5,121) VTIMEUNITS - if(me == 0) then - print*,'VALID TIME UNITS = ', VTIMEUNITS - endif -! CRA - endif lsm = kpo if( .not. popascal ) then untcnvt = 100. @@ -370,23 +354,8 @@ PROGRAM WRFPOST LSMP1 = LSM+1 if (me==0) print*,'LSM, SPL = ',lsm,spl(1:lsm) -!Chuang, Jun and Binbin: If model is RSM, read in precip accumulation frequency (sec) from unit5 - if(MODELNAME == 'RSM') then - read(5,115)PRNTSEC - TPREC = PRNTSEC/3600.0 - print*,'TPREC in RSM= ',TPREC - end if - 115 format(f7.1) 116 continue -!set control file name - fileNameFlat='postxconfig-NT.txt' - if(MODELNAME == 'GFS') then -! read(5,*) line - read(5,111,end=125) fileNameFlat - 125 continue -! if(len_trim(fileNameFlat)<5) fileNameFlat = 'postxconfig-NT.txt' - if (me == 0) print*,'Post flat name in GFS= ',trim(fileNameFlat) - endif + ! set PTHRESH for different models if(MODELNAME == 'NMM')then PTHRESH = 0.000004 @@ -394,7 +363,7 @@ PROGRAM WRFPOST PTHRESH = 0.000001 end if !Chuang: add dynamical allocation - if(TRIM(IOFORM) == 'netcdf') THEN + if(TRIM(IOFORM) == 'netcdf' .OR. TRIM(IOFORM) == 'netcdfpara') THEN IF(MODELNAME == 'NCAR' .OR. MODELNAME == 'RAPR' .OR. MODELNAME == 'NMM') THEN call ext_ncd_ioinit(SysDepInfo,Status) print*,'called ioinit', Status @@ -438,13 +407,43 @@ PROGRAM WRFPOST call ext_ncd_ioclose ( DataHandle, Status ) ELSE -! use netcdf lib directly to read FV3 output in netCDF +! use parallel netcdf lib directly to read FV3 output in netCDF spval = 9.99e20 - Status = nf90_open(trim(fileName),NF90_NOWRITE, ncid3d) + Status = nf90_open(trim(fileName),IOR(NF90_NOWRITE,NF90_MPIIO), & + ncid3d,comm=mpi_comm_world,info=mpi_info_null) if ( Status /= 0 ) then print*,'error opening ',fileName, ' Status = ', Status stop endif + Status = nf90_open(trim(fileNameFlux),IOR(NF90_NOWRITE,NF90_MPIIO), & + ncid2d,comm=mpi_comm_world,info=mpi_info_null) + if ( Status /= 0 ) then + print*,'error opening ',fileNameFlux, ' Status = ', Status + stop + endif +! read in LSM index and nsoil here + Status=nf90_get_att(ncid2d,nf90_global,'landsfcmdl', iSF_SURFACE_PHYSICS) + if(Status/=0)then + print*,'landsfcmdl not found; assigning to 2' + iSF_SURFACE_PHYSICS=2 !set LSM physics to 2 for NOAH + endif + if(iSF_SURFACE_PHYSICS<2)then + iSF_SURFACE_PHYSICS=2 !set LSM physics to 2 for NOAH + endif + Status=nf90_get_att(ncid2d,nf90_global,'nsoil', NSOIL) + if(Status/=0)then + print*,'nsoil not found; assigning to 4' + NSOIL=4 !set nsoil to 4 for NOAH + endif + if(me==0)print*,'SF_SURFACE_PHYSICS= ',iSF_SURFACE_PHYSICS + if(me==0)print*,'NSOIL= ',NSOIL +! read imp_physics + Status=nf90_get_att(ncid2d,nf90_global,'imp_physics',imp_physics) + if(Status/=0)then + print*,'imp_physics not found; assigning to GFDL 11' + imp_physics=11 + endif + if (me == 0) print*,'MP_PHYSICS= ',imp_physics ! get dimesions Status = nf90_inq_dimid(ncid3d,'grid_xt',varid) if ( Status /= 0 ) then @@ -481,57 +480,10 @@ PROGRAM WRFPOST IM_JM = IM*JM ! set NSOIL to 4 as default for NOAH but change if using other ! SFC scheme - NSOIL = 4 +! NSOIL = 4 print*,'im jm lm nsoil from fv3 output = ',im,jm,lm,nsoil END IF -! use netcdf_parallel lib directly to read FV3 output in netCDF - ELSE IF(TRIM(IOFORM) == 'netcdfpara') THEN - spval = 9.99e20 - Status = nf90_open(trim(fileName),ior(nf90_nowrite, nf90_mpiio), & - ncid3d, comm=mpi_comm_world, info=mpi_info_null) - if ( Status /= 0 ) then - print*,'error opening ',fileName, ' Status = ', Status - stop - endif -! get dimesions - Status = nf90_inq_dimid(ncid3d,'grid_xt',varid) - if ( Status /= 0 ) then - print*,Status,varid - STOP 1 - end if - Status = nf90_inquire_dimension(ncid3d,varid,len=im) - if ( Status /= 0 ) then - print*,Status - STOP 1 - end if - Status = nf90_inq_dimid(ncid3d,'grid_yt',varid) - if ( Status /= 0 ) then - print*,Status,varid - STOP 1 - end if - Status = nf90_inquire_dimension(ncid3d,varid,len=jm) - if ( Status /= 0 ) then - print*,Status - STOP 1 - end if - Status = nf90_inq_dimid(ncid3d,'pfull',varid) - if ( Status /= 0 ) then - print*,Status,varid - STOP 1 - end if - Status = nf90_inquire_dimension(ncid3d,varid,len=lm) - if ( Status /= 0 ) then - print*,Status - STOP 1 - end if - LP1 = LM+1 - LM1 = LM-1 - IM_JM = IM*JM -! set NSOIL to 4 as default for NOAH but change if using other -! SFC scheme - NSOIL = 4 - print*,'im jm lm nsoil from fv3 output = ',im,jm,lm,nsoil ELSE IF(TRIM(IOFORM) == 'binary' .OR. & TRIM(IOFORM) == 'binarympiio' ) THEN @@ -598,74 +550,6 @@ PROGRAM WRFPOST END IF - ELSE IF(TRIM(IOFORM) == 'sigio' )THEN - - IF(MODELNAME == 'GFS') THEN - lusig = 32 - - !IF(ME == 0)THEN - - call sigio_rropen(lusig,trim(filename),status) - - if ( Status /= 0 ) then - print*,'error opening ',fileName, ' Status = ', Status ; stop - endif -!--- - call sigio_rrhead(lusig,sighead,status) - if ( Status /= 0 ) then - print*,'error finding GFS dimensions '; stop - else - idrt = 4 ! set default to Gaussian first - call getenv('IDRT',cgar) ! then read idrt to see if user request latlon - if(cgar /= " ")then - read(cgar,'(I1)',iostat=Status) idrt - !if(Status = =0)idrt = idum - call getenv('LONB',cdum) - read(cdum,'(I4)',iostat=Status) im - if(Status /= 0)then - print*,'error reading user specified lonb for latlon grid, stopping' - call mpi_abort() - stop - end if - call getenv('LATB',cdum) - read(cdum,'(I4)',iostat=Status)jm - if(Status /= 0)then - print*,'error reading user specified latb for latlon grid, stopping' - call mpi_abort() - stop - end if - else - idrt = 4 - im = sighead%lonb - jm = sighead%latb - endif - print*,'idrt=',idrt - lm = sighead%levs - end if - nsoil = 4 -! opening GFS flux file - if(me == 0)then - iunit = 33 - call baopenr(iunit,trim(fileNameFlux),iostatusFlux) - if(iostatusFlux /= 0)print*,'flux file not opened' - iunitd3d = 34 - call baopenr(iunitd3d,trim(fileNameD3D),iostatusD3D) -! iostatusD3D=-1 - END IF -! CALL mpi_bcast(im, 1,MPI_INTEGER,0, mpi_comm_comp,status) -! call mpi_bcast(jm, 1,MPI_INTEGER,0, mpi_comm_comp,status) -! call mpi_bcast(lm, 1,MPI_INTEGER,0, mpi_comm_comp,status) -! call mpi_bcast(nsoil, 1,MPI_INTEGER,0, mpi_comm_comp,status) - call mpi_bcast(iostatusFlux,1,MPI_INTEGER,0, mpi_comm_comp,status) - call mpi_bcast(iostatusD3D, 1,MPI_INTEGER,0, mpi_comm_comp,status) - print*,'im jm lm nsoil from GFS= ',im,jm, lm ,nsoil - LP1 = LM+1 - LM1 = LM-1 - IM_JM = IM*JM - ELSE - print*,'post only reads sigma files for GFS, stopping';stop - END IF - ELSE PRINT*,'UNKNOWN MODEL OUTPUT FORMAT, STOPPING' STOP 9999 @@ -703,28 +587,18 @@ PROGRAM WRFPOST ! Reading model output for different models and IO format - IF(TRIM(IOFORM) == 'netcdf') THEN + IF(TRIM(IOFORM) == 'netcdf' .OR. TRIM(IOFORM) == 'netcdfpara') THEN IF(MODELNAME == 'NCAR' .OR. MODELNAME == 'RAPR') THEN print*,'CALLING INITPOST TO PROCESS NCAR NETCDF OUTPUT' CALL INITPOST - ELSE IF(MODELNAME == 'NMM') THEN - print*,'CALLING INITPOST_NMM TO PROCESS NMM NETCDF OUTPUT' - CALL INITPOST_NMM - ELSE IF (MODELNAME == 'FV3R') THEN -! use netcdf library to read output directly + ELSE IF (MODELNAME == 'FV3R' .OR. MODELNAME == 'GFS') THEN +! use parallel netcdf library to read output directly print*,'CALLING INITPOST_NETCDF' - CALL INITPOST_NETCDF(ncid3d) - ELSE IF (MODELNAME == 'GFS') THEN - print*,'CALLING INITPOST_GFS_NETCDF' - CALL INITPOST_GFS_NETCDF(ncid3d) + CALL INITPOST_NETCDF(ncid2d,ncid3d) ELSE PRINT*,'POST does not have netcdf option for model,',MODELNAME,' STOPPING,' STOP 9998 END IF -! use netcdf_parallel library to read fv3 output - ELSE IF(TRIM(IOFORM) == 'netcdfpara') THEN - print*,'CALLING INITPOST_GFS_NETCDF_PARA' - CALL INITPOST_GFS_NETCDF_PARA(ncid3d) ELSE IF(TRIM(IOFORM) == 'binarympiio') THEN IF(MODELNAME == 'NCAR' .OR. MODELNAME == 'RAPR' .OR. MODELNAME == 'NMM') THEN print*,'WRF BINARY IO FORMAT IS NO LONGER SUPPORTED, STOPPING' @@ -739,10 +613,6 @@ PROGRAM WRFPOST ELSE IF(TRIM(IOFORM) == 'binarynemsio') THEN IF(MODELNAME == 'NMM') THEN CALL INITPOST_NEMS(NREC,nfile) - ELSE IF(MODELNAME == 'GFS') THEN -! CALL INITPOST_GFS_NEMS(NREC,iostatusFlux,iostatusD3D,nfile,ffile) - CALL INITPOST_GFS_NEMS(NREC,iostatusFlux,iostatusD3D,iostatusAER, & - nfile,ffile,rfile) ELSE PRINT*,'POST does not have nemsio option for model,',MODELNAME,' STOPPING,' STOP 9998 @@ -750,11 +620,7 @@ PROGRAM WRFPOST END IF ELSE IF(TRIM(IOFORM) == 'binarynemsiompiio')THEN - IF(MODELNAME == 'NMM') THEN -! close nemsio file for serial read - call nemsio_close(nfile,iret=status) - CALL INITPOST_NEMS_MPIIO() - ELSE IF(MODELNAME == 'GFS') THEN + IF(MODELNAME == 'GFS') THEN ! close nemsio file for serial read call nemsio_close(nfile,iret=status) call nemsio_close(ffile,iret=status) @@ -766,13 +632,6 @@ PROGRAM WRFPOST STOP 9999 END IF - ELSE IF(TRIM(IOFORM) == 'sigio')THEN - IF(MODELNAME == 'GFS') THEN - CALL INITPOST_GFS_SIGIO(lusig,iunit,iostatusFlux,iostatusD3D,idrt,sighead) - ELSE - PRINT*,'POST does not have sigio option for this model, STOPPING' - STOP 99981 - END IF ELSE PRINT*,'UNKNOWN MODEL OUTPUT FORMAT, STOPPING' @@ -842,11 +701,15 @@ PROGRAM WRFPOST CALL SET_OUTFLDS(kth,th,kpv,pv) if (me==0) write(0,*)' in WRFPOST size datapd',size(datapd) if(allocated(datapd)) deallocate(datapd) - allocate(datapd(im,1:jend-jsta+1,nrecout+100)) +!Jesse x-decomposition +! allocate(datapd(im,1:jend-jsta+1,nrecout+100)) + allocate(datapd(1:iend-ista+1,1:jend-jsta+1,nrecout+100)) !$omp parallel do private(i,j,k) do k=1,nrecout+100 do j=1,jend+1-jsta - do i=1,im +!Jesse x-decomposition +! do i=1,im + do i =1,iend+1-ista datapd(i,j,k) = 0. enddo enddo @@ -908,6 +771,7 @@ PROGRAM WRFPOST print*, 'FIXED_tim = ',FIXED_tim print*, 'MDL2THANDPV_tim = ',MDL2THANDPV_tim print*, 'CALRAD_WCLOUD_tim = ',CALRAD_WCLOUD_tim + print*, 'RUN_IFI_tim = ',RUN_IFI_tim print*, 'Total time = ',(mpi_wtime() - bbtim) print*, 'Time for OUTPUT = ',time_output print*, 'Time for READxml = ',READxml_tim diff --git a/sorc/ncep_post.fd/ZENSUN.f b/sorc/ncep_post.fd/ZENSUN.f index a0c0412fb..4c46415b6 100644 --- a/sorc/ncep_post.fd/ZENSUN.f +++ b/sorc/ncep_post.fd/ZENSUN.f @@ -1,75 +1,63 @@ !> @file -! . . . . -!> subprogram: zensun make sun zenith and sun azimuth angle -!! -!! prgmmr: Paul Ricchiazzi org: Earth Space Research Group,UCSB date: 1992-10-23 -!! -!! abstract: -!! Compute solar position information as a function of -!! geographic coordinates, date and time. -!! -!! program history log: -!! 2005-10-21 kazumori - reformatted for GSI -!! -!! input argument list: -!! day - Julian day (positive scalar or vector) -!! (spring equinox = 80) -!! (summer solstice= 171) -!! (fall equinox = 266) -!! (winter solstice= 356) -!! time - Universal Time in hours (scalar or vector) -!! lat - geographic latitude of point on earth's surface (degrees) -!! lon - geographic longitude of point on earth's surface (degrees) -!! -!! output argument list: -!! sun_zenith - solar zenith angle -!! sun_azimuth - solar azimuth angle -!! -!! comments: -!! -!! -!! PROCEDURE: -!! -!! 1. Calculate the subsolar point latitude and longitude, based on -!! DAY and TIME. Since each year is 365.25 days long the exact -!! value of the declination angle changes from year to year. For -!! precise values consult THE AMERICAN EPHEMERIS AND NAUTICAL -!! ALMANAC published yearly by the U.S. govt. printing office. The -!! subsolar coordinates used in this code were provided by a -!! program written by Jeff Dozier. -!! -!! 2. Given the subsolar latitude and longitude, spherical geometry is -!! used to find the solar zenith, azimuth and flux multiplier. -!! -!! eqt = equation of time (minutes) ! solar longitude correction = -15*eqt -!! dec = declination angle (degrees) = solar latitude -!! -!! LOWTRAN v7 data (25 points) -!! The LOWTRAN solar position data is characterized by only 25 points. -!! This should predict the subsolar angles within one degree. For -!! increased accuracy add more data points. -!! -!!nday=[ 1., 9., 21., 32., 44., 60., 91., 121., 141., 152.,$ -!! 160., 172., 182., 190., 202., 213., 244., 274., 305., 309.,$ -!! 325., 335., 343., 355., 366.] -!! -!!eqt=[ -3.23, -6.83,-11.17,-13.57,-14.33,-12.63, -4.2, 2.83, 3.57, 2.45,$ -!! 1.10, -1.42, -3.52, -4.93, -6.25, -6.28,-0.25, 10.02, 16.35, 16.38,$ -!! 14.3, 11.27, 8.02, 2.32, -3.23] -!! -!!dec=[-23.07,-22.22,-20.08,-17.32,-13.62, -7.88, 4.23, 14.83, 20.03, 21.95,$ -!! 22.87, 23.45, 23.17, 22.47, 20.63, 18.23, 8.58, -2.88,-14.18,-15.45,$ -!! -19.75,-21.68,-22.75,-23.43,-23.07] -!! -!! Analemma information from Jeff Dozier -!! This data is characterized by 74 points -!! -!! -!! attributes: -!! language: f90 -!! machine: ibm RS/6000 SP -!! -!! +!> zensun() makes sun zenith and sun azimuth angle. +!> +!> @author Paul Ricchiazzi Earth Space Research Group,UCSB @date 1992-10-23 + +!> This subroutine computes solar position information as a function of +!> geographic coordinates, date and time. +!> +!> +!> @note Procedure: +!> +!> 1. Calculate the subsolar point latitude and longitude, based on +!> DAY and TIME. Since each year is 365.25 days long the exact +!> value of the declination angle changes from year to year. For +!> precise values consult THE AMERICAN EPHEMERIS AND NAUTICAL +!> ALMANAC published yearly by the U.S. govt. printing office. The +!> subsolar coordinates used in this code were provided by a +!> program written by Jeff Dozier. +!> +!> 2. Given the subsolar latitude and longitude, spherical geometry is +!> used to find the solar zenith, azimuth and flux multiplier. +!> +!> eqt = equation of time (minutes) ! solar longitude correction = -15*eqt +!> dec = declination angle (degrees) = solar latitude +!> +!> LOWTRAN v7 data (25 points) +!> The LOWTRAN solar position data is characterized by only 25 points. +!> This should predict the subsolar angles within one degree. For +!> increased accuracy add more data points. +!> +!> nday=[ 1., 9., 21., 32., 44., 60., 91., 121., 141., 152.,$ +!> 160., 172., 182., 190., 202., 213., 244., 274., 305., 309.,$ +!> 325., 335., 343., 355., 366.] +!> +!> eqt=[ -3.23, -6.83,-11.17,-13.57,-14.33,-12.63, -4.2, 2.83, 3.57, 2.45,$ +!> 1.10, -1.42, -3.52, -4.93, -6.25, -6.28,-0.25, 10.02, 16.35, 16.38,$ +!> 14.3, 11.27, 8.02, 2.32, -3.23] +!> +!> dec=[-23.07,-22.22,-20.08,-17.32,-13.62, -7.88, 4.23, 14.83, 20.03, 21.95,$ +!> 22.87, 23.45, 23.17, 22.47, 20.63, 18.23, 8.58, -2.88,-14.18,-15.45,$ +!> -19.75,-21.68,-22.75,-23.43,-23.07] +!> +!> Analemma information from Jeff Dozier +!> +!> This data is characterized by 74 points. +!> +!> +!> @param[in] day Julian day (positive scalar or vector), (spring equinox = 80), (summer solstice= 171), (fall equinox = 266), (winter solstice= 356). +!> @param[in] time Universal Time in hours (scalar or vector). +!> @param[in] lat Geographic latitude of point on earth's surface (degrees). +!> @param[in] lon Geographic longitude of point on earth's surface (degrees). +!> @param[out] sun_zenith - solar zenith angle. +!> @param[out] sun_azimuth - solar azimuth angle. +!> +!> ### Program history log: +!> Date | Programmer | Comments +!> -----|------------|--------- +!> 2005-10-21 | kazumori | Reformatted for GSI +!> +!> @author Paul Ricchiazzi Earth Space Research Group,UCSB @date 1992-10-23 subroutine zensun(day,time,lat,lon,pi,sun_zenith,sun_azimuth) ! diff --git a/sorc/ncep_post.fd/build_upp_lib.sh b/sorc/ncep_post.fd/build_upp_lib.sh deleted file mode 100755 index b3a01dae3..000000000 --- a/sorc/ncep_post.fd/build_upp_lib.sh +++ /dev/null @@ -1,54 +0,0 @@ -SHELL=/bin/sh - -module purge -set -x -mac=$(hostname | cut -c1-1) -mac2=$(hostname | cut -c1-2) - -if [ $mac2 = hf ] ; then # For Hera - machine=hera - . /etc/profile - . /etc/profile.d/modules.sh -elif [ $mac = f ] ; then # For Jet - machine=jet - . /etc/profile - . /etc/profile.d/modules.sh -elif [ $mac = v -o $mac = m ] ; then # For Dell - machine=wcoss_dell_p3 - . $MODULESHOME/init/bash -elif [ $mac = t -o $mac = e -o $mac = g ] ; then # For WCOSS - machine=wcoss - . /usrx/local/Modules/default/init/bash -elif [ $mac2 = s4 ] ; then # For S4 - machine=s4 - . /etc/profile -elif [ $mac = l -o $mac = s ] ; then # wcoss_c (i.e. luna and surge) - export machine=cray-intel -elif [ $mac = O ] ; then # For Orion - machine=orion - . /etc/profile -fi -export version=${1:-"v8.0.0"} - -moduledir=`dirname $(readlink -f ../../modulefiles/post)` -module use -a ${moduledir} -module load upp/lib-${machine} -#module load nceppost_modulefile - -# -module list - -#sleep 1 - -BASE=`pwd` - -##################################### -cd ${BASE} -rm *.o *.mod incmod -#mkdir -m 775 -p $BASE/../../lib/include/ncep_post_${version}_4 -make -f makefile_lib clean -mkdir -m 775 -p include/upp_4 -make -f makefile_lib - -exit 0 - diff --git a/sorc/ncep_post.fd/grib2_module.f b/sorc/ncep_post.fd/grib2_module.f index 47bf52965..dadeacb10 100644 --- a/sorc/ncep_post.fd/grib2_module.f +++ b/sorc/ncep_post.fd/grib2_module.f @@ -10,6 +10,9 @@ module grib2_module ! are defined in xml file ! March, 2015 Lin Gan Replace XML file with flat file implementation ! with parameter marshalling +! July, 2021 Jesse Meng 2D decomsition +! June, 2022 Lin Zhu change the dx/dy to reading in from calculating for latlon grid +! January, 2023 Sam Trahan foot&meter Unit conversions for IFI !------------------------------------------------------------------------ use xml_perl_data, only: param_t,paramset_t ! @@ -94,7 +97,8 @@ module grib2_module character*255 fl_nametbl,fl_gdss3 logical :: first_grbtbl ! - public num_pset,pset,nrecout,gribit2,grib_info_init,first_grbtbl,grib_info_finalize + public num_pset,pset,nrecout,gribit2,grib_info_init,first_grbtbl,grib_info_finalize,read_grib2_head,read_grib2_sngle + real(8), EXTERNAL :: timef !------------------------------------------------------------------------------------- ! contains @@ -196,7 +200,7 @@ end subroutine grib_info_finalize subroutine gribit2(post_fname) ! !------- - use ctlblk_mod, only : im,jm,im_jm,num_procs,me,jsta,jend,ifhr,sdat,ihrst,imin, & + use ctlblk_mod, only : im,jm,im_jm,num_procs,me,ista,iend,jsta,jend,ifhr,sdat,ihrst,imin, & mpi_comm_comp,ntlfld,fld_info,datapd,icnt,idsp implicit none ! @@ -214,6 +218,7 @@ subroutine gribit2(post_fname) integer(4),allocatable :: isdsp(:),iscnt(:),ircnt(:),irdsp(:) integer status(MPI_STATUS_SIZE) integer(kind=MPI_OFFSET_KIND) idisp + integer,allocatable :: ista_pe(:),iend_pe(:) integer,allocatable :: jsta_pe(:),jend_pe(:) integer,allocatable :: grbmsglen(:) real,allocatable :: datafld(:,:) @@ -221,6 +226,7 @@ subroutine gribit2(post_fname) logical, parameter :: debugprint = .false. ! character(1), dimension(:), allocatable :: cgrib + real :: level_unit_conversion ! ! !---------------- code starts here -------------------------- @@ -252,6 +258,12 @@ subroutine gribit2(post_fname) !--- reditribute data from partial domain data with all fields !--- to whole domain data but partial fields ! + allocate(ista_pe(num_procs),iend_pe(num_procs)) + call mpi_allgather(ista,1,MPI_INTEGER,ista_pe,1, & + MPI_INTEGER,MPI_COMM_COMP,ierr) + call mpi_allgather(iend,1,MPI_INTEGER,iend_pe,1, & + MPI_INTEGER,MPI_COMM_COMP,ierr) + allocate(jsta_pe(num_procs),jend_pe(num_procs)) call mpi_allgather(jsta,1,MPI_INTEGER,jsta_pe,1, & MPI_INTEGER,MPI_COMM_COMP,ierr) @@ -268,18 +280,19 @@ subroutine gribit2(post_fname) ! !--- sequatial write if the number of fields to write is small ! - if(minval(nfld_pe)<1.or.num_procs==1) then +!JESSE if(minval(nfld_pe)<1.or.num_procs==1) then + if(num_procs==1) then ! !-- collect data to pe 0 allocate(datafld(im_jm,ntlfld) ) - if(num_procs==1) then +! if(num_procs==1) then datafld=reshape(datapd,(/im_jm,ntlfld/)) - else - do i=1,ntlfld - call mpi_gatherv(datapd(:,:,i),icnt(me),MPI_REAL, & - datafld(:,i),icnt,idsp,MPI_REAL,0,MPI_COMM_COMP,ierr) - enddo - endif +! else +! do i=1,ntlfld +! call mpi_gatherv(datapd(:,:,i),icnt(me),MPI_REAL, & +! datafld(:,i),icnt,idsp,MPI_REAL,0,MPI_COMM_COMP,ierr) +! enddo +! endif ! !-- pe 0 create grib2 message and write to the file if(me==0) then @@ -313,10 +326,14 @@ subroutine gribit2(post_fname) ' category ',icatg, & ' parameter ',iparm, & ' for var ',trim(pset%param(nprm)%pname) - + if(index(pset%param(nprm)%shortname,'IFI_FLIGHT_LEVEL')>0) then + level_unit_conversion=0.3048 ! convert feet->meters + else + level_unit_conversion=1 + endif call gengrb2msg(idisc,icatg, iparm,nprm,nlvl,fldlvl1,fldlvl2, & fld_info(i)%ntrange,fld_info(i)%tinvstat,datafld(:,i), & - cgrib,clength) + cgrib,clength,level_unit_conversion) ! print *,'finished gengrb2msg field=',i,'ntlfld=',ntlfld,'clength=',clength call wryte(lunout, clength, cgrib) else @@ -338,13 +355,13 @@ subroutine gribit2(post_fname) allocate(ircnt(num_procs),irdsp(num_procs)) isdsp(1)=0 do n=1,num_procs - iscnt(n)=(jend_pe(me+1)-jsta_pe(me+1)+1)*im*nfld_pe(n) + iscnt(n)=(jend_pe(me+1)-jsta_pe(me+1)+1)*(iend_pe(me+1)-ista_pe(me+1)+1)*nfld_pe(n) if(n0) then + level_unit_conversion=0.3048 ! convert feet->meters + else + level_unit_conversion=1 + endif call gengrb2msg(idisc,icatg, iparm,nprm,nlvl,fldlvl1,fldlvl2,ntrange, & - leng_time_range_stat,datafld(:,i),cgrib(cstart),clength) + leng_time_range_stat,datafld(:,i),cgrib(cstart),clength, & + level_unit_conversion) cstart=cstart+clength ! else @@ -467,7 +491,7 @@ end subroutine gribit2 !---------------------------------------------------------------------------------------- ! subroutine gengrb2msg(idisc,icatg, iparm,nprm,nlvl,fldlvl1,fldlvl2,ntrange,tinvstat, & - datafld1,cgrib,lengrib) + datafld1,cgrib,lengrib,level_unit_conversion) ! !---------------------------------------------------------------------------------------- ! @@ -486,6 +510,7 @@ subroutine gengrb2msg(idisc,icatg, iparm,nprm,nlvl,fldlvl1,fldlvl2,ntrange,tinvs real,dimension(:),intent(in) :: datafld1 character(1),intent(inout) :: cgrib(max_bytes) integer, intent(inout) :: lengrib + real, intent(in) :: level_unit_conversion ! integer, parameter :: igdsmaxlen=200 ! @@ -722,6 +747,14 @@ subroutine gengrb2msg(idisc,icatg, iparm,nprm,nlvl,fldlvl1,fldlvl2,ntrange,tinvs scale_fct_fixed_sfc2=0 endif + if(abs(level_unit_conversion-1)>1e-4) then +! print *,'apply level unit conversion ',level_unit_conversion +! print *,'scaled_val_fixed_sfc1 was ',scaled_val_fixed_sfc1 + scaled_val_fixed_sfc1=nint(scaled_val_fixed_sfc1*real(level_unit_conversion,kind=8)) + scaled_val_fixed_sfc2=nint(scaled_val_fixed_sfc2*real(level_unit_conversion,kind=8)) +! print *,'scaled_val_fixed_sfc1 now ',scaled_val_fixed_sfc1 + endif + ihr_start = ifhr-tinvstat if(modelname=='RAPR'.and.vtimeunits=='FMIN') then ifhrorig = ifhr @@ -989,6 +1022,359 @@ subroutine gengrb2msg(idisc,icatg, iparm,nprm,nlvl,fldlvl1,fldlvl2,ntrange,tinvs end subroutine gengrb2msg ! !-------------------------------------------------------------------------------------- +! +! E. JAMES: 10 JUN 2021 - Adding section to read in GRIB2 files for comparison +! within UPP. Two new subroutines added below. +! + subroutine read_grib2_head(filenameG2,nx,ny,nz,rlonmin,rlatmax,rdx,rdy) +! +!--- read grib2 file head information +! + use grib_mod + implicit none + character*256,intent(in) :: filenameG2 + integer, intent(out) :: nx,ny,nz + real, intent(out) :: rlonmin,rlatmax + real*8, intent(out) :: rdx,rdy +! +! + type(gribfield) :: gfld + logical :: expand=.true. + integer :: ifile + character(len=1),allocatable,dimension(:) :: cgrib + integer,parameter :: msk1=32000 + integer :: lskip, lgrib,iseek + integer :: currlen + integer :: icount , lengrib + integer :: listsec0(3) + integer :: listsec1(13) + integer year, month, day, hour, minute, second, fcst + integer :: numfields,numlocal,maxlocal,ierr + integer :: grib_edition + integer :: itot +! real :: dx,dy,lat1,lon1 + real :: scale_factor,scale_factor2 +! +! + integer :: nn,n,j,iret + real :: fldmax,fldmin,sum +! +! + scale_factor=1.0e6 + scale_factor2=1.0e3 + ifile=10 + loopfile: do nn=1,1 +! write(6,*) 'read in grib2 file head', trim(filenameG2) + lskip=0 + lgrib=0 + iseek=0 + icount=0 + itot=0 + currlen=0 +! Open GRIB2 file + call baopenr(ifile,trim(filenameG2),iret) + if (iret.eq.0) then + VERSION: do + ! Search opend file for the next GRIB2 messege (record). + call skgb(ifile,iseek,msk1,lskip,lgrib) + ! Check for EOF, or problem + if (lgrib.eq.0) then + exit + endif + ! Check size, if needed allocate more memory. + if (lgrib.gt.currlen) then + if (allocated(cgrib)) deallocate(cgrib) + allocate(cgrib(lgrib)) + currlen=lgrib + endif + ! Read a given number of bytes from unblocked file. + call baread(ifile,lskip,lgrib,lengrib,cgrib) + if(lgrib.ne.lengrib) then + write(*,*) 'ERROR, read_grib2 lgrib ne lengrib', & + lgrib,lengrib + stop 1234 + endif + iseek=lskip+lgrib + icount=icount+1 + ! Unpack GRIB2 field + call gb_info(cgrib,lengrib,listsec0,listsec1, & + numfields,numlocal,maxlocal,ierr) + if(ierr.ne.0) then + write(6,*) 'Error querying GRIB2 message',ierr + stop + endif + itot=itot+numfields + grib_edition=listsec0(2) + if (grib_edition.ne.2) then + exit VERSION + endif +! write(*,*) 'listsec0=',listsec0 +! write(*,*) 'listsec1=',listsec1 +! write(*,*) 'numfields=',numfields +! get information form grib2 file + n=1 + call gf_getfld(cgrib,lengrib,n,.FALSE.,expand,gfld,ierr) + year =gfld%idsect(6) !(FOUR-DIGIT) YEAR OF THE DATA + month =gfld%idsect(7) ! MONTH OF THE DATA + day =gfld%idsect(8) ! DAY OF THE DATA + hour =gfld%idsect(9) ! HOUR OF THE DATA + minute=gfld%idsect(10) ! MINUTE OF THE DATA + second=gfld%idsect(11) ! SECOND OF THE DATA + write(*,*) 'year,month,day,hour,minute,second=' + write(*,*) year,month,day,hour,minute,second + write(*,*) 'source center =',gfld%idsect(1) + write(*,*) 'Indicator of model =',gfld%ipdtmpl(5) + write(*,*) 'observation level (m)=',gfld%ipdtmpl(12) + write(*,*) 'map projection=',gfld%igdtnum + if (gfld%igdtnum.eq.0) then ! Lat/Lon grid aka Cylindrical + ! Equidistant + nx = gfld%igdtmpl(8) + ny = gfld%igdtmpl(9) + nz = 1 + rdx = gfld%igdtmpl(17)/scale_factor + rdy = gfld%igdtmpl(18)/scale_factor + rlatmax = gfld%igdtmpl(12)/scale_factor + rlonmin = gfld%igdtmpl(13)/scale_factor +! write(*,*) 'nx,ny=',nx,ny +! write(*,*) 'dx,dy=',rdx,rdy +! write(*,*) 'lat1,lon1=',rlatmax,rlonmin + else if (gfld%igdtnum.eq.1) then ! Rotated Lat Lon Grid (RRFS_NA) + nx = gfld%igdtmpl(8) + ny = gfld%igdtmpl(9) + nz = 1 + rdx = gfld%igdtmpl(17)/scale_factor + rdy = gfld%igdtmpl(18)/scale_factor + rlatmax = gfld%igdtmpl(12)/scale_factor + rlonmin = gfld%igdtmpl(13)/scale_factor +! write(*,*) 'nx,ny=',nx,ny +! write(*,*) 'dx,dy=',rdx,rdy +! write(*,*) 'lat1,lon1=',rlatmax,rlonmin + else if (gfld%igdtnum.eq.30) then ! Lambert Conformal Grid (HRRR) + nx = gfld%igdtmpl(8) + ny = gfld%igdtmpl(9) + nz = 1 + rdx = gfld%igdtmpl(15)/scale_factor2 + rdy = gfld%igdtmpl(16)/scale_factor2 + rlatmax = gfld%igdtmpl(10)/scale_factor + rlonmin = gfld%igdtmpl(11)/scale_factor +! write(*,*) 'nx,ny=',nx,ny +! write(*,*) 'dx,dy=',rdx,rdy +! write(*,*) 'lat1,lon1=',rlatmax,rlonmin + else + write(*,*) 'unknown projection' + stop 1235 + endif + call gf_free(gfld) + enddo VERSION ! skgb + endif + CALL BACLOSE(ifile,ierr) + nullify(gfld%local) + if (allocated(cgrib)) deallocate(cgrib) + enddo loopfile + return + end subroutine read_grib2_head +! +!--- +! + subroutine read_grib2_sngle(filenameG2,ntot,height,var) +! +!--- read grib2 files +! + use grib_mod + implicit none + character*256,intent(in) :: filenameG2 + integer, intent(in) :: ntot + real, intent(out) :: var(ntot) + integer, intent(out) :: height +! +! + type(gribfield) :: gfld + logical :: expand=.true. + integer :: ifile + character(len=1),allocatable,dimension(:) :: cgrib + integer,parameter :: msk1=32000 + integer :: lskip, lgrib,iseek + integer :: currlen + integer :: icount , lengrib + integer :: listsec0(3) + integer :: listsec1(13) + integer year, month, day, hour, minute, second, fcst + integer :: numfields,numlocal,maxlocal,ierr + integer :: grib_edition + integer :: itot + integer :: nx,ny + real :: dx,dy,lat1,lon1,rtnum, nlat + real :: ref_value,bin_scale_fac,dec_scale_fac,bit_number,field_type + real :: bit_map + real :: scale_factor,scale_factor2 +! +! + integer :: nn,n,j,iret + real :: fldmax,fldmin,sum +! +! + scale_factor=1.0e6 + scale_factor2=1.0e3 + ifile=12 + loopfile: do nn=1,1 +! write(6,*) 'read mosaic in grib2 file ', trim(filenameG2) + lskip=0 + lgrib=0 + iseek=0 + icount=0 + itot=0 + currlen=0 +! Open GRIB2 file + call baopenr(ifile,trim(filenameG2),iret) + if (iret.eq.0) then + VERSION: do + ! Search opend file for the next GRIB2 messege (record). + call skgb(ifile,iseek,msk1,lskip,lgrib) + ! Check for EOF, or problem + if (lgrib.eq.0) then + exit + endif + ! Check size, if needed allocate more memory. + if (lgrib.gt.currlen) then + if (allocated(cgrib)) deallocate(cgrib) + allocate(cgrib(lgrib)) + currlen=lgrib + endif + ! Read a given number of bytes from unblocked file. + call baread(ifile,lskip,lgrib,lengrib,cgrib) + if(lgrib.ne.lengrib) then + write(*,*) 'ERROR, read_grib2 lgrib ne lengrib', & + lgrib,lengrib + stop 1234 + endif +! write(*,*) 'lengrib=',lengrib + iseek=lskip+lgrib + icount=icount+1 + ! Unpack GRIB2 field + call gb_info(cgrib,lengrib,listsec0,listsec1, & + numfields,numlocal,maxlocal,ierr) + if(ierr.ne.0) then + write(6,*) 'Error querying GRIB2 message',ierr + stop + endif + itot=itot+numfields + grib_edition=listsec0(2) + if (grib_edition.ne.2) then + exit VERSION + endif +! write(*,*) 'listsec0=',listsec0 +! write(*,*) 'listsec1=',listsec1 +! write(*,*) 'numfields=',numfields! +! get information form grib2 file + n=1 + call gf_getfld(cgrib,lengrib,n,.FALSE.,expand,gfld,ierr) + year =gfld%idsect(6) !(FOUR-DIGIT) YEAR OF THE DATA + month =gfld%idsect(7) ! MONTH OF THE DATA + day =gfld%idsect(8) ! DAY OF THE DATA + hour =gfld%idsect(9) ! HOUR OF THE DATA + minute=gfld%idsect(10) ! MINUTE OF THE DATA + second=gfld%idsect(11) ! SECOND OF THE DATA +! write(*,*) 'year,month,day,hour,minute,second=' +! write(*,*) year,month,day,hour,minute,second +! write(*,*) 'source center =',gfld%idsect(1) +! write(*,*) 'Indicator of model =',gfld%ipdtmpl(5) +! write(*,*) 'observation level (m)=',gfld%ipdtmpl(12) +! write(*,*) 'map projection=',gfld%igdtnum + height=gfld%ipdtmpl(12) + if (gfld%igdtnum.eq.0) then ! Lat/Lon grid aka Cylindrical + ! Equidistant + nx = gfld%igdtmpl(8) + ny = gfld%igdtmpl(9) + dx = gfld%igdtmpl(17)/scale_factor + dy = gfld%igdtmpl(18)/scale_factor + lat1 = gfld%igdtmpl(12)/scale_factor + lon1 = gfld%igdtmpl(13)/scale_factor +! write(*,*) 'nx,ny=',nx,ny +! write(*,*) 'dx,dy=',dx,dy +! write(*,*) 'lat1,lon1=',lat1,lon1 + else if (gfld%igdtnum.eq.1) then ! Rotated Lat Lon Grid (RRFS_NA) + nx = gfld%igdtmpl(8) + ny = gfld%igdtmpl(9) + dx = gfld%igdtmpl(17)/scale_factor + dy = gfld%igdtmpl(18)/scale_factor + lat1 = gfld%igdtmpl(12)/scale_factor + lon1 = gfld%igdtmpl(13)/scale_factor +! write(*,*) 'nx,ny=',nx,ny +! write(*,*) 'dx,dy=',rdx,rdy +! write(*,*) 'lat1,lon1=',rlatmax,rlonmin + else if (gfld%igdtnum.eq.30) then ! Lambert Conformal Grid (HRRR) + nx = gfld%igdtmpl(8) + ny = gfld%igdtmpl(9) + dx = gfld%igdtmpl(15)/scale_factor2 + dy = gfld%igdtmpl(16)/scale_factor2 + lat1 = gfld%igdtmpl(10)/scale_factor + lon1 = gfld%igdtmpl(11)/scale_factor +! write(*,*) 'In read_grib2_sngle:' +! write(*,*) 'nx,ny=',nx,ny +! write(*,*) 'dx,dy=',dx,dy +! write(*,*) 'lat1,lon1=',lat1,lon1 + rtnum = gfld%idrtnum +! write(*,*) 'rtnum=',rtnum + ref_value = gfld%idrtmpl(1) + bin_scale_fac = gfld%idrtmpl(2) + dec_scale_fac = gfld%idrtmpl(3) + bit_number = gfld%idrtmpl(4) + field_type = gfld%idrtmpl(5) + bit_map = gfld%ibmap +! write(*,*) 'ref_value=',ref_value +! write(*,*) 'bin_scale_fac=',bin_scale_fac +! write(*,*) 'dec_scale_fac=',dec_scale_fac +! write(*,*) 'bit_number=',bit_number +! write(*,*) 'field_type=',field_type +! write(*,*) 'bit map indicator=',bit_map + else if (gfld%igdtnum.eq.40) then ! Gaussian Grid (GFS) + nx = gfld%igdtmpl(8) + ny = gfld%igdtmpl(9) + lat1 = gfld%igdtmpl(12)/scale_factor + lon1 = gfld%igdtmpl(13)/scale_factor + dx = gfld%igdtmpl(17)/scale_factor + nlat = gfld%igdtmpl(18) + write(*,*) gfld%igdtnum, nx, ny, lat1, lon1, dx, nlat + else + write(*,*) 'unknown projection' + stop 1235 + endif + call gf_free(gfld) + ! Continue to unpack GRIB2 field. + NUM_FIELDS: do n = 1, numfields + ! e.g. U and V would =2, otherwise its usually =1 + call gf_getfld(cgrib,lengrib,n,.true.,expand,gfld,ierr) + if (ierr.ne.0) then + write(*,*) ' ERROR extracting field gf_getfld = ',ierr + cycle + endif +! write(*,*) 'gfld%ndpts=',n,gfld%ndpts +! write(*,*) 'gfld%ngrdpts=',n,gfld%ngrdpts +! write(*,*) 'gfld%unpacked=',n,gfld%unpacked + fldmax=gfld%fld(1) + fldmin=gfld%fld(1) + sum=gfld%fld(1) + if(ntot .ne. gfld%ngrdpts) then + write(*,*) 'Error, wrong dimension ',ntot, gfld%ngrdpts + stop 1234 + endif + do j=1,gfld%ngrdpts + var(j)=gfld%fld(j) + enddo +! write(*,*) 'j,first,last:',j,var(954370),var(953920) +! write(*,*) 'height,max,min',height,maxval(var),minval(var) + call gf_free(gfld) + enddo NUM_FIELDS + enddo VERSION ! skgb + endif + CALL BACLOSE(ifile,ierr) + if (allocated(cgrib)) deallocate(cgrib) + nullify(gfld%local) + enddo loopfile + return + end subroutine read_grib2_sngle +! +!---------------------------------------------------------------------------------------- ! subroutine g2sec3tmpl40(nx,nY,lat1,lon1,lat2,lon2,lad,ds1,len3,igds,ifield3) implicit none @@ -1423,13 +1809,15 @@ subroutine getgds(ldfgrd,len3,ifield3len,igds,ifield3) ifield3(15) = latlast ifield3(16) = lonlast ! ifield3(17) = NINT(360./(IM)*1.0E6) - ifield3(17) = abs(lonlast-lonstart)/(IM-1) +! ifield3(17) = abs(lonlast-lonstart)/(IM-1) + ifield3(17) = DXVAL ! if(mod(jm,2) == 0 ) then ! ifield3(18) = NINT(180./JM*1.0E6) ! else ! ifield3(18) = NINT(180./(JM-1)*1.0E6) - ifield3(18) = abs(latlast-latstart)/(JM-1) +! ifield3(18) = abs(latlast-latstart)/(JM-1) ! endif + ifield3(18) = DYVAL if( latstart < latlast ) then ifield3(19) = 64 !for SN scan else diff --git a/sorc/ncep_post.fd/kinds_mod.F b/sorc/ncep_post.fd/kinds_mod.F index f89c57a95..46fd95908 100644 --- a/sorc/ncep_post.fd/kinds_mod.F +++ b/sorc/ncep_post.fd/kinds_mod.F @@ -1,39 +1,30 @@ !> @file -! . . . . -!> module: kinds -!! prgmmr: treadon org: np23 date: 2004-08-15 -!! -!! abstract: Module to hold specification kinds for variable declaration. -!! This module is based on (copied from) Paul vanDelst's -!! type_kinds module found in the community radiative transfer -!! model -!! -!! module history log: -!! 2004-08-15 treadon -!! -!! Subroutines Included: -!! -!! Functions Included: -!! -!! remarks: -!! The numerical data types defined in this module are: -!! i_byte - specification kind for byte (1-byte) integer variable -!! i_short - specification kind for short (2-byte) integer variable -!! i_long - specification kind for long (4-byte) integer variable -!! i_llong - specification kind for double long (8-byte) integer variable -!! r_single - specification kind for single precision (4-byte) real variable -!! r_double - specification kind for double precision (8-byte) real variable -!! r_quad - specification kind for quad precision (16-byte) real variable -!! -!! i_kind - generic specification kind for default integer -!! r_kind - generic specification kind for default floating point -!! -!! -!! attributes: -!! language: f90 -!! machine: ibm RS/6000 SP -!! -!! +!> +!> @brief This module is to hold specification kinds for variable declaration. +!> This module is based on (copied from) Paul vanDelst's +!> type_kinds module found in the community radiative transfer model. +!> +!> @note The numerical data types defined in this module are: +!> Variables name | Numerical data types +!> ---------------|------------ +!> i_byte | specification kind for byte (1-byte) integer variable +!> i_short | specification kind for short (2-byte) integer variable +!> i_long | specification kind for long (4-byte) integer variable +!> i_llong | specification kind for double long (8-byte) integer variable +!> r_single | specification kind for single precision (4-byte) real variable +!> r_double | specification kind for double precision (8-byte) real variable +!> r_quad | specification kind for quad precision (16-byte) real variable +!> i_kind | generic specification kind for default integer +!> r_kind | generic specification kind for default floating point +!> +!> +!> ### Program History Log +!> Date | Programmer | Comments +!> -----|------------|--------- +!> 2004-08-15 | Russ Treadon | Initial +!> +!> @author Russ Treadon np23 @date 2004-08-15 + module kinds implicit none diff --git a/sorc/ncep_post.fd/makefile b/sorc/ncep_post.fd/makefile deleted file mode 100644 index 7a0a614d8..000000000 --- a/sorc/ncep_post.fd/makefile +++ /dev/null @@ -1,258 +0,0 @@ -#!/bin/ksh -set -x -mac=$(hostname | cut -c1-1) -mac2=$(hostname | cut -c1-2) -################################# options ############################################### -#export CLEAN=NO # comment this line to clean before compiling -#debug=YES # turn on debug mode - default - NO - make_post_lib=YES # create post library - default - NO - make_post_exec=YES # create post executable - default - YES -#make_nowrf=YES # compile with wrf stub instead of WRF lib -################################# options ############################################### -# -if [ $mac2 = ga ] ; then # For GAEA - machine=gaea - center=${center:-ncep} - make_nowrf=${make_nowrf:-YES} # to compile with wrf stub instead of WRF lib -elif [ $mac2 = tf ] ; then # For Theia - machine=theia - make_nowrf=${make_nowrf:-YES} # to compile with wrf stub instead of WRF lib -elif [ $mac = z -o $mac = h -o $mac = f ] ; then # For ZEUS - machine=zeus - make_nowrf=${make_nowrf:-YES} # to compile with wrf stub instead of WRF lib -elif [ $mac = t -o $mac = e -o $mac = g ] ; then # For WCOSS - machine=wcoss -elif [ $mac = l -o $mac = s ] ; then # wcoss_c (i.e. luna and surge) - export machine=wcoss_c - make_nowrf=${make_nowrf:-YES} # to compile with wrf stub instead of WRF lib -fi -debug=${debug:-NO} -export make_post_lib=${make_post_lib:-NO} -export make_post_exec=${make_post_exec:-YES} -export make_nowrf=${make_nowrf:- NO} -if [ $machine = wcoss ] ; then - export NETCDFPATH="/usrx/local/NetCDF/3.6.3" - export WRFPATH="/nwprod/sorc/wrf_shared.v1.1.0" - export NWPROD="/nwprod" - export XMLPATH=$NWPROD - export IPPATH=$NWPROD - export SPPATH=/usrx/local/nceplibs - export BACIOPATH=/usrx/local/nceplibs - export ipv="" - export spv=_v2.0.2p - export crtmv=2.0.6 - export crtmv_inc=$crtmv - export xmlv=_v2.0.0 - export baciov=_v2.0.1p - export FC=mpiifort - export CPP="/lib/cpp -P" - export CPPFLAGS="-DLINUX" - export CC=cc - if [ $debug = YES ] ; then - export OPTS="-O0 -openmp " - export DEBUG="-g -traceback -convert big_endian -ftrapuv -check bounds -check format -check output_conversion -check pointers -check uninit -fp-stack-check" - else - export OPTS="-O3 -convert big_endian -fp-model source -openmp -xAVX" - export DEBUG="" - fi - export LIST="" - export FREE="-FR" - export TRAPS="" - export PROFILE="" -elif [ $machine = wcoss_c ] ; then - export FC=ftn - export CPP="/lib/cpp -P" - export CPPFLAGS="-DLINUX" - export CC=cc - if [ $debug = YES ] ; then - export OPTS="-O0 -openmp " - export DEBUG="-g -traceback -convert big_endian -ftrapuv -check bounds -check format -check output_conversion -check pointers -check uninit -fp-stack-check" - else - export OPTS="-O3 -convert big_endian -fp-model source -openmp -xAVX" - export DEBUG="" - fi - export LIST="" - export FREE="-FR" - export TRAPS="" - export PROFILE="" -elif [ $machine = zeus ] ; then - export NETCDFPATH="/apps/netcdf/3.6.3/intel" - export WRFPATH="/scratch2/portfolios/NCEPDEV/meso/save/Dusan.Jovic/WRFV3" - export NWPROD="/contrib/nceplibs/nwprod" - export XMLPATH="/home/Hui-Ya.Chuang" - export IPPATH=$NWPROD - export SPPATH=$NWPROD - export ipv="" - export spv=_v2.0.1 - export crtmv=2.0.7 - export FC="ifort -lmpi" - export CPP="/lib/cpp -P" - export CC=cc - export ARCH="" - export CPPFLAGS="-DLINUX" - if [ $debug = YES ] ; then - export OPTS="-O0 -openmp -g" - export DEBUG="-g -check all -ftrapuv -convert big_endian -fp-stack-check -fstack-protector -heap-arrays -recursive -traceback" - else - export export OPTS="-O3 -convert big_endian -traceback -g -fp-model source -openmp" - export DEBUG="" - fi - export LIST="" - export FREE="-FR" - export TRAPS="" - export PROFILE="" -elif [ $machine = theia ] ; then - export NETCDFPATH="/apps/netcdf/4.3.0-intel" - export WRFPATH="/scratch4/NCEPDEV/global/save/Shrinivas.Moorthi/theia/nceplibs/nwprod/lib/sorc/WRFV3" - export NWPROD="/scratch4/NCEPDEV/global/save/Shrinivas.Moorthi/theia/nceplibs/nwprod" - export ipv=_v2.0.3 - export spv="" - export crtmv=2.0.7 - export gfsiov="" - export w3ev=_v2.1.0 - export w3nv="" - export xmlv=_v2.0.0 - export g2tv="" - export baciov=_v2.1.0 - export XMLPATH=$NWPROD - export IPPATH=$NWPROD - export SPPATH=$NWPROD - export BACIOPATH=$NWPROD/lib - export FC=mpiifort - export CPP="/lib/cpp -P" - export CC=cc - export ARCH="" - export CPPFLAGS="-DLINUX" - if [ $debug = YES ] ; then - export OPTS="-O0 -openmp -g" - export DEBUG="-g -check all -ftrapuv -convert big_endian -fp-stack-check -fstack-protector -heap-arrays -recursive -traceback" - else - export export OPTS="-O3 -convert big_endian -traceback -g -fp-model source -openmp" - export DEBUG="" - fi - export LIST="" - export FREE="-FR" - export TRAPS="" - export PROFILE="" -elif [ $machine = gaea ] ; then - export NETCDFPATH="/opt/cray/netcdf/4.3.2/INTEL/140" - export WRFPATH="/lustre/f1/unswept/ncep/Shrinivas.Moorthi/nceplibs/nwprod/lib/sorc/WRFV3" - export NWPROD="/lustre/f1/unswept/ncep/Shrinivas.Moorthi/nceplibs/nwprod" - export IPPATH=$NWPROD - export SPPATH=$NWPROD - export baciov=_v2.1.0 - export BACIOPATH=/lustre/f1/unswept/ncep/Shrinivas.Moorthi/nceplibs/nwprod/lib/sorc/bacio_fast_byteswap/bacio${baciov}_4 - export ipv="" - export spv=_v2.0.1 - export xmlv=_v2.0.0 - export FC=ftn - export CPP="/lib/cpp -P" - export ARCH="" - export CPPFLAGS="-DLINUX" - export CC=icc - if [ $debug = YES ] ; then - export OPTS="-O0 -g" - export DEBUG="-g -check all -ftrapuv -convert big_endian -fp-stack-check -fstack-protector -heap-arrays -recursive -traceback" - else - export export OPTS="-O3 -convert big_endian -traceback -g -fp-model source" - export DEBUG="" - fi - export LIST="" - export FREE=-FR - export TRAPS="" - export PROFILE="" - - export gfsiov="" - export crtmv=2.0.7 - export w3ev=_v2.1.0 - export w3nv="" -fi -export crtmv=${crtmv:-2.0.7} -export crtmv_inc=${crtmv_inc:-v$crtmv} -export XMLPATH=${XMLPATH:-$NWPROD} -export BACIOPATH=${BACIOPATH:-$NWPROD/lib} -export xmlv=${xmlv:-""} -export w3ev=${w3ev:-_v2.0.3} -export ipv=${ipv:-""} -export spv=${spv:-""} - -if [ ${CLEAN:-YES} = YES ] ; then make -f Makefile clean ; fi - -export CFLAGS="-DLINUX -Dfunder -DFortranByte=char -DFortranInt=int -DFortranLlong='long long'" -if [ $machine = wcoss_c ] ; then - - if [ $make_nowrf = YES ] ; then - WRF_INC= - WRF_LIB= - fi - NETCDF_LIB="${NETCDF}/lib/libnetcdf.a" - export FFLAGS="${OPTS} ${FREE} ${TRAPS} ${DEBUG} -I${XMLPARSE_INC} -I${G2_INC4} -I${G2TMPL_INC} -I${NEMSIO_INC} -I${SIGIO_INC4} -I${SFCIO_INC4} -I${GFSIO_INC4} -I${W3EMC_INC4} -I${CRTM_INC} -I${NETCDF_INCLUDE} -I${PNG_INC}" - - export LIBS="${WRF_LIB} ${XMLPARSE_LIB} ${G2_LIB4} ${G2TMPL_LIB} ${NEMSIO_LIB} ${GFSIO_LIB4} ${SIGIO_LIB4} ${SFCIO_LIB4} ${IP_LIB4} ${SP_LIB4} ${W3NCO_LIB4} ${W3EMC_LIB4} ${BACIO_LIB4} ${CRTM_LIB} ${NETCDF_LIB} ${PNG_LIB} ${JASPER_LIB} ${Z_LIB}" -else - SFCIO_INC="-I${NWPROD}/lib/incmod/sfcio_4" - SFCIO_LIB="${NWPROD}/lib/libsfcio_4.a" - - NEMSIO_INC="-I${NWPROD}/lib/incmod/nemsio" - NEMSIO_LIB="-L${NWPROD}/lib -lnemsio" - BACIO_LIB="-L${BACIOPATH} -lbacio${baciov}_4" - SIGIO_INC="-I${NWPROD}/lib/incmod/sigio_4" - SIGIO_LIB="${NWPROD}/lib/libsigio_4.a" - NCDLIBS="-L${NETCDFPATH} -lnetcdf" - NCDFFLAGS="-I${NETCDFPATH}" - if [ $make_nowrf = YES ] ; then - WRF_INC= - WRF_LIB= - else - WRF_INC="-I${WRFPATH}/external/io_quilt -I${WRFPATH}/frame" - WRF_LIB="${WRFPATH}/main/libwrflib.a ${WRFPATH}/frame/pack_utils.o ${WRFPATH}/frame/module_internal_header_util.o ${WRFPATH}/external/io_grib1/libio_grib1.a ${WRFPATH}/external/io_grib_share/libio_grib_share.a ${WRFPATH}/external/io_int/libwrfio_int.a ${WRFPATH}/external/io_netcdf/libwrfio_nf.a ${WRFPATH}/external/esmf_time_f90/libesmf_time.a ${WRFPATH}/external/RSL_LITE/librsl_lite.a" - fi - - G2_INC="-I${NWPROD}/lib/incmod/g2_4 -I${NWPROD}/lib/incmod/g2tmpl${g2tv}" - G2_LIB="-L${NWPROD}/lib -lg2tmpl${g2tv} -lg2_4 -ljasper -lpng -lz" - - GFSIO_INC="-I${NWPROD}/lib/incmod/gfsio${gfsiov}_4" - GFSIO_LIB="-L${NWPROD}/lib -lgfsio${gfsiov}_4" - - IP_LIB="-L${IPPATH}/lib -lip${ipv}_4" - SP_LIB="-L${SPPATH} -lsp${sp}_4" - - W3_INC="-I${NWPROD}/lib/incmod/w3emc${w3ev}_4" - W3_LIB="-L${NWPROD}/lib -lw3nco${w3nv}_4 -lw3emc${w3ev}_4" - - CRTM_INC="-I${NWPROD}/lib/incmod/crtm_${crtmv_inc}" - CRTM_LIB="-L${NWPROD}/lib -lcrtm_v${crtmv}" - XML_INC="-I${XMLPATH}/lib/incmod/xmlparse${xmlv}" - XML_LIB="-L${XMLPATH}/lib -lxmlparse${xmlv}" - - NETCDF_LIB="${NETCDFPATH}/lib/libnetcdf.a" - NETCDF_INC="-I${NETCDFPATH}/include" - - export FFLAGS="${OPTS} ${FREE} ${TRAPS} ${DEBUG} ${WRF_INC} ${XML_INC} ${G2_INC} ${NEMSIO_INC} ${GFSIO_INC} ${SIGIO_INC} ${SFCIO_INC} ${W3_INC} ${CRTM_INC} ${NETCDF_INC}" - - export LIBS="${WRF_LIB} ${XML_LIB} ${G2_LIB} ${NEMSIO_LIB} ${GFSIO_LIB} ${SIGIO_LIB} ${SFCIO_LIB} ${IP_LIB} ${SP_LIB} ${W3_LIB} ${BACIO_LIB} ${CRTM_LIB} ${NETCDF_LIB}" - -fi -if [ $make_post_lib = NO ] ; then - if [ $make_post_exec = YES ] ; then - if [ $make_nowrf = YES ] ; then - _make -f Makefile_nowrf - else - make -f Makefile - fi - fi -else - if [ $make_post_exec = YES ] ; then - if [ $make_nowrf = YES ] ; then - make -f Makefile_nowrf - else - make -f Makefile - fi - fi - export POSTLIBPATH=${POSTLIBPATH:-$(pwd)} - if [ ${CLEAN:-YES} = YES ] ; then rm -rf $POSTLIBPATH/include/post_4 ; fi - mkdir -p $POSTLIBPATH/include/post_4 - make -f Makefile_lib -fi - - diff --git a/sorc/ncep_post.fd/makefile_dtc b/sorc/ncep_post.fd/makefile_dtc deleted file mode 100644 index 519c2418b..000000000 --- a/sorc/ncep_post.fd/makefile_dtc +++ /dev/null @@ -1,130 +0,0 @@ -SHELL = /bin/sh - -################################################################################ -# -# Makefile for NCEP Post -# -# Use: -# make - build the executable -# make clean - start with a clean slate -# -################################################################################# -# -# Define the name of the executable -# -TARGET = unipost.exe - -# -# build configuration determined before compile -include ../../configure.upp - -# -# directories for shared resources -LOCALINC = -I$(INCMOD) -I$(INCMOD)/crtm2 -NCDFINC = -I$(NETCDFPATH)/include -GRIB2INC = -I$(GRIB2SUPT_INC) - -LLIBDIR = -L$(LIBDIR) -UPPLIBS = -lCRTM $(SERIAL_MPI_LIB) -lxmlparse -NCEPLIBS = $(NCEPLIBLIB) $(NCEPLIB_FLAGS) $(GRIB2SUPT_LIB) -NCDFLIBS = -L$(NETCDFPATH)/lib $(NETCDFLIBS) - -LIBS = $(LLIBDIR) $(UPPLIBS) $(GRIB2LIBS) $(NCEPLIBS) $(NCDFLIBS) - -MODULES = - -# -# Compilation / Link Flag Configuration -EXTRA_CPPFLAGS = -EXTRA_FFLAGS = -c $(LOCALINC) $(NETCDFINC) $(NCDFINC) $(NCEPLIBINC) -#EXTRA_LDFLAGS = $(LIBS) -Wl,-Map=lm -EXTRA_LDFLAGS = $(LIBS) -EXTRA_CFLAGS = -Dfunder -DFortranByte=char -DFortranInt=int -DFortranLlong='long long' - -# -# ----------- -# Threaded object files -# ----------- -OBJS_FT = wrf_io_flags.o getVariable.o \ - getIVariableN.o kinds_mod.o machine.o physcons.o \ - native_endianness.o \ - retrieve_index.o ZENSUN.o \ - CLDFRAC_ZHAO.o GFSPOST.o GFSPOSTSIG.o GETGBANDSCATTER.o \ - blockIO.o - -# ----------- -# Non-threaded object files -# ----------- -#OBJXML = post_t.o - -OBJS_F = VRBLS2D_mod.o VRBLS3D_mod.o VRBLS4D_mod.o MASKS_mod.o PMICRPH.o SOIL_mod.o CMASSI.o \ - CTLBLK.o GRIDSPEC.o \ - LOOKUP.o PARAMR.o RHGRD.o RQSTFLD.o xml_perl_data.o cuparm.o params.o svptbl.o get_postfilename.o grib2_module.o \ - SET_LVLSXML.o FILL_PSETFLD.o BNDLYR.o BOUND.o CALCAPE.o \ - CALDWP.o CALDRG.o CALHEL.o CALLCL.o CALMCVG.o CALPOT.o CALPW.o CALRH.o CALRCH.o \ - CALRH_GSD.o CALSTRM.o CALTAU.o CALTHTE.o CALVIS.o CALVIS_GSD.o CALVOR.o CALWXT.o $(LINUX_OBJ)\ - CALWXT_RAMER.o CALWXT_BOURG.o CALWXT_REVISED.o CALRH_PW.o CALWXT_EXPLICIT.o \ - CALWXT_DOMINANT.o CLDRAD.o \ - CLMAX.o COLLECT.o COLLECT_LOC.o DEWPOINT.o FDLVL.o FGAMMA.o FIXED.o FRZLVL.o FRZLVL2.o \ - GET_BITS.o INITPOST.o LFMFLD.o MAPSSLP.o MISCLN.o MDL2STD_P.o MIXLEN.o MDL2P.o ETAMP_Q2F.o \ - MDLFLD.o MPI_FIRST.o MPI_LAST.o NGMFLD.o NGMSLP.o OTLFT.o OTLIFT.o SLP_new.o SLP_NMM.o \ - EXCH.o PARA_RANGE.o PROCESS.o INITPOST_NMM.o EXCH2.o READCNTRL.o READ_xml.o \ - SET_OUTFLDS.o SCLFLD.o SERVER.o \ - SETUP_SERVERS.o SMOOTH.o SURFCE.o SPLINE.o TABLE.o TABLEQ.o TRPAUS.o TTBLEX.o WETBULB.o \ - WRFPOST.o CALMICT.o MICROINIT.o GPVS.o MDL2SIGMA.o ETCALC.o CANRES.o \ - CALGUST.o WETFRZLVL.o SNFRAC.o MDL2AGL.o SNFRAC_GFS.o AVIATION.o DEALLOCATE.o \ - CALPBL.o MDL2SIGMA2.o INITPOST_GFS.o CALRH_GFS.o LFMFLD_GFS.o \ - CALRAD_WCLOUD_newcrtm.o MDL2THANDPV.o CALPBLREGIME.o POLEAVG.o INITPOST_NEMS.o \ - GETNEMSNDSCATTER.o ICAOHEIGHT.o INITPOST_GFS_NEMS.o \ - GEO_ZENITH_ANGLE.o GFIP3.o GRIDAVG.o CALUPDHEL.o MSFPS.o INITPOST_GFS_SIGIO.o\ - AllGETHERV_GSD.o SELECT_CHANNELS.o ALLOCATE_ALL.o INITPOST_NEMS_MPIIO.o ASSIGNNEMSIOVAR.o INITPOST_GFS_NEMS_MPIIO.o \ - INITPOST_NETCDF.o INITPOST_GFS_NETCDF.o \ - gtg_ctlblk.o gtg_indices.o gtg_filter.o gtg_compute.o gtg_config.o map_routines.o gtg_algo.o CALVESSEL.o \ - CALHEL2.o CALCAPE2.o - -OBJS = $(OBJS_F) $(OBJXML) $(OBJS_FT) - -# ----------- -# Targets -# ----------- -all: $(TARGET) - -$(TARGET): $(XML_DEPS) $(OBJS) $(MODULES) - $(F90) -o $@ $(FFLAGS) $(MODULES) $(OBJS) $(LDFLAGS) $(EXTRA_LDFLAGS) - $(CP) $@ $(BINDIR) - -# This insures a dependency found in some files -- watch file order above remains -- should -# be done w/ dependencies -$(OBJS_F): $(OBJS_FT) $(OBJXML) - -# -# These files are configurable, but rarely change -clean: - @echo -e "\n<><><><> CLEAN <><><><>\n$@ in `pwd`" - $(RM) $(TARGET) $(OBJS) *.lst *.mod - $(RM) $(BINDIR)/$(TARGET) - for f in `ls -1 *.F|sed "s/.F$$/.f/"` ; do \ - $(RM) $$f ; \ - done - -distclean: clean - -.IGNORE: -.PHONY: clean - -.SUFFIXES: -.SUFFIXES: .F .f .f90 .o .c - -.F.o: - $(CPP) $(CPP_FLAGS) $(EXTRA_CPPFLAGS) $< > $*.f - $(F90) -c $(FFLAGS) $(EXTRA_FFLAGS) $*.f - -.f.o: - $(F90) -c $(FFLAGS) $(EXTRA_FFLAGS) $< - -.f90.o: - $(F90) -c $(FFLAGS) $(EXTRA_FFLAGS) $< - -.c.o: - ${CC} -c ${CFLAGS} $(EXTRA_CFLAGS) $< - diff --git a/sorc/ncep_post.fd/makefile_lib b/sorc/ncep_post.fd/makefile_lib deleted file mode 100644 index 37d48af6e..000000000 --- a/sorc/ncep_post.fd/makefile_lib +++ /dev/null @@ -1,146 +0,0 @@ -################################################################################ -# -# Makefile for upp (NCEP Post) -# -# Use: -# make - build the executable -# make clean - start with a clean slate -# -# The following macros will be of interest: -# -# TARGET - name of the executable -# FC - name of Fortran compiler -# CPP - name of CPP -# ARCH - architecture -# CPPFLAGS - CPP flags -# OPTS - compiler code optimizations -# LIST - source listing -# SMP - threading -# TRAPS - runtime traps for floating point exceptions -# PROFILE - source code profiling ( -pg ) -# DEBUG - -g -# MEM - user data area and stack size -# MAP - load map -# W3LIB - w3lib -# BACIO - bacio lib -# ESSL - ESSL library -# MASS - MASS library -# HPMLIB - hpm lib -# SEARCH - library search location -# -# This version for eta_post with more intelligent memory allocation -# Jim Tuccillo Feb 2001 -# -# This version for eta_post with asynchronous I/O server. -# Jim Tuccillo June 2001 - -# This version for NEMS_POST -# Jun Wang June 2010 -# -# This version for GFS V16 in-line post -# Wen Meng Ocotomber 2020 -# -################################################################################# -# -# Define the name of the executable -# - #POSTLIBPATH=../.. - #TARGET = ${POSTLIBPATH}/lib/libncep_post_${version}_4.a - #INCMOD= ${POSTLIBPATH}/lib/include/ncep_post_${version}_4 - TARGET = libupp_4.a - INCMOD = include/upp_4 - AR = ar - ARFLAGS = -rv - -# -# CPP, Compiler, and Linker Options -# - -#FC = mpfort -compiler ifort -#CPP = /lib/cpp -P -FC = $(myFC) $(myFCFLAGS) -CPP = $(myCPP) $(myCPPFLAGS) -ARCH = auto -CPPFLAGS = -DLINUX -OPTS = -O -fp-model strict -LIST = -FREE = -FR -#TRAPS = -qflttrap=ov:und:zero:inv:inex -qcheck -qinitauto=FF -TRAPS = -PROFILE = -DEBUG = -g -CFLAGS = -DLINUX -Dfunder -DFortranByte=char -DFortranInt=int -DFortranLlong='long long' -W3LIBDIR = /nwprod/lib - -SEARCH = -# -# Assemble Options -# -#FFLAGS = $(OPTS) $(FREE) $(TRAPS) $(DEBUG) -I$(CRTM_INC) -I$(W3EMC_INC4) -I$(G2_INC4) -I$(G2TMPL_INC) -I$(XMLPARSE_INC) -I$(SIGIO_INC4) -I$(GFSIO_INC4) -FFLAGS = $(OPTS) $(FREE) $(TRAPS) $(DEBUG) -I$(CRTM_INC) -I$(W3EMC_INC4) -I$(G2_INC4) -I$(G2TMPL_INC) -I$(SIGIO_INC4) -I$(GFSIO_INC4) -FFLAGST = $(OPTS) $(FREE) $(TRAPS) $(DEBUG) -I$(CRTM_INC) -I$(W3EMC_INC4) -I$(SIGIO_INC4) -I$(GFSIO_INC4) - -# -# Threaded object files -# -OBJST= kinds_mod.o machine.o physcons.o ZENSUN.o CLDFRAC_ZHAO.o GFSPOST.o -# -# Non-threaded object files -# -#OBJXML= post_t.o -# -OBJS= VRBLS2D_mod.o VRBLS3D_mod.o VRBLS4D_mod.o MASKS_mod.o PMICRPH.o SOIL_mod.o \ - CMASSI.o CTLBLK.o GRIDSPEC.o LOOKUP.o PARAMR.o RHGRD.o RQSTFLD.o xml_perl_data.o \ - cuparm.o params.o svptbl.o get_postfilename.o grib2_module.o \ - SET_LVLSXML.o FILL_PSETFLD.o \ - BNDLYR.o BOUND.o CALCAPE.o CALDWP.o CALDRG.o CALHEL.o CALLCL.o \ - CALMCVG.o CALPOT.o CALPW.o CALRH.o CALRCH.o CALRH_GSD.o \ - CALSTRM.o CALTAU.o CALTHTE.o CALVIS.o CALVIS_GSD.o CALVOR.o CALWXT.o \ - CALWXT_RAMER.o CALWXT_BOURG.o CALWXT_REVISED.o CALRH_PW.o \ - CALWXT_EXPLICIT.o CALWXT_DOMINANT.o \ - CLDRAD.o CLMAX.o COLLECT.o COLLECT_LOC.o DEWPOINT.o \ - FDLVL.o FGAMMA.o FIXED.o FRZLVL.o FRZLVL2.o \ - GET_BITS.o LFMFLD.o \ - MAPSSLP.o MISCLN.o MDL2STD_P.o MIXLEN.o MDL2P.o MDLFLD.o \ - NGMFLD.o NGMSLP.o OTLFT.o OTLIFT.o SLP_new.o SLP_NMM.o EXCH.o \ - PARA_RANGE.o PROCESS.o EXCH2.o \ - READCNTRL.o READ_xml.o SET_OUTFLDS.o SCLFLD.o \ - SMOOTH.o SURFCE.o \ - SPLINE.o TABLE.o TABLEQ.o TRPAUS.o TTBLEX.o WETBULB.o \ - CALMICT.o MICROINIT.o GPVS.o MDL2SIGMA.o \ - ETCALC.o CANRES.o CALGUST.o WETFRZLVL.o SNFRAC.o MDL2AGL.o SNFRAC_GFS.o \ - AVIATION.o DEALLOCATE.o \ - CALPBL.o MDL2SIGMA2.o CALRH_GFS.o LFMFLD_GFS.o \ - CALRAD_WCLOUD_newcrtm.o MDL2THANDPV.o CALPBLREGIME.o POLEAVG.o \ - ICAOHEIGHT.o \ - GEO_ZENITH_ANGLE.o GFIP3.o GRIDAVG.o CALUPDHEL.o \ - AllGETHERV_GSD.o MSFPS.o SELECT_CHANNELS.o ALLOCATE_ALL.o \ - gtg_ctlblk.o gtg_indices.o gtg_filter.o gtg_compute.o gtg_config.o map_routines.o gtg_algo.o gtg_smoothseams.o CALVESSEL.o \ - CALHEL2.o CALCAPE2.o - - -.SUFFIXES: .F .f .o .f90 .c - -.F.f: - $(CPP) $(CPPFLAGS) $< > $*.f - -$(TARGET): $(OBJST) $(OBJXML) $(OBJS) - $(AR) $(ARFLAGS) $@ $(OBJST) $(OBJXML) $(OBJS) $(LIBS) - mv *.mod $(INCMOD) - -.f.o: - $(FC) $(FFLAGS) -c $< - -.f90.o: - $(FC) $(FFLAGS) -c $< - -.c.o : - ${CC} ${CFLAGS} -c $< - -clean: - /bin/rm -rf libupp_*.a *.lst *.o include -# -#postcntrl_t.o : postcntrl_t.f90 -# $(FC) $(FFLAGS) postcntrl_t.f90 - - diff --git a/sorc/ncep_post.fd/makefile_module b/sorc/ncep_post.fd/makefile_module deleted file mode 100644 index 5b6f2c763..000000000 --- a/sorc/ncep_post.fd/makefile_module +++ /dev/null @@ -1,126 +0,0 @@ -################################################################################################### -# post implement module load standard -# -# 10/15 Lin Gan: Create module load version -# 12/07 Lin Gan: Update to generate post module output -# 07/16 J. Carley: Generalize for multiple machines -# -################################################################################################### - -SHELL=/bin/bash -# -# Define the name of the executable -# -# To generate exe as ncep_post -TARGET = ncep_post -LIB_TARGET = libnceppost.a -AR = ar -ARFLAGS = ruv - -# -# CPP, Compiler, and Linker Options -# - -FC = $(myFC) $(myFCFLAGS) -CPP = $(myCPP) $(myCPPFLAGS) -CPPFLAGS = -DLINUX -FREE = -FR - -NETCDF_INC = -I$(NETCDF)/include -#NETCDF_LDFLAGS = -L$(NETCDF)/lib -lnetcdff -lnetcdf -NETCDF_LDFLAGS = -L$(NETCDF)/lib -lnetcdff -lnetcdf -L$(HDF5_LDFLAGS) $(Z_LIB) - -CFLAGS = -DLINUX -Dfunder -DFortranByte=char -DFortranInt=int -DFortranLlong='long long' - -FFLAGS = $(OPTS) $(FREE) $(DEBUG) \ - -I$(SFCIO_INC4) \ - -I$(NEMSIO_INC) \ - -I$(SIGIO_INC4) \ - -I$(G2_INC4) \ - -I$(G2TMPL_INC) \ - -I$(GFSIO_INC4) \ - -I$(W3EMC_INC4) \ - -I$(CRTM_INC) \ - -I$(IP_INC4) \ - $(NETCDF_INC) - -LIBS = $(WRFIO_LIB) \ - $(G2TMPL_LIB) \ - $(G2_LIB4) \ - $(JASPER_LIB) \ - $(PNG_LIB) \ - $(Z_LIB) \ - $(NEMSIO_LIB) \ - $(GFSIO_LIB4) \ - $(SIGIO_LIB4) \ - $(SFCIO_LIB4) \ - $(IP_LIB4) \ - $(SP_LIB4) \ - $(W3EMC_LIB4) \ - $(W3NCO_LIB4) \ - $(BACIO_LIB4) \ - $(CRTM_LIB) \ - $(NETCDF_LDFLAGS) - - -OBJS = wrf_io_flags.o getVariable.o getIVariableN.o \ - kinds_mod.o machine.o physcons.o \ - native_endianness.o blockIO.o \ - retrieve_index.o ZENSUN.o CLDFRAC_ZHAO.o \ - GFSPOST.o GFSPOSTSIG.o GETGBANDSCATTER.o \ - VRBLS2D_mod.o VRBLS3D_mod.o VRBLS4D_mod.o MASKS_mod.o PMICRPH.o SOIL_mod.o \ - CMASSI.o CTLBLK.o GRIDSPEC.o LOOKUP.o PARAMR.o RHGRD.o RQSTFLD.o xml_perl_data.o \ - cuparm.o params.o svptbl.o get_postfilename.o grib2_module.o \ - SET_LVLSXML.o FILL_PSETFLD.o \ - UPP_MATH.o UPP_PHYSICS.o \ - BNDLYR.o BOUND.o CALDWP.o CALDRG.o CALHEL.o CALLCL.o \ - CALMCVG.o CALPOT.o CALPW.o CALRCH.o \ - CALSTRM.o CALTAU.o CALTHTE.o CALVIS.o CALVIS_GSD.o CALVOR.o CALWXT.o \ - CALWXT_RAMER.o CALWXT_BOURG.o CALWXT_REVISED.o \ - CALWXT_EXPLICIT.o CALWXT_DOMINANT.o \ - CLDRAD.o CLMAX.o COLLECT.o COLLECT_LOC.o DEWPOINT.o \ - FDLVL.o FGAMMA.o FIXED.o FRZLVL.o FRZLVL2.o \ - GET_BITS.o INITPOST.o LFMFLD.o \ - MAPSSLP.o MISCLN.o MDL2STD_P.o MIXLEN.o MDL2P.o MDLFLD.o MPI_FIRST.o MPI_LAST.o \ - NGMFLD.o NGMSLP.o OTLFT.o OTLIFT.o SLP_new.o SLP_NMM.o EXCH.o \ - PARA_RANGE.o PROCESS.o INITPOST_NMM.o EXCH2.o \ - READCNTRL.o READ_xml.o SET_OUTFLDS.o SCLFLD.o SERVER.o SETUP_SERVERS.o \ - SMOOTH.o SURFCE.o \ - SPLINE.o TABLE.o TABLEQ.o TRPAUS.o TTBLEX.o WETBULB.o WRFPOST.o \ - CALMICT.o MICROINIT.o GPVS.o MDL2SIGMA.o \ - ETCALC.o CANRES.o CALGUST.o WETFRZLVL.o SNFRAC.o MDL2AGL.o SNFRAC_GFS.o \ - AVIATION.o DEALLOCATE.o \ - CALPBL.o MDL2SIGMA2.o INITPOST_GFS.o LFMFLD_GFS.o \ - CALRAD_WCLOUD_newcrtm.o MDL2THANDPV.o CALPBLREGIME.o POLEAVG.o \ - INITPOST_NEMS.o GETNEMSNDSCATTER.o ICAOHEIGHT.o INITPOST_GFS_NEMS.o \ - GEO_ZENITH_ANGLE.o GFIP3.o CALUPDHEL.o INITPOST_GFS_SIGIO.o \ - AllGETHERV_GSD.o MSFPS.o SELECT_CHANNELS.o ALLOCATE_ALL.o INITPOST_NEMS_MPIIO.o ASSIGNNEMSIOVAR.o \ - INITPOST_GFS_NEMS_MPIIO.o INITPOST_NETCDF.o INITPOST_GFS_NETCDF.o INITPOST_GFS_NETCDF_PARA.o \ - gtg_ctlblk.o gtg_indices.o gtg_filter.o gtg_compute.o gtg_config.o map_routines.o gtg_algo.o gtg_smoothseams.o CALVESSEL.o \ - CALHEL2.o ETAMP_Q2F.o - - -.SUFFIXES: .F .f .o .f90 .c - -.F.f: - $(CPP) $(CPPFLAGS) $< > $*.f - -$(TARGET): $(OBJST) $(OBJS) - $(FC) -o $@ $(OBJST) $(OBJS) $(LIBS) $(OPENMP) - mkdir -p include/post_4 - $(AR) $(ARFLAGS) $(LIB_TARGET) $(OBJST) $(OBJS) - mv *.mod include/post_4 - -.f.o: - $(FC) $(FFLAGS) -c $< - -.f90.o: - $(FC) $(FFLAGS) -c $< - -.c.o : - ${CC} ${CFLAGS} -c $< - - -clean: - /bin/rm -f *.o *.mod libnceppost.a ncep_post - /bin/rm -rf include diff --git a/sorc/ncep_post.fd/native_endianness.f b/sorc/ncep_post.fd/native_endianness.f index acfadaacd..c0003e4fe 100644 --- a/sorc/ncep_post.fd/native_endianness.f +++ b/sorc/ncep_post.fd/native_endianness.f @@ -1,35 +1,26 @@ !> @file -! . . . . -!> module: native_endianness -!! prgmmr: parrish org: wx22 date: 2012-10-11 -!! -!! abstract: This module was written by Dusan Jovic and has been adapted to GSI for internal translation -!! of WRF ARW and NMM binary restart files as required to match the machine native -!! endian storage format. The original code only converted from big-endian to little-endian. -!! There are no restrictions in this version. -!! This is required for these two types of files, because they are read/written to using mpi-io, -!! which has no compiler option for automatic switching to machine native endian format -!! for fortran unformatted read/write. -!! -!! program history log: -!! 2012-10-11 parrish - copy/modify original module native_endianness provided by Dusan Jovic, NCEP/EMC 2012 -!! 2012-10-19 parrish - additional modifications to improve efficiency. Remove interface and make -!! to_native_endianness to work only with integer(4) arguments. -!! Put to_native_endianness_i4 outside module. -!! -!! subroutines included: -!! -!! functions included: -!! is_little_endian - no argument--returns true for little-endian machine, false for big-endian machine -!! -!! variables included: -!! byte_swap - false if machine and wrf binary file are same endian, true if different -!! -!! attributes: -!! language: f90 -!! machine: -!! -!! +!> +!> @brief This module, native_endianness, was written by Dusan Jovic and has been adapted to GSI for internal translation +!> of WRF ARW and NMM binary restart files as required to match the machine native +!> endian storage format. The original code only converted from big-endian to little-endian. +!> There are no restrictions in this version. +!> This is required for these two types of files, because they are read/written to using mpi-io, +!> which has no compiler option for automatic switching to machine native endian format +!> for fortran unformatted read/write. +!> +!> @author Parrish wx22 @date 2012-10-11 + +!> @note functions included: is_little_endian - no argument--returns true for little-endian machine, false for big-endian machine +!> +!> @note variables included: byte_swap - false if machine and wrf binary file are same endian, true if different +!> +!> ### Program History Log +!> Date | Programmer | Comments +!> -----|------------|--------- +!> 2012-10-11 | Parrish | Initial. Copy/modify original module native_endianness provided by Dusan Jovic, NCEP/EMC 2012 +!> 2012-10-19 | parrish | Additional modifications to improve efficiency. Remove interface and make to_native_endianness to work only with integer(4) arguments. Put to_native_endianness_i4 outside module. +!> +!> @author Parrish wx22 @date 2012-10-11 module native_endianness @@ -46,26 +37,14 @@ module native_endianness contains logical function is_little_endian() -!$$$ subprogram documentation block -! . . . . -! subprogram: is_little_endian -! prgmmr: parrish org: wx22 date: 2012-10-11 -! -! abstract: test to see if machine is little-endian. Returns true for little-endian, false for big-endian. -! -! program history log: -! 2012-10-11 parrish - add doc block -! -! input argument list: -! -! output argument list: -! -! attributes: -! language: f90 -! machine: -! -!$$$ end documentation block - +!> is_little_endian() tests to see if machine is little-endian. Returns true for little-endian, false for big-endian. +!> +!> ### Program History Log +!> Date | Programmer | Comments +!> -----|------------|--------- +!> 2012-10-11 | Parrish | Add doc block +!> +!> @author Parrish wx22 @date 2012-10-11 implicit none integer(i_byte) :: i1 @@ -86,32 +65,19 @@ end module native_endianness !---------------------------------------------------------------------- subroutine to_native_endianness_i4(i4,num) -!$$$ subprogram documentation block -! . . . . -! subprogram: to_native_endianness_i4 -! prgmmr: parrish org: wx22 date: 2012-10-11 -! -! abstract: swap bytes of argument. -! -! program history log: -! 2012-10-11 parrish - add doc block -! 2012-10-19 parrish - additional modifications to improve efficiency. Remove interface and make -! to_native_endianness to work only with integer(4) arguments. -! Put to_native_endianness_i4 outside module. -! -! input argument list: -! i4 - input 4 byte integer array -! num - length of array i4 (NOTE: type of num must be i_llong (8 byte integer) ) -! -! output argument list: -! i4 - output 4 byte integer array with bytes in reverse order -! -! attributes: -! language: f90 -! machine: -! -!$$$ end documentation block - +!> to_native_endianness_i4() is to swap bytes of argument. +!> +!> @param[in] i4 Input 4 byte integer array. +!> @param[in] num Length of array i4. (NOTE: type of num must be i_llong (8 byte integer) ) +!> @param[out] i4 Output 4 byte integer array with bytes in reverse order. +!> +!> ### Program History Log +!> Date | Programmer | Comments +!> -----|------------|--------- +!> 2012-10-11 | Parrish | Add doc block +!> 2012-10-19 | Parrish | Additional modifications to improve efficiency. Remove interface and make to_native_endianness to work only with integer(4) arguments. Put to_native_endianness_i4 outside module. +!> +!> @author Parrish wx22 @date 2012-10-11 use kinds, only: i_byte,i_long,i_llong implicit none diff --git a/sorc/ncep_post.fd/post_gtg.fd b/sorc/ncep_post.fd/post_gtg.fd new file mode 160000 index 000000000..d0ad32416 --- /dev/null +++ b/sorc/ncep_post.fd/post_gtg.fd @@ -0,0 +1 @@ +Subproject commit d0ad3241659fd2b30ea24fc9daecebde5c51806f diff --git a/sorc/ncep_post.fd/retrieve_index.f b/sorc/ncep_post.fd/retrieve_index.f index ebacab31a..1fb390378 100644 --- a/sorc/ncep_post.fd/retrieve_index.f +++ b/sorc/ncep_post.fd/retrieve_index.f @@ -1,31 +1,22 @@ !> @file -! . . . . -!> subprogram: retrieve_index get record number of desired variable -!! prgmmr: parrish org: np22 date: 2004-11-29 -!! -!! abstract: by examining previously generated inventory of wrf binary restart file, -!! find record number that contains the header record for variable -!! identified by input character variable "string". -!! -!! program history log: -!! 2004-11-29 parrish -!! -!! input argument list: -!! string - mnemonic for variable desired -!! varname_all - list of all mnemonics obtained from inventory of file -!! nrecs - total number of sequential records counted in wrf -!! binary restart file -!! -!! output argument list: -!! index - desired record number -!! iret - return status, set to 0 if variable was found, -!! non-zero if not. -!! -!! attributes: -!! language: f90 -!! machine: ibm RS/6000 SP -!! -!! +!> @brief retrieve_index() gets record number of desired variable. +!> +!> By examining previously generated inventory of wrf binary restart file, +!> find record number that contains the header record for variable +!> identified by input character variable "string". +!> +!> @param[in] string Mnemonic for variable desired. +!> @param[in] varname_all List of all mnemonics obtained from inventory of file. +!> @param[in] nrecs Total number of sequential records counted in wrf binary restart file. +!> @param[out] index Desired record number. +!> @param[out] iret Return status, set to 0 if variable was found, non-zero if not. +!> +!> ### Program History Log +!> Date | Programmer | Comments +!> -----|------------|--------- +!> 2004-11-29 | Parrish | Initial +!> +!> @author Parrish np22 @date 2004-11-29 subroutine retrieve_index(index,string,varname_all,nrecs,iret) diff --git a/tests/compile_upp.sh b/tests/compile_upp.sh index 94360f243..30f1642ce 100755 --- a/tests/compile_upp.sh +++ b/tests/compile_upp.sh @@ -1,13 +1,68 @@ #!/bin/bash # Wen Meng 01/2020, Set up for cmake build. -############################################# +# Wen Meng 01/2022, Add option for building with gtg code +# Sam Trahan 01/2023, Add option for building with libIFI +############################################################ -set -x +set -eu -#Clean loaded modules -module purge +usage() { + echo + echo "Usage: $0 [-p] [-g] [-w] [-v] [-c] [-i] [-d] -h" + echo + echo " -p installation prefix DEFAULT: ../install" + echo " -g build with GTG(users with gtg repos. access only) DEFAULT: OFF" + echo " -I build with libIFI(users with ifi repos. access only) DEFAULT: OFF" + echo " -i build with libIFI(users with ifi install access only) DEFAULT: OFF" + echo " -w build without WRF-IO DEFAULT: ON" + echo " -v build with cmake verbose DEFAULT: NO" + echo " -c Compiler to use for build DEFAULT: intel" + echo " -d Debug mode of CMAKE_BUILD_TYPE DEFAULT: Release" + echo " -h display this message and quit" + echo + exit 1 +} + +prefix="../install" +ifi_opt=" -DBUILD_WITH_IFI=OFF" +gtg_opt=" -DBUILD_WITH_GTG=OFF" +wrfio_opt=" -DBUILD_WITH_WRFIO=ON" +compiler="intel" +verbose_opt="" +debug_opt="" +while getopts ":p:gwc:vhiI:d" opt; do + case $opt in + p) + prefix=$OPTARG + ;; + g) + gtg_opt=" -DBUILD_WITH_GTG=ON" + ;; + w) + wrfio_opt=" -DBUILD_WITH_WRFIO=OFF" + ;; + I) + ifi_opt=" -DINTERNAL_IFI=ON" + ;; + i) + ifi_opt=" -DREQUIRE_IFI=ON" + ;; + c) + compiler=$OPTARG + ;; + v) + verbose_opt="VERBOSE=1" + ;; + d) + debug_opt=" -DCMAKE_BUILD_TYPE=Debug" + ;; + h|\?|:) + usage + ;; + esac +done +cmake_opts=" -DCMAKE_INSTALL_PREFIX=$prefix"${wrfio_opt}${gtg_opt}${ifi_opt}${debug_opt} -hostname source ./detect_machine.sh if [[ $(uname -s) == Darwin ]]; then readonly MYDIR=$(cd "$(dirname "$(greadlink -f -n "${BASH_SOURCE[0]}" )" )" && pwd -P) @@ -17,15 +72,32 @@ fi PATHTR=${PATHTR:-$( cd ${MYDIR}/.. && pwd )} #Load required modulefiles -module use $PATHTR/modulefiles -modulefile=${MACHINE_ID} -module load $modulefile -module list +if [[ $MACHINE_ID != "unknown" ]]; then + if [ $MACHINE_ID == "wcoss2" -o $MACHINE_ID == "wcoss2_a" ]; then + module reset + else + module purge + fi + module use $PATHTR/modulefiles + if [[ $compiler == "intel" ]]; then + modulefile=${MACHINE_ID} + else + modulefile=${MACHINE_ID}_${compiler} + fi + if [ -f "${PATHTR}/modulefiles/${modulefile}" -o -f "${PATHTR}/modulefiles/${modulefile}.lua" ]; then + echo "Building for machine ${MACHINE_ID}, compiler ${compiler}" + else + echo "Modulefile does not exist for machine ${MACHINE_ID}, compiler ${compiler}" + exit 1 + fi + module load $modulefile + module list +fi rm -rf build install mkdir build && cd build -cmake -DCMAKE_INSTALL_PREFIX=../install -DBUILD_WITH_WRFIO=ON ../.. -make -j6 +cmake $cmake_opts ../.. +make -j6 $verbose_opt make install rm -rf $PATHTR/exec && mkdir $PATHTR/exec diff --git a/tests/detect_machine.sh b/tests/detect_machine.sh index 9362e5635..7620dc004 100755 --- a/tests/detect_machine.sh +++ b/tests/detect_machine.sh @@ -16,6 +16,12 @@ case $(hostname -f) in v72a1.ncep.noaa.gov) MACHINE_ID=wcoss_dell_p3 ;; ### venus v72a2.ncep.noaa.gov) MACHINE_ID=wcoss_dell_p3 ;; ### venus v72a3.ncep.noaa.gov) MACHINE_ID=wcoss_dell_p3 ;; ### venus + v109a1.ncep.noaa.gov) MACHINE_ID=wcoss_dell_p3 ;; ### venus + v109a2.ncep.noaa.gov) MACHINE_ID=wcoss_dell_p3 ;; ### venus + v109a3.ncep.noaa.gov) MACHINE_ID=wcoss_dell_p3 ;; ### venus + v110a1.ncep.noaa.gov) MACHINE_ID=wcoss_dell_p3 ;; ### venus + v110a2.ncep.noaa.gov) MACHINE_ID=wcoss_dell_p3 ;; ### venus + v110a3.ncep.noaa.gov) MACHINE_ID=wcoss_dell_p3 ;; ### venus m71a1.ncep.noaa.gov) MACHINE_ID=wcoss_dell_p3 ;; ### mars m71a2.ncep.noaa.gov) MACHINE_ID=wcoss_dell_p3 ;; ### mars @@ -23,9 +29,35 @@ case $(hostname -f) in m72a1.ncep.noaa.gov) MACHINE_ID=wcoss_dell_p3 ;; ### mars m72a2.ncep.noaa.gov) MACHINE_ID=wcoss_dell_p3 ;; ### mars m72a3.ncep.noaa.gov) MACHINE_ID=wcoss_dell_p3 ;; ### mars - - alogin01) MACHINE_ID=wcoss2 ;; ### acorn - alogin02) MACHINE_ID=wcoss2 ;; ### acorn + m109a1.ncep.noaa.gov) MACHINE_ID=wcoss_dell_p3 ;; ### mars + m110a2.ncep.noaa.gov) MACHINE_ID=wcoss_dell_p3 ;; ### mars + m109a3.ncep.noaa.gov) MACHINE_ID=wcoss_dell_p3 ;; ### mars + m110a1.ncep.noaa.gov) MACHINE_ID=wcoss_dell_p3 ;; ### mars + m110a2.ncep.noaa.gov) MACHINE_ID=wcoss_dell_p3 ;; ### mars + m110a3.ncep.noaa.gov) MACHINE_ID=wcoss_dell_p3 ;; ### mars + + alogin01.acorn.wcoss2.ncep.noaa.gov) MACHINE_ID=wcoss2_a ;; ### acorn + alogin02.acorn.wcoss2.ncep.noaa.gov) MACHINE_ID=wcoss2_a ;; ### acorn + adecflow01.acorn.wcoss2.ncep.noaa.gov) MACHINE_ID=wcoss2 ;; ### acorn + adecflow02.acorn.wcoss2.ncep.noaa.gov) MACHINE_ID=wcoss2 ;; ### acorn + dlogin01.dogwood.wcoss2.ncep.noaa.gov) MACHINE_ID=wcoss2 ;; ### dodwood + dlogin02.dogwood.wcoss2.ncep.noaa.gov) MACHINE_ID=wcoss2 ;; ### dodwood + dlogin03.dogwood.wcoss2.ncep.noaa.gov) MACHINE_ID=wcoss2 ;; ### dodwood + dlogin04.dogwood.wcoss2.ncep.noaa.gov) MACHINE_ID=wcoss2 ;; ### dodwood + dlogin05.dogwood.wcoss2.ncep.noaa.gov) MACHINE_ID=wcoss2 ;; ### dodwood + dlogin06.dogwood.wcoss2.ncep.noaa.gov) MACHINE_ID=wcoss2 ;; ### dodwood + dlogin07.dogwood.wcoss2.ncep.noaa.gov) MACHINE_ID=wcoss2 ;; ### dodwood + dlogin08.dogwood.wcoss2.ncep.noaa.gov) MACHINE_ID=wcoss2 ;; ### dodwood + dlogin09.dogwood.wcoss2.ncep.noaa.gov) MACHINE_ID=wcoss2 ;; ### dodwood + clogin01.cactus.wcoss2.ncep.noaa.gov) MACHINE_ID=wcoss2 ;; ### cactus + clogin02.cactus.wcoss2.ncep.noaa.gov) MACHINE_ID=wcoss2 ;; ### cactus + clogin03.cactus.wcoss2.ncep.noaa.gov) MACHINE_ID=wcoss2 ;; ### cactus + clogin04.cactus.wcoss2.ncep.noaa.gov) MACHINE_ID=wcoss2 ;; ### cactus + clogin05.cactus.wcoss2.ncep.noaa.gov) MACHINE_ID=wcoss2 ;; ### cactus + clogin06.cactus.wcoss2.ncep.noaa.gov) MACHINE_ID=wcoss2 ;; ### cactus + clogin07.cactus.wcoss2.ncep.noaa.gov) MACHINE_ID=wcoss2 ;; ### cactus + clogin08.cactus.wcoss2.ncep.noaa.gov) MACHINE_ID=wcoss2 ;; ### cactus + clogin09.cactus.wcoss2.ncep.noaa.gov) MACHINE_ID=wcoss2 ;; ### cactus gaea9) MACHINE_ID=gaea ;; ### gaea9 gaea10) MACHINE_ID=gaea ;; ### gaea10 @@ -92,6 +124,8 @@ case $(hostname -f) in login4.stampede2.tacc.utexas.edu) MACHINE_ID=stampede ;; ### stampede4 s4-submit.ssec.wisc.edu) MACHINE_ID=s4 ;; ### S4 + + *) MACHINE_ID=unknown esac # Overwrite auto-detect with RT_MACHINE if set diff --git a/ush/fv3gfs_downstream_nems.sh b/ush/fv3gfs_downstream_nems.sh index 2e5c16cb6..149b02021 100755 --- a/ush/fv3gfs_downstream_nems.sh +++ b/ush/fv3gfs_downstream_nems.sh @@ -99,7 +99,7 @@ fi #----------------------------------------------------- #----------------------------------------------------- -if [ $machine = WCOSS -o $machine = WCOSS_C -o $machine = WCOSS_DELL_P3 -o $machine = HERA -o $machine = ORION -o $machine = S4 ]; then +if [ $machine = WCOSS -o $machine = WCOSS_C -o $machine = WCOSS_DELL_P3 -o $machine = HERA -o $machine = ORION -o $machine = JET -o $machine = S4 -o $machine = WCOSS2 ]; then #----------------------------------------------------- #----------------------------------------------------- export nset=1 @@ -171,9 +171,9 @@ date export MP_PGMMODEL=mpmd export MP_CMDFILE=$DATA/poescript launcher=${APRUN_DWN:-"aprun -j 1 -n 24 -N 24 -d 1 cfp"} - if [ $machine = WCOSS_C -o $machine = WCOSS_DELL_P3 ] ; then + if [ $machine = WCOSS_C -o $machine = WCOSS_DELL_P3 -o $machine = WCOSS2 ] ; then $launcher $MP_CMDFILE - elif [ $machine = HERA -o $machine = ORION -o $machine = S4 ] ; then + elif [ $machine = HERA -o $machine = ORION -o $machine = JET -o $machine = S4 ] ; then if [ -s $DATA/poescript_srun ]; then rm -f $DATA/poescript_srun; fi touch $DATA/poescript_srun nm=0 diff --git a/ush/gfs_nceppost.sh b/ush/gfs_nceppost.sh index b904e4ba5..2ee5afcde 100755 --- a/ush/gfs_nceppost.sh +++ b/ush/gfs_nceppost.sh @@ -23,6 +23,8 @@ # Remove legacy setting for reading non-nemsio model output # and generating grib1 data # 2019-06-02 Wen Meng: Remove the links of gfs fix files. +# 2021-06-11 Yali Mao: Instead of err_chk, 'exit $err' for wafsfile +# if POSTGPEXEC fails # # Usage: global_postgp.sh SIGINP FLXINP FLXIOUT PGBOUT PGIOUT IGEN # @@ -292,7 +294,7 @@ export pgm=$PGM $LOGSCRIPT cat <postgp.inp.nml$$ &NAMPGB - $POSTGPVARS + $POSTGPVARS numx=2 EOF cat <>postgp.inp.nml$$ @@ -311,13 +313,14 @@ export DD=`echo $VDATE | cut -c7-8` export HH=`echo $VDATE | cut -c9-10` cat > itag <> itag @@ -350,6 +353,12 @@ ${APRUN:-mpirun.lsf} $POSTGPEXEC < itag > outpost_gfs_${VDATE}_${CTL} export ERR=$? export err=$ERR + +if [ $err -ne 0 ] ; then + if [ $PGBOUT = "wafsfile" ] ; then + exit $err + fi +fi $ERRSCRIPT||exit 2 if [ $FILTER = "1" ] ; then diff --git a/ush/link_crtm_fix.sh b/ush/link_crtm_fix.sh index 1ce1085ec..856c17fd2 100755 --- a/ush/link_crtm_fix.sh +++ b/ush/link_crtm_fix.sh @@ -19,7 +19,8 @@ for what in "amsre_aqua" "imgr_g11" "imgr_g12" "imgr_g13" \ "imgr_g15" "imgr_mt1r" "imgr_mt2" "seviri_m10" \ "ssmi_f13" "ssmi_f14" "ssmi_f15" "ssmis_f16" \ "ssmis_f17" "ssmis_f18" "ssmis_f19" "ssmis_f20" \ - "tmi_trmm" "v.seviri_m10" "imgr_insat3d" "abi_gr" "ahi_himawari8" ; do + "tmi_trmm" "v.seviri_m10" "imgr_insat3d" "abi_gr" "ahi_himawari8" \ + "abi_g16" "abi_g17" ; do ln -s "$FIXCRTM/$what.TauCoeff.bin" . ln -s "$FIXCRTM/$what.SpcCoeff.bin" . done