diff --git a/.github/ISSUE_TEMPLATE/bug_report.md b/.github/ISSUE_TEMPLATE/bug_report.md new file mode 100644 index 000000000..4f9092ff9 --- /dev/null +++ b/.github/ISSUE_TEMPLATE/bug_report.md @@ -0,0 +1,33 @@ +--- +name: Bug report +about: Create a report to help us improve +title: '' +labels: bug +assignees: '' + +--- + +# Description + +Provide a clear and concise description of the bug and what behavior you are expecting. + +## Steps to Reproduce + +Please provide detailed steps for reproducing the issue. + +1. step 1 +2. step 2 +3. see the bug... + +## Additional Context + +Please provide any relevant information about your setup. This is important in case the issue is not reproducible except for under certain conditions. + +* Machine +* Compiler +* Suite Definition File or Scheme +* Reference other issues or PRs in other repositories that this is related to, and how they are related. + +## Output + +Please include any relevant log files, screenshots or other output here. diff --git a/.github/ISSUE_TEMPLATE/feature_request.md b/.github/ISSUE_TEMPLATE/feature_request.md new file mode 100644 index 000000000..c5f7619d8 --- /dev/null +++ b/.github/ISSUE_TEMPLATE/feature_request.md @@ -0,0 +1,20 @@ +--- +name: Feature request +about: Suggest an idea for this project +title: '' +labels: enhancement +assignees: '' + +--- + +## Description +Provide a clear and concise description of the problem to be solved. + +## Solution +Add a clear and concise description of the proposed solution. + +## Alternatives (optional) +If applicable, add a description of any alternative solutions or features you've considered. + +## Related to (optional) +Directly reference any issues or PRs in this or other repositories that this is related to, and describe how they are related. diff --git a/.github/PULL_REQUEST_TEMPLATE/pull_request_template.md b/.github/PULL_REQUEST_TEMPLATE/pull_request_template.md new file mode 100644 index 000000000..5968702e5 --- /dev/null +++ b/.github/PULL_REQUEST_TEMPLATE/pull_request_template.md @@ -0,0 +1,22 @@ +## Description of Changes: +One or more paragraphs describing the problem, solution, and required changes. + +## Tests Conducted: +Explicitly state what tests were run on these changes, or if any are still pending (for README or other text-only changes, just put "None required". Make note of the compilers used, the platform/machine, and other relevant details as necessary. For more complicated changes, or those resulting in scientific changes, please be explicit! +**OR** Add any links to tests conducted. For example, "See ufs-community/ufs-weather-model/pull/" + +## Dependencies: +Add any links to parent PRs (e.g. SCM and/or UFS PRs) or submodules (e.g. rte-rrtmgp). For example: +- NCAR/ccpp-framework/pull/ +- NOAA-EMC/fv3atm/pull/ +- ufs-community/ufs-weather-model/pull/ + +## Documentation: +Does this PR add new capabilities that need to be documented or require modifications to the existing documentation? If so, brief supporting material can be provided here. Contact the CODEOWNERS if your PR requires extensive updates to the documentation. See https://github.com/NCAR/ccpp-doc for Technical Documentation or https://dtcenter.org/community-code/common-community-physics-package-ccpp/documentation for the latest Scientific Documentation. + +## Issue (optional): +If this PR is resolving or referencing one or more issues, in this repository or elewhere, list them here. For example, "Fixes issue mentioned in #123" or "Related to bug in https://github.com/NCAR/other_repository/pull/63" + +## Contributors (optional): +If others have contributed to this work aside from the PR author, list them here + diff --git a/CMakeLists.txt b/CMakeLists.txt index 441f047f6..e5c756d15 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -31,9 +31,9 @@ set(AUTHORS "Grant Firl" "Dom Heinzeller" "Man Zhang" "Laurie Carson") 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}") + #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") else (OPENMP) message (STATUS "Disable OpenMP support for C/C++/Fortran compiler") @@ -107,71 +107,130 @@ set(SCHEMES_SFX_OPT "") set(SCHEMES_SFX_PREC "") # Create a duplicate of the SCHEMES list for handling floating point precision flags set(SCHEMES2 ${SCHEMES}) + +# Schemes and caps from the CCPP code generator use full paths with symlinks +# resolved, we need to do the same here for the below logic to work +get_filename_component(FULL_PATH_TO_CMAKELISTS CMakeLists.txt REALPATH BASE_DIR ${LOCAL_CURRENT_SOURCE_DIR}) +get_filename_component(LOCAL_CURRENT_SOURCE_DIR ${FULL_PATH_TO_CMAKELISTS} DIRECTORY) + +# List of files that need to be compiled without OpenMP +set(SCHEMES_OPENMP_OFF ${LOCAL_CURRENT_SOURCE_DIR}/physics/rte-rrtmgp/rrtmgp/mo_gas_optics.F90 + ${LOCAL_CURRENT_SOURCE_DIR}/physics/rte-rrtmgp/rrtmgp/mo_rrtmgp_constants.F90 + ${LOCAL_CURRENT_SOURCE_DIR}/physics/rte-rrtmgp/rrtmgp/mo_rrtmgp_util_reorder.F90 + ${LOCAL_CURRENT_SOURCE_DIR}/physics/rte-rrtmgp/rrtmgp/mo_gas_concentrations.F90 + ${LOCAL_CURRENT_SOURCE_DIR}/physics/rte-rrtmgp/rrtmgp/kernels-openacc/mo_gas_optics_kernels.F90 + ${LOCAL_CURRENT_SOURCE_DIR}/physics/rte-rrtmgp/rrtmgp/mo_rrtmgp_util_string.F90 + ${LOCAL_CURRENT_SOURCE_DIR}/physics/rte-rrtmgp/rrtmgp/kernels/mo_gas_optics_kernels.F90 + ${LOCAL_CURRENT_SOURCE_DIR}/physics/rte-rrtmgp/rrtmgp/kernels/mo_rrtmgp_util_reorder_kernels.F90 + ${LOCAL_CURRENT_SOURCE_DIR}/physics/rte-rrtmgp/rrtmgp/mo_gas_optics_rrtmgp.F90 + ${LOCAL_CURRENT_SOURCE_DIR}/physics/rte-rrtmgp/tests/mo_testing_io.F90 + ${LOCAL_CURRENT_SOURCE_DIR}/physics/rte-rrtmgp/tests/clear_sky_regression.F90 + ${LOCAL_CURRENT_SOURCE_DIR}/physics/rte-rrtmgp/extensions/mo_rrtmgp_clr_all_sky.F90 + ${LOCAL_CURRENT_SOURCE_DIR}/physics/rte-rrtmgp/extensions/mo_fluxes_byband_kernels.F90 + ${LOCAL_CURRENT_SOURCE_DIR}/physics/rte-rrtmgp/extensions/mo_fluxes_byband.F90 + ${LOCAL_CURRENT_SOURCE_DIR}/physics/rte-rrtmgp/extensions/solar_variability/mo_solar_variability.F90 + ${LOCAL_CURRENT_SOURCE_DIR}/physics/rte-rrtmgp/extensions/mo_heating_rates.F90 + ${LOCAL_CURRENT_SOURCE_DIR}/physics/rte-rrtmgp/extensions/mo_fluxes_bygpoint.F90 + ${LOCAL_CURRENT_SOURCE_DIR}/physics/rte-rrtmgp/extensions/mo_compute_bc.F90 + ${LOCAL_CURRENT_SOURCE_DIR}/physics/rte-rrtmgp/extensions/cloud_optics/mo_cloud_sampling.F90 + ${LOCAL_CURRENT_SOURCE_DIR}/physics/rte-rrtmgp/extensions/cloud_optics/mo_cloud_optics.F90 + ${LOCAL_CURRENT_SOURCE_DIR}/physics/rte-rrtmgp/examples/mo_load_coefficients.F90 + ${LOCAL_CURRENT_SOURCE_DIR}/physics/rte-rrtmgp/examples/rfmip-clear-sky/rrtmgp_rfmip_sw.F90 + ${LOCAL_CURRENT_SOURCE_DIR}/physics/rte-rrtmgp/examples/rfmip-clear-sky/mo_rfmip_io.F90 + ${LOCAL_CURRENT_SOURCE_DIR}/physics/rte-rrtmgp/examples/rfmip-clear-sky/rrtmgp_rfmip_lw.F90 + ${LOCAL_CURRENT_SOURCE_DIR}/physics/rte-rrtmgp/examples/mo_simple_netcdf.F90 + ${LOCAL_CURRENT_SOURCE_DIR}/physics/rte-rrtmgp/examples/all-sky/rrtmgp_allsky.F90 + ${LOCAL_CURRENT_SOURCE_DIR}/physics/rte-rrtmgp/examples/all-sky/mo_load_cloud_coefficients.F90 + ${LOCAL_CURRENT_SOURCE_DIR}/physics/rte-rrtmgp/examples/all-sky/mo_garand_atmos_io.F90 + ${LOCAL_CURRENT_SOURCE_DIR}/physics/rte-rrtmgp/rte/mo_rte_config.F90 + ${LOCAL_CURRENT_SOURCE_DIR}/physics/rte-rrtmgp/rte/mo_source_functions.F90 + ${LOCAL_CURRENT_SOURCE_DIR}/physics/rte-rrtmgp/rte/mo_rte_sw.F90 + ${LOCAL_CURRENT_SOURCE_DIR}/physics/rte-rrtmgp/rte/mo_fluxes.F90 + ${LOCAL_CURRENT_SOURCE_DIR}/physics/rte-rrtmgp/rte/mo_rte_lw.F90 + ${LOCAL_CURRENT_SOURCE_DIR}/physics/rte-rrtmgp/rte/kernels-openacc/mo_rte_solver_kernels.F90 + ${LOCAL_CURRENT_SOURCE_DIR}/physics/rte-rrtmgp/rte/kernels-openacc/mo_optical_props_kernels.F90 + ${LOCAL_CURRENT_SOURCE_DIR}/physics/rte-rrtmgp/rte/mo_rte_util_array.F90 + ${LOCAL_CURRENT_SOURCE_DIR}/physics/rte-rrtmgp/rte/kernels/mo_rte_solver_kernels.F90 + ${LOCAL_CURRENT_SOURCE_DIR}/physics/rte-rrtmgp/rte/kernels/mo_optical_props_kernels.F90 + ${LOCAL_CURRENT_SOURCE_DIR}/physics/rte-rrtmgp/rte/kernels/mo_fluxes_broadband_kernels.F90 + ${LOCAL_CURRENT_SOURCE_DIR}/physics/rte-rrtmgp/rte/mo_rte_kind.F90 + ${LOCAL_CURRENT_SOURCE_DIR}/physics/rte-rrtmgp/rte/mo_optical_props.F90) + #------------------------------------------------------------------------------ if (${CMAKE_Fortran_COMPILER_ID} STREQUAL "GNU") + set(CMAKE_Fortran_FLAGS "${CMAKE_Fortran_FLAGS} -ffree-line-length-none") - SET_SOURCE_FILES_PROPERTIES(${CMAKE_CURRENT_SOURCE_DIR}/physics/module_bfmicrophysics.f - ${CMAKE_CURRENT_SOURCE_DIR}/physics/sflx.f - ${CMAKE_CURRENT_SOURCE_DIR}/physics/sfc_diff.f - ${CMAKE_CURRENT_SOURCE_DIR}/physics/sfc_diag.f - PROPERTIES COMPILE_FLAGS -fdefault-real-8) - SET_SOURCE_FILES_PROPERTIES(${CMAKE_CURRENT_SOURCE_DIR}/physics/module_nst_model.f90 - ${CMAKE_CURRENT_SOURCE_DIR}/physics/calpreciptype.f90 - PROPERTIES COMPILE_FLAGS "-fdefault-real-8 -ffree-form") - SET_SOURCE_FILES_PROPERTIES(${CMAKE_CURRENT_SOURCE_DIR}/physics/mersenne_twister.f - PROPERTIES COMPILE_FLAGS "-fdefault-real-8 -fno-range-check") - SET_SOURCE_FILES_PROPERTIES(${CMAKE_CURRENT_SOURCE_DIR}/physics/module_nst_water_prop.f90 - PROPERTIES COMPILE_FLAGS "-ffree-line-length-none -fdefault-real-8 -ffree-form") - SET_SOURCE_FILES_PROPERTIES(${CMAKE_CURRENT_SOURCE_DIR}/physics/aer_cloud.F - ${CMAKE_CURRENT_SOURCE_DIR}/physics/wv_saturation.F - ${CMAKE_CURRENT_SOURCE_DIR}/physics/cldwat2m_micro.F - ${CMAKE_CURRENT_SOURCE_DIR}/physics/surface_perturbation.F90 - PROPERTIES COMPILE_FLAGS "-fdefault-real-8 -fdefault-double-8") - SET_SOURCE_FILES_PROPERTIES(${CMAKE_CURRENT_SOURCE_DIR}/physics/module_mp_thompson_make_number_concentrations.F90 - PROPERTIES COMPILE_FLAGS "-fdefault-real-8 -fdefault-double-8") - SET_SOURCE_FILES_PROPERTIES(${CMAKE_CURRENT_SOURCE_DIR}/physics/module_SF_JSFC.F90 - ${CMAKE_CURRENT_SOURCE_DIR}/physics/module_BL_MYJPBL.F90 - PROPERTIES COMPILE_FLAGS "-fdefault-real-8 -fdefault-double-8") + + SET_SOURCE_FILES_PROPERTIES(${LOCAL_CURRENT_SOURCE_DIR}/physics/module_bfmicrophysics.f + ${LOCAL_CURRENT_SOURCE_DIR}/physics/sflx.f + ${LOCAL_CURRENT_SOURCE_DIR}/physics/sfc_diff.f + ${LOCAL_CURRENT_SOURCE_DIR}/physics/sfc_diag.f + ${LOCAL_CURRENT_SOURCE_DIR}/physics/module_nst_model.f90 + ${LOCAL_CURRENT_SOURCE_DIR}/physics/calpreciptype.f90 + ${LOCAL_CURRENT_SOURCE_DIR}/physics/mersenne_twister.f + ${LOCAL_CURRENT_SOURCE_DIR}/physics/module_nst_water_prop.f90 + ${LOCAL_CURRENT_SOURCE_DIR}/physics/aer_cloud.F + ${LOCAL_CURRENT_SOURCE_DIR}/physics/wv_saturation.F + ${LOCAL_CURRENT_SOURCE_DIR}/physics/cldwat2m_micro.F + ${LOCAL_CURRENT_SOURCE_DIR}/physics/surface_perturbation.F90 + ${LOCAL_CURRENT_SOURCE_DIR}/physics/module_mp_thompson_make_number_concentrations.F90 + ${LOCAL_CURRENT_SOURCE_DIR}/physics/module_SF_JSFC.F90 + ${LOCAL_CURRENT_SOURCE_DIR}/physics/module_BL_MYJPBL.F90 + PROPERTIES COMPILE_FLAGS "-fdefault-real-8 -fdefault-double-8 ${OpenMP_Fortran_FLAGS}") + if (PROJECT STREQUAL "CCPP-FV3") # Set 32-bit floating point precision flags for certain files # that are executed in the dynamics (fast physics part) if (DYN32) - if (${CMAKE_CURRENT_SOURCE_DIR}/physics/gfdl_fv_sat_adj.F90 IN_LIST SCHEMES) + if (${LOCAL_CURRENT_SOURCE_DIR}/physics/gfdl_fv_sat_adj.F90 IN_LIST SCHEMES) # Reduce floating point precision from 64-bit to 32-bit, if necessary set(CMAKE_Fortran_FLAGS_PREC32 ${CMAKE_Fortran_FLAGS_DEFAULT_PREC}) string(REPLACE "-fdefault-real-8" "" CMAKE_Fortran_FLAGS_PREC32 "${CMAKE_Fortran_FLAGS_PREC32}") string(REPLACE "-fdefault-double-8" "" CMAKE_Fortran_FLAGS_PREC32 "${CMAKE_Fortran_FLAGS_PREC32}") - SET_PROPERTY(SOURCE ${CMAKE_CURRENT_SOURCE_DIR}/physics/gfdl_fv_sat_adj.F90 - APPEND_STRING PROPERTY COMPILE_FLAGS " ${CMAKE_Fortran_FLAGS_PREC32} ") + SET_PROPERTY(SOURCE ${LOCAL_CURRENT_SOURCE_DIR}/physics/gfdl_fv_sat_adj.F90 + APPEND_STRING PROPERTY COMPILE_FLAGS " ${CMAKE_Fortran_FLAGS_PREC32} ${OpenMP_Fortran_FLAGS} ") # Add all of the above files to the list of schemes with special floating point precision flags - list(APPEND SCHEMES_SFX_PREC ${CMAKE_CURRENT_SOURCE_DIR}/physics/gfdl_fv_sat_adj.F90) + list(APPEND SCHEMES_SFX_PREC ${LOCAL_CURRENT_SOURCE_DIR}/physics/gfdl_fv_sat_adj.F90) endif() endif() # Remove files with special floating point precision flags from list - # of files with standard floating point precision flags flags + # of files with standard floating point precision flags if (SCHEMES_SFX_PREC) list(REMOVE_ITEM SCHEMES2 ${SCHEMES_SFX_PREC}) - endif (SCHEMES_SFX_PREC) + endif () + + if (PROJECT STREQUAL "CCPP-FV3") + # Remove files that need to be compiled without OpenMP from list + # of files with standard compiler flags, and assign no-OpenMP flags + if (SCHEMES_OPENMP_OFF) + list(REMOVE_ITEM SCHEMES2 ${SCHEMES_OPENMP_OFF}) + endif () + # Assign standard floating point precision flags to all remaining schemes and caps + SET_PROPERTY(SOURCE ${SCHEMES_OPENMP_OFF} + APPEND_STRING PROPERTY COMPILE_FLAGS " ${CMAKE_Fortran_FLAGS_DEFAULT_PREC} ") + endif() + # Assign standard floating point precision flags to all remaining schemes and caps SET_PROPERTY(SOURCE ${SCHEMES2} ${CAPS} - APPEND_STRING PROPERTY COMPILE_FLAGS " ${CMAKE_Fortran_FLAGS_DEFAULT_PREC} ") + APPEND_STRING PROPERTY COMPILE_FLAGS " ${CMAKE_Fortran_FLAGS_DEFAULT_PREC} ${OpenMP_Fortran_FLAGS} ") + endif (PROJECT STREQUAL "CCPP-FV3") elseif (${CMAKE_Fortran_COMPILER_ID} STREQUAL "Intel") # Adjust settings for bit-for-bit reproducibility of NEMSfv3gfs if (PROJECT STREQUAL "CCPP-FV3") - if (${CMAKE_CURRENT_SOURCE_DIR}/physics/module_sf_mynn.F90 IN_LIST SCHEMES) + if (${LOCAL_CURRENT_SOURCE_DIR}/physics/module_sf_mynn.F90 IN_LIST SCHEMES) # Reduce optimization for module_sf_mynn.F90 (to avoid an apparent compiler bug with Intel 18 on Hera) - SET_SOURCE_FILES_PROPERTIES(${CMAKE_CURRENT_SOURCE_DIR}/physics/module_sf_mynn.F90 + SET_SOURCE_FILES_PROPERTIES(${LOCAL_CURRENT_SOURCE_DIR}/physics/module_sf_mynn.F90 PROPERTIES COMPILE_FLAGS "${CMAKE_Fortran_FLAGS_OPT} -O1") - list(APPEND SCHEMES_SFX_OPT ${CMAKE_CURRENT_SOURCE_DIR}/physics/module_sf_mynn.F90) + list(APPEND SCHEMES_SFX_OPT ${LOCAL_CURRENT_SOURCE_DIR}/physics/module_sf_mynn.F90) endif() - if (${CMAKE_CURRENT_SOURCE_DIR}/physics/radiation_aerosols.f IN_LIST SCHEMES) + if (${LOCAL_CURRENT_SOURCE_DIR}/physics/radiation_aerosols.f IN_LIST SCHEMES) # Replace -xHost or -xCORE-AVX2 with -xCORE-AVX-I for certain files set(CMAKE_Fortran_FLAGS_LOPT1 ${CMAKE_Fortran_FLAGS_OPT}) string(REPLACE "-xHOST" "-xCORE-AVX-I" @@ -183,10 +242,10 @@ elseif (${CMAKE_Fortran_COMPILER_ID} STREQUAL "Intel") string(REPLACE "-axSSE4.2,CORE-AVX2" "-axSSE4.2,CORE-AVX-I" CMAKE_Fortran_FLAGS_LOPT1 "${CMAKE_Fortran_FLAGS_LOPT1}") - SET_SOURCE_FILES_PROPERTIES(${CMAKE_CURRENT_SOURCE_DIR}/physics/radiation_aerosols.f + SET_SOURCE_FILES_PROPERTIES(${LOCAL_CURRENT_SOURCE_DIR}/physics/radiation_aerosols.f PROPERTIES COMPILE_FLAGS "${CMAKE_Fortran_FLAGS_LOPT1}") # Add all of the above files to the list of schemes with special compiler flags - list(APPEND SCHEMES_SFX_OPT ${CMAKE_CURRENT_SOURCE_DIR}/physics/radiation_aerosols.f) + list(APPEND SCHEMES_SFX_OPT ${LOCAL_CURRENT_SOURCE_DIR}/physics/radiation_aerosols.f) endif() # Remove files with special compiler flags from list of files with standard compiler flags @@ -200,15 +259,15 @@ elseif (${CMAKE_Fortran_COMPILER_ID} STREQUAL "Intel") # Set 32-bit floating point precision flags for certain files # that are executed in the dynamics (fast physics part) if (DYN32) - if (${CMAKE_CURRENT_SOURCE_DIR}/physics/gfdl_fv_sat_adj.F90 IN_LIST SCHEMES) - # Reduce floating point precision from 64-bit to 32-bit, if necessary - set(CMAKE_Fortran_FLAGS_PREC32 ${CMAKE_Fortran_FLAGS_DEFAULT_PREC}) - string(REPLACE "-real-size 64" "-real-size 32" - CMAKE_Fortran_FLAGS_PREC32 "${CMAKE_Fortran_FLAGS_PREC32}") - SET_PROPERTY(SOURCE ${CMAKE_CURRENT_SOURCE_DIR}/physics/gfdl_fv_sat_adj.F90 - APPEND_STRING PROPERTY COMPILE_FLAGS " ${CMAKE_Fortran_FLAGS_PREC32} ") - # Add all of the above files to the list of schemes with special floating point precision flags - list(APPEND SCHEMES_SFX_PREC ${CMAKE_CURRENT_SOURCE_DIR}/physics/gfdl_fv_sat_adj.F90) + if (${LOCAL_CURRENT_SOURCE_DIR}/physics/gfdl_fv_sat_adj.F90 IN_LIST SCHEMES) + # Reduce floating point precision from 64-bit to 32-bit, if necessary + set(CMAKE_Fortran_FLAGS_PREC32 ${CMAKE_Fortran_FLAGS_DEFAULT_PREC}) + string(REPLACE "-real-size 64" "-real-size 32" + CMAKE_Fortran_FLAGS_PREC32 "${CMAKE_Fortran_FLAGS_PREC32}") + SET_PROPERTY(SOURCE ${LOCAL_CURRENT_SOURCE_DIR}/physics/gfdl_fv_sat_adj.F90 + APPEND_STRING PROPERTY COMPILE_FLAGS " ${CMAKE_Fortran_FLAGS_PREC32} ${OpenMP_Fortran_FLAGS} ") + # Add all of the above files to the list of schemes with special floating point precision flags + list(APPEND SCHEMES_SFX_PREC ${LOCAL_CURRENT_SOURCE_DIR}/physics/gfdl_fv_sat_adj.F90) endif() endif() @@ -217,86 +276,50 @@ elseif (${CMAKE_Fortran_COMPILER_ID} STREQUAL "Intel") if (SCHEMES_SFX_PREC) list(REMOVE_ITEM SCHEMES2 ${SCHEMES_SFX_PREC}) endif (SCHEMES_SFX_PREC) - # Assign standard floating point precision flags to all remaining schemes and caps - SET_PROPERTY(SOURCE ${SCHEMES2} ${CAPS} - APPEND_STRING PROPERTY COMPILE_FLAGS " ${CMAKE_Fortran_FLAGS_DEFAULT_PREC} ") - else (PROJECT STREQUAL "CCPP-FV3") - SET_SOURCE_FILES_PROPERTIES(${CMAKE_CURRENT_SOURCE_DIR}/physics/module_bfmicrophysics.f - ${CMAKE_CURRENT_SOURCE_DIR}/physics/sflx.f - ${CMAKE_CURRENT_SOURCE_DIR}/physics/sfc_diff.f - ${CMAKE_CURRENT_SOURCE_DIR}/physics/sfc_diag.f - PROPERTIES COMPILE_FLAGS -r8) - SET_SOURCE_FILES_PROPERTIES(${CMAKE_CURRENT_SOURCE_DIR}/physics/module_nst_model.f90 - ${CMAKE_CURRENT_SOURCE_DIR}/physics/calpreciptype.f90 - PROPERTIES COMPILE_FLAGS "-r8 -free") - SET_SOURCE_FILES_PROPERTIES(${CMAKE_CURRENT_SOURCE_DIR}/physics/mersenne_twister.f - PROPERTIES COMPILE_FLAGS "-r8 -ftz") - SET_SOURCE_FILES_PROPERTIES(${CMAKE_CURRENT_SOURCE_DIR}/physics/module_nst_water_prop.f90 - PROPERTIES COMPILE_FLAGS "-extend-source 132 -r8 -free") - SET_SOURCE_FILES_PROPERTIES(${CMAKE_CURRENT_SOURCE_DIR}/physics/aer_cloud.F - ${CMAKE_CURRENT_SOURCE_DIR}/physics/wv_saturation.F - ${CMAKE_CURRENT_SOURCE_DIR}/physics/cldwat2m_micro.F - ${CMAKE_CURRENT_SOURCE_DIR}/physics/surface_perturbation.F90 - PROPERTIES COMPILE_FLAGS "-r8") - SET_SOURCE_FILES_PROPERTIES(${CMAKE_CURRENT_SOURCE_DIR}/physics/module_mp_thompson_make_number_concentrations.F90 - PROPERTIES COMPILE_FLAGS "-r8") - SET_SOURCE_FILES_PROPERTIES(${CMAKE_CURRENT_SOURCE_DIR}/physics/module_SF_JSFC.F90 - ${CMAKE_CURRENT_SOURCE_DIR}/physics/module_BL_MYJPBL.F90 - PROPERTIES COMPILE_FLAGS "-r8") - endif (PROJECT STREQUAL "CCPP-FV3") -elseif (${CMAKE_Fortran_COMPILER_ID} STREQUAL "PGI") - SET_SOURCE_FILES_PROPERTIES(${CMAKE_CURRENT_SOURCE_DIR}/physics/module_bfmicrophysics.f - ${CMAKE_CURRENT_SOURCE_DIR}/physics/sflx.f - ${CMAKE_CURRENT_SOURCE_DIR}/physics/sfc_diff.f - ${CMAKE_CURRENT_SOURCE_DIR}/physics/sfc_diag.f - PROPERTIES COMPILE_FLAGS -r8) - SET_SOURCE_FILES_PROPERTIES(${CMAKE_CURRENT_SOURCE_DIR}/physics/module_nst_model.f90 - ${CMAKE_CURRENT_SOURCE_DIR}/physics/calpreciptype.f90 - PROPERTIES COMPILE_FLAGS "-r8 -Mfree") - SET_SOURCE_FILES_PROPERTIES(${CMAKE_CURRENT_SOURCE_DIR}/physics/mersenne_twister.f - PROPERTIES COMPILE_FLAGS "-r8 -Mnofptrap") - SET_SOURCE_FILES_PROPERTIES(${CMAKE_CURRENT_SOURCE_DIR}/physics/module_nst_water_prop.f90 - PROPERTIES COMPILE_FLAGS "-r8 -Mfree") - SET_SOURCE_FILES_PROPERTIES(${CMAKE_CURRENT_SOURCE_DIR}/physics/aer_cloud.F - ${CMAKE_CURRENT_SOURCE_DIR}/physics/wv_saturation.F - ${CMAKE_CURRENT_SOURCE_DIR}/physics/cldwat2m_micro.F - ${CMAKE_CURRENT_SOURCE_DIR}/physics/surface_perturbation.F90 - PROPERTIES COMPILE_FLAGS "-r8") - SET_SOURCE_FILES_PROPERTIES(${CMAKE_CURRENT_SOURCE_DIR}/physics/module_mp_thompson_make_number_concentrations.F90 - PROPERTIES COMPILE_FLAGS "-r8") - SET_SOURCE_FILES_PROPERTIES(${CMAKE_CURRENT_SOURCE_DIR}/physics/module_SF_JSFC.F90 - ${CMAKE_CURRENT_SOURCE_DIR}/physics/module_BL_MYJPBL.F90 - PROPERTIES COMPILE_FLAGS "-r8") - if (PROJECT STREQUAL "CCPP-FV3") - # Set 32-bit floating point precision flags for certain files - # that are executed in the dynamics (fast physics part) - if (DYN32) - # Reduce floating point precision from 64-bit to 32-bit, if necessary - set(CMAKE_Fortran_FLAGS_PREC32 ${CMAKE_Fortran_FLAGS_DEFAULT_PREC}) - string(REPLACE "-r8" "-r4" - CMAKE_Fortran_FLAGS_PREC32 "${CMAKE_Fortran_FLAGS_PREC32}") - SET_PROPERTY(SOURCE ${CMAKE_CURRENT_SOURCE_DIR}/physics/gfdl_fv_sat_adj.F90 - APPEND_STRING PROPERTY COMPILE_FLAGS " ${CMAKE_Fortran_FLAGS_PREC32} ") - # Add all of the above files to the list of schemes with special floating point precision flags - list(APPEND SCHEMES_SFX_PREC ${CMAKE_CURRENT_SOURCE_DIR}/physics/gfdl_fv_sat_adj.F90) - endif (DYN32) + # Remove files that need to be compiled without OpenMP from list + # of files with standard compiler flags, and assign no-OpenMP flags + if (SCHEMES_OPENMP_OFF) + list(REMOVE_ITEM SCHEMES2 ${SCHEMES_OPENMP_OFF}) + # Assign standard floating point precision flags to all remaining schemes and caps + SET_PROPERTY(SOURCE ${SCHEMES_OPENMP_OFF} + APPEND_STRING PROPERTY COMPILE_FLAGS " ${CMAKE_Fortran_FLAGS_DEFAULT_PREC} ") + endif () - # Remove files with special floating point precision flags from list - # of files with standard floating point precision flags flags - if (SCHEMES_SFX_PREC) - list(REMOVE_ITEM SCHEMES2 ${SCHEMES_SFX_PREC}) - endif (SCHEMES_SFX_PREC) # Assign standard floating point precision flags to all remaining schemes and caps SET_PROPERTY(SOURCE ${SCHEMES2} ${CAPS} - APPEND_STRING PROPERTY COMPILE_FLAGS " ${CMAKE_Fortran_FLAGS_DEFAULT_PREC} ") + APPEND_STRING PROPERTY COMPILE_FLAGS " ${CMAKE_Fortran_FLAGS_DEFAULT_PREC} ${OpenMP_Fortran_FLAGS} ") + else (PROJECT STREQUAL "CCPP-FV3") + SET_SOURCE_FILES_PROPERTIES(${LOCAL_CURRENT_SOURCE_DIR}/physics/module_bfmicrophysics.f + ${LOCAL_CURRENT_SOURCE_DIR}/physics/sflx.f + ${LOCAL_CURRENT_SOURCE_DIR}/physics/sfc_diff.f + ${LOCAL_CURRENT_SOURCE_DIR}/physics/sfc_diag.f + PROPERTIES COMPILE_FLAGS "-r8 ${OpenMP_Fortran_FLAGS} ") + SET_SOURCE_FILES_PROPERTIES(${LOCAL_CURRENT_SOURCE_DIR}/physics/module_nst_model.f90 + ${LOCAL_CURRENT_SOURCE_DIR}/physics/calpreciptype.f90 + PROPERTIES COMPILE_FLAGS "-r8 -free ${OpenMP_Fortran_FLAGS} ") + SET_SOURCE_FILES_PROPERTIES(${LOCAL_CURRENT_SOURCE_DIR}/physics/mersenne_twister.f + PROPERTIES COMPILE_FLAGS "-r8 -ftz ${OpenMP_Fortran_FLAGS} ") + SET_SOURCE_FILES_PROPERTIES(${LOCAL_CURRENT_SOURCE_DIR}/physics/module_nst_water_prop.f90 + PROPERTIES COMPILE_FLAGS "-extend-source 132 -r8 -free ${OpenMP_Fortran_FLAGS} ") + SET_SOURCE_FILES_PROPERTIES(${LOCAL_CURRENT_SOURCE_DIR}/physics/aer_cloud.F + ${LOCAL_CURRENT_SOURCE_DIR}/physics/wv_saturation.F + ${LOCAL_CURRENT_SOURCE_DIR}/physics/cldwat2m_micro.F + ${LOCAL_CURRENT_SOURCE_DIR}/physics/surface_perturbation.F90 + PROPERTIES COMPILE_FLAGS "-r8 ${OpenMP_Fortran_FLAGS} ") + SET_SOURCE_FILES_PROPERTIES(${LOCAL_CURRENT_SOURCE_DIR}/physics/module_mp_thompson_make_number_concentrations.F90 + PROPERTIES COMPILE_FLAGS "-r8 ${OpenMP_Fortran_FLAGS} ") + SET_SOURCE_FILES_PROPERTIES(${LOCAL_CURRENT_SOURCE_DIR}/physics/module_SF_JSFC.F90 + ${LOCAL_CURRENT_SOURCE_DIR}/physics/module_BL_MYJPBL.F90 + PROPERTIES COMPILE_FLAGS "-r8 ${OpenMP_Fortran_FLAGS} ") endif (PROJECT STREQUAL "CCPP-FV3") -else (${CMAKE_Fortran_COMPILER_ID} STREQUAL "GNU") + +else() message ("CMAKE_Fortran_COMPILER full path: " ${CMAKE_Fortran_COMPILER}) message ("Fortran compiler: " ${CMAKE_Fortran_COMPILER_ID}) message (FATAL_ERROR "This program has only been compiled with gfortran, pgf90 and ifort. If another compiler is needed, the appropriate flags must be added in ${GFS_PHYS_SRC}/CMakeLists.txt") -endif (${CMAKE_Fortran_COMPILER_ID} STREQUAL "GNU") +endif() # The auto-generated caps can contain calls to physics schemes in # which some of the arguments (pointers, arrays) are not associated/allocated. @@ -310,12 +333,7 @@ if (${CMAKE_Fortran_COMPILER_ID} STREQUAL "GNU") set_property(SOURCE ${CAPS} APPEND_STRING PROPERTY COMPILE_FLAGS " -fcheck=no-pointer,no-bounds ") elseif (${CMAKE_Fortran_COMPILER_ID} STREQUAL "Intel") set_property(SOURCE ${CAPS} APPEND_STRING PROPERTY COMPILE_FLAGS " -check nopointers,nobounds ") -elseif (${CMAKE_Fortran_COMPILER_ID} STREQUAL "PGI") - if (CMAKE_Fortran_FLAGS MATCHES ".*chkptr.*") - message (FATAL_ERROR "PGI compiler option chkptr cannot be used for CCPP physics") - endif (CMAKE_Fortran_FLAGS MATCHES ".*chkptr.*") - set_property(SOURCE ${CAPS} APPEND_STRING PROPERTY COMPILE_FLAGS " -Mnobounds ") -endif (${CMAKE_Fortran_COMPILER_ID} STREQUAL "GNU") +endif () #------------------------------------------------------------------------------ add_library(ccppphys STATIC ${SCHEMES} ${SCHEMES_SFX_OPT} ${CAPS}) diff --git a/physics/GFS_DCNV_generic.F90 b/physics/GFS_DCNV_generic.F90 index 12a8e961d..bc0c823f4 100644 --- a/physics/GFS_DCNV_generic.F90 +++ b/physics/GFS_DCNV_generic.F90 @@ -26,14 +26,14 @@ subroutine GFS_DCNV_generic_pre_run (im, levs, ldiag3d, qdiag3d, do_cnvgwd, cplc integer, intent(in) :: im, levs, nsamftrac, ntqv, index_of_process_dcnv, dtidx(:,:) logical, intent(in) :: ldiag3d, qdiag3d, do_cnvgwd, cplchm - real(kind=kind_phys), dimension(im,levs), intent(in) :: gu0 - real(kind=kind_phys), dimension(im,levs), intent(in) :: gv0 - real(kind=kind_phys), dimension(im,levs), intent(in) :: gt0 - real(kind=kind_phys), dimension(:,:,:), intent(inout) :: gq0 - real(kind=kind_phys), dimension(im,levs), intent(inout) :: save_u - real(kind=kind_phys), dimension(im,levs), intent(inout) :: save_v - real(kind=kind_phys), dimension(im,levs), intent(inout) :: save_t - real(kind=kind_phys), dimension(:,:,:), intent(inout) :: save_q + real(kind=kind_phys), dimension(:,:), intent(in) :: gu0 + real(kind=kind_phys), dimension(:,:), intent(in) :: gv0 + real(kind=kind_phys), dimension(:,:), intent(in) :: gt0 + real(kind=kind_phys), dimension(:,:,:), intent(inout) :: gq0 + real(kind=kind_phys), dimension(:,:), intent(inout) :: save_u + real(kind=kind_phys), dimension(:,:), intent(inout) :: save_v + real(kind=kind_phys), dimension(:,:), intent(inout) :: save_t + real(kind=kind_phys), dimension(:,:,:), intent(inout) :: save_q ! dqdti only allocated if cplchm is .true. real(kind=kind_phys), dimension(:,:), intent(inout) :: dqdti character(len=*), intent(out) :: errmsg @@ -99,8 +99,8 @@ end subroutine GFS_DCNV_generic_post_finalize !> \section arg_table_GFS_DCNV_generic_post_run Argument Table !! \htmlinclude GFS_DCNV_generic_post_run.html !! - subroutine GFS_DCNV_generic_post_run (im, levs, lssav, ldiag3d, ras, cscnv, & - frain, rain1, dtf, cld1d, save_u, save_v, save_t, gu0, gv0, gt0, & + subroutine GFS_DCNV_generic_post_run (im, levs, lssav, ldiag3d, qdiag3d, ras, & + cscnv, frain, rain1, dtf, cld1d, save_u, save_v, save_t, gu0, gv0, gt0, & ud_mf, dd_mf, dt_mf, con_g, npdf3d, num_p3d, ncnvcld3d, nsamftrac, & rainc, cldwrk, upd_mf, dwn_mf, det_mf, dtend, dtidx, index_of_process_dcnv, & index_of_temperature, index_of_x_wind, index_of_y_wind, ntqv, gq0, save_q, & @@ -113,31 +113,26 @@ subroutine GFS_DCNV_generic_post_run (im, levs, lssav, ldiag3d, ras, cscnv, & implicit none integer, intent(in) :: im, levs, nsamftrac - logical, intent(in) :: lssav, ldiag3d, ras, cscnv + logical, intent(in) :: lssav, ldiag3d, qdiag3d, ras, cscnv logical, intent(in) :: flag_for_dcnv_generic_tend real(kind=kind_phys), intent(in) :: frain, dtf - real(kind=kind_phys), dimension(im), intent(in) :: rain1, cld1d - real(kind=kind_phys), dimension(im,levs), intent(in) :: save_u, save_v, save_t - real(kind=kind_phys), dimension(im,levs), intent(in) :: gu0, gv0, gt0 - real(kind=kind_phys), dimension(:,:,:), intent(in) :: gq0, save_q - real(kind=kind_phys), dimension(im,levs), intent(in) :: ud_mf, dd_mf, dt_mf + real(kind=kind_phys), dimension(:), intent(in) :: rain1, cld1d + real(kind=kind_phys), dimension(:,:), intent(in) :: save_u, save_v, save_t + real(kind=kind_phys), dimension(:,:), intent(in) :: gu0, gv0, gt0 + real(kind=kind_phys), dimension(:,:,:), intent(in) :: gq0, save_q + real(kind=kind_phys), dimension(:,:), intent(in) :: ud_mf, dd_mf, dt_mf real(kind=kind_phys), intent(in) :: con_g integer, intent(in) :: npdf3d, num_p3d, ncnvcld3d - real(kind=kind_phys), dimension(im), intent(inout) :: rainc, cldwrk - ! dtend, upd_mf, dwn_mf, det_mf only allocated if ldiag3d == .true. + real(kind=kind_phys), dimension(:), intent(inout) :: rainc, cldwrk real(kind=kind_phys), dimension(:,:), intent(inout) :: upd_mf, dwn_mf, det_mf - real(kind=kind_phys), dimension(im,levs), intent(inout) :: cnvw, cnvc + real(kind=kind_phys), dimension(:,:), intent(inout) :: cnvw, cnvc real(kind=kind_phys), dimension(:,:,:), intent(inout) :: dtend integer, intent(in) :: dtidx(:,:), index_of_process_dcnv, index_of_temperature, & index_of_x_wind, index_of_y_wind, ntqv - ! The following arrays may not be allocated, depending on certain flags and microphysics schemes. - ! Since Intel 15 crashes when passing unallocated arrays to arrays defined with explicit shape, - ! use assumed-shape arrays. Note that Intel 18 and GNU 6.2.0-8.1.0 tolerate explicit-shape arrays - ! as long as these do not get used when not allocated (it is still invalid Fortran code, though). real(kind=kind_phys), dimension(:,:), intent(inout) :: cnvw_phy_f3d, cnvc_phy_f3d character(len=*), intent(out) :: errmsg @@ -209,13 +204,15 @@ subroutine GFS_DCNV_generic_post_run (im, levs, lssav, ldiag3d, ras, cscnv, & endif ! convective mass fluxes - do k=1,levs - do i=1,im - upd_mf(i,k) = upd_mf(i,k) + ud_mf(i,k) * (con_g*frain) - dwn_mf(i,k) = dwn_mf(i,k) + dd_mf(i,k) * (con_g*frain) - det_mf(i,k) = det_mf(i,k) + dt_mf(i,k) * (con_g*frain) + if(qdiag3d) then + do k=1,levs + do i=1,im + upd_mf(i,k) = upd_mf(i,k) + ud_mf(i,k) * (con_g*frain) + dwn_mf(i,k) = dwn_mf(i,k) + dd_mf(i,k) * (con_g*frain) + det_mf(i,k) = det_mf(i,k) + dt_mf(i,k) * (con_g*frain) + enddo enddo - enddo + endif endif ! if (ldiag3d) endif ! if (lssav) diff --git a/physics/GFS_DCNV_generic.meta b/physics/GFS_DCNV_generic.meta index 8ddace1cc..e14820044 100644 --- a/physics/GFS_DCNV_generic.meta +++ b/physics/GFS_DCNV_generic.meta @@ -228,6 +228,14 @@ type = logical intent = in optional = F +[qdiag3d] + standard_name = flag_tracer_diagnostics_3D + long_name = flag for 3d tracer diagnostic fields + units = flag + dimensions = () + type = logical + intent = in + optional = F [ras] standard_name = flag_for_ras_deep_convection long_name = flag for ras convection scheme diff --git a/physics/GFS_GWD_generic.F90 b/physics/GFS_GWD_generic.F90 index e2d81fcb3..a2c869e6a 100644 --- a/physics/GFS_GWD_generic.F90 +++ b/physics/GFS_GWD_generic.F90 @@ -1,4 +1,4 @@ -!> \file GFS_GWD_generic.f +!> \file GFS_GWD_generic.F90 !! This file contains the CCPP-compliant orographic gravity wave !! drag pre interstitial codes. @@ -6,6 +6,9 @@ module GFS_GWD_generic_pre contains +!! \section arg_table_GFS_GWD_generic_pre_init Argument Table +!! \htmlinclude GFS_GWD_generic_pre_init.html +!! subroutine GFS_GWD_generic_pre_init() end subroutine GFS_GWD_generic_pre_init @@ -29,15 +32,15 @@ subroutine GFS_GWD_generic_pre_run( & implicit none integer, intent(in) :: im, levs, nmtvr - real(kind=kind_phys), intent(in) :: mntvar(im,nmtvr) + real(kind=kind_phys), intent(in) :: mntvar(:,:) real(kind=kind_phys), intent(out) :: & - & oc(im), oa4(im,4), clx(im,4), & + & oc(:), oa4(:,:), clx(:,:), & & varss(:), ocss(:), oa4ss(:,:), clxss(:,:), & - & theta(im), sigma(im), gamma(im), elvmax(im) + & theta(:), sigma(:), gamma(:), elvmax(:) logical, intent(in) :: lssav, ldiag3d, flag_for_gwd_generic_tend - real(kind=kind_phys), intent(in) :: dtdt(im,levs), dudt(im,levs), dvdt(im,levs) + real(kind=kind_phys), intent(in) :: dtdt(:,:), dudt(:,:), dvdt(:,:) ! dtend only allocated only if ldiag3d is .true. real(kind=kind_phys), intent(inout) :: dtend(:,:,:) integer, intent(in) :: dtidx(:,:), index_of_temperature, & @@ -141,6 +144,9 @@ subroutine GFS_GWD_generic_pre_run( & end subroutine GFS_GWD_generic_pre_run !> @} +!! \section arg_table_GFS_GWD_generic_pre_finalize Argument Table +!! \htmlinclude GFS_GWD_generic_pre_finalize.html +!! subroutine GFS_GWD_generic_pre_finalize() end subroutine GFS_GWD_generic_pre_finalize @@ -216,6 +222,9 @@ subroutine GFS_GWD_generic_post_run(lssav, ldiag3d, dtf, dusfcg, dvsfcg, dudt, d end subroutine GFS_GWD_generic_post_run !> @} +!! \section arg_table_GFS_GWD_generic_post_finalize Argument Table +!! \htmlinclude GFS_GWD_generic_post_finalize.html +!! subroutine GFS_GWD_generic_post_finalize() end subroutine GFS_GWD_generic_post_finalize diff --git a/physics/GFS_GWD_generic.meta b/physics/GFS_GWD_generic.meta index 0920a9504..cd622b243 100644 --- a/physics/GFS_GWD_generic.meta +++ b/physics/GFS_GWD_generic.meta @@ -162,7 +162,7 @@ dimensions = (horizontal_loop_extent,vertical_dimension) type = real kind = kind_phys - intent = inout + intent = in optional = F [dvdt] standard_name = tendency_of_y_wind_due_to_model_physics @@ -171,7 +171,7 @@ dimensions = (horizontal_loop_extent,vertical_dimension) type = real kind = kind_phys - intent = inout + intent = in optional = F [dtdt] standard_name = tendency_of_air_temperature_due_to_model_physics diff --git a/physics/GFS_MP_generic.F90 b/physics/GFS_MP_generic.F90 index db24ee452..9470caa2b 100644 --- a/physics/GFS_MP_generic.F90 +++ b/physics/GFS_MP_generic.F90 @@ -12,18 +12,19 @@ end subroutine GFS_MP_generic_pre_init !> \section arg_table_GFS_MP_generic_pre_run Argument Table !! \htmlinclude GFS_MP_generic_pre_run.html !! - subroutine GFS_MP_generic_pre_run(im, levs, ldiag3d, qdiag3d, do_aw, ntcw, nncl, ntrac, gt0, gq0, save_t, save_q, errmsg, errflg) + subroutine GFS_MP_generic_pre_run(im, levs, ldiag3d, qdiag3d, do_aw, ntcw, nncl, & + ntrac, gt0, gq0, save_t, save_q, errmsg, errflg) ! use machine, only: kind_phys implicit none - integer, intent(in) :: im, levs, ntcw, nncl, ntrac - logical, intent(in) :: ldiag3d, qdiag3d, do_aw - real(kind=kind_phys), dimension(im, levs), intent(in) :: gt0 - real(kind=kind_phys), dimension(im, levs, ntrac), intent(in) :: gq0 + integer, intent(in) :: im, levs, ntcw, nncl, ntrac + logical, intent(in) :: ldiag3d, qdiag3d, do_aw + real(kind=kind_phys), dimension(:,:), intent(in) :: gt0 + real(kind=kind_phys), dimension(:,:,:), intent(in) :: gq0 - real(kind=kind_phys), dimension(im, levs), intent(inout) :: save_t - real(kind=kind_phys), dimension(im, levs, ntrac), intent(inout) :: save_q + real(kind=kind_phys), dimension(:,:), intent(inout) :: save_t + real(kind=kind_phys), dimension(:,:,:), intent(inout) :: save_q character(len=*), intent(out) :: errmsg integer, intent(out) :: errflg @@ -102,42 +103,41 @@ subroutine GFS_MP_generic_post_run(im, levs, kdt, nrcm, ncld, nncl, ntcw, ntrac, logical, intent(in) :: cal_pre, lssav, ldiag3d, qdiag3d, cplflx, cplchm integer, intent(in) :: index_of_temperature,index_of_process_mp - real(kind=kind_phys), intent(in) :: dtf, frain, con_g - real(kind=kind_phys), dimension(im), intent(in) :: rain1, xlat, xlon, tsfc - real(kind=kind_phys), dimension(im), intent(inout) :: ice, snow, graupel, rainc - real(kind=kind_phys), dimension(im), intent(in) :: rain0, ice0, snow0, graupel0 - real(kind=kind_phys), dimension(im,nrcm), intent(in) :: rann - real(kind=kind_phys), dimension(im,levs), intent(in) :: gt0, prsl, save_t, del - real(kind=kind_phys), dimension(im,levs+1), intent(in) :: prsi, phii - real(kind=kind_phys), dimension(im,levs,ntrac), intent(in) :: gq0, save_q - - real(kind=kind_phys), dimension(im), intent(in ) :: sr - real(kind=kind_phys), dimension(im), intent(inout) :: rain, domr_diag, domzr_diag, domip_diag, doms_diag, tprcp, & - srflag, cnvprcp, totprcp, totice, totsnw, totgrp, cnvprcpb, & - totprcpb, toticeb, totsnwb, totgrpb, rain_cpl, rainc_cpl, & - snow_cpl, pwat - - real(kind=kind_phys), dimension(:,:,:), intent(inout) :: dtend ! only if ldiag3d + real(kind=kind_phys), intent(in) :: dtf, frain, con_g + real(kind=kind_phys), dimension(:), intent(in) :: rain1, xlat, xlon, tsfc + real(kind=kind_phys), dimension(:), intent(inout) :: ice, snow, graupel, rainc + real(kind=kind_phys), dimension(:), intent(in) :: rain0, ice0, snow0, graupel0 + real(kind=kind_phys), dimension(:,:), intent(in) :: rann + real(kind=kind_phys), dimension(:,:), intent(in) :: gt0, prsl, save_t, del + real(kind=kind_phys), dimension(:,:), intent(in) :: prsi, phii + real(kind=kind_phys), dimension(:,:,:), intent(in) :: gq0, save_q + + real(kind=kind_phys), dimension(:), intent(in ) :: sr + real(kind=kind_phys), dimension(:), intent(inout) :: rain, domr_diag, domzr_diag, domip_diag, doms_diag, tprcp, & + srflag, cnvprcp, totprcp, totice, totsnw, totgrp, cnvprcpb, & + totprcpb, toticeb, totsnwb, totgrpb, pwat + real(kind=kind_phys), dimension(:), intent(inout) :: rain_cpl, rainc_cpl, snow_cpl + + real(kind=kind_phys), dimension(:,:,:), intent(inout) :: dtend integer, dimension(:,:), intent(in) :: dtidx ! Stochastic physics / surface perturbations - real(kind=kind_phys), dimension(im), intent(inout) :: drain_cpl - real(kind=kind_phys), dimension(im), intent(inout) :: dsnow_cpl + real(kind=kind_phys), dimension(:), intent(inout) :: drain_cpl, dsnow_cpl ! Rainfall variables previous time step integer, intent(in) :: lsm, lsm_ruc, lsm_noahmp - real(kind=kind_phys), dimension(im), intent(inout) :: raincprv - real(kind=kind_phys), dimension(im), intent(inout) :: rainncprv - real(kind=kind_phys), dimension(im), intent(inout) :: iceprv - real(kind=kind_phys), dimension(im), intent(inout) :: snowprv - real(kind=kind_phys), dimension(im), intent(inout) :: graupelprv - real(kind=kind_phys), dimension(im), intent(inout) :: draincprv - real(kind=kind_phys), dimension(im), intent(inout) :: drainncprv - real(kind=kind_phys), dimension(im), intent(inout) :: diceprv - real(kind=kind_phys), dimension(im), intent(inout) :: dsnowprv - real(kind=kind_phys), dimension(im), intent(inout) :: dgraupelprv - - real(kind=kind_phys), intent(in) :: dtp + real(kind=kind_phys), dimension(:), intent(inout) :: raincprv + real(kind=kind_phys), dimension(:), intent(inout) :: rainncprv + real(kind=kind_phys), dimension(:), intent(inout) :: iceprv + real(kind=kind_phys), dimension(:), intent(inout) :: snowprv + real(kind=kind_phys), dimension(:), intent(inout) :: graupelprv + real(kind=kind_phys), dimension(:), intent(inout) :: draincprv + real(kind=kind_phys), dimension(:), intent(inout) :: drainncprv + real(kind=kind_phys), dimension(:), intent(inout) :: diceprv + real(kind=kind_phys), dimension(:), intent(inout) :: dsnowprv + real(kind=kind_phys), dimension(:), intent(inout) :: dgraupelprv + + real(kind=kind_phys), intent(in) :: dtp ! CCPP error handling character(len=*), intent(out) :: errmsg diff --git a/physics/GFS_MP_generic.meta b/physics/GFS_MP_generic.meta index 3d9de07fc..816441086 100644 --- a/physics/GFS_MP_generic.meta +++ b/physics/GFS_MP_generic.meta @@ -297,7 +297,7 @@ dimensions = (horizontal_loop_extent) type = real kind = kind_phys - intent = in + intent = inout optional = F [rain1] standard_name = lwe_thickness_of_explicit_precipitation_amount diff --git a/physics/GFS_PBL_generic.F90 b/physics/GFS_PBL_generic.F90 index 76f41df9a..029db59fd 100644 --- a/physics/GFS_PBL_generic.F90 +++ b/physics/GFS_PBL_generic.F90 @@ -102,11 +102,11 @@ subroutine GFS_PBL_generic_pre_run (im, levs, nvdiff, ntrac, rtg_ozone_index, integer, intent(in) :: imp_physics_zhao_carr, imp_physics_mg, imp_physics_fer_hires logical, intent(in) :: cplchm, ltaerosol, hybedmf, do_shoc, satmedmf, flag_for_pbl_generic_tend - real(kind=kind_phys), dimension(im, levs, ntrac), intent(in) :: qgrs - real(kind=kind_phys), dimension(im, levs), intent(in) :: ugrs, vgrs, tgrs - real(kind=kind_phys), dimension(im, levs, nvdiff), intent(inout) :: vdftra - real(kind=kind_phys), dimension(im, levs), intent(out) :: save_u, save_v, save_t - real(kind=kind_phys), dimension(im, levs, ntrac), intent(out) :: save_q + real(kind=kind_phys), dimension(:,:,:), intent(in) :: qgrs + real(kind=kind_phys), dimension(:,:), intent(in) :: ugrs, vgrs, tgrs + real(kind=kind_phys), dimension(:,:, :), intent(inout) :: vdftra + real(kind=kind_phys), dimension(:,:), intent(out) :: save_u, save_v, save_t + real(kind=kind_phys), dimension(:,:, :), intent(out) :: save_q ! CCPP error handling variables character(len=*), intent(out) :: errmsg @@ -354,8 +354,8 @@ subroutine GFS_PBL_generic_post_run (im, levs, nvdiff, ntrac, integer, intent(in) :: kdt logical, intent(in) :: flag_for_pbl_generic_tend - real(kind=kind_phys), dimension(im, levs), intent(in) :: save_u, save_v, save_t - real(kind=kind_phys), dimension(im, levs, ntrac), intent(in) :: save_q + real(kind=kind_phys), dimension(:,:), intent(in) :: save_u, save_v, save_t + real(kind=kind_phys), dimension(:,:, :), intent(in) :: save_q real(kind=kind_phys), intent(in) :: dtf real(kind=kind_phys), intent(in) :: rd, cp, fvirt, hvap @@ -364,14 +364,14 @@ subroutine GFS_PBL_generic_post_run (im, levs, nvdiff, ntrac, real(kind=kind_phys), dimension(:), intent(in) :: dusfc_cice, dvsfc_cice, dtsfc_cice, dqsfc_cice, & wind, stress_wat, hflx_wat, evap_wat, ugrs1, vgrs1 - real(kind=kind_phys), dimension(im, levs, ntrac), intent(in) :: qgrs - real(kind=kind_phys), dimension(im, levs), intent(in) :: ugrs, vgrs, tgrs + real(kind=kind_phys), dimension(:,:, :), intent(in) :: qgrs + real(kind=kind_phys), dimension(:,:), intent(in) :: ugrs, vgrs, tgrs - real(kind=kind_phys), dimension(im, levs, nvdiff), intent(in) :: dvdftra - real(kind=kind_phys), dimension(im), intent(in) :: dusfc1, dvsfc1, dtsfc1, dqsfc1, xmu - real(kind=kind_phys), dimension(im, levs), intent(in) :: dudt, dvdt, dtdt, htrsw, htrlw + real(kind=kind_phys), dimension(:,:, :), intent(in) :: dvdftra + real(kind=kind_phys), dimension(:), intent(in) :: dusfc1, dvsfc1, dtsfc1, dqsfc1, xmu + real(kind=kind_phys), dimension(:,:), intent(in) :: dudt, dvdt, dtdt, htrsw, htrlw - real(kind=kind_phys), dimension(im, levs, ntrac), intent(inout) :: dqdt + real(kind=kind_phys), dimension(:,:, :), intent(inout) :: dqdt ! The following arrays may not be allocated, depending on certain flags (cplflx, ...). ! Since Intel 15 crashes when passing unallocated arrays to arrays defined with explicit shape, @@ -390,7 +390,7 @@ subroutine GFS_PBL_generic_post_run (im, levs, nvdiff, ntrac, real(kind=kind_phys), dimension(:,:), intent(in) :: dkt ! From canopy heat storage - reduction factors in latent/sensible heat flux due to surface roughness - real(kind=kind_phys), dimension(im), intent(in) :: hffac, hefac + real(kind=kind_phys), dimension(:), intent(in) :: hffac, hefac character(len=*), intent(out) :: errmsg integer, intent(out) :: errflg @@ -559,8 +559,7 @@ subroutine GFS_PBL_generic_post_run (im, levs, nvdiff, ntrac, tem = prsl(i,1) / (rd*t1(i)*(one+fvirt*max(q1(i), qmin))) ushfsfci(i) = -cp * tem * hflx(i) ! upward sensible heat flux enddo - ! dkt_cpl has dimensions (1:im,1:levs), but dkt has (1:im,1:levs-1) - dkt_cpl(1:im,1:levs-1) = dkt(1:im,1:levs-1) + dkt_cpl(1:im,1:levs) = dkt(1:im,1:levs) endif diff --git a/physics/GFS_PBL_generic.meta b/physics/GFS_PBL_generic.meta index 51173276a..10a9adc75 100644 --- a/physics/GFS_PBL_generic.meta +++ b/physics/GFS_PBL_generic.meta @@ -1266,8 +1266,8 @@ intent = in optional = F [stress_wat] - standard_name = surface_wind_stress_over_ocean - long_name = surface wind stress over ocean + standard_name = surface_wind_stress_over_water + long_name = surface wind stress over water units = m2 s-2 dimensions = (horizontal_loop_extent) type = real @@ -1275,8 +1275,8 @@ intent = in optional = F [hflx_wat] - standard_name = kinematic_surface_upward_sensible_heat_flux_over_ocean - long_name = kinematic surface upward sensible heat flux over ocean + standard_name = kinematic_surface_upward_sensible_heat_flux_over_water + long_name = kinematic surface upward sensible heat flux over water units = K m s-1 dimensions = (horizontal_loop_extent) type = real @@ -1284,8 +1284,8 @@ intent = in optional = F [evap_wat] - standard_name = kinematic_surface_upward_latent_heat_flux_over_ocean - long_name = kinematic surface upward latent heat flux over ocean + standard_name = kinematic_surface_upward_latent_heat_flux_over_water + long_name = kinematic surface upward latent heat flux over water units = kg kg-1 m s-1 dimensions = (horizontal_loop_extent) type = real @@ -1321,25 +1321,25 @@ optional = F [dkt] standard_name = atmosphere_heat_diffusivity - long_name = diffusivity for heat + long_name = atmospheric heat diffusivity units = m2 s-1 - dimensions = (horizontal_loop_extent,vertical_dimension_minus_one) + dimensions = (horizontal_loop_extent,vertical_dimension) type = real kind = kind_phys intent = in optional = F -[hefac] - standard_name = surface_upward_latent_heat_flux_reduction_factor - long_name = surface upward latent heat flux reduction factor from canopy heat storage +[hffac] + standard_name = surface_upward_sensible_heat_flux_reduction_factor + long_name = surface upward sensible heat flux reduction factor from canopy heat storage units = none dimensions = (horizontal_loop_extent) type = real kind = kind_phys intent = in optional = F -[hffac] - standard_name = surface_upward_sensible_heat_flux_reduction_factor - long_name = surface upward sensible heat flux reduction factor from canopy heat storage +[hefac] + standard_name = surface_upward_latent_heat_flux_reduction_factor + long_name = surface upward latent heat flux reduction factor from canopy heat storage units = none dimensions = (horizontal_loop_extent) type = real diff --git a/physics/GFS_SCNV_generic.F90 b/physics/GFS_SCNV_generic.F90 index d37d96d71..f12b83dd8 100644 --- a/physics/GFS_SCNV_generic.F90 +++ b/physics/GFS_SCNV_generic.F90 @@ -24,10 +24,10 @@ subroutine GFS_SCNV_generic_pre_run (im, levs, ldiag3d, qdiag3d, gu0, gv0, gt0, integer, intent(in) :: im, levs, ntqv, nsamftrac, index_of_process_scnv, dtidx(:,:) logical, intent(in) :: ldiag3d, qdiag3d, flag_for_scnv_generic_tend - real(kind=kind_phys), dimension(im,levs), intent(in) :: gu0, gv0, gt0 - real(kind=kind_phys), intent(in) :: gq0(:,:,:) - real(kind=kind_phys), intent(inout) :: save_q(:,:,:) - real(kind=kind_phys), dimension(im,levs), intent(inout) :: save_u, save_v, save_t + real(kind=kind_phys), dimension(:,:), intent(in) :: gu0, gv0, gt0 + real(kind=kind_phys), dimension(:,:,:), intent(in) :: gq0 + real(kind=kind_phys), dimension(:,:,:), intent(inout) :: save_q + real(kind=kind_phys), dimension(:,:), intent(inout) :: save_u, save_v, save_t character(len=*), intent(out) :: errmsg integer, intent(out) :: errflg @@ -91,23 +91,23 @@ subroutine GFS_SCNV_generic_post_run (im, levs, nn, lssav, ldiag3d, qdiag3d, & integer, intent(in) :: im, levs, nn, ntqv, nsamftrac logical, intent(in) :: lssav, ldiag3d, qdiag3d, cplchm, flag_for_scnv_generic_tend real(kind=kind_phys), intent(in) :: frain - real(kind=kind_phys), dimension(im,levs), intent(in) :: gu0, gv0, gt0 - real(kind=kind_phys), dimension(im,levs), intent(in) :: save_u, save_v, save_t + real(kind=kind_phys), dimension(:,:), intent(in) :: gu0, gv0, gt0 + real(kind=kind_phys), dimension(:,:), intent(in) :: save_u, save_v, save_t real(kind=kind_phys), dimension(:,:,:), intent(in) :: save_q, gq0 ! dtend only allocated if ldiag3d == .true. real(kind=kind_phys), dimension(:,:), intent(inout) :: dqdti - real(kind=kind_phys), intent(inout), optional :: dtend(:,:,:) + real(kind=kind_phys), intent(inout) :: dtend(:,:,:) integer, intent(in) :: dtidx(:,:) integer, intent(in) :: index_of_temperature, index_of_x_wind, index_of_y_wind, index_of_process_scnv - real(kind=kind_phys), dimension(im,levs,nn), intent(inout) :: clw + real(kind=kind_phys), dimension(:,:,:), intent(inout) :: clw ! Post code for SAS/SAMF integer, intent(in) :: npdf3d, num_p3d, ncnvcld3d logical, intent(in) :: shcnvcw - real(kind=kind_phys), dimension(im), intent(in) :: rain1 - real(kind=kind_phys), dimension(im,levs), intent(in) :: cnvw, cnvc - real(kind=kind_phys), dimension(im), intent(inout) :: rainc, cnvprcp, cnvprcpb + real(kind=kind_phys), dimension(:), intent(in) :: rain1 + real(kind=kind_phys), dimension(:, :), intent(in) :: cnvw, cnvc + real(kind=kind_phys), dimension(:), intent(inout) :: rainc, cnvprcp, cnvprcpb ! The following arrays may not be allocated, depending on certain flags and microphysics schemes. ! Since Intel 15 crashes when passing unallocated arrays to arrays defined with explicit shape, ! use assumed-shape arrays. Note that Intel 18 and GNU 6.2.0-8.1.0 tolerate explicit-shape arrays diff --git a/physics/GFS_SCNV_generic.meta b/physics/GFS_SCNV_generic.meta index c56ec9aa3..7378a1a91 100644 --- a/physics/GFS_SCNV_generic.meta +++ b/physics/GFS_SCNV_generic.meta @@ -82,7 +82,7 @@ dimensions = (horizontal_loop_extent,vertical_dimension) type = real kind = kind_phys - intent = out + intent = inout optional = F [save_v] standard_name = y_wind_save @@ -91,7 +91,7 @@ dimensions = (horizontal_loop_extent,vertical_dimension) type = real kind = kind_phys - intent = out + intent = inout optional = F [save_t] standard_name = air_temperature_save @@ -100,7 +100,7 @@ dimensions = (horizontal_loop_extent,vertical_dimension) type = real kind = kind_phys - intent = out + intent = inout optional = F [save_q] standard_name = tracer_concentration_save @@ -211,17 +211,17 @@ type = logical intent = in optional = F -[qdiag3d] - standard_name = flag_tracer_diagnostics_3D - long_name = flag for 3d tracer diagnostic fields +[ldiag3d] + standard_name = flag_diagnostics_3D + long_name = flag for 3d diagnostic fields units = flag dimensions = () type = logical intent = in optional = F -[ldiag3d] - standard_name = flag_diagnostics_3D - long_name = flag for 3d diagnostic fields +[qdiag3d] + standard_name = flag_tracer_diagnostics_3D + long_name = flag for 3d tracer diagnostic fields units = flag dimensions = () type = logical diff --git a/physics/GFS_cloud_diagnostics.F90 b/physics/GFS_cloud_diagnostics.F90 index 1a7258b10..215143bb2 100644 --- a/physics/GFS_cloud_diagnostics.F90 +++ b/physics/GFS_cloud_diagnostics.F90 @@ -41,7 +41,7 @@ end subroutine GFS_cloud_diagnostics_init !! subroutine GFS_cloud_diagnostics_run(nCol, nLev, lsswr, lslwr, lat, de_lgth, p_lay, & cld_frac, p_lev, deltaZ, cloud_overlap_param, precip_overlap_param, con_pi, & - mbota, mtopa, cldsa, errmsg, errflg) + mtopa, mbota, cldsa, errmsg, errflg) implicit none ! Inputs @@ -53,15 +53,15 @@ subroutine GFS_cloud_diagnostics_run(nCol, nLev, lsswr, lslwr, lat, de_lgth, p_l lslwr ! Call LW radiation real(kind_phys), intent(in) :: & con_pi ! Physical constant: pi - real(kind_phys), dimension(nCol), intent(in) :: & + real(kind_phys), dimension(:), intent(in) :: & lat, & ! Latitude de_lgth ! Decorrelation length - real(kind_phys), dimension(nCol,nLev), intent(in) :: & + real(kind_phys), dimension(:,:), intent(in) :: & p_lay, & ! Pressure at model-layer cld_frac ! Total cloud fraction - real(kind_phys), dimension(nCol,nLev+1), intent(in) :: & + real(kind_phys), dimension(:,:), intent(in) :: & p_lev ! Pressure at model interfaces - real(kind_phys), dimension(nCol,nLev), intent(in) :: & + real(kind_phys), dimension(:,:), intent(in) :: & deltaZ, & ! Layer thickness (km) cloud_overlap_param, & ! Cloud-overlap parameter precip_overlap_param ! Precipitation overlap parameter @@ -71,10 +71,10 @@ subroutine GFS_cloud_diagnostics_run(nCol, nLev, lsswr, lslwr, lat, de_lgth, p_l errmsg ! Error message integer, intent(out) :: & errflg ! Error flag - integer,dimension(ncol,3),intent(out) :: & + integer,dimension(:,:),intent(out) :: & mbota, & ! Vertical indices for cloud tops mtopa ! Vertical indices for cloud bases - real(kind_phys), dimension(ncol,5), intent(out) :: & + real(kind_phys), dimension(:,:), intent(out) :: & cldsa ! Fraction of clouds for low, middle, high, total and BL ! Local variables @@ -136,7 +136,7 @@ subroutine hml_cloud_diagnostics_initialize(imp_physics, imp_physics_fer_hires, integer, intent(in) :: & nLev, & ! Number of vertical-layers mpi_rank - real(kind_phys), dimension(nLev+1), intent(in) :: & + real(kind_phys), dimension(:), intent(in) :: & sigmainit ! Outputs integer, intent(out) :: & diff --git a/physics/GFS_cloud_diagnostics.meta b/physics/GFS_cloud_diagnostics.meta index 840b3b21a..1e68928f0 100644 --- a/physics/GFS_cloud_diagnostics.meta +++ b/physics/GFS_cloud_diagnostics.meta @@ -47,6 +47,15 @@ intent = in kind = kind_phys optional = F +[de_lgth] + standard_name = cloud_decorrelation_length + long_name = cloud decorrelation length + units = km + dimensions = (horizontal_loop_extent) + type = real + kind = kind_phys + intent = in + optional = F [p_lay] standard_name = air_pressure_at_layer_for_RRTMGP_in_hPa long_name = air pressure at vertical layer for radiation calculation @@ -74,31 +83,6 @@ kind = kind_phys intent = in optional = F -[mtopa] - standard_name = model_layer_number_at_cloud_top - long_name = vertical indices for low, middle and high cloud tops - units = index - dimensions = (horizontal_loop_extent,3) - type = integer - intent = out - optional = F -[mbota] - standard_name = model_layer_number_at_cloud_base - long_name = vertical indices for low, middle and high cloud bases - units = index - dimensions = (horizontal_loop_extent,3) - type = integer - intent = out - optional = F -[de_lgth] - standard_name = cloud_decorrelation_length - long_name = cloud decorrelation length - units = km - dimensions = (horizontal_loop_extent) - type = real - kind = kind_phys - intent = in - optional = F [deltaZ] standard_name = layer_thickness long_name = layer_thickness @@ -135,6 +119,22 @@ kind = kind_phys intent = in optional = F +[mtopa] + standard_name = model_layer_number_at_cloud_top + long_name = vertical indices for low, middle and high cloud tops + units = index + dimensions = (horizontal_loop_extent,3) + type = integer + intent = out + optional = F +[mbota] + standard_name = model_layer_number_at_cloud_base + long_name = vertical indices for low, middle and high cloud bases + units = index + dimensions = (horizontal_loop_extent,3) + type = integer + intent = out + optional = F [cldsa] standard_name = cloud_area_fraction_for_radiation long_name = fraction of clouds for low, middle, high, total and BL @@ -160,4 +160,4 @@ dimensions = () type = integer intent = out - optional = F \ No newline at end of file + optional = F diff --git a/physics/GFS_debug.F90 b/physics/GFS_debug.F90 index f4a290884..e5f12189c 100644 --- a/physics/GFS_debug.F90 +++ b/physics/GFS_debug.F90 @@ -434,8 +434,10 @@ subroutine GFS_diagtoscreen_run (Model, Statein, Stateout, Sfcprop, Coupling, call print_var(mpirank, omprank, blkno, Grid%xlat_d, Grid%xlon_d, 'Sfcprop%tisfc' , Sfcprop%tisfc) call print_var(mpirank, omprank, blkno, Grid%xlat_d, Grid%xlon_d, 'Sfcprop%snowd' , Sfcprop%snowd) call print_var(mpirank, omprank, blkno, Grid%xlat_d, Grid%xlon_d, 'Sfcprop%zorl' , Sfcprop%zorl) - call print_var(mpirank, omprank, blkno, Grid%xlat_d, Grid%xlon_d, 'Sfcprop%zorlo' , Sfcprop%zorlo) + call print_var(mpirank, omprank, blkno, Grid%xlat_d, Grid%xlon_d, 'Sfcprop%zorlw' , Sfcprop%zorlw) call print_var(mpirank, omprank, blkno, Grid%xlat_d, Grid%xlon_d, 'Sfcprop%zorll' , Sfcprop%zorll) + call print_var(mpirank, omprank, blkno, Grid%xlat_d, Grid%xlon_d, 'Sfcprop%zorli' , Sfcprop%zorli) + call print_var(mpirank, omprank, blkno, Grid%xlat_d, Grid%xlon_d, 'Sfcprop%zorlwav' , Sfcprop%zorlwav) call print_var(mpirank, omprank, blkno, Grid%xlat_d, Grid%xlon_d, 'Sfcprop%fice' , Sfcprop%fice) call print_var(mpirank, omprank, blkno, Grid%xlat_d, Grid%xlon_d, 'Sfcprop%hprime' , Sfcprop%hprime) call print_var(mpirank, omprank, blkno, Grid%xlat_d, Grid%xlon_d, 'Sfcprop%sncovr' , Sfcprop%sncovr) @@ -649,6 +651,8 @@ subroutine GFS_diagtoscreen_run (Model, Statein, Stateout, Sfcprop, Coupling, if(Model%lradar) then call print_var(mpirank, omprank, blkno, Grid%xlat_d, Grid%xlon_d, 'Diag%refl_10cm ', Diag%refl_10cm) end if + call print_var(mpirank, omprank, blkno, Grid%xlat_d, Grid%xlon_d, 'Diag%dkt ', Diag%dkt) + call print_var(mpirank, omprank, blkno, Grid%xlat_d, Grid%xlon_d, 'Diag%dku ', Diag%dku) ! CCPP/MYNNPBL only if (Model%do_mynnedmf) then if (Model%bl_mynn_output .ne. 0) then @@ -1016,7 +1020,7 @@ subroutine GFS_interstitialtoscreen_run (Model, Statein, Stateout, Sfcprop, Coup ! Print all other variables call print_var(mpirank, omprank, blkno, Grid%xlat_d, Grid%xlon_d, 'Interstitial%adjsfculw_land ', Interstitial%adjsfculw_land ) call print_var(mpirank, omprank, blkno, Grid%xlat_d, Grid%xlon_d, 'Interstitial%adjsfculw_ice ', Interstitial%adjsfculw_ice ) - call print_var(mpirank, omprank, blkno, Grid%xlat_d, Grid%xlon_d, 'Interstitial%adjsfculw_ocean ', Interstitial%adjsfculw_ocean ) + call print_var(mpirank, omprank, blkno, Grid%xlat_d, Grid%xlon_d, 'Interstitial%adjsfculw_water ', Interstitial%adjsfculw_water ) call print_var(mpirank, omprank, blkno, Grid%xlat_d, Grid%xlon_d, 'Interstitial%adjnirbmd ', Interstitial%adjnirbmd ) call print_var(mpirank, omprank, blkno, Grid%xlat_d, Grid%xlon_d, 'Interstitial%adjnirbmu ', Interstitial%adjnirbmu ) call print_var(mpirank, omprank, blkno, Grid%xlat_d, Grid%xlon_d, 'Interstitial%adjnirdfd ', Interstitial%adjnirdfd ) @@ -1031,14 +1035,14 @@ subroutine GFS_interstitialtoscreen_run (Model, Statein, Stateout, Sfcprop, Coup call print_var(mpirank, omprank, blkno, Grid%xlat_d, Grid%xlon_d, 'Interstitial%cd ', Interstitial%cd ) call print_var(mpirank, omprank, blkno, Grid%xlat_d, Grid%xlon_d, 'Interstitial%cd_ice ', Interstitial%cd_ice ) call print_var(mpirank, omprank, blkno, Grid%xlat_d, Grid%xlon_d, 'Interstitial%cd_land ', Interstitial%cd_land ) - call print_var(mpirank, omprank, blkno, Grid%xlat_d, Grid%xlon_d, 'Interstitial%cd_ocean ', Interstitial%cd_ocean ) + call print_var(mpirank, omprank, blkno, Grid%xlat_d, Grid%xlon_d, 'Interstitial%cd_water ', Interstitial%cd_water ) call print_var(mpirank, omprank, blkno, Grid%xlat_d, Grid%xlon_d, 'Interstitial%cdq ', Interstitial%cdq ) call print_var(mpirank, omprank, blkno, Grid%xlat_d, Grid%xlon_d, 'Interstitial%cdq_ice ', Interstitial%cdq_ice ) call print_var(mpirank, omprank, blkno, Grid%xlat_d, Grid%xlon_d, 'Interstitial%cdq_land ', Interstitial%cdq_land ) - call print_var(mpirank, omprank, blkno, Grid%xlat_d, Grid%xlon_d, 'Interstitial%cdq_ocean ', Interstitial%cdq_ocean ) + call print_var(mpirank, omprank, blkno, Grid%xlat_d, Grid%xlon_d, 'Interstitial%cdq_water ', Interstitial%cdq_water ) call print_var(mpirank, omprank, blkno, Grid%xlat_d, Grid%xlon_d, 'Interstitial%chh_ice ', Interstitial%chh_ice ) call print_var(mpirank, omprank, blkno, Grid%xlat_d, Grid%xlon_d, 'Interstitial%chh_land ', Interstitial%chh_land ) - call print_var(mpirank, omprank, blkno, Grid%xlat_d, Grid%xlon_d, 'Interstitial%chh_ocean ', Interstitial%chh_ocean ) + call print_var(mpirank, omprank, blkno, Grid%xlat_d, Grid%xlon_d, 'Interstitial%chh_water ', Interstitial%chh_water ) call print_var(mpirank, omprank, blkno, Grid%xlat_d, Grid%xlon_d, 'Interstitial%cldf ', Interstitial%cldf ) call print_var(mpirank, omprank, blkno, Grid%xlat_d, Grid%xlon_d, 'Interstitial%cldsa ', Interstitial%cldsa ) call print_var(mpirank, omprank, blkno, Grid%xlat_d, Grid%xlon_d, 'Interstitial%cldtaulw ', Interstitial%cldtaulw ) @@ -1049,7 +1053,7 @@ subroutine GFS_interstitialtoscreen_run (Model, Statein, Stateout, Sfcprop, Coup call print_var(mpirank, omprank, blkno, Grid%xlat_d, Grid%xlon_d, 'Interstitial%clouds ', Interstitial%clouds ) call print_var(mpirank, omprank, blkno, Grid%xlat_d, Grid%xlon_d, 'Interstitial%cmm_ice ', Interstitial%cmm_ice ) call print_var(mpirank, omprank, blkno, Grid%xlat_d, Grid%xlon_d, 'Interstitial%cmm_land ', Interstitial%cmm_land ) - call print_var(mpirank, omprank, blkno, Grid%xlat_d, Grid%xlon_d, 'Interstitial%cmm_ocean ', Interstitial%cmm_ocean ) + call print_var(mpirank, omprank, blkno, Grid%xlat_d, Grid%xlon_d, 'Interstitial%cmm_water ', Interstitial%cmm_water ) call print_var(mpirank, omprank, blkno, Grid%xlat_d, Grid%xlon_d, 'Interstitial%cnvc ', Interstitial%cnvc ) call print_var(mpirank, omprank, blkno, Grid%xlat_d, Grid%xlon_d, 'Interstitial%cnvw ', Interstitial%cnvw ) call print_var(mpirank, omprank, blkno, Grid%xlat_d, Grid%xlon_d, 'Interstitial%ctei_r ', Interstitial%ctei_r ) @@ -1060,13 +1064,11 @@ subroutine GFS_interstitialtoscreen_run (Model, Statein, Stateout, Sfcprop, Coup call print_var(mpirank, omprank, blkno, Grid%xlat_d, Grid%xlon_d, 'Interstitial%del ', Interstitial%del ) call print_var(mpirank, omprank, blkno, Grid%xlat_d, Grid%xlon_d, 'Interstitial%del_gz ', Interstitial%del_gz ) call print_var(mpirank, omprank, blkno, Grid%xlat_d, Grid%xlon_d, 'Interstitial%delr ', Interstitial%delr ) - call print_var(mpirank, omprank, blkno, Grid%xlat_d, Grid%xlon_d, 'Interstitial%dkt ', Interstitial%dkt ) call print_var(mpirank, omprank, blkno, Grid%xlat_d, Grid%xlon_d, 'Interstitial%dlength ', Interstitial%dlength ) call print_var(mpirank, omprank, blkno, Grid%xlat_d, Grid%xlon_d, 'Interstitial%dqdt ', Interstitial%dqdt ) call print_var(mpirank, omprank, blkno, Grid%xlat_d, Grid%xlon_d, 'Interstitial%dqsfc1 ', Interstitial%dqsfc1 ) call print_var(mpirank, omprank, blkno, Grid%xlat_d, Grid%xlon_d, 'Interstitial%drain ', Interstitial%drain ) call print_var(mpirank, omprank, blkno, Grid%xlat_d, Grid%xlon_d, 'Interstitial%dtdt ', Interstitial%dtdt ) - call print_var(mpirank, omprank, blkno, Grid%xlat_d, Grid%xlon_d, 'Interstitial%dtdtc ', Interstitial%dtdtc ) call print_var(mpirank, omprank, blkno, Grid%xlat_d, Grid%xlon_d, 'Interstitial%dtsfc1 ', Interstitial%dtsfc1 ) call print_var(mpirank, omprank, blkno, Grid%xlat_d, Grid%xlon_d, 'Interstitial%dtzm ', Interstitial%dtzm ) call print_var(mpirank, omprank, blkno, Grid%xlat_d, Grid%xlon_d, 'Interstitial%dt_mf ', Interstitial%dt_mf ) @@ -1082,32 +1084,32 @@ subroutine GFS_interstitialtoscreen_run (Model, Statein, Stateout, Sfcprop, Coup call print_var(mpirank, omprank, blkno, Grid%xlat_d, Grid%xlon_d, 'Interstitial%ep1d ', Interstitial%ep1d ) call print_var(mpirank, omprank, blkno, Grid%xlat_d, Grid%xlon_d, 'Interstitial%ep1d_ice ', Interstitial%ep1d_ice ) call print_var(mpirank, omprank, blkno, Grid%xlat_d, Grid%xlon_d, 'Interstitial%ep1d_land ', Interstitial%ep1d_land ) - call print_var(mpirank, omprank, blkno, Grid%xlat_d, Grid%xlon_d, 'Interstitial%ep1d_ocean ', Interstitial%ep1d_ocean ) + call print_var(mpirank, omprank, blkno, Grid%xlat_d, Grid%xlon_d, 'Interstitial%ep1d_water ', Interstitial%ep1d_water ) call print_var(mpirank, omprank, blkno, Grid%xlat_d, Grid%xlon_d, 'Interstitial%evapq ', Interstitial%evapq ) call print_var(mpirank, omprank, blkno, Grid%xlat_d, Grid%xlon_d, 'Interstitial%evap_ice ', Interstitial%evap_ice ) call print_var(mpirank, omprank, blkno, Grid%xlat_d, Grid%xlon_d, 'Interstitial%evap_land ', Interstitial%evap_land ) - call print_var(mpirank, omprank, blkno, Grid%xlat_d, Grid%xlon_d, 'Interstitial%evap_ocean ', Interstitial%evap_ocean ) + call print_var(mpirank, omprank, blkno, Grid%xlat_d, Grid%xlon_d, 'Interstitial%evap_water ', Interstitial%evap_water ) call print_var(mpirank, omprank, blkno, Grid%xlat_d, Grid%xlon_d, 'Interstitial%evbs ', Interstitial%evbs ) call print_var(mpirank, omprank, blkno, Grid%xlat_d, Grid%xlon_d, 'Interstitial%evcw ', Interstitial%evcw ) call print_var(mpirank, omprank, blkno, Grid%xlat_d, Grid%xlon_d, 'Interstitial%faerlw ', Interstitial%faerlw ) call print_var(mpirank, omprank, blkno, Grid%xlat_d, Grid%xlon_d, 'Interstitial%faersw ', Interstitial%faersw ) call print_var(mpirank, omprank, blkno, Grid%xlat_d, Grid%xlon_d, 'Interstitial%ffhh_ice ', Interstitial%ffhh_ice ) call print_var(mpirank, omprank, blkno, Grid%xlat_d, Grid%xlon_d, 'Interstitial%ffhh_land ', Interstitial%ffhh_land ) - call print_var(mpirank, omprank, blkno, Grid%xlat_d, Grid%xlon_d, 'Interstitial%ffhh_ocean ', Interstitial%ffhh_ocean ) + call print_var(mpirank, omprank, blkno, Grid%xlat_d, Grid%xlon_d, 'Interstitial%ffhh_water ', Interstitial%ffhh_water ) call print_var(mpirank, omprank, blkno, Grid%xlat_d, Grid%xlon_d, 'Interstitial%fh2 ', Interstitial%fh2 ) call print_var(mpirank, omprank, blkno, Grid%xlat_d, Grid%xlon_d, 'Interstitial%fh2_ice ', Interstitial%fh2_ice ) call print_var(mpirank, omprank, blkno, Grid%xlat_d, Grid%xlon_d, 'Interstitial%fh2_land ', Interstitial%fh2_land ) - call print_var(mpirank, omprank, blkno, Grid%xlat_d, Grid%xlon_d, 'Interstitial%fh2_ocean ', Interstitial%fh2_ocean ) + call print_var(mpirank, omprank, blkno, Grid%xlat_d, Grid%xlon_d, 'Interstitial%fh2_water ', Interstitial%fh2_water ) call print_var(mpirank, omprank, blkno, Grid%xlat_d, Grid%xlon_d, 'Interstitial%flag_cice ', Interstitial%flag_cice ) call print_var(mpirank, omprank, blkno, Grid%xlat_d, Grid%xlon_d, 'Interstitial%flag_guess ', Interstitial%flag_guess ) call print_var(mpirank, omprank, blkno, Grid%xlat_d, Grid%xlon_d, 'Interstitial%flag_iter ', Interstitial%flag_iter ) call print_var(mpirank, omprank, blkno, Grid%xlat_d, Grid%xlon_d, 'Interstitial%ffmm_ice ', Interstitial%ffmm_ice ) call print_var(mpirank, omprank, blkno, Grid%xlat_d, Grid%xlon_d, 'Interstitial%ffmm_land ', Interstitial%ffmm_land ) - call print_var(mpirank, omprank, blkno, Grid%xlat_d, Grid%xlon_d, 'Interstitial%ffmm_ocean ', Interstitial%ffmm_ocean ) + call print_var(mpirank, omprank, blkno, Grid%xlat_d, Grid%xlon_d, 'Interstitial%ffmm_water ', Interstitial%ffmm_water ) call print_var(mpirank, omprank, blkno, Grid%xlat_d, Grid%xlon_d, 'Interstitial%fm10 ', Interstitial%fm10 ) call print_var(mpirank, omprank, blkno, Grid%xlat_d, Grid%xlon_d, 'Interstitial%fm10_ice ', Interstitial%fm10_ice ) call print_var(mpirank, omprank, blkno, Grid%xlat_d, Grid%xlon_d, 'Interstitial%fm10_land ', Interstitial%fm10_land ) - call print_var(mpirank, omprank, blkno, Grid%xlat_d, Grid%xlon_d, 'Interstitial%fm10_ocean ', Interstitial%fm10_ocean ) + call print_var(mpirank, omprank, blkno, Grid%xlat_d, Grid%xlon_d, 'Interstitial%fm10_water ', Interstitial%fm10_water ) call print_var(mpirank, omprank, blkno, Grid%xlat_d, Grid%xlon_d, 'Interstitial%frain ', Interstitial%frain ) call print_var(mpirank, omprank, blkno, Grid%xlat_d, Grid%xlon_d, 'Interstitial%frland ', Interstitial%frland ) call print_var(mpirank, omprank, blkno, Grid%xlat_d, Grid%xlon_d, 'Interstitial%fscav ', Interstitial%fscav ) @@ -1115,7 +1117,7 @@ subroutine GFS_interstitialtoscreen_run (Model, Statein, Stateout, Sfcprop, Coup call print_var(mpirank, omprank, blkno, Grid%xlat_d, Grid%xlon_d, 'Interstitial%gabsbdlw ', Interstitial%gabsbdlw ) call print_var(mpirank, omprank, blkno, Grid%xlat_d, Grid%xlon_d, 'Interstitial%gabsbdlw_ice ', Interstitial%gabsbdlw_ice ) call print_var(mpirank, omprank, blkno, Grid%xlat_d, Grid%xlon_d, 'Interstitial%gabsbdlw_land ', Interstitial%gabsbdlw_land ) - call print_var(mpirank, omprank, blkno, Grid%xlat_d, Grid%xlon_d, 'Interstitial%gabsbdlw_ocean ', Interstitial%gabsbdlw_ocean ) + call print_var(mpirank, omprank, blkno, Grid%xlat_d, Grid%xlon_d, 'Interstitial%gabsbdlw_water ', Interstitial%gabsbdlw_water ) call print_var(mpirank, omprank, blkno, Grid%xlat_d, Grid%xlon_d, 'Interstitial%gamma ', Interstitial%gamma ) call print_var(mpirank, omprank, blkno, Grid%xlat_d, Grid%xlon_d, 'Interstitial%gamq ', Interstitial%gamq ) call print_var(mpirank, omprank, blkno, Grid%xlat_d, Grid%xlon_d, 'Interstitial%gamt ', Interstitial%gamt ) @@ -1123,7 +1125,7 @@ subroutine GFS_interstitialtoscreen_run (Model, Statein, Stateout, Sfcprop, Coup call print_var(mpirank, omprank, blkno, Grid%xlat_d, Grid%xlon_d, 'Interstitial%gflx ', Interstitial%gflx ) call print_var(mpirank, omprank, blkno, Grid%xlat_d, Grid%xlon_d, 'Interstitial%gflx_ice ', Interstitial%gflx_ice ) call print_var(mpirank, omprank, blkno, Grid%xlat_d, Grid%xlon_d, 'Interstitial%gflx_land ', Interstitial%gflx_land ) - call print_var(mpirank, omprank, blkno, Grid%xlat_d, Grid%xlon_d, 'Interstitial%gflx_ocean ', Interstitial%gflx_ocean ) + call print_var(mpirank, omprank, blkno, Grid%xlat_d, Grid%xlon_d, 'Interstitial%gflx_water ', Interstitial%gflx_water ) call print_var(mpirank, omprank, blkno, Grid%xlat_d, Grid%xlon_d, 'Interstitial%gwdcu ', Interstitial%gwdcu ) call print_var(mpirank, omprank, blkno, Grid%xlat_d, Grid%xlon_d, 'Interstitial%gwdcv ', Interstitial%gwdcv ) call print_var(mpirank, omprank, blkno, Grid%xlat_d, Grid%xlon_d, 'Interstitial%hefac ', Interstitial%hefac ) @@ -1131,7 +1133,7 @@ subroutine GFS_interstitialtoscreen_run (Model, Statein, Stateout, Sfcprop, Coup call print_var(mpirank, omprank, blkno, Grid%xlat_d, Grid%xlon_d, 'Interstitial%hflxq ', Interstitial%hflxq ) call print_var(mpirank, omprank, blkno, Grid%xlat_d, Grid%xlon_d, 'Interstitial%hflx_ice ', Interstitial%hflx_ice ) call print_var(mpirank, omprank, blkno, Grid%xlat_d, Grid%xlon_d, 'Interstitial%hflx_land ', Interstitial%hflx_land ) - call print_var(mpirank, omprank, blkno, Grid%xlat_d, Grid%xlon_d, 'Interstitial%hflx_ocean ', Interstitial%hflx_ocean ) + call print_var(mpirank, omprank, blkno, Grid%xlat_d, Grid%xlon_d, 'Interstitial%hflx_water ', Interstitial%hflx_water ) call print_var(mpirank, omprank, blkno, Grid%xlat_d, Grid%xlon_d, 'Interstitial%htlwc ', Interstitial%htlwc ) call print_var(mpirank, omprank, blkno, Grid%xlat_d, Grid%xlon_d, 'Interstitial%htlw0 ', Interstitial%htlw0 ) call print_var(mpirank, omprank, blkno, Grid%xlat_d, Grid%xlon_d, 'Interstitial%htswc ', Interstitial%htswc ) @@ -1165,7 +1167,7 @@ subroutine GFS_interstitialtoscreen_run (Model, Statein, Stateout, Sfcprop, Coup call print_var(mpirank, omprank, blkno, Grid%xlat_d, Grid%xlon_d, 'Interstitial%qlyr ', Interstitial%qlyr ) call print_var(mpirank, omprank, blkno, Grid%xlat_d, Grid%xlon_d, 'Interstitial%qss_ice ', Interstitial%qss_ice ) call print_var(mpirank, omprank, blkno, Grid%xlat_d, Grid%xlon_d, 'Interstitial%qss_land ', Interstitial%qss_land ) - call print_var(mpirank, omprank, blkno, Grid%xlat_d, Grid%xlon_d, 'Interstitial%qss_ocean ', Interstitial%qss_ocean ) + call print_var(mpirank, omprank, blkno, Grid%xlat_d, Grid%xlon_d, 'Interstitial%qss_water ', Interstitial%qss_water ) call print_var(mpirank, omprank, blkno, Grid%xlat_d, Grid%xlon_d, 'Interstitial%radar_reset ', Interstitial%radar_reset ) call print_var(mpirank, omprank, blkno, Grid%xlat_d, Grid%xlon_d, 'Interstitial%raddt ', Interstitial%raddt ) call print_var(mpirank, omprank, blkno, Grid%xlat_d, Grid%xlon_d, 'Interstitial%raincd ', Interstitial%raincd ) @@ -1175,7 +1177,7 @@ subroutine GFS_interstitialtoscreen_run (Model, Statein, Stateout, Sfcprop, Coup call print_var(mpirank, omprank, blkno, Grid%xlat_d, Grid%xlon_d, 'Interstitial%rb ', Interstitial%rb ) call print_var(mpirank, omprank, blkno, Grid%xlat_d, Grid%xlon_d, 'Interstitial%rb_ice ', Interstitial%rb_ice ) call print_var(mpirank, omprank, blkno, Grid%xlat_d, Grid%xlon_d, 'Interstitial%rb_land ', Interstitial%rb_land ) - call print_var(mpirank, omprank, blkno, Grid%xlat_d, Grid%xlon_d, 'Interstitial%rb_ocean ', Interstitial%rb_ocean ) + call print_var(mpirank, omprank, blkno, Grid%xlat_d, Grid%xlon_d, 'Interstitial%rb_water ', Interstitial%rb_water ) call print_var(mpirank, omprank, blkno, Grid%xlat_d, Grid%xlon_d, 'Interstitial%reset ', Interstitial%reset ) call print_var(mpirank, omprank, blkno, Grid%xlat_d, Grid%xlon_d, 'Interstitial%rhc ', Interstitial%rhc ) call print_var(mpirank, omprank, blkno, Grid%xlat_d, Grid%xlon_d, 'Interstitial%runoff ', Interstitial%runoff ) @@ -1193,7 +1195,7 @@ subroutine GFS_interstitialtoscreen_run (Model, Statein, Stateout, Sfcprop, Coup call print_var(mpirank, omprank, blkno, Grid%xlat_d, Grid%xlon_d, 'Interstitial%scmpsw%visdf ', Interstitial%scmpsw%visdf ) call print_var(mpirank, omprank, blkno, Grid%xlat_d, Grid%xlon_d, 'Interstitial%semis_ice ', Interstitial%semis_ice ) call print_var(mpirank, omprank, blkno, Grid%xlat_d, Grid%xlon_d, 'Interstitial%semis_land ', Interstitial%semis_land ) - call print_var(mpirank, omprank, blkno, Grid%xlat_d, Grid%xlon_d, 'Interstitial%semis_ocean ', Interstitial%semis_ocean ) + call print_var(mpirank, omprank, blkno, Grid%xlat_d, Grid%xlon_d, 'Interstitial%semis_water ', Interstitial%semis_water ) call print_var(mpirank, omprank, blkno, Grid%xlat_d, Grid%xlon_d, 'Interstitial%sfcalb ', Interstitial%sfcalb ) call print_var(mpirank, omprank, blkno, Grid%xlat_d, Grid%xlon_d, 'Interstitial%sigma ', Interstitial%sigma ) call print_var(mpirank, omprank, blkno, Grid%xlat_d, Grid%xlon_d, 'Interstitial%sigmaf ', Interstitial%sigmaf ) @@ -1203,43 +1205,43 @@ subroutine GFS_interstitialtoscreen_run (Model, Statein, Stateout, Sfcprop, Coup call print_var(mpirank, omprank, blkno, Grid%xlat_d, Grid%xlon_d, 'Interstitial%snowc ', Interstitial%snowc ) call print_var(mpirank, omprank, blkno, Grid%xlat_d, Grid%xlon_d, 'Interstitial%snowd_ice ', Interstitial%snowd_ice ) call print_var(mpirank, omprank, blkno, Grid%xlat_d, Grid%xlon_d, 'Interstitial%snowd_land ', Interstitial%snowd_land ) - call print_var(mpirank, omprank, blkno, Grid%xlat_d, Grid%xlon_d, 'Interstitial%snowd_ocean ', Interstitial%snowd_ocean ) + call print_var(mpirank, omprank, blkno, Grid%xlat_d, Grid%xlon_d, 'Interstitial%snowd_water ', Interstitial%snowd_water ) call print_var(mpirank, omprank, blkno, Grid%xlat_d, Grid%xlon_d, 'Interstitial%snohf ', Interstitial%snohf ) call print_var(mpirank, omprank, blkno, Grid%xlat_d, Grid%xlon_d, 'Interstitial%snowmt ', Interstitial%snowmt ) call print_var(mpirank, omprank, blkno, Grid%xlat_d, Grid%xlon_d, 'Interstitial%soiltype ', Interstitial%soiltype ) call print_var(mpirank, omprank, blkno, Grid%xlat_d, Grid%xlon_d, 'Interstitial%stress ', Interstitial%stress ) call print_var(mpirank, omprank, blkno, Grid%xlat_d, Grid%xlon_d, 'Interstitial%stress_ice ', Interstitial%stress_ice ) call print_var(mpirank, omprank, blkno, Grid%xlat_d, Grid%xlon_d, 'Interstitial%stress_land ', Interstitial%stress_land ) - call print_var(mpirank, omprank, blkno, Grid%xlat_d, Grid%xlon_d, 'Interstitial%stress_ocean ', Interstitial%stress_ocean ) + call print_var(mpirank, omprank, blkno, Grid%xlat_d, Grid%xlon_d, 'Interstitial%stress_water ', Interstitial%stress_water ) call print_var(mpirank, omprank, blkno, Grid%xlat_d, Grid%xlon_d, 'Interstitial%theta ', Interstitial%theta ) call print_var(mpirank, omprank, blkno, Grid%xlat_d, Grid%xlon_d, 'Interstitial%tice ', Interstitial%tice ) call print_var(mpirank, omprank, blkno, Grid%xlat_d, Grid%xlon_d, 'Interstitial%tlvl ', Interstitial%tlvl ) call print_var(mpirank, omprank, blkno, Grid%xlat_d, Grid%xlon_d, 'Interstitial%tlyr ', Interstitial%tlyr ) call print_var(mpirank, omprank, blkno, Grid%xlat_d, Grid%xlon_d, 'Interstitial%tprcp_ice ', Interstitial%tprcp_ice ) call print_var(mpirank, omprank, blkno, Grid%xlat_d, Grid%xlon_d, 'Interstitial%tprcp_land ', Interstitial%tprcp_land ) - call print_var(mpirank, omprank, blkno, Grid%xlat_d, Grid%xlon_d, 'Interstitial%tprcp_ocean ', Interstitial%tprcp_ocean ) + call print_var(mpirank, omprank, blkno, Grid%xlat_d, Grid%xlon_d, 'Interstitial%tprcp_water ', Interstitial%tprcp_water ) call print_var(mpirank, omprank, blkno, Grid%xlat_d, Grid%xlon_d, 'Interstitial%trans ', Interstitial%trans ) call print_var(mpirank, omprank, blkno, Grid%xlat_d, Grid%xlon_d, 'Interstitial%tseal ', Interstitial%tseal ) call print_var(mpirank, omprank, blkno, Grid%xlat_d, Grid%xlon_d, 'Interstitial%tsfa ', Interstitial%tsfa ) call print_var(mpirank, omprank, blkno, Grid%xlat_d, Grid%xlon_d, 'Interstitial%tsfc_ice ', Interstitial%tsfc_ice ) call print_var(mpirank, omprank, blkno, Grid%xlat_d, Grid%xlon_d, 'Interstitial%tsfc_land ', Interstitial%tsfc_land ) - call print_var(mpirank, omprank, blkno, Grid%xlat_d, Grid%xlon_d, 'Interstitial%tsfc_ocean ', Interstitial%tsfc_ocean ) + call print_var(mpirank, omprank, blkno, Grid%xlat_d, Grid%xlon_d, 'Interstitial%tsfc_water ', Interstitial%tsfc_water ) call print_var(mpirank, omprank, blkno, Grid%xlat_d, Grid%xlon_d, 'Interstitial%tsfg ', Interstitial%tsfg ) call print_var(mpirank, omprank, blkno, Grid%xlat_d, Grid%xlon_d, 'Interstitial%tsurf ', Interstitial%tsurf ) call print_var(mpirank, omprank, blkno, Grid%xlat_d, Grid%xlon_d, 'Interstitial%tsurf_ice ', Interstitial%tsurf_ice ) call print_var(mpirank, omprank, blkno, Grid%xlat_d, Grid%xlon_d, 'Interstitial%tsurf_land ', Interstitial%tsurf_land ) - call print_var(mpirank, omprank, blkno, Grid%xlat_d, Grid%xlon_d, 'Interstitial%tsurf_ocean ', Interstitial%tsurf_ocean ) + call print_var(mpirank, omprank, blkno, Grid%xlat_d, Grid%xlon_d, 'Interstitial%tsurf_water ', Interstitial%tsurf_water ) call print_var(mpirank, omprank, blkno, Grid%xlat_d, Grid%xlon_d, 'Interstitial%ud_mf ', Interstitial%ud_mf ) call print_var(mpirank, omprank, blkno, Grid%xlat_d, Grid%xlon_d, 'Interstitial%uustar_ice ', Interstitial%uustar_ice ) call print_var(mpirank, omprank, blkno, Grid%xlat_d, Grid%xlon_d, 'Interstitial%uustar_land ', Interstitial%uustar_land ) - call print_var(mpirank, omprank, blkno, Grid%xlat_d, Grid%xlon_d, 'Interstitial%uustar_ocean ', Interstitial%uustar_ocean ) + call print_var(mpirank, omprank, blkno, Grid%xlat_d, Grid%xlon_d, 'Interstitial%uustar_water ', Interstitial%uustar_water ) call print_var(mpirank, omprank, blkno, Grid%xlat_d, Grid%xlon_d, 'Interstitial%vdftra ', Interstitial%vdftra ) call print_var(mpirank, omprank, blkno, Grid%xlat_d, Grid%xlon_d, 'Interstitial%vegf1d ', Interstitial%vegf1d ) call print_var(mpirank, omprank, blkno, Grid%xlat_d, Grid%xlon_d, 'Interstitial%vegtype ', Interstitial%vegtype ) call print_var(mpirank, omprank, blkno, Grid%xlat_d, Grid%xlon_d, 'Interstitial%wcbmax ', Interstitial%wcbmax ) call print_var(mpirank, omprank, blkno, Grid%xlat_d, Grid%xlon_d, 'Interstitial%weasd_ice ', Interstitial%weasd_ice ) call print_var(mpirank, omprank, blkno, Grid%xlat_d, Grid%xlon_d, 'Interstitial%weasd_land ', Interstitial%weasd_land ) - call print_var(mpirank, omprank, blkno, Grid%xlat_d, Grid%xlon_d, 'Interstitial%weasd_ocean ', Interstitial%weasd_ocean ) + call print_var(mpirank, omprank, blkno, Grid%xlat_d, Grid%xlon_d, 'Interstitial%weasd_water ', Interstitial%weasd_water ) call print_var(mpirank, omprank, blkno, Grid%xlat_d, Grid%xlon_d, 'Interstitial%wind ', Interstitial%wind ) call print_var(mpirank, omprank, blkno, Grid%xlat_d, Grid%xlon_d, 'Interstitial%work1 ', Interstitial%work1 ) call print_var(mpirank, omprank, blkno, Grid%xlat_d, Grid%xlon_d, 'Interstitial%work2 ', Interstitial%work2 ) @@ -1248,9 +1250,6 @@ subroutine GFS_interstitialtoscreen_run (Model, Statein, Stateout, Sfcprop, Coup call print_var(mpirank, omprank, blkno, Grid%xlat_d, Grid%xlon_d, 'Interstitial%xlai1d ', Interstitial%xlai1d ) call print_var(mpirank, omprank, blkno, Grid%xlat_d, Grid%xlon_d, 'Interstitial%xmu ', Interstitial%xmu ) call print_var(mpirank, omprank, blkno, Grid%xlat_d, Grid%xlon_d, 'Interstitial%z01d ', Interstitial%z01d ) - call print_var(mpirank, omprank, blkno, Grid%xlat_d, Grid%xlon_d, 'Interstitial%zorl_ice ', Interstitial%zorl_ice ) - call print_var(mpirank, omprank, blkno, Grid%xlat_d, Grid%xlon_d, 'Interstitial%zorl_land ', Interstitial%zorl_land ) - call print_var(mpirank, omprank, blkno, Grid%xlat_d, Grid%xlon_d, 'Interstitial%zorl_ocean ', Interstitial%zorl_ocean ) call print_var(mpirank, omprank, blkno, Grid%xlat_d, Grid%xlon_d, 'Interstitial%zt1d ', Interstitial%zt1d ) ! UGWP call print_var(mpirank, omprank, blkno, Grid%xlat_d, Grid%xlon_d, 'Interstitial%tau_mtb ', Interstitial%tau_mtb ) @@ -1445,7 +1444,8 @@ end subroutine GFS_checkland_finalize subroutine GFS_checkland_run (me, master, blkno, im, kdt, iter, flag_iter, flag_guess, & flag_init, flag_restart, frac_grid, isot, ivegsrc, stype, vtype, slope, & soiltyp, vegtype, slopetyp, dry, icy, wet, lake, ocean, & - oceanfrac, landfrac, lakefrac, slmsk, islmsk, errmsg, errflg ) + oceanfrac, landfrac, lakefrac, slmsk, islmsk, & + zorl, zorlw, zorll, zorli, fice, errmsg, errflg ) use machine, only: kind_phys @@ -1481,6 +1481,11 @@ subroutine GFS_checkland_run (me, master, blkno, im, kdt, iter, flag_iter, flag_ real(kind_phys), intent(in ) :: lakefrac(im) real(kind_phys), intent(in ) :: slmsk(im) integer, intent(in ) :: islmsk(im) + real(kind_phys), intent(in ) :: zorl(im) + real(kind_phys), intent(in ) :: zorlw(im) + real(kind_phys), intent(in ) :: zorll(im) + real(kind_phys), intent(in ) :: zorli(im) + real(kind_phys), intent(in ) :: fice(im) character(len=*), intent( out) :: errmsg integer, intent( out) :: errflg @@ -1503,6 +1508,7 @@ subroutine GFS_checkland_run (me, master, blkno, im, kdt, iter, flag_iter, flag_ write(0,'(a,i5)') 'YYY: ivegsrc :', ivegsrc do i=1,im + !if (fice(i)>0.999) then !if (vegtype(i)==15) then write(0,'(a,2i5,1x,1x,l)') 'YYY: i, blk, flag_iter(i) :', i, blkno, flag_iter(i) write(0,'(a,2i5,1x,1x,l)') 'YYY: i, blk, flag_guess(i) :', i, blkno, flag_guess(i) @@ -1520,11 +1526,15 @@ subroutine GFS_checkland_run (me, master, blkno, im, kdt, iter, flag_iter, flag_ write(0,'(a,2i5,1x,e16.7)')'YYY: i, blk, oceanfrac(i) :', i, blkno, oceanfrac(i) write(0,'(a,2i5,1x,e16.7)')'YYY: i, blk, landfrac(i) :', i, blkno, landfrac(i) write(0,'(a,2i5,1x,e16.7)')'YYY: i, blk, lakefrac(i) :', i, blkno, lakefrac(i) + write(0,'(a,2i5,1x,e16.7)')'YYY: i, blk, fice(i) :', i, blkno, fice(i) write(0,'(a,2i5,1x,e16.7)')'YYY: i, blk, slmsk(i) :', i, blkno, slmsk(i) write(0,'(a,2i5,1x,i5)') 'YYY: i, blk, islmsk(i) :', i, blkno, islmsk(i) + write(0,'(a,2i5,1x,e16.7)')'YYY: i, blk, zorl(i) :', i, blkno, zorl(i) + write(0,'(a,2i5,1x,e16.7)')'YYY: i, blk, zorlw(i) :', i, blkno, zorlw(i) + write(0,'(a,2i5,1x,e16.7)')'YYY: i, blk, zorli(i) :', i, blkno, zorli(i) + write(0,'(a,2i5,1x,e16.7)')'YYY: i, blk, zorll(i) :', i, blkno, zorll(i) !end if end do end subroutine GFS_checkland_run - end module GFS_checkland diff --git a/physics/GFS_debug.meta b/physics/GFS_debug.meta index 3b044904b..f2a991426 100644 --- a/physics/GFS_debug.meta +++ b/physics/GFS_debug.meta @@ -646,6 +646,51 @@ type = integer intent = in optional = F +[zorl] + standard_name = surface_roughness_length + long_name = surface roughness length + units = cm + dimensions = (horizontal_loop_extent) + type = real + kind = kind_phys + intent = in + optional = F +[zorlw] + standard_name = surface_roughness_length_over_water + long_name = surface roughness length over water + units = cm + dimensions = (horizontal_loop_extent) + type = real + kind = kind_phys + intent = in + optional = F +[zorll] + standard_name = surface_roughness_length_over_land + long_name = surface roughness length over land + units = cm + dimensions = (horizontal_loop_extent) + type = real + kind = kind_phys + intent = in + optional = F +[zorli] + standard_name = surface_roughness_length_over_ice + long_name = surface roughness length over ice + units = cm + dimensions = (horizontal_loop_extent) + type = real + kind = kind_phys + intent = in + optional = F +[fice] + standard_name = sea_ice_concentration + long_name = ice fraction over open water + units = frac + dimensions = (horizontal_loop_extent) + type = real + kind = kind_phys + intent = in + optional = F [errmsg] standard_name = ccpp_error_message long_name = error message for error handling in CCPP diff --git a/physics/GFS_phys_time_vary.fv3.F90 b/physics/GFS_phys_time_vary.fv3.F90 index 0cc6a66b8..0f53edc35 100644 --- a/physics/GFS_phys_time_vary.fv3.F90 +++ b/physics/GFS_phys_time_vary.fv3.F90 @@ -305,8 +305,8 @@ subroutine GFS_phys_time_vary_init ( call setindxh2o (im, xlat_d, jindx1_h, jindx2_h, ddy_h) endif -!> - Call setindxaer() to initialize aerosols data !$OMP section +!> - Call setindxaer() to initialize aerosols data if (iaerclm) then call setindxaer (im, xlat_d, jindx1_aer, & jindx2_aer, ddy_aer, xlon_d, & @@ -317,8 +317,8 @@ subroutine GFS_phys_time_vary_init ( jamin=min(minval(jindx1_aer), jamin) jamax=max(maxval(jindx2_aer), jamax) endif -!$OMP section +!$OMP section !> - Call setindxci() to initialize IN and CCN data if (iccn == 1) then call setindxci (im, xlat_d, jindx1_ci, & @@ -376,10 +376,14 @@ subroutine GFS_phys_time_vary_init ( !$OMP end sections !$OMP end parallel + + if (errflg/=0) return + if (iaerclm) then - call read_aerdataf (iamin, iamax, jamin, jamax, me,master,iflip, & - idate,errmsg,errflg) - endif + call read_aerdataf (iamin, iamax, jamin, jamax, me, master, iflip, & + idate, errmsg, errflg) + if (errflg/=0) return + end if if (lsm == lsm_noahmp) then if (all(tvxy < zero)) then @@ -431,15 +435,34 @@ subroutine GFS_phys_time_vary_init ( smoiseq(:,:) = missing_value zsnsoxy(:,:) = missing_value + imn = idate(2) + +!$OMP parallel do num_threads(nthrds) default(none) & +!$OMP shared(im,lsoil,con_t0c,landfrac,tsfcl,tvxy,tgxy,tahxy) & +!$OMP shared(snowd,canicexy,canliqxy,canopy,eahxy,cmxy,chxy) & +!$OMP shared(fwetxy,sneqvoxy,weasd,alboldxy,qsnowxy,wslakexy) & +!$OMP shared(taussxy,albdvis,albdnir,albivis,albinir,emiss) & +!$OMP shared(waxy,wtxy,zwtxy,imn,vtype,xlaixy,xsaixy,lfmassxy) & +!$OMP shared(stmassxy,rtmassxy,woodxy,stblcpxy,fastcpxy) & +!$OMP shared(isbarren_table,isice_table,isurban_table) & +!$omp shared(iswater_table,laim_table,sla_table,bexp_table) & +!$omp shared(stc,smc,slc,tg3,snowxy,tsnoxy,snicexy,snliqxy) & +!$omp shared(zsnsoxy,STYPE,SMCMAX_TABLE,SMCWLT_TABLE,zs,dzs) & +!$omp shared(DWSAT_TABLE,DKSAT_TABLE,PSISAT_TABLE,smoiseq) & +!$OMP shared(smcwtdxy,deeprechxy,rechxy,errmsg,errflg) & +!$OMP private(vegtyp,masslai,masssai,snd,dzsno,dzsnso,isnow) & +!$OMP private(soiltyp,bexp,smcmax,smcwlt,dwsat,dksat,psisat,ddz) do ix=1,im if (landfrac(ix) >= drythresh) then tvxy(ix) = tsfcl(ix) tgxy(ix) = tsfcl(ix) tahxy(ix) = tsfcl(ix) - if (snowd(ix) > 0.01_kind_phys .and. tsfcl(ix) > con_t0c ) tvxy(ix) = con_t0c - if (snowd(ix) > 0.01_kind_phys .and. tsfcl(ix) > con_t0c ) tgxy(ix) = con_t0c - if (snowd(ix) > 0.01_kind_phys .and. tsfcl(ix) > con_t0c ) tahxy(ix) = con_t0c + if (snowd(ix) > 0.01_kind_phys .and. tsfcl(ix) > con_t0c ) then + tvxy(ix) = con_t0c + tgxy(ix) = con_t0c + tahxy(ix) = con_t0c + end if canicexy(ix) = 0.0_kind_phys canliqxy(ix) = canopy(ix) @@ -463,14 +486,12 @@ subroutine GFS_phys_time_vary_init ( albinir(ix) = 0.2_kind_phys emiss(ix) = 0.95_kind_phys - waxy(ix) = 4900.0_kind_phys wtxy(ix) = waxy(ix) zwtxy(ix) = (25.0_kind_phys + 2.0_kind_phys) - waxy(ix) / 1000.0_kind_phys / 0.2_kind_phys vegtyp = vtype(ix) if (vegtyp == 0) vegtyp = 7 - imn = idate(2) if ((vegtyp == isbarren_table) .or. (vegtyp == isice_table) .or. (vegtyp == isurban_table) .or. (vegtyp == iswater_table)) then @@ -552,7 +573,6 @@ subroutine GFS_phys_time_vary_init ( else errmsg = 'Error in GFS_phys_time_vary.fv3.F90: Problem with the logic assigning snow layers in Noah MP initialization' errflg = 1 - return endif ! Now we have the snowxy field @@ -628,6 +648,9 @@ subroutine GFS_phys_time_vary_init ( endif enddo ! ix +!$OMP end parallel do + + if (errflg/=0) return deallocate(dzsno) deallocate(dzsnso) @@ -748,6 +771,20 @@ subroutine GFS_phys_time_vary_timestep_init ( return end if +!$OMP parallel num_threads(nthrds) default(none) & +!$OMP shared(kdt,nsswr,lsswr,clstp,imfdeepcnv,cal_pre,random_clds) & +!$OMP shared(fhswr,fhour,seed0,cnx,cny,nrcm,wrk,rannie,rndval) & +!$OMP shared(rann,im,isc,jsc,imap,jmap,ntoz,me,idate,jindx1_o3,jindx2_o3) & +!$OMP shared(ozpl,ddy_o3,h2o_phys,jindx1_h,jindx2_h,h2opl,ddy_h,iaerclm,master) & +!$OMP shared(levs,prsl,iccn,jindx1_ci,jindx2_ci,ddy_ci,iindx1_ci,iindx2_ci) & +!$OMP shared(ddx_ci,in_nm,ccn_nm,do_ugwp_v1,jindx1_tau,jindx2_tau,ddy_j1tau) & +!$OMP shared(ddy_j2tau,tau_amf) & +!$OMP private(iseed,iskip,i,j,k) + +!$OMP sections + +!$OMP section + !--- switch for saving convective clouds - cnvc90.f !--- aka Ken Campana/Yu-Tai Hou legacy if ((mod(kdt,nsswr) == 0) .and. (lsswr)) then @@ -764,6 +801,8 @@ subroutine GFS_phys_time_vary_timestep_init ( clstp = 0100 endif +!$OMP section + !--- random number needed for RAS and old SAS and when cal_pre=.true. ! imfdeepcnv < 0 when ras = .true. if ( (imfdeepcnv <= 0 .or. cal_pre) .and. random_clds ) then @@ -789,6 +828,7 @@ subroutine GFS_phys_time_vary_timestep_init ( endif ! imfdeepcnv, cal_re, random_clds +!$OMP section !> - Call ozinterpol() to make ozone interpolation if (ntoz > 0) then call ozinterpol (me, im, idate, fhour, & @@ -796,6 +836,7 @@ subroutine GFS_phys_time_vary_timestep_init ( ozpl, ddy_o3) endif +!$OMP section !> - Call h2ointerpol() to make stratospheric water vapor data interpolation if (h2o_phys) then call h2ointerpol (me, im, idate, fhour, & @@ -803,15 +844,7 @@ subroutine GFS_phys_time_vary_timestep_init ( h2opl, ddy_h) endif -!> - Call aerinterpol() to make aerosol interpolation - if (iaerclm) then - call aerinterpol (me, master, im, idate, fhour, & - jindx1_aer, jindx2_aer, & - ddy_aer, iindx1_aer, & - iindx2_aer, ddx_aer, & - levs, prsl, aer_nm) - endif - +!$OMP section !> - Call ciinterpol() to make IN and CCN data interpolation if (iccn == 1) then call ciinterpol (me, im, idate, fhour, & @@ -821,6 +854,7 @@ subroutine GFS_phys_time_vary_timestep_init ( levs, prsl, in_nm, ccn_nm) endif +!$OMP section !> - Call cires_indx_ugwp to read monthly-mean GW-tau diagnosed from FV3GFS-runs that resolve GW-activ if (do_ugwp_v1) then call tau_amf_interp(me, master, im, idate, fhour, & @@ -828,6 +862,20 @@ subroutine GFS_phys_time_vary_timestep_init ( ddy_j1tau, ddy_j2tau, tau_amf) endif +!$OMP end sections +!$OMP end parallel + +!> - Call aerinterpol() to make aerosol interpolation + if (iaerclm) then + ! aerinterpol is using threading inside, don't + ! move into OpenMP parallel section above + call aerinterpol (me, master, nthrds, im, idate, & + fhour, jindx1_aer, jindx2_aer,& + ddy_aer, iindx1_aer, & + iindx2_aer, ddx_aer, & + levs, prsl, aer_nm) + endif + !> - Call gcycle() to repopulate specific time-varying surface properties for AMIP/forecast runs if (nscyc > 0) then if (mod(kdt,nscyc) == 1) THEN diff --git a/physics/GFS_phys_time_vary.fv3.meta b/physics/GFS_phys_time_vary.fv3.meta index 06192eb6a..f9ce50fa0 100644 --- a/physics/GFS_phys_time_vary.fv3.meta +++ b/physics/GFS_phys_time_vary.fv3.meta @@ -1672,7 +1672,6 @@ dimensions = (horizontal_dimension) type = real kind = kind_phys - active = (flag_for_nsstm_run > 0) intent = inout optional = F [tsfc] @@ -1793,8 +1792,8 @@ intent = inout optional = F [zorlo] - standard_name = surface_roughness_length_over_ocean - long_name = surface roughness length over ocean + standard_name = surface_roughness_length_over_water + long_name = surface roughness length over water units = cm dimensions = (horizontal_dimension) type = real diff --git a/physics/GFS_phys_time_vary.scm.F90 b/physics/GFS_phys_time_vary.scm.F90 index fb46de2bd..9fa4e2de3 100644 --- a/physics/GFS_phys_time_vary.scm.F90 +++ b/physics/GFS_phys_time_vary.scm.F90 @@ -18,7 +18,7 @@ module GFS_phys_time_vary use h2ointerp, only : read_h2odata, setindxh2o, h2ointerpol use aerclm_def, only : aerin, aer_pres, ntrcaer, ntrcaerm - use aerinterp, only : read_aerdata, setindxaer, aerinterpol + use aerinterp, only : read_aerdata, setindxaer, aerinterpol, read_aerdataf use iccn_def, only : ciplin, ccnin, ci_pres use iccninterp, only : read_cidata, setindxci, ciinterpol @@ -160,7 +160,7 @@ subroutine GFS_phys_time_vary_init ( integer, intent(out) :: errflg ! Local variables - integer :: i, j, ix, vegtyp + integer :: i, j, ix, vegtyp, iamin, iamax, jamin, jamax real(kind_phys) :: rsnow !--- Noah MP @@ -176,7 +176,11 @@ subroutine GFS_phys_time_vary_init ( errflg = 0 if (is_initialized) return - + iamin=999 + iamax=-999 + jamin=999 + jamax=-999 + !> - Call read_o3data() to read ozone data call read_o3data (ntoz, me, master) @@ -270,6 +274,10 @@ subroutine GFS_phys_time_vary_init ( jindx2_aer, ddy_aer, xlon_d, & iindx1_aer, iindx2_aer, ddx_aer, & me, master) + iamin=min(minval(iindx1_aer), iamin) + iamax=max(maxval(iindx2_aer), iamax) + jamin=min(minval(jindx1_aer), jamin) + jamax=max(maxval(jindx2_aer), jamax) endif !> - Call setindxci() to initialize IN and CCN data @@ -322,6 +330,14 @@ subroutine GFS_phys_time_vary_init ( sncovr_ice(:) = sncovr(:) endif endif + + if (errflg/=0) return + + if (iaerclm) then + call read_aerdataf (iamin, iamax, jamin, jamax, me, master, iflip, & + idate, errmsg, errflg) + if (errflg/=0) return + end if if (lsm == lsm_noahmp) then if (all(tvxy <= zero)) then @@ -371,16 +387,20 @@ subroutine GFS_phys_time_vary_init ( tsnoxy (:,:) = missing_value smoiseq(:,:) = missing_value zsnsoxy(:,:) = missing_value - + + imn = idate(2) + do ix=1,im if (landfrac(ix) >= drythresh) then tvxy(ix) = tsfcl(ix) tgxy(ix) = tsfcl(ix) tahxy(ix) = tsfcl(ix) - if (snowd(ix) > 0.01_kind_phys .and. tsfcl(ix) > con_t0c ) tvxy(ix) = con_t0c - if (snowd(ix) > 0.01_kind_phys .and. tsfcl(ix) > con_t0c ) tgxy(ix) = con_t0c - if (snowd(ix) > 0.01_kind_phys .and. tsfcl(ix) > con_t0c ) tahxy(ix) = con_t0c + if (snowd(ix) > 0.01_kind_phys .and. tsfcl(ix) > con_t0c ) then + tvxy(ix) = con_t0c + tgxy(ix) = con_t0c + tahxy(ix) = con_t0c + end if canicexy(ix) = 0.0_kind_phys canliqxy(ix) = canopy(ix) @@ -404,14 +424,12 @@ subroutine GFS_phys_time_vary_init ( albinir(ix) = 0.2_kind_phys emiss(ix) = 0.95_kind_phys - waxy(ix) = 4900.0_kind_phys wtxy(ix) = waxy(ix) zwtxy(ix) = (25.0_kind_phys + 2.0_kind_phys) - waxy(ix) / 1000.0_kind_phys / 0.2_kind_phys vegtyp = vtype(ix) if (vegtyp == 0) vegtyp = 7 - imn = idate(2) if ((vegtyp == isbarren_table) .or. (vegtyp == isice_table) .or. (vegtyp == isurban_table) .or. (vegtyp == iswater_table)) then @@ -491,9 +509,8 @@ subroutine GFS_phys_time_vary_init ( dzsno(-1) = 0.20_kind_phys dzsno(0) = snd - 0.05_kind_phys - 0.20_kind_phys else - errmsg = 'Error in GFS_phys_time_vary.fv3.F90: Problem with the logic assigning snow layers in Noah MP initialization' + errmsg = 'Error in GFS_phys_time_vary.scm.F90: Problem with the logic assigning snow layers in Noah MP initialization' errflg = 1 - return endif ! Now we have the snowxy field @@ -570,6 +587,8 @@ subroutine GFS_phys_time_vary_init ( enddo ! ix + if (errflg/=0) return + deallocate(dzsno) deallocate(dzsnso) @@ -619,7 +638,7 @@ subroutine GFS_phys_time_vary_timestep_init ( jindx1_aer, jindx2_aer, ddy_aer, iindx1_aer, iindx2_aer, ddx_aer, aer_nm, & jindx1_ci, jindx2_ci, ddy_ci, iindx1_ci, iindx2_ci, ddx_ci, in_nm, ccn_nm, & imap, jmap, prsl, seed0, rann, do_ugwp_v1, jindx1_tau, jindx2_tau, ddy_j1tau, ddy_j2tau,& - tau_amf, errmsg, errflg) + tau_amf, nthrds, errmsg, errflg) implicit none @@ -648,6 +667,7 @@ subroutine GFS_phys_time_vary_timestep_init ( integer, intent(in) :: jindx1_tau(:), jindx2_tau(:) real(kind_phys), intent(in) :: ddy_j1tau(:), ddy_j2tau(:) real(kind_phys), intent(inout) :: tau_amf(:) + integer, intent(in) :: nthrds character(len=*), intent(out) :: errmsg integer, intent(out) :: errflg @@ -724,21 +744,12 @@ subroutine GFS_phys_time_vary_timestep_init ( h2opl, ddy_h) endif -!> - Call aerinterpol() to make aerosol interpolation - if (iaerclm) then - call aerinterpol (me, master, im, idate, fhour, & - jindx1_aer, jindx2_aer, & - ddy_aer, iindx1_aer, & - iindx2_aer, ddx_aer, & - levs, prsl, aer_nm) - endif - !> - Call ciinterpol() to make IN and CCN data interpolation if (iccn == 1) then - call ciinterpol (me, im, idate, fhour, & - jindx1_ci, jindx2_ci, & - ddy_ci, iindx1_ci, & - iindx2_ci, ddx_ci, & + call ciinterpol (me, im, idate, fhour, & + jindx1_ci, jindx2_ci, & + ddy_ci, iindx1_ci, & + iindx2_ci, ddx_ci, & levs, prsl, in_nm, ccn_nm) endif @@ -749,6 +760,17 @@ subroutine GFS_phys_time_vary_timestep_init ( ddy_j1tau, ddy_j2tau, tau_amf) endif +!> - Call aerinterpol() to make aerosol interpolation + if (iaerclm) then + ! aerinterpol is using threading inside, don't + ! move into OpenMP parallel section above + call aerinterpol (me, master, nthrds, im, idate, & + fhour, jindx1_aer, jindx2_aer,& + ddy_aer, iindx1_aer, & + iindx2_aer, ddx_aer, & + levs, prsl, aer_nm) + endif + ! Not needed for SCM: !> - Call gcycle() to repopulate specific time-varying surface properties for AMIP/forecast runs !if (nscyc > 0) then diff --git a/physics/GFS_phys_time_vary.scm.meta b/physics/GFS_phys_time_vary.scm.meta index 1edaa32c8..74408d533 100644 --- a/physics/GFS_phys_time_vary.scm.meta +++ b/physics/GFS_phys_time_vary.scm.meta @@ -1462,6 +1462,14 @@ kind = kind_phys intent = inout optional = F +[nthrds] + standard_name = omp_threads + long_name = number of OpenMP threads available for physics schemes + units = count + dimensions = () + type = integer + intent = in + optional = F [errmsg] standard_name = ccpp_error_message long_name = error message for error handling in CCPP diff --git a/physics/GFS_rad_time_vary.fv3.F90 b/physics/GFS_rad_time_vary.fv3.F90 index a081ddcf1..8dd070b12 100644 --- a/physics/GFS_rad_time_vary.fv3.F90 +++ b/physics/GFS_rad_time_vary.fv3.F90 @@ -1,4 +1,4 @@ -!>\file GFS_rad_time_vary.F90 +!>\file GFS_rad_time_vary.fv3.F90 !! Contains code related to GFS physics suite setup (radiation part of time_vary_step) module GFS_rad_time_vary diff --git a/physics/GFS_rrtmg_post.F90 b/physics/GFS_rrtmg_post.F90 index 278d3c416..b882930bf 100644 --- a/physics/GFS_rrtmg_post.F90 +++ b/physics/GFS_rrtmg_post.F90 @@ -1,10 +1,12 @@ !>\file GFS_rrtmg_post.f90 !! This file contains + +!>\defgroup GFS_rrtmg_post_mod GFS RRTMG Scheme Post module GFS_rrtmg_post contains -!>\defgroup GFS_rrtmg_post GFS RRTMG Scheme Post -!! @{ +!> \section arg_table_GFS_rrtmg_post_init Argument Table +!! subroutine GFS_rrtmg_post_init () end subroutine GFS_rrtmg_post_init @@ -200,5 +202,4 @@ end subroutine GFS_rrtmg_post_run subroutine GFS_rrtmg_post_finalize () end subroutine GFS_rrtmg_post_finalize -!! @} end module GFS_rrtmg_post diff --git a/physics/GFS_rrtmg_pre.F90 b/physics/GFS_rrtmg_pre.F90 index 0c9eaf3f0..158067c05 100644 --- a/physics/GFS_rrtmg_pre.F90 +++ b/physics/GFS_rrtmg_pre.F90 @@ -26,8 +26,8 @@ subroutine GFS_rrtmg_pre_run (im, levs, lm, lmk, lmp, n_var_lndp, & ltaerosol, lgfdlmprad, uni_cld, effr_in, do_mynnedmf, lmfshal, & lmfdeep2, fhswr, fhlwr, solhr, sup, con_eps, epsm1, fvirt, & rog, rocp, con_rd, xlat_d, xlat, xlon, coslat, sinlat, tsfc, slmsk, & - prsi, prsl, prslk, tgrs, sfc_wts, mg_cld, effrr_in, pert_clds,sppt_wts,& - sppt_amp, cnvw_in, cnvc_in, qgrs, aer_nm, dx, icloud, & !inputs from here and above + prsi, prsl, prslk, tgrs, sfc_wts, mg_cld, effrr_in, pert_clds, & + sppt_wts, sppt_amp, cnvw_in, cnvc_in, qgrs, aer_nm, dx, icloud, & !inputs from here and above coszen, coszdg, effrl_inout, effri_inout, effrs_inout, & clouds1, clouds2, clouds3, clouds4, clouds5, & !in/out from here and above kd, kt, kb, mtopa, mbota, raddt, tsfg, tsfa, de_lgth, alb1d, delp, dz, & !output from here and below @@ -122,54 +122,52 @@ subroutine GFS_rrtmg_pre_run (im, levs, lm, lmk, lmp, n_var_lndp, & real(kind=kind_phys), dimension(:,:), intent(inout) :: effrl_inout, & effri_inout, & effrs_inout - real(kind=kind_phys), dimension(im,lm+LTP), intent(inout) :: clouds1, & + real(kind=kind_phys), dimension(:,:), intent(inout) :: clouds1, & clouds2, clouds3, & clouds4, clouds5 - integer, intent(out) :: kd, kt, kb - - integer, dimension(im,3), intent(out) :: mbota, mtopa - - real(kind=kind_phys), intent(out) :: raddt - - real(kind=kind_phys), dimension(im), intent(out) :: tsfg, tsfa - real(kind=kind_phys), dimension(im), intent(out) :: de_lgth, & - alb1d - - real(kind=kind_phys), dimension(im,lm+LTP), intent(out) :: delp, dz, & - plyr, tlyr, & - qlyr, olyr - - real(kind=kind_phys), dimension(im,lm+1+LTP), intent(out) :: plvl, tlvl - - - - real(kind=kind_phys), dimension(im,lm+LTP), intent(out) :: gasvmr_co2, & - gasvmr_n2o, & - gasvmr_ch4, & - gasvmr_o2, & - gasvmr_co, & - gasvmr_cfc11,& - gasvmr_cfc12,& - gasvmr_cfc22,& - gasvmr_ccl4,& - gasvmr_cfc113 - real(kind=kind_phys), dimension(im,NSPC1), intent(out) :: aerodp - real(kind=kind_phys), dimension(im,lm+LTP), intent(out) :: clouds6, & - clouds7, & - clouds8, & - clouds9, & - cldfra - real(kind=kind_phys), dimension(im,5), intent(out) :: cldsa - - real(kind=kind_phys), dimension(im,lm+LTP,NBDSW), intent(out) :: faersw1,& - faersw2,& - faersw3 - - real(kind=kind_phys), dimension(im,lm+LTP,NBDLW), intent(out) :: faerlw1,& - faerlw2,& - faerlw3 - real(kind=kind_phys), dimension(im,lm+LTP), intent(out) :: alpha + integer, intent(out) :: kd, kt, kb + + integer, dimension(:,:), intent(out) :: mbota, mtopa + + real(kind=kind_phys), intent(out) :: raddt + + real(kind=kind_phys), dimension(:), intent(out) :: tsfg, tsfa + real(kind=kind_phys), dimension(:), intent(out) :: de_lgth, & + alb1d + + real(kind=kind_phys), dimension(:,:), intent(out) :: delp, dz, & + plyr, tlyr, & + qlyr, olyr + + real(kind=kind_phys), dimension(:,:), intent(out) :: plvl, tlvl + + real(kind=kind_phys), dimension(:,:), intent(out) :: gasvmr_co2, & + gasvmr_n2o, & + gasvmr_ch4, & + gasvmr_o2, & + gasvmr_co, & + gasvmr_cfc11,& + gasvmr_cfc12,& + gasvmr_cfc22,& + gasvmr_ccl4,& + gasvmr_cfc113 + real(kind=kind_phys), dimension(:,:), intent(out) :: aerodp + real(kind=kind_phys), dimension(:,:), intent(out) :: clouds6, & + clouds7, & + clouds8, & + clouds9, & + cldfra + real(kind=kind_phys), dimension(:,:), intent(out) :: cldsa + + real(kind=kind_phys), dimension(:,:,:), intent(out) :: faersw1,& + faersw2,& + faersw3 + + real(kind=kind_phys), dimension(:,:,:), intent(out) :: faerlw1,& + faerlw2,& + faerlw3 + real(kind=kind_phys), dimension(:,:), intent(out) :: alpha character(len=*), intent(out) :: errmsg integer, intent(out) :: errflg @@ -204,7 +202,7 @@ subroutine GFS_rrtmg_pre_run (im, levs, lm, lmk, lmp, n_var_lndp, & real(kind=kind_phys), dimension(im,lm+LTP,NF_VGAS) :: gasvmr real(kind=kind_phys), dimension(im,lm+LTP,NBDSW,NF_AESW) :: faersw real(kind=kind_phys), dimension(im,lm+LTP,NBDLW,NF_AELW) :: faerlw - + ! for stochastic cloud perturbations real(kind=kind_phys), dimension(im) :: cldp1d real (kind=kind_phys) :: alpha0,beta0,m,s,cldtmp,tmp_wt,cdfz @@ -352,7 +350,7 @@ subroutine GFS_rrtmg_pre_run (im, levs, lm, lmk, lmp, n_var_lndp, & if ( plvl(i,lla) <= prsmin ) plvl(i,lla) = 2.0*prsmin plyr(i,lyb) = 0.5 * plvl(i,lla) tlyr(i,lyb) = tlyr(i,lya) - prslk1(i,lyb) = (plyr(i,lyb)*0.001) ** rocp ! plyr in Pa + prslk1(i,lyb) = (plyr(i,lyb)*0.001) ** rocp ! plyr in hPa rhly(i,lyb) = rhly(i,lya) qstl(i,lyb) = qstl(i,lya) enddo @@ -638,12 +636,12 @@ subroutine GFS_rrtmg_pre_run (im, levs, lm, lmk, lmp, n_var_lndp, & enddo enddo ! for Thompson MP - prepare variables for calc_effr - if (imp_physics == imp_physics_thompson .and. ltaerosol) then + if_thompson: if (imp_physics == imp_physics_thompson .and. ltaerosol) then do k=1,LMK do i=1,IM - qvs = qgrs(i,k,ntqv) + qvs = qlyr(i,k) qv_mp (i,k) = qvs/(1.-qvs) - rho (i,k) = con_eps*prsl(i,k)/(con_rd*tgrs(i,k)*(qv_mp(i,k)+con_eps)) + rho (i,k) = con_eps*plyr(i,k)*100./(con_rd*tlyr(i,k)*(qv_mp(i,k)+con_eps)) orho (i,k) = 1.0/rho(i,k) qc_mp (i,k) = tracer1(i,k,ntcw)/(1.-qvs) qi_mp (i,k) = tracer1(i,k,ntiw)/(1.-qvs) @@ -656,9 +654,9 @@ subroutine GFS_rrtmg_pre_run (im, levs, lm, lmk, lmp, n_var_lndp, & elseif (imp_physics == imp_physics_thompson) then do k=1,LMK do i=1,IM - qvs = qgrs(i,k,ntqv) + qvs = qlyr(i,k) qv_mp (i,k) = qvs/(1.-qvs) - rho (i,k) = con_eps*prsl(i,k)/(con_rd*tgrs(i,k)*(qv_mp(i,k)+con_eps)) + rho (i,k) = con_eps*plyr(i,k)*100./(con_rd*tlyr(i,k)*(qv_mp(i,k)+con_eps)) orho (i,k) = 1.0/rho(i,k) qc_mp (i,k) = tracer1(i,k,ntcw)/(1.-qvs) qi_mp (i,k) = tracer1(i,k,ntiw)/(1.-qvs) @@ -667,7 +665,7 @@ subroutine GFS_rrtmg_pre_run (im, levs, lm, lmk, lmp, n_var_lndp, & ni_mp (i,k) = tracer1(i,k,ntinc)/(1.-qvs) enddo enddo - endif + endif if_thompson endif do n=1,ncndl do k=1,LMK @@ -903,8 +901,8 @@ subroutine GFS_rrtmg_pre_run (im, levs, lm, lmk, lmp, n_var_lndp, & do i =1, im do k =1, lmk - qc_save(i,k) = ccnd(i,k,1) - qi_save(i,k) = ccnd(i,k,2) + qc_save(i,k) = ccnd(i,k,1) + qi_save(i,k) = ccnd(i,k,2) qs_save(i,k) = ccnd(i,k,4) enddo enddo diff --git a/physics/GFS_rrtmg_pre.meta b/physics/GFS_rrtmg_pre.meta index e26cdeac1..344befa97 100644 --- a/physics/GFS_rrtmg_pre.meta +++ b/physics/GFS_rrtmg_pre.meta @@ -395,32 +395,6 @@ type = logical intent = in optional = F -[sppt_wts] - standard_name = weights_for_stochastic_sppt_perturbation - long_name = weights for stochastic sppt perturbation - units = none - dimensions = (horizontal_loop_extent,vertical_dimension) - type = real - kind = kind_phys - intent = inout - optional = F -[sppt_amp] - standard_name = total_ampltiude_of_sppt_perturbation - long_name = toal ampltidue of stochastic sppt perturbation - units = none - dimensions = () - type = real - kind = kind_phys - intent = in - optional = F -[pert_clds] - standard_name = flag_for_stochastic_cloud_fraction_perturbations - long_name = flag for stochastic cloud fraction physics perturbations - units = flag - dimensions = () - type = logical - intent = in - optional = F [do_mynnedmf] standard_name = do_mynnedmf long_name = flag to activate MYNN-EDMF @@ -661,6 +635,32 @@ kind = kind_phys intent = in optional = F +[pert_clds] + standard_name = flag_for_stochastic_cloud_fraction_perturbations + long_name = flag for stochastic cloud fraction physics perturbations + units = flag + dimensions = () + type = logical + intent = in + optional = F +[sppt_wts] + standard_name = weights_for_stochastic_sppt_perturbation + long_name = weights for stochastic sppt perturbation + units = none + dimensions = (horizontal_loop_extent,vertical_dimension) + type = real + kind = kind_phys + intent = in + optional = F +[sppt_amp] + standard_name = total_ampltiude_of_sppt_perturbation + long_name = toal ampltidue of stochastic sppt perturbation + units = none + dimensions = () + type = real + kind = kind_phys + intent = in + optional = F [cnvw_in] standard_name = convective_cloud_water_mixing_ratio_in_phy_f3d long_name = convective cloud water mixing ratio in the phy_f3d array @@ -1194,4 +1194,3 @@ type = integer intent = out optional = F - diff --git a/physics/GFS_rrtmg_setup.F90 b/physics/GFS_rrtmg_setup.F90 index 85ffe7d67..9d0e42643 100644 --- a/physics/GFS_rrtmg_setup.F90 +++ b/physics/GFS_rrtmg_setup.F90 @@ -1,5 +1,7 @@ !> \file GFS_rrtmg_setup.f90 !! This file contains + +!> \defgroup GFS_rrtmg_setup_mod GFS RRTMG Scheme Setup module GFS_rrtmg_setup use physparam, only : isolar , ictmflg, ico2flg, ioznflg, iaerflg,& @@ -38,9 +40,7 @@ module GFS_rrtmg_setup contains -!> \defgroup GFS_rrtmg_setup GFS RRTMG Scheme Setup -!! @{ -!! \section arg_table_GFS_rrtmg_setup_init Argument Table +!> \section arg_table_GFS_rrtmg_setup_init Argument Table !! \htmlinclude GFS_rrtmg_setup_init.html !! subroutine GFS_rrtmg_setup_init ( & @@ -165,7 +165,7 @@ subroutine GFS_rrtmg_setup_init ( & implicit none ! interface variables - real (kind=kind_phys), intent(in) :: si(levr+1) + real (kind=kind_phys), intent(in) :: si(:) integer, intent(in) :: levr integer, intent(in) :: ictm integer, intent(in) :: isol @@ -185,7 +185,7 @@ subroutine GFS_rrtmg_setup_init ( & logical, intent(in) :: ccnorm integer, intent(in) :: imp_physics logical, intent(in) :: norad_precip - integer, intent(in) :: idate(4) + integer, intent(in) :: idate(:) integer, intent(in) :: iflip ! For consistency checks integer, intent(in) :: im @@ -817,5 +817,4 @@ subroutine radupdate( idate,jdate,deltsw,deltim,lsswr, me, & end subroutine radupdate !----------------------------------- -!! @} end module GFS_rrtmg_setup diff --git a/physics/GFS_rrtmgp_cloud_overlap_pre.F90 b/physics/GFS_rrtmgp_cloud_overlap_pre.F90 index 05b8ee79e..edd3aab93 100644 --- a/physics/GFS_rrtmgp_cloud_overlap_pre.F90 +++ b/physics/GFS_rrtmgp_cloud_overlap_pre.F90 @@ -3,7 +3,7 @@ ! ######################################################################################## module GFS_rrtmgp_cloud_overlap_pre use machine, only: kind_phys - use rrtmgp_aux, only: check_error_msg + use radiation_tools, only: check_error_msg use module_radiation_cloud_overlap, only: cmp_dcorr_lgth, get_alpha_exp public GFS_rrtmgp_cloud_overlap_pre_init, GFS_rrtmgp_cloud_overlap_pre_run, GFS_rrtmgp_cloud_overlap_pre_finalize @@ -21,13 +21,13 @@ end subroutine GFS_rrtmgp_cloud_overlap_pre_init !! subroutine GFS_rrtmgp_cloud_overlap_pre_run(nCol, nLev, yearlen, doSWrad, doLWrad, & julian, lat, p_lev, p_lay, tv_lay, con_pi, con_g, con_rd, con_epsq, dcorr_con, & - idcor, iovr, iovr_dcorr, iovr_exprand, iovr_exp, idcor_con, idcor_hogan, & + idcor, iovr, iovr_dcorr, iovr_exp, iovr_exprand, idcor_con, idcor_hogan, & idcor_oreopoulos, cld_frac, & - cloud_overlap_param, precip_overlap_param, de_lgth, deltaZc, errmsg, errflg) + de_lgth, cloud_overlap_param, precip_overlap_param, deltaZc, errmsg, errflg) implicit none ! Inputs - integer, intent(in) :: & + integer, intent(in) :: & nCol, & ! Number of horizontal grid points nLev, & ! Number of vertical layers yearlen, & ! Length of current year (365/366) WTF? @@ -39,7 +39,7 @@ subroutine GFS_rrtmgp_cloud_overlap_pre_run(nCol, nLev, yearlen, doSWrad, doLWra idcor_con, & ! Flag for decorrelation-length. Use constant value idcor_hogan, & ! Flag for decorrelation-length. (https://rmets.onlinelibrary.wiley.com/doi/full/10.1002/qj.647) idcor_oreopoulos ! Flag for decorrelation-length. (10.5194/acp-12-9097-2012) - logical, intent(in) :: & + logical, intent(in) :: & doSWrad, & ! Call SW radiation? doLWrad ! Call LW radiation real(kind_phys), intent(in) :: & @@ -49,19 +49,19 @@ subroutine GFS_rrtmgp_cloud_overlap_pre_run(nCol, nLev, yearlen, doSWrad, doLWra con_rd, & ! Physical constant: gas-constant for dry air con_epsq, & ! Physical constant: Minimum value for specific humidity dcorr_con ! Decorrelation-length (used if idcor = idcor_con) - real(kind_phys), dimension(nCol), intent(in) :: & + real(kind_phys), dimension(:), intent(in) :: & lat ! Latitude - real(kind_phys), dimension(nCol,nLev), intent(in) :: & + real(kind_phys), dimension(:,:), intent(in) :: & tv_lay, & ! Virtual temperature (K) p_lay, & ! Pressure at model-layers (Pa) cld_frac ! Total cloud fraction - real(kind_phys), dimension(nCol,nLev+1), intent(in) :: & + real(kind_phys), dimension(:,:), intent(in) :: & p_lev ! Pressure at model-level interfaces (Pa) ! Outputs - real(kind_phys), dimension(nCol),intent(out) :: & + real(kind_phys), dimension(:),intent(out) :: & de_lgth ! Decorrelation length - real(kind_phys), dimension(nCol,nLev),intent(out) :: & + real(kind_phys), dimension(:,:),intent(out) :: & cloud_overlap_param, & ! Cloud-overlap parameter precip_overlap_param, & ! Precipitation overlap parameter deltaZc ! Layer thickness (from layer-centers)(km) diff --git a/physics/GFS_rrtmgp_cloud_overlap_pre.meta b/physics/GFS_rrtmgp_cloud_overlap_pre.meta index 273832362..6e8cac89e 100644 --- a/physics/GFS_rrtmgp_cloud_overlap_pre.meta +++ b/physics/GFS_rrtmgp_cloud_overlap_pre.meta @@ -1,7 +1,7 @@ [ccpp-table-properties] name = GFS_rrtmgp_cloud_overlap_pre type = scheme - dependencies = rrtmgp_aux.F90, radiation_cloud_overlap.F90 + dependencies = radiation_tools.F90, radiation_cloud_overlap.F90 ######################################################################## [ccpp-arg-table] @@ -23,6 +23,14 @@ type = integer intent = in optional = F +[yearlen] + standard_name = number_of_days_in_year + long_name = number of days in a year + units = days + dimensions = () + type = integer + intent = in + optional = F [doSWrad] standard_name = flag_to_calc_sw long_name = logical flags for sw radiation calls @@ -39,14 +47,6 @@ type = logical intent = in optional = F -[yearlen] - standard_name = number_of_days_in_year - long_name = number of days in a year - units = days - dimensions = () - type = integer - intent = in - optional = F [julian] standard_name = julian_day long_name = julian day @@ -128,6 +128,23 @@ kind = kind_phys intent = in optional = F +[dcorr_con] + standard_name = decorreltion_length_used_by_overlap_method + long_name = decorrelation length (default) used by cloud overlap method (iovr) + units = km + dimensions = () + type = real + intent = in + kind = kind_phys + optional = F +[idcor] + standard_name = flag_for_decorrelation_length_method + long_name = flag for decorrelation length method used in cloud overlap method (iovr) + units = flag + dimensions = () + type = integer + intent = in + optional = F [iovr] standard_name = flag_for_cloud_overlap_method_for_radiation long_name = flag for cloud overlap method @@ -160,14 +177,6 @@ type = integer intent = in optional = F -[idcor] - standard_name = flag_for_decorrelation_length_method - long_name = flag for decorrelation length method used in cloud overlap method (iovr) - units = flag - dimensions = () - type = integer - intent = in - optional = F [idcor_con] standard_name = flag_for_constant_decorrelation_length_method long_name = choice of decorrelation length computation (costant) @@ -192,15 +201,6 @@ type = integer intent = in optional = F -[dcorr_con] - standard_name = decorreltion_length_used_by_overlap_method - long_name = decorrelation length (default) used by cloud overlap method (iovr) - units = km - dimensions = () - type = real - intent = in - kind = kind_phys - optional = F [cld_frac] standard_name = total_cloud_fraction long_name = layer total cloud fraction diff --git a/physics/GFS_rrtmgp_gfdlmp_pre.F90 b/physics/GFS_rrtmgp_gfdlmp_pre.F90 index 1f3d34973..ccbfd1df8 100644 --- a/physics/GFS_rrtmgp_gfdlmp_pre.F90 +++ b/physics/GFS_rrtmgp_gfdlmp_pre.F90 @@ -4,7 +4,7 @@ ! ######################################################################################## module GFS_rrtmgp_gfdlmp_pre use machine, only: kind_phys - use rrtmgp_aux, only: check_error_msg + use radiation_tools, only: check_error_msg use module_radiation_cloud_overlap, only: cmp_dcorr_lgth, get_alpha_exp use rrtmgp_lw_cloud_optics, only: radliq_lwr => radliq_lwrLW, radliq_upr => radliq_uprLW,& radice_lwr => radice_lwrLW, radice_upr => radice_uprLW @@ -64,20 +64,20 @@ subroutine GFS_rrtmgp_gfdlmp_pre_run(nCol, nLev, nTracers, ncnd, i_cldliq, i_cld real(kind_phys), intent(in) :: & con_g, & ! Physical constant: gravitational constant con_rd ! Physical constant: gas-constant for dry air - real(kind_phys), dimension(nCol,nLev), intent(in) :: & + real(kind_phys), dimension(:,:), intent(in) :: & tv_lay, & ! Virtual temperature (K) p_lay, & ! Pressure at model-layers (Pa) effrin_cldliq, & ! Effective radius for liquid cloud-particles (microns) effrin_cldice, & ! Effective radius for ice cloud-particles (microns) effrin_cldrain, & ! Effective radius for rain cloud-particles (microns) effrin_cldsnow ! Effective radius for snow cloud-particles (microns) - real(kind_phys), dimension(nCol,nLev+1), intent(in) :: & + real(kind_phys), dimension(:,:), intent(in) :: & p_lev ! Pressure at model-level interfaces (Pa) - real(kind_phys), dimension(nCol, nLev, nTracers),intent(in) :: & + real(kind_phys), dimension(:,:,:),intent(in) :: & tracer ! Cloud condensate amount in layer by type () ! Outputs - real(kind_phys), dimension(nCol,nLev),intent(inout) :: & + real(kind_phys), dimension(:,:),intent(inout) :: & cld_frac, & ! Total cloud fraction cld_lwp, & ! Cloud liquid water path cld_reliq, & ! Cloud liquid effective radius @@ -166,7 +166,8 @@ subroutine GFS_rrtmgp_gfdlmp_pre_run(nCol, nLev, nTracers, ncnd, i_cldliq, i_cld where(cld_reice .gt. radice_upr) cld_reice = radice_upr endif - ! Cloud-fraction + ! Cloud-fraction. For mynnedmf, cld_frac is adjusted for precipitation here, otherwise + ! it passes through this interface. It is adjusted prior in sgscloudradpre. if (do_mynnedmf .and. kdt .gt. 1) then do iLay = 1, nLev do iCol = 1, nCol diff --git a/physics/GFS_rrtmgp_gfdlmp_pre.meta b/physics/GFS_rrtmgp_gfdlmp_pre.meta index 19d09cd79..bb3b9fc9f 100644 --- a/physics/GFS_rrtmgp_gfdlmp_pre.meta +++ b/physics/GFS_rrtmgp_gfdlmp_pre.meta @@ -1,7 +1,7 @@ [ccpp-table-properties] name = GFS_rrtmgp_gfdlmp_pre type = scheme - dependencies = rrtmgp_aux.F90, radiation_cloud_overlap.F90, rrtmgp_lw_cloud_optics.F90 + dependencies = radiation_tools.F90, radiation_cloud_overlap.F90, rrtmgp_lw_cloud_optics.F90 ######################################################################## [ccpp-arg-table] @@ -39,62 +39,6 @@ type = integer intent = in optional = F -[doSWrad] - standard_name = flag_to_calc_sw - long_name = logical flags for sw radiation calls - units = flag - dimensions = () - type = logical - intent = in - optional = F -[doLWrad] - standard_name = flag_to_calc_lw - long_name = logical flags for lw radiation calls - units = flag - dimensions = () - type = logical - intent = in - optional = F -[effr_in] - standard_name = flag_for_cloud_effective_radii - long_name = flag for cloud effective radii calculations in GFDL microphysics - units = flag - dimensions = () - type = logical - intent = in - optional = F -[doGP_cldoptics_PADE] - standard_name = flag_to_calc_lw_cld_optics_using_RRTMGP_PADE - long_name = logical flag to control cloud optics scheme. - units = flag - dimensions = () - type = logical - intent = in - optional = F -[doGP_cldoptics_LUT] - standard_name = flag_to_calc_lw_cld_optics_using_RRTMGP_LUT - long_name = logical flag to control cloud optics scheme. - units = flag - dimensions = () - type = logical - intent = in - optional = F -[do_mynnedmf] - standard_name = do_mynnedmf - long_name = flag to activate MYNN-EDMF - units = flag - dimensions = () - type = logical - intent = in - optional = F -[kdt] - standard_name = index_of_time_step - long_name = current forecast iteration - units = index - dimensions = () - type = integer - intent = in - optional = F [i_cldliq] standard_name = index_for_liquid_cloud_condensate long_name = tracer index for cloud condensate (or liquid water) @@ -143,6 +87,73 @@ type = integer intent = in optional = F +[doSWrad] + standard_name = flag_to_calc_sw + long_name = logical flags for sw radiation calls + units = flag + dimensions = () + type = logical + intent = in + optional = F +[doLWrad] + standard_name = flag_to_calc_lw + long_name = logical flags for lw radiation calls + units = flag + dimensions = () + type = logical + intent = in + optional = F +[effr_in] + standard_name = flag_for_cloud_effective_radii + long_name = flag for cloud effective radii calculations in GFDL microphysics + units = flag + dimensions = () + type = logical + intent = in + optional = F +[kdt] + standard_name = index_of_time_step + long_name = current forecast iteration + units = index + dimensions = () + type = integer + intent = in + optional = F +[do_mynnedmf] + standard_name = do_mynnedmf + long_name = flag to activate MYNN-EDMF + units = flag + dimensions = () + type = logical + intent = in + optional = F +[p_lev] + standard_name = air_pressure_at_interface_for_RRTMGP_in_hPa + long_name = air pressure at vertical interface for radiation calculation + units = hPa + dimensions = (horizontal_loop_extent,vertical_dimension_plus_one) + type = real + kind = kind_phys + intent = in + optional = F +[p_lay] + standard_name = air_pressure_at_layer_for_RRTMGP_in_hPa + long_name = air pressure at vertical layer for radiation calculation + units = hPa + dimensions = (horizontal_loop_extent,vertical_dimension) + type = real + kind = kind_phys + intent = in + optional = F +[tv_lay] + standard_name = virtual_temperature + long_name = layer virtual temperature + units = K + dimensions = (horizontal_loop_extent,vertical_dimension) + type = real + kind = kind_phys + intent = in + optional = F [effrin_cldliq] standard_name = effective_radius_of_stratiform_cloud_liquid_water_particle_in_um long_name = eff. radius of cloud liquid water particle in micrometer @@ -178,34 +189,7 @@ type = real kind = kind_phys intent = in - optional = F -[p_lev] - standard_name = air_pressure_at_interface_for_RRTMGP_in_hPa - long_name = air pressure at vertical interface for radiation calculation - units = hPa - dimensions = (horizontal_loop_extent,vertical_dimension_plus_one) - type = real - kind = kind_phys - intent = in - optional = F -[p_lay] - standard_name = air_pressure_at_layer_for_RRTMGP_in_hPa - long_name = air pressure at vertical layer for radiation calculation - units = hPa - dimensions = (horizontal_loop_extent,vertical_dimension) - type = real - kind = kind_phys - intent = in - optional = F -[tv_lay] - standard_name = virtual_temperature - long_name = layer virtual temperature - units = K - dimensions = (horizontal_loop_extent,vertical_dimension) - type = real - kind = kind_phys - intent = in - optional = F + optional = F [tracer] standard_name = chemical_tracers long_name = chemical tracers @@ -233,6 +217,22 @@ kind = kind_phys intent = in optional = F +[doGP_cldoptics_PADE] + standard_name = flag_to_calc_lw_cld_optics_using_RRTMGP_PADE + long_name = logical flag to control cloud optics scheme. + units = flag + dimensions = () + type = logical + intent = in + optional = F +[doGP_cldoptics_LUT] + standard_name = flag_to_calc_lw_cld_optics_using_RRTMGP_LUT + long_name = logical flag to control cloud optics scheme. + units = flag + dimensions = () + type = logical + intent = in + optional = F [cld_frac] standard_name = total_cloud_fraction long_name = layer total cloud fraction diff --git a/physics/GFS_rrtmgp_lw_post.F90 b/physics/GFS_rrtmgp_lw_post.F90 index e2dbd17fa..ff0346fe4 100644 --- a/physics/GFS_rrtmgp_lw_post.F90 +++ b/physics/GFS_rrtmgp_lw_post.F90 @@ -6,7 +6,7 @@ module GFS_rrtmgp_lw_post use mo_gas_optics_rrtmgp, only: ty_gas_optics_rrtmgp use mo_fluxes_byband, only: ty_fluxes_byband use mo_heating_rates, only: compute_heating_rate - use rrtmgp_aux, only: check_error_msg + use radiation_tools, only: check_error_msg implicit none public GFS_rrtmgp_lw_post_init,GFS_rrtmgp_lw_post_run,GFS_rrtmgp_lw_post_finalize diff --git a/physics/GFS_rrtmgp_lw_post.meta b/physics/GFS_rrtmgp_lw_post.meta index 72a82421e..75ff993c2 100644 --- a/physics/GFS_rrtmgp_lw_post.meta +++ b/physics/GFS_rrtmgp_lw_post.meta @@ -1,7 +1,7 @@ [ccpp-table-properties] name = GFS_rrtmgp_lw_post type = scheme - dependencies = iounitdef.f,machine.F,radiation_aerosols.f,radlw_param.f,rte-rrtmgp/extensions/mo_fluxes_byband.F90,rte-rrtmgp/extensions/mo_fluxes_byband_kernels.F90,rrtmgp_aux.F90,rte-rrtmgp/rte/mo_fluxes.F90,rte-rrtmgp/rte/kernels/mo_fluxes_broadband_kernels.F90,rte-rrtmgp/extensions/mo_heating_rates.F90 + dependencies = iounitdef.f,machine.F,radiation_aerosols.f,radlw_param.f,rte-rrtmgp/extensions/mo_fluxes_byband.F90,rte-rrtmgp/extensions/mo_fluxes_byband_kernels.F90,radiation_tools.F90,rte-rrtmgp/rte/mo_fluxes.F90,rte-rrtmgp/rte/kernels/mo_fluxes_broadband_kernels.F90,rte-rrtmgp/extensions/mo_heating_rates.F90 ######################################################################## [ccpp-arg-table] diff --git a/physics/GFS_rrtmgp_pre.F90 b/physics/GFS_rrtmgp_pre.F90 index 220248231..88e534595 100644 --- a/physics/GFS_rrtmgp_pre.F90 +++ b/physics/GFS_rrtmgp_pre.F90 @@ -9,7 +9,7 @@ module GFS_rrtmgp_pre getozn ! Routine to setup ozone ! RRTMGP types use mo_gas_concentrations, only: ty_gas_concs - use rrtmgp_aux, only: check_error_msg + use radiation_tools, only: check_error_msg,cmp_tlev real(kind_phys), parameter :: & amd = 28.9644_kind_phys, & ! Molecular weight of dry-air (g/mol) @@ -163,7 +163,7 @@ subroutine GFS_rrtmgp_pre_run(nCol, nLev, nTracers, i_o3, lsswr, lslwr, fhswr, f logical :: top_at_1 real(kind_phys),dimension(nCol,nLev) :: vmr_o3, vmr_h2o real(kind_phys) :: es, tem1, tem2 - real(kind_phys), dimension(nCol,nLev) :: o3_lay, tem2da, tem2db + real(kind_phys), dimension(nCol,nLev) :: o3_lay real(kind_phys), dimension(nCol,nLev, NF_VGAS) :: gas_vmr character(len=32), dimension(gas_concentrations%get_num_gases()) :: active_gases @@ -206,49 +206,13 @@ subroutine GFS_rrtmgp_pre_run(nCol, nLev, nTracers, i_o3, lsswr, lslwr, fhswr, f do iCol=1,NCOL do iLay=1,nLev if (t_lay(iCol,iLay) .le. minGPtemp) then - t_lay = minGPtemp + epsilon(minGPtemp) + t_lay(iCol,iLay) = minGPtemp + epsilon(minGPtemp) endif enddo enddo ! Temperature at layer-interfaces - if (top_at_1) then - tem2da(1:nCol,2:iSFC) = log(p_lay(1:nCol,2:iSFC)) - tem2db(1:nCol,2:iSFC) = log(p_lev(1:nCol,2:iSFC)) - do iCol = 1, nCol - tem2da(iCol,1) = log(p_lay(iCol,1) ) - tem2db(iCol,1) = log(max(minGPpres, p_lev(iCol,1)) ) - tem2db(iCol,iSFC) = log(p_lev(iCol,iSFC) ) - enddo - ! - t_lev(1:NCOL,1) = t_lay(1:NCOL,iTOA) - do iLay = 2, iSFC - do iCol = 1, nCol - t_lev(iCol,iLay) = t_lay(iCol,iLay) + (t_lay(iCol,iLay-1) - t_lay(iCol,iLay))& - * (tem2db(iCol,iLay) - tem2da(iCol,iLay)) & - / (tem2da(iCol,iLay-1) - tem2da(iCol,iLay)) - enddo - enddo - t_lev(1:NCOL,iSFC+1) = tsfc(1:NCOL) - else - tem2da(1:nCol,2:iTOA) = log(p_lay(1:nCol,2:iTOA)) - tem2db(1:nCol,2:iTOA) = log(p_lev(1:nCol,2:iTOA)) - do iCol = 1, nCol - tem2da(iCol,1) = log(p_lay(iCol,1)) - tem2db(iCol,1) = log(p_lev(iCol,1)) - tem2db(iCol,iTOA) = log(max(minGPpres, p_lev(iCol,iTOA)) ) - enddo - ! - t_lev(1:NCOL,1) = tsfc(1:NCOL) - do iLay = 1, iTOA-1 - do iCol = 1, nCol - t_lev(iCol,iLay+1) = t_lay(iCol,iLay) + (t_lay(iCol,iLay+1) - t_lay(iCol,iLay))& - * (tem2db(iCol,iLay+1) - tem2da(iCol,iLay)) & - / (tem2da(iCol,iLay+1) - tem2da(iCol,iLay)) - enddo - enddo - t_lev(1:NCOL,iTOA+1) = t_lay(1:NCOL,iTOA) - endif + call cmp_tlev(nCol,nLev,minGPpres,p_lay,t_lay,p_lev,tsfc,t_lev) ! Compute a bunch of thermodynamic fields needed by the cloud microphysics schemes. ! Relative humidity, saturation mixing-ratio, vapor mixing-ratio, virtual temperature, @@ -319,5 +283,4 @@ end subroutine GFS_rrtmgp_pre_run ! ######################################################################################### subroutine GFS_rrtmgp_pre_finalize () end subroutine GFS_rrtmgp_pre_finalize - end module GFS_rrtmgp_pre diff --git a/physics/GFS_rrtmgp_pre.meta b/physics/GFS_rrtmgp_pre.meta index cb53b8f86..8096aef2a 100644 --- a/physics/GFS_rrtmgp_pre.meta +++ b/physics/GFS_rrtmgp_pre.meta @@ -2,7 +2,7 @@ name = GFS_rrtmgp_pre type = scheme dependencies = funcphys.f90,iounitdef.f,machine.F,module_bfmicrophysics.f,physcons.F90,physparam.f,radcons.f90,radiation_aerosols.f - dependencies = radiation_astronomy.f,radiation_clouds.f,module_mp_thompson.F90,radiation_gases.f,radiation_surface.f,rrtmgp_aux.F90,rrtmg_lw_cloud_optics.F90 + dependencies = radiation_astronomy.f,radiation_clouds.f,module_mp_thompson.F90,radiation_gases.f,radiation_surface.f,radiation_tools.F90,rrtmg_lw_cloud_optics.F90 ######################################################################## [ccpp-arg-table] @@ -237,7 +237,7 @@ dimensions = () type = real kind = kind_phys - intent = out + intent = in optional = F [raddt] standard_name = time_step_for_radiation diff --git a/physics/GFS_rrtmgp_setup.F90 b/physics/GFS_rrtmgp_setup.F90 index 308456e06..a55c84ae7 100644 --- a/physics/GFS_rrtmgp_setup.F90 +++ b/physics/GFS_rrtmgp_setup.F90 @@ -56,14 +56,14 @@ subroutine GFS_rrtmgp_setup_init(imp_physics, imp_physics_fer_hires, imp_physics imp_physics_zhao_carr, & ! Flag for zhao-carr scheme imp_physics_zhao_carr_pdf, & ! Flag for zhao-carr+PDF scheme imp_physics_mg ! Flag for MG scheme - real(kind_phys), dimension(levr+1), intent(in) :: & + real(kind_phys), dimension(:), intent(in) :: & si integer, intent(in) :: levr, ictm, isol, ico2, iaer, ialb, iems, & ntcw, num_p3d, ntoz, iovr, isubc_sw, isubc_lw, & icliq_sw, iflip, me logical, intent(in) :: & crick_proof, ccnorm, norad_precip - integer, intent(in), dimension(4) :: & + integer, intent(in), dimension(:) :: & idate ! Outputs diff --git a/physics/GFS_rrtmgp_setup.meta b/physics/GFS_rrtmgp_setup.meta index 1237184d8..7890d3d48 100644 --- a/physics/GFS_rrtmgp_setup.meta +++ b/physics/GFS_rrtmgp_setup.meta @@ -38,6 +38,8 @@ units = flag dimensions = () type = integer + intent = in + optional = F [imp_physics_wsm6] intent = in optional = F diff --git a/physics/GFS_rrtmgp_sw_post.F90 b/physics/GFS_rrtmgp_sw_post.F90 index 1f195b397..23a681826 100644 --- a/physics/GFS_rrtmgp_sw_post.F90 +++ b/physics/GFS_rrtmgp_sw_post.F90 @@ -5,7 +5,7 @@ module GFS_rrtmgp_sw_post use mo_gas_optics_rrtmgp, only: ty_gas_optics_rrtmgp use mo_fluxes_byband, only: ty_fluxes_byband use mo_heating_rates, only: compute_heating_rate - use rrtmgp_aux, only: check_error_msg + use radiation_tools, only: check_error_msg use rrtmgp_sw_gas_optics, only: sw_gas_props implicit none diff --git a/physics/GFS_rrtmgp_sw_post.meta b/physics/GFS_rrtmgp_sw_post.meta index eb7f1600d..f0b21493e 100644 --- a/physics/GFS_rrtmgp_sw_post.meta +++ b/physics/GFS_rrtmgp_sw_post.meta @@ -2,7 +2,7 @@ name = GFS_rrtmgp_sw_post type = scheme dependencies = iounitdef.f,machine.F,radiation_aerosols.f,radsw_param.f,rte-rrtmgp/extensions/mo_fluxes_byband.F90,rte-rrtmgp/extensions/mo_fluxes_byband_kernels.F90 - dependencies = rte-rrtmgp/rte/mo_fluxes.F90,rte-rrtmgp/rte/kernels/mo_fluxes_broadband_kernels.F90,rte-rrtmgp/extensions/mo_heating_rates.F90,rrtmgp_aux.F90 + dependencies = rte-rrtmgp/rte/mo_fluxes.F90,rte-rrtmgp/rte/kernels/mo_fluxes_broadband_kernels.F90,rte-rrtmgp/extensions/mo_heating_rates.F90,radiation_tools.F90 ######################################################################## [ccpp-arg-table] diff --git a/physics/GFS_rrtmgp_sw_pre.F90 b/physics/GFS_rrtmgp_sw_pre.F90 index 457080536..68f2a07c1 100644 --- a/physics/GFS_rrtmgp_sw_pre.F90 +++ b/physics/GFS_rrtmgp_sw_pre.F90 @@ -27,7 +27,7 @@ end subroutine GFS_rrtmgp_sw_pre_init !> \section arg_table_GFS_rrtmgp_sw_pre_run !! \htmlinclude GFS_rrtmgp_sw_pre.html !! - subroutine GFS_rrtmgp_sw_pre_run(me, nCol, nLev, lndp_type, n_var_lndp,lndp_var_list, & + subroutine GFS_rrtmgp_sw_pre_run(me, nCol, nLev, n_var_lndp, lndp_type, lndp_var_list, & lndp_prt_list, doSWrad, solhr, lon, coslat, sinlat, snowd, sncovr, snoalb, zorl, & tsfg, tsfa, hprime, alvsf, alnsf, alvwf, alnwf, facsf, facwf, fice, tisfc, albdvis, & albdnir, albivis, albinir, lsmask, sfc_wts, p_lay, tv_lay, relhum, p_lev, & @@ -41,15 +41,15 @@ subroutine GFS_rrtmgp_sw_pre_run(me, nCol, nLev, lndp_type, n_var_lndp,lndp_var_ nLev, & ! Number of vertical layers n_var_lndp, & ! Number of surface variables perturbed lndp_type ! Type of land perturbations scheme used - character(len=3), dimension(n_var_lndp), intent(in) :: & + character(len=3), dimension(:), intent(in) :: & lndp_var_list - real(kind_phys), dimension(n_var_lndp), intent(in) :: & + real(kind_phys), dimension(:), intent(in) :: & lndp_prt_list logical,intent(in) :: & doSWrad ! Call RRTMGP SW radiation? real(kind_phys), intent(in) :: & solhr ! Time in hours after 00z at the current timestep - real(kind_phys), dimension(nCol), intent(in) :: & + real(kind_phys), dimension(:), intent(in) :: & lsmask, & ! Landmask: sea/land/ice=0/1/2 lon, & ! Longitude coslat, & ! Cosine(latitude) @@ -75,25 +75,25 @@ subroutine GFS_rrtmgp_sw_pre_run(me, nCol, nLev, lndp_type, n_var_lndp,lndp_var_ albivis, & ! surface albedo from lsm (diffuse,vis) (frac) albinir ! surface albedo from lsm (diffuse,nir) (frac) - real(kind_phys), dimension(nCol,n_var_lndp), intent(in) :: & + real(kind_phys), dimension(:,:), intent(in) :: & sfc_wts ! Weights for stochastic surface physics perturbation () - real(kind_phys), dimension(nCol,nLev),intent(in) :: & + real(kind_phys), dimension(:,:),intent(in) :: & p_lay, & ! Layer pressure tv_lay, & ! Layer virtual-temperature relhum ! Layer relative-humidity - real(kind_phys), dimension(nCol,nLev+1),intent(in) :: & + real(kind_phys), dimension(:,:),intent(in) :: & p_lev ! Pressure @ layer interfaces (Pa) ! Outputs integer, intent(out) :: & nday ! Number of daylit points - integer, dimension(ncol), intent(out) :: & + integer, dimension(:), intent(out) :: & idxday ! Indices for daylit points - real(kind_phys), dimension(ncol), intent(inout) :: & + real(kind_phys), dimension(:), intent(inout) :: & coszen, & ! Cosine of SZA coszdg, & ! Cosine of SZA, daytime sfc_alb_dif ! Mean surface diffused (nIR+uvvis) sw albedo - real(kind_phys), dimension(sw_gas_props%get_nband(),ncol), intent(out) :: & + real(kind_phys), dimension(:,:), intent(out) :: & sfc_alb_nir_dir, & ! Surface albedo (direct) sfc_alb_nir_dif, & ! Surface albedo (diffuse) sfc_alb_uvvis_dir, & ! Surface albedo (direct) diff --git a/physics/GFS_rrtmgp_sw_pre.meta b/physics/GFS_rrtmgp_sw_pre.meta index 5a165f9ad..349750879 100644 --- a/physics/GFS_rrtmgp_sw_pre.meta +++ b/physics/GFS_rrtmgp_sw_pre.meta @@ -30,7 +30,7 @@ dimensions = () type = integer intent = in - optional = F + optional = F [n_var_lndp] standard_name = number_of_land_surface_variables_perturbed long_name = number of land surface variables perturbed @@ -38,7 +38,7 @@ dimensions = () type = integer intent = in - optional = F + optional = F [lndp_type] standard_name = index_for_stochastic_land_surface_perturbation_type long_name = index for stochastic land surface perturbations type @@ -47,15 +47,6 @@ type = integer intent = in optional = F -[lndp_prt_list] - standard_name =magnitude_of_perturbations_for_landperts - long_name = magnitude of perturbations for landperts - units = variable - dimensions = (number_of_land_surface_variables_perturbed) - type = real - kind = kind_phys - intent = in - optional = F [lndp_var_list] standard_name = variables_to_be_perturbed_for_landperts long_name = variables to be perturbed for landperts @@ -65,6 +56,15 @@ kind = len=3 intent = in optional = F +[lndp_prt_list] + standard_name =magnitude_of_perturbations_for_landperts + long_name = magnitude of perturbations for landperts + units = variable + dimensions = (number_of_land_surface_variables_perturbed) + type = real + kind = kind_phys + intent = in + optional = F [doSWrad] standard_name = flag_to_calc_sw long_name = logical flags for sw radiation calls @@ -109,15 +109,6 @@ kind = kind_phys intent = in optional = F -[lsmask] - standard_name = sea_land_ice_mask_real - long_name = landmask: sea/land/ice=0/1/2 - units = flag - dimensions = (horizontal_loop_extent) - type = real - kind = kind_phys - intent = in - optional = F [snowd] standard_name = surface_snow_thickness_water_equivalent long_name = water equivalent snow depth @@ -243,7 +234,7 @@ type = real kind = kind_phys intent = in - optional = F + optional = F [tisfc] standard_name = sea_ice_temperature long_name = sea ice surface skin temperature @@ -289,6 +280,15 @@ kind = kind_phys intent = in optional = F +[lsmask] + standard_name = sea_land_ice_mask_real + long_name = landmask: sea/land/ice=0/1/2 + units = flag + dimensions = (horizontal_loop_extent) + type = real + kind = kind_phys + intent = in + optional = F [sfc_wts] standard_name = weights_for_stochastic_surface_physics_perturbation long_name = weights for stochastic surface physics perturbation @@ -298,6 +298,15 @@ kind = kind_phys intent = in optional = F +[p_lay] + standard_name = air_pressure_at_layer_for_RRTMGP_in_hPa + long_name = air pressure at vertical layer for radiation calculation + units = hPa + dimensions = (horizontal_loop_extent,vertical_dimension) + type = real + kind = kind_phys + intent = in + optional = F [tv_lay] standard_name = virtual_temperature long_name = layer virtual temperature @@ -316,15 +325,6 @@ kind = kind_phys intent = in optional = F -[p_lay] - standard_name = air_pressure_at_layer_for_RRTMGP_in_hPa - long_name = air pressure at vertical layer for radiation calculation - units = hPa - dimensions = (horizontal_loop_extent,vertical_dimension) - type = real - kind = kind_phys - intent = in - optional = F [p_lev] standard_name = air_pressure_at_interface_for_RRTMGP_in_hPa long_name = air pressure at vertical interface for radiation calculation @@ -334,6 +334,40 @@ kind = kind_phys intent = in optional = F +[nday] + standard_name = daytime_points_dimension + long_name = daytime points dimension + units = count + dimensions = () + type = integer + intent = out + optional = F +[idxday] + standard_name = daytime_points + long_name = daytime points + units = index + dimensions = (horizontal_loop_extent) + type = integer + intent = out + optional = F +[coszen] + standard_name = cosine_of_zenith_angle + long_name = mean cos of zenith angle over rad call period + units = none + dimensions = (horizontal_loop_extent) + type = real + kind = kind_phys + intent = inout + optional = F +[coszdg] + standard_name = daytime_mean_cosz_over_rad_call_period + long_name = daytime mean cosz over rad call period + units = none + dimensions = (horizontal_loop_extent) + type = real + kind = kind_phys + intent = inout + optional = F [sfc_alb_nir_dir] standard_name = surface_albedo_nearIR_direct long_name = near-IR (direct) surface albedo (sfc_alb_nir_dir) @@ -370,40 +404,6 @@ kind = kind_phys intent = out optional = F -[nday] - standard_name = daytime_points_dimension - long_name = daytime points dimension - units = count - dimensions = () - type = integer - intent = out - optional = F -[idxday] - standard_name = daytime_points - long_name = daytime points - units = index - dimensions = (horizontal_loop_extent) - type = integer - intent = out - optional = F -[coszen] - standard_name = cosine_of_zenith_angle - long_name = mean cos of zenith angle over rad call period - units = none - dimensions = (horizontal_loop_extent) - type = real - kind = kind_phys - intent = inout - optional = F -[coszdg] - standard_name = daytime_mean_cosz_over_rad_call_period - long_name = daytime mean cosz over rad call period - units = none - dimensions = (horizontal_loop_extent) - type = real - kind = kind_phys - intent = inout - optional = F [sfc_alb_dif] standard_name = surface_diffused_shortwave_albedo long_name = mean surface diffused sw albedo diff --git a/physics/GFS_rrtmgp_thompsonmp_pre.F90 b/physics/GFS_rrtmgp_thompsonmp_pre.F90 index b54f27d65..85877704f 100644 --- a/physics/GFS_rrtmgp_thompsonmp_pre.F90 +++ b/physics/GFS_rrtmgp_thompsonmp_pre.F90 @@ -5,7 +5,7 @@ module GFS_rrtmgp_thompsonmp_pre use machine, only: & kind_phys - use rrtmgp_aux, only: & + use radiation_tools, only: & check_error_msg use module_mp_thompson, only: & calc_effectRad, Nt_c, & @@ -40,9 +40,9 @@ end subroutine GFS_rrtmgp_thompsonmp_pre_init subroutine GFS_rrtmgp_thompsonmp_pre_run(nCol, nLev, nTracers, ncnd, doSWrad, doLWrad, & i_cldliq, i_cldice, i_cldrain, i_cldsnow, i_cldgrpl, i_cldtot, i_cldliq_nc, & i_cldice_nc, i_twa, effr_in, p_lev, p_lay, tv_lay, t_lay, effrin_cldliq, & - effrin_cldice, effrin_cldsnow, tracer, qs_lay, q_lay, relhum, cld_frac_mg, con_g, & - con_rd, con_eps, uni_cld, lmfshal, lmfdeep2, ltaerosol, do_mynnedmf, imfdeepcnv, & - imfdeepcnv_gf, doGP_cldoptics_PADE, doGP_cldoptics_LUT, & + effrin_cldice, effrin_cldsnow, tracer, qs_lay, q_lay, relhum, con_g, con_rd, & + con_eps, lmfshal, ltaerosol, do_mynnedmf, imfdeepcnv, imfdeepcnv_gf, & + doGP_cldoptics_PADE, doGP_cldoptics_LUT, & cld_frac, cld_lwp, cld_reliq, cld_iwp, cld_reice, cld_swp, cld_resnow, cld_rwp, & cld_rerain, precip_frac, errmsg, errflg) @@ -67,9 +67,7 @@ subroutine GFS_rrtmgp_thompsonmp_pre_run(nCol, nLev, nTracers, ncnd, doSWrad, do doSWrad, & ! Call SW radiation? doLWrad, & ! Call LW radiation effr_in, & ! Use cloud effective radii provided by model? - uni_cld, & ! Use provided cloud-fraction? lmfshal, & ! Flag for mass-flux shallow convection scheme used by Xu-Randall - lmfdeep2, & ! Flag for some scale-aware mass-flux convection scheme active ltaerosol, & ! Flag for aerosol option do_mynnedmf, & ! Flag to activate MYNN-EDMF doGP_cldoptics_LUT,& ! Flag to do GP cloud-optics (LUTs) @@ -79,21 +77,20 @@ subroutine GFS_rrtmgp_thompsonmp_pre_run(nCol, nLev, nTracers, ncnd, doSWrad, do con_rd, & ! Physical constant: gas-constant for dry air con_eps ! Physical constant: gas constant air / gas constant H2O - real(kind_phys), dimension(nCol,nLev), intent(in) :: & + real(kind_phys), dimension(:,:), intent(in) :: & tv_lay, & ! Virtual temperature (K) t_lay, & ! Temperature (K) qs_lay, & ! Saturation vapor pressure (Pa) q_lay, & ! water-vapor mixing ratio (kg/kg) relhum, & ! Relative humidity - p_lay, & ! Pressure at model-layers (Pa) - cld_frac_mg ! Cloud-fraction from MG scheme. WTF????? - real(kind_phys), dimension(nCol,nLev+1), intent(in) :: & + p_lay ! Pressure at model-layers (Pa) + real(kind_phys), dimension(:,:), intent(in) :: & p_lev ! Pressure at model-level interfaces (Pa) - real(kind_phys), dimension(nCol, nLev, nTracers),intent(in) :: & + real(kind_phys), dimension(:,:,:),intent(in) :: & tracer ! Cloud condensate amount in layer by type () ! In/Outs - real(kind_phys), dimension(nCol,nLev), intent(inout) :: & + real(kind_phys), dimension(:,:), intent(inout) :: & cld_frac, & ! Total cloud fraction cld_lwp, & ! Cloud liquid water path cld_reliq, & ! Cloud liquid effective radius @@ -161,9 +158,9 @@ subroutine GFS_rrtmgp_thompsonmp_pre_run(nCol, nLev, nTracers, ncnd, doSWrad, do qc_mp(iCol,iLay) = tracer(iCol,iLay,i_cldliq) / (1.-q_lay(iCol,iLay)) qi_mp(iCol,iLay) = tracer(iCol,iLay,i_cldice) / (1.-q_lay(iCol,iLay)) qs_mp(iCol,iLay) = tracer(iCol,iLay,i_cldsnow) / (1.-q_lay(iCol,iLay)) - nc_mp(iCol,iLay) = tracer(iCol,iLay,i_cldliq_nc) / (1.-q_lay(iCol,iLay)) ni_mp(iCol,iLay) = tracer(iCol,iLay,i_cldice_nc) / (1.-q_lay(iCol,iLay)) if (ltaerosol) then + nc_mp(iCol,iLay) = tracer(iCol,iLay,i_cldliq_nc) / (1.-q_lay(iCol,iLay)) nwfa(iCol,iLay) = tracer(iCol,iLay,i_twa) if (qc_mp(iCol,iLay) > 1.e-12 .and. nc_mp(iCol,iLay) < 100.) then nc_mp(iCol,iLay) = make_DropletNumber(qc_mp(iCol,iLay)*rho, nwfa(iCol,iLay)*rho) * orho @@ -187,48 +184,55 @@ subroutine GFS_rrtmgp_thompsonmp_pre_run(nCol, nLev, nTracers, ncnd, doSWrad, do re_cloud(iCol,iLay) = MAX(re_qc_min, MIN(re_cloud(iCol,iLay), re_qc_max)) re_ice(iCol,iLay) = MAX(re_qi_min, MIN(re_ice(iCol,iLay), re_qi_max)) re_snow(iCol,iLay) = MAX(re_qs_min, MIN(re_snow(iCol,iLay), re_qs_max)) - end do + enddo enddo ! Scale Thompson's effective radii from meter to micron - effrin_cldliq(1:nCol,1:nLev) = re_cloud(1:nCol,1:nLev)*1.e6 - effrin_cldice(1:nCol,1:nLev) = re_ice(1:nCol,1:nLev)*1.e6 - effrin_cldsnow(1:nCol,1:nLev) = re_snow(1:nCol,1:nLev)*1.e6 + do iLay = 1, nLev + do iCol = 1, nCol + effrin_cldliq(iCol,iLay) = re_cloud(iCol,iLay)*1.e6 + effrin_cldice(iCol,iLay) = re_ice(iCol,iLay)*1.e6 + effrin_cldsnow(iCol,iLay) = re_snow(iCol,iLay)*1.e6 + enddo + enddo ! Bound effective radii for RRTMGP, LUT's for cloud-optics go from ! 2.5 - 21.5 microns for liquid clouds, ! 10 - 180 microns for ice-clouds if (doGP_cldoptics_PADE .or. doGP_cldoptics_LUT) then - where(effrin_cldliq .lt. radliq_lwr) effrin_cldliq = radliq_lwr - where(effrin_cldliq .gt. radliq_upr) effrin_cldliq = radliq_upr - where(effrin_cldice .lt. radice_lwr) effrin_cldice = radice_lwr - where(effrin_cldice .gt. radice_upr) effrin_cldice = radice_upr + do iLay = 1, nLev + do iCol = 1, nCol + if (effrin_cldliq(iCol,iLay) .lt. radliq_lwr) effrin_cldliq(iCol,iLay) = radliq_lwr + if (effrin_cldliq(iCol,iLay) .gt. radliq_upr) effrin_cldliq(iCol,iLay) = radliq_upr + if (effrin_cldice(iCol,iLay) .lt. radice_lwr) effrin_cldice(iCol,iLay) = radice_lwr + if (effrin_cldice(iCol,iLay) .gt. radice_upr) effrin_cldice(iCol,iLay) = radice_upr + enddo + enddo endif ! Update global effective radii arrays. - cld_reliq(1:nCol,1:nLev) = effrin_cldliq(1:nCol,1:nLev) - cld_reice(1:nCol,1:nLev) = effrin_cldice(1:nCol,1:nLev) - cld_resnow(1:nCol,1:nLev) = effrin_cldsnow(1:nCol,1:nLev) - cld_rerain(1:nCol,1:nLev) = rerain_def - + do iLay = 1, nLev + do iCol = 1, nCol + cld_reliq(iCol,iLay) = effrin_cldliq(iCol,iLay) + cld_reice(iCol,iLay) = effrin_cldice(iCol,iLay) + cld_resnow(iCol,iLay) = effrin_cldsnow(iCol,iLay) + cld_rerain(iCol,iLay) = rerain_def + enddo + enddo ! Compute cloud-fraction. Else, use value provided - if(.not. do_mynnedmf .or. imfdeepcnv .ne. imfdeepcnv_gf ) then ! MYNN PBL or GF conv + if(.not. do_mynnedmf .and. imfdeepcnv .ne. imfdeepcnv_gf ) then ! MYNN PBL or GF conv ! Cloud-fraction - if (uni_cld) then - cld_frac(1:nCol,1:nLev) = cld_frac_mg(1:nCol,1:nLev) - else - if( lmfshal) alpha0 = 100. ! Default (from GATE simulations) - if(.not. lmfshal) alpha0 = 2000. - ! Xu-Randall (1996) cloud-fraction - do iLay = 1, nLev - do iCol = 1, nCol - cld_mr = cld_condensate(iCol,iLay,1) + cld_condensate(iCol,iLay,2) + & - cld_condensate(iCol,iLay,4) - cld_frac(iCol,iLay) = cld_frac_XuRandall(p_lay(iCol,iLay), & - qs_lay(iCol,iLay), relhum(iCol,iLay), cld_mr, alpha0) - enddo + if( lmfshal) alpha0 = 100. ! Default (from GATE simulations) + if(.not. lmfshal) alpha0 = 2000. + ! Xu-Randall (1996) cloud-fraction + do iLay = 1, nLev + do iCol = 1, nCol + cld_mr = cld_condensate(iCol,iLay,1) + cld_condensate(iCol,iLay,2) + & + cld_condensate(iCol,iLay,4) + cld_frac(iCol,iLay) = cld_frac_XuRandall(p_lay(iCol,iLay), & + qs_lay(iCol,iLay), relhum(iCol,iLay), cld_mr, alpha0) enddo - endif + enddo endif ! Precipitation fraction (Hack. For now use cloud-fraction) diff --git a/physics/GFS_rrtmgp_thompsonmp_pre.meta b/physics/GFS_rrtmgp_thompsonmp_pre.meta index 54d266b67..c17abde74 100644 --- a/physics/GFS_rrtmgp_thompsonmp_pre.meta +++ b/physics/GFS_rrtmgp_thompsonmp_pre.meta @@ -1,7 +1,7 @@ [ccpp-table-properties] name = GFS_rrtmgp_thompsonmp_pre type = scheme - dependencies = rrtmgp_aux.F90, module_mp_thompson_make_number_concentrations.F90, module_mp_thompson.F90, rrtmgp_lw_cloud_optics.F90 + dependencies = radiation_tools.F90, module_mp_thompson_make_number_concentrations.F90, module_mp_thompson.F90, rrtmgp_lw_cloud_optics.F90 ######################################################################## [ccpp-arg-table] @@ -55,46 +55,6 @@ type = logical intent = in optional = F -[effr_in] - standard_name = flag_for_cloud_effective_radii - long_name = flag for cloud effective radii calculations in GFDL microphysics - units = flag - dimensions = () - type = logical - intent = in - optional = F -[uni_cld] - standard_name = flag_for_uni_cld - long_name = flag for uni_cld - units = flag - dimensions = () - type = logical - intent = in - optional = F -[lmfshal] - standard_name = flag_for_lmfshal - long_name = flag for lmfshal - units = flag - dimensions = () - type = logical - intent = in - optional = F -[lmfdeep2] - standard_name = flag_for_scale_aware_mass_flux_convection - long_name = flag for some scale-aware mass-flux convection scheme active - units = flag - dimensions = () - type = logical - intent = in - optional = F -[ltaerosol] - standard_name = flag_for_aerosol_physics - long_name = flag for aerosol physics - units = flag - dimensions = () - type = logical - intent = in - optional = F [i_cldliq] standard_name = index_for_liquid_cloud_condensate long_name = tracer index for cloud condensate (or liquid water) @@ -167,87 +127,19 @@ type = integer intent = in optional = F -[effrin_cldliq] - standard_name = effective_radius_of_stratiform_cloud_liquid_water_particle_in_um - long_name = eff. radius of cloud liquid water particle in micrometer - units = um - dimensions = (horizontal_loop_extent,vertical_dimension) - type = real - kind = kind_phys - intent = inout - optional = F -[effrin_cldice] - standard_name = effective_radius_of_stratiform_cloud_ice_particle_in_um - long_name = eff. radius of cloud ice water particle in micrometer - units = um - dimensions = (horizontal_loop_extent,vertical_dimension) - type = real - kind = kind_phys - intent = inout - optional = F -[effrin_cldsnow] - standard_name = effective_radius_of_stratiform_cloud_snow_particle_in_um - long_name = effective radius of cloud snow particle in micrometers - units = um - dimensions = (horizontal_loop_extent,vertical_dimension) - type = real - kind = kind_phys - intent = inout - optional = F -[cld_frac_mg] - standard_name = cloud_fraction_for_MG - long_name = cloud fraction used by Morrison-Gettelman MP - units = frac - dimensions = (horizontal_loop_extent,vertical_dimension) - type = real - kind = kind_phys - intent = in - optional = F -[do_mynnedmf] - standard_name = do_mynnedmf - long_name = flag to activate MYNN-EDMF - units = flag - dimensions = () - type = logical - intent = in - optional = F -[imfdeepcnv] - standard_name = flag_for_mass_flux_deep_convection_scheme - long_name = flag for mass-flux deep convection scheme - units = flag - dimensions = () - type = integer - intent = in - optional = F -[imfdeepcnv_gf] - standard_name = flag_for_gf_deep_convection_scheme - long_name = flag for Grell-Freitas deep convection scheme - units = flag - dimensions = () - type = integer - intent = in - optional = F -[doGP_cldoptics_PADE] - standard_name = flag_to_calc_lw_cld_optics_using_RRTMGP_PADE - long_name = logical flag to control cloud optics scheme. - units = flag - dimensions = () - type = logical - intent = in - optional = F -[doGP_cldoptics_LUT] - standard_name = flag_to_calc_lw_cld_optics_using_RRTMGP_LUT - long_name = logical flag to control cloud optics scheme. +[effr_in] + standard_name = flag_for_cloud_effective_radii + long_name = flag for cloud effective radii calculations in GFDL microphysics units = flag dimensions = () - type = logical + type = logical intent = in - optional = F + optional = F [p_lev] standard_name = air_pressure_at_interface_for_RRTMGP_in_hPa long_name = air pressure at vertical interface for radiation calculation units = hPa - dimensions = (horizontal_loop_extent,vertical_dimension_plus_one) + dimensions = (horizontal_dimension,vertical_dimension_plus_one) type = real kind = kind_phys intent = in @@ -256,7 +148,7 @@ standard_name = air_pressure_at_layer_for_RRTMGP_in_hPa long_name = air pressure at vertical layer for radiation calculation units = hPa - dimensions = (horizontal_loop_extent,vertical_dimension) + dimensions = (horizontal_dimension,vertical_dimension) type = real kind = kind_phys intent = in @@ -265,7 +157,7 @@ standard_name = virtual_temperature long_name = layer virtual temperature units = K - dimensions = (horizontal_loop_extent,vertical_dimension) + dimensions = (horizontal_dimension,vertical_dimension) type = real kind = kind_phys intent = in @@ -279,6 +171,42 @@ kind = kind_phys intent = in optional = F +[effrin_cldliq] + standard_name = effective_radius_of_stratiform_cloud_liquid_water_particle_in_um + long_name = eff. radius of cloud liquid water particle in micrometer + units = um + dimensions = (horizontal_loop_extent,vertical_dimension) + type = real + kind = kind_phys + intent = inout + optional = F +[effrin_cldice] + standard_name = effective_radius_of_stratiform_cloud_ice_particle_in_um + long_name = eff. radius of cloud ice water particle in micrometer + units = um + dimensions = (horizontal_loop_extent,vertical_dimension) + type = real + kind = kind_phys + intent = inout + optional = F +[effrin_cldsnow] + standard_name = effective_radius_of_stratiform_cloud_snow_particle_in_um + long_name = effective radius of cloud snow particle in micrometers + units = um + dimensions = (horizontal_loop_extent,vertical_dimension) + type = real + kind = kind_phys + intent = inout + optional = F +[tracer] + standard_name = chemical_tracers + long_name = chemical tracers + units = g g-1 + dimensions = (horizontal_loop_extent,vertical_dimension,number_of_tracers) + type = real + kind = kind_phys + intent = in + optional = F [qs_lay] standard_name = saturation_vapor_pressure long_name = saturation vapor pressure @@ -296,7 +224,7 @@ type = real kind = kind_phys intent = in - optional = F + optional = F [relhum] standard_name = relative_humidity long_name = layer relative humidity @@ -306,15 +234,6 @@ kind = kind_phys intent = in optional = F -[tracer] - standard_name = chemical_tracers - long_name = chemical tracers - units = g g-1 - dimensions = (horizontal_loop_extent,vertical_dimension,number_of_tracers) - type = real - kind = kind_phys - intent = in - optional = F [con_g] standard_name = gravitational_acceleration long_name = gravitational acceleration @@ -341,6 +260,62 @@ type = real kind = kind_phys intent = in + optional = F +[lmfshal] + standard_name = flag_for_lmfshal + long_name = flag for lmfshal + units = flag + dimensions = () + type = logical + intent = in + optional = F +[ltaerosol] + standard_name = flag_for_aerosol_physics + long_name = flag for aerosol physics + units = flag + dimensions = () + type = logical + intent = in + optional = F +[do_mynnedmf] + standard_name = do_mynnedmf + long_name = flag to activate MYNN-EDMF + units = flag + dimensions = () + type = logical + intent = in + optional = F +[imfdeepcnv] + standard_name = flag_for_mass_flux_deep_convection_scheme + long_name = flag for mass-flux deep convection scheme + units = flag + dimensions = () + type = integer + intent = in + optional = F +[imfdeepcnv_gf] + standard_name = flag_for_gf_deep_convection_scheme + long_name = flag for Grell-Freitas deep convection scheme + units = flag + dimensions = () + type = integer + intent = in + optional = F +[doGP_cldoptics_PADE] + standard_name = flag_to_calc_lw_cld_optics_using_RRTMGP_PADE + long_name = logical flag to control cloud optics scheme. + units = flag + dimensions = () + type = logical + intent = in + optional = F +[doGP_cldoptics_LUT] + standard_name = flag_to_calc_lw_cld_optics_using_RRTMGP_LUT + long_name = logical flag to control cloud optics scheme. + units = flag + dimensions = () + type = logical + intent = in optional = F [cld_frac] standard_name = total_cloud_fraction @@ -448,4 +423,4 @@ dimensions = () type = integer intent = out - optional = F \ No newline at end of file + optional = F diff --git a/physics/GFS_rrtmgp_zhaocarr_pre.F90 b/physics/GFS_rrtmgp_zhaocarr_pre.F90 index 35b404b45..d7eecd090 100644 --- a/physics/GFS_rrtmgp_zhaocarr_pre.F90 +++ b/physics/GFS_rrtmgp_zhaocarr_pre.F90 @@ -4,7 +4,7 @@ ! ######################################################################################## module GFS_rrtmgp_zhaocarr_pre use machine, only: kind_phys - use rrtmgp_aux, only: check_error_msg + use radiation_tools, only: check_error_msg use funcphys, only: fpvs use module_radiation_clouds, only: get_alpha_dcorr @@ -32,9 +32,9 @@ subroutine GFS_rrtmgp_zhaocarr_pre_run(nCol, nLev, nCnd, nTracers, i_cldliq, lss lslwr, effr_in, uni_cld, lmfshal, lat, lsmask, p_lev, p_lay, t_lay, relhum, & tv_lay, effrin_cldliq, effrin_cldice, effrin_cldrain, effrin_cldsnow, & shoc_sgs_cldfrac, cncvw, tracer, & - con_eps, con_epsq, con_epsqs, con_epsm1, con_g, con_ttp, con_rd, con_pi, & + con_ttp, con_epsq, con_epsqs, con_eps, con_epsm1, con_g, con_rd, con_pi, & cld_frac, cld_lwp, cld_reliq, cld_iwp, cld_reice, cld_swp, cld_resnow, cld_rwp, & - cld_rerain, de_lgth, deltaZ, cloud_overlap_param, errmsg, errflg) + cld_rerain, deltaZ, de_lgth, cloud_overlap_param, errmsg, errflg) implicit none ! Inputs @@ -59,10 +59,10 @@ subroutine GFS_rrtmgp_zhaocarr_pre_run(nCol, nLev, nCnd, nTracers, i_cldliq, lss con_ttp, & ! Triple point temperature of water (K) con_rd, & ! Ideal gas constant for dry air (J/kg/K) con_pi ! Pi - real(kind_phys), dimension(nCol), intent(in) :: & + real(kind_phys), dimension(:), intent(in) :: & lsmask, & ! Land/Sea mask lat ! Latitude - real(kind_phys), dimension(nCol,nLev), intent(in) :: & + real(kind_phys), dimension(:, :), intent(in) :: & tv_lay, & ! Virtual temperature (K) p_lay, & ! Pressure at model-layers (Pa) t_lay, & ! Temperature at model-layers (K) @@ -73,15 +73,15 @@ subroutine GFS_rrtmgp_zhaocarr_pre_run(nCol, nLev, nCnd, nTracers, i_cldliq, lss effrin_cldsnow, & ! Effective radius for snow cloud-particles (microns) shoc_sgs_cldfrac, & ! Subgrid-scale cloud fraction from the SHOC scheme cncvw ! Convective cloud water mixing ratio (kg/kg) - real(kind_phys), dimension(nCol,nLev+1), intent(in) :: & + real(kind_phys), dimension(:, :), intent(in) :: & p_lev ! Pressure at model-level interfaces (Pa) - real(kind_phys), dimension(nCol, nLev, nTracers),intent(in) :: & + real(kind_phys), dimension(:, :, :),intent(in) :: & tracer ! Cloud condensate amount in layer by type () ! Outputs - real(kind_phys), dimension(nCol),intent(out) :: & + real(kind_phys), dimension(:),intent(out) :: & de_lgth ! Decorrelation length - real(kind_phys), dimension(nCol,nLev),intent(out) :: & + real(kind_phys), dimension(:, :),intent(out) :: & cld_frac, & ! Total cloud fraction cld_lwp, & ! Cloud liquid water path cld_reliq, & ! Cloud liquid effective radius diff --git a/physics/GFS_rrtmgp_zhaocarr_pre.meta b/physics/GFS_rrtmgp_zhaocarr_pre.meta index 0cc454d2e..4239a364a 100644 --- a/physics/GFS_rrtmgp_zhaocarr_pre.meta +++ b/physics/GFS_rrtmgp_zhaocarr_pre.meta @@ -1,7 +1,7 @@ [ccpp-table-properties] name = GFS_rrtmgp_zhaocarr_pre type = scheme - dependencies = rrtmgp_aux.F90 + dependencies = radiation_tools.F90 ######################################################################## [ccpp-arg-table] @@ -23,6 +23,14 @@ type = integer intent = in optional = F +[ncnd] + standard_name = number_of_cloud_condensate_types + long_name = number of cloud condensate types + units = count + dimensions = () + type = integer + intent = in + optional = F [nTracers] standard_name = number_of_tracers long_name = number of tracers @@ -31,14 +39,14 @@ type = integer intent = in optional = F -[ncnd] - standard_name = number_of_cloud_condensate_types - long_name = number of cloud condensate types - units = count +[i_cldliq] + standard_name = index_for_liquid_cloud_condensate + long_name = tracer index for cloud condensate (or liquid water) + units = index dimensions = () - type = integer + type = integer intent = in - optional = F + optional = F [lsswr] standard_name = flag_to_calc_sw long_name = logical flags for sw radiation calls @@ -79,14 +87,6 @@ type = logical intent = in optional = F -[i_cldliq] - standard_name = index_for_liquid_cloud_condensate - long_name = tracer index for cloud condensate (or liquid water) - units = index - dimensions = () - type = integer - intent = in - optional = F [lat] standard_name = latitude long_name = latitude @@ -95,6 +95,15 @@ type = real intent = in kind = kind_phys +[lsmask] + standard_name = sea_land_ice_mask_real + long_name = landmask: sea/land/ice=0/1/2 + units = flag + dimensions = (horizontal_loop_extent) + type = real + kind = kind_phys + intent = in + optional = F [p_lev] standard_name = air_pressure_at_interface_for_RRTMGP_in_hPa long_name = air pressure at vertical interface for radiation calculation @@ -113,15 +122,15 @@ kind = kind_phys intent = in optional = F -[tv_lay] - standard_name = virtual_temperature - long_name = layer virtual temperature +[t_lay] + standard_name = air_temperature_at_layer_for_RRTMGP + long_name = air temperature at vertical layer for radiation calculation units = K dimensions = (horizontal_loop_extent,vertical_dimension) type = real kind = kind_phys intent = in - optional = F + optional = F [relhum] standard_name = relative_humidity long_name = layer relative humidity @@ -131,15 +140,15 @@ kind = kind_phys intent = in optional = F -[t_lay] - standard_name = air_temperature_at_layer_for_RRTMGP - long_name = air temperature at vertical layer for radiation calculation +[tv_lay] + standard_name = virtual_temperature + long_name = layer virtual temperature units = K dimensions = (horizontal_loop_extent,vertical_dimension) type = real kind = kind_phys intent = in - optional = F + optional = F [effrin_cldliq] standard_name = effective_radius_of_stratiform_cloud_liquid_water_particle_in_um long_name = eff. radius of cloud liquid water particle in micrometer @@ -203,15 +212,6 @@ kind = kind_phys intent = in optional = F -[lsmask] - standard_name = sea_land_ice_mask_real - long_name = landmask: sea/land/ice=0/1/2 - units = flag - dimensions = (horizontal_loop_extent) - type = real - kind = kind_phys - intent = in - optional = F [con_ttp] standard_name = triple_point_temperature_of_water long_name = triple point temperature of water @@ -365,15 +365,6 @@ kind = kind_phys intent = out optional = F -[cloud_overlap_param] - standard_name = cloud_overlap_param - long_name = cloud overlap parameter - units = km - dimensions = (horizontal_loop_extent,vertical_dimension) - type = real - kind = kind_phys - intent = out - optional = F [deltaZ] standard_name = layer_thickness long_name = layer_thickness @@ -392,6 +383,15 @@ kind = kind_phys intent = out optional = F +[cloud_overlap_param] + standard_name = cloud_overlap_param + long_name = cloud overlap parameter + units = km + dimensions = (horizontal_loop_extent,vertical_dimension) + type = real + kind = kind_phys + intent = out + optional = F [errmsg] standard_name = ccpp_error_message long_name = error message for error handling in CCPP diff --git a/physics/GFS_stochastics.F90 b/physics/GFS_stochastics.F90 index b3dda08da..0f1124955 100644 --- a/physics/GFS_stochastics.F90 +++ b/physics/GFS_stochastics.F90 @@ -1,6 +1,8 @@ !> \file GFS_stochastics.f90 !! This file contains code previously in GFS_stochastics_driver. +!>\defgroup gfs_stoch GFS Stochastics Physics Module +!! This module module GFS_stochastics contains @@ -12,9 +14,6 @@ subroutine GFS_stochastics_finalize() end subroutine GFS_stochastics_finalize -!>\defgroup gfs_stoch GFS Stochastics Physics Module -!! This module -!> @{ !> \section arg_table_GFS_stochastics_run Argument Table !! \htmlinclude GFS_stochastics_run.html !! @@ -55,7 +54,7 @@ subroutine GFS_stochastics_run (im, km, kdt, delt, do_sppt, pert_mp, use_zmtnblc logical, intent(in) :: use_zmtnblck logical, intent(in) :: do_shum logical, intent(in) :: do_skeb - real(kind_phys), dimension(1:im), intent(in) :: zmtnblck + real(kind_phys), dimension(:), intent(in) :: zmtnblck ! sppt_wts only allocated if do_sppt == .true. real(kind_phys), dimension(:,:), intent(inout) :: sppt_wts ! skebu_wts, skebv_wts only allocated if do_skeb == .true. @@ -64,24 +63,24 @@ subroutine GFS_stochastics_run (im, km, kdt, delt, do_sppt, pert_mp, use_zmtnblc ! shum_wts only allocated if do_shum == .true. real(kind_phys), dimension(:,:), intent(in) :: shum_wts ! inverse/flipped weights are always allocated - real(kind_phys), dimension(1:im,1:km), intent(inout) :: sppt_wts_inv - real(kind_phys), dimension(1:im,1:km), intent(inout) :: skebu_wts_inv - real(kind_phys), dimension(1:im,1:km), intent(inout) :: skebv_wts_inv - real(kind_phys), dimension(1:im,1:km), intent(inout) :: shum_wts_inv - real(kind_phys), dimension(1:im,1:km), intent(in) :: diss_est - real(kind_phys), dimension(1:im,1:km), intent(in) :: ugrs - real(kind_phys), dimension(1:im,1:km), intent(in) :: vgrs - real(kind_phys), dimension(1:im,1:km), intent(in) :: tgrs - real(kind_phys), dimension(1:im,1:km), intent(in) :: qgrs_wv + real(kind_phys), dimension(:,:), intent(inout) :: sppt_wts_inv + real(kind_phys), dimension(:,:), intent(inout) :: skebu_wts_inv + real(kind_phys), dimension(:,:), intent(inout) :: skebv_wts_inv + real(kind_phys), dimension(:,:), intent(inout) :: shum_wts_inv + real(kind_phys), dimension(:,:), intent(in) :: diss_est + real(kind_phys), dimension(:,:), intent(in) :: ugrs + real(kind_phys), dimension(:,:), intent(in) :: vgrs + real(kind_phys), dimension(:,:), intent(in) :: tgrs + real(kind_phys), dimension(:,:), intent(in) :: qgrs_wv real(kind_phys), dimension(:,:), intent(in) :: qgrs_cw real(kind_phys), dimension(:,:), intent(in) :: qgrs_rw real(kind_phys), dimension(:,:), intent(in) :: qgrs_sw real(kind_phys), dimension(:,:), intent(in) :: qgrs_iw real(kind_phys), dimension(:,:), intent(in) :: qgrs_gl - real(kind_phys), dimension(1:im,1:km), intent(inout) :: gu0 - real(kind_phys), dimension(1:im,1:km), intent(inout) :: gv0 - real(kind_phys), dimension(1:im,1:km), intent(inout) :: gt0 - real(kind_phys), dimension(1:im,1:km), intent(inout) :: gq0_wv + real(kind_phys), dimension(:,:), intent(inout) :: gu0 + real(kind_phys), dimension(:,:), intent(inout) :: gv0 + real(kind_phys), dimension(:,:), intent(inout) :: gt0 + real(kind_phys), dimension(:,:), intent(inout) :: gq0_wv real(kind_phys), dimension(:,:), intent(inout) :: gq0_cw real(kind_phys), dimension(:,:), intent(inout) :: gq0_rw real(kind_phys), dimension(:,:), intent(inout) :: gq0_sw @@ -93,13 +92,13 @@ subroutine GFS_stochastics_run (im, km, kdt, delt, do_sppt, pert_mp, use_zmtnblc integer, intent(in) :: ntiw integer, intent(in) :: ntgl real(kind_phys), dimension(:,:), intent(inout) :: dtdtnp - real(kind_phys), dimension(1:im), intent(in) :: rain - real(kind_phys), dimension(1:im), intent(in) :: rainc - real(kind_phys), dimension(1:im), intent(inout) :: tprcp - real(kind_phys), dimension(1:im), intent(inout) :: totprcp - real(kind_phys), dimension(1:im), intent(inout) :: cnvprcp - real(kind_phys), dimension(1:im), intent(inout) :: totprcpb - real(kind_phys), dimension(1:im), intent(inout) :: cnvprcpb + real(kind_phys), dimension(:), intent(in) :: rain + real(kind_phys), dimension(:), intent(in) :: rainc + real(kind_phys), dimension(:), intent(inout) :: tprcp + real(kind_phys), dimension(:), intent(inout) :: totprcp + real(kind_phys), dimension(:), intent(inout) :: cnvprcp + real(kind_phys), dimension(:), intent(inout) :: totprcpb + real(kind_phys), dimension(:), intent(inout) :: cnvprcpb logical, intent(in) :: cplflx ! rain_cpl, snow_cpl only allocated if cplflx == .true. or cplchm == .true. real(kind_phys), dimension(:), intent(inout) :: rain_cpl @@ -107,9 +106,9 @@ subroutine GFS_stochastics_run (im, km, kdt, delt, do_sppt, pert_mp, use_zmtnblc ! drain_cpl, dsnow_cpl only allocated if cplflx == .true. or cplchm == .true. real(kind_phys), dimension(:), intent(in) :: drain_cpl real(kind_phys), dimension(:), intent(in) :: dsnow_cpl - real(kind_phys), dimension(1:km), intent(in) :: si - real(kind_phys), dimension(1:km), intent(inout) :: vfact_ca - real(kind_phys), dimension(1:im), intent(in) :: ca1 + real(kind_phys), dimension(:), intent(in) :: si + real(kind_phys), dimension(:), intent(inout) :: vfact_ca + real(kind_phys), dimension(:), intent(in) :: ca1 character(len=*), intent(out) :: errmsg integer, intent(out) :: errflg @@ -357,4 +356,3 @@ subroutine GFS_stochastics_run (im, km, kdt, delt, do_sppt, pert_mp, use_zmtnblc end subroutine GFS_stochastics_run end module GFS_stochastics -!> @} diff --git a/physics/GFS_stochastics.meta b/physics/GFS_stochastics.meta index 26dcfd47e..9ca532e72 100644 --- a/physics/GFS_stochastics.meta +++ b/physics/GFS_stochastics.meta @@ -40,46 +40,6 @@ kind = kind_phys intent = in optional = F -[ntcw] - standard_name = index_for_liquid_cloud_condensate - long_name = tracer index for cloud condensate (or liquid water) - units = index - dimensions = () - type = integer - intent = in - optional = F -[ntiw] - standard_name = index_for_ice_cloud_condensate - long_name = tracer index for ice water - units = index - dimensions = () - intent = in - optional = F - type = integer -[ntrw] - standard_name = index_for_rain_water - long_name = tracer index for rain water - units = index - dimensions = () - type = integer - intent = in - optional = F -[ntsw] - standard_name = index_for_snow_water - long_name = tracer index for snow water - units = index - dimensions = () - type = integer - intent = in - optional = F -[ntgl] - standard_name = index_for_graupel - long_name = tracer index for graupel - units = index - dimensions = () - type = integer - intent = in - optional = F [do_sppt] standard_name = flag_for_stochastic_physics_perturbations long_name = flag for stochastic physics perturbations @@ -307,18 +267,18 @@ kind = kind_phys intent = in optional = F -[qgrs_iw] - standard_name = ice_water_mixing_ratio - long_name = moist mixing ratio of cloud ice +[qgrs_sw] + standard_name = snow_water_mixing_ratio + long_name = moist mixing ratio of snow units = kg kg-1 dimensions = (horizontal_loop_extent,vertical_dimension) type = real kind = kind_phys intent = in optional = F -[qgrs_sw] - standard_name = snow_water_mixing_ratio - long_name = moist mixing ratio of snow +[qgrs_iw] + standard_name = ice_water_mixing_ratio + long_name = moist mixing ratio of cloud ice units = kg kg-1 dimensions = (horizontal_loop_extent,vertical_dimension) type = real @@ -370,6 +330,15 @@ kind = kind_phys intent = inout optional = F +[dtdtnp] + standard_name = tendency_of_air_temperature_to_withold_from_sppt + long_name = temp. change from physics that should not be perturbed by sppt + units = K s-1 + dimensions = (horizontal_loop_extent,vertical_dimension) + type = real + kind = kind_phys + intent = inout + optional = F [gq0_cw] standard_name = cloud_condensed_water_mixing_ratio_updated_by_physics long_name = cloud condensed water mixing ratio updated by physics @@ -388,18 +357,18 @@ kind = kind_phys intent = inout optional = F -[gq0_iw] - standard_name = ice_water_mixing_ratio_updated_by_physics - long_name = moist mixing ratio of cloud ice updated by physics +[gq0_sw] + standard_name = snow_water_mixing_ratio_updated_by_physics + long_name = moist mixing ratio of snow updated by physics units = kg kg-1 dimensions = (horizontal_loop_extent,vertical_dimension) type = real kind = kind_phys intent = inout optional = F -[gq0_sw] - standard_name = snow_water_mixing_ratio_updated_by_physics - long_name = moist mixing ratio of snow updated by physics +[gq0_iw] + standard_name = ice_water_mixing_ratio_updated_by_physics + long_name = moist mixing ratio of cloud ice updated by physics units = kg kg-1 dimensions = (horizontal_loop_extent,vertical_dimension) type = real @@ -415,15 +384,6 @@ kind = kind_phys intent = inout optional = F -[dtdtnp] - standard_name = tendency_of_air_temperature_to_withold_from_sppt - long_name = temp. change from physics that should not be perturbed by sppt - units = K s-1 - dimensions = (horizontal_loop_extent,vertical_dimension) - type = real - kind = kind_phys - intent = in - optional = F [rain] standard_name = lwe_thickness_of_precipitation_amount_on_dynamics_timestep long_name = total rain at this time step @@ -531,6 +491,46 @@ kind = kind_phys intent = in optional = F +[ntcw] + standard_name = index_for_liquid_cloud_condensate + long_name = tracer index for cloud condensate (or liquid water) + units = index + dimensions = () + type = integer + intent = in + optional = F +[ntrw] + standard_name = index_for_rain_water + long_name = tracer index for rain water + units = index + dimensions = () + type = integer + intent = in + optional = F +[ntsw] + standard_name = index_for_snow_water + long_name = tracer index for snow water + units = index + dimensions = () + type = integer + intent = in + optional = F +[ntiw] + standard_name = index_for_ice_cloud_condensate + long_name = tracer index for ice water + units = index + dimensions = () + intent = in + optional = F + type = integer +[ntgl] + standard_name = index_for_graupel + long_name = tracer index for graupel + units = index + dimensions = () + type = integer + intent = in + optional = F [errmsg] standard_name = ccpp_error_message long_name = error message for error handling in CCPP diff --git a/physics/GFS_suite_interstitial.F90 b/physics/GFS_suite_interstitial.F90 index 771c346b6..e68927cb1 100644 --- a/physics/GFS_suite_interstitial.F90 +++ b/physics/GFS_suite_interstitial.F90 @@ -59,9 +59,9 @@ subroutine GFS_suite_interstitial_phys_reset_run (Interstitial, Model, errmsg, e ! interface variables type(GFS_interstitial_type), intent(inout) :: Interstitial - type(GFS_control_type), intent(in) :: Model - character(len=*), intent(out) :: errmsg - integer, intent(out) :: errflg + type(GFS_control_type), intent(in ) :: Model + character(len=*), intent( out) :: errmsg + integer, intent( out) :: errflg errmsg = '' errflg = 0 @@ -94,19 +94,20 @@ subroutine GFS_suite_interstitial_1_run (im, levs, ntrac, dtf, dtp, slmsk, area, implicit none ! interface variables - integer, intent(in) :: im, levs, ntrac - real(kind=kind_phys), intent(in) :: dtf, dtp, dxmin, dxinv - real(kind=kind_phys), intent(in), dimension(im) :: slmsk, area, pgr - - integer, intent(out), dimension(im) :: islmsk - real(kind=kind_phys), intent(out), dimension(im) :: work1, work2, psurf - real(kind=kind_phys), intent(out), dimension(im,levs) :: dudt, dvdt, dtdt - real(kind=kind_phys), intent(out), dimension(im,levs,ntrac) :: dqdt - real(kind=kind_phys), parameter :: zero = 0.0_kind_phys, one = 1.0_kind_phys - character(len=*), intent(out) :: errmsg - integer, intent(out) :: errflg + integer, intent(in ) :: im, levs, ntrac + real(kind=kind_phys), intent(in ) :: dtf, dtp, dxmin, dxinv + real(kind=kind_phys), intent(in ), dimension(:) :: slmsk, area, pgr + + integer, intent(out), dimension(:) :: islmsk + real(kind=kind_phys), intent(out), dimension(:) :: work1, work2, psurf + real(kind=kind_phys), intent(out), dimension(:,:) :: dudt, dvdt, dtdt + real(kind=kind_phys), intent(out), dimension(:,:,:) :: dqdt + + character(len=*), intent(out) :: errmsg + integer, intent(out) :: errflg ! local variables + real(kind=kind_phys), parameter :: zero = 0.0_kind_phys, one = 1.0_kind_phys integer :: i, k, n ! Initialize CCPP error handling variables @@ -159,32 +160,33 @@ end subroutine GFS_suite_interstitial_2_finalize !> \section arg_table_GFS_suite_interstitial_2_run Argument Table !! \htmlinclude GFS_suite_interstitial_2_run.html !! - subroutine GFS_suite_interstitial_2_run (im, levs, lssav, ldiag3d, lsidea, cplflx, flag_cice, shal_cnv, old_monin, mstrat, & + subroutine GFS_suite_interstitial_2_run (im, levs, lssav, ldiag3d, lsidea, flag_cice, shal_cnv, old_monin, mstrat, & do_shoc, frac_grid, imfshalcnv, dtf, xcosz, adjsfcdsw, adjsfcdlw, cice, pgr, ulwsfc_cice, lwhd, htrsw, htrlw, xmu, ctei_rm, & work1, work2, prsi, tgrs, prsl, qgrs_water_vapor, qgrs_cloud_water, cp, hvap, prslk, suntim, adjsfculw, adjsfculw_lnd, & adjsfculw_ice, adjsfculw_wat, dlwsfc, ulwsfc, psmean, dtend, dtidx, index_of_process_longwave, index_of_process_shortwave, & index_of_process_pbl, index_of_process_dcnv, index_of_process_scnv, index_of_process_mp, index_of_temperature, & - ctei_rml, ctei_r, kinver, dry, icy, wet, frland, huge, use_LW_jacobian, errmsg, errflg) + ctei_rml, ctei_r, kinver, dry, icy, wet, frland, huge, use_LW_jacobian, htrlwu, errmsg, errflg) implicit none ! interface variables - integer, intent(in ) :: im, levs, imfshalcnv - logical, intent(in ) :: lssav, ldiag3d, lsidea, cplflx, shal_cnv - logical, intent(in ) :: old_monin, mstrat, do_shoc, frac_grid, use_LW_jacobian - real(kind=kind_phys), intent(in ) :: dtf, cp, hvap - - logical, intent(in ), dimension(im) :: flag_cice - real(kind=kind_phys), intent(in ), dimension(2) :: ctei_rm - real(kind=kind_phys), intent(in ), dimension(im) :: xcosz, adjsfcdsw, adjsfcdlw, pgr, xmu, ulwsfc_cice, work1, work2 - real(kind=kind_phys), intent(in ), dimension(im) :: cice - real(kind=kind_phys), intent(in ), dimension(im, levs) :: htrsw, htrlw, tgrs, prsl, qgrs_water_vapor, qgrs_cloud_water, prslk - real(kind=kind_phys), intent(in ), dimension(im, levs+1) :: prsi - real(kind=kind_phys), intent(in ), dimension(im, levs, 6) :: lwhd - integer, intent(inout), dimension(im) :: kinver - real(kind=kind_phys), intent(inout), dimension(im) :: suntim, dlwsfc, ulwsfc, psmean, ctei_rml, ctei_r - real(kind=kind_phys), intent(in ), dimension(im) :: adjsfculw_lnd, adjsfculw_ice, adjsfculw_wat - real(kind=kind_phys), intent(inout), dimension(im) :: adjsfculw + integer, intent(in ) :: im, levs, imfshalcnv + logical, intent(in ) :: lssav, ldiag3d, lsidea, shal_cnv + logical, intent(in ) :: old_monin, mstrat, do_shoc, frac_grid, use_LW_jacobian + real(kind=kind_phys), intent(in ) :: dtf, cp, hvap + + logical, intent(in ), dimension(:) :: flag_cice + real(kind=kind_phys), intent(in ), dimension(:) :: ctei_rm + real(kind=kind_phys), intent(in ), dimension(:) :: xcosz, adjsfcdsw, adjsfcdlw, pgr, xmu, work1, work2 + real(kind=kind_phys), intent(in ), dimension(:) :: ulwsfc_cice + real(kind=kind_phys), intent(in ), dimension(:) :: cice + real(kind=kind_phys), intent(in ), dimension(:,:) :: htrsw, htrlw, htrlwu, tgrs, prsl, qgrs_water_vapor, qgrs_cloud_water, prslk + real(kind=kind_phys), intent(in ), dimension(:,:) :: prsi + real(kind=kind_phys), intent(in ), dimension(:,:,:) :: lwhd + integer, intent(inout), dimension(:) :: kinver + real(kind=kind_phys), intent(inout), dimension(:) :: suntim, dlwsfc, ulwsfc, psmean, ctei_rml, ctei_r + real(kind=kind_phys), intent(in ), dimension(:) :: adjsfculw_lnd, adjsfculw_ice, adjsfculw_wat + real(kind=kind_phys), intent(inout), dimension(:) :: adjsfculw ! dtend is only allocated if ldiag3d is .true. real(kind=kind_phys), optional, intent(inout), dimension(:,:,:) :: dtend @@ -193,12 +195,12 @@ subroutine GFS_suite_interstitial_2_run (im, levs, lssav, ldiag3d, lsidea, cplfl index_of_process_pbl, index_of_process_dcnv, index_of_process_scnv, & index_of_process_mp, index_of_temperature - logical, intent(in ), dimension(im) :: dry, icy, wet - real(kind=kind_phys), intent(in ), dimension(im) :: frland - real(kind=kind_phys), intent(in ) :: huge + logical, intent(in ), dimension(:) :: dry, icy, wet + real(kind=kind_phys), intent(in ), dimension(:) :: frland + real(kind=kind_phys), intent(in ) :: huge - character(len=*), intent(out) :: errmsg - integer, intent(out) :: errflg + character(len=*), intent( out) :: errmsg + integer, intent( out) :: errflg ! local variables real(kind=kind_phys), parameter :: czmin = 0.0001_kind_phys ! cos(89.994) @@ -312,7 +314,11 @@ subroutine GFS_suite_interstitial_2_run (im, levs, lssav, ldiag3d, lsidea, cplfl else idtend = dtidx(index_of_temperature,index_of_process_longwave) if(idtend>=1) then - dtend(:,:,idtend) = dtend(:,:,idtend) + htrlw(:,:)*dtf + if (use_LW_jacobian) then + dtend(:,:,idtend) = dtend(:,:,idtend) + htrlwu(:,:)*dtf + else + dtend(:,:,idtend) = dtend(:,:,idtend) + htrlw(:,:)*dtf + endif endif idtend = dtidx(index_of_temperature,index_of_process_shortwave) @@ -403,16 +409,16 @@ subroutine GFS_suite_stateout_reset_run (im, levs, ntrac, & implicit none ! interface variables - integer, intent(in) :: im - integer, intent(in) :: levs - integer, intent(in) :: ntrac - real(kind=kind_phys), dimension(im,levs), intent(in) :: tgrs, ugrs, vgrs - real(kind=kind_phys), dimension(im,levs,ntrac), intent(in) :: qgrs - real(kind=kind_phys), dimension(im,levs), intent(out) :: gt0, gu0, gv0 - real(kind=kind_phys), dimension(im,levs,ntrac), intent(out) :: gq0 + integer, intent(in ) :: im + integer, intent(in ) :: levs + integer, intent(in ) :: ntrac + real(kind=kind_phys), intent(in ), dimension(:,:) :: tgrs, ugrs, vgrs + real(kind=kind_phys), intent(in ), dimension(:,:,:) :: qgrs + real(kind=kind_phys), intent(out), dimension(:,:) :: gt0, gu0, gv0 + real(kind=kind_phys), intent(out), dimension(:,:,:) :: gq0 - character(len=*), intent(out) :: errmsg - integer, intent(out) :: errflg + character(len=*), intent(out) :: errmsg + integer, intent(out) :: errflg ! Initialize CCPP error handling variables errmsg = '' @@ -451,22 +457,22 @@ subroutine GFS_suite_stateout_update_run (im, levs, ntrac, dtp, & implicit none ! Interface variables - integer, intent(in) :: im - integer, intent(in) :: levs - integer, intent(in) :: ntrac - integer, intent(in) :: imp_physics,imp_physics_fer_hires - integer, intent(in) :: ntiw, nqrimef - real(kind=kind_phys), intent(in) :: dtp, epsq - - real(kind=kind_phys), dimension(im,levs), intent(in) :: tgrs, ugrs, vgrs - real(kind=kind_phys), dimension(im,levs,ntrac), intent(in) :: qgrs - real(kind=kind_phys), dimension(im,levs), intent(in) :: dudt, dvdt, dtdt - real(kind=kind_phys), dimension(im,levs,ntrac), intent(in) :: dqdt - real(kind=kind_phys), dimension(im,levs), intent(out) :: gt0, gu0, gv0 - real(kind=kind_phys), dimension(im,levs,ntrac), intent(out) :: gq0 - - character(len=*), intent(out) :: errmsg - integer, intent(out) :: errflg + integer, intent(in ) :: im + integer, intent(in ) :: levs + integer, intent(in ) :: ntrac + integer, intent(in ) :: imp_physics,imp_physics_fer_hires + integer, intent(in ) :: ntiw, nqrimef + real(kind=kind_phys), intent(in ) :: dtp, epsq + + real(kind=kind_phys), intent(in ), dimension(:,:) :: tgrs, ugrs, vgrs + real(kind=kind_phys), intent(in ), dimension(:,:,:) :: qgrs + real(kind=kind_phys), intent(in ), dimension(:,:) :: dudt, dvdt, dtdt + real(kind=kind_phys), intent(in ), dimension(:,:,:) :: dqdt + real(kind=kind_phys), intent(out), dimension(:,:) :: gt0, gu0, gv0 + real(kind=kind_phys), intent(out), dimension(:,:,:) :: gq0 + + character(len=*), intent(out) :: errmsg + integer, intent(out) :: errflg integer :: i, k ! Initialize CCPP error handling variables @@ -524,28 +530,28 @@ subroutine GFS_suite_interstitial_3_run (im, levs, nn, cscnv, & implicit none ! interface variables - integer, intent(in) :: im, levs, nn, ntrac, ntcw, ntiw, ntclamt, ntrw, & - ntsw, ntrnc, ntsnc, ntgl, ntgnc, imp_physics, imp_physics_mg, imp_physics_zhao_carr, imp_physics_zhao_carr_pdf, & + integer, intent(in ) :: im, levs, nn, ntrac, ntcw, ntiw, ntclamt, ntrw, ntsw,& + ntrnc, ntsnc, ntgl, ntgnc, imp_physics, imp_physics_mg, imp_physics_zhao_carr, imp_physics_zhao_carr_pdf, & imp_physics_gfdl, imp_physics_thompson, imp_physics_wsm6,imp_physics_fer_hires, me - integer, dimension(im), intent(in) :: islmsk, kpbl, kinver - logical, intent(in) :: cscnv, satmedmf, trans_trac, do_shoc, ltaerosol, ras - - real(kind=kind_phys), intent(in) :: rhcbot, rhcmax, rhcpbl, rhctop - real(kind=kind_phys), dimension(im), intent(in) :: work1, work2 - real(kind=kind_phys), dimension(im, levs), intent(in) :: prsl, prslk - real(kind=kind_phys), dimension(im, levs+1), intent(in) :: prsi - real(kind=kind_phys), dimension(im), intent(in) :: xlon, xlat - real(kind=kind_phys), dimension(im, levs), intent(in) :: gt0 - real(kind=kind_phys), dimension(im, levs, ntrac), intent(in) :: gq0 - - real(kind=kind_phys), dimension(im, levs), intent(inout) :: rhc, save_qc + integer, intent(in ), dimension(:) :: islmsk, kpbl, kinver + logical, intent(in ) :: cscnv, satmedmf, trans_trac, do_shoc, ltaerosol, ras + + real(kind=kind_phys), intent(in ) :: rhcbot, rhcmax, rhcpbl, rhctop + real(kind=kind_phys), intent(in ), dimension(:) :: work1, work2 + real(kind=kind_phys), intent(in ), dimension(:,:) :: prsl, prslk + real(kind=kind_phys), intent(in ), dimension(:,:) :: prsi + real(kind=kind_phys), intent(in ), dimension(:) :: xlon, xlat + real(kind=kind_phys), intent(in ), dimension(:,:) :: gt0 + real(kind=kind_phys), intent(in ), dimension(:,:,:) :: gq0 + + real(kind=kind_phys), intent(inout), dimension(:,:) :: rhc, save_qc ! save_qi is not allocated for Zhao-Carr MP - real(kind=kind_phys), dimension(:, :), intent(inout) :: save_qi - real(kind=kind_phys), dimension(:, :), intent(inout) :: save_tcp - real(kind=kind_phys), dimension(im, levs, nn), intent(inout) :: clw + real(kind=kind_phys), intent(inout), dimension(:,:) :: save_qi + real(kind=kind_phys), intent(inout), dimension(:,:) :: save_tcp + real(kind=kind_phys), intent(inout), dimension(:,:,:) :: clw - character(len=*), intent(out) :: errmsg - integer, intent(out) :: errflg + character(len=*), intent( out) :: errmsg + integer, intent( out) :: errflg ! local variables integer :: i,k,n,tracers,kk @@ -691,39 +697,38 @@ subroutine GFS_suite_interstitial_4_run (im, levs, ltaerosol, cplchm, tracers_to ! interface variables - integer, intent(in) :: im, levs, tracers_total, ntrac, ntcw, ntiw, ntclamt, ntrw, & + integer, intent(in ) :: im, levs, tracers_total, ntrac, ntcw, ntiw, ntclamt, ntrw, & ntsw, ntrnc, ntsnc, ntgl, ntgnc, ntlnc, ntinc, nn, imp_physics, imp_physics_gfdl, imp_physics_thompson, & imp_physics_zhao_carr, imp_physics_zhao_carr_pdf - logical, intent(in) :: ltaerosol, cplchm, convert_dry_rho + logical, intent(in ) :: ltaerosol, cplchm, convert_dry_rho - real(kind=kind_phys), intent(in) :: con_pi, dtf - real(kind=kind_phys), dimension(im,levs), intent(in) :: save_qc + real(kind=kind_phys), intent(in ) :: con_pi, dtf + real(kind=kind_phys), intent(in ), dimension(:,:) :: save_qc ! save_qi is not allocated for Zhao-Carr MP - real(kind=kind_phys), dimension(:, :), intent(in) :: save_qi + real(kind=kind_phys), intent(in ), dimension(:,:) :: save_qi ! dtend and dtidx are only allocated if ldiag3d - logical, intent(in) :: ldiag3d - real(kind=kind_phys), dimension(:,:,:), intent(inout) :: dtend - integer, dimension(:,:), intent(in) :: dtidx - integer, intent(in) :: index_of_process_conv_trans,ntk,ntke - - real(kind=kind_phys), dimension(im,levs,ntrac), intent(inout) :: gq0 - real(kind=kind_phys), dimension(im,levs,nn), intent(inout) :: clw - real(kind=kind_phys), dimension(im,levs), intent(in) :: prsl - real(kind=kind_phys), intent(in) :: con_rd, con_eps - real(kind=kind_phys), dimension(:,:), intent(in) :: nwfa, save_tcp - real(kind=kind_phys), dimension(im,levs), intent(in) :: spechum + logical, intent(in) :: ldiag3d + real(kind=kind_phys), dimension(:,:,:), intent(inout) :: dtend + integer, dimension(:,:), intent(in) :: dtidx + integer, intent(in) :: index_of_process_conv_trans,ntk,ntke + + real(kind=kind_phys), dimension(:,:,:), intent(inout) :: gq0 + real(kind=kind_phys), dimension(:,:,:), intent(inout) :: clw + real(kind=kind_phys), dimension(:,:), intent(in) :: prsl + real(kind=kind_phys), intent(in) :: con_rd, con_eps + real(kind=kind_phys), dimension(:,:), intent(in) :: nwfa, save_tcp + real(kind=kind_phys), dimension(:,:), intent(in) :: spechum ! dqdti may not be allocated - real(kind=kind_phys), dimension(:,:), intent(inout) :: dqdti + real(kind=kind_phys), intent(inout), dimension(:,:) :: dqdti - real(kind=kind_phys), parameter :: zero = 0.0_kind_phys, one = 1.0_kind_phys - - character(len=*), intent(out) :: errmsg - integer, intent(out) :: errflg + character(len=*), intent( out) :: errmsg + integer, intent( out) :: errflg ! local variables + real(kind=kind_phys), parameter :: zero = 0.0_kind_phys, one = 1.0_kind_phys integer :: i,k,n,tracers,idtend real(kind=kind_phys) :: rho, orho @@ -896,14 +901,14 @@ subroutine GFS_suite_interstitial_5_run (im, levs, ntrac, ntcw, ntiw, nn, gq0, c implicit none ! interface variables - integer, intent(in) :: im, levs, ntrac, ntcw, ntiw, nn + integer, intent(in ) :: im, levs, ntrac, ntcw, ntiw, nn - real(kind=kind_phys), dimension(im, levs, ntrac), intent(in) :: gq0 + real(kind=kind_phys), intent(in ), dimension(:,:,:) :: gq0 - real(kind=kind_phys), dimension(im, levs, nn), intent(out) :: clw + real(kind=kind_phys), intent(out), dimension(:,:,:) :: clw - character(len=*), intent(out) :: errmsg - integer, intent(out) :: errflg + character(len=*), intent(out) :: errmsg + integer, intent(out) :: errflg ! local variables integer :: i,k diff --git a/physics/GFS_suite_interstitial.meta b/physics/GFS_suite_interstitial.meta index cf8629a8b..203a5fbee 100644 --- a/physics/GFS_suite_interstitial.meta +++ b/physics/GFS_suite_interstitial.meta @@ -321,14 +321,6 @@ type = logical intent = in optional = F -[cplflx] - standard_name = flag_for_flux_coupling - long_name = flag controlling cplflx collection (default off) - units = flag - dimensions = () - type = logical - intent = in - optional = F [flag_cice] standard_name = flag_for_cice long_name = flag for cice @@ -600,6 +592,15 @@ type = logical intent = in optional = F +[htrlwu] + standard_name = updated_tendency_of_air_temperature_due_to_longwave_heating_on_physics_time_step + long_name = total sky longwave heating rate on physics time step + units = K s-1 + dimensions = (horizontal_loop_extent,vertical_dimension) + type = real + kind = kind_phys + intent = in + optional = F [adjsfculw] standard_name = surface_upwelling_longwave_flux long_name = surface upwelling longwave flux at current time @@ -628,8 +629,8 @@ intent = in optional = F [adjsfculw_wat] - standard_name = surface_upwelling_longwave_flux_over_ocean_interstitial - long_name = surface upwelling longwave flux at current time over ocean (temporary use as interstitial) + standard_name = surface_upwelling_longwave_flux_over_water_interstitial + long_name = surface upwelling longwave flux at current time over water (temporary use as interstitial) units = W m-2 dimensions = (horizontal_loop_extent) type = real diff --git a/physics/GFS_surface_composites.F90 b/physics/GFS_surface_composites.F90 index d0f1829df..c06c7100e 100644 --- a/physics/GFS_surface_composites.F90 +++ b/physics/GFS_surface_composites.F90 @@ -13,6 +13,8 @@ module GFS_surface_composites_pre real(kind=kind_phys), parameter :: zero = 0.0_kind_phys, one = 1.0_kind_phys, epsln = 1.0e-10_kind_phys + real(kind=kind_phys), parameter :: huge = 9.9692099683868690E36 ! NetCDF float FillValue + contains subroutine GFS_surface_composites_pre_init () @@ -25,40 +27,41 @@ end subroutine GFS_surface_composites_pre_finalize !! \htmlinclude GFS_surface_composites_pre_run.html !! subroutine GFS_surface_composites_pre_run (im, lkm, frac_grid, flag_cice, cplflx, cplwav2atm, & - landfrac, lakefrac, lakedepth, oceanfrac, frland, & - dry, icy, lake, ocean, wet, hice, cice, zorl, zorlo, zorll, zorli, zorl_wat, & - zorl_lnd, zorl_ice, snowd, snowd_wat, snowd_lnd, snowd_ice, tprcp, tprcp_wat, & + landfrac, lakefrac, lakedepth, oceanfrac, frland, dry, icy, use_flake, ocean, wet, & + hice, cice, snowd, snowd_wat, snowd_lnd, snowd_ice, tprcp, tprcp_wat, & tprcp_lnd, tprcp_ice, uustar, uustar_wat, uustar_lnd, uustar_ice, & weasd, weasd_wat, weasd_lnd, weasd_ice, ep1d_ice, tsfc, tsfco, tsfcl, tsfc_wat, & tsfc_lnd, tsfc_ice, tisfc, tice, tsurf, tsurf_wat, tsurf_lnd, tsurf_ice, & gflx_ice, tgice, islmsk, islmsk_cice, slmsk, semis_rad, semis_wat, semis_lnd, semis_ice, & qss, qss_wat, qss_lnd, qss_ice, hflx, hflx_wat, hflx_lnd, hflx_ice, & - min_lakeice, min_seaice, errmsg, errflg) + min_lakeice, min_seaice, zorlo, zorll, zorli, errmsg, errflg) implicit none ! Interface variables integer, intent(in ) :: im, lkm logical, intent(in ) :: frac_grid, cplflx, cplwav2atm - logical, dimension(im), intent(inout) :: flag_cice - logical, dimension(im), intent(inout) :: dry, icy, lake, ocean, wet - real(kind=kind_phys), dimension(im), intent(in ) :: landfrac, lakefrac, lakedepth, oceanfrac - real(kind=kind_phys), dimension(im), intent(inout) :: cice, hice - real(kind=kind_phys), dimension(im), intent( out) :: frland - real(kind=kind_phys), dimension(im), intent(in ) :: zorl, snowd, tprcp, uustar, weasd, qss, hflx - - real(kind=kind_phys), dimension(im), intent(inout) :: zorlo, zorll, zorli, tsfc, tsfco, tsfcl, tisfc, tsurf - real(kind=kind_phys), dimension(im), intent(inout) :: snowd_wat, snowd_lnd, snowd_ice, tprcp_wat, & - tprcp_lnd, tprcp_ice, zorl_wat, zorl_lnd, zorl_ice, tsfc_wat, tsfc_lnd, tsfc_ice, tsurf_wat, & - tsurf_lnd, tsurf_ice, uustar_wat, uustar_lnd, uustar_ice, weasd_wat, weasd_lnd, weasd_ice, & - qss_wat, qss_lnd, qss_ice, hflx_wat, hflx_lnd, hflx_ice, ep1d_ice, gflx_ice - real(kind=kind_phys), dimension(im), intent( out) :: tice + logical, dimension(:), intent(inout) :: flag_cice + logical, dimension(:), intent(inout) :: dry, icy, use_flake, ocean, wet + real(kind=kind_phys), dimension(:), intent(in ) :: landfrac, lakefrac, lakedepth, oceanfrac + real(kind=kind_phys), dimension(:), intent(inout) :: cice, hice + real(kind=kind_phys), dimension(:), intent( out) :: frland + real(kind=kind_phys), dimension(:), intent(in ) :: snowd, tprcp, uustar, weasd, qss, hflx + + real(kind=kind_phys), dimension(:), intent(inout) :: tsfc, tsfco, tsfcl, tisfc, tsurf + real(kind=kind_phys), dimension(:), intent(inout) :: snowd_wat, snowd_lnd, snowd_ice, tprcp_wat, & + tprcp_lnd, tprcp_ice, tsfc_wat, tsfc_lnd, tsfc_ice, tsurf_wat,tsurf_lnd, tsurf_ice, & + uustar_wat, uustar_lnd, uustar_ice, weasd_wat, weasd_lnd, weasd_ice, & + qss_wat, qss_lnd, qss_ice, hflx_wat, hflx_lnd, hflx_ice, ep1d_ice, gflx_ice + real(kind=kind_phys), dimension(:), intent( out) :: tice real(kind=kind_phys), intent(in ) :: tgice - integer, dimension(im), intent(inout) :: islmsk, islmsk_cice - real(kind=kind_phys), dimension(im), intent(in ) :: semis_rad - real(kind=kind_phys), dimension(im), intent(inout) :: semis_wat, semis_lnd, semis_ice, slmsk + integer, dimension(:), intent(inout) :: islmsk, islmsk_cice + real(kind=kind_phys), dimension(:), intent(in ) :: semis_rad + real(kind=kind_phys), dimension(:), intent(inout) :: semis_wat, semis_lnd, semis_ice, slmsk real(kind=kind_phys), intent(in ) :: min_lakeice, min_seaice - + ! + real(kind=kind_phys), dimension(:), intent(inout) :: zorlo, zorll, zorli + ! real(kind=kind_phys), parameter :: timin = 173.0_kind_phys ! minimum temperature allowed for snow/ice ! CCPP error handling @@ -169,26 +172,12 @@ subroutine GFS_surface_composites_pre_run (im, lkm, frac_grid, flag_cice, cplflx enddo endif -! if (.not. cplflx .or. .not. frac_grid) then -! if (cplwav2atm) then -! do i=1,im -! zorll(i) = zorl(i) -! enddo -! else -! do i=1,im -! zorll(i) = zorl(i) -! zorlo(i) = zorl(i) -! enddo -! endif -! endif - do i=1,im tprcp_wat(i) = tprcp(i) tprcp_lnd(i) = tprcp(i) tprcp_ice(i) = tprcp(i) if (wet(i)) then ! Water uustar_wat(i) = uustar(i) - zorl_wat(i) = zorlo(i) tsfc_wat(i) = tsfco(i) tsurf_wat(i) = tsfco(i) ! weasd_wat(i) = weasd(i) @@ -198,22 +187,28 @@ subroutine GFS_surface_composites_pre_run (im, lkm, frac_grid, flag_cice, cplflx semis_wat(i) = 0.984_kind_phys qss_wat(i) = qss(i) hflx_wat(i) = hflx(i) + ! DH* + else + zorlo(i) = huge + ! *DH endif if (dry(i)) then ! Land uustar_lnd(i) = uustar(i) weasd_lnd(i) = weasd(i) - zorl_lnd(i) = zorll(i) tsfc_lnd(i) = tsfcl(i) tsurf_lnd(i) = tsfcl(i) snowd_lnd(i) = snowd(i) semis_lnd(i) = semis_rad(i) qss_lnd(i) = qss(i) hflx_lnd(i) = hflx(i) + ! DH* + else + zorll(i) = huge + ! *DH end if if (icy(i)) then ! Ice uustar_ice(i) = uustar(i) weasd_ice(i) = weasd(i) - zorl_ice(i) = zorli(i) tsfc_ice(i) = tisfc(i) tsurf_ice(i) = tisfc(i) snowd_ice(i) = snowd(i) @@ -222,20 +217,24 @@ subroutine GFS_surface_composites_pre_run (im, lkm, frac_grid, flag_cice, cplflx semis_ice(i) = 0.95_kind_phys qss_ice(i) = qss(i) hflx_ice(i) = hflx(i) - endif + ! DH* + else + zorli(i) = huge + ! *DH + end if if (nint(slmsk(i)) /= 1) slmsk(i) = islmsk(i) enddo ! to prepare to separate lake from ocean under water category do i = 1, im - if(lkm == 1) then + if(wet(i) .and. lkm == 1) then if(lakefrac(i) >= 0.15 .and. lakedepth(i) > one) then - lake(i) = .true. + use_flake(i) = .true. else - lake(i) = .false. + use_flake(i) = .false. endif else - lake(i) = .false. + use_flake(i) = .false. endif enddo @@ -277,12 +276,12 @@ subroutine GFS_surface_composites_inter_run (im, dry, icy, wet, semis_wat, semis implicit none ! Interface variables - integer, intent(in ) :: im - logical, dimension(im), intent(in ) :: dry, icy, wet - real(kind=kind_phys), dimension(im), intent(in ) :: semis_wat, semis_lnd, semis_ice, adjsfcdlw, & - adjsfcdsw, adjsfcnsw - real(kind=kind_phys), dimension(im), intent(inout) :: gabsbdlw_lnd, gabsbdlw_ice, gabsbdlw_wat - real(kind=kind_phys), dimension(im), intent(out) :: adjsfcusw + integer, intent(in ) :: im + logical, dimension(:), intent(in ) :: dry, icy, wet + real(kind=kind_phys), dimension(:), intent(in ) :: semis_wat, semis_lnd, semis_ice, adjsfcdlw, & + adjsfcdsw, adjsfcnsw + real(kind=kind_phys), dimension(:), intent(inout) :: gabsbdlw_lnd, gabsbdlw_ice, gabsbdlw_wat + real(kind=kind_phys), dimension(:), intent(out) :: adjsfcusw ! CCPP error handling character(len=*), intent(out) :: errmsg @@ -345,14 +344,12 @@ end subroutine GFS_surface_composites_post_init subroutine GFS_surface_composites_post_finalize() end subroutine GFS_surface_composites_post_finalize -#if 0 !> \section arg_table_GFS_surface_composites_post_run Argument Table !! \htmlinclude GFS_surface_composites_post_run.html !! -#endif subroutine GFS_surface_composites_post_run ( & im, kice, km, cplflx, cplwav2atm, frac_grid, flag_cice, islmsk, dry, wet, icy, landfrac, lakefrac, oceanfrac, & - zorl, zorlo, zorll, zorli, zorl_wat, zorl_lnd, zorl_ice, & + zorl, zorlo, zorll, zorli, & cd, cd_wat, cd_lnd, cd_ice, cdq, cdq_wat, cdq_lnd, cdq_ice, rb, rb_wat, rb_lnd, rb_ice, stress, stress_wat, stress_lnd, & stress_ice, ffmm, ffmm_wat, ffmm_lnd, ffmm_ice, ffhh, ffhh_wat, ffhh_lnd, ffhh_ice, uustar, uustar_wat, uustar_lnd, & uustar_ice, fm10, fm10_wat, fm10_lnd, fm10_ice, fh2, fh2_wat, fh2_lnd, fh2_ice, tsurf, tsurf_wat, tsurf_lnd, tsurf_ice, & @@ -365,25 +362,25 @@ subroutine GFS_surface_composites_post_run ( integer, intent(in) :: im, kice, km logical, intent(in) :: cplflx, frac_grid, cplwav2atm - logical, dimension(im), intent(in) :: flag_cice, dry, wet, icy - integer, dimension(im), intent(in) :: islmsk - real(kind=kind_phys), dimension(im), intent(in) :: landfrac, lakefrac, oceanfrac, & - zorl_wat, zorl_lnd, zorl_ice, cd_wat, cd_lnd, cd_ice, cdq_wat, cdq_lnd, cdq_ice, rb_wat, rb_lnd, rb_ice, stress_wat, & + logical, dimension(:), intent(in) :: flag_cice, dry, wet, icy + integer, dimension(:), intent(in) :: islmsk + real(kind=kind_phys), dimension(:), intent(in) :: landfrac, lakefrac, oceanfrac, & + cd_wat, cd_lnd, cd_ice, cdq_wat, cdq_lnd, cdq_ice, rb_wat, rb_lnd, rb_ice, stress_wat, & stress_lnd, stress_ice, ffmm_wat, ffmm_lnd, ffmm_ice, ffhh_wat, ffhh_lnd, ffhh_ice, uustar_wat, uustar_lnd, uustar_ice, & fm10_wat, fm10_lnd, fm10_ice, fh2_wat, fh2_lnd, fh2_ice, tsurf_wat, tsurf_lnd, tsurf_ice, cmm_wat, cmm_lnd, cmm_ice, & chh_wat, chh_lnd, chh_ice, gflx_wat, gflx_lnd, gflx_ice, ep1d_wat, ep1d_lnd, ep1d_ice, weasd_wat, weasd_lnd, weasd_ice, & snowd_wat, snowd_lnd, snowd_ice,tprcp_wat, tprcp_lnd, tprcp_ice, evap_wat, evap_lnd, evap_ice, hflx_wat, hflx_lnd, & hflx_ice, qss_wat, qss_lnd, qss_ice, tsfc_wat, tsfc_lnd, tsfc_ice - real(kind=kind_phys), dimension(im), intent(inout) :: zorl, zorlo, zorll, zorli, cd, cdq, rb, stress, ffmm, ffhh, uustar, fm10, & + real(kind=kind_phys), dimension(:), intent(inout) :: zorl, zorlo, zorll, zorli, cd, cdq, rb, stress, ffmm, ffhh, uustar, fm10, & fh2, tsurf, cmm, chh, gflx, ep1d, weasd, snowd, tprcp, evap, hflx, qss, tsfc, tsfco, tsfcl, tisfc - real(kind=kind_phys), dimension(im), intent(in ) :: tice ! interstitial sea ice temperature - real(kind=kind_phys), dimension(im), intent(inout) :: hice, cice + real(kind=kind_phys), dimension(:), intent(in ) :: tice ! interstitial sea ice temperature + real(kind=kind_phys), dimension(:), intent(inout) :: hice, cice real(kind=kind_phys), intent(in ) :: min_seaice - real(kind=kind_phys), dimension(im, kice), intent(in ) :: tiice - real(kind=kind_phys), dimension(im, km), intent(inout) :: stc + real(kind=kind_phys), dimension(:,:), intent(in ) :: tiice + real(kind=kind_phys), dimension(:,:), intent(inout) :: stc character(len=*), intent(out) :: errmsg integer, intent(out) :: errflg @@ -408,7 +405,7 @@ subroutine GFS_surface_composites_post_run ( txi = cice(i) * wfrac ! txi = ice fraction wrt whole cell txo = max(zero, wfrac-txi) ! txo = open water fraction - zorl(i) = txl*zorl_lnd(i) + txi*zorl_ice(i) + txo*zorl_wat(i) + zorl(i) = txl*zorll(i) + txi*zorli(i) + txo*zorlo(i) cd(i) = txl*cd_lnd(i) + txi*cd_ice(i) + txo*cd_wat(i) cdq(i) = txl*cdq_lnd(i) + txi*cdq_ice(i) + txo*cdq_wat(i) rb(i) = txl*rb_lnd(i) + txi*rb_ice(i) + txo*rb_wat(i) @@ -443,10 +440,6 @@ subroutine GFS_surface_composites_post_run ( endif tsfc(i) = txl*tsfc_lnd(i) + txi*tice(i) + txo*tsfc_wat(i) - zorll(i) = zorl_lnd(i) - zorli(i) = zorl_ice(i) - zorlo(i) = zorl_wat(i) - if (dry(i)) then tsfcl(i) = tsfc_lnd(i) ! over land elseif (wet(i)) then @@ -496,7 +489,7 @@ subroutine GFS_surface_composites_post_run ( do i=1,im if (islmsk(i) == 1) then - zorl(i) = zorl_lnd(i) + zorl(i) = zorll(i) cd(i) = cd_lnd(i) cdq(i) = cdq_lnd(i) rb(i) = rb_lnd(i) @@ -524,7 +517,7 @@ subroutine GFS_surface_composites_post_run ( hice(i) = zero cice(i) = zero elseif (islmsk(i) == 0) then - zorl(i) = zorl_wat(i) + zorl(i) = zorlo(i) cd(i) = cd_wat(i) cdq(i) = cdq_wat(i) rb(i) = rb_wat(i) @@ -552,7 +545,7 @@ subroutine GFS_surface_composites_post_run ( hice(i) = zero cice(i) = zero else ! islmsk(i) == 2 - zorl(i) = zorl_ice(i) + zorl(i) = zorli(i) cd(i) = cd_ice(i) cdq(i) = cdq_ice(i) rb(i) = rb_ice(i) @@ -578,7 +571,7 @@ subroutine GFS_surface_composites_post_run ( tisfc(i) = tice(i) if (.not. flag_cice(i)) then ! tisfc(i) = tice(i) ! over lake ice (and sea ice when uncoupled) - zorl(i) = cice(i) * zorl_ice(i) + (one - cice(i)) * zorl_wat(i) + zorl(i) = cice(i) * zorli(i) + (one - cice(i)) * zorlo(i) tsfc(i) = tsfc_ice(i) ! over lake (and ocean when uncoupled) elseif (wet(i)) then if (cice(i) >= min_seaice) then ! this was already done for lake ice in sfc_sice @@ -590,7 +583,7 @@ subroutine GFS_surface_composites_post_run ( stress(i) = txi * stress_ice(i) + txo * stress_wat(i) qss(i) = txi * qss_ice(i) + txo * qss_wat(i) ep1d(i) = txi * ep1d_ice(i) + txo * ep1d_wat(i) - zorl(i) = txi * zorl_ice(i) + txo * zorl_wat(i) + zorl(i) = txi * zorli(i) + txo * zorlo(i) else evap(i) = evap_wat(i) hflx(i) = hflx_wat(i) @@ -598,7 +591,7 @@ subroutine GFS_surface_composites_post_run ( stress(i) = stress_wat(i) qss(i) = qss_wat(i) ep1d(i) = ep1d_wat(i) - zorl(i) = zorl_wat(i) + zorl(i) = zorlo(i) endif endif if (wet(i)) then @@ -612,10 +605,6 @@ subroutine GFS_surface_composites_post_run ( end do endif - zorll(i) = zorl_lnd(i) - zorlo(i) = zorl_wat(i) - zorli(i) = zorl_ice(i) - enddo endif ! if (frac_grid) diff --git a/physics/GFS_surface_composites.meta b/physics/GFS_surface_composites.meta index 21b308357..996fb54aa 100644 --- a/physics/GFS_surface_composites.meta +++ b/physics/GFS_surface_composites.meta @@ -37,7 +37,7 @@ units = flag dimensions = (horizontal_loop_extent) type = logical - intent = in + intent = inout optional = F [cplflx] standard_name = flag_for_flux_coupling @@ -116,7 +116,7 @@ type = logical intent = inout optional = F -[lake] +[use_flake] standard_name = flag_nonzero_lake_surface_fraction long_name = flag indicating presence of some lake surface area fraction units = flag @@ -158,69 +158,6 @@ kind = kind_phys intent = inout optional = F -[zorl] - standard_name = surface_roughness_length - long_name = surface roughness length - units = cm - dimensions = (horizontal_loop_extent) - type = real - kind = kind_phys - intent = in - optional = F -[zorlo] - standard_name = surface_roughness_length_over_ocean - long_name = surface roughness length over ocean - units = cm - dimensions = (horizontal_loop_extent) - type = real - kind = kind_phys - intent = inout - optional = F -[zorll] - standard_name = surface_roughness_length_over_land - long_name = surface roughness length over land - units = cm - dimensions = (horizontal_loop_extent) - type = real - kind = kind_phys - intent = inout - optional = F -[zorli] - standard_name = surface_roughness_length_over_ice - long_name = surface roughness length over ice - units = cm - dimensions = (horizontal_loop_extent) - type = real - kind = kind_phys - intent = inout - optional = F -[zorl_wat] - standard_name = surface_roughness_length_over_ocean_interstitial - long_name = surface roughness length over ocean (temporary use as interstitial) - units = cm - dimensions = (horizontal_loop_extent) - type = real - kind = kind_phys - intent = inout - optional = F -[zorl_lnd] - standard_name = surface_roughness_length_over_land_interstitial - long_name = surface roughness length over land (temporary use as interstitial) - units = cm - dimensions = (horizontal_loop_extent) - type = real - kind = kind_phys - intent = inout - optional = F -[zorl_ice] - standard_name = surface_roughness_length_over_ice_interstitial - long_name = surface roughness length over ice (temporary use as interstitial) - units = cm - dimensions = (horizontal_loop_extent) - type = real - kind = kind_phys - intent = inout - optional = F [snowd] standard_name = surface_snow_thickness_water_equivalent long_name = water equivalent snow depth @@ -231,8 +168,8 @@ intent = in optional = F [snowd_wat] - standard_name = surface_snow_thickness_water_equivalent_over_ocean - long_name = water equivalent snow depth over ocean + standard_name = surface_snow_thickness_water_equivalent_over_water + long_name = water equivalent snow depth over water units = mm dimensions = (horizontal_loop_extent) type = real @@ -267,8 +204,8 @@ intent = in optional = F [tprcp_wat] - standard_name = nonnegative_lwe_thickness_of_precipitation_amount_on_dynamics_timestep_over_ocean - long_name = total precipitation amount in each time step over ocean + standard_name = nonnegative_lwe_thickness_of_precipitation_amount_on_dynamics_timestep_over_water + long_name = total precipitation amount in each time step over water units = m dimensions = (horizontal_loop_extent) type = real @@ -303,8 +240,8 @@ intent = in optional = F [uustar_wat] - standard_name = surface_friction_velocity_over_ocean - long_name = surface friction velocity over ocean + standard_name = surface_friction_velocity_over_water + long_name = surface friction velocity over water units = m s-1 dimensions = (horizontal_loop_extent) type = real @@ -339,8 +276,8 @@ intent = in optional = F [weasd_wat] - standard_name = water_equivalent_accumulated_snow_depth_over_ocean - long_name = water equiv of acc snow depth over ocean + standard_name = water_equivalent_accumulated_snow_depth_over_water + long_name = water equiv of acc snow depth over water units = mm dimensions = (horizontal_loop_extent) type = real @@ -402,8 +339,8 @@ intent = inout optional = F [tsfc_wat] - standard_name = surface_skin_temperature_over_ocean_interstitial - long_name = surface skin temperature over ocean (temporary use as interstitial) + standard_name = surface_skin_temperature_over_water_interstitial + long_name = surface skin temperature over water (temporary use as interstitial) units = K dimensions = (horizontal_loop_extent) type = real @@ -456,8 +393,8 @@ intent = inout optional = F [tsurf_wat] - standard_name = surface_skin_temperature_after_iteration_over_ocean - long_name = surface skin temperature after iteration over ocean + standard_name = surface_skin_temperature_after_iteration_over_water + long_name = surface skin temperature after iteration over water units = K dimensions = (horizontal_loop_extent) type = real @@ -535,8 +472,8 @@ intent = in optional = F [semis_wat] - standard_name = surface_longwave_emissivity_over_ocean_interstitial - long_name = surface lw emissivity in fraction over ocean (temporary use as interstitial) + standard_name = surface_longwave_emissivity_over_water_interstitial + long_name = surface lw emissivity in fraction over water (temporary use as interstitial) units = frac dimensions = (horizontal_loop_extent) type = real @@ -571,8 +508,8 @@ intent = in optional = F [qss_wat] - standard_name = surface_specific_humidity_over_ocean - long_name = surface air saturation specific humidity over ocean + standard_name = surface_specific_humidity_over_water + long_name = surface air saturation specific humidity over water units = kg kg-1 dimensions = (horizontal_loop_extent) type = real @@ -607,8 +544,8 @@ intent = in optional = F [hflx_wat] - standard_name = kinematic_surface_upward_sensible_heat_flux_over_ocean - long_name = kinematic surface upward sensible heat flux over ocean + standard_name = kinematic_surface_upward_sensible_heat_flux_over_water + long_name = kinematic surface upward sensible heat flux over water units = K m s-1 dimensions = (horizontal_loop_extent) type = real @@ -651,6 +588,33 @@ kind = kind_phys intent = in optional = F +[zorlo] + standard_name = surface_roughness_length_over_water + long_name = surface roughness length over water + units = cm + dimensions = (horizontal_loop_extent) + type = real + kind = kind_phys + intent = inout + optional = F +[zorll] + standard_name = surface_roughness_length_over_land + long_name = surface roughness length over land + units = cm + dimensions = (horizontal_loop_extent) + type = real + kind = kind_phys + intent = inout + optional = F +[zorli] + standard_name = surface_roughness_length_over_ice + long_name = surface roughness length over ice + units = cm + dimensions = (horizontal_loop_extent) + type = real + kind = kind_phys + intent = inout + optional = F [errmsg] standard_name = ccpp_error_message long_name = error message for error handling in CCPP @@ -712,8 +676,8 @@ intent = in optional = F [semis_wat] - standard_name = surface_longwave_emissivity_over_ocean_interstitial - long_name = surface lw emissivity in fraction over ocean (temporary use as interstitial) + standard_name = surface_longwave_emissivity_over_water_interstitial + long_name = surface lw emissivity in fraction over water (temporary use as interstitial) units = frac dimensions = (horizontal_loop_extent) type = real @@ -766,8 +730,8 @@ intent = inout optional = F [gabsbdlw_wat] - 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 + standard_name = surface_downwelling_longwave_flux_absorbed_by_ground_over_water + long_name = total sky surface downward longwave flux absorbed by the ground over water units = W m-2 dimensions = (horizontal_loop_extent) type = real @@ -954,8 +918,8 @@ intent = inout optional = F [zorlo] - standard_name = surface_roughness_length_over_ocean - long_name = surface roughness length over ocean + standard_name = surface_roughness_length_over_water + long_name = surface roughness length over water units = cm dimensions = (horizontal_loop_extent) type = real @@ -980,33 +944,6 @@ kind = kind_phys intent = inout optional = F -[zorl_wat] - standard_name = surface_roughness_length_over_ocean_interstitial - long_name = surface roughness length over ocean (temporary use as interstitial) - units = cm - dimensions = (horizontal_loop_extent) - type = real - kind = kind_phys - intent = in - optional = F -[zorl_lnd] - standard_name = surface_roughness_length_over_land_interstitial - long_name = surface roughness length over land (temporary use as interstitial) - units = cm - dimensions = (horizontal_loop_extent) - type = real - kind = kind_phys - intent = in - optional = F -[zorl_ice] - standard_name = surface_roughness_length_over_ice_interstitial - long_name = surface roughness length over ice (temporary use as interstitial) - units = cm - dimensions = (horizontal_loop_extent) - type = real - kind = kind_phys - intent = in - optional = F [cd] standard_name = surface_drag_coefficient_for_momentum_in_air long_name = surface exchange coeff for momentum @@ -1017,8 +954,8 @@ intent = inout optional = F [cd_wat] - standard_name = surface_drag_coefficient_for_momentum_in_air_over_ocean - long_name = surface exchange coeff for momentum over ocean + standard_name = surface_drag_coefficient_for_momentum_in_air_over_water + long_name = surface exchange coeff for momentum over water units = none dimensions = (horizontal_loop_extent) type = real @@ -1053,8 +990,8 @@ intent = inout optional = F [cdq_wat] - standard_name = surface_drag_coefficient_for_heat_and_moisture_in_air_over_ocean - long_name = surface exchange coeff heat & moisture over ocean + standard_name = surface_drag_coefficient_for_heat_and_moisture_in_air_over_water + long_name = surface exchange coeff heat surface exchange coeff heat & moisture over ocean moisture over water units = none dimensions = (horizontal_loop_extent) type = real @@ -1089,8 +1026,8 @@ intent = inout optional = F [rb_wat] - standard_name = bulk_richardson_number_at_lowest_model_level_over_ocean - long_name = bulk Richardson number at the surface over ocean + standard_name = bulk_richardson_number_at_lowest_model_level_over_water + long_name = bulk Richardson number at the surface over water units = none dimensions = (horizontal_loop_extent) type = real @@ -1125,8 +1062,8 @@ intent = inout optional = F [stress_wat] - standard_name = surface_wind_stress_over_ocean - long_name = surface wind stress over ocean + standard_name = surface_wind_stress_over_water + long_name = surface wind stress over water units = m2 s-2 dimensions = (horizontal_loop_extent) type = real @@ -1161,8 +1098,8 @@ intent = inout optional = F [ffmm_wat] - standard_name = Monin_Obukhov_similarity_function_for_momentum_over_ocean - long_name = Monin-Obukhov similarity function for momentum over ocean + standard_name = Monin_Obukhov_similarity_function_for_momentum_over_water + long_name = Monin-Obukhov similarity function for momentum over water units = none dimensions = (horizontal_loop_extent) type = real @@ -1197,8 +1134,8 @@ intent = inout optional = F [ffhh_wat] - standard_name = Monin_Obukhov_similarity_function_for_heat_over_ocean - long_name = Monin-Obukhov similarity function for heat over ocean + standard_name = Monin_Obukhov_similarity_function_for_heat_over_water + long_name = Monin-Obukhov similarity function for heat over water units = none dimensions = (horizontal_loop_extent) type = real @@ -1233,8 +1170,8 @@ intent = inout optional = F [uustar_wat] - standard_name = surface_friction_velocity_over_ocean - long_name = surface friction velocity over ocean + standard_name = surface_friction_velocity_over_water + long_name = surface friction velocity over water units = m s-1 dimensions = (horizontal_loop_extent) type = real @@ -1269,8 +1206,8 @@ intent = inout optional = F [fm10_wat] - standard_name = Monin_Obukhov_similarity_function_for_momentum_at_10m_over_ocean - long_name = Monin-Obukhov similarity parameter for momentum at 10m over ocean + standard_name = Monin_Obukhov_similarity_function_for_momentum_at_10m_over_water + long_name = Monin-Obukhov similarity parameter for momentum at 10m over water units = none dimensions = (horizontal_loop_extent) type = real @@ -1305,8 +1242,8 @@ intent = inout optional = F [fh2_wat] - standard_name = Monin_Obukhov_similarity_function_for_heat_at_2m_over_ocean - long_name = Monin-Obukhov similarity parameter for heat at 2m over ocean + standard_name = Monin_Obukhov_similarity_function_for_heat_at_2m_over_water + long_name = Monin-Obukhov similarity parameter for heat at 2m over water units = none dimensions = (horizontal_loop_extent) type = real @@ -1341,8 +1278,8 @@ intent = inout optional = F [tsurf_wat] - standard_name = surface_skin_temperature_after_iteration_over_ocean - long_name = surface skin temperature after iteration over ocean + standard_name = surface_skin_temperature_after_iteration_over_water + long_name = surface skin temperature after iteration over water units = K dimensions = (horizontal_loop_extent) type = real @@ -1377,8 +1314,8 @@ intent = inout optional = F [cmm_wat] - standard_name = surface_drag_wind_speed_for_momentum_in_air_over_ocean - long_name = momentum exchange coefficient over ocean + standard_name = surface_drag_wind_speed_for_momentum_in_air_over_water + long_name = momentum exchange coefficient over water units = m s-1 dimensions = (horizontal_loop_extent) type = real @@ -1413,8 +1350,8 @@ intent = inout optional = F [chh_wat] - standard_name = surface_drag_mass_flux_for_heat_and_moisture_in_air_over_ocean - long_name = thermal exchange coefficient over ocean + standard_name = surface_drag_mass_flux_for_heat_and_moisture_in_air_over_water + long_name = thermal exchange coefficient over water units = kg m-2 s-1 dimensions = (horizontal_loop_extent) type = real @@ -1449,8 +1386,8 @@ intent = inout optional = F [gflx_wat] - standard_name = upward_heat_flux_in_soil_over_ocean - long_name = soil heat flux over ocean + standard_name = upward_heat_flux_in_soil_over_water + long_name = soil heat flux over water units = W m-2 dimensions = (horizontal_loop_extent) type = real @@ -1485,8 +1422,8 @@ intent = inout optional = F [ep1d_wat] - standard_name = surface_upward_potential_latent_heat_flux_over_ocean - long_name = surface upward potential latent heat flux over ocean + standard_name = surface_upward_potential_latent_heat_flux_over_water + long_name = surface upward potential latent heat flux over water units = W m-2 dimensions = (horizontal_loop_extent) type = real @@ -1521,8 +1458,8 @@ intent = inout optional = F [weasd_wat] - standard_name = water_equivalent_accumulated_snow_depth_over_ocean - long_name = water equiv of acc snow depth over ocean + standard_name = water_equivalent_accumulated_snow_depth_over_water + long_name = water equiv of acc snow depth over water units = mm dimensions = (horizontal_loop_extent) type = real @@ -1557,8 +1494,8 @@ intent = inout optional = F [snowd_wat] - standard_name = surface_snow_thickness_water_equivalent_over_ocean - long_name = water equivalent snow depth over ocean + standard_name = surface_snow_thickness_water_equivalent_over_water + long_name = water equivalent snow depth over water units = mm dimensions = (horizontal_loop_extent) type = real @@ -1593,8 +1530,8 @@ intent = inout optional = F [tprcp_wat] - standard_name = nonnegative_lwe_thickness_of_precipitation_amount_on_dynamics_timestep_over_ocean - long_name = total precipitation amount in each time step over ocean + standard_name = nonnegative_lwe_thickness_of_precipitation_amount_on_dynamics_timestep_over_water + long_name = total precipitation amount in each time step over water units = m dimensions = (horizontal_loop_extent) type = real @@ -1629,8 +1566,8 @@ intent = inout optional = F [evap_wat] - standard_name = kinematic_surface_upward_latent_heat_flux_over_ocean - long_name = kinematic surface upward latent heat flux over ocean + standard_name = kinematic_surface_upward_latent_heat_flux_over_water + long_name = kinematic surface upward latent heat flux over water units = kg kg-1 m s-1 dimensions = (horizontal_loop_extent) type = real @@ -1665,8 +1602,8 @@ intent = inout optional = F [hflx_wat] - standard_name = kinematic_surface_upward_sensible_heat_flux_over_ocean - long_name = kinematic surface upward sensible heat flux over ocean + standard_name = kinematic_surface_upward_sensible_heat_flux_over_water + long_name = kinematic surface upward sensible heat flux over water units = K m s-1 dimensions = (horizontal_loop_extent) type = real @@ -1701,8 +1638,8 @@ intent = inout optional = F [qss_wat] - standard_name = surface_specific_humidity_over_ocean - long_name = surface air saturation specific humidity over ocean + standard_name = surface_specific_humidity_over_water + long_name = surface air saturation specific humidity over water units = kg kg-1 dimensions = (horizontal_loop_extent) type = real @@ -1755,8 +1692,8 @@ intent = inout optional = F [tsfc_wat] - standard_name = surface_skin_temperature_over_ocean_interstitial - long_name = surface skin temperature over ocean (temporary use as interstitial) + standard_name = surface_skin_temperature_over_water_interstitial + long_name = surface skin temperature over water (temporary use as interstitial) units = K dimensions = (horizontal_loop_extent) type = real @@ -1832,7 +1769,7 @@ dimensions = (horizontal_loop_extent,ice_vertical_dimension) type = real kind = kind_phys - intent = inout + intent = in optional = F [stc] standard_name = soil_temperature diff --git a/physics/GFS_surface_generic.F90 b/physics/GFS_surface_generic.F90 index 483eccdf8..70a5b3541 100644 --- a/physics/GFS_surface_generic.F90 +++ b/physics/GFS_surface_generic.F90 @@ -1,6 +1,7 @@ !> \file GFS_surface_generic.F90 !! Contains code related to all GFS surface schemes. +!>\defgroup mod_GFS_surface_generic_pre GFS Surface Generic Pre module module GFS_surface_generic_pre use machine, only: kind_phys @@ -39,48 +40,48 @@ subroutine GFS_surface_generic_pre_run (im, levs, vfrac, islmsk, isot, ivegsrc, ! Interface variables integer, intent(in) :: im, levs, isot, ivegsrc - integer, dimension(im), intent(in) :: islmsk - integer, dimension(im), intent(inout) :: soiltyp, vegtype, slopetyp + integer, dimension(:), intent(in) :: islmsk + integer, dimension(:), intent(inout) :: soiltyp, vegtype, slopetyp real(kind=kind_phys), intent(in) :: con_g - real(kind=kind_phys), dimension(im), intent(in) :: vfrac, stype, vtype, slope, prsik_1, prslk_1 + real(kind=kind_phys), dimension(:), intent(in) :: vfrac, stype, vtype, slope, prsik_1, prslk_1 - real(kind=kind_phys), dimension(im), intent(inout) :: tsfc - real(kind=kind_phys), dimension(im,levs), intent(in) :: phil + real(kind=kind_phys), dimension(:), intent(inout) :: tsfc + real(kind=kind_phys), dimension(:,:), intent(in) :: phil - real(kind=kind_phys), dimension(im), intent(inout) :: sigmaf, work3, tsurf, zlvl + real(kind=kind_phys), dimension(:), intent(inout) :: sigmaf, work3, tsurf, zlvl ! Stochastic physics / surface perturbations - real(kind=kind_phys), dimension(im), intent(out) :: drain_cpl - real(kind=kind_phys), dimension(im), intent(out) :: dsnow_cpl - real(kind=kind_phys), dimension(im), intent(in) :: rain_cpl - real(kind=kind_phys), dimension(im), intent(in) :: snow_cpl + real(kind=kind_phys), dimension(:), intent(out) :: drain_cpl + real(kind=kind_phys), dimension(:), intent(out) :: dsnow_cpl + real(kind=kind_phys), dimension(:), intent(in) :: rain_cpl + real(kind=kind_phys), dimension(:), intent(in) :: snow_cpl integer, intent(in) :: lndp_type integer, intent(in) :: n_var_lndp - character(len=3), dimension(n_var_lndp), intent(in) :: lndp_var_list - real(kind=kind_phys), dimension(n_var_lndp), intent(in) :: lndp_prt_list - real(kind=kind_phys), dimension(im,n_var_lndp), intent(in) :: sfc_wts - real(kind=kind_phys), dimension(im), intent(out) :: z01d - real(kind=kind_phys), dimension(im), intent(out) :: zt1d - real(kind=kind_phys), dimension(im), intent(out) :: bexp1d - real(kind=kind_phys), dimension(im), intent(out) :: xlai1d - real(kind=kind_phys), dimension(im), intent(out) :: vegf1d - real(kind=kind_phys), intent(out) :: lndp_vgf - real(kind=kind_phys), dimension(im,n_var_lndp), intent(inout) :: sfc_wts_inv + character(len=3), dimension(:), intent(in) :: lndp_var_list + real(kind=kind_phys), dimension(:), intent(in) :: lndp_prt_list + real(kind=kind_phys), dimension(:,:), intent(in) :: sfc_wts + real(kind=kind_phys), dimension(:), intent(out) :: z01d + real(kind=kind_phys), dimension(:), intent(out) :: zt1d + real(kind=kind_phys), dimension(:), intent(out) :: bexp1d + real(kind=kind_phys), dimension(:), intent(out) :: xlai1d + real(kind=kind_phys), dimension(:), intent(out) :: vegf1d + real(kind=kind_phys), intent(out) :: lndp_vgf + real(kind=kind_phys), dimension(:,:), intent(inout) :: sfc_wts_inv logical, intent(in) :: cplflx - real(kind=kind_phys), dimension(im), intent(in) :: slimskin_cpl - logical, dimension(im), intent(inout) :: flag_cice - integer, dimension(im), intent(out) :: islmsk_cice - real(kind=kind_phys), dimension(im), intent(in) :: & + real(kind=kind_phys), dimension(:), intent(in) :: slimskin_cpl + logical, dimension(:), intent(inout) :: flag_cice + integer, dimension(:), intent(out) :: islmsk_cice + real(kind=kind_phys), dimension(:), intent(in) :: & tisfc, tsfco, fice, hice - real(kind=kind_phys), dimension(im), intent(out) :: wind - real(kind=kind_phys), dimension(im), intent(in ) :: u1, v1 + real(kind=kind_phys), dimension(:), intent(out) :: wind + real(kind=kind_phys), dimension(:), intent(in ) :: u1, v1 ! surface wind enhancement due to convection - real(kind=kind_phys), dimension(im), intent(inout ) :: cnvwind + real(kind=kind_phys), dimension(:), intent(inout ) :: cnvwind ! - real(kind=kind_phys), dimension(im), intent(out) :: smcwlt2, smcref2 + real(kind=kind_phys), dimension(:), intent(out) :: smcwlt2, smcref2 ! CCPP error handling character(len=*), intent(out) :: errmsg @@ -222,29 +223,29 @@ subroutine GFS_surface_generic_post_run (im, cplflx, cplwav, lssav, icy, wet, dt integer, intent(in) :: im logical, intent(in) :: cplflx, cplwav, lssav - logical, dimension(im), intent(in) :: icy, wet + logical, dimension(:), intent(in) :: icy, wet real(kind=kind_phys), intent(in) :: dtf - real(kind=kind_phys), dimension(im), intent(in) :: ep1d, gflx, tgrs_1, qgrs_1, ugrs_1, vgrs_1, adjsfcdlw, adjsfcdsw, & + real(kind=kind_phys), dimension(:), intent(in) :: ep1d, gflx, tgrs_1, qgrs_1, ugrs_1, vgrs_1, adjsfcdlw, adjsfcdsw, & adjnirbmd, adjnirdfd, adjvisbmd, adjvisdfd, adjsfculw, adjsfculw_wat, adjnirbmu, adjnirdfu, adjvisbmu, adjvisdfu, & t2m, q2m, u10m, v10m, tsfc, tsfc_wat, pgr, xcosz, evbs, evcw, trans, sbsno, snowc, snohf - real(kind=kind_phys), dimension(im), intent(inout) :: epi, gfluxi, t1, q1, u1, v1, dlwsfci_cpl, dswsfci_cpl, dlwsfc_cpl, & - dswsfc_cpl, dnirbmi_cpl, dnirdfi_cpl, dvisbmi_cpl, dvisdfi_cpl, dnirbm_cpl, dnirdf_cpl, dvisbm_cpl, dvisdf_cpl, & - nlwsfci_cpl, nlwsfc_cpl, t2mi_cpl, q2mi_cpl, u10mi_cpl, v10mi_cpl, tsfci_cpl, psurfi_cpl, nnirbmi_cpl, nnirdfi_cpl, & - nvisbmi_cpl, nvisdfi_cpl, nswsfci_cpl, nswsfc_cpl, nnirbm_cpl, nnirdf_cpl, nvisbm_cpl, nvisdf_cpl, gflux, evbsa, & + real(kind=kind_phys), dimension(:), intent(inout) :: epi, gfluxi, t1, q1, u1, v1, dlwsfci_cpl, dswsfci_cpl, dlwsfc_cpl, & + dswsfc_cpl, dnirbmi_cpl, dnirdfi_cpl, dvisbmi_cpl, dvisdfi_cpl, dnirbm_cpl, dnirdf_cpl, dvisbm_cpl, dvisdf_cpl, & + nlwsfci_cpl, nlwsfc_cpl, t2mi_cpl, q2mi_cpl, u10mi_cpl, v10mi_cpl, tsfci_cpl, psurfi_cpl, nnirbmi_cpl, nnirdfi_cpl, & + nvisbmi_cpl, nvisdfi_cpl, nswsfci_cpl, nswsfc_cpl, nnirbm_cpl, nnirdf_cpl, nvisbm_cpl, nvisdf_cpl, gflux, evbsa, & evcwa, transa, sbsnoa, snowca, snohfa, ep - real(kind=kind_phys), dimension(im), intent(inout) :: runoff, srunoff - real(kind=kind_phys), dimension(im), intent(in) :: drain, runof + real(kind=kind_phys), dimension(:), intent(inout) :: runoff, srunoff + real(kind=kind_phys), dimension(:), intent(in) :: drain, runof ! For canopy heat storage logical, intent(in) :: lheatstrg real(kind=kind_phys), intent(in) :: z0fac, e0fac - real(kind=kind_phys), dimension(im), intent(in) :: zorl - real(kind=kind_phys), dimension(im), intent(in) :: hflx, evap - real(kind=kind_phys), dimension(im), intent(out) :: hflxq, evapq - real(kind=kind_phys), dimension(im), intent(out) :: hffac, hefac + real(kind=kind_phys), dimension(:), intent(in) :: zorl + real(kind=kind_phys), dimension(:), intent(in) :: hflx, evap + real(kind=kind_phys), dimension(:), intent(out) :: hflxq, evapq + real(kind=kind_phys), dimension(:), intent(out) :: hffac, hefac ! CCPP error handling variables character(len=*), intent(out) :: errmsg diff --git a/physics/GFS_surface_generic.meta b/physics/GFS_surface_generic.meta index d4c8b1bca..e174de153 100644 --- a/physics/GFS_surface_generic.meta +++ b/physics/GFS_surface_generic.meta @@ -249,17 +249,17 @@ kind = kind_phys intent = in optional = F -[sfc_wts_inv] - standard_name = weights_for_stochastic_surface_physics_perturbation_flipped - long_name = weights for stochastic surface physics perturbation, flipped +[lndp_var_list] + standard_name = variables_to_be_perturbed_for_landperts + long_name = variables to be perturbed for landperts units = none - dimensions = (horizontal_loop_extent,number_of_land_surface_variables_perturbed) - type = real - kind = kind_phys - intent = inout + dimensions = (number_of_land_surface_variables_perturbed) + type = character + kind = len=3 + intent = in optional = F [lndp_prt_list] - standard_name = magnitude_of_perturbations_for_landperts + standard_name =magnitude_of_perturbations_for_landperts long_name = magnitude of perturbations for landperts units = variable dimensions = (number_of_land_surface_variables_perturbed) @@ -267,15 +267,6 @@ kind = kind_phys intent = in optional = F -[lndp_var_list] - standard_name = variables_to_be_perturbed_for_landperts - long_name = variables to be perturbed for landperts - units = none - dimensions = (number_of_land_surface_variables_perturbed) - type = character - kind = len=3 - intent = in - optional = F [z01d] standard_name = perturbation_of_momentum_roughness_length long_name = perturbation of momentum roughness length @@ -330,6 +321,15 @@ kind = kind_phys intent = out optional = F +[sfc_wts_inv] + standard_name = weights_for_stochastic_surface_physics_perturbation_flipped + long_name = weights for stochastic surface physics perturbation, flipped + units = none + dimensions = (horizontal_loop_extent,number_of_land_surface_variables_perturbed) + type = real + kind = kind_phys + intent = inout + optional = F [cplflx] standard_name = flag_for_flux_coupling long_name = flag controlling cplflx collection (default off) @@ -656,8 +656,8 @@ intent = in optional = F [adjsfculw_wat] - standard_name = surface_upwelling_longwave_flux_over_ocean_interstitial - long_name = surface upwelling longwave flux at current time over ocean (temporary use as interstitial) + standard_name = surface_upwelling_longwave_flux_over_water_interstitial + long_name = surface upwelling longwave flux at current time over water (temporary use as interstitial) units = W m-2 dimensions = (horizontal_loop_extent) type = real @@ -746,8 +746,8 @@ intent = in optional = F [tsfc_wat] - standard_name = surface_skin_temperature_over_ocean_interstitial - long_name = surface skin temperature over ocean (temporary use as interstitial) + standard_name = surface_skin_temperature_over_water_interstitial + long_name = surface skin temperature over water (temporary use as interstitial) units = K dimensions = (horizontal_loop_extent) type = real @@ -1329,18 +1329,18 @@ kind = kind_phys intent = out optional = F -[hefac] - standard_name = surface_upward_latent_heat_flux_reduction_factor - long_name = surface upward latent heat flux reduction factor from canopy heat storage +[hffac] + standard_name = surface_upward_sensible_heat_flux_reduction_factor + long_name = surface upward sensible heat flux reduction factor from canopy heat storage units = none dimensions = (horizontal_loop_extent) type = real kind = kind_phys intent = out optional = F -[hffac] - standard_name = surface_upward_sensible_heat_flux_reduction_factor - long_name = surface upward sensible heat flux reduction factor from canopy heat storage +[hefac] + standard_name = surface_upward_latent_heat_flux_reduction_factor + long_name = surface upward latent heat flux reduction factor from canopy heat storage units = none dimensions = (horizontal_loop_extent) type = real diff --git a/physics/GFS_surface_loop_control.F90 b/physics/GFS_surface_loop_control.F90 index c7f727d27..82c55c4ad 100644 --- a/physics/GFS_surface_loop_control.F90 +++ b/physics/GFS_surface_loop_control.F90 @@ -15,11 +15,9 @@ end subroutine GFS_surface_loop_control_part1_finalize !> \brief Brief description of the subroutine !! -#if 0 !! \section arg_table_GFS_surface_loop_control_part1_run Arguments !! \htmlinclude GFS_surface_loop_control_part1_run.html !! -#endif !! \section general General Algorithm !! \section detailed Detailed Algorithm !! @{ @@ -31,10 +29,10 @@ subroutine GFS_surface_loop_control_part1_run (im, iter, wind, flag_guess, errms implicit none ! Interface variables - integer, intent(in) :: im - integer, intent(in) :: iter - real(kind=kind_phys), dimension(im), intent(in) :: wind - logical, dimension(im), intent(inout) :: flag_guess + integer, intent(in) :: im + integer, intent(in) :: iter + real(kind=kind_phys), dimension(:), intent(in) :: wind + logical, dimension(:), intent(inout) :: flag_guess character(len=*), intent(out) :: errmsg integer, intent(out) :: errflg @@ -80,7 +78,7 @@ end subroutine GFS_surface_loop_control_part2_finalize !! \section detailed Detailed Algorithm !! @{ - subroutine GFS_surface_loop_control_part2_run (im, iter, wind, & + subroutine GFS_surface_loop_control_part2_run (im, iter, wind, & flag_guess, flag_iter, dry, wet, icy, nstf_name1, errmsg, errflg) use machine, only: kind_phys @@ -90,10 +88,10 @@ subroutine GFS_surface_loop_control_part2_run (im, iter, wind, & ! Interface variables integer, intent(in) :: im integer, intent(in) :: iter - real(kind=kind_phys), dimension(im), intent(in) :: wind - logical, dimension(im), intent(inout) :: flag_guess - logical, dimension(im), intent(inout) :: flag_iter - logical, dimension(im), intent(in) :: dry, wet, icy + real(kind=kind_phys), dimension(:), intent(in) :: wind + logical, dimension(:), intent(inout) :: flag_guess + logical, dimension(:), intent(inout) :: flag_iter + logical, dimension(:), intent(in) :: dry, wet, icy integer, intent(in) :: nstf_name1 character(len=*), intent(out) :: errmsg diff --git a/physics/GFS_time_vary_pre.fv3.F90 b/physics/GFS_time_vary_pre.fv3.F90 index ba971fa67..98ac6a07f 100644 --- a/physics/GFS_time_vary_pre.fv3.F90 +++ b/physics/GFS_time_vary_pre.fv3.F90 @@ -1,6 +1,7 @@ -!> \file GFS_time_vary_pre.F90 +!> \file GFS_time_vary_pre.fv3.F90 !! Contains code related to GFS physics suite setup (generic part of time_vary_step) +!>\defgroup gfs_time_vary_pre_mod GFS Time Vary Pre Module module GFS_time_vary_pre use funcphys, only: gfuncphys @@ -73,8 +74,8 @@ subroutine GFS_time_vary_pre_timestep_init (jdat, idat, dtp, lkm, lsm, lsm_noahm implicit none - integer, intent(in) :: idate(4) - integer, intent(in) :: jdat(1:8), idat(1:8) + integer, intent(in) :: idate(:) + integer, intent(in) :: jdat(:), idat(:) integer, intent(in) :: lkm, lsm, lsm_noahmp, & nsswr, nslwr, me, & master, nscyc, nhfrad diff --git a/physics/GFS_time_vary_pre.scm.F90 b/physics/GFS_time_vary_pre.scm.F90 index c4c235f61..c9ee9f946 100644 --- a/physics/GFS_time_vary_pre.scm.F90 +++ b/physics/GFS_time_vary_pre.scm.F90 @@ -73,8 +73,8 @@ subroutine GFS_time_vary_pre_timestep_init (jdat, idat, dtp, lsm, lsm_noahmp, ns implicit none - integer, intent(in) :: idate(4) - integer, intent(in) :: jdat(1:8), idat(1:8) + integer, intent(in) :: idate(:) + integer, intent(in) :: jdat(:), idat(:) integer, intent(in) :: lsm, lsm_noahmp, & nsswr, nslwr, me, & master, nscyc @@ -111,7 +111,7 @@ subroutine GFS_time_vary_pre_timestep_init (jdat, idat, dtp, lsm, lsm_noahmp, ns end if !--- jdat is being updated directly inside of the time integration - !--- loop of gmtb_scm.F90 + !--- loop of scm.F90 !--- update calendars and triggers rinc(1:5) = 0 call w3difdat(jdat,idat,4,rinc) diff --git a/physics/aerclm_def.F b/physics/aerclm_def.F index 426881fe4..3862aa1b1 100644 --- a/physics/aerclm_def.F +++ b/physics/aerclm_def.F @@ -13,7 +13,7 @@ module aerclm_def real (kind=kind_phys), allocatable, dimension(:,:,:,:) :: aer_pres real (kind=kind_phys), allocatable, dimension(:,:,:,:,:) :: aerin - data aer_time/15.5, 45., 74.5, 105., 135.5, 166., 196.5, + data aer_time/15.5, 45., 74.5, 105., 135.5, 166., 196.5, & 227.5, 258., 288.5, 319., 349.5, 380.5/ data specname /'DU001','DU002','DU003','DU004','DU005', diff --git a/physics/aerinterp.F90 b/physics/aerinterp.F90 index bed73c5be..25472632f 100644 --- a/physics/aerinterp.F90 +++ b/physics/aerinterp.F90 @@ -43,15 +43,23 @@ SUBROUTINE read_aerdata (me, master, iflip, idate, errmsg, errflg) endif ! !! =================================================================== +!! check if all necessary files exist +!! =================================================================== + do imon = 1, timeaer + write(mn,'(i2.2)') imon + fname=trim("aeroclim.m"//mn//".nc") + inquire (file = fname, exist = file_exist) + if (.not. file_exist) then + errmsg = 'Error in read_aerdata: file ' // trim(fname) // ' not found' + errflg = 1 + return + endif + enddo +! +!! =================================================================== !! fetch dim spec and lat/lon from m01 data set !! =================================================================== fname=trim("aeroclim.m"//'01'//".nc") - inquire (file = fname, exist = file_exist) - if (.not. file_exist) then - errmsg = 'Error in read_aerdata: file ' // trim(fname) // ' not found' - errflg = 1 - return - endif call nf_open(fname , nf90_NOWRITE, ncid) vname = trim(specname(1)) @@ -117,13 +125,9 @@ SUBROUTINE read_aerdataf (iamin, iamax, jamin, jamax, & endif ! allocate local working arrays - if (.not. allocated(buff)) then - allocate (buff(lonsaer, latsaer, levsw)) - allocate (pres_tmp(lonsaer,levsw)) - endif - if (.not. allocated(buffx)) then - allocate (buffx(lonsaer, latsaer, levsw,1)) - endif + allocate (buff(lonsaer, latsaer, levsw)) + allocate (pres_tmp(lonsaer, levsw)) + allocate (buffx(lonsaer, latsaer, levsw, 1)) !! =================================================================== !! loop thru m01 - m12 for aer/pres array @@ -131,13 +135,6 @@ SUBROUTINE read_aerdataf (iamin, iamax, jamin, jamax, & do imon = 1, timeaer write(mn,'(i2.2)') imon fname=trim("aeroclim.m"//mn//".nc") - inquire (file = fname, exist = file_exist) - if (.not. file_exist) then - errmsg = 'Error in read_aerdata: file ' // trim(fname) // ' not found' - errflg = 1 - return - endif - call nf_open(fname , nf90_NOWRITE, ncid) ! ====> construct 3-d pressure array (Pa) @@ -259,7 +256,7 @@ END SUBROUTINE setindxaer !********************************************************************** !********************************************************************** ! - SUBROUTINE aerinterpol(me,master,npts,IDATE,FHOUR,jindx1,jindx2, & + SUBROUTINE aerinterpol(me,master,nthrds,npts,IDATE,FHOUR,jindx1,jindx2, & ddy,iindx1,iindx2,ddx,lev,prsl,aerout) ! USE MACHINE, ONLY : kind_phys @@ -270,7 +267,7 @@ SUBROUTINE aerinterpol(me,master,npts,IDATE,FHOUR,jindx1,jindx2, & ! integer JINDX1(npts), JINDX2(npts),iINDX1(npts),iINDX2(npts) - integer me,idate(4), master + integer me,idate(4), master, nthrds integer IDAT(8),JDAT(8) ! real(kind=kind_phys) DDY(npts), ddx(npts),ttt @@ -317,7 +314,16 @@ SUBROUTINE aerinterpol(me,master,npts,IDATE,FHOUR,jindx1,jindx2, & tx2 = 1.0 - tx1 if (n2 > 12) n2 = n2 -12 -! +#ifndef __GFORTRAN__ +!$OMP parallel num_threads(nthrds) default(none) & +!$OMP shared(npts,ntrcaer,aerin,aer_pres,prsl) & +!$OMP shared(ddx,ddy,jindx1,jindx2,iindx1,iindx2) & +!$OMP shared(aerpm,aerpres,aerout,n1,n2,lev,nthrds) & +!$OMP private(l,j,k,ii,i1,i2,j1,j2,temj,temi) & +!$OMP copyin(tx1,tx2) firstprivate(tx1,tx2) + +!$OMP do +#endif DO L=1,levsaer DO J=1,npts J1 = JINDX1(J) @@ -341,8 +347,12 @@ SUBROUTINE aerinterpol(me,master,npts,IDATE,FHOUR,jindx1,jindx2, & +TEMI*DDY(j)*aer_pres(I1,J2,L,n2)+DDX(j)*TEMJ*aer_pres(I2,J1,L,n2)) ENDDO ENDDO +#ifndef __GFORTRAN__ +!$OMP end do ! don't flip, input is the same direction as GFS (bottom-up) +!$OMP do +#endif DO J=1,npts DO L=1,lev if(prsl(j,L).ge.aerpres(j,1)) then @@ -371,7 +381,12 @@ SUBROUTINE aerinterpol(me,master,npts,IDATE,FHOUR,jindx1,jindx2, & endif ENDDO !L-loop ENDDO !J-loop -! +#ifndef __GFORTRAN__ +!$OMP end do + +!$OMP end parallel +#endif + RETURN END SUBROUTINE aerinterpol diff --git a/physics/cires_orowam2017.F90 b/physics/cires_orowam2017.F90 deleted file mode 100644 index d5fda5cc0..000000000 --- a/physics/cires_orowam2017.F90 +++ /dev/null @@ -1,354 +0,0 @@ -module cires_orowam2017 - - -contains - - - subroutine oro_wam_2017(im, levs,npt,ipt, kref,kdt,me,master, & - & dtp,dxres, taub, u1, v1, t1, xn, yn, bn2, rho, prsi, prsL, & - & grav, omega, con_rd, del, sigma, hprime, gamma, theta, & - & sinlat, xlatd, taup, taud, pkdis) -! - USE MACHINE , ONLY : kind_phys -! - implicit none - - integer :: im, levs - integer :: npt - integer :: kdt, me, master - integer :: kref(im), ipt(im) - real(kind=kind_phys), intent(in) :: dtp, dxres - real(kind=kind_phys), intent(in) :: taub(im) - - real(kind=kind_phys), intent(in) :: sinlat(im), xlatd(im) - real(kind=kind_phys), intent(in), dimension(im) :: sigma, & - & hprime, gamma, theta - - real(kind=kind_phys), intent(in), dimension(im) :: xn, yn - - real(kind=kind_phys), intent(in), dimension(im, levs) :: & - & u1, v1, t1, bn2, rho, prsl, del - real(kind=kind_phys), intent(in) :: grav, omega, con_rd - - real(kind=kind_phys), intent(in), dimension(im, levs+1) :: prsi -! -! out : taup, taud, pkdis -! - real(kind=kind_phys), intent(inout), dimension(im, levs+1) :: taup - real(kind=kind_phys), intent(inout), dimension(im, levs) :: taud - real(kind=kind_phys), intent(inout), dimension(im, levs) :: pkdis - real(kind=kind_phys) :: belps, aelps, nhills, selps -! -! multiwave oro-spectra -! locals -! - integer :: i, j, k, isp, iw - - integer, parameter :: nworo = 30 - real(kind=kind_phys), parameter :: fc_flag = 0.0 - real(kind=kind_phys), parameter :: mkzmin = 6.28e-3/50.0 - real(kind=kind_phys), parameter :: mkz2min = mkzmin* mkzmin - real(kind=kind_phys), parameter :: kedmin = 1.e-3 - real(kind=kind_phys), parameter :: kedmax = 350.,axmax=250.e-5 - real(kind=kind_phys), parameter :: rtau = 0.01 ! nonlin-OGW scale 1/10sec - real(kind=kind_phys), parameter :: Linsat2 =0.5 - real(kind=kind_phys), parameter :: kxmin = 6.28e-3/100. - real(kind=kind_phys), parameter :: kxmax = 6.28e-3/5.0 - real(kind=kind_phys), parameter :: dkx = (kxmax -kxmin)/(nworo-1) - real(kind=kind_phys), parameter :: kx_slope= -5./3. - real(kind=kind_phys), parameter :: hps =7000., rhp2 = .5/hps - real(kind=kind_phys), parameter :: cxmin=0.5, cxmin2=cxmin*cxmin - - real :: akx(nworo), cxoro(nworo), akx2(nworo) - real :: aspkx(nworo), c2f2(nworo) , cdf2(nworo) - real :: tau_sp(nworo,levs+1), wkdis(nworo, levs+1) - real :: tau_kx(nworo),taub_kx(nworo) - real, dimension(nworo, levs+1) :: wrms, akzw - - real :: tauz(levs+1), rms_wind(levs+1) - real :: wave_act(nworo,levs+1) - - real :: kxw, kzw, kzw2, kzw3, kzi, dzmet, rhoint - real :: rayf, kturb - real :: uz, bv, bv2,kxsp, fcor2, cf2 - - real :: fdis - real :: wfdm, wfdt, wfim, wfit - real :: betadis, betam, betat, kds, cx, rhofac - real :: etwk, etws, tauk, cx2sat - real :: cdf1, tau_norm -! -! mean flow -! - real, dimension(levs+1) :: uzi,rhoi,ktur, kalp, dzi - - integer :: nw, nzi, ksrc - taud (:, :) = 0.0 ; pkdis(:,:) = 0.0 ; taup (:,:) = 0.0 - tau_sp (:,:) = 0.0 ; wrms(:,:) = 0.0 - nw = nworo - nzi = levs+1 - - do iw = 1, nw -! !kxw = 0.25/(dxres)*iw - kxw = kxmin+(iw-1)*dkx - akx(iw) = kxw - akx2(iw) = kxw*kxw - aspkx(iw) = kxw ** (kx_slope) - tau_kx(iw) = aspkx(iw)*dkx - enddo - - tau_norm = sum(tau_kx) - tau_kx(:) = tau_kx(:)/tau_norm - - if (kdt == 1) then -771 format( 'vay-oro19 ', 3(2x,F8.3)) - write(6,771) & - & maxval(tau_kx)*maxval(taub)*1.e3, & - & minval(tau_kx), maxval(tau_kx) - endif -! -! main loop over oro-points -! - do i =1, npt - j = ipt(i) - -! -! estimate "nhills" => stochastic choices for OGWs -! - if (taub(i) > 0.) then -! -! max_kxridge =min( .5*sigma(j)/hprime(j), kmax) -! ridge-dependent dkx = (max_kxridge -kxmin)/(nw-1) -! option to make grid-box variable kx-spectra kxw = kxmin+(iw-1)*dkx -! - wave_act(1:nw, 1:levs+1) = 1.0 - ksrc = kref(i) - tauz(1:ksrc) = taub(i) - taub_kx(1:nw) = tau_kx(1:nw) * taub(i) - wkdis(:,:) = kedmin - - call oro_meanflow(levs, nzi, u1(j,:), v1(j,:), t1(j,:), & - & prsi(j,:), prsL(j,:), grav, con_rd, & - & del(j,:), rho(i,:), & - & bn2(i,:), uzi, rhoi,ktur, kalp,dzi, & - & xn(i), yn(i)) - - fcor2 = (2*omega*sinlat(j))*(2*omega*sinlat(j))*fc_flag - - k = ksrc - - bv2 = bn2(i,k) - uz = uzi(k) !u1(j,ksrc)*xn(i)+v1(j,ksrc)*yn(i)! - kturb = ktur(k) - rayf = kalp(k) - rhoint = rhoi(k) - dzmet = dzi(k) - kzw = max(sqrt(bv2)/max(cxmin, uz), mkzmin) -! -! specify oro-kx spectra and related variables k=ksrc -! - do iw = 1, nw - kxw = akx(iw) - cxoro(iw) = 0.0 - uz - c2f2(iw) = fcor2/akx2(iw) - wrms(iw,k)= taub_kx(iw)/rhoint*kzw/kxw - tau_sp(iw, k) = taub_kx(iw) -! -! - if (cxoro(iw) > cxmin) then - wave_act(iw,k:levs+1) = 0. ! crit-level - else - cdf2(iw) = cxoro(iw)*cxoro(iw) -c2f2(iw) - if ( cdf2(iw) < cxmin2) then - wave_act(iw,k:levs+1) = 0. ! coriolis cut-off - else - kzw2 = max(Bv2/Cdf2(iw) - akx2(iw), mkz2min) - kzw = sqrt(kzw2) - akzw(iw,k)= kzw - wrms(iw,k)= taub_kx(iw)/rhoint * kzw/kxw - endif - endif - enddo ! nw-spectral loop -! -! defined abobe, k = ksrc: akx(nworo), cxoro(nworo), tau_sp(ksrc, nworo) -! propagate upward multiwave-spectra are filtered by dissipation & instability -! -! tau_sp(:,ksrc+1:levs+1) = tau_sp(:, ksrc) - do k= ksrc+1, levs - uz = uzi(k) - bv2 =bn2(i,k) - bv = sqrt(bv2) - rayf = kalp(k) - rhoint= rhoi(k) - dzmet = dzi(k) - rhofac = rhoi(k-1)/rhoi(k) - - do iw = 1, nworo -! - if (wave_act(iw, k-1) <= 0.0) cycle - cxoro(iw)= 0.0 - uz - if ( cxoro(iw) > cxmin) then - wave_act(iw,k:levs+1) = 0.0 ! crit-level - else - cdf2(iw) = cxoro(iw)*cxoro(iw) -c2f2(iw) - if ( cdf2(iw) < cxmin2) wave_act(iw,k:levs+1) = 0.0 - endif - if ( wave_act(iw,k) <= 0.0) cycle -! -! upward propagation -! - kzw2 = Bv2/Cdf2(iw) - akx2(iw) - - if (kzw2 < mkz2min) then - wave_act(iw,k:levs+1) = 0.0 - else -! -! upward propagation w/o reflection -! - kxw = akx(iw) - kzw = sqrt(kzw2) - akzw(iw,k) = kzw - kzw3 = kzw2*kzw - - cx = cxoro(iw) - betadis = cdf2(iw) / (Cx*Cx+c2f2(iw)) - betaM = 1.0 / (1.0+betadis) - betaT = 1.0 - BetaM - kds = wkdis(iw,k-1) - - etws = wrms(iw,k-1)*rhofac * kzw/akzw(iw,k-1) - - kturb = ktur(k)+pkdis(j,k-1) - wfiM = kturb*kzw2 +rayf - wfiT = wfiM ! do updates with Pr-numbers Kv/Kt - cdf1 = sqrt(Cdf2(iw)) - wfdM = wfiM/(kxw*Cdf1)*BetaM - wfdT = wfiT/(kxw*Cdf1)*BetaT - kzi = 2.*kzw*(wfdM+wfdT)*dzmet - Fdis = exp(-kzi) - - etwk = etws*Fdis - Cx2sat = Linsat2*Cdf2(iw) - - if (etwk > cx2sat) then - Kds = kxw*Cdf1*rhp2/kzw3 - etwk = cx2sat - wfiM = kds*kzw2 - wfdM = wfiM/(kxw*Cdf1) - kzi = 2.*kzw*(wfdm + wfdm)*dzmet - etwk = cx2sat*exp(-kzi) - endif -! if( lat(j) eq 40.5 ) then stop - wkdis(iw,k) = kds - wrms(iw,k) = etwk - tauk = etwk*kxw/kzw - tau_sp(iw,k) = tauk *rhoint - if ( tau_sp(iw,k) > tau_sp(iw,k-1)) & - & tau_sp(iw,k) = tau_sp(iw,k-1) - - ENDIF ! upward - ENDDO ! spectral - -!......... do spectral sum of rms, wkdis, tau - - tauz(k) = sum( tau_sp(:,k)*wave_act(:,k) ) - rms_wind(k) = sum( wrms(:,k)*wave_act(:,k) ) - - pkdis(j,k) = sum(wkdis(:,k)*wave_act(:,k))+rms_wind(k)*rtau - - if (pkdis(j,k) > kedmax) pkdis(j,k) = kedmax - - ENDDO ! k=ksrc+1, levs - - k = ksrc - tauz(k) = sum(tau_sp(:,k)*wave_act(:,k)) - tauz(k) = tauz(k+1) ! zero momentum dep-n at k=ksrc - - pkdis(j,k) = sum(wkdis(:,k)*wave_act(:,k)) - rms_wind(k) = sum(wrms(:,k)*wave_act(:,k)) - tauz(levs+1) = tauz(levs) - taup(i, 1:levs+1) = tauz(1:levs+1) - do k=ksrc, levs - taud(i,k) = ( tauz(k+1) - tauz(k))*grav/del(j,k) -! if (taud(i,k) .gt. 0)taud(i,k)=taud(i,k)*.01 -! if (abs(taud(i,k)).ge.axmax)taud(i,k)=sign(taud(i,k),axmax) - enddo - endif ! taub > 0 - enddo ! oro-points (i, j, ipt) -!23456 - end subroutine oro_wam_2017 -!------------------------------------------------------------- -! -! define mean flow and dissipation for OGW-kx spectrum -! -!------------------------------------------------------------- - subroutine oro_meanflow(nz, nzi, u1, v1, t1, pint, pmid, & - & grav, con_rd, & - & delp, rho, bn2, uzi, rhoi, ktur, kalp, dzi, xn, yn) - - use ugwp_common_v1 , only : velmin, dw2min - implicit none - - integer :: nz, nzi - real, dimension(nz ) :: u1, v1, t1, delp, rho, pmid - real, dimension(nz ) :: bn2 ! define at the interfaces - real, dimension(nz+1) :: pint - real :: xn, yn - real,intent(in) :: grav, con_rd -! output - - real, dimension(nz+1) :: dzi, uzi, rhoi, ktur, kalp - -! locals - integer :: i, j, k - real :: ui, vi, ti, uz, vz, shr2, rdz, kamp - real :: zgrow, zmet, rdpm, ritur, kmol, w1 - real :: rgrav, rdi -! paremeters - real, parameter :: hps = 7000., rpspa = 1.e-5 - real, parameter :: rhps=1.0/hps - real, parameter :: h4= 0.25/hps - real, parameter :: rimin = 1.0/8.0, kedmin = 0.01 - real, parameter :: lturb = 30. , uturb = 150.0 - real, parameter :: lsc2 = lturb*lturb,usc2 = uturb*uturb - kalp(1:nzi) = 2.e-7 ! radiative damping - - rgrav = 1.0/grav - rdi = 1.0/con_rd - - do k=2, nz - rdpm = grav/(pmid(k-1)-pmid(k)) - ui = .5*(u1(k-1)+u1(k)) - vi = .5*(v1(k-1)+v1(k)) - uzi(k) = Ui*xn + Vi*yn - ti = .5*(t1(k-1)+t1(k)) - rhoi(k) = rdi*pint(k)/ti - rdz = rdpm *rhoi(k) - dzi(k) = 1./rdz - uz = u1(k)-u1(k-1) - vz = v1(k)-v1(k-1) - shr2 = rdz*rdz*(max(uz*uz+vz*vz, dw2min)) - zmet = -hps*alog(pint(k)*rpspa) - zgrow = exp(zmet*h4) - kmol = 2.e-5*exp(zmet*rhps)+kedmin - ritur = max(bn2(k)/shr2, rimin) - kamp = sqrt(shr2)*lsc2 *zgrow - w1 = 1./(1. + 5*ritur) - ktur(k) = kamp * w1 * w1 +kmol - enddo - - k = 1 - uzi(k) = uzi(k+1) - ktur(k) = ktur(k+1) - rhoi(k) = rdi*pint(k)/t1(k+1) - dzi(k) = rgrav*delp(k)/rhoi(k) - - k = nzi - uzi(k) = uzi(k-1) - ktur(k) = ktur(k-1) - rhoi(k) = rhoi(k-1)*.5 - dzi(k) = dzi(k-1) - - end subroutine oro_meanflow - -end module cires_orowam2017 diff --git a/physics/cires_ugwp.F90 b/physics/cires_ugwp.F90 index f8ade39a9..a40da85ca 100644 --- a/physics/cires_ugwp.F90 +++ b/physics/cires_ugwp.F90 @@ -10,6 +10,7 @@ !! 3. GW Effects: Unified representation of GW impacts on the "resolved" flow for all sources (energy-balanced schemes for momentum, heat and mixing). !! https://www.weather.gov/media/sti/nggps/Presentations%202017/02%20NGGPS_VYUDIN_2017_.pdf +!>\defgroup cires_ugwp_run Unified Gravity Wave Physics General Algorithm module cires_ugwp use machine, only: kind_phys @@ -54,7 +55,7 @@ subroutine cires_ugwp_init (me, master, nlunit, input_nml_file, logunit, & integer, intent (in) :: latr real(kind=kind_phys), intent (in) :: ak(:), bk(:) real(kind=kind_phys), intent (in) :: dtp - real(kind=kind_phys), intent (in) :: cdmbgwd(4), cgwf(2) ! "scaling" controls for "old" GFS-GW schemes + real(kind=kind_phys), intent (in) :: cdmbgwd(:), cgwf(:) ! "scaling" controls for "old" GFS-GW schemes real(kind=kind_phys), intent (in) :: pa_rf_in, tau_rf_in real(kind=kind_phys), intent (in) :: con_p0 logical, intent (in) :: do_ugwp @@ -136,8 +137,6 @@ end subroutine cires_ugwp_finalize ! order = dry-adj=>conv=mp-aero=>radiation -sfc/land- chem -> vertdiff-> [rf-gws]=> ion-re ! ----------------------------------------------------------------------- !>@brief These subroutines and modules execute the CIRES UGWP Version 0 -!>\defgroup cires_ugwp_run Unified Gravity Wave Physics General Algorithm -!> @{ !! The physics of NGWs in the UGWP framework (Yudin et al. 2018 \cite yudin_et_al_2018) is represented by four GW-solvers, which is introduced in Lindzen (1981) \cite lindzen_1981, Hines (1997) \cite hines_1997, Alexander and Dunkerton (1999) \cite alexander_and_dunkerton_1999, and Scinocca (2003) \cite scinocca_2003. The major modification of these GW solvers is represented by the addition of the background dissipation of temperature and winds to the saturation criteria for wave breaking. This feature is important in the mesosphere and thermosphere for WAM applications and it considers appropriate scale-dependent dissipation of waves near the model top lid providing the momentum and energy conservation in the vertical column physics (Shaw and Shepherd 2009 \cite shaw_and_shepherd_2009). In the UGWP-v0, the modification of Scinocca (2003) \cite scinocca_2003 scheme for NGWs with non-hydrostatic and rotational effects for GW propagations and background dissipation is represented by the subroutine \ref fv3_ugwp_solv2_v0. In the next release of UGWP, additional GW-solvers will be implemented along with physics-based triggering of waves and stochastic approaches for selection of GW modes characterized by horizontal phase velocities, azimuthal directions and magnitude of the vertical momentum flux (VMF). !! !! In UGWP-v0, the specification for the VMF function is adopted from the GEOS-5 global atmosphere model of GMAO NASA/GSFC, as described in Molod et al. (2015) \cite molod_et_al_2015 and employed in the MERRRA-2 reanalysis (Gelaro et al., 2017 \cite gelaro_et_al_2017). The Fortran subroutine \ref slat_geos5_tamp describes the latitudinal shape of VMF-function as displayed in Figure 3 of Molod et al. (2015) \cite molod_et_al_2015. It shows that the enhanced values of VMF in the equatorial region gives opportunity to simulate the QBO-like oscillations in the equatorial zonal winds and lead to more realistic simulations of the equatorial dynamics in GEOS-5 operational and MERRA-2 reanalysis products. For the first vertically extended version of FV3GFS in the stratosphere and mesosphere, this simplified function of VMF allows us to tune the model climate and to evaluate multi-year simulations of FV3GFS with the MERRA-2 and ERA-5 reanalysis products, along with temperature, ozone, and water vapor observations of current satellite missions. After delivery of the UGWP-code, the EMC group developed and tested approach to modulate the zonal mean NGW forcing by 3D-distributions of the total precipitation as a proxy for the excitation of NGWs by convection and the vertically-integrated (surface - tropopause) Turbulent Kinetic Energy (TKE). The verification scores with updated NGW forcing, as reported elsewhere by EMC researchers, display noticeable improvements in the forecast scores produced by FV3GFS configuration extended into the mesosphere. @@ -164,24 +163,24 @@ subroutine cires_ugwp_run(do_ugwp, me, master, im, levs, ntrac, dtp, kdt, lonr ! interface variables integer, intent(in) :: me, master, im, levs, ntrac, kdt, lonr, nmtvr - integer, intent(in), dimension(im) :: kpbl - real(kind=kind_phys), intent(in), dimension(im) :: oro, oro_uf, hprime, oc, theta, sigma, gamma + integer, intent(in), dimension(:) :: kpbl + real(kind=kind_phys), intent(in), dimension(:) :: oro, oro_uf, hprime, oc, theta, sigma, gamma logical, intent(in) :: flag_for_gwd_generic_tend ! elvmax is intent(in) for CIRES UGWP, but intent(inout) for GFS GWDPS - real(kind=kind_phys), intent(inout), dimension(im) :: elvmax - real(kind=kind_phys), intent(in), dimension(im, 4) :: clx, oa4 - real(kind=kind_phys), intent(in), dimension(im) :: xlat, xlat_d, sinlat, coslat, area - real(kind=kind_phys), intent(in), dimension(im, levs) :: del, ugrs, vgrs, tgrs, prsl, prslk, phil - real(kind=kind_phys), intent(in), dimension(im, levs+1) :: prsi, phii - real(kind=kind_phys), intent(in), dimension(im, levs, ntrac):: qgrs - real(kind=kind_phys), intent(in) :: dtp, cdmbgwd(4) + real(kind=kind_phys), intent(inout), dimension(:) :: elvmax + real(kind=kind_phys), intent(in), dimension(:, :) :: clx, oa4 + real(kind=kind_phys), intent(in), dimension(:) :: xlat, xlat_d, sinlat, coslat, area + real(kind=kind_phys), intent(in), dimension(:, :) :: del, ugrs, vgrs, tgrs, prsl, prslk, phil + real(kind=kind_phys), intent(in), dimension(:, :) :: prsi, phii + real(kind=kind_phys), intent(in), dimension(:,:,:):: qgrs + real(kind=kind_phys), intent(in) :: dtp, cdmbgwd(:) logical, intent(in) :: do_ugwp, do_tofd, ldiag_ugwp - real(kind=kind_phys), intent(out), dimension(im) :: dusfcg, dvsfcg - real(kind=kind_phys), intent(out), dimension(im) :: zmtb, zlwb, zogw, rdxzb - real(kind=kind_phys), intent(out), dimension(im) :: tau_mtb, tau_ogw, tau_tofd, tau_ngw - real(kind=kind_phys), intent(out), dimension(im, levs):: gw_dudt, gw_dvdt, gw_dtdt, gw_kdis - real(kind=kind_phys), intent(out), dimension(im, levs):: dudt_mtb, dudt_ogw, dudt_tms + real(kind=kind_phys), intent(out), dimension(:) :: dusfcg, dvsfcg + real(kind=kind_phys), intent(out), dimension(:) :: zmtb, zlwb, zogw, rdxzb + real(kind=kind_phys), intent(out), dimension(:) :: tau_mtb, tau_ogw, tau_tofd, tau_ngw + real(kind=kind_phys), intent(out), dimension(:, :):: gw_dudt, gw_dvdt, gw_dtdt, gw_kdis + real(kind=kind_phys), intent(out), dimension(:, :):: dudt_mtb, dudt_ogw, dudt_tms ! dtend is only allocated if ldiag=.true. real(kind=kind_phys), optional, intent(inout) :: dtend(:,:,:) @@ -192,13 +191,13 @@ subroutine cires_ugwp_run(do_ugwp, me, master, im, levs, ntrac, dtp, kdt, lonr logical, intent(in) :: ldiag3d, lssav ! These arrays only allocated if ldiag_ugwp = .true. - real(kind=kind_phys), intent(out), dimension(:,:) :: du3dt_mtb, du3dt_ogw, du3dt_tms + real(kind=kind_phys), intent(inout), dimension(:,:) :: du3dt_mtb, du3dt_ogw, du3dt_tms - real(kind=kind_phys), intent(inout), dimension(im, levs):: dudt, dvdt, dtdt + real(kind=kind_phys), intent(inout), dimension(:, :):: dudt, dvdt, dtdt real(kind=kind_phys), intent(in) :: con_g, con_pi, con_cp, con_rd, con_rv, con_fvirt, con_omega - real(kind=kind_phys), intent(in), dimension(im) :: rain + real(kind=kind_phys), intent(in), dimension(:) :: rain integer, intent(in) :: ntke real(kind=kind_phys), intent(in), dimension(:,:) :: q_tke, dqdt_tke @@ -391,5 +390,4 @@ subroutine cires_ugwp_run(do_ugwp, me, master, im, levs, ntrac, dtp, kdt, lonr end subroutine cires_ugwp_run !! @} -!>@} end module cires_ugwp diff --git a/physics/cires_ugwp_post.F90 b/physics/cires_ugwp_post.F90 index 68c90bc55..bc75f10f3 100644 --- a/physics/cires_ugwp_post.F90 +++ b/physics/cires_ugwp_post.F90 @@ -1,11 +1,11 @@ !> \file cires_ugwp_post.F90 !! This file contains + +!>\defgroup cires_ugwp_post_mod CIRES UGWP Scheme Post module cires_ugwp_post contains -!>\defgroup cires_ugwp_post CIRES UGWP Scheme Post -!! @{ subroutine cires_ugwp_post_init () end subroutine cires_ugwp_post_init @@ -71,5 +71,4 @@ end subroutine cires_ugwp_post_run subroutine cires_ugwp_post_finalize () end subroutine cires_ugwp_post_finalize -!! @} end module cires_ugwp_post diff --git a/physics/cires_ugwpv1_oro.F90 b/physics/cires_ugwpv1_oro.F90 index 46191f404..904731b16 100644 --- a/physics/cires_ugwpv1_oro.F90 +++ b/physics/cires_ugwpv1_oro.F90 @@ -848,7 +848,6 @@ subroutine orogw_v1 (im, km, imx, me, master, dtp, kdt, do_tofd, & call oro_spectral_solver(im, km, npt, ipt, kref, kdt, me, master, & dtp, dxres, taub, u1, v1, t1, xn, yn, bnv2, ro, prsi,prsl, & - grav, omega1, rd, & del, sigma, hprime, gamma, theta, sinlat, xlatd, taup, taud, pkdis) endif ! oro_linsat - linsatdis-solver for stationary OGWs diff --git a/physics/cnvc90.f b/physics/cnvc90.f index fe3601ce2..bbdf0aafe 100644 --- a/physics/cnvc90.f +++ b/physics/cnvc90.f @@ -27,16 +27,16 @@ SUBROUTINE cnvc90_run(CLSTP,IM,RN,KBOT,KTOP,KM,PRSI, & ! Interface variables real(kind=kind_phys), intent(in) :: clstp integer, intent(in) :: im, km - real(kind=kind_phys), intent(in) :: RN(IM) - integer, intent(in) :: KBOT(IM) - integer, intent(in) :: KTOP(IM) - real(kind=kind_phys), intent(in) :: prsi(IM,km+1) - real(kind=kind_phys), intent(inout) :: ACV(IM) - real(kind=kind_phys), intent(inout) :: ACVB(IM) - real(kind=kind_phys), intent(inout) :: ACVT(IM) - real(kind=kind_phys), intent(inout) :: CV(IM) - real(kind=kind_phys), intent(inout) :: CVB(IM) - real(kind=kind_phys), intent(inout) :: CVT(IM) + real(kind=kind_phys), intent(in) :: RN(:) + integer, intent(in) :: KBOT(:) + integer, intent(in) :: KTOP(:) + real(kind=kind_phys), intent(in) :: prsi(:,:) + real(kind=kind_phys), intent(inout) :: ACV(:) + real(kind=kind_phys), intent(inout) :: ACVB(:) + real(kind=kind_phys), intent(inout) :: ACVT(:) + real(kind=kind_phys), intent(inout) :: CV(:) + real(kind=kind_phys), intent(inout) :: CVB(:) + real(kind=kind_phys), intent(inout) :: CVT(:) character(len=*), intent(out) :: errmsg integer, intent(out) :: errflg @@ -130,5 +130,6 @@ END SUBROUTINE cnvc90_run subroutine cnvc90_finalize() end subroutine cnvc90_finalize + end module cnvc90 diff --git a/physics/cs_conv.F90 b/physics/cs_conv.F90 index a7b03d387..d47dcd457 100644 --- a/physics/cs_conv.F90 +++ b/physics/cs_conv.F90 @@ -19,23 +19,23 @@ subroutine cs_conv_pre_run(im, levs, ntrac, ncld, q, clw1, clw2, & & errmsg, errflg) - use machine , only : r8 => kind_phys + use machine , only : kind_phys implicit none ! --- inputs integer, intent(in) :: im, levs, ntrac, ncld - real(r8), dimension(im,levs), intent(in) :: q - real(r8), dimension(im,levs), intent(in) :: clw1,clw2 - real(r8), dimension(im), intent(in) :: work1, work2 - real(r8), intent(in) :: cs_parm1, cs_parm2 + real(kind_phys), dimension(:,:), intent(in) :: q + real(kind_phys), dimension(:,:), intent(in) :: clw1,clw2 + real(kind_phys), dimension(:), intent(in) :: work1, work2 + real(kind_phys), intent(in) :: cs_parm1, cs_parm2 ! --- input/output - real(r8), dimension(ntrac-ncld+2), intent(out) :: fswtr, fscav - real(r8), dimension(im), intent(out) :: wcbmax - real(r8), dimension(im,levs), intent(out) :: save_q1,save_q2 + real(kind_phys), dimension(:), intent(out) :: fswtr, fscav + real(kind_phys), dimension(:), intent(out) :: wcbmax + real(kind_phys), dimension(:,:), intent(out) :: save_q1,save_q2 ! save_q3 is not allocated for Zhao-Carr MP - real(r8), dimension(:,:), intent(out) :: save_q3 + real(kind_phys), dimension(:,:), intent(out) :: save_q3 character(len=*), intent(out) :: errmsg integer, intent(out) :: errflg @@ -78,23 +78,22 @@ end subroutine cs_conv_post_init subroutine cs_conv_post_finalize() end subroutine cs_conv_post_finalize -!! -!! \section arg_table_cs_conv_post_run Argument Table +!> \section arg_table_cs_conv_post_run Argument Table !! \htmlinclude cs_conv_post_run.html !! subroutine cs_conv_post_run(im, kmax, do_aw, sigmatot, sigmafrac, errmsg, errflg) - use machine , only : r8 => kind_phys + use machine , only : kind_phys implicit none ! --- inputs integer, intent(in) :: im, kmax logical, intent(in) :: do_aw - real(r8), dimension(im,kmax), intent(in) :: sigmatot + real(kind_phys), dimension(:,:), intent(in) :: sigmatot ! --- input/output - real(r8), dimension(im,kmax), intent(out) :: sigmafrac + real(kind_phys), dimension(:,:), intent(out) :: sigmafrac character(len=*), intent(out) :: errmsg integer, intent(out) :: errflg @@ -132,7 +131,7 @@ module cs_conv !! Author: Minoru Chikira !--------------------------------------------------------------------------------- ! - use machine , only : r8 => kind_phys + use machine , only : kind_phys use physcons, only : cp => con_cp, grav => con_g, & & rair => con_rd, rvap => con_rv, & & cliq => con_cliq, cvap => con_cvap, & @@ -146,20 +145,20 @@ module cs_conv private ! Make default type private to the module - real(r8), parameter :: zero=0.0d0, one=1.0d0, half=0.5d0 - real(r8), parameter :: cpoel=cp/el, cpoesub=cp/(el+emelt), esubocp=1.0/cpoesub, & + real(kind_phys), parameter :: zero=0.0d0, one=1.0d0, half=0.5d0 + real(kind_phys), parameter :: cpoel=cp/el, cpoesub=cp/(el+emelt), esubocp=1.0/cpoesub, & elocp=el/cp, oneocp=one/cp, gocp=grav/cp, gravi=one/grav,& - emeltocp=emelt/cp, cpoemelt=cp/emelt, epsln=1.e-10_r8 + emeltocp=emelt/cp, cpoemelt=cp/emelt, epsln=1.e-10_kind_phys - real(r8), parameter :: fact1=(cvap-cliq)/rvap, fact2=el/rvap-fact1*t0c !< to calculate d(qs)/dT + real(kind_phys), parameter :: fact1=(cvap-cliq)/rvap, fact2=el/rvap-fact1*t0c !< to calculate d(qs)/dT logical, parameter :: adjustp=.true. ! logical, parameter :: adjustp=.false. ! Tuning parameters set from namelist ! -! real(r8), parameter, public :: CLMD = 0.60, & !< entrainment efficiency (now thru argument) - real(r8), parameter, public :: & +! real(kind_phys), parameter, public :: CLMD = 0.60, & !< entrainment efficiency (now thru argument) + real(kind_phys), parameter, public :: & PA=0.15, & !< factor for buoyancy to affect updraft velocity CPRES = 0.55, & !< pressure factor for momentum transport ALP0 = 5.0e7, & !< alpha parameter in prognostic closure @@ -178,11 +177,11 @@ module cs_conv !DD precz0 and preczh control partitioning of water between detrainment !DD and precipitation. Decrease for more precip - real(r8), public :: precz0, preczh, clmd, clmp, clmdpa + real(kind_phys), public :: precz0, preczh, clmd, clmp, clmdpa ! ! Private data ! - real(r8), parameter :: unset_r8 = -999._r8 ! missing value + real(kind_phys), parameter :: unset_kind_phys = -999._kind_phys ! missing value ! integer :: iulog !< unit to write debugging and diagnostic output !DD Note - see if I can find corresponding variable in a GFS module @@ -295,102 +294,103 @@ subroutine cs_conv_run( IJSDIM , KMAX , ntracp1 , NN, & ! input arguments ! INTEGER, INTENT(IN) :: IJSDIM, KMAX, ntracp1, nn, NTR, mype, nctp, mp_phys, kdt, lat !! DD, for GFS, pass in - logical, intent(in) :: otspt(1:ntracp1,1:2)! otspt(:,1) - on/off switch for tracer transport by updraft and + logical, intent(in) :: otspt(:,:) ! otspt(:,1) - on/off switch for tracer transport by updraft and ! downdraft. should not include subgrid PDF and turbulence ! otspt(:,2) - on/off switch for tracer transport by subsidence ! should include subgrid PDF and turbulence - real(r8), intent(inout) :: t(IJSDIM,KMAX) ! temperature at mid-layer (K) - real(r8), intent(inout) :: q(IJSDIM,KMAX) ! water vapor array including moisture (kg/kg) - real(r8), intent(inout) :: clw(IJSDIM,KMAX,nn) ! tracer array including cloud condensate (kg/kg) - real(r8), intent(in) :: pap(IJSDIM,KMAX) ! pressure at mid-layer (Pa) - real(r8), intent(in) :: paph(IJSDIM,KMAX+1) ! pressure at boundaries (Pa) - real(r8), intent(in) :: zm(IJSDIM,KMAX) ! geopotential at mid-layer (m) - real(r8), intent(in) :: zi(IJSDIM,KMAX+1) ! geopotential at boundaries (m) - real(r8), intent(in) :: fscav(ntr), fswtr(ntr), wcbmaxm(ijsdim) - real(r8), intent(in) :: precz0in, preczhin, clmdin + real(kind_phys), intent(inout) :: t(:,:) ! temperature at mid-layer (K) + real(kind_phys), intent(inout) :: q(:,:) ! water vapor array including moisture (kg/kg) + real(kind_phys), intent(inout) :: clw(:,:,:) ! tracer array including cloud condensate (kg/kg) + real(kind_phys), intent(in) :: pap(:,:) ! pressure at mid-layer (Pa) + real(kind_phys), intent(in) :: paph(:,:) ! pressure at boundaries (Pa) + real(kind_phys), intent(in) :: zm(:,:) ! geopotential at mid-layer (m) + real(kind_phys), intent(in) :: zi(:,:) ! geopotential at boundaries (m) + real(kind_phys), intent(in) :: fscav(:), fswtr(:), wcbmaxm(:) + real(kind_phys), intent(in) :: precz0in, preczhin, clmdin ! added for cs_convr - real(r8), intent(inout) :: u(IJSDIM,KMAX) ! zonal wind at mid-layer (m/s) - real(r8), intent(inout) :: v(IJSDIM,KMAX) ! meridional wind at mid-layer (m/s) + real(kind_phys), intent(inout) :: u(:,:) ! zonal wind at mid-layer (m/s) + real(kind_phys), intent(inout) :: v(:,:) ! meridional wind at mid-layer (m/s) - real(r8), intent(in) :: DELTA ! physics time step - real(r8), intent(in) :: DELTI ! dynamics time step (model time increment in seconds) + real(kind_phys), intent(in) :: DELTA ! physics time step + real(kind_phys), intent(in) :: DELTI ! dynamics time step (model time increment in seconds) logical, intent(in) :: do_aw, do_awdd, flx_form ! ! modified arguments ! - real(r8), intent(inout) :: CBMFX(IJSDIM,nctp) ! cloud base mass flux (kg/m2/s) + real(kind_phys), intent(inout) :: CBMFX(:,:) ! cloud base mass flux (kg/m2/s) ! ! output arguments ! ! updraft, downdraft, and detrainment mass flux (kg/m2/s) - real(r8), intent(inout), dimension(IJSDIM,KMAX) :: ud_mf, dd_mf, dt_mf + real(kind_phys), intent(inout), dimension(:,:) :: ud_mf, dd_mf, dt_mf - real(r8), intent(out) :: rain1(IJSDIM) ! lwe thickness of deep convective precipitation amount (m) + real(kind_phys), intent(out) :: rain1(:) ! lwe thickness of deep convective precipitation amount (m) ! GJF* These variables are conditionally allocated depending on whether the ! Morrison-Gettelman microphysics is used, so they must be declared ! using assumed shape. - real(r8), intent(out), dimension(:,:) :: qlcn, qicn, w_upi,cnv_mfd, & - cnv_dqldt, clcn, cnv_fice, & - cnv_ndrop, cnv_nice, cf_upi + real(kind_phys), intent(out), dimension(:,:) :: qlcn, qicn, w_upi,cnv_mfd, & + cnv_dqldt, clcn, cnv_fice, & + cnv_ndrop, cnv_nice, cf_upi ! *GJF - integer, intent(inout) :: kcnv(ijsdim) ! zero if no deep convection and 1 otherwise + logical, intent(in) :: lprnt + integer, intent(in) :: ipr + integer, intent(inout) :: kcnv(:) ! zero if no deep convection and 1 otherwise character(len=*), intent(out) :: errmsg integer, intent(out) :: errflg !DDsigma - output added for AW sigma diagnostics ! interface sigma and vertical velocity by cloud type (1=sfc) -! real(r8), intent(out), dimension(IJSDIM,KMAX,nctp) :: sigmai, vverti - real(r8), intent(out), dimension(IJSDIM,KMAX) :: sigma ! sigma sigma totaled over cloud type - on interfaces (1=sfc) +! real(kind_phys), intent(out), dimension(:,:,:) :: sigmai, vverti + real(kind_phys), intent(out), dimension(:,:) :: sigma ! sigma sigma totaled over cloud type - on interfaces (1=sfc) ! sigma terms in eq 91 and 92 -! real(r8), dimension(IJSDIM,KMAX) :: sfluxterm, qvfluxterm, condterm +! real(kind_phys), dimension(IJSDIM,KMAX) :: sfluxterm, qvfluxterm, condterm !DDsigma ! ! output arguments of CS_CUMLUS ! - real(r8), dimension(IJSDIM,KMAX,nctp) :: vverti + real(kind_phys), dimension(IJSDIM,KMAX,nctp) :: vverti - real(r8) GTT(IJSDIM,KMAX) !< temperature tendency [K/s] - real(r8) GTQ(IJSDIM,KMAX,NTR) !< tracer tendency [kg/kg/s] - real(r8) GTU(IJSDIM,KMAX) !< zonal velocity tendency [m/s2] - real(r8) GTV(IJSDIM,KMAX) !< meridional velocity tendency [m/s2] - real(r8) GTPRP(IJSDIM,KMAX) !< precipitation (including snowfall) flux at interfaces [kg/m2/s] - real(r8) GSNWP(IJSDIM,KMAX) !< snowfall flux at interfaces [kg/m2/s] + real(kind_phys) GTT(IJSDIM,KMAX) !< temperature tendency [K/s] + real(kind_phys) GTQ(IJSDIM,KMAX,NTR) !< tracer tendency [kg/kg/s] + real(kind_phys) GTU(IJSDIM,KMAX) !< zonal velocity tendency [m/s2] + real(kind_phys) GTV(IJSDIM,KMAX) !< meridional velocity tendency [m/s2] + real(kind_phys) GTPRP(IJSDIM,KMAX) !< precipitation (including snowfall) flux at interfaces [kg/m2/s] + real(kind_phys) GSNWP(IJSDIM,KMAX) !< snowfall flux at interfaces [kg/m2/s] integer KT(IJSDIM,nctp) !< cloud top index for each cloud type - real(r8) :: cape(IJSDIM) !< convective available potential energy (J/kg) - real(r8) :: prec(IJSDIM) !< precipitation at surface (including snowfall) (kg/m2/s) - real(r8) :: snow(IJSDIM) !< snowfall at surface (kg/m2/s) + real(kind_phys) :: cape(IJSDIM) !< convective available potential energy (J/kg) + real(kind_phys) :: prec(IJSDIM) !< precipitation at surface (including snowfall) (kg/m2/s) + real(kind_phys) :: snow(IJSDIM) !< snowfall at surface (kg/m2/s) ! ! input arguments of CS_CUMLUS ! - real(r8) GDT(IJSDIM,KMAX) !< temperature [K] - real(r8) GDQ(IJSDIM,KMAX,NTR) !< tracers including moisture [kg/kg] !DDsigmadiag - real(r8) GDU(IJSDIM,KMAX) !< zonal wind [m/s] - real(r8) GDV(IJSDIM,KMAX) !< meridional wind [m/s] - real(r8) GDTM(IJSDIM,KMAX+1) !< temperature at boundaries of layers [K] - real(r8) GDP(IJSDIM,KMAX) !< pressure [Pa] - real(r8) GDPM(IJSDIM,KMAX+1) !< pressure at boundaries of layers [Pa] - real(r8) GDZ(IJSDIM,KMAX) !< altitude [m] - real(r8) GDZM(IJSDIM,KMAX+1) !< altitude at boundaries of layers [m] - real(r8) delp(IJSDIM,KMAX) !< pressure difference between layers [Pa] - real(r8) delpi(IJSDIM,KMAX) !< grav/delp + real(kind_phys) GDT(IJSDIM,KMAX) !< temperature [K] + real(kind_phys) GDQ(IJSDIM,KMAX,NTR) !< tracers including moisture [kg/kg] !DDsigmadiag + real(kind_phys) GDU(IJSDIM,KMAX) !< zonal wind [m/s] + real(kind_phys) GDV(IJSDIM,KMAX) !< meridional wind [m/s] + real(kind_phys) GDTM(IJSDIM,KMAX+1) !< temperature at boundaries of layers [K] + real(kind_phys) GDP(IJSDIM,KMAX) !< pressure [Pa] + real(kind_phys) GDPM(IJSDIM,KMAX+1) !< pressure at boundaries of layers [Pa] + real(kind_phys) GDZ(IJSDIM,KMAX) !< altitude [m] + real(kind_phys) GDZM(IJSDIM,KMAX+1) !< altitude at boundaries of layers [m] + real(kind_phys) delp(IJSDIM,KMAX) !< pressure difference between layers [Pa] + real(kind_phys) delpi(IJSDIM,KMAX) !< grav/delp ! ! local variables ! -!DD real(r8) :: zs(IJSDIM) !< surface height [m] +!DD real(kind_phys) :: zs(IJSDIM) !< surface height [m] integer KTMAX(IJSDIM) !< max of KT - real(r8) :: ftintm, wrk, wrk1, tem - integer i, k, n, ISTS, IENS, kp1, ipr + real(kind_phys) :: ftintm, wrk, wrk1, tem + integer i, k, n, ISTS, IENS, kp1 !DD borrowed from RAS to go form total condensate to ice/water separately ! parameter (tf=130.16, tcr=160.16, tcrf=1.0/(tcr-tf),tcl=2.0) ! parameter (tf=230.16, tcr=260.16, tcrf=1.0/(tcr-tf)) - real(r8), parameter :: tf=233.16, tcr=263.16, tcrf=1.0/(tcr-tf), tcl=2.0 + real(kind_phys), parameter :: tf=233.16, tcr=263.16, tcrf=1.0/(tcr-tf), tcl=2.0 logical, save :: first=.true. - logical lprnt ! Initialize CCPP error handling variables errmsg = '' @@ -724,208 +724,208 @@ SUBROUTINE CS_CUMLUS (im , IJSDIM, KMAX , NTR , & !DD dimensions logical, intent(in) :: otspt1(ntr), otspt2(ntr), lprnt ! ! [OUTPUT] - REAL(r8), INTENT(OUT) :: GTT (IJSDIM, KMAX ) ! heating rate - REAL(r8), INTENT(OUT) :: GTQ (IJSDIM, KMAX, NTR) ! change in q - REAL(r8), INTENT(OUT) :: GTU (IJSDIM, KMAX ) ! tendency of u - REAL(r8), INTENT(OUT) :: GTV (IJSDIM, KMAX ) ! tendency of v - REAL(r8), INTENT(OUT) :: CMDET (IJSDIM, KMAX ) ! detrainment mass flux + REAL(kind_phys), INTENT(OUT) :: GTT (IJSDIM, KMAX ) ! heating rate + REAL(kind_phys), INTENT(OUT) :: GTQ (IJSDIM, KMAX, NTR) ! change in q + REAL(kind_phys), INTENT(OUT) :: GTU (IJSDIM, KMAX ) ! tendency of u + REAL(kind_phys), INTENT(OUT) :: GTV (IJSDIM, KMAX ) ! tendency of v + REAL(kind_phys), INTENT(OUT) :: CMDET (IJSDIM, KMAX ) ! detrainment mass flux ! assuming there is no flux at the top of the atmospherea - Moorthi - REAL(r8), INTENT(OUT) :: GTPRP (IJSDIM, KMAX ) ! rain+snow flux - REAL(r8), INTENT(OUT) :: GSNWP (IJSDIM, KMAX ) ! snowfall flux - REAL(r8), INTENT(OUT) :: GMFX0 (IJSDIM, KMAX ) ! updraft mass flux - REAL(r8), INTENT(OUT) :: GMFX1 (IJSDIM, KMAX ) ! downdraft mass flux + REAL(kind_phys), INTENT(OUT) :: GTPRP (IJSDIM, KMAX ) ! rain+snow flux + REAL(kind_phys), INTENT(OUT) :: GSNWP (IJSDIM, KMAX ) ! snowfall flux + REAL(kind_phys), INTENT(OUT) :: GMFX0 (IJSDIM, KMAX ) ! updraft mass flux + REAL(kind_phys), INTENT(OUT) :: GMFX1 (IJSDIM, KMAX ) ! downdraft mass flux - REAL(r8), INTENT(OUT) :: CAPE (IJSDIM ) + REAL(kind_phys), INTENT(OUT) :: CAPE (IJSDIM ) INTEGER , INTENT(OUT) :: KT (IJSDIM, NCTP ) ! cloud top ! ! [MODIFIED] - REAL(r8), INTENT(INOUT) :: CBMFX (IM, NCTP) ! cloud base mass flux + REAL(kind_phys), INTENT(INOUT) :: CBMFX (IM, NCTP) ! cloud base mass flux !DDsigma - output added for AW sigma diagnostics ! sigma and vert. velocity as a function of cloud type (1==sfc) - real(r8), intent(out), dimension(IM,KMAX) :: sigma !sigma totaled over cloud type - on interfaces (1=sfc) - real(r8), intent(out), dimension(IM,KMAX,nctp) :: vverti + real(kind_phys), intent(out), dimension(IM,KMAX) :: sigma !sigma totaled over cloud type - on interfaces (1=sfc) + real(kind_phys), intent(out), dimension(IM,KMAX,nctp) :: vverti ! for computing AW flux form of tendencies ! The tendencies are summed over all cloud types -! real(r8), intent(out), dimension(IM,KMAX) :: & !DDsigmadiag - real(r8), allocatable, dimension(:,:) :: sfluxterm, qvfluxterm,& ! tendencies of DSE and water vapor due to eddy mass flux +! real(kind_phys), intent(out), dimension(IM,KMAX) :: & !DDsigmadiag + real(kind_phys), allocatable, dimension(:,:) :: sfluxterm, qvfluxterm,& ! tendencies of DSE and water vapor due to eddy mass flux qlfluxterm, qifluxterm,& ! tendencies of cloud water and cloud ice due to eddy mass flux ! The fluxes are for an individual cloud type and reused. ! condtermt, condtermq are eddy flux of temperature and water vapor condtermt, condtermq, frzterm, & prectermq, prectermfrz - real(r8), allocatable, dimension(:,:,:) :: trfluxterm ! tendencies of tracers due to eddy mass flux + real(kind_phys), allocatable, dimension(:,:,:) :: trfluxterm ! tendencies of tracers due to eddy mass flux ! ! [INPUT] - REAL(r8), INTENT(IN) :: GDT (IJSDIM, KMAX ) ! temperature T - REAL(r8), INTENT(IN) :: GDQ (IJSDIM, KMAX, NTR) ! humidity, tracer !DDsigmadiag - REAL(r8), INTENT(IN) :: GDU (IJSDIM, KMAX ) ! westerly u - REAL(r8), INTENT(IN) :: GDV (IJSDIM, KMAX ) ! southern wind v - REAL(r8), INTENT(IN) :: GDTM (IJSDIM, KMAX+1 ) ! temperature T - REAL(r8), INTENT(IN) :: GDP (IJSDIM, KMAX ) ! pressure P - REAL(r8), INTENT(IN) :: GDPM (IJSDIM, KMAX+1 ) ! pressure (half lev) - REAL(r8), INTENT(IN) :: GDZ (IJSDIM, KMAX ) ! altitude - REAL(r8), INTENT(IN) :: GDZM (IJSDIM, KMAX+1 ) ! altitude - REAL(r8), INTENT(IN) :: DELTA ! delta(t) (dynamics) - REAL(r8), INTENT(IN) :: DELTI ! delta(t) (internal variable) + REAL(kind_phys), INTENT(IN) :: GDT (IJSDIM, KMAX ) ! temperature T + REAL(kind_phys), INTENT(IN) :: GDQ (IJSDIM, KMAX, NTR) ! humidity, tracer !DDsigmadiag + REAL(kind_phys), INTENT(IN) :: GDU (IJSDIM, KMAX ) ! westerly u + REAL(kind_phys), INTENT(IN) :: GDV (IJSDIM, KMAX ) ! southern wind v + REAL(kind_phys), INTENT(IN) :: GDTM (IJSDIM, KMAX+1 ) ! temperature T + REAL(kind_phys), INTENT(IN) :: GDP (IJSDIM, KMAX ) ! pressure P + REAL(kind_phys), INTENT(IN) :: GDPM (IJSDIM, KMAX+1 ) ! pressure (half lev) + REAL(kind_phys), INTENT(IN) :: GDZ (IJSDIM, KMAX ) ! altitude + REAL(kind_phys), INTENT(IN) :: GDZM (IJSDIM, KMAX+1 ) ! altitude + REAL(kind_phys), INTENT(IN) :: DELTA ! delta(t) (dynamics) + REAL(kind_phys), INTENT(IN) :: DELTI ! delta(t) (internal variable) INTEGER, INTENT(IN) :: ISTS, IENS ! array range - real(r8), intent(in) :: fscav(ntr), fswtr(ntr), wcbmaxm(ijsdim) + real(kind_phys), intent(in) :: fscav(ntr), fswtr(ntr), wcbmaxm(ijsdim) ! ! [INTERNAL WORK] - REAL(r8), allocatable :: GPRCC (:, :) ! rainfall -! REAL(r8) GPRCC (IJSDIM, NTR) ! rainfall -! REAL(r8) GSNWC (IJSDIM) ! snowfall -! REAL(r8) CUMCLW(IJSDIM, KMAX) ! cloud water in cumulus -! REAL(r8) CUMFRC(IJSDIM) ! cumulus cloud fraction -! -! REAL(r8) GTCFRC(IJSDIM, KMAX) ! change in cloud fraction -! REAL(r8) FLIQC (IJSDIM, KMAX) ! liquid ratio in cumulus -! -! REAL(r8) GDCFRC(IJSDIM, KMAX) ! cloud fraction -! - REAL(r8) GDW (IJSDIM, KMAX) ! total water - REAL(r8) DELP (IJSDIM, KMAX) - REAL(r8) DELPI (IJSDIM, KMAX) - REAL(r8) GDQS (IJSDIM, KMAX) ! saturate moisture - REAL(r8) FDQS (IJSDIM, KMAX) - REAL(r8) GAM (IJSDIM, KMAX) - REAL(r8) GDS (IJSDIM, KMAX) ! dry static energy - REAL(r8) GDH (IJSDIM, KMAX) ! moist static energy - REAL(r8) GDHS (IJSDIM, KMAX) ! saturate MSE -! - REAL(r8) GCYM (IJSDIM, KMAX, NCTP)! norm. mass flux (half lev) - REAL(r8) GCHB (IJSDIM) ! cloud base MSE-Li*Qi - REAL(r8) GCWB (IJSDIM) ! cloud base total water - REAL(r8) GCUB (IJSDIM) ! cloud base U - REAL(r8) GCVB (IJSDIM) ! cloud base V - REAL(r8) GCIB (IJSDIM) ! cloud base ice - REAL(r8) GCtrB (IJSDIM,ntrq:ntr) ! cloud base tracer - REAL(r8) GCYT (IJSDIM, NCTP) ! norm. mass flux @top - REAL(r8) GCHT (IJSDIM, NCTP) ! cloud top MSE - REAL(r8) GCQT (IJSDIM, NCTP) ! cloud top q - REAL(r8) GCwT (IJSDIM) ! cloud top total water - REAL(r8) GCUT (IJSDIM, NCTP) ! cloud top U - REAL(r8) GCVT (IJSDIM, NCTP) ! cloud top V - REAL(r8) GCLT (IJSDIM, NCTP) ! cloud top cloud water - REAL(r8) GCIT (IJSDIM, NCTP) ! cloud top cloud ice - REAL(r8) GCtrT (IJSDIM, ntrq:ntr, NCTP) ! cloud top tracer - REAL(r8) GTPRT (IJSDIM, NCTP) ! precipitation/M - REAL(r8) GCLZ (IJSDIM, KMAX) ! cloud liquid for each CTP - REAL(r8) GCIZ (IJSDIM, KMAX) ! cloud ice for each CTP - -! REAL(r8) ACWF (IJSDIM, NCTP) ! cloud work function - REAL(r8) ACWF (IJSDIM ) ! cloud work function - REAL(r8) GPRCIZ(IJSDIM, KMAX) ! precipitation - REAL(r8) GSNWIZ(IJSDIM, KMAX) ! snowfall - REAL(r8) GTPRC0(IJSDIM) ! precip. before evap. - - REAL(r8) GMFLX (IJSDIM, KMAX) ! mass flux (updraft+downdraft) - REAL(r8) QLIQ (IJSDIM, KMAX) ! total cloud liquid - REAL(r8) QICE (IJSDIM, KMAX) ! total cloud ice - REAL(r8) GPRCI (IJSDIM, KMAX) ! rainfall generation - REAL(r8) GSNWI (IJSDIM, KMAX) ! snowfall generation - - REAL(r8) GPRCP (IJSDIM, KMAX) ! rainfall flux -! - REAL(r8) GTEVP (IJSDIM, KMAX) ! evaporation+sublimation - REAL(r8) GMDD (IJSDIM, KMAX) ! downdraft mass flux - -! REAL(r8) CUMHGT(IJSDIM, NCTP) ! cloud top height -! REAL(r8) CTOPP (IJSDIM) ! cloud top pressure - - REAL(r8) GDZTR (IJSDIM) ! tropopause height -! REAL(r8) FLIQOU(IJSDIM, KMAX) ! liquid ratio in cumulus + REAL(kind_phys), allocatable :: GPRCC (:, :) ! rainfall +! REAL(kind_phys) GPRCC (IJSDIM, NTR) ! rainfall +! REAL(kind_phys) GSNWC (IJSDIM) ! snowfall +! REAL(kind_phys) CUMCLW(IJSDIM, KMAX) ! cloud water in cumulus +! REAL(kind_phys) CUMFRC(IJSDIM) ! cumulus cloud fraction +! +! REAL(kind_phys) GTCFRC(IJSDIM, KMAX) ! change in cloud fraction +! REAL(kind_phys) FLIQC (IJSDIM, KMAX) ! liquid ratio in cumulus +! +! REAL(kind_phys) GDCFRC(IJSDIM, KMAX) ! cloud fraction +! + REAL(kind_phys) GDW (IJSDIM, KMAX) ! total water + REAL(kind_phys) DELP (IJSDIM, KMAX) + REAL(kind_phys) DELPI (IJSDIM, KMAX) + REAL(kind_phys) GDQS (IJSDIM, KMAX) ! saturate moisture + REAL(kind_phys) FDQS (IJSDIM, KMAX) + REAL(kind_phys) GAM (IJSDIM, KMAX) + REAL(kind_phys) GDS (IJSDIM, KMAX) ! dry static energy + REAL(kind_phys) GDH (IJSDIM, KMAX) ! moist static energy + REAL(kind_phys) GDHS (IJSDIM, KMAX) ! saturate MSE +! + REAL(kind_phys) GCYM (IJSDIM, KMAX, NCTP)! norm. mass flux (half lev) + REAL(kind_phys) GCHB (IJSDIM) ! cloud base MSE-Li*Qi + REAL(kind_phys) GCWB (IJSDIM) ! cloud base total water + REAL(kind_phys) GCUB (IJSDIM) ! cloud base U + REAL(kind_phys) GCVB (IJSDIM) ! cloud base V + REAL(kind_phys) GCIB (IJSDIM) ! cloud base ice + REAL(kind_phys) GCtrB (IJSDIM,ntrq:ntr) ! cloud base tracer + REAL(kind_phys) GCYT (IJSDIM, NCTP) ! norm. mass flux @top + REAL(kind_phys) GCHT (IJSDIM, NCTP) ! cloud top MSE + REAL(kind_phys) GCQT (IJSDIM, NCTP) ! cloud top q + REAL(kind_phys) GCwT (IJSDIM) ! cloud top total water + REAL(kind_phys) GCUT (IJSDIM, NCTP) ! cloud top U + REAL(kind_phys) GCVT (IJSDIM, NCTP) ! cloud top V + REAL(kind_phys) GCLT (IJSDIM, NCTP) ! cloud top cloud water + REAL(kind_phys) GCIT (IJSDIM, NCTP) ! cloud top cloud ice + REAL(kind_phys) GCtrT (IJSDIM, ntrq:ntr, NCTP) ! cloud top tracer + REAL(kind_phys) GTPRT (IJSDIM, NCTP) ! precipitation/M + REAL(kind_phys) GCLZ (IJSDIM, KMAX) ! cloud liquid for each CTP + REAL(kind_phys) GCIZ (IJSDIM, KMAX) ! cloud ice for each CTP + +! REAL(kind_phys) ACWF (IJSDIM, NCTP) ! cloud work function + REAL(kind_phys) ACWF (IJSDIM ) ! cloud work function + REAL(kind_phys) GPRCIZ(IJSDIM, KMAX) ! precipitation + REAL(kind_phys) GSNWIZ(IJSDIM, KMAX) ! snowfall + REAL(kind_phys) GTPRC0(IJSDIM) ! precip. before evap. + + REAL(kind_phys) GMFLX (IJSDIM, KMAX) ! mass flux (updraft+downdraft) + REAL(kind_phys) QLIQ (IJSDIM, KMAX) ! total cloud liquid + REAL(kind_phys) QICE (IJSDIM, KMAX) ! total cloud ice + REAL(kind_phys) GPRCI (IJSDIM, KMAX) ! rainfall generation + REAL(kind_phys) GSNWI (IJSDIM, KMAX) ! snowfall generation + + REAL(kind_phys) GPRCP (IJSDIM, KMAX) ! rainfall flux +! + REAL(kind_phys) GTEVP (IJSDIM, KMAX) ! evaporation+sublimation + REAL(kind_phys) GMDD (IJSDIM, KMAX) ! downdraft mass flux + +! REAL(kind_phys) CUMHGT(IJSDIM, NCTP) ! cloud top height +! REAL(kind_phys) CTOPP (IJSDIM) ! cloud top pressure + + REAL(kind_phys) GDZTR (IJSDIM) ! tropopause height +! REAL(kind_phys) FLIQOU(IJSDIM, KMAX) ! liquid ratio in cumulus INTEGER KB (IJSDIM) INTEGER KSTRT (IJSDIM) ! tropopause level - REAL(r8) GAMX - REAL(r8) CIN (IJSDIM) + REAL(kind_phys) GAMX + REAL(kind_phys) CIN (IJSDIM) INTEGER JBUOY (IJSDIM) - REAL(r8) DELZ, BUOY, DELWC, DELER - REAL(r8) WCBX (IJSDIM) -! REAL(r8) ERMR (NCTP) ! entrainment rate (ASMODE) + REAL(kind_phys) DELZ, BUOY, DELWC, DELER + REAL(kind_phys) WCBX (IJSDIM) +! REAL(kind_phys) ERMR (NCTP) ! entrainment rate (ASMODE) ! SAVE ERMR INTEGER KTMX (NCTP) ! max of cloud top INTEGER KTMXT ! max of cloud top -! REAL(r8) TIMED - REAL(r8) GDCLDX, GDMU2X, GDMU3X +! REAL(kind_phys) TIMED + REAL(kind_phys) GDCLDX, GDMU2X, GDMU3X ! -! REAL(r8) HBGT (IJSDIM) ! imbalance in column heat -! REAL(r8) WBGT (IJSDIM) ! imbalance in column water +! REAL(kind_phys) HBGT (IJSDIM) ! imbalance in column heat +! REAL(kind_phys) WBGT (IJSDIM) ! imbalance in column water !DDsigma begin local work variables - all on model interfaces (sfc=1) - REAL(r8) lamdai ! lamda for cloud type ctp - REAL(r8) gdqm, gdlm, gdim ! water vapor - REAL(r8) gdtrm(ntrq:ntr) ! tracer + REAL(kind_phys) lamdai ! lamda for cloud type ctp + REAL(kind_phys) gdqm, gdlm, gdim ! water vapor + REAL(kind_phys) gdtrm(ntrq:ntr) ! tracer ! the following are new arguments to cumup to get them out for AW - REAL(r8) wcv (IJSDIM, KMAX) ! in-cloud vertical velocity - REAL(r8) GCTM (IJSDIM, KMAX) ! cloud T (half lev) !DDsigmadiag make output - REAL(r8) GCQM (IJSDIM, KMAX) ! cloud q (half lev) !DDsigmadiag make output - REAL(r8) GCwM (IJSDIM, KMAX) ! cloud q (half lev) !DDsigmadiag make output - REAL(r8) GCiM (IJSDIM, KMAX) ! cloud q (half lev) !DDsigmadiag make output - REAL(r8) GClM (IJSDIM, KMAX) ! cloud q (half lev) !DDsigmadiag make output - REAL(r8) GChM (IJSDIM, KMAX) ! cloud q (half lev) !DDsigmadiag make output - REAL(r8) GCtrM (IJSDIM, KMAX, ntrq:ntr) ! cloud tracer (half lev) !DDsigmadiag make output + REAL(kind_phys) wcv (IJSDIM, KMAX) ! in-cloud vertical velocity + REAL(kind_phys) GCTM (IJSDIM, KMAX) ! cloud T (half lev) !DDsigmadiag make output + REAL(kind_phys) GCQM (IJSDIM, KMAX) ! cloud q (half lev) !DDsigmadiag make output + REAL(kind_phys) GCwM (IJSDIM, KMAX) ! cloud q (half lev) !DDsigmadiag make output + REAL(kind_phys) GCiM (IJSDIM, KMAX) ! cloud q (half lev) !DDsigmadiag make output + REAL(kind_phys) GClM (IJSDIM, KMAX) ! cloud q (half lev) !DDsigmadiag make output + REAL(kind_phys) GChM (IJSDIM, KMAX) ! cloud q (half lev) !DDsigmadiag make output + REAL(kind_phys) GCtrM (IJSDIM, KMAX, ntrq:ntr) ! cloud tracer (half lev) !DDsigmadiag make output ! eddy flux profiles for dse, water vapor, cloud water, cloud ice - REAL(r8), dimension(Kmax+1) :: sfluxtem, qvfluxtem, qlfluxtem, qifluxtem - REAL(r8), dimension(Kmax+1,ntrq:ntr) :: trfluxtem ! tracer + REAL(kind_phys), dimension(Kmax+1) :: sfluxtem, qvfluxtem, qlfluxtem, qifluxtem + REAL(kind_phys), dimension(Kmax+1,ntrq:ntr) :: trfluxtem ! tracer ! tendency profiles - condensation heating, condensation moistening, heating due to ! freezing, total precip production, frozen precip production - REAL(r8), dimension(ijsdim,Kmax) :: dtcondtem, dqcondtem, dtfrztem, dqprectem,& ! Moorthi + REAL(kind_phys), dimension(ijsdim,Kmax) :: dtcondtem, dqcondtem, dtfrztem, dqprectem,& ! Moorthi dfrzprectem, lamdaprod !< product of (1+lamda) through cloud type ctp - REAL(r8), dimension(ijsdim,Kmax) :: dtevap, dqevap, dtmelt, dtsubl + REAL(kind_phys), dimension(ijsdim,Kmax) :: dtevap, dqevap, dtmelt, dtsubl ! factor to modify precip rate to force conservation of water. With bug fixes it's ! not doing anything now. - REAL(r8), dimension(ijsdim) :: moistening_aw - real(r8), dimension(ijsdim,kmax) :: gctbl, gcqbl,gcwbl, gcqlbl, gcqibl, & !DDsigmadiag updraft profiles below cloud Base + REAL(kind_phys), dimension(ijsdim) :: moistening_aw + real(kind_phys), dimension(ijsdim,kmax) :: gctbl, gcqbl,gcwbl, gcqlbl, gcqibl, & !DDsigmadiag updraft profiles below cloud Base sigmad ! downdraft area fraction - real(r8), dimension(ijsdim,kmax,ntrq:ntr) :: gctrbl !DDsigmadiag tracer updraft profiles below cloud Base + real(kind_phys), dimension(ijsdim,kmax,ntrq:ntr) :: gctrbl !DDsigmadiag tracer updraft profiles below cloud Base ! rhs_q, rhs_h are residuals of condensed water, MSE budgets to compute condensation, ! and heating due to freezing - real(r8) :: rhs_q, rhs_h, fsigma, sigmai, delpinv -! real(r8) :: rhs_q, rhs_h, sftem, qftem, qlftem, qiftem, & + real(kind_phys) :: rhs_q, rhs_h, fsigma, sigmai, delpinv +! real(kind_phys) :: rhs_q, rhs_h, sftem, qftem, qlftem, qiftem, & ! fsigma ! factor to reduce mass flux terms (1-sigma**2) for AW !DDsigma end local work variables ! ! profiles of heating due to precip evaporation, melting and sublimation, and the ! evap, melting and sublimation rates. - REAL(r8), allocatable, dimension(:,:) :: dtdwn, & ! t tendency downdraft detrainment + REAL(kind_phys), allocatable, dimension(:,:) :: dtdwn, & ! t tendency downdraft detrainment dqvdwn, & ! qv tendency downdraft detrainment dqldwn, & ! ql tendency downdraft detrainment dqidwn ! qi tendency downdraft detrainment - REAL(r8), allocatable, dimension(:,:,:) :: dtrdwn ! tracer tendency downdraft detrainment + REAL(kind_phys), allocatable, dimension(:,:,:) :: dtrdwn ! tracer tendency downdraft detrainment !DDsigma end local work variables ! ! [INTERNAL PARM] - REAL(r8), parameter :: WCBMIN = zero ! min. of updraft velocity at cloud base + REAL(kind_phys), parameter :: WCBMIN = zero ! min. of updraft velocity at cloud base -!M REAL(r8) :: WCBMAX = 1.4_r8 ! max. of updraft velocity at cloud base +!M REAL(kind_phys) :: WCBMAX = 1.4_kind_phys ! max. of updraft velocity at cloud base !M wcbas commented by Moorthi since it is not used -!M REAL(r8) :: WCBAS = 2._r8 ! updraft velocity**2 at cloud base (ASMODE) -!M REAL(r8) :: ERAMIN = 1.e-5_r8 ! min. of entrainment rate +!M REAL(kind_phys) :: WCBAS = 2._kind_phys ! updraft velocity**2 at cloud base (ASMODE) +!M REAL(kind_phys) :: ERAMIN = 1.e-5_kind_phys ! min. of entrainment rate ! used only in OPT_ASMODE -!M REAL(r8) :: ERAMAX = 2.e-3_r8 ! max. of entrainment rate +!M REAL(kind_phys) :: ERAMAX = 2.e-3_kind_phys ! max. of entrainment rate ! used only in OPT_ASMODE LOGICAL :: OINICB = .false. ! set 0.d0 to CBMFX when .true. -! REAL(r8) :: VARMIN = 1.e-13_r8 ! minimum of PDF variance -! REAL(r8) :: VARMAX = 5.e-7_r8 ! maximum of PDF variance -! REAL(r8) :: SKWMAX = 0.566_r8 ! maximum of PDF skewness +! REAL(kind_phys) :: VARMIN = 1.e-13_kind_phys ! minimum of PDF variance +! REAL(kind_phys) :: VARMAX = 5.e-7_kind_phys ! maximum of PDF variance +! REAL(kind_phys) :: SKWMAX = 0.566_kind_phys ! maximum of PDF skewness - REAL(r8) :: PSTRMX = 400.e2_r8 ! max P of tropopause - REAL(r8) :: PSTRMN = 50.e2_r8 ! min P of tropopause - REAL(r8) :: GCRSTR = 1.e-4_r8 ! crit. dT/dz tropopause + REAL(kind_phys) :: PSTRMX = 400.e2_kind_phys ! max P of tropopause + REAL(kind_phys) :: PSTRMN = 50.e2_kind_phys ! min P of tropopause + REAL(kind_phys) :: GCRSTR = 1.e-4_kind_phys ! crit. dT/dz tropopause - real(kind=r8) :: tem, esat, mflx_e, cbmfl, tem1, tem2, tem3 + real(kind=kind_phys) :: tem, esat, mflx_e, cbmfl, tem1, tem2, tem3 INTEGER :: KBMX, I, K, CTP, ierr, n, kp1, km1, kk, kbi, l, l1 ! LOGICAL, SAVE :: OFIRST = .TRUE. ! called first time? @@ -1723,7 +1723,7 @@ SUBROUTINE CS_CUMLUS (im , IJSDIM, KMAX , NTR , & !DD dimensions ! is occuring now which is a good sign! DD if(flx_form .and. adjustp) then DO I = ISTS, IENS - if(gprcp(i,1)+gsnwp(i,1) > 1.e-12_r8) then + if(gprcp(i,1)+gsnwp(i,1) > 1.e-12_kind_phys) then moistening_aw(i) = - moistening_aw(i) / (gprcp(i,1)+gsnwp(i,1)) else moistening_aw(i) = 1.0 @@ -1792,42 +1792,42 @@ SUBROUTINE CUMBAS & ! cloud base ! ! [OUTPUT] INTEGER KB (IJSDIM) ! cloud base - REAL(r8) GCYM (IJSDIM, KMAX) ! norm. mass flux (half lev) + REAL(kind_phys) GCYM (IJSDIM, KMAX) ! norm. mass flux (half lev) INTEGER KBMX - REAL(r8) GCHB (IJSDIM) ! cloud base MSE - REAL(r8) GCWB (IJSDIM) ! cloud base total water - REAL(r8) GCUB (IJSDIM) ! cloud base U - REAL(r8) GCVB (IJSDIM) ! cloud base V - REAL(r8) GCIB (IJSDIM) ! cloud base ice - REAL(r8) GCtrB (IJSDIM,ntrq:ntr) ! cloud base tracer + REAL(kind_phys) GCHB (IJSDIM) ! cloud base MSE + REAL(kind_phys) GCWB (IJSDIM) ! cloud base total water + REAL(kind_phys) GCUB (IJSDIM) ! cloud base U + REAL(kind_phys) GCVB (IJSDIM) ! cloud base V + REAL(kind_phys) GCIB (IJSDIM) ! cloud base ice + REAL(kind_phys) GCtrB (IJSDIM,ntrq:ntr) ! cloud base tracer !DDsigma added to arglist for AW, subcloud updraft profiles: temperature, water vapor ! total water, cloud water, and cloud ice respectively - REAL(r8), dimension(ijsdim,kmax) :: gctbl, gcqbl, gcwbl, gcqlbl, gcqibl !>DDsigmadiag - REAL(r8), dimension(ijsdim,kmax,ntrq:ntr) :: gctrbl !DDsigmadiag + REAL(kind_phys), dimension(ijsdim,kmax) :: gctbl, gcqbl, gcwbl, gcqlbl, gcqibl !>DDsigmadiag + REAL(kind_phys), dimension(ijsdim,kmax,ntrq:ntr) :: gctrbl !DDsigmadiag ! ! [INPUT] - REAL(r8) GDH (IJSDIM, KMAX) ! moist static energy - REAL(r8) GDW (IJSDIM, KMAX) ! total water - REAL(r8) GDq (IJSDIM, KMAX, ntr) ! water vapor and tracer - REAL(r8) GDHS (IJSDIM, KMAX) ! saturate MSE - REAL(r8) GDQS (IJSDIM, KMAX) ! saturate humidity - REAL(r8) GDQI (IJSDIM, KMAX) ! cloud ice - REAL(r8) GDU (IJSDIM, KMAX) ! u-velocity - REAL(r8) GDV (IJSDIM, KMAX) ! v-velocity - REAL(r8) GDZM (IJSDIM, KMAX+1) ! Altitude (half lev) - REAL(r8) GDPM (IJSDIM, KMAX+1) ! pressure (half lev) - REAL(r8) FDQS (IJSDIM, KMAX) - REAL(r8) GAM (IJSDIM, KMAX) + REAL(kind_phys) GDH (IJSDIM, KMAX) ! moist static energy + REAL(kind_phys) GDW (IJSDIM, KMAX) ! total water + REAL(kind_phys) GDq (IJSDIM, KMAX, ntr) ! water vapor and tracer + REAL(kind_phys) GDHS (IJSDIM, KMAX) ! saturate MSE + REAL(kind_phys) GDQS (IJSDIM, KMAX) ! saturate humidity + REAL(kind_phys) GDQI (IJSDIM, KMAX) ! cloud ice + REAL(kind_phys) GDU (IJSDIM, KMAX) ! u-velocity + REAL(kind_phys) GDV (IJSDIM, KMAX) ! v-velocity + REAL(kind_phys) GDZM (IJSDIM, KMAX+1) ! Altitude (half lev) + REAL(kind_phys) GDPM (IJSDIM, KMAX+1) ! pressure (half lev) + REAL(kind_phys) FDQS (IJSDIM, KMAX) + REAL(kind_phys) GAM (IJSDIM, KMAX) INTEGER ISTS, IENS ! ! [INTERNAL WORK] - REAL(r8) CBASE (IJSDIM) ! one over cloud base height -! REAL(r8) CBASEP(IJSDIM) ! cloud base pressure - REAL(r8) DELZ, GAMX, wrk -! REAL(r8) DELZ, QSL, GAMX, wrk -! REAL(r8), dimension(ijsdim,kmax) :: gchbl !DDsigmadiag - real(r8), dimension(ijsdim) :: gcqb, tx1, spbl, qsl + REAL(kind_phys) CBASE (IJSDIM) ! one over cloud base height +! REAL(kind_phys) CBASEP(IJSDIM) ! cloud base pressure + REAL(kind_phys) DELZ, GAMX, wrk +! REAL(kind_phys) DELZ, QSL, GAMX, wrk +! REAL(kind_phys), dimension(ijsdim,kmax) :: gchbl !DDsigmadiag + real(kind_phys), dimension(ijsdim) :: gcqb, tx1, spbl, qsl INTEGER I, K, kp1, n ! ! [INTERNAL PARM] @@ -2031,91 +2031,91 @@ SUBROUTINE CUMUP & !! in-cloud properties logical :: lprnt ! ! [OUTPUT] - REAL(r8) ACWF (IJSDIM) ! cloud work function - REAL(r8) GCLZ (IJSDIM, KMAX) ! cloud liquid water*eta - REAL(r8) GCIZ (IJSDIM, KMAX) ! cloud ice*eta - REAL(r8) GPRCIZ(IJSDIM, KMAX) ! rain generation*eta - REAL(r8) GSNWIZ(IJSDIM, KMAX) ! snow generation*eta - REAL(r8) GCYT (IJSDIM) ! norm. mass flux @top - REAL(r8) GCHT (IJSDIM) ! cloud top MSE*eta - REAL(r8) GCQT (IJSDIM) ! cloud top moisture*eta - REAL(r8) GCLT (IJSDIM) ! cloud top liquid water*eta - REAL(r8) GCIT (IJSDIM) ! cloud top ice*eta - REAL(r8) GCtrT (IJSDIM, ntrq:ntr) ! cloud top tracer*eta - REAL(r8) GTPRT (IJSDIM) ! cloud top (rain+snow)*eta - REAL(r8) GCUT (IJSDIM) ! cloud top u*eta - REAL(r8) GCVT (IJSDIM) ! cloud top v*eta - REAL(r8) GCwT (IJSDIM) ! cloud top v*eta - INTEGER KT (IJSDIM) ! cloud top - INTEGER KTMX ! max of cloud top - REAL(r8) WCV (IJSDIM, KMAX) ! updraft velocity (half lev) !DD sigma make output + REAL(kind_phys) ACWF (IJSDIM) !< cloud work function + REAL(kind_phys) GCLZ (IJSDIM, KMAX) !< cloud liquid water*eta + REAL(kind_phys) GCIZ (IJSDIM, KMAX) !< cloud ice*eta + REAL(kind_phys) GPRCIZ(IJSDIM, KMAX) !< rain generation*eta + REAL(kind_phys) GSNWIZ(IJSDIM, KMAX) !< snow generation*eta + REAL(kind_phys) GCYT (IJSDIM) !< norm. mass flux @top + REAL(kind_phys) GCHT (IJSDIM) !< cloud top MSE*eta + REAL(kind_phys) GCQT (IJSDIM) !< cloud top moisture*eta + REAL(kind_phys) GCLT (IJSDIM) !< cloud top liquid water*eta + REAL(kind_phys) GCIT (IJSDIM) !< cloud top ice*eta + REAL(kind_phys) GCtrT (IJSDIM, ntrq:ntr) !< cloud top tracer*eta + REAL(kind_phys) GTPRT (IJSDIM) !< cloud top (rain+snow)*eta + REAL(kind_phys) GCUT (IJSDIM) !< cloud top u*eta + REAL(kind_phys) GCVT (IJSDIM) !< cloud top v*eta + REAL(kind_phys) GCwT (IJSDIM) !< cloud top v*eta + INTEGER KT (IJSDIM) !< cloud top + INTEGER KTMX !< max of cloud top + REAL(kind_phys) WCV (IJSDIM, KMAX) !< updraft velocity (half lev) !DD sigma make output ! ! [MODIFIED] - REAL(r8) GCYM (IJSDIM, KMAX) ! norm. mass flux + REAL(kind_phys) GCYM (IJSDIM, KMAX) !< norm. mass flux ! ! [INPUT] - REAL(r8) GCHB (IJSDIM) ! cloud base Moist Static Energy - REAL(r8) GCWB (IJSDIM) ! cloud base total water - REAL(r8) GCUB (IJSDIM) ! cloud base U - REAL(r8) GCVB (IJSDIM) ! cloud base V - REAL(r8) GCIB (IJSDIM) ! cloud base ice - REAL(r8) GCtrB (IJSDIM,ntrq:ntr) ! cloud base tracers - REAL(r8) GDU (IJSDIM, KMAX) ! U - REAL(r8) GDV (IJSDIM, KMAX) ! V - REAL(r8) GDH (IJSDIM, KMAX) ! moist static energy - REAL(r8) GDW (IJSDIM, KMAX) ! total water - REAL(r8) GDHS (IJSDIM, KMAX) ! saturation MSE - REAL(r8) GDQS (IJSDIM, KMAX) ! saturation q - REAL(r8) GDT (IJSDIM, KMAX) ! T - REAL(r8) GDTM (IJSDIM, KMAX+1) ! T (half lev) - REAL(r8) GDQ (IJSDIM, KMAX, NTR) ! q !!DDsigmadiag - REAL(r8) GDQI (IJSDIM, KMAX) ! cloud ice - REAL(r8) GDZ (IJSDIM, KMAX) ! z - REAL(r8) GDZM (IJSDIM, KMAX+1) ! z (half lev) - REAL(r8) GDPM (IJSDIM, KMAX+1) ! p (half lev) - REAL(r8) FDQS (IJSDIM, KMAX) - REAL(r8) GAM (IJSDIM, KMAX) - REAL(r8) GDZTR (IJSDIM) ! tropopause height - REAL(r8) CPRES ! pres. fac. for cum. fric. - REAL(r8) WCB(ijsdim) ! cloud base updraft velocity**2 -! REAL(r8) ERMR ! entrainment rate (ASMODE) + REAL(kind_phys) GCHB (IJSDIM) !< cloud base Moist Static Energy + REAL(kind_phys) GCWB (IJSDIM) !< cloud base total water + REAL(kind_phys) GCUB (IJSDIM) !< cloud base U + REAL(kind_phys) GCVB (IJSDIM) !< cloud base V + REAL(kind_phys) GCIB (IJSDIM) !< cloud base ice + REAL(kind_phys) GCtrB (IJSDIM,ntrq:ntr) !< cloud base tracers + REAL(kind_phys) GDU (IJSDIM, KMAX) !< U + REAL(kind_phys) GDV (IJSDIM, KMAX) !< V + REAL(kind_phys) GDH (IJSDIM, KMAX) !< moist static energy + REAL(kind_phys) GDW (IJSDIM, KMAX) !< total water + REAL(kind_phys) GDHS (IJSDIM, KMAX) !< saturation MSE + REAL(kind_phys) GDQS (IJSDIM, KMAX) !< saturation q + REAL(kind_phys) GDT (IJSDIM, KMAX) !< T + REAL(kind_phys) GDTM (IJSDIM, KMAX+1) !< T (half lev) + REAL(kind_phys) GDQ (IJSDIM, KMAX, NTR) !< q !!DDsigmadiag + REAL(kind_phys) GDQI (IJSDIM, KMAX) !< cloud ice + REAL(kind_phys) GDZ (IJSDIM, KMAX) !< z + REAL(kind_phys) GDZM (IJSDIM, KMAX+1) !< z (half lev) + REAL(kind_phys) GDPM (IJSDIM, KMAX+1) !< p (half lev) + REAL(kind_phys) FDQS (IJSDIM, KMAX) + REAL(kind_phys) GAM (IJSDIM, KMAX) + REAL(kind_phys) GDZTR (IJSDIM) !< tropopause height + REAL(kind_phys) CPRES !< pres. fac. for cum. fric. + REAL(kind_phys) WCB(ijsdim) !< cloud base updraft velocity**2 +! REAL(kind_phys) ERMR !< entrainment rate (ASMODE) INTEGER KB (IJSDIM) INTEGER CTP, ISTS, IENS ! ! [INTERNAL WORK] - REAL(r8) ACWFK (IJSDIM,KMAX) ! cloud work function - REAL(r8) ACWFN (IJSDIM,KMAX) ! negative part of cloud work function - REAL(r8) myGCHt ! cloud top h *eta (half lev) - REAL(r8) GCHMZ (IJSDIM, KMAX) ! cloud h *eta (half lev) - REAL(r8) GCWMZ (IJSDIM, KMAX) ! cloud Qt*eta (half lev) - REAL(r8) GCUMZ (IJSDIM, KMAX) ! cloud U *eta (half lev) - REAL(r8) GCVMZ (IJSDIM, KMAX) ! cloud V *eta (half lev) - REAL(r8) GCqMZ (IJSDIM ) ! cloud qv*eta (half lev) - REAL(r8) GCIMZ (IJSDIM, KMAX) ! cloud Qi*eta (half lev) - REAL(r8) GCtrMZ(IJSDIM, KMAX,ntrq:ntr)! cloud tracer*eta (half lev) - REAL(r8) GTPRMZ(IJSDIM, KMAX) ! rain+snow *eta (half lev) -! - REAL(r8) BUOY (IJSDIM, KMAX) ! buoyancy - REAL(r8) BUOYM (IJSDIM, KMAX) ! buoyancy (half lev) - REAL(r8) WCM (IJSDIM ) ! updraft velocity**2 (half lev) -! REAL(r8) WCM (IJSDIM, KMAX) ! updraft velocity**2 (half lev) -!DD sigma make output REAL(r8) WCV ( IJSDIM, KMAX+1 ) !! updraft velocity (half lev) - REAL(r8) GCY (IJSDIM, KMAX) ! norm. mass flux -! REAL(r8) ELAR (IJSDIM, KMAX) ! entrainment rate - REAL(r8) ELAR ! entrainment rate at mid layer -! - REAL(r8) GCHM (IJSDIM, KMAX) ! cloud MSE (half lev) - REAL(r8) GCWM (IJSDIM, KMAX) ! cloud Qt (half lev) !DDsigmadiag - REAL(r8) GCTM (IJSDIM, KMAX) ! cloud T (half lev) !DDsigmadiag make output - REAL(r8) GCQM (IJSDIM, KMAX) ! cloud q (half lev) !DDsigmadiag make output - REAL(r8) GCLM (IJSDIM, KMAX) ! cloud liquid ( half lev) - REAL(r8) GCIM (IJSDIM, KMAX) ! cloud ice (half lev) - REAL(r8) GCUM (IJSDIM, KMAX) ! cloud U (half lev) - REAL(r8) GCVM (IJSDIM, KMAX) ! cloud V (half lev) - REAL(r8) GCtrM (IJSDIM, KMAX,ntrq:ntr) ! cloud tracer (half lev) -! - REAL(r8), dimension(IJSDIM) :: WCM_, ELARM1, GDZMKB - REAL(r8) GDQSM, GDHSM, GDQM, GDSM, GDCM, FDQSM, GCCM, & + REAL(kind_phys) ACWFK (IJSDIM,KMAX) !< cloud work function + REAL(kind_phys) ACWFN (IJSDIM,KMAX) !< negative part of cloud work function + REAL(kind_phys) myGCHt !< cloud top h *eta (half lev) + REAL(kind_phys) GCHMZ (IJSDIM, KMAX) !< cloud h *eta (half lev) + REAL(kind_phys) GCWMZ (IJSDIM, KMAX) !< cloud Qt*eta (half lev) + REAL(kind_phys) GCUMZ (IJSDIM, KMAX) !< cloud U *eta (half lev) + REAL(kind_phys) GCVMZ (IJSDIM, KMAX) !< cloud V *eta (half lev) + REAL(kind_phys) GCqMZ (IJSDIM ) !< cloud qv*eta (half lev) + REAL(kind_phys) GCIMZ (IJSDIM, KMAX) !< cloud Qi*eta (half lev) + REAL(kind_phys) GCtrMZ(IJSDIM, KMAX,ntrq:ntr)!< cloud tracer*eta (half lev) + REAL(kind_phys) GTPRMZ(IJSDIM, KMAX) !< rain+snow *eta (half lev) +! + REAL(kind_phys) BUOY (IJSDIM, KMAX) !< buoyancy + REAL(kind_phys) BUOYM (IJSDIM, KMAX) !< buoyancy (half lev) + REAL(kind_phys) WCM (IJSDIM ) !< updraft velocity**2 (half lev) +! REAL(kind_phys) WCM (IJSDIM, KMAX) !< updraft velocity**2 (half lev) +!DD sigma make output REAL(kind_phys) WCV ( IJSDIM, KMAX+1 ) !! updraft velocity (half lev) + REAL(kind_phys) GCY (IJSDIM, KMAX) !< norm. mass flux +! REAL(kind_phys) ELAR (IJSDIM, KMAX) !< entrainment rate + REAL(kind_phys) ELAR !< entrainment rate at mid layer +! + REAL(kind_phys) GCHM (IJSDIM, KMAX) !< cloud MSE (half lev) + REAL(kind_phys) GCWM (IJSDIM, KMAX) !< cloud Qt (half lev) !DDsigmadiag + REAL(kind_phys) GCTM (IJSDIM, KMAX) !< cloud T (half lev) !DDsigmadiag make output + REAL(kind_phys) GCQM (IJSDIM, KMAX) !< cloud q (half lev) !DDsigmadiag make output + REAL(kind_phys) GCLM (IJSDIM, KMAX) !< cloud liquid ( half lev) + REAL(kind_phys) GCIM (IJSDIM, KMAX) !< cloud ice (half lev) + REAL(kind_phys) GCUM (IJSDIM, KMAX) !< cloud U (half lev) + REAL(kind_phys) GCVM (IJSDIM, KMAX) !< cloud V (half lev) + REAL(kind_phys) GCtrM (IJSDIM, KMAX,ntrq:ntr) !< cloud tracer (half lev) +! + REAL(kind_phys), dimension(IJSDIM) :: WCM_, ELARM1, GDZMKB + REAL(kind_phys) GDQSM, GDHSM, GDQM, GDSM, GDCM, FDQSM, GCCM, & DELZ, ELADZ, DCTM , CPGMI, DELC, FICE, ELARM2,GCCMZ, & PRECR, GTPRIZ, DELZL, GCCT, DCT, WCVX, PRCZH, wrk INTEGER K, I, kk, km1, kp1, n @@ -2123,43 +2123,43 @@ SUBROUTINE CUMUP & !! in-cloud properties ! CHARACTER CTNUM*2 ! !DD#ifdef OPT_CUMBGT -!DD REAL(r8) HBGT (IJSDIM) ! heat budget -!DD REAL(r8) WBGT (IJSDIM) ! water budget -!DD REAL(r8) PBGT (IJSDIM) ! precipitation budget -!DD REAL(r8) MBGT (IJSDIM) ! mass budget -!DD REAL(r8) GTPRX (IJSDIM) ! (rain+snow)*eta at top -!DD REAL(r8) GSNWT (IJSDIM) ! cloud top snow*eta -!DD REAL(r8) HBMX, WBMX, PBMX, MBMX +!DD REAL(kind_phys) HBGT (IJSDIM) ! heat budget +!DD REAL(kind_phys) WBGT (IJSDIM) ! water budget +!DD REAL(kind_phys) PBGT (IJSDIM) ! precipitation budget +!DD REAL(kind_phys) MBGT (IJSDIM) ! mass budget +!DD REAL(kind_phys) GTPRX (IJSDIM) ! (rain+snow)*eta at top +!DD REAL(kind_phys) GSNWT (IJSDIM) ! cloud top snow*eta +!DD REAL(kind_phys) HBMX, WBMX, PBMX, MBMX !DD SAVE HBMX, WBMX, PBMX, MBMX !DD#endif ! ! [INTERNAL PARAM] - REAL(r8), parameter :: ZTREF = 1._r8, ztrefi = one/ztref, & + REAL(kind_phys), parameter :: ZTREF = 1._kind_phys, ztrefi = one/ztref, & ELAMIN = zero, ELAMAX = 4.e-3 ! min and max entrainment rate - REAL(r8) :: PB = 1.0_r8 -!m REAL(r8) :: TAUZ = 5.0e3_r8 - REAL(r8) :: TAUZ = 1.0e4_r8 -!m REAL(r8) :: ELMD = 2.4e-3 ! for Neggers and Siebesma (2002) -!m REAL(r8) :: ELAMAX = 5.e-3 ! max. of entrainment rate -! REAL(r8) :: WCCRT = zero -!m REAL(r8) :: WCCRT = 0.01 - REAL(r8) :: WCCRT = 1.0e-6_r8, wvcrt=1.0e-3_r8 - REAL(r8) :: TSICE = 268.15_r8 ! compatible with macrop_driver - REAL(r8) :: TWICE = 238.15_r8 ! compatible with macrop_driver - -! REAL(r8) :: wfn_neg = 0.1 - REAL(r8) :: wfn_neg = 0.15 -! REAL(r8) :: wfn_neg = 0.25 -! REAL(r8) :: wfn_neg = 0.30 -! REAL(r8) :: wfn_neg = 0.35 + REAL(kind_phys) :: PB = 1.0_kind_phys +!m REAL(kind_phys) :: TAUZ = 5.0e3_kind_phys + REAL(kind_phys) :: TAUZ = 1.0e4_kind_phys +!m REAL(kind_phys) :: ELMD = 2.4e-3 ! for Neggers and Siebesma (2002) +!m REAL(kind_phys) :: ELAMAX = 5.e-3 ! max. of entrainment rate +! REAL(kind_phys) :: WCCRT = zero +!m REAL(kind_phys) :: WCCRT = 0.01 + REAL(kind_phys) :: WCCRT = 1.0e-6_kind_phys, wvcrt=1.0e-3_kind_phys + REAL(kind_phys) :: TSICE = 268.15_kind_phys ! compatible with macrop_driver + REAL(kind_phys) :: TWICE = 238.15_kind_phys ! compatible with macrop_driver + +! REAL(kind_phys) :: wfn_neg = 0.1 + REAL(kind_phys) :: wfn_neg = 0.15 +! REAL(kind_phys) :: wfn_neg = 0.25 +! REAL(kind_phys) :: wfn_neg = 0.30 +! REAL(kind_phys) :: wfn_neg = 0.35 - REAL(r8) :: esat, tem -! REAL(r8) :: esat, tem, rhs_h, rhs_q + REAL(kind_phys) :: esat, tem +! REAL(kind_phys) :: esat, tem, rhs_h, rhs_q ! - REAL(r8) Z ! altitude - REAL(r8) ZH ! scale height - REAL(r8) T ! temperature + REAL(kind_phys) Z ! altitude + REAL(kind_phys) ZH ! scale height + REAL(kind_phys) T ! temperature ! ! ! Note: iteration is not made to diagnose cloud ice for simplicity @@ -2178,8 +2178,8 @@ SUBROUTINE CUMUP & !! in-cloud properties enddo do k=1,kmax do i=ists,iens - ACWFK (I,k) = unset_r8 - ACWFN (I,k) = unset_r8 + ACWFK (I,k) = unset_kind_phys + ACWFN (I,k) = unset_kind_phys GCLZ (I,k) = zero GCIZ (I,k) = zero GPRCIZ(I,k) = zero @@ -2192,24 +2192,24 @@ SUBROUTINE CUMUP & !! in-cloud properties GCVMZ (I,k) = zero GTPRMZ(I,k) = zero ! - BUOY (I,k) = unset_r8 - BUOYM (I,k) = unset_r8 - WCV (I,k) = unset_r8 - GCY (I,k) = unset_r8 -! - GCHM (I,k) = unset_r8 - GCWM (I,k) = unset_r8 - GCTM (I,k) = unset_r8 - GCQM (I,k) = unset_r8 - GCLM (I,k) = unset_r8 - GCIM (I,k) = unset_r8 - GCUM (I,k) = unset_r8 - GCVM (I,k) = unset_r8 + BUOY (I,k) = unset_kind_phys + BUOYM (I,k) = unset_kind_phys + WCV (I,k) = unset_kind_phys + GCY (I,k) = unset_kind_phys +! + GCHM (I,k) = unset_kind_phys + GCWM (I,k) = unset_kind_phys + GCTM (I,k) = unset_kind_phys + GCQM (I,k) = unset_kind_phys + GCLM (I,k) = unset_kind_phys + GCIM (I,k) = unset_kind_phys + GCUM (I,k) = unset_kind_phys + GCVM (I,k) = unset_kind_phys enddo enddo do i=ists,iens GCqMZ(I) = zero - WCM(I) = unset_r8 + WCM(I) = unset_kind_phys WCM_(I) = zero enddo ! tracers @@ -2219,7 +2219,7 @@ SUBROUTINE CUMUP & !! in-cloud properties enddo do k=1,kmax do i=ists,iens - GCTRM(I,k,n) = unset_r8 + GCTRM(I,k,n) = unset_kind_phys enddo enddo enddo @@ -2632,16 +2632,16 @@ SUBROUTINE CUMUP & !! in-cloud properties pure function FPREC(Z,ZH) implicit none - real(r8), intent(in) :: Z - real(r8), intent(in) :: ZH - real(r8) :: FPREC + real(kind_phys), intent(in) :: Z + real(kind_phys), intent(in) :: ZH + real(kind_phys) :: FPREC FPREC = MIN(MAX(one-EXP(-(Z-PRECZ0)/ZH), zero), one) end function FPREC pure function FRICE(T) implicit none - real(r8), intent(in) :: T - real(r8) :: FRICE + real(kind_phys), intent(in) :: T + real(kind_phys) :: FRICE FRICE = MIN(MAX((TSICE-T)/(TSICE-TWICE), zero), one) end function FRICE @@ -2663,37 +2663,37 @@ SUBROUTINE CUMBMX & !! cloud base mass flux INTEGER, INTENT(IN) :: IJSDIM, KMAX ! DD, for GFS, pass in ! ! [MODIFY] - REAL(r8) CBMFX (IJSDIM) ! cloud base mass flux + REAL(kind_phys) CBMFX (IJSDIM) !< cloud base mass flux ! ! [INPUT] - REAL(r8) ACWF (IJSDIM) ! cloud work function - REAL(r8) GCYT (IJSDIM) ! norm mass flux @top - REAL(r8) GDZM (IJSDIM, KMAX+1) ! height - REAL(r8) GDW (IJSDIM, KMAX) ! total water - REAL(r8) GDQS (IJSDIM, KMAX) ! saturate humidity - REAL(r8) DELP (IJSDIM, KMAX) ! delt pressure - INTEGER KT (IJSDIM) ! cloud top - INTEGER KTMX ! max. of cloud top - INTEGER KB (IJSDIM) ! cloud base - REAL(r8) DELT ! time step + REAL(kind_phys) ACWF (IJSDIM) !< cloud work function + REAL(kind_phys) GCYT (IJSDIM) !< norm mass flux @top + REAL(kind_phys) GDZM (IJSDIM, KMAX+1) !< height + REAL(kind_phys) GDW (IJSDIM, KMAX) !< total water + REAL(kind_phys) GDQS (IJSDIM, KMAX) !< saturate humidity + REAL(kind_phys) DELP (IJSDIM, KMAX) !< delt pressure + INTEGER KT (IJSDIM) !< cloud top + INTEGER KTMX !< max. of cloud top + INTEGER KB (IJSDIM) !< cloud base + REAL(kind_phys) DELT !< time step INTEGER ISTS, IENS ! ! [INTERNAL WORK] - REAL(r8), dimension(ijsdim) :: QX, QSX, RHM + REAL(kind_phys), dimension(ijsdim) :: QX, QSX, RHM INTEGER I, K - REAL(r8) ALP, FMAX1, wrk + REAL(kind_phys) ALP, FMAX1, wrk ! ! [INTERNAL PARAM] - REAL(r8) :: FMAX = 1.5e-2_r8 ! maximum flux -! REAL(r8) :: RHMCRT = zero ! critical val. of cloud mean RH -! REAL(r8) :: RHMCRT = 0.25_r8 ! critical val. of cloud mean RH - REAL(r8) :: RHMCRT = 0.50_r8 ! critical val. of cloud mean RH - REAL(r8) :: ALP1 = zero - REAL(r8) :: TAUD = 1.e3_r8 -! REAL(r8) :: TAUD = 6.e2_r8 - REAL(r8) :: ZFMAX = 3.5e3_r8 - REAL(r8) :: ZDFMAX = 5.e2_r8 -! REAL(r8) :: FMAXP = 2._r8 + REAL(kind_phys) :: FMAX = 1.5e-2_kind_phys ! maximum flux +! REAL(kind_phys) :: RHMCRT = zero ! critical val. of cloud mean RH +! REAL(kind_phys) :: RHMCRT = 0.25_kind_phys ! critical val. of cloud mean RH + REAL(kind_phys) :: RHMCRT = 0.50_kind_phys ! critical val. of cloud mean RH + REAL(kind_phys) :: ALP1 = zero + REAL(kind_phys) :: TAUD = 1.e3_kind_phys +! REAL(kind_phys) :: TAUD = 6.e2_kind_phys + REAL(kind_phys) :: ZFMAX = 3.5e3_kind_phys + REAL(kind_phys) :: ZDFMAX = 5.e2_kind_phys +! REAL(kind_phys) :: FMAXP = 2._kind_phys ! do i=ists,iens qx(i) = zero @@ -2748,26 +2748,26 @@ SUBROUTINE CUMFLX & !! cloud mass flux INTEGER, INTENT(IN) :: IJSDIM, KMAX, IM !! DD, for GFS, pass in ! ! [OUTPUT] - REAL(r8) GMFLX (IJSDIM, KMAX) !! mass flux - REAL(r8) CMDET (IJSDIM, KMAX) !! detrainment mass flux - REAL(r8) GPRCI (IJSDIM, KMAX) !! rainfall generation - REAL(r8) GSNWI (IJSDIM, KMAX) !! snowfall generation - REAL(r8) QLIQ (IJSDIM, KMAX) !! cloud liquid - REAL(r8) QICE (IJSDIM, KMAX) !! cloud ice - REAL(r8) GTPRC0(IJSDIM) !! precip. before evap. + REAL(kind_phys) GMFLX (IJSDIM, KMAX) !< mass flux + REAL(kind_phys) CMDET (IJSDIM, KMAX) !< detrainment mass flux + REAL(kind_phys) GPRCI (IJSDIM, KMAX) !< rainfall generation + REAL(kind_phys) GSNWI (IJSDIM, KMAX) !< snowfall generation + REAL(kind_phys) QLIQ (IJSDIM, KMAX) !< cloud liquid + REAL(kind_phys) QICE (IJSDIM, KMAX) !< cloud ice + REAL(kind_phys) GTPRC0(IJSDIM) !< precip. before evap. ! ! [INPUT] - REAL(r8) CBMFX (IJSDIM) !! cloud base mass flux - REAL(r8) GCYM (IJSDIM, KMAX) !! normalized mass flux - REAL(r8) GCYT (IJSDIM) !! detraining mass flux - REAL(r8) GPRCIZ(IJSDIM, KMAX) !! precipitation/M - REAL(r8) GSNWIZ(IJSDIM, KMAX) !! snowfall/M - REAL(r8) GTPRT (IJSDIM) !! rain+snow @top - REAL(r8) GCLZ (IJSDIM, KMAX) !! cloud liquid/M - REAL(r8) GCIZ (IJSDIM, KMAX) !! cloud ice/M - INTEGER KB (IJSDIM) !! cloud base - INTEGER KT (IJSDIM) !! cloud top - INTEGER KTMX !! max of cloud top + REAL(kind_phys) CBMFX (IJSDIM) !< cloud base mass flux + REAL(kind_phys) GCYM (IJSDIM, KMAX) !< normalized mass flux + REAL(kind_phys) GCYT (IJSDIM) !< detraining mass flux + REAL(kind_phys) GPRCIZ(IJSDIM, KMAX) !< precipitation/M + REAL(kind_phys) GSNWIZ(IJSDIM, KMAX) !< snowfall/M + REAL(kind_phys) GTPRT (IJSDIM) !< rain+snow @top + REAL(kind_phys) GCLZ (IJSDIM, KMAX) !< cloud liquid/M + REAL(kind_phys) GCIZ (IJSDIM, KMAX) !< cloud ice/M + INTEGER KB (IJSDIM) !< cloud base + INTEGER KT (IJSDIM) !< cloud top + INTEGER KTMX !< max of cloud top INTEGER ISTS, IENS, I, K ! DO K=1,KTMX @@ -2810,34 +2810,34 @@ SUBROUTINE CUMDET & !! detrainment INTEGER, INTENT(IN) :: im, IJSDIM, KMAX, NTR, nctp, ntrq !! DD, for GFS, pass in ! ! [MODIFY] - REAL(r8) GTT (IJSDIM, KMAX) !! temperature tendency - REAL(r8) GTQ (IJSDIM, KMAX, NTR) !! moisture tendency -! REAL(r8) GTCFRC(IJSDIM, KMAX) !! cloud fraction tendency - REAL(r8) GTU (IJSDIM, KMAX) !! u tendency - REAL(r8) GTV (IJSDIM, KMAX) !! v tendency + REAL(kind_phys) GTT (IJSDIM, KMAX) !< temperature tendency + REAL(kind_phys) GTQ (IJSDIM, KMAX, NTR) !< moisture tendency +! REAL(kind_phys) GTCFRC(IJSDIM, KMAX) !< cloud fraction tendency + REAL(kind_phys) GTU (IJSDIM, KMAX) !< u tendency + REAL(kind_phys) GTV (IJSDIM, KMAX) !< v tendency ! ! [INPUT] - REAL(r8) GDH (IJSDIM, KMAX) !! moist static energy - REAL(r8) GDQ (IJSDIM, KMAX, NTR) !! humidity qv -! REAL(r8) GDCFRC(IJSDIM, KMAX) !! cloud fraction - REAL(r8) GDU (IJSDIM, KMAX) - REAL(r8) GDV (IJSDIM, KMAX) - REAL(r8) DELPI (IJSDIM, KMAX) - REAL(r8) CBMFX (IM, NCTP) !! cloud base mass flux - REAL(r8) GCYT (IJSDIM, NCTP) !! detraining mass flux - REAL(r8) GCHT (IJSDIM, NCTP) !! detraining MSE - REAL(r8) GCQT (IJSDIM, NCTP) !! detraining qv - REAL(r8) GCLT (IJSDIM, NCTP) !! detraining ql - REAL(r8) GCIT (IJSDIM, NCTP) !! detraining qi - REAL(r8) GCtrT (IJSDIM, ntrq:ntr, NCTP)!! detraining tracer - REAL(r8) GCUT (IJSDIM, NCTP) !! detraining u - REAL(r8) GCVT (IJSDIM, NCTP) !! detraining v - REAL(r8) GDQI (IJSDIM, KMAX) !! cloud ice - INTEGER KT (IJSDIM, NCTP) !! cloud top + REAL(kind_phys) GDH (IJSDIM, KMAX) !< moist static energy + REAL(kind_phys) GDQ (IJSDIM, KMAX, NTR) !< humidity qv +! REAL(kind_phys) GDCFRC(IJSDIM, KMAX) !< cloud fraction + REAL(kind_phys) GDU (IJSDIM, KMAX) + REAL(kind_phys) GDV (IJSDIM, KMAX) + REAL(kind_phys) DELPI (IJSDIM, KMAX) + REAL(kind_phys) CBMFX (IM, NCTP) !< cloud base mass flux + REAL(kind_phys) GCYT (IJSDIM, NCTP) !< detraining mass flux + REAL(kind_phys) GCHT (IJSDIM, NCTP) !< detraining MSE + REAL(kind_phys) GCQT (IJSDIM, NCTP) !< detraining qv + REAL(kind_phys) GCLT (IJSDIM, NCTP) !< detraining ql + REAL(kind_phys) GCIT (IJSDIM, NCTP) !< detraining qi + REAL(kind_phys) GCtrT (IJSDIM, ntrq:ntr, NCTP)!< detraining tracer + REAL(kind_phys) GCUT (IJSDIM, NCTP) !< detraining u + REAL(kind_phys) GCVT (IJSDIM, NCTP) !< detraining v + REAL(kind_phys) GDQI (IJSDIM, KMAX) !< cloud ice + INTEGER KT (IJSDIM, NCTP) !< cloud top INTEGER ISTS, IENS ! ! [INTERNAL WORK] - REAL(r8) GTHCI, GTQVCI, GTXCI + REAL(kind_phys) GTHCI, GTQVCI, GTXCI integer I, K, CTP, kk,n ! @@ -2885,33 +2885,33 @@ SUBROUTINE CUMSBH & !! adiabat. descent INTEGER, INTENT(IN) :: IJSDIM, IM, KMAX, NTR, ntrq !! DD, for GFS, pass in ! ! [MODIFY] - REAL(r8) GTT (IJSDIM, KMAX) !! Temperature tendency - REAL(r8) GTQ (IJSDIM, KMAX, NTR) !! Moisture etc tendency - REAL(r8) GTU (IJSDIM, KMAX) !! u tendency - REAL(r8) GTV (IJSDIM, KMAX) !! v tendency + REAL(kind_phys) GTT (IJSDIM, KMAX) !< Temperature tendency + REAL(kind_phys) GTQ (IJSDIM, KMAX, NTR) !< Moisture etc tendency + REAL(kind_phys) GTU (IJSDIM, KMAX) !< u tendency + REAL(kind_phys) GTV (IJSDIM, KMAX) !< v tendency ! ! [INPUT] - REAL(r8) GDH (IJSDIM, KMAX) - REAL(r8) GDQ (IJSDIM, KMAX, NTR) !! humidity etc - REAL(r8) GDQI (IJSDIM, KMAX) - REAL(r8) GDU (IJSDIM, KMAX) - REAL(r8) GDV (IJSDIM, KMAX) - REAL(r8) DELPI (IJSDIM, KMAX) - REAL(r8) GMFLX (IJSDIM, KMAX) !! mass flux (updraft+downdraft) - REAL(r8) GMFX0 (IJSDIM, KMAX) !! mass flux (updraft only) - INTEGER KB(IJSDIM) !! cloud base index - negative means no convection + REAL(kind_phys) GDH (IJSDIM, KMAX) + REAL(kind_phys) GDQ (IJSDIM, KMAX, NTR) !< humidity etc + REAL(kind_phys) GDQI (IJSDIM, KMAX) + REAL(kind_phys) GDU (IJSDIM, KMAX) + REAL(kind_phys) GDV (IJSDIM, KMAX) + REAL(kind_phys) DELPI (IJSDIM, KMAX) + REAL(kind_phys) GMFLX (IJSDIM, KMAX) !< mass flux (updraft+downdraft) + REAL(kind_phys) GMFX0 (IJSDIM, KMAX) !< mass flux (updraft only) + INTEGER KB(IJSDIM) !< cloud base index - negative means no convection INTEGER KTMX - REAL(r8) CPRES !! pressure factor for cumulus friction + REAL(kind_phys) CPRES !< pressure factor for cumulus friction INTEGER ISTS, IENS ! ! [INTERNAL WORK] - REAL(r8) SBH0, SBQ0, SBL0, SBI0, SBC0, SBS0, & + REAL(kind_phys) SBH0, SBQ0, SBL0, SBI0, SBC0, SBS0, & SBH1, SBQ1, SBL1, SBI1, SBC1, SBS1, FX1, & SBU0, SBV0, SBU1, SBV1, GTHCI, GTQVCI, & GTQLCI, GTQICI, GTM2CI, GTM3CI, wrk, wrk1 - REAL(r8) FX(ISTS:IENS) + REAL(kind_phys) FX(ISTS:IENS) - REAL(r8), dimension(IJSDIM, KMAX) :: GTLSBH, GTISBH + REAL(kind_phys), dimension(IJSDIM, KMAX) :: GTLSBH, GTISBH integer :: I, K, KM, KP, n ! ! @@ -3007,22 +3007,22 @@ SUBROUTINE CUMSBW & !! adiabat. descent INTEGER, INTENT(IN) :: IJSDIM, IM, KMAX!! DD, for GFS, pass in ! ! [MODIFY] - REAL(r8) GTU (IJSDIM, KMAX) !! u tendency - REAL(r8) GTV (IJSDIM, KMAX) !! v tendency + REAL(kind_phys) GTU (IJSDIM, KMAX) !< u tendency + REAL(kind_phys) GTV (IJSDIM, KMAX) !< v tendency ! ! [INPUT] - REAL(r8) GDU (IJSDIM, KMAX) - REAL(r8) GDV (IJSDIM, KMAX) - REAL(r8) DELPI (IJSDIM, KMAX) - REAL(r8) GMFLX (IJSDIM, KMAX) !! mass flux (updraft+downdraft) - REAL(r8) GMFX0 (IJSDIM, KMAX) !! mass flux (updraft only) - INTEGER KB(IJSDIM) !! cloud base index - negative means no convection + REAL(kind_phys) GDU (IJSDIM, KMAX) + REAL(kind_phys) GDV (IJSDIM, KMAX) + REAL(kind_phys) DELPI (IJSDIM, KMAX) + REAL(kind_phys) GMFLX (IJSDIM, KMAX) !< mass flux (updraft+downdraft) + REAL(kind_phys) GMFX0 (IJSDIM, KMAX) !< mass flux (updraft only) + INTEGER KB(IJSDIM) !< cloud base index - negative means no convection INTEGER KTMX, ISTS, IENS - REAL(r8) CPRES !! pressure factor for cumulus friction + REAL(kind_phys) CPRES !< pressure factor for cumulus friction ! ! [INTERNAL WORK] - REAL(r8) FX1, SBU0, SBV0, SBU1, SBV1, wrk, wrk1 - REAL(r8) FX(ISTS:IENS) + REAL(kind_phys) FX1, SBU0, SBV0, SBU1, SBV1, wrk, wrk1 + REAL(kind_phys) FX(ISTS:IENS) integer :: I, K, KM, KP ! @@ -3090,114 +3090,114 @@ SUBROUTINE CUMDWN & ! Freeze & Melt & Evaporation logical, intent(in) :: do_aw, do_awdd, flx_form ! ! [MODIFY] - REAL(r8) GTT (IJSDIM, KMAX) ! Temperature tendency - REAL(r8) GTQ (IJSDIM, KMAX, NTR) ! Moisture etc tendency - REAL(r8) GTU (IJSDIM, KMAX) ! u tendency - REAL(r8) GTV (IJSDIM, KMAX) ! v tendency - REAL(r8) GMFLX (IJSDIM, KMAX) ! mass flux + REAL(kind_phys) GTT (IJSDIM, KMAX) !< Temperature tendency + REAL(kind_phys) GTQ (IJSDIM, KMAX, NTR) !< Moisture etc tendency + REAL(kind_phys) GTU (IJSDIM, KMAX) !< u tendency + REAL(kind_phys) GTV (IJSDIM, KMAX) !< v tendency + REAL(kind_phys) GMFLX (IJSDIM, KMAX) !< mass flux ! ! [OUTPUT] - REAL(r8) GPRCP (IJSDIM, KMAX) ! rainfall flux - REAL(r8) GSNWP (IJSDIM, KMAX) ! snowfall flux - REAL(r8) GTEVP (IJSDIM, KMAX) ! evaporation+sublimation - REAL(r8) GMDD (IJSDIM, KMAX) ! downdraft mass flux + REAL(kind_phys) GPRCP (IJSDIM, KMAX) !< rainfall flux + REAL(kind_phys) GSNWP (IJSDIM, KMAX) !< snowfall flux + REAL(kind_phys) GTEVP (IJSDIM, KMAX) !< evaporation+sublimation + REAL(kind_phys) GMDD (IJSDIM, KMAX) !< downdraft mass flux !AW microphysical tendencies - REAL(r8) gtmelt (IJSDIM, KMAX) ! t tendency ice-liq - REAL(r8) gtevap (IJSDIM, KMAX) ! t tendency liq-vapor - REAL(r8) gtsubl (IJSDIM, KMAX) ! t tendency ice-vapor + REAL(kind_phys) gtmelt (IJSDIM, KMAX) !< t tendency ice-liq + REAL(kind_phys) gtevap (IJSDIM, KMAX) !< t tendency liq-vapor + REAL(kind_phys) gtsubl (IJSDIM, KMAX) !< t tendency ice-vapor !AW eddy flux tendencies - REAL(r8) dtdwn (IJSDIM, KMAX) ! t tendency downdraft detrainment - REAL(r8) dqvdwn (IJSDIM, KMAX) ! qv tendency downdraft detrainment - REAL(r8) dqldwn (IJSDIM, KMAX) ! ql tendency downdraft detrainment - REAL(r8) dqidwn (IJSDIM, KMAX) ! qi tendency downdraft detrainment - REAL(r8) dtrdwn (IJSDIM, KMAX, ntrq:ntr) ! tracer tendency downdraft detrainment + REAL(kind_phys) dtdwn (IJSDIM, KMAX) !< t tendency downdraft detrainment + REAL(kind_phys) dqvdwn (IJSDIM, KMAX) !< qv tendency downdraft detrainment + REAL(kind_phys) dqldwn (IJSDIM, KMAX) !< ql tendency downdraft detrainment + REAL(kind_phys) dqidwn (IJSDIM, KMAX) !< qi tendency downdraft detrainment + REAL(kind_phys) dtrdwn (IJSDIM, KMAX, ntrq:ntr) !< tracer tendency downdraft detrainment ! AW downdraft area fraction (assumed zero for now) - REAL(r8) sigmad (IJSDIM,KMAX) !DDsigma cloud downdraft area fraction + REAL(kind_phys) sigmad (IJSDIM,KMAX) !< DDsigma cloud downdraft area fraction ! [INPUT] - REAL(r8) GPRCI (IJSDIM, KMAX) ! rainfall generation - REAL(r8) GSNWI (IJSDIM, KMAX) ! snowfall generation - REAL(r8) GDH (IJSDIM, KMAX) ! moist static energy - REAL(r8) GDW (IJSDIM, KMAX) ! total water - REAL(r8) GDQ (IJSDIM, KMAX, NTR) ! humidity etc - REAL(r8) GDQI (IJSDIM, KMAX) ! cloud ice - REAL(r8) GDQS (IJSDIM, KMAX) ! saturate humidity - REAL(r8) GDS (IJSDIM, KMAX) ! dry static energy - REAL(r8) GDHS (IJSDIM, KMAX) ! saturate moist static energy - REAL(r8) GDT (IJSDIM, KMAX) ! air temperature T - REAL(r8) GDU (IJSDIM, KMAX) ! u-velocity - REAL(r8) GDV (IJSDIM, KMAX) ! v-velocity - REAL(r8) GDZ (IJSDIM, KMAX) ! altitude - REAL(r8) GDZM (IJSDIM, KMAX+1) ! altitude (half lev) - REAL(r8) FDQS (IJSDIM, KMAX) - REAL(r8) DELP (IJSDIM, KMAX) - REAL(r8) DELPI (IJSDIM, KMAX) + REAL(kind_phys) GPRCI (IJSDIM, KMAX) !< rainfall generation + REAL(kind_phys) GSNWI (IJSDIM, KMAX) !< snowfall generation + REAL(kind_phys) GDH (IJSDIM, KMAX) !< moist static energy + REAL(kind_phys) GDW (IJSDIM, KMAX) !< total water + REAL(kind_phys) GDQ (IJSDIM, KMAX, NTR) !< humidity etc + REAL(kind_phys) GDQI (IJSDIM, KMAX) !< cloud ice + REAL(kind_phys) GDQS (IJSDIM, KMAX) !< saturate humidity + REAL(kind_phys) GDS (IJSDIM, KMAX) !< dry static energy + REAL(kind_phys) GDHS (IJSDIM, KMAX) !< saturate moist static energy + REAL(kind_phys) GDT (IJSDIM, KMAX) !< air temperature T + REAL(kind_phys) GDU (IJSDIM, KMAX) !< u-velocity + REAL(kind_phys) GDV (IJSDIM, KMAX) !< v-velocity + REAL(kind_phys) GDZ (IJSDIM, KMAX) !< altitude + REAL(kind_phys) GDZM (IJSDIM, KMAX+1) !< altitude (half lev) + REAL(kind_phys) FDQS (IJSDIM, KMAX) + REAL(kind_phys) DELP (IJSDIM, KMAX) + REAL(kind_phys) DELPI (IJSDIM, KMAX) INTEGER KB (IJSDIM) INTEGER KTMX, ISTS, IENS ! ! [INTERNAL WORK] ! Note: Some variables have 3-dimensions for the purpose of budget check. - REAL(r8) EVAPD (IJSDIM, KMAX) ! evap. in downdraft - REAL(r8) SUBLD (IJSDIM, KMAX) ! subl. in downdraft - REAL(r8) EVAPE (IJSDIM, KMAX) ! evap. in environment - REAL(r8) SUBLE (IJSDIM, KMAX) ! subl. in environment - REAL(r8) EVAPX (IJSDIM, KMAX) ! evap. env. to DD - REAL(r8) SUBLX (IJSDIM, KMAX) ! subl. env. to DD - REAL(r8) GMDDE (IJSDIM, KMAX) ! downdraft entrainment - REAL(r8) SNMLT (IJSDIM, KMAX) ! melt - freeze - REAL(r8) GCHDD (IJSDIM, KMAX) ! MSE detrainment - REAL(r8) GCWDD (IJSDIM, KMAX) ! water detrainment - REAL(r8) GTTEV (IJSDIM, KMAX) ! T tendency by evaporation - REAL(r8) GTQEV (IJSDIM, KMAX) ! q tendency by evaporation - REAL(r8) GCHD (ISTS:IENS) ! downdraft MSE - REAL(r8) GCWD (ISTS:IENS) ! downdraft q + REAL(kind_phys) EVAPD (IJSDIM, KMAX) !< evap. in downdraft + REAL(kind_phys) SUBLD (IJSDIM, KMAX) !< subl. in downdraft + REAL(kind_phys) EVAPE (IJSDIM, KMAX) !< evap. in environment + REAL(kind_phys) SUBLE (IJSDIM, KMAX) !< subl. in environment + REAL(kind_phys) EVAPX (IJSDIM, KMAX) !< evap. env. to DD + REAL(kind_phys) SUBLX (IJSDIM, KMAX) !< subl. env. to DD + REAL(kind_phys) GMDDE (IJSDIM, KMAX) !< downdraft entrainment + REAL(kind_phys) SNMLT (IJSDIM, KMAX) !< melt - freeze + REAL(kind_phys) GCHDD (IJSDIM, KMAX) !< MSE detrainment + REAL(kind_phys) GCWDD (IJSDIM, KMAX) !< water detrainment + REAL(kind_phys) GTTEV (IJSDIM, KMAX) !< T tendency by evaporation + REAL(kind_phys) GTQEV (IJSDIM, KMAX) !< q tendency by evaporation + REAL(kind_phys) GCHD (ISTS:IENS) !< downdraft MSE + REAL(kind_phys) GCWD (ISTS:IENS) !< downdraft q ! profiles of downdraft variables for AW flux tendencies - REAL(r8) GCdseD(ISTS:IENS, KMAX) ! downdraft dse - REAL(r8) GCqvD (ISTS:IENS, KMAX) ! downdraft qv -! REAL(r8) GCqlD (ISTS:IENS, KMAX) ! downdraft ql -! REAL(r8) GCqiD (ISTS:IENS, KMAX) ! downdraft qi - REAL(r8) GCtrD (ISTS:IENS, ntrq:ntr) ! downdraft tracer - - REAL(r8) GCUD (ISTS:IENS) ! downdraft u - REAL(r8) GCVD (ISTS:IENS) ! downdraft v - REAL(r8) FSNOW (ISTS:IENS) - REAL(r8) GMDDD (ISTS:IENS) - - REAL(r8) GDTW, GCHX, GCTX, GCQSX, GTPRP, EVSU, GTEVE, LVIC, & + REAL(kind_phys) GCdseD(ISTS:IENS, KMAX) !< downdraft dse + REAL(kind_phys) GCqvD (ISTS:IENS, KMAX) !< downdraft qv +! REAL(kind_phys) GCqlD (ISTS:IENS, KMAX) !< downdraft ql +! REAL(kind_phys) GCqiD (ISTS:IENS, KMAX) !< downdraft qi + REAL(kind_phys) GCtrD (ISTS:IENS, ntrq:ntr) !< downdraft tracer + + REAL(kind_phys) GCUD (ISTS:IENS) !< downdraft u + REAL(kind_phys) GCVD (ISTS:IENS) !< downdraft v + REAL(kind_phys) FSNOW (ISTS:IENS) + REAL(kind_phys) GMDDD (ISTS:IENS) + + REAL(kind_phys) GDTW, GCHX, GCTX, GCQSX, GTPRP, EVSU, GTEVE, LVIC, & DQW, DTW, GDQW, DZ, GCSD, FDET, GDHI, GMDDX, & GMDDMX, GCHDX, GCWDX, GCUDD, GCVDD, GTHCI, GTQVCI, & wrk, wrk1, wrk2, wrk3, wrk4, tx1, & WMX, HMX, DDWMX, DDHMX, dp_above, dp_below, fsigma, & fmelt, fevp, wrkn, gctrdd(ntrq:ntr) -!M REAL(r8) GTHCI, GTQVCI, GTQLCI, GTQICI, GTUCI, GTVCI +!M REAL(kind_phys) GTHCI, GTQVCI, GTQLCI, GTQICI, GTUCI, GTVCI !DD#ifdef OPT_CUMBGT ! Water, energy, downdraft water and downdraft energy budgets -! REAL(r8), dimension(ISTS:IENS) :: WBGT, HBGT, DDWBGT, DDHBGT +! REAL(kind_phys), dimension(ISTS:IENS) :: WBGT, HBGT, DDWBGT, DDHBGT integer ij, i, k, kp1, n !DD#endif ! ! [INTERNAL PARM] - REAL(r8), parameter :: TWSNOW = 273.15_r8 ! wet-bulb temp. rain/snow - REAL(r8), parameter :: FTMLT = 4._r8 ! temp. factor for melt - REAL(r8), parameter :: GMFLXC = 5.e-2_r8 ! critical mass flux - REAL(r8), parameter :: VTERMS = 2._r8 ! terminal velocity of snowflake -! REAL(r8), parameter :: MELTAU = 10._r8 ! melting timescale - REAL(r8), parameter :: MELTAU = 20._r8 ! melting timescale ! Moorthi june 30, 2017 -! -! REAL(r8), parameter :: EVAPR = 0.4_r8 ! evaporation factor ! Moorthi June 28, 2017 - REAL(r8), parameter :: EVAPR = 0.3_r8 ! evaporation factor -! REAL(r8), parameter :: EVAPR = 0._r8 ! evaporation factor - REAL(r8), parameter :: REVPDD = 1._r8 ! max rate of DD to evapolation - REAL(r8), parameter :: RDDR = 5.e-4_r8 ! DD rate (T0 R0 W0)^-1 -! REAL(r8), parameter :: RDDR = 0._r8 ! DD rate (T0 R0 W0)^-1 - REAL(r8), parameter :: RDDMX = 0.5_r8 ! norm. flux of downdraft - REAL(r8), parameter :: VTERM = 5._r8 ! term. vel. of precip. -! REAL(r8), parameter :: VTERM = 4._r8 ! term. vel. of precip. ! Moorthi June 28, 2017 - REAL(r8), parameter :: EVATAU = 2._r8 ! evaporation/sublimation timescale - REAL(r8), parameter :: ZDMIN = 5.e2_r8 ! min altitude of downdraft detrainment - real(r8), parameter :: evapovtrm=EVAPR/VTERM + REAL(kind_phys), parameter :: TWSNOW = 273.15_kind_phys !< wet-bulb temp. rain/snow + REAL(kind_phys), parameter :: FTMLT = 4._kind_phys !< temp. factor for melt + REAL(kind_phys), parameter :: GMFLXC = 5.e-2_kind_phys !< critical mass flux + REAL(kind_phys), parameter :: VTERMS = 2._kind_phys !< terminal velocity of snowflake +! REAL(kind_phys), parameter :: MELTAU = 10._kind_phys !< melting timescale + REAL(kind_phys), parameter :: MELTAU = 20._kind_phys !< melting timescale ! Moorthi june 30, 2017 +! +! REAL(kind_phys), parameter :: EVAPR = 0.4_kind_phys !< evaporation factor ! Moorthi June 28, 2017 + REAL(kind_phys), parameter :: EVAPR = 0.3_kind_phys !< evaporation factor +! REAL(kind_phys), parameter :: EVAPR = 0._kind_phys !< evaporation factor + REAL(kind_phys), parameter :: REVPDD = 1._kind_phys !< max rate of DD to evapolation + REAL(kind_phys), parameter :: RDDR = 5.e-4_kind_phys !< DD rate (T0 R0 W0)^-1 +! REAL(kind_phys), parameter :: RDDR = 0._kind_phys !< DD rate (T0 R0 W0)^-1 + REAL(kind_phys), parameter :: RDDMX = 0.5_kind_phys !< norm. flux of downdraft + REAL(kind_phys), parameter :: VTERM = 5._kind_phys !< term. vel. of precip. +! REAL(kind_phys), parameter :: VTERM = 4._kind_phys !< term. vel. of precip. ! Moorthi June 28, 2017 + REAL(kind_phys), parameter :: EVATAU = 2._kind_phys !< evaporation/sublimation timescale + REAL(kind_phys), parameter :: ZDMIN = 5.e2_kind_phys !< min altitude of downdraft detrainment + real(kind_phys), parameter :: evapovtrm=EVAPR/VTERM !NOTE ! downdraft area ffraction still needs to be computed for AW, assumed zero for now, @@ -3543,29 +3543,29 @@ SUBROUTINE CUMCLD & !! cloudiness INTEGER, INTENT(IN) :: IJSDIM, KMAX ! DD, for GFS, pass in ! ! [OUTPUT] - REAL(r8) CUMFRC(IJSDIM) ! cumulus cloud fraction + REAL(kind_phys) CUMFRC(IJSDIM) !< cumulus cloud fraction ! ! [MODIFY] - REAL(r8) CUMCLW(IJSDIM, KMAX) ! cloud water in cumulus - REAL(r8) QLIQ (IJSDIM, KMAX) ! cloud liquid - REAL(r8) QICE (IJSDIM, KMAX) ! cloud ice - REAL(r8) FLIQC (IJSDIM, KMAX) ! liquid ratio in cumulus + REAL(kind_phys) CUMCLW(IJSDIM, KMAX) !< cloud water in cumulus + REAL(kind_phys) QLIQ (IJSDIM, KMAX) !< cloud liquid + REAL(kind_phys) QICE (IJSDIM, KMAX) !< cloud ice + REAL(kind_phys) FLIQC (IJSDIM, KMAX) !< liquid ratio in cumulus ! ! [INPUT] - REAL(r8) GMFLX (IJSDIM, KMAX) ! cumulus mass flux + REAL(kind_phys) GMFLX (IJSDIM, KMAX) ! cumulus mass flux INTEGER KTMX INTEGER ISTS, IENS ! ! [WORK] INTEGER I, K - REAL(r8) CUMF, QC, wrk + REAL(kind_phys) CUMF, QC, wrk ! ! [INTERNAL PARAM] - REAL(r8), parameter :: CMFMIN = 2.e-3_r8, &! Mc->cloudiness - CMFMAX = 3.e-1_r8, &! Mc->cloudiness - CLMIN = 1.e-3_r8, &! cloudiness Min. - CLMAX = 0.1_r8, &! cloudiness Max. - FACLW = 0.1_r8, &! Mc->CLW + REAL(kind_phys), parameter :: CMFMIN = 2.e-3_kind_phys, &!< Mc->cloudiness + CMFMAX = 3.e-1_kind_phys, &!< Mc->cloudiness + CLMIN = 1.e-3_kind_phys, &!< cloudiness Min. + CLMAX = 0.1_kind_phys, &!< cloudiness Max. + FACLW = 0.1_kind_phys, &!< Mc->CLW FACLF = (CLMAX-CLMIN)/LOG(CMFMAX/CMFMIN) ! CUMFRC(ISTS:IENS) = zero @@ -3615,37 +3615,37 @@ SUBROUTINE CUMUPR & !! Tracer Updraft INTEGER, INTENT(IN) :: im, IJSDIM, KMAX, NTR, nctp !! DD, for GFS, pass in ! ! [MODIFY] - REAL(r8) GTR (IJSDIM, KMAX, NTR) - REAL(r8) GPRCC (IJSDIM, NTR) + REAL(kind_phys) GTR (IJSDIM, KMAX, NTR) + REAL(kind_phys) GPRCC (IJSDIM, NTR) ! ! [INPUT] - REAL(r8) GDR (IJSDIM, KMAX, NTR) - REAL(r8) CBMFX (IM, NCTP) - REAL(r8) GCYM (IJSDIM, KMAX, nctp) - REAL(r8) GCYT (IJSDIM, NCTP) - REAL(r8) GCQT (IJSDIM, NCTP) - REAL(r8) GCLT (IJSDIM, NCTP) - REAL(r8) GCIT (IJSDIM, NCTP) - REAL(r8) GTPRT (IJSDIM, NCTP) - REAL(r8) GTEVP (IJSDIM, KMAX) - REAL(r8) GTPRC0(IJSDIM) !! precip. before evap. - real(r8) fscav(ntr), fswtr(ntr) + REAL(kind_phys) GDR (IJSDIM, KMAX, NTR) + REAL(kind_phys) CBMFX (IM, NCTP) + REAL(kind_phys) GCYM (IJSDIM, KMAX, nctp) + REAL(kind_phys) GCYT (IJSDIM, NCTP) + REAL(kind_phys) GCQT (IJSDIM, NCTP) + REAL(kind_phys) GCLT (IJSDIM, NCTP) + REAL(kind_phys) GCIT (IJSDIM, NCTP) + REAL(kind_phys) GTPRT (IJSDIM, NCTP) + REAL(kind_phys) GTEVP (IJSDIM, KMAX) + REAL(kind_phys) GTPRC0(IJSDIM) !! precip. before evap. + real(kind_phys) fscav(ntr), fswtr(ntr) INTEGER KB (IJSDIM ) INTEGER KBMX INTEGER KT (IJSDIM, NCTP) INTEGER KTMX (NCTP) INTEGER KTMXT - REAL(r8) DELPI (IJSDIM, KMAX) + REAL(kind_phys) DELPI (IJSDIM, KMAX) LOGICAL OTSPT (NTR) !! transport with this routine? INTEGER ISTS, IENS ! ! [INTERNAL WORK] INTEGER I, K, LT, TP, CTP - REAL(r8) :: GCRTD, SCAV, GCWT, GPRCR, evpf, cbmfxl - REAL(r8), dimension(ists:iens) :: GCRB, GCRT, DR, gtprc0i -! REAL(r8), dimension(ists:iens,kmax) :: DGCB, DZ, RDZM, EVPF -! REAL(r8), dimension(ists:iens,nctp) :: DZT, RGCWT, MASK1, MASK2 - REAL(r8), dimension(ists:iens,nctp) :: RGCWT, MASK1 + REAL(kind_phys) :: GCRTD, SCAV, GCWT, GPRCR, evpf, cbmfxl + REAL(kind_phys), dimension(ists:iens) :: GCRB, GCRT, DR, gtprc0i +! REAL(kind_phys), dimension(ists:iens,kmax) :: DGCB, DZ, RDZM, EVPF +! REAL(kind_phys), dimension(ists:iens,nctp) :: DZT, RGCWT, MASK1, MASK2 + REAL(kind_phys), dimension(ists:iens,nctp) :: RGCWT, MASK1 ! do i=ists,iens if (gtprc0(i) > zero) then @@ -3752,18 +3752,18 @@ SUBROUTINE CUMDNR & !! Tracer Downdraft INTEGER, INTENT(IN) :: IM, IJSDIM, KMAX, NTR !! DD, for GFS, pass in ! ! [MODIFY] - REAL(r8) GTR (IJSDIM, KMAX, NTR) ! Temperature tendency + REAL(kind_phys) GTR (IJSDIM, KMAX, NTR) ! Temperature tendency ! ! [INPUT] - REAL(r8) GDR (IJSDIM, KMAX, NTR) - REAL(r8) GMDD (IJSDIM, KMAX) ! downdraft mass flux - REAL(r8) DELPI (IJSDIM, KMAX ) + REAL(kind_phys) GDR (IJSDIM, KMAX, NTR) + REAL(kind_phys) GMDD (IJSDIM, KMAX) ! downdraft mass flux + REAL(kind_phys) DELPI (IJSDIM, KMAX ) LOGICAL OTSPT (NTR) INTEGER KTMX, ISTS, IENS ! ! [INTERNAL WORK] - REAL(r8) GCRD (ISTS:IENS) ! downdraft q - REAL(r8) GMDDE, GMDDD, GCRDD + REAL(kind_phys) GCRD (ISTS:IENS) ! downdraft q + REAL(kind_phys) GMDDE, GMDDD, GCRDD INTEGER I, K, LT, kp1 ! ! @@ -3803,20 +3803,20 @@ SUBROUTINE CUMSBR & !! Tracer Subsidence INTEGER, INTENT(IN) :: IM, IJSDIM, KMAX, NTR !! DD, for GFS, pass in ! ! [MODIFY] - REAL(r8) GTR (IJSDIM, KMAX, NTR) !! tracer tendency + REAL(kind_phys) GTR (IJSDIM, KMAX, NTR) !! tracer tendency ! ! [INPUT] - REAL(r8) GDR (IJSDIM, KMAX, NTR) !! tracer - REAL(r8) DELPI (IJSDIM, KMAX) - REAL(r8) GMFLX (IJSDIM, KMAX) !! mass flux + REAL(kind_phys) GDR (IJSDIM, KMAX, NTR) !! tracer + REAL(kind_phys) DELPI (IJSDIM, KMAX) + REAL(kind_phys) GMFLX (IJSDIM, KMAX) !! mass flux INTEGER KTMX LOGICAL OTSPT (NTR) !! tracer transport on/off INTEGER ISTS, IENS ! ! [INTERNAL WORK] INTEGER I, K, KM, KP, LT - REAL(r8) SBR0, SBR1, FX1 - REAL(r8) FX(ISTS:IENS) + REAL(kind_phys) SBR0, SBR1, FX1 + REAL(kind_phys) FX(ISTS:IENS) ! DO LT=1,NTR IF (OTSPT(LT)) THEN @@ -3857,12 +3857,12 @@ SUBROUTINE CUMFXR & ! Tracer mass fixe INTEGER, INTENT(IN) :: IM, IJSDIM, KMAX, NTR !! DD, for GFS, pass in ! ! [MODIFY] - REAL(r8) GTR (IJSDIM, KMAX, NTR) ! tracer tendency + REAL(kind_phys) GTR (IJSDIM, KMAX, NTR) ! tracer tendency ! ! [INPUT] - REAL(r8) GDR (IJSDIM, KMAX, NTR) ! tracer - REAL(r8) DELP (IJSDIM, KMAX) - REAL(r8) DELTA ! time step + REAL(kind_phys) GDR (IJSDIM, KMAX, NTR) ! tracer + REAL(kind_phys) DELP (IJSDIM, KMAX) + REAL(kind_phys) DELTA ! time step INTEGER KTMX INTEGER IMFXR (NTR) ! 0: mass fixer is not applied @@ -3877,10 +3877,10 @@ SUBROUTINE CUMFXR & ! Tracer mass fixe INTEGER ISTS, IENS ! ! [INTERNAL WORK] - REAL(r8) GDR1 - REAL(r8) GDR2 (ISTS:IENS, KMAX) - REAL(r8), dimension(ISTS:IENS) :: TOT0, TOT1, TRAT - REAL(r8) FWAT + REAL(kind_phys) GDR1 + REAL(kind_phys) GDR2 (ISTS:IENS, KMAX) + REAL(kind_phys), dimension(ISTS:IENS) :: TOT0, TOT1, TRAT + REAL(kind_phys) FWAT INTEGER I, K, LT ! ! Attention: tracers are forced to be positive unless IMFXR=0. @@ -3949,12 +3949,12 @@ SUBROUTINE CUMFXR1 & ! Tracer mass fixer INTEGER, INTENT(IN) :: IM, IJSDIM, KMAX ! DD, for GFS, pass in ! ! [MODIFY] - REAL(r8) GTR (IJSDIM, KMAX) ! tracer tendency + REAL(kind_phys) GTR (IJSDIM, KMAX) ! tracer tendency ! ! [INPUT] - REAL(r8) GDR (IJSDIM, KMAX) ! tracer - REAL(r8) DELP (IJSDIM, KMAX) - REAL(r8) DELTA ! time step + REAL(kind_phys) GDR (IJSDIM, KMAX) ! tracer + REAL(kind_phys) DELP (IJSDIM, KMAX) + REAL(kind_phys) DELTA ! time step INTEGER KTMX INTEGER IMFXR ! 0: mass fixer is not applied @@ -3967,10 +3967,10 @@ SUBROUTINE CUMFXR1 & ! Tracer mass fixer INTEGER ISTS, IENS ! ! [INTERNAL WORK] - REAL(r8) GDR1 - REAL(r8) GDR2 (ISTS:IENS, KMAX) - REAL(r8), dimension(ISTS:IENS) :: TOT0, TOT1, TRAT - REAL(r8) FWAT + REAL(kind_phys) GDR1 + REAL(kind_phys) GDR2 (ISTS:IENS, KMAX) + REAL(kind_phys), dimension(ISTS:IENS) :: TOT0, TOT1, TRAT + REAL(kind_phys) FWAT INTEGER I, K ! ! Attention: tracers are forced to be positive unless IMFXR=0. @@ -4035,17 +4035,17 @@ SUBROUTINE CUMCHK & ! check range of output va INTEGER, INTENT(IN) :: IJSDIM, KMAX, NTR ! DD, for GFS, pass in ! ! [INPUT] - REAL(r8) GTT (IJSDIM, KMAX) ! heating rate - REAL(r8) GTQ (IJSDIM, KMAX, NTR) ! change in q - REAL(r8) GTU (IJSDIM, KMAX) ! tendency of u - REAL(r8) GTV (IJSDIM, KMAX) ! tendency of v - REAL(r8) GPRCC (IJSDIM, NTR ) ! rainfall - REAL(r8) GSNWC (IJSDIM) ! snowfall - REAL(r8) CUMCLW(IJSDIM, KMAX) ! cloud water in cumulus - REAL(r8) CUMFRC(IJSDIM) ! cumulus cloud fraction - REAL(r8) GTCFRC(IJSDIM, KMAX) ! change in cloud fraction - REAL(r8) FLIQC (IJSDIM, KMAX) ! liquid ratio in cumulus - REAL(r8) GTPRP (IJSDIM, KMAX) ! rain+snow flux + REAL(kind_phys) GTT (IJSDIM, KMAX) ! heating rate + REAL(kind_phys) GTQ (IJSDIM, KMAX, NTR) ! change in q + REAL(kind_phys) GTU (IJSDIM, KMAX) ! tendency of u + REAL(kind_phys) GTV (IJSDIM, KMAX) ! tendency of v + REAL(kind_phys) GPRCC (IJSDIM, NTR ) ! rainfall + REAL(kind_phys) GSNWC (IJSDIM) ! snowfall + REAL(kind_phys) CUMCLW(IJSDIM, KMAX) ! cloud water in cumulus + REAL(kind_phys) CUMFRC(IJSDIM) ! cumulus cloud fraction + REAL(kind_phys) GTCFRC(IJSDIM, KMAX) ! change in cloud fraction + REAL(kind_phys) FLIQC (IJSDIM, KMAX) ! liquid ratio in cumulus + REAL(kind_phys) GTPRP (IJSDIM, KMAX) ! rain+snow flux ! INTEGER ISTS, IENS ! @@ -4053,19 +4053,19 @@ SUBROUTINE CUMCHK & ! check range of output va INTEGER I, K ! ! [INTERNAL PARM] - REAL(r8) :: GTTMAX = 1.e-2_r8 - REAL(r8) :: GTQVMAX = 1.e-4_r8 - REAL(r8) :: GTQLMAX = 1.e-5_r8 - REAL(r8) :: GTUMAX = 1.e-2_r8 - REAL(r8) :: GTVMAX = 1.e-2_r8 - REAL(r8) :: GTCFMAX = 1.e-3_r8 - REAL(r8) :: PRCCMAX = 1.e-2_r8 - REAL(r8) :: SNWCMAX = 1.e-2_r8 - REAL(r8) :: CLWMAX = 1.e-3_r8 - REAL(r8) :: TPRPMAX = 1.e-2_r8 - REAL(r8) :: GTQIMAX = 1.e-5_r8 - !REAL(r8) :: GTM2MAX = 1._r8 - !REAL(r8) :: GTM3MAX = 1._r8 + REAL(kind_phys) :: GTTMAX = 1.e-2_kind_phys + REAL(kind_phys) :: GTQVMAX = 1.e-4_kind_phys + REAL(kind_phys) :: GTQLMAX = 1.e-5_kind_phys + REAL(kind_phys) :: GTUMAX = 1.e-2_kind_phys + REAL(kind_phys) :: GTVMAX = 1.e-2_kind_phys + REAL(kind_phys) :: GTCFMAX = 1.e-3_kind_phys + REAL(kind_phys) :: PRCCMAX = 1.e-2_kind_phys + REAL(kind_phys) :: SNWCMAX = 1.e-2_kind_phys + REAL(kind_phys) :: CLWMAX = 1.e-3_kind_phys + REAL(kind_phys) :: TPRPMAX = 1.e-2_kind_phys + REAL(kind_phys) :: GTQIMAX = 1.e-5_kind_phys + !REAL(kind_phys) :: GTM2MAX = 1._kind_phys + !REAL(kind_phys) :: GTM3MAX = 1._kind_phys ! DO K=1,KMAX DO I=ISTS, IENS diff --git a/physics/cs_conv_aw_adj.F90 b/physics/cs_conv_aw_adj.F90 index 756161d8c..74cac9184 100644 --- a/physics/cs_conv_aw_adj.F90 +++ b/physics/cs_conv_aw_adj.F90 @@ -40,15 +40,15 @@ subroutine cs_conv_aw_adj_run(im, levs, do_cscnv, do_aw, do_shoc, & logical, intent(in) :: do_cscnv, do_aw, do_shoc integer, intent(in) :: ntrac, ncld, ntcw, ntclamt, nncl real(kind_phys), intent(in) :: con_g - real(kind_phys), dimension(im,levs), intent(inout) :: sigmafrac - real(kind_phys), dimension(im,levs), intent(inout) :: gt0 - real(kind_phys), dimension(im,levs,ntrac), intent(inout) :: gq0 - real(kind_phys), dimension(im,levs), intent(in) :: save_t - real(kind_phys), dimension(im,levs,ntrac), intent(in) :: save_q - real(kind_phys), dimension(im,levs+1), intent(in) :: prsi - real(kind_phys), dimension(im,levs), intent(inout) :: cldfrac - real(kind_phys), dimension(im,levs), intent(inout) :: subcldfrac - real(kind_phys), dimension(im), intent(inout) :: prcp + real(kind_phys), dimension(:,:), intent(inout) :: sigmafrac + real(kind_phys), dimension(:,:), intent(inout) :: gt0 + real(kind_phys), dimension(:,:,:), intent(inout) :: gq0 + real(kind_phys), dimension(:,:), intent(in) :: save_t + real(kind_phys), dimension(:,:,:), intent(in) :: save_q + real(kind_phys), dimension(:,:), intent(in) :: prsi + real(kind_phys), dimension(:,:), intent(inout) :: cldfrac + real(kind_phys), dimension(:,:), intent(inout) :: subcldfrac + real(kind_phys), dimension(:), intent(inout) :: prcp integer, intent(in ) :: imp_physics, imp_physics_mg character(len=*), intent( out) :: errmsg integer, intent( out) :: errflg diff --git a/physics/cu_gf_driver.F90 b/physics/cu_gf_driver.F90 index 85c523ed5..ffa10a8dd 100644 --- a/physics/cu_gf_driver.F90 +++ b/physics/cu_gf_driver.F90 @@ -96,49 +96,50 @@ subroutine cu_gf_driver_run(ntracer,garea,im,km,dt,cactiv, & logical, intent(in ) :: flag_for_scnv_generic_tend,flag_for_dcnv_generic_tend logical, intent(in ) :: ldiag3d - ! dtend is only allocated if ldiag=.true. real(kind=kind_phys), optional, intent(inout) :: dtend(:,:,:) integer, intent(in) :: dtidx(:,:), & - index_of_x_wind, index_of_y_wind, index_of_temperature, & + index_of_x_wind, index_of_y_wind, index_of_temperature, & index_of_process_scnv, index_of_process_dcnv, ntqv, ntcw, ntiw - real(kind=kind_phys), dimension( im , km ), intent(in ) :: forcet,forceqv_spechum,w,phil - real(kind=kind_phys), dimension( im , km ), intent(inout ) :: t,us,vs - real(kind=kind_phys), dimension( im , km ), intent(inout ) :: qci_conv - real(kind=kind_phys), dimension( im ) :: rand_mom,rand_vmas - real(kind=kind_phys), dimension( im,4 ) :: rand_clos - real(kind=kind_phys), dimension( im , km, 11 ) :: gdc,gdc2 - real(kind=kind_phys), dimension( im , km ), intent(out ) :: cnvw_moist,cnvc - real(kind=kind_phys), dimension( im , km ), intent(inout ) :: cliw, clcw + real(kind=kind_phys), dimension( : , : ), intent(in ) :: forcet,forceqv_spechum,w,phil + real(kind=kind_phys), dimension( : , : ), intent(inout ) :: t,us,vs + real(kind=kind_phys), dimension( : , : ), intent(inout ) :: qci_conv + real(kind=kind_phys), dimension( : , : ), intent(out ) :: cnvw_moist,cnvc + real(kind=kind_phys), dimension( : , : ), intent(inout ) :: cliw, clcw real(kind=kind_phys), allocatable :: clcw_save(:,:), cliw_save(:,:) - integer, dimension (im), intent(inout) :: hbot,htop,kcnv - integer, dimension (im), intent(in) :: xland - real(kind=kind_phys), dimension (im), intent(in) :: pbl + integer, dimension (:), intent(out) :: hbot,htop,kcnv + integer, dimension (:), intent(in) :: xland + real(kind=kind_phys), dimension (:), intent(in) :: pbl integer, dimension (im) :: tropics ! ruc variable - real(kind=kind_phys), dimension (im) :: hfx2,qfx2,psuri - real(kind=kind_phys), dimension (im,km) :: ud_mf,dd_mf,dt_mf - real(kind=kind_phys), dimension (im), intent(inout) :: raincv,cld1d - real(kind=kind_phys), dimension (im,km) :: t2di,p2di + real(kind=kind_phys), dimension (:), intent(in) :: hfx2,qfx2,psuri + real(kind=kind_phys), dimension (:,:), intent(out) :: ud_mf,dd_mf,dt_mf + real(kind=kind_phys), dimension (:), intent(out) :: raincv,cld1d + real(kind=kind_phys), dimension (:,:), intent(in) :: t2di,p2di ! Specific humidity from FV3 - real(kind=kind_phys), dimension (im,km), intent(in) :: qv2di_spechum - real(kind=kind_phys), dimension (im,km), intent(inout) :: qv_spechum + real(kind=kind_phys), dimension (:,:), intent(in) :: qv2di_spechum + real(kind=kind_phys), dimension (:,:), intent(inout) :: qv_spechum ! Local water vapor mixing ratios and cloud water mixing ratios real(kind=kind_phys), dimension (im,km) :: qv2di, qv, forceqv, cnvw ! - real(kind=kind_phys), dimension( im ),intent(in) :: garea + real(kind=kind_phys), dimension(:),intent(in) :: garea real(kind=kind_phys), intent(in ) :: dt integer, intent(in ) :: imfshalcnv + integer, dimension(:), intent(inout) :: cactiv + character(len=*), intent(out) :: errmsg integer, intent(out) :: errflg -! define locally for now. - integer, dimension(im),intent(inout) :: cactiv + +! local variables integer, dimension(im) :: k22_shallow,kbcon_shallow,ktop_shallow - real(kind=kind_phys), dimension(im) :: ht - real(kind=kind_phys), dimension(im) :: dx + real(kind=kind_phys), dimension (im) :: rand_mom,rand_vmas + real(kind=kind_phys), dimension (im,4) :: rand_clos + real(kind=kind_phys), dimension (im,km,11) :: gdc,gdc2 + real(kind=kind_phys), dimension (im) :: ht + real(kind=kind_phys), dimension (im) :: dx real(kind=kind_phys), dimension (im,km) :: outt,outq,outqc,phh,subm,cupclw,cupclws real(kind=kind_phys), dimension (im,km) :: dhdt,zu,zus,zd,phf,zum,zdm,outum,outvm real(kind=kind_phys), dimension (im,km) :: outts,outqs,outqcs,outu,outv,outus,outvs diff --git a/physics/cu_ntiedtke.F90 b/physics/cu_ntiedtke.F90 index a39930d77..0fab755dc 100644 --- a/physics/cu_ntiedtke.F90 +++ b/physics/cu_ntiedtke.F90 @@ -154,16 +154,16 @@ subroutine cu_ntiedtke_run(pu,pv,pt,pqv,tdi,qvdi,pqvf,ptf,clw,poz,pzz,prsl,prsi, ! in&out variables integer, intent(in) :: lq, km, ktrac real(kind=kind_phys), intent(in ) :: dt - integer, dimension( lq ), intent(in) :: lmask - real(kind=kind_phys), dimension( lq ), intent(in ) :: evap, hfx, dx - real(kind=kind_phys), dimension( lq , km ), intent(inout) :: pu, pv, pt, pqv - real(kind=kind_phys), dimension( lq , km ), intent(in ) :: tdi, qvdi, poz, prsl, pomg, pqvf, ptf - real(kind=kind_phys), dimension( lq , km+1 ), intent(in ) :: pzz, prsi - real(kind=kind_phys), dimension( lq , km, ktrac ), intent(inout ) :: clw - - integer, dimension( lq ), intent(out) :: kbot, ktop, kcnv - real(kind=kind_phys), dimension( lq ), intent(out) :: zprecc - real(kind=kind_phys), dimension (lq,km), intent(out) :: ud_mf, dd_mf, dt_mf, cnvw, cnvc + integer, dimension( : ), intent(in) :: lmask + real(kind=kind_phys), dimension( : ), intent(in ) :: evap, hfx, dx + real(kind=kind_phys), dimension( :, : ), intent(inout) :: pu, pv, pt, pqv + real(kind=kind_phys), dimension( :, :), intent(in ) :: tdi, qvdi, poz, prsl, pomg, pqvf, ptf + real(kind=kind_phys), dimension( :, : ), intent(in ) :: pzz, prsi + real(kind=kind_phys), dimension( :, :, : ), intent(inout ) :: clw + + integer, dimension( : ), intent(out) :: kbot, ktop, kcnv + real(kind=kind_phys), dimension( : ), intent(out) :: zprecc + real(kind=kind_phys), dimension (:, :), intent(out) :: ud_mf, dd_mf, dt_mf, cnvw, cnvc ! error messages character(len=*), intent(out) :: errmsg diff --git a/physics/dcyc2.f b/physics/dcyc2.f index f29d593a3..ad9365851 100644 --- a/physics/dcyc2.f +++ b/physics/dcyc2.f @@ -172,18 +172,19 @@ end subroutine dcyc2t3_finalize subroutine dcyc2t3_run & ! --- inputs: & ( solhr,slag,sdec,cdec,sinlat,coslat, & - & xlon,coszen,tsfc_lnd,tsfc_ice,tsfc_wat,tf,tsflw, & + & xlon,coszen,tsfc_lnd,tsfc_ice,tsfc_wat,tf,tsflw,tsfc, & & sfcemis_lnd, sfcemis_ice, sfcemis_wat, & & sfcdsw,sfcnsw,sfcdlw,swh,swhc,hlw,hlwc, & & sfcnirbmu,sfcnirdfu,sfcvisbmu,sfcvisdfu, & & sfcnirbmd,sfcnirdfd,sfcvisbmd,sfcvisdfd, & & im, levs, deltim, fhswr, & & dry, icy, wet, & - & use_LW_jacobian, sfculw, sfculw_jac, & + & minGPpres, use_LW_jacobian, sfculw, fluxlwUP_jac, & + & t_lay, t_lev, p_lay, p_lev, flux2D_lwUP, flux2D_lwDOWN, & & pert_radtend, do_sppt,ca_global, & ! & dry, icy, wet, lprnt, ipr, & ! --- input/output: - & dtdt,dtdtnp, & + & dtdt,dtdtnp,htrlw, & ! --- outputs: & adjsfcdsw,adjsfcnsw,adjsfcdlw,adjsfculw, & & adjsfculw_lnd,adjsfculw_ice,adjsfculw_wat,xmu,xcosz, & @@ -193,8 +194,8 @@ subroutine dcyc2t3_run & & ) ! use machine, only : kind_phys - use physcons, only : con_pi, con_sbc - + use physcons, only : con_pi, con_sbc, con_cp, con_g + use radiation_tools, only : cmp_tlev implicit none ! ! --- constant parameters: @@ -211,47 +212,52 @@ subroutine dcyc2t3_run & ! integer, intent(in) :: ipr ! logical lprnt - logical, dimension(im), intent(in) :: dry, icy, wet + logical, dimension(:), intent(in) :: dry, icy, wet logical, intent(in) :: use_LW_jacobian, pert_radtend logical, intent(in) :: do_sppt,ca_global real(kind=kind_phys), intent(in) :: solhr, slag, cdec, sdec, & - & deltim, fhswr + & deltim, fhswr, minGPpres - real(kind=kind_phys), dimension(im), intent(in) :: & + real(kind=kind_phys), dimension(:), intent(in) :: & & sinlat, coslat, xlon, coszen, tf, tsflw, sfcdlw, & - & sfcdsw, sfcnsw, sfculw, sfculw_jac + & sfcdsw, sfcnsw, sfculw, tsfc - real(kind=kind_phys), dimension(im), intent(in) :: & + real(kind=kind_phys), dimension(:), intent(in) :: & & tsfc_lnd, tsfc_ice, tsfc_wat, & & sfcemis_lnd, sfcemis_ice, sfcemis_wat - real(kind=kind_phys), dimension(im), intent(in) :: & + real(kind=kind_phys), dimension(:), intent(in) :: & & sfcnirbmu, sfcnirdfu, sfcvisbmu, sfcvisdfu, & & sfcnirbmd, sfcnirdfd, sfcvisbmd, sfcvisdfd - real(kind=kind_phys), dimension(im,levs), intent(in) :: swh, hlw & - &, swhc, hlwc + real(kind=kind_phys), dimension(:,:), intent(in) :: swh, hlw, & + & swhc, hlwc, p_lay, t_lay + + real(kind=kind_phys), dimension(:,:), intent(in) :: p_lev, & + & flux2D_lwUP, flux2D_lwDOWN, fluxlwUP_jac, t_lev ! --- input/output: - real(kind=kind_phys), dimension(im,levs), intent(inout) :: dtdt - real(kind=kind_phys), dimension(:,:), intent(inout) :: dtdtnp + real(kind=kind_phys), dimension(:,:), intent(inout) :: dtdt, htrlw + real(kind=kind_phys), dimension(:,:), intent(inout) :: dtdtnp ! --- outputs: - real(kind=kind_phys), dimension(im), intent(out) :: & + real(kind=kind_phys), dimension(:), intent(out) :: & & adjsfcdsw, adjsfcnsw, adjsfcdlw, adjsfculw, xmu, xcosz, & & adjnirbmu, adjnirdfu, adjvisbmu, adjvisdfu, & & adjnirbmd, adjnirdfd, adjvisbmd, adjvisdfd - real(kind=kind_phys), dimension(im), intent(out) :: & + real(kind=kind_phys), dimension(:), intent(out) :: & & adjsfculw_lnd, adjsfculw_ice, adjsfculw_wat character(len=*), intent(out) :: errmsg integer, intent(out) :: errflg ! --- locals: - integer :: i, k, nstp, nstl, it, istsun(im) + integer :: i, k, nstp, nstl, it, istsun(im),iSFC real(kind=kind_phys) :: cns, coszn, tem1, tem2, anginc, & & rstl, solang, dT + real(kind=kind_phys), dimension(im,levs+1) :: flxlwup_adj, & + & flxlwdn_adj, t_lev2 ! !===> ... begin here ! @@ -259,6 +265,13 @@ subroutine dcyc2t3_run & errmsg = '' errflg = 0 +! Vertical ordering? + if (p_lev(1,1) .lt. p_lev(1, levs)) then + iSFC = levs + else + iSFC = 1 + endif + tem1 = fhswr / deltim nstp = max(6, nint(tem1)) nstl = max(1, nint(nstp/tem1)) @@ -302,9 +315,9 @@ subroutine dcyc2t3_run & adjsfcdlw(i) = sfcdlw(i) * tem2 * tem2 !> - LW time-step adjustment: if (use_LW_Jacobian) then - ! F_adj = F_o + (dF/dT) * dT + ! F_adj = F_o + (dF/dT) * dT dT = tf(i) - tsflw(i) - adjsfculw(i) = sfculw(i) + sfculw_jac(i) * dT + adjsfculw(i) = sfculw(i) + fluxlwUP_jac(i,iSFC) * dT else !! - adjust \a sfc downward LW flux to account for t changes in the lowest model layer. !! compute 4th power of the ratio of \c tf in the lowest model layer over the mean value \c tsflw. @@ -354,13 +367,50 @@ subroutine dcyc2t3_run & enddo !> - adjust SW heating rates with zenith angle change and -!! add with LW heating to temperature tendency. +! add with LW heating to temperature tendency. + if (use_LW_jacobian) then + ! + ! Compute temperatute at level interfaces. + ! + call cmp_tlev(im, levs, minGPpres, p_lay, t_lay, p_lev, tsfc, & + & t_lev2) + + ! + ! Adjust up/downward fluxes (at layer interfaces). + ! + do k = 1, levs+1 + do i = 1, im + dT = t_lev2(i,k) - t_lev(i,k) + flxlwup_adj(i,k) = flux2D_lwUP(i,k) + & + & fluxlwUP_jac(i,k)*dT + enddo + enddo + ! + ! Compute new heating rate (within each layer). + ! + do k = 1, levs + htrlw(1:im,k) = & + & (flxlwup_adj(1:im,k+1) - flxlwup_adj(1:im,k) - & + & flux2D_lwDOWN(1:im,k+1) + flux2D_lwDOWN(1:im,k)) * & + & con_g / (con_cp * (p_lev(1:im,k+1) - p_lev(1:im,k))) + enddo + + ! + ! Add radiative heating rates to physics heating rate + ! + do k = 1, levs + do i = 1, im + dtdt(i,k) = dtdt(i,k) + swh(i,k)*xmu(i) + htrlw(i,k) + enddo + enddo + else + do k = 1, levs + do i = 1, im + dtdt(i,k) = dtdt(i,k) + swh(i,k)*xmu(i) + hlw(i,k) + enddo + enddo + endif - do k = 1, levs - do i = 1, im - dtdt(i,k) = dtdt(i,k) + swh(i,k)*xmu(i) + hlw(i,k) - enddo - enddo if (do_sppt .or. ca_global) then if (pert_radtend) then ! clear sky diff --git a/physics/dcyc2.meta b/physics/dcyc2.meta index e4a22477d..a460db7ab 100644 --- a/physics/dcyc2.meta +++ b/physics/dcyc2.meta @@ -1,7 +1,7 @@ [ccpp-table-properties] name = dcyc2t3 type = scheme - dependencies = machine.F,physcons.F90 + dependencies = machine.F,physcons.F90,radiation_tools.F90 ######################################################################## [ccpp-arg-table] @@ -88,18 +88,18 @@ kind = kind_phys intent = in optional = F -[tsfc_wat] - standard_name = surface_skin_temperature_over_ocean_interstitial - long_name = surface skin temperature over ocean (temporary use as interstitial) +[tsfc_ice] + standard_name = surface_skin_temperature_over_ice_interstitial + long_name = surface skin temperature over ice (temporary use as interstitial) units = K dimensions = (horizontal_loop_extent) type = real kind = kind_phys intent = in optional = F -[tsfc_ice] - standard_name = surface_skin_temperature_over_ice_interstitial - long_name = surface skin temperature over ice (temporary use as interstitial) +[tsfc_wat] + standard_name = surface_skin_temperature_over_water_interstitial + long_name = surface skin temperature over water (temporary use as interstitial) units = K dimensions = (horizontal_loop_extent) type = real @@ -124,6 +124,15 @@ kind = kind_phys intent = in optional = F +[tsfc] + standard_name = surface_skin_temperature + long_name = surface skin temperature + units = K + dimensions = (horizontal_loop_extent) + type = real + kind = kind_phys + intent = in + optional = F [sfcemis_lnd] standard_name = surface_longwave_emissivity_over_land_interstitial long_name = surface lw emissivity in fraction over land (temporary use as interstitial) @@ -143,8 +152,8 @@ intent = in optional = F [sfcemis_wat] - standard_name = surface_longwave_emissivity_over_ocean_interstitial - long_name = surface lw emissivity in fraction over ocean (temporary use as interstitial) + standard_name = surface_longwave_emissivity_over_water_interstitial + long_name = surface lw emissivity in fraction over water (temporary use as interstitial) units = frac dimensions = (horizontal_loop_extent) type = real @@ -178,15 +187,6 @@ kind = kind_phys intent = in optional = F -[sfculw] - standard_name = surface_upwelling_longwave_flux_on_radiation_time_step - long_name = total sky sfc upward lw flux - units = W m-2 - dimensions = (horizontal_loop_extent) - type = real - kind = kind_phys - intent = in - optional = F [swh] standard_name = tendency_of_air_temperature_due_to_shortwave_heating_on_radiation_time_step long_name = total sky shortwave heating rate on radiation time step @@ -353,14 +353,94 @@ type = logical intent = in optional = F -[dtdt] - standard_name = tendency_of_air_temperature_due_to_model_physics - long_name = total radiative heating rate at current time - units = K s-1 +[minGPpres] + standard_name = minimum_pressure_in_RRTMGP + long_name = minimum pressure allowed in RRTMGP + units = Pa + dimensions = () + type = real + kind = kind_phys + intent = in + optional = F +[use_LW_jacobian] + standard_name = flag_to_calc_RRTMGP_LW_jacobian + long_name = logical flag to control RRTMGP LW calculation + units = flag + dimensions = () + type = logical + intent = in + optional = F +[sfculw] + standard_name = surface_upwelling_longwave_flux_on_radiation_time_step + long_name = total sky sfc upward lw flux + units = W m-2 + dimensions = (horizontal_loop_extent) + type = real + kind = kind_phys + intent = in + optional = F +[fluxlwUP_jac] + standard_name = RRTMGP_jacobian_of_lw_flux_upward + long_name = RRTMGP Jacobian upward longwave flux profile + units = W m-2 K-1 + dimensions = (horizontal_loop_extent,vertical_dimension_plus_one) + type = real + kind = kind_phys + intent = in + optional = F +[t_lay] + standard_name = air_temperature_updated_by_physics + long_name = model layer mean temperature updated by physics + units = K dimensions = (horizontal_loop_extent,vertical_dimension) type = real kind = kind_phys - intent = inout + intent = in + optional = F +[t_lev] + standard_name = air_temperature_at_interface_for_RRTMGP + long_name = air temperature at vertical interface for radiation calculation + units = K + dimensions = (horizontal_loop_extent,vertical_dimension_plus_one) + type = real + kind = kind_phys + intent = in + optional = F +[p_lay] + standard_name = air_pressure + long_name = mean layer pressure + units = Pa + dimensions = (horizontal_loop_extent,vertical_dimension) + type = real + kind = kind_phys + intent = in + optional = F +[p_lev] + standard_name = air_pressure_at_interface + long_name = air pressure at model layer interfaces + units = Pa + dimensions = (horizontal_loop_extent,vertical_dimension_plus_one) + type = real + kind = kind_phys + intent = in + optional = F +[flux2D_lwUP] + standard_name = RRTMGP_lw_flux_profile_upward_allsky + long_name = RRTMGP upward longwave all-sky flux profile + units = W m-2 + dimensions = (horizontal_loop_extent,vertical_dimension_plus_one) + type = real + kind = kind_phys + intent = in + optional = F +[flux2D_lwDOWN] + standard_name = RRTMGP_lw_flux_profile_downward_allsky + long_name = RRTMGP downward longwave all-sky flux profile + units = W m-2 + dimensions = (horizontal_loop_extent,vertical_dimension_plus_one) + type = real + kind = kind_phys + intent = in optional = F [pert_radtend] standard_name = flag_for_stochastic_radiative_heating_perturbations @@ -386,6 +466,15 @@ type = logical intent = in optional = F +[dtdt] + standard_name = tendency_of_air_temperature_due_to_model_physics + long_name = total radiative heating rate at current time + units = K s-1 + dimensions = (horizontal_loop_extent,vertical_dimension) + type = real + kind = kind_phys + intent = inout + optional = F [dtdtnp] standard_name = tendency_of_air_temperature_to_withold_from_sppt long_name = temp. change from physics that should not be perturbed by sppt @@ -395,6 +484,15 @@ kind = kind_phys intent = inout optional = F +[htrlw] + standard_name = updated_tendency_of_air_temperature_due_to_longwave_heating_on_physics_time_step + long_name = total sky longwave heating rate on physics time step + units = K s-1 + dimensions = (horizontal_loop_extent,vertical_dimension) + type = real + kind = kind_phys + intent = inout + optional = F [adjsfcdsw] standard_name = surface_downwelling_shortwave_flux long_name = surface downwelling shortwave flux at current time @@ -422,6 +520,15 @@ kind = kind_phys intent = out optional = F +[adjsfculw] + standard_name = surface_upwelling_longwave_flux + long_name = surface upwelling longwave flux at current time + units = W m-2 + dimensions = (horizontal_loop_extent) + type = real + kind = kind_phys + intent = out + optional = F [adjsfculw_lnd] standard_name = surface_upwelling_longwave_flux_over_land_interstitial long_name = surface upwelling longwave flux at current time over land (temporary use as interstitial) @@ -441,17 +548,8 @@ intent = out optional = F [adjsfculw_wat] - 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_loop_extent) - type = real - kind = kind_phys - intent = out - optional = F -[adjsfculw] - standard_name = surface_upwelling_longwave_flux - long_name = surface upwelling longwave flux at current time + standard_name = surface_upwelling_longwave_flux_over_water_interstitial + long_name = surface upwelling longwave flux at current time over water (temporary use as interstitial) units = W m-2 dimensions = (horizontal_loop_extent) type = real @@ -548,23 +646,6 @@ kind = kind_phys intent = out optional = F -[use_LW_jacobian] - standard_name = flag_to_calc_RRTMGP_LW_jacobian - long_name = logical flag to control RRTMGP LW calculation - units = flag - dimensions = () - type = logical - intent = in - optional = F -[sfculw_jac] - standard_name = RRTMGP_jacobian_of_lw_flux_upward_at_surface - long_name = RRTMGP Jacobian upward longwave flux at surface - units = W m-2 K-1 - dimensions = (horizontal_loop_extent) - type = real - kind = kind_phys - intent = in - optional = F [errmsg] standard_name = ccpp_error_message long_name = error message for error handling in CCPP diff --git a/physics/docs/ccpp_dox_layout.xml b/physics/docs/ccpp_dox_layout.xml index 527034db2..38112e6d9 100644 --- a/physics/docs/ccpp_dox_layout.xml +++ b/physics/docs/ccpp_dox_layout.xml @@ -2,23 +2,9 @@ - + - - - - - - - - - - - - - - - + diff --git a/physics/docs/ccppv5_doxyfile b/physics/docs/ccppv5_doxyfile new file mode 100644 index 000000000..1c1046c8c --- /dev/null +++ b/physics/docs/ccppv5_doxyfile @@ -0,0 +1,476 @@ +# Doxyfile 1.8.11 +DOXYFILE_ENCODING = UTF-8 +PROJECT_NAME = "CCPP Scientific Documentation" +PROJECT_NUMBER = "" +PROJECT_BRIEF = "v5.0.0" +PROJECT_LOGO = img/dtc_logo.png +OUTPUT_DIRECTORY = doc +CREATE_SUBDIRS = NO +ALLOW_UNICODE_NAMES = NO +OUTPUT_LANGUAGE = English +BRIEF_MEMBER_DESC = YES +REPEAT_BRIEF = NO +ABBREVIATE_BRIEF = +ALWAYS_DETAILED_SEC = NO +INLINE_INHERITED_MEMB = NO +FULL_PATH_NAMES = NO +STRIP_FROM_PATH = +STRIP_FROM_INC_PATH = +SHORT_NAMES = NO +JAVADOC_AUTOBRIEF = NO +QT_AUTOBRIEF = NO +MULTILINE_CPP_IS_BRIEF = NO +INHERIT_DOCS = YES +SEPARATE_MEMBER_PAGES = YES +TAB_SIZE = 4 +ALIASES = +TCL_SUBST = +OPTIMIZE_OUTPUT_FOR_C = NO +OPTIMIZE_OUTPUT_JAVA = NO +OPTIMIZE_FOR_FORTRAN = YES +OPTIMIZE_OUTPUT_VHDL = NO +EXTENSION_MAPPING = .f=FortranFree \ + .F=FortranFree \ + .F90=FortranFree \ + .f90=FortranFree +MARKDOWN_SUPPORT = YES +AUTOLINK_SUPPORT = YES +BUILTIN_STL_SUPPORT = NO +CPP_CLI_SUPPORT = NO +SIP_SUPPORT = NO +IDL_PROPERTY_SUPPORT = YES +DISTRIBUTE_GROUP_DOC = YES +GROUP_NESTED_COMPOUNDS = NO +SUBGROUPING = YES +INLINE_GROUPED_CLASSES = NO +INLINE_SIMPLE_STRUCTS = NO +TYPEDEF_HIDES_STRUCT = YES +LOOKUP_CACHE_SIZE = 0 +EXTRACT_ALL = YES +EXTRACT_PRIVATE = YES +EXTRACT_PACKAGE = YES +EXTRACT_STATIC = YES +EXTRACT_LOCAL_CLASSES = YES +EXTRACT_LOCAL_METHODS = YES +EXTRACT_ANON_NSPACES = YES +HIDE_UNDOC_MEMBERS = NO +HIDE_UNDOC_CLASSES = NO +HIDE_FRIEND_COMPOUNDS = NO +HIDE_IN_BODY_DOCS = NO +INTERNAL_DOCS = YES + +CASE_SENSE_NAMES = NO + +HIDE_SCOPE_NAMES = NO + +HIDE_COMPOUND_REFERENCE= NO + +SHOW_INCLUDE_FILES = NO + +SHOW_GROUPED_MEMB_INC = NO + +FORCE_LOCAL_INCLUDES = NO + +INLINE_INFO = YES + +SORT_MEMBER_DOCS = NO + +SORT_BRIEF_DOCS = NO +SORT_MEMBERS_CTORS_1ST = NO +SORT_GROUP_NAMES = NO +SORT_BY_SCOPE_NAME = NO +STRICT_PROTO_MATCHING = NO +GENERATE_TODOLIST = YES +GENERATE_TESTLIST = YES +GENERATE_BUGLIST = YES +GENERATE_DEPRECATEDLIST= YES +ENABLED_SECTIONS = YES +MAX_INITIALIZER_LINES = 30 +SHOW_USED_FILES = YES +SHOW_FILES = YES +SHOW_NAMESPACES = YES +FILE_VERSION_FILTER = +LAYOUT_FILE = ccpp_dox_layout.xml +CITE_BIB_FILES = library.bib +QUIET = NO +WARNINGS = YES +WARN_IF_UNDOCUMENTED = NO +WARN_IF_DOC_ERROR = YES +WARN_NO_PARAMDOC = NO +WARN_AS_ERROR = NO +WARN_FORMAT = +WARN_LOGFILE = +INPUT = pdftxt/mainpage.txt \ + pdftxt/all_shemes_list.txt \ + pdftxt/GFSv15p2_suite.txt \ +### pdftxt/GFSv15p2_no_nsst_suite.txt \ +### pdftxt/suite_FV3_GFS_v15p2.xml.txt \ + pdftxt/GFSv16beta_suite.txt \ +### pdftxt/GFSv16beta_no_nsst_suite.txt \ +### pdftxt/suite_FV3_GFS_v16beta.xml.txt \ + pdftxt/GSD_adv_suite.txt \ + pdftxt/CPT_adv_suite.txt \ + pdftxt/RRFS_v1alpha_suite.txt \ + pdftxt/RRFS_SGSCLOUD.txt \ + pdftxt/GFS_RRTMG.txt \ + pdftxt/GFS_SFCLYR.txt \ +### pdftxt/MYNN_SFCLAYER.txt \ + pdftxt/GFS_NSST.txt \ + pdftxt/GFS_OCEAN.txt \ + pdftxt/GFS_NOAH.txt \ + pdftxt/GFS_SFCSICE.txt \ + pdftxt/GFS_HEDMF.txt \ + pdftxt/GFS_SATMEDMFVDIFQ.txt \ + pdftxt/GFS_NOAHMP.txt \ + pdftxt/GFS_UGWPv0.txt \ + pdftxt/GFS_GWDPS.txt \ + pdftxt/GFS_OZPHYS.txt \ + pdftxt/GFS_H2OPHYS.txt \ + pdftxt/GFS_RAYLEIGH.txt \ + pdftxt/GFS_SAMFdeep.txt \ + pdftxt/GFS_SAMFshal.txt \ + pdftxt/GFDL_cloud.txt \ +### pdftxt/GFS_CALPRECIPTYPE.txt \ +### pdftxt/rad_cld.txt \ + pdftxt/CPT_CSAW.txt \ + pdftxt/CPT_MG3.txt \ + pdftxt/MYNN_EDMF.txt \ + pdftxt/CU_GF_deep.txt \ + pdftxt/RUCLSM.txt \ + pdftxt/THOMPSON.txt \ +### pdftxt/GFSphys_namelist.txt \ +### pdftxt/GFS_STOCHY_PHYS.txt \ + pdftxt/suite_input.nml.txt \ +### in-core MP + ../gfdl_fv_sat_adj.F90 \ +### time_vary + ../GFS_time_vary_pre.fv3.F90 \ + ../GFS_rad_time_vary.fv3.F90 \ + ../GFS_phys_time_vary.fv3.F90 \ + ../ozne_def.f \ + ../ozinterp.f90 \ + ../h2o_def.f \ + ../h2ointerp.f90 \ + ../aerclm_def.F \ + ../aerinterp.F90 \ + ../iccn_def.F \ + ../iccninterp.F90 \ + ../sfcsub.F \ + ../gcycle.F90 \ +### Radiation + ../GFS_rrtmg_pre.F90 \ + ../GFS_rrtmg_post.F90 \ + ../GFS_rrtmg_setup.F90 \ + ../rrtmg_sw_pre.F90 \ + ../module_SGSCloud_RadPre.F90 \ + ../module_SGSCloud_RadPost.F90 \ + ../radsw_main.f \ + ../rrtmg_sw_post.F90 \ + ../rrtmg_lw_pre.F90 \ + ../radlw_main.f \ + ../rrtmg_lw_post.F90 \ + ../radiation_aerosols.f \ + ../radiation_astronomy.f \ + ../radiation_clouds.f \ + ../radiation_gases.f \ + ../radiation_surface.f \ + ../radlw_param.f \ + ../radlw_datatb.f \ + ../radsw_param.f \ + ../radsw_datatb.f \ + ../dcyc2.f \ +### Land Surface + ../sfc_diff.f \ +### ../module_MYNNSFC_wrapper.F90 \ +### ../module_sf_mynn.F90 \ + ../sfc_nst.f \ + ../sfc_ocean.F \ + ../module_nst_model.f90 \ + ../module_nst_parameters.f90 \ + ../module_nst_water_prop.f90 \ + ../sfc_drv.f \ + ../sflx.f \ + ../namelist_soilveg.f \ + ../set_soilveg.f \ + ../sfc_noahmp_drv.f \ + ../module_sf_noahmplsm.f90 \ + ../module_sf_noahmp_glacier.f90 \ + ../noahmp_tables.f90 \ + ../GFS_surface_generic.F90 \ +### Sea Ice Surface + ../sfc_sice.f \ +### PBL + ../moninedmf.f \ + ../mfpbl.f \ + ../tridi.f \ +### satmedmf +### ../satmedmfvdif.F \ + ../satmedmfvdifq.F \ + ../mfpbltq.f \ + ../mfscuq.f \ + ../tridi.f \ +### Orographic Gravity Wave + ../GFS_GWD_generic.F90 \ + ../cires_ugwp.F90 \ + ../gwdps.f \ + ../ugwp_driver_v0.F \ + ../cires_ugwp_triggers.F90 \ + ../cires_ugwp_module.F90 \ + ../cires_ugwp_utils.F90 \ + ../cires_ugwp_solvers.F90 \ + ../cires_ugwp_post.F90 \ +### ../cires_ugwp_initialize.F90 \ + ../cires_vert_wmsdis.F90 \ + ../cires_vert_orodis.F90 \ + ../cires_vert_lsatdis.F90 \ +### Rayleigh Dampling + ../rayleigh_damp.f \ +### Prognostic Ozone + ../ozphys_2015.f \ +### ../ozphys.f \ +### stratospheric h2o + ../h2ophys.f \ +### Deep Convection + ../samfdeepcnv.f \ +### Convective Gravity Wave +### ../gwdc.f \ +### Shallow Convection + ../samfshalcnv.f \ + ../cnvc90.f \ +### Microphysics +### ../gscond.f \ +### ../precpd.f \ + ../module_bfmicrophysics.f \ +### GFDL cloud MP + ../gfdl_cloud_microphys.F90 \ + ../module_gfdl_cloud_microphys.F90 \ + ../GFS_MP_generic.F90 \ + ../calpreciptype.f90 \ +### stochy + ../GFS_stochastics.F90 \ +### ../surface_perturbation.F90 \ +### ../../stochastic_physics/stochastic_physics.F90 \ +### CPT + ../m_micro.F90 \ + ../m_micro_interstitial.F90 \ +### ../micro_mg2_0.F90 \ + ../micro_mg3_0.F90 \ + ../micro_mg_utils.F90 \ + ../cldmacro.F \ + ../aer_cloud.F \ + ../cldwat2m_micro.F \ + ../wv_saturation.F \ + ../cs_conv_aw_adj.F90 \ + ../cs_conv.F90 \ + ../cu_gf_driver.F90 \ + ../cu_gf_driver_pre.F90 \ + ../cu_gf_deep.F90 \ + ../cu_gf_sh.F90 \ + ../module_MYNNPBL_wrapper.F90 \ + ../module_bl_mynn.F90 \ +### ../module_MYNNSFC_wrapper.F90 \ +### ../module_sf_mynn.F90 \ + ../sfc_drv_ruc.F90 \ + ../module_sf_ruclsm.F90 \ + ../namelist_soilveg_ruc.F90 \ + ../set_soilveg_ruc.F90 \ + ../module_soil_pre.F90 \ + ../mp_thompson_pre.F90 \ + ../module_mp_thompson_make_number_concentrations.F90 \ + ../mp_thompson.F90 \ + ../module_mp_thompson.F90 \ + ../module_mp_radar.F90 \ + ../mp_thompson_post.F90 \ +### utils + ../funcphys.f90 \ + ../physparam.f \ + ../physcons.F90 \ + ../radcons.f90 \ + ../mersenne_twister.f +INPUT_ENCODING = UTF-8 +FILE_PATTERNS = *.f \ + *.F \ + *.F90 \ + *.f90 \ + *.nml \ + *.txt +RECURSIVE = YES +EXCLUDE = +EXCLUDE_SYMLINKS = NO +EXCLUDE_PATTERNS = +EXCLUDE_SYMBOLS = +EXAMPLE_PATH = ./ +EXAMPLE_PATTERNS = +EXAMPLE_RECURSIVE = NO +IMAGE_PATH = img +INPUT_FILTER = +FILTER_PATTERNS = +FILTER_SOURCE_FILES = NO +FILTER_SOURCE_PATTERNS = +USE_MDFILE_AS_MAINPAGE = +SOURCE_BROWSER = NO +INLINE_SOURCES = NO +STRIP_CODE_COMMENTS = YES +REFERENCED_BY_RELATION = YES +REFERENCES_RELATION = YES +REFERENCES_LINK_SOURCE = YES +SOURCE_TOOLTIPS = YES +USE_HTAGS = NO +VERBATIM_HEADERS = YES +#CLANG_ASSISTED_PARSING = NO +#CLANG_OPTIONS = +ALPHABETICAL_INDEX = NO +COLS_IN_ALPHA_INDEX = 5 +IGNORE_PREFIX = +GENERATE_HTML = YES +HTML_OUTPUT = html +HTML_FILE_EXTENSION = .html +HTML_HEADER = +HTML_FOOTER = +HTML_STYLESHEET = +HTML_EXTRA_STYLESHEET = ccpp_dox_extra_style.css +HTML_EXTRA_FILES = +HTML_COLORSTYLE_HUE = 220 +HTML_COLORSTYLE_SAT = 100 +HTML_COLORSTYLE_GAMMA = 80 +HTML_TIMESTAMP = NO +HTML_DYNAMIC_SECTIONS = NO +HTML_INDEX_NUM_ENTRIES = 100 +GENERATE_DOCSET = NO +DOCSET_FEEDNAME = "Doxygen generated docs" +DOCSET_BUNDLE_ID = org.doxygen.Project +DOCSET_PUBLISHER_ID = org.doxygen.Publisher +DOCSET_PUBLISHER_NAME = Publisher +GENERATE_HTMLHELP = NO +CHM_FILE = +HHC_LOCATION = +GENERATE_CHI = NO +CHM_INDEX_ENCODING = +BINARY_TOC = NO +TOC_EXPAND = NO +GENERATE_QHP = NO +QCH_FILE = +QHP_NAMESPACE = org.doxygen.Project +QHP_VIRTUAL_FOLDER = doc +QHP_CUST_FILTER_NAME = +QHP_CUST_FILTER_ATTRS = +QHP_SECT_FILTER_ATTRS = +QHG_LOCATION = +GENERATE_ECLIPSEHELP = NO +ECLIPSE_DOC_ID = org.doxygen.Project +DISABLE_INDEX = YES +GENERATE_TREEVIEW = YES +ENUM_VALUES_PER_LINE = 4 +TREEVIEW_WIDTH = 250 +EXT_LINKS_IN_WINDOW = NO +FORMULA_FONTSIZE = 10 +FORMULA_TRANSPARENT = YES +USE_MATHJAX = YES +MATHJAX_FORMAT = HTML-CSS +MATHJAX_RELPATH = https://cdnjs.cloudflare.com/ajax/libs/mathjax/2.7.2 +MATHJAX_EXTENSIONS = +MATHJAX_CODEFILE = +SEARCHENGINE = YES +SERVER_BASED_SEARCH = NO +EXTERNAL_SEARCH = NO +SEARCHENGINE_URL = +SEARCHDATA_FILE = searchdata.xml +EXTERNAL_SEARCH_ID = +EXTRA_SEARCH_MAPPINGS = +GENERATE_LATEX = YES +LATEX_OUTPUT = latex +LATEX_CMD_NAME = latex +MAKEINDEX_CMD_NAME = makeindex +COMPACT_LATEX = YES +PAPER_TYPE = a4 +EXTRA_PACKAGES = amsmath +LATEX_HEADER = +LATEX_FOOTER = +LATEX_EXTRA_STYLESHEET = +LATEX_EXTRA_FILES = +PDF_HYPERLINKS = YES +USE_PDFLATEX = YES +LATEX_BATCHMODE = NO +LATEX_HIDE_INDICES = YES +LATEX_SOURCE_CODE = NO + +LATEX_BIB_STYLE = plainnat + +LATEX_TIMESTAMP = NO + +GENERATE_RTF = NO + +RTF_OUTPUT = rtf +COMPACT_RTF = NO +RTF_HYPERLINKS = NO +RTF_STYLESHEET_FILE = +RTF_EXTENSIONS_FILE = +RTF_SOURCE_CODE = NO +GENERATE_MAN = NO +MAN_OUTPUT = man +MAN_EXTENSION = .3 +MAN_SUBDIR = +MAN_LINKS = NO +GENERATE_XML = NO +XML_OUTPUT = xml +XML_PROGRAMLISTING = YES +GENERATE_DOCBOOK = NO +DOCBOOK_OUTPUT = docbook +DOCBOOK_PROGRAMLISTING = NO +GENERATE_AUTOGEN_DEF = NO +GENERATE_PERLMOD = NO +PERLMOD_LATEX = NO +PERLMOD_PRETTY = YES +PERLMOD_MAKEVAR_PREFIX = +ENABLE_PREPROCESSING = NO +MACRO_EXPANSION = NO +EXPAND_ONLY_PREDEF = NO +SEARCH_INCLUDES = YES +INCLUDE_PATH = +INCLUDE_FILE_PATTERNS = +PREDEFINED = CCPP \ + MULTI_GASES \ + 0 +EXPAND_AS_DEFINED = +SKIP_FUNCTION_MACROS = YES +TAGFILES = +GENERATE_TAGFILE = +ALLEXTERNALS = NO +EXTERNAL_GROUPS = YES +EXTERNAL_PAGES = YES +PERL_PATH = /usr/bin/perl +CLASS_DIAGRAMS = YES +MSCGEN_PATH = +DIA_PATH = +HIDE_UNDOC_RELATIONS = NO +HAVE_DOT = YES +DOT_NUM_THREADS = 0 +DOT_FONTNAME = Helvetica +DOT_FONTSIZE = 10 +DOT_FONTPATH = +CLASS_GRAPH = NO +COLLABORATION_GRAPH = NO +GROUP_GRAPHS = YES +UML_LOOK = YES +UML_LIMIT_NUM_FIELDS = 10 +TEMPLATE_RELATIONS = NO +INCLUDE_GRAPH = YES +INCLUDED_BY_GRAPH = NO +CALL_GRAPH = YES +CALLER_GRAPH = NO +GRAPHICAL_HIERARCHY = YES +DIRECTORY_GRAPH = YES +DOT_IMAGE_FORMAT = svg +INTERACTIVE_SVG = NO +DOT_PATH = +DOTFILE_DIRS = +MSCFILE_DIRS = +DIAFILE_DIRS = +PLANTUML_JAR_PATH = +PLANTUML_INCLUDE_PATH = +DOT_GRAPH_MAX_NODES = 200 +MAX_DOT_GRAPH_DEPTH = 0 +DOT_TRANSPARENT = NO +DOT_MULTI_TARGETS = YES +GENERATE_LEGEND = YES +DOT_CLEANUP = YES diff --git a/physics/docs/img/MYNN-SFCLAY_call_order.png b/physics/docs/img/MYNN-SFCLAY_call_order.png new file mode 100644 index 000000000..825a4c5e3 Binary files /dev/null and b/physics/docs/img/MYNN-SFCLAY_call_order.png differ diff --git a/physics/docs/img/mesocam.png b/physics/docs/img/mesocam.png new file mode 100644 index 000000000..c0c29bfed Binary files /dev/null and b/physics/docs/img/mesocam.png differ diff --git a/physics/docs/library.bib b/physics/docs/library.bib index fc9aacabd..48ef43910 100644 --- a/physics/docs/library.bib +++ b/physics/docs/library.bib @@ -1,36 +1,127 @@ %% This BibTeX bibliography file was created using BibDesk. %% http://bibdesk.sourceforge.net/ -%% Created for Man Zhang at 2020-03-02 13:10:25 -0700 +%% Created for Man Zhang at 2021-02-03 14:24:42 -0700 %% Saved with string encoding Unicode (UTF-8) -@article{westbrook_et_al_2010, - Author = {C.D.Westbrook and R.J.Hogan and E.J.O'Connor and A.J.Illingworth}, - Date-Added = {2020-02-07 15:45:14 -0700}, - Date-Modified = {2020-02-07 15:52:41 -0700}, - Journal = {Atmos. Meas. Tech.}, - Pages = {671-681}, - Title = {Estimating drizzle drop size and precipitation rate using two-colour lidar measurements}, - Volume = {3}, +@article{buchard_et_al_2017, + Author = {V. Buchard and C. A. Randles and A. M. da Silva and et al.}, + Date-Added = {2021-02-01 21:33:58 +0000}, + Date-Modified = {2021-02-01 21:37:20 +0000}, + Journal = {J. Climate}, + Pages = {6851-6872}, + Title = {The {MERRA}-2 aerosol reanalysis, 1980 onward. {P}art {II}: Evaluation and case studies}, + Volume = {30}, + Year = {2017}} + +@article{randles_et_al_2017, + Author = {C. A. Randles and A. M. da Silva and V. Buchard and et al.}, + Date-Added = {2021-02-01 21:26:16 +0000}, + Date-Modified = {2021-02-01 21:32:25 +0000}, + Journal = {J. Climate}, + Pages = {6823-6850}, + Title = {The {MERRA}-2 aerosol reanalysis, 1980 onward. {P}art {I}: System description and data assimilation evaluation}, + Volume = {30}, + Year = {2017}} + +@article{colarco_et_al_2010, + Author = {P. Colarco and A. da Silva and M. Chin and T. Diehl}, + Date-Added = {2021-02-01 14:20:20 -0700}, + Date-Modified = {2021-02-01 14:23:22 -0700}, + Journal = {Journal of Geophysical Research}, + Number = {D14207}, + Pages = {25}, + Title = {Online simulations of global aerosol distributions in the {NASA} {GOES-4} model and comparisons to satellite and ground-based aerosol optical depth}, + Volume = {115}, Year = {2010}} -@article{aligo_et_al_2018, - Author = {E.A. Aligo and B. Ferrier and J.R. Carley}, - Date-Added = {2020-02-07 15:36:41 -0700}, - Date-Modified = {2020-02-07 15:39:32 -0700}, +@article{zhou_etal_2019, + Author = {L.-J. Zhou and S.-J. Lin and J.-H. Chen and L. M. Harris and X. Chen and S. L. Rees}, + Date-Added = {2021-02-01 21:07:24 +0000}, + Date-Modified = {2021-02-01 21:10:36 +0000}, + Journal = {Bulletin of the American Meteorological Society}, + Pages = {1225-1243}, + Title = {Toward convective-scale prediction within the next generation global prediction system}, + Year = {2019}} + +@article{miguez_et_al_2007, + Author = {G. Miguez-Macho and Y. Fan and C. P. Weaver and R. Walko and A. Robock}, + Date-Added = {2021-01-05 14:42:06 -0700}, + Date-Modified = {2021-01-05 14:50:03 -0700}, + Journal = {Journal of Geophysical Research}, + Number = {D13108}, + Title = {Incorporating water table dynamics in climate modeling: 2. Formulation, validation, and soil moisture simulation}, + Volume = {112}, + Year = {2007}} + +@article{fan_et_al_2007, + Author = {Y. Fan and G. Miguez-Macho and C. P. Weaver and R. Walko and A. Robock}, + Date-Added = {2021-01-05 14:36:44 -0700}, + Date-Modified = {2021-01-05 14:40:37 -0700}, + Journal = {Journal of Geophysical Research}, + Number = {D10125}, + Title = {Incorporating water table dynamics in climate modeling: 1. Water table observations and equilibrium water table simulations}, + Volume = {112}, + Year = {2007}} + +@article{niu_et_al_2005, + Author = {Niu, G.-Y. and Z.-L Yang and R. E. Dickinson and L. E. Gulden}, + Date-Added = {2021-01-05 14:19:03 -0700}, + Date-Modified = {2021-01-05 14:23:29 -0700}, + Journal = {Climate and Dynamics}, + Number = {D21106}, + Title = {A simple {TOPMODEL}-based runoff parameterization ({SIMTOP}) for use in global climate models}, + Volume = {110}, + Year = {2005}} + +@article{monin_and_obukhov_1954, + Author = {A.S.Monin and A.M.Obukhov}, + Date-Added = {2020-11-02 19:17:57 +0000}, + Date-Modified = {2020-11-02 19:19:45 +0000}, + Journal = {Akad. Nauk SSSR}, + Pages = {163-187}, + Title = {Basic laws of turbulent mixing in the atmosphere near the ground}, + Volume = {24}, + Year = {1954}} + +@article{beljaars_et_al_2004, + Author = {A.C.M. Beljaars and A.R.Brown and N. Wood}, + Date-Added = {2020-11-02 19:13:02 +0000}, + Date-Modified = {2020-11-02 19:15:18 +0000}, + Journal = {Quarterly Journal of the Royal Meteorological Society}, + Pages = {1327-1347}, + Title = {A new parameterization of turbulent orographic form drag}, + Volume = {130}, + Year = {2004}} + +@article{steeneveld_et_al_2008, + Author = {G.J. Steeneveld and A. A. M. Holtslag and C.J. Nappo and B.J.H. van de Wiel and L. Mahrt}, + Date-Added = {2020-11-02 19:02:29 +0000}, + Date-Modified = {2020-11-02 19:11:00 +0000}, + Journal = {Journal of Applied Meteorology}, + Pages = {2518-2530}, + Title = {Exploring the possible role of small-scale terrain drag on stable boundary layers over land}, + Volume = {47}, + Year = {2008}} + +@article{fitch_et_al_2012, + Author = {A. C. Fitch and J. B. Olson and J. K. Lundquist and J. Dudhia and A.K. Gupta and J. Michalakes and I. Barstad}, + Date-Added = {2020-11-02 11:19:27 -0700}, + Date-Modified = {2020-11-17 15:48:33 +0000}, Journal = {Monthly Weather Review}, - Pages = {4115-4153}, - Title = {Modified NAM microphysics for forecasts of deep convective storms}, - Volume = {146}, - Year = {2018}} + Number = {9}, + Pages = {3017-3038}, + Title = {Local and mesoscale impacts of wind farms as parameterized in a mesoscale {NWP} model}, + Volume = {140}, + Year = {2012}} @article{niu_and_yang_2006, Abstract = { Abstract The presence of ice in soil dramatically alters soil hydrologic and thermal properties. Despite this important role, many recent studies show that explicitly including the hydrologic effects of soil ice in land surface models degrades the simulation of runoff in cold regions. This paper addresses this dilemma by employing the Community Land Model version 2.0 (CLM2.0) developed at the National Center for Atmospheric Research (NCAR) and a simple TOPMODEL-based runoff scheme (SIMTOP). CLM2.0/SIMTOP explicitly computes soil ice content and its modifications to soil hydrologic and thermal properties. However, the frozen soil scheme has a tendency to produce a completely frozen soil (100\% ice content) whenever the soil temperature is below 0$\,^{\circ}$C. The frozen ground prevents infiltration of snowmelt or rainfall, thereby resulting in earlier- and higher-than-observed springtime runoff. This paper presents modifications to the above-mentioned frozen soil scheme that produce more accurate magnitude and seasonality of runoff and soil water storage. These modifications include 1) allowing liquid water to coexist with ice in the soil over a wide range of temperatures below 0$\,^{\circ}$C by using the freezing-point depression equation, 2) computing the vertical water fluxes by introducing the concept of a fractional permeable area, which partitions the model grid into an impermeable part (no vertical water flow) and a permeable part, and 3) using the total soil moisture (liquid water and ice) to calculate the soil matric potential and hydraulic conductivity. The performance of CLM2.0/SIMTOP with these changes has been tested using observed data in cold-region river basins of various spatial scales. Compared to the CLM2.0/SIMTOP frozen soil scheme, the modified scheme produces monthly runoff that compares more favorably with that estimated by the University of New Hampshire--Global Runoff Data Center and a terrestrial water storage change that is in closer agreement with that measured by the Gravity Recovery and Climate Experiment (GRACE) satellites. }, - Author = {Niu, Guo-Yue and Yang, Zong-Liang}, + Author = {Niu, G.-Y. and Yang, Z.-L.}, Date-Added = {2019-10-25 22:35:50 +0000}, Date-Modified = {2019-10-25 22:36:03 +0000}, Doi = {10.1175/JHM538.1}, @@ -46,7 +137,7 @@ @article{niu_and_yang_2006 @article{niu_et_al_2007, Abstract = {Groundwater interacts with soil moisture through the exchanges of water between the unsaturated soil and its underlying aquifer under gravity and capillary forces. Despite its importance, groundwater is not explicitly represented in climate models. This paper developed a simple groundwater model (SIMGM) by representing recharge and discharge processes of the water storage in an unconfined aquifer, which is added as a single integration element below the soil of a land surface model. We evaluated the model against the Gravity Recovery and Climate Experiment (GRACE) terrestrial water storage change (ΔS) data. The modeled total water storage (including unsaturated soil water and groundwater) change agrees fairly well with GRACE estimates. The anomaly of the modeled groundwater storage explains most of the GRACE ΔS anomaly in most river basins where the water storage is not affected by snow water or frozen soil. For this reason, the anomaly of the modeled water table depth agrees well with that converted from the GRACE ΔS in most of the river basins. We also investigated the impacts of groundwater dynamics on soil moisture and evapotranspiration through the comparison of SIMGM to an additional model run using gravitational free drainage (FD) as the model's lower boundary condition. SIMGM produced much wetter soil profiles globally and up to 16\% more annual evapotranspiration than FD, most obviously in arid-to-wet transition regions.}, - Author = {Niu, Guo-Yue and Yang, Zong-Liang and Dickinson, Robert E. and Gulden, Lindsey E. and Su, Hua}, + Author = {Niu, G.-Y. and Yang, Z.-L. and Dickinson, R. E. and Gulden, L. E. and Su, H.}, Date-Added = {2019-10-25 22:31:30 +0000}, Date-Modified = {2019-10-25 22:31:41 +0000}, Doi = {10.1029/2006JD007522}, @@ -63,7 +154,7 @@ @article{niu_et_al_2007 @article{niu_et_al_2011, Abstract = {This first paper of the two-part series describes the objectives of the community efforts in improving the Noah land surface model (LSM), documents, through mathematical formulations, the augmented conceptual realism in biophysical and hydrological processes, and introduces a framework for multiple options to parameterize selected processes (Noah-MP). The Noah-MP's performance is evaluated at various local sites using high temporal frequency data sets, and results show the advantages of using multiple optional schemes to interpret the differences in modeling simulations. The second paper focuses on ensemble evaluations with long-term regional (basin) and global scale data sets. The enhanced conceptual realism includes (1) the vegetation canopy energy balance, (2) the layered snowpack, (3) frozen soil and infiltration, (4) soil moisture-groundwater interaction and related runoff production, and (5) vegetation phenology. Sample local-scale validations are conducted over the First International Satellite Land Surface Climatology Project (ISLSCP) Field Experiment (FIFE) site, the W3 catchment of Sleepers River, Vermont, and a French snow observation site. Noah-MP shows apparent improvements in reproducing surface fluxes, skin temperature over dry periods, snow water equivalent (SWE), snow depth, and runoff over Noah LSM version 3.0. Noah-MP improves the SWE simulations due to more accurate simulations of the diurnal variations of the snow skin temperature, which is critical for computing available energy for melting. Noah-MP also improves the simulation of runoff peaks and timing by introducing a more permeable frozen soil and more accurate simulation of snowmelt. We also demonstrate that Noah-MP is an effective research tool by which modeling results for a given process can be interpreted through multiple optional parameterization schemes in the same model framework.}, - Author = {Niu, Guo-Yue and Yang, Zong-Liang and Mitchell, Kenneth E. and Chen, Fei and Ek, Michael B. and Barlage, Michael and Kumar, Anil and Manning, Kevin and Niyogi, Dev and Rosero, Enrique and Tewari, Mukul and Xia, Youlong}, + Author = {Niu, G.-Y. and Yang, Z.-L. and Mitchell, K. E. and et al.}, Date-Added = {2019-10-25 21:50:31 +0000}, Date-Modified = {2019-10-25 21:50:40 +0000}, Doi = {10.1029/2010JD015139}, @@ -71,7 +162,7 @@ @article{niu_et_al_2011 Journal = {Journal of Geophysical Research: Atmospheres}, Keywords = {Noah, land surface model, local scale, multiphysics, evaluation, validation}, Number = {D12}, - Title = {The community Noah land surface model with multiparameterization options (Noah-MP): 1. Model description and evaluation with local-scale measurements}, + Title = {The community Noah land surface model with multiparameterization options ({Noah-MP}): 1. Model description and evaluation with local-scale measurements}, Url = {https://agupubs.onlinelibrary.wiley.com/doi/abs/10.1029/2010JD015139}, Volume = {116}, Year = {2011}, @@ -79,7 +170,7 @@ @article{niu_et_al_2011 Bdsk-Url-2 = {https://doi.org/10.1029/2010JD015139}} @article{bechtold_et_al_2014, - Author = {P. Bechtold and N. Semane and P. Lopez and J-P Chaboureau and A. Beljaars and N. Bormann}, + Author = {P. Bechtold and N. Semane and P. Lopez and J.-P. Chaboureau and A. Beljaars and N. Bormann}, Date-Added = {2019-06-13 14:29:21 -0600}, Date-Modified = {2019-06-13 14:38:38 -0600}, Journal = {J. Atmos. Sci.}, @@ -89,12 +180,12 @@ @article{bechtold_et_al_2014 Year = {2014}} @article{freitas_et_al_2018, - Author = {S.R. Freitas and G.A. Grell and A. Molod and M. A. Thompson and W.M. Putman and C. M. Santos e Silva and E. P. Souza}, + Author = {S. R. Freitas and G. A. Grell and A. Molod and et al.}, Date-Added = {2019-06-13 13:51:50 -0600}, Date-Modified = {2019-06-13 14:07:37 -0600}, Journal = {Journal of Advances in Modeling Earth Systems}, Pages = {1266-1289}, - Title = {Assessing the Grell-Freitas convection parameterization in the NASA GEOS modeling system}, + Title = {Assessing the {G}rell-{F}reitas convection parameterization in the {NASA GEOS} modeling system}, Volume = {10}, Year = {2018}} @@ -124,7 +215,7 @@ @article{moorthi_and_suarez_1992 Date-Modified = {2019-06-06 17:56:00 +0000}, Journal = {Monthly Weather Review}, Pages = {978-1002}, - Title = {Relaxed Arakawa-Schubert. A parameterization of moist convection for general circulation models}, + Title = {Relaxed {A}rakawa-{S}chubert. A parameterization of moist convection for general circulation models}, Volume = {120}, Year = {1992}} @@ -147,7 +238,7 @@ @article{nakanishi_2000 Year = {2000}} @article{Gehne_2019, - Author = {Gehne, Maria and Hamill, Thomas M. and Bates, Gary T. and Pegion, Philip and Kolczynski, Walter}, + Author = {Gehne, M. and Hamill, T. M. and Bates, G. T. and Pegion, P. and Kolczynski, W.}, Date-Added = {2019-05-24 12:46:43 -0600}, Date-Modified = {2019-05-24 12:46:43 -0600}, Doi = {10.1175/mwr-d-18-0057.1}, @@ -182,7 +273,7 @@ @article{Gettelman_2010 Bdsk-Url-2 = {http://dx.doi.org/10.1029/2009jd013797}} @article{HOBBS_1974, - Author = {HOBBS, PETER V.}, + Author = {Hobbs, P. V.}, Date-Added = {2019-05-23 11:07:04 -0600}, Date-Modified = {2019-05-23 11:07:04 -0600}, Doi = {10.1038/251694b0}, @@ -199,7 +290,7 @@ @article{HOBBS_1974 Bdsk-Url-1 = {http://dx.doi.org/10.1038/251694b0}} @article{Pichugina_2008, - Author = {Pichugina, Yelena L. and Tucker, Sara C. and Banta, Robert M. and Brewer, W. Alan and Kelley, Neil D. and Jonkman, Bonnie J. and Newsom, Rob K.}, + Author = {Pichugina, Y. L. and Tucker, S. C. and Banta, R. M. and et al.}, Date-Added = {2019-05-22 11:25:17 -0600}, Date-Modified = {2019-06-05 15:59:49 +0000}, Journal = {Journal of Atmospheric and Oceanic Technology}, @@ -212,7 +303,7 @@ @article{Pichugina_2008 Bdsk-Url-2 = {http://dx.doi.org/10.1175/2008jtecha988.1}} @article{Nielsen_Gammon_2008, - Author = {Nielsen-Gammon, John W. and Powell, Christina L. and Mahoney, M. J. and Angevine, Wayne M. and Senff, Christoph and White, Allen and Berkowitz, Carl and Doran, Christopher and Knupp, Kevin}, + Author = {Nielsen-Gammon, J. W. and Powell, C. L. and Mahoney, M. J. and et al.}, Date-Added = {2019-05-22 11:19:45 -0600}, Date-Modified = {2019-06-05 15:31:19 +0000}, Journal = {Journal of Applied Meteorology and Climatology}, @@ -225,7 +316,7 @@ @article{Nielsen_Gammon_2008 Bdsk-Url-2 = {http://dx.doi.org/10.1175/2007jamc1503.1}} @article{Benjamin_2016b, - Author = {Benjamin, Stanley G. and Brown, John M. and Smirnova, Tatiana G.}, + Author = {Benjamin, S. G. and Brown, J. M. and Smirnova, T. G.}, Date-Added = {2019-05-20 16:32:47 -0600}, Date-Modified = {2019-05-20 16:33:32 -0600}, Doi = {10.1175/waf-d-15-0136.1}, @@ -243,7 +334,7 @@ @article{Benjamin_2016b Bdsk-Url-2 = {http://dx.doi.org/10.1175/waf-d-15-0136.1}} @article{Grell_2002, - Author = {Grell, Georg A. and D{\'e}v{\'e}nyi, Dezs{\H o}}, + Author = {Grell, G. A. and D{\'e}v{\'e}nyi, D.}, Date-Added = {2019-05-20 11:19:25 -0600}, Date-Modified = {2019-05-20 11:19:25 -0600}, Doi = {10.1029/2002gl015311}, @@ -278,7 +369,7 @@ @article{Arakawa_2011 Bdsk-Url-1 = {http://dx.doi.org/10.5194/acp-11-3731-2011}} @article{Jiang_2010, - Author = {Jiang, Hongli and Feingold, Graham and Sorooshian, Armin}, + Author = {Jiang, H-L. and Feingold, G. and Sorooshian, A.}, Date-Added = {2019-05-20 11:01:38 -0600}, Date-Modified = {2019-05-20 11:01:38 -0600}, Doi = {10.1175/2010jas3484.1}, @@ -297,7 +388,7 @@ @article{Jiang_2010 @conference{berry_1968, Address = {Albany, N.Y}, - Author = {E.X. Berry}, + Author = {E. X. Berry}, Booktitle = {1st National Conference on Weather Modification}, Date-Added = {2019-05-20 10:50:44 -0600}, Date-Modified = {2019-05-20 10:54:39 -0600}, @@ -306,7 +397,7 @@ @conference{berry_1968 Year = {1968}} @article{Wilks_2005, - Author = {Wilks, Daniel S.}, + Author = {Wilks, D. S.}, Date-Added = {2019-05-08 14:10:09 -0600}, Date-Modified = {2019-05-08 14:10:09 -0600}, Doi = {10.1256/qj.04.03}, @@ -323,16 +414,16 @@ @article{Wilks_2005 Bdsk-Url-1 = {http://dx.doi.org/10.1256/qj.04.03}} @article{Han_2019, - Author = {J. Han and C.S. Bretherton}, + Author = {J. Han and C. S. Bretherton}, Date-Added = {2019-05-06 20:43:06 -0600}, Date-Modified = {2019-05-06 20:44:39 -0600}, Journal = {Weather and Forecasting}, - Title = {TKE-based Moist Eddy-Diffusivity Mass-Flux (EDMF) Parameterization for Vertical Turbulent Mixing}, + Title = {{TKE}-based Moist Eddy-Diffusivity Mass-Flux ({EDMF}) Parameterization for Vertical Turbulent Mixing}, Volume = {accepted}, Year = {2019}} @article{Thompson_2014, - Author = {Thompson, Gregory and Eidhammer, Trude}, + Author = {Thompson, G. and Eidhammer, T.}, Date-Added = {2019-05-06 19:55:25 -0600}, Date-Modified = {2019-05-06 19:55:25 -0600}, Doi = {10.1175/jas-d-13-0305.1}, @@ -350,7 +441,7 @@ @article{Thompson_2014 Bdsk-Url-2 = {http://dx.doi.org/10.1175/jas-d-13-0305.1}} @article{Thompson_2008, - Author = {Thompson, Gregory and Field, Paul R. and Rasmussen, Roy M. and Hall, William D.}, + Author = {Thompson, G. and Field, P. R. and Rasmussen, R. M. and Hall, W. D.}, Date-Added = {2019-05-06 19:49:48 -0600}, Date-Modified = {2019-05-06 19:49:48 -0600}, Doi = {10.1175/2008mwr2387.1}, @@ -360,7 +451,7 @@ @article{Thompson_2008 Number = {12}, Pages = {5095--5115}, Publisher = {American Meteorological Society}, - Title = {Explicit Forecasts of Winter Precipitation Using an Improved Bulk Microphysics Scheme. Part II: Implementation of a New Snow Parameterization}, + Title = {Explicit Forecasts of Winter Precipitation Using an Improved Bulk Microphysics Scheme. {P}art {II}: Implementation of a New Snow Parameterization}, Url = {http://dx.doi.org/10.1175/2008MWR2387.1}, Volume = {136}, Year = {2008}, @@ -368,7 +459,7 @@ @article{Thompson_2008 Bdsk-Url-2 = {http://dx.doi.org/10.1175/2008mwr2387.1}} @article{Krinner_2018, - Author = {Krinner, Gerhard and Derksen, Chris and Essery, Richard and Flanner, Mark and Hagemann, Stefan and Clark, Martyn and Hall, Alex and Rott, Helmut and Brutel-Vuilmet, Claire and Kim, Hyungjun and et al.}, + Author = {Krinner, G. and Derksen, C. and Essery, R. and et al.}, Date-Added = {2019-05-06 14:22:35 -0600}, Date-Modified = {2019-05-06 14:22:35 -0600}, Doi = {10.5194/gmd-11-5027-2018}, @@ -378,14 +469,14 @@ @article{Krinner_2018 Number = {12}, Pages = {5027--5049}, Publisher = {Copernicus GmbH}, - Title = {ESM-SnowMIP: assessing snow models and quantifying snow-related climate feedbacks}, + Title = {{ESM-SnowMIP}: assessing snow models and quantifying snow-related climate feedbacks}, Url = {http://dx.doi.org/10.5194/gmd-11-5027-2018}, Volume = {11}, Year = {2018}, Bdsk-Url-1 = {http://dx.doi.org/10.5194/gmd-11-5027-2018}} @article{Rutter_2009, - Author = {Rutter, Nick and Essery, Richard and Pomeroy, John and Altimir, Nuria and Andreadis, Kostas and Baker, Ian and Barr, Alan and Bartlett, Paul and Boone, Aaron and Deng, Huiping and et al.}, + Author = {Rutter, N. and Essery, R. and Pomeroy, J. and et al.}, Date-Added = {2019-05-06 14:22:28 -0600}, Date-Modified = {2019-05-06 14:22:28 -0600}, Doi = {10.1029/2008jd011063}, @@ -394,7 +485,7 @@ @article{Rutter_2009 Month = {Mar}, Number = {D6}, Publisher = {American Geophysical Union (AGU)}, - Title = {Evaluation of forest snow processes models (SnowMIP2)}, + Title = {Evaluation of forest snow processes models ({SnowMIP2})}, Url = {http://dx.doi.org/10.1029/2008JD011063}, Volume = {114}, Year = {2009}, @@ -402,13 +493,13 @@ @article{Rutter_2009 Bdsk-Url-2 = {http://dx.doi.org/10.1029/2008jd011063}} @article{Essery_2009, - Author = {Essery, Richard and Rutter, Nick and Pomeroy, John and Baxter, Robert and St{\"a}hli, Manfred and Gustafsson, David and Barr, Alan and Bartlett, Paul and Elder, Kelly}, + Author = {Essery, R. and Rutter, N. and Pomeroy, J. and et al.}, Date-Added = {2019-05-06 14:20:27 -0600}, Date-Modified = {2019-06-05 16:01:14 +0000}, Journal = {Bulletin of the American Meteorological Society}, Number = {8}, Pages = {1120-1136}, - Title = {SNOWMIP2: An Evaluation of Forest Snow Process Simulations}, + Title = {{SNOWMIP2}: An Evaluation of Forest Snow Process Simulations}, Volume = {90}, Year = {2009}, Bdsk-Url-1 = {http://dx.doi.org/10.1175/2009BAMS2629.1}, @@ -426,7 +517,7 @@ @proceedings{Etchevers_2002 Year = {2002}} @article{Etchevers_2004, - Author = {Etchevers, Pierre and Martin, Eric and Brown, Ross and Fierz, Charles and Lejeune, Yves and Bazile, Eric and Boone, Aaron and Dai, Yong-Jiu and Essery, Richard and Fernandez, Alberto and et al.}, + Author = {Etchevers, P. and Martin, E. and Brown, R. and et al.}, Date-Added = {2019-05-06 14:16:12 -0600}, Date-Modified = {2019-05-06 14:16:12 -0600}, Doi = {10.3189/172756404781814825}, @@ -434,14 +525,14 @@ @article{Etchevers_2004 Journal = {Annals of Glaciology}, Pages = {150--158}, Publisher = {Cambridge University Press (CUP)}, - Title = {Validation of the energy budget of an alpine snowpack simulated by several snow models (Snow MIP project)}, + Title = {Validation of the energy budget of an alpine snowpack simulated by several snow models (Snow {MIP} project)}, Url = {http://dx.doi.org/10.3189/172756404781814825}, Volume = {38}, Year = {2004}, Bdsk-Url-1 = {http://dx.doi.org/10.3189/172756404781814825}} @article{Luo_2003, - Author = {Luo, Lifeng and Robock, Alan and Vinnikov, Konstantin Y. and Schlosser, C. Adam and Slater, Andrew G. and Boone, Aaron and Etchevers, Pierre and Habets, Florence and Noilhan, Joel and Braden, Harald and et al.}, + Author = {Luo, L-F. and Robock, A. and Vinnikov, K. Y. and et al.}, Date-Added = {2019-05-06 14:12:54 -0600}, Date-Modified = {2019-05-06 14:12:54 -0600}, Doi = {10.1175/1525-7541(2003)4<334:eofsos>2.0.co;2}, @@ -451,7 +542,7 @@ @article{Luo_2003 Number = {2}, Pages = {334--351}, Publisher = {American Meteorological Society}, - Title = {Effects of Frozen Soil on Soil Temperature, Spring Infiltration, and Runoff: Results from the PILPS 2(d) Experiment at Valdai, Russia}, + Title = {Effects of Frozen Soil on Soil Temperature, Spring Infiltration, and Runoff: Results from the {PILPS} 2(d) Experiment at {V}aldai, {R}ussia}, Url = {http://dx.doi.org/10.1175/1525-7541(2003)4<334:EOFSOS>2.0.CO;2}, Volume = {4}, Year = {2003}, @@ -459,7 +550,7 @@ @article{Luo_2003 Bdsk-Url-2 = {http://dx.doi.org/10.1175/1525-7541(2003)4%3C334:eofsos%3E2.0.co;2}} @article{Slater_2001, - Author = {Slater, A. G. and Schlosser, C. A. and Desborough, C. E. and Pitman, A. J. and Henderson-Sellers, A. and Robock, A. and Vinnikov, K. Ya and Entin, J. and Mitchell, K. and Chen, F. and et al.}, + Author = {Slater, A. G. and Schlosser, C. A. and Desborough, C. E. and et al.}, Date-Added = {2019-05-06 14:11:52 -0600}, Date-Modified = {2019-05-06 14:11:52 -0600}, Doi = {10.1175/1525-7541(2001)002<0007:trosil>2.0.co;2}, @@ -469,7 +560,7 @@ @article{Slater_2001 Number = {1}, Pages = {7--25}, Publisher = {American Meteorological Society}, - Title = {The Representation of Snow in Land Surface Schemes: Results from PILPS 2(d)}, + Title = {The Representation of Snow in Land Surface Schemes: Results from {PILPS} 2(d)}, Url = {http://dx.doi.org/10.1175/1525-7541(2001)002<0007:TROSIL>2.0.CO;2}, Volume = {2}, Year = {2001}, @@ -477,7 +568,7 @@ @article{Slater_2001 Bdsk-Url-2 = {http://dx.doi.org/10.1175/1525-7541(2001)002%3C0007:trosil%3E2.0.co;2}} @article{Schlosser_1997, - Author = {Schlosser, C. Adam and Robock, Alan and Vinnikov, Konstantin Ya and Speranskaya, Nina A. and Xue, Yongkang}, + Author = {Schlosser, C. A. and Robock, A. and Vinnikov, K. Y. and Speranskaya, N. A. and Xue, Y.-K.}, Date-Added = {2019-05-06 14:10:42 -0600}, Date-Modified = {2019-05-06 14:10:42 -0600}, Doi = {10.1175/1520-0493(1997)125<3279:ylshms>2.0.co;2}, @@ -487,7 +578,7 @@ @article{Schlosser_1997 Number = {12}, Pages = {3279--3296}, Publisher = {American Meteorological Society}, - Title = {18-Year Land-Surface Hydrology Model Simulations for a Midlatitude Grassland Catchment in Valdai, Russia}, + Title = {18-Year Land-Surface Hydrology Model Simulations for a Midlatitude Grassland Catchment in {V}aldai, {R}ussia}, Url = {http://dx.doi.org/10.1175/1520-0493(1997)125<3279:YLSHMS>2.0.CO;2}, Volume = {125}, Year = {1997}, @@ -495,7 +586,7 @@ @article{Schlosser_1997 Bdsk-Url-2 = {http://dx.doi.org/10.1175/1520-0493(1997)125%3C3279:ylshms%3E2.0.co;2}} @article{Berbery_1999, - Author = {Berbery, Ernesto Hugo and Mitchell, Kenneth E. and Benjamin, Stanley and Smirnova, Tatiana and Ritchie, Harold and Hogue, Richard and Radeva, Ekaterina}, + Author = {Berbery, E. H. and Mitchell, K. E. and Benjamin, S. and Smirnova, T. and Ritchie, H. and Hogue, R. and Radeva, E.}, Date-Added = {2019-05-06 14:08:00 -0600}, Date-Modified = {2019-05-06 14:08:00 -0600}, Doi = {10.1029/1999jd900128}, @@ -513,7 +604,7 @@ @article{Berbery_1999 Bdsk-Url-2 = {http://dx.doi.org/10.1029/1999jd900128}} @article{Benjamin_2004b, - Author = {Benjamin, Stanley G. and Grell, Georg A. and Brown, John M. and Smirnova, Tatiana G. and Bleck, Rainer}, + Author = {Benjamin, S. G. and Grell, G. A. and Brown, J. M. and Smirnova, T. G. and Bleck, R.}, Date-Added = {2019-05-06 14:05:46 -0600}, Date-Modified = {2019-05-06 14:06:43 -0600}, Doi = {10.1175/1520-0493(2004)132<0473:mwpwtr>2.0.co;2}, @@ -523,7 +614,7 @@ @article{Benjamin_2004b Number = {2}, Pages = {473--494}, Publisher = {American Meteorological Society}, - Title = {Mesoscale Weather Prediction with the RUC Hybrid Isentropic--Terrain-Following Coordinate Model}, + Title = {Mesoscale Weather Prediction with the {RUC} Hybrid Isentropic--Terrain-Following Coordinate Model}, Url = {http://dx.doi.org/10.1175/1520-0493(2004)132<0473:MWPWTR>2.0.CO;2}, Volume = {132}, Year = {2004}, @@ -531,7 +622,7 @@ @article{Benjamin_2004b Bdsk-Url-2 = {http://dx.doi.org/10.1175/1520-0493(2004)132%3C0473:mwpwtr%3E2.0.co;2}} @article{Benjamin_2004a, - Author = {Benjamin, Stanley G. and D{\'e}v{\'e}nyi, Dezs{\"o} and Weygandt, Stephen S. and Brundage, Kevin J. and Brown, John M. and Grell, Georg A. and Kim, Dongsoo and Schwartz, Barry E. and Smirnova, Tatiana G. and Smith, Tracy Lorraine and et al.}, + Author = {Benjamin, S. G. and D{\'e}v{\'e}nyi, D. and Weygandt, S. S. and Brundage, K. J. and Brown, J. M. and Grell, G. A. and Kim, D. and Schwartz, B. E. and Smirnova, T. G. and Smith, T. L. and et al.}, Date-Added = {2019-05-06 14:04:23 -0600}, Date-Modified = {2019-05-06 14:06:36 -0600}, Doi = {10.1175/1520-0493(2004)132<0495:ahactr>2.0.co;2}, @@ -541,7 +632,7 @@ @article{Benjamin_2004a Number = {2}, Pages = {495--518}, Publisher = {American Meteorological Society}, - Title = {An Hourly Assimilation--Forecast Cycle: The RUC}, + Title = {An Hourly Assimilation--Forecast Cycle: The {RUC}}, Url = {http://dx.doi.org/10.1175/1520-0493(2004)132<0495:AHACTR>2.0.CO;2}, Volume = {132}, Year = {2004}, @@ -549,18 +640,18 @@ @article{Benjamin_2004a Bdsk-Url-2 = {http://dx.doi.org/10.1175/1520-0493(2004)132%3C0495:ahactr%3E2.0.co;2}} @article{Smirnova_2000, - Author = {Smirnova, Tatiana G. and Brown, John M. and Benjamin, Stanley G. and Kim, Dongsoo}, + Author = {Smirnova, T. G. and Brown, J. M. and Benjamin, S. G. and Kim, D.}, Date-Modified = {2019-06-05 15:32:20 +0000}, Journal = {Journal of Geophysical Research: Atmospheres}, Number = {D3}, Pages = {4077--4086}, - Title = {Parameterization of cold-season processes in the MAPS land-surface scheme}, + Title = {Parameterization of cold-season processes in the {MAPS} land-surface scheme}, Volume = {105}, Year = {2000}, Bdsk-Url-1 = {http://dx.doi.org/10.1029/1999JD901047}} @article{Smirnova_2016, - Author = {Smirnova, Tatiana G. and Brown, John M. and Benjamin, Stanley G. and Kenyon, Jaymes S.}, + Author = {Smirnova, T. G. and Brown, J. M. and Benjamin, S. G. and Kenyon, J. S.}, Date-Added = {2019-05-06 13:55:32 -0600}, Date-Modified = {2019-05-06 13:55:32 -0600}, Doi = {10.1175/mwr-d-15-0198.1}, @@ -570,7 +661,7 @@ @article{Smirnova_2016 Number = {5}, Pages = {1851--1865}, Publisher = {American Meteorological Society}, - Title = {Modifications to the Rapid Update Cycle Land Surface Model (RUC LSM) Available in the Weather Research and Forecasting (WRF) Model}, + Title = {Modifications to the Rapid Update Cycle Land Surface Model ({RUC LSM}) Available in the {W}eather {R}esearch and {F}orecasting ({WRF}) Model}, Url = {http://dx.doi.org/10.1175/MWR-D-15-0198.1}, Volume = {144}, Year = {2016}, @@ -578,7 +669,7 @@ @article{Smirnova_2016 Bdsk-Url-2 = {http://dx.doi.org/10.1175/mwr-d-15-0198.1}} @article{Morrison_2008, - Author = {Morrison, Hugh and Gettelman, Andrew}, + Author = {Morrison, H. and Gettelman, A.}, Date-Added = {2019-05-03 12:49:59 -0600}, Date-Modified = {2019-05-03 12:49:59 -0600}, Doi = {10.1175/2008jcli2105.1}, @@ -588,7 +679,7 @@ @article{Morrison_2008 Number = {15}, Pages = {3642--3659}, Publisher = {American Meteorological Society}, - Title = {A New Two-Moment Bulk Stratiform Cloud Microphysics Scheme in the Community Atmosphere Model, Version 3 (CAM3). Part I: Description and Numerical Tests}, + Title = {A New Two-Moment Bulk Stratiform Cloud Microphysics Scheme in the {C}ommunity {A}tmosphere {M}odel, {V}ersion 3 ({CAM3}). {P}art {I}: Description and Numerical Tests}, Url = {http://dx.doi.org/10.1175/2008JCLI2105.1}, Volume = {21}, Year = {2008}, @@ -606,7 +697,7 @@ @article{Gettelman_2015_2 Number = {3}, Pages = {1288--1307}, Publisher = {American Meteorological Society}, - Title = {Advanced Two-Moment Bulk Microphysics for Global Models. Part II: Global Model Solutions and Aerosol--Cloud Interactions*}, + Title = {Advanced Two-Moment Bulk Microphysics for Global Models. {P}art {II}: Global Model Solutions and Aerosol--Cloud Interactions}, Url = {http://dx.doi.org/10.1175/JCLI-D-14-00103.1}, Volume = {28}, Year = {2015}, @@ -624,7 +715,7 @@ @article{Gettelman_2015_1 Number = {3}, Pages = {1268--1287}, Publisher = {American Meteorological Society}, - Title = {Advanced Two-Moment Bulk Microphysics for Global Models. Part I: Off-Line Tests and Comparison with Other Schemes}, + Title = {Advanced Two-Moment Bulk Microphysics for Global Models. {P}art {I}: Off-Line Tests and Comparison with Other Schemes}, Url = {http://dx.doi.org/10.1175/JCLI-D-14-00102.1}, Volume = {28}, Year = {2015}, @@ -632,18 +723,18 @@ @article{Gettelman_2015_1 Bdsk-Url-2 = {http://dx.doi.org/10.1175/jcli-d-14-00102.1}} @techreport{olson_et_al_2019, - Author = {J.B. Olson and J.S.Kenyon and W.A. Angevine and J.M. Brown and M. Pagowski and K. Suselj}, + Author = {J. B. Olson and J. S. Kenyon and W. A. Angevine and J. M. Brown and M. Pagowski and K. Suselj}, Date-Added = {2019-05-01 15:29:00 -0600}, Date-Modified = {2019-05-01 15:32:09 -0600}, Institution = {NOAA OAR GSD-61}, Month = {March}, - Title = {A description of the MYNN-EDMF scheme and the coupling to other components in WRF-ARW}, + Title = {A description of the {MYNN-EDMF} scheme and the coupling to other components in {WRF-ARW}}, Type = {Technical Memorandum}, Year = {2019}} @conference{olson_and_brown_2009, Address = {Omaha, Nebraska}, - Author = {J.B. Olson and J.M.Brown}, + Author = {J. B. Olson and J. M. Brown}, Booktitle = {23rd Conf. on Weather Analysis and Forecasting/19th Conf. on Numerical Weather Prediction}, Date-Added = {2019-05-01 15:13:42 -0600}, Date-Modified = {2019-05-01 15:18:06 -0600}, @@ -653,7 +744,7 @@ @conference{olson_and_brown_2009 Year = {2009}} @article{Nakanishi_2006, - Author = {Nakanishi, Mikio and Niino, Hiroshi}, + Author = {Nakanishi, M. and Niino, H.}, Date-Added = {2019-05-01 15:10:22 -0600}, Date-Modified = {2019-05-01 15:10:22 -0600}, Doi = {10.1007/s10546-005-9030-8}, @@ -663,14 +754,14 @@ @article{Nakanishi_2006 Number = {2}, Pages = {397--407}, Publisher = {Springer Nature}, - Title = {An Improved Mellor--Yamada Level-3 Model: Its Numerical Stability and Application to a Regional Prediction of Advection Fog}, + Title = {An Improved {M}ellor--{Y}amada Level-3 Model: Its Numerical Stability and Application to a Regional Prediction of Advection Fog}, Url = {http://dx.doi.org/10.1007/s10546-005-9030-8}, Volume = {119}, Year = {2006}, Bdsk-Url-1 = {http://dx.doi.org/10.1007/s10546-005-9030-8}} @article{Nakanishi_2004, - Author = {Nakanishi, Mikio and Niino, Hiroshi}, + Author = {Nakanishi, M. and Niino, H.}, Date-Added = {2019-05-01 15:06:36 -0600}, Date-Modified = {2019-05-01 15:06:36 -0600}, Doi = {10.1023/b:boun.0000020164.04146.98}, @@ -680,7 +771,7 @@ @article{Nakanishi_2004 Number = {1}, Pages = {1--31}, Publisher = {Springer Nature}, - Title = {An Improved Mellor--Yamada Level-3 Model with Condensation Physics: Its Design and Verification}, + Title = {An Improved {M}ellor--{Y}amada Level-3 Model with Condensation Physics: Its Design and Verification}, Url = {http://dx.doi.org/10.1023/B:BOUN.0000020164.04146.98}, Volume = {112}, Year = {2004}, @@ -688,7 +779,7 @@ @article{Nakanishi_2004 Bdsk-Url-2 = {http://dx.doi.org/10.1023/b:boun.0000020164.04146.98}} @article{Mellor_1982, - Author = {Mellor, George L. and Yamada, Tetsuji}, + Author = {Mellor, G. L. and Yamada, T.}, Date-Added = {2019-05-01 15:00:12 -0600}, Date-Modified = {2019-05-01 15:00:12 -0600}, Doi = {10.1029/rg020i004p00851}, @@ -705,7 +796,7 @@ @article{Mellor_1982 Bdsk-Url-2 = {http://dx.doi.org/10.1029/rg020i004p00851}} @article{Mellor_1974, - Author = {Mellor, George L. and Yamada, Tetsuji}, + Author = {Mellor, G. L. and Yamada, T.}, Date-Added = {2019-05-01 14:57:26 -0600}, Date-Modified = {2019-05-01 14:57:26 -0600}, Doi = {10.1175/1520-0469(1974)031<1791:ahotcm>2.0.co;2}, @@ -723,7 +814,7 @@ @article{Mellor_1974 Bdsk-Url-2 = {http://dx.doi.org/10.1175/1520-0469(1974)031%3C1791:ahotcm%3E2.0.co;2}} @article{Nakanish_2001, - Author = {Nakanish, Mikio}, + Author = {Nakanish, M.}, Date-Added = {2019-04-25 11:08:11 -0600}, Date-Modified = {2019-04-25 11:08:11 -0600}, Doi = {10.1023/a:1018915827400}, @@ -733,7 +824,7 @@ @article{Nakanish_2001 Number = {3}, Pages = {349--378}, Publisher = {Springer Nature}, - Title = {Improvement Of The Mellor--Yamada Turbulence Closure Model Based On Large-Eddy Simulation Data}, + Title = {Improvement Of The {M}ellor--{Y}amada Turbulence Closure Model Based On Large-Eddy Simulation Data}, Url = {http://dx.doi.org/10.1023/A:1018915827400}, Volume = {99}, Year = {2001}, @@ -751,7 +842,7 @@ @article{kennedy_and_shapiro_1980 Year = {1980}} @article{Siebesma_2007, - Author = {Siebesma, A. Pier and Soares, Pedro M. M. and Teixeira, Jo{\~a}o}, + Author = {Siebesma, A. P. and Soares, P. M. M. and Teixeira, J.}, Date-Added = {2019-04-24 12:11:29 -0600}, Date-Modified = {2019-04-24 12:11:29 -0600}, Doi = {10.1175/jas3888.1}, @@ -769,7 +860,7 @@ @article{Siebesma_2007 Bdsk-Url-2 = {http://dx.doi.org/10.1175/jas3888.1}} @article{Han_2016, - Author = {Han, Jongil and Witek, Marcin L. and Teixeira, Joao and Sun, Ruiyu and Pan, Hua-Lu and Fletcher, Jennifer K. and Bretherton, Christopher S.}, + Author = {Han, J. and Witek, M. L. and Teixeira, J. and Sun, R. and Pan, H.-L. and Fletcher, J. K. and Bretherton, C. S.}, Date-Added = {2019-04-24 12:08:21 -0600}, Date-Modified = {2019-04-24 12:08:21 -0600}, Doi = {10.1175/waf-d-15-0053.1}, @@ -779,7 +870,7 @@ @article{Han_2016 Number = {1}, Pages = {341--352}, Publisher = {American Meteorological Society}, - Title = {Implementation in the NCEP GFS of a Hybrid Eddy-Diffusivity Mass-Flux (EDMF) Boundary Layer Parameterization with Dissipative Heating and Modified Stable Boundary Layer Mixing}, + Title = {Implementation in the {NCEP} {GFS} of a Hybrid Eddy-Diffusivity Mass-Flux ({EDMF}) Boundary Layer Parameterization with Dissipative Heating and Modified Stable Boundary Layer Mixing}, Url = {http://dx.doi.org/10.1175/WAF-D-15-0053.1}, Volume = {31}, Year = {2016}, @@ -805,7 +896,7 @@ @article{Vickers_2004 Bdsk-Url-2 = {http://dx.doi.org/10.1175/jam2160.1}} @article{Bechtold_1998, - Author = {Bechtold, Peter and Siebesma, Pier}, + Author = {Bechtold, P. and Siebesma, P.}, Date-Added = {2019-04-22 11:24:42 -0600}, Date-Modified = {2019-04-22 11:24:42 -0600}, Doi = {10.1175/1520-0469(1998)055<0888:oarobl>2.0.co;2}, @@ -823,7 +914,7 @@ @article{Bechtold_1998 Bdsk-Url-2 = {http://dx.doi.org/10.1175/1520-0469(1998)055%3C0888:oarobl%3E2.0.co;2}} @article{Ito_2015, - Author = {Ito, Junshi and Niino, Hiroshi and Nakanishi, Mikio and Moeng, Chin-Hoh}, + Author = {Ito, J. and Niino, H. and Nakanishi, M. and Moeng, C-H.}, Date-Added = {2019-04-22 10:27:42 -0600}, Date-Modified = {2019-04-22 10:27:42 -0600}, Doi = {10.1007/s10546-015-0045-5}, @@ -840,7 +931,7 @@ @article{Ito_2015 Bdsk-Url-1 = {http://dx.doi.org/10.1007/s10546-015-0045-5}} @article{Tripoli_1981, - Author = {Tripoli, Gregory J. and Cotton, William R.}, + Author = {Tripoli, G. J. and Cotton, W. R.}, Date-Added = {2019-04-22 10:18:40 -0600}, Date-Modified = {2019-04-22 10:18:40 -0600}, Doi = {10.1175/1520-0493(1981)109<1094:tuollw>2.0.co;2}, @@ -858,7 +949,7 @@ @article{Tripoli_1981 Bdsk-Url-2 = {http://dx.doi.org/10.1175/1520-0493(1981)109%3C1094:tuollw%3E2.0.co;2}} @article{NAKANISHI_2009, - Author = {NAKANISHI, Mikio and NIINO, Hiroshi}, + Author = {Nakanishi, M. and Niino, H.}, Date-Added = {2019-04-22 10:00:34 -0600}, Date-Modified = {2019-04-22 10:00:34 -0600}, Doi = {10.2151/jmsj.87.895}, @@ -874,7 +965,7 @@ @article{NAKANISHI_2009 Bdsk-Url-1 = {http://dx.doi.org/10.2151/jmsj.87.895}} @article{Chaboureau_2005, - Author = {Chaboureau, Jean-Pierre}, + Author = {Chaboureau, J.-P.}, Date-Added = {2019-04-21 16:19:12 -0600}, Date-Modified = {2019-04-21 16:19:12 -0600}, Doi = {10.1029/2004jd005645}, @@ -882,7 +973,7 @@ @article{Chaboureau_2005 Journal = {Journal of Geophysical Research}, Number = {D17}, Publisher = {American Geophysical Union (AGU)}, - Title = {Statistical representation of clouds in a regional model and the impact on the diurnal cycle of convection during Tropical Convection, Cirrus and Nitrogen Oxides (TROCCINOX)}, + Title = {Statistical representation of clouds in a regional model and the impact on the diurnal cycle of convection during Tropical Convection, Cirrus and Nitrogen Oxides ({TROCCINOX})}, Url = {http://dx.doi.org/10.1029/2004JD005645}, Volume = {110}, Year = {2005}, @@ -890,7 +981,7 @@ @article{Chaboureau_2005 Bdsk-Url-2 = {http://dx.doi.org/10.1029/2004jd005645}} @article{Chaboureau_2002, - Author = {Chaboureau, Jean-Pierre and Bechtold, Peter}, + Author = {Chaboureau, J.-P. and Bechtold, P.}, Date-Added = {2019-04-21 16:17:45 -0600}, Date-Modified = {2019-04-21 16:17:45 -0600}, Doi = {10.1175/1520-0469(2002)059<2362:ascpdf>2.0.co;2}, @@ -908,7 +999,7 @@ @article{Chaboureau_2002 Bdsk-Url-2 = {http://dx.doi.org/10.1175/1520-0469(2002)059%3C2362:ascpdf%3E2.0.co;2}} @article{Kuwano_Yoshida_2010, - Author = {Kuwano-Yoshida, Akira and Enomoto, Takeshi and Ohfuchi, Wataru}, + Author = {Kuwano-Yoshida, A. and Enomoto, T. and Ohfuchi, W.}, Date-Added = {2019-04-21 16:12:47 -0600}, Date-Modified = {2019-04-21 16:12:47 -0600}, Doi = {10.1002/qj.660}, @@ -918,7 +1009,7 @@ @article{Kuwano_Yoshida_2010 Number = {651}, Pages = {1583--1597}, Publisher = {Wiley}, - Title = {An improved PDF cloud scheme for climate simulations}, + Title = {An improved {PDF} cloud scheme for climate simulations}, Url = {http://dx.doi.org/10.1002/qj.660}, Volume = {136}, Year = {2010}, @@ -943,7 +1034,7 @@ @article{Sommeria_1977 Bdsk-Url-2 = {http://dx.doi.org/10.1175/1520-0469(1977)034%3C0344:sscimo%3E2.0.co;2}} @article{Benjamin_2016, - Author = {Benjamin, Stanley G. and Weygandt, Stephen S. and Brown, John M. and Hu, Ming and Alexander, Curtis R. and Smirnova, Tatiana G. and Olson, Joseph B. and James, Eric P. and Dowell, David C. and Grell, Georg A. and et al.}, + Author = {Benjamin, S. G. and Weygandt, S. S. and Brown, J. M. and Hu, M. and Alexander, C. R. and Smirnova, T. G. and Olson, J. B. and James, E. P. and Dowell, D. C. and Grell, G. A. and et al.}, Date-Added = {2019-04-19 11:32:56 -0600}, Date-Modified = {2019-04-19 11:32:56 -0600}, Doi = {10.1175/mwr-d-15-0242.1}, @@ -961,7 +1052,7 @@ @article{Benjamin_2016 Bdsk-Url-2 = {http://dx.doi.org/10.1175/mwr-d-15-0242.1}} @article{Arakawa_2004, - Author = {Arakawa, Akio}, + Author = {Arakawa, A.}, Date-Added = {2019-02-01 17:35:16 -0700}, Date-Modified = {2019-02-01 17:35:16 -0700}, Doi = {10.1175/1520-0442(2004)017<2493:ratcpp>2.0.co;2}, @@ -979,7 +1070,7 @@ @article{Arakawa_2004 Bdsk-Url-2 = {http://dx.doi.org/10.1175/1520-0442(2004)017%3C2493:ratcpp%3E2.0.co;2}} @article{Thompson_2004, - Author = {Thompson, Gregory and Rasmussen, Roy M. and Manning, Kevin}, + Author = {Thompson, G. and Rasmussen, R. M. and Manning, K.}, Date-Added = {2019-01-22 16:11:17 -0700}, Date-Modified = {2019-01-22 16:11:17 -0700}, Doi = {10.1175/1520-0493(2004)132<0519:efowpu>2.0.co;2}, @@ -989,7 +1080,7 @@ @article{Thompson_2004 Number = {2}, Pages = {519--542}, Publisher = {American Meteorological Society}, - Title = {Explicit Forecasts of Winter Precipitation Using an Improved Bulk Microphysics Scheme. Part I: Description and Sensitivity Analysis}, + Title = {Explicit Forecasts of Winter Precipitation Using an Improved Bulk Microphysics Scheme. {P}art {I}: Description and Sensitivity Analysis}, Url = {http://dx.doi.org/10.1175/1520-0493(2004)132<0519:EFOWPU>2.0.CO;2}, Volume = {132}, Year = {2004}, @@ -997,7 +1088,7 @@ @article{Thompson_2004 Bdsk-Url-2 = {http://dx.doi.org/10.1175/1520-0493(2004)132%3C0519:efowpu%3E2.0.co;2}} @article{Abdul_Razzak_2000, - Author = {Abdul-Razzak, Hayder and Ghan, Steven J.}, + Author = {Abdul-Razzak, H. and Ghan, S. J.}, Date-Added = {2019-01-22 11:02:36 -0700}, Date-Modified = {2019-06-05 15:28:16 +0000}, Journal = {Journal of Geophysical Research: Atmospheres}, @@ -1009,7 +1100,7 @@ @article{Abdul_Razzak_2000 Bdsk-Url-1 = {http://dx.doi.org/10.1029/1999JD901161}} @article{Barahona_2014, - Author = {Barahona, D. and Molod, A. and Bacmeister, J. and Nenes, A. and Gettelman, A. and Morrison, H. and Phillips, V. and Eichmann, A.}, + Author = {Barahona, D. and Molod, A. and Bacmeister, J. and et al.}, Date-Added = {2019-01-22 10:47:07 -0700}, Date-Modified = {2019-01-22 10:47:07 -0700}, Doi = {10.5194/gmd-7-1733-2014}, @@ -1019,14 +1110,14 @@ @article{Barahona_2014 Number = {4}, Pages = {1733--1766}, Publisher = {Copernicus GmbH}, - Title = {Development of two-moment cloud microphysics for liquid and ice within the NASA Goddard Earth Observing System Model (GEOS-5)}, + Title = {Development of two-moment cloud microphysics for liquid and ice within the NASA Goddard Earth Observing System Model ({GEOS-5})}, Url = {http://dx.doi.org/10.5194/gmd-7-1733-2014}, Volume = {7}, Year = {2014}, Bdsk-Url-1 = {http://dx.doi.org/10.5194/gmd-7-1733-2014}} @article{Barahona_2008, - Author = {Barahona, Donifan and Nenes, Athanasios}, + Author = {Barahona, D. and Nenes, A.}, Date-Added = {2019-01-22 10:12:34 -0700}, Date-Modified = {2019-01-22 10:12:34 -0700}, Doi = {10.1029/2007jd009355}, @@ -1043,7 +1134,7 @@ @article{Barahona_2008 Bdsk-Url-2 = {http://dx.doi.org/10.1029/2007jd009355}} @article{Fountoukis_2005, - Author = {Fountoukis, Christos}, + Author = {Fountoukis, C.}, Date-Added = {2019-01-22 10:07:41 -0700}, Date-Modified = {2019-01-22 10:07:41 -0700}, Doi = {10.1029/2004jd005591}, @@ -1059,7 +1150,7 @@ @article{Fountoukis_2005 Bdsk-Url-2 = {http://dx.doi.org/10.1029/2004jd005591}} @article{Nenes_2003, - Author = {Nenes, Athanasios}, + Author = {Nenes, A.}, Date-Added = {2019-01-22 10:02:59 -0700}, Date-Modified = {2019-01-22 10:02:59 -0700}, Doi = {10.1029/2002jd002911}, @@ -1092,7 +1183,7 @@ @article{Barahona_2009 Bdsk-Url-1 = {http://dx.doi.org/10.5194/acp-9-369-2009}} @article{Smirnova_1997, - Author = {Smirnova, Tatiana G. and Brown, John M. and Benjamin, Stanley G.}, + Author = {Smirnova, T. G. and Brown, J. M. and Benjamin, S. G.}, Date-Added = {2019-01-14 15:20:01 -0700}, Date-Modified = {2019-01-14 15:20:01 -0700}, Doi = {10.1175/1520-0493(1997)125<1870:podsmc>2.0.co;2}, @@ -1110,7 +1201,7 @@ @article{Smirnova_1997 Bdsk-Url-2 = {http://dx.doi.org/10.1175/1520-0493(1997)125%3C1870:podsmc%3E2.0.co;2}} @article{Gregory_2001, - Author = {Gregory, David}, + Author = {Gregory, D.}, Date-Added = {2018-11-06 11:45:59 -0700}, Date-Modified = {2018-11-06 11:45:59 -0700}, Doi = {10.1002/qj.49712757104}, @@ -1127,7 +1218,7 @@ @article{Gregory_2001 Bdsk-Url-1 = {http://dx.doi.org/10.1002/qj.49712757104}} @article{Pan_1998, - Author = {Pan, Dzong-Ming and Randall, Davi D. A.}, + Author = {Pan, D.-M. and Randall, D. A.}, Date-Added = {2018-11-06 11:43:33 -0700}, Date-Modified = {2018-11-06 11:43:33 -0700}, Doi = {10.1002/qj.49712454714}, @@ -1144,7 +1235,7 @@ @article{Pan_1998 Bdsk-Url-1 = {http://dx.doi.org/10.1002/qj.49712454714}} @article{Arakawa_2013, - Author = {Arakawa, Akio and Wu, Chien-Ming}, + Author = {Arakawa, A. and Wu, C.-M.}, Date-Added = {2018-11-06 11:41:28 -0700}, Date-Modified = {2018-11-06 11:41:28 -0700}, Doi = {10.1175/jas-d-12-0330.1}, @@ -1154,7 +1245,7 @@ @article{Arakawa_2013 Number = {7}, Pages = {1977--1992}, Publisher = {American Meteorological Society}, - Title = {A Unified Representation of Deep Moist Convection in Numerical Modeling of the Atmosphere. Part I}, + Title = {A Unified Representation of Deep Moist Convection in Numerical Modeling of the Atmosphere. {P}art {I}}, Url = {http://dx.doi.org/10.1175/JAS-D-12-0330.1}, Volume = {70}, Year = {2013}, @@ -1162,7 +1253,7 @@ @article{Arakawa_2013 Bdsk-Url-2 = {http://dx.doi.org/10.1175/jas-d-12-0330.1}} @article{Chikira_2010, - Author = {Chikira, Minoru and Sugiyama, Masahiro}, + Author = {Chikira, M. and Sugiyama, M.}, Date-Added = {2018-11-06 11:35:55 -0700}, Date-Modified = {2018-11-06 11:35:55 -0700}, Doi = {10.1175/2010jas3316.1}, @@ -1172,7 +1263,7 @@ @article{Chikira_2010 Number = {7}, Pages = {2171--2193}, Publisher = {American Meteorological Society}, - Title = {A Cumulus Parameterization with State-Dependent Entrainment Rate. Part I: Description and Sensitivity to Temperature and Humidity Profiles}, + Title = {A Cumulus Parameterization with State-Dependent Entrainment Rate. {P}art {I}: Description and Sensitivity to Temperature and Humidity Profiles}, Url = {http://dx.doi.org/10.1175/2010JAS3316.1}, Volume = {67}, Year = {2010}, @@ -1180,7 +1271,7 @@ @article{Chikira_2010 Bdsk-Url-2 = {http://dx.doi.org/10.1175/2010jas3316.1}} @article{Lewis_2005, - Author = {Lewis, John M.}, + Author = {Lewis, J. M.}, Date-Added = {2018-09-21 11:27:20 -0600}, Date-Modified = {2018-09-21 11:27:20 -0600}, Doi = {10.1175/mwr2949.1}, @@ -1198,7 +1289,7 @@ @article{Lewis_2005 Bdsk-Url-2 = {http://dx.doi.org/10.1175/mwr2949.1}} @article{Zhu_2018, - Author = {Zhu, Yuejian and Zhou, Xiaqiong and Li, Wei and Hou, Dingchen and Melhauser, Christopher and Sinsky, Eric and Pe{\~n}a, Malaquias and Fu, Bing and Guan, Hong and Kolczynski, Walter and et al.}, + Author = {Zhu, Y. and Zhou, X. and Li, W. and Hou, D. and Melhauser, C. and Sinsky, E. and Pe{\~n}a, M. and Fu, B. and Guan, H. and Kolczynski, W. and et al.}, Date-Added = {2018-09-07 11:48:50 -0600}, Date-Modified = {2019-06-05 15:33:03 +0000}, Journal = {Journal of Geophysical Research: Atmospheres}, @@ -1211,7 +1302,7 @@ @article{Zhu_2018 Bdsk-Url-2 = {http://dx.doi.org/10.1029/2018jd028506}} @article{Shutts_2005, - Author = {Shutts, Glenn}, + Author = {Shutts, G.}, Date-Added = {2018-09-07 11:46:20 -0600}, Date-Modified = {2018-09-07 11:46:20 -0600}, Doi = {10.1256/qj.04.106}, @@ -1261,12 +1352,12 @@ @article{buizza_et_al_1999 Date-Modified = {2018-09-05 13:43:07 -0600}, Journal = {Quarterly Journal of the Royal Meteorological Society}, Pages = {2887-2908}, - Title = {Stochastic representation of model uncertainties in the ECMWF ensemble prediction system}, + Title = {Stochastic representation of model uncertainties in the {ECMWF} ensemble prediction system}, Volume = {125}, Year = {1999}} @article{donahue_and_caldwell_2018, - Author = {A.S. Donahue and P.M. Caldwell}, + Author = {A. S. Donahue and P. M. Caldwell}, Date-Added = {2018-08-22 11:38:12 -0600}, Date-Modified = {2018-08-22 11:42:12 -0600}, Journal = {Journal of Advances in Modeling Earth Systems}, @@ -1276,7 +1367,7 @@ @article{donahue_and_caldwell_2018 Year = {2018}} @article{tompkins_and_berner_2008, - Author = {A.M. Tompkins and J. Berner}, + Author = {A. M. Tompkins and J. Berner}, Date-Added = {2018-08-21 16:39:36 -0600}, Date-Modified = {2018-08-21 20:28:30 -0600}, Journal = {J. Geophys. Res.}, @@ -1286,7 +1377,7 @@ @article{tompkins_and_berner_2008 Year = {2008}} @techreport{palmer_et_al_2009, - Author = {T.N. Palmer and R. Buizza and F. Doblas-Reyes and T. Jung and M. Leutbecher and G.J. Shutts and M. Steinheimer and A. Weisheimer}, + Author = {T. N. Palmer and R. Buizza and F. Doblas-Reyes and T. Jung and M. Leutbecher and G. J. Shutts and M. Steinheimer and A. Weisheimer}, Date-Added = {2018-08-21 16:35:56 -0600}, Date-Modified = {2018-08-21 16:39:32 -0600}, Institution = {ECMWF}, @@ -1301,7 +1392,7 @@ @article{berner_et_al_2009 Date-Modified = {2018-08-21 16:33:44 -0600}, Journal = {J. Atmos. Sci.}, Pages = {603-626}, - Title = {A spectral stochastic kinetic energy backscatter scheme and its impact on flow-dependent predictability in the ECMWF ensemble prediction system}, + Title = {A spectral stochastic kinetic energy backscatter scheme and its impact on flow-dependent predictability in the {ECMWF} ensemble prediction system}, Volume = {66}, Year = {2009}} @@ -1311,7 +1402,7 @@ @article{schuur_et_al_2012 Date-Modified = {2018-08-21 10:40:09 -0600}, Journal = {Journal of Applied Meteorology and Climatology}, Pages = {763-779}, - Title = {Classification of precipitation types during transitional winter weather using the RUC model and polarimetric radar retrievals}, + Title = {Classification of precipitation types during transitional winter weather using the {RUC} model and polarimetric radar retrievals}, Volume = {51}, Year = {2012}} @@ -1356,7 +1447,7 @@ @conference{baldwin_et_al_1994 Date-Modified = {2018-08-21 10:01:46 -0600}, Organization = {Amer. Meteor. Soc.}, Pages = {30-31}, - Title = {Precipitation type prediction using a decision tree approach with NMC's mesoscale Eta Model}, + Title = {Precipitation type prediction using a decision tree approach with {NMC}'s mesoscale {E}ta Model}, Year = {1994}} @techreport{cullen_and_salmond_2002, @@ -1365,7 +1456,7 @@ @techreport{cullen_and_salmond_2002 Date-Modified = {2018-08-02 20:08:03 +0000}, Institution = {ECMWF}, Number = {357}, - Title = {On the use of a predictor-corrector scheme to couple the dynamics with the physical parametrizations in the ECMWF model}, + Title = {On the use of a predictor-corrector scheme to couple the dynamics with the physical parametrizations in the {ECMWF} model}, Type = {Tech. Memo}, Year = {2002}} @@ -1385,7 +1476,7 @@ @proceedings{beljaars_1991 Date-Added = {2018-07-27 22:06:59 +0000}, Date-Modified = {2018-07-27 22:30:21 +0000}, Organization = {ECMWF}, - Publisher = {the ECMWF Seminar on Numerical Methods in Atmospheric Models}, + Publisher = {the {ECMWF} Seminar on Numerical Methods in Atmospheric Models}, Title = {Numerical schemes for parameterizations}, Year = {1991}} @@ -1404,7 +1495,7 @@ @article{fritts_and_nastrom_1980 Date-Modified = {2018-07-26 22:42:09 +0000}, Journal = {J. Atmos. Sci.}, Pages = {111-127}, - Title = {Sources of mesoscale variability of gravity waves. Part II: frontal, convective, and jet stream excitation}, + Title = {Sources of mesoscale variability of gravity waves. {P}art {II}: frontal, convective, and jet stream excitation}, Volume = {49}, Year = {1980}} @@ -1414,14 +1505,14 @@ @proceedings{wmo_greenhouse_gas_bulletin_2017 Month = {October 2017}, Number = {13}, Organization = {World Meteorological Organization}, - Title = {WMO greenhouse gas bulletin}, + Title = {{WMO} greenhouse gas bulletin}, Year = {2017}} @article{soloviev_and_vershinsky_1982, - Author = {A.V. Soloviev and N.V. Vershinsky}, + Author = {A. V. Soloviev and N. V. Vershinsky}, Date-Added = {2018-07-22 01:43:03 +0000}, Date-Modified = {2018-07-22 01:47:32 +0000}, - Journal = {Deep Sea Research Part A. Oceanographic Research Papers}, + Journal = {Deep Sea Research {P}art {A}. Oceanographic Research Papers}, Number = {12}, Pages = {1437-1449}, Title = {The vertical structure of the thin surface layer of the ocean under conditions of low wind speed}, @@ -1440,17 +1531,17 @@ @article{zeng_and_beljaars_2005 Year = {2005}} @article{mccormack_et_al_2008, - Author = {J.P. McCormack and K.W. Hoppel and D.E. Siskind}, + Author = {J. P. McCormack and K. W. Hoppel and D. E. Siskind}, Date-Added = {2018-07-20 17:19:45 +0000}, Date-Modified = {2018-07-20 17:22:12 +0000}, Journal = {Atmos. Chem. Phys.}, Pages = {7519-7532}, - Title = {Parameterization of middle atmospheric water vapor photochemistry for high-altitude NWP and data assimilation}, + Title = {Parameterization of middle atmospheric water vapor photochemistry for high-altitude {NWP} and data assimilation}, Volume = {8}, Year = {2008}} @techreport{long_1986, - Author = {P.J. Long}, + Author = {P. J. Long}, Date-Added = {2018-07-18 22:00:29 +0000}, Date-Modified = {2018-07-18 22:03:03 +0000}, Institution = {U.S. Department of Commerce, National Oceanic and Atmospheric Administration, National Weather Service, National Meteorological Center}, @@ -1460,7 +1551,7 @@ @techreport{long_1986 Year = {1986}} @techreport{long_1984, - Author = {P.J. Long}, + Author = {P. J. Long}, Date-Added = {2018-07-18 21:57:22 +0000}, Date-Modified = {2018-07-18 22:00:25 +0000}, Institution = {U.S. Department of Commerce, National Oceanic and Atmospheric Administration, National Weather Service, National Meteorological Center}, @@ -1478,7 +1569,7 @@ @manual{miyakoda_and_sirutis_1986 Year = {1986}} @article{chen_and_lin_2011, - Author = {J.-H Chen and S.-J Lin}, + Author = {J.-H. Chen and S.-J. Lin}, Date-Added = {2018-07-18 19:04:23 +0000}, Date-Modified = {2018-07-18 19:10:04 +0000}, Journal = {Geophysical Research Letters}, @@ -1489,7 +1580,7 @@ @article{chen_and_lin_2011 Year = {2011}} @article{lord_et_al_1984, - Author = {S.J. Lord and H.E. Willoughby and J.M. Piotrowicz}, + Author = {S. J. Lord and H. E. Willoughby and J. M. Piotrowicz}, Date-Added = {2018-07-18 18:50:27 +0000}, Date-Modified = {2018-07-18 18:54:09 +0000}, Journal = {J. Atmos. Sci.}, @@ -1501,7 +1592,7 @@ @article{lord_et_al_1984 Year = {1984}} @article{krueger_et_al_1995, - Author = {S.K. Krueger and Q. Fu and K. N. Liou and H-N. S. Chin}, + Author = {S. K. Krueger and Q. Fu and K. N. Liou and H.-N. S. Chin}, Date-Added = {2018-07-18 18:46:23 +0000}, Date-Modified = {2018-07-18 18:49:52 +0000}, Journal = {Journal of Applied Meteorology}, @@ -1517,12 +1608,12 @@ @article{zheng_et_al_2017 Date-Modified = {2018-07-18 17:45:38 +0000}, Journal = {Monthly Weather Review}, Pages = {3969-3987}, - Title = {Improving the stable surface layer in the NCEP Global Forecast System}, + Title = {Improving the stable surface layer in the {NCEP} {G}lobal {F}orecast {S}ystem}, Volume = {145}, Year = {2017}} @article{hong_et_al_2004, - Author = {S-Y. Hong and J. Dudhia and S-H. Chen}, + Author = {S-Y. Hong and J. Dudhia and S.-H. Chen}, Date-Added = {2018-07-06 19:29:40 +0000}, Date-Modified = {2018-07-06 19:36:23 +0000}, Journal = {Monthly Weather Review}, @@ -1532,7 +1623,7 @@ @article{hong_et_al_2004 Year = {2004}} @article{heymsfield_and_donner_1990, - Author = {A. J. Heymsfield and L.J. Donner}, + Author = {A. J. Heymsfield and L. J. Donner}, Date-Added = {2018-07-06 18:58:01 +0000}, Date-Modified = {2018-07-06 19:00:50 +0000}, Journal = {J. Atmos. Sci.}, @@ -1548,7 +1639,7 @@ @article{deng_and_mace_2008 Date-Modified = {2018-07-06 19:01:59 +0000}, Journal = {Geophysical Research Letters}, Number = {L17808}, - Title = {Cirrus cloud microphysical properties and air motion statistics using cloud radar Doppler moments: water content, partical size, and sedimentation relationships}, + Title = {Cirrus cloud microphysical properties and air motion statistics using cloud radar {D}oppler moments: water content, partical size, and sedimentation relationships}, Volume = {35}, Year = {2008}} @@ -1558,23 +1649,23 @@ @article{lin_et_al_1994 Date-Modified = {2018-07-06 19:01:30 +0000}, Journal = {Monthly Weather Review}, Pages = {1575-1593}, - Title = {A class of the van Leer-type transport schemes and its application to the moisture transport in a general circulation model}, + Title = {A class of the van {L}eer-type transport schemes and its application to the moisture transport in a general circulation model}, Volume = {122}, Year = {1994}} @article{rutledge_and_hobbs_1984, - Author = {S.A. Rutledge and P.V. Hobbs}, + Author = {S. A. Rutledge and P. V. Hobbs}, Date-Added = {2018-07-05 16:45:48 +0000}, Date-Modified = {2018-07-05 16:49:04 +0000}, Journal = {J. Atmos. Sci.}, Number = {20}, Pages = {2949-2972}, - Title = {The mesoscale and microscale structure and organization of clouds and precipitation in midlatitude cyclones. XII: a diagnostic modeling study of precipitation development in narrow cold-frontal rainbands}, + Title = {The mesoscale and microscale structure and organization of clouds and precipitation in midlatitude cyclones. {XII}: a diagnostic modeling study of precipitation development in narrow cold-frontal rainbands}, Volume = {41}, Year = {1984}} @article{chen_and_lin_2013, - Author = {J-H. Chen and S-J. Lin}, + Author = {J.-H. Chen and S.-J. Lin}, Date-Added = {2018-07-03 18:13:27 +0000}, Date-Modified = {2018-07-03 18:17:40 +0000}, Journal = {J. Climate}, @@ -1591,7 +1682,7 @@ @inproceedings{untch_et_al_1999 Date-Modified = {2018-02-28 15:50:58 +0000}, Pages = {45-52}, Publisher = {Netherlands}, - Title = {Increased stratospheric resolution in the ECMWF forecasting system}, + Title = {Increased stratospheric resolution in the {ECMWF} forecasting system}, Year = {1999}} @article{dethof_and_holm_2004, @@ -1600,7 +1691,7 @@ @article{dethof_and_holm_2004 Date-Modified = {2018-02-26 22:56:19 +0000}, Journal = {Quarterly Journal of the Royal Meteorological Society}, Pages = {2851-2872}, - Title = {Ozone assimilation in the ERA-40 reanalysis project}, + Title = {Ozone assimilation in the {ERA-40} reanalysis project}, Volume = {130}, Year = {2004}} @@ -1629,7 +1720,7 @@ @article{john_and_buehler_2004 Date-Added = {2018-02-26 22:38:57 +0000}, Date-Modified = {2018-02-26 22:41:05 +0000}, Journal = {Geophysical Research Letters}, - Title = {The impact of ozone lines on AMSU-B radiances}, + Title = {The impact of ozone lines on {AMSU-B} radiances}, Volume = {31}, Year = {2004}} @@ -1639,7 +1730,7 @@ @article{derber_and_wu_1998 Date-Modified = {2018-02-26 22:37:30 +0000}, Journal = {Monthly Weather Review}, Pages = {2287-2299}, - Title = {The use of TOVS cloud-cleared radiances in the NCEP SSI analysis system}, + Title = {The use of {TOVS} cloud-cleared radiances in the {NCEP} {SSI} analysis system}, Volume = {126}, Year = {1998}} @@ -1708,12 +1799,12 @@ @book{pond_and_pickard_1983 Year = {1983}} @article{zeng_et_al_1998, - Author = {X. Zeng and M. Zhao and R.E. Dickinson}, + Author = {X. Zeng and M. Zhao and R. E. Dickinson}, Date-Added = {2018-02-13 23:09:56 +0000}, Date-Modified = {2018-02-13 23:12:08 +0000}, Journal = {J. Climate}, Pages = {2628-2644}, - Title = {Intercomparison of bulk aerodynamic algorithm for the comutation of sea surface Fluxes using TOGA COARE and TAO data}, + Title = {Intercomparison of bulk aerodynamic algorithm for the comutation of sea surface Fluxes using {TOGA} {COARE} and {TAO} data}, Volume = {11}, Year = {1998}} @@ -1723,7 +1814,7 @@ @article{dorman_and_sellers_1989 Date-Modified = {2018-02-01 00:02:39 +0000}, Journal = {Journal of Applied Meteorology}, Pages = {833-855}, - Title = {A global climatology of albedo, roughness length and stomatal resistance for atmospheric general circulation models as represented by the simple biosphere model (SiB)}, + Title = {A global climatology of albedo, roughness length and stomatal resistance for atmospheric general circulation models as represented by the simple biosphere model ({S}i{B})}, Volume = {28}, Year = {1989}} @@ -1733,7 +1824,7 @@ @misc{zobler_1999 Date-Modified = {2018-01-31 23:56:02 +0000}, Howpublished = {Available on-line [http://www.daac.ornl.gov]}, Month = {1999}, - Title = {Global soil types, 1-Degree Grid (Zobler). Dataset}} + Title = {Global soil types, 1-Degree Grid ({Z}obler). Dataset}} @techreport{zobler_1986, Address = {New York, New York, USA}, @@ -1746,13 +1837,13 @@ @techreport{zobler_1986 Year = {1986}} @article{hirsch_et_al_2015, - Author = {A. L. Hirsch and A.J. Pitman and J. Kala and R. Lorenz and M. G. Donat}, + Author = {A. L. Hirsch and A. J. Pitman and J. Kala and R. Lorenz and M. G. Donat}, Date-Added = {2018-01-31 23:30:18 +0000}, Date-Modified = {2018-01-31 23:32:47 +0000}, Journal = {Earth Interactions}, Number = {12}, Pages = {1-24}, - Title = {Modulation of land-use change impacts on temperature extremes via land-atmosphere coupling over Australia}, + Title = {Modulation of land-use change impacts on temperature extremes via land-atmosphere coupling over {A}ustralia}, Volume = {19}, Year = {2015}} @@ -1797,7 +1888,7 @@ @article{andersen_and_shepherd_2014 Year = {2014}} @article{guillod_et_al_2015, - Author = {B.P. Guillod and B. Orlowsky and D. G. Miralles and A. J. Teuling and S. I. Seneviratne}, + Author = {B. P. Guillod and B. Orlowsky and D. G. Miralles and A. J. Teuling and S. I. Seneviratne}, Date-Added = {2018-01-31 22:46:31 +0000}, Date-Modified = {2018-01-31 22:55:08 +0000}, Journal = {Nature Communications}, @@ -1812,7 +1903,7 @@ @article{milovac_et_al_2016 Date-Modified = {2018-01-31 22:43:31 +0000}, Journal = {J. Geophys. Res. Atmos.}, Pages = {624-649}, - Title = {Investigation of PBL schemes combining the WRF model simulations with scanning waver vapor differential absorption lidar measurements}, + Title = {Investigation of {PBL} schemes combining the {WRF} model simulations with scanning waver vapor differential absorption lidar measurements}, Volume = {121}, Year = {2016}} @@ -1822,7 +1913,7 @@ @article{paimazumder_and_done_2016 Date-Modified = {2018-01-31 22:33:52 +0000}, Journal = {J. Geophys. Res. Atmos.}, Pages = {12581-12592}, - Title = {Potential predictability sources of the 2012 U.S. drought in observations and a regional model ensemble}, + Title = {Potential predictability sources of the 2012 {U.S.} drought in observations and a regional model ensemble}, Volume = {121}, Year = {2016}} @@ -1847,7 +1938,7 @@ @article{ek_and_holtslag_2004 Year = {2004}} @article{ek_and_mahrt_1994, - Author = {M. Ek and L. Mahrt}, + Author = {M. B. Ek and L. Mahrt}, Date-Added = {2018-01-31 17:41:59 +0000}, Date-Modified = {2018-01-31 17:43:53 +0000}, Journal = {Monthly Weather Review}, @@ -1862,12 +1953,12 @@ @article{zheng_et_al_2012 Date-Modified = {2018-01-29 23:51:19 +0000}, Journal = {J. Geophys. Res.}, Number = {D06117}, - Title = {Improvement of daytime land surface skin temperature over arid regions in the NCEP GFS model and its impact on satellite data assimilation}, + Title = {Improvement of daytime land surface skin temperature over arid regions in the {NCEP} {GFS} model and its impact on satellite data assimilation}, Volume = {117}, Year = {2012}} @article{zeng_and_dickinson_1998, - Author = {X. Zeng and R.E. Dickinson}, + Author = {X. Zeng and R. E. Dickinson}, Date-Added = {2018-01-29 23:46:03 +0000}, Date-Modified = {2018-01-29 23:47:43 +0000}, Journal = {J. Climate}, @@ -1879,12 +1970,12 @@ @article{zeng_and_dickinson_1998 @conference{zheng_et_al_2009, Address = {Omaha, Nebraska}, Author = {W. Zheng and H. Wei and J. Meng and M. Ek and K. Mitchell and J. Derber and X. Zeng and Z. Wang}, + Bdsk-File-1 = {YnBsaXN0MDDSAQIDBFxyZWxhdGl2ZVBhdGhZYWxpYXNEYXRhXxBWLi4vLi4vLi4vLi4vLi4vRGVza3RvcC9OT0FIX0xTTS9JbXByb3ZlbWVudF9vZl9MYW5kX1N1cmZhY2VfU2tpbl9UZW1wZXJhdHVyZV9pbl9OQy5wZGZPEQIgAAAAAAIgAAIAAAxNYWNpbnRvc2ggSEQAAAAAAAAAAAAAAAAAAADT4djXSCsAAANl5rUfSW1wcm92ZW1lbnRfb2ZfTGFuZCMzNjVGRjBGLnBkZgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA2X/D9aQ780AAAAAAAAAAAAFAAMAAAkgAAAAAAAAAAAAAAAAAAAACE5PQUhfTFNNABAACAAA0+ItNwAAABEACAAA1pFSPQAAAAEAEANl5rUAD8YgAA/GDwAGL94AAgBRTWFjaW50b3NoIEhEOlVzZXJzOgBtYW4uemhhbmc6AERlc2t0b3A6AE5PQUhfTFNNOgBJbXByb3ZlbWVudF9vZl9MYW5kIzM2NUZGMEYucGRmAAAOAG4ANgBJAG0AcAByAG8AdgBlAG0AZQBuAHQAXwBvAGYAXwBMAGEAbgBkAF8AUwB1AHIAZgBhAGMAZQBfAFMAawBpAG4AXwBUAGUAbQBwAGUAcgBhAHQAdQByAGUAXwBpAG4AXwBOAEMALgBwAGQAZgAPABoADABNAGEAYwBpAG4AdABvAHMAaAAgAEgARAASAFdVc2Vycy9tYW4uemhhbmcvRGVza3RvcC9OT0FIX0xTTS9JbXByb3ZlbWVudF9vZl9MYW5kX1N1cmZhY2VfU2tpbl9UZW1wZXJhdHVyZV9pbl9OQy5wZGYAABMAAS8AABUAAgAQ//8AAAAIAA0AGgAkAH0AAAAAAAACAQAAAAAAAAAFAAAAAAAAAAAAAAAAAAACoQ==}, Date-Added = {2018-01-26 22:19:06 +0000}, Date-Modified = {2018-01-29 23:51:37 +0000}, - Organization = {The 23rd Conference on Weather Analysis and Forecasting (WAF)/19th Conference on Numerical Weather Prediction(NWP)}, - Title = {Improvement of land surface skin temperature in NCEP Operational NWP models and its impact on satellite Data Assimilation}, - Year = {2009}, - Bdsk-File-1 = {YnBsaXN0MDDSAQIDBFxyZWxhdGl2ZVBhdGhZYWxpYXNEYXRhXxBWLi4vLi4vLi4vLi4vLi4vRGVza3RvcC9OT0FIX0xTTS9JbXByb3ZlbWVudF9vZl9MYW5kX1N1cmZhY2VfU2tpbl9UZW1wZXJhdHVyZV9pbl9OQy5wZGZPEQIgAAAAAAIgAAIAAAxNYWNpbnRvc2ggSEQAAAAAAAAAAAAAAAAAAADT4djXSCsAAANl5rUfSW1wcm92ZW1lbnRfb2ZfTGFuZCMzNjVGRjBGLnBkZgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA2X/D9aQ780AAAAAAAAAAAAFAAMAAAkgAAAAAAAAAAAAAAAAAAAACE5PQUhfTFNNABAACAAA0+ItNwAAABEACAAA1pFSPQAAAAEAEANl5rUAD8YgAA/GDwAGL94AAgBRTWFjaW50b3NoIEhEOlVzZXJzOgBtYW4uemhhbmc6AERlc2t0b3A6AE5PQUhfTFNNOgBJbXByb3ZlbWVudF9vZl9MYW5kIzM2NUZGMEYucGRmAAAOAG4ANgBJAG0AcAByAG8AdgBlAG0AZQBuAHQAXwBvAGYAXwBMAGEAbgBkAF8AUwB1AHIAZgBhAGMAZQBfAFMAawBpAG4AXwBUAGUAbQBwAGUAcgBhAHQAdQByAGUAXwBpAG4AXwBOAEMALgBwAGQAZgAPABoADABNAGEAYwBpAG4AdABvAHMAaAAgAEgARAASAFdVc2Vycy9tYW4uemhhbmcvRGVza3RvcC9OT0FIX0xTTS9JbXByb3ZlbWVudF9vZl9MYW5kX1N1cmZhY2VfU2tpbl9UZW1wZXJhdHVyZV9pbl9OQy5wZGYAABMAAS8AABUAAgAQ//8AAAAIAA0AGgAkAH0AAAAAAAACAQAAAAAAAAAFAAAAAAAAAAAAAAAAAAACoQ==}} + Organization = {The 23rd Conference on Weather Analysis and Forecasting ({WAF})/19th Conference on Numerical Weather Prediction({NWP})}, + Title = {Improvement of land surface skin temperature in {NCEP} Operational {NWP} models and its impact on satellite Data Assimilation}, + Year = {2009}} @article{chen_et_al_1997, Author = {F. Chen and Z. Janjic and K. Mitchell}, @@ -1893,7 +1984,7 @@ @article{chen_et_al_1997 Journal = {Boundary-Layer Meteorology}, Number = {3}, Pages = {391-421}, - Title = {Impact of atmospheric surface-layer parameterizations in the new land-surface scheme of the NCEP mesoscale Eta model}, + Title = {Impact of atmospheric surface-layer parameterizations in the new land-surface scheme of the {NCEP} mesoscale {E}ta model}, Volume = {85}, Year = {1997}} @@ -1922,7 +2013,7 @@ @article{arakawa_and_wu_2013 Date-Modified = {2018-01-24 18:57:10 +0000}, Journal = {J. Atmos. Sci.}, Pages = {1977-1992}, - Title = {A unified representation of deep moist convection in numerical modeling of the atmosphere. Part I}, + Title = {A unified representation of deep moist convection in numerical modeling of the atmosphere. {P}art {I}}, Volume = {70}, Year = {2013}} @@ -1932,12 +2023,12 @@ @article{han_et_al_2017 Date-Modified = {2018-01-24 18:53:21 +0000}, Journal = {Weather and Forecasting}, Pages = {2005-2017}, - Title = {Updates in the NCEP GFS cumulus convective schemes with scale and aerosol awareness}, + Title = {Updates in the {NCEP} {GFS} cumulus convective schemes with scale and aerosol awareness}, Volume = {32}, Year = {2017}} @article{grell_and_freitas_2014, - Author = {G.A. Grell and S.R. Freitas}, + Author = {G. A. Grell and S. R. Freitas}, Date-Added = {2018-01-24 18:44:56 +0000}, Date-Modified = {2018-01-24 18:47:21 +0000}, Journal = {Atmos. Chem. Phys.}, @@ -1953,7 +2044,7 @@ @article{Koren_et_al_1999 Journal = {J. Geophys. Res.}, Number = {D16}, Pages = {19569-19585}, - Title = {A parameterization of snowpack and frozen ground intended for NCEP weather and climate models}, + Title = {A parameterization of snowpack and frozen ground intended for {NCEP} weather and climate models}, Volume = {104}, Year = {1999}} @@ -1964,7 +2055,7 @@ @article{ek_et_al_2003 Journal = {J. Geophys. Res.}, Number = {D22}, Pages = {8851}, - Title = {Implementation of Noah land-surface model advances in the NCEP operational mesoscale Eta model}, + Title = {Implementation of {N}oah land-surface model advances in the {NCEP} operational mesoscale {E}ta model}, Volume = {108}, Year = {2003}} @@ -1985,7 +2076,7 @@ @article{raisanen_and_barker_2004 Date-Modified = {2016-10-11 20:53:35 +0000}, Journal = {Quarterly Journal of the Royal Meteorological Society}, Pages = {2069-2085}, - Title = {Evaluation and optimization of sampling errors for the Monte Carlo Independent Column Approximation}, + Title = {Evaluation and optimization of sampling errors for the {M}onte {C}arlo {I}ndependent {C}olumn {A}pproximation}, Volume = {130}, Year = {2004}} @@ -2016,7 +2107,7 @@ @article{raisanen_2002 Date-Modified = {2016-10-11 20:41:23 +0000}, Journal = {Quarterly Journal of the Royal Meteorological Society}, Pages = {2397-2416}, - Title = {Two-stream approximations revisited: A new improvement and tests with GCM data}, + Title = {Two-stream approximations revisited: A new improvement and tests with {GCM} data}, Volume = {128}, Year = {2002}} @@ -2031,13 +2122,13 @@ @article{king_and_harshvardhan_1986 Year = {1986}} @url{Li_2015, - Author = {Xu Li}, + Author = {X. Li}, Title = {The development of the NSST within the NCEP GFS/CFS}, Url = {http://cpo.noaa.gov/sites/cpo/MAPP/workshops/rtf_technical_ws/presentations/21_Xu_Li.pdf}, Bdsk-Url-1 = {http://cpo.noaa.gov/sites/cpo/MAPP/workshops/rtf_technical_ws/presentations/21_Xu_Li.pdf}} @webpage{li_and_derber_2009, - Author = {Xu Li and John Derber}, + Author = {X. Li and J. Derber}, Date-Modified = {2020-02-24 17:06:35 +0000}, Title = {Near Sea Surface Temperatures (NSST) Analysis in NCEP GFS}, Url = {http://data.jcsda.org/Workshops/6th-workshop-onDA/Session-4/JCSDA_2008_Li.pdf}, @@ -2086,7 +2177,7 @@ @article{liou_1973 Date-Modified = {2016-06-21 17:22:03 +0000}, Journal = {Journal of the Atmospheric Sciences}, Pages = {1303-1326}, - Title = {A numerical experiment on Chandrasekhar's discrete-ordinate method for radiative transfer: Applications to cloudy and hazy atmospheres}, + Title = {A numerical experiment on {C}handrasekhar's discrete-ordinate method for radiative transfer: Applications to cloudy and hazy atmospheres}, Volume = {30}, Year = {1973}} @@ -2106,23 +2197,24 @@ @article{joseph_et_al_1976 Date-Modified = {2016-06-21 16:50:31 +0000}, Journal = {Journal of the Atmospheric Sciences}, Pages = {2452-2459}, - Title = {The Delta-Eddington approximation for radiative flux transfer}, + Title = {The {D}elta-{E}ddington approximation for radiative flux transfer}, Volume = {33}, Year = {1976}} @article{iacono_et_al_2008, Annote = {doi:10.1029/2008JD009944}, - Author = {M.J. Iacono and J.S. Delamere and E.J. Mlawer and M. W. Shephard and S. A. Clough and W.D. Collins}, + Author = {M. J. Iacono and J. S. Delamere and E. J. Mlawer and M. W. Shephard and S. A. Clough and W. D. Collins}, Date-Added = {2016-06-19 23:25:28 +0000}, Date-Modified = {2016-06-19 23:32:46 +0000}, Journal = {J. Geophys. Res.}, - Title = {Radiative forcing by long-lived greenhouse gases: Calculations with the AER radiative transfer models}, + Title = {Radiative forcing by long-lived greenhouse gases: Calculations with the {AER} radiative transfer models}, Volume = {113}, Year = {2008}} @article{grant_2001, Abstract = {A closure for the fluxes of mass, heat, and moisture at cloud base in the cumulus-capped boundary layer is developed. The cloud-base mass flux is obtained from a simplifed turbulence kinetic energy (TKE) budget for the sub-cloud layer, in which cumulus convection is assumed to be associated with a transport of TKE from the sub-cloud layer to the cloud layer.The heat and moisture fluxes are obtained from a jump model based on the virtual-potential-temperature equation. A key part of this parametrization is the parametrization of the virtual-temperature flux at the top of the transition zone between the sub-cloud and cloud layers.It is argued that pressure fluctuations must be responsible for the transport of TKE from the cloud layer to the sub-cloud layer.}, Author = {A. L. M. Grant}, + Bdsk-File-1 = {YnBsaXN0MDDSAQIDBFxyZWxhdGl2ZVBhdGhZYWxpYXNEYXRhXxBBLi4vLi4vQ2xvdWRTdGF0aW9uL2ZpcmxfbGlicmFyeS9maXJsX2xpYnJhcnlfZmlsZXMvR3JhbnQvMjAwMS5wZGZPEQHEAAAAAAHEAAIAAAxNYWNpbnRvc2ggSEQAAAAAAAAAAAAAAAAAAADR5yRSSCsAAAAoiV4IMjAwMS5wZGYAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAARgJuNOHLk4AAAAAAAAAAAACAAUAAAkgAAAAAAAAAAAAAAAAAAAABUdyYW50AAAQAAgAANHneLIAAAARAAgAANOHgq4AAAABABgAKIleAChslgAobIsAKGd7ABteBwACmFwAAgBbTWFjaW50b3NoIEhEOlVzZXJzOgBncmFudGY6AENsb3VkU3RhdGlvbjoAZmlybF9saWJyYXJ5OgBmaXJsX2xpYnJhcnlfZmlsZXM6AEdyYW50OgAyMDAxLnBkZgAADgASAAgAMgAwADAAMQAuAHAAZABmAA8AGgAMAE0AYQBjAGkAbgB0AG8AcwBoACAASABEABIASFVzZXJzL2dyYW50Zi9DbG91ZFN0YXRpb24vZmlybF9saWJyYXJ5L2ZpcmxfbGlicmFyeV9maWxlcy9HcmFudC8yMDAxLnBkZgATAAEvAAAVAAIADf//AAAACAANABoAJABoAAAAAAAAAgEAAAAAAAAABQAAAAAAAAAAAAAAAAAAAjA=}, Date-Added = {2016-06-15 22:11:22 +0000}, Date-Modified = {2018-07-06 19:02:34 +0000}, Doi = {10.1002/qj.49712757209}, @@ -2136,13 +2228,13 @@ @article{grant_2001 Url = {http://dx.doi.org/10.1002/qj.49712757209}, Volume = {127}, Year = {2001}, - Bdsk-File-1 = {YnBsaXN0MDDSAQIDBFxyZWxhdGl2ZVBhdGhZYWxpYXNEYXRhXxBBLi4vLi4vQ2xvdWRTdGF0aW9uL2ZpcmxfbGlicmFyeS9maXJsX2xpYnJhcnlfZmlsZXMvR3JhbnQvMjAwMS5wZGZPEQHEAAAAAAHEAAIAAAxNYWNpbnRvc2ggSEQAAAAAAAAAAAAAAAAAAADR5yRSSCsAAAAoiV4IMjAwMS5wZGYAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAARgJuNOHLk4AAAAAAAAAAAACAAUAAAkgAAAAAAAAAAAAAAAAAAAABUdyYW50AAAQAAgAANHneLIAAAARAAgAANOHgq4AAAABABgAKIleAChslgAobIsAKGd7ABteBwACmFwAAgBbTWFjaW50b3NoIEhEOlVzZXJzOgBncmFudGY6AENsb3VkU3RhdGlvbjoAZmlybF9saWJyYXJ5OgBmaXJsX2xpYnJhcnlfZmlsZXM6AEdyYW50OgAyMDAxLnBkZgAADgASAAgAMgAwADAAMQAuAHAAZABmAA8AGgAMAE0AYQBjAGkAbgB0AG8AcwBoACAASABEABIASFVzZXJzL2dyYW50Zi9DbG91ZFN0YXRpb24vZmlybF9saWJyYXJ5L2ZpcmxfbGlicmFyeV9maWxlcy9HcmFudC8yMDAxLnBkZgATAAEvAAAVAAIADf//AAAACAANABoAJABoAAAAAAAAAgEAAAAAAAAABQAAAAAAAAAAAAAAAAAAAjA=}, Bdsk-Url-1 = {http://dx.doi.org/10.1002/qj.49712757209}} @article{zhang_and_wu_2003, Abstract = {Abstract This study uses a 2D cloud-resolving model to investigate the vertical transport of horizontal momentum and to understand the role of a convection-generated perturbation pressure field in the momentum transport by convective systems during part of the Tropical Ocean and Global Atmosphere Coupled Ocean?Atmosphere Response Experiment (TOGA COARE) Intensive Observation Period. It shows that convective updrafts transport a significant amount of momentum vertically. This transport is downgradient in the easterly wind regime, but upgradient during a westerly wind burst. The differences in convective momentum transport between easterly and westerly wind regimes are examined. The perturbation pressure gradient accounts for an important part of the apparent momentum source. In general it is opposite in sign to the product of cloud mass flux and the vertical wind shear, with smaller magnitude. Examination of the dynamic forcing to the pressure field demonstrates that the linear forcing representing the interaction between the convective updrafts and the large-scale wind shear is the dominant term, while the nonlinear forcing is of secondary importance. Thus, parameterization schemes taking into account the linear interaction between the convective updrafts and the large-scale wind shear can capture the essential features of the perturbation pressure field. The parameterization scheme for momentum transport by Zhang and Cho is evaluated using the model simulation data. The parameterized pressure gradient force using the scheme is in excellent agreement with the simulated one. The parameterized apparent momentum source is also in good agreement with the model simulation. Other parameterization methods for the pressure gradient are also discussed.}, Annote = {doi: 10.1175/1520-0469(2003)060<1120:CMTAPP>2.0.CO;2}, - Author = {Zhang, Guang J. and Wu, Xiaoqing}, + Author = {Zhang, G. J. and Wu, X. Q.}, + Bdsk-File-1 = {YnBsaXN0MDDSAQIDBFxyZWxhdGl2ZVBhdGhZYWxpYXNEYXRhXxBBLi4vLi4vQ2xvdWRTdGF0aW9uL2ZpcmxfbGlicmFyeS9maXJsX2xpYnJhcnlfZmlsZXMvWmhhbmcvMjAwMy5wZGZPEQHEAAAAAAHEAAIAAAxNYWNpbnRvc2ggSEQAAAAAAAAAAAAAAAAAAADR5yRSSCsAAAAqjuYIMjAwMy5wZGYAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFrUP9K0L8MAAAAAAAAAAAACAAUAAAkgAAAAAAAAAAAAAAAAAAAABVpoYW5nAAAQAAgAANHneLIAAAARAAgAANK0kjMAAAABABgAKo7mAChslgAobIsAKGd7ABteBwACmFwAAgBbTWFjaW50b3NoIEhEOlVzZXJzOgBncmFudGY6AENsb3VkU3RhdGlvbjoAZmlybF9saWJyYXJ5OgBmaXJsX2xpYnJhcnlfZmlsZXM6AFpoYW5nOgAyMDAzLnBkZgAADgASAAgAMgAwADAAMwAuAHAAZABmAA8AGgAMAE0AYQBjAGkAbgB0AG8AcwBoACAASABEABIASFVzZXJzL2dyYW50Zi9DbG91ZFN0YXRpb24vZmlybF9saWJyYXJ5L2ZpcmxfbGlicmFyeV9maWxlcy9aaGFuZy8yMDAzLnBkZgATAAEvAAAVAAIADf//AAAACAANABoAJABoAAAAAAAAAgEAAAAAAAAABQAAAAAAAAAAAAAAAAAAAjA=}, Booktitle = {Journal of the Atmospheric Sciences}, Da = {2003/05/01}, Date-Added = {2016-06-14 23:39:50 +0000}, @@ -2161,13 +2253,13 @@ @article{zhang_and_wu_2003 Url = {http://dx.doi.org/10.1175/1520-0469(2003)060<1120:CMTAPP>2.0.CO;2}, Volume = {60}, Year = {2003}, - Bdsk-File-1 = {YnBsaXN0MDDSAQIDBFxyZWxhdGl2ZVBhdGhZYWxpYXNEYXRhXxBBLi4vLi4vQ2xvdWRTdGF0aW9uL2ZpcmxfbGlicmFyeS9maXJsX2xpYnJhcnlfZmlsZXMvWmhhbmcvMjAwMy5wZGZPEQHEAAAAAAHEAAIAAAxNYWNpbnRvc2ggSEQAAAAAAAAAAAAAAAAAAADR5yRSSCsAAAAqjuYIMjAwMy5wZGYAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFrUP9K0L8MAAAAAAAAAAAACAAUAAAkgAAAAAAAAAAAAAAAAAAAABVpoYW5nAAAQAAgAANHneLIAAAARAAgAANK0kjMAAAABABgAKo7mAChslgAobIsAKGd7ABteBwACmFwAAgBbTWFjaW50b3NoIEhEOlVzZXJzOgBncmFudGY6AENsb3VkU3RhdGlvbjoAZmlybF9saWJyYXJ5OgBmaXJsX2xpYnJhcnlfZmlsZXM6AFpoYW5nOgAyMDAzLnBkZgAADgASAAgAMgAwADAAMwAuAHAAZABmAA8AGgAMAE0AYQBjAGkAbgB0AG8AcwBoACAASABEABIASFVzZXJzL2dyYW50Zi9DbG91ZFN0YXRpb24vZmlybF9saWJyYXJ5L2ZpcmxfbGlicmFyeV9maWxlcy9aaGFuZy8yMDAzLnBkZgATAAEvAAAVAAIADf//AAAACAANABoAJABoAAAAAAAAAgEAAAAAAAAABQAAAAAAAAAAAAAAAAAAAjA=}, Bdsk-Url-1 = {http://dx.doi.org/10.1175/1520-0469(2003)060%3C1120:CMTAPP%3E2.0.CO;2}} @article{fritsch_and_chappell_1980, Abstract = {Abstract A parameterization formulation for incorporating the effects of midlatitude deep convection into mesoscale-numerical models is presented. The formulation is based on the hypothesis that the buoyant energy available to a parcel, in combination with a prescribed period of time for the convection to remove that energy, can be used to regulate the amount of convection in a mesoscale numerical model grid element. Individual clouds are represented as entraining moist updraft and downdraft plumes. The fraction of updraft condensate evaporated in moist downdrafts is determined from an empirical relationship between the vertical shear of the horizontal wind and precipitation efficiency. Vertical transports of horizontal momentum and warming by compensating subsidence are included in the parameterization. Since updraft and downdraft areas are sometimes a substantial fraction of mesoscale model grid-element areas, grid-point temperatures (adjusted for convection) are an area-weighted mean of updraft, downdraft and environmental temperatures.}, Annote = {doi: 10.1175/1520-0469(1980)037<1722:NPOCDM>2.0.CO;2}, Author = {Fritsch, J. M. and Chappell, C. F.}, + Bdsk-File-1 = {YnBsaXN0MDDSAQIDBFxyZWxhdGl2ZVBhdGhZYWxpYXNEYXRhXxBDLi4vLi4vQ2xvdWRTdGF0aW9uL2ZpcmxfbGlicmFyeS9maXJsX2xpYnJhcnlfZmlsZXMvRnJpdHNjaC8xOTgwLnBkZk8RAcoAAAAAAcoAAgAADE1hY2ludG9zaCBIRAAAAAAAAAAAAAAAAAAAANHnJFJIKwAAARCuMwgxOTgwLnBkZgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABEKs103xvpgAAAAAAAAAAAAIABQAACSAAAAAAAAAAAAAAAAAAAAAHRnJpdHNjaAAAEAAIAADR53iyAAAAEQAIAADTfMQGAAAAAQAYARCuMwAobJYAKGyLAChnewAbXgcAAphcAAIAXU1hY2ludG9zaCBIRDpVc2VyczoAZ3JhbnRmOgBDbG91ZFN0YXRpb246AGZpcmxfbGlicmFyeToAZmlybF9saWJyYXJ5X2ZpbGVzOgBGcml0c2NoOgAxOTgwLnBkZgAADgASAAgAMQA5ADgAMAAuAHAAZABmAA8AGgAMAE0AYQBjAGkAbgB0AG8AcwBoACAASABEABIASlVzZXJzL2dyYW50Zi9DbG91ZFN0YXRpb24vZmlybF9saWJyYXJ5L2ZpcmxfbGlicmFyeV9maWxlcy9Gcml0c2NoLzE5ODAucGRmABMAAS8AABUAAgAN//8AAAAIAA0AGgAkAGoAAAAAAAACAQAAAAAAAAAFAAAAAAAAAAAAAAAAAAACOA==}, Booktitle = {Journal of the Atmospheric Sciences}, Da = {1980/08/01}, Date = {1980/08/01}, @@ -2182,18 +2274,18 @@ @article{fritsch_and_chappell_1980 Number = {8}, Pages = {1722--1733}, Publisher = {American Meteorological Society}, - Title = {Numerical Prediction of Convectively Driven Mesoscale Pressure Systems. Part I: Convective Parameterization}, + Title = {Numerical Prediction of Convectively Driven Mesoscale Pressure Systems. {P}art {I}: Convective Parameterization}, Ty = {JOUR}, Url = {http://dx.doi.org/10.1175/1520-0469(1980)037<1722:NPOCDM>2.0.CO;2}, Volume = {37}, Year = {1980}, Year1 = {1980}, - Bdsk-File-1 = {YnBsaXN0MDDSAQIDBFxyZWxhdGl2ZVBhdGhZYWxpYXNEYXRhXxBDLi4vLi4vQ2xvdWRTdGF0aW9uL2ZpcmxfbGlicmFyeS9maXJsX2xpYnJhcnlfZmlsZXMvRnJpdHNjaC8xOTgwLnBkZk8RAcoAAAAAAcoAAgAADE1hY2ludG9zaCBIRAAAAAAAAAAAAAAAAAAAANHnJFJIKwAAARCuMwgxOTgwLnBkZgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABEKs103xvpgAAAAAAAAAAAAIABQAACSAAAAAAAAAAAAAAAAAAAAAHRnJpdHNjaAAAEAAIAADR53iyAAAAEQAIAADTfMQGAAAAAQAYARCuMwAobJYAKGyLAChnewAbXgcAAphcAAIAXU1hY2ludG9zaCBIRDpVc2VyczoAZ3JhbnRmOgBDbG91ZFN0YXRpb246AGZpcmxfbGlicmFyeToAZmlybF9saWJyYXJ5X2ZpbGVzOgBGcml0c2NoOgAxOTgwLnBkZgAADgASAAgAMQA5ADgAMAAuAHAAZABmAA8AGgAMAE0AYQBjAGkAbgB0AG8AcwBoACAASABEABIASlVzZXJzL2dyYW50Zi9DbG91ZFN0YXRpb24vZmlybF9saWJyYXJ5L2ZpcmxfbGlicmFyeV9maWxlcy9Gcml0c2NoLzE5ODAucGRmABMAAS8AABUAAgAN//8AAAAIAA0AGgAkAGoAAAAAAAACAQAAAAAAAAAFAAAAAAAAAAAAAAAAAAACOA==}, Bdsk-Url-1 = {http://dx.doi.org/10.1175/1520-0469(1980)037%3C1722:NPOCDM%3E2.0.CO;2}} @article{bechtold_et_al_2008, - Abstract = {Advances in simulating atmospheric variability with the ECMWF model are presented that stem from revisions of the convection and diffusion parametrizations. The revisions concern in particular the introduction of a variable convective adjustment time-scale, a convective entrainment rate proportional to the environmental relative humidity, as well as free tropospheric diffusion coefficients for heat and momentum based on Monin--Obukhov functional dependencies.The forecasting system is evaluated against analyses and observations using high-resolution medium-range deterministic and ensemble forecasts, monthly and seasonal integrations, and decadal integrations with coupled atmosphere-ocean models. The results show a significantly higher and more realistic level of model activity in terms of the amplitude of tropical and extratropical mesoscale, synoptic and planetary perturbations. Importantly, with the higher variability and reduced bias not only the probabilistic scores are improved, but also the midlatitude deterministic scores in the short and medium ranges. Furthermore, for the first time the model is able to represent a realistic spectrum of convectively coupled equatorial Kelvin and Rossby waves, and maintains a realistic amplitude of the Madden--Julian oscillation (MJO) during monthly forecasts. However, the propagation speed of the MJO is slower than observed. The higher tropical tropospheric wave activity also results in better stratospheric temperatures and winds through the deposition of momentum.The partitioning between convective and resolved precipitation is unaffected by the model changes with roughly 62% of the total global precipitation being of the convective type. Finally, the changes in convection and diffusion parametrizations resulted in a larger spread of the ensemble forecasts, which allowed the amplitude of the initial perturbations in the ensemble prediction system to decrease by 30%. Copyright {\copyright} 2008 Royal Meteorological Society}, - Author = {Bechtold, Peter and K{\"o}hler, Martin and Jung, Thomas and Doblas-Reyes, Francisco and Leutbecher, Martin and Rodwell, Mark J. and Vitart, Frederic and Balsamo, Gianpaolo}, + Abstract = {Advances in simulating atmospheric variability with the {ECMWF} model are presented that stem from revisions of the convection and diffusion parametrizations. The revisions concern in particular the introduction of a variable convective adjustment time-scale, a convective entrainment rate proportional to the environmental relative humidity, as well as free tropospheric diffusion coefficients for heat and momentum based on Monin--Obukhov functional dependencies.The forecasting system is evaluated against analyses and observations using high-resolution medium-range deterministic and ensemble forecasts, monthly and seasonal integrations, and decadal integrations with coupled atmosphere-ocean models. The results show a significantly higher and more realistic level of model activity in terms of the amplitude of tropical and extratropical mesoscale, synoptic and planetary perturbations. Importantly, with the higher variability and reduced bias not only the probabilistic scores are improved, but also the midlatitude deterministic scores in the short and medium ranges. Furthermore, for the first time the model is able to represent a realistic spectrum of convectively coupled equatorial Kelvin and Rossby waves, and maintains a realistic amplitude of the Madden--Julian oscillation (MJO) during monthly forecasts. However, the propagation speed of the MJO is slower than observed. The higher tropical tropospheric wave activity also results in better stratospheric temperatures and winds through the deposition of momentum.The partitioning between convective and resolved precipitation is unaffected by the model changes with roughly 62% of the total global precipitation being of the convective type. Finally, the changes in convection and diffusion parametrizations resulted in a larger spread of the ensemble forecasts, which allowed the amplitude of the initial perturbations in the ensemble prediction system to decrease by 30%. Copyright {\copyright} 2008 Royal Meteorological Society}, + Author = {Bechtold, P. and K{\"o}hler, M. and Jung, T. and Doblas-Reyes, F. and Leutbecher, M. and Rodwell, M. J. and Vitart, F. and Balsamo, G.}, + Bdsk-File-1 = {YnBsaXN0MDDSAQIDBFxyZWxhdGl2ZVBhdGhZYWxpYXNEYXRhXxBELi4vLi4vQ2xvdWRTdGF0aW9uL2ZpcmxfbGlicmFyeS9maXJsX2xpYnJhcnlfZmlsZXMvQmVjaHRvbGQvMjAwOC5wZGZPEQHMAAAAAAHMAAIAAAxNYWNpbnRvc2ggSEQAAAAAAAAAAAAAAAAAAADR5yRSSCsAAAAobfkIMjAwOC5wZGYAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAARZce9OEjEwAAAAAAAAAAAACAAUAAAkgAAAAAAAAAAAAAAAAAAAACEJlY2h0b2xkABAACAAA0ed4sgAAABEACAAA04TgrAAAAAEAGAAobfkAKGyWAChsiwAoZ3sAG14HAAKYXAACAF5NYWNpbnRvc2ggSEQ6VXNlcnM6AGdyYW50ZjoAQ2xvdWRTdGF0aW9uOgBmaXJsX2xpYnJhcnk6AGZpcmxfbGlicmFyeV9maWxlczoAQmVjaHRvbGQ6ADIwMDgucGRmAA4AEgAIADIAMAAwADgALgBwAGQAZgAPABoADABNAGEAYwBpAG4AdABvAHMAaAAgAEgARAASAEtVc2Vycy9ncmFudGYvQ2xvdWRTdGF0aW9uL2ZpcmxfbGlicmFyeS9maXJsX2xpYnJhcnlfZmlsZXMvQmVjaHRvbGQvMjAwOC5wZGYAABMAAS8AABUAAgAN//8AAAAIAA0AGgAkAGsAAAAAAAACAQAAAAAAAAAFAAAAAAAAAAAAAAAAAAACOw==}, Date-Added = {2016-06-14 23:11:58 +0000}, Date-Modified = {2016-06-14 23:11:58 +0000}, Doi = {10.1002/qj.289}, @@ -2203,16 +2295,16 @@ @article{bechtold_et_al_2008 Number = {634}, Pages = {1337--1351}, Publisher = {John Wiley & Sons, Ltd.}, - Title = {Advances in simulating atmospheric variability with the ECMWF model: From synoptic to decadal time-scales}, + Title = {Advances in simulating atmospheric variability with the {ECMWF} model: From synoptic to decadal time-scales}, Url = {http://dx.doi.org/10.1002/qj.289}, Volume = {134}, Year = {2008}, - Bdsk-File-1 = {YnBsaXN0MDDSAQIDBFxyZWxhdGl2ZVBhdGhZYWxpYXNEYXRhXxBELi4vLi4vQ2xvdWRTdGF0aW9uL2ZpcmxfbGlicmFyeS9maXJsX2xpYnJhcnlfZmlsZXMvQmVjaHRvbGQvMjAwOC5wZGZPEQHMAAAAAAHMAAIAAAxNYWNpbnRvc2ggSEQAAAAAAAAAAAAAAAAAAADR5yRSSCsAAAAobfkIMjAwOC5wZGYAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAARZce9OEjEwAAAAAAAAAAAACAAUAAAkgAAAAAAAAAAAAAAAAAAAACEJlY2h0b2xkABAACAAA0ed4sgAAABEACAAA04TgrAAAAAEAGAAobfkAKGyWAChsiwAoZ3sAG14HAAKYXAACAF5NYWNpbnRvc2ggSEQ6VXNlcnM6AGdyYW50ZjoAQ2xvdWRTdGF0aW9uOgBmaXJsX2xpYnJhcnk6AGZpcmxfbGlicmFyeV9maWxlczoAQmVjaHRvbGQ6ADIwMDgucGRmAA4AEgAIADIAMAAwADgALgBwAGQAZgAPABoADABNAGEAYwBpAG4AdABvAHMAaAAgAEgARAASAEtVc2Vycy9ncmFudGYvQ2xvdWRTdGF0aW9uL2ZpcmxfbGlicmFyeS9maXJsX2xpYnJhcnlfZmlsZXMvQmVjaHRvbGQvMjAwOC5wZGYAABMAAS8AABUAAgAN//8AAAAIAA0AGgAkAGsAAAAAAAACAQAAAAAAAAAFAAAAAAAAAAAAAAAAAAACOw==}, Bdsk-Url-1 = {http://dx.doi.org/10.1002/qj.289}} @article{han_and_pan_2011, Annote = {doi: 10.1175/WAF-D-10-05038.1}, - Author = {Han, Jongil and Pan, Hua-Lu}, + Author = {Han, J. and Pan, H.-L.}, + Bdsk-File-1 = {YnBsaXN0MDDSAQIDBFxyZWxhdGl2ZVBhdGhZYWxpYXNEYXRhXxA/Li4vLi4vQ2xvdWRTdGF0aW9uL2ZpcmxfbGlicmFyeS9maXJsX2xpYnJhcnlfZmlsZXMvSGFuLzIwMTEucGRmTxEBvgAAAAABvgACAAAMTWFjaW50b3NoIEhEAAAAAAAAAAAAAAAAAAAA0eckUkgrAAAAWsT5CDIwMTEucGRmAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADC1cfTGvlvAAAAAAAAAAAAAgAFAAAJIAAAAAAAAAAAAAAAAAAAAANIYW4AABAACAAA0ed4sgAAABEACAAA0xtNzwAAAAEAGABaxPkAKGyWAChsiwAoZ3sAG14HAAKYXAACAFlNYWNpbnRvc2ggSEQ6VXNlcnM6AGdyYW50ZjoAQ2xvdWRTdGF0aW9uOgBmaXJsX2xpYnJhcnk6AGZpcmxfbGlicmFyeV9maWxlczoASGFuOgAyMDExLnBkZgAADgASAAgAMgAwADEAMQAuAHAAZABmAA8AGgAMAE0AYQBjAGkAbgB0AG8AcwBoACAASABEABIARlVzZXJzL2dyYW50Zi9DbG91ZFN0YXRpb24vZmlybF9saWJyYXJ5L2ZpcmxfbGlicmFyeV9maWxlcy9IYW4vMjAxMS5wZGYAEwABLwAAFQACAA3//wAAAAgADQAaACQAZgAAAAAAAAIBAAAAAAAAAAUAAAAAAAAAAAAAAAAAAAIo}, Booktitle = {Weather and Forecasting}, Da = {2011/08/01}, Date = {2011/08/01}, @@ -2227,28 +2319,28 @@ @article{han_and_pan_2011 Number = {4}, Pages = {520--533}, Publisher = {American Meteorological Society}, - Title = {Revision of Convection and Vertical Diffusion Schemes in the NCEP Global Forecast System}, + Title = {Revision of Convection and Vertical Diffusion Schemes in the {NCEP} {G}lobal {F}orecast {S}ystem}, Ty = {JOUR}, Url = {http://dx.doi.org/10.1175/WAF-D-10-05038.1}, Volume = {26}, Year = {2011}, Year1 = {2011}, - Bdsk-File-1 = {YnBsaXN0MDDSAQIDBFxyZWxhdGl2ZVBhdGhZYWxpYXNEYXRhXxA/Li4vLi4vQ2xvdWRTdGF0aW9uL2ZpcmxfbGlicmFyeS9maXJsX2xpYnJhcnlfZmlsZXMvSGFuLzIwMTEucGRmTxEBvgAAAAABvgACAAAMTWFjaW50b3NoIEhEAAAAAAAAAAAAAAAAAAAA0eckUkgrAAAAWsT5CDIwMTEucGRmAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADC1cfTGvlvAAAAAAAAAAAAAgAFAAAJIAAAAAAAAAAAAAAAAAAAAANIYW4AABAACAAA0ed4sgAAABEACAAA0xtNzwAAAAEAGABaxPkAKGyWAChsiwAoZ3sAG14HAAKYXAACAFlNYWNpbnRvc2ggSEQ6VXNlcnM6AGdyYW50ZjoAQ2xvdWRTdGF0aW9uOgBmaXJsX2xpYnJhcnk6AGZpcmxfbGlicmFyeV9maWxlczoASGFuOgAyMDExLnBkZgAADgASAAgAMgAwADEAMQAuAHAAZABmAA8AGgAMAE0AYQBjAGkAbgB0AG8AcwBoACAASABEABIARlVzZXJzL2dyYW50Zi9DbG91ZFN0YXRpb24vZmlybF9saWJyYXJ5L2ZpcmxfbGlicmFyeV9maWxlcy9IYW4vMjAxMS5wZGYAEwABLwAAFQACAA3//wAAAAgADQAaACQAZgAAAAAAAAIBAAAAAAAAAAUAAAAAAAAAAAAAAAAAAAIo}, Bdsk-Url-1 = {http://dx.doi.org/10.1175/WAF-D-10-05038.1}} @article{pan_and_wu_1995, - Author = {Pan, H. -L. and W.-S. Wu}, + Author = {Pan, H.-L. and W.-S. Wu}, + Bdsk-File-1 = {YnBsaXN0MDDSAQIDBFxyZWxhdGl2ZVBhdGhZYWxpYXNEYXRhXxA/Li4vLi4vQ2xvdWRTdGF0aW9uL2ZpcmxfbGlicmFyeS9maXJsX2xpYnJhcnlfZmlsZXMvUGFuLzE5OTUucGRmTxEBvgAAAAABvgACAAAMTWFjaW50b3NoIEhEAAAAAAAAAAAAAAAAAAAA0eckUkgrAAAAwtTNCDE5OTUucGRmAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADCtU/TGvMJAAAAAAAAAAAAAgAFAAAJIAAAAAAAAAAAAAAAAAAAAANQYW4AABAACAAA0ed4sgAAABEACAAA0xtHaQAAAAEAGADC1M0AKGyWAChsiwAoZ3sAG14HAAKYXAACAFlNYWNpbnRvc2ggSEQ6VXNlcnM6AGdyYW50ZjoAQ2xvdWRTdGF0aW9uOgBmaXJsX2xpYnJhcnk6AGZpcmxfbGlicmFyeV9maWxlczoAUGFuOgAxOTk1LnBkZgAADgASAAgAMQA5ADkANQAuAHAAZABmAA8AGgAMAE0AYQBjAGkAbgB0AG8AcwBoACAASABEABIARlVzZXJzL2dyYW50Zi9DbG91ZFN0YXRpb24vZmlybF9saWJyYXJ5L2ZpcmxfbGlicmFyeV9maWxlcy9QYW4vMTk5NS5wZGYAEwABLwAAFQACAA3//wAAAAgADQAaACQAZgAAAAAAAAIBAAAAAAAAAAUAAAAAAAAAAAAAAAAAAAIo}, Date-Added = {2016-06-14 23:06:41 +0000}, Date-Modified = {2016-06-14 23:06:41 +0000}, Journal = {NMC Office Note, No. 409}, Pages = {40pp}, - Title = {Implementing a Mass Flux Convection Parameterization Package for the NMC Medium-Range Forecast Model}, - Year = {1995}, - Bdsk-File-1 = {YnBsaXN0MDDSAQIDBFxyZWxhdGl2ZVBhdGhZYWxpYXNEYXRhXxA/Li4vLi4vQ2xvdWRTdGF0aW9uL2ZpcmxfbGlicmFyeS9maXJsX2xpYnJhcnlfZmlsZXMvUGFuLzE5OTUucGRmTxEBvgAAAAABvgACAAAMTWFjaW50b3NoIEhEAAAAAAAAAAAAAAAAAAAA0eckUkgrAAAAwtTNCDE5OTUucGRmAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADCtU/TGvMJAAAAAAAAAAAAAgAFAAAJIAAAAAAAAAAAAAAAAAAAAANQYW4AABAACAAA0ed4sgAAABEACAAA0xtHaQAAAAEAGADC1M0AKGyWAChsiwAoZ3sAG14HAAKYXAACAFlNYWNpbnRvc2ggSEQ6VXNlcnM6AGdyYW50ZjoAQ2xvdWRTdGF0aW9uOgBmaXJsX2xpYnJhcnk6AGZpcmxfbGlicmFyeV9maWxlczoAUGFuOgAxOTk1LnBkZgAADgASAAgAMQA5ADkANQAuAHAAZABmAA8AGgAMAE0AYQBjAGkAbgB0AG8AcwBoACAASABEABIARlVzZXJzL2dyYW50Zi9DbG91ZFN0YXRpb24vZmlybF9saWJyYXJ5L2ZpcmxfbGlicmFyeV9maWxlcy9QYW4vMTk5NS5wZGYAEwABLwAAFQACAA3//wAAAAgADQAaACQAZgAAAAAAAAIBAAAAAAAAAAUAAAAAAAAAAAAAAAAAAAIo}} + Title = {Implementing a Mass Flux Convection Parameterization Package for the {NMC} Medium-Range Forecast Model}, + Year = {1995}} @article{grell_1993, Annote = {doi: 10.1175/1520-0493(1993)121<0764:PEOAUB>2.0.CO;2}, - Author = {Grell, Georg A.}, + Author = {Grell, G. A.}, + Bdsk-File-1 = {YnBsaXN0MDDSAQIDBFxyZWxhdGl2ZVBhdGhZYWxpYXNEYXRhXxBBLi4vLi4vQ2xvdWRTdGF0aW9uL2ZpcmxfbGlicmFyeS9maXJsX2xpYnJhcnlfZmlsZXMvR3JlbGwvMTk5My5wZGZPEQHEAAAAAAHEAAIAAAxNYWNpbnRvc2ggSEQAAAAAAAAAAAAAAAAAAADR5yRSSCsAAAAoie0IMTk5My5wZGYAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMK4dtMa9LMAAAAAAAAAAAACAAUAAAkgAAAAAAAAAAAAAAAAAAAABUdyZWxsAAAQAAgAANHneLIAAAARAAgAANMbSRMAAAABABgAKIntAChslgAobIsAKGd7ABteBwACmFwAAgBbTWFjaW50b3NoIEhEOlVzZXJzOgBncmFudGY6AENsb3VkU3RhdGlvbjoAZmlybF9saWJyYXJ5OgBmaXJsX2xpYnJhcnlfZmlsZXM6AEdyZWxsOgAxOTkzLnBkZgAADgASAAgAMQA5ADkAMwAuAHAAZABmAA8AGgAMAE0AYQBjAGkAbgB0AG8AcwBoACAASABEABIASFVzZXJzL2dyYW50Zi9DbG91ZFN0YXRpb24vZmlybF9saWJyYXJ5L2ZpcmxfbGlicmFyeV9maWxlcy9HcmVsbC8xOTkzLnBkZgATAAEvAAAVAAIADf//AAAACAANABoAJABoAAAAAAAAAgEAAAAAAAAABQAAAAAAAAAAAAAAAAAAAjA=}, Booktitle = {Monthly Weather Review}, Da = {1993/03/01}, Date = {1993/03/01}, @@ -2269,11 +2361,11 @@ @article{grell_1993 Volume = {121}, Year = {1993}, Year1 = {1993}, - Bdsk-File-1 = {YnBsaXN0MDDSAQIDBFxyZWxhdGl2ZVBhdGhZYWxpYXNEYXRhXxBBLi4vLi4vQ2xvdWRTdGF0aW9uL2ZpcmxfbGlicmFyeS9maXJsX2xpYnJhcnlfZmlsZXMvR3JlbGwvMTk5My5wZGZPEQHEAAAAAAHEAAIAAAxNYWNpbnRvc2ggSEQAAAAAAAAAAAAAAAAAAADR5yRSSCsAAAAoie0IMTk5My5wZGYAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMK4dtMa9LMAAAAAAAAAAAACAAUAAAkgAAAAAAAAAAAAAAAAAAAABUdyZWxsAAAQAAgAANHneLIAAAARAAgAANMbSRMAAAABABgAKIntAChslgAobIsAKGd7ABteBwACmFwAAgBbTWFjaW50b3NoIEhEOlVzZXJzOgBncmFudGY6AENsb3VkU3RhdGlvbjoAZmlybF9saWJyYXJ5OgBmaXJsX2xpYnJhcnlfZmlsZXM6AEdyZWxsOgAxOTkzLnBkZgAADgASAAgAMQA5ADkAMwAuAHAAZABmAA8AGgAMAE0AYQBjAGkAbgB0AG8AcwBoACAASABEABIASFVzZXJzL2dyYW50Zi9DbG91ZFN0YXRpb24vZmlybF9saWJyYXJ5L2ZpcmxfbGlicmFyeV9maWxlcy9HcmVsbC8xOTkzLnBkZgATAAEvAAAVAAIADf//AAAACAANABoAJABoAAAAAAAAAgEAAAAAAAAABQAAAAAAAAAAAAAAAAAAAjA=}, Bdsk-Url-1 = {http://dx.doi.org/10.1175/1520-0493(1993)121%3C0764:PEOAUB%3E2.0.CO;2}} @article{arakawa_and_schubert_1974, - Author = {Arakawa, A and Schubert, WH}, + Author = {Arakawa, A. and Schubert, W. H.}, + Bdsk-File-1 = {YnBsaXN0MDDSAQIDBFxyZWxhdGl2ZVBhdGhZYWxpYXNEYXRhXxBDLi4vLi4vQ2xvdWRTdGF0aW9uL2ZpcmxfbGlicmFyeS9maXJsX2xpYnJhcnlfZmlsZXMvQXJha2F3YS8xOTc0LnBkZk8RAcoAAAAAAcoAAgAADE1hY2ludG9zaCBIRAAAAAAAAAAAAAAAAAAAANHnJFJIKwAAAChtVQgxOTc0LnBkZgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKG1ctM8h9AAAAAAAAAAAAAIABQAACSAAAAAAAAAAAAAAAAAAAAAHQXJha2F3YQAAEAAIAADR53iyAAAAEQAIAAC0z4RkAAAAAQAYAChtVQAobJYAKGyLAChnewAbXgcAAphcAAIAXU1hY2ludG9zaCBIRDpVc2VyczoAZ3JhbnRmOgBDbG91ZFN0YXRpb246AGZpcmxfbGlicmFyeToAZmlybF9saWJyYXJ5X2ZpbGVzOgBBcmFrYXdhOgAxOTc0LnBkZgAADgASAAgAMQA5ADcANAAuAHAAZABmAA8AGgAMAE0AYQBjAGkAbgB0AG8AcwBoACAASABEABIASlVzZXJzL2dyYW50Zi9DbG91ZFN0YXRpb24vZmlybF9saWJyYXJ5L2ZpcmxfbGlicmFyeV9maWxlcy9BcmFrYXdhLzE5NzQucGRmABMAAS8AABUAAgAN//8AAAAIAA0AGgAkAGoAAAAAAAACAQAAAAAAAAAFAAAAAAAAAAAAAAAAAAACOA==}, Date-Added = {2016-06-14 23:04:30 +0000}, Date-Modified = {2018-07-18 19:00:17 +0000}, Isi = {A1974S778800004}, @@ -2283,10 +2375,9 @@ @article{arakawa_and_schubert_1974 Journal = {Journal of the Atmospheric Sciences}, Pages = {674--701}, Times-Cited = {1300}, - Title = {Interaction of a cumulus cloud ensemble with the large-scale environment, Part I}, + Title = {Interaction of a cumulus cloud ensemble with the large-scale environment, {P}art {I}}, Volume = {31}, Year = {1974}, - Bdsk-File-1 = {YnBsaXN0MDDSAQIDBFxyZWxhdGl2ZVBhdGhZYWxpYXNEYXRhXxBDLi4vLi4vQ2xvdWRTdGF0aW9uL2ZpcmxfbGlicmFyeS9maXJsX2xpYnJhcnlfZmlsZXMvQXJha2F3YS8xOTc0LnBkZk8RAcoAAAAAAcoAAgAADE1hY2ludG9zaCBIRAAAAAAAAAAAAAAAAAAAANHnJFJIKwAAAChtVQgxOTc0LnBkZgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKG1ctM8h9AAAAAAAAAAAAAIABQAACSAAAAAAAAAAAAAAAAAAAAAHQXJha2F3YQAAEAAIAADR53iyAAAAEQAIAAC0z4RkAAAAAQAYAChtVQAobJYAKGyLAChnewAbXgcAAphcAAIAXU1hY2ludG9zaCBIRDpVc2VyczoAZ3JhbnRmOgBDbG91ZFN0YXRpb246AGZpcmxfbGlicmFyeToAZmlybF9saWJyYXJ5X2ZpbGVzOgBBcmFrYXdhOgAxOTc0LnBkZgAADgASAAgAMQA5ADcANAAuAHAAZABmAA8AGgAMAE0AYQBjAGkAbgB0AG8AcwBoACAASABEABIASlVzZXJzL2dyYW50Zi9DbG91ZFN0YXRpb24vZmlybF9saWJyYXJ5L2ZpcmxfbGlicmFyeV9maWxlcy9BcmFrYXdhLzE5NzQucGRmABMAAS8AABUAAgAN//8AAAAIAA0AGgAkAGoAAAAAAAACAQAAAAAAAAAFAAAAAAAAAAAAAAAAAAACOA==}, Bdsk-Url-1 = {http://ws.isiknowledge.com/cps/openurl/service?url_ver=Z39.88-2004&rft_id=info:ut/A1974S778800004}} @article{harshvardhan_et_al_1989, @@ -2317,7 +2408,7 @@ @article{mccormack_et_al_2006 Date-Modified = {2016-06-06 17:37:45 +0000}, Journal = {Atmos. Chem. Phys.}, Pages = {4943-4972}, - Title = {CHEM2D-OPP: A new linearized gas-phase ozone photochemistry parameterization for high-altitude NWP and climate models}, + Title = {{CHEM2D-OPP}: A new linearized gas-phase ozone photochemistry parameterization for high-altitude {NWP} and climate models}, Volume = {6}, Year = {2006}} @@ -2327,7 +2418,7 @@ @article{kim_1996 Date-Modified = {2016-06-01 20:21:44 +0000}, Journal = {J. Climate}, Pages = {2698-2717}, - Title = {Representation of subgrid-scale orographic effects in a general circulation model. Part I: Impact on the dynamics of simulated January climate}, + Title = {Representation of subgrid-scale orographic effects in a general circulation model. {P}art {I}: Impact on the dynamics of simulated January climate}, Volume = {9}, Year = {1996}} @@ -2411,7 +2502,7 @@ @inbook{sundqvist_1988 Date-Modified = {2016-05-24 23:03:22 +0000}, Pages = {433-461}, Publisher = {M. E. Schlesinger, Ed., Reidel}, - Title = {Physically-based modeling and simulation of climate and climatic changes, Part I}, + Title = {Physically-based modeling and simulation of climate and climatic changes, {P}art {I}}, Year = {1988}} @misc{Rogers_1979, @@ -2445,22 +2536,22 @@ @booklet{kessler_1969 Year = {1969}} @article{rutledge_and_hobbs_1983, - Author = {S.A. Rutledge and P.V. Hobbs}, + Author = {S. A. Rutledge and P. V. Hobbs}, Date-Added = {2016-05-24 04:07:48 +0000}, Date-Modified = {2016-05-24 04:10:43 +0000}, Journal = {J. Atmos. Sci.}, Pages = {1185-1206}, - Title = {The mesoscale and microscale structure and organization of clouds and precipitation in mid-latitude cyclones. VIII: A model for the 'seeder-feeder' process in warm-frontal rainbands}, + Title = {The mesoscale and microscale structure and organization of clouds and precipitation in mid-latitude cyclones. {VIII}: A model for the 'seeder-feeder' process in warm-frontal rainbands}, Volume = {40}, Year = {1983}} @article{zhao_and_carr_1997, - Author = {Q. Zhao and F.H. Carr}, + Author = {Q. Zhao and F. H. Carr}, Date-Added = {2016-05-24 03:57:40 +0000}, Date-Modified = {2016-05-24 04:02:27 +0000}, Journal = {Monthly Weather Review}, Pages = {1931-1953}, - Title = {A prognostic cloud scheme for operational NWP models}, + Title = {A prognostic cloud scheme for operational {NWP} models}, Volume = {125}, Year = {1997}} @@ -2492,7 +2583,7 @@ @article{chun_et_al_2004 Journal = {J. Climate}, Keywords = {convective gwd}, Pages = {3530-3547}, - Title = {Impact of a convectively forced gravity wave drag parameterization in NCAR CCM3}, + Title = {Impact of a convectively forced gravity wave drag parameterization in {NCAR CCM3}}, Volume = {17}, Year = {2004}} @@ -2508,7 +2599,7 @@ @article{chun_and_baik_1998 Year = {1998}} @article{akmaev_1991, - Author = {R.A. Akmaev}, + Author = {R. A. Akmaev}, Date-Added = {2016-05-20 20:41:25 +0000}, Date-Modified = {2016-05-20 20:44:22 +0000}, Journal = {Monthly Weather Review}, @@ -2519,7 +2610,8 @@ @article{akmaev_1991 @article{siebesma_et_al_2007, Abstract = {A better conceptual understanding and more realistic parameterizations of convective boundary layers in climate and weather prediction models have been major challenges in meteorological research. In particular, parameterizations of the dry convective boundary layer, in spite of the absence of water phase-changes and its consequent simplicity as compared to moist convection, typically suffer from problems in attempting to represent realistically the boundary layer growth and what is often referred to as countergradient fluxes. The eddy-diffusivity (ED) approach has been relatively successful in representing some characteristics of neutral boundary layers and surface layers in general. The mass-flux (MF) approach, on the other hand, has been used for the parameterization of shallow and deep moist convection. In this paper, a new approach that relies on a combination of the ED and MF parameterizations (EDMF) is proposed for the dry convective boundary layer. It is shown that the EDMF approach follows naturally from a decomposition of the turbulent fluxes into 1) a part that includes strong organized updrafts, and 2) a remaining turbulent field. At the basis of the EDMF approach is the concept that nonlocal subgrid transport due to the strong updrafts is taken into account by the MF approach, while the remaining transport is taken into account by an ED closure. Large-eddy simulation (LES) results of the dry convective boundary layer are used to support the theoretical framework of this new approach and to determine the parameters of the EDMF model. The performance of the new formulation is evaluated against LES results, and it is shown that the EDMF closure is able to reproduce the main properties of dry convective boundary layers in a realistic manner. Furthermore, it will be shown that this approach has strong advantages over the more traditional countergradient approach, especially in the entrainment layer. As a result, this EDMF approach opens the way to parameterize the clear and cumulus-topped boundary layer in a simple and unified way.}, - Author = {Siebesma, A. Pier and Soares, Pedro M. M. and Teixeira, Joao}, + Author = {Siebesma, A. P. and Soares, P. M. M. and Teixeira, J.}, + Bdsk-File-1 = {YnBsaXN0MDDSAQIDBFxyZWxhdGl2ZVBhdGhZYWxpYXNEYXRhXxBELi4vLi4vQ2xvdWRTdGF0aW9uL2ZpcmxfbGlicmFyeS9maXJsX2xpYnJhcnlfZmlsZXMvU2llYmVzbWEvMjAwNy5wZGZPEQHMAAAAAAHMAAIAAAxNYWNpbnRvc2ggSEQAAAAAAAAAAAAAAAAAAADR5yRSSCsAAAAqYEwIMjAwNy5wZGYAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACphyMc7+4hQREYgQ0FSTwACAAUAAAkgAAAAAAAAAAAAAAAAAAAACFNpZWJlc21hABAACAAA0ed4sgAAABEACAAAxzxd+AAAAAEAGAAqYEwAKGyWAChsiwAoZ3sAG14HAAKYXAACAF5NYWNpbnRvc2ggSEQ6VXNlcnM6AGdyYW50ZjoAQ2xvdWRTdGF0aW9uOgBmaXJsX2xpYnJhcnk6AGZpcmxfbGlicmFyeV9maWxlczoAU2llYmVzbWE6ADIwMDcucGRmAA4AEgAIADIAMAAwADcALgBwAGQAZgAPABoADABNAGEAYwBpAG4AdABvAHMAaAAgAEgARAASAEtVc2Vycy9ncmFudGYvQ2xvdWRTdGF0aW9uL2ZpcmxfbGlicmFyeS9maXJsX2xpYnJhcnlfZmlsZXMvU2llYmVzbWEvMjAwNy5wZGYAABMAAS8AABUAAgAN//8AAAAIAA0AGgAkAGsAAAAAAAACAQAAAAAAAAAFAAAAAAAAAAAAAAAAAAACOw==}, Date-Added = {2016-05-20 17:17:49 +0000}, Date-Modified = {2016-05-20 17:17:49 +0000}, Doi = {DOI 10.1175/JAS3888.1}, @@ -2533,12 +2625,12 @@ @article{siebesma_et_al_2007 Title = {A combined eddy-diffusivity mass-flux approach for the convective boundary layer}, Volume = {64}, Year = {2007}, - Bdsk-File-1 = {YnBsaXN0MDDSAQIDBFxyZWxhdGl2ZVBhdGhZYWxpYXNEYXRhXxBELi4vLi4vQ2xvdWRTdGF0aW9uL2ZpcmxfbGlicmFyeS9maXJsX2xpYnJhcnlfZmlsZXMvU2llYmVzbWEvMjAwNy5wZGZPEQHMAAAAAAHMAAIAAAxNYWNpbnRvc2ggSEQAAAAAAAAAAAAAAAAAAADR5yRSSCsAAAAqYEwIMjAwNy5wZGYAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACphyMc7+4hQREYgQ0FSTwACAAUAAAkgAAAAAAAAAAAAAAAAAAAACFNpZWJlc21hABAACAAA0ed4sgAAABEACAAAxzxd+AAAAAEAGAAqYEwAKGyWAChsiwAoZ3sAG14HAAKYXAACAF5NYWNpbnRvc2ggSEQ6VXNlcnM6AGdyYW50ZjoAQ2xvdWRTdGF0aW9uOgBmaXJsX2xpYnJhcnk6AGZpcmxfbGlicmFyeV9maWxlczoAU2llYmVzbWE6ADIwMDcucGRmAA4AEgAIADIAMAAwADcALgBwAGQAZgAPABoADABNAGEAYwBpAG4AdABvAHMAaAAgAEgARAASAEtVc2Vycy9ncmFudGYvQ2xvdWRTdGF0aW9uL2ZpcmxfbGlicmFyeS9maXJsX2xpYnJhcnlfZmlsZXMvU2llYmVzbWEvMjAwNy5wZGYAABMAAS8AABUAAgAN//8AAAAIAA0AGgAkAGsAAAAAAAACAQAAAAAAAAAFAAAAAAAAAAAAAAAAAAACOw==}, Bdsk-Url-1 = {http://ws.isiknowledge.com/cps/openurl/service?url_ver=Z39.88-2004&rft_id=info:ut/000245742600011}} @article{soares_et_al_2004, Abstract = {Recently, a new consistent way of parametrizing simultaneously local and non-local turbulent transport for the convective atmospheric boundary layer has been proposed and tested for the clear boundary layer. This approach assumes that in the convective boundary layer the subgrid-scale fluxes result from two different mixing scales: small eddies, that are parametrized by an eddy-diffusivity approach, and thermals, which are represented by a mass-flux contribution. Since the interaction between the cloud layer and the underlying sub-cloud layer predominantly takes place through strong updraughts, this approach offers an interesting avenue of establishing a unified description of the turbulent transport in the cumulus-topped boundary layer. This paper explores the possibility of such a new approach for the cumulus-topped boundary layer. In the sub-cloud and cloud layers, the mass-flux term represents the effect of strong updraughts. These are modelled by a simple entraining parcel, which determines the mean properties of the strong updraughts, the boundary-layer height, the lifting condensation level and cloud top. The residual smaller-scale turbulent transport is parametrized with an eddy-diffusivity approach that uses a turbulent kinetic energy closure. The new scheme is implemented and tested in the research model MesoNH. Copyright {\copyright} 2004 Royal Meteorological Society}, Author = {Soares, P. M. M. and Miranda, P. M. A. and Siebesma, A. P. and Teixeira, J.}, + Bdsk-File-1 = {YnBsaXN0MDDSAQIDBFxyZWxhdGl2ZVBhdGhZYWxpYXNEYXRhXxBCLi4vLi4vQ2xvdWRTdGF0aW9uL2ZpcmxfbGlicmFyeS9maXJsX2xpYnJhcnlfZmlsZXMvU29hcmVzLzIwMDQucGRmTxEBxgAAAAABxgACAAAMTWFjaW50b3NoIEhEAAAAAAAAAAAAAAAAAAAA0eckUkgrAAAAWIC2CDIwMDQucGRmAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABYf6DSsqNwAAAAAAAAAAAAAgAFAAAJIAAAAAAAAAAAAAAAAAAAAAZTb2FyZXMAEAAIAADR53iyAAAAEQAIAADSswXgAAAAAQAYAFiAtgAobJYAKGyLAChnewAbXgcAAphcAAIAXE1hY2ludG9zaCBIRDpVc2VyczoAZ3JhbnRmOgBDbG91ZFN0YXRpb246AGZpcmxfbGlicmFyeToAZmlybF9saWJyYXJ5X2ZpbGVzOgBTb2FyZXM6ADIwMDQucGRmAA4AEgAIADIAMAAwADQALgBwAGQAZgAPABoADABNAGEAYwBpAG4AdABvAHMAaAAgAEgARAASAElVc2Vycy9ncmFudGYvQ2xvdWRTdGF0aW9uL2ZpcmxfbGlicmFyeS9maXJsX2xpYnJhcnlfZmlsZXMvU29hcmVzLzIwMDQucGRmAAATAAEvAAAVAAIADf//AAAACAANABoAJABpAAAAAAAAAgEAAAAAAAAABQAAAAAAAAAAAAAAAAAAAjM=}, Date-Added = {2016-05-20 17:17:49 +0000}, Date-Modified = {2016-05-20 17:17:49 +0000}, Doi = {10.1256/qj.03.223}, @@ -2552,11 +2644,11 @@ @article{soares_et_al_2004 Url = {http://dx.doi.org/10.1256/qj.03.223}, Volume = {130}, Year = {2004}, - Bdsk-File-1 = {YnBsaXN0MDDSAQIDBFxyZWxhdGl2ZVBhdGhZYWxpYXNEYXRhXxBCLi4vLi4vQ2xvdWRTdGF0aW9uL2ZpcmxfbGlicmFyeS9maXJsX2xpYnJhcnlfZmlsZXMvU29hcmVzLzIwMDQucGRmTxEBxgAAAAABxgACAAAMTWFjaW50b3NoIEhEAAAAAAAAAAAAAAAAAAAA0eckUkgrAAAAWIC2CDIwMDQucGRmAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABYf6DSsqNwAAAAAAAAAAAAAgAFAAAJIAAAAAAAAAAAAAAAAAAAAAZTb2FyZXMAEAAIAADR53iyAAAAEQAIAADSswXgAAAAAQAYAFiAtgAobJYAKGyLAChnewAbXgcAAphcAAIAXE1hY2ludG9zaCBIRDpVc2VyczoAZ3JhbnRmOgBDbG91ZFN0YXRpb246AGZpcmxfbGlicmFyeToAZmlybF9saWJyYXJ5X2ZpbGVzOgBTb2FyZXM6ADIwMDQucGRmAA4AEgAIADIAMAAwADQALgBwAGQAZgAPABoADABNAGEAYwBpAG4AdABvAHMAaAAgAEgARAASAElVc2Vycy9ncmFudGYvQ2xvdWRTdGF0aW9uL2ZpcmxfbGlicmFyeS9maXJsX2xpYnJhcnlfZmlsZXMvU29hcmVzLzIwMDQucGRmAAATAAEvAAAVAAIADf//AAAACAANABoAJABpAAAAAAAAAgEAAAAAAAAABQAAAAAAAAAAAAAAAAAAAjM=}, Bdsk-Url-1 = {http://dx.doi.org/10.1256/qj.03.223}} @article{troen_and_mahrt_1986, - Author = {Troen, IB and Mahrt, L.}, + Author = {Troen, I. B. and Mahrt, L.}, + Bdsk-File-1 = {YnBsaXN0MDDSAQIDBFxyZWxhdGl2ZVBhdGhZYWxpYXNEYXRhXxBBLi4vLi4vQ2xvdWRTdGF0aW9uL2ZpcmxfbGlicmFyeS9maXJsX2xpYnJhcnlfZmlsZXMvVHJvZW4vMTk4Ni5wZGZPEQHEAAAAAAHEAAIAAAxNYWNpbnRvc2ggSEQAAAAAAAAAAAAAAAAAAADR5yRSSCsAAABNeegIMTk4Ni5wZGYAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAE13kNKUWwUAAAAAAAAAAAACAAUAAAkgAAAAAAAAAAAAAAAAAAAABVRyb2VuAAAQAAgAANHneLIAAAARAAgAANKUvXUAAAABABgATXnoAChslgAobIsAKGd7ABteBwACmFwAAgBbTWFjaW50b3NoIEhEOlVzZXJzOgBncmFudGY6AENsb3VkU3RhdGlvbjoAZmlybF9saWJyYXJ5OgBmaXJsX2xpYnJhcnlfZmlsZXM6AFRyb2VuOgAxOTg2LnBkZgAADgASAAgAMQA5ADgANgAuAHAAZABmAA8AGgAMAE0AYQBjAGkAbgB0AG8AcwBoACAASABEABIASFVzZXJzL2dyYW50Zi9DbG91ZFN0YXRpb24vZmlybF9saWJyYXJ5L2ZpcmxfbGlicmFyeV9maWxlcy9Ucm9lbi8xOTg2LnBkZgATAAEvAAAVAAIADf//AAAACAANABoAJABoAAAAAAAAAgEAAAAAAAAABQAAAAAAAAAAAAAAAAAAAjA=}, Date-Added = {2016-05-20 17:17:49 +0000}, Date-Modified = {2016-05-20 17:17:49 +0000}, Doi = {10.1007/BF00122760}, @@ -2570,13 +2662,13 @@ @article{troen_and_mahrt_1986 Url = {http://dx.doi.org/10.1007/BF00122760}, Volume = {37}, Year = {1986}, - Bdsk-File-1 = {YnBsaXN0MDDSAQIDBFxyZWxhdGl2ZVBhdGhZYWxpYXNEYXRhXxBBLi4vLi4vQ2xvdWRTdGF0aW9uL2ZpcmxfbGlicmFyeS9maXJsX2xpYnJhcnlfZmlsZXMvVHJvZW4vMTk4Ni5wZGZPEQHEAAAAAAHEAAIAAAxNYWNpbnRvc2ggSEQAAAAAAAAAAAAAAAAAAADR5yRSSCsAAABNeegIMTk4Ni5wZGYAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAE13kNKUWwUAAAAAAAAAAAACAAUAAAkgAAAAAAAAAAAAAAAAAAAABVRyb2VuAAAQAAgAANHneLIAAAARAAgAANKUvXUAAAABABgATXnoAChslgAobIsAKGd7ABteBwACmFwAAgBbTWFjaW50b3NoIEhEOlVzZXJzOgBncmFudGY6AENsb3VkU3RhdGlvbjoAZmlybF9saWJyYXJ5OgBmaXJsX2xpYnJhcnlfZmlsZXM6AFRyb2VuOgAxOTg2LnBkZgAADgASAAgAMQA5ADgANgAuAHAAZABmAA8AGgAMAE0AYQBjAGkAbgB0AG8AcwBoACAASABEABIASFVzZXJzL2dyYW50Zi9DbG91ZFN0YXRpb24vZmlybF9saWJyYXJ5L2ZpcmxfbGlicmFyeV9maWxlcy9Ucm9lbi8xOTg2LnBkZgATAAEvAAAVAAIADf//AAAACAANABoAJABoAAAAAAAAAgEAAAAAAAAABQAAAAAAAAAAAAAAAAAAAjA=}, Bdsk-Url-1 = {http://dx.doi.org/10.1007/BF00122760}} @article{macvean_and_mason_1990, Abstract = {Abstract In a recent paper, Kuo and Schubert demonstrated the lack of observational support for the relevance of the criterion for cloud-top entrainment instability proposed by Randall and by Deardorff. Here we derive a new criterion, based on a model of the instability as resulting from the energy released close to cloud top, by Mixing between saturated boundary-layer air and unsaturated air from above the capping inversion. The condition is derived by considering the net conversion from potential to kinetic energy in a system consisting of two layers of fluid straddling cloud-top, when a small amount of mixing occurs between these layers. This contrasts with previous analyses, which only considered the change in buoyancy of the cloud layer when unsaturated air is mixed into it. In its most general form, this new criterion depends on the ratio of the depths of the layers involved in the mixing. It is argued that, for a self-sustaining instability, there must be a net release of kinetic energy on the same depth and time scales as the entrainment process itself. There are two plausible ways in which this requirement may be satisfied. Either one takes the depths of the layers involved in the mixing to each be comparable to the vertical scale of the entrainment process, which is typically of order tens of meters or less, or alternatively, one must allow for the efficiency with which energy released by mixing through a much deeper lower layer becomes available to initiate further entrainment. In both cases the same criterion for instability results. This criterion is much more restrictive than that proposed by Randall and by Deardorff; furthermore, the observational data is then consistent with the predictions of the current theory. Further analysis provides estimates of the turbulent fluxes associated with cloud-top entrainment instability. This analysis effectively constitutes an energetically consistent turbulence closure for models of boundary layers with cloud. The implications for such numerical models are discussed. Comparisons are also made with other possible criteria for cloud-top entrainment instability which have recently been suggested.}, Annote = {doi: 10.1175/1520-0469(1990)047<1012:CTEITS>2.0.CO;2}, Author = {MacVean, M. K. and Mason, P. J.}, + Bdsk-File-1 = {YnBsaXN0MDDSAQIDBFxyZWxhdGl2ZVBhdGhZYWxpYXNEYXRhXxBDLi4vLi4vQ2xvdWRTdGF0aW9uL2ZpcmxfbGlicmFyeS9maXJsX2xpYnJhcnlfZmlsZXMvTWFjVmVhbi8xOTkwLnBkZk8RAcoAAAAAAcoAAgAADE1hY2ludG9zaCBIRAAAAAAAAAAAAAAAAAAAANHnJFJIKwAAAFx8zwgxOTkwLnBkZgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAXHyn0rkkRQAAAAAAAAAAAAIABQAACSAAAAAAAAAAAAAAAAAAAAAHTWFjVmVhbgAAEAAIAADR53iyAAAAEQAIAADSuYa1AAAAAQAYAFx8zwAobJYAKGyLAChnewAbXgcAAphcAAIAXU1hY2ludG9zaCBIRDpVc2VyczoAZ3JhbnRmOgBDbG91ZFN0YXRpb246AGZpcmxfbGlicmFyeToAZmlybF9saWJyYXJ5X2ZpbGVzOgBNYWNWZWFuOgAxOTkwLnBkZgAADgASAAgAMQA5ADkAMAAuAHAAZABmAA8AGgAMAE0AYQBjAGkAbgB0AG8AcwBoACAASABEABIASlVzZXJzL2dyYW50Zi9DbG91ZFN0YXRpb24vZmlybF9saWJyYXJ5L2ZpcmxfbGlicmFyeV9maWxlcy9NYWNWZWFuLzE5OTAucGRmABMAAS8AABUAAgAN//8AAAAIAA0AGgAkAGoAAAAAAAACAQAAAAAAAAAFAAAAAAAAAAAAAAAAAAACOA==}, Booktitle = {Journal of the Atmospheric Sciences}, Da = {1990/04/01}, Date-Added = {2016-05-20 17:16:05 +0000}, @@ -2595,11 +2687,11 @@ @article{macvean_and_mason_1990 Url = {http://dx.doi.org/10.1175/1520-0469(1990)047<1012:CTEITS>2.0.CO;2}, Volume = {47}, Year = {1990}, - Bdsk-File-1 = {YnBsaXN0MDDSAQIDBFxyZWxhdGl2ZVBhdGhZYWxpYXNEYXRhXxBDLi4vLi4vQ2xvdWRTdGF0aW9uL2ZpcmxfbGlicmFyeS9maXJsX2xpYnJhcnlfZmlsZXMvTWFjVmVhbi8xOTkwLnBkZk8RAcoAAAAAAcoAAgAADE1hY2ludG9zaCBIRAAAAAAAAAAAAAAAAAAAANHnJFJIKwAAAFx8zwgxOTkwLnBkZgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAXHyn0rkkRQAAAAAAAAAAAAIABQAACSAAAAAAAAAAAAAAAAAAAAAHTWFjVmVhbgAAEAAIAADR53iyAAAAEQAIAADSuYa1AAAAAQAYAFx8zwAobJYAKGyLAChnewAbXgcAAphcAAIAXU1hY2ludG9zaCBIRDpVc2VyczoAZ3JhbnRmOgBDbG91ZFN0YXRpb246AGZpcmxfbGlicmFyeToAZmlybF9saWJyYXJ5X2ZpbGVzOgBNYWNWZWFuOgAxOTkwLnBkZgAADgASAAgAMQA5ADkAMAAuAHAAZABmAA8AGgAMAE0AYQBjAGkAbgB0AG8AcwBoACAASABEABIASlVzZXJzL2dyYW50Zi9DbG91ZFN0YXRpb24vZmlybF9saWJyYXJ5L2ZpcmxfbGlicmFyeV9maWxlcy9NYWNWZWFuLzE5OTAucGRmABMAAS8AABUAAgAN//8AAAAIAA0AGgAkAGoAAAAAAAACAQAAAAAAAAAFAAAAAAAAAAAAAAAAAAACOA==}, Bdsk-Url-1 = {http://dx.doi.org/10.1175/1520-0469(1990)047%3C1012:CTEITS%3E2.0.CO;2}} @article{louis_1979, - Author = {Louis, JF}, + Author = {Louis, J. F.}, + Bdsk-File-1 = {YnBsaXN0MDDSAQIDBFxyZWxhdGl2ZVBhdGhZYWxpYXNEYXRhXxBBLi4vLi4vQ2xvdWRTdGF0aW9uL2ZpcmxfbGlicmFyeS9maXJsX2xpYnJhcnlfZmlsZXMvTG91aXMvMTk3OS5wZGZPEQHEAAAAAAHEAAIAAAxNYWNpbnRvc2ggSEQAAAAAAAAAAAAAAAAAAADR5yRSSCsAAAAonogIMTk3OS5wZGYAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACiej8FuU4pQREYgQ0FSTwACAAUAAAkgAAAAAAAAAAAAAAAAAAAABUxvdWlzAAAQAAgAANHneLIAAAARAAgAAMFutfoAAAABABgAKJ6IAChslgAobIsAKGd7ABteBwACmFwAAgBbTWFjaW50b3NoIEhEOlVzZXJzOgBncmFudGY6AENsb3VkU3RhdGlvbjoAZmlybF9saWJyYXJ5OgBmaXJsX2xpYnJhcnlfZmlsZXM6AExvdWlzOgAxOTc5LnBkZgAADgASAAgAMQA5ADcAOQAuAHAAZABmAA8AGgAMAE0AYQBjAGkAbgB0AG8AcwBoACAASABEABIASFVzZXJzL2dyYW50Zi9DbG91ZFN0YXRpb24vZmlybF9saWJyYXJ5L2ZpcmxfbGlicmFyeV9maWxlcy9Mb3Vpcy8xOTc5LnBkZgATAAEvAAAVAAIADf//AAAACAANABoAJABoAAAAAAAAAgEAAAAAAAAABQAAAAAAAAAAAAAAAAAAAjA=}, Date-Added = {2016-05-20 17:15:52 +0000}, Date-Modified = {2016-05-20 17:15:52 +0000}, Isi = {A1979HT69700004}, @@ -2612,12 +2704,12 @@ @article{louis_1979 Title = {A PARAMETRIC MODEL OF VERTICAL EDDY FLUXES IN THE ATMOSPHERE}, Volume = {17}, Year = {1979}, - Bdsk-File-1 = {YnBsaXN0MDDSAQIDBFxyZWxhdGl2ZVBhdGhZYWxpYXNEYXRhXxBBLi4vLi4vQ2xvdWRTdGF0aW9uL2ZpcmxfbGlicmFyeS9maXJsX2xpYnJhcnlfZmlsZXMvTG91aXMvMTk3OS5wZGZPEQHEAAAAAAHEAAIAAAxNYWNpbnRvc2ggSEQAAAAAAAAAAAAAAAAAAADR5yRSSCsAAAAonogIMTk3OS5wZGYAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACiej8FuU4pQREYgQ0FSTwACAAUAAAkgAAAAAAAAAAAAAAAAAAAABUxvdWlzAAAQAAgAANHneLIAAAARAAgAAMFutfoAAAABABgAKJ6IAChslgAobIsAKGd7ABteBwACmFwAAgBbTWFjaW50b3NoIEhEOlVzZXJzOgBncmFudGY6AENsb3VkU3RhdGlvbjoAZmlybF9saWJyYXJ5OgBmaXJsX2xpYnJhcnlfZmlsZXM6AExvdWlzOgAxOTc5LnBkZgAADgASAAgAMQA5ADcAOQAuAHAAZABmAA8AGgAMAE0AYQBjAGkAbgB0AG8AcwBoACAASABEABIASFVzZXJzL2dyYW50Zi9DbG91ZFN0YXRpb24vZmlybF9saWJyYXJ5L2ZpcmxfbGlicmFyeV9maWxlcy9Mb3Vpcy8xOTc5LnBkZgATAAEvAAAVAAIADf//AAAACAANABoAJABoAAAAAAAAAgEAAAAAAAAABQAAAAAAAAAAAAAAAAAAAjA=}, Bdsk-Url-1 = {http://ws.isiknowledge.com/cps/openurl/service?url_ver=Z39.88-2004&rft_id=info:ut/A1979HT69700004}} @article{lock_et_al_2000, Abstract = {A new boundary layer turbulent mixing scheme has been developed for use in the UKMO weather forecasting and climate prediction models. This includes a representation of nonlocal mixing (driven by both surface fluxes and cloud-top processes) in unstable layers, either coupled to or decoupled from the surface, and an explicit entrainment parameterization. The scheme is formulated in moist conserved variables so that it can treat both dry and cloudy layers. Details of the scheme and examples of its performance in single-column model tests are presented.}, - Author = {Lock, AP and Brown, AR and Bush, MR and Martin, GM and Smith, RNB}, + Author = {Lock, A. P. and Brown, A. R. and Bush, M. R. and Martin, G. M. and Smith, R.N.B.}, + Bdsk-File-1 = {YnBsaXN0MDDSAQIDBFxyZWxhdGl2ZVBhdGhZYWxpYXNEYXRhXxBALi4vLi4vQ2xvdWRTdGF0aW9uL2ZpcmxfbGlicmFyeS9maXJsX2xpYnJhcnlfZmlsZXMvTG9jay8yMDAwLnBkZk8RAcAAAAAAAcAAAgAADE1hY2ludG9zaCBIRAAAAAAAAAAAAAAAAAAAANHnJFJIKwAAACibewgyMDAwLnBkZgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKJuLywPrPAAAAAAAAAAAAAIABQAACSAAAAAAAAAAAAAAAAAAAAAETG9jawAQAAgAANHneLIAAAARAAgAAMsETawAAAABABgAKJt7AChslgAobIsAKGd7ABteBwACmFwAAgBaTWFjaW50b3NoIEhEOlVzZXJzOgBncmFudGY6AENsb3VkU3RhdGlvbjoAZmlybF9saWJyYXJ5OgBmaXJsX2xpYnJhcnlfZmlsZXM6AExvY2s6ADIwMDAucGRmAA4AEgAIADIAMAAwADAALgBwAGQAZgAPABoADABNAGEAYwBpAG4AdABvAHMAaAAgAEgARAASAEdVc2Vycy9ncmFudGYvQ2xvdWRTdGF0aW9uL2ZpcmxfbGlicmFyeS9maXJsX2xpYnJhcnlfZmlsZXMvTG9jay8yMDAwLnBkZgAAEwABLwAAFQACAA3//wAAAAgADQAaACQAZwAAAAAAAAIBAAAAAAAAAAUAAAAAAAAAAAAAAAAAAAIr}, Date-Added = {2016-05-20 17:15:36 +0000}, Date-Modified = {2016-05-20 17:15:36 +0000}, Isi = {000089461100008}, @@ -2630,13 +2722,13 @@ @article{lock_et_al_2000 Title = {A new boundary layer mixing scheme. {P}art {I}: Scheme description and single-column model tests}, Volume = {128}, Year = {2000}, - Bdsk-File-1 = {YnBsaXN0MDDSAQIDBFxyZWxhdGl2ZVBhdGhZYWxpYXNEYXRhXxBALi4vLi4vQ2xvdWRTdGF0aW9uL2ZpcmxfbGlicmFyeS9maXJsX2xpYnJhcnlfZmlsZXMvTG9jay8yMDAwLnBkZk8RAcAAAAAAAcAAAgAADE1hY2ludG9zaCBIRAAAAAAAAAAAAAAAAAAAANHnJFJIKwAAACibewgyMDAwLnBkZgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKJuLywPrPAAAAAAAAAAAAAIABQAACSAAAAAAAAAAAAAAAAAAAAAETG9jawAQAAgAANHneLIAAAARAAgAAMsETawAAAABABgAKJt7AChslgAobIsAKGd7ABteBwACmFwAAgBaTWFjaW50b3NoIEhEOlVzZXJzOgBncmFudGY6AENsb3VkU3RhdGlvbjoAZmlybF9saWJyYXJ5OgBmaXJsX2xpYnJhcnlfZmlsZXM6AExvY2s6ADIwMDAucGRmAA4AEgAIADIAMAAwADAALgBwAGQAZgAPABoADABNAGEAYwBpAG4AdABvAHMAaAAgAEgARAASAEdVc2Vycy9ncmFudGYvQ2xvdWRTdGF0aW9uL2ZpcmxfbGlicmFyeS9maXJsX2xpYnJhcnlfZmlsZXMvTG9jay8yMDAwLnBkZgAAEwABLwAAFQACAA3//wAAAAgADQAaACQAZwAAAAAAAAIBAAAAAAAAAAUAAAAAAAAAAAAAAAAAAAIr}, Bdsk-Url-1 = {http://ws.isiknowledge.com/cps/openurl/service?url_ver=Z39.88-2004&rft_id=info:ut/000089461100008}} @article{hong_and_pan_1996, Abstract = {Abstract In this paper, the incorporation of a simple atmospheric boundary layer diffusion scheme into the NCEP Medium-Range Forecast Model is described. A boundary layer diffusion package based on the Troen and Mahrt nonlocal diffusion concept has been tested for possible operational implementation. The results from this approach are compared with those from the local diffusion approach, which is the current operational scheme, and verified against FIFE observations during 9?10 August 1987. The comparisons between local and nonlocal approaches are extended to the forecast for a heavy rain case of 15?17 May 1995. The sensitivity of both the boundary layer development and the precipitation forecast to the tuning parameters in the nonlocal diffusion scheme is also investigated. Special attention is given to the interaction of boundary layer processes with precipitation physics. Some results of parallel runs during August 1995 are also presented.}, Annote = {doi: 10.1175/1520-0493(1996)124<2322:NBLVDI>2.0.CO;2}, - Author = {Hong, Song-You and Pan, Hua-Lu}, + Author = {Hong, S.-Y. and Pan, H.-L.}, + Bdsk-File-1 = {YnBsaXN0MDDSAQIDBFxyZWxhdGl2ZVBhdGhZYWxpYXNEYXRhXxBALi4vLi4vQ2xvdWRTdGF0aW9uL2ZpcmxfbGlicmFyeS9maXJsX2xpYnJhcnlfZmlsZXMvSG9uZy8xOTk2LnBkZk8RAcAAAAAAAcAAAgAADE1hY2ludG9zaCBIRAAAAAAAAAAAAAAAAAAAANHnJFJIKwAAAE18FggxOTk2LnBkZgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAATXvY0pRb8QAAAAAAAAAAAAIABQAACSAAAAAAAAAAAAAAAAAAAAAESG9uZwAQAAgAANHneLIAAAARAAgAANKUvmEAAAABABgATXwWAChslgAobIsAKGd7ABteBwACmFwAAgBaTWFjaW50b3NoIEhEOlVzZXJzOgBncmFudGY6AENsb3VkU3RhdGlvbjoAZmlybF9saWJyYXJ5OgBmaXJsX2xpYnJhcnlfZmlsZXM6AEhvbmc6ADE5OTYucGRmAA4AEgAIADEAOQA5ADYALgBwAGQAZgAPABoADABNAGEAYwBpAG4AdABvAHMAaAAgAEgARAASAEdVc2Vycy9ncmFudGYvQ2xvdWRTdGF0aW9uL2ZpcmxfbGlicmFyeS9maXJsX2xpYnJhcnlfZmlsZXMvSG9uZy8xOTk2LnBkZgAAEwABLwAAFQACAA3//wAAAAgADQAaACQAZwAAAAAAAAIBAAAAAAAAAAUAAAAAAAAAAAAAAAAAAAIr}, Booktitle = {Monthly Weather Review}, Da = {1996/10/01}, Date = {1996/10/01}, @@ -2657,13 +2749,13 @@ @article{hong_and_pan_1996 Volume = {124}, Year = {1996}, Year1 = {1996}, - Bdsk-File-1 = {YnBsaXN0MDDSAQIDBFxyZWxhdGl2ZVBhdGhZYWxpYXNEYXRhXxBALi4vLi4vQ2xvdWRTdGF0aW9uL2ZpcmxfbGlicmFyeS9maXJsX2xpYnJhcnlfZmlsZXMvSG9uZy8xOTk2LnBkZk8RAcAAAAAAAcAAAgAADE1hY2ludG9zaCBIRAAAAAAAAAAAAAAAAAAAANHnJFJIKwAAAE18FggxOTk2LnBkZgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAATXvY0pRb8QAAAAAAAAAAAAIABQAACSAAAAAAAAAAAAAAAAAAAAAESG9uZwAQAAgAANHneLIAAAARAAgAANKUvmEAAAABABgATXwWAChslgAobIsAKGd7ABteBwACmFwAAgBaTWFjaW50b3NoIEhEOlVzZXJzOgBncmFudGY6AENsb3VkU3RhdGlvbjoAZmlybF9saWJyYXJ5OgBmaXJsX2xpYnJhcnlfZmlsZXM6AEhvbmc6ADE5OTYucGRmAA4AEgAIADEAOQA5ADYALgBwAGQAZgAPABoADABNAGEAYwBpAG4AdABvAHMAaAAgAEgARAASAEdVc2Vycy9ncmFudGYvQ2xvdWRTdGF0aW9uL2ZpcmxfbGlicmFyeS9maXJsX2xpYnJhcnlfZmlsZXMvSG9uZy8xOTk2LnBkZgAAEwABLwAAFQACAA3//wAAAAgADQAaACQAZwAAAAAAAAIBAAAAAAAAAAUAAAAAAAAAAAAAAAAAAAIr}, Bdsk-Url-1 = {http://dx.doi.org/10.1175/1520-0493(1996)124%3C2322:NBLVDI%3E2.0.CO;2}} @article{han_and_pan_2006, Abstract = {Abstract A parameterization of the convection-induced pressure gradient force (PGF) in convective momentum transport (CMT) is tested for hurricane intensity forecasting using NCEP's operational Global Forecast System (GFS) and its nested Regional Spectral Model (RSM). In the parameterization the PGF is assumed to be proportional to the product of the cloud mass flux and vertical wind shear. Compared to control forecasts using the present operational GFS and RSM where the PGF effect in CMT is taken into account empirically, the new PGF parameterization helps increase hurricane intensity by reducing the vertical momentum exchange, giving rise to a closer comparison to the observations. In addition, the new PGF parameterization forecasts not only show more realistically organized precipitation patterns with enhanced hurricane intensity but also reduce the forecast track error. Nevertheless, the model forecasts with the new PGF parameterization still largely underpredict the observed intensity. One of the many possible reasons for the large underprediction may be the absence of hurricane initialization in the models.}, Annote = {doi: 10.1175/MWR3090.1}, - Author = {Han, Jongil and Pan, Hua-Lu}, + Author = {Han, J. and Pan, H.-L.}, + Bdsk-File-1 = {YnBsaXN0MDDSAQIDBFxyZWxhdGl2ZVBhdGhZYWxpYXNEYXRhXxA/Li4vLi4vQ2xvdWRTdGF0aW9uL2ZpcmxfbGlicmFyeS9maXJsX2xpYnJhcnlfZmlsZXMvSGFuLzIwMDYucGRmTxEBvgAAAAABvgACAAAMTWFjaW50b3NoIEhEAAAAAAAAAAAAAAAAAAAA0eckUkgrAAAAWsT5CDIwMDYucGRmAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABazFjStCvVAAAAAAAAAAAAAgAFAAAJIAAAAAAAAAAAAAAAAAAAAANIYW4AABAACAAA0ed4sgAAABEACAAA0rSORQAAAAEAGABaxPkAKGyWAChsiwAoZ3sAG14HAAKYXAACAFlNYWNpbnRvc2ggSEQ6VXNlcnM6AGdyYW50ZjoAQ2xvdWRTdGF0aW9uOgBmaXJsX2xpYnJhcnk6AGZpcmxfbGlicmFyeV9maWxlczoASGFuOgAyMDA2LnBkZgAADgASAAgAMgAwADAANgAuAHAAZABmAA8AGgAMAE0AYQBjAGkAbgB0AG8AcwBoACAASABEABIARlVzZXJzL2dyYW50Zi9DbG91ZFN0YXRpb24vZmlybF9saWJyYXJ5L2ZpcmxfbGlicmFyeV9maWxlcy9IYW4vMjAwNi5wZGYAEwABLwAAFQACAA3//wAAAAgADQAaACQAZgAAAAAAAAIBAAAAAAAAAAUAAAAAAAAAAAAAAAAAAAIo}, Booktitle = {Monthly Weather Review}, Da = {2006/02/01}, Date-Added = {2016-05-20 17:11:17 +0000}, @@ -2682,11 +2774,11 @@ @article{han_and_pan_2006 Url = {http://dx.doi.org/10.1175/MWR3090.1}, Volume = {134}, Year = {2006}, - Bdsk-File-1 = {YnBsaXN0MDDSAQIDBFxyZWxhdGl2ZVBhdGhZYWxpYXNEYXRhXxA/Li4vLi4vQ2xvdWRTdGF0aW9uL2ZpcmxfbGlicmFyeS9maXJsX2xpYnJhcnlfZmlsZXMvSGFuLzIwMDYucGRmTxEBvgAAAAABvgACAAAMTWFjaW50b3NoIEhEAAAAAAAAAAAAAAAAAAAA0eckUkgrAAAAWsT5CDIwMDYucGRmAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABazFjStCvVAAAAAAAAAAAAAgAFAAAJIAAAAAAAAAAAAAAAAAAAAANIYW4AABAACAAA0ed4sgAAABEACAAA0rSORQAAAAEAGABaxPkAKGyWAChsiwAoZ3sAG14HAAKYXAACAFlNYWNpbnRvc2ggSEQ6VXNlcnM6AGdyYW50ZjoAQ2xvdWRTdGF0aW9uOgBmaXJsX2xpYnJhcnk6AGZpcmxfbGlicmFyeV9maWxlczoASGFuOgAyMDA2LnBkZgAADgASAAgAMgAwADAANgAuAHAAZABmAA8AGgAMAE0AYQBjAGkAbgB0AG8AcwBoACAASABEABIARlVzZXJzL2dyYW50Zi9DbG91ZFN0YXRpb24vZmlybF9saWJyYXJ5L2ZpcmxfbGlicmFyeV9maWxlcy9IYW4vMjAwNi5wZGYAEwABLwAAFQACAA3//wAAAAgADQAaACQAZgAAAAAAAAIBAAAAAAAAAAUAAAAAAAAAAAAAAAAAAAIo}, Bdsk-Url-1 = {http://dx.doi.org/10.1175/MWR3090.1}} @article{businger_et_al_1971, - Author = {Businger, JA and Wyngaard, JC and Izumi, Y and Bradley, EF}, + Author = {Businger, J. A. and Wyngaard, J. C. and Izumi, Y. and Bradley, E. F.}, + Bdsk-File-1 = {YnBsaXN0MDDSAQIDBFxyZWxhdGl2ZVBhdGhZYWxpYXNEYXRhXxBELi4vLi4vQ2xvdWRTdGF0aW9uL2ZpcmxfbGlicmFyeS9maXJsX2xpYnJhcnlfZmlsZXMvQnVzaW5nZXIvMTk3MS5wZGZPEQHMAAAAAAHMAAIAAAxNYWNpbnRvc2ggSEQAAAAAAAAAAAAAAAAAAADR5yRSSCsAAAAodUUIMTk3MS5wZGYAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACh1cbTPIxwAAAAAAAAAAAACAAUAAAkgAAAAAAAAAAAAAAAAAAAACEJ1c2luZ2VyABAACAAA0ed4sgAAABEACAAAtM+FjAAAAAEAGAAodUUAKGyWAChsiwAoZ3sAG14HAAKYXAACAF5NYWNpbnRvc2ggSEQ6VXNlcnM6AGdyYW50ZjoAQ2xvdWRTdGF0aW9uOgBmaXJsX2xpYnJhcnk6AGZpcmxfbGlicmFyeV9maWxlczoAQnVzaW5nZXI6ADE5NzEucGRmAA4AEgAIADEAOQA3ADEALgBwAGQAZgAPABoADABNAGEAYwBpAG4AdABvAHMAaAAgAEgARAASAEtVc2Vycy9ncmFudGYvQ2xvdWRTdGF0aW9uL2ZpcmxfbGlicmFyeS9maXJsX2xpYnJhcnlfZmlsZXMvQnVzaW5nZXIvMTk3MS5wZGYAABMAAS8AABUAAgAN//8AAAAIAA0AGgAkAGsAAAAAAAACAQAAAAAAAAAFAAAAAAAAAAAAAAAAAAACOw==}, Date-Added = {2016-05-20 17:10:50 +0000}, Date-Modified = {2018-07-18 18:58:08 +0000}, Isi = {A1971I822800004}, @@ -2699,11 +2791,10 @@ @article{businger_et_al_1971 Title = {Flux-profile relationships in the atmospheric surface layer}, Volume = {28}, Year = {1971}, - Bdsk-File-1 = {YnBsaXN0MDDSAQIDBFxyZWxhdGl2ZVBhdGhZYWxpYXNEYXRhXxBELi4vLi4vQ2xvdWRTdGF0aW9uL2ZpcmxfbGlicmFyeS9maXJsX2xpYnJhcnlfZmlsZXMvQnVzaW5nZXIvMTk3MS5wZGZPEQHMAAAAAAHMAAIAAAxNYWNpbnRvc2ggSEQAAAAAAAAAAAAAAAAAAADR5yRSSCsAAAAodUUIMTk3MS5wZGYAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACh1cbTPIxwAAAAAAAAAAAACAAUAAAkgAAAAAAAAAAAAAAAAAAAACEJ1c2luZ2VyABAACAAA0ed4sgAAABEACAAAtM+FjAAAAAEAGAAodUUAKGyWAChsiwAoZ3sAG14HAAKYXAACAF5NYWNpbnRvc2ggSEQ6VXNlcnM6AGdyYW50ZjoAQ2xvdWRTdGF0aW9uOgBmaXJsX2xpYnJhcnk6AGZpcmxfbGlicmFyeV9maWxlczoAQnVzaW5nZXI6ADE5NzEucGRmAA4AEgAIADEAOQA3ADEALgBwAGQAZgAPABoADABNAGEAYwBpAG4AdABvAHMAaAAgAEgARAASAEtVc2Vycy9ncmFudGYvQ2xvdWRTdGF0aW9uL2ZpcmxfbGlicmFyeS9maXJsX2xpYnJhcnlfZmlsZXMvQnVzaW5nZXIvMTk3MS5wZGYAABMAAS8AABUAAgAN//8AAAAIAA0AGgAkAGsAAAAAAAACAQAAAAAAAAAFAAAAAAAAAAAAAAAAAAACOw==}, Bdsk-Url-1 = {http://ws.isiknowledge.com/cps/openurl/service?url_ver=Z39.88-2004&rft_id=info:ut/A1971I822800004}} @article{xu_and_randall_1996, - Author = {K-M. Xu and D. A. Randall}, + Author = {K.-M. Xu and D. A. Randall}, Date-Added = {2016-05-20 16:22:45 +0000}, Date-Modified = {2016-05-20 16:24:47 +0000}, Journal = {J. Atmos. Sci.}, @@ -2727,7 +2818,7 @@ @article{clough_et_al_1992 Year = {1992}} @techreport{chou_and_suarez_1999, - Author = {M.D. Chou and M. J. Suarez}, + Author = {M. D. Chou and M. J. Suarez}, Date-Added = {2016-05-20 15:27:31 +0000}, Date-Modified = {2016-05-20 15:30:02 +0000}, Institution = {NASA}, @@ -2737,7 +2828,7 @@ @techreport{chou_and_suarez_1999 Year = {1999}} @article{sato_et_al_1993, - Author = {M. Sato and J.E. Hansan and M. P. McCormick and J. B. Pollack}, + Author = {M. Sato and J. E. Hansan and M. P. McCormick and J. B. Pollack}, Date-Added = {2016-05-20 04:23:08 +0000}, Date-Modified = {2018-02-20 19:58:29 +0000}, Journal = {J. Geophys. Res.}, @@ -2755,7 +2846,7 @@ @article{chin_et_al_2000 Month = {October}, Number = {D20}, Pages = {24671-24687}, - Title = {Atmospheric sulfur cycle simulated in the global model GOCART: Model description and global properties}, + Title = {Atmospheric sulfur cycle simulated in the global model {GOCART}: Model description and global properties}, Volume = {105}, Year = {2000}} @@ -2765,17 +2856,17 @@ @article{hess_et_al_1998 Date-Modified = {2016-05-20 15:08:21 +0000}, Journal = {Bull. Am. Meteor. Soc.}, Pages = {831-844}, - Title = {Optical properties of aerosols and clouds: The software package OPAC.}, + Title = {Optical properties of aerosols and clouds: The software package {OPAC}}, Volume = {79}, Year = {1998}} @article{iacono_et_al_2000, - Author = {M.J. Iacono and E.J. Mlawer and S. A. Clough and J.-J. Morcrette}, + Author = {M. J. Iacono and E. J. Mlawer and S. A. Clough and J.-J. Morcrette}, Date-Added = {2016-05-20 03:45:26 +0000}, Date-Modified = {2016-05-20 15:08:59 +0000}, Journal = {J. Geophys. Res.}, Pages = {14873-14890}, - Title = {Impact of an improved longwave radiation model, RRTM, on the energy budget and thermodynamic properties of the NCAR community climate model, CCM3}, + Title = {Impact of an improved longwave radiation model, {RRTM}, on the energy budget and thermodynamic properties of the {NCAR} community climate model, {CCM3}}, Volume = {105}, Year = {2000}} @@ -2785,32 +2876,32 @@ @article{clough_et_al_2005 Date-Modified = {2016-05-20 15:10:30 +0000}, Journal = {J. Quant. Spectrosc. Radiat. Transfer}, Pages = {233-244}, - Title = {Atmospheric radiative transfer modeling: A summary of the AER codes}, + Title = {Atmospheric radiative transfer modeling: A summary of the {AER} codes}, Volume = {91}, Year = {2005}} @article{heymsfield_and_mcfarquhar_1996, - Author = {A.J. Heymsfield and G. M. McFarquhar}, + Author = {A. J. Heymsfield and G. M. McFarquhar}, Date-Added = {2016-05-20 03:35:53 +0000}, Date-Modified = {2016-05-24 17:35:50 +0000}, Journal = {J. Atmos. Sci.}, Pages = {2424-2451}, - Title = {High albedos of cirrus in the tropical Pacific warm pool: Microphysical interpretations from CEPEX and from Kwajalein, Marshall Islands}, + Title = {High albedos of cirrus in the tropical {P}acific warm pool: Microphysical interpretations from {CEPEX} and from {K}wajalein, {M}arshall {I}slands}, Volume = {53}, Year = {1996}} @article{mlawer_et_al_1997, - Author = {E.J. Mlawer and S.J. Taubman and P.D. Brown and M. J. Iacono and S. A. Clough}, + Author = {E. J. Mlawer and S. J. Taubman and P. D. Brown and M. J. Iacono and S. A. Clough}, Date-Added = {2016-05-20 03:32:32 +0000}, Date-Modified = {2016-05-20 15:12:05 +0000}, Journal = {J. Geophys. Res.}, Number = {16663-16682}, - Title = {Radiative transfer for inhomogenerous atmospheres: RRTM, a validated correlated-k model for the longwave}, + Title = {Radiative transfer for inhomogenerous atmospheres: {RRTM}, a validated correlated-k model for the longwave}, Volume = {102}, Year = {1997}} @article{Schwarzkopf_and_Fels_1991, - Author = {M.D. Schwarzkopf and S.B. Fels}, + Author = {M. D. Schwarzkopf and S. B. Fels}, Date-Added = {2016-05-20 03:29:16 +0000}, Date-Modified = {2016-05-20 15:12:19 +0000}, Journal = {J. Geophys. Res.}, @@ -2820,46 +2911,46 @@ @article{Schwarzkopf_and_Fels_1991 Year = {1991}} @article{briegleb_1992, - Author = {B.P. Briegleb}, + Author = {B. P. Briegleb}, Date-Added = {2016-05-20 03:09:50 +0000}, Date-Modified = {2016-05-20 15:12:27 +0000}, Journal = {J. Geophys. Res.}, Pages = {7603-7612}, - Title = {Delta-Eddington approximation for solar radiation in the NCAR community climate model}, + Title = {Delta-Eddington approximation for solar radiation in the {NCAR} community climate model}, Volume = {97}, Year = {1992}} @conference{alpert_et_al_1988, Address = {Baltimore, MD}, - Author = {J. Alpert and M. Kanamitsu and P.M. Caplan and J.G. Sela and G. H. White and E. Kalnay}, + Author = {J. C. Alpert and M. Kanamitsu and P. M. Caplan and J. G. Sela and G. H. White and E. Kalnay}, Date-Added = {2016-05-19 22:40:01 +0000}, Date-Modified = {2018-10-26 15:54:19 -0600}, Organization = {Eighth Conf. on Numerical Weather Prediction, Amer. Meteor. Soc.}, Pages = {726-733}, - Title = {Mountain induced gravity wave drag parameterization in the NMC medium-range forecast model}, + Title = {Mountain induced gravity wave drag parameterization in the {NMC} medium-range forecast model}, Year = {1988}} @conference{alpert_et_al_1996, Address = {Norfolk}, - Author = {J.C. Alpert and S-Y. Hong and Y-J. Kim}, + Author = {J. C. Alpert and S-Y. Hong and Y-J. Kim}, Date-Added = {2016-05-19 22:36:02 +0000}, Date-Modified = {2016-05-20 15:14:15 +0000}, Organization = {11 Conf. on NWP}, Pages = {322-323}, - Title = {Sensitivity of cyclogenesis to lower troposphere enhancement of gravity wave drag using the EMC MRF}, + Title = {Sensitivity of cyclogenesis to lower troposphere enhancement of gravity wave drag using the {EMC MRF}}, Year = {1996}} @conference{alpert_2006, - Author = {J.C. Alpert}, + Author = {J. C. Alpert}, Booktitle = {20th Conf. WAF/16 Conf. NWP}, Date-Added = {2016-05-19 21:24:23 +0000}, Date-Modified = {2016-05-20 15:14:34 +0000}, Number = {P2.4}, - Title = {Sub-grid scale mountain blocking at NCEP}, + Title = {Sub-grid scale mountain blocking at {NCEP}}, Year = {2006}} @article{ebert_and_curry_1992, - Author = {E.E. Ebert and J.A. Curry}, + Author = {E. E. Ebert and J. A. Curry}, Date-Added = {2016-05-19 21:19:00 +0000}, Date-Modified = {2016-05-20 15:12:43 +0000}, Journal = {J. Geophys. Res.}, @@ -2890,17 +2981,18 @@ @article{kim_and_arakawa_1995 @techreport{hou_et_al_2002, Author = {Y. Hou and S. Moorthi and K. Campana}, + Bdsk-File-1 = {YnBsaXN0MDDSAQIDBFxyZWxhdGl2ZVBhdGhZYWxpYXNEYXRhXxAiLi4vLi4vemhhbmctbGliL2hvdV9ldF9hbF8yMDAyLnBkZk8RAdwAAAAAAdwAAgAADE1hY2ludG9zaCBIRAAAAAAAAAAAAAAAAAAAAM/T1mZIKwAAAFKkjRJob3VfZXRfYWxfMjAwMi5wZGYAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUqai02OGCgAAAAAAAAAAAAIAAgAACSAAAAAAAAAAAAAAAAAAAAAJemhhbmctbGliAAAQAAgAAM/UKsYAAAARAAgAANNj2moAAAABABgAUqSNAE1lSgAj19QACTbFAAk2xAACZvkAAgBbTWFjaW50b3NoIEhEOlVzZXJzOgBtYW56aGFuZzoARG9jdW1lbnRzOgBNYW4uWmhhbmc6AGdtdGItZG9jOgB6aGFuZy1saWI6AGhvdV9ldF9hbF8yMDAyLnBkZgAADgAmABIAaABvAHUAXwBlAHQAXwBhAGwAXwAyADAAMAAyAC4AcABkAGYADwAaAAwATQBhAGMAaQBuAHQAbwBzAGgAIABIAEQAEgBIVXNlcnMvbWFuemhhbmcvRG9jdW1lbnRzL01hbi5aaGFuZy9nbXRiLWRvYy96aGFuZy1saWIvaG91X2V0X2FsXzIwMDIucGRmABMAAS8AABUAAgAP//8AAAAIAA0AGgAkAEkAAAAAAAACAQAAAAAAAAAFAAAAAAAAAAAAAAAAAAACKQ==}, Date-Added = {2016-05-19 19:52:22 +0000}, Date-Modified = {2016-05-20 15:14:59 +0000}, Institution = {NCEP}, Number = {441}, Title = {Parameterization of Solar Radiation Transfer}, Type = {office note}, - Year = {2002}, - Bdsk-File-1 = {YnBsaXN0MDDSAQIDBFxyZWxhdGl2ZVBhdGhZYWxpYXNEYXRhXxAiLi4vLi4vemhhbmctbGliL2hvdV9ldF9hbF8yMDAyLnBkZk8RAdwAAAAAAdwAAgAADE1hY2ludG9zaCBIRAAAAAAAAAAAAAAAAAAAAM/T1mZIKwAAAFKkjRJob3VfZXRfYWxfMjAwMi5wZGYAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUqai02OGCgAAAAAAAAAAAAIAAgAACSAAAAAAAAAAAAAAAAAAAAAJemhhbmctbGliAAAQAAgAAM/UKsYAAAARAAgAANNj2moAAAABABgAUqSNAE1lSgAj19QACTbFAAk2xAACZvkAAgBbTWFjaW50b3NoIEhEOlVzZXJzOgBtYW56aGFuZzoARG9jdW1lbnRzOgBNYW4uWmhhbmc6AGdtdGItZG9jOgB6aGFuZy1saWI6AGhvdV9ldF9hbF8yMDAyLnBkZgAADgAmABIAaABvAHUAXwBlAHQAXwBhAGwAXwAyADAAMAAyAC4AcABkAGYADwAaAAwATQBhAGMAaQBuAHQAbwBzAGgAIABIAEQAEgBIVXNlcnMvbWFuemhhbmcvRG9jdW1lbnRzL01hbi5aaGFuZy9nbXRiLWRvYy96aGFuZy1saWIvaG91X2V0X2FsXzIwMDIucGRmABMAAS8AABUAAgAP//8AAAAIAA0AGgAkAEkAAAAAAAACAQAAAAAAAAAFAAAAAAAAAAAAAAAAAAACKQ==}} + Year = {2002}} @article{hu_and_stamnes_1993, - Author = {Y.X. Hu and K. Stamnes}, + Author = {Y. X. Hu and K. Stamnes}, + Bdsk-File-1 = {YnBsaXN0MDDSAQIDBFxyZWxhdGl2ZVBhdGhZYWxpYXNEYXRhXxAnLi4vLi4vemhhbmctbGliL2h1X2FuZF9zdGFtbmVzXzE5OTMucGRmTxEB8AAAAAAB8AACAAAMTWFjaW50b3NoIEhEAAAAAAAAAAAAAAAAAAAAz9PWZkgrAAAAUqSNF2h1X2FuZF9zdGFtbmVzXzE5OTMucGRmAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABSpJHTY3R+AAAAAAAAAAAAAgACAAAJIAAAAAAAAAAAAAAAAAAAAAl6aGFuZy1saWIAABAACAAAz9QqxgAAABEACAAA02PI3gAAAAEAGABSpI0ATWVKACPX1AAJNsUACTbEAAJm+QACAGBNYWNpbnRvc2ggSEQ6VXNlcnM6AG1hbnpoYW5nOgBEb2N1bWVudHM6AE1hbi5aaGFuZzoAZ210Yi1kb2M6AHpoYW5nLWxpYjoAaHVfYW5kX3N0YW1uZXNfMTk5My5wZGYADgAwABcAaAB1AF8AYQBuAGQAXwBzAHQAYQBtAG4AZQBzAF8AMQA5ADkAMwAuAHAAZABmAA8AGgAMAE0AYQBjAGkAbgB0AG8AcwBoACAASABEABIATVVzZXJzL21hbnpoYW5nL0RvY3VtZW50cy9NYW4uWmhhbmcvZ210Yi1kb2MvemhhbmctbGliL2h1X2FuZF9zdGFtbmVzXzE5OTMucGRmAAATAAEvAAAVAAIAD///AAAACAANABoAJABOAAAAAAAAAgEAAAAAAAAABQAAAAAAAAAAAAAAAAAAAkI=}, Date-Added = {2016-05-19 19:31:56 +0000}, Date-Modified = {2016-05-20 15:13:12 +0000}, Journal = {J. Climate}, @@ -2908,11 +3000,10 @@ @article{hu_and_stamnes_1993 Pages = {728-742}, Title = {An accurate parameterization of the radiative properties of water clouds suitable for use in climate models}, Volume = {6}, - Year = {1993}, - Bdsk-File-1 = {YnBsaXN0MDDSAQIDBFxyZWxhdGl2ZVBhdGhZYWxpYXNEYXRhXxAnLi4vLi4vemhhbmctbGliL2h1X2FuZF9zdGFtbmVzXzE5OTMucGRmTxEB8AAAAAAB8AACAAAMTWFjaW50b3NoIEhEAAAAAAAAAAAAAAAAAAAAz9PWZkgrAAAAUqSNF2h1X2FuZF9zdGFtbmVzXzE5OTMucGRmAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABSpJHTY3R+AAAAAAAAAAAAAgACAAAJIAAAAAAAAAAAAAAAAAAAAAl6aGFuZy1saWIAABAACAAAz9QqxgAAABEACAAA02PI3gAAAAEAGABSpI0ATWVKACPX1AAJNsUACTbEAAJm+QACAGBNYWNpbnRvc2ggSEQ6VXNlcnM6AG1hbnpoYW5nOgBEb2N1bWVudHM6AE1hbi5aaGFuZzoAZ210Yi1kb2M6AHpoYW5nLWxpYjoAaHVfYW5kX3N0YW1uZXNfMTk5My5wZGYADgAwABcAaAB1AF8AYQBuAGQAXwBzAHQAYQBtAG4AZQBzAF8AMQA5ADkAMwAuAHAAZABmAA8AGgAMAE0AYQBjAGkAbgB0AG8AcwBoACAASABEABIATVVzZXJzL21hbnpoYW5nL0RvY3VtZW50cy9NYW4uWmhhbmcvZ210Yi1kb2MvemhhbmctbGliL2h1X2FuZF9zdGFtbmVzXzE5OTMucGRmAAATAAEvAAAVAAIAD///AAAACAANABoAJABOAAAAAAAAAgEAAAAAAAAABQAAAAAAAAAAAAAAAAAAAkI=}} + Year = {1993}} @article{alexander_et_al_2010, - Author = {Alexander, M. J. and Geller, M. and McLandress, C. and Polavarapu, S. and Preusse, P. and Sassi, F. and Sato, K. and Eckermann, S. and Ern, M. and Hertzog, A. and Kawatani, Y. and Pulido, M. and Shaw, T. A. and Sigmond, M. and Vincent, R. and Watanabe, S.}, + Author = {Alexander, M. J. and Geller, M. and McLandress, C. and et al.}, Doi = {10.1002/qj.637}, Eprint = {https://rmets.onlinelibrary.wiley.com/doi/pdf/10.1002/qj.637}, Journal = {Quarterly Journal of the Royal Meteorological Society}, @@ -2956,7 +3047,7 @@ @article{weinstock_1984 Bdsk-Url-2 = {http://dx.doi.org/10.1029/JA089iA01p00345}} @article{holton_1983, - Author = {Holton, James R.}, + Author = {Holton, J. R.}, Doi = {10.1175/1520-0469(1983)040<2497:TIOGWB>2.0.CO;2}, Eprint = {https://doi.org/10.1175/1520-0469(1983)040<2497:TIOGWB>2.0.CO;2}, Journal = {Journal of the Atmospheric Sciences}, @@ -2970,7 +3061,7 @@ @article{holton_1983 Bdsk-Url-2 = {http://dx.doi.org/10.1175/1520-0469(1983)040%3C2497:TIOGWB%3E2.0.CO;2}} @article{geller_et_al_2013, - Author = {Geller, M. A. and Alexander, M. Joan and Love, P. T. and Bacmeister, J. and Ern, M. and Hertzog, A. and Manzini, E. and Preusse, P. and Sato, K. and Scaife, A. A. and Zhou, T.}, + Author = {Geller, M. A. and Alexander, M. J. and Love, P. T. and et al.}, Doi = {10.1175/JCLI-D-12-00545.1}, Eprint = {https://doi.org/10.1175/JCLI-D-12-00545.1}, Journal = {Journal of Climate}, @@ -2998,23 +3089,23 @@ @article{garcia_et_al_2017 Bdsk-Url-2 = {http://dx.doi.org/10.1175/JAS-D-16-0104.1}} @inproceedings{yudin_et_al_2016, - Author = {Yudin, V.A. and Akmaev, R.A. and Fuller-Rowell, T.J. and Alpert, J.C.}, + Author = {Yudin, V. A. and Akmaev, R. A. and Fuller-Rowell, T. J. and Alpert, J. C.}, Booktitle = {International SPARC Gravity Wave Symposium}, Number = {1}, Pages = {012024}, - Title = {Gravity wave physics in the NOAA Environmental Modeling System}, + Title = {Gravity wave physics in the {NOAA} Environmental Modeling System}, Volume = {48}, Year = {2016}} @inproceedings{alpert_et_al_2018, - Author = {Alpert, Jordan C and Yudin, Valery and Fuller-Rowell, Tim and Akmaev, Rashid A}, + Author = {Alpert, J. C. and Yudin, V. A. and Fuller-Rowell, T. J. and Akmaev, R. A.}, Booktitle = {98th American Meteorological Society Annual Meeting}, Organization = {AMS}, - Title = {Integrating Unified Gravity Wave Physics Research into the Next Generation Global Prediction System for NCEP Research to Operations}, + Title = {Integrating Unified Gravity Wave Physics Research into the Next Generation Global Prediction System for {NCEP} Research to Operations}, Year = {2018}} @article{eckermann_2011, - Author = {Eckermann, Stephen D.}, + Author = {Eckermann, S. D.}, Doi = {10.1175/2011JAS3684.1}, Eprint = {https://doi.org/10.1175/2011JAS3684.1}, Journal = {Journal of the Atmospheric Sciences}, @@ -3042,22 +3133,22 @@ @article{lott_et_al_2012 Bdsk-Url-2 = {http://dx.doi.org/10.1029/2012GL051001}} @conference{yudin_et_al_2018, - Author = {Yudin, V. A and Akmaev, R. A. and Alpert, J. C. and Fuller-Rowell T. J., and Karol S. I.}, + Author = {Yudin, V. A. and Akmaev, R. A. and Alpert, J. C. and Fuller-Rowell T. J., and Karol S. I.}, Booktitle = {25th Conference on Numerical Weather Prediction}, Date-Added = {2018-06-04 10:50:44 -0600}, Date-Modified = {2018-06-04 10:54:39 -0600}, Editor = {Am. Meteorol. Soc.}, - Title = {Gravity Wave Physics and Dynamics in the FV3-based Atmosphere Models Extended into the Mesosphere}, + Title = {Gravity Wave Physics and Dynamics in the {FV3}-based Atmosphere Models Extended into the Mesosphere}, Year = {2018}} @article{hines_1997, - Author = {Colin O. Hines}, + Author = {C. O. Hines}, Doi = {https://doi.org/10.1016/S1364-6826(96)00080-6}, Issn = {1364-6826}, Journal = {Journal of Atmospheric and Solar-Terrestrial Physics}, Number = {4}, Pages = {387 - 400}, - Title = {Doppler-spread parameterization of gravity-wave momentum deposition in the middle atmosphere. Part 2: Broad and quasi monochromatic spectra, and implementation}, + Title = {Doppler-spread parameterization of gravity-wave momentum deposition in the middle atmosphere. {P}art {II}: Broad and quasi monochromatic spectra, and implementation}, Url = {http://www.sciencedirect.com/science/article/pii/S1364682696000806}, Volume = {59}, Year = {1997}, @@ -3079,7 +3170,7 @@ @article{alexander_and_dunkerton_1999 Bdsk-Url-2 = {http://dx.doi.org/10.1175/1520-0469(1999)056%3C4167:ASPOMF%3E2.0.CO;2}} @article{scinocca_2003, - Author = {Scinocca, John F.}, + Author = {Scinocca, J. F.}, Doi = {10.1175/1520-0469(2003)060<0667:AASNGW>2.0.CO;2}, Eprint = {https://doi.org/10.1175/1520-0469(2003)060<0667:AASNGW>2.0.CO;2}, Journal = {Journal of the Atmospheric Sciences}, @@ -3093,7 +3184,7 @@ @article{scinocca_2003 Bdsk-Url-2 = {http://dx.doi.org/10.1175/1520-0469(2003)060%3C0667:AASNGW%3E2.0.CO;2}} @article{shaw_and_shepherd_2009, - Author = {Shaw, Tiffany A. and Shepherd, Theodore G.}, + Author = {Shaw, T. A. and Shepherd, T. G.}, Doi = {10.1175/2009JAS3051.1}, Eprint = {https://doi.org/10.1175/2009JAS3051.1}, Journal = {Journal of the Atmospheric Sciences}, @@ -3112,7 +3203,7 @@ @article{molod_et_al_2015 Journal = {Geoscientific Model Development}, Number = {5}, Pages = {1339--1356}, - Title = {Development of the GEOS-5 atmospheric general circulation model: evolution from MERRA to MERRA2}, + Title = {Development of the {GEOS-5} atmospheric general circulation model: evolution from {MERRA} to {MERRA2}}, Url = {https://www.geosci-model-dev.net/8/1339/2015/}, Volume = {8}, Year = {2015}, @@ -3120,7 +3211,7 @@ @article{molod_et_al_2015 Bdsk-Url-2 = {http://dx.doi.org/10.5194/gmd-8-1339-2015}} @article{richter_et_al_2010, - Author = {Richter, Jadwiga H. and Sassi, Fabrizio and Garcia, Rolando R.}, + Author = {Richter, J. H. and Sassi, F. and Garcia, R. R.}, Doi = {10.1175/2009JAS3112.1}, Eprint = {https://doi.org/10.1175/2009JAS3112.1}, Journal = {Journal of the Atmospheric Sciences}, @@ -3134,14 +3225,14 @@ @article{richter_et_al_2010 Bdsk-Url-2 = {http://dx.doi.org/10.1175/2009JAS3112.1}} @article{richter_et_al_2014, - Author = {Richter, Jadwiga H. and Solomon, Abraham and Bacmeister, Julio T.}, + Author = {Richter, J. H. and Solomon, A. and Bacmeister, J. T.}, Doi = {10.1002/2013MS000303}, Eprint = {https://agupubs.onlinelibrary.wiley.com/doi/pdf/10.1002/2013MS000303}, Journal = {Journal of Advances in Modeling Earth Systems}, Keywords = {climate modeling, vertical resolution, modeling, climate, global circulation model, general circulation model}, Number = {2}, Pages = {357-383}, - Title = {Effects of vertical resolution and nonorographic gravity wave drag on the simulated climate in the Community Atmosphere Model, version 5}, + Title = {Effects of vertical resolution and nonorographic gravity wave drag on the simulated climate in the {C}ommunity {A}tmosphere {M}odel, version 5}, Url = {https://agupubs.onlinelibrary.wiley.com/doi/abs/10.1002/2013MS000303}, Volume = {6}, Year = {2014}, @@ -3149,13 +3240,14 @@ @article{richter_et_al_2014 Bdsk-Url-2 = {http://dx.doi.org/10.1002/2013MS000303}} @article{gelaro_et_al_2017, - Author = {Gelaro, et al.}, + Author = {R. Gelaro and W. McCarty and M. J. Suarez and R. Todling and et al.}, + Date-Modified = {2021-02-03 21:24:37 +0000}, Doi = {10.1175/JCLI-D-16-0758.1}, Eprint = {https://doi.org/10.1175/JCLI-D-16-0758.1}, Journal = {Journal of Climate}, Number = {14}, Pages = {5419-5454}, - Title = {The Modern-Era Retrospective Analysis for Research and Applications, Version 2 (MERRA-2)}, + Title = {The {M}odern-{E}ra {R}etrospective {A}nalysis for {R}esearch and {A}pplications, {V}ersion 2 ({MERRA-2})}, Url = {https://doi.org/10.1175/JCLI-D-16-0758.1}, Volume = {30}, Year = {2017}, @@ -3177,7 +3269,7 @@ @article{garcia_et_al_2007 Bdsk-Url-2 = {http://dx.doi.org/10.1029/2006JD007485}} @article{eckermann_et_al_2009, - Author = {Stephen D. Eckermann and Karl W. Hoppel and Lawrence Coy and John P. McCormack and David E. Siskind and Kim Nielsen and Andrew Kochenash and Michael H. Stevens and Christoph R. Englert and Werner Singer and Mark Hervig}, + Author = {Eckermann, S. D. and K. W. Hoppel and L. Coy and J. P. McCormack and D. E. Siskind and K. Nielsen and A. Kochenash and M. H. Stevens and C. R. Englert and W. Singer and M. Hervig}, Doi = {https://doi.org/10.1016/j.jastp.2008.09.036}, Issn = {1364-6826}, Journal = {Journal of Atmospheric and Solar-Terrestrial Physics}, @@ -3193,7 +3285,7 @@ @article{eckermann_et_al_2009 Bdsk-Url-2 = {https://doi.org/10.1016/j.jastp.2008.09.036}} @inproceedings{alpert_et_al_2019, - Author = {Alpert, Jordan C and Yudin, Valery A and Strobach, Edward}, + Author = {Alpert, J. C. and Yudin, V. A. and Strobach, E.}, Booktitle = {AGU Fall Meeting 2019}, Organization = {AGU}, Title = {Atmospheric Gravity Wave Sources Correlated with Resolved-scale GW Activity and Sub-grid Scale Parameterization in the FV3gfs Model}, @@ -3205,7 +3297,7 @@ @article{ern_et_al_2018 Journal = {Earth System Science Data}, Number = {2}, Pages = {857--892}, - Title = {GRACILE: a comprehensive climatology of atmospheric gravity wave parameters based on satellite limb soundings}, + Title = {{GRACILE}: a comprehensive climatology of atmospheric gravity wave parameters based on satellite limb soundings}, Url = {https://www.earth-syst-sci-data.net/10/857/2018/}, Volume = {10}, Year = {2018}, @@ -3213,48 +3305,22 @@ @article{ern_et_al_2018 Bdsk-Url-2 = {http://dx.doi.org/10.5194/essd-10-857-2018}} @inproceedings{yudin_et_al_2019, - Author = {Yudin V.A. , S. I. Karol, R.A. Akmaev, T. Fuller-Rowell, D. Kleist, A. Kubaryk, and C. Thompson}, + Author = {Yudin, V. A. and S. I. Karol and R. A. Akmaev and et al.}, Booktitle = {Space Weather Workshop}, Title = {Longitudinal Variability of Wave Dynamics in Weather Models Extended into the Mesosphere and Thermosphere}, Year = {2019}} -@article{kim_and_doyle_2005, - Author = {Y.-J. Kim and J.D. Arakawa}, - Doi = {10.1256/qj.04.160}, - Url = {https://doi.org/10.1256/qj.04.160}, - Journal = {Quarterly Journal of the Royal Meteorological Society}, - Pages = {1893-1921}, - Title = {Extension of an orographic-drag parametrization scheme to incorporate orographic inisotropy and flow blocking}, - Volume = {131}, - Year = {2005}} - -@article{steeneveld_et_al_2008, - Author = {Steeneveld, G. J.,A.A. M. Holtslag, C. J. Nappo, B. J. H. van de Wiel, and L. Mahrt}, - Doi = {10.1175/2008JAMC1816.1}, - Url = {https://doi.org/10.1175/2008JAMC1816.1}, - Journal = {J. Appl. Meteor.}, - Pages = {2518-2530}, - Title = {Exploring the possible role of small-scale terrain drag on stable boundary layers over land}, - Volume = {47}, - Year = {2008}} - -@article{tsiringakis_et_al_2017, - Author = {Tsiringakis,A., G. J. Steeneveld, and A.A. M. Holtslag}, - Doi = {10.1002/qj.3021}, - Url = {https://doi.org/10.1002/qj.3021}, - Journal = {Quarterly Journal of the Royal Meteorological Society}, - Pages = {1504-1516}, - Title = {Small-scale orographic gravity wave drag in stable boundary layers and its impact on synoptic systems and near-surface meteorology}, - Volume = {143}, - Year = {2017}} - -@article{beljaars_et_al_2004, - Author = {Beljaars, A.C.M., A.R.Brown, and N.Wood}, - Doi = {10.1256/qj.03.73}, - Url = {https://doi.org/10.1256/qj.03.73}, - Journal = {Quarterly Journal of the Royal Meteorological Society}, - Pages = {1327-1347}, - Title = {A new parametrization of turbulent orographic form drag}, - Volume = {130}, - Year = {2004}} - +@comment{BibDesk Static Groups{ + + + + + + group name + Group + keys + + + + +}} diff --git a/physics/docs/pdftxt/CPT_adv_suite.txt b/physics/docs/pdftxt/CPT_adv_suite.txt index 26d514d51..bc34cc1e6 100644 --- a/physics/docs/pdftxt/CPT_adv_suite.txt +++ b/physics/docs/pdftxt/CPT_adv_suite.txt @@ -18,13 +18,12 @@ The csawmg physics suite uses the parameterizations in the following order: - \ref GFS_SAMFshal - \ref CPT_MG3 - \ref mod_cs_conv_aw_adj - - \ref GFS_CALPRECIPTYPE \section sdf_cpt_suite Suite Definition File \code - + @@ -87,9 +86,9 @@ The csawmg physics suite uses the parameterizations in the following order: GFS_suite_stateout_update ozphys_2015 h2ophys - GFS_DCNV_generic_pre get_phi_fv3 GFS_suite_interstitial_3 + GFS_DCNV_generic_pre cs_conv_pre cs_conv cs_conv_post @@ -106,6 +105,7 @@ The csawmg physics suite uses the parameterizations in the following order: cs_conv_aw_adj GFS_MP_generic_post maximum_hourly_diagnostics + phys_tend diff --git a/physics/docs/pdftxt/CU_GF_deep.txt b/physics/docs/pdftxt/CU_GF_deep.txt new file mode 100644 index 000000000..a17b58d07 --- /dev/null +++ b/physics/docs/pdftxt/CU_GF_deep.txt @@ -0,0 +1,48 @@ +/** +\page CU_GF Grell-Freitas Scale and Aerosol Aware Convection Scheme +\section gfcu_descrip Description + +The Grell-Freitas (GF) scheme as described in Grell and Freitas (2014, GF1) \cite grell_and_freitas_2014 and +Freitas et al. (2018, FG) \cite freitas_et_al_2018 follow the mass flux approach published by Grell (1993) \cite grell_1993. +Further developments by Grell and \f$D\acute{e}v\acute{e}nyi\f$ (2002) \cite Grell_2002 included implementing +stochastics through allowing parameter perturbations. In GF1 scale awareness, and the aerosol dependence through rain generation (following +Berry (1968) \cite berry_1968 and evaporation formulations (following Jiang et al. (2010) \cite Jiang_2010 ), depending on the +cloud concentration nuclei at cloud base were added. FG included mixed phase physics impact, momentum transport (as in ECMWF), + a diurnal cycle closure (Bechtold et al. (2014) \cite bechtold_et_al_2014 ), and a trimodal spectral size to simulate the interaction +and transition from shallow, congestus and deep convection regimes. The vertical massflux distribution of shallow, congestus and +deep convection regimes is characterized by Probability Density Functions (PDF's). The three PDF's are meant to represent the average +statistical mass flux characteristic of deep, congestus, and shallow (respectively) plumes in the grid area. Each PDF therefore represents +a spectrum of plumes within the grid box. Forcing is different for each characteristic type. Entrainment and detrainment are derived +from the PDF's. The deep convection considers scale awareness (Arakawa et al. (2011) \cite Arakawa_2011 ), the congestus type convection +as well as the shallow convection are not scale-aware. Aerosol dependence is implemented through dependence of rain generation and +evaporation formulations depending on the cloud concentration nuclei at cloud base. Aerosol dependence is considered experimental and +is turned off at this point. GF is able to transport tracers. + +A paper describing the latest changes and modifications is in progress and will be submitted to GMD. + +\b Operational \b Impacts \b in \b RAP/HRRR + + - Uses mass-flux schemes, which are more physically realistic than (sounding) adjustment schemes + - Takes parameterization uncertainty into account by allowing parameters from multiple convective schemes which can be perturbed +internally or with temporal and spatial correlation patterns + - For higher resolutions (less than 10 km), in addition to scale awareness as in Arakawa et al. (2011) \cite Arakawa_2011 GF can +transition as grid spacing decreases into a shallow convection scheme + - Coupled to the grid scale precipitation and radiation schemes through passing of diagnosed cloud liquid and ice from simulated +precipitating convective cloud and shallow convective clouds + +\section intra_rough_gf Intraphysics Communication +The GF scheme passes cloud hydrometeors to the grid-scale microphysics scheme (\ref THOMPSON ) through detrainment from each +convective cloud layer containing convective cloud. The detrained condensate interacts with short- and longwave radiation by +contributing to the "opaqueness" to radiation of each grid layer. Additionally, detrained condensate is added to any existing condensate, +to be treated by the complex grid-scale microphysics scheme. This allows for a crude emulation of stratiform precipitation regions +in the RAP. + +Additionally, the shallow convection and PBL schemes pass cloud information to the radiation scheme, which improved cloud/radiation +interaction and retention of the inversion typically found above mixed layers. + +\ref arg_table_cu_gf_driver_run + +\section gen_gfgsd General Algorithm +\ref gen_gf_driver + +*/ diff --git a/physics/docs/pdftxt/GFS_NOAHMP.txt b/physics/docs/pdftxt/GFS_NOAHMP.txt new file mode 100644 index 000000000..7a3636b5f --- /dev/null +++ b/physics/docs/pdftxt/GFS_NOAHMP.txt @@ -0,0 +1,27 @@ +/** +\page NoahMP GFS NoahMP Land Surface Model +\section des_noahmp Description + +This implementation of the NoahMP Land Surface Model (LSM) is adapted from the version implemented in WRF v3.7 with additions by NOAA EMC staff to work with the UFS Atmosphere model. Authoritative documentation of the NoahMP scheme can be accessed at the following links: + +[University of Texas at Austin NoahMP Documentation](http://www.jsg.utexas.edu/noah-mp "University of Texas at Austin NoahMP Documentation") + +[NCAR Research Application Laboratory NoahMP Documentation](https://ral.ucar.edu/solutions/products/noah-multiparameterization-land-surface-model-noah-mp-lsm "NCAR RAL NoahMP Documentation") + +A primary reference for the NoahMP LSM is Niu et al. (2011) \cite niu_et_al_2011. + +The CCPP interface to the NoahMP LSM is a driving software layer on top of the actual NoahMP LSM. During the run sequence, code organization is as follows: ++ \ref noahmpdrv_run() calls + + \ref transfer_mp_parameters() + + \ref noahmp_options() + + \ref noahmp_options_glacier() and noahmp_glacier() if over the ice vegetation type (glacier) + + \ref noahmp_sflx() if over other vegetation types + + \ref penman() + +Note that noahmp_glacer() and noahmp_sflx() are the actual NoahMP codes. + +\section intra_noahmp Intraphysics Communication + + GFS NoahMP LSM Driver (\ref arg_table_noahmpdrv_run) +\section gen_al_noahmp General Algorithm of Driver ++ \ref general_noahmpdrv +*/ diff --git a/physics/docs/pdftxt/GFS_UGWPv0.txt b/physics/docs/pdftxt/GFS_UGWPv0.txt index e6ea3b6f4..82cd06f68 100644 --- a/physics/docs/pdftxt/GFS_UGWPv0.txt +++ b/physics/docs/pdftxt/GFS_UGWPv0.txt @@ -1,5 +1,5 @@ /** -\page GFS_UGWP_v0 CIRES Unified Gravity Wave Physics Scheme - Version 0 +\page GFS_UGWP_v0 Unified Gravity Wave Physics Scheme - Version 0 \section des_UGWP Description Gravity waves (GWs) are generated by a variety of sources in the atmosphere diff --git a/physics/docs/pdftxt/GFSv15p2_suite.txt b/physics/docs/pdftxt/GFSv15p2_suite.txt index 944fd49f1..d79cab076 100644 --- a/physics/docs/pdftxt/GFSv15p2_suite.txt +++ b/physics/docs/pdftxt/GFSv15p2_suite.txt @@ -21,113 +21,269 @@ The GFS_v15p2 physics suite uses the parameterizations in the following order: - \ref GFS_SAMFdeep - \ref GFS_SAMFshal - \ref GFDL_cloud - - \ref GFS_CALPRECIPTYPE \section sdf_gfsv15p2 Suite Definition File -- For NEMSIO initialization data: \subpage suite_FV3_GFS_v15p2_xml +\code + + + + + + + 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 + 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_GWD_generic_post + rayleigh_damp + GFS_suite_stateout_update + ozphys_2015 + h2ophys + get_phi_fv3 + GFS_suite_interstitial_3 + GFS_DCNV_generic_pre + samfdeepcnv + GFS_DCNV_generic_post + GFS_SCNV_generic_pre + samfshalcnv + 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 + phys_tend + + + + +\endcode + \section gfs15p2_nml_opt_des Namelist -- \b &gfs_physics_nml -\n \c fhzero = 6 -\n \c h2o_phys = .true. -\n \c ldiag3d = .false. -\n \c fhcyc = 24 -\n \c use_ufo = .true. -\n \c pre_rad = .false. -\n \c ncld = 5 -\n \c imp_physics = 11 -\n \c pdfcld = .false. -\n \c fhswr = 3600. -\n \c fhlwr = 3600. -\n \c ialb = 1 -\n \c iems = 1 -\n \c iaer = 111 -\n \c ico2 = 2 -\n \c isubc_sw = 2 -\n \c isubc_lw = 2 -\n \c isol = 2 -\n \c lwhtr = .true. -\n \c swhtr = .true. -\n \c cnvgwd = .true. -\n \c shal_cnv = .true. -\n \c cal_pre = .false. -\n \c redrag = .true. -\n \c dspheat = .true. -\n \c hybedmf = .true. -\n \c random_clds = .false. -\n \c trans_trac = .true. -\n \c cnvcld = .true. -\n \c imfshalcnv = 2 -\n \c imfdeepcnv = 2 -\n \c cdmbgwd = 3.5,0.25 [1.0,1.2] [0.2,2.5] [0.125,3.0] ! [C768] [C384] [C192] [C96]L64 -\n \c prslrd0 = 0. -\n \c ivegsrc = 1 -\n \c isot = 1 -\n \c debug = .false. -\n \c oz_phys = .F. -\n \c oz_phys_2015 = .T. -\n \c nstf_name = @[NSTF_NAME] -\n \c nst_anl = .true. -\n \c psautco = 0.0008,0.0005 -\n \c prautco = 0.00015,0.00015 -\n \c lgfdlmprad = .true. -\n \c effr_in = .true. -\n \c do_sppt = .false. -\n \c do_shum = .false. -\n \c do_skeb = .false. -\n \c do_sfcperts = .false. - -- \b &gfdl_cloud_microphysics_nml -\n \c sedi_transport = .true. -\n \c do_sedi_heat = .false. -\n \c rad_snow = .true. -\n \c rad_graupel = .true. -\n \c rad_rain = .true. -\n \c const_vi = .F. -\n \c const_vs = .F. -\n \c const_vg = .F. -\n \c const_vr = .F. -\n \c vi_max = 1. -\n \c vs_max = 2. -\n \c vg_max = 12. -\n \c vr_max = 12. -\n \c qi_lim = 1. -\n \c prog_ccn = .false. -\n \c do_qa = .true. -\n \c fast_sat_adj = .true. -\n \c tau_l2v = 225. -\n \c tau_v2l = 150. -\n \c tau_g2v = 900. -\n \c rthresh = 10.e-6 -\n \c dw_land = 0.16 -\n \c dw_ocean = 0.10 -\n \c ql_gen = 1.0e-3 -\n \c ql_mlt = 1.0e-3 -\n \c qi0_crt = 8.0E-5 -\n \c qs0_crt = 1.0e-3 -\n \c tau_i2s = 1000. -\n \c c_psaci = 0.05 -\n \c c_pgacs = 0.01 -\n \c rh_inc = 0.30 -\n \c rh_inr = 0.30 -\n \c rh_ins = 0.30 -\n \c ccn_l = 300. -\n \c ccn_o = 100. -\n \c c_paut = 0.5 -\n \c c_cracw = 0.8 -\n \c use_ppm = .false. -\n \c use_ccn = .true. -\n \c mono_prof = .true. -\n \c z_slope_liq = .true. -\n \c z_slope_ice = .true. -\n \c de_ice = .false. -\n \c fix_negative = .true. -\n \c icloud_f = 1 -\n \c mp_time = 150. - -\note nstf_name = \f$[2,0,0,0,0]^1 [2,1,0,0,0]^2 \f$ -- \f$^1\f$ NSST is on and coupled with spin up off -- \f$^2\f$ NSST is on and coupled with spin up on +\code +&gfs_physics_nml + cdmbgwd = 3.5,0.25 + cal_pre = .false. + cnvcld = .true. + cnvgwd = .true. + debug = .false. + do_myjpbl = .false. + do_myjsfc = .false. + do_sfcperts = .false. + do_shum = .false. + do_skeb = .false. + do_sppt = .false. + do_tofd = .false. + do_ugwp = .false. + do_ysu = .false. + dspheat = .true. + effr_in = .true. + fhcyc = 0.0 + fhlwr = 3600.0 + fhswr = 3600.0 + fhzero = 6.0 + h2o_phys = .true. + hybedmf = .true. + iaer = 111 + ialb = 1 + iau_inc_files = '' + ico2 = 2 + iems = 1 + imfdeepcnv = 2 + imfshalcnv = 2 + imp_physics = 11 + iopt_alb = 2 + iopt_btr = 1 + iopt_crs = 1 + iopt_dveg = 2 + iopt_frz = 1 + iopt_inf = 1 + iopt_rad = 1 + iopt_run = 1 + iopt_sfc = 1 + iopt_snf = 4 + iopt_stc = 1 + iopt_tbot = 2 + isol = 2 + isot = 1 + isubc_lw = 2 + isubc_sw = 2 + ivegsrc = 1 + ldiag3d = .false. + ldiag_ugwp = .false. + lgfdlmprad = .true. + lheatstrg = .false. + lsm = 1 + lwhtr = .true. + ncld = 5 + nsradar_reset = 3600 + nst_anl = .true. + nstf_name* = 2, 1, 0, 0, 0 + oz_phys = .false. + oz_phys_2015 = .true. + pdfcld = .false. + pre_rad = .false. + prslrd0 = 0.0 + random_clds = .false. + redrag = .true. + satmedmf = .false. + shal_cnv = .true. + shinhong = .false. + swhtr = .true. + trans_trac = .true. + use_ufo = .true. + xkzm_h = 1.0 + xkzm_m = 1.0 + xkzminv = 0.3 +/ + +&gfdl_cloud_microphysics_nml + sedi_transport = .true. + do_sedi_heat = .false. + rad_snow = .true. + rad_graupel = .true. + rad_rain = .true. + const_vi = .F. + const_vs = .F. + const_vg = .F. + const_vr = .F. + vi_max = 1. + vs_max = 2. + vg_max = 12. + vr_max = 12. + qi_lim = 1. + prog_ccn = .false. + do_qa = .true. + fast_sat_adj = .true. + tau_l2v = 225. + tau_v2l = 150. + tau_g2v = 900. + rthresh = 1e-05 + dw_land = 0.16 + dw_ocean = 0.10 + ql_gen = 1.0e-3 + ql_mlt = 1.0e-3 + qi0_crt = 8.0E-5 + qs0_crt = 1.0e-3 + tau_i2s = 1000. + c_psaci = 0.05 + c_pgacs = 0.01 + rh_inc = 0.30 + rh_inr = 0.30 + rh_ins = 0.30 + ccn_l = 300. + ccn_o = 100. + c_paut = 0.5 + c_cracw = 0.8 + use_ppm = .false. + use_ccn = .true. + mono_prof = .true. + z_slope_liq = .true. + z_slope_ice = .true. + de_ice = .false. + fix_negative = .true. + icloud_f = 1 + mp_time = 90. + +/ + +&cires_ugwp_nml + knob_ugwp_azdir = 2, 4, 4, 4 + knob_ugwp_doaxyz = 1 + knob_ugwp_doheat = 1 + knob_ugwp_dokdis = 1 + knob_ugwp_effac = 1, 1, 1, 1 + knob_ugwp_ndx4lh = 1 + knob_ugwp_solver = 2 + knob_ugwp_source = 1, 1, 0, 0 + knob_ugwp_stoch = 0, 0, 0, 0 + knob_ugwp_version = 0 + knob_ugwp_wvspec = 1, 25, 25, 25 + launch_level = 25 +/ + +&nam_sfcperts + iseed_sfc = 0 + nsfcpert = 6 + pertalb = -999.0 + pertlai = -999.0 + pertshc = -999.0 + pertvegf = -999.0 + pertz0 = -999.0 + pertzt = -999.0 + sfc_lscale = 500000 + sfc_tau = 21600 + sppt_land = .false. +/ + + +\endcode + +- nstf_name = \f$[2,0,0,0,0]^1 [2,1,0,0,0]^2 \f$ + - \f$^1\f$ NSST is on and coupled with spin up off + - \f$^2\f$ NSST is on and coupled with spin up on */ diff --git a/physics/docs/pdftxt/GFSv16beta_suite.txt b/physics/docs/pdftxt/GFSv16beta_suite.txt index 8389d0c40..eac420cd0 100644 --- a/physics/docs/pdftxt/GFSv16beta_suite.txt +++ b/physics/docs/pdftxt/GFSv16beta_suite.txt @@ -24,153 +24,252 @@ The GFS_v16beta physics suite uses the parameterizations in the following order: - \ref GFS_SAMFdeep - \ref GFS_SAMFshal - \ref GFDL_cloud - - \ref GFS_CALPRECIPTYPE \section sdf_gfsv16b Suite Definition File -- For NEMSIO initialization data: \subpage suite_FV3_GFS_v16beta_xml +\code + + + + + + + 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 + sfc_diag + sfc_diag_post + GFS_surface_generic_post + GFS_PBL_generic_pre + satmedmfvdifq + GFS_PBL_generic_post + GFS_GWD_generic_pre + cires_ugwp + cires_ugwp_post + GFS_GWD_generic_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 + 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 + + + + +\endcode -\section gfs16beta_nml_opt_des Namelist -- \b &gfs_physics_nml -\n \c fhzero = 6 -\n \c h2o_phys = .true. -\n \c ldiag3d = .false. -\n \c fhcyc = 24 -\n \c use_ufo = .true. -\n \c pre_rad = .false. -\n \c ncld = 5 -\n \c imp_physics = 11 -\n \c pdfcld = .false. -\n \c fhswr = 3600. -\n \c fhlwr = 3600. -\n \c ialb = 1 -\n \c iems = 1 -\n \c iaer = 5111 -\n \c icliq_sw = 2 -\n \c iovr_lw = 3 -\n \c iovr_sw = 3 -\n \c ico2 = 2 -\n \c isubc_sw = 2 -\n \c isubc_lw = 2 -\n \c isol = 2 -\n \c lwhtr = .true. -\n \c swhtr = .true. -\n \c cnvgwd = .true. -\n \c shal_cnv = .true. -\n \c cal_pre = .false. -\n \c redrag = .true. -\n \c dspheat = .true. -\n \c hybedmf = .false. -\n \c satmedmf = .true. -\n \c isatmedmf = 1 -\n \c lheatstrg = .true. -\n \c random_clds = .false. -\n \c trans_trac = .true. -\n \c cnvcld = .true. -\n \c imfshalcnv = 2 -\n \c imfdeepcnv = 2 -\n \c cdmbgwd = 4.0,0.15,1.0,1.0 [1.1,0.72,1.0,1.0] [0.23,1.5,1.0,1.0] [0.14,1.8,1.0,1.0] ! [C768] [C384] [C192] [C96]L64 -\n \c prslrd0 = 0. -\n \c ivegsrc = 1 -\n \c isot = 1 -\n \c lsoil = 4 -\n \c lsm = 1 -\n \c iopt_dveg = 1 -\n \c iopt_crs = 1 -\n \c iopt_btr = 1 -\n \c iopt_run = 1 -\n \c iopt_sfc = 1 -\n \c iopt_frz = 1 -\n \c iopt_inf = 1 -\n \c iopt_rad = 1 -\n \c iopt_alb = 2 -\n \c iopt_snf = 4 -\n \c iopt_tbot = 2 -\n \c iopt_stc = 1 -\n \c debug = .false. -\n \c oz_phys = .F. -\n \c oz_phys_2015 = .T. -\n \c nstf_name = @[NSTF_NAME] -\n \c nst_anl = .true. -\n \c psautco = 0.0008,0.0005 -\n \c prautco = 0.00015,0.00015 -\n \c lgfdlmprad = .true. -\n \c effr_in = .true. -\n \c ldiag_ugwp = .false. -\n \c do_ugwp = .false. -\n \c do_tofd = .true. -\n \c do_sppt = .false. -\n \c do_shum = .false. -\n \c do_skeb = .false. -\n \c do_sfcperts = .false. +\section gfs16beta_nml_opt_des Namelist + +\code +&gfs_physics_nml + fhzero = 6 + h2o_phys = .true. + ldiag3d = .false. + fhcyc = 24 + use_ufo = .true. + pre_rad = .false. + ncld = 5 + imp_physics = 11 + pdfcld = .false. + fhswr = 3600. + fhlwr = 3600. + ialb = 1 + iems = 1 + iaer = 5111 + icliq_sw = 2 + iovr_lw = 3 + iovr_sw = 3 + ico2 = 2 + isubc_sw = 2 + isubc_lw = 2 + isol = 2 + lwhtr = .true. + swhtr = .true. + cnvgwd = .true. + shal_cnv = .true. + cal_pre = .false. + redrag = .true. + dspheat = .true. + hybedmf = .false. + satmedmf = .true. + isatmedmf = 1 + lheatstrg = .true. + random_clds = .false. + trans_trac = .true. + cnvcld = .true. + imfshalcnv = 2 + imfdeepcnv = 2 + cdmbgwd = 4.0,0.15,1.0,1.0 + prslrd0 = 0. + ivegsrc = 1 + isot = 1 + lsoil = 4 + lsm = 1 + iopt_dveg = 1 + iopt_crs = 1 + iopt_btr = 1 + iopt_run = 1 + iopt_sfc = 1 + iopt_frz = 1 + iopt_inf = 1 + iopt_rad = 1 + iopt_alb = 2 + iopt_snf = 4 + iopt_tbot = 2 + iopt_stc = 1 + debug = .false. + oz_phys = .F. + oz_phys_2015 = .T. + nstf_name = @[NSTF_NAME] + nst_anl = .true. + psautco = 0.0008,0.0005 + prautco = 0.00015,0.00015 + lgfdlmprad = .true. + effr_in = .true. + ldiag_ugwp = .false. + do_ugwp = .false. + do_tofd = .true. + do_sppt = .false. + do_shum = .false. + do_skeb = .false. + do_sfcperts = .false. +/ -- \b &gfdl_cloud_microphysics_nml -\n \c sedi_transport = .true. -\n \c do_sedi_heat = .false. -\n \c rad_snow = .true. -\n \c rad_graupel = .true. -\n \c rad_rain = .true. -\n \c const_vi = .F. -\n \c const_vs = .F. -\n \c const_vg = .F. -\n \c const_vr = .F. -\n \c vi_max = 1. -\n \c vs_max = 2. -\n \c vg_max = 12. -\n \c vr_max = 12. -\n \c qi_lim = 1. -\n \c prog_ccn = .false. -\n \c do_qa = .true. -\n \c fast_sat_adj = .true. -\n \c tau_l2v = 225. -\n \c tau_v2l = 150. -\n \c tau_g2v = 900. -\n \c rthresh = 10.e-6 -\n \c dw_land = 0.16 -\n \c dw_ocean = 0.10 -\n \c ql_gen = 1.0e-3 -\n \c ql_mlt = 1.0e-3 -\n \c qi0_crt = 8.0E-5 -\n \c qs0_crt = 1.0e-3 -\n \c tau_i2s = 1000. -\n \c c_psaci = 0.05 -\n \c c_pgacs = 0.01 -\n \c rh_inc = 0.30 -\n \c rh_inr = 0.30 -\n \c rh_ins = 0.30 -\n \c ccn_l = 300. -\n \c ccn_o = 100. -\n \c c_paut = 0.5 -\n \c c_cracw = 0.8 -\n \c use_ppm = .false. -\n \c use_ccn = .true. -\n \c mono_prof = .true. -\n \c z_slope_liq = .true. -\n \c z_slope_ice = .true. -\n \c de_ice = .false. -\n \c fix_negative = .true. -\n \c icloud_f = 1 -\n \c mp_time = 150. -\n \c reiflag = 2 +&gfdl_cloud_microphysics_nml + sedi_transport = .true. + do_sedi_heat = .false. + rad_snow = .true. + rad_graupel = .true. + rad_rain = .true. + const_vi = .F. + const_vs = .F. + const_vg = .F. + const_vr = .F. + vi_max = 1. + vs_max = 2. + vg_max = 12. + vr_max = 12. + qi_lim = 1. + prog_ccn = .false. + do_qa = .true. + fast_sat_adj = .true. + tau_l2v = 225. + tau_v2l = 150. + tau_g2v = 900. + rthresh = 10.e-6 + dw_land = 0.16 + dw_ocean = 0.10 + ql_gen = 1.0e-3 + ql_mlt = 1.0e-3 + qi0_crt = 8.0E-5 + qs0_crt = 1.0e-3 + tau_i2s = 1000. + c_psaci = 0.05 + c_pgacs = 0.01 + rh_inc = 0.30 + rh_inr = 0.30 + rh_ins = 0.30 + ccn_l = 300. + ccn_o = 100. + c_paut = 0.5 + c_cracw = 0.8 + use_ppm = .false. + use_ccn = .true. + mono_prof = .true. + z_slope_liq = .true. + z_slope_ice = .true. + de_ice = .false. + fix_negative = .true. + icloud_f = 1 + mp_time = 150. + reiflag = 2 +/ +&cires_ugwp_nml + knob_ugwp_solver = 2 + knob_ugwp_source = 1,1,0,0 + knob_ugwp_wvspec = 1,25,25,25 + knob_ugwp_azdir = 2,4,4,4 + knob_ugwp_stoch = 0,0,0,0 + knob_ugwp_effac = 1,1,1,1 + knob_ugwp_doaxyz = 1 + knob_ugwp_doheat = 1 + knob_ugwp_dokdis = 1 + knob_ugwp_ndx4lh = 1 + knob_ugwp_version = 0 + launch_level = 27 +/ -- \b &cires_ugwp_nml -\n \c knob_ugwp_solver = 2 -\n \c knob_ugwp_source = 1,1,0,0 -\n \c knob_ugwp_wvspec = 1,25,25,25 -\n \c knob_ugwp_azdir = 2,4,4,4 -\n \c knob_ugwp_stoch = 0,0,0,0 -\n \c knob_ugwp_effac = 1,1,1,1 -\n \c knob_ugwp_doaxyz = 1 -\n \c knob_ugwp_doheat = 1 -\n \c knob_ugwp_dokdis = 1 -\n \c knob_ugwp_ndx4lh = 1 -\n \c knob_ugwp_version = 0 -\n \c launch_level = 27 +\endcode -\note nstf_name = \f$[2,0,0,0,0]^1 [2,1,0,0,0]^2\f$ -- \f$^1\f$ NSST is on and coupled with spin up off -- \f$^2\f$ NSST is on and coupled with spin up on +- nstf_name = \f$[2,0,0,0,0]^1 [2,1,0,0,0]^2\f$ + - \f$^1\f$ NSST is on and coupled with spin up off + - \f$^2\f$ NSST is on and coupled with spin up on */ diff --git a/physics/docs/pdftxt/GSD_adv_suite.txt b/physics/docs/pdftxt/GSD_adv_suite.txt index 1f2dbe7fa..4d986075b 100644 --- a/physics/docs/pdftxt/GSD_adv_suite.txt +++ b/physics/docs/pdftxt/GSD_adv_suite.txt @@ -16,23 +16,22 @@ The GSD_v1 physics suite uses the parameterizations in the following order: - \ref GFS_RRTMG - \ref GFS_SFCLYR - \ref GFS_NSST - - \ref GSD_RUCLSM - - \ref GSD_MYNNEDMF + - \ref RUCLSM + - \ref MYNNEDMF - \ref GFS_UGWP_v0 - \ref GFS_RAYLEIGH - \ref GFS_OZPHYS - \ref GFS_H2OPHYS - - \ref GSD_CU_GF + - \ref CU_GF - \ref cu_gf_deep_group - \ref cu_gf_sh_group - - \ref GSD_THOMPSON - - \ref GFS_CALPRECIPTYPE + - \ref THOMPSON \section sdf_gsdsuite Suite Definition File \code - + @@ -45,14 +44,14 @@ The GSD_v1 physics suite uses the parameterizations in the following order: GFS_suite_interstitial_rad_reset + sgscloud_radpre GFS_rrtmg_pre rrtmg_sw_pre - mynnrad_pre rrtmg_sw rrtmg_sw_post rrtmg_lw_pre rrtmg_lw - mynnrad_post + sgscloud_radpost rrtmg_lw_post GFS_rrtmg_post @@ -77,6 +76,9 @@ The GSD_v1 physics suite uses the parameterizations in the following order: sfc_nst sfc_nst_post lsm_ruc + lsm_ruc_sfc_sice_pre + sfc_sice + lsm_ruc_sfc_sice_post GFS_surface_loop_control_part2 @@ -94,9 +96,9 @@ The GSD_v1 physics suite uses the parameterizations in the following order: GFS_suite_stateout_update ozphys_2015 h2ophys - GFS_DCNV_generic_pre get_phi_fv3 GFS_suite_interstitial_3 + GFS_DCNV_generic_pre cu_gf_driver_pre cu_gf_driver GFS_DCNV_generic_post @@ -111,6 +113,7 @@ The GSD_v1 physics suite uses the parameterizations in the following order: GFS_MP_generic_post cu_gf_driver_post maximum_hourly_diagnostics + phys_tend diff --git a/physics/docs/pdftxt/MYNN_EDMF.txt b/physics/docs/pdftxt/MYNN_EDMF.txt new file mode 100644 index 000000000..aebe6b9fb --- /dev/null +++ b/physics/docs/pdftxt/MYNN_EDMF.txt @@ -0,0 +1,76 @@ +/** +\page MYNNEDMF MYNN-EDMF Boundary Layer and Shallow Cloud Scheme +\section mynnedmf_descrip Description + +The Mellor-Yamada-Nakanishi-Niino (Nakanishi and Niino 2009 \cite NAKANISHI_2009) eddy +diffusivity-mass flux (EDMF) scheme was implemented into CCPP to introduce an alternative +turbulent kinetic energy (TKE)-based planetary boundary layer (PBL) scheme which could +serve as a candidate PBL parameterization for future operational implementations of the Unified Forecast System. +The MYNN-EDMF is currently employed in NOAA's operational Rapid Refresh (RAP; Benjamin et al.2016 \cite Benjamin_2016) +and High-Resolution Rapid Refresh (HRRR) forecast systems. + +The original MYNN scheme was demonstrated to be an improvement over predecessor Mellor-Yamada-type +PBL schemes (e.g., Mellor and Yamada 1974,1982 \cite Mellor_1974 \cite Mellor_1982) when compared against large-eddy +simulation (LES) of a convective PBL (Nakanishi and Niino 2004, 2009 \cite Nakanishi_2004 \cite NAKANISHI_2009), the +prediction of advection fog (Nakanishi and Niino 2006 \cite Nakanishi_2006), and for the representation of coastal +barrier jets (Olson and Brown 2009 \cite olson_and_brown_2009). The MYNN scheme can be configured to function at either +level 2.5 or 3.0 closure and includes a partial-condensation scheme (also known as a cloud PDF or a statistical-cloud +scheme) to represent the effects of subgrid-scale(SGS) clouds on the buoyancy flux (Nakanishi and Niino 2004, 2006, and 2009 +\cite Nakanishi_2004 \cite Nakanishi_2006 \cite NAKANISHI_2009). The closure constants for the original MYNN scheme +were tuned to a database of LES as opposed to observational data. + +The MYNN-EDMF scheme has been extensively developed to improve upon the forecast skill of the original MYNN, +largely driven by requirements to improve forecast skill in support of the NOAA's National Weather Service (NWS), +the Federal Aviation Administration (FAA) and users within the renewable-energy industry.Specifically, fundamental +changes were made to the formulation of the mixing lengths and representation of subgrid-scale(SGS) clouds, but new components have also +been added to improve the representation of non-local mixing, the turbulence interaction with clouds, and the coupling to other +model components (i.e., radiation). A description of the changes to the MYNN scheme are available in Olson et al.(2019) +\cite olson_et_al_2019. + + +\section intra_mynnpbl Intraphysics Communication +- Cloud-Radiation Interaction + +\sa gsd_mynnrad_pre +\sa gsd_mynnrad_post + +The SGS clouds produced by the MYNN-EDMF scheme are coupled to the longwave and shortwave radiation schemes +if the namelist parameter \p icloud_bl is set to 1. In this case, the SGS cloud fraction, \p CLDFRA_BL, and the SGS +cloud-mixing ratio, \b QC_BL, are added to the microphysics arrays within the radiation driver (mynnrad_pre_run()). +The following two steps are performed: + +(1) the cloud fraction of the resolved-scale clouds are computed, using Xu and Randal (1996) \cite xu_and_randall_1996 +by default; + +(2) if the resolved-scale cloud liquid (\f$q_c\f$) or ice ( \f$q_i\f$), is less than \f$10^{-6}kg kg^{-1}\f$ and +\f$10^{-8}kg kg^{-1}\f$, respectively, and there exists a nonzero SGS cloud fraction, then the SGS components are +added to their respective resolved-scale components by a temperature weighting, according to linear approximation +of Hobbs et al.(1974) \cite HOBBS_1974 : +\f[ + W_{ice}=1-min(1,max(0,(T-254)/15)) + W_{h2o}=1-W_{ice} +\f] + +Then we sort the SGS cloud water and liquid as : + +\f$q_c\f$=QC_BL*\f$W_{h2o}\f$*CLDFRA_BL + +\f$q_i\f$=QC_BL*\f$W_{ice}\f$*CLDFRA_BL + +This allows us to only use one 3-D array for both SGS cloud water and ice. The updated \f$q_{c}\f$,\f$q_{i}\f$, and +\p CLDFRA are then used as input into the radiation schemes. After exiting the radiation schemes, the original +values of \f$q_c, q_i\f$ and \p CLDFRA are restored, so the SGS clouds do not impact the resolved-scale moisture budget. + + +The MYNN-EDMF CCPP-compliant interface: +\ref arg_table_mynnedmf_wrapper_run + +\section gen_mynnedmf_conv MYNN-EDMF Scheme General Algorithm + +\image html MYNN-EDMF_call_order.png "Figure 1.The order of subroutines within the MYNN-EDMF (Courtesy of J.B. Olson). The green rectangles within the main subroutine (mynn_bl_driver()) represent subroutine calls. The blue rectangles represent tasks coded within the main driver. A brief description is shown on the right " width=10cm + + +\ref gen_mynn_bl_driver + + +*/ diff --git a/physics/docs/pdftxt/MYNN_SFCLAYER.txt b/physics/docs/pdftxt/MYNN_SFCLAYER.txt new file mode 100644 index 000000000..301bdb5cd --- /dev/null +++ b/physics/docs/pdftxt/MYNN_SFCLAYER.txt @@ -0,0 +1,52 @@ +/** +\page SFC_MYNNSFL MYNN Surface Layer Scheme +\section mynnsfclayer_descrip Description + +The surface layer scheme controls the degree of coupling between the model surface and the atmosphere. +Traditionally, surface layer schemes have been developed to be paired with certain PBL schemes, but this +pairing is too narrow-scoped, since the surface layer physics should be equally as integrated with the +land-surface model (LSM), modern gravity wave drag suites, and wave models. The expansion of model complexity, +such as the inclusion of subgrid-scale landuse variations, vertically distributed sources of drag [i.e., wind +farm drag (Fitch et al. 2012 \cite fitch_et_al_2012 ), small-scale gravity wave drag (Steeneveld et al. 2008 \cite steeneveld_et_al_2008) and topographic form +drag (Beljaars et al. 2004) \cite beljaars_et_al_2004 ], requires that surface layer scheme be developed within a broader context so +assumptions made across all model components are physically consistent. + +The MYNN surface layer scheme was originally developed for the Mellor-Yamada-Nakanishi-Niino (MYNN)-Eddy Diffusivity-Mass +Flux (EDMF) scheme (Nakanishi and Niino 2009 \cite NAKANISHI_2009, Olson et al. 2019 \cite olson_et_al_2019) and has been used in NOAA's operational +Rapid Refresh (RAP; Benjamin et al. 2016 \cite Benjamin_2016 ) and High-Resolution Rapid Refresh (HRRR) forecast systems since 2014. During this time, the scheme has undergone significant development in tandem with other components of the +forecast systems. More recently, several new features have been added in order to accommodate different +capabilities in the Common Community Physics Package (CCPP) (Heinzeller et al. 2019). This updated version of the +surface layer scheme is a candidate to be used in the Rapid Refresh Forecast System (RRFS), which is a component of +NOAA's Unified Forecast System, and a successor to the RAP/HRRR forecast systems. + +The surface layer schemes in CCPP only compute transfer coefficients and pass them to other modules that +compute the surface fluxes and 2-m and 10-m diagnostics. Therefore, switches were added to bypass the calculation +of surface fluxes and diagnostics for typical use, but kept as an option to used in idealized model configurations. + +The surface layer physics represented by the scheme utilizes traditional Monin-Obukhov stability theory (MOST) +(Monin and Obukhov 1954 \cite monin_and_obukhov_1954 ), which is not novel, but still represents a respectable performance benchmark. This scheme +is built in a modular sense, which allows for flexible testing of a variety of different subcomponents within +the MOST-type bulk-flux algorithm. The specific subcomponents that exploit this modular design include the +specification of the surface roughness lengths, the scalar roughness lengths, and the flux-profile relationships +(a.k.a. stability functions). The configuration options for testing different forms of these subcomponents will +be discussed below. + +\section intra_mynnsfc Intraphysics Communication + +The surface-layer scheme is call directly after the radiation and prior to the surface modules (land-surface, sea-ice, and sea-surface temperature +models). The surface layer scheme and the surface modules collectively calculate the necessary input for the boundary-layer schemes (beyond the +basic state variables): u*, z/L, surface heat and moisture fluxes. + +\ref arg_table_mynnsfc_wrapper_run + +\section gen_mynnsfclay MYNN Surface Layer Scheme General Algorithm + +\image html MYNN-SFCLAY_call_order.png "Figure 1.The order of operations within the MYNN surface layer scheme (Courtesy of J.B. Olson)." width=10cm + +Within the MYNN surface layer scheme, there is a dependency check for the first timestep. If true, several arrays are initialized at every +i point. This is done because (1) some variables are calculated in schemes called after the surface layer call and (2) some variables are used within +iterative processes and may not be specified until later in the surface layer scheme. The main order of operations and hightlight relevant subroutines +in sfclay1d_mynn(). + + +*/ diff --git a/physics/docs/pdftxt/RRFS_SGSCLOUD.txt b/physics/docs/pdftxt/RRFS_SGSCLOUD.txt new file mode 100644 index 000000000..2f199c6ce --- /dev/null +++ b/physics/docs/pdftxt/RRFS_SGSCLOUD.txt @@ -0,0 +1,23 @@ +/** +\page SGSCLOUD_page Subgrid-scale Cloud Pre-radiation Interstitial +\section rrfs_sgscloud_descrip Description + +This interstitial module adds the subgrid-scale cloud information to the resolved-scale (microphysics) clouds. This procedure is required when using microphysics schemes that only produce clouds in fully saturated grid cells, like the Thompson microphysics scheme, and when using boundary layer and convection schemes that produce subgrid-scale cloud information (mixing ratio and cloud fraction). This allows the subgrid-scale cloud information to be assembled into the rest of the cloud information prior to calling the radiation schemes. + +\section intra_rrfssgs Intraphysics Communication +- sgscloud_radpre_run(): \ref arg_table_sgscloud_radpre_run + +\section gen_rrfssgs SGSCLOUD Pre-radiation Interstitial General Algorithm + +The order of procedures is outlined below: +\n 1) Back up the original qc and qi in "save arrays" qc_save and qi_save. +\n 2) Partition the condensate from the convection scheme into liquid and ice. +\n 3) Use Xu and Randall (1996) \cite xu_and_randall_1996 cloud fraction for the convection scheme subgrid clouds. Note that the MYNN-EDMF PBL scheme subgrid clouds input into this scheme are already partitioned into qc and qi and already have assigned cloud fractions. +\n 4) Add the subgrid cloud mixing ratio and cloud fraction to the original (resolved-scale) qc, qi and cloud fraction coming from the microphysics scheme. Note this information is only added to grid cells when resolved-scale clouds are below a very small threshold value. +\n 5) Recompute the diagnostic high, mid, low, total and boundary layer clouds to be consistent with the clouds seen by the radiation scheme. + +To provide a cloud fraction at t=0 (before the boundary layer or convection schemes are called), Xu and Randall (1996) \cite xu_and_randall_1996 cloud fraction is used. After the radiation schemes are called, module_SGSCloud_RadPost.F90 is called to restore the original qc and qi from qc_save and qi_save. + + + +*/ diff --git a/physics/docs/pdftxt/RRFS_v1alpha_suite.txt b/physics/docs/pdftxt/RRFS_v1alpha_suite.txt new file mode 100644 index 000000000..a3051a88b --- /dev/null +++ b/physics/docs/pdftxt/RRFS_v1alpha_suite.txt @@ -0,0 +1,210 @@ +/** +\page RRFS_v1alpha_page RRFS_v1alpha Suite + +\section RRFS_v1alpha_suite_overview Overview + +Suite RRFS_v1alpha is one of the supported suites for use in the UFS Short-Range Weather Application +(UFS SRW App). This suite is most applicable for runs at 3-km resolution since it does not parameterize +deep convection. + +The RRFS_v1alpha physics suite uses the parameterizations in the following order: + - \ref SGSCLOUD_page + - \ref GFS_RRTMG + - \ref GFS_SFCLYR + - \ref GFS_NSST + - \ref NoahMP + - \ref MYNNEDMF + - \ref GFS_UGWP_v0 + - \ref GFS_RAYLEIGH + - \ref GFS_OZPHYS + - \ref GFS_H2OPHYS + - \ref THOMPSON + +\section sdf_rrfssuite Suite Definition File +\code + + + + + + + GFS_time_vary_pre + GFS_rrtmg_setup + GFS_rad_time_vary + GFS_phys_time_vary + + + + + GFS_suite_interstitial_rad_reset + sgscloud_radpre + GFS_rrtmg_pre + rrtmg_sw_pre + rrtmg_sw + rrtmg_sw_post + rrtmg_lw_pre + rrtmg_lw + sgscloud_radpost + 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 + noahmpdrv + sfc_sice + GFS_surface_loop_control_part2 + + + + GFS_surface_composites_post + sfc_diag + sfc_diag_post + GFS_surface_generic_post + mynnedmf_wrapper + GFS_GWD_generic_pre + cires_ugwp + cires_ugwp_post + GFS_GWD_generic_post + rayleigh_damp + GFS_suite_stateout_update + ozphys_2015 + h2ophys + get_phi_fv3 + GFS_suite_interstitial_3 + GFS_suite_interstitial_4 + GFS_MP_generic_pre + mp_thompson_pre + mp_thompson + mp_thompson_post + GFS_MP_generic_post + maximum_hourly_diagnostics + + + + + GFS_stochastics + + + + +\encode + +\section rrfs_nml_option Namelist +\code +&gfs_physics_nml + bl_mynn_edmf = 1 + bl_mynn_edmf_mom = 1 + bl_mynn_tkeadvect = .true. + cal_pre = .false. + cdmbgwd = 3.5,0.25 + cnvcld = .false. + cnvgwd = .false. + cplflx = .false. + debug = .false. + do_deep = .false. + do_mynnedmf = .true. + do_mynnsfclay = .false. + do_sfcperts = .false. + do_shum = .false. + do_skeb = .false. + do_sppt = .false. + dspheat = .true. + effr_in = .true. + fhcyc = 0.0 + fhlwr = 1200.0 + fhswr = 1200.0 + fhzero = 1.0 + h2o_phys = .true. + hybedmf = .false. + iaer = 111 + ialb = 1 + iau_delthrs = 6 + iau_inc_files = '' + iaufhrs = 30 + icloud_bl = 1 + ico2 = 2 + iems = 1 + imfdeepcnv = -1 + imfshalcnv = -1 + imp_physics = 8 + iopt_alb = 2 + iopt_btr = 1 + iopt_crs = 1 + iopt_dveg = 2 + iopt_frz = 1 + iopt_inf = 1 + iopt_rad = 1 + iopt_run = 1 + iopt_sfc = 1 + iopt_snf = 4 + iopt_stc = 1 + iopt_tbot = 2 + isol = 2 + isot = 1 + isubc_lw = 2 + isubc_sw = 2 + ivegsrc = 1 + ldiag3d = .false. + lheatstrg = .false. + lradar = .true. + lsm = 2 + lsoil_lsm = 4 + ltaerosol = .true. + lwhtr = .true. + ncld = 5 + nsradar_reset = 3600 + nst_anl = .true. + nstf_name = 2,1,0,0,0 + oz_phys = .false. + oz_phys_2015 = .true. + pdfcld = .false. + pre_rad = .false. + prslrd0 = 0.0 + random_clds = .false. + redrag = .true. + satmedmf = .false. + shal_cnv = .false. + swhtr = .true. + trans_trac = .true. + ttendlim = -999 + use_ufo = .true. + +/ + +&cires_ugwp_nml + knob_ugwp_azdir = 2,4,4,4 + knob_ugwp_doaxyz = 1 + knob_ugwp_doheat = 1 + knob_ugwp_dokdis = 1 + knob_ugwp_effac = 1,1,1,1 + knob_ugwp_ndx4lh = 1 + knob_ugwp_solver = 2 + knob_ugwp_source = 1,1,0,0 + knob_ugwp_stoch = 0,0,0,0 + knob_ugwp_version = 0 + knob_ugwp_wvspec = 1,25,25,25 + launch_level = 25 + +/ +\endcode + + +*/ diff --git a/physics/docs/pdftxt/RUCLSM.txt b/physics/docs/pdftxt/RUCLSM.txt new file mode 100644 index 000000000..bf45ff4b3 --- /dev/null +++ b/physics/docs/pdftxt/RUCLSM.txt @@ -0,0 +1,100 @@ +/** +\page RUCLSM RUC Land Surface Model +\section ruclsm_descrip Description + +The land surface model (LSM) was originally developed as part of the NOAA Rapid Update Cycle (RUC) model development effort; with ongoing modifications, it is now used as an option for the WRF community model. The RUC model and its WRF-based NOAA successor, the Rapid Refresh (RAP) and High-Resolution Rapid Refresh (HRRR), are hourly updated and have an emphasis on short-range, near-surface forecasts including aviation-impact variables and pre-convective environment. Therefore, coupling to this LSM (hereafter the RUC LSM) has been critical to provide more accurate lower boundary conditions. + +The RUC LSM became operational at the NOAA/National Centers for Environmental Prediction (NCEP) first, as part of the RUC from 1998–2012, and then +as part of the RAP from 2012 through the present and as part of HRRR from 2014 through the present. The simple treatments of basic land surface +processes in the RUC LSM (Smirnova et al. 2016 \cite Smirnova_2016 ) have proven to be physically robust and capable of realistically representing +the evolution of soil moisture, soil temperature, and snow in cycled models. Extension of the RAP domain to encompass all of North America and +adjacent high-latitude ocean areas necessitated further development of the RUC LSM for application in the tundra permafrost regions and over Arctic +sea ice (Smirnova et al. 2000 \cite Smirnova_2000). Other modifications include refinements in the snow model and a more accurate specification of +albedo, roughness length, and other surface properties. These recent modifications in the RUC LSM are described and evaluated in +Smirnova et al. 2016 \cite Smirnova_2016 . + +The parameterizations in the RUC LSM describe complicated atmosphere–land surface interactions in an intentionally simplified fashion to avoid +excessive sensitivity to multiple uncertain surface parameters. Nevertheless, the RUC LSM, when coupled with the hourly-assimilating atmospheric model, +demonstrated over years of ongoing cycling (Benjamin et al. 2004a,b \cite Benjamin_2004a \cite Benjamin_2004b ; Berbery et al. 1999 \cite Berbery_1999) +that it can produce a realistic evolution of hydrologic and time-varying soil fields (i.e., soil moisture and temperature) that cannot be directly +observed over large areas, as well as the evolution of snow cover on the ground surface. This result is possible only if the soil–vegetation–snow +component of the coupled model, constrained only by atmospheric boundary conditions and the specification of surface characteristics, has sufficient +skill to avoid long-term drift. + +International projects for intercomparison of land surface and snow parameterization schemes were essential in providing the testing environment and +afforded an excellent opportunity to evaluate the RUC LSM with different land use and soil types and within a variety of climates. The RUC LSM was +included in phase 2(d) of the Project for the Intercomparison of Land Surface Prediction Schemes [PILPS-2(d)], in which tested models performed +18-yr simulations of the land surface state for the Valdai site in Russia (Schlosser et al. 1997 \cite Schlosser_1997 ; Slater et al. 2001 \cite Slater_2001 ;  +Luo et al. 2003 \cite Luo_2003 ). The RUC LSM was also tested during the Snow Models Intercomparison Project (SnowMIP, SnowMIP2, ESM-SnowMIP), +with emphasis on snow parameterizations for both grassland and forest locations in different parts of the world +(Etchevers et al. 2002, 2004 \cite Etchevers_2002 \cite Etchevers_2004; Essery et al. 2009 \cite Essery_2009 ; Rutter et al. 2009 \cite Rutter_2009 , +Krinner et al. 2018 \cite Krinner_2018 ). The analysis of RUC LSM performance over 10 reference sites in ESM-SnowMIP rated it on the 5th place +among the 26 participating models. + +In global application, RUC LSM is implemented in the Global Systems Division (GSD) physics suite for testing in the NOAA Next-Generation Global +Prediction System (NGGPS)- FV3-GSD suite. To specify surface characteristics, RUC LSM uses the Land Data Sets provided by NCEP for Global +Modeling Systems (see Figure 2 in \ref GFS_NOAH ) + +## RUC LSM characteristics that differ from NOAH LSM: +\image html ruc_lsm_veg_soil.png "Figure 1. RUC LSM Vegetation and Soil Model (Courtesy of T.G. Smirnova) " width=10cm +- \b Implicit \b solution of energy and moisture budgets in the layer spanning the ground surface +- \b 9 \b soil \b levels with high vertical resolution near surface +RUC LSM has more levels in oil than \ref GFS_NOAH model with higher resolution near the interface with the atmosphere +- \b Prognostic \b soil moisture variable (\f$\theta-\theta_r\f$) +The prognostic variables for soil moisture is volumetric soil moisture content minus residual value of soil moisture which is tied +to soil particles and does not participate in moisture transport. +- \b Frozen \b soil \b physics algorithm +RUC LSM has a different approach to take into account freezing and thawing processes in soil. +- Treatment of \b mixed \b phase \b precipitation +It accounts for mixed phase precipitation provided by \ref THOMPSON used in RAP and HRRR. +- Simple treatment of \b sea \c ice which solves heat diffusion in sea ice and allows evolving snow cover on top of sea ice +- sub-grid-scale \b heterogeneity of surface parameters in RUC LSM +With the certain level of confidence in the skill of the model, the next requirement is to provide land static fields and surface +parameters with the best possible accuracy. RAP and HRRR use the same datasets as \ref GFS_NOAH. But instead of specifying surface +parameters for the dominant soil and land-use category in the grid box, RUC LSM takes into account the sub-grid scale heterogeneity +in the computation of such parameters as roughness length, emissivity, soil porosity, soil heat capacity and others. The difference in +roughness between the mosaic and dominant category presented on figure 2 is positive from contribution of the forests, which helped to +reduce high biases of surface wind speeds in these regions. Roughness lenghth has also seasonal variability in the cropland regions, +which again helped to improve the wind forecasts during the warm season. +\image html ruc_lsm_heterogeneity.png "Figure 2: sub-grid scale heterogeneity of surface parameters in RUC LSM (Courtesy of T.G. Smirnova)" width=10cm + +- New: simple irrigation in the cropland area +- New: water/snow intercepted by canopy as function of vegetation fraction and leaf area index (LAI) + +## RUC snow model characteristics: +Snow forms additional two layers on top of soil in RUC LSM +- \b 2-layer \b snow model: when SWE < 1.6 cm - snow layer is combined with top soil layer +- Fractional snow cover (SWE < 3 cm): +- weighted average of snow-covered and snow-free areas to compute snow paramters (roughness, albedo) +- New: "mosaic" approach for patchy snow + - Seperate treatment of energy and moisture budgets for snow-covered and snow-free portions of the grid cell + - Aggregate solutions at the end of time step + - Reduced cold bias for areas with thin snow +\image html ruc_lsm_mosaic.png "Figure 3: recent development: mosaic approach for patchy snow (Courtesy of T.G. Smirnova) " width=10cm +- Iterative snow melting algorithm +- Density of snow on the ground - a function of compaction parameter and snow depth and temperature +- Snow albedo - a function of temperature and snow fraction +- Snow interception by canopy - a function of vegetation fraction and LAI +- Density of falling snow/graupel/ice precipitation + - The density of falling snow/graupel/ice is computed inside RUC LSM using empirical temperature-dependent equations; + - Averaged density of frozen precipitation is defined from weighted contribution of each hydrometeor species: +\f[ + \rho_{fr}=\rho_{sn}*\alpha_{sn}+\rho_{gr}*\alpha_{gr}+\rho_{ice}*\alpha_{ice} +\f] +- The depth of new snow is defined from its liquid equivalent and \f$\rho_{fr}\f$ +\image html ruc_lsm_frozen_precip.png "Figure 4: HRRR 23-h forecasts of snow accumulation, valid 08 UTC, 29 Dec 2015 (Courtesy of T.G. Smirnova)" width=10cm + +snow accumulation with variable density is provided as an additional product in the model guidance. Figure 4 shows one example of this product +from the 23-h HRRR forecast for snowstorm on 29 Dec 2015. This product is in the middle panel. The panel on the left uses traditional 10:1 ratio, +and the right panel is oberved snow accumulation. We can see that the new product in the middle here has a better, further north location of maximum +snow accumulation, and high ammounts of snow in the product with 10:1 ratio are trimmed in central and southern Iowa where both observed and model +precipitation had a high content of sleet. There is even larger improvement in the Chicago area, where observed and model precipitation were almost +totally sleet. + +\section intra_ruclsm Intraphysics Communication +\ref arg_table_lsm_ruc_run + +\section gen_ruclsm General Algorithm +\ref gen_lsmruc + +*/ diff --git a/physics/docs/pdftxt/THOMPSON.txt b/physics/docs/pdftxt/THOMPSON.txt new file mode 100644 index 000000000..8f16ce55b --- /dev/null +++ b/physics/docs/pdftxt/THOMPSON.txt @@ -0,0 +1,85 @@ +/** +\page THOMPSON Thompson Aerosol-Aware Microphysics Scheme +\section thompson_descrp Description + + +The RAP/HRRR microphysics implementation represents the most aggressive attempt to include explicit prediction of +cloud and precipitation microphysical processes in the NCEP operational forecast model suite. The RAP and HRRR are +important guidance to NWS aviation forecasts, and any microphysics improvements are aimed at least in part, to improve +that guidance. The scheme is particularly beneficial for aircraft icing forecasts. + +The scheme computes sources, sinks, and conversions for the mixing ratios of cloud water, rainwater, cloud ice, snow, +and graupel. Number concentration for cloud ice (particles per cubic meter) is also forecast, based on statistical relationships +of number concentration, density, and ice mass from recent observational studies. Since April 2014 (WRFv3.6), this is also the "aerosol-aware" scheme as described in +Thompson and Eidhammer (2014) \cite Thompson_2014 . + +The microphysical processes accounted for are shown in the graphic below: +\image html gsd_thompson.png "Figure 1: Complex Microphysics Model in the RAP" width=10cm + +Descriptions of these preocesses follow: +- \b Deposition: Diffusional growth of ice particles under conditions of vapor supersaturation with respect to ice. +Growth is "aerosol-aware", meaning the number of ice-friendly nulei and ice crystals is estimated by the microphysics scheme. +Deposition of ice is estimated using the properties of these ice-friendly aerosols. Latent heat associated with the phase +change from vapor to ice is released to the atmosphere. + +- \b Sublimation: Diffusional shrinkage of ice particles under conditions of vapor subsaturation with respect to ice. +The effect of aerosols on the sublimation process is estimated. Latent heat associated with the phase change from ice +to vapor is removed from the atmosphere. + +- \b Riming: Rapid freezing of supercooled cloud-size drops as a result of collisions with frozen precipitation particles, +or foreign objects with sub \f$0^{o}C\f$ surface temperatures, such as airplane wings. Latent heat of freezing is released +to the atmosphere during the process. + +- \b Evaporation: Process by which liquid is transformed into the gaseous state. The evaporation process is "aerosol-aware" +through estimation of aerosol impacts. Latent heat is removed from the atmosphere and stored in water vapor during this process. + +- \b Condensation: Process by which vapor is transformed into a liquid state. The impact of aerosols on condensation is estimated. +latent heat is released into the atmosphere during this process. + +- \b Ice \b multiplication: Formation of small ice particles as a result of freezing of supercooled cloud or raindrops. Ice multiplication occurs only under very restrictive conditions, but can be a large source of ice particles when these conditions are met. + +- \b Aggregation/autoconversion \b of \b snow: Process through which frozen precipitation particles grow by collision and the assimilation of cloud particles or other precipitation particles. The autoconversion rate increases as ambient temperatures rise toward freezing. + +- \b Accretion/autoconversion \b of \b cloud \b liquid: Process through which some cloud drops grow to become raindrops by collision and the assimilation of cloud drops. + +- \b Supercooled \b water \b formation: Liquid cloud particles that remain in their liquid state despite being cooled below the freezing point of water. + +The scheme also assumes precipitation particle-size distributions for the three predicted precipitation types: rain, snow, and graupel. +These size distributions are requied to emulate growth of precipitation by accretion of cloud-size particles, coalescence with other +precipitation particles, and fall speeds of precipitation hydrometeors. The rainwater fall speed depends on the rainwater mixing ratio, +with small values associated with fall speeds (and allowing the model to parameterize the behavior) of drizzle. The forecast precipitation +type is based on what prognostic precipitation type actually reaches the surface (Benjamin et al.(2016) \cite Benjamin_2016b ) + +# Advantages of the Thompson Scheme and Updating Cloud Fields +Some of the more general advantages of the upgraded MP scheme implementation in the RAP on the model's cloud and precipitation +forecasts are listed below. + +- Includes five hydrometeor types and their interactions, plus a sixth forecast variable for cloud ice number concentration. Drizzle +is parameterized through using low fall velocities when there are low rain mixing ratios. + +- Includes impact of types of aerosol on condensation of water/deposition of ice + +- Accounts for horizontal and vertical advection of hydrometeors + +- Allows for more accurate prediction of precipitation in the form of snow, because slow fall velocities give time for snow to +advect between grid columns + +- Includes cloud ice sedimentation, which positively influences RH and cloud forecasts + +- Because the scheme is a relatively complete mixed-phase scheme, it can account for the formation of supercooled water, a prerequisite +for the model to provide useful guidance for aircraft icing forecasts + +- Can account for cloud phase changes and provides a sound physical basis for diagnosing precipitation type reaching the ground + + + +\section intra_thompson Intraphysics Communication +\ref arg_table_mp_thompson_run + +\section g_thompson General Algorithm +- \ref gen_thompson_init +- \ref gen_thompson_hrrr +- \ref gen_mpgtdriver +- \ref gen_mp_thompson + +*/ diff --git a/physics/docs/pdftxt/all_shemes_list.txt b/physics/docs/pdftxt/all_shemes_list.txt index 4d7d08e90..03b2ccd9b 100644 --- a/physics/docs/pdftxt/all_shemes_list.txt +++ b/physics/docs/pdftxt/all_shemes_list.txt @@ -3,111 +3,124 @@ \section allscheme_overview Physical Parameterizations -In the CCPP, each parameterization is in its own modern Fortran module, which facilitates model development and -code maintenance. While some individual parameterization can be invoked for the SCM, most users will assemble the -parameterizations in suites. - -- \b Radiation - - \subpage GFS_RRTMG - -- \b PBL \b and \b Turbulence - - \subpage GFS_HEDMF - - \subpage GFS_SATMEDMF - - \subpage GFS_SATMEDMFVDIFQ - - \subpage GSD_MYNNEDMF - -- \b Land \b Surface \b Model - - \subpage GFS_NOAH - - \subpage GSD_RUCLSM - - \subpage NoahMP - -- \b Cumulus \b Parameterizations - - \subpage GFS_SAMF - - \subpage GFS_SAMFdeep - - \subpage GFS_SAMFshal - - \subpage CSAW_scheme - - \subpage GSD_CU_GF - - \ref cu_gf_deep_group - - \ref cu_gf_sh_group - -- \b Microphysics - - \subpage GFDL_cloud - - \subpage CPT_MG3 - - \subpage GSD_THOMPSON - -- \b Ozone \b Photochemical \b Production \b and \b Loss - - \subpage GFS_OZPHYS - -- \b Water \b Vapor \b Photochemical \b Production \b and \b Loss - - \subpage GFS_H2OPHYS - -- \b Gravity \b Wave \b Drag - - \subpage GFS_UGWP_v0 - - \subpage GFS_GWDPS - -- \b Surface \b Layer \b and \b Simplified \b Ocean \b and \b Sea \b Ice \b Representation - - \subpage GFS_SFCLYR - - \subpage GFS_NSST - - \subpage GFS_OCEAN - - \subpage GFS_SFCSICE - -- \b Others - - \subpage GFS_RAYLEIGH - - \subpage GFS_CALPRECIPTYPE - -In addition to the physical schemes themselves, this scientific documentation also covers four modules that define physics/radiation functions, parameters and constants: - - \ref func_phys - - \ref phy_sparam - - \ref physcons - - \ref radcons - -The input information for the physics include the values of the gridbox mean prognostic variables (wind components, temperature, +In the CCPP, each parameterization is in its own modern Fortran module (i.e., CCPP-compliant; see rules for scheme to considered CCPP-compliant at + CCPP-Compliant Physics Parameterizations ), +which facilitates model development and code maintenance. Additionally, we are listing any pre- and post- interstitials that must accompany the scheme. While some individual parameterization can be invoked for the SCM, most host models will assemble the parameterizations in suites. + + +\b Radiation + - \subpage GFS_RRTMG + + CCPP-compliant modules: rrtmg_sw_pre / rrtmg_sw / rrtmg_sw_post / rrtmg_lw_pre / rrtmg_lw / rrtmg_lw_post / dcyc2t3 + - \subpage SGSCLOUD_page + + CCPP-compliant module: sgscloud_radpre + +\b PBL \b and \b Turbulence + - \subpage GFS_HEDMF + + CCPP-compliant module: \ref hedmf + - \subpage GFS_SATMEDMFVDIFQ + + CCPP-compliant module: \ref satmedmfvdifq + - \subpage MYNNEDMF + + CCPP-compliant module: mynnedmf_wrapper + +\b Land \b Surface \b Model + - \subpage GFS_NOAH + + CCPP-compliant module: lsm_noah + - \subpage RUCLSM + + CCPP-compliant module: lsm_ruc + - \subpage NoahMP + + CCPP-compliant module: \ref noahmpdrv + +\b Cumulus \b Parameterizations + - \subpage GFS_SAMFdeep + + CCPP-compliant module: \ref samfdeepcnv + - \subpage GFS_SAMFshal + + CCPP-compliant module: \ref samfshalcnv + - \subpage CSAW_scheme + + CCPP-compliant modules: cs_conv_pre / cs_conv / cs_conv_post / cs_conv_aw_adj + - \subpage CU_GF + + CCPP-compliant modules: \ref cu_gf_driver_pre / cu_gf_driver + +\b Microphysics + - \subpage GFDL_cloud + + CCPP-compliant modules: fv_sat_adj / gfdl_cloud_microphys + - \subpage CPT_MG3 + + CCPP-compliant modules: \ref m_micro_pre / m_micro / \ref m_micro_post + - \subpage THOMPSON + + CCPP-compliant modules: mp_thompson_pre / mp_thompson / mp_thompson_post + +\b Ozone \b Photochemical \b Production \b and \b Loss + - \subpage GFS_OZPHYS + + CCPP-compliant module: ozphys_2015 + +\b Water \b Vapor \b Photochemical \b Production \b and \b Loss + - \subpage GFS_H2OPHYS + + CCPP-compliant module: h2ophys + +\b Gravity \b Wave \b Drag + - \subpage GFS_UGWP_v0 + + CCPP-compliant modules: cires_ugwp / cires_ugwp_post + +\b Surface \b Layer + - \subpage GFS_SFCLYR + + CCPP-compliant module: sfc_diff + +\b Simplified \b Ocean \b and \b Sea \b Ice \b Representation + - \subpage GFS_NSST + + CCPP-compliant modules: sfc_nst_pre / sfc_nst / sfc_nst_post + - \subpage GFS_OCEAN + + CCPP-compliant module: sfc_ocean + - \subpage GFS_SFCSICE + + CCPP-compliant module: sfc_sice + +\b Others + - \subpage GFS_RAYLEIGH + + CCPP-compliant module: rayleigh_damp + +The input information for the parameterizations includes the values of the gridbox mean prognostic variables (wind components, temperature, specific humidity, cloud fraction, water contents for cloud liquid, cloud ice, rain, snow, graupel, and ozone concentration), the provisional dynamical tendencies for the same variables and various surface fields, both fixed and variable. The time integration of the physics suites is based on the following: -- The tendencies from the different physical processes are computed by the parameterizations or derived in separate interstitial routines +- The tendencies from the different physical processes are computed by the parameterizations or derived in separate interstitial routines. - The first part of the suite, comprised of the parameterizations for radiation, surface layer, surface (land, ocean, and sea ice), boundary layer, -orographic gravity wave drag, and Rayleigh damping, is computed using a hybrid of parallel and sequential splitting described in Donahue and Caldwell(2018) +and Rayleigh damping, is computed using a hybrid of parallel and sequential splitting described in Donahue and Caldwell (2018) \cite donahue_and_caldwell_2018, a method in which the various parameterizations use the same model state as input but are impacted by the preceding parameterizations. The tendencies from the various parameterizations are then added together and used to update the model state. -- The surface parameterizations (land, ocean and sea ice) are invoked twice in a loop, with the first time to create a guess, and the second time to +- The surface parameterizations (land, ocean and sea ice) are invoked twice in a subcycling loop, with the first time to create a guess, and the second time to produce the tendencies. -- The second part of the physics suite, comprised of the parameterizations of ozone, stratospheric water vapor, deep convection, convective gravity wave drag, -shallow convection, and microphysics, is computed using sequential splitting in the order listed above, in which the model state is updated between calls +- The second part of the physics suite, comprised of the parameterizations of gravity wave physics, ozone, stratospheric water vapor, deep and shallow convection (if using), + and microphysics, is computed using sequential splitting in the order listed above, in which the model state is updated between calls to the parameterization. - If the in-core saturation adjustment is used (\p do_sat_adj=.true.), it is invoked at shorter timesteps along with the dynamical solver. \section allsuite_overview Physics Suites -The CCPP includes the suite GFS_v15p2, which has the same parameterizations used in the GFS v15 implemented operationally in June 2019, and suite -GFS_v16beta, i.e., the beta version of the suite planned for GFS v16 to be implemented operationally in 2021. Suite GFS_v16beta is identical to -Suite GFS_v15p2 except for an update in the PBL parameterization (Han et al. 2019 \cite Han_2019 ). Additionally, CCPP v4 includes two -developmental suites which are undergoing testing to inform future implementations of the UFS. Suite csawmg differs from GFS_v15p2 as it -contains different convection and microphysics schemes made available through a NOAA Climate Process Team (CPT) with components developed -at multiple research centers and universities, including Colorado State, Utah, NASA, NCAR, and EMC. Suite GSD_v1 differs from GFS_v15p2 as it -uses the convection, microphysics, and boundary layer schemes employed in the Rapid Refresh (RAP) and High-Resolution Rapid Refresh (HRRR \cite Benjamin_2016 ) -operational models and was assembled by NOAA/GSD. An assessment of an earlier version of these suites can be found in - the UFS portal -and in the DTC website . Two variant suites labelled as \a no_nsst are simplification of GFS_v15p2 and GFS_v16beta. -This simplification is needed when the UFS is initialized with files in GRIdded Binary Edition 2 (GRIB2) format instead of files in NOAA Environmental Modeling -System (NEMS) Input/Output (NEMSIO) format because the fields necesary to predict (SST) are not available in the GRIB2 files. +There are two publicly supported host models that use CCPP v5: the UFS Weather Model used in the Short Range Weather Application (SRW App) and the +CCPP Single Column Model (SCM). The SRW App supports the use of suites GFS_v15p2 and RRFS_v1alpha, while the SCM supports the use of suites +GFS_v15p2, GFS_v16beta, RRFS_v1alpha, csawmg and GSD_v1. Suite GFS_v15p2 is an operational suite that invokes the parameterizations used in the GFS v15 +implemented operationally in June 2019. Other suites are experimental, and targeted for future UFS operational implementations. It should be noted +that suite RRFS_v1alpha does not include a convective parameterization scheme and is targeted for convective-allowing resolutions of 3-km grid +spacing. The other suites are primarily targeted for medium-range weather and subseasonal-to-seasonal scales of grid spacing 13-km and coarser. +The forcing datasets included in the CCPP SCM v5.0 public release were created by averaging observations and large-eddy simulations over seas that are +too coarse to resolve convection. Therefore, best results will be obtained with be obtained with the CCPP SCM v5.0 when using suites that include parameterized +convection. Table 1. Physics suite options included in this documentation. \tableofcontents -| Physics suites | GFS_v15p2 | GFS_v16beta | csawmg | GSD_v1 | GFS_v15p2_no_nsst | GFS_v16beta_no_nsst | -|------------------|----------------------|--------------------------|---------------------|---------------------------------------------|-------------------------|---------------------------| -| Deep Cu | \ref GFS_SAMFdeep | \ref GFS_SAMFdeep | \ref CSAW_scheme | \ref GSD_CU_GF | \ref GFS_SAMFdeep | \ref GFS_SAMFdeep | -| Shallow Cu | \ref GFS_SAMFshal | \ref GFS_SAMFshal | \ref GFS_SAMFshal | \ref GSD_MYNNEDMF and \ref cu_gf_sh_group | \ref GFS_SAMFshal | \ref GFS_SAMFshal | -| Microphysics | \ref GFDL_cloud | \ref GFDL_cloud | \ref CPT_MG3 | \ref GSD_THOMPSON | \ref GFDL_cloud | \ref GFDL_cloud | -| PBL/TURB | \ref GFS_HEDMF | \ref GFS_SATMEDMFVDIFQ | \ref GFS_HEDMF | \ref GSD_MYNNEDMF | \ref GFS_HEDMF | \ref GFS_SATMEDMFVDIFQ | -| Radiation | \ref GFS_RRTMG | \ref GFS_RRTMG | \ref GFS_RRTMG | \ref GFS_RRTMG | \ref GFS_RRTMG | \ref GFS_RRTMG | -| Surface Layer | \ref GFS_SFCLYR | \ref GFS_SFCLYR | \ref GFS_SFCLYR | \ref GFS_SFCLYR | \ref GFS_SFCLYR | \ref GFS_SFCLYR | -| Land | \ref GFS_NOAH | \ref GFS_NOAH | \ref GFS_NOAH | \ref GSD_RUCLSM | \ref GFS_NOAH | \ref GFS_NOAH | -| Gravity Wave Drag| \ref GFS_UGWP_v0 | \ref GFS_UGWP_v0 | \ref GFS_UGWP_v0 | \ref GFS_UGWP_v0 | \ref GFS_UGWP_v0 | \ref GFS_UGWP_v0 | -| Ocean | \ref GFS_NSST | \ref GFS_NSST | \ref GFS_NSST | \ref GFS_NSST | \ref GFS_OCEAN | \ref GFS_OCEAN | -| Ozone | \ref GFS_OZPHYS | \ref GFS_OZPHYS | \ref GFS_OZPHYS | \ref GFS_OZPHYS | \ref GFS_OZPHYS | \ref GFS_OZPHYS | -| Water Vapor | \ref GFS_H2OPHYS | \ref GFS_H2OPHYS | \ref GFS_H2OPHYS | \ref GFS_H2OPHYS | \ref GFS_H2OPHYS | \ref GFS_H2OPHYS | +| Physics suites | GFS_v15p2 | GFS_v16beta | csawmg | GSD_v1 | RRFS_v1alpha | +|------------------|----------------------|--------------------------|---------------------|---------------------------------------------|--------------------| +| HOST Model | SCM, SRW | SCM | SCM | SCM | SCM, SRW | +| Deep Cu | \ref GFS_SAMFdeep | \ref GFS_SAMFdeep | \ref CSAW_scheme | \ref CU_GF | \a off | +| Shallow Cu | \ref GFS_SAMFshal | \ref GFS_SAMFshal | \ref GFS_SAMFshal | \ref MYNNEDMF and \ref cu_gf_sh_group | \ref MYNNEDMF | +| Microphysics | \ref GFDL_cloud | \ref GFDL_cloud | \ref CPT_MG3 | \ref THOMPSON | \ref THOMPSON | +| PBL/TURB | \ref GFS_HEDMF | \ref GFS_SATMEDMFVDIFQ | \ref GFS_HEDMF | \ref MYNNEDMF | \ref MYNNEDMF | +| Radiation | \ref GFS_RRTMG | \ref GFS_RRTMG | \ref GFS_RRTMG | \ref GFS_RRTMG | \ref GFS_RRTMG and \ref SGSCLOUD_page | +| Surface Layer | \ref GFS_SFCLYR | \ref GFS_SFCLYR | \ref GFS_SFCLYR | \ref GFS_SFCLYR | \ref GFS_SFCLYR | +| Land | \ref GFS_NOAH | \ref GFS_NOAH | \ref GFS_NOAH | \ref RUCLSM | \ref NoahMP | +| Gravity Wave Drag| \ref GFS_UGWP_v0 | \ref GFS_UGWP_v0 | \ref GFS_UGWP_v0 | \ref GFS_UGWP_v0 | \ref GFS_UGWP_v0 | +| Ocean | \ref GFS_NSST or \ref GFS_OCEAN | \ref GFS_NSST or \ref GFS_OCEAN | \ref GFS_NSST | \ref GFS_NSST | \ref GFS_NSST | +| Ozone | \ref GFS_OZPHYS | \ref GFS_OZPHYS | \ref GFS_OZPHYS | \ref GFS_OZPHYS | \ref GFS_OZPHYS | +| Water Vapor | \ref GFS_H2OPHYS | \ref GFS_H2OPHYS | \ref GFS_H2OPHYS | \ref GFS_H2OPHYS | \ref GFS_H2OPHYS | \tableofcontents diff --git a/physics/docs/pdftxt/all_shemes_list.txt.FV3 b/physics/docs/pdftxt/all_shemes_list.txt.FV3 index 9294027dd..4ddef249b 100644 --- a/physics/docs/pdftxt/all_shemes_list.txt.FV3 +++ b/physics/docs/pdftxt/all_shemes_list.txt.FV3 @@ -5,7 +5,7 @@ In the CCPP-Physics v3.0 release, each parameterization is in its own modern Fortran module, which facilitates model development and -code maintenance. While some individual parameterization can be invoked for the GMTB SCM, most users will assemble the +code maintenance. While some individual parameterization can be invoked for the CCPP SCM, most users will assemble the parameterizations in suites. - Radiation @@ -32,11 +32,11 @@ parameterizations in suites. - Microphysics - \subpage GFDL_cloud - - \subpage fast_sat_adj (not available for the GMTB SCM) + - \subpage fast_sat_adj (not available for the CCPP SCM) - \subpage CPT_MG3 - \subpage GSD_THOMPSON -- Stochastic (not available for the GMTB SCM) +- Stochastic (not available for the CCPP SCM) - \subpage STOCHY_PHYS - \subpage surf_pert (only applicable to \ref GFS_NOAH ) diff --git a/physics/docs/pdftxt/code_overview.txt b/physics/docs/pdftxt/code_overview.txt index 8c13db7a9..9399fa263 100644 --- a/physics/docs/pdftxt/code_overview.txt +++ b/physics/docs/pdftxt/code_overview.txt @@ -2,7 +2,7 @@ \page subpage_overview Overview of the Code In the CCPP-Physics v2 code, each parameterization is placed in its own modern Fortran module, which facilitates model development and -code maintenance. While some individual parameterization can be invoked for GMTB SCM, most users will assemble the +code maintenance. While some individual parameterization can be invoked for CCPP SCM, most users will assemble the parameterizations in suites. The parameterizations contained in CCPP-Physics v2 can be used to run two suites: FV3GFS default (with GFDL cloud microphysics) and GFS with Zhao-Carr microphysics. diff --git a/physics/docs/pdftxt/code_overview.txt.Aug17 b/physics/docs/pdftxt/code_overview.txt.Aug17 index 3ca89fcdb..ebe1f6c2b 100644 --- a/physics/docs/pdftxt/code_overview.txt.Aug17 +++ b/physics/docs/pdftxt/code_overview.txt.Aug17 @@ -1,7 +1,7 @@ /** \page subpage_overview Overview of the Code -The GFS physics parameterization suite is called by GMTB-SCM or FV3 after the explicit dynamical computations. The +The GFS physics parameterization suite is called by CCPP-SCM or FV3 after the explicit dynamical computations. The physics computations are performed only in the vertical. The input information for the physics consists of the values of the gridbox mean prognostic variables (wind components \f$u/v\f$, temperature \f$T\f$, specific humidity \f$q\f$, cloud fraction \f$q_a\f$, water contents for cloud liquid \f$q_l\f$, cloud ice \f$q_i\f$, rain \f$q_r\f$, snow \f$q_s\f$, graupel diff --git a/physics/docs/pdftxt/mainpage.txt b/physics/docs/pdftxt/mainpage.txt index fdf7d1294..315d907f9 100644 --- a/physics/docs/pdftxt/mainpage.txt +++ b/physics/docs/pdftxt/mainpage.txt @@ -1,25 +1,32 @@ /** \mainpage Introduction -Welcome to the scientific documentation for the parameterizations and suites available in the Common -Community Physics Package (CCPP) v4. +Welcome to the scientific documentation for the parameterizations available in the Common +Community Physics Package (CCPP) v5.0.0 and the suites that can be configured using them. + +\image html mesocam.png " " width=10cm The CCPP-Physics is envisioned to contain parameterizations used in NOAA's Unified Forecast System (UFS) -applications for weather through seasonal prediction timescales, encompassing operational schemes as well as -developmental schemes under consideration for upcoming -operational implementations. This version contains all parameterizations of the current operational GFS, -plus additional developmental schemes. There are four suites supported for use with the Single Column Model (SCM) -developed by the Development Testbed Center (GFS_v15p2, GFS_v16beta, GSD_v1, and csawmg), and four suites -supported for use with the atmospheric component of the UFS (i.e., GFS_v15p2, GFS_v15p2_no_nsst, GFS_v16beta and -GFS_v16beta_no_nsst). The variants labelled as \a no_nsst are a simplification of GFS_v15p2 and GFS_v16beta suites -. This simplification is needed when the UFS is initialized with files in GRIdded Binary Edition 2 (GRIB2) -format instead of files in NOAA Environmental Modeling System (NEMS) Input/Output (NEMSIO) format because the -fields necessary to predict (SST) are not available in the GRIB2 files. +applications for weather through seasonal prediction timescales, encompassing the current operational GFS schemes as well as +developmental schemes under consideration for upcoming operational implementations. New in this release is +suite RRFS_v1alpha, which is being tested in the UFS Short-Range Weather Application for future use +in the convective-allowing Rapid Refresh Forecast System (RRFS), slated for operational implementation +in 2023. Convection-allowing models allow us to begin to resolve the fine details within storm systems that are +necessary for the accurate predition of high-impact events such as tornadoes, flash floods, and winter weather. +Experience gained from the development of earlier operational and experimental convective-allowing models (CAMs), +such as the High Resolution Rapid Refresh (HRRR) and HRRR Ensemble (HRRRE), the North American Mesoscale Forecast +System (NAM) nests, the NSSL Experimental Warn-on-Forecast System for ensembles (NEWS-e), the NCAR experimental +CAM ensemble, and GFDL's FV3-based CAM efforts, guide this process. + +The CCPP parameterizations are aggregated in suites by the host models. The CCPP Single Column Model (SCM), developed +by the Development Testbed Center, supports suites GFS_v15p2, GFS_v16beta, GSD_v1, csawmg, and RRFS_v1alpha, while the +UFS Short-Range Weather Application supports suites GFS_v15p2 and RRFS_v1alpha. The UFS Medium-Range Weather Application +is not intended for use with CCPP v5.0.0. In this website you will find documentation on various aspects of each parameterization, including a high-level overview of its function, the input/output argument list, and a description of the algorithm. -The latest CCPP public release is Version 4.0 (March 2020), and more details on it may be found on the +More details about this and other CCPP releases may be found on the CCPP website hosted by the Developmental Testbed Center (DTC). diff --git a/physics/docs/pdftxt/suite_FV3_GFS_v15p2.xml.txt b/physics/docs/pdftxt/suite_FV3_GFS_v15p2.xml.txt index 4074ddfc7..2ec63092e 100644 --- a/physics/docs/pdftxt/suite_FV3_GFS_v15p2.xml.txt +++ b/physics/docs/pdftxt/suite_FV3_GFS_v15p2.xml.txt @@ -1,10 +1,10 @@ /** -\page suite_FV3_GFS_v15p2_xml suite_FV3_GFS_v15p2.xml +\page FV3_GFS_v15p2_sdf GFS_v15p2 Suite Definition File \code - + @@ -72,9 +72,9 @@ GFS_suite_stateout_update ozphys_2015 h2ophys - GFS_DCNV_generic_pre get_phi_fv3 GFS_suite_interstitial_3 + GFS_DCNV_generic_pre samfdeepcnv GFS_DCNV_generic_post GFS_SCNV_generic_pre @@ -91,10 +91,12 @@ GFS_stochastics + phys_tend + \endcode */ diff --git a/physics/docs/pdftxt/suite_FV3_GFS_v15p2_no_nsst.xml.txt b/physics/docs/pdftxt/suite_FV3_GFS_v15p2_no_nsst.xml.txt index 7a60f5e1c..44f8e8296 100644 --- a/physics/docs/pdftxt/suite_FV3_GFS_v15p2_no_nsst.xml.txt +++ b/physics/docs/pdftxt/suite_FV3_GFS_v15p2_no_nsst.xml.txt @@ -4,7 +4,7 @@ \code - + diff --git a/physics/docs/pdftxt/suite_FV3_GFS_v16beta.xml.txt b/physics/docs/pdftxt/suite_FV3_GFS_v16beta.xml.txt index 4abafe01a..fb14b32b5 100644 --- a/physics/docs/pdftxt/suite_FV3_GFS_v16beta.xml.txt +++ b/physics/docs/pdftxt/suite_FV3_GFS_v16beta.xml.txt @@ -4,7 +4,7 @@ \code - + diff --git a/physics/docs/pdftxt/suite_FV3_GFS_v16beta_no_nsst.xml.txt b/physics/docs/pdftxt/suite_FV3_GFS_v16beta_no_nsst.xml.txt index e783be1f9..0cc7a08da 100644 --- a/physics/docs/pdftxt/suite_FV3_GFS_v16beta_no_nsst.xml.txt +++ b/physics/docs/pdftxt/suite_FV3_GFS_v16beta_no_nsst.xml.txt @@ -4,7 +4,7 @@ \code - + diff --git a/physics/docs/pdftxt/suite_FV3_RRFS_v1beta.xml.txt b/physics/docs/pdftxt/suite_FV3_RRFS_v1beta.xml.txt new file mode 100644 index 000000000..681e9d21c --- /dev/null +++ b/physics/docs/pdftxt/suite_FV3_RRFS_v1beta.xml.txt @@ -0,0 +1,91 @@ +/** +\page FV3_RRFS_v1beta_sdf RRFS_v1beta Suite Definition File + +\code + + + + + + + GFS_time_vary_pre + GFS_rrtmg_setup + GFS_rad_time_vary + GFS_phys_time_vary + + + + + GFS_suite_interstitial_rad_reset + sgscloud_radpre + GFS_rrtmg_pre + rrtmg_sw_pre + rrtmg_sw + rrtmg_sw_post + rrtmg_lw_pre + rrtmg_lw + sgscloud_radpost + 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 + + + + mynnsfc_wrapper + GFS_surface_loop_control_part1 + sfc_nst_pre + sfc_nst + sfc_nst_post + noahmpdrv + sfc_sice + GFS_surface_loop_control_part2 + + + + GFS_surface_composites_post + sfc_diag + sfc_diag_post + GFS_surface_generic_post + mynnedmf_wrapper + GFS_GWD_generic_pre + cires_ugwp + cires_ugwp_post + GFS_GWD_generic_post + rayleigh_damp + GFS_suite_stateout_update + ozphys_2015 + h2ophys + get_phi_fv3 + GFS_suite_interstitial_3 + GFS_suite_interstitial_4 + GFS_MP_generic_pre + mp_thompson_pre + mp_thompson + mp_thompson_post + GFS_MP_generic_post + maximum_hourly_diagnostics + + + + + GFS_stochastics + + + + + +\endcode + +*/ diff --git a/physics/docs/pdftxt/suite_input.nml.txt b/physics/docs/pdftxt/suite_input.nml.txt index 2565c58eb..360187bd7 100644 --- a/physics/docs/pdftxt/suite_input.nml.txt +++ b/physics/docs/pdftxt/suite_input.nml.txt @@ -3,82 +3,98 @@ The SCM and the UFS Atmosphere access runtime configurations from file \c input.nml. This file contains various namelists records that control aspects of the I/O, dynamics, physics etc. Most physics-related options are in -reords \b &gfs_physics_nml and \b &cires_ugwp_nml. When using the GFDL microphysics scheme, variables in namelist -\b &gfdl_cloud_microphysics_nml are also used. Additional specifications for stochastic physics are in -namelists \b &stochy_nam and \b &nam_sfcperts. +records \b &gfs_physics_nml. Some schemes have their own namelist records as described below. + +- Namelist \b &gfs_physics_nml pertains to all of the suites used, but some of the variables are only relevant for specific +parameterizations. Its variables are defined in file GFS_typedefs.F90 in the host model. - Namelist \b &gfdl_cloud_microphysics_nml is only relevant when the GFDL microphysics is used, and its variables are defined in module_gfdl_cloud_microphys.F90. - Namelist \b &cires_ugwp_nml specifies options for the use of CIRES Unified Gravity Wave Physics Version 0. -- Namelist \b &gfs_physics_nml pertains to all of the suites used, but some of the variables are only relevant for specific -parameterizations. Its variables are defined in file GFS_typedefs.F90 in the host model. +- Namelist \b &nam_sfcperts specifies whether and how stochastic perturbations are used in the Noah Land Surface Model. -- Namelist \b &stochy_nam specifies options for the use of SPPT, SKEB and SHUM, while namelist \b &nam_sfcperts specifies whether -and how stochastic perturbations are used in the Noah Land Surface Model. +Both the SDF and the input.nml contain information about how to specify the physics suite. Some +of this information is redundant, and the user must make sure they are compatible.The safest +practice is to use the SDF and namelist provided for each suite, since those are supported +configurations. Changes to the SDF must be accompanied by corresponding changes to the namelist. +While there is not a one-to-one correspondence between the namelist and the SDF, the tables below +show some variables in the namelist that must match the SDF. -
NML Description
option DDT in Host Model Description Default Value -
\b &gfs_physics_nml -
fhzero gfs_control_type hour between clearing of diagnostic buckets 0.0 -
h2o_phys gfs_control_type flag for stratosphere h2o scheme .false. -
ldiag3d gfs_control_type flag for 3D diagnostic fields .false. -
lssav gfs_control_type logical flag for storing diagnostics .false. -
cplflx gfs_control_type logical flag for cplflx collection .false. -
cplwav gfs_control_type logical flag for cplwav collection .false. -
cplchm gfs_control_type logical flag for chemistry collection .false. -
lsidea gfs_control_type logical flag for idealized physics .false. -
oz_phys gfs_control_type flag for old (2006) ozone physics .true. -
oz_phys_2015 gfs_control_type flag for new (2015) ozone physics .false. -
fhcyc gfs_control_type frequency for surface data cycling in hours 0.0 -
use_ufo gfs_control_type flag for using unfiltered orography surface option .false. -
pre_rad gfs_control_type flag for testing purpose .false. -
ncld gfs_control_type number of hydrometeors 1 -
imp_physics gfs_control_type choice of microphysics scheme: \n +
Option CCPP scheme or interstitial Description Default Value +
\b General \b options +
fhzero GFS_phys_time_vary hour between clearing of diagnostic buckets 0.0 +
h2o_phys h2ophys flag for stratosphere h2o scheme .false. +
ldiag3d see \a GFS_typedefs.F90 flag for 3D diagnostic fields .false. +
qdiag3d see \a GFS_typedefs.F90 flag for 3D tracer diagnostic fields .false. +
lssav see \a GFS_typedefs.F90 flag for storing diagnostics .false. +
cplflx see \a GFS_typedefs.F90 flag for using fluxes provided by an external model .false. +
cplwav see \a GFS_typedefs.F90 flag for using information produced by an external ocean wave model .false. +
cplchm see \a GFS_typedefs.F90 flag for coupled chemistry diagnostics .false. +
cplwav2atm see \a GFS_typedefs.F90 flag for wave to atm coupling .false. +
lsidea rayleigh_damp flag for idealized physics .false. +
oz_phys_2015 ozphys_2015 flag for new (2015) ozone physics .false. +
fhcyc GFS_phys_time_vary frequency for surface data cycling in hours 0.0 +
use_ufo GFS_phys_time_vary flag for using unfiltered orography surface option .false. +
ncld see \a GFS_typedefs.F90 number of hydrometeors 1 +
do_mynnsfclay see \a GFS_typedefs.F90 flag to activate MYNN-SFCLAY scheme .false. +
prslrd0 rayleigh_damp pressure level above which to apply Rayleigh damping 0.0d0 +
ral_ts rayleigh_damp time scale for Rayleigh damping in days 0.0d0 +
do_sppt GFS_stochastics flag for stochastic SPPT option .false. +
do_shum GFS_stochastics flag for stochastic SHUM option .false. +
do_skeb GFS_stochastics flag for stochastic SKEB option .false. +
do_sfcperts GFS_rrtmg_pre flag for stochastic surface perturbations option .false. +
imp_physics choice of microphysics scheme choice of microphysics scheme: \n
  • 11: GFDL microphysics scheme
  • 8: Thompson microphysics scheme
  • 10: Morrison-Gettelman microphysics scheme
99 -
pdfcld gfs_control_type flag for PDF clouds .false. -
fhswr gfs_control_type frequency for shortwave radiation (secs) 3600. -
fhlwr gfs_control_type frequency for longwave radiation (secs) 3600. -
levr gfs_control_type number of vertical levels for radiation calculations -99 -
nfxr gfs_control_type second dimension of radiation input/output array fluxr 39+6 -
iflip gfs_control_type control flag for vertical index direction \n +
\b Parameters \b related \b to \b radiation \b scheme \b options +
pdfcld GFS_rrtmg_pre flag for PDF clouds .false. +
fhswr rrtmg_sw frequency for shortwave radiation (secs) 3600. +
fhlwr rrtmg_lw frequency for longwave radiation (secs) 3600. +
levr GFS_rrtmg_setup number of vertical levels for radiation calculations -99 +
nfxr GFS_rrtmg_pre second dimension of radiation input/output array fluxr 39+6 +
iflip GFS_rrtmg_setup control flag for vertical index direction \n
  • 0: index from TOA to surface
  • 1: index from surface to TOA
1 -
icliq_sw gfs_control_type sw optical property for liquid clouds \n +
icliq_sw rrtmg_sw sw optical property for liquid clouds \n
  • 0: input cloud optical depth, ignoring iswcice setting
  • 1: cloud optical property scheme based on Hu and Stamnes (1993) \cite hu_and_stamnes_1993 method
  • 2: cloud optical property scheme based on Hu and Stamnes (1993) \cite hu_and_stamnes_1993 - updated
1 -
iovr_sw gfs_control_type control flag for cloud overlap in SW radiation \n +
iovr_sw rrtmg_sw control flag for cloud overlap in SW radiation \n
  • 0: random overlapping clouds
  • 1: max/ran overlapping clouds
  • 2: maximum overlap clouds (mcica only)
  • 3: decorrelation-length overlap (mcica only) +
  • 4: exponential overlapping method +
  • 5: exponential-random overlapping method
1 -
iovr_lw gfs_control_type control flag for cloud overlap in LW radiation \n +
iovr_lw rrtmg_lw control flag for cloud overlap in LW radiation \n
  • 0: random overlapping clouds
  • 1: max/ran overlapping clouds
  • 2: maximum overlap clouds (mcica only)
  • 3: decorrelation-length overlap (mcica only) +
  • 4: exponential overlapping method +
  • 5: exponential-random overlapping method
1 -
ictm gfs_control_type external data time/date control flag \n +
ictm GFS_rrtmg_setup external data time/date control flag \n
  • -2: same as 0, but superimpose seasonal cycle from climatology data set
  • -1: use user provided external data for the forecast time, no extrapolation @@ -88,31 +104,31 @@ and how stochastic perturbations are used in the Noah Land Surface Model.
  • yyyy1: use yyyy data for the forecast. if needed, do extrapolation to match the fcst time
1 -
crick_proof gfs_control_type control flag for eliminating CRICK \n +
crick_proof GFS_rrtmg_setup control flag for eliminating CRICK \n
  • .true.: apply layer smoothing to eliminate CRICK
  • .false.: do not apply layer smoothing
.false. -
ccnorm gfs_control_type control flag for in-cloud condensate mixing ratio \n +
ccnorm GFS_rrtmg_setup control flag for in-cloud condensate mixing ratio \n
  • .true.: normalize cloud condensate
  • .false.: not normalize cloud condensate
.false. -
norad_precip gfs_control_type control flag for not using precip in radiation (Ferrier scheme) \n +
norad_precip GFS_rrtmg_setup control flag for not using precip in radiation (Ferrier scheme) \n
  • .true.: snow/rain has no impact on radiation
  • .false.: snow/rain has impact on radiation
.false. -
ialb gfs_control_type SW surface albedo control flag: \n +
ialb GFS_rrtmg_setup SW surface albedo control flag: \n
  • 0: using climatology surface albedo scheme for SW
  • 1: using MODIS based land surface albedo for SW
0 -
iems gfs_control_type LW surface emissivity control flag (ab 2-digit integer) : \n +
iems GFS_rrtmg_setup LW surface emissivity control flag (ab 2-digit integer) : \n
  • a: =0 set surface air/ground t same for LW radiation
  • =1 set surface air/ground t diff for LW radiation @@ -121,7 +137,7 @@ and how stochastic perturbations are used in the Noah Land Surface Model.
  • =2 future development (not yet)
0 -
iaer gfs_control_type 4-digit aerosol flag (dabc for aermdl, volcanic, LW, SW): \n +
iaer GFS_rrtmg_setup 4-digit aerosol flag (dabc for aermdl, volcanic, LW, SW): \n
  • d:tropospheric aerosol model scheme flag \n =0 or none, opac-climatology aerosol scheme \n @@ -136,28 +152,28 @@ and how stochastic perturbations are used in the Noah Land Surface Model. =1 include tropospheric aerosol in SW
1 -
ico2 gfs_control_type \f$CO_2\f$ data source control flag:\n +
ico2 GFS_rrtmg_setup \f$CO_2\f$ data source control flag:\n
  • 0: prescribed value (380 ppmv)
  • 1: yearly global averaged annual mean from observations
  • 2: monthly 15 degree horizontal resolution from observations
0 -
isubc_sw gfs_control_type subgrid cloud approximation control flag in SW radiation: \n +
isubc_sw rrtmg_sw subgrid cloud approximation control flag in SW radiation: \n
  • 0: no McICA approximation in SW radiation
  • 1: use McICA with prescribed permutation seeds (test mode)
  • 2: use McICA with randomly generated permutation seeds
0 -
isubc_lw gfs_control_type subgrid cloud approximation control flag in LW radiation: \n +
isubc_lw rrtmg_lw subgrid cloud approximation control flag in LW radiation: \n
  • 0: no McICA approximation in LW radiation
  • 1: use McICA with prescribed permutatition seeds (test mode)
  • 2: use McICA with randomly generated permutation seeds
0 -
isol gfs_control_type solar constant scheme control flag: \n +
isol GFS_rrtmg_setup solar constant scheme control flag: \n
  • 0: fixed value = 1366.0 \f$W m^{-2}\f$ (old standard)
  • 10: fixed value = 1360.8 \f$W m^{-2}\f$ (new standard) @@ -167,31 +183,11 @@ and how stochastic perturbations are used in the Noah Land Surface Model.
  • 4: CMIP5 TIM-scale TSI table (monthly) with 11-yr cycle approximation
0 -
lwhtr gfs_control_type logical flag for output of longwave heating rate .true. -
swhtr gfs_control_type logical flag for output of shortwave heating rate .true. -
cnvgwd gfs_control_type logical flag for convective gravity wave drag scheme dependent on maxval(cdmbgwd(3:4) == 0.0) .false. -
shal_cnv gfs_control_type logical flag for calling shallow convection .false. -
lmfshal gfs_control_type flag for mass-flux shallow convection scheme in the cloud fraction calculation shal_cnv .and. (imfshalcnv > 0) -
lmfdeep2 gfs_control_type flag for mass-flux deep convection scheme in the cloud fraction calculation imfdeepcnv == 2 .or. 3 .or.4 -
cal_pre gfs_control_type logical flag for calling precipitation type algorithm .false. -
redrag gfs_control_type logical flag for applying reduced drag coefficient for high wind over sea in GFS surface layer scheme .false. -
dspheat gfs_control_type logical flag for using TKE dissipative heating to temperature tendency in hybrid EDMF and TKE-EDMF schemes .false. -
hybedmf gfs_control_type logical flag for calling hybrid EDMF PBL scheme .false. -
satmedmf gfs_control_type logical flag for calling TKE EDMF PBL scheme .false. -
isatmedmf gfs_control_type flag for scale-aware TKE-based moist EDMF scheme \n -
    -
  • 0: initial version of satmedmf (Nov.2018) -
  • 1: updated version of satmedmf (as of May 2019) -
-
0 -
do_mynnedmf gfs_control_type flag to activate MYNN-EDMF scheme .false. -
random_clds gfs_control_type logical flag for whether clouds are random .false. -
trans_trac gfs_control_type logical flag for convective transport of tracers .false. -
lheatstrg gfs_control_type logical flag for canopy heat storage parameterization .false. -
shinhong gfs_control_type flag for scale-aware Shinhong PBL scheme .false. -
do_ysu gfs_control_type flag for YSU PBL scheme .false. -
cnvcld gfs_control_type logical flag for convective cloud .false. -
imfshalcnv gfs_control_type flag for mass flux shallow convective scheme:\n +
lwhtr rrtmg_lw flag for output of longwave heating rate .true. +
swhtr rrtmg_sw flag for output of shortwave heating rate .true. +
nhfrad GFS_time_vary_pre number of timesteps for which to call radiation on physics timestep (coldstarts) 0 +
\b Parameters \b related \b to \b cumulus \b schemes +
imfshalcnv choice of shallow convective scheme flag for mass flux shallow convective scheme:\n
  • 1:July 2010 version of mass-flux shallow convective scheme (operational as of 2016)
  • 2: scale- & aerosol-aware mass-flux shallow convective scheme (2017) @@ -201,7 +197,7 @@ and how stochastic perturbations are used in the Noah Land Surface Model.
  • -1: no shallow convection used
1 -
imfdeepcnv gfs_control_type flag for mass-flux deep convective scheme:\n +
imfdeepcnv choice of deep convective scheme flag for mass-flux deep convective scheme:\n
  • -1: Chikira-Sugiyama deep convection (with \b cscnv = .T.)
  • 1: July 2010 version of SAS convective scheme (operational version as of 2016) @@ -210,311 +206,246 @@ and how stochastic perturbations are used in the Noah Land Surface Model.
  • 4: new Tiedtke scheme (CAPS)
1 -
lgfdlmprad gfs_control_type flag for GFDL mp scheme and radiation consistency .false. -
cdmbgwd(4) gfs_control_type multiplication factors for mountain blocking(1), orographic gravity wave drag(2) -
    -
  • [1]: GWDPS mountain blocking -
  • [2]: GWDPS orographic gravity wave drag -
  • [3]: the modulation total momentum flux of NGWs by intensities of the total precipitation -
  • [4]: TKE for future tests and applications -
-
2.0,0.25,1.0,1.0 -
prslrd0 gfs_control_type pressure level above which to apply Rayleigh damping 0.0d0 -
lsm gfs_control_type flag for land surface model to use \n -
    -
  • 1: Noah LSM -
  • 2: RUC LSM -
-
1 -
lsoil gfs_control_type number of soil layers 4 -
ivegsrc gfs_control_type flag for vegetation type dataset choice: \n +
do_deep see \a GFS_typedefs.F90 consistency check for deep convection .true. +
shal_cnv GFS_suite_interstitial flag for calling shallow convection .false. +
lmfshal GFS_rrtmg_pre flag for mass-flux shallow convection scheme in the cloud fraction calculation shal_cnv .and. (imfshalcnv > 0) +
lmfdeep2 GFS_rrtmg_pre flag for mass-flux deep convection scheme in the cloud fraction calculation imfdeepcnv == 2 .or. 3 .or.4 +
random_clds GFS_phys_time_vary flag for whether clouds are random .false. +
trans_trac GFS_suite_interstitial flag for convective transport of tracers .false. +
cal_pre GFS_phys_time_vary or GFS_MP_generic flag for calling precipitation type algorithm .false. +
shcnvcw \ref samfshalcnv flag for shallow convective cloud .false. +
cscnv cs_conv flag for Chikira-Sugiyama deep convection .false. +
do_aw cs_conv flag for Arakawa-Wu scale-awere adjustment .false. +
do_shoc cs_conv flag for Simplified Hihger-order Closure (SHOC) .false. +
do_awdd cs_conv flag to enable treating convective tendencies following Arakwaw-Wu for downdrafts (2013) .false. +
cs_parm(10) cs_conv tunable parameters for Chikira-Sugiyama convection 8.0,4.0,1.0e3,3.5e3,20.0,1.0,-999.,1.,0.6,0. +
\b Parameters \b related \b to \b PBL \b scheme \b options +
do_mynnedmf mynnedmf_wrapper* flag to activate MYNN-EDMF scheme .false. +
do_myjsfc myjpbl_wrapper flag for MYJ surface layer scheme .false +
dspheat \ref satmedmfvdifq, \ref hedmf flag for using TKE dissipative heating to temperature tendency in hybrid EDMF and TKE-EDMF schemes .false. +
satmedmf \ref satmedmfvdifq flag for calling scale-ware TKE-based EDMF PBL scheme .false. +
isatmedmf \ref satmedmfvdifq flag for scale-aware TKE-based moist EDMF scheme \n
    -
  • 0: USGS -
  • 1: IGBP(20 category) -
  • 2: UMD (13 category) -
-
2 -
isot gfs_control_type flag for soil type dataset choice:\n -
    -
  • 0: Zobler soil type (9 category) -
  • 1: STATSGO soil type (19 category) -
-
0 -
mom4ice gfs_control_type flag controls mom4 sea ice .false. -
debug gfs_control_type flag for debug printout .false. -
nstf_name(5) gfs_control_type NSST related paramters:\n -
    -
  • nstf_name(1): 0=NSST off, 1= NSST on but uncoupled, 2= NSST on and coupled -
  • nstf_name(2): 1=NSST spin up on, 0=NSST spin up off -
  • nstf_name(3): 1=NSST analysis on, 0=NSST analysis off -
  • nstf_name(4): zsea1 in mm -
  • nstf_name(5): zesa2 in mm -
-
/0,0,1,0,5/ -
nst_anl gfs_control_type flag for NSST analysis in gcycle/sfcsub .false. -
effr_in gfs_control_type logical flag for using input cloud effective radii calculation .false. -
aero_in gfs_control_type logical flag for using aerosols in Morrison-Gettelman microphysics .false. -
iau_delthrs gfs_control_type incremental analysis update (IAU) time interval in hours 6 -
iaufhrs gfs_control_type forecast hours associated with increment files -1 -
\b Parameters \b Specific \b to \b csawmg \b Suite -
crtrh(3) gfs_control_type critical relative humidity at the surface, PBL top and at the top of the atmosphere 0.90,0.90,0.90 -
cscnv gfs_control_type logical flag for Chikira-Sugiyama deep convection .false. -
do_aw gfs_control_type flag for Arakawa-Wu scale-awere adjustment .false. -
do_awdd gfs_control_type flag to enable treating convective tendencies following Arakwaw-Wu for downdrafts (2013) .false. -
do_sb_physics gfs_control_type logical flag for SB2001 autoconversion or accretion .true. -
do_cldice gfs_control_type flag for cloud ice processes for MG microphysics .true. -
hetfrz_classnuc gfs_control_type flag for heterogeneous freezing for MG microphysics .false. -
mg_nccons gfs_control_type flag for constant droplet concentration for MG microphysics .false. -
mg_nicons gfs_control_type flag for constant ice concentration for MG microphysics .false. -
mg_ngcons gfs_control_type flag for constant graupel concentration for MG microphysics .false. -
sed_supersat gfs_control_type flag for allowing supersaturation after sedimentation for MG microphysics .true. -
mg_do_graupel gfs_control_type flag for turning on prognostic graupel (with fprcp=2) .true. -
mg_do_hail gfs_control_type flag for turning on prognostic hail (with fprcp=2) .false. -
shcnvcw gfs_control_type logical flag for shallow convective cloud .false. -
xkzm_h gfs_control_type background vertical diffusion for heat and q 1.0d0 -
xkzm_m gfs_control_type background vertical diffusion for momentum 1.0d0 -
xkzm_s gfs_control_type sigma threshold for background mom. diffusion 1.0d0 -
xkzminv gfs_control_type maximum background value of heat diffusivity in the inversion layer 0.3 -
microp_uniform gfs_control_type logical flag for uniform subcolumns for MG microphysics .true. -
mg_do_ice_gmao gfs_control_type logical flag for turning on gmao ice autoconversion in MG microphysics .false. -
mg_do_liq_liu gfs_control_type logical flag for turning on Liu liquid treatment in MG microphysics .true. -
mg_dcs gfs_control_type autoconversion size threshold for cloud ice to snow in MG microphysics 200.0 -
mg_alf gfs_control_type tuning factor for alphas (alpha = 1 - critical relative humidity) 1.0 -
mg_ts_auto_ice(2) gfs_control_type autoconversion time scale for ice in MG microphysics 180.0,180.0 -
mg_qcvar gfs_control_type cloud water relative variance in MG microphysics 1.0 -
mg_rhmini gfs_control_type relative humidity threshold parameter for nucleating ice 1.01 -
mg_ncnst gfs_control_type constant droplet num concentration \f$m^{-3}\f$ 100.e6 -
mg_ninst gfs_control_type constant ice num concentration \f$m^{-3}\f$ 0.15e6 -
mg_ngnst gfs_control_type constant graupel/hail num concertration \f$m^{-3}\f$ 0.10e6 -
mg_berg_eff_factor gfs_control_type berg efficiency factor 2.0 -
mg_qcmin(2) gfs_control_type min liquid and ice mixing ratio in MG macro clouds 1.0d-9, 1.0d-9 -
mg_precip_frac_method gfs_control_type type of precipitation fraction method 'max_overlap' -
fprcp gfs_control_type number of frozen precipitation species in MG microphysics \n -
    -
  • 0: no prognostic rain and snow -
  • 1: MG2 -
  • 2: MG3 +
  • 0: initial version of satmedmf (Nov.2018) +
  • 1: updated version of satmedmf (as of May 2019)
-
0 -
pdfflag gfs_control_type pdf flag for MG macro physics 4 -
cs_parm(10) gfs_control_type tunable parameters for Chikira-Sugiyama convection 8.0,4.0,1.0e3,3.5e3,20.0,1.0,-999.,1.,0.6,0. -
iccn gfs_control_type flag for using IN and CCN forcing in MG2/3 microphysics .false. -
rhcmax gfs_control_type maximum critical relative humidity 0.9999999 -
\b Parameters \b Specific \b to \b GSD_v0 \b Suite -
ltaerosol gfs_control_type logical flag for using aerosol climotology in Thompson MP scheme .false. -
lradar gfs_control_type logical flag for computing radar reflectivity in Thompson MP scheme .false. -
ttendlim gfs_control_type temperature tendency limiter per time step in K/s, set to < 0 to deactivate -999.0 -
do_mynnsfclay gfs_control_type flag to activate MYNN-SFCLAY scheme .false. -
grav_settling gfs_control_type flag to activate gravitational settling of cloud droplets as described in Nakanishi (2000) \cite nakanishi_2000 0 -
bl_mynn_mixlength gfs_control_type flag for different version of mixing length formulation \n + 0 +
hybedmf \ref hedmf flag for calling hybrid EDMF PBL scheme .false. +
shinhong shinhongvdif flag for scale-aware Shinhong PBL scheme .false. +
do_ysu see \a GFS_typedefs.F90 flag for YSU PBL scheme .false. +
debug see \a GFS_typedefs.F90 flag for debug printout .false. +
xkzm_h \ref satmedmfvdifq, \ref hedmf background vertical diffusion for heat and q 1.0d0 +
xkzm_m \ref satmedmfvdifq, \ref hedmf background vertical diffusion for momentum 1.0d0 +
xkzm_s \ref satmedmfvdifq, \ref hedmf sigma threshold for background mom. diffusion 1.0d0 +
xkzminv \ref hedmf maximum background value of heat diffusivity in the inversion layer 0.3 +
moninq_fac \ref hedmf atmosphere diffusivity coefficient factor 1.0 +
dspfac \ref satmedmfvdifq TKE dissipative heating factor 1.0 +
bl_upfr \ref satmedmfvdifq updraft fraction in boundary layer mass flux scheme 0.13 +
bl_dnfr \ref satmedmfvdifq downdraft fraction in boundary layer mass flux scheme 0.1 +
grav_settling mynnedmf_wrapper flag to activate gravitational settling of cloud droplets as described in Nakanishi (2000) \cite nakanishi_2000 0 +
bl_mynn_mixlength mynnedmf_wrapper flag for different version of mixing length formulation \n
  • 0: Original form from Nakanishi and Niino (2009) \cite NAKANISHI_2009 . NO scale-awareness is applied to the master mixing length, regardless of "scaleware" setting
  • 1: HRRR operational form 201609-201807. Designed to work without the mass-flux scheme. Uses BouLac mixing length in free atmosphere.
  • 2: HRRR operational form 201807-present. Designed to be compatible with mass-flux scheme activated (default)
2 -
bl_mynn_edmf gfs_control_type flag to activate the mass-flux scheme \n +
bl_mynn_edmf mynnedmf_wrapper flag to activate the mass-flux scheme \n
  • 0: deactivate mass-flux scheme
  • 1: activate dynamic multiplume mass-flux scheme
0 -
bl_mynn_edmf_mom gfs_control_type flag to activate the transport of momentum \n +
bl_mynn_edmf_mom mynnedmf_wrapper flag to activate the transport of momentum \n
  • 0: deactivate momentum transport in mass-flux scheme
  • 1: activate momentum transport in dynamic multiplume mass-flux scheme. \p bl_mynn_edmf must be set to 1
1 -
bl_mynn_edmf_tke gfs_control_type flag to activate the transport of TKE \n +
bl_mynn_edmf_tke mynnedmf_wrapper flag to activate the transport of TKE \n
  • 0: deactivate TKE transport in mass-flux scheme
  • 1: activate TKE transport in dynamic multiplume mass-flux scheme. \p bl_mynn_edmf must be set to 1
0 -
bl_mynn_edmf_part gfs_control_type flag to partitioning the MF and ED areas 0 -
bl_mynn_edmf_tkeadvect gfs_control_type activate computation of TKE advection (not yet in use for FV3) \n +
bl_mynn_edmf_part mynnedmf_wrapper flag to partitioning the MF and ED areas 0 +
bl_mynn_tkeadvect mynnedmf_wrapper activate computation of TKE advection (not yet in use for FV3) \n
  • false: deactivate TKE advection
  • true: activate TKE advection
.false. -
bl_mynn_edmf_tkebudget gfs_control_type flag to activate TKE budget 0 -
bl_mynn_edmf_cloudpdf gfs_control_type flag to determine which cloud PDF to use \n +
bl_mynn_tkebudget mynnedmf_wrapper flag to activate TKE budget 0 +
bl_mynn_cloudpdf mynnedmf_wrapper flag to determine which cloud PDF to use \n
  • 0: use Sommeria-Deardorff subgrid cloud PDF
  • 1: use Kuwano-Yoshida subgrid cloud PDF
  • 2: use modified Chaboureau-Bechtold subgrid cloud PDF
2 -
bl_mynn_edmf_cloudmix gfs_control_type flag to activate mixing of cloud species \n +
bl_mynn_edmf_cloudmix mynnedmf_wrapper flag to activate mixing of cloud species \n
  • 0: deactivate the mixing of any water species mixing ratios
  • 1: activate the mixing of all water species mixing ratios
1 -
bl_mynn_mixqt gfs_control_type flag to mix total water or individual species \n +
bl_mynn_mixqt mynnedmf_wrapper flag to mix total water or individual species \n
  • 0: mix individual water species separately
  • 1: DO NOT USE
0 -
icloud_bl gfs_control_type flag to coupling SGS clouds to radiation \n +
icloud_bl mynnedmf_wrapper flag to coupling SGS clouds to radiation \n
  • 0: deactivate coupling subgrid clouds to radiation
  • 1: activate subgrid cloud coupling to radiation (highly suggested)
1 -
lsoil_lsm gfs_control_type number of soil layers internal to land surface model -1 -
ldiag_ugwp GFS_control_type flag for CIRES UGWP diagnostics .false. -
do_ugwp GFS_control_type flag for CIRES UGWP revised OGW -
    -
  • .T.: revised gwdps_v0 -
  • .F.: GFS operational orographic gwdps -
-
.false. -
do_tofd GFS_control_type flag for turbulent orographic form drag .false. -
do_sppt gfs_control_type flag for stochastic SPPT option .false. -
do_shum gfs_control_type flag for stochastic SHUM option .false. -
do_skeb gfs_control_type flag for stochastic SKEB option .false. -
do_sfcperts gfs_control_type flag for stochastic surface perturbations option .false. -
\b &nam_sfcperts -
nsfcpert gfs_control_type number of weights for stochastic surface perturbation 0 -
pertz0 gfs_control_type magnitude of perturbation of momentum roughness length -999. -
pertzt gfs_control_type magnitude of perturbation of heat to momentum roughness length ratio -999. -
pertshc gfs_control_type magnitude of perturbation of soil hydraulic conductivity -999. -
pertlai gfs_control_type magnitude of perturbation of leaf area index -999. -
pertalb gfs_control_type magnitude of surface albedo perturbation -999. -
pertvegf gfs_control_type magnitude of perturbation of vegetation fraction -999. -
iseed_sfc compns_stochy_mod random seeds (if 0 use system clock) 0 -
sfc_tau compns_stochy_mod time scales -999. -
sfc_lscale compns_stochy_mod length scales -999. -
sppt_land compns_stochy_mod .false. -
\b &stochy_nam -
use_zmtnblck compns_stochy_mod flag for mountain blocking. .T. = do not apply perturbations below the dividing streamline that is diagnosed by the gravity wave drag, mountain blocking scheme .false. -
ntrunc compns_stochy_mod spectral resolution (e.g. T126) of random patterns -999 -
lon_s, lat_s compns_stochy_mod number of longitude and latitude point for the Gaussian grid -999 -
fhstoch compns_stochy_mod forecast hour to write out random pattern in order to restart the pattern for a different forecast (used in DA), file is stoch_out.F -999.0 -
stochini compns_stochy_mod set to true if wanting to read in a previous random pattern (input file need to be named \c stoch_ini) .false. -
sppt compns_stochy_mod amplitude of random patterns -999. -
sppt_tau compns_stochy_mod decorrelation timescales in seconds -999. -
sppt_lscale compns_stochy_mod decorrelation spatial scales in meters -999. -
sppt_logit compns_stochy_mod logit transform for SPPT to bounded interval [-1,+1] .false. -
iseed_sppt compns_stochy_mod seeds for setting the random number sequence (ignored if \c stochini is true) 0 -
sppt_sigtop1, sppt_sigtop2 compns_stochy_mod sigma levels to taper perturbations to zeros 0.1, 0.025 -
sppt_sfclimit compns_stochy_mod reduce amplitude of SPPT near surface (lowest 2 levels) .false. -
shum compns_stochy_mod amplitude of stochastic boundary layer specific humidity perturbations -999. -
shum_tau compns_stochy_mod decorrelation time scales in seconds -999. -
shum_lscale compns_stochy_mod decorrelation spatial scales in meters -999. -
shum_sigefold compns_stochy_mod e-folding lengthscale (in units of sigma) of specific humidity perturbations 0.2 -
skeb compns_stochy_mod stochastic KE backscatter amplitude -999. -
skeb_tau compns_stochy_mod decorrelation timescales in seconds -999. -
skeb_lscale compns_stochy_mod decorrelation spatial scales in meter -999. -
iseed_skeb compns_stochy_mod seeds for setting the random number sequnce (ignored if \c stochini is true) 0 -
skeb_vfilt compns_stochy_mod 0 -
skebnorm compns_stochy_mod 0: random pattern is stream function,1: pattern is kenorm, 2: pattern is vorticity 0 -
skeb_varspect_opt compns_stochy_mod Gaussian or power law variance spectrum for SKEB (0: Gaussian, 1: power law) 0 -
skeb_npass compns_stochy_mod number of passes of smoother for dissipation estimate 11 -
skeb_vdof compns_stochy_mod the number of degrees of freedom in the vertical for the SKEB random pattern 5 -
skeb_sigtop1, skeb_sigtop2 compns_stochy_mod sigma levels to taper perturbations to zeros 0.1, 0.025 -
skebint compns_stochy_mod 0 -
\b &gfdl_cloud_microphysics_nml -
sedi_transport gfdl_cloud_microphys_mod logical flag for turning on horizontal momentum transport during sedimentation .true. -
do_sedi_w gfdl_cloud_microphys_mod \a .true. to turn on vertical motion transport during sedimentation. (not supported in GFS physics) .false. -
do_sedi_heat gfdl_cloud_microphys_mod logical flag for turning on horizontal heat transport during sedimentation .true. -
rad_snow gfdl_cloud_microphys_mod logical flag for considering snow in cloud fraction calculation .true. -
rad_graupel gfdl_cloud_microphys_mod logical flag for considering graupel in cloud fraction calculation .true. -
rad_rain gfdl_cloud_microphys_mod logical flag for considering rain in cloud fraction calculation .true. -
cld_min gfdl_cloud_microphys_mod minimum cloud fraction. If total cloud condensate exceeds 1.0e-6 kg/kg, cloud fraction cannot be less than \p cld_min 0.05 -
const_vi gfdl_cloud_microphys_mod logical flag for using constant cloud ice fall speed .false. -
const_vs gfdl_cloud_microphys_mod logical flag for using constant snow fall speed .false. -
const_vg gfdl_cloud_microphys_mod logical flag for using constant graupel fall speed .false. -
const_vr gfdl_cloud_microphys_mod logical flag for using constant rain fall speed .false. -
vi_fac gfdl_cloud_microphys_mod tunable factor for cloud ice fall or the constant cloud ice fall speed when \p const_vi is .true. 1. -
vr_fac gfdl_cloud_microphys_mod tunable factor for rain fall or the constant rain fall speed when \p const_vr is .true. 1. -
vs_fac gfdl_cloud_microphys_mod tunable factor for snow fall or the constant snow fall speed when \p const_vs is .true. 1. -
vg_fac gfdl_cloud_microphys_mod tunable factor for graupel fall or the constant graupel fall speed when \p const_vg is .true. 1. -
vi_max gfdl_cloud_microphys_mod maximum fall speed for cloud ice 0.5 -
vs_max gfdl_cloud_microphys_mod maximum fall speed for snow 5.0 -
vg_max gfdl_cloud_microphys_mod maximum fall speed for graupel 8.0 -
vr_max gfdl_cloud_microphys_mod maximum fall speed for rain 12.0 -
qi_lim gfdl_cloud_microphys_mod cloud ice limiter to prevent large ice built up in cloud ice freezing and deposition 1. -
prog_ccn gfdl_cloud_microphys_mod logical flag for activating prognostic CCN (not supported in GFS Physics) .false. -
do_qa gfdl_cloud_microphys_mod \a .true. to activate inline cloud fraction diagnosis in fast saturation adjustment. \a .false. to activate inline cloud fraction diagnosis in major cloud microphysics .true. -
fast_sat_adj gfdl_cloud_microphys_mod logical flag for adjusting cloud water evaporation (cloud water -> water vapor), cloud water freezing (cloud water -> cloud ice), cloud ice deposition (water vapor -> cloud ice) when fast saturation adjustment is activated (\b do_sat_adj = .true. in \b fv_core_nml block) .true. -
tau_l2v gfdl_cloud_microphys_mod time scale for evaporation of cloud water to water vapor. Increasing(decreasing) \p tau_l2v can decrease(boost) deposition of cloud water to water vapor 300. -
tau_v2l gfdl_cloud_microphys_mod time scale for condensation of water vapor to cloud water. Increasing(decreasing) \p tau_v2l can decrease(boost) condensation of water vapor to cloud water 150. -
tau_g2v gfdl_cloud_microphys_mod time scale for sublimation of graupel to water vapor. Increasing(decreasing) \p tau_g2v can decrease(boost) sublimation of graupel to water vapor 900. -
tau_g2r gfdl_cloud_microphys_mod time scale for graupel melting. Increasing(decreasing) \p tau_g2r can decrease(boost) melting of graupel to rain (graupel-> rain) 600. -
tau_v2g gfdl_cloud_microphys_mod time scale for deposition of water vapor to graupel. Increasing(decreasing) \p tau_v2g can decrease(boost) deposition of water vapor to graupel (water vapor -> graupel) 21600. -
tau_l2r gfdl_cloud_microphys_mod time scale for autoconversion of cloud water to rain. Increasing(decreasing) \p tau_l2r can decrese(boost) autoconversion of cloud water to rain (cloud water -> rain) 900. -
tau_r2g gfdl_cloud_microphys_mod time scale for freezing of rain to graupel. Increasing(decreasing) \p tau_r2g can decrease(boost) freezing of rain to graupel (rain->graupel) 900. -
tau_i2s gfdl_cloud_microphys_mod time scale for autoconversion of cloud ice to snow. Increasing(decreasing) \p tau_i2s can decrease(boost) autoconversion of cloud ice to snow (cloud ice -> snow) 1000. -
tau_imlt gfdl_cloud_microphys_mod time scale for cloud ice melting. Increasing(decreasing) \p tau_imlt can decrease(boost) melting of cloud ice to cloud water or rain (cloud ice -> cloud water or rain) 600. -
tau_smlt gfdl_cloud_microphys_mod time scale for snow melting. Increasing(decreasing) \p tau_smlt can decrease(boost) melting of snow to cloud water or rain (snow-> cloud water or rain) 900. -
rthresh gfdl_cloud_microphys_mod critical cloud water radius for autoconversion (cloud water -> rain). Increasing(decreasing) of \p rthresh makes the autoconversion harder(easier) 10.0e-6 -
dw_land gfdl_cloud_microphys_mod base value for subgrid deviation/variability over land 0.20 -
dw_ocean gfdl_cloud_microphys_mod base value for subgrid deviation/variability over ocean 0.10 -
ql_gen gfdl_cloud_microphys_mod maximum value for cloud water generated from condensation of water vapor (water vapor-> cloud water) 1.0e-3 -
qi_gen gfdl_cloud_microphys_mod maximum value of cloud ice generated from deposition of water vapor (water vapor->cloud ice) or freezing(cloud water -> cloud ice). Increasing(decreasing) \p qi_gen can increas(decrease) cloud ice 1.82e-6 -
ql_mlt gfdl_cloud_microphys_mod maximum value of cloud water allowed from melted cloud ice (cloud ice -> cloud water or rain). Exceedance of which will become rain. Increasing(decreasing) \p ql_mlt can increase(decrease) cloud water and decrease(increase) rain 2.0e-3 -
qs_mlt gfdl_cloud_microphys_mod maximum value of cloud water allowed from melted snow (snow -> cloud water or rain). Exceedance of which will become rain. Increasing(decreasing) \p qs_mlt can increas(decrease) cloud water and decrease (increase) rain 1.0e-6 -
ql0_max gfdl_cloud_microphys_mod threshold of cloud water to rain autoconversion (cloud water -> rain). Increasing(decreasing) \p ql0_max can increase(decrease) rain and decrease(increase) cloud water 2.0e-3 -
qi0_max gfdl_cloud_microphys_mod maximum value of cloud ice generated from other sources like convection. Exceedance of which will become snow. Increasing(decreasing) \p qi0_max can increase(decrease) cloud ice and decrease(increase) snow 1.0e-4 -
qi0_crt gfdl_cloud_microphys_mod threshold of cloud ice to snow autoconversion (cloud ice -> snow). Increasing(decreasing) \p qi0_crt can increase(decrease) cloud ice and decrease(increase) snow 1.0e-4 -
qs0_crt gfdl_cloud_microphys_mod threshold of snow to graupel autoconversion (snow -> graupel). Increasing(decreasing) \p qs0_crt can increase(decrease) snow and decrease(increase) graupel 1.0e-3 -
qc_crt gfdl_cloud_microphys_mod minimum value of cloud condensate to allow partial cloudiness. Partial cloud can only exist when total cloud condensate exceeds \p qc_crt 5.0e-8 -
c_psaci gfdl_cloud_microphys_mod accretion efficiency of cloud ice to snow (cloud ice -> snow). Increasing(decreasing) of \p c_psaci can boost(decrease) the accretion of cloud ice to snow 0.02 -
c_pgacs gfdl_cloud_microphys_mod accretion efficiency of snow to graupel (snow -> graupel). Increasing(decreasing) of \p c_pgacs can boost(decrease) the accretion of snow to graupel 2.0e-3 -
rh_inc gfdl_cloud_microphys_mod relative humidity increment for complete evaporation of cloud water and cloud ice 0.25 -
rh_inr gfdl_cloud_microphys_mod relative humidity increment for sublimation of snow 0.25 -
rh_ins gfdl_cloud_microphys_mod relative humidity increment for minimum evaporation of rain 0.25 -
rthresh gfdl_cloud_microphys_mod critical cloud water radius for autoconversion(cloud water->rain). Increasing(decreasing) of \p rthresh makes the autoconversion harder(easier) 1.0e-5 -
ccn_l gfdl_cloud_microphys_mod base CCN over land. Increasing(decreasing) \p ccn_l can on the one hand boost(decrease) the autoconversion of cloud water to rain, on the other hand make the autoconversion harder(easier). The unit is \f$cm^{-3}\f$ 270. -
ccn_o gfdl_cloud_microphys_mod base CCN over ocean. Increasing(decreasing) \p ccn_o can on the one hand boost(decrease) the autoconversion of cloud water to rain, on the other hand make the autoconversion harder(easier). The unit is \f$cm^{-3}\f$ 90. -
c_paut gfdl_cloud_microphys_mod autoconversion efficiency of cloud water to rain (cloud water -> rain). Increasing(decreasing) of \p c_paut can boost(decrease) the autoconversion of cloud water to rain 0.55 -
c_cracw gfdl_cloud_microphys_mod accretion efficiency of cloud water to rain (cloud water -> rain). Increasing(decreasing) of \p c_cracw can boost(decrease) the accretion of cloud water to rain 0.9 -
sat_adj0 gfdl_cloud_microphys_mod adjust factor for condensation of water vapor to cloud water (water vapor->cloud water) and deposition of water vapor to cloud ice 0.9 -
use_ppm gfdl_cloud_microphys_mod \e true to use PPM fall scheme; \e false to use time-implicit monotonic fall scheme .false. -
use_ccn gfdl_cloud_microphys_mod \e true to compute prescribed CCN. It should be .true. when \p prog_ccn = .false. .false. -
mono_prof gfdl_cloud_microphys_mod \e true to turn on terminal fall with monotonic PPM scheme. This is used together with \p use_ppm=.true. .true. -
z_slope_liq gfdl_cloud_microphys_mod \e true to turn on vertically subgrid linear monotonic slope for autoconversion of cloud water to rain .true. -
z_slope_ice gfdl_cloud_microphys_mod \e true to turn on vertically subgrid linear monotonic slope for autoconversion of cloud ice to snow .false. -
de_ice gfdl_cloud_microphys_mod \e true to convert excessive cloud ice to snow to prevent ice over-built from other sources like convection scheme (not supported in GFS physics) .false. -
fix_negative gfdl_cloud_microphys_mod \e true to fix negative water species using nearby points .false. -
icloud_f gfdl_cloud_microphys_mod flag (0,1,or 2) for cloud fraction diagnostic scheme 0 -
irain_f gfdl_cloud_microphys_mod flag (0 or 1) for cloud water autoconversion to rain scheme. 0: with subgrid variability; 1: no subgrid variability 0 -
mp_time gfdl_cloud_microphys_mod time step of GFDL cloud microphysics (MP). If \p mp_time isn't divisible by physics time step or is larger than physics time step, the actual MP time step becomes \p dt/NINT[dt/MIN(dt,mp_time)] 150. -
alin gfdl_cloud_microphys_mod parameter \a a in Lin et al.(1983). Constant in empirical formula for \f$U_R\f$. Increasing(decreasing) \p alin can boost(decrease) accretion of cloud water by rain and rain evaporation 842. -
clin gfdl_cloud_microphys_mod parameter \a c in Lin et al.(1983). Constant in empirical formula for \f$U_S\f$. Increasing(decreasing) \p clin can boost(decrease) accretion of cloud water by snow, accretion of cloud ice by snow, snow sublimation and deposition, and snow melting 4.8 -
t_min gfdl_cloud_microphys_mod temperature threshold for instant deposition. Deposit all water vapor to cloud ice when temperature is lower than \p t_min 178. -
t_sub gfdl_cloud_microphys_mod temperature threshold for sublimation. Cloud ice, snow or graupel stops(starts) sublimation when temperature is lower(higher) then \p t_sub 184. -
mp_print gfdl_cloud_microphys_mod \a .true. to turn on GFDL cloud microphysics debugging print out. (not supported in GFS physics) .false. -
\b &cires_ugwp_nml -
knob_ugwp_version cires_ugwp_module parameter selects a version of the UGWP implementation in FV3GFS-127L \n +
\b Parameters \b related \b to \b surface \b perturbation \b options +
nsfcpert GFS_surface_generic_pre number of weights for stochastic surface perturbation 0 +
pertz0 GFS_surface_generic_pre magnitude of perturbation of momentum roughness length -999. +
pertzt GFS_surface_generic_pre magnitude of perturbation of heat to momentum roughness length ratio -999. +
pertshc GFS_surface_generic_pre magnitude of perturbation of soil hydraulic conductivity -999. +
pertlai GFS_surface_generic_pre magnitude of perturbation of leaf area index -999. +
pertalb GFS_surface_generic_pre magnitude of surface albedo perturbation -999. +
pertvegf GFS_surface_generic_pre magnitude of perturbation of vegetation fraction -999. +
\b Parameters \b related \b to \b microphysics \b scheme \b options +
lradar gfdl_cloud_microphys flag for computing radar reflectivity in Thompson MP scheme .false. +
sedi_transport gfdl_cloud_microphys flag for turning on horizontal momentum transport during sedimentation .true. +
do_sedi_w gfdl_cloud_microphys \a .true. to turn on vertical motion transport during sedimentation. (not supported in GFS physics) .false. +
do_sedi_heat gfdl_cloud_microphys flag for turning on horizontal heat transport during sedimentation .true. +
rad_snow gfdl_cloud_microphys flag for considering snow in cloud fraction calculation .true. +
rad_graupel gfdl_cloud_microphys flag for considering graupel in cloud fraction calculation .true. +
rad_rain gfdl_cloud_microphys flag for considering rain in cloud fraction calculation .true. +
cld_min gfdl_cloud_microphys minimum cloud fraction. If total cloud condensate exceeds 1.0e-6 kg/kg, cloud fraction cannot be less than \p cld_min 0.05 +
const_vi gfdl_cloud_microphys flag for using constant cloud ice fall speed .false. +
const_vs gfdl_cloud_microphys flag for using constant snow fall speed .false. +
const_vg gfdl_cloud_microphys flag for using constant graupel fall speed .false. +
const_vr gfdl_cloud_microphys flag for using constant rain fall speed .false. +
vi_fac gfdl_cloud_microphys tunable factor for cloud ice fall or the constant cloud ice fall speed when \p const_vi is .true. 1. +
vr_fac gfdl_cloud_microphys tunable factor for rain fall or the constant rain fall speed when \p const_vr is .true. 1. +
vs_fac gfdl_cloud_microphys tunable factor for snow fall or the constant snow fall speed when \p const_vs is .true. 1. +
vg_fac gfdl_cloud_microphys tunable factor for graupel fall or the constant graupel fall speed when \p const_vg is .true. 1. +
vi_max gfdl_cloud_microphys maximum fall speed for cloud ice 0.5 +
vs_max gfdl_cloud_microphys maximum fall speed for snow 5.0 +
vg_max gfdl_cloud_microphys maximum fall speed for graupel 8.0 +
vr_max gfdl_cloud_microphys maximum fall speed for rain 12.0 +
qi_lim gfdl_cloud_microphys cloud ice limiter to prevent large ice built up in cloud ice freezing and deposition 1. +
prog_ccn gfdl_cloud_microphys flag for activating prognostic CCN (not supported in GFS Physics) .false. +
do_qa gfdl_cloud_microphys \a .true. to activate inline cloud fraction diagnosis in fast saturation adjustment. \a .false. to activate inline cloud fraction diagnosis in major cloud microphysics .true. +
fast_sat_adj gfdl_cloud_microphys flag for adjusting cloud water evaporation (cloud water -> water vapor), cloud water freezing (cloud water -> cloud ice), cloud ice deposition (water vapor -> cloud ice) when fast saturation adjustment is activated (\b do_sat_adj = .true. in \b fv_core_nml block) .true. +
tau_l2v gfdl_cloud_microphys time scale for evaporation of cloud water to water vapor. Increasing(decreasing) \p tau_l2v can decrease(boost) deposition of cloud water to water vapor 300. +
tau_v2l gfdl_cloud_microphys time scale for condensation of water vapor to cloud water. Increasing(decreasing) \p tau_v2l can decrease(boost) condensation of water vapor to cloud water 150. +
tau_g2v gfdl_cloud_microphys time scale for sublimation of graupel to water vapor. Increasing(decreasing) \p tau_g2v can decrease(boost) sublimation of graupel to water vapor 900. +
tau_g2r gfdl_cloud_microphys time scale for graupel melting. Increasing(decreasing) \p tau_g2r can decrease(boost) melting of graupel to rain (graupel-> rain) 600. +
tau_v2g gfdl_cloud_microphys time scale for deposition of water vapor to graupel. Increasing(decreasing) \p tau_v2g can decrease(boost) deposition of water vapor to graupel (water vapor -> graupel) 21600. +
tau_l2r gfdl_cloud_microphys time scale for autoconversion of cloud water to rain. Increasing(decreasing) \p tau_l2r can decrese(boost) autoconversion of cloud water to rain (cloud water -> rain) 900. +
tau_r2g gfdl_cloud_microphys time scale for freezing of rain to graupel. Increasing(decreasing) \p tau_r2g can decrease(boost) freezing of rain to graupel (rain->graupel) 900. +
tau_i2s gfdl_cloud_microphys time scale for autoconversion of cloud ice to snow. Increasing(decreasing) \p tau_i2s can decrease(boost) autoconversion of cloud ice to snow (cloud ice -> snow) 1000. +
tau_imlt gfdl_cloud_microphys time scale for cloud ice melting. Increasing(decreasing) \p tau_imlt can decrease(boost) melting of cloud ice to cloud water or rain (cloud ice -> cloud water or rain) 600. +
tau_smlt gfdl_cloud_microphys time scale for snow melting. Increasing(decreasing) \p tau_smlt can decrease(boost) melting of snow to cloud water or rain (snow-> cloud water or rain) 900. +
rthresh gfdl_cloud_microphys critical cloud water radius for autoconversion (cloud water -> rain). Increasing(decreasing) of \p rthresh makes the autoconversion harder(easier) 10.0e-6 +
dw_land gfdl_cloud_microphys base value for subgrid deviation/variability over land 0.20 +
dw_ocean gfdl_cloud_microphys base value for subgrid deviation/variability over ocean 0.10 +
ql_gen gfdl_cloud_microphys maximum value for cloud water generated from condensation of water vapor (water vapor-> cloud water) 1.0e-3 +
qi_gen gfdl_cloud_microphys maximum value of cloud ice generated from deposition of water vapor (water vapor->cloud ice) or freezing(cloud water -> cloud ice). Increasing(decreasing) \p qi_gen can increas(decrease) cloud ice 1.82e-6 +
ql_mlt gfdl_cloud_microphys maximum value of cloud water allowed from melted cloud ice (cloud ice -> cloud water or rain). Exceedance of which will become rain. Increasing(decreasing) \p ql_mlt can increase(decrease) cloud water and decrease(increase) rain 2.0e-3 +
qs_mlt gfdl_cloud_microphys maximum value of cloud water allowed from melted snow (snow -> cloud water or rain). Exceedance of which will become rain. Increasing(decreasing) \p qs_mlt can increas(decrease) cloud water and decrease (increase) rain 1.0e-6 +
ql0_max gfdl_cloud_microphys threshold of cloud water to rain autoconversion (cloud water -> rain). Increasing(decreasing) \p ql0_max can increase(decrease) rain and decrease(increase) cloud water 2.0e-3 +
qi0_max gfdl_cloud_microphys maximum value of cloud ice generated from other sources like convection. Exceedance of which will become snow. Increasing(decreasing) \p qi0_max can increase(decrease) cloud ice and decrease(increase) snow 1.0e-4 +
qi0_crt gfdl_cloud_microphys threshold of cloud ice to snow autoconversion (cloud ice -> snow). Increasing(decreasing) \p qi0_crt can increase(decrease) cloud ice and decrease(increase) snow 1.0e-4 +
qs0_crt gfdl_cloud_microphys threshold of snow to graupel autoconversion (snow -> graupel). Increasing(decreasing) \p qs0_crt can increase(decrease) snow and decrease(increase) graupel 1.0e-3 +
qc_crt gfdl_cloud_microphys minimum value of cloud condensate to allow partial cloudiness. Partial cloud can only exist when total cloud condensate exceeds \p qc_crt 5.0e-8 +
c_psaci gfdl_cloud_microphys accretion efficiency of cloud ice to snow (cloud ice -> snow). Increasing(decreasing) of \p c_psaci can boost(decrease) the accretion of cloud ice to snow 0.02 +
c_pgacs gfdl_cloud_microphys accretion efficiency of snow to graupel (snow -> graupel). Increasing(decreasing) of \p c_pgacs can boost(decrease) the accretion of snow to graupel 2.0e-3 +
rh_inc gfdl_cloud_microphys relative humidity increment for complete evaporation of cloud water and cloud ice 0.25 +
rh_inr gfdl_cloud_microphys relative humidity increment for sublimation of snow 0.25 +
rh_ins gfdl_cloud_microphys relative humidity increment for minimum evaporation of rain 0.25 +
rthresh gfdl_cloud_microphys critical cloud water radius for autoconversion(cloud water->rain). Increasing(decreasing) of \p rthresh makes the autoconversion harder(easier) 1.0e-5 +
ccn_l gfdl_cloud_microphys base CCN over land. Increasing(decreasing) \p ccn_l can on the one hand boost(decrease) the autoconversion of cloud water to rain, on the other hand make the autoconversion harder(easier). The unit is \f$cm^{-3}\f$ 270. +
ccn_o gfdl_cloud_microphys base CCN over ocean. Increasing(decreasing) \p ccn_o can on the one hand boost(decrease) the autoconversion of cloud water to rain, on the other hand make the autoconversion harder(easier). The unit is \f$cm^{-3}\f$ 90. +
c_paut gfdl_cloud_microphys autoconversion efficiency of cloud water to rain (cloud water -> rain). Increasing(decreasing) of \p c_paut can boost(decrease) the autoconversion of cloud water to rain 0.55 +
c_cracw gfdl_cloud_microphys accretion efficiency of cloud water to rain (cloud water -> rain). Increasing(decreasing) of \p c_cracw can boost(decrease) the accretion of cloud water to rain 0.9 +
sat_adj0 gfdl_cloud_microphys adjust factor for condensation of water vapor to cloud water (water vapor->cloud water) and deposition of water vapor to cloud ice 0.9 +
use_ppm gfdl_cloud_microphys \e true to use PPM fall scheme; \e false to use time-implicit monotonic fall scheme .false. +
use_ccn gfdl_cloud_microphys \e true to compute prescribed CCN. It should be .true. when \p prog_ccn = .false. .false. +
mono_prof gfdl_cloud_microphys \e true to turn on terminal fall with monotonic PPM scheme. This is used together with \p use_ppm=.true. .true. +
z_slope_liq gfdl_cloud_microphys \e true to turn on vertically subgrid linear monotonic slope for autoconversion of cloud water to rain .true. +
z_slope_ice gfdl_cloud_microphys \e true to turn on vertically subgrid linear monotonic slope for autoconversion of cloud ice to snow .false. +
de_ice gfdl_cloud_microphys \e true to convert excessive cloud ice to snow to prevent ice over-built from other sources like convection scheme (not supported in GFS physics) .false. +
fix_negative gfdl_cloud_microphys \e true to fix negative water species using nearby points .false. +
icloud_f gfdl_cloud_microphys flag (0,1,or 2) for cloud fraction diagnostic scheme 0 +
irain_f gfdl_cloud_microphys flag (0 or 1) for cloud water autoconversion to rain scheme. 0: with subgrid variability; 1: no subgrid variability 0 +
mp_time gfdl_cloud_microphys time step of GFDL cloud microphysics (MP). If \p mp_time isn't divisible by physics time step or is larger than physics time step, the actual MP time step becomes \p dt/NINT[dt/MIN(dt,mp_time)] 150. +
alin gfdl_cloud_microphys parameter \a a in Lin et al.(1983). Constant in empirical formula for \f$U_R\f$. Increasing(decreasing) \p alin can boost(decrease) accretion of cloud water by rain and rain evaporation 842. +
clin gfdl_cloud_microphys parameter \a c in Lin et al.(1983). Constant in empirical formula for \f$U_S\f$. Increasing(decreasing) \p clin can boost(decrease) accretion of cloud water by snow, accretion of cloud ice by snow, snow sublimation and deposition, and snow melting 4.8 +
t_min gfdl_cloud_microphys temperature threshold for instant deposition. Deposit all water vapor to cloud ice when temperature is lower than \p t_min 178. +
t_sub gfdl_cloud_microphys temperature threshold for sublimation. Cloud ice, snow or graupel stops(starts) sublimation when temperature is lower(higher) then \p t_sub 184. +
mp_print gfdl_cloud_microphys \a .true. to turn on GFDL cloud microphysics debugging print out. (not supported in GFS physics) .false. +
ltaerosol mp_thompson flag for using aerosol climotology in Thompson MP scheme .false. +
ttendlim mp_thompson temperature tendency limiter per time step in K/s, set to < 0 to deactivate -999.0 +
effr_in gfdl_cloud_microphys, mp_thompson, m_micro flag for using input cloud effective radii calculation .false. +
cnvcld see \a GFS_typedefs.F90 flag for convective cloud .false. +
lgfdlmprad GFS_rrtmg_pre flag for GFDL mp scheme and radiation consistency .false. +
do_sb_physics m_micro flag for SB2001 autoconversion or accretion .true. +
do_cldice m_micro flag for cloud ice processes for MG microphysics .true. +
hetfrz_classnuc m_micro flag for heterogeneous freezing for MG microphysics .false. +
mg_nccons m_micro flag for constant droplet concentration for MG microphysics .false. +
mg_nicons m_micro flag for constant ice concentration for MG microphysics .false. +
mg_ngcons m_micro flag for constant graupel concentration for MG microphysics .false. +
sed_supersat m_micro flag for allowing supersaturation after sedimentation for MG microphysics .true. +
mg_do_graupel m_micro flag for turning on prognostic graupel (with fprcp=2) .true. +
mg_do_hail m_micro flag for turning on prognostic hail (with fprcp=2) .false. +
microp_uniform m_micro flag for uniform subcolumns for MG microphysics .true. +
mg_do_ice_gmao m_micro flag for turning on gmao ice autoconversion in MG microphysics .false. +
mg_do_liq_liu m_micro flag for turning on Liu liquid treatment in MG microphysics .true. +
mg_dcs m_micro autoconversion size threshold for cloud ice to snow in MG microphysics 200.0 +
mg_ts_auto_ice(2) m_micro autoconversion time scale for ice in MG microphysics 180.0,180.0 +
mg_qcvar m_micro cloud water relative variance in MG microphysics 1.0 +
mg_rhmini m_micro relative humidity threshold parameter for nucleating ice 1.01 +
mg_ncnst m_micro constant droplet num concentration \f$m^{-3}\f$ 100.e6 +
mg_ninst m_micro constant ice num concentration \f$m^{-3}\f$ 0.15e6 +
mg_ngnst m_micro constant graupel/hail num concertration \f$m^{-3}\f$ 0.10e6 +
mg_berg_eff_factor m_micro berg efficiency factor 2.0 +
mg_precip_frac_method m_micro type of precipitation fraction method 'max_overlap' +
fprcp m_micro number of frozen precipitation species in MG microphysics \n +
    +
  • 0: no prognostic rain and snow +
  • 1: MG2 +
  • 2: MG3 +
+
0 +
pdfflag m_micro pdf flag for MG macro physics 4 +
iccn m_micro flag for using IN and CCN forcing in MG2/3 microphysics .false. +
iaerclm m_micro flag for initializing aerosol data .false. +
rhcmax m_micro maximum critical relative humidity 0.9999999 +
aero_in m_micro flag for using aerosols in Morrison-Gettelman microphysics .false. +
\b Parameters \b related \b to \b gravity \b drag \b scheme \b options +
knob_ugwp_version cires_ugwp parameter selects a version of the UGWP implementation in FV3GFS-127L \n
  • 0: default version delivered to EMC in Jan 2019 for implementation
  • 1: version of UGWP under development that plans to consider the physics-based sources of NGWs (\b knob_ugwp_wvspec [2:4]), options for stochastic and deterministic excitation of waves (\b knob_ugwp_stoch), and switches between different UGWP schemes (\b knob_ugwp_solver)
0 -
knob_ugwp_doaxyz cires_ugwp_module parameter controls application of the momentum deposition for NGW-schemes \n +
knob_ugwp_doaxyz cires_ugwp parameter controls application of the momentum deposition for NGW-schemes \n
  • 0: the momentum tendencies due to NGWs are calculated, but tendencies do not change the horizontal winds
  • 1: default value; it changes the horizontal momentum tendencies and horizontal winds
1 -
knob_ugwp_doheat cires_ugwp_module parameter controls application of the heat deposition for NGW-schemes \n +
knob_ugwp_doheat cires_ugwp parameter controls application of the heat deposition for NGW-schemes \n
  • 0: the temperature tendencies due to NGWs are calculated but tendencies do not change the temperature state
  • 1: default value; it changes the temperature tendencies and kinetic temperature
1 -
knob_ugwp_dokdis cires_ugwp_module parameter controls application of the eddy diffusion due to instability of NGWs \n +
knob_ugwp_dokdis cires_ugwp parameter controls application of the eddy diffusion due to instability of NGWs \n
  • 0: the eddy diffusion tendencies due to NGWs are calculated but tendencies do not change the model state vector
  • 1: it computes eddy diffusion coefficient due to instability of NGWs; in UGWP v0, eddy viscosity, heat conductivity and tracer diffusion are not activated
0 -
knob_ugwp_solver cires_ugwp_module parameter controls the selection of UGWP-solvers(wave propagation, dissipation and wave breaking) for NGWs \n +
knob_ugwp_solver cires_ugwp parameter controls the selection of UGWP-solvers(wave propagation, dissipation and wave breaking) for NGWs \n
  • 1: represents the discrete multi-wave solver with background dissipation and linear wave saturation
  • 2: represents the spectral deterministic solver with background dissipation and spectral saturation @@ -522,28 +453,196 @@ and how stochastic perturbations are used in the Noah Land Surface Model.
  • 4: represents the spectral solver with background dissipation, extension of Doppler Spread Theory of Hines (1997)
1 -
knob_ugwp_ndx4lh cires_ugwp_module parameter controls the selection of the horizontal wavenumber(wavelength) for NGW schemes \n +
knob_ugwp_ndx4lh cires_ugwp parameter controls the selection of the horizontal wavenumber(wavelength) for NGW schemes \n
  • 1: selects the \f$4xdx\f$ sub-grid wavelength, where dx is the horizontal resolution of the model configuration (C96-400km; C768-52km)
2 -
knob_ugwp_wvspec cires_ugwp_module four-dimensional array defines number of waves in each arimuthal propagation (as defined by knob_ugwp_azdir) for GWs excited due to the following four sources: \n +
knob_ugwp_wvspec cires_ugwp four-dimensional array defines number of waves in each arimuthal propagation (as defined by knob_ugwp_azdir) for GWs excited due to the following four sources: \n (1) sub-grid orography (\b knob_ugwp_wvspec[1]=1), \n (2) convective (\b knob_ugwp_wvspec[2]=25), \n (3) frontal (\b knob_ugwp_wvspec[3]=25) activity, \n (4) \b knob_ugwp_wvspec[4] represents number of wave excited by dynamical imbalances that may mimic both convective and front-jet mechanisms of GW triggering. \n In UGWP v0, first two elements of the array, \b knob_ugwp_wvspec(1:2), control number of waves for stationary (OGW) and nonstationary waves (NGWs). 1,32,32,32 -
knob_ugwp_azdir cires_ugwp_module four-dimensional array that defines number of azimuths for propagation of GWs triggered by four types of physics-based sources (orography, convection, front-jets, and dynamical imbalance). In UGWP v0, first two elements of the array, \b knob_ugwp_azdir(1:2), control number of azimuths for OGW and NGWs respectively. +
knob_ugwp_azdir cires_ugwp four-dimensional array that defines number of azimuths for propagation of GWs triggered by four types of physics-based sources (orography, convection, front-jets, and dynamical imbalance). In UGWP v0, first two elements of the array, \b knob_ugwp_azdir(1:2), control number of azimuths for OGW and NGWs respectively. 2,4,4,4 -
knob_ugwp_stoch cires_ugwp_module four-dimensional array that control stochastic selection of GWs triggered by four types of physics-based sources. \n +
knob_ugwp_stoch cires_ugwp four-dimensional array that control stochastic selection of GWs triggered by four types of physics-based sources. \n Default values:0,0,0,0 - reflect determinstic selection of GW parameters without stochastic selection 0,0,0,0 -
knob_ugwp_effac cires_ugwp_module four-dimensional array that control efficiency of GWs triggerd by four types of physics-based sources. \n +
knob_ugwp_effac cires_ugwp four-dimensional array that control efficiency of GWs triggerd by four types of physics-based sources. \n Default values: 1.,1.,1.,1. - reflect that calculated GW-tendencies will be applied for the model state. 1.,1.,1.,1. -
launch_level cires_ugwp_module parameter has been introduced by EMC during implementation. It defines the interface model level from the surface at which NGWs are launched. \n +
launch_level cires_ugwp parameter has been introduced by EMC during implementation. It defines the interface model level from the surface at which NGWs are launched. \n Default value for FV3GFS-64L, launch_level=25 and for FV3GFS-128L, launch_level=52. 55 +
ldiag_ugwp cires_ugwp flag for CIRES UGWP diagnostics .false. +
do_ugwp cires_ugwp flag for CIRES UGWP revised OGW \n +
    +
  • .T.: revised gwdps_v0 +
  • .F.: GFS operational orographic gwdps +
+
.false.; The CIRES Unified Gravity Wave Physics (cires_ugwp) scheme is used in GFSv15p2 and GFSv16beta SDFs with do_ugwp=F in the namelist. In this setting, the cires_ugwp calls the operational GFS v15.2 orographic gravity wave drag (gwdps) scheme. When do_ugwp=.T., the cires_ugwp scheme calls an experimental orographic gravity wave (gwdps_v0) +
do_tofd cires_ugwp flag for turbulent orographic form drag .false. +
cnvgwd cires_ugwp flag for convective gravity wave drag scheme dependent on maxval(cdmbgwd(3:4) == 0.0) .false. +
cdmbgwd(4) cires_ugwp multiplication factors for mountain blocking(1), orographic gravity wave drag(2) +
    +
  • [1]: GWDPS mountain blocking +
  • [2]: GWDPS orographic gravity wave drag +
  • [3]: the modulation total momentum flux of NGWs by intensities of the total precipitation +
  • [4]: TKE for future tests and applications +
+
2.0,0.25,1.0,1.0 +
do_cnvgwd gwdc flag for convective GWD cnvgwd .and. maxval(cdmbgwd(3:4)) == 0.0 +
nmtvr cires_ugwp number of topographic variables such as variance etc used in the GWD parameterization-10 more added if GSL orographic drag scheme is used 14 +
cgwf cires_ugwp ,gwdc multiplication factor for convective GWD 0.5d0,0.05d0 +
do_gwd see \a GFS_typedefs.F90 flag for gravity wave drag maxval(cdmbgwd) > 0.0 +
gwd_opt drag_suite flag for GWD scheme \n +
    +
  • 1: original GFS GWD +
  • 3: GSL drag suite +
  • 33: GSL drag suite with extra output +
  • +
+
1 +
\b Parameters \b related \b to \b LSM \b options +
lsm see \a GFS_typedefs.F90 flag for land surface model to use \n +
    +
  • 1: Noah LSM +
  • 2: NoahMP LSM +
  • 3: RUC LSM +
+
1 +
lsoil lsm_noah number of soil layers 4 +
rdlai lsm_ruc flag to read leaf area index from input files .false. +
ivegsrc lsm_noah, lsm_ruc, \ref noahmpdrv, sfc_diff flag for vegetation type dataset choice: \n +
    +
  • 0: USGS +
  • 1: IGBP(20 category): IGBP must be selected if NoahMP is used +
  • 2: UMD (13 category) +
+
2 +
isot lsm_noah, lsm_ruc, \ref noahmpdrv flag for soil type dataset choice:\n +
    +
  • 0: Zobler soil type (9 category) +
  • 1: STATSGO soil type (19 category): STATSGO must be selected if NoahMP is used +
+
0 + +
iopt_dveg \ref noahmpdrv options for dynamic vegetation \n +
    +
  • 1: off (use table LAI; use FVEG = SHDFAC from input) +
  • 2: on (together with \a iopt_crs = 1) +
  • 3: off (use table LAI; calculate FVEG) +
  • 4: off (use table LAI; use maximum vegetation fraction) +
  • 5: on (use maximum vegetation fraction) +
  • 6: on (use FVEG = SHDFAC from input) +
  • 7: off (use input LAI; use FVEG = SHDFAC from input) +
  • 8: off (use input LAI; calculate FVEG) +
  • 9: off (use input LAI; use maximum vegetation fraction) +
+
4 +
iopt_crs \ref noahmpdrv options for canopy stomatal resistance \n +
    +
  • 1: Ball-Berry +
  • 2: Jarvis +
+
1 +
iopt_btr \ref noahmpdrv options for soil moisture factor for stomatal resistance \n +
    +
  • 1: Noah (soil moisture) +
  • 2: CLM (matric potential) +
  • 3: SSIB (matric potential) +
+
1 +
iopt_run \ref noahmpdrv options for runoff and groundwater \n +
    +
  • 1: TOPMODEL with groundwater (Niu et al. 2007 \cite niu_et_al_2007) +
  • 2: TOPMODEL with an equilibrium water table (Niu et al. 2005 \cite niu_et_al_2005) +
  • 3: original surface and subsurface runoff (free drainage) +
  • 4: bats surface and subsurface runoff (free drainage) +
  • 5: Miguez-macho&Fan groundwater scheme (Miguez-Macho et al. 2007 \cite miguez_et_al_2007; Fan et al. 2007 \cite fan_et_al_2007; needs further testing for public use) +
+
3 +
iopt_sfc \ref noahmpdrv options for surface layer drag coeff (CH&CM) \n +
    +
  • 1: m-o +
  • 2: original Noah (Chen et al. 1997 \cite chen_et_al_1997) +
+
1 +
iopt_frz \ref noahmpdrv options for supercooled liquid water (or ice fraction) \n +
    +
  • 1: no interation (Niu and Yang (2006) \cite niu_and_yang_2006 ) +
  • 2: Koren's iteration +
+
1 +
iopt_inf \ref noahmpdrv options for frozen soil permeability \n +
    +
  • 1: linear effects, more permeable (Niu and Yang (2006) \cite niu_and_yang_2006) +
  • 2: nonlinear effects, less permeable (old) +
+
1 +
iopt_rad \ref noahmpdrv options for radiation transfer \n +
    +
  • 1: modified two-stream (gap = f(solar angle, 3d structure ...)<1-fveg) +
  • 2: two-stream applied to grid-cell (gap = 0) +
  • 3: two-stream applied to vegetated fraction (gap=1-FVEG) +
+
3 +
iopt_alb \ref noahmpdrv options for ground snow surface albedo \n +
    +
  • 1: BATS +
  • 2: CLASS +
+
2 +
iopt_snf \ref noahmpdrv options for partitioning precipitation into rainfall and snowfall \n +
    +
  • 1: Jordan (1991) +
  • 2: BATS: when sfctmp < tfrz+2.2 +
  • 3: sfctmp < tfrz +
  • 4: use WRF microphysics output +
+
1 +
iopt_tbot \ref noahmpdrv options for lower boundary condition of soil temperature \n +
    +
  • 1: zero heat flux from bottom (zbot and tbot not used) +
  • 2: tbot at zbot (8m) read from a file (original Noah) +
+
2 +
iopt_stc \ref noahmpdrv options for snow/soil temperature time scheme (only layer 1) \n +
    +
  • 1: semi-implicit; flux top boundary condition +
  • 2: full implicit (original Noah); temperature top boundary condition +
  • 3: same as 1, but fsno for ts calculation (generally improve snow; v3.7) +
+
1 + +
nstf_name(5) sfc_nst NSST related paramters:\n +
    +
  • nstf_name(1): 0=NSST off, 1= NSST on but uncoupled, 2= NSST on and coupled +
  • nstf_name(2): 1=NSST spin up on, 0=NSST spin up off +
  • nstf_name(3): 1=NSST analysis on, 0=NSST analysis off +
  • nstf_name(4): zsea1 in mm +
  • nstf_name(5): zesa2 in mm +
+
/0,0,1,0,5/ +
\b Parameters \b related \b to \b other \b surface \b scheme \b options +
nst_anl GFS_phys_time_vary flag for NSST analysis in gcycle/sfcsub .false. +
frac_grid fractional grid flag for fractional grid .false. +
min_lakeice fractional grid minimum lake ice value 0.15d0 +
min_seaice fractional grid minimum sea ice value 1.0d-11 +
min_lake_height fractional grid minimum lake height value 250.0 +
sfc_z0_type sfc_diff surface roughness options over ocean \n +
    +
  • 0: no change +
  • 6: areodynamical roughness over water with input 10-m wind +
  • 7: slightly decrease Cd for higher wind speed compared to 6 +
  • negative when cplwav2atm=.true. - i.e. two way wave coupling +
+
0 +
redrag sfc_diff flag for applying reduced drag coefficient for high wind over sea in GFS surface layer scheme .false. +
lheatstrg GFS_surface_generic_post flag for canopy heat storage parameterization .false. +
z0fac GFS_surface_generic_post surface roughness fraction factor 0.3 +
e0fac GFS_surface_generic_post latent heat flux fraction factor relative to sensible heat flux,e.g., e0fac=0.5 indicates that canopy heat storage for latent heat flux is 50% of that for sensible heat flux 0.5
*/ diff --git a/physics/drag_suite.F90 b/physics/drag_suite.F90 index 2e68ceb12..92a1c0bd3 100644 --- a/physics/drag_suite.F90 +++ b/physics/drag_suite.F90 @@ -300,8 +300,8 @@ subroutine drag_suite_run( & integer, intent(in) :: im, km, imx, kdt, ipr, me, master integer, intent(in) :: gwd_opt logical, intent(in) :: lprnt - integer, intent(in) :: KPBL(im) - real(kind=kind_phys), intent(in) :: deltim, G, CP, RD, RV, cdmbgwd(2) + integer, intent(in) :: KPBL(:) + real(kind=kind_phys), intent(in) :: deltim, G, CP, RD, RV, cdmbgwd(:) integer :: kpblmax integer, parameter :: ims=1, kms=1, its=1, kts=1 @@ -310,29 +310,29 @@ subroutine drag_suite_run( & real(kind=kind_phys) :: g_inv real(kind=kind_phys), intent(inout) :: & - & dudt(im,km),dvdt(im,km), & - & dtdt(im,km) - real(kind=kind_phys), intent(out) :: rdxzb(im) + & dudt(:,:),dvdt(:,:), & + & dtdt(:,:) + real(kind=kind_phys), intent(out) :: rdxzb(:) real(kind=kind_phys), intent(in) :: & - & u1(im,km),v1(im,km), & - & t1(im,km),q1(im,km), & - & PHII(im,km+1),prsl(im,km), & - & prslk(im,km),PHIL(im,km) - real(kind=kind_phys), intent(in) :: prsi(im,km+1), & - & del(im,km) - real(kind=kind_phys), intent(in) :: var(im),oc1(im), & - & oa4(im,4),ol4(im,4), & - & dx(im) - real(kind=kind_phys), intent(in) :: varss(im),oc1ss(im), & - & oa4ss(im,4),ol4ss(im,4) - real(kind=kind_phys), intent(in) :: THETA(im),SIGMA(im), & - & GAMMA(im),ELVMAX(im) + & u1(:,:),v1(:,:), & + & t1(:,:),q1(:,:), & + & PHII(:,:),prsl(:,:), & + & prslk(:,:),PHIL(:,:) + real(kind=kind_phys), intent(in) :: prsi(:,:), & + & del(:,:) + real(kind=kind_phys), intent(in) :: var(:),oc1(:), & + & oa4(:,:),ol4(:,:), & + & dx(:) + real(kind=kind_phys), intent(in) :: varss(:),oc1ss(:), & + & oa4ss(:,:),ol4ss(:,:) + real(kind=kind_phys), intent(in) :: THETA(:),SIGMA(:), & + & GAMMA(:),ELVMAX(:) ! added for small-scale orographic wave drag real(kind=kind_phys), dimension(im,km) :: utendwave,vtendwave,thx,thvx - real(kind=kind_phys), intent(in) :: br1(im), & - & hpbl(im), & - & slmsk(im) + real(kind=kind_phys), intent(in) :: br1(:), & + & hpbl(:), & + & slmsk(:) real(kind=kind_phys), dimension(im) :: govrth,xland !real(kind=kind_phys), dimension(im,km) :: dz2 real(kind=kind_phys) :: tauwavex0,tauwavey0, & @@ -346,7 +346,7 @@ subroutine drag_suite_run( & !Output: real(kind=kind_phys), intent(out) :: & - & dusfc(im), dvsfc(im) + & dusfc(:), dvsfc(:) !Output (optional): real(kind=kind_phys), intent(out) :: & & dusfc_ls(:),dvsfc_ls(:), & @@ -1309,7 +1309,6 @@ subroutine drag_suite_run( & end subroutine drag_suite_run !------------------------------------------------------------------- ! - subroutine drag_suite_finalize() end subroutine drag_suite_finalize diff --git a/physics/drag_suite.meta b/physics/drag_suite.meta index 3035a2c95..26912cee4 100644 --- a/physics/drag_suite.meta +++ b/physics/drag_suite.meta @@ -271,7 +271,7 @@ dimensions = (horizontal_loop_extent) type = real kind = kind_phys - intent = inout + intent = in optional = F [dtaux2d_ls] standard_name = tendency_of_x_wind_due_to_mesoscale_orographic_gravity_wave_drag diff --git a/physics/flake_driver.F90 b/physics/flake_driver.F90 index b882c7404..1e8714461 100644 --- a/physics/flake_driver.F90 +++ b/physics/flake_driver.F90 @@ -51,7 +51,7 @@ SUBROUTINE flake_driver_run ( & ! ---- Inputs im, ps, t1, q1, wind, & dlwflx, dswsfc, weasd, lakedepth, & - lake, xlat, delt, zlvl, elev, & + use_flake, xlat, delt, zlvl, elev, & wet, flag_iter, yearlen, julian, imon, & ! ---- in/outs snwdph, hice, tsurf, fice, T_sfc, hflx, evap, & @@ -81,21 +81,21 @@ SUBROUTINE flake_driver_run ( & integer, intent(in) :: im, imon,yearlen ! integer, dimension(im), intent(in) :: islmsk - real (kind=kind_phys), dimension(im), intent(in) :: ps, wind, & + real (kind=kind_phys), dimension(:), intent(in) :: ps, wind, & & t1, q1, dlwflx, dswsfc, zlvl, elev real (kind=kind_phys), intent(in) :: delt - real (kind=kind_phys), dimension(im), intent(in) :: & + real (kind=kind_phys), dimension(:), intent(in) :: & & xlat, weasd, lakedepth - real (kind=kind_phys),dimension(im),intent(inout) :: & + real (kind=kind_phys),dimension(:),intent(inout) :: & & snwdph, hice, tsurf, t_sfc, hflx, evap, fice, ustar, qsfc, & & ch, cm, chh, cmm real (kind=kind_phys), intent(in) :: julian - logical, dimension(im), intent(in) :: flag_iter, wet, lake + logical, dimension(:), intent(in) :: flag_iter, wet, use_flake character(len=*), intent(out) :: errmsg integer, intent(out) :: errflg @@ -187,6 +187,10 @@ SUBROUTINE flake_driver_run ( & REAL (KIND = kind_phys) :: & lake_depth_max, T_bot_2_in, T_bot_2_out, dxlat,tb,tr,tt,temp,Kbar, DelK + +REAL (KIND = kind_phys) :: x, y !temperarory variables used for Tbot and Tsfc + !initilizations + INTEGER :: i,ipr,iter LOGICAL :: lflk_botsed_use @@ -212,7 +216,7 @@ SUBROUTINE flake_driver_run ( & do i = 1, im if (flag(i)) then - if( lake(i) ) then + if( use_flake(i) ) then T_ice(i) = 273.15 T_snow(i) = 273.15 fetch(i) = 2.0E+03 @@ -237,9 +241,23 @@ SUBROUTINE flake_driver_run ( & ! else ! T_sfc(i) = tsurf(i) ! endif - T_sfc(i) = 0.2*tt + 0.8* tsurf(i) + T_sfc(i) = 0.1*tt + 0.9* tsurf(i) + endif +! +! Add empirical climatology of lake Tsfc and Tbot to the current Tsfc and Tbot +! to make sure Tsfc and Tbot are warmer than Tair in Winter or colder than Tair +! in Summer + + x = 0.03279*julian + if(xlat(i) .ge. 0.0) then + y = ((((0.0034*x-0.1241)*x+1.6231)*x-8.8666)*x+17.206)*x-4.2929 + T_sfc(i) = T_sfc(i) + 0.3*y + tb = tb + 0.05*y + else + y = ((((0.0034*x-0.1241)*x+1.6231)*x-8.8666)*x+17.206)*x-4.2929 + T_sfc(i) = T_sfc(i) - 0.3*y + tb = tb - 0.05*y endif - T_bot(i) = tb T_B1(i) = tb @@ -275,7 +293,7 @@ SUBROUTINE flake_driver_run ( & ! print*,'inside flake driver' ! print*, julian,xlat(i),w_albedo(I),w_extinc(i),lakedepth(i),elev(i),tb,tt,tsurf(i),T_sfc(i) - endif !lake fraction and depth + endif !lake endif !flag enddo 1001 format ( 'At icount=', i5, ' x = ', f5.2,5x, 'y = ', & @@ -288,7 +306,7 @@ SUBROUTINE flake_driver_run ( & ! call lake interface do i=1,im if (flag(i)) then - if( lake(i) ) then + if( use_flake(i) ) then dMsnowdt_in = weasd(i)/delt I_atm_in = dswsfc(i) Q_atm_lw_in = dlwflx(i) diff --git a/physics/flake_driver.meta b/physics/flake_driver.meta index 2b857e509..74fb6b7e6 100644 --- a/physics/flake_driver.meta +++ b/physics/flake_driver.meta @@ -96,8 +96,8 @@ intent = in optional = F [dlwflx] - 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 + standard_name = surface_downwelling_longwave_flux_absorbed_by_ground_over_water + long_name = total sky surface downward longwave flux absorbed by the ground over water units = W m-2 dimensions = (horizontal_loop_extent) type = real @@ -114,13 +114,13 @@ intent = in optional = F [weasd] - standard_name = water_equivalent_accumulated_snow_depth_over_ocean - long_name = water equiv of acc snow depth over ocean + standard_name = water_equivalent_accumulated_snow_depth_over_water + long_name = water equiv of acc snow depth over water units = mm dimensions = (horizontal_loop_extent) type = real kind = kind_phys - intent = inout + intent = in optional = F [lakedepth] standard_name = lake_depth @@ -131,7 +131,7 @@ kind = kind_phys intent = in optional = F -[lake] +[use_flake] standard_name = flag_nonzero_lake_surface_fraction long_name = flag indicating presence of some lake surface area fraction units = flag @@ -217,13 +217,13 @@ intent = in optional = F [snwdph] - standard_name = surface_snow_thickness_water_equivalent_over_ocean - long_name = water equivalent snow depth over ocean + standard_name = surface_snow_thickness_water_equivalent_over_water + long_name = water equivalent snow depth over water units = mm dimensions = (horizontal_loop_extent) type = real kind = kind_phys - intent = in + intent = inout optional = F [hice] standard_name = sea_ice_thickness @@ -235,13 +235,13 @@ intent = inout optional = F [tsurf] - standard_name = surface_skin_temperature_after_iteration_over_ocean - long_name = surface skin temperature after iteration over ocean + standard_name = surface_skin_temperature_after_iteration_over_water + long_name = surface skin temperature after iteration over water units = K dimensions = (horizontal_loop_extent) type = real kind = kind_phys - intent = in + intent = inout optional = F [fice] standard_name = sea_ice_concentration @@ -253,8 +253,8 @@ intent = inout optional = F [t_sfc] - standard_name = surface_skin_temperature_over_ocean_interstitial - long_name = surface skin temperature over ocean (temporary use as interstitial) + standard_name = surface_skin_temperature_over_water_interstitial + long_name = surface skin temperature over water (temporary use as interstitial) units = K dimensions = (horizontal_loop_extent) type = real @@ -262,8 +262,8 @@ intent = inout optional = F [hflx] - standard_name = kinematic_surface_upward_sensible_heat_flux_over_ocean - long_name = kinematic surface upward sensible heat flux over ocean + standard_name = kinematic_surface_upward_sensible_heat_flux_over_water + long_name = kinematic surface upward sensible heat flux over water units = K m s-1 dimensions = (horizontal_loop_extent) type = real @@ -271,8 +271,8 @@ intent = inout optional = F [evap] - standard_name = kinematic_surface_upward_latent_heat_flux_over_ocean - long_name = kinematic surface upward latent heat flux over ocean + standard_name = kinematic_surface_upward_latent_heat_flux_over_water + long_name = kinematic surface upward latent heat flux over water units = kg kg-1 m s-1 dimensions = (horizontal_loop_extent) type = real @@ -280,8 +280,8 @@ intent = inout optional = F [ustar] - standard_name = surface_friction_velocity_over_ocean - long_name = surface friction velocity over ocean + standard_name = surface_friction_velocity_over_water + long_name = surface friction velocity over water units = m s-1 dimensions = (horizontal_loop_extent) type = real @@ -289,8 +289,8 @@ intent = inout optional = F [qsfc] - standard_name = surface_specific_humidity_over_ocean - long_name = surface air saturation specific humidity over ocean + standard_name = surface_specific_humidity_over_water + long_name = surface air saturation specific humidity over water units = kg kg-1 dimensions = (horizontal_loop_extent) type = real @@ -298,8 +298,8 @@ intent = inout optional = F [ch] - standard_name = surface_drag_coefficient_for_heat_and_moisture_in_air_over_ocean - long_name = surface exchange coeff heat & moisture over ocean + standard_name = surface_drag_coefficient_for_heat_and_moisture_in_air_over_water + long_name = surface exchange coeff heat surface exchange coeff heat & moisture over ocean moisture over water units = none dimensions = (horizontal_loop_extent) type = real @@ -307,8 +307,8 @@ intent = inout optional = F [cm] - standard_name = surface_drag_coefficient_for_momentum_in_air_over_ocean - long_name = surface exchange coeff for momentum over ocean + standard_name = surface_drag_coefficient_for_momentum_in_air_over_water + long_name = surface exchange coeff for momentum over water units = none dimensions = (horizontal_loop_extent) type = real @@ -316,8 +316,8 @@ intent = inout optional = F [chh] - standard_name = surface_drag_mass_flux_for_heat_and_moisture_in_air_over_ocean - long_name = thermal exchange coefficient over ocean + standard_name = surface_drag_mass_flux_for_heat_and_moisture_in_air_over_water + long_name = thermal exchange coefficient over water units = kg m-2 s-1 dimensions = (horizontal_loop_extent) type = real @@ -325,8 +325,8 @@ intent = inout optional = F [cmm] - standard_name = surface_drag_wind_speed_for_momentum_in_air_over_ocean - long_name = momentum exchange coefficient over ocean + standard_name = surface_drag_wind_speed_for_momentum_in_air_over_water + long_name = momentum exchange coefficient over water units = m s-1 dimensions = (horizontal_loop_extent) type = real diff --git a/physics/gcm_shoc.F90 b/physics/gcm_shoc.F90 index af7d6db49..97d12c3f6 100644 --- a/physics/gcm_shoc.F90 +++ b/physics/gcm_shoc.F90 @@ -36,12 +36,12 @@ subroutine shoc_run (nx, nzm, tcr, tcrf, con_cp, con_g, con_hvap, con_hfus, con_ con_rd, con_pi, con_fvirt, con_eps, & dtp, supice, pcrit, cefac, cesfac, tkef1, dis_opt ! - real(kind=kind_phys), intent(in), dimension(nx) :: hflx, evap - real(kind=kind_phys), intent(in), dimension(nx,nzm) :: prsl, delp, phil, u, v, omega, rhc, prnum - real(kind=kind_phys), intent(in), dimension(nx,nzm+1) :: phii + real(kind=kind_phys), intent(in), dimension(:) :: hflx, evap + real(kind=kind_phys), intent(in), dimension(:,:) :: prsl, delp, phil, u, v, omega, rhc, prnum + real(kind=kind_phys), intent(in), dimension(:,:) :: phii ! - real(kind=kind_phys), intent(inout), dimension(nx,nzm) :: gt0, cld_sgs, tke, tkh, wthv_sec - real(kind=kind_phys), intent(inout), dimension(nx,nzm,ntrac) :: gq0 + real(kind=kind_phys), intent(inout), dimension(:,:) :: gt0, cld_sgs, tke, tkh, wthv_sec + real(kind=kind_phys), intent(inout), dimension(:,:,:) :: gq0 character(len=*), intent(out) :: errmsg integer, intent(out) :: errflg @@ -1726,7 +1726,7 @@ end subroutine assumed_pdf real function esatw(t) - real t ! temperature (K) + real t ! temperature (K) real a0,a1,a2,a3,a4,a5,a6,a7,a8 data a0,a1,a2,a3,a4,a5,a6,a7,a8 / & 6.11239921, 0.443987641, 0.142986287e-1, & @@ -1739,8 +1739,8 @@ end function esatw real function qsatw(t,p) ! implicit none - real t ! temperature (K) - real p ! pressure (Pa) + real t ! temperature (K) + real p ! pressure (Pa) real esat ! esat = fpvs(t) esat = fpvsl(t) @@ -1751,7 +1751,7 @@ end function qsatw real function esati(t) - real t ! temperature (K) + real t ! temperature (K) real a0,a1,a2,a3,a4,a5,a6,a7,a8 data a0,a1,a2,a3,a4,a5,a6,a7,a8 / & 6.11147274, 0.503160820, 0.188439774e-1, & @@ -1771,8 +1771,8 @@ real function esati(t) end function esati real function qsati(t,p) - real t ! temperature (K) - real p ! pressure (Pa) + real t ! temperature (K) + real p ! pressure (Pa) real esat !,esati ! esat = fpvs(t) esat = fpvsi(t) @@ -1782,7 +1782,7 @@ real function qsati(t,p) end function qsati real function dtesatw(t) - real t ! temperature (K) + real t ! temperature (K) real a0,a1,a2,a3,a4,a5,a6,a7,a8 data a0,a1,a2,a3,a4,a5,a6,a7,a8 / & 0.443956472, 0.285976452e-1, 0.794747212e-3, & @@ -1794,14 +1794,14 @@ real function dtesatw(t) end function dtesatw real function dtqsatw(t,p) - real t ! temperature (K) - real p ! pressure (Pa) + real t ! temperature (K) + real p ! pressure (Pa) ! real dtesatw dtqsatw = 100.0*0.622*dtesatw(t)/p end function dtqsatw real function dtesati(t) - real t ! temperature (K) + real t ! temperature (K) real a0,a1,a2,a3,a4,a5,a6,a7,a8 data a0,a1,a2,a3,a4,a5,a6,a7,a8 / & 0.503223089, 0.377174432e-1, 0.126710138e-2, & @@ -1822,8 +1822,8 @@ end function dtesati real function dtqsati(t,p) - real t ! temperature (K) - real p ! pressure (Pa) + real t ! temperature (K) + real p ! pressure (Pa) ! real dtesati dtqsati = 100.0*0.622*dtesati(t)/p end function dtqsati diff --git a/physics/get_prs_fv3.F90 b/physics/get_prs_fv3.F90 index 224c8c853..b55ad1abe 100644 --- a/physics/get_prs_fv3.F90 +++ b/physics/get_prs_fv3.F90 @@ -24,12 +24,12 @@ subroutine get_prs_fv3_run(ix, levs, phii, prsi, tgrs, qgrs1, del, del_gz, errms ! Interface variables integer, intent(in) :: ix, levs - real(kind=kind_phys), dimension(ix,levs+1), intent(in) :: phii - real(kind=kind_phys), dimension(ix,levs+1), intent(in) :: prsi - real(kind=kind_phys), dimension(ix,levs), intent(in) :: tgrs - real(kind=kind_phys), dimension(ix,levs), intent(in) :: qgrs1 - real(kind=kind_phys), dimension(ix,levs), intent(out) :: del - real(kind=kind_phys), dimension(ix,levs+1), intent(out) :: del_gz + real(kind=kind_phys), dimension(:,:), intent(in) :: phii + real(kind=kind_phys), dimension(:,:), intent(in) :: prsi + real(kind=kind_phys), dimension(:,:), intent(in) :: tgrs + real(kind=kind_phys), dimension(:,:), intent(in) :: qgrs1 + real(kind=kind_phys), dimension(:,:), intent(out) :: del + real(kind=kind_phys), dimension(:,:), intent(out) :: del_gz character(len=*), intent(out) :: errmsg integer, intent(out) :: errflg @@ -85,11 +85,11 @@ subroutine get_phi_fv3_run(ix, levs, gt0, gq01, del_gz, phii, phil, errmsg, errf ! Interface variables integer, intent(in) :: ix, levs - real(kind=kind_phys), dimension(ix,levs), intent(in) :: gt0 - real(kind=kind_phys), dimension(ix,levs), intent(in) :: gq01 - real(kind=kind_phys), dimension(ix,levs+1), intent(inout) :: del_gz - real(kind=kind_phys), dimension(ix,levs+1), intent(out) :: phii - real(kind=kind_phys), dimension(ix,levs), intent(out) :: phil + real(kind=kind_phys), dimension(:,:), intent(in) :: gt0 + real(kind=kind_phys), dimension(:,:), intent(in) :: gq01 + real(kind=kind_phys), dimension(:,:), intent(inout) :: del_gz + real(kind=kind_phys), dimension(:,:), intent(out) :: phii + real(kind=kind_phys), dimension(:,:), intent(out) :: phil character(len=*), intent(out) :: errmsg integer, intent(out) :: errflg diff --git a/physics/gfdl_cloud_microphys.F90 b/physics/gfdl_cloud_microphys.F90 index c41323ad5..9574fe59e 100644 --- a/physics/gfdl_cloud_microphys.F90 +++ b/physics/gfdl_cloud_microphys.F90 @@ -135,29 +135,29 @@ subroutine gfdl_cloud_microphys_run( & ! interface variables integer, intent(in ) :: levs, im real(kind=kind_phys), intent(in ) :: con_g, con_fvirt, con_rd, con_eps - real(kind=kind_phys), intent(in ), dimension(1:im) :: frland, garea - integer, intent(in ), dimension(1:im) :: islmsk - real(kind=kind_phys), intent(inout), dimension(1:im,1:levs) :: gq0, gq0_ntcw, gq0_ntrw, gq0_ntiw, & + real(kind=kind_phys), intent(in ), dimension(:) :: frland, garea + integer, intent(in ), dimension(:) :: islmsk + real(kind=kind_phys), intent(inout), dimension(:,:) :: gq0, gq0_ntcw, gq0_ntrw, gq0_ntiw, & gq0_ntsw, gq0_ntgl, gq0_ntclamt - real(kind=kind_phys), intent(inout), dimension(1:im,1:levs) :: gt0, gu0, gv0 - real(kind=kind_phys), intent(in ), dimension(1:im,1:levs) :: vvl, prsl, del - real(kind=kind_phys), intent(in ), dimension(1:im,1:levs+1) :: phii + real(kind=kind_phys), intent(inout), dimension(:,:) :: gt0, gu0, gv0 + real(kind=kind_phys), intent(in ), dimension(:,:) :: vvl, prsl, del + real(kind=kind_phys), intent(in ), dimension(:,:) :: phii ! rain/snow/ice/graupel/precip amounts, fraction of frozen precip - real(kind_phys), intent(out ), dimension(1:im) :: rain0 - real(kind_phys), intent(out ), dimension(1:im) :: snow0 - real(kind_phys), intent(out ), dimension(1:im) :: ice0 - real(kind_phys), intent(out ), dimension(1:im) :: graupel0 - real(kind_phys), intent(out ), dimension(1:im) :: prcp0 - real(kind_phys), intent(out ), dimension(1:im) :: sr + real(kind_phys), intent(out ), dimension(:) :: rain0 + real(kind_phys), intent(out ), dimension(:) :: snow0 + real(kind_phys), intent(out ), dimension(:) :: ice0 + real(kind_phys), intent(out ), dimension(:) :: graupel0 + real(kind_phys), intent(out ), dimension(:) :: prcp0 + real(kind_phys), intent(out ), dimension(:) :: sr real(kind_phys), intent(in) :: dtp ! physics time step logical, intent (in) :: hydrostatic, phys_hydrostatic logical, intent (in) :: lradar - real(kind=kind_phys), intent(inout), dimension(1:im,1:levs) :: refl_10cm + real(kind=kind_phys), intent(inout), dimension(:,:) :: refl_10cm logical, intent (in) :: reset, effr_in - real(kind=kind_phys), intent(inout), dimension(1:im,1:levs) :: rew, rei, rer, res, reg + real(kind=kind_phys), intent(inout), dimension(:,:) :: rew, rei, rer, res, reg character(len=*), intent(out) :: errmsg integer, intent(out) :: errflg diff --git a/physics/gfdl_sfc_layer.F90 b/physics/gfdl_sfc_layer.F90 index 008e716e2..f9fc949a4 100644 --- a/physics/gfdl_sfc_layer.F90 +++ b/physics/gfdl_sfc_layer.F90 @@ -103,12 +103,12 @@ subroutine gfdl_sfc_layer_run (im, nsoil, km, xlat, xlon, flag_iter, lsm, & lsm_noah, lsm_noahmp, lsm_ruc, lsm_noah_wrfv4, icoef_sf, cplwav, & cplwav2atm, lcurr_sf, pert_Cd, ntsflg, sfenth, z1, shdmax, ivegsrc, & vegtype, sigmaf, dt, wet, dry, icy, isltyp, rd, grav, ep1, ep2, smois, & - psfc, prsl1, q1, t1, u1, v1, wspd, u10, v10, gsw, glw, tsurf_ocn, & - tsurf_lnd, tsurf_ice, tskin_ocn, tskin_lnd, tskin_ice, ustar_ocn, & - ustar_lnd, ustar_ice, znt_ocn, znt_lnd, znt_ice, cdm_ocn, cdm_lnd, & - cdm_ice, stress_ocn, stress_lnd, stress_ice, rib_ocn, rib_lnd, rib_ice, & - fm_ocn, fm_lnd, fm_ice, fh_ocn, fh_lnd, fh_ice, fh2_ocn, fh2_lnd, & - fh2_ice, ch_ocn, ch_lnd, ch_ice, fm10_ocn, fm10_lnd, fm10_ice, qss_ocn, & + psfc, prsl1, q1, t1, u1, v1, wspd, u10, v10, gsw, glw, tsurf_wat, & + tsurf_lnd, tsurf_ice, tskin_wat, tskin_lnd, tskin_ice, ustar_wat, & + ustar_lnd, ustar_ice, znt_wat, znt_lnd, znt_ice, cdm_wat, cdm_lnd, & + cdm_ice, stress_wat, stress_lnd, stress_ice, rib_wat, rib_lnd, rib_ice, & + fm_wat, fm_lnd, fm_ice, fh_wat, fh_lnd, fh_ice, fh2_wat, fh2_lnd, & + fh2_ice, ch_wat, ch_lnd, ch_ice, fm10_wat, fm10_lnd, fm10_ice, qss_wat, & qss_lnd, qss_ice, errmsg, errflg) use funcphys, only: fpvs @@ -130,22 +130,22 @@ subroutine gfdl_sfc_layer_run (im, nsoil, km, xlat, xlon, flag_iter, lsm, & logical, intent(in) :: cplwav, cplwav2atm !GJF: this scheme has not been tested with these on logical, intent(in) :: lcurr_sf !GJF: this scheme has not been tested with this option turned on; the variables scurx and scury need to be input in order to use this logical, intent(in) :: pert_Cd !GJF: this scheme has not been tested with this option turned on; the variables ens_random_seed and ens_Cdamp need to be input in order to use this - logical, dimension(im), intent(in) :: flag_iter, wet, dry, icy - integer, dimension(im), intent(in) :: isltyp, vegtype - real(kind=kind_phys), intent(in) :: dt, sfenth - real(kind=kind_phys), intent(in) :: rd,grav,ep1,ep2 - real(kind=kind_phys), dimension(im,nsoil), intent(in) :: smois - real(kind=kind_phys), dimension(im), intent(in) :: psfc, prsl1, & + logical, dimension(:), intent(in) :: flag_iter, wet, dry, icy + integer, dimension(:), intent(in) :: isltyp, vegtype + real(kind=kind_phys), intent(in) :: dt, sfenth + real(kind=kind_phys), intent(in) :: rd,grav,ep1,ep2 + real(kind=kind_phys), dimension(:,:), intent(in) :: smois + real(kind=kind_phys), dimension(:), intent(in) :: psfc, prsl1, & q1, t1, u1, v1, wspd, u10, v10, gsw, glw, z1, shdmax, sigmaf, xlat, & - xlon, tsurf_ocn, tsurf_lnd, tsurf_ice + xlon, tsurf_wat, tsurf_lnd, tsurf_ice - real(kind=kind_phys), intent(inout), dimension(im) :: tskin_ocn, & - tskin_lnd, tskin_ice, ustar_ocn, ustar_lnd, ustar_ice, & - znt_ocn, znt_lnd, znt_ice, cdm_ocn, cdm_lnd, cdm_ice, & - stress_ocn, stress_lnd, stress_ice, rib_ocn, rib_lnd, rib_ice, & - fm_ocn, fm_lnd, fm_ice, fh_ocn, fh_lnd, fh_ice, fh2_ocn, fh2_lnd, & - fh2_ice, ch_ocn, ch_lnd, ch_ice, fm10_ocn, fm10_lnd, fm10_ice, & - qss_ocn, qss_lnd, qss_ice + real(kind=kind_phys), intent(inout), dimension(:) :: tskin_wat, & + tskin_lnd, tskin_ice, ustar_wat, ustar_lnd, ustar_ice, & + znt_wat, znt_lnd, znt_ice, cdm_wat, cdm_lnd, cdm_ice, & + stress_wat, stress_lnd, stress_ice, rib_wat, rib_lnd, rib_ice, & + fm_wat, fm_lnd, fm_ice, fh_wat, fh_lnd, fh_ice, fh2_wat, fh2_lnd, & + fh2_ice, ch_wat, ch_lnd, ch_ice, fm10_wat, fm10_lnd, fm10_ice, & + qss_wat, qss_lnd, qss_ice character(len=*), intent(out) :: errmsg integer, intent(out) :: errflg @@ -373,10 +373,10 @@ subroutine gfdl_sfc_layer_run (im, nsoil, km, xlat, xlon, flag_iter, lsm, & ztmax(i) = ztmax(i)*100.0 !convert from m to cm z0max(i) = z0max(i)*100.0 !convert from m to cm - call mflux2 (fxh(i), fxe(i), fxmx(i), fxmy(i), cdm_lnd(i), rib_lnd(i), & + call mflux2 (fxh(i), fxe(i), fxmx(i), fxmy(i), cdm_lnd(i:i), rib_lnd(i:i), & xxfh(i), ztmax(i), z0max(i), tstrc(i), & pspc(i), pkmax(i), wetc(i), slwdc(i), z1_cm(i), icoef_sf, iwavecpl, lcurr_sf, charn(i), msang(i), & - scurx(i), scury(i), pert_Cd, ens_random_seed, ens_Cdamp, upc(i), vpc(i), t1(i), q1(i), & + scurx(i), scury(i), pert_Cd, ens_random_seed, ens_Cdamp, upc(i), vpc(i), t1(i:i), q1(i:i), & dt, wind10(i), xxfh2(i), ntsflg, sfenth, tzot(i), ep2, errmsg, & errflg) if (errflg /= 0) return @@ -522,10 +522,10 @@ subroutine gfdl_sfc_layer_run (im, nsoil, km, xlat, xlon, flag_iter, lsm, & ztmax(i) = ztmax(i)*100.0 !m to cm z0max(i) = z0max(i)*100.0 !m to cm - call mflux2 (fxh(i), fxe(i), fxmx(i), fxmy(i), cdm_ice(i), rib_ice(i), & + call mflux2 (fxh(i), fxe(i), fxmx(i), fxmy(i), cdm_ice(i:i), rib_ice(i:i), & xxfh(i), ztmax(i), z0max(i), tstrc(i), & pspc(i), pkmax(i), wetc(i), slwdc(i), z1_cm(i), icoef_sf, iwavecpl, lcurr_sf, charn(i), msang(i), & - scurx(i), scury(i), pert_Cd, ens_random_seed, ens_Cdamp, upc(i), vpc(i), t1(i), q1(i), & + scurx(i), scury(i), pert_Cd, ens_random_seed, ens_Cdamp, upc(i), vpc(i), t1(i:i), q1(i:i), & dt, wind10(i), xxfh2(i), ntsflg, sfenth, tzot(i), ep2, errmsg, & errflg) if (errflg /= 0) return @@ -613,40 +613,40 @@ subroutine gfdl_sfc_layer_run (im, nsoil, km, xlat, xlon, flag_iter, lsm, & wetc(i) = 1.0 !GJF: the lower boundary temperature passed in to MFLUX2 either follows GFS: - tstrc(i) = 0.5*(tskin_ocn(i) + tsurf_ocn(i)) !averaging tskin_ocn and tsurf_ocn as in GFS surface layer breaks ntsflg functionality + tstrc(i) = 0.5*(tskin_wat(i) + tsurf_wat(i)) !averaging tskin_wat and tsurf_wat as in GFS surface layer breaks ntsflg functionality !GJF: or WRF module_sf_gfdl.F: - !tstrc(i) = tskin_ocn(i) + !tstrc(i) = tskin_wat(i) ! DH* 20201009: these bounds on ocean roughness lengths are from Chunxi Zhang's module_sf_sfclayrev.f90 (in cm) - znt_ocn(i)=min(2.85e-1,max(znt_ocn(i),1.27e-5)) + znt_wat(i)=min(2.85e-1,max(znt_wat(i),1.27e-5)) !GJF: from WRF's module_sf_gfdl.F if (wind10(i) <= 1.0e-10 .or. wind10(i) > 150.0) then - wind10(i)=wspd(i)*alog(10.0/(0.01*znt_ocn(i)))/alog(z1(i)/(0.01*znt_ocn(i))) + wind10(i)=wspd(i)*alog(10.0/(0.01*znt_wat(i)))/alog(z1(i)/(0.01*znt_wat(i))) end if wind10(i)=wind10(i)*100.0 !! m/s to cm/s !GJF: mflux2 expects negative roughness length for ocean points - znt_ocn(i) = -znt_ocn(i) + znt_wat(i) = -znt_wat(i) - call mflux2 (fxh(i), fxe(i), fxmx(i), fxmy(i), cdm_ocn(i), rib_ocn(i), & - xxfh(i), znt_ocn(i), mznt(i), tstrc(i), & + call mflux2 (fxh(i), fxe(i), fxmx(i), fxmy(i), cdm_wat(i:i), rib_wat(i:i), & + xxfh(i), znt_wat(i:i), mznt(i), tstrc(i), & pspc(i), pkmax(i), wetc(i), slwdc(i), z1_cm(i), icoef_sf, iwavecpl, lcurr_sf, charn(i), msang(i), & - scurx(i), scury(i), pert_Cd, ens_random_seed, ens_Cdamp, upc(i), vpc(i), t1(i), q1(i), & + scurx(i), scury(i), pert_Cd, ens_random_seed, ens_Cdamp, upc(i), vpc(i), t1(i:i), q1(i:i), & dt, wind10(i), xxfh2(i), ntsflg, sfenth, tzot(i), ep2, errmsg, & errflg) if (errflg /= 0) return !GJF: this is broken when tstrc is set to an average of two variables if (ntsflg==1) then - tskin_ocn(i) = tstrc(i) ! gopal's doing + tskin_wat(i) = tstrc(i) ! gopal's doing end if - znt_ocn(i)= abs(znt_ocn(i)) + znt_wat(i)= abs(znt_wat(i)) mznt(i)= abs(mznt(i)) !GJF: these bounds on ocean roughness lengths are from Chunxi Zhang's module_sf_sfclayrev.f90 (in cm) - znt_ocn(i)=min(2.85e-1,max(znt_ocn(i),1.27e-5)) + znt_wat(i)=min(2.85e-1,max(znt_wat(i),1.27e-5)) if (diag_wind10m) then u10_ocn(i) = u1(i)*(0.01*wind10(i)/wspd(i)) @@ -654,67 +654,67 @@ subroutine gfdl_sfc_layer_run (im, nsoil, km, xlat, xlon, flag_iter, lsm, & end if !GJF: these variables are not needed in a GFS-based suite, but are found in WRF's module_sf_gfdl.F and kept in comments for legacy - !gz1oz0(i) = alog(zkmax(i)/znt_ocn(i)) + !gz1oz0(i) = alog(zkmax(i)/znt_wat(i)) !taux(i) = fxmx(i)/10. ! gopal's doing for Ocean coupling !tauy(i) = fxmy(i)/10. ! gopal's doing for Ocean coupling - cdm_ocn(i) = max(cdm_ocn(i), cd_low_limit) - cdm_ocn(i) = min(cdm_ocn(i), cd_high_limit) - fm_ocn(i) = karman/sqrt(cdm_ocn(i)) + cdm_wat(i) = max(cdm_wat(i), cd_low_limit) + cdm_wat(i) = min(cdm_wat(i), cd_high_limit) + fm_wat(i) = karman/sqrt(cdm_wat(i)) - !1) try fh_ocn from MFLUX2 - fh_ocn(i) = karman*xxfh(i) + !1) try fh_wat from MFLUX2 + fh_wat(i) = karman*xxfh(i) - !2) calc ch_ocn from fm_ocn and fh_ocn - ch_ocn(i) = karman*karman/(fm_ocn(i) * fh_ocn(i)) + !2) calc ch_wat from fm_wat and fh_wat + ch_wat(i) = karman*karman/(fm_wat(i) * fh_wat(i)) !3) check if ch_lnd is out of bounds (if so, recalculate fh_lnd from bounded value) ch_bound_excursion = .false. - if (ch_ocn(i) < ch_low_limit) then + if (ch_wat(i) < ch_low_limit) then ch_bound_excursion = .true. - ch_ocn(i) = ch_low_limit - else if (ch_ocn(i) > ch_high_limit) then + ch_wat(i) = ch_low_limit + else if (ch_wat(i) > ch_high_limit) then ch_bound_excursion = .true. - ch_ocn(i) = ch_high_limit + ch_wat(i) = ch_high_limit end if - fh2_ocn(i) = karman*xxfh2(i) + fh2_wat(i) = karman*xxfh2(i) if (ch_bound_excursion) then fh2_fh_ratio = min(xxfh2(i)/xxfh(i), 1.0) - fh_ocn(i) = karman*karman/(fm_ocn(i)*ch_ocn(i)) - fh2_ocn(i) = fh2_fh_ratio*fh_ocn(i) + fh_wat(i) = karman*karman/(fm_wat(i)*ch_wat(i)) + fh2_wat(i) = fh2_fh_ratio*fh_wat(i) end if !Other CCPP schemes (PBL) ask for fm/fh instead of psim/psih - !psim_ocn(i)=gz1oz0(i)-fm_ocn(i) - !psih_ocn(i)=gz1oz0(i)-fh_ocn(i) + !psim_ocn(i)=gz1oz0(i)-fm_wat(i) + !psih_ocn(i)=gz1oz0(i)-fh_wat(i) - ustar_ocn(i) = 0.01*sqrt(cdm_ocn(i)* & + ustar_wat(i) = 0.01*sqrt(cdm_wat(i)* & (upc(i)*upc(i) + vpc(i)*vpc(i))) !GJF: from Chunxi Zhang's module_sf_sfclayrev.f90 (I'm not sure it's necessary.) - ustar_ocn(i) = amax1(ustar_ocn(i),0.001) + ustar_wat(i) = amax1(ustar_wat(i),0.001) - stress_ocn(i) = cdm_ocn(i)*wspd(i)*wspd(i) + stress_wat(i) = cdm_wat(i)*wspd(i)*wspd(i) !GJF: from WRF's module_sf_gfdl.F !!! convert cd, ch to values at 10m, for output - cd10 = cdm_ocn(i) + cd10 = cdm_wat(i) if ( wind10(i) .ge. 0.1 ) then - cd10=cdm_ocn(i)* (wspd(i)/(0.01*wind10(i)) )**2 + cd10=cdm_wat(i)* (wspd(i)/(0.01*wind10(i)) )**2 !tmp9=0.01*abs(tzot(i)) - !ch_out(i)=ch_ocn(i)*(wspd(i)/(0.01*wind10(i)) ) * & + !ch_out(i)=ch_wat(i)*(wspd(i)/(0.01*wind10(i)) ) * & ! (alog(zkmax(i)/tmp9)/alog(10.0/tmp9)) end if - fm10_ocn(i) = karman/sqrt(cd10) + fm10_wat(i) = karman/sqrt(cd10) !GJF: conductances aren't used in other CCPP schemes - !chs_ocn(i)=ch_ocn(i)*wspd (i) !conductance - !chs2_ocn(i)=ustar_ocn(i)*karman/fh2_ocn(i) !2m conductance + !chs_ocn(i)=ch_wat(i)*wspd (i) !conductance + !chs2_ocn(i)=ustar_wat(i)*karman/fh2_wat(i) !2m conductance if (diag_qss) then - esat = fpvs(tskin_ocn(i)) - qss_ocn(i) = ep2*esat/(psfc(i)-esat) + esat = fpvs(tskin_wat(i)) + qss_wat(i) = ep2*esat/(psfc(i)-esat) end if end if !wet diff --git a/physics/gfdl_sfc_layer.meta b/physics/gfdl_sfc_layer.meta index a9829fec3..c8cbaf294 100644 --- a/physics/gfdl_sfc_layer.meta +++ b/physics/gfdl_sfc_layer.meta @@ -8,8 +8,8 @@ name = gfdl_sfc_layer_init type = scheme [icoef_sf] - standard_name = flag_for_surface_roughness_option_over_ocean - long_name = surface roughness options over ocean + standard_name = flag_for_surface_roughness_option_over_water + long_name = surface roughness options over water units = flag dimensions = () type = integer @@ -168,8 +168,8 @@ intent = in optional = F [icoef_sf] - standard_name = flag_for_surface_roughness_option_over_ocean - long_name = surface roughness options over ocean + standard_name = flag_for_surface_roughness_option_over_water + long_name = surface roughness options over water units = flag dimensions = () type = integer @@ -452,9 +452,9 @@ kind = kind_phys intent = in optional = F -[tsurf_ocn] - standard_name = surface_skin_temperature_after_iteration_over_ocean - long_name = surface skin temperature after iteration over ocean +[tsurf_wat] + standard_name = surface_skin_temperature_after_iteration_over_water + long_name = surface skin temperature after iteration over water units = K dimensions = (horizontal_loop_extent) type = real @@ -479,9 +479,9 @@ kind = kind_phys intent = in optional = F -[tskin_ocn] - standard_name = surface_skin_temperature_over_ocean_interstitial - long_name = surface skin temperature over ocean (temporary use as interstitial) +[tskin_wat] + standard_name = surface_skin_temperature_over_water_interstitial + long_name = surface skin temperature over water (temporary use as interstitial) units = K dimensions = (horizontal_loop_extent) type = real @@ -506,9 +506,9 @@ kind = kind_phys intent = inout optional = F -[ustar_ocn] - standard_name = surface_friction_velocity_over_ocean - long_name = surface friction velocity over ocean +[ustar_wat] + standard_name = surface_friction_velocity_over_water + long_name = surface friction velocity over water units = m s-1 dimensions = (horizontal_loop_extent) type = real @@ -533,9 +533,9 @@ kind = kind_phys intent = inout optional = F -[znt_ocn] - standard_name = surface_roughness_length_over_ocean_interstitial - long_name = surface roughness length over ocean (temporary use as interstitial) +[znt_wat] + standard_name = surface_roughness_length_over_water + long_name = surface roughness length over water (temporary use as interstitial) units = cm dimensions = (horizontal_loop_extent) type = real @@ -543,7 +543,7 @@ intent = inout optional = F [znt_lnd] - standard_name = surface_roughness_length_over_land_interstitial + standard_name = surface_roughness_length_over_land long_name = surface roughness length over land (temporary use as interstitial) units = cm dimensions = (horizontal_loop_extent) @@ -552,7 +552,7 @@ intent = inout optional = F [znt_ice] - standard_name = surface_roughness_length_over_ice_interstitial + standard_name = surface_roughness_length_over_ice long_name = surface roughness length over ice (temporary use as interstitial) units = cm dimensions = (horizontal_loop_extent) @@ -560,9 +560,9 @@ kind = kind_phys intent = inout optional = F -[cdm_ocn] - standard_name = surface_drag_coefficient_for_momentum_in_air_over_ocean - long_name = surface exchange coeff for momentum over ocean +[cdm_wat] + standard_name = surface_drag_coefficient_for_momentum_in_air_over_water + long_name = surface exchange coeff for momentum over water units = none dimensions = (horizontal_loop_extent) type = real @@ -587,9 +587,9 @@ kind = kind_phys intent = inout optional = F -[stress_ocn] - standard_name = surface_wind_stress_over_ocean - long_name = surface wind stress over ocean +[stress_wat] + standard_name = surface_wind_stress_over_water + long_name = surface wind stress over water units = m2 s-2 dimensions = (horizontal_loop_extent) type = real @@ -614,9 +614,9 @@ kind = kind_phys intent = inout optional = F -[rib_ocn] - standard_name = bulk_richardson_number_at_lowest_model_level_over_ocean - long_name = bulk Richardson number at the surface over ocean +[rib_wat] + standard_name = bulk_richardson_number_at_lowest_model_level_over_water + long_name = bulk Richardson number at the surface over water units = none dimensions = (horizontal_loop_extent) type = real @@ -641,9 +641,9 @@ kind = kind_phys intent = inout optional = F -[fm_ocn] - standard_name = Monin_Obukhov_similarity_function_for_momentum_over_ocean - long_name = Monin-Obukhov similarity function for momentum over ocean +[fm_wat] + standard_name = Monin_Obukhov_similarity_function_for_momentum_over_water + long_name = Monin-Obukhov similarity function for momentum over water units = none dimensions = (horizontal_loop_extent) type = real @@ -668,9 +668,9 @@ kind = kind_phys intent = inout optional = F -[fh_ocn] - standard_name = Monin_Obukhov_similarity_function_for_heat_over_ocean - long_name = Monin-Obukhov similarity function for heat over ocean +[fh_wat] + standard_name = Monin_Obukhov_similarity_function_for_heat_over_water + long_name = Monin-Obukhov similarity function for heat over water units = none dimensions = (horizontal_loop_extent) type = real @@ -695,9 +695,9 @@ kind = kind_phys intent = inout optional = F -[fh2_ocn] - standard_name = Monin_Obukhov_similarity_function_for_heat_at_2m_over_ocean - long_name = Monin-Obukhov similarity parameter for heat at 2m over ocean +[fh2_wat] + standard_name = Monin_Obukhov_similarity_function_for_heat_at_2m_over_water + long_name = Monin-Obukhov similarity parameter for heat at 2m over water units = none dimensions = (horizontal_loop_extent) type = real @@ -722,9 +722,9 @@ kind = kind_phys intent = inout optional = F -[ch_ocn] - standard_name = surface_drag_coefficient_for_heat_and_moisture_in_air_over_ocean - long_name = surface exchange coeff heat & moisture over ocean +[ch_wat] + standard_name = surface_drag_coefficient_for_heat_and_moisture_in_air_over_water + long_name = surface exchange coeff heat surface exchange coeff heat & moisture over ocean moisture over water units = none dimensions = (horizontal_loop_extent) type = real @@ -749,9 +749,9 @@ kind = kind_phys intent = inout optional = F -[fm10_ocn] - standard_name = Monin_Obukhov_similarity_function_for_momentum_at_10m_over_ocean - long_name = Monin-Obukhov similarity parameter for momentum at 10m over ocean +[fm10_wat] + standard_name = Monin_Obukhov_similarity_function_for_momentum_at_10m_over_water + long_name = Monin-Obukhov similarity parameter for momentum at 10m over water units = none dimensions = (horizontal_loop_extent) type = real @@ -776,9 +776,9 @@ kind = kind_phys intent = inout optional = F -[qss_ocn] - standard_name = surface_specific_humidity_over_ocean - long_name = surface air saturation specific humidity over ocean +[qss_wat] + standard_name = surface_specific_humidity_over_water + long_name = surface air saturation specific humidity over water units = kg kg-1 dimensions = (horizontal_loop_extent) type = real diff --git a/physics/gscond.f b/physics/gscond.f index 28f24763c..6466d989d 100644 --- a/physics/gscond.f +++ b/physics/gscond.f @@ -10,14 +10,14 @@ module zhaocarr_gscond ! \brief Brief description of the subroutine ! -!> \section arg_table_gscond_init Argument Table +!> \section arg_table_zhaocarr_gscond_init Argument Table !! subroutine zhaocarr_gscond_init end subroutine zhaocarr_gscond_init ! \brief Brief description of the subroutine ! -!> \section arg_table_gscond_finalize Argument Table +!> \section arg_table_zhaocarr_gscond_finalize Argument Table !! subroutine zhaocarr_gscond_finalize end subroutine zhaocarr_gscond_finalize @@ -73,14 +73,14 @@ subroutine zhaocarr_gscond_run (im,km,dt,dtf,prsl,ps,q,clw1 & ! Interface variables integer, intent(in) :: im, km, ipr real(kind=kind_phys), intent(in) :: dt, dtf - real(kind=kind_phys), intent(in) :: prsl(im,km), ps(im) - real(kind=kind_phys), intent(inout) :: q(im,km) - real(kind=kind_phys), intent(in) :: clw1(im,km), clw2(im,km) - real(kind=kind_phys), intent(out) :: cwm(im,km) - real(kind=kind_phys), intent(inout) :: t(im,km) & - &, tp(im,km), qp(im,km), psp(im) & - &, tp1(im,km), qp1(im,km), psp1(im) - real(kind=kind_phys), intent(in) :: u(im,km) + real(kind=kind_phys), intent(in) :: prsl(:,:), ps(:) + real(kind=kind_phys), intent(inout) :: q(:,:) + real(kind=kind_phys), intent(in) :: clw1(:,:), clw2(:,:) + real(kind=kind_phys), intent(out) :: cwm(:,:) + real(kind=kind_phys), intent(inout) :: t(:,:) & + &, tp(:,:), qp(:,:), psp(:) & + &, tp1(:,:), qp1(:,:), psp1(:) + real(kind=kind_phys), intent(in) :: u(:,:) logical, intent(in) :: lprnt ! character(len=*), intent(out) :: errmsg diff --git a/physics/gscond.meta b/physics/gscond.meta index 75b2d3a89..d8eb2f01e 100644 --- a/physics/gscond.meta +++ b/physics/gscond.meta @@ -3,6 +3,16 @@ type = scheme dependencies = funcphys.f90,machine.F,physcons.F90 +######################################################################## +[ccpp-arg-table] + name = zhaocarr_gscond_init + type = scheme + +######################################################################## +[ccpp-arg-table] + name = zhaocarr_gscond_finalize + type = scheme + ######################################################################## [ccpp-arg-table] name = zhaocarr_gscond_run diff --git a/physics/gwdc.f b/physics/gwdc.f index f286f5ecb..086662e73 100644 --- a/physics/gwdc.f +++ b/physics/gwdc.f @@ -26,7 +26,7 @@ subroutine gwdc_pre_run ( & integer, intent(in) :: im, levs integer, intent(in) :: kbot(:), ktop(:) real(kind=kind_phys), intent(in) :: dtp - real(kind=kind_phys), intent(in) :: cgwf(2) + real(kind=kind_phys), intent(in) :: cgwf(:) real(kind=kind_phys), intent(in) :: dx(:), work1(:), work2(:) real(kind=kind_phys), intent(in) :: & & gt0(:,:), gt0_init(:,:), del(:,:) @@ -163,7 +163,6 @@ subroutine gwdc_run (im,km,lat,u1,v1,t1,q1,deltim, & USE MACHINE , ONLY : kind_phys implicit none -! DH* TODO - add intent information for all variables !---------------------------- Arguments -------------------------------- ! ! Input variables @@ -188,15 +187,15 @@ subroutine gwdc_run (im,km,lat,u1,v1,t1,q1,deltim, & !----------------------------------------------------------------------- integer, intent(in) :: im, km, lat, ipr - integer, intent(in) :: ktop(im),kbot(im),kcnv(im) + integer, intent(in) :: ktop(:),kbot(:),kcnv(:) real(kind=kind_phys), intent(in) :: grav,cp,rd,fv,fhour,deltim,pi - real(kind=kind_phys), dimension(im), intent(in) :: qmax - real(kind=kind_phys), dimension(im), intent(out) :: tauctx,taucty - real(kind=kind_phys), dimension(im), intent(in) :: cldf,dlength - real(kind=kind_phys), dimension(im,km), intent(in) :: u1,v1,t1, & + real(kind=kind_phys), dimension(:), intent(in) :: qmax + real(kind=kind_phys), dimension(:), intent(out) :: tauctx,taucty + real(kind=kind_phys), dimension(:), intent(in) :: cldf,dlength + real(kind=kind_phys), dimension(:,:), intent(in) :: u1,v1,t1, & & q1,pmid1,dpmid1 - real(kind=kind_phys), dimension(im,km), intent(out) :: utgwc,vtgwc - real(kind=kind_phys), dimension(im,km+1), intent(in) :: pint1 + real(kind=kind_phys), dimension(:,:), intent(out) :: utgwc,vtgwc + real(kind=kind_phys), dimension(:,:), intent(in) :: pint1 ! logical, intent(in) :: lprnt ! diff --git a/physics/gwdps.f b/physics/gwdps.f index c6d9ab584..285bdf67c 100644 --- a/physics/gwdps.f +++ b/physics/gwdps.f @@ -296,23 +296,23 @@ subroutine gwdps_run( & ! ! Interface variables integer, intent(in) :: im, km, imx, kdt, ipr, me - integer, intent(in) :: KPBL(IM) ! Index for the PBL top layer! + integer, intent(in) :: KPBL(:) ! Index for the PBL top layer! real(kind=kind_phys), intent(in) :: & - & deltim, G, CP, RD, RV, cdmbgwd(4) + & deltim, G, CP, RD, RV, cdmbgwd(:) real(kind=kind_phys), intent(inout) :: & - & A(IM,KM), B(IM,KM), C(IM,KM) + & A(:,:), B(:,:), C(:,:) real(kind=kind_phys), intent(in) :: & - & U1(IM,KM), V1(IM,KM), T1(IM,KM), & - & Q1(IM,KM), PRSI(IM,KM+1), DEL(IM,KM), & - & PRSL(IM,KM), PRSLK(IM,KM), PHIL(IM,KM), & - & PHII(IM,KM+1) + & U1(:,:), V1(:,:), T1(:,:), & + & Q1(:,:), PRSI(:,:), DEL(:,:), & + & PRSL(:,:), PRSLK(:,:), PHIL(:,:), & + & PHII(:,:) real(kind=kind_phys), intent(in) :: & - & OC(IM), OA4(IM,4), CLX4(IM,4), HPRIME(IM) - real(kind=kind_phys), intent(inout) :: ELVMAX(IM) + & OC(:), OA4(:,:), CLX4(:,:), HPRIME(:) + real(kind=kind_phys), intent(inout) :: ELVMAX(:) real(kind=kind_phys), intent(in) :: & - & THETA(IM), SIGMA(IM), GAMMA(IM) - real(kind=kind_phys), intent(out) :: DUSFC(IM), DVSFC(IM), & - & RDXZB(IM) + & THETA(:), SIGMA(:), GAMMA(:) + real(kind=kind_phys), intent(out) :: DUSFC(:), DVSFC(:), & + & RDXZB(:) integer, intent(in) :: nmtvr logical, intent(in) :: lprnt character(len=*), intent(out) :: errmsg @@ -1310,4 +1310,4 @@ end subroutine gwdps_run subroutine gwdps_finalize() end subroutine gwdps_finalize - end module gwdps + end module gwdps \ No newline at end of file diff --git a/physics/h2o_def.meta b/physics/h2o_def.meta index 21f3b903f..524828ba4 100644 --- a/physics/h2o_def.meta +++ b/physics/h2o_def.meta @@ -26,4 +26,3 @@ dimensions = (vertical_dimension_of_h2o_forcing_data) type = real kind = kind_phys - active = (flag_for_stratospheric_water_vapor_physics) \ No newline at end of file diff --git a/physics/h2ophys.f b/physics/h2ophys.f index d2d84738b..17119f320 100644 --- a/physics/h2ophys.f +++ b/physics/h2ophys.f @@ -37,10 +37,10 @@ subroutine h2ophys_run(im, levs, kh2o, dt, h2o, ph2o, prsl, & ! interface variables integer, intent(in) :: im, levs, kh2o, h2o_coeff, me real(kind=kind_phys), intent(in) :: dt - real(kind=kind_phys), intent(inout) :: h2o(im,levs) - real(kind=kind_phys), intent(in) :: ph2o(kh2o) - real(kind=kind_phys), intent(in) :: prsl(im,levs) - real(kind=kind_phys), intent(in) :: h2opltc(im,kh2o,h2o_coeff) + real(kind=kind_phys), intent(inout) :: h2o(:,:) + real(kind=kind_phys), intent(in) :: ph2o(:) + real(kind=kind_phys), intent(in) :: prsl(:,:) + real(kind=kind_phys), intent(in) :: h2opltc(:,:,:) !real(kind=kind_phys), intent(inout) :: h2op(im,levs,h2o_coeff) character(len=*), intent(out) :: errmsg integer, intent(out) :: errflg diff --git a/physics/m_micro.F90 b/physics/m_micro.F90 index 8e6d6698e..7624d7e3e 100644 --- a/physics/m_micro.F90 +++ b/physics/m_micro.F90 @@ -38,7 +38,7 @@ subroutine m_micro_init(imp_physics, imp_physics_mg, fprcp, gravit, rair, rh2o, mg_do_graupel, mg_nccons, mg_nicons, mg_ngcons, & mg_do_ice_gmao, mg_do_liq_liu real(kind=kind_phys), intent(in) :: gravit, rair, rh2o, cpair, eps, tmelt, latvap, latice - real(kind=kind_phys), intent(in) :: mg_dcs, mg_qcvar, mg_ts_auto_ice(2), mg_rhmini, & + real(kind=kind_phys), intent(in) :: mg_dcs, mg_qcvar, mg_ts_auto_ice(:), mg_rhmini, & mg_berg_eff_factor, mg_ncnst, mg_ninst, mg_ngnst character(len=16), intent(in) :: mg_precip_frac_method character(len=*), intent(out) :: errmsg @@ -175,13 +175,12 @@ subroutine m_micro_run( im, lm, flipv, dt_i & integer, parameter :: ncolmicro = 1 integer,intent(in) :: im, lm, kdt, fprcp, pdfflag, iccn logical,intent(in) :: flipv, skip_macro - real (kind=kind_phys), intent(in):: dt_i, alf_fac, qc_min(2) + real (kind=kind_phys), intent(in):: dt_i, alf_fac, qc_min(:) - real (kind=kind_phys), dimension(im,lm),intent(in) :: & + real (kind=kind_phys), dimension(:,:),intent(in) :: & & prsl_i,u_i,v_i,phil, omega_i, QLLS_i,QILS_i, & & lwheat_i,swheat_i - real (kind=kind_phys), dimension(im,0:lm),intent(in):: prsi_i, & - & phii + real (kind=kind_phys), dimension(:,:),intent(in):: prsi_i, phii ! GJF* These variables are conditionally allocated depending on whether the ! Morrison-Gettelman microphysics is used, so they must be declared ! using assumed shape. @@ -190,26 +189,26 @@ subroutine m_micro_run( im, lm, flipv, dt_i & & CNV_MFD_i, cf_upi, CNV_FICE_i, CNV_NDROP_i, & & CNV_NICE_i, w_upi ! *GJF - real (kind=kind_phys), dimension(im,lm),intent(in) :: & + real (kind=kind_phys), dimension(:,:),intent(in) :: & & rhc_i, naai_i, npccn_i - real (kind=kind_phys), dimension(im,lm,ntrcaer),intent(in) :: & + real (kind=kind_phys), dimension(:,:,:),intent(in) :: & & aerfld_i - real (kind=kind_phys),dimension(im),intent(in):: TAUGWX, & + real (kind=kind_phys),dimension(:),intent(in):: TAUGWX, & & TAUGWY, TAUOROX, TAUOROY, FRLAND,ZPBL,xlat,xlon ! & TAUGWY, TAUX, TAUY, TAUOROX, TAUOROY,ps_i,FRLAND,ZPBL ! & CNVPRCP ! output - real (kind=kind_phys),dimension(im,lm), intent(out) :: lwm_o, qi_o, & + real (kind=kind_phys),dimension(:,:), intent(out) :: lwm_o, qi_o, & cldreffl, cldreffi, cldreffr, cldreffs, cldreffg - real (kind=kind_phys),dimension(im), intent(out) :: rn_o, sr_o + real (kind=kind_phys),dimension(:), intent(out) :: rn_o, sr_o character(len=*), intent(out) :: errmsg integer, intent(out) :: errflg ! input and output ! Anning Cheng 10/24/2016 twat for total water, diagnostic purpose - integer, dimension(IM), intent(inout):: KCBL - real (kind=kind_phys),dimension(im,lm),intent(inout):: q_io, t_io, & + integer, dimension(:), intent(inout):: KCBL + real (kind=kind_phys),dimension(:,:),intent(inout):: q_io, t_io, & & ncpl_io,ncpi_io,CLLS_io ! GJF* These variables are conditionally allocated depending on whether the ! Morrison-Gettelman microphysics is used, so they must be declared @@ -443,7 +442,7 @@ subroutine m_micro_run( im, lm, flipv, dt_i & END DO END DO DO K=0, LM - ll = lm-k + ll = lm-k+1 DO I = 1,IM PLE(i,k) = prsi_i(i,ll) * 0.01_kp ! interface pressure in hPa zet(i,k+1) = phii(i,ll) * onebg diff --git a/physics/m_micro_interstitial.F90 b/physics/m_micro_interstitial.F90 index 55b2bbe93..8d0132cf1 100644 --- a/physics/m_micro_interstitial.F90 +++ b/physics/m_micro_interstitial.F90 @@ -169,22 +169,22 @@ subroutine m_micro_post_run( & integer, intent(in) :: im, levs, fprcp logical, intent(in) :: mg3_as_mg2 - real(kind=kind_phys), intent(in ) :: ncpr(1:im,1:levs) - real(kind=kind_phys), intent(in ) :: ncps(1:im,1:levs) - real(kind=kind_phys), intent(in ) :: ncgl(1:im,1:levs) - real(kind=kind_phys), intent(inout) :: qrn(1:im,1:levs) - real(kind=kind_phys), intent(inout) :: qsnw(1:im,1:levs) - real(kind=kind_phys), intent(inout) :: qgl(1:im,1:levs) - real(kind=kind_phys), intent(inout) :: gq0_ice(1:im,1:levs) - real(kind=kind_phys), intent(inout) :: gq0_rain(1:im,1:levs) - real(kind=kind_phys), intent(inout) :: gq0_snow(1:im,1:levs) - real(kind=kind_phys), intent(inout) :: gq0_graupel(1:im,1:levs) - real(kind=kind_phys), intent(inout) :: gq0_rain_nc(1:im,1:levs) - real(kind=kind_phys), intent(inout) :: gq0_snow_nc(1:im,1:levs) - real(kind=kind_phys), intent(inout) :: gq0_graupel_nc(1:im,1:levs) - real(kind=kind_phys), intent( out) :: ice(1:im) - real(kind=kind_phys), intent( out) :: snow(1:im) - real(kind=kind_phys), intent( out) :: graupel(1:im) + real(kind=kind_phys), intent(in ) :: ncpr(:,:) + real(kind=kind_phys), intent(in ) :: ncps(:,:) + real(kind=kind_phys), intent(in ) :: ncgl(:,:) + real(kind=kind_phys), intent(inout) :: qrn(:,:) + real(kind=kind_phys), intent(inout) :: qsnw(:,:) + real(kind=kind_phys), intent(inout) :: qgl(:,:) + real(kind=kind_phys), intent(in ) :: gq0_ice(:,:) + real(kind=kind_phys), intent(out ) :: gq0_rain(:,:) + real(kind=kind_phys), intent(out ) :: gq0_snow(:,:) + real(kind=kind_phys), intent(out ) :: gq0_graupel(:,:) + real(kind=kind_phys), intent(out ) :: gq0_rain_nc(:,:) + real(kind=kind_phys), intent(out ) :: gq0_snow_nc(:,:) + real(kind=kind_phys), intent(out ) :: gq0_graupel_nc(:,:) + real(kind=kind_phys), intent( out) :: ice(:) + real(kind=kind_phys), intent( out) :: snow(:) + real(kind=kind_phys), intent( out) :: graupel(:) real(kind=kind_phys), intent(in ) :: dtp character(len=*), intent(out) :: errmsg diff --git a/physics/m_micro_interstitial.meta b/physics/m_micro_interstitial.meta index 7961cb2db..2cc3d3a9a 100644 --- a/physics/m_micro_interstitial.meta +++ b/physics/m_micro_interstitial.meta @@ -392,7 +392,7 @@ dimensions = (horizontal_loop_extent,vertical_dimension) type = real kind = kind_phys - intent = inout + intent = in optional = F [gq0_rain] standard_name = rain_water_mixing_ratio_updated_by_physics diff --git a/physics/maximum_hourly_diagnostics.F90 b/physics/maximum_hourly_diagnostics.F90 index 174e0c95c..615c49bed 100644 --- a/physics/maximum_hourly_diagnostics.F90 +++ b/physics/maximum_hourly_diagnostics.F90 @@ -37,23 +37,23 @@ subroutine maximum_hourly_diagnostics_run(im, levs, reset, lradar, imp_physics, logical, intent(in) :: reset, lradar integer, intent(in) :: imp_physics, imp_physics_gfdl, imp_physics_thompson, imp_physics_fer_hires real(kind_phys), intent(in ) :: con_g - real(kind_phys), intent(in ) :: phil(im,levs) - real(kind_phys), intent(in ) :: gt0(im,levs) - real(kind_phys), intent(in ) :: refl_10cm(im,levs) - real(kind_phys), intent(inout) :: refdmax(im) - real(kind_phys), intent(inout) :: refdmax263k(im) - real(kind_phys), intent(in ) :: u10m(im) - real(kind_phys), intent(in ) :: v10m(im) - real(kind_phys), intent(inout) :: u10max(im) - real(kind_phys), intent(inout) :: v10max(im) - real(kind_phys), intent(inout) :: spd10max(im) - real(kind_phys), intent(in ) :: pgr(im) - real(kind_phys), intent(in ) :: t2m(im) - real(kind_phys), intent(in ) :: q2m(im) - real(kind_phys), intent(inout) :: t02max(im) - real(kind_phys), intent(inout) :: t02min(im) - real(kind_phys), intent(inout) :: rh02max(im) - real(kind_phys), intent(inout) :: rh02min(im) + real(kind_phys), intent(in ) :: phil(:,:) + real(kind_phys), intent(in ) :: gt0(:,:) + real(kind_phys), intent(in ) :: refl_10cm(:,:) + real(kind_phys), intent(inout) :: refdmax(:) + real(kind_phys), intent(inout) :: refdmax263k(:) + real(kind_phys), intent(in ) :: u10m(:) + real(kind_phys), intent(in ) :: v10m(:) + real(kind_phys), intent(inout) :: u10max(:) + real(kind_phys), intent(inout) :: v10max(:) + real(kind_phys), intent(inout) :: spd10max(:) + real(kind_phys), intent(in ) :: pgr(:) + real(kind_phys), intent(in ) :: t2m(:) + real(kind_phys), intent(in ) :: q2m(:) + real(kind_phys), intent(inout) :: t02max(:) + real(kind_phys), intent(inout) :: t02min(:) + real(kind_phys), intent(inout) :: rh02max(:) + real(kind_phys), intent(inout) :: rh02min(:) character(len=*), intent(out) :: errmsg integer, intent(out) :: errflg @@ -126,12 +126,12 @@ end subroutine maximum_hourly_diagnostics_run subroutine max_fields(phil,ref3D,grav,im,levs,refd,tk,refd263k) integer, intent(in) :: im,levs real (kind=kind_phys), intent(in) :: grav - real (kind=kind_phys), intent(in),dimension(im,levs) :: phil,ref3D,tk + real (kind=kind_phys), intent(in),dimension(:,:) :: phil,ref3D,tk integer :: i,k,ll,ipt,kpt real :: dbz1avg,zmidp1,zmidloc,refl,fact real, dimension(im,levs) :: z real, dimension(im) :: zintsfc - real, dimension(im), intent(inout) :: refd,refd263k + real, dimension(:), intent(inout) :: refd,refd263k REAL :: dbz1(2),dbzk,dbzk1 logical :: counter do i=1,im diff --git a/physics/module_MYJPBL_wrapper.F90 b/physics/module_MYJPBL_wrapper.F90 index 026ea1b64..8dd01ef9c 100644 --- a/physics/module_MYJPBL_wrapper.F90 +++ b/physics/module_MYJPBL_wrapper.F90 @@ -92,34 +92,36 @@ SUBROUTINE myjpbl_wrapper_run( & real(kind=kind_phys),intent(in) :: dt_phs, xkzm_m, xkzm_h, xkzm_s !MYJ-2D - real(kind=kind_phys),dimension(im),intent(in) :: & - & prsik_1, prslk_1, prslki, slmsk, garea, & + real(kind=kind_phys),dimension(:),intent(in) :: & + & prsik_1, prslk_1, prslki, slmsk, garea, & snowd, evap, hflx, cm, ch, wind, hprime1 - real(kind=kind_phys),dimension(im),intent(inout) :: & - & pblh, zorl, ustar, tsfc, qsfc - real(kind=kind_phys),dimension(im),intent(inout) :: & - & phy_myj_qsfc, phy_myj_thz0, phy_myj_qz0, & - & phy_myj_uz0, phy_myj_vz0, phy_myj_z0base, & - & phy_myj_akhs, phy_myj_akms, & - & phy_myj_chkqlm, phy_myj_elflx, & + real(kind=kind_phys),dimension(:),intent(inout) :: & + & zorl, ustar, tsfc, qsfc + real(kind=kind_phys),dimension(:),intent(inout) :: & + & phy_myj_qsfc, phy_myj_thz0, phy_myj_qz0, & + & phy_myj_uz0, phy_myj_vz0, phy_myj_z0base, & + & phy_myj_akhs, phy_myj_akms, & + & phy_myj_chkqlm, phy_myj_elflx, & & phy_myj_a1u, phy_myj_a1t, phy_myj_a1q - real(kind=kind_phys),dimension(im),intent(out) :: & - & dusfc,dvsfc,dtsfc,dqsfc,gamt,gamq - integer,dimension(im),intent(out) :: kpbl - integer,dimension(im),intent(in) :: kinver + real(kind=kind_phys),dimension(:),intent(out) :: & + & pblh,dusfc,dvsfc,dtsfc,dqsfc,gamt,gamq + integer,dimension(:),intent(out) :: kpbl + integer,dimension(:),intent(in) :: kinver !MYJ-3D - real(kind=kind_phys),dimension(im,levs+1),intent(in) :: & + real(kind=kind_phys),dimension(:,:),intent(in) :: & phii, prsi - real(kind=kind_phys),dimension(im,levs),intent(in) :: & + real(kind=kind_phys),dimension(:,:),intent(in) :: & & ugrs, vgrs, tgrs, prsl - real(kind=kind_phys),dimension(im,levs),intent(inout) :: & +! real(kind=kind_phys),dimension(:,:),intent(inout) :: & +! dudt, dvdt, dtdt, dkt + real(kind=kind_phys),dimension(:,:),intent(inout) :: & dudt, dvdt, dtdt - real(kind=kind_phys),dimension(im,levs-1),intent(out) :: & + real(kind=kind_phys),dimension(:,:),intent(out) :: & dkt !MYJ-4D - real(kind=kind_phys),dimension(im,levs,ntrac),intent(inout) :: & + real(kind=kind_phys),dimension(:,:,:),intent(inout) :: & & qgrs,dqdt !LOCAL @@ -556,12 +558,12 @@ SUBROUTINE myjpbl_wrapper_run( & ! end do end do - dkt2=0. + dkt=0. do k=1,levs k1=levs-k+1 do i=1,im -! dkt2(i,k)=max(xcofh(i,k1),xkzo(i,k)) - dkt2(i,k)=xcofh(i,k1) +! dkt(i,k)=max(xcofh(i,k1),xkzo(i,k)) + dkt(i,k)=xcofh(i,k1) end do end do if(ntke.gt.0)then @@ -662,7 +664,7 @@ SUBROUTINE myjpbl_wrapper_run( & q2(i,k) end do do k=1,levs - print*,'xcofh,el_myj,dkt2=',k,xcofh(i,k),el_myj(i,k),dkt2(i,k) + print*,'xcofh,el_myj,dkt=',k,xcofh(i,k),el_myj(i,k),dkt(i,k) end do end if @@ -805,9 +807,6 @@ SUBROUTINE myjpbl_wrapper_run( & ! print* ! endif - ! External dkt has dimensions (1:im,1:levs-1) - dkt(1:im,1:levs-1) = dkt2(1:im,1:levs-1) - END SUBROUTINE myjpbl_wrapper_run !###================================================================= diff --git a/physics/module_MYJPBL_wrapper.meta b/physics/module_MYJPBL_wrapper.meta index e428b3a2e..acc35fe53 100644 --- a/physics/module_MYJPBL_wrapper.meta +++ b/physics/module_MYJPBL_wrapper.meta @@ -405,7 +405,7 @@ dimensions = (horizontal_loop_extent) type = real kind = kind_phys - intent = inout + intent = in optional = F [ch] standard_name = surface_drag_coefficient_for_heat_and_moisture_in_air @@ -414,7 +414,7 @@ dimensions = (horizontal_loop_extent) type = real kind = kind_phys - intent = inout + intent = in optional = F [wind] standard_name = wind_speed_at_lowest_model_layer @@ -443,19 +443,19 @@ kind = kind_phys intent = inout optional = F -[hflx] - standard_name = kinematic_surface_upward_sensible_heat_flux_reduced_by_surface_roughness - long_name = kinematic surface upward sensible heat flux - units = K m s-1 +[evap] + standard_name = kinematic_surface_upward_latent_heat_flux_reduced_by_surface_roughness + long_name = kinematic surface upward latent heat flux + units = kg kg-1 m s-1 dimensions = (horizontal_loop_extent) type = real kind = kind_phys intent = in optional = F -[evap] - standard_name = kinematic_surface_upward_latent_heat_flux_reduced_by_surface_roughness - long_name = kinematic surface upward latent heat flux - units = kg kg-1 m s-1 +[hflx] + standard_name = kinematic_surface_upward_sensible_heat_flux_reduced_by_surface_roughness + long_name = kinematic surface upward sensible heat flux + units = K m s-1 dimensions = (horizontal_loop_extent) type = real kind = kind_phys @@ -535,9 +535,9 @@ optional = F [dkt] standard_name = atmosphere_heat_diffusivity - long_name = diffusivity for heat + long_name = atmospheric heat diffusivity units = m2 s-1 - dimensions = (horizontal_loop_extent,vertical_dimension_minus_one) + dimensions = (horizontal_loop_extent,vertical_dimension) type = real kind = kind_phys intent = out @@ -576,7 +576,7 @@ dimensions = (horizontal_loop_extent) type = real kind = kind_phys - intent = inout + intent = out optional = F [gamq] standard_name = countergradient_mixing_term_for_water_vapor @@ -585,7 +585,7 @@ dimensions = (horizontal_loop_extent) type = real kind = kind_phys - intent = inout + intent = out optional = F [con_cp] standard_name = specific_heat_of_dry_air_at_constant_pressure diff --git a/physics/module_MYJSFC_wrapper.F90 b/physics/module_MYJSFC_wrapper.F90 index e3dcf4111..d908900c4 100644 --- a/physics/module_MYJSFC_wrapper.F90 +++ b/physics/module_MYJSFC_wrapper.F90 @@ -91,22 +91,22 @@ SUBROUTINE myjsfc_wrapper_run( & real(kind=kind_phys),intent(in) :: con_cp, con_g, con_rd !MYJ-2D - logical,dimension(im),intent(in) :: flag_iter - real(kind=kind_phys),dimension(im),intent(in) :: & + logical,dimension(:),intent(in) :: flag_iter + real(kind=kind_phys),dimension(:),intent(in) :: & & prsik_1, prslk_1, tsfc, qsfc, slmsk - real(kind=kind_phys),dimension(im),intent(inout) :: & + real(kind=kind_phys),dimension(:),intent(inout) :: & & phy_myj_qsfc, phy_myj_thz0, phy_myj_qz0, & & phy_myj_uz0, phy_myj_vz0, phy_myj_z0base, & & phy_myj_akhs, phy_myj_akms, & & phy_myj_chkqlm, phy_myj_elflx, & & phy_myj_a1u, phy_myj_a1t, phy_myj_a1q - real(kind=kind_phys),dimension(im),intent(inout) :: & + real(kind=kind_phys),dimension(:),intent(inout) :: & & pblh, zorl, ustar, rib - real(kind=kind_phys),dimension(im),intent(out) :: & + real(kind=kind_phys),dimension(:),intent(inout) :: & & cm, ch, stress, ffm, ffh, fm10, fh2 - real(kind=kind_phys), dimension(im), intent(inout) :: & + real(kind=kind_phys), dimension(:), intent(inout) :: & & landfrac, lakefrac, oceanfrac, fice - real(kind=kind_phys), dimension(im), intent(inout) :: & + real(kind=kind_phys), dimension(:), intent(inout) :: & & z0rl_wat, z0rl_lnd, z0rl_ice, & & ustar_wat, ustar_lnd, ustar_ice, & & cm_wat, cm_lnd, cm_ice, & @@ -121,12 +121,12 @@ SUBROUTINE myjsfc_wrapper_run( & !MYJ-3D - real(kind=kind_phys),dimension(im,levs+1),intent(in) :: & + real(kind=kind_phys),dimension(:,:),intent(in) :: & phii, prsi - real(kind=kind_phys),dimension(im,levs),intent(in) :: & + real(kind=kind_phys),dimension(:,:),intent(in) :: & & ugrs, vgrs, tgrs, prsl !MYJ-4D - real(kind=kind_phys),dimension(im,levs,ntrac),intent(in) :: & + real(kind=kind_phys),dimension(:,:,:),intent(in) :: & & qgrs !LOCAL diff --git a/physics/module_MYJSFC_wrapper.meta b/physics/module_MYJSFC_wrapper.meta index e1e6ab2b9..f3ec33193 100644 --- a/physics/module_MYJSFC_wrapper.meta +++ b/physics/module_MYJSFC_wrapper.meta @@ -208,7 +208,7 @@ dimensions = (horizontal_loop_extent) type = real kind = kind_phys - intent = inout + intent = in optional = F [phy_myj_qsfc] standard_name = surface_specific_humidity_for_MYJ_schemes @@ -397,7 +397,7 @@ dimensions = (horizontal_loop_extent) type = real kind = kind_phys - intent = out + intent = inout optional = F [ffm] standard_name = Monin_Obukhov_similarity_function_for_momentum @@ -472,8 +472,8 @@ intent = inout optional = F [z0rl_wat] - standard_name = surface_roughness_length_over_ocean_interstitial - long_name = surface roughness length over ocean (interstitial) + standard_name = surface_roughness_length_over_water + long_name = surface roughness length over water (interstitial) units = cm dimensions = (horizontal_loop_extent) type = real @@ -481,7 +481,7 @@ intent = inout optional = F [z0rl_lnd] - standard_name = surface_roughness_length_over_land_interstitial + standard_name = surface_roughness_length_over_land long_name = surface roughness length over land (interstitial) units = cm dimensions = (horizontal_loop_extent) @@ -490,7 +490,7 @@ intent = inout optional = F [z0rl_ice] - standard_name = surface_roughness_length_over_ice_interstitial + standard_name = surface_roughness_length_over_ice long_name = surface roughness length over ice (interstitial) units = cm dimensions = (horizontal_loop_extent) @@ -499,8 +499,8 @@ intent = inout optional = F [ustar_wat] - standard_name = surface_friction_velocity_over_ocean - long_name = surface friction velocity over ocean + standard_name = surface_friction_velocity_over_water + long_name = surface friction velocity over water units = m s-1 dimensions = (horizontal_loop_extent) type = real @@ -526,8 +526,8 @@ intent = inout optional = F [cm_wat] - standard_name = surface_drag_coefficient_for_momentum_in_air_over_ocean - long_name = surface exchange coeff for momentum over ocean + standard_name = surface_drag_coefficient_for_momentum_in_air_over_water + long_name = surface exchange coeff for momentum over water units = none dimensions = (horizontal_loop_extent) type = real @@ -553,8 +553,8 @@ intent = inout optional = F [ch_wat] - standard_name = surface_drag_coefficient_for_heat_and_moisture_in_air_over_ocean - long_name = surface exchange coeff heat & moisture over ocean + standard_name = surface_drag_coefficient_for_heat_and_moisture_in_air_over_water + long_name = surface exchange coeff heat surface exchange coeff heat & moisture over ocean moisture over water units = none dimensions = (horizontal_loop_extent) type = real @@ -580,8 +580,8 @@ intent = inout optional = F [rb_wat] - standard_name = bulk_richardson_number_at_lowest_model_level_over_ocean - long_name = bulk Richardson number at the surface over ocean + standard_name = bulk_richardson_number_at_lowest_model_level_over_water + long_name = bulk Richardson number at the surface over water units = none dimensions = (horizontal_loop_extent) type = real @@ -607,8 +607,8 @@ intent = inout optional = F [stress_wat] - standard_name = surface_wind_stress_over_ocean - long_name = surface wind stress over ocean + standard_name = surface_wind_stress_over_water + long_name = surface wind stress over water units = m2 s-2 dimensions = (horizontal_loop_extent) type = real @@ -634,8 +634,8 @@ intent = inout optional = F [fm_wat] - standard_name = Monin_Obukhov_similarity_function_for_momentum_over_ocean - long_name = Monin-Obukhov similarity funct for momentum over ocean + standard_name = Monin_Obukhov_similarity_function_for_momentum_over_water + long_name = Monin-Obukhov similarity funct for momentum over water units = none dimensions = (horizontal_loop_extent) type = real @@ -661,8 +661,8 @@ intent = inout optional = F [fh_wat] - standard_name = Monin_Obukhov_similarity_function_for_heat_over_ocean - long_name = Monin-Obukhov similarity function for heat over ocean + standard_name = Monin_Obukhov_similarity_function_for_heat_over_water + long_name = Monin-Obukhov similarity function for heat over water units = none dimensions = (horizontal_loop_extent) type = real @@ -688,8 +688,8 @@ intent = inout optional = F [fm10_wat] - standard_name = Monin_Obukhov_similarity_function_for_momentum_at_10m_over_ocean - long_name = Monin-Obukhov parameter for momentum at 10m over ocean + standard_name = Monin_Obukhov_similarity_function_for_momentum_at_10m_over_water + long_name = Monin-Obukhov parameter for momentum at 10m over water units = none dimensions = (horizontal_loop_extent) type = real @@ -715,8 +715,8 @@ intent = inout optional = F [fh2_wat] - standard_name = Monin_Obukhov_similarity_function_for_heat_at_2m_over_ocean - long_name = Monin-Obukhov parameter for heat at 2m over ocean + standard_name = Monin_Obukhov_similarity_function_for_heat_at_2m_over_water + long_name = Monin-Obukhov parameter for heat at 2m over water units = none dimensions = (horizontal_loop_extent) type = real @@ -748,7 +748,7 @@ dimensions = (horizontal_loop_extent) type = real kind = kind_phys - intent = out + intent = inout optional = F [con_cp] standard_name = specific_heat_of_dry_air_at_constant_pressure diff --git a/physics/module_MYNNPBL_wrapper.F90 b/physics/module_MYNNPBL_wrapper.F90 index bbaed874f..2a6eb1f3b 100644 --- a/physics/module_MYNNPBL_wrapper.F90 +++ b/physics/module_MYNNPBL_wrapper.F90 @@ -10,6 +10,9 @@ MODULE mynnedmf_wrapper contains +!> \section arg_table_mynnedmf_wrapper_init Argument Table +!! \htmlinclude mynnedmf_wrapper_init.html +!! subroutine mynnedmf_wrapper_init (lheatstrg, errmsg, errflg) implicit none @@ -62,7 +65,7 @@ SUBROUTINE mynnedmf_wrapper_run( & & dtsfc_diag,dqsfc_diag, & & dusfc_cice,dvsfc_cice, & & dtsfc_cice,dqsfc_cice, & - & hflx_ocn,qflx_ocn,stress_ocn, & + & hflx_wat,qflx_wat,stress_wat, & & oceanfrac,fice,wet,icy,dry, & & dusfci_cpl,dvsfci_cpl, & & dtsfci_cpl,dqsfci_cpl, & @@ -244,13 +247,13 @@ SUBROUTINE mynnedmf_wrapper_run( & REAL(kind=kind_phys) :: tem !MYNN-3D - real(kind=kind_phys), dimension(im,levs+1), intent(in) :: phii - real(kind=kind_phys), dimension(im,levs ), intent(inout) :: & + real(kind=kind_phys), dimension(:,:), intent(in) :: phii + real(kind=kind_phys), dimension(:,:), intent(inout) :: & & dtdt, dudt, dvdt, & & dqdt_water_vapor, dqdt_liquid_cloud, dqdt_ice_cloud, & & dqdt_cloud_droplet_num_conc, dqdt_ice_num_conc, & & dqdt_ozone, dqdt_water_aer_num_conc, dqdt_ice_aer_num_conc - real(kind=kind_phys), dimension(im,levs), intent(inout) :: & + real(kind=kind_phys), dimension(:,:), intent(inout) :: & & qke, qke_adv, EL_PBL, Sh3D, & & qc_bl, qi_bl, cldfra_bl !These 10 arrays are only allocated when bl_mynn_output > 0 @@ -258,7 +261,7 @@ SUBROUTINE mynnedmf_wrapper_run( & & edmf_a,edmf_w,edmf_qt, & & edmf_thl,edmf_ent,edmf_qc, & & sub_thl,sub_sqv,det_thl,det_sqv - real(kind=kind_phys), dimension(im,levs), intent(in) :: & + real(kind=kind_phys), dimension(:,:), intent(in) :: & & u,v,omega,t3d, & & exner,prsl, & & qgrs_water_vapor, & @@ -269,10 +272,10 @@ SUBROUTINE mynnedmf_wrapper_run( & & qgrs_ozone, & & qgrs_water_aer_num_conc, & & qgrs_ice_aer_num_conc - real(kind=kind_phys), dimension(im,levs), intent(out) :: & + real(kind=kind_phys), dimension(:,:), intent(out) :: & & Tsq, Qsq, Cov, exch_h, exch_m - real(kind=kind_phys), dimension(im), intent(in) :: xmu - real(kind=kind_phys), dimension(im, levs), intent(in) :: htrsw, htrlw + real(kind=kind_phys), dimension(:), intent(in) :: xmu + real(kind=kind_phys), dimension(:,:), intent(in) :: htrsw, htrlw !LOCAL real(kind=kind_phys), dimension(im,levs) :: & & sqv,sqc,sqi,qnc,qni,ozone,qnwfa,qnifa, & @@ -292,31 +295,30 @@ SUBROUTINE mynnedmf_wrapper_run( & REAL(kind=kind_phys), DIMENSION( ndvel ) :: vd1 !MYNN-2D - real(kind=kind_phys), dimension(im), intent(in) :: & + real(kind=kind_phys), dimension(:), intent(in) :: & & dx,zorl,slmsk,tsurf,qsfc,ps, & & hflx,qflx,ust,wspd,rb,recmol - real(kind=kind_phys), dimension(im), intent(in) :: & + real(kind=kind_phys), dimension(:), intent(in) :: & & dusfc_cice,dvsfc_cice,dtsfc_cice,dqsfc_cice, & - & stress_ocn,hflx_ocn,qflx_ocn, & + & stress_wat,hflx_wat,qflx_wat, & & oceanfrac,fice - logical, dimension(im), intent(in) :: & + logical, dimension(:), intent(in) :: & & wet, dry, icy - real(kind=kind_phys), dimension(im), intent(inout) :: & - & pblh - real(kind=kind_phys), dimension(im), intent(out) :: & + real(kind=kind_phys), dimension(:), intent(inout) :: & + & pblh,dusfc_diag,dvsfc_diag,dtsfc_diag,dqsfc_diag + real(kind=kind_phys), dimension(:), intent(out) :: & & ch,dtsfc1,dqsfc1,dusfc1,dvsfc1, & - & dtsfci_diag,dqsfci_diag,dtsfc_diag,dqsfc_diag, & - & dusfci_diag,dvsfci_diag,dusfc_diag,dvsfc_diag, & + & dtsfci_diag,dqsfci_diag,dusfci_diag,dvsfci_diag, & & maxMF - integer, dimension(im), intent(inout) :: & + integer, dimension(:), intent(inout) :: & & kpbl,nupdraft,ktop_plume - real(kind=kind_phys), dimension(:), intent(inout) :: & + real(kind=kind_phys), dimension(:), intent(inout) :: & & dusfc_cpl,dvsfc_cpl,dtsfc_cpl,dqsfc_cpl - real(kind=kind_phys), dimension(:), intent(inout) :: & + real(kind=kind_phys), dimension(:), intent(inout) :: & & dusfci_cpl,dvsfci_cpl,dtsfci_cpl,dqsfci_cpl !LOCAL @@ -578,14 +580,14 @@ SUBROUTINE mynnedmf_wrapper_run( & dqsfci_cpl(i) = dqsfc_cice(i) elseif (icy(i) .or. dry(i)) then ! use stress_ocean for opw component at mixed point if (wspd(i) > zero) then - dusfci_cpl(i) = -1.*rho(i,1)*stress_ocn(i)*u(i,1)/wspd(i) ! U-momentum flux - dvsfci_cpl(i) = -1.*rho(i,1)*stress_ocn(i)*v(i,1)/wspd(i) ! V-momentum flux + dusfci_cpl(i) = -1.*rho(i,1)*stress_wat(i)*u(i,1)/wspd(i) ! U-momentum flux + dvsfci_cpl(i) = -1.*rho(i,1)*stress_wat(i)*v(i,1)/wspd(i) ! V-momentum flux else dusfci_cpl(i) = zero dvsfci_cpl(i) = zero endif - dtsfci_cpl(i) = cp*rho(i,1)*hflx_ocn(i) ! sensible heat flux over open ocean - dqsfci_cpl(i) = XLV*rho(i,1)*qflx_ocn(i) ! latent heat flux over open ocean + dtsfci_cpl(i) = cp*rho(i,1)*hflx_wat(i) ! sensible heat flux over open ocean + dqsfci_cpl(i) = XLV*rho(i,1)*qflx_wat(i) ! latent heat flux over open ocean else ! use results from this scheme for 100% open ocean dusfci_cpl(i) = dusfci_diag(i) dvsfci_cpl(i) = dvsfci_diag(i) diff --git a/physics/module_MYNNPBL_wrapper.meta b/physics/module_MYNNPBL_wrapper.meta index 4e490ff3d..3a5909e23 100644 --- a/physics/module_MYNNPBL_wrapper.meta +++ b/physics/module_MYNNPBL_wrapper.meta @@ -514,27 +514,27 @@ kind = kind_phys intent = in optional = F -[hflx_ocn] - standard_name = kinematic_surface_upward_sensible_heat_flux_over_ocean - long_name = kinematic surface upward sensible heat flux over ocean +[hflx_wat] + standard_name = kinematic_surface_upward_sensible_heat_flux_over_water + long_name = kinematic surface upward sensible heat flux over water units = K m s-1 dimensions = (horizontal_loop_extent) type = real kind = kind_phys intent = in optional = F -[qflx_ocn] - standard_name = kinematic_surface_upward_latent_heat_flux_over_ocean - long_name = kinematic surface upward latent heat flux over ocean +[qflx_wat] + standard_name = kinematic_surface_upward_latent_heat_flux_over_water + long_name = kinematic surface upward latent heat flux over water units = kg kg-1 m s-1 dimensions = (horizontal_loop_extent) type = real kind = kind_phys intent = in optional = F -[stress_ocn] - standard_name = surface_wind_stress_over_ocean - long_name = surface wind stress over ocean +[stress_wat] + standard_name = surface_wind_stress_over_water + long_name = surface wind stress over water units = m2 s-2 dimensions = (horizontal_loop_extent) type = real diff --git a/physics/module_MYNNSFC_wrapper.F90 b/physics/module_MYNNSFC_wrapper.F90 index e46a17d9a..2de8cd408 100644 --- a/physics/module_MYNNSFC_wrapper.F90 +++ b/physics/module_MYNNSFC_wrapper.F90 @@ -40,7 +40,7 @@ end subroutine mynnsfc_wrapper_init subroutine mynnsfc_wrapper_finalize () end subroutine mynnsfc_wrapper_finalize -!>\defgroup gsd_mynn_sfc GSD MYNN Surface Layer Scheme Module +!>\defgroup mynn_sfc GSD MYNN Surface Layer Scheme Module !> \brief This scheme (1) performs pre-mynnsfc work, (2) runs the mynn sfc layer scheme, and (3) performs post-mynnsfc work !! \section arg_table_mynnsfc_wrapper_run Argument Table !! \htmlinclude mynnsfc_wrapper_run.html @@ -57,22 +57,22 @@ SUBROUTINE mynnsfc_wrapper_run( & & u, v, t3d, qvsh, qc, prsl, phii, & & exner, ps, PBLH, slmsk, & & wet, dry, icy, & !intent(in) - & tskin_ocn, tskin_lnd, tskin_ice, & !intent(in) - & tsurf_ocn, tsurf_lnd, tsurf_ice, & !intent(in) - & qsfc_ocn, qsfc_lnd, qsfc_ice, & !intent(in) - & snowh_ocn, snowh_lnd, snowh_ice, & !intent(in) - & znt_ocn, znt_lnd, znt_ice, & !intent(inout) - & ust_ocn, ust_lnd, ust_ice, & !intent(inout) - & cm_ocn, cm_lnd, cm_ice, & !intent(inout) - & ch_ocn, ch_lnd, ch_ice, & !intent(inout) - & rb_ocn, rb_lnd, rb_ice, & !intent(inout) - & stress_ocn,stress_lnd,stress_ice, & !intent(inout) - & fm_ocn, fm_lnd, fm_ice, & !intent(inout) - & fh_ocn, fh_lnd, fh_ice, & !intent(inout) - & fm10_ocn, fm10_lnd, fm10_ice, & !intent(inout) - & fh2_ocn, fh2_lnd, fh2_ice, & !intent(inout) - & hflx_ocn, hflx_lnd, hflx_ice, & - & qflx_ocn, qflx_lnd, qflx_ice, & + & tskin_wat, tskin_lnd, tskin_ice, & !intent(in) + & tsurf_wat, tsurf_lnd, tsurf_ice, & !intent(in) + & qsfc_wat, qsfc_lnd, qsfc_ice, & !intent(in) + & snowh_wat, snowh_lnd, snowh_ice, & !intent(in) + & znt_wat, znt_lnd, znt_ice, & !intent(inout) + & ust_wat, ust_lnd, ust_ice, & !intent(inout) + & cm_wat, cm_lnd, cm_ice, & !intent(inout) + & ch_wat, ch_lnd, ch_ice, & !intent(inout) + & rb_wat, rb_lnd, rb_ice, & !intent(inout) + & stress_wat,stress_lnd,stress_ice, & !intent(inout) + & fm_wat, fm_lnd, fm_ice, & !intent(inout) + & fh_wat, fh_lnd, fh_ice, & !intent(inout) + & fm10_wat, fm10_lnd, fm10_ice, & !intent(inout) + & fh2_wat, fh2_lnd, fh2_ice, & !intent(inout) + & hflx_wat, hflx_lnd, hflx_ice, & + & qflx_wat, qflx_lnd, qflx_ice, & & QSFC, qsfc_lnd_ruc, qsfc_ice_ruc, & & USTM, ZOL, MOL, & & RMOL, WSPD, ch, HFLX, QFLX, LH, & @@ -130,61 +130,53 @@ SUBROUTINE mynnsfc_wrapper_run( & & iz0tlnd = 0, & !control: 0 & isfflx = 1 + integer, intent(in) :: im, levs + integer, intent(in) :: iter, itimestep, lsm, lsm_ruc + logical, intent(in) :: flag_init,flag_restart,lprnt integer, intent(in) :: ivegsrc integer, intent(in) :: sfc_z0_type ! option for calculating surface roughness length over ocean logical, intent(in) :: redrag ! reduced drag coeff. flag for high wind over sea (j.han) + real(kind=kind_phys), intent(in) :: delt !Input data - integer, dimension(im), intent(in) :: vegtype - real(kind=kind_phys), dimension(im), intent(in) :: & + integer, dimension(:), intent(in) :: vegtype + real(kind=kind_phys), dimension(:), intent(in) :: & & sigmaf,shdmax,z0pert,ztpert -!MYNN-1D - REAL :: delt - INTEGER :: im, levs - INTEGER :: iter, k, i, itimestep, lsm, lsm_ruc - LOGICAL :: flag_init,flag_restart,lprnt - INTEGER :: IDS,IDE,JDS,JDE,KDS,KDE, & - & IMS,IME,JMS,JME,KMS,KME, & - & ITS,ITE,JTS,JTE,KTS,KTE - - real(kind=kind_phys), dimension(im,levs+1), & + real(kind=kind_phys), dimension(:,:), & & intent(in) :: phii - real(kind=kind_phys), dimension(im,levs), & + real(kind=kind_phys), dimension(:,:), & & intent(in) :: exner, PRSL, & & u, v, t3d, qvsh, qc - real(kind=kind_phys), dimension(im,levs) :: & - & pattern_spp_pbl, dz, th, qv - - logical, dimension(im), intent(in) :: wet, dry, icy - - real(kind=kind_phys), dimension(im), intent(in) :: & - & tskin_ocn, tskin_lnd, tskin_ice, & - & tsurf_ocn, tsurf_lnd, tsurf_ice, & - & snowh_ocn, snowh_lnd, snowh_ice - - real(kind=kind_phys), dimension(im), intent(inout) :: & - & znt_ocn, znt_lnd, znt_ice, & - & ust_ocn, ust_lnd, ust_ice, & - & cm_ocn, cm_lnd, cm_ice, & - & ch_ocn, ch_lnd, ch_ice, & - & rb_ocn, rb_lnd, rb_ice, & - & stress_ocn,stress_lnd,stress_ice, & - & fm_ocn, fm_lnd, fm_ice, & - & fh_ocn, fh_lnd, fh_ice, & - & fm10_ocn, fm10_lnd, fm10_ice, & - & fh2_ocn, fh2_lnd, fh2_ice, & - & hflx_ocn, hflx_lnd, hflx_ice, & - & qflx_ocn, qflx_lnd, qflx_ice, & - & qsfc_ocn, qsfc_lnd, qsfc_ice + logical, dimension(:), intent(in) :: wet, dry, icy + + real(kind=kind_phys), dimension(:), intent(in) :: & + & tskin_wat, tskin_lnd, tskin_ice, & + & tsurf_wat, tsurf_lnd, tsurf_ice, & + & snowh_wat, snowh_lnd, snowh_ice + + real(kind=kind_phys), dimension(:), intent(inout) :: & + & znt_wat, znt_lnd, znt_ice, & + & ust_wat, ust_lnd, ust_ice, & + & cm_wat, cm_lnd, cm_ice, & + & ch_wat, ch_lnd, ch_ice, & + & rb_wat, rb_lnd, rb_ice, & + & stress_wat,stress_lnd,stress_ice, & + & fm_wat, fm_lnd, fm_ice, & + & fh_wat, fh_lnd, fh_ice, & + & fm10_wat, fm10_lnd, fm10_ice, & + & fh2_wat, fh2_lnd, fh2_ice, & + & hflx_wat, hflx_lnd, hflx_ice, & + & qflx_wat, qflx_lnd, qflx_ice, & + & qsfc_wat, qsfc_lnd, qsfc_ice !MYNN-2D real(kind=kind_phys), dimension(:), intent(in) :: & & dx, pblh, slmsk, ps, & & qsfc_lnd_ruc, qsfc_ice_ruc - real(kind=kind_phys), dimension(im), intent(inout) :: & + real(kind=kind_phys), dimension(:), intent(inout) :: & & ustm, hflx, qflx, wspd, qsfc, & & FLHC, FLQC, U10, V10, TH2, T2, Q2, & & CHS2, CQS2, rmol, zol, mol, ch, & @@ -195,6 +187,15 @@ SUBROUTINE mynnsfc_wrapper_run( & & chs, ck, cd, mavail, xland, GZ1OZ0, & & cpm, qgh, qfx, qsfc_ruc + real(kind=kind_phys), dimension(im,levs) :: & + & pattern_spp_pbl, dz, th, qv + +!MYNN-1D + INTEGER :: k, i + INTEGER :: IDS,IDE,JDS,JDE,KDS,KDE, & + & IMS,IME,JMS,JME,KMS,KME, & + & ITS,ITE,JTS,JTE,KTS,KTE + ! Initialize CCPP error handling variables errmsg = '' errflg = 0 @@ -227,14 +228,14 @@ SUBROUTINE mynnsfc_wrapper_run( & mavail(i)=1.0 !snowh(i)=snowd(i)*800. !mm -> m !znt_lnd(i)=znt_lnd(i)*0.01 !cm -> m - !znt_ocn(i)=znt_ocn(i)*0.01 !cm -> m + !znt_wat(i)=znt_wat(i)*0.01 !cm -> m !znt_ice(i)=znt_ice(i)*0.01 !cm -> m cpm(i)=cp enddo ! cm -> m where (dry) znt_lnd=znt_lnd*0.01 - where (wet) znt_ocn=znt_ocn*0.01 + where (wet) znt_wat=znt_wat*0.01 where (icy) znt_ice=znt_ice*0.01 ! qsfc ruc @@ -255,15 +256,15 @@ SUBROUTINE mynnsfc_wrapper_run( & ! write(0,*)"dz:",dz(1,1)," qsfc=",qsfc(1)," rmol:",rmol(1) ! write(0,*)" land water ice" ! write(0,*)dry(1),wet(1),icy(1) -! write(0,*)"ust:",ust_lnd(1),ust_ocn(1),ust_ice(1) -! write(0,*)"Tsk:",tskin_lnd(1),tskin_ocn(1),tskin_ice(1) -! write(0,*)"Tsurf:",tsurf_lnd(1),tsurf_ocn(1),tsurf_ice(1) -! write(0,*)"Qsfc:",qsfc_lnd(1),qsfc_ocn(1),qsfc_ice(1) -! write(0,*)"sno:",snowh_lnd(1),snowh_ocn(1),snowh_ice(1) -! write(0,*)"znt:",znt_lnd(1),znt_ocn(1),znt_ice(1) +! write(0,*)"ust:",ust_lnd(1),ust_wat(1),ust_ice(1) +! write(0,*)"Tsk:",tskin_lnd(1),tskin_wat(1),tskin_ice(1) +! write(0,*)"Tsurf:",tsurf_lnd(1),tsurf_wat(1),tsurf_ice(1) +! write(0,*)"Qsfc:",qsfc_lnd(1),qsfc_wat(1),qsfc_ice(1) +! write(0,*)"sno:",snowh_lnd(1),snowh_wat(1),snowh_ice(1) +! write(0,*)"znt:",znt_lnd(1),znt_wat(1),znt_ice(1) ! !write(0,*)"HFX:",hfx(1)," qfx",qfx(1) ! write(0,*)"qsfc:",qsfc(1)," ps:",ps(1) -! write(0,*)"wspd:",wspd(1),"rb=",rb_ocn(1) +! write(0,*)"wspd:",wspd(1),"rb=",rb_wat(1) ! write(0,*)"delt=",delt," im=",im," levs=",levs ! write(0,*)"flag_init=",flag_init ! write(0,*)"flag_restart=",flag_restart @@ -287,22 +288,22 @@ SUBROUTINE mynnsfc_wrapper_run( & & redrag=redrag,sfc_z0_type=sfc_z0_type, & !intent(in) itimestep=itimestep,iter=iter, & wet=wet, dry=dry, icy=icy, & !intent(in) - tskin_ocn=tskin_ocn, tskin_lnd=tskin_lnd, tskin_ice=tskin_ice, & !intent(in) - tsurf_ocn=tsurf_ocn, tsurf_lnd=tsurf_lnd, tsurf_ice=tsurf_ice, & !intent(in) - qsfc_ocn=qsfc_ocn, qsfc_lnd=qsfc_lnd, qsfc_ice=qsfc_ice, & !intent(in) - snowh_ocn=snowh_ocn, snowh_lnd=snowh_lnd, snowh_ice=snowh_ice, & !intent(in) - znt_ocn=znt_ocn, znt_lnd=znt_lnd, znt_ice=znt_ice, & !intent(inout) - ust_ocn=ust_ocn, ust_lnd=ust_lnd, ust_ice=ust_ice, & !intent(inout) - cm_ocn=cm_ocn, cm_lnd=cm_lnd, cm_ice=cm_ice, & !intent(inout) - ch_ocn=ch_ocn, ch_lnd=ch_lnd, ch_ice=ch_ice, & !intent(inout) - rb_ocn=rb_ocn, rb_lnd=rb_lnd, rb_ice=rb_ice, & !intent(inout) - stress_ocn=stress_ocn,stress_lnd=stress_lnd,stress_ice=stress_ice, & !intent(inout) - fm_ocn=fm_ocn, fm_lnd=fm_lnd, fm_ice=fm_ice, & !intent(inout) - fh_ocn=fh_ocn, fh_lnd=fh_lnd, fh_ice=fh_ice, & !intent(inout) - fm10_ocn=fm10_ocn, fm10_lnd=fm10_lnd, fm10_ice=fm10_ice, & !intent(inout) - fh2_ocn=fh2_ocn, fh2_lnd=fh2_lnd, fh2_ice=fh2_ice, & !intent(inout) - hflx_ocn=hflx_ocn, hflx_lnd=hflx_lnd, hflx_ice=hflx_ice, & - qflx_ocn=qflx_ocn, qflx_lnd=qflx_lnd, qflx_ice=qflx_ice, & + tskin_wat=tskin_wat, tskin_lnd=tskin_lnd, tskin_ice=tskin_ice, & !intent(in) + tsurf_wat=tsurf_wat, tsurf_lnd=tsurf_lnd, tsurf_ice=tsurf_ice, & !intent(in) + qsfc_wat=qsfc_wat, qsfc_lnd=qsfc_lnd, qsfc_ice=qsfc_ice, & !intent(in) + snowh_wat=snowh_wat, snowh_lnd=snowh_lnd, snowh_ice=snowh_ice, & !intent(in) + znt_wat=znt_wat, znt_lnd=znt_lnd, znt_ice=znt_ice, & !intent(inout) + ust_wat=ust_wat, ust_lnd=ust_lnd, ust_ice=ust_ice, & !intent(inout) + cm_wat=cm_wat, cm_lnd=cm_lnd, cm_ice=cm_ice, & !intent(inout) + ch_wat=ch_wat, ch_lnd=ch_lnd, ch_ice=ch_ice, & !intent(inout) + rb_wat=rb_wat, rb_lnd=rb_lnd, rb_ice=rb_ice, & !intent(inout) + stress_wat=stress_wat,stress_lnd=stress_lnd,stress_ice=stress_ice, & !intent(inout) + fm_wat=fm_wat, fm_lnd=fm_lnd, fm_ice=fm_ice, & !intent(inout) + fh_wat=fh_wat, fh_lnd=fh_lnd, fh_ice=fh_ice, & !intent(inout) + fm10_wat=fm10_wat, fm10_lnd=fm10_lnd, fm10_ice=fm10_ice, & !intent(inout) + fh2_wat=fh2_wat, fh2_lnd=fh2_lnd, fh2_ice=fh2_ice, & !intent(inout) + hflx_wat=hflx_wat, hflx_lnd=hflx_lnd, hflx_ice=hflx_ice, & + qflx_wat=qflx_wat, qflx_lnd=qflx_lnd, qflx_ice=qflx_ice, & ch=ch,CHS=chs,CHS2=chs2,CQS2=cqs2,CPM=cpm, & ZNT=znt,USTM=ustm,ZOL=zol,MOL=mol,RMOL=rmol, & psim=psim,psih=psih, & @@ -330,13 +331,13 @@ SUBROUTINE mynnsfc_wrapper_run( & ! !evap(i)=QFX(i) !or /rho ?? ! ! DH* note - this could be automated (CCPP knows how to convert m to cm) ! znt_lnd(i)=znt_lnd(i)*100. !m -> cm - ! znt_ocn(i)=znt_ocn(i)*100. + ! znt_wat(i)=znt_wat(i)*100. ! znt_ice(i)=znt_ice(i)*100. !enddo ! m -> cm where (dry) znt_lnd=znt_lnd*100. - where (wet) znt_ocn=znt_ocn*100. + where (wet) znt_wat=znt_wat*100. where (icy) znt_ice=znt_ice*100. ! if (lprnt) then @@ -344,17 +345,17 @@ SUBROUTINE mynnsfc_wrapper_run( & ! write(0,*)"finished with mynn_surface layer; output:" ! write(0,*)" land water ice" ! write(0,*)dry(1),wet(1),icy(1) -! write(0,*)"ust:",ust_lnd(1),ust_ocn(1),ust_ice(1) -! write(0,*)"Tsk:",tskin_lnd(1),tskin_ocn(1),tskin_ice(1) -! write(0,*)"Tsurf:",tsurf_lnd(1),tsurf_ocn(1),tsurf_ice(1) -! write(0,*)"Qsfc:",qsfc_lnd(1),qsfc_ocn(1),qsfc_ice(1) -! write(0,*)"sno:",snowh_lnd(1),snowh_ocn(1),snowh_ice(1) -! write(0,*)"znt (cm):",znt_lnd(1),znt_ocn(1),znt_ice(1) -! write(0,*)"cm:",cm_lnd(1),cm_ocn(1),cm_ice(1) -! write(0,*)"ch:",ch_lnd(1),ch_ocn(1),ch_ice(1) -! write(0,*)"fm:",fm_lnd(1),fm_ocn(1),fm_ice(1) -! write(0,*)"fh:",fh_lnd(1),fh_ocn(1),fh_ice(1) -! write(0,*)"rb:",rb_lnd(1),rb_ocn(1),rb_ice(1) +! write(0,*)"ust:",ust_lnd(1),ust_wat(1),ust_ice(1) +! write(0,*)"Tsk:",tskin_lnd(1),tskin_wat(1),tskin_ice(1) +! write(0,*)"Tsurf:",tsurf_lnd(1),tsurf_wat(1),tsurf_ice(1) +! write(0,*)"Qsfc:",qsfc_lnd(1),qsfc_wat(1),qsfc_ice(1) +! write(0,*)"sno:",snowh_lnd(1),snowh_wat(1),snowh_ice(1) +! write(0,*)"znt (cm):",znt_lnd(1),znt_wat(1),znt_ice(1) +! write(0,*)"cm:",cm_lnd(1),cm_wat(1),cm_ice(1) +! write(0,*)"ch:",ch_lnd(1),ch_wat(1),ch_ice(1) +! write(0,*)"fm:",fm_lnd(1),fm_wat(1),fm_ice(1) +! write(0,*)"fh:",fh_lnd(1),fh_wat(1),fh_ice(1) +! write(0,*)"rb:",rb_lnd(1),rb_wat(1),rb_ice(1) ! write(0,*)"xland=",xland(1)," wstar:",wstar(1) ! write(0,*)"HFX:",hfx(1)," qfx:",qfx(1) ! write(0,*)"HFLX:",hflx(1)," evap:",evap(1) diff --git a/physics/module_MYNNSFC_wrapper.meta b/physics/module_MYNNSFC_wrapper.meta index e3e870ff2..1f16ff161 100644 --- a/physics/module_MYNNSFC_wrapper.meta +++ b/physics/module_MYNNSFC_wrapper.meta @@ -154,8 +154,8 @@ intent = in optional = F [sfc_z0_type] - standard_name = flag_for_surface_roughness_option_over_ocean - long_name = surface roughness options over ocean + standard_name = flag_for_surface_roughness_option_over_water + long_name = surface roughness options over water units = flag dimensions = () type = integer @@ -302,9 +302,9 @@ type = logical intent = in optional = F -[tskin_ocn] - standard_name = surface_skin_temperature_over_ocean_interstitial - long_name = surface skin temperature over ocean (temporary use as interstitial) +[tskin_wat] + standard_name = surface_skin_temperature_over_water_interstitial + long_name = surface skin temperature over water (temporary use as interstitial) units = K dimensions = (horizontal_loop_extent) type = real @@ -329,9 +329,9 @@ kind = kind_phys intent = in optional = F -[tsurf_ocn] - standard_name = surface_skin_temperature_after_iteration_over_ocean - long_name = surface skin temperature after iteration over ocean +[tsurf_wat] + standard_name = surface_skin_temperature_after_iteration_over_water + long_name = surface skin temperature after iteration over water units = K dimensions = (horizontal_loop_extent) type = real @@ -356,9 +356,9 @@ kind = kind_phys intent = in optional = F -[qsfc_ocn] - standard_name = surface_specific_humidity_over_ocean - long_name = surface air saturation specific humidity over ocean +[qsfc_wat] + standard_name = surface_specific_humidity_over_water + long_name = surface air saturation specific humidity over water units = kg kg-1 dimensions = (horizontal_loop_extent) type = real @@ -383,9 +383,9 @@ kind = kind_phys intent = inout optional = F -[snowh_ocn] - standard_name = surface_snow_thickness_water_equivalent_over_ocean - long_name = water equivalent snow depth over ocean +[snowh_wat] + standard_name = surface_snow_thickness_water_equivalent_over_water + long_name = water equivalent snow depth over water units = mm dimensions = (horizontal_loop_extent) type = real @@ -410,9 +410,9 @@ kind = kind_phys intent = in optional = F -[znt_ocn] - standard_name = surface_roughness_length_over_ocean_interstitial - long_name = surface roughness length over ocean (temporary use as interstitial) +[znt_wat] + standard_name = surface_roughness_length_over_water + long_name = surface roughness length over water (temporary use as interstitial) units = cm dimensions = (horizontal_loop_extent) type = real @@ -420,7 +420,7 @@ intent = inout optional = F [znt_lnd] - standard_name = surface_roughness_length_over_land_interstitial + standard_name = surface_roughness_length_over_land long_name = surface roughness length over land (temporary use as interstitial) units = cm dimensions = (horizontal_loop_extent) @@ -429,7 +429,7 @@ intent = inout optional = F [znt_ice] - standard_name = surface_roughness_length_over_ice_interstitial + standard_name = surface_roughness_length_over_ice long_name = surface roughness length over ice (temporary use as interstitial) units = cm dimensions = (horizontal_loop_extent) @@ -437,9 +437,9 @@ kind = kind_phys intent = inout optional = F -[ust_ocn] - standard_name = surface_friction_velocity_over_ocean - long_name = surface friction velocity over ocean +[ust_wat] + standard_name = surface_friction_velocity_over_water + long_name = surface friction velocity over water units = m s-1 dimensions = (horizontal_loop_extent) type = real @@ -464,9 +464,9 @@ kind = kind_phys intent = inout optional = F -[cm_ocn] - standard_name = surface_drag_coefficient_for_momentum_in_air_over_ocean - long_name = surface exchange coeff for momentum over ocean +[cm_wat] + standard_name = surface_drag_coefficient_for_momentum_in_air_over_water + long_name = surface exchange coeff for momentum over water units = none dimensions = (horizontal_loop_extent) type = real @@ -491,9 +491,9 @@ kind = kind_phys intent = inout optional = F -[ch_ocn] - standard_name = surface_drag_coefficient_for_heat_and_moisture_in_air_over_ocean - long_name = surface exchange coeff heat & moisture over ocean +[ch_wat] + standard_name = surface_drag_coefficient_for_heat_and_moisture_in_air_over_water + long_name = surface exchange coeff heat surface exchange coeff heat & moisture over ocean moisture over water units = none dimensions = (horizontal_loop_extent) type = real @@ -518,9 +518,9 @@ kind = kind_phys intent = inout optional = F -[rb_ocn] - standard_name = bulk_richardson_number_at_lowest_model_level_over_ocean - long_name = bulk Richardson number at the surface over ocean +[rb_wat] + standard_name = bulk_richardson_number_at_lowest_model_level_over_water + long_name = bulk Richardson number at the surface over water units = none dimensions = (horizontal_loop_extent) type = real @@ -545,9 +545,9 @@ kind = kind_phys intent = inout optional = F -[stress_ocn] - standard_name = surface_wind_stress_over_ocean - long_name = surface wind stress over ocean +[stress_wat] + standard_name = surface_wind_stress_over_water + long_name = surface wind stress over water units = m2 s-2 dimensions = (horizontal_loop_extent) type = real @@ -572,9 +572,9 @@ kind = kind_phys intent = inout optional = F -[fm_ocn] - standard_name = Monin_Obukhov_similarity_function_for_momentum_over_ocean - long_name = Monin-Obukhov similarity function for momentum over ocean +[fm_wat] + standard_name = Monin_Obukhov_similarity_function_for_momentum_over_water + long_name = Monin-Obukhov similarity function for momentum over water units = none dimensions = (horizontal_loop_extent) type = real @@ -599,9 +599,9 @@ kind = kind_phys intent = inout optional = F -[fh_ocn] - standard_name = Monin_Obukhov_similarity_function_for_heat_over_ocean - long_name = Monin-Obukhov similarity function for heat over ocean +[fh_wat] + standard_name = Monin_Obukhov_similarity_function_for_heat_over_water + long_name = Monin-Obukhov similarity function for heat over water units = none dimensions = (horizontal_loop_extent) type = real @@ -626,9 +626,9 @@ kind = kind_phys intent = inout optional = F -[fm10_ocn] - standard_name = Monin_Obukhov_similarity_function_for_momentum_at_10m_over_ocean - long_name = Monin-Obukhov similarity parameter for momentum at 10m over ocean +[fm10_wat] + standard_name = Monin_Obukhov_similarity_function_for_momentum_at_10m_over_water + long_name = Monin-Obukhov similarity parameter for momentum at 10m over water units = none dimensions = (horizontal_loop_extent) type = real @@ -653,9 +653,9 @@ kind = kind_phys intent = inout optional = F -[fh2_ocn] - standard_name = Monin_Obukhov_similarity_function_for_heat_at_2m_over_ocean - long_name = Monin-Obukhov similarity parameter for heat at 2m over ocean +[fh2_wat] + standard_name = Monin_Obukhov_similarity_function_for_heat_at_2m_over_water + long_name = Monin-Obukhov similarity parameter for heat at 2m over water units = none dimensions = (horizontal_loop_extent) type = real @@ -680,9 +680,9 @@ kind = kind_phys intent = inout optional = F -[hflx_ocn] - standard_name = kinematic_surface_upward_sensible_heat_flux_over_ocean - long_name = kinematic surface upward sensible heat flux over ocean +[hflx_wat] + standard_name = kinematic_surface_upward_sensible_heat_flux_over_water + long_name = kinematic surface upward sensible heat flux over water units = K m s-1 dimensions = (horizontal_loop_extent) type = real @@ -707,9 +707,9 @@ kind = kind_phys intent = inout optional = F -[qflx_ocn] - standard_name = kinematic_surface_upward_latent_heat_flux_over_ocean - long_name = kinematic surface upward latent heat flux over ocean +[qflx_wat] + standard_name = kinematic_surface_upward_latent_heat_flux_over_water + long_name = kinematic surface upward latent heat flux over water units = kg kg-1 m s-1 dimensions = (horizontal_loop_extent) type = real diff --git a/physics/module_SGSCloud_RadPost.F90 b/physics/module_SGSCloud_RadPost.F90 index bedb660a6..ea262596f 100644 --- a/physics/module_SGSCloud_RadPost.F90 +++ b/physics/module_SGSCloud_RadPost.F90 @@ -34,8 +34,8 @@ subroutine sgscloud_radpost_run( & integer, intent(in) :: im, levs logical, intent(in) :: flag_init, flag_restart - real(kind=kind_phys), dimension(im,levs), intent(inout) :: qc, qi - real(kind=kind_phys), dimension(im,levs), intent(in) :: qc_save, qi_save + real(kind=kind_phys), dimension(:,:), intent(inout) :: qc, qi + real(kind=kind_phys), dimension(:,:), intent(in) :: qc_save, qi_save character(len=*), intent(out) :: errmsg integer, intent(out) :: errflg ! Local variable diff --git a/physics/module_SGSCloud_RadPre.F90 b/physics/module_SGSCloud_RadPre.F90 index 592b88e32..bea33c2b7 100644 --- a/physics/module_SGSCloud_RadPre.F90 +++ b/physics/module_SGSCloud_RadPre.F90 @@ -6,19 +6,24 @@ !! scale) qc, qi and cloud fraction coming from the microphysics scheme. !! 4) Recompute the diagnostic high, mid, low, total and bl clouds to be consistent with radiation +!> \defgroup sgsrad_group GSD sgscloud_radpre_run Module module sgscloud_radpre contains +!> \section arg_table_sgscloud_radpre_init Argument Table +!! \htmlinclude sgscloud_radpre_init.html +!! subroutine sgscloud_radpre_init () end subroutine sgscloud_radpre_init +!> \section arg_table_sgscloud_radpre_finalize Argument Table +!! \htmlinclude sgscloud_radpre_finalize.html +!! subroutine sgscloud_radpre_finalize () end subroutine sgscloud_radpre_finalize -!> \defgroup sgsrad_group GSD sgscloud_radpre_run Module -!> \ingroup sgscloud_radpre -!! This interstitial code adds the subgrid clouds to the resolved-scale clouds +!> This interstitial code adds the subgrid clouds to the resolved-scale clouds !! if there is no resolved-scale clouds in that particular grid box. It can also !! specify a cloud fraction for resolved-scale clouds, using Xu-Randall (1996), !! if desired. @@ -68,20 +73,20 @@ subroutine sgscloud_radpre_run( & integer, intent(in) :: im, levs, imfdeepcnv, imfdeepcnv_gf, & & nlay, imp_physics, imp_physics_gfdl logical, intent(in) :: flag_init, flag_restart, do_mynnedmf - real(kind=kind_phys), dimension(im,levs), intent(inout) :: qc, qi - real(kind=kind_phys), dimension(im,levs), intent(inout) :: qr, qs, qg + real(kind=kind_phys), dimension(:,:), intent(inout) :: qc, qi + real(kind=kind_phys), dimension(:,:), intent(inout) :: qr, qs, qg ! qci_conv only allocated if GF is used real(kind=kind_phys), dimension(:,:), intent(inout) :: qci_conv - real(kind=kind_phys), dimension(im,levs), intent(in) :: T3D,delp, & + real(kind=kind_phys), dimension(:,:), intent(in) :: T3D,delp, & & qv,P3D - real(kind=kind_phys), dimension(im,levs), intent(inout) :: & + real(kind=kind_phys), dimension(:,:), intent(inout) :: & & clouds1,clouds2,clouds3,clouds4,clouds5 - real(kind=kind_phys), dimension(im,levs), intent(inout) :: qc_save, qi_save - real(kind=kind_phys), dimension(im,levs), intent(in) :: qc_bl, qi_bl, cldfra_bl - real(kind=kind_phys), dimension(im), intent(in) :: slmsk, xlat, de_lgth - real(kind=kind_phys), dimension(im,nlay), intent(in) :: plyr, dz - real(kind=kind_phys), dimension(im,5), intent(inout) :: cldsa - integer, dimension(im,3), intent(inout) :: mbota, mtopa + real(kind=kind_phys), dimension(:,:), intent(inout) :: qc_save, qi_save + real(kind=kind_phys), dimension(:,:), intent(in) :: qc_bl, qi_bl, cldfra_bl + real(kind=kind_phys), dimension(:), intent(in) :: slmsk, xlat, de_lgth + real(kind=kind_phys), dimension(:,:), intent(in) :: plyr, dz + real(kind=kind_phys), dimension(:,:), intent(inout) :: cldsa + integer, dimension(:,:), intent(inout) :: mbota, mtopa integer, intent(in) :: iovr character(len=*), intent(out) :: errmsg integer, intent(out) :: errflg diff --git a/physics/module_SGSCloud_RadPre.meta b/physics/module_SGSCloud_RadPre.meta index e9a18df8b..d454578c6 100644 --- a/physics/module_SGSCloud_RadPre.meta +++ b/physics/module_SGSCloud_RadPre.meta @@ -39,6 +39,14 @@ type = logical intent = in optional = F +[do_mynnedmf] + standard_name = do_mynnedmf + long_name = flag to activate MYNN-EDMF + units = flag + dimensions = () + type = logical + intent = in + optional = F [qc] standard_name = cloud_condensed_water_mixing_ratio long_name = ratio of mass of cloud water to mass of dry air plus vapor (without condensates) @@ -313,14 +321,6 @@ type = integer intent = inout optional = F -[do_mynnedmf] - standard_name = do_mynnedmf - long_name = flag to activate MYNN-EDMF - units = flag - dimensions = () - type = logical - intent = in - optional = F [imp_physics] standard_name = flag_for_microphysics_scheme long_name = choice of microphysics scheme diff --git a/physics/module_gfdl_cloud_microphys.F90 b/physics/module_gfdl_cloud_microphys.F90 index 6cc9275dc..1fa33fc18 100644 --- a/physics/module_gfdl_cloud_microphys.F90 +++ b/physics/module_gfdl_cloud_microphys.F90 @@ -1,6 +1,6 @@ !> \file gfdl_cloud_microphys.F90 !! This file contains the full GFDL cloud microphysics (Chen and Lin (2013) -!! \cite chen_and_lin_2013 and Zhou et al. 2019 \cite zhou2019toward). +!! \cite chen_and_lin_2013 and Zhou et al. 2019 \cite zhou_etal_2019). !! The module is paired with 'gfdl_fv_sat_adj', which performs the "fast" !! processes !>author Shian-Jiann Lin, Linjiong Zhou diff --git a/physics/module_nst_parameters.f90 b/physics/module_nst_parameters.f90 index 502ef976a..6d8c8794b 100644 --- a/physics/module_nst_parameters.f90 +++ b/physics/module_nst_parameters.f90 @@ -6,6 +6,8 @@ !! \ingroup gfs_nst_main !! This module contains constants and parameters used in GFS !! near surface sea temperature scheme. +!! history: +!! 20210305: X.Li, reduce z_w_max from 30 m to 20 m module module_nst_parameters use machine, only : kind_phys & ,kind_rad ! for astronomy (date) calculations @@ -42,7 +44,7 @@ module module_nst_parameters ,eps_z_w=0.01 & !< criteria to finish iterations for z_w ,eps_conv=0.01 & !< criteria to finish iterations for d_conv ,eps_sfs=0.01 & !< criteria to finish iterations for d_sfs - ,z_w_max=30.0 & !< max warm layer thickness + ,z_w_max=20.0 & !< max warm layer thickness ,z_w_min=0.2 & !< min warm layer thickness ,z_w_ini=0.2 & !< initial warm layer thickness in dtl_onset ,z_c_max=0.01 & !< maximum of sub-layer thickness (m) diff --git a/physics/module_sf_exchcoef.f90 b/physics/module_sf_exchcoef.f90 old mode 100755 new mode 100644 diff --git a/physics/module_sf_mynn.F90 b/physics/module_sf_mynn.F90 index 340fb703a..fc987b627 100644 --- a/physics/module_sf_mynn.F90 +++ b/physics/module_sf_mynn.F90 @@ -2,7 +2,7 @@ !! This file contains !WRF:MODEL_LAYER:PHYSICS ! -!>\ingroup gsd_mynn_sfc +!>\ingroup mynn_sfc !>\defgroup module_sf_mynn_mod GSD MYNN SFC Module MODULE module_sf_mynn @@ -123,7 +123,7 @@ MODULE module_sf_mynn !------------------------------------------------------------------- !------------------------------------------------------------------- -!>\ingroup module_sf_mynn_mod +!>\ingroup mynn_sfc !! This subroutine SUBROUTINE SFCLAY_mynn( & U3D,V3D,T3D,QV3D,P3D,dz8w, & !in @@ -137,22 +137,22 @@ SUBROUTINE SFCLAY_mynn( & & redrag,sfc_z0_type, & !intent(in) itimestep,iter, & !in wet, dry, icy, & !intent(in) - tskin_ocn, tskin_lnd, tskin_ice, & !intent(in) - tsurf_ocn, tsurf_lnd, tsurf_ice, & !intent(in) - qsfc_ocn, qsfc_lnd, qsfc_ice, & !intent(in) - snowh_ocn, snowh_lnd, snowh_ice, & !intent(in) - ZNT_ocn, ZNT_lnd, ZNT_ice, & !intent(inout) - UST_ocn, UST_lnd, UST_ice, & !intent(inout) - cm_ocn, cm_lnd, cm_ice, & !intent(inout) - ch_ocn, ch_lnd, ch_ice, & !intent(inout) - rb_ocn, rb_lnd, rb_ice, & !intent(inout) - stress_ocn,stress_lnd,stress_ice, & !intent(inout) - fm_ocn, fm_lnd, fm_ice, & !intent(inout) - fh_ocn, fh_lnd, fh_ice, & !intent(inout) - fm10_ocn, fm10_lnd, fm10_ice, & !intent(inout) - fh2_ocn, fh2_lnd, fh2_ice, & !intent(inout) - HFLX_ocn, HFLX_lnd, HFLX_ice, & - QFLX_ocn, QFLX_lnd, QFLX_ice, & + tskin_wat, tskin_lnd, tskin_ice, & !intent(in) + tsurf_wat, tsurf_lnd, tsurf_ice, & !intent(in) + qsfc_wat, qsfc_lnd, qsfc_ice, & !intent(in) + snowh_wat, snowh_lnd, snowh_ice, & !intent(in) + ZNT_wat, ZNT_lnd, ZNT_ice, & !intent(inout) + UST_wat, UST_lnd, UST_ice, & !intent(inout) + cm_wat, cm_lnd, cm_ice, & !intent(inout) + ch_wat, ch_lnd, ch_ice, & !intent(inout) + rb_wat, rb_lnd, rb_ice, & !intent(inout) + stress_wat,stress_lnd,stress_ice, & !intent(inout) + fm_wat, fm_lnd, fm_ice, & !intent(inout) + fh_wat, fh_lnd, fh_ice, & !intent(inout) + fm10_wat, fm10_lnd, fm10_ice, & !intent(inout) + fh2_wat, fh2_lnd, fh2_ice, & !intent(inout) + HFLX_wat, HFLX_lnd, HFLX_ice, & + QFLX_wat, QFLX_lnd, QFLX_ice, & CH,CHS,CHS2,CQS2,CPM, & ZNT,USTM,ZOL,MOL,RMOL, & PSIM,PSIH, & @@ -332,25 +332,25 @@ SUBROUTINE SFCLAY_mynn( & & wet, dry, icy REAL, DIMENSION( ims:ime ), INTENT(IN) :: & - & tskin_ocn, tskin_lnd, tskin_ice, & - & tsurf_ocn, tsurf_lnd, tsurf_ice, & - & snowh_ocn, snowh_lnd, snowh_ice, & + & tskin_wat, tskin_lnd, tskin_ice, & + & tsurf_wat, tsurf_lnd, tsurf_ice, & + & snowh_wat, snowh_lnd, snowh_ice, & & qsfc_ruc REAL, DIMENSION( ims:ime), INTENT(INOUT) :: & - & ZNT_ocn, ZNT_lnd, ZNT_ice, & - & UST_ocn, UST_lnd, UST_ice, & - & cm_ocn, cm_lnd, cm_ice, & - & ch_ocn, ch_lnd, ch_ice, & - & rb_ocn, rb_lnd, rb_ice, & - & stress_ocn,stress_lnd,stress_ice, & - & fm_ocn, fm_lnd, fm_ice, & - & fh_ocn, fh_lnd, fh_ice, & - & fm10_ocn, fm10_lnd, fm10_ice, & - & fh2_ocn, fh2_lnd, fh2_ice, & - & HFLX_ocn, HFLX_lnd, HFLX_ice, & - & QFLX_ocn, QFLX_lnd, QFLX_ice, & - & qsfc_ocn, qsfc_lnd, qsfc_ice + & ZNT_wat, ZNT_lnd, ZNT_ice, & + & UST_wat, UST_lnd, UST_ice, & + & cm_wat, cm_lnd, cm_ice, & + & ch_wat, ch_lnd, ch_ice, & + & rb_wat, rb_lnd, rb_ice, & + & stress_wat,stress_lnd,stress_ice, & + & fm_wat, fm_lnd, fm_ice, & + & fh_wat, fh_lnd, fh_ice, & + & fm10_wat, fm10_lnd, fm10_ice, & + & fh2_wat, fh2_lnd, fh2_ice, & + & HFLX_wat, HFLX_lnd, HFLX_ice, & + & QFLX_wat, QFLX_lnd, QFLX_ice, & + & qsfc_wat, qsfc_lnd, qsfc_ice !ADDITIONAL OUTPUT !JOE-begin @@ -406,12 +406,12 @@ SUBROUTINE SFCLAY_mynn( & IF (itimestep==1 .AND. iter==1) THEN DO i=its,ite !Everything here is used before calculated - UST_OCN(i)=MAX(0.04*SQRT(U1D(i)*U1D(i) + V1D(i)*V1D(i)),0.001) + UST_WAT(i)=MAX(0.04*SQRT(U1D(i)*U1D(i) + V1D(i)*V1D(i)),0.001) UST_LND(i)=MAX(0.04*SQRT(U1D(i)*U1D(i) + V1D(i)*V1D(i)),0.001) UST_ICE(i)=MAX(0.04*SQRT(U1D(i)*U1D(i) + V1D(i)*V1D(i)),0.001) MOL(i)=0.0 QSFC(i)=QV3D(i,kts)/(1.+QV3D(i,kts)) - QSFC_OCN(i)=QSFC(i) + QSFC_WAT(i)=QSFC(i) QSFC_LND(i)=QSFC(i) QSFC_ICE(i)=QSFC(i) qstar(i)=0.0 @@ -440,22 +440,22 @@ SUBROUTINE SFCLAY_mynn( & redrag,sfc_z0_type, & !intent(in) itimestep,iter, & wet, dry, icy, & !intent(in) - tskin_ocn, tskin_lnd, tskin_ice, & !intent(in) - tsurf_ocn, tsurf_lnd, tsurf_ice, & !intent(in) - qsfc_ocn, qsfc_lnd, qsfc_ice, & !intent(in) - snowh_ocn, snowh_lnd, snowh_ice, & !intent(in) - ZNT_ocn, ZNT_lnd, ZNT_ice, & !intent(inout) - UST_ocn, UST_lnd, UST_ice, & !intent(inout) - cm_ocn, cm_lnd, cm_ice, & !intent(inout) - ch_ocn, ch_lnd, ch_ice, & !intent(inout) - rb_ocn, rb_lnd, rb_ice, & !intent(inout) - stress_ocn, stress_lnd, stress_ice, & !intent(inout) - fm_ocn, fm_lnd, fm_ice, & !intent(inout) - fh_ocn, fh_lnd, fh_ice, & !intent(inout) - fm10_ocn, fm10_lnd, fm10_ice, & !intent(inout) - fh2_ocn, fh2_lnd, fh2_ice, & - HFLX_ocn, HFLX_lnd, HFLX_ice, & - QFLX_ocn, QFLX_lnd, QFLX_ice, & + tskin_wat, tskin_lnd, tskin_ice, & !intent(in) + tsurf_wat, tsurf_lnd, tsurf_ice, & !intent(in) + qsfc_wat, qsfc_lnd, qsfc_ice, & !intent(in) + snowh_wat, snowh_lnd, snowh_ice, & !intent(in) + ZNT_wat, ZNT_lnd, ZNT_ice, & !intent(inout) + UST_wat, UST_lnd, UST_ice, & !intent(inout) + cm_wat, cm_lnd, cm_ice, & !intent(inout) + ch_wat, ch_lnd, ch_ice, & !intent(inout) + rb_wat, rb_lnd, rb_ice, & !intent(inout) + stress_wat, stress_lnd, stress_ice, & !intent(inout) + fm_wat, fm_lnd, fm_ice, & !intent(inout) + fh_wat, fh_lnd, fh_ice, & !intent(inout) + fm10_wat, fm10_lnd, fm10_ice, & !intent(inout) + fh2_wat, fh2_lnd, fh2_ice, & + HFLX_wat, HFLX_lnd, HFLX_ice, & + QFLX_wat, QFLX_lnd, QFLX_ice, & ch,CHS,CHS2,CQS2,CPM, & ZNT,USTM,ZOL,MOL,RMOL, & PSIM,PSIH, & @@ -471,7 +471,7 @@ SUBROUTINE SFCLAY_mynn( & END SUBROUTINE SFCLAY_MYNN !------------------------------------------------------------------- -!>\ingroup module_sf_mynn_mod +!>\ingroup mynn_sfc !! This subroutine calculates u*, z/L, and the exchange coefficients !! which are passed to subsequent scheme to calculate the fluxes. !! This scheme has options to calculate the fluxes and near-surface @@ -487,22 +487,22 @@ SUBROUTINE SFCLAY1D_mynn( & redrag,sfc_z0_type, & !intent(in) itimestep,iter, & wet, dry, icy, & !intent(in) - tskin_ocn, tskin_lnd, tskin_ice, & !intent(in) - tsurf_ocn, tsurf_lnd, tsurf_ice, & !intent(in) - qsfc_ocn, qsfc_lnd, qsfc_ice, & !intent(in) - snowh_ocn, snowh_lnd, snowh_ice, & !intent(in) - ZNT_ocn, ZNT_lnd, ZNT_ice, & !intent(inout) - UST_ocn, UST_lnd, UST_ice, & !intent(inout) - cm_ocn, cm_lnd, cm_ice, & !intent(inout) - ch_ocn, ch_lnd, ch_ice, & !intent(inout) - rb_ocn, rb_lnd, rb_ice, & !intent(inout) - stress_ocn, stress_lnd, stress_ice, & !intent(inout) - psix_ocn, psix_lnd, psix_ice, & !=fm, intent(inout) - psit_ocn, psit_lnd, psit_ice, & !=fh, intent(inout) - psix10_ocn, psix10_lnd, psix10_ice, & !=fm10, intent(inout) - psit2_ocn, psit2_lnd, psit2_ice, & !=fh2, intent(inout) - HFLX_ocn, HFLX_lnd, HFLX_ice, & - QFLX_ocn, QFLX_lnd, QFLX_ice, & + tskin_wat, tskin_lnd, tskin_ice, & !intent(in) + tsurf_wat, tsurf_lnd, tsurf_ice, & !intent(in) + qsfc_wat, qsfc_lnd, qsfc_ice, & !intent(in) + snowh_wat, snowh_lnd, snowh_ice, & !intent(in) + ZNT_wat, ZNT_lnd, ZNT_ice, & !intent(inout) + UST_wat, UST_lnd, UST_ice, & !intent(inout) + cm_wat, cm_lnd, cm_ice, & !intent(inout) + ch_wat, ch_lnd, ch_ice, & !intent(inout) + rb_wat, rb_lnd, rb_ice, & !intent(inout) + stress_wat, stress_lnd, stress_ice, & !intent(inout) + psix_wat, psix_lnd, psix_ice, & !=fm, intent(inout) + psit_wat, psit_lnd, psit_ice, & !=fh, intent(inout) + psix10_wat, psix10_lnd, psix10_ice, & !=fm10, intent(inout) + psit2_wat, psit2_lnd, psit2_ice, & !=fh2, intent(inout) + HFLX_wat, HFLX_lnd, HFLX_ice, & + QFLX_wat, QFLX_lnd, QFLX_ice, & ch,CHS,CHS2,CQS2,CPM, & ZNT,USTM,ZOL,MOL,RMOL, & PSIM,PSIH, & @@ -583,24 +583,24 @@ SUBROUTINE SFCLAY1D_mynn( & & wet, dry, icy REAL, DIMENSION( ims:ime ), INTENT(in) :: & - & tskin_ocn, tskin_lnd, tskin_ice, & - & tsurf_ocn, tsurf_lnd, tsurf_ice, & - & snowh_ocn, snowh_lnd, snowh_ice + & tskin_wat, tskin_lnd, tskin_ice, & + & tsurf_wat, tsurf_lnd, tsurf_ice, & + & snowh_wat, snowh_lnd, snowh_ice REAL, DIMENSION( ims:ime ), INTENT(inout) :: & - & ZNT_ocn, ZNT_lnd, ZNT_ice, & - & UST_ocn, UST_lnd, UST_ice, & - & cm_ocn, cm_lnd, cm_ice, & - & ch_ocn, ch_lnd, ch_ice, & - & rb_ocn, rb_lnd, rb_ice, & - & stress_ocn,stress_lnd,stress_ice, & - & psix_ocn, psix_lnd, psix_ice, & - & psit_ocn, psit_lnd, psit_ice, & - & psix10_ocn,psix10_lnd,psix10_ice, & - & psit2_ocn, psit2_lnd, psit2_ice, & - & HFLX_ocn, HFLX_lnd, HFLX_ice, & - & QFLX_ocn, QFLX_lnd, QFLX_ice, & - & qsfc_ocn, qsfc_lnd, qsfc_ice + & ZNT_wat, ZNT_lnd, ZNT_ice, & + & UST_wat, UST_lnd, UST_ice, & + & cm_wat, cm_lnd, cm_ice, & + & ch_wat, ch_lnd, ch_ice, & + & rb_wat, rb_lnd, rb_ice, & + & stress_wat,stress_lnd,stress_ice, & + & psix_wat, psix_lnd, psix_ice, & + & psit_wat, psit_lnd, psit_ice, & + & psix10_wat,psix10_lnd,psix10_ice, & + & psit2_wat, psit2_lnd, psit2_ice, & + & HFLX_wat, HFLX_lnd, HFLX_ice, & + & QFLX_wat, QFLX_lnd, QFLX_ice, & + & qsfc_wat, qsfc_lnd, qsfc_ice REAL, DIMENSION( its:ite ), INTENT(IN) :: rstoch1D @@ -632,27 +632,27 @@ SUBROUTINE SFCLAY1D_mynn( & PSFC, & !press at surface (Pa/1000) QSFCMR, & !qv at surface (mixing ratio, kg/kg) THCON, & !conversion from temp to theta - zratio_lnd, zratio_ice, zratio_ocn, & !z0/zt - TSK_lnd, TSK_ice, TSK_ocn, & !absolute temperature - THSK_lnd, THSK_ice, THSK_ocn, & !theta - THVSK_lnd, THVSK_ice, THVSK_ocn, & !theta-v - GZ1OZ0_lnd, GZ1OZ0_ice, GZ1OZ0_ocn, & !LOG((ZA(I)+ZNT(i))/ZNT(i)) - GZ1OZt_lnd, GZ1OZt_ice, GZ1OZt_ocn, & !LOG((ZA(I)+ZT(i))/ZT(i)) - GZ2OZ0_lnd, GZ2OZ0_ice, GZ2OZ0_ocn, & !LOG((2.0+ZNT(I))/ZNT(I)) - GZ2OZt_lnd, GZ2OZt_ice, GZ2OZt_ocn, & !LOG((2.0+ZT(I))/ZT(I)) - GZ10OZ0_lnd, GZ10OZ0_ice, GZ10OZ0_ocn, & !LOG((10.+ZNT(I))/ZNT(I)) - GZ10OZt_lnd, GZ10OZt_ice, GZ10OZt_ocn, & !LOG((10.+ZT(I))/ZT(I)) - ZNTstoch_lnd, ZNTstoch_ice, ZNTstoch_ocn, & - ZT_lnd, ZT_ice, ZT_ocn, & - ZQ_lnd, ZQ_ice, ZQ_ocn, & - PSIQ_lnd, PSIQ_ice, PSIQ_ocn, & - PSIQ2_lnd, PSIQ2_ice, PSIQ2_ocn, & - QSFCMR_lnd, QSFCMR_ice, QSFCMR_ocn + zratio_lnd, zratio_ice, zratio_wat, & !z0/zt + TSK_lnd, TSK_ice, TSK_wat, & !absolute temperature + THSK_lnd, THSK_ice, THSK_wat, & !theta + THVSK_lnd, THVSK_ice, THVSK_wat, & !theta-v + GZ1OZ0_lnd, GZ1OZ0_ice, GZ1OZ0_wat, & !LOG((ZA(I)+ZNT(i))/ZNT(i)) + GZ1OZt_lnd, GZ1OZt_ice, GZ1OZt_wat, & !LOG((ZA(I)+ZT(i))/ZT(i)) + GZ2OZ0_lnd, GZ2OZ0_ice, GZ2OZ0_wat, & !LOG((2.0+ZNT(I))/ZNT(I)) + GZ2OZt_lnd, GZ2OZt_ice, GZ2OZt_wat, & !LOG((2.0+ZT(I))/ZT(I)) + GZ10OZ0_lnd, GZ10OZ0_ice, GZ10OZ0_wat, & !LOG((10.+ZNT(I))/ZNT(I)) + GZ10OZt_lnd, GZ10OZt_ice, GZ10OZt_wat, & !LOG((10.+ZT(I))/ZT(I)) + ZNTstoch_lnd, ZNTstoch_ice, ZNTstoch_wat, & + ZT_lnd, ZT_ice, ZT_wat, & + ZQ_lnd, ZQ_ice, ZQ_wat, & + PSIQ_lnd, PSIQ_ice, PSIQ_wat, & + PSIQ2_lnd, PSIQ2_ice, PSIQ2_wat, & + QSFCMR_lnd, QSFCMR_ice, QSFCMR_wat INTEGER :: N,I,K,L,yesno REAL :: PL,E1,TABS - REAL :: WSPD_lnd, WSPD_ice, WSPD_ocn + REAL :: WSPD_lnd, WSPD_ice, WSPD_wat REAL :: DTHVDZ,DTHVM,VCONV,ZOL2,ZOL10,ZOLZA,ZOLZ0,ZOLZT REAL :: DTG,DTTHX,PSIQ,PSIQ2,PSIQ10,PSIT10 REAL :: FLUXC,VSGD @@ -676,9 +676,9 @@ SUBROUTINE SFCLAY1D_mynn( & " dz=",dz8w1d(i)," qflx=",qflx(i)," hflx=",hflx(i)," hpbl=",pblh(i) ENDIF IF (wet(i)) THEN - write(0,*)"wet=",wet(i)," pblh=",pblh(i)," tsk=", tskin_ocn(i),& - " tsurf=", tsurf_ocn(i)," qsfc=", qsfc_ocn(i)," znt=", znt_ocn(i),& - " ust=", ust_ocn(i)," snowh=", snowh_ocn(i),"psfcpa=",PSFCPA(i), & + write(0,*)"wet=",wet(i)," pblh=",pblh(i)," tsk=", tskin_wat(i),& + " tsurf=", tsurf_wat(i)," qsfc=", qsfc_wat(i)," znt=", znt_wat(i),& + " ust=", ust_wat(i)," snowh=", snowh_wat(i),"psfcpa=",PSFCPA(i), & " dz=",dz8w1d(i)," qflx=",qflx(i)," hflx=",hflx(i)," hpbl=",pblh(i) ENDIF ENDDO @@ -690,7 +690,7 @@ SUBROUTINE SFCLAY1D_mynn( & ! DEFINE SKIN TEMPERATURES FOR LAND/WATER/ICE TSK_lnd(I) = 0.5 * (tsurf_lnd(i)+tskin_lnd(i)) TSK_ice(I) = 0.5 * (tsurf_ice(i)+tskin_ice(i)) - TSK_ocn(I) = 0.5 * (tsurf_ocn(i)+tskin_ocn(i)) + TSK_wat(I) = 0.5 * (tsurf_wat(i)+tskin_wat(i)) QVSH(I)=QV1D(I)/(1.+QV1D(I)) !CONVERT TO SPEC HUM (kg/kg) THCON(I)=(100000./PSFCPA(I))**ROVCP ENDDO @@ -699,14 +699,14 @@ SUBROUTINE SFCLAY1D_mynn( & ! CONVERT SKIN TEMPERATURES TO POTENTIAL TEMPERATURE: THSK_lnd(I) = TSK_lnd(I)*THCON(I) !(K) THSK_ice(I) = TSK_ice(I)*THCON(I) !(K) - THSK_ocn(I) = TSK_ocn(I)*THCON(I) !(K) + THSK_wat(I) = TSK_wat(I)*THCON(I) !(K) ENDDO DO I=its,ite ! CONVERT SKIN POTENTIAL TEMPERATURES TO VIRTUAL POTENTIAL TEMPERATURE: THVSK_lnd(I) = THSK_lnd(I)*(1.+EP1*QVSH(I)) !(K) THVSK_ice(I) = THSK_ice(I)*(1.+EP1*QVSH(I)) !(K) - THVSK_ocn(I) = THSK_ocn(I)*(1.+EP1*QVSH(I)) !(K) + THVSK_wat(I) = THSK_wat(I)*(1.+EP1*QVSH(I)) !(K) ENDDO DO I=its,ite @@ -739,8 +739,8 @@ SUBROUTINE SFCLAY1D_mynn( & write(*,*)"=== derived quantities in mynn sfc layer, i:", i write(*,*)" land, ice, water" write(*,*)"dry=",dry(i)," icy=",icy(i)," wet=",wet(i) - write(*,*)"tsk=", tsk_lnd(i),tsk_ice(i),tsk_ocn(i) - write(*,*)"thvsk=", thvsk_lnd(i),thvsk_ice(i),thvsk_ocn(i) + write(*,*)"tsk=", tsk_lnd(i),tsk_ice(i),tsk_wat(i) + write(*,*)"thvsk=", thvsk_lnd(i),thvsk_ice(i),thvsk_wat(i) write(*,*)"THV1D=", THV1D(i)," TV1D=",TV1D(i) write(*,*)"RHO1D=", RHO1D(i)," GOVRTH=",GOVRTH(i) ENDDO @@ -750,16 +750,16 @@ SUBROUTINE SFCLAY1D_mynn( & IF (ITIMESTEP == 1) THEN IF (wet(i)) THEN - IF (TSK_ocn(I) .LT. 273.15) THEN + IF (TSK_wat(I) .LT. 273.15) THEN !SATURATION VAPOR PRESSURE WRT ICE (SVP1=.6112; 10*mb) - E1=SVP1*EXP(4648*(1./273.15 - 1./TSK_ocn(I)) - & - & 11.64*LOG(273.15/TSK_ocn(I)) + 0.02265*(273.15 - TSK_ocn(I))) + E1=SVP1*EXP(4648*(1./273.15 - 1./TSK_wat(I)) - & + & 11.64*LOG(273.15/TSK_wat(I)) + 0.02265*(273.15 - TSK_wat(I))) ELSE !SATURATION VAPOR PRESSURE WRT WATER (Bolton 1980) - E1=SVP1*EXP(SVP2*(TSK_ocn(I)-SVPT0)/(TSK_ocn(i)-SVP3)) + E1=SVP1*EXP(SVP2*(TSK_wat(I)-SVPT0)/(TSK_wat(i)-SVP3)) ENDIF - QSFC_ocn(I)=EP2*E1/(PSFC(I)-ep_3*E1) !specific humidity - QSFCMR_ocn(I)=EP2*E1/(PSFC(I)-E1) !mixing ratio + QSFC_wat(I)=EP2*E1/(PSFC(I)-ep_3*E1) !specific humidity + QSFCMR_wat(I)=EP2*E1/(PSFC(I)-E1) !mixing ratio ENDIF IF (dry(i)) THEN TABS = 0.5*(TSK_lnd(I) + T1D(I)) @@ -791,7 +791,7 @@ SUBROUTINE SFCLAY1D_mynn( & ELSE ! Use what comes out of the LSM, NST, and CICE - IF (wet(i)) QSFCMR_ocn(I)=QSFC_ocn(I)/(1.-QSFC_ocn(I)) + IF (wet(i)) QSFCMR_wat(I)=QSFC_wat(I)/(1.-QSFC_wat(I)) IF (dry(i)) QSFCMR_lnd(I)=QSFC_lnd(I)/(1.-QSFC_lnd(I)) IF (icy(i)) QSFCMR_ice(I)=QSFC_ice(I)/(1.-QSFC_ice(I)) @@ -818,7 +818,7 @@ SUBROUTINE SFCLAY1D_mynn( & DO I=its,ite if (wet(i)) then write(*,*)"==== q-bombs, i:",i," wet" - write(*,*)"QSFC_ocn=", QSFC_ocn(I)," QSFCMR_ocn=", QSFCMR_ocn(I)," QGH=",QGH(I) + write(*,*)"QSFC_wat=", QSFC_wat(I)," QSFCMR_wat=", QSFCMR_wat(I)," QGH=",QGH(I) endif if(dry(i)) then write(*,*)"==== q-bombs, i:",i," dry" @@ -837,39 +837,39 @@ SUBROUTINE SFCLAY1D_mynn( & ! by every user, the bug manifests itself in the resulting wind speed WSPD(I) ! being -99.0 despite the assignments in lines 932 and 933. *DH WSPD(I)=SQRT(U1D(I)*U1D(I)+V1D(I)*V1D(I)) - WSPD_ocn = -99. + WSPD_wat = -99. WSPD_ice = -99. WSPD_lnd = -99. IF (wet(i)) THEN - DTHVDZ=(THV1D(I)-THVSK_ocn(I)) + DTHVDZ=(THV1D(I)-THVSK_wat(I)) !-------------------------------------------------------- ! Calculate the convective velocity scale (WSTAR) and ! subgrid-scale velocity (VSGD) following Beljaars (1995, QJRMS) ! and Mahrt and Sun (1995, MWR), respectively !------------------------------------------------------- fluxc = max(hfx(i)/RHO1D(i)/cp & - & + ep1*THVSK_ocn(I)*qfx(i)/RHO1D(i),0.) + & + ep1*THVSK_wat(I)*qfx(i)/RHO1D(i),0.) !WSTAR(I) = vconvc*(g/TSK(i)*pblh(i)*fluxc)**onethird - WSTAR(I) = vconvc*(g/TSK_ocn(i)*pblh(i)*fluxc)**onethird + WSTAR(I) = vconvc*(g/TSK_wat(i)*pblh(i)*fluxc)**onethird !-------------------------------------------------------- ! Mahrt and Sun low-res correction - modified for water points (halved) ! (for 13 km ~ 0.18 m/s; for 3 km == 0 m/s) !-------------------------------------------------------- VSGD = MIN( 0.25 * (max(dx(i)/5000.-1.,0.))**onethird , 0.5) - WSPD_ocn=SQRT(WSPD(I)*WSPD(I)+WSTAR(I)*WSTAR(I)+vsgd*vsgd) - WSPD_ocn=MAX(WSPD_ocn,wmin) + WSPD_wat=SQRT(WSPD(I)*WSPD(I)+WSTAR(I)*WSTAR(I)+vsgd*vsgd) + WSPD_wat=MAX(WSPD_wat,wmin) !-------------------------------------------------------- ! CALCULATE THE BULK RICHARDSON NUMBER OF SURFACE LAYER, ! ACCORDING TO AKB(1976), EQ(12). !-------------------------------------------------------- - rb_ocn(I)=GOVRTH(I)*ZA(I)*DTHVDZ/(WSPD_ocn*WSPD_ocn) + rb_wat(I)=GOVRTH(I)*ZA(I)*DTHVDZ/(WSPD_wat*WSPD_wat) IF (ITIMESTEP == 1) THEN - rb_ocn(I)=MAX(rb_ocn(I),-2.0) - rb_ocn(I)=MIN(rb_ocn(I), 2.0) + rb_wat(I)=MAX(rb_wat(I),-2.0) + rb_wat(I)=MIN(rb_wat(I), 2.0) ELSE - rb_ocn(I)=MAX(rb_ocn(I),-4.0) - rb_ocn(I)=MIN(rb_ocn(I), 4.0) + rb_wat(I)=MAX(rb_wat(I),-4.0) + rb_wat(I)=MIN(rb_wat(I), 4.0) ENDIF ENDIF ! end water point @@ -948,7 +948,7 @@ SUBROUTINE SFCLAY1D_mynn( & ENDIF ! end ice point !NOW CONDENSE THE POSSIBLE WSPD VALUES BY TAKING THE MAXIMUM - WSPD(I) = MAX(WSPD_ice,WSPD_ocn) + WSPD(I) = MAX(WSPD_ice,WSPD_wat) WSPD(I) = MAX(WSPD_lnd,WSPD(I)) IF (debug_code == 2) THEN @@ -956,7 +956,7 @@ SUBROUTINE SFCLAY1D_mynn( & write(*,*)"ITIMESTEP=",ITIMESTEP write(*,*)"WSPD=", WSPD(I)," WSTAR=", WSTAR(I)," vsgd=",vsgd IF (icy(i))write(*,*)"rb_ice=", rb_ice(I)," DTHVDZ=",DTHVDZ - IF (wet(i))write(*,*)"rb_ocn=", rb_ocn(I)," DTHVDZ=",DTHVDZ + IF (wet(i))write(*,*)"rb_wat=", rb_wat(I)," DTHVDZ=",DTHVDZ IF (dry(i))write(*,*)"rb_lnd=", rb_lnd(I)," DTHVDZ=",DTHVDZ ENDIF @@ -992,118 +992,118 @@ SUBROUTINE SFCLAY1D_mynn( & !-------------------------------------- IF (debug_code == 2) THEN write(*,*)"=============Input to ZNT over water:" - write(*,*)"u*:",UST_ocn(i)," wspd=",WSPD(i)," visc=",visc," za=",ZA(I) + write(*,*)"u*:",UST_wat(i)," wspd=",WSPD(i)," visc=",visc," za=",ZA(I) ENDIF IF ( PRESENT(ISFTCFLX) ) THEN IF ( ISFTCFLX .EQ. 0 ) THEN IF (COARE_OPT .EQ. 3.0) THEN !COARE 3.0 (MISLEADING SUBROUTINE NAME) - CALL charnock_1955(ZNT_ocn(i),UST_ocn(i),WSPD(i),visc,ZA(I)) + CALL charnock_1955(ZNT_wat(i),UST_wat(i),WSPD(i),visc,ZA(I)) ELSE !COARE 3.5 - CALL edson_etal_2013(ZNT_ocn(i),UST_ocn(i),WSPD(i),visc,ZA(I)) + CALL edson_etal_2013(ZNT_wat(i),UST_wat(i),WSPD(i),visc,ZA(I)) ENDIF ELSEIF ( ISFTCFLX .EQ. 1 .OR. ISFTCFLX .EQ. 2 ) THEN - CALL davis_etal_2008(ZNT_ocn(i),UST_ocn(i)) + CALL davis_etal_2008(ZNT_wat(i),UST_wat(i)) ELSEIF ( ISFTCFLX .EQ. 3 ) THEN - CALL Taylor_Yelland_2001(ZNT_ocn(i),UST_ocn(i),WSPD(i)) + CALL Taylor_Yelland_2001(ZNT_wat(i),UST_wat(i),WSPD(i)) ELSEIF ( ISFTCFLX .EQ. 4 ) THEN !GFS surface layer scheme - CALL GFS_z0_ocn(ZNT_ocn(i),UST_ocn(i),WSPD(i),ZA(I),sfc_z0_type,redrag) + CALL GFS_z0_wat(ZNT_wat(i),UST_wat(i),WSPD(i),ZA(I),sfc_z0_type,redrag) ENDIF ELSE !DEFAULT TO COARE 3.0/3.5 IF (COARE_OPT .EQ. 3.0) THEN !COARE 3.0 - CALL charnock_1955(ZNT_ocn(i),UST_ocn(i),WSPD(i),visc,ZA(I)) + CALL charnock_1955(ZNT_wat(i),UST_wat(i),WSPD(i),visc,ZA(I)) ELSE !COARE 3.5 - CALL edson_etal_2013(ZNT_ocn(i),UST_ocn(i),WSPD(i),visc,ZA(I)) + CALL edson_etal_2013(ZNT_wat(i),UST_wat(i),WSPD(i),visc,ZA(I)) ENDIF ENDIF endif !-end wave model check ! add stochastic perturbation of ZNT if (spp_pbl==1) then - ZNTstoch_ocn(I) = MAX(ZNT_ocn(I) + ZNT_ocn(I)*1.0*rstoch1D(i), 1e-6) + ZNTstoch_wat(I) = MAX(ZNT_wat(I) + ZNT_wat(I)*1.0*rstoch1D(i), 1e-6) else - ZNTstoch_ocn(I) = ZNT_ocn(I) + ZNTstoch_wat(I) = ZNT_wat(I) endif IF (debug_code > 1) THEN write(*,*)"==========Output ZNT over water:" - write(*,*)"ZNT:",ZNTstoch_ocn(i) + write(*,*)"ZNT:",ZNTstoch_wat(i) ENDIF !COMPUTE ROUGHNESS REYNOLDS NUMBER (restar) USING NEW ZNT ! AHW: Garrattt formula: Calculate roughness Reynolds number ! Kinematic viscosity of air (linear approx to ! temp dependence at sea level) - restar=MAX(ust_ocn(i)*ZNTstoch_ocn(i)/visc, 0.1) + restar=MAX(ust_wat(i)*ZNTstoch_wat(i)/visc, 0.1) !-------------------------------------- !CALCULATE z_t and z_q !-------------------------------------- IF (debug_code > 1) THEN write(*,*)"=============Input to ZT over water:" - write(*,*)"u*:",UST_ocn(i)," restar=",restar," visc=",visc + write(*,*)"u*:",UST_wat(i)," restar=",restar," visc=",visc ENDIF IF ( PRESENT(ISFTCFLX) ) THEN IF ( ISFTCFLX .EQ. 0 ) THEN IF (COARE_OPT .EQ. 3.0) THEN - CALL fairall_etal_2003(ZT_ocn(i),ZQ_ocn(i),restar,UST_ocn(i),visc,& + CALL fairall_etal_2003(ZT_wat(i),ZQ_wat(i),restar,UST_wat(i),visc,& rstoch1D(i),spp_pbl) ELSE !presumably, this will be published soon, but hasn't yet - CALL fairall_etal_2014(ZT_ocn(i),ZQ_ocn(i),restar,UST_ocn(i),visc,& + CALL fairall_etal_2014(ZT_wat(i),ZQ_wat(i),restar,UST_wat(i),visc,& rstoch1D(i),spp_pbl) ENDIF ELSEIF ( ISFTCFLX .EQ. 1 ) THEN IF (COARE_OPT .EQ. 3.0) THEN - CALL fairall_etal_2003(ZT_ocn(i),ZQ_ocn(i),restar,UST_ocn(i),visc,& + CALL fairall_etal_2003(ZT_wat(i),ZQ_wat(i),restar,UST_wat(i),visc,& rstoch1D(i),spp_pbl) ELSE - CALL fairall_etal_2014(ZT_ocn(i),ZQ_ocn(i),restar,UST_ocn(i),visc,& + CALL fairall_etal_2014(ZT_wat(i),ZQ_wat(i),restar,UST_wat(i),visc,& rstoch1D(i),spp_pbl) ENDIF ELSEIF ( ISFTCFLX .EQ. 2 ) THEN - CALL garratt_1992(ZT_ocn(i),ZQ_ocn(i),ZNTstoch_ocn(i),restar,2.0) + CALL garratt_1992(ZT_wat(i),ZQ_wat(i),ZNTstoch_wat(i),restar,2.0) ELSEIF ( ISFTCFLX .EQ. 3 ) THEN IF (COARE_OPT .EQ. 3.0) THEN - CALL fairall_etal_2003(ZT_ocn(i),ZQ_ocn(i),restar,UST_ocn(i),visc,& + CALL fairall_etal_2003(ZT_wat(i),ZQ_wat(i),restar,UST_wat(i),visc,& rstoch1D(i),spp_pbl) ELSE - CALL fairall_etal_2014(ZT_ocn(i),ZQ_ocn(i),restar,UST_ocn(i),visc,& + CALL fairall_etal_2014(ZT_wat(i),ZQ_wat(i),restar,UST_wat(i),visc,& rstoch1D(i),spp_pbl) ENDIF ELSEIF ( ISFTCFLX .EQ. 4 ) THEN !GFS zt formulation - CALL GFS_zt_ocn(ZT_ocn(i),ZNTstoch_ocn(i),restar,WSPD(i),ZA(i),sfc_z0_type) - ZQ_ocn(i)=ZT_ocn(i) + CALL GFS_zt_wat(ZT_wat(i),ZNTstoch_wat(i),restar,WSPD(i),ZA(i),sfc_z0_type) + ZQ_wat(i)=ZT_wat(i) ENDIF ELSE !DEFAULT TO COARE 3.0/3.5 IF (COARE_OPT .EQ. 3.0) THEN - CALL fairall_etal_2003(ZT_ocn(i),ZQ_ocn(i),restar,UST_ocn(i),visc,& + CALL fairall_etal_2003(ZT_wat(i),ZQ_wat(i),restar,UST_wat(i),visc,& rstoch1D(i),spp_pbl) ELSE - CALL fairall_etal_2014(ZT_ocn(i),ZQ_ocn(i),restar,UST_ocn(i),visc,& + CALL fairall_etal_2014(ZT_wat(i),ZQ_wat(i),restar,UST_wat(i),visc,& rstoch1D(i),spp_pbl) ENDIF ENDIF IF (debug_code > 1) THEN write(*,*)"=============Output ZT & ZQ over water:" - write(*,*)"ZT:",ZT_ocn(i)," ZQ:",ZQ_ocn(i) + write(*,*)"ZT:",ZT_wat(i)," ZQ:",ZQ_wat(i) ENDIF - GZ1OZ0_ocn(I)= LOG((ZA(I)+ZNTstoch_ocn(I))/ZNTstoch_ocn(I)) - GZ1OZt_ocn(I)= LOG((ZA(I)+ZNTstoch_ocn(i))/ZT_ocn(i)) - GZ2OZ0_ocn(I)= LOG((2.0+ZNTstoch_ocn(I))/ZNTstoch_ocn(I)) - GZ2OZt_ocn(I)= LOG((2.0+ZNTstoch_ocn(i))/ZT_ocn(i)) - GZ10OZ0_ocn(I)=LOG((10.+ZNTstoch_ocn(I))/ZNTstoch_ocn(I)) - GZ10OZt_ocn(I)=LOG((10.+ZNTstoch_ocn(i))/ZT_ocn(i)) - zratio_ocn(i)=ZNTstoch_ocn(I)/ZT_ocn(I) !need estimate for Li et al. + GZ1OZ0_wat(I)= LOG((ZA(I)+ZNTstoch_wat(I))/ZNTstoch_wat(I)) + GZ1OZt_wat(I)= LOG((ZA(I)+ZNTstoch_wat(i))/ZT_wat(i)) + GZ2OZ0_wat(I)= LOG((2.0+ZNTstoch_wat(I))/ZNTstoch_wat(I)) + GZ2OZt_wat(I)= LOG((2.0+ZNTstoch_wat(i))/ZT_wat(i)) + GZ10OZ0_wat(I)=LOG((10.+ZNTstoch_wat(I))/ZNTstoch_wat(I)) + GZ10OZt_wat(I)=LOG((10.+ZNTstoch_wat(i))/ZT_wat(i)) + zratio_wat(i)=ZNTstoch_wat(I)/ZT_wat(I) !need estimate for Li et al. ENDIF !end water point @@ -1197,7 +1197,7 @@ SUBROUTINE SFCLAY1D_mynn( & IF (dry(i)) THEN ZNT(i)=ZNTstoch_lnd(I) ELSEIF (wet(i)) THEN - ZNT(i)=ZNTstoch_ocn(I) + ZNT(i)=ZNTstoch_wat(I) ELSEIF (icy(i)) THEN ZNT(i)=ZNTstoch_ice(I) ENDIF @@ -1208,43 +1208,43 @@ SUBROUTINE SFCLAY1D_mynn( & !-------------------------------------------------------------------- IF (wet(i)) THEN - IF (rb_ocn(I) .GT. 0.0) THEN + IF (rb_wat(I) .GT. 0.0) THEN !COMPUTE z/L first guess: - CALL Li_etal_2010(ZOL(I),rb_ocn(I),ZA(I)/ZNTstoch_ocn(I),zratio_ocn(I)) - !ZOL(I)=ZA(I)*KARMAN*G*MOL(I)/(TH1D(I)*MAX(UST_ocn(I)*UST_ocn(I),0.0001)) + CALL Li_etal_2010(ZOL(I),rb_wat(I),ZA(I)/ZNTstoch_wat(I),zratio_wat(I)) + !ZOL(I)=ZA(I)*KARMAN*G*MOL(I)/(TH1D(I)*MAX(UST_wat(I)*UST_wat(I),0.0001)) ZOL(I)=MAX(ZOL(I),0.0) ZOL(I)=MIN(ZOL(I),20.) IF (debug_code >= 1) THEN - IF (ZNTstoch_ocn(i) < 1E-8 .OR. Zt_ocn(i) < 1E-10) THEN + IF (ZNTstoch_wat(i) < 1E-8 .OR. Zt_wat(i) < 1E-10) THEN write(0,*)"===(wet) capture bad input in mynn sfc layer, i=:",i - write(0,*)"rb=", rb_ocn(I)," ZNT=", ZNTstoch_ocn(i)," ZT=",Zt_ocn(i) - write(0,*)" tsk=", tskin_ocn(i)," prev z/L=",ZOL(I),& - " tsurf=", tsurf_ocn(i)," qsfc=", qsfc_ocn(i)," znt=", znt_ocn(i),& - " ust=", ust_ocn(i)," snowh=", snowh_ocn(i),"psfcpa=",PSFCPA(i), & + write(0,*)"rb=", rb_wat(I)," ZNT=", ZNTstoch_wat(i)," ZT=",Zt_wat(i) + write(0,*)" tsk=", tskin_wat(i)," prev z/L=",ZOL(I),& + " tsurf=", tsurf_wat(i)," qsfc=", qsfc_wat(i)," znt=", znt_wat(i),& + " ust=", ust_wat(i)," snowh=", snowh_wat(i),"psfcpa=",PSFCPA(i), & " dz=",dz8w1d(i)," qflx=",qflx(i)," hflx=",hflx(i)," hpbl=",pblh(i) ENDIF ENDIF !Use Pedros iterative function to find z/L - !zol(I)=zolri(rb_ocn(I),ZA(I),ZNTstoch_ocn(I),ZT_ocn(I),ZOL(I),psi_opt) + !zol(I)=zolri(rb_wat(I),ZA(I),ZNTstoch_wat(I),ZT_wat(I),ZOL(I),psi_opt) !Use brute-force method - zol(I)=zolrib(rb_ocn(I),ZA(I),ZNTstoch_ocn(I),zt_ocn(I),GZ1OZ0_ocn(I),GZ1OZt_ocn(I),ZOL(I),psi_opt) + zol(I)=zolrib(rb_wat(I),ZA(I),ZNTstoch_wat(I),zt_wat(I),GZ1OZ0_wat(I),GZ1OZt_wat(I),ZOL(I),psi_opt) ZOL(I)=MAX(ZOL(I),0.0) ZOL(I)=MIN(ZOL(I),20.) - zolzt = zol(I)*zt_ocn(I)/ZA(I) ! zt/L - zolz0 = zol(I)*ZNTstoch_ocn(I)/ZA(I) ! z0/L - zolza = zol(I)*(za(I)+ZNTstoch_ocn(I))/za(I) ! (z+z0/L - zol10 = zol(I)*(10.+ZNTstoch_ocn(I))/za(I) ! (10+z0)/L - zol2 = zol(I)*(2.+ZNTstoch_ocn(I))/za(I) ! (2+z0)/L + zolzt = zol(I)*zt_wat(I)/ZA(I) ! zt/L + zolz0 = zol(I)*ZNTstoch_wat(I)/ZA(I) ! z0/L + zolza = zol(I)*(za(I)+ZNTstoch_wat(I))/za(I) ! (z+z0/L + zol10 = zol(I)*(10.+ZNTstoch_wat(I))/za(I) ! (10+z0)/L + zol2 = zol(I)*(2.+ZNTstoch_wat(I))/za(I) ! (2+z0)/L !COMPUTE PSIM and PSIH !CALL PSI_Suselj_Sood_2010(PSIM(I),PSIH(I),ZOL(I)) !CALL PSI_Beljaars_Holtslag_1991(PSIM(I),PSIH(I),ZOL(I)) !CALL PSI_Businger_1971(PSIM(I),PSIH(I),ZOL(I)) - !CALL PSI_DyerHicks(PSIM(I),PSIH(I),ZOL(I),ZT_ocn(I),ZNTstoch_ocn(I),ZA(I)) + !CALL PSI_DyerHicks(PSIM(I),PSIH(I),ZOL(I),ZT_wat(I),ZNTstoch_wat(I),ZA(I)) !CALL PSI_CB2005(PSIM(I),PSIH(I),zolza,zolz0) ! or use tables psim(I)=psim_stable(zolza,psi_opt)-psim_stable(zolz0,psi_opt) @@ -1256,7 +1256,7 @@ SUBROUTINE SFCLAY1D_mynn( & ! 1.0 over Monin-Obukhov length RMOL(I)= ZOL(I)/ZA(I) - ELSEIF(rb_ocn(I) .EQ. 0.) THEN + ELSEIF(rb_wat(I) .EQ. 0.) THEN !========================================================= !-----CLASS 3; FORCED CONVECTION/NEUTRAL: !========================================================= @@ -1270,46 +1270,46 @@ SUBROUTINE SFCLAY1D_mynn( & ZOL(I) =0. RMOL(I) =0. - ELSEIF(rb_ocn(I) .LT. 0.)THEN + ELSEIF(rb_wat(I) .LT. 0.)THEN !========================================================== !-----CLASS 4; FREE CONVECTION: !========================================================== !COMPUTE z/L first guess: - CALL Li_etal_2010(ZOL(I),rb_ocn(I),ZA(I)/ZNTstoch_ocn(I),zratio_ocn(I)) - !ZOL(I)=ZA(I)*KARMAN*G*MOL(I)/(TH1D(I)*MAX(UST_ocn(I)*UST_ocn(I),0.001)) + CALL Li_etal_2010(ZOL(I),rb_wat(I),ZA(I)/ZNTstoch_wat(I),zratio_wat(I)) + !ZOL(I)=ZA(I)*KARMAN*G*MOL(I)/(TH1D(I)*MAX(UST_wat(I)*UST_wat(I),0.001)) ZOL(I)=MAX(ZOL(I),-20.0) ZOL(I)=MIN(ZOL(I),0.0) IF (debug_code >= 1) THEN - IF (ZNTstoch_ocn(i) < 1E-8 .OR. Zt_ocn(i) < 1E-10) THEN + IF (ZNTstoch_wat(i) < 1E-8 .OR. Zt_wat(i) < 1E-10) THEN write(0,*)"===(wet) capture bad input in mynn sfc layer, i=:",i - write(0,*)"rb=", rb_ocn(I)," ZNT=", ZNTstoch_ocn(i)," ZT=",Zt_ocn(i) - write(0,*)" tsk=", tskin_ocn(i)," wstar=",wstar(i)," prev z/L=",ZOL(I),& - " tsurf=", tsurf_ocn(i)," qsfc=", qsfc_ocn(i)," znt=", znt_ocn(i),& - " ust=", ust_ocn(i)," snowh=", snowh_ocn(i),"psfcpa=",PSFCPA(i), & + write(0,*)"rb=", rb_wat(I)," ZNT=", ZNTstoch_wat(i)," ZT=",Zt_wat(i) + write(0,*)" tsk=", tskin_wat(i)," wstar=",wstar(i)," prev z/L=",ZOL(I),& + " tsurf=", tsurf_wat(i)," qsfc=", qsfc_wat(i)," znt=", znt_wat(i),& + " ust=", ust_wat(i)," snowh=", snowh_wat(i),"psfcpa=",PSFCPA(i), & " dz=",dz8w1d(i)," qflx=",qflx(i)," hflx=",hflx(i)," hpbl=",pblh(i) ENDIF ENDIF !Use Pedros iterative function to find z/L - !zol(I)=zolri(rb_ocn(I),ZA(I),ZNTstoch_ocn(I),ZT_ocn(I),ZOL(I),psi_opt) + !zol(I)=zolri(rb_wat(I),ZA(I),ZNTstoch_wat(I),ZT_wat(I),ZOL(I),psi_opt) !Use brute-force method - zol(I)=zolrib(rb_ocn(I),ZA(I),ZNTstoch_ocn(I),zt_ocn(I),GZ1OZ0_ocn(I),GZ1OZt_ocn(I),ZOL(I),psi_opt) + zol(I)=zolrib(rb_wat(I),ZA(I),ZNTstoch_wat(I),zt_wat(I),GZ1OZ0_wat(I),GZ1OZt_wat(I),ZOL(I),psi_opt) ZOL(I)=MAX(ZOL(I),-20.0) ZOL(I)=MIN(ZOL(I),0.0) - zolzt = zol(I)*zt_ocn(I)/ZA(I) ! zt/L - zolz0 = zol(I)*ZNTstoch_ocn(I)/ZA(I) ! z0/L - zolza = zol(I)*(za(I)+ZNTstoch_ocn(I))/za(I) ! (z+z0/L - zol10 = zol(I)*(10.+ZNTstoch_ocn(I))/za(I) ! (10+z0)/L - zol2 = zol(I)*(2.+ZNTstoch_ocn(I))/za(I) ! (2+z0)/L + zolzt = zol(I)*zt_wat(I)/ZA(I) ! zt/L + zolz0 = zol(I)*ZNTstoch_wat(I)/ZA(I) ! z0/L + zolza = zol(I)*(za(I)+ZNTstoch_wat(I))/za(I) ! (z+z0/L + zol10 = zol(I)*(10.+ZNTstoch_wat(I))/za(I) ! (10+z0)/L + zol2 = zol(I)*(2.+ZNTstoch_wat(I))/za(I) ! (2+z0)/L !COMPUTE PSIM and PSIH !CALL PSI_Suselj_Sood_2010(PSIM(I),PSIH(I),ZOL(I)) - !CALL PSI_Hogstrom_1996(PSIM(I),PSIH(I),ZOL(I), ZT_ocn(I), ZNTstoch_ocn(I), ZA(I)) + !CALL PSI_Hogstrom_1996(PSIM(I),PSIH(I),ZOL(I), ZT_wat(I), ZNTstoch_wat(I), ZA(I)) !CALL PSI_Businger_1971(PSIM(I),PSIH(I),ZOL(I)) - !CALL PSI_DyerHicks(PSIM(I),PSIH(I),ZOL(I),ZT_ocn(I),ZNTstoch_ocn(I),ZA(I)) + !CALL PSI_DyerHicks(PSIM(I),PSIH(I),ZOL(I),ZT_wat(I),ZNTstoch_wat(I),ZA(I)) ! use tables psim(I)=psim_unstable(zolza,psi_opt)-psim_unstable(zolz0,psi_opt) psih(I)=psih_unstable(zolza,psi_opt)-psih_unstable(zolzt,psi_opt) @@ -1320,23 +1320,23 @@ SUBROUTINE SFCLAY1D_mynn( & !---LIMIT PSIH AND PSIM IN THE CASE OF THIN LAYERS AND !---HIGH ROUGHNESS. THIS PREVENTS DENOMINATOR IN FLUXES !---FROM GETTING TOO SMALL - PSIH(I)=MIN(PSIH(I),0.9*GZ1OZt_ocn(I)) - PSIM(I)=MIN(PSIM(I),0.9*GZ1OZ0_ocn(I)) - PSIH2(I)=MIN(PSIH2(I),0.9*GZ2OZt_ocn(I)) - PSIM10(I)=MIN(PSIM10(I),0.9*GZ10OZ0_ocn(I)) - PSIH10(I)=MIN(PSIH10(I),0.9*GZ10OZt_ocn(I)) + PSIH(I)=MIN(PSIH(I),0.9*GZ1OZt_wat(I)) + PSIM(I)=MIN(PSIM(I),0.9*GZ1OZ0_wat(I)) + PSIH2(I)=MIN(PSIH2(I),0.9*GZ2OZt_wat(I)) + PSIM10(I)=MIN(PSIM10(I),0.9*GZ10OZ0_wat(I)) + PSIH10(I)=MIN(PSIH10(I),0.9*GZ10OZt_wat(I)) RMOL(I) = ZOL(I)/ZA(I) ENDIF ! CALCULATE THE RESISTANCE: - PSIX_ocn(I) =MAX(GZ1OZ0_ocn(I)-PSIM(I) , 1.0) ! = fm - PSIX10_ocn(I)=MAX(GZ10OZ0_ocn(I)-PSIM10(I), 1.0) ! = fm10 - PSIT_ocn(I) =MAX(GZ1OZt_ocn(I)-PSIH(I) , 1.0) ! = fh - PSIT2_ocn(I) =MAX(GZ2OZt_ocn(I)-PSIH2(I) , 1.0) ! = fh2 - PSIQ_ocn(I) =MAX(LOG((ZA(I)+ZQ_ocn(i))/ZQ_ocn(I))-PSIH(I) ,1.0) - PSIQ2_ocn(I) =MAX(LOG((2.0+ZQ_ocn(i))/ZQ_ocn(I))-PSIH2(I) ,1.0) + PSIX_wat(I) =MAX(GZ1OZ0_wat(I)-PSIM(I) , 1.0) ! = fm + PSIX10_wat(I)=MAX(GZ10OZ0_wat(I)-PSIM10(I), 1.0) ! = fm10 + PSIT_wat(I) =MAX(GZ1OZt_wat(I)-PSIH(I) , 1.0) ! = fh + PSIT2_wat(I) =MAX(GZ2OZt_wat(I)-PSIH2(I) , 1.0) ! = fh2 + PSIQ_wat(I) =MAX(LOG((ZA(I)+ZQ_wat(i))/ZQ_wat(I))-PSIH(I) ,1.0) + PSIQ2_wat(I) =MAX(LOG((2.0+ZQ_wat(i))/ZQ_wat(I))-PSIH2(I) ,1.0) ENDIF ! end water points @@ -1608,18 +1608,18 @@ SUBROUTINE SFCLAY1D_mynn( & IF (wet(I)) THEN ! TO PREVENT OSCILLATIONS AVERAGE WITH OLD VALUE - OLDUST = UST_ocn(I) - UST_ocn(I)=0.5*UST_ocn(I)+0.5*KARMAN*WSPD(I)/PSIX_ocn(I) + OLDUST = UST_wat(I) + UST_wat(I)=0.5*UST_wat(I)+0.5*KARMAN*WSPD(I)/PSIX_wat(I) !NON-AVERAGED: - !UST_ocn(I)=KARMAN*WSPD(I)/PSIX_ocn(I) - stress_ocn(i)=ust_ocn(i)**2 + !UST_wat(I)=KARMAN*WSPD(I)/PSIX_wat(I) + stress_wat(i)=ust_wat(i)**2 ! Compute u* without vconv for use in HFX calc when isftcflx > 0 WSPDI(I)=MAX(SQRT(U1D(I)*U1D(I)+V1D(I)*V1D(I)), wmin) - USTM(I)=0.5*USTM(I)+0.5*KARMAN*WSPDI(I)/PSIX_ocn(I) + USTM(I)=0.5*USTM(I)+0.5*KARMAN*WSPDI(I)/PSIX_wat(I) ! for possible future changes in sea-ice fraction from 0 to >0: - if (.not. icy(i)) ust_ice(i)=ust_ocn(i) + if (.not. icy(i)) ust_ice(i)=ust_wat(i) ENDIF ! end water points IF (dry(I)) THEN @@ -1654,7 +1654,7 @@ SUBROUTINE SFCLAY1D_mynn( & USTM(I)=UST_ice(I) ! for possible future changes in sea-ice fraction from 1 to <1: - if (.not. wet(i)) ust_ocn(i)=ust_ice(i) + if (.not. wet(i)) ust_wat(i)=ust_ice(i) ENDIF ! end ice points !---------------------------------------------------- @@ -1663,14 +1663,14 @@ SUBROUTINE SFCLAY1D_mynn( & !---------------------------------------------------- IF (wet(I)) THEN - DTG=THV1D(I)-THVSK_ocn(I) + DTG=THV1D(I)-THVSK_wat(I) OLDTST=MOL(I) - MOL(I)=KARMAN*DTG/PSIT_ocn(I)/PRT + MOL(I)=KARMAN*DTG/PSIT_wat(I)/PRT !t_star(I) = -HFX(I)/(UST(I)*CPM(I)*RHO1D(I)) !t_star(I) = MOL(I) !---------------------------------------------------- - DQG=(QVSH(i)-qsfc_ocn(i))*1000. !(kg/kg -> g/kg) - qstar(I)=KARMAN*DQG/PSIQ_ocn(I)/PRT + DQG=(QVSH(i)-qsfc_wat(i))*1000. !(kg/kg -> g/kg) + qstar(I)=KARMAN*DQG/PSIQ_wat(I)/PRT ENDIF IF (dry(I)) THEN @@ -1704,13 +1704,13 @@ SUBROUTINE SFCLAY1D_mynn( & IF(icy(i))write(*,*)"==== AT END OF MAIN LOOP, i=",i, "(ice)" write(*,*)"z/L:",ZOL(I)," wspd:",wspd(I)," Tstar:",MOL(I) IF(wet(i))write(*,*)"PSIM:",PSIM(I)," PSIH:",PSIH(I)," W*:",WSTAR(I),& - " DTHV:",THV1D(I)-THVSK_ocn(I) + " DTHV:",THV1D(I)-THVSK_wat(I) IF(dry(i))write(*,*)"PSIM:",PSIM(I)," PSIH:",PSIH(I)," W*:",WSTAR(I),& " DTHV:",THV1D(I)-THVSK_lnd(I) IF(icy(i))write(*,*)"PSIM:",PSIM(I)," PSIH:",PSIH(I)," W*:",WSTAR(I),& " DTHV:",THV1D(I)-THVSK_ice(i) write(*,*)"CPM:",CPM(I)," RHO1D:",RHO1D(I)," q*:",qstar(I)," T*:",MOL(I) - IF(wet(i))write(*,*)"U*:",UST_ocn(I)," Z0:",ZNTstoch_ocn(I)," Zt:",zt_ocn(I) + IF(wet(i))write(*,*)"U*:",UST_wat(I)," Z0:",ZNTstoch_wat(I)," Zt:",zt_wat(I) IF(dry(i))write(*,*)"U*:",UST_lnd(I)," Z0:",ZNTstoch_lnd(I)," Zt:",zt_lnd(I) IF(icy(i))write(*,*)"U*:",UST_ice(I)," Z0:",ZNTstoch_ice(I)," Zt:",zt_ice(I) write(*,*)"hfx:",HFX(I)," MAVAIL:",MAVAIL(I)," QVSH(I):",QVSH(I) @@ -1735,8 +1735,8 @@ SUBROUTINE SFCLAY1D_mynn( & CH(I) = 0. CHS2(i) = 0. CQS2(i) = 0. - ch_ocn(I)= 0. - cm_ocn(I)= 0. + ch_wat(I)= 0. + cm_wat(I)= 0. ch_lnd(I)= 0. cm_lnd(I)= 0. ch_ice(I)= 0. @@ -1792,25 +1792,25 @@ SUBROUTINE SFCLAY1D_mynn( & ! CALCULATE THE EXCHANGE COEFFICIENTS FOR HEAT (FLHC) ! AND MOISTURE (FLQC) !------------------------------------------ - FLQC(I)=RHO1D(I)*MAVAIL(I)*UST_ocn(I)*KARMAN/PSIQ_ocn(i) - FLHC(I)=RHO1D(I)*CPM(I)*UST_ocn(I)*KARMAN/PSIT_ocn(I) + FLQC(I)=RHO1D(I)*MAVAIL(I)*UST_wat(I)*KARMAN/PSIQ_wat(i) + FLHC(I)=RHO1D(I)*CPM(I)*UST_wat(I)*KARMAN/PSIT_wat(I) IF (compute_flux) THEN !---------------------------------- ! COMPUTE SURFACE MOISTURE FLUX: !---------------------------------- - !QFX(I)=FLQC(I)*(QSFCMR_ocn(I)-QV1D(I)) - QFX(I)=FLQC(I)*(QSFC_ocn(I)-QV1D(I)) + !QFX(I)=FLQC(I)*(QSFCMR_wat(I)-QV1D(I)) + QFX(I)=FLQC(I)*(QSFC_wat(I)-QV1D(I)) QFX(I)=MAX(QFX(I),-0.02) !allows small neg QFX LH(I)=XLV*QFX(I) ! BWG, 2020-06-17: Mod next 2 lines for fractional - QFLX_ocn(i)=QFX(i)/RHO1D(i) - QFLX(i)=QFLX_ocn(i) + QFLX_wat(i)=QFX(i)/RHO1D(i) + QFLX(i)=QFLX_wat(i) !---------------------------------- ! COMPUTE SURFACE HEAT FLUX: !---------------------------------- - HFX(I)=FLHC(I)*(THSK_ocn(I)-TH1D(I)) + HFX(I)=FLHC(I)*(THSK_wat(I)-TH1D(I)) IF ( PRESENT(ISFTCFLX) ) THEN IF ( ISFTCFLX.NE.0 ) THEN ! AHW: add dissipative heating term @@ -1818,20 +1818,20 @@ SUBROUTINE SFCLAY1D_mynn( & ENDIF ENDIF ! BWG, 2020-06-17: Mod next 2 lines for fractional - HFLX_ocn(I)=HFX(I)/(RHO1D(I)*cpm(I)) - HFLX(I)=HFLX_ocn(I) + HFLX_wat(I)=HFX(I)/(RHO1D(I)*cpm(I)) + HFLX(I)=HFLX_wat(I) ENDIF !TRANSFER COEFF FOR SOME LSMs: !CHS(I)=UST(I)*KARMAN/(ALOG(KARMAN*UST(I)*ZA(I) & ! /XKA+ZA(I)/ZL)-PSIH(I)) - CHS(I)=UST_ocn(I)*KARMAN/PSIT_ocn(I) + CHS(I)=UST_wat(I)*KARMAN/PSIT_wat(I) !THESE ARE USED FOR 2-M DIAGNOSTICS ONLY - CQS2(I)=UST_ocn(I)*KARMAN/PSIQ2_ocn(i) - CHS2(I)=UST_ocn(I)*KARMAN/PSIT2_ocn(I) + CQS2(I)=UST_wat(I)*KARMAN/PSIQ2_wat(i) + CHS2(I)=UST_wat(I)*KARMAN/PSIT2_wat(I) - QSFC(I)=QSFC_ocn(I) + QSFC(I)=QSFC_wat(I) ELSEIF (icy(i)) THEN @@ -1881,7 +1881,7 @@ SUBROUTINE SFCLAY1D_mynn( & write(*,*)"QFX=",QFX(I),"FLQC=",FLQC(I) if(icy(i))write(*,*)"ice, MAVAIL:",MAVAIL(I)," u*=",UST_ice(I)," psiq=",PSIQ_ice(i) if(dry(i))write(*,*)"lnd, MAVAIL:",MAVAIL(I)," u*=",UST_lnd(I)," psiq=",PSIQ_lnd(i) - if(wet(i))write(*,*)"ocn, MAVAIL:",MAVAIL(I)," u*=",UST_ocn(I)," psiq=",PSIQ_ocn(i) + if(wet(i))write(*,*)"ocn, MAVAIL:",MAVAIL(I)," u*=",UST_wat(I)," psiq=",PSIQ_wat(i) ENDIF ! The exchange coefficient for cloud water is assumed to be the @@ -1892,8 +1892,8 @@ SUBROUTINE SFCLAY1D_mynn( & !--- COMPUTE EXCHANGE COEFFICIENTS FOR FV3 !----------------------------------------- IF (wet(i)) THEN - ch_ocn(I)=(karman/psix_ocn(I))*(karman/psit_ocn(i)) - cm_ocn(I)=(karman/psix_ocn(I))*(karman/psix_ocn(I)) + ch_wat(I)=(karman/psix_wat(I))*(karman/psit_wat(i)) + cm_wat(I)=(karman/psix_wat(I))*(karman/psix_wat(I)) ENDIF IF (dry(i)) THEN ch_lnd(I)=(karman/psix_lnd(I))*(karman/psit_lnd(i)) @@ -1930,8 +1930,8 @@ SUBROUTINE SFCLAY1D_mynn( & U10(I)=U1D(I)*log(10./ZNTstoch_lnd(I))/log(ZA(I)/ZNTstoch_lnd(I)) V10(I)=V1D(I)*log(10./ZNTstoch_lnd(I))/log(ZA(I)/ZNTstoch_lnd(I)) ELSEIF (wet(i)) THEN - U10(I)=U1D(I)*log(10./ZNTstoch_ocn(I))/log(ZA(I)/ZNTstoch_ocn(I)) - V10(I)=V1D(I)*log(10./ZNTstoch_ocn(I))/log(ZA(I)/ZNTstoch_ocn(I)) + U10(I)=U1D(I)*log(10./ZNTstoch_wat(I))/log(ZA(I)/ZNTstoch_wat(I)) + V10(I)=V1D(I)*log(10./ZNTstoch_wat(I))/log(ZA(I)/ZNTstoch_wat(I)) ELSEIF (icy(i)) THEN U10(I)=U1D(I)*log(10./ZNTstoch_ice(I))/log(ZA(I)/ZNTstoch_ice(I)) V10(I)=V1D(I)*log(10./ZNTstoch_ice(I))/log(ZA(I)/ZNTstoch_ice(I)) @@ -1946,8 +1946,8 @@ SUBROUTINE SFCLAY1D_mynn( & U10(I)=U1D(I)*log(10./ZNTstoch_lnd(I))/log(ZA(I)/ZNTstoch_lnd(I)) V10(I)=V1D(I)*log(10./ZNTstoch_lnd(I))/log(ZA(I)/ZNTstoch_lnd(I)) ELSEIF (wet(i)) THEN - U10(I)=U1D(I)*log(10./ZNTstoch_ocn(I))/log(ZA(I)/ZNTstoch_ocn(I)) - V10(I)=V1D(I)*log(10./ZNTstoch_ocn(I))/log(ZA(I)/ZNTstoch_ocn(I)) + U10(I)=U1D(I)*log(10./ZNTstoch_wat(I))/log(ZA(I)/ZNTstoch_wat(I)) + V10(I)=V1D(I)*log(10./ZNTstoch_wat(I))/log(ZA(I)/ZNTstoch_wat(I)) ELSEIF (icy(i)) THEN U10(I)=U1D(I)*log(10./ZNTstoch_ice(I))/log(ZA(I)/ZNTstoch_ice(I)) V10(I)=V1D(I)*log(10./ZNTstoch_ice(I))/log(ZA(I)/ZNTstoch_ice(I)) @@ -1958,8 +1958,8 @@ SUBROUTINE SFCLAY1D_mynn( & U10(I)=U1D(I)*PSIX10_lnd(I)/PSIX_lnd(I) V10(I)=V1D(I)*PSIX10_lnd(I)/PSIX_lnd(I) ELSEIF (wet(i)) THEN - U10(I)=U1D(I)*PSIX10_ocn(I)/PSIX_ocn(I) - V10(I)=V1D(I)*PSIX10_ocn(I)/PSIX_ocn(I) + U10(I)=U1D(I)*PSIX10_wat(I)/PSIX_wat(I) + V10(I)=V1D(I)*PSIX10_wat(I)/PSIX_wat(I) ELSEIF (icy(i)) THEN U10(I)=U1D(I)*PSIX10_ice(I)/PSIX_ice(I) V10(I)=V1D(I)*PSIX10_ice(I)/PSIX_ice(I) @@ -1985,18 +1985,18 @@ SUBROUTINE SFCLAY1D_mynn( & Q2(I)= MAX(Q2(I), MIN(QSFC_lnd(I), QV1D(I))) Q2(I)= MIN(Q2(I), 1.05*QV1D(I)) ELSEIF (wet(i)) THEN - DTG=TH1D(I)-THSK_ocn(I) - TH2(I)=THSK_ocn(I)+DTG*PSIT2_ocn(I)/PSIT_ocn(I) + DTG=TH1D(I)-THSK_wat(I) + TH2(I)=THSK_wat(I)+DTG*PSIT2_wat(I)/PSIT_wat(I) !*** BE CERTAIN THAT THE 2-M THETA IS BRACKETED BY !*** THE VALUES AT THE SURFACE AND LOWEST MODEL LEVEL. - IF ((TH1D(I)>THSK_ocn(I) .AND. (TH2(I)TH1D(I))) .OR. & - (TH1D(I)THSK_ocn(I) .OR. TH2(I)THSK_wat(I) .AND. (TH2(I)TH1D(I))) .OR. & + (TH1D(I)THSK_wat(I) .OR. TH2(I) 4.0 )THEN + IF (UST_wat(I) < 0.0 .OR. UST_wat(I) > 4.0 )THEN print*,"SUSPICIOUS VALUES IN MYNN SFCLAYER",& - I,J, "UST_ocn: ",UST_ocn(I) + I,J, "UST_wat: ",UST_wat(I) yesno = 1 ENDIF ENDIF @@ -2081,15 +2081,15 @@ SUBROUTINE SFCLAY1D_mynn( & IF (yesno == 1) THEN IF (wet(i)) THEN print*," OTHER INFO over water:" - print*,"z/L:",ZOL(I)," U*:",UST_ocn(I)," Tstar:",MOL(I) + print*,"z/L:",ZOL(I)," U*:",UST_wat(I)," Tstar:",MOL(I) print*,"PSIM:",PSIM(I)," PSIH:",PSIH(I)," W*:",WSTAR(I),& - " DTHV:",THV1D(I)-THVSK_ocn(I) + " DTHV:",THV1D(I)-THVSK_wat(I) print*,"CPM:",CPM(I)," RHO1D:",RHO1D(I)," L:",& - ZOL(I)/ZA(I)," DTH:",TH1D(I)-THSK_ocn(I) - print*," Z0:",ZNTstoch_ocn(I)," Zt:",ZT_ocn(I)," za:",za(I) - print*,"MAVAIL:",MAVAIL(I)," QSFC_ocn(I):",& - QSFC_ocn(I)," QVSH(I):",QVSH(I) - print*,"PSIX=",PSIX_ocn(I)," T1D(i):",T1D(i) + ZOL(I)/ZA(I)," DTH:",TH1D(I)-THSK_wat(I) + print*," Z0:",ZNTstoch_wat(I)," Zt:",ZT_wat(I)," za:",za(I) + print*,"MAVAIL:",MAVAIL(I)," QSFC_wat(I):",& + QSFC_wat(I)," QVSH(I):",QVSH(I) + print*,"PSIX=",PSIX_wat(I)," T1D(i):",T1D(i) write(*,*)"=============================================" ENDIF IF (dry(i)) THEN @@ -2126,7 +2126,7 @@ SUBROUTINE SFCLAY1D_mynn( & END SUBROUTINE SFCLAY1D_mynn !------------------------------------------------------------------- -!>\ingroup module_sf_mynn_mod +!>\ingroup mynn_sfc !> This subroutine returns the thermal and moisture roughness lengths !! from Zilitinkevich (1995) and Zilitinkevich et al. (2001) over !! land and water, respectively. @@ -2198,6 +2198,7 @@ SUBROUTINE zilitinkevich_1995(Z_0,Zt,Zq,restar,ustar,KARMAN,& END SUBROUTINE zilitinkevich_1995 !-------------------------------------------------------------------- +!>\ingroup mynn_sfc SUBROUTINE davis_etal_2008(Z_0,ustar) !a.k.a. : Donelan et al. (2004) @@ -2228,7 +2229,7 @@ SUBROUTINE davis_etal_2008(Z_0,ustar) END SUBROUTINE davis_etal_2008 !-------------------------------------------------------------------- -!>\ingroup module_sf_mynn_mod +!>\ingroup mynn_sfc !>This formulation for roughness length was designed account for. !!wave steepness. SUBROUTINE Taylor_Yelland_2001(Z_0,ustar,wsp10) @@ -2254,7 +2255,7 @@ SUBROUTINE Taylor_Yelland_2001(Z_0,ustar,wsp10) END SUBROUTINE Taylor_Yelland_2001 !-------------------------------------------------------------------- -!>\ingroup module_sf_mynn_mod +!>\ingroup mynn_sfc !>This version of Charnock's relation employs a varying !! Charnock parameter, similar to COARE3.0 [Fairall et al. (2003)]. !! The Charnock parameter CZC is varied from .011 to .018. @@ -2279,7 +2280,7 @@ SUBROUTINE charnock_1955(Z_0,ustar,wsp10,visc,zu) END SUBROUTINE charnock_1955 !-------------------------------------------------------------------- -!>\ingroup module_sf_mynn_mod +!>\ingroup mynn_sfc !> This version of Charnock's relation employs a varying !!Charnock parameter, taken from COARE 3.5 [Edson et al. (2001, JPO)]. !!The Charnock parameter CZC is varied from about .005 to .028 @@ -2307,7 +2308,7 @@ SUBROUTINE edson_etal_2013(Z_0,ustar,wsp10,visc,zu) END SUBROUTINE edson_etal_2013 !-------------------------------------------------------------------- -!>\ingroup module_sf_mynn_mod +!>\ingroup mynn_sfc !> This formulation for the thermal and moisture roughness lengths !! (Zt and Zq) relates them to Z0 via the roughness Reynolds number (Ren). !!This formula comes from Fairall et al. (2003). It is modified from @@ -2340,7 +2341,7 @@ SUBROUTINE garratt_1992(Zt,Zq,Z_0,Ren,landsea) END SUBROUTINE garratt_1992 !-------------------------------------------------------------------- -!>\ingroup module_sf_mynn_mod +!>\ingroup mynn_sfc !>This formulation for thermal and moisture roughness length (Zt and Zq) !! as a function of the roughness Reynolds number (Ren) comes from the !! COARE3.0 formulation, empirically derived from COARE and HEXMAX data @@ -2388,7 +2389,7 @@ SUBROUTINE fairall_etal_2003(Zt,Zq,Ren,ustar,visc,rstoch,spp_pbl) END SUBROUTINE fairall_etal_2003 !-------------------------------------------------------------------- -!>\ingroup module_sf_mynn_mod +!>\ingroup mynn_sfc !> This formulation for thermal and moisture roughness length (Zt and Zq) !! as a function of the roughness Reynolds number (Ren) comes from the !! COARE 3.5/4.0 formulation, empirically derived from COARE and HEXMAX data @@ -2417,7 +2418,7 @@ SUBROUTINE fairall_etal_2014(Zt,Zq,Ren,ustar,visc,rstoch,spp_pbl) END SUBROUTINE fairall_etal_2014 !-------------------------------------------------------------------- -!>\ingroup module_sf_mynn_mod +!>\ingroup mynn_sfc !> This is a modified version of Yang et al (2002 QJRMS, 2008 JAMC) !! and Chen et al (2010, J of Hydromet). Although it was originally !! designed for arid regions with bare soil, it is modified @@ -2475,6 +2476,7 @@ SUBROUTINE Yang_2008(Z_0,Zt,Zq,ustar,tstar,qst,Ren,visc) END SUBROUTINE Yang_2008 !-------------------------------------------------------------------- ! Taken from the GFS (sfc_diff.f) for comparison +!>\ingroup mynn_sfc SUBROUTINE GFS_z0_lnd(z0max,shdmax,z1,vegtype,ivegsrc,z0pert) REAL, INTENT(OUT) :: z0max @@ -2534,10 +2536,7 @@ SUBROUTINE GFS_z0_lnd(z0max,shdmax,z1,vegtype,ivegsrc,z0pert) END SUBROUTINE GFS_z0_lnd !-------------------------------------------------------------------- ! Taken from the GFS (sfc_diff.f) for comparison -! This formulation comes from Zheng et al. (2012, JGR), which is a -! modified form of the Zilitinkevich thermal roughness length but it adds -! the dependence on vegetation fraction. -! +!>\ingroup mynn_sfc SUBROUTINE GFS_zt_lnd(ztmax,z0max,sigmaf,ztpert,ustar_lnd) REAL, INTENT(OUT) :: ztmax @@ -2565,27 +2564,28 @@ SUBROUTINE GFS_zt_lnd(ztmax,z0max,sigmaf,ztpert,ustar_lnd) END SUBROUTINE GFS_zt_lnd !-------------------------------------------------------------------- - SUBROUTINE GFS_z0_ocn(z0rl_ocn,ustar_ocn,WSPD,z1,sfc_z0_type,redrag) +!>\ingroup mynn_sfc + SUBROUTINE GFS_z0_wat(z0rl_wat,ustar_wat,WSPD,z1,sfc_z0_type,redrag) - REAL, INTENT(OUT) :: z0rl_ocn - REAL, INTENT(INOUT):: ustar_ocn + REAL, INTENT(OUT) :: z0rl_wat + REAL, INTENT(INOUT):: ustar_wat REAL, INTENT(IN) :: wspd,z1 LOGICAL, INTENT(IN):: redrag INTEGER, INTENT(IN):: sfc_z0_type REAL :: z0,z0max,wind10m REAL, PARAMETER :: charnock = 0.014, z0s_max=.317e-2 -! z0 = 0.01 * z0rl_ocn +! z0 = 0.01 * z0rl_wat !Already converted to meters in the wrapper - z0 = z0rl_ocn + z0 = z0rl_wat z0max = max(1.0e-6, min(z0,z1)) - ustar_ocn = sqrt(g * z0 / charnock) + ustar_wat = sqrt(g * z0 / charnock) wind10m = wspd*log(10./1e-4)/log(z1/1e-4) !wind10m = sqrt(u10m(i)*u10m(i)+v10m(i)*v10m(i)) ! if (sfc_z0_type >= 0) then if (sfc_z0_type == 0) then - z0 = (charnock / g) * ustar_ocn * ustar_ocn + z0 = (charnock / g) * ustar_wat * ustar_wat ! mbek -- toga-coare flux algorithm ! z0 = (charnock / g) * ustar(i)*ustar(i) + arnu/ustar(i) @@ -2596,47 +2596,48 @@ SUBROUTINE GFS_z0_ocn(z0rl_ocn,ustar_ocn,WSPD,z1,sfc_z0_type,redrag) ! z0 = arnu / (ustar(i) * ff ** pp) if (redrag) then - !z0rl_ocn = 100.0 * max(min(z0, z0s_max), 1.e-7) - z0rl_ocn = max(min(z0, z0s_max), 1.e-7) + !z0rl_wat = 100.0 * max(min(z0, z0s_max), 1.e-7) + z0rl_wat = max(min(z0, z0s_max), 1.e-7) else - !z0rl_ocn = 100.0 * max(min(z0,.1), 1.e-7) - z0rl_ocn = max(min(z0,.1), 1.e-7) + !z0rl_wat = 100.0 * max(min(z0,.1), 1.e-7) + z0rl_wat = max(min(z0,.1), 1.e-7) endif elseif (sfc_z0_type == 6) then ! wang call znot_m_v6(wind10m, z0) ! wind, m/s, z0, m - !z0rl_ocn = 100.0 * z0 ! cm + !z0rl_wat = 100.0 * z0 ! cm elseif (sfc_z0_type == 7) then ! wang call znot_m_v7(wind10m, z0) ! wind, m/s, z0, m - !z0rl_ocn = 100.0 * z0 ! cm + !z0rl_wat = 100.0 * z0 ! cm else - z0rl_ocn = 1.0e-6 + z0rl_wat = 1.0e-6 endif endif - END SUBROUTINE GFS_z0_ocn + END SUBROUTINE GFS_z0_wat !-------------------------------------------------------------------- - SUBROUTINE GFS_zt_ocn(ztmax,z0rl_ocn,restar,WSPD,z1,sfc_z0_type) +!>\ingroup mynn_sfc + SUBROUTINE GFS_zt_wat(ztmax,z0rl_wat,restar,WSPD,z1,sfc_z0_type) REAL, INTENT(OUT) :: ztmax - REAL, INTENT(IN) :: wspd,z1,z0rl_ocn,restar + REAL, INTENT(IN) :: wspd,z1,z0rl_wat,restar INTEGER, INTENT(IN):: sfc_z0_type - REAL :: z0,z0max,wind10m,rat,ustar_ocn + REAL :: z0,z0max,wind10m,rat,ustar_wat REAL, PARAMETER :: charnock = 0.014, z0s_max=.317e-2 -! z0 = 0.01 * z0rl_ocn +! z0 = 0.01 * z0rl_wat !Already converted to meters in the wrapper - z0 = z0rl_ocn + z0 = z0rl_wat z0max = max(1.0e-6, min(z0,z1)) - ustar_ocn = sqrt(g * z0 / charnock) + ustar_wat = sqrt(g * z0 / charnock) wind10m = wspd*log(10./1e-4)/log(z1/1e-4) !** test xubin's new z0 ! ztmax = z0max -!input restar = max(ustar_ocn(i)*z0max*visi, 0.000001) +!input restar = max(ustar_wat(i)*z0max*visi, 0.000001) ! restar = log(restar) ! restar = min(restar,5.) @@ -2657,8 +2658,9 @@ SUBROUTINE GFS_zt_ocn(ztmax,z0rl_ocn,restar,WSPD,z1,sfc_z0_type) stop endif - END SUBROUTINE GFS_zt_ocn + END SUBROUTINE GFS_zt_wat !-------------------------------------------------------------------- +!>\ingroup mynn_sfc !! add fitted z0,zt curves for hurricane application (used in HWRF/HMON) !! Weiguo Wang, 2019-0425 @@ -2708,6 +2710,7 @@ SUBROUTINE znot_m_v6(uref, znotm) END SUBROUTINE znot_m_v6 !-------------------------------------------------------------------- +!>\ingroup mynn_sfc SUBROUTINE znot_t_v6(uref, znott) IMPLICIT NONE @@ -2772,7 +2775,7 @@ SUBROUTINE znot_t_v6(uref, znott) END SUBROUTINE znot_t_v6 !------------------------------------------------------------------- - +!>\ingroup mynn_sfc SUBROUTINE znot_m_v7(uref, znotm) IMPLICIT NONE @@ -2820,6 +2823,7 @@ SUBROUTINE znot_m_v7(uref, znotm) END SUBROUTINE znot_m_v7 !-------------------------------------------------------------------- +!>\ingroup mynn_sfc SUBROUTINE znot_t_v7(uref, znott) IMPLICIT NONE @@ -2886,7 +2890,7 @@ SUBROUTINE znot_t_v7(uref, znott) END SUBROUTINE znot_t_v7 !-------------------------------------------------------------------- -!>\ingroup module_sf_mynn_mod +!>\ingroup mynn_sfc !> This is taken from Andreas (2002; J. of Hydromet) and !! Andreas et al. (2005; BLM). !! @@ -2937,7 +2941,7 @@ SUBROUTINE Andreas_2002(Z_0,bvisc,ustar,Zt,Zq) END SUBROUTINE Andreas_2002 !-------------------------------------------------------------------- -!>\ingroup module_sf_mynn_mod +!>\ingroup mynn_sfc !> This subroutine returns the stability functions based off !! of Hogstrom (1996). SUBROUTINE PSI_Hogstrom_1996(psi_m, psi_h, zL, Zt, Z_0, Za) @@ -2973,7 +2977,7 @@ SUBROUTINE PSI_Hogstrom_1996(psi_m, psi_h, zL, Zt, Z_0, Za) END SUBROUTINE PSI_Hogstrom_1996 !-------------------------------------------------------------------- -!> \ingroup module_sf_mynn_mod +!> \ingroup mynn_sfc !> This subroutine returns the stability functions based off !! of Hogstrom (1996), but with different constants compatible !! with Dyer and Hicks (1970/74?). This formulation is used for @@ -3012,7 +3016,7 @@ SUBROUTINE PSI_DyerHicks(psi_m, psi_h, zL, Zt, Z_0, Za) END SUBROUTINE PSI_DyerHicks !-------------------------------------------------------------------- -!>\ingroup module_sf_mynn_mod +!>\ingroup mynn_sfc !> This subroutine returns the stability functions based off !! of Beljaar and Holtslag 1991, which is an extension of Holtslag !! and Debruin 1989. @@ -3043,7 +3047,7 @@ SUBROUTINE PSI_Beljaars_Holtslag_1991(psi_m, psi_h, zL) END SUBROUTINE PSI_Beljaars_Holtslag_1991 !-------------------------------------------------------------------- -!>\ingroup module_sf_mynn_mod +!>\ingroup mynn_sfc !> This subroutine returns the stability functions come from !! Zilitinkevich and Esau (2007, BM), which are formulatioed from the !! "generalized similarity theory" and tuned to the LES DATABASE64 @@ -3074,7 +3078,7 @@ SUBROUTINE PSI_Zilitinkevich_Esau_2007(psi_m, psi_h, zL) END SUBROUTINE PSI_Zilitinkevich_Esau_2007 !-------------------------------------------------------------------- -!>\ingroup module_sf_mynn_mod +!>\ingroup mynn_sfc !> This subroutine returns the flux-profile relationships !! of Businger el al. 1971. SUBROUTINE PSI_Businger_1971(psi_m, psi_h, zL) @@ -3106,7 +3110,7 @@ SUBROUTINE PSI_Businger_1971(psi_m, psi_h, zL) END SUBROUTINE PSI_Businger_1971 !-------------------------------------------------------------------- -!>\ingroup module_sf_mynn_mod +!>\ingroup mynn_sfc !> This subroutine returns flux-profile relatioships based off !!of Lobocki (1993), which is derived from the MY-level 2 model. !!Suselj and Sood (2010) applied the surface layer length scales @@ -3139,12 +3143,12 @@ SUBROUTINE PSI_Suselj_Sood_2010(psi_m, psi_h, zL) END SUBROUTINE PSI_Suselj_Sood_2010 !-------------------------------------------------------------------- +!>\ingroup mynn_sfc +!! This subroutine returns the stability functions based off +!! of Cheng and Brutseart (2005, BLM), for use in stable conditions only. +!! The returned values are the combination of psi((za+zo)/L) - psi(z0/L) SUBROUTINE PSI_CB2005(psim1,psih1,zL,z0L) - ! This subroutine returns the stability functions based off - ! of Cheng and Brutseart (2005, BLM), for use in stable conditions only. - ! The returned values are the combination of psi((za+zo)/L) - psi(z0/L) - IMPLICIT NONE REAL, INTENT(IN) :: zL,z0L REAL, INTENT(OUT) :: psim1,psih1 @@ -3158,12 +3162,12 @@ SUBROUTINE PSI_CB2005(psim1,psih1,zL,z0L) END SUBROUTINE PSI_CB2005 !-------------------------------------------------------------------- +!>\ingroup mynn_sfc +!! This subroutine returns a more robust z/L that best matches +!! the z/L from Hogstrom (1996) for unstable conditions and Beljaars +!! and Holtslag (1991) for stable conditions. SUBROUTINE Li_etal_2010(zL, Rib, zaz0, z0zt) - !This subroutine returns a more robust z/L that best matches - !the z/L from Hogstrom (1996) for unstable conditions and Beljaars - !and Holtslag (1991) for stable conditions. - IMPLICIT NONE REAL, INTENT(OUT) :: zL REAL, INTENT(IN) :: Rib, zaz0, z0zt @@ -3439,6 +3443,7 @@ END SUBROUTINE psi_init ! ================================================================== ! ... integrated similarity functions from MYNN... ! +!>\ingroup mynn_sfc REAL function psim_stable_full(zolf) REAL :: zolf @@ -3448,6 +3453,7 @@ REAL function psim_stable_full(zolf) return end function +!>\ingroup mynn_sfc REAL function psih_stable_full(zolf) REAL :: zolf @@ -3457,6 +3463,7 @@ REAL function psih_stable_full(zolf) return end function +!>\ingroup mynn_sfc REAL function psim_unstable_full(zolf) REAL :: zolf,x,ym,psimc,psimk @@ -3473,6 +3480,7 @@ REAL function psim_unstable_full(zolf) return end function +!>\ingroup mynn_sfc REAL function psih_unstable_full(zolf) REAL :: zolf,y,yh,psihc,psihk diff --git a/physics/module_sf_noahmp_glacier.f90 b/physics/module_sf_noahmp_glacier.f90 index ebe4654bd..be24381f4 100644 --- a/physics/module_sf_noahmp_glacier.f90 +++ b/physics/module_sf_noahmp_glacier.f90 @@ -13,58 +13,58 @@ module noahmp_glacier_globals ! physical constants: ! !------------------------------------------------------------------------------------------! - real (kind=kind_phys), parameter :: grav = 9.80616 !acceleration due to gravity (m/s2) - real (kind=kind_phys), parameter :: sb = 5.67e-08 !stefan-boltzmann constant (w/m2/k4) - real (kind=kind_phys), parameter :: vkc = 0.40 !von karman constant - real (kind=kind_phys), parameter :: tfrz = 273.16 !freezing/melting point (k) - real (kind=kind_phys), parameter :: hsub = 2.8440e06 !latent heat of sublimation (j/kg) - real (kind=kind_phys), parameter :: hvap = 2.5104e06 !latent heat of vaporization (j/kg) - real (kind=kind_phys), parameter :: hfus = 0.3336e06 !latent heat of fusion (j/kg) - real (kind=kind_phys), parameter :: cwat = 4.188e06 !specific heat capacity of water (j/m3/k) - real (kind=kind_phys), parameter :: cice = 2.094e06 !specific heat capacity of ice (j/m3/k) - real (kind=kind_phys), parameter :: cpair = 1004.64 !heat capacity dry air at const pres (j/kg/k) - real (kind=kind_phys), parameter :: tkwat = 0.6 !thermal conductivity of water (w/m/k) - real (kind=kind_phys), parameter :: tkice = 2.2 !thermal conductivity of ice (w/m/k) - real (kind=kind_phys), parameter :: tkair = 0.023 !thermal conductivity of air (w/m/k) - real (kind=kind_phys), parameter :: rair = 287.04 !gas constant for dry air (j/kg/k) - real (kind=kind_phys), parameter :: rw = 461.269 !gas constant for water vapor (j/kg/k) - real (kind=kind_phys), parameter :: denh2o = 1000. !density of water (kg/m3) - real (kind=kind_phys), parameter :: denice = 917. !density of ice (kg/m3) + real (kind=kind_phys), parameter :: grav = 9.80616 !< acceleration due to gravity (m/s2) + real (kind=kind_phys), parameter :: sb = 5.67e-08 !< stefan-boltzmann constant (w/m2/k4) + real (kind=kind_phys), parameter :: vkc = 0.40 !< von karman constant + real (kind=kind_phys), parameter :: tfrz = 273.16 !< freezing/melting point (k) + real (kind=kind_phys), parameter :: hsub = 2.8440e06 !< latent heat of sublimation (j/kg) + real (kind=kind_phys), parameter :: hvap = 2.5104e06 !< latent heat of vaporization (j/kg) + real (kind=kind_phys), parameter :: hfus = 0.3336e06 !< latent heat of fusion (j/kg) + real (kind=kind_phys), parameter :: cwat = 4.188e06 !< specific heat capacity of water (j/m3/k) + real (kind=kind_phys), parameter :: cice = 2.094e06 !< specific heat capacity of ice (j/m3/k) + real (kind=kind_phys), parameter :: cpair = 1004.64 !< heat capacity dry air at const pres (j/kg/k) + real (kind=kind_phys), parameter :: tkwat = 0.6 !< thermal conductivity of water (w/m/k) + real (kind=kind_phys), parameter :: tkice = 2.2 !< thermal conductivity of ice (w/m/k) + real (kind=kind_phys), parameter :: tkair = 0.023 !< thermal conductivity of air (w/m/k) + real (kind=kind_phys), parameter :: rair = 287.04 !< gas constant for dry air (j/kg/k) + real (kind=kind_phys), parameter :: rw = 461.269 !< gas constant for water vapor (j/kg/k) + real (kind=kind_phys), parameter :: denh2o = 1000. !< density of water (kg/m3) + real (kind=kind_phys), parameter :: denice = 917. !< density of ice (kg/m3) ! =====================================options for different schemes================================ -! options for ground snow surface albedo -! 1-> BATS; 2 -> CLASS +!> options for ground snow surface albedo +!! 1-> BATS; 2 -> CLASS INTEGER :: OPT_ALB != 2 !(suggested 2) -! options for partitioning precipitation into rainfall & snowfall -! 1 -> Jordan (1991); 2 -> BATS: when SFCTMP SFCTMP options for partitioning precipitation into rainfall & snowfall +!! 1 -> Jordan (1991); 2 -> BATS: when SFCTMP SFCTMP zero heat flux from bottom (ZBOT and TBOT not used) -! 2 -> TBOT at ZBOT (8m) read from a file (original Noah) +!> options for lower boundary condition of soil temperature +!! 1 -> zero heat flux from bottom (ZBOT and TBOT not used) +!! 2 -> TBOT at ZBOT (8m) read from a file (original Noah) INTEGER :: OPT_TBOT != 2 !(suggested 2) -! options for snow/soil temperature time scheme (only layer 1) -! 1 -> semi-implicit; 2 -> full implicit (original Noah) +!> options for snow/soil temperature time scheme (only layer 1) +!! 1 -> semi-implicit; 2 -> full implicit (original Noah) INTEGER :: OPT_STC != 1 !(suggested 1) -! options for glacier treatment -! 1 -> include phase change of ice; 2 -> ice treatment more like original Noah +!> options for glacier treatment +!! 1 -> include phase change of ice; 2 -> ice treatment more like original Noah INTEGER :: OPT_GLA != 1 !(suggested 1) ! adjustable parameters for snow processes - REAL, PARAMETER :: Z0SNO = 0.002 !snow surface roughness length (m) (0.002) - REAL, PARAMETER :: SSI = 0.03 !liquid water holding capacity for snowpack (m3/m3) (0.03) - REAL, PARAMETER :: SWEMX = 1.00 !new snow mass to fully cover old snow (mm) - !equivalent to 10mm depth (density = 100 kg/m3) + REAL, PARAMETER :: Z0SNO = 0.002 !< snow surface roughness length (m) (0.002) + REAL, PARAMETER :: SSI = 0.03 !< liquid water holding capacity for snowpack (m3/m3) (0.03) + REAL, PARAMETER :: SWEMX = 1.00 !< new snow mass to fully cover old snow (mm) + !< equivalent to 10mm depth (density = 100 kg/m3) !------------------------------------------------------------------------------------------! end module noahmp_glacier_globals @@ -138,72 +138,72 @@ subroutine noahmp_glacier (& implicit none ! -------------------------------------------------------------------------------------------------- ! input - integer , intent(in) :: iloc !grid index - integer , intent(in) :: jloc !grid index - real (kind=kind_phys) , intent(in) :: cosz !cosine solar zenith angle [0-1] - integer , intent(in) :: nsnow !maximum no. of snow layers - integer , intent(in) :: nsoil !no. of soil layers - real (kind=kind_phys) , intent(in) :: dt !time step [sec] - real (kind=kind_phys) , intent(in) :: sfctmp !surface air temperature [k] - real (kind=kind_phys) , intent(in) :: sfcprs !pressure (pa) - real (kind=kind_phys) , intent(in) :: uu !wind speed in eastward dir (m/s) - real (kind=kind_phys) , intent(in) :: vv !wind speed in northward dir (m/s) - real (kind=kind_phys) , intent(in) :: q2 !mixing ratio (kg/kg) lowest model layer - real (kind=kind_phys) , intent(in) :: soldn !downward shortwave radiation (w/m2) - real (kind=kind_phys) , intent(in) :: prcp !precipitation rate (kg m-2 s-1) - real (kind=kind_phys) , intent(in) :: lwdn !downward longwave radiation (w/m2) - real (kind=kind_phys) , intent(in) :: tbot !bottom condition for soil temp. [k] - real (kind=kind_phys) , intent(in) :: zlvl !reference height (m) - real (kind=kind_phys), dimension(-nsnow+1: 0), intent(in) :: ficeold!ice fraction at last timestep - real (kind=kind_phys), dimension( 1:nsoil), intent(in) :: zsoil !layer-bottom depth from soil surf (m) + integer , intent(in) :: iloc !< grid index + integer , intent(in) :: jloc !< grid index + real (kind=kind_phys) , intent(in) :: cosz !< cosine solar zenith angle [0-1] + integer , intent(in) :: nsnow !< maximum no. of snow layers + integer , intent(in) :: nsoil !< no. of soil layers + real (kind=kind_phys) , intent(in) :: dt !< time step [sec] + real (kind=kind_phys) , intent(in) :: sfctmp !< surface air temperature [k] + real (kind=kind_phys) , intent(in) :: sfcprs !< pressure (pa) + real (kind=kind_phys) , intent(in) :: uu !< wind speed in eastward dir (m/s) + real (kind=kind_phys) , intent(in) :: vv !< wind speed in northward dir (m/s) + real (kind=kind_phys) , intent(in) :: q2 !< mixing ratio (kg/kg) lowest model layer + real (kind=kind_phys) , intent(in) :: soldn !< downward shortwave radiation (w/m2) + real (kind=kind_phys) , intent(in) :: prcp !< precipitation rate (kg m-2 s-1) + real (kind=kind_phys) , intent(in) :: lwdn !< downward longwave radiation (w/m2) + real (kind=kind_phys) , intent(in) :: tbot !< bottom condition for soil temp. [k] + real (kind=kind_phys) , intent(in) :: zlvl !< reference height (m) + real (kind=kind_phys), dimension(-nsnow+1: 0), intent(in) :: ficeold!< ice fraction at last timestep + real (kind=kind_phys), dimension( 1:nsoil), intent(in) :: zsoil !< layer-bottom depth from soil surf (m) ! input/output : need arbitary intial values - real (kind=kind_phys) , intent(inout) :: qsnow !snowfall [mm/s] - real (kind=kind_phys) , intent(inout) :: sneqvo !snow mass at last time step (mm) - real (kind=kind_phys) , intent(inout) :: albold !snow albedo at last time step (class type) - real (kind=kind_phys) , intent(inout) :: cm !momentum drag coefficient - real (kind=kind_phys) , intent(inout) :: ch !sensible heat exchange coefficient + real (kind=kind_phys) , intent(inout) :: qsnow !< snowfall [mm/s] + real (kind=kind_phys) , intent(inout) :: sneqvo !< snow mass at last time step (mm) + real (kind=kind_phys) , intent(inout) :: albold !< snow albedo at last time step (class type) + real (kind=kind_phys) , intent(inout) :: cm !< momentum drag coefficient + real (kind=kind_phys) , intent(inout) :: ch !< sensible heat exchange coefficient ! prognostic variables - integer , intent(inout) :: isnow !actual no. of snow layers [-] - real (kind=kind_phys) , intent(inout) :: sneqv !snow water eqv. [mm] - real (kind=kind_phys), dimension( 1:nsoil), intent(inout) :: smc !soil moisture (ice + liq.) [m3/m3] - real (kind=kind_phys), dimension(-nsnow+1:nsoil), intent(inout) :: zsnso !layer-bottom depth from snow surf [m] - real (kind=kind_phys) , intent(inout) :: snowh !snow height [m] - real (kind=kind_phys), dimension(-nsnow+1: 0), intent(inout) :: snice !snow layer ice [mm] - real (kind=kind_phys), dimension(-nsnow+1: 0), intent(inout) :: snliq !snow layer liquid water [mm] - real (kind=kind_phys) , intent(inout) :: tg !ground temperature (k) - real (kind=kind_phys), dimension(-nsnow+1:nsoil), intent(inout) :: stc !snow/soil temperature [k] - real (kind=kind_phys), dimension( 1:nsoil), intent(inout) :: sh2o !liquid soil moisture [m3/m3] - real (kind=kind_phys) , intent(inout) :: tauss !non-dimensional snow age - real (kind=kind_phys) , intent(inout) :: qsfc !mixing ratio at lowest model layer + integer , intent(inout) :: isnow !< actual no. of snow layers [-] + real (kind=kind_phys) , intent(inout) :: sneqv !< snow water eqv. [mm] + real (kind=kind_phys), dimension( 1:nsoil), intent(inout) :: smc !< soil moisture (ice + liq.) [m3/m3] + real (kind=kind_phys), dimension(-nsnow+1:nsoil), intent(inout) :: zsnso !< layer-bottom depth from snow surf [m] + real (kind=kind_phys) , intent(inout) :: snowh !< snow height [m] + real (kind=kind_phys), dimension(-nsnow+1: 0), intent(inout) :: snice !< snow layer ice [mm] + real (kind=kind_phys), dimension(-nsnow+1: 0), intent(inout) :: snliq !< snow layer liquid water [mm] + real (kind=kind_phys) , intent(inout) :: tg !< ground temperature (k) + real (kind=kind_phys), dimension(-nsnow+1:nsoil), intent(inout) :: stc !< snow/soil temperature [k] + real (kind=kind_phys), dimension( 1:nsoil), intent(inout) :: sh2o !< liquid soil moisture [m3/m3] + real (kind=kind_phys) , intent(inout) :: tauss !< non-dimensional snow age + real (kind=kind_phys) , intent(inout) :: qsfc !< mixing ratio at lowest model layer ! output - real (kind=kind_phys) , intent(out) :: fsa !total absorbed solar radiation (w/m2) - real (kind=kind_phys) , intent(out) :: fsr !total reflected solar radiation (w/m2) - real (kind=kind_phys) , intent(out) :: fira !total net lw rad (w/m2) [+ to atm] - real (kind=kind_phys) , intent(out) :: fsh !total sensible heat (w/m2) [+ to atm] - real (kind=kind_phys) , intent(out) :: fgev !ground evap heat (w/m2) [+ to atm] - real (kind=kind_phys) , intent(out) :: ssoil !ground heat flux (w/m2) [+ to soil] - real (kind=kind_phys) , intent(out) :: trad !surface radiative temperature (k) - real (kind=kind_phys) , intent(out) :: edir !soil surface evaporation rate (mm/s] - real (kind=kind_phys) , intent(out) :: runsrf !surface runoff [mm/s] - real (kind=kind_phys) , intent(out) :: runsub !baseflow (saturation excess) [mm/s] - real (kind=kind_phys) , intent(out) :: sag !solar rad absorbed by ground (w/m2) - real (kind=kind_phys) , intent(out) :: albedo !surface albedo [-] - real (kind=kind_phys) , intent(out) :: qsnbot !snowmelt [mm/s] - real (kind=kind_phys) , intent(out) :: ponding!surface ponding [mm] - real (kind=kind_phys) , intent(out) :: ponding1!surface ponding [mm] - real (kind=kind_phys) , intent(out) :: ponding2!surface ponding [mm] - real (kind=kind_phys) , intent(out) :: t2m !2-m air temperature over bare ground part [k] + real (kind=kind_phys) , intent(out) :: fsa !< total absorbed solar radiation (w/m2) + real (kind=kind_phys) , intent(out) :: fsr !< total reflected solar radiation (w/m2) + real (kind=kind_phys) , intent(out) :: fira !< total net lw rad (w/m2) [+ to atm] + real (kind=kind_phys) , intent(out) :: fsh !< total sensible heat (w/m2) [+ to atm] + real (kind=kind_phys) , intent(out) :: fgev !< ground evap heat (w/m2) [+ to atm] + real (kind=kind_phys) , intent(out) :: ssoil !< ground heat flux (w/m2) [+ to soil] + real (kind=kind_phys) , intent(out) :: trad !< surface radiative temperature (k) + real (kind=kind_phys) , intent(out) :: edir !< soil surface evaporation rate (mm/s] + real (kind=kind_phys) , intent(out) :: runsrf !< surface runoff [mm/s] + real (kind=kind_phys) , intent(out) :: runsub !< baseflow (saturation excess) [mm/s] + real (kind=kind_phys) , intent(out) :: sag !< solar rad absorbed by ground (w/m2) + real (kind=kind_phys) , intent(out) :: albedo !< surface albedo [-] + real (kind=kind_phys) , intent(out) :: qsnbot !< snowmelt [mm/s] + real (kind=kind_phys) , intent(out) :: ponding!< surface ponding [mm] + real (kind=kind_phys) , intent(out) :: ponding1!< surface ponding [mm] + real (kind=kind_phys) , intent(out) :: ponding2!< surface ponding [mm] + real (kind=kind_phys) , intent(out) :: t2m !< 2-m air temperature over bare ground part [k] real (kind=kind_phys) , intent(out) :: q2e real (kind=kind_phys) , intent(out) :: emissi real (kind=kind_phys) , intent(out) :: fpice real (kind=kind_phys) , intent(out) :: ch2b real (kind=kind_phys) , intent(out) :: esnow - real (kind=kind_phys), dimension(1:2) , intent(out) :: albsnd !snow albedo (direct) - real (kind=kind_phys), dimension(1:2) , intent(out) :: albsni !snow albedo (diffuse) + real (kind=kind_phys), dimension(1:2) , intent(out) :: albsnd !< snow albedo (direct) + real (kind=kind_phys), dimension(1:2) , intent(out) :: albsni !< snow albedo (diffuse) #ifdef CCPP @@ -212,25 +212,25 @@ subroutine noahmp_glacier (& #endif ! local - integer :: iz !do-loop index - integer, dimension(-nsnow+1:nsoil) :: imelt !phase change index [1-melt; 2-freeze] - real (kind=kind_phys) :: rhoair !density air (kg/m3) - real (kind=kind_phys), dimension(-nsnow+1:nsoil) :: dzsnso !snow/soil layer thickness [m] - real (kind=kind_phys) :: thair !potential temperature (k) - real (kind=kind_phys) :: qair !specific humidity (kg/kg) (q2/(1+q2)) - real (kind=kind_phys) :: eair !vapor pressure air (pa) - real (kind=kind_phys), dimension( 1: 2) :: solad !incoming direct solar rad (w/m2) - real (kind=kind_phys), dimension( 1: 2) :: solai !incoming diffuse solar rad (w/m2) - real (kind=kind_phys), dimension( 1:nsoil) :: sice !soil ice content (m3/m3) - real (kind=kind_phys), dimension(-nsnow+1: 0) :: snicev !partial volume ice of snow [m3/m3] - real (kind=kind_phys), dimension(-nsnow+1: 0) :: snliqv !partial volume liq of snow [m3/m3] - real (kind=kind_phys), dimension(-nsnow+1: 0) :: epore !effective porosity [m3/m3] - real (kind=kind_phys) :: qdew !ground surface dew rate [mm/s] - real (kind=kind_phys) :: qvap !ground surface evap. rate [mm/s] - real (kind=kind_phys) :: lathea !latent heat [j/kg] - real (kind=kind_phys) :: qmelt !internal pack melt - real (kind=kind_phys) :: swdown !downward solar [w/m2] - real (kind=kind_phys) :: beg_wb !beginning water for error check + integer :: iz !< do-loop index + integer, dimension(-nsnow+1:nsoil) :: imelt !< phase change index [1-melt; 2-freeze] + real (kind=kind_phys) :: rhoair !< density air (kg/m3) + real (kind=kind_phys), dimension(-nsnow+1:nsoil) :: dzsnso !< snow/soil layer thickness [m] + real (kind=kind_phys) :: thair !< potential temperature (k) + real (kind=kind_phys) :: qair !< specific humidity (kg/kg) (q2/(1+q2)) + real (kind=kind_phys) :: eair !< vapor pressure air (pa) + real (kind=kind_phys), dimension( 1: 2) :: solad !< incoming direct solar rad (w/m2) + real (kind=kind_phys), dimension( 1: 2) :: solai !< incoming diffuse solar rad (w/m2) + real (kind=kind_phys), dimension( 1:nsoil) :: sice !< soil ice content (m3/m3) + real (kind=kind_phys), dimension(-nsnow+1: 0) :: snicev !< partial volume ice of snow [m3/m3] + real (kind=kind_phys), dimension(-nsnow+1: 0) :: snliqv !< partial volume liq of snow [m3/m3] + real (kind=kind_phys), dimension(-nsnow+1: 0) :: epore !< effective porosity [m3/m3] + real (kind=kind_phys) :: qdew !< ground surface dew rate [mm/s] + real (kind=kind_phys) :: qvap !< ground surface evap. rate [mm/s] + real (kind=kind_phys) :: lathea !< latent heat [j/kg] + real (kind=kind_phys) :: qmelt !< internal pack melt + real (kind=kind_phys) :: swdown !< downward solar [w/m2] + real (kind=kind_phys) :: beg_wb !< beginning water for error check real (kind=kind_phys) :: zbot = -8.0 character*256 message @@ -330,6 +330,7 @@ subroutine noahmp_glacier (& end subroutine noahmp_glacier ! ================================================================================================== !>\ingroup NoahMP_LSM +!! re-process atmospheric forcing subroutine atm_glacier (sfcprs ,sfctmp ,q2 ,soldn ,cosz ,thair , & qair ,eair ,rhoair ,solad ,solai , & swdown ) @@ -340,25 +341,25 @@ subroutine atm_glacier (sfcprs ,sfctmp ,q2 ,soldn ,cosz ,thair , & ! -------------------------------------------------------------------------------------------------- ! inputs - real (kind=kind_phys) , intent(in) :: sfcprs !pressure (pa) - real (kind=kind_phys) , intent(in) :: sfctmp !surface air temperature [k] - real (kind=kind_phys) , intent(in) :: q2 !mixing ratio (kg/kg) - real (kind=kind_phys) , intent(in) :: soldn !downward shortwave radiation (w/m2) - real (kind=kind_phys) , intent(in) :: cosz !cosine solar zenith angle [0-1] + real (kind=kind_phys) , intent(in) :: sfcprs !< pressure (pa) + real (kind=kind_phys) , intent(in) :: sfctmp !< surface air temperature [k] + real (kind=kind_phys) , intent(in) :: q2 !< mixing ratio (kg/kg) + real (kind=kind_phys) , intent(in) :: soldn !< downward shortwave radiation (w/m2) + real (kind=kind_phys) , intent(in) :: cosz !< cosine solar zenith angle [0-1] ! outputs - real (kind=kind_phys) , intent(out) :: thair !potential temperature (k) - real (kind=kind_phys) , intent(out) :: qair !specific humidity (kg/kg) (q2/(1+q2)) - real (kind=kind_phys) , intent(out) :: eair !vapor pressure air (pa) - real (kind=kind_phys), dimension( 1: 2), intent(out) :: solad !incoming direct solar radiation (w/m2) - real (kind=kind_phys), dimension( 1: 2), intent(out) :: solai !incoming diffuse solar radiation (w/m2) - real (kind=kind_phys) , intent(out) :: rhoair !density air (kg/m3) - real (kind=kind_phys) , intent(out) :: swdown !downward solar filtered by sun angle [w/m2] + real (kind=kind_phys) , intent(out) :: thair !< potential temperature (k) + real (kind=kind_phys) , intent(out) :: qair !< specific humidity (kg/kg) (q2/(1+q2)) + real (kind=kind_phys) , intent(out) :: eair !< vapor pressure air (pa) + real (kind=kind_phys), dimension( 1: 2), intent(out) :: solad !< incoming direct solar radiation (w/m2) + real (kind=kind_phys), dimension( 1: 2), intent(out) :: solai !< incoming diffuse solar radiation (w/m2) + real (kind=kind_phys) , intent(out) :: rhoair !< density air (kg/m3) + real (kind=kind_phys) , intent(out) :: swdown !< downward solar filtered by sun angle [w/m2] !locals - real (kind=kind_phys) :: pair !atm bottom level pressure (pa) + real (kind=kind_phys) :: pair !< atm bottom level pressure (pa) ! -------------------------------------------------------------------------------------------------- pair = sfcprs ! atm bottom level pressure (pa) @@ -408,43 +409,43 @@ subroutine energy_glacier (nsnow ,nsoil ,isnow ,dt ,qsnow ,rhoair , & !i implicit none ! -------------------------------------------------------------------------------------------------- ! inputs - integer , intent(in) :: nsnow !maximum no. of snow layers - integer , intent(in) :: nsoil !number of soil layers - integer , intent(in) :: isnow !actual no. of snow layers - real (kind=kind_phys) , intent(in) :: dt !time step [sec] - real (kind=kind_phys) , intent(in) :: qsnow !snowfall on the ground (mm/s) - real (kind=kind_phys) , intent(in) :: rhoair !density air (kg/m3) - real (kind=kind_phys) , intent(in) :: eair !vapor pressure air (pa) - real (kind=kind_phys) , intent(in) :: sfcprs !pressure (pa) - real (kind=kind_phys) , intent(in) :: qair !specific humidity (kg/kg) - real (kind=kind_phys) , intent(in) :: sfctmp !air temperature (k) - real (kind=kind_phys) , intent(in) :: lwdn !downward longwave radiation (w/m2) - real (kind=kind_phys) , intent(in) :: uu !wind speed in e-w dir (m/s) - real (kind=kind_phys) , intent(in) :: vv !wind speed in n-s dir (m/s) - real (kind=kind_phys) , dimension( 1: 2), intent(in) :: solad !incoming direct solar rad. (w/m2) - real (kind=kind_phys) , dimension( 1: 2), intent(in) :: solai !incoming diffuse solar rad. (w/m2) - real (kind=kind_phys) , intent(in) :: cosz !cosine solar zenith angle (0-1) - real (kind=kind_phys) , intent(in) :: zref !reference height (m) - real (kind=kind_phys) , intent(in) :: tbot !bottom condition for soil temp. (k) - real (kind=kind_phys) , intent(in) :: zbot !depth for tbot [m] - real (kind=kind_phys) , dimension(-nsnow+1:nsoil), intent(in) :: zsnso !layer-bottom depth from snow surf [m] - real (kind=kind_phys) , dimension(-nsnow+1:nsoil), intent(in) :: dzsnso !depth of snow & soil layer-bottom [m] + integer , intent(in) :: nsnow !< maximum no. of snow layers + integer , intent(in) :: nsoil !< number of soil layers + integer , intent(in) :: isnow !< actual no. of snow layers + real (kind=kind_phys) , intent(in) :: dt !< time step [sec] + real (kind=kind_phys) , intent(in) :: qsnow !< snowfall on the ground (mm/s) + real (kind=kind_phys) , intent(in) :: rhoair !< density air (kg/m3) + real (kind=kind_phys) , intent(in) :: eair !< vapor pressure air (pa) + real (kind=kind_phys) , intent(in) :: sfcprs !< pressure (pa) + real (kind=kind_phys) , intent(in) :: qair !< specific humidity (kg/kg) + real (kind=kind_phys) , intent(in) :: sfctmp !< air temperature (k) + real (kind=kind_phys) , intent(in) :: lwdn !< downward longwave radiation (w/m2) + real (kind=kind_phys) , intent(in) :: uu !< wind speed in e-w dir (m/s) + real (kind=kind_phys) , intent(in) :: vv !< wind speed in n-s dir (m/s) + real (kind=kind_phys) , dimension( 1: 2), intent(in) :: solad !< incoming direct solar rad. (w/m2) + real (kind=kind_phys) , dimension( 1: 2), intent(in) :: solai !< incoming diffuse solar rad. (w/m2) + real (kind=kind_phys) , intent(in) :: cosz !< cosine solar zenith angle (0-1) + real (kind=kind_phys) , intent(in) :: zref !< reference height (m) + real (kind=kind_phys) , intent(in) :: tbot !< bottom condition for soil temp. (k) + real (kind=kind_phys) , intent(in) :: zbot !< depth for tbot [m] + real (kind=kind_phys) , dimension(-nsnow+1:nsoil), intent(in) :: zsnso !< layer-bottom depth from snow surf [m] + real (kind=kind_phys) , dimension(-nsnow+1:nsoil), intent(in) :: dzsnso !< depth of snow & soil layer-bottom [m] ! input & output - real (kind=kind_phys) , intent(inout) :: tg !ground temperature (k) - real (kind=kind_phys) , dimension(-nsnow+1:nsoil), intent(inout) :: stc !snow/soil temperature [k] - real (kind=kind_phys) , intent(inout) :: snowh !snow height [m] - real (kind=kind_phys) , intent(inout) :: sneqv !snow mass (mm) - real (kind=kind_phys) , intent(inout) :: sneqvo !snow mass at last time step (mm) - real (kind=kind_phys) , dimension( 1:nsoil), intent(inout) :: sh2o !liquid soil moisture [m3/m3] - real (kind=kind_phys) , dimension( 1:nsoil), intent(inout) :: smc !soil moisture (ice + liq.) [m3/m3] - real (kind=kind_phys) , dimension(-nsnow+1: 0), intent(inout) :: snice !snow ice mass (kg/m2) - real (kind=kind_phys) , dimension(-nsnow+1: 0), intent(inout) :: snliq !snow liq mass (kg/m2) - real (kind=kind_phys) , intent(inout) :: albold !snow albedo at last time step(class type) - real (kind=kind_phys) , intent(inout) :: cm !momentum drag coefficient - real (kind=kind_phys) , intent(inout) :: ch !sensible heat exchange coefficient - real (kind=kind_phys) , intent(inout) :: tauss !snow aging factor - real (kind=kind_phys) , intent(inout) :: qsfc !mixing ratio at lowest model layer + real (kind=kind_phys) , intent(inout) :: tg !< ground temperature (k) + real (kind=kind_phys) , dimension(-nsnow+1:nsoil), intent(inout) :: stc !< snow/soil temperature [k] + real (kind=kind_phys) , intent(inout) :: snowh !< snow height [m] + real (kind=kind_phys) , intent(inout) :: sneqv !< snow mass (mm) + real (kind=kind_phys) , intent(inout) :: sneqvo !< snow mass at last time step (mm) + real (kind=kind_phys) , dimension( 1:nsoil), intent(inout) :: sh2o !< liquid soil moisture [m3/m3] + real (kind=kind_phys) , dimension( 1:nsoil), intent(inout) :: smc !< soil moisture (ice + liq.) [m3/m3] + real (kind=kind_phys) , dimension(-nsnow+1: 0), intent(inout) :: snice !< snow ice mass (kg/m2) + real (kind=kind_phys) , dimension(-nsnow+1: 0), intent(inout) :: snliq !< snow liq mass (kg/m2) + real (kind=kind_phys) , intent(inout) :: albold !< snow albedo at last time step(class type) + real (kind=kind_phys) , intent(inout) :: cm !< momentum drag coefficient + real (kind=kind_phys) , intent(inout) :: ch !< sensible heat exchange coefficient + real (kind=kind_phys) , intent(inout) :: tauss !< snow aging factor + real (kind=kind_phys) , intent(inout) :: qsfc !< mixing ratio at lowest model layer #ifdef CCPP character(len=*) , intent(inout) :: errmsg @@ -452,42 +453,42 @@ subroutine energy_glacier (nsnow ,nsoil ,isnow ,dt ,qsnow ,rhoair , & !i #endif ! outputs - integer, dimension(-nsnow+1:nsoil), intent(out) :: imelt !phase change index [1-melt; 2-freeze] - real (kind=kind_phys) , dimension(-nsnow+1: 0), intent(out) :: snicev !partial volume ice [m3/m3] - real (kind=kind_phys) , dimension(-nsnow+1: 0), intent(out) :: snliqv !partial volume liq. water [m3/m3] - real (kind=kind_phys) , dimension(-nsnow+1: 0), intent(out) :: epore !effective porosity [m3/m3] - real (kind=kind_phys) , intent(out) :: qmelt !snowmelt [mm/s] - real (kind=kind_phys) , intent(out) :: ponding!pounding at ground [mm] - real (kind=kind_phys) , intent(out) :: sag !solar rad. absorbed by ground (w/m2) - real (kind=kind_phys) , intent(out) :: fsa !tot. absorbed solar radiation (w/m2) - real (kind=kind_phys) , intent(out) :: fsr !tot. reflected solar radiation (w/m2) - real (kind=kind_phys) , intent(out) :: fira !total net lw. rad (w/m2) [+ to atm] - real (kind=kind_phys) , intent(out) :: fsh !total sensible heat (w/m2) [+ to atm] - real (kind=kind_phys) , intent(out) :: fgev !ground evaporation (w/m2) [+ to atm] - real (kind=kind_phys) , intent(out) :: trad !radiative temperature (k) - real (kind=kind_phys) , intent(out) :: t2m !2 m height air temperature (k) - real (kind=kind_phys) , intent(out) :: ssoil !ground heat flux (w/m2) [+ to soil] - real (kind=kind_phys) , intent(out) :: lathea !latent heat vap./sublimation (j/kg) + integer, dimension(-nsnow+1:nsoil), intent(out) :: imelt !< phase change index [1-melt; 2-freeze] + real (kind=kind_phys) , dimension(-nsnow+1: 0), intent(out) :: snicev !< partial volume ice [m3/m3] + real (kind=kind_phys) , dimension(-nsnow+1: 0), intent(out) :: snliqv !< partial volume liq. water [m3/m3] + real (kind=kind_phys) , dimension(-nsnow+1: 0), intent(out) :: epore !< effective porosity [m3/m3] + real (kind=kind_phys) , intent(out) :: qmelt !< snowmelt [mm/s] + real (kind=kind_phys) , intent(out) :: ponding!< pounding at ground [mm] + real (kind=kind_phys) , intent(out) :: sag !< solar rad. absorbed by ground (w/m2) + real (kind=kind_phys) , intent(out) :: fsa !< tot. absorbed solar radiation (w/m2) + real (kind=kind_phys) , intent(out) :: fsr !< tot. reflected solar radiation (w/m2) + real (kind=kind_phys) , intent(out) :: fira !< total net lw. rad (w/m2) [+ to atm] + real (kind=kind_phys) , intent(out) :: fsh !< total sensible heat (w/m2) [+ to atm] + real (kind=kind_phys) , intent(out) :: fgev !< ground evaporation (w/m2) [+ to atm] + real (kind=kind_phys) , intent(out) :: trad !< radiative temperature (k) + real (kind=kind_phys) , intent(out) :: t2m !< 2 m height air temperature (k) + real (kind=kind_phys) , intent(out) :: ssoil !< ground heat flux (w/m2) [+ to soil] + real (kind=kind_phys) , intent(out) :: lathea !< latent heat vap./sublimation (j/kg) real (kind=kind_phys) , intent(out) :: q2e real (kind=kind_phys) , intent(out) :: emissi - real (kind=kind_phys) , intent(out) :: ch2b !sensible heat conductance, canopy air to zlvl air (m/s) - real (kind=kind_phys), dimension(1:2) , intent(out) :: albsnd !snow albedo (direct) - real (kind=kind_phys), dimension(1:2) , intent(out) :: albsni !snow albedo (diffuse) + real (kind=kind_phys) , intent(out) :: ch2b !< sensible heat conductance, canopy air to zlvl air (m/s) + real (kind=kind_phys), dimension(1:2) , intent(out) :: albsnd !< snow albedo (direct) + real (kind=kind_phys), dimension(1:2) , intent(out) :: albsni !< snow albedo (diffuse) ! local - real (kind=kind_phys) :: ur !wind speed at height zlvl (m/s) - real (kind=kind_phys) :: zlvl !reference height (m) - real (kind=kind_phys) :: rsurf !ground surface resistance (s/m) - real (kind=kind_phys) :: zpd !zero plane displacement (m) - real (kind=kind_phys) :: z0mg !z0 momentum, ground (m) - real (kind=kind_phys) :: emg !ground emissivity - real (kind=kind_phys) :: fire !emitted ir (w/m2) - real (kind=kind_phys), dimension(-nsnow+1:nsoil) :: fact !temporary used in phase change - real (kind=kind_phys), dimension(-nsnow+1:nsoil) :: df !thermal conductivity [w/m/k] - real (kind=kind_phys), dimension(-nsnow+1:nsoil) :: hcpct !heat capacity [j/m3/k] - real (kind=kind_phys) :: gamma !psychrometric constant (pa/k) - real (kind=kind_phys) :: rhsur !raltive humidity in surface soil/snow air space (-) + real (kind=kind_phys) :: ur !< wind speed at height zlvl (m/s) + real (kind=kind_phys) :: zlvl !< reference height (m) + real (kind=kind_phys) :: rsurf !< ground surface resistance (s/m) + real (kind=kind_phys) :: zpd !< zero plane displacement (m) + real (kind=kind_phys) :: z0mg !< z0 momentum, ground (m) + real (kind=kind_phys) :: emg !< ground emissivity + real (kind=kind_phys) :: fire !< emitted ir (w/m2) + real (kind=kind_phys), dimension(-nsnow+1:nsoil) :: fact !< temporary used in phase change + real (kind=kind_phys), dimension(-nsnow+1:nsoil) :: df !< thermal conductivity [w/m/k] + real (kind=kind_phys), dimension(-nsnow+1:nsoil) :: hcpct !< heat capacity [j/m3/k] + real (kind=kind_phys) :: gamma !< psychrometric constant (pa/k) + real (kind=kind_phys) :: rhsur !< raltive humidity in surface soil/snow air space (-) ! --------------------------------------------------------------------------------------------------- @@ -600,29 +601,29 @@ subroutine thermoprop_glacier (nsoil ,nsnow ,isnow ,dzsnso , & !in implicit none ! -------------------------------------------------------------------------------------------------- ! inputs - integer , intent(in) :: nsoil !number of soil layers - integer , intent(in) :: nsnow !maximum no. of snow layers - integer , intent(in) :: isnow !actual no. of snow layers - real (kind=kind_phys) , intent(in) :: dt !time step [s] - real (kind=kind_phys), dimension(-nsnow+1: 0), intent(in) :: snice !snow ice mass (kg/m2) - real (kind=kind_phys), dimension(-nsnow+1: 0), intent(in) :: snliq !snow liq mass (kg/m2) - real (kind=kind_phys), dimension(-nsnow+1:nsoil), intent(in) :: dzsnso !thickness of snow/soil layers [m] - real (kind=kind_phys) , intent(in) :: snowh !snow height [m] + integer , intent(in) :: nsoil !< number of soil layers + integer , intent(in) :: nsnow !< maximum no. of snow layers + integer , intent(in) :: isnow !< actual no. of snow layers + real (kind=kind_phys) , intent(in) :: dt !< time step [s] + real (kind=kind_phys), dimension(-nsnow+1: 0), intent(in) :: snice !< snow ice mass (kg/m2) + real (kind=kind_phys), dimension(-nsnow+1: 0), intent(in) :: snliq !< snow liq mass (kg/m2) + real (kind=kind_phys), dimension(-nsnow+1:nsoil), intent(in) :: dzsnso !< thickness of snow/soil layers [m] + real (kind=kind_phys) , intent(in) :: snowh !< snow height [m] ! outputs - real (kind=kind_phys), dimension(-nsnow+1:nsoil), intent(out) :: df !thermal conductivity [w/m/k] - real (kind=kind_phys), dimension(-nsnow+1:nsoil), intent(out) :: hcpct !heat capacity [j/m3/k] - real (kind=kind_phys), dimension(-nsnow+1: 0), intent(out) :: snicev !partial volume of ice [m3/m3] - real (kind=kind_phys), dimension(-nsnow+1: 0), intent(out) :: snliqv !partial volume of liquid water [m3/m3] - real (kind=kind_phys), dimension(-nsnow+1: 0), intent(out) :: epore !effective porosity [m3/m3] - real (kind=kind_phys), dimension(-nsnow+1:nsoil), intent(out) :: fact !computing energy for phase change + real (kind=kind_phys), dimension(-nsnow+1:nsoil), intent(out) :: df !< thermal conductivity [w/m/k] + real (kind=kind_phys), dimension(-nsnow+1:nsoil), intent(out) :: hcpct !< heat capacity [j/m3/k] + real (kind=kind_phys), dimension(-nsnow+1: 0), intent(out) :: snicev !< partial volume of ice [m3/m3] + real (kind=kind_phys), dimension(-nsnow+1: 0), intent(out) :: snliqv !< partial volume of liquid water [m3/m3] + real (kind=kind_phys), dimension(-nsnow+1: 0), intent(out) :: epore !< effective porosity [m3/m3] + real (kind=kind_phys), dimension(-nsnow+1:nsoil), intent(out) :: fact !< computing energy for phase change ! -------------------------------------------------------------------------------------------------- ! locals integer :: iz, iz2 - real (kind=kind_phys), dimension(-nsnow+1: 0) :: cvsno !volumetric specific heat (j/m3/k) - real (kind=kind_phys), dimension(-nsnow+1: 0) :: tksno !snow thermal conductivity (j/m3/k) - real (kind=kind_phys) :: zmid !mid-point soil depth + real (kind=kind_phys), dimension(-nsnow+1: 0) :: cvsno !< volumetric specific heat (j/m3/k) + real (kind=kind_phys), dimension(-nsnow+1: 0) :: tksno !< snow thermal conductivity (j/m3/k) + real (kind=kind_phys) :: zmid !< mid-point soil depth ! -------------------------------------------------------------------------------------------------- ! compute snow thermal conductivity and heat capacity @@ -665,6 +666,7 @@ end subroutine thermoprop_glacier ! ================================================================================================== ! -------------------------------------------------------------------------------------------------- !>\ingroup NoahMP_LSM +!! snow bulk density, volumetric capacity, and thermal conductivity subroutine csnow_glacier (isnow ,nsnow ,nsoil ,snice ,snliq ,dzsnso , & !in tksno ,cvsno ,snicev ,snliqv ,epore ) !out ! -------------------------------------------------------------------------------------------------- @@ -674,25 +676,25 @@ subroutine csnow_glacier (isnow ,nsnow ,nsoil ,snice ,snliq ,dzsnso , !--------------------------------------------------------------------------------------------------- ! inputs - integer, intent(in) :: isnow !number of snow layers (-) - integer , intent(in) :: nsnow !maximum no. of snow layers - integer , intent(in) :: nsoil !number of soil layers - real (kind=kind_phys), dimension(-nsnow+1: 0), intent(in) :: snice !snow ice mass (kg/m2) - real (kind=kind_phys), dimension(-nsnow+1: 0), intent(in) :: snliq !snow liq mass (kg/m2) - real (kind=kind_phys), dimension(-nsnow+1:nsoil), intent(in) :: dzsnso !snow/soil layer thickness [m] + integer, intent(in) :: isnow !< number of snow layers (-) + integer , intent(in) :: nsnow !< maximum no. of snow layers + integer , intent(in) :: nsoil !< number of soil layers + real (kind=kind_phys), dimension(-nsnow+1: 0), intent(in) :: snice !< snow ice mass (kg/m2) + real (kind=kind_phys), dimension(-nsnow+1: 0), intent(in) :: snliq !< snow liq mass (kg/m2) + real (kind=kind_phys), dimension(-nsnow+1:nsoil), intent(in) :: dzsnso !< snow/soil layer thickness [m] ! outputs - real (kind=kind_phys), dimension(-nsnow+1: 0), intent(out) :: cvsno !volumetric specific heat (j/m3/k) - real (kind=kind_phys), dimension(-nsnow+1: 0), intent(out) :: tksno !thermal conductivity (w/m/k) - real (kind=kind_phys), dimension(-nsnow+1: 0), intent(out) :: snicev !partial volume of ice [m3/m3] - real (kind=kind_phys), dimension(-nsnow+1: 0), intent(out) :: snliqv !partial volume of liquid water [m3/m3] - real (kind=kind_phys), dimension(-nsnow+1: 0), intent(out) :: epore !effective porosity [m3/m3] + real (kind=kind_phys), dimension(-nsnow+1: 0), intent(out) :: cvsno !< volumetric specific heat (j/m3/k) + real (kind=kind_phys), dimension(-nsnow+1: 0), intent(out) :: tksno !< thermal conductivity (w/m/k) + real (kind=kind_phys), dimension(-nsnow+1: 0), intent(out) :: snicev !< partial volume of ice [m3/m3] + real (kind=kind_phys), dimension(-nsnow+1: 0), intent(out) :: snliqv !< partial volume of liquid water [m3/m3] + real (kind=kind_phys), dimension(-nsnow+1: 0), intent(out) :: epore !< effective porosity [m3/m3] ! locals integer :: iz - real (kind=kind_phys), dimension(-nsnow+1: 0) :: bdsnoi !bulk density of snow(kg/m3) + real (kind=kind_phys), dimension(-nsnow+1: 0) :: bdsnoi !< bulk density of snow(kg/m3) !--------------------------------------------------------------------------------------------------- ! thermal capacity of snow @@ -730,35 +732,35 @@ subroutine radiation_glacier (dt ,tg ,sneqvo ,sneqv ,cosz , & !i implicit none ! -------------------------------------------------------------------------------------------------- ! input - real (kind=kind_phys), intent(in) :: dt !time step [s] - real (kind=kind_phys), intent(in) :: tg !ground temperature (k) - real (kind=kind_phys), intent(in) :: sneqvo !snow mass at last time step(mm) - real (kind=kind_phys), intent(in) :: sneqv !snow mass (mm) - real (kind=kind_phys), intent(in) :: cosz !cosine solar zenith angle (0-1) - real (kind=kind_phys), intent(in) :: qsnow !snowfall (mm/s) - real (kind=kind_phys), dimension(1:2) , intent(in) :: solad !incoming direct solar radiation (w/m2) - real (kind=kind_phys), dimension(1:2) , intent(in) :: solai !incoming diffuse solar radiation (w/m2) + real (kind=kind_phys), intent(in) :: dt !< time step [s] + real (kind=kind_phys), intent(in) :: tg !< ground temperature (k) + real (kind=kind_phys), intent(in) :: sneqvo !< snow mass at last time step(mm) + real (kind=kind_phys), intent(in) :: sneqv !< snow mass (mm) + real (kind=kind_phys), intent(in) :: cosz !< cosine solar zenith angle (0-1) + real (kind=kind_phys), intent(in) :: qsnow !< snowfall (mm/s) + real (kind=kind_phys), dimension(1:2) , intent(in) :: solad !< incoming direct solar radiation (w/m2) + real (kind=kind_phys), dimension(1:2) , intent(in) :: solai !< incoming diffuse solar radiation (w/m2) ! inout - real (kind=kind_phys), intent(inout) :: albold !snow albedo at last time step (class type) - real (kind=kind_phys), intent(inout) :: tauss !non-dimensional snow age - real (kind=kind_phys), dimension(1:2) :: albsnd !snow albedo (direct) - real (kind=kind_phys), dimension(1:2) :: albsni !snow albedo (diffuse) + real (kind=kind_phys), intent(inout) :: albold !< snow albedo at last time step (class type) + real (kind=kind_phys), intent(inout) :: tauss !< non-dimensional snow age + real (kind=kind_phys), dimension(1:2) :: albsnd !< snow albedo (direct) + real (kind=kind_phys), dimension(1:2) :: albsni !< snow albedo (diffuse) ! output - real (kind=kind_phys), intent(out) :: sag !solar radiation absorbed by ground (w/m2) - real (kind=kind_phys), intent(out) :: fsr !total reflected solar radiation (w/m2) - real (kind=kind_phys), intent(out) :: fsa !total absorbed solar radiation (w/m2) + real (kind=kind_phys), intent(out) :: sag !< solar radiation absorbed by ground (w/m2) + real (kind=kind_phys), intent(out) :: fsr !< total reflected solar radiation (w/m2) + real (kind=kind_phys), intent(out) :: fsa !< total absorbed solar radiation (w/m2) ! local - integer :: ib !number of radiation bands - integer :: nband !number of radiation bands - real (kind=kind_phys) :: fage !snow age function (0 - new snow) - real (kind=kind_phys) :: alb !current class albedo - real (kind=kind_phys) :: abs !temporary absorbed rad - real (kind=kind_phys) :: ref !temporary reflected rad - real (kind=kind_phys) :: fsno !snow-cover fraction, = 1 if any snow - real (kind=kind_phys), dimension(1:2) :: albice !albedo land ice: 1=vis, 2=nir + integer :: ib !< number of radiation bands + integer :: nband !< number of radiation bands + real (kind=kind_phys) :: fage !< snow age function (0 - new snow) + real (kind=kind_phys) :: alb !< current class albedo + real (kind=kind_phys) :: abs !< temporary absorbed rad + real (kind=kind_phys) :: ref !< temporary reflected rad + real (kind=kind_phys) :: fsno !< snow-cover fraction, = 1 if any snow + real (kind=kind_phys), dimension(1:2) :: albice !< albedo land ice: 1=vis, 2=nir real (kind=kind_phys),parameter :: mpe = 1.e-6 @@ -820,27 +822,27 @@ subroutine snow_age_glacier (dt,tg,sneqvo,sneqv,tauss,fage) ! from bats ! ------------------------ input/output variables -------------------------------------------------- !input - real (kind=kind_phys), intent(in) :: dt !main time step (s) - real (kind=kind_phys), intent(in) :: tg !ground temperature (k) - real (kind=kind_phys), intent(in) :: sneqvo !snow mass at last time step(mm) - real (kind=kind_phys), intent(in) :: sneqv !snow water per unit ground area (mm) + real (kind=kind_phys), intent(in) :: dt !< main time step (s) + real (kind=kind_phys), intent(in) :: tg !< ground temperature (k) + real (kind=kind_phys), intent(in) :: sneqvo !< snow mass at last time step(mm) + real (kind=kind_phys), intent(in) :: sneqv !< snow water per unit ground area (mm) ! inout - real (kind=kind_phys), intent(inout) :: tauss !non-dimensional snow age + real (kind=kind_phys), intent(inout) :: tauss !< non-dimensional snow age !output - real (kind=kind_phys), intent(out) :: fage !snow age + real (kind=kind_phys), intent(out) :: fage !< snow age !local - real (kind=kind_phys) :: tage !total aging effects - real (kind=kind_phys) :: age1 !effects of grain growth due to vapor diffusion - real (kind=kind_phys) :: age2 !effects of grain growth at freezing of melt water - real (kind=kind_phys) :: age3 !effects of soot - real (kind=kind_phys) :: dela !temporary variable - real (kind=kind_phys) :: sge !temporary variable - real (kind=kind_phys) :: dels !temporary variable - real (kind=kind_phys) :: dela0 !temporary variable - real (kind=kind_phys) :: arg !temporary variable + real (kind=kind_phys) :: tage !< total aging effects + real (kind=kind_phys) :: age1 !< effects of grain growth due to vapor diffusion + real (kind=kind_phys) :: age2 !< effects of grain growth at freezing of melt water + real (kind=kind_phys) :: age3 !< effects of soot + real (kind=kind_phys) :: dela !< temporary variable + real (kind=kind_phys) :: sge !< temporary variable + real (kind=kind_phys) :: dels !< temporary variable + real (kind=kind_phys) :: dela0 !< temporary variable + real (kind=kind_phys) :: arg !< temporary variable ! see yang et al. (1997) j.of climate for detail. !--------------------------------------------------------------------------------------------------- @@ -874,26 +876,26 @@ subroutine snowalb_bats_glacier (nband,cosz,fage,albsnd,albsni) ! -------------------------------------------------------------------------------------------------- ! input - integer,intent(in) :: nband !number of waveband classes + integer,intent(in) :: nband !< number of waveband classes - real (kind=kind_phys),intent(in) :: cosz !cosine solar zenith angle - real (kind=kind_phys),intent(in) :: fage !snow age correction + real (kind=kind_phys),intent(in) :: cosz !< cosine solar zenith angle + real (kind=kind_phys),intent(in) :: fage !< snow age correction ! output - real (kind=kind_phys), dimension(1:2),intent(out) :: albsnd !snow albedo for direct(1=vis, 2=nir) - real (kind=kind_phys), dimension(1:2),intent(out) :: albsni !snow albedo for diffuse + real (kind=kind_phys), dimension(1:2),intent(out) :: albsnd !< snow albedo for direct(1=vis, 2=nir) + real (kind=kind_phys), dimension(1:2),intent(out) :: albsni !< snow albedo for diffuse ! --------------------------------------------------------------------------------------------- - real (kind=kind_phys) :: fzen !zenith angle correction - real (kind=kind_phys) :: cf1 !temperary variable - real (kind=kind_phys) :: sl2 !2.*sl - real (kind=kind_phys) :: sl1 !1/sl - real (kind=kind_phys) :: sl !adjustable parameter - real (kind=kind_phys), parameter :: c1 = 0.2 !default in bats - real (kind=kind_phys), parameter :: c2 = 0.5 !default in bats -! real (kind=kind_phys), parameter :: c1 = 0.2 * 2. ! double the default to match sleepers river's -! real (kind=kind_phys), parameter :: c2 = 0.5 * 2. ! snow surface albedo (double aging effects) + real (kind=kind_phys) :: fzen !< zenith angle correction + real (kind=kind_phys) :: cf1 !< temperary variable + real (kind=kind_phys) :: sl2 !< 2.*sl + real (kind=kind_phys) :: sl1 !< 1/sl + real (kind=kind_phys) :: sl !< adjustable parameter + real (kind=kind_phys), parameter :: c1 = 0.2 !< default in bats + real (kind=kind_phys), parameter :: c2 = 0.5 !< default in bats +! real (kind=kind_phys), parameter :: c1 = 0.2 * 2. !< double the default to match sleepers river's +! real (kind=kind_phys), parameter :: c2 = 0.5 * 2. !< snow surface albedo (double aging effects) ! --------------------------------------------------------------------------------------------- ! zero albedos for all points @@ -924,19 +926,19 @@ subroutine snowalb_class_glacier (nband,qsnow,dt,alb,albold,albsnd,albsni) ! -------------------------------------------------------------------------------------------------- ! input - integer,intent(in) :: nband !number of waveband classes + integer,intent(in) :: nband !< number of waveband classes - real (kind=kind_phys),intent(in) :: qsnow !snowfall (mm/s) - real (kind=kind_phys),intent(in) :: dt !time step (sec) - real (kind=kind_phys),intent(in) :: albold !snow albedo at last time step + real (kind=kind_phys),intent(in) :: qsnow !< snowfall (mm/s) + real (kind=kind_phys),intent(in) :: dt !< time step (sec) + real (kind=kind_phys),intent(in) :: albold !< snow albedo at last time step ! in & out real (kind=kind_phys), intent(inout) :: alb ! ! output - real (kind=kind_phys), dimension(1:2),intent(out) :: albsnd !snow albedo for direct(1=vis, 2=nir) - real (kind=kind_phys), dimension(1:2),intent(out) :: albsni !snow albedo for diffuse + real (kind=kind_phys), dimension(1:2),intent(out) :: albsnd !< snow albedo for direct(1=vis, 2=nir) + real (kind=kind_phys), dimension(1:2),intent(out) :: albsni !< snow albedo for diffuse ! --------------------------------------------------------------------------------------------- ! --------------------------------------------------------------------------------------------- @@ -964,6 +966,8 @@ subroutine snowalb_class_glacier (nband,qsnow,dt,alb,albold,albsnd,albsni) end subroutine snowalb_class_glacier ! ================================================================================================== !>\ingroup NoahMP_LSM +!! use newton-raphson iteration to solve ground (tg) temperature +!! that balances the surface energy budgets for glacier. subroutine glacier_flux (nsoil ,nsnow ,emg ,isnow ,df ,dzsnso ,z0m , & !in zlvl ,zpd ,qair ,sfctmp ,rhoair ,sfcprs , & !in ur ,gamma ,rsurf ,lwdn ,rhsur ,smc , & !in @@ -988,37 +992,37 @@ subroutine glacier_flux (nsoil ,nsnow ,emg ,isnow ,df ,dzsnso ,z implicit none ! ---------------------------------------------------------------------- ! input - integer, intent(in) :: nsnow !maximum no. of snow layers - integer, intent(in) :: nsoil !number of soil layers - real (kind=kind_phys), intent(in) :: emg !ground emissivity - integer, intent(in) :: isnow !actual no. of snow layers - real (kind=kind_phys), dimension(-nsnow+1:nsoil), intent(in) :: df !thermal conductivity of snow/soil (w/m/k) - real (kind=kind_phys), dimension(-nsnow+1:nsoil), intent(in) :: dzsnso !thickness of snow/soil layers (m) - real (kind=kind_phys), intent(in) :: z0m !roughness length, momentum, ground (m) - real (kind=kind_phys), intent(in) :: zlvl !reference height (m) - real (kind=kind_phys), intent(in) :: zpd !zero plane displacement (m) - real (kind=kind_phys), intent(in) :: qair !specific humidity at height zlvl (kg/kg) - real (kind=kind_phys), intent(in) :: sfctmp !air temperature at reference height (k) - real (kind=kind_phys), intent(in) :: rhoair !density air (kg/m3) - real (kind=kind_phys), intent(in) :: sfcprs !density air (kg/m3) - real (kind=kind_phys), intent(in) :: ur !wind speed at height zlvl (m/s) - real (kind=kind_phys), intent(in) :: gamma !psychrometric constant (pa/k) - real (kind=kind_phys), intent(in) :: rsurf !ground surface resistance (s/m) - real (kind=kind_phys), intent(in) :: lwdn !atmospheric longwave radiation (w/m2) - real (kind=kind_phys), intent(in) :: rhsur !raltive humidity in surface soil/snow air space (-) - real (kind=kind_phys), intent(in) :: eair !vapor pressure air at height (pa) - real (kind=kind_phys), dimension(-nsnow+1:nsoil), intent(in) :: stc !soil/snow temperature (k) - real (kind=kind_phys), dimension( 1:nsoil), intent(in) :: smc !soil moisture - real (kind=kind_phys), dimension( 1:nsoil), intent(in) :: sh2o !soil liquid water - real (kind=kind_phys), intent(in) :: sag !solar radiation absorbed by ground (w/m2) - real (kind=kind_phys), intent(in) :: snowh !actual snow depth [m] - real (kind=kind_phys), intent(in) :: lathea !latent heat of vaporization/subli (j/kg) + integer, intent(in) :: nsnow !< maximum no. of snow layers + integer, intent(in) :: nsoil !< number of soil layers + real (kind=kind_phys), intent(in) :: emg !< ground emissivity + integer, intent(in) :: isnow !< actual no. of snow layers + real (kind=kind_phys), dimension(-nsnow+1:nsoil), intent(in) :: df !< thermal conductivity of snow/soil (w/m/k) + real (kind=kind_phys), dimension(-nsnow+1:nsoil), intent(in) :: dzsnso !< thickness of snow/soil layers (m) + real (kind=kind_phys), intent(in) :: z0m !< roughness length, momentum, ground (m) + real (kind=kind_phys), intent(in) :: zlvl !< reference height (m) + real (kind=kind_phys), intent(in) :: zpd !< zero plane displacement (m) + real (kind=kind_phys), intent(in) :: qair !< specific humidity at height zlvl (kg/kg) + real (kind=kind_phys), intent(in) :: sfctmp !< air temperature at reference height (k) + real (kind=kind_phys), intent(in) :: rhoair !< density air (kg/m3) + real (kind=kind_phys), intent(in) :: sfcprs !< density air (kg/m3) + real (kind=kind_phys), intent(in) :: ur !< wind speed at height zlvl (m/s) + real (kind=kind_phys), intent(in) :: gamma !< psychrometric constant (pa/k) + real (kind=kind_phys), intent(in) :: rsurf !< ground surface resistance (s/m) + real (kind=kind_phys), intent(in) :: lwdn !< atmospheric longwave radiation (w/m2) + real (kind=kind_phys), intent(in) :: rhsur !< raltive humidity in surface soil/snow air space (-) + real (kind=kind_phys), intent(in) :: eair !< vapor pressure air at height (pa) + real (kind=kind_phys), dimension(-nsnow+1:nsoil), intent(in) :: stc !< soil/snow temperature (k) + real (kind=kind_phys), dimension( 1:nsoil), intent(in) :: smc !< soil moisture + real (kind=kind_phys), dimension( 1:nsoil), intent(in) :: sh2o !< soil liquid water + real (kind=kind_phys), intent(in) :: sag !< solar radiation absorbed by ground (w/m2) + real (kind=kind_phys), intent(in) :: snowh !< actual snow depth [m] + real (kind=kind_phys), intent(in) :: lathea !< latent heat of vaporization/subli (j/kg) ! input/output - real (kind=kind_phys), intent(inout) :: cm !momentum drag coefficient - real (kind=kind_phys), intent(inout) :: ch !sensible heat exchange coefficient - real (kind=kind_phys), intent(inout) :: tgb !ground temperature (k) - real (kind=kind_phys), intent(inout) :: qsfc !mixing ratio at lowest model layer + real (kind=kind_phys), intent(inout) :: cm !< momentum drag coefficient + real (kind=kind_phys), intent(inout) :: ch !< sensible heat exchange coefficient + real (kind=kind_phys), intent(inout) :: tgb !< ground temperature (k) + real (kind=kind_phys), intent(inout) :: qsfc !< mixing ratio at lowest model layer #ifdef CCPP character(len=*), intent(inout) :: errmsg @@ -1027,49 +1031,49 @@ subroutine glacier_flux (nsoil ,nsnow ,emg ,isnow ,df ,dzsnso ,z ! output ! -sab + irb[tg] + shb[tg] + evb[tg] + ghb[tg] = 0 - real (kind=kind_phys), intent(out) :: irb !net longwave rad (w/m2) [+ to atm] - real (kind=kind_phys), intent(out) :: shb !sensible heat flux (w/m2) [+ to atm] - real (kind=kind_phys), intent(out) :: evb !latent heat flux (w/m2) [+ to atm] - real (kind=kind_phys), intent(out) :: ghb !ground heat flux (w/m2) [+ to soil] - real (kind=kind_phys), intent(out) :: t2mb !2 m height air temperature (k) - real (kind=kind_phys), intent(out) :: q2b !bare ground heat conductance - real (kind=kind_phys), intent(out) :: ehb2 !sensible heat conductance for diagnostics + real (kind=kind_phys), intent(out) :: irb !< net longwave rad (w/m2) [+ to atm] + real (kind=kind_phys), intent(out) :: shb !< sensible heat flux (w/m2) [+ to atm] + real (kind=kind_phys), intent(out) :: evb !< latent heat flux (w/m2) [+ to atm] + real (kind=kind_phys), intent(out) :: ghb !< ground heat flux (w/m2) [+ to soil] + real (kind=kind_phys), intent(out) :: t2mb !< 2 m height air temperature (k) + real (kind=kind_phys), intent(out) :: q2b !< bare ground heat conductance + real (kind=kind_phys), intent(out) :: ehb2 !< sensible heat conductance for diagnostics ! local variables - integer :: niterb !number of iterations for surface temperature - real (kind=kind_phys) :: mpe !prevents overflow error if division by zero - real (kind=kind_phys) :: dtg !change in tg, last iteration (k) - integer :: mozsgn !number of times moz changes sign - real (kind=kind_phys) :: mozold !monin-obukhov stability parameter from prior iteration - real (kind=kind_phys) :: fm2 !monin-obukhov momentum adjustment at 2m - real (kind=kind_phys) :: fh2 !monin-obukhov heat adjustment at 2m - real (kind=kind_phys) :: ch2 !surface exchange at 2m - real (kind=kind_phys) :: h !temporary sensible heat flux (w/m2) - real (kind=kind_phys) :: fv !friction velocity (m/s) - real (kind=kind_phys) :: cir !coefficients for ir as function of ts**4 - real (kind=kind_phys) :: cgh !coefficients for st as function of ts - real (kind=kind_phys) :: csh !coefficients for sh as function of ts - real (kind=kind_phys) :: cev !coefficients for ev as function of esat[ts] - real (kind=kind_phys) :: cq2b ! - integer :: iter !iteration index - real (kind=kind_phys) :: z0h !roughness length, sensible heat, ground (m) - real (kind=kind_phys) :: moz !monin-obukhov stability parameter - real (kind=kind_phys) :: fm !momentum stability correction, weighted by prior iters - real (kind=kind_phys) :: fh !sen heat stability correction, weighted by prior iters - real (kind=kind_phys) :: ramb !aerodynamic resistance for momentum (s/m) - real (kind=kind_phys) :: rahb !aerodynamic resistance for sensible heat (s/m) - real (kind=kind_phys) :: rawb !aerodynamic resistance for water vapor (s/m) - real (kind=kind_phys) :: estg !saturation vapor pressure at tg (pa) - real (kind=kind_phys) :: destg !d(es)/dt at tg (pa/k) - real (kind=kind_phys) :: esatw !es for water - real (kind=kind_phys) :: esati !es for ice - real (kind=kind_phys) :: dsatw !d(es)/dt at tg (pa/k) for water - real (kind=kind_phys) :: dsati !d(es)/dt at tg (pa/k) for ice - real (kind=kind_phys) :: a !temporary calculation - real (kind=kind_phys) :: b !temporary calculation - real (kind=kind_phys) :: t, tdc !kelvin to degree celsius with limit -50 to +50 - real (kind=kind_phys), dimension( 1:nsoil) :: sice !soil ice + integer :: niterb !< number of iterations for surface temperature + real (kind=kind_phys) :: mpe !< prevents overflow error if division by zero + real (kind=kind_phys) :: dtg !< change in tg, last iteration (k) + integer :: mozsgn !< number of times moz changes sign + real (kind=kind_phys) :: mozold !< monin-obukhov stability parameter from prior iteration + real (kind=kind_phys) :: fm2 !< monin-obukhov momentum adjustment at 2m + real (kind=kind_phys) :: fh2 !< monin-obukhov heat adjustment at 2m + real (kind=kind_phys) :: ch2 !< surface exchange at 2m + real (kind=kind_phys) :: h !< temporary sensible heat flux (w/m2) + real (kind=kind_phys) :: fv !< friction velocity (m/s) + real (kind=kind_phys) :: cir !< coefficients for ir as function of ts**4 + real (kind=kind_phys) :: cgh !< coefficients for st as function of ts + real (kind=kind_phys) :: csh !< coefficients for sh as function of ts + real (kind=kind_phys) :: cev !< coefficients for ev as function of esat[ts] + real (kind=kind_phys) :: cq2b !< + integer :: iter !< iteration index + real (kind=kind_phys) :: z0h !< roughness length, sensible heat, ground (m) + real (kind=kind_phys) :: moz !< monin-obukhov stability parameter + real (kind=kind_phys) :: fm !< momentum stability correction, weighted by prior iters + real (kind=kind_phys) :: fh !< sen heat stability correction, weighted by prior iters + real (kind=kind_phys) :: ramb !< aerodynamic resistance for momentum (s/m) + real (kind=kind_phys) :: rahb !< aerodynamic resistance for sensible heat (s/m) + real (kind=kind_phys) :: rawb !< aerodynamic resistance for water vapor (s/m) + real (kind=kind_phys) :: estg !< saturation vapor pressure at tg (pa) + real (kind=kind_phys) :: destg !< d(es)/dt at tg (pa/k) + real (kind=kind_phys) :: esatw !< es for water + real (kind=kind_phys) :: esati !< es for ice + real (kind=kind_phys) :: dsatw !< d(es)/dt at tg (pa/k) for water + real (kind=kind_phys) :: dsati !< d(es)/dt at tg (pa/k) for ice + real (kind=kind_phys) :: a !< temporary calculation + real (kind=kind_phys) :: b !< temporary calculation + real (kind=kind_phys) :: t, tdc !< kelvin to degree celsius with limit -50 to +50 + real (kind=kind_phys), dimension( 1:nsoil) :: sice !< soil ice tdc(t) = min( 50., max(-50.,(t-tfrz)) ) @@ -1201,27 +1205,27 @@ end subroutine glacier_flux !>\ingroup NoahMP_LSM subroutine esat(t, esw, esi, desw, desi) !--------------------------------------------------------------------------------------------------- -! use polynomials to calculate saturation vapor pressure and derivative with -! respect to temperature: over water when t > 0 c and over ice when t <= 0 c +!> use polynomials to calculate saturation vapor pressure and derivative with +!! respect to temperature: over water when t > 0 c and over ice when t <= 0 c implicit none !--------------------------------------------------------------------------------------------------- ! in - real (kind=kind_phys), intent(in) :: t !temperature + real (kind=kind_phys), intent(in) :: t !< temperature !out - real (kind=kind_phys), intent(out) :: esw !saturation vapor pressure over water (pa) - real (kind=kind_phys), intent(out) :: esi !saturation vapor pressure over ice (pa) - real (kind=kind_phys), intent(out) :: desw !d(esat)/dt over water (pa/k) - real (kind=kind_phys), intent(out) :: desi !d(esat)/dt over ice (pa/k) + real (kind=kind_phys), intent(out) :: esw !< saturation vapor pressure over water (pa) + real (kind=kind_phys), intent(out) :: esi !< saturation vapor pressure over ice (pa) + real (kind=kind_phys), intent(out) :: desw !< d(esat)/dt over water (pa/k) + real (kind=kind_phys), intent(out) :: desi !< d(esat)/dt over ice (pa/k) ! local - real (kind=kind_phys) :: a0,a1,a2,a3,a4,a5,a6 !coefficients for esat over water - real (kind=kind_phys) :: b0,b1,b2,b3,b4,b5,b6 !coefficients for esat over ice - real (kind=kind_phys) :: c0,c1,c2,c3,c4,c5,c6 !coefficients for dsat over water - real (kind=kind_phys) :: d0,d1,d2,d3,d4,d5,d6 !coefficients for dsat over ice + real (kind=kind_phys) :: a0,a1,a2,a3,a4,a5,a6 !< coefficients for esat over water + real (kind=kind_phys) :: b0,b1,b2,b3,b4,b5,b6 !< coefficients for esat over ice + real (kind=kind_phys) :: c0,c1,c2,c3,c4,c5,c6 !< coefficients for dsat over water + real (kind=kind_phys) :: d0,d1,d2,d3,d4,d5,d6 !< coefficients for dsat over ice parameter (a0=6.107799961 , a1=4.436518521e-01, & a2=1.428945805e-02, a3=2.650648471e-04, & @@ -1251,6 +1255,7 @@ subroutine esat(t, esw, esi, desw, desi) end subroutine esat ! ================================================================================================== !>\ingroup NoahMP_LSM +!! compute surface drag coefficient cm for momentum and ch for heat subroutine sfcdif1_glacier(iter ,zlvl ,zpd ,z0h ,z0m , & !in qair ,sfctmp ,h ,rhoair ,mpe ,ur , & !in #ifdef CCPP @@ -1265,25 +1270,25 @@ subroutine sfcdif1_glacier(iter ,zlvl ,zpd ,z0h ,z0m , & !in implicit none ! ------------------------------------------------------------------------------------------------- ! inputs - integer, intent(in) :: iter !iteration index - real (kind=kind_phys), intent(in) :: zlvl !reference height (m) - real (kind=kind_phys), intent(in) :: zpd !zero plane displacement (m) - real (kind=kind_phys), intent(in) :: z0h !roughness length, sensible heat, ground (m) - real (kind=kind_phys), intent(in) :: z0m !roughness length, momentum, ground (m) - real (kind=kind_phys), intent(in) :: qair !specific humidity at reference height (kg/kg) - real (kind=kind_phys), intent(in) :: sfctmp !temperature at reference height (k) - real (kind=kind_phys), intent(in) :: h !sensible heat flux (w/m2) [+ to atm] - real (kind=kind_phys), intent(in) :: rhoair !density air (kg/m**3) - real (kind=kind_phys), intent(in) :: mpe !prevents overflow error if division by zero - real (kind=kind_phys), intent(in) :: ur !wind speed (m/s) + integer, intent(in) :: iter !< iteration index + real (kind=kind_phys), intent(in) :: zlvl !< reference height (m) + real (kind=kind_phys), intent(in) :: zpd !< zero plane displacement (m) + real (kind=kind_phys), intent(in) :: z0h !< roughness length, sensible heat, ground (m) + real (kind=kind_phys), intent(in) :: z0m !< roughness length, momentum, ground (m) + real (kind=kind_phys), intent(in) :: qair !< specific humidity at reference height (kg/kg) + real (kind=kind_phys), intent(in) :: sfctmp !< temperature at reference height (k) + real (kind=kind_phys), intent(in) :: h !< sensible heat flux (w/m2) [+ to atm] + real (kind=kind_phys), intent(in) :: rhoair !< density air (kg/m**3) + real (kind=kind_phys), intent(in) :: mpe !< prevents overflow error if division by zero + real (kind=kind_phys), intent(in) :: ur !< wind speed (m/s) ! in & out - real (kind=kind_phys), intent(inout) :: moz !monin-obukhov stability (z/l) - integer, intent(inout) :: mozsgn !number of times moz changes sign - real (kind=kind_phys), intent(inout) :: fm !momentum stability correction, weighted by prior iters - real (kind=kind_phys), intent(inout) :: fh !sen heat stability correction, weighted by prior iters - real (kind=kind_phys), intent(inout) :: fm2 !sen heat stability correction, weighted by prior iters - real (kind=kind_phys), intent(inout) :: fh2 !sen heat stability correction, weighted by prior iters + real (kind=kind_phys), intent(inout) :: moz !< monin-obukhov stability (z/l) + integer, intent(inout) :: mozsgn !< number of times moz changes sign + real (kind=kind_phys), intent(inout) :: fm !< momentum stability correction, weighted by prior iters + real (kind=kind_phys), intent(inout) :: fh !< sen heat stability correction, weighted by prior iters + real (kind=kind_phys), intent(inout) :: fm2 !< sen heat stability correction, weighted by prior iters + real (kind=kind_phys), intent(inout) :: fh2 !< sen heat stability correction, weighted by prior iters #ifdef CCPP character(len=*), intent(inout) :: errmsg @@ -1291,26 +1296,26 @@ subroutine sfcdif1_glacier(iter ,zlvl ,zpd ,z0h ,z0m , & !in #endif ! outputs - real (kind=kind_phys), intent(out) :: fv !friction velocity (m/s) - real (kind=kind_phys), intent(out) :: cm !drag coefficient for momentum - real (kind=kind_phys), intent(out) :: ch !drag coefficient for heat - real (kind=kind_phys), intent(out) :: ch2 !drag coefficient for heat + real (kind=kind_phys), intent(out) :: fv !< friction velocity (m/s) + real (kind=kind_phys), intent(out) :: cm !< drag coefficient for momentum + real (kind=kind_phys), intent(out) :: ch !< drag coefficient for heat + real (kind=kind_phys), intent(out) :: ch2 !< drag coefficient for heat ! locals - real (kind=kind_phys) :: mozold !monin-obukhov stability parameter from prior iteration - real (kind=kind_phys) :: tmpcm !temporary calculation for cm - real (kind=kind_phys) :: tmpch !temporary calculation for ch - real (kind=kind_phys) :: mol !monin-obukhov length (m) - real (kind=kind_phys) :: tvir !temporary virtual temperature (k) - real (kind=kind_phys) :: tmp1,tmp2,tmp3 !temporary calculation - real (kind=kind_phys) :: fmnew !stability correction factor, momentum, for current moz - real (kind=kind_phys) :: fhnew !stability correction factor, sen heat, for current moz - real (kind=kind_phys) :: moz2 !2/l - real (kind=kind_phys) :: tmpcm2 !temporary calculation for cm2 - real (kind=kind_phys) :: tmpch2 !temporary calculation for ch2 - real (kind=kind_phys) :: fm2new !stability correction factor, momentum, for current moz - real (kind=kind_phys) :: fh2new !stability correction factor, sen heat, for current moz - real (kind=kind_phys) :: tmp12,tmp22,tmp32 !temporary calculation + real (kind=kind_phys) :: mozold !< monin-obukhov stability parameter from prior iteration + real (kind=kind_phys) :: tmpcm !< temporary calculation for cm + real (kind=kind_phys) :: tmpch !< temporary calculation for ch + real (kind=kind_phys) :: mol !< monin-obukhov length (m) + real (kind=kind_phys) :: tvir !< temporary virtual temperature (k) + real (kind=kind_phys) :: tmp1,tmp2,tmp3 !< temporary calculation + real (kind=kind_phys) :: fmnew !< stability correction factor, momentum, for current moz + real (kind=kind_phys) :: fhnew !< stability correction factor, sen heat, for current moz + real (kind=kind_phys) :: moz2 !< 2/l + real (kind=kind_phys) :: tmpcm2 !< temporary calculation for cm2 + real (kind=kind_phys) :: tmpch2 !< temporary calculation for ch2 + real (kind=kind_phys) :: fm2new !< stability correction factor, momentum, for current moz + real (kind=kind_phys) :: fh2new !< stability correction factor, sen heat, for current moz + real (kind=kind_phys) :: tmp12,tmp22,tmp32 !< temporary calculation real (kind=kind_phys) :: cmfm, chfh, cm2fm2, ch2fh2 @@ -1430,26 +1435,26 @@ subroutine tsnosoi_glacier (nsoil ,nsnow ,isnow ,dt ,tbot , & !in hcpct , & !in stc ) !inout ! -------------------------------------------------------------------------------------------------- -! compute snow (up to 3l) and soil (4l) temperature. note that snow temperatures -! during melting season may exceed melting point (tfrz) but later in phasechange -! subroutine the snow temperatures are reset to tfrz for melting snow. +!> compute snow (up to 3l) and soil (4l) temperature. note that snow temperatures +!! during melting season may exceed melting point (tfrz) but later in phasechange +!! subroutine the snow temperatures are reset to tfrz for melting snow. ! -------------------------------------------------------------------------------------------------- implicit none ! -------------------------------------------------------------------------------------------------- !input - integer, intent(in) :: nsoil !no of soil layers (4) - integer, intent(in) :: nsnow !maximum no of snow layers (3) - integer, intent(in) :: isnow !actual no of snow layers + integer, intent(in) :: nsoil !< no of soil layers (4) + integer, intent(in) :: nsnow !< maximum no of snow layers (3) + integer, intent(in) :: isnow !< actual no of snow layers - real (kind=kind_phys), intent(in) :: dt !time step (s) - real (kind=kind_phys), intent(in) :: tbot ! - real (kind=kind_phys), intent(in) :: ssoil !ground heat flux (w/m2) - real (kind=kind_phys), intent(in) :: snowh !snow depth (m) - real (kind=kind_phys), intent(in) :: zbot !from soil surface (m) - real (kind=kind_phys), dimension(-nsnow+1:nsoil), intent(in) :: zsnso !layer-bot. depth from snow surf.(m) - real (kind=kind_phys), dimension(-nsnow+1:nsoil), intent(in) :: df !thermal conductivity - real (kind=kind_phys), dimension(-nsnow+1:nsoil), intent(in) :: hcpct !heat capacity (j/m3/k) + real (kind=kind_phys), intent(in) :: dt !< time step (s) + real (kind=kind_phys), intent(in) :: tbot !< + real (kind=kind_phys), intent(in) :: ssoil !< ground heat flux (w/m2) + real (kind=kind_phys), intent(in) :: snowh !< snow depth (m) + real (kind=kind_phys), intent(in) :: zbot !< from soil surface (m) + real (kind=kind_phys), dimension(-nsnow+1:nsoil), intent(in) :: zsnso !< layer-bot. depth from snow surf.(m) + real (kind=kind_phys), dimension(-nsnow+1:nsoil), intent(in) :: df !< thermal conductivity + real (kind=kind_phys), dimension(-nsnow+1:nsoil), intent(in) :: hcpct !< heat capacity (j/m3/k) !input and output @@ -1458,10 +1463,10 @@ subroutine tsnosoi_glacier (nsoil ,nsnow ,isnow ,dt ,tbot , & !in !local integer :: iz - real (kind=kind_phys) :: zbotsno !zbot from snow surface + real (kind=kind_phys) :: zbotsno !< zbot from snow surface real (kind=kind_phys), dimension(-nsnow+1:nsoil) :: ai, bi, ci, rhsts - real (kind=kind_phys) :: eflxb !energy influx from soil bottom (w/m2) - real (kind=kind_phys), dimension(-nsnow+1:nsoil) :: phi !light through water (w/m2) + real (kind=kind_phys) :: eflxb !< energy influx from soil bottom (w/m2) + real (kind=kind_phys), dimension(-nsnow+1:nsoil) :: phi !< light through water (w/m2) ! ---------------------------------------------------------------------- @@ -1496,34 +1501,34 @@ subroutine hrt_glacier (nsnow ,nsoil ,isnow ,zsnso , & !in botflx ) !out ! ---------------------------------------------------------------------- ! ---------------------------------------------------------------------- -! calculate the right hand side of the time tendency term of the soil -! thermal diffusion equation. also to compute ( prepare ) the matrix -! coefficients for the tri-diagonal matrix of the implicit time scheme. +!> calculate the right hand side of the time tendency term of the soil +!! thermal diffusion equation. also to compute ( prepare ) the matrix +!! coefficients for the tri-diagonal matrix of the implicit time scheme. ! ---------------------------------------------------------------------- implicit none ! ---------------------------------------------------------------------- ! input - integer, intent(in) :: nsoil !no of soil layers (4) - integer, intent(in) :: nsnow !maximum no of snow layers (3) - integer, intent(in) :: isnow !actual no of snow layers - real (kind=kind_phys), intent(in) :: tbot !bottom soil temp. at zbot (k) - real (kind=kind_phys), intent(in) :: zbot !depth of lower boundary condition (m) - !from soil surface not snow surface - real (kind=kind_phys), intent(in) :: ssoil !ground heat flux (w/m2) - real (kind=kind_phys), dimension(-nsnow+1:nsoil), intent(in) :: zsnso !depth of layer-bottom of snow/soil (m) - real (kind=kind_phys), dimension(-nsnow+1:nsoil), intent(in) :: stc !snow/soil temperature (k) - real (kind=kind_phys), dimension(-nsnow+1:nsoil), intent(in) :: df !thermal conductivity [w/m/k] - real (kind=kind_phys), dimension(-nsnow+1:nsoil), intent(in) :: hcpct !heat capacity [j/m3/k] - real (kind=kind_phys), dimension(-nsnow+1:nsoil), intent(in) :: phi !light through water (w/m2) + integer, intent(in) :: nsoil !< no of soil layers (4) + integer, intent(in) :: nsnow !< maximum no of snow layers (3) + integer, intent(in) :: isnow !< actual no of snow layers + real (kind=kind_phys), intent(in) :: tbot !< bottom soil temp. at zbot (k) + real (kind=kind_phys), intent(in) :: zbot !< depth of lower boundary condition (m) + !! from soil surface not snow surface + real (kind=kind_phys), intent(in) :: ssoil !< ground heat flux (w/m2) + real (kind=kind_phys), dimension(-nsnow+1:nsoil), intent(in) :: zsnso !< depth of layer-bottom of snow/soil (m) + real (kind=kind_phys), dimension(-nsnow+1:nsoil), intent(in) :: stc !< snow/soil temperature (k) + real (kind=kind_phys), dimension(-nsnow+1:nsoil), intent(in) :: df !< thermal conductivity [w/m/k] + real (kind=kind_phys), dimension(-nsnow+1:nsoil), intent(in) :: hcpct !< heat capacity [j/m3/k] + real (kind=kind_phys), dimension(-nsnow+1:nsoil), intent(in) :: phi !< light through water (w/m2) ! output - real (kind=kind_phys), dimension(-nsnow+1:nsoil), intent(out) :: rhsts !right-hand side of the matrix - real (kind=kind_phys), dimension(-nsnow+1:nsoil), intent(out) :: ai !left-hand side coefficient - real (kind=kind_phys), dimension(-nsnow+1:nsoil), intent(out) :: bi !left-hand side coefficient - real (kind=kind_phys), dimension(-nsnow+1:nsoil), intent(out) :: ci !left-hand side coefficient - real (kind=kind_phys), intent(out) :: botflx !energy influx from soil bottom (w/m2) + real (kind=kind_phys), dimension(-nsnow+1:nsoil), intent(out) :: rhsts !< right-hand side of the matrix + real (kind=kind_phys), dimension(-nsnow+1:nsoil), intent(out) :: ai !< left-hand side coefficient + real (kind=kind_phys), dimension(-nsnow+1:nsoil), intent(out) :: bi !< left-hand side coefficient + real (kind=kind_phys), dimension(-nsnow+1:nsoil), intent(out) :: ci !< left-hand side coefficient + real (kind=kind_phys), intent(out) :: botflx !< energy influx from soil bottom (w/m2) ! local @@ -1592,7 +1597,7 @@ subroutine hstep_glacier (nsnow ,nsoil ,isnow ,dt , & !in ai ,bi ,ci ,rhsts , & !inout stc ) !inout ! ---------------------------------------------------------------------- -! calculate/update the soil temperature field. +!> calculate/update the soil temperature field. ! ---------------------------------------------------------------------- implicit none ! ---------------------------------------------------------------------- @@ -1710,48 +1715,48 @@ subroutine phasechange_glacier (nsnow ,nsoil ,isnow ,dt ,fact , & smc ,sh2o , & !inout qmelt ,imelt ,ponding ) !out ! ---------------------------------------------------------------------- -! melting/freezing of snow water and soil water +!> melting/freezing of snow water and soil water ! ---------------------------------------------------------------------- implicit none ! ---------------------------------------------------------------------- ! inputs - integer, intent(in) :: nsnow !maximum no. of snow layers [=3] - integer, intent(in) :: nsoil !no. of soil layers [=4] - integer, intent(in) :: isnow !actual no. of snow layers [<=3] - real (kind=kind_phys), intent(in) :: dt !land model time step (sec) - real (kind=kind_phys), dimension(-nsnow+1:nsoil), intent(in) :: fact !temporary - real (kind=kind_phys), dimension(-nsnow+1:nsoil), intent(in) :: dzsnso !snow/soil layer thickness [m] + integer, intent(in) :: nsnow !< maximum no. of snow layers [=3] + integer, intent(in) :: nsoil !< no. of soil layers [=4] + integer, intent(in) :: isnow !< actual no. of snow layers [<=3] + real (kind=kind_phys), intent(in) :: dt !< land model time step (sec) + real (kind=kind_phys), dimension(-nsnow+1:nsoil), intent(in) :: fact !< temporary + real (kind=kind_phys), dimension(-nsnow+1:nsoil), intent(in) :: dzsnso !< snow/soil layer thickness [m] ! inputs/outputs - real (kind=kind_phys), dimension(-nsnow+1:nsoil), intent(inout) :: stc !snow/soil layer temperature [k] - real (kind=kind_phys), dimension(-nsnow+1:0) , intent(inout) :: snice !snow layer ice [mm] - real (kind=kind_phys), dimension(-nsnow+1:0) , intent(inout) :: snliq !snow layer liquid water [mm] - real (kind=kind_phys), intent(inout) :: sneqv - real (kind=kind_phys), intent(inout) :: snowh - real (kind=kind_phys), dimension( 1:nsoil), intent(inout) :: sh2o !soil liquid water [m3/m3] - real (kind=kind_phys), dimension( 1:nsoil), intent(inout) :: smc !total soil water [m3/m3] + real (kind=kind_phys), dimension(-nsnow+1:nsoil), intent(inout) :: stc !< snow/soil layer temperature [k] + real (kind=kind_phys), dimension(-nsnow+1:0) , intent(inout) :: snice !< snow layer ice [mm] + real (kind=kind_phys), dimension(-nsnow+1:0) , intent(inout) :: snliq !< snow layer liquid water [mm] + real (kind=kind_phys), intent(inout) :: sneqv !< + real (kind=kind_phys), intent(inout) :: snowh !< + real (kind=kind_phys), dimension( 1:nsoil), intent(inout) :: sh2o !< soil liquid water [m3/m3] + real (kind=kind_phys), dimension( 1:nsoil), intent(inout) :: smc !< total soil water [m3/m3] ! outputs - real (kind=kind_phys), intent(out) :: qmelt !snowmelt rate [mm/s] - integer, dimension(-nsnow+1:nsoil), intent(out) :: imelt !phase change index - real (kind=kind_phys), intent(out) :: ponding!snowmelt when snow has no layer [mm] + real (kind=kind_phys), intent(out) :: qmelt !< snowmelt rate [mm/s] + integer, dimension(-nsnow+1:nsoil), intent(out) :: imelt !< phase change index + real (kind=kind_phys), intent(out) :: ponding!< snowmelt when snow has no layer [mm] ! local - integer :: j,k !do loop index - real (kind=kind_phys), dimension(-nsnow+1:nsoil) :: hm !energy residual [w/m2] - real (kind=kind_phys), dimension(-nsnow+1:nsoil) :: xm !melting or freezing water [kg/m2] - real (kind=kind_phys), dimension(-nsnow+1:nsoil) :: wmass0 - real (kind=kind_phys), dimension(-nsnow+1:nsoil) :: wice0 - real (kind=kind_phys), dimension(-nsnow+1:nsoil) :: wliq0 - real (kind=kind_phys), dimension(-nsnow+1:nsoil) :: mice !soil/snow ice mass [mm] - real (kind=kind_phys), dimension(-nsnow+1:nsoil) :: mliq !soil/snow liquid water mass [mm] - real (kind=kind_phys), dimension(-nsnow+1:nsoil) :: heatr !energy residual or loss after melting/freezing - real (kind=kind_phys) :: temp1 !temporary variables [kg/m2] - real (kind=kind_phys) :: propor - real (kind=kind_phys) :: xmf !total latent heat of phase change + integer :: j,k !< do loop index + real (kind=kind_phys), dimension(-nsnow+1:nsoil) :: hm !< energy residual [w/m2] + real (kind=kind_phys), dimension(-nsnow+1:nsoil) :: xm !< melting or freezing water [kg/m2] + real (kind=kind_phys), dimension(-nsnow+1:nsoil) :: wmass0 !< + real (kind=kind_phys), dimension(-nsnow+1:nsoil) :: wice0 !< + real (kind=kind_phys), dimension(-nsnow+1:nsoil) :: wliq0 !< + real (kind=kind_phys), dimension(-nsnow+1:nsoil) :: mice !< soil/snow ice mass [mm] + real (kind=kind_phys), dimension(-nsnow+1:nsoil) :: mliq !< soil/snow liquid water mass [mm] + real (kind=kind_phys), dimension(-nsnow+1:nsoil) :: heatr !< energy residual or loss after melting/freezing + real (kind=kind_phys) :: temp1 !< temporary variables [kg/m2] + real (kind=kind_phys) :: propor !< + real (kind=kind_phys) :: xmf !< total latent heat of phase change ! ---------------------------------------------------------------------- ! initialization @@ -2107,53 +2112,53 @@ subroutine water_glacier (nsnow ,nsoil ,imelt ,dt ,prcp ,sfctmp , & !in implicit none ! ---------------------------------------------------------------------- ! input - integer, intent(in) :: nsnow !maximum no. of snow layers - integer, intent(in) :: nsoil !no. of soil layers - integer, dimension(-nsnow+1:0) , intent(in) :: imelt !melting state index [1-melt; 2-freeze] - real (kind=kind_phys), intent(in) :: dt !main time step (s) - real (kind=kind_phys), intent(in) :: prcp !precipitation (mm/s) - real (kind=kind_phys), intent(in) :: sfctmp !surface air temperature [k] - real (kind=kind_phys), intent(inout) :: qvap !soil surface evaporation rate[mm/s] - real (kind=kind_phys), intent(inout) :: qdew !soil surface dew rate[mm/s] - real (kind=kind_phys), dimension(-nsnow+1: 0), intent(in) :: ficeold !ice fraction at last timestep - real (kind=kind_phys), dimension( 1:nsoil), intent(in) :: zsoil !layer-bottom depth from soil surf (m) + integer, intent(in) :: nsnow !< maximum no. of snow layers + integer, intent(in) :: nsoil !< no. of soil layers + integer, dimension(-nsnow+1:0) , intent(in) :: imelt !< melting state index [1-melt; 2-freeze] + real (kind=kind_phys), intent(in) :: dt !< main time step (s) + real (kind=kind_phys), intent(in) :: prcp !< precipitation (mm/s) + real (kind=kind_phys), intent(in) :: sfctmp !< surface air temperature [k] + real (kind=kind_phys), intent(inout) :: qvap !< soil surface evaporation rate[mm/s] + real (kind=kind_phys), intent(inout) :: qdew !< soil surface dew rate[mm/s] + real (kind=kind_phys), dimension(-nsnow+1: 0), intent(in) :: ficeold !< ice fraction at last timestep + real (kind=kind_phys), dimension( 1:nsoil), intent(in) :: zsoil !< layer-bottom depth from soil surf (m) ! input/output - integer, intent(inout) :: isnow !actual no. of snow layers - real (kind=kind_phys), intent(inout) :: snowh !snow height [m] - real (kind=kind_phys), intent(inout) :: sneqv !snow water eqv. [mm] - real (kind=kind_phys), dimension(-nsnow+1: 0), intent(inout) :: snice !snow layer ice [mm] - real (kind=kind_phys), dimension(-nsnow+1: 0), intent(inout) :: snliq !snow layer liquid water [mm] - real (kind=kind_phys), dimension(-nsnow+1:nsoil), intent(inout) :: stc !snow/soil layer temperature [k] - real (kind=kind_phys), dimension(-nsnow+1:nsoil), intent(inout) :: dzsnso !snow/soil layer thickness [m] - real (kind=kind_phys), dimension( 1:nsoil), intent(inout) :: sh2o !soil liquid water content [m3/m3] - real (kind=kind_phys), dimension( 1:nsoil), intent(inout) :: sice !soil ice content [m3/m3] - real (kind=kind_phys) , intent(inout) :: ponding ![mm] - real (kind=kind_phys), dimension(-nsnow+1:nsoil), intent(inout) :: zsnso !layer-bottom depth from snow surf [m] - real (kind=kind_phys) , intent(inout) :: fsh !total sensible heat (w/m2) [+ to atm] + integer, intent(inout) :: isnow !< actual no. of snow layers + real (kind=kind_phys), intent(inout) :: snowh !< snow height [m] + real (kind=kind_phys), intent(inout) :: sneqv !< snow water eqv. [mm] + real (kind=kind_phys), dimension(-nsnow+1: 0), intent(inout) :: snice !< snow layer ice [mm] + real (kind=kind_phys), dimension(-nsnow+1: 0), intent(inout) :: snliq !< snow layer liquid water [mm] + real (kind=kind_phys), dimension(-nsnow+1:nsoil), intent(inout) :: stc !< snow/soil layer temperature [k] + real (kind=kind_phys), dimension(-nsnow+1:nsoil), intent(inout) :: dzsnso !< snow/soil layer thickness [m] + real (kind=kind_phys), dimension( 1:nsoil), intent(inout) :: sh2o !< soil liquid water content [m3/m3] + real (kind=kind_phys), dimension( 1:nsoil), intent(inout) :: sice !< soil ice content [m3/m3] + real (kind=kind_phys) , intent(inout) :: ponding !< [mm] + real (kind=kind_phys), dimension(-nsnow+1:nsoil), intent(inout) :: zsnso !< layer-bottom depth from snow surf [m] + real (kind=kind_phys) , intent(inout) :: fsh !< total sensible heat (w/m2) [+ to atm] ! output - real (kind=kind_phys), intent(out) :: runsrf !surface runoff [mm/s] - real (kind=kind_phys), intent(out) :: runsub !baseflow (sturation excess) [mm/s] - real (kind=kind_phys), intent(out) :: qsnow !snow at ground srf (mm/s) [+] - real (kind=kind_phys), intent(out) :: ponding1 - real (kind=kind_phys), intent(out) :: ponding2 - real (kind=kind_phys), intent(out) :: qsnbot !melting water out of snow bottom [mm/s] - real (kind=kind_phys), intent(out) :: fpice !precipitation frozen fraction - real (kind=kind_phys), intent(out) :: esnow ! + real (kind=kind_phys), intent(out) :: runsrf !< surface runoff [mm/s] + real (kind=kind_phys), intent(out) :: runsub !< baseflow (sturation excess) [mm/s] + real (kind=kind_phys), intent(out) :: qsnow !< snow at ground srf (mm/s) [+] + real (kind=kind_phys), intent(out) :: ponding1!< + real (kind=kind_phys), intent(out) :: ponding2!< + real (kind=kind_phys), intent(out) :: qsnbot !< melting water out of snow bottom [mm/s] + real (kind=kind_phys), intent(out) :: fpice !< precipitation frozen fraction + real (kind=kind_phys), intent(out) :: esnow !< ! local - real (kind=kind_phys) :: qrain !rain at ground srf (mm) [+] - real (kind=kind_phys) :: qseva !soil surface evap rate [mm/s] - real (kind=kind_phys) :: qsdew !soil surface dew rate [mm/s] - real (kind=kind_phys) :: qsnfro !snow surface frost rate[mm/s] - real (kind=kind_phys) :: qsnsub !snow surface sublimation rate [mm/s] - real (kind=kind_phys) :: snowhin !snow depth increasing rate (m/s) - real (kind=kind_phys) :: snoflow !glacier flow [mm/s] - real (kind=kind_phys) :: bdfall !density of new snow (mm water/m snow) - real (kind=kind_phys) :: replace !replacement water due to sublimation of glacier - real (kind=kind_phys), dimension( 1:nsoil) :: sice_save !soil ice content [m3/m3] - real (kind=kind_phys), dimension( 1:nsoil) :: sh2o_save !soil liquid water content [m3/m3] + real (kind=kind_phys) :: qrain !< rain at ground srf (mm) [+] + real (kind=kind_phys) :: qseva !< soil surface evap rate [mm/s] + real (kind=kind_phys) :: qsdew !< soil surface dew rate [mm/s] + real (kind=kind_phys) :: qsnfro !< snow surface frost rate[mm/s] + real (kind=kind_phys) :: qsnsub !< snow surface sublimation rate [mm/s] + real (kind=kind_phys) :: snowhin !< snow depth increasing rate (m/s) + real (kind=kind_phys) :: snoflow !< glacier flow [mm/s] + real (kind=kind_phys) :: bdfall !< density of new snow (mm water/m snow) + real (kind=kind_phys) :: replace !< replacement water due to sublimation of glacier + real (kind=kind_phys), dimension( 1:nsoil) :: sice_save !< soil ice content [m3/m3] + real (kind=kind_phys), dimension( 1:nsoil) :: sh2o_save !< soil liquid water content [m3/m3] integer :: ilev @@ -2276,41 +2281,41 @@ subroutine snowwater_glacier (nsnow ,nsoil ,imelt ,dt ,sfctmp , & !in implicit none ! ---------------------------------------------------------------------- ! input - integer, intent(in) :: nsnow !maximum no. of snow layers - integer, intent(in) :: nsoil !no. of soil layers - integer, dimension(-nsnow+1:0) , intent(in) :: imelt !melting state index [0-no melt;1-melt] - real (kind=kind_phys), intent(in) :: dt !time step (s) - real (kind=kind_phys), intent(in) :: sfctmp !surface air temperature [k] - real (kind=kind_phys), intent(in) :: snowhin!snow depth increasing rate (m/s) - real (kind=kind_phys), intent(in) :: qsnow !snow at ground srf (mm/s) [+] - real (kind=kind_phys), intent(inout) :: qsnfro !snow surface frost rate[mm/s] - real (kind=kind_phys), intent(inout) :: qsnsub !snow surface sublimation rate[mm/s] - real (kind=kind_phys), intent(in) :: qrain !snow surface rain rate[mm/s] - real (kind=kind_phys), dimension(-nsnow+1:0) , intent(in) :: ficeold!ice fraction at last timestep - real (kind=kind_phys), dimension( 1:nsoil), intent(in) :: zsoil !layer-bottom depth from soil surf (m) + integer, intent(in) :: nsnow !< maximum no. of snow layers + integer, intent(in) :: nsoil !< no. of soil layers + integer, dimension(-nsnow+1:0) , intent(in) :: imelt !< melting state index [0-no melt;1-melt] + real (kind=kind_phys), intent(in) :: dt !< time step (s) + real (kind=kind_phys), intent(in) :: sfctmp !< surface air temperature [k] + real (kind=kind_phys), intent(in) :: snowhin!< snow depth increasing rate (m/s) + real (kind=kind_phys), intent(in) :: qsnow !< snow at ground srf (mm/s) [+] + real (kind=kind_phys), intent(inout) :: qsnfro !< snow surface frost rate[mm/s] + real (kind=kind_phys), intent(inout) :: qsnsub !< snow surface sublimation rate[mm/s] + real (kind=kind_phys), intent(in) :: qrain !< snow surface rain rate[mm/s] + real (kind=kind_phys), dimension(-nsnow+1:0) , intent(in) :: ficeold!< ice fraction at last timestep + real (kind=kind_phys), dimension( 1:nsoil), intent(in) :: zsoil !< layer-bottom depth from soil surf (m) ! input & output - integer, intent(inout) :: isnow !actual no. of snow layers - real (kind=kind_phys), intent(inout) :: snowh !snow height [m] - real (kind=kind_phys), intent(inout) :: sneqv !snow water eqv. [mm] - real (kind=kind_phys), dimension(-nsnow+1: 0), intent(inout) :: snice !snow layer ice [mm] - real (kind=kind_phys), dimension(-nsnow+1: 0), intent(inout) :: snliq !snow layer liquid water [mm] - real (kind=kind_phys), dimension( 1:nsoil), intent(inout) :: sh2o !soil liquid moisture (m3/m3) - real (kind=kind_phys), dimension( 1:nsoil), intent(inout) :: sice !soil ice moisture (m3/m3) - real (kind=kind_phys), dimension(-nsnow+1:nsoil), intent(inout) :: stc !snow layer temperature [k] - real (kind=kind_phys), dimension(-nsnow+1:nsoil), intent(inout) :: dzsnso !snow/soil layer thickness [m] - real (kind=kind_phys), dimension(-nsnow+1:nsoil), intent(inout) :: zsnso !layer-bottom depth from snow surf [m] - real (kind=kind_phys), intent(inout) :: fsh !total sensible heat (w/m2) [+ to atm] + integer, intent(inout) :: isnow !< actual no. of snow layers + real (kind=kind_phys), intent(inout) :: snowh !< snow height [m] + real (kind=kind_phys), intent(inout) :: sneqv !< snow water eqv. [mm] + real (kind=kind_phys), dimension(-nsnow+1: 0), intent(inout) :: snice !< snow layer ice [mm] + real (kind=kind_phys), dimension(-nsnow+1: 0), intent(inout) :: snliq !< snow layer liquid water [mm] + real (kind=kind_phys), dimension( 1:nsoil), intent(inout) :: sh2o !< soil liquid moisture (m3/m3) + real (kind=kind_phys), dimension( 1:nsoil), intent(inout) :: sice !< soil ice moisture (m3/m3) + real (kind=kind_phys), dimension(-nsnow+1:nsoil), intent(inout) :: stc !< snow layer temperature [k] + real (kind=kind_phys), dimension(-nsnow+1:nsoil), intent(inout) :: dzsnso !< snow/soil layer thickness [m] + real (kind=kind_phys), dimension(-nsnow+1:nsoil), intent(inout) :: zsnso !< layer-bottom depth from snow surf [m] + real (kind=kind_phys), intent(inout) :: fsh !< total sensible heat (w/m2) [+ to atm] ! output - real (kind=kind_phys), intent(out) :: qsnbot !melting water out of snow bottom [mm/s] - real (kind=kind_phys), intent(out) :: snoflow!glacier flow [mm] - real (kind=kind_phys), intent(out) :: ponding1 - real (kind=kind_phys), intent(out) :: ponding2 + real (kind=kind_phys), intent(out) :: qsnbot !< melting water out of snow bottom [mm/s] + real (kind=kind_phys), intent(out) :: snoflow!< glacier flow [mm] + real (kind=kind_phys), intent(out) :: ponding1 !< + real (kind=kind_phys), intent(out) :: ponding2 !< ! local integer :: iz - real (kind=kind_phys) :: bdsnow !bulk density of snow (kg/m3) + real (kind=kind_phys) :: bdsnow !< bulk density of snow (kg/m3) ! ---------------------------------------------------------------------- snoflow = 0.0 ponding1 = 0.0 @@ -2399,33 +2404,33 @@ subroutine snowfall_glacier (nsoil ,nsnow ,dt ,qsnow ,snowhin , & !in isnow ,snowh ,dzsnso ,stc ,snice , & !inout snliq ,sneqv ) !inout ! ---------------------------------------------------------------------- -! snow depth and density to account for the new snowfall. -! new values of snow depth & density returned. +!> snow depth and density to account for the new snowfall. +!! new values of snow depth & density returned. ! ---------------------------------------------------------------------- implicit none ! ---------------------------------------------------------------------- ! input - integer, intent(in) :: nsoil !no. of soil layers - integer, intent(in) :: nsnow !maximum no. of snow layers - real (kind=kind_phys), intent(in) :: dt !main time step (s) - real (kind=kind_phys), intent(in) :: qsnow !snow at ground srf (mm/s) [+] - real (kind=kind_phys), intent(in) :: snowhin!snow depth increasing rate (m/s) - real (kind=kind_phys), intent(in) :: sfctmp !surface air temperature [k] + integer, intent(in) :: nsoil !< no. of soil layers + integer, intent(in) :: nsnow !< maximum no. of snow layers + real (kind=kind_phys), intent(in) :: dt !< main time step (s) + real (kind=kind_phys), intent(in) :: qsnow !< snow at ground srf (mm/s) [+] + real (kind=kind_phys), intent(in) :: snowhin!< snow depth increasing rate (m/s) + real (kind=kind_phys), intent(in) :: sfctmp !< surface air temperature [k] ! input and output - integer, intent(inout) :: isnow !actual no. of snow layers - real (kind=kind_phys), intent(inout) :: snowh !snow depth [m] - real (kind=kind_phys), intent(inout) :: sneqv !swow water equivalent [m] - real (kind=kind_phys), dimension(-nsnow+1:nsoil), intent(inout) :: dzsnso !thickness of snow/soil layers (m) - real (kind=kind_phys), dimension(-nsnow+1:nsoil), intent(inout) :: stc !snow layer temperature [k] - real (kind=kind_phys), dimension(-nsnow+1: 0), intent(inout) :: snice !snow layer ice [mm] - real (kind=kind_phys), dimension(-nsnow+1: 0), intent(inout) :: snliq !snow layer liquid water [mm] + integer, intent(inout) :: isnow !< actual no. of snow layers + real (kind=kind_phys), intent(inout) :: snowh !< snow depth [m] + real (kind=kind_phys), intent(inout) :: sneqv !< swow water equivalent [m] + real (kind=kind_phys), dimension(-nsnow+1:nsoil), intent(inout) :: dzsnso !< thickness of snow/soil layers (m) + real (kind=kind_phys), dimension(-nsnow+1:nsoil), intent(inout) :: stc !< snow layer temperature [k] + real (kind=kind_phys), dimension(-nsnow+1: 0), intent(inout) :: snice !< snow layer ice [mm] + real (kind=kind_phys), dimension(-nsnow+1: 0), intent(inout) :: snliq !< snow layer liquid water [mm] ! local - integer :: newnode ! 0-no new layers, 1-creating new layers + integer :: newnode !< 0-no new layers, 1-creating new layers ! ---------------------------------------------------------------------- newnode = 0 @@ -2468,38 +2473,38 @@ subroutine compact_glacier (nsnow ,nsoil ,dt ,stc ,snice , & !in implicit none ! ---------------------------------------------------------------------- ! input - integer, intent(in) :: nsoil !no. of soil layers [ =4] - integer, intent(in) :: nsnow !maximum no. of snow layers [ =3] - integer, dimension(-nsnow+1:0) , intent(in) :: imelt !melting state index [0-no melt;1-melt] - real (kind=kind_phys), intent(in) :: dt !time step (sec) - real (kind=kind_phys), dimension(-nsnow+1:nsoil), intent(in) :: stc !snow layer temperature [k] - real (kind=kind_phys), dimension(-nsnow+1: 0), intent(in) :: snice !snow layer ice [mm] - real (kind=kind_phys), dimension(-nsnow+1: 0), intent(in) :: snliq !snow layer liquid water [mm] - real (kind=kind_phys), dimension(-nsnow+1: 0), intent(in) :: ficeold!ice fraction at last timestep + integer, intent(in) :: nsoil !< no. of soil layers [ =4] + integer, intent(in) :: nsnow !< maximum no. of snow layers [ =3] + integer, dimension(-nsnow+1:0) , intent(in) :: imelt !< melting state index [0-no melt;1-melt] + real (kind=kind_phys), intent(in) :: dt !< time step (sec) + real (kind=kind_phys), dimension(-nsnow+1:nsoil), intent(in) :: stc !< snow layer temperature [k] + real (kind=kind_phys), dimension(-nsnow+1: 0), intent(in) :: snice !< snow layer ice [mm] + real (kind=kind_phys), dimension(-nsnow+1: 0), intent(in) :: snliq !< snow layer liquid water [mm] + real (kind=kind_phys), dimension(-nsnow+1: 0), intent(in) :: ficeold!< ice fraction at last timestep ! input and output - integer, intent(inout) :: isnow ! actual no. of snow layers - real (kind=kind_phys), dimension(-nsnow+1:nsoil), intent(inout) :: dzsnso ! snow layer thickness [m] + integer, intent(inout) :: isnow !< actual no. of snow layers + real (kind=kind_phys), dimension(-nsnow+1:nsoil), intent(inout) :: dzsnso !< snow layer thickness [m] ! local - real (kind=kind_phys), parameter :: c2 = 21.e-3 ![m3/kg] ! default 21.e-3 - real (kind=kind_phys), parameter :: c3 = 2.5e-6 ![1/s] - real (kind=kind_phys), parameter :: c4 = 0.04 ![1/k] - real (kind=kind_phys), parameter :: c5 = 2.0 ! - real (kind=kind_phys), parameter :: dm = 100.0 !upper limit on destructive metamorphism compaction [kg/m3] - real (kind=kind_phys), parameter :: eta0 = 0.8e+6 !viscosity coefficient [kg-s/m2] + real (kind=kind_phys), parameter :: c2 = 21.e-3 !< [m3/kg] ! default 21.e-3 + real (kind=kind_phys), parameter :: c3 = 2.5e-6 !< [1/s] + real (kind=kind_phys), parameter :: c4 = 0.04 !< [1/k] + real (kind=kind_phys), parameter :: c5 = 2.0 !< + real (kind=kind_phys), parameter :: dm = 100.0 !< upper limit on destructive metamorphism compaction [kg/m3] + real (kind=kind_phys), parameter :: eta0 = 0.8e+6 !< viscosity coefficient [kg-s/m2] !according to anderson, it is between 0.52e6~1.38e6 - real (kind=kind_phys) :: burden !pressure of overlying snow [kg/m2] - real (kind=kind_phys) :: ddz1 !rate of settling of snow pack due to destructive metamorphism. - real (kind=kind_phys) :: ddz2 !rate of compaction of snow pack due to overburden. - real (kind=kind_phys) :: ddz3 !rate of compaction of snow pack due to melt [1/s] - real (kind=kind_phys) :: dexpf !expf=exp(-c4*(273.15-stc)). - real (kind=kind_phys) :: td !stc - tfrz [k] - real (kind=kind_phys) :: pdzdtc !nodal rate of change in fractional-thickness due to compaction [fraction/s] - real (kind=kind_phys) :: void !void (1 - snice - snliq) - real (kind=kind_phys) :: wx !water mass (ice + liquid) [kg/m2] - real (kind=kind_phys) :: bi !partial density of ice [kg/m3] - real (kind=kind_phys), dimension(-nsnow+1:0) :: fice !fraction of ice at current time step + real (kind=kind_phys) :: burden !< pressure of overlying snow [kg/m2] + real (kind=kind_phys) :: ddz1 !< rate of settling of snow pack due to destructive metamorphism. + real (kind=kind_phys) :: ddz2 !< rate of compaction of snow pack due to overburden. + real (kind=kind_phys) :: ddz3 !< rate of compaction of snow pack due to melt [1/s] + real (kind=kind_phys) :: dexpf !< expf=exp(-c4*(273.15-stc)). + real (kind=kind_phys) :: td !< stc - tfrz [k] + real (kind=kind_phys) :: pdzdtc !< nodal rate of change in fractional-thickness due to compaction [fraction/s] + real (kind=kind_phys) :: void !< void (1 - snice - snliq) + real (kind=kind_phys) :: wx !< water mass (ice + liquid) [kg/m2] + real (kind=kind_phys) :: bi !< partial density of ice [kg/m3] + real (kind=kind_phys), dimension(-nsnow+1:0) :: fice !< fraction of ice at current time step integer :: j @@ -2569,32 +2574,32 @@ subroutine combine_glacier (nsnow ,nsoil , & !in ! ---------------------------------------------------------------------- ! input - integer, intent(in) :: nsnow !maximum no. of snow layers - integer, intent(in) :: nsoil !no. of soil layers + integer, intent(in) :: nsnow !< maximum no. of snow layers + integer, intent(in) :: nsoil !< no. of soil layers ! input and output - integer, intent(inout) :: isnow !actual no. of snow layers - real (kind=kind_phys), dimension( 1:nsoil), intent(inout) :: sh2o !soil liquid moisture (m3/m3) - real (kind=kind_phys), dimension( 1:nsoil), intent(inout) :: sice !soil ice moisture (m3/m3) - real (kind=kind_phys), dimension(-nsnow+1:nsoil), intent(inout) :: stc !snow layer temperature [k] - real (kind=kind_phys), dimension(-nsnow+1: 0), intent(inout) :: snice !snow layer ice [mm] - real (kind=kind_phys), dimension(-nsnow+1: 0), intent(inout) :: snliq !snow layer liquid water [mm] - real (kind=kind_phys), dimension(-nsnow+1:nsoil), intent(inout) :: dzsnso!snow layer depth [m] - real (kind=kind_phys), intent(inout) :: sneqv !snow water equivalent [m] - real (kind=kind_phys), intent(inout) :: snowh !snow depth [m] - real (kind=kind_phys), intent(inout) :: ponding1 - real (kind=kind_phys), intent(inout) :: ponding2 + integer, intent(inout) :: isnow !< actual no. of snow layers + real (kind=kind_phys), dimension( 1:nsoil), intent(inout) :: sh2o !< soil liquid moisture (m3/m3) + real (kind=kind_phys), dimension( 1:nsoil), intent(inout) :: sice !< soil ice moisture (m3/m3) + real (kind=kind_phys), dimension(-nsnow+1:nsoil), intent(inout) :: stc !< snow layer temperature [k] + real (kind=kind_phys), dimension(-nsnow+1: 0), intent(inout) :: snice !< snow layer ice [mm] + real (kind=kind_phys), dimension(-nsnow+1: 0), intent(inout) :: snliq !< snow layer liquid water [mm] + real (kind=kind_phys), dimension(-nsnow+1:nsoil), intent(inout) :: dzsnso!< snow layer depth [m] + real (kind=kind_phys), intent(inout) :: sneqv !< snow water equivalent [m] + real (kind=kind_phys), intent(inout) :: snowh !< snow depth [m] + real (kind=kind_phys), intent(inout) :: ponding1 !< + real (kind=kind_phys), intent(inout) :: ponding2 !< ! local variables: - integer :: i,j,k,l ! node indices - integer :: isnow_old ! number of top snow layer - integer :: mssi ! node index - integer :: neibor ! adjacent node selected for combination - real (kind=kind_phys) :: zwice ! total ice mass in snow - real (kind=kind_phys) :: zwliq ! total liquid water in snow - real (kind=kind_phys) :: dzmin(3) ! minimum of top snow layer + integer :: i,j,k,l !< node indices + integer :: isnow_old !< number of top snow layer + integer :: mssi !< node index + integer :: neibor !< adjacent node selected for combination + real (kind=kind_phys) :: zwice !< total ice mass in snow + real (kind=kind_phys) :: zwliq !< total liquid water in snow + real (kind=kind_phys) :: dzmin(3) !< minimum of top snow layer data dzmin /0.045, 0.05, 0.2/ ! data dzmin /0.025, 0.025, 0.1/ ! mb: change limit !----------------------------------------------------------------------- @@ -2741,24 +2746,24 @@ subroutine combo_glacier(dz, wliq, wice, t, dz2, wliq2, wice2, t2) ! ----------------------------------------------------------------------s ! input - real (kind=kind_phys), intent(in) :: dz2 !nodal thickness of 2 elements being combined [m] - real (kind=kind_phys), intent(in) :: wliq2 !liquid water of element 2 [kg/m2] - real (kind=kind_phys), intent(in) :: wice2 !ice of element 2 [kg/m2] - real (kind=kind_phys), intent(in) :: t2 !nodal temperature of element 2 [k] - real (kind=kind_phys), intent(inout) :: dz !nodal thickness of 1 elements being combined [m] - real (kind=kind_phys), intent(inout) :: wliq !liquid water of element 1 - real (kind=kind_phys), intent(inout) :: wice !ice of element 1 [kg/m2] - real (kind=kind_phys), intent(inout) :: t !node temperature of element 1 [k] + real (kind=kind_phys), intent(in) :: dz2 !< nodal thickness of 2 elements being combined [m] + real (kind=kind_phys), intent(in) :: wliq2 !< liquid water of element 2 [kg/m2] + real (kind=kind_phys), intent(in) :: wice2 !< ice of element 2 [kg/m2] + real (kind=kind_phys), intent(in) :: t2 !< nodal temperature of element 2 [k] + real (kind=kind_phys), intent(inout) :: dz !< nodal thickness of 1 elements being combined [m] + real (kind=kind_phys), intent(inout) :: wliq !< liquid water of element 1 + real (kind=kind_phys), intent(inout) :: wice !< ice of element 1 [kg/m2] + real (kind=kind_phys), intent(inout) :: t !< node temperature of element 1 [k] ! local - real (kind=kind_phys) :: dzc !total thickness of nodes 1 and 2 (dzc=dz+dz2). - real (kind=kind_phys) :: wliqc !combined liquid water [kg/m2] - real (kind=kind_phys) :: wicec !combined ice [kg/m2] - real (kind=kind_phys) :: tc !combined node temperature [k] - real (kind=kind_phys) :: h !enthalpy of element 1 [j/m2] - real (kind=kind_phys) :: h2 !enthalpy of element 2 [j/m2] - real (kind=kind_phys) :: hc !temporary + real (kind=kind_phys) :: dzc !< total thickness of nodes 1 and 2 (dzc=dz+dz2). + real (kind=kind_phys) :: wliqc !< combined liquid water [kg/m2] + real (kind=kind_phys) :: wicec !< combined ice [kg/m2] + real (kind=kind_phys) :: tc !< combined node temperature [k] + real (kind=kind_phys) :: h !< enthalpy of element 1 [j/m2] + real (kind=kind_phys) :: h2 !< enthalpy of element 2 [j/m2] + real (kind=kind_phys) :: hc !< temporary !----------------------------------------------------------------------- @@ -2792,30 +2797,30 @@ subroutine divide_glacier (nsnow ,nsoil , & !in ! ---------------------------------------------------------------------- ! input - integer, intent(in) :: nsnow !maximum no. of snow layers [ =3] - integer, intent(in) :: nsoil !no. of soil layers [ =4] + integer, intent(in) :: nsnow !< maximum no. of snow layers [ =3] + integer, intent(in) :: nsoil !< no. of soil layers [ =4] ! input and output - integer , intent(inout) :: isnow !actual no. of snow layers - real (kind=kind_phys), dimension(-nsnow+1:nsoil), intent(inout) :: stc !snow layer temperature [k] - real (kind=kind_phys), dimension(-nsnow+1: 0), intent(inout) :: snice !snow layer ice [mm] - real (kind=kind_phys), dimension(-nsnow+1: 0), intent(inout) :: snliq !snow layer liquid water [mm] - real (kind=kind_phys), dimension(-nsnow+1:nsoil), intent(inout) :: dzsnso!snow layer depth [m] + integer , intent(inout) :: isnow !< actual no. of snow layers + real (kind=kind_phys), dimension(-nsnow+1:nsoil), intent(inout) :: stc !< snow layer temperature [k] + real (kind=kind_phys), dimension(-nsnow+1: 0), intent(inout) :: snice !< snow layer ice [mm] + real (kind=kind_phys), dimension(-nsnow+1: 0), intent(inout) :: snliq !< snow layer liquid water [mm] + real (kind=kind_phys), dimension(-nsnow+1:nsoil), intent(inout) :: dzsnso!< snow layer depth [m] ! local variables: - integer :: j !indices - integer :: msno !number of layer (top) to msno (bot) - real (kind=kind_phys) :: drr !thickness of the combined [m] - real (kind=kind_phys), dimension( 1:nsnow) :: dz !snow layer thickness [m] - real (kind=kind_phys), dimension( 1:nsnow) :: swice !partial volume of ice [m3/m3] - real (kind=kind_phys), dimension( 1:nsnow) :: swliq !partial volume of liquid water [m3/m3] - real (kind=kind_phys), dimension( 1:nsnow) :: tsno !node temperature [k] - real (kind=kind_phys) :: zwice !temporary - real (kind=kind_phys) :: zwliq !temporary - real (kind=kind_phys) :: propor!temporary - real (kind=kind_phys) :: dtdz !temporary + integer :: j !< indices + integer :: msno !< number of layer (top) to msno (bot) + real (kind=kind_phys) :: drr !< thickness of the combined [m] + real (kind=kind_phys), dimension( 1:nsnow) :: dz !< snow layer thickness [m] + real (kind=kind_phys), dimension( 1:nsnow) :: swice !< partial volume of ice [m3/m3] + real (kind=kind_phys), dimension( 1:nsnow) :: swliq !< partial volume of liquid water [m3/m3] + real (kind=kind_phys), dimension( 1:nsnow) :: tsno !< node temperature [k] + real (kind=kind_phys) :: zwice !< temporary + real (kind=kind_phys) :: zwliq !< temporary + real (kind=kind_phys) :: propor!< temporary + real (kind=kind_phys) :: dtdz !< temporary ! ---------------------------------------------------------------------- do j = 1,nsnow @@ -2918,48 +2923,48 @@ subroutine snowh2o_glacier (nsnow ,nsoil ,dt ,qsnfro ,qsnsub , & !in ponding1 ,ponding2 ,fsh , & !inout qsnbot ) !out ! ---------------------------------------------------------------------- -! renew the mass of ice lens (snice) and liquid (snliq) of the -! surface snow layer resulting from sublimation (frost) / evaporation (dew) +!> renew the mass of ice lens (snice) and liquid (snliq) of the +!! surface snow layer resulting from sublimation (frost) / evaporation (dew) ! ---------------------------------------------------------------------- implicit none ! ---------------------------------------------------------------------- ! input - integer, intent(in) :: nsnow !maximum no. of snow layers[=3] - integer, intent(in) :: nsoil !no. of soil layers[=4] - real (kind=kind_phys), intent(in) :: dt !time step - real (kind=kind_phys), intent(inout) :: qsnfro !snow surface frost rate[mm/s] - real (kind=kind_phys), intent(inout) :: qsnsub !snow surface sublimation rate[mm/s] - real (kind=kind_phys), intent(in) :: qrain !snow surface rain rate[mm/s] + integer, intent(in) :: nsnow !< maximum no. of snow layers[=3] + integer, intent(in) :: nsoil !< no. of soil layers[=4] + real (kind=kind_phys), intent(in) :: dt !< time step + real (kind=kind_phys), intent(inout) :: qsnfro !< snow surface frost rate[mm/s] + real (kind=kind_phys), intent(inout) :: qsnsub !< snow surface sublimation rate[mm/s] + real (kind=kind_phys), intent(in) :: qrain !< snow surface rain rate[mm/s] ! output - real (kind=kind_phys), intent(out) :: qsnbot !melting water out of snow bottom [mm/s] + real (kind=kind_phys), intent(out) :: qsnbot !< melting water out of snow bottom [mm/s] ! input and output - integer, intent(inout) :: isnow !actual no. of snow layers - real (kind=kind_phys), dimension(-nsnow+1:nsoil), intent(inout) :: dzsnso ! snow layer depth [m] - real (kind=kind_phys), intent(inout) :: snowh !snow height [m] - real (kind=kind_phys), intent(inout) :: sneqv !snow water eqv. [mm] - real (kind=kind_phys), dimension(-nsnow+1:0), intent(inout) :: snice !snow layer ice [mm] - real (kind=kind_phys), dimension(-nsnow+1:0), intent(inout) :: snliq !snow layer liquid water [mm] - real (kind=kind_phys), dimension( 1:nsoil), intent(inout) :: sh2o !soil liquid moisture (m3/m3) - real (kind=kind_phys), dimension( 1:nsoil), intent(inout) :: sice !soil ice moisture (m3/m3) - real (kind=kind_phys), dimension(-nsnow+1:nsoil), intent(inout) :: stc !snow layer temperature [k] + integer, intent(inout) :: isnow !< actual no. of snow layers + real (kind=kind_phys), dimension(-nsnow+1:nsoil), intent(inout) :: dzsnso !< snow layer depth [m] + real (kind=kind_phys), intent(inout) :: snowh !< snow height [m] + real (kind=kind_phys), intent(inout) :: sneqv !< snow water eqv. [mm] + real (kind=kind_phys), dimension(-nsnow+1:0), intent(inout) :: snice !< snow layer ice [mm] + real (kind=kind_phys), dimension(-nsnow+1:0), intent(inout) :: snliq !< snow layer liquid water [mm] + real (kind=kind_phys), dimension( 1:nsoil), intent(inout) :: sh2o !< soil liquid moisture (m3/m3) + real (kind=kind_phys), dimension( 1:nsoil), intent(inout) :: sice !< soil ice moisture (m3/m3) + real (kind=kind_phys), dimension(-nsnow+1:nsoil), intent(inout) :: stc !< snow layer temperature [k] real (kind=kind_phys), intent(inout) :: ponding1 real (kind=kind_phys), intent(inout) :: ponding2 - real (kind=kind_phys), intent(inout) :: fsh !total sensible heat (w/m2) [+ to atm] + real (kind=kind_phys), intent(inout) :: fsh !< total sensible heat (w/m2) [+ to atm] ! local variables: - integer :: j !do loop/array indices - real (kind=kind_phys) :: qin !water flow into the element (mm/s) - real (kind=kind_phys) :: qout !water flow out of the element (mm/s) - real (kind=kind_phys) :: wgdif !ice mass after minus sublimation - real (kind=kind_phys), dimension(-nsnow+1:0) :: vol_liq !partial volume of liquid water in layer - real (kind=kind_phys), dimension(-nsnow+1:0) :: vol_ice !partial volume of ice lens in layer - real (kind=kind_phys), dimension(-nsnow+1:0) :: epore !effective porosity = porosity - vol_ice + integer :: j !< do loop/array indices + real (kind=kind_phys) :: qin !< water flow into the element (mm/s) + real (kind=kind_phys) :: qout !< water flow out of the element (mm/s) + real (kind=kind_phys) :: wgdif !< ice mass after minus sublimation + real (kind=kind_phys), dimension(-nsnow+1:0) :: vol_liq !< partial volume of liquid water in layer + real (kind=kind_phys), dimension(-nsnow+1:0) :: vol_ice !< partial volume of ice lens in layer + real (kind=kind_phys), dimension(-nsnow+1:0) :: epore !< effective porosity = porosity - vol_ice real (kind=kind_phys) :: propor, temp ! ---------------------------------------------------------------------- @@ -3080,39 +3085,39 @@ subroutine error_glacier (iloc ,jloc ,swdown ,fsa ,fsr ,fira , & runsrf ,runsub ,sneqv ,dt ,beg_wb ) #endif ! -------------------------------------------------------------------------------------------------- -! check surface energy balance and water balance +!> check surface energy balance and water balance ! -------------------------------------------------------------------------------------------------- implicit none ! -------------------------------------------------------------------------------------------------- ! inputs - integer , intent(in) :: iloc !grid index - integer , intent(in) :: jloc !grid index - real (kind=kind_phys) , intent(in) :: swdown !downward solar filtered by sun angle [w/m2] - real (kind=kind_phys) , intent(in) :: fsa !total absorbed solar radiation (w/m2) - real (kind=kind_phys) , intent(in) :: fsr !total reflected solar radiation (w/m2) - real (kind=kind_phys) , intent(in) :: fira !total net longwave rad (w/m2) [+ to atm] - real (kind=kind_phys) , intent(in) :: fsh !total sensible heat (w/m2) [+ to atm] - real (kind=kind_phys) , intent(in) :: fgev !ground evaporation heat (w/m2) [+ to atm] - real (kind=kind_phys) , intent(in) :: ssoil !ground heat flux (w/m2) [+ to soil] + integer , intent(in) :: iloc !< grid index + integer , intent(in) :: jloc !< grid index + real (kind=kind_phys) , intent(in) :: swdown !< downward solar filtered by sun angle [w/m2] + real (kind=kind_phys) , intent(in) :: fsa !< total absorbed solar radiation (w/m2) + real (kind=kind_phys) , intent(in) :: fsr !< total reflected solar radiation (w/m2) + real (kind=kind_phys) , intent(in) :: fira !< total net longwave rad (w/m2) [+ to atm] + real (kind=kind_phys) , intent(in) :: fsh !< total sensible heat (w/m2) [+ to atm] + real (kind=kind_phys) , intent(in) :: fgev !< ground evaporation heat (w/m2) [+ to atm] + real (kind=kind_phys) , intent(in) :: ssoil !< ground heat flux (w/m2) [+ to soil] real (kind=kind_phys) , intent(in) :: sag - real (kind=kind_phys) , intent(in) :: prcp !precipitation rate (kg m-2 s-1) - real (kind=kind_phys) , intent(in) :: edir !soil surface evaporation rate[mm/s] - real (kind=kind_phys) , intent(in) :: runsrf !surface runoff [mm/s] - real (kind=kind_phys) , intent(in) :: runsub !baseflow (saturation excess) [mm/s] - real (kind=kind_phys) , intent(in) :: sneqv !snow water eqv. [mm] - real (kind=kind_phys) , intent(in) :: dt !time step [sec] - real (kind=kind_phys) , intent(in) :: beg_wb !water storage at begin of a timesetp [mm] + real (kind=kind_phys) , intent(in) :: prcp !< precipitation rate (kg m-2 s-1) + real (kind=kind_phys) , intent(in) :: edir !< soil surface evaporation rate[mm/s] + real (kind=kind_phys) , intent(in) :: runsrf !< surface runoff [mm/s] + real (kind=kind_phys) , intent(in) :: runsub !< baseflow (saturation excess) [mm/s] + real (kind=kind_phys) , intent(in) :: sneqv !< snow water eqv. [mm] + real (kind=kind_phys) , intent(in) :: dt !< time step [sec] + real (kind=kind_phys) , intent(in) :: beg_wb !< water storage at begin of a timesetp [mm] #ifdef CCPP character(len=*) , intent(inout) :: errmsg integer , intent(inout) :: errflg #endif - real (kind=kind_phys) :: end_wb !water storage at end of a timestep [mm] - real (kind=kind_phys) :: errwat !error in water balance [mm/timestep] - real (kind=kind_phys) :: erreng !error in surface energy balance [w/m2] - real (kind=kind_phys) :: errsw !error in shortwave radiation balance [w/m2] + real (kind=kind_phys) :: end_wb !< water storage at end of a timestep [mm] + real (kind=kind_phys) :: errwat !< error in water balance [mm/timestep] + real (kind=kind_phys) :: erreng !< error in surface energy balance [w/m2] + real (kind=kind_phys) :: errsw !< error in shortwave radiation balance [w/m2] character(len=256) :: message ! -------------------------------------------------------------------------------------------------- errsw = swdown - (fsa + fsr) @@ -3162,12 +3167,12 @@ subroutine noahmp_options_glacier(iopt_alb ,iopt_snf ,iopt_tbot, iopt_stc, iop implicit none - integer, intent(in) :: iopt_alb !snow surface albedo (1->bats; 2->class) - integer, intent(in) :: iopt_snf !rainfall & snowfall (1-jordan91; 2->bats; 3->noah) - integer, intent(in) :: iopt_tbot !lower boundary of soil temperature (1->zero-flux; 2->noah) - integer, intent(in) :: iopt_stc !snow/soil temperature time scheme (only layer 1) - ! 1 -> semi-implicit; 2 -> full implicit (original noah) - integer, intent(in) :: iopt_gla ! glacier option (1->phase change; 2->simple) + integer, intent(in) :: iopt_alb !< snow surface albedo (1->bats; 2->class) + integer, intent(in) :: iopt_snf !< rainfall & snowfall (1-jordan91; 2->bats; 3->noah) + integer, intent(in) :: iopt_tbot !< lower boundary of soil temperature (1->zero-flux; 2->noah) + integer, intent(in) :: iopt_stc !< snow/soil temperature time scheme (only layer 1) + !! 1 -> semi-implicit; 2 -> full implicit (original noah) + integer, intent(in) :: iopt_gla !< glacier option (1->phase change; 2->simple) ! ------------------------------------------------------------------------------------------------- diff --git a/physics/module_sf_noahmplsm.f90 b/physics/module_sf_noahmplsm.f90 index 42ff7bdcb..e9e17f399 100644 --- a/physics/module_sf_noahmplsm.f90 +++ b/physics/module_sf_noahmplsm.f90 @@ -73,7 +73,7 @@ module module_sf_noahmplsm ! =====================================options for different schemes================================ ! **recommended - integer :: dveg ! options for dynamic vegetation: + integer :: dveg !< options for dynamic vegetation: ! 1 -> off (use table lai; use fveg = shdfac from input) ! 2 -> on (together with opt_crs = 1) ! 3 -> off (use table lai; calculate fveg) @@ -85,16 +85,16 @@ module module_sf_noahmplsm ! 9 -> off (use input LAI; use maximum vegetation fraction) ! 10 -> crop model on (use maximum vegetation fraction) - integer :: opt_crs ! options for canopy stomatal resistance + integer :: opt_crs !< options for canopy stomatal resistance ! **1 -> ball-berry ! 2 -> jarvis - integer :: opt_btr ! options for soil moisture factor for stomatal resistance + integer :: opt_btr !< options for soil moisture factor for stomatal resistance ! **1 -> noah (soil moisture) ! 2 -> clm (matric potential) ! 3 -> ssib (matric potential) - integer :: opt_run ! options for runoff and groundwater + integer :: opt_run !< options for runoff and groundwater ! **1 -> topmodel with groundwater (niu et al. 2007 jgr) ; ! 2 -> topmodel with an equilibrium water table (niu et al. 2005 jgr) ; ! 3 -> original surface and subsurface runoff (free drainage) @@ -102,59 +102,59 @@ module module_sf_noahmplsm ! 5 -> miguez-macho&fan groundwater scheme (miguez-macho et al. 2007 jgr; fan et al. 2007 jgr) ! (needs further testing for public use) - integer :: opt_sfc ! options for surface layer drag coeff (ch & cm) + integer :: opt_sfc !< options for surface layer drag coeff (ch & cm) ! **1 -> m-o ! **2 -> original noah (chen97) ! **3 -> myj consistent; 4->ysu consistent. mb: removed in v3.7 for further testing - integer :: opt_frz ! options for supercooled liquid water (or ice fraction) + integer :: opt_frz !< options for supercooled liquid water (or ice fraction) ! **1 -> no iteration (niu and yang, 2006 jhm) ! 2 -> koren's iteration - integer :: opt_inf ! options for frozen soil permeability + integer :: opt_inf !< options for frozen soil permeability ! **1 -> linear effects, more permeable (niu and yang, 2006, jhm) ! 2 -> nonlinear effects, less permeable (old) - integer :: opt_rad ! options for radiation transfer + integer :: opt_rad !< options for radiation transfer ! 1 -> modified two-stream (gap = f(solar angle, 3d structure ...)<1-fveg) ! 2 -> two-stream applied to grid-cell (gap = 0) ! **3 -> two-stream applied to vegetated fraction (gap=1-fveg) - integer :: opt_alb ! options for ground snow surface albedo + integer :: opt_alb !< options for ground snow surface albedo ! 1 -> bats ! **2 -> class - integer :: opt_snf ! options for partitioning precipitation into rainfall & snowfall + integer :: opt_snf !< options for partitioning precipitation into rainfall & snowfall ! **1 -> jordan (1991) ! 2 -> bats: when sfctmp sfctmp < tfrz ! 4 -> use wrf microphysics output - integer :: opt_tbot ! options for lower boundary condition of soil temperature + integer :: opt_tbot !< options for lower boundary condition of soil temperature ! 1 -> zero heat flux from bottom (zbot and tbot not used) ! **2 -> tbot at zbot (8m) read from a file (original noah) - integer :: opt_stc ! options for snow/soil temperature time scheme (only layer 1) + integer :: opt_stc !< options for snow/soil temperature time scheme (only layer 1) ! **1 -> semi-implicit; flux top boundary condition ! 2 -> full implicit (original noah); temperature top boundary condition ! 3 -> same as 1, but fsno for ts calculation (generally improves snow; v3.7) - integer :: opt_rsf ! options for surface resistent to evaporation/sublimation + integer :: opt_rsf !< options for surface resistent to evaporation/sublimation ! **1 -> sakaguchi and zeng, 2009 ! 2 -> sellers (1992) ! 3 -> adjusted sellers to decrease rsurf for wet soil ! 4 -> option 1 for non-snow; rsurf = rsurf_snow for snow (set in mptable); ad v3.8 - integer :: opt_soil ! options for defining soil properties + integer :: opt_soil !< options for defining soil properties ! **1 -> use input dominant soil texture ! 2 -> use input soil texture that varies with depth ! 3 -> use soil composition (sand, clay, orgm) and pedotransfer functions (opt_pedo) ! 4 -> use input soil properties (bexp_3d, smcmax_3d, etc.) - integer :: opt_pedo ! options for pedotransfer functions (used when opt_soil = 3) + integer :: opt_pedo !< options for pedotransfer functions (used when opt_soil = 3) ! **1 -> saxton and rawls (2006) - integer :: opt_crop ! options for crop model + integer :: opt_crop !< options for crop model ! **0 -> no crop model, will run default dynamic vegetation ! 1 -> liu, et al. 2016 @@ -162,23 +162,23 @@ module module_sf_noahmplsm ! physical constants: ! !------------------------------------------------------------------------------------------! - real (kind=kind_phys), parameter :: grav = 9.80616 !acceleration due to gravity (m/s2) - real (kind=kind_phys), parameter :: sb = 5.67e-08 !stefan-boltzmann constant (w/m2/k4) - real (kind=kind_phys), parameter :: vkc = 0.40 !von karman constant - real (kind=kind_phys), parameter :: tfrz = 273.16 !freezing/melting point (k) - real (kind=kind_phys), parameter :: hsub = 2.8440e06 !latent heat of sublimation (j/kg) - real (kind=kind_phys), parameter :: hvap = 2.5104e06 !latent heat of vaporization (j/kg) - real (kind=kind_phys), parameter :: hfus = 0.3336e06 !latent heat of fusion (j/kg) - real (kind=kind_phys), parameter :: cwat = 4.188e06 !specific heat capacity of water (j/m3/k) - real (kind=kind_phys), parameter :: cice = 2.094e06 !specific heat capacity of ice (j/m3/k) - real (kind=kind_phys), parameter :: cpair = 1004.64 !heat capacity dry air at const pres (j/kg/k) - real (kind=kind_phys), parameter :: tkwat = 0.6 !thermal conductivity of water (w/m/k) - real (kind=kind_phys), parameter :: tkice = 2.2 !thermal conductivity of ice (w/m/k) - real (kind=kind_phys), parameter :: tkair = 0.023 !thermal conductivity of air (w/m/k) (not used mb: 20140718) - real (kind=kind_phys), parameter :: rair = 287.04 !gas constant for dry air (j/kg/k) - real (kind=kind_phys), parameter :: rw = 461.269 !gas constant for water vapor (j/kg/k) - real (kind=kind_phys), parameter :: denh2o = 1000. !density of water (kg/m3) - real (kind=kind_phys), parameter :: denice = 917. !density of ice (kg/m3) + real (kind=kind_phys), parameter :: grav = 9.80616 !< acceleration due to gravity (m/s2) + real (kind=kind_phys), parameter :: sb = 5.67e-08 !< stefan-boltzmann constant (w/m2/k4) + real (kind=kind_phys), parameter :: vkc = 0.40 !< von karman constant + real (kind=kind_phys), parameter :: tfrz = 273.16 !< freezing/melting point (k) + real (kind=kind_phys), parameter :: hsub = 2.8440e06 !< latent heat of sublimation (j/kg) + real (kind=kind_phys), parameter :: hvap = 2.5104e06 !< latent heat of vaporization (j/kg) + real (kind=kind_phys), parameter :: hfus = 0.3336e06 !< latent heat of fusion (j/kg) + real (kind=kind_phys), parameter :: cwat = 4.188e06 !< specific heat capacity of water (j/m3/k) + real (kind=kind_phys), parameter :: cice = 2.094e06 !< specific heat capacity of ice (j/m3/k) + real (kind=kind_phys), parameter :: cpair = 1004.64 !< heat capacity dry air at const pres (j/kg/k) + real (kind=kind_phys), parameter :: tkwat = 0.6 !< thermal conductivity of water (w/m/k) + real (kind=kind_phys), parameter :: tkice = 2.2 !< thermal conductivity of ice (w/m/k) + real (kind=kind_phys), parameter :: tkair = 0.023 !< thermal conductivity of air (w/m/k) (not used mb: 20140718) + real (kind=kind_phys), parameter :: rair = 287.04 !< gas constant for dry air (j/kg/k) + real (kind=kind_phys), parameter :: rw = 461.269 !< gas constant for water vapor (j/kg/k) + real (kind=kind_phys), parameter :: denh2o = 1000. !< density of water (kg/m3) + real (kind=kind_phys), parameter :: denice = 917. !< density of ice (kg/m3) integer, private, parameter :: mband = 2 integer, private, parameter :: nsoil = 4 @@ -197,60 +197,60 @@ module module_sf_noahmplsm integer :: iscrop integer :: eblforest - real (kind=kind_phys) :: ch2op !maximum intercepted h2o per unit lai+sai (mm) - real (kind=kind_phys) :: dleaf !characteristic leaf dimension (m) - real (kind=kind_phys) :: z0mvt !momentum roughness length (m) - real (kind=kind_phys) :: hvt !top of canopy (m) - real (kind=kind_phys) :: hvb !bottom of canopy (m) - real (kind=kind_phys) :: den !tree density (no. of trunks per m2) - real (kind=kind_phys) :: rc !tree crown radius (m) - real (kind=kind_phys) :: mfsno !snowmelt m parameter () - real (kind=kind_phys) :: scffac !snow cover factor (m) - real (kind=kind_phys) :: saim(12) !monthly stem area index, one-sided - real (kind=kind_phys) :: laim(12) !monthly leaf area index, one-sided - real (kind=kind_phys) :: sla !single-side leaf area per kg [m2/kg] - real (kind=kind_phys) :: dilefc !coeficient for leaf stress death [1/s] - real (kind=kind_phys) :: dilefw !coeficient for leaf stress death [1/s] - real (kind=kind_phys) :: fragr !fraction of growth respiration !original was 0.3 - real (kind=kind_phys) :: ltovrc !leaf turnover [1/s] - - real (kind=kind_phys) :: c3psn !photosynthetic pathway: 0. = c4, 1. = c3 - real (kind=kind_phys) :: kc25 !co2 michaelis-menten constant at 25c (pa) - real (kind=kind_phys) :: akc !q10 for kc25 - real (kind=kind_phys) :: ko25 !o2 michaelis-menten constant at 25c (pa) - real (kind=kind_phys) :: ako !q10 for ko25 - real (kind=kind_phys) :: vcmx25 !maximum rate of carboxylation at 25c (umol co2/m**2/s) - real (kind=kind_phys) :: avcmx !q10 for vcmx25 - real (kind=kind_phys) :: bp !minimum leaf conductance (umol/m**2/s) - real (kind=kind_phys) :: mp !slope of conductance-to-photosynthesis relationship - real (kind=kind_phys) :: qe25 !quantum efficiency at 25c (umol co2 / umol photon) - real (kind=kind_phys) :: aqe !q10 for qe25 - real (kind=kind_phys) :: rmf25 !leaf maintenance respiration at 25c (umol co2/m**2/s) - real (kind=kind_phys) :: rms25 !stem maintenance respiration at 25c (umol co2/kg bio/s) - real (kind=kind_phys) :: rmr25 !root maintenance respiration at 25c (umol co2/kg bio/s) - real (kind=kind_phys) :: arm !q10 for maintenance respiration - real (kind=kind_phys) :: folnmx !foliage nitrogen concentration when f(n)=1 (%) - real (kind=kind_phys) :: tmin !minimum temperature for photosynthesis (k) + real (kind=kind_phys) :: ch2op !< maximum intercepted h2o per unit lai+sai (mm) + real (kind=kind_phys) :: dleaf !< characteristic leaf dimension (m) + real (kind=kind_phys) :: z0mvt !< momentum roughness length (m) + real (kind=kind_phys) :: hvt !< top of canopy (m) + real (kind=kind_phys) :: hvb !< bottom of canopy (m) + real (kind=kind_phys) :: den !< tree density (no. of trunks per m2) + real (kind=kind_phys) :: rc !< tree crown radius (m) + real (kind=kind_phys) :: mfsno !< snowmelt m parameter () + real (kind=kind_phys) :: scffac !< snow cover factor (m) + real (kind=kind_phys) :: saim(12) !< monthly stem area index, one-sided + real (kind=kind_phys) :: laim(12) !< monthly leaf area index, one-sided + real (kind=kind_phys) :: sla !< single-side leaf area per kg [m2/kg] + real (kind=kind_phys) :: dilefc !< coeficient for leaf stress death [1/s] + real (kind=kind_phys) :: dilefw !< coeficient for leaf stress death [1/s] + real (kind=kind_phys) :: fragr !< fraction of growth respiration !original was 0.3 + real (kind=kind_phys) :: ltovrc !< leaf turnover [1/s] + + real (kind=kind_phys) :: c3psn !< photosynthetic pathway: 0. = c4, 1. = c3 + real (kind=kind_phys) :: kc25 !< co2 michaelis-menten constant at 25c (pa) + real (kind=kind_phys) :: akc !< q10 for kc25 + real (kind=kind_phys) :: ko25 !< o2 michaelis-menten constant at 25c (pa) + real (kind=kind_phys) :: ako !< q10 for ko25 + real (kind=kind_phys) :: vcmx25 !< maximum rate of carboxylation at 25c (umol co2/m**2/s) + real (kind=kind_phys) :: avcmx !< q10 for vcmx25 + real (kind=kind_phys) :: bp !< minimum leaf conductance (umol/m**2/s) + real (kind=kind_phys) :: mp !< slope of conductance-to-photosynthesis relationship + real (kind=kind_phys) :: qe25 !< quantum efficiency at 25c (umol co2 / umol photon) + real (kind=kind_phys) :: aqe !< q10 for qe25 + real (kind=kind_phys) :: rmf25 !< leaf maintenance respiration at 25c (umol co2/m**2/s) + real (kind=kind_phys) :: rms25 !< stem maintenance respiration at 25c (umol co2/kg bio/s) + real (kind=kind_phys) :: rmr25 !< root maintenance respiration at 25c (umol co2/kg bio/s) + real (kind=kind_phys) :: arm !< q10 for maintenance respiration + real (kind=kind_phys) :: folnmx !< foliage nitrogen concentration when f(n)=1 (%) + real (kind=kind_phys) :: tmin !< minimum temperature for photosynthesis (k) - real (kind=kind_phys) :: xl !leaf/stem orientation index - real (kind=kind_phys) :: rhol(mband) !leaf reflectance: 1=vis, 2=nir - real (kind=kind_phys) :: rhos(mband) !stem reflectance: 1=vis, 2=nir - real (kind=kind_phys) :: taul(mband) !leaf transmittance: 1=vis, 2=nir - real (kind=kind_phys) :: taus(mband) !stem transmittance: 1=vis, 2=nir - - real (kind=kind_phys) :: mrp !microbial respiration parameter (umol co2 /kg c/ s) - real (kind=kind_phys) :: cwpvt !empirical canopy wind parameter - - real (kind=kind_phys) :: wrrat !wood to non-wood ratio - real (kind=kind_phys) :: wdpool !wood pool (switch 1 or 0) depending on woody or not [-] - real (kind=kind_phys) :: tdlef !characteristic t for leaf freezing [k] - - integer :: nroot !number of soil layers with root present - real (kind=kind_phys) :: rgl !parameter used in radiation stress function - real (kind=kind_phys) :: rsmin !minimum stomatal resistance [s m-1] - real (kind=kind_phys) :: hs !parameter used in vapor pressure deficit function - real (kind=kind_phys) :: topt !optimum transpiration air temperature [k] - real (kind=kind_phys) :: rsmax !maximal stomatal resistance [s m-1] + real (kind=kind_phys) :: xl !< leaf/stem orientation index + real (kind=kind_phys) :: rhol(mband) !< leaf reflectance: 1=vis, 2=nir + real (kind=kind_phys) :: rhos(mband) !< stem reflectance: 1=vis, 2=nir + real (kind=kind_phys) :: taul(mband) !< leaf transmittance: 1=vis, 2=nir + real (kind=kind_phys) :: taus(mband) !< stem transmittance: 1=vis, 2=nir + + real (kind=kind_phys) :: mrp !< microbial respiration parameter (umol co2 /kg c/ s) + real (kind=kind_phys) :: cwpvt !< empirical canopy wind parameter + + real (kind=kind_phys) :: wrrat !< wood to non-wood ratio + real (kind=kind_phys) :: wdpool !< wood pool (switch 1 or 0) depending on woody or not [-] + real (kind=kind_phys) :: tdlef !< characteristic t for leaf freezing [k] + + integer :: nroot !< number of soil layers with root present + real (kind=kind_phys) :: rgl !< parameter used in radiation stress function + real (kind=kind_phys) :: rsmin !< minimum stomatal resistance [s m-1] + real (kind=kind_phys) :: hs !< parameter used in vapor pressure deficit function + real (kind=kind_phys) :: topt !< optimum transpiration air temperature [k] + real (kind=kind_phys) :: rsmax !< maximal stomatal resistance [s m-1] real (kind=kind_phys) :: slarea real (kind=kind_phys) :: eps(5) @@ -259,111 +259,111 @@ module module_sf_noahmplsm ! from the rad section of mptable.tbl !------------------------------------------------------------------------------------------! - real (kind=kind_phys) :: albsat(mband) !saturated soil albedos: 1=vis, 2=nir - real (kind=kind_phys) :: albdry(mband) !dry soil albedos: 1=vis, 2=nir - real (kind=kind_phys) :: albice(mband) !albedo land ice: 1=vis, 2=nir - real (kind=kind_phys) :: alblak(mband) !albedo frozen lakes: 1=vis, 2=nir - real (kind=kind_phys) :: omegas(mband) !two-stream parameter omega for snow - real (kind=kind_phys) :: betads !two-stream parameter betad for snow - real (kind=kind_phys) :: betais !two-stream parameter betad for snow - real (kind=kind_phys) :: eg(2) !emissivity + real (kind=kind_phys) :: albsat(mband) !< saturated soil albedos: 1=vis, 2=nir + real (kind=kind_phys) :: albdry(mband) !< dry soil albedos: 1=vis, 2=nir + real (kind=kind_phys) :: albice(mband) !< albedo land ice: 1=vis, 2=nir + real (kind=kind_phys) :: alblak(mband) !< albedo frozen lakes: 1=vis, 2=nir + real (kind=kind_phys) :: omegas(mband) !< two-stream parameter omega for snow + real (kind=kind_phys) :: betads !< two-stream parameter betad for snow + real (kind=kind_phys) :: betais !< two-stream parameter betad for snow + real (kind=kind_phys) :: eg(2) !< emissivity !------------------------------------------------------------------------------------------! ! from the globals section of mptable.tbl !------------------------------------------------------------------------------------------! - real (kind=kind_phys) :: co2 !co2 partial pressure - real (kind=kind_phys) :: o2 !o2 partial pressure - real (kind=kind_phys) :: timean !gridcell mean topgraphic index (global mean) - real (kind=kind_phys) :: fsatmx !maximum surface saturated fraction (global mean) - real (kind=kind_phys) :: z0sno !snow surface roughness length (m) (0.002) - real (kind=kind_phys) :: ssi !liquid water holding capacity for snowpack (m3/m3) - real (kind=kind_phys) :: snow_ret_fac !snowpack water release timescale factor (1/s) - real (kind=kind_phys) :: swemx !new snow mass to fully cover old snow (mm) - real (kind=kind_phys) :: snow_emis !snow emissivity - real (kind=kind_phys) :: tau0 !tau0 from yang97 eqn. 10a - real (kind=kind_phys) :: grain_growth !growth from vapor diffusion yang97 eqn. 10b - real (kind=kind_phys) :: extra_growth !extra growth near freezing yang97 eqn. 10c - real (kind=kind_phys) :: dirt_soot !dirt and soot term yang97 eqn. 10d - real (kind=kind_phys) :: bats_cosz !zenith angle snow albedo adjustment; b in yang97 eqn. 15 - real (kind=kind_phys) :: bats_vis_new !new snow visible albedo - real (kind=kind_phys) :: bats_nir_new !new snow nir albedo - real (kind=kind_phys) :: bats_vis_age !age factor for diffuse visible snow albedo yang97 eqn. 17 - real (kind=kind_phys) :: bats_nir_age !age factor for diffuse nir snow albedo yang97 eqn. 18 - real (kind=kind_phys) :: bats_vis_dir !cosz factor for direct visible snow albedo yang97 eqn. 15 - real (kind=kind_phys) :: bats_nir_dir !cosz factor for direct nir snow albedo yang97 eqn. 16 - real (kind=kind_phys) :: rsurf_snow !surface resistance for snow(s/m) - real (kind=kind_phys) :: rsurf_exp !exponent in the shape parameter for soil resistance option 1 + real (kind=kind_phys) :: co2 !< co2 partial pressure + real (kind=kind_phys) :: o2 !< o2 partial pressure + real (kind=kind_phys) :: timean !< gridcell mean topgraphic index (global mean) + real (kind=kind_phys) :: fsatmx !< maximum surface saturated fraction (global mean) + real (kind=kind_phys) :: z0sno !< snow surface roughness length (m) (0.002) + real (kind=kind_phys) :: ssi !< liquid water holding capacity for snowpack (m3/m3) + real (kind=kind_phys) :: snow_ret_fac !< snowpack water release timescale factor (1/s) + real (kind=kind_phys) :: swemx !< new snow mass to fully cover old snow (mm) + real (kind=kind_phys) :: snow_emis !< snow emissivity + real (kind=kind_phys) :: tau0 !< tau0 from yang97 eqn. 10a + real (kind=kind_phys) :: grain_growth !< growth from vapor diffusion yang97 eqn. 10b + real (kind=kind_phys) :: extra_growth !< extra growth near freezing yang97 eqn. 10c + real (kind=kind_phys) :: dirt_soot !< dirt and soot term yang97 eqn. 10d + real (kind=kind_phys) :: bats_cosz !< zenith angle snow albedo adjustment; b in yang97 eqn. 15 + real (kind=kind_phys) :: bats_vis_new !< new snow visible albedo + real (kind=kind_phys) :: bats_nir_new !< new snow nir albedo + real (kind=kind_phys) :: bats_vis_age !< age factor for diffuse visible snow albedo yang97 eqn. 17 + real (kind=kind_phys) :: bats_nir_age !< age factor for diffuse nir snow albedo yang97 eqn. 18 + real (kind=kind_phys) :: bats_vis_dir !< cosz factor for direct visible snow albedo yang97 eqn. 15 + real (kind=kind_phys) :: bats_nir_dir !< cosz factor for direct nir snow albedo yang97 eqn. 16 + real (kind=kind_phys) :: rsurf_snow !< surface resistance for snow(s/m) + real (kind=kind_phys) :: rsurf_exp !< exponent in the shape parameter for soil resistance option 1 !------------------------------------------------------------------------------------------! ! from the crop section of mptable.tbl !------------------------------------------------------------------------------------------! - integer :: pltday ! planting date - integer :: hsday ! harvest date - real (kind=kind_phys) :: plantpop ! plant density [per ha] - used? - real (kind=kind_phys) :: irri ! irrigation strategy 0= non-irrigation 1=irrigation (no water-stress) - real (kind=kind_phys) :: gddtbase ! base temperature for gdd accumulation [c] - real (kind=kind_phys) :: gddtcut ! upper temperature for gdd accumulation [c] - real (kind=kind_phys) :: gdds1 ! gdd from seeding to emergence - real (kind=kind_phys) :: gdds2 ! gdd from seeding to initial vegetative - real (kind=kind_phys) :: gdds3 ! gdd from seeding to post vegetative - real (kind=kind_phys) :: gdds4 ! gdd from seeding to intial reproductive - real (kind=kind_phys) :: gdds5 ! gdd from seeding to pysical maturity - integer :: c3c4 ! photosynthetic pathway: 1 = c3 2 = c4 - real (kind=kind_phys) :: aref ! reference maximum co2 assimulation rate - real (kind=kind_phys) :: psnrf ! co2 assimulation reduction factor(0-1) (caused by non-modeling part,e.g.pest,weeds) - real (kind=kind_phys) :: i2par ! fraction of incoming solar radiation to photosynthetically active radiation - real (kind=kind_phys) :: tassim0 ! minimum temperature for co2 assimulation [c] - real (kind=kind_phys) :: tassim1 ! co2 assimulation linearly increasing until temperature reaches t1 [c] - real (kind=kind_phys) :: tassim2 ! co2 assmilation rate remain at aref until temperature reaches t2 [c] - real (kind=kind_phys) :: k ! light extinction coefficient - real (kind=kind_phys) :: epsi ! initial light use efficiency - real (kind=kind_phys) :: q10mr ! q10 for maintainance respiration - real (kind=kind_phys) :: foln_mx ! foliage nitrogen concentration when f(n)=1 (%) - real (kind=kind_phys) :: lefreez ! characteristic t for leaf freezing [k] - real (kind=kind_phys) :: dile_fc(nstage) ! coeficient for temperature leaf stress death [1/s] - real (kind=kind_phys) :: dile_fw(nstage) ! coeficient for water leaf stress death [1/s] - real (kind=kind_phys) :: fra_gr ! fraction of growth respiration - real (kind=kind_phys) :: lf_ovrc(nstage) ! fraction of leaf turnover [1/s] - real (kind=kind_phys) :: st_ovrc(nstage) ! fraction of stem turnover [1/s] - real (kind=kind_phys) :: rt_ovrc(nstage) ! fraction of root tunrover [1/s] - real (kind=kind_phys) :: lfmr25 ! leaf maintenance respiration at 25c [umol co2/m**2 /s] - real (kind=kind_phys) :: stmr25 ! stem maintenance respiration at 25c [umol co2/kg bio/s] - real (kind=kind_phys) :: rtmr25 ! root maintenance respiration at 25c [umol co2/kg bio/s] - real (kind=kind_phys) :: grainmr25 ! grain maintenance respiration at 25c [umol co2/kg bio/s] - real (kind=kind_phys) :: lfpt(nstage) ! fraction of carbohydrate flux to leaf - real (kind=kind_phys) :: stpt(nstage) ! fraction of carbohydrate flux to stem - real (kind=kind_phys) :: rtpt(nstage) ! fraction of carbohydrate flux to root - real (kind=kind_phys) :: grainpt(nstage) ! fraction of carbohydrate flux to grain - real (kind=kind_phys) :: bio2lai ! leaf are per living leaf biomass [m^2/kg] + integer :: pltday !< planting date + integer :: hsday !< harvest date + real (kind=kind_phys) :: plantpop !< plant density [per ha] - used? + real (kind=kind_phys) :: irri !< irrigation strategy 0= non-irrigation 1=irrigation (no water-stress) + real (kind=kind_phys) :: gddtbase !< base temperature for gdd accumulation [c] + real (kind=kind_phys) :: gddtcut !< upper temperature for gdd accumulation [c] + real (kind=kind_phys) :: gdds1 !< gdd from seeding to emergence + real (kind=kind_phys) :: gdds2 !< gdd from seeding to initial vegetative + real (kind=kind_phys) :: gdds3 !< gdd from seeding to post vegetative + real (kind=kind_phys) :: gdds4 !< gdd from seeding to intial reproductive + real (kind=kind_phys) :: gdds5 !< gdd from seeding to pysical maturity + integer :: c3c4 !< photosynthetic pathway: 1 = c3 2 = c4 + real (kind=kind_phys) :: aref !< reference maximum co2 assimulation rate + real (kind=kind_phys) :: psnrf !< co2 assimulation reduction factor(0-1) (caused by non-modeling part,e.g.pest,weeds) + real (kind=kind_phys) :: i2par !< fraction of incoming solar radiation to photosynthetically active radiation + real (kind=kind_phys) :: tassim0 !< minimum temperature for co2 assimulation [c] + real (kind=kind_phys) :: tassim1 !< co2 assimulation linearly increasing until temperature reaches t1 [c] + real (kind=kind_phys) :: tassim2 !< co2 assmilation rate remain at aref until temperature reaches t2 [c] + real (kind=kind_phys) :: k !< light extinction coefficient + real (kind=kind_phys) :: epsi !< initial light use efficiency + real (kind=kind_phys) :: q10mr !< q10 for maintainance respiration + real (kind=kind_phys) :: foln_mx !< foliage nitrogen concentration when f(n)=1 (%) + real (kind=kind_phys) :: lefreez !< characteristic t for leaf freezing [k] + real (kind=kind_phys) :: dile_fc(nstage) !< coeficient for temperature leaf stress death [1/s] + real (kind=kind_phys) :: dile_fw(nstage) !< coeficient for water leaf stress death [1/s] + real (kind=kind_phys) :: fra_gr !< fraction of growth respiration + real (kind=kind_phys) :: lf_ovrc(nstage) !< fraction of leaf turnover [1/s] + real (kind=kind_phys) :: st_ovrc(nstage) !< fraction of stem turnover [1/s] + real (kind=kind_phys) :: rt_ovrc(nstage) !< fraction of root tunrover [1/s] + real (kind=kind_phys) :: lfmr25 !< leaf maintenance respiration at 25c [umol co2/m**2 /s] + real (kind=kind_phys) :: stmr25 !< stem maintenance respiration at 25c [umol co2/kg bio/s] + real (kind=kind_phys) :: rtmr25 !< root maintenance respiration at 25c [umol co2/kg bio/s] + real (kind=kind_phys) :: grainmr25 !< grain maintenance respiration at 25c [umol co2/kg bio/s] + real (kind=kind_phys) :: lfpt(nstage) !< fraction of carbohydrate flux to leaf + real (kind=kind_phys) :: stpt(nstage) !< fraction of carbohydrate flux to stem + real (kind=kind_phys) :: rtpt(nstage) !< fraction of carbohydrate flux to root + real (kind=kind_phys) :: grainpt(nstage) !< fraction of carbohydrate flux to grain + real (kind=kind_phys) :: bio2lai !< leaf are per living leaf biomass [m^2/kg] !------------------------------------------------------------------------------------------! ! from the soilparm.tbl tables, as functions of soil category. !------------------------------------------------------------------------------------------! - real (kind=kind_phys) :: bexp(nsoil) !b parameter - real (kind=kind_phys) :: smcdry(nsoil) !dry soil moisture threshold where direct evap from top + real (kind=kind_phys) :: bexp(nsoil) !< b parameter + real (kind=kind_phys) :: smcdry(nsoil) !< dry soil moisture threshold where direct evap from top !layer ends (volumetric) (not used mb: 20140718) - real (kind=kind_phys) :: smcwlt(nsoil) !wilting point soil moisture (volumetric) - real (kind=kind_phys) :: smcref(nsoil) !reference soil moisture (field capacity) (volumetric) - real (kind=kind_phys) :: smcmax (nsoil) !porosity, saturated value of soil moisture (volumetric) - real (kind=kind_phys) :: psisat(nsoil) !saturated soil matric potential - real (kind=kind_phys) :: dksat(nsoil) !saturated soil hydraulic conductivity - real (kind=kind_phys) :: dwsat(nsoil) !saturated soil hydraulic diffusivity - real (kind=kind_phys) :: quartz(nsoil) !soil quartz content - real (kind=kind_phys) :: f1 !soil thermal diffusivity/conductivity coef (not used mb: 20140718) + real (kind=kind_phys) :: smcwlt(nsoil) !< wilting point soil moisture (volumetric) + real (kind=kind_phys) :: smcref(nsoil) !< reference soil moisture (field capacity) (volumetric) + real (kind=kind_phys) :: smcmax (nsoil) !< porosity, saturated value of soil moisture (volumetric) + real (kind=kind_phys) :: psisat(nsoil) !< saturated soil matric potential + real (kind=kind_phys) :: dksat(nsoil) !< saturated soil hydraulic conductivity + real (kind=kind_phys) :: dwsat(nsoil) !< saturated soil hydraulic diffusivity + real (kind=kind_phys) :: quartz(nsoil) !< soil quartz content + real (kind=kind_phys) :: f1 !< soil thermal diffusivity/conductivity coef (not used mb: 20140718) !------------------------------------------------------------------------------------------! ! from the genparm.tbl file !------------------------------------------------------------------------------------------! - real (kind=kind_phys) :: slope !slope index (0 - 1) - real (kind=kind_phys) :: csoil !vol. soil heat capacity [j/m3/k] - real (kind=kind_phys) :: zbot !depth (m) of lower boundary soil temperature - real (kind=kind_phys) :: czil !calculate roughness length of heat + real (kind=kind_phys) :: slope !< slope index (0 - 1) + real (kind=kind_phys) :: csoil !< vol. soil heat capacity [j/m3/k] + real (kind=kind_phys) :: zbot !< depth (m) of lower boundary soil temperature + real (kind=kind_phys) :: czil !< calculate roughness length of heat real (kind=kind_phys) :: refdk real (kind=kind_phys) :: refkdt - real (kind=kind_phys) :: kdt !used in compute maximum infiltration rate (in infil) - real (kind=kind_phys) :: frzx !used in compute maximum infiltration rate (in infil) + real (kind=kind_phys) :: kdt !< used in compute maximum infiltration rate (in infil) + real (kind=kind_phys) :: frzx !< used in compute maximum infiltration rate (in infil) end type noahmp_parameters @@ -418,129 +418,129 @@ subroutine noahmp_sflx (parameters, & ! input type (noahmp_parameters), intent(in) :: parameters - integer , intent(in) :: ice !ice (ice = 1) - integer , intent(in) :: ist !surface type 1->soil; 2->lake - integer , intent(in) :: vegtyp !vegetation type - INTEGER , INTENT(IN) :: CROPTYPE !crop type - integer , intent(in) :: nsnow !maximum no. of snow layers - integer , intent(in) :: nsoil !no. of soil layers - integer , intent(in) :: iloc !grid index - integer , intent(in) :: jloc !grid index - real (kind=kind_phys) , intent(in) :: dt !time step [sec] - real (kind=kind_phys), dimension( 1:nsoil), intent(in) :: zsoil !layer-bottom depth from soil surf (m) - real (kind=kind_phys) , intent(in) :: q2 !mixing ratio (kg/kg) lowest model layer - real (kind=kind_phys) , intent(in) :: sfctmp !surface air temperature [k] - real (kind=kind_phys) , intent(in) :: uu !wind speed in eastward dir (m/s) - real (kind=kind_phys) , intent(in) :: vv !wind speed in northward dir (m/s) - real (kind=kind_phys) , intent(in) :: soldn !downward shortwave radiation (w/m2) - real (kind=kind_phys) , intent(in) :: lwdn !downward longwave radiation (w/m2) - real (kind=kind_phys) , intent(in) :: sfcprs !pressure (pa) - real (kind=kind_phys) , intent(inout) :: zlvl !reference height (m) - real (kind=kind_phys) , intent(in) :: cosz !cosine solar zenith angle [0-1] - real (kind=kind_phys) , intent(in) :: tbot !bottom condition for soil temp. [k] - real (kind=kind_phys) , intent(in) :: foln !foliage nitrogen (%) [1-saturated] - real (kind=kind_phys) , intent(in) :: shdfac !green vegetation fraction [0.0-1.0] - integer , intent(in) :: yearlen!number of days in the particular year. - real (kind=kind_phys) , intent(in) :: julian !julian day of year (floating point) - real (kind=kind_phys) , intent(in) :: lat !latitude (radians) - real (kind=kind_phys), dimension(-nsnow+1: 0), intent(in) :: ficeold!ice fraction at last timestep - real (kind=kind_phys), dimension( 1:nsoil), intent(in) :: smceq !equilibrium soil water content [m3/m3] - real (kind=kind_phys) , intent(in) :: prcpconv ! convective precipitation entering [mm/s] ! mb/an : v3.7 - real (kind=kind_phys) , intent(in) :: prcpnonc ! non-convective precipitation entering [mm/s] ! mb/an : v3.7 - real (kind=kind_phys) , intent(in) :: prcpshcv ! shallow convective precip entering [mm/s] ! mb/an : v3.7 - real (kind=kind_phys) , intent(in) :: prcpsnow ! snow entering land model [mm/s] ! mb/an : v3.7 - real (kind=kind_phys) , intent(in) :: prcpgrpl ! graupel entering land model [mm/s] ! mb/an : v3.7 - real (kind=kind_phys) , intent(in) :: prcphail ! hail entering land model [mm/s] ! mb/an : v3.7 + integer , intent(in) :: ice !< ice (ice = 1) + integer , intent(in) :: ist !< surface type 1->soil; 2->lake + integer , intent(in) :: vegtyp !< vegetation type + INTEGER , INTENT(IN) :: CROPTYPE !< crop type + integer , intent(in) :: nsnow !< maximum no. of snow layers + integer , intent(in) :: nsoil !< no. of soil layers + integer , intent(in) :: iloc !< grid index + integer , intent(in) :: jloc !< grid index + real (kind=kind_phys) , intent(in) :: dt !< time step [sec] + real (kind=kind_phys), dimension( 1:nsoil), intent(in) :: zsoil !< layer-bottom depth from soil surf (m) + real (kind=kind_phys) , intent(in) :: q2 !< mixing ratio (kg/kg) lowest model layer + real (kind=kind_phys) , intent(in) :: sfctmp !< surface air temperature [k] + real (kind=kind_phys) , intent(in) :: uu !< wind speed in eastward dir (m/s) + real (kind=kind_phys) , intent(in) :: vv !< wind speed in northward dir (m/s) + real (kind=kind_phys) , intent(in) :: soldn !< downward shortwave radiation (w/m2) + real (kind=kind_phys) , intent(in) :: lwdn !< downward longwave radiation (w/m2) + real (kind=kind_phys) , intent(in) :: sfcprs !< pressure (pa) + real (kind=kind_phys) , intent(inout) :: zlvl !< reference height (m) + real (kind=kind_phys) , intent(in) :: cosz !< cosine solar zenith angle [0-1] + real (kind=kind_phys) , intent(in) :: tbot !< bottom condition for soil temp. [k] + real (kind=kind_phys) , intent(in) :: foln !< foliage nitrogen (%) [1-saturated] + real (kind=kind_phys) , intent(in) :: shdfac !< green vegetation fraction [0.0-1.0] + integer , intent(in) :: yearlen!< number of days in the particular year. + real (kind=kind_phys) , intent(in) :: julian !< julian day of year (floating point) + real (kind=kind_phys) , intent(in) :: lat !< latitude (radians) + real (kind=kind_phys), dimension(-nsnow+1: 0), intent(in) :: ficeold!< ice fraction at last timestep + real (kind=kind_phys), dimension( 1:nsoil), intent(in) :: smceq !< equilibrium soil water content [m3/m3] + real (kind=kind_phys) , intent(in) :: prcpconv !< convective precipitation entering [mm/s] ! mb/an : v3.7 + real (kind=kind_phys) , intent(in) :: prcpnonc !< non-convective precipitation entering [mm/s] ! mb/an : v3.7 + real (kind=kind_phys) , intent(in) :: prcpshcv !< shallow convective precip entering [mm/s] ! mb/an : v3.7 + real (kind=kind_phys) , intent(in) :: prcpsnow !< snow entering land model [mm/s] ! mb/an : v3.7 + real (kind=kind_phys) , intent(in) :: prcpgrpl !< graupel entering land model [mm/s] ! mb/an : v3.7 + real (kind=kind_phys) , intent(in) :: prcphail !< hail entering land model [mm/s] ! mb/an : v3.7 !jref:start; in - real (kind=kind_phys) , intent(in) :: qc !cloud water mixing ratio - real (kind=kind_phys) , intent(inout) :: qsfc !mixing ratio at lowest model layer - real (kind=kind_phys) , intent(in) :: psfc !pressure at lowest model layer - real (kind=kind_phys) , intent(in) :: dz8w !thickness of lowest layer + real (kind=kind_phys) , intent(in) :: qc !< cloud water mixing ratio + real (kind=kind_phys) , intent(inout) :: qsfc !< mixing ratio at lowest model layer + real (kind=kind_phys) , intent(in) :: psfc !< pressure at lowest model layer + real (kind=kind_phys) , intent(in) :: dz8w !< thickness of lowest layer real (kind=kind_phys) , intent(in) :: dx - real (kind=kind_phys) , intent(in) :: shdmax !yearly max vegetation fraction + real (kind=kind_phys) , intent(in) :: shdmax !< yearly max vegetation fraction !jref:end ! input/output : need arbitary intial values - real (kind=kind_phys) , intent(inout) :: qsnow !snowfall [mm/s] - REAL (kind=kind_phys) , INTENT(INOUT) :: QRAIN !rainfall [mm/s] - real (kind=kind_phys) , intent(inout) :: fwet !wetted or snowed fraction of canopy (-) - real (kind=kind_phys) , intent(inout) :: sneqvo !snow mass at last time step (mm) - real (kind=kind_phys) , intent(inout) :: eah !canopy air vapor pressure (pa) - real (kind=kind_phys) , intent(inout) :: tah !canopy air tmeperature (k) - real (kind=kind_phys) , intent(inout) :: albold !snow albedo at last time step (class type) - real (kind=kind_phys) , intent(inout) :: cm !momentum drag coefficient - real (kind=kind_phys) , intent(inout) :: ch !sensible heat exchange coefficient - real (kind=kind_phys) , intent(inout) :: tauss !non-dimensional snow age + real (kind=kind_phys) , intent(inout) :: qsnow !< snowfall [mm/s] + REAL (kind=kind_phys) , INTENT(INOUT) :: QRAIN !< rainfall [mm/s] + real (kind=kind_phys) , intent(inout) :: fwet !< wetted or snowed fraction of canopy (-) + real (kind=kind_phys) , intent(inout) :: sneqvo !< snow mass at last time step (mm) + real (kind=kind_phys) , intent(inout) :: eah !< canopy air vapor pressure (pa) + real (kind=kind_phys) , intent(inout) :: tah !< canopy air tmeperature (k) + real (kind=kind_phys) , intent(inout) :: albold !< snow albedo at last time step (class type) + real (kind=kind_phys) , intent(inout) :: cm !< momentum drag coefficient + real (kind=kind_phys) , intent(inout) :: ch !< sensible heat exchange coefficient + real (kind=kind_phys) , intent(inout) :: tauss !< non-dimensional snow age ! prognostic variables - integer , intent(inout) :: isnow !actual no. of snow layers [-] - real (kind=kind_phys) , intent(inout) :: canliq !intercepted liquid water (mm) - real (kind=kind_phys) , intent(inout) :: canice !intercepted ice mass (mm) - real (kind=kind_phys) , intent(inout) :: sneqv !snow water eqv. [mm] - real (kind=kind_phys), dimension( 1:nsoil), intent(inout) :: smc !soil moisture (ice + liq.) [m3/m3] - real (kind=kind_phys), dimension(-nsnow+1:nsoil), intent(inout) :: zsnso !layer-bottom depth from snow surf [m] - real (kind=kind_phys) , intent(inout) :: snowh !snow height [m] - real (kind=kind_phys), dimension(-nsnow+1: 0), intent(inout) :: snice !snow layer ice [mm] - real (kind=kind_phys), dimension(-nsnow+1: 0), intent(inout) :: snliq !snow layer liquid water [mm] - real (kind=kind_phys) , intent(inout) :: tv !vegetation temperature (k) - real (kind=kind_phys) , intent(inout) :: tg !ground temperature (k) - real (kind=kind_phys), dimension(-nsnow+1:nsoil), intent(inout) :: stc !snow/soil temperature [k] - real (kind=kind_phys), dimension( 1:nsoil), intent(inout) :: sh2o !liquid soil moisture [m3/m3] - real (kind=kind_phys) , intent(inout) :: zwt !depth to water table [m] - real (kind=kind_phys) , intent(inout) :: wa !water storage in aquifer [mm] - real (kind=kind_phys) , intent(inout) :: wt !water in aquifer&saturated soil [mm] - real (kind=kind_phys) , intent(inout) :: wslake !lake water storage (can be neg.) (mm) - real (kind=kind_phys), intent(inout) :: smcwtd !soil water content between bottom of the soil and water table [m3/m3] - real (kind=kind_phys), intent(inout) :: deeprech !recharge to or from the water table when deep [m] - real (kind=kind_phys), intent(inout) :: rech !recharge to or from the water table when shallow [m] (diagnostic) + integer , intent(inout) :: isnow !< actual no. of snow layers [-] + real (kind=kind_phys) , intent(inout) :: canliq !< intercepted liquid water (mm) + real (kind=kind_phys) , intent(inout) :: canice !< intercepted ice mass (mm) + real (kind=kind_phys) , intent(inout) :: sneqv !< snow water eqv. [mm] + real (kind=kind_phys), dimension( 1:nsoil), intent(inout) :: smc !< soil moisture (ice + liq.) [m3/m3] + real (kind=kind_phys), dimension(-nsnow+1:nsoil), intent(inout) :: zsnso !< layer-bottom depth from snow surf [m] + real (kind=kind_phys) , intent(inout) :: snowh !< snow height [m] + real (kind=kind_phys), dimension(-nsnow+1: 0), intent(inout) :: snice !< snow layer ice [mm] + real (kind=kind_phys), dimension(-nsnow+1: 0), intent(inout) :: snliq !< snow layer liquid water [mm] + real (kind=kind_phys) , intent(inout) :: tv !< vegetation temperature (k) + real (kind=kind_phys) , intent(inout) :: tg !< ground temperature (k) + real (kind=kind_phys), dimension(-nsnow+1:nsoil), intent(inout) :: stc !< snow/soil temperature [k] + real (kind=kind_phys), dimension( 1:nsoil), intent(inout) :: sh2o !< liquid soil moisture [m3/m3] + real (kind=kind_phys) , intent(inout) :: zwt !< depth to water table [m] + real (kind=kind_phys) , intent(inout) :: wa !< water storage in aquifer [mm] + real (kind=kind_phys) , intent(inout) :: wt !< water in aquifer&saturated soil [mm] + real (kind=kind_phys) , intent(inout) :: wslake !< lake water storage (can be neg.) (mm) + real (kind=kind_phys), intent(inout) :: smcwtd !< soil water content between bottom of the soil and water table [m3/m3] + real (kind=kind_phys), intent(inout) :: deeprech !< recharge to or from the water table when deep [m] + real (kind=kind_phys), intent(inout) :: rech !< recharge to or from the water table when shallow [m] (diagnostic) ! output - real (kind=kind_phys) , intent(out) :: z0wrf !combined z0 sent to coupled model - real (kind=kind_phys) , intent(out) :: fsa !total absorbed solar radiation (w/m2) - real (kind=kind_phys) , intent(out) :: fsr !total reflected solar radiation (w/m2) - real (kind=kind_phys) , intent(out) :: fira !total net lw rad (w/m2) [+ to atm] - real (kind=kind_phys) , intent(out) :: fsh !total sensible heat (w/m2) [+ to atm] - real (kind=kind_phys) , intent(out) :: fcev !canopy evap heat (w/m2) [+ to atm] - real (kind=kind_phys) , intent(out) :: fgev !ground evap heat (w/m2) [+ to atm] - real (kind=kind_phys) , intent(out) :: fctr !transpiration heat (w/m2) [+ to atm] - real (kind=kind_phys) , intent(out) :: ssoil !ground heat flux (w/m2) [+ to soil] - real (kind=kind_phys) , intent(out) :: trad !surface radiative temperature (k) - real (kind=kind_phys) :: ts !surface temperature (k) - real (kind=kind_phys) , intent(out) :: ecan !evaporation of intercepted water (mm/s) - real (kind=kind_phys) , intent(out) :: etran !transpiration rate (mm/s) - real (kind=kind_phys) , intent(out) :: edir !soil surface evaporation rate (mm/s] - real (kind=kind_phys) , intent(out) :: runsrf !surface runoff [mm/s] - real (kind=kind_phys) , intent(out) :: runsub !baseflow (saturation excess) [mm/s] - real (kind=kind_phys) , intent(out) :: psn !total photosynthesis (umol co2/m2/s) [+] - real (kind=kind_phys) , intent(out) :: apar !photosyn active energy by canopy (w/m2) - real (kind=kind_phys) , intent(out) :: sav !solar rad absorbed by veg. (w/m2) - real (kind=kind_phys) , intent(out) :: sag !solar rad absorbed by ground (w/m2) - real (kind=kind_phys) , intent(out) :: fsno !snow cover fraction on the ground (-) - real (kind=kind_phys) , intent(out) :: fveg !green vegetation fraction [0.0-1.0] - real (kind=kind_phys) , intent(out) :: albedo !surface albedo [-] - real (kind=kind_phys) :: errwat !water error [kg m{-2}] - real (kind=kind_phys) , intent(out) :: qsnbot !snowmelt out bottom of pack [mm/s] - real (kind=kind_phys) , intent(out) :: ponding!surface ponding [mm] - real (kind=kind_phys) , intent(out) :: ponding1!surface ponding [mm] - real (kind=kind_phys) , intent(out) :: ponding2!surface ponding [mm] + real (kind=kind_phys) , intent(out) :: z0wrf !< combined z0 sent to coupled model + real (kind=kind_phys) , intent(out) :: fsa !< total absorbed solar radiation (w/m2) + real (kind=kind_phys) , intent(out) :: fsr !< total reflected solar radiation (w/m2) + real (kind=kind_phys) , intent(out) :: fira !< total net lw rad (w/m2) [+ to atm] + real (kind=kind_phys) , intent(out) :: fsh !< total sensible heat (w/m2) [+ to atm] + real (kind=kind_phys) , intent(out) :: fcev !< canopy evap heat (w/m2) [+ to atm] + real (kind=kind_phys) , intent(out) :: fgev !< ground evap heat (w/m2) [+ to atm] + real (kind=kind_phys) , intent(out) :: fctr !< transpiration heat (w/m2) [+ to atm] + real (kind=kind_phys) , intent(out) :: ssoil !< ground heat flux (w/m2) [+ to soil] + real (kind=kind_phys) , intent(out) :: trad !< surface radiative temperature (k) + real (kind=kind_phys) :: ts !< surface temperature (k) + real (kind=kind_phys) , intent(out) :: ecan !< evaporation of intercepted water (mm/s) + real (kind=kind_phys) , intent(out) :: etran !< transpiration rate (mm/s) + real (kind=kind_phys) , intent(out) :: edir !< soil surface evaporation rate (mm/s] + real (kind=kind_phys) , intent(out) :: runsrf !< surface runoff [mm/s] + real (kind=kind_phys) , intent(out) :: runsub !< baseflow (saturation excess) [mm/s] + real (kind=kind_phys) , intent(out) :: psn !< total photosynthesis (umol co2/m2/s) [+] + real (kind=kind_phys) , intent(out) :: apar !< photosyn active energy by canopy (w/m2) + real (kind=kind_phys) , intent(out) :: sav !< solar rad absorbed by veg. (w/m2) + real (kind=kind_phys) , intent(out) :: sag !< solar rad absorbed by ground (w/m2) + real (kind=kind_phys) , intent(out) :: fsno !< snow cover fraction on the ground (-) + real (kind=kind_phys) , intent(out) :: fveg !< green vegetation fraction [0.0-1.0] + real (kind=kind_phys) , intent(out) :: albedo !< surface albedo [-] + real (kind=kind_phys) :: errwat !< water error [kg m{-2}] + real (kind=kind_phys) , intent(out) :: qsnbot !< snowmelt out bottom of pack [mm/s] + real (kind=kind_phys) , intent(out) :: ponding!< surface ponding [mm] + real (kind=kind_phys) , intent(out) :: ponding1!< surface ponding [mm] + real (kind=kind_phys) , intent(out) :: ponding2!< surface ponding [mm] real (kind=kind_phys) , intent(out) :: esnow - real (kind=kind_phys) , intent(out) :: rb ! leaf boundary layer resistance (s/m) - real (kind=kind_phys) , intent(out) :: laisun ! sunlit leaf area index (m2/m2) - real (kind=kind_phys) , intent(out) :: laisha ! shaded leaf area index (m2/m2) + real (kind=kind_phys) , intent(out) :: rb !< leaf boundary layer resistance (s/m) + real (kind=kind_phys) , intent(out) :: laisun !< sunlit leaf area index (m2/m2) + real (kind=kind_phys) , intent(out) :: laisha !< shaded leaf area index (m2/m2) !jref:start; output - real (kind=kind_phys) , intent(out) :: t2mv !2-m air temperature over vegetated part [k] - real (kind=kind_phys) , intent(out) :: t2mb !2-m air temperature over bare ground part [k] - real (kind=kind_phys), intent(out) :: rssun !sunlit leaf stomatal resistance (s/m) - real (kind=kind_phys), intent(out) :: rssha !shaded leaf stomatal resistance (s/m) + real (kind=kind_phys) , intent(out) :: t2mv !< 2-m air temperature over vegetated part [k] + real (kind=kind_phys) , intent(out) :: t2mb !< 2-m air temperature over bare ground part [k] + real (kind=kind_phys), intent(out) :: rssun !< sunlit leaf stomatal resistance (s/m) + real (kind=kind_phys), intent(out) :: rssha !< shaded leaf stomatal resistance (s/m) real (kind=kind_phys), intent(out) :: bgap real (kind=kind_phys), intent(out) :: wgap - real (kind=kind_phys), dimension(1:2) , intent(out) :: albd ! albedo (direct) - real (kind=kind_phys), dimension(1:2) , intent(out) :: albi ! albedo (diffuse) - real (kind=kind_phys), dimension(1:2) , intent(out) :: albsnd !snow albedo (direct) - real (kind=kind_phys), dimension(1:2) , intent(out) :: albsni !snow albedo (diffuse) + real (kind=kind_phys), dimension(1:2) , intent(out) :: albd !< albedo (direct) + real (kind=kind_phys), dimension(1:2) , intent(out) :: albi !< albedo (diffuse) + real (kind=kind_phys), dimension(1:2) , intent(out) :: albsnd !< snow albedo (direct) + real (kind=kind_phys), dimension(1:2) , intent(out) :: albsni !< snow albedo (diffuse) real (kind=kind_phys), intent(out) :: tgv real (kind=kind_phys), intent(out) :: tgb real (kind=kind_phys) :: q1 @@ -552,59 +552,59 @@ subroutine noahmp_sflx (parameters, & #endif ! local - integer :: iz !do-loop index - integer, dimension(-nsnow+1:nsoil) :: imelt !phase change index [1-melt; 2-freeze] - real (kind=kind_phys) :: cmc !intercepted water (canice+canliq) (mm) - real (kind=kind_phys) :: taux !wind stress: e-w (n/m2) - real (kind=kind_phys) :: tauy !wind stress: n-s (n/m2) - real (kind=kind_phys) :: rhoair !density air (kg/m3) -! real (kind=kind_phys), dimension( 1: 5) :: vocflx !voc fluxes [ug c m-2 h-1] - real (kind=kind_phys), dimension(-nsnow+1:nsoil) :: dzsnso !snow/soil layer thickness [m] - real (kind=kind_phys) :: thair !potential temperature (k) - real (kind=kind_phys) :: qair !specific humidity (kg/kg) (q2/(1+q2)) - real (kind=kind_phys) :: eair !vapor pressure air (pa) - real (kind=kind_phys), dimension( 1: 2) :: solad !incoming direct solar rad (w/m2) - real (kind=kind_phys), dimension( 1: 2) :: solai !incoming diffuse solar rad (w/m2) - real (kind=kind_phys) :: qprecc !convective precipitation (mm/s) - real (kind=kind_phys) :: qprecl !large-scale precipitation (mm/s) - real (kind=kind_phys) :: igs !growing season index (0=off, 1=on) - real (kind=kind_phys) :: elai !leaf area index, after burying by snow - real (kind=kind_phys) :: esai !stem area index, after burying by snow - real (kind=kind_phys) :: bevap !soil water evaporation factor (0 - 1) - real (kind=kind_phys), dimension( 1:nsoil) :: btrani !soil water transpiration factor (0 - 1) - real (kind=kind_phys) :: btran !soil water transpiration factor (0 - 1) - real (kind=kind_phys) :: qin !groundwater recharge [mm/s] - real (kind=kind_phys) :: qdis !groundwater discharge [mm/s] - real (kind=kind_phys), dimension( 1:nsoil) :: sice !soil ice content (m3/m3) - real (kind=kind_phys), dimension(-nsnow+1: 0) :: snicev !partial volume ice of snow [m3/m3] - real (kind=kind_phys), dimension(-nsnow+1: 0) :: snliqv !partial volume liq of snow [m3/m3] - real (kind=kind_phys), dimension(-nsnow+1: 0) :: epore !effective porosity [m3/m3] - real (kind=kind_phys) :: totsc !total soil carbon (g/m2) - real (kind=kind_phys) :: totlb !total living carbon (g/m2) - real (kind=kind_phys) :: t2m !2-meter air temperature (k) - real (kind=kind_phys) :: qdew !ground surface dew rate [mm/s] - real (kind=kind_phys) :: qvap !ground surface evap. rate [mm/s] - real (kind=kind_phys) :: lathea !latent heat [j/kg] - real (kind=kind_phys) :: swdown !downward solar [w/m2] - real (kind=kind_phys) :: qmelt !snowmelt [mm/s] - real (kind=kind_phys) :: beg_wb !water storage at begin of a step [mm] - real (kind=kind_phys),intent(out) :: irc !canopy net lw rad. [w/m2] [+ to atm] - real (kind=kind_phys),intent(out) :: irg !ground net lw rad. [w/m2] [+ to atm] - real (kind=kind_phys),intent(out) :: shc !canopy sen. heat [w/m2] [+ to atm] - real (kind=kind_phys),intent(out) :: shg !ground sen. heat [w/m2] [+ to atm] - real (kind=kind_phys),intent(out) :: evg !ground evap. heat [w/m2] [+ to atm] - real (kind=kind_phys),intent(out) :: ghv !ground heat flux [w/m2] [+ to soil] - real (kind=kind_phys),intent(out) :: irb !net longwave rad. [w/m2] [+ to atm] - real (kind=kind_phys),intent(out) :: shb !sensible heat [w/m2] [+ to atm] - real (kind=kind_phys),intent(out) :: evb !evaporation heat [w/m2] [+ to atm] - real (kind=kind_phys),intent(out) :: ghb !ground heat flux [w/m2] [+ to soil] - real (kind=kind_phys),intent(out) :: evc !canopy evap. heat [w/m2] [+ to atm] - real (kind=kind_phys),intent(out) :: tr !transpiration heat [w/m2] [+ to atm] - real (kind=kind_phys), intent(out) :: fpice !snow fraction in precipitation - real (kind=kind_phys), intent(out) :: pahv !precipitation advected heat - vegetation net (w/m2) - real (kind=kind_phys), intent(out) :: pahg !precipitation advected heat - under canopy net (w/m2) - real (kind=kind_phys), intent(out) :: pahb !precipitation advected heat - bare ground net (w/m2) - real (kind=kind_phys), intent(out) :: pah !precipitation advected heat - total (w/m2) + integer :: iz !< do-loop index + integer, dimension(-nsnow+1:nsoil) :: imelt !< phase change index [1-melt; 2-freeze] + real (kind=kind_phys) :: cmc !< intercepted water (canice+canliq) (mm) + real (kind=kind_phys) :: taux !< wind stress: e-w (n/m2) + real (kind=kind_phys) :: tauy !< wind stress: n-s (n/m2) + real (kind=kind_phys) :: rhoair !< density air (kg/m3) +! real (kind=kind_phys), dimension( 1: 5) :: vocflx !< voc fluxes [ug c m-2 h-1] + real (kind=kind_phys), dimension(-nsnow+1:nsoil) :: dzsnso !< snow/soil layer thickness [m] + real (kind=kind_phys) :: thair !< potential temperature (k) + real (kind=kind_phys) :: qair !< specific humidity (kg/kg) (q2/(1+q2)) + real (kind=kind_phys) :: eair !< vapor pressure air (pa) + real (kind=kind_phys), dimension( 1: 2) :: solad !< incoming direct solar rad (w/m2) + real (kind=kind_phys), dimension( 1: 2) :: solai !< incoming diffuse solar rad (w/m2) + real (kind=kind_phys) :: qprecc !< convective precipitation (mm/s) + real (kind=kind_phys) :: qprecl !< large-scale precipitation (mm/s) + real (kind=kind_phys) :: igs !< growing season index (0=off, 1=on) + real (kind=kind_phys) :: elai !< leaf area index, after burying by snow + real (kind=kind_phys) :: esai !< stem area index, after burying by snow + real (kind=kind_phys) :: bevap !< soil water evaporation factor (0 - 1) + real (kind=kind_phys), dimension( 1:nsoil) :: btrani !< soil water transpiration factor (0 - 1) + real (kind=kind_phys) :: btran !< soil water transpiration factor (0 - 1) + real (kind=kind_phys) :: qin !< groundwater recharge [mm/s] + real (kind=kind_phys) :: qdis !< groundwater discharge [mm/s] + real (kind=kind_phys), dimension( 1:nsoil) :: sice !< soil ice content (m3/m3) + real (kind=kind_phys), dimension(-nsnow+1: 0) :: snicev !< partial volume ice of snow [m3/m3] + real (kind=kind_phys), dimension(-nsnow+1: 0) :: snliqv !< partial volume liq of snow [m3/m3] + real (kind=kind_phys), dimension(-nsnow+1: 0) :: epore !< effective porosity [m3/m3] + real (kind=kind_phys) :: totsc !< total soil carbon (g/m2) + real (kind=kind_phys) :: totlb !< total living carbon (g/m2) + real (kind=kind_phys) :: t2m !< 2-meter air temperature (k) + real (kind=kind_phys) :: qdew !< ground surface dew rate [mm/s] + real (kind=kind_phys) :: qvap !< ground surface evap. rate [mm/s] + real (kind=kind_phys) :: lathea !< latent heat [j/kg] + real (kind=kind_phys) :: swdown !< downward solar [w/m2] + real (kind=kind_phys) :: qmelt !< snowmelt [mm/s] + real (kind=kind_phys) :: beg_wb !< water storage at begin of a step [mm] + real (kind=kind_phys),intent(out) :: irc !< canopy net lw rad. [w/m2] [+ to atm] + real (kind=kind_phys),intent(out) :: irg !< ground net lw rad. [w/m2] [+ to atm] + real (kind=kind_phys),intent(out) :: shc !< canopy sen. heat [w/m2] [+ to atm] + real (kind=kind_phys),intent(out) :: shg !< ground sen. heat [w/m2] [+ to atm] + real (kind=kind_phys),intent(out) :: evg !< ground evap. heat [w/m2] [+ to atm] + real (kind=kind_phys),intent(out) :: ghv !< ground heat flux [w/m2] [+ to soil] + real (kind=kind_phys),intent(out) :: irb !< net longwave rad. [w/m2] [+ to atm] + real (kind=kind_phys),intent(out) :: shb !< sensible heat [w/m2] [+ to atm] + real (kind=kind_phys),intent(out) :: evb !< evaporation heat [w/m2] [+ to atm] + real (kind=kind_phys),intent(out) :: ghb !< ground heat flux [w/m2] [+ to soil] + real (kind=kind_phys),intent(out) :: evc !< canopy evap. heat [w/m2] [+ to atm] + real (kind=kind_phys),intent(out) :: tr !< transpiration heat [w/m2] [+ to atm] + real (kind=kind_phys), intent(out) :: fpice !< snow fraction in precipitation + real (kind=kind_phys), intent(out) :: pahv !< precipitation advected heat - vegetation net (w/m2) + real (kind=kind_phys), intent(out) :: pahg !< precipitation advected heat - under canopy net (w/m2) + real (kind=kind_phys), intent(out) :: pahb !< precipitation advected heat - bare ground net (w/m2) + real (kind=kind_phys), intent(out) :: pah !< precipitation advected heat - total (w/m2) !jref:start real (kind=kind_phys) :: fsrv @@ -613,58 +613,58 @@ subroutine noahmp_sflx (parameters, & real (kind=kind_phys),intent(out) :: q2b real (kind=kind_phys) :: q2e real (kind=kind_phys) :: qfx - real (kind=kind_phys),intent(out) :: chv !sensible heat exchange coefficient over vegetated fraction - real (kind=kind_phys),intent(out) :: chb !sensible heat exchange coefficient over bare-ground - real (kind=kind_phys),intent(out) :: chleaf !leaf exchange coefficient - real (kind=kind_phys),intent(out) :: chuc !under canopy exchange coefficient - real (kind=kind_phys),intent(out) :: chv2 !sensible heat exchange coefficient over vegetated fraction - real (kind=kind_phys),intent(out) :: chb2 !sensible heat exchange coefficient over bare-ground + real (kind=kind_phys),intent(out) :: chv !< sensible heat exchange coefficient over vegetated fraction + real (kind=kind_phys),intent(out) :: chb !< sensible heat exchange coefficient over bare-ground + real (kind=kind_phys),intent(out) :: chleaf !< leaf exchange coefficient + real (kind=kind_phys),intent(out) :: chuc !< under canopy exchange coefficient + real (kind=kind_phys),intent(out) :: chv2 !< sensible heat exchange coefficient over vegetated fraction + real (kind=kind_phys),intent(out) :: chb2 !< sensible heat exchange coefficient over bare-ground !jref:end ! carbon ! inputs - real (kind=kind_phys) , intent(in) :: co2air !atmospheric co2 concentration (pa) - real (kind=kind_phys) , intent(in) :: o2air !atmospheric o2 concentration (pa) + real (kind=kind_phys) , intent(in) :: co2air !< atmospheric co2 concentration (pa) + real (kind=kind_phys) , intent(in) :: o2air !< atmospheric o2 concentration (pa) ! inputs and outputs : prognostic variables - real (kind=kind_phys) , intent(inout) :: lfmass !leaf mass [g/m2] - real (kind=kind_phys) , intent(inout) :: rtmass !mass of fine roots [g/m2] - real (kind=kind_phys) , intent(inout) :: stmass !stem mass [g/m2] - real (kind=kind_phys) , intent(inout) :: wood !mass of wood (incl. woody roots) [g/m2] - real (kind=kind_phys) , intent(inout) :: stblcp !stable carbon in deep soil [g/m2] - real (kind=kind_phys) , intent(inout) :: fastcp !short-lived carbon, shallow soil [g/m2] - real (kind=kind_phys) , intent(inout) :: lai !leaf area index [-] - real (kind=kind_phys) , intent(inout) :: sai !stem area index [-] - real (kind=kind_phys) , intent(inout) :: grain !grain mass [g/m2] - real (kind=kind_phys) , intent(inout) :: gdd !growing degree days - integer , intent(inout) :: pgs !plant growing stage [-] + real (kind=kind_phys) , intent(inout) :: lfmass !< leaf mass [g/m2] + real (kind=kind_phys) , intent(inout) :: rtmass !< mass of fine roots [g/m2] + real (kind=kind_phys) , intent(inout) :: stmass !< stem mass [g/m2] + real (kind=kind_phys) , intent(inout) :: wood !< mass of wood (incl. woody roots) [g/m2] + real (kind=kind_phys) , intent(inout) :: stblcp !< stable carbon in deep soil [g/m2] + real (kind=kind_phys) , intent(inout) :: fastcp !< short-lived carbon, shallow soil [g/m2] + real (kind=kind_phys) , intent(inout) :: lai !< leaf area index [-] + real (kind=kind_phys) , intent(inout) :: sai !< stem area index [-] + real (kind=kind_phys) , intent(inout) :: grain !< grain mass [g/m2] + real (kind=kind_phys) , intent(inout) :: gdd !< growing degree days + integer , intent(inout) :: pgs !< plant growing stage [-] ! outputs - real (kind=kind_phys) , intent(out) :: nee !net ecosys exchange (g/m2/s co2) - real (kind=kind_phys) , intent(out) :: gpp !net instantaneous assimilation [g/m2/s c] - real (kind=kind_phys) , intent(out) :: npp !net primary productivity [g/m2/s c] - real (kind=kind_phys) :: autors !net ecosystem respiration (g/m2/s c) - real (kind=kind_phys) :: heters !organic respiration (g/m2/s c) - real (kind=kind_phys) :: troot !root-zone averaged temperature (k) - real (kind=kind_phys) :: bdfall !bulk density of new snow (kg/m3) ! mb/an: v3.7 - real (kind=kind_phys) :: rain !rain rate (mm/s) ! mb/an: v3.7 - real (kind=kind_phys) :: snow !liquid equivalent snow rate (mm/s) ! mb/an: v3.7 + real (kind=kind_phys) , intent(out) :: nee !< net ecosys exchange (g/m2/s co2) + real (kind=kind_phys) , intent(out) :: gpp !< net instantaneous assimilation [g/m2/s c] + real (kind=kind_phys) , intent(out) :: npp !< net primary productivity [g/m2/s c] + real (kind=kind_phys) :: autors !< net ecosystem respiration (g/m2/s c) + real (kind=kind_phys) :: heters !< organic respiration (g/m2/s c) + real (kind=kind_phys) :: troot !< root-zone averaged temperature (k) + real (kind=kind_phys) :: bdfall !< bulk density of new snow (kg/m3) ! mb/an: v3.7 + real (kind=kind_phys) :: rain !< rain rate (mm/s) ! mb/an: v3.7 + real (kind=kind_phys) :: snow !< liquid equivalent snow rate (mm/s) ! mb/an: v3.7 real (kind=kind_phys) :: fp ! mb/an: v3.7 real (kind=kind_phys) :: prcp ! mb/an: v3.7 !more local variables for precip heat mb - real (kind=kind_phys) :: qintr !interception rate for rain (mm/s) - real (kind=kind_phys) :: qdripr !drip rate for rain (mm/s) - real (kind=kind_phys) :: qthror !throughfall for rain (mm/s) - real (kind=kind_phys) :: qints !interception (loading) rate for snowfall (mm/s) - real (kind=kind_phys) :: qdrips !drip (unloading) rate for intercepted snow (mm/s) - real (kind=kind_phys) :: qthros !throughfall of snowfall (mm/s) - real (kind=kind_phys) :: snowhin !snow depth increasing rate (m/s) - real (kind=kind_phys) :: latheav !latent heat vap./sublimation (j/kg) - real (kind=kind_phys) :: latheag !latent heat vap./sublimation (j/kg) - logical :: frozen_ground ! used to define latent heat pathway - logical :: frozen_canopy ! used to define latent heat pathway - LOGICAL :: dveg_active ! flag to run dynamic vegetation - LOGICAL :: crop_active ! flag to run crop model + real (kind=kind_phys) :: qintr !< interception rate for rain (mm/s) + real (kind=kind_phys) :: qdripr !< drip rate for rain (mm/s) + real (kind=kind_phys) :: qthror !< throughfall for rain (mm/s) + real (kind=kind_phys) :: qints !< interception (loading) rate for snowfall (mm/s) + real (kind=kind_phys) :: qdrips !< drip (unloading) rate for intercepted snow (mm/s) + real (kind=kind_phys) :: qthros !< throughfall of snowfall (mm/s) + real (kind=kind_phys) :: snowhin !< snow depth increasing rate (m/s) + real (kind=kind_phys) :: latheav !< latent heat vap./sublimation (j/kg) + real (kind=kind_phys) :: latheag !< latent heat vap./sublimation (j/kg) + logical :: frozen_ground !< used to define latent heat pathway + logical :: frozen_canopy !< used to define latent heat pathway + LOGICAL :: dveg_active !< flag to run dynamic vegetation + LOGICAL :: crop_active !< flag to run crop model ! intent (out) variables need to be assigned a value. these normally get assigned values ! only if dveg == 2. @@ -882,6 +882,7 @@ end subroutine noahmp_sflx !== begin atm ====================================================================================== !>\ingroup NoahMP_LSM +!! re-precess atmospheric forcing. subroutine atm (parameters,sfcprs ,sfctmp ,q2 , & prcpconv,prcpnonc ,prcpshcv,prcpsnow,prcpgrpl,prcphail , & soldn ,cosz ,thair ,qair , & @@ -1029,6 +1030,8 @@ end subroutine atm !== begin phenology ================================================================================ !>\ingroup NoahMP_LSM +!!vegetation phenology considering vegetation canopy being buried by snow and +!!evolution in time. subroutine phenology (parameters,vegtyp ,croptype, snowh , tv , lat , yearlen , julian , & !in lai , sai , troot , elai , esai , igs, pgs) @@ -1143,6 +1146,8 @@ end subroutine phenology !== begin precip_heat ============================================================================== !>\ingroup NoahMP_LSM +!! Michael Barlage: Oct 2013 - Split canwater to calculate precip movement for +!! tracking of advected heat. subroutine precip_heat (parameters,iloc ,jloc ,vegtyp ,dt ,uu ,vv , & !in elai ,esai ,fveg ,ist , & !in bdfall ,rain ,snow ,fp , & !in @@ -1373,6 +1378,7 @@ end subroutine precip_heat !== begin error ==================================================================================== !>\ingroup NoahMP_LSM +!! check surface energy balance and water balance. subroutine error (parameters,swdown ,fsa ,fsr ,fira ,fsh ,fcev , & fgev ,fctr ,ssoil ,beg_wb ,canliq ,canice , & sneqv ,wa ,smc ,dzsnso ,prcp ,ecan , & @@ -1567,6 +1573,13 @@ end subroutine error !== begin energy =================================================================================== !>\ingroup NoahMP_LSM +!! We use different approaches to deal with subgrid features of radiation +!! transfer and turbulent transfer. we use 'tile' approach to compute turbulent +!! fluxes,while we use modified two-stream to compute radiation transfer. +!! tile approach, assemblying vegetation canopies together, +!! may expose too much ground surfaces (either covered by snow or grass) to solar +!! radiation. the modified two-stream assumes vegetation covers fully the +!! gridcell but with gaps between tree crowns. subroutine energy (parameters,ice ,vegtyp ,ist ,nsnow ,nsoil , & !in isnow ,dt ,rhoair ,sfcprs ,qair , & !in sfctmp ,thair ,lwdn ,uu ,vv ,zref , & !in @@ -2357,6 +2370,7 @@ end subroutine thermoprop !== begin csnow ==================================================================================== !>\ingroup NoahMP_LSM +!! snow bulk density,volumetric capacity, and thermal conductivity subroutine csnow (parameters,isnow ,nsnow ,nsoil ,snice ,snliq ,dzsnso , & !in tksno ,cvsno ,snicev ,snliqv ,epore ) !out ! -------------------------------------------------------------------------------------------------- @@ -2417,6 +2431,8 @@ end subroutine csnow !== begin tdfcnd =================================================================================== !>\ingroup NoahMP_LSM +!! calculate thermal diffusivity and conductivity of the soil. peters-lidard +!! approach (peters-lidard et al., 1998) subroutine tdfcnd (parameters, isoil, df, smc, sh2o) ! -------------------------------------------------------------------------------------------------- ! calculate thermal diffusivity and conductivity of the soil. @@ -2656,6 +2672,9 @@ end subroutine radiation !== begin albedo =================================================================================== !>\ingroup NoahMP_LSM +!! surface albedos. also fluxes (per unit incoming direct and diffuse radiation) +!! reflected, transmitted, and absorbed by vegetation. also sunlight fraction +!! of the canopy. subroutine albedo (parameters,vegtyp ,ist ,ice ,nsoil , & !in dt ,cosz ,fage ,elai ,esai , & !in tg ,tv ,snowh ,fsno ,fwet , & !in @@ -3199,6 +3218,11 @@ end subroutine groundalb !== begin twostream ================================================================================ !>\ingroup NoahMP_LSM +!! use two-stream approximation of Dickinson (1983) adv geophysics +!! 25: 305-353 and sellers (1985) int j remote sensing 6: 1335-1372 +!! to calculate fluxes absorbed by vegetation, reflected by vegetation, +!! and transmitted through vegetation for unit incoming direct or diffuse +!! flux given an underlying surface with known albedo. subroutine twostream (parameters,ib ,ic ,vegtyp ,cosz ,vai , & !in fwet ,t ,albgrd ,albgri ,rho , & !in tau ,fveg ,ist ,iloc ,jloc , & !in @@ -3449,6 +3473,8 @@ end subroutine twostream !== begin vege_flux ================================================================================ !>\ingroup NoahMP_LSM +!! use newton-raphson iteration to solve for vegetation (tv) and +!! ground (tg) temperatures that balance the surface energy budgets. subroutine vege_flux(parameters,nsnow ,nsoil ,isnow ,vegtyp ,veg , & !in dt ,sav ,sag ,lwdn ,ur , & !in uu ,vv ,sfctmp ,thair ,qair , & !in @@ -4015,6 +4041,8 @@ end subroutine vege_flux !== begin bare_flux ================================================================================ !>\ingroup NoahMP_LSM +!! use newton-raphson iteration to solve ground (tg) temperature +!! that balances the surface energy budgets for bare soil fraction. subroutine bare_flux (parameters,nsnow ,nsoil ,isnow ,dt ,sag , & !in lwdn ,ur ,uu ,vv ,sfctmp , & !in thair ,qair ,eair ,rhoair ,snowh , & !in @@ -4340,6 +4368,8 @@ end subroutine bare_flux !== begin ragrb ==================================================================================== !>\ingroup NoahMP_LSM +!! compute under-canopy aerodynamic resistance rag and leaf boundary layer +!! resistance rb. subroutine ragrb(parameters,iter ,vai ,rhoair ,hg ,tah , & !in zpd ,z0mg ,z0hg ,hcan ,uc , & !in z0h ,fv ,cwp ,vegtyp ,mpe , & !in @@ -4442,6 +4472,7 @@ end subroutine ragrb !== begin sfcdif1 ================================================================================== !>\ingroup NoahMP_LSM +!! compute surface drag coefficient cm for momentum and ch for heat. subroutine sfcdif1(parameters,iter ,sfctmp ,rhoair ,h ,qair , & !in & zlvl ,zpd ,z0m ,z0h ,ur , & !in & mpe ,iloc ,jloc , & !in @@ -4621,6 +4652,8 @@ end subroutine sfcdif1 !== begin sfcdif2 ================================================================================== !>\ingroup NoahMP_LSM +!! calculate surface layer exchange coefficients via iteractive process (Chen et +!! al. 1997, blm) subroutine sfcdif2(parameters,iter ,z0 ,thz0 ,thlm ,sfcspd , & !in zlm ,iloc ,jloc , & !in akms ,akhs ,rlmo ,wstar2 , & !in @@ -4828,6 +4861,8 @@ end subroutine sfcdif2 !== begin esat ===================================================================================== !>\ingroup NoahMP_LSM +!! use polynomials to calculate saturation vapor pressure and derivative with +!! respect to temperature: over water when t > 0 c and over ice when t <= 0 c. subroutine esat(t, esw, esi, desw, desi) !--------------------------------------------------------------------------------------------------- ! use polynomials to calculate saturation vapor pressure and derivative with @@ -5016,6 +5051,10 @@ end subroutine stomata !== begin canres =================================================================================== !>\ingroup NoahMP_LSM +!! calculate canopy resistance which depends on incoming solar radiation, +!! air temperature, atmospheric water vapor pressure deficit at the lowest +!! model level, and soil moisture (preferably unfrozen soil moisture rather +!! than total). subroutine canres (parameters,par ,sfctmp,rcsoil ,eah ,sfcprs , & !in rc ,psn ,iloc ,jloc ) !out @@ -5133,6 +5172,10 @@ end subroutine calhum !== begin tsnosoi ================================================================================== !>\ingroup NoahMP_LSM +!! compute snow (up to 3l) and soil (4l) temperature. note that snow +!! temperatures during melting season may exceed melting point (tfrz) but later +!! in phasechange subroutine the snow temperatures are reset to tfrz for melting +!! snow. subroutine tsnosoi (parameters,ice ,nsoil ,nsnow ,isnow ,ist , & !in tbot ,zsnso ,ssoil ,df ,hcpct , & !in sag ,dt ,snowh ,dzsnso , & !in @@ -5269,6 +5312,9 @@ end subroutine tsnosoi !== begin hrt ====================================================================================== !>\ingroup NoahMP_LSM +!! calculate the right hand side of the time tendency term of the soil +!! thermal diffusion equation. also to compute (prepare) the matrix +!! coefficients for the tri-diagonal matrix of the implicit time scheme. subroutine hrt (parameters,nsnow ,nsoil ,isnow ,zsnso , & stc ,tbot ,zbot ,dt , & df ,hcpct ,ssoil ,phi , & @@ -5372,6 +5418,7 @@ end subroutine hrt !== begin hstep ==================================================================================== !>\ingroup NoahMP_LSM +!! calculate/update the soil temperature fields. subroutine hstep (parameters,nsnow ,nsoil ,isnow ,dt , & ai ,bi ,ci ,rhsts , & stc ) @@ -5492,6 +5539,7 @@ end subroutine rosr12 !== begin phasechange ============================================================================== !>\ingroup NoahMP_LSM +!! melting/freezing of snow water and soil water subroutine phasechange (parameters,nsnow ,nsoil ,isnow ,dt ,fact , & !in dzsnso ,hcpct ,ist ,iloc ,jloc , & !in stc ,snice ,snliq ,sneqv ,snowh , & !inout @@ -5723,6 +5771,10 @@ end subroutine phasechange !== begin frh2o ==================================================================================== !>\ingroup NoahMP_LSM +!! calculate amount of supercooled liquid soil water content if +!! temperature is below 273.15k (tfrz). requires newton-type iteration +!! to solve the nonlinear implicit equation given in eqn 17 of koren et al. +!! (1999, jgr, vol 104(d16),19569-19585) subroutine frh2o (parameters,isoil,free,tkelv,smc,sh2o,& #ifdef CCPP errmsg,errflg) @@ -6109,6 +6161,7 @@ end subroutine water !== begin canwater ================================================================================= !>\ingroup NoahMP_LSM +!! canopy hydrology subroutine canwater (parameters,vegtyp ,dt , & !in fcev ,fctr ,elai , & !in esai ,tg ,fveg ,iloc , jloc , & !in @@ -6376,6 +6429,8 @@ end subroutine snowwater !== begin snowfall ================================================================================= !>\ingroup NoahMP_LSM +!! snow depth and density to account for the new snowfall. +!! new values of snow depth & density returned. subroutine snowfall (parameters,nsoil ,nsnow ,dt ,qsnow ,snowhin , & !in sfctmp ,iloc ,jloc , & !in isnow ,snowh ,dzsnso ,stc ,snice , & !inout @@ -6927,6 +6982,8 @@ end subroutine compact !== begin snowh2o ================================================================================== !>\ingroup NoahMP_LSM +!! renew the mass of ice lens (snice) and liquid (snliq) of the +!! surface snow layer resulting from sublimation (frost) / evaporation (dew) subroutine snowh2o (parameters,nsnow ,nsoil ,dt ,qsnfro ,qsnsub , & !in qrain ,iloc ,jloc , & !in isnow ,dzsnso ,snowh ,sneqv ,snice , & !inout @@ -7077,6 +7134,7 @@ end subroutine snowh2o !== begin soilwater ================================================================================ !>\ingroup NoahMP_LSM +!! calculate surface runoff and soil moisture. subroutine soilwater (parameters,nsoil ,nsnow ,dt ,zsoil ,dzsnso , & !in qinsur ,qseva ,etrani ,sice ,iloc , jloc, & !in sh2o ,smc ,zwt ,vegtyp ,& !inout @@ -7348,6 +7406,7 @@ end subroutine soilwater !== begin zwteq ==================================================================================== !>\ingroup NoahMP_LSM +!! calculate equilibrium water table depth (niu et al., 2005) subroutine zwteq (parameters,nsoil ,nsnow ,zsoil ,dzsnso ,sh2o ,zwt) ! ---------------------------------------------------------------------- ! calculate equilibrium water table depth (niu et al., 2005) @@ -7405,6 +7464,7 @@ end subroutine zwteq !== begin infil ==================================================================================== !>\ingroup NoahMP_LSM +!! compute inflitration rate at soil surface and surface runoff subroutine infil (parameters,nsoil ,dt ,zsoil ,sh2o ,sice , & !in sicemax,qinsur , & !in pddum ,runsrf ) !out @@ -7506,6 +7566,9 @@ end subroutine infil !== begin srt ====================================================================================== !>\ingroup NoahMP_LSM +!! calculate the right hand side of the time tendency term of the soil +!! water diffusion equation. also to compute (prepare) the matrix coefficients +!! for the tri-diagonal matrix of the implicit time scheme. subroutine srt (parameters,nsoil ,zsoil ,dt ,pddum ,etrani , & !in qseva ,sh2o ,smc ,zwt ,fcr , & !in sicemax,fcrmax ,iloc ,jloc ,smcwtd , & !in @@ -7640,6 +7703,7 @@ end subroutine srt !== begin sstep ==================================================================================== !>\ingroup NoahMP_LSM +!! calculate/update soil moisture content values. subroutine sstep (parameters,nsoil ,nsnow ,dt ,zsoil ,dzsnso , & !in sice ,iloc ,jloc ,zwt , & !in sh2o ,smc ,ai ,bi ,ci , & !inout @@ -7768,6 +7832,7 @@ end subroutine sstep !== begin wdfcnd1 ================================================================================== !>\ingroup NoahMP_LSM +!! calculate soil water diffusivity and soil hydraulic conductivity. subroutine wdfcnd1 (parameters,wdf,wcnd,smc,fcr,isoil) ! ---------------------------------------------------------------------- ! calculate soil water diffusivity and soil hydraulic conductivity. @@ -7808,6 +7873,7 @@ end subroutine wdfcnd1 !== begin wdfcnd2 ================================================================================== !>\ingroup NoahMP_LSM +!! calculate soil water diffusivity and soil hydraulic conductivity. subroutine wdfcnd2 (parameters,wdf,wcnd,smc,sice,isoil) ! ---------------------------------------------------------------------- ! calculate soil water diffusivity and soil hydraulic conductivity. @@ -8041,6 +8107,8 @@ end subroutine groundwater !== begin shallowwatertable ======================================================================== !>\ingroup NoahMP_LSM +!! diagnoses water table depth and computes recharge when the water table is +!! within the resolved soil layers, according to the miguez-macho&fan scheme. subroutine shallowwatertable (parameters,nsnow ,nsoil ,zsoil, dt , & !in dzsnso ,smceq ,iloc ,jloc , & !in smc ,wtd ,smcwtd ,rech, qdrain ) !inout @@ -8299,6 +8367,8 @@ end subroutine carbon !== begin co2flux ================================================================================== !>\ingroup NoahMP_LSM +!! the original code is from Dickinson et al.(1998), modified by guo-yue niu, +!! 2004 subroutine co2flux (parameters,nsnow ,nsoil ,vegtyp ,igs ,dt , & !in dzsnso ,stc ,psn ,troot ,tv , & !in wroot ,wstres ,foln ,lapm , & !in @@ -8570,7 +8640,9 @@ subroutine co2flux (parameters,nsnow ,nsoil ,vegtyp ,igs ,dt , & !in end subroutine co2flux !== begin carbon_crop ============================================================================== - +!>\ingroup NoahMP_LSM +!! initial crop version created by xing liu +!! initial crop version added by barlage v3.8 subroutine carbon_crop (parameters,nsnow ,nsoil ,vegtyp ,dt ,zsoil ,julian , & !in dzsnso ,stc ,smc ,tv ,psn ,foln ,btran , & !in soldn ,t2m , & !in @@ -8688,7 +8760,9 @@ subroutine carbon_crop (parameters,nsnow ,nsoil ,vegtyp ,dt ,zsoil ,julia end subroutine carbon_crop !== begin co2flux_crop ============================================================================= - +!>\ingroup NoahMP_LSM +!! the original code from re dickinson et al.(1998) and guo-yue niu (2004), +!! modified by xing liu, 2014. subroutine co2flux_crop (parameters, & !in dt ,stc ,psn ,tv ,wroot ,wstres ,foln , & !in ipa ,iha ,pgs , & !in xing @@ -8969,7 +9043,7 @@ subroutine co2flux_crop (parameters, end subroutine co2flux_crop !== begin growing_gdd ============================================================================== - +!>\ingroup NoahMP_LSM subroutine growing_gdd (parameters, & !in t2m , dt, julian, & !in gdd , & !inout @@ -9066,7 +9140,7 @@ subroutine growing_gdd (parameters, & !in end subroutine growing_gdd !== begin psn_crop ================================================================================= - +!>\ingroup NoahMP_LSM subroutine psn_crop ( parameters, & !in soldn, xlai,t2m, & !in psncrop ) !out diff --git a/physics/moninedmf.f b/physics/moninedmf.f index e9db1ba77..8fca7638d 100644 --- a/physics/moninedmf.f +++ b/physics/moninedmf.f @@ -62,7 +62,7 @@ subroutine hedmf_run (im,km,ntrac,ntcw,dv,du,tau,rtg, & & psk,rbsoil,zorl,u10m,v10m,fm,fh, & & tsea,heat,evap,stress,spd1,kpbl, & & prsi,del,prsl,prslk,phii,phil,delt,dspheat, & - & dusfc,dvsfc,dtsfc,dqsfc,hpbl,hgamt,hgamq,dkt, & + & dusfc,dvsfc,dtsfc,dqsfc,hpbl,hgamt,hgamq,dkt,dku, & & kinver,xkzm_m,xkzm_h,xkzm_s,lprnt,ipr, & & xkzminv,moninq_fac,hurr_pbl,islimsk,var_ric, & & coef_ric_l,coef_ric_s,ldiag3d,ntqv,rtg_ozone_index,ntoz, & @@ -84,42 +84,44 @@ subroutine hedmf_run (im,km,ntrac,ntcw,dv,du,tau,rtg, & ! logical, intent(in) :: lprnt, hurr_pbl, ldiag3d logical, intent(in) :: flag_for_pbl_generic_tend - integer, intent(in) :: ipr, islimsk(im), ntoz - integer, intent(in) :: im, km, ntrac, ntcw, kinver(im) - integer, intent(out) :: kpbl(im) + integer, intent(in) :: ipr, islimsk(:) + integer, intent(in) :: im, km, ntrac, ntcw, kinver(:), ntoz + integer, intent(out) :: kpbl(:) ! real(kind=kind_phys), intent(in) :: delt, xkzm_m, xkzm_h, xkzm_s real(kind=kind_phys), intent(in) :: xkzminv, moninq_fac, var_ric, & & coef_ric_l, coef_ric_s - real(kind=kind_phys), intent(inout) :: dv(im,km), du(im,km), & - & tau(im,km), rtg(im,km,ntrac) + real(kind=kind_phys), intent(inout) :: dv(:,:), du(:,:), & + & tau(:,:), rtg(:,:,:) ! dtend is only allocated if ldiag3d or qdiag3d are true real(kind=kind_phys), intent(inout) :: dtend(:,:,:) integer, intent(in) :: dtidx(:,:) integer, intent(in) :: index_of_x_wind, index_of_y_wind, & & index_of_process_pbl, index_of_temperature, ntqv, rtg_ozone_index real(kind=kind_phys), intent(in) :: & - & u1(im,km), v1(im,km), & - & t1(im,km), q1(im,km,ntrac), & - & swh(im,km), hlw(im,km), & - & xmu(im), psk(im), & - & rbsoil(im), zorl(im), & - & u10m(im), v10m(im), & - & fm(im), fh(im), & - & tsea(im), & - & heat(im), evap(im), & - & stress(im), spd1(im) + & u1(:,:), v1(:,:), & + & t1(:,:), q1(:,:,:), & + & swh(:,:), hlw(:,:), & + & xmu(:), psk(:), & + & rbsoil(:), zorl(:), & + & u10m(:), v10m(:), & + & fm(:), fh(:), & + & tsea(:), & + & heat(:), evap(:), & + & stress(:), spd1(:) real(kind=kind_phys), intent(in) :: & - & prsi(im,km+1), del(im,km), & - & prsl(im,km), prslk(im,km), & - & phii(im,km+1), phil(im,km) + & prsi(:,:), del(:,:), & + & prsl(:,:), prslk(:,:), & + & phii(:,:), phil(:,:) real(kind=kind_phys), intent(out) :: & - & dusfc(im), dvsfc(im), & - & dtsfc(im), dqsfc(im), & - & hpbl(im), dkt(im,km-1) + & dusfc(:), dvsfc(:), & + & dtsfc(:), dqsfc(:), & + & hpbl(:) + real(kind=kind_phys), intent(out) :: & + & dkt(:,:), dku(:,:) real(kind=kind_phys), intent(inout) :: & - & hgamt(im), hgamq(im) + & hgamt(:), hgamq(:) ! logical, intent(in) :: dspheat ! flag for tke dissipative heating @@ -151,8 +153,8 @@ subroutine hedmf_run (im,km,ntrac,ntcw,dv,du,tau,rtg, & & zd(im), zdd(im), thlvx1(im) ! real(kind=kind_phys) rdzt(im,km-1),dktx(im,km-1), & - & zi(im,km+1), zl(im,km), xkzo(im,km-1), & - & dku(im,km-1), xkzmo(im,km-1), & + & zi(im,km+1), zl(im,km), & + & xkzo(im,km-1), xkzmo(im,km-1), & & cku(im,km-1), ckt(im,km-1), & & ti(im,km-1), shr2(im,km-1), & & al(im,km-1), ad(im,km), & @@ -388,10 +390,14 @@ subroutine hedmf_run (im,km,ntrac,ntcw,dv,du,tau,rtg, & enddo enddo !> - Initialize diffusion coefficients to 0 and calculate the total radiative heating rate (dku, dkt, radx) - do k = 1,km1 + do k = 1,km do i = 1,im dku(i,k) = 0. dkt(i,k) = 0. + enddo + enddo + do k = 1,km1 + do i = 1,im dktx(i,k) = 0. cku(i,k) = 0. ckt(i,k) = 0. @@ -1427,6 +1433,7 @@ subroutine hedmf_run (im,km,ntrac,ntcw,dv,du,tau,rtg, & ! enddo enddo + ! ! solve tridiagonal problem for momentum ! diff --git a/physics/moninedmf.meta b/physics/moninedmf.meta index 445dc99d9..3af1a8fc8 100644 --- a/physics/moninedmf.meta +++ b/physics/moninedmf.meta @@ -421,9 +421,18 @@ optional = F [dkt] standard_name = atmosphere_heat_diffusivity - long_name = diffusivity for heat + long_name = atmospheric heat diffusivity units = m2 s-1 - dimensions = (horizontal_loop_extent,vertical_dimension_minus_one) + dimensions = (horizontal_loop_extent,vertical_dimension) + type = real + kind = kind_phys + intent = out + optional = F +[dku] + standard_name = atmosphere_momentum_diffusivity + long_name = atmospheric momentum diffusivity + units = m2 s-1 + dimensions = (horizontal_loop_extent,vertical_dimension) type = real kind = kind_phys intent = out @@ -532,8 +541,8 @@ intent = in optional = F [coef_ric_s] - standard_name = coefficient_for_variable_bulk_richardson_number_over_ocean - long_name = coefficient for calculating variable bulk richardson number for hurricane PBL over ocean + standard_name = coefficient_for_variable_bulk_richardson_number_over_water + long_name = coefficient for calculating variable bulk richardson number for hurricane PBL over water units = none dimensions = () type = real diff --git a/physics/moninshoc.f b/physics/moninshoc.f index b22a59daa..e287d3389 100644 --- a/physics/moninshoc.f +++ b/physics/moninshoc.f @@ -45,22 +45,21 @@ subroutine moninshoc_run (im,km,ntrac,ntcw,ncnd,dv,du,tau,rtg, ! integer, intent(in) :: im, & km, ntrac, ntcw, ncnd, ntke, ntoz - integer, dimension(im), intent(in) :: kinver - + integer, dimension(:), intent(in) :: kinver real(kind=kind_phys), intent(in) :: delt, & xkzm_m, xkzm_h, xkzm_s, xkzminv real(kind=kind_phys), intent(in) :: grav, & rd, cp, hvap, fv - real(kind=kind_phys), dimension(im), intent(in) :: psk, + real(kind=kind_phys), dimension(:), intent(in) :: psk, & rbsoil, zorl, u10m, v10m, fm, fh, tsea, heat, evap, stress, spd1 - real(kind=kind_phys), dimension(im,km), intent(in) :: u1, v1, + real(kind=kind_phys), dimension(:,:), intent(in) :: u1, v1, & t1, tkh, del, prsl, phil, prslk - real(kind=kind_phys), dimension(im,km+1), intent(in) :: prsi, phii - real(kind=kind_phys), dimension(im,km,ntrac), intent(in) :: q1 + real(kind=kind_phys), dimension(:,:), intent(in) :: prsi, phii + real(kind=kind_phys), dimension(:,:,:), intent(in) :: q1 - real(kind=kind_phys), dimension(im,km), intent(inout) :: du, dv, + real(kind=kind_phys), dimension(:,:), intent(inout) :: du, dv, & tau - real(kind=kind_phys), dimension(im,km,ntrac), intent(inout) :: rtg + real(kind=kind_phys), dimension(:,:,:), intent(inout) :: rtg real(kind=kind_phys), dimension(:,:,:), intent(inout) :: dtend integer, dimension(:,:), intent(in) :: dtidx @@ -69,11 +68,11 @@ subroutine moninshoc_run (im,km,ntrac,ntcw,ncnd,dv,du,tau,rtg, logical, intent(in) :: ldiag3d, & gen_tend - integer, dimension(im), intent(out) :: kpbl - real(kind=kind_phys), dimension(im), intent(out) :: dusfc, + integer, dimension(:), intent(out) :: kpbl + real(kind=kind_phys), dimension(:), intent(out) :: dusfc, & dvsfc, dtsfc, dqsfc, hpbl - real(kind=kind_phys), dimension(im,km), intent(out) :: prnum - real(kind=kind_phys), dimension(im,km-1), intent(out) :: dkt + real(kind=kind_phys), dimension(:,:), intent(out) :: prnum + real(kind=kind_phys), dimension(:,:), intent(out) :: dkt character(len=*), intent(out) :: errmsg integer, intent(out) :: errflg @@ -124,6 +123,9 @@ subroutine moninshoc_run (im,km,ntrac,ntcw,ncnd,dv,du,tau,rtg, errmsg = '' errflg = 0 ! +! Set intent(out) variables + dkt = zero +! !----------------------------------------------------------------------- ! ! compute preliminary variables diff --git a/physics/moninshoc.meta b/physics/moninshoc.meta index c5849fc39..e54795267 100644 --- a/physics/moninshoc.meta +++ b/physics/moninshoc.meta @@ -362,9 +362,9 @@ optional = F [dkt] standard_name = atmosphere_heat_diffusivity - long_name = diffusivity for heat + long_name = atmospheric heat diffusivity units = m2 s-1 - dimensions = (horizontal_loop_extent,vertical_dimension_minus_one) + dimensions = (horizontal_loop_extent,vertical_dimension) type = real kind = kind_phys intent = out diff --git a/physics/mp_fer_hires.F90 b/physics/mp_fer_hires.F90 index d22f0a18b..9bbda5ad0 100644 --- a/physics/mp_fer_hires.F90 +++ b/physics/mp_fer_hires.F90 @@ -54,9 +54,9 @@ subroutine mp_fer_hires_init(ncol, nlev, dtp, imp_physics, & logical, intent(in) :: restart character(len=*), intent(out) :: errmsg integer, intent(out) :: errflg - real(kind_phys), intent(out), optional :: f_ice(1:ncol,1:nlev) - real(kind_phys), intent(out), optional :: f_rain(1:ncol,1:nlev) - real(kind_phys), intent(out), optional :: f_rimef(1:ncol,1:nlev) + real(kind_phys), intent(out) :: f_ice(:,:) + real(kind_phys), intent(out) :: f_rain(:,:) + real(kind_phys), intent(out) :: f_rimef(:,:) ! Local variables @@ -152,27 +152,27 @@ SUBROUTINE mp_fer_hires_run(NCOL, NLEV, DT ,SPEC_ADV & logical, intent(in ) :: spec_adv integer, intent(in ) :: mpirank integer, intent(in ) :: mpiroot - real(kind_phys), intent(in ) :: slmsk(1:ncol) - real(kind_phys), intent(in ) :: prsi(1:ncol,1:nlev+1) - real(kind_phys), intent(in ) :: p_phy(1:ncol,1:nlev) + real(kind_phys), intent(in ) :: slmsk(:) + real(kind_phys), intent(in ) :: prsi(:,:) + real(kind_phys), intent(in ) :: p_phy(:,:) real(kind_phys), intent(in ) :: epsq,r_d,p608,cp,g - real(kind_phys), intent(inout) :: t(1:ncol,1:nlev) - real(kind_phys), intent(inout) :: q(1:ncol,1:nlev) - real(kind_phys), intent(inout) :: cwm(1:ncol,1:nlev) - real(kind_phys), intent(inout) :: train(1:ncol,1:nlev) - real(kind_phys), intent(out ) :: sr(1:ncol) - real(kind_phys), intent(inout) :: f_ice(1:ncol,1:nlev) - real(kind_phys), intent(inout) :: f_rain(1:ncol,1:nlev) - real(kind_phys), intent(inout) :: f_rimef(1:ncol,1:nlev) - real(kind_phys), intent(inout) :: qc(1:ncol,1:nlev) - real(kind_phys), intent(inout) :: qr(1:ncol,1:nlev) - real(kind_phys), intent(inout) :: qi(1:ncol,1:nlev) - real(kind_phys), intent(inout) :: qg(1:ncol,1:nlev) ! QRIMEF - - real(kind_phys), intent(inout) :: prec(1:ncol) - real(kind_phys), intent(inout) :: refl_10cm(1:ncol,1:nlev) + real(kind_phys), intent(inout) :: t(:,:) + real(kind_phys), intent(inout) :: q(:,:) + real(kind_phys), intent(inout) :: cwm(:,:) + real(kind_phys), intent(inout) :: train(:,:) + real(kind_phys), intent(out ) :: sr(:) + real(kind_phys), intent(out ) :: f_ice(:,:) + real(kind_phys), intent(out ) :: f_rain(:,:) + real(kind_phys), intent(out ) :: f_rimef(:,:) + real(kind_phys), intent(inout) :: qc(:,:) + real(kind_phys), intent(inout) :: qr(:,:) + real(kind_phys), intent(inout) :: qi(:,:) + real(kind_phys), intent(inout) :: qg(:,:) ! QRIMEF + + real(kind_phys), intent(inout) :: prec(:) + real(kind_phys), intent(inout) :: refl_10cm(:,:) real(kind_phys), intent(in ) :: rhgrd - real(kind_phys), intent(in ) :: dx(1:ncol) + real(kind_phys), intent(in ) :: dx(:) character(len=*), intent(out) :: errmsg integer, intent(out) :: errflg ! diff --git a/physics/mp_fer_hires.meta b/physics/mp_fer_hires.meta index 1872b5614..fa09f66db 100644 --- a/physics/mp_fer_hires.meta +++ b/physics/mp_fer_hires.meta @@ -64,7 +64,7 @@ type = real kind = kind_phys intent = out - optional = T + optional = F [f_rain] standard_name = fraction_of_rain_water_cloud long_name = fraction of rain water cloud @@ -73,7 +73,7 @@ type = real kind = kind_phys intent = out - optional = T + optional = F [f_rimef] standard_name = rime_factor long_name = rime factor @@ -82,7 +82,7 @@ type = real kind = kind_phys intent = out - optional = T + optional = F [mpicomm] standard_name = mpi_comm long_name = MPI communicator @@ -153,6 +153,7 @@ type = integer intent = out optional = F + ######################################################################## [ccpp-arg-table] name = mp_fer_hires_run @@ -298,18 +299,18 @@ kind = kind_phys intent = inout optional = F -[qi] - standard_name = ice_water_mixing_ratio_updated_by_physics - long_name = ratio of mass of ice water to mass of dry air plus vapor (without condensates) updated by physics +[qr] + standard_name = rain_water_mixing_ratio_updated_by_physics + long_name = ratio of mass of rain water to mass of dry air plus vapor (without condensates) updated by physics units = kg kg-1 dimensions = (horizontal_loop_extent,vertical_dimension) type = real kind = kind_phys intent = inout optional = F -[qr] - standard_name = rain_water_mixing_ratio_updated_by_physics - long_name = ratio of mass of rain water to mass of dry air plus vapor (without condensates) updated by physics +[qi] + standard_name = ice_water_mixing_ratio_updated_by_physics + long_name = ratio of mass of ice water to mass of dry air plus vapor (without condensates) updated by physics units = kg kg-1 dimensions = (horizontal_loop_extent,vertical_dimension) type = real diff --git a/physics/mp_thompson.F90 b/physics/mp_thompson.F90 index 6031af94a..1ad4b2d4b 100644 --- a/physics/mp_thompson.F90 +++ b/physics/mp_thompson.F90 @@ -347,14 +347,14 @@ subroutine mp_thompson_run(ncol, nlev, con_g, con_rd, & real(kind_phys), intent(in ) :: con_eps ! Hydrometeors logical, intent(in ) :: convert_dry_rho - real(kind_phys), intent(inout) :: spechum(1:ncol,1:nlev) - real(kind_phys), intent(inout) :: qc(1:ncol,1:nlev) - real(kind_phys), intent(inout) :: qr(1:ncol,1:nlev) - real(kind_phys), intent(inout) :: qi(1:ncol,1:nlev) - real(kind_phys), intent(inout) :: qs(1:ncol,1:nlev) - real(kind_phys), intent(inout) :: qg(1:ncol,1:nlev) - real(kind_phys), intent(inout) :: ni(1:ncol,1:nlev) - real(kind_phys), intent(inout) :: nr(1:ncol,1:nlev) + real(kind_phys), intent(inout) :: spechum(:,:) + real(kind_phys), intent(inout) :: qc(:,:) + real(kind_phys), intent(inout) :: qr(:,:) + real(kind_phys), intent(inout) :: qi(:,:) + real(kind_phys), intent(inout) :: qs(:,:) + real(kind_phys), intent(inout) :: qg(:,:) + real(kind_phys), intent(inout) :: ni(:,:) + real(kind_phys), intent(inout) :: nr(:,:) ! Aerosols logical, intent(in) :: is_aerosol_aware, reset ! The following arrays are not allocated if is_aerosol_aware is false @@ -364,25 +364,25 @@ subroutine mp_thompson_run(ncol, nlev, con_g, con_rd, & real(kind_phys), optional, intent(in ) :: nwfa2d(:) real(kind_phys), optional, intent(in ) :: nifa2d(:) ! State variables and timestep information - real(kind_phys), intent(inout) :: tgrs(1:ncol,1:nlev) - real(kind_phys), intent(in ) :: prsl(1:ncol,1:nlev) - real(kind_phys), intent(in ) :: phii(1:ncol,1:nlev+1) - real(kind_phys), intent(in ) :: omega(1:ncol,1:nlev) + real(kind_phys), intent(inout) :: tgrs(:,:) + real(kind_phys), intent(in ) :: prsl(:,:) + real(kind_phys), intent(in ) :: phii(:,:) + real(kind_phys), intent(in ) :: omega(:,:) real(kind_phys), intent(in ) :: dtp ! Precip/rain/snow/graupel fall amounts and fraction of frozen precip - real(kind_phys), intent( out) :: prcp(1:ncol) - real(kind_phys), intent( out) :: rain(1:ncol) - real(kind_phys), intent( out) :: graupel(1:ncol) - real(kind_phys), intent( out) :: ice(1:ncol) - real(kind_phys), intent( out) :: snow(1:ncol) - real(kind_phys), intent( out) :: sr(1:ncol) + real(kind_phys), intent(inout) :: prcp(:) + real(kind_phys), intent(inout) :: rain(:) + real(kind_phys), intent(inout) :: graupel(:) + real(kind_phys), intent(inout) :: ice(:) + real(kind_phys), intent(inout) :: snow(:) + real(kind_phys), intent( out) :: sr(:) ! Radar reflectivity - real(kind_phys), intent( out) :: refl_10cm(1:ncol,1:nlev) + real(kind_phys), intent( out) :: refl_10cm(:,:) logical, optional, intent(in ) :: do_radar_ref ! Cloud effective radii - real(kind_phys), optional, intent( out) :: re_cloud(1:ncol,1:nlev) - real(kind_phys), optional, intent( out) :: re_ice(1:ncol,1:nlev) - real(kind_phys), optional, intent( out) :: re_snow(1:ncol,1:nlev) + real(kind_phys), optional, intent( out) :: re_cloud(:,:) + real(kind_phys), optional, intent( out) :: re_ice(:,:) + real(kind_phys), optional, intent( out) :: re_snow(:,:) ! MPI information integer, intent(in) :: mpicomm integer, intent(in) :: mpirank @@ -547,45 +547,85 @@ subroutine mp_thompson_run(ncol, nlev, con_g, con_rd, & !> - Call mp_gt_driver() with or without aerosols if (is_aerosol_aware) then - call mp_gt_driver(qv=qv, qc=qc, qr=qr, qi=qi, qs=qs, qg=qg, ni=ni, nr=nr, & - nc=nc, nwfa=nwfa, nifa=nifa, nwfa2d=nwfa2d, nifa2d=nifa2d, & - tt=tgrs, p=prsl, w=w, dz=dz, dt_in=dtp, & - rainnc=rain_mp, rainncv=delta_rain_mp, & - snownc=snow_mp, snowncv=delta_snow_mp, & - icenc=ice_mp, icencv=delta_ice_mp, & - graupelnc=graupel_mp, graupelncv=delta_graupel_mp, sr=sr, & - refl_10cm=refl_10cm, & - diagflag=diagflag, do_radar_ref=do_radar_ref_mp, & - re_cloud=re_cloud, re_ice=re_ice, re_snow=re_snow, & - has_reqc=has_reqc, has_reqi=has_reqi, has_reqs=has_reqs, & - rand_perturb_on=rand_perturb_on, kme_stoch=kme_stoch, & - ! DH* 2020-06-05 not passing this optional argument, see - ! comment in module_mp_thompson.F90 / mp_gt_driver - !rand_pert=rand_pert, & - ids=ids, ide=ide, jds=jds, jde=jde, kds=kds, kde=kde, & - ims=ims, ime=ime, jms=jms, jme=jme, kms=kms, kme=kme, & - its=its, ite=ite, jts=jts, jte=jte, kts=kts, kte=kte, & - errmsg=errmsg, errflg=errflg, reset=reset) - + if (do_effective_radii) then + call mp_gt_driver(qv=qv, qc=qc, qr=qr, qi=qi, qs=qs, qg=qg, ni=ni, nr=nr, & + nc=nc, nwfa=nwfa, nifa=nifa, nwfa2d=nwfa2d, nifa2d=nifa2d, & + tt=tgrs, p=prsl, w=w, dz=dz, dt_in=dtp, & + rainnc=rain_mp, rainncv=delta_rain_mp, & + snownc=snow_mp, snowncv=delta_snow_mp, & + icenc=ice_mp, icencv=delta_ice_mp, & + graupelnc=graupel_mp, graupelncv=delta_graupel_mp, sr=sr, & + refl_10cm=refl_10cm, & + diagflag=diagflag, do_radar_ref=do_radar_ref_mp, & + re_cloud=re_cloud, re_ice=re_ice, re_snow=re_snow, & + has_reqc=has_reqc, has_reqi=has_reqi, has_reqs=has_reqs, & + rand_perturb_on=rand_perturb_on, kme_stoch=kme_stoch, & + ! DH* 2020-06-05 not passing this optional argument, see + ! comment in module_mp_thompson.F90 / mp_gt_driver + !rand_pert=rand_pert, & + ids=ids, ide=ide, jds=jds, jde=jde, kds=kds, kde=kde, & + ims=ims, ime=ime, jms=jms, jme=jme, kms=kms, kme=kme, & + its=its, ite=ite, jts=jts, jte=jte, kts=kts, kte=kte, & + errmsg=errmsg, errflg=errflg, reset=reset) + else + call mp_gt_driver(qv=qv, qc=qc, qr=qr, qi=qi, qs=qs, qg=qg, ni=ni, nr=nr, & + nc=nc, nwfa=nwfa, nifa=nifa, nwfa2d=nwfa2d, nifa2d=nifa2d, & + tt=tgrs, p=prsl, w=w, dz=dz, dt_in=dtp, & + rainnc=rain_mp, rainncv=delta_rain_mp, & + snownc=snow_mp, snowncv=delta_snow_mp, & + icenc=ice_mp, icencv=delta_ice_mp, & + graupelnc=graupel_mp, graupelncv=delta_graupel_mp, sr=sr, & + refl_10cm=refl_10cm, & + diagflag=diagflag, do_radar_ref=do_radar_ref_mp, & + has_reqc=has_reqc, has_reqi=has_reqi, has_reqs=has_reqs, & + rand_perturb_on=rand_perturb_on, kme_stoch=kme_stoch, & + ! DH* 2020-06-05 not passing this optional argument, see + ! comment in module_mp_thompson.F90 / mp_gt_driver + !rand_pert=rand_pert, & + ids=ids, ide=ide, jds=jds, jde=jde, kds=kds, kde=kde, & + ims=ims, ime=ime, jms=jms, jme=jme, kms=kms, kme=kme, & + its=its, ite=ite, jts=jts, jte=jte, kts=kts, kte=kte, & + errmsg=errmsg, errflg=errflg, reset=reset) + end if else - call mp_gt_driver(qv=qv, qc=qc, qr=qr, qi=qi, qs=qs, qg=qg, ni=ni, nr=nr, & - tt=tgrs, p=prsl, w=w, dz=dz, dt_in=dtp, & - rainnc=rain_mp, rainncv=delta_rain_mp, & - snownc=snow_mp, snowncv=delta_snow_mp, & - icenc=ice_mp, icencv=delta_ice_mp, & - graupelnc=graupel_mp, graupelncv=delta_graupel_mp, sr=sr, & - refl_10cm=refl_10cm, & - diagflag=diagflag, do_radar_ref=do_radar_ref_mp, & - re_cloud=re_cloud, re_ice=re_ice, re_snow=re_snow, & - has_reqc=has_reqc, has_reqi=has_reqi, has_reqs=has_reqs, & - rand_perturb_on=rand_perturb_on, kme_stoch=kme_stoch, & - ! DH* 2020-06-05 not passing this optional argument, see - ! comment in module_mp_thompson.F90 / mp_gt_driver - !rand_pert=rand_pert, & - ids=ids, ide=ide, jds=jds, jde=jde, kds=kds, kde=kde, & - ims=ims, ime=ime, jms=jms, jme=jme, kms=kms, kme=kme, & - its=its, ite=ite, jts=jts, jte=jte, kts=kts, kte=kte, & - errmsg=errmsg, errflg=errflg, reset=reset) + if (do_effective_radii) then + call mp_gt_driver(qv=qv, qc=qc, qr=qr, qi=qi, qs=qs, qg=qg, ni=ni, nr=nr, & + tt=tgrs, p=prsl, w=w, dz=dz, dt_in=dtp, & + rainnc=rain_mp, rainncv=delta_rain_mp, & + snownc=snow_mp, snowncv=delta_snow_mp, & + icenc=ice_mp, icencv=delta_ice_mp, & + graupelnc=graupel_mp, graupelncv=delta_graupel_mp, sr=sr, & + refl_10cm=refl_10cm, & + diagflag=diagflag, do_radar_ref=do_radar_ref_mp, & + re_cloud=re_cloud, re_ice=re_ice, re_snow=re_snow, & + has_reqc=has_reqc, has_reqi=has_reqi, has_reqs=has_reqs, & + rand_perturb_on=rand_perturb_on, kme_stoch=kme_stoch, & + ! DH* 2020-06-05 not passing this optional argument, see + ! comment in module_mp_thompson.F90 / mp_gt_driver + !rand_pert=rand_pert, & + ids=ids, ide=ide, jds=jds, jde=jde, kds=kds, kde=kde, & + ims=ims, ime=ime, jms=jms, jme=jme, kms=kms, kme=kme, & + its=its, ite=ite, jts=jts, jte=jte, kts=kts, kte=kte, & + errmsg=errmsg, errflg=errflg, reset=reset) + else + call mp_gt_driver(qv=qv, qc=qc, qr=qr, qi=qi, qs=qs, qg=qg, ni=ni, nr=nr, & + tt=tgrs, p=prsl, w=w, dz=dz, dt_in=dtp, & + rainnc=rain_mp, rainncv=delta_rain_mp, & + snownc=snow_mp, snowncv=delta_snow_mp, & + icenc=ice_mp, icencv=delta_ice_mp, & + graupelnc=graupel_mp, graupelncv=delta_graupel_mp, sr=sr, & + refl_10cm=refl_10cm, & + diagflag=diagflag, do_radar_ref=do_radar_ref_mp, & + has_reqc=has_reqc, has_reqi=has_reqi, has_reqs=has_reqs, & + rand_perturb_on=rand_perturb_on, kme_stoch=kme_stoch, & + ! DH* 2020-06-05 not passing this optional argument, see + ! comment in module_mp_thompson.F90 / mp_gt_driver + !rand_pert=rand_pert, & + ids=ids, ide=ide, jds=jds, jde=jde, kds=kds, kde=kde, & + ims=ims, ime=ime, jms=jms, jme=jme, kms=kms, kme=kme, & + its=its, ite=ite, jts=jts, jte=jte, kts=kts, kte=kte, & + errmsg=errmsg, errflg=errflg, reset=reset) + end if end if if (errflg/=0) return @@ -610,11 +650,11 @@ subroutine mp_thompson_run(ncol, nlev, con_g, con_rd, & !> - Convert rainfall deltas from mm to m (on physics timestep); add to inout variables ! "rain" in Thompson MP refers to precipitation (total of liquid rainfall+snow+graupel+ice) - prcp = max(0.0, delta_rain_mp/1000.0_kind_phys) - graupel = max(0.0, delta_graupel_mp/1000.0_kind_phys) - ice = max(0.0, delta_ice_mp/1000.0_kind_phys) - snow = max(0.0, delta_snow_mp/1000.0_kind_phys) - rain = max(0.0, (delta_rain_mp - (delta_graupel_mp + delta_ice_mp + delta_snow_mp))/1000.0_kind_phys) + prcp = prcp + max(0.0, delta_rain_mp/1000.0_kind_phys) + graupel = graupel + max(0.0, delta_graupel_mp/1000.0_kind_phys) + ice = ice + max(0.0, delta_ice_mp/1000.0_kind_phys) + snow = snow + max(0.0, delta_snow_mp/1000.0_kind_phys) + rain = rain + max(0.0, (delta_rain_mp - (delta_graupel_mp + delta_ice_mp + delta_snow_mp))/1000.0_kind_phys) end subroutine mp_thompson_run !>@} diff --git a/physics/mp_thompson.meta b/physics/mp_thompson.meta index 7f1e9197e..237890024 100644 --- a/physics/mp_thompson.meta +++ b/physics/mp_thompson.meta @@ -250,7 +250,7 @@ dimensions = (horizontal_dimension,vertical_dimension) type = real kind = kind_phys - intent = inout + intent = out optional = T [re_ice] standard_name = effective_radius_of_stratiform_cloud_ice_particle_in_um @@ -259,7 +259,7 @@ dimensions = (horizontal_dimension,vertical_dimension) type = real kind = kind_phys - intent = inout + intent = out optional = T [re_snow] standard_name = effective_radius_of_stratiform_cloud_snow_particle_in_um @@ -268,7 +268,7 @@ dimensions = (horizontal_dimension,vertical_dimension) type = real kind = kind_phys - intent = inout + intent = out optional = T [mpicomm] standard_name = mpi_comm diff --git a/physics/mp_thompson_post.F90 b/physics/mp_thompson_post.F90 index cca74951d..c53f61b0c 100644 --- a/physics/mp_thompson_post.F90 +++ b/physics/mp_thompson_post.F90 @@ -57,14 +57,14 @@ subroutine mp_thompson_post_run(ncol, nlev, tgrs_save, tgrs, prslk, dtp, ttendli implicit none ! Interface variables - integer, intent(in) :: ncol - integer, intent(in) :: nlev - real(kind_phys), dimension(1:ncol,1:nlev), intent(in) :: tgrs_save - real(kind_phys), dimension(1:ncol,1:nlev), intent(inout) :: tgrs - real(kind_phys), dimension(1:ncol,1:nlev), intent(in) :: prslk - real(kind_phys), intent(in) :: dtp - real(kind_phys), intent(in) :: ttendlim - integer, intent(in) :: kdt + integer, intent(in) :: ncol + integer, intent(in) :: nlev + real(kind_phys), dimension(:,:), intent(in) :: tgrs_save + real(kind_phys), dimension(:,:), intent(inout) :: tgrs + real(kind_phys), dimension(:,:), intent(in) :: prslk + real(kind_phys), intent(in) :: dtp + real(kind_phys), intent(in) :: ttendlim + integer, intent(in) :: kdt ! MPI information integer, intent(in ) :: mpicomm integer, intent(in ) :: mpirank diff --git a/physics/mp_thompson_pre.F90 b/physics/mp_thompson_pre.F90 index 4087ac815..957c1f118 100644 --- a/physics/mp_thompson_pre.F90 +++ b/physics/mp_thompson_pre.F90 @@ -28,8 +28,8 @@ subroutine mp_thompson_pre_run(ncol, nlev, tgrs, tgrs_save, errmsg, errflg) ! Interface variables integer, intent(in ) :: ncol integer, intent(in ) :: nlev - real(kind_phys), intent(in ) :: tgrs(1:ncol,1:nlev) - real(kind_phys), intent( out) :: tgrs_save(1:ncol,1:nlev) + real(kind_phys), intent(in ) :: tgrs(:,:) + real(kind_phys), intent( out) :: tgrs_save(:,:) ! CCPP error handling character(len=*), intent( out) :: errmsg diff --git a/physics/noahmp_tables.f90 b/physics/noahmp_tables.f90 index 6341ae61a..9cb25b3f3 100644 --- a/physics/noahmp_tables.f90 +++ b/physics/noahmp_tables.f90 @@ -35,7 +35,7 @@ module noahmp_tables integer :: high_intensity_industrial_table = 33 ! - real :: ch2op_table(mvt) !maximum intercepted h2o per unit lai+sai (mm) + real :: ch2op_table(mvt) !< maximum intercepted h2o per unit lai+sai (mm) data ( ch2op_table(i),i=1,mvt) / 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, & & 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, & @@ -43,14 +43,14 @@ module noahmp_tables & 0.1, 0.1, 0.0, 0.0, 0.0, 0.0, & & 0.0, 0.0, 0.0, 0.0, 0.0, 0.0 / - real :: dleaf_table(mvt) !characteristic leaf dimension (m) + real :: dleaf_table(mvt) !< characteristic leaf dimension (m) data ( dleaf_table(i),i=1,mvt) / 0.04, 0.04, 0.04, 0.04, 0.04, 0.04, & & 0.04, 0.04, 0.04, 0.04, 0.04, 0.04, & & 0.04, 0.04, 0.04, 0.04, 0.04, 0.04, & & 0.04, 0.04, 0.00, 0.00, 0.00, 0.00, & & 0.00, 0.00, 0.00, 0.00, 0.00, 0.00 / - real :: z0mvt_table(mvt) !momentum roughness length (m) + real :: z0mvt_table(mvt) !< momentum roughness length (m) data ( z0mvt_table(i),i=1,mvt) / 1.09, 1.10, 0.85, 0.80, 0.80, 0.20, & & 0.06, 0.60, 0.50, 0.12, 0.30, 0.15, & & 1.00, 0.14, 0.00, 0.00, 0.00, 0.30, & @@ -59,28 +59,28 @@ module noahmp_tables ! - real :: hvt_table(mvt) !top of canopy (m) + real :: hvt_table(mvt) !< top of canopy (m) data ( hvt_table(i),i=1,mvt) / 20.0, 20.0, 18.0, 16.0, 16.0, 1.10, & & 1.10, 13.0, 10.0, 1.00, 5.00, 2.00, & & 15.0, 1.50, 0.00, 0.00, 0.00, 4.00, & & 2.00, 0.50, 0.00, 0.00, 0.00, 0.00, & & 0.00, 0.00, 0.00, 0.00, 0.00, 0.00 / - real :: hvb_table(mvt) !bottom of canopy (m) + real :: hvb_table(mvt) !< bottom of canopy (m) data ( hvb_table(i),i=1,mvt) / 8.50, 8.00, 7.00, 11.5, 10.0, 0.10, & & 0.10, 0.10, 0.10, 0.05, 0.10, 0.10, & & 1.00, 0.10, 0.00, 0.00, 0.00, 0.30, & & 0.20, 0.10, 0.00, 0.00, 0.00, 0.00, & & 0.00, 0.00, 0.00, 0.00, 0.00, 0.00 / - real :: den_table(mvt) !tree density (no. of trunks per m2) + real :: den_table(mvt) !< tree density (no. of trunks per m2) data ( den_table (i),i=1,mvt) / 0.28, 0.02, 0.28, 0.10, 0.10, 10.0, & & 10.0, 10.0, 0.02, 100., 5.05, 25.0, & & 0.01, 25.0, 0.00, 0.01, 0.01, 1.00, & & 1.00, 1.00, 0.00, 0.00, 0.00, 0.00, & & 0.00, 0.00, 0.00, 0.00, 0.00, 0.00 / ! - real :: rc_table(mvt) !tree crown radius (m) + real :: rc_table(mvt) !< tree crown radius (m) data ( rc_table (i),i=1,mvt) / 1.20, 3.60, 1.20, 1.40, 1.40, 0.12, & & 0.12, 0.12, 3.00, 0.03, 0.75, 0.08, & @@ -88,14 +88,14 @@ module noahmp_tables & 0.30, 0.30, 0.00, 0.00, 0.00, 0.00, & & 0.00, 0.00, 0.00, 0.00, 0.00, 0.00 / - real :: mfsno_table(mvt) !snowmelt curve parameter () + real :: mfsno_table(mvt) !< snowmelt curve parameter () data ( mfsno_table(i),i=1,mvt) / 1.00, 1.00, 1.00, 1.00, 1.00, 2.00, & & 2.00, 2.00, 2.00, 2.00, 3.00, 3.00, & & 4.00, 4.00, 2.50, 3.00, 3.00, 3.50, & & 3.50, 3.50, 0.00, 0.00, 0.00, 0.00, & & 0.00, 0.00, 0.00, 0.00, 0.00, 0.00 / - real :: scffac_table(mvt) !snow cover factor (m) + real :: scffac_table(mvt) !< snow cover factor (m) data (scffac_table(i),i=1,mvt) / 0.005, 0.005, 0.005, 0.005, 0.005, & & 0.008, 0.008, 0.010, 0.010, 0.010, & & 0.010, 0.007, 0.021, 0.013, 0.015, & @@ -105,7 +105,7 @@ module noahmp_tables ! - real :: saim_table(mvt,12) !monthly stem area index, one-sided + real :: saim_table(mvt,12) !< monthly stem area index, one-sided data (saim_table (i,1),i=1,mvt) / 0.4, 0.5, 0.3, 0.4, 0.4, 0.3, & & 0.2, 0.4, 0.3, 0.3, 0.3, 0.3, & @@ -189,7 +189,7 @@ module noahmp_tables & 0.0, 0.0, 0.0, 0.0, 0.0, 0.0 / !! lai - real :: laim_table(mvt,12) !monthly leaf area index, one-sided + real :: laim_table(mvt,12) !< monthly leaf area index, one-sided data (laim_table (i,1),i=1,mvt) / 4.0, 4.5, 0.0, 0.0, 2.0, 0.0, & & 0.0, 0.2, 0.3, 0.4, 0.2, 0.0, & @@ -271,35 +271,35 @@ module noahmp_tables & 0.6, 0.0, 0.0, 0.0, 0.0, 0.0, & & 0.0, 0.0, 0.0, 0.0, 0.0, 0.0 / - real :: sla_table(mvt) !single-side leaf area per kg [m2/kg] + real :: sla_table(mvt) !< single-side leaf area per kg [m2/kg] data ( sla_table (i),i=1,mvt) / 80, 80, 80, 80, 80, 60, & & 60, 60, 50, 60, 80, 80, & & 60, 80, 0, 0, 0, 80, & & 80, 80, 0, 0, 0, 0, & & 0, 0, 0, 0, 0, 0 / - real :: dilefc_table(mvt) !coeficient for leaf stress death [1/s] + real :: dilefc_table(mvt) !< coeficient for leaf stress death [1/s] data (dilefc_table (i),i=1,mvt) / 1.20, 0.50, 1.80, 0.60, 0.80, 0.20, & & 0.20, 0.20, 0.50, 0.20, 0.4, 0.50, & & 0.00, 0.35, 0.00, 0.00, 0.00, 0.30, & & 0.40, 0.30, 0.00, 0.00, 0.00, 0.00, & & 0.00, 0.00, 0.00, 0.00, 0.00, 0.00 / - real :: dilefw_table(mvt) !coeficient for leaf stress death [1/s] + real :: dilefw_table(mvt) !< coeficient for leaf stress death [1/s] data (dilefw_table(i),i=1,mvt) / 0.20, 4.00, 0.20, 0.20, 0.20, 0.20, & & 0.20, 0.20, 0.50, 0.10, 0.2, 0.20, & & 0.00, 0.20, 0.00, 0.00, 0.00, 0.20, & & 0.20, 0.20, 0.00, 0.00, 0.00, 0.00, & & 0.00, 0.00, 0.00, 0.00, 0.00, 0.00 / - real :: fragr_table(mvt) !fraction of growth respiration !original was 0.3 + real :: fragr_table(mvt) !< fraction of growth respiration !original was 0.3 data ( fragr_table(i),i=1,mvt) / 0.10, 0.20, 0.10, 0.20, 0.10, 0.20, & & 0.20, 0.20, 0.20, 0.20, 0.1, 0.20, & & 0.00, 0.20, 0.00, 0.10, 0.00, 0.10, & & 0.10, 0.10, 0.00, 0.00, 0.00, 0.00, & & 0.00, 0.00, 0.00, 0.00, 0.00, 0.00 / - real :: ltovrc_table(mvt) !leaf turnover [1/s] + real :: ltovrc_table(mvt) !< leaf turnover [1/s] data ( ltovrc_table(i),i=1,mvt) / 0.5, 0.55, 0.2, 0.55, 0.5, 0.65, & & 0.65, 0.65, 0.65, 0.50, 1.4, 1.6, & & 0.0, 1.2, 0.0, 0.0, 0.0, 1.3, & @@ -307,21 +307,21 @@ module noahmp_tables & 0.0, 0.0, 0.0, 0.0, 0.0, 0.0 / ! - real :: c3psn_table(mvt) !photosynthetic pathway: 0. = c4, 1. = c3 + real :: c3psn_table(mvt) !< photosynthetic pathway: 0. = c4, 1. = c3 data ( c3psn_table (i),i=1,mvt) / 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, & & 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, & & 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, & & 1.0, 1.0, 0.0, 0.0, 0.0, 0.0, & & 0.0, 0.0, 0.0, 0.0, 0.0, 0.0 / - real :: kc25_table(mvt) !co2 michaelis-menten constant at 25c (pa) + real :: kc25_table(mvt) !< co2 michaelis-menten constant at 25c (pa) data ( kc25_table (i),i=1,mvt) / 30.0, 30.0, 30.0, 30.0, 30.0, 30.0, & & 30.0, 30.0, 30.0, 30.0, 30.0, 30.0, & & 30.0, 30.0, 30.0, 30.0, 30.0, 30.0, & & 30.0, 30.0, 0.00, 0.00, 0.00, 0.00, & & 0.00, 0.00, 0.00, 0.00, 0.00, 0.00 / - real :: akc_table(mvt) !q10 for kc25 + real :: akc_table(mvt) !< q10 for kc25 data ( akc_table (i),i=1,mvt) / 2.1, 2.1, 2.1, 2.1, 2.1, 2.1, & & 2.1, 2.1, 2.1, 2.1, 2.1, 2.1, & & 2.1, 2.1, 2.1, 2.1, 2.1, 2.1, & @@ -329,7 +329,7 @@ module noahmp_tables & 0.0, 0.0, 0.0, 0.0, 0.0, 0.0 / - real :: ko25_table(mvt) !o2 michaelis-menten constant at 25c (pa) + real :: ko25_table(mvt) !< o2 michaelis-menten constant at 25c (pa) data ( ko25_table (i),i=1,mvt) / 3.e4, 3.e4, 3.e4, 3.e4, 3.e4, 3.e4, & & 3.e4, 3.e4, 3.e4, 3.e4, 3.e4, 3.e4, & & 3.e4, 3.e4, 3.e4, 3.e4, 3.e4, 3.e4, & @@ -337,14 +337,14 @@ module noahmp_tables & 0.00, 0.00, 0.00, 0.00, 0.00, 0.00 / - real :: ako_table(mvt) !q10 for ko25 + real :: ako_table(mvt) !< q10 for ko25 data ( ako_table (i),i=1,mvt) / 1.2, 1.2, 1.2, 1.2, 1.2, 1.2, & & 1.2, 1.2, 1.2, 1.2, 1.2, 1.2, & & 1.2, 1.2, 1.2, 1.2, 1.2, 1.2, & & 1.2, 1.2, 0.0, 0.0, 0.0, 0.0, & & 0.0, 0.0, 0.0, 0.0, 0.0, 0.0 / - real :: vcmx25_table(mvt) !maximum rate of carboxylation at 25c (umol co2/m**2/s) + real :: vcmx25_table(mvt) !< maximum rate of carboxylation at 25c (umol co2/m**2/s) data ( vcmx25_table(i),i=1,mvt) / 50.0, 60.0, 60.0, 60.0, 55.0, 40.0, & & 40.0, 40.0, 40.0, 40.0, 50.0, 80.0, & & 0.00, 60.0, 0.00, 0.00, 0.00, 50.0, & @@ -352,7 +352,7 @@ module noahmp_tables & 0.00, 0.00, 0.00, 0.00, 0.00, 0.00 / - real :: avcmx_table(mvt) !q10 for vcmx25 + real :: avcmx_table(mvt) !< q10 for vcmx25 data ( avcmx_table (i),i=1,mvt) / 2.4, 2.4, 2.4, 2.4, 2.4, 2.4, & & 2.4, 2.4, 2.4, 2.4, 2.4, 2.4, & & 2.4, 2.4, 2.4, 2.4, 2.4, 2.4, & @@ -361,70 +361,70 @@ module noahmp_tables - real :: bp_table(mvt) !minimum leaf conductance (umol/m**2/s) + real :: bp_table(mvt) !< minimum leaf conductance (umol/m**2/s) data ( bp_table (i),i=1,mvt) / 2.e3, 2.e3, 2.e3, 2.e3, 2.e3, 2.e3, & & 2.e3, 2.e3, 2.e3, 2.e3, 2.e3, 2.e3, & & 1.e15, 2.e3,1.e15, 2.e3,1.e15, 2.e3, & & 2.e3, 2.e3, 0.00, 0.00, 0.00, 0.00, & & 0.00, 0.00, 0.00, 0.00, 0.00, 0.00 / - real :: mp_table(mvt) !slope of conductance-to-photosynthesis relationship + real :: mp_table(mvt) !< slope of conductance-to-photosynthesis relationship data ( mp_table (i),i=1,mvt) / 6., 9., 6., 9., 9., 9., & & 9., 9., 9., 9., 9., 9., & & 9., 9., 9., 9., 9., 9., & & 9., 9., 0.0, 0.0, 0.0, 0.0, & & 0.0, 0.0, 0.0, 0.0, 0.0, 0.0 / - real :: qe25_table(mvt) !quantum efficiency at 25c (umol co2 / umo photon) + real :: qe25_table(mvt) !< quantum efficiency at 25c (umol co2 / umo photon) data ( qe25_table (i),i=1,mvt) / 0.06, 0.06, 0.06, 0.06, 0.06, 0.06, & & 0.06, 0.06, 0.06, 0.06, 0.06, 0.06, & & 0.00, 0.06, 0.00, 0.06, 0.00, 0.06, & & 0.06, 0.06, 0.00, 0.00, 0.00, 0.00, & & 0.00, 0.00, 0.00, 0.00, 0.00, 0.00 / - real :: aqe_table(mvt) !q10 for qe25 + real :: aqe_table(mvt) !< q10 for qe25 data ( aqe_table (i),i=1,mvt) / 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, & & 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, & & 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, & & 1.0, 1.0, 0.0, 0.0, 0.0, 0.0, & & 0.0, 0.0, 0.0, 0.0, 0.0, 0.0 / - real :: rmf25_table(mvt) !leaf maintenance respiration at 25c (umol co2/m**2/s) + real :: rmf25_table(mvt) !< leaf maintenance respiration at 25c (umol co2/m**2/s) data ( rmf25_table (i),i=1,mvt) / 3.00, 0.65, 4.00, 3.00, 3.00, 0.26, & & 0.26, 0.26, 0.80, 1.80, 3.2, 1.00, & & 0.00, 1.45, 0.00, 0.00, 0.00, 3.00, & & 3.00, 3.00, 0.00, 0.00, 0.00, 0.00, & & 0.00, 0.00, 0.00, 0.00, 0.00, 0.00 / - real :: rms25_table(mvt) !stem maintenance respiration at 25c (umol co2/kg bio/s) + real :: rms25_table(mvt) !< stem maintenance respiration at 25c (umol co2/kg bio/s) data ( rms25_table (i),i=1,mvt) / 0.90, 0.30, 0.64, 0.10, 0.80, 0.10, & & 0.10, 0.10, 0.32, 0.10, 0.10, 0.10, & & 0.00, 0.10, 0.00, 0.00, 0.00, 0.10, & & 0.10, 0.00, 0.00, 0.00, 0.00, 0.00, & & 0.00, 0.00, 0.00, 0.00, 0.00, 0.00 / - real :: rmr25_table(mvt) !root maintenance respiration at 25c (umol co2/kg bio/s) + real :: rmr25_table(mvt) !< root maintenance respiration at 25c (umol co2/kg bio/s) data ( rmr25_table (i),i=1,mvt) / 0.36, 0.05, 0.05, 0.01, 0.03, 0.00, & & 0.00, 0.00, 0.01, 1.20, 0.0, 0.00, & & 0.00, 0.00, 0.00, 0.00, 0.00, 2.11, & & 2.11, 0.00, 0.00, 0.00, 0.00, 0.00, & & 0.00, 0.00, 0.00, 0.00, 0.00, 0.00 / - real :: arm_table(mvt) !q10 for maintenance respiration + real :: arm_table(mvt) !< q10 for maintenance respiration data ( arm_table (i),i=1,mvt) / 2.0, 2.0, 2.0, 2.0, 2.0, 2.0, & & 2.0, 2.0, 2.0, 2.0, 2.0, 2.0, & & 2.0, 2.0, 2.0, 2.0, 2.0, 2.0, & & 2.0, 2.0, 0.0, 0.0, 0.0, 0.0, & & 0.0, 0.0, 0.0, 0.0, 0.0, 0.0 / - real :: folnmx_table(mvt) !foliage nitrogen concentration when f(n)=1 (%) + real :: folnmx_table(mvt) !< foliage nitrogen concentration when f(n)=1 (%) data (folnmx_table (i),i=1,mvt) / 1.5, 1.5, 1.5, 1.5, 1.5, 1.5, & & 1.5, 1.5, 1.5, 1.5, 1.5, 1.5, & & 0.00, 1.5, 0.00, 1.5, 0.00, 1.5, & & 1.5, 1.5, 0.0, 0.0, 0.0, 0.0, & & 0.0, 0.0, 0.0, 0.0, 0.0, 0.0 / - real :: tmin_table(mvt) !minimum temperature for photosynthesis (k) + real :: tmin_table(mvt) !< minimum temperature for photosynthesis (k) data ( tmin_table (i),i=1,mvt) / 265, 273, 268, 273, 268, 273, & & 273, 273, 273, 273, 268, 273, & & 0, 273, 0, 0, 0, 268, & @@ -433,14 +433,14 @@ module noahmp_tables ! - real :: xl_table(mvt) !leaf/stem orientation index + real :: xl_table(mvt) !< leaf/stem orientation index data ( xl_table (i),i=1,mvt) / 0.010,0.010,0.010,0.250,0.250,0.010, & & 0.010, 0.010, 0.010, -0.30, -0.025, -0.30, & & 0.000, -0.30, 0.000, 0.000, 0.000, 0.250, & & 0.250, 0.250, 0.000, 0.000, 0.000, 0.000, & & 0.001, 0.001, 0.000, 0.000, 0.000, 0.000 / ! - real :: rhol_table(mvt,mband) !leaf reflectance: 1=vis, 2=nir + real :: rhol_table(mvt,mband) !< leaf reflectance: 1=vis, 2=nir data ( rhol_table (i,1),i=1,mvt) / 0.07, 0.10, 0.07, 0.10, 0.10, 0.07, & & 0.07, 0.07, 0.10, 0.11, 0.105, 0.11, & @@ -456,7 +456,7 @@ module noahmp_tables & 0.45, 0.45, 0.00, 0.00, 0.00, 0.00, & & 0.00, 0.00, 0.00, 0.00, 0.00, 0.00 / - real :: rhos_table(mvt,mband) !stem reflectance: 1=vis, 2=nir + real :: rhos_table(mvt,mband) !< stem reflectance: 1=vis, 2=nir data ( rhos_table (i,1),i=1,mvt) / 0.16, 0.16, 0.16, 0.16, 0.16, 0.16, & & 0.16, 0.16, 0.16, 0.36, 0.26, 0.36, & @@ -472,7 +472,7 @@ module noahmp_tables ! &_______________________________________________________________________& - real :: taul_table(mvt,mband) !leaf transmittance: 1=vis, 2=nir + real :: taul_table(mvt,mband) !< leaf transmittance: 1=vis, 2=nir ! data ( taul_table (i,1),i=1,mvt) / 0.05, 0.05, 0.05, 0.05, 0.05, 0.05, & & 0.05, 0.05, 0.05, 0.07, 0.06, 0.07, & @@ -486,7 +486,7 @@ module noahmp_tables & 0.25, 0.25, 0.00, 0.00, 0.00, 0.00, & & 0.00, 0.00, 0.00, 0.00, 0.00, 0.00 / - real :: taus_table(mvt,mband) !stem transmittance: 1=vis, 2=nir + real :: taus_table(mvt,mband) !< stem transmittance: 1=vis, 2=nir data(taus_table (i,1),i=1,mvt) / 0.001,0.001,0.001,0.001,0.001, 0.001, & & 0.001, 0.001, 0.001, 0.220, 0.1105,0.220, & & 0.000, 0.220, 0.000, 0.000, 0.000, 0.001, & @@ -501,7 +501,7 @@ module noahmp_tables & 0.001, 0.001, 0.000, 0.000, 0.000, 0.000 / - real :: mrp_table(mvt) !microbial respiration parameter (umol co2 /kg c/ s) + real :: mrp_table(mvt) !< microbial respiration parameter (umol co2 /kg c/ s) data ( mrp_table (i),i=1,mvt) / 0.37, 0.23, 0.37, 0.40, 0.30, 0.19, & & 0.19, 0.19, 0.40, 0.17,0.285, 0.23, & & 0.00, 0.23, 0.00, 0.00, 0.00, 0.23, & @@ -509,7 +509,7 @@ module noahmp_tables & 0.00, 0.00, 0.00, 0.00, 0.00, 0.00 / ! - real :: cwpvt_table(mvt) !empirical canopy wind parameter + real :: cwpvt_table(mvt) !< empirical canopy wind parameter data ( cwpvt_table (i),i=1,mvt) / 0.18, 0.67, 0.18, 0.67, 0.29, 1.00, & & 2.00, 1.30, 1.00, 5.00, 1.17, 1.67, & & 1.67, 1.67, 0.18, 0.18, 0.18, 0.67, & @@ -517,21 +517,21 @@ module noahmp_tables & 0.00, 0.00, 0.00, 0.00, 0.00, 0.00 / - real :: wrrat_table(mvt) !wood to non-wood ratio + real :: wrrat_table(mvt) !< wood to non-wood ratio data ( wrrat_table (i),i=1,mvt) / 30.0, 30.0, 30.0, 30.0, 30.0, 3.00, & & 3.00, 3.00, 3.00, 0.00, 15.0, 0.00, & & 0.00, 0.00, 0.00, 0.00, 0.00, 3.00, & & 3.00, 0.00, 0.00, 0.00, 0.00, 0.00, & & 0.00, 0.00, 0.00, 0.00, 0.00, 0.00 / - real :: wdpool_table(mvt) !wood pool (switch 1 or 0) depending on woody or not [-] + real :: wdpool_table(mvt) !< wood pool (switch 1 or 0) depending on woody or not [-] data ( wdpool_table(i),i=1,mvt) / 1.00, 1.00, 1.00, 1.00, 1.00, 1.00, & & 1.00, 1.00, 1.00, 0.00, 0.5, 0.00, & & 0.00, 0.00, 0.00, 0.00, 0.00, 1.00, & & 1.00, 0.00, 0.00, 0.00, 0.00, 0.00, & & 0.00, 0.00, 0.00, 0.00, 0.00, 0.00 / - real :: tdlef_table(mvt) !characteristic t for leaf freezing [k] + real :: tdlef_table(mvt) !< characteristic t for leaf freezing [k] data ( tdlef_table (i),i=1,mvt) / 278, 278, 268, 278, 268, 278, & & 278, 278, 278, 278, 268, 278, & & 278, 278, 0, 0, 0, 268, & @@ -539,28 +539,28 @@ module noahmp_tables & 0, 0, 0, 0, 0, 0 / - real :: nroot_table(mvt) !number of soil layers with root present + real :: nroot_table(mvt) !< number of soil layers with root present data ( nroot_table (i),i=1,mvt) / 4, 4, 4, 4, 4, 3, & & 3, 3, 3, 3, 2, 3, & & 1, 3, 1, 1, 0, 3, & & 3, 2, 0, 0, 0, 0, & & 0, 0, 0, 0, 0, 0 / - real :: rgl_table(mvt) !parameter used in radiation stress function + real :: rgl_table(mvt) !< parameter used in radiation stress function data ( rgl_table (i),i=1,mvt) / 30.0, 30.0, 30.0, 30.0, 30.0, 100.0,& & 100.0, 100.0, 65.0, 100.0, 65.0, 100.0, & & 999.0, 100.0, 999.0, 999.0, 30.0, 100.0, & & 100.0, 100.0, 0.00, 0.00, 0.00, 0.00, & & 0.00, 0.00, 0.00, 0.00, 0.00, 0.00 / - real :: rs_table(mvt) !minimum stomatal resistance [s m-1] + real :: rs_table(mvt) !< minimum stomatal resistance [s m-1] data ( rs_table (i),i=1,mvt) / 125.0, 150.0,150.0,100.0,125.0,300.0,& & 170.0,300.0, 70.0, 40.0, 70.0, 40.0, & & 200.0, 40.0, 999.0,999.0,100.0,150.0, & & 150.0, 200.0,0.00, 0.00, 0.00, 0.00, & & 0.00, 0.00, 0.00, 0.00, 0.00, 0.00 / - real :: hs_table(mvt) !parameter used in vapor pressure deficit function + real :: hs_table(mvt) !< parameter used in vapor pressure deficit function data ( hs_table (i),i=1,mvt) / 47.35,41.69,47.35,54.53,51.93,42.00, & & 39.18, 42.00, 54.53, 36.35, 55.97, 36.25, & & 999.0, 36.25, 999.0, 999.0, 51.75, 42.00, & @@ -568,14 +568,14 @@ module noahmp_tables & 0.00, 0.00, 0.00, 0.00, 0.00, 0.00 / - real :: topt_table(mvt) !optimum transpiration air temperature [k] + real :: topt_table(mvt) !< optimum transpiration air temperature [k] data ( topt_table (i),i=1,mvt) / 298.0,298.0,298.0,298.0,298.0,298.0, & & 298.0, 298.0, 298.0, 298.0, 298.0, 298.0, & & 298.0, 298.0, 298.0, 298.0, 298.0, 298.0, & & 298.0, 298.0, 0.00, 0.00, 0.00, 0.00, & & 0.00, 0.00, 0.00, 0.00, 0.00, 0.00 / - real :: rsmax_table(mvt) !maximal stomatal resistance [s m-1] + real :: rsmax_table(mvt) !< maximal stomatal resistance [s m-1] data ( rsmax_table (i),i=1,mvt) / 5000., 5000.,5000.,5000.,5000.,5000.,& & 5000., 5000., 5000., 5000., 5000., 5000., & & 5000., 5000., 5000., 5000., 5000., 5000., & @@ -726,41 +726,41 @@ module noahmp_tables ! genparm.tbl parameters - real :: slope_table(9) !slope factor for soil drainage + real :: slope_table(9) !< slope factor for soil drainage data (slope_table(i), i=1,9) /0.1, 0.6, 1.0, 0.35, 0.55, 0.8, & & 0.63, 0.0, 0.0 / - real :: csoil_table = 2.00e+6 !soil heat capacity [j m-3 k-1] - real :: refdk_table = 2.0e-6 !parameter in the surface runoff parameterization - real :: refkdt_table = 3.0 !parameter in the surface runoff parameterization - real :: frzk_table =0.15 !frozen ground parameter - real :: zbot_table = -8.0 !depth [m] of lower boundary soil temperature - real :: czil_table = 0.1 !parameter used in the calculation of the roughness length for heat + real :: csoil_table = 2.00e+6 !< soil heat capacity [j m-3 k-1] + real :: refdk_table = 2.0e-6 !< parameter in the surface runoff parameterization + real :: refkdt_table = 3.0 !< parameter in the surface runoff parameterization + real :: frzk_table =0.15 !< frozen ground parameter + real :: zbot_table = -8.0 !< depth [m] of lower boundary soil temperature + real :: czil_table = 0.1 !< parameter used in the calculation of the roughness length for heat ! mptable.tbl radiation parameters ! &_______________________________________________________________________& - real :: albsat_table(msc,mband) !saturated soil albedos: 1=vis, 2=nir + real :: albsat_table(msc,mband) !< saturated soil albedos: 1=vis, 2=nir data(albsat_table(i,1),i=1,8)/0.15,0.11,0.10,0.09,0.08,0.07,0.06,0.05/ data(albsat_table(i,2),i=1,8)/0.30,0.22,0.20,0.18,0.16,0.14,0.12,0.10/ - real :: albdry_table(msc,mband) !dry soil albedos: 1=vis, 2=nir + real :: albdry_table(msc,mband) !< dry soil albedos: 1=vis, 2=nir data(albdry_table(i,1),i=1,8)/0.27,0.22,0.20,0.18,0.16,0.14,0.12,0.10/ data(albdry_table(i,2),i=1,8)/0.54,0.44,0.40,0.36,0.32,0.28,0.24,0.20/ - real :: albice_table(mband) !albedo land ice: 1=vis, 2=nir + real :: albice_table(mband) !< albedo land ice: 1=vis, 2=nir data (albice_table(i),i=1,mband) /0.80, 0.55/ - real :: alblak_table(mband) !albedo frozen lakes: 1=vis, 2=nir + real :: alblak_table(mband) !< albedo frozen lakes: 1=vis, 2=nir data (alblak_table(i),i=1,mband) /0.60, 0.40/ - real :: omegas_table(mband) !two-stream parameter omega for snow + real :: omegas_table(mband) !< two-stream parameter omega for snow data (omegas_table(i),i=1,mband) /0.8, 0.4/ - real :: betads_table = 0.5 !two-stream parameter betad for snow - real :: betais_table = 0.5 !two-stream parameter betad for snow + real :: betads_table = 0.5 !< two-stream parameter betad for snow + real :: betais_table = 0.5 !< two-stream parameter betad for snow - real :: eg_table(2) !emissivity + real :: eg_table(2) !< emissivity data eg_table /0.97, 0.98 / real :: betads, betais @@ -769,30 +769,30 @@ module noahmp_tables ! mptable.tbl global parameters - real :: co2_table = 395.e-06 !co2 partial pressure - real :: o2_table = 0.209 !o2 partial pressure - real :: timean_table = 10.5 !gridcell mean topgraphic index (global mean) - real :: fsatmx_table = 0.38 !maximum surface saturated fraction (global mean) - - real :: z0sno_table = 0.002 !snow surface roughness length (m) (0.002) - real :: ssi_table = 0.03 !liquid water holding capacity for snowpack (m3/m3) (0.03) - real :: snow_ret_fac_table = 5.e-5 !snowpack water release timescale factor (1/s) - real :: swemx_table = 1.00 !new snow mass to fully cover old snow (mm) - - real :: tau0_table = 1.e6 !tau0 from yang97 eqn. 10a - real :: grain_growth_table = 5000. !growth from vapor diffusion yang97 eqn. 10b - real :: extra_growth_table = 10. !extra growth near freezing yang97 eqn. 10c - real :: dirt_soot_table = 0.3 !dirt and soot term yang97 eqn. 10d - real :: bats_cosz_table = 2.0 !zenith angle snow albedo adjustment; b in yang97 eqn. 15 - real :: bats_vis_new_table = 0.95 !new snow visible albedo - real :: bats_nir_new_table = 0.65 !new snow nir albedo - real :: bats_vis_age_table = 0.2 !age factor for diffuse visible snow albedo yang97 eqn. 17 - real :: bats_nir_age_table = 0.5 !age factor for diffuse nir snow albedo yang97 eqn. 18 - real :: bats_vis_dir_table = 0.4 !cosz factor for direct visible snow albedo yang97 eqn. 15 - real :: bats_nir_dir_table = 0.4 !cosz factor for direct nir snow albedo yang97 eqn. 16 - real :: rsurf_snow_table = 50.0 !surface resistance for snow(s/m) - real :: rsurf_exp_table = 5.0 !exponent in the shape parameter for soil resistance option 1 - real :: snow_emis_table = 0.95 !surface emissivity + real :: co2_table = 395.e-06 !< co2 partial pressure + real :: o2_table = 0.209 !< o2 partial pressure + real :: timean_table = 10.5 !< gridcell mean topgraphic index (global mean) + real :: fsatmx_table = 0.38 !< maximum surface saturated fraction (global mean) + + real :: z0sno_table = 0.002 !< snow surface roughness length (m) (0.002) + real :: ssi_table = 0.03 !< liquid water holding capacity for snowpack (m3/m3) (0.03) + real :: snow_ret_fac_table = 5.e-5 !< snowpack water release timescale factor (1/s) + real :: swemx_table = 1.00 !< new snow mass to fully cover old snow (mm) + + real :: tau0_table = 1.e6 !< tau0 from yang97 eqn. 10a + real :: grain_growth_table = 5000. !< growth from vapor diffusion yang97 eqn. 10b + real :: extra_growth_table = 10. !< extra growth near freezing yang97 eqn. 10c + real :: dirt_soot_table = 0.3 !< dirt and soot term yang97 eqn. 10d + real :: bats_cosz_table = 2.0 !< zenith angle snow albedo adjustment; b in yang97 eqn. 15 + real :: bats_vis_new_table = 0.95 !< new snow visible albedo + real :: bats_nir_new_table = 0.65 !< new snow nir albedo + real :: bats_vis_age_table = 0.2 !< age factor for diffuse visible snow albedo yang97 eqn. 17 + real :: bats_nir_age_table = 0.5 !< age factor for diffuse nir snow albedo yang97 eqn. 18 + real :: bats_vis_dir_table = 0.4 !< cosz factor for direct visible snow albedo yang97 eqn. 15 + real :: bats_nir_dir_table = 0.4 !< cosz factor for direct nir snow albedo yang97 eqn. 16 + real :: rsurf_snow_table = 50.0 !< surface resistance for snow(s/m) + real :: rsurf_exp_table = 5.0 !< exponent in the shape parameter for soil resistance option 1 + real :: snow_emis_table = 0.95 !< surface emissivity ! Noah mp crops @@ -806,77 +806,77 @@ module noahmp_tables ! &_______________________________________________________________________& - integer :: pltday_table(ncrop) ! planting date + integer :: pltday_table(ncrop) !< planting date data (pltday_table(i), i=1,5) /130,111,111,111,111/ - integer :: hsday_table(ncrop) ! harvest date + integer :: hsday_table(ncrop) !< harvest date data (hsday_table(i),i=1,5) /280,300,300,300,300/ - real :: plantpop_table(ncrop) ! plant density [per ha] - used? + real :: plantpop_table(ncrop) !< plant density [per ha] - used? data (plantpop_table(i),i=1,5) /78.0,78.0,78.0,78.0,78.0/ - real :: irri_table(ncrop) ! irrigation strategy 0= non-irrigation 1=irrigation (no water-stress) + real :: irri_table(ncrop) !< irrigation strategy 0= non-irrigation 1=irrigation (no water-stress) data (irri_table(i),i=1,5) /0.0,0.0,0.0,0.0,0.0/ - real :: gddtbase_table(ncrop) ! base temperature for gdd accumulation [c] + real :: gddtbase_table(ncrop) !< base temperature for gdd accumulation [c] data (gddtbase_table(i),i=1,5) /10.0,10.0,10.0,10.0,10.0/ - real :: gddtcut_table(ncrop) ! upper temperature for gdd accumulation [c] + real :: gddtcut_table(ncrop) !< upper temperature for gdd accumulation [c] data (gddtcut_table(i),i=1,5) /30.0,30.0,30.0,30.0,30.0/ - real :: gdds1_table(ncrop) ! gdd from seeding to emergence + real :: gdds1_table(ncrop) !< gdd from seeding to emergence data (gdds1_table(i),i=1,5) /60.0,50.0,50.0,50.0,50.0/ - real :: gdds2_table(ncrop) ! gdd from seeding to initial vegetative + real :: gdds2_table(ncrop) !< gdd from seeding to initial vegetative data (gdds2_table(i),i=1,5) /675.0,718.0,718.0,718.0,718.0/ - real :: gdds3_table(ncrop) ! gdd from seeding to post vegetative + real :: gdds3_table(ncrop) !< gdd from seeding to post vegetative data (gdds3_table(i),i=1,5) /1183.0,933.0,933.0,933.0,933.0/ - real :: gdds4_table(ncrop) ! gdd from seeding to intial reproductive + real :: gdds4_table(ncrop) !< gdd from seeding to intial reproductive data (gdds4_table(i),i=1,5) /1253.0,1103.0,1103.0,1103.0,1103.0/ - real :: gdds5_table(ncrop) ! gdd from seeding to pysical maturity + real :: gdds5_table(ncrop) !< gdd from seeding to pysical maturity data (gdds5_table(i),i=1,5) /1605.0,1555.0,1555.0,1555.0,1555.0/ - integer :: c3c4_table(ncrop) ! photosynthetic pathway: 1. = c3 2. = c4 + integer :: c3c4_table(ncrop) !< photosynthetic pathway: 1. = c3 2. = c4 data (c3c4_table(i),i=1,5) /2.0,1.0,2.0,2.0,2.0/ - real :: aref_table(ncrop) ! reference maximum co2 assimulation rate + real :: aref_table(ncrop) !< reference maximum co2 assimulation rate data (aref_table(i),i=1,5) /7.0,7.0,7.0,7.0,7.0/ - real :: psnrf_table(ncrop) ! co2 assimulation reduction factor(0-1) (caused by non-modeling part,e.g.pest,weeds) + real :: psnrf_table(ncrop) !< co2 assimulation reduction factor(0-1) (caused by non-modeling part,e.g.pest,weeds) data (psnrf_table(i),i=1,5) /0.85,0.85,0.85,0.85,0.85/ - real :: i2par_table(ncrop) ! fraction of incoming solar radiation to photosynthetically active radiation + real :: i2par_table(ncrop) !< fraction of incoming solar radiation to photosynthetically active radiation data (i2par_table(i),i=1,5) / 0.5,0.5,0.5,0.5,0.5/ - real :: tassim0_table(ncrop) ! minimum temperature for co2 assimulation [c] + real :: tassim0_table(ncrop) !< minimum temperature for co2 assimulation [c] data (tassim0_table(i),i=1,5) /8.0,8.0,8.0,8.0,8.0/ - real :: tassim1_table(ncrop) ! co2 assimulation linearly increasing until temperature reaches t1 [c] + real :: tassim1_table(ncrop) !< co2 assimulation linearly increasing until temperature reaches t1 [c] data (tassim1_table(i),i=1,5) /18.0,18.0,18.0,18.0,18.0/ - real :: tassim2_table(ncrop) ! co2 assmilation rate remain at aref until temperature reaches t2 [c] + real :: tassim2_table(ncrop) !< co2 assmilation rate remain at aref until temperature reaches t2 [c] data (tassim2_table(i),i=1,5) /30.0,30.0,30.0,30.0,30.0/ - real :: k_table(ncrop) ! light extinction coefficient + real :: k_table(ncrop) !< light extinction coefficient data ( k_table(i),i=1,5) /0.55,0.55,0.55,0.55,0.55/ - real :: epsi_table(ncrop) ! initial light use efficiency + real :: epsi_table(ncrop) !< initial light use efficiency data (epsi_table(i),i=1,5) /12.5,12.5,12.5,12.5,12.5/ - real :: q10mr_table(ncrop) ! q10 for maintainance respiration + real :: q10mr_table(ncrop) !< q10 for maintainance respiration data (q10mr_table(i),i=1,5) /2.0,2.0,2.0,2.0,2.0/ - real :: foln_mx_table(ncrop) ! foliage nitrogen concentration when f(n)=1 (%) + real :: foln_mx_table(ncrop) !< foliage nitrogen concentration when f(n)=1 (%) data (foln_mx_table(i),i=1,5) /1.5,1.5,1.5,1.5,1.5/ - real :: lefreez_table(ncrop) ! characteristic t for leaf freezing [k] + real :: lefreez_table(ncrop) !< characteristic t for leaf freezing [k] data (lefreez_table(i),i=1,5) /268,268,268,268,268/ - real :: dile_fc_table(ncrop,nstage) ! coeficient for temperature leaf stress death [1/s] + real :: dile_fc_table(ncrop,nstage) !< coeficient for temperature leaf stress death [1/s] data (dile_fc_table(i,1),i=1,5) /0.0,0.0,0.0,0.0,0.0/ data (dile_fc_table(i,2),i=1,5) /0.0,0.0,0.0,0.0,0.0/ data (dile_fc_table(i,3),i=1,5) /0.0,0.0,0.0,0.0,0.0/ @@ -886,7 +886,7 @@ module noahmp_tables data (dile_fc_table(i,7),i=1,5) /0.0,0.0,0.0,0.0,0.0/ data (dile_fc_table(i,8),i=1,5) /0.0,0.0,0.0,0.0,0.0/ - real :: dile_fw_table(ncrop,nstage) ! coeficient for water leaf stress death [1/s] + real :: dile_fw_table(ncrop,nstage) !< coeficient for water leaf stress death [1/s] data (dile_fw_table(i,1),i=1,5) /0.0,0.0,0.0,0.0,0.0/ data (dile_fw_table(i,2),i=1,5) /0.0,0.0,0.0,0.0,0.0/ data (dile_fw_table(i,3),i=1,5) /0.0,0.0,0.0,0.0,0.0/ @@ -896,10 +896,10 @@ module noahmp_tables data (dile_fw_table(i,7),i=1,5) /0.0,0.0,0.0,0.0,0.0/ data (dile_fw_table(i,8),i=1,5) /0.0,0.0,0.0,0.0,0.0/ - real :: fra_gr_table(ncrop) ! fraction of growth respiration + real :: fra_gr_table(ncrop) !< fraction of growth respiration data (fra_gr_table(i),i=1,5) /0.2,0.2,0.2,0.2,0.2/ - real :: lf_ovrc_table(ncrop,nstage) ! fraction of leaf turnover [1/s] + real :: lf_ovrc_table(ncrop,nstage) !< fraction of leaf turnover [1/s] data (lf_ovrc_table(i,1),i=1,5) /0.0,0.0,0.0,0.0,0.0/ data (lf_ovrc_table(i,2),i=1,5) /0.0,0.0,0.0,0.0,0.0/ data (lf_ovrc_table(i,3),i=1,5) /0.0,0.0,0.0,0.0,0.0/ @@ -909,7 +909,7 @@ module noahmp_tables data (lf_ovrc_table(i,7),i=1,5) /0.0,0.0,0.0,0.0,0.0/ data (lf_ovrc_table(i,8),i=1,5) /0.0,0.0,0.0,0.0,0.0/ - real :: st_ovrc_table(ncrop,nstage) ! fraction of stem turnover [1/s] + real :: st_ovrc_table(ncrop,nstage) !< fraction of stem turnover [1/s] data (st_ovrc_table(i,1),i=1,5) /0.0,0.0,0.0,0.0,0.0/ data (st_ovrc_table(i,2),i=1,5) /0.0,0.0,0.0,0.0,0.0/ data (st_ovrc_table(i,3),i=1,5) /0.0,0.0,0.0,0.0,0.0/ @@ -919,7 +919,7 @@ module noahmp_tables data (st_ovrc_table(i,7),i=1,5) /0.0,0.0,0.0,0.0,0.0/ data (st_ovrc_table(i,8),i=1,5) /0.0,0.0,0.0,0.0,0.0/ - real :: rt_ovrc_table(ncrop,nstage) ! fraction of root tunrover [1/s] + real :: rt_ovrc_table(ncrop,nstage) !< fraction of root tunrover [1/s] data (rt_ovrc_table(i,1),i=1,5) /0.0,0.0,0.0,0.0,0.0/ data (rt_ovrc_table(i,2),i=1,5) /0.0,0.0,0.0,0.0,0.0/ data (rt_ovrc_table(i,3),i=1,5) /0.0,0.0,0.0,0.0,0.0/ @@ -929,19 +929,19 @@ module noahmp_tables data (rt_ovrc_table(i,7),i=1,5) /0.0,0.0,0.0,0.0,0.0/ data (rt_ovrc_table(i,8),i=1,5) /0.0,0.0,0.0,0.0,0.0/ - real :: lfmr25_table(ncrop) ! leaf maintenance respiration at 25c [umol co2/m**2 /s] + real :: lfmr25_table(ncrop) !< leaf maintenance respiration at 25c [umol co2/m**2 /s] data (lfmr25_table(i),i=1,5) /1.0,1.0,1.0,1.0,1.0/ - real :: stmr25_table(ncrop) ! stem maintenance respiration at 25c [umol co2/kg bio/s] + real :: stmr25_table(ncrop) !< stem maintenance respiration at 25c [umol co2/kg bio/s] data (stmr25_table(i),i=1,5) /0.05,0.1,0.1,0.1,0.1/ - real :: rtmr25_table(ncrop) ! root maintenance respiration at 25c [umol co2/kg bio/s] + real :: rtmr25_table(ncrop) !< root maintenance respiration at 25c [umol co2/kg bio/s] data (rtmr25_table(i),i=1,5) /0.05,0.0,0.0,0.0,0.0/ - real :: grainmr25_table(ncrop) ! grain maintenance respiration at 25c [umol co2/kg bio/s] + real :: grainmr25_table(ncrop) !< grain maintenance respiration at 25c [umol co2/kg bio/s] data (grainmr25_table(i),i=1,5) /0.0,0.1,0.1,0.1,0.1/ - real :: lfpt_table(ncrop,nstage) ! fraction of carbohydrate flux to leaf + real :: lfpt_table(ncrop,nstage) !< fraction of carbohydrate flux to leaf data (lfpt_table(i,1),i=1,5) /0.0,0.0,0.0,0.0,0.0/ data (lfpt_table(i,2),i=1,5) /0.0,0.0,0.0,0.0,0.0/ data (lfpt_table(i,3),i=1,5) /0.4,0.4,0.4,0.4,0.4/ @@ -952,7 +952,7 @@ module noahmp_tables data (lfpt_table(i,8),i=1,5) /0.0,0.0,0.0,0.0,0.0/ - real :: stpt_table(ncrop,nstage) ! fraction of carbohydrate flux to stem + real :: stpt_table(ncrop,nstage) !< fraction of carbohydrate flux to stem data (stpt_table(i,1),i=1,5) /0.0,0.0,0.0,0.0,0.0/ data (stpt_table(i,2),i=1,5) /0.0,0.0,0.0,0.0,0.0/ data (stpt_table(i,3),i=1,5) /0.2,0.2,0.2,0.2,0.2/ @@ -963,7 +963,7 @@ module noahmp_tables data (stpt_table(i,8),i=1,5) /0.0,0.0,0.0,0.0,0.0/ - real :: rtpt_table(ncrop,nstage) ! fraction of carbohydrate flux to root + real :: rtpt_table(ncrop,nstage) !< fraction of carbohydrate flux to root data (rtpt_table(i,1),i=1,5) /0.0,0.0,0.0,0.0,0.0/ data (rtpt_table(i,2),i=1,5) /0.0,0.0,0.0,0.0,0.0/ data (rtpt_table(i,3),i=1,5) /0.34,0.4,0.4,0.4,0.4/ @@ -973,7 +973,7 @@ module noahmp_tables data (rtpt_table(i,7),i=1,5) /0.0,0.0,0.0,0.0,0.0/ data (rtpt_table(i,8),i=1,5) /0.0,0.0,0.0,0.0,0.0/ - real :: grainpt_table(ncrop,nstage) ! fraction of carbohydrate flux to grain + real :: grainpt_table(ncrop,nstage) !< fraction of carbohydrate flux to grain data (grainpt_table(i,1),i=1,5) /0.0,0.0,0.0,0.0,0.0/ data (grainpt_table(i,2),i=1,5) /0.0,0.0,0.0,0.0,0.0/ data (grainpt_table(i,3),i=1,5) /0.0,0.0,0.0,0.0,0.0/ @@ -983,7 +983,7 @@ module noahmp_tables data (grainpt_table(i,7),i=1,5) /0.0,0.0,0.0,0.0,0.0/ data (grainpt_table(i,8),i=1,5) /0.0,0.0,0.0,0.0,0.0/ - real :: bio2lai_table(ncrop) ! leaf are per living leaf biomass [m^2/kg] + real :: bio2lai_table(ncrop) !< leaf are per living leaf biomass [m^2/kg] data (bio2lai_table(i),i=1,5) /0.035,0.015,0.015,0.015,0.015/ ! mptable.tbl optional parameters @@ -992,54 +992,54 @@ module noahmp_tables ! Saxton and Rawls 2006 Pedo-transfer function coefficients !------------------------------------------------------------------------------ - real :: sr2006_theta_1500t_a = -0.024 ! sand coefficient - real :: sr2006_theta_1500t_b = 0.487 ! clay coefficient - real :: sr2006_theta_1500t_c = 0.006 ! orgm coefficient - real :: sr2006_theta_1500t_d = 0.005 ! sand*orgm coefficient - real :: sr2006_theta_1500t_e = -0.013 ! clay*orgm coefficient - real :: sr2006_theta_1500t_f = 0.068 ! sand*clay coefficient - real :: sr2006_theta_1500t_g = 0.031 ! constant adjustment - - real :: sr2006_theta_1500_a = 0.14 ! theta_1500t coefficient - real :: sr2006_theta_1500_b = -0.02 ! constant adjustment - - real :: sr2006_theta_33t_a = -0.251 ! sand coefficient - real :: sr2006_theta_33t_b = 0.195 ! clay coefficient - real :: sr2006_theta_33t_c = 0.011 ! orgm coefficient - real :: sr2006_theta_33t_d = 0.006 ! sand*orgm coefficient - real :: sr2006_theta_33t_e = -0.027 ! clay*orgm coefficient - real :: sr2006_theta_33t_f = 0.452 ! sand*clay coefficient - real :: sr2006_theta_33t_g = 0.299 ! constant adjustment - - real :: sr2006_theta_33_a = 1.283 ! theta_33t*theta_33t coefficient - real :: sr2006_theta_33_b = -0.374 ! theta_33t coefficient - real :: sr2006_theta_33_c = -0.015 ! constant adjustment - - real :: sr2006_theta_s33t_a = 0.278 ! sand coefficient - real :: sr2006_theta_s33t_b = 0.034 ! clay coefficient - real :: sr2006_theta_s33t_c = 0.022 ! orgm coefficient - real :: sr2006_theta_s33t_d = -0.018 ! sand*orgm coefficient - real :: sr2006_theta_s33t_e = -0.027 ! clay*orgm coefficient - real :: sr2006_theta_s33t_f = -0.584 ! sand*clay coefficient - real :: sr2006_theta_s33t_g = 0.078 ! constant adjustment - - real :: sr2006_theta_s33_a = 0.636 ! theta_s33t coefficient - real :: sr2006_theta_s33_b = -0.107 ! constant adjustment - - real :: sr2006_psi_et_a = -21.67 ! sand coefficient - real :: sr2006_psi_et_b = -27.93 ! clay coefficient - real :: sr2006_psi_et_c = -81.97 ! theta_s33 coefficient - real :: sr2006_psi_et_d = 71.12 ! sand*theta_s33 coefficient - real :: sr2006_psi_et_e = 8.29 ! clay*theta_s33 coefficient - real :: sr2006_psi_et_f = 14.05 ! sand*clay coefficient - real :: sr2006_psi_et_g = 27.16 ! constant adjustment - - real :: sr2006_psi_e_a = 0.02 ! psi_et*psi_et coefficient - real :: sr2006_psi_e_b = -0.113 ! psi_et coefficient - real :: sr2006_psi_e_c = -0.7 ! constant adjustment - - real :: sr2006_smcmax_a = -0.097 ! sand adjustment - real :: sr2006_smcmax_b = 0.043 ! constant adjustment + real :: sr2006_theta_1500t_a = -0.024 !< sand coefficient + real :: sr2006_theta_1500t_b = 0.487 !< clay coefficient + real :: sr2006_theta_1500t_c = 0.006 !< orgm coefficient + real :: sr2006_theta_1500t_d = 0.005 !< sand*orgm coefficient + real :: sr2006_theta_1500t_e = -0.013 !< clay*orgm coefficient + real :: sr2006_theta_1500t_f = 0.068 !< sand*clay coefficient + real :: sr2006_theta_1500t_g = 0.031 !< constant adjustment + + real :: sr2006_theta_1500_a = 0.14 !< theta_1500t coefficient + real :: sr2006_theta_1500_b = -0.02 !< constant adjustment + + real :: sr2006_theta_33t_a = -0.251 !< sand coefficient + real :: sr2006_theta_33t_b = 0.195 !< clay coefficient + real :: sr2006_theta_33t_c = 0.011 !< orgm coefficient + real :: sr2006_theta_33t_d = 0.006 !< sand*orgm coefficient + real :: sr2006_theta_33t_e = -0.027 !< clay*orgm coefficient + real :: sr2006_theta_33t_f = 0.452 !< sand*clay coefficient + real :: sr2006_theta_33t_g = 0.299 !< constant adjustment + + real :: sr2006_theta_33_a = 1.283 !< theta_33t*theta_33t coefficient + real :: sr2006_theta_33_b = -0.374 !< theta_33t coefficient + real :: sr2006_theta_33_c = -0.015 !< constant adjustment + + real :: sr2006_theta_s33t_a = 0.278 !< sand coefficient + real :: sr2006_theta_s33t_b = 0.034 !< clay coefficient + real :: sr2006_theta_s33t_c = 0.022 !< orgm coefficient + real :: sr2006_theta_s33t_d = -0.018 !< sand*orgm coefficient + real :: sr2006_theta_s33t_e = -0.027 !< clay*orgm coefficient + real :: sr2006_theta_s33t_f = -0.584 !< sand*clay coefficient + real :: sr2006_theta_s33t_g = 0.078 !< constant adjustment + + real :: sr2006_theta_s33_a = 0.636 !< theta_s33t coefficient + real :: sr2006_theta_s33_b = -0.107 !< constant adjustment + + real :: sr2006_psi_et_a = -21.67 !< sand coefficient + real :: sr2006_psi_et_b = -27.93 !< clay coefficient + real :: sr2006_psi_et_c = -81.97 !< theta_s33 coefficient + real :: sr2006_psi_et_d = 71.12 !< sand*theta_s33 coefficient + real :: sr2006_psi_et_e = 8.29 !< clay*theta_s33 coefficient + real :: sr2006_psi_et_f = 14.05 !< sand*clay coefficient + real :: sr2006_psi_et_g = 27.16 !< constant adjustment + + real :: sr2006_psi_e_a = 0.02 !< psi_et*psi_et coefficient + real :: sr2006_psi_e_b = -0.113 !< psi_et coefficient + real :: sr2006_psi_e_c = -0.7 !< constant adjustment + + real :: sr2006_smcmax_a = -0.097 !< sand adjustment + real :: sr2006_smcmax_b = 0.043 !< constant adjustment end module noahmp_tables diff --git a/physics/ozphys.f b/physics/ozphys.f index 011b63fac..f0229717a 100644 --- a/physics/ozphys.f +++ b/physics/ozphys.f @@ -59,15 +59,14 @@ subroutine ozphys_run ( & ! ! Interface variables integer, intent(in) :: im, levs, ko3, oz_coeff, me - real(kind=kind_phys), intent(inout) :: oz(im,levs) - ! The dtend array may not be allocated and needs an assumed array size + real(kind=kind_phys), intent(inout) :: oz(:,:) real(kind=kind_phys), intent(inout) :: dtend(:,:,:) integer, intent(in) :: dtidx(:,:), ntoz, & & index_of_process_prod_loss, index_of_process_ozmix, & & index_of_process_temp, index_of_process_overhead_ozone real(kind=kind_phys), intent(in) :: & - & dt, po3(ko3), prdout(im,ko3,oz_coeff), & - & prsl(im,levs), tin(im,levs), delp(im,levs), & + & dt, po3(:), prdout(:,:,:), & + & prsl(:,:), tin(:,:), delp(:,:), & & con_g real :: gravi logical, intent(in) :: ldiag3d diff --git a/physics/ozphys_2015.f b/physics/ozphys_2015.f index 2499f3218..9711b45b4 100644 --- a/physics/ozphys_2015.f +++ b/physics/ozphys_2015.f @@ -61,18 +61,16 @@ subroutine ozphys_2015_run ( & real(kind=kind_phys),intent(in) :: con_g real :: gravi integer, intent(in) :: im, levs, ko3, pl_coeff,me - real(kind=kind_phys), intent(in) :: po3(ko3), & - & prsl(im,levs), tin(im,levs), & - & delp(im,levs), & - & prdout(im,ko3,pl_coeff), dt - ! dtend may not be allocated and needs an assumed array size + real(kind=kind_phys), intent(in) :: po3(:), & + & prsl(:,:), tin(:,:), & + & delp(:,:), & + & prdout(:,:,:), dt real(kind=kind_phys), intent(inout) :: dtend(:,:,:) integer, intent(in) :: dtidx(:,:), ntoz, & & index_of_process_prod_loss, index_of_process_ozmix, & & index_of_process_temp, index_of_process_overhead_ozone real(kind=kind_phys), intent(inout) :: oz(im,levs) - character(len=*), intent(out) :: errmsg integer, intent(out) :: errflg diff --git a/physics/precpd.f b/physics/precpd.f index c64474c01..2cc2e169a 100644 --- a/physics/precpd.f +++ b/physics/precpd.f @@ -98,13 +98,13 @@ subroutine zhaocarr_precpd_run (im,km,dt,del,prsl,q,cwm,t,rn & ! Interface variables integer, intent(in) :: im, km, jpr real (kind=kind_phys), intent(in) :: dt - real (kind=kind_phys), intent(in) :: del(im,km), prsl(im,km) - real (kind=kind_phys), intent(inout) :: q(im,km), t(im,km), & - & cwm(im,km) - real (kind=kind_phys), intent(out) :: rn(im), sr(im), rainp(im,km) - real (kind=kind_phys), intent(in) :: u00k(im,km) - real (kind=kind_phys), intent(in) :: psautco(2), prautco(2), & - & evpco, wminco(2), wk1(im) + real (kind=kind_phys), intent(in) :: del(:,:), prsl(:,:) + real (kind=kind_phys), intent(inout) :: q(:,:), t(:,:), & + & cwm(:,:) + real (kind=kind_phys), intent(out) :: rn(:), sr(:), rainp(:,:) + real (kind=kind_phys), intent(in) :: u00k(:,:) + real (kind=kind_phys), intent(in) :: psautco(:), prautco(:), & + & evpco, wminco(:), wk1(:) logical, intent(in) :: lprnt character(len=*), intent(out) :: errmsg integer, intent(out) :: errflg diff --git a/physics/radiation_aerosols.f b/physics/radiation_aerosols.f index e1e66b0d9..e7fd3631b 100644 --- a/physics/radiation_aerosols.f +++ b/physics/radiation_aerosols.f @@ -127,7 +127,6 @@ !> \ingroup rad !! \defgroup module_radiation_aerosols module_radiation_aerosols -!> @{ !! This module contains climatological atmospheric aerosol schemes for !! radiation computations. !! @@ -766,8 +765,6 @@ end subroutine wrt_aerlog !> This subroutine defines the one wavenumber solar fluxes based on toa !! solar spectral distribution, and define the one wavenumber IR fluxes !! based on black-body emission distribution at a predefined temperature. -!>\section gel_set_spec General Algorithm -!-------------------------------- subroutine set_spectrum !................................ ! --- inputs: (module constants) @@ -915,7 +912,6 @@ end subroutine aer_init !! !!\section gen_clim_aerinit General Algorithm !!@{ -!----------------------------------- subroutine clim_aerinit & & ( solfwv, eirfwv, me & ! --- inputs & ) ! --- outputs @@ -4527,4 +4523,3 @@ end subroutine aer_property_gocart !..........................................! end module module_radiation_aerosols ! !==========================================! -!> @} diff --git a/physics/radiation_tools.F90 b/physics/radiation_tools.F90 new file mode 100644 index 000000000..c6524aab6 --- /dev/null +++ b/physics/radiation_tools.F90 @@ -0,0 +1,97 @@ +module radiation_tools + use machine, only: & + kind_phys ! Working type + implicit none + + real(kind_phys) :: & + rrtmgp_minP, & ! Minimum pressure allowed in RRTMGP + rrtmgp_minT ! Minimum temperature allowed in RRTMGP +contains + + ! ######################################################################################### + ! ######################################################################################### + subroutine cmp_tlev(nCol,nLev,minP,p_lay,t_lay,p_lev,tsfc,t_lev) + ! Inputs + integer, intent(in) :: & + nCol,nLev + real(kind_phys),intent(in) :: & + minP + real(kind_phys),dimension(nCol),intent(in) :: & + tsfc + real(kind_phys),dimension(nCol,nLev),intent(in) :: & + p_lay,t_lay + real(kind_phys),dimension(nCol,nLev+1),intent(in) :: & + p_lev + + ! Outputs + real(kind_phys),dimension(nCol,nLev+1),intent(out) :: & + t_lev + + ! Local + integer :: iCol,iLay, iSFC, iTOA + logical :: top_at_1 + real(kind_phys), dimension(nCol,nLev) :: tem2da, tem2db + + top_at_1 = (p_lev(1,1) .lt. p_lev(1, nLev)) + if (top_at_1) then + iSFC = nLev + iTOA = 1 + else + iSFC = 1 + iTOA = nLev + endif + + if (iTOA .eq. 1) then + tem2da(1:nCol,2:iSFC) = log(p_lay(1:nCol,2:iSFC)) + tem2db(1:nCol,2:iSFC) = log(p_lev(1:nCol,2:iSFC)) + do iCol = 1, nCol + tem2da(iCol,1) = log(p_lay(iCol,1) ) + tem2db(iCol,1) = log(max(minP, p_lev(iCol,1)) ) + tem2db(iCol,iSFC) = log(p_lev(iCol,iSFC) ) + enddo + t_lev(1:NCOL,1) = t_lay(1:NCOL,iTOA) + do iLay = 2, iSFC + do iCol = 1, nCol + t_lev(iCol,iLay) = t_lay(iCol,iLay) + (t_lay(iCol,iLay-1) - t_lay(iCol,iLay))& + * (tem2db(iCol,iLay) - tem2da(iCol,iLay)) & + / (tem2da(iCol,iLay-1) - tem2da(iCol,iLay)) + enddo + enddo + t_lev(1:NCOL,iSFC+1) = tsfc(1:NCOL) + else + tem2da(1:nCol,2:iTOA) = log(p_lay(1:nCol,2:iTOA)) + tem2db(1:nCol,2:iTOA) = log(p_lev(1:nCol,2:iTOA)) + do iCol = 1, nCol + tem2da(iCol,1) = log(p_lay(iCol,1)) + tem2db(iCol,1) = log(p_lev(iCol,1)) + tem2db(iCol,iTOA) = log(max(minP, p_lev(iCol,iTOA)) ) + enddo + + t_lev(1:NCOL,1) = tsfc(1:NCOL) + do iLay = 1, iTOA-1 + do iCol = 1, nCol + t_lev(iCol,iLay+1) = t_lay(iCol,iLay) + (t_lay(iCol,iLay+1) - t_lay(iCol,iLay))& + * (tem2db(iCol,iLay+1) - tem2da(iCol,iLay)) & + / (tem2da(iCol,iLay+1) - tem2da(iCol,iLay)) + enddo + enddo + t_lev(1:NCOL,iTOA+1) = t_lay(1:NCOL,iTOA) + endif + + end subroutine cmp_tlev + + ! ######################################################################################### + ! SUBROUTINE check_error_msg + ! ######################################################################################### + subroutine check_error_msg(routine_name, error_msg) + character(len=*), intent(in) :: & + error_msg, routine_name + + if(error_msg /= "") then + print*,"ERROR("//trim(routine_name)//"): " + print*,trim(error_msg) + return + end if + end subroutine check_error_msg + +end module radiation_tools diff --git a/physics/radlw_main.F90 b/physics/radlw_main.F90 index 7655e76d2..8fcaecd29 100644 --- a/physics/radlw_main.F90 +++ b/physics/radlw_main.F90 @@ -613,26 +613,26 @@ subroutine rrtmg_lw_run & logical, intent(in) :: lprnt - real (kind=kind_phys), dimension(npts,nlp1), intent(in) :: plvl, & + real (kind=kind_phys), dimension(:,:), intent(in) :: plvl, & & tlvl - real (kind=kind_phys), dimension(npts,nlay), intent(in) :: plyr, & + real (kind=kind_phys), dimension(:,:), intent(in) :: plyr, & & tlyr, qlyr, olyr, dzlyr, delpin - real (kind=kind_phys),dimension(npts,nlay),intent(in)::gasvmr_co2,& + real (kind=kind_phys),dimension(:,:),intent(in)::gasvmr_co2, & & gasvmr_n2o, gasvmr_ch4, gasvmr_o2, gasvmr_co, gasvmr_cfc11, & & gasvmr_cfc12, gasvmr_cfc22, gasvmr_ccl4 - real (kind=kind_phys), dimension(npts,nlay),intent(in):: cld_cf - real (kind=kind_phys), dimension(npts,nlay),intent(in),optional:: & + real (kind=kind_phys), dimension(:,:),intent(in):: cld_cf + real (kind=kind_phys), dimension(:,:),intent(in),optional:: & & cld_lwp, cld_ref_liq, cld_iwp, cld_ref_ice, & & cld_rwp, cld_ref_rain, cld_swp, cld_ref_snow, & & cld_od - real (kind=kind_phys), dimension(npts), intent(in) :: sfemis, & + real (kind=kind_phys), dimension(:), intent(in) :: sfemis, & & sfgtmp, de_lgth real (kind=kind_phys), dimension(npts,nlay), intent(in) :: alpha - real (kind=kind_phys), dimension(npts,nlay,nbands),intent(in):: & + real (kind=kind_phys), dimension(:,:,:),intent(in):: & & aeraod, aerssa !mz* HWRF -- OUTPUT from mcica_subcol_lw @@ -661,22 +661,22 @@ subroutine rrtmg_lw_run & !mz ! --- outputs: - real (kind=kind_phys), dimension(npts,nlay), intent(inout) :: hlwc - real (kind=kind_phys), dimension(npts,nlay), intent(inout) :: & + real (kind=kind_phys), dimension(:,:), intent(inout) :: hlwc + real (kind=kind_phys), dimension(:,:), intent(inout) :: & & cldtau - type (topflw_type), dimension(npts), intent(inout) :: topflx - type (sfcflw_type), dimension(npts), intent(inout) :: sfcflx + type (topflw_type), dimension(:), intent(inout) :: topflx + type (sfcflw_type), dimension(:), intent(inout) :: sfcflx character(len=*), intent(out) :: errmsg integer, intent(out) :: errflg !! --- optional outputs: - real (kind=kind_phys), dimension(npts,nlay,nbands),optional, & + real (kind=kind_phys), dimension(:,:,:),optional, & & intent(inout) :: hlwb - real (kind=kind_phys), dimension(npts,nlay), optional, & + real (kind=kind_phys), dimension(:,:), optional, & & intent(inout) :: hlw0 - type (proflw_type), dimension(npts,nlp1), optional, & + type (proflw_type), dimension(:,:), optional, & & intent(inout) :: flxprf logical, intent(in) :: lslwr diff --git a/physics/radsw_main.F90 b/physics/radsw_main.F90 index 77fd61fcc..0f5a8b110 100644 --- a/physics/radsw_main.F90 +++ b/physics/radsw_main.F90 @@ -701,60 +701,60 @@ subroutine rrtmg_sw_run & logical, intent(in) :: lprnt, lsswr - real (kind=kind_phys), dimension(npts,nlp1), intent(in) :: & + real (kind=kind_phys), dimension(:,:), intent(in) :: & & plvl, tlvl - real (kind=kind_phys), dimension(npts,nlay), intent(in) :: & + real (kind=kind_phys), dimension(:,:), intent(in) :: & & plyr, tlyr, qlyr, olyr, dzlyr, delpin - real (kind=kind_phys),dimension(npts),intent(in):: sfcalb_nir_dir - real (kind=kind_phys),dimension(npts),intent(in):: sfcalb_nir_dif - real (kind=kind_phys),dimension(npts),intent(in):: sfcalb_uvis_dir - real (kind=kind_phys),dimension(npts),intent(in):: sfcalb_uvis_dif - - real(kind=kind_phys),dimension(npts,nlay),intent(in)::gasvmr_co2 - real(kind=kind_phys),dimension(npts,nlay),intent(in)::gasvmr_n2o - real(kind=kind_phys),dimension(npts,nlay),intent(in)::gasvmr_ch4 - real(kind=kind_phys),dimension(npts,nlay),intent(in)::gasvmr_o2 - real(kind=kind_phys),dimension(npts,nlay),intent(in)::gasvmr_co - real(kind=kind_phys),dimension(npts,nlay),intent(in)::gasvmr_cfc11 - real(kind=kind_phys),dimension(npts,nlay),intent(in)::gasvmr_cfc12 - real(kind=kind_phys),dimension(npts,nlay),intent(in)::gasvmr_cfc22 - real(kind=kind_phys),dimension(npts,nlay),intent(in)::gasvmr_ccl4 - - real (kind=kind_phys), dimension(npts,nlay),intent(in):: cld_cf - real (kind=kind_phys), dimension(npts,nlay),intent(in),optional:: & + real (kind=kind_phys),dimension(:),intent(in):: sfcalb_nir_dir + real (kind=kind_phys),dimension(:),intent(in):: sfcalb_nir_dif + real (kind=kind_phys),dimension(:),intent(in):: sfcalb_uvis_dir + real (kind=kind_phys),dimension(:),intent(in):: sfcalb_uvis_dif + + real(kind=kind_phys),dimension(:,:),intent(in)::gasvmr_co2 + real(kind=kind_phys),dimension(:,:),intent(in)::gasvmr_n2o + real(kind=kind_phys),dimension(:,:),intent(in)::gasvmr_ch4 + real(kind=kind_phys),dimension(:,:),intent(in)::gasvmr_o2 + real(kind=kind_phys),dimension(:,:),intent(in)::gasvmr_co + real(kind=kind_phys),dimension(:,:),intent(in)::gasvmr_cfc11 + real(kind=kind_phys),dimension(:,:),intent(in)::gasvmr_cfc12 + real(kind=kind_phys),dimension(:,:),intent(in)::gasvmr_cfc22 + real(kind=kind_phys),dimension(:,:),intent(in)::gasvmr_ccl4 + + real (kind=kind_phys), dimension(:,:),intent(in):: cld_cf + real (kind=kind_phys), dimension(:,:),intent(in),optional:: & & cld_lwp, cld_ref_liq, cld_iwp, cld_ref_ice, & & cld_rwp, cld_ref_rain, cld_swp, cld_ref_snow, & & cld_od, cld_ssa, cld_asy - real(kind=kind_phys),dimension(npts,nlay,nbdsw),intent(in)::aeraod - real(kind=kind_phys),dimension(npts,nlay,nbdsw),intent(in)::aerssa - real(kind=kind_phys),dimension(npts,nlay,nbdsw),intent(in)::aerasy + real(kind=kind_phys),dimension(:,:,:),intent(in)::aeraod + real(kind=kind_phys),dimension(:,:,:),intent(in)::aerssa + real(kind=kind_phys),dimension(:,:,:),intent(in)::aerasy real (kind=kind_phys), intent(in) :: cosz(npts), solcon, & & de_lgth(npts) real (kind=kind_phys), dimension(npts,nlay), intent(in) :: alpha ! --- outputs: - real (kind=kind_phys), dimension(npts,nlay), intent(inout) :: hswc - real (kind=kind_phys), dimension(npts,nlay), intent(inout) :: & + real (kind=kind_phys), dimension(:,:), intent(inout) :: hswc + real (kind=kind_phys), dimension(:,:), intent(inout) :: & & cldtau - type (topfsw_type), dimension(npts), intent(inout) :: topflx - type (sfcfsw_type), dimension(npts), intent(inout) :: sfcflx + type (topfsw_type), dimension(:), intent(inout) :: topflx + type (sfcfsw_type), dimension(:), intent(inout) :: sfcflx character(len=*), intent(out) :: errmsg integer, intent(out) :: errflg !! --- optional outputs: - real (kind=kind_phys), dimension(npts,nlay,nbdsw), optional, & + real (kind=kind_phys), dimension(:,:,:), optional, & & intent(inout) :: hswb - real (kind=kind_phys), dimension(npts,nlay), optional, & + real (kind=kind_phys), dimension(:,:), optional, & & intent(inout) :: hsw0 - type (profsw_type), dimension(npts,nlp1), optional, & + type (profsw_type), dimension(:,:), optional, & & intent(inout) :: flxprf - type (cmpfsw_type), dimension(npts), optional, & + type (cmpfsw_type), dimension(:), optional, & & intent(inout) :: fdncmp ! --- locals: diff --git a/physics/rascnv.F90 b/physics/rascnv.F90 index e78570f34..ee58baecd 100644 --- a/physics/rascnv.F90 +++ b/physics/rascnv.F90 @@ -2,6 +2,7 @@ !! This file contains the entire Relaxed Arakawa-Schubert convection !! parameteriztion +!>\defgroup rascnv_schm Relaxed Arakawa-Schubert Convection Scheme module rascnv USE machine , ONLY : kind_phys @@ -103,6 +104,7 @@ module rascnv ! CCPP entry points for gfdl cloud microphysics ! ----------------------------------------------------------------------- +!>\ingroup rascnv_schm !>\brief The subroutine initializes rascnv !! !> \section arg_table_rascnv_init Argument Table @@ -291,6 +293,7 @@ end subroutine rascnv_finalize !! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! +!>\ingroup rascnv_schm !! \section arg_table_rascnv_run Argument Table !! \htmlinclude rascnv_run.html !! @@ -324,41 +327,41 @@ subroutine rascnv_run(IM, k, ntr, dt, dtf & ! ! Implicit none -! - LOGICAL FLIPV ! ! input +! + logical, intent(in) :: flipv ! integer, intent(in) :: im, k, ntr, me, nrcm, ntk, kdt & &, mp_phys, mp_phys_mg - integer, dimension(im) :: kbot, ktop, kcnv, kpbl -! - real(kind=kind_phys), intent(in) :: dxmin, dxinv, ccwf(2) & - &, psauras(2), prauras(2) & - &, wminras(2), dlqf(2) -! - real(kind=kind_phys), dimension(im,k+1) :: prsi, prsik, phii - - real(kind=kind_phys), dimension(im,k) :: tin, qin, uin, vin & - &, prsl, prslk, phil & - - &, ud_mf, dd_mf, dt_mf & - &, rhc, qlcn, qicn, w_upi & - &, cnv_mfd & - &, cnv_dqldt, clcn & - &, cnv_fice, cnv_ndrop & - &, cnv_nice, cf_upi - real(kind=kind_phys), dimension(im) :: area, cdrag & - &, rainc, ddvel - real(kind=kind_phys), dimension(im,nrcm):: rannum - real(kind=kind_phys) ccin(im,k,ntr+2) - real(kind=kind_phys) trcmin(ntr+2) - - real(kind=kind_phys) DT, dtf + integer, dimension(:), intent(out) :: kbot, ktop + integer, dimension(:), intent(inout) :: kcnv + integer, dimension(:), intent(in) :: kpbl +! + real(kind=kind_phys), intent(in) :: dxmin, dxinv, ccwf(:) & + &, psauras(:), prauras(:) & + &, wminras(:), dlqf(:) +! + real(kind=kind_phys), dimension(:,:), intent(in) :: prsi, prsik, phii + + real(kind=kind_phys), dimension(:,:), intent(inout) :: tin, qin, uin, vin + real(kind=kind_phys), dimension(:,:), intent(in) :: prsl, prslk, phil & + &, rhc + real(kind=kind_phys), dimension(:,:), intent(out) :: ud_mf, dd_mf, dt_mf + real(kind=kind_phys), dimension(:,:), intent(inout) :: qlcn, qicn, w_upi & + &, cnv_mfd & + &, cnv_dqldt, clcn & + &, cnv_fice, cnv_ndrop & + &, cnv_nice, cf_upi + real(kind=kind_phys), dimension(:) , intent(in) :: area, cdrag + real(kind=kind_phys), dimension(:) , intent(out) :: rainc, ddvel + real(kind=kind_phys), dimension(:,:), intent(in) :: rannum + real(kind=kind_phys), intent(inout) :: ccin(:,:,:) + real(kind=kind_phys), intent(in) :: dt, dtf ! ! Added for aerosol scavenging for GOCART ! - real(kind=kind_phys), intent(in) :: fscav(ntr) + real(kind=kind_phys), intent(in) :: fscav(:) ! &, ctei_r(im), ctei_rm character(len=*), intent(out) :: errmsg @@ -366,6 +369,7 @@ subroutine rascnv_run(IM, k, ntr, dt, dtf & ! ! locals ! + real(kind=kind_phys) :: trcmin(ntr+2) real(kind=kind_phys), dimension(k) :: toi, qoi, tcu, qcu & &, pcu, clw, cli, qii, qli& &, phi_l, prsm,psjm & @@ -1078,6 +1082,8 @@ subroutine rascnv_run(IM, k, ntr, dt, dtf & ! RETURN end subroutine rascnv_run + +!>\ingroup rascnv_schm SUBROUTINE CLOUD( & & K, KP1, KD, NTRC, KBLMX, kblmn & &, FRACBL, MAX_NEG_BOUY, vsmooth, aw_scal & @@ -2704,6 +2710,7 @@ SUBROUTINE CLOUD( & RETURN end subroutine cloud +!>\ingroup rascnv_schm SUBROUTINE DDRFT( & & K, KP1, KD & &, TLA, ALFIND, wcbase & @@ -3980,6 +3987,7 @@ SUBROUTINE DDRFT( & RETURN end subroutine ddrft +!>\ingroup rascnv_schm SUBROUTINE QSATCN(TT,P,Q,DQDT) ! USE FUNCPHYS , ONLY : fpvs @@ -4011,6 +4019,7 @@ SUBROUTINE QSATCN(TT,P,Q,DQDT) return end subroutine qsatcn +!>\ingroup rascnv_schm SUBROUTINE ANGRAD(PRES, ALM, AL2, TLA) implicit none @@ -4061,6 +4070,7 @@ SUBROUTINE ANGRAD(PRES, ALM, AL2, TLA) RETURN end subroutine angrad +!>\ingroup rascnv_schm SUBROUTINE SETQRP implicit none @@ -4085,6 +4095,7 @@ SUBROUTINE SETQRP RETURN end subroutine setqrp +!>\ingroup rascnv_schm SUBROUTINE QRABF(QRP,QRAF,QRBF) implicit none ! @@ -4101,6 +4112,7 @@ SUBROUTINE QRABF(QRP,QRAF,QRBF) RETURN end subroutine qrabf +!>\ingroup rascnv_schm SUBROUTINE SETVTP implicit none @@ -4121,6 +4133,7 @@ SUBROUTINE SETVTP RETURN end subroutine setvtp ! +!>\ingroup rascnv_schm real(kind=kind_phys) FUNCTION QRPF(QRP) ! implicit none @@ -4137,6 +4150,7 @@ real(kind=kind_phys) FUNCTION QRPF(QRP) RETURN end function qrpf +!>\ingroup rascnv_schm real(kind=kind_phys) FUNCTION VTPF(ROR) ! implicit none @@ -4151,6 +4165,7 @@ real(kind=kind_phys) FUNCTION VTPF(ROR) RETURN end function vtpf +!>\ingroup rascnv_schm real(kind=kind_phys) FUNCTION CLF(PRATE) ! implicit none diff --git a/physics/rayleigh_damp.f b/physics/rayleigh_damp.f index 76d15777b..70ed997a2 100644 --- a/physics/rayleigh_damp.f +++ b/physics/rayleigh_damp.f @@ -69,9 +69,9 @@ subroutine rayleigh_damp_run ( & logical,intent(in) :: lsidea,ldiag3d integer,intent(in) :: im, km,levr real(kind=kind_phys),intent(in) :: DT, CP, PRSLRD0, ral_ts - real(kind=kind_phys),intent(in) :: pgr(im), PRSL(IM,KM) - real(kind=kind_phys),intent(in) :: U1(IM,KM), V1(IM,KM) - real(kind=kind_phys),intent(inout) :: A(IM,KM), B(IM,KM), C(IM,KM) + real(kind=kind_phys),intent(in) :: pgr(:), PRSL(:,:) + real(kind=kind_phys),intent(in) :: U1(:,:), V1(:,:) + real(kind=kind_phys),intent(inout) :: A(:,:), B(:,:), C(:,:) real(kind=kind_phys),optional, intent(inout) :: dtend(:,:,:) integer, intent(in) :: dtidx(:,:), & & index_of_process_rayleigh_damping, index_of_temperature, & diff --git a/physics/rrtmg_lw_cloud_optics.F90 b/physics/rrtmg_lw_cloud_optics.F90 index 02f32096a..1dd225514 100644 --- a/physics/rrtmg_lw_cloud_optics.F90 +++ b/physics/rrtmg_lw_cloud_optics.F90 @@ -4,22 +4,22 @@ module mo_rrtmg_lw_cloud_optics implicit none - ! Parameter used for RRTMG cloud-optics + !< Parameter used for RRTMG cloud-optics integer,parameter :: & nBandsLW_RRTMG = 16 - ! ipat is bands index for ebert & curry ice cloud (for iflagice=1) + !< ipat is bands index for ebert & curry ice cloud (for iflagice=1) integer,dimension(nBandsLW_RRTMG),parameter :: & ipat = (/ 1, 2, 3, 3, 3, 4, 4, 4, 5, 5, 5, 5, 5, 5, 5, 5 /) real(kind_phys), parameter :: & - absrain = 0.33e-3, & ! Rain drop absorption coefficient \f$(m^{2}/g)\f$ . - abssnow0 = 1.5, & ! Snow flake absorption coefficient (micron), fu coeff - abssnow1 = 2.34e-3 ! Snow flake absorption coefficient \f$(m^{2}/g)\f$, ncar coef + absrain = 0.33e-3, & !< Rain drop absorption coefficient \f$(m^{2}/g)\f$ . + abssnow0 = 1.5, & !< Snow flake absorption coefficient (micron), fu coeff + abssnow1 = 2.34e-3 !< Snow flake absorption coefficient \f$(m^{2}/g)\f$, ncar coef - ! Reset diffusivity angle for Bands 2-3 and 5-9 to vary (between 1.50 - ! and 1.80) as a function of total column water vapor. the function - ! has been defined to minimize flux and cooling rate errors in these bands - ! over a wide range of precipitable water values. - ! *NOTE* This is done in GFS_rrtmgp_lw_pre.F90:_run() + !< Reset diffusivity angle for Bands 2-3 and 5-9 to vary (between 1.50 + !! and 1.80) as a function of total column water vapor. the function + !! has been defined to minimize flux and cooling rate errors in these bands + !! over a wide range of precipitable water values. + !! *NOTE* This is done in GFS_rrtmgp_lw_pre.F90:_run() real (kind_phys), dimension(nbandsLW_RRTMG) :: & a0 = (/ 1.66, 1.55, 1.58, 1.66, 1.54, 1.454, 1.89, 1.33, & 1.668, 1.66, 1.66, 1.66, 1.66, 1.66, 1.66, 1.66 /), & @@ -28,11 +28,11 @@ module mo_rrtmg_lw_cloud_optics a2 = (/ 0.00, -12.0, -11.7, 0.00, -0.72, -0.243, 0.19, -0.062, & 0.414, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00 /) real(kind_phys),parameter :: & - diffusivityLow = 1.50, & ! Minimum diffusivity angle for bands 2-3 and 5-9 - diffusivityHigh = 1.80, & ! Maximum diffusivity angle for bands 2-3 and 5-9 - diffusivityB1410 = 1.66 ! Diffusivity for bands 1, 4, and 10 + diffusivityLow = 1.50, & !< Minimum diffusivity angle for bands 2-3 and 5-9 + diffusivityHigh = 1.80, & !< Maximum diffusivity angle for bands 2-3 and 5-9 + diffusivityB1410 = 1.66 !< Diffusivity for bands 1, 4, and 10 - ! RRTMG LW cloud property coefficients + !< RRTMG LW cloud property coefficients real(kind_phys) , dimension(58,nBandsLW_RRTMG),parameter :: & absliq1 = reshape(source=(/ & 1.64047e-03, 6.90533e-02, 7.72017e-02, 7.78054e-02, 7.69523e-02, & !1 @@ -557,26 +557,26 @@ subroutine rrtmg_lw_cloud_optics(ncol, nlay, nBandsLW, cld_lwp, cld_ref_liq, cld ilwcice, tau_cld, tau_precip) ! Inputs integer,intent(in) :: & - nBandsLW, & ! Number of spectral bands - ncol, & ! Number of horizontal gridpoints - nlay, & ! Number of vertical layers + nBandsLW, & !< Number of spectral bands + ncol, & !< Number of horizontal gridpoints + nlay, & !< Number of vertical layers ilwcliq, & ! ilwcice real(kind_phys), dimension(ncol,nlay), intent(in) :: & - cld_frac, & ! Cloud-fraction (1) - cld_lwp, & ! Cloud liquid water path (g/m2) - cld_ref_liq, & ! Effective radius (liquid) (micron) - cld_iwp, & ! Cloud ice water path (g/m2) - cld_ref_ice, & ! Effective radius (ice) (micron) - cld_rwp, & ! Cloud rain water path (g/m2) - cld_ref_rain, & ! Effective radius (rain-drop) (micron) - cld_swp, & ! Cloud snow-water path (g/m2) - cld_ref_snow ! Effective radius (snow-flake) (micron) + cld_frac, & !< Cloud-fraction (1) + cld_lwp, & !< Cloud liquid water path (g/m2) + cld_ref_liq, & !< Effective radius (liquid) (micron) + cld_iwp, & !< Cloud ice water path (g/m2) + cld_ref_ice, & !< Effective radius (ice) (micron) + cld_rwp, & !< Cloud rain water path (g/m2) + cld_ref_rain, & !< Effective radius (rain-drop) (micron) + cld_swp, & !< Cloud snow-water path (g/m2) + cld_ref_snow !< Effective radius (snow-flake) (micron) ! Outputs real(kind_phys),dimension(ncol,nlay,nBandsLW),intent(out) :: & - tau_cld, & ! Cloud optical-depth (1) - tau_precip ! Precipitation optical-depth (1) + tau_cld, & !< Cloud optical-depth (1) + tau_precip !< Precipitation optical-depth (1) ! Local variables integer :: ij,ik,ib,index,ia diff --git a/physics/rrtmg_lw_post.F90 b/physics/rrtmg_lw_post.F90 index bb84c2137..39601b269 100644 --- a/physics/rrtmg_lw_post.F90 +++ b/physics/rrtmg_lw_post.F90 @@ -1,5 +1,5 @@ -!>\file rrtmg_lw_post -!!This file contains +!>\file rrtmg_lw_post.F90 +!!This file contains GFS RRTMG scheme post. module rrtmg_lw_post contains diff --git a/physics/rrtmg_lw_pre.F90 b/physics/rrtmg_lw_pre.F90 index 276a0a5bd..0494e283f 100644 --- a/physics/rrtmg_lw_pre.F90 +++ b/physics/rrtmg_lw_pre.F90 @@ -22,10 +22,10 @@ subroutine rrtmg_lw_pre_run (im, lslwr, xlat, xlon, slmsk, snowd, sncovr,& integer, intent(in) :: im logical, intent(in) :: lslwr - real(kind=kind_phys), dimension(im), intent(in) :: xlat, xlon, slmsk, & + real(kind=kind_phys), dimension(:), intent(in) :: xlat, xlon, slmsk, & snowd, sncovr, zorl, hprime, tsfg, tsfa real(kind=kind_phys), dimension(:), intent(in) :: emiss - real(kind=kind_phys), dimension(im), intent(out) :: semis + real(kind=kind_phys), dimension(:), intent(out) :: semis character(len=*), intent(out) :: errmsg integer, intent(out) :: errflg diff --git a/physics/rrtmg_sw_post.F90 b/physics/rrtmg_sw_post.F90 index d9946f695..a5906fb75 100644 --- a/physics/rrtmg_sw_post.F90 +++ b/physics/rrtmg_sw_post.F90 @@ -1,5 +1,5 @@ -!>\file rrtmg_sw_post -!! This file contains +!>\file rrtmg_sw_post.F90 +!! This file contains GFS RRTMG scheme post. module rrtmg_sw_post contains @@ -26,20 +26,20 @@ subroutine rrtmg_sw_post_run (im, levr, levs, ltp, nday, lm, kd, lsswr, & integer, intent(in) :: im, levr, levs, & ltp, nday, lm, kd logical, intent(in) :: lsswr, swhtr - real(kind=kind_phys), dimension(im), intent(in) :: sfcalb1, sfcalb2, & + real(kind=kind_phys), dimension(:), intent(in) :: sfcalb1, sfcalb2, & sfcalb3, sfcalb4 - real(kind=kind_phys), dimension(im, levr+LTP), intent(in) :: htswc, htsw0 + real(kind=kind_phys), dimension(:,:), intent(in) :: htswc, htsw0 - real(kind=kind_phys), dimension(im), intent(inout) :: nirbmdi, nirdfdi, & + real(kind=kind_phys), dimension(:), intent(inout) :: nirbmdi, nirdfdi, & visbmdi, visdfdi, & nirbmui, nirdfui, & visbmui, visdfui, & sfcdsw, sfcnsw - real(kind=kind_phys), dimension(im,levs), intent(inout) :: htrsw, swhc + real(kind=kind_phys), dimension(:,:), intent(inout) :: htrsw, swhc - type(cmpfsw_type), dimension(im), intent(inout) :: scmpsw - type(sfcfsw_type), dimension(im), intent(inout) :: sfcfsw - type(topfsw_type), dimension(im), intent(inout) :: topfsw + type(cmpfsw_type), dimension(:), intent(inout) :: scmpsw + type(sfcfsw_type), dimension(:), intent(inout) :: sfcfsw + type(topfsw_type), dimension(:), intent(inout) :: topfsw character(len=*), intent(out) :: errmsg integer, intent(out) :: errflg diff --git a/physics/rrtmg_sw_pre.F90 b/physics/rrtmg_sw_pre.F90 index b281d42a7..2ea7de3d6 100644 --- a/physics/rrtmg_sw_pre.F90 +++ b/physics/rrtmg_sw_pre.F90 @@ -27,9 +27,9 @@ subroutine rrtmg_sw_pre_run (im, lndp_type, n_var_lndp, lsswr, lndp_var_list, ln character(len=3) , dimension(:), intent(in) :: lndp_var_list logical, intent(in) :: lsswr real(kind=kind_phys), dimension(:), intent(in) :: lndp_prt_list - real(kind=kind_phys), dimension(im), intent(in) :: tsfg, tsfa, coszen - real(kind=kind_phys), dimension(im), intent(in) :: alb1d - real(kind=kind_phys), dimension(im), intent(in) :: slmsk, snowd, & + real(kind=kind_phys), dimension(:), intent(in) :: tsfg, tsfa, coszen + real(kind=kind_phys), dimension(:), intent(in) :: alb1d + real(kind=kind_phys), dimension(:), intent(in) :: slmsk, snowd, & sncovr, snoalb, & zorl, hprime, & alvsf, alnsf, & @@ -38,10 +38,10 @@ subroutine rrtmg_sw_pre_run (im, lndp_type, n_var_lndp, lsswr, lndp_var_list, ln fice, tisfc real(kind=kind_phys), dimension(:), intent(in) :: albdvis, albdnir, & albivis, albinir - real(kind=kind_phys), dimension(im), intent(inout) :: sfalb + real(kind=kind_phys), dimension(:), intent(inout) :: sfalb integer, intent(out) :: nday - integer, dimension(im), intent(out) :: idxday - real(kind=kind_phys), dimension(im), intent(out) :: sfcalb1, sfcalb2, & + integer, dimension(:), intent(out) :: idxday + real(kind=kind_phys), dimension(:), intent(out) :: sfcalb1, sfcalb2, & sfcalb3, sfcalb4 character(len=*), intent(out) :: errmsg integer, intent(out) :: errflg diff --git a/physics/rrtmgp_aux.F90 b/physics/rrtmgp_aux.F90 deleted file mode 100644 index d39705e7a..000000000 --- a/physics/rrtmgp_aux.F90 +++ /dev/null @@ -1,23 +0,0 @@ -module rrtmgp_aux - use machine, only: & - kind_phys ! Working type - implicit none - - real(kind_phys) :: & - rrtmgp_minP, & ! Minimum pressure allowed in RRTMGP - rrtmgp_minT ! Minimum temperature allowed in RRTMGP -contains - ! ######################################################################################### - ! SUBROUTINE check_error_msg - ! ######################################################################################### - subroutine check_error_msg(routine_name, error_msg) - character(len=*), intent(in) :: & - error_msg, routine_name - - if(error_msg /= "") then - print*,"ERROR("//trim(routine_name)//"): " - print*,trim(error_msg) - return - end if - end subroutine check_error_msg -end module rrtmgp_aux diff --git a/physics/rrtmgp_lw_aerosol_optics.F90 b/physics/rrtmgp_lw_aerosol_optics.F90 index b8a21e85a..df0e77163 100644 --- a/physics/rrtmgp_lw_aerosol_optics.F90 +++ b/physics/rrtmgp_lw_aerosol_optics.F90 @@ -2,7 +2,7 @@ module rrtmgp_lw_aerosol_optics use machine, only: kind_phys use mo_gas_optics_rrtmgp, only: ty_gas_optics_rrtmgp use mo_optical_props, only: ty_optical_props_1scl - use rrtmgp_aux, only: check_error_msg + use radiation_tools, only: check_error_msg use rrtmgp_sw_gas_optics, only: sw_gas_props use rrtmgp_lw_gas_optics, only: lw_gas_props use module_radiation_aerosols, only: & @@ -42,26 +42,26 @@ subroutine rrtmgp_lw_aerosol_optics_run(doLWrad, nCol, nLev, nTracer, nTracerAer nLev, & ! Number of vertical layers nTracer, & ! Number of tracers nTracerAer ! Number of aerosol tracers - real(kind_phys), dimension(nCol), intent(in) :: & + real(kind_phys), dimension(:), intent(in) :: & lon, & ! Longitude lat, & ! Latitude lsmask ! Land/sea/sea-ice mask - real(kind_phys), dimension(nCol,Nlev),intent(in) :: & + real(kind_phys), dimension(:,:),intent(in) :: & p_lay, & ! Pressure @ layer-centers (Pa) tv_lay, & ! Virtual-temperature @ layer-centers (K) relhum, & ! Relative-humidity @ layer-centers p_lk ! Exner function @ layer-centers (1) - real(kind_phys), dimension(nCol, nLev, nTracer),intent(in) :: & + real(kind_phys), dimension(:,:, :),intent(in) :: & tracer ! trace gas concentrations - real(kind_phys), dimension(nCol, nLev, nTracerAer),intent(in) :: & + real(kind_phys), dimension(:,:, :),intent(in) :: & aerfld ! aerosol input concentrations - real(kind_phys), dimension(nCol,nLev+1),intent(in) :: & + real(kind_phys), dimension(:,:),intent(in) :: & p_lev ! Pressure @ layer-interfaces (Pa) ! Outputs - real(kind_phys), dimension(nCol,NSPC1), intent(inout) :: & + real(kind_phys), dimension(:,:), intent(inout) :: & aerodp ! Vertical integrated optical depth for various aerosol species - type(ty_optical_props_1scl),intent(out) :: & + type(ty_optical_props_1scl),intent(inout) :: & lw_optical_props_aerosol ! RRTMGP DDT: Longwave aerosol optical properties (tau) integer, intent(out) :: & errflg ! CCPP error flag @@ -73,6 +73,7 @@ subroutine rrtmgp_lw_aerosol_optics_run(doLWrad, nCol, nLev, nTracer, nTracerAer aerosolslw ! real(kind_phys), dimension(nCol, nLev, sw_gas_props%get_nband(), NF_AESW) :: & aerosolssw + integer :: iBand ! Initialize CCPP error handling variables errmsg = '' @@ -81,16 +82,18 @@ subroutine rrtmgp_lw_aerosol_optics_run(doLWrad, nCol, nLev, nTracer, nTracerAer if (.not. doLWrad) return ! Call module_radiation_aerosols::setaer(),to setup aerosols property profile - call setaer(p_lev, p_lay, p_lk, tv_lay, relhum, lsmask, tracer, aerfld, lon, lat, ncol, nLev, & + call setaer(p_lev/100., p_lay/100., p_lk, tv_lay, relhum, lsmask, tracer, aerfld, lon, lat, ncol, nLev, & nLev+1, .true., .true., aerosolssw, aerosolslw, aerodp) - ! Allocate RRTMGP DDT: Aerosol optics [nCol,nlev,nBands] - call check_error_msg('rrtmgp_lw_aerosol_optics_run',lw_optical_props_aerosol%alloc_1scl( & - ncol, nlev, lw_gas_props%get_band_lims_wavenumber())) - ! Copy aerosol optical information to RRTMGP DDT lw_optical_props_aerosol%tau = aerosolslw(:,:,:,1) * (1. - aerosolslw(:,:,:,2)) + lw_optical_props_aerosol%band_lims_wvn = lw_gas_props%get_band_lims_wavenumber() + do iBand=1,lw_gas_props%get_nband() + lw_optical_props_aerosol%band2gpt(1:2,iBand) = iBand + lw_optical_props_aerosol%gpt2band(iBand) = iBand + end do + end subroutine rrtmgp_lw_aerosol_optics_run ! ######################################################################################### diff --git a/physics/rrtmgp_lw_aerosol_optics.meta b/physics/rrtmgp_lw_aerosol_optics.meta index 4aa1e9e9e..ad68fd546 100644 --- a/physics/rrtmgp_lw_aerosol_optics.meta +++ b/physics/rrtmgp_lw_aerosol_optics.meta @@ -1,7 +1,7 @@ [ccpp-table-properties] name = rrtmgp_lw_aerosol_optics type = scheme - dependencies = iounitdef.f,machine.F,radiation_aerosols.f,rrtmgp_aux.F90 + dependencies = iounitdef.f,machine.F,radiation_aerosols.f,radiation_tools.F90 ######################################################################## [ccpp-arg-table] @@ -152,7 +152,7 @@ units = DDT dimensions = () type = ty_optical_props_1scl - intent = out + intent = inout optional = F [errmsg] standard_name = ccpp_error_message diff --git a/physics/rrtmgp_lw_cloud_optics.F90 b/physics/rrtmgp_lw_cloud_optics.F90 index a59fe42a9..7be8f7865 100644 --- a/physics/rrtmgp_lw_cloud_optics.F90 +++ b/physics/rrtmgp_lw_cloud_optics.F90 @@ -5,7 +5,7 @@ module rrtmgp_lw_cloud_optics use mo_optical_props, only: ty_optical_props_1scl, ty_optical_props_2str use mo_rrtmg_lw_cloud_optics, only: rrtmg_lw_cloud_optics use rrtmgp_lw_gas_optics, only: lw_gas_props - use rrtmgp_aux, only: check_error_msg + use radiation_tools, only: check_error_msg use netcdf #ifdef MPI use mpi @@ -70,24 +70,24 @@ module rrtmgp_lw_cloud_optics !! \section arg_table_rrtmgp_lw_cloud_optics_init !! \htmlinclude rrtmgp_lw_cloud_optics.html !! - subroutine rrtmgp_lw_cloud_optics_init(doG_cldoptics, & - doGP_cldoptics_PADE, doGP_cldoptics_LUT, nrghice, rrtmgp_root_dir, & - rrtmgp_lw_file_clouds, mpicomm, mpirank, mpiroot, errmsg, errflg) + subroutine rrtmgp_lw_cloud_optics_init(nrghice, mpicomm, mpirank, mpiroot, & + doG_cldoptics, doGP_cldoptics_PADE, doGP_cldoptics_LUT, rrtmgp_root_dir, & + rrtmgp_lw_file_clouds, errmsg, errflg) ! Inputs logical, intent(in) :: & - doG_cldoptics, & ! Use legacy RRTMG cloud-optics? - doGP_cldoptics_PADE, & ! Use RRTMGP cloud-optics: PADE approximation? - doGP_cldoptics_LUT ! Use RRTMGP cloud-optics: LUTs? + doG_cldoptics, & ! Use legacy RRTMG cloud-optics? + doGP_cldoptics_PADE, & ! Use RRTMGP cloud-optics: PADE approximation? + doGP_cldoptics_LUT ! Use RRTMGP cloud-optics: LUTs? integer, intent(inout) :: & - nrghice ! Number of ice-roughness categories - integer, intent(in) :: & - mpicomm, & ! MPI communicator - mpirank, & ! Current MPI rank - mpiroot ! Master MPI rank + nrghice ! Number of ice-roughness categories + integer, intent(in) :: & + mpicomm, & ! MPI communicator + mpirank, & ! Current MPI rank + mpiroot ! Master MPI rank character(len=128),intent(in) :: & - rrtmgp_root_dir, & ! RTE-RRTMGP root directory - rrtmgp_lw_file_clouds ! RRTMGP file containing coefficients used to compute clouds optical properties + rrtmgp_root_dir, & ! RTE-RRTMGP root directory + rrtmgp_lw_file_clouds ! RRTMGP file containing coefficients used to compute clouds optical properties ! Outputs character(len=*), intent(out) :: & @@ -422,7 +422,7 @@ subroutine rrtmgp_lw_cloud_optics_run(doLWrad, doG_cldoptics, icliq_lw, icice_lw errmsg ! CCPP error message integer, intent(out) :: & errflg ! CCPP error flag - type(ty_optical_props_2str),intent(out) :: & + type(ty_optical_props_2str),intent(inout) :: & lw_optical_props_cloudsByBand, & ! RRTMGP DDT: Longwave optical properties in each band (clouds) lw_optical_props_precipByBand ! RRTMGP DDT: Longwave optical properties in each band (precipitation) real(kind_phys), dimension(ncol,nLev), intent(inout) :: & @@ -444,15 +444,18 @@ subroutine rrtmgp_lw_cloud_optics_run(doLWrad, doG_cldoptics, icliq_lw, icice_lw if (.not. doLWrad) return + lw_optical_props_cloudsByBand%band_lims_wvn = lw_gas_props%get_band_lims_wavenumber() + lw_optical_props_precipByBand%band_lims_wvn = lw_gas_props%get_band_lims_wavenumber() + do iBand=1,lw_gas_props%get_nband() + lw_optical_props_cloudsByBand%band2gpt(1:2,iBand) = iBand + lw_optical_props_cloudsByBand%band2gpt(1:2,iBand) = iBand + lw_optical_props_precipByBand%gpt2band(iBand) = iBand + lw_optical_props_precipByBand%gpt2band(iBand) = iBand + end do + ! Compute cloud-optics for RTE. if (doGP_cldoptics_PADE .or. doGP_cldoptics_LUT) then - call check_error_msg('rrtmgp_lw_cloud_optics_run',lw_optical_props_cloudsByBand%alloc_2str(& - ncol, nLev, lw_cloud_props%get_band_lims_wavenumber())) - lw_optical_props_cloudsByBand%tau(:,:,:) = 0._kind_phys - call check_error_msg('rrtmgp_lw_cloud_optics_run',lw_optical_props_precipByBand%alloc_2str(& - ncol, nLev, lw_cloud_props%get_band_lims_wavenumber())) - lw_optical_props_precipByBand%tau(:,:,:) = 0._kind_phys - + ! i) RRTMGP cloud-optics. call check_error_msg('rrtmgp_lw_cloud_optics_run',lw_cloud_props%cloud_optics(& cld_lwp, & ! IN - Cloud liquid water path (g/m2) @@ -482,12 +485,6 @@ subroutine rrtmgp_lw_cloud_optics_run(doLWrad, doG_cldoptics, icliq_lw, icice_lw enddo endif if (doG_cldoptics) then - call check_error_msg('rrtmgp_lw_cloud_optics_run',lw_optical_props_cloudsByBand%alloc_2str(& - ncol, nLev, lw_gas_props%get_band_lims_wavenumber())) - lw_optical_props_cloudsByBand%tau(:,:,:) = 0._kind_phys - call check_error_msg('rrtmgp_lw_cloud_optics_run',lw_optical_props_precipByBand%alloc_2str(& - ncol, nLev, lw_gas_props%get_band_lims_wavenumber())) - lw_optical_props_precipByBand%tau(:,:,:) = 0._kind_phys ! ii) RRTMG cloud-optics. if (any(cld_frac .gt. 0)) then call rrtmg_lw_cloud_optics(ncol, nLev, nbndsGPlw, cld_lwp, cld_reliq, cld_iwp,& diff --git a/physics/rrtmgp_lw_cloud_optics.meta b/physics/rrtmgp_lw_cloud_optics.meta index 14852f3a0..acdb8e8c8 100644 --- a/physics/rrtmgp_lw_cloud_optics.meta +++ b/physics/rrtmgp_lw_cloud_optics.meta @@ -1,7 +1,7 @@ [ccpp-table-properties] name = rrtmgp_lw_cloud_optics type = scheme - dependencies = machine.F,rrtmg_lw_cloud_optics.F90,rrtmgp_aux.F90 + dependencies = machine.F,rrtmg_lw_cloud_optics.F90,radiation_tools.F90 ######################################################################## [ccpp-arg-table] @@ -306,7 +306,7 @@ units = DDT dimensions = () type = ty_optical_props_2str - intent = out + intent = inout optional = F [lw_optical_props_precipByBand] standard_name = longwave_optical_properties_for_precipitation_by_band @@ -314,7 +314,7 @@ units = DDT dimensions = () type = ty_optical_props_2str - intent = out + intent = inout optional = F [errmsg] standard_name = ccpp_error_message diff --git a/physics/rrtmgp_lw_cloud_sampling.F90 b/physics/rrtmgp_lw_cloud_sampling.F90 index 8274dbd13..0f4459487 100644 --- a/physics/rrtmgp_lw_cloud_sampling.F90 +++ b/physics/rrtmgp_lw_cloud_sampling.F90 @@ -4,7 +4,7 @@ module rrtmgp_lw_cloud_sampling use mo_optical_props, only: ty_optical_props_2str use rrtmgp_sampling, only: sampled_mask, draw_samples use mersenne_twister, only: random_setseed, random_number, random_stat - use rrtmgp_aux, only: check_error_msg + use radiation_tools, only: check_error_msg use rrtmgp_lw_gas_optics, only: lw_gas_props use netcdf @@ -84,12 +84,12 @@ subroutine rrtmgp_lw_cloud_sampling_run(doLWrad, nCol, nLev, ipsdlw0, icseed_lw, errmsg ! CCPP error message integer, intent(out) :: & errflg ! CCPP error code - type(ty_optical_props_2str),intent(out) :: & + type(ty_optical_props_2str),intent(inout) :: & lw_optical_props_clouds, & ! RRTMGP DDT: Shortwave optical properties by spectral point (clouds) lw_optical_props_precip ! RRTMGP DDT: Shortwave optical properties by spectral point (precipitation) ! Local variables - integer :: iCol, iLay + integer :: iCol, iLay, iBand integer,dimension(ncol) :: ipseed_lw type(random_stat) :: rng_stat real(kind_phys), dimension(lw_gas_props%get_ngpt(),nLev,ncol) :: rng3D,rng3D2 @@ -106,12 +106,11 @@ subroutine rrtmgp_lw_cloud_sampling_run(doLWrad, nCol, nLev, ipsdlw0, icseed_lw, ! #################################################################################### ! First sample the clouds... ! #################################################################################### - - ! Allocate space RRTMGP DDTs [nCol,nLev,nGpt] - call check_error_msg('rrtmgp_lw_cloud_sampling_run',& - lw_optical_props_clouds%alloc_2str(nCol, nLev, lw_gas_props)) - lw_optical_props_clouds%tau(:,:,:) = 0._kind_phys - lw_optical_props_clouds%ssa(:,:,:) = 0._kind_phys + lw_optical_props_clouds%band2gpt = lw_gas_props%get_band_lims_gpoint() + lw_optical_props_clouds%band_lims_wvn = lw_gas_props%get_band_lims_wavenumber() + do iBand=1,lw_gas_props%get_nband() + lw_optical_props_clouds%gpt2band(lw_optical_props_clouds%band2gpt(1,iBand):lw_optical_props_clouds%band2gpt(2,iBand)) = iBand + end do ! Change random number seed value for each radiation invocation (isubc_lw =1 or 2). if(isubc_lw == 1) then ! advance prescribed permutation seed @@ -176,13 +175,12 @@ subroutine rrtmgp_lw_cloud_sampling_run(doLWrad, nCol, nLev, ipsdlw0, icseed_lw, ! #################################################################################### ! Next sample the precipitation... ! #################################################################################### - - ! Allocate space RRTMGP DDTs [nCol,nLev,nGpt] - call check_error_msg('rrtmgp_lw_cloud_sampling_run',& - lw_optical_props_precip%alloc_2str(nCol, nLev, lw_gas_props)) - lw_optical_props_precip%tau(:,:,:) = 0._kind_phys - lw_optical_props_precip%ssa(:,:,:) = 0._kind_phys - + lw_optical_props_precip%band2gpt = lw_gas_props%get_band_lims_gpoint() + lw_optical_props_precip%band_lims_wvn = lw_gas_props%get_band_lims_wavenumber() + do iBand=1,lw_gas_props%get_nband() + lw_optical_props_precip%gpt2band(lw_optical_props_precip%band2gpt(1,iBand):lw_optical_props_precip%band2gpt(2,iBand)) = iBand + end do + ! Change random number seed value for each radiation invocation (isubc_lw =1 or 2). if(isubc_lw == 1) then ! advance prescribed permutation seed do iCol = 1, ncol diff --git a/physics/rrtmgp_lw_cloud_sampling.meta b/physics/rrtmgp_lw_cloud_sampling.meta index 4e54d14b0..aa7ef17f6 100644 --- a/physics/rrtmgp_lw_cloud_sampling.meta +++ b/physics/rrtmgp_lw_cloud_sampling.meta @@ -1,7 +1,7 @@ [ccpp-table-properties] name = rrtmgp_lw_cloud_sampling type = scheme - dependencies = machine.F,mersenne_twister.f,physparam.f,rrtmgp_sampling.F90,rrtmgp_aux.F90 + dependencies = machine.F,mersenne_twister.f,physparam.f,rrtmgp_sampling.F90,radiation_tools.F90 ######################################################################## [ccpp-arg-table] @@ -207,7 +207,7 @@ units = DDT dimensions = () type = ty_optical_props_2str - intent = out + intent = inout optional = F [lw_optical_props_precip] standard_name = longwave_optical_properties_for_precipitation @@ -215,7 +215,7 @@ units = DDT dimensions = () type = ty_optical_props_2str - intent = out + intent = inout optional = F [errmsg] standard_name = ccpp_error_message diff --git a/physics/rrtmgp_lw_gas_optics.F90 b/physics/rrtmgp_lw_gas_optics.F90 index ac3a8d7f0..a116ad772 100644 --- a/physics/rrtmgp_lw_gas_optics.F90 +++ b/physics/rrtmgp_lw_gas_optics.F90 @@ -5,8 +5,7 @@ module rrtmgp_lw_gas_optics use mo_gas_concentrations, only: ty_gas_concs use mo_source_functions, only: ty_source_func_lw use mo_optical_props, only: ty_optical_props_1scl - use mo_compute_bc, only: compute_bc - use rrtmgp_aux, only: check_error_msg + use radiation_tools, only: check_error_msg use GFS_rrtmgp_pre, only: active_gases_array use netcdf #ifdef MPI @@ -76,8 +75,8 @@ module rrtmgp_lw_gas_optics !! \section arg_table_rrtmgp_lw_gas_optics_init !! \htmlinclude rrtmgp_lw_gas_optics_init.html !! - subroutine rrtmgp_lw_gas_optics_init(rrtmgp_root_dir, rrtmgp_lw_file_gas, & - gas_concentrations, mpicomm, mpirank, mpiroot, minGPpres, minGPtemp, errmsg, errflg) + subroutine rrtmgp_lw_gas_optics_init(rrtmgp_root_dir, rrtmgp_lw_file_gas, mpicomm, & + mpirank, mpiroot, gas_concentrations, minGPpres, minGPtemp, errmsg, errflg) ! Inputs type(ty_gas_concs), intent(inout) :: & @@ -446,7 +445,7 @@ subroutine rrtmgp_lw_gas_optics_init(rrtmgp_root_dir, rrtmgp_lw_file_gas, scaling_gas_lowerLW, scaling_gas_upperLW, scale_by_complement_lowerLW, & scale_by_complement_upperLW, kminor_start_lowerLW, kminor_start_upperLW, totplnkLW,& planck_fracLW, rayl_lowerLW, rayl_upperLW, optimal_angle_fitLW)) - + ! The minimum pressure allowed in GP RTE calculations. Used to bound uppermost layer ! temperature (GFS_rrtmgp_pre.F90) minGPpres = lw_gas_props%get_press_min() @@ -485,10 +484,13 @@ subroutine rrtmgp_lw_gas_optics_run(doLWrad, nCol, nLev, p_lay, p_lev, t_lay, t_ errmsg ! CCPP error message integer, intent(out) :: & errflg ! CCPP error code - type(ty_optical_props_1scl),intent(out) :: & + type(ty_optical_props_1scl),intent(inout) :: & lw_optical_props_clrsky ! RRTMGP DDT: longwave clear-sky radiative properties - type(ty_source_func_lw),intent(out) :: & + type(ty_source_func_lw),intent(inout) :: & sources ! RRTMGP DDT: longwave source functions + + ! Local + integer :: ii ! Initialize CCPP error handling variables errmsg = '' @@ -496,10 +498,15 @@ subroutine rrtmgp_lw_gas_optics_run(doLWrad, nCol, nLev, p_lay, p_lev, t_lay, t_ if (.not. doLWrad) return - call check_error_msg('rrtmgp_lw_gas_optics_run',& - lw_optical_props_clrsky%alloc_1scl(ncol, nLev, lw_gas_props)) - call check_error_msg('rrtmgp_lw_gas_optics_run',& - sources%alloc(ncol, nLev, lw_gas_props)) + ! Copy spectral information into GP DDTs. + lw_optical_props_clrsky%band2gpt = lw_gas_props%get_band_lims_gpoint() + sources%band2gpt = lw_gas_props%get_band_lims_gpoint() + sources%band_lims_wvn = lw_gas_props%get_band_lims_wavenumber() + lw_optical_props_clrsky%band_lims_wvn = lw_gas_props%get_band_lims_wavenumber() + do ii=1,nbndsLW + lw_optical_props_clrsky%gpt2band(band2gptLW(1,ii):band2gptLW(2,ii)) = ii + sources%gpt2band(band2gptLW(1,ii):band2gptLW(2,ii)) = ii + end do ! Gas-optics call check_error_msg('rrtmgp_lw_gas_optics_run',lw_gas_props%gas_optics(& diff --git a/physics/rrtmgp_lw_gas_optics.meta b/physics/rrtmgp_lw_gas_optics.meta index 92e35e06f..c92567e14 100644 --- a/physics/rrtmgp_lw_gas_optics.meta +++ b/physics/rrtmgp_lw_gas_optics.meta @@ -1,8 +1,7 @@ [ccpp-table-properties] name = rrtmgp_lw_gas_optics type = scheme - dependencies = machine.F,rte-rrtmgp/extensions/mo_compute_bc.F90,rte-rrtmgp/rte/mo_fluxes.F90,rte-rrtmgp/rte/kernels/mo_fluxes_broadband_kernels.F90 - dependencies = rte-rrtmgp/rte/mo_rte_lw.F90,rte-rrtmgp/rte/mo_rte_sw.F90,rte-rrtmgp/rte/kernels/mo_rte_solver_kernels.F90,rrtmgp_aux.F90 + dependencies = machine.F,radiation_tools.F90,GFS_rrtmgp_pre.F90,rte-rrtmgp/rrtmgp/mo_gas_optics_rrtmgp.F90,rte-rrtmgp/rte/mo_rte_kind.F90,rte-rrtmgp/rrtmgp/mo_gas_concentrations.F90,rte-rrtmgp/rte/mo_optical_props.F90,rte-rrtmgp/rte/mo_source_functions.F90 ######################################################################## [ccpp-arg-table] @@ -181,7 +180,7 @@ units = DDT dimensions = () type = ty_optical_props_1scl - intent = out + intent = inout optional = F [sources] standard_name = longwave_source_function @@ -189,7 +188,7 @@ units = DDT dimensions = () type = ty_source_func_lw - intent = out + intent = inout optional = F [errmsg] standard_name = ccpp_error_message diff --git a/physics/rrtmgp_lw_pre.F90 b/physics/rrtmgp_lw_pre.F90 index f4ee288f7..d5808f199 100644 --- a/physics/rrtmgp_lw_pre.F90 +++ b/physics/rrtmgp_lw_pre.F90 @@ -33,7 +33,7 @@ subroutine rrtmgp_lw_pre_run (doLWrad, nCol, xlon, xlat, slmsk, zorl, snowd, snc doLWrad ! Logical flag for longwave radiation call integer, intent(in) :: & nCol ! Number of horizontal grid points - real(kind_phys), dimension(nCol), intent(in) :: & + real(kind_phys), dimension(:), intent(in) :: & xlon, & ! Longitude xlat, & ! Latitude slmsk, & ! Land/sea/sea-ice mask @@ -47,13 +47,13 @@ subroutine rrtmgp_lw_pre_run (doLWrad, nCol, xlon, xlat, slmsk, zorl, snowd, snc emiss ! Surface emissivity from Noah MP ! Outputs - real(kind_phys), dimension(lw_gas_props%get_nband(),ncol), intent(out) :: & + real(kind_phys), dimension(:,:), intent(out) :: & sfc_emiss_byband ! Surface emissivity in each band character(len=*), intent(out) :: & errmsg ! Error message integer, intent(out) :: & errflg ! Error flag - real(kind_phys), dimension(nCol), intent(out) :: & + real(kind_phys), dimension(:), intent(out) :: & semis ! Local variables diff --git a/physics/rrtmgp_lw_pre.meta b/physics/rrtmgp_lw_pre.meta index 5446580df..f2773fdda 100644 --- a/physics/rrtmgp_lw_pre.meta +++ b/physics/rrtmgp_lw_pre.meta @@ -104,6 +104,15 @@ kind = kind_phys intent = in optional = F +[sfc_emiss_byband] + standard_name = surface_emissivity_in_each_RRTMGP_LW_band + long_name = surface emissivity in each RRTMGP LW band + units = none + dimensions = (number_of_lw_bands_rrtmgp,horizontal_loop_extent) + type = real + kind = kind_phys + intent = out + optional = F [emiss] standard_name = surface_emissivity_lsm long_name = surface emissivity from lsm @@ -122,15 +131,6 @@ kind = kind_phys intent = out optional = F -[sfc_emiss_byband] - standard_name = surface_emissivity_in_each_RRTMGP_LW_band - long_name = surface emissivity in each RRTMGP LW band - units = none - dimensions = (number_of_lw_bands_rrtmgp,horizontal_loop_extent) - type = real - kind = kind_phys - intent = out - optional = F [errmsg] standard_name = ccpp_error_message long_name = error message for error handling in CCPP diff --git a/physics/rrtmgp_lw_rte.F90 b/physics/rrtmgp_lw_rte.F90 index a9e6d1839..ea50653ac 100644 --- a/physics/rrtmgp_lw_rte.F90 +++ b/physics/rrtmgp_lw_rte.F90 @@ -9,7 +9,7 @@ module rrtmgp_lw_rte use mo_rte_lw, only: rte_lw use mo_fluxes_byband, only: ty_fluxes_byband use mo_source_functions, only: ty_source_func_lw - use rrtmgp_aux, only: check_error_msg + use radiation_tools, only: check_error_msg use rrtmgp_lw_gas_optics, only: lw_gas_props implicit none @@ -28,10 +28,10 @@ end subroutine rrtmgp_lw_rte_init !! \section arg_table_rrtmgp_lw_rte_run !! \htmlinclude rrtmgp_lw_rte_run.html !! - subroutine rrtmgp_lw_rte_run(doLWrad, doLWclrsky, use_LW_jacobian, doGP_lwscat, nCol, & - nLev, p_lev, sfc_emiss_byband, sources, lw_optical_props_clrsky, & - lw_optical_props_clouds, lw_optical_props_aerosol, nGauss_angles, fluxlwUP_allsky, & - fluxlwDOWN_allsky, fluxlwUP_clrsky, fluxlwDOWN_clrsky, sfculw_jac, errmsg, errflg) + subroutine rrtmgp_lw_rte_run(doLWrad, doLWclrsky, use_LW_jacobian, doGP_lwscat, nCol, & + nLev, p_lev, sfc_emiss_byband, sources, lw_optical_props_clrsky, & + lw_optical_props_clouds, lw_optical_props_aerosol, nGauss_angles, fluxlwUP_allsky, & + fluxlwDOWN_allsky, fluxlwUP_clrsky, fluxlwDOWN_clrsky, fluxlwUP_jac, errmsg, errflg) ! Inputs logical, intent(in) :: & @@ -56,9 +56,8 @@ subroutine rrtmgp_lw_rte_run(doLWrad, doLWclrsky, use_LW_jacobian, doGP_lwscat, lw_optical_props_clouds ! RRTMGP DDT: longwave cloud radiative properties ! Outputs - real(kind_phys), dimension(ncol), intent(inout) :: & - sfculw_jac ! Jacobian of upwelling LW surface radiation (W/m2/K) real(kind_phys), dimension(ncol,nLev+1), intent(inout) :: & + fluxlwUP_jac, & ! Jacobian of upwelling LW surface radiation (W/m2/K) fluxlwUP_allsky, & ! All-sky flux (W/m2) fluxlwDOWN_allsky, & ! All-sky flux (W/m2) fluxlwUP_clrsky, & ! Clear-sky flux (W/m2) @@ -73,10 +72,10 @@ subroutine rrtmgp_lw_rte_run(doLWrad, doLWclrsky, use_LW_jacobian, doGP_lwscat, flux_allsky, flux_clrsky real(kind_phys), dimension(ncol,nLev+1,lw_gas_props%get_nband()),target :: & fluxLW_up_allsky, fluxLW_up_clrsky, fluxLW_dn_allsky, fluxLW_dn_clrsky - real(kind_phys), dimension(nCol,nLev+1) :: fluxlwUP_jac,fluxlwDOWN_jac logical :: & top_at_1 integer :: iSFC, iTOA + real(kind_phys), dimension(nCol,lw_gas_props%get_ngpt()) :: lw_Ds ! Initialize CCPP error handling variables errmsg = '' @@ -105,17 +104,27 @@ subroutine rrtmgp_lw_rte_run(doLWrad, doLWclrsky, use_LW_jacobian, doGP_lwscat, ! ! Add aerosol optics to gas optics call check_error_msg('rrtmgp_lw_rte_run',lw_optical_props_aerosol%increment(lw_optical_props_clrsky)) - call lw_optical_props_aerosol%finalize() ! Call RTE solver if (doLWclrsky) then - call check_error_msg('rrtmgp_lw_rte_run',rte_lw( & - lw_optical_props_clrsky, & ! IN - optical-properties - top_at_1, & ! IN - veritcal ordering flag - sources, & ! IN - source function - sfc_emiss_byband, & ! IN - surface emissivity in each LW band - flux_clrsky, & ! OUT - Fluxes - n_gauss_angles = nGauss_angles)) ! IN - Number of angles in Gaussian quadrature + call check_error_msg('rrtmgp_lw_rte_run_opt_angle',lw_gas_props%compute_optimal_angles(lw_optical_props_clrsky,lw_Ds)) + if (nGauss_angles .gt. 1) then + call check_error_msg('rrtmgp_lw_rte_run',rte_lw( & + lw_optical_props_clrsky, & ! IN - optical-properties + top_at_1, & ! IN - veritcal ordering flag + sources, & ! IN - source function + sfc_emiss_byband, & ! IN - surface emissivity in each LW band + flux_clrsky, & ! OUT - Fluxes + n_gauss_angles = nGauss_angles)) ! IN - Number of angles in Gaussian quadrature + else + call check_error_msg('rrtmgp_lw_rte_run',rte_lw( & + lw_optical_props_clrsky, & ! IN - optical-properties + top_at_1, & ! IN - veritcal ordering flag + sources, & ! IN - source function + sfc_emiss_byband, & ! IN - surface emissivity in each LW band + flux_clrsky, & ! OUT - Fluxes + lw_Ds = lw_Ds)) + endif ! Store fluxes fluxlwUP_clrsky = sum(flux_clrsky%bnd_flux_up,dim=3) @@ -133,7 +142,6 @@ subroutine rrtmgp_lw_rte_run(doLWrad, doLWclrsky, use_LW_jacobian, doGP_lwscat, if (doGP_lwscat) then ! Add clear-sky optics to cloud-optics (2-stream) call check_error_msg('rrtmgp_lw_rte_run',lw_optical_props_clrsky%increment(lw_optical_props_clouds)) - call lw_optical_props_clrsky%finalize() if (use_LW_jacobian) then ! Compute LW Jacobians @@ -144,9 +152,7 @@ subroutine rrtmgp_lw_rte_run(doLWrad, doLWclrsky, use_LW_jacobian, doGP_lwscat, sfc_emiss_byband, & ! IN - surface emissivity in each LW band flux_allsky, & ! OUT - Flxues n_gauss_angles = nGauss_angles, & ! IN - Number of angles in Gaussian quadrature - flux_up_Jac = fluxlwUP_jac, & ! OUT - surface temperature flux (upward) Jacobian (W/m2/K) - flux_dn_Jac = fluxlwDOWN_jac)) ! OUT - surface temperature flux (downward) Jacobian (W/m2/K) - sfculw_jac = fluxlwUP_jac(:,iSFC) + flux_up_Jac = fluxlwUP_jac)) ! OUT - surface temperature flux (upward) Jacobian (W/m2/K) else call check_error_msg('rrtmgp_lw_rte_run',rte_lw( & lw_optical_props_clouds, & ! IN - optical-properties @@ -160,7 +166,6 @@ subroutine rrtmgp_lw_rte_run(doLWrad, doLWclrsky, use_LW_jacobian, doGP_lwscat, else ! Add cloud optics to clear-sky optics (scalar) call check_error_msg('rrtmgp_lw_rte_run',lw_optical_props_clouds%increment(lw_optical_props_clrsky)) - call lw_optical_props_clouds%finalize() if (use_LW_jacobian) then ! Compute LW Jacobians @@ -171,9 +176,7 @@ subroutine rrtmgp_lw_rte_run(doLWrad, doLWclrsky, use_LW_jacobian, doGP_lwscat, sfc_emiss_byband, & ! IN - surface emissivity in each LW band flux_allsky, & ! OUT - Flxues n_gauss_angles = nGauss_angles, & ! IN - Number of angles in Gaussian quadrature - flux_up_Jac = fluxlwUP_jac, & ! OUT - surface temperature flux (upward) Jacobian (W/m2/K) - flux_dn_Jac = fluxlwDOWN_jac)) ! OUT - surface temperature flux (downward) Jacobian (W/m2/K) - sfculw_jac = fluxlwUP_jac(:,iSFC) + flux_up_Jac = fluxlwUP_jac)) ! OUT - surface temperature flux (upward) Jacobian (W/m2/K) else call check_error_msg('rrtmgp_lw_rte_run',rte_lw( & lw_optical_props_clrsky, & ! IN - optical-properties diff --git a/physics/rrtmgp_lw_rte.meta b/physics/rrtmgp_lw_rte.meta index 4d68ec4b6..31554fe60 100644 --- a/physics/rrtmgp_lw_rte.meta +++ b/physics/rrtmgp_lw_rte.meta @@ -1,7 +1,7 @@ [ccpp-table-properties] name = rrtmgp_lw_rte type = scheme - dependencies = machine.F,rte-rrtmgp/rte/mo_rte_lw.F90,rte-rrtmgp/rte/mo_fluxes.F90,rte-rrtmgp/rte/kernels/mo_fluxes_broadband_kernels.F90,rrtmgp_aux.F90 + dependencies = machine.F,rte-rrtmgp/rte/mo_rte_lw.F90,rte-rrtmgp/rte/mo_fluxes.F90,rte-rrtmgp/rte/kernels/mo_fluxes_broadband_kernels.F90,radiation_tools.F90 dependencies = rte-rrtmgp/rte/kernels/mo_rte_solver_kernels.F90,rte-rrtmgp/extensions/mo_fluxes_byband.F90,rte-rrtmgp/extensions/mo_fluxes_byband_kernels.F90 ######################################################################## @@ -150,11 +150,11 @@ kind = kind_phys intent = inout optional = F -[sfculw_jac] - standard_name = RRTMGP_jacobian_of_lw_flux_upward_at_surface - long_name = RRTMGP Jacobian upward longwave flux at surface +[fluxlwUP_jac] + standard_name = RRTMGP_jacobian_of_lw_flux_upward + long_name = RRTMGP Jacobian upward longwave flux profile units = W m-2 K-1 - dimensions = (horizontal_loop_extent) + dimensions = (horizontal_loop_extent,vertical_dimension_plus_one) type = real kind = kind_phys intent = inout diff --git a/physics/rrtmgp_sw_aerosol_optics.F90 b/physics/rrtmgp_sw_aerosol_optics.F90 index fb9306b99..3a74771b7 100644 --- a/physics/rrtmgp_sw_aerosol_optics.F90 +++ b/physics/rrtmgp_sw_aerosol_optics.F90 @@ -2,7 +2,7 @@ module rrtmgp_sw_aerosol_optics use machine, only: kind_phys use mo_gas_optics_rrtmgp, only: ty_gas_optics_rrtmgp use mo_optical_props, only: ty_optical_props_2str - use rrtmgp_aux, only: check_error_msg + use radiation_tools, only: check_error_msg use rrtmgp_sw_gas_optics, only: sw_gas_props use rrtmgp_lw_gas_optics, only: lw_gas_props use module_radiation_aerosols, only: & @@ -43,26 +43,26 @@ subroutine rrtmgp_sw_aerosol_optics_run(doSWrad, nCol, nLev, nTracer, nTracerAer nLev, & ! Number of vertical layers nTracer, & ! Number of tracers nTracerAer ! Number of aerosol tracers - integer,intent(in),dimension(nCol) :: & + integer,intent(in),dimension(:) :: & idxday ! Indices for daylit points. - real(kind_phys), dimension(nCol), intent(in) :: & + real(kind_phys), dimension(:), intent(in) :: & lon, & ! Longitude lat, & ! Latitude lsmask ! Land/sea/sea-ice mask - real(kind_phys), dimension(nCol,Nlev),intent(in) :: & + real(kind_phys), dimension(:,:),intent(in) :: & p_lay, & ! Pressure @ layer-centers (Pa) tv_lay, & ! Virtual-temperature @ layer-centers (K) relhum, & ! Relative-humidity @ layer-centers p_lk ! Exner function @ layer-centers (1) - real(kind_phys), dimension(nCol, nLev, nTracer),intent(in) :: & + real(kind_phys), dimension(:, :,:),intent(in) :: & tracer ! trace gas concentrations - real(kind_phys), dimension(nCol, nLev, nTracerAer),intent(in) :: & + real(kind_phys), dimension(:, :,:),intent(in) :: & aerfld ! aerosol input concentrations - real(kind_phys), dimension(nCol,nLev+1),intent(in) :: & + real(kind_phys), dimension(:,:),intent(in) :: & p_lev ! Pressure @ layer-interfaces (Pa) ! Outputs - real(kind_phys), dimension(nCol,NSPC1), intent(inout) :: & + real(kind_phys), dimension(:,:), intent(inout) :: & aerodp ! Vertical integrated optical depth for various aerosol species type(ty_optical_props_2str),intent(out) :: & sw_optical_props_aerosol ! RRTMGP DDT: Longwave aerosol optical properties (tau) @@ -85,7 +85,7 @@ subroutine rrtmgp_sw_aerosol_optics_run(doSWrad, nCol, nLev, nTracer, nTracerAer if (nDay .gt. 0) then ! Call module_radiation_aerosols::setaer(),to setup aerosols property profile - call setaer(p_lev, p_lay, p_lk, tv_lay, relhum, lsmask, tracer, aerfld, lon, lat, nCol, nLev, & + call setaer(p_lev/100., p_lay/100., p_lk, tv_lay, relhum, lsmask, tracer, aerfld, lon, lat, nCol, nLev, & nLev+1, .true., .true., aerosolssw2, aerosolslw, aerodp) ! Store aerosol optical properties diff --git a/physics/rrtmgp_sw_aerosol_optics.meta b/physics/rrtmgp_sw_aerosol_optics.meta index a8405d2a7..f4909c794 100644 --- a/physics/rrtmgp_sw_aerosol_optics.meta +++ b/physics/rrtmgp_sw_aerosol_optics.meta @@ -1,7 +1,7 @@ [ccpp-table-properties] name = rrtmgp_sw_aerosol_optics type = scheme - dependencies = iounitdef.f,machine.F,radiation_aerosols.f,rrtmgp_aux.F90 + dependencies = iounitdef.f,machine.F,radiation_aerosols.f,radiation_tools.F90 ######################################################################## [ccpp-arg-table] diff --git a/physics/rrtmgp_sw_cloud_optics.F90 b/physics/rrtmgp_sw_cloud_optics.F90 index 44b5e0510..0ab0c3361 100644 --- a/physics/rrtmgp_sw_cloud_optics.F90 +++ b/physics/rrtmgp_sw_cloud_optics.F90 @@ -5,7 +5,7 @@ module rrtmgp_sw_cloud_optics use mo_optical_props, only: ty_optical_props_2str use mo_rrtmg_sw_cloud_optics, only: rrtmg_sw_cloud_optics use rrtmgp_sw_gas_optics, only: sw_gas_props - use rrtmgp_aux, only: check_error_msg + use radiation_tools, only: check_error_msg use netcdf #ifdef MPI use mpi diff --git a/physics/rrtmgp_sw_cloud_optics.meta b/physics/rrtmgp_sw_cloud_optics.meta index e50d44bc8..6f3012760 100644 --- a/physics/rrtmgp_sw_cloud_optics.meta +++ b/physics/rrtmgp_sw_cloud_optics.meta @@ -1,7 +1,7 @@ [ccpp-table-properties] name = rrtmgp_sw_cloud_optics type = scheme - dependencies = machine.F,physparam.f,rrtmg_sw_cloud_optics.F90,rrtmgp_aux.F90 + dependencies = machine.F,physparam.f,rrtmg_sw_cloud_optics.F90,radiation_tools.F90 ######################################################################## [ccpp-arg-table] diff --git a/physics/rrtmgp_sw_cloud_sampling.F90 b/physics/rrtmgp_sw_cloud_sampling.F90 index 40a6bf6e0..043949fa5 100644 --- a/physics/rrtmgp_sw_cloud_sampling.F90 +++ b/physics/rrtmgp_sw_cloud_sampling.F90 @@ -4,7 +4,7 @@ module rrtmgp_sw_cloud_sampling use mo_optical_props, only: ty_optical_props_2str use rrtmgp_sampling, only: sampled_mask, draw_samples use mersenne_twister, only: random_setseed, random_number, random_stat - use rrtmgp_aux, only: check_error_msg + use radiation_tools, only: check_error_msg use rrtmgp_sw_gas_optics, only: sw_gas_props use netcdf diff --git a/physics/rrtmgp_sw_cloud_sampling.meta b/physics/rrtmgp_sw_cloud_sampling.meta index cda2aaa60..4634648f0 100644 --- a/physics/rrtmgp_sw_cloud_sampling.meta +++ b/physics/rrtmgp_sw_cloud_sampling.meta @@ -1,7 +1,7 @@ [ccpp-table-properties] name = rrtmgp_sw_cloud_sampling type = scheme - dependencies = machine.F,mersenne_twister.f,physparam.f,rrtmgp_sampling.F90,rrtmgp_aux.F90 + dependencies = machine.F,mersenne_twister.f,physparam.f,rrtmgp_sampling.F90,radiation_tools.F90 ######################################################################## [ccpp-arg-table] diff --git a/physics/rrtmgp_sw_gas_optics.F90 b/physics/rrtmgp_sw_gas_optics.F90 index 30452869d..bd0ac1169 100644 --- a/physics/rrtmgp_sw_gas_optics.F90 +++ b/physics/rrtmgp_sw_gas_optics.F90 @@ -1,12 +1,10 @@ module rrtmgp_sw_gas_optics use machine, only: kind_phys - use module_radiation_gases, only: NF_VGAS use mo_rte_kind, only: wl use mo_gas_optics_rrtmgp, only: ty_gas_optics_rrtmgp use mo_gas_concentrations, only: ty_gas_concs - use rrtmgp_aux, only: check_error_msg + use radiation_tools, only: check_error_msg use mo_optical_props, only: ty_optical_props_2str - use mo_compute_bc, only: compute_bc use GFS_rrtmgp_pre, only: active_gases_array use netcdf #ifdef MPI @@ -14,6 +12,10 @@ module rrtmgp_sw_gas_optics #endif implicit none + real(kind_phys),parameter :: & + tsi_default = 1360.85767381726, & + mg_default = 0.1567652, & + sb_default = 902.7126 ! RRTMGP k-distribution LUTs. type(ty_gas_optics_rrtmgp) :: sw_gas_props @@ -301,11 +303,23 @@ subroutine rrtmgp_sw_gas_optics_init(nCol, nLev, nThreads, rrtmgp_root_dir, status = nf90_inq_varid(ncid, 'absorption_coefficient_ref_T', varID) status = nf90_get_var( ncid, varID, temp_ref_tSW) status = nf90_inq_varid(ncid, 'tsi_default', varID) - status = nf90_get_var( ncid, varID, tsi_defaultSW) + if (status .eq. 0) then + status = nf90_get_var( ncid, varID, tsi_defaultSW) + else + tsi_defaultSW = tsi_default + endif status = nf90_inq_varid(ncid, 'mg_default', varID) - status = nf90_get_var( ncid, varID, mg_defaultSW) + if (status .eq. 0) then + status = nf90_get_var( ncid, varID, mg_defaultSW) + else + mg_defaultSW = mg_default + endif status = nf90_inq_varid(ncid, 'sb_default', varID) - status = nf90_get_var( ncid, varID, sb_defaultSW) + if (status .eq. 0) then + status = nf90_get_var( ncid, varID, sb_defaultSW) + else + sb_defaultSW = sb_default + endif status = nf90_inq_varid(ncid, 'press_ref_trop', varID) status = nf90_get_var( ncid, varID, press_ref_tropSW) status = nf90_inq_varid(ncid, 'kminor_lower', varID) diff --git a/physics/rrtmgp_sw_gas_optics.meta b/physics/rrtmgp_sw_gas_optics.meta index 17d0b046b..32eeee4a9 100644 --- a/physics/rrtmgp_sw_gas_optics.meta +++ b/physics/rrtmgp_sw_gas_optics.meta @@ -1,8 +1,7 @@ [ccpp-table-properties] name = rrtmgp_sw_gas_optics type = scheme - dependencies = iounitdef.f,machine.F,radiation_gases.f,rrtmgp_aux.F90,rte-rrtmgp/extensions/mo_compute_bc.F90,rte-rrtmgp/rte/mo_fluxes.F90,rte-rrtmgp/rte/kernels/mo_fluxes_broadband_kernels.F90 - dependencies = rte-rrtmgp/rte/mo_rte_lw.F90,rte-rrtmgp/rte/mo_rte_sw.F90,rte-rrtmgp/rte/kernels/mo_rte_solver_kernels.F90,rrtmgp_aux.F90 + dependencies = machine.F,radiation_tools.F90,GFS_rrtmgp_pre.F90,rte-rrtmgp/rrtmgp/mo_gas_optics_rrtmgp.F90,rte-rrtmgp/rte/mo_rte_kind.F90,rte-rrtmgp/rrtmgp/mo_gas_concentrations.F90,rte-rrtmgp/rte/mo_optical_props.F90 ######################################################################## [ccpp-arg-table] diff --git a/physics/rrtmgp_sw_rte.F90 b/physics/rrtmgp_sw_rte.F90 index 4ea4c36d8..f28e94b0f 100644 --- a/physics/rrtmgp_sw_rte.F90 +++ b/physics/rrtmgp_sw_rte.F90 @@ -8,7 +8,7 @@ module rrtmgp_sw_rte use mo_gas_concentrations, only: ty_gas_concs use mo_fluxes_byband, only: ty_fluxes_byband use module_radsw_parameters, only: cmpfsw_type - use rrtmgp_aux, only: check_error_msg + use radiation_tools, only: check_error_msg use rrtmgp_sw_gas_optics, only: sw_gas_props implicit none diff --git a/physics/rrtmgp_sw_rte.meta b/physics/rrtmgp_sw_rte.meta index 0558819f1..a84eb373c 100644 --- a/physics/rrtmgp_sw_rte.meta +++ b/physics/rrtmgp_sw_rte.meta @@ -1,7 +1,7 @@ [ccpp-table-properties] name = rrtmgp_sw_rte type = scheme - dependencies = machine.F,radsw_param.f,rte-rrtmgp/rte/mo_rte_sw.F90,rte-rrtmgp/rte/mo_fluxes.F90,rte-rrtmgp/rte/kernels/mo_fluxes_broadband_kernels.F90,rrtmgp_aux.F90 + dependencies = machine.F,radsw_param.f,rte-rrtmgp/rte/mo_rte_sw.F90,rte-rrtmgp/rte/mo_fluxes.F90,rte-rrtmgp/rte/kernels/mo_fluxes_broadband_kernels.F90,radiation_tools.F90 dependencies = rte-rrtmgp/rte/kernels/mo_rte_solver_kernels.F90,rte-rrtmgp/extensions/mo_fluxes_byband.F90,rte-rrtmgp/extensions/mo_fluxes_byband_kernels.F90 ######################################################################## diff --git a/physics/rte-rrtmgp b/physics/rte-rrtmgp index 33c8a984c..3be5c3437 160000 --- a/physics/rte-rrtmgp +++ b/physics/rte-rrtmgp @@ -1 +1 @@ -Subproject commit 33c8a984c17cf41be5d4c2928242e1b4239bfc40 +Subproject commit 3be5c3437da541575a293e74b0049721642a6975 diff --git a/physics/samfdeepcnv.f b/physics/samfdeepcnv.f index 1b71e011e..a0d884e03 100644 --- a/physics/samfdeepcnv.f +++ b/physics/samfdeepcnv.f @@ -78,29 +78,28 @@ subroutine samfdeepcnv_run (im,km,itc,ntc,cliq,cp,cvap, & implicit none ! integer, intent(in) :: im, km, itc, ntc, ntk, ntr, ncloud - integer, intent(in) :: islimsk(im) + integer, intent(in) :: islimsk(:) real(kind=kind_phys), intent(in) :: cliq, cp, cvap, eps, epsm1, & & fv, grav, hvap, rd, rv, t0c real(kind=kind_phys), intent(in) :: delt - real(kind=kind_phys), intent(in) :: psp(im), delp(im,km), & - & prslp(im,km), garea(im), dot(im,km), phil(im,km) + real(kind=kind_phys), intent(in) :: psp(:), delp(:,:), & + & prslp(:,:), garea(:), dot(:,:), phil(:,:) real(kind=kind_phys), dimension(:), intent(in) :: fscav logical, intent(in) :: hwrf_samfdeep real(kind=kind_phys), intent(in) :: nthresh - real(kind=kind_phys), intent(in) :: ca_deep(im) - real(kind=kind_phys), intent(out) :: rainevap(im) + real(kind=kind_phys), intent(in) :: ca_deep(:) + real(kind=kind_phys), intent(out) :: rainevap(:) logical, intent(in) :: do_ca,ca_closure,ca_entr,ca_trigger - integer, intent(inout) :: kcnv(im) - ! DH* TODO - check dimensions of qtr, ntr+2 correct? *DH - real(kind=kind_phys), intent(inout) :: qtr(im,km,ntr+2), & - & q1(im,km), t1(im,km), u1(im,km), v1(im,km), & - & cnvw(im,km), cnvc(im,km) + integer, intent(inout) :: kcnv(:) + real(kind=kind_phys), intent(inout) :: qtr(:,:,:), & + & q1(:,:), t1(:,:), u1(:,:), v1(:,:), & + & cnvw(:,:), cnvc(:,:) - integer, intent(out) :: kbot(im), ktop(im) - real(kind=kind_phys), intent(out) :: cldwrk(im), & - & rn(im), & - & ud_mf(im,km),dd_mf(im,km), dt_mf(im,km) + integer, intent(out) :: kbot(:), ktop(:) + real(kind=kind_phys), intent(out) :: cldwrk(:), & + & rn(:), & + & ud_mf(:,:),dd_mf(:,:), dt_mf(:,:) ! GJF* These variables are conditionally allocated depending on whether the ! Morrison-Gettelman microphysics is used, so they must be declared @@ -109,7 +108,7 @@ subroutine samfdeepcnv_run (im,km,itc,ntc,cliq,cp,cvap, & & qlcn, qicn, w_upi, cnv_mfd, cnv_dqldt, clcn & &, cnv_fice, cnv_ndrop, cnv_nice, cf_upi ! *GJF - integer :: mp_phys, mp_phys_mg + integer, intent(in) :: mp_phys, mp_phys_mg real(kind=kind_phys), intent(in) :: clam, c0s, c1, & & betal, betas, asolfac, & diff --git a/physics/samfdeepcnv.meta b/physics/samfdeepcnv.meta index 8000fb90c..802aeb50a 100644 --- a/physics/samfdeepcnv.meta +++ b/physics/samfdeepcnv.meta @@ -525,8 +525,8 @@ intent = in optional = F [betas] - standard_name = downdraft_fraction_reaching_surface_over_ocean_deep_convection - long_name = downdraft fraction reaching surface over ocean for deep conv. + standard_name = downdraft_fraction_reaching_surface_over_water_deep_convection + long_name = downdraft fraction reaching surface over water for deep conv. units = frac dimensions = () type = real diff --git a/physics/samfshalcnv.f b/physics/samfshalcnv.f index ce6ae62c4..f2a22b38c 100644 --- a/physics/samfshalcnv.f +++ b/physics/samfshalcnv.f @@ -53,22 +53,22 @@ subroutine samfshalcnv_run(im,km,itc,ntc,cliq,cp,cvap, & implicit none ! integer, intent(in) :: im, km, itc, ntc, ntk, ntr, ncloud - integer, intent(in) :: islimsk(im) + integer, intent(in) :: islimsk(:) real(kind=kind_phys), intent(in) :: cliq, cp, cvap, & & eps, epsm1, fv, grav, hvap, rd, rv, t0c real(kind=kind_phys), intent(in) :: delt - real(kind=kind_phys), intent(in) :: psp(im), delp(im,km), & - & prslp(im,km), garea(im), hpbl(im), dot(im,km), phil(im,km) + real(kind=kind_phys), intent(in) :: psp(:), delp(:,:), & + & prslp(:,:), garea(:), hpbl(:), dot(:,:), phil(:,:) ! real(kind=kind_phys), dimension(:), intent(in) :: fscav - integer, intent(inout) :: kcnv(im) + integer, intent(inout) :: kcnv(:) ! DH* TODO - check dimensions of qtr, ntr+2 correct? *DH - real(kind=kind_phys), intent(inout) :: qtr(im,km,ntr+2), & - & q1(im,km), t1(im,km), u1(im,km), v1(im,km) + real(kind=kind_phys), intent(inout) :: qtr(:,:,:), & + & q1(:,:), t1(:,:), u1(:,:), v1(:,:) ! - integer, intent(out) :: kbot(im), ktop(im) - real(kind=kind_phys), intent(out) :: rn(im), & - & cnvw(im,km), cnvc(im,km), ud_mf(im,km), dt_mf(im,km) + integer, intent(out) :: kbot(:), ktop(:) + real(kind=kind_phys), intent(out) :: rn(:), & + & cnvw(:,:), cnvc(:,:), ud_mf(:,:), dt_mf(:,:) ! real(kind=kind_phys), intent(in) :: clam, c0s, c1, & & asolfac, pgcon diff --git a/physics/sascnvn.meta b/physics/sascnvn.meta index d49d287e1..af25b8477 100644 --- a/physics/sascnvn.meta +++ b/physics/sascnvn.meta @@ -522,8 +522,8 @@ intent = in optional = F [betas] - standard_name = downdraft_fraction_reaching_surface_over_ocean_deep_convection - long_name = downdraft fraction reaching surface over ocean for deep convection + standard_name = downdraft_fraction_reaching_surface_over_water_deep_convection + long_name = downdraft fraction reaching surface over water for deep convection units = frac dimensions = () type = real diff --git a/physics/satmedmfvdif.F b/physics/satmedmfvdif.F index a74e15f19..26412d066 100644 --- a/physics/satmedmfvdif.F +++ b/physics/satmedmfvdif.F @@ -72,8 +72,8 @@ subroutine satmedmfvdif_run(im,km,ntrac,ntcw,ntiw,ntke, & ! !---------------------------------------------------------------------- integer, intent(in) :: im, km, ntrac, ntcw, ntiw, ntke - integer, intent(in) :: kinver(im) - integer, intent(out) :: kpbl(im) + integer, intent(in) :: kinver(:) + integer, intent(out) :: kpbl(:) ! logical, intent(in) :: gen_tend, ldiag3d real(kind=kind_phys), intent(inout), dimension(:,:,:) :: dtend @@ -83,26 +83,26 @@ subroutine satmedmfvdif_run(im,km,ntrac,ntcw,ntiw,ntke, & real(kind=kind_phys), intent(in) :: grav,rd,cp,rv,hvap,hfus,fv, & & eps,epsm1 real(kind=kind_phys), intent(in) :: delt, xkzm_m, xkzm_h, xkzm_s - real(kind=kind_phys), intent(inout) :: dv(im,km), du(im,km), & - & tdt(im,km), rtg(im,km,ntrac) + real(kind=kind_phys), intent(inout) :: dv(:,:), du(:,:), & + & tdt(:,:), rtg(:,:,:) real(kind=kind_phys), intent(in) :: & - & u1(im,km), v1(im,km), & - & t1(im,km), q1(im,km,ntrac), & - & swh(im,km), hlw(im,km), & - & xmu(im), garea(im), & - & psk(im), rbsoil(im), & - & zorl(im), tsea(im), & - & u10m(im), v10m(im), & - & fm(im), fh(im), & - & evap(im), heat(im), & - & stress(im), spd1(im), & - & prsi(im,km+1), del(im,km), & - & prsl(im,km), prslk(im,km), & - & phii(im,km+1), phil(im,km) + & u1(:,:), v1(:,:), & + & t1(:,:), q1(:,:,:), & + & swh(:,:), hlw(:,:), & + & xmu(:), garea(:), & + & psk(:), rbsoil(:), & + & zorl(:), tsea(:), & + & u10m(:), v10m(:), & + & fm(:), fh(:), & + & evap(:), heat(:), & + & stress(:), spd1(:), & + & prsi(:,:), del(:,:), & + & prsl(:,:), prslk(:,:), & + & phii(:,:), phil(:,:) real(kind=kind_phys), intent(out) :: & - & dusfc(im), dvsfc(im), & - & dtsfc(im), dqsfc(im), & - & hpbl(im) + & dusfc(:), dvsfc(:), & + & dtsfc(:), dqsfc(:), & + & hpbl(:) ! logical, intent(in) :: dspheat character(len=*), intent(out) :: errmsg diff --git a/physics/satmedmfvdifq.F b/physics/satmedmfvdifq.F index dddbae0d6..9dcec216a 100644 --- a/physics/satmedmfvdifq.F +++ b/physics/satmedmfvdifq.F @@ -63,7 +63,7 @@ subroutine satmedmfvdifq_run(im,km,ntrac,ntcw,ntiw,ntke, & & snwdph_lnd,psk,rbsoil,zorl,u10m,v10m,fm,fh, & & tsea,heat,evap,stress,spd1,kpbl, & & prsi,del,prsl,prslk,phii,phil,delt, & - & dspheat,dusfc,dvsfc,dtsfc,dqsfc,hpbl, & + & dspheat,dusfc,dvsfc,dtsfc,dqsfc,hpbl,dkt,dku, & & kinver,xkzm_m,xkzm_h,xkzm_s,dspfac,bl_upfr,bl_dnfr, & & ntoz,ntqv,dtend,dtidx,index_of_temperature,index_of_x_wind, & & index_of_y_wind,index_of_process_pbl,gen_tend,ldiag3d, & @@ -76,39 +76,41 @@ subroutine satmedmfvdifq_run(im,km,ntrac,ntcw,ntiw,ntke, & ! !---------------------------------------------------------------------- integer, intent(in) :: im, km, ntrac, ntcw, ntiw, ntke, ntoz,ntqv - integer, intent(in) :: kinver(im) - integer, intent(in) :: islimsk(im) - integer, intent(out) :: kpbl(im) + integer, intent(in) :: kinver(:) + integer, intent(in) :: islimsk(:) + integer, intent(out) :: kpbl(:) logical, intent(in) :: gen_tend,ldiag3d ! real(kind=kind_phys), intent(in) :: grav,rd,cp,rv,hvap,hfus,fv, & & eps,epsm1 real(kind=kind_phys), intent(in) :: delt, xkzm_m, xkzm_h, xkzm_s real(kind=kind_phys), intent(in) :: dspfac, bl_upfr, bl_dnfr - real(kind=kind_phys), intent(inout) :: dv(im,km), du(im,km), & - & tdt(im,km), rtg(im,km,ntrac) + real(kind=kind_phys), intent(inout) :: dv(:,:), du(:,:), & + & tdt(:,:), rtg(:,:,:) real(kind=kind_phys), intent(in) :: & - & u1(im,km), v1(im,km), & - & t1(im,km), q1(im,km,ntrac), & - & swh(im,km), hlw(im,km), & - & xmu(im), garea(im), & - & snwdph_lnd(im), & - & psk(im), rbsoil(im), & - & zorl(im), tsea(im), & - & u10m(im), v10m(im), & - & fm(im), fh(im), & - & evap(im), heat(im), & - & stress(im), spd1(im), & - & prsi(im,km+1), del(im,km), & - & prsl(im,km), prslk(im,km), & - & phii(im,km+1), phil(im,km) + & u1(:,:), v1(:,:), & + & t1(:,:), q1(:,:,:), & + & swh(:,:), hlw(:,:), & + & xmu(:), garea(:), & + & snwdph_lnd(:), & + & psk(:), rbsoil(:), & + & zorl(:), tsea(:), & + & u10m(:), v10m(:), & + & fm(:), fh(:), & + & evap(:), heat(:), & + & stress(:), spd1(:), & + & prsi(:,:), del(:,:), & + & prsl(:,:), prslk(:,:), & + & phii(:,:), phil(:,:) real(kind=kind_phys), intent(inout), dimension(:,:,:) :: dtend integer, intent(in) :: dtidx(:,:), index_of_temperature, & & index_of_x_wind, index_of_y_wind, index_of_process_pbl real(kind=kind_phys), intent(out) :: & - & dusfc(im), dvsfc(im), & - & dtsfc(im), dqsfc(im), & - & hpbl(im) + & dusfc(:), dvsfc(:), & + & dtsfc(:), dqsfc(:), & + & hpbl(:) + real(kind=kind_phys), intent(out) :: & + & dkt(:,:), dku(:,:) ! logical, intent(in) :: dspheat character(len=*), intent(out) :: errmsg @@ -130,8 +132,7 @@ subroutine satmedmfvdifq_run(im,km,ntrac,ntcw,ntiw,ntke, & & qlx(im,km), thetae(im,km),thlx(im,km), & slx(im,km), svx(im,km), qtx(im,km), & tvx(im,km), pix(im,km), radx(im,km-1), - & dku(im,km-1),dkt(im,km-1), dkq(im,km-1), - & cku(im,km-1),ckt(im,km-1) + & dkq(im,km-1),cku(im,km-1), ckt(im,km-1) ! real(kind=kind_phys) plyr(im,km), rhly(im,km), cfly(im,km), & qstl(im,km) @@ -496,10 +497,14 @@ subroutine satmedmfvdifq_run(im,km,ntrac,ntcw,ntiw,ntke, & ! !> - Initialize diffusion coefficients to 0 and calculate the total !! radiative heating rate (dku, dkt, radx) - do k=1,km1 + do k=1,km do i=1,im dku(i,k) = 0. dkt(i,k) = 0. + enddo + enddo + do k=1,km1 + do i=1,im dkq(i,k) = 0. cku(i,k) = 0. ckt(i,k) = 0. @@ -1560,6 +1565,7 @@ subroutine satmedmfvdifq_run(im,km,ntrac,ntcw,ntiw,ntke, & ! enddo enddo + c !> - Call tridi2() to solve tridiagonal problem for momentum c diff --git a/physics/satmedmfvdifq.meta b/physics/satmedmfvdifq.meta index 3251071d9..b8f8a6e4d 100644 --- a/physics/satmedmfvdifq.meta +++ b/physics/satmedmfvdifq.meta @@ -531,6 +531,24 @@ kind = kind_phys intent = out optional = F +[dkt] + standard_name = atmosphere_heat_diffusivity + long_name = atmospheric heat diffusivity + units = m2 s-1 + dimensions = (horizontal_loop_extent,vertical_dimension) + type = real + kind = kind_phys + intent = out + optional = F +[dku] + standard_name = atmosphere_momentum_diffusivity + long_name = atmospheric momentum diffusivity + units = m2 s-1 + dimensions = (horizontal_loop_extent,vertical_dimension) + type = real + kind = kind_phys + intent = out + optional = F [kinver] standard_name = index_of_highest_temperature_inversion long_name = index of highest temperature inversion @@ -672,7 +690,7 @@ units = flag dimensions = () type = logical - intent = inout + intent = in optional = F [errmsg] standard_name = ccpp_error_message diff --git a/physics/gmtb_scm_sfc_flux_spec.F90 b/physics/scm_sfc_flux_spec.F90 similarity index 87% rename from physics/gmtb_scm_sfc_flux_spec.F90 rename to physics/scm_sfc_flux_spec.F90 index 22730f9f2..398bff5d6 100644 --- a/physics/gmtb_scm_sfc_flux_spec.F90 +++ b/physics/scm_sfc_flux_spec.F90 @@ -1,7 +1,7 @@ -!> \file gmtb_scm_sfc_flux_spec.F90 +!> \file scm_sfc_flux_spec.F90 !! Contains code to calculate parameters needed by the rest of the GFS physics suite given specified surface fluxes. -module gmtb_scm_sfc_flux_spec +module scm_sfc_flux_spec implicit none @@ -10,12 +10,16 @@ module gmtb_scm_sfc_flux_spec !---------------- ! Public entities !---------------- - public gmtb_scm_sfc_flux_spec_init, gmtb_scm_sfc_flux_spec_run, gmtb_scm_sfc_flux_spec_finalize + public scm_sfc_flux_spec_init, scm_sfc_flux_spec_run, scm_sfc_flux_spec_finalize CONTAINS !******************************************************************************************* - subroutine gmtb_scm_sfc_flux_spec_init(lheatstrg, errmsg, errflg) +!! +!! \section arg_table_scm_sfc_flux_spec_init Argument Table +!! \htmlinclude scm_sfc_flux_spec_init.html +!! + subroutine scm_sfc_flux_spec_init(lheatstrg, errmsg, errflg) logical, intent(in) :: lheatstrg @@ -27,16 +31,16 @@ subroutine gmtb_scm_sfc_flux_spec_init(lheatstrg, errmsg, errflg) errflg = 1 return end if - end subroutine gmtb_scm_sfc_flux_spec_init + end subroutine scm_sfc_flux_spec_init - subroutine gmtb_scm_sfc_flux_spec_finalize() - end subroutine gmtb_scm_sfc_flux_spec_finalize + subroutine scm_sfc_flux_spec_finalize() + end subroutine scm_sfc_flux_spec_finalize !> \brief This routine calculates surface-related parameters given specified sensible and latent heat fluxes and a roughness length. Most of the calculation !! is "backing out" parameters that are calculated in sfc_dff.f from the known surface heat fluxes and roughness length. !! -!! \section arg_table_gmtb_scm_sfc_flux_spec_run Argument Table -!! \htmlinclude gmtb_scm_sfc_flux_spec_run.html +!! \section arg_table_scm_sfc_flux_spec_run Argument Table +!! \htmlinclude scm_sfc_flux_spec_run.html !! !! \section general_sfc_flux_spec General Algorithm !! -# Compute friction velocity from the wind speed at the lowest model layer, the height about the ground, and the roughness length. @@ -48,7 +52,7 @@ end subroutine gmtb_scm_sfc_flux_spec_finalize !! -# Calculate the Monin-Obukhov similarity function for heat and moisture from the bulk Richardson number and diagnosed similarity function for momentum. !! -# Calculate the surface drag coefficient for heat and moisture. !! -# Calculate the u and v wind at 10m. - subroutine gmtb_scm_sfc_flux_spec_run (u1, v1, z1, t1, q1, p1, roughness_length, spec_sh_flux, spec_lh_flux, & + subroutine scm_sfc_flux_spec_run (u1, v1, z1, t1, q1, p1, roughness_length, spec_sh_flux, spec_lh_flux, & exner_inverse, T_surf, cp, grav, hvap, rd, fvirt, vonKarman, sh_flux, lh_flux, sh_flux_chs, lh_flux_chs, u_star, sfc_stress, cm, ch, & fm, fh, rb, u10m, v10m, wind1, qss, t2m, q2m, errmsg, errflg) @@ -133,6 +137,6 @@ subroutine gmtb_scm_sfc_flux_spec_run (u1, v1, z1, t1, q1, p1, roughness_length, q2m(i) = 0.0 end do - end subroutine gmtb_scm_sfc_flux_spec_run + end subroutine scm_sfc_flux_spec_run -end module gmtb_scm_sfc_flux_spec +end module scm_sfc_flux_spec diff --git a/physics/gmtb_scm_sfc_flux_spec.meta b/physics/scm_sfc_flux_spec.meta similarity index 98% rename from physics/gmtb_scm_sfc_flux_spec.meta rename to physics/scm_sfc_flux_spec.meta index 1e004b7f9..7edc8c9e5 100644 --- a/physics/gmtb_scm_sfc_flux_spec.meta +++ b/physics/scm_sfc_flux_spec.meta @@ -1,11 +1,11 @@ [ccpp-table-properties] - name = gmtb_scm_sfc_flux_spec + name = scm_sfc_flux_spec type = scheme dependencies = machine.F ######################################################################## [ccpp-arg-table] - name = gmtb_scm_sfc_flux_spec_init + name = scm_sfc_flux_spec_init type = scheme [lheatstrg] standard_name = flag_for_canopy_heat_storage @@ -35,7 +35,7 @@ ################################# [ccpp-arg-table] - name = gmtb_scm_sfc_flux_spec_run + name = scm_sfc_flux_spec_run type = scheme [u1] standard_name = x_wind_at_lowest_model_layer diff --git a/physics/sfc_cice.f b/physics/sfc_cice.f index f845f6091..a07759f71 100644 --- a/physics/sfc_cice.f +++ b/physics/sfc_cice.f @@ -98,23 +98,23 @@ subroutine sfc_cice_run & use machine , only : kind_phys implicit none - real(kind=kind_phys), parameter :: one = 1.0_kind_phys - real(kind=kind_phys), parameter :: dsi = one/0.33_kind_phys - real (kind=kind_phys), intent(in) :: hvap, cp, rvrdm1, rd + real(kind=kind_phys), parameter :: one = 1.0_kind_phys + real(kind=kind_phys), parameter :: dsi = one/0.33_kind_phys + real(kind=kind_phys), intent(in) :: hvap, cp, rvrdm1, rd ! --- inputs: integer, intent(in) :: im logical, intent(in) :: cplflx ! real (kind=kind_phys), dimension(im), intent(in) :: u1, v1, & - real (kind=kind_phys), dimension(im), intent(in) :: & + real (kind=kind_phys), dimension(:), intent(in) :: & & t1, q1, cm, ch, prsl1, wind, dqsfc, dtsfc, dusfc, dvsfc &, snowd - logical, intent(in) :: flag_cice(im), flag_iter(im) + logical, dimension(:), intent(in) :: flag_cice, flag_iter ! --- outputs: - real (kind=kind_phys), dimension(im), intent(inout) :: qsurf, & + real (kind=kind_phys), dimension(:), intent(inout) :: qsurf, & & cmm, chh, evap, hflx, stress &, weasd, snwdph, ep ! diff --git a/physics/sfc_diag.f b/physics/sfc_diag.f index b78c9b2f7..e91bd0e14 100644 --- a/physics/sfc_diag.f +++ b/physics/sfc_diag.f @@ -33,10 +33,10 @@ subroutine sfc_diag_run & ! integer, intent(in) :: im real(kind=kind_phys), intent(in) :: grav,cp,eps,epsm1 - real(kind=kind_phys), dimension(im), intent(in) :: & + real(kind=kind_phys), dimension(:), intent(in) :: & & ps, u1, v1, t1, q1, tskin, & & qsurf, prslki, evap, fm, fh, fm10, fh2 - real(kind=kind_phys), dimension(im), intent(out) :: & + real(kind=kind_phys), dimension(:), intent(out) :: & & f10m, u10m, v10m, t2m, q2m character(len=*), intent(out) :: errmsg integer, intent(out) :: errflg diff --git a/physics/sfc_diag_post.F90 b/physics/sfc_diag_post.F90 index 767e98db5..1bf3e7e67 100644 --- a/physics/sfc_diag_post.F90 +++ b/physics/sfc_diag_post.F90 @@ -26,11 +26,11 @@ subroutine sfc_diag_post_run (im, lsm, lsm_noahmp, dry, lssav, dtf, con_eps, con integer, intent(in) :: im, lsm, lsm_noahmp logical, intent(in) :: lssav real(kind=kind_phys), intent(in) :: dtf, con_eps, con_epsm1 - logical , dimension(im), intent(in) :: dry - real(kind=kind_phys), dimension(im), intent(in) :: pgr, u10m, v10m + logical , dimension(:), intent(in) :: dry + real(kind=kind_phys), dimension(:), intent(in) :: pgr, u10m, v10m real(kind=kind_phys), dimension(:) , intent(in) :: t2mmp, q2mp - real(kind=kind_phys), dimension(im), intent(inout) :: t2m, q2m, tmpmin, tmpmax, spfhmin, spfhmax - real(kind=kind_phys), dimension(im), intent(inout) :: wind10mmax, u10mmax, v10mmax, dpt2m + real(kind=kind_phys), dimension(:), intent(inout) :: t2m, q2m, tmpmin, tmpmax, spfhmin, spfhmax + real(kind=kind_phys), dimension(:), intent(inout) :: wind10mmax, u10mmax, v10mmax, dpt2m character(len=*), intent(out) :: errmsg integer, intent(out) :: errflg diff --git a/physics/sfc_diff.f b/physics/sfc_diff.f index b7ef1ea68..93102e467 100644 --- a/physics/sfc_diff.f +++ b/physics/sfc_diff.f @@ -90,24 +90,24 @@ subroutine sfc_diff_run (im,rvrdm1,eps,epsm1,grav, & !intent(in) integer, intent(in) :: im, ivegsrc integer, intent(in) :: sfc_z0_type ! option for calculating surface roughness length over ocean - integer, dimension(im), intent(in) :: vegtype + integer, dimension(:), intent(in) :: vegtype logical, intent(in) :: redrag ! reduced drag coeff. flag for high wind over sea (j.han) - logical, dimension(im), intent(in) :: flag_iter, wet, dry, icy + logical, dimension(:), intent(in) :: flag_iter, wet, dry, icy - real(kind=kind_phys), dimension(im), intent(in) :: u10m,v10m + real(kind=kind_phys), dimension(:), intent(in) :: u10m,v10m real(kind=kind_phys), intent(in) :: rvrdm1, eps, epsm1, grav - real(kind=kind_phys), dimension(im), intent(in) :: & + real(kind=kind_phys), dimension(:), intent(in) :: & & ps,t1,q1,z1,prsl1,prslki,prsik1,prslk1, & & wind,sigmaf,shdmax, & & z0pert,ztpert ! mg, sfc-perts - real(kind=kind_phys), dimension(im), intent(in) :: & + real(kind=kind_phys), dimension(:), intent(in) :: & & tskin_wat, tskin_lnd, tskin_ice, & & tsurf_wat, tsurf_lnd, tsurf_ice, & & snwdph_wat,snwdph_lnd,snwdph_ice - real(kind=kind_phys), dimension(im), intent(in) :: z0rl_wav - real(kind=kind_phys), dimension(im), intent(inout) :: & + real(kind=kind_phys), dimension(:), intent(in) :: z0rl_wav + real(kind=kind_phys), dimension(:), intent(inout) :: & & z0rl_wat, z0rl_lnd, z0rl_ice, & & ustar_wat, ustar_lnd, ustar_ice, & & cm_wat, cm_lnd, cm_ice, & diff --git a/physics/sfc_diff.meta b/physics/sfc_diff.meta index 9f03b3bf1..342eaeea5 100644 --- a/physics/sfc_diff.meta +++ b/physics/sfc_diff.meta @@ -219,8 +219,8 @@ intent = in optional = F [sfc_z0_type] - standard_name = flag_for_surface_roughness_option_over_ocean - long_name = surface roughness options over ocean + standard_name = flag_for_surface_roughness_option_over_water + long_name = surface roughness options over water units = flag dimensions = () type = integer @@ -251,8 +251,8 @@ intent = in optional = F [tskin_wat] - standard_name = surface_skin_temperature_over_ocean_interstitial - long_name = surface skin temperature over ocean (temporary use as interstitial) + standard_name = surface_skin_temperature_over_water_interstitial + long_name = surface skin temperature over water (temporary use as interstitial) units = K dimensions = (horizontal_loop_extent) type = real @@ -278,8 +278,8 @@ intent = in optional = F [tsurf_wat] - standard_name = surface_skin_temperature_after_iteration_over_ocean - long_name = surface skin temperature after iteration over ocean + standard_name = surface_skin_temperature_after_iteration_over_water + long_name = surface skin temperature after iteration over water units = K dimensions = (horizontal_loop_extent) type = real @@ -305,8 +305,8 @@ intent = in optional = F [snwdph_wat] - standard_name = surface_snow_thickness_water_equivalent_over_ocean - long_name = water equivalent snow depth over ocean + standard_name = surface_snow_thickness_water_equivalent_over_water + long_name = water equivalent snow depth over water units = mm dimensions = (horizontal_loop_extent) type = real @@ -332,8 +332,8 @@ intent = in optional = F [z0rl_wat] - standard_name = surface_roughness_length_over_ocean_interstitial - long_name = surface roughness length over ocean (temporary use as interstitial) + standard_name = surface_roughness_length_over_water + long_name = surface roughness length over water (temporary use as interstitial) units = cm dimensions = (horizontal_loop_extent) type = real @@ -341,7 +341,7 @@ intent = inout optional = F [z0rl_lnd] - standard_name = surface_roughness_length_over_land_interstitial + standard_name = surface_roughness_length_over_land long_name = surface roughness length over land (temporary use as interstitial) units = cm dimensions = (horizontal_loop_extent) @@ -350,7 +350,7 @@ intent = inout optional = F [z0rl_ice] - standard_name = surface_roughness_length_over_ice_interstitial + standard_name = surface_roughness_length_over_ice long_name = surface roughness length over ice (temporary use as interstitial) units = cm dimensions = (horizontal_loop_extent) @@ -368,8 +368,8 @@ intent = in optional = F [ustar_wat] - standard_name = surface_friction_velocity_over_ocean - long_name = surface friction velocity over ocean + standard_name = surface_friction_velocity_over_water + long_name = surface friction velocity over water units = m s-1 dimensions = (horizontal_loop_extent) type = real @@ -395,8 +395,8 @@ intent = inout optional = F [cm_wat] - standard_name = surface_drag_coefficient_for_momentum_in_air_over_ocean - long_name = surface exchange coeff for momentum over ocean + standard_name = surface_drag_coefficient_for_momentum_in_air_over_water + long_name = surface exchange coeff for momentum over water units = none dimensions = (horizontal_loop_extent) type = real @@ -422,8 +422,8 @@ intent = inout optional = F [ch_wat] - standard_name = surface_drag_coefficient_for_heat_and_moisture_in_air_over_ocean - long_name = surface exchange coeff heat & moisture over ocean + standard_name = surface_drag_coefficient_for_heat_and_moisture_in_air_over_water + long_name = surface exchange coeff heat surface exchange coeff heat & moisture over ocean moisture over water units = none dimensions = (horizontal_loop_extent) type = real @@ -449,8 +449,8 @@ intent = inout optional = F [rb_wat] - standard_name = bulk_richardson_number_at_lowest_model_level_over_ocean - long_name = bulk Richardson number at the surface over ocean + standard_name = bulk_richardson_number_at_lowest_model_level_over_water + long_name = bulk Richardson number at the surface over water units = none dimensions = (horizontal_loop_extent) type = real @@ -476,8 +476,8 @@ intent = inout optional = F [stress_wat] - standard_name = surface_wind_stress_over_ocean - long_name = surface wind stress over ocean + standard_name = surface_wind_stress_over_water + long_name = surface wind stress over water units = m2 s-2 dimensions = (horizontal_loop_extent) type = real @@ -503,8 +503,8 @@ intent = inout optional = F [fm_wat] - standard_name = Monin_Obukhov_similarity_function_for_momentum_over_ocean - long_name = Monin-Obukhov similarity function for momentum over ocean + standard_name = Monin_Obukhov_similarity_function_for_momentum_over_water + long_name = Monin-Obukhov similarity function for momentum over water units = none dimensions = (horizontal_loop_extent) type = real @@ -530,8 +530,8 @@ intent = inout optional = F [fh_wat] - standard_name = Monin_Obukhov_similarity_function_for_heat_over_ocean - long_name = Monin-Obukhov similarity function for heat over ocean + standard_name = Monin_Obukhov_similarity_function_for_heat_over_water + long_name = Monin-Obukhov similarity function for heat over water units = none dimensions = (horizontal_loop_extent) type = real @@ -557,8 +557,8 @@ intent = inout optional = F [fm10_wat] - standard_name = Monin_Obukhov_similarity_function_for_momentum_at_10m_over_ocean - long_name = Monin-Obukhov similarity parameter for momentum at 10m over ocean + standard_name = Monin_Obukhov_similarity_function_for_momentum_at_10m_over_water + long_name = Monin-Obukhov similarity parameter for momentum at 10m over water units = none dimensions = (horizontal_loop_extent) type = real @@ -584,8 +584,8 @@ intent = inout optional = F [fh2_wat] - standard_name = Monin_Obukhov_similarity_function_for_heat_at_2m_over_ocean - long_name = Monin-Obukhov similarity parameter for heat at 2m over ocean + standard_name = Monin_Obukhov_similarity_function_for_heat_at_2m_over_water + long_name = Monin-Obukhov similarity parameter for heat at 2m over water units = none dimensions = (horizontal_loop_extent) type = real diff --git a/physics/sfc_drv.f b/physics/sfc_drv.f index 4343d5dff..1f786b496 100644 --- a/physics/sfc_drv.f +++ b/physics/sfc_drv.f @@ -234,9 +234,9 @@ subroutine lsm_noah_run & & epsm1, rvrdm1 real (kind=kind_phys), intent(in) :: pertvegf - integer, dimension(im), intent(in) :: soiltyp, vegtype, slopetyp + integer, dimension(:), intent(in) :: soiltyp, vegtype, slopetyp - real (kind=kind_phys), dimension(im), intent(in) :: ps, & + real (kind=kind_phys), dimension(:), intent(in) :: ps, & & t1, q1, sigmaf, sfcemis, dlwflx, dswsfc, snet, tg3, cm, & & ch, prsl1, prslki, wind, shdmin, shdmax, & & snoalb, sfalb, zf, & @@ -244,19 +244,19 @@ subroutine lsm_noah_run & real (kind=kind_phys), intent(in) :: delt - logical, dimension(im), intent(in) :: flag_iter, flag_guess, land + logical, dimension(:), intent(in) :: flag_iter, flag_guess, land logical, intent(in) :: lheatstrg ! --- in/out: - real (kind=kind_phys), dimension(im), intent(inout) :: weasd, & + real (kind=kind_phys), dimension(:), intent(inout) :: weasd, & & snwdph, tskin, tprcp, srflag, canopy, trans, tsurf, zorl - real (kind=kind_phys), dimension(im,km), intent(inout) :: & + real (kind=kind_phys), dimension(:,:), intent(inout) :: & & smc, stc, slc ! --- output: - real (kind=kind_phys), dimension(im), intent(inout) :: sncovr1, & + real (kind=kind_phys), dimension(:), intent(inout) :: sncovr1, & & qsurf, gflux, drain, evap, hflx, ep, runoff, cmm, chh, & & evbs, evcw, sbsno, snowc, stm, snohf, smcwlt2, smcref2, & & wet1 diff --git a/physics/sfc_drv.meta b/physics/sfc_drv.meta index ff1766774..9f2e51df3 100644 --- a/physics/sfc_drv.meta +++ b/physics/sfc_drv.meta @@ -566,7 +566,7 @@ intent = inout optional = F [zorl] - standard_name = surface_roughness_length_over_land_interstitial + standard_name = surface_roughness_length_over_land long_name = surface roughness length over land (temporary use as interstitial) units = cm dimensions = (horizontal_loop_extent) diff --git a/physics/sfc_drv_ruc.F90 b/physics/sfc_drv_ruc.F90 index 23d99d6ef..916144cf5 100644 --- a/physics/sfc_drv_ruc.F90 +++ b/physics/sfc_drv_ruc.F90 @@ -47,25 +47,25 @@ subroutine lsm_ruc_init (me, master, isot, ivegsrc, nlunit, & integer, intent(in) :: lsm_ruc, lsm - real (kind=kind_phys), dimension(im), intent(in) :: slmsk - real (kind=kind_phys), dimension(im), intent(in) :: stype - real (kind=kind_phys), dimension(im), intent(in) :: vtype - real (kind=kind_phys), dimension(im), intent(in) :: tsfc_lnd - real (kind=kind_phys), dimension(im), intent(in) :: tsfc_wat - real (kind=kind_phys), dimension(im), intent(in) :: tg3 + real (kind=kind_phys), dimension(:), intent(in) :: slmsk + real (kind=kind_phys), dimension(:), intent(in) :: stype + real (kind=kind_phys), dimension(:), intent(in) :: vtype + real (kind=kind_phys), dimension(:), intent(in) :: tsfc_lnd + real (kind=kind_phys), dimension(:), intent(in) :: tsfc_wat + real (kind=kind_phys), dimension(:), intent(in) :: tg3 - real (kind=kind_phys), dimension(im,lsoil), intent(in) :: smc,slc,stc + real (kind=kind_phys), dimension(:,:), intent(in) :: smc,slc,stc ! --- in/out: - real (kind=kind_phys), dimension(im), intent(inout) :: wetness + real (kind=kind_phys), dimension(:), intent(inout) :: wetness ! --- out - real (kind=kind_phys), dimension(:), intent(out) :: zs - real (kind=kind_phys), dimension(im,lsoil_ruc), intent(inout) :: sh2o, smfrkeep - real (kind=kind_phys), dimension(im,lsoil_ruc), intent(inout) :: tslb, smois - real (kind=kind_phys), dimension(im,kice), intent(out) :: tsice + real (kind=kind_phys), dimension(:), intent(out) :: zs + real (kind=kind_phys), dimension(:,:), intent(inout) :: sh2o, smfrkeep + real (kind=kind_phys), dimension(:,:), intent(inout) :: tslb, smois + real (kind=kind_phys), dimension(:,:), intent(out) :: tsice - real (kind=kind_phys), dimension(:), intent(out) :: pores, resid + real (kind=kind_phys), dimension(:), intent(out) :: pores, resid character(len=*), intent(out) :: errmsg integer, intent(out) :: errflg @@ -236,7 +236,6 @@ end subroutine lsm_ruc_finalize ! tslb - real, soil temp (k) im,km ! ! sh2o - real, liquid soil moisture im,km ! ! canopy - real, canopy moisture content (mm) im ! -! trans - real, total plant transpiration (m/s) im ! ! tsurf - real, surface skin temperature (after iteration) im ! ! ! ! outputs: ! @@ -250,6 +249,7 @@ end subroutine lsm_ruc_finalize ! evcw - real, canopy water evaporation (m/s) im ! ! sbsno - real, sublimation/deposit from snopack (m/s) im ! ! stm - real, total soil column moisture content (m) im ! +! trans - real, total plant transpiration (m/s) im ! ! zorl - real, surface roughness im ! ! wetness - real, normalized soil wetness im ! ! ! @@ -317,7 +317,7 @@ subroutine lsm_ruc_run & ! inputs integer, intent(in) :: lsm_ruc, lsm integer, intent(in) :: imp_physics, imp_physics_gfdl, imp_physics_thompson - real (kind=kind_phys), dimension(im), intent(in) :: & + real (kind=kind_phys), dimension(:), intent(in) :: & & t1, sigmaf, laixy, dlwflx, dswsfc, snet, tg3, & & prsl1, wind, shdmin, shdmax, & & snoalb, alvwf, alnwf, zf, qc, q1, & @@ -333,18 +333,19 @@ subroutine lsm_ruc_run & ! inputs con_pi, con_rd, & con_hvap, con_fvirt - logical, dimension(im), intent(in) :: flag_iter, flag_guess - logical, dimension(im), intent(in) :: land, icy, lake - logical, dimension(im), intent(in) :: flag_cice + logical, dimension(:), intent(in) :: flag_iter, flag_guess + logical, dimension(:), intent(in) :: land, icy, lake + logical, dimension(:), intent(in) :: flag_cice logical, intent(in) :: frac_grid logical, intent(in) :: do_mynnsfclay logical, intent(in) :: rdlai ! --- in/out: - integer, dimension(im), intent(inout) :: soiltyp, vegtype - real (kind=kind_phys), dimension(lsoil_ruc), intent(in) :: zs - real (kind=kind_phys), dimension(im), intent(inout) :: srflag, & + integer, dimension(:), intent(inout) :: soiltyp, vegtype + real (kind=kind_phys), dimension(:), intent(in) :: zs + real (kind=kind_phys), dimension(:), intent(in) :: srflag + real (kind=kind_phys), dimension(:), intent(inout) :: & & canopy, trans, smcwlt2, smcref2, & ! for land & weasd_lnd, snwdph_lnd, tskin_lnd, & @@ -356,15 +357,15 @@ subroutine lsm_ruc_run & ! inputs & sfcqc_ice, sfcqv_ice, fice, tice ! --- in - real (kind=kind_phys), dimension(im), intent(in) :: & + real (kind=kind_phys), dimension(:), intent(in) :: & & rainnc, rainc, ice, snow, graupel ! --- in/out: ! --- on RUC levels - real (kind=kind_phys), dimension(im,lsoil_ruc), intent(inout) :: & + real (kind=kind_phys), dimension(:,:), intent(inout) :: & & smois, tsice, tslb, sh2o, keepfr, smfrkeep ! --- output: - real (kind=kind_phys), dimension(im), intent(inout) :: & + real (kind=kind_phys), dimension(:), intent(inout) :: & & rhosnf, runof, drain, runoff, srunoff, evbs, evcw, & & stm, wetness, semis_lnd, semis_ice, & ! for land diff --git a/physics/sfc_drv_ruc.meta b/physics/sfc_drv_ruc.meta index 229bce1fc..e504c0700 100644 --- a/physics/sfc_drv_ruc.meta +++ b/physics/sfc_drv_ruc.meta @@ -144,7 +144,7 @@ dimensions = (horizontal_dimension) type = real kind = kind_phys - intent = inout + intent = in optional = F [tsfc_lnd] standard_name = surface_skin_temperature @@ -153,7 +153,7 @@ dimensions = (horizontal_dimension) type = real kind = kind_phys - intent = inout + intent = in optional = F [tsfc_wat] standard_name = sea_surface_temperature @@ -162,7 +162,7 @@ dimensions = (horizontal_dimension) type = real kind = kind_phys - intent = inout + intent = in optional = F [tg3] standard_name = deep_soil_temperature @@ -731,7 +731,7 @@ dimensions = (horizontal_loop_extent) type = real kind = kind_phys - intent = in + intent = inout optional = F [smcwlt2] standard_name = volume_fraction_of_condensed_water_in_soil_at_wilting_point @@ -815,8 +815,8 @@ intent = in optional = F [ch_wat] - standard_name = surface_drag_coefficient_for_heat_and_moisture_in_air_over_ocean - long_name = surface exchange coeff heat & moisture over ocean + standard_name = surface_drag_coefficient_for_heat_and_moisture_in_air_over_water + long_name = surface exchange coeff heat surface exchange coeff heat & moisture over ocean moisture over water units = none dimensions = (horizontal_loop_extent) type = real @@ -824,8 +824,8 @@ intent = in optional = F [tskin_wat] - standard_name = surface_skin_temperature_over_ocean_interstitial - long_name = surface skin temperature over ocean (temporary use as interstitial) + standard_name = surface_skin_temperature_over_water_interstitial + long_name = surface skin temperature over water (temporary use as interstitial) units = K dimensions = (horizontal_loop_extent) type = real @@ -893,7 +893,7 @@ dimensions = (horizontal_loop_extent) type = real kind = kind_phys - intent = in + intent = inout optional = F [weasd_ice] standard_name = water_equivalent_accumulated_snow_depth_over_ice @@ -992,7 +992,7 @@ dimensions = (horizontal_loop_extent) type = real kind = kind_phys - intent = out + intent = inout optional = F [tsurf_lnd] standard_name = surface_skin_temperature_after_iteration_over_land @@ -1013,7 +1013,7 @@ intent = inout optional = F [z0rl_lnd] - standard_name = surface_roughness_length_over_land_interstitial + standard_name = surface_roughness_length_over_land long_name = surface roughness length over land (temporary use as interstitial) units = cm dimensions = (horizontal_loop_extent) @@ -1055,7 +1055,7 @@ dimensions = (horizontal_loop_extent) type = real kind = kind_phys - intent = out + intent = inout optional = F [evap_lnd] standard_name = kinematic_surface_upward_latent_heat_flux_over_land @@ -1064,7 +1064,7 @@ dimensions = (horizontal_loop_extent) type = real kind = kind_phys - intent = out + intent = inout optional = F [hflx_lnd] standard_name = kinematic_surface_upward_sensible_heat_flux_over_land @@ -1073,7 +1073,7 @@ dimensions = (horizontal_loop_extent) type = real kind = kind_phys - intent = out + intent = inout optional = F [runof] standard_name = surface_runoff_flux @@ -1082,7 +1082,7 @@ dimensions = (horizontal_loop_extent) type = real kind = kind_phys - intent = out + intent = inout optional = F [runoff] standard_name = total_runoff @@ -1109,7 +1109,7 @@ dimensions = (horizontal_loop_extent) type = real kind = kind_phys - intent = out + intent = inout optional = F [cm_lnd] standard_name = surface_drag_coefficient_for_momentum_in_air_over_land @@ -1136,7 +1136,7 @@ dimensions = (horizontal_loop_extent) type = real kind = kind_phys - intent = out + intent = inout optional = F [evcw] standard_name = canopy_upward_latent_heat_flux @@ -1145,7 +1145,7 @@ dimensions = (horizontal_loop_extent) type = real kind = kind_phys - intent = out + intent = inout optional = F [stm] standard_name = soil_moisture_content @@ -1220,7 +1220,7 @@ intent = inout optional = F [z0rl_ice] - standard_name = surface_roughness_length_over_ice_interstitial + standard_name = surface_roughness_length_over_ice long_name = surface roughness length over ice (temporary use as interstitial) units = cm dimensions = (horizontal_loop_extent) @@ -1244,7 +1244,7 @@ dimensions = (horizontal_loop_extent) type = real kind = kind_phys - intent = out + intent = inout optional = F [evap_ice] standard_name = kinematic_surface_upward_latent_heat_flux_over_ice @@ -1253,7 +1253,7 @@ dimensions = (horizontal_loop_extent) type = real kind = kind_phys - intent = out + intent = inout optional = F [ep1d_ice] standard_name = surface_upward_potential_latent_heat_flux_over_ice @@ -1271,7 +1271,7 @@ dimensions = (horizontal_loop_extent) type = real kind = kind_phys - intent = out + intent = inout optional = F [cm_ice] standard_name = surface_drag_coefficient_for_momentum_in_air_over_ice @@ -1307,7 +1307,7 @@ dimensions = (horizontal_loop_extent) type = real kind = kind_phys - intent = out + intent = inout optional = F [sbsno] standard_name = snow_deposition_sublimation_upward_latent_heat_flux @@ -1316,7 +1316,7 @@ dimensions = (horizontal_loop_extent) type = real kind = kind_phys - intent = out + intent = inout optional = F [cmm_lnd] standard_name = surface_drag_wind_speed_for_momentum_in_air_over_land @@ -1325,7 +1325,7 @@ dimensions = (horizontal_loop_extent) type = real kind = kind_phys - intent = out + intent = inout optional = F [chh_lnd] standard_name = surface_drag_mass_flux_for_heat_and_moisture_in_air_over_land @@ -1334,7 +1334,7 @@ dimensions = (horizontal_loop_extent) type = real kind = kind_phys - intent = out + intent = inout optional = F [cmm_ice] standard_name = surface_drag_wind_speed_for_momentum_in_air_over_ice @@ -1343,7 +1343,7 @@ dimensions = (horizontal_loop_extent) type = real kind = kind_phys - intent = out + intent = inout optional = F [chh_ice] standard_name = surface_drag_mass_flux_for_heat_and_moisture_in_air_over_ice @@ -1352,7 +1352,7 @@ dimensions = (horizontal_loop_extent) type = real kind = kind_phys - intent = out + intent = inout optional = F [flag_iter] standard_name = flag_for_iteration diff --git a/physics/sfc_noah_wrfv4.F90 b/physics/sfc_noah_wrfv4.F90 index c435b2d38..038adf1c6 100644 --- a/physics/sfc_noah_wrfv4.F90 +++ b/physics/sfc_noah_wrfv4.F90 @@ -94,7 +94,8 @@ end subroutine sfc_noah_wrfv4_finalize !! !> \section general_noah_wrfv4_drv NOAH LSM WRFv4 General Algorithm !> @{ - subroutine sfc_noah_wrfv4_run (im, isice, flag_lsm, flag_lsm_glacier, srflag, isurban, rdlai, & + subroutine sfc_noah_wrfv4_run ( & + im, isice, flag_lsm, flag_lsm_glacier, srflag, isurban, rdlai, & ua_phys, usemonalb, aoasis, fasdas, dt, zlvl, & nsoil, sthick, lwdn, soldn, solnet, sfcprs, prcp, sfctmp, q1k, & th1, qs1, dqsdt2, vegtyp, soiltyp, slopetyp, shdfac, shmin, & @@ -118,20 +119,20 @@ subroutine sfc_noah_wrfv4_run (im, isice, flag_lsm, flag_lsm_glacier, srflag, is real(kind=kind_phys), intent(in) :: dt, cp, rd, sigma, cph2o, cpice, lsubf - integer, dimension(im), intent(in) :: vegtyp, soiltyp, slopetyp - logical, dimension(im), intent(in) :: flag_lsm, flag_lsm_glacier - real(kind=kind_phys), dimension(im), intent(in) :: srflag, zlvl, lwdn, soldn, solnet, & + integer, dimension(:), intent(in) :: vegtyp, soiltyp, slopetyp + logical, dimension(:), intent(in) :: flag_lsm, flag_lsm_glacier + real(kind=kind_phys), dimension(:), intent(in) :: srflag, zlvl, lwdn, soldn, solnet, & sfcprs, prcp, sfctmp, q1k, th1, qs1, & dqsdt2, shmin, shmax, snoalb, tbot - real(kind=kind_phys), dimension(nsoil), intent(in) :: sthick + real(kind=kind_phys), dimension(:), intent(in) :: sthick - real(kind=kind_phys), dimension(im), intent(inout) :: shdfac, albbrd, z0brd, z0k, emissi, & + real(kind=kind_phys), dimension(:), intent(inout) :: shdfac, albbrd, z0brd, z0k, emissi, & cmc, t1, snowhk, sneqv, chk, flx1, & flx2, flx3, ribb, snotime - real(kind=kind_phys), dimension(im,nsoil), intent(inout) :: stc, smc, swc + real(kind=kind_phys), dimension(:,:), intent(inout) :: stc, smc, swc !variables that are intent(out) in module_sf_noahlsm, but are inout here due to being set within an IF statement - real(kind=kind_phys), dimension(im), intent(inout) :: embrd, sheat, eta, ec, & + real(kind=kind_phys), dimension(:), intent(inout) :: embrd, sheat, eta, ec, & edir, ett, esnow, etp, ssoil, sncovr, & runoff1, runoff2, soilm, qsurf, smcwlt, & smcref, smcmax diff --git a/physics/sfc_noah_wrfv4.meta b/physics/sfc_noah_wrfv4.meta index 5cb925808..f35e4ad54 100644 --- a/physics/sfc_noah_wrfv4.meta +++ b/physics/sfc_noah_wrfv4.meta @@ -402,7 +402,7 @@ intent = inout optional = F [z0k] - standard_name = surface_roughness_length_over_land_interstitial + standard_name = surface_roughness_length_over_land long_name = surface roughness length over land (temporary use as interstitial) units = m dimensions = (horizontal_loop_extent) @@ -749,7 +749,7 @@ dimensions = (horizontal_loop_extent) type = real kind = kind_phys - intent = in + intent = inout optional = F [errmsg] standard_name = ccpp_error_message diff --git a/physics/sfc_noah_wrfv4_interstitial.F90 b/physics/sfc_noah_wrfv4_interstitial.F90 index b30f8a131..7b37de568 100644 --- a/physics/sfc_noah_wrfv4_interstitial.F90 +++ b/physics/sfc_noah_wrfv4_interstitial.F90 @@ -144,21 +144,21 @@ subroutine sfc_noah_wrfv4_pre_run (im, nsoil, ialb, isice, land, & ! Note that the version of NOAH LSM expected here is "generic" - there are no urban, fasdas, or ! or University of Arizona(?) additions. - integer, intent(in) :: im, nsoil, ialb, isice - logical, intent(in) :: restart, first_time_step - real(kind=kind_phys), intent(in) :: dt, rhowater, rd, rvrdm1, eps, epsm1 - - logical, dimension(im), intent(in) :: flag_guess, flag_iter, land - real(kind=kind_phys), dimension(im), intent(in) :: sfcprs, tprcp, sfctmp, q1, prslki, wind, cm, ch, snwdph - real(kind=kind_phys), dimension(im), intent(in) :: weasd, tsfc, vtype - real(kind=kind_phys), dimension(im,nsoil), intent(in) :: smc, stc, slc - - logical, dimension(im), intent(inout) :: flag_lsm, flag_lsm_glacier - real(kind=kind_phys), dimension(im), intent(inout) :: snoalb, prcp, q2k, rho1, qs1, th1, dqsdt2, canopy, cmc, snowhk, chk, cmm, chh - real(kind=kind_phys), dimension(im), intent(inout) :: weasd_save, snwdph_save, tsfc_save, canopy_save - real(kind=kind_phys), dimension(im,nsoil), intent(inout) :: smc_save, stc_save, slc_save - real(kind=kind_phys), dimension(im), intent(inout) :: ep, evap, hflx, gflux, drain, evbs, evcw, trans, sbsno, snowc, snohf - real(kind=kind_phys), dimension(nsoil), intent(inout) :: sthick + integer, intent(in) :: im, nsoil, ialb, isice + logical, intent(in) :: restart, first_time_step + real(kind=kind_phys), intent(in) :: dt, rhowater, rd, rvrdm1, eps, epsm1 + + logical, dimension(:), intent(in) :: flag_guess, flag_iter, land + real(kind=kind_phys), dimension(:), intent(in) :: sfcprs, tprcp, sfctmp, q1, prslki, wind, cm, ch, snwdph + real(kind=kind_phys), dimension(:), intent(in) :: weasd, tsfc, vtype + real(kind=kind_phys), dimension(:,:), intent(in) :: smc, stc, slc + + logical, dimension(:), intent(inout) :: flag_lsm, flag_lsm_glacier + real(kind=kind_phys), dimension(:), intent(inout) :: snoalb, prcp, q2k, rho1, qs1, th1, dqsdt2, canopy, cmc, snowhk, chk, cmm, chh + real(kind=kind_phys), dimension(:), intent(inout) :: weasd_save, snwdph_save, tsfc_save, canopy_save + real(kind=kind_phys), dimension(:,:), intent(inout) :: smc_save, stc_save, slc_save + real(kind=kind_phys), dimension(:), intent(inout) :: ep, evap, hflx, gflux, drain, evbs, evcw, trans, sbsno, snowc, snohf + real(kind=kind_phys), dimension(:), intent(inout) :: sthick character(len=*), intent(out) :: errmsg integer, intent(out) :: errflg @@ -688,17 +688,17 @@ subroutine sfc_noah_wrfv4_post_run (im, nsoil, land, flag_guess, flag_lsm, & implicit none integer, intent(in) :: im, nsoil - logical, dimension(im), intent(in) :: land, flag_guess, flag_lsm + logical, dimension(:), intent(in) :: land, flag_guess, flag_lsm real(kind=kind_phys), intent(in) :: rhowater, cp, hvap - real(kind=kind_phys), dimension(im), intent(in) :: cmc, rho1, sheat, eta, & + real(kind=kind_phys), dimension(:), intent(in) :: cmc, rho1, sheat, eta, & flx1, flx2, flx3, sncovr, runoff1, runoff2, soilm, snowhk - real(kind=kind_phys), dimension(im), intent(in) :: weasd_save, snwdph_save, tsfc_save, tsurf, canopy_save, smcmax - real(kind=kind_phys), dimension(im,nsoil), intent(in) :: smc_save, stc_save, slc_save + real(kind=kind_phys), dimension(:), intent(in) :: weasd_save, snwdph_save, tsfc_save, tsurf, canopy_save, smcmax + real(kind=kind_phys), dimension(:,:), intent(in) :: smc_save, stc_save, slc_save - real(kind=kind_phys), dimension(im), intent(inout) :: canopy, shflx, lhflx, & + real(kind=kind_phys), dimension(:), intent(inout) :: canopy, shflx, lhflx, & snohf, snowc, runoff, drain, stm, wet1 - real(kind=kind_phys), dimension(im), intent(inout) :: weasd, snwdph, tsfc - real(kind=kind_phys), dimension(im, nsoil), intent(inout) :: smc, stc, slc + real(kind=kind_phys), dimension(:), intent(inout) :: weasd, snwdph, tsfc + real(kind=kind_phys), dimension(:,:), intent(inout) :: smc, stc, slc character(len=*), intent(out) :: errmsg integer, intent(out) :: errflg diff --git a/physics/sfc_noahmp_drv.F90 b/physics/sfc_noahmp_drv.F90 index 392e29071..a1f65f26a 100644 --- a/physics/sfc_noahmp_drv.F90 +++ b/physics/sfc_noahmp_drv.F90 @@ -92,11 +92,11 @@ end subroutine noahmpdrv_finalize !! - If a "guess" run, restore the land-related prognostic fields. ! ! !----------------------------------- - subroutine noahmpdrv_run & + subroutine noahmpdrv_run & !................................... ! --- inputs: - ( im, km, itime, ps, u1, v1, t1, q1, soiltyp, vegtype, & - sigmaf, dlwflx, dswsfc, snet, delt, tg3, cm, ch, & + ( im, km, lsnowl, itime, ps, u1, v1, t1, q1, soiltyp, & + vegtype, sigmaf, dlwflx, dswsfc, snet, delt, tg3, cm, ch, & prsl1, prslki, zf, dry, wind, slopetyp, & shdmin, shdmax, snoalb, sfalb, flag_iter, flag_guess, & idveg, iopt_crs, iopt_btr, iopt_run, iopt_sfc, iopt_frz, & @@ -153,140 +153,141 @@ subroutine noahmpdrv_run & ! --- CCPP interface fields (in call order) ! - integer , intent(in) :: im ! horiz dimension and num of used pts - integer , intent(in) :: km ! vertical soil layer dimension - integer , intent(in) :: itime ! NOT USED - real(kind=kind_phys), dimension(im) , intent(in) :: ps ! surface pressure [Pa] - real(kind=kind_phys), dimension(im) , intent(in) :: u1 ! u-component of wind [m/s] - real(kind=kind_phys), dimension(im) , intent(in) :: v1 ! u-component of wind [m/s] - real(kind=kind_phys), dimension(im) , intent(in) :: t1 ! layer 1 temperature [K] - real(kind=kind_phys), dimension(im) , intent(in) :: q1 ! layer 1 specific humidity [kg/kg] - integer , dimension(im) , intent(in) :: soiltyp ! soil type (integer index) - integer , dimension(im) , intent(in) :: vegtype ! vegetation type (integer index) - real(kind=kind_phys), dimension(im) , intent(in) :: sigmaf ! areal fractional cover of green vegetation - real(kind=kind_phys), dimension(im) , intent(in) :: dlwflx ! downward longwave radiation [W/m2] - real(kind=kind_phys), dimension(im) , intent(in) :: dswsfc ! downward shortwave radiation [W/m2] - real(kind=kind_phys), dimension(im) , intent(in) :: snet ! total sky sfc netsw flx into ground[W/m2] - real(kind=kind_phys) , intent(in) :: delt ! time interval [s] - real(kind=kind_phys), dimension(im) , intent(in) :: tg3 ! deep soil temperature [K] - real(kind=kind_phys), dimension(im) , intent(in) :: cm ! surface exchange coeff for momentum [-] - real(kind=kind_phys), dimension(im) , intent(in) :: ch ! surface exchange coeff heat & moisture[-] - real(kind=kind_phys), dimension(im) , intent(in) :: prsl1 ! sfc layer 1 mean pressure [Pa] - real(kind=kind_phys), dimension(im) , intent(in) :: prslki ! to calculate potential temperature - real(kind=kind_phys), dimension(im) , intent(in) :: zf ! height of bottom layer [m] - logical , dimension(im) , intent(in) :: dry ! = T if a point with any land - real(kind=kind_phys), dimension(im) , intent(in) :: wind ! wind speed [m/s] - integer , dimension(im) , intent(in) :: slopetyp ! surface slope classification - real(kind=kind_phys), dimension(im) , intent(in) :: shdmin ! min green vegetation coverage [fraction] - real(kind=kind_phys), dimension(im) , intent(in) :: shdmax ! max green vegetation coverage [fraction] - real(kind=kind_phys), dimension(im) , intent(in) :: snoalb ! upper bound on max albedo over deep snow - real(kind=kind_phys), dimension(im) , intent(inout) :: sfalb ! mean surface albedo [fraction] - logical , dimension(im) , intent(in) :: flag_iter ! - logical , dimension(im) , intent(in) :: flag_guess ! - integer , intent(in) :: idveg ! option for dynamic vegetation - integer , intent(in) :: iopt_crs ! option for canopy stomatal resistance - integer , intent(in) :: iopt_btr ! option for soil moisture factor for stomatal resistance - integer , intent(in) :: iopt_run ! option for runoff and groundwater - integer , intent(in) :: iopt_sfc ! option for surface layer drag coeff (ch & cm) - integer , intent(in) :: iopt_frz ! option for supercooled liquid water (or ice fraction) - integer , intent(in) :: iopt_inf ! option for frozen soil permeability - integer , intent(in) :: iopt_rad ! option for radiation transfer - integer , intent(in) :: iopt_alb ! option for ground snow surface albedo - integer , intent(in) :: iopt_snf ! option for partitioning precipitation into rainfall & snowfall - integer , intent(in) :: iopt_tbot ! option for lower boundary condition of soil temperature - integer , intent(in) :: iopt_stc ! option for snow/soil temperature time scheme (only layer 1) - real(kind=kind_phys), dimension(im) , intent(in) :: xlatin ! latitude - real(kind=kind_phys), dimension(im) , intent(in) :: xcoszin ! cosine of zenith angle - integer , intent(in) :: iyrlen ! year length [days] - real(kind=kind_phys) , intent(in) :: julian ! julian day of year - real(kind=kind_phys), dimension(im) , intent(in) :: rainn_mp ! microphysics non-convective precipitation [mm] - real(kind=kind_phys), dimension(im) , intent(in) :: rainc_mp ! microphysics convective precipitation [mm] - real(kind=kind_phys), dimension(im) , intent(in) :: snow_mp ! microphysics snow [mm] - real(kind=kind_phys), dimension(im) , intent(in) :: graupel_mp ! microphysics graupel [mm] - real(kind=kind_phys), dimension(im) , intent(in) :: ice_mp ! microphysics ice/hail [mm] - real(kind=kind_phys) , intent(in) :: con_hvap ! latent heat condensation [J/kg] - real(kind=kind_phys) , intent(in) :: con_cp ! specific heat air [J/kg/K] - real(kind=kind_phys) , intent(in) :: con_jcal ! joules per calorie (not used) - real(kind=kind_phys) , intent(in) :: rhoh2o ! density of water [kg/m^3] - real(kind=kind_phys) , intent(in) :: con_eps ! Rd/Rv - real(kind=kind_phys) , intent(in) :: con_epsm1 ! Rd/Rv - 1 - real(kind=kind_phys) , intent(in) :: con_fvirt ! Rv/Rd - 1 - real(kind=kind_phys) , intent(in) :: con_rd ! gas constant air [J/kg/K] - real(kind=kind_phys) , intent(in) :: con_hfus ! lat heat H2O fusion [J/kg] - real(kind=kind_phys), dimension(im) , intent(inout) :: weasd ! water equivalent accumulated snow depth [mm] - real(kind=kind_phys), dimension(im) , intent(inout) :: snwdph ! snow depth [mm] - real(kind=kind_phys), dimension(im) , intent(inout) :: tskin ! ground surface skin temperature [K] - real(kind=kind_phys), dimension(im) , intent(inout) :: tprcp ! total precipitation [m] - real(kind=kind_phys), dimension(im) , intent(inout) :: srflag ! snow/rain flag for precipitation - real(kind=kind_phys), dimension(im,km) , intent(inout) :: smc ! total soil moisture content [m3/m3] - real(kind=kind_phys), dimension(im,km) , intent(inout) :: stc ! soil temp [K] - real(kind=kind_phys), dimension(im,km) , intent(inout) :: slc ! liquid soil moisture [m3/m3] - real(kind=kind_phys), dimension(im) , intent(inout) :: canopy ! canopy moisture content [mm] - real(kind=kind_phys), dimension(im) , intent(inout) :: trans ! total plant transpiration [m/s] - real(kind=kind_phys), dimension(im) , intent(inout) :: tsurf ! surface skin temperature [after iteration] - real(kind=kind_phys), dimension(im) , intent(inout) :: zorl ! surface roughness [cm] - real(kind=kind_phys), dimension(im) , intent(inout) :: snowxy ! actual no. of snow layers - real(kind=kind_phys), dimension(im) , intent(inout) :: tvxy ! vegetation leaf temperature [K] - real(kind=kind_phys), dimension(im) , intent(inout) :: tgxy ! bulk ground surface temperature [K] - real(kind=kind_phys), dimension(im) , intent(inout) :: canicexy ! canopy-intercepted ice [mm] - real(kind=kind_phys), dimension(im) , intent(inout) :: canliqxy ! canopy-intercepted liquid water [mm] - real(kind=kind_phys), dimension(im) , intent(inout) :: eahxy ! canopy air vapor pressure [Pa] - real(kind=kind_phys), dimension(im) , intent(inout) :: tahxy ! canopy air temperature [K] - real(kind=kind_phys), dimension(im) , intent(inout) :: cmxy ! bulk momentum drag coefficient [m/s] - real(kind=kind_phys), dimension(im) , intent(inout) :: chxy ! bulk sensible heat exchange coefficient [m/s] - real(kind=kind_phys), dimension(im) , intent(inout) :: fwetxy ! wetted or snowed fraction of the canopy [-] - real(kind=kind_phys), dimension(im) , intent(inout) :: sneqvoxy ! snow mass at last time step[mm h2o] - real(kind=kind_phys), dimension(im) , intent(inout) :: alboldxy ! snow albedo at last time step [-] - real(kind=kind_phys), dimension(im) , intent(inout) :: qsnowxy ! snowfall on the ground [mm/s] - real(kind=kind_phys), dimension(im) , intent(inout) :: wslakexy ! lake water storage [mm] - real(kind=kind_phys), dimension(im) , intent(inout) :: zwtxy ! water table depth [m] - real(kind=kind_phys), dimension(im) , intent(inout) :: waxy ! water in the "aquifer" [mm] - real(kind=kind_phys), dimension(im) , intent(inout) :: wtxy ! groundwater storage [mm] - real(kind=kind_phys), dimension(im,-2:0), intent(inout) :: tsnoxy ! snow temperature [K] - real(kind=kind_phys), dimension(im,-2:4), intent(inout) :: zsnsoxy ! snow/soil layer depth [m] - real(kind=kind_phys), dimension(im,-2:0), intent(inout) :: snicexy ! snow layer ice [mm] - real(kind=kind_phys), dimension(im,-2:0), intent(inout) :: snliqxy ! snow layer liquid water [mm] - real(kind=kind_phys), dimension(im) , intent(inout) :: lfmassxy ! leaf mass [g/m2] - real(kind=kind_phys), dimension(im) , intent(inout) :: rtmassxy ! mass of fine roots [g/m2] - real(kind=kind_phys), dimension(im) , intent(inout) :: stmassxy ! stem mass [g/m2] - real(kind=kind_phys), dimension(im) , intent(inout) :: woodxy ! mass of wood (incl. woody roots) [g/m2] - real(kind=kind_phys), dimension(im) , intent(inout) :: stblcpxy ! stable carbon in deep soil [g/m2] - real(kind=kind_phys), dimension(im) , intent(inout) :: fastcpxy ! short-lived carbon, shallow soil [g/m2] - real(kind=kind_phys), dimension(im) , intent(inout) :: xlaixy ! leaf area index [m2/m2] - real(kind=kind_phys), dimension(im) , intent(inout) :: xsaixy ! stem area index [m2/m2] - real(kind=kind_phys), dimension(im) , intent(inout) :: taussxy ! snow age factor [-] - real(kind=kind_phys), dimension(im,1:4) , intent(inout) :: smoiseq ! eq volumetric soil moisture [m3/m3] - real(kind=kind_phys), dimension(im) , intent(inout) :: smcwtdxy ! soil moisture content in the layer to the water table when deep - real(kind=kind_phys), dimension(im) , intent(inout) :: deeprechxy ! recharge to the water table when deep - real(kind=kind_phys), dimension(im) , intent(inout) :: rechxy ! recharge to the water table - real(kind=kind_phys), dimension(im) , intent(out) :: albdvis ! albedo - direct visible [fraction] - real(kind=kind_phys), dimension(im) , intent(out) :: albdnir ! albedo - direct NIR [fraction] - real(kind=kind_phys), dimension(im) , intent(out) :: albivis ! albedo - diffuse visible [fraction] - real(kind=kind_phys), dimension(im) , intent(out) :: albinir ! albedo - diffuse NIR [fraction] - real(kind=kind_phys), dimension(im) , intent(out) :: emiss ! sfc lw emissivity [fraction] - real(kind=kind_phys), dimension(im) , intent(out) :: sncovr1 ! snow cover over land [fraction] - real(kind=kind_phys), dimension(im) , intent(out) :: qsurf ! specific humidity at sfc [kg/kg] - real(kind=kind_phys), dimension(im) , intent(out) :: gflux ! soil heat flux [W/m2] - real(kind=kind_phys), dimension(im) , intent(out) :: drain ! subsurface runoff [mm/s] - real(kind=kind_phys), dimension(im) , intent(out) :: evap ! total latent heat flux [W/m2] - real(kind=kind_phys), dimension(im) , intent(out) :: hflx ! sensible heat flux [W/m2] - real(kind=kind_phys), dimension(im) , intent(out) :: ep ! potential evaporation [mm/s?] - real(kind=kind_phys), dimension(im) , intent(out) :: runoff ! surface runoff [mm/s] - real(kind=kind_phys), dimension(im) , intent(out) :: cmm ! cm*U [m/s] - real(kind=kind_phys), dimension(im) , intent(out) :: chh ! ch*U*rho [kg/m2/s] - real(kind=kind_phys), dimension(im) , intent(out) :: evbs ! direct soil evaporation [m/s] - real(kind=kind_phys), dimension(im) , intent(out) :: evcw ! canopy water evaporation [m/s] - real(kind=kind_phys), dimension(im) , intent(out) :: sbsno ! sublimation/deposit from snopack [W/m2] - real(kind=kind_phys), dimension(im) , intent(out) :: snowc ! fractional snow cover [-] - real(kind=kind_phys), dimension(im) , intent(out) :: stm ! total soil column moisture content [mm] - real(kind=kind_phys), dimension(im) , intent(out) :: snohf ! snow/freezing-rain latent heat flux [W/m2] - real(kind=kind_phys), dimension(im) , intent(out) :: smcwlt2 ! dry soil moisture threshold [m3/m3] - real(kind=kind_phys), dimension(im) , intent(out) :: smcref2 ! soil moisture threshold [m3/m3] - real(kind=kind_phys), dimension(im) , intent(out) :: wet1 ! normalized surface soil saturated fraction - real(kind=kind_phys), dimension(im) , intent(out) :: t2mmp ! combined T2m from tiles - real(kind=kind_phys), dimension(im) , intent(out) :: q2mp ! combined q2m from tiles - character(len=*) , intent(out) :: errmsg - integer , intent(out) :: errflg + integer , intent(in) :: im ! horiz dimension and num of used pts + integer , intent(in) :: km ! vertical soil layer dimension + integer , intent(in) :: lsnowl ! lower bound for snow level arrays + integer , intent(in) :: itime ! NOT USED + real(kind=kind_phys), dimension(:) , intent(in) :: ps ! surface pressure [Pa] + real(kind=kind_phys), dimension(:) , intent(in) :: u1 ! u-component of wind [m/s] + real(kind=kind_phys), dimension(:) , intent(in) :: v1 ! u-component of wind [m/s] + real(kind=kind_phys), dimension(:) , intent(in) :: t1 ! layer 1 temperature [K] + real(kind=kind_phys), dimension(:) , intent(in) :: q1 ! layer 1 specific humidity [kg/kg] + integer , dimension(:) , intent(in) :: soiltyp ! soil type (integer index) + integer , dimension(:) , intent(in) :: vegtype ! vegetation type (integer index) + real(kind=kind_phys), dimension(:) , intent(in) :: sigmaf ! areal fractional cover of green vegetation + real(kind=kind_phys), dimension(:) , intent(in) :: dlwflx ! downward longwave radiation [W/m2] + real(kind=kind_phys), dimension(:) , intent(in) :: dswsfc ! downward shortwave radiation [W/m2] + real(kind=kind_phys), dimension(:) , intent(in) :: snet ! total sky sfc netsw flx into ground[W/m2] + real(kind=kind_phys) , intent(in) :: delt ! time interval [s] + real(kind=kind_phys), dimension(:) , intent(in) :: tg3 ! deep soil temperature [K] + real(kind=kind_phys), dimension(:) , intent(in) :: cm ! surface exchange coeff for momentum [-] + real(kind=kind_phys), dimension(:) , intent(in) :: ch ! surface exchange coeff heat & moisture[-] + real(kind=kind_phys), dimension(:) , intent(in) :: prsl1 ! sfc layer 1 mean pressure [Pa] + real(kind=kind_phys), dimension(:) , intent(in) :: prslki ! to calculate potential temperature + real(kind=kind_phys), dimension(:) , intent(in) :: zf ! height of bottom layer [m] + logical , dimension(:) , intent(in) :: dry ! = T if a point with any land + real(kind=kind_phys), dimension(:) , intent(in) :: wind ! wind speed [m/s] + integer , dimension(:) , intent(in) :: slopetyp ! surface slope classification + real(kind=kind_phys), dimension(:) , intent(in) :: shdmin ! min green vegetation coverage [fraction] + real(kind=kind_phys), dimension(:) , intent(in) :: shdmax ! max green vegetation coverage [fraction] + real(kind=kind_phys), dimension(:) , intent(in) :: snoalb ! upper bound on max albedo over deep snow + real(kind=kind_phys), dimension(:) , intent(inout) :: sfalb ! mean surface albedo [fraction] + logical , dimension(:) , intent(in) :: flag_iter ! + logical , dimension(:) , intent(in) :: flag_guess ! + integer , intent(in) :: idveg ! option for dynamic vegetation + integer , intent(in) :: iopt_crs ! option for canopy stomatal resistance + integer , intent(in) :: iopt_btr ! option for soil moisture factor for stomatal resistance + integer , intent(in) :: iopt_run ! option for runoff and groundwater + integer , intent(in) :: iopt_sfc ! option for surface layer drag coeff (ch & cm) + integer , intent(in) :: iopt_frz ! option for supercooled liquid water (or ice fraction) + integer , intent(in) :: iopt_inf ! option for frozen soil permeability + integer , intent(in) :: iopt_rad ! option for radiation transfer + integer , intent(in) :: iopt_alb ! option for ground snow surface albedo + integer , intent(in) :: iopt_snf ! option for partitioning precipitation into rainfall & snowfall + integer , intent(in) :: iopt_tbot ! option for lower boundary condition of soil temperature + integer , intent(in) :: iopt_stc ! option for snow/soil temperature time scheme (only layer 1) + real(kind=kind_phys), dimension(:) , intent(in) :: xlatin ! latitude + real(kind=kind_phys), dimension(:) , intent(in) :: xcoszin ! cosine of zenith angle + integer , intent(in) :: iyrlen ! year length [days] + real(kind=kind_phys) , intent(in) :: julian ! julian day of year + real(kind=kind_phys), dimension(:) , intent(in) :: rainn_mp ! microphysics non-convective precipitation [mm] + real(kind=kind_phys), dimension(:) , intent(in) :: rainc_mp ! microphysics convective precipitation [mm] + real(kind=kind_phys), dimension(:) , intent(in) :: snow_mp ! microphysics snow [mm] + real(kind=kind_phys), dimension(:) , intent(in) :: graupel_mp ! microphysics graupel [mm] + real(kind=kind_phys), dimension(:) , intent(in) :: ice_mp ! microphysics ice/hail [mm] + real(kind=kind_phys) , intent(in) :: con_hvap ! latent heat condensation [J/kg] + real(kind=kind_phys) , intent(in) :: con_cp ! specific heat air [J/kg/K] + real(kind=kind_phys) , intent(in) :: con_jcal ! joules per calorie (not used) + real(kind=kind_phys) , intent(in) :: rhoh2o ! density of water [kg/m^3] + real(kind=kind_phys) , intent(in) :: con_eps ! Rd/Rv + real(kind=kind_phys) , intent(in) :: con_epsm1 ! Rd/Rv - 1 + real(kind=kind_phys) , intent(in) :: con_fvirt ! Rv/Rd - 1 + real(kind=kind_phys) , intent(in) :: con_rd ! gas constant air [J/kg/K] + real(kind=kind_phys) , intent(in) :: con_hfus ! lat heat H2O fusion [J/kg] + real(kind=kind_phys), dimension(:) , intent(inout) :: weasd ! water equivalent accumulated snow depth [mm] + real(kind=kind_phys), dimension(:) , intent(inout) :: snwdph ! snow depth [mm] + real(kind=kind_phys), dimension(:) , intent(inout) :: tskin ! ground surface skin temperature [K] + real(kind=kind_phys), dimension(:) , intent(inout) :: tprcp ! total precipitation [m] + real(kind=kind_phys), dimension(:) , intent(inout) :: srflag ! snow/rain flag for precipitation + real(kind=kind_phys), dimension(:,:) , intent(inout) :: smc ! total soil moisture content [m3/m3] + real(kind=kind_phys), dimension(:,:) , intent(inout) :: stc ! soil temp [K] + real(kind=kind_phys), dimension(:,:) , intent(inout) :: slc ! liquid soil moisture [m3/m3] + real(kind=kind_phys), dimension(:) , intent(inout) :: canopy ! canopy moisture content [mm] + real(kind=kind_phys), dimension(:) , intent(inout) :: trans ! total plant transpiration [m/s] + real(kind=kind_phys), dimension(:) , intent(inout) :: tsurf ! surface skin temperature [after iteration] + real(kind=kind_phys), dimension(:) , intent(inout) :: zorl ! surface roughness [cm] + real(kind=kind_phys), dimension(:) , intent(inout) :: snowxy ! actual no. of snow layers + real(kind=kind_phys), dimension(:) , intent(inout) :: tvxy ! vegetation leaf temperature [K] + real(kind=kind_phys), dimension(:) , intent(inout) :: tgxy ! bulk ground surface temperature [K] + real(kind=kind_phys), dimension(:) , intent(inout) :: canicexy ! canopy-intercepted ice [mm] + real(kind=kind_phys), dimension(:) , intent(inout) :: canliqxy ! canopy-intercepted liquid water [mm] + real(kind=kind_phys), dimension(:) , intent(inout) :: eahxy ! canopy air vapor pressure [Pa] + real(kind=kind_phys), dimension(:) , intent(inout) :: tahxy ! canopy air temperature [K] + real(kind=kind_phys), dimension(:) , intent(inout) :: cmxy ! bulk momentum drag coefficient [m/s] + real(kind=kind_phys), dimension(:) , intent(inout) :: chxy ! bulk sensible heat exchange coefficient [m/s] + real(kind=kind_phys), dimension(:) , intent(inout) :: fwetxy ! wetted or snowed fraction of the canopy [-] + real(kind=kind_phys), dimension(:) , intent(inout) :: sneqvoxy ! snow mass at last time step[mm h2o] + real(kind=kind_phys), dimension(:) , intent(inout) :: alboldxy ! snow albedo at last time step [-] + real(kind=kind_phys), dimension(:) , intent(inout) :: qsnowxy ! snowfall on the ground [mm/s] + real(kind=kind_phys), dimension(:) , intent(inout) :: wslakexy ! lake water storage [mm] + real(kind=kind_phys), dimension(:) , intent(inout) :: zwtxy ! water table depth [m] + real(kind=kind_phys), dimension(:) , intent(inout) :: waxy ! water in the "aquifer" [mm] + real(kind=kind_phys), dimension(:) , intent(inout) :: wtxy ! groundwater storage [mm] + real(kind=kind_phys), dimension(:,lsnowl:), intent(inout) :: tsnoxy ! snow temperature [K] + real(kind=kind_phys), dimension(:,lsnowl:), intent(inout) :: zsnsoxy ! snow/soil layer depth [m] + real(kind=kind_phys), dimension(:,lsnowl:), intent(inout) :: snicexy ! snow layer ice [mm] + real(kind=kind_phys), dimension(:,lsnowl:), intent(inout) :: snliqxy ! snow layer liquid water [mm] + real(kind=kind_phys), dimension(:) , intent(inout) :: lfmassxy ! leaf mass [g/m2] + real(kind=kind_phys), dimension(:) , intent(inout) :: rtmassxy ! mass of fine roots [g/m2] + real(kind=kind_phys), dimension(:) , intent(inout) :: stmassxy ! stem mass [g/m2] + real(kind=kind_phys), dimension(:) , intent(inout) :: woodxy ! mass of wood (incl. woody roots) [g/m2] + real(kind=kind_phys), dimension(:) , intent(inout) :: stblcpxy ! stable carbon in deep soil [g/m2] + real(kind=kind_phys), dimension(:) , intent(inout) :: fastcpxy ! short-lived carbon, shallow soil [g/m2] + real(kind=kind_phys), dimension(:) , intent(inout) :: xlaixy ! leaf area index [m2/m2] + real(kind=kind_phys), dimension(:) , intent(inout) :: xsaixy ! stem area index [m2/m2] + real(kind=kind_phys), dimension(:) , intent(inout) :: taussxy ! snow age factor [-] + real(kind=kind_phys), dimension(:,:) , intent(inout) :: smoiseq ! eq volumetric soil moisture [m3/m3] + real(kind=kind_phys), dimension(:) , intent(inout) :: smcwtdxy ! soil moisture content in the layer to the water table when deep + real(kind=kind_phys), dimension(:) , intent(inout) :: deeprechxy ! recharge to the water table when deep + real(kind=kind_phys), dimension(:) , intent(inout) :: rechxy ! recharge to the water table + real(kind=kind_phys), dimension(:) , intent(out) :: albdvis ! albedo - direct visible [fraction] + real(kind=kind_phys), dimension(:) , intent(out) :: albdnir ! albedo - direct NIR [fraction] + real(kind=kind_phys), dimension(:) , intent(out) :: albivis ! albedo - diffuse visible [fraction] + real(kind=kind_phys), dimension(:) , intent(out) :: albinir ! albedo - diffuse NIR [fraction] + real(kind=kind_phys), dimension(:) , intent(out) :: emiss ! sfc lw emissivity [fraction] + real(kind=kind_phys), dimension(:) , intent(out) :: sncovr1 ! snow cover over land [fraction] + real(kind=kind_phys), dimension(:) , intent(out) :: qsurf ! specific humidity at sfc [kg/kg] + real(kind=kind_phys), dimension(:) , intent(out) :: gflux ! soil heat flux [W/m2] + real(kind=kind_phys), dimension(:) , intent(out) :: drain ! subsurface runoff [mm/s] + real(kind=kind_phys), dimension(:) , intent(out) :: evap ! total latent heat flux [W/m2] + real(kind=kind_phys), dimension(:) , intent(out) :: hflx ! sensible heat flux [W/m2] + real(kind=kind_phys), dimension(:) , intent(out) :: ep ! potential evaporation [mm/s?] + real(kind=kind_phys), dimension(:) , intent(out) :: runoff ! surface runoff [mm/s] + real(kind=kind_phys), dimension(:) , intent(out) :: cmm ! cm*U [m/s] + real(kind=kind_phys), dimension(:) , intent(out) :: chh ! ch*U*rho [kg/m2/s] + real(kind=kind_phys), dimension(:) , intent(out) :: evbs ! direct soil evaporation [m/s] + real(kind=kind_phys), dimension(:) , intent(out) :: evcw ! canopy water evaporation [m/s] + real(kind=kind_phys), dimension(:) , intent(out) :: sbsno ! sublimation/deposit from snopack [W/m2] + real(kind=kind_phys), dimension(:) , intent(out) :: snowc ! fractional snow cover [-] + real(kind=kind_phys), dimension(:) , intent(out) :: stm ! total soil column moisture content [mm] + real(kind=kind_phys), dimension(:) , intent(out) :: snohf ! snow/freezing-rain latent heat flux [W/m2] + real(kind=kind_phys), dimension(:) , intent(out) :: smcwlt2 ! dry soil moisture threshold [m3/m3] + real(kind=kind_phys), dimension(:) , intent(out) :: smcref2 ! soil moisture threshold [m3/m3] + real(kind=kind_phys), dimension(:) , intent(out) :: wet1 ! normalized surface soil saturated fraction + real(kind=kind_phys), dimension(:) , intent(out) :: t2mmp ! combined T2m from tiles + real(kind=kind_phys), dimension(:) , intent(out) :: q2mp ! combined q2m from tiles + character(len=*) , intent(out) :: errmsg + integer , intent(out) :: errflg ! ! --- some new options, hard code for now @@ -339,11 +340,11 @@ subroutine noahmpdrv_run & real(kind=kind_phys), dimension(im, km) :: stc_old real(kind=kind_phys), dimension(im, km) :: slc_old real(kind=kind_phys), dimension(im, km) :: smoiseq_old - real(kind=kind_phys), dimension(im,-2: 0) :: tsno_old - real(kind=kind_phys), dimension(im,-2: 0) :: snice_old - real(kind=kind_phys), dimension(im,-2: 0) :: snliq_old - real(kind=kind_phys), dimension(im,-2:km) :: zsnso_old - real(kind=kind_phys), dimension(im,-2:km) :: tsnso_old + real(kind=kind_phys), dimension(im,lsnowl: 0) :: tsno_old + real(kind=kind_phys), dimension(im,lsnowl: 0) :: snice_old + real(kind=kind_phys), dimension(im,lsnowl: 0) :: snliq_old + real(kind=kind_phys), dimension(im,lsnowl:km) :: zsnso_old + real(kind=kind_phys), dimension(im,lsnowl:km) :: tsnso_old ! ! --- local inputs to noah-mp and glacier subroutines; listed in order in noah-mp call diff --git a/physics/sfc_noahmp_drv.meta b/physics/sfc_noahmp_drv.meta index c0a6393fa..76811a378 100644 --- a/physics/sfc_noahmp_drv.meta +++ b/physics/sfc_noahmp_drv.meta @@ -93,6 +93,14 @@ type = integer intent = in optional = F +[lsnowl] + 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 + intent = in + optional = F [itime] standard_name = index_of_time_step long_name = current forecast iteration @@ -320,7 +328,7 @@ dimensions = (horizontal_loop_extent) type = real kind = kind_phys - intent = in + intent = inout optional = F [flag_iter] standard_name = flag_for_iteration @@ -695,7 +703,7 @@ intent = inout optional = F [zorl] - standard_name = surface_roughness_length_over_land_interstitial + standard_name = surface_roughness_length_over_land long_name = surface roughness length over land (temporary use as interstitial) units = cm dimensions = (horizontal_loop_extent) diff --git a/physics/sfc_nst.f b/physics/sfc_nst.f index 9e6a1c0cc..f03e725f3 100644 --- a/physics/sfc_nst.f +++ b/physics/sfc_nst.f @@ -27,9 +27,9 @@ end subroutine sfc_nst_finalize !> @{ subroutine sfc_nst_run & & ( im, hvap, cp, hfus, jcal, eps, epsm1, rvrdm1, rd, rhw0, & ! --- inputs: - & pi, sbc, ps, u1, v1, t1, q1, tref, cm, ch, & - & prsl1, prslki, prsik1, prslk1, wet, xlon, sinlat, & - & stress, & + & pi, tgice, sbc, ps, u1, v1, t1, q1, tref, cm, ch, & + & prsl1, prslki, prsik1, prslk1, wet, use_flake, xlon, & + & sinlat, stress, & & sfcemis, dlwflx, sfcnsw, rain, timestep, kdt, solhr,xcosz, & & wind, flag_iter, flag_guess, nstf_name1, nstf_name4, & & nstf_name5, lprnt, ipr, & @@ -47,7 +47,7 @@ subroutine sfc_nst_run & ! call sfc_nst ! ! inputs: ! ! ( im, ps, u1, v1, t1, q1, tref, cm, ch, ! -! prsl1, prslki, wet, xlon, sinlat, stress, ! +! prsl1, prslki, wet, use_flake, xlon, sinlat, stress, ! ! sfcemis, dlwflx, sfcnsw, rain, timestep, kdt,solhr,xcosz, ! ! wind, flag_iter, flag_guess, nstf_name1, nstf_name4, ! ! nstf_name5, lprnt, ipr, ! @@ -94,6 +94,7 @@ subroutine sfc_nst_run & ! prsik1 - real, im ! ! prslk1 - real, im ! ! wet - logical, =T if any ocn/lake water (F otherwise) im ! +! use_flake - logical, =T if any lake otherwise ocn ! icy - logical, =T if any ice im ! ! xlon - real, longitude (radians) im ! ! sinlat - real, sin of latitude im ! @@ -186,26 +187,27 @@ subroutine sfc_nst_run & integer, intent(in) :: im, kdt, ipr, nstf_name1, nstf_name4, & & nstf_name5 real (kind=kind_phys), intent(in) :: hvap, cp, hfus, jcal, eps, & - & epsm1, rvrdm1, rd, rhw0, sbc, pi - real (kind=kind_phys), dimension(im), intent(in) :: ps, u1, v1, & + & epsm1, rvrdm1, rd, rhw0, sbc, pi, tgice + real (kind=kind_phys), dimension(:), intent(in) :: ps, u1, v1, & & t1, q1, tref, cm, ch, prsl1, prslki, prsik1, prslk1, & & xlon,xcosz, & & sinlat, stress, sfcemis, dlwflx, sfcnsw, rain, wind real (kind=kind_phys), intent(in) :: timestep real (kind=kind_phys), intent(in) :: solhr - logical, dimension(im), intent(in) :: flag_iter, flag_guess, wet + logical, dimension(:), intent(in) :: flag_iter, flag_guess, wet, & + & use_flake ! &, icy logical, intent(in) :: lprnt ! --- input/outputs: ! control variables of dtl system (5+2) and sl (2) and coefficients for d(tz)/d(ts) calculation - real (kind=kind_phys), dimension(im), intent(inout) :: tskin, & + real (kind=kind_phys), dimension(:), intent(inout) :: tskin, & & tsurf, xt, xs, xu, xv, xz, zm, xtts, xzts, dt_cool, & & z_c, c_0, c_d, w_0, w_d, d_conv, ifd, qrain ! --- outputs: - real (kind=kind_phys), dimension(im), intent(inout) :: & + real (kind=kind_phys), dimension(:), intent(inout) :: & & qsurf, gflux, cmm, chh, evap, hflx, ep character(len=*), intent(out) :: errmsg @@ -259,14 +261,14 @@ subroutine sfc_nst_run & ! do i = 1, im ! flag(i) = wet(i) .and. .not.icy(i) .and. flag_iter(i) - flag(i) = wet(i) .and. flag_iter(i) + flag(i) = wet(i) .and. flag_iter(i) .and. .not. use_flake(i) enddo ! ! save nst-related prognostic fields for guess run ! do i=1, im ! if(wet(i) .and. .not.icy(i) .and. flag_guess(i)) then - if(wet(i) .and. flag_guess(i)) then + if(wet(i) .and. flag_guess(i) .and. .not. use_flake(i)) then xt_old(i) = xt(i) xs_old(i) = xs(i) xu_old(i) = xu(i) @@ -553,7 +555,7 @@ subroutine sfc_nst_run & !> - Call get_dtzm_point() to computes \a dtz and \a tsurf. call get_dtzm_point(xt(i),xz(i),dt_cool(i),z_c(i), & zsea1,zsea2,dtz) - tsurf(i) = max(271.2_kp, tref(i) + dtz ) + tsurf(i) = max(tgice, tref(i) + dtz ) ! if (lprnt .and. i == ipr) print *,' tsurf=',tsurf(i),' tref=', ! &tref(i),' xz=',xz(i),' dt_cool=',dt_cool(i) @@ -582,7 +584,7 @@ subroutine sfc_nst_run & ! restore nst-related prognostic fields for guess run do i=1, im ! if (wet(i) .and. .not.icy(i)) then - if (wet(i)) then + if (wet(i) .and. .not. use_flake(i)) then if (flag_guess(i)) then ! when it is guess of xt(i) = xt_old(i) xs(i) = xs_old(i) @@ -668,8 +670,9 @@ end subroutine sfc_nst_pre_finalize !> \section NSST_general_pre_algorithm General Algorithm !! @{ subroutine sfc_nst_pre_run - & (im, wet, tsfc_wat, tsurf_wat, tseal, xt, xz, dt_cool, - & z_c, tref, cplflx, oceanfrac, nthreads, errmsg, errflg) + & (im, wet, use_flake, tgice, tsfco, tsfc_wat, tsurf_wat, + & tseal, xt, xz, dt_cool, z_c, tref, cplflx, + & oceanfrac, nthreads, errmsg, errflg) use machine , only : kind_phys use module_nst_water_prop, only: get_dtzm_2d @@ -680,13 +683,15 @@ subroutine sfc_nst_pre_run ! --- inputs: integer, intent(in) :: im, nthreads - logical, dimension(im), intent(in) :: wet - real (kind=kind_phys), dimension(im), intent(in) :: - & tsfc_wat, xt, xz, dt_cool, z_c, oceanfrac + logical, dimension(:), intent(in) :: wet, use_flake + real (kind=kind_phys), intent(in) :: tgice + real (kind=kind_phys), dimension(:), intent(in) :: + & tsfc_wat, xt, xz, dt_cool, z_c, oceanfrac, + & tsfco logical, intent(in) :: cplflx ! --- input/outputs: - real (kind=kind_phys), dimension(im), intent(inout) :: + real (kind=kind_phys), dimension(:), intent(inout) :: & tsurf_wat, tseal, tref ! --- outputs: @@ -700,14 +705,14 @@ subroutine sfc_nst_pre_run & half = 0.5_kp, & omz1 = 2.0_kp real(kind=kind_phys) :: tem1, tem2, dnsst - real(kind=kind_phys), dimension(im) :: dtzm + real(kind=kind_phys), dimension(im) :: dtzm,z_c_0 ! Initialize CCPP error handling variables errmsg = '' errflg = 0 do i=1,im - if (wet(i)) then + if (wet(i) .and. .not. use_flake(i)) then ! tem = (oro(i)-oro_uf(i)) * rlapse ! DH* 20190927 simplyfing this code because tem is zero !tem = zero @@ -722,13 +727,14 @@ subroutine sfc_nst_pre_run ! update tsfc & tref with T1 from OGCM & NSST Profile if coupled ! if (cplflx) then + z_c_0 = 0.0 call get_dtzm_2d (xt, xz, dt_cool, & - & z_c, wet, zero, omz1, im, 1, nthreads, dtzm) + & z_c_0, wet, zero, omz1, im, 1, nthreads, dtzm) do i=1,im - if (wet(i) .and. oceanfrac(i) > zero) then -! dnsst = tsfc_wat(i) - tref(i) ! retrive/get difference of Ts and Tf - tref(i) = tsfc_wat(i) - dtzm(i) ! update Tf with T1 and NSST T-Profile -! tsfc_wat(i) = max(271.2,tref(i) + dnsst) ! get Ts updated due to Tf update + if (wet(i) .and. oceanfrac(i)>zero .and..not.use_flake(i)) then +! dnsst = tsfc_wat(i) - tref(i) ! retrive/get difference of Ts and Tf + tref(i) = max(tgice, tsfco(i) - dtzm(i)) ! update Tf with T1 and NSST T-Profile +! tsfc_wat(i) = max(271.2,tref(i) + dnsst) ! get Ts updated due to Tf update ! tseal(i) = tsfc_wat(i) if (abs(xz(i)) > zero) then tem2 = one / xz(i) @@ -773,7 +779,8 @@ end subroutine sfc_nst_post_finalize ! \section NSST_detailed_post_algorithm Detailed Algorithm ! @{ subroutine sfc_nst_post_run & - & ( im, rlapse, tgice, wet, icy, oro, oro_uf, nstf_name1, & + & ( im, kdt, rlapse, tgice, wet, use_flake, icy, oro, oro_uf, & + & nstf_name1, & & nstf_name4, nstf_name5, xt, xz, dt_cool, z_c, tref, xlon, & & tsurf_wat, tsfc_wat, nthreads, dtzm, errmsg, errflg & & ) @@ -786,21 +793,20 @@ subroutine sfc_nst_post_run & integer, parameter :: kp = kind_phys ! --- inputs: - integer, intent(in) :: im, nthreads - logical, dimension(im), intent(in) :: wet, icy + integer, intent(in) :: im, kdt, nthreads + logical, dimension(:), intent(in) :: wet, icy, use_flake real (kind=kind_phys), intent(in) :: rlapse, tgice - real (kind=kind_phys), dimension(im), intent(in) :: oro, oro_uf + real (kind=kind_phys), dimension(:), intent(in) :: oro, oro_uf integer, intent(in) :: nstf_name1, nstf_name4, nstf_name5 - real (kind=kind_phys), dimension(im), intent(in) :: xt, xz, & + real (kind=kind_phys), dimension(:), intent(in) :: xt, xz, & & dt_cool, z_c, tref, xlon ! --- input/outputs: - real (kind=kind_phys), dimension(im), intent(inout) :: tsurf_wat, & + real (kind=kind_phys), dimension(:), intent(inout) :: tsurf_wat, & & tsfc_wat ! --- outputs: - real (kind=kind_phys), dimension(size(xlon,1)), intent(out) :: & - & dtzm + real (kind=kind_phys), dimension(:), intent(out) :: dtzm character(len=*), intent(out) :: errmsg integer, intent(out) :: errflg @@ -833,7 +839,7 @@ subroutine sfc_nst_post_run & do i = 1, im ! if (wet(i) .and. .not.icy(i)) then ! if (wet(i) .and. (frac_grid .or. .not. icy(i))) then - if (wet(i)) then + if (wet(i) .and. .not. use_flake(i)) then tsfc_wat(i) = max(tgice, tref(i) + dtzm(i)) ! tsfc_wat(i) = max(271.2, tref(i) + dtzm(i)) - & ! (oro(i)-oro_uf(i))*rlapse diff --git a/physics/sfc_nst.meta b/physics/sfc_nst.meta index 2c32ca106..a29f10f90 100644 --- a/physics/sfc_nst.meta +++ b/physics/sfc_nst.meta @@ -96,19 +96,28 @@ kind = kind_phys intent = in optional = F -[sbc] - standard_name = stefan_boltzmann_constant - long_name = Stefan-Boltzmann constant - units = W m-2 K-4 +[pi] + standard_name = pi + long_name = ratio of a circle's circumference to its diameter + units = none dimensions = () type = real kind = kind_phys intent = in optional = F -[pi] - standard_name = pi - long_name = ratio of a circle's circumference to its diameter - units = none +[tgice] + standard_name = freezing_point_temperature_of_seawater + long_name = freezing point temperature of seawater + units = K + dimensions = () + type = real + kind = kind_phys + intent = in + optional = F +[sbc] + standard_name = stefan_boltzmann_constant + long_name = Stefan-Boltzmann constant + units = W m-2 K-4 dimensions = () type = real kind = kind_phys @@ -169,8 +178,8 @@ intent = in optional = F [cm] - standard_name = surface_drag_coefficient_for_momentum_in_air_over_ocean - long_name = surface exchange coeff for momentum over ocean + standard_name = surface_drag_coefficient_for_momentum_in_air_over_water + long_name = surface exchange coeff for momentum over water units = none dimensions = (horizontal_loop_extent) type = real @@ -178,8 +187,8 @@ intent = in optional = F [ch] - standard_name = surface_drag_coefficient_for_heat_and_moisture_in_air_over_ocean - long_name = surface exchange coeff heat & moisture over ocean + standard_name = surface_drag_coefficient_for_heat_and_moisture_in_air_over_water + long_name = surface exchange coeff heat surface exchange coeff heat & moisture over ocean moisture over water units = none dimensions = (horizontal_loop_extent) type = real @@ -230,6 +239,14 @@ type = logical intent = in optional = F +[use_flake] + standard_name = flag_nonzero_lake_surface_fraction + long_name = flag indicating presence of some lake surface area fraction + units = flag + dimensions = (horizontal_loop_extent) + type = logical + intent = in + optional = F [xlon] standard_name = longitude long_name = longitude @@ -249,8 +266,8 @@ intent = in optional = F [stress] - standard_name = surface_wind_stress_over_ocean - long_name = surface wind stress over ocean + standard_name = surface_wind_stress_over_water + long_name = surface wind stress over water units = m2 s-2 dimensions = (horizontal_loop_extent) type = real @@ -258,8 +275,8 @@ intent = in optional = F [sfcemis] - standard_name = surface_longwave_emissivity_over_ocean_interstitial - long_name = surface lw emissivity in fraction over ocean (temporary use as interstitial) + standard_name = surface_longwave_emissivity_over_water_interstitial + long_name = surface lw emissivity in fraction over water (temporary use as interstitial) units = frac dimensions = (horizontal_loop_extent) type = real @@ -267,8 +284,8 @@ intent = in optional = F [dlwflx] - 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 + standard_name = surface_downwelling_longwave_flux_absorbed_by_ground_over_water + long_name = total sky surface downward longwave flux absorbed by the ground over water units = W m-2 dimensions = (horizontal_loop_extent) type = real @@ -285,8 +302,8 @@ intent = in optional = F [rain] - standard_name = nonnegative_lwe_thickness_of_precipitation_amount_on_dynamics_timestep_over_ocean - long_name = total precipitation amount in each time step over ocean + standard_name = nonnegative_lwe_thickness_of_precipitation_amount_on_dynamics_timestep_over_water + long_name = total precipitation amount in each time step over water units = m dimensions = (horizontal_loop_extent) type = real @@ -403,8 +420,8 @@ intent = inout optional = F [tsurf] - standard_name = surface_skin_temperature_after_iteration_over_ocean - long_name = surface skin temperature after iteration over ocean + standard_name = surface_skin_temperature_after_iteration_over_water + long_name = surface skin temperature after iteration over water units = K dimensions = (horizontal_loop_extent) type = real @@ -565,8 +582,8 @@ intent = inout optional = F [qsurf] - standard_name = surface_specific_humidity_over_ocean - long_name = surface air saturation specific humidity over ocean + standard_name = surface_specific_humidity_over_water + long_name = surface air saturation specific humidity over water units = kg kg-1 dimensions = (horizontal_loop_extent) type = real @@ -574,8 +591,8 @@ intent = inout optional = F [gflux] - standard_name = upward_heat_flux_in_soil_over_ocean - long_name = soil heat flux over ocean + standard_name = upward_heat_flux_in_soil_over_water + long_name = soil heat flux over water units = W m-2 dimensions = (horizontal_loop_extent) type = real @@ -583,8 +600,8 @@ intent = inout optional = F [cmm] - standard_name = surface_drag_wind_speed_for_momentum_in_air_over_ocean - long_name = momentum exchange coefficient over ocean + standard_name = surface_drag_wind_speed_for_momentum_in_air_over_water + long_name = momentum exchange coefficient over water units = m s-1 dimensions = (horizontal_loop_extent) type = real @@ -592,8 +609,8 @@ intent = inout optional = F [chh] - standard_name = surface_drag_mass_flux_for_heat_and_moisture_in_air_over_ocean - long_name = thermal exchange coefficient over ocean + standard_name = surface_drag_mass_flux_for_heat_and_moisture_in_air_over_water + long_name = thermal exchange coefficient over water units = kg m-2 s-1 dimensions = (horizontal_loop_extent) type = real @@ -601,8 +618,8 @@ intent = inout optional = F [evap] - standard_name = kinematic_surface_upward_latent_heat_flux_over_ocean - long_name = kinematic surface upward latent heat flux over ocean + standard_name = kinematic_surface_upward_latent_heat_flux_over_water + long_name = kinematic surface upward latent heat flux over water units = kg kg-1 m s-1 dimensions = (horizontal_loop_extent) type = real @@ -610,8 +627,8 @@ intent = inout optional = F [hflx] - standard_name = kinematic_surface_upward_sensible_heat_flux_over_ocean - long_name = kinematic surface upward sensible heat flux over ocean + standard_name = kinematic_surface_upward_sensible_heat_flux_over_water + long_name = kinematic surface upward sensible heat flux over water units = K m s-1 dimensions = (horizontal_loop_extent) type = real @@ -619,8 +636,8 @@ intent = inout optional = F [ep] - standard_name = surface_upward_potential_latent_heat_flux_over_ocean - long_name = surface upward potential latent heat flux over ocean + standard_name = surface_upward_potential_latent_heat_flux_over_water + long_name = surface upward potential latent heat flux over water units = W m-2 dimensions = (horizontal_loop_extent) type = real @@ -671,9 +688,35 @@ type = logical intent = in optional = F +[use_flake] + standard_name = flag_nonzero_lake_surface_fraction + long_name = flag indicating presence of some lake surface area fraction + units = flag + dimensions = (horizontal_loop_extent) + type = logical + intent = in + optional = F +[tgice] + standard_name = freezing_point_temperature_of_seawater + long_name = freezing point temperature of seawater + units = K + dimensions = () + type = real + kind = kind_phys + intent = in + optional = F +[tsfco] + standard_name = sea_surface_temperature + long_name = sea surface temperature + units = K + dimensions = (horizontal_loop_extent) + type = real + kind = kind_phys + intent = in + optional = F [tsfc_wat] - standard_name = surface_skin_temperature_over_ocean_interstitial - long_name = surface skin temperature over ocean (temporary use as interstitial) + standard_name = surface_skin_temperature_over_water_interstitial + long_name = surface skin temperature over water (temporary use as interstitial) units = K dimensions = (horizontal_loop_extent) type = real @@ -681,8 +724,8 @@ intent = in optional = F [tsurf_wat] - standard_name = surface_skin_temperature_after_iteration_over_ocean - long_name = surface skin temperature after iteration over ocean + standard_name = surface_skin_temperature_after_iteration_over_water + long_name = surface skin temperature after iteration over water units = K dimensions = (horizontal_loop_extent) type = real @@ -804,6 +847,14 @@ type = integer intent = in optional = F +[kdt] + standard_name = index_of_time_step + long_name = current time step index + units = index + dimensions = () + type = integer + intent = in + optional = F [rlapse] standard_name = air_temperature_lapse_rate_constant long_name = environmental air temperature lapse rate constant @@ -830,6 +881,14 @@ type = logical intent = in optional = F +[use_flake] + standard_name = flag_nonzero_lake_surface_fraction + long_name = flag indicating presence of some lake surface area fraction + units = flag + dimensions = (horizontal_loop_extent) + type = logical + intent = in + optional = F [icy] standard_name = flag_nonzero_sea_ice_surface_fraction long_name = flag indicating presence of some sea ice surface area fraction @@ -935,8 +994,8 @@ intent = in optional = F [tsurf_wat] - standard_name = surface_skin_temperature_after_iteration_over_ocean - long_name = surface skin temperature after iteration over ocean + standard_name = surface_skin_temperature_after_iteration_over_water + long_name = surface skin temperature after iteration over water units = K dimensions = (horizontal_loop_extent) type = real @@ -944,8 +1003,8 @@ intent = inout optional = F [tsfc_wat] - standard_name = surface_skin_temperature_over_ocean_interstitial - long_name = surface skin temperature over ocean (temporary use as interstitial) + standard_name = surface_skin_temperature_over_water_interstitial + long_name = surface skin temperature over water (temporary use as interstitial) units = K dimensions = (horizontal_loop_extent) type = real diff --git a/physics/sfc_ocean.F b/physics/sfc_ocean.F index 8da60bb01..67a6df04f 100644 --- a/physics/sfc_ocean.F +++ b/physics/sfc_ocean.F @@ -27,7 +27,7 @@ subroutine sfc_ocean_run & !................................... ! --- inputs: & ( im, rd, eps, epsm1, rvrdm1, ps, t1, q1, & - & tskin, cm, ch, prsl1, prslki, wet, lake, wind, &, ! --- inputs + & tskin, cm, ch, prsl1, prslki, wet, use_flake, wind, &, ! --- inputs & flag_iter, & & qsurf, cmm, chh, gflux, evap, hflx, ep, & ! --- outputs & errmsg, errflg & @@ -42,7 +42,7 @@ subroutine sfc_ocean_run & ! inputs: ! ! ( im, ps, t1, q1, tskin, cm, ch, ! !! ( im, ps, u1, v1, t1, q1, tskin, cm, ch, ! -! prsl1, prslki, wet, lake, wind, flag_iter, ! +! prsl1, prslki, wet, use_flake, wind, flag_iter, ! ! outputs: ! ! qsurf, cmm, chh, gflux, evap, hflx, ep ) ! ! ! @@ -99,13 +99,13 @@ subroutine sfc_ocean_run & integer, intent(in) :: im real (kind=kind_phys), intent(in) :: rd, eps, epsm1, rvrdm1 - real (kind=kind_phys), dimension(im), intent(in) :: ps, & + real (kind=kind_phys), dimension(:), intent(in) :: ps, & & t1, q1, tskin, cm, ch, prsl1, prslki, wind - logical, dimension(im), intent(in) :: flag_iter, wet, lake + logical, dimension(:), intent(in) :: flag_iter, wet, use_flake ! --- outputs: - real (kind=kind_phys), dimension(im), intent(inout) :: qsurf, & + real (kind=kind_phys), dimension(:), intent(inout) :: qsurf, & & cmm, chh, gflux, evap, hflx, ep character(len=*), intent(out) :: errmsg @@ -130,7 +130,7 @@ subroutine sfc_ocean_run & ! ps is in pascals, wind is wind speed, ! rho is density, qss is sat. hum. at surface - if (wet(i) .and. flag_iter(i) .and. .not. lake(i)) then + if (wet(i) .and. flag_iter(i) .and. .not. use_flake(i)) then q0 = max( q1(i), qmin ) rho = prsl1(i) / (rd*t1(i)*(one + rvrdm1*q0)) diff --git a/physics/sfc_ocean.meta b/physics/sfc_ocean.meta index afdea6c3f..f27c2207d 100644 --- a/physics/sfc_ocean.meta +++ b/physics/sfc_ocean.meta @@ -79,8 +79,8 @@ intent = in optional = F [tskin] - standard_name = surface_skin_temperature_over_ocean_interstitial - long_name = surface skin temperature over ocean (temporary use as interstitial) + standard_name = surface_skin_temperature_over_water_interstitial + long_name = surface skin temperature over water (temporary use as interstitial) units = K dimensions = (horizontal_loop_extent) type = real @@ -88,8 +88,8 @@ intent = in optional = F [cm] - standard_name = surface_drag_coefficient_for_momentum_in_air_over_ocean - long_name = surface exchange coeff for momentum over ocean + standard_name = surface_drag_coefficient_for_momentum_in_air_over_water + long_name = surface exchange coeff for momentum over water units = none dimensions = (horizontal_loop_extent) type = real @@ -97,8 +97,8 @@ intent = in optional = F [ch] - standard_name = surface_drag_coefficient_for_heat_and_moisture_in_air_over_ocean - long_name = surface exchange coeff heat & moisture over ocean + standard_name = surface_drag_coefficient_for_heat_and_moisture_in_air_over_water + long_name = surface exchange coeff heat surface exchange coeff heat & moisture over ocean moisture over water units = none dimensions = (horizontal_loop_extent) type = real @@ -131,7 +131,7 @@ type = logical intent = in optional = F -[lake] +[use_flake] standard_name = flag_nonzero_lake_surface_fraction long_name = flag indicating presence of some lake surface area fraction units = flag @@ -157,8 +157,8 @@ intent = in optional = F [qsurf] - standard_name = surface_specific_humidity_over_ocean - long_name = surface air saturation specific humidity over ocean + standard_name = surface_specific_humidity_over_water + long_name = surface air saturation specific humidity over water units = kg kg-1 dimensions = (horizontal_loop_extent) type = real @@ -166,8 +166,8 @@ intent = inout optional = F [cmm] - standard_name = surface_drag_wind_speed_for_momentum_in_air_over_ocean - long_name = momentum exchange coefficient over ocean + standard_name = surface_drag_wind_speed_for_momentum_in_air_over_water + long_name = momentum exchange coefficient over water units = m s-1 dimensions = (horizontal_loop_extent) type = real @@ -175,8 +175,8 @@ intent = inout optional = F [chh] - standard_name = surface_drag_mass_flux_for_heat_and_moisture_in_air_over_ocean - long_name = thermal exchange coefficient over ocean + standard_name = surface_drag_mass_flux_for_heat_and_moisture_in_air_over_water + long_name = thermal exchange coefficient over water units = kg m-2 s-1 dimensions = (horizontal_loop_extent) type = real @@ -184,8 +184,8 @@ intent = inout optional = F [gflux] - standard_name = upward_heat_flux_in_soil_over_ocean - long_name = soil heat flux over ocean + standard_name = upward_heat_flux_in_soil_over_water + long_name = soil heat flux over water units = W m-2 dimensions = (horizontal_loop_extent) type = real @@ -193,8 +193,8 @@ intent = inout optional = F [evap] - standard_name = kinematic_surface_upward_latent_heat_flux_over_ocean - long_name = kinematic surface upward latent heat flux over ocean + standard_name = kinematic_surface_upward_latent_heat_flux_over_water + long_name = kinematic surface upward latent heat flux over water units = kg kg-1 m s-1 dimensions = (horizontal_loop_extent) type = real @@ -202,8 +202,8 @@ intent = inout optional = F [hflx] - standard_name = kinematic_surface_upward_sensible_heat_flux_over_ocean - long_name = kinematic surface upward sensible heat flux over ocean + standard_name = kinematic_surface_upward_sensible_heat_flux_over_water + long_name = kinematic surface upward sensible heat flux over water units = K m s-1 dimensions = (horizontal_loop_extent) type = real @@ -211,8 +211,8 @@ intent = inout optional = F [ep] - standard_name = surface_upward_potential_latent_heat_flux_over_ocean - long_name = surface upward potential latent heat flux over ocean + standard_name = surface_upward_potential_latent_heat_flux_over_water + long_name = surface upward potential latent heat flux over water units = W m-2 dimensions = (horizontal_loop_extent) type = real diff --git a/physics/sfc_sice.f b/physics/sfc_sice.f index 081bbf48e..e739e724c 100644 --- a/physics/sfc_sice.f +++ b/physics/sfc_sice.f @@ -14,9 +14,6 @@ end subroutine sfc_sice_finalize !>\defgroup gfs_sice_main GFS Three-layer Thermodynomics Sea-Ice Scheme Module !! \brief This is three-layer thermodynomics sea-ice model based on Winton (2000) \cite winton_2000. -!! \section arg_table_sfc_sice_run Argument Table -!! \htmlinclude sfc_sice_run.html -!! !> \section general_sice_run GFS Sea Ice Driver General Algorithm !!The model has four prognostic variables: the snow layer thickness \f$h_s\f$, the ice layer thickness !! \f$h_i\f$, the upper and lower ice layer temperatures located at the midpoints of the layers @@ -38,19 +35,22 @@ end subroutine sfc_sice_finalize !! the water line to ice, and 3) to equalize the thickness of the two !! ice layers. !> \section detailed_sice_run GFS Sea Ice Driver Detailed Algorithm +!! +!! \section arg_table_sfc_sice_run Argument Table +!! \htmlinclude sfc_sice_run.html +!! !> @{ subroutine sfc_sice_run & - & ( im, kice, sbc, hvap, tgice, cp, eps, epsm1, rvrdm1, grav, & ! --- inputs: - & t0c, rd, ps, t1, q1, delt, & - & sfcemis, dlwflx, sfcnsw, sfcdsw, srflag, & - & cm, ch, prsl1, prslki, prsik1, prslk1, wind, & - & flag_iter, lprnt, ipr, & - & hice, fice, tice, weasd, tskin, tprcp, tiice, ep, & ! --- input/outputs: - & snwdph, qsurf, snowmt, gflux, cmm, chh, evap, hflx, & ! - & frac_grid, icy, islmsk_cice, & - & min_lakeice, min_seaice, oceanfrac, & - & errmsg, errflg - & ) + & ( im, kice, sbc, hvap, tgice, cp, eps, epsm1, rvrdm1, grav, & ! --- inputs: + & t0c, rd, ps, t1, q1, delt, & + & sfcemis, dlwflx, sfcnsw, sfcdsw, srflag, & + & cm, ch, prsl1, prslki, prsik1, prslk1, wind, & + & flag_iter, lprnt, ipr, & + & hice, fice, tice, weasd, tskin, tprcp, tiice, ep, & ! --- input/outputs: + & snwdph, qsurf, snowmt, gflux, cmm, chh, evap, hflx, & ! + & frac_grid, icy, islmsk_cice, & + & min_lakeice, min_seaice, oceanfrac, & + & errmsg, errflg ) ! ===================================================================== ! ! description: ! @@ -157,25 +157,25 @@ subroutine sfc_sice_run & real (kind=kind_phys), intent(in) :: sbc, hvap, tgice, cp, eps, & & epsm1, grav, rvrdm1, t0c, rd - real (kind=kind_phys), dimension(im), intent(in) :: ps, & + real (kind=kind_phys), dimension(:), intent(in) :: ps, & & t1, q1, sfcemis, dlwflx, sfcnsw, sfcdsw, srflag, cm, ch, & & prsl1, prslki, prsik1, prslk1, wind, oceanfrac ! integer, dimension(im), intent(in) :: islimsk - integer, dimension(im), intent(in) :: islmsk_cice + integer, dimension(:), intent(in) :: islmsk_cice real (kind=kind_phys), intent(in) :: delt, min_seaice, & & min_lakeice - logical, dimension(im), intent(in) :: flag_iter, icy + logical, dimension(:), intent(in) :: flag_iter, icy ! --- input/outputs: - real (kind=kind_phys), dimension(im), intent(inout) :: hice, & + real (kind=kind_phys), dimension(:), intent(inout) :: hice, & & fice, tice, weasd, tskin, tprcp, ep - real (kind=kind_phys), dimension(im,kice), intent(inout) :: tiice + real (kind=kind_phys), dimension(:,:), intent(inout) :: tiice ! --- outputs: - real (kind=kind_phys), dimension(im), intent(inout) :: snwdph, & + real (kind=kind_phys), dimension(:), intent(inout) :: snwdph, & & qsurf, snowmt, gflux, cmm, chh, evap, hflx character(len=*), intent(out) :: errmsg diff --git a/physics/sfcsub.F b/physics/sfcsub.F index a84e9aef9..067e5ad4e 100644 --- a/physics/sfcsub.F +++ b/physics/sfcsub.F @@ -3,7 +3,7 @@ !>\defgroup mod_sfcsub GFS sfcsub Module -!!\ingroup LSMs +!!\ingroup mod_GFS_phys_time_vary !> @{ !! This module contains grib code for each parameter-used in subroutines sfccycle() !! and setrmsk(). @@ -2684,8 +2684,8 @@ subroutine fixrdg(lugb,idim,jdim,fngrib, & close(lugb) call baopenr(lugb,fngrib,iret) if (iret .ne. 0) then - write(6,*) ' error in opening file ',trim(fngrib) - print *,'error in opening file ',trim(fngrib) + write(6,*) ' FATAL ERROR: in opening file ',trim(fngrib) + print *,'FATAL ERROR: in opening file ',trim(fngrib) call abort endif if (me .eq. 0) write(6,*) ' file ',trim(fngrib), @@ -2712,8 +2712,8 @@ subroutine fixrdg(lugb,idim,jdim,fngrib, & kpds0(4)=-1 kpds0(18)=-1 if(iret.ne.0) then - write(6,*) ' error in getgbh. iret: ', iret - if (iret == 99) write(6,*) ' field not found.' + write(6,*) ' FATAL ERROR: in getgbh. iret: ', iret + if (iret == 99) write(6,*) ' Field not found.' call abort endif ! @@ -2731,13 +2731,13 @@ subroutine fixrdg(lugb,idim,jdim,fngrib, & data8 = real(data4, kind=kind_io8) deallocate(data4) else - write(0,*)' Invalid w3kindreal --- aborting' + write(0,*)' FATAL ERROR: Invalid w3kindreal' call abort endif ! if(jret == 0) then if(ndata.eq.0) then - write(6,*) ' error in getgb' + write(6,*) ' FATAL ERROR: in getgb' write(6,*) ' kpds=',kpds write(6,*) ' kgds=',kgds call abort @@ -2753,7 +2753,7 @@ subroutine fixrdg(lugb,idim,jdim,fngrib, & else if (me ==. 0) write(6,*) 'idim,jdim=',idim,jdim &, ' gaus=',gaus,' blno=',blno,' blto=',blto - write(6,*) ' error in getgb : jret=',jret + write(6,*) ' FATAL ERROR in getgb : jret=',jret write(6,*) ' kpds(13)=',kpds(13),' kpds(15)=',kpds(15) call abort endif @@ -2828,18 +2828,18 @@ subroutine getarea(kgds,dlat,dlon,rslat,rnlat,wlon,elon,ijordr,me) return ! elseif(kgds(1).eq.1) then ! mercator projection - write(6,*) 'mercator grid' - write(6,*) 'cannot process' + write(6,*) 'FATAL ERROR: cannot process' + write(6,*) 'mercator grid.' call abort ! elseif(kgds(1).eq.2) then ! gnomonic projection - write(6,*) 'gnomonic grid' - write(6,*) 'error!! gnomonic projection not coded' + write(6,*) 'FATAL ERROR: cannot process' + write(6,*) 'gnomonic grid.' call abort ! elseif(kgds(1).eq.3) then ! lambert conformal - write(6,*) 'lambert conformal' - write(6,*) 'cannot process' + write(6,*) 'FATAL ERROR: cannot process' + write(6,*) 'lambert conformal grid.' call abort elseif(kgds(1).eq.4) then ! gaussian grid ! @@ -2881,33 +2881,33 @@ subroutine getarea(kgds,dlat,dlon,rslat,rnlat,wlon,elon,ijordr,me) return ! elseif(kgds(1).eq.5) then ! polar strereographic - write(6,*) 'polar stereographic grid' - write(6,*) 'cannot process' + write(6,*) 'FATAL ERROR: cannot process' + write(6,*) 'polar stereographic grid.' call abort return ! elseif(kgds(1).eq.13) then ! oblique lambert conformal - write(6,*) 'oblique lambert conformal grid' - write(6,*) 'cannot process' + write(6,*) 'FATAL ERROR: cannot process' + write(6,*) 'oblique lambert conformal grid.' call abort ! elseif(kgds(1).eq.50) then ! spherical coefficient - write(6,*) 'spherical coefficient' - write(6,*) 'cannot process' + write(6,*) 'FATAL ERROR: cannot process' + write(6,*) 'spherical coefficient grid.' call abort return ! elseif(kgds(1).eq.90) then ! space view perspective ! (orthographic grid) - write(6,*) 'space view perspective grid' - write(6,*) 'cannot process' + write(6,*) 'FATAL ERROR: cannot process' + write(6,*) 'space view perspective grid.' call abort return ! else ! unknown projection. abort. - write(6,*) 'error!! unknown map projection' + write(6,*) 'FATAL ERROR: Unknown map projection.' write(6,*) 'kgds(1)=',kgds(1) - print *,'error!! unknown map projection' + print *,'FATAL ERROR: Unknown map projection.' print *,'kgds(1)=',kgds(1) call abort endif @@ -3428,9 +3428,11 @@ subroutine la2ga(regin,imxin,jmxin,rinlon,rinlat,rlon,rlat,inttyp,& i2 = iindx2(i) if(wrk(i) .eq. 0.0) then if(.not.lmask) then - if (num_threads == 1) - & write(6,*) ' la2ga called with lmask=.true. but bad', - & ' rslmsk or slmask given' + if (num_threads == 1) then + write(6,*) ' FATAL ERROR: la2ga called' + write(6,*) ' with lmask=true. But bad rslmsk' + write(6,*) ' or slmask given.' + endif call abort endif ifill(it) = ifill(it) + 1 @@ -3478,7 +3480,8 @@ subroutine la2ga(regin,imxin,jmxin,rinlon,rinlat,rlon,rlat,inttyp,& enddo ! if (num_threads == 1) then - write(6,*) ' error!!! no filling value found in la2ga' + write(6,*) ' FATAL ERROR: no filling value' + write(6,*) ' found in routine la2ga.' ! write(6,*) ' i ix jx slmask(i) rslmsk ', ! & i,ix,jx,slmask(i),rslmsk(ix,jx) endif @@ -3707,7 +3710,7 @@ subroutine analy(lugb,iy,im,id,ih,fh,len,lsoil, & &, outlat, outlon, me) irttsf = iret if(iret == 1) then - write(6,*) 't surface analysis read error' + write(6,*) 'FATAL ERROR: t surface analysis read error.' call abort elseif(iret == -1) then if (me == 0) then @@ -3733,11 +3736,13 @@ subroutine analy(lugb,iy,im,id,ih,fh,len,lsoil, & &, imsk, jmsk, slmskh, gaus,blno, blto &, outlat, outlon, me) if(iret == 1) then - write(6,*) 't surface at ft=0 analysis read error' + write(6,*) 'FATAL ERROR: t surface at ft=0 analysis' + write(6,*) 'read error.' call abort elseif(iret == -1) then if (me == 0) then - write(6,*) 'could not find t surface analysis at ft=0' + write(6,*) 'FATAL ERROR: Could not find t surface' + write(6,*) 'analysis at ft=0.' endif call abort else @@ -3760,7 +3765,7 @@ subroutine analy(lugb,iy,im,id,ih,fh,len,lsoil, & &, outlat, outlon, me) irtalb = iret if(iret == 1) then - write(6,*) 'albedo analysis read error' + write(6,*) 'FATAL ERROR: albedo analysis read error.' call abort elseif(iret == -1) then if (me == 0) then @@ -3791,7 +3796,7 @@ subroutine analy(lugb,iy,im,id,ih,fh,len,lsoil, & &, outlat, outlon, me) irtalf = iret if(iret == 1) then - write(6,*) 'albedo analysis read error' + write(6,*) 'FATAL ERROR: albedo analysis read error.' call abort elseif(iret == -1) then if (me == 0) then @@ -3822,7 +3827,7 @@ subroutine analy(lugb,iy,im,id,ih,fh,len,lsoil, & &, outlat, outlon, me) irtwet=iret if(iret.eq.1) then - write(6,*) 'bucket wetness analysis read error' + write(6,*) 'FATAL ERROR: bucket wetness analysis read error.' call abort elseif(iret.eq.-1) then if (me .eq. 0) then @@ -3844,7 +3849,8 @@ subroutine analy(lugb,iy,im,id,ih,fh,len,lsoil, & &, outlat, outlon, me) irtsmc=iret if(iret.eq.1) then - write(6,*) 'layer soil wetness analysis read error' + write(6,*) 'FATAL ERROR: layer soil wetness analysis' + write(6,*) 'read error.' call abort elseif(iret.eq.-1) then if (me .eq. 0) then @@ -3879,8 +3885,8 @@ subroutine analy(lugb,iy,im,id,ih,fh,len,lsoil, & !cggg the grib parameter id number. call baopenr(lugb,fnsnoa,iret) if (iret .ne. 0) then - write(6,*) ' error in opening file ',trim(fnsnoa) - print *,'error in opening file ',trim(fnsnoa) + write(6,*) 'FATAL ERROR: in opening file ',trim(fnsnoa) + print *,'FATAL ERROR: in opening file ',trim(fnsnoa) call abort endif lugi=0 @@ -3892,8 +3898,9 @@ subroutine analy(lugb,iy,im,id,ih,fh,len,lsoil, & & lskip,kpds,kgds,iret) close(lugb) if (iret .ne. 0) then - write(6,*) ' error reading header of file: ',trim(fnsnoa) - print *,'error reading header of file: ',trim(fnsnoa) + write(6,*) ' FATAL ERROR: reading header' + write(6,*) ' of file: ',trim(fnsnoa) + print *,'FATAL ERROR: reading header of file: ',trim(fnsnoa) call abort endif if (kgds(1) == 4) then ! gaussian data is depth @@ -3912,7 +3919,7 @@ subroutine analy(lugb,iy,im,id,ih,fh,len,lsoil, & !cggg snow mods end irtscv=iret if(iret.eq.1) then - write(6,*) 'snow depth analysis read error' + write(6,*) 'FATAL ERROR: snow depth analysis read error.' call abort elseif(iret.eq.-1) then if (me .eq. 0) then @@ -3934,7 +3941,7 @@ subroutine analy(lugb,iy,im,id,ih,fh,len,lsoil, & &, outlat, outlon, me) irtsno=iret if(iret.eq.1) then - write(6,*) 'snow cover analysis read error' + write(6,*) 'FATAL ERROR: snow cover analysis read error.' call abort elseif(iret.eq.-1) then if (me .eq. 0) then @@ -3963,7 +3970,8 @@ subroutine analy(lugb,iy,im,id,ih,fh,len,lsoil, & &, outlat, outlon, me) irtacn=iret if(iret.eq.1) then - write(6,*) 'ice concentration analysis read error' + write(6,*) 'FATAL ERROR: ice concentration' + write(6,*) 'analysis read error.' call abort elseif(iret.eq.-1) then if (me .eq. 0) then @@ -3982,7 +3990,7 @@ subroutine analy(lugb,iy,im,id,ih,fh,len,lsoil, & &, outlat, outlon, me) irtais=iret if(iret.eq.1) then - write(6,*) 'ice mask analysis read error' + write(6,*) 'FATAL ERROR: ice mask analysis read error.' call abort elseif(iret.eq.-1) then if (me .eq. 0) then @@ -4010,7 +4018,7 @@ subroutine analy(lugb,iy,im,id,ih,fh,len,lsoil, & &, outlat, outlon, me) irtzor=iret if(iret.eq.1) then - write(6,*) 'roughness analysis read error' + write(6,*) 'FATAL ERROR: roughness analysis read error.' call abort elseif(iret.eq.-1) then if (me .eq. 0) then @@ -4039,7 +4047,7 @@ subroutine analy(lugb,iy,im,id,ih,fh,len,lsoil, & &, outlat, outlon, me) irttg3=iret if(iret.eq.1) then - write(6,*) 'deep soil tmp analysis read error' + write(6,*) 'FATAL ERROR: deep soil tmp analysis read error.' call abort elseif(iret.eq.-1) then if (me .eq. 0) then @@ -4062,7 +4070,7 @@ subroutine analy(lugb,iy,im,id,ih,fh,len,lsoil, & &, outlat, outlon, me) irtstc=iret if(iret.eq.1) then - write(6,*) 'layer soil tmp analysis read error' + write(6,*) 'FATAL ERROR: layer soil tmp analysis read error.' call abort elseif(iret.eq.-1) then if (me .eq. 0) then @@ -4091,7 +4099,8 @@ subroutine analy(lugb,iy,im,id,ih,fh,len,lsoil, & &, outlat, outlon, me) irtveg=iret if(iret.eq.1) then - write(6,*) 'vegetation cover analysis read error' + write(6,*) 'FATAL ERROR: vegetation cover analysis' + write(6,*) 'read error.' call abort elseif(iret.eq.-1) then if (me .eq. 0) then @@ -4120,7 +4129,8 @@ subroutine analy(lugb,iy,im,id,ih,fh,len,lsoil, & &, outlat, outlon, me) irtvet=iret if(iret.eq.1) then - write(6,*) 'vegetation type analysis read error' + write(6,*) 'FATAL ERROR: vegetation type analysis' + write(6,*) 'read error.' call abort elseif(iret.eq.-1) then if (me .eq. 0) then @@ -4149,7 +4159,7 @@ subroutine analy(lugb,iy,im,id,ih,fh,len,lsoil, & &, outlat, outlon, me) irtsot=iret if(iret.eq.1) then - write(6,*) 'soil type analysis read error' + write(6,*) 'FATAL ERROR: soil type analysis read error.' call abort elseif(iret.eq.-1) then if (me .eq. 0) then @@ -4180,7 +4190,7 @@ subroutine analy(lugb,iy,im,id,ih,fh,len,lsoil, & &, outlat, outlon, me) irtvmn=iret if(iret.eq.1) then - write(6,*) 'shdmin analysis read error' + write(6,*) 'FATAL ERROR: shdmin analysis read error.' call abort elseif(iret.eq.-1) then if (me .eq. 0) then @@ -4210,7 +4220,7 @@ subroutine analy(lugb,iy,im,id,ih,fh,len,lsoil, & &, outlat, outlon, me) irtvmx=iret if(iret.eq.1) then - write(6,*) 'shdmax analysis read error' + write(6,*) 'FATAL ERROR: shdmax analysis read error.' call abort elseif(iret.eq.-1) then if (me .eq. 0) then @@ -4240,7 +4250,7 @@ subroutine analy(lugb,iy,im,id,ih,fh,len,lsoil, & &, outlat, outlon, me) irtslp=iret if(iret.eq.1) then - write(6,*) 'slope type analysis read error' + write(6,*) 'FATAL ERROR: slope type analysis read error.' call abort elseif(iret.eq.-1) then if (me .eq. 0) then @@ -4270,7 +4280,7 @@ subroutine analy(lugb,iy,im,id,ih,fh,len,lsoil, & &, outlat, outlon, me) irtabs=iret if(iret.eq.1) then - write(6,*) 'snoalb analysis read error' + write(6,*) 'FATAL ERROR: snoalb analysis read error.' call abort elseif(iret.eq.-1) then if (me .eq. 0) then @@ -4451,7 +4461,8 @@ subroutine rof01(aisfld, len, op, crit) endif enddo else - write(6,*) ' illegal operator in rof01. op=',op + write(6,*) ' FATAL ERROR: illegal operator' + write(6,*) ' in rof01. op=',op call abort endif ! @@ -4507,7 +4518,8 @@ subroutine rof01_len(aisfld, len, op, lake, critl, crits) endif enddo else - write(6,*) ' illegal operator in rof01. op=',op + write(6,*) ' FATAL ERROR: illegal operator' + write(6,*) ' in rof01_len. op=',op call abort endif ! @@ -5071,7 +5083,7 @@ subroutine newice(slianl,slifcs,tsfanl,tsffcs,len,lsoil, & do i=1,len if(slifcs(i).ne.slianl(i)) then if(slifcs(i).eq.1..or.slianl(i).eq.1.) then - print *,'inconsistency in slifcs or slianl' + print *,'FATAL ERROR: inconsistency in slifcs or slianl.' print 910,rla(i),rlo(i),slifcs(i),slianl(i), & tsffcs(i),tsfanl(i) 910 format(2x,'at lat=',f5.1,' lon=',f5.1,' slifcs=',f4.1, @@ -5203,7 +5215,8 @@ subroutine qcsice(ais,glacir,amxice,aicice,aicsea,sllnd,slmask, & kount1 = 0 do i=1,len if(ais(i).ne.aicice.and.ais(i).ne.aicsea) then - print *,'sea ice mask not ',aicice,' or ',aicsea + print *,'FATAL ERROR: sea ice' + print *,'mask not ',aicice,' or ',aicsea print *,'ais(i),aicice,aicsea,rla(i),rlo(i,=', & ais(i),aicice,aicsea,rla(i),rlo(i) call abort @@ -6109,6 +6122,8 @@ subroutine setrmsk(kpds5,slmask,igaul,jgaul,wlon,rnlat, & rltout(j) = rnlat + (j-1) * dlat enddo else ! grib file on some other grid + write(6,*) ' FATAL ERROR: Mask data on' + write(6,*) ' unsupported grid.' call abort endif dlon = 360.0 / imax @@ -7069,7 +7084,7 @@ subroutine clima(lugb,iy,im,id,ih,fh,len,lsoil, & go to 10 endif enddo - print *,'wrong rjday',rjday + print *,'FATAL ERROR: wrong rjday',rjday call abort 10 continue wei1m = (dayhf(mon2)-rjday)/(dayhf(mon2)-dayhf(mon1)) @@ -7148,7 +7163,7 @@ subroutine clima(lugb,iy,im,id,ih,fh,len,lsoil, & go to 20 endif enddo - print *,'wrong rjday',rjday + print *,'FATAL ERROR: wrong rjday',rjday call abort 20 continue wei1m = (dayhf(mon2)-rjday)/(dayhf(mon2)-dayhf(mon1)) @@ -7172,7 +7187,7 @@ subroutine clima(lugb,iy,im,id,ih,fh,len,lsoil, & go to 30 endif enddo - print *,'wrong rjday',rjday + print *,'FATAL ERROR: wrong rjday',rjday call abort 30 continue wei1s = (dayhf(sea2)-rjday)/(dayhf(sea2)-dayhf(sea1)) @@ -7196,7 +7211,7 @@ subroutine clima(lugb,iy,im,id,ih,fh,len,lsoil, & go to 31 endif enddo - print *,'wrong rjday',rjday + print *,'FATAL ERROR: wrong rjday',rjday call abort 31 continue wei1y = (dayhf(hyr2)-rjday)/(dayhf(hyr2)-dayhf(hyr1)) @@ -7284,9 +7299,11 @@ subroutine clima(lugb,iy,im,id,ih,fh,len,lsoil, & if (me .eq. 0) write(6,*) 'climatological vegetation', & ' type read in.' elseif(index(fnsmcc,'soilmgldas') /= 0) then ! new soil moisture climo - if (me .eq. 0) write(6,*) 'fatal error: must choose' - if (me .eq. 0) write(6,*) 'climatological veg type when' - if (me .eq. 0) write(6,*) 'using new gldas soil moisture.' + if (me .eq. 0) then + write(6,*) 'FATAL ERROR: must choose' + write(6,*) 'climatological veg type when' + write(6,*) 'using new gldas soil moisture.' + endif call abort endif ! @@ -7499,7 +7516,8 @@ subroutine clima(lugb,iy,im,id,ih,fh,len,lsoil, & deallocate(slmask_noice) endif else - write(6,*) 'climatological soil wetness file not given' + write(6,*) 'FATAL ERROR: climatological soil wetness' + write(6,*) 'file not given.' call abort endif ! @@ -7532,7 +7550,8 @@ subroutine clima(lugb,iy,im,id,ih,fh,len,lsoil, & &, imsk, jmsk, slmskh, gaus,blno, blto &, outlat, outlon, me) else - write(6,*) 'climatological ice cover file not given' + write(6,*) 'FATAL ERROR: climatological ice cover' + write(6,*) 'file not given.' call abort endif ! @@ -7768,7 +7787,8 @@ subroutine clima(lugb,iy,im,id,ih,fh,len,lsoil, & deallocate(slmask_noice) endif else - write(6,*) 'climatological soil wetness file not given' + write(6,*) 'FATAL ERROR: climatological soil wetness' + write(6,*) 'file not given.' call abort endif ! @@ -7786,7 +7806,8 @@ subroutine clima(lugb,iy,im,id,ih,fh,len,lsoil, & &, imsk, jmsk, slmskh, gaus,blno, blto &, outlat, outlon, me) else - write(6,*) 'climatological ice cover file not given' + write(6,*) 'FATAL ERROR: climatological ice cover' + write(6,*) 'file not given.' call abort endif ! @@ -7853,7 +7874,10 @@ subroutine clima(lugb,iy,im,id,ih,fh,len,lsoil, & ! set to point at the proper vegetation type file. if (fnzorc(1:3) == 'sib') then if (fnvetc(1:4) == ' ') then - if (me==0) write(6,*) "must choose sib veg type climo file" + if (me==0) then + write(6,*) "FATAL ERROR: must choose sib" + write(6,*) "vegetation type climo file." + endif call abort endif zorclm = 0.0 @@ -7865,7 +7889,10 @@ subroutine clima(lugb,iy,im,id,ih,fh,len,lsoil, & enddo elseif(fnzorc(1:4) == 'igbp') then if (fnvetc(1:4) == ' ') then - if (me == 0) write(6,*) "must choose igbp veg type climo file" + if (me == 0) then + write(6,*) "FATAL ERROR: must choose igbp" + write(6,*) "vegetation type climo file." + endif call abort endif zorclm = 0.0 @@ -8107,8 +8134,8 @@ subroutine fixrdc_tile(filename_raw, tile_num_ch, & case(256:257) error=nf90_inq_varid(ncid, 'vegetation_greenness', id_var) case default - print*,'fatal error in fixrdc_tile of sfcsub.F.' - print*,'unknown variable.' + print*,'FATAL ERROR in fixrdc_tile of sfcsub.F.' + print*,'Unknown variable.' call abort end select if (error /= nf90_noerr) call netcdf_err(error) @@ -8181,7 +8208,7 @@ subroutine netcdf_err(error) character(len=256) :: errmsg errmsg = nf90_strerror(error) - print*,'fatal error in sfcsub.F: ', trim(errmsg) + print*,'FATAL ERROR in sfcsub.F: ', trim(errmsg) call abort end subroutine netcdf_err @@ -8239,8 +8266,8 @@ subroutine fixrdc(lugb,fngrib,kpds5,kpds7,mon,slmask, & close(lugb) call baopenr(lugb,fngrib,iret) if (iret .ne. 0) then - write(6,*) ' error in opening file ',trim(fngrib) - print *,'error in opening file ',trim(fngrib) + write(6,*) ' FATAL ERROR: in opening file ',trim(fngrib) + print *,'FATAL ERROR: in opening file ',trim(fngrib) call abort endif if (me .eq. 0) write(6,*) ' file ',trim(fngrib), @@ -8267,8 +8294,8 @@ subroutine fixrdc(lugb,fngrib,kpds5,kpds7,mon,slmask, & kpds0(4) = -1 kpds0(18) = -1 if(iret.ne.0) then - write(6,*) ' error in getgbh. iret: ', iret - if (iret==99) write(6,*) ' field not found.' + write(6,*) ' FATAL ERROR: in getgbh. iret: ', iret + if (iret==99) write(6,*) ' Field not found.' call abort endif ! @@ -8294,7 +8321,7 @@ subroutine fixrdc(lugb,fngrib,kpds5,kpds7,mon,slmask, & & (kpds(i),i=8,11) if(jret.eq.0) then if(ndata.eq.0) then - write(6,*) ' error in getgb' + write(6,*) ' FATAL ERROR: in getgb' write(6,*) ' kpds=',kpds write(6,*) ' kgds=',kgds call abort @@ -8311,7 +8338,7 @@ subroutine fixrdc(lugb,fngrib,kpds5,kpds7,mon,slmask, & enddo if (me .eq. 0) write(6,*) 'imax,jmax,ijmax=',imax,jmax,ijmax else - write(6,*) ' error in getgb - jret=', jret + write(6,*) ' FATAL ERROR: in getgb - jret=', jret call abort endif ! @@ -8470,8 +8497,8 @@ subroutine fixrda(lugb,fngrib,kpds5,slmask, & close(lugb) call baopenr(lugb,fngrib,iret) if (iret .ne. 0) then - write(6,*) ' error in opening file ',trim(fngrib) - print *,'error in opening file ',trim(fngrib) + write(6,*) ' FATAL ERROR: in opening file ',trim(fngrib) + print *,'FATAL ERROR in opening file ',trim(fngrib) call abort endif if (me .eq. 0) write(6,*) ' file ',trim(fngrib), @@ -8497,8 +8524,8 @@ subroutine fixrda(lugb,fngrib,kpds5,slmask, & kpds0(4)=-1 kpds0(18)=-1 if(iret.ne.0) then - write(6,*) ' error in getgbh. iret: ', iret - if(iret==99) write(6,*) ' field not found.' + write(6,*) ' FATAL ERROR: in getgbh. iret: ', iret + if(iret==99) write(6,*) ' Field not found.' call abort endif ! @@ -8541,7 +8568,7 @@ subroutine fixrda(lugb,fngrib,kpds5,slmask, & & (kpds(i),i=8,11) if(jret.eq.0) then if(ndata.eq.0) then - write(6,*) ' error in getgb' + write(6,*) ' FATAL ERROR: in getgb' write(6,*) ' kpds=',kpds write(6,*) ' kgds=',kgds call abort diff --git a/physics/shinhongvdif.F90 b/physics/shinhongvdif.F90 index 0b88f2978..dbd21d255 100644 --- a/physics/shinhongvdif.F90 +++ b/physics/shinhongvdif.F90 @@ -111,32 +111,31 @@ subroutine shinhongvdif_run(im,km,ux,vx,tx,qx,p2d,p2di,pi2d, & real(kind=kind_phys), intent(in ) :: g,cp,rd,rv,ep1,ep2,xlv,dt logical, intent(in ) :: lssav, ldiag3d, flag_for_pbl_generic_tend ! 3D in - real(kind=kind_phys), dimension(im, km) , & + real(kind=kind_phys), dimension(:,:) , & intent(in ) :: phil, & pi2d, & p2d, & ux, & vx, & tx - real(kind=kind_phys), dimension( im, km, ntrac ) , & + real(kind=kind_phys), dimension(:,:,:) , & intent(in ) :: qx - real(kind=kind_phys), dimension( im, km+1 ) , & + real(kind=kind_phys), dimension(:,:) , & intent(in ) :: p2di, & phii ! 3D in&out - real(kind=kind_phys), dimension(im, km) , & + real(kind=kind_phys), dimension(:,:) , & intent(inout) :: utnp, & vtnp, & ttnp - real(kind=kind_phys), dimension(im, km, ntrac ) , & + real(kind=kind_phys), dimension(:,:,:) , & intent(inout) :: qtnp - ! 2D in - integer, dimension(im) , & + integer, dimension(:) , & intent(in ) :: landmask - real(kind=kind_phys), dimension(im) , & + real(kind=kind_phys), dimension(:) , & intent(in ) :: heat, & evap, & br, & @@ -150,17 +149,16 @@ subroutine shinhongvdif_run(im,km,ux,vx,tx,qx,p2d,p2di,pi2d, & v10, & dx ! 2D: out - integer, dimension(im) , & + integer, dimension(:) , & intent(out ) :: kpbl1d - real(kind=kind_phys), dimension(im) , & + real(kind=kind_phys), dimension(:) , & intent(out ) :: hpbl, & dusfc, & dvsfc, & dtsfc, & dqsfc - ! 3D diagnostic tendencies; dtend is only allocated if ldiag3d=.true. real(kind=kind_phys), intent(inout), optional :: dtend(:,:,:) integer, intent(in) :: dtidx(:,:), index_of_process_pbl, ntqv, & index_of_x_wind, index_of_y_wind, index_of_temperature @@ -1326,7 +1324,7 @@ subroutine shinhongvdif_run(im,km,ux,vx,tx,qx,p2d,p2di,pi2d, & ! !---- find the mixing length ! - call mixlen(lmh,uxk,vxk,txk,thxk,qx(i,kts,1),qx(i,kts,ntcw) & + call mixlen(lmh,uxk,vxk,txk,thxk,qx(i,kts:kte,1),qx(i,kts:kte,ntcw) & ,q2xk,zqk,ust(i),corf,epshol(i) & ,s2,gh,rig,el & ,hpbl(i),kpbl(i),lmxl,ct(i) & @@ -1477,13 +1475,13 @@ subroutine tridin_ysu(cl,cm,cu,r2,au,f2,its,ite,kts,kte,nt) ! real(kind=kind_phys), dimension( its:ite, kts:kte ) , & intent(in ) :: cm - real(kind=kind_phys), dimension( its:ite, kts:kte,nt ) , & + real(kind=kind_phys), dimension( its:ite, kts:kte,nt) , & intent(in ) :: r2 ! real(kind=kind_phys), dimension( its:ite, kts:kte ) , & intent(inout) :: au, & cu - real(kind=kind_phys), dimension( its:ite, kts:kte,nt ) , & + real(kind=kind_phys), dimension( its:ite, kts:kte,nt) , & intent(inout) :: f2 ! real(kind=kind_phys) :: fk @@ -1624,7 +1622,7 @@ subroutine mixlen(lmh,u,v,t,the,q,cwm,q2,z,ustar,corf,epshol, & qol2st,qol2un,qdzl,rdz,sq,srel,szq,tem,thm,vkrmz,rlambda, & rlb,rln,f real(kind=kind_phys) :: ckp - real(kind=kind_phys), dimension( kts:kte ) :: q1, & + real(kind=kind_phys), dimension( kts:kte ) :: q1, & en2 real(kind=kind_phys), dimension( kts+1:kte ) :: dth, & elm, & @@ -1790,12 +1788,12 @@ subroutine prodq2(lmh,dtturbl,ustar,s2,ri,q2,el,z,akm,akh, & ! logical, intent(in ) :: pblflg ! - real(kind=kind_phys), dimension( kts:kte ) , & + real(kind=kind_phys), dimension( : ) , & intent(in ) :: uxk, & vxk, & thxk, & thvxk - real(kind=kind_phys), dimension( kts+1:kte ) , & + real(kind=kind_phys), dimension( : ) , & intent(in ) :: s2, & ri, & akm, & @@ -1806,10 +1804,10 @@ subroutine prodq2(lmh,dtturbl,ustar,s2,ri,q2,el,z,akm,akh, & vfxpbl, & qfxpbl ! - real(kind=kind_phys), dimension( kts:kte+1 ) , & + real(kind=kind_phys), dimension( : ) , & intent(in ) :: z ! - real(kind=kind_phys), dimension( kts:kte ) , & + real(kind=kind_phys), dimension( : ) , & intent(inout) :: q2 ! ! local vars @@ -1897,16 +1895,16 @@ subroutine vdifq(lmh,dtdif,q2,el,z, & ! logical, intent(in ) :: pblflg ! - real(kind=kind_phys), dimension( kts:kte ) , & + real(kind=kind_phys), dimension( : ) , & intent(in ) :: hgame, & ptke1 - real(kind=kind_phys), dimension( kts+1:kte ) , & + real(kind=kind_phys), dimension( : ) , & intent(in ) :: el, & akhk - real(kind=kind_phys), dimension( kts:kte+1 ) , & + real(kind=kind_phys), dimension( : ) , & intent(in ) :: z ! - real(kind=kind_phys), dimension( kts:kte ) , & + real(kind=kind_phys), dimension( : ) , & intent(inout) :: q2 ! ! local vars diff --git a/physics/shinhongvdif.meta b/physics/shinhongvdif.meta index ad0d23665..41e177695 100644 --- a/physics/shinhongvdif.meta +++ b/physics/shinhongvdif.meta @@ -86,18 +86,18 @@ kind = kind_phys intent = in optional = F -[vtnp] - standard_name = tendency_of_y_wind_due_to_model_physics - long_name = updated tendency of the y wind +[utnp] + standard_name = tendency_of_x_wind_due_to_model_physics + long_name = updated tendency of the x wind units = m s-2 dimensions = (horizontal_loop_extent,vertical_dimension) type = real kind = kind_phys intent = inout optional = F -[utnp] - standard_name = tendency_of_x_wind_due_to_model_physics - long_name = updated tendency of the x wind +[vtnp] + standard_name = tendency_of_y_wind_due_to_model_physics + long_name = updated tendency of the y wind units = m s-2 dimensions = (horizontal_loop_extent,vertical_dimension) type = real diff --git a/physics/ugwp_driver_v0.F b/physics/ugwp_driver_v0.F index abb78e7a6..844acf722 100644 --- a/physics/ugwp_driver_v0.F +++ b/physics/ugwp_driver_v0.F @@ -1,3 +1,5 @@ +!>\file ugwp_driver_v0.F + ! !===================================================================== ! @@ -792,7 +794,6 @@ SUBROUTINE GWDPS_V0(IM, km, imx, do_tofd, call oro_wam_2017(im, km, npt, ipt, kref, kdt, me, master, & dtp, dxres, taub, u1, v1, t1, xn, yn, bnv2, ro, prsi,prsL, - & con_g, con_omega, & del, sigma, hprime, gamma, theta, & sinlat, xlatd, taup, taud, pkdis) diff --git a/physics/ugwpv1_gsldrag.F90 b/physics/ugwpv1_gsldrag.F90 index b9828ccb4..518aefab4 100644 --- a/physics/ugwpv1_gsldrag.F90 +++ b/physics/ugwpv1_gsldrag.F90 @@ -84,15 +84,15 @@ subroutine ugwpv1_gsldrag_init ( & integer, intent (in) :: nlunit character(len=*), intent (in) :: input_nml_file(:) integer, intent (in) :: logunit - integer, intent(in) :: jdat(8) + integer, intent (in) :: jdat(:) integer, intent (in) :: lonr integer, intent (in) :: levs integer, intent (in) :: latr - real(kind=kind_phys), intent (in) :: ak(levs+1), bk(levs+1) + real(kind=kind_phys), intent (in) :: ak(:), bk(:) real(kind=kind_phys), intent (in) :: dtp real(kind=kind_phys), intent (in) :: con_p0, con_pi, con_rerth - real(kind=kind_phys), intent(in) :: con_g, con_cp, con_rd, con_rv, con_omega, con_fvirt + real(kind=kind_phys), intent (in) :: con_g, con_cp, con_rd, con_rv, con_omega, con_fvirt logical, intent (in) :: do_ugwp logical, intent (in) :: do_ugwp_v0, do_ugwp_v0_orog_only, & @@ -308,7 +308,6 @@ subroutine ugwpv1_gsldrag_run(me, master, im, levs, ntrac, lonr, dtp, fhzero,kd ldiag3d, lssav, flag_for_gwd_generic_tend, do_gsl_drag_ls_bl, do_gsl_drag_ss, & do_gsl_drag_tofd, do_ugwp_v1, do_ugwp_v1_orog_only, do_ugwp_v1_w_gsldrag, & gwd_opt, do_tofd, ldiag_ugwp, cdmbgwd, jdat, & -! con_g, con_omega, con_pi, con_cp, con_rd, con_rv, con_rerth, con_fvirt, & nmtvr, hprime, oc, theta, sigma, gamma, elvmax, clx, oa4, & varss,oc1ss,oa4ss,ol4ss, dx, xlat, xlat_d, sinlat, coslat, area, & rain, br1, hpbl, kpbl, slmsk, & @@ -365,20 +364,20 @@ subroutine ugwpv1_gsldrag_run(me, master, im, levs, ntrac, lonr, dtp, fhzero,kd integer, intent(in) :: me, master, im, levs, ntrac,lonr real(kind=kind_phys), intent(in) :: dtp, fhzero - integer, intent(in) :: kdt, jdat(8) + integer, intent(in) :: kdt, jdat(:) ! SSO parameters and variables integer, intent(in) :: gwd_opt !gwd_opt and nmtvr are "redundant" controls integer, intent(in) :: nmtvr - real(kind=kind_phys), intent(in) :: cdmbgwd(4) ! for gsl_drag + real(kind=kind_phys), intent(in) :: cdmbgwd(:) ! for gsl_drag - real(kind=kind_phys), intent(in), dimension(im) :: hprime, oc, theta, sigma, gamma + real(kind=kind_phys), intent(in), dimension(:) :: hprime, oc, theta, sigma, gamma - real(kind=kind_phys), intent(in), dimension(im) :: elvmax - real(kind=kind_phys), intent(in), dimension(im, 4) :: clx, oa4 + real(kind=kind_phys), intent(in), dimension(:) :: elvmax + real(kind=kind_phys), intent(in), dimension(:,:) :: clx, oa4 - real(kind=kind_phys), intent(in), dimension(im) :: varss,oc1ss,dx - real(kind=kind_phys), intent(in), dimension(im, 4) :: oa4ss,ol4ss + real(kind=kind_phys), intent(in), dimension(:) :: varss,oc1ss,dx + real(kind=kind_phys), intent(in), dimension(:,:) :: oa4ss,ol4ss !===== !ccpp-style passing constants, I prefer to take them out from the "call-subr" list @@ -387,48 +386,48 @@ subroutine ugwpv1_gsldrag_run(me, master, im, levs, ntrac, lonr, dtp, fhzero,kd ! con_rv, con_rerth, con_fvirt ! grids - real(kind=kind_phys), intent(in), dimension(im) :: xlat, xlat_d, sinlat, coslat, area + real(kind=kind_phys), intent(in), dimension(:) :: xlat, xlat_d, sinlat, coslat, area ! State vars + PBL/slmsk +rain - real(kind=kind_phys), intent(in), dimension(im, levs) :: del, ugrs, vgrs, tgrs, prsl, prslk, phil - real(kind=kind_phys), intent(in), dimension(im, levs+1) :: prsi, phii - real(kind=kind_phys), intent(in), dimension(im, levs) :: q1 - integer, intent(in), dimension(im) :: kpbl + real(kind=kind_phys), intent(in), dimension(:,:) :: del, ugrs, vgrs, tgrs, prsl, prslk, phil + real(kind=kind_phys), intent(in), dimension(:,:) :: prsi, phii + real(kind=kind_phys), intent(in), dimension(:,:) :: q1 + integer, intent(in), dimension(:) :: kpbl - real(kind=kind_phys), intent(in), dimension(im) :: rain - real(kind=kind_phys), intent(in), dimension(im) :: br1, hpbl, slmsk + real(kind=kind_phys), intent(in), dimension(:) :: rain + real(kind=kind_phys), intent(in), dimension(:) :: br1, hpbl, slmsk ! ! moved to GFS_phys_time_vary -! real(kind=kind_phys), intent(in), dimension(im) :: ddy_j1tau, ddy_j2tau -! integer, intent(in), dimension(im) :: jindx1_tau, jindx2_tau - real(kind=kind_phys), intent(in), dimension(im) :: tau_amf +! real(kind=kind_phys), intent(in), dimension(:) :: ddy_j1tau, ddy_j2tau +! integer, intent(in), dimension(:) :: jindx1_tau, jindx2_tau + real(kind=kind_phys), intent(in), dimension(:) :: tau_amf !Output (optional): - real(kind=kind_phys), intent(out), dimension(im) :: & + real(kind=kind_phys), intent(out), dimension(:) :: & du_ogwcol, dv_ogwcol, du_oblcol, dv_oblcol, & du_osscol, dv_osscol, du_ofdcol, dv_ofdcol ! ! we may add later but due to launch in the upper layes ~ mPa comparing to ORO Pa*(0.1) ! du_ngwcol, dv_ngwcol - real(kind=kind_phys), intent(out), dimension(im) :: dusfcg, dvsfcg - real(kind=kind_phys), intent(out), dimension(im) :: tau_ogw, tau_ngw, tau_oss + real(kind=kind_phys), intent(out), dimension(:) :: dusfcg, dvsfcg + real(kind=kind_phys), intent(out), dimension(:) :: tau_ogw, tau_ngw, tau_oss - real(kind=kind_phys), intent(out) , dimension(im, levs) :: & + real(kind=kind_phys), intent(out) , dimension(:,:) :: & dudt_ogw, dvdt_ogw, dudt_obl, dvdt_obl, & dudt_oss, dvdt_oss, dudt_ofd, dvdt_ofd - real(kind=kind_phys), intent(out) , dimension(im, levs) :: dudt_ngw, dvdt_ngw, kdis_ngw - real(kind=kind_phys), intent(out) , dimension(im, levs) :: dudt_gw, dvdt_gw, kdis_gw + real(kind=kind_phys), intent(out) , dimension(:,:) :: dudt_ngw, dvdt_ngw, kdis_ngw + real(kind=kind_phys), intent(out) , dimension(:,:) :: dudt_gw, dvdt_gw, kdis_gw - real(kind=kind_phys), intent(out) , dimension(im, levs) :: dtdt_ngw, dtdt_gw + real(kind=kind_phys), intent(out) , dimension(:,:) :: dtdt_ngw, dtdt_gw - real(kind=kind_phys), intent(out) , dimension(im) :: zogw, zlwb, zobl, zngw + real(kind=kind_phys), intent(out) , dimension(:) :: zogw, zlwb, zobl, zngw ! ! - real(kind=kind_phys), intent(inout), dimension(im, levs) :: dudt, dvdt, dtdt + real(kind=kind_phys), intent(inout), dimension(:,:) :: dudt, dvdt, dtdt ! dtend is only allocated if ldiag=.true. real(kind=kind_phys), optional, intent(inout) :: dtend(:,:,:) @@ -436,7 +435,7 @@ subroutine ugwpv1_gsldrag_run(me, master, im, levs, ntrac, lonr, dtp, fhzero,kd index_of_x_wind, index_of_y_wind, index_of_temperature, & index_of_process_orographic_gwd, index_of_process_nonorographic_gwd - real(kind=kind_phys), intent(out), dimension(im) :: rdxzb ! for stoch phys. mtb-level + real(kind=kind_phys), intent(out), dimension(:) :: rdxzb ! for stoch phys. mtb-level character(len=*), intent(out) :: errmsg integer, intent(out) :: errflg @@ -493,16 +492,21 @@ subroutine ugwpv1_gsldrag_run(me, master, im, levs, ntrac, lonr, dtp, fhzero,kd !=============================================================== ! ORO-diag - dudt_ogw(:,:) = 0. ; dvdt_ogw(:,:)=0. ; dudt_obl(:,:)=0. ; dvdt_obl(:,:)=0. - dudt_oss(:,:) = 0. ; dvdt_oss(:,:)=0. ; dudt_ofd(:,:)=0. ; dvdt_ofd(:,:)=0. + if (do_ugwp_v1 .or. gwd_opt==33 .or. gwd_opt==22) then + dudt_ogw(:,:)= 0.; dvdt_ogw(:,:)=0.; dudt_obl(:,:)=0.; dvdt_obl(:,:)=0. + dudt_oss(:,:)= 0.; dvdt_oss(:,:)=0.; dudt_ofd(:,:)=0.; dvdt_ofd(:,:)=0. + du_ogwcol(:)=0. ; dv_ogwcol(:)=0. ; du_oblcol(:)=0. ; dv_oblcol(:)=0. + du_osscol(:)=0. ; dv_osscol(:)=0. ;du_ofdcol(:)=0. ; dv_ofdcol(:)=0. + else + dudt_ogw(:,:) = 0. + end if - dusfcg (:) = 0. ; dvsfcg(:) =0. - - du_ogwcol(:)=0. ; dv_ogwcol(:)=0. ; du_oblcol(:)=0. ; dv_oblcol(:)=0. - du_osscol(:)=0. ; dv_osscol(:)=0. ;du_ofdcol(:)=0. ; dv_ofdcol(:)=0. + dusfcg (:) = 0. ; dvsfcg(:) =0. ! - dudt_ngw(:,:)=0. ; dvdt_ngw(:,:)=0. ; dtdt_ngw(:,:)=0. ; kdis_ngw(:,:)=0. + if (do_ugwp_v1) then + dudt_ngw(:,:)=0.; dvdt_ngw(:,:)=0.; dtdt_ngw(:,:)=0.; kdis_ngw(:,:)=0. + end if ! ngw+ogw - diag @@ -707,16 +711,23 @@ subroutine ugwpv1_gsldrag_run(me, master, im, levs, ntrac, lonr, dtp, fhzero,kd ! ! get total sso-OGW + NGW ! - dudt_gw = Pdudt +dudt_ngw - dvdt_gw = Pdvdt +dvdt_ngw - dtdt_gw = Pdtdt +dtdt_ngw - kdis_gw = Pkdis +kdis_ngw + if (do_ugwp_v1) then + dudt_gw = Pdudt + dudt_ngw + dvdt_gw = Pdvdt + dvdt_ngw + dtdt_gw = Pdtdt + dtdt_ngw + kdis_gw = Pkdis + kdis_ngw + else + dudt_gw = Pdudt + dvdt_gw = Pdvdt + dtdt_gw = Pdtdt + kdis_gw = Pkdis + end if ! ! accumulate "tendencies" as in the GFS-ipd (pbl + ugwp + zero-RF) ! - dudt = dudt + dudt_ngw - dvdt = dvdt + dvdt_ngw - dtdt = dtdt + dtdt_ngw + dudt = dudt + dudt_gw + dvdt = dvdt + dvdt_gw + dtdt = dtdt + dtdt_gw end subroutine ugwpv1_gsldrag_run !! @} diff --git a/physics/ugwpv1_gsldrag_post.F90 b/physics/ugwpv1_gsldrag_post.F90 index 1d8813f65..e9bdafa4e 100644 --- a/physics/ugwpv1_gsldrag_post.F90 +++ b/physics/ugwpv1_gsldrag_post.F90 @@ -10,14 +10,9 @@ module ugwpv1_gsldrag_post subroutine ugwpv1_gsldrag_post_init () end subroutine ugwpv1_gsldrag_post_init -!>@brief The subroutine initializes the unified UGWP - !> \section arg_table_ugwpv1_gsldrag_post_run Argument Table !! \htmlinclude ugwpv1_gsldrag_post_run.html !! - - - subroutine ugwpv1_gsldrag_post_run ( im, levs, & ldiag_ugwp, dtf, & dudt_gw, dvdt_gw, dtdt_gw, du_ofdcol, du_oblcol, tau_ogw, & @@ -36,16 +31,16 @@ subroutine ugwpv1_gsldrag_post_run ( im, levs, & real(kind=kind_phys), intent(in) :: dtf logical, intent(in) :: ldiag_ugwp !< flag for CIRES UGWP Diagnostics - real(kind=kind_phys), intent(in), dimension(im) :: zobl, zlwb, zogw - real(kind=kind_phys), intent(in), dimension(im) :: du_ofdcol, tau_ogw, du_oblcol, tau_ngw - real(kind=kind_phys), intent(inout), dimension(im) :: tot_mtb, tot_ogw, tot_tofd, tot_ngw - real(kind=kind_phys), intent(inout), dimension(im) :: tot_zmtb, tot_zlwb, tot_zogw + real(kind=kind_phys), intent(in), dimension(:) :: zobl, zlwb, zogw + real(kind=kind_phys), intent(in), dimension(:) :: du_ofdcol, tau_ogw, du_oblcol, tau_ngw + real(kind=kind_phys), intent(inout), dimension(:) :: tot_mtb, tot_ogw, tot_tofd, tot_ngw + real(kind=kind_phys), intent(inout), dimension(:) :: tot_zmtb, tot_zlwb, tot_zogw - real(kind=kind_phys), intent(in), dimension(im,levs) :: dtdt_gw, dudt_gw, dvdt_gw - real(kind=kind_phys), intent(in), dimension(im,levs) :: dudt_obl, dudt_ogw, dudt_ofd - real(kind=kind_phys), intent(inout), dimension(im,levs) :: du3dt_mtb, du3dt_ogw, du3dt_tms, du3dt_ngw, dv3dt_ngw + real(kind=kind_phys), intent(in), dimension(:,:) :: dtdt_gw, dudt_gw, dvdt_gw + real(kind=kind_phys), intent(in), dimension(:,:) :: dudt_obl, dudt_ogw, dudt_ofd + real(kind=kind_phys), intent(inout), dimension(:,:) :: du3dt_mtb, du3dt_ogw, du3dt_tms, du3dt_ngw, dv3dt_ngw - real(kind=kind_phys), intent(inout), dimension(im,levs) :: dtdt, dudt, dvdt + real(kind=kind_phys), intent(inout), dimension(:,:) :: dtdt, dudt, dvdt character(len=*), intent(out) :: errmsg integer, intent(out) :: errflg diff --git a/physics/ugwpv1_gsldrag_post.meta b/physics/ugwpv1_gsldrag_post.meta index 45fa4ea99..fdf32cbf4 100644 --- a/physics/ugwpv1_gsldrag_post.meta +++ b/physics/ugwpv1_gsldrag_post.meta @@ -3,11 +3,6 @@ type = scheme dependencies = machine.F -######################################################################## -[ccpp-arg-table] - name = ugwpv1_gsldrag_post_init - type = scheme - ######################################################################## [ccpp-arg-table] name = ugwpv1_gsldrag_post_run @@ -72,24 +67,24 @@ kind = kind_phys intent = in optional = F -[du_oblcol] - standard_name = vertically_integrated_x_momentum_flux_due_to_blocking_drag - long_name = integrated x momentum flux from blocking drag +[du_ofdcol] + standard_name = vertically_integrated_x_momentum_flux_due_to_form_drag + long_name = integrated x momentum flux from form drag units = Pa dimensions = (horizontal_loop_extent) type = real kind = kind_phys intent = in - optional = F -[du_ofdcol] - standard_name = vertically_integrated_x_momentum_flux_due_to_form_drag - long_name = integrated x momentum flux from form drag + optional = F +[du_oblcol] + standard_name = vertically_integrated_x_momentum_flux_due_to_blocking_drag + long_name = integrated x momentum flux from blocking drag units = Pa dimensions = (horizontal_loop_extent) type = real kind = kind_phys intent = in - optional = F + optional = F [tau_ogw] standard_name = instantaneous_momentum_flux_due_to_orographic_gravity_wave_drag long_name = momentum flux or stress due to orographic gravity wave drag @@ -313,9 +308,3 @@ type = integer intent = out optional = F - -######################################################################## -[ccpp-arg-table] - name = ugwpv1_gsldrag_post_finalize - type = scheme - diff --git a/physics/unified_ugwp.F90 b/physics/unified_ugwp.F90 index 3380c20c2..597d6ba0e 100644 --- a/physics/unified_ugwp.F90 +++ b/physics/unified_ugwp.F90 @@ -74,13 +74,13 @@ subroutine unified_ugwp_init (me, master, nlunit, input_nml_file, logunit, & integer, intent (in) :: nlunit character(len=*), intent (in) :: input_nml_file(:) integer, intent (in) :: logunit - integer, intent(in) :: jdat(8) + integer, intent (in) :: jdat(:) integer, intent (in) :: lonr integer, intent (in) :: levs integer, intent (in) :: latr real(kind=kind_phys), intent (in) :: ak(:), bk(:) real(kind=kind_phys), intent (in) :: dtp - real(kind=kind_phys), intent (in) :: cdmbgwd(4), cgwf(2) ! "scaling" controls for "old" GFS-GW schemes + real(kind=kind_phys), intent (in) :: cdmbgwd(:), cgwf(:) ! "scaling" controls for "old" GFS-GW schemes real(kind=kind_phys), intent (in) :: pa_rf_in, tau_rf_in real(kind=kind_phys), intent (in) :: con_p0, con_pi, con_rerth logical, intent (in) :: do_ugwp @@ -217,25 +217,25 @@ subroutine unified_ugwp_run(me, master, im, levs, ntrac, dtp, fhzero, kdt, ! interface variables integer, intent(in) :: me, master, im, levs, ntrac, kdt, lonr, nmtvr integer, intent(in) :: gwd_opt - integer, intent(in), dimension(im) :: kpbl - real(kind=kind_phys), intent(in), dimension(im) :: oro, oro_uf, hprime, oc, theta, sigma, gamma - real(kind=kind_phys), intent(in), dimension(im) :: varss,oc1ss, dx + integer, intent(in), dimension(:) :: kpbl + real(kind=kind_phys), intent(in), dimension(:) :: oro, oro_uf, hprime, oc, theta, sigma, gamma + real(kind=kind_phys), intent(in), dimension(:) :: varss,oc1ss, dx !vay-nov 2020 - real(kind=kind_phys), intent(in), dimension(im,4) :: oa4ss,ol4ss + real(kind=kind_phys), intent(in), dimension(:,:) :: oa4ss,ol4ss - logical, intent(in) :: flag_for_gwd_generic_tend + logical, intent(in) :: flag_for_gwd_generic_tend ! elvmax is intent(in) for CIRES UGWPv1, but intent(inout) for GFS GWDPS - real(kind=kind_phys), intent(inout), dimension(im) :: elvmax - real(kind=kind_phys), intent(in), dimension(im, 4) :: clx, oa4 - real(kind=kind_phys), intent(in), dimension(im) :: xlat, xlat_d, sinlat, coslat, area - real(kind=kind_phys), intent(in), dimension(im, levs) :: del, ugrs, vgrs, tgrs, prsl, prslk, phil - real(kind=kind_phys), intent(in), dimension(im, levs+1) :: prsi, phii - real(kind=kind_phys), intent(in), dimension(im, levs) :: q1 - real(kind=kind_phys), intent(in) :: dtp, fhzero, cdmbgwd(4) - integer, intent(in) :: jdat(8) + real(kind=kind_phys), intent(inout), dimension(:) :: elvmax + real(kind=kind_phys), intent(in), dimension(:,:) :: clx, oa4 + real(kind=kind_phys), intent(in), dimension(:) :: xlat, xlat_d, sinlat, coslat, area + real(kind=kind_phys), intent(in), dimension(:,:) :: del, ugrs, vgrs, tgrs, prsl, prslk, phil + real(kind=kind_phys), intent(in), dimension(:,:) :: prsi, phii + real(kind=kind_phys), intent(in), dimension(:,:) :: q1 + real(kind=kind_phys), intent(in) :: dtp, fhzero, cdmbgwd(:) + integer, intent(in) :: jdat(:) logical, intent(in) :: do_tofd, ldiag_ugwp !Output (optional): @@ -249,14 +249,14 @@ subroutine unified_ugwp_run(me, master, im, levs, ntrac, dtp, fhzero, kdt, & dtaux2d_ss(:,:),dtauy2d_ss(:,:), & & dtaux2d_fd(:,:),dtauy2d_fd(:,:) - real(kind=kind_phys), intent(in) :: br1(im), & - & hpbl(im), & - & slmsk(im) + real(kind=kind_phys), intent(in) :: br1(:), & + & hpbl(:), & + & slmsk(:) - real(kind=kind_phys), intent(out), dimension(im) :: dusfcg, dvsfcg - real(kind=kind_phys), intent(out), dimension(im) :: zmtb, zlwb, zogw, rdxzb - real(kind=kind_phys), intent(out), dimension(im) :: tau_mtb, tau_ogw, tau_tofd, tau_ngw - real(kind=kind_phys), intent(out), dimension(im, levs) :: gw_dudt, gw_dvdt, gw_dtdt, gw_kdis + real(kind=kind_phys), intent(out), dimension(:) :: dusfcg, dvsfcg + real(kind=kind_phys), intent(out), dimension(:) :: zmtb, zlwb, zogw, rdxzb + real(kind=kind_phys), intent(out), dimension(:) :: tau_mtb, tau_ogw, tau_tofd, tau_ngw + real(kind=kind_phys), intent(out), dimension(:,:) :: gw_dudt, gw_dvdt, gw_dtdt, gw_kdis real(kind=kind_phys), intent(out), dimension(:,:) :: dudt_mtb, dudt_tms real(kind=kind_phys), intent(out), dimension(:,:) :: dtaux2d_ls, dtauy2d_ls @@ -268,14 +268,14 @@ subroutine unified_ugwp_run(me, master, im, levs, ntrac, dtp, fhzero, kdt, logical, intent(in) :: ldiag3d, lssav ! These arrays only allocated if ldiag_ugwp = .true. - real(kind=kind_phys), intent(out), dimension(:,:) :: du3dt_mtb, du3dt_ogw, du3dt_tms + real(kind=kind_phys), intent(inout), dimension(:,:) :: du3dt_mtb, du3dt_ogw, du3dt_tms - real(kind=kind_phys), intent(inout), dimension(im, levs):: dudt, dvdt, dtdt + real(kind=kind_phys), intent(inout), dimension(:,:) :: dudt, dvdt, dtdt real(kind=kind_phys), intent(in) :: con_g, con_omega, con_pi, con_cp, con_rd, & con_rv, con_rerth, con_fvirt - real(kind=kind_phys), intent(in), dimension(im) :: rain + real(kind=kind_phys), intent(in), dimension(:) :: rain integer, intent(in) :: ntke real(kind=kind_phys), intent(in), dimension(:,:) :: q_tke, dqdt_tke diff --git a/physics/unified_ugwp.meta b/physics/unified_ugwp.meta index a953acc7d..fa84f9b48 100644 --- a/physics/unified_ugwp.meta +++ b/physics/unified_ugwp.meta @@ -66,6 +66,8 @@ units = none dimensions = (8) type = integer + intent = in + optional = F [lonr] standard_name = number_of_equatorial_longitude_points long_name = number of global points in x-dir (i) along the equator @@ -352,6 +354,8 @@ dimensions = () type = real kind = kind_phys + intent = in + optional = F [kdt] standard_name = index_of_time_step long_name = current forecast iteration @@ -713,6 +717,8 @@ units = none dimensions = (8) type = integer + intent = in + optional = F [xlat] standard_name = latitude long_name = grid latitude diff --git a/physics/ysuvdif.F90 b/physics/ysuvdif.F90 index ab51819f9..73f078d01 100644 --- a/physics/ysuvdif.F90 +++ b/physics/ysuvdif.F90 @@ -65,19 +65,19 @@ subroutine ysuvdif_run(im,km,ux,vx,tx,qx,p2d,p2di,pi2d, & integer, intent(in ) :: im,km,ntrac,ndiff,ntcw,ntiw,ntoz real(kind=kind_phys), intent(in ) :: g,cp,rd,rv,ep1,ep2,xlv,dt - real(kind=kind_phys), dimension( im,km ), & + real(kind=kind_phys), dimension( :,: ), & intent(in) :: pi2d,p2d,phil,ux,vx,swh,hlw,tx - real(kind=kind_phys), dimension( im,km,ntrac ) , & + real(kind=kind_phys), dimension( :,:,: ) , & intent(in ) :: qx - real(kind=kind_phys), dimension( im, km+1 ) , & + real(kind=kind_phys), dimension( :,: ) , & intent(in ) :: p2di,phii - real(kind=kind_phys), dimension( im ) , & + real(kind=kind_phys), dimension( : ) , & intent(in) :: stress,zorl,heat,evap,wspd,br,psim,psih,psfcpa, & u10,v10,xmu - integer, dimension(im) ,& + integer, dimension(:) ,& intent(in ) :: landmask logical, intent(in ) :: lssav, ldiag3d, qdiag3d, & flag_for_pbl_generic_tend @@ -85,9 +85,9 @@ subroutine ysuvdif_run(im,km,ux,vx,tx,qx,p2d,p2di,pi2d, & !---------------------------------------------------------------------------------- ! input/output variables ! - real(kind=kind_phys), dimension( im,km ) , & + real(kind=kind_phys), dimension( :,: ) , & intent(inout) :: utnp,vtnp,ttnp - real(kind=kind_phys), dimension( im,km,ntrac ) , & + real(kind=kind_phys), dimension( :,:,: ) , & intent(inout) :: qtnp real(kind=kind_phys), optional, intent(inout) :: dtend(:,:,:) integer, intent(in) :: dtidx(:,:), ntqv, index_of_temperature, & @@ -95,9 +95,11 @@ subroutine ysuvdif_run(im,km,ux,vx,tx,qx,p2d,p2di,pi2d, & ! !--------------------------------------------------------------------------------- ! output variables - integer, dimension( im ), intent(out ) :: kpbl1d - real(kind=kind_phys), dimension( im ), & + integer, dimension( : ), intent(out ) :: kpbl1d + real(kind=kind_phys), dimension( : ), & intent(out) :: hpbl + real(kind=kind_phys), dimension( : ), & + intent(out) :: dusfc,dvsfc, dtsfc,dqsfc ! error messages character(len=*), intent(out) :: errmsg @@ -110,7 +112,7 @@ subroutine ysuvdif_run(im,km,ux,vx,tx,qx,p2d,p2di,pi2d, & real(kind=kind_phys), dimension( im ) :: hol real(kind=kind_phys), dimension( im, km+1 ) :: zq ! - real(kind=kind_phys), dimension( im, km ) :: & + real(kind=kind_phys), dimension( im, km ) :: & thx,thvx,thlix, & del, & dza, & @@ -119,7 +121,7 @@ subroutine ysuvdif_run(im,km,ux,vx,tx,qx,p2d,p2di,pi2d, & xkzoh, & za ! - real(kind=kind_phys), dimension( im ) :: & + real(kind=kind_phys), dimension( im ) :: & rhox, & govrth, & zl1,thermal, & @@ -127,8 +129,6 @@ subroutine ysuvdif_run(im,km,ux,vx,tx,qx,p2d,p2di,pi2d, & hgamt,hgamq, & brdn,brup, & phim,phih, & - dusfc,dvsfc, & - dtsfc,dqsfc, & prpbl, & wspd1,thermalli ! diff --git a/physics/ysuvdif.meta b/physics/ysuvdif.meta index 1faa3ec15..5474d9a80 100644 --- a/physics/ysuvdif.meta +++ b/physics/ysuvdif.meta @@ -86,18 +86,18 @@ kind = kind_phys intent = in optional = F -[vtnp] - standard_name = tendency_of_y_wind_due_to_model_physics - long_name = updated tendency of the y wind +[utnp] + standard_name = tendency_of_x_wind_due_to_model_physics + long_name = updated tendency of the x wind units = m s-2 dimensions = (horizontal_loop_extent,vertical_dimension) type = real kind = kind_phys intent = inout optional = F -[utnp] - standard_name = tendency_of_x_wind_due_to_model_physics - long_name = updated tendency of the x wind +[vtnp] + standard_name = tendency_of_y_wind_due_to_model_physics + long_name = updated tendency of the y wind units = m s-2 dimensions = (horizontal_loop_extent,vertical_dimension) type = real