diff --git a/atmos_cubed_sphere b/atmos_cubed_sphere index 76489d630..34a6fdf47 160000 --- a/atmos_cubed_sphere +++ b/atmos_cubed_sphere @@ -1 +1 @@ -Subproject commit 76489d6304c8577a048c3dcccb4082c7195f8c37 +Subproject commit 34a6fdf47f68485cd300220391af76589793f676 diff --git a/atmos_model.F90 b/atmos_model.F90 index 051f5918d..d6a32750b 100644 --- a/atmos_model.F90 +++ b/atmos_model.F90 @@ -254,6 +254,7 @@ subroutine update_atmos_radiation_physics (Atmos) type (atmos_data_type), intent(in) :: Atmos !--- local variables--- integer :: nb, jdat(8), rc + procedure(IPD_func0d_proc), pointer :: Func0d => NULL() procedure(IPD_func1d_proc), pointer :: Func1d => NULL() ! @@ -289,13 +290,12 @@ subroutine update_atmos_radiation_physics (Atmos) !--- execute the IPD atmospheric setup step call mpp_clock_begin(setupClock) #ifdef CCPP - call CCPP_step (step="time_vary", nblks=Atm_block%nblks, ierr=ierr) - if (ierr/=0) call mpp_error(FATAL, 'Call to CCPP time_vary step failed') + call CCPP_step (step="timestep_init", nblks=Atm_block%nblks, ierr=ierr) + if (ierr/=0) call mpp_error(FATAL, 'Call to CCPP timestep_init step failed') !--- call stochastic physics pattern generation / cellular automata call stochastic_physics_wrapper(IPD_Control, IPD_Data, Atm_block, ierr) if (ierr/=0) call mpp_error(FATAL, 'Call to stochastic_physics_wrapper failed') - #else Func1d => time_vary_step call IPD_step (IPD_Control, IPD_Data(:), IPD_Diag, IPD_Restart, IPD_func1d=Func1d) @@ -419,6 +419,15 @@ subroutine update_atmos_radiation_physics (Atmos) endif call getiauforcing(IPD_Control,IAU_data) if (mpp_pe() == mpp_root_pe() .and. debug) write(6,*) "end of radiation and physics step" + +#ifdef CCPP +!--- execute the IPD atmospheric timestep finalize step + call mpp_clock_begin(setupClock) + call CCPP_step (step="timestep_finalize", nblks=Atm_block%nblks, ierr=ierr) + if (ierr/=0) call mpp_error(FATAL, 'Call to CCPP timestep_finalize step failed') + call mpp_clock_end(setupClock) +#endif + endif #ifdef CCPP diff --git a/ccpp/config/ccpp_prebuild_config.py b/ccpp/config/ccpp_prebuild_config.py index c277e5c83..b16e3f507 100755 --- a/ccpp/config/ccpp_prebuild_config.py +++ b/ccpp/config/ccpp_prebuild_config.py @@ -17,6 +17,8 @@ # actual variable definition files 'ccpp/physics/physics/machine.F', 'ccpp/physics/physics/radsw_param.f', + 'ccpp/physics/physics/h2o_def.f', + 'ccpp/physics/physics/ozne_def.f', 'ccpp/physics/physics/radlw_param.f', 'gfsphysics/CCPP_layer/CCPP_typedefs.F90', 'gfsphysics/GFS_layer/GFS_typedefs.F90', diff --git a/ccpp/driver/CCPP_driver.F90 b/ccpp/driver/CCPP_driver.F90 index 06e6dc63f..392b37151 100644 --- a/ccpp/driver/CCPP_driver.F90 +++ b/ccpp/driver/CCPP_driver.F90 @@ -3,14 +3,17 @@ module CCPP_driver use ccpp_api, only: ccpp_t use ccpp_static_api, only: ccpp_physics_init, & + ccpp_physics_timestep_init, & ccpp_physics_run, & + ccpp_physics_timestep_finalize, & ccpp_physics_finalize use CCPP_data, only: cdata_tile, & cdata_domain, & cdata_block, & ccpp_suite, & - GFS_control + GFS_control, & + GFS_data implicit none @@ -55,6 +58,8 @@ subroutine CCPP_step (step, nblks, ierr) ! Local variables integer :: nb, nt, ntX integer :: ierr2 + ! DH* 20210104 - remove kdt_rad when code to clear diagnostic buckets is removed + integer :: kdt_rad ierr = 0 @@ -95,9 +100,9 @@ subroutine CCPP_step (step, nblks, ierr) else if (trim(step)=="physics_init") then - ! Since the physics init steps are independent of the blocking structure, + ! Since the physics init step is independent of the blocking structure, ! we can use cdata_domain here. Since we don't use threading on the outside, - ! we can allow threading inside the time_vary routines. + ! we can allow threading inside the physics init routines. GFS_control%nthreads = nthrds call ccpp_physics_init(cdata_domain, suite_name=trim(ccpp_suite), ierr=ierr) @@ -107,22 +112,53 @@ subroutine CCPP_step (step, nblks, ierr) return end if - else if (trim(step)=="time_vary") then + ! Timestep init = time_vary + else if (trim(step)=="timestep_init") then - ! Since the time_vary steps only use data structures for all blocks (except the - ! CCPP-internal variables ccpp_error_flag and ccpp_error_message, which are defined - ! for all cdata structures independently), we can use cdata_domain here. - ! Since we don't use threading on the outside, we can allow threading - ! inside the time_vary routines. + ! Since the physics timestep init step is independent of the blocking structure, + ! we can use cdata_domain here. Since we don't use threading on the outside, + ! we can allow threading inside the timestep init (time_vary) routines. GFS_control%nthreads = nthrds - call ccpp_physics_run(cdata_domain, suite_name=trim(ccpp_suite), group_name="time_vary", ierr=ierr) + call ccpp_physics_timestep_init(cdata_domain, suite_name=trim(ccpp_suite), group_name="time_vary", ierr=ierr) if (ierr/=0) then - write(0,'(a)') "An error occurred in ccpp_physics_run for group time_vary" + write(0,'(a)') "An error occurred in ccpp_physics_timestep_init for group time_vary" write(0,'(a)') trim(cdata_domain%errmsg) return end if + !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! + ! DH* 20210104 - this block of code will be removed once the CCPP framework ! + ! fully supports handling diagnostics through its metadata, work in progress ! + !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! + + !--- determine if radiation diagnostics buckets need to be cleared + if (nint(GFS_control%fhzero*3600) >= nint(max(GFS_control%fhswr,GFS_control%fhlwr))) then + if (mod(GFS_control%kdt,GFS_control%nszero) == 1) then + do nb = 1,nblks + call GFS_data(nb)%Intdiag%rad_zero(GFS_control) + end do + endif + else + kdt_rad = nint(min(GFS_control%fhswr,GFS_control%fhlwr)/GFS_control%dtp) + if (mod(GFS_control%kdt,kdt_rad) == 1) then + do nb = 1,nblks + call GFS_data(nb)%Intdiag%rad_zero(GFS_control) + enddo + endif + endif + + !--- determine if physics diagnostics buckets need to be cleared + if (mod(GFS_control%kdt,GFS_control%nszero) == 1) then + do nb = 1,nblks + call GFS_data(nb)%Intdiag%phys_zero(GFS_control) + end do + endif + + !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! + ! *DH 20210104 ! + !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! + ! Radiation and stochastic physics else if (trim(step)=="radiation" .or. trim(step)=="physics" .or. trim(step)=="stochastics") then @@ -162,6 +198,21 @@ subroutine CCPP_step (step, nblks, ierr) !$OMP end parallel if (ierr/=0) return + ! Timestep finalize = time_vary + else if (trim(step)=="timestep_finalize") then + + ! Since the physics timestep finalize step is independent of the blocking structure, + ! we can use cdata_domain here. Since we don't use threading on the outside, + ! we can allow threading inside the timestep finalize (time_vary) routines. + GFS_control%nthreads = nthrds + + call ccpp_physics_timestep_finalize(cdata_domain, suite_name=trim(ccpp_suite), group_name="time_vary", ierr=ierr) + if (ierr/=0) then + write(0,'(a)') "An error occurred in ccpp_physics_timestep_finalize for group time_vary" + write(0,'(a)') trim(cdata_domain%errmsg) + return + end if + ! Finalize else if (trim(step)=="finalize") then diff --git a/ccpp/framework b/ccpp/framework index d4d131d5b..612dd1aa9 160000 --- a/ccpp/framework +++ b/ccpp/framework @@ -1 +1 @@ -Subproject commit d4d131d5bdb9cbbd75ace82f0c2b93a1a6b32bb1 +Subproject commit 612dd1aa9ed6f8c08b4c280ba1c992dd5357fc59 diff --git a/ccpp/physics b/ccpp/physics index 4e7465c98..9ae4ceac1 160000 --- a/ccpp/physics +++ b/ccpp/physics @@ -1 +1 @@ -Subproject commit 4e7465c985597525acea42ead8a3323ea82a9c3e +Subproject commit 9ae4ceac1de47ef9c80531074ba3bdd14d151067 diff --git a/gfsphysics/GFS_layer/GFS_typedefs.F90 b/gfsphysics/GFS_layer/GFS_typedefs.F90 index 08af63eb0..98b966450 100644 --- a/gfsphysics/GFS_layer/GFS_typedefs.F90 +++ b/gfsphysics/GFS_layer/GFS_typedefs.F90 @@ -14,6 +14,8 @@ module GFS_typedefs use module_radsw_parameters, only: topfsw_type, sfcfsw_type, profsw_type, cmpfsw_type, NBDSW use module_radlw_parameters, only: topflw_type, sfcflw_type, proflw_type, NBDLW + use ozne_def, only: levozp, oz_coeff + use h2o_def, only: levh2o, h2o_coeff use mo_gas_optics_rrtmgp, only: ty_gas_optics_rrtmgp use mo_optical_props, only: ty_optical_props_1scl,ty_optical_props_2str use mo_cloud_optics, only: ty_cloud_optics @@ -48,10 +50,10 @@ module GFS_typedefs ! from aerclm_def integer, parameter :: ntrcaerm = 15 - ! These will be set later in GFS_Control%initialize, - ! since they depend on the runtime config (e.g. Model%ntoz, Model%h2o_phys, Model%aero_in) - private :: levozp, oz_coeff, levh2o, h2o_coeff, ntrcaer - integer :: levozp, oz_coeff, levh2o, h2o_coeff, ntrcaer + ! This will be set later in GFS_Control%initialize, since + ! it depends on the runtime config (Model%aero_in) + private :: ntrcaer + integer :: ntrcaer #endif ! If these are changed to >99, need to adjust formatting string in GFS_diagnostics.F90 (and names in diag_tables) integer, parameter :: naux2dmax = 20 !< maximum number of auxiliary 2d arrays in output (for debugging) @@ -1171,10 +1173,11 @@ module GFS_typedefs integer :: nqvdelt !< the index of specific humidity at the previous timestep for Z-C MP in phy_f3d integer :: nps2delt !< the index of surface air pressure 2 timesteps back for Z-C MP in phy_f2d integer :: npsdelt !< the index of surface air pressure at the previous timestep for Z-C MP in phy_f2d + integer :: ncnvwind !< the index of surface wind enhancement due to convection for MYNN SFC and RAS CNV in phy f2d #endif !--- debug flag - logical :: debug + logical :: debug logical :: pre_rad !< flag for testing purpose !--- variables modified at each time step @@ -1863,8 +1866,7 @@ module GFS_typedefs real (kind=kind_phys), pointer :: graupelmp(:) => null() !< real (kind=kind_phys), pointer :: gwdcu(:,:) => null() !< real (kind=kind_phys), pointer :: gwdcv(:,:) => null() !< - integer :: h2o_coeff !< - real (kind=kind_phys), pointer :: h2o_pres(:) => null() !< + real (kind=kind_phys), pointer :: hefac(:) => null() !< real (kind=kind_phys), pointer :: hffac(:) => null() !< real (kind=kind_phys), pointer :: hflxq(:) => null() !< @@ -1898,8 +1900,6 @@ module GFS_typedefs integer, pointer :: ktop(:) => null() !< integer :: latidxprnt !< integer :: levi !< - integer :: levh2o !< - integer :: levozp !< integer :: lmk !< integer :: lmp !< integer, pointer :: mbota(:,:) => null() !< @@ -1929,9 +1929,7 @@ module GFS_typedefs real (kind=kind_phys), pointer :: oc(:) => null() !< real (kind=kind_phys), pointer :: olyr(:,:) => null() !< logical , pointer :: otspt(:,:) => null() !< - integer :: oz_coeff !< integer :: oz_coeffp5 !< - real (kind=kind_phys), pointer :: oz_pres(:) => null() !< logical :: phys_hydrostatic !< real (kind=kind_phys), pointer :: plvl(:,:) => null() !< real (kind=kind_phys), pointer :: plyr(:,:) => null() !< @@ -4358,7 +4356,7 @@ subroutine control_initialize (Model, nlunit, fn_nml, me, master, & stop else levozp = 1 - oz_coeff = 0 + oz_coeff = 1 end if end if #endif @@ -4876,6 +4874,9 @@ subroutine control_initialize (Model, nlunit, fn_nml, me, master, & #endif if(Model%cnvcld) Model%ncnvcld3d = 1 +!--- get cnvwind index in phy_f2d; last entry in phy_f2d array + Model%ncnvwind = Model%num_p2d + !--- get cnvw and cnvc indices in phy_f3d Model%ncnvw = -999 Model%ncnvc = -999 @@ -5212,6 +5213,8 @@ subroutine control_print(Model) print *, ' shocaftcnv : ', Model%shocaftcnv print *, ' shoc_cld : ', Model%shoc_cld print *, ' uni_cld : ', Model%uni_cld + print *, ' oz_phys : ', Model%oz_phys + print *, ' oz_phys_2015 : ', Model%oz_phys_2015 print *, ' h2o_phys : ', Model%h2o_phys print *, ' pdfcld : ', Model%pdfcld print *, ' shcnvcw : ', Model%shcnvcw @@ -5509,8 +5512,6 @@ subroutine tbd_create (Tbd, IM, Model) endif !--- ozone and stratosphere h2o needs - ! DH* oz_coeff is set to zero if both ozphys options are false, - ! better to use conditional allocations here for ozpl (and h2opl)? *DH allocate (Tbd%ozpl (IM,levozp,oz_coeff)) allocate (Tbd%h2opl (IM,levh2o,h2o_coeff)) Tbd%ozpl = clear_val @@ -5529,8 +5530,6 @@ subroutine tbd_create (Tbd, IM, Model) Tbd%aer_nm = clear_val #ifdef CCPP -! DH* TODO - MOVE THIS TO a block-vector dependent structure in GFS_control? -! e.g. GFS_Control%imap(blk), GFS_Control%jmap(blk), or ii instead if imap etc? *DH !--- maps of local index ix to global indices i and j for this block allocate (Tbd%imap (IM)) allocate (Tbd%jmap (IM)) @@ -6552,7 +6551,6 @@ subroutine interstitial_create (Interstitial, IM, Model) allocate (Interstitial%gflx_ocean (IM)) allocate (Interstitial%gwdcu (IM,Model%levs)) allocate (Interstitial%gwdcv (IM,Model%levs)) - allocate (Interstitial%h2o_pres (levh2o)) allocate (Interstitial%hefac (IM)) allocate (Interstitial%hffac (IM)) allocate (Interstitial%hflxq (IM)) @@ -6581,7 +6579,6 @@ subroutine interstitial_create (Interstitial, IM, Model) allocate (Interstitial%oa4 (IM,4)) allocate (Interstitial%oc (IM)) allocate (Interstitial%olyr (IM,Model%levr+LTP)) - allocate (Interstitial%oz_pres (levozp)) allocate (Interstitial%plvl (IM,Model%levr+1+LTP)) allocate (Interstitial%plyr (IM,Model%levr+LTP)) allocate (Interstitial%prnum (IM,Model%levs)) @@ -6827,23 +6824,18 @@ subroutine interstitial_create (Interstitial, IM, Model) Interstitial%ipr = min(IM,10) Interstitial%latidxprnt = 1 Interstitial%levi = Model%levs+1 - Interstitial%levh2o = levh2o - Interstitial%levozp = levozp Interstitial%lmk = Model%levr+LTP Interstitial%lmp = Model%levr+1+LTP - Interstitial%h2o_coeff = h2o_coeff Interstitial%nbdlw = NBDLW Interstitial%nbdsw = NBDSW Interstitial%nf_aelw = NF_AELW Interstitial%nf_aesw = NF_AESW Interstitial%nspc1 = NSPC1 - Interstitial%oz_coeff = oz_coeff - Interstitial%oz_coeffp5 = oz_coeff+5 - ! h2o_pres and oz_pres do not change during the run, but - ! need to be set later in GFS_phys_time_vary_init (after - ! h2o_pres/oz_pres are read in read_h2odata/read_o3data) - Interstitial%h2o_pres = clear_val - Interstitial%oz_pres = clear_val + if (Model%oz_phys .or. Model%oz_phys_2015) then + Interstitial%oz_coeffp5 = oz_coeff+5 + else + Interstitial%oz_coeffp5 = 5 + endif ! Interstitial%skip_macro = .false. ! The value phys_hydrostatic from dynamics does not match the @@ -7449,14 +7441,10 @@ subroutine interstitial_print(Interstitial, Model, mpirank, omprank, blkno) ! Print static variables write (0,'(a,3i6)') 'Interstitial_print for mpirank, omprank, blkno: ', mpirank, omprank, blkno write (0,*) 'Interstitial_print: values that do not change' - write (0,*) 'Interstitial%h2o_coeff = ', Interstitial%h2o_coeff - write (0,*) 'sum(Interstitial%h2o_pres) = ', sum(Interstitial%h2o_pres) write (0,*) 'Interstitial%ipr = ', Interstitial%ipr write (0,*) 'Interstitial%itc = ', Interstitial%itc write (0,*) 'Interstitial%latidxprnt = ', Interstitial%latidxprnt write (0,*) 'Interstitial%levi = ', Interstitial%levi - write (0,*) 'Interstitial%levh2o = ', Interstitial%levh2o - write (0,*) 'Interstitial%levozp = ', Interstitial%levozp write (0,*) 'Interstitial%lmk = ', Interstitial%lmk write (0,*) 'Interstitial%lmp = ', Interstitial%lmp write (0,*) 'Interstitial%nbdlw = ', Interstitial%nbdlw @@ -7468,8 +7456,6 @@ subroutine interstitial_print(Interstitial, Model, mpirank, omprank, blkno) write (0,*) 'Interstitial%nspc1 = ', Interstitial%nspc1 write (0,*) 'Interstitial%ntiwx = ', Interstitial%ntiwx write (0,*) 'Interstitial%nvdiff = ', Interstitial%nvdiff - write (0,*) 'Interstitial%oz_coeff = ', Interstitial%oz_coeff - write (0,*) 'sum(Interstitial%oz_pres) = ', sum(Interstitial%oz_pres) write (0,*) 'Interstitial%phys_hydrostatic = ', Interstitial%phys_hydrostatic write (0,*) 'Interstitial%skip_macro = ', Interstitial%skip_macro write (0,*) 'Interstitial%trans_aero = ', Interstitial%trans_aero diff --git a/gfsphysics/GFS_layer/GFS_typedefs.meta b/gfsphysics/GFS_layer/GFS_typedefs.meta index 656f851fc..708f2ef8e 100644 --- a/gfsphysics/GFS_layer/GFS_typedefs.meta +++ b/gfsphysics/GFS_layer/GFS_typedefs.meta @@ -20,6 +20,13 @@ dimensions = (horizontal_loop_extent,vertical_dimension_plus_one) type = real kind = kind_phys +[prsi(:,1)] + standard_name = air_pressure_at_lowest_model_interface + long_name = air pressure at lowest model interface + units = Pa + dimensions = (horizontal_loop_extent) + type = real + kind = kind_phys [prsik] standard_name = dimensionless_exner_function_at_model_interfaces long_name = dimensionless Exner function at model layer interfaces @@ -2410,6 +2417,13 @@ units = flag dimensions = () type = logical +[fhcyc] + standard_name = frequency_for_surface_cycling_calls + long_name = frequency for surface cycling calls + units = h + dimensions = () + type = real + kind = kind_phys [nscyc] standard_name = number_of_timesteps_between_surface_cycling_calls long_name = number of timesteps between surface cycling calls @@ -3433,6 +3447,12 @@ units = index dimensions = () type = integer +[use_ufo] + standard_name = flag_for_gcycle_surface_option + long_name = flag for gcycle surface option + units = flag + dimensions = () + type = logical [lcurr_sf] standard_name = flag_for_ocean_currents_in_surface_layer_scheme long_name = flag for taking ocean currents into account in surface layer scheme @@ -3953,6 +3973,12 @@ dimensions = () type = real kind = kind_phys +[nst_anl] + standard_name = flag_for_nsstm_analysis_in_gcycle + long_name = flag for NSSTM analysis in gcycle/sfcsub + units = flag + dimensions = () + type = logical [nstf_name(1)] standard_name = flag_for_nsstm_run long_name = NSSTM flag: off/uncoupled/coupled=0/1/2 @@ -4478,6 +4504,12 @@ units = dimensions = () type = integer +[ncnvwind] + standard_name = index_for_surface_wind_enhancement_due_to_convection + long_name = the index of surface wind enhancement due to convection in phy f2d + units = + dimensions = () + type = integer [debug] standard_name = flag_debug long_name = control flag for debug @@ -4979,12 +5011,14 @@ units = index dimensions = (horizontal_loop_extent) type = integer + active = (index_for_ozone>0) [jindx2_o3] standard_name = upper_ozone_interpolation_index long_name = interpolation high index for ozone units = index dimensions = (horizontal_loop_extent) type = integer + active = (index_for_ozone>0) [ddy_o3] standard_name = ozone_interpolation_weight long_name = interpolation high index for ozone @@ -4992,18 +5026,21 @@ dimensions = (horizontal_loop_extent) type = real kind = kind_phys + active = (index_for_ozone>0) [jindx1_h] standard_name = lower_water_vapor_interpolation_index long_name = interpolation low index for stratospheric water vapor units = index dimensions = (horizontal_loop_extent) type = integer + active = (flag_for_stratospheric_water_vapor_physics) [jindx2_h] standard_name = upper_water_vapor_interpolation_index long_name = interpolation high index for stratospheric water vapor units = index dimensions = (horizontal_loop_extent) type = integer + active = (flag_for_stratospheric_water_vapor_physics) [ddy_h] standard_name = water_vapor_interpolation_weight long_name = interpolation high index for stratospheric water vapor @@ -5011,18 +5048,21 @@ dimensions = (horizontal_loop_extent) type = real kind = kind_phys + active = (flag_for_stratospheric_water_vapor_physics) [jindx1_aer] standard_name = lower_aerosol_y_interpolation_index long_name = interpolation low index for prescribed aerosols in the y direction units = index dimensions = (horizontal_loop_extent) type = integer + active = (flag_for_aerosol_input_MG_radiation) [jindx2_aer] standard_name = upper_aerosol_y_interpolation_index long_name = interpolation high index for prescribed aerosols in the y direction units = index dimensions = (horizontal_loop_extent) type = integer + active = (flag_for_aerosol_input_MG_radiation) [ddy_aer] standard_name = aerosol_y_interpolation_weight long_name = interpolation high index for prescribed aerosols in the y direction @@ -5030,18 +5070,21 @@ dimensions = (horizontal_loop_extent) type = real kind = kind_phys + active = (flag_for_aerosol_input_MG_radiation) [iindx1_aer] standard_name = lower_aerosol_x_interpolation_index long_name = interpolation low index for prescribed aerosols in the x direction units = index dimensions = (horizontal_loop_extent) type = integer + active = (flag_for_aerosol_input_MG_radiation) [iindx2_aer] standard_name = upper_aerosol_x_interpolation_index long_name = interpolation high index for prescribed aerosols in the x direction units = index dimensions = (horizontal_loop_extent) type = integer + active = (flag_for_aerosol_input_MG_radiation) [ddx_aer] standard_name = aerosol_x_interpolation_weight long_name = interpolation high index for prescribed aerosols in the x direction @@ -5049,18 +5092,21 @@ dimensions = (horizontal_loop_extent) type = real kind = kind_phys + active = (flag_for_aerosol_input_MG_radiation) [jindx1_ci] standard_name = lower_cloud_nuclei_y_interpolation_index long_name = interpolation low index for ice and cloud condensation nuclei in the y direction units = index dimensions = (horizontal_loop_extent) type = integer + active = (flag_for_in_ccn_forcing_for_morrison_gettelman_microphysics==1) [jindx2_ci] standard_name = upper_cloud_nuclei_y_interpolation_index long_name = interpolation high index for ice and cloud condensation nuclei in the y direction units = index dimensions = (horizontal_loop_extent) type = integer + active = (flag_for_in_ccn_forcing_for_morrison_gettelman_microphysics==1) [ddy_ci] standard_name = cloud_nuclei_y_interpolation_weight long_name = interpolation high index for ice and cloud condensation nuclei in the y direction @@ -5068,18 +5114,21 @@ dimensions = (horizontal_loop_extent) type = real kind = kind_phys + active = (flag_for_in_ccn_forcing_for_morrison_gettelman_microphysics==1) [iindx1_ci] standard_name = lower_cloud_nuclei_x_interpolation_index long_name = interpolation low index for ice and cloud condensation nuclei in the x direction units = index dimensions = (horizontal_loop_extent) type = integer + active = (flag_for_in_ccn_forcing_for_morrison_gettelman_microphysics==1) [iindx2_ci] standard_name = upper_cloud_nuclei_x_interpolation_index long_name = interpolation high index for ice and cloud condensation nuclei in the x direction units = index dimensions = (horizontal_loop_extent) type = integer + active = (flag_for_in_ccn_forcing_for_morrison_gettelman_microphysics==1) [ddx_ci] standard_name = cloud_nuclei_x_interpolation_weight long_name = interpolation high index for ice and cloud condensation nuclei in the x direction @@ -5087,6 +5136,7 @@ dimensions = (horizontal_loop_extent) type = real kind = kind_phys + active = (flag_for_in_ccn_forcing_for_morrison_gettelman_microphysics==1) ######################################################################## [ccpp-table-properties] @@ -5232,6 +5282,7 @@ dimensions = (horizontal_loop_extent) type = real kind = kind_phys + active = (index_for_surface_air_pressure_two_timesteps_back > 0) [phy_f2d(:,index_for_surface_air_pressure_at_previous_timestep)] standard_name = surface_air_pressure_at_previous_timestep long_name = surface air pressure at previous timestep @@ -5239,13 +5290,15 @@ dimensions = (horizontal_loop_extent) type = real kind = kind_phys -[phy_f2d(:,array_dimension_of_2d_arrays_for_microphysics)] + active = (index_for_surface_air_pressure_at_previous_timestep > 0) +[phy_f2d(:,index_for_surface_wind_enhancement_due_to_convection)] standard_name = surface_wind_enhancement_due_to_convection long_name = surface wind enhancement due to convection units = m s-1 dimensions = (horizontal_loop_extent) type = real kind = kind_phys + active = (index_for_surface_wind_enhancement_due_to_convection > 0) [phy_f3d(:,:,index_for_air_temperature_two_timesteps_back)] standard_name = air_temperature_two_timesteps_back long_name = air temperature two timesteps back @@ -5253,6 +5306,7 @@ dimensions = (horizontal_loop_extent,vertical_dimension) type = real kind = kind_phys + active = (index_for_air_temperature_two_timesteps_back > 0) [phy_f3d(:,:,index_for_specific_humidity_two_timesteps_back)] standard_name = water_vapor_specific_humidity_two_timesteps_back long_name = water vapor specific humidity two timesteps back @@ -5260,6 +5314,7 @@ dimensions = (horizontal_loop_extent,vertical_dimension) type = real kind = kind_phys + active = (index_for_specific_humidity_two_timesteps_back > 0) [phy_f3d(:,:,index_for_air_temperature_at_previous_timestep)] standard_name = air_temperature_at_previous_timestep long_name = air temperature at previous timestep @@ -5267,6 +5322,7 @@ dimensions = (horizontal_loop_extent,vertical_dimension) type = real kind = kind_phys + active = (index_for_air_temperature_at_previous_timestep > 0) [phy_f3d(:,:,index_for_specific_humidity_at_previous_timestep)] standard_name = water_vapor_specific_humidity_at_previous_timestep long_name = water vapor specific humidity at previous timestep @@ -5274,6 +5330,7 @@ dimensions = (horizontal_loop_extent,vertical_dimension) type = real kind = kind_phys + active = (index_for_specific_humidity_at_previous_timestep > 0) [phy_f3d(:,:,index_for_convective_cloud_water_mixing_ratio_in_phy_f3d)] standard_name = convective_cloud_water_mixing_ratio_in_phy_f3d long_name = convective cloud water mixing ratio in the phy_f3d array @@ -5281,6 +5338,7 @@ dimensions = (horizontal_loop_extent,vertical_dimension) type = real kind = kind_phys + active = (index_for_convective_cloud_water_mixing_ratio_in_phy_f3d > 0) [phy_f3d(:,:,index_for_convective_cloud_cover_in_phy_f3d)] standard_name = convective_cloud_cover_in_phy_f3d long_name = convective cloud cover in the phy_f3d array @@ -5288,6 +5346,7 @@ dimensions = (horizontal_loop_extent,vertical_dimension) type = real kind = kind_phys + active = (index_for_convective_cloud_cover_in_phy_f3d > 0) [phy_f3d(:,:,index_of_kinematic_buoyancy_flux_from_shoc_in_phy_f3d)] standard_name = kinematic_buoyancy_flux_from_shoc long_name = upward kinematic buoyancy flux from the SHOC scheme @@ -5295,6 +5354,7 @@ dimensions = (horizontal_loop_extent,vertical_dimension) type = real kind = kind_phys + active = (index_of_kinematic_buoyancy_flux_from_shoc_in_phy_f3d > 0) [phy_f3d(:,:,index_of_atmosphere_heat_diffusivity_from_shoc_in_phy_f3d)] standard_name = atmosphere_heat_diffusivity_from_shoc long_name = diffusivity for heat from the SHOC scheme @@ -5302,6 +5362,7 @@ dimensions = (horizontal_loop_extent,vertical_dimension) type = real kind = kind_phys + active = (index_of_atmosphere_heat_diffusivity_from_shoc_in_phy_f3d > 0) [phy_f3d(:,:,index_of_subgrid_scale_cloud_fraction_from_shoc_in_phy_f3d)] standard_name = subgrid_scale_cloud_fraction_from_shoc long_name = subgrid-scale cloud fraction from the SHOC scheme @@ -5309,6 +5370,7 @@ dimensions = (horizontal_loop_extent,vertical_dimension) type = real kind = kind_phys + active = (index_of_subgrid_scale_cloud_fraction_from_shoc_in_phy_f3d > 0) [phy_f3d(:,:,index_for_cloud_fraction_in_3d_arrays_for_microphysics)] standard_name = cloud_fraction_for_MG long_name = cloud fraction used by Morrison-Gettelman MP @@ -5316,6 +5378,7 @@ dimensions = (horizontal_loop_extent,vertical_dimension) type = real kind = kind_phys + active = (index_for_cloud_fraction_in_3d_arrays_for_microphysics > 0) [phy_f3d(:,:,index_for_cloud_liquid_water_effective_radius)] standard_name = effective_radius_of_stratiform_cloud_liquid_water_particle_in_um long_name = eff. radius of cloud liquid water particle in micrometer @@ -5323,6 +5386,7 @@ dimensions = (horizontal_loop_extent,vertical_dimension) type = real kind = kind_phys + active = (index_for_cloud_liquid_water_effective_radius > 0) [phy_f3d(:,:,index_for_ice_effective_radius)] standard_name = effective_radius_of_stratiform_cloud_ice_particle_in_um long_name = eff. radius of cloud ice water particle in micrometer @@ -5330,6 +5394,7 @@ dimensions = (horizontal_loop_extent,vertical_dimension) type = real kind = kind_phys + active = (index_for_ice_effective_radius > 0) [phy_f3d(:,:,index_for_rain_effective_radius)] standard_name = effective_radius_of_stratiform_cloud_rain_particle_in_um long_name = effective radius of cloud rain particle in micrometers @@ -5337,6 +5402,7 @@ dimensions = (horizontal_loop_extent,vertical_dimension) type = real kind = kind_phys + active = (index_for_rain_effective_radius > 0) [phy_f3d(:,:,index_for_snow_effective_radius)] standard_name = effective_radius_of_stratiform_cloud_snow_particle_in_um long_name = effective radius of cloud snow particle in micrometers @@ -5344,6 +5410,7 @@ dimensions = (horizontal_loop_extent,vertical_dimension) type = real kind = kind_phys + active = (index_for_snow_effective_radius > 0) [phy_f3d(:,:,index_for_graupel_effective_radius)] standard_name = effective_radius_of_stratiform_cloud_graupel_particle_in_um long_name = eff. radius of cloud graupel particle in micrometer @@ -5351,6 +5418,7 @@ dimensions = (horizontal_loop_extent,vertical_dimension) type = real kind = kind_phys + active = (index_for_graupel_effective_radius > 0) [forcet] standard_name = temperature_tendency_due_to_dynamics long_name = temperature tendency due to dynamics only @@ -8428,19 +8496,6 @@ dimensions = (horizontal_loop_extent,vertical_dimension) type = real kind = kind_phys -[h2o_coeff] - standard_name = number_of_coefficients_in_h2o_forcing_data - long_name = number of coefficients in h2o forcing data - units = index - dimensions = () - type = integer -[h2o_pres] - standard_name = natural_log_of_h2o_forcing_data_pressure_levels - long_name = natural log of h2o forcing data pressure levels - units = log(Pa) - dimensions = (vertical_dimension_of_h2o_forcing_data) - type = real - kind = kind_phys [hefac] standard_name = surface_upward_latent_heat_flux_reduction_factor long_name = surface upward latent heat flux reduction factor from canopy heat storage @@ -8639,18 +8694,6 @@ units = count dimensions = () type = integer -[levh2o] - standard_name = vertical_dimension_of_h2o_forcing_data - long_name = number of vertical layers in h2o forcing data - units = count - dimensions = () - type = integer -[levozp] - standard_name = vertical_dimension_of_ozone_forcing_data - long_name = number of vertical layers in ozone forcing data - units = count - dimensions = () - type = integer [lmk] standard_name = adjusted_vertical_layer_dimension_for_radiation long_name = adjusted number of vertical layers for radiation @@ -8862,25 +8905,12 @@ units = flag dimensions = (number_of_tracers_plus_one,2) type = logical -[oz_coeff] - standard_name = number_of_coefficients_in_ozone_forcing_data - long_name = number of coefficients in ozone forcing data - units = index - dimensions = () - type = integer [oz_coeffp5] standard_name = number_of_coefficients_in_ozone_forcing_data_plus_five long_name = number of coefficients in ozone forcing data plus five units = index dimensions = () type = integer -[oz_pres] - standard_name = natural_log_of_ozone_forcing_data_pressure_levels - long_name = natural log of ozone forcing data pressure levels - units = log(Pa) - dimensions = (vertical_dimension_of_ozone_forcing_data) - type = real - kind = kind_phys [phys_hydrostatic] standard_name = flag_for_hydrostatic_heating_from_physics long_name = flag for use of hydrostatic heating in physics