From 08b710b1bd74136ba36751f904589f660490baab Mon Sep 17 00:00:00 2001 From: AnningCheng-NOAA <48297505+AnningCheng-NOAA@users.noreply.github.com> Date: Thu, 18 Nov 2021 15:33:09 -0500 Subject: [PATCH 01/14] Decrease the memory usage by MERRA2 for 6 times (#423) - read 2 month merra2 data instead of 12 months decrease memory usage by 6 times --- ccpp/physics | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/ccpp/physics b/ccpp/physics index b8b7c3154..27a312cd8 160000 --- a/ccpp/physics +++ b/ccpp/physics @@ -1 +1 @@ -Subproject commit b8b7c3154b633a372c79a09c556e54743f0d2c7e +Subproject commit 27a312cd87705fe9e0f9ff0d2026744ad3cea14d From bc5548333a5f873a1eab396bd121f216f6d16f76 Mon Sep 17 00:00:00 2001 From: Dusan Jovic <48258889+DusanJovic-NOAA@users.noreply.github.com> Date: Mon, 22 Nov 2021 09:07:46 -0500 Subject: [PATCH 02/14] Use upp as a submodule (#421) * Use upp as a submodule and update UPP --- .gitmodules | 4 ++++ CMakeLists.txt | 2 ++ upp | 1 + 3 files changed, 7 insertions(+) create mode 160000 upp diff --git a/.gitmodules b/.gitmodules index a54f243ae..6bb663df1 100644 --- a/.gitmodules +++ b/.gitmodules @@ -10,3 +10,7 @@ path = ccpp/physics url = https://github.com/NCAR/ccpp-physics branch = main +[submodule "upp"] + path = upp + url = https://github.com/NOAA-EMC/UPP + branch = develop diff --git a/CMakeLists.txt b/CMakeLists.txt index 03ec1411a..ec9721ba6 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -20,6 +20,8 @@ add_subdirectory(atmos_cubed_sphere) ### fv3atm ############################################################################### if(INLINE_POST) + set(BUILD_POSTEXEC OFF) + add_subdirectory(upp) set(POST_SRC io/inline_post.F90 io/post_nems_routines.F90 io/post_gfs.F90 io/post_regional.F90) else() set(POST_SRC io/inline_post_stub.F90) diff --git a/upp b/upp new file mode 160000 index 000000000..c939eae6b --- /dev/null +++ b/upp @@ -0,0 +1 @@ +Subproject commit c939eae6bacb3c2a93753bba54b8646f32a0a7ab From 9df46a88d4aa5ef75a76cb8f70368d31d845ea3f Mon Sep 17 00:00:00 2001 From: RuiyuSun <42656044+RuiyuSun@users.noreply.github.com> Date: Tue, 23 Nov 2021 09:39:25 -0500 Subject: [PATCH 03/14] =?UTF-8?q?add=20semi-lagrangian=20sedimentation=20o?= =?UTF-8?q?f=20graupel=20and=20update=20the=20namelist=20=E2=80=A6=20(#426?= =?UTF-8?q?)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit The semi-Lagrangian sedimentation of graupel is added. The namelist variables controlling the semi-Lagrangian sedimentation of precipitation (rain and graupel) are modified. Now SEDI_SEMI and DECFL is the switch. DECFL is the deformed CFL factor. Semi-Lagrangian sedimentation of precipitation is added as an option and does not change results before it is turned on. --- ccpp/data/GFS_typedefs.F90 | 17 ++++++----------- ccpp/data/GFS_typedefs.meta | 17 +++++------------ ccpp/physics | 2 +- 3 files changed, 12 insertions(+), 24 deletions(-) diff --git a/ccpp/data/GFS_typedefs.F90 b/ccpp/data/GFS_typedefs.F90 index cd01dbbc8..2dcad7717 100644 --- a/ccpp/data/GFS_typedefs.F90 +++ b/ccpp/data/GFS_typedefs.F90 @@ -823,8 +823,7 @@ module GFS_typedefs integer :: thompson_ext_ndiag3d=37 !< number of 3d arrays for extended diagnostic output from Thompson real(kind=kind_phys) :: dt_inner !< time step for the inner loop in s logical :: sedi_semi !< flag for semi Lagrangian sedi of rain - logical :: sedi_semi_update!< flag for v update in semi Lagrangian sedi of rain - logical :: sedi_semi_decfl !< flag for interation with semi Lagrangian sedi of rain + integer :: decfl !< deformed CFL factor !--- GFDL microphysical paramters logical :: lgfdlmprad !< flag for GFDL mp scheme and radiation consistency @@ -3193,8 +3192,7 @@ subroutine control_initialize (Model, nlunit, fn_nml, me, master, & logical :: ext_diag_thompson = .false. !< flag for extended diagnostic output from Thompson real(kind=kind_phys) :: dt_inner = -999.0 !< time step for the inner loop logical :: sedi_semi = .false. !< flag for semi Lagrangian sedi of rain - logical :: sedi_semi_update = .false. !< flag for v update in semi Lagrangian sedi of rain - logical :: sedi_semi_decfl = .false. !< flag for interation with semi Lagrangian sedi of rain + integer :: decfl = 8 !< deformed CFL factor !--- GFDL microphysical parameters logical :: lgfdlmprad = .false. !< flag for GFDLMP radiation interaction @@ -3564,7 +3562,7 @@ subroutine control_initialize (Model, nlunit, fn_nml, me, master, & mg_alf, mg_qcmin, mg_do_ice_gmao, mg_do_liq_liu, & ltaerosol, lradar, nsradar_reset, lrefres, ttendlim, & ext_diag_thompson, dt_inner, lgfdlmprad, & - sedi_semi, sedi_semi_update, sedi_semi_decfl, & + sedi_semi, decfl, & !--- max hourly avg_max_length, & !--- land/surface model control @@ -4040,8 +4038,7 @@ subroutine control_initialize (Model, nlunit, fn_nml, me, master, & Model%dt_inner = Model%dtp endif Model%sedi_semi = sedi_semi - Model%sedi_semi_update = sedi_semi_update - Model%sedi_semi_decfl = sedi_semi_decfl + Model%decfl = decfl !--- F-A MP parameters Model%rhgrd = rhgrd Model%spec_adv = spec_adv @@ -5118,8 +5115,7 @@ subroutine control_initialize (Model, nlunit, fn_nml, me, master, & ' ext_diag_thompson =',Model%ext_diag_thompson, & ' dt_inner =',Model%dt_inner, & ' sedi_semi=',Model%sedi_semi, & - ' sedi_semi_update=',sedi_semi_update, & - ' sedi_semi_decfl=',sedi_semi_decfl, & + ' decfl=',decfl, & ' effr_in =',Model%effr_in, & ' lradar =',Model%lradar, & ' nsradar_reset =',Model%nsradar_reset, & @@ -5538,8 +5534,7 @@ subroutine control_print(Model) print *, ' ext_diag_thompson : ', Model%ext_diag_thompson print *, ' dt_inner : ', Model%dt_inner print *, ' sedi_semi : ', Model%sedi_semi - print *, ' sedi_semi_update : ', Model%sedi_semi_update - print *, ' sedi_semi_decfl : ', Model%sedi_semi_decfl + print *, ' decfl : ', Model%decfl print *, ' ' endif if (Model%imp_physics == Model%imp_physics_mg) then diff --git a/ccpp/data/GFS_typedefs.meta b/ccpp/data/GFS_typedefs.meta index 0b5abf86e..51de5da0a 100644 --- a/ccpp/data/GFS_typedefs.meta +++ b/ccpp/data/GFS_typedefs.meta @@ -3513,19 +3513,12 @@ dimensions = () type = logical intent = in -[sedi_semi_update] - standard_name = flag_for_v_update_in_semi_Lagrangian_sedi - long_name = flag for v update in semi Lagrangian sedi of rain - units = flag - dimensions = () - type = logical - intent = in -[sedi_semi_decfl] - standard_name = flag_for_iteration_with_semi_Lagrangian_sedi - long_name = flag for interation with semi Lagrangian sedi of rain - units = flag +[decfl] + standard_name = deformed_CFL_factor + long_name = deformed CFL factor + units = count dimensions = () - type = logical + type = integer intent = in [lgfdlmprad] standard_name = flag_for_GFDL_microphysics_radiation_interaction diff --git a/ccpp/physics b/ccpp/physics index 27a312cd8..c3627d901 160000 --- a/ccpp/physics +++ b/ccpp/physics @@ -1 +1 @@ -Subproject commit 27a312cd87705fe9e0f9ff0d2026744ad3cea14d +Subproject commit c3627d901574b25673782e39a46d0905e8e0dc5d From c72ba60c2f97f906af0fa905502cf1819a8bfb44 Mon Sep 17 00:00:00 2001 From: Dom Heinzeller Date: Tue, 23 Nov 2021 16:35:25 -0700 Subject: [PATCH 04/14] Update several units in CCPP metadata following CCPP framework update (#422) * Replace units 'various' with 'mixed', update several invalid units of non-physical quantities, fix units of humidity diagnostic variables * Change units of relative humidity variables in CCPP metadata from 1 or none to frac, remove intent attributes from GFS_typedefs.meta --- ccpp/data/CCPP_typedefs.meta | 2 +- ccpp/data/GFS_typedefs.meta | 34 ++++++++++++++++------------------ ccpp/framework | 2 +- ccpp/physics | 2 +- 4 files changed, 19 insertions(+), 21 deletions(-) diff --git a/ccpp/data/CCPP_typedefs.meta b/ccpp/data/CCPP_typedefs.meta index ed0fd63cf..9dfabe739 100644 --- a/ccpp/data/CCPP_typedefs.meta +++ b/ccpp/data/CCPP_typedefs.meta @@ -213,7 +213,7 @@ [pkz] standard_name = finite_volume_mean_edge_pressure_raised_to_the_power_of_kappa long_name = finite-volume mean edge pressure raised to the power of kappa - units = Pa**kappa + units = 1 dimensions = (starting_x_direction_index:ending_x_direction_index,starting_y_direction_index:ending_y_direction_index,1:vertical_dimension_for_fast_physics) type = real kind = kind_dyn diff --git a/ccpp/data/GFS_typedefs.meta b/ccpp/data/GFS_typedefs.meta index 51de5da0a..b446d6e79 100644 --- a/ccpp/data/GFS_typedefs.meta +++ b/ccpp/data/GFS_typedefs.meta @@ -609,7 +609,7 @@ [hprime] standard_name = statistical_measures_of_subgrid_orography_collection_array long_name = orographic metrics - units = various + units = mixed dimensions = (horizontal_loop_extent,number_of_statistical_measures_of_subgrid_orography) type = real kind = kind_phys @@ -3247,7 +3247,7 @@ [mg_qcvar] standard_name = relative_variance_of_subgrid_cloud_condensate_distribution long_name = cloud water relative variance for MG microphysics - units = + units = frac dimensions = () type = real kind = kind_phys @@ -3261,7 +3261,7 @@ [mg_rhmini] standard_name = relative_humidity_threshold_for_ice_nucleation long_name = relative humidity threshold parameter for nucleating ice for MG microphysics - units = none + units = frac dimensions = () type = real kind = kind_phys @@ -3512,14 +3512,12 @@ units = flag dimensions = () type = logical - intent = in [decfl] standard_name = deformed_CFL_factor long_name = deformed CFL factor units = count dimensions = () type = integer - intent = in [lgfdlmprad] standard_name = flag_for_GFDL_microphysics_radiation_interaction long_name = flag for GFDL microphysics-radiation interaction @@ -3812,7 +3810,7 @@ [rhgrd] standard_name = relative_humidity_threshold_for_condensation long_name = relative humidity threshold parameter for condensation for FA scheme - units = none + units = frac dimensions = () type = real kind = kind_phys @@ -5728,21 +5726,21 @@ [tau_amf] standard_name = absolute_momentum_flux_due_to_nonorographic_gravity_wave_drag long_name = ngw_absolute_momentum_flux - units = various + units = mixed dimensions = (horizontal_loop_extent) type = real kind = kind_phys [ozpl] standard_name = ozone_forcing long_name = ozone forcing data - units = various + units = mixed dimensions = (horizontal_loop_extent,vertical_dimension_of_ozone_forcing_data,number_of_coefficients_in_ozone_forcing_data) type = real kind = kind_phys [h2opl] standard_name = stratospheric_water_vapor_forcing long_name = water forcing data - units = various + units = mixed dimensions = (horizontal_loop_extent,vertical_dimension_of_h2o_forcing_data,number_of_coefficients_in_h2o_forcing_data) type = real kind = kind_phys @@ -6333,7 +6331,7 @@ [fluxr] standard_name = cumulative_radiation_diagnostic long_name = time-accumulated 2D radiation-related diagnostic fields - units = various + units = mixed dimensions = (horizontal_loop_extent,number_of_diagnostics_variables_for_radiation) type = real kind = kind_phys @@ -6914,7 +6912,7 @@ [dtend] standard_name = cumulative_change_of_state_variables long_name = diagnostic tendencies for state variables - units = various + units = mixed dimensions = (horizontal_loop_extent,vertical_layer_dimension,cumulative_change_of_state_variables_outer_index_max) type = real kind = kind_phys @@ -6950,14 +6948,14 @@ [rh02max] standard_name = maximum_relative_humidity_at_2m_over_maximum_hourly_time_interval long_name = maximum relative humidity at 2m over maximum hourly time interval - units = % + units = frac dimensions = (horizontal_loop_extent) type = real kind = kind_phys [rh02min] standard_name = minimum_relative_humidity_at_2m_over_maximum_hourly_time_interval long_name = minumum relative humidity at 2m over maximum hourly time interval - units = % + units = frac dimensions = (horizontal_loop_extent) type = real kind = kind_phys @@ -8179,7 +8177,7 @@ [faerlw] standard_name = aerosol_optical_properties_for_longwave_bands_01_16 long_name = aerosol optical properties for longwave bands 01-16 - units = various + units = mixed dimensions = (horizontal_loop_extent,adjusted_vertical_layer_dimension_for_radiation,number_of_aerosol_bands_for_longwave_radiation,number_of_aerosol_output_fields_for_longwave_radiation) type = real kind = kind_phys @@ -8207,7 +8205,7 @@ [faersw] standard_name = aerosol_optical_properties_for_shortwave_bands_01_16 long_name = aerosol optical properties for shortwave bands 01-16 - units = various + units = mixed dimensions = (horizontal_loop_extent,adjusted_vertical_layer_dimension_for_radiation,number_of_aerosol_bands_for_shortwave_radiation,number_of_aerosol_output_fields_for_shortwave_radiation) type = real kind = kind_phys @@ -9813,7 +9811,7 @@ [q_lay] standard_name = water_vapor_mixing_ratio long_name = water vaport mixing ratio - units = kg/kg + units = kg kg-1 dimensions = (horizontal_loop_extent,vertical_layer_dimension) type = real kind = kind_phys @@ -9975,7 +9973,7 @@ [aerosolslw] standard_name = RRTMGP_aerosol_optical_properties_for_longwave_bands_01_16 long_name = aerosol optical properties for longwave bands 01-16 - units = various + units = mixed dimensions = (horizontal_loop_extent,vertical_layer_dimension, number_of_longwave_bands,number_of_aerosol_output_fields_for_longwave_radiation) type = real kind = kind_phys @@ -10004,7 +10002,7 @@ [aerosolssw] standard_name = RRTMGP_aerosol_optical_properties_for_shortwave_bands_01_16 long_name = aerosol optical properties for shortwave bands 01-16 - units = various + units = mixed dimensions = (horizontal_loop_extent,vertical_layer_dimension, number_of_shortwave_bands, number_of_aerosol_output_fields_for_shortwave_radiation) type = real kind = kind_phys diff --git a/ccpp/framework b/ccpp/framework index 47a5f65ae..4cdbddf76 160000 --- a/ccpp/framework +++ b/ccpp/framework @@ -1 +1 @@ -Subproject commit 47a5f65ae6b760b513d7babfbe66138a8f4a23bc +Subproject commit 4cdbddf760a9383c461dec3af4ae9423b43e4ba7 diff --git a/ccpp/physics b/ccpp/physics index c3627d901..2c251ef10 160000 --- a/ccpp/physics +++ b/ccpp/physics @@ -1 +1 @@ -Subproject commit c3627d901574b25673782e39a46d0905e8e0dc5d +Subproject commit 2c251ef10e084a7dce58517f1995cac5d16c9b4d From 7e2724d21c507cfb2610b61342d06c095b4e8893 Mon Sep 17 00:00:00 2001 From: mdtoy Date: Wed, 1 Dec 2021 09:49:11 -0700 Subject: [PATCH 05/14] =?UTF-8?q?Modified=202=20ugwp=20metadata=20files=20?= =?UTF-8?q?to=20fix=20ufs-community/ufs-weather-model=E2=80=A6=20(#425)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * Modified 2 ugwp metadata files to fix ufs-community/ufs-weather-model 'fhzero reproducibility' issue #908 --- ccpp/physics | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/ccpp/physics b/ccpp/physics index 2c251ef10..aeef84441 160000 --- a/ccpp/physics +++ b/ccpp/physics @@ -1 +1 @@ -Subproject commit 2c251ef10e084a7dce58517f1995cac5d16c9b4d +Subproject commit aeef8444189b6d571bc5db2da65a66c34cf254cc From cf1547fc0f8b86823c40afd64908718cd1ece734 Mon Sep 17 00:00:00 2001 From: HelinWei-NOAA <48133472+HelinWei-NOAA@users.noreply.github.com> Date: Thu, 2 Dec 2021 10:32:36 -0500 Subject: [PATCH 06/14] Noah MP updates for Prototype 8 (GFSv17) (#387) * modification to add extra land fields to the output * Update GFS_diagnostics.F90, * make those three extra land outputs as Noah MP only --- ccpp/data/GFS_typedefs.F90 | 36 ++++++++++++++ ccpp/data/GFS_typedefs.meta | 73 ++++++++++++++++++++++++++++ ccpp/driver/GFS_diagnostics.F90 | 84 ++++++++++++++++++++++++++++++++ ccpp/physics | 2 +- io/post_gfs.F90 | 85 +++++++++++++++++++++++++++++++-- 5 files changed, 276 insertions(+), 4 deletions(-) diff --git a/ccpp/data/GFS_typedefs.F90 b/ccpp/data/GFS_typedefs.F90 index 2dcad7717..c71df59f8 100644 --- a/ccpp/data/GFS_typedefs.F90 +++ b/ccpp/data/GFS_typedefs.F90 @@ -1542,6 +1542,7 @@ module GFS_typedefs real (kind=kind_phys), pointer :: evbsa (:) => null() !< noah lsm diagnostics real (kind=kind_phys), pointer :: evcwa (:) => null() !< noah lsm diagnostics real (kind=kind_phys), pointer :: snohfa (:) => null() !< noah lsm diagnostics + real (kind=kind_phys), pointer :: paha (:) => null() !< noah lsm diagnostics real (kind=kind_phys), pointer :: transa (:) => null() !< noah lsm diagnostics real (kind=kind_phys), pointer :: sbsnoa (:) => null() !< noah lsm diagnostics real (kind=kind_phys), pointer :: snowca (:) => null() !< noah lsm diagnostics @@ -1560,6 +1561,10 @@ module GFS_typedefs real (kind=kind_phys), pointer :: suntim (:) => null() !< sunshine duration time (s) real (kind=kind_phys), pointer :: runoff (:) => null() !< total water runoff real (kind=kind_phys), pointer :: ep (:) => null() !< potential evaporation + real (kind=kind_phys), pointer :: tecan (:) => null() !< total evaporation of intercepted water + real (kind=kind_phys), pointer :: tetran (:) => null() !< total transpiration rate + real (kind=kind_phys), pointer :: tedir (:) => null() !< total soil surface evaporation rate + real (kind=kind_phys), pointer :: twa (:) => null() !< total water storage in aquifer real (kind=kind_phys), pointer :: cldwrk (:) => null() !< cloud workfunction (valid only with sas) real (kind=kind_phys), pointer :: dugwd (:) => null() !< vertically integrated u change by OGWD real (kind=kind_phys), pointer :: dvgwd (:) => null() !< vertically integrated v change by OGWD @@ -1626,6 +1631,7 @@ module GFS_typedefs real (kind=kind_phys), pointer :: dtsfci (:) => null() !< instantaneous sfc sensible heat flux real (kind=kind_phys), pointer :: dqsfci (:) => null() !< instantaneous sfc latent heat flux real (kind=kind_phys), pointer :: gfluxi (:) => null() !< instantaneous sfc ground heat flux + real (kind=kind_phys), pointer :: pahi (:) => null() !< instantaneous precipitation advected heat flux real (kind=kind_phys), pointer :: epi (:) => null() !< instantaneous sfc potential evaporation real (kind=kind_phys), pointer :: smcwlt2(:) => null() !< wilting point (volumetric) real (kind=kind_phys), pointer :: smcref2(:) => null() !< soil moisture threshold (volumetric) @@ -1870,6 +1876,10 @@ module GFS_typedefs real (kind=kind_phys), pointer :: evap_water(:) => null() !< real (kind=kind_phys), pointer :: evbs(:) => null() !< real (kind=kind_phys), pointer :: evcw(:) => null() !< + real (kind=kind_phys), pointer :: pah(:) => null() !< + real (kind=kind_phys), pointer :: ecan(:) => null() !< + real (kind=kind_phys), pointer :: etran(:) => null() !< + real (kind=kind_phys), pointer :: edir(:) => null() !< real (kind=kind_phys), pointer :: faerlw(:,:,:,:) => null() !< real (kind=kind_phys), pointer :: faersw(:,:,:,:) => null() !< real (kind=kind_phys), pointer :: ffhh_ice(:) => null() !< @@ -6430,6 +6440,9 @@ subroutine diag_create (Diag, IM, Model) allocate (Diag%ulwsfc (IM)) allocate (Diag%suntim (IM)) allocate (Diag%runoff (IM)) + allocate (Diag%tecan (IM)) + allocate (Diag%tetran (IM)) + allocate (Diag%tedir (IM)) allocate (Diag%ep (IM)) allocate (Diag%cldwrk (IM)) allocate (Diag%dugwd (IM)) @@ -6491,6 +6504,12 @@ subroutine diag_create (Diag, IM, Model) allocate (Diag%tdoms (IM)) allocate (Diag%zmtnblck (IM)) + if(Model%lsm == Model%lsm_noahmp) then + allocate (Diag%paha (IM)) + allocate (Diag%twa (IM)) + allocate (Diag%pahi (IM)) + endif + ! F-A MP scheme if (Model%imp_physics == Model%imp_physics_fer_hires) then allocate (Diag%train (IM,Model%levs)) @@ -6694,6 +6713,9 @@ subroutine diag_phys_zero (Diag, Model, linit, iauwindow_center) Diag%ulwsfc = zero Diag%suntim = zero Diag%runoff = zero + Diag%tecan = zero + Diag%tetran = zero + Diag%tedir = zero Diag%ep = zero Diag%cldwrk = zero Diag%dugwd = zero @@ -6748,6 +6770,12 @@ subroutine diag_phys_zero (Diag, Model, linit, iauwindow_center) Diag%tdomip = zero Diag%tdoms = zero + if(Model%lsm == Model%lsm_noahmp)then + Diag%paha = zero + Diag%twa = zero + Diag%pahi = zero + endif + if (Model%imp_physics == Model%imp_physics_fer_hires) then Diag%train = zero end if @@ -6976,6 +7004,10 @@ subroutine interstitial_create (Interstitial, IM, Model) allocate (Interstitial%evap_water (IM)) allocate (Interstitial%evbs (IM)) allocate (Interstitial%evcw (IM)) + allocate (Interstitial%pah (IM)) + allocate (Interstitial%ecan (IM)) + allocate (Interstitial%etran (IM)) + allocate (Interstitial%edir (IM)) allocate (Interstitial%faerlw (IM,Model%levr+LTP,NBDLW,NF_AELW)) allocate (Interstitial%faersw (IM,Model%levr+LTP,NBDSW,NF_AESW)) allocate (Interstitial%ffhh_ice (IM)) @@ -7665,6 +7697,10 @@ subroutine interstitial_phys_reset (Interstitial, Model) Interstitial%evap_water = Model%huge Interstitial%evbs = clear_val Interstitial%evcw = clear_val + Interstitial%pah = clear_val + Interstitial%ecan = clear_val + Interstitial%etran = clear_val + Interstitial%edir = clear_val Interstitial%ffhh_ice = Model%huge Interstitial%ffhh_land = Model%huge Interstitial%ffhh_water = Model%huge diff --git a/ccpp/data/GFS_typedefs.meta b/ccpp/data/GFS_typedefs.meta index b446d6e79..b898cdb58 100644 --- a/ccpp/data/GFS_typedefs.meta +++ b/ccpp/data/GFS_typedefs.meta @@ -6375,6 +6375,14 @@ dimensions = (horizontal_loop_extent) type = real kind = kind_phys +[paha] + standard_name = cumulative_precipitation_advected_heat_flux_multiplied_by_timestep + long_name = cumulative precipitation advected heat flux multiplied by timestep + units = W m-2 s + dimensions = (horizontal_loop_extent) + type = real + kind = kind_phys + active = (control_for_land_surface_scheme == identifier_for_noahmp_land_surface_scheme) [transa] standard_name = cumulative_transpiration_flux_multiplied_by_timestep long_name = cumulative total plant transpiration rate multiplied by timestep @@ -6551,6 +6559,35 @@ dimensions = (horizontal_loop_extent) type = real kind = kind_phys +[tecan] + standard_name = total_evaporation_of_intercepted_water + long_name = total evaporation of intercepted water + units = kg m-2 + dimensions = (horizontal_loop_extent) + type = real + kind = kind_phys +[tetran] + standard_name = total_transpiration_rate + long_name = total transpiration rate + units = kg m-2 + dimensions = (horizontal_loop_extent) + type = real + kind = kind_phys +[tedir] + standard_name = total_soil_surface_evaporation_rate + long_name = total soil surface evaporation rate + units = kg m-2 + dimensions = (horizontal_loop_extent) + type = real + kind = kind_phys +[twa] + standard_name = total_water_storage_in_aquifer + long_name = total water storage in aquifer + units = kg m-2 + dimensions = (horizontal_loop_extent) + type = real + kind = kind_phys + active = (control_for_land_surface_scheme == identifier_for_noahmp_land_surface_scheme) [cldwrk] standard_name = cumulative_cloud_work_function long_name = cumulative cloud work function (valid only with sas) @@ -6838,6 +6875,14 @@ dimensions = (horizontal_loop_extent) type = real kind = kind_phys +[pahi] + standard_name = instantaneous_total_precipitation_advected_heat + long_name = instantaneous precipitation advected heat - total + units = W m-2 + dimensions = (horizontal_loop_extent) + type = real + kind = kind_phys + active = (control_for_land_surface_scheme == identifier_for_noahmp_land_surface_scheme) [epi] standard_name = instantaneous_surface_potential_evaporation long_name = instantaneous sfc potential evaporation @@ -8174,6 +8219,34 @@ dimensions = (horizontal_loop_extent) type = real kind = kind_phys +[pah] + standard_name = total_precipitation_advected_heat + long_name = precipitation advected heat - total + units = W m-2 + dimensions = (horizontal_loop_extent) + type = real + kind = kind_phys +[ecan] + standard_name = evaporation_of_intercepted_water + long_name = evaporation of intercepted water + units = kg m-2 s-1 + dimensions = (horizontal_loop_extent) + type = real + kind = kind_phys +[etran] + standard_name = transpiration_rate + long_name = transpiration rate + units = kg m-2 s-1 + dimensions = (horizontal_loop_extent) + type = real + kind = kind_phys +[edir] + standard_name = soil_surface_evaporation_rate + long_name = soil surface evaporation rate + units = kg m-2 s-1 + dimensions = (horizontal_loop_extent) + type = real + kind = kind_phys [faerlw] standard_name = aerosol_optical_properties_for_longwave_bands_01_16 long_name = aerosol optical properties for longwave bands 01-16 diff --git a/ccpp/driver/GFS_diagnostics.F90 b/ccpp/driver/GFS_diagnostics.F90 index 529700ca9..d8c77176d 100644 --- a/ccpp/driver/GFS_diagnostics.F90 +++ b/ccpp/driver/GFS_diagnostics.F90 @@ -977,6 +977,20 @@ subroutine GFS_externaldiag_populate (ExtDiag, Model, Statein, Stateout, Sfcprop do nb = 1,nblks ExtDiag(idx)%data(nb)%var2 => IntDiag(nb)%snohfa(:) enddo + + if (Model%lsm == Model%lsm_noahmp) then + idx = idx + 1 + ExtDiag(idx)%axes = 2 + ExtDiag(idx)%name = 'pah_ave' + ExtDiag(idx)%desc = ' Total Precipitation Advected Heat - GFS lsm' + ExtDiag(idx)%unit = 'W/m**2' + ExtDiag(idx)%mod_name = 'gfs_phys' + ExtDiag(idx)%time_avg = .TRUE. + allocate (ExtDiag(idx)%data(nblks)) + do nb = 1,nblks + ExtDiag(idx)%data(nb)%var2 => IntDiag(nb)%paha(:) + enddo + endif idx = idx + 1 ExtDiag(idx)%axes = 2 @@ -1199,6 +1213,52 @@ subroutine GFS_externaldiag_populate (ExtDiag, Model, Statein, Stateout, Sfcprop ExtDiag(idx)%data(nb)%var2 => IntDiag(nb)%runoff(:) enddo + idx = idx + 1 + ExtDiag(idx)%axes = 2 + ExtDiag(idx)%name = 'ecan_acc' + ExtDiag(idx)%desc = 'total evaporation of intercepted water' + ExtDiag(idx)%unit = 'kg/m**2' + ExtDiag(idx)%mod_name = 'gfs_phys' + allocate (ExtDiag(idx)%data(nblks)) + do nb = 1,nblks + ExtDiag(idx)%data(nb)%var2 => IntDiag(nb)%tecan(:) + enddo + + idx = idx + 1 + ExtDiag(idx)%axes = 2 + ExtDiag(idx)%name = 'etran_acc' + ExtDiag(idx)%desc = 'total plant transpiration' + ExtDiag(idx)%unit = 'kg/m**2' + ExtDiag(idx)%mod_name = 'gfs_phys' + allocate (ExtDiag(idx)%data(nblks)) + do nb = 1,nblks + ExtDiag(idx)%data(nb)%var2 => IntDiag(nb)%tetran(:) + enddo + + idx = idx + 1 + ExtDiag(idx)%axes = 2 + ExtDiag(idx)%name = 'edir_acc' + ExtDiag(idx)%desc = 'total soil surface evaporation' + ExtDiag(idx)%unit = 'kg/m**2' + ExtDiag(idx)%mod_name = 'gfs_phys' + allocate (ExtDiag(idx)%data(nblks)) + do nb = 1,nblks + ExtDiag(idx)%data(nb)%var2 => IntDiag(nb)%tedir(:) + enddo + + if (Model%lsm == Model%lsm_noahmp) then + idx = idx + 1 + ExtDiag(idx)%axes = 2 + ExtDiag(idx)%name = 'wa_acc' + ExtDiag(idx)%desc = 'total water storage in aquifer' + ExtDiag(idx)%unit = 'kg/m**2' + ExtDiag(idx)%mod_name = 'gfs_phys' + allocate (ExtDiag(idx)%data(nblks)) + do nb = 1,nblks + ExtDiag(idx)%data(nb)%var2 => IntDiag(nb)%twa(:) + enddo + endif + idx = idx + 1 ExtDiag(idx)%axes = 2 ExtDiag(idx)%name = 'pevpr_ave' @@ -1856,6 +1916,19 @@ subroutine GFS_externaldiag_populate (ExtDiag, Model, Statein, Stateout, Sfcprop ExtDiag(idx)%data(nb)%var2 => IntDiag(nb)%gfluxi(:) enddo + if (Model%lsm == Model%lsm_noahmp) then + idx = idx + 1 + ExtDiag(idx)%axes = 2 + ExtDiag(idx)%name = 'pahi' + ExtDiag(idx)%desc = 'instantaneous precipitation advected heat flux' + ExtDiag(idx)%unit = 'W/m**2' + ExtDiag(idx)%mod_name = 'gfs_phys' + allocate (ExtDiag(idx)%data(nblks)) + do nb = 1,nblks + ExtDiag(idx)%data(nb)%var2 => IntDiag(nb)%pahi(:) + enddo + endif + idx = idx + 1 ExtDiag(idx)%axes = 2 ExtDiag(idx)%name = 'pevpr' @@ -2739,6 +2812,17 @@ subroutine GFS_externaldiag_populate (ExtDiag, Model, Statein, Stateout, Sfcprop ExtDiag(idx)%data(nb)%int2 => Sfcprop(nb)%stype(:) enddo + idx = idx + 1 + ExtDiag(idx)%axes = 2 + ExtDiag(idx)%name = 'lfrac' + ExtDiag(idx)%desc = 'land fraction' + ExtDiag(idx)%unit = 'fraction [0:1]' + ExtDiag(idx)%mod_name = 'gfs_sfc' + allocate (ExtDiag(idx)%data(nblks)) + do nb = 1,nblks + ExtDiag(idx)%data(nb)%var2 => Sfcprop(nb)%landfrac(:) + enddo + idx = idx + 1 ExtDiag(idx)%axes = 2 ExtDiag(idx)%name = 'q2m' diff --git a/ccpp/physics b/ccpp/physics index aeef84441..d9e667677 160000 --- a/ccpp/physics +++ b/ccpp/physics @@ -1 +1 @@ -Subproject commit aeef8444189b6d571bc5db2da65a66c34cf254cc +Subproject commit d9e66767701232a1172c5b572c441fd10a4f7c0a diff --git a/io/post_gfs.F90 b/io/post_gfs.F90 index 9cca1521b..08079d9c9 100644 --- a/io/post_gfs.F90 +++ b/io/post_gfs.F90 @@ -347,8 +347,8 @@ subroutine set_postvars_gfs(wrt_int_state,mpicomp,setvar_atmfile, & use vrbls2d, only: f, pd, sigt4, fis, pblh, ustar, z0, ths, qs, twbs,& qwbs, avgcprate, cprate, avgprec, prec, lspa, sno,& cldefi, th10, q10, tshltr, pshltr, tshltr, albase,& - avgalbedo, avgtcdc, czen, czmean, mxsnal, radot, & - cfrach, cfracl, cfracm, avgcfrach, qshltr, & + avgalbedo, avgtcdc, czen, czmean, mxsnal,landfrac,& + radot, cfrach, cfracl, cfracm, avgcfrach, qshltr, & avgcfracl, avgcfracm, cnvcfr, islope, cmc, grnflx,& vegfrc, acfrcv, ncfrcv, acfrst, ncfrst, ssroff, & bgroff, rlwin, & @@ -360,10 +360,11 @@ subroutine set_postvars_gfs(wrt_int_state,mpicomp,setvar_atmfile, & acsnow, acsnom, sst, thz0, qz0, uz0, vz0, ptop, & htop, pbot, hbot, ptopl, pbotl, ttopl, ptopm, & pbotm, ttopm, ptoph, pboth, pblcfr, ttoph, runoff,& + tecan, tetran, tedir, twa, & maxtshltr, mintshltr, maxrhshltr, minrhshltr, & dzice, smcwlt, suntime, fieldcapa, htopd, hbotd, & htops, hbots, aswintoa, maxqshltr, minqshltr, & - acond, sr, u10h, v10h, avgedir, avgecan, & + acond, sr, u10h, v10h, avgedir, avgecan,paha,pahi,& avgetrans, avgesnow, avgprec_cont, avgcprate_cont,& avisbeamswin, avisdiffswin, airbeamswin, airdiffswin, & alwoutc, alwtoac, aswoutc, aswtoac, alwinc, aswinc,& @@ -1081,6 +1082,18 @@ subroutine set_postvars_gfs(wrt_int_state,mpicomp,setvar_atmfile, & enddo endif + ! land fraction + if(trim(fieldname)=='lfrac') then + !$omp parallel do default(none) private(i,j) shared(jsta,jend,ista,iend,spval,landfrac,arrayr42d,sm) + do j=jsta,jend + do i=ista, iend + landfrac(i,j) = arrayr42d(i,j) + if (sm(i,j) /= 0.0) landfrac(i,j) = spval + enddo + enddo + endif + + ! ave high cloud fraction if(trim(fieldname)=='tcdc_avehcl') then !$omp parallel do default(none) private(i,j) shared(jsta,jend,ista,iend,spval,avgcfrach,arrayr42d) @@ -1797,6 +1810,50 @@ subroutine set_postvars_gfs(wrt_int_state,mpicomp,setvar_atmfile, & enddo endif + ! accumulated evaporation of intercepted water + if(trim(fieldname)=='ecan_acc') then + !$omp parallel do default(none) private(i,j) shared(jsta,jend,ista,iend,spval,tecan,arrayr42d,sm) + do j=jsta,jend + do i=ista, iend + tecan(i,j) = arrayr42d(i,j) + if (sm(i,j) /= 0.0) tecan(i,j) = spval + enddo + enddo + endif + + ! accumulated plant transpiration + if(trim(fieldname)=='etran_acc') then + !$omp parallel do default(none) private(i,j) shared(jsta,jend,ista,iend,spval,tetran,arrayr42d,sm) + do j=jsta,jend + do i=ista, iend + tetran(i,j) = arrayr42d(i,j) + if (sm(i,j) /= 0.0) tetran(i,j) = spval + enddo + enddo + endif + + ! accumulated soil surface evaporation + if(trim(fieldname)=='edir_acc') then + !$omp parallel do default(none) private(i,j) shared(jsta,jend,ista,iend,spval,tedir,arrayr42d,sm) + do j=jsta,jend + do i=ista, iend + tedir(i,j) = arrayr42d(i,j) + if (sm(i,j) /= 0.0) tedir(i,j) = spval + enddo + enddo + endif + + ! total water storage in aquifer + if(trim(fieldname)=='wa_acc') then + !$omp parallel do default(none) private(i,j) shared(jsta,jend,ista,iend,spval,twa,arrayr42d,sm) + do j=jsta,jend + do i=ista, iend + twa(i,j) = arrayr42d(i,j) + if (sm(i,j) /= 0.0) twa(i,j) = spval + enddo + enddo + endif + ! shelter max temperature if(trim(fieldname)=='tmax_max2m') then !$omp parallel do default(none) private(i,j) shared(jsta,jend,ista,iend,maxtshltr,arrayr42d) @@ -2012,6 +2069,28 @@ subroutine set_postvars_gfs(wrt_int_state,mpicomp,setvar_atmfile, & enddo endif + ! AVERAGED PRECIP ADVECTED HEAT FLUX + if(trim(fieldname)=='pah_ave') then + !$omp parallel do default(none) private(i,j) shared(jsta,jend,ista,iend,spval,paha,arrayr42d,sm) + do j=jsta,jend + do i=ista, iend + paha(i,j) = arrayr42d(i,j) + if (sm(i,j) /= 0.0) paha(i,j) = spval + enddo + enddo + endif + + ! instantaneous PRECIP ADVECTED HEAT FLUX + if(trim(fieldname)=='pahi') then + !$omp parallel do default(none) private(i,j) shared(jsta,jend,ista,iend,spval,pahi,arrayr42d,sm) + do j=jsta,jend + do i=ista, iend + pahi(i,j) = arrayr42d(i,j) + if (sm(i,j) /= 0.0) pahi(i,j) = spval + enddo + enddo + endif + ! plant transpiration if(trim(fieldname)=='trans_ave') then !$omp parallel do default(none) private(i,j) shared(jsta,jend,ista,iend,spval,avgetrans,arrayr42d,sm) From 4545b4dfa0d20ce7106881b3d93d6e74b5e7b006 Mon Sep 17 00:00:00 2001 From: Dom Heinzeller Date: Mon, 6 Dec 2021 07:54:58 -0700 Subject: [PATCH 07/14] Make surface emissivity over water a persistent variable (#434) * Move surface emissivity over water from GFS_interstitial_type to GFS_sfcprop_type * update lat/lon info for inline post Co-authored-by: Jun Wang --- ccpp/data/GFS_typedefs.F90 | 6 +++--- ccpp/data/GFS_typedefs.meta | 15 +++++++-------- ccpp/physics | 2 +- io/module_wrt_grid_comp.F90 | 28 +++++++++++++++++++++++++--- 4 files changed, 36 insertions(+), 15 deletions(-) diff --git a/ccpp/data/GFS_typedefs.F90 b/ccpp/data/GFS_typedefs.F90 index c71df59f8..192a60727 100644 --- a/ccpp/data/GFS_typedefs.F90 +++ b/ccpp/data/GFS_typedefs.F90 @@ -249,6 +249,7 @@ module GFS_typedefs real (kind=kind_phys), pointer :: sfalb_ice (:) => null() !< surface albedo over ice for LSM real (kind=kind_phys), pointer :: emis_lnd (:) => null() !< surface emissivity over land for LSM real (kind=kind_phys), pointer :: emis_ice (:) => null() !< surface emissivity over ice for LSM + real (kind=kind_phys), pointer :: emis_wat (:) => null() !< surface emissivity over water real (kind=kind_phys), pointer :: sfalb_lnd_bck (:) => null() !< snow-free albedo over land !--- In (radiation only) @@ -2020,7 +2021,6 @@ module GFS_typedefs real (kind=kind_phys), pointer :: save_v(:,:) => null() !< real (kind=kind_phys), pointer :: sbsno(:) => null() !< type (cmpfsw_type), pointer :: scmpsw(:) => null() !< - real (kind=kind_phys), pointer :: semis_water(:) => null() !< real (kind=kind_phys), pointer :: sfcalb(:,:) => null() !< real (kind=kind_phys), pointer :: sigma(:) => null() !< real (kind=kind_phys), pointer :: sigmaf(:) => null() !< @@ -2335,6 +2335,7 @@ subroutine sfcprop_create (Sfcprop, IM, Model) allocate(Sfcprop%albdifnir_lnd (IM)) allocate (Sfcprop%emis_lnd (IM)) allocate (Sfcprop%emis_ice (IM)) + allocate (Sfcprop%emis_wat (IM)) Sfcprop%slmsk = clear_val Sfcprop%oceanfrac = clear_val @@ -2364,6 +2365,7 @@ subroutine sfcprop_create (Sfcprop, IM, Model) Sfcprop%albdifnir_lnd = clear_val Sfcprop%emis_lnd = clear_val Sfcprop%emis_ice = clear_val + Sfcprop%emis_wat = clear_val !--- In (radiation only) allocate (Sfcprop%snoalb (IM)) @@ -7098,7 +7100,6 @@ subroutine interstitial_create (Interstitial, IM, Model) allocate (Interstitial%save_v (IM,Model%levs)) allocate (Interstitial%sbsno (IM)) allocate (Interstitial%scmpsw (IM)) - allocate (Interstitial%semis_water (IM)) allocate (Interstitial%sfcalb (IM,NF_ALBD)) allocate (Interstitial%sigma (IM)) allocate (Interstitial%sigmaf (IM)) @@ -7776,7 +7777,6 @@ subroutine interstitial_phys_reset (Interstitial, Model) Interstitial%save_u = clear_val Interstitial%save_v = clear_val Interstitial%sbsno = clear_val - Interstitial%semis_water = clear_val Interstitial%sigma = clear_val Interstitial%sigmaf = clear_val Interstitial%sigmafrac = clear_val diff --git a/ccpp/data/GFS_typedefs.meta b/ccpp/data/GFS_typedefs.meta index b898cdb58..979ef4f19 100644 --- a/ccpp/data/GFS_typedefs.meta +++ b/ccpp/data/GFS_typedefs.meta @@ -671,7 +671,13 @@ dimensions = (horizontal_loop_extent) type = real kind = kind_phys - active = (control_for_land_surface_scheme == identifier_for_ruc_land_surface_scheme) +[emis_wat] + standard_name = surface_longwave_emissivity_over_water + long_name = surface lw emissivity in fraction over water + units = frac + dimensions = (horizontal_loop_extent) + type = real + kind = kind_phys [sfalb_lnd] standard_name = surface_diffused_shortwave_albedo_over_land long_name = mean surface diffused sw albedo over land @@ -8149,13 +8155,6 @@ dimensions = (horizontal_loop_extent) type = real kind = kind_phys -[semis_water] - standard_name = surface_longwave_emissivity_over_water - long_name = surface lw emissivity in fraction over water - units = frac - dimensions = (horizontal_loop_extent) - type = real - kind = kind_phys [ep1d] standard_name = surface_upward_potential_latent_heat_flux long_name = surface upward potential latent heat flux diff --git a/ccpp/physics b/ccpp/physics index d9e667677..623feaa1a 160000 --- a/ccpp/physics +++ b/ccpp/physics @@ -1 +1 @@ -Subproject commit d9e66767701232a1172c5b572c441fd10a4f7c0a +Subproject commit 623feaa1a6a29e1e8fa469570ba812b52aa72cfe diff --git a/io/module_wrt_grid_comp.F90 b/io/module_wrt_grid_comp.F90 index e7469813f..70257b8d6 100644 --- a/io/module_wrt_grid_comp.F90 +++ b/io/module_wrt_grid_comp.F90 @@ -537,17 +537,39 @@ subroutine wrt_initialize(wrt_comp, imp_state_write, exp_state_write, clock, rc) endif wrt_int_state%latstart = lat(1) wrt_int_state%latlast = lat(jmo) - do j=1,imo - lon(j) = 360.d0/real(imo,8) *real(j-1,8) + do i=1,imo + lon(i) = 360.d0/real(imo,8) *real(i-1,8) enddo wrt_int_state%lonstart = lon(1) wrt_int_state%lonlast = lon(imo) do j=lbound(latPtr,2),ubound(latPtr,2) do i=lbound(lonPtr,1),ubound(lonPtr,1) - lonPtr(i,j) = 360.d0/real(imo,8) * real(i-1,8) + lonPtr(i,j) = lon(i) latPtr(i,j) = lat(j) enddo enddo + wrt_int_state%lat_start = lbound(latPtr,2) + wrt_int_state%lat_end = ubound(latPtr,2) + wrt_int_state%lon_start = lbound(lonPtr,1) + wrt_int_state%lon_end = ubound(lonPtr,1) + allocate( wrt_int_state%lat_start_wrtgrp(wrt_int_state%petcount)) + allocate( wrt_int_state%lat_end_wrtgrp (wrt_int_state%petcount)) + call mpi_allgather(wrt_int_state%lat_start,1,MPI_INTEGER, & + wrt_int_state%lat_start_wrtgrp, 1, MPI_INTEGER, wrt_mpi_comm, rc) + call mpi_allgather(wrt_int_state%lat_end, 1,MPI_INTEGER, & + wrt_int_state%lat_end_wrtgrp, 1, MPI_INTEGER, wrt_mpi_comm, rc) + if( lprnt ) print *,'aft wrtgrd, latlon, dimj_start=',wrt_int_state%lat_start_wrtgrp, & + 'dimj_end=',wrt_int_state%lat_end_wrtgrp, 'wrt_group=',n_group + allocate( wrt_int_state%latPtr(wrt_int_state%lon_start:wrt_int_state%lon_end, & + wrt_int_state%lat_start:wrt_int_state%lat_end)) + allocate( wrt_int_state%lonPtr(wrt_int_state%lon_start:wrt_int_state%lon_end, & + wrt_int_state%lat_start:wrt_int_state%lat_end)) + do j=wrt_int_state%lat_start,wrt_int_state%lat_end + do i=wrt_int_state%lon_start,wrt_int_state%lon_end + wrt_int_state%latPtr(i,j) = latPtr(i,j) + wrt_int_state%lonPtr(i,j) = lonPtr(i,j) + enddo + enddo wrt_int_state%im = imo wrt_int_state%jm = jmo wrt_int_state%post_maptype = 0 From 86d4bb39cbc9591288cab3b07f9edfa4a345ee7f Mon Sep 17 00:00:00 2001 From: dustinswales Date: Thu, 9 Dec 2021 09:17:04 -0700 Subject: [PATCH 08/14] Changes to FV3 for ccpp-physics #782 (#428) This PR contains changes to the RRTMGP code in the ccpp-physics PR#782. --- atmos_cubed_sphere | 2 +- ccpp/data/GFS_typedefs.F90 | 77 ++++++---- ccpp/data/GFS_typedefs.meta | 144 +++++++++--------- ccpp/physics | 2 +- .../suite_FV3_GFS_v16_coupled_p7_rrtmgp.xml | 105 +++++++++++++ ccpp/suites/suite_FV3_GFS_v16_p7_rrtmgp.xml | 104 +++++++++++++ ccpp/suites/suite_FV3_GFS_v16_p8.xml | 104 +++++++++++++ 7 files changed, 437 insertions(+), 101 deletions(-) create mode 100644 ccpp/suites/suite_FV3_GFS_v16_coupled_p7_rrtmgp.xml create mode 100644 ccpp/suites/suite_FV3_GFS_v16_p7_rrtmgp.xml create mode 100644 ccpp/suites/suite_FV3_GFS_v16_p8.xml diff --git a/atmos_cubed_sphere b/atmos_cubed_sphere index d6bfc1573..fa86482e4 160000 --- a/atmos_cubed_sphere +++ b/atmos_cubed_sphere @@ -1 +1 @@ -Subproject commit d6bfc1573d34cb2df20fe658568d9cca5232565d +Subproject commit fa86482e48f1d5b594acb369e68b8488de84dc66 diff --git a/ccpp/data/GFS_typedefs.F90 b/ccpp/data/GFS_typedefs.F90 index 192a60727..7df223ee8 100644 --- a/ccpp/data/GFS_typedefs.F90 +++ b/ccpp/data/GFS_typedefs.F90 @@ -435,6 +435,13 @@ module GFS_typedefs real (kind=kind_phys), pointer :: visbmui(:) => null() !< sfc uv+vis beam sw upward flux (w/m2) real (kind=kind_phys), pointer :: visdfui(:) => null() !< sfc uv+vis diff sw upward flux (w/m2) + ! RRTMGP + real (kind=kind_phys), pointer :: fluxlwUP_jac(:,:) => null() !< RRTMGP Jacobian of upward longwave all-sky flux + real (kind=kind_phys), pointer :: htrlw(:,:) => null() !< RRTMGP updated LW heating rate + real (kind=kind_phys), pointer :: tsfc_radtime(:) => null() !< RRTMGP surface temperature on radiation timestep + real (kind=kind_phys), pointer :: fluxlwUP_radtime(:,:) => null() !< RRTMGP upward longwave all-sky flux profile + real (kind=kind_phys), pointer :: fluxlwDOWN_radtime(:,:) => null() !< RRTMGP downward longwave all-sky flux profile + !--- In (physics only) real (kind=kind_phys), pointer :: sfcdsw(:) => null() !< total sky sfc downward sw flux ( w/m**2 ) !< GFS_radtend_type%sfcfsw%dnfxc @@ -443,11 +450,6 @@ module GFS_typedefs real (kind=kind_phys), pointer :: sfcdlw(:) => null() !< total sky sfc downward lw flux ( w/m**2 ) !< GFS_radtend_type%sfclsw%dnfxc real (kind=kind_phys), pointer :: sfculw(:) => null() !< total sky sfc upward lw flux ( w/m**2 ) - real (kind=kind_phys), pointer :: fluxlwUP_jac(:,:) => null() !< GP Jacobian up LW total sky flux profile ( w/m**2/K ) - real (kind=kind_phys), pointer :: fluxlwUP_allsky(:,:) => null() !< GP up LW total sky flux profile ( w/m**2/K ) - real (kind=kind_phys), pointer :: fluxlwDOWN_allsky(:,:) => null() !< GP down LW total sky flux profile ( w/m**2/K ) - real (kind=kind_phys), pointer :: htrlw(:,:) => null() !< GP updated LW heating rate - real (kind=kind_phys), pointer :: tsfc_radtime(:) => null() !< GP surface temperature on radiation timestep !--- incoming quantities real (kind=kind_phys), pointer :: dusfcin_cpl(:) => null() !< aoi_fld%dusfcin(item,lan) @@ -745,6 +747,9 @@ module GFS_typedefs real(kind_phys) :: maxGPpres !< Maximum pressure allowed in RRTMGP. real(kind_phys) :: minGPtemp !< Minimum temperature allowed in RRTMGP. real(kind_phys) :: maxGPtemp !< Maximum temperature allowed in RRTMGP. + logical :: top_at_1 !< Vertical ordering flag. + integer :: iSFC !< Vertical index for surface + integer :: iTOA !< Vertical index for TOA !--- microphysical switch logical :: convert_dry_rho = .true. !< flag for converting mass/number concentrations from moist to dry @@ -2101,8 +2106,6 @@ module GFS_typedefs real (kind=kind_phys), pointer :: dudt_tms(:,:) => null() !< daily aver u-wind tend due to TMS ! RRTMGP - integer :: ipsdlw0 !< - integer :: ipsdsw0 !< real (kind=kind_phys), pointer :: p_lay(:,:) => null() !< real (kind=kind_phys), pointer :: p_lev(:,:) => null() !< real (kind=kind_phys), pointer :: t_lev(:,:) => null() !< @@ -2127,6 +2130,8 @@ module GFS_typedefs real (kind=kind_phys), pointer :: cld_rwp(:,:) => null() !< Cloud rain water path real (kind=kind_phys), pointer :: cld_rerain(:,:) => null() !< Cloud rain effective radius real (kind=kind_phys), pointer :: precip_frac(:,:) => null() !< Precipitation fraction + real (kind=kind_phys), pointer :: fluxlwUP_allsky(:,:) => null() !< RRTMGP upward longwave all-sky flux profile + real (kind=kind_phys), pointer :: fluxlwDOWN_allsky(:,:) => null() !< RRTMGP downward longwave all-sky flux profile real (kind=kind_phys), pointer :: fluxlwUP_clrsky(:,:) => null() !< RRTMGP upward longwave clr-sky flux profile real (kind=kind_phys), pointer :: fluxlwDOWN_clrsky(:,:) => null() !< RRTMGP downward longwave clr-sky flux profile real (kind=kind_phys), pointer :: fluxswUP_allsky(:,:) => null() !< RRTMGP upward shortwave all-sky flux profile @@ -2141,8 +2146,6 @@ module GFS_typedefs real (kind=kind_phys), pointer :: sfc_alb_uvvis_dif(:,:) => null() !< real (kind=kind_phys), pointer :: toa_src_lw(:,:) => null() !< real (kind=kind_phys), pointer :: toa_src_sw(:,:) => null() !< - integer, pointer :: icseed_lw(:) => null() !< RRTMGP seed for RNG for longwave radiation - integer, pointer :: icseed_sw(:) => null() !< RRTMGP seed for RNG for shortwave radiation type(proflw_type), pointer :: flxprf_lw(:,:) => null() !< DDT containing RRTMGP longwave fluxes type(profsw_type), pointer :: flxprf_sw(:,:) => null() !< DDT containing RRTMGP shortwave fluxes type(ty_optical_props_2str) :: lw_optical_props_cloudsByBand !< RRTMGP DDT @@ -2744,18 +2747,17 @@ subroutine coupling_create (Coupling, IM, Model) Coupling%sfcdlw = clear_val Coupling%sfculw = clear_val - ! Coupling to RRTMGP, used for time step LW rad adjustment. if (Model%do_RRTMGP) then - allocate (Coupling%fluxlwUP_jac (IM,Model%levs+1)) - allocate (Coupling%fluxlwUP_allsky (IM,Model%levs+1)) - allocate (Coupling%fluxlwDOWN_allsky (IM,Model%levs+1)) - allocate (Coupling%htrlw (IM,Model%levs)) - allocate (Coupling%tsfc_radtime (IM)) - Coupling%fluxlwUP_jac = clear_val - Coupling%fluxlwUP_allsky = clear_val - Coupling%fluxlwDOWN_allsky = clear_val - Coupling%htrlw = clear_val - Coupling%tsfc_radtime = clear_val + allocate (Coupling%fluxlwUP_radtime (IM, Model%levs+1)) + allocate (Coupling%fluxlwDOWN_radtime (IM, Model%levs+1)) + allocate (Coupling%fluxlwUP_jac (IM, Model%levs+1)) + allocate (Coupling%htrlw (IM, Model%levs)) + allocate (Coupling%tsfc_radtime (IM)) + Coupling%fluxlwUP_radtime = clear_val + Coupling%fluxlwDOWN_radtime = clear_val + Coupling%fluxlwUP_jac = clear_val + Coupling%htrlw = clear_val + Coupling%tsfc_radtime = clear_val endif if (Model%cplflx .or. Model%do_sppt .or. Model%cplchm .or. Model%ca_global) then @@ -7160,6 +7162,8 @@ subroutine interstitial_create (Interstitial, IM, Model) allocate (Interstitial%t_lay (IM, Model%levs)) allocate (Interstitial%cloud_overlap_param (IM, Model%levs)) allocate (Interstitial%precip_overlap_param (IM, Model%levs)) + allocate (Interstitial%fluxlwUP_allsky (IM, Model%levs+1)) + allocate (Interstitial%fluxlwDOWN_allsky (IM, Model%levs+1)) allocate (Interstitial%fluxlwUP_clrsky (IM, Model%levs+1)) allocate (Interstitial%fluxlwDOWN_clrsky (IM, Model%levs+1)) allocate (Interstitial%fluxswUP_allsky (IM, Model%levs+1)) @@ -7178,8 +7182,6 @@ subroutine interstitial_create (Interstitial, IM, Model) allocate (Interstitial%cld_rwp (IM, Model%levs)) allocate (Interstitial%cld_rerain (IM, Model%levs)) allocate (Interstitial%precip_frac (IM, Model%levs)) - allocate (Interstitial%icseed_lw (IM)) - allocate (Interstitial%icseed_sw (IM)) allocate (Interstitial%flxprf_lw (IM, Model%levs+1)) allocate (Interstitial%flxprf_sw (IM, Model%levs+1)) allocate (Interstitial%sfc_emiss_byband (Model%rrtmgp_nBandsLW,IM)) @@ -7552,18 +7554,19 @@ subroutine interstitial_rad_reset (Interstitial, Model) Interstitial%plyr = clear_val Interstitial%qlyr = clear_val Interstitial%raddt = clear_val - Interstitial%scmpsw%uvbfc = clear_val - Interstitial%scmpsw%uvbf0 = clear_val - Interstitial%scmpsw%nirbm = clear_val - Interstitial%scmpsw%nirdf = clear_val - Interstitial%scmpsw%visbm = clear_val - Interstitial%scmpsw%visdf = clear_val Interstitial%sfcalb = clear_val Interstitial%tlvl = clear_val Interstitial%tlyr = clear_val Interstitial%tsfa = clear_val Interstitial%tsfg = clear_val + ! Interstitials used by both RRTMG and RRTMGP + Interstitial%scmpsw%uvbfc = clear_val + Interstitial%scmpsw%uvbf0 = clear_val + Interstitial%scmpsw%nirbm = clear_val + Interstitial%scmpsw%nirdf = clear_val + Interstitial%scmpsw%visbm = clear_val + Interstitial%scmpsw%visdf = clear_val if (Model%do_RRTMGP) then Interstitial%tracer = clear_val Interstitial%tv_lay = clear_val @@ -7577,6 +7580,8 @@ subroutine interstitial_rad_reset (Interstitial, Model) Interstitial%t_lay = clear_val Interstitial%cloud_overlap_param = clear_val Interstitial%precip_overlap_param = clear_val + Interstitial%fluxlwUP_allsky = clear_val + Interstitial%fluxlwDOWN_allsky = clear_val Interstitial%fluxlwUP_clrsky = clear_val Interstitial%fluxlwDOWN_clrsky = clear_val Interstitial%fluxswUP_allsky = clear_val @@ -7595,8 +7600,6 @@ subroutine interstitial_rad_reset (Interstitial, Model) Interstitial%cld_rwp = clear_val Interstitial%cld_rerain = clear_val Interstitial%precip_frac = clear_val - Interstitial%icseed_lw = clear_val - Interstitial%icseed_sw = clear_val Interstitial%sfc_emiss_byband = clear_val Interstitial%sec_diff_byband = clear_val Interstitial%sfc_alb_nir_dir = clear_val @@ -7616,13 +7619,25 @@ subroutine interstitial_rad_reset (Interstitial, Model) Interstitial%lw_optical_props_precip%tau = clear_val Interstitial%lw_optical_props_precip%ssa = clear_val Interstitial%lw_optical_props_precip%g = clear_val - Interstitial%lw_optical_props_clrsky%tau = clear_val Interstitial%lw_optical_props_cloudsByBand%tau = clear_val Interstitial%lw_optical_props_cloudsByBand%ssa = clear_val Interstitial%lw_optical_props_cloudsByBand%g = clear_val Interstitial%lw_optical_props_precipByBand%tau = clear_val Interstitial%lw_optical_props_precipByBand%ssa = clear_val Interstitial%lw_optical_props_precipByBand%g = clear_val + Interstitial%sources%sfc_source = clear_val + Interstitial%sources%lay_source = clear_val + Interstitial%sources%lev_source_inc = clear_val + Interstitial%sources%lev_source_dec = clear_val + Interstitial%sources%sfc_source_Jac = clear_val + Interstitial%flxprf_lw%upfxc = clear_val + Interstitial%flxprf_lw%dnfxc = clear_val + Interstitial%flxprf_lw%upfx0 = clear_val + Interstitial%flxprf_lw%dnfx0 = clear_val + Interstitial%flxprf_sw%upfxc = clear_val + Interstitial%flxprf_sw%dnfxc = clear_val + Interstitial%flxprf_sw%upfx0 = clear_val + Interstitial%flxprf_sw%dnfx0 = clear_val end if ! end subroutine interstitial_rad_reset diff --git a/ccpp/data/GFS_typedefs.meta b/ccpp/data/GFS_typedefs.meta index 979ef4f19..0c5f943ef 100644 --- a/ccpp/data/GFS_typedefs.meta +++ b/ccpp/data/GFS_typedefs.meta @@ -1798,46 +1798,6 @@ dimensions = (horizontal_loop_extent) type = real kind = kind_phys -[htrlw] - standard_name = updated_tendency_of_air_temperature_due_to_longwave_heating_on_physics_timestep - long_name = total sky longwave heating rate on physics time step - units = K s-1 - dimensions = (horizontal_loop_extent,vertical_layer_dimension) - type = real - kind = kind_phys - active = (flag_for_rrtmgp_radiation_scheme) -[tsfc_radtime] - standard_name = surface_skin_temperature_on_radiation_timestep - long_name = surface skin temperature on radiation timestep - units = K - dimensions = (horizontal_loop_extent) - type = real - kind = kind_phys - active = (flag_for_rrtmgp_radiation_scheme) -[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_interface_dimension) - type = real - kind = kind_phys - active = (flag_for_rrtmgp_radiation_scheme) -[fluxlwUP_allsky] - 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_interface_dimension) - type = real - kind = kind_phys - active = (flag_for_rrtmgp_radiation_scheme) -[fluxlwDOWN_allsky] - 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_interface_dimension) - type = real - kind = kind_phys - active = (flag_for_rrtmgp_radiation_scheme) [rain_cpl] standard_name = cumulative_lwe_thickness_of_precipitation_amount_for_coupling long_name = total rain precipitation @@ -2332,6 +2292,46 @@ type = real kind = kind_phys active = (flag_for_chemistry_coupling) +[htrlw] + standard_name = updated_tendency_of_air_temperature_due_to_longwave_heating_on_physics_timestep + long_name = total sky longwave heating rate on physics time step + units = K s-1 + dimensions = (horizontal_loop_extent,vertical_layer_dimension) + type = real + kind = kind_phys + active = (flag_for_rrtmgp_radiation_scheme) +[tsfc_radtime] + standard_name = surface_skin_temperature_on_radiation_timestep + long_name = surface skin temperature on radiation timestep + units = K + dimensions = (horizontal_loop_extent) + type = real + kind = kind_phys + active = (flag_for_rrtmgp_radiation_scheme) +[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_interface_dimension) + type = real + kind = kind_phys + active = (flag_for_rrtmgp_radiation_scheme) +[fluxlwUP_radtime] + standard_name = RRTMGP_lw_flux_profile_upward_allsky_on_radiation_timestep + long_name = RRTMGP upward longwave all-sky flux profile + units = W m-2 + dimensions = (horizontal_loop_extent,vertical_interface_dimension) + type = real + kind = kind_phys + active = (flag_for_rrtmgp_radiation_scheme) +[fluxlwDOWN_radtime] + standard_name = RRTMGP_lw_flux_profile_downward_allsky_on_radiation_timestep + long_name = RRTMGP downward longwave all-sky flux profile + units = W m-2 + dimensions = (horizontal_loop_extent,vertical_interface_dimension) + type = real + kind = kind_phys + active = (flag_for_rrtmgp_radiation_scheme) ######################################################################## [ccpp-table-properties] @@ -3048,6 +3048,24 @@ dimensions = () type = real kind = kind_phys +[top_at_1] + standard_name = flag_for_vertical_ordering_in_RRTMGP + long_name = flag for vertical ordering in RRTMGP + units = flag + dimensions = () + type = logical +[iSFC] + standard_name = vertical_index_for_surface_in_RRTMGP + long_name = index for surface layer in RRTMGP + units = flag + dimensions = () + type = integer +[iTOA] + standard_name = vertical_index_for_TOA_in_RRTMGP + long_name = index for TOA layer in RRTMGP + units = flag + 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 @@ -9968,18 +9986,22 @@ type = real kind = kind_phys active = (flag_for_rrtmgp_radiation_scheme) -[ipsdsw0] - standard_name = initial_permutation_seed_sw - long_name = initial seed for McICA SW - units = none - dimensions = () - type = integer -[ipsdlw0] - standard_name = initial_permutation_seed_lw - long_name = initial seed for McICA LW - units = none - dimensions = () - type = integer +[fluxlwUP_allsky] + 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_interface_dimension) + type = real + kind = kind_phys + active = (flag_for_rrtmgp_radiation_scheme) +[fluxlwDOWN_allsky] + 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_interface_dimension) + type = real + kind = kind_phys + active = (flag_for_rrtmgp_radiation_scheme) [fluxlwUP_clrsky] standard_name = RRTMGP_lw_flux_profile_upward_clrsky long_name = RRTMGP upward longwave clr-sky flux profile @@ -10100,20 +10122,6 @@ dimensions = (horizontal_loop_extent,vertical_layer_dimension, number_of_shortwave_bands) type = real kind = kind_phys -[icseed_lw] - standard_name = seed_random_numbers_lw_for_RRTMGP - long_name = seed for random number generation for longwave radiation - units = none - dimensions = (horizontal_loop_extent) - type = integer - active = (flag_for_rrtmgp_radiation_scheme) -[icseed_sw] - standard_name = seed_random_numbers_sw_for_RRTMGP - long_name = seed for random number generation for shortwave radiation - units = none - dimensions = (horizontal_loop_extent) - type = integer - active = (flag_for_rrtmgp_radiation_scheme) [precip_frac] standard_name = precipitation_fraction_by_layer long_name = precipitation fraction in each layer @@ -10253,7 +10261,7 @@ kind = kind_phys active = (flag_for_rrtmgp_radiation_scheme) [sfc_alb_uvvis_dir] - standard_name = surface_albedo_uvvis_dir + standard_name = surface_albedo_uvvis_direct long_name = UVVIS (direct) surface albedo (sfc_alb_uvvis_dir) units = none dimensions = (number_of_shortwave_bands,horizontal_loop_extent) @@ -10261,7 +10269,7 @@ kind = kind_phys active = (flag_for_rrtmgp_radiation_scheme) [sfc_alb_uvvis_dif] - standard_name = surface_albedo_uvvis_dif + standard_name = surface_albedo_uvvis_diffuse long_name = UVVIS (diffuse) surface albedo (sfc_alb_uvvis_dif) units = none dimensions = (number_of_shortwave_bands,horizontal_loop_extent) diff --git a/ccpp/physics b/ccpp/physics index 623feaa1a..cbc7e3662 160000 --- a/ccpp/physics +++ b/ccpp/physics @@ -1 +1 @@ -Subproject commit 623feaa1a6a29e1e8fa469570ba812b52aa72cfe +Subproject commit cbc7e3662373c19d63b226065243f694e1755814 diff --git a/ccpp/suites/suite_FV3_GFS_v16_coupled_p7_rrtmgp.xml b/ccpp/suites/suite_FV3_GFS_v16_coupled_p7_rrtmgp.xml new file mode 100644 index 000000000..055f14dde --- /dev/null +++ b/ccpp/suites/suite_FV3_GFS_v16_coupled_p7_rrtmgp.xml @@ -0,0 +1,105 @@ + + + + + + + fv_sat_adj + + + + + GFS_time_vary_pre + GFS_rrtmgp_setup + GFS_rad_time_vary + GFS_phys_time_vary + + + + + GFS_suite_interstitial_rad_reset + GFS_rrtmgp_pre + GFS_radiation_surface + GFS_rrtmgp_gfdlmp_pre + GFS_rrtmgp_cloud_overlap_pre + GFS_cloud_diagnostics + GFS_rrtmgp_sw_pre + rrtmgp_sw_gas_optics + rrtmgp_sw_aerosol_optics + rrtmgp_sw_cloud_optics + rrtmgp_sw_cloud_sampling + rrtmgp_sw_rte + GFS_rrtmgp_sw_post + rrtmgp_lw_pre + rrtmgp_lw_gas_optics + rrtmgp_lw_aerosol_optics + rrtmgp_lw_cloud_optics + rrtmgp_lw_cloud_sampling + rrtmgp_lw_rte + GFS_rrtmgp_lw_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_cice + 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 + ugwpv1_gsldrag + ugwpv1_gsldrag_post + GFS_GWD_generic_post + 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 + phys_tend + + + + + GFS_stochastics + + + + diff --git a/ccpp/suites/suite_FV3_GFS_v16_p7_rrtmgp.xml b/ccpp/suites/suite_FV3_GFS_v16_p7_rrtmgp.xml new file mode 100644 index 000000000..e02969d3f --- /dev/null +++ b/ccpp/suites/suite_FV3_GFS_v16_p7_rrtmgp.xml @@ -0,0 +1,104 @@ + + + + + + + fv_sat_adj + + + + + GFS_time_vary_pre + GFS_rrtmgp_setup + GFS_rad_time_vary + GFS_phys_time_vary + + + + + GFS_suite_interstitial_rad_reset + GFS_rrtmgp_pre + GFS_radiation_surface + GFS_rrtmgp_gfdlmp_pre + GFS_rrtmgp_cloud_overlap_pre + GFS_cloud_diagnostics + GFS_rrtmgp_sw_pre + rrtmgp_sw_gas_optics + rrtmgp_sw_aerosol_optics + rrtmgp_sw_cloud_optics + rrtmgp_sw_cloud_sampling + rrtmgp_sw_rte + GFS_rrtmgp_sw_post + rrtmgp_lw_pre + rrtmgp_lw_gas_optics + rrtmgp_lw_aerosol_optics + rrtmgp_lw_cloud_optics + rrtmgp_lw_cloud_sampling + rrtmgp_lw_rte + GFS_rrtmgp_lw_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 + GFS_PBL_generic_pre + satmedmfvdifq + GFS_PBL_generic_post + GFS_GWD_generic_pre + ugwpv1_gsldrag + ugwpv1_gsldrag_post + GFS_GWD_generic_post + 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 + phys_tend + + + + + GFS_stochastics + + + + diff --git a/ccpp/suites/suite_FV3_GFS_v16_p8.xml b/ccpp/suites/suite_FV3_GFS_v16_p8.xml new file mode 100644 index 000000000..ef860e66d --- /dev/null +++ b/ccpp/suites/suite_FV3_GFS_v16_p8.xml @@ -0,0 +1,104 @@ + + + + + + + fv_sat_adj + + + + + GFS_time_vary_pre + GFS_rrtmgp_setup + GFS_rad_time_vary + GFS_phys_time_vary + + + + + GFS_suite_interstitial_rad_reset + GFS_rrtmgp_pre + GFS_radiation_surface + GFS_rrtmgp_gfdlmp_pre + GFS_rrtmgp_cloud_overlap_pre + GFS_cloud_diagnostics + GFS_rrtmgp_sw_pre + rrtmgp_sw_gas_optics + rrtmgp_sw_aerosol_optics + rrtmgp_sw_cloud_optics + rrtmgp_sw_cloud_sampling + rrtmgp_sw_rte + GFS_rrtmgp_sw_post + rrtmgp_lw_pre + rrtmgp_lw_gas_optics + rrtmgp_lw_aerosol_optics + rrtmgp_lw_cloud_optics + rrtmgp_lw_cloud_sampling + rrtmgp_lw_rte + GFS_rrtmgp_lw_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 + GFS_PBL_generic_pre + satmedmfvdifq + GFS_PBL_generic_post + GFS_GWD_generic_pre + ugwpv1_gsldrag + ugwpv1_gsldrag_post + GFS_GWD_generic_post + 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 + phys_tend + + + + + GFS_stochastics + + + + From 283bd5005ef0c922198654fb6c4751e7f63b2c89 Mon Sep 17 00:00:00 2001 From: Dom Heinzeller Date: Fri, 10 Dec 2021 07:39:06 -0700 Subject: [PATCH 09/14] New Thompson cloud fraction (updated subroutine cal_cldfra3) (#432) Add a new method to calculate cloud fraction for Thompson MP. A few diagnostic variables are added for use by the cloud fraction schemes in CCPP, and the icloud==3 switch is repurposed from currently being unused to switch between the original progcld6 and the new progcld_thompson scheme in CCPP. --- ccpp/data/GFS_typedefs.F90 | 22 ++++++- ccpp/data/GFS_typedefs.meta | 42 ++++++++++++ ccpp/driver/GFS_diagnostics.F90 | 112 +++++++++++++++++++++++++++++++- ccpp/physics | 2 +- 4 files changed, 174 insertions(+), 4 deletions(-) diff --git a/ccpp/data/GFS_typedefs.F90 b/ccpp/data/GFS_typedefs.F90 index 7df223ee8..541d34e18 100644 --- a/ccpp/data/GFS_typedefs.F90 +++ b/ccpp/data/GFS_typedefs.F90 @@ -1671,6 +1671,12 @@ module GFS_typedefs real (kind=kind_phys), pointer :: cldfra (:,:) => null() !< instantaneous 3D cloud fraction !--- MP quantities for 3D diagnositics real (kind=kind_phys), pointer :: refl_10cm(:,:) => null() !< instantaneous refl_10cm + real (kind=kind_phys), pointer :: cldfra2d (:) => null() !< instantaneous 2D cloud fraction + real (kind=kind_phys), pointer :: total_albedo (:) => null() !< total sky (with cloud) albedo at toa + real (kind=kind_phys), pointer :: lwp_ex (:) => null() !< liquid water path from microphysics + real (kind=kind_phys), pointer :: iwp_ex (:) => null() !< ice water path from microphysics + real (kind=kind_phys), pointer :: lwp_fc (:) => null() !< liquid water path from cloud fraction scheme + real (kind=kind_phys), pointer :: iwp_fc (:) => null() !< ice water path from cloud fraction scheme !--- Extra PBL diagnostics real (kind=kind_phys), pointer :: dkt(:,:) => null() !< Eddy diffusitivity for heat @@ -6518,7 +6524,13 @@ subroutine diag_create (Diag, IM, Model) if (Model%imp_physics == Model%imp_physics_fer_hires) then allocate (Diag%train (IM,Model%levs)) end if - allocate (Diag%cldfra (IM,Model%levs)) + allocate (Diag%cldfra (IM,Model%levr+LTP)) + allocate (Diag%cldfra2d (IM)) + allocate (Diag%total_albedo (IM)) + allocate (Diag%lwp_ex (IM)) + allocate (Diag%iwp_ex (IM)) + allocate (Diag%lwp_fc (IM)) + allocate (Diag%iwp_fc (IM)) !--- 3D diagnostics if (Model%ldiag3d) then @@ -6784,6 +6796,12 @@ subroutine diag_phys_zero (Diag, Model, linit, iauwindow_center) Diag%train = zero end if Diag%cldfra = zero + Diag%cldfra2d = zero + Diag%total_albedo = zero + Diag%lwp_ex = zero + Diag%iwp_ex = zero + Diag%lwp_fc = zero + Diag%iwp_fc = zero Diag%totprcpb = zero Diag%cnvprcpb = zero @@ -6894,7 +6912,7 @@ subroutine diag_phys_zero (Diag, Model, linit, iauwindow_center) Diag%dku = zero ! max hourly diagnostics - Diag%refl_10cm = zero + Diag%refl_10cm = -35. Diag%refdmax = -35. Diag%refdmax263k = -35. Diag%t02max = -999. diff --git a/ccpp/data/GFS_typedefs.meta b/ccpp/data/GFS_typedefs.meta index 0c5f943ef..213338275 100644 --- a/ccpp/data/GFS_typedefs.meta +++ b/ccpp/data/GFS_typedefs.meta @@ -7087,6 +7087,48 @@ dimensions = (horizontal_loop_extent,adjusted_vertical_layer_dimension_for_radiation) type = real kind = kind_phys +[cldfra2d] + standard_name = max_in_column_cloud_fraction + long_name = instantaneous 2D (max-in-column) cloud fraction + units = frac + dimensions = (horizontal_loop_extent) + type = real + kind = kind_phys +[lwp_ex] + standard_name = liq_water_path_from_microphysics + long_name = total liquid water path from explicit microphysics + units = kg m-2 + dimensions = (horizontal_loop_extent) + type = real + kind = kind_phys +[iwp_ex] + standard_name = ice_water_path_from_microphysics + long_name = total ice water path from explicit microphysics + units = kg m-2 + dimensions = (horizontal_loop_extent) + type = real + kind = kind_phys +[lwp_fc] + standard_name = liq_water_path_from_cloud_fraction + long_name = total liquid water path from cloud fraction scheme + units = kg m-2 + dimensions = (horizontal_loop_extent) + type = real + kind = kind_phys +[iwp_fc] + standard_name = ice_water_path_from_cloud_fraction + long_name = total ice water path from cloud fraction scheme + units = kg m-2 + dimensions = (horizontal_loop_extent) + type = real + kind = kind_phys +[total_albedo] + standard_name = total_sky_albedo + long_name = total sky albedo at toa + units = frac + dimensions = (horizontal_loop_extent) + type = real + kind = kind_phys [edmf_a] standard_name = emdf_updraft_area long_name = updraft area from mass flux scheme diff --git a/ccpp/driver/GFS_diagnostics.F90 b/ccpp/driver/GFS_diagnostics.F90 index d8c77176d..8d9e67cdb 100644 --- a/ccpp/driver/GFS_diagnostics.F90 +++ b/ccpp/driver/GFS_diagnostics.F90 @@ -160,6 +160,78 @@ subroutine GFS_externaldiag_populate (ExtDiag, Model, Statein, Stateout, Sfcprop idx = 0 + idx = idx + 1 + ExtDiag(idx)%axes = 2 + ExtDiag(idx)%name = 'cldfra2d' + ExtDiag(idx)%desc = 'instantaneous 2D (max-in-column) cloud fraction' + ExtDiag(idx)%unit = 'frac' + ExtDiag(idx)%mod_name = 'gfs_phys' + ExtDiag(idx)%intpl_method = 'bilinear' + allocate (ExtDiag(idx)%data(nblks)) + do nb = 1,nblks + ExtDiag(idx)%data(nb)%var2 => IntDiag(nb)%cldfra2d(:) + enddo + + idx = idx + 1 + ExtDiag(idx)%axes = 2 + ExtDiag(idx)%name = 'total_albedo' + ExtDiag(idx)%desc = 'total sky albedo at toa' + ExtDiag(idx)%unit = 'frac' + ExtDiag(idx)%mod_name = 'gfs_phys' + ExtDiag(idx)%intpl_method = 'bilinear' + allocate (ExtDiag(idx)%data(nblks)) + do nb = 1,nblks + ExtDiag(idx)%data(nb)%var2 => IntDiag(nb)%total_albedo(:) + enddo + + idx = idx + 1 + ExtDiag(idx)%axes = 2 + ExtDiag(idx)%name = 'lwp_ex' + ExtDiag(idx)%desc = 'total liquid water path from explicit microphysics' + ExtDiag(idx)%unit = 'kg m-2' + ExtDiag(idx)%mod_name = 'gfs_phys' + ExtDiag(idx)%intpl_method = 'bilinear' + allocate (ExtDiag(idx)%data(nblks)) + do nb = 1,nblks + ExtDiag(idx)%data(nb)%var2 => IntDiag(nb)%lwp_ex(:) + enddo + + idx = idx + 1 + ExtDiag(idx)%axes = 2 + ExtDiag(idx)%name = 'iwp_ex' + ExtDiag(idx)%desc = 'total ice water path from explicit microphysics' + ExtDiag(idx)%unit = 'kg m-2' + ExtDiag(idx)%mod_name = 'gfs_phys' + ExtDiag(idx)%intpl_method = 'bilinear' + allocate (ExtDiag(idx)%data(nblks)) + do nb = 1,nblks + ExtDiag(idx)%data(nb)%var2 => IntDiag(nb)%iwp_ex(:) + enddo + + idx = idx + 1 + ExtDiag(idx)%axes = 2 + ExtDiag(idx)%name = 'lwp_fc' + ExtDiag(idx)%desc = 'total liquid water path from cloud fraction scheme' + ExtDiag(idx)%unit = 'kg m-2' + ExtDiag(idx)%mod_name = 'gfs_phys' + ExtDiag(idx)%intpl_method = 'bilinear' + allocate (ExtDiag(idx)%data(nblks)) + do nb = 1,nblks + ExtDiag(idx)%data(nb)%var2 => IntDiag(nb)%lwp_fc(:) + enddo + + idx = idx + 1 + ExtDiag(idx)%axes = 2 + ExtDiag(idx)%name = 'iwp_fc' + ExtDiag(idx)%desc = 'total ice water path from cloud fraction scheme' + ExtDiag(idx)%unit = 'kg m-2' + ExtDiag(idx)%mod_name = 'gfs_phys' + ExtDiag(idx)%intpl_method = 'bilinear' + allocate (ExtDiag(idx)%data(nblks)) + do nb = 1,nblks + ExtDiag(idx)%data(nb)%var2 => IntDiag(nb)%iwp_fc(:) + enddo + idx = idx + 1 ExtDiag(idx)%axes = 2 ExtDiag(idx)%name = 'ALBDO_ave' @@ -200,7 +272,6 @@ subroutine GFS_externaldiag_populate (ExtDiag, Model, Statein, Stateout, Sfcprop ExtDiag(idx)%data(nb)%var2 => IntDiag(nb)%dlwsfci(:) enddo - idx = idx + 1 ExtDiag(idx)%axes = 2 ExtDiag(idx)%name = 'ULWRF' @@ -215,6 +286,45 @@ subroutine GFS_externaldiag_populate (ExtDiag, Model, Statein, Stateout, Sfcprop ExtDiag(idx)%data(nb)%var2 => IntDiag(nb)%ulwsfc(:) enddo + idx = idx + 1 + ExtDiag(idx)%axes = 2 + ExtDiag(idx)%name = 'DSWRFItoa' + ExtDiag(idx)%desc = 'instantaneous top of atmos downward shortwave flux' + ExtDiag(idx)%unit = 'W/m**2' + ExtDiag(idx)%mod_name = 'gfs_phys' + ExtDiag(idx)%cnvfac = cn_one + ExtDiag(idx)%intpl_method = 'bilinear' + allocate (ExtDiag(idx)%data(nblks)) + do nb = 1,nblks + ExtDiag(idx)%data(nb)%var2 => IntDiag(nb)%fluxr(:,23) + enddo + + idx = idx + 1 + ExtDiag(idx)%axes = 2 + ExtDiag(idx)%name = 'USWRFItoa' + ExtDiag(idx)%desc = 'instantaneous top of atmos upward shortwave flux' + ExtDiag(idx)%unit = 'W/m**2' + ExtDiag(idx)%mod_name = 'gfs_phys' + ExtDiag(idx)%cnvfac = cn_one + ExtDiag(idx)%intpl_method = 'bilinear' + allocate (ExtDiag(idx)%data(nblks)) + do nb = 1,nblks + ExtDiag(idx)%data(nb)%var2 => IntDiag(nb)%fluxr(:,2) + enddo + + idx = idx + 1 + ExtDiag(idx)%axes = 2 + ExtDiag(idx)%name = 'ULWRFItoa' + ExtDiag(idx)%desc = 'instantaneous top of atmos upward longwave flux' + ExtDiag(idx)%unit = 'W/m**2' + ExtDiag(idx)%mod_name = 'gfs_phys' + ExtDiag(idx)%cnvfac = cn_one + ExtDiag(idx)%intpl_method = 'bilinear' + allocate (ExtDiag(idx)%data(nblks)) + do nb = 1,nblks + ExtDiag(idx)%data(nb)%var2 => IntDiag(nb)%fluxr(:,1) + enddo + idx = idx + 1 ExtDiag(idx)%axes = 2 ExtDiag(idx)%name = 'ULWRFI' diff --git a/ccpp/physics b/ccpp/physics index cbc7e3662..fb752d447 160000 --- a/ccpp/physics +++ b/ccpp/physics @@ -1 +1 @@ -Subproject commit cbc7e3662373c19d63b226065243f694e1755814 +Subproject commit fb752d4475044bdc332619b5280f116369b64c04 From e7687f4f59ad53575578493de87ed11d89765274 Mon Sep 17 00:00:00 2001 From: Dom Heinzeller Date: Mon, 13 Dec 2021 07:04:37 -0700 Subject: [PATCH 10/14] Merge NOAA-GSL gsl/develop into develop, update CCPP SDFs (#435) * Update .gitmodules and submodule pointers for ccpp-framework and ccpp-physics for gsl/develop branch * RUC ice for gsl/develop (replaces #54 and #56) (#60) Implementation of RUC LSM ice model in CCPP * Squash-merge climbfuji:rucice_gfsv16dzmin into gsl/develop * Fix bug in gfsphysics/GFS_layer/GFS_typedefs.F90 from merge * Remove lsm_ruc_sfc_sice from suite FV3_GSD_v0_unified_ugwp_suite and update submodule pointer for ccpp-physics * Remove sfc_sice from ccpp/suites/suite_FV3_GSD_v0_unified_ugwp_suite.xml * Update submodule pointer for ccpp-physics * Revert change to .gitmodules and update submodule pointer for ccpp-physics Co-authored-by: Dom Heinzeller * Update gsl/develop from develop 2020/12/08 (#61) * Fix for updating stochastic physics on separate time-step. (#199) This bug fix allows the random patterns in the stochastic physics persist the for a period of time (defined as SKEBINT,SPPTINT, etc.) before calculating new patterns. The fix is to move the allocation of the saved variables into the init section of stochastic_physics_wrapper, and remove the deallocates in the run section. * Bug fixes in (1) running with frac_grid=T and GFDL MP and (2) restarting with frac_grid=T (#204) * -- Pointing to Moorthi's modifications in ccpp/physics, which fixed the crash when running GFDL MP with frac_grid=T; -- Not setting fice to zero in order to leave lake ice untouched; -- Restart in the coupled model with the default physics is reproducible, if bad water temperature is only filtered at initial time; Co-authored-with: Shrinivas Moorthi Co-authored-with: Denise Worthen * Revert change to .gitmodules and update submodule pointer for ccpp-physics Co-authored-by: Phil Pegion <38869668+pjpegion@users.noreply.github.com> Co-authored-by: shansun6 <48043606+shansun6@users.noreply.github.com> * Update submodule pointer for ccpp-physics - MYNN surface layer updates and bugfixes (#63) * Land stochastic perturbations (wrapper PR for #65) (#68) * Move initialization of stochastic physics after the physics initialization in CCPP. * Add albedo variables to land perturbations with lndp_type=2 option. Change to accommodate soil perturbations with RUC LSM. * Max/min soil moisture variables are introduced via GFS_Control_type variables instead of through the use of namelist_soilveg*. This is a more flexible way for different LSMs. * Added pores and resid variables for max/min soil moisture to GFS_typedefs.f90. * Remove tracer_sanitizer from all suites and from CCPP prebuild config * Add namelist option to apply land surface perturbations at every time step, clean up stochastic_physics/stochastic_physics_wrapper.F90 Co-authored-by: tanyasmirnova * Stochastic land perturbations: add roughness length over land to the perturbed variables (#70) * Added roughness length over land to the perturbed variables. * Bugfix in gfsphysics/GFS_layer/GFS_typedefs.F90: remove Diag%cldcov, in particular the reset call because the variable is not allocated Co-authored-by: Dom Heinzeller * Update gsl/develop from develop 2021/02/22 (#73) * Fix for updating stochastic physics on separate time-step. (#199) This bug fix allows the random patterns in the stochastic physics persist the for a period of time (defined as SKEBINT,SPPTINT, etc.) before calculating new patterns. The fix is to move the allocation of the saved variables into the init section of stochastic_physics_wrapper, and remove the deallocates in the run section. * Bug fixes in (1) running with frac_grid=T and GFDL MP and (2) restarting with frac_grid=T (#204) * -- Pointing to Moorthi's modifications in ccpp/physics, which fixed the crash when running GFDL MP with frac_grid=T; -- Not setting fice to zero in order to leave lake ice untouched; -- Restart in the coupled model with the default physics is reproducible, if bad water temperature is only filtered at initial time; Co-authored-with: Shrinivas Moorthi Co-authored-with: Denise Worthen * jedi-ufs with ccpp-physics submodule update (contains #201) (#211) * updated CMakeLists.txt * Changes for JEDI linking/control * Update .gitmodules and submodule pointer for ccpp-physics for code review and testing * Revert change to .gitmodules and update submodule pointer for ccpp-physics Co-authored-by: Mark Potts * Final-final GFS v16 updates / restart reproducibility bugfixes (#212) * updates the submodule pointer for ccpp-physics for the final-final (!) GFS v16 physics updates * fixes a bug in io/FV3GFS_io.F90 to obtain restart reproducibility for uncoupled and coupled runs - contributed by @SMoorthi-emc Co-authored-by: Shrinivas.Moorthi * RRTMGP coupling to Thompson MP in ccpp-physics (#208) * Updated physics. Added infrastructure to FV3 to handle new GP capabilities. Thompson MP, LW scattering, Use of LW-jacobian to update surface tendencies. * Some small changes to work with physics improvements to RRTMGP. * RRTMGP working with Thompson MP. * Updated .gitmodules. * Updated physics. New interstitials. * Synced with NCAR/master * Updated ccpp-physics * Updated physics submodule. * Cleanup * Update physics * Updated physics submodule pointer. * Updated physics submodule hash. * Minor bug fixes to CCPP UGWP (update submodule pointer for ccpp-physics) (#216) Update the submodule pointer for ccpp-physics for minor bugfixes in CCPP's Unified Gravity Wave Drag parameterization. * Remove IPD (step 1) (#215) Remove all IPD source files that are not needed to compile with CCPP. Update gfsphysics/CMakeLists.txt and gfsphysics/GFS_layer/GFS_driver.F90 so that the code compiles after removing IPD sources. Also: update submodule pointer for GFDL_atmos_cubed_sphere to include PR NOAA-EMC/GFDL_atmos_cubed_sphere#48 ("Removed use of mpp_node for use with FMS 2020.04"). * Update submodule pointers for ccpp-framework (ccpp_prebuild bugfix) and ccpp-physics (RRTMGP GFDL-MP bugfix) (#218) Update the submodule pointers for ccpp-framework and ccpp-physics for the changes described in NCAR/ccpp-framework#343 and NCAR/ccpp-physics#536. * Remove unnecessary SIMD instruction sets from ccpp/CMakeLists.txt (#220) * Remove additional/unnecessary SIMD instruction sets from ccpp/CMakeLists.txt * Implementation of CCPP timestep_init and timestep_final phases (#217) - replace calls to CCPP step `time_vary` with `timestep_init` in `atmos_model.F90`, add call to CCPP step `timestep_final` - update `ccpp/driver/CCPP_driver.F90` with calls to CCPP `timestep_init` and `timestep_final` - add `h2o_def.f` and `ozne_def.` to `ccpp_prebuild_config.py` - update of `gfsphysics/GFS_layer/GFS_typedefs.F90`: cleanup work for o3 and h2o physics (required by the updates to the CCPP time vary physics) - update metadata in `gfsphysics/GFS_layer/GFS_typedefs.meta` for the above changes, and clean up the index used for the surface wind enhancement due to convection in the `phy_f2d` array (use proper index, not just the last entry in the array) * add radiation_clouds_thompson_dependency in ccpp physics (#225) * using radiation_clouds_thompson_dependency ccpp physics branch * point to ccpp master branch * Remove IPD steps 3 and 5 (#224) * Implementation of CCPP timestep_init and timestep_final phases in fv3atm; cleanup work in GFS_typedefs for o3 and h2o physics as a result of the changes to the time vary physics in CCPP * Use proper index variable for surface wind enhancement due to convection in phy_f2d array in GFS_typedefs.{F90,meta}, move code to clear diagnostic buckets using GFS DDT bound procedures from atmos_model.F90 to CCPP_driver.F90 * First step of cleanup process: remove CCPP preprocessor directives, remove parts of unused IPD code, update cmake build system, Delete IPD source code, Replace IPD DDTs with GFS DDTs, Bugfix in atmos_model.F90; add missing call to GFS_externaldiag_populate, Move contents of gfsphysics/{CCPP_layer,GFS_layer} to ccpp/{data,driver}, entirely deleted IPD typedefs, Rename module GFS_driver to GFS_init * Fix indentation in ccpp/data/CMakeLists.txt and ccpp/driver/CMakeLists.txt * Add logic to set DYN32 depending on 32BIT setting * Pass preprocessor directive GFS_TYPES to dycore to enable use of GFS data types * Compile GFS_diagnostics.F90 without optimization, this leads to out of memory errors on wcoss_dell_p3 * Add CCPP rrtmgp fix (#237) * ccpp physics merged with top of master * point back to ccpp master branch * Update develop from NOAA-GSL: RUC ice, MYNN sfclay, stochastic land perturbations (#239) * Update .gitmodules and submodule pointers for ccpp-framework and ccpp-physics for gsl/develop branch * RUC ice for gsl/develop (replaces #54 and #56) (#60) Implementation of RUC LSM ice model in CCPP * Fix bug in gfsphysics/GFS_layer/GFS_typedefs.F90 from merge * Remove lsm_ruc_sfc_sice from suite FV3_GSD_v0_unified_ugwp_suite and update submodule pointer for ccpp-physics * Remove sfc_sice from ccpp/suites/suite_FV3_GSD_v0_unified_ugwp_suite.xml * Update gsl/develop from develop 2020/12/08 (#61) * Fix for updating stochastic physics on separate time-step. (#199) This bug fix allows the random patterns in the stochastic physics persist the for a period of time (defined as SKEBINT,SPPTINT, etc.) before calculating new patterns. The fix is to move the allocation of the saved variables into the init section of stochastic_physics_wrapper, and remove the deallocates in the run section. * Bug fixes in (1) running with frac_grid=T and GFDL MP and (2) restarting with frac_grid=T (#204) * -- Pointing to Moorthi's modifications in ccpp/physics, which fixed the crash when running GFDL MP with frac_grid=T; -- Not setting fice to zero in order to leave lake ice untouched; -- Restart in the coupled model with the default physics is reproducible, if bad water temperature is only filtered at initial time; Co-authored-with: Shrinivas Moorthi Co-authored-with: Denise Worthen * Revert change to .gitmodules and update submodule pointer for ccpp-physics * Update submodule pointer for ccpp-physics - MYNN surface layer updates and bugfixes (#63) * Land stochastic perturbations (wrapper PR for #65) (#68) * Move initialization of stochastic physics after the physics initialization in CCPP. * Add albedo variables to land perturbations with lndp_type=2 option. Change to accommodate soil perturbations with RUC LSM. * Max/min soil moisture variables are introduced via GFS_Control_type variables instead of through the use of namelist_soilveg*. This is a more flexible way for different LSMs. * Added pores and resid variables for max/min soil moisture to GFS_typedefs.f90. * Remove tracer_sanitizer from all suites and from CCPP prebuild config * Add namelist option to apply land surface perturbations at every time step, clean up stochastic_physics/stochastic_physics_wrapper.F90 * Stochastic land perturbations: add roughness length over land to the perturbed variables (#70) * Added roughness length over land to the perturbed variables. * Bugfix in gfsphysics/GFS_layer/GFS_typedefs.F90: remove Diag%cldcov, in particular the reset call because the variable is not allocated * Update .gitmodules and submodule pointer for GFDL_atmos_cubed_sphere for code review and testing * Revert change to .gitmodules for ccpp-physics, update submodule pointer for ccpp-physics * Revert change to .gitmodules and update submodule pointer for GFDL_atmos_cubed_sphere Co-authored-by: DomHeinzeller <58610420+DomHeinzeller@users.noreply.github.com> Co-authored-by: Phil Pegion <38869668+pjpegion@users.noreply.github.com> Co-authored-by: shansun6 <48043606+shansun6@users.noreply.github.com> Co-authored-by: tanyasmirnova * Dycore change to add an option to zero-gradient BC for height advection and change dz_min as a namelist input (#232) * Point dycore to a personal branch * Point to new version of dycore * Update the dycore version * Update the dycore version * Point to NOAA-EMC dev/emc dycore branch * Remove gnumake build remnants, change v16beta to v16 (#234) * Remove gnumake files * Replace v16beta with v16 for all CCPP suites * Remove unused CCPP_INCLUDE_DIRS/CCPP_LIB_DIRS from ccpp/CMakeLists.txt * Move LSM vegetation lookup tables into CCPP, clean up RUC snow cover on ice initialization (remove IPD step 2) (#244) * Move LSM vegetation lookup tables into CCPP, clean up RUC snow cover on ice initialization * Revert change to .gitmodules and update submodule pointer for ccpp-physics * UGWP v0 v1 combined (#241) * .gitmodules/gsl atmos-cubed cccp-fram cccp/physics * update fv3atm from NOAA-EMC Jan 9 * new suite_FV3_GFS_v16b_ugwpv1.xml and modifications Jan 11/2021 * Added new logical flag do_ugwp_v0_nst_only which allows non-stationary drag from ugwp_v0 to be run with GSL drag suite * Fix formatting in ccpp/data/GFS_typedefs.* * Clean up allocation of arrays in ccpp/data/GFS_typedefs.F90, add active attribute (pass 1) to ccpp/data/GFS_typedefs.meta, strip trailing whitespaces from both * Update and cleanup of metadata for UGWPv0, UGWPv1, drag suite * Reorganize UGWP diagnostic variables in data/GFS_typedefs.{F90,meta} * Bugfix for uninitialized data in ccpp/data/GFS_typedefs.F90 * Update submodule pointer for ccpp-physics * Allocate 3d diagnostic arrays as dummy arrays if not used Co-authored-by: valery.yudin Co-authored-by: Michael Toy * SDF for GFSv16 with Thompson (#238) * SDF for GFSv16 with Thompson * Delete suite_FV3_GFS_v16beta_thompson.xml * update to new commit of Thompson MP in ccpp physics Co-authored-by: Phil Pegion <38869668+pjpegion@users.noreply.github.com> Co-authored-by: shansun6 <48043606+shansun6@users.noreply.github.com> Co-authored-by: Mark Potts Co-authored-by: Shrinivas.Moorthi Co-authored-by: dustinswales Co-authored-by: Jun Wang <37633869+junwang-noaa@users.noreply.github.com> Co-authored-by: XiaqiongZhou-NOAA <48254930+XiaqiongZhou-NOAA@users.noreply.github.com> Co-authored-by: valery.yudin Co-authored-by: Michael Toy Co-authored-by: XiaSun-NOAA <58949533+XiaSun-NOAA@users.noreply.github.com> * Remove inconsistencies in computation of air density with Thompson MP (#74) * Update .gitmodules and submodule pointer for ccpp-physics for code review and testing * Revert change to .gitmodules and update submodule pointer for ccpp-physics * Update thompson mp 20210213 (#567) for gsl/develop (#75) * Add logical convert_dry_rho for Thompson MP, hardcoded to false * Initialize all variables to NaN in ccpp-physics in DEBUG mode * Update submodule pointer for ccpp-physics * Revert change to .gitmodules and update submodule pointer for ccpp-framework and ccpp-physics * &gfs_physics_nml print_diff_pgr=.true. will print per-timestep pgr change stats * point to sam's repository for atmos_cubed_sphere * Add units and lat/lon to per-timestep pgr stats * Rebase atmos_cubed_sphere to NOAA-GFDL dev/emc branch * Print mean pgr change as hPa/hr and other pgr data as bars. * Remove changes from atmos_cubed_sphere and simplify atmos_model.F90 changes. * print mean abs change instead of mean change in pgr * Update .gitmodules and submodule pointers for ccpp-framework and ccpp-physics for code review and testing * Revert change to .gitmodules and update submodule pointers for ccpp-framework and ccpp-physics * clarify one print * More 3D diagnostic tendencies (#76) Add diagnostic tendencies for all tracers. Move all d*3dt variables into a 4D sparse array stored as `dtend(i,k,dtidx(tracer,process))` to reduce memory usage. * Fix incorrect units in dtend metadata (#82) * Fix incorrect units in dtend metadata * Make the tracer tendency units mandatory. * Add SO2 tendency units (#86) * Update .gitmodules and submodule pointers for ccpp-framework and ccpp-physics * Update submodule pointer for ccpp-physics * Revert change to .gitmodules and update submodule pointer for ccpp-framework and ccpp-physics * dtend: add missing tendencies and fix bugs in convection tendencies (#92) * Fix incorrect units in dtend metadata * Point to corresponding ccpp/physics branch * fixes to dtend support: 1. Store rtg (AKA clw AKA qtr) instead of gq0 in DCNV and SCNV pre/post for schemes that use convective transport. Tracers handled solely by convective transport (ones not in rtg) are reported as convective transport tendencies. Tendencies for variables in rtg are reported as dcnv and scnv tendencies. 2. Report TKE tendencies from gfs v16 PBL. 3. Add diagnostic tendencies to drag_suite 4. Only report rayleigh damping tendencies if rayleigh damping is enabled 5. List all possible diagnostic tendencies, even if they are not enabled. In the output, label them "selected" or "disabled." 6. Add phys_tend to the fv3_rap suite. * Merge gsl/develop into ccpp/physics * Add phys_tend to suite_FV3_GSD_SAR and remove some debug prints * Remove some debug prints and commented-out code. * Correct error in dtend variable availability list print. * Enable convtrans diagnostic tendencies for number concentrations and qrimef. * Disable cnvtrans diagnostic tendencies for schemes that do their own diagnostic tendency reporting. * Point to gsl repositories * Update .gitmodules for code review and regression testing * Formatting changes in ccpp/data/GFS_typedefs.F90 * Update submodule pointer for ccpp-physics * Update submodule pointer for ccpp-physics * Point update_gsl_develop_from_develop_20210531 to NOAA-GSL branches of ccpp/physics and ccpp/framework * GF aerosols updates and tunings * GF aerosol updates and tunings from physics * Update .gitmodules and submodule pointer for ccpp-physics for code review and testing * Update submodule pointer for ccpp-physics * Update submodule pointer for ccpp-physics * Update submodule pointer for ccpp-physics * Make aod_gf and cactiv_m work appriopriately for restarts Minor code cleanup * Add missing metadata for new GF arrays * Bug fix in ccpp/driver/GFS_restart.F90 for GF * Update submodule pointer for ccpp-physics * Revert change to .gitmodules and update submodule pointer for ccpp-physics * Add missing active attribute for aod_gf in ccpp/data/GFS_typedefs.meta * Update submodule pointer for ccpp-physics * Update submodule pointer for ccpp-physocs * Change name of sfc_name2(39) from 'weasd' to 'weasdl' in io/FV3GFS_io.F90 * Revert change to .gitmodules and update submodule pointers for ccpp-framework and ccpp-physics * Update .gitmodules and submodule pointer for ccpp-physics for code review and testing * Update .gitmodules and submodule pointer for ccpp-physics for code review and testing * Revert change to .gitmodules and update submodule pointer for ccpp-physics * Changed dimensions of variables tsnow_land and sncovr_ice from horizontal_dimension to horizontal_loop_extent * Added Flake to two suites: FV3_GSD_v0 and FV3_HRRR. * Update .gitmodules and submodule pointer for ccpp-physics for code review and testing * Update submodule pointer for ccpp-physics * Revert change to .gitmodules and update submodule pointer for ccpp-physics * Update to ccpp/data/GFS_typedefs.meta following CCPP standard names update * Update submodule pointer for ccpp-physics * Revert change to .gitmodules and update submodule pointer for ccpp-physics * Revert change to .gitmodules and update submodule pointers for ccpp-physics and ccpp-framework * Revert change to .gitmodules and update submodule pointers for ccpp-framework and ccpp-physics * Turn on GF aerosol-awareness Tune clwdet (cloud water detrainment) Make evfact (evaporation factor) and radiation factor scale-aware * Update .gitmodules and submodule pointers for ccpp-framework and ccpp-physics for code review and testing * Switch back to NCAR ccpp-framework main, abandon NOAA-GSL fork * Update submodule pointer for ccpp-physics * Update submodule pointer for ccpp/physics * Update .gitmodules and submodule pointer for ccpp-physics for code review and testing * Update submodule pointer for ccpp-physics * Revert change to .gitmodules and update submodule pointer for ccpp-physics * Update submodule pointer for ccpp-physics * Revert change to .gitmodules and update submodule pointer for ccpp-physics * Update .gitmodules and submodule pointer for ccpp-physics for code review aand testing * Update submodule pointer for ccpp-physics * Revert change to .gitmodules and update submodule pointer for ccpp-physics * Update .gitmodules and submodule pointer for ccpp-physics for code review and testing * Update submodule pointer for ccpp-physics * Revert .gitmodules and update submodule pointer for ccpp-physics * Revert change to .gitmodules and update submodule pointer for ccpp-physics * Update .gitmodules and submodule pointer for ccpp-physics for code review and testing * Revert .gitmodules and update submodule pointer for ccpp-physics * Update CCPP metadata and several suite defiition files for new GSL regression tests * Bug fix for compiling with Intel on macOS, remove clutter from stdout in io/FV3GFS_io.F90 * Update .gitmodules and submodule pointer for ccpp-physics for code review and testing * Rename GSL suites to RAP suites, add new RAP suites * rename suite FV3_GSD_v0 to FV3_RAP_noah_sfcdiff_cires_ugwp, delete suite FV3_SAR * Update submodule pointer for ccpp-physics * Address reviewer comments * Update submodule pointer for ccpp-physics * Revert .gitmodules and update submodule pointer for ccpp-physics Co-authored-by: DomHeinzeller <58610420+DomHeinzeller@users.noreply.github.com> Co-authored-by: Phil Pegion <38869668+pjpegion@users.noreply.github.com> Co-authored-by: shansun6 <48043606+shansun6@users.noreply.github.com> Co-authored-by: tanyasmirnova Co-authored-by: tanyasmirnova <38667904+tanyasmirnova@users.noreply.github.com> Co-authored-by: Mark Potts Co-authored-by: Shrinivas.Moorthi Co-authored-by: dustinswales Co-authored-by: Jun Wang <37633869+junwang-noaa@users.noreply.github.com> Co-authored-by: XiaqiongZhou-NOAA <48254930+XiaqiongZhou-NOAA@users.noreply.github.com> Co-authored-by: valery.yudin Co-authored-by: Michael Toy Co-authored-by: XiaSun-NOAA <58949533+XiaSun-NOAA@users.noreply.github.com> Co-authored-by: samuel.trahan Co-authored-by: Samuel Trahan (NOAA contractor) <39415369+SamuelTrahanNOAA@users.noreply.github.com> Co-authored-by: hannah barnes Co-authored-by: Hannah C Barnes <38660891+hannahcbarnes@users.noreply.github.com> --- ccpp/data/GFS_typedefs.F90 | 9 ++ ccpp/data/GFS_typedefs.meta | 55 +++++++---- ccpp/driver/GFS_restart.F90 | 14 ++- ccpp/physics | 2 +- ccpp/suites/suite_FV3_GSD_SAR.xml | 85 ---------------- ccpp/suites/suite_FV3_GSD_noah.xml | 96 ------------------- ccpp/suites/suite_FV3_GSD_v0.xml | 95 ------------------ ccpp/suites/suite_FV3_HRRR.xml | 2 - ...v0_RRTMGP.xml => suite_FV3_RAP_RRTMGP.xml} | 7 +- ...nnsfc.xml => suite_FV3_RAP_cires_ugwp.xml} | 2 +- ccpp/suites/suite_FV3_RAP_flake.xml | 91 ++++++++++++++++++ ..._suite_noah.xml => suite_FV3_RAP_noah.xml} | 7 +- ...suite_FV3_RAP_noah_sfcdiff_cires_ugwp.xml} | 4 +- ...ag_suite.xml => suite_FV3_RAP_sfcdiff.xml} | 2 +- ...ite.xml => suite_FV3_RAP_unified_ugwp.xml} | 4 +- ccpp/suites/suite_FV3_RRFS_v1alpha.xml | 84 ---------------- io/FV3GFS_io.F90 | 10 +- 17 files changed, 171 insertions(+), 398 deletions(-) delete mode 100644 ccpp/suites/suite_FV3_GSD_SAR.xml delete mode 100644 ccpp/suites/suite_FV3_GSD_noah.xml delete mode 100644 ccpp/suites/suite_FV3_GSD_v0.xml rename ccpp/suites/{suite_FV3_GSD_v0_RRTMGP.xml => suite_FV3_RAP_RRTMGP.xml} (95%) rename ccpp/suites/{suite_FV3_GSD_v0_mynnsfc.xml => suite_FV3_RAP_cires_ugwp.xml} (98%) create mode 100644 ccpp/suites/suite_FV3_RAP_flake.xml rename ccpp/suites/{suite_FV3_GSD_v0_unified_ugwp_suite_noah.xml => suite_FV3_RAP_noah.xml} (94%) rename ccpp/suites/{suite_FV3_GSD_noah_mynnsfc.xml => suite_FV3_RAP_noah_sfcdiff_cires_ugwp.xml} (97%) rename ccpp/suites/{suite_FV3_GSD_v0_drag_suite.xml => suite_FV3_RAP_sfcdiff.xml} (98%) rename ccpp/suites/{suite_FV3_GSD_v0_unified_ugwp_suite.xml => suite_FV3_RAP_unified_ugwp.xml} (97%) delete mode 100644 ccpp/suites/suite_FV3_RRFS_v1alpha.xml diff --git a/ccpp/data/GFS_typedefs.F90 b/ccpp/data/GFS_typedefs.F90 index 541d34e18..3be66033f 100644 --- a/ccpp/data/GFS_typedefs.F90 +++ b/ccpp/data/GFS_typedefs.F90 @@ -283,6 +283,7 @@ module GFS_typedefs !-- In/Out real (kind=kind_phys), pointer :: conv_act(:) => null() !< convective activity counter for Grell-Freitas + real (kind=kind_phys), pointer :: conv_act_m(:)=> null() !< midlevel convective activity counter for Grell-Freitas real (kind=kind_phys), pointer :: hice (:) => null() !< sea ice thickness real (kind=kind_phys), pointer :: weasd (:) => null() !< water equiv of accumulated snow depth (kg/m**2) !< over land and sea ice @@ -1425,6 +1426,8 @@ module GFS_typedefs real (kind=kind_phys), pointer :: prevst (:,:) => null() !< real (kind=kind_phys), pointer :: prevsq (:,:) => null() !< integer, pointer :: cactiv (:) => null() !< convective activity memory contour + integer, pointer :: cactiv_m (:) => null() !< mid-level convective activity memory contour + real (kind=kind_phys), pointer :: aod_gf (:) => null() !--- MYNN prognostic variables that can't be in the Intdiag or Interstitial DDTs real (kind=kind_phys), pointer :: CLDFRA_BL (:,:) => null() ! @@ -2706,7 +2709,9 @@ subroutine sfcprop_create (Sfcprop, IM, Model) end if if (Model%imfdeepcnv == Model%imfdeepcnv_gf) then allocate (Sfcprop%conv_act(IM)) + allocate (Sfcprop%conv_act_m(IM)) Sfcprop%conv_act = zero + Sfcprop%conv_act_m = zero end if end subroutine sfcprop_create @@ -6047,7 +6052,11 @@ subroutine tbd_create (Tbd, IM, Model) if (Model%imfdeepcnv == Model%imfdeepcnv_gf) then allocate(Tbd%cactiv(IM)) + allocate(Tbd%cactiv_m(IM)) + allocate(Tbd%aod_gf(IM)) Tbd%cactiv = zero + Tbd%cactiv_m = zero + Tbd%aod_gf = zero end if !--- MYNN variables: diff --git a/ccpp/data/GFS_typedefs.meta b/ccpp/data/GFS_typedefs.meta index 213338275..f95931c1b 100644 --- a/ccpp/data/GFS_typedefs.meta +++ b/ccpp/data/GFS_typedefs.meta @@ -809,6 +809,14 @@ type = real kind = kind_phys active = (control_for_deep_convection_scheme == identifier_for_grell_freitas_deep_convection) +[conv_act_m] + standard_name = consecutive_calls_for_grell_freitas_mid_level_convection + long_name = Memory counter for GF midlevel + units = none + dimensions = (horizontal_loop_extent) + type = real + kind = kind_phys + active = (control_for_deep_convection_scheme == identifier_for_grell_freitas_deep_convection) [hice] standard_name = sea_ice_thickness long_name = sea ice thickness @@ -5796,6 +5804,14 @@ dimensions = (horizontal_loop_extent,vertical_layer_dimension,number_of_aerosol_tracers_MG) type = real kind = kind_phys +[aod_gf] + standard_name = aerosol_optical_depth_for_grell_freitas_deep_convection + long_name = aerosol optical depth used in Grell-Freitas Convective Parameterization + units = none + dimensions = (horizontal_loop_extent) + type = real + kind = kind_phys + active = (control_for_deep_convection_scheme == identifier_for_grell_freitas_deep_convection) [imap] standard_name = map_of_block_column_number_to_global_i_index long_name = map of local index ix to global index i for this block @@ -6051,6 +6067,13 @@ dimensions = (horizontal_loop_extent) type = integer active = (control_for_deep_convection_scheme == identifier_for_grell_freitas_deep_convection) +[cactiv_m] + standard_name = counter_for_grell_freitas_mid_level_convection + long_name = mid-level convective activity memory + units = none + dimensions = (horizontal_loop_extent) + type = integer + active = (control_for_deep_convection_scheme == identifier_for_grell_freitas_deep_convection) [CLDFRA_BL] standard_name = subgrid_scale_cloud_area_fraction_in_atmosphere_layer long_name = subgrid cloud fraction from PBL scheme @@ -7369,7 +7392,7 @@ dimensions = (horizontal_loop_extent,vertical_layer_dimension) type = real kind = kind_phys - active = (flag_for_ugwp_version_1 .or. control_for_drag_suite_gravity_wave_drag==33 .or. control_for_drag_suite_gravity_wave_drag==22 .or. control_for_drag_suite_gravity_wave_drag==3 .or. control_for_drag_suite_gravity_wave_drag==2) + active = (flag_for_ugwp_version_1 .or. control_for_drag_suite_gravity_wave_drag==33 .or. control_for_drag_suite_gravity_wave_drag==22) [dvdt_ogw] standard_name = tendency_of_y_wind_due_to_mesoscale_orographic_gravity_wave_drag long_name = y momentum tendency from meso scale ogw @@ -7377,7 +7400,7 @@ dimensions = (horizontal_loop_extent,vertical_layer_dimension) type = real kind = kind_phys - active = (flag_for_ugwp_version_1 .or. control_for_drag_suite_gravity_wave_drag==33 .or. control_for_drag_suite_gravity_wave_drag==22 .or. control_for_drag_suite_gravity_wave_drag==3 .or. control_for_drag_suite_gravity_wave_drag==2) + active = (flag_for_ugwp_version_1 .or. control_for_drag_suite_gravity_wave_drag==33 .or. control_for_drag_suite_gravity_wave_drag==22) [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 @@ -7385,7 +7408,7 @@ dimensions = (horizontal_loop_extent) type = real kind = kind_phys - active = (flag_for_ugwp_version_1 .or. control_for_drag_suite_gravity_wave_drag==33 .or. control_for_drag_suite_gravity_wave_drag==22 .or. control_for_drag_suite_gravity_wave_drag==3 .or. control_for_drag_suite_gravity_wave_drag==2) + active = (flag_for_ugwp_version_1 .or. control_for_drag_suite_gravity_wave_drag==33 .or. control_for_drag_suite_gravity_wave_drag==22) [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 @@ -7393,7 +7416,7 @@ dimensions = (horizontal_loop_extent) type = real kind = kind_phys - active = (flag_for_ugwp_version_1 .or. control_for_drag_suite_gravity_wave_drag==33 .or. control_for_drag_suite_gravity_wave_drag==22 .or. control_for_drag_suite_gravity_wave_drag==3 .or. control_for_drag_suite_gravity_wave_drag==2) + active = (flag_for_ugwp_version_1 .or. control_for_drag_suite_gravity_wave_drag==33 .or. control_for_drag_suite_gravity_wave_drag==22) [dudt_obl] standard_name = tendency_of_x_momentum_due_to_blocking_drag long_name = x momentum tendency from blocking drag @@ -7401,7 +7424,7 @@ dimensions = (horizontal_loop_extent,vertical_layer_dimension) type = real kind = kind_phys - active = (flag_for_ugwp_version_1 .or. control_for_drag_suite_gravity_wave_drag==33 .or. control_for_drag_suite_gravity_wave_drag==22 .or. control_for_drag_suite_gravity_wave_drag==3 .or. control_for_drag_suite_gravity_wave_drag==2) + active = (flag_for_ugwp_version_1 .or. control_for_drag_suite_gravity_wave_drag==33 .or. control_for_drag_suite_gravity_wave_drag==22) [dvdt_obl] standard_name = tendency_of_y_momentum_due_to_blocking_drag long_name = y momentum tendency from blocking drag @@ -7409,7 +7432,7 @@ dimensions = (horizontal_loop_extent,vertical_layer_dimension) type = real kind = kind_phys - active = (flag_for_ugwp_version_1 .or. control_for_drag_suite_gravity_wave_drag==33 .or. control_for_drag_suite_gravity_wave_drag==22 .or. control_for_drag_suite_gravity_wave_drag==3 .or. control_for_drag_suite_gravity_wave_drag==2) + active = (flag_for_ugwp_version_1 .or. control_for_drag_suite_gravity_wave_drag==33 .or. control_for_drag_suite_gravity_wave_drag==22) [du_oblcol] standard_name = vertically_integrated_x_momentum_flux_due_to_blocking_drag long_name = integrated x momentum flux from blocking drag @@ -7417,7 +7440,7 @@ dimensions = (horizontal_loop_extent) type = real kind = kind_phys - active = (flag_for_ugwp_version_1 .or. control_for_drag_suite_gravity_wave_drag==33 .or. control_for_drag_suite_gravity_wave_drag==22 .or. control_for_drag_suite_gravity_wave_drag==3 .or. control_for_drag_suite_gravity_wave_drag==2) + active = (flag_for_ugwp_version_1 .or. control_for_drag_suite_gravity_wave_drag==33 .or. control_for_drag_suite_gravity_wave_drag==22) [dv_oblcol] standard_name = vertically_integrated_y_momentum_flux_due_to_blocking_drag long_name = integrated y momentum flux from blocking drag @@ -7425,7 +7448,7 @@ dimensions = (horizontal_loop_extent) type = real kind = kind_phys - active = (flag_for_ugwp_version_1 .or. control_for_drag_suite_gravity_wave_drag==33 .or. control_for_drag_suite_gravity_wave_drag==22 .or. control_for_drag_suite_gravity_wave_drag==3 .or. control_for_drag_suite_gravity_wave_drag==2) + active = (flag_for_ugwp_version_1 .or. control_for_drag_suite_gravity_wave_drag==33) [dudt_oss] standard_name = tendency_of_x_momentum_due_to_small_scale_gravity_wave_drag long_name = x momentum tendency from small scale gwd @@ -7433,7 +7456,7 @@ dimensions = (horizontal_loop_extent,vertical_layer_dimension) type = real kind = kind_phys - active = (flag_for_ugwp_version_1 .or. control_for_drag_suite_gravity_wave_drag==33 .or. control_for_drag_suite_gravity_wave_drag==22 .or. control_for_drag_suite_gravity_wave_drag==3 .or. control_for_drag_suite_gravity_wave_drag==2) + active = (flag_for_ugwp_version_1 .or. control_for_drag_suite_gravity_wave_drag==33) [dvdt_oss] standard_name = tendency_of_y_momentum_due_to_small_scale_gravity_wave_drag long_name = y momentum tendency from small scale gwd @@ -7441,7 +7464,7 @@ dimensions = (horizontal_loop_extent,vertical_layer_dimension) type = real kind = kind_phys - active = (flag_for_ugwp_version_1 .or. control_for_drag_suite_gravity_wave_drag==33 .or. control_for_drag_suite_gravity_wave_drag==22 .or. control_for_drag_suite_gravity_wave_drag==3 .or. control_for_drag_suite_gravity_wave_drag==2) + active = (flag_for_ugwp_version_1 .or. control_for_drag_suite_gravity_wave_drag==33) [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 @@ -7449,7 +7472,7 @@ dimensions = (horizontal_loop_extent) type = real kind = kind_phys - active = (flag_for_ugwp_version_1 .or. control_for_drag_suite_gravity_wave_drag==33 .or. control_for_drag_suite_gravity_wave_drag==22 .or. control_for_drag_suite_gravity_wave_drag==3 .or. control_for_drag_suite_gravity_wave_drag==2) + active = (flag_for_ugwp_version_1 .or. control_for_drag_suite_gravity_wave_drag==33) [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 @@ -7457,7 +7480,7 @@ dimensions = (horizontal_loop_extent) type = real kind = kind_phys - active = (flag_for_ugwp_version_1 .or. control_for_drag_suite_gravity_wave_drag==33 .or. control_for_drag_suite_gravity_wave_drag==22 .or. control_for_drag_suite_gravity_wave_drag==3 .or. control_for_drag_suite_gravity_wave_drag==2) + active = (flag_for_ugwp_version_1 .or. control_for_drag_suite_gravity_wave_drag==33) [dudt_ofd] standard_name = tendency_of_x_momentum_due_to_form_drag long_name = x momentum tendency from form drag @@ -7465,7 +7488,7 @@ dimensions = (horizontal_loop_extent,vertical_layer_dimension) type = real kind = kind_phys - active = (flag_for_ugwp_version_1 .or. control_for_drag_suite_gravity_wave_drag==33 .or. control_for_drag_suite_gravity_wave_drag==22 .or. control_for_drag_suite_gravity_wave_drag==3 .or. control_for_drag_suite_gravity_wave_drag==2) + active = (flag_for_ugwp_version_1 .or. control_for_drag_suite_gravity_wave_drag==33) [dvdt_ofd] standard_name = tendency_of_y_momentum_due_to_form_drag long_name = y momentum tendency from form drag @@ -7473,7 +7496,7 @@ dimensions = (horizontal_loop_extent,vertical_layer_dimension) type = real kind = kind_phys - active = (flag_for_ugwp_version_1 .or. control_for_drag_suite_gravity_wave_drag==33 .or. control_for_drag_suite_gravity_wave_drag==22 .or. control_for_drag_suite_gravity_wave_drag==3 .or. control_for_drag_suite_gravity_wave_drag==2) + active = (flag_for_ugwp_version_1 .or. control_for_drag_suite_gravity_wave_drag==33) [du_ofdcol] standard_name = vertically_integrated_x_momentum_flux_due_to_form_drag long_name = integrated x momentum flux from form drag @@ -7481,7 +7504,7 @@ dimensions = (horizontal_loop_extent) type = real kind = kind_phys - active = (flag_for_ugwp_version_1 .or. control_for_drag_suite_gravity_wave_drag==33 .or. control_for_drag_suite_gravity_wave_drag==22 .or. control_for_drag_suite_gravity_wave_drag==3 .or. control_for_drag_suite_gravity_wave_drag==2) + active = (flag_for_ugwp_version_1 .or. control_for_drag_suite_gravity_wave_drag==33) [dv_ofdcol] standard_name = vertically_integrated_y_momentum_flux_due_to_form_drag long_name = integrated y momentum flux from form drag @@ -7489,7 +7512,7 @@ dimensions = (horizontal_loop_extent) type = real kind = kind_phys - active = (flag_for_ugwp_version_1 .or. control_for_drag_suite_gravity_wave_drag==33 .or. control_for_drag_suite_gravity_wave_drag==22 .or. control_for_drag_suite_gravity_wave_drag==3 .or. control_for_drag_suite_gravity_wave_drag==2) + active = (flag_for_ugwp_version_1 .or. control_for_drag_suite_gravity_wave_drag==33) [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 diff --git a/ccpp/driver/GFS_restart.F90 b/ccpp/driver/GFS_restart.F90 index b697dfb90..e4c4061f1 100644 --- a/ccpp/driver/GFS_restart.F90 +++ b/ccpp/driver/GFS_restart.F90 @@ -98,8 +98,8 @@ subroutine GFS_restart_populate (Restart, Model, Statein, Stateout, Sfcprop, & Restart%num2d = 3 + Model%ntot2d + Model%nctp + ndiag_rst ! GF - if (Model%imfdeepcnv == 3) then - Restart%num2d = Restart%num2d + 1 + if (Model%imfdeepcnv == Model%imfdeepcnv_gf) then + Restart%num2d = Restart%num2d + 3 endif ! CA if (Model%imfdeepcnv == 2 .and. Model%do_ca) then @@ -206,6 +206,16 @@ subroutine GFS_restart_populate (Restart, Model, Statein, Stateout, Sfcprop, & do nb = 1,nblks Restart%data(nb,num)%var2p => Sfcprop(nb)%conv_act(:) enddo + num = num + 1 + Restart%name2d(num) = 'gf_2d_conv_act_m' + do nb = 1,nblks + Restart%data(nb,num)%var2p => Sfcprop(nb)%conv_act_m(:) + enddo + num = num + 1 + Restart%name2d(num) = 'aod_gf' + do nb = 1,nblks + Restart%data(nb,num)%var2p => Tbd(nb)%aod_gf(:) + enddo endif ! NoahMP if (Model%lsm == Model%lsm_noahmp) then diff --git a/ccpp/physics b/ccpp/physics index fb752d447..4865cba04 160000 --- a/ccpp/physics +++ b/ccpp/physics @@ -1 +1 @@ -Subproject commit fb752d4475044bdc332619b5280f116369b64c04 +Subproject commit 4865cba04432d64f95b58b52428c18e8ef22d863 diff --git a/ccpp/suites/suite_FV3_GSD_SAR.xml b/ccpp/suites/suite_FV3_GSD_SAR.xml deleted file mode 100644 index f2b38d577..000000000 --- a/ccpp/suites/suite_FV3_GSD_SAR.xml +++ /dev/null @@ -1,85 +0,0 @@ - - - - - - - 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 - GFS_radiation_surface - 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 - lsm_ruc - 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 - 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 - phys_tend - - - - - GFS_stochastics - - - - diff --git a/ccpp/suites/suite_FV3_GSD_noah.xml b/ccpp/suites/suite_FV3_GSD_noah.xml deleted file mode 100644 index ad30ae4c2..000000000 --- a/ccpp/suites/suite_FV3_GSD_noah.xml +++ /dev/null @@ -1,96 +0,0 @@ - - - - - - - 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 - GFS_radiation_surface - 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 - lsm_noah - 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 - GFS_suite_stateout_update - ozphys_2015 - h2ophys - get_phi_fv3 - GFS_suite_interstitial_3 - GFS_DCNV_generic_pre - cu_gf_driver_pre - cu_gf_driver - GFS_DCNV_generic_post - GFS_SCNV_generic_pre - GFS_SCNV_generic_post - GFS_suite_interstitial_4 - cnvc90 - GFS_MP_generic_pre - mp_thompson_pre - - - mp_thompson - - - mp_thompson_post - GFS_MP_generic_post - cu_gf_driver_post - maximum_hourly_diagnostics - phys_tend - - - - - GFS_stochastics - - - - diff --git a/ccpp/suites/suite_FV3_GSD_v0.xml b/ccpp/suites/suite_FV3_GSD_v0.xml deleted file mode 100644 index 1a0857422..000000000 --- a/ccpp/suites/suite_FV3_GSD_v0.xml +++ /dev/null @@ -1,95 +0,0 @@ - - - - - - - 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 - GFS_radiation_surface - 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 - lsm_ruc - 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 - GFS_suite_stateout_update - ozphys_2015 - h2ophys - get_phi_fv3 - GFS_suite_interstitial_3 - GFS_DCNV_generic_pre - cu_gf_driver_pre - cu_gf_driver - GFS_DCNV_generic_post - GFS_SCNV_generic_pre - GFS_SCNV_generic_post - GFS_suite_interstitial_4 - cnvc90 - GFS_MP_generic_pre - mp_thompson_pre - - - mp_thompson - - - mp_thompson_post - GFS_MP_generic_post - cu_gf_driver_post - maximum_hourly_diagnostics - phys_tend - - - - - GFS_stochastics - - - - diff --git a/ccpp/suites/suite_FV3_HRRR.xml b/ccpp/suites/suite_FV3_HRRR.xml index 6fd18617d..d3408f0ba 100644 --- a/ccpp/suites/suite_FV3_HRRR.xml +++ b/ccpp/suites/suite_FV3_HRRR.xml @@ -62,10 +62,8 @@ ozphys_2015 h2ophys get_phi_fv3 - GFS_suite_interstitial_3 GFS_suite_interstitial_4 - GFS_MP_generic_pre mp_thompson_pre mp_thompson diff --git a/ccpp/suites/suite_FV3_GSD_v0_RRTMGP.xml b/ccpp/suites/suite_FV3_RAP_RRTMGP.xml similarity index 95% rename from ccpp/suites/suite_FV3_GSD_v0_RRTMGP.xml rename to ccpp/suites/suite_FV3_RAP_RRTMGP.xml index a9056b6fa..83542fae6 100644 --- a/ccpp/suites/suite_FV3_GSD_v0_RRTMGP.xml +++ b/ccpp/suites/suite_FV3_RAP_RRTMGP.xml @@ -1,6 +1,6 @@ - + @@ -50,7 +50,7 @@ - sfc_diff + mynnsfc_wrapper GFS_surface_loop_control_part1 sfc_nst_pre sfc_nst @@ -66,8 +66,7 @@ GFS_surface_generic_post mynnedmf_wrapper GFS_GWD_generic_pre - cires_ugwp - cires_ugwp_post + drag_suite GFS_GWD_generic_post GFS_suite_stateout_update ozphys_2015 diff --git a/ccpp/suites/suite_FV3_GSD_v0_mynnsfc.xml b/ccpp/suites/suite_FV3_RAP_cires_ugwp.xml similarity index 98% rename from ccpp/suites/suite_FV3_GSD_v0_mynnsfc.xml rename to ccpp/suites/suite_FV3_RAP_cires_ugwp.xml index 2f59d0671..7f43ed2b8 100644 --- a/ccpp/suites/suite_FV3_GSD_v0_mynnsfc.xml +++ b/ccpp/suites/suite_FV3_RAP_cires_ugwp.xml @@ -1,6 +1,6 @@ - + diff --git a/ccpp/suites/suite_FV3_RAP_flake.xml b/ccpp/suites/suite_FV3_RAP_flake.xml new file mode 100644 index 000000000..734f6dd89 --- /dev/null +++ b/ccpp/suites/suite_FV3_RAP_flake.xml @@ -0,0 +1,91 @@ + + + + + + + GFS_time_vary_pre + GFS_rrtmg_setup + GFS_rad_time_vary + GFS_phys_time_vary + + + + + GFS_suite_interstitial_rad_reset + sgscloud_radpre + GFS_rrtmg_pre + GFS_radiation_surface + 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 + lsm_ruc + flake_driver + GFS_surface_loop_control_part2 + + + + GFS_surface_composites_post + sfc_diag + sfc_diag_post + GFS_surface_generic_post + mynnedmf_wrapper + GFS_GWD_generic_pre + drag_suite + GFS_GWD_generic_post + GFS_suite_stateout_update + ozphys_2015 + h2ophys + get_phi_fv3 + GFS_suite_interstitial_3 + GFS_DCNV_generic_pre + cu_gf_driver_pre + cu_gf_driver + GFS_DCNV_generic_post + GFS_SCNV_generic_pre + GFS_SCNV_generic_post + GFS_suite_interstitial_4 + cnvc90 + GFS_MP_generic_pre + mp_thompson_pre + mp_thompson + mp_thompson_post + GFS_MP_generic_post + cu_gf_driver_post + maximum_hourly_diagnostics + phys_tend + + + + + GFS_stochastics + + + + diff --git a/ccpp/suites/suite_FV3_GSD_v0_unified_ugwp_suite_noah.xml b/ccpp/suites/suite_FV3_RAP_noah.xml similarity index 94% rename from ccpp/suites/suite_FV3_GSD_v0_unified_ugwp_suite_noah.xml rename to ccpp/suites/suite_FV3_RAP_noah.xml index 1fabc9e50..dd4eb76f9 100644 --- a/ccpp/suites/suite_FV3_GSD_v0_unified_ugwp_suite_noah.xml +++ b/ccpp/suites/suite_FV3_RAP_noah.xml @@ -1,6 +1,6 @@ - + @@ -40,7 +40,7 @@ - sfc_diff + mynnsfc_wrapper GFS_surface_loop_control_part1 sfc_nst_pre sfc_nst @@ -57,8 +57,7 @@ GFS_surface_generic_post mynnedmf_wrapper GFS_GWD_generic_pre - unified_ugwp - unified_ugwp_post + drag_suite GFS_GWD_generic_post GFS_suite_stateout_update ozphys_2015 diff --git a/ccpp/suites/suite_FV3_GSD_noah_mynnsfc.xml b/ccpp/suites/suite_FV3_RAP_noah_sfcdiff_cires_ugwp.xml similarity index 97% rename from ccpp/suites/suite_FV3_GSD_noah_mynnsfc.xml rename to ccpp/suites/suite_FV3_RAP_noah_sfcdiff_cires_ugwp.xml index 2dc671612..f849a2b62 100644 --- a/ccpp/suites/suite_FV3_GSD_noah_mynnsfc.xml +++ b/ccpp/suites/suite_FV3_RAP_noah_sfcdiff_cires_ugwp.xml @@ -1,6 +1,6 @@ - + @@ -40,7 +40,7 @@ - mynnsfc_wrapper + sfc_diff GFS_surface_loop_control_part1 sfc_nst_pre sfc_nst diff --git a/ccpp/suites/suite_FV3_GSD_v0_drag_suite.xml b/ccpp/suites/suite_FV3_RAP_sfcdiff.xml similarity index 98% rename from ccpp/suites/suite_FV3_GSD_v0_drag_suite.xml rename to ccpp/suites/suite_FV3_RAP_sfcdiff.xml index d8547ff19..82acb849a 100644 --- a/ccpp/suites/suite_FV3_GSD_v0_drag_suite.xml +++ b/ccpp/suites/suite_FV3_RAP_sfcdiff.xml @@ -1,6 +1,6 @@ - + diff --git a/ccpp/suites/suite_FV3_GSD_v0_unified_ugwp_suite.xml b/ccpp/suites/suite_FV3_RAP_unified_ugwp.xml similarity index 97% rename from ccpp/suites/suite_FV3_GSD_v0_unified_ugwp_suite.xml rename to ccpp/suites/suite_FV3_RAP_unified_ugwp.xml index 04e987eb7..b79398ef7 100644 --- a/ccpp/suites/suite_FV3_GSD_v0_unified_ugwp_suite.xml +++ b/ccpp/suites/suite_FV3_RAP_unified_ugwp.xml @@ -1,6 +1,6 @@ - + @@ -40,7 +40,7 @@ - sfc_diff + mynnsfc_wrapper GFS_surface_loop_control_part1 sfc_nst_pre sfc_nst diff --git a/ccpp/suites/suite_FV3_RRFS_v1alpha.xml b/ccpp/suites/suite_FV3_RRFS_v1alpha.xml deleted file mode 100644 index b3622828e..000000000 --- a/ccpp/suites/suite_FV3_RRFS_v1alpha.xml +++ /dev/null @@ -1,84 +0,0 @@ - - - - - - - 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 - GFS_radiation_surface - 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 - 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 - phys_tend - - - - - GFS_stochastics - - - - diff --git a/io/FV3GFS_io.F90 b/io/FV3GFS_io.F90 index 157e51102..3827ccb68 100644 --- a/io/FV3GFS_io.F90 +++ b/io/FV3GFS_io.F90 @@ -783,7 +783,11 @@ subroutine sfc_prop_restart_read (Sfcprop, Atm_block, Model, fv_domain, warm_sta !--- allocate the various containers needed for restarts allocate(sfc_name2(nvar_s2m+nvar_s2o+nvar_s2mp+nvar_s2r)) allocate(sfc_name3(0:nvar_s3+nvar_s3mp)) - allocate(sfc_var2(nx,ny,nvar_s2m+nvar_s2o+nvar_s2mp+nvar_s2r),sfc_var3ice(nx,ny,Model%kice)) + allocate(sfc_var2(nx,ny,nvar_s2m+nvar_s2o+nvar_s2mp+nvar_s2r)) + ! Note that this may cause problems with RUC LSM for coldstart runs from GFS data + ! if the initial conditions do contain this variable, because Model%kice is 9 for + ! RUC LSM, but tiice in the initial conditions will only have two vertical layers + allocate(sfc_var3ice(nx,ny,Model%kice)) if (Model%lsm == Model%lsm_noah .or. Model%lsm == Model%lsm_noahmp .or. (.not.warm_start)) then allocate(sfc_var3(nx,ny,Model%lsoil,nvar_s3)) @@ -2787,8 +2791,8 @@ subroutine fv3gfs_diag_output(time, diag, atm_block, nx, ny, levs, ntcw, ntoz, & !--- !--- skipping other 3D variables with the following else statement !--- - if(mpp_pe()==mpp_root_pe())print *,'in,fv3gfs_io. 3D fields, idx=',idx,'varname=',trim(diag(idx)%name), & - 'lcnvfac=',lcnvfac, 'levo=',levo,'nx=',nx,'ny=',ny +! if(mpp_pe()==mpp_root_pe())print *,'in,fv3gfs_io. 3D fields, idx=',idx,'varname=',trim(diag(idx)%name), & +! 'lcnvfac=',lcnvfac, 'levo=',levo,'nx=',nx,'ny=',ny do k=1, levo do j = 1, ny jj = j + jsc -1 From a1b0f33e36db680620c59794d5ebfa31169c279c Mon Sep 17 00:00:00 2001 From: Dom Heinzeller Date: Tue, 14 Dec 2021 06:58:47 -0700 Subject: [PATCH 11/14] Major cleanup of CCPP cmake build config (#436) * Major cleanup of CCPP cmake build config. --- ccpp/CMakeLists.txt | 13 +++++++------ ccpp/framework | 2 +- ccpp/physics | 2 +- 3 files changed, 9 insertions(+), 8 deletions(-) diff --git a/ccpp/CMakeLists.txt b/ccpp/CMakeLists.txt index 2eafbd952..7f1af3301 100644 --- a/ccpp/CMakeLists.txt +++ b/ccpp/CMakeLists.txt @@ -65,19 +65,20 @@ endif() #------------------------------------------------------------------------------ # Set flag for 32bit dynamics build if(32BIT) - set(DYN32 ON CACHE BOOL "Enable support for 32bit fast physics in CCPP") - message(STATUS "Dynamics compiled with 32-bit option, adjust fv_sat_adj types") + message(STATUS "Compile CCPP slow physics with 64-bit precision, fast physics with 32-bit precision") add_definitions(-DOVERLOAD_R4) - message ("Force 64 bits in ccpp") if(CMAKE_Fortran_COMPILER_ID MATCHES "Intel") - set(CMAKE_Fortran_FLAGS "${CMAKE_Fortran_FLAGS} -real-size 64") + set(CMAKE_Fortran_FLAGS_PHYSICS "-real-size 64 -no-prec-div -no-prec-sqrt") elseif(CMAKE_Fortran_COMPILER_ID MATCHES "GNU") - set(CMAKE_Fortran_FLAGS "${CMAKE_Fortran_FLAGS} -fdefault-real-8") + set(CMAKE_Fortran_FLAGS_PHYSICS "-fdefault-real-8 -fdefault-double-8") endif() + set(CMAKE_Fortran_FLAGS_DYNAMICS "") else() - set(DYN32 OFF CACHE BOOL "Disable support for 32bit fast physics in CCPP") + message(STATUS "Compile CCPP physics with 64-bit precision") remove_definitions(-DOVERLOAD_R8) remove_definitions(-DOVERLOAD_R4) + set(CMAKE_Fortran_FLAGS_PHYSICS "") + set(CMAKE_Fortran_FLAGS_DYNAMICS "") endif() #------------------------------------------------------------------------------ diff --git a/ccpp/framework b/ccpp/framework index 4cdbddf76..64b5afd13 160000 --- a/ccpp/framework +++ b/ccpp/framework @@ -1 +1 @@ -Subproject commit 4cdbddf760a9383c461dec3af4ae9423b43e4ba7 +Subproject commit 64b5afd1352d709f3b72734bf960e36024a838d3 diff --git a/ccpp/physics b/ccpp/physics index 4865cba04..98ebf42c0 160000 --- a/ccpp/physics +++ b/ccpp/physics @@ -1 +1 @@ -Subproject commit 4865cba04432d64f95b58b52428c18e8ef22d863 +Subproject commit 98ebf42c08d960addf4debe08226aff79e960211 From dd8b65d69a3896510aa1e4d0c1330da7171d8e77 Mon Sep 17 00:00:00 2001 From: Dom Heinzeller Date: Wed, 15 Dec 2021 10:57:25 -0700 Subject: [PATCH 12/14] Update .gitmodules and submodule pointer for ccpp-physics for code review and testing --- .gitmodules | 6 ++++-- ccpp/physics | 2 +- 2 files changed, 5 insertions(+), 3 deletions(-) diff --git a/.gitmodules b/.gitmodules index 554de3eb7..3e2178578 100644 --- a/.gitmodules +++ b/.gitmodules @@ -8,5 +8,7 @@ branch = main [submodule "ccpp/physics"] path = ccpp/physics - url = https://github.com/NOAA-GSL/ccpp-physics - branch = gsl/develop + #url = https://github.com/NOAA-GSL/ccpp-physics + #branch = gsl/develop + url = https://github.com/climbfuji/ccpp-physics + branch = update_gsl_develop_from_main_20211215 diff --git a/ccpp/physics b/ccpp/physics index e9e5d08a2..cb5fd666c 160000 --- a/ccpp/physics +++ b/ccpp/physics @@ -1 +1 @@ -Subproject commit e9e5d08a24651c05312eccef5a5b18fa29b6947c +Subproject commit cb5fd666cae8e0e6fdbdacd5143cbfc608760392 From ff7015289c6dcac2278e23ebde03b173d1500713 Mon Sep 17 00:00:00 2001 From: Dom Heinzeller Date: Wed, 15 Dec 2021 12:22:47 -0700 Subject: [PATCH 13/14] Fix merge conflicts --- ccpp/suites/suite_FV3_HRRR.xml | 2 -- ccpp/suites/suite_FV3_RAP.xml | 1 - ccpp/suites/suite_FV3_RRFS_v1beta.xml | 1 - 3 files changed, 4 deletions(-) diff --git a/ccpp/suites/suite_FV3_HRRR.xml b/ccpp/suites/suite_FV3_HRRR.xml index 4553d1e21..d3408f0ba 100644 --- a/ccpp/suites/suite_FV3_HRRR.xml +++ b/ccpp/suites/suite_FV3_HRRR.xml @@ -46,7 +46,6 @@ sfc_nst sfc_nst_post lsm_ruc - flake_driver GFS_surface_loop_control_part2 @@ -77,7 +76,6 @@ GFS_stochastics - phys_tend diff --git a/ccpp/suites/suite_FV3_RAP.xml b/ccpp/suites/suite_FV3_RAP.xml index d266c8100..66fab81d6 100644 --- a/ccpp/suites/suite_FV3_RAP.xml +++ b/ccpp/suites/suite_FV3_RAP.xml @@ -84,7 +84,6 @@ GFS_stochastics - phys_tend diff --git a/ccpp/suites/suite_FV3_RRFS_v1beta.xml b/ccpp/suites/suite_FV3_RRFS_v1beta.xml index d933ce524..51e0f03cb 100644 --- a/ccpp/suites/suite_FV3_RRFS_v1beta.xml +++ b/ccpp/suites/suite_FV3_RRFS_v1beta.xml @@ -78,7 +78,6 @@ GFS_stochastics - phys_tend From 2c2f799982bd96b0a86ff201e4cb76e5fa059f0a Mon Sep 17 00:00:00 2001 From: Dom Heinzeller Date: Wed, 15 Dec 2021 13:34:33 -0700 Subject: [PATCH 14/14] Revert change to .gitmodules and update submodule pointer for ccpp-physics --- .gitmodules | 6 ++---- ccpp/physics | 2 +- 2 files changed, 3 insertions(+), 5 deletions(-) diff --git a/.gitmodules b/.gitmodules index 2a98c47c7..be0d808ba 100644 --- a/.gitmodules +++ b/.gitmodules @@ -8,10 +8,8 @@ branch = main [submodule "ccpp/physics"] path = ccpp/physics - #url = https://github.com/NOAA-GSL/ccpp-physics - #branch = gsl/develop - url = https://github.com/climbfuji/ccpp-physics - branch = update_gsl_develop_from_main_20211215 + url = https://github.com/NOAA-GSL/ccpp-physics + branch = gsl/develop [submodule "upp"] path = upp url = https://github.com/NOAA-EMC/UPP diff --git a/ccpp/physics b/ccpp/physics index cb5fd666c..4530b2ce8 160000 --- a/ccpp/physics +++ b/ccpp/physics @@ -1 +1 @@ -Subproject commit cb5fd666cae8e0e6fdbdacd5143cbfc608760392 +Subproject commit 4530b2ce8eb5c764b11f8c8c00fe93f3e2d5fa3f