From 66dc42db4cb03fb6ddee3a4232f047a2fb93d7a9 Mon Sep 17 00:00:00 2001 From: Dom Heinzeller Date: Wed, 16 Oct 2019 10:24:30 +0900 Subject: [PATCH] FV3: this commit #refs 69917, Update CCPP with GFSv16 changes from IPD, bugfixes for both IPD and CCPP GFSv16, #refs 66372, CCPP changes for HAFS physics, and in addition: add a stub inline post module for systems that do not have EMC post installed, move ccpp directory from top level directory to underneath FV3 (this includes out-of-source build capabilities for ccpp) --- .gitmodules | 6 + atmos_cubed_sphere | 2 +- ccpp/CMakeLists.txt | 295 +++ ccpp/build_ccpp.sh | 228 ++ ccpp/config/ccpp_prebuild_config.py | 356 +++ {CCPP_layer => ccpp/driver}/CCPP_driver.F90 | 0 {CCPP_layer => ccpp/driver}/makefile | 12 +- ccpp/framework | 1 + ccpp/physics | 1 + ccpp/set_compilers.sh | 109 + ccpp/suites/suite.xsd | 49 + ccpp/suites/suite_FV3_CPT_v0.xml | 99 + ccpp/suites/suite_FV3_GFS_2017.xml | 89 + ccpp/suites/suite_FV3_GFS_2017_csawmg.xml | 94 + ccpp/suites/suite_FV3_GFS_2017_csawmgshoc.xml | 93 + ccpp/suites/suite_FV3_GFS_2017_gfdlmp.xml | 93 + .../suite_FV3_GFS_2017_gfdlmp_noahmp.xml | 94 + .../suite_FV3_GFS_2017_gfdlmp_regional.xml | 88 + ...uite_FV3_GFS_2017_gfdlmp_regional_c768.xml | 86 + ccpp/suites/suite_FV3_GFS_2017_h2ophys.xml | 90 + ccpp/suites/suite_FV3_GFS_2017_myj.xml | 94 + ccpp/suites/suite_FV3_GFS_2017_ntiedtke.xml | 93 + .../suites/suite_FV3_GFS_2017_ozphys_2015.xml | 89 + ccpp/suites/suite_FV3_GFS_2017_satmedmf.xml | 89 + ccpp/suites/suite_FV3_GFS_2017_shinhong.xml | 92 + ccpp/suites/suite_FV3_GFS_2017_stretched.xml | 92 + ccpp/suites/suite_FV3_GFS_2017_ysu.xml | 92 + ccpp/suites/suite_FV3_GFS_v15.xml | 94 + ccpp/suites/suite_FV3_GFS_v15_gf.xml | 94 + ccpp/suites/suite_FV3_GFS_v15_gf_thompson.xml | 91 + ccpp/suites/suite_FV3_GFS_v15_mynn.xml | 94 + ccpp/suites/suite_FV3_GFS_v15_thompson.xml | 91 + .../suite_FV3_GFS_v15_thompson_mynn.xml | 91 + ccpp/suites/suite_FV3_GFS_v15plus.xml | 94 + ccpp/suites/suite_FV3_GSD_noah.xml | 91 + ccpp/suites/suite_FV3_GSD_v0.xml | 93 + ccpp/suites/suite_FV3_GSD_v0_drag_suite.xml | 93 + gfsphysics/GFS_layer/GFS_physics_driver.F90 | 78 +- gfsphysics/GFS_layer/GFS_typedefs.F90 | 2279 +++++++++-------- gfsphysics/GFS_layer/GFS_typedefs.meta | 843 +++++- gfsphysics/makefile | 36 +- gfsphysics/physics/GFS_debug.F90 | 26 +- gfsphysics/physics/dcyc2.f | 2 +- gfsphysics/physics/sfcsub.F | 4 +- io/FV3GFS_io.F90 | 29 +- io/makefile | 17 +- io/module_wrt_grid_comp.F90 | 6 + io/post_gfs_stub.F90 | 58 + makefile | 12 +- 49 files changed, 5632 insertions(+), 1210 deletions(-) create mode 100644 ccpp/CMakeLists.txt create mode 100755 ccpp/build_ccpp.sh create mode 100755 ccpp/config/ccpp_prebuild_config.py rename {CCPP_layer => ccpp/driver}/CCPP_driver.F90 (100%) rename {CCPP_layer => ccpp/driver}/makefile (82%) create mode 160000 ccpp/framework create mode 160000 ccpp/physics create mode 100755 ccpp/set_compilers.sh create mode 100644 ccpp/suites/suite.xsd create mode 100644 ccpp/suites/suite_FV3_CPT_v0.xml create mode 100644 ccpp/suites/suite_FV3_GFS_2017.xml create mode 100644 ccpp/suites/suite_FV3_GFS_2017_csawmg.xml create mode 100644 ccpp/suites/suite_FV3_GFS_2017_csawmgshoc.xml create mode 100644 ccpp/suites/suite_FV3_GFS_2017_gfdlmp.xml create mode 100644 ccpp/suites/suite_FV3_GFS_2017_gfdlmp_noahmp.xml create mode 100644 ccpp/suites/suite_FV3_GFS_2017_gfdlmp_regional.xml create mode 100644 ccpp/suites/suite_FV3_GFS_2017_gfdlmp_regional_c768.xml create mode 100644 ccpp/suites/suite_FV3_GFS_2017_h2ophys.xml create mode 100644 ccpp/suites/suite_FV3_GFS_2017_myj.xml create mode 100644 ccpp/suites/suite_FV3_GFS_2017_ntiedtke.xml create mode 100644 ccpp/suites/suite_FV3_GFS_2017_ozphys_2015.xml create mode 100644 ccpp/suites/suite_FV3_GFS_2017_satmedmf.xml create mode 100644 ccpp/suites/suite_FV3_GFS_2017_shinhong.xml create mode 100644 ccpp/suites/suite_FV3_GFS_2017_stretched.xml create mode 100644 ccpp/suites/suite_FV3_GFS_2017_ysu.xml create mode 100644 ccpp/suites/suite_FV3_GFS_v15.xml create mode 100644 ccpp/suites/suite_FV3_GFS_v15_gf.xml create mode 100644 ccpp/suites/suite_FV3_GFS_v15_gf_thompson.xml create mode 100644 ccpp/suites/suite_FV3_GFS_v15_mynn.xml create mode 100644 ccpp/suites/suite_FV3_GFS_v15_thompson.xml create mode 100644 ccpp/suites/suite_FV3_GFS_v15_thompson_mynn.xml create mode 100644 ccpp/suites/suite_FV3_GFS_v15plus.xml create mode 100644 ccpp/suites/suite_FV3_GSD_noah.xml create mode 100644 ccpp/suites/suite_FV3_GSD_v0.xml create mode 100644 ccpp/suites/suite_FV3_GSD_v0_drag_suite.xml create mode 100644 io/post_gfs_stub.F90 diff --git a/.gitmodules b/.gitmodules index fb33a8b44..949d298df 100644 --- a/.gitmodules +++ b/.gitmodules @@ -2,3 +2,9 @@ path = atmos_cubed_sphere url = https://github.com/NOAA-EMC/GFDL_atmos_cubed_sphere branch = dev/emc +[submodule "ccpp/framework"] + path = ccpp/framework + url = https://github.com/NCAR/ccpp-framework +[submodule "ccpp/physics"] + path = ccpp/physics + url = https://github.com/NCAR/ccpp-physics diff --git a/atmos_cubed_sphere b/atmos_cubed_sphere index 8dd7628b3..786447c83 160000 --- a/atmos_cubed_sphere +++ b/atmos_cubed_sphere @@ -1 +1 @@ -Subproject commit 8dd7628b3e2d1db8a48d877b9fe561be66bbf472 +Subproject commit 786447c8391a6806cd7b869bfa9dca69e3c95a48 diff --git a/ccpp/CMakeLists.txt b/ccpp/CMakeLists.txt new file mode 100644 index 000000000..5b903352c --- /dev/null +++ b/ccpp/CMakeLists.txt @@ -0,0 +1,295 @@ +cmake_minimum_required(VERSION 2.8.11) + +# Use rpaths on MacOSX +set(CMAKE_MACOSX_RPATH 1) + +if(POLICY CMP0048) + cmake_policy(SET CMP0048 NEW) +endif(POLICY CMP0048) + +if(POLICY CMP0042) + cmake_policy(SET CMP0042 NEW) +endif(POLICY CMP0042) + +PROJECT(CCPP-FV3) +set(PROJECT "CCPP-FV3") + +ENABLE_LANGUAGE(Fortran) + +include(CMakeForceCompiler) + +#------------------------------------------------------------------------------ +# Set a default build type if none was specified +if(NOT CMAKE_BUILD_TYPE AND NOT CMAKE_CONFIGURATION_TYPES) + message(STATUS "Setting build type to 'Release' as none was specified.") + set(CMAKE_BUILD_TYPE Release CACHE STRING "Choose the type of build." FORCE) + # Set the possible values of build type for cmake-gui + set_property(CACHE CMAKE_BUILD_TYPE PROPERTY STRINGS "Debug" "Release" "Coverage") +endif() + +#------------------------------------------------------------------------------ +# Set include directories for make, also set CCPP_... for external projects +INCLUDE_DIRECTORIES(${CMAKE_CURRENT_BINARY_DIR}/framework/src) +INCLUDE_DIRECTORIES(${CMAKE_CURRENT_BINARY_DIR}/physics) +SET(CCPP_INCLUDE_DIRS "${CMAKE_CURRENT_BINARY_DIR}/framework/src;${CMAKE_CURRENT_BINARY_DIR}/physics") +SET(CCPP_LIB_DIRS "${CMAKE_CURRENT_BINARY_DIR}/framework/src;${CMAKE_CURRENT_BINARY_DIR}/physics") + +#------------------------------------------------------------------------------ +# Generate Compiler flags for C/CXX/Fortran - set to match NEMSfv3gfs flags +# for DEBUG, REPRO and PROD mode for all three compilers + +# Set basic compiler optimization levels, depending on build type +if (${CMAKE_BUILD_TYPE} MATCHES "Debug") + ADD_DEFINITIONS(-DDEBUG) + set (CMAKE_C_FLAGS_DEBUG "-O0 -g -fPIC" CACHE STRING "" FORCE) + set (CMAKE_CXX_FLAGS_DEBUG "-O0 -g -fPIC" CACHE STRING "" FORCE) + set (CMAKE_Fortran_FLAGS_DEBUG "-O0 -g -fPIC" CACHE STRING "" FORCE) + set (CMAKE_C_FLAGS "${CMAKE_C_FLAGS_DEBUG}") + set (CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS_DEBUG}") + set (CMAKE_Fortran_FLAGS "${CMAKE_Fortran_FLAGS_DEBUG}") +elseif (${CMAKE_BUILD_TYPE} MATCHES "Release") + if (${CMAKE_Fortran_COMPILER_ID} MATCHES "PGI") + set (CMAKE_C_FLAGS_RELEASE "-O1 -fPIC" CACHE STRING "" FORCE) + set (CMAKE_CXX_FLAGS_RELEASE "-O1 -fPIC" CACHE STRING "" FORCE) + set (CMAKE_Fortran_FLAGS_RELEASE "-O1 -fPIC" CACHE STRING "" FORCE) + else (${CMAKE_Fortran_COMPILER_ID} MATCHES "PGI") + set (CMAKE_C_FLAGS_RELEASE "-O2 -fPIC" CACHE STRING "" FORCE) + set (CMAKE_CXX_FLAGS_RELEASE "-O2 -fPIC" CACHE STRING "" FORCE) + set (CMAKE_Fortran_FLAGS_RELEASE "-O2 -fPIC" CACHE STRING "" FORCE) + endif (${CMAKE_Fortran_COMPILER_ID} MATCHES "PGI") + set (CMAKE_C_FLAGS "${CMAKE_C_FLAGS_RELEASE}") + set (CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS_RELEASE}") + set (CMAKE_Fortran_FLAGS "${CMAKE_Fortran_FLAGS_RELEASE}") +elseif (${CMAKE_BUILD_TYPE} MATCHES "Bitforbit") + if (${CMAKE_Fortran_COMPILER_ID} MATCHES "PGI") + set (CMAKE_C_FLAGS_RELEASE "-O1 -fPIC" CACHE STRING "" FORCE) + set (CMAKE_CXX_FLAGS_RELEASE "-O1 -fPIC" CACHE STRING "" FORCE) + set (CMAKE_Fortran_FLAGS_RELEASE "-O1 -fPIC" CACHE STRING "" FORCE) + else (${CMAKE_Fortran_COMPILER_ID} MATCHES "PGI") + set (CMAKE_C_FLAGS_RELEASE "-O2 -fPIC" CACHE STRING "" FORCE) + set (CMAKE_CXX_FLAGS_RELEASE "-O2 -fPIC" CACHE STRING "" FORCE) + set (CMAKE_Fortran_FLAGS_RELEASE "-O2 -fPIC" CACHE STRING "" FORCE) + endif (${CMAKE_Fortran_COMPILER_ID} MATCHES "PGI") + set (CMAKE_C_FLAGS "${CMAKE_C_FLAGS_RELEASE}") + set (CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS_RELEASE}") + set (CMAKE_Fortran_FLAGS "${CMAKE_Fortran_FLAGS_RELEASE}") +endif (${CMAKE_BUILD_TYPE} MATCHES "Debug") + +# Set compiler-specific options, depending on build type; some optimization flags may only be used +# for certain files (controlled for example in ccpp-physics' CMakeLists.txt). These must be set as +# CMAKE_Fortran_FLAGS_OPT, which by default is empty. Flags for controlling the default precision +# are set as CMAKE_Fortran_FLAGS_DEFAULT_PREC. +set (CMAKE_Fortran_FLAGS_OPT "") +if (${CMAKE_Fortran_COMPILER_ID} MATCHES "GNU") + set (CMAKE_Fortran_FLAGS "${CMAKE_Fortran_FLAGS} -fcray-pointer -ffree-line-length-none -fno-range-check") + set (CMAKE_Fortran_FLAGS "${CMAKE_Fortran_FLAGS} -fbacktrace -cpp") + if (${CMAKE_BUILD_TYPE} MATCHES "Debug") + set (CMAKE_Fortran_FLAGS "${CMAKE_Fortran_FLAGS} -fno-unsafe-math-optimizations -frounding-math -fsignaling-nans") + set (CMAKE_Fortran_FLAGS "${CMAKE_Fortran_FLAGS} -ffpe-trap=invalid,zero,overflow -fcheck=bounds -fbacktrace -fno-range-check") + elseif (${CMAKE_BUILD_TYPE} MATCHES "Bitforbit") + set (CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -g") + set (CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -g") + set (CMAKE_Fortran_FLAGS "${CMAKE_Fortran_FLAGS} -g") + endif (${CMAKE_BUILD_TYPE} MATCHES "Debug") + set (CMAKE_Fortran_FLAGS_DEFAULT_PREC "-fdefault-real-8 -fdefault-double-8") +elseif (${CMAKE_Fortran_COMPILER_ID} MATCHES "PGI") + set (CMAKE_Fortran_FLAGS "${CMAKE_Fortran_FLAGS} -Mcray=pointer -Kieee -byteswapio -Mfprelaxed=div -Mfprelaxed=sqrt") + set (CMAKE_Fortran_FLAGS "${CMAKE_Fortran_FLAGS} -traceback") + set (CMAKE_Fortran_FLAGS "${CMAKE_Fortran_FLAGS} -Mpreprocess") + if (${CMAKE_BUILD_TYPE} MATCHES "Debug") + set (CMAKE_Fortran_FLAGS "${CMAKE_Fortran_FLAGS} -tp=x64 -Ktrap=fp -Mbounds") + elseif (${CMAKE_BUILD_TYPE} MATCHES "Bitforbit") + set (CMAKE_Fortran_FLAGS "${CMAKE_Fortran_FLAGS} -tp=x64") + elseif (${CMAKE_BUILD_TYPE} MATCHES "Release") + set (CMAKE_Fortran_FLAGS "${CMAKE_Fortran_FLAGS} -tp=haswell") + endif (${CMAKE_BUILD_TYPE} MATCHES "Debug") + set (CMAKE_Fortran_FLAGS_DEFAULT_PREC "-i4 -r8") +elseif (${CMAKE_Fortran_COMPILER_ID} MATCHES "Intel") + set (CMAKE_Fortran_FLAGS "${CMAKE_Fortran_FLAGS} -fno-alias -auto -safe-cray-ptr -ftz -assume byterecl -nowarn -sox -align array64byte") + set (CMAKE_Fortran_FLAGS "${CMAKE_Fortran_FLAGS} -qno-opt-dynamic-align -fpp -save-temps") + if (${CMAKE_BUILD_TYPE} MATCHES "Debug") + set (CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -ftrapuv -traceback") + set (CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -ftrapuv -traceback") + set (CMAKE_Fortran_FLAGS "${CMAKE_Fortran_FLAGS} -check -check noarg_temp_created -check nopointer -warn -warn noerrors -fp-stack-check") + set (CMAKE_Fortran_FLAGS "${CMAKE_Fortran_FLAGS} -fstack-protector-all -fpe0 -traceback -debug -ftrapuv") + elseif (${CMAKE_BUILD_TYPE} MATCHES "Bitforbit") + if(LEGACY_INTEL) + set (CMAKE_Fortran_FLAGS "${CMAKE_Fortran_FLAGS} -debug minimal -fp-model strict -qoverride-limits -g -traceback") + else(LEGACY_INTEL) + set (CMAKE_Fortran_FLAGS "${CMAKE_Fortran_FLAGS} -debug minimal -fp-model consistent -qoverride-limits -g -traceback") + endif (LEGACY_INTEL) + elseif (${CMAKE_BUILD_TYPE} MATCHES "Release") + # Specify aggressive optimization flags (to be overwritten for individual files in ccpp-physics' CMakeLists.txt) + if (SIMDMULTIARCH) + set (CMAKE_Fortran_FLAGS_OPT "-no-prec-div -no-prec-sqrt -axSSE4.2,AVX,CORE-AVX2,CORE-AVX512") + else (SIMDMULTIARCH) + set (CMAKE_Fortran_FLAGS_OPT "-no-prec-div -no-prec-sqrt -xCORE-AVX2") + endif (SIMDMULTIARCH) + set (CMAKE_Fortran_FLAGS "${CMAKE_Fortran_FLAGS} -debug minimal -fp-model source -qoverride-limits -qopt-prefetch=3") + endif (${CMAKE_BUILD_TYPE} MATCHES "Debug") + set (CMAKE_Fortran_FLAGS_DEFAULT_PREC "-i4 -real-size 64") +else (${CMAKE_Fortran_COMPILER_ID} MATCHES "GNU") + message (FATAL_ERROR "CCPP has only been compiled with gfortran, pgf90 and ifort.") +endif (${CMAKE_Fortran_COMPILER_ID} MATCHES "GNU") + +#------------------------------------------------------------------------------ +# The Fortran compiler/linker flag inserted by cmake to create shared libraries +# with the Intel compiler is deprecated (-i_dynamic), correct here. +if ("${CMAKE_Fortran_COMPILER_ID}" MATCHES "Intel") + string(REPLACE "-i_dynamic" "-shared-intel" + CMAKE_SHARED_LIBRARY_CREATE_Fortran_FLAGS + "${CMAKE_SHARED_LIBRARY_CREATE_Fortran_FLAGS}") + string(REPLACE "-i_dynamic" "-shared-intel" + CMAKE_SHARED_LIBRARY_LINK_Fortran_FLAGS + "${CMAKE_SHARED_LIBRARY_LINK_Fortran_FLAGS}") +endif() + +#------------------------------------------------------------------------------ +# CMake Modules +list(APPEND CMAKE_MODULE_PATH "${CMAKE_CURRENT_SOURCE_DIR}/framework/cmake") + +#------------------------------------------------------------------------------ +# Detect OS and set preprocessor flags +if(APPLE) + ADD_DEFINITIONS(-DMACOSX) +elseif(UNIX) + ADD_DEFINITIONS(-DLINUX) +else (APPLE) + message (FATAL_ERROR "Unsupported platform, only Linux and MacOSX are supported at this time.") +endif(APPLE) + +#------------------------------------------------------------------------------ +# Add -DCCPP preprocessor flag (needed to preprocess GFS_typedefs.F90 from FV3) +ADD_DEFINITIONS(-DCCPP) + +#------------------------------------------------------------------------------ +# Add host-model specific preprocessor flag (needed for some physics schemes) +ADD_DEFINITIONS(-DFV3) + +#------------------------------------------------------------------------------ +# Set MPI flags for C/C++/Fortran preprocessor +if (MPI) + ADD_DEFINITIONS(-DMPI) +endif (MPI) + +#------------------------------------------------------------------------------ +# Set flags for static building/linking of CCPP +if (STATIC) + ADD_DEFINITIONS(-DSTATIC) +endif (STATIC) + +#------------------------------------------------------------------------------ +# Set flag for 32bit dynamics build +if (DYN32) + message(STATUS "Dynamics compiled with 32-bit option, adjust fv_sat_adj types") + ADD_DEFINITIONS(-DOVERLOAD_R4) +endif (DYN32) + +#------------------------------------------------------------------------------ +# If a dynamic build is requested, set TARGET_SUPPORTS_SHARED_LIBS to TRUE; on +# some systems, cmake doesn't set this even though the system supports shared +# libraries (e.g. Cray systems) +if(NOT STATIC) +SET_PROPERTY(GLOBAL PROPERTY TARGET_SUPPORTS_SHARED_LIBS TRUE) +endif(NOT STATIC) + +#------------------------------------------------------------------------------ +# Add model-specific flags for C/C++/Fortran preprocessor +ADD_DEFINITIONS(-DMOIST_CAPPA -DUSE_COND -DNEMS_GSM) +ADD_DEFINITIONS(-DINTERNAL_FILE_NML) + +#------------------------------------------------------------------------------ +# Set OpenMP flags for C/C++/Fortran compiler and preprocessor +if (OPENMP) + include(detect_openmp) + detect_openmp() + set (CMAKE_C_FLAGS "${CMAKE_C_FLAGS} ${OpenMP_C_FLAGS}") + set (CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} ${OpenMP_CXX_FLAGS}") + set (CMAKE_Fortran_FLAGS "${CMAKE_Fortran_FLAGS} ${OpenMP_Fortran_FLAGS}") + message(STATUS "Enable OpenMP support for C/C++/Fortran compiler") + ADD_DEFINITIONS(-DOPENMP) +else (OPENMP) + message (STATUS "Disable OpenMP support for C/C++/Fortran compiler") +endif (OPENMP) + +#------------------------------------------------------------------------------ +# Set SIONlib flags for preprocessor, compiler and linker (if defined) +if (SIONLIB) + execute_process(COMMAND ${SIONLIB}/bin/sionconfig --mpi --cflags --f90 + RESULT_VARIABLE exit_code + OUTPUT_VARIABLE SIONlib_Fortran_FLAGS + ERROR_VARIABLE stderr + OUTPUT_STRIP_TRAILING_WHITESPACE + ERROR_STRIP_TRAILING_WHITESPACE) + if (NOT exit_code EQUAL "0") + message (FATAL_ERROR "Execution of '${SIONLIB}/bin/sionconfig --mpi --cflags --f90' failed") + endif (NOT exit_code EQUAL "0") + execute_process(COMMAND ${SIONLIB}/bin/sionconfig --mpi --libs --f90 + RESULT_VARIABLE exit_code + OUTPUT_VARIABLE SIONlib_Fortran_LIBS + ERROR_VARIABLE stderr + OUTPUT_STRIP_TRAILING_WHITESPACE + ERROR_STRIP_TRAILING_WHITESPACE) + if (NOT exit_code EQUAL "0") + message (FATAL_ERROR "Execution of '${SIONLIB}/bin/sionconfig --mpi --libs --f90' failed") + endif (NOT exit_code EQUAL "0") + set (CMAKE_Fortran_FLAGS "${CMAKE_Fortran_FLAGS} ${SIONlib_Fortran_FLAGS} ${SIONlib_Fortran_LIBS}") + ADD_DEFINITIONS(-DSION) + message (STATUS "Enable SIONlib support") +else (SIONLIB) + message (STATUS "Disable SIONlib support") +endif (SIONLIB) + +#------------------------------------------------------------------------------ +# Set Intel MKL flags for preprocessor, compiler and linker (if defined) +if(MKL_DIR) + set (MKL_INC "-m64 -I${MKL_DIR}/include") + set (MKL_LIB "-L${MKL_DIR}/lib -Wl,-rpath,${MKL_DIR}/lib -lmkl_intel_lp64 -lmkl_sequential -lmkl_core -lpthread -lm -ldl") + set (CMAKE_Fortran_FLAGS "${CMAKE_Fortran_FLAGS} ${MKL_INC} ${MKL_LIB}") + ADD_DEFINITIONS(-DMKL) + message (STATUS "Enable Intel MKL support") +else(MKL_DIR) + message (STATUS "Disable Intel MKL support") +endif(MKL_DIR) + +#------------------------------------------------------------------------------ +# Set netCDF flags for preprocessor, compiler and linker (if defined) +if(NETCDF_DIR) + set (NETCDF_INC "-I${NETCDF_DIR}/include") + set (NETCDF_LIB "-L${NETCDF_DIR}/lib -lnetcdff -lnetcdf") + set (CMAKE_Fortran_FLAGS "${CMAKE_Fortran_FLAGS} ${NETCDF_INC} ${NETCDF_LIB}") + ADD_DEFINITIONS(-DNETCDF) + message (STATUS "Enable netCDF support") +else(NETCDF_DIR) + message (STATUS "Disable netCDF support") +endif(NETCDF_DIR) + +#------------------------------------------------------------------------------ +# Set ESMF flags for preprocessor, compiler and linker (if defined) +if(ESMF_LIB_DIR) + set (CMAKE_Fortran_FLAGS "${CMAKE_Fortran_FLAGS} -L${ESMF_LIB_DIR} -lesmf") + message (STATUS "Enable ESMF support") +else(ESMF_LIB_DIR) + message (STATUS "Disable ESMF support") +endif(ESMF_LIB_DIR) + +#------------------------------------------------------------------------------ +# Set multi-gases flags for preprocessor (if defined) +if(MULTI_GASES) + message (STATUS "Enable multi-gases physics") + ADD_DEFINITIONS(-DMULTI_GASES) +else(MULTI_GASES) + message (STATUS "Disable multi-gases physics") +endif(MULTI_GASES) + +#------------------------------------------------------------------------------ +# Build CCPP framework and physics + +SET(CCPP_FRAMEWORK_SRC ${PROJECT_SOURCE_DIR}/framework) +ADD_SUBDIRECTORY(${CCPP_FRAMEWORK_SRC} ${CMAKE_CURRENT_BINARY_DIR}/framework) + +# Add directory containing compiled CCPP Fortran modules to included directories for physics +set (CMAKE_Fortran_FLAGS "${CMAKE_Fortran_FLAGS} -I${CMAKE_CURRENT_BINARY_DIR}/framework/src") + +SET(CCPP_PHYSICS_SRC ${PROJECT_SOURCE_DIR}/physics) +ADD_SUBDIRECTORY(${CCPP_PHYSICS_SRC} ${CMAKE_CURRENT_BINARY_DIR}/physics) diff --git a/ccpp/build_ccpp.sh b/ccpp/build_ccpp.sh new file mode 100755 index 000000000..a0e40203b --- /dev/null +++ b/ccpp/build_ccpp.sh @@ -0,0 +1,228 @@ +#!/bin/bash + +set +x +set -eu + +# List of valid/tested machines +VALID_MACHINES=( wcoss_cray wcoss_dell_p3 gaea.intel jet.intel \ + hera.intel \ + cheyenne.intel cheyenne.intel-impi cheyenne.gnu cheyenne.pgi endeavor.intel \ + stampede.intel supermuc_phase2.intel macosx.gnu \ + linux.intel linux.gnu linux.pgi ) + +################################################################################################### + +function usage { + echo "Usage: " + echo "build_ccpp.sh MACHINE_ID CCPP_DIR CCPP_MK [ 'MAKE_OPT' ] [ clean_before ] [ clean_after ]" + echo " Where: MACHINE [required] can be : ${VALID_MACHINES[@]}" + echo " CCPP_DIR [required] is the target installation directory for CCPP" + echo " CCPP_MK [required] is the location/name of the CCPP ESMF makefile fragment" + echo " MAKE_OPT [optional] can be any of the NEMSfv3gfs MAKE_OPT options," + echo " enclosed in a single string; used:" + echo " SION=Y/N (default N)" + echo " DEBUG=Y/N (default N)" + echo " REPRO=Y/N (default N)" + echo " OPENMP=Y/N (default Y)" + echo " 32BIT=Y/N (default N, affects dynamics/fast physics only)" + echo " STATIC=Y/N (default N, STATIC=Y requires SUITES=...)" + echo " SUITES=ABC,XYZ (comma-separated list of CCPP suites; " + echo " corresponding filenames: suite_ABC.xml. ...)" + echo " MULTI_GASES=Y/N (default N)" + echo " INTEL16=Y/N (default N)" + echo " clean_before [optional] can be 'YES' (default) or 'NO'" + echo " clean_after [optional] can be 'YES' (default) or 'NO'" + exit 1 +} + +function checkvalid { +# Ensure value ($2) of variable ($1) is contained in list of validvalues ($3) + if [ $# -lt 3 ]; then + echo $FUNCNAME requires at least 3 arguments: stopping + exit 1 + fi + + var_name=$1 && shift + input_val=$1 && shift + valid_vars=($@) + + for x in ${valid_vars[@]}; do + if [ "$input_val" == "$x" ]; then + echo "${var_name}=${input_val} is valid." + return + fi + done + echo "ERROR: ${var_name}=${input_val} is invalid." + usage + exit 1 +} + +function trim { + local var="$1" + # remove leading whitespace characters + var="${var#"${var%%[![:space:]]*}"}" + # remove trailing whitespace characters + var="${var%"${var##*[![:space:]]}"}" + echo -n "$var" +} + +################################################################################################### + +# Check and process command line arguments + +if [[ $# -lt 2 ]]; then usage; fi + +readonly MACHINE_ID=$1 +readonly CCPP_DIR=$2 +readonly CCPP_MK=$3 +readonly MAKE_OPT=${4:-} +readonly clean_before=${5:-YES} +readonly clean_after=${6:-YES} + +checkvalid MACHINE_ID $MACHINE_ID ${VALID_MACHINES[@]} + +# Set compilers for cmake +source ./set_compilers.sh + +# Obtain ESMF_LIB from ESMFMKFILE's ESMF_LIBSDIR entry +readonly ESMF_LIB=$(cat $ESMFMKFILE | grep -E '^ESMF_LIBSDIR=.+' | cut -d = -f 2) +echo "Obtained ESMF_LIB=${ESMF_LIB} from ${ESMFMKFILE}" + +# Account for inconsistencies in HPC modules: if environment variable +# NETCDF is undefined, try to set from NETCDF_DIR, NETCDF_ROOT, ... +if [[ "${MACHINE_ID}" == "wcoss_cray" || "${MACHINE_ID}" == "gaea.intel" ]]; then + NETCDF=${NETCDF:-${NETCDF_DIR}} +fi + +# Generate CCPP cmake flags from MAKE_OPT +CCPP_CMAKE_FLAGS="-DCMAKE_INSTALL_PREFIX=${CCPP_DIR} -DNETCDF_DIR=${NETCDF} -DMPI=ON" +CCPP_MAKE_FLAGS="" +if [[ "${MAKE_OPT}" == *"SION=Y"* ]]; then + CCPP_CMAKE_FLAGS="${CCPP_CMAKE_FLAGS} -DSIONLIB=${SIONLIB}" +fi +if [[ "${MAKE_OPT}" == *"DEBUG=Y"* ]]; then + CCPP_CMAKE_FLAGS="${CCPP_CMAKE_FLAGS} -DCMAKE_BUILD_TYPE=Debug" + CCPP_MAKE_FLAGS="${CCPP_MAKE_FLAGS} VERBOSE=1" +elif [[ "${MAKE_OPT}" == *"REPRO=Y"* ]]; then + CCPP_CMAKE_FLAGS="${CCPP_CMAKE_FLAGS} -DCMAKE_BUILD_TYPE=Bitforbit" + CCPP_MAKE_FLAGS="${CCPP_MAKE_FLAGS} VERBOSE=1" +else + CCPP_CMAKE_FLAGS="${CCPP_CMAKE_FLAGS} -DCMAKE_BUILD_TYPE=Release" + # Don't use the AVX512 flags yet on hera + #if [[ "${MACHINE_ID}" == "jet.intel" || "${MACHINE_ID}" == "hera.intel" ]]; then + if [[ "${MACHINE_ID}" == "jet.intel" ]]; then + CCPP_CMAKE_FLAGS="${CCPP_CMAKE_FLAGS} -DSIMDMULTIARCH=ON" + fi + CCPP_MAKE_FLAGS="${CCPP_MAKE_FLAGS} VERBOSE=1" +fi +if [[ "${MAKE_OPT}" == *"OPENMP=N"* ]]; then + CCPP_CMAKE_FLAGS="${CCPP_CMAKE_FLAGS} -DOPENMP=OFF" +else + CCPP_CMAKE_FLAGS="${CCPP_CMAKE_FLAGS} -DOPENMP=ON" +fi +if [[ "${MAKE_OPT}" == *"32BIT=Y"* ]]; then + CCPP_CMAKE_FLAGS="${CCPP_CMAKE_FLAGS} -DDYN32=ON" +else + CCPP_CMAKE_FLAGS="${CCPP_CMAKE_FLAGS} -DDYN32=OFF" +fi +if [[ "${MAKE_OPT}" == *"STATIC=Y"* ]]; then + CCPP_CMAKE_FLAGS="${CCPP_CMAKE_FLAGS} -DSTATIC=ON" +else + # Dynamic builds require linking the NCEPlibs, provide path to them + CCPP_CMAKE_FLAGS="${CCPP_CMAKE_FLAGS} -DSTATIC=OFF -DBACIO_LIB4=${BACIO_LIB4} -DSP_LIBd=${SP_LIBd} -DW3NCO_LIBd=${W3NCO_LIBd}" +fi +if [[ "${MAKE_OPT}" == *"MULTI_GASES=Y"* ]]; then + CCPP_CMAKE_FLAGS="${CCPP_CMAKE_FLAGS} -DMULTI_GASES=ON" +else + CCPP_CMAKE_FLAGS="${CCPP_CMAKE_FLAGS} -DMULTI_GASES=OFF" +fi +if [[ "${MAKE_OPT}" == *"INTEL16=Y"* ]]; then + CCPP_CMAKE_FLAGS="${CCPP_CMAKE_FLAGS} -DLEGACY_INTEL=ON" +elif [[ "${MACHINE_ID}" == "wcoss_cray" ]]; then + echo "In ccpp_build.sh: flag to cmake that wcoss_cray uses Intel 16" + CCPP_CMAKE_FLAGS="${CCPP_CMAKE_FLAGS} -DLEGACY_INTEL=ON" +else + CCPP_CMAKE_FLAGS="${CCPP_CMAKE_FLAGS} -DLEGACY_INTEL=OFF" +fi + +# Generate additional CCPP cmake flags depending on machine / compiler +if [[ "${MACHINE_ID}" == "macosx.gnu" ]]; then + # Intel MKL (for FFTW) + CCPP_CMAKE_FLAGS="${CCPP_CMAKE_FLAGS} -DMKL_DIR=${MKL_DIR}" + # ESMF (for DGEMM) - replace with MKL version in the future? + CCPP_CMAKE_FLAGS="${CCPP_CMAKE_FLAGS} -DESMF_LIB_DIR=${ESMF_LIB}" + # netCDF (needed when linking ESMF) + CCPP_CMAKE_FLAGS="${CCPP_CMAKE_FLAGS} -DNETCDF_DIR=${NETCDF}" +elif [[ "${MACHINE_ID}" == "linux.gnu" ]]; then + # ESMF (for DGEMM) - replace with MKL version in the future? + CCPP_CMAKE_FLAGS="${CCPP_CMAKE_FLAGS} -DESMF_LIB_DIR=${ESMF_LIB}" + # netCDF (needed when linking ESMF) + CCPP_CMAKE_FLAGS="${CCPP_CMAKE_FLAGS} -DNETCDF_DIR=${NETCDF}" +elif [[ "${MACHINE_ID}" == "gaea.intel" || "${MACHINE_ID}" == "wcoss_cray" ]]; then + # Fix broken libxml2 installation on gaea by + # using own version (not known to the system) + if [[ "${MACHINE_ID}" == "gaea.intel" ]]; then + CCPP_CMAKE_FLAGS="${CCPP_CMAKE_FLAGS} -DLIBXML2_LIB_DIR=${LIBXML2_LIB_DIR} -DLIBXML2_INCLUDE_DIR=${LIBXML2_INCLUDE_DIR}" + fi + # DH* At this time, it is not possible to use the dynamic CCPP + # build on gaea/wcoss_cray. While compiling/linking works, the model + # crashes immediately. This may be related to 64bit/32bit mismatches + # in the MPI libraries (missing "-fPIC" flags when the MPI libraries + # were compiled on the system?) - to be investigated. + if [[ "${MAKE_OPT}" == *"STATIC=Y"* ]]; then + : + else + ## FOR DYNAMIC BUILD, SET ENVIRONMENT VARIABLE CRAYPE_LINK_TYPE + #export CRAYPE_LINK_TYPE=dynamic + echo "Dynamic CCPP build not supported on gaea/wcoss_cray at this time." + exit 1 + fi + # *DH +fi + +CCPP_CMAKE_FLAGS=$(trim "${CCPP_CMAKE_FLAGS}") +CCPP_MAKE_FLAGS=$(trim "${CCPP_MAKE_FLAGS}") + +# Build and install CCPP + +echo "Building CCPP with options '${CCPP_CMAKE_FLAGS}' ..." +PATH_CCPP=${PWD} +PATH_CCPP_BUILD=${PWD}/build +PATH_CCPP_INC=${PWD}/include +PATH_CCPP_LIB=${PWD}/lib + +if [ $clean_before = YES ]; then + rm -fr ${PATH_CCPP_BUILD} + rm -fr ${PATH_CCPP_INC} + rm -fr ${PATH_CCPP_LIB} + rm -f ${CCPP_MK} +fi +mkdir -p ${PATH_CCPP_BUILD} +cd ${PATH_CCPP_BUILD} +cmake ${CCPP_CMAKE_FLAGS} ${PATH_CCPP} +make ${CCPP_MAKE_FLAGS} +make ${CCPP_MAKE_FLAGS} install + +# Generate ESMF makefile fragment + +# Explicitly append libxml2, with or without path +CCPP_XML2_LIB="${LIBXML2_LIB_DIR:+-L${LIBXML2_LIB_DIR} }-lxml2" +set -u +if ( echo "${MAKE_OPT}" | grep STATIC=Y ) ; then + # Set linker flags for static build + CCPP_LINK_OBJS="-L${PATH_CCPP_LIB} -lccpp -lccppphys ${CCPP_XML2_LIB}" +else + # Set link objects + if ( echo "$MACHINE_ID" | grep gaea ) ; then + CCPP_LINK_OBJS="-dynamic -L${PATH_CCPP_LIB} -lccpp ${CCPP_XML2_LIB} ${CRAY_PMI_POST_LINK_OPTS} -lpmi" + else + CCPP_LINK_OBJS="-L${PATH_CCPP_LIB} -lccpp ${CCPP_XML2_LIB}" + fi +fi +echo "ESMF_DEP_INCPATH=-I${PATH_CCPP_INC}" > ${CCPP_MK} +echo "ESMF_DEP_LINK_OBJS=${CCPP_LINK_OBJS}" >> ${CCPP_MK} + +if [ $clean_after = YES ]; then + rm -fr ${PATH_CCPP_BUILD} +fi + diff --git a/ccpp/config/ccpp_prebuild_config.py b/ccpp/config/ccpp_prebuild_config.py new file mode 100755 index 000000000..b1738d633 --- /dev/null +++ b/ccpp/config/ccpp_prebuild_config.py @@ -0,0 +1,356 @@ +#!/usr/bin/env python + +# CCPP prebuild config for GFDL Finite-Volume Cubed-Sphere Model (FV3) + + +############################################################################### +# Definitions # +############################################################################### + +HOST_MODEL_IDENTIFIER = "FV3" + +# Add all files with metadata tables on the host model side, +# relative to basedir = top-level directory of host model +VARIABLE_DEFINITION_FILES = [ + 'FV3/ccpp/physics/physics/machine.F', + 'FV3/ccpp/physics/physics/radsw_param.f', + 'FV3/ccpp/physics/physics/radlw_param.f', + 'FV3/gfsphysics/CCPP_layer/CCPP_typedefs.F90', + 'FV3/gfsphysics/GFS_layer/GFS_typedefs.F90', + 'FV3/gfsphysics/CCPP_layer/CCPP_data.F90', + ] + +TYPEDEFS_NEW_METADATA = { + 'ccpp_types' : { + 'ccpp_types' : '', + 'ccpp_t' : 'cdata', + }, + 'machine' : { + 'machine' : '', + }, + 'module_radlw_parameters' : { + 'module_radsw_parameters' : '', + }, + 'module_radlw_parameters' : { + 'module_radlw_parameters' : '', + }, + 'CCPP_typedefs' : { + 'CCPP_interstitial_type' : 'CCPP_interstitial', + 'CCPP_typedefs' : '', + }, + 'CCPP_data' : { + 'CCPP_data' : '', + }, + 'GFS_typedefs' : { + 'GFS_control_type' : 'GFS_Control', + 'GFS_interstitial_type' : 'GFS_Interstitial(cdata%thrd_no)', + 'GFS_data_type' : 'GFS_Data(cdata%blk_no)', + 'GFS_diag_type' : 'GFS_Data(cdata%blk_no)%Intdiag', + 'GFS_tbd_type' : 'GFS_Data(cdata%blk_no)%Tbd', + 'GFS_sfcprop_type' : 'GFS_Data(cdata%blk_no)%Sfcprop', + 'GFS_coupling_type' : 'GFS_Data(cdata%blk_no)%Coupling', + 'GFS_statein_type' : 'GFS_Data(cdata%blk_no)%Statein', + 'GFS_cldprop_type' : 'GFS_Data(cdata%blk_no)%Cldprop', + 'GFS_radtend_type' : 'GFS_Data(cdata%blk_no)%Radtend', + 'GFS_grid_type' : 'GFS_Data(cdata%blk_no)%Grid', + 'GFS_stateout_type' : 'GFS_Data(cdata%blk_no)%Stateout', + 'GFS_typedefs' : '', + }, + } + +# Add all physics scheme dependencies relative to basedir - note that the CCPP +# rules stipulate that dependencies are not shared between the schemes! +SCHEME_FILES_DEPENDENCIES = [ + 'FV3/ccpp/physics/physics/GFDL_parse_tracers.F90', + 'FV3/ccpp/physics/physics/aer_cloud.F', + 'FV3/ccpp/physics/physics/aerclm_def.F', + 'FV3/ccpp/physics/physics/aerinterp.F90', + 'FV3/ccpp/physics/physics/calpreciptype.f90', + 'FV3/ccpp/physics/physics/cldwat2m_micro.F', + 'FV3/ccpp/physics/physics/cldmacro.F', + 'FV3/ccpp/physics/physics/date_def.f', + 'FV3/ccpp/physics/physics/funcphys.f90', + 'FV3/ccpp/physics/physics/gcycle.F90', + 'FV3/ccpp/physics/physics/gfs_phy_tracer_config.F', + 'FV3/ccpp/physics/physics/gocart_tracer_config_stub.f', + 'FV3/ccpp/physics/physics/h2o_def.f', + 'FV3/ccpp/physics/physics/h2ointerp.f90', + 'FV3/ccpp/physics/physics/iccn_def.F', + 'FV3/ccpp/physics/physics/iccninterp.F90', + 'FV3/ccpp/physics/physics/iounitdef.f', + 'FV3/ccpp/physics/physics/machine.F', + 'FV3/ccpp/physics/physics/mersenne_twister.f', + 'FV3/ccpp/physics/physics/mfpbl.f', + 'FV3/ccpp/physics/physics/micro_mg_utils.F90', + 'FV3/ccpp/physics/physics/micro_mg2_0.F90', + 'FV3/ccpp/physics/physics/micro_mg3_0.F90', + 'FV3/ccpp/physics/physics/module_bfmicrophysics.f', + 'FV3/ccpp/physics/physics/multi_gases.F90', + 'FV3/ccpp/physics/physics/module_gfdl_cloud_microphys.F90', + 'FV3/ccpp/physics/physics/module_nst_model.f90', + 'FV3/ccpp/physics/physics/module_nst_parameters.f90', + 'FV3/ccpp/physics/physics/module_nst_water_prop.f90', + 'FV3/ccpp/physics/physics/module_mp_radar.F90', + 'FV3/ccpp/physics/physics/module_mp_thompson.F90', + 'FV3/ccpp/physics/physics/module_mp_thompson_make_number_concentrations.F90', + 'FV3/ccpp/physics/physics/module_bl_mynn.F90', + 'FV3/ccpp/physics/physics/module_sf_mynn.F90', + 'FV3/ccpp/physics/physics/module_SF_JSFC.F90', + 'FV3/ccpp/physics/physics/module_BL_MYJPBL.F90', + 'FV3/ccpp/physics/physics/module_sf_noahmp_glacier.f90', + 'FV3/ccpp/physics/physics/module_sf_noahmplsm.f90', + 'FV3/ccpp/physics/physics/cires_ugwp_module.F90', + 'FV3/ccpp/physics/physics/ugwp_driver_v0.F', + 'FV3/ccpp/physics/physics/cires_ugwp_triggers.F90', + 'FV3/ccpp/physics/physics/cires_ugwp_initialize.F90', + 'FV3/ccpp/physics/physics/cires_ugwp_solvers.F90', + 'FV3/ccpp/physics/physics/cires_ugwp_utils.F90', + 'FV3/ccpp/physics/physics/cires_orowam2017.f', + 'FV3/ccpp/physics/physics/cires_vert_lsatdis.F90', + 'FV3/ccpp/physics/physics/cires_vert_orodis.F90', + 'FV3/ccpp/physics/physics/cires_vert_wmsdis.F90', + 'FV3/ccpp/physics/physics/namelist_soilveg.f', + 'FV3/ccpp/physics/physics/mfpblt.f', + 'FV3/ccpp/physics/physics/mfscu.f', + 'FV3/ccpp/physics/physics/noahmp_tables.f90', + 'FV3/ccpp/physics/physics/num_parthds.F', + 'FV3/ccpp/physics/physics/ozne_def.f', + 'FV3/ccpp/physics/physics/ozinterp.f90', + 'FV3/ccpp/physics/physics/physcons.F90', + 'FV3/ccpp/physics/physics/physparam.f', + 'FV3/ccpp/physics/physics/radcons.f90', + 'FV3/ccpp/physics/physics/radiation_aerosols.f', + 'FV3/ccpp/physics/physics/radiation_astronomy.f', + 'FV3/ccpp/physics/physics/radiation_clouds.f', + 'FV3/ccpp/physics/physics/radiation_gases.f', + 'FV3/ccpp/physics/physics/radiation_surface.f', + 'FV3/ccpp/physics/physics/radlw_datatb.f', + 'FV3/ccpp/physics/physics/radlw_param.f', + 'FV3/ccpp/physics/physics/radsw_datatb.f', + 'FV3/ccpp/physics/physics/radsw_param.f', + 'FV3/ccpp/physics/physics/samfaerosols.F', + 'FV3/ccpp/physics/physics/sfcsub.F', + 'FV3/ccpp/physics/physics/sflx.f', + 'FV3/ccpp/physics/physics/set_soilveg.f', + 'FV3/ccpp/physics/physics/surface_perturbation.F90', + 'FV3/ccpp/physics/physics/cu_gf_deep.F90', + 'FV3/ccpp/physics/physics/cu_gf_sh.F90', + 'FV3/ccpp/physics/physics/tridi.f', + 'FV3/ccpp/physics/physics/wv_saturation.F', + 'FV3/ccpp/physics/physics/module_sf_ruclsm.F90', + 'FV3/ccpp/physics/physics/namelist_soilveg_ruc.F90', + 'FV3/ccpp/physics/physics/set_soilveg_ruc.F90', + 'FV3/ccpp/physics/physics/module_soil_pre.F90', + # derived data type definitions + 'FV3/gfsphysics/GFS_layer/GFS_typedefs.F90', + 'FV3/gfsphysics/CCPP_layer/CCPP_typedefs.F90', + ] + +# Add all physics scheme files relative to basedir +SCHEME_FILES = { + # Relative path to source (from where ccpp_prebuild.py is called) : [ list of physics sets in which scheme may be called ]; + # current restrictions are that each scheme can only belong to one physics set, and all schemes within one group in the + # suite definition file have to belong to the same physics set + 'FV3/ccpp/physics/physics/GFS_DCNV_generic.F90' : [ 'slow_physics' ], + 'FV3/ccpp/physics/physics/GFS_GWD_generic.F90' : [ 'slow_physics' ], + 'FV3/ccpp/physics/physics/GFS_MP_generic.F90' : [ 'slow_physics' ], + 'FV3/ccpp/physics/physics/GFS_PBL_generic.F90' : [ 'slow_physics' ], + 'FV3/ccpp/physics/physics/GFS_SCNV_generic.F90' : [ 'slow_physics' ], + 'FV3/ccpp/physics/physics/GFS_debug.F90' : [ 'slow_physics' ], + 'FV3/ccpp/physics/physics/GFS_phys_time_vary.fv3.F90' : [ 'slow_physics' ], + 'FV3/ccpp/physics/physics/GFS_rad_time_vary.fv3.F90' : [ 'slow_physics' ], + 'FV3/ccpp/physics/physics/GFS_rrtmg_post.F90' : [ 'slow_physics' ], + 'FV3/ccpp/physics/physics/GFS_rrtmg_pre.F90' : [ 'slow_physics' ], + 'FV3/ccpp/physics/physics/GFS_rrtmg_setup.F90' : [ 'slow_physics' ], + 'FV3/ccpp/physics/physics/GFS_stochastics.F90' : [ 'slow_physics' ], + 'FV3/ccpp/physics/physics/GFS_suite_interstitial.F90' : [ 'slow_physics' ], + 'FV3/ccpp/physics/physics/GFS_surface_generic.F90' : [ 'slow_physics' ], + 'FV3/ccpp/physics/physics/GFS_surface_composites.F90' : [ 'slow_physics' ], + 'FV3/ccpp/physics/physics/GFS_surface_loop_control.F90' : [ 'slow_physics' ], + 'FV3/ccpp/physics/physics/GFS_time_vary_pre.fv3.F90' : [ 'slow_physics' ], + 'FV3/ccpp/physics/physics/cires_ugwp.F90' : [ 'slow_physics' ], + 'FV3/ccpp/physics/physics/cires_ugwp_post.F90' : [ 'slow_physics' ], + 'FV3/ccpp/physics/physics/cnvc90.f' : [ 'slow_physics' ], + 'FV3/ccpp/physics/physics/cs_conv.F90' : [ 'slow_physics' ], + 'FV3/ccpp/physics/physics/cs_conv_aw_adj.F90' : [ 'slow_physics' ], + 'FV3/ccpp/physics/physics/cu_ntiedtke_pre.F90' : [ 'slow_physics' ], + 'FV3/ccpp/physics/physics/cu_ntiedtke.F90' : [ 'slow_physics' ], + 'FV3/ccpp/physics/physics/cu_ntiedtke_post.F90' : [ 'slow_physics' ], + 'FV3/ccpp/physics/physics/dcyc2.f' : [ 'slow_physics' ], + 'FV3/ccpp/physics/physics/drag_suite.F90' : [ 'slow_physics' ], + 'FV3/ccpp/physics/physics/gcm_shoc.F90' : [ 'slow_physics' ], + 'FV3/ccpp/physics/physics/get_prs_fv3.F90' : [ 'slow_physics' ], + 'FV3/ccpp/physics/physics/gfdl_cloud_microphys.F90' : [ 'slow_physics' ], + 'FV3/ccpp/physics/physics/gfdl_fv_sat_adj.F90' : [ 'fast_physics' ], + 'FV3/ccpp/physics/physics/gscond.f' : [ 'slow_physics' ], + 'FV3/ccpp/physics/physics/gwdc.f' : [ 'slow_physics' ], + 'FV3/ccpp/physics/physics/gwdps.f' : [ 'slow_physics' ], + 'FV3/ccpp/physics/physics/h2ophys.f' : [ 'slow_physics' ], + 'FV3/ccpp/physics/physics/samfdeepcnv.f' : [ 'slow_physics' ], + 'FV3/ccpp/physics/physics/samfshalcnv.f' : [ 'slow_physics' ], + 'FV3/ccpp/physics/physics/maximum_hourly_diagnostics.F90' : [ 'slow_physics' ], + 'FV3/ccpp/physics/physics/m_micro.F90' : [ 'slow_physics' ], + 'FV3/ccpp/physics/physics/m_micro_interstitial.F90' : [ 'slow_physics' ], + 'FV3/ccpp/physics/physics/cu_gf_driver_pre.F90' : [ 'slow_physics' ], + 'FV3/ccpp/physics/physics/cu_gf_driver.F90' : [ 'slow_physics' ], + 'FV3/ccpp/physics/physics/cu_gf_driver_post.F90' : [ 'slow_physics' ], + 'FV3/ccpp/physics/physics/moninedmf.f' : [ 'slow_physics' ], + 'FV3/ccpp/physics/physics/moninshoc.f' : [ 'slow_physics' ], + 'FV3/ccpp/physics/physics/satmedmfvdif.F' : [ 'slow_physics' ], + 'FV3/ccpp/physics/physics/shinhongvdif.F90' : [ 'slow_physics' ], + 'FV3/ccpp/physics/physics/ysuvdif.F90' : [ 'slow_physics' ], + 'FV3/ccpp/physics/physics/module_MYNNPBL_wrapper.F90' : [ 'slow_physics' ], + 'FV3/ccpp/physics/physics/module_MYNNSFC_wrapper.F90' : [ 'slow_physics' ], + 'FV3/ccpp/physics/physics/module_MYNNrad_pre.F90' : [ 'slow_physics' ], + 'FV3/ccpp/physics/physics/module_MYNNrad_post.F90' : [ 'slow_physics' ], + 'FV3/ccpp/physics/physics/module_MYJSFC_wrapper.F90' : [ 'slow_physics' ], + 'FV3/ccpp/physics/physics/module_MYJPBL_wrapper.F90' : [ 'slow_physics' ], + 'FV3/ccpp/physics/physics/mp_thompson_pre.F90' : [ 'slow_physics' ], + 'FV3/ccpp/physics/physics/mp_thompson.F90' : [ 'slow_physics' ], + 'FV3/ccpp/physics/physics/mp_thompson_post.F90' : [ 'slow_physics' ], + 'FV3/ccpp/physics/physics/ozphys.f' : [ 'slow_physics' ], + 'FV3/ccpp/physics/physics/ozphys_2015.f' : [ 'slow_physics' ], + 'FV3/ccpp/physics/physics/precpd.f' : [ 'slow_physics' ], + 'FV3/ccpp/physics/physics/radlw_main.f' : [ 'slow_physics' ], + 'FV3/ccpp/physics/physics/radsw_main.f' : [ 'slow_physics' ], + 'FV3/ccpp/physics/physics/rayleigh_damp.f' : [ 'slow_physics' ], + 'FV3/ccpp/physics/physics/rrtmg_lw_post.F90' : [ 'slow_physics' ], + 'FV3/ccpp/physics/physics/rrtmg_lw_pre.F90' : [ 'slow_physics' ], + 'FV3/ccpp/physics/physics/rrtmg_sw_post.F90' : [ 'slow_physics' ], + 'FV3/ccpp/physics/physics/rrtmg_sw_pre.F90' : [ 'slow_physics' ], + 'FV3/ccpp/physics/physics/sfc_diag.f' : [ 'slow_physics' ], + 'FV3/ccpp/physics/physics/sfc_diag_post.F90' : [ 'slow_physics' ], + 'FV3/ccpp/physics/physics/sfc_drv_ruc.F90' : [ 'slow_physics' ], + 'FV3/ccpp/physics/physics/lsm_ruc_sfc_sice_interstitial.F90' : [ 'slow_physics' ], + 'FV3/ccpp/physics/physics/sfc_cice.f' : [ 'slow_physics' ], + 'FV3/ccpp/physics/physics/sfc_diff.f' : [ 'slow_physics' ], + 'FV3/ccpp/physics/physics/sfc_drv.f' : [ 'slow_physics' ], + 'FV3/ccpp/physics/physics/sfc_noahmp_pre.F90' : [ 'slow_physics' ], + 'FV3/ccpp/physics/physics/sfc_noahmp_drv.f' : [ 'slow_physics' ], + 'FV3/ccpp/physics/physics/sfc_nst.f' : [ 'slow_physics' ], + 'FV3/ccpp/physics/physics/sfc_ocean.F' : [ 'slow_physics' ], + 'FV3/ccpp/physics/physics/sfc_sice.f' : [ 'slow_physics' ], + # for testing the and sections + 'FV3/ccpp/physics/physics/GFS_suite_init_finalize_test.F90' : [ 'slow_physics' ], + } + +# Auto-generated makefile/cmakefile snippets that contain all schemes +SCHEMES_MAKEFILE = '{build_dir}/ccpp/physics/CCPP_SCHEMES.mk' +SCHEMES_CMAKEFILE = '{build_dir}/ccpp/physics/CCPP_SCHEMES.cmake' +SCHEMES_SOURCEFILE = '{build_dir}/ccpp/physics/CCPP_SCHEMES.sh' + +# CCPP host cap in which to insert the ccpp_field_add statements; +# determines the directory to place ccpp_{modules,fields}.inc +TARGET_FILES = [ + 'FV3/atmos_cubed_sphere/driver/fvGFS/atmosphere.F90', + 'FV3/ccpp/driver/CCPP_Driver.F90', + ] + +# Auto-generated makefile/cmakefile snippets that contain all caps +CAPS_MAKEFILE = '{build_dir}/ccpp/physics/CCPP_CAPS.mk' +CAPS_CMAKEFILE = '{build_dir}/ccpp/physics/CCPP_CAPS.cmake' +CAPS_SOURCEFILE = '{build_dir}/ccpp/physics/CCPP_CAPS.sh' + +# Directory where to put all auto-generated physics caps +CAPS_DIR = '{build_dir}/ccpp/physics' + +# Directory where the suite definition files are stored +SUITES_DIR = 'FV3/ccpp/suites' + +# Optional arguments - only required for schemes that use +# optional arguments. ccpp_prebuild.py will throw an exception +# if it encounters a scheme subroutine with optional arguments +# if no entry is made here. Possible values are: 'all', 'none', +# or a list of standard_names: [ 'var1', 'var3' ]. +OPTIONAL_ARGUMENTS = { + 'rrtmg_sw' : { + 'rrtmg_sw_run' : [ + 'tendency_of_air_temperature_due_to_shortwave_heating_assuming_clear_sky_on_radiation_time_step', + 'components_of_surface_downward_shortwave_fluxes', + 'cloud_liquid_water_path', + 'mean_effective_radius_for_liquid_cloud', + 'cloud_ice_water_path', + 'mean_effective_radius_for_ice_cloud', + 'cloud_rain_water_path', + 'mean_effective_radius_for_rain_drop', + 'cloud_snow_water_path', + 'mean_effective_radius_for_snow_flake', + ], + }, + 'rrtmg_lw' : { + 'rrtmg_lw_run' : [ + 'tendency_of_air_temperature_due_to_longwave_heating_assuming_clear_sky_on_radiation_time_step', + 'cloud_liquid_water_path', + 'mean_effective_radius_for_liquid_cloud', + 'cloud_ice_water_path', + 'mean_effective_radius_for_ice_cloud', + 'cloud_rain_water_path', + 'mean_effective_radius_for_rain_drop', + 'cloud_snow_water_path', + 'mean_effective_radius_for_snow_flake', + ], + }, + 'mp_thompson' : { + 'mp_thompson_init' : [ + 'water_friendly_aerosol_number_concentration', + 'ice_friendly_aerosol_number_concentration', + 'tendency_of_water_friendly_aerosols_at_surface', + 'tendency_of_ice_friendly_aerosols_at_surface', + ], + 'mp_thompson_run' : [ + 'cloud_droplet_number_concentration_updated_by_physics', + 'water_friendly_aerosol_number_concentration_updated_by_physics', + 'ice_friendly_aerosol_number_concentration_updated_by_physics', + 'tendency_of_water_friendly_aerosols_at_surface', + 'tendency_of_ice_friendly_aerosols_at_surface', + 'mean_effective_radius_for_liquid_cloud', + 'mean_effective_radius_for_ice_cloud', + 'mean_effective_radius_for_snow_flake', + ], + }, + 'mp_thompson_pre' : { + 'mp_thompson_pre_run' : [ + 'cloud_droplet_number_concentration_updated_by_physics', + 'water_friendly_aerosol_number_concentration_updated_by_physics', + 'ice_friendly_aerosol_number_concentration_updated_by_physics', + 'tendency_of_water_friendly_aerosols_at_surface', + 'tendency_of_ice_friendly_aerosols_at_surface', + ], + }, + #'subroutine_name_1' : 'all', + #'subroutine_name_2' : 'none', + #'subroutine_name_2' : [ 'var1', 'var3'], + } + +# Names of Fortran include files in the host model cap (do not change); +# both files will be written to the directory of each target file, only +# used by the dynamic builds +MODULE_INCLUDE_FILE = 'ccpp_modules_{set}.inc' +FIELDS_INCLUDE_FILE = 'ccpp_fields_{set}.inc' + +# Directory where to write static API to +STATIC_API_DIR = '{build_dir}/ccpp/physics' +STATIC_API_SRCFILE = '{build_dir}/ccpp/physics/CCPP_STATIC_API.sh' + +# Directory for writing HTML pages generated from metadata files +METADATA_HTML_OUTPUT_DIR = '{build_dir}/ccpp/physics/physics/docs' + +# HTML document containing the model-defined CCPP variables +HTML_VARTABLE_FILE = '{build_dir}/ccpp/physics/CCPP_VARIABLES_FV3.html' + +# LaTeX document containing the provided vs requested CCPP variables +LATEX_VARTABLE_FILE = '{build_dir}/ccpp/framework/doc/DevelopersGuide/CCPP_VARIABLES_FV3.tex' + + +############################################################################### +# Template code to generate include files # +############################################################################### + +# Name of the CCPP data structure in the host model cap; +# in the case of FV3, this is a 2-dimensional array with +# the number of blocks as the first and the number of +# OpenMP threads as the second dimension; nb is the loop +# index for the current block, nt for the current thread. +# Internally, the model uses an associate construct to +# reference cdata(nb,nt) with cdata (recommended). +CCPP_DATA_STRUCTURE = 'cdata' diff --git a/CCPP_layer/CCPP_driver.F90 b/ccpp/driver/CCPP_driver.F90 similarity index 100% rename from CCPP_layer/CCPP_driver.F90 rename to ccpp/driver/CCPP_driver.F90 diff --git a/CCPP_layer/makefile b/ccpp/driver/makefile similarity index 82% rename from CCPP_layer/makefile rename to ccpp/driver/makefile index d84e4e01c..ccbae2c50 100644 --- a/CCPP_layer/makefile +++ b/ccpp/driver/makefile @@ -4,11 +4,11 @@ inside_nems := $(wildcard ../../../conf/configure.nems) ifneq ($(strip $(inside_nems)),) include ../../../conf/configure.nems else - exist_configure_fv3 := $(wildcard ../conf/configure.fv3) + exist_configure_fv3 := $(wildcard ../../conf/configure.fv3) ifneq ($(strip $(exist_configure_fv3)),) - include ../conf/configure.fv3 + include ../../conf/configure.fv3 else - $(error "../conf/configure.fv3 file is missing. Run ./configure") + $(error "../../conf/configure.fv3 file is missing. Run ./configure") endif $(info ) $(info Build CCPP layer ...) @@ -20,7 +20,7 @@ CCPP_DRIVER = CCPP_driver.F90 LIBRARY = libccppdriver.a # Needed for ccpp_data.mod, fv_arrays_mod.mod, ... -FFLAGS += -I$(FMS_DIR) -I../gfsphysics -I../atmos_cubed_sphere +FFLAGS += -I$(FMS_DIR) -I../../gfsphysics -I../../atmos_cubed_sphere #CPPDEFS += -DNEW_TAUCTMAX -DSMALL_PE -DNEMS_GSM -DINTERNAL_FILE_NML @@ -61,8 +61,8 @@ clean: @echo $(RM) -f $(LIBRARY) *__genmod.f90 *.tmp.f90 *.o */*.o *.mod *.i90 *.lst *.i depend -MKDEPENDS = ../mkDepends.pl -include ../conf/make.rules +MKDEPENDS = ../../mkDepends.pl +include ../../conf/make.rules include ./depend diff --git a/ccpp/framework b/ccpp/framework new file mode 160000 index 000000000..28fdedec6 --- /dev/null +++ b/ccpp/framework @@ -0,0 +1 @@ +Subproject commit 28fdedec637b3a11a90aa3d816aff9dd56a9dc5e diff --git a/ccpp/physics b/ccpp/physics new file mode 160000 index 000000000..d4b1cd020 --- /dev/null +++ b/ccpp/physics @@ -0,0 +1 @@ +Subproject commit d4b1cd020f8347147b86d3a18b56c03cb5c57d67 diff --git a/ccpp/set_compilers.sh b/ccpp/set_compilers.sh new file mode 100755 index 000000000..0f591d6c0 --- /dev/null +++ b/ccpp/set_compilers.sh @@ -0,0 +1,109 @@ +#!/bin/bash + +# The list of compilers here must cover all system listed in build_ccpp.sh -> VALID_MACHINES +case "$MACHINE_ID" in + wcoss_cray) + export LD=ftn + export CC=cc + export CXX=CC + export FC=ftn + export F77=ftn + export F90=ftn + ;; + wcoss_dell_p3) + export CC=mpiicc + export CXX=mpiicpc + export FC=mpiifort + export F77=mpiifort + export F90=mpiifort + ;; + gaea.intel) + export LD=ftn + export CC=cc + export CXX=CC + export FC=ftn + export F77=ftn + export F90=ftn + ;; + jet.intel) + export CC=mpiicc + export CXX=mpiicpc + export FC=mpiifort + export F77=mpiifort + export F90=mpiifort + ;; + hera.intel) + export CC=mpiicc + export CXX=mpiicpc + export FC=mpiifort + export F77=mpiifort + export F90=mpiifort + ;; + cheyenne.intel) + export CC=mpicc + export CXX=mpicxx + export FC=mpif90 + export F77=mpif77 + export F90=mpif90 + ;; + cheyenne.intel-impi) + export CC=mpiicc + export CXX=mpiicpc + export FC=mpiifort + export F77=mpiifort + export F90=mpiifort + ;; + cheyenne.gnu) + export CC=mpicc + export CXX=mpicxx + export FC=mpif90 + export F77=mpif77 + export F90=mpif90 + ;; + cheyenne.pgi) + export CPP="mpicc -E" + export CC=mpicc + export CXX=mpicxx + export FC=mpif90 + export F77=mpif77 + export F90=mpif90 + ;; + endeavor.intel) + export CC=mpiicc + export CXX=mpiicpc + export FC=mpiifort + export F77=mpiifort + export F90=mpiifort + ;; + stampede.intel) + export CC=mpicc + export CXX=mpicxx + export FC=mpif90 + export F77=mpif77 + export F90=mpif90 + ;; + supermuc_phase2.intel) + export CC=mpiicc + export CXX=mpiicpc + export FC=mpiifort + export F77=mpiifort + export F90=mpiifort + ;; + macosx.gnu) + # set in generic modulefile + ;; + linux.intel) + # set in generic modulefile + ;; + linux.gnu) + # set in generic modulefile + ;; + linux.pgi) + # set in generic modulefile + ;; + *) + echo "ERROR: MACHINE_ID ${MACHINE_ID} not configured in set_compilers.sh" + exit 1 +esac + +echo "Compilers set for ${MACHINE_ID}." diff --git a/ccpp/suites/suite.xsd b/ccpp/suites/suite.xsd new file mode 100644 index 000000000..df7e9c6c7 --- /dev/null +++ b/ccpp/suites/suite.xsd @@ -0,0 +1,49 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/ccpp/suites/suite_FV3_CPT_v0.xml b/ccpp/suites/suite_FV3_CPT_v0.xml new file mode 100644 index 000000000..618c16106 --- /dev/null +++ b/ccpp/suites/suite_FV3_CPT_v0.xml @@ -0,0 +1,99 @@ + + + + + + + fv_sat_adj + + + + + GFS_time_vary_pre + GFS_rrtmg_setup + GFS_rad_time_vary + GFS_phys_time_vary + + + + + GFS_suite_interstitial_rad_reset + GFS_rrtmg_pre + rrtmg_sw_pre + rrtmg_sw + rrtmg_sw_post + rrtmg_lw_pre + rrtmg_lw + rrtmg_lw_post + GFS_rrtmg_post + + + + + GFS_suite_interstitial_phys_reset + GFS_suite_stateout_reset + get_prs_fv3 + GFS_suite_interstitial_1 + GFS_surface_generic_pre + GFS_surface_composites_pre + dcyc2t3 + GFS_surface_composites_inter + GFS_suite_interstitial_2 + + + + sfc_diff + GFS_surface_loop_control_part1 + sfc_nst_pre + sfc_nst + sfc_nst_post + lsm_noah + sfc_sice + GFS_surface_loop_control_part2 + + + + GFS_surface_composites_post + dcyc2t3_post + sfc_diag + sfc_diag_post + GFS_surface_generic_post + GFS_PBL_generic_pre + hedmf + GFS_PBL_generic_post + GFS_GWD_generic_pre + cires_ugwp + cires_ugwp_post + rayleigh_damp + GFS_suite_stateout_update + ozphys_2015 + h2ophys + GFS_DCNV_generic_pre + get_phi_fv3 + GFS_suite_interstitial_3 + cs_conv_pre + cs_conv + cs_conv_post + GFS_DCNV_generic_post + GFS_SCNV_generic_pre + samfshalcnv + samfshalcnv_post + GFS_SCNV_generic_post + GFS_suite_interstitial_4 + cnvc90 + GFS_MP_generic_pre + m_micro_pre + m_micro + m_micro_post + cs_conv_aw_adj + GFS_MP_generic_post + maximum_hourly_diagnostics + + + + + GFS_stochastics + + + + diff --git a/ccpp/suites/suite_FV3_GFS_2017.xml b/ccpp/suites/suite_FV3_GFS_2017.xml new file mode 100644 index 000000000..d42d5fb8a --- /dev/null +++ b/ccpp/suites/suite_FV3_GFS_2017.xml @@ -0,0 +1,89 @@ + + + + + + + GFS_time_vary_pre + GFS_rrtmg_setup + GFS_rad_time_vary + GFS_phys_time_vary + + + + + GFS_suite_interstitial_rad_reset + GFS_rrtmg_pre + rrtmg_sw_pre + rrtmg_sw + rrtmg_sw_post + rrtmg_lw_pre + rrtmg_lw + rrtmg_lw_post + GFS_rrtmg_post + + + + + GFS_suite_interstitial_phys_reset + GFS_suite_stateout_reset + get_prs_fv3 + GFS_suite_interstitial_1 + GFS_surface_generic_pre + GFS_surface_composites_pre + dcyc2t3 + GFS_surface_composites_inter + GFS_suite_interstitial_2 + + + + sfc_diff + GFS_surface_loop_control_part1 + sfc_nst_pre + sfc_nst + sfc_nst_post + lsm_noah + sfc_sice + GFS_surface_loop_control_part2 + + + + GFS_surface_composites_post + dcyc2t3_post + sfc_diag + sfc_diag_post + GFS_surface_generic_post + GFS_PBL_generic_pre + hedmf + GFS_PBL_generic_post + GFS_GWD_generic_pre + cires_ugwp + cires_ugwp_post + rayleigh_damp + GFS_suite_stateout_update + ozphys + GFS_DCNV_generic_pre + get_phi_fv3 + GFS_suite_interstitial_3 + samfdeepcnv + GFS_DCNV_generic_post + GFS_SCNV_generic_pre + samfshalcnv + samfshalcnv_post + GFS_SCNV_generic_post + GFS_suite_interstitial_4 + cnvc90 + GFS_MP_generic_pre + zhaocarr_gscond + zhaocarr_precpd + GFS_MP_generic_post + maximum_hourly_diagnostics + + + + + GFS_stochastics + + + + diff --git a/ccpp/suites/suite_FV3_GFS_2017_csawmg.xml b/ccpp/suites/suite_FV3_GFS_2017_csawmg.xml new file mode 100644 index 000000000..587dd3c49 --- /dev/null +++ b/ccpp/suites/suite_FV3_GFS_2017_csawmg.xml @@ -0,0 +1,94 @@ + + + + + + + GFS_time_vary_pre + GFS_rrtmg_setup + GFS_rad_time_vary + GFS_phys_time_vary + + + + + GFS_suite_interstitial_rad_reset + GFS_rrtmg_pre + rrtmg_sw_pre + rrtmg_sw + rrtmg_sw_post + rrtmg_lw_pre + rrtmg_lw + rrtmg_lw_post + GFS_rrtmg_post + + + + + GFS_suite_interstitial_phys_reset + GFS_suite_stateout_reset + get_prs_fv3 + GFS_suite_interstitial_1 + GFS_surface_generic_pre + GFS_surface_composites_pre + dcyc2t3 + GFS_surface_composites_inter + GFS_suite_interstitial_2 + + + + sfc_diff + GFS_surface_loop_control_part1 + sfc_nst_pre + sfc_nst + sfc_nst_post + lsm_noah + sfc_sice + GFS_surface_loop_control_part2 + + + + GFS_surface_composites_post + dcyc2t3_post + sfc_diag + sfc_diag_post + GFS_surface_generic_post + GFS_PBL_generic_pre + hedmf + GFS_PBL_generic_post + GFS_GWD_generic_pre + cires_ugwp + cires_ugwp_post + rayleigh_damp + GFS_suite_stateout_update + ozphys_2015 + h2ophys + GFS_DCNV_generic_pre + get_phi_fv3 + GFS_suite_interstitial_3 + cs_conv_pre + cs_conv + cs_conv_post + GFS_DCNV_generic_post + GFS_SCNV_generic_pre + samfshalcnv + samfshalcnv_post + GFS_SCNV_generic_post + GFS_suite_interstitial_4 + cnvc90 + GFS_MP_generic_pre + m_micro_pre + m_micro + m_micro_post + cs_conv_aw_adj + GFS_MP_generic_post + maximum_hourly_diagnostics + + + + + GFS_stochastics + + + + diff --git a/ccpp/suites/suite_FV3_GFS_2017_csawmgshoc.xml b/ccpp/suites/suite_FV3_GFS_2017_csawmgshoc.xml new file mode 100644 index 000000000..0e993dbda --- /dev/null +++ b/ccpp/suites/suite_FV3_GFS_2017_csawmgshoc.xml @@ -0,0 +1,93 @@ + + + + + + + GFS_time_vary_pre + GFS_rrtmg_setup + GFS_rad_time_vary + GFS_phys_time_vary + + + + + GFS_suite_interstitial_rad_reset + GFS_rrtmg_pre + rrtmg_sw_pre + rrtmg_sw + rrtmg_sw_post + rrtmg_lw_pre + rrtmg_lw + rrtmg_lw_post + GFS_rrtmg_post + + + + + GFS_suite_interstitial_phys_reset + GFS_suite_stateout_reset + get_prs_fv3 + GFS_suite_interstitial_1 + GFS_surface_generic_pre + GFS_surface_composites_pre + dcyc2t3 + GFS_surface_composites_inter + GFS_suite_interstitial_2 + + + + sfc_diff + GFS_surface_loop_control_part1 + sfc_nst_pre + sfc_nst + sfc_nst_post + lsm_noah + sfc_sice + GFS_surface_loop_control_part2 + + + + GFS_surface_composites_post + dcyc2t3_post + sfc_diag + sfc_diag_post + GFS_surface_generic_post + GFS_PBL_generic_pre + moninshoc + GFS_PBL_generic_post + GFS_GWD_generic_pre + cires_ugwp + cires_ugwp_post + rayleigh_damp + GFS_suite_stateout_update + ozphys_2015 + h2ophys + GFS_DCNV_generic_pre + get_phi_fv3 + GFS_suite_interstitial_3 + shoc + cs_conv_pre + cs_conv + cs_conv_post + GFS_DCNV_generic_post + GFS_SCNV_generic_pre + GFS_SCNV_generic_post + GFS_suite_interstitial_4 + cnvc90 + GFS_MP_generic_pre + m_micro_pre + m_micro + m_micro_post + cs_conv_aw_adj + GFS_MP_generic_post + maximum_hourly_diagnostics + + + + + GFS_stochastics + + + + diff --git a/ccpp/suites/suite_FV3_GFS_2017_gfdlmp.xml b/ccpp/suites/suite_FV3_GFS_2017_gfdlmp.xml new file mode 100644 index 000000000..0fe2ee81a --- /dev/null +++ b/ccpp/suites/suite_FV3_GFS_2017_gfdlmp.xml @@ -0,0 +1,93 @@ + + + + + + + fv_sat_adj + + + + + GFS_time_vary_pre + GFS_rrtmg_setup + GFS_rad_time_vary + GFS_phys_time_vary + + + + + GFS_suite_interstitial_rad_reset + GFS_rrtmg_pre + rrtmg_sw_pre + rrtmg_sw + rrtmg_sw_post + rrtmg_lw_pre + rrtmg_lw + rrtmg_lw_post + GFS_rrtmg_post + + + + + GFS_suite_interstitial_phys_reset + GFS_suite_stateout_reset + get_prs_fv3 + GFS_suite_interstitial_1 + GFS_surface_generic_pre + GFS_surface_composites_pre + dcyc2t3 + GFS_surface_composites_inter + GFS_suite_interstitial_2 + + + + sfc_diff + GFS_surface_loop_control_part1 + sfc_nst_pre + sfc_nst + sfc_nst_post + lsm_noah + sfc_sice + GFS_surface_loop_control_part2 + + + + GFS_surface_composites_post + dcyc2t3_post + sfc_diag + sfc_diag_post + GFS_surface_generic_post + GFS_PBL_generic_pre + hedmf + GFS_PBL_generic_post + GFS_GWD_generic_pre + cires_ugwp + cires_ugwp_post + rayleigh_damp + GFS_suite_stateout_update + ozphys + GFS_DCNV_generic_pre + get_phi_fv3 + GFS_suite_interstitial_3 + samfdeepcnv + GFS_DCNV_generic_post + GFS_SCNV_generic_pre + samfshalcnv + samfshalcnv_post + GFS_SCNV_generic_post + GFS_suite_interstitial_4 + cnvc90 + GFS_MP_generic_pre + gfdl_cloud_microphys + GFS_MP_generic_post + maximum_hourly_diagnostics + + + + + GFS_stochastics + + + + diff --git a/ccpp/suites/suite_FV3_GFS_2017_gfdlmp_noahmp.xml b/ccpp/suites/suite_FV3_GFS_2017_gfdlmp_noahmp.xml new file mode 100644 index 000000000..4e27dbc21 --- /dev/null +++ b/ccpp/suites/suite_FV3_GFS_2017_gfdlmp_noahmp.xml @@ -0,0 +1,94 @@ + + + + + + + fv_sat_adj + + + + + GFS_time_vary_pre + GFS_rrtmg_setup + GFS_rad_time_vary + GFS_phys_time_vary + + + + + GFS_suite_interstitial_rad_reset + GFS_rrtmg_pre + rrtmg_sw_pre + rrtmg_sw + rrtmg_sw_post + rrtmg_lw_pre + rrtmg_lw + rrtmg_lw_post + GFS_rrtmg_post + + + + + GFS_suite_interstitial_phys_reset + GFS_suite_stateout_reset + get_prs_fv3 + GFS_suite_interstitial_1 + GFS_surface_generic_pre + GFS_surface_composites_pre + dcyc2t3 + GFS_surface_composites_inter + GFS_suite_interstitial_2 + + + + sfc_diff + GFS_surface_loop_control_part1 + sfc_nst_pre + sfc_nst + sfc_nst_post + sfc_noahmp_pre + noahmpdrv + sfc_sice + GFS_surface_loop_control_part2 + + + + GFS_surface_composites_post + dcyc2t3_post + sfc_diag + sfc_diag_post + GFS_surface_generic_post + GFS_PBL_generic_pre + hedmf + GFS_PBL_generic_post + GFS_GWD_generic_pre + cires_ugwp + cires_ugwp_post + rayleigh_damp + GFS_suite_stateout_update + ozphys + GFS_DCNV_generic_pre + get_phi_fv3 + GFS_suite_interstitial_3 + samfdeepcnv + GFS_DCNV_generic_post + GFS_SCNV_generic_pre + samfshalcnv + samfshalcnv_post + GFS_SCNV_generic_post + GFS_suite_interstitial_4 + cnvc90 + GFS_MP_generic_pre + gfdl_cloud_microphys + GFS_MP_generic_post + maximum_hourly_diagnostics + + + + + GFS_stochastics + + + + diff --git a/ccpp/suites/suite_FV3_GFS_2017_gfdlmp_regional.xml b/ccpp/suites/suite_FV3_GFS_2017_gfdlmp_regional.xml new file mode 100644 index 000000000..fba2dc00e --- /dev/null +++ b/ccpp/suites/suite_FV3_GFS_2017_gfdlmp_regional.xml @@ -0,0 +1,88 @@ + + + + + + + GFS_time_vary_pre + GFS_rrtmg_setup + GFS_rad_time_vary + GFS_phys_time_vary + + + + + GFS_suite_interstitial_rad_reset + GFS_rrtmg_pre + rrtmg_sw_pre + rrtmg_sw + rrtmg_sw_post + rrtmg_lw_pre + rrtmg_lw + rrtmg_lw_post + GFS_rrtmg_post + + + + + GFS_suite_interstitial_phys_reset + GFS_suite_stateout_reset + get_prs_fv3 + GFS_suite_interstitial_1 + GFS_surface_generic_pre + GFS_surface_composites_pre + dcyc2t3 + GFS_surface_composites_inter + GFS_suite_interstitial_2 + + + + sfc_diff + GFS_surface_loop_control_part1 + sfc_nst_pre + sfc_nst + sfc_nst_post + lsm_noah + sfc_sice + GFS_surface_loop_control_part2 + + + + GFS_surface_composites_post + dcyc2t3_post + sfc_diag + sfc_diag_post + GFS_surface_generic_post + GFS_PBL_generic_pre + hedmf + GFS_PBL_generic_post + GFS_GWD_generic_pre + cires_ugwp + cires_ugwp_post + rayleigh_damp + GFS_suite_stateout_update + ozphys + GFS_DCNV_generic_pre + get_phi_fv3 + GFS_suite_interstitial_3 + samfdeepcnv + GFS_DCNV_generic_post + GFS_SCNV_generic_pre + samfshalcnv + samfshalcnv_post + GFS_SCNV_generic_post + GFS_suite_interstitial_4 + cnvc90 + GFS_MP_generic_pre + gfdl_cloud_microphys + GFS_MP_generic_post + maximum_hourly_diagnostics + + + + + GFS_stochastics + + + + diff --git a/ccpp/suites/suite_FV3_GFS_2017_gfdlmp_regional_c768.xml b/ccpp/suites/suite_FV3_GFS_2017_gfdlmp_regional_c768.xml new file mode 100644 index 000000000..e1e189170 --- /dev/null +++ b/ccpp/suites/suite_FV3_GFS_2017_gfdlmp_regional_c768.xml @@ -0,0 +1,86 @@ + + + + + + + GFS_time_vary_pre + GFS_rrtmg_setup + GFS_rad_time_vary + GFS_phys_time_vary + + + + + GFS_suite_interstitial_rad_reset + GFS_rrtmg_pre + rrtmg_sw_pre + rrtmg_sw + rrtmg_sw_post + rrtmg_lw_pre + rrtmg_lw + rrtmg_lw_post + GFS_rrtmg_post + + + + + GFS_suite_interstitial_phys_reset + GFS_suite_stateout_reset + get_prs_fv3 + GFS_suite_interstitial_1 + GFS_surface_generic_pre + GFS_surface_composites_pre + dcyc2t3 + GFS_surface_composites_inter + GFS_suite_interstitial_2 + + + + sfc_diff + GFS_surface_loop_control_part1 + sfc_nst_pre + sfc_nst + sfc_nst_post + lsm_noah + sfc_sice + GFS_surface_loop_control_part2 + + + + GFS_surface_composites_post + dcyc2t3_post + sfc_diag + sfc_diag_post + GFS_surface_generic_post + GFS_PBL_generic_pre + hedmf + GFS_PBL_generic_post + GFS_GWD_generic_pre + cires_ugwp + cires_ugwp_post + rayleigh_damp + GFS_suite_stateout_update + ozphys + GFS_DCNV_generic_pre + get_phi_fv3 + GFS_suite_interstitial_3 + samfdeepcnv + GFS_DCNV_generic_post + GFS_SCNV_generic_pre + GFS_SCNV_generic_post + GFS_suite_interstitial_4 + cnvc90 + GFS_MP_generic_pre + gfdl_cloud_microphys + GFS_MP_generic_post + maximum_hourly_diagnostics + + + + + GFS_stochastics + + + + diff --git a/ccpp/suites/suite_FV3_GFS_2017_h2ophys.xml b/ccpp/suites/suite_FV3_GFS_2017_h2ophys.xml new file mode 100644 index 000000000..f32e6a7b7 --- /dev/null +++ b/ccpp/suites/suite_FV3_GFS_2017_h2ophys.xml @@ -0,0 +1,90 @@ + + + + + + + GFS_time_vary_pre + GFS_rrtmg_setup + GFS_rad_time_vary + GFS_phys_time_vary + + + + + GFS_suite_interstitial_rad_reset + GFS_rrtmg_pre + rrtmg_sw_pre + rrtmg_sw + rrtmg_sw_post + rrtmg_lw_pre + rrtmg_lw + rrtmg_lw_post + GFS_rrtmg_post + + + + + GFS_suite_interstitial_phys_reset + GFS_suite_stateout_reset + get_prs_fv3 + GFS_suite_interstitial_1 + GFS_surface_generic_pre + GFS_surface_composites_pre + dcyc2t3 + GFS_surface_composites_inter + GFS_suite_interstitial_2 + + + + sfc_diff + GFS_surface_loop_control_part1 + sfc_nst_pre + sfc_nst + sfc_nst_post + lsm_noah + sfc_sice + GFS_surface_loop_control_part2 + + + + GFS_surface_composites_post + dcyc2t3_post + sfc_diag + sfc_diag_post + GFS_surface_generic_post + GFS_PBL_generic_pre + hedmf + GFS_PBL_generic_post + GFS_GWD_generic_pre + cires_ugwp + cires_ugwp_post + rayleigh_damp + GFS_suite_stateout_update + ozphys + h2ophys + GFS_DCNV_generic_pre + get_phi_fv3 + GFS_suite_interstitial_3 + samfdeepcnv + GFS_DCNV_generic_post + GFS_SCNV_generic_pre + samfshalcnv + samfshalcnv_post + GFS_SCNV_generic_post + GFS_suite_interstitial_4 + cnvc90 + GFS_MP_generic_pre + zhaocarr_gscond + zhaocarr_precpd + GFS_MP_generic_post + maximum_hourly_diagnostics + + + + + GFS_stochastics + + + + diff --git a/ccpp/suites/suite_FV3_GFS_2017_myj.xml b/ccpp/suites/suite_FV3_GFS_2017_myj.xml new file mode 100644 index 000000000..8fc295020 --- /dev/null +++ b/ccpp/suites/suite_FV3_GFS_2017_myj.xml @@ -0,0 +1,94 @@ + + + + + + + fv_sat_adj + + + + + GFS_time_vary_pre + GFS_rrtmg_setup + GFS_rad_time_vary + GFS_phys_time_vary + + + + + GFS_suite_interstitial_rad_reset + GFS_rrtmg_pre + rrtmg_sw_pre + rrtmg_sw + rrtmg_sw_post + rrtmg_lw_pre + rrtmg_lw + rrtmg_lw_post + GFS_rrtmg_post + + + + + GFS_suite_interstitial_phys_reset + GFS_suite_stateout_reset + get_prs_fv3 + GFS_suite_interstitial_1 + GFS_surface_generic_pre + GFS_surface_composites_pre + dcyc2t3 + GFS_surface_composites_inter + GFS_suite_interstitial_2 + + + + myjsfc_wrapper + GFS_surface_loop_control_part1 + sfc_nst_pre + sfc_nst + sfc_nst_post + lsm_noah + sfc_sice + GFS_surface_loop_control_part2 + + + + GFS_surface_composites_post + dcyc2t3_post + sfc_diag + sfc_diag_post + GFS_surface_generic_post + GFS_PBL_generic_pre + myjpbl_wrapper + GFS_PBL_generic_post + GFS_GWD_generic_pre + cires_ugwp + cires_ugwp_post + rayleigh_damp + GFS_suite_stateout_update + ozphys_2015 + h2ophys + GFS_DCNV_generic_pre + get_phi_fv3 + GFS_suite_interstitial_3 + samfdeepcnv + GFS_DCNV_generic_post + GFS_SCNV_generic_pre + samfshalcnv + samfshalcnv_post + GFS_SCNV_generic_post + GFS_suite_interstitial_4 + cnvc90 + GFS_MP_generic_pre + gfdl_cloud_microphys + GFS_MP_generic_post + maximum_hourly_diagnostics + + + + + GFS_stochastics + + + + diff --git a/ccpp/suites/suite_FV3_GFS_2017_ntiedtke.xml b/ccpp/suites/suite_FV3_GFS_2017_ntiedtke.xml new file mode 100644 index 000000000..5f95229b1 --- /dev/null +++ b/ccpp/suites/suite_FV3_GFS_2017_ntiedtke.xml @@ -0,0 +1,93 @@ + + + + + + + fv_sat_adj + + + + + GFS_time_vary_pre + GFS_rrtmg_setup + GFS_rad_time_vary + GFS_phys_time_vary + + + + + GFS_suite_interstitial_rad_reset + GFS_rrtmg_pre + rrtmg_sw_pre + rrtmg_sw + rrtmg_sw_post + rrtmg_lw_pre + rrtmg_lw + rrtmg_lw_post + GFS_rrtmg_post + + + + + GFS_suite_interstitial_phys_reset + GFS_suite_stateout_reset + get_prs_fv3 + GFS_suite_interstitial_1 + GFS_surface_generic_pre + GFS_surface_composites_pre + dcyc2t3 + GFS_surface_composites_inter + GFS_suite_interstitial_2 + + + + sfc_diff + GFS_surface_loop_control_part1 + sfc_nst_pre + sfc_nst + sfc_nst_post + lsm_noah + sfc_sice + GFS_surface_loop_control_part2 + + + + GFS_surface_composites_post + dcyc2t3_post + sfc_diag + sfc_diag_post + GFS_surface_generic_post + GFS_PBL_generic_pre + hedmf + GFS_PBL_generic_post + GFS_GWD_generic_pre + cires_ugwp + cires_ugwp_post + rayleigh_damp + GFS_suite_stateout_update + ozphys + GFS_DCNV_generic_pre + get_phi_fv3 + GFS_suite_interstitial_3 + cu_ntiedtke_pre + cu_ntiedtke + GFS_DCNV_generic_post + GFS_SCNV_generic_pre + GFS_SCNV_generic_post + GFS_suite_interstitial_4 + cnvc90 + GFS_MP_generic_pre + gfdl_cloud_microphys + GFS_MP_generic_post + cu_ntiedtke_post + maximum_hourly_diagnostics + + + + + GFS_stochastics + + + + diff --git a/ccpp/suites/suite_FV3_GFS_2017_ozphys_2015.xml b/ccpp/suites/suite_FV3_GFS_2017_ozphys_2015.xml new file mode 100644 index 000000000..0e2a3d068 --- /dev/null +++ b/ccpp/suites/suite_FV3_GFS_2017_ozphys_2015.xml @@ -0,0 +1,89 @@ + + + + + + + GFS_time_vary_pre + GFS_rrtmg_setup + GFS_rad_time_vary + GFS_phys_time_vary + + + + + GFS_suite_interstitial_rad_reset + GFS_rrtmg_pre + rrtmg_sw_pre + rrtmg_sw + rrtmg_sw_post + rrtmg_lw_pre + rrtmg_lw + rrtmg_lw_post + GFS_rrtmg_post + + + + + GFS_suite_interstitial_phys_reset + GFS_suite_stateout_reset + get_prs_fv3 + GFS_suite_interstitial_1 + GFS_surface_generic_pre + GFS_surface_composites_pre + dcyc2t3 + GFS_surface_composites_inter + GFS_suite_interstitial_2 + + + + sfc_diff + GFS_surface_loop_control_part1 + sfc_nst_pre + sfc_nst + sfc_nst_post + lsm_noah + sfc_sice + GFS_surface_loop_control_part2 + + + + GFS_surface_composites_post + dcyc2t3_post + sfc_diag + sfc_diag_post + GFS_surface_generic_post + GFS_PBL_generic_pre + hedmf + GFS_PBL_generic_post + GFS_GWD_generic_pre + cires_ugwp + cires_ugwp_post + rayleigh_damp + GFS_suite_stateout_update + ozphys_2015 + GFS_DCNV_generic_pre + get_phi_fv3 + GFS_suite_interstitial_3 + samfdeepcnv + GFS_DCNV_generic_post + GFS_SCNV_generic_pre + samfshalcnv + samfshalcnv_post + GFS_SCNV_generic_post + GFS_suite_interstitial_4 + cnvc90 + GFS_MP_generic_pre + zhaocarr_gscond + zhaocarr_precpd + GFS_MP_generic_post + maximum_hourly_diagnostics + + + + + GFS_stochastics + + + + diff --git a/ccpp/suites/suite_FV3_GFS_2017_satmedmf.xml b/ccpp/suites/suite_FV3_GFS_2017_satmedmf.xml new file mode 100644 index 000000000..c598a76e1 --- /dev/null +++ b/ccpp/suites/suite_FV3_GFS_2017_satmedmf.xml @@ -0,0 +1,89 @@ + + + + + + + GFS_time_vary_pre + GFS_rrtmg_setup + GFS_rad_time_vary + GFS_phys_time_vary + + + + + GFS_suite_interstitial_rad_reset + GFS_rrtmg_pre + rrtmg_sw_pre + rrtmg_sw + rrtmg_sw_post + rrtmg_lw_pre + rrtmg_lw + rrtmg_lw_post + GFS_rrtmg_post + + + + + GFS_suite_interstitial_phys_reset + GFS_suite_stateout_reset + get_prs_fv3 + GFS_suite_interstitial_1 + GFS_surface_generic_pre + GFS_surface_composites_pre + dcyc2t3 + GFS_surface_composites_inter + GFS_suite_interstitial_2 + + + + sfc_diff + GFS_surface_loop_control_part1 + sfc_nst_pre + sfc_nst + sfc_nst_post + lsm_noah + sfc_sice + GFS_surface_loop_control_part2 + + + + GFS_surface_composites_post + dcyc2t3_post + sfc_diag + sfc_diag_post + GFS_surface_generic_post + GFS_PBL_generic_pre + satmedmfvdif + GFS_PBL_generic_post + GFS_GWD_generic_pre + cires_ugwp + cires_ugwp_post + rayleigh_damp + GFS_suite_stateout_update + ozphys + GFS_DCNV_generic_pre + get_phi_fv3 + GFS_suite_interstitial_3 + samfdeepcnv + GFS_DCNV_generic_post + GFS_SCNV_generic_pre + samfshalcnv + samfshalcnv_post + GFS_SCNV_generic_post + GFS_suite_interstitial_4 + cnvc90 + GFS_MP_generic_pre + zhaocarr_gscond + zhaocarr_precpd + GFS_MP_generic_post + maximum_hourly_diagnostics + + + + + GFS_stochastics + + + + diff --git a/ccpp/suites/suite_FV3_GFS_2017_shinhong.xml b/ccpp/suites/suite_FV3_GFS_2017_shinhong.xml new file mode 100644 index 000000000..a690a90ba --- /dev/null +++ b/ccpp/suites/suite_FV3_GFS_2017_shinhong.xml @@ -0,0 +1,92 @@ + + + + + + + fv_sat_adj + + + + + GFS_time_vary_pre + GFS_rrtmg_setup + GFS_rad_time_vary + GFS_phys_time_vary + + + + + GFS_suite_interstitial_rad_reset + GFS_rrtmg_pre + rrtmg_sw_pre + rrtmg_sw + rrtmg_sw_post + rrtmg_lw_pre + rrtmg_lw + rrtmg_lw_post + GFS_rrtmg_post + + + + + GFS_suite_interstitial_phys_reset + GFS_suite_stateout_reset + get_prs_fv3 + GFS_suite_interstitial_1 + GFS_surface_generic_pre + GFS_surface_composites_pre + dcyc2t3 + GFS_surface_composites_inter + GFS_suite_interstitial_2 + + + + sfc_diff + GFS_surface_loop_control_part1 + sfc_nst_pre + sfc_nst + sfc_nst_post + lsm_noah + sfc_sice + GFS_surface_loop_control_part2 + + + + GFS_surface_composites_post + dcyc2t3_post + sfc_diag + sfc_diag_post + GFS_surface_generic_post + shinhongvdif + GFS_PBL_generic_post + GFS_GWD_generic_pre + cires_ugwp + cires_ugwp_post + rayleigh_damp + GFS_suite_stateout_update + ozphys + GFS_DCNV_generic_pre + get_phi_fv3 + GFS_suite_interstitial_3 + samfdeepcnv + GFS_DCNV_generic_post + GFS_SCNV_generic_pre + samfshalcnv + samfshalcnv_post + GFS_SCNV_generic_post + GFS_suite_interstitial_4 + cnvc90 + GFS_MP_generic_pre + gfdl_cloud_microphys + GFS_MP_generic_post + maximum_hourly_diagnostics + + + + + GFS_stochastics + + + + diff --git a/ccpp/suites/suite_FV3_GFS_2017_stretched.xml b/ccpp/suites/suite_FV3_GFS_2017_stretched.xml new file mode 100644 index 000000000..8e8fbf2da --- /dev/null +++ b/ccpp/suites/suite_FV3_GFS_2017_stretched.xml @@ -0,0 +1,92 @@ + + + + + + + fv_sat_adj + + + + + GFS_time_vary_pre + GFS_rrtmg_setup + GFS_rad_time_vary + GFS_phys_time_vary + + + + + GFS_suite_interstitial_rad_reset + GFS_rrtmg_pre + rrtmg_sw_pre + rrtmg_sw + rrtmg_sw_post + rrtmg_lw_pre + rrtmg_lw + rrtmg_lw_post + GFS_rrtmg_post + + + + + GFS_suite_interstitial_phys_reset + GFS_suite_stateout_reset + get_prs_fv3 + GFS_suite_interstitial_1 + GFS_surface_generic_pre + GFS_surface_composites_pre + dcyc2t3 + GFS_surface_composites_inter + GFS_suite_interstitial_2 + + + + sfc_diff + GFS_surface_loop_control_part1 + sfc_nst_pre + sfc_nst + sfc_nst_post + lsm_noah + sfc_sice + GFS_surface_loop_control_part2 + + + + GFS_surface_composites_post + dcyc2t3_post + sfc_diag + sfc_diag_post + GFS_surface_generic_post + GFS_PBL_generic_pre + hedmf + GFS_PBL_generic_post + GFS_GWD_generic_pre + cires_ugwp + cires_ugwp_post + GFS_suite_stateout_update + ozphys + GFS_DCNV_generic_pre + get_phi_fv3 + GFS_suite_interstitial_3 + samfdeepcnv + GFS_DCNV_generic_post + GFS_SCNV_generic_pre + samfshalcnv + samfshalcnv_post + GFS_SCNV_generic_post + GFS_suite_interstitial_4 + cnvc90 + GFS_MP_generic_pre + gfdl_cloud_microphys + GFS_MP_generic_post + maximum_hourly_diagnostics + + + + + GFS_stochastics + + + + diff --git a/ccpp/suites/suite_FV3_GFS_2017_ysu.xml b/ccpp/suites/suite_FV3_GFS_2017_ysu.xml new file mode 100644 index 000000000..9f14cd457 --- /dev/null +++ b/ccpp/suites/suite_FV3_GFS_2017_ysu.xml @@ -0,0 +1,92 @@ + + + + + + + fv_sat_adj + + + + + GFS_time_vary_pre + GFS_rrtmg_setup + GFS_rad_time_vary + GFS_phys_time_vary + + + + + GFS_suite_interstitial_rad_reset + GFS_rrtmg_pre + rrtmg_sw_pre + rrtmg_sw + rrtmg_sw_post + rrtmg_lw_pre + rrtmg_lw + rrtmg_lw_post + GFS_rrtmg_post + + + + + GFS_suite_interstitial_phys_reset + GFS_suite_stateout_reset + get_prs_fv3 + GFS_suite_interstitial_1 + GFS_surface_generic_pre + GFS_surface_composites_pre + dcyc2t3 + GFS_surface_composites_inter + GFS_suite_interstitial_2 + + + + sfc_diff + GFS_surface_loop_control_part1 + sfc_nst_pre + sfc_nst + sfc_nst_post + lsm_noah + sfc_sice + GFS_surface_loop_control_part2 + + + + GFS_surface_composites_post + dcyc2t3_post + sfc_diag + sfc_diag_post + GFS_surface_generic_post + ysuvdif + GFS_PBL_generic_post + GFS_GWD_generic_pre + cires_ugwp + cires_ugwp_post + rayleigh_damp + GFS_suite_stateout_update + ozphys + GFS_DCNV_generic_pre + get_phi_fv3 + GFS_suite_interstitial_3 + samfdeepcnv + GFS_DCNV_generic_post + GFS_SCNV_generic_pre + samfshalcnv + samfshalcnv_post + GFS_SCNV_generic_post + GFS_suite_interstitial_4 + cnvc90 + GFS_MP_generic_pre + gfdl_cloud_microphys + GFS_MP_generic_post + maximum_hourly_diagnostics + + + + + GFS_stochastics + + + + diff --git a/ccpp/suites/suite_FV3_GFS_v15.xml b/ccpp/suites/suite_FV3_GFS_v15.xml new file mode 100644 index 000000000..672c39280 --- /dev/null +++ b/ccpp/suites/suite_FV3_GFS_v15.xml @@ -0,0 +1,94 @@ + + + + + + + fv_sat_adj + + + + + GFS_time_vary_pre + GFS_rrtmg_setup + GFS_rad_time_vary + GFS_phys_time_vary + + + + + GFS_suite_interstitial_rad_reset + GFS_rrtmg_pre + rrtmg_sw_pre + rrtmg_sw + rrtmg_sw_post + rrtmg_lw_pre + rrtmg_lw + rrtmg_lw_post + GFS_rrtmg_post + + + + + GFS_suite_interstitial_phys_reset + GFS_suite_stateout_reset + get_prs_fv3 + GFS_suite_interstitial_1 + GFS_surface_generic_pre + GFS_surface_composites_pre + dcyc2t3 + GFS_surface_composites_inter + GFS_suite_interstitial_2 + + + + sfc_diff + GFS_surface_loop_control_part1 + sfc_nst_pre + sfc_nst + sfc_nst_post + lsm_noah + sfc_sice + GFS_surface_loop_control_part2 + + + + GFS_surface_composites_post + dcyc2t3_post + sfc_diag + sfc_diag_post + GFS_surface_generic_post + GFS_PBL_generic_pre + hedmf + GFS_PBL_generic_post + GFS_GWD_generic_pre + cires_ugwp + cires_ugwp_post + rayleigh_damp + GFS_suite_stateout_update + ozphys_2015 + h2ophys + GFS_DCNV_generic_pre + get_phi_fv3 + GFS_suite_interstitial_3 + samfdeepcnv + GFS_DCNV_generic_post + GFS_SCNV_generic_pre + samfshalcnv + samfshalcnv_post + GFS_SCNV_generic_post + GFS_suite_interstitial_4 + cnvc90 + GFS_MP_generic_pre + gfdl_cloud_microphys + GFS_MP_generic_post + maximum_hourly_diagnostics + + + + + GFS_stochastics + + + + diff --git a/ccpp/suites/suite_FV3_GFS_v15_gf.xml b/ccpp/suites/suite_FV3_GFS_v15_gf.xml new file mode 100644 index 000000000..8e7a209ad --- /dev/null +++ b/ccpp/suites/suite_FV3_GFS_v15_gf.xml @@ -0,0 +1,94 @@ + + + + + + + fv_sat_adj + + + + + GFS_time_vary_pre + GFS_rrtmg_setup + GFS_rad_time_vary + GFS_phys_time_vary + + + + + GFS_suite_interstitial_rad_reset + GFS_rrtmg_pre + rrtmg_sw_pre + rrtmg_sw + rrtmg_sw_post + rrtmg_lw_pre + rrtmg_lw + rrtmg_lw_post + GFS_rrtmg_post + + + + + GFS_suite_interstitial_phys_reset + GFS_suite_stateout_reset + get_prs_fv3 + GFS_suite_interstitial_1 + GFS_surface_generic_pre + GFS_surface_composites_pre + dcyc2t3 + GFS_surface_composites_inter + GFS_suite_interstitial_2 + + + + sfc_diff + GFS_surface_loop_control_part1 + sfc_nst_pre + sfc_nst + sfc_nst_post + lsm_noah + sfc_sice + GFS_surface_loop_control_part2 + + + + GFS_surface_composites_post + dcyc2t3_post + sfc_diag + sfc_diag_post + GFS_surface_generic_post + GFS_PBL_generic_pre + hedmf + GFS_PBL_generic_post + GFS_GWD_generic_pre + cires_ugwp + cires_ugwp_post + rayleigh_damp + GFS_suite_stateout_update + ozphys_2015 + h2ophys + GFS_DCNV_generic_pre + get_phi_fv3 + GFS_suite_interstitial_3 + cu_gf_driver_pre + cu_gf_driver + GFS_DCNV_generic_post + GFS_SCNV_generic_pre + GFS_SCNV_generic_post + GFS_suite_interstitial_4 + cnvc90 + GFS_MP_generic_pre + gfdl_cloud_microphys + GFS_MP_generic_post + cu_gf_driver_post + maximum_hourly_diagnostics + + + + + GFS_stochastics + + + + diff --git a/ccpp/suites/suite_FV3_GFS_v15_gf_thompson.xml b/ccpp/suites/suite_FV3_GFS_v15_gf_thompson.xml new file mode 100644 index 000000000..4ff6a7acf --- /dev/null +++ b/ccpp/suites/suite_FV3_GFS_v15_gf_thompson.xml @@ -0,0 +1,91 @@ + + + + + + + GFS_time_vary_pre + GFS_rrtmg_setup + GFS_rad_time_vary + GFS_phys_time_vary + + + + + GFS_suite_interstitial_rad_reset + GFS_rrtmg_pre + rrtmg_sw_pre + rrtmg_sw + rrtmg_sw_post + rrtmg_lw_pre + rrtmg_lw + rrtmg_lw_post + GFS_rrtmg_post + + + + + GFS_suite_interstitial_phys_reset + GFS_suite_stateout_reset + get_prs_fv3 + GFS_suite_interstitial_1 + GFS_surface_generic_pre + GFS_surface_composites_pre + dcyc2t3 + GFS_surface_composites_inter + GFS_suite_interstitial_2 + + + + sfc_diff + GFS_surface_loop_control_part1 + sfc_nst_pre + sfc_nst + sfc_nst_post + lsm_noah + sfc_sice + GFS_surface_loop_control_part2 + + + + GFS_surface_composites_post + dcyc2t3_post + sfc_diag + sfc_diag_post + GFS_surface_generic_post + GFS_PBL_generic_pre + hedmf + GFS_PBL_generic_post + GFS_GWD_generic_pre + cires_ugwp + cires_ugwp_post + rayleigh_damp + GFS_suite_stateout_update + ozphys_2015 + h2ophys + GFS_DCNV_generic_pre + get_phi_fv3 + GFS_suite_interstitial_3 + cu_gf_driver_pre + cu_gf_driver + GFS_DCNV_generic_post + GFS_SCNV_generic_pre + GFS_SCNV_generic_post + GFS_suite_interstitial_4 + cnvc90 + GFS_MP_generic_pre + mp_thompson_pre + mp_thompson + mp_thompson_post + GFS_MP_generic_post + cu_gf_driver_post + maximum_hourly_diagnostics + + + + + GFS_stochastics + + + + diff --git a/ccpp/suites/suite_FV3_GFS_v15_mynn.xml b/ccpp/suites/suite_FV3_GFS_v15_mynn.xml new file mode 100644 index 000000000..4f299719c --- /dev/null +++ b/ccpp/suites/suite_FV3_GFS_v15_mynn.xml @@ -0,0 +1,94 @@ + + + + + + + fv_sat_adj + + + + + GFS_time_vary_pre + GFS_rrtmg_setup + GFS_rad_time_vary + GFS_phys_time_vary + + + + + GFS_suite_interstitial_rad_reset + GFS_rrtmg_pre + rrtmg_sw_pre + mynnrad_pre + rrtmg_sw + rrtmg_sw_post + rrtmg_lw_pre + rrtmg_lw + mynnrad_post + rrtmg_lw_post + GFS_rrtmg_post + + + + + GFS_suite_interstitial_phys_reset + GFS_suite_stateout_reset + get_prs_fv3 + GFS_suite_interstitial_1 + GFS_surface_generic_pre + GFS_surface_composites_pre + dcyc2t3 + GFS_surface_composites_inter + GFS_suite_interstitial_2 + + + + sfc_diff + GFS_surface_loop_control_part1 + sfc_nst_pre + sfc_nst + sfc_nst_post + lsm_noah + sfc_sice + GFS_surface_loop_control_part2 + + + + GFS_surface_composites_post + dcyc2t3_post + sfc_diag + sfc_diag_post + GFS_surface_generic_post + mynnedmf_wrapper + GFS_GWD_generic_pre + cires_ugwp + cires_ugwp_post + rayleigh_damp + GFS_suite_stateout_update + ozphys_2015 + h2ophys + GFS_DCNV_generic_pre + get_phi_fv3 + GFS_suite_interstitial_3 + samfdeepcnv + GFS_DCNV_generic_post + GFS_SCNV_generic_pre + samfshalcnv + samfshalcnv_post + GFS_SCNV_generic_post + GFS_suite_interstitial_4 + cnvc90 + GFS_MP_generic_pre + gfdl_cloud_microphys + GFS_MP_generic_post + maximum_hourly_diagnostics + + + + + GFS_stochastics + + + + diff --git a/ccpp/suites/suite_FV3_GFS_v15_thompson.xml b/ccpp/suites/suite_FV3_GFS_v15_thompson.xml new file mode 100644 index 000000000..cd69334f6 --- /dev/null +++ b/ccpp/suites/suite_FV3_GFS_v15_thompson.xml @@ -0,0 +1,91 @@ + + + + + + + GFS_time_vary_pre + GFS_rrtmg_setup + GFS_rad_time_vary + GFS_phys_time_vary + + + + + GFS_suite_interstitial_rad_reset + GFS_rrtmg_pre + rrtmg_sw_pre + rrtmg_sw + rrtmg_sw_post + rrtmg_lw_pre + rrtmg_lw + rrtmg_lw_post + GFS_rrtmg_post + + + + + GFS_suite_interstitial_phys_reset + GFS_suite_stateout_reset + get_prs_fv3 + GFS_suite_interstitial_1 + GFS_surface_generic_pre + GFS_surface_composites_pre + dcyc2t3 + GFS_surface_composites_inter + GFS_suite_interstitial_2 + + + + sfc_diff + GFS_surface_loop_control_part1 + sfc_nst_pre + sfc_nst + sfc_nst_post + lsm_noah + sfc_sice + GFS_surface_loop_control_part2 + + + + GFS_surface_composites_post + dcyc2t3_post + sfc_diag + sfc_diag_post + GFS_surface_generic_post + GFS_PBL_generic_pre + hedmf + GFS_PBL_generic_post + GFS_GWD_generic_pre + cires_ugwp + cires_ugwp_post + rayleigh_damp + GFS_suite_stateout_update + ozphys_2015 + h2ophys + GFS_DCNV_generic_pre + get_phi_fv3 + GFS_suite_interstitial_3 + samfdeepcnv + GFS_DCNV_generic_post + GFS_SCNV_generic_pre + samfshalcnv + samfshalcnv_post + GFS_SCNV_generic_post + GFS_suite_interstitial_4 + cnvc90 + GFS_MP_generic_pre + mp_thompson_pre + mp_thompson + mp_thompson_post + GFS_MP_generic_post + maximum_hourly_diagnostics + + + + + GFS_stochastics + + + + diff --git a/ccpp/suites/suite_FV3_GFS_v15_thompson_mynn.xml b/ccpp/suites/suite_FV3_GFS_v15_thompson_mynn.xml new file mode 100644 index 000000000..92637bd84 --- /dev/null +++ b/ccpp/suites/suite_FV3_GFS_v15_thompson_mynn.xml @@ -0,0 +1,91 @@ + + + + + + + GFS_time_vary_pre + GFS_rrtmg_setup + GFS_rad_time_vary + GFS_phys_time_vary + + + + + GFS_suite_interstitial_rad_reset + GFS_rrtmg_pre + rrtmg_sw_pre + mynnrad_pre + rrtmg_sw + rrtmg_sw_post + rrtmg_lw_pre + rrtmg_lw + mynnrad_post + rrtmg_lw_post + GFS_rrtmg_post + + + + + GFS_suite_interstitial_phys_reset + GFS_suite_stateout_reset + get_prs_fv3 + GFS_suite_interstitial_1 + GFS_surface_generic_pre + GFS_surface_composites_pre + dcyc2t3 + GFS_surface_composites_inter + GFS_suite_interstitial_2 + + + + sfc_diff + GFS_surface_loop_control_part1 + sfc_nst_pre + sfc_nst + sfc_nst_post + lsm_noah + sfc_sice + GFS_surface_loop_control_part2 + + + + GFS_surface_composites_post + dcyc2t3_post + sfc_diag + sfc_diag_post + GFS_surface_generic_post + mynnedmf_wrapper + GFS_GWD_generic_pre + cires_ugwp + cires_ugwp_post + rayleigh_damp + GFS_suite_stateout_update + ozphys_2015 + h2ophys + GFS_DCNV_generic_pre + get_phi_fv3 + GFS_suite_interstitial_3 + samfdeepcnv + GFS_DCNV_generic_post + GFS_SCNV_generic_pre + samfshalcnv + samfshalcnv_post + GFS_SCNV_generic_post + GFS_suite_interstitial_4 + cnvc90 + GFS_MP_generic_pre + mp_thompson_pre + mp_thompson + mp_thompson_post + GFS_MP_generic_post + maximum_hourly_diagnostics + + + + + GFS_stochastics + + + + diff --git a/ccpp/suites/suite_FV3_GFS_v15plus.xml b/ccpp/suites/suite_FV3_GFS_v15plus.xml new file mode 100644 index 000000000..3ea9ec743 --- /dev/null +++ b/ccpp/suites/suite_FV3_GFS_v15plus.xml @@ -0,0 +1,94 @@ + + + + + + + fv_sat_adj + + + + + GFS_time_vary_pre + GFS_rrtmg_setup + GFS_rad_time_vary + GFS_phys_time_vary + + + + + GFS_suite_interstitial_rad_reset + GFS_rrtmg_pre + rrtmg_sw_pre + rrtmg_sw + rrtmg_sw_post + rrtmg_lw_pre + rrtmg_lw + rrtmg_lw_post + GFS_rrtmg_post + + + + + GFS_suite_interstitial_phys_reset + GFS_suite_stateout_reset + get_prs_fv3 + GFS_suite_interstitial_1 + GFS_surface_generic_pre + GFS_surface_composites_pre + dcyc2t3 + GFS_surface_composites_inter + GFS_suite_interstitial_2 + + + + sfc_diff + GFS_surface_loop_control_part1 + sfc_nst_pre + sfc_nst + sfc_nst_post + lsm_noah + sfc_sice + GFS_surface_loop_control_part2 + + + + GFS_surface_composites_post + dcyc2t3_post + sfc_diag + sfc_diag_post + GFS_surface_generic_post + GFS_PBL_generic_pre + satmedmfvdif + GFS_PBL_generic_post + GFS_GWD_generic_pre + cires_ugwp + cires_ugwp_post + rayleigh_damp + GFS_suite_stateout_update + ozphys_2015 + h2ophys + GFS_DCNV_generic_pre + get_phi_fv3 + GFS_suite_interstitial_3 + samfdeepcnv + GFS_DCNV_generic_post + GFS_SCNV_generic_pre + samfshalcnv + samfshalcnv_post + GFS_SCNV_generic_post + GFS_suite_interstitial_4 + cnvc90 + GFS_MP_generic_pre + gfdl_cloud_microphys + GFS_MP_generic_post + maximum_hourly_diagnostics + + + + + GFS_stochastics + + + + diff --git a/ccpp/suites/suite_FV3_GSD_noah.xml b/ccpp/suites/suite_FV3_GSD_noah.xml new file mode 100644 index 000000000..56f421e82 --- /dev/null +++ b/ccpp/suites/suite_FV3_GSD_noah.xml @@ -0,0 +1,91 @@ + + + + + + + GFS_time_vary_pre + GFS_rrtmg_setup + GFS_rad_time_vary + GFS_phys_time_vary + + + + + GFS_suite_interstitial_rad_reset + GFS_rrtmg_pre + rrtmg_sw_pre + mynnrad_pre + rrtmg_sw + rrtmg_sw_post + rrtmg_lw_pre + rrtmg_lw + mynnrad_post + rrtmg_lw_post + GFS_rrtmg_post + + + + + GFS_suite_interstitial_phys_reset + GFS_suite_stateout_reset + get_prs_fv3 + GFS_suite_interstitial_1 + GFS_surface_generic_pre + GFS_surface_composites_pre + dcyc2t3 + GFS_surface_composites_inter + GFS_suite_interstitial_2 + + + + sfc_diff + GFS_surface_loop_control_part1 + sfc_nst_pre + sfc_nst + sfc_nst_post + lsm_noah + sfc_sice + GFS_surface_loop_control_part2 + + + + GFS_surface_composites_post + dcyc2t3_post + sfc_diag + sfc_diag_post + GFS_surface_generic_post + mynnedmf_wrapper + GFS_GWD_generic_pre + cires_ugwp + cires_ugwp_post + rayleigh_damp + GFS_suite_stateout_update + ozphys_2015 + h2ophys + GFS_DCNV_generic_pre + get_phi_fv3 + GFS_suite_interstitial_3 + cu_gf_driver_pre + cu_gf_driver + GFS_DCNV_generic_post + GFS_SCNV_generic_pre + GFS_SCNV_generic_post + GFS_suite_interstitial_4 + cnvc90 + GFS_MP_generic_pre + mp_thompson_pre + mp_thompson + mp_thompson_post + GFS_MP_generic_post + cu_gf_driver_post + maximum_hourly_diagnostics + + + + + GFS_stochastics + + + + diff --git a/ccpp/suites/suite_FV3_GSD_v0.xml b/ccpp/suites/suite_FV3_GSD_v0.xml new file mode 100644 index 000000000..e46467857 --- /dev/null +++ b/ccpp/suites/suite_FV3_GSD_v0.xml @@ -0,0 +1,93 @@ + + + + + + + GFS_time_vary_pre + GFS_rrtmg_setup + GFS_rad_time_vary + GFS_phys_time_vary + + + + + GFS_suite_interstitial_rad_reset + GFS_rrtmg_pre + rrtmg_sw_pre + mynnrad_pre + rrtmg_sw + rrtmg_sw_post + rrtmg_lw_pre + rrtmg_lw + mynnrad_post + rrtmg_lw_post + GFS_rrtmg_post + + + + + GFS_suite_interstitial_phys_reset + GFS_suite_stateout_reset + get_prs_fv3 + GFS_suite_interstitial_1 + GFS_surface_generic_pre + GFS_surface_composites_pre + dcyc2t3 + GFS_surface_composites_inter + GFS_suite_interstitial_2 + + + + sfc_diff + GFS_surface_loop_control_part1 + sfc_nst_pre + sfc_nst + sfc_nst_post + lsm_ruc + lsm_ruc_sfc_sice_pre + sfc_sice + lsm_ruc_sfc_sice_post + GFS_surface_loop_control_part2 + + + + GFS_surface_composites_post + dcyc2t3_post + sfc_diag + sfc_diag_post + GFS_surface_generic_post + mynnedmf_wrapper + GFS_GWD_generic_pre + cires_ugwp + cires_ugwp_post + rayleigh_damp + GFS_suite_stateout_update + ozphys_2015 + h2ophys + GFS_DCNV_generic_pre + get_phi_fv3 + GFS_suite_interstitial_3 + cu_gf_driver_pre + cu_gf_driver + GFS_DCNV_generic_post + GFS_SCNV_generic_pre + GFS_SCNV_generic_post + GFS_suite_interstitial_4 + cnvc90 + GFS_MP_generic_pre + mp_thompson_pre + mp_thompson + mp_thompson_post + GFS_MP_generic_post + cu_gf_driver_post + maximum_hourly_diagnostics + + + + + GFS_stochastics + + + + diff --git a/ccpp/suites/suite_FV3_GSD_v0_drag_suite.xml b/ccpp/suites/suite_FV3_GSD_v0_drag_suite.xml new file mode 100644 index 000000000..0ca9cd610 --- /dev/null +++ b/ccpp/suites/suite_FV3_GSD_v0_drag_suite.xml @@ -0,0 +1,93 @@ + + + + + + + GFS_time_vary_pre + GFS_rrtmg_setup + GFS_rad_time_vary + GFS_phys_time_vary + + + + + GFS_suite_interstitial_rad_reset + GFS_rrtmg_pre + rrtmg_sw_pre + mynnrad_pre + rrtmg_sw + rrtmg_sw_post + rrtmg_lw_pre + rrtmg_lw + mynnrad_post + rrtmg_lw_post + GFS_rrtmg_post + + + + + GFS_suite_interstitial_phys_reset + GFS_suite_stateout_reset + get_prs_fv3 + GFS_suite_interstitial_1 + GFS_surface_generic_pre + GFS_surface_composites_pre + dcyc2t3 + GFS_surface_composites_inter + GFS_suite_interstitial_2 + + + + sfc_diff + GFS_surface_loop_control_part1 + sfc_nst_pre + sfc_nst + sfc_nst_post + lsm_ruc + lsm_ruc_sfc_sice_pre + sfc_sice + lsm_ruc_sfc_sice_post + GFS_surface_loop_control_part2 + + + + GFS_surface_composites_post + dcyc2t3_post + sfc_diag + sfc_diag_post + GFS_surface_generic_post + mynnedmf_wrapper + drag_suite_pre + drag_suite + drag_suite_post + rayleigh_damp + GFS_suite_stateout_update + ozphys_2015 + h2ophys + GFS_DCNV_generic_pre + get_phi_fv3 + GFS_suite_interstitial_3 + cu_gf_driver_pre + cu_gf_driver + GFS_DCNV_generic_post + GFS_SCNV_generic_pre + GFS_SCNV_generic_post + GFS_suite_interstitial_4 + cnvc90 + GFS_MP_generic_pre + mp_thompson_pre + mp_thompson + mp_thompson_post + GFS_MP_generic_post + cu_gf_driver_post + maximum_hourly_diagnostics + + + + + GFS_stochastics + + + + diff --git a/gfsphysics/GFS_layer/GFS_physics_driver.F90 b/gfsphysics/GFS_layer/GFS_physics_driver.F90 index a54716960..401fbbf86 100644 --- a/gfsphysics/GFS_layer/GFS_physics_driver.F90 +++ b/gfsphysics/GFS_layer/GFS_physics_driver.F90 @@ -674,10 +674,6 @@ subroutine GFS_physics_driver & real :: pshltr,QCQ,rh02 real(kind=kind_phys), allocatable, dimension(:,:) :: den -#ifdef TRANSITION - real(kind=kind_phys), volatile :: volatile_var1, volatile_var2 -#endif - !! Initialize local variables (mainly for debugging purposes, because the !! corresponding variables Interstitial(nt)%... are reset to zero every time); !! these variables are only modified over parts of the entire domain (related @@ -910,7 +906,6 @@ subroutine GFS_physics_driver & enddo endif endif ! if (Model%lsm == Model%lsm_noahmp) -! *DH ! --- set initial quantities for stochastic physics deltas if (Model%do_sppt) then @@ -2656,33 +2651,33 @@ subroutine GFS_physics_driver & if (ntgl > 0) then ! MG do k=1,levs do i=1,im - dqdt(i,k,1) = vdftra(i,k,1) - dqdt(i,k,ntcw) = vdftra(i,k,2) - dqdt(i,k,ntiw) = vdftra(i,k,3) - dqdt(i,k,ntrw) = vdftra(i,k,4) - dqdt(i,k,ntsw) = vdftra(i,k,5) - dqdt(i,k,ntgl) = vdftra(i,k,6) - dqdt(i,k,ntlnc) = vdftra(i,k,7) - dqdt(i,k,ntinc) = vdftra(i,k,8) - dqdt(i,k,ntrnc) = vdftra(i,k,9) - dqdt(i,k,ntsnc) = vdftra(i,k,10) - dqdt(i,k,ntgnc) = vdftra(i,k,11) - dqdt(i,k,ntoz) = vdftra(i,k,12) + dqdt(i,k,1) = dvdftra(i,k,1) + dqdt(i,k,ntcw) = dvdftra(i,k,2) + dqdt(i,k,ntiw) = dvdftra(i,k,3) + dqdt(i,k,ntrw) = dvdftra(i,k,4) + dqdt(i,k,ntsw) = dvdftra(i,k,5) + dqdt(i,k,ntgl) = dvdftra(i,k,6) + dqdt(i,k,ntlnc) = dvdftra(i,k,7) + dqdt(i,k,ntinc) = dvdftra(i,k,8) + dqdt(i,k,ntrnc) = dvdftra(i,k,9) + dqdt(i,k,ntsnc) = dvdftra(i,k,10) + dqdt(i,k,ntgnc) = dvdftra(i,k,11) + dqdt(i,k,ntoz) = dvdftra(i,k,12) enddo enddo else ! MG2 do k=1,levs do i=1,im - dqdt(i,k,1) = vdftra(i,k,1) - dqdt(i,k,ntcw) = vdftra(i,k,2) - dqdt(i,k,ntiw) = vdftra(i,k,3) - dqdt(i,k,ntrw) = vdftra(i,k,4) - dqdt(i,k,ntsw) = vdftra(i,k,5) - dqdt(i,k,ntlnc) = vdftra(i,k,6) - dqdt(i,k,ntinc) = vdftra(i,k,7) - dqdt(i,k,ntrnc) = vdftra(i,k,8) - dqdt(i,k,ntsnc) = vdftra(i,k,9) - dqdt(i,k,ntoz) = vdftra(i,k,10) + dqdt(i,k,1) = dvdftra(i,k,1) + dqdt(i,k,ntcw) = dvdftra(i,k,2) + dqdt(i,k,ntiw) = dvdftra(i,k,3) + dqdt(i,k,ntrw) = dvdftra(i,k,4) + dqdt(i,k,ntsw) = dvdftra(i,k,5) + dqdt(i,k,ntlnc) = dvdftra(i,k,6) + dqdt(i,k,ntinc) = dvdftra(i,k,7) + dqdt(i,k,ntrnc) = dvdftra(i,k,8) + dqdt(i,k,ntsnc) = dvdftra(i,k,9) + dqdt(i,k,ntoz) = dvdftra(i,k,10) enddo enddo endif @@ -2701,15 +2696,13 @@ subroutine GFS_physics_driver & enddo elseif (imp_physics == Model%imp_physics_zhao_carr) then ! Zhao/Carr/Sundqvist - if (Model%cplchm) then - do k=1,levs - do i=1,im - dqdt(i,k,1) = dvdftra(i,k,1) - dqdt(i,k,ntcw) = dvdftra(i,k,2) - dqdt(i,k,ntoz) = dvdftra(i,k,3) - enddo + do k=1,levs + do i=1,im + dqdt(i,k,1) = dvdftra(i,k,1) + dqdt(i,k,ntcw) = dvdftra(i,k,2) + dqdt(i,k,ntoz) = dvdftra(i,k,3) enddo - endif + enddo endif ! deallocate(vdftra, dvdftra) @@ -4851,29 +4844,18 @@ subroutine GFS_physics_driver & graupel0(i,1) = zero endif -#ifdef TRANSITION - volatile_var1 = rain0(i,1)+snow0(i,1)+ice0(i,1)+graupel0(i,1) - volatile_var2 = snow0(i,1)+ice0(i,1)+graupel0(i,1) - rain1(i) = volatile_var1 * tem -#else rain1(i) = (rain0(i,1)+snow0(i,1)+ice0(i,1)+graupel0(i,1)) * tem -#endif Diag%ice(i) = ice0 (i,1) * tem Diag%snow(i) = snow0 (i,1) * tem Diag%graupel(i) = graupel0(i,1) * tem -#ifdef TRANSITION - if ( volatile_var1 * tem > rainmin ) then - Diag%sr(i) = volatile_var2 / volatile_var1 -#else if ( rain1(i) > rainmin ) then Diag%sr(i) = (snow0(i,1) + ice0(i,1) + graupel0(i,1)) & / (rain0(i,1) + snow0(i,1) + ice0(i,1) + graupel0(i,1)) -#endif else Diag%sr(i) = zero endif enddo -#if defined(TRANSITION) || defined(REPRO) +#ifdef REPRO ! Convert rain0, ice0, graupel0 and snow0 from mm/day to m/physics-timestep ! for later use (approx. lines 7970, calculation of srflag) rain0 = tem*rain0 @@ -5122,7 +5104,7 @@ subroutine GFS_physics_driver & ! Sfcprop%srflag(i) = one ! clu: set srflag to 'snow' (i.e. 1) ! endif ! compute fractional srflag -#if defined(TRANSITION) || defined(REPRO) +#ifdef REPRO ! For bit-for-bit identical results with CCPP code, snow0/ice0/graupel0/rain0 ! were converted from mm per day to m per physics timestep previously in the code total_precip = snow0(i,1)+ice0(i,1)+graupel0(i,1)+rain0(i,1)+Diag%rainc(i) diff --git a/gfsphysics/GFS_layer/GFS_typedefs.F90 b/gfsphysics/GFS_layer/GFS_typedefs.F90 index 65f6d30de..7f8239a5a 100644 --- a/gfsphysics/GFS_layer/GFS_typedefs.F90 +++ b/gfsphysics/GFS_layer/GFS_typedefs.F90 @@ -489,17 +489,12 @@ module GFS_typedefs real (kind=kind_phys), pointer :: sfc_wts (:,:) => null() ! mg, sfc-perts integer :: nsfcpert=6 !< number of sfc perturbations -!--- instantaneous quantities for GoCart and will be accumulated for 3D diagnostics - real (kind=kind_phys), pointer :: dqdti (:,:) => null() !< instantaneous total moisture tendency (kg/kg/s) - real (kind=kind_phys), pointer :: cnvqci (:,:) => null() !< instantaneous total convective conensate (kg/kg) - real (kind=kind_phys), pointer :: upd_mfi (:,:) => null() !< instantaneous convective updraft mass flux - real (kind=kind_phys), pointer :: dwn_mfi (:,:) => null() !< instantaneous convective downdraft mass flux - real (kind=kind_phys), pointer :: det_mfi (:,:) => null() !< instantaneous convective detrainment mass flux - real (kind=kind_phys), pointer :: cldcovi (:,:) => null() !< instantaneous 3D cloud fraction + !--- aerosol surface emissions for Thompson microphysics real (kind=kind_phys), pointer :: nwfa2d (:) => null() !< instantaneous water-friendly sfc aerosol source real (kind=kind_phys), pointer :: nifa2d (:) => null() !< instantaneous ice-friendly sfc aerosol source !--- instantaneous quantities for GSDCHEM coupling + real (kind=kind_phys), pointer :: dqdti (:,:) => null() !< instantaneous total moisture tendency (kg/kg/s) real (kind=kind_phys), pointer :: ushfsfci(:) => null() !< instantaneous upward sensible heat flux (w/m**2) real (kind=kind_phys), pointer :: dkt (:,:) => null() !< instantaneous dkt diffusion coefficient for temperature (m**2/s) @@ -714,6 +709,8 @@ module GFS_typedefs integer :: lsoil !< number of soil layers #ifdef CCPP integer :: lsoil_lsm !< number of soil layers internal to land surface model + integer :: lsnow_lsm !< maximum number of snow layers internal to land surface model + integer :: lsnow_lsm_lbound!< lower bound for snow arrays, depending on lsnow_lsm #endif integer :: ivegsrc !< ivegsrc = 0 => USGS, !< ivegsrc = 1 => IGBP (20 category) @@ -744,6 +741,12 @@ module GFS_typedefs logical :: trans_trac !< flag for convective transport of tracers (RAS, CS, or SAMF) logical :: old_monin !< flag for diff monin schemes logical :: cnvgwd !< flag for conv gravity wave drag +#ifdef CCPP + integer :: gwd_opt !< gwd_opt = 1 => original GFS gwd (gwdps.f) + !< gwd_opt = 2 => unified GWD (placeholder) + !< gwd_opt = 3 => GSD drag suite + !< gwd_opt = 33 => GSD drag suite with extra output +#endif logical :: mstrat !< flag for moorthi approach for stratus logical :: moist_adj !< flag for moist convective adjustment logical :: cscnv !< flag for Chikira-Sugiyama convection @@ -829,6 +832,9 @@ module GFS_typedefs integer :: bl_mynn_mixqt !< flag to mix total water or individual species integer :: icloud_bl !< flag for coupling sgs clouds to radiation ! *DH + ! MYJ switches + logical :: do_myjsfc !< flag for MYJ surface layer scheme + logical :: do_myjpbl !< flag for MYJ PBL scheme #endif !--- Rayleigh friction @@ -999,7 +1005,7 @@ module GFS_typedefs real(kind=kind_phys) :: clstp !< index used by cnvc90 (for convective clouds) !< legacy stuff - does not affect forecast real(kind=kind_phys) :: phour !< previous forecast hour - real(kind=kind_phys) :: fhour !< curent forecast hour + real(kind=kind_phys) :: fhour !< current forecast hour real(kind=kind_phys) :: zhour !< previous hour diagnostic buckets emptied integer :: kdt !< current forecast iteration #ifdef CCPP @@ -1010,7 +1016,7 @@ module GFS_typedefs integer :: jdat(1:8) !< current forecast date and time !< (yr, mon, day, t-zone, hr, min, sec, mil-sec) integer :: imn !< current forecast month - integer :: julian !< current forecast julian date + real(kind=kind_phys) :: julian !< current forecast julian date integer :: yearlen !< current length of the year ! logical :: iccn !< using IN CCN forcing for MG2/3 @@ -1032,10 +1038,6 @@ module GFS_typedefs real(kind=kind_phys) :: dxmax ! maximum scaling factor for critical relative humidity, replaces dxmax in physcons.F90 real(kind=kind_phys) :: dxmin ! minimum scaling factor for critical relative humidity, replaces dxmin in physcons.F90 real(kind=kind_phys) :: rhcmax ! maximum critical relative humidity, replaces rhc_max in physcons.F90 - - ! Temporary to support transition to GFSv16 physics - logical :: lgocart = .false. - #endif contains @@ -1168,6 +1170,13 @@ module GFS_typedefs real (kind=kind_phys), pointer :: snowprv (:) => null() !< snow amount from previous timestep real (kind=kind_phys), pointer :: graupelprv(:) => null() !< graupel amount from previous timestep + !---- precipitation rates from previous time step for NoahMP LSM + real (kind=kind_phys), pointer :: draincprv (:) => null() !< convective precipitation rate from previous timestep + real (kind=kind_phys), pointer :: drainncprv (:) => null() !< explicit rainfall rate from previous timestep + real (kind=kind_phys), pointer :: diceprv (:) => null() !< ice precipitation rate from previous timestep + real (kind=kind_phys), pointer :: dsnowprv (:) => null() !< snow precipitation rate from previous timestep + real (kind=kind_phys), pointer :: dgraupelprv(:) => null() !< graupel precipitation rate from previous timestep + !--- MYNN prognostic variables that can't be in the Intdiag or Interstitial DDTs real (kind=kind_phys), pointer :: CLDFRA_BL (:,:) => null() ! real (kind=kind_phys), pointer :: QC_BL (:,:) => null() ! @@ -1177,6 +1186,21 @@ module GFS_typedefs real (kind=kind_phys), pointer :: tsq (:,:) => null() ! real (kind=kind_phys), pointer :: qsq (:,:) => null() ! real (kind=kind_phys), pointer :: cov (:,:) => null() ! + + !--- MYJ schemes saved variables (from previous time step) + real (kind=kind_phys), pointer :: phy_myj_qsfc(:) => null() ! + real (kind=kind_phys), pointer :: phy_myj_thz0(:) => null() ! + real (kind=kind_phys), pointer :: phy_myj_qz0(:) => null() ! + real (kind=kind_phys), pointer :: phy_myj_uz0(:) => null() ! + real (kind=kind_phys), pointer :: phy_myj_vz0(:) => null() ! + real (kind=kind_phys), pointer :: phy_myj_z0base(:) => null() ! + real (kind=kind_phys), pointer :: phy_myj_akhs(:) => null() ! + real (kind=kind_phys), pointer :: phy_myj_akms(:) => null() ! + real (kind=kind_phys), pointer :: phy_myj_chkqlm(:) => null() ! + real (kind=kind_phys), pointer :: phy_myj_elflx(:) => null() ! + real (kind=kind_phys), pointer :: phy_myj_a1u(:) => null() ! + real (kind=kind_phys), pointer :: phy_myj_a1t(:) => null() ! + real (kind=kind_phys), pointer :: phy_myj_a1q(:) => null() ! #endif contains @@ -1332,6 +1356,24 @@ module GFS_typedefs integer, pointer :: ktop_shallow (:) => null() ! real (kind=kind_phys), pointer :: exch_h (:,:) => null() ! real (kind=kind_phys), pointer :: exch_m (:,:) => null() ! + + !--- Drag Suite variables + real (kind=kind_phys), pointer :: dtaux2d_ls (:,:) => null() ! + real (kind=kind_phys), pointer :: dtauy2d_ls (:,:) => null() ! + real (kind=kind_phys), pointer :: dtaux2d_bl (:,:) => null() ! + real (kind=kind_phys), pointer :: dtauy2d_bl (:,:) => null() ! + real (kind=kind_phys), pointer :: dtaux2d_ss (:,:) => null() ! + real (kind=kind_phys), pointer :: dtauy2d_ss (:,:) => null() ! + real (kind=kind_phys), pointer :: dtaux2d_fd (:,:) => null() ! + real (kind=kind_phys), pointer :: dtauy2d_fd (:,:) => null() ! + real (kind=kind_phys), pointer :: dusfc_ls (:) => null() ! + real (kind=kind_phys), pointer :: dvsfc_ls (:) => null() ! + real (kind=kind_phys), pointer :: dusfc_bl (:) => null() ! + real (kind=kind_phys), pointer :: dvsfc_bl (:) => null() ! + real (kind=kind_phys), pointer :: dusfc_ss (:) => null() ! + real (kind=kind_phys), pointer :: dvsfc_ss (:) => null() ! + real (kind=kind_phys), pointer :: dusfc_fd (:) => null() ! + real (kind=kind_phys), pointer :: dvsfc_fd (:) => null() ! #endif ! Output - only in physics @@ -1464,7 +1506,6 @@ module GFS_typedefs real (kind=kind_phys), pointer :: tav_ugwp(:,:) => null() ! aver temp UAV from physics real (kind=kind_phys), pointer :: du3dt_dyn(:,:) => null() ! U Tend-dynamics "In"-"PhysOut" -! !--- COODRE ORO diagnostics real (kind=kind_phys), pointer :: zmtb(:) => null() ! real (kind=kind_phys), pointer :: zogw(:) => null() ! @@ -1475,7 +1516,6 @@ module GFS_typedefs real (kind=kind_phys), pointer :: tau_tofd(:) => null() ! !---vay-2018 UGWP-diagnostics - !--- Output diagnostics for coupled chemistry #ifdef CCPP integer :: ndust !< number of dust bins for diagnostics @@ -1510,303 +1550,313 @@ module GFS_typedefs !! type GFS_interstitial_type - real (kind=kind_phys), pointer :: adjnirbmd(:) => null() !< - real (kind=kind_phys), pointer :: adjnirbmu(:) => null() !< - real (kind=kind_phys), pointer :: adjnirdfd(:) => null() !< - real (kind=kind_phys), pointer :: adjnirdfu(:) => null() !< - real (kind=kind_phys), pointer :: adjvisbmd(:) => null() !< - real (kind=kind_phys), pointer :: adjvisbmu(:) => null() !< - real (kind=kind_phys), pointer :: adjvisdfu(:) => null() !< - real (kind=kind_phys), pointer :: adjvisdfd(:) => null() !< - real (kind=kind_phys), pointer :: aerodp(:,:) => null() !< - real (kind=kind_phys), pointer :: alb1d(:) => null() !< - real (kind=kind_phys), pointer :: bexp1d(:) => null() !< - real (kind=kind_phys), pointer :: cd(:) => null() !< - real (kind=kind_phys), pointer :: cd_ice(:) => null() !< - real (kind=kind_phys), pointer :: cd_land(:) => null() !< - real (kind=kind_phys), pointer :: cd_ocean(:) => null() !< - real (kind=kind_phys), pointer :: cdq(:) => null() !< - real (kind=kind_phys), pointer :: cdq_ice(:) => null() !< - real (kind=kind_phys), pointer :: cdq_land(:) => null() !< - real (kind=kind_phys), pointer :: cdq_ocean(:) => null() !< - real (kind=kind_phys), pointer :: cf_upi(:,:) => null() !< - real (kind=kind_phys), pointer :: chh_ice(:) => null() !< - real (kind=kind_phys), pointer :: chh_land(:) => null() !< - real (kind=kind_phys), pointer :: chh_ocean(:) => null() !< - real (kind=kind_phys), pointer :: clcn(:,:) => null() !< - real (kind=kind_phys), pointer :: cldf(:) => null() !< - real (kind=kind_phys), pointer :: cldsa(:,:) => null() !< - real (kind=kind_phys), pointer :: cldtaulw(:,:) => null() !< - real (kind=kind_phys), pointer :: cldtausw(:,:) => null() !< - real (kind=kind_phys), pointer :: cld1d(:) => null() !< - real (kind=kind_phys), pointer :: clouds(:,:,:) => null() !< - real (kind=kind_phys), pointer :: clw(:,:,:) => null() !< - real (kind=kind_phys), pointer :: clw_surf(:) => null() !< - real (kind=kind_phys), pointer :: clx(:,:) => null() !< - real (kind=kind_phys), pointer :: cmm_ice(:) => null() !< - real (kind=kind_phys), pointer :: cmm_land(:) => null() !< - real (kind=kind_phys), pointer :: cmm_ocean(:) => null() !< - real (kind=kind_phys), pointer :: cndm_surf(:) => null() !< - real (kind=kind_phys), pointer :: cnv_dqldt(:,:) => null() !< - real (kind=kind_phys), pointer :: cnv_fice(:,:) => null() !< - real (kind=kind_phys), pointer :: cnv_mfd(:,:) => null() !< - real (kind=kind_phys), pointer :: cnv_ndrop(:,:) => null() !< - real (kind=kind_phys), pointer :: cnv_nice(:,:) => null() !< - real (kind=kind_phys), pointer :: cnvc(:,:) => null() !< - real (kind=kind_phys), pointer :: cnvw(:,:) => null() !< - real (kind=kind_phys), pointer :: ctei_r(:) => null() !< - real (kind=kind_phys), pointer :: ctei_rml(:) => null() !< - real (kind=kind_phys), pointer :: cumabs(:) => null() !< - real (kind=kind_phys), pointer :: dd_mf(:,:) => null() !< - real (kind=kind_phys), pointer :: de_lgth(:) => null() !< - real (kind=kind_phys), pointer :: del(:,:) => null() !< - real (kind=kind_phys), pointer :: del_gz(:,:) => null() !< - real (kind=kind_phys), pointer :: delr(:,:) => null() !< - real (kind=kind_phys), pointer :: dkt(:,:) => null() !< - real (kind=kind_phys), pointer :: dlength(:) => null() !< - real (kind=kind_phys), pointer :: dqdt(:,:,:) => null() !< - real (kind=kind_phys), pointer :: dqsfc1(:) => null() !< - real (kind=kind_phys), pointer :: drain(:) => null() !< - real (kind=kind_phys), pointer :: dtdt(:,:) => null() !< - real (kind=kind_phys), pointer :: dtdtc(:,:) => null() !< - real (kind=kind_phys), pointer :: dtsfc1(:) => null() !< - real (kind=kind_phys), pointer :: dtzm(:) => null() !< - real (kind=kind_phys), pointer :: dt_mf(:,:) => null() !< - real (kind=kind_phys), pointer :: dudt(:,:) => null() !< - real (kind=kind_phys), pointer :: dusfcg(:) => null() !< - real (kind=kind_phys), pointer :: dusfc1(:) => null() !< - real (kind=kind_phys), pointer :: dvdftra(:,:,:) => null() !< - real (kind=kind_phys), pointer :: dvdt(:,:) => null() !< - real (kind=kind_phys), pointer :: dvsfcg(:) => null() !< - real (kind=kind_phys), pointer :: dvsfc1(:) => null() !< - real (kind=kind_phys), pointer :: dzlyr(:,:) => null() !< - real (kind=kind_phys), pointer :: elvmax(:) => null() !< - real (kind=kind_phys), pointer :: ep1d(:) => null() !< - real (kind=kind_phys), pointer :: ep1d_ice(:) => null() !< - real (kind=kind_phys), pointer :: ep1d_land(:) => null() !< - real (kind=kind_phys), pointer :: ep1d_ocean(:) => null() !< - real (kind=kind_phys), pointer :: evap(:) => null() !< - real (kind=kind_phys), pointer :: evap_ice(:) => null() !< - real (kind=kind_phys), pointer :: evap_land(:) => null() !< - real (kind=kind_phys), pointer :: evap_ocean(:) => null() !< - real (kind=kind_phys), pointer :: evbs(:) => null() !< - real (kind=kind_phys), pointer :: evcw(:) => null() !< - real (kind=kind_phys), pointer :: faerlw(:,:,:,:) => null() !< - real (kind=kind_phys), pointer :: faersw(:,:,:,:) => null() !< - real (kind=kind_phys), pointer :: ffhh_ice(:) => null() !< - real (kind=kind_phys), pointer :: ffhh_land(:) => null() !< - real (kind=kind_phys), pointer :: ffhh_ocean(:) => null() !< - real (kind=kind_phys), pointer :: fh2(:) => null() !< - real (kind=kind_phys), pointer :: fh2_ice(:) => null() !< - real (kind=kind_phys), pointer :: fh2_land(:) => null() !< - real (kind=kind_phys), pointer :: fh2_ocean(:) => null() !< - logical, pointer :: flag_cice(:) => null() !< - logical, pointer :: flag_guess(:) => null() !< - logical, pointer :: flag_iter(:) => null() !< - real (kind=kind_phys), pointer :: ffmm_ice(:) => null() !< - real (kind=kind_phys), pointer :: ffmm_land(:) => null() !< - real (kind=kind_phys), pointer :: ffmm_ocean(:) => null() !< - real (kind=kind_phys), pointer :: fm10(:) => null() !< - real (kind=kind_phys), pointer :: fm10_ice(:) => null() !< - real (kind=kind_phys), pointer :: fm10_land(:) => null() !< - real (kind=kind_phys), pointer :: fm10_ocean(:) => null() !< - real (kind=kind_phys) :: frain !< - real (kind=kind_phys), pointer :: frland(:) => null() !< - real (kind=kind_phys), pointer :: fscav(:) => null() !< - real (kind=kind_phys), pointer :: fswtr(:) => null() !< - real (kind=kind_phys), pointer :: gabsbdlw(:) => null() !< - real (kind=kind_phys), pointer :: gamma(:) => null() !< - real (kind=kind_phys), pointer :: gamq(:) => null() !< - real (kind=kind_phys), pointer :: gamt(:) => null() !< - real (kind=kind_phys), pointer :: gasvmr(:,:,:) => null() !< - real (kind=kind_phys), pointer :: gflx(:) => null() !< - real (kind=kind_phys), pointer :: gflx_ice(:) => null() !< - real (kind=kind_phys), pointer :: gflx_land(:) => null() !< - real (kind=kind_phys), pointer :: gflx_ocean(:) => null() !< - real (kind=kind_phys), pointer :: graupelmp(:) => null() !< - real (kind=kind_phys), pointer :: gwdcu(:,:) => null() !< - real (kind=kind_phys), pointer :: gwdcv(:,:) => null() !< - integer :: h2o_coeff !< - real (kind=kind_phys), pointer :: h2o_pres(:) => null() !< - real (kind=kind_phys), pointer :: hflx(:) => null() !< - real (kind=kind_phys), pointer :: hflx_ice(:) => null() !< - real (kind=kind_phys), pointer :: hflx_land(:) => null() !< - real (kind=kind_phys), pointer :: hflx_ocean(:) => null() !< - real (kind=kind_phys), pointer :: hprime1(:) => null() !< - real (kind=kind_phys), pointer :: icemp(:) => null() !< - logical, pointer :: dry(:) => null() !< - integer, pointer :: idxday(:) => null() !< - logical, pointer :: icy(:) => null() !< - logical, pointer :: lake(:) => null() !< - logical, pointer :: ocean(:) => null() !< - integer :: ipr !< - integer, pointer :: islmsk(:) => null() !< - integer, pointer :: islmsk_cice(:) => null() !< - integer :: itc !< - logical, pointer :: wet(:) => null() !< - integer :: kb !< - integer, pointer :: kbot(:) => null() !< - integer, pointer :: kcnv(:) => null() !< - integer :: kd !< - integer, pointer :: kinver(:) => null() !< - integer, pointer :: kpbl(:) => null() !< - integer :: kt !< - integer, pointer :: ktop(:) => null() !< - integer :: latidxprnt !< - integer :: levi !< - integer :: levh2o !< - integer :: levozp !< - integer :: lmk !< - integer :: lmp !< - integer, pointer :: mbota(:,:) => null() !< - logical :: mg3_as_mg2 !< - integer, pointer :: mtopa(:,:) => null() !< - integer :: nbdlw !< - integer :: nbdsw !< - real (kind=kind_phys), pointer :: ncgl(:,:) => null() !< - real (kind=kind_phys), pointer :: ncpi(:,:) => null() !< - real (kind=kind_phys), pointer :: ncpl(:,:) => null() !< - real (kind=kind_phys), pointer :: ncpr(:,:) => null() !< - real (kind=kind_phys), pointer :: ncps(:,:) => null() !< - integer :: ncstrac !< - integer :: nday !< - integer :: nf_aelw !< - integer :: nf_aesw !< - integer :: nn !< - integer :: nncl !< - integer :: nsamftrac !< - integer :: nscav !< - integer :: nspc1 !< - integer :: ntiwx !< - integer :: ntk !< - integer :: ntkev !< - integer :: nvdiff !< - real (kind=kind_phys), pointer :: oa4(:,:) => null() !< - real (kind=kind_phys), pointer :: oc(:) => null() !< - real (kind=kind_phys), pointer :: olyr(:,:) => null() !< - logical , pointer :: otspt(:,:) => null() !< - integer :: oz_coeff !< - integer :: oz_coeffp5 !< - real (kind=kind_phys), pointer :: oz_pres(:) => null() !< - logical :: phys_hydrostatic !< - real (kind=kind_phys), pointer :: plvl(:,:) => null() !< - real (kind=kind_phys), pointer :: plyr(:,:) => null() !< - real (kind=kind_phys), pointer :: prcpmp(:) => null() !< - real (kind=kind_phys), pointer :: prnum(:,:) => null() !< - real (kind=kind_phys), pointer :: qgl(:,:) => null() !< - real (kind=kind_phys), pointer :: qicn(:,:) => null() !< - real (kind=kind_phys), pointer :: qlcn(:,:) => null() !< - real (kind=kind_phys), pointer :: qlyr(:,:) => null() !< - real (kind=kind_phys), pointer :: qrn(:,:) => null() !< - real (kind=kind_phys), pointer :: qsnw(:,:) => null() !< - real (kind=kind_phys), pointer :: qss(:) => null() !< - real (kind=kind_phys), pointer :: qss_ice(:) => null() !< - real (kind=kind_phys), pointer :: qss_land(:) => null() !< - real (kind=kind_phys), pointer :: qss_ocean(:) => null() !< - real (kind=kind_phys) :: raddt !< - real (kind=kind_phys), pointer :: rainmp(:) => null() !< - real (kind=kind_phys), pointer :: raincd(:) => null() !< - real (kind=kind_phys), pointer :: raincs(:) => null() !< - real (kind=kind_phys), pointer :: rainmcadj(:) => null() !< - real (kind=kind_phys), pointer :: rainp(:,:) => null() !< - real (kind=kind_phys), pointer :: rb(:) => null() !< - real (kind=kind_phys), pointer :: rb_ice(:) => null() !< - real (kind=kind_phys), pointer :: rb_land(:) => null() !< - real (kind=kind_phys), pointer :: rb_ocean(:) => null() !< - logical :: reset - real (kind=kind_phys), pointer :: rhc(:,:) => null() !< - real (kind=kind_phys), pointer :: runoff(:) => null() !< - real (kind=kind_phys), pointer :: save_q(:,:,:) => null() !< - real (kind=kind_phys), pointer :: save_t(:,:) => null() !< - real (kind=kind_phys), pointer :: save_u(:,:) => null() !< - real (kind=kind_phys), pointer :: save_v(:,:) => null() !< - real (kind=kind_phys), pointer :: sbsno(:) => null() !< - type (cmpfsw_type), pointer :: scmpsw(:) => null() !< - real (kind=kind_phys), pointer :: sfcalb(:,:) => null() !< - real (kind=kind_phys), pointer :: sigma(:) => null() !< - real (kind=kind_phys), pointer :: sigmaf(:) => null() !< - real (kind=kind_phys), pointer :: sigmafrac(:,:) => null() !< - real (kind=kind_phys), pointer :: sigmatot(:,:) => null() !< - logical :: skip_macro !< - integer, pointer :: slopetype(:) => null() !< - real (kind=kind_phys), pointer :: snowc(:) => null() !< - real (kind=kind_phys), pointer :: snowd_ice(:) => null() !< - real (kind=kind_phys), pointer :: snowd_land(:) => null() !< - real (kind=kind_phys), pointer :: snowd_ocean(:) => null() !< - real (kind=kind_phys), pointer :: snohf(:) => null() !< - real (kind=kind_phys), pointer :: snowmp(:) => null() !< - real (kind=kind_phys), pointer :: snowmt(:) => null() !< - integer, pointer :: soiltype(:) => null() !< - real (kind=kind_phys), pointer :: stress(:) => null() !< - real (kind=kind_phys), pointer :: stress_ice(:) => null() !< - real (kind=kind_phys), pointer :: stress_land(:) => null() !< - real (kind=kind_phys), pointer :: stress_ocean(:) => null() !< - real (kind=kind_phys), pointer :: theta(:) => null() !< - real (kind=kind_phys), pointer :: tice(:) => null() !< - real (kind=kind_phys), pointer :: tlvl(:,:) => null() !< - real (kind=kind_phys), pointer :: tlyr(:,:) => null() !< - real (kind=kind_phys), pointer :: tprcp_ice(:) => null() !< - real (kind=kind_phys), pointer :: tprcp_land(:) => null() !< - real (kind=kind_phys), pointer :: tprcp_ocean(:) => null() !< - integer :: tracers_start_index !< - integer :: tracers_total !< - integer :: tracers_water !< - logical :: trans_aero !< - real (kind=kind_phys), pointer :: trans(:) => null() !< - real (kind=kind_phys), pointer :: tseal(:) => null() !< - real (kind=kind_phys), pointer :: tsfa(:) => null() !< - real (kind=kind_phys), pointer :: tsfc_ice(:) => null() !< - real (kind=kind_phys), pointer :: tsfc_land(:) => null() !< - real (kind=kind_phys), pointer :: tsfc_ocean(:) => null() !< - real (kind=kind_phys), pointer :: tsfg(:) => null() !< - real (kind=kind_phys), pointer :: tsnow(:) => null() !< - real (kind=kind_phys), pointer :: tsurf(:) => null() !< - real (kind=kind_phys), pointer :: tsurf_ice(:) => null() !< - real (kind=kind_phys), pointer :: tsurf_land(:) => null() !< - real (kind=kind_phys), pointer :: tsurf_ocean(:) => null() !< - real (kind=kind_phys), pointer :: ud_mf(:,:) => null() !< - real (kind=kind_phys), pointer :: ulwsfc_cice(:) => null() !< - real (kind=kind_phys), pointer :: dusfc_cice(:) => null() !< - real (kind=kind_phys), pointer :: dvsfc_cice(:) => null() !< - real (kind=kind_phys), pointer :: dqsfc_cice(:) => null() !< - real (kind=kind_phys), pointer :: dtsfc_cice(:) => null() !< - real (kind=kind_phys), pointer :: uustar_ice(:) => null() !< - real (kind=kind_phys), pointer :: uustar_land(:) => null() !< - real (kind=kind_phys), pointer :: uustar_ocean(:) => null() !< - real (kind=kind_phys), pointer :: vdftra(:,:,:) => null() !< - real (kind=kind_phys), pointer :: vegf1d(:) => null() !< - integer, pointer :: vegtype(:) => null() !< - real (kind=kind_phys), pointer :: w_upi(:,:) => null() !< - real (kind=kind_phys), pointer :: wcbmax(:) => null() !< - real (kind=kind_phys), pointer :: weasd_ocean(:) => null() !< - real (kind=kind_phys), pointer :: weasd_land(:) => null() !< - real (kind=kind_phys), pointer :: weasd_ice(:) => null() !< - real (kind=kind_phys), pointer :: wind(:) => null() !< - real (kind=kind_phys), pointer :: work1(:) => null() !< - real (kind=kind_phys), pointer :: work2(:) => null() !< - real (kind=kind_phys), pointer :: work3(:) => null() !< - real (kind=kind_phys), pointer :: xcosz(:) => null() !< - real (kind=kind_phys), pointer :: xlai1d(:) => null() !< - real (kind=kind_phys), pointer :: xmu(:) => null() !< - real (kind=kind_phys), pointer :: z01d(:) => null() !< - real (kind=kind_phys), pointer :: zorl_ice(:) => null() !< - real (kind=kind_phys), pointer :: zorl_land(:) => null() !< - real (kind=kind_phys), pointer :: zorl_ocean(:) => null() !< - real (kind=kind_phys), pointer :: zt1d(:) => null() !< - real (kind=kind_phys), pointer :: gw_dudt(:,:) => null() !< - real (kind=kind_phys), pointer :: gw_dvdt(:,:) => null() !< - real (kind=kind_phys), pointer :: gw_dtdt(:,:) => null() !< - real (kind=kind_phys), pointer :: gw_kdis(:,:) => null() !< - real (kind=kind_phys), pointer :: tau_tofd(:) => null() !< instantaneous momentum flux due to TOFD - real (kind=kind_phys), pointer :: tau_mtb(:) => null() !< instantaneous momentum flux due to mountain blocking drag - real (kind=kind_phys), pointer :: tau_ogw(:) => null() !< instantaneous momentum flux due to orographic gravity wave drag - real (kind=kind_phys), pointer :: tau_ngw(:) => null() !< instantaneous momentum flux due to nonstationary gravity waves - real (kind=kind_phys), pointer :: zmtb(:) => null() !< mountain blocking height - real (kind=kind_phys), pointer :: zlwb(:) => null() !< low level wave breaking height - real (kind=kind_phys), pointer :: zogw(:) => null() !< height of drag due to orographic gravity wave - real (kind=kind_phys), pointer :: dudt_mtb(:,:) => null() !< daily aver u-wind tend due to mountain blocking drag - real (kind=kind_phys), pointer :: dudt_ogw(:,:) => null() !< daily aver u-wind tend due to orographic gravity wave drag - real (kind=kind_phys), pointer :: dudt_tms(:,:) => null() !< daily aver u-wind tend due to TMS + real (kind=kind_phys), pointer :: adjsfculw_land(:) => null() !< + real (kind=kind_phys), pointer :: adjsfculw_ice(:) => null() !< + real (kind=kind_phys), pointer :: adjsfculw_ocean(:) => null() !< + real (kind=kind_phys), pointer :: adjnirbmd(:) => null() !< + real (kind=kind_phys), pointer :: adjnirbmu(:) => null() !< + real (kind=kind_phys), pointer :: adjnirdfd(:) => null() !< + real (kind=kind_phys), pointer :: adjnirdfu(:) => null() !< + real (kind=kind_phys), pointer :: adjvisbmd(:) => null() !< + real (kind=kind_phys), pointer :: adjvisbmu(:) => null() !< + real (kind=kind_phys), pointer :: adjvisdfu(:) => null() !< + real (kind=kind_phys), pointer :: adjvisdfd(:) => null() !< + real (kind=kind_phys), pointer :: aerodp(:,:) => null() !< + real (kind=kind_phys), pointer :: alb1d(:) => null() !< + real (kind=kind_phys), pointer :: bexp1d(:) => null() !< + real (kind=kind_phys), pointer :: cd(:) => null() !< + real (kind=kind_phys), pointer :: cd_ice(:) => null() !< + real (kind=kind_phys), pointer :: cd_land(:) => null() !< + real (kind=kind_phys), pointer :: cd_ocean(:) => null() !< + real (kind=kind_phys), pointer :: cdq(:) => null() !< + real (kind=kind_phys), pointer :: cdq_ice(:) => null() !< + real (kind=kind_phys), pointer :: cdq_land(:) => null() !< + real (kind=kind_phys), pointer :: cdq_ocean(:) => null() !< + real (kind=kind_phys), pointer :: cf_upi(:,:) => null() !< + real (kind=kind_phys), pointer :: chh_ice(:) => null() !< + real (kind=kind_phys), pointer :: chh_land(:) => null() !< + real (kind=kind_phys), pointer :: chh_ocean(:) => null() !< + real (kind=kind_phys), pointer :: clcn(:,:) => null() !< + real (kind=kind_phys), pointer :: cldf(:) => null() !< + real (kind=kind_phys), pointer :: cldsa(:,:) => null() !< + real (kind=kind_phys), pointer :: cldtaulw(:,:) => null() !< + real (kind=kind_phys), pointer :: cldtausw(:,:) => null() !< + real (kind=kind_phys), pointer :: cld1d(:) => null() !< + real (kind=kind_phys), pointer :: clouds(:,:,:) => null() !< + real (kind=kind_phys), pointer :: clw(:,:,:) => null() !< + real (kind=kind_phys), pointer :: clw_surf(:) => null() !< + real (kind=kind_phys), pointer :: clx(:,:) => null() !< + real (kind=kind_phys), pointer :: cmm_ice(:) => null() !< + real (kind=kind_phys), pointer :: cmm_land(:) => null() !< + real (kind=kind_phys), pointer :: cmm_ocean(:) => null() !< + real (kind=kind_phys), pointer :: cndm_surf(:) => null() !< + real (kind=kind_phys), pointer :: cnv_dqldt(:,:) => null() !< + real (kind=kind_phys), pointer :: cnv_fice(:,:) => null() !< + real (kind=kind_phys), pointer :: cnv_mfd(:,:) => null() !< + real (kind=kind_phys), pointer :: cnv_ndrop(:,:) => null() !< + real (kind=kind_phys), pointer :: cnv_nice(:,:) => null() !< + real (kind=kind_phys), pointer :: cnvc(:,:) => null() !< + real (kind=kind_phys), pointer :: cnvw(:,:) => null() !< + real (kind=kind_phys), pointer :: ctei_r(:) => null() !< + real (kind=kind_phys), pointer :: ctei_rml(:) => null() !< + real (kind=kind_phys), pointer :: cumabs(:) => null() !< + real (kind=kind_phys), pointer :: dd_mf(:,:) => null() !< + real (kind=kind_phys), pointer :: de_lgth(:) => null() !< + real (kind=kind_phys), pointer :: del(:,:) => null() !< + real (kind=kind_phys), pointer :: del_gz(:,:) => null() !< + real (kind=kind_phys), pointer :: delr(:,:) => null() !< + real (kind=kind_phys), pointer :: dkt(:,:) => null() !< + real (kind=kind_phys), pointer :: dlength(:) => null() !< + real (kind=kind_phys), pointer :: dqdt(:,:,:) => null() !< + real (kind=kind_phys), pointer :: dqsfc1(:) => null() !< + real (kind=kind_phys), pointer :: drain(:) => null() !< + real (kind=kind_phys), pointer :: dtdt(:,:) => null() !< + real (kind=kind_phys), pointer :: dtdtc(:,:) => null() !< + real (kind=kind_phys), pointer :: dtsfc1(:) => null() !< + real (kind=kind_phys), pointer :: dtzm(:) => null() !< + real (kind=kind_phys), pointer :: dt_mf(:,:) => null() !< + real (kind=kind_phys), pointer :: dudt(:,:) => null() !< + real (kind=kind_phys), pointer :: dusfcg(:) => null() !< + real (kind=kind_phys), pointer :: dusfc1(:) => null() !< + real (kind=kind_phys), pointer :: dvdftra(:,:,:) => null() !< + real (kind=kind_phys), pointer :: dvdt(:,:) => null() !< + real (kind=kind_phys), pointer :: dvsfcg(:) => null() !< + real (kind=kind_phys), pointer :: dvsfc1(:) => null() !< + real (kind=kind_phys), pointer :: dzlyr(:,:) => null() !< + real (kind=kind_phys), pointer :: elvmax(:) => null() !< + real (kind=kind_phys), pointer :: ep1d(:) => null() !< + real (kind=kind_phys), pointer :: ep1d_ice(:) => null() !< + real (kind=kind_phys), pointer :: ep1d_land(:) => null() !< + real (kind=kind_phys), pointer :: ep1d_ocean(:) => null() !< + real (kind=kind_phys), pointer :: evap(:) => null() !< + real (kind=kind_phys), pointer :: evap_ice(:) => null() !< + real (kind=kind_phys), pointer :: evap_land(:) => null() !< + real (kind=kind_phys), pointer :: evap_ocean(:) => null() !< + real (kind=kind_phys), pointer :: evbs(:) => null() !< + real (kind=kind_phys), pointer :: evcw(:) => null() !< + real (kind=kind_phys), pointer :: faerlw(:,:,:,:) => null() !< + real (kind=kind_phys), pointer :: faersw(:,:,:,:) => null() !< + real (kind=kind_phys), pointer :: ffhh_ice(:) => null() !< + real (kind=kind_phys), pointer :: ffhh_land(:) => null() !< + real (kind=kind_phys), pointer :: ffhh_ocean(:) => null() !< + real (kind=kind_phys), pointer :: fh2(:) => null() !< + real (kind=kind_phys), pointer :: fh2_ice(:) => null() !< + real (kind=kind_phys), pointer :: fh2_land(:) => null() !< + real (kind=kind_phys), pointer :: fh2_ocean(:) => null() !< + logical, pointer :: flag_cice(:) => null() !< + logical, pointer :: flag_guess(:) => null() !< + logical, pointer :: flag_iter(:) => null() !< + real (kind=kind_phys), pointer :: ffmm_ice(:) => null() !< + real (kind=kind_phys), pointer :: ffmm_land(:) => null() !< + real (kind=kind_phys), pointer :: ffmm_ocean(:) => null() !< + real (kind=kind_phys), pointer :: fm10(:) => null() !< + real (kind=kind_phys), pointer :: fm10_ice(:) => null() !< + real (kind=kind_phys), pointer :: fm10_land(:) => null() !< + real (kind=kind_phys), pointer :: fm10_ocean(:) => null() !< + real (kind=kind_phys) :: frain !< + real (kind=kind_phys), pointer :: frland(:) => null() !< + real (kind=kind_phys), pointer :: fscav(:) => null() !< + real (kind=kind_phys), pointer :: fswtr(:) => null() !< + real (kind=kind_phys), pointer :: gabsbdlw(:) => null() !< + real (kind=kind_phys), pointer :: gabsbdlw_ice(:) => null() !< + real (kind=kind_phys), pointer :: gabsbdlw_land(:) => null() !< + real (kind=kind_phys), pointer :: gabsbdlw_ocean(:) => null() !< + real (kind=kind_phys), pointer :: gamma(:) => null() !< + real (kind=kind_phys), pointer :: gamq(:) => null() !< + real (kind=kind_phys), pointer :: gamt(:) => null() !< + real (kind=kind_phys), pointer :: gasvmr(:,:,:) => null() !< + real (kind=kind_phys), pointer :: gflx(:) => null() !< + real (kind=kind_phys), pointer :: gflx_ice(:) => null() !< + real (kind=kind_phys), pointer :: gflx_land(:) => null() !< + real (kind=kind_phys), pointer :: gflx_ocean(:) => null() !< + real (kind=kind_phys), pointer :: graupelmp(:) => null() !< + real (kind=kind_phys), pointer :: gwdcu(:,:) => null() !< + real (kind=kind_phys), pointer :: gwdcv(:,:) => null() !< + integer :: h2o_coeff !< + real (kind=kind_phys), pointer :: h2o_pres(:) => null() !< + real (kind=kind_phys), pointer :: hflx(:) => null() !< + real (kind=kind_phys), pointer :: hflx_ice(:) => null() !< + real (kind=kind_phys), pointer :: hflx_land(:) => null() !< + real (kind=kind_phys), pointer :: hflx_ocean(:) => null() !< + real (kind=kind_phys), pointer :: icemp(:) => null() !< + logical, pointer :: dry(:) => null() !< + integer, pointer :: idxday(:) => null() !< + logical, pointer :: icy(:) => null() !< + logical, pointer :: lake(:) => null() !< + logical, pointer :: ocean(:) => null() !< + integer :: ipr !< + integer, pointer :: islmsk(:) => null() !< + integer, pointer :: islmsk_cice(:) => null() !< + integer :: itc !< + logical, pointer :: wet(:) => null() !< + integer :: kb !< + integer, pointer :: kbot(:) => null() !< + integer, pointer :: kcnv(:) => null() !< + integer :: kd !< + integer, pointer :: kinver(:) => null() !< + integer, pointer :: kpbl(:) => null() !< + integer :: kt !< + integer, pointer :: ktop(:) => null() !< + integer :: latidxprnt !< + integer :: levi !< + integer :: levh2o !< + integer :: levozp !< + integer :: lmk !< + integer :: lmp !< + integer, pointer :: mbota(:,:) => null() !< + logical :: mg3_as_mg2 !< + integer, pointer :: mtopa(:,:) => null() !< + integer :: nbdlw !< + integer :: nbdsw !< + real (kind=kind_phys), pointer :: ncgl(:,:) => null() !< + real (kind=kind_phys), pointer :: ncpi(:,:) => null() !< + real (kind=kind_phys), pointer :: ncpl(:,:) => null() !< + real (kind=kind_phys), pointer :: ncpr(:,:) => null() !< + real (kind=kind_phys), pointer :: ncps(:,:) => null() !< + integer :: ncstrac !< + integer :: nday !< + integer :: nf_aelw !< + integer :: nf_aesw !< + integer :: nn !< + integer :: nncl !< + integer :: nsamftrac !< + integer :: nscav !< + integer :: nspc1 !< + integer :: ntiwx !< + integer :: ntk !< + integer :: ntkev !< + integer :: nvdiff !< + real (kind=kind_phys), pointer :: oa4(:,:) => null() !< + real (kind=kind_phys), pointer :: oc(:) => null() !< + real (kind=kind_phys), pointer :: olyr(:,:) => null() !< + logical , pointer :: otspt(:,:) => null() !< + integer :: oz_coeff !< + integer :: oz_coeffp5 !< + real (kind=kind_phys), pointer :: oz_pres(:) => null() !< + logical :: phys_hydrostatic !< + real (kind=kind_phys), pointer :: plvl(:,:) => null() !< + real (kind=kind_phys), pointer :: plyr(:,:) => null() !< + real (kind=kind_phys), pointer :: prcpmp(:) => null() !< + real (kind=kind_phys), pointer :: prnum(:,:) => null() !< + real (kind=kind_phys), pointer :: q2mp(:) => null() !< + real (kind=kind_phys), pointer :: qgl(:,:) => null() !< + real (kind=kind_phys), pointer :: qicn(:,:) => null() !< + real (kind=kind_phys), pointer :: qlcn(:,:) => null() !< + real (kind=kind_phys), pointer :: qlyr(:,:) => null() !< + real (kind=kind_phys), pointer :: qrn(:,:) => null() !< + real (kind=kind_phys), pointer :: qsnw(:,:) => null() !< + real (kind=kind_phys), pointer :: qss(:) => null() !< + real (kind=kind_phys), pointer :: qss_ice(:) => null() !< + real (kind=kind_phys), pointer :: qss_land(:) => null() !< + real (kind=kind_phys), pointer :: qss_ocean(:) => null() !< + real (kind=kind_phys) :: raddt !< + real (kind=kind_phys), pointer :: rainmp(:) => null() !< + real (kind=kind_phys), pointer :: raincd(:) => null() !< + real (kind=kind_phys), pointer :: raincs(:) => null() !< + real (kind=kind_phys), pointer :: rainmcadj(:) => null() !< + real (kind=kind_phys), pointer :: rainp(:,:) => null() !< + real (kind=kind_phys), pointer :: rb(:) => null() !< + real (kind=kind_phys), pointer :: rb_ice(:) => null() !< + real (kind=kind_phys), pointer :: rb_land(:) => null() !< + real (kind=kind_phys), pointer :: rb_ocean(:) => null() !< + logical :: reset !< + real (kind=kind_phys), pointer :: rhc(:,:) => null() !< + real (kind=kind_phys), pointer :: runoff(:) => null() !< + real (kind=kind_phys), pointer :: save_q(:,:,:) => null() !< + real (kind=kind_phys), pointer :: save_t(:,:) => null() !< + real (kind=kind_phys), pointer :: save_u(:,:) => null() !< + real (kind=kind_phys), pointer :: save_v(:,:) => null() !< + real (kind=kind_phys), pointer :: sbsno(:) => null() !< + type (cmpfsw_type), pointer :: scmpsw(:) => null() !< + real (kind=kind_phys), pointer :: semis_ice(:) => null() !< + real (kind=kind_phys), pointer :: semis_land(:) => null() !< + real (kind=kind_phys), pointer :: semis_ocean(:) => null() !< + real (kind=kind_phys), pointer :: sfcalb(:,:) => null() !< + real (kind=kind_phys), pointer :: sigma(:) => null() !< + real (kind=kind_phys), pointer :: sigmaf(:) => null() !< + real (kind=kind_phys), pointer :: sigmafrac(:,:) => null() !< + real (kind=kind_phys), pointer :: sigmatot(:,:) => null() !< + logical :: skip_macro !< + integer, pointer :: slopetype(:) => null() !< + real (kind=kind_phys), pointer :: snowc(:) => null() !< + real (kind=kind_phys), pointer :: snowd_ice(:) => null() !< + real (kind=kind_phys), pointer :: snowd_land(:) => null() !< + real (kind=kind_phys), pointer :: snowd_ocean(:) => null() !< + real (kind=kind_phys), pointer :: snohf(:) => null() !< + real (kind=kind_phys), pointer :: snowmp(:) => null() !< + real (kind=kind_phys), pointer :: snowmt(:) => null() !< + integer, pointer :: soiltype(:) => null() !< + real (kind=kind_phys), pointer :: stress(:) => null() !< + real (kind=kind_phys), pointer :: stress_ice(:) => null() !< + real (kind=kind_phys), pointer :: stress_land(:) => null() !< + real (kind=kind_phys), pointer :: stress_ocean(:) => null() !< + real (kind=kind_phys), pointer :: t2mmp(:) => null() !< + real (kind=kind_phys), pointer :: theta(:) => null() !< + real (kind=kind_phys), pointer :: tice(:) => null() !< + real (kind=kind_phys), pointer :: tlvl(:,:) => null() !< + real (kind=kind_phys), pointer :: tlyr(:,:) => null() !< + real (kind=kind_phys), pointer :: tprcp_ice(:) => null() !< + real (kind=kind_phys), pointer :: tprcp_land(:) => null() !< + real (kind=kind_phys), pointer :: tprcp_ocean(:) => null() !< + integer :: tracers_start_index !< + integer :: tracers_total !< + integer :: tracers_water !< + logical :: trans_aero !< + real (kind=kind_phys), pointer :: trans(:) => null() !< + real (kind=kind_phys), pointer :: tseal(:) => null() !< + real (kind=kind_phys), pointer :: tsfa(:) => null() !< + real (kind=kind_phys), pointer :: tsfc_ice(:) => null() !< + real (kind=kind_phys), pointer :: tsfc_land(:) => null() !< + real (kind=kind_phys), pointer :: tsfc_ocean(:) => null() !< + real (kind=kind_phys), pointer :: tsfg(:) => null() !< + real (kind=kind_phys), pointer :: tsnow(:) => null() !< + real (kind=kind_phys), pointer :: tsurf(:) => null() !< + real (kind=kind_phys), pointer :: tsurf_ice(:) => null() !< + real (kind=kind_phys), pointer :: tsurf_land(:) => null() !< + real (kind=kind_phys), pointer :: tsurf_ocean(:) => null() !< + real (kind=kind_phys), pointer :: ud_mf(:,:) => null() !< + real (kind=kind_phys), pointer :: ulwsfc_cice(:) => null() !< + real (kind=kind_phys), pointer :: dusfc_cice(:) => null() !< + real (kind=kind_phys), pointer :: dvsfc_cice(:) => null() !< + real (kind=kind_phys), pointer :: dqsfc_cice(:) => null() !< + real (kind=kind_phys), pointer :: dtsfc_cice(:) => null() !< + real (kind=kind_phys), pointer :: uustar_ice(:) => null() !< + real (kind=kind_phys), pointer :: uustar_land(:) => null() !< + real (kind=kind_phys), pointer :: uustar_ocean(:) => null() !< + real (kind=kind_phys), pointer :: vdftra(:,:,:) => null() !< + real (kind=kind_phys), pointer :: vegf1d(:) => null() !< + integer, pointer :: vegtype(:) => null() !< + real (kind=kind_phys), pointer :: w_upi(:,:) => null() !< + real (kind=kind_phys), pointer :: wcbmax(:) => null() !< + real (kind=kind_phys), pointer :: weasd_ocean(:) => null() !< + real (kind=kind_phys), pointer :: weasd_land(:) => null() !< + real (kind=kind_phys), pointer :: weasd_ice(:) => null() !< + real (kind=kind_phys), pointer :: wind(:) => null() !< + real (kind=kind_phys), pointer :: work1(:) => null() !< + real (kind=kind_phys), pointer :: work2(:) => null() !< + real (kind=kind_phys), pointer :: work3(:) => null() !< + real (kind=kind_phys), pointer :: xcosz(:) => null() !< + real (kind=kind_phys), pointer :: xlai1d(:) => null() !< + real (kind=kind_phys), pointer :: xmu(:) => null() !< + real (kind=kind_phys), pointer :: z01d(:) => null() !< + real (kind=kind_phys), pointer :: zorl_ice(:) => null() !< + real (kind=kind_phys), pointer :: zorl_land(:) => null() !< + real (kind=kind_phys), pointer :: zorl_ocean(:) => null() !< + real (kind=kind_phys), pointer :: zt1d(:) => null() !< + real (kind=kind_phys), pointer :: gw_dudt(:,:) => null() !< + real (kind=kind_phys), pointer :: gw_dvdt(:,:) => null() !< + real (kind=kind_phys), pointer :: gw_dtdt(:,:) => null() !< + real (kind=kind_phys), pointer :: gw_kdis(:,:) => null() !< + real (kind=kind_phys), pointer :: tau_tofd(:) => null() !< instantaneous momentum flux due to TOFD + real (kind=kind_phys), pointer :: tau_mtb(:) => null() !< instantaneous momentum flux due to mountain blocking drag + real (kind=kind_phys), pointer :: tau_ogw(:) => null() !< instantaneous momentum flux due to orographic gravity wave drag + real (kind=kind_phys), pointer :: tau_ngw(:) => null() !< instantaneous momentum flux due to nonstationary gravity waves + real (kind=kind_phys), pointer :: zmtb(:) => null() !< mountain blocking height + real (kind=kind_phys), pointer :: zlwb(:) => null() !< low level wave breaking height + real (kind=kind_phys), pointer :: zogw(:) => null() !< height of drag due to orographic gravity wave + real (kind=kind_phys), pointer :: dudt_mtb(:,:) => null() !< daily aver u-wind tend due to mountain blocking drag + real (kind=kind_phys), pointer :: dudt_ogw(:,:) => null() !< daily aver u-wind tend due to orographic gravity wave drag + real (kind=kind_phys), pointer :: dudt_tms(:,:) => null() !< daily aver u-wind tend due to TMS contains procedure :: create => interstitial_create !< allocate array data @@ -2141,11 +2191,19 @@ subroutine sfcprop_create (Sfcprop, IM, Model) allocate (Sfcprop%smcwtdxy (IM)) allocate (Sfcprop%deeprechxy (IM)) allocate (Sfcprop%rechxy (IM)) +#ifdef CCPP + allocate (Sfcprop%snicexy (IM, Model%lsnow_lsm_lbound:0)) + allocate (Sfcprop%snliqxy (IM, Model%lsnow_lsm_lbound:0)) + allocate (Sfcprop%tsnoxy (IM, Model%lsnow_lsm_lbound:0)) + allocate (Sfcprop%smoiseq (IM, Model%lsoil_lsm)) + allocate (Sfcprop%zsnsoxy (IM, Model%lsnow_lsm_lbound:Model%lsoil_lsm)) +#else allocate (Sfcprop%snicexy (IM,-2:0)) allocate (Sfcprop%snliqxy (IM,-2:0)) allocate (Sfcprop%tsnoxy (IM,-2:0)) allocate (Sfcprop%smoiseq (IM, 1:4)) allocate (Sfcprop%zsnsoxy (IM,-2:4)) +#endif Sfcprop%snowxy = clear_val Sfcprop%tvxy = clear_val @@ -2687,6 +2745,7 @@ subroutine control_initialize (Model, nlunit, fn_nml, me, master, & integer :: lsoil = 4 !< number of soil layers #ifdef CCPP integer :: lsoil_lsm = -1 !< number of soil layers internal to land surface model; -1 use lsoil + integer :: lsnow_lsm = 3 !< maximum number of snow layers internal to land surface model #endif integer :: ivegsrc = 2 !< ivegsrc = 0 => USGS, !< ivegsrc = 1 => IGBP (20 category) @@ -2719,6 +2778,9 @@ subroutine control_initialize (Model, nlunit, fn_nml, me, master, & logical :: trans_trac = .false. !< flag for convective transport of tracers (RAS, CS, or SAMF) logical :: old_monin = .false. !< flag for diff monin schemes logical :: cnvgwd = .false. !< flag for conv gravity wave drag + integer :: gwd_opt = 1 !< flag for configuring gwd scheme + !< gwd_opt = 3 : GSDdrag suite + !< gwd_opt = 33: GSDdrag suite with extra output !--- vay-2018 logical :: ldiag_ugwp = .false. !< flag for UGWP diag fields logical :: do_ugwp = .false. !< flag do UGWP+RF @@ -2790,6 +2852,8 @@ subroutine control_initialize (Model, nlunit, fn_nml, me, master, & integer :: bl_mynn_mixqt = 0 integer :: icloud_bl = 1 ! *DH + logical :: do_myjsfc = .false. !< flag for MYJ surface layer scheme + logical :: do_myjpbl = .false. !< flag for MYJ PBL scheme #endif integer :: nmtvr = 14 !< number of topographic variables such as variance etc !< used in the GWD parameterization @@ -2964,7 +3028,7 @@ subroutine control_initialize (Model, nlunit, fn_nml, me, master, & avg_max_length, & !--- land/surface model control #ifdef CCPP - lsm, lsoil, lsoil_lsm, nmtvr, ivegsrc, use_ufo, & + lsm, lsoil, lsoil_lsm, lsnow_lsm, nmtvr, ivegsrc, use_ufo, & #else lsm, lsoil, nmtvr, ivegsrc, use_ufo, & #endif @@ -2980,8 +3044,9 @@ subroutine control_initialize (Model, nlunit, fn_nml, me, master, & ! DH* TODO - move to MYNN namelist section bl_mynn_cloudpdf, bl_mynn_edmf, bl_mynn_edmf_mom, & bl_mynn_edmf_tke, bl_mynn_edmf_part, bl_mynn_cloudmix, & - bl_mynn_mixqt, icloud_bl, bl_mynn_tkeadvect, & + bl_mynn_mixqt, icloud_bl, bl_mynn_tkeadvect, gwd_opt, & ! *DH + do_myjsfc, do_myjpbl, & #endif h2o_phys, pdfcld, shcnvcw, redrag, hybedmf, satmedmf, & shinhong, do_ysu, dspheat, lheatstrg, cnvcld, & @@ -3263,6 +3328,14 @@ subroutine control_initialize (Model, nlunit, fn_nml, me, master, & else Model%lsoil_lsm = lsoil_lsm end if + if (lsnow_lsm /= 3) then + write(0,*) 'Logic error: NoahMP expects the maximum number of snow layers to be exactly 3 (see sfc_noahmp_drv.f)' + stop + else + Model%lsnow_lsm = lsnow_lsm + ! Set lower bound for LSM model, runs from negative (above surface) to surface (zero) + Model%lsnow_lsm_lbound = -Model%lsnow_lsm+1 + end if #endif Model%ivegsrc = ivegsrc Model%isot = isot @@ -3375,6 +3448,9 @@ subroutine control_initialize (Model, nlunit, fn_nml, me, master, & Model%grav_settling = grav_settling Model%icloud_bl = icloud_bl ! *DH + Model%gwd_opt = gwd_opt + Model%do_myjsfc = do_myjsfc + Model%do_myjpbl = do_myjpbl #endif !--- Rayleigh friction @@ -3406,6 +3482,12 @@ subroutine control_initialize (Model, nlunit, fn_nml, me, master, & !--- fractional grid Model%frac_grid = frac_grid +#ifdef CCPP + if (Model%frac_grid) then + write(0,*) "ERROR: CCPP has not been tested with fractional landmask turned on" + stop + end if +#endif Model%min_lakeice = min_lakeice Model%min_seaice = min_seaice Model%rho_h2o = rho_h2o @@ -3608,6 +3690,10 @@ subroutine control_initialize (Model, nlunit, fn_nml, me, master, & Model%jdat(1:8) = jdat(1:8) #ifdef CCPP Model%sec = 0 + if (Model%lsm == Model%lsm_noahmp) then + Model%yearlen = 365 + Model%julian = -9999. + endif ! DH* what happens if LTP>0? Does this have to change? ! A conversation with Yu-Tai suggests that we can probably ! eliminate LTP altogether *DH @@ -3729,13 +3815,6 @@ subroutine control_initialize (Model, nlunit, fn_nml, me, master, & elseif (Model%lsm == 0) then print *,' OSU no longer supported - job aborted' stop -#ifdef CCPP - elseif (Model%lsm == Model%lsm_ruc) then - print *,' RUC Land Surface Model used' - elseif (Model%lsm == Model%lsm_noahmp) then - print *,' Error, NOAH MP Land Surface Model not yet available in CCPP - job aborted' - stop -#else elseif (Model%lsm == Model%lsm_noahmp) then if (Model%ivegsrc /= 1) then print *,'Vegetation type must be IGBP if Noah MP is used' @@ -3759,6 +3838,10 @@ subroutine control_initialize (Model, nlunit, fn_nml, me, master, & print *,'iopt_snf = ', Model%iopt_snf print *,'iopt_tbot = ',Model%iopt_tbot print *,'iopt_stc = ', Model%iopt_stc +#ifdef CCPP + elseif (Model%lsm == Model%lsm_ruc) then + print *,' RUC Land Surface Model used' +#else elseif (Model%lsm == Model%lsm_ruc) then print *,' RUC Land Surface Model only available through CCPP - job aborted' stop @@ -3847,6 +3930,8 @@ subroutine control_initialize (Model, nlunit, fn_nml, me, master, & #ifdef CCPP elseif (Model%do_mynnedmf) then print *,' MYNN PBL scheme used' + elseif (Model%do_myjpbl)then + print *,' MYJ PBL scheme used' #endif endif if (.not. Model%shal_cnv) then @@ -4250,6 +4335,7 @@ subroutine control_print(Model) print *, ' lsoil : ', Model%lsoil #ifdef CCPP print *, ' lsoil_lsm : ', Model%lsoil_lsm + print *, ' lsnow_lsm : ', Model%lsnow_lsm #endif print *, ' ivegsrc : ', Model%ivegsrc print *, ' isot : ', Model%isot @@ -4329,6 +4415,9 @@ subroutine control_print(Model) #ifdef CCPP print *, ' do_mynnedmf : ', Model%do_mynnedmf print *, ' do_mynnsfclay : ', Model%do_mynnsfclay + print *, ' do_myjsfc : ', Model%do_myjsfc + print *, ' do_myjpbl : ', Model%do_myjpbl + print *, ' gwd_opt : ', Model%gwd_opt #endif print *, ' ' print *, 'Rayleigh friction' @@ -4674,6 +4763,19 @@ subroutine tbd_create (Tbd, IM, Model) Tbd%graupelprv = clear_val end if + if (Model%lsm == Model%lsm_noahmp) then + allocate(Tbd%draincprv (IM)) + allocate(Tbd%drainncprv (IM)) + allocate(Tbd%diceprv (IM)) + allocate(Tbd%dsnowprv (IM)) + allocate(Tbd%dgraupelprv(IM)) + Tbd%draincprv = clear_val + Tbd%drainncprv = clear_val + Tbd%diceprv = clear_val + Tbd%dsnowprv = clear_val + Tbd%dgraupelprv = clear_val + end if + !--- MYNN variables: if (Model%do_mynnedmf) then !print*,"Allocating all MYNN-EDMF variables:" @@ -4695,6 +4797,38 @@ subroutine tbd_create (Tbd, IM, Model) Tbd%qsq = clear_val Tbd%cov = clear_val end if + + ! MYJ variables + if (Model%do_myjsfc.or.Model%do_myjpbl) then + !print*,"Allocating all MYJ surface variables:" + allocate (Tbd%phy_myj_qsfc (IM)) + allocate (Tbd%phy_myj_thz0 (IM)) + allocate (Tbd%phy_myj_qz0 (IM)) + allocate (Tbd%phy_myj_uz0 (IM)) + allocate (Tbd%phy_myj_vz0 (IM)) + allocate (Tbd%phy_myj_z0base (IM)) + allocate (Tbd%phy_myj_akhs (IM)) + allocate (Tbd%phy_myj_akms (IM)) + allocate (Tbd%phy_myj_chkqlm (IM)) + allocate (Tbd%phy_myj_elflx (IM)) + allocate (Tbd%phy_myj_a1u (IM)) + allocate (Tbd%phy_myj_a1t (IM)) + allocate (Tbd%phy_myj_a1q (IM)) + !print*,"Allocating all MYJ schemes variables:" + Tbd%phy_myj_qsfc = clear_val + Tbd%phy_myj_thz0 = clear_val + Tbd%phy_myj_qz0 = clear_val + Tbd%phy_myj_uz0 = clear_val + Tbd%phy_myj_vz0 = clear_val + Tbd%phy_myj_z0base = clear_val + Tbd%phy_myj_akhs = clear_val + Tbd%phy_myj_akms = clear_val + Tbd%phy_myj_chkqlm = clear_val + Tbd%phy_myj_elflx = clear_val + Tbd%phy_myj_a1u = clear_val + Tbd%phy_myj_a1t = clear_val + Tbd%phy_myj_a1q = clear_val + end if #endif end subroutine tbd_create @@ -5014,6 +5148,43 @@ subroutine diag_create (Diag, IM, Model) Diag%exch_h = clear_val Diag%exch_m = clear_val endif + + !--- Drag Suite variables: + if (Model%gwd_opt == 33) then + !print*,"Allocating all Drag Suite variables:" + allocate (Diag%dtaux2d_ls (IM,Model%levs)) + allocate (Diag%dtauy2d_ls (IM,Model%levs)) + allocate (Diag%dtaux2d_bl (IM,Model%levs)) + allocate (Diag%dtauy2d_bl (IM,Model%levs)) + allocate (Diag%dtaux2d_ss (IM,Model%levs)) + allocate (Diag%dtauy2d_ss (IM,Model%levs)) + allocate (Diag%dtaux2d_fd (IM,Model%levs)) + allocate (Diag%dtauy2d_fd (IM,Model%levs)) + Diag%dtaux2d_ls = clear_val + Diag%dtauy2d_ls = clear_val + Diag%dtaux2d_bl = clear_val + Diag%dtauy2d_bl = clear_val + Diag%dtaux2d_ss = clear_val + Diag%dtauy2d_ss = clear_val + Diag%dtaux2d_fd = clear_val + Diag%dtauy2d_fd = clear_val + allocate (Diag%dusfc_ls (IM)) + allocate (Diag%dvsfc_ls (IM)) + allocate (Diag%dusfc_bl (IM)) + allocate (Diag%dvsfc_bl (IM)) + allocate (Diag%dusfc_ss (IM)) + allocate (Diag%dvsfc_ss (IM)) + allocate (Diag%dusfc_fd (IM)) + allocate (Diag%dvsfc_fd (IM)) + Diag%dusfc_ls = 0 + Diag%dvsfc_ls = 0 + Diag%dusfc_bl = 0 + Diag%dvsfc_bl = 0 + Diag%dusfc_ss = 0 + Diag%dvsfc_ss = 0 + Diag%dusfc_fd = 0 + Diag%dvsfc_fd = 0 + endif #endif !--- diagnostics for coupled chemistry @@ -5369,239 +5540,247 @@ subroutine interstitial_create (Interstitial, IM, Model) ! Interstitial%{nncl,nvdiff,mg3_as_mg2,nn,tracers_total,ntiwx,ntk,ntkev,otspt,nsamftrac,ncstrac,nscav} call interstitial_setup_tracers(Interstitial, Model) ! Allocate arrays - allocate (Interstitial%adjnirbmd (IM)) - allocate (Interstitial%adjnirbmu (IM)) - allocate (Interstitial%adjnirdfd (IM)) - allocate (Interstitial%adjnirdfu (IM)) - allocate (Interstitial%adjvisbmd (IM)) - allocate (Interstitial%adjvisbmu (IM)) - allocate (Interstitial%adjvisdfu (IM)) - allocate (Interstitial%adjvisdfd (IM)) - allocate (Interstitial%aerodp (IM,NSPC1)) - allocate (Interstitial%alb1d (IM)) - allocate (Interstitial%bexp1d (IM)) - allocate (Interstitial%cd (IM)) - allocate (Interstitial%cd_ice (IM)) - allocate (Interstitial%cd_land (IM)) - allocate (Interstitial%cd_ocean (IM)) - allocate (Interstitial%cdq (IM)) - allocate (Interstitial%cdq_ice (IM)) - allocate (Interstitial%cdq_land (IM)) - allocate (Interstitial%cdq_ocean (IM)) - allocate (Interstitial%chh_ice (IM)) - allocate (Interstitial%chh_land (IM)) - allocate (Interstitial%chh_ocean (IM)) - allocate (Interstitial%cldf (IM)) - allocate (Interstitial%cldsa (IM,5)) - allocate (Interstitial%cldtaulw (IM,Model%levr+LTP)) - allocate (Interstitial%cldtausw (IM,Model%levr+LTP)) - allocate (Interstitial%cld1d (IM)) - allocate (Interstitial%clouds (IM,Model%levr+LTP,NF_CLDS)) - allocate (Interstitial%clw (IM,Model%levs,Interstitial%nn)) - allocate (Interstitial%clx (IM,4)) - allocate (Interstitial%cmm_ice (IM)) - allocate (Interstitial%cmm_land (IM)) - allocate (Interstitial%cmm_ocean (IM)) - allocate (Interstitial%cnvc (IM,Model%levs)) - allocate (Interstitial%cnvw (IM,Model%levs)) - allocate (Interstitial%ctei_r (IM)) - allocate (Interstitial%ctei_rml (IM)) - allocate (Interstitial%cumabs (IM)) - allocate (Interstitial%dd_mf (IM,Model%levs)) - allocate (Interstitial%de_lgth (IM)) - allocate (Interstitial%del (IM,Model%levs)) - allocate (Interstitial%del_gz (IM,Model%levs+1)) - allocate (Interstitial%delr (IM,Model%levr+LTP)) - allocate (Interstitial%dkt (IM,Model%levs-1)) - allocate (Interstitial%dlength (IM)) - allocate (Interstitial%dqdt (IM,Model%levs,Model%ntrac)) - allocate (Interstitial%dqsfc1 (IM)) - allocate (Interstitial%drain (IM)) - allocate (Interstitial%dtdt (IM,Model%levs)) - allocate (Interstitial%dtdtc (IM,Model%levs)) - allocate (Interstitial%dtsfc1 (IM)) - allocate (Interstitial%dt_mf (IM,Model%levs)) - allocate (Interstitial%dtzm (IM)) - allocate (Interstitial%dudt (IM,Model%levs)) - allocate (Interstitial%dusfcg (IM)) - allocate (Interstitial%dusfc1 (IM)) - allocate (Interstitial%dvdt (IM,Model%levs)) - allocate (Interstitial%dvsfcg (IM)) - allocate (Interstitial%dvsfc1 (IM)) - allocate (Interstitial%dvdftra (IM,Model%levs,Interstitial%nvdiff)) - allocate (Interstitial%dzlyr (IM,Model%levr+LTP)) - allocate (Interstitial%elvmax (IM)) - allocate (Interstitial%ep1d (IM)) - allocate (Interstitial%ep1d_ice (IM)) - allocate (Interstitial%ep1d_land (IM)) - allocate (Interstitial%ep1d_ocean (IM)) - allocate (Interstitial%evap (IM)) - allocate (Interstitial%evap_ice (IM)) - allocate (Interstitial%evap_land (IM)) - allocate (Interstitial%evap_ocean (IM)) - allocate (Interstitial%evbs (IM)) - allocate (Interstitial%evcw (IM)) - allocate (Interstitial%faerlw (IM,Model%levr+LTP,NBDLW,NF_AELW)) - allocate (Interstitial%faersw (IM,Model%levr+LTP,NBDSW,NF_AESW)) - allocate (Interstitial%ffhh_ice (IM)) - allocate (Interstitial%ffhh_land (IM)) - allocate (Interstitial%ffhh_ocean (IM)) - allocate (Interstitial%fh2 (IM)) - allocate (Interstitial%fh2_ice (IM)) - allocate (Interstitial%fh2_land (IM)) - allocate (Interstitial%fh2_ocean (IM)) - allocate (Interstitial%flag_cice (IM)) - allocate (Interstitial%flag_guess (IM)) - allocate (Interstitial%flag_iter (IM)) - allocate (Interstitial%ffmm_ice (IM)) - allocate (Interstitial%ffmm_land (IM)) - allocate (Interstitial%ffmm_ocean (IM)) - allocate (Interstitial%fm10 (IM)) - allocate (Interstitial%fm10_ice (IM)) - allocate (Interstitial%fm10_land (IM)) - allocate (Interstitial%fm10_ocean (IM)) - allocate (Interstitial%frland (IM)) - allocate (Interstitial%fscav (Interstitial%nscav)) - allocate (Interstitial%fswtr (Interstitial%nscav)) - allocate (Interstitial%gabsbdlw (IM)) - allocate (Interstitial%gamma (IM)) - allocate (Interstitial%gamq (IM)) - allocate (Interstitial%gamt (IM)) - allocate (Interstitial%gasvmr (IM,Model%levr+LTP,NF_VGAS)) - allocate (Interstitial%gflx (IM)) - allocate (Interstitial%gflx_ice (IM)) - allocate (Interstitial%gflx_land (IM)) - allocate (Interstitial%gflx_ocean (IM)) - allocate (Interstitial%gwdcu (IM,Model%levs)) - allocate (Interstitial%gwdcv (IM,Model%levs)) - allocate (Interstitial%h2o_pres (levh2o)) - allocate (Interstitial%hflx (IM)) - allocate (Interstitial%hflx_ice (IM)) - allocate (Interstitial%hflx_land (IM)) - allocate (Interstitial%hflx_ocean (IM)) - allocate (Interstitial%hprime1 (IM)) - allocate (Interstitial%dry (IM)) - allocate (Interstitial%idxday (IM)) - allocate (Interstitial%icy (IM)) - allocate (Interstitial%lake (IM)) - allocate (Interstitial%ocean (IM)) - allocate (Interstitial%islmsk (IM)) - allocate (Interstitial%islmsk_cice (IM)) - allocate (Interstitial%wet (IM)) - allocate (Interstitial%kbot (IM)) - allocate (Interstitial%kcnv (IM)) - allocate (Interstitial%kinver (IM)) - allocate (Interstitial%kpbl (IM)) - allocate (Interstitial%ktop (IM)) - allocate (Interstitial%mbota (IM,3)) - allocate (Interstitial%mtopa (IM,3)) - allocate (Interstitial%oa4 (IM,4)) - allocate (Interstitial%oc (IM)) - allocate (Interstitial%olyr (IM,Model%levr+LTP)) - allocate (Interstitial%oz_pres (levozp)) - allocate (Interstitial%plvl (IM,Model%levr+1+LTP)) - allocate (Interstitial%plyr (IM,Model%levr+LTP)) - allocate (Interstitial%prnum (IM,Model%levs)) - allocate (Interstitial%qlyr (IM,Model%levr+LTP)) - allocate (Interstitial%prcpmp (IM)) - allocate (Interstitial%qss (IM)) - allocate (Interstitial%qss_ice (IM)) - allocate (Interstitial%qss_land (IM)) - allocate (Interstitial%qss_ocean (IM)) - allocate (Interstitial%raincd (IM)) - allocate (Interstitial%raincs (IM)) - allocate (Interstitial%rainmcadj (IM)) - allocate (Interstitial%rainp (IM,Model%levs)) - allocate (Interstitial%rb (IM)) - allocate (Interstitial%rb_ice (IM)) - allocate (Interstitial%rb_land (IM)) - allocate (Interstitial%rb_ocean (IM)) - allocate (Interstitial%rhc (IM,Model%levs)) - allocate (Interstitial%runoff (IM)) - allocate (Interstitial%save_q (IM,Model%levs,Model%ntrac)) - allocate (Interstitial%save_t (IM,Model%levs)) - allocate (Interstitial%save_u (IM,Model%levs)) - allocate (Interstitial%save_v (IM,Model%levs)) - allocate (Interstitial%sbsno (IM)) - allocate (Interstitial%scmpsw (IM)) - allocate (Interstitial%sfcalb (IM,NF_ALBD)) - allocate (Interstitial%sigma (IM)) - allocate (Interstitial%sigmaf (IM)) - allocate (Interstitial%sigmafrac (IM,Model%levs)) - allocate (Interstitial%sigmatot (IM,Model%levs)) - allocate (Interstitial%slopetype (IM)) - allocate (Interstitial%snowc (IM)) - allocate (Interstitial%snowd_ice (IM)) - allocate (Interstitial%snowd_land (IM)) - allocate (Interstitial%snowd_ocean(IM)) - allocate (Interstitial%snohf (IM)) - allocate (Interstitial%snowmt (IM)) - allocate (Interstitial%soiltype (IM)) - allocate (Interstitial%stress (IM)) - allocate (Interstitial%stress_ice (IM)) - allocate (Interstitial%stress_land(IM)) - allocate (Interstitial%stress_ocean(IM)) - allocate (Interstitial%theta (IM)) - allocate (Interstitial%tice (IM)) - allocate (Interstitial%tlvl (IM,Model%levr+1+LTP)) - allocate (Interstitial%tlyr (IM,Model%levr+LTP)) - allocate (Interstitial%tprcp_ice (IM)) - allocate (Interstitial%tprcp_land (IM)) - allocate (Interstitial%tprcp_ocean(IM)) - allocate (Interstitial%trans (IM)) - allocate (Interstitial%tseal (IM)) - allocate (Interstitial%tsfa (IM)) - allocate (Interstitial%tsfc_ice (IM)) - allocate (Interstitial%tsfc_land (IM)) - allocate (Interstitial%tsfc_ocean (IM)) - allocate (Interstitial%tsfg (IM)) - allocate (Interstitial%tsurf (IM)) - allocate (Interstitial%tsurf_ice (IM)) - allocate (Interstitial%tsurf_land (IM)) - allocate (Interstitial%tsurf_ocean(IM)) - allocate (Interstitial%ud_mf (IM,Model%levs)) - allocate (Interstitial%ulwsfc_cice(IM)) - allocate (Interstitial%dusfc_cice (IM)) - allocate (Interstitial%dvsfc_cice (IM)) - allocate (Interstitial%dtsfc_cice (IM)) - allocate (Interstitial%dqsfc_cice (IM)) - allocate (Interstitial%uustar_ice (IM)) - allocate (Interstitial%uustar_land(IM)) - allocate (Interstitial%uustar_ocean(IM)) - allocate (Interstitial%vdftra (IM,Model%levs,Interstitial%nvdiff)) !GJF first dimension was set as 'IX' in GFS_physics_driver - allocate (Interstitial%vegf1d (IM)) - allocate (Interstitial%vegtype (IM)) - allocate (Interstitial%wcbmax (IM)) - allocate (Interstitial%weasd_ice (IM)) - allocate (Interstitial%weasd_land (IM)) - allocate (Interstitial%weasd_ocean(IM)) - allocate (Interstitial%wind (IM)) - allocate (Interstitial%work1 (IM)) - allocate (Interstitial%work2 (IM)) - allocate (Interstitial%work3 (IM)) - allocate (Interstitial%xcosz (IM)) - allocate (Interstitial%xlai1d (IM)) - allocate (Interstitial%xmu (IM)) - allocate (Interstitial%z01d (IM)) - allocate (Interstitial%zorl_ice (IM)) - allocate (Interstitial%zorl_land (IM)) - allocate (Interstitial%zorl_ocean (IM)) - allocate (Interstitial%zt1d (IM)) + allocate (Interstitial%adjsfculw_land (IM)) + allocate (Interstitial%adjsfculw_ice (IM)) + allocate (Interstitial%adjsfculw_ocean (IM)) + allocate (Interstitial%adjnirbmd (IM)) + allocate (Interstitial%adjnirbmu (IM)) + allocate (Interstitial%adjnirdfd (IM)) + allocate (Interstitial%adjnirdfu (IM)) + allocate (Interstitial%adjvisbmd (IM)) + allocate (Interstitial%adjvisbmu (IM)) + allocate (Interstitial%adjvisdfu (IM)) + allocate (Interstitial%adjvisdfd (IM)) + allocate (Interstitial%aerodp (IM,NSPC1)) + allocate (Interstitial%alb1d (IM)) + allocate (Interstitial%bexp1d (IM)) + allocate (Interstitial%cd (IM)) + allocate (Interstitial%cd_ice (IM)) + allocate (Interstitial%cd_land (IM)) + allocate (Interstitial%cd_ocean (IM)) + allocate (Interstitial%cdq (IM)) + allocate (Interstitial%cdq_ice (IM)) + allocate (Interstitial%cdq_land (IM)) + allocate (Interstitial%cdq_ocean (IM)) + allocate (Interstitial%chh_ice (IM)) + allocate (Interstitial%chh_land (IM)) + allocate (Interstitial%chh_ocean (IM)) + allocate (Interstitial%cldf (IM)) + allocate (Interstitial%cldsa (IM,5)) + allocate (Interstitial%cldtaulw (IM,Model%levr+LTP)) + allocate (Interstitial%cldtausw (IM,Model%levr+LTP)) + allocate (Interstitial%cld1d (IM)) + allocate (Interstitial%clouds (IM,Model%levr+LTP,NF_CLDS)) + allocate (Interstitial%clw (IM,Model%levs,Interstitial%nn)) + allocate (Interstitial%clx (IM,4)) + allocate (Interstitial%cmm_ice (IM)) + allocate (Interstitial%cmm_land (IM)) + allocate (Interstitial%cmm_ocean (IM)) + allocate (Interstitial%cnvc (IM,Model%levs)) + allocate (Interstitial%cnvw (IM,Model%levs)) + allocate (Interstitial%ctei_r (IM)) + allocate (Interstitial%ctei_rml (IM)) + allocate (Interstitial%cumabs (IM)) + allocate (Interstitial%dd_mf (IM,Model%levs)) + allocate (Interstitial%de_lgth (IM)) + allocate (Interstitial%del (IM,Model%levs)) + allocate (Interstitial%del_gz (IM,Model%levs+1)) + allocate (Interstitial%delr (IM,Model%levr+LTP)) + allocate (Interstitial%dkt (IM,Model%levs-1)) + allocate (Interstitial%dlength (IM)) + allocate (Interstitial%dqdt (IM,Model%levs,Model%ntrac)) + allocate (Interstitial%dqsfc1 (IM)) + allocate (Interstitial%drain (IM)) + allocate (Interstitial%dtdt (IM,Model%levs)) + allocate (Interstitial%dtdtc (IM,Model%levs)) + allocate (Interstitial%dtsfc1 (IM)) + allocate (Interstitial%dt_mf (IM,Model%levs)) + allocate (Interstitial%dtzm (IM)) + allocate (Interstitial%dudt (IM,Model%levs)) + allocate (Interstitial%dusfcg (IM)) + allocate (Interstitial%dusfc1 (IM)) + allocate (Interstitial%dvdt (IM,Model%levs)) + allocate (Interstitial%dvsfcg (IM)) + allocate (Interstitial%dvsfc1 (IM)) + allocate (Interstitial%dvdftra (IM,Model%levs,Interstitial%nvdiff)) + allocate (Interstitial%dzlyr (IM,Model%levr+LTP)) + allocate (Interstitial%elvmax (IM)) + allocate (Interstitial%ep1d (IM)) + allocate (Interstitial%ep1d_ice (IM)) + allocate (Interstitial%ep1d_land (IM)) + allocate (Interstitial%ep1d_ocean (IM)) + allocate (Interstitial%evap (IM)) + allocate (Interstitial%evap_ice (IM)) + allocate (Interstitial%evap_land (IM)) + allocate (Interstitial%evap_ocean (IM)) + allocate (Interstitial%evbs (IM)) + allocate (Interstitial%evcw (IM)) + allocate (Interstitial%faerlw (IM,Model%levr+LTP,NBDLW,NF_AELW)) + allocate (Interstitial%faersw (IM,Model%levr+LTP,NBDSW,NF_AESW)) + allocate (Interstitial%ffhh_ice (IM)) + allocate (Interstitial%ffhh_land (IM)) + allocate (Interstitial%ffhh_ocean (IM)) + allocate (Interstitial%fh2 (IM)) + allocate (Interstitial%fh2_ice (IM)) + allocate (Interstitial%fh2_land (IM)) + allocate (Interstitial%fh2_ocean (IM)) + allocate (Interstitial%flag_cice (IM)) + allocate (Interstitial%flag_guess (IM)) + allocate (Interstitial%flag_iter (IM)) + allocate (Interstitial%ffmm_ice (IM)) + allocate (Interstitial%ffmm_land (IM)) + allocate (Interstitial%ffmm_ocean (IM)) + allocate (Interstitial%fm10 (IM)) + allocate (Interstitial%fm10_ice (IM)) + allocate (Interstitial%fm10_land (IM)) + allocate (Interstitial%fm10_ocean (IM)) + allocate (Interstitial%frland (IM)) + allocate (Interstitial%fscav (Interstitial%nscav)) + allocate (Interstitial%fswtr (Interstitial%nscav)) + allocate (Interstitial%gabsbdlw (IM)) + allocate (Interstitial%gabsbdlw_ice (IM)) + allocate (Interstitial%gabsbdlw_land (IM)) + allocate (Interstitial%gabsbdlw_ocean (IM)) + allocate (Interstitial%gamma (IM)) + allocate (Interstitial%gamq (IM)) + allocate (Interstitial%gamt (IM)) + allocate (Interstitial%gasvmr (IM,Model%levr+LTP,NF_VGAS)) + allocate (Interstitial%gflx (IM)) + allocate (Interstitial%gflx_ice (IM)) + allocate (Interstitial%gflx_land (IM)) + allocate (Interstitial%gflx_ocean (IM)) + allocate (Interstitial%gwdcu (IM,Model%levs)) + allocate (Interstitial%gwdcv (IM,Model%levs)) + allocate (Interstitial%h2o_pres (levh2o)) + allocate (Interstitial%hflx (IM)) + allocate (Interstitial%hflx_ice (IM)) + allocate (Interstitial%hflx_land (IM)) + allocate (Interstitial%hflx_ocean (IM)) + allocate (Interstitial%dry (IM)) + allocate (Interstitial%idxday (IM)) + allocate (Interstitial%icy (IM)) + allocate (Interstitial%lake (IM)) + allocate (Interstitial%ocean (IM)) + allocate (Interstitial%islmsk (IM)) + allocate (Interstitial%islmsk_cice (IM)) + allocate (Interstitial%wet (IM)) + allocate (Interstitial%kbot (IM)) + allocate (Interstitial%kcnv (IM)) + allocate (Interstitial%kinver (IM)) + allocate (Interstitial%kpbl (IM)) + allocate (Interstitial%ktop (IM)) + allocate (Interstitial%mbota (IM,3)) + allocate (Interstitial%mtopa (IM,3)) + allocate (Interstitial%oa4 (IM,4)) + allocate (Interstitial%oc (IM)) + allocate (Interstitial%olyr (IM,Model%levr+LTP)) + allocate (Interstitial%oz_pres (levozp)) + allocate (Interstitial%plvl (IM,Model%levr+1+LTP)) + allocate (Interstitial%plyr (IM,Model%levr+LTP)) + allocate (Interstitial%prnum (IM,Model%levs)) + allocate (Interstitial%qlyr (IM,Model%levr+LTP)) + allocate (Interstitial%prcpmp (IM)) + allocate (Interstitial%qss (IM)) + allocate (Interstitial%qss_ice (IM)) + allocate (Interstitial%qss_land (IM)) + allocate (Interstitial%qss_ocean (IM)) + allocate (Interstitial%raincd (IM)) + allocate (Interstitial%raincs (IM)) + allocate (Interstitial%rainmcadj (IM)) + allocate (Interstitial%rainp (IM,Model%levs)) + allocate (Interstitial%rb (IM)) + allocate (Interstitial%rb_ice (IM)) + allocate (Interstitial%rb_land (IM)) + allocate (Interstitial%rb_ocean (IM)) + allocate (Interstitial%rhc (IM,Model%levs)) + allocate (Interstitial%runoff (IM)) + allocate (Interstitial%save_q (IM,Model%levs,Model%ntrac)) + allocate (Interstitial%save_t (IM,Model%levs)) + allocate (Interstitial%save_u (IM,Model%levs)) + allocate (Interstitial%save_v (IM,Model%levs)) + allocate (Interstitial%sbsno (IM)) + allocate (Interstitial%scmpsw (IM)) + allocate (Interstitial%semis_ice (IM)) + allocate (Interstitial%semis_land (IM)) + allocate (Interstitial%semis_ocean (IM)) + allocate (Interstitial%sfcalb (IM,NF_ALBD)) + allocate (Interstitial%sigma (IM)) + allocate (Interstitial%sigmaf (IM)) + allocate (Interstitial%sigmafrac (IM,Model%levs)) + allocate (Interstitial%sigmatot (IM,Model%levs)) + allocate (Interstitial%slopetype (IM)) + allocate (Interstitial%snowc (IM)) + allocate (Interstitial%snowd_ice (IM)) + allocate (Interstitial%snowd_land (IM)) + allocate (Interstitial%snowd_ocean (IM)) + allocate (Interstitial%snohf (IM)) + allocate (Interstitial%snowmt (IM)) + allocate (Interstitial%soiltype (IM)) + allocate (Interstitial%stress (IM)) + allocate (Interstitial%stress_ice (IM)) + allocate (Interstitial%stress_land (IM)) + allocate (Interstitial%stress_ocean (IM)) + allocate (Interstitial%theta (IM)) + allocate (Interstitial%tice (IM)) + allocate (Interstitial%tlvl (IM,Model%levr+1+LTP)) + allocate (Interstitial%tlyr (IM,Model%levr+LTP)) + allocate (Interstitial%tprcp_ice (IM)) + allocate (Interstitial%tprcp_land (IM)) + allocate (Interstitial%tprcp_ocean (IM)) + allocate (Interstitial%trans (IM)) + allocate (Interstitial%tseal (IM)) + allocate (Interstitial%tsfa (IM)) + allocate (Interstitial%tsfc_ice (IM)) + allocate (Interstitial%tsfc_land (IM)) + allocate (Interstitial%tsfc_ocean (IM)) + allocate (Interstitial%tsfg (IM)) + allocate (Interstitial%tsurf (IM)) + allocate (Interstitial%tsurf_ice (IM)) + allocate (Interstitial%tsurf_land (IM)) + allocate (Interstitial%tsurf_ocean (IM)) + allocate (Interstitial%ud_mf (IM,Model%levs)) + allocate (Interstitial%ulwsfc_cice (IM)) + allocate (Interstitial%dusfc_cice (IM)) + allocate (Interstitial%dvsfc_cice (IM)) + allocate (Interstitial%dtsfc_cice (IM)) + allocate (Interstitial%dqsfc_cice (IM)) + allocate (Interstitial%uustar_ice (IM)) + allocate (Interstitial%uustar_land (IM)) + allocate (Interstitial%uustar_ocean (IM)) + allocate (Interstitial%vdftra (IM,Model%levs,Interstitial%nvdiff)) !GJF first dimension was set as 'IX' in GFS_physics_driver + allocate (Interstitial%vegf1d (IM)) + allocate (Interstitial%vegtype (IM)) + allocate (Interstitial%wcbmax (IM)) + allocate (Interstitial%weasd_ice (IM)) + allocate (Interstitial%weasd_land (IM)) + allocate (Interstitial%weasd_ocean (IM)) + allocate (Interstitial%wind (IM)) + allocate (Interstitial%work1 (IM)) + allocate (Interstitial%work2 (IM)) + allocate (Interstitial%work3 (IM)) + allocate (Interstitial%xcosz (IM)) + allocate (Interstitial%xlai1d (IM)) + allocate (Interstitial%xmu (IM)) + allocate (Interstitial%z01d (IM)) + allocate (Interstitial%zorl_ice (IM)) + allocate (Interstitial%zorl_land (IM)) + allocate (Interstitial%zorl_ocean (IM)) + allocate (Interstitial%zt1d (IM)) ! CIRES UGWP v0 - allocate (Interstitial%gw_dudt (IM,Model%levs)) - allocate (Interstitial%gw_dvdt (IM,Model%levs)) - allocate (Interstitial%gw_dtdt (IM,Model%levs)) - allocate (Interstitial%gw_kdis (IM,Model%levs)) - allocate (Interstitial%tau_mtb (IM)) - allocate (Interstitial%tau_ogw (IM)) - allocate (Interstitial%tau_tofd (IM)) - allocate (Interstitial%tau_ngw (IM)) - allocate (Interstitial%zmtb (IM)) - allocate (Interstitial%zlwb (IM)) - allocate (Interstitial%zogw (IM)) - allocate (Interstitial%dudt_mtb (IM,Model%levs)) - allocate (Interstitial%dudt_ogw (IM,Model%levs)) - allocate (Interstitial%dudt_tms (IM,Model%levs)) + allocate (Interstitial%gw_dudt (IM,Model%levs)) + allocate (Interstitial%gw_dvdt (IM,Model%levs)) + allocate (Interstitial%gw_dtdt (IM,Model%levs)) + allocate (Interstitial%gw_kdis (IM,Model%levs)) + allocate (Interstitial%tau_mtb (IM)) + allocate (Interstitial%tau_ogw (IM)) + allocate (Interstitial%tau_tofd (IM)) + allocate (Interstitial%tau_ngw (IM)) + allocate (Interstitial%zmtb (IM)) + allocate (Interstitial%zlwb (IM)) + allocate (Interstitial%zogw (IM)) + allocate (Interstitial%dudt_mtb (IM,Model%levs)) + allocate (Interstitial%dudt_ogw (IM,Model%levs)) + allocate (Interstitial%dudt_tms (IM,Model%levs)) ! ! Allocate arrays that are conditional on physics choices if (Model%imp_physics == Model%imp_physics_gfdl .or. Model%imp_physics == Model%imp_physics_thompson) then @@ -5636,8 +5815,13 @@ subroutine interstitial_create (Interstitial, IM, Model) allocate (Interstitial%ncpi (IM,Model%levs)) allocate (Interstitial%ncpl (IM,Model%levs)) end if + if (Model%lsm == Model%lsm_noahmp) then + allocate (Interstitial%t2mmp (IM)) + allocate (Interstitial%q2mp (IM)) + end if ! ! Set components that do not change + Interstitial%frain = Model%dtf/Model%dtp Interstitial%ipr = min(IM,10) Interstitial%latidxprnt = 1 Interstitial%levi = Model%levs+1 @@ -5756,19 +5940,23 @@ subroutine interstitial_setup_tracers(Interstitial, Model) if (Model%cplchm) then ! Only Zhao/Carr/Sundqvist and GFDL microphysics schemes are supported ! when coupling with chemistry. PBL diffusion of aerosols is only supported - ! for GFDL microphysics. + ! for GFDL microphysics and MG microphysics. if (Model%imp_physics == Model%imp_physics_zhao_carr) then Interstitial%nvdiff = 3 - if (Model%ntke > 0) Interstitial%nvdiff = Interstitial%nvdiff + 1 ! adding tke to the list - elseif (Model%imp_physics == Model%imp_physics_gfdl) then - if (.not. Model%trans_trac) then - Interstitial%nvdiff = 7 - if (Model%ntke > 0) Interstitial%nvdiff = Interstitial%nvdiff + 1 ! adding tke to the list + elseif (Model%imp_physics == Model%imp_physics_mg) then + if (Model%ntgl > 0) then + Interstitial%nvdiff = 12 + else + Interstitial%nvdiff = 10 endif + elseif (Model%imp_physics == Model%imp_physics_gfdl) then + Interstitial%nvdiff = 7 else write(0,*) "Only Zhao/Carr/Sundqvist and GFDL microphysics schemes are supported when coupling with chemistry" stop endif + if (Interstitial%trans_aero) Interstitial%nvdiff = Interstitial%nvdiff + Model%ntchm + if (Model%ntke > 0) Interstitial%nvdiff = Interstitial%nvdiff + 1 ! adding tke to the list endif Interstitial%ntkev = Interstitial%nvdiff @@ -5867,214 +6055,221 @@ subroutine interstitial_phys_reset (Interstitial, Model) class(GFS_interstitial_type) :: Interstitial type(GFS_control_type), intent(in) :: Model ! - Interstitial%adjnirbmd = clear_val - Interstitial%adjnirbmu = clear_val - Interstitial%adjnirdfd = clear_val - Interstitial%adjnirdfu = clear_val - Interstitial%adjvisbmd = clear_val - Interstitial%adjvisbmu = clear_val - Interstitial%adjvisdfu = clear_val - Interstitial%adjvisdfd = clear_val - Interstitial%bexp1d = clear_val - Interstitial%cd = clear_val - Interstitial%cd_ice = huge - Interstitial%cd_land = huge - Interstitial%cd_ocean = huge - Interstitial%cdq = clear_val - Interstitial%cdq_ice = huge - Interstitial%cdq_land = huge - Interstitial%cdq_ocean = huge - Interstitial%chh_ice = huge - Interstitial%chh_land = huge - Interstitial%chh_ocean = huge - Interstitial%cld1d = clear_val - Interstitial%cldf = clear_val - Interstitial%clw = clear_val - Interstitial%clw(:,:,2) = -999.9 - Interstitial%clx = clear_val - Interstitial%cmm_ice = huge - Interstitial%cmm_land = huge - Interstitial%cmm_ocean = huge - Interstitial%cnvc = clear_val - Interstitial%cnvw = clear_val - Interstitial%ctei_r = clear_val - Interstitial%ctei_rml = clear_val - Interstitial%cumabs = clear_val - Interstitial%dd_mf = clear_val - Interstitial%del = clear_val - Interstitial%del_gz = clear_val - Interstitial%dkt = clear_val - Interstitial%dlength = clear_val - Interstitial%dqdt = clear_val - Interstitial%dqsfc1 = clear_val - Interstitial%drain = clear_val - Interstitial%dt_mf = clear_val - Interstitial%dtdt = clear_val - Interstitial%dtdtc = clear_val - Interstitial%dtsfc1 = clear_val - Interstitial%dtzm = clear_val - Interstitial%dudt = clear_val - Interstitial%dusfcg = clear_val - Interstitial%dusfc1 = clear_val - Interstitial%dvdftra = clear_val - Interstitial%dvdt = clear_val - Interstitial%dvsfcg = clear_val - Interstitial%dvsfc1 = clear_val - Interstitial%elvmax = clear_val - Interstitial%ep1d = clear_val - Interstitial%ep1d_ice = huge - Interstitial%ep1d_land = huge - Interstitial%ep1d_ocean = huge - Interstitial%evap = clear_val - Interstitial%evap_ice = huge - Interstitial%evap_land = huge - Interstitial%evap_ocean = huge - Interstitial%evbs = clear_val - Interstitial%evcw = clear_val - Interstitial%ffhh_ice = huge - Interstitial%ffhh_land = huge - Interstitial%ffhh_ocean = huge - Interstitial%fh2 = clear_val - Interstitial%fh2_ice = huge - Interstitial%fh2_land = huge - Interstitial%fh2_ocean = huge - Interstitial%flag_cice = .false. - Interstitial%flag_guess = .false. - Interstitial%flag_iter = .true. - Interstitial%ffmm_ice = huge - Interstitial%ffmm_land = huge - Interstitial%ffmm_ocean = huge - Interstitial%fm10 = clear_val - Interstitial%fm10_ice = huge - Interstitial%fm10_land = huge - Interstitial%fm10_ocean = huge - Interstitial%frain = clear_val - Interstitial%frland = clear_val - Interstitial%fscav = clear_val - Interstitial%fswtr = clear_val - Interstitial%gabsbdlw = clear_val - Interstitial%gamma = clear_val - Interstitial%gamq = clear_val - Interstitial%gamt = clear_val - Interstitial%gflx = clear_val - Interstitial%gflx_ice = huge - Interstitial%gflx_land = huge - Interstitial%gflx_ocean = huge - Interstitial%gwdcu = clear_val - Interstitial%gwdcv = clear_val - Interstitial%hflx = clear_val - Interstitial%hflx_ice = huge - Interstitial%hflx_land = huge - Interstitial%hflx_ocean = huge - Interstitial%hprime1 = clear_val - Interstitial%dry = .false. - Interstitial%icy = .false. - Interstitial%lake = .false. - Interstitial%ocean = .false. - Interstitial%islmsk = 0 - Interstitial%islmsk_cice = 0 - Interstitial%wet = .false. - Interstitial%kbot = Model%levs - Interstitial%kcnv = 0 - Interstitial%kinver = Model%levs - Interstitial%kpbl = 0 - Interstitial%ktop = 1 - Interstitial%oa4 = clear_val - Interstitial%oc = clear_val - Interstitial%prcpmp = clear_val - Interstitial%prnum = clear_val - Interstitial%qss = clear_val - Interstitial%qss_ice = huge - Interstitial%qss_land = huge - Interstitial%qss_ocean = huge - Interstitial%raincd = clear_val - Interstitial%raincs = clear_val - Interstitial%rainmcadj = clear_val - Interstitial%rainp = clear_val - Interstitial%rb = clear_val - Interstitial%rb_ice = huge - Interstitial%rb_land = huge - Interstitial%rb_ocean = huge - Interstitial%rhc = clear_val - Interstitial%runoff = clear_val - Interstitial%save_q = clear_val - Interstitial%save_t = clear_val - Interstitial%save_u = clear_val - Interstitial%save_v = clear_val - Interstitial%sbsno = clear_val - Interstitial%sigma = clear_val - Interstitial%sigmaf = clear_val - Interstitial%sigmafrac = clear_val - Interstitial%sigmatot = clear_val - Interstitial%slopetype = 0 - Interstitial%snowc = clear_val - Interstitial%snowd_ice = huge - Interstitial%snowd_land = huge - Interstitial%snowd_ocean = huge - Interstitial%snohf = clear_val - Interstitial%snowmt = clear_val - Interstitial%soiltype = 0 - Interstitial%stress = clear_val - Interstitial%stress_ice = huge - Interstitial%stress_land = huge - Interstitial%stress_ocean = huge - Interstitial%theta = clear_val - Interstitial%tice = clear_val - Interstitial%tprcp_ice = huge - Interstitial%tprcp_land = huge - Interstitial%tprcp_ocean = huge - Interstitial%trans = clear_val - Interstitial%tseal = clear_val - Interstitial%tsfc_ice = huge - Interstitial%tsfc_land = huge - Interstitial%tsfc_ocean = huge - Interstitial%tsurf = clear_val - Interstitial%tsurf_ice = huge - Interstitial%tsurf_land = huge - Interstitial%tsurf_ocean = huge - Interstitial%ud_mf = clear_val - Interstitial%ulwsfc_cice = clear_val - Interstitial%dusfc_cice = clear_val - Interstitial%dvsfc_cice = clear_val - Interstitial%dtsfc_cice = clear_val - Interstitial%dqsfc_cice = clear_val - Interstitial%uustar_ice = huge - Interstitial%uustar_land = huge - Interstitial%uustar_ocean = huge - Interstitial%vdftra = clear_val - Interstitial%vegf1d = clear_val - Interstitial%vegtype = 0 - Interstitial%wcbmax = clear_val - Interstitial%weasd_ice = huge - Interstitial%weasd_land = huge - Interstitial%weasd_ocean = huge - Interstitial%wind = huge - Interstitial%work1 = clear_val - Interstitial%work2 = clear_val - Interstitial%work3 = clear_val - Interstitial%xcosz = clear_val - Interstitial%xlai1d = clear_val - Interstitial%xmu = clear_val - Interstitial%z01d = clear_val - Interstitial%zorl_ice = huge - Interstitial%zorl_land = huge - Interstitial%zorl_ocean = huge - Interstitial%zt1d = clear_val + Interstitial%adjsfculw_land = clear_val + Interstitial%adjsfculw_ice = clear_val + Interstitial%adjsfculw_ocean = clear_val + Interstitial%adjnirbmd = clear_val + Interstitial%adjnirbmu = clear_val + Interstitial%adjnirdfd = clear_val + Interstitial%adjnirdfu = clear_val + Interstitial%adjvisbmd = clear_val + Interstitial%adjvisbmu = clear_val + Interstitial%adjvisdfu = clear_val + Interstitial%adjvisdfd = clear_val + Interstitial%bexp1d = clear_val + Interstitial%cd = clear_val + Interstitial%cd_ice = huge + Interstitial%cd_land = huge + Interstitial%cd_ocean = huge + Interstitial%cdq = clear_val + Interstitial%cdq_ice = huge + Interstitial%cdq_land = huge + Interstitial%cdq_ocean = huge + Interstitial%chh_ice = huge + Interstitial%chh_land = huge + Interstitial%chh_ocean = huge + Interstitial%cld1d = clear_val + Interstitial%cldf = clear_val + Interstitial%clw = clear_val + Interstitial%clw(:,:,2) = -999.9 + Interstitial%clx = clear_val + Interstitial%cmm_ice = huge + Interstitial%cmm_land = huge + Interstitial%cmm_ocean = huge + Interstitial%cnvc = clear_val + Interstitial%cnvw = clear_val + Interstitial%ctei_r = clear_val + Interstitial%ctei_rml = clear_val + Interstitial%cumabs = clear_val + Interstitial%dd_mf = clear_val + Interstitial%del = clear_val + Interstitial%del_gz = clear_val + Interstitial%dkt = clear_val + Interstitial%dlength = clear_val + Interstitial%dqdt = clear_val + Interstitial%dqsfc1 = clear_val + Interstitial%drain = clear_val + Interstitial%dt_mf = clear_val + Interstitial%dtdt = clear_val + Interstitial%dtdtc = clear_val + Interstitial%dtsfc1 = clear_val + Interstitial%dtzm = clear_val + Interstitial%dudt = clear_val + Interstitial%dusfcg = clear_val + Interstitial%dusfc1 = clear_val + Interstitial%dvdftra = clear_val + Interstitial%dvdt = clear_val + Interstitial%dvsfcg = clear_val + Interstitial%dvsfc1 = clear_val + Interstitial%elvmax = clear_val + Interstitial%ep1d = clear_val + Interstitial%ep1d_ice = huge + Interstitial%ep1d_land = huge + Interstitial%ep1d_ocean = huge + Interstitial%evap = clear_val + Interstitial%evap_ice = huge + Interstitial%evap_land = huge + Interstitial%evap_ocean = huge + Interstitial%evbs = clear_val + Interstitial%evcw = clear_val + Interstitial%ffhh_ice = huge + Interstitial%ffhh_land = huge + Interstitial%ffhh_ocean = huge + Interstitial%fh2 = clear_val + Interstitial%fh2_ice = huge + Interstitial%fh2_land = huge + Interstitial%fh2_ocean = huge + Interstitial%flag_cice = .false. + Interstitial%flag_guess = .false. + Interstitial%flag_iter = .true. + Interstitial%ffmm_ice = huge + Interstitial%ffmm_land = huge + Interstitial%ffmm_ocean = huge + Interstitial%fm10 = clear_val + Interstitial%fm10_ice = huge + Interstitial%fm10_land = huge + Interstitial%fm10_ocean = huge + Interstitial%frland = clear_val + Interstitial%fscav = clear_val + Interstitial%fswtr = clear_val + Interstitial%gabsbdlw = clear_val + Interstitial%gabsbdlw_ice = clear_val + Interstitial%gabsbdlw_land = clear_val + Interstitial%gabsbdlw_ocean = clear_val + Interstitial%gamma = clear_val + Interstitial%gamq = clear_val + Interstitial%gamt = clear_val + Interstitial%gflx = clear_val + Interstitial%gflx_ice = zero + Interstitial%gflx_land = zero + Interstitial%gflx_ocean = zero + Interstitial%gwdcu = clear_val + Interstitial%gwdcv = clear_val + Interstitial%hflx = clear_val + Interstitial%hflx_ice = huge + Interstitial%hflx_land = huge + Interstitial%hflx_ocean = huge + Interstitial%dry = .false. + Interstitial%icy = .false. + Interstitial%lake = .false. + Interstitial%ocean = .false. + Interstitial%islmsk = 0 + Interstitial%islmsk_cice = 0 + Interstitial%wet = .false. + Interstitial%kbot = Model%levs + Interstitial%kcnv = 0 + Interstitial%kinver = Model%levs + Interstitial%kpbl = 0 + Interstitial%ktop = 1 + Interstitial%oa4 = clear_val + Interstitial%oc = clear_val + Interstitial%prcpmp = clear_val + Interstitial%prnum = clear_val + Interstitial%qss = clear_val + Interstitial%qss_ice = huge + Interstitial%qss_land = huge + Interstitial%qss_ocean = huge + Interstitial%raincd = clear_val + Interstitial%raincs = clear_val + Interstitial%rainmcadj = clear_val + Interstitial%rainp = clear_val + Interstitial%rb = clear_val + Interstitial%rb_ice = huge + Interstitial%rb_land = huge + Interstitial%rb_ocean = huge + Interstitial%rhc = clear_val + Interstitial%runoff = clear_val + Interstitial%save_q = clear_val + Interstitial%save_t = clear_val + Interstitial%save_u = clear_val + Interstitial%save_v = clear_val + Interstitial%sbsno = clear_val + Interstitial%semis_ice = clear_val + Interstitial%semis_land = clear_val + Interstitial%semis_ocean = clear_val + Interstitial%sigma = clear_val + Interstitial%sigmaf = clear_val + Interstitial%sigmafrac = clear_val + Interstitial%sigmatot = clear_val + Interstitial%slopetype = 0 + Interstitial%snowc = clear_val + Interstitial%snowd_ice = huge + Interstitial%snowd_land = huge + Interstitial%snowd_ocean = huge + Interstitial%snohf = clear_val + Interstitial%snowmt = clear_val + Interstitial%soiltype = 0 + Interstitial%stress = clear_val + Interstitial%stress_ice = huge + Interstitial%stress_land = huge + Interstitial%stress_ocean = huge + Interstitial%theta = clear_val + Interstitial%tice = clear_val + Interstitial%tprcp_ice = huge + Interstitial%tprcp_land = huge + Interstitial%tprcp_ocean = huge + Interstitial%trans = clear_val + Interstitial%tseal = clear_val + Interstitial%tsfc_ice = huge + Interstitial%tsfc_land = huge + Interstitial%tsfc_ocean = huge + Interstitial%tsurf = clear_val + Interstitial%tsurf_ice = huge + Interstitial%tsurf_land = huge + Interstitial%tsurf_ocean = huge + Interstitial%ud_mf = clear_val + Interstitial%ulwsfc_cice = clear_val + Interstitial%dusfc_cice = clear_val + Interstitial%dvsfc_cice = clear_val + Interstitial%dtsfc_cice = clear_val + Interstitial%dqsfc_cice = clear_val + Interstitial%uustar_ice = huge + Interstitial%uustar_land = huge + Interstitial%uustar_ocean = huge + Interstitial%vdftra = clear_val + Interstitial%vegf1d = clear_val + Interstitial%vegtype = 0 + Interstitial%wcbmax = clear_val + Interstitial%weasd_ice = huge + Interstitial%weasd_land = huge + Interstitial%weasd_ocean = huge + Interstitial%wind = huge + Interstitial%work1 = clear_val + Interstitial%work2 = clear_val + Interstitial%work3 = clear_val + Interstitial%xcosz = clear_val + Interstitial%xlai1d = clear_val + Interstitial%xmu = clear_val + Interstitial%z01d = clear_val + Interstitial%zorl_ice = huge + Interstitial%zorl_land = huge + Interstitial%zorl_ocean = huge + Interstitial%zt1d = clear_val ! CIRES UGWP v0 - Interstitial%gw_dudt = clear_val - Interstitial%gw_dvdt = clear_val - Interstitial%gw_dtdt = clear_val - Interstitial%gw_kdis = clear_val - Interstitial%tau_mtb = clear_val - Interstitial%tau_ogw = clear_val - Interstitial%tau_tofd = clear_val - Interstitial%tau_ngw = clear_val - Interstitial%zmtb = clear_val - Interstitial%zlwb = clear_val - Interstitial%zogw = clear_val - Interstitial%dudt_mtb = clear_val - Interstitial%dudt_ogw = clear_val - Interstitial%dudt_tms = clear_val + Interstitial%gw_dudt = clear_val + Interstitial%gw_dvdt = clear_val + Interstitial%gw_dtdt = clear_val + Interstitial%gw_kdis = clear_val + Interstitial%tau_mtb = clear_val + Interstitial%tau_ogw = clear_val + Interstitial%tau_tofd = clear_val + Interstitial%tau_ngw = clear_val + Interstitial%zmtb = clear_val + Interstitial%zlwb = clear_val + Interstitial%zogw = clear_val + Interstitial%dudt_mtb = clear_val + Interstitial%dudt_ogw = clear_val + Interstitial%dudt_tms = clear_val ! ! Reset fields that are conditional on physics choices if (Model%imp_physics == Model%imp_physics_gfdl .or. Model%imp_physics == Model%imp_physics_thompson) then @@ -6109,6 +6304,10 @@ subroutine interstitial_phys_reset (Interstitial, Model) Interstitial%ncpi = clear_val Interstitial%ncpl = clear_val end if + if (Model%lsm == Model%lsm_noahmp) then + Interstitial%t2mmp = clear_val + Interstitial%q2mp = clear_val + end if ! ! Set flag for resetting maximum hourly output fields Interstitial%reset = mod(Model%kdt-1, nint(Model%avg_max_length/Model%dtp)) == 0 @@ -6152,284 +6351,296 @@ subroutine interstitial_print(Interstitial, Model, mpirank, omprank, blkno) write (0,*) 'Interstitial%trans_aero = ', Interstitial%trans_aero ! Print all other variables write (0,*) 'Interstitial_print: values that change' - write (0,*) 'sum(Interstitial%adjnirbmd ) = ', sum(Interstitial%adjnirbmd ) - write (0,*) 'sum(Interstitial%adjnirbmu ) = ', sum(Interstitial%adjnirbmu ) - write (0,*) 'sum(Interstitial%adjnirdfd ) = ', sum(Interstitial%adjnirdfd ) - write (0,*) 'sum(Interstitial%adjnirdfu ) = ', sum(Interstitial%adjnirdfu ) - write (0,*) 'sum(Interstitial%adjvisbmd ) = ', sum(Interstitial%adjvisbmd ) - write (0,*) 'sum(Interstitial%adjvisbmu ) = ', sum(Interstitial%adjvisbmu ) - write (0,*) 'sum(Interstitial%adjvisdfu ) = ', sum(Interstitial%adjvisdfu ) - write (0,*) 'sum(Interstitial%adjvisdfd ) = ', sum(Interstitial%adjvisdfd ) - write (0,*) 'sum(Interstitial%aerodp ) = ', sum(Interstitial%aerodp ) - write (0,*) 'sum(Interstitial%alb1d ) = ', sum(Interstitial%alb1d ) - write (0,*) 'sum(Interstitial%bexp1d ) = ', sum(Interstitial%bexp1d ) - write (0,*) 'sum(Interstitial%cd ) = ', sum(Interstitial%cd ) - write (0,*) 'sum(Interstitial%cd_ice ) = ', sum(Interstitial%cd_ice ) - write (0,*) 'sum(Interstitial%cd_land ) = ', sum(Interstitial%cd_land ) - write (0,*) 'sum(Interstitial%cd_ocean ) = ', sum(Interstitial%cd_ocean ) - write (0,*) 'sum(Interstitial%cdq ) = ', sum(Interstitial%cdq ) - write (0,*) 'sum(Interstitial%cdq_ice ) = ', sum(Interstitial%cdq_ice ) - write (0,*) 'sum(Interstitial%cdq_land ) = ', sum(Interstitial%cdq_land ) - write (0,*) 'sum(Interstitial%cdq_ocean ) = ', sum(Interstitial%cdq_ocean ) - write (0,*) 'sum(Interstitial%chh_ice ) = ', sum(Interstitial%chh_ice ) - write (0,*) 'sum(Interstitial%chh_land ) = ', sum(Interstitial%chh_land ) - write (0,*) 'sum(Interstitial%chh_ocean ) = ', sum(Interstitial%chh_ocean ) - write (0,*) 'sum(Interstitial%cldf ) = ', sum(Interstitial%cldf ) - write (0,*) 'sum(Interstitial%cldsa ) = ', sum(Interstitial%cldsa ) - write (0,*) 'sum(Interstitial%cldtaulw ) = ', sum(Interstitial%cldtaulw ) - write (0,*) 'sum(Interstitial%cldtausw ) = ', sum(Interstitial%cldtausw ) - write (0,*) 'sum(Interstitial%cld1d ) = ', sum(Interstitial%cld1d ) - write (0,*) 'sum(Interstitial%clw ) = ', sum(Interstitial%clw ) - write (0,*) 'sum(Interstitial%clx ) = ', sum(Interstitial%clx ) - write (0,*) 'sum(Interstitial%clouds ) = ', sum(Interstitial%clouds ) - write (0,*) 'sum(Interstitial%cmm_ice ) = ', sum(Interstitial%cmm_ice ) - write (0,*) 'sum(Interstitial%cmm_land ) = ', sum(Interstitial%cmm_land ) - write (0,*) 'sum(Interstitial%cmm_ocean ) = ', sum(Interstitial%cmm_ocean ) - write (0,*) 'sum(Interstitial%cnvc ) = ', sum(Interstitial%cnvc ) - write (0,*) 'sum(Interstitial%cnvw ) = ', sum(Interstitial%cnvw ) - write (0,*) 'sum(Interstitial%ctei_r ) = ', sum(Interstitial%ctei_r ) - write (0,*) 'sum(Interstitial%ctei_rml ) = ', sum(Interstitial%ctei_rml ) - write (0,*) 'sum(Interstitial%cumabs ) = ', sum(Interstitial%cumabs ) - write (0,*) 'sum(Interstitial%dd_mf ) = ', sum(Interstitial%dd_mf ) - write (0,*) 'sum(Interstitial%de_lgth ) = ', sum(Interstitial%de_lgth ) - write (0,*) 'sum(Interstitial%del ) = ', sum(Interstitial%del ) - write (0,*) 'sum(Interstitial%del_gz ) = ', sum(Interstitial%del_gz ) - write (0,*) 'sum(Interstitial%delr ) = ', sum(Interstitial%delr ) - write (0,*) 'sum(Interstitial%dkt ) = ', sum(Interstitial%dkt ) - write (0,*) 'sum(Interstitial%dlength ) = ', sum(Interstitial%dlength ) - write (0,*) 'sum(Interstitial%dqdt ) = ', sum(Interstitial%dqdt ) - write (0,*) 'sum(Interstitial%dqsfc1 ) = ', sum(Interstitial%dqsfc1 ) - write (0,*) 'sum(Interstitial%drain ) = ', sum(Interstitial%drain ) - write (0,*) 'sum(Interstitial%dtdt ) = ', sum(Interstitial%dtdt ) - write (0,*) 'sum(Interstitial%dtdtc ) = ', sum(Interstitial%dtdtc ) - write (0,*) 'sum(Interstitial%dtsfc1 ) = ', sum(Interstitial%dtsfc1 ) - write (0,*) 'sum(Interstitial%dtzm ) = ', sum(Interstitial%dtzm ) - write (0,*) 'sum(Interstitial%dt_mf ) = ', sum(Interstitial%dt_mf ) - write (0,*) 'sum(Interstitial%dudt ) = ', sum(Interstitial%dudt ) - write (0,*) 'sum(Interstitial%dusfcg ) = ', sum(Interstitial%dusfcg ) - write (0,*) 'sum(Interstitial%dusfc1 ) = ', sum(Interstitial%dusfc1 ) - write (0,*) 'sum(Interstitial%dvdftra ) = ', sum(Interstitial%dvdftra ) - write (0,*) 'sum(Interstitial%dvdt ) = ', sum(Interstitial%dvdt ) - write (0,*) 'sum(Interstitial%dvsfcg ) = ', sum(Interstitial%dvsfcg ) - write (0,*) 'sum(Interstitial%dvsfc1 ) = ', sum(Interstitial%dvsfc1 ) - write (0,*) 'sum(Interstitial%dzlyr ) = ', sum(Interstitial%dzlyr ) - write (0,*) 'sum(Interstitial%elvmax ) = ', sum(Interstitial%elvmax ) - write (0,*) 'sum(Interstitial%ep1d ) = ', sum(Interstitial%ep1d ) - write (0,*) 'sum(Interstitial%ep1d_ice ) = ', sum(Interstitial%ep1d_ice ) - write (0,*) 'sum(Interstitial%ep1d_land ) = ', sum(Interstitial%ep1d_land ) - write (0,*) 'sum(Interstitial%ep1d_ocean ) = ', sum(Interstitial%ep1d_ocean ) - write (0,*) 'sum(Interstitial%evap ) = ', sum(Interstitial%evap ) - write (0,*) 'sum(Interstitial%evap_ice ) = ', sum(Interstitial%evap_ice ) - write (0,*) 'sum(Interstitial%evap_land ) = ', sum(Interstitial%evap_land ) - write (0,*) 'sum(Interstitial%evap_ocean ) = ', sum(Interstitial%evap_ocean ) - write (0,*) 'sum(Interstitial%evbs ) = ', sum(Interstitial%evbs ) - write (0,*) 'sum(Interstitial%evcw ) = ', sum(Interstitial%evcw ) - write (0,*) 'sum(Interstitial%faerlw ) = ', sum(Interstitial%faerlw ) - write (0,*) 'sum(Interstitial%faersw ) = ', sum(Interstitial%faersw ) - write (0,*) 'sum(Interstitial%ffhh_ice ) = ', sum(Interstitial%ffhh_ice ) - write (0,*) 'sum(Interstitial%ffhh_land ) = ', sum(Interstitial%ffhh_land ) - write (0,*) 'sum(Interstitial%ffhh_ocean ) = ', sum(Interstitial%ffhh_ocean ) - write (0,*) 'sum(Interstitial%fh2 ) = ', sum(Interstitial%fh2 ) - write (0,*) 'sum(Interstitial%fh2_ice ) = ', sum(Interstitial%fh2_ice ) - write (0,*) 'sum(Interstitial%fh2_land ) = ', sum(Interstitial%fh2_land ) - write (0,*) 'sum(Interstitial%fh2_ocean ) = ', sum(Interstitial%fh2_ocean ) - write (0,*) 'Interstitial%flag_cice(1) = ', Interstitial%flag_cice(1) - write (0,*) 'Interstitial%flag_guess(1) = ', Interstitial%flag_guess(1) - write (0,*) 'Interstitial%flag_iter(1) = ', Interstitial%flag_iter(1) - write (0,*) 'sum(Interstitial%ffmm_ice ) = ', sum(Interstitial%ffmm_ice ) - write (0,*) 'sum(Interstitial%ffmm_land ) = ', sum(Interstitial%ffmm_land ) - write (0,*) 'sum(Interstitial%ffmm_ocean ) = ', sum(Interstitial%ffmm_ocean ) - write (0,*) 'sum(Interstitial%fm10 ) = ', sum(Interstitial%fm10 ) - write (0,*) 'sum(Interstitial%fm10_ice ) = ', sum(Interstitial%fm10_ice ) - write (0,*) 'sum(Interstitial%fm10_land ) = ', sum(Interstitial%fm10_land ) - write (0,*) 'sum(Interstitial%fm10_ocean ) = ', sum(Interstitial%fm10_ocean ) - write (0,*) 'Interstitial%frain = ', Interstitial%frain - write (0,*) 'sum(Interstitial%frland ) = ', sum(Interstitial%frland ) - write (0,*) 'sum(Interstitial%fscav ) = ', sum(Interstitial%fscav ) - write (0,*) 'sum(Interstitial%fswtr ) = ', sum(Interstitial%fswtr ) - write (0,*) 'sum(Interstitial%gabsbdlw ) = ', sum(Interstitial%gabsbdlw ) - write (0,*) 'sum(Interstitial%gamma ) = ', sum(Interstitial%gamma ) - write (0,*) 'sum(Interstitial%gamq ) = ', sum(Interstitial%gamq ) - write (0,*) 'sum(Interstitial%gamt ) = ', sum(Interstitial%gamt ) - write (0,*) 'sum(Interstitial%gasvmr ) = ', sum(Interstitial%gasvmr ) - write (0,*) 'sum(Interstitial%gflx ) = ', sum(Interstitial%gflx ) - write (0,*) 'sum(Interstitial%gflx_ice ) = ', sum(Interstitial%gflx_ice ) - write (0,*) 'sum(Interstitial%gflx_land ) = ', sum(Interstitial%gflx_land ) - write (0,*) 'sum(Interstitial%gflx_ocean ) = ', sum(Interstitial%gflx_ocean ) - write (0,*) 'sum(Interstitial%gwdcu ) = ', sum(Interstitial%gwdcu ) - write (0,*) 'sum(Interstitial%gwdcv ) = ', sum(Interstitial%gwdcv ) - write (0,*) 'sum(Interstitial%hflx ) = ', sum(Interstitial%hflx ) - write (0,*) 'sum(Interstitial%hflx_ice ) = ', sum(Interstitial%hflx_ice ) - write (0,*) 'sum(Interstitial%hflx_land ) = ', sum(Interstitial%hflx_land ) - write (0,*) 'sum(Interstitial%hflx_ocean ) = ', sum(Interstitial%hflx_ocean ) - write (0,*) 'sum(Interstitial%hprime1 ) = ', sum(Interstitial%hprime1 ) - write (0,*) 'Interstitial%dry(:)==.true. = ', count(Interstitial%dry(:)) - write (0,*) 'sum(Interstitial%idxday ) = ', sum(Interstitial%idxday ) - write (0,*) 'Interstitial%icy(:)==.true. = ', count(Interstitial%icy(:)) - write (0,*) 'Interstitial%lake(:)==.true. = ', count(Interstitial%lake(:)) - write (0,*) 'Interstitial%ocean(:)==.true. = ', count(Interstitial%ocean(:)) - write (0,*) 'sum(Interstitial%islmsk ) = ', sum(Interstitial%islmsk ) - write (0,*) 'sum(Interstitial%islmsk_cice ) = ', sum(Interstitial%islmsk_cice ) - write (0,*) 'Interstitial%wet(:)==.true. = ', count(Interstitial%wet(:)) - write (0,*) 'Interstitial%kb = ', Interstitial%kb - write (0,*) 'sum(Interstitial%kbot ) = ', sum(Interstitial%kbot ) - write (0,*) 'sum(Interstitial%kcnv ) = ', sum(Interstitial%kcnv ) - write (0,*) 'Interstitial%kd = ', Interstitial%kd - write (0,*) 'sum(Interstitial%kinver ) = ', sum(Interstitial%kinver ) - write (0,*) 'sum(Interstitial%kpbl ) = ', sum(Interstitial%kpbl ) - write (0,*) 'Interstitial%kt = ', Interstitial%kt - write (0,*) 'sum(Interstitial%ktop ) = ', sum(Interstitial%ktop ) - write (0,*) 'sum(Interstitial%mbota ) = ', sum(Interstitial%mbota ) - write (0,*) 'sum(Interstitial%mtopa ) = ', sum(Interstitial%mtopa ) - write (0,*) 'Interstitial%nday = ', Interstitial%nday - write (0,*) 'sum(Interstitial%oa4 ) = ', sum(Interstitial%oa4 ) - write (0,*) 'sum(Interstitial%oc ) = ', sum(Interstitial%oc ) - write (0,*) 'sum(Interstitial%olyr ) = ', sum(Interstitial%olyr ) - write (0,*) 'sum(Interstitial%plvl ) = ', sum(Interstitial%plvl ) - write (0,*) 'sum(Interstitial%plyr ) = ', sum(Interstitial%plyr ) - write (0,*) 'sum(Interstitial%prcpmp ) = ', sum(Interstitial%prcpmp ) - write (0,*) 'sum(Interstitial%prnum ) = ', sum(Interstitial%prnum ) - write (0,*) 'sum(Interstitial%qlyr ) = ', sum(Interstitial%qlyr ) - write (0,*) 'sum(Interstitial%qss ) = ', sum(Interstitial%qss ) - write (0,*) 'sum(Interstitial%qss_ice ) = ', sum(Interstitial%qss_ice ) - write (0,*) 'sum(Interstitial%qss_land ) = ', sum(Interstitial%qss_land ) - write (0,*) 'sum(Interstitial%qss_ocean ) = ', sum(Interstitial%qss_ocean ) - write (0,*) 'Interstitial%raddt = ', Interstitial%raddt - write (0,*) 'sum(Interstitial%raincd ) = ', sum(Interstitial%raincd ) - write (0,*) 'sum(Interstitial%raincs ) = ', sum(Interstitial%raincs ) - write (0,*) 'sum(Interstitial%rainmcadj ) = ', sum(Interstitial%rainmcadj ) - write (0,*) 'sum(Interstitial%rainp ) = ', sum(Interstitial%rainp ) - write (0,*) 'sum(Interstitial%rb ) = ', sum(Interstitial%rb ) - write (0,*) 'sum(Interstitial%rb_ice ) = ', sum(Interstitial%rb_ice ) - write (0,*) 'sum(Interstitial%rb_land ) = ', sum(Interstitial%rb_land ) - write (0,*) 'sum(Interstitial%rb_ocean ) = ', sum(Interstitial%rb_ocean ) - write (0,*) 'Interstitial%reset = ', Interstitial%reset - write (0,*) 'sum(Interstitial%rhc ) = ', sum(Interstitial%rhc ) - write (0,*) 'sum(Interstitial%runoff ) = ', sum(Interstitial%runoff ) - write (0,*) 'sum(Interstitial%save_q ) = ', sum(Interstitial%save_q ) - write (0,*) 'sum(Interstitial%save_t ) = ', sum(Interstitial%save_t ) - write (0,*) 'sum(Interstitial%save_u ) = ', sum(Interstitial%save_u ) - write (0,*) 'sum(Interstitial%save_v ) = ', sum(Interstitial%save_v ) - write (0,*) 'sum(Interstitial%sbsno ) = ', sum(Interstitial%sbsno ) - write (0,*) 'sum(Interstitial%scmpsw%uvbfc) = ', sum(Interstitial%scmpsw%uvbfc) - write (0,*) 'sum(Interstitial%scmpsw%uvbf0) = ', sum(Interstitial%scmpsw%uvbf0) - write (0,*) 'sum(Interstitial%scmpsw%nirbm) = ', sum(Interstitial%scmpsw%nirbm) - write (0,*) 'sum(Interstitial%scmpsw%nirdf) = ', sum(Interstitial%scmpsw%nirdf) - write (0,*) 'sum(Interstitial%scmpsw%visbm) = ', sum(Interstitial%scmpsw%visbm) - write (0,*) 'sum(Interstitial%scmpsw%visdf) = ', sum(Interstitial%scmpsw%visdf) - write (0,*) 'sum(Interstitial%sfcalb ) = ', sum(Interstitial%sfcalb ) - write (0,*) 'sum(Interstitial%sigma ) = ', sum(Interstitial%sigma ) - write (0,*) 'sum(Interstitial%sigmaf ) = ', sum(Interstitial%sigmaf ) - write (0,*) 'sum(Interstitial%sigmafrac ) = ', sum(Interstitial%sigmafrac ) - write (0,*) 'sum(Interstitial%sigmatot ) = ', sum(Interstitial%sigmatot ) - write (0,*) 'sum(Interstitial%slopetype ) = ', sum(Interstitial%slopetype ) - write (0,*) 'sum(Interstitial%snowc ) = ', sum(Interstitial%snowc ) - write (0,*) 'sum(Interstitial%snowd_ice ) = ', sum(Interstitial%snowd_ice ) - write (0,*) 'sum(Interstitial%snowd_land ) = ', sum(Interstitial%snowd_land ) - write (0,*) 'sum(Interstitial%snowd_ocean ) = ', sum(Interstitial%snowd_ocean ) - write (0,*) 'sum(Interstitial%snohf ) = ', sum(Interstitial%snohf ) - write (0,*) 'sum(Interstitial%snowmt ) = ', sum(Interstitial%snowmt ) - write (0,*) 'sum(Interstitial%soiltype ) = ', sum(Interstitial%soiltype ) - write (0,*) 'sum(Interstitial%stress ) = ', sum(Interstitial%stress ) - write (0,*) 'sum(Interstitial%stress_ice ) = ', sum(Interstitial%stress_ice ) - write (0,*) 'sum(Interstitial%stress_land ) = ', sum(Interstitial%stress_land ) - write (0,*) 'sum(Interstitial%stress_ocean) = ', sum(Interstitial%stress_ocean) - write (0,*) 'sum(Interstitial%theta ) = ', sum(Interstitial%theta ) - write (0,*) 'sum(Interstitial%tice ) = ', sum(Interstitial%tice ) - write (0,*) 'sum(Interstitial%tlvl ) = ', sum(Interstitial%tlvl ) - write (0,*) 'sum(Interstitial%tlyr ) = ', sum(Interstitial%tlyr ) - write (0,*) 'sum(Interstitial%tprcp_ice ) = ', sum(Interstitial%tprcp_ice ) - write (0,*) 'sum(Interstitial%tprcp_land ) = ', sum(Interstitial%tprcp_land ) - write (0,*) 'sum(Interstitial%tprcp_ocean ) = ', sum(Interstitial%tprcp_ocean ) - write (0,*) 'sum(Interstitial%trans ) = ', sum(Interstitial%trans ) - write (0,*) 'sum(Interstitial%tseal ) = ', sum(Interstitial%tseal ) - write (0,*) 'sum(Interstitial%tsfa ) = ', sum(Interstitial%tsfa ) - write (0,*) 'sum(Interstitial%tsfc_ice ) = ', sum(Interstitial%tsfc_ice ) - write (0,*) 'sum(Interstitial%tsfc_land ) = ', sum(Interstitial%tsfc_land ) - write (0,*) 'sum(Interstitial%tsfc_ocean ) = ', sum(Interstitial%tsfc_ocean ) - write (0,*) 'sum(Interstitial%tsfg ) = ', sum(Interstitial%tsfg ) - write (0,*) 'sum(Interstitial%tsurf ) = ', sum(Interstitial%tsurf ) - write (0,*) 'sum(Interstitial%tsurf_ice ) = ', sum(Interstitial%tsurf_ice ) - write (0,*) 'sum(Interstitial%tsurf_land ) = ', sum(Interstitial%tsurf_land ) - write (0,*) 'sum(Interstitial%tsurf_ocean ) = ', sum(Interstitial%tsurf_ocean ) - write (0,*) 'sum(Interstitial%ud_mf ) = ', sum(Interstitial%ud_mf ) - write (0,*) 'sum(Interstitial%ulwsfc_cice ) = ', sum(Interstitial%ulwsfc_cice ) - write (0,*) 'sum(Interstitial%dusfc_cice ) = ', sum(Interstitial%dusfc_cice ) - write (0,*) 'sum(Interstitial%dvsfc_cice ) = ', sum(Interstitial%dvsfc_cice ) - write (0,*) 'sum(Interstitial%dtsfc_cice ) = ', sum(Interstitial%dtsfc_cice ) - write (0,*) 'sum(Interstitial%dqsfc_cice ) = ', sum(Interstitial%dqsfc_cice ) - write (0,*) 'sum(Interstitial%uustar_ice ) = ', sum(Interstitial%uustar_ice ) - write (0,*) 'sum(Interstitial%uustar_land ) = ', sum(Interstitial%uustar_land ) - write (0,*) 'sum(Interstitial%uustar_ocean) = ', sum(Interstitial%uustar_ocean) - write (0,*) 'sum(Interstitial%vdftra ) = ', sum(Interstitial%vdftra ) - write (0,*) 'sum(Interstitial%vegf1d ) = ', sum(Interstitial%vegf1d ) - write (0,*) 'sum(Interstitial%vegtype ) = ', sum(Interstitial%vegtype ) - write (0,*) 'sum(Interstitial%wcbmax ) = ', sum(Interstitial%wcbmax ) - write (0,*) 'sum(Interstitial%weasd_ice ) = ', sum(Interstitial%weasd_ice ) - write (0,*) 'sum(Interstitial%weasd_land ) = ', sum(Interstitial%weasd_land ) - write (0,*) 'sum(Interstitial%weasd_ocean ) = ', sum(Interstitial%weasd_ocean ) - write (0,*) 'sum(Interstitial%wind ) = ', sum(Interstitial%wind ) - write (0,*) 'sum(Interstitial%work1 ) = ', sum(Interstitial%work1 ) - write (0,*) 'sum(Interstitial%work2 ) = ', sum(Interstitial%work2 ) - write (0,*) 'sum(Interstitial%work3 ) = ', sum(Interstitial%work3 ) - write (0,*) 'sum(Interstitial%xcosz ) = ', sum(Interstitial%xcosz ) - write (0,*) 'sum(Interstitial%xlai1d ) = ', sum(Interstitial%xlai1d ) - write (0,*) 'sum(Interstitial%xmu ) = ', sum(Interstitial%xmu ) - write (0,*) 'sum(Interstitial%z01d ) = ', sum(Interstitial%z01d ) - write (0,*) 'sum(Interstitial%zorl_ice ) = ', sum(Interstitial%zorl_ice ) - write (0,*) 'sum(Interstitial%zorl_land ) = ', sum(Interstitial%zorl_land ) - write (0,*) 'sum(Interstitial%zorl_ocean ) = ', sum(Interstitial%zorl_ocean ) - write (0,*) 'sum(Interstitial%zt1d ) = ', sum(Interstitial%zt1d ) + write (0,*) 'sum(Interstitial%adjsfculw_land ) = ', sum(Interstitial%adjsfculw_land ) + write (0,*) 'sum(Interstitial%adjsfculw_ice ) = ', sum(Interstitial%adjsfculw_ice ) + write (0,*) 'sum(Interstitial%adjsfculw_ocean ) = ', sum(Interstitial%adjsfculw_ocean ) + write (0,*) 'sum(Interstitial%adjnirbmd ) = ', sum(Interstitial%adjnirbmd ) + write (0,*) 'sum(Interstitial%adjnirbmu ) = ', sum(Interstitial%adjnirbmu ) + write (0,*) 'sum(Interstitial%adjnirdfd ) = ', sum(Interstitial%adjnirdfd ) + write (0,*) 'sum(Interstitial%adjnirdfu ) = ', sum(Interstitial%adjnirdfu ) + write (0,*) 'sum(Interstitial%adjvisbmd ) = ', sum(Interstitial%adjvisbmd ) + write (0,*) 'sum(Interstitial%adjvisbmu ) = ', sum(Interstitial%adjvisbmu ) + write (0,*) 'sum(Interstitial%adjvisdfu ) = ', sum(Interstitial%adjvisdfu ) + write (0,*) 'sum(Interstitial%adjvisdfd ) = ', sum(Interstitial%adjvisdfd ) + write (0,*) 'sum(Interstitial%aerodp ) = ', sum(Interstitial%aerodp ) + write (0,*) 'sum(Interstitial%alb1d ) = ', sum(Interstitial%alb1d ) + write (0,*) 'sum(Interstitial%bexp1d ) = ', sum(Interstitial%bexp1d ) + write (0,*) 'sum(Interstitial%cd ) = ', sum(Interstitial%cd ) + write (0,*) 'sum(Interstitial%cd_ice ) = ', sum(Interstitial%cd_ice ) + write (0,*) 'sum(Interstitial%cd_land ) = ', sum(Interstitial%cd_land ) + write (0,*) 'sum(Interstitial%cd_ocean ) = ', sum(Interstitial%cd_ocean ) + write (0,*) 'sum(Interstitial%cdq ) = ', sum(Interstitial%cdq ) + write (0,*) 'sum(Interstitial%cdq_ice ) = ', sum(Interstitial%cdq_ice ) + write (0,*) 'sum(Interstitial%cdq_land ) = ', sum(Interstitial%cdq_land ) + write (0,*) 'sum(Interstitial%cdq_ocean ) = ', sum(Interstitial%cdq_ocean ) + write (0,*) 'sum(Interstitial%chh_ice ) = ', sum(Interstitial%chh_ice ) + write (0,*) 'sum(Interstitial%chh_land ) = ', sum(Interstitial%chh_land ) + write (0,*) 'sum(Interstitial%chh_ocean ) = ', sum(Interstitial%chh_ocean ) + write (0,*) 'sum(Interstitial%cldf ) = ', sum(Interstitial%cldf ) + write (0,*) 'sum(Interstitial%cldsa ) = ', sum(Interstitial%cldsa ) + write (0,*) 'sum(Interstitial%cldtaulw ) = ', sum(Interstitial%cldtaulw ) + write (0,*) 'sum(Interstitial%cldtausw ) = ', sum(Interstitial%cldtausw ) + write (0,*) 'sum(Interstitial%cld1d ) = ', sum(Interstitial%cld1d ) + write (0,*) 'sum(Interstitial%clw ) = ', sum(Interstitial%clw ) + write (0,*) 'sum(Interstitial%clx ) = ', sum(Interstitial%clx ) + write (0,*) 'sum(Interstitial%clouds ) = ', sum(Interstitial%clouds ) + write (0,*) 'sum(Interstitial%cmm_ice ) = ', sum(Interstitial%cmm_ice ) + write (0,*) 'sum(Interstitial%cmm_land ) = ', sum(Interstitial%cmm_land ) + write (0,*) 'sum(Interstitial%cmm_ocean ) = ', sum(Interstitial%cmm_ocean ) + write (0,*) 'sum(Interstitial%cnvc ) = ', sum(Interstitial%cnvc ) + write (0,*) 'sum(Interstitial%cnvw ) = ', sum(Interstitial%cnvw ) + write (0,*) 'sum(Interstitial%ctei_r ) = ', sum(Interstitial%ctei_r ) + write (0,*) 'sum(Interstitial%ctei_rml ) = ', sum(Interstitial%ctei_rml ) + write (0,*) 'sum(Interstitial%cumabs ) = ', sum(Interstitial%cumabs ) + write (0,*) 'sum(Interstitial%dd_mf ) = ', sum(Interstitial%dd_mf ) + write (0,*) 'sum(Interstitial%de_lgth ) = ', sum(Interstitial%de_lgth ) + write (0,*) 'sum(Interstitial%del ) = ', sum(Interstitial%del ) + write (0,*) 'sum(Interstitial%del_gz ) = ', sum(Interstitial%del_gz ) + write (0,*) 'sum(Interstitial%delr ) = ', sum(Interstitial%delr ) + write (0,*) 'sum(Interstitial%dkt ) = ', sum(Interstitial%dkt ) + write (0,*) 'sum(Interstitial%dlength ) = ', sum(Interstitial%dlength ) + write (0,*) 'sum(Interstitial%dqdt ) = ', sum(Interstitial%dqdt ) + write (0,*) 'sum(Interstitial%dqsfc1 ) = ', sum(Interstitial%dqsfc1 ) + write (0,*) 'sum(Interstitial%drain ) = ', sum(Interstitial%drain ) + write (0,*) 'sum(Interstitial%dtdt ) = ', sum(Interstitial%dtdt ) + write (0,*) 'sum(Interstitial%dtdtc ) = ', sum(Interstitial%dtdtc ) + write (0,*) 'sum(Interstitial%dtsfc1 ) = ', sum(Interstitial%dtsfc1 ) + write (0,*) 'sum(Interstitial%dtzm ) = ', sum(Interstitial%dtzm ) + write (0,*) 'sum(Interstitial%dt_mf ) = ', sum(Interstitial%dt_mf ) + write (0,*) 'sum(Interstitial%dudt ) = ', sum(Interstitial%dudt ) + write (0,*) 'sum(Interstitial%dusfcg ) = ', sum(Interstitial%dusfcg ) + write (0,*) 'sum(Interstitial%dusfc1 ) = ', sum(Interstitial%dusfc1 ) + write (0,*) 'sum(Interstitial%dvdftra ) = ', sum(Interstitial%dvdftra ) + write (0,*) 'sum(Interstitial%dvdt ) = ', sum(Interstitial%dvdt ) + write (0,*) 'sum(Interstitial%dvsfcg ) = ', sum(Interstitial%dvsfcg ) + write (0,*) 'sum(Interstitial%dvsfc1 ) = ', sum(Interstitial%dvsfc1 ) + write (0,*) 'sum(Interstitial%dzlyr ) = ', sum(Interstitial%dzlyr ) + write (0,*) 'sum(Interstitial%elvmax ) = ', sum(Interstitial%elvmax ) + write (0,*) 'sum(Interstitial%ep1d ) = ', sum(Interstitial%ep1d ) + write (0,*) 'sum(Interstitial%ep1d_ice ) = ', sum(Interstitial%ep1d_ice ) + write (0,*) 'sum(Interstitial%ep1d_land ) = ', sum(Interstitial%ep1d_land ) + write (0,*) 'sum(Interstitial%ep1d_ocean ) = ', sum(Interstitial%ep1d_ocean ) + write (0,*) 'sum(Interstitial%evap ) = ', sum(Interstitial%evap ) + write (0,*) 'sum(Interstitial%evap_ice ) = ', sum(Interstitial%evap_ice ) + write (0,*) 'sum(Interstitial%evap_land ) = ', sum(Interstitial%evap_land ) + write (0,*) 'sum(Interstitial%evap_ocean ) = ', sum(Interstitial%evap_ocean ) + write (0,*) 'sum(Interstitial%evbs ) = ', sum(Interstitial%evbs ) + write (0,*) 'sum(Interstitial%evcw ) = ', sum(Interstitial%evcw ) + write (0,*) 'sum(Interstitial%faerlw ) = ', sum(Interstitial%faerlw ) + write (0,*) 'sum(Interstitial%faersw ) = ', sum(Interstitial%faersw ) + write (0,*) 'sum(Interstitial%ffhh_ice ) = ', sum(Interstitial%ffhh_ice ) + write (0,*) 'sum(Interstitial%ffhh_land ) = ', sum(Interstitial%ffhh_land ) + write (0,*) 'sum(Interstitial%ffhh_ocean ) = ', sum(Interstitial%ffhh_ocean ) + write (0,*) 'sum(Interstitial%fh2 ) = ', sum(Interstitial%fh2 ) + write (0,*) 'sum(Interstitial%fh2_ice ) = ', sum(Interstitial%fh2_ice ) + write (0,*) 'sum(Interstitial%fh2_land ) = ', sum(Interstitial%fh2_land ) + write (0,*) 'sum(Interstitial%fh2_ocean ) = ', sum(Interstitial%fh2_ocean ) + write (0,*) 'Interstitial%flag_cice(1) = ', Interstitial%flag_cice(1) + write (0,*) 'Interstitial%flag_guess(1) = ', Interstitial%flag_guess(1) + write (0,*) 'Interstitial%flag_iter(1) = ', Interstitial%flag_iter(1) + write (0,*) 'sum(Interstitial%ffmm_ice ) = ', sum(Interstitial%ffmm_ice ) + write (0,*) 'sum(Interstitial%ffmm_land ) = ', sum(Interstitial%ffmm_land ) + write (0,*) 'sum(Interstitial%ffmm_ocean ) = ', sum(Interstitial%ffmm_ocean ) + write (0,*) 'sum(Interstitial%fm10 ) = ', sum(Interstitial%fm10 ) + write (0,*) 'sum(Interstitial%fm10_ice ) = ', sum(Interstitial%fm10_ice ) + write (0,*) 'sum(Interstitial%fm10_land ) = ', sum(Interstitial%fm10_land ) + write (0,*) 'sum(Interstitial%fm10_ocean ) = ', sum(Interstitial%fm10_ocean ) + write (0,*) 'Interstitial%frain = ', Interstitial%frain + write (0,*) 'sum(Interstitial%frland ) = ', sum(Interstitial%frland ) + write (0,*) 'sum(Interstitial%fscav ) = ', sum(Interstitial%fscav ) + write (0,*) 'sum(Interstitial%fswtr ) = ', sum(Interstitial%fswtr ) + write (0,*) 'sum(Interstitial%gabsbdlw ) = ', sum(Interstitial%gabsbdlw ) + write (0,*) 'sum(Interstitial%gabsbdlw_ice ) = ', sum(Interstitial%gabsbdlw_ice ) + write (0,*) 'sum(Interstitial%gabsbdlw_land ) = ', sum(Interstitial%gabsbdlw_land ) + write (0,*) 'sum(Interstitial%gabsbdlw_ocean ) = ', sum(Interstitial%gabsbdlw_ocean ) + write (0,*) 'sum(Interstitial%gamma ) = ', sum(Interstitial%gamma ) + write (0,*) 'sum(Interstitial%gamq ) = ', sum(Interstitial%gamq ) + write (0,*) 'sum(Interstitial%gamt ) = ', sum(Interstitial%gamt ) + write (0,*) 'sum(Interstitial%gasvmr ) = ', sum(Interstitial%gasvmr ) + write (0,*) 'sum(Interstitial%gflx ) = ', sum(Interstitial%gflx ) + write (0,*) 'sum(Interstitial%gflx_ice ) = ', sum(Interstitial%gflx_ice ) + write (0,*) 'sum(Interstitial%gflx_land ) = ', sum(Interstitial%gflx_land ) + write (0,*) 'sum(Interstitial%gflx_ocean ) = ', sum(Interstitial%gflx_ocean ) + write (0,*) 'sum(Interstitial%gwdcu ) = ', sum(Interstitial%gwdcu ) + write (0,*) 'sum(Interstitial%gwdcv ) = ', sum(Interstitial%gwdcv ) + write (0,*) 'sum(Interstitial%hflx ) = ', sum(Interstitial%hflx ) + write (0,*) 'sum(Interstitial%hflx_ice ) = ', sum(Interstitial%hflx_ice ) + write (0,*) 'sum(Interstitial%hflx_land ) = ', sum(Interstitial%hflx_land ) + write (0,*) 'sum(Interstitial%hflx_ocean ) = ', sum(Interstitial%hflx_ocean ) + write (0,*) 'Interstitial%dry(:)==.true. = ', count(Interstitial%dry(:) ) + write (0,*) 'sum(Interstitial%idxday ) = ', sum(Interstitial%idxday ) + write (0,*) 'Interstitial%icy(:)==.true. = ', count(Interstitial%icy(:) ) + write (0,*) 'Interstitial%lake(:)==.true. = ', count(Interstitial%lake(:) ) + write (0,*) 'Interstitial%ocean(:)==.true. = ', count(Interstitial%ocean(:) ) + write (0,*) 'sum(Interstitial%islmsk ) = ', sum(Interstitial%islmsk ) + write (0,*) 'sum(Interstitial%islmsk_cice ) = ', sum(Interstitial%islmsk_cice ) + write (0,*) 'Interstitial%wet(:)==.true. = ', count(Interstitial%wet(:) ) + write (0,*) 'Interstitial%kb = ', Interstitial%kb + write (0,*) 'sum(Interstitial%kbot ) = ', sum(Interstitial%kbot ) + write (0,*) 'sum(Interstitial%kcnv ) = ', sum(Interstitial%kcnv ) + write (0,*) 'Interstitial%kd = ', Interstitial%kd + write (0,*) 'sum(Interstitial%kinver ) = ', sum(Interstitial%kinver ) + write (0,*) 'sum(Interstitial%kpbl ) = ', sum(Interstitial%kpbl ) + write (0,*) 'Interstitial%kt = ', Interstitial%kt + write (0,*) 'sum(Interstitial%ktop ) = ', sum(Interstitial%ktop ) + write (0,*) 'sum(Interstitial%mbota ) = ', sum(Interstitial%mbota ) + write (0,*) 'sum(Interstitial%mtopa ) = ', sum(Interstitial%mtopa ) + write (0,*) 'Interstitial%nday = ', Interstitial%nday + write (0,*) 'sum(Interstitial%oa4 ) = ', sum(Interstitial%oa4 ) + write (0,*) 'sum(Interstitial%oc ) = ', sum(Interstitial%oc ) + write (0,*) 'sum(Interstitial%olyr ) = ', sum(Interstitial%olyr ) + write (0,*) 'sum(Interstitial%plvl ) = ', sum(Interstitial%plvl ) + write (0,*) 'sum(Interstitial%plyr ) = ', sum(Interstitial%plyr ) + write (0,*) 'sum(Interstitial%prcpmp ) = ', sum(Interstitial%prcpmp ) + write (0,*) 'sum(Interstitial%prnum ) = ', sum(Interstitial%prnum ) + write (0,*) 'sum(Interstitial%qlyr ) = ', sum(Interstitial%qlyr ) + write (0,*) 'sum(Interstitial%qss ) = ', sum(Interstitial%qss ) + write (0,*) 'sum(Interstitial%qss_ice ) = ', sum(Interstitial%qss_ice ) + write (0,*) 'sum(Interstitial%qss_land ) = ', sum(Interstitial%qss_land ) + write (0,*) 'sum(Interstitial%qss_ocean ) = ', sum(Interstitial%qss_ocean ) + write (0,*) 'Interstitial%raddt = ', Interstitial%raddt + write (0,*) 'sum(Interstitial%raincd ) = ', sum(Interstitial%raincd ) + write (0,*) 'sum(Interstitial%raincs ) = ', sum(Interstitial%raincs ) + write (0,*) 'sum(Interstitial%rainmcadj ) = ', sum(Interstitial%rainmcadj ) + write (0,*) 'sum(Interstitial%rainp ) = ', sum(Interstitial%rainp ) + write (0,*) 'sum(Interstitial%rb ) = ', sum(Interstitial%rb ) + write (0,*) 'sum(Interstitial%rb_ice ) = ', sum(Interstitial%rb_ice ) + write (0,*) 'sum(Interstitial%rb_land ) = ', sum(Interstitial%rb_land ) + write (0,*) 'sum(Interstitial%rb_ocean ) = ', sum(Interstitial%rb_ocean ) + write (0,*) 'Interstitial%reset = ', Interstitial%reset + write (0,*) 'sum(Interstitial%rhc ) = ', sum(Interstitial%rhc ) + write (0,*) 'sum(Interstitial%runoff ) = ', sum(Interstitial%runoff ) + write (0,*) 'sum(Interstitial%save_q ) = ', sum(Interstitial%save_q ) + write (0,*) 'sum(Interstitial%save_t ) = ', sum(Interstitial%save_t ) + write (0,*) 'sum(Interstitial%save_u ) = ', sum(Interstitial%save_u ) + write (0,*) 'sum(Interstitial%save_v ) = ', sum(Interstitial%save_v ) + write (0,*) 'sum(Interstitial%sbsno ) = ', sum(Interstitial%sbsno ) + write (0,*) 'sum(Interstitial%scmpsw%uvbfc ) = ', sum(Interstitial%scmpsw%uvbfc ) + write (0,*) 'sum(Interstitial%scmpsw%uvbf0 ) = ', sum(Interstitial%scmpsw%uvbf0 ) + write (0,*) 'sum(Interstitial%scmpsw%nirbm ) = ', sum(Interstitial%scmpsw%nirbm ) + write (0,*) 'sum(Interstitial%scmpsw%nirdf ) = ', sum(Interstitial%scmpsw%nirdf ) + write (0,*) 'sum(Interstitial%scmpsw%visbm ) = ', sum(Interstitial%scmpsw%visbm ) + write (0,*) 'sum(Interstitial%scmpsw%visdf ) = ', sum(Interstitial%scmpsw%visdf ) + write (0,*) 'sum(Interstitial%semis_ice ) = ', sum(Interstitial%semis_ice ) + write (0,*) 'sum(Interstitial%semis_land ) = ', sum(Interstitial%semis_land ) + write (0,*) 'sum(Interstitial%semis_ocean ) = ', sum(Interstitial%semis_ocean ) + write (0,*) 'sum(Interstitial%sfcalb ) = ', sum(Interstitial%sfcalb ) + write (0,*) 'sum(Interstitial%sigma ) = ', sum(Interstitial%sigma ) + write (0,*) 'sum(Interstitial%sigmaf ) = ', sum(Interstitial%sigmaf ) + write (0,*) 'sum(Interstitial%sigmafrac ) = ', sum(Interstitial%sigmafrac ) + write (0,*) 'sum(Interstitial%sigmatot ) = ', sum(Interstitial%sigmatot ) + write (0,*) 'sum(Interstitial%slopetype ) = ', sum(Interstitial%slopetype ) + write (0,*) 'sum(Interstitial%snowc ) = ', sum(Interstitial%snowc ) + write (0,*) 'sum(Interstitial%snowd_ice ) = ', sum(Interstitial%snowd_ice ) + write (0,*) 'sum(Interstitial%snowd_land ) = ', sum(Interstitial%snowd_land ) + write (0,*) 'sum(Interstitial%snowd_ocean ) = ', sum(Interstitial%snowd_ocean ) + write (0,*) 'sum(Interstitial%snohf ) = ', sum(Interstitial%snohf ) + write (0,*) 'sum(Interstitial%snowmt ) = ', sum(Interstitial%snowmt ) + write (0,*) 'sum(Interstitial%soiltype ) = ', sum(Interstitial%soiltype ) + write (0,*) 'sum(Interstitial%stress ) = ', sum(Interstitial%stress ) + write (0,*) 'sum(Interstitial%stress_ice ) = ', sum(Interstitial%stress_ice ) + write (0,*) 'sum(Interstitial%stress_land ) = ', sum(Interstitial%stress_land ) + write (0,*) 'sum(Interstitial%stress_ocean ) = ', sum(Interstitial%stress_ocean ) + write (0,*) 'sum(Interstitial%theta ) = ', sum(Interstitial%theta ) + write (0,*) 'sum(Interstitial%tice ) = ', sum(Interstitial%tice ) + write (0,*) 'sum(Interstitial%tlvl ) = ', sum(Interstitial%tlvl ) + write (0,*) 'sum(Interstitial%tlyr ) = ', sum(Interstitial%tlyr ) + write (0,*) 'sum(Interstitial%tprcp_ice ) = ', sum(Interstitial%tprcp_ice ) + write (0,*) 'sum(Interstitial%tprcp_land ) = ', sum(Interstitial%tprcp_land ) + write (0,*) 'sum(Interstitial%tprcp_ocean ) = ', sum(Interstitial%tprcp_ocean ) + write (0,*) 'sum(Interstitial%trans ) = ', sum(Interstitial%trans ) + write (0,*) 'sum(Interstitial%tseal ) = ', sum(Interstitial%tseal ) + write (0,*) 'sum(Interstitial%tsfa ) = ', sum(Interstitial%tsfa ) + write (0,*) 'sum(Interstitial%tsfc_ice ) = ', sum(Interstitial%tsfc_ice ) + write (0,*) 'sum(Interstitial%tsfc_land ) = ', sum(Interstitial%tsfc_land ) + write (0,*) 'sum(Interstitial%tsfc_ocean ) = ', sum(Interstitial%tsfc_ocean ) + write (0,*) 'sum(Interstitial%tsfg ) = ', sum(Interstitial%tsfg ) + write (0,*) 'sum(Interstitial%tsurf ) = ', sum(Interstitial%tsurf ) + write (0,*) 'sum(Interstitial%tsurf_ice ) = ', sum(Interstitial%tsurf_ice ) + write (0,*) 'sum(Interstitial%tsurf_land ) = ', sum(Interstitial%tsurf_land ) + write (0,*) 'sum(Interstitial%tsurf_ocean ) = ', sum(Interstitial%tsurf_ocean ) + write (0,*) 'sum(Interstitial%ud_mf ) = ', sum(Interstitial%ud_mf ) + write (0,*) 'sum(Interstitial%ulwsfc_cice ) = ', sum(Interstitial%ulwsfc_cice ) + write (0,*) 'sum(Interstitial%dusfc_cice ) = ', sum(Interstitial%dusfc_cice ) + write (0,*) 'sum(Interstitial%dvsfc_cice ) = ', sum(Interstitial%dvsfc_cice ) + write (0,*) 'sum(Interstitial%dtsfc_cice ) = ', sum(Interstitial%dtsfc_cice ) + write (0,*) 'sum(Interstitial%dqsfc_cice ) = ', sum(Interstitial%dqsfc_cice ) + write (0,*) 'sum(Interstitial%uustar_ice ) = ', sum(Interstitial%uustar_ice ) + write (0,*) 'sum(Interstitial%uustar_land ) = ', sum(Interstitial%uustar_land ) + write (0,*) 'sum(Interstitial%uustar_ocean ) = ', sum(Interstitial%uustar_ocean ) + write (0,*) 'sum(Interstitial%vdftra ) = ', sum(Interstitial%vdftra ) + write (0,*) 'sum(Interstitial%vegf1d ) = ', sum(Interstitial%vegf1d ) + write (0,*) 'sum(Interstitial%vegtype ) = ', sum(Interstitial%vegtype ) + write (0,*) 'sum(Interstitial%wcbmax ) = ', sum(Interstitial%wcbmax ) + write (0,*) 'sum(Interstitial%weasd_ice ) = ', sum(Interstitial%weasd_ice ) + write (0,*) 'sum(Interstitial%weasd_land ) = ', sum(Interstitial%weasd_land ) + write (0,*) 'sum(Interstitial%weasd_ocean ) = ', sum(Interstitial%weasd_ocean ) + write (0,*) 'sum(Interstitial%wind ) = ', sum(Interstitial%wind ) + write (0,*) 'sum(Interstitial%work1 ) = ', sum(Interstitial%work1 ) + write (0,*) 'sum(Interstitial%work2 ) = ', sum(Interstitial%work2 ) + write (0,*) 'sum(Interstitial%work3 ) = ', sum(Interstitial%work3 ) + write (0,*) 'sum(Interstitial%xcosz ) = ', sum(Interstitial%xcosz ) + write (0,*) 'sum(Interstitial%xlai1d ) = ', sum(Interstitial%xlai1d ) + write (0,*) 'sum(Interstitial%xmu ) = ', sum(Interstitial%xmu ) + write (0,*) 'sum(Interstitial%z01d ) = ', sum(Interstitial%z01d ) + write (0,*) 'sum(Interstitial%zorl_ice ) = ', sum(Interstitial%zorl_ice ) + write (0,*) 'sum(Interstitial%zorl_land ) = ', sum(Interstitial%zorl_land ) + write (0,*) 'sum(Interstitial%zorl_ocean ) = ', sum(Interstitial%zorl_ocean ) + write (0,*) 'sum(Interstitial%zt1d ) = ', sum(Interstitial%zt1d ) ! CIRES UGWP v0 - write (0,*) 'sum(Interstitial%gw_dudt ) = ', sum(Interstitial%gw_dudt ) - write (0,*) 'sum(Interstitial%gw_dvdt ) = ', sum(Interstitial%gw_dvdt ) - write (0,*) 'sum(Interstitial%gw_dtdt ) = ', sum(Interstitial%gw_dtdt ) - write (0,*) 'sum(Interstitial%gw_kdis ) = ', sum(Interstitial%gw_kdis ) - write (0,*) 'sum(Interstitial%tau_mtb ) = ', sum(Interstitial%tau_mtb ) - write (0,*) 'sum(Interstitial%tau_ogw ) = ', sum(Interstitial%tau_ogw ) - write (0,*) 'sum(Interstitial%tau_tofd ) = ', sum(Interstitial%tau_tofd ) - write (0,*) 'sum(Interstitial%tau_ngw ) = ', sum(Interstitial%tau_ngw ) - write (0,*) 'sum(Interstitial%zmtb ) = ', sum(Interstitial%zmtb ) - write (0,*) 'sum(Interstitial%zlwb ) = ', sum(Interstitial%zlwb ) - write (0,*) 'sum(Interstitial%zogw ) = ', sum(Interstitial%zogw ) - write (0,*) 'sum(Interstitial%dudt_mtb ) = ', sum(Interstitial%dudt_mtb ) - write (0,*) 'sum(Interstitial%dudt_ogw ) = ', sum(Interstitial%dudt_ogw ) - write (0,*) 'sum(Interstitial%dudt_tms ) = ', sum(Interstitial%dudt_tms ) + write (0,*) 'sum(Interstitial%gw_dudt ) = ', sum(Interstitial%gw_dudt ) + write (0,*) 'sum(Interstitial%gw_dvdt ) = ', sum(Interstitial%gw_dvdt ) + write (0,*) 'sum(Interstitial%gw_dtdt ) = ', sum(Interstitial%gw_dtdt ) + write (0,*) 'sum(Interstitial%gw_kdis ) = ', sum(Interstitial%gw_kdis ) + write (0,*) 'sum(Interstitial%tau_mtb ) = ', sum(Interstitial%tau_mtb ) + write (0,*) 'sum(Interstitial%tau_ogw ) = ', sum(Interstitial%tau_ogw ) + write (0,*) 'sum(Interstitial%tau_tofd ) = ', sum(Interstitial%tau_tofd ) + write (0,*) 'sum(Interstitial%tau_ngw ) = ', sum(Interstitial%tau_ngw ) + write (0,*) 'sum(Interstitial%zmtb ) = ', sum(Interstitial%zmtb ) + write (0,*) 'sum(Interstitial%zlwb ) = ', sum(Interstitial%zlwb ) + write (0,*) 'sum(Interstitial%zogw ) = ', sum(Interstitial%zogw ) + write (0,*) 'sum(Interstitial%dudt_mtb ) = ', sum(Interstitial%dudt_mtb ) + write (0,*) 'sum(Interstitial%dudt_ogw ) = ', sum(Interstitial%dudt_ogw ) + write (0,*) 'sum(Interstitial%dudt_tms ) = ', sum(Interstitial%dudt_tms ) ! ! Print arrays that are conditional on physics choices if (Model%imp_physics == Model%imp_physics_gfdl .or. Model%imp_physics == Model%imp_physics_thompson) then write (0,*) 'Interstitial_print: values specific to GFDL/Thompson microphysics' - write (0,*) 'sum(Interstitial%graupelmp) = ', sum(Interstitial%graupelmp ) - write (0,*) 'sum(Interstitial%icemp ) = ', sum(Interstitial%icemp ) - write (0,*) 'sum(Interstitial%rainmp ) = ', sum(Interstitial%rainmp ) - write (0,*) 'sum(Interstitial%snowmp ) = ', sum(Interstitial%snowmp ) + write (0,*) 'sum(Interstitial%graupelmp ) = ', sum(Interstitial%graupelmp ) + write (0,*) 'sum(Interstitial%icemp ) = ', sum(Interstitial%icemp ) + write (0,*) 'sum(Interstitial%rainmp ) = ', sum(Interstitial%rainmp ) + write (0,*) 'sum(Interstitial%snowmp ) = ', sum(Interstitial%snowmp ) else if (Model%imp_physics == Model%imp_physics_mg) then write (0,*) 'Interstitial_print: values specific to MG microphysics' - write (0,*) 'sum(Interstitial%ncgl ) = ', sum(Interstitial%ncgl ) - write (0,*) 'sum(Interstitial%ncpr ) = ', sum(Interstitial%ncpr ) - write (0,*) 'sum(Interstitial%ncps ) = ', sum(Interstitial%ncps ) - write (0,*) 'sum(Interstitial%qgl ) = ', sum(Interstitial%qgl ) - write (0,*) 'sum(Interstitial%qrn ) = ', sum(Interstitial%qrn ) - write (0,*) 'sum(Interstitial%qsnw ) = ', sum(Interstitial%qsnw ) - write (0,*) 'sum(Interstitial%qlcn ) = ', sum(Interstitial%qlcn ) - write (0,*) 'sum(Interstitial%qicn ) = ', sum(Interstitial%qicn ) - write (0,*) 'sum(Interstitial%w_upi ) = ', sum(Interstitial%w_upi ) - write (0,*) 'sum(Interstitial%cf_upi ) = ', sum(Interstitial%cf_upi ) - write (0,*) 'sum(Interstitial%cnv_mfd ) = ', sum(Interstitial%cnv_mfd ) - write (0,*) 'sum(Interstitial%cnv_dqldt) = ', sum(Interstitial%cnv_dqldt ) - write (0,*) 'sum(Interstitial%clcn ) = ', sum(Interstitial%clcn ) - write (0,*) 'sum(Interstitial%cnv_fice ) = ', sum(Interstitial%cnv_fice ) - write (0,*) 'sum(Interstitial%cnv_ndrop) = ', sum(Interstitial%cnv_ndrop ) - write (0,*) 'sum(Interstitial%cnv_nice ) = ', sum(Interstitial%cnv_nice ) + write (0,*) 'sum(Interstitial%ncgl ) = ', sum(Interstitial%ncgl ) + write (0,*) 'sum(Interstitial%ncpr ) = ', sum(Interstitial%ncpr ) + write (0,*) 'sum(Interstitial%ncps ) = ', sum(Interstitial%ncps ) + write (0,*) 'sum(Interstitial%qgl ) = ', sum(Interstitial%qgl ) + write (0,*) 'sum(Interstitial%qrn ) = ', sum(Interstitial%qrn ) + write (0,*) 'sum(Interstitial%qsnw ) = ', sum(Interstitial%qsnw ) + write (0,*) 'sum(Interstitial%qlcn ) = ', sum(Interstitial%qlcn ) + write (0,*) 'sum(Interstitial%qicn ) = ', sum(Interstitial%qicn ) + write (0,*) 'sum(Interstitial%w_upi ) = ', sum(Interstitial%w_upi ) + write (0,*) 'sum(Interstitial%cf_upi ) = ', sum(Interstitial%cf_upi ) + write (0,*) 'sum(Interstitial%cnv_mfd ) = ', sum(Interstitial%cnv_mfd ) + write (0,*) 'sum(Interstitial%cnv_dqldt ) = ', sum(Interstitial%cnv_dqldt ) + write (0,*) 'sum(Interstitial%clcn ) = ', sum(Interstitial%clcn ) + write (0,*) 'sum(Interstitial%cnv_fice ) = ', sum(Interstitial%cnv_fice ) + write (0,*) 'sum(Interstitial%cnv_ndrop ) = ', sum(Interstitial%cnv_ndrop ) + write (0,*) 'sum(Interstitial%cnv_nice ) = ', sum(Interstitial%cnv_nice ) end if if (Model%do_shoc) then write (0,*) 'Interstitial_print: values specific to SHOC' - write (0,*) 'sum(Interstitial%ncgl ) = ', sum(Interstitial%ncgl ) - write (0,*) 'sum(Interstitial%qrn ) = ', sum(Interstitial%qrn ) - write (0,*) 'sum(Interstitial%qsnw ) = ', sum(Interstitial%qsnw ) - write (0,*) 'sum(Interstitial%qgl ) = ', sum(Interstitial%qgl ) - write (0,*) 'sum(Interstitial%ncpi ) = ', sum(Interstitial%ncpi ) - write (0,*) 'sum(Interstitial%ncpl ) = ', sum(Interstitial%ncpl ) + write (0,*) 'sum(Interstitial%ncgl ) = ', sum(Interstitial%ncgl ) + write (0,*) 'sum(Interstitial%qrn ) = ', sum(Interstitial%qrn ) + write (0,*) 'sum(Interstitial%qsnw ) = ', sum(Interstitial%qsnw ) + write (0,*) 'sum(Interstitial%qgl ) = ', sum(Interstitial%qgl ) + write (0,*) 'sum(Interstitial%ncpi ) = ', sum(Interstitial%ncpi ) + write (0,*) 'sum(Interstitial%ncpl ) = ', sum(Interstitial%ncpl ) + end if + if (Model%lsm == Model%lsm_noahmp) then + write (0,*) 'sum(Interstitial%t2mmp ) = ', sum(Interstitial%t2mmp ) + write (0,*) 'sum(Interstitial%q2mp ) = ', sum(Interstitial%q2mp ) end if write (0,*) 'Interstitial_print: end' ! diff --git a/gfsphysics/GFS_layer/GFS_typedefs.meta b/gfsphysics/GFS_layer/GFS_typedefs.meta index f05354d7f..79ab00129 100644 --- a/gfsphysics/GFS_layer/GFS_typedefs.meta +++ b/gfsphysics/GFS_layer/GFS_typedefs.meta @@ -272,7 +272,7 @@ kind = kind_phys [gu0(:,1)] standard_name = x_wind_at_lowest_model_layer_updated_by_physics - long_name = zonal wind at lowest model level updated by physics + long_name = zonal wind at lowest model layer updated by physics units = m s-1 dimensions = (horizontal_dimension) type = real @@ -286,7 +286,7 @@ kind = kind_phys [gv0(:,1)] standard_name = y_wind_at_lowest_model_layer_updated_by_physics - long_name = meridional wind at lowest model level updated by physics + long_name = meridional wind at lowest model layer updated by physics units = m s-1 dimensions = (horizontal_dimension) type = real @@ -527,6 +527,13 @@ dimensions = (horizontal_dimension,number_of_statistical_measures_of_subgrid_orography) type = real kind = kind_phys +[hprime(:,1)] + standard_name = standard_deviation_of_subgrid_orography + long_name = standard deviation of subgrid orography + units = m + dimensions = (horizontal_dimension) + type = real + kind = kind_phys [sncovr] standard_name = surface_snow_area_fraction_over_land long_name = surface snow area fraction @@ -856,6 +863,244 @@ dimensions = (horizontal_dimension) type = real kind = kind_phys +[snowxy] + standard_name = number_of_snow_layers + long_name = number of snow layers + units = count + dimensions = (horizontal_dimension) + type = real + kind = kind_phys +[tvxy] + standard_name = vegetation_temperature + long_name = vegetation temperature + units = K + dimensions = (horizontal_dimension) + type = real + kind = kind_phys +[tgxy] + standard_name = ground_temperature_for_noahmp + long_name = ground temperature for noahmp + units = K + dimensions = (horizontal_dimension) + type = real + kind = kind_phys +[canicexy] + standard_name = canopy_intercepted_ice_mass + long_name = canopy intercepted ice mass + units = mm + dimensions = (horizontal_dimension) + type = real + kind = kind_phys +[canliqxy] + standard_name = canopy_intercepted_liquid_water + long_name = canopy intercepted liquid water + units = mm + dimensions = (horizontal_dimension) + type = real + kind = kind_phys +[eahxy] + standard_name = canopy_air_vapor_pressure + long_name = canopy air vapor pressure + units = Pa + dimensions = (horizontal_dimension) + type = real + kind = kind_phys +[tahxy] + standard_name = canopy_air_temperature + long_name = canopy air temperature + units = K + dimensions = (horizontal_dimension) + type = real + kind = kind_phys +[cmxy] + standard_name = surface_drag_coefficient_for_momentum_for_noahmp + long_name = surface drag coefficient for momentum for noahmp + units = none + dimensions = (horizontal_dimension) + type = real + kind = kind_phys +[chxy] + standard_name = surface_drag_coefficient_for_heat_and_moisture_for_noahmp + long_name = surface exchange coeff heat & moisture for noahmp + units = none + dimensions = (horizontal_dimension) + type = real + kind = kind_phys +[fwetxy] + standard_name = area_fraction_of_wet_canopy + long_name = area fraction of canopy that is wetted/snowed + units = none + dimensions = (horizontal_dimension) + type = real + kind = kind_phys +[sneqvoxy] + standard_name = snow_mass_at_previous_time_step + long_name = snow mass at previous time step + units = mm + dimensions = (horizontal_dimension) + type = real + kind = kind_phys +[alboldxy] + standard_name = snow_albedo_at_previous_time_step + long_name = snow albedo at previous time step + units = frac + dimensions = (horizontal_dimension) + type = real + kind = kind_phys +[qsnowxy] + standard_name = snow_precipitation_rate_at_surface + long_name = snow precipitation rate at surface + units = mm s-1 + dimensions = (horizontal_dimension) + type = real + kind = kind_phys +[wslakexy] + standard_name = lake_water_storage + long_name = lake water storage + units = mm + dimensions = (horizontal_dimension) + type = real + kind = kind_phys +[zwtxy] + standard_name = water_table_depth + long_name = water table depth + units = m + dimensions = (horizontal_dimension) + type = real + kind = kind_phys +[waxy] + standard_name = water_storage_in_aquifer + long_name = water storage in aquifer + units = mm + dimensions = (horizontal_dimension) + type = real + kind = kind_phys +[wtxy] + standard_name = water_storage_in_aquifer_and_saturated_soil + long_name = water storage in aquifer and saturated soil + units = mm + dimensions = (horizontal_dimension) + type = real + kind = kind_phys +[tsnoxy] + standard_name = snow_temperature + long_name = snow_temperature + units = K + dimensions = (horizontal_dimension, lower_bound_of_snow_vertical_dimension_for_land_surface_model:0) + type = real + kind = kind_phys +[zsnsoxy] + standard_name = layer_bottom_depth_from_snow_surface + long_name = depth from the top of the snow surface at the bottom of the layer + units = m + dimensions = (horizontal_dimension, lower_bound_of_snow_vertical_dimension_for_land_surface_model:soil_vertical_dimension_for_land_surface_model) + type = real + kind = kind_phys +[snicexy] + standard_name = snow_layer_ice + long_name = snow layer ice + units = mm + dimensions = (horizontal_dimension, lower_bound_of_snow_vertical_dimension_for_land_surface_model:0) + type = real + kind = kind_phys +[snliqxy] + standard_name = snow_layer_liquid_water + long_name = snow layer liquid water + units = mm + dimensions = (horizontal_dimension, lower_bound_of_snow_vertical_dimension_for_land_surface_model:0) + type = real + kind = kind_phys +[lfmassxy] + standard_name = leaf_mass + long_name = leaf mass + units = g m-2 + dimensions = (horizontal_dimension) + type = real + kind = kind_phys +[rtmassxy] + standard_name = fine_root_mass + long_name = fine root mass + units = g m-2 + dimensions = (horizontal_dimension) + type = real + kind = kind_phys +[stmassxy] + standard_name = stem_mass + long_name = stem mass + units = g m-2 + dimensions = (horizontal_dimension) + type = real + kind = kind_phys +[woodxy] + standard_name = wood_mass + long_name = wood mass including woody roots + units = g m-2 + dimensions = (horizontal_dimension) + type = real + kind = kind_phys +[stblcpxy] + standard_name = slow_soil_pool_mass_content_of_carbon + long_name = stable carbon in deep soil + units = g m-2 + dimensions = (horizontal_dimension) + type = real + kind = kind_phys +[fastcpxy] + standard_name = fast_soil_pool_mass_content_of_carbon + long_name = short-lived carbon in shallow soil + units = g m-2 + dimensions = (horizontal_dimension) + type = real + kind = kind_phys +[xlaixy] + standard_name = leaf_area_index + long_name = leaf area index + units = none + dimensions = (horizontal_dimension) + type = real + kind = kind_phys +[xsaixy] + standard_name = stem_area_index + long_name = stem area index + units = none + dimensions = (horizontal_dimension) + type = real + kind = kind_phys +[taussxy] + standard_name = nondimensional_snow_age + long_name = non-dimensional snow age + units = none + dimensions = (horizontal_dimension) + type = real + kind = kind_phys +[smoiseq] + standard_name = equilibrium_soil_water_content + long_name = equilibrium soil water content + units = m3 m-3 + dimensions = (horizontal_dimension,soil_vertical_dimension_for_land_surface_model) + type = real + kind = kind_phys +[smcwtdxy] + standard_name = soil_water_content_between_soil_bottom_and_water_table + long_name = soil water content between the bottom of the soil and the water table + units = m3 m-3 + dimensions = (horizontal_dimension) + type = real + kind = kind_phys +[deeprechxy] + standard_name = water_table_recharge_when_deep + long_name = recharge to or from the water table when deep + units = m + dimensions = (horizontal_dimension) + type = real + kind = kind_phys +[rechxy] + standard_name = water_table_recharge_when_shallow + long_name = recharge to or from the water table when shallow + units = m + dimensions = (horizontal_dimension) + type = real + kind = kind_phys [wetness] standard_name = normalized_soil_wetness_for_land_surface_model long_name = normalized soil wetness for lsm @@ -1512,34 +1757,6 @@ dimensions = (horizontal_dimension,vertical_dimension) type = real kind = kind_phys -[cnvqci] - standard_name = instantaneous_deep_convective_cloud_condensate_mixing_ratio_on_dynamics_time_step - long_name = instantaneous total convective condensate mixing ratio - units = kg kg-1 - dimensions = (horizontal_dimension,vertical_dimension) - type = real - kind = kind_phys -[upd_mfi] - standard_name = instantaneous_atmosphere_updraft_convective_mass_flux_on_dynamics_timestep - long_name = (updraft mass flux) * delt - units = kg m-2 - dimensions = (horizontal_dimension,vertical_dimension) - type = real - kind = kind_phys -[dwn_mfi] - standard_name = instantaneous_atmosphere_downdraft_convective_mass_flux_on_dynamics_timestep - long_name = (downdraft mass flux) * delt - units = kg m-2 - dimensions = (horizontal_dimension,vertical_dimension) - type = real - kind = kind_phys -[det_mfi] - standard_name = instantaneous_atmosphere_detrainment_convective_mass_flux_on_dynamics_timestep - long_name = (detrainment mass flux) * delt - units = kg m-2 - dimensions = (horizontal_dimension,vertical_dimension) - type = real - kind = kind_phys [nwfa2d] standard_name = tendency_of_water_friendly_aerosols_at_surface long_name = instantaneous water-friendly sfc aerosol source @@ -1743,6 +1960,12 @@ units = flag dimensions = () type = logical +[nscyc] + standard_name = number_of_timesteps_between_surface_cycling_calls + long_name = number of timesteps between surface cycling calls + units = + dimensions = () + type = integer [dtp] standard_name = time_step_for_physics long_name = physics timestep @@ -1769,6 +1992,18 @@ units = none dimensions = (4) type = integer +[nsswr] + standard_name = number_of_timesteps_between_shortwave_radiation_calls + long_name = number of timesteps between shortwave radiation calls + units = + dimensions = () + type = integer +[nslwr] + standard_name = number_of_timesteps_between_longwave_radiation_calls + long_name = number of timesteps between longwave radiation calls + units = + dimensions = () + type = integer [fhswr] standard_name = frequency_for_shortwave_radiation long_name = frequency for shortwave radiation @@ -2292,7 +2527,19 @@ type = integer [lsoil_lsm] standard_name = soil_vertical_dimension_for_land_surface_model - long_name = number of soil layers for land surface model + long_name = number of soil layers internal to land surface model + units = count + dimensions = () + type = integer +[lsnow_lsm] + standard_name = snow_vertical_dimension_for_land_surface_model + long_name = maximum number of snow layers for land surface model + units = count + dimensions = () + type = integer +[lsnow_lsm_lbound] + standard_name = lower_bound_of_snow_vertical_dimension_for_land_surface_model + long_name = lower bound of of snow-related arrays for land surface model units = count dimensions = () type = integer @@ -2308,6 +2555,78 @@ units = index dimensions = () type = integer +[iopt_dveg] + standard_name = flag_for_dynamic_vegetation_option + long_name = choice for dynamic vegetation option (see noahmp module for definition) + units = index + dimensions = () + type = integer +[iopt_crs] + standard_name = flag_for_canopy_stomatal_resistance_option + long_name = choice for canopy stomatal resistance option (see noahmp module for definition) + units = index + dimensions = () + type = integer +[iopt_btr] + standard_name = flag_for_soil_moisture_factor_stomatal_resistance_option + long_name = choice for soil moisture factor for canopy stomatal resistance option (see noahmp module for definition) + units = index + dimensions = () + type = integer +[iopt_run] + standard_name = flag_for_runoff_and_groundwater_option + long_name = choice for runoff and groundwater option (see noahmp module for definition) + units = index + dimensions = () + type = integer +[iopt_sfc] + standard_name = flag_for_surface_layer_drag_coefficient_option + long_name = choice for surface layer drag coefficient option (see noahmp module for definition) + units = index + dimensions = () + type = integer +[iopt_frz] + standard_name = flag_for_supercooled_liquid_water_option + long_name = choice for supercooled liquid water option (see noahmp module for definition) + units = index + dimensions = () + type = integer +[iopt_inf] + standard_name = flag_for_frozen_soil_permeability_option + long_name = choice for frozen soil permeability option (see noahmp module for definition) + units = index + dimensions = () + type = integer +[iopt_rad] + standard_name = flag_for_radiation_transfer_option + long_name = choice for radiation transfer option (see noahmp module for definition) + units = index + dimensions = () + type = integer +[iopt_alb] + standard_name = flag_for_ground_snow_surface_albedo_option + long_name = choice for ground snow surface albedo option (see noahmp module for definition) + units = index + dimensions = () + type = integer +[iopt_snf] + standard_name = flag_for_precipitation_partition_option + long_name = choice for precipitation partition option (see noahmp module for definition) + units = index + dimensions = () + type = integer +[iopt_tbot] + standard_name = flag_for_lower_boundary_soil_temperature_option + long_name = choice for lower boundary soil temperature option (see noahmp module for definition) + units = index + dimensions = () + type = integer +[iopt_stc] + standard_name = flag_for_soil_and_snow_temperature_time_stepping_option + long_name = choice for soil and snow temperature time stepping option (see noahmp module for definition) + units = index + dimensions = () + type = integer [mom4ice] standard_name = flag_for_mom4_coupling long_name = flag controls mom4 sea ice @@ -2338,12 +2657,6 @@ units = flag dimensions = () type = logical -[cnvgwd] - standard_name = flag_convective_gravity_wave_drag - long_name = flag for conv gravity wave drag - units = flag - dimensions = () - type = logical [mstrat] standard_name = flag_for_moorthi_stratus long_name = flag for moorthi approach for stratus @@ -2522,7 +2835,7 @@ standard_name = multiplication_factors_for_mountain_blocking_and_orographic_gravity_wave_drag long_name = multiplication factors for cdmb and gwd units = none - dimensions = (2) + dimensions = (4) type = real kind = kind_phys [sup] @@ -2576,7 +2889,7 @@ kind = kind_phys [clam_deep] standard_name = entrainment_rate_coefficient_deep_convection - long_name = entrainment rate coefficient for deep conv. + long_name = entrainment rate coefficient for deep convection units = none dimensions = () type = real @@ -2717,6 +3030,27 @@ units = flag dimensions = () type = logical +[min_lakeice] + standard_name = lake_ice_minimum + long_name = minimum lake ice value + units = ??? + dimensions = () + type = real + kind = kind_phys +[min_seaice] + standard_name = sea_ice_minimum + long_name = minimum sea ice value + units = ??? + dimensions = () + type = real + kind = kind_phys +[rho_h2o] + standard_name = density_of_fresh_water + long_name = density of fresh water + units = ??? + dimensions = () + type = real + kind = kind_phys [sfc_z0_type] standard_name = flag_for_surface_roughness_option_over_ocean long_name = surface roughness options over ocean @@ -3157,6 +3491,18 @@ units = dimensions = () type = integer +[debug] + standard_name = flag_debug + long_name = control flag for debug + units = flag + dimensions = () + type = logical +[ipt] + standard_name = index_for_diagnostic_printout + long_name = horizontal index for point used for diagnostic printout + units = + dimensions = () + type = integer [lprnt] standard_name = flag_print long_name = control flag for diagnostic print out @@ -3176,8 +3522,8 @@ dimensions = () type = logical [solhr] - standard_name = forecast_hour - long_name = hour time after 00z at the t-step + standard_name = forecast_hour_of_the_day + long_name = time in hours after 00z at the current timestep units = h dimensions = () type = real @@ -3217,9 +3563,23 @@ dimensions = () type = real kind = kind_phys +[phour] + standard_name = forecast_time_at_previous_timestep + long_name = forecast time at the previous timestep + units = h + dimensions = () + type = real + kind = kind_phys [fhour] standard_name = forecast_time - long_name = curent forecast time + long_name = current forecast time + units = h + dimensions = () + type = real + kind = kind_phys +[zhour] + standard_name = time_since_diagnostics_zeroed + long_name = time since diagnostics variables have been zeroed units = h dimensions = () type = real @@ -3254,6 +3614,25 @@ units = none dimensions = (8) type = integer +[imn] + standard_name = forecast_month + long_name = current forecast month + units = none + dimensions = () + type = integer +[yearlen] + standard_name = number_of_days_in_year + long_name = number of days in a year + units = days + dimensions = () + type = integer +[julian] + standard_name = julian_day + long_name = julian day + units = days + dimensions = () + type = real + kind = kind_phys [iccn] standard_name = flag_for_in_ccn_forcing_for_morrison_gettelman_microphysics long_name = flag for IN and CCN forcing for morrison gettelman microphysics @@ -3302,6 +3681,12 @@ dimensions = () type = real kind = kind_phys +[gwd_opt] + standard_name = gwd_opt + long_name = flag to choose gwd scheme + units = flag + dimensions = () + type = integer [do_mynnedmf] standard_name = do_mynnedmf long_name = flag to activate MYNN-EDMF @@ -3314,6 +3699,18 @@ units = flag dimensions = () type = logical +[do_myjsfc] + standard_name = do_myjsfc + long_name = flag to activate MYJ surface layer scheme + units = flag + dimensions = () + type = logical +[do_myjpbl] + standard_name = do_myjpbl + long_name = flag to activate MYJ PBL scheme + units = flag + dimensions = () + type = logical [grav_settling] standard_name = grav_settling long_name = flag to activate gravitational setting of fog @@ -3398,15 +3795,21 @@ units = flag dimensions = () type = logical -[ldiag_ugwp] - standard_name = diag_ugwp_flag - long_name = flag for CIRES UGWP Diagnostics +[do_gwd] + standard_name = flag_for_gravity_wave_drag + long_name = flag for gravity wave drag (gwd) units = flag dimensions = () type = logical -[lgocart] - standard_name = flag_gocart - long_name = temporary flag for deprecated gocart option +[do_cnvgwd] + standard_name = flag_for_convective_gravity_wave_drag + long_name = flag for convective gravity wave drag (gwd) + units = flag + dimensions = () + type = logical +[ldiag_ugwp] + standard_name = diag_ugwp_flag + long_name = flag for CIRES UGWP Diagnostics units = flag dimensions = () type = logical @@ -3807,6 +4210,41 @@ dimensions = (horizontal_dimension) type = real kind = kind_phys +[draincprv] + standard_name = convective_precipitation_rate_from_previous_timestep + long_name = convective precipitation rate from previous timestep + units = mm s-1 + dimensions = (horizontal_dimension) + type = real + kind = kind_phys +[drainncprv] + standard_name = explicit_rainfall_rate_from_previous_timestep + long_name = explicit rainfall rate previous timestep + units = mm s-1 + dimensions = (horizontal_dimension) + type = real + kind = kind_phys +[diceprv] + standard_name = ice_precipitation_rate_from_previous_timestep + long_name = ice precipitation rate from previous timestep + units = mm s-1 + dimensions = (horizontal_dimension) + type = real + kind = kind_phys +[dsnowprv] + standard_name = snow_precipitation_rate_from_previous_timestep + long_name = snow precipitation rate from previous timestep + units = mm s-1 + dimensions = (horizontal_dimension) + type = real + kind = kind_phys +[dgraupelprv] + standard_name = graupel_precipitation_rate_from_previous_timestep + long_name = graupel precipitation rate from previous timestep + units = mm s-1 + dimensions = (horizontal_dimension) + type = real + kind = kind_phys [CLDFRA_BL] standard_name = subgrid_cloud_fraction_pbl long_name = subgrid cloud fraction from PBL scheme @@ -3863,6 +4301,97 @@ dimensions = (horizontal_dimension,vertical_dimension) type = real kind = kind_phys +[phy_myj_qsfc] + standard_name = surface_specific_humidity_for_MYJ_schemes + long_name = surface air saturation specific humidity for MYJ schemes + units = kg kg-1 + dimensions = (horizontal_dimension) + type = real + kind = kind_phys +[phy_myj_thz0] + standard_name = potential_temperature_at_viscous_sublayer_top + long_name = potential temperature at viscous sublayer top over water + units = K + dimensions = (horizontal_dimension) + type = real + kind = kind_phys +[phy_myj_qz0] + standard_name = specific_humidity_at_viscous_sublayer_top + long_name = specific humidity at_viscous sublayer top over water + units = kg kg-1 + dimensions = (horizontal_dimension) + type = real + kind = kind_phys +[phy_myj_uz0] + standard_name = u_wind_component_at_viscous_sublayer_top + long_name = u wind component at viscous sublayer top over water + units = m s-1 + dimensions = (horizontal_dimension) + type = real + kind = kind_phys +[phy_myj_vz0] + standard_name = v_wind_component_at_viscous_sublayer_top + long_name = v wind component at viscous sublayer top over water + units = m s-1 + dimensions = (horizontal_dimension) + type = real + kind = kind_phys +[phy_myj_z0base] + standard_name = baseline_surface_roughness_length + long_name = baseline surface roughness length for momentum in meter + units = m + dimensions = (horizontal_dimension) + type = real + kind = kind_phys +[phy_myj_akhs] + standard_name = heat_exchange_coefficient_for_MYJ_schemes + long_name = surface heat exchange_coefficient for MYJ schemes + units = m s-1 + dimensions = (horizontal_dimension) + type = real + kind = kind_phys +[phy_myj_akms] + standard_name = momentum_exchange_coefficient_for_MYJ_schemes + long_name = surface momentum exchange_coefficient for MYJ schemes + units = m s-1 + dimensions = (horizontal_dimension) + type = real + kind = kind_phys +[phy_myj_chkqlm] + standard_name = surface_layer_evaporation_switch + long_name = surface layer evaporation switch + units = none + dimensions = (horizontal_dimension) + type = real + kind = kind_phys +[phy_myj_elflx] + standard_name = kinematic_surface_latent_heat_flux + long_name = kinematic surface latent heat flux + units = m s-1 kg kg-1 + dimensions = (horizontal_dimension) + type = real + kind = kind_phys +[phy_myj_a1u] + standard_name = weight_for_momentum_at_viscous_sublayer_top + long_name = weight for momentum at viscous layer top + units = none + dimensions = (horizontal_dimension) + type = real + kind = kind_phys +[phy_myj_a1t] + standard_name = weight_for_potental_temperature_at_viscous_sublayer_top + long_name = weight for potental temperature at viscous layer top + units = none + dimensions = (horizontal_dimension) + type = real + kind = kind_phys +[phy_myj_a1q] + standard_name = weight_for_specific_humidity_at_viscous_sublayer_top + long_name = weight for Specfic Humidity at viscous layer top + units = none + dimensions = (horizontal_dimension) + type = real + kind = kind_phys ######################################################################## [ccpp-arg-table] @@ -4084,6 +4613,118 @@ dimensions = (horizontal_dimension) type = real kind = kind_phys +[dusfc_ls] + standard_name = integrated_x_momentum_flux_from_large_scale_gwd + long_name = integrated x momentum flux from large scale gwd + units = Pa s + dimensions = (horizontal_dimension) + type = real + kind = kind_phys +[dvsfc_ls] + standard_name = integrated_y_momentum_flux_from_large_scale_gwd + long_name = integrated y momentum flux from large scale gwd + units = Pa s + dimensions = (horizontal_dimension) + type = real + kind = kind_phys +[dusfc_bl] + standard_name = integrated_x_momentum_flux_from_blocking_drag + long_name = integrated x momentum flux from blocking drag + units = Pa s + dimensions = (horizontal_dimension) + type = real + kind = kind_phys +[dvsfc_bl] + standard_name = integrated_y_momentum_flux_from_blocking_drag + long_name = integrated y momentum flux from blocking drag + units = Pa s + dimensions = (horizontal_dimension) + type = real + kind = kind_phys +[dusfc_ss] + standard_name = integrated_x_momentum_flux_from_small_scale_gwd + long_name = integrated x momentum flux from small scale gwd + units = Pa s + dimensions = (horizontal_dimension) + type = real + kind = kind_phys +[dvsfc_ss] + standard_name = integrated_y_momentum_flux_from_small_scale_gwd + long_name = integrated y momentum flux from small scale gwd + units = Pa s + dimensions = (horizontal_dimension) + type = real + kind = kind_phys +[dusfc_fd] + standard_name = integrated_x_momentum_flux_from_form_drag + long_name = integrated x momentum flux from form drag + units = Pa s + dimensions = (horizontal_dimension) + type = real + kind = kind_phys +[dvsfc_fd] + standard_name = integrated_y_momentum_flux_from_form_drag + long_name = integrated y momentum flux from form drag + units = Pa s + dimensions = (horizontal_dimension) + type = real + kind = kind_phys +[dtaux2d_ls] + standard_name = x_momentum_tendency_from_large_scale_gwd + long_name = x momentum tendency from large scale gwd + units = m s-2 + dimensions = (horizontal_dimension,vertical_dimension) + type = real + kind = kind_phys +[dtauy2d_ls] + standard_name = y_momentum_tendency_from_large_scale_gwd + long_name = y momentum tendency from large scale gwd + units = m s-2 + dimensions = (horizontal_dimension,vertical_dimension) + type = real + kind = kind_phys +[dtaux2d_bl] + standard_name = x_momentum_tendency_from_blocking_drag + long_name = x momentum tendency from blocking drag + units = m s-2 + dimensions = (horizontal_dimension,vertical_dimension) + type = real + kind = kind_phys +[dtauy2d_bl] + standard_name = y_momentum_tendency_from_blocking_drag + long_name = y momentum tendency from blocking drag + units = m s-2 + dimensions = (horizontal_dimension,vertical_dimension) + type = real + kind = kind_phys +[dtaux2d_ss] + standard_name = x_momentum_tendency_from_small_scale_gwd + long_name = x momentum tendency from small scale gwd + units = m s-2 + dimensions = (horizontal_dimension,vertical_dimension) + type = real + kind = kind_phys +[dtauy2d_ss] + standard_name = y_momentum_tendency_from_small_scale_gwd + long_name = y momentum tendency from small scale gwd + units = m s-2 + dimensions = (horizontal_dimension,vertical_dimension) + type = real + kind = kind_phys +[dtaux2d_fd] + standard_name = x_momentum_tendency_from_form_drag + long_name = x momentum tendency from form drag + units = m s-2 + dimensions = (horizontal_dimension,vertical_dimension) + type = real + kind = kind_phys +[dtauy2d_fd] + standard_name = y_momentum_tendency_from_form_drag + long_name = y momentum tendency from form drag + units = m s-2 + dimensions = (horizontal_dimension,vertical_dimension) + type = real + kind = kind_phys [totprcp] standard_name = accumulated_lwe_thickness_of_precipitation_amount long_name = accumulated total precipitation @@ -5038,11 +5679,40 @@ dimensions = (horizontal_dimension,vertical_dimension) type = real kind = kind_phys +[dv3dt_ngw] + standard_name = time_integral_of_change_in_y_wind_due_to_nonstationary_gravity_wave + long_name = time integral of change in y wind due to NGW + units = m s-2 + dimensions = (horizontal_dimension,vertical_dimension) + type = real + kind = kind_phys + ######################################################################## [ccpp-arg-table] name = GFS_interstitial_type type = ddt +[adjsfculw_ocean] + standard_name = surface_upwelling_longwave_flux_over_ocean_interstitial + long_name = surface upwelling longwave flux at current time over ocean (temporary use as interstitial) + units = W m-2 + dimensions = (horizontal_dimension) + type = real + kind = kind_phys +[adjsfculw_land] + standard_name = surface_upwelling_longwave_flux_over_land_interstitial + long_name = surface upwelling longwave flux at current time over land (temporary use as interstitial) + units = W m-2 + dimensions = (horizontal_dimension) + type = real + kind = kind_phys +[adjsfculw_ice] + standard_name = surface_upwelling_longwave_flux_over_ice_interstitial + long_name = surface upwelling longwave flux at current time over ice (temporary use as interstitial) + units = W m-2 + dimensions = (horizontal_dimension) + type = real + kind = kind_phys [adjnirbmd] standard_name = surface_downwelling_direct_near_infrared_shortwave_flux long_name = surface downwelling beam near-infrared shortwave flux at current time @@ -5715,6 +6385,27 @@ dimensions = (horizontal_dimension) type = real kind = kind_phys +[semis_ocean] + standard_name = surface_longwave_emissivity_over_ocean_interstitial + long_name = surface lw emissivity in fraction over ocean (temporary use as interstitial) + units = frac + dimensions = (horizontal_dimension) + type = real + kind = kind_phys +[semis_land] + standard_name = surface_longwave_emissivity_over_land_interstitial + long_name = surface lw emissivity in fraction over land (temporary use as interstitial) + units = frac + dimensions = (horizontal_dimension) + type = real + kind = kind_phys +[semis_ice] + standard_name = surface_longwave_emissivity_over_ice_interstitial + long_name = surface lw emissivity in fraction over ice (temporary use as interstitial) + units = frac + dimensions = (horizontal_dimension) + type = real + kind = kind_phys [ep1d] standard_name = surface_upward_potential_latent_heat_flux long_name = surface upward potential latent heat flux @@ -5992,6 +6683,27 @@ dimensions = (horizontal_dimension) type = real kind = kind_phys +[gabsbdlw_ocean] + standard_name = surface_downwelling_longwave_flux_absorbed_by_ground_over_ocean + long_name = total sky surface downward longwave flux absorbed by the ground over ocean + units = W m-2 + dimensions = (horizontal_dimension) + type = real + kind = kind_phys +[gabsbdlw_land] + standard_name = surface_downwelling_longwave_flux_absorbed_by_ground_over_land + long_name = total sky surface downward longwave flux absorbed by the ground over land + units = W m-2 + dimensions = (horizontal_dimension) + type = real + kind = kind_phys +[gabsbdlw_ice] + standard_name = surface_downwelling_longwave_flux_absorbed_by_ground_over_ice + long_name = total sky surface downward longwave flux absorbed by the ground over ice + units = W m-2 + dimensions = (horizontal_dimension) + type = real + kind = kind_phys [gamma] standard_name = anisotropy_of_subgrid_orography long_name = anisotropy of subgrid orography @@ -6173,13 +6885,6 @@ dimensions = (horizontal_dimension) type = real kind = kind_phys -[hprime1] - standard_name = standard_deviation_of_subgrid_orography - long_name = standard deviation of subgrid orography - units = m - dimensions = (horizontal_dimension) - type = real - kind = kind_phys [icemp] standard_name = lwe_thickness_of_ice_amount long_name = explicit ice fall on physics timestep @@ -6547,6 +7252,13 @@ dimensions = (horizontal_dimension,vertical_dimension) type = real kind = kind_phys +[q2mp] + standard_name = specific_humidity_at_2m_from_noahmp + long_name = 2 meter specific humidity from noahmp + units = kg kg-1 + dimensions = (horizontal_dimension) + type = real + kind = kind_phys [qgl] standard_name = local_graupel_mixing_ratio long_name = moist (dry+vapor, no condensates) mixing ratio of graupel local to physics @@ -6927,6 +7639,13 @@ dimensions = (horizontal_dimension) type = real kind = kind_phys +[t2mmp] + standard_name = temperature_at_2m_from_noahmp + long_name = 2 meter temperature from noahmp + units = K + dimensions = (horizontal_dimension) + type = real + kind = kind_phys [theta] standard_name = angle_from_east_of_maximum_subgrid_orographic_variations long_name = angle with_respect to east of maximum subgrid orographic variations @@ -7491,6 +8210,13 @@ units = none dimensions = () type = integer +[huge] + standard_name = netcdf_float_fillvalue + long_name = definition of NetCDF float FillValue + units = none + dimensions = () + type = real + kind = kind_phys [con_cliq] standard_name = specific_heat_of_liquid_water_at_constant_pressure long_name = specific heat of liquid water at constant pressure @@ -7638,3 +8364,10 @@ dimensions = () type = real kind = kind_phys +[rhowater] + standard_name = liquid_water_density + long_name = density of liquid water + units = kg m-3 + dimensions = () + type = real + kind = kind_phys diff --git a/gfsphysics/makefile b/gfsphysics/makefile index d2d49c443..d195512a2 100644 --- a/gfsphysics/makefile +++ b/gfsphysics/makefile @@ -29,11 +29,14 @@ CPPDEFS += -DOVERLOAD_R4 endif # Set CCPP static api for static build ifneq (,$(findstring STATIC,$(CPPDEFS))) - CCPP_STATIC_API = ./CCPP_layer/ccpp_static_api.F90 + CCPP_STATIC_API = ../ccpp/physics/ccpp_static_api.F90 else CCPP_STATIC_API = endif # Set physics source files +# DH* 20190916 - can remove namelist_soilveg and set_soilveg +# once calculation of snocvr is moved from FV3GFS_io.F90/GFS_driver.F90 +# to CCPP (GFS_phys_time_vary.fv3.F90) *DH SRCS_f = \ ./physics/mersenne_twister.f \ ./physics/namelist_soilveg.f \ @@ -41,7 +44,8 @@ SRCS_f = \ ./physics/radlw_param.f \ ./physics/radsw_param.f \ ./physics/set_soilveg.f -SRCS_f90 = +SRCS_f90 = \ + ./physics/noahmp_tables.f90 SRCS_F = \ ./physics/machine.F SRCS_F90 = \ @@ -250,34 +254,6 @@ FFLAGS_LOPT1=$(subst CORE-AVX512,CORE-AVX-I,\ ./GFS_layer/GFS_diagnostics.o : ./GFS_layer/GFS_diagnostics.F90 $(FC) $(CPPDEFS) $(FFLAGS) $(OTHER_FFLAGS) -O0 -c $< -o $@ -# Force consistent results of math calculations for MG microphysics -# in DEBUG or REPRO mode; without this flag, the results of the intrinsic -# gamma function differ for the non-CCPP and CCPP version (Theia/Intel 18). -# This is only required for the dynamic CCPP build, not for the static build. -ifneq (,$(findstring TRANSITION,$(CPPDEFS))) -FFLAGS_LOPT2=$(subst CORE-AVX2,CORE-AVX-I,\ - $(subst no-prec-sqrt,prec-sqrt,\ - $(subst no-prec-div,prec-div,$(FFLAGS)))) -./physics/micro_mg2_0.o : ./physics/micro_mg2_0.F90 - $(FC) $(CPPDEFS) $(FFLAGS_LOPT2) $(OTHER_FFLAGS) -c $< -o $@ -./physics/micro_mg3_0.o : ./physics/micro_mg3_0.F90 - $(FC) $(CPPDEFS) $(FFLAGS_LOPT2) $(OTHER_FFLAGS) -c $< -o $@ -./physics/aer_cloud.o : ./physics/aer_cloud.F - $(FC) $(CPPDEFS) $(FFLAGS_LOPT2) $(OTHER_FFLAGS) -c $< -o $@ -./physics/cldmacro.o : ./physics/cldmacro.F - $(FC) $(CPPDEFS) $(FFLAGS_LOPT2) $(OTHER_FFLAGS) -c $< -o $@ -./physics/sflx.o : ./physics/sflx.f - $(FC) $(CPPDEFS) $(FFLAGS_LOPT2) $(OTHER_FFLAGS) -c $< -o $@ -./physics/gfdl_cloud_microphys.o: ./physics/gfdl_cloud_microphys.F90 - $(FC) $(CPPDEFS) $(FFLAGS_LOPT2) $(OTHER_FFLAGS) -c $< -o $@ -./physics/satmedmfvdif.o : ./physics/satmedmfvdif.f - $(FC) $(CPPDEFS) $(FFLAGS_LOPT2) $(OTHER_FFLAGS) -c $< -o $@ -./physics/cs_conv.o : ./physics/cs_conv.F90 - $(FC) $(CPPDEFS) $(FFLAGS_LOPT2) $(OTHER_FFLAGS) -c $< -o $@ -./physics/gcm_shoc.o : ./physics/gcm_shoc.f90 - $(FC) $(CPPDEFS) $(FFLAGS_LOPT2) $(OTHER_FFLAGS) -c $< -o $@ -endif - # Do preprocessing of the GFS drivers in two steps to be able # to look at the actual .f90 file that is compiled ./GFS_layer/GFS_driver.o: ./GFS_layer/GFS_driver.F90 diff --git a/gfsphysics/physics/GFS_debug.F90 b/gfsphysics/physics/GFS_debug.F90 index 3f2d590b8..75fa97603 100644 --- a/gfsphysics/physics/GFS_debug.F90 +++ b/gfsphysics/physics/GFS_debug.F90 @@ -5,10 +5,10 @@ module GFS_diagtoscreen private - + public GFS_diagtoscreen_init, GFS_diagtoscreen_run, GFS_diagtoscreen_finalize - public print_my_stuff, chksum_int, chksum_real + public print_my_stuff, chksum_int, chksum_real, print_var ! Calculating the checksum leads to segmentation faults with gfortran (bug in malloc?), ! thus print the sum of the array instead of the checksum. @@ -120,7 +120,6 @@ subroutine GFS_diagtoscreen_run (Model, Statein, Stateout, Sfcprop, Coupling, call print_var(mpirank,omprank, blkno, 'Sfcprop%zorlo' , Sfcprop%zorlo) call print_var(mpirank,omprank, blkno, 'Sfcprop%zorll' , Sfcprop%zorll) call print_var(mpirank,omprank, blkno, 'Sfcprop%fice' , Sfcprop%fice) -! call print_var(mpirank,omprank, blkno, 'Sfcprop%hprim' , Sfcprop%hprim) call print_var(mpirank,omprank, blkno, 'Sfcprop%hprime' , Sfcprop%hprime) call print_var(mpirank,omprank, blkno, 'Sfcprop%sncovr' , Sfcprop%sncovr) call print_var(mpirank,omprank, blkno, 'Sfcprop%snoalb' , Sfcprop%snoalb) @@ -185,6 +184,8 @@ subroutine GFS_diagtoscreen_run (Model, Statein, Stateout, Sfcprop, Coupling, ! call print_var(mpirank,omprank, blkno, 'Sfcprop%flag_frsoil', Sfcprop%flag_frsoil) ! call print_var(mpirank,omprank, blkno, 'Sfcprop%rhofr', Sfcprop%rhofr) ! call print_var(mpirank,omprank, blkno, 'Sfcprop%tsnow', Sfcprop%tsnow) + ! call print_var(mpirank,omprank, blkno, 'Sfcprop%snowfallac ', Sfcprop%snowfallac) + ! call print_var(mpirank,omprank, blkno, 'Sfcprop%acsnow ', Sfcprop%acsnow) !end if ! Radtend call print_var(mpirank,omprank, blkno, 'Radtend%sfcfsw%upfxc', Radtend%sfcfsw(:)%upfxc) @@ -221,7 +222,9 @@ subroutine GFS_diagtoscreen_run (Model, Statein, Stateout, Sfcprop, Coupling, call print_var(mpirank,omprank, blkno, 'Tbd%drain_cpl' , Tbd%drain_cpl) call print_var(mpirank,omprank, blkno, 'Tbd%dsnow_cpl' , Tbd%dsnow_cpl) end if - call print_var(mpirank,omprank, blkno, 'Tbd%phy_fctd' , Tbd%phy_fctd) + if (Model%nctp > 0 .and. Model%cscnv) then + call print_var(mpirank,omprank, blkno, 'Tbd%phy_fctd' , Tbd%phy_fctd) + end if call print_var(mpirank,omprank, blkno, 'Tbd%phy_f2d' , Tbd%phy_f2d) call print_var(mpirank,omprank, blkno, 'Tbd%phy_f3d' , Tbd%phy_f3d) do n=1,size(Tbd%phy_f3d(1,1,:)) @@ -297,10 +300,12 @@ subroutine GFS_diagtoscreen_run (Model, Statein, Stateout, Sfcprop, Coupling, call print_var(mpirank,omprank, blkno, 'Diag%tdomzr ', Diag%tdomzr) call print_var(mpirank,omprank, blkno, 'Diag%tdomip ', Diag%tdomip) call print_var(mpirank,omprank, blkno, 'Diag%tdoms ', Diag%tdoms) - call print_var(mpirank,omprank, blkno, 'Diag%wet1 ', Diag%wet1) ! CCPP only - !call print_var(mpirank,omprank, blkno, 'Diag%snowfallac ', Diag%snowfallac) - !call print_var(mpirank,omprank, blkno, 'Diag%acsnow ', Diag%acsnow) + !if (Model%lsm == Model%lsm_ruc) then + ! call print_var(mpirank,omprank, blkno, 'Diag%wet1 ', Sfcprop%wetness) + !else + call print_var(mpirank,omprank, blkno, 'Diag%wet1 ', Diag%wet1) + !end if call print_var(mpirank,omprank, blkno, 'Diag%skebu_wts ', Diag%skebu_wts) call print_var(mpirank,omprank, blkno, 'Diag%skebv_wts ', Diag%skebv_wts) call print_var(mpirank,omprank, blkno, 'Diag%sppt_wts ', Diag%sppt_wts) @@ -385,7 +390,7 @@ subroutine GFS_diagtoscreen_run (Model, Statein, Stateout, Sfcprop, Coupling, call print_var(mpirank,omprank, blkno, 'Coupling%sfcdsw ', Coupling%sfcdsw ) call print_var(mpirank,omprank, blkno, 'Coupling%sfcnsw ', Coupling%sfcnsw ) call print_var(mpirank,omprank, blkno, 'Coupling%sfcdlw ', Coupling%sfcdlw ) - if (Model%cplflx .or. Model%do_sppt) then + if (Model%cplflx .or. Model%do_sppt .or. Model%cplchm) then call print_var(mpirank,omprank, blkno, 'Coupling%rain_cpl', Coupling%rain_cpl) call print_var(mpirank,omprank, blkno, 'Coupling%snow_cpl', Coupling%snow_cpl) end if @@ -441,7 +446,6 @@ subroutine GFS_diagtoscreen_run (Model, Statein, Stateout, Sfcprop, Coupling, call print_var(mpirank,omprank, blkno, 'Coupling%psurfi_cpl ', Coupling%psurfi_cpl ) end if if (Model%cplchm) then - call print_var(mpirank,omprank, blkno, 'Coupling%rain_cpl ', Coupling%rain_cpl ) call print_var(mpirank,omprank, blkno, 'Coupling%rainc_cpl', Coupling%rainc_cpl) call print_var(mpirank,omprank, blkno, 'Coupling%ushfsfci ', Coupling%ushfsfci ) call print_var(mpirank,omprank, blkno, 'Coupling%dkt ', Coupling%dkt ) @@ -598,7 +602,7 @@ subroutine print_real_2d(mpirank,omprank,blkno,name,var) integer, intent(in) :: mpirank, omprank, blkno character(len=*), intent(in) :: name real(kind_phys), intent(in) :: var(:,:) - + integer :: k, i #ifdef PRINT_SUM @@ -724,7 +728,7 @@ end module GFS_diagtoscreen module GFS_abort private - + public GFS_abort_init, GFS_abort_run, GFS_abort_finalize contains diff --git a/gfsphysics/physics/dcyc2.f b/gfsphysics/physics/dcyc2.f index 9c8474ae4..6482060e0 100644 --- a/gfsphysics/physics/dcyc2.f +++ b/gfsphysics/physics/dcyc2.f @@ -180,7 +180,7 @@ subroutine dcyc2t3 & & sfcnirbmd, sfcnirdfd, sfcvisbmd, sfcvisdfd real(kind=kind_phys), dimension(ix,levs), intent(in) :: swh, hlw - &, swhc, hlwc& + &, swhc, hlwc ! --- input/output: real(kind=kind_phys), dimension(im,levs), intent(inout) :: dtdt & diff --git a/gfsphysics/physics/sfcsub.F b/gfsphysics/physics/sfcsub.F index 0539d9919..4fbabab8f 100644 --- a/gfsphysics/physics/sfcsub.F +++ b/gfsphysics/physics/sfcsub.F @@ -2697,7 +2697,7 @@ subroutine fixrdg(lugb,idim,jdim,fngrib, real (kind=kind_io8), allocatable :: data8(:) real (kind=kind_io4), allocatable :: data4(:) ! - logical, allocatable :: lbms(:) + logical*1, allocatable :: lbms(:) ! integer kpds(200),kgds(200) integer jpds(200),jgds(200), kpds0(200) @@ -8161,7 +8161,7 @@ subroutine fixrdc(lugb,fngrib,kpds5,kpds7,mon,slmask, real (kind=kind_io8), allocatable :: rlngrb(:), rltgrb(:) ! logical lmask, yr2kc, gaus, ijordr - logical, allocatable :: lbms(:) + logical*1, allocatable :: lbms(:) ! integer, intent(in) :: kpds7 integer kpds(1000),kgds(1000) diff --git a/io/FV3GFS_io.F90 b/io/FV3GFS_io.F90 index 6017f5fa6..3e7b7d2e7 100644 --- a/io/FV3GFS_io.F90 +++ b/io/FV3GFS_io.F90 @@ -31,9 +31,11 @@ module FV3GFS_io_mod use constants_mod, only: grav, rdgas ! !--- GFS physics modules +!#ifndef CCPP !--- variables needed for calculating 'sncovr' use namelist_soilveg, only: salp_data, snupx -#ifndef CCPP +!#endif + ! ! --- variables needed for Noah MP init ! @@ -42,7 +44,7 @@ module FV3GFS_io_mod dwsat_table,dksat_table,psisat_table, & isurban_table,isbarren_table, & isice_table,iswater_table -#endif + ! !--- GFS_typedefs !rab use GFS_typedefs, only: GFS_sfcprop_type, GFS_diag_type, & @@ -948,19 +950,20 @@ subroutine sfc_prop_restart_read (Sfcprop, Atm_block, Model, fv_domain) endif #ifdef CCPP if (Model%lsm == Model%lsm_ruc .and. warm_start) then -!--- Extra RUC variables -! -------------------------- + !--- Extra RUC variables Sfcprop(nb)%wetness(ix) = sfc_var2(i,j,nvar_s2m+19) Sfcprop(nb)%clw_surf(ix) = sfc_var2(i,j,nvar_s2m+20) Sfcprop(nb)%qwv_surf(ix) = sfc_var2(i,j,nvar_s2m+21) Sfcprop(nb)%tsnow(ix) = sfc_var2(i,j,nvar_s2m+22) Sfcprop(nb)%snowfallac(ix) = sfc_var2(i,j,nvar_s2m+23) Sfcprop(nb)%acsnow(ix) = sfc_var2(i,j,nvar_s2m+24) - endif -#endif -!--- Extra Noah MP variables -! -------------------------- + elseif (Model%lsm == Model%lsm_noahmp) then + !--- Extra Noah MP variables +#else +! Noah MP +! ------- if (Model%lsm == Model%lsm_noahmp) then +#endif Sfcprop(nb)%snowxy(ix) = sfc_var2(i,j,nvar_s2m+19) Sfcprop(nb)%tvxy(ix) = sfc_var2(i,j,nvar_s2m+20) Sfcprop(nb)%tgxy(ix) = sfc_var2(i,j,nvar_s2m+21) @@ -1072,6 +1075,7 @@ subroutine sfc_prop_restart_read (Sfcprop, Atm_block, Model, fv_domain) ! TODO: move to physics and stop building namelist_soilveg/set_soilveg ! in the FV3/non-CCPP physics when the CCPP-enabled executable is built. #endif +!#ifndef CCPP !--- if sncovr does not exist in the restart, need to create it if (nint(sfc_var2(1,1,32)) == -9999) then if (Model%me == Model%master ) call mpp_error(NOTE, 'gfs_driver::surface_props_input - computing sncovr') @@ -1093,6 +1097,7 @@ subroutine sfc_prop_restart_read (Sfcprop, Atm_block, Model, fv_domain) enddo enddo endif +!#endif if(Model%frac_grid) then ! 3-way composite do nb = 1, Atm_block%nblks @@ -1139,7 +1144,6 @@ subroutine sfc_prop_restart_read (Sfcprop, Atm_block, Model, fv_domain) enddo enddo -#ifndef CCPP if (Model%lsm == Model%lsm_noahmp) then if (nint(sfc_var2(1,1,nvar_s2m+19)) == -66666) then if (Model%me == Model%master ) call mpp_error(NOTE, 'gfs_driver:: - Cold start Noah MP ') @@ -1403,7 +1407,6 @@ subroutine sfc_prop_restart_read (Sfcprop, Atm_block, Model, fv_domain) enddo ! nb endif endif !if Noah MP cold start ends -#endif end subroutine sfc_prop_restart_read @@ -1495,7 +1498,7 @@ subroutine sfc_prop_restart_write (Sfcprop, Atm_block, Model, fv_domain, timesta allocate(sfc_name2(nvar2m+nvar2o+nvar2mp+nvar2r)) allocate(sfc_name3(nvar3+nvar3mp)) allocate(sfc_var2(nx,ny,nvar2m+nvar2o+nvar2mp+nvar2r)) - if (Model%lsm == Model%lsm_noah) then + if (Model%lsm == Model%lsm_noah .or. Model%lsm == Model%lsm_noahmp) then allocate(sfc_var3(nx,ny,Model%lsoil,nvar3)) elseif (Model%lsm == Model%lsm_ruc) then allocate(sfc_var3(nx,ny,Model%lsoil_lsm,nvar3)) @@ -1588,6 +1591,7 @@ subroutine sfc_prop_restart_write (Sfcprop, Atm_block, Model, fv_domain, timesta #else ! Only needed when Noah MP LSM is used - 29 2D if(Model%lsm == Model%lsm_noahmp) then +#endif sfc_name2(nvar2m+19) = 'snowxy' sfc_name2(nvar2m+20) = 'tvxy' sfc_name2(nvar2m+21) = 'tgxy' @@ -1617,7 +1621,6 @@ subroutine sfc_prop_restart_write (Sfcprop, Atm_block, Model, fv_domain, timesta sfc_name2(nvar2m+45) = 'smcwtdxy' sfc_name2(nvar2m+46) = 'deeprechxy' sfc_name2(nvar2m+47) = 'rechxy' -#endif endif !--- register the 2D fields @@ -1825,7 +1828,7 @@ subroutine sfc_prop_restart_write (Sfcprop, Atm_block, Model, fv_domain, timesta endif #ifdef CCPP - if (Model%lsm == Model%lsm_noah) then + if (Model%lsm == Model%lsm_noah .or. Model%lsm == Model%lsm_noahmp) then !--- 3D variables do lsoil = 1,Model%lsoil sfc_var3(i,j,lsoil,1) = Sfcprop(nb)%stc(ix,lsoil) !--- stc diff --git a/io/makefile b/io/makefile index a6acdfc4e..82e61f68f 100644 --- a/io/makefile +++ b/io/makefile @@ -20,16 +20,25 @@ LIBRARY = libfv3io.a FFLAGS += -I$(FMS_DIR) -I../gfsphysics -I../ipd -I../namphysics +ifneq (,$(findstring NO_INLINE_POST,$(CPPDEFS))) +POST_SRC = \ + ./post_gfs_stub.F90 +else +POST_SRC = \ + ./post_gfs.F90 \ + ./post_nems_routines.F90 +endif + SRCS_f = SRCS_f90 = SRCS_F = -SRCS_F90 = ffsync.F90 \ +SRCS_F90 = \ + ./ffsync.F90 \ ./FV3GFS_io.F90 \ - ./post_gfs.F90 \ - ./post_nems_routines.F90 \ + $(POST_SRC) \ ./module_write_nemsio.F90 \ ./module_write_netcdf.F90 \ ./module_fv3_io_def.F90 \ @@ -67,6 +76,8 @@ module_wrt_grid_comp.o: module_wrt_grid_comp.F90 $(FC) $(CPPDEFS) $(CPPFLAGS) $(FPPFLAGS) $(FFLAGS) $(OTHERFLAGS) $(OTHER_FFLAGS) $(ESMF_INC) -c module_wrt_grid_comp.F90 post_gfs.o: post_gfs.F90 $(FC) $(CPPDEFS) $(CPPFLAGS) $(FPPFLAGS) $(FFLAGS) $(OTHERFLAGS) $(OTHER_FFLAGS) $(ESMF_INC) -I$(POST_INC) -c post_gfs.F90 +post_gfs_stub.o: post_gfs_stub.F90 + $(FC) $(CPPDEFS) $(CPPFLAGS) $(FPPFLAGS) $(FFLAGS) $(OTHERFLAGS) $(OTHER_FFLAGS) $(ESMF_INC) -c post_gfs_stub.F90 .PHONY: clean diff --git a/io/module_wrt_grid_comp.F90 b/io/module_wrt_grid_comp.F90 index d8e936b60..d0846be53 100644 --- a/io/module_wrt_grid_comp.F90 +++ b/io/module_wrt_grid_comp.F90 @@ -255,6 +255,12 @@ subroutine wrt_initialize(wrt_comp, imp_state_write, exp_state_write, clock, rc) line=__LINE__, file=__FILE__)) return if( wrt_int_state%write_dopost ) then +#ifdef NO_INLINE_POST + rc = ESMF_RC_NOT_IMPL + print *,'inline post not available on this machine' + if (ESMF_LogFoundError(rcToCheck=rc, msg=ESMF_LOGERR_PASSTHRU, & + line=__LINE__, file=__FILE__)) return +#endif call esmf_configgetattribute(cf,wrt_int_state%post_nlunit,default=777,label='nlunit:',rc=rc) if (ESMF_LogFoundError(rcToCheck=rc, msg=ESMF_LOGERR_PASSTHRU, & line=__LINE__, file=__FILE__)) return diff --git a/io/post_gfs_stub.F90 b/io/post_gfs_stub.F90 new file mode 100644 index 000000000..3e61e31a1 --- /dev/null +++ b/io/post_gfs_stub.F90 @@ -0,0 +1,58 @@ +!----------------------------------------------------------------------- +!%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +!----------------------------------------------------------------------- +! +module post_gfs + + use module_fv3_io_def, only : wrttasks_per_group,filename_base + use write_internal_state, only : wrt_internal_state + + implicit none + + public post_run_gfs, post_getattr_gfs + + contains + + subroutine post_run_gfs(wrt_int_state,mypei,mpicomp,lead_write, & + mynfhr,mynfmin,mynfsec) +! +! revision history: +! Jul 2019 J. Wang create interface to run inline post for FV3 +! +! +!----------------------------------------------------------------------- +! + implicit none +! +!----------------------------------------------------------------------- +! + type(wrt_internal_state),intent(in) :: wrt_int_state + integer,intent(in) :: mypei + integer,intent(in) :: mpicomp + integer,intent(in) :: lead_write + integer,intent(in) :: mynfhr + integer,intent(in) :: mynfmin + integer,intent(in) :: mynfsec +! + print *,'in stub post_run_gfs - not supported on this machine, return' +! + end subroutine post_run_gfs +! +!----------------------------------------------------------------------- +! + subroutine post_getattr_gfs(wrt_int_state, fldbundle) +! + use esmf +! + implicit none +! + type(wrt_internal_state),intent(inout) :: wrt_int_state + type(ESMF_FieldBundle), intent(in) :: fldbundle +! +! + print *,'in stub post_getattr_gfs - not supported on this machine, return' +! + end subroutine post_getattr_gfs + + + end module post_gfs diff --git a/makefile b/makefile index 18e175908..ff09a48f8 100644 --- a/makefile +++ b/makefile @@ -17,7 +17,7 @@ else PHYSP = gfs endif -FFLAGS += -I$(FMS_DIR) -I$(PHYSP)physics -Iipd -Icpl -Iio -Iatmos_cubed_sphere -ICCPP_layer -I../stochastic_physics +FFLAGS += -I$(FMS_DIR) -I$(PHYSP)physics -Iipd -Icpl -Iio -Iatmos_cubed_sphere -Iccpp/driver -I../stochastic_physics CPPDEFS += -DESMF_VERSION_MAJOR=$(ESMF_VERSION_MAJOR) # Flag to CCPP build for 32bit dynamics @@ -41,13 +41,13 @@ ifneq (,$(findstring CCPP,$(CPPDEFS))) libs: $(MAKE) -C cpl $(MAKE_OPTS) FMS_DIR=$(FMS_DIR) $(MAKE) -C $(PHYSP)physics $(MAKE_OPTS) FMS_DIR=$(FMS_DIR) 32BIT=N DYN32=$(DYN32) # force gfs physics to 64bit, flag to CCPP build for 32bit dynamics - $(MAKE) -C CCPP_layer $(MAKE_OPTS) FMS_DIR=$(FMS_DIR) 32BIT=N DYN32=$(DYN32) # force gfs physics to 64bit, flag to CCPP build for 32bit dynamics + $(MAKE) -C ccpp/driver $(MAKE_OPTS) FMS_DIR=$(FMS_DIR) 32BIT=N DYN32=$(DYN32) # force gfs physics to 64bit, flag to CCPP build for 32bit dynamics $(MAKE) -C ipd $(MAKE_OPTS) FMS_DIR=$(FMS_DIR) 32BIT=N # force gfs physics to 64bit $(MAKE) -C io $(MAKE_OPTS) FMS_DIR=$(FMS_DIR) $(MAKE) -C atmos_cubed_sphere $(MAKE_OPTS) FMS_DIR=$(FMS_DIR) $(MAKE) -C ../stochastic_physics $(MAKE_OPTS) FMS_DIR=$(FMS_DIR) 32BIT=N # force gfs physics to 64bit -$(FV3_EXE): atmos_model.o coupler_main.o CCPP_layer/libccppdriver.a atmos_cubed_sphere/libfv3core.a io/libfv3io.a ipd/libipd.a $(PHYSP)physics/lib$(PHYSP)phys.a ../stochastic_physics/libstochastic_physics.a cpl/libfv3cpl.a fms/libfms.a +$(FV3_EXE): atmos_model.o coupler_main.o ccpp/driver/libccppdriver.a atmos_cubed_sphere/libfv3core.a io/libfv3io.a ipd/libipd.a $(PHYSP)physics/lib$(PHYSP)phys.a ../stochastic_physics/libstochastic_physics.a cpl/libfv3cpl.a fms/libfms.a $(LD) -o $@ $^ $(NCEPLIBS) $(LDFLAGS) else @@ -92,7 +92,7 @@ endif ifneq (,$(findstring CCPP,$(CPPDEFS))) esmf_make_fragment: @rm -rf nems_dir; mkdir nems_dir - @cp $(FV3CAP_LIB) CCPP_layer/libccppdriver.a atmos_cubed_sphere/libfv3core.a io/libfv3io.a ipd/libipd.a $(PHYSP)physics/lib$(PHYSP)phys.a cpl/libfv3cpl.a ../stochastic_physics/libstochastic_physics.a nems_dir + @cp $(FV3CAP_LIB) ccpp/driver/libccppdriver.a atmos_cubed_sphere/libfv3core.a io/libfv3io.a ipd/libipd.a $(PHYSP)physics/lib$(PHYSP)phys.a cpl/libfv3cpl.a ../stochastic_physics/libstochastic_physics.a nems_dir @cp fv3gfs_cap_mod.mod nems_dir @echo "# ESMF self-describing build dependency makefile fragment" > fv3.mk @echo "# src location $(PWD)" >> fv3.mk @@ -100,7 +100,7 @@ esmf_make_fragment: @echo "ESMF_DEP_FRONT = fv3gfs_cap_mod" >> fv3.mk # additional include files needed for PGI #@echo "ESMF_DEP_INCPATH = $(PWD)/nems_dir" >> fv3.mk - @echo "ESMF_DEP_INCPATH = $(PWD) $(addprefix $(PWD)/, nems_dir CCPP_layer atmos_cubed_sphere io fms gfsphysics cpl ipd ../stochastic_physics)" >> fv3.mk + @echo "ESMF_DEP_INCPATH = $(PWD) $(addprefix $(PWD)/, nems_dir ccpp/driver atmos_cubed_sphere io fms gfsphysics cpl ipd ../stochastic_physics)" >> fv3.mk @echo "ESMF_DEP_CMPL_OBJS =" >> fv3.mk @echo "ESMF_DEP_LINK_OBJS = $(addprefix $(PWD)/nems_dir/, libfv3cap.a libccppdriver.a libfv3core.a libfv3io.a libipd.a lib$(PHYSP)phys.a libfv3cpl.a libstochastic_physics.a) $(SIONLIB_LINK_FLAGS)" >> fv3.mk @echo "ESMF_DEP_SHRD_PATH =" >> fv3.mk @@ -145,7 +145,7 @@ clean: @echo "Cleaning ... " @echo (cd $(PHYSP)physics && make clean) - (cd CCPP_layer && make clean) + (cd ccpp/driver && make clean) (cd ipd && make clean) (cd ../stochastic_physics && make clean) (cd io && make clean)