From 597fe91836cf68325a6753e282acd8155299ad29 Mon Sep 17 00:00:00 2001 From: AnningCheng-NOAA <48297505+AnningCheng-NOAA@users.noreply.github.com> Date: Fri, 26 Mar 2021 15:51:10 -0400 Subject: [PATCH 1/3] upgrade OPAC aerosol with more advanced MERRA2 aerosol (#254) * changed .gitmodules to point to merra2 ccpp/physics * revert .gitmodule --- ccpp/physics | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/ccpp/physics b/ccpp/physics index 0f9b52d7c..b6ef6c32e 160000 --- a/ccpp/physics +++ b/ccpp/physics @@ -1 +1 @@ -Subproject commit 0f9b52d7c7a832afd298ed37b1af766ced080a55 +Subproject commit b6ef6c32e51b4e3c28ca8b49a4e8401f11e55fd9 From 972d662f7059b95993e9e3d314093d7306f70b63 Mon Sep 17 00:00:00 2001 From: XiaqiongZhou-NOAA <48254930+XiaqiongZhou-NOAA@users.noreply.github.com> Date: Tue, 30 Mar 2021 09:04:08 -0400 Subject: [PATCH 2/3] To update dycore to the GFDL dev/emc (the FV3 202101 version ) (#262) Use the GFDL dycore repository dev/emc. The GFDL dev/emc branch of dycore was synchronized with the GFDL master, which included the FV3 202101 upgrade except inline GFDL_MP : https://github.com/NOAA-GFDL/GFDL_atmos_cubed_sphere/releases/tag/FV3-202101-public --- .gitmodules | 2 +- CMakeLists.txt | 7 ++++++- atmos_cubed_sphere | 2 +- ccpp/physics | 2 +- 4 files changed, 9 insertions(+), 4 deletions(-) diff --git a/.gitmodules b/.gitmodules index d253f6966..1f7526633 100644 --- a/.gitmodules +++ b/.gitmodules @@ -1,6 +1,6 @@ [submodule "atmos_cubed_sphere"] path = atmos_cubed_sphere - url = https://github.com/NOAA-EMC/GFDL_atmos_cubed_sphere + url = https://github.com/NOAA-GFDL/GFDL_atmos_cubed_sphere branch = dev/emc [submodule "ccpp/framework"] path = ccpp/framework diff --git a/CMakeLists.txt b/CMakeLists.txt index 4b0947f55..b7fbd2c0e 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -47,8 +47,12 @@ list(APPEND _fv3dycore_srcs atmos_cubed_sphere/model/tp_core.F90 atmos_cubed_sphere/model/nh_core.F90 atmos_cubed_sphere/model/nh_utils.F90 + atmos_cubed_sphere/tools/coarse_grained_diagnostics.F90 + atmos_cubed_sphere/tools/coarse_grained_restart_files.F90 + atmos_cubed_sphere/tools/coarse_graining.F90 atmos_cubed_sphere/tools/external_ic.F90 atmos_cubed_sphere/tools/external_sst.F90 + atmos_cubed_sphere/tools/fv_diag_column.F90 atmos_cubed_sphere/tools/fv_diagnostics.F90 atmos_cubed_sphere/tools/fv_eta.F90 atmos_cubed_sphere/tools/fv_grid_tools.F90 @@ -103,7 +107,8 @@ set_target_properties(fv3dycore PROPERTIES Fortran_MODULE_DIRECTORY ${CMAKE_CURR target_compile_definitions(fv3dycore PRIVATE "${_fv3dycore_defs_private}") target_include_directories(fv3dycore PRIVATE ${CMAKE_CURRENT_SOURCE_DIR}/atmos_cubed_sphere - ${CMAKE_CURRENT_BINARY_DIR}/ccpp/driver/mod) + ${CMAKE_CURRENT_SOURCE_DIR}/atmos_cubed_sphere/tools + ${CMAKE_CURRENT_BINARY_DIR}/ccpp/driver/mod) target_include_directories(fv3dycore INTERFACE $ $) diff --git a/atmos_cubed_sphere b/atmos_cubed_sphere index 306ff3137..03a7ae7dc 160000 --- a/atmos_cubed_sphere +++ b/atmos_cubed_sphere @@ -1 +1 @@ -Subproject commit 306ff31371e74694e5d9f4a57584295c7122b9ac +Subproject commit 03a7ae7dc0b93ca9eec0f9e133bfceccf004b083 diff --git a/ccpp/physics b/ccpp/physics index b6ef6c32e..08b72bc1c 160000 --- a/ccpp/physics +++ b/ccpp/physics @@ -1 +1 @@ -Subproject commit b6ef6c32e51b4e3c28ca8b49a4e8401f11e55fd9 +Subproject commit 08b72bc1c23c48a823626d81f8e0a398685a35a3 From ebccc534045dc793c0a1191c5f24336d721a96ee Mon Sep 17 00:00:00 2001 From: Dom Heinzeller Date: Wed, 31 Mar 2021 14:43:20 -0600 Subject: [PATCH 3/3] Update Thompson MP and RUC LSM from develop, bug fixes in ccpp-framework and ccpp-physics (#267) - Fix conditional allocation of several gravity wave drag variables, add missing active attributes in CCPP metadata - thanks Evan Kalina - Add `-init=snan,arrays` to Intel DEBUG compiler flags for ccpp-physics, this helps detecting uninitialized variables --- ccpp/CMakeLists.txt | 2 +- ccpp/data/GFS_typedefs.F90 | 18 ++++++++++++++---- ccpp/data/GFS_typedefs.meta | 26 ++++++++++++++++++++++++++ ccpp/framework | 2 +- ccpp/physics | 2 +- 5 files changed, 43 insertions(+), 7 deletions(-) diff --git a/ccpp/CMakeLists.txt b/ccpp/CMakeLists.txt index 7f7575cd6..d4665b2f1 100644 --- a/ccpp/CMakeLists.txt +++ b/ccpp/CMakeLists.txt @@ -109,7 +109,7 @@ elseif (${CMAKE_Fortran_COMPILER_ID} MATCHES "Intel") set (CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -ftrapuv -traceback") set (CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -ftrapuv -traceback") set (CMAKE_Fortran_FLAGS "${CMAKE_Fortran_FLAGS} -check -check noarg_temp_created -check nopointer -warn -warn noerrors -fp-stack-check") - set (CMAKE_Fortran_FLAGS "${CMAKE_Fortran_FLAGS} -fstack-protector-all -fpe0 -traceback -debug -ftrapuv") + set (CMAKE_Fortran_FLAGS "${CMAKE_Fortran_FLAGS} -fstack-protector-all -fpe0 -traceback -debug -ftrapuv -init=snan,arrays") elseif (${CMAKE_BUILD_TYPE} MATCHES "Bitforbit") if(LEGACY_INTEL) set (CMAKE_Fortran_FLAGS "${CMAKE_Fortran_FLAGS} -debug minimal -fp-model strict -qoverride-limits -traceback") diff --git a/ccpp/data/GFS_typedefs.F90 b/ccpp/data/GFS_typedefs.F90 index 44d7fe393..14ff9cc5a 100644 --- a/ccpp/data/GFS_typedefs.F90 +++ b/ccpp/data/GFS_typedefs.F90 @@ -691,6 +691,12 @@ module GFS_typedefs !--- microphysical switch integer :: ncld !< choice of cloud scheme + logical :: convert_dry_rho = .true. !< flag for converting mass/number concentrations from moist to dry + !< for physics options that expect dry mass/number concentrations; + !< this flag will no longer be needed once the CCPP standard + !< names and the CCPP framework logic have been augmented to + !< automatically determine whether such conversions are necessary + !< and if yes, perform them; hardcoded to .true. for now !--- new microphysical switch integer :: imp_physics !< choice of microphysics scheme integer :: imp_physics_gfdl = 11 !< choice of GFDL microphysics scheme @@ -5772,7 +5778,8 @@ subroutine diag_create (Diag, IM, Model) allocate (Diag%tav_ugwp (IM,Model%levs) ) endif - if (Model%do_ugwp_v1 .or. Model%gwd_opt==33 .or. Model%gwd_opt==22) then + if (Model%do_ugwp_v1 .or. Model%gwd_opt==33 .or. Model%gwd_opt==22 & + .or. Model%gwd_opt==3 .or. Model%gwd_opt==2) then allocate (Diag%dudt_ogw (IM,Model%levs)) allocate (Diag%dvdt_ogw (IM,Model%levs)) allocate (Diag%dudt_obl (IM,Model%levs)) @@ -6039,7 +6046,8 @@ subroutine diag_phys_zero (Diag, Model, linit, iauwindow_center) Diag%dtdt_gw = zero Diag%kdis_gw = zero - if (Model%do_ugwp_v1 .or. Model%gwd_opt==33 .or. Model%gwd_opt==22) then + if (Model%do_ugwp_v1 .or. Model%gwd_opt==33 .or. Model%gwd_opt==22 & + .or. Model%gwd_opt==3 .or. Model%gwd_opt==2) then Diag%dudt_ogw = zero Diag%dvdt_ogw = zero Diag%dudt_obl = zero @@ -6526,7 +6534,8 @@ subroutine interstitial_create (Interstitial, IM, Model) allocate (Interstitial%zngw (IM) ) ! CIRES UGWP v1 - if (Model%do_ugwp_v1) then + if (Model%do_ugwp_v1 .or. Model%gwd_opt==33 .or. Model%gwd_opt==22 & + .or. Model%gwd_opt==3 .or. Model%gwd_opt==2) then allocate (Interstitial%dudt_ngw (IM,Model%levs)) allocate (Interstitial%dvdt_ngw (IM,Model%levs)) allocate (Interstitial%dtdt_ngw (IM,Model%levs)) @@ -7139,7 +7148,8 @@ subroutine interstitial_phys_reset (Interstitial, Model) Interstitial%zngw = clear_val ! CIRES UGWP v1 - if (Model%do_ugwp_v1) then + if (Model%do_ugwp_v1 .or. Model%gwd_opt==33 .or. Model%gwd_opt==22 & + .or. Model%gwd_opt==3 .or. Model%gwd_opt==2) then Interstitial%dudt_ngw = clear_val Interstitial%dvdt_ngw = clear_val Interstitial%dtdt_ngw = clear_val diff --git a/ccpp/data/GFS_typedefs.meta b/ccpp/data/GFS_typedefs.meta index 6643683e0..6e5066aeb 100644 --- a/ccpp/data/GFS_typedefs.meta +++ b/ccpp/data/GFS_typedefs.meta @@ -2846,6 +2846,12 @@ units = count dimensions = () type = integer +[convert_dry_rho] + standard_name = flag_for_converting_hydrometeors_from_moist_to_dry_air + long_name = flag for converting hydrometeors from moist to dry air + units = flag + dimensions = () + type = logical [imp_physics] standard_name = flag_for_microphysics_scheme long_name = choice of microphysics scheme @@ -7259,6 +7265,7 @@ dimensions = (horizontal_loop_extent,vertical_dimension) type = real kind = kind_phys + active = (flag_for_ugwp_version_1 .or. gwd_opt==33 .or. gwd_opt==22 .or. gwd_opt==3 .or. gwd_opt==2) [dvdt_ogw] standard_name = tendency_of_y_wind_due_to_mesoscale_orographic_gravity_wave_drag long_name = y momentum tendency from meso scale ogw @@ -7266,6 +7273,7 @@ dimensions = (horizontal_loop_extent,vertical_dimension) type = real kind = kind_phys + active = (flag_for_ugwp_version_1 .or. gwd_opt==33 .or. gwd_opt==22 .or. gwd_opt==3 .or. gwd_opt==2) [du_ogwcol] standard_name = vertically_integrated_x_momentum_flux_due_to_mesoscale_orographic_gravity_wave_drag long_name = integrated x momentum flux from meso scale ogw @@ -7273,6 +7281,7 @@ dimensions = (horizontal_loop_extent) type = real kind = kind_phys + active = (flag_for_ugwp_version_1 .or. gwd_opt==33 .or. gwd_opt==22 .or. gwd_opt==3 .or. gwd_opt==2) [dv_ogwcol] standard_name = vertically_integrated_y_momentum_flux_due_to_mesoscale_orographic_gravity_wave_drag long_name = integrated y momentum flux from meso scale ogw @@ -7280,6 +7289,7 @@ dimensions = (horizontal_loop_extent) type = real kind = kind_phys + active = (flag_for_ugwp_version_1 .or. gwd_opt==33 .or. gwd_opt==22 .or. gwd_opt==3 .or. gwd_opt==2) [dudt_obl] standard_name = tendency_of_x_momentum_due_to_blocking_drag long_name = x momentum tendency from blocking drag @@ -7287,6 +7297,7 @@ dimensions = (horizontal_loop_extent,vertical_dimension) type = real kind = kind_phys + active = (flag_for_ugwp_version_1 .or. gwd_opt==33 .or. gwd_opt==22 .or. gwd_opt==3 .or. gwd_opt==2) [dvdt_obl] standard_name = tendency_of_y_momentum_due_to_blocking_drag long_name = y momentum tendency from blocking drag @@ -7294,6 +7305,7 @@ dimensions = (horizontal_loop_extent,vertical_dimension) type = real kind = kind_phys + active = (flag_for_ugwp_version_1 .or. gwd_opt==33 .or. gwd_opt==22 .or. gwd_opt==3 .or. gwd_opt==2) [du_oblcol] standard_name = vertically_integrated_x_momentum_flux_due_to_blocking_drag long_name = integrated x momentum flux from blocking drag @@ -7301,6 +7313,7 @@ dimensions = (horizontal_loop_extent) type = real kind = kind_phys + active = (flag_for_ugwp_version_1 .or. gwd_opt==33 .or. gwd_opt==22 .or. gwd_opt==3 .or. gwd_opt==2) [dv_oblcol] standard_name = vertically_integrated_y_momentum_flux_due_to_blocking_drag long_name = integrated y momentum flux from blocking drag @@ -7308,6 +7321,7 @@ dimensions = (horizontal_loop_extent) type = real kind = kind_phys + active = (flag_for_ugwp_version_1 .or. gwd_opt==33 .or. gwd_opt==22 .or. gwd_opt==3 .or. gwd_opt==2) [dudt_oss] standard_name = tendency_of_x_momentum_due_to_small_scale_gravity_wave_drag long_name = x momentum tendency from small scale gwd @@ -7315,6 +7329,7 @@ dimensions = (horizontal_loop_extent,vertical_dimension) type = real kind = kind_phys + active = (flag_for_ugwp_version_1 .or. gwd_opt==33 .or. gwd_opt==22 .or. gwd_opt==3 .or. gwd_opt==2) [dvdt_oss] standard_name = tendency_of_y_momentum_due_to_small_scale_gravity_wave_drag long_name = y momentum tendency from small scale gwd @@ -7322,6 +7337,7 @@ dimensions = (horizontal_loop_extent,vertical_dimension) type = real kind = kind_phys + active = (flag_for_ugwp_version_1 .or. gwd_opt==33 .or. gwd_opt==22 .or. gwd_opt==3 .or. gwd_opt==2) [du_osscol] standard_name = vertically_integrated_x_momentum_flux_due_to_small_scale_gravity_wave_drag long_name = integrated x momentum flux from small scale gwd @@ -7329,6 +7345,7 @@ dimensions = (horizontal_loop_extent) type = real kind = kind_phys + active = (flag_for_ugwp_version_1 .or. gwd_opt==33 .or. gwd_opt==22 .or. gwd_opt==3 .or. gwd_opt==2) [dv_osscol] standard_name = vertically_integrated_y_momentum_flux_due_to_small_scale_gravity_wave_drag long_name = integrated y momentum flux from small scale gwd @@ -7336,6 +7353,7 @@ dimensions = (horizontal_loop_extent) type = real kind = kind_phys + active = (flag_for_ugwp_version_1 .or. gwd_opt==33 .or. gwd_opt==22 .or. gwd_opt==3 .or. gwd_opt==2) [dudt_ofd] standard_name = tendency_of_x_momentum_due_to_form_drag long_name = x momentum tendency from form drag @@ -7343,6 +7361,7 @@ dimensions = (horizontal_loop_extent,vertical_dimension) type = real kind = kind_phys + active = (flag_for_ugwp_version_1 .or. gwd_opt==33 .or. gwd_opt==22 .or. gwd_opt==3 .or. gwd_opt==2) [dvdt_ofd] standard_name = tendency_of_y_momentum_due_to_form_drag long_name = y momentum tendency from form drag @@ -7350,6 +7369,7 @@ dimensions = (horizontal_loop_extent,vertical_dimension) type = real kind = kind_phys + active = (flag_for_ugwp_version_1 .or. gwd_opt==33 .or. gwd_opt==22 .or. gwd_opt==3 .or. gwd_opt==2) [du_ofdcol] standard_name = vertically_integrated_x_momentum_flux_due_to_form_drag long_name = integrated x momentum flux from form drag @@ -7357,6 +7377,7 @@ dimensions = (horizontal_loop_extent) type = real kind = kind_phys + active = (flag_for_ugwp_version_1 .or. gwd_opt==33 .or. gwd_opt==22 .or. gwd_opt==3 .or. gwd_opt==2) [dv_ofdcol] standard_name = vertically_integrated_y_momentum_flux_due_to_form_drag long_name = integrated y momentum flux from form drag @@ -7364,6 +7385,7 @@ dimensions = (horizontal_loop_extent) type = real kind = kind_phys + active = (flag_for_ugwp_version_1 .or. gwd_opt==33 .or. gwd_opt==22 .or. gwd_opt==3 .or. gwd_opt==2) [dv3dt_ngw] standard_name = time_integral_of_change_in_y_wind_due_to_nonstationary_gravity_wave long_name = time integral of change in y wind due to NGW @@ -10015,6 +10037,7 @@ dimensions = (horizontal_loop_extent,vertical_dimension) type = real kind = kind_phys + active = (flag_for_ugwp_version_1 .or. gwd_opt==33 .or. gwd_opt==22 .or. gwd_opt==3 .or. gwd_opt==2) [dvdt_ngw] standard_name = tendency_of_y_wind_due_to_nonorographic_gravity_wave_drag long_name = meridional wind tendency due to non-stationary GWs @@ -10022,6 +10045,7 @@ dimensions = (horizontal_loop_extent,vertical_dimension) type = real kind = kind_phys + active = (flag_for_ugwp_version_1 .or. gwd_opt==33 .or. gwd_opt==22 .or. gwd_opt==3 .or. gwd_opt==2) [dtdt_ngw] standard_name = tendency_of_air_temperature_due_to_nonorographic_gravity_wave_drag long_name = air temperature tendency due to non-stationary GWs @@ -10029,6 +10053,7 @@ dimensions = (horizontal_loop_extent,vertical_dimension) type = real kind = kind_phys + active = (flag_for_ugwp_version_1 .or. gwd_opt==33 .or. gwd_opt==22 .or. gwd_opt==3 .or. gwd_opt==2) [kdis_ngw] standard_name = atmosphere_momentum_diffusivity_due_to_nonorographic_gravity_wave_drag long_name = eddy mixing due to non-stationary GWs @@ -10036,6 +10061,7 @@ dimensions = (horizontal_loop_extent,vertical_dimension) type = real kind = kind_phys + active = (flag_for_ugwp_version_1 .or. gwd_opt==33 .or. gwd_opt==22 .or. gwd_opt==3 .or. gwd_opt==2) [zlwb] standard_name = height_of_low_level_wave_breaking long_name = height of low level wave breaking diff --git a/ccpp/framework b/ccpp/framework index 9a5c9ce5e..186e76d3e 160000 --- a/ccpp/framework +++ b/ccpp/framework @@ -1 +1 @@ -Subproject commit 9a5c9ce5e35f311f3d6f25da6e85ad8ae9bbc6a1 +Subproject commit 186e76d3e6b03a719303e5e608498e8354caa278 diff --git a/ccpp/physics b/ccpp/physics index 08b72bc1c..e09c3b26c 160000 --- a/ccpp/physics +++ b/ccpp/physics @@ -1 +1 @@ -Subproject commit 08b72bc1c23c48a823626d81f8e0a398685a35a3 +Subproject commit e09c3b26c738c48d635f0d8f96cbafd0b3b1c000