diff --git a/CMakeLists.txt b/CMakeLists.txt index 639030cfc..0af2ea9a7 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -65,7 +65,7 @@ target_link_libraries(fv3core PRIVATE fms) target_link_libraries(fv3core PRIVATE gfsphysics) target_link_libraries(fv3core PRIVATE ipd) -target_include_directories(fv3core PRIVATE ${ESMF_MOD}) +target_include_directories(fv3core PRIVATE atmos_cubed_sphere ${ESMF_MOD}) # end of fv3core diff --git a/atmos_cubed_sphere b/atmos_cubed_sphere index b3bd04f2d..27d062906 160000 --- a/atmos_cubed_sphere +++ b/atmos_cubed_sphere @@ -1 +1 @@ -Subproject commit b3bd04f2d80f2adbb92016cce48f64addb05c0f7 +Subproject commit 27d0629067eb5c93ea5e5f518f42e5c4ee64f5e3 diff --git a/atmos_model.F90 b/atmos_model.F90 index c024ea295..8637ed838 100644 --- a/atmos_model.F90 +++ b/atmos_model.F90 @@ -78,7 +78,7 @@ module atmos_model_mod use atmosphere_mod, only: atmosphere_scalar_field_halo use atmosphere_mod, only: atmosphere_get_bottom_layer use atmosphere_mod, only: set_atmosphere_pelist -use atmosphere_mod, only: Atm, mytile +use atmosphere_mod, only: Atm, mygrid use block_control_mod, only: block_control_type, define_blocks_packed use DYCORE_typedefs, only: DYCORE_data_type, DYCORE_diag_type #ifdef CCPP @@ -336,6 +336,28 @@ subroutine update_atmos_radiation_physics (Atmos) ! print *,'in atmos_model, after assign_importdata, rc=',rc endif + ! Calculate total non-physics tendencies by substracting old IPD Stateout + ! variables from new/updated IPD Statein variables (gives the tendencies + ! due to anything else than physics) + if (IPD_Control%ldiag3d) then + do nb = 1,Atm_block%nblks + IPD_Data(nb)%Intdiag%du3dt(:,:,8) = IPD_Data(nb)%Intdiag%du3dt(:,:,8) & + + (IPD_Data(nb)%Statein%ugrs - IPD_Data(nb)%Stateout%gu0) + IPD_Data(nb)%Intdiag%dv3dt(:,:,8) = IPD_Data(nb)%Intdiag%dv3dt(:,:,8) & + + (IPD_Data(nb)%Statein%vgrs - IPD_Data(nb)%Stateout%gv0) + IPD_Data(nb)%Intdiag%dt3dt(:,:,11) = IPD_Data(nb)%Intdiag%dt3dt(:,:,11) & + + (IPD_Data(nb)%Statein%tgrs - IPD_Data(nb)%Stateout%gt0) + enddo + if (IPD_Control%qdiag3d) then + do nb = 1,Atm_block%nblks + IPD_Data(nb)%Intdiag%dq3dt(:,:,12) = IPD_Data(nb)%Intdiag%dq3dt(:,:,12) & + + (IPD_Data(nb)%Statein%qgrs(:,:,IPD_Control%ntqv) - IPD_Data(nb)%Stateout%gq0(:,:,IPD_Control%ntqv)) + IPD_Data(nb)%Intdiag%dq3dt(:,:,13) = IPD_Data(nb)%Intdiag%dq3dt(:,:,13) & + + (IPD_Data(nb)%Statein%qgrs(:,:,IPD_Control%ntoz) - IPD_Data(nb)%Stateout%gq0(:,:,IPD_Control%ntoz)) + enddo + endif + endif + call mpp_clock_end(setupClock) if (mpp_pe() == mpp_root_pe() .and. debug) write(6,*) "radiation driver" @@ -466,7 +488,7 @@ subroutine atmos_model_init (Atmos, Time_init, Time, Time_step) integer :: bdat(8), cdat(8) integer :: ntracers, maxhf, maxh character(len=32), allocatable, target :: tracer_names(:) - integer :: nthrds + integer :: nthrds, nb !----------------------------------------------------------------------- @@ -604,8 +626,8 @@ subroutine atmos_model_init (Atmos, Time_init, Time, Time_step) Init_parm%area => Atmos%area Init_parm%tracer_names => tracer_names #ifdef CCPP - Init_parm%restart = Atm(mytile)%flagstruct%warm_start - Init_parm%hydrostatic = Atm(mytile)%flagstruct%hydrostatic + Init_parm%restart = Atm(mygrid)%flagstruct%warm_start + Init_parm%hydrostatic = Atm(mygrid)%flagstruct%hydrostatic #endif #ifdef INTERNAL_FILE_NML @@ -633,17 +655,6 @@ subroutine atmos_model_init (Atmos, Time_init, Time, Time_step) if(IPD_Control%me == IPD_Control%master) print *,'do_skeb=',IPD_Control%do_skeb end if -#ifdef CCPP - ! Initialize the CCPP framework - call CCPP_step (step="init", nblks=Atm_block%nblks, ierr=ierr) - if (ierr/=0) call mpp_error(FATAL, 'Call to CCPP init step failed') - ! Doing the init here requires logic in thompson aerosol init if no aerosol - ! profiles are specified and internal profiles are calculated, because these - ! require temperature/geopotential etc which are not yet set. Sim. for RUC LSM. - call CCPP_step (step="physics_init", nblks=Atm_block%nblks, ierr=ierr) - if (ierr/=0) call mpp_error(FATAL, 'Call to CCPP physics_init step failed') -#endif - Atmos%Diag => IPD_Diag if (IPD_Control%do_sfcperts) then @@ -677,7 +688,7 @@ subroutine atmos_model_init (Atmos, Time_init, Time, Time_step) endif endif - Atm(mytile)%flagstruct%do_skeb = IPD_Control%do_skeb + Atm(mygrid)%flagstruct%do_skeb = IPD_Control%do_skeb ! initialize the IAU module call iau_initialize (IPD_Control,IAU_data,Init_parm) @@ -698,11 +709,35 @@ subroutine atmos_model_init (Atmos, Time_init, Time, Time_step) call FV3GFS_diag_register (IPD_Diag, Time, Atm_block, IPD_Control, Atmos%lon, Atmos%lat, Atmos%axes) call IPD_initialize_rst (IPD_Control, IPD_Data, IPD_Diag, IPD_Restart, Init_parm) #ifdef CCPP - call FV3GFS_restart_read (IPD_Data, IPD_Restart, Atm_block, IPD_Control, Atmos%domain, Atm(mytile)%flagstruct%warm_start) + call FV3GFS_restart_read (IPD_Data, IPD_Restart, Atm_block, IPD_Control, Atmos%domain, Atm(mygrid)%flagstruct%warm_start) #else call FV3GFS_restart_read (IPD_Data, IPD_Restart, Atm_block, IPD_Control, Atmos%domain) #endif + ! Populate the IPD_Data%Statein container with the prognostic state + ! in Atm_block, which contains the initial conditions/restart data. + call atmos_phys_driver_statein (IPD_data, Atm_block, flip_vc) + + ! When asked to calculate 3-dim. tendencies, set Stateout variables to + ! Statein variables here in order to capture the first call to dycore + if (IPD_Control%ldiag3d) then + do nb = 1,Atm_block%nblks + IPD_Data(nb)%Stateout%gu0 = IPD_Data(nb)%Statein%ugrs + IPD_Data(nb)%Stateout%gv0 = IPD_Data(nb)%Statein%vgrs + IPD_Data(nb)%Stateout%gt0 = IPD_Data(nb)%Statein%tgrs + IPD_Data(nb)%Stateout%gq0 = IPD_Data(nb)%Statein%qgrs + enddo + endif + +#ifdef CCPP + ! Initialize the CCPP framework + call CCPP_step (step="init", nblks=Atm_block%nblks, ierr=ierr) + if (ierr/=0) call mpp_error(FATAL, 'Call to CCPP init step failed') + ! Initialize the CCPP physics + call CCPP_step (step="physics_init", nblks=Atm_block%nblks, ierr=ierr) + if (ierr/=0) call mpp_error(FATAL, 'Call to CCPP physics_init step failed') +#endif + !--- set the initial diagnostic timestamp diag_time = Time if (output_1st_tstep_rst) then @@ -1456,7 +1491,7 @@ subroutine update_atmos_chemistry(state, rc) ib = i + Atm_block%isc - 1 nb = Atm_block%blkno(ib,jb) ix = Atm_block%ixp(ib,jb) - hpbl(i,j) = IPD_Data(nb)%IntDiag%hpbl(ix) + hpbl(i,j) = IPD_Data(nb)%Tbd%hpbl(ix) area(i,j) = IPD_Data(nb)%Grid%area(ix) stype(i,j) = IPD_Data(nb)%Sfcprop%stype(ix) rainc(i,j) = IPD_Data(nb)%Coupling%rainc_cpl(ix) diff --git a/ccpp/config/ccpp_prebuild_config.py b/ccpp/config/ccpp_prebuild_config.py index d30d8d1e7..cb9a0ade4 100755 --- a/ccpp/config/ccpp_prebuild_config.py +++ b/ccpp/config/ccpp_prebuild_config.py @@ -204,118 +204,117 @@ ] # Add all physics scheme files relative to basedir -SCHEME_FILES = { +SCHEME_FILES = [ # Relative path to source (from where ccpp_prebuild.py is called) : [ list of physics sets in which scheme may be called ]; # current restrictions are that each scheme can only belong to one physics set, and all schemes within one group in the # suite definition file have to belong to the same physics set - 'FV3/ccpp/physics/physics/GFS_DCNV_generic.F90' : [ 'slow_physics' ], - 'FV3/ccpp/physics/physics/GFS_GWD_generic.F90' : [ 'slow_physics' ], - 'FV3/ccpp/physics/physics/GFS_MP_generic.F90' : [ 'slow_physics' ], - 'FV3/ccpp/physics/physics/GFS_PBL_generic.F90' : [ 'slow_physics' ], - 'FV3/ccpp/physics/physics/GFS_SCNV_generic.F90' : [ 'slow_physics' ], - 'FV3/ccpp/physics/physics/GFS_debug.F90' : [ 'slow_physics' ], - 'FV3/ccpp/physics/physics/GFS_phys_time_vary.fv3.F90' : [ 'slow_physics' ], - 'FV3/ccpp/physics/physics/GFS_rad_time_vary.fv3.F90' : [ 'slow_physics' ], - 'FV3/ccpp/physics/physics/GFS_rrtmg_post.F90' : [ 'slow_physics' ], - 'FV3/ccpp/physics/physics/GFS_rrtmg_pre.F90' : [ 'slow_physics' ], - 'FV3/ccpp/physics/physics/GFS_rrtmg_setup.F90' : [ 'slow_physics' ], - 'FV3/ccpp/physics/physics/GFS_stochastics.F90' : [ 'slow_physics' ], - 'FV3/ccpp/physics/physics/GFS_suite_interstitial.F90' : [ 'slow_physics' ], - 'FV3/ccpp/physics/physics/GFS_surface_generic.F90' : [ 'slow_physics' ], - 'FV3/ccpp/physics/physics/GFS_surface_composites.F90' : [ 'slow_physics' ], - 'FV3/ccpp/physics/physics/GFS_surface_loop_control.F90' : [ 'slow_physics' ], - 'FV3/ccpp/physics/physics/GFS_time_vary_pre.fv3.F90' : [ 'slow_physics' ], - 'FV3/ccpp/physics/physics/cires_ugwp.F90' : [ 'slow_physics' ], - 'FV3/ccpp/physics/physics/cires_ugwp_post.F90' : [ 'slow_physics' ], - 'FV3/ccpp/physics/physics/cnvc90.f' : [ 'slow_physics' ], - 'FV3/ccpp/physics/physics/cs_conv.F90' : [ 'slow_physics' ], - 'FV3/ccpp/physics/physics/cs_conv_aw_adj.F90' : [ 'slow_physics' ], - 'FV3/ccpp/physics/physics/cu_ntiedtke_pre.F90' : [ 'slow_physics' ], - 'FV3/ccpp/physics/physics/cu_ntiedtke.F90' : [ 'slow_physics' ], - 'FV3/ccpp/physics/physics/cu_ntiedtke_post.F90' : [ 'slow_physics' ], - 'FV3/ccpp/physics/physics/dcyc2.f' : [ 'slow_physics' ], - 'FV3/ccpp/physics/physics/drag_suite.F90' : [ 'slow_physics' ], - 'FV3/ccpp/physics/physics/gcm_shoc.F90' : [ 'slow_physics' ], - 'FV3/ccpp/physics/physics/get_prs_fv3.F90' : [ 'slow_physics' ], - 'FV3/ccpp/physics/physics/gfdl_cloud_microphys.F90' : [ 'slow_physics' ], - 'FV3/ccpp/physics/physics/gfdl_fv_sat_adj.F90' : [ 'fast_physics' ], - 'FV3/ccpp/physics/physics/gscond.f' : [ 'slow_physics' ], - 'FV3/ccpp/physics/physics/gwdc.f' : [ 'slow_physics' ], - 'FV3/ccpp/physics/physics/gwdps.f' : [ 'slow_physics' ], - 'FV3/ccpp/physics/physics/h2ophys.f' : [ 'slow_physics' ], - 'FV3/ccpp/physics/physics/samfdeepcnv.f' : [ 'slow_physics' ], - 'FV3/ccpp/physics/physics/samfshalcnv.f' : [ 'slow_physics' ], - 'FV3/ccpp/physics/physics/sascnvn.F' : [ 'slow_physics' ], - 'FV3/ccpp/physics/physics/shalcnv.F' : [ 'slow_physics' ], - 'FV3/ccpp/physics/physics/maximum_hourly_diagnostics.F90' : [ 'slow_physics' ], - 'FV3/ccpp/physics/physics/m_micro.F90' : [ 'slow_physics' ], - 'FV3/ccpp/physics/physics/m_micro_interstitial.F90' : [ 'slow_physics' ], - 'FV3/ccpp/physics/physics/cu_gf_driver_pre.F90' : [ 'slow_physics' ], - 'FV3/ccpp/physics/physics/cu_gf_driver.F90' : [ 'slow_physics' ], - 'FV3/ccpp/physics/physics/cu_gf_driver_post.F90' : [ 'slow_physics' ], - 'FV3/ccpp/physics/physics/moninedmf.f' : [ 'slow_physics' ], - 'FV3/ccpp/physics/physics/moninedmf_hafs.f' : [ 'slow_physics' ], - 'FV3/ccpp/physics/physics/moninshoc.f' : [ 'slow_physics' ], - 'FV3/ccpp/physics/physics/satmedmfvdif.F' : [ 'slow_physics' ], - 'FV3/ccpp/physics/physics/satmedmfvdifq.F' : [ 'slow_physics' ], - 'FV3/ccpp/physics/physics/shinhongvdif.F90' : [ 'slow_physics' ], - 'FV3/ccpp/physics/physics/ysuvdif.F90' : [ 'slow_physics' ], - 'FV3/ccpp/physics/physics/module_MYNNPBL_wrapper.F90' : [ 'slow_physics' ], - 'FV3/ccpp/physics/physics/module_MYNNSFC_wrapper.F90' : [ 'slow_physics' ], - 'FV3/ccpp/physics/physics/module_MYNNrad_pre.F90' : [ 'slow_physics' ], - 'FV3/ccpp/physics/physics/module_MYNNrad_post.F90' : [ 'slow_physics' ], - 'FV3/ccpp/physics/physics/module_MYJSFC_wrapper.F90' : [ 'slow_physics' ], - 'FV3/ccpp/physics/physics/module_MYJPBL_wrapper.F90' : [ 'slow_physics' ], - 'FV3/ccpp/physics/physics/mp_thompson_pre.F90' : [ 'slow_physics' ], - 'FV3/ccpp/physics/physics/mp_thompson.F90' : [ 'slow_physics' ], - 'FV3/ccpp/physics/physics/mp_thompson_post.F90' : [ 'slow_physics' ], - 'FV3/ccpp/physics/physics/ozphys.f' : [ 'slow_physics' ], - 'FV3/ccpp/physics/physics/ozphys_2015.f' : [ 'slow_physics' ], - 'FV3/ccpp/physics/physics/precpd.f' : [ 'slow_physics' ], - 'FV3/ccpp/physics/physics/radlw_main.f' : [ 'slow_physics' ], - 'FV3/ccpp/physics/physics/radsw_main.f' : [ 'slow_physics' ], - 'FV3/ccpp/physics/physics/rascnv.F90' : [ 'slow_physics' ], - 'FV3/ccpp/physics/physics/rayleigh_damp.f' : [ 'slow_physics' ], - 'FV3/ccpp/physics/physics/rrtmg_lw_post.F90' : [ 'slow_physics' ], - 'FV3/ccpp/physics/physics/rrtmg_lw_pre.F90' : [ 'slow_physics' ], - 'FV3/ccpp/physics/physics/rrtmg_sw_post.F90' : [ 'slow_physics' ], - 'FV3/ccpp/physics/physics/rrtmg_sw_pre.F90' : [ 'slow_physics' ], - 'FV3/ccpp/physics/physics/sfc_diag.f' : [ 'slow_physics' ], - 'FV3/ccpp/physics/physics/sfc_diag_post.F90' : [ 'slow_physics' ], - 'FV3/ccpp/physics/physics/sfc_drv_ruc.F90' : [ 'slow_physics' ], - 'FV3/ccpp/physics/physics/lsm_ruc_sfc_sice_interstitial.F90' : [ 'slow_physics' ], - 'FV3/ccpp/physics/physics/sfc_cice.f' : [ 'slow_physics' ], - 'FV3/ccpp/physics/physics/sfc_diff.f' : [ 'slow_physics' ], - 'FV3/ccpp/physics/physics/sfc_drv.f' : [ 'slow_physics' ], - 'FV3/ccpp/physics/physics/sfc_noahmp_drv.f' : [ 'slow_physics' ], - 'FV3/ccpp/physics/physics/sfc_nst.f' : [ 'slow_physics' ], - 'FV3/ccpp/physics/physics/sfc_ocean.F' : [ 'slow_physics' ], - 'FV3/ccpp/physics/physics/sfc_sice.f' : [ 'slow_physics' ], - # HAFS FER_HIRES - 'FV3/ccpp/physics/physics/mp_fer_hires.F90' : [ 'slow_physics' ], - # for testing the and sections - 'FV3/ccpp/physics/physics/GFS_suite_init_finalize_test.F90' : [ 'slow_physics' ], + 'FV3/ccpp/physics/physics/GFS_DCNV_generic.F90', + 'FV3/ccpp/physics/physics/GFS_GWD_generic.F90', + 'FV3/ccpp/physics/physics/GFS_MP_generic.F90', + 'FV3/ccpp/physics/physics/GFS_PBL_generic.F90', + 'FV3/ccpp/physics/physics/GFS_SCNV_generic.F90', + 'FV3/ccpp/physics/physics/GFS_debug.F90', + 'FV3/ccpp/physics/physics/GFS_phys_time_vary.fv3.F90', + 'FV3/ccpp/physics/physics/GFS_rad_time_vary.fv3.F90', + 'FV3/ccpp/physics/physics/GFS_rrtmg_post.F90', + 'FV3/ccpp/physics/physics/GFS_rrtmg_pre.F90', + 'FV3/ccpp/physics/physics/GFS_rrtmg_setup.F90', + 'FV3/ccpp/physics/physics/GFS_stochastics.F90', + 'FV3/ccpp/physics/physics/GFS_suite_interstitial.F90', + 'FV3/ccpp/physics/physics/GFS_surface_generic.F90', + 'FV3/ccpp/physics/physics/GFS_surface_composites.F90', + 'FV3/ccpp/physics/physics/GFS_surface_loop_control.F90', + 'FV3/ccpp/physics/physics/GFS_time_vary_pre.fv3.F90', + 'FV3/ccpp/physics/physics/cires_ugwp.F90', + 'FV3/ccpp/physics/physics/cires_ugwp_post.F90', + 'FV3/ccpp/physics/physics/cnvc90.f', + 'FV3/ccpp/physics/physics/cs_conv.F90', + 'FV3/ccpp/physics/physics/cs_conv_aw_adj.F90', + 'FV3/ccpp/physics/physics/cu_ntiedtke_pre.F90', + 'FV3/ccpp/physics/physics/cu_ntiedtke.F90', + 'FV3/ccpp/physics/physics/cu_ntiedtke_post.F90', + 'FV3/ccpp/physics/physics/dcyc2.f', + 'FV3/ccpp/physics/physics/drag_suite.F90', + 'FV3/ccpp/physics/physics/gcm_shoc.F90', + 'FV3/ccpp/physics/physics/get_prs_fv3.F90', + 'FV3/ccpp/physics/physics/gfdl_cloud_microphys.F90', + 'FV3/ccpp/physics/physics/gfdl_fv_sat_adj.F90', + 'FV3/ccpp/physics/physics/gscond.f', + 'FV3/ccpp/physics/physics/gwdc.f', + 'FV3/ccpp/physics/physics/gwdps.f', + 'FV3/ccpp/physics/physics/h2ophys.f', + 'FV3/ccpp/physics/physics/samfdeepcnv.f', + 'FV3/ccpp/physics/physics/samfshalcnv.f', + 'FV3/ccpp/physics/physics/sascnvn.F', + 'FV3/ccpp/physics/physics/shalcnv.F', + 'FV3/ccpp/physics/physics/maximum_hourly_diagnostics.F90', + 'FV3/ccpp/physics/physics/m_micro.F90', + 'FV3/ccpp/physics/physics/m_micro_interstitial.F90', + 'FV3/ccpp/physics/physics/cu_gf_driver_pre.F90', + 'FV3/ccpp/physics/physics/cu_gf_driver.F90', + 'FV3/ccpp/physics/physics/cu_gf_driver_post.F90', + 'FV3/ccpp/physics/physics/moninedmf.f', + 'FV3/ccpp/physics/physics/moninedmf_hafs.f', + 'FV3/ccpp/physics/physics/moninshoc.f', + 'FV3/ccpp/physics/physics/satmedmfvdif.F', + 'FV3/ccpp/physics/physics/satmedmfvdifq.F', + 'FV3/ccpp/physics/physics/shinhongvdif.F90', + 'FV3/ccpp/physics/physics/ysuvdif.F90', + 'FV3/ccpp/physics/physics/module_MYNNPBL_wrapper.F90', + 'FV3/ccpp/physics/physics/module_MYNNSFC_wrapper.F90', + 'FV3/ccpp/physics/physics/module_SGSCloud_RadPre.F90', + 'FV3/ccpp/physics/physics/module_SGSCloud_RadPost.F90', + 'FV3/ccpp/physics/physics/module_MYJSFC_wrapper.F90', + 'FV3/ccpp/physics/physics/module_MYJPBL_wrapper.F90', + 'FV3/ccpp/physics/physics/mp_thompson_pre.F90', + 'FV3/ccpp/physics/physics/mp_thompson.F90', + 'FV3/ccpp/physics/physics/mp_thompson_post.F90', + 'FV3/ccpp/physics/physics/ozphys.f', + 'FV3/ccpp/physics/physics/ozphys_2015.f', + 'FV3/ccpp/physics/physics/precpd.f', + 'FV3/ccpp/physics/physics/phys_tend.F90', + 'FV3/ccpp/physics/physics/radlw_main.f', + 'FV3/ccpp/physics/physics/radsw_main.f', + 'FV3/ccpp/physics/physics/rascnv.F90', + 'FV3/ccpp/physics/physics/rayleigh_damp.f', + 'FV3/ccpp/physics/physics/rrtmg_lw_post.F90', + 'FV3/ccpp/physics/physics/rrtmg_lw_pre.F90', + 'FV3/ccpp/physics/physics/rrtmg_sw_post.F90', + 'FV3/ccpp/physics/physics/rrtmg_sw_pre.F90', + 'FV3/ccpp/physics/physics/sfc_diag.f', + 'FV3/ccpp/physics/physics/sfc_diag_post.F90', + 'FV3/ccpp/physics/physics/sfc_drv_ruc.F90', + 'FV3/ccpp/physics/physics/lsm_ruc_sfc_sice_interstitial.F90', + 'FV3/ccpp/physics/physics/sfc_cice.f', + 'FV3/ccpp/physics/physics/sfc_diff.f', + 'FV3/ccpp/physics/physics/sfc_drv.f', + 'FV3/ccpp/physics/physics/sfc_noahmp_drv.f', + 'FV3/ccpp/physics/physics/sfc_nst.f', + 'FV3/ccpp/physics/physics/sfc_ocean.F', + 'FV3/ccpp/physics/physics/sfc_sice.f', + # HAFSFER_HIRES + 'FV3/ccpp/physics/physics/mp_fer_hires.F90', # RRTMGP - 'FV3/ccpp/physics/physics/rrtmg_lw_cloud_optics.F90' : [ 'slow_physics' ], - 'FV3/ccpp/physics/physics/rrtmg_sw_cloud_optics.F90' : [ 'slow_physics' ], - 'FV3/ccpp/physics/physics/rrtmgp_aux.F90' : [ 'slow_physics' ], - 'FV3/ccpp/physics/physics/rrtmgp_lw_gas_optics.F90' : [ 'slow_physics' ], - 'FV3/ccpp/physics/physics/rrtmgp_lw_cloud_optics.F90' : [ 'slow_physics' ], - 'FV3/ccpp/physics/physics/rrtmgp_sw_gas_optics.F90' : [ 'slow_physics' ], - 'FV3/ccpp/physics/physics/rrtmgp_sw_cloud_optics.F90' : [ 'slow_physics' ], - 'FV3/ccpp/physics/physics/rrtmgp_sw_aerosol_optics.F90' : [ 'slow_physics' ], - 'FV3/ccpp/physics/physics/rrtmgp_lw_rte.F90' : [ 'slow_physics' ], - 'FV3/ccpp/physics/physics/rrtmgp_lw_cloud_sampling.F90' : [ 'slow_physics' ], - 'FV3/ccpp/physics/physics/rrtmgp_sw_rte.F90' : [ 'slow_physics' ], - 'FV3/ccpp/physics/physics/rrtmgp_sw_cloud_sampling.F90' : [ 'slow_physics' ], - 'FV3/ccpp/physics/physics/rrtmgp_lw_aerosol_optics.F90' : [ 'slow_physics' ], - 'FV3/ccpp/physics/physics/GFS_rrtmgp_setup.F90' : [ 'slow_physics' ], - 'FV3/ccpp/physics/physics/GFS_rrtmgp_pre.F90' : [ 'slow_physics' ], - 'FV3/ccpp/physics/physics/rrtmgp_lw_pre.F90' : [ 'slow_physics' ], - 'FV3/ccpp/physics/physics/GFS_rrtmgp_sw_pre.F90' : [ 'slow_physics' ], - 'FV3/ccpp/physics/physics/GFS_rrtmgp_lw_post.F90' : [ 'slow_physics' ], - 'FV3/ccpp/physics/physics/GFS_rrtmgp_sw_post.F90' : [ 'slow_physics' ], - } + 'FV3/ccpp/physics/physics/rrtmg_lw_cloud_optics.F90', + 'FV3/ccpp/physics/physics/rrtmg_sw_cloud_optics.F90', + 'FV3/ccpp/physics/physics/rrtmgp_aux.F90', + 'FV3/ccpp/physics/physics/rrtmgp_lw_gas_optics.F90', + 'FV3/ccpp/physics/physics/rrtmgp_lw_cloud_optics.F90', + 'FV3/ccpp/physics/physics/rrtmgp_sw_gas_optics.F90', + 'FV3/ccpp/physics/physics/rrtmgp_sw_cloud_optics.F90', + 'FV3/ccpp/physics/physics/rrtmgp_sw_aerosol_optics.F90', + 'FV3/ccpp/physics/physics/rrtmgp_lw_rte.F90', + 'FV3/ccpp/physics/physics/rrtmgp_lw_cloud_sampling.F90', + 'FV3/ccpp/physics/physics/rrtmgp_sw_rte.F90', + 'FV3/ccpp/physics/physics/rrtmgp_sw_cloud_sampling.F90', + 'FV3/ccpp/physics/physics/rrtmgp_lw_aerosol_optics.F90', + 'FV3/ccpp/physics/physics/GFS_rrtmgp_setup.F90', + 'FV3/ccpp/physics/physics/GFS_rrtmgp_pre.F90', + 'FV3/ccpp/physics/physics/rrtmgp_lw_pre.F90', + 'FV3/ccpp/physics/physics/GFS_rrtmgp_sw_pre.F90', + 'FV3/ccpp/physics/physics/GFS_rrtmgp_lw_post.F90', + 'FV3/ccpp/physics/physics/GFS_rrtmgp_sw_post.F90', + ] # Default build dir, relative to current working directory, # if not specified as command-line argument @@ -358,33 +357,16 @@ 'rrtmgp_sw_rte' : { 'rrtmgp_sw_rte_run' : [ 'components_of_surface_downward_shortwave_fluxes', - 'sw_fluxes_sfc', - 'sw_fluxes_toa', ], }, 'GFS_rrtmgp_sw_post' : { - 'GFS_rrtmgp_sw_post_run' : [ - 'components_of_surface_downward_shortwave_fluxes', - 'sw_fluxes_sfc', - 'sw_fluxes_toa', - ], + 'GFS_rrtmgp_sw_post_run' : 'none', }, 'rrtmgp_lw_rte' : { - 'rrtmgp_lw_rte_run' : [ - 'lw_fluxes_sfc', - 'lw_fluxes_toa', - ], + 'rrtmgp_lw_rte_run' : 'none', }, 'GFS_rrtmgp_lw_post' : { - 'GFS_rrtmgp_lw_post_run' : [ - 'lw_fluxes_sfc', - 'lw_fluxes_toa', - ], - }, - 'GFS_rrtmgp_post' : { - 'GFS_rrtmgp_post_run' : [ - 'components_of_surface_downward_shortwave_fluxes', - ], + 'GFS_rrtmgp_lw_post_run' : 'none', }, 'rrtmg_sw' : { 'rrtmg_sw_run' : [ @@ -415,10 +397,16 @@ }, 'mp_thompson' : { 'mp_thompson_init' : [ + 'cloud_droplet_number_concentration', 'water_friendly_aerosol_number_concentration', 'ice_friendly_aerosol_number_concentration', 'tendency_of_water_friendly_aerosols_at_surface', 'tendency_of_ice_friendly_aerosols_at_surface', + # DH* 2020-06-01: turn off calculation of effective radii, now done in GFS_rrtmg_pre + #'effective_radius_of_stratiform_cloud_liquid_water_particle_in_um', + #'effective_radius_of_stratiform_cloud_ice_particle_in_um', + #'effective_radius_of_stratiform_cloud_snow_particle_in_um', + # *DH 2020-06-01 ], 'mp_thompson_run' : [ 'cloud_droplet_number_concentration_updated_by_physics', @@ -426,18 +414,11 @@ 'ice_friendly_aerosol_number_concentration_updated_by_physics', 'tendency_of_water_friendly_aerosols_at_surface', 'tendency_of_ice_friendly_aerosols_at_surface', - 'mean_effective_radius_for_liquid_cloud', - 'mean_effective_radius_for_ice_cloud', - 'mean_effective_radius_for_snow_flake', - ], - }, - 'mp_thompson_pre' : { - 'mp_thompson_pre_run' : [ - 'cloud_droplet_number_concentration_updated_by_physics', - 'water_friendly_aerosol_number_concentration_updated_by_physics', - 'ice_friendly_aerosol_number_concentration_updated_by_physics', - 'tendency_of_water_friendly_aerosols_at_surface', - 'tendency_of_ice_friendly_aerosols_at_surface', + # DH* 2020-06-01: turn off calculation of effective radii, now done in GFS_rrtmg_pre + #'effective_radius_of_stratiform_cloud_liquid_water_particle_in_um', + #'effective_radius_of_stratiform_cloud_ice_particle_in_um', + #'effective_radius_of_stratiform_cloud_snow_particle_in_um', + # *DH 2020-06-01 ], }, 'mp_fer_hires' : { diff --git a/ccpp/framework b/ccpp/framework index a1fe9c109..5e648bb31 160000 --- a/ccpp/framework +++ b/ccpp/framework @@ -1 +1 @@ -Subproject commit a1fe9c1091f2122a8e748154a9ce79c3020468fd +Subproject commit 5e648bb3180c3e36942fca597534ad1276c8271f diff --git a/ccpp/physics b/ccpp/physics index 19998f0a6..898db7907 160000 --- a/ccpp/physics +++ b/ccpp/physics @@ -1 +1 @@ -Subproject commit 19998f0a6aa3d5e265ae0bd080a7cddf9f07a3c1 +Subproject commit 898db7907e75158869ca1603dd885693e71bcd72 diff --git a/ccpp/suites/suite_FV3_CPT_v0.xml b/ccpp/suites/suite_FV3_CPT_v0.xml index 097b77855..11c23d9cc 100644 --- a/ccpp/suites/suite_FV3_CPT_v0.xml +++ b/ccpp/suites/suite_FV3_CPT_v0.xml @@ -68,9 +68,9 @@ GFS_suite_stateout_update ozphys_2015 h2ophys - GFS_DCNV_generic_pre get_phi_fv3 GFS_suite_interstitial_3 + GFS_DCNV_generic_pre cs_conv_pre cs_conv cs_conv_post diff --git a/ccpp/suites/suite_FV3_GFS_2017.xml b/ccpp/suites/suite_FV3_GFS_2017.xml index add40d456..5a8438834 100644 --- a/ccpp/suites/suite_FV3_GFS_2017.xml +++ b/ccpp/suites/suite_FV3_GFS_2017.xml @@ -62,9 +62,9 @@ rayleigh_damp GFS_suite_stateout_update ozphys - GFS_DCNV_generic_pre get_phi_fv3 GFS_suite_interstitial_3 + GFS_DCNV_generic_pre samfdeepcnv GFS_DCNV_generic_post GFS_SCNV_generic_pre diff --git a/ccpp/suites/suite_FV3_GFS_2017_RRTMGP.xml b/ccpp/suites/suite_FV3_GFS_2017_RRTMGP.xml index 4748c0d14..2148b1159 100644 --- a/ccpp/suites/suite_FV3_GFS_2017_RRTMGP.xml +++ b/ccpp/suites/suite_FV3_GFS_2017_RRTMGP.xml @@ -69,9 +69,9 @@ rayleigh_damp GFS_suite_stateout_update ozphys - GFS_DCNV_generic_pre get_phi_fv3 GFS_suite_interstitial_3 + GFS_DCNV_generic_pre samfdeepcnv GFS_DCNV_generic_post GFS_SCNV_generic_pre diff --git a/ccpp/suites/suite_FV3_GFS_2017_coupled.xml b/ccpp/suites/suite_FV3_GFS_2017_coupled.xml index 274364fff..7502371a4 100644 --- a/ccpp/suites/suite_FV3_GFS_2017_coupled.xml +++ b/ccpp/suites/suite_FV3_GFS_2017_coupled.xml @@ -61,9 +61,9 @@ rayleigh_damp GFS_suite_stateout_update ozphys - GFS_DCNV_generic_pre get_phi_fv3 GFS_suite_interstitial_3 + GFS_DCNV_generic_pre samfdeepcnv GFS_DCNV_generic_post GFS_SCNV_generic_pre diff --git a/ccpp/suites/suite_FV3_GFS_2017_csawmg.xml b/ccpp/suites/suite_FV3_GFS_2017_csawmg.xml index b7115ae5b..9d944612a 100644 --- a/ccpp/suites/suite_FV3_GFS_2017_csawmg.xml +++ b/ccpp/suites/suite_FV3_GFS_2017_csawmg.xml @@ -63,9 +63,9 @@ GFS_suite_stateout_update ozphys_2015 h2ophys - GFS_DCNV_generic_pre get_phi_fv3 GFS_suite_interstitial_3 + GFS_DCNV_generic_pre cs_conv_pre cs_conv cs_conv_post diff --git a/ccpp/suites/suite_FV3_GFS_2017_csawmgshoc.xml b/ccpp/suites/suite_FV3_GFS_2017_csawmgshoc.xml index 949d1e596..cea2d08c5 100644 --- a/ccpp/suites/suite_FV3_GFS_2017_csawmgshoc.xml +++ b/ccpp/suites/suite_FV3_GFS_2017_csawmgshoc.xml @@ -63,9 +63,9 @@ GFS_suite_stateout_update ozphys_2015 h2ophys - GFS_DCNV_generic_pre get_phi_fv3 GFS_suite_interstitial_3 + GFS_DCNV_generic_pre shoc cs_conv_pre cs_conv diff --git a/ccpp/suites/suite_FV3_GFS_2017_fv3wam.xml b/ccpp/suites/suite_FV3_GFS_2017_fv3wam.xml new file mode 100644 index 000000000..89f21fd7c --- /dev/null +++ b/ccpp/suites/suite_FV3_GFS_2017_fv3wam.xml @@ -0,0 +1,86 @@ + + + + + + + GFS_time_vary_pre + GFS_rrtmg_setup + GFS_rad_time_vary + GFS_phys_time_vary + + + + + GFS_suite_interstitial_rad_reset + GFS_rrtmg_pre + rrtmg_sw_pre + rrtmg_sw + rrtmg_sw_post + rrtmg_lw_pre + rrtmg_lw + rrtmg_lw_post + GFS_rrtmg_post + + + + + GFS_suite_interstitial_phys_reset + GFS_suite_stateout_reset + get_prs_fv3 + GFS_suite_interstitial_1 + GFS_surface_generic_pre + GFS_surface_composites_pre + dcyc2t3 + GFS_surface_composites_inter + GFS_suite_interstitial_2 + + + + sfc_diff + GFS_surface_loop_control_part1 + sfc_ocean + lsm_noah + sfc_sice + GFS_surface_loop_control_part2 + + + + GFS_surface_composites_post + sfc_diag + sfc_diag_post + GFS_surface_generic_post + GFS_PBL_generic_pre + hedmf + GFS_PBL_generic_post + GFS_GWD_generic_pre + cires_ugwp + cires_ugwp_post + GFS_GWD_generic_post + rayleigh_damp + GFS_suite_stateout_update + ozphys + GFS_DCNV_generic_pre + get_phi_fv3 + GFS_suite_interstitial_3 + samfdeepcnv + GFS_DCNV_generic_post + GFS_SCNV_generic_pre + samfshalcnv + GFS_SCNV_generic_post + GFS_suite_interstitial_4 + cnvc90 + GFS_MP_generic_pre + zhaocarr_gscond + zhaocarr_precpd + GFS_MP_generic_post + maximum_hourly_diagnostics + + + + + GFS_stochastics + + + + diff --git a/ccpp/suites/suite_FV3_GFS_2017_gfdlmp.xml b/ccpp/suites/suite_FV3_GFS_2017_gfdlmp.xml index aaaf65586..275a30716 100644 --- a/ccpp/suites/suite_FV3_GFS_2017_gfdlmp.xml +++ b/ccpp/suites/suite_FV3_GFS_2017_gfdlmp.xml @@ -67,9 +67,9 @@ rayleigh_damp GFS_suite_stateout_update ozphys - GFS_DCNV_generic_pre get_phi_fv3 GFS_suite_interstitial_3 + GFS_DCNV_generic_pre samfdeepcnv GFS_DCNV_generic_post GFS_SCNV_generic_pre diff --git a/ccpp/suites/suite_FV3_GFS_2017_gfdlmp_noahmp.xml b/ccpp/suites/suite_FV3_GFS_2017_gfdlmp_noahmp.xml index bf15b690d..d1c575b97 100644 --- a/ccpp/suites/suite_FV3_GFS_2017_gfdlmp_noahmp.xml +++ b/ccpp/suites/suite_FV3_GFS_2017_gfdlmp_noahmp.xml @@ -67,9 +67,9 @@ rayleigh_damp GFS_suite_stateout_update ozphys - GFS_DCNV_generic_pre get_phi_fv3 GFS_suite_interstitial_3 + GFS_DCNV_generic_pre samfdeepcnv GFS_DCNV_generic_post GFS_SCNV_generic_pre diff --git a/ccpp/suites/suite_FV3_GFS_2017_gfdlmp_regional.xml b/ccpp/suites/suite_FV3_GFS_2017_gfdlmp_regional.xml index a71c5cc9d..6b038f1f9 100644 --- a/ccpp/suites/suite_FV3_GFS_2017_gfdlmp_regional.xml +++ b/ccpp/suites/suite_FV3_GFS_2017_gfdlmp_regional.xml @@ -68,9 +68,9 @@ GFS_suite_stateout_update ozphys_2015 h2ophys - GFS_DCNV_generic_pre get_phi_fv3 GFS_suite_interstitial_3 + GFS_DCNV_generic_pre samfdeepcnv GFS_DCNV_generic_post GFS_SCNV_generic_pre diff --git a/ccpp/suites/suite_FV3_GFS_2017_gfdlmp_regional_c768.xml b/ccpp/suites/suite_FV3_GFS_2017_gfdlmp_regional_c768.xml index 1089022ea..f6515c034 100644 --- a/ccpp/suites/suite_FV3_GFS_2017_gfdlmp_regional_c768.xml +++ b/ccpp/suites/suite_FV3_GFS_2017_gfdlmp_regional_c768.xml @@ -68,9 +68,9 @@ GFS_suite_stateout_update ozphys_2015 h2ophys - GFS_DCNV_generic_pre get_phi_fv3 GFS_suite_interstitial_3 + GFS_DCNV_generic_pre samfdeepcnv GFS_DCNV_generic_post GFS_SCNV_generic_pre diff --git a/ccpp/suites/suite_FV3_GFS_2017_h2ophys.xml b/ccpp/suites/suite_FV3_GFS_2017_h2ophys.xml index 5d1ecf2d0..a0ad9e927 100644 --- a/ccpp/suites/suite_FV3_GFS_2017_h2ophys.xml +++ b/ccpp/suites/suite_FV3_GFS_2017_h2ophys.xml @@ -63,9 +63,9 @@ GFS_suite_stateout_update ozphys h2ophys - GFS_DCNV_generic_pre get_phi_fv3 GFS_suite_interstitial_3 + GFS_DCNV_generic_pre samfdeepcnv GFS_DCNV_generic_post GFS_SCNV_generic_pre diff --git a/ccpp/suites/suite_FV3_GFS_2017_myj.xml b/ccpp/suites/suite_FV3_GFS_2017_myj.xml index d4c98480d..27ffd3411 100644 --- a/ccpp/suites/suite_FV3_GFS_2017_myj.xml +++ b/ccpp/suites/suite_FV3_GFS_2017_myj.xml @@ -68,9 +68,9 @@ GFS_suite_stateout_update ozphys_2015 h2ophys - GFS_DCNV_generic_pre get_phi_fv3 GFS_suite_interstitial_3 + GFS_DCNV_generic_pre samfdeepcnv GFS_DCNV_generic_post GFS_SCNV_generic_pre diff --git a/ccpp/suites/suite_FV3_GFS_2017_ntiedtke.xml b/ccpp/suites/suite_FV3_GFS_2017_ntiedtke.xml index 7f465e609..124885690 100644 --- a/ccpp/suites/suite_FV3_GFS_2017_ntiedtke.xml +++ b/ccpp/suites/suite_FV3_GFS_2017_ntiedtke.xml @@ -67,9 +67,9 @@ rayleigh_damp GFS_suite_stateout_update ozphys - GFS_DCNV_generic_pre get_phi_fv3 GFS_suite_interstitial_3 + GFS_DCNV_generic_pre cu_ntiedtke_pre cu_ntiedtke GFS_DCNV_generic_post diff --git a/ccpp/suites/suite_FV3_GFS_2017_ozphys_2015.xml b/ccpp/suites/suite_FV3_GFS_2017_ozphys_2015.xml index 7557ce7eb..de32479b5 100644 --- a/ccpp/suites/suite_FV3_GFS_2017_ozphys_2015.xml +++ b/ccpp/suites/suite_FV3_GFS_2017_ozphys_2015.xml @@ -62,9 +62,9 @@ rayleigh_damp GFS_suite_stateout_update ozphys_2015 - GFS_DCNV_generic_pre get_phi_fv3 GFS_suite_interstitial_3 + GFS_DCNV_generic_pre samfdeepcnv GFS_DCNV_generic_post GFS_SCNV_generic_pre diff --git a/ccpp/suites/suite_FV3_GFS_2017_sas.xml b/ccpp/suites/suite_FV3_GFS_2017_sas.xml index 1feed83bd..5f307c981 100644 --- a/ccpp/suites/suite_FV3_GFS_2017_sas.xml +++ b/ccpp/suites/suite_FV3_GFS_2017_sas.xml @@ -67,9 +67,9 @@ rayleigh_damp GFS_suite_stateout_update ozphys - GFS_DCNV_generic_pre get_phi_fv3 GFS_suite_interstitial_3 + GFS_DCNV_generic_pre sascnvn GFS_DCNV_generic_post GFS_SCNV_generic_pre diff --git a/ccpp/suites/suite_FV3_GFS_2017_satmedmf.xml b/ccpp/suites/suite_FV3_GFS_2017_satmedmf.xml index 559617648..1bc076ba3 100644 --- a/ccpp/suites/suite_FV3_GFS_2017_satmedmf.xml +++ b/ccpp/suites/suite_FV3_GFS_2017_satmedmf.xml @@ -62,9 +62,9 @@ rayleigh_damp GFS_suite_stateout_update ozphys - GFS_DCNV_generic_pre get_phi_fv3 GFS_suite_interstitial_3 + GFS_DCNV_generic_pre samfdeepcnv GFS_DCNV_generic_post GFS_SCNV_generic_pre diff --git a/ccpp/suites/suite_FV3_GFS_2017_satmedmf_coupled.xml b/ccpp/suites/suite_FV3_GFS_2017_satmedmf_coupled.xml index 6a7afa076..91ac58b60 100644 --- a/ccpp/suites/suite_FV3_GFS_2017_satmedmf_coupled.xml +++ b/ccpp/suites/suite_FV3_GFS_2017_satmedmf_coupled.xml @@ -61,9 +61,9 @@ rayleigh_damp GFS_suite_stateout_update ozphys - GFS_DCNV_generic_pre get_phi_fv3 GFS_suite_interstitial_3 + GFS_DCNV_generic_pre samfdeepcnv GFS_DCNV_generic_post GFS_SCNV_generic_pre diff --git a/ccpp/suites/suite_FV3_GFS_2017_satmedmfq.xml b/ccpp/suites/suite_FV3_GFS_2017_satmedmfq.xml index e2d37dafe..14ac7ff2f 100644 --- a/ccpp/suites/suite_FV3_GFS_2017_satmedmfq.xml +++ b/ccpp/suites/suite_FV3_GFS_2017_satmedmfq.xml @@ -62,9 +62,9 @@ rayleigh_damp GFS_suite_stateout_update ozphys - GFS_DCNV_generic_pre get_phi_fv3 GFS_suite_interstitial_3 + GFS_DCNV_generic_pre samfdeepcnv GFS_DCNV_generic_post GFS_SCNV_generic_pre diff --git a/ccpp/suites/suite_FV3_GFS_2017_shinhong.xml b/ccpp/suites/suite_FV3_GFS_2017_shinhong.xml index 1b5cc7f76..f7eba5170 100644 --- a/ccpp/suites/suite_FV3_GFS_2017_shinhong.xml +++ b/ccpp/suites/suite_FV3_GFS_2017_shinhong.xml @@ -66,9 +66,9 @@ rayleigh_damp GFS_suite_stateout_update ozphys - GFS_DCNV_generic_pre get_phi_fv3 GFS_suite_interstitial_3 + GFS_DCNV_generic_pre samfdeepcnv GFS_DCNV_generic_post GFS_SCNV_generic_pre diff --git a/ccpp/suites/suite_FV3_GFS_2017_stretched.xml b/ccpp/suites/suite_FV3_GFS_2017_stretched.xml index 53639afcf..1a8c5daea 100644 --- a/ccpp/suites/suite_FV3_GFS_2017_stretched.xml +++ b/ccpp/suites/suite_FV3_GFS_2017_stretched.xml @@ -66,9 +66,9 @@ GFS_GWD_generic_post GFS_suite_stateout_update ozphys - GFS_DCNV_generic_pre get_phi_fv3 GFS_suite_interstitial_3 + GFS_DCNV_generic_pre samfdeepcnv GFS_DCNV_generic_post GFS_SCNV_generic_pre diff --git a/ccpp/suites/suite_FV3_GFS_2017_ysu.xml b/ccpp/suites/suite_FV3_GFS_2017_ysu.xml index 5c789971d..0d7c3677d 100644 --- a/ccpp/suites/suite_FV3_GFS_2017_ysu.xml +++ b/ccpp/suites/suite_FV3_GFS_2017_ysu.xml @@ -66,9 +66,9 @@ rayleigh_damp GFS_suite_stateout_update ozphys - GFS_DCNV_generic_pre get_phi_fv3 GFS_suite_interstitial_3 + GFS_DCNV_generic_pre samfdeepcnv GFS_DCNV_generic_post GFS_SCNV_generic_pre diff --git a/ccpp/suites/suite_FV3_GFS_rasmgshoc.xml b/ccpp/suites/suite_FV3_GFS_rasmgshoc.xml index ba99ed7ee..1c9377f3b 100644 --- a/ccpp/suites/suite_FV3_GFS_rasmgshoc.xml +++ b/ccpp/suites/suite_FV3_GFS_rasmgshoc.xml @@ -63,10 +63,10 @@ GFS_suite_stateout_update ozphys_2015 h2ophys - GFS_DCNV_generic_pre get_phi_fv3 GFS_suite_interstitial_3 shoc + GFS_DCNV_generic_pre GFS_suite_interstitial_5 rascnv GFS_DCNV_generic_post diff --git a/ccpp/suites/suite_FV3_GFS_v15.xml b/ccpp/suites/suite_FV3_GFS_v15.xml index 3bab0612c..18fdb129d 100644 --- a/ccpp/suites/suite_FV3_GFS_v15.xml +++ b/ccpp/suites/suite_FV3_GFS_v15.xml @@ -68,9 +68,9 @@ GFS_suite_stateout_update ozphys_2015 h2ophys - GFS_DCNV_generic_pre get_phi_fv3 GFS_suite_interstitial_3 + GFS_DCNV_generic_pre samfdeepcnv GFS_DCNV_generic_post GFS_SCNV_generic_pre diff --git a/ccpp/suites/suite_FV3_GFS_v15_gf.xml b/ccpp/suites/suite_FV3_GFS_v15_gf.xml index 72bcb4e8a..1ca3ac665 100644 --- a/ccpp/suites/suite_FV3_GFS_v15_gf.xml +++ b/ccpp/suites/suite_FV3_GFS_v15_gf.xml @@ -68,9 +68,9 @@ GFS_suite_stateout_update ozphys_2015 h2ophys - GFS_DCNV_generic_pre get_phi_fv3 GFS_suite_interstitial_3 + GFS_DCNV_generic_pre cu_gf_driver_pre cu_gf_driver GFS_DCNV_generic_post diff --git a/ccpp/suites/suite_FV3_GFS_v15_gf_thompson.xml b/ccpp/suites/suite_FV3_GFS_v15_gf_thompson.xml index 833d28cd5..e1f82f5fb 100644 --- a/ccpp/suites/suite_FV3_GFS_v15_gf_thompson.xml +++ b/ccpp/suites/suite_FV3_GFS_v15_gf_thompson.xml @@ -63,9 +63,9 @@ GFS_suite_stateout_update ozphys_2015 h2ophys - GFS_DCNV_generic_pre get_phi_fv3 GFS_suite_interstitial_3 + GFS_DCNV_generic_pre cu_gf_driver_pre cu_gf_driver GFS_DCNV_generic_post diff --git a/ccpp/suites/suite_FV3_GFS_v15_mynn.xml b/ccpp/suites/suite_FV3_GFS_v15_mynn.xml index b057dc13c..a1eefeb2c 100644 --- a/ccpp/suites/suite_FV3_GFS_v15_mynn.xml +++ b/ccpp/suites/suite_FV3_GFS_v15_mynn.xml @@ -18,14 +18,14 @@ GFS_suite_interstitial_rad_reset + sgscloud_radpre GFS_rrtmg_pre rrtmg_sw_pre - mynnrad_pre rrtmg_sw rrtmg_sw_post rrtmg_lw_pre rrtmg_lw - mynnrad_post + sgscloud_radpost rrtmg_lw_post GFS_rrtmg_post @@ -68,9 +68,9 @@ GFS_suite_stateout_update ozphys_2015 h2ophys - GFS_DCNV_generic_pre get_phi_fv3 GFS_suite_interstitial_3 + GFS_DCNV_generic_pre samfdeepcnv GFS_DCNV_generic_post GFS_SCNV_generic_pre diff --git a/ccpp/suites/suite_FV3_GFS_v15_ras.xml b/ccpp/suites/suite_FV3_GFS_v15_ras.xml index 4ec3d0816..d24b4a4fa 100644 --- a/ccpp/suites/suite_FV3_GFS_v15_ras.xml +++ b/ccpp/suites/suite_FV3_GFS_v15_ras.xml @@ -68,9 +68,9 @@ GFS_suite_stateout_update ozphys_2015 h2ophys - GFS_DCNV_generic_pre get_phi_fv3 GFS_suite_interstitial_3 + GFS_DCNV_generic_pre rascnv GFS_DCNV_generic_post GFS_SCNV_generic_pre diff --git a/ccpp/suites/suite_FV3_GFS_v15_thompson.xml b/ccpp/suites/suite_FV3_GFS_v15_thompson.xml index 3dd496ad7..ea0bdc8bb 100644 --- a/ccpp/suites/suite_FV3_GFS_v15_thompson.xml +++ b/ccpp/suites/suite_FV3_GFS_v15_thompson.xml @@ -63,9 +63,9 @@ GFS_suite_stateout_update ozphys_2015 h2ophys - GFS_DCNV_generic_pre get_phi_fv3 GFS_suite_interstitial_3 + GFS_DCNV_generic_pre samfdeepcnv GFS_DCNV_generic_post GFS_SCNV_generic_pre diff --git a/ccpp/suites/suite_FV3_GFS_v15_thompson_mynn.xml b/ccpp/suites/suite_FV3_GFS_v15_thompson_mynn.xml index 167092c7c..ce5880adb 100644 --- a/ccpp/suites/suite_FV3_GFS_v15_thompson_mynn.xml +++ b/ccpp/suites/suite_FV3_GFS_v15_thompson_mynn.xml @@ -13,14 +13,14 @@ GFS_suite_interstitial_rad_reset + sgscloud_radpre GFS_rrtmg_pre rrtmg_sw_pre - mynnrad_pre rrtmg_sw rrtmg_sw_post rrtmg_lw_pre rrtmg_lw - mynnrad_post + sgscloud_radpost rrtmg_lw_post GFS_rrtmg_post @@ -63,9 +63,9 @@ GFS_suite_stateout_update ozphys_2015 h2ophys - GFS_DCNV_generic_pre get_phi_fv3 GFS_suite_interstitial_3 + GFS_DCNV_generic_pre samfdeepcnv GFS_DCNV_generic_post GFS_SCNV_generic_pre diff --git a/ccpp/suites/suite_FV3_GFS_v15p2.xml b/ccpp/suites/suite_FV3_GFS_v15p2.xml index 732d7669c..c074f08dd 100644 --- a/ccpp/suites/suite_FV3_GFS_v15p2.xml +++ b/ccpp/suites/suite_FV3_GFS_v15p2.xml @@ -68,9 +68,9 @@ GFS_suite_stateout_update ozphys_2015 h2ophys - GFS_DCNV_generic_pre get_phi_fv3 GFS_suite_interstitial_3 + GFS_DCNV_generic_pre samfdeepcnv GFS_DCNV_generic_post GFS_SCNV_generic_pre @@ -87,6 +87,7 @@ GFS_stochastics + phys_tend diff --git a/ccpp/suites/suite_FV3_GFS_v15p2_coupled.xml b/ccpp/suites/suite_FV3_GFS_v15p2_coupled.xml index b3db1abb9..dd8bbec07 100644 --- a/ccpp/suites/suite_FV3_GFS_v15p2_coupled.xml +++ b/ccpp/suites/suite_FV3_GFS_v15p2_coupled.xml @@ -67,9 +67,9 @@ GFS_suite_stateout_update ozphys_2015 h2ophys - GFS_DCNV_generic_pre get_phi_fv3 GFS_suite_interstitial_3 + GFS_DCNV_generic_pre samfdeepcnv GFS_DCNV_generic_post GFS_SCNV_generic_pre diff --git a/ccpp/suites/suite_FV3_GFS_v15p2_no_nsst.xml b/ccpp/suites/suite_FV3_GFS_v15p2_no_nsst.xml index 11dca89ec..2fb5a033e 100644 --- a/ccpp/suites/suite_FV3_GFS_v15p2_no_nsst.xml +++ b/ccpp/suites/suite_FV3_GFS_v15p2_no_nsst.xml @@ -66,9 +66,9 @@ GFS_suite_stateout_update ozphys_2015 h2ophys - GFS_DCNV_generic_pre get_phi_fv3 GFS_suite_interstitial_3 + GFS_DCNV_generic_pre samfdeepcnv GFS_DCNV_generic_post GFS_SCNV_generic_pre diff --git a/ccpp/suites/suite_FV3_GFS_v15plus.xml b/ccpp/suites/suite_FV3_GFS_v15plus.xml index 6db3a4ed6..e2bcd86a6 100644 --- a/ccpp/suites/suite_FV3_GFS_v15plus.xml +++ b/ccpp/suites/suite_FV3_GFS_v15plus.xml @@ -68,9 +68,9 @@ GFS_suite_stateout_update ozphys_2015 h2ophys - GFS_DCNV_generic_pre get_phi_fv3 GFS_suite_interstitial_3 + GFS_DCNV_generic_pre samfdeepcnv GFS_DCNV_generic_post GFS_SCNV_generic_pre diff --git a/ccpp/suites/suite_FV3_GFS_v15plusras.xml b/ccpp/suites/suite_FV3_GFS_v15plusras.xml index e6ba6bd03..f6ae3bca6 100644 --- a/ccpp/suites/suite_FV3_GFS_v15plusras.xml +++ b/ccpp/suites/suite_FV3_GFS_v15plusras.xml @@ -68,9 +68,9 @@ GFS_suite_stateout_update ozphys_2015 h2ophys - GFS_DCNV_generic_pre get_phi_fv3 GFS_suite_interstitial_3 + GFS_DCNV_generic_pre rascnv GFS_DCNV_generic_post GFS_SCNV_generic_pre diff --git a/ccpp/suites/suite_FV3_GFS_v16_csawmg.xml b/ccpp/suites/suite_FV3_GFS_v16_csawmg.xml index e99223e4e..a899edf99 100644 --- a/ccpp/suites/suite_FV3_GFS_v16_csawmg.xml +++ b/ccpp/suites/suite_FV3_GFS_v16_csawmg.xml @@ -63,9 +63,9 @@ GFS_suite_stateout_update ozphys_2015 h2ophys - GFS_DCNV_generic_pre get_phi_fv3 GFS_suite_interstitial_3 + GFS_DCNV_generic_pre cs_conv_pre cs_conv cs_conv_post diff --git a/ccpp/suites/suite_FV3_GFS_v16beta.xml b/ccpp/suites/suite_FV3_GFS_v16beta.xml index c047b05c1..61653650d 100644 --- a/ccpp/suites/suite_FV3_GFS_v16beta.xml +++ b/ccpp/suites/suite_FV3_GFS_v16beta.xml @@ -68,9 +68,9 @@ GFS_suite_stateout_update ozphys_2015 h2ophys - GFS_DCNV_generic_pre get_phi_fv3 GFS_suite_interstitial_3 + GFS_DCNV_generic_pre samfdeepcnv GFS_DCNV_generic_post GFS_SCNV_generic_pre @@ -87,6 +87,7 @@ GFS_stochastics + phys_tend diff --git a/ccpp/suites/suite_FV3_GFS_v16beta_no_nsst.xml b/ccpp/suites/suite_FV3_GFS_v16beta_no_nsst.xml index 582d43cb1..aaff505ef 100644 --- a/ccpp/suites/suite_FV3_GFS_v16beta_no_nsst.xml +++ b/ccpp/suites/suite_FV3_GFS_v16beta_no_nsst.xml @@ -66,9 +66,9 @@ GFS_suite_stateout_update ozphys_2015 h2ophys - GFS_DCNV_generic_pre get_phi_fv3 GFS_suite_interstitial_3 + GFS_DCNV_generic_pre samfdeepcnv GFS_DCNV_generic_post GFS_SCNV_generic_pre diff --git a/ccpp/suites/suite_FV3_GSD_SAR.xml b/ccpp/suites/suite_FV3_GSD_SAR.xml index 8da1b287a..093d7e568 100644 --- a/ccpp/suites/suite_FV3_GSD_SAR.xml +++ b/ccpp/suites/suite_FV3_GSD_SAR.xml @@ -13,14 +13,14 @@ GFS_suite_interstitial_rad_reset + sgscloud_radpre GFS_rrtmg_pre rrtmg_sw_pre - mynnrad_pre rrtmg_sw rrtmg_sw_post rrtmg_lw_pre rrtmg_lw - mynnrad_post + sgscloud_radpost rrtmg_lw_post GFS_rrtmg_post @@ -65,6 +65,11 @@ 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 diff --git a/ccpp/suites/suite_FV3_GSD_noah.xml b/ccpp/suites/suite_FV3_GSD_noah.xml index 420c8bd0b..d8821ed66 100644 --- a/ccpp/suites/suite_FV3_GSD_noah.xml +++ b/ccpp/suites/suite_FV3_GSD_noah.xml @@ -13,14 +13,14 @@ GFS_suite_interstitial_rad_reset + sgscloud_radpre GFS_rrtmg_pre rrtmg_sw_pre - mynnrad_pre rrtmg_sw rrtmg_sw_post rrtmg_lw_pre rrtmg_lw - mynnrad_post + sgscloud_radpost rrtmg_lw_post GFS_rrtmg_post @@ -63,9 +63,9 @@ GFS_suite_stateout_update ozphys_2015 h2ophys - GFS_DCNV_generic_pre get_phi_fv3 GFS_suite_interstitial_3 + GFS_DCNV_generic_pre cu_gf_driver_pre cu_gf_driver GFS_DCNV_generic_post diff --git a/ccpp/suites/suite_FV3_GSD_noah_mynnsfc.xml b/ccpp/suites/suite_FV3_GSD_noah_mynnsfc.xml new file mode 100644 index 000000000..72f1b659f --- /dev/null +++ b/ccpp/suites/suite_FV3_GSD_noah_mynnsfc.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 + 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_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 + rayleigh_damp + 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 + + + + + GFS_stochastics + + + + diff --git a/ccpp/suites/suite_FV3_GSD_v0.xml b/ccpp/suites/suite_FV3_GSD_v0.xml index f076259ec..d3a23a30c 100644 --- a/ccpp/suites/suite_FV3_GSD_v0.xml +++ b/ccpp/suites/suite_FV3_GSD_v0.xml @@ -13,14 +13,14 @@ GFS_suite_interstitial_rad_reset + sgscloud_radpre GFS_rrtmg_pre rrtmg_sw_pre - mynnrad_pre rrtmg_sw rrtmg_sw_post rrtmg_lw_pre rrtmg_lw - mynnrad_post + sgscloud_radpost rrtmg_lw_post GFS_rrtmg_post @@ -65,9 +65,9 @@ GFS_suite_stateout_update ozphys_2015 h2ophys - GFS_DCNV_generic_pre get_phi_fv3 GFS_suite_interstitial_3 + GFS_DCNV_generic_pre cu_gf_driver_pre cu_gf_driver GFS_DCNV_generic_post @@ -87,6 +87,7 @@ GFS_stochastics + phys_tend diff --git a/ccpp/suites/suite_FV3_GSD_v0_drag_suite.xml b/ccpp/suites/suite_FV3_GSD_v0_drag_suite.xml index 86a15d2a4..852385dca 100644 --- a/ccpp/suites/suite_FV3_GSD_v0_drag_suite.xml +++ b/ccpp/suites/suite_FV3_GSD_v0_drag_suite.xml @@ -13,14 +13,14 @@ GFS_suite_interstitial_rad_reset + sgscloud_radpre GFS_rrtmg_pre rrtmg_sw_pre - mynnrad_pre rrtmg_sw rrtmg_sw_post rrtmg_lw_pre rrtmg_lw - mynnrad_post + sgscloud_radpost rrtmg_lw_post GFS_rrtmg_post @@ -64,9 +64,9 @@ GFS_suite_stateout_update ozphys_2015 h2ophys - GFS_DCNV_generic_pre get_phi_fv3 GFS_suite_interstitial_3 + GFS_DCNV_generic_pre cu_gf_driver_pre cu_gf_driver GFS_DCNV_generic_post diff --git a/ccpp/suites/suite_FV3_GSD_v0_mynnsfc.xml b/ccpp/suites/suite_FV3_GSD_v0_mynnsfc.xml new file mode 100644 index 000000000..50680a893 --- /dev/null +++ b/ccpp/suites/suite_FV3_GSD_v0_mynnsfc.xml @@ -0,0 +1,93 @@ + + + + + + + GFS_time_vary_pre + GFS_rrtmg_setup + GFS_rad_time_vary + GFS_phys_time_vary + + + + + GFS_suite_interstitial_rad_reset + sgscloud_radpre + GFS_rrtmg_pre + rrtmg_sw_pre + rrtmg_sw + rrtmg_sw_post + rrtmg_lw_pre + rrtmg_lw + sgscloud_radpost + rrtmg_lw_post + GFS_rrtmg_post + + + + + GFS_suite_interstitial_phys_reset + GFS_suite_stateout_reset + get_prs_fv3 + GFS_suite_interstitial_1 + GFS_surface_generic_pre + GFS_surface_composites_pre + dcyc2t3 + GFS_surface_composites_inter + GFS_suite_interstitial_2 + + + + mynnsfc_wrapper + GFS_surface_loop_control_part1 + sfc_nst_pre + sfc_nst + sfc_nst_post + lsm_ruc + lsm_ruc_sfc_sice_pre + sfc_sice + lsm_ruc_sfc_sice_post + GFS_surface_loop_control_part2 + + + + GFS_surface_composites_post + sfc_diag + sfc_diag_post + GFS_surface_generic_post + mynnedmf_wrapper + GFS_GWD_generic_pre + cires_ugwp + cires_ugwp_post + GFS_GWD_generic_post + rayleigh_damp + GFS_suite_stateout_update + ozphys_2015 + h2ophys + get_phi_fv3 + GFS_suite_interstitial_3 + GFS_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 + + + + + GFS_stochastics + + + + diff --git a/ccpp/suites/suite_FV3_HAFS_ferhires_update_moist.xml b/ccpp/suites/suite_FV3_HAFS_ferhires_update_moist.xml index d8af2f8a9..66d451186 100644 --- a/ccpp/suites/suite_FV3_HAFS_ferhires_update_moist.xml +++ b/ccpp/suites/suite_FV3_HAFS_ferhires_update_moist.xml @@ -62,9 +62,9 @@ rayleigh_damp GFS_suite_stateout_update ozphys - GFS_DCNV_generic_pre get_phi_fv3 GFS_suite_interstitial_3 + GFS_DCNV_generic_pre GFS_DCNV_generic_post GFS_SCNV_generic_pre diff --git a/ccpp/suites/suite_FV3_HRRR.xml b/ccpp/suites/suite_FV3_HRRR.xml new file mode 100644 index 000000000..24f57b8ec --- /dev/null +++ b/ccpp/suites/suite_FV3_HRRR.xml @@ -0,0 +1,86 @@ + + + + + + + GFS_time_vary_pre + GFS_rrtmg_setup + GFS_rad_time_vary + GFS_phys_time_vary + + + + + GFS_suite_interstitial_rad_reset + sgscloud_radpre + GFS_rrtmg_pre + rrtmg_sw_pre + rrtmg_sw + rrtmg_sw_post + rrtmg_lw_pre + rrtmg_lw + sgscloud_radpost + rrtmg_lw_post + GFS_rrtmg_post + + + + + GFS_suite_interstitial_phys_reset + GFS_suite_stateout_reset + get_prs_fv3 + GFS_suite_interstitial_1 + GFS_surface_generic_pre + GFS_surface_composites_pre + dcyc2t3 + GFS_surface_composites_inter + GFS_suite_interstitial_2 + + + + mynnsfc_wrapper + GFS_surface_loop_control_part1 + sfc_nst_pre + sfc_nst + sfc_nst_post + lsm_ruc + lsm_ruc_sfc_sice_pre + sfc_sice + lsm_ruc_sfc_sice_post + 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 + rayleigh_damp + GFS_suite_stateout_update + ozphys_2015 + h2ophys + get_phi_fv3 + + GFS_suite_interstitial_3 + GFS_suite_interstitial_4 + + GFS_MP_generic_pre + mp_thompson_pre + mp_thompson + mp_thompson_post + GFS_MP_generic_post + maximum_hourly_diagnostics + + + + + GFS_stochastics + + + + diff --git a/ccpp/suites/suite_FV3_RAP.xml b/ccpp/suites/suite_FV3_RAP.xml new file mode 100644 index 000000000..3f145c144 --- /dev/null +++ b/ccpp/suites/suite_FV3_RAP.xml @@ -0,0 +1,92 @@ + + + + + + + GFS_time_vary_pre + GFS_rrtmg_setup + GFS_rad_time_vary + GFS_phys_time_vary + + + + + GFS_suite_interstitial_rad_reset + sgscloud_radpre + GFS_rrtmg_pre + rrtmg_sw_pre + rrtmg_sw + rrtmg_sw_post + rrtmg_lw_pre + rrtmg_lw + sgscloud_radpost + rrtmg_lw_post + GFS_rrtmg_post + + + + + GFS_suite_interstitial_phys_reset + GFS_suite_stateout_reset + get_prs_fv3 + GFS_suite_interstitial_1 + GFS_surface_generic_pre + GFS_surface_composites_pre + dcyc2t3 + GFS_surface_composites_inter + GFS_suite_interstitial_2 + + + + mynnsfc_wrapper + GFS_surface_loop_control_part1 + sfc_nst_pre + sfc_nst + sfc_nst_post + lsm_ruc + lsm_ruc_sfc_sice_pre + sfc_sice + lsm_ruc_sfc_sice_post + 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 + rayleigh_damp + 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 + + + + + GFS_stochastics + + + + diff --git a/gfsphysics/CCPP_layer/CCPP_data.meta b/gfsphysics/CCPP_layer/CCPP_data.meta index 6cc38da06..e3f1249e5 100644 --- a/gfsphysics/CCPP_layer/CCPP_data.meta +++ b/gfsphysics/CCPP_layer/CCPP_data.meta @@ -35,11 +35,11 @@ standard_name = GFS_data_type_instance_all_blocks long_name = instance of derived type GFS_data_type units = DDT - dimensions = (ccpp_block_number) + dimensions = (ccpp_block_count) type = GFS_data_type [GFS_Interstitial] standard_name = GFS_interstitial_type_instance_all_threads long_name = instance of derived type GFS_interstitial_type units = DDT - dimensions = (ccpp_thread_number) + dimensions = (omp_threads) type = GFS_interstitial_type diff --git a/gfsphysics/GFS_layer/GFS_diagnostics.F90 b/gfsphysics/GFS_layer/GFS_diagnostics.F90 index ee0dd8158..ed2e5d51a 100644 --- a/gfsphysics/GFS_layer/GFS_diagnostics.F90 +++ b/gfsphysics/GFS_layer/GFS_diagnostics.F90 @@ -1612,7 +1612,7 @@ subroutine GFS_externaldiag_populate (ExtDiag, Model, Statein, Stateout, Sfcprop ExtDiag(idx)%intpl_method = 'bilinear' allocate (ExtDiag(idx)%data(nblks)) do nb = 1,nblks - ExtDiag(idx)%data(nb)%var2 => IntDiag(nb)%hpbl(:) + ExtDiag(idx)%data(nb)%var2 => Tbd(nb)%hpbl(:) enddo idx = idx + 1 @@ -2307,173 +2307,494 @@ subroutine GFS_externaldiag_populate (ExtDiag, Model, Statein, Stateout, Sfcprop ! if(mpp_pe()==mpp_root_pe())print *,'in gfdl_diag_register,af shum_wts,idx=',idx -!--- three-dimensional variables that need to be handled special when writing - idx = idx + 1 - ExtDiag(idx)%axes = 3 - ExtDiag(idx)%name = 'dt3dt_lw' - ExtDiag(idx)%desc = 'temperature change due to long wave radiation' - ExtDiag(idx)%unit = 'K' - ExtDiag(idx)%mod_name = 'gfs_phys' - allocate (ExtDiag(idx)%data(nblks)) - do nb = 1,nblks - ExtDiag(idx)%data(nb)%var3 => IntDiag(nb)%dt3dt(:,:,1) - enddo +!--- three-dimensional variables that need to be handled special when writing + if_ldiag3d: if(Model%ldiag3d) then + idx = idx + 1 + ExtDiag(idx)%axes = 3 + ExtDiag(idx)%name = 'dt3dt_lw' + ExtDiag(idx)%desc = 'temperature tendency due to long wave radiation' + ExtDiag(idx)%unit = 'K s-1' + ExtDiag(idx)%mod_name = 'gfs_phys' + ExtDiag(idx)%time_avg = .TRUE. + allocate (ExtDiag(idx)%data(nblks)) + do nb = 1,nblks + ExtDiag(idx)%data(nb)%var3 => IntDiag(nb)%dt3dt(:,:,1) + enddo - idx = idx + 1 - ExtDiag(idx)%axes = 3 - ExtDiag(idx)%name = 'dt3dt_sw' - ExtDiag(idx)%desc = 'temperature change due to short wave radiation' - ExtDiag(idx)%unit = 'K' - ExtDiag(idx)%mod_name = 'gfs_phys' - allocate (ExtDiag(idx)%data(nblks)) - do nb = 1,nblks - ExtDiag(idx)%data(nb)%var3 => IntDiag(nb)%dt3dt(:,:,2) - enddo + idx = idx + 1 + ExtDiag(idx)%axes = 3 + ExtDiag(idx)%name = 'dt3dt_sw' + ExtDiag(idx)%desc = 'temperature tendency due to short wave radiation' + ExtDiag(idx)%unit = 'K s-1' + ExtDiag(idx)%mod_name = 'gfs_phys' + ExtDiag(idx)%time_avg = .TRUE. + allocate (ExtDiag(idx)%data(nblks)) + do nb = 1,nblks + ExtDiag(idx)%data(nb)%var3 => IntDiag(nb)%dt3dt(:,:,2) + enddo - idx = idx + 1 - ExtDiag(idx)%axes = 3 - ExtDiag(idx)%name = 'dt3dt_pbl' - ExtDiag(idx)%desc = 'temperature change due to pbl' - ExtDiag(idx)%unit = 'K' - ExtDiag(idx)%mod_name = 'gfs_phys' - allocate (ExtDiag(idx)%data(nblks)) - do nb = 1,nblks - ExtDiag(idx)%data(nb)%var3 => IntDiag(nb)%dt3dt(:,:,3) - enddo + idx = idx + 1 + ExtDiag(idx)%axes = 3 + ExtDiag(idx)%name = 'dt3dt_pbl' + ExtDiag(idx)%desc = 'temperature tendency due to PBL' + ExtDiag(idx)%unit = 'K s-1' + ExtDiag(idx)%mod_name = 'gfs_phys' + ExtDiag(idx)%time_avg = .TRUE. + allocate (ExtDiag(idx)%data(nblks)) + do nb = 1,nblks + ExtDiag(idx)%data(nb)%var3 => IntDiag(nb)%dt3dt(:,:,3) + enddo - idx = idx + 1 - ExtDiag(idx)%axes = 3 - ExtDiag(idx)%name = 'dt3dt_deepcnv' - ExtDiag(idx)%desc = 'temperature change due to deep convection' - ExtDiag(idx)%unit = 'K' - ExtDiag(idx)%mod_name = 'gfs_phys' - allocate (ExtDiag(idx)%data(nblks)) - do nb = 1,nblks - ExtDiag(idx)%data(nb)%var3 => IntDiag(nb)%dt3dt(:,:,4) - enddo + idx = idx + 1 + ExtDiag(idx)%axes = 3 + ExtDiag(idx)%name = 'dt3dt_deepcnv' + ExtDiag(idx)%desc = 'temperature tendency due to deep convection' + ExtDiag(idx)%unit = 'K s-1' + ExtDiag(idx)%mod_name = 'gfs_phys' + ExtDiag(idx)%time_avg = .TRUE. + allocate (ExtDiag(idx)%data(nblks)) + do nb = 1,nblks + ExtDiag(idx)%data(nb)%var3 => IntDiag(nb)%dt3dt(:,:,4) + enddo - idx = idx + 1 - ExtDiag(idx)%axes = 3 - ExtDiag(idx)%name = 'dt3dt_shlwcnv' - ExtDiag(idx)%desc = 'temperature change due to shallow convection' - ExtDiag(idx)%unit = 'K' - ExtDiag(idx)%mod_name = 'gfs_phys' - allocate (ExtDiag(idx)%data(nblks)) - do nb = 1,nblks - ExtDiag(idx)%data(nb)%var3 => IntDiag(nb)%dt3dt(:,:,5) - enddo + idx = idx + 1 + ExtDiag(idx)%axes = 3 + ExtDiag(idx)%name = 'dt3dt_shalcnv' + ExtDiag(idx)%desc = 'temperature tendency due to shallow convection' + ExtDiag(idx)%unit = 'K s-1' + ExtDiag(idx)%mod_name = 'gfs_phys' + ExtDiag(idx)%time_avg = .TRUE. + allocate (ExtDiag(idx)%data(nblks)) + do nb = 1,nblks + ExtDiag(idx)%data(nb)%var3 => IntDiag(nb)%dt3dt(:,:,5) + enddo - idx = idx + 1 - ExtDiag(idx)%axes = 3 - ExtDiag(idx)%name = 'dt3dt_microphy' - ExtDiag(idx)%desc = 'temperature change due to micro-physics' - ExtDiag(idx)%unit = 'K' - ExtDiag(idx)%mod_name = 'gfs_phys' - allocate (ExtDiag(idx)%data(nblks)) - do nb = 1,nblks - ExtDiag(idx)%data(nb)%var3 => IntDiag(nb)%dt3dt(:,:,6) - enddo + idx = idx + 1 + ExtDiag(idx)%axes = 3 + ExtDiag(idx)%name = 'dt3dt_mp' + ExtDiag(idx)%desc = 'temperature tendency due to microphysics' + ExtDiag(idx)%unit = 'K s-1' + ExtDiag(idx)%mod_name = 'gfs_phys' + ExtDiag(idx)%time_avg = .TRUE. + allocate (ExtDiag(idx)%data(nblks)) + do nb = 1,nblks + ExtDiag(idx)%data(nb)%var3 => IntDiag(nb)%dt3dt(:,:,6) + enddo - idx = idx + 1 - ExtDiag(idx)%axes = 3 - ExtDiag(idx)%name = 'dt3dt_orogwd' - ExtDiag(idx)%desc = 'temperature change due to orographic gravity wave drag' - ExtDiag(idx)%unit = 'K' - ExtDiag(idx)%mod_name = 'gfs_phys' - allocate (ExtDiag(idx)%data(nblks)) - do nb = 1,nblks - ExtDiag(idx)%data(nb)%var3 => IntDiag(nb)%dt3dt(:,:,7) - enddo + idx = idx + 1 + ExtDiag(idx)%axes = 3 + ExtDiag(idx)%name = 'dt3dt_orogwd' + ExtDiag(idx)%desc = 'temperature tendency due to orographic gravity wave drag' + ExtDiag(idx)%unit = 'K s-1' + ExtDiag(idx)%mod_name = 'gfs_phys' + ExtDiag(idx)%time_avg = .TRUE. + allocate (ExtDiag(idx)%data(nblks)) + do nb = 1,nblks + ExtDiag(idx)%data(nb)%var3 => IntDiag(nb)%dt3dt(:,:,7) + enddo - idx = idx + 1 - ExtDiag(idx)%axes = 3 - ExtDiag(idx)%name = 'du3dt_pbl' - ExtDiag(idx)%desc = 'u momentum change due to PBL' - ExtDiag(idx)%unit = 'XXX' - ExtDiag(idx)%mod_name = 'gfs_phys' - allocate (ExtDiag(idx)%data(nblks)) - do nb = 1,nblks - ExtDiag(idx)%data(nb)%var3 => IntDiag(nb)%du3dt(:,:,1) - enddo + idx = idx + 1 + ExtDiag(idx)%axes = 3 + ExtDiag(idx)%name = 'dt3dt_rdamp' + ExtDiag(idx)%desc = 'temperature tendency due to Rayleigh damping' + ExtDiag(idx)%unit = 'K s-1' + ExtDiag(idx)%mod_name = 'gfs_phys' + ExtDiag(idx)%time_avg = .TRUE. + allocate (ExtDiag(idx)%data(nblks)) + do nb = 1,nblks + ExtDiag(idx)%data(nb)%var3 => IntDiag(nb)%dt3dt(:,:,8) + enddo - idx = idx + 1 - ExtDiag(idx)%axes = 3 - ExtDiag(idx)%name = 'dv3dt_pbl' - ExtDiag(idx)%desc = 'v momentum change due to PBL' - ExtDiag(idx)%unit = 'm/s' - ExtDiag(idx)%mod_name = 'gfs_phys' - allocate (ExtDiag(idx)%data(nblks)) - do nb = 1,nblks - ExtDiag(idx)%data(nb)%var3 => IntDiag(nb)%dv3dt(:,:,1) - enddo + idx = idx + 1 + ExtDiag(idx)%axes = 3 + ExtDiag(idx)%name = 'dt3dt_cnvgwd' + ExtDiag(idx)%desc = 'temperature tendency due to convective gravity wave drag' + ExtDiag(idx)%unit = 'K s-1' + ExtDiag(idx)%mod_name = 'gfs_phys' + ExtDiag(idx)%time_avg = .TRUE. + allocate (ExtDiag(idx)%data(nblks)) + do nb = 1,nblks + ExtDiag(idx)%data(nb)%var3 => IntDiag(nb)%dt3dt(:,:,9) + enddo - idx = idx + 1 - ExtDiag(idx)%axes = 3 - ExtDiag(idx)%name = 'du3dt_orogwd' - ExtDiag(idx)%desc = 'u momentum change due to orographic gravity wave drag' - ExtDiag(idx)%unit = 'XXX' - ExtDiag(idx)%mod_name = 'gfs_phys' - allocate (ExtDiag(idx)%data(nblks)) - do nb = 1,nblks - ExtDiag(idx)%data(nb)%var3 => IntDiag(nb)%du3dt(:,:,2) - enddo + idx = idx + 1 + ExtDiag(idx)%axes = 3 + ExtDiag(idx)%name = 'dt3dt_phys' + ExtDiag(idx)%desc = 'temperature tendency due to physics' + ExtDiag(idx)%unit = 'K s-1' + ExtDiag(idx)%mod_name = 'gfs_phys' + ExtDiag(idx)%time_avg = .TRUE. + allocate (ExtDiag(idx)%data(nblks)) + do nb = 1,nblks + ExtDiag(idx)%data(nb)%var3 => IntDiag(nb)%dt3dt(:,:,10) + enddo - idx = idx + 1 - ExtDiag(idx)%axes = 3 - ExtDiag(idx)%name = 'dv3dt_orogwd' - ExtDiag(idx)%desc = 'v momentum change due to orographic gravity wave drag' - ExtDiag(idx)%unit = 'm/s' - ExtDiag(idx)%mod_name = 'gfs_phys' - allocate (ExtDiag(idx)%data(nblks)) - do nb = 1,nblks - ExtDiag(idx)%data(nb)%var3 => IntDiag(nb)%dv3dt(:,:,2) - enddo + idx = idx + 1 + ExtDiag(idx)%axes = 3 + ExtDiag(idx)%name = 'dt3dt_nophys' + ExtDiag(idx)%desc = 'temperature tendency due to non-physics processes' + ExtDiag(idx)%unit = 'K s-1' + ExtDiag(idx)%mod_name = 'gfs_phys' + ExtDiag(idx)%time_avg = .TRUE. + allocate (ExtDiag(idx)%data(nblks)) + do nb = 1,nblks + ExtDiag(idx)%data(nb)%var3 => IntDiag(nb)%dt3dt(:,:,11) + enddo - idx = idx + 1 - ExtDiag(idx)%axes = 3 - ExtDiag(idx)%name = 'du3dt_deepcnv' - ExtDiag(idx)%desc = 'u momentum change due to deep convection' - ExtDiag(idx)%unit = 'm/s' - ExtDiag(idx)%mod_name = 'gfs_phys' - allocate (ExtDiag(idx)%data(nblks)) - do nb = 1,nblks - ExtDiag(idx)%data(nb)%var3 => IntDiag(nb)%du3dt(:,:,3) - enddo + idx = idx + 1 + ExtDiag(idx)%axes = 3 + ExtDiag(idx)%name = 'du3dt_pbl' + ExtDiag(idx)%desc = 'u momentum tendency due to PBL' + ExtDiag(idx)%unit = 'm s-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)%var3 => IntDiag(nb)%du3dt(:,:,1) + enddo - idx = idx + 1 - ExtDiag(idx)%axes = 3 - ExtDiag(idx)%name = 'dv3dt_deepcnv' - ExtDiag(idx)%desc = 'v momentum change due to deep convection' - ExtDiag(idx)%unit = 'm/s' - ExtDiag(idx)%mod_name = 'gfs_phys' - allocate (ExtDiag(idx)%data(nblks)) - do nb = 1,nblks - ExtDiag(idx)%data(nb)%var3 => IntDiag(nb)%dv3dt(:,:,3) - enddo + idx = idx + 1 + ExtDiag(idx)%axes = 3 + ExtDiag(idx)%name = 'dv3dt_pbl' + ExtDiag(idx)%desc = 'v momentum tendency due to PBL' + ExtDiag(idx)%unit = 'm s-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)%var3 => IntDiag(nb)%dv3dt(:,:,1) + enddo + idx = idx + 1 + ExtDiag(idx)%axes = 3 + ExtDiag(idx)%name = 'du3dt_orogwd' + ExtDiag(idx)%desc = 'u momentum tendency due to orographic gravity wave drag' + ExtDiag(idx)%unit = 'm s-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)%var3 => IntDiag(nb)%du3dt(:,:,2) + enddo - idx = idx + 1 - ExtDiag(idx)%axes = 3 - ExtDiag(idx)%name = 'du3dt_cnvgwd' - ExtDiag(idx)%desc = 'u momentum change due to convective gravity wave drag' - ExtDiag(idx)%unit = 'm/s' - ExtDiag(idx)%mod_name = 'gfs_phys' - allocate (ExtDiag(idx)%data(nblks)) - do nb = 1,nblks - ExtDiag(idx)%data(nb)%var3 => IntDiag(nb)%du3dt(:,:,4) - enddo + idx = idx + 1 + ExtDiag(idx)%axes = 3 + ExtDiag(idx)%name = 'dv3dt_orogwd' + ExtDiag(idx)%desc = 'v momentum tendency due to orographic gravity wave drag' + ExtDiag(idx)%unit = 'm s-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)%var3 => IntDiag(nb)%dv3dt(:,:,2) + enddo - idx = idx + 1 - ExtDiag(idx)%axes = 3 - ExtDiag(idx)%name = 'dv3dt_cnvgwd' - ExtDiag(idx)%desc = 'v momentum change due to convective gravity wave drag' - ExtDiag(idx)%unit = 'm/s' - ExtDiag(idx)%mod_name = 'gfs_phys' - allocate (ExtDiag(idx)%data(nblks)) - do nb = 1,nblks - ExtDiag(idx)%data(nb)%var3 => IntDiag(nb)%dv3dt(:,:,4) - enddo + idx = idx + 1 + ExtDiag(idx)%axes = 3 + ExtDiag(idx)%name = 'du3dt_deepcnv' + ExtDiag(idx)%desc = 'u momentum tendency due to deep convection' + ExtDiag(idx)%unit = 'm s-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)%var3 => IntDiag(nb)%du3dt(:,:,3) + enddo + + idx = idx + 1 + ExtDiag(idx)%axes = 3 + ExtDiag(idx)%name = 'dv3dt_deepcnv' + ExtDiag(idx)%desc = 'v momentum tendency due to deep convection' + ExtDiag(idx)%unit = 'm s-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)%var3 => IntDiag(nb)%dv3dt(:,:,3) + enddo + + idx = idx + 1 + ExtDiag(idx)%axes = 3 + ExtDiag(idx)%name = 'du3dt_cnvgwd' + ExtDiag(idx)%desc = 'u momentum tendency due to convective gravity wave drag' + ExtDiag(idx)%unit = 'm s-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)%var3 => IntDiag(nb)%du3dt(:,:,4) + enddo + + idx = idx + 1 + ExtDiag(idx)%axes = 3 + ExtDiag(idx)%name = 'dv3dt_cnvgwd' + ExtDiag(idx)%desc = 'v momentum tendency due to convective gravity wave drag' + ExtDiag(idx)%unit = 'm s-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)%var3 => IntDiag(nb)%dv3dt(:,:,4) + enddo + + idx = idx + 1 + ExtDiag(idx)%axes = 3 + ExtDiag(idx)%name = 'du3dt_rdamp' + ExtDiag(idx)%desc = 'u momentum tendency due to Rayleigh damping' + ExtDiag(idx)%unit = 'm s-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)%var3 => IntDiag(nb)%du3dt(:,:,5) + enddo + + idx = idx + 1 + ExtDiag(idx)%axes = 3 + ExtDiag(idx)%name = 'dv3dt_damp' + ExtDiag(idx)%desc = 'v momentum tendency due to Rayleigh damping' + ExtDiag(idx)%unit = 'm s-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)%var3 => IntDiag(nb)%dv3dt(:,:,5) + enddo + + + idx = idx + 1 + ExtDiag(idx)%axes = 3 + ExtDiag(idx)%name = 'du3dt_shalcnv' + ExtDiag(idx)%desc = 'u momentum tendency due to shallow convection' + ExtDiag(idx)%unit = 'm s-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)%var3 => IntDiag(nb)%du3dt(:,:,6) + enddo + + idx = idx + 1 + ExtDiag(idx)%axes = 3 + ExtDiag(idx)%name = 'dv3dt_shalcnv' + ExtDiag(idx)%desc = 'v momentum tendency due to shallow convection' + ExtDiag(idx)%unit = 'm s-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)%var3 => IntDiag(nb)%dv3dt(:,:,6) + enddo + + idx = idx + 1 + ExtDiag(idx)%axes = 3 + ExtDiag(idx)%name = 'du3dt_phys' + ExtDiag(idx)%desc = 'u momentum tendency due to physics' + ExtDiag(idx)%unit = 'm s-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)%var3 => IntDiag(nb)%du3dt(:,:,7) + enddo + + idx = idx + 1 + ExtDiag(idx)%axes = 3 + ExtDiag(idx)%name = 'dv3dt_phys' + ExtDiag(idx)%desc = 'v momentum tendency due to physics' + ExtDiag(idx)%unit = 'm s-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)%var3 => IntDiag(nb)%dv3dt(:,:,7) + enddo + + idx = idx + 1 + ExtDiag(idx)%axes = 3 + ExtDiag(idx)%name = 'du3dt_nophys' + ExtDiag(idx)%desc = 'u momentum tendency due to non-physics processes' + ExtDiag(idx)%unit = 'm s-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)%var3 => IntDiag(nb)%du3dt(:,:,8) + enddo + + idx = idx + 1 + ExtDiag(idx)%axes = 3 + ExtDiag(idx)%name = 'dv3dt_nophys' + ExtDiag(idx)%desc = 'v momentum tendency due to non-physics processes' + ExtDiag(idx)%unit = 'm s-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)%var3 => IntDiag(nb)%dv3dt(:,:,8) + enddo + +#ifdef CCPP + if_qdiag3d: if(Model%qdiag3d) then + idx = idx + 1 + ExtDiag(idx)%axes = 3 + ExtDiag(idx)%name = 'dq3dt_pbl' + ExtDiag(idx)%desc = 'water vapor specific humidity tendency due to PBL' + ExtDiag(idx)%unit = 'kg kg-1 s-1' + ExtDiag(idx)%mod_name = 'gfs_phys' + ExtDiag(idx)%time_avg = .TRUE. + allocate (ExtDiag(idx)%data(nblks)) + do nb = 1,nblks + ExtDiag(idx)%data(nb)%var3 => IntDiag(nb)%dq3dt(:,:,1) + enddo + + idx = idx + 1 + ExtDiag(idx)%axes = 3 + ExtDiag(idx)%name = 'dq3dt_deepcnv' + ExtDiag(idx)%desc = 'water vapor specific humidity tendency due to deep convection' + ExtDiag(idx)%unit = 'kg kg-1 s-1' + ExtDiag(idx)%mod_name = 'gfs_phys' + ExtDiag(idx)%time_avg = .TRUE. + allocate (ExtDiag(idx)%data(nblks)) + do nb = 1,nblks + ExtDiag(idx)%data(nb)%var3 => IntDiag(nb)%dq3dt(:,:,2) + enddo + + idx = idx + 1 + ExtDiag(idx)%axes = 3 + ExtDiag(idx)%name = 'dq3dt_shalcnv' + ExtDiag(idx)%desc = 'water vapor specific humidity tendency due to shallow convection' + ExtDiag(idx)%unit = 'kg kg-1 s-1' + ExtDiag(idx)%mod_name = 'gfs_phys' + ExtDiag(idx)%time_avg = .TRUE. + allocate (ExtDiag(idx)%data(nblks)) + do nb = 1,nblks + ExtDiag(idx)%data(nb)%var3 => IntDiag(nb)%dq3dt(:,:,3) + enddo + + idx = idx + 1 + ExtDiag(idx)%axes = 3 + ExtDiag(idx)%name = 'dq3dt_mp' + ExtDiag(idx)%desc = 'water vapor specific humidity tendency due to microphysics' + ExtDiag(idx)%unit = 'kg kg-1 s-1' + ExtDiag(idx)%mod_name = 'gfs_phys' + ExtDiag(idx)%time_avg = .TRUE. + allocate (ExtDiag(idx)%data(nblks)) + do nb = 1,nblks + ExtDiag(idx)%data(nb)%var3 => IntDiag(nb)%dq3dt(:,:,4) + enddo + + idx = idx + 1 + ExtDiag(idx)%axes = 3 + ExtDiag(idx)%name = 'dq3dt_o3pbl' + ExtDiag(idx)%desc = 'ozone mixing ratio tendency due to PBL' + ExtDiag(idx)%unit = 'kg kg-1 s-1' + ExtDiag(idx)%mod_name = 'gfs_phys' + ExtDiag(idx)%time_avg = .TRUE. + allocate (ExtDiag(idx)%data(nblks)) + do nb = 1,nblks + ExtDiag(idx)%data(nb)%var3 => IntDiag(nb)%dq3dt(:,:,5) + enddo + + idx = idx + 1 + ExtDiag(idx)%axes = 3 + ExtDiag(idx)%name = 'dq3dt_o3prodloss' + ExtDiag(idx)%desc = 'ozone concentration tendency due to production and loss rate' + ExtDiag(idx)%unit = 'kg kg-1 s-1' + ExtDiag(idx)%mod_name = 'gfs_phys' + ExtDiag(idx)%time_avg = .TRUE. + allocate (ExtDiag(idx)%data(nblks)) + do nb = 1,nblks + ExtDiag(idx)%data(nb)%var3 => IntDiag(nb)%dq3dt(:,:,6) + enddo + + idx = idx + 1 + ExtDiag(idx)%axes = 3 + ExtDiag(idx)%name = 'dq3dt_o3mix' + ExtDiag(idx)%desc = 'ozone concentration tendency due to ozone mixing ratio' + ExtDiag(idx)%unit = 'kg kg-1 s-1' + ExtDiag(idx)%mod_name = 'gfs_phys' + ExtDiag(idx)%time_avg = .TRUE. + allocate (ExtDiag(idx)%data(nblks)) + do nb = 1,nblks + ExtDiag(idx)%data(nb)%var3 => IntDiag(nb)%dq3dt(:,:,7) + enddo + + idx = idx + 1 + ExtDiag(idx)%axes = 3 + ExtDiag(idx)%name = 'dq3dt_o3temp' + ExtDiag(idx)%desc = 'ozone concentration tendency due to temperature' + ExtDiag(idx)%unit = 'kg kg-1 s-1' + ExtDiag(idx)%mod_name = 'gfs_phys' + ExtDiag(idx)%time_avg = .TRUE. + allocate (ExtDiag(idx)%data(nblks)) + do nb = 1,nblks + ExtDiag(idx)%data(nb)%var3 => IntDiag(nb)%dq3dt(:,:,8) + enddo + + idx = idx + 1 + ExtDiag(idx)%axes = 3 + ExtDiag(idx)%name = 'dq3dt_o3column' + ExtDiag(idx)%desc = 'ozone concentration tendency due to overhead ozone column' + ExtDiag(idx)%unit = 'kg kg-1 s-1' + ExtDiag(idx)%mod_name = 'gfs_phys' + ExtDiag(idx)%time_avg = .TRUE. + allocate (ExtDiag(idx)%data(nblks)) + do nb = 1,nblks + ExtDiag(idx)%data(nb)%var3 => IntDiag(nb)%dq3dt(:,:,9) + enddo + end if if_qdiag3d + + idx = idx + 1 + ExtDiag(idx)%axes = 3 + ExtDiag(idx)%name = 'dq3dt_phys' + ExtDiag(idx)%desc = 'water vapor specific humidity tendency due to physics' + ExtDiag(idx)%unit = 'kg kg-1 s-1' + ExtDiag(idx)%mod_name = 'gfs_phys' + ExtDiag(idx)%time_avg = .TRUE. + allocate (ExtDiag(idx)%data(nblks)) + do nb = 1,nblks + ExtDiag(idx)%data(nb)%var3 => IntDiag(nb)%dq3dt(:,:,10) + enddo + idx = idx + 1 + ExtDiag(idx)%axes = 3 + ExtDiag(idx)%name = 'dq3dt_o3phys' + ExtDiag(idx)%desc = 'ozone concentration tendency due to physics' + ExtDiag(idx)%unit = 'kg kg-1 s-1' + ExtDiag(idx)%mod_name = 'gfs_phys' + ExtDiag(idx)%time_avg = .TRUE. + allocate (ExtDiag(idx)%data(nblks)) + do nb = 1,nblks + ExtDiag(idx)%data(nb)%var3 => IntDiag(nb)%dq3dt(:,:,11) + enddo + + idx = idx + 1 + ExtDiag(idx)%axes = 3 + ExtDiag(idx)%name = 'dq3dt_nophys' + ExtDiag(idx)%desc = 'water vapor specific humidity tendency due to non-physics processes' + ExtDiag(idx)%unit = 'kg kg-1 s-1' + ExtDiag(idx)%mod_name = 'gfs_phys' + ExtDiag(idx)%time_avg = .TRUE. + allocate (ExtDiag(idx)%data(nblks)) + do nb = 1,nblks + ExtDiag(idx)%data(nb)%var3 => IntDiag(nb)%dq3dt(:,:,12) + enddo + + idx = idx + 1 + ExtDiag(idx)%axes = 3 + ExtDiag(idx)%name = 'dq3dt_o3nophys' + ExtDiag(idx)%desc = 'ozone concentration tendency due to non-physics processes' + ExtDiag(idx)%unit = 'kg kg-1 s-1' + ExtDiag(idx)%mod_name = 'gfs_phys' + ExtDiag(idx)%time_avg = .TRUE. + allocate (ExtDiag(idx)%data(nblks)) + do nb = 1,nblks + ExtDiag(idx)%data(nb)%var3 => IntDiag(nb)%dq3dt(:,:,13) + enddo + +#endif + end if if_ldiag3d !rab !rab do num = 1,5+Mdl_parms%pl_coeff @@ -3408,13 +3729,13 @@ subroutine GFS_externaldiag_populate (ExtDiag, Model, Statein, Stateout, Sfcprop !idx = idx + 1 !ExtDiag(idx)%axes = 2 - !ExtDiag(idx)%name = 'ktop_shallow' + !ExtDiag(idx)%name = 'ktop_plume' !ExtDiag(idx)%desc = 'k-level of plume top' !ExtDiag(idx)%unit = 'n/a' !ExtDiag(idx)%mod_name = 'gfs_sfc' !allocate (ExtDiag(idx)%data(nblks)) !do nb = 1,nblks - ! ExtDiag(idx)%data(nb)%var2 => real(IntDiag(nb)%ktop_shallow(:),kind=kind_phys) + ! ExtDiag(idx)%data(nb)%var2 => real(IntDiag(nb)%ktop_plume(:),kind=kind_phys) !enddo idx = idx + 1 @@ -3519,6 +3840,120 @@ subroutine GFS_externaldiag_populate (ExtDiag, Model, Statein, Stateout, Sfcprop do nb = 1,nblks ExtDiag(idx)%data(nb)%var3 => Tbd(nb)%QKE(:,:) enddo + + if (Model%bl_mynn_output > 0) then + + idx = idx + 1 + ExtDiag(idx)%axes = 3 + ExtDiag(idx)%name = 'edmf_a' + ExtDiag(idx)%desc = 'updraft area fraction (from mynn)' + ExtDiag(idx)%unit = '-' + ExtDiag(idx)%mod_name = 'gfs_phys' + allocate (ExtDiag(idx)%data(nblks)) + do nb = 1,nblks + ExtDiag(idx)%data(nb)%var3 => IntDiag(nb)%edmf_a(:,:) + enddo + + idx = idx + 1 + ExtDiag(idx)%axes = 3 + ExtDiag(idx)%name = 'edmf_w' + ExtDiag(idx)%desc = 'mean updraft vertical veloctity (mynn)' + ExtDiag(idx)%unit = 'm s-1' + ExtDiag(idx)%mod_name = 'gfs_phys' + allocate (ExtDiag(idx)%data(nblks)) + do nb = 1,nblks + ExtDiag(idx)%data(nb)%var3 => IntDiag(nb)%edmf_w(:,:) + enddo + + idx = idx + 1 + ExtDiag(idx)%axes = 3 + ExtDiag(idx)%name = 'edmf_qt' + ExtDiag(idx)%desc = 'updraft total water (from mynn)' + ExtDiag(idx)%unit = 'kg kg-1' + ExtDiag(idx)%mod_name = 'gfs_phys' + allocate (ExtDiag(idx)%data(nblks)) + do nb = 1,nblks + ExtDiag(idx)%data(nb)%var3 => IntDiag(nb)%edmf_qt(:,:) + enddo + + idx = idx + 1 + ExtDiag(idx)%axes = 3 + ExtDiag(idx)%name = 'edmf_thl' + ExtDiag(idx)%desc = 'mean liquid potential temperature (mynn)' + ExtDiag(idx)%unit = 'K' + ExtDiag(idx)%mod_name = 'gfs_phys' + allocate (ExtDiag(idx)%data(nblks)) + do nb = 1,nblks + ExtDiag(idx)%data(nb)%var3 => IntDiag(nb)%edmf_thl(:,:) + enddo + + idx = idx + 1 + ExtDiag(idx)%axes = 3 + ExtDiag(idx)%name = 'edmf_ent' + ExtDiag(idx)%desc = 'updraft entrainment rate (from mynn)' + ExtDiag(idx)%unit = 'm-1' + ExtDiag(idx)%mod_name = 'gfs_phys' + allocate (ExtDiag(idx)%data(nblks)) + do nb = 1,nblks + ExtDiag(idx)%data(nb)%var3 => IntDiag(nb)%edmf_ent(:,:) + enddo + + idx = idx + 1 + ExtDiag(idx)%axes = 3 + ExtDiag(idx)%name = 'edmf_qc' + ExtDiag(idx)%desc = 'mean updraft liquid water (mynn)' + ExtDiag(idx)%unit = 'kg kg-1' + ExtDiag(idx)%mod_name = 'gfs_phys' + allocate (ExtDiag(idx)%data(nblks)) + do nb = 1,nblks + ExtDiag(idx)%data(nb)%var3 => IntDiag(nb)%edmf_qc(:,:) + enddo + + idx = idx + 1 + ExtDiag(idx)%axes = 3 + ExtDiag(idx)%name = 'sub_thl' + ExtDiag(idx)%desc = 'subsidence temperature tendency (from mynn)' + ExtDiag(idx)%unit = 'K s-1' + ExtDiag(idx)%mod_name = 'gfs_phys' + allocate (ExtDiag(idx)%data(nblks)) + do nb = 1,nblks + ExtDiag(idx)%data(nb)%var3 => IntDiag(nb)%sub_thl(:,:) + enddo + + idx = idx + 1 + ExtDiag(idx)%axes = 3 + ExtDiag(idx)%name = 'sub_sqv' + ExtDiag(idx)%desc = 'subsidence water vapor tendency (mynn)' + ExtDiag(idx)%unit = 'kg kg-1 s-1' + ExtDiag(idx)%mod_name = 'gfs_phys' + allocate (ExtDiag(idx)%data(nblks)) + do nb = 1,nblks + ExtDiag(idx)%data(nb)%var3 => IntDiag(nb)%sub_sqv(:,:) + enddo + + idx = idx + 1 + ExtDiag(idx)%axes = 3 + ExtDiag(idx)%name = 'det_thl' + ExtDiag(idx)%desc = 'detrainment temperature tendency (from mynn)' + ExtDiag(idx)%unit = 'K s-1' + ExtDiag(idx)%mod_name = 'gfs_phys' + allocate (ExtDiag(idx)%data(nblks)) + do nb = 1,nblks + ExtDiag(idx)%data(nb)%var3 => IntDiag(nb)%det_thl(:,:) + enddo + + idx = idx + 1 + ExtDiag(idx)%axes = 3 + ExtDiag(idx)%name = 'det_sqv' + ExtDiag(idx)%desc = 'detrainment water vapor tendency (mynn)' + ExtDiag(idx)%unit = 'kg kg-1 s-1' + ExtDiag(idx)%mod_name = 'gfs_phys' + allocate (ExtDiag(idx)%data(nblks)) + do nb = 1,nblks + ExtDiag(idx)%data(nb)%var3 => IntDiag(nb)%det_sqv(:,:) + enddo + + endif endif #endif @@ -3722,6 +4157,40 @@ subroutine GFS_externaldiag_populate (ExtDiag, Model, Statein, Stateout, Sfcprop !rab ExtDiag(idx)%unit = 'kg/kg/s' !rab ExtDiag(idx)%mod_name = 'gfs_phys' + ! Auxiliary 2d arrays to output (for debugging) + do num=1,Model%naux2d + write (xtra,'(I2.2)') num + idx = idx + 1 + ExtDiag(idx)%axes = 2 + ExtDiag(idx)%name = 'aux2d_'//trim(xtra) + ExtDiag(idx)%desc = 'auxiliary 2d array '//trim(xtra) + ExtDiag(idx)%unit = 'unknown' + ExtDiag(idx)%mod_name = 'gfs_phys' + ExtDiag(idx)%intpl_method = 'bilinear' + ExtDiag(idx)%time_avg = Model%aux2d_time_avg(num) + allocate (ExtDiag(idx)%data(nblks)) + do nb = 1,nblks + ExtDiag(idx)%data(nb)%var2 => IntDiag(nb)%aux2d(:,num) + enddo + enddo + + ! Auxiliary 3d arrays to output (for debugging) + do num=1,Model%naux3d + write (xtra,'(I2.2)') num + idx = idx + 1 + ExtDiag(idx)%axes = 3 + ExtDiag(idx)%name = 'aux3d_'//trim(xtra) + ExtDiag(idx)%desc = 'auxiliary 3d array '//trim(xtra) + ExtDiag(idx)%unit = 'unknown' + ExtDiag(idx)%mod_name = 'gfs_phys' + ExtDiag(idx)%intpl_method = 'bilinear' + ExtDiag(idx)%time_avg = Model%aux3d_time_avg(num) + allocate (ExtDiag(idx)%data(nblks)) + do nb = 1,nblks + ExtDiag(idx)%data(nb)%var3 => IntDiag(nb)%aux3d(:,:,num) + enddo + enddo + end subroutine GFS_externaldiag_populate #ifdef CCPP diff --git a/gfsphysics/GFS_layer/GFS_physics_driver.F90 b/gfsphysics/GFS_layer/GFS_physics_driver.F90 index 962aaee54..14911d13f 100644 --- a/gfsphysics/GFS_layer/GFS_physics_driver.F90 +++ b/gfsphysics/GFS_layer/GFS_physics_driver.F90 @@ -2284,6 +2284,7 @@ subroutine GFS_physics_driver & ! enddo !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! +!## CCPP ##* GFS_surface_generic.F90/GFS_surface_generic_post_run ! --- ... Boundary Layer and Free atmospheic turbulence parameterization ! ! in order to achieve heat storage within canopy layer, in the canopy heat @@ -2312,6 +2313,7 @@ subroutine GFS_physics_driver & evapq(i) = evap(i) / hefac(i) enddo endif +!*## CCPP ## ! ! if (lprnt) write(0,*)' tsea3=',Sfcprop%tsfc(ipr),' slmsk=',Sfcprop%slmsk(ipr) & ! &, ' kdt=',kdt,' evap=',evapq(ipr) @@ -2354,7 +2356,7 @@ subroutine GFS_physics_driver & Diag%v10m, Sfcprop%ffmm, Sfcprop%ffhh, Sfcprop%tsfc,hflxq,& evapq,stress, wind, kpbl, Statein%prsi, del, Statein%prsl,& Statein%prslk, Statein%phii, Statein%phil, dtp, dusfc1, & - dvsfc1, dtsfc1, dqsfc1, dkt, Diag%hpbl, kinver, & + dvsfc1, dtsfc1, dqsfc1, dkt, Tbd%hpbl, kinver, & Model%xkzm_m, Model%xkzm_h, Model%xkzm_s, Model%xkzminv, & lprnt, ipr, me) ! if (lprnt) then @@ -2379,7 +2381,7 @@ subroutine GFS_physics_driver & Sfcprop%ffmm, Sfcprop%ffhh, Sfcprop%tsfc, hflxq, evapq, & stress, wind, kpbl, Statein%prsi, del, Statein%prsl, & Statein%prslk, Statein%phii, Statein%phil, dtp, & - Model%dspheat, dusfc1, dvsfc1, dtsfc1, dqsfc1, Diag%hpbl, & + Model%dspheat, dusfc1, dvsfc1, dtsfc1, dqsfc1, Tbd%hpbl, & kinver, Model%xkzm_m, Model%xkzm_h, Model%xkzm_s) !*## CCPP ## elseif (Model%isatmedmf == 1) then ! updated version of satmedmfvdif (May 2019) @@ -2387,12 +2389,12 @@ subroutine GFS_physics_driver & call satmedmfvdifq(ix, im, levs, nvdiff, ntcw, ntiw, ntke, & dvdt, dudt, dtdt, dqdt, & Statein%ugrs, Statein%vgrs, Statein%tgrs, Statein%qgrs, & - Radtend%htrsw, Radtend%htrlw, xmu, garea, & + Radtend%htrsw, Radtend%htrlw, xmu, garea, islmsk, snowd3, & Statein%prsik(1,1), rb, Sfcprop%zorl, Diag%u10m, Diag%v10m, & Sfcprop%ffmm, Sfcprop%ffhh, Sfcprop%tsfc, hflxq, evapq, & stress, wind, kpbl, Statein%prsi, del, Statein%prsl, & Statein%prslk, Statein%phii, Statein%phil, dtp, & - Model%dspheat, dusfc1, dvsfc1, dtsfc1, dqsfc1, Diag%hpbl, & + Model%dspheat, dusfc1, dvsfc1, dtsfc1, dqsfc1, Tbd%hpbl, & kinver, Model%xkzm_m, Model%xkzm_h, Model%xkzm_s, & Model%dspfac, Model%bl_upfr, Model%bl_dnfr) !*## CCPP ## @@ -2406,7 +2408,7 @@ subroutine GFS_physics_driver & Sfcprop%ffhh, Sfcprop%tsfc, qss, hflxq, evapq, stress, & wind, kpbl, Statein%prsi, del, Statein%prsl, & Statein%prslk, Statein%phii, Statein%phil, dtp, & - Model%dspheat, dusfc1, dvsfc1, dtsfc1, dqsfc1, Diag%hpbl,& + Model%dspheat, dusfc1, dvsfc1, dtsfc1, dqsfc1, Tbd%hpbl,& gamt, gamq, dkt, kinver, Model%xkzm_m, Model%xkzm_h, & Model%xkzm_s, lprnt, ipr, & Model%xkzminv, Model%moninq_fac) @@ -2418,7 +2420,7 @@ subroutine GFS_physics_driver & Sfcprop%ffhh, Sfcprop%tsfc, qss, hflxq, evapq, stress, & wind, kpbl, Statein%prsi, del, Statein%prsl, & Statein%prslk, Statein%phii, Statein%phil, dtp, & - Model%dspheat, dusfc1, dvsfc1, dtsfc1, dqsfc1, Diag%hpbl,& + Model%dspheat, dusfc1, dvsfc1, dtsfc1, dqsfc1, Tbd%hpbl,& gamt, gamq, dkt, kinver, Model%xkzm_m, Model%xkzm_h, & Model%xkzm_s, lprnt, ipr, & Model%xkzminv, Model%moninq_fac,islmsk) @@ -2442,7 +2444,7 @@ subroutine GFS_physics_driver & Sfcprop%ffmm, Sfcprop%ffhh, Sfcprop%tsfc, qss, hflxq, evapq,& stress, wind, kpbl, Statein%prsi, del, Statein%prsl, & Statein%prslk, Statein%phii, Statein%phil, dtp, & - Model%dspheat, dusfc1, dvsfc1, dtsfc1, dqsfc1, Diag%hpbl, & + Model%dspheat, dusfc1, dvsfc1, dtsfc1, dqsfc1, Tbd%hpbl, & gamt, gamq, dkt, kinver, Model%xkzm_m, Model%xkzm_h, & Model%xkzm_s, lprnt, ipr, & Model%xkzminv, Model%moninq_fac, Model%rbcr) @@ -2454,7 +2456,7 @@ subroutine GFS_physics_driver & Sfcprop%tsfc, qss, hflxq, evapq, stress, wind, kpbl, & Statein%prsi, del, Statein%prsl, Statein%prslk, & Statein%phii, Statein%phil, dtp, dusfc1, dvsfc1, & - dtsfc1, dqsfc1, Diag%hpbl, gamt, gamq, dkt, kinver, & + dtsfc1, dqsfc1, Tbd%hpbl, gamt, gamq, dkt, kinver, & Model%xkzm_m, Model%xkzm_h) else call moninp(ix, im, levs, nvdiff, dvdt, dudt, dtdt, dqdt, & @@ -2463,7 +2465,7 @@ subroutine GFS_physics_driver & Sfcprop%tsfc, qss, hflxq, evapq, stress, wind, kpbl, & Statein%prsi, del, Statein%prsl, Statein%phii, & Statein%phil, dtp, dusfc1, dvsfc1, dtsfc1, dqsfc1, & - Diag%hpbl, gamt, gamq, dkt, Model%xkzm_m, Model%xkzm_h) + Tbd%hpbl, gamt, gamq, dkt, Model%xkzm_m, Model%xkzm_h) endif endif ! end if_hybedmf @@ -2616,7 +2618,7 @@ subroutine GFS_physics_driver & Diag%v10m, Sfcprop%ffmm, Sfcprop%ffhh, Sfcprop%tsfc, hflxq, & evapq, stress, wind, kpbl, Statein%prsi, del, Statein%prsl, & Statein%prslk, Statein%phii, Statein%phil, dtp, dusfc1, & - dvsfc1, dtsfc1, dqsfc1, dkt, Diag%hpbl, kinver, & + dvsfc1, dtsfc1, dqsfc1, dkt, Tbd%hpbl, kinver, & Model%xkzm_m, Model%xkzm_h, Model%xkzm_s, Model%xkzminv, & lprnt, ipr, me) !*## CCPP ## @@ -2632,7 +2634,7 @@ subroutine GFS_physics_driver & Sfcprop%ffmm, Sfcprop%ffhh, Sfcprop%tsfc, hflxq, evapq, & stress, wind, kpbl, Statein%prsi, del, Statein%prsl, & Statein%prslk, Statein%phii, Statein%phil, dtp, & - Model%dspheat, dusfc1, dvsfc1, dtsfc1, dqsfc1, Diag%hpbl, & + Model%dspheat, dusfc1, dvsfc1, dtsfc1, dqsfc1, Tbd%hpbl, & kinver, Model%xkzm_m, Model%xkzm_h, Model%xkzm_s) !*## CCPP ## elseif (Model%isatmedmf == 1) then ! updated version of satmedmfvdif (May 2019) @@ -2640,12 +2642,12 @@ subroutine GFS_physics_driver & call satmedmfvdifq(ix, im, levs, nvdiff, ntcw, ntiwx, ntkev, & dvdt, dudt, dtdt, dvdftra, & Statein%ugrs, Statein%vgrs, Statein%tgrs, vdftra, & - Radtend%htrsw, Radtend%htrlw, xmu, garea, & + Radtend%htrsw, Radtend%htrlw, xmu, garea, islmsk, snowd3, & Statein%prsik(1,1), rb, Sfcprop%zorl, Diag%u10m, Diag%v10m, & Sfcprop%ffmm, Sfcprop%ffhh, Sfcprop%tsfc, hflxq, evapq, & stress, wind, kpbl, Statein%prsi, del, Statein%prsl, & Statein%prslk, Statein%phii, Statein%phil, dtp, & - Model%dspheat, dusfc1, dvsfc1, dtsfc1, dqsfc1, Diag%hpbl, & + Model%dspheat, dusfc1, dvsfc1, dtsfc1, dqsfc1, Tbd%hpbl, & kinver, Model%xkzm_m, Model%xkzm_h, Model%xkzm_s, & Model%dspfac, Model%bl_upfr, Model%bl_dnfr) !*## CCPP ## @@ -2661,7 +2663,7 @@ subroutine GFS_physics_driver & Sfcprop%ffhh, Sfcprop%tsfc, qss, hflxq, evapq, stress, & wind, kpbl, Statein%prsi, del, Statein%prsl, & Statein%prslk, Statein%phii, Statein%phil, dtp, & - Model%dspheat, dusfc1, dvsfc1, dtsfc1, dqsfc1, Diag%hpbl, & + Model%dspheat, dusfc1, dvsfc1, dtsfc1, dqsfc1, Tbd%hpbl, & gamt, gamq, dkt, kinver, Model%xkzm_m, Model%xkzm_h, & Model%xkzm_s, lprnt, ipr, & Model%xkzminv, Model%moninq_fac) @@ -2675,7 +2677,7 @@ subroutine GFS_physics_driver & Sfcprop%ffhh, Sfcprop%tsfc, qss, hflxq, evapq, stress, & wind, kpbl, Statein%prsi, del, Statein%prsl, & Statein%prslk, Statein%phii, Statein%phil, dtp, & - Model%dspheat, dusfc1, dvsfc1, dtsfc1, dqsfc1, Diag%hpbl, & + Model%dspheat, dusfc1, dvsfc1, dtsfc1, dqsfc1, Tbd%hpbl, & gamt, gamq, dkt, kinver, Model%xkzm_m, Model%xkzm_h, & Model%xkzm_s, lprnt, ipr, & Model%xkzminv, Model%moninq_fac,islmsk) @@ -2687,7 +2689,7 @@ subroutine GFS_physics_driver & Sfcprop%ffmm, Sfcprop%ffhh, Sfcprop%tsfc, qss, hflxq, evapq, & stress, wind, kpbl, Statein%prsi, del, Statein%prsl, & Statein%prslk, Statein%phii, Statein%phil, dtp, & - Model%dspheat, dusfc1, dvsfc1, dtsfc1, dqsfc1, Diag%hpbl, & + Model%dspheat, dusfc1, dvsfc1, dtsfc1, dqsfc1, Tbd%hpbl, & gamt, gamq, dkt, kinver, Model%xkzm_m, Model%xkzm_h, & Model%xkzm_s, lprnt, ipr, & Model%xkzminv, Model%moninq_fac, Model%rbcr) @@ -2699,7 +2701,7 @@ subroutine GFS_physics_driver & Sfcprop%tsfc, qss, hflxq, evapq, stress, wind, kpbl, & Statein%prsi, del, Statein%prsl, Statein%prslk, & Statein%phii, Statein%phil, dtp, dusfc1, dvsfc1, & - dtsfc1, dqsfc1, Diag%hpbl, gamt, gamq, dkt, kinver, & + dtsfc1, dqsfc1, Tbd%hpbl, gamt, gamq, dkt, kinver, & Model%xkzm_m, Model%xkzm_h) else call moninp(ix, im, levs, nvdiff, dvdt, dudt, dtdt, dvdftra, & @@ -2708,7 +2710,7 @@ subroutine GFS_physics_driver & Sfcprop%tsfc, qss, hflxq, evapq, stress, wind, kpbl, & Statein%prsi, del, Statein%prsl, Statein%phii, & Statein%phil, dtp, dusfc1, dvsfc1, dtsfc1, dqsfc1, & - Diag%hpbl, gamt, gamq, dkt, Model%xkzm_m, Model%xkzm_h) + Tbd%hpbl, gamt, gamq, dkt, Model%xkzm_m, Model%xkzm_h) endif endif ! end if_satmedmf @@ -3648,7 +3650,7 @@ subroutine GFS_physics_driver & ! if (lprnt) write(0,*)'aftshocgq0=',Stateout%gq0(ipr,:,1) ! if (lprnt) write(0,*)' aft shoc tke=',clw(ipr,1:25,ntk), & ! &' kdt=',kdt,'xlon=',grid%xlon(ipr),' xlat=',grid%xlat(ipr) -! if (lprnt) write(0,*)' aftshoccld=',tbd%phy_f3d(ipr,:,ntot3d-2)*100 +! if (lprnt) write(0,*)' aftshoccld=',Tbd%phy_f3d(ipr,:,ntot3d-2)*100 ! if (lprnt) write(0,*)' aftshocice=',clw(ipr,:,1) ! if (lprnt) write(0,*)' aftshocwat=',clw(ipr,:,2) ! write(1000+me,*)' at latitude = ',lat @@ -4281,7 +4283,7 @@ subroutine GFS_physics_driver & Statein%pgr, Statein%phil, clw, Stateout%gq0, & Stateout%gt0, Stateout%gu0, Stateout%gv0, rain1, & kbot, ktop, kcnv, islmsk, Statein%vvl, ncld, & - Diag%hpbl, hflxq, evapq, ud_mf, dt_mf, cnvw, cnvc,& + Tbd%hpbl, hflxq, evapq, ud_mf, dt_mf, cnvw, cnvc, & Model%clam_shal, Model%c0s_shal, Model%c1_shal, & Model%pgcon_shal) !*## CCPP ## @@ -4325,7 +4327,7 @@ subroutine GFS_physics_driver & Stateout%gq0(:,:,1), Stateout%gt0, & Stateout%gu0, Stateout%gv0, Model%fscav, & rain1, kbot, ktop, kcnv, islmsk, garea, & - Statein%vvl, ncld, Diag%hpbl, ud_mf, & + Statein%vvl, ncld, Tbd%hpbl, ud_mf, & dt_mf, cnvw, cnvc, & Model%clam_shal, Model%c0s_shal, Model%c1_shal, & Model%pgcon_shal, Model%asolfac_shal) @@ -4929,7 +4931,7 @@ subroutine GFS_physics_driver & ! if (lprnt) write(0,*)' qsnwb=',qsnw(ipr,:),' kdt=',kdt ! if (lprnt) write(0,*)' qglb=',qgl(ipr,:),' kdt=',kdt ! if (lprnt) write(0,*)' rhc=',rhc(ipr,:),' kdt=',kdt,' kk=',kk -! if (lprnt) write(0,*)' cloudsb=',tbd%phy_f3d(ipr,:,1)*100,' kdt=',kdt +! if (lprnt) write(0,*)' cloudsb=',Tbd%phy_f3d(ipr,:,1)*100,' kdt=',kdt ! if (lprnt) write(0,*)' cloudsb=',Tbd%phy_f3d(ipr,:,1)*100,' kdt=',kdt ! if (lprnt) write(0,*)' clcn=',clcn(ipr,:)*100,' kdt=',kdt ! txa(:,:) = Stateout%gq0(:,:,1) @@ -4942,8 +4944,8 @@ subroutine GFS_physics_driver & Statein%prsi, Statein%phil, Statein%phii, & Statein%vvl, clw(1,1,2), QLCN, clw(1,1,1), QICN, & Radtend%htrlw, Radtend%htrsw, w_upi, cf_upi, & - FRLAND, Diag%HPBL, CNV_MFD, CNV_DQLDT, & -! FRLAND, Diag%HPBL, CNV_MFD, CNV_PRC3, CNV_DQLDT, & + FRLAND, Tbd%Hpbl, CNV_MFD, CNV_DQLDT, & +! FRLAND, Tbd%Hpbl, CNV_MFD, CNV_PRC3, CNV_DQLDT, & CLCN, Stateout%gu0, Stateout%gv0, Diag%dusfc, & Diag%dvsfc, dusfc1, dvsfc1, dusfc1, dvsfc1, & CNV_FICE, CNV_NDROP, CNV_NICE, Stateout%gq0(1,1,1), & @@ -4985,7 +4987,7 @@ subroutine GFS_physics_driver & ! if (lprnt) write(0,*)' cli1aft=',stateout%gq0(ipr,:,ntiw),' kdt=',kdt ! if (ntgl > 0 .and. lprnt) & ! write(0,*)' cgw1aft=',stateout%gq0(ipr,:,ntgl),' kdt=',kdt -! if (lprnt) write(0,*)' cloudsm=',tbd%phy_f3d(ipr,:,1)*100,' kdt=',kdt +! if (lprnt) write(0,*)' cloudsm=',Tbd%phy_f3d(ipr,:,1)*100,' kdt=',kdt ! if (lprnt) write(0,*)' clw2aft=',stateout%gq0(ipr,:,ntcw),' kdt=',kdt ! if (lprnt) write(0,*)' qrna=',qrn(ipr,:),' kdt=',kdt ! if (lprnt) write(0,*)' qsnwa=',qsnw(ipr,:),' kdt=',kdt @@ -5032,7 +5034,7 @@ subroutine GFS_physics_driver & endif !*## CCPP ## -! if (lprnt) write(0,*)' cloudsm=',tbd%phy_f3d(ipr,:,1)*100,' kdt=',kdt +! if (lprnt) write(0,*)' cloudsm=',Tbd%phy_f3d(ipr,:,1)*100,' kdt=',kdt ! if (lprnt) write(0,*)' clw2aft=',stateout%gq0(ipr,:,ntcw),' kdt=',kdt ! if (lprnt) write(0,*)' qrna=',qrn(ipr,:),' kdt=',kdt ! if (lprnt) write(0,*)' qsnwa=',qsnw(ipr,:),' kdt=',kdt diff --git a/gfsphysics/GFS_layer/GFS_restart.F90 b/gfsphysics/GFS_layer/GFS_restart.F90 index 8e80f6f99..52b3d7b83 100644 --- a/gfsphysics/GFS_layer/GFS_restart.F90 +++ b/gfsphysics/GFS_layer/GFS_restart.F90 @@ -123,11 +123,11 @@ subroutine GFS_restart_populate (Restart, Model, Statein, Stateout, Sfcprop, & #ifdef CCPP ! GF if (Model%imfdeepcnv == 3) then - Restart%num3d = Restart%num3d + 2 + Restart%num3d = Restart%num3d + 3 endif ! MYNN PBL if (Model%do_mynnedmf) then - Restart%num3d = Restart%num3d + 8 + Restart%num3d = Restart%num3d + 9 endif #endif @@ -188,7 +188,7 @@ subroutine GFS_restart_populate (Restart, Model, Statein, Stateout, Sfcprop, & !--- RAP/HRRR-specific variables, 2D num = offset + ndiag_rst ! GF - if (Model%imfdeepcnv == 3) then + if (Model%imfdeepcnv == Model%imfdeepcnv_gf) then num = num + 1 Restart%name2d(num) = 'gf_2d_conv_act' do nb = 1,nblks @@ -267,7 +267,7 @@ subroutine GFS_restart_populate (Restart, Model, Statein, Stateout, Sfcprop, & num = Model%ntot3d ! GF - if (Model%imfdeepcnv == 3) then + if (Model%imfdeepcnv == Model%imfdeepcnv_gf) then num = num + 1 Restart%name3d(num) = 'gf_3d_prevst' do nb = 1,nblks @@ -278,6 +278,11 @@ subroutine GFS_restart_populate (Restart, Model, Statein, Stateout, Sfcprop, & do nb = 1,nblks Restart%data(nb,num)%var3p => Tbd(nb)%prevsq(:,:) enddo + num = num + 1 + Restart%name3d(num) = 'gf_3d_qci_conv' + do nb = 1,nblks + Restart%data(nb,num)%var3p => Coupling(nb)%qci_conv(:,:) + enddo endif ! MYNN PBL if (Model%do_mynnedmf) then @@ -292,6 +297,11 @@ subroutine GFS_restart_populate (Restart, Model, Statein, Stateout, Sfcprop, & Restart%data(nb,num)%var3p => Tbd(nb)%qc_bl(:,:) enddo num = num + 1 + Restart%name3d(num) = 'mynn_3d_qi_bl' + do nb = 1,nblks + Restart%data(nb,num)%var3p => Tbd(nb)%qi_bl(:,:) + enddo + num = num + 1 Restart%name3d(num) = 'mynn_3d_el_pbl' do nb = 1,nblks Restart%data(nb,num)%var3p => Tbd(nb)%el_pbl(:,:) diff --git a/gfsphysics/GFS_layer/GFS_typedefs.F90 b/gfsphysics/GFS_layer/GFS_typedefs.F90 index 4ca8cc2ff..59bcb9a50 100644 --- a/gfsphysics/GFS_layer/GFS_typedefs.F90 +++ b/gfsphysics/GFS_layer/GFS_typedefs.F90 @@ -52,6 +52,9 @@ module GFS_typedefs private :: levozp, oz_coeff, levh2o, h2o_coeff, ntrcaer integer :: levozp, oz_coeff, levh2o, h2o_coeff, 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) + integer, parameter :: naux3dmax = 20 !< maximum number of auxiliary 3d arrays in output (for debugging) !> \section arg_table_GFS_typedefs !! \htmlinclude GFS_typedefs.html @@ -137,6 +140,7 @@ module GFS_typedefs #ifdef CCPP !--- restart information logical :: restart !< flag whether this is a coldstart (.false.) or a warmstart/restart (.true.) + logical :: cycling !< flag whether this is a coldstart (.false.) or a cycled run (.true.) !--- hydrostatic/non-hydrostatic flag logical :: hydrostatic !< flag whether this is a hydrostatic or non-hydrostatic run #endif @@ -266,6 +270,9 @@ module GFS_typedefs real (kind=kind_phys), pointer :: uustar (:) => null() !< boundary layer parameter real (kind=kind_phys), pointer :: oro (:) => null() !< orography real (kind=kind_phys), pointer :: oro_uf (:) => null() !< unfiltered orography + real (kind=kind_phys), pointer :: evap (:) => null() !< + real (kind=kind_phys), pointer :: hflx (:) => null() !< + real (kind=kind_phys), pointer :: qss (:) => null() !< !-- In/Out #ifdef CCPP @@ -518,6 +525,8 @@ module GFS_typedefs real (kind=kind_phys), pointer :: dqdti (:,:) => null() !< instantaneous total moisture tendency (kg/kg/s) real (kind=kind_phys), pointer :: ushfsfci(:) => null() !< instantaneous upward sensible heat flux (w/m**2) real (kind=kind_phys), pointer :: dkt (:,:) => null() !< instantaneous dkt diffusion coefficient for temperature (m**2/s) + real (kind=kind_phys), pointer :: qci_conv(:,:) => null() !< convective cloud condesate after rainout + contains procedure :: create => coupling_create !< allocate array data @@ -551,7 +560,17 @@ module GFS_typedefs #endif real(kind=kind_phys) :: fhzero !< hours between clearing of diagnostic buckets logical :: ldiag3d !< flag for 3d diagnostic fields + logical :: qdiag3d !< flag for 3d tracer diagnostic fields + logical :: flag_for_gwd_generic_tend !< true if GFS_GWD_generic should calculate tendencies + logical :: flag_for_pbl_generic_tend !< true if GFS_PBL_generic should calculate tendencies + logical :: flag_for_scnv_generic_tend !< true if GFS_DCNV_generic should calculate tendencies + logical :: flag_for_dcnv_generic_tend !< true if GFS_DCNV_generic should calculate tendencies logical :: lssav !< logical flag for storing diagnostics + integer :: naux2d !< number of auxiliary 2d arrays to output (for debugging) + integer :: naux3d !< number of auxiliary 3d arrays to output (for debugging) + logical, pointer :: aux2d_time_avg(:) !< flags for time averaging of auxiliary 2d arrays + logical, pointer :: aux3d_time_avg(:) !< flags for time averaging of auxiliary 3d arrays + real(kind=kind_phys) :: fhcyc !< frequency for surface data cycling (hours) integer :: thermodyn_id !< valid for GFS only for get_prs/phi integer :: sfcpress_id !< valid for GFS only for get_prs/phi @@ -578,7 +597,7 @@ module GFS_typedefs integer :: nblks !< for explicit data blocking: number of blocks integer, pointer :: blksz(:) !< for explicit data blocking: block sizes of all blocks #ifdef CCPP - integer, pointer :: blksz2(:) !< for explicit data blocking: block sizes of all blocks (duplicate) + integer :: ncols !< total number of columns for all blocks #endif !--- coupling parameters @@ -612,6 +631,9 @@ module GFS_typedefs real(kind=kind_phys) :: fhlwr !< frequency for longwave radiation (secs) integer :: nsswr !< integer trigger for shortwave radiation integer :: nslwr !< integer trigger for longwave radiation +#ifdef CCPP + integer :: nhfrad !< number of timesteps for which to call radiation on physics timestep (coldstarts) +#endif integer :: levr !< number of vertical levels for radiation calculations #ifdef CCPP integer :: levrp1 !< number of vertical levels for radiation calculations plus one @@ -865,7 +887,8 @@ module GFS_typedefs integer :: isatmedmf_vdifq = 1 !< flag for updated version of satmedmf (as of May 2019) #endif integer :: nmtvr !< number of topographic variables such as variance etc - !< used in the GWD parameterization + !< used in the GWD parameterization - 10 more added if + !< GSD orographic drag scheme is used integer :: jcap !< number of spectral wave trancation used only by sascnv shalcnv real(kind=kind_phys) :: cs_parm(10) !< tunable parameters for Chikira-Sugiyama convection real(kind=kind_phys) :: flgmin(2) !< [in] ice fraction bounds @@ -903,6 +926,7 @@ module GFS_typedefs integer :: bl_mynn_edmf_part !< flag to partitioning og the MF and ED areas integer :: bl_mynn_cloudmix !< flag to activate mixing of cloud species integer :: bl_mynn_mixqt !< flag to mix total water or individual species + integer :: bl_mynn_output !< flag to initialize and write out extra 3D arrays integer :: icloud_bl !< flag for coupling sgs clouds to radiation ! *DH ! MYJ switches @@ -1029,9 +1053,9 @@ module GFS_typedefs integer :: ntrac !< number of tracers #ifdef CCPP integer :: ntracp1 !< number of tracers plus one - integer :: ntqv !< tracer index for water vapor (specific humidity) integer :: nqrimef !< tracer index for mass weighted rime factor #endif + integer :: ntqv !< tracer index for water vapor (specific humidity) integer :: ntoz !< tracer index for ozone mixing ratio integer :: ntcw !< tracer index for cloud condensate (or liquid water) integer :: ntiw !< tracer index for ice water @@ -1101,6 +1125,7 @@ module GFS_typedefs #ifdef CCPP logical :: first_time_step !< flag signaling first time step for time integration routine logical :: restart !< flag whether this is a coldstart (.false.) or a warmstart/restart (.true.) + logical :: cycling !< flag whether this is a coldstart (.false.) or a cycled run (.true.) logical :: hydrostatic !< flag whether this is a hydrostatic or non-hydrostatic run #endif integer :: jdat(1:8) !< current forecast date and time @@ -1234,6 +1259,9 @@ module GFS_typedefs real (kind=kind_phys), pointer :: phy_f2d (:,:) => null() !< 2d arrays saved for restart real (kind=kind_phys), pointer :: phy_f3d (:,:,:) => null() !< 3d arrays saved for restart +!--- Diagnostic that needs to be carried over to the next time step (removed from diag_type) + real (kind=kind_phys), pointer :: hpbl (:) => null() !< Planetary boundary layer height + #ifndef CCPP !--- for explicit data blocking integer :: blkno !< block number of this block @@ -1250,6 +1278,7 @@ module GFS_typedefs !--- MYNN prognostic variables that can't be in the Intdiag or Interstitial DDTs real (kind=kind_phys), pointer :: CLDFRA_BL (:,:) => null() ! real (kind=kind_phys), pointer :: QC_BL (:,:) => null() ! + real (kind=kind_phys), pointer :: QI_BL (:,:) => null() ! real (kind=kind_phys), pointer :: el_pbl (:,:) => null() ! real (kind=kind_phys), pointer :: Sh3D (:,:) => null() ! real (kind=kind_phys), pointer :: qke (:,:) => null() ! @@ -1414,16 +1443,20 @@ module GFS_typedefs real (kind=kind_phys), pointer :: totgrpb(:) => null() !< accumulated graupel precipitation in bucket (kg/m2) #ifdef CCPP - !--- MYNN variables + !--- MYNN variables real (kind=kind_phys), pointer :: edmf_a (:,:) => null() ! real (kind=kind_phys), pointer :: edmf_w (:,:) => null() ! real (kind=kind_phys), pointer :: edmf_qt (:,:) => null() ! real (kind=kind_phys), pointer :: edmf_thl (:,:) => null() ! real (kind=kind_phys), pointer :: edmf_ent (:,:) => null() ! real (kind=kind_phys), pointer :: edmf_qc (:,:) => null() ! + real (kind=kind_phys), pointer :: sub_thl (:,:) => null() ! + real (kind=kind_phys), pointer :: sub_sqv (:,:) => null() ! + real (kind=kind_phys), pointer :: det_thl (:,:) => null() ! + real (kind=kind_phys), pointer :: det_sqv (:,:) => null() ! real (kind=kind_phys), pointer :: maxMF (:) => null() ! integer, pointer :: nupdraft (:) => null() ! - integer, pointer :: ktop_shallow (:) => null() ! + integer, pointer :: ktop_plume (:) => null() ! real (kind=kind_phys), pointer :: exch_h (:,:) => null() ! real (kind=kind_phys), pointer :: exch_m (:,:) => null() ! @@ -1452,7 +1485,6 @@ module GFS_typedefs real (kind=kind_phys), pointer :: dpt2m (:) => null() !< 2 meter dew point temperature real (kind=kind_phys), pointer :: zlvl (:) => null() !< layer 1 height (m) real (kind=kind_phys), pointer :: psurf (:) => null() !< surface pressure (Pa) - real (kind=kind_phys), pointer :: hpbl (:) => null() !< pbl height (m) real (kind=kind_phys), pointer :: pwat (:) => null() !< precipitable water real (kind=kind_phys), pointer :: t1 (:) => null() !< layer 1 temperature (K) real (kind=kind_phys), pointer :: q1 (:) => null() !< layer 1 specific humidity (kg/kg) @@ -1608,6 +1640,11 @@ module GFS_typedefs !< for black carbon, organic carbon, and sulfur dioxide ( ug/m**2/s ) real (kind=kind_phys), pointer :: aecm (:,:) => null() !< instantaneous aerosol column mass densities for !< pm2.5, black carbon, organic carbon, sulfate, dust, sea salt ( g/m**2 ) + + ! Auxiliary output arrays for debugging + real (kind=kind_phys), pointer :: aux2d(:,:) => null() !< auxiliary 2d arrays in output (for debugging) + real (kind=kind_phys), pointer :: aux3d(:,:,:)=> null() !< auxiliary 2d arrays in output (for debugging) + contains procedure :: create => diag_create procedure :: rad_zero => diag_rad_zero @@ -1704,7 +1741,6 @@ module GFS_typedefs real (kind=kind_phys), pointer :: ep1d_ice(:) => null() !< real (kind=kind_phys), pointer :: ep1d_land(:) => null() !< real (kind=kind_phys), pointer :: ep1d_ocean(:) => null() !< - real (kind=kind_phys), pointer :: evap(:) => null() !< real (kind=kind_phys), pointer :: evapq(:) => null() !< real (kind=kind_phys), pointer :: evap_ice(:) => null() !< real (kind=kind_phys), pointer :: evap_land(:) => null() !< @@ -1753,7 +1789,6 @@ module GFS_typedefs 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 :: hflx(:) => null() !< real (kind=kind_phys), pointer :: hflxq(:) => null() !< real (kind=kind_phys), pointer :: hflx_ice(:) => null() !< real (kind=kind_phys), pointer :: hflx_land(:) => null() !< @@ -1831,7 +1866,6 @@ module GFS_typedefs real (kind=kind_phys), pointer :: qlyr(:,:) => null() !< real (kind=kind_phys), pointer :: qrn(:,:) => null() !< real (kind=kind_phys), pointer :: qsnw(:,:) => null() !< - real (kind=kind_phys), pointer :: qss(:) => null() !< real (kind=kind_phys), pointer :: qss_ice(:) => null() !< real (kind=kind_phys), pointer :: qss_land(:) => null() !< real (kind=kind_phys), pointer :: qss_ocean(:) => null() !< @@ -1851,6 +1885,7 @@ module GFS_typedefs real (kind=kind_phys), pointer :: runoff(:) => null() !< real (kind=kind_phys), pointer :: save_q(:,:,:) => null() !< real (kind=kind_phys), pointer :: save_t(:,:) => null() !< + real (kind=kind_phys), pointer :: save_tcp(:,:) => null() !< real (kind=kind_phys), pointer :: save_u(:,:) => null() !< real (kind=kind_phys), pointer :: save_v(:,:) => null() !< real (kind=kind_phys), pointer :: sbsno(:) => null() !< @@ -2013,6 +2048,11 @@ module GFS_typedefs real (kind=kind_phys), pointer :: qs_r(:,:) => null() !< real (kind=kind_phys), pointer :: qg_r(:,:) => null() !< + !-- GSD drag suite + real (kind=kind_phys), pointer :: varss(:) => null() !< + real (kind=kind_phys), pointer :: ocss(:) => null() !< + real (kind=kind_phys), pointer :: oa4ss(:,:) => null() !< + real (kind=kind_phys), pointer :: clxss(:,:) => null() !< !-- Ferrier-Aligo MP scheme real (kind=kind_phys), pointer :: f_rain (:,:) => null() !< @@ -2230,6 +2270,9 @@ subroutine sfcprop_create (Sfcprop, IM, Model) allocate (Sfcprop%uustar (IM)) allocate (Sfcprop%oro (IM)) allocate (Sfcprop%oro_uf (IM)) + allocate (Sfcprop%evap (IM)) + allocate (Sfcprop%hflx (IM)) + allocate (Sfcprop%qss (IM)) Sfcprop%slope = clear_val Sfcprop%shdmin = clear_val @@ -2242,6 +2285,9 @@ subroutine sfcprop_create (Sfcprop, IM, Model) Sfcprop%uustar = clear_val Sfcprop%oro = clear_val Sfcprop%oro_uf = clear_val + Sfcprop%evap = clear_val + Sfcprop%hflx = clear_val + Sfcprop%qss = clear_val !--- In/Out allocate (Sfcprop%hice (IM)) @@ -2749,6 +2795,13 @@ subroutine coupling_create (Coupling, IM, Model) Coupling%nifa2d = clear_val endif +#ifdef CCPP + if (Model%imfdeepcnv == Model%imfdeepcnv_gf) then + allocate (Coupling%qci_conv (IM,Model%levs)) + Coupling%qci_conv = clear_val + endif +#endif + end subroutine coupling_create @@ -2830,8 +2883,14 @@ subroutine control_initialize (Model, nlunit, fn_nml, me, master, & !--- BEGIN NAMELIST VARIABLES real(kind=kind_phys) :: fhzero = 0.0 !< hours between clearing of diagnostic buckets logical :: ldiag3d = .false. !< flag for 3d diagnostic fields + logical :: qdiag3d = .false. !< flag for 3d tracer diagnostic fields logical :: lssav = .false. !< logical flag for storing diagnostics + integer :: naux2d = 0 !< number of auxiliary 2d arrays to output (for debugging) + integer :: naux3d = 0 !< number of auxiliary 3d arrays to output (for debugging) + logical :: aux2d_time_avg(1:naux2dmax) = .false. !< flags for time averaging of auxiliary 2d arrays + logical :: aux3d_time_avg(1:naux3dmax) = .false. !< flags for time averaging of auxiliary 3d arrays + logical :: cycling = .false. !< flag to activate extra cycling procedures real(kind=kind_phys) :: fhcyc = 0. !< frequency for surface data cycling (hours) integer :: thermodyn_id = 1 !< valid for GFS only for get_prs/phi integer :: sfcpress_id = 1 !< valid for GFS only for get_prs/phi @@ -2848,6 +2907,9 @@ subroutine control_initialize (Model, nlunit, fn_nml, me, master, & !--- radiation parameters real(kind=kind_phys) :: fhswr = 3600. !< frequency for shortwave radiation (secs) real(kind=kind_phys) :: fhlwr = 3600. !< frequency for longwave radiation (secs) +#ifdef CCPP + integer :: nhfrad = 0 !< number of timesteps for which to call radiation on physics timestep (coldstarts) +#endif integer :: levr = -99 !< number of vertical levels for radiation calculations integer :: nfxr = 39+6 !< second dimension of input/output array fluxr logical :: iaerclm = .false. !< flag for initializing aero data @@ -3078,6 +3140,7 @@ subroutine control_initialize (Model, nlunit, fn_nml, me, master, & integer :: bl_mynn_edmf_part = 0 integer :: bl_mynn_cloudmix = 1 integer :: bl_mynn_mixqt = 0 + integer :: bl_mynn_output = 0 integer :: icloud_bl = 1 ! *DH logical :: do_myjsfc = .false. !< flag for MYJ surface layer scheme @@ -3247,7 +3310,8 @@ subroutine control_initialize (Model, nlunit, fn_nml, me, master, & NAMELIST /gfs_physics_nml/ & !--- general parameters - fhzero, ldiag3d, lssav, fhcyc, & + fhzero, ldiag3d, qdiag3d, lssav, naux2d, naux3d, & + aux2d_time_avg, aux3d_time_avg, fhcyc, & thermodyn_id, sfcpress_id, & !--- coupling parameters cplflx, cplwav, cplwav2atm, cplchm, lsidea, & @@ -3256,6 +3320,7 @@ subroutine control_initialize (Model, nlunit, fn_nml, me, master, & isot, iems, iaer, icliq_sw, iovr_sw, iovr_lw, ictm, isubc_sw,& isubc_lw, crick_proof, ccnorm, lwhtr, swhtr, & #ifdef CCPP + nhfrad, & ! --- RRTMGP do_RRTMGP, active_gases, nGases, rrtmgp_root, & lw_file_gas, lw_file_clouds, rrtmgp_nBandsLW, rrtmgp_nGptsLW,& @@ -3296,7 +3361,8 @@ subroutine control_initialize (Model, nlunit, fn_nml, me, master, & ! DH* TODO - move to MYNN namelist section bl_mynn_cloudpdf, bl_mynn_edmf, bl_mynn_edmf_mom, & bl_mynn_edmf_tke, bl_mynn_edmf_part, bl_mynn_cloudmix, & - bl_mynn_mixqt, icloud_bl, bl_mynn_tkeadvect, gwd_opt, & + bl_mynn_mixqt, bl_mynn_output, icloud_bl, bl_mynn_tkeadvect, & + gwd_opt, & ! *DH do_myjsfc, do_myjpbl, & hwrf_samfdeep, hwrf_samfshal, & @@ -3405,6 +3471,68 @@ subroutine control_initialize (Model, nlunit, fn_nml, me, master, & #endif Model%fhzero = fhzero Model%ldiag3d = ldiag3d + Model%qdiag3d = qdiag3d + if (Model%qdiag3d .and. .not. Model%ldiag3d) then + write(0,*) 'Logic error in GFS_typedefs.F90: qdiag3d requires ldiag3d' + stop + endif + Model%flag_for_gwd_generic_tend = .true. + Model%flag_for_pbl_generic_tend = .true. + Model%flag_for_scnv_generic_tend = .true. + Model%flag_for_dcnv_generic_tend = .true. + +#ifdef CCPP + + if(gwd_opt==1) then + if(me==master) & + write(0,*) 'FLAG: gwd_opt==1 so gwd not generic' + Model%flag_for_gwd_generic_tend=.false. + elseif(me==master) then + write(0,*) 'NO FLAG: gwd is generic' + endif + + if(satmedmf .and. isatmedmf==0) then + if(me==master) & + write(0,*) 'FLAG: satmedmf and isatedmf=0 so pbl not generic' + Model%flag_for_pbl_generic_tend=.false. + elseif(satmedmf .and. isatmedmf==1) then + if(me==master) & + write(0,*) 'FLAG: satmedmf and isatedmf=1 so pbl not generic' + Model%flag_for_pbl_generic_tend=.false. + else if(hybedmf) then + if(me==master) & + write(0,*) 'FLAG: hybedmf so pbl not generic' + Model%flag_for_pbl_generic_tend=.false. + else if(do_mynnedmf) then + if(me==master) & + write(0,*) 'FLAG: do_mynnedmf so pbl not generic' + Model%flag_for_pbl_generic_tend=.false. + elseif(me==master) then + write(0,*) 'NO FLAG: pbl is generic' + endif + + if(imfshalcnv == Model%imfshalcnv_gf) then + if(me==master) & + write(0,*) 'FLAG: imfshalcnv_gf so scnv not generic' + Model%flag_for_scnv_generic_tend=.false. + ! else if(imfshalcnv == Model%imfshalcnv_samf) then + ! write(0,*) 'FLAG: imfshalcnv_samf so scnv not generic' + ! Model%flag_for_scnv_generic_tend=.false. + elseif(me==master) then + write(0,*) 'NO FLAG: scnv is generic' + endif + + if(imfdeepcnv == Model%imfdeepcnv_gf) then + if(me==master) & + write(0,*) 'FLAG: imfdeepcnv_gf so dcnv not generic' + Model%flag_for_dcnv_generic_tend=.false. + ! else if(imfdeepcnv == Model%imfdeepcnv_samf) then + ! write(0,*) 'FLAG: imfdeepcnv_samf so dcnv not generic' + ! Model%flag_for_dcnv_generic_tend=.false. + elseif(me==master) then + write(0,*) 'NO FLAG: dcnv is generic' + endif +#endif ! !VAY-ugwp --- set some GW-related switches ! @@ -3413,6 +3541,26 @@ subroutine control_initialize (Model, nlunit, fn_nml, me, master, & Model%do_tofd = do_tofd Model%lssav = lssav + ! + if (naux2d>naux2dmax) then + write(0,*) "Error, number of requested auxiliary 2d arrays exceeds the maximum defined in GFS_typedefs.F90" + stop + endif + if (naux3d>naux3dmax) then + write(0,*) "Error, number of requested auxiliary 3d arrays exceeds the maximum defined in GFS_typedefs.F90" + stop + endif + Model%naux2d = naux2d + Model%naux3d = naux3d + if (Model%naux2d>0) then + allocate(Model%aux2d_time_avg(1:naux2d)) + Model%aux2d_time_avg(1:naux2d) = aux2d_time_avg(1:naux2d) + end if + if (Model%naux3d>0) then + allocate(Model%aux3d_time_avg(1:naux3d)) + Model%aux3d_time_avg(1:naux3d) = aux3d_time_avg(1:naux3d) + end if + ! Model%fhcyc = fhcyc Model%thermodyn_id = thermodyn_id Model%sfcpress_id = sfcpress_id @@ -3441,8 +3589,7 @@ subroutine control_initialize (Model, nlunit, fn_nml, me, master, & allocate(Model%blksz(1:Model%nblks)) Model%blksz = blksz #ifdef CCPP - allocate(Model%blksz2(1:Model%nblks)) - Model%blksz2 = blksz + Model%ncols = sum(Model%blksz) #endif !--- coupling parameters @@ -3472,6 +3619,17 @@ subroutine control_initialize (Model, nlunit, fn_nml, me, master, & Model%fhlwr = fhlwr Model%nsswr = nint(fhswr/Model%dtp) Model%nslwr = nint(fhlwr/Model%dtp) +#ifdef CCPP + if (restart) then + Model%nhfrad = 0 + if (Model%me == Model%master .and. nhfrad>0) & + write(*,'(a)') 'Disable high-frequency radiation calls for restart run' + else + Model%nhfrad = nhfrad + if (Model%me == Model%master .and. nhfrad>0) & + write(*,'(a,i0)') 'Number of high-frequency radiation calls for coldstart run: ', nhfrad + endif +#endif if (levr < 0) then Model%levr = levs else @@ -3666,12 +3824,6 @@ subroutine control_initialize (Model, nlunit, fn_nml, me, master, & Model%do_aw = do_aw Model%cs_parm = cs_parm Model%do_shoc = do_shoc -!#ifdef CCPP -! if (Model%do_shoc) then -! print *, "Error, update of SHOC from May 22 2019 not yet in CCPP" -! stop -! end if -!#endif Model%shoc_parm = shoc_parm Model%shocaftcnv = shocaftcnv Model%shoc_cld = shoc_cld @@ -3754,12 +3906,17 @@ subroutine control_initialize (Model, nlunit, fn_nml, me, master, & Model%bl_mynn_edmf_tke = bl_mynn_edmf_tke Model%bl_mynn_cloudmix = bl_mynn_cloudmix Model%bl_mynn_mixqt = bl_mynn_mixqt + Model%bl_mynn_output = bl_mynn_output Model%bl_mynn_edmf_part = bl_mynn_edmf_part Model%bl_mynn_tkeadvect = bl_mynn_tkeadvect Model%grav_settling = grav_settling Model%icloud_bl = icloud_bl ! *DH Model%gwd_opt = gwd_opt + if (Model%gwd_opt==3 .or. Model%gwd_opt==33) then + ! Add 10 more orographic static fields for GSD drag scheme + Model%nmtvr = 24 + end if Model%do_myjsfc = do_myjsfc Model%do_myjpbl = do_myjpbl #endif @@ -3877,9 +4034,7 @@ subroutine control_initialize (Model, nlunit, fn_nml, me, master, & #endif allocate (Model%tracer_names(Model%ntrac)) Model%tracer_names(:) = tracer_names(:) -#ifdef CCPP Model%ntqv = 1 -#endif #ifdef MULTI_GASES Model%nto = get_tracer_index(Model%tracer_names, 'spfo', Model%me, Model%master, Model%debug) Model%nto2 = get_tracer_index(Model%tracer_names, 'spfo2', Model%me, Model%master, Model%debug) @@ -4009,6 +4164,7 @@ subroutine control_initialize (Model, nlunit, fn_nml, me, master, & #ifdef CCPP Model%first_time_step = .true. Model%restart = restart + Model%cycling = cycling Model%hydrostatic = hydrostatic #endif Model%jdat(1:8) = jdat(1:8) @@ -4065,15 +4221,11 @@ subroutine control_initialize (Model, nlunit, fn_nml, me, master, & !--- set nrcm -!#ifndef CCPP if (Model%ras) then Model%nrcm = min(nrcmax, Model%levs-1) * (Model%dtp/1200.d0) + 0.10001d0 else Model%nrcm = 2 endif -!#else -! Model%nrcm = 2 -!#endif !--- cal_pre if (Model%cal_pre) then @@ -4117,7 +4269,8 @@ subroutine control_initialize (Model, nlunit, fn_nml, me, master, & ' boundary layer turbulence and shallow convection', & ' bl_mynn_cloudpdf=',Model%bl_mynn_cloudpdf, & ' bl_mynn_mixlength=',Model%bl_mynn_mixlength, & - ' bl_mynn_edmf=',Model%bl_mynn_edmf + ' bl_mynn_edmf=',Model%bl_mynn_edmf, & + ' bl_mynn_output=',Model%bl_mynn_output endif #endif @@ -4588,7 +4741,16 @@ subroutine control_print(Model) print *, ' fn_nml : ', trim(Model%fn_nml) print *, ' fhzero : ', Model%fhzero print *, ' ldiag3d : ', Model%ldiag3d + print *, ' qdiag3d : ', Model%qdiag3d print *, ' lssav : ', Model%lssav + print *, ' naux2d : ', Model%naux2d + print *, ' naux3d : ', Model%naux3d + if (Model%naux2d>0) then + print *, ' aux2d_time_avg : ', Model%aux2d_time_avg + endif + if (Model%naux3d>0) then + print *, ' aux3d_time_avg : ', Model%aux3d_time_avg + endif print *, ' fhcyc : ', Model%fhcyc print *, ' thermodyn_id : ', Model%thermodyn_id print *, ' sfcpress_id : ', Model%sfcpress_id @@ -4606,6 +4768,9 @@ subroutine control_print(Model) print *, ' latr : ', Model%latr print *, ' blksz(1) : ', Model%blksz(1) print *, ' blksz(nblks) : ', Model%blksz(Model%nblks) +#ifdef CCPP + print *, ' Model%ncols : ', Model%ncols +#endif print *, ' ' print *, 'coupling parameters' print *, ' cplflx : ', Model%cplflx @@ -4629,6 +4794,9 @@ subroutine control_print(Model) print *, ' fhlwr : ', Model%fhlwr print *, ' nsswr : ', Model%nsswr print *, ' nslwr : ', Model%nslwr +#ifdef CCPP + print *, ' nhfrad : ', Model%nhfrad +#endif print *, ' levr : ', Model%levr print *, ' nfxr : ', Model%nfxr #ifdef CCPP @@ -4895,9 +5063,9 @@ subroutine control_print(Model) print *, ' tracer_names : ', Model%tracer_names print *, ' ntrac : ', Model%ntrac #ifdef CCPP - print *, ' ntqv : ', Model%ntqv print *, ' nqrimef : ', Model%nqrimef #endif + print *, ' ntqv : ', Model%ntqv print *, ' ntoz : ', Model%ntoz print *, ' ntcw : ', Model%ntcw print *, ' ntiw : ', Model%ntiw @@ -4960,6 +5128,7 @@ subroutine control_print(Model) print *, ' sec : ', Model%sec print *, ' first_time_step : ', Model%first_time_step print *, ' restart : ', Model%restart + print *, ' cycling : ', Model%cycling print *, ' hydrostatic : ', Model%hydrostatic #endif endif @@ -5101,7 +5270,6 @@ subroutine tbd_create (Tbd, IM, Model) Tbd%acvb = clear_val Tbd%acvt = clear_val - if (Model%cplflx .or. Model%cplchm) then allocate (Tbd%drain_cpl (IM)) allocate (Tbd%dsnow_cpl (IM)) @@ -5131,6 +5299,9 @@ subroutine tbd_create (Tbd, IM, Model) ! if (Model%do_shoc) Tbd%phy_f3d(:,1,Model%ntot3d-1) = 3.0 ! if (Model%do_shoc) Tbd%phy_f3d(:,:,Model%ntot3d-1) = 1.0 + allocate (Tbd%hpbl (IM)) + Tbd%hpbl = clear_val + #ifndef CCPP Tbd%blkno = BLKNO #endif @@ -5157,6 +5328,7 @@ subroutine tbd_create (Tbd, IM, Model) !print*,"Allocating all MYNN-EDMF variables:" allocate (Tbd%cldfra_bl (IM,Model%levs)) allocate (Tbd%qc_bl (IM,Model%levs)) + allocate (Tbd%qi_bl (IM,Model%levs)) allocate (Tbd%el_pbl (IM,Model%levs)) allocate (Tbd%sh3d (IM,Model%levs)) allocate (Tbd%qke (IM,Model%levs)) @@ -5166,6 +5338,7 @@ subroutine tbd_create (Tbd, IM, Model) !print*,"Allocating all MYNN-EDMF variables:" Tbd%cldfra_bl = clear_val Tbd%qc_bl = clear_val + Tbd%qi_bl = clear_val Tbd%el_pbl = clear_val Tbd%sh3d = clear_val Tbd%qke = zero @@ -5356,7 +5529,6 @@ subroutine diag_create (Diag, IM, Model) allocate (Diag%dpt2m (IM)) allocate (Diag%zlvl (IM)) allocate (Diag%psurf (IM)) - allocate (Diag%hpbl (IM)) allocate (Diag%pwat (IM)) allocate (Diag%t1 (IM)) allocate (Diag%q1 (IM)) @@ -5411,11 +5583,12 @@ subroutine diag_create (Diag, IM, Model) !--- 3D diagnostics if (Model%ldiag3d) then - allocate (Diag%du3dt (IM,Model%levs,4)) - allocate (Diag%dv3dt (IM,Model%levs,4)) - allocate (Diag%dt3dt (IM,Model%levs,7)) - allocate (Diag%dq3dt (IM,Model%levs,9)) -! allocate (Diag%dq3dt (IM,Model%levs,oz_coeff+5)) + allocate (Diag%du3dt (IM,Model%levs,8)) + allocate (Diag%dv3dt (IM,Model%levs,8)) + allocate (Diag%dt3dt (IM,Model%levs,11)) + if (Model%qdiag3d) then + allocate (Diag%dq3dt (IM,Model%levs,13)) + endif !--- needed to allocate GoCart coupling fields ! allocate (Diag%upd_mf (IM,Model%levs)) ! allocate (Diag%dwn_mf (IM,Model%levs)) @@ -5508,28 +5681,38 @@ subroutine diag_create (Diag, IM, Model) #ifdef CCPP !--- MYNN variables: if (Model%do_mynnedmf) then - !print*,"Allocating all MYNN-EDMF variables:" - allocate (Diag%edmf_a (IM,Model%levs)) - allocate (Diag%edmf_w (IM,Model%levs)) - allocate (Diag%edmf_qt (IM,Model%levs)) - allocate (Diag%edmf_thl (IM,Model%levs)) - allocate (Diag%edmf_ent (IM,Model%levs)) - allocate (Diag%edmf_qc (IM,Model%levs)) + if (Model%bl_mynn_output .ne. 0) then + allocate (Diag%edmf_a (IM,Model%levs)) + allocate (Diag%edmf_w (IM,Model%levs)) + allocate (Diag%edmf_qt (IM,Model%levs)) + allocate (Diag%edmf_thl (IM,Model%levs)) + allocate (Diag%edmf_ent (IM,Model%levs)) + allocate (Diag%edmf_qc (IM,Model%levs)) + allocate (Diag%sub_thl (IM,Model%levs)) + allocate (Diag%sub_sqv (IM,Model%levs)) + allocate (Diag%det_thl (IM,Model%levs)) + allocate (Diag%det_sqv (IM,Model%levs)) + endif allocate (Diag%nupdraft (IM)) allocate (Diag%maxmf (IM)) - allocate (Diag%ktop_shallow(IM)) + allocate (Diag%ktop_plume(IM)) allocate (Diag%exch_h (IM,Model%levs)) allocate (Diag%exch_m (IM,Model%levs)) - !print*,"Initializing all MYNN-EDMF variables with ",clear_val - Diag%edmf_a = clear_val - Diag%edmf_w = clear_val - Diag%edmf_qt = clear_val - Diag%edmf_thl = clear_val - Diag%edmf_ent = clear_val - Diag%edmf_qc = clear_val + if (Model%bl_mynn_output .ne. 0) then + Diag%edmf_a = clear_val + Diag%edmf_w = clear_val + Diag%edmf_qt = clear_val + Diag%edmf_thl = clear_val + Diag%edmf_ent = clear_val + Diag%edmf_qc = clear_val + Diag%sub_thl = clear_val + Diag%sub_sqv = clear_val + Diag%det_thl = clear_val + Diag%det_sqv = clear_val + endif Diag%nupdraft = 0 Diag%maxmf = clear_val - Diag%ktop_shallow = 0 + Diag%ktop_plume = 0 Diag%exch_h = clear_val Diag%exch_m = clear_val endif @@ -5572,6 +5755,16 @@ subroutine diag_create (Diag, IM, Model) endif #endif + ! Auxiliary arrays in output for debugging + if (Model%naux2d>0) then + allocate (Diag%aux2d(IM,Model%naux2d)) + Diag%aux2d = clear_val + endif + if (Model%naux3d>0) then + allocate (Diag%aux3d(IM,Model%levs,Model%naux3d)) + Diag%aux3d = clear_val + endif + !--- diagnostics for coupled chemistry if (Model%cplchm) call Diag%chem_init(IM,Model) @@ -5590,6 +5783,7 @@ end subroutine diag_create subroutine diag_rad_zero(Diag, Model) class(GFS_diag_type) :: Diag type(GFS_control_type), intent(in) :: Model + integer :: i Diag%fluxr = zero Diag%topfsw%upfxc = zero @@ -5612,6 +5806,7 @@ subroutine diag_phys_zero (Diag, Model, linit, iauwindow_center) logical,optional, intent(in) :: linit, iauwindow_center logical set_totprcp + integer :: i !--- In/Out Diag%srunoff = zero @@ -5658,7 +5853,6 @@ subroutine diag_phys_zero (Diag, Model, linit, iauwindow_center) Diag%dpt2m = zero Diag%zlvl = zero Diag%psurf = zero - Diag%hpbl = zero Diag%pwat = zero Diag%t1 = zero Diag%q1 = zero @@ -5722,7 +5916,9 @@ subroutine diag_phys_zero (Diag, Model, linit, iauwindow_center) Diag%du3dt = zero Diag%dv3dt = zero Diag%dt3dt = zero -! Diag%dq3dt = zero + if (Model%qdiag3d) then + Diag%dq3dt = zero + endif ! Diag%upd_mf = zero ! Diag%dwn_mf = zero ! Diag%det_mf = zero @@ -5812,6 +6008,7 @@ subroutine diag_phys_zero (Diag, Model, linit, iauwindow_center) Diag%totsnw = zero Diag%totgrp = zero endif + end subroutine diag_phys_zero !----------------------- @@ -6002,7 +6199,6 @@ subroutine interstitial_create (Interstitial, IM, Model) allocate (Interstitial%ep1d_ice (IM)) allocate (Interstitial%ep1d_land (IM)) allocate (Interstitial%ep1d_ocean (IM)) - allocate (Interstitial%evap (IM)) allocate (Interstitial%evapq (IM)) allocate (Interstitial%evap_ice (IM)) allocate (Interstitial%evap_land (IM)) @@ -6048,7 +6244,6 @@ subroutine interstitial_create (Interstitial, IM, Model) allocate (Interstitial%h2o_pres (levh2o)) allocate (Interstitial%hefac (IM)) allocate (Interstitial%hffac (IM)) - allocate (Interstitial%hflx (IM)) allocate (Interstitial%hflxq (IM)) allocate (Interstitial%hflx_ice (IM)) allocate (Interstitial%hflx_land (IM)) @@ -6081,7 +6276,6 @@ subroutine interstitial_create (Interstitial, IM, Model) allocate (Interstitial%prnum (IM,Model%levs)) allocate (Interstitial%qlyr (IM,Model%levr+LTP)) allocate (Interstitial%prcpmp (IM)) - allocate (Interstitial%qss (IM)) allocate (Interstitial%qss_ice (IM)) allocate (Interstitial%qss_land (IM)) allocate (Interstitial%qss_ocean (IM)) @@ -6097,6 +6291,7 @@ subroutine interstitial_create (Interstitial, IM, Model) allocate (Interstitial%runoff (IM)) allocate (Interstitial%save_q (IM,Model%levs,Model%ntrac)) allocate (Interstitial%save_t (IM,Model%levs)) + allocate (Interstitial%save_tcp (IM,Model%levs)) allocate (Interstitial%save_u (IM,Model%levs)) allocate (Interstitial%save_v (IM,Model%levs)) allocate (Interstitial%sbsno (IM)) @@ -6225,6 +6420,13 @@ subroutine interstitial_create (Interstitial, IM, Model) allocate (Interstitial%dudt_mtb (IM,Model%levs)) allocate (Interstitial%dudt_ogw (IM,Model%levs)) allocate (Interstitial%dudt_tms (IM,Model%levs)) +!-- GSD drag suite + if (Model%gwd_opt==3 .or. Model%gwd_opt==33) then + allocate (Interstitial%varss (IM)) + allocate (Interstitial%ocss (IM)) + allocate (Interstitial%oa4ss (IM,4)) + allocate (Interstitial%clxss (IM,4)) + end if ! ! Allocate arrays that are conditional on physics choices if (Model%imp_physics == Model%imp_physics_gfdl .or. Model%imp_physics == Model%imp_physics_thompson) then @@ -6341,9 +6543,9 @@ subroutine interstitial_setup_tracers(Interstitial, Model) if (Model%imp_physics == Model%imp_physics_thompson) then if (Model%ltaerosol) then - Interstitial%nvdiff = 10 + Interstitial%nvdiff = 12 else - Interstitial%nvdiff = 7 + Interstitial%nvdiff = 9 endif if (Model%satmedmf) Interstitial%nvdiff = Interstitial%nvdiff + 1 Interstitial%nncl = 5 @@ -6442,7 +6644,6 @@ subroutine interstitial_setup_tracers(Interstitial, Model) do n=2,Model%ntrac if ( n /= Model%ntcw .and. n /= Model%ntiw .and. n /= Model%ntclamt .and. & n /= Model%ntrw .and. n /= Model%ntsw .and. n /= Model%ntrnc .and. & -! n /= Model%ntlnc .and. n /= Model%ntinc .and. & n /= Model%ntsnc .and. n /= Model%ntgl .and. n /= Model%ntgnc) then tracers = tracers + 1 if (Model%ntke == n ) then @@ -6646,7 +6847,6 @@ subroutine interstitial_phys_reset (Interstitial, Model) Interstitial%ep1d_ice = huge Interstitial%ep1d_land = huge Interstitial%ep1d_ocean = huge - Interstitial%evap = clear_val Interstitial%evapq = clear_val Interstitial%evap_ice = huge Interstitial%evap_land = huge @@ -6688,7 +6888,6 @@ subroutine interstitial_phys_reset (Interstitial, Model) Interstitial%gwdcv = clear_val Interstitial%hefac = clear_val Interstitial%hffac = clear_val - Interstitial%hflx = clear_val Interstitial%hflxq = clear_val Interstitial%hflx_ice = huge Interstitial%hflx_land = huge @@ -6709,7 +6908,6 @@ subroutine interstitial_phys_reset (Interstitial, Model) Interstitial%oc = clear_val Interstitial%prcpmp = clear_val Interstitial%prnum = clear_val - Interstitial%qss = clear_val Interstitial%qss_ice = huge Interstitial%qss_land = huge Interstitial%qss_ocean = huge @@ -6725,6 +6923,7 @@ subroutine interstitial_phys_reset (Interstitial, Model) Interstitial%runoff = clear_val Interstitial%save_q = clear_val Interstitial%save_t = clear_val + Interstitial%save_tcp = clear_val Interstitial%save_u = clear_val Interstitial%save_v = clear_val Interstitial%sbsno = clear_val @@ -6799,6 +6998,13 @@ subroutine interstitial_phys_reset (Interstitial, Model) Interstitial%dudt_mtb = clear_val Interstitial%dudt_ogw = clear_val Interstitial%dudt_tms = clear_val +!-- GSD drag suite + if (Model%gwd_opt==3 .or. Model%gwd_opt==33) then + Interstitial%varss = clear_val + Interstitial%ocss = clear_val + Interstitial%oa4ss = clear_val + Interstitial%clxss = clear_val + end if ! ! Reset fields that are conditional on physics choices if (Model%imp_physics == Model%imp_physics_gfdl .or. Model%imp_physics == Model%imp_physics_thompson) then @@ -6961,7 +7167,6 @@ subroutine interstitial_print(Interstitial, Model, mpirank, omprank, blkno) write (0,*) 'sum(Interstitial%ep1d_ice ) = ', sum(Interstitial%ep1d_ice ) write (0,*) 'sum(Interstitial%ep1d_land ) = ', sum(Interstitial%ep1d_land ) write (0,*) 'sum(Interstitial%ep1d_ocean ) = ', sum(Interstitial%ep1d_ocean ) - write (0,*) 'sum(Interstitial%evap ) = ', sum(Interstitial%evap ) write (0,*) 'sum(Interstitial%evapq ) = ', sum(Interstitial%evapq ) write (0,*) 'sum(Interstitial%evap_ice ) = ', sum(Interstitial%evap_ice ) write (0,*) 'sum(Interstitial%evap_land ) = ', sum(Interstitial%evap_land ) @@ -7007,7 +7212,6 @@ subroutine interstitial_print(Interstitial, Model, mpirank, omprank, blkno) write (0,*) 'sum(Interstitial%gwdcv ) = ', sum(Interstitial%gwdcv ) write (0,*) 'sum(Interstitial%hefac ) = ', sum(Interstitial%hefac ) write (0,*) 'sum(Interstitial%hffac ) = ', sum(Interstitial%hffac ) - write (0,*) 'sum(Interstitial%hflx ) = ', sum(Interstitial%hflx ) write (0,*) 'sum(Interstitial%hflxq ) = ', sum(Interstitial%hflxq ) write (0,*) 'sum(Interstitial%hflx_ice ) = ', sum(Interstitial%hflx_ice ) write (0,*) 'sum(Interstitial%hflx_land ) = ', sum(Interstitial%hflx_land ) @@ -7043,7 +7247,6 @@ subroutine interstitial_print(Interstitial, Model, mpirank, omprank, blkno) write (0,*) 'sum(Interstitial%prcpmp ) = ', sum(Interstitial%prcpmp ) write (0,*) 'sum(Interstitial%prnum ) = ', sum(Interstitial%prnum ) write (0,*) 'sum(Interstitial%qlyr ) = ', sum(Interstitial%qlyr ) - write (0,*) 'sum(Interstitial%qss ) = ', sum(Interstitial%qss ) write (0,*) 'sum(Interstitial%qss_ice ) = ', sum(Interstitial%qss_ice ) write (0,*) 'sum(Interstitial%qss_land ) = ', sum(Interstitial%qss_land ) write (0,*) 'sum(Interstitial%qss_ocean ) = ', sum(Interstitial%qss_ocean ) @@ -7062,6 +7265,7 @@ subroutine interstitial_print(Interstitial, Model, mpirank, omprank, blkno) write (0,*) 'sum(Interstitial%runoff ) = ', sum(Interstitial%runoff ) write (0,*) 'sum(Interstitial%save_q ) = ', sum(Interstitial%save_q ) write (0,*) 'sum(Interstitial%save_t ) = ', sum(Interstitial%save_t ) + write (0,*) 'sum(Interstitial%save_tcp ) = ', sum(Interstitial%save_tcp ) write (0,*) 'sum(Interstitial%save_u ) = ', sum(Interstitial%save_u ) write (0,*) 'sum(Interstitial%save_v ) = ', sum(Interstitial%save_v ) write (0,*) 'sum(Interstitial%sbsno ) = ', sum(Interstitial%sbsno ) @@ -7147,6 +7351,13 @@ subroutine interstitial_print(Interstitial, Model, mpirank, omprank, blkno) write (0,*) 'sum(Interstitial%dudt_mtb ) = ', sum(Interstitial%dudt_mtb ) write (0,*) 'sum(Interstitial%dudt_ogw ) = ', sum(Interstitial%dudt_ogw ) write (0,*) 'sum(Interstitial%dudt_tms ) = ', sum(Interstitial%dudt_tms ) +!-- GSD drag suite + if (Model%gwd_opt==3 .or. Model%gwd_opt==33) then + write (0,*) 'sum(Interstitial%varss ) = ', sum(Interstitial%varss) + write (0,*) 'sum(Interstitial%ocss ) = ', sum(Interstitial%ocss) + write (0,*) 'sum(Interstitial%oa4ss ) = ', sum(Interstitial%oa4ss) + write (0,*) 'sum(Interstitial%clxss ) = ', sum(Interstitial%clxss) + end if ! ! Print arrays that are conditional on physics choices if (Model%imp_physics == Model%imp_physics_gfdl .or. Model%imp_physics == Model%imp_physics_thompson) then diff --git a/gfsphysics/GFS_layer/GFS_typedefs.meta b/gfsphysics/GFS_layer/GFS_typedefs.meta index 4343bdd2e..337b3fce8 100644 --- a/gfsphysics/GFS_layer/GFS_typedefs.meta +++ b/gfsphysics/GFS_layer/GFS_typedefs.meta @@ -200,6 +200,7 @@ long_name = number concentration of water-friendly aerosols units = kg-1 dimensions = (horizontal_dimension,vertical_dimension) + active = (index_for_water_friendly_aerosols > 0) type = real kind = kind_phys [qgrs(:,:,index_for_ice_friendly_aerosols)] @@ -207,6 +208,7 @@ long_name = number concentration of ice-friendly aerosols units = kg-1 dimensions = (horizontal_dimension,vertical_dimension) + active = (index_for_ice_friendly_aerosols > 0) type = real kind = kind_phys [qgrs(:,:,index_for_liquid_cloud_number_concentration)] @@ -216,6 +218,7 @@ dimensions = (horizontal_dimension,vertical_dimension) type = real kind = kind_phys + active = (index_for_liquid_cloud_number_concentration > 0) [qgrs(:,:,index_for_ice_cloud_number_concentration)] standard_name = ice_number_concentration long_name = number concentration of ice @@ -382,6 +385,7 @@ dimensions = (horizontal_dimension,vertical_dimension) type = real kind = kind_phys + active = (index_for_water_friendly_aerosols > 0) [gq0(:,:,index_for_ice_friendly_aerosols)] standard_name = ice_friendly_aerosol_number_concentration_updated_by_physics long_name = number concentration of ice-friendly aerosols updated by physics @@ -389,6 +393,7 @@ dimensions = (horizontal_dimension,vertical_dimension) type = real kind = kind_phys + active = (index_for_ice_friendly_aerosols > 0) [gq0(:,:,index_for_liquid_cloud_number_concentration)] standard_name = cloud_droplet_number_concentration_updated_by_physics long_name = number concentration of cloud droplets updated by physics @@ -396,6 +401,7 @@ dimensions = (horizontal_dimension,vertical_dimension) type = real kind = kind_phys + active = (index_for_liquid_cloud_number_concentration > 0) [gq0(:,:,index_for_ice_cloud_number_concentration)] standard_name = ice_number_concentration_updated_by_physics long_name = number concentration of ice updated by physics @@ -1276,6 +1282,27 @@ dimensions = (horizontal_dimension) type = real kind = kind_phys +[evap] + standard_name = kinematic_surface_upward_latent_heat_flux + long_name = kinematic surface upward latent heat flux + units = kg kg-1 m s-1 + dimensions = (horizontal_dimension) + type = real + kind = kind_phys +[hflx] + standard_name = kinematic_surface_upward_sensible_heat_flux + long_name = kinematic surface upward sensible heat flux + units = K m s-1 + dimensions = (horizontal_dimension) + type = real + kind = kind_phys +[qss] + standard_name = surface_specific_humidity + long_name = surface air saturation specific humidity + units = kg kg-1 + dimensions = (horizontal_dimension) + type = real + kind = kind_phys [raincprv] standard_name = lwe_thickness_of_convective_precipitation_amount_from_previous_timestep long_name = convective_precipitation_amount from previous timestep @@ -1862,6 +1889,7 @@ dimensions = (horizontal_dimension) type = real kind = kind_phys + active = (flag_for_microphysics_scheme == flag_for_thompson_microphysics_scheme .and. flag_for_aerosol_physics) [nifa2d] standard_name = tendency_of_ice_friendly_aerosols_at_surface long_name = instantaneous ice-friendly sfc aerosol source @@ -1869,6 +1897,7 @@ dimensions = (horizontal_dimension) type = real kind = kind_phys + active = (flag_for_microphysics_scheme == flag_for_thompson_microphysics_scheme .and. flag_for_aerosol_physics) [ushfsfci] standard_name = instantaneous_surface_upward_sensible_heat_flux_for_chemistry_coupling long_name = instantaneous upward sensible heat flux for chemistry coupling @@ -1883,7 +1912,13 @@ dimensions = (horizontal_dimension,vertical_dimension) type = real kind = kind_phys - +[qci_conv] + standard_name = convective_cloud_condesate_after_rainout + long_name = convective cloud condesate after rainout + units = kg kg-1 + dimensions = (horizontal_dimension,vertical_dimension) + type = real + kind = kind_phys ######################################################################## [ccpp-arg-table] name = GFS_control_type @@ -1956,12 +1991,54 @@ units = flag dimensions = () type = logical +[qdiag3d] + standard_name = flag_tracer_diagnostics_3D + long_name = flag for 3d tracer diagnostic fields + units = flag + dimensions = () + type = logical +[flag_for_gwd_generic_tend] + standard_name = flag_for_generic_gravity_wave_drag_tendency + long_name = true if GFS_GWD_generic should calculate tendencies + units = flag + dimensions = () + type = logical +[flag_for_pbl_generic_tend] + standard_name = flag_for_generic_planetary_boundary_layer_tendency + long_name = true if GFS_PBL_generic should calculate tendencies + units = flag + dimensions = () + type = logical +[flag_for_dcnv_generic_tend] + standard_name = flag_for_generic_deep_convection_tendency + long_name = true if GFS_DCNV_generic should calculate tendencies + units = flag + dimensions = () + type = logical +[flag_for_scnv_generic_tend] + standard_name = flag_for_generic_shallow_convection_tendency + long_name = true if GFS_SCNV_generic should calculate tendencies + units = flag + dimensions = () + type = logical [lssav] standard_name = flag_diagnostics long_name = logical flag for storing diagnostics units = flag dimensions = () type = logical +[naux2d] + standard_name = number_of_2d_auxiliary_arrays + long_name = number of 2d auxiliary arrays to output (for debugging) + units = count + dimensions = () + type = integer +[naux3d] + standard_name = number_of_3d_auxiliary_arrays + long_name = number of 3d auxiliary arrays to output (for debugging) + units = count + dimensions = () + type = integer [levs] standard_name = vertical_dimension long_name = number of vertical levels @@ -2005,16 +2082,16 @@ dimensions = () type = integer [nblks] - standard_name = number_of_blocks + standard_name = ccpp_block_count long_name = for explicit data blocking: number of blocks units = count dimensions = () type = integer [blksz] - standard_name = horizontal_block_size + standard_name = ccpp_block_sizes long_name = for explicit data blocking: block sizes of all blocks units = count - dimensions = (number_of_blocks) + dimensions = (ccpp_block_count) type = integer [blksz(ccpp_block_number)] standard_name = horizontal_loop_extent @@ -2022,7 +2099,7 @@ units = count dimensions = () type = integer -[blksz2(ccpp_block_number)] +[ncols] standard_name = horizontal_dimension long_name = horizontal dimension units = count @@ -2122,6 +2199,12 @@ dimensions = () type = real kind = kind_phys +[nhfrad] + standard_name = number_of_timesteps_for_radiation_calls_on_physics_timestep + long_name = number of timesteps for radiation calls on physics timestep (coldstarts only) + units = count + dimensions = () + type = integer [levr] standard_name = number_of_vertical_layers_for_radiation_calculations long_name = number of vertical levels for radiation calculations @@ -3991,6 +4074,12 @@ units = flag dimensions = () type = logical +[cycling] + standard_name = flag_for_cycling + long_name = flag for cycling or coldstart + units = flag + dimensions = () + type = logical [hydrostatic] standard_name = flag_for_hydrostatic_solver long_name = flag for hydrostatic solver from dynamics @@ -4166,6 +4255,12 @@ units = flag dimensions = () type = integer +[bl_mynn_output] + standard_name = mynn_output_flag + long_name = flag initialize and output extra 3D variables + units = flag + dimensions = () + type = integer [icloud_bl] standard_name = couple_sgs_clouds_to_radiation_flag long_name = flag for coupling sgs clouds to radiation @@ -4287,6 +4382,13 @@ dimensions = (horizontal_dimension,vertical_dimension_of_h2o_forcing_data,number_of_coefficients_in_h2o_forcing_data) type = real kind = kind_phys +[hpbl] + standard_name = atmosphere_boundary_layer_thickness + long_name = pbl height + units = m + dimensions = (horizontal_dimension) + type = real + kind = kind_phys [in_nm] standard_name = in_number_concentration long_name = IN number concentration @@ -4544,8 +4646,15 @@ type = real kind = kind_phys [QC_BL] - standard_name = subgrid_cloud_mixing_ratio_pbl - long_name = subgrid cloud cloud mixing ratio from PBL scheme + standard_name = subgrid_cloud_water_mixing_ratio_pbl + long_name = subgrid cloud water mixing ratio from PBL scheme + units = kg kg-1 + dimensions = (horizontal_dimension,vertical_dimension) + type = real + kind = kind_phys +[QI_BL] + standard_name = subgrid_cloud_ice_mixing_ratio_pbl + long_name = subgrid cloud ice mixing ratio from PBL scheme units = kg kg-1 dimensions = (horizontal_dimension,vertical_dimension) type = real @@ -5296,13 +5405,6 @@ dimensions = (horizontal_dimension) type = real kind = kind_phys -[hpbl] - standard_name = atmosphere_boundary_layer_thickness - long_name = pbl height - units = m - dimensions = (horizontal_dimension) - type = real - kind = kind_phys [pwat] standard_name = column_precipitable_water long_name = precipitable water @@ -5548,6 +5650,34 @@ dimensions = (horizontal_dimension,vertical_dimension) type = real kind = kind_phys +[du3dt(:,:,5)] + standard_name = cumulative_change_in_x_wind_due_to_rayleigh_damping + long_name = cumulative change in x wind due to Rayleigh damping + units = m s-1 + dimensions = (horizontal_dimension,vertical_dimension) + type = real + kind = kind_phys +[du3dt(:,:,6)] + standard_name = cumulative_change_in_x_wind_due_to_shallow_convection + long_name = cumulative change in x wind due to shallow convection + units = m s-1 + dimensions = (horizontal_dimension,vertical_dimension) + type = real + kind = kind_phys +[du3dt(:,:,7)] + standard_name = cumulative_change_in_x_wind_due_to_physics + long_name = cumulative change in x wind due to physics + units = m s-1 + dimensions = (horizontal_dimension,vertical_dimension) + type = real + kind = kind_phys +[du3dt(:,:,8)] + standard_name = cumulative_change_in_x_wind_due_to_non_physics_processes + long_name = cumulative change in x wind due to non-physics processes + units = m s-1 + dimensions = (horizontal_dimension,vertical_dimension) + type = real + kind = kind_phys [dv3dt(:,:,1)] standard_name = cumulative_change_in_y_wind_due_to_PBL long_name = cumulative change in y wind due to PBL @@ -5576,6 +5706,34 @@ dimensions = (horizontal_dimension,vertical_dimension) type = real kind = kind_phys +[dv3dt(:,:,5)] + standard_name = cumulative_change_in_y_wind_due_to_rayleigh_damping + long_name = cumulative change in y wind due to Rayleigh damping + units = m s-1 + dimensions = (horizontal_dimension,vertical_dimension) + type = real + kind = kind_phys +[dv3dt(:,:,6)] + standard_name = cumulative_change_in_y_wind_due_to_shallow_convection + long_name = cumulative change in y wind due to shallow convection + units = m s-1 + dimensions = (horizontal_dimension,vertical_dimension) + type = real + kind = kind_phys +[dv3dt(:,:,7)] + standard_name = cumulative_change_in_y_wind_due_to_physics + long_name = cumulative change in y wind due to physics + units = m s-1 + dimensions = (horizontal_dimension,vertical_dimension) + type = real + kind = kind_phys +[dv3dt(:,:,8)] + standard_name = cumulative_change_in_y_wind_due_to_non_physics_processes + long_name = cumulative change in y wind due to non-physics processes + units = m s-1 + dimensions = (horizontal_dimension,vertical_dimension) + type = real + kind = kind_phys [dt3dt(:,:,1)] standard_name = cumulative_change_in_temperature_due_to_longwave_radiation long_name = cumulative change in temperature due to longwave radiation @@ -5605,7 +5763,7 @@ type = real kind = kind_phys [dt3dt(:,:,5)] - standard_name = cumulative_change_in_temperature_due_to_shal_convection + standard_name = cumulative_change_in_temperature_due_to_shallow_convection long_name = cumulative change in temperature due to shallow convection units = K dimensions = (horizontal_dimension,vertical_dimension) @@ -5625,6 +5783,34 @@ dimensions = (horizontal_dimension,vertical_dimension) type = real kind = kind_phys +[dt3dt(:,:,8)] + standard_name = cumulative_change_in_temperature_due_to_rayleigh_damping + long_name = cumulative change in temperature due to Rayleigh damping + units = K + dimensions = (horizontal_dimension,vertical_dimension) + type = real + kind = kind_phys +[dt3dt(:,:,9)] + standard_name = cumulative_change_in_temperature_due_to_convective_gravity_wave_drag + long_name = cumulative change in temperature due to convective gravity wave drag + units = K + dimensions = (horizontal_dimension,vertical_dimension) + type = real + kind = kind_phys +[dt3dt(:,:,10)] + standard_name = cumulative_change_in_temperature_due_to_physics + long_name = cumulative change in temperature due to physics + units = K + dimensions = (horizontal_dimension,vertical_dimension) + type = real + kind = kind_phys +[dt3dt(:,:,11)] + standard_name = cumulative_change_in_temperature_due_to_non_physics_processes + long_name = cumulative change in temperature due to non-physics processed + units = K + dimensions = (horizontal_dimension,vertical_dimension) + type = real + kind = kind_phys [dq3dt(:,:,1)] standard_name = cumulative_change_in_water_vapor_specific_humidity_due_to_PBL long_name = cumulative change in water vapor specific humidity due to PBL @@ -5640,7 +5826,7 @@ type = real kind = kind_phys [dq3dt(:,:,3)] - standard_name = cumulative_change_in_water_vapor_specific_humidity_due_to_shal_convection + standard_name = cumulative_change_in_water_vapor_specific_humidity_due_to_shallow_convection long_name = cumulative change in water vapor specific humidity due to shallow convection units = kg kg-1 dimensions = (horizontal_dimension,vertical_dimension) @@ -5688,6 +5874,34 @@ dimensions = (horizontal_dimension,vertical_dimension) type = real kind = kind_phys +[dq3dt(:,:,10)] + standard_name = cumulative_change_in_water_vapor_specific_humidity_due_to_physics + long_name = cumulative change in water vapor specific humidity due to physics + units = kg kg-1 + dimensions = (horizontal_dimension,vertical_dimension) + type = real + kind = kind_phys +[dq3dt(:,:,11)] + standard_name = cumulative_change_in_ozone_concentration_due_to_physics + long_name = cumulative change in ozone concentration due to physics + units = kg kg-1 + dimensions = (horizontal_dimension,vertical_dimension) + type = real + kind = kind_phys +[dq3dt(:,:,12)] + standard_name = cumulative_change_in_water_vapor_specific_humidity_due_to_non_physics_processes + long_name = cumulative change in water vapor specific humidity due to non-physics processes + units = kg kg-1 + dimensions = (horizontal_dimension,vertical_dimension) + type = real + kind = kind_phys +[dq3dt(:,:,13)] + standard_name = cumulative_change_in_ozone_concentration_due_to_non_physics_processes + long_name = cumulative change in ozone_concentration due to non-physics processes + units = kg kg-1 + dimensions = (horizontal_dimension,vertical_dimension) + type = real + kind = kind_phys [refdmax] standard_name = maximum_reflectivity_at_1km_agl_over_maximum_hourly_time_interval long_name = maximum reflectivity at 1km agl over maximum hourly time interval @@ -5874,6 +6088,34 @@ dimensions = (horizontal_dimension,vertical_dimension) type = real kind = kind_phys +[sub_thl] + standard_name = theta_subsidence_tendency + long_name = updraft theta subsidence tendency + units = K s-1 + dimensions = (horizontal_dimension,vertical_dimension) + type = real + kind = kind_phys +[sub_sqv] + standard_name = water_vapor_subsidence_tendency + long_name = updraft water vapor subsidence tendency + units = kg kg-1 s-1 + dimensions = (horizontal_dimension,vertical_dimension) + type = real + kind = kind_phys +[det_thl] + standard_name = theta_detrainment_tendency + long_name = updraft theta detrainment tendency + units = K s-1 + dimensions = (horizontal_dimension,vertical_dimension) + type = real + kind = kind_phys +[det_sqv] + standard_name = water_vapor_detrainment_tendency + long_name = updraft water vapor detrainment tendency + units = kg kg-1 s-1 + dimensions = (horizontal_dimension,vertical_dimension) + type = real + kind = kind_phys [nupdraft] standard_name = number_of_plumes long_name = number of plumes per grid column @@ -5893,6 +6135,12 @@ units = count dimensions = (horizontal_dimension) type = integer +[ktop_plume] + standard_name = k_level_of_highest_plume + long_name = k-level of highest plume + units = count + dimensions = (horizontal_dimension) + type = integer [exch_h] standard_name = atmosphere_heat_diffusivity_for_mynnpbl long_name = diffusivity for heat for MYNN PBL (defined for all mass levels) @@ -5991,6 +6239,20 @@ dimensions = (horizontal_dimension,vertical_dimension) type = real kind = kind_phys +[aux2d] + standard_name = auxiliary_2d_arrays + long_name = auxiliary 2d arrays to output (for debugging) + units = none + dimensions = (horizontal_dimension,number_of_3d_auxiliary_arrays) + type = real + kind = kind_phys +[aux3d] + standard_name = auxiliary_3d_arrays + long_name = auxiliary 3d arrays to output (for debugging) + units = none + dimensions = (horizontal_dimension,vertical_dimension,number_of_3d_auxiliary_arrays) + type = real + kind = kind_phys ######################################################################## @@ -6389,6 +6651,13 @@ dimensions = (horizontal_dimension,4) type = real kind = kind_phys +[clxss] + standard_name = fraction_of_grid_box_with_subgrid_orography_higher_than_critical_height_small_scale + long_name = frac. of grid box with by subgrid orography higher than critical height small scale + units = frac + dimensions = (horizontal_dimension,4) + type = real + kind = kind_phys [cmm_ocean] standard_name = surface_drag_wind_speed_for_momentum_in_air_over_ocean long_name = momentum exchange coefficient over ocean @@ -6571,6 +6840,7 @@ dimensions = (horizontal_dimension,vertical_dimension) type = real kind = kind_phys + active = (index_for_liquid_cloud_number_concentration > 0) [dqdt(:,:,index_for_ice_cloud_number_concentration)] standard_name = tendency_of_ice_number_concentration_due_to_model_physics long_name = number concentration of ice tendency due to model physics @@ -6585,6 +6855,7 @@ dimensions = (horizontal_dimension,vertical_dimension) type = real kind = kind_phys + active = (index_for_water_friendly_aerosols > 0) [dqdt(:,:,index_for_ice_friendly_aerosols)] standard_name = tendency_of_ice_friendly_aerosol_number_concentration_due_to_model_physics long_name = number concentration of ice-friendly aerosols tendency due to model physics @@ -6592,6 +6863,7 @@ dimensions = (horizontal_dimension,vertical_dimension) type = real kind = kind_phys + active = (index_for_ice_friendly_aerosols > 0) [dqdt(:,:,index_for_rain_water)] standard_name = tendency_of_rain_water_mixing_ratio_due_to_model_physics long_name = ratio of mass of rain water tendency to mass of dry air plus vapor (without condensates) due to model physics @@ -6781,13 +7053,6 @@ dimensions = (horizontal_dimension) type = real kind = kind_phys -[evap] - standard_name = kinematic_surface_upward_latent_heat_flux - long_name = kinematic surface upward latent heat flux - units = kg kg-1 m s-1 - dimensions = (horizontal_dimension) - type = real - kind = kind_phys [evapq] standard_name = kinematic_surface_upward_latent_heat_flux_reduced_by_surface_roughness long_name = kinematic surface upward latent heat flux reduced by surface roughness @@ -7225,13 +7490,6 @@ dimensions = (horizontal_dimension) type = real kind = kind_phys -[hflx] - standard_name = kinematic_surface_upward_sensible_heat_flux - long_name = kinematic surface upward sensible heat flux - units = K m s-1 - dimensions = (horizontal_dimension) - type = real - kind = kind_phys [hflxq] standard_name = kinematic_surface_upward_sensible_heat_flux_reduced_by_surface_roughness long_name = kinematic surface upward sensible heat flux reduced by surface roughness @@ -7589,6 +7847,20 @@ dimensions = (horizontal_dimension,4) type = real kind = kind_phys +[varss] + standard_name = standard_deviation_of_subgrid_orography_small_scale + long_name = standard deviation of subgrid orography small scale + units = m + dimensions = (horizontal_dimension) + type = real + kind = kind_phys +[oa4ss] + standard_name = asymmetry_of_subgrid_orography_small_scale + long_name = asymmetry of subgrid orography small scale + units = none + dimensions = (horizontal_dimension,4) + type = real + kind = kind_phys [oc] standard_name = convexity_of_subgrid_orography long_name = convexity of subgrid orography @@ -7596,6 +7868,13 @@ dimensions = (horizontal_dimension) type = real kind = kind_phys +[ocss] + standard_name = convexity_of_subgrid_orography_small_scale + long_name = convexity of subgrid orography small scale + units = none + dimensions = (horizontal_dimension) + type = real + kind = kind_phys [olyr] standard_name = ozone_concentration_at_layer_for_radiation long_name = ozone concentration layer @@ -7711,13 +7990,6 @@ dimensions = (horizontal_dimension) type = real kind = kind_phys -[qss] - standard_name = surface_specific_humidity - long_name = surface air saturation specific humidity - units = kg kg-1 - dimensions = (horizontal_dimension) - type = real - kind = kind_phys [qss_ocean] standard_name = surface_specific_humidity_over_ocean long_name = surface air saturation specific humidity over ocean @@ -7835,6 +8107,13 @@ dimensions = (horizontal_dimension) type = real kind = kind_phys +[save_q(:,:,index_for_ozone)] + standard_name = ozone_mixing_ratio_save + long_name = ozone mixing ratio before entering a physics scheme + units = kg kg-1 + dimensions = (horizontal_dimension,vertical_dimension) + type = real + kind = kind_phys [save_q(:,:,index_for_liquid_cloud_condensate)] standard_name = cloud_condensed_water_mixing_ratio_save long_name = ratio of mass of cloud water to mass of dry air plus vapor (without condensates) before entering a physics scheme @@ -7870,6 +8149,13 @@ dimensions = (horizontal_dimension,vertical_dimension) type = real kind = kind_phys +[save_tcp] + standard_name = air_temperature_save_from_cumulus_paramterization + long_name = air temperature after cumulus parameterization + units = K + dimensions = (horizontal_dimension,vertical_dimension) + type = real + kind = kind_phys [save_u] standard_name = x_wind_save long_name = x-wind before entering a physics scheme diff --git a/gfsphysics/physics/GFS_debug.F90 b/gfsphysics/physics/GFS_debug.F90 index 0a26cf6a8..57bcc0f45 100644 --- a/gfsphysics/physics/GFS_debug.F90 +++ b/gfsphysics/physics/GFS_debug.F90 @@ -174,7 +174,7 @@ subroutine GFS_diagtoscreen_run (Model, Statein, Stateout, Sfcprop, Coupling, call print_var(mpirank,omprank, blkno, 'Sfcprop%dt_cool ', Sfcprop%dt_cool) call print_var(mpirank,omprank, blkno, 'Sfcprop%qrain ', Sfcprop%qrain) end if - ! CCPP only + ! CCPP/RUC only !if (Model%lsm == Model%lsm_ruc) then ! call print_var(mpirank,omprank, blkno, 'Sfcprop%sh2o', Sfcprop%sh2o) ! call print_var(mpirank,omprank, blkno, 'Sfcprop%smois', Sfcprop%smois) @@ -217,6 +217,7 @@ subroutine GFS_diagtoscreen_run (Model, Statein, Stateout, Sfcprop, Coupling, call print_var(mpirank,omprank, blkno, 'Tbd%acv' , Tbd%acv) call print_var(mpirank,omprank, blkno, 'Tbd%acvb' , Tbd%acvb) call print_var(mpirank,omprank, blkno, 'Tbd%acvt' , Tbd%acvt) + call print_var(mpirank,omprank, blkno, 'Tbd%hpbl' , Tbd%hpbl) if (Model%do_sppt) then call print_var(mpirank,omprank, blkno, 'Tbd%dtdtr' , Tbd%dtdtr) call print_var(mpirank,omprank, blkno, 'Tbd%dtotprcp' , Tbd%dtotprcp) @@ -286,7 +287,6 @@ subroutine GFS_diagtoscreen_run (Model, Statein, Stateout, Sfcprop, Coupling, call print_var(mpirank,omprank, blkno, 'Diag%dpt2m ', Diag%dpt2m) call print_var(mpirank,omprank, blkno, 'Diag%zlvl ', Diag%zlvl) call print_var(mpirank,omprank, blkno, 'Diag%psurf ', Diag%psurf) - call print_var(mpirank,omprank, blkno, 'Diag%hpbl ', Diag%hpbl) call print_var(mpirank,omprank, blkno, 'Diag%pwat ', Diag%pwat) call print_var(mpirank,omprank, blkno, 'Diag%t1 ', Diag%t1) call print_var(mpirank,omprank, blkno, 'Diag%q1 ', Diag%q1) @@ -302,7 +302,7 @@ subroutine GFS_diagtoscreen_run (Model, Statein, Stateout, Sfcprop, Coupling, call print_var(mpirank,omprank, blkno, 'Diag%tdomzr ', Diag%tdomzr) call print_var(mpirank,omprank, blkno, 'Diag%tdomip ', Diag%tdomip) call print_var(mpirank,omprank, blkno, 'Diag%tdoms ', Diag%tdoms) - ! CCPP only + ! CCPP/RUC only !if (Model%lsm == Model%lsm_ruc) then ! call print_var(mpirank,omprank, blkno, 'Diag%wet1 ', Sfcprop%wetness) !else @@ -338,7 +338,7 @@ subroutine GFS_diagtoscreen_run (Model, Statein, Stateout, Sfcprop, Coupling, if(Model%lradar) then call print_var(mpirank,omprank, blkno, 'Diag%refl_10cm ', Diag%refl_10cm) end if - ! CCPP only + ! CCPP/MYNNPBL only !if (Model%do_mynnedmf) then ! call print_var(mpirank,omprank, blkno, 'Diag%edmf_a ', Diag%edmf_a) ! call print_var(mpirank,omprank, blkno, 'Diag%edmf_w ', Diag%edmf_w) @@ -348,7 +348,7 @@ subroutine GFS_diagtoscreen_run (Model, Statein, Stateout, Sfcprop, Coupling, ! call print_var(mpirank,omprank, blkno, 'Diag%edmf_qc ', Diag%edmf_qc) ! call print_var(mpirank,omprank, blkno, 'Diag%nupdraft ', Diag%nupdraft) ! call print_var(mpirank,omprank, blkno, 'Diag%maxMF ', Diag%maxMF) - ! call print_var(mpirank,omprank, blkno, 'Diag%ktop_shallow', Diag%ktop_shallow) + ! call print_var(mpirank,omprank, blkno, 'Diag%ktop_plume ', Diag%ktop_plume) ! call print_var(mpirank,omprank, blkno, 'Diag%exch_h ', Diag%exch_h) ! call print_var(mpirank,omprank, blkno, 'Diag%exch_m ', Diag%exch_m) !end if diff --git a/gfsphysics/physics/radsw_datatb.f b/gfsphysics/physics/radsw_datatb.f index ba57d075f..9188d889f 100644 --- a/gfsphysics/physics/radsw_datatb.f +++ b/gfsphysics/physics/radsw_datatb.f @@ -2552,7 +2552,7 @@ module module_radsw_sflux ! !> band index (3rd index in array sfluxref described below) integer, dimension(nblow:nbhgh), public :: ibx - data layreffr/ 18,30, 6, 3, 3, 8, 2, 6, 1, 2, 0,32,58,49 / + data layreffr/ 18,30, 6, 3, 3, 8, 2, 6, 1, 2, 0,32,42,49 / data ix1 / 1, 1, 1, 1, 0, 1, 1, 0, 1, 0, 0, 0, 3, 0 / data ix2 / 5, 2, 5, 2, 0, 2, 6, 0, 6, 0, 0, 0, 6, 0 / data ibx / 1, 1, 1, 2, 2, 3, 4, 3, 5, 4, 5, 6, 2, 7 / diff --git a/gfsphysics/physics/samfdeepcnv.f b/gfsphysics/physics/samfdeepcnv.f index 7de9a4c90..25a17d5f4 100644 --- a/gfsphysics/physics/samfdeepcnv.f +++ b/gfsphysics/physics/samfdeepcnv.f @@ -217,7 +217,7 @@ subroutine samfdeepcnv(im,ix,km,delt,itc,ntc,ntk,ntr,delp, parameter(clamd=0.03,tkemx=0.65,tkemn=0.05) parameter(dtke=tkemx-tkemn) parameter(dbeta=0.1) - parameter(cthk=200.,dthk=25.) + parameter(cthk=150.,dthk=25.) parameter(cinpcrmx=180.,cinpcrmn=120.) ! parameter(cinacrmx=-120.,cinacrmn=-120.) parameter(cinacrmx=-120.,cinacrmn=-80.) @@ -1191,9 +1191,7 @@ subroutine samfdeepcnv(im,ix,km,delt,itc,ntc,ntk,ntr,delp, ! k = kbcon(i) dp = 1000. * del(i,k) - xmbmax(i) = dp / (2. * g * dt2) -! -! xmbmax(i) = dp / (g * dt2) + xmbmax(i) = dp / (g * dt2) ! ! mbdt(i) = 0.1 * dp / g ! diff --git a/gfsphysics/physics/satmedmfvdifq.f b/gfsphysics/physics/satmedmfvdifq.f index 478e909f0..77ac36b97 100644 --- a/gfsphysics/physics/satmedmfvdifq.f +++ b/gfsphysics/physics/satmedmfvdifq.f @@ -19,7 +19,8 @@ ! !---------------------------------------------------------------------- subroutine satmedmfvdifq(ix,im,km,ntrac,ntcw,ntiw,ntke, - & dv,du,tdt,rtg,u1,v1,t1,q1,swh,hlw,xmu,garea, +!wz & dv,du,tdt,rtg,u1,v1,t1,q1,swh,hlw,xmu,garea, + & dv,du,tdt,rtg,u1,v1,t1,q1,swh,hlw,xmu,garea,islimsk,snwdph, & psk,rbsoil,zorl,u10m,v10m,fm,fh, & tsea,heat,evap,stress,spd1,kpbl, & prsi,del,prsl,prslk,phii,phil,delt, @@ -38,6 +39,10 @@ subroutine satmedmfvdifq(ix,im,km,ntrac,ntcw,ntiw,ntke, !---------------------------------------------------------------------- integer ix, im, km, ntrac, ntcw, ntiw, ntke integer kpbl(im), kinver(im) +! +!wz + integer islimsk(im) + real(kind=kind_phys), dimension(im,3), intent(in) :: snwdph ! real(kind=kind_phys) delt, xkzm_m, xkzm_h, xkzm_s, dspfac, & bl_upfr, bl_dnfr @@ -156,6 +161,8 @@ subroutine satmedmfvdifq(ix,im,km,ntrac,ntcw,ntiw,ntke, & zlup, zldn, bsum, & tem, tem1, tem2, & ptem, ptem0, ptem1, ptem2 +!wz + real(kind=kind_phys) xkzm_mp, xkzm_hp ! real(kind=kind_phys) ck0, ck1, ch0, ch1, ce0, rchck ! @@ -173,7 +180,7 @@ subroutine satmedmfvdifq(ix,im,km,ntrac,ntcw,ntiw,ntke, parameter(gamcrt=3.,gamcrq=0.,sfcfrac=0.1) parameter(vk=0.4,rimin=-100.) parameter(rbcr=0.25,zolcru=-0.02,tdzmin=1.e-3) - parameter(rlmn=30.,rlmn1=5.,rlmn2=15.) + parameter(rlmn=30.,rlmn1=5.,rlmn2=10.) parameter(rlmx=300.,elmx=300.) parameter(prmin=0.25,prmax=4.0) parameter(pr0=1.0,prtke=1.0,prscu=0.67) @@ -183,7 +190,7 @@ subroutine satmedmfvdifq(ix,im,km,ntrac,ntcw,ntiw,ntke, parameter(aphi5=5.,aphi16=16.) parameter(elmfac=1.0,elefac=1.0,cql=100.) parameter(dw2min=1.e-4,dkmax=1000.,xkgdx=5000.) - parameter(qlcr=3.5e-5,zstblmax=2500.,xkzinv=0.15) + parameter(qlcr=3.5e-5,zstblmax=2500.,xkzinv=0.1) parameter(h1=0.33333333) parameter(ck0=0.4,ck1=0.15,ch0=0.4,ch1=0.15) parameter(ce0=0.4) @@ -254,17 +261,37 @@ subroutine satmedmfvdifq(ix,im,km,ntrac,ntcw,ntiw,ntke, ! xkzm_hx = 0.01 + (xkzm_h - 0.01)/(xkgdx-5.) * (gdx-5.) ! xkzm_mx = 0.01 + (xkzm_h - 0.01)/(xkgdx-5.) * (gdx-5.) ! +!wz do i=1,im + xkzm_mp = xkzm_m + xkzm_hp = xkzm_h +! + if( islimsk(i) == 1 .and. snwdph(i,1) > 10.0 ) then ! over land + if (rbsoil(i) > 0. .and. rbsoil(i) <= 0.25) then + xkzm_mp = xkzm_m * (1.0 - rbsoil(i)/0.25)**2 + + & 0.1 * (1.0 - (1.0-rbsoil(i)/0.25)**2) + xkzm_hp = xkzm_h * (1.0 - rbsoil(i)/0.25)**2 + + & 0.1 * (1.0 - (1.0-rbsoil(i)/0.25)**2) + else if (rbsoil(i) > 0.25) then + xkzm_mp = 0.1 + xkzm_hp = 0.1 + endif + endif +!# kx1(i) = 1 tx1(i) = 1.0 / prsi(i,1) tx2(i) = tx1(i) if(gdx(i) >= xkgdx) then - xkzm_hx(i) = xkzm_h - xkzm_mx(i) = xkzm_m +!wz xkzm_hx(i) = xkzm_h +!wz xkzm_mx(i) = xkzm_m + xkzm_hx(i) = xkzm_hp + xkzm_mx(i) = xkzm_mp else tem = 1. / (xkgdx - 5.) - tem1 = (xkzm_h - 0.01) * tem - tem2 = (xkzm_m - 0.01) * tem +!wz tem1 = (xkzm_h - 0.01) * tem +!wz tem2 = (xkzm_m - 0.01) * tem + tem1 = (xkzm_hp - 0.01) * tem + tem2 = (xkzm_mp - 0.01) * tem ptem = gdx(i) - 5. xkzm_hx(i) = 0.01 + tem1 * ptem xkzm_mx(i) = 0.01 + tem2 * ptem @@ -699,7 +726,7 @@ subroutine satmedmfvdifq(ix,im,km,ntrac,ntcw,ntiw,ntke, ! tem1 = (tvx(i,k+1)-tvx(i,k)) * rdzt(i,k) ! if(tem1 > 1.e-5) then tem1 = tvx(i,k+1)-tvx(i,k) - if(tem1 > 0.) then + if(tem1 > 0. .and. islimsk(i) /= 1 ) then xkzo(i,k) = min(xkzo(i,k), xkzinv) xkzmo(i,k) = min(xkzmo(i,k), xkzinv) rlmnz(i,k) = min(rlmnz(i,k), rlmn2) diff --git a/gfsphysics/physics/sfc_diff.f b/gfsphysics/physics/sfc_diff.f index 5874c01c1..22bfe4289 100644 --- a/gfsphysics/physics/sfc_diff.f +++ b/gfsphysics/physics/sfc_diff.f @@ -139,17 +139,12 @@ subroutine sfc_diff(im,ps,t1,q1,z1, wind, !intent(in) z0max = max(z0max, 1.0e-6) ! czilc = 10.0 ** (- (0.40/0.07) * z0) ! fei's canopy height dependance of czil -! czilc = 0.8 - -! tem1 = 1.0 - sigmaf(i) -! ztmax = z0max*exp( - tem1*tem1 -! & * czilc*ca*sqrt(ustar(i,1)*(0.01/1.5e-05))) -! - czilc = 10.0 ** (- 4. * z0max) ! Trier et al. (2011, WAF) - ztmax = z0max * exp( - czilc * ca - & * 258.2 * sqrt(ustar(i,1)*z0max) ) - + czilc = 0.8 + tem1 = 1.0 - sigmaf(i) + ztmax = z0max*exp( - tem1*tem1 + & * czilc*ca*sqrt(ustar(i,1)*(0.01/1.5e-05))) + ! mg, sfc-perts: add surface perturbations to ztmax/z0max ratio over land if (ztpert(i) /= 0.0) then ztmax = ztmax * (10.**ztpert(i)) @@ -183,16 +178,11 @@ subroutine sfc_diff(im,ps,t1,q1,z1, wind, !intent(in) ! czilc = 10.0 ** (- (0.40/0.07) * z0) ! fei's canopy height ! dependance of czil -! czilc = 0.8 + czilc = 0.8 -! tem1 = 1.0 - sigmaf(i) -! ztmax = z0max*exp( - tem1*tem1 -! & * czilc*ca*sqrt(ustar(i,2)*(0.01/1.5e-05))) -! - czilc = 10.0 ** (- 4. * z0max) ! Trier et al. (2011, WAF) - ztmax = z0max * exp( - czilc * ca - & * 258.2 * sqrt(ustar(i,2)*z0max) ) -! + tem1 = 1.0 - sigmaf(i) + ztmax = z0max*exp( - tem1*tem1 + & * czilc*ca*sqrt(ustar(i,2)*(0.01/1.5e-05))) ztmax = max(ztmax, 1.0e-6) ! call stability diff --git a/io/FV3GFS_io.F90 b/io/FV3GFS_io.F90 index 33ff21080..4b2738b23 100644 --- a/io/FV3GFS_io.F90 +++ b/io/FV3GFS_io.F90 @@ -71,15 +71,20 @@ module FV3GFS_io_mod !--- GFDL filenames character(len=32) :: fn_oro = 'oro_data.nc' + character(len=32) :: fn_oro_ls = 'oro_data_ls.nc' + character(len=32) :: fn_oro_ss = 'oro_data_ss.nc' character(len=32) :: fn_srf = 'sfc_data.nc' character(len=32) :: fn_phy = 'phy_data.nc' !--- GFDL FMS netcdf restart data types type(restart_file_type) :: Oro_restart, Sfc_restart, Phy_restart + type(restart_file_type) :: Oro_ls_restart, Oro_ss_restart !--- GFDL FMS restart containers character(len=32), allocatable, dimension(:) :: oro_name2, sfc_name2, sfc_name3 real(kind=kind_phys), allocatable, target, dimension(:,:,:) :: oro_var2, sfc_var2, phy_var2, sfc_var3ice + character(len=32), allocatable, dimension(:) :: oro_ls_ss_name + real(kind=kind_phys), allocatable, target, dimension(:,:,:) :: oro_ls_var, oro_ss_var real(kind=kind_phys), allocatable, target, dimension(:,:,:,:) :: sfc_var3, phy_var3 !--- Noah MP restart containers real(kind=kind_phys), allocatable, target, dimension(:,:,:,:) :: sfc_var3sn,sfc_var3eq,sfc_var3zn @@ -487,10 +492,11 @@ subroutine sfc_prop_restart_read (Sfcprop, Atm_block, Model, fv_domain) logical, intent(in) :: warm_start #endif !--- local variables - integer :: i, j, k, ix, lsoil, num, nb + integer :: i, j, k, ix, lsoil, num, nb, i_start, j_start, i_end, j_end integer :: isc, iec, jsc, jec, npz, nx, ny integer :: id_restart integer :: nvar_o2, nvar_s2m, nvar_s2o, nvar_s3 + integer :: nvar_oro_ls_ss integer :: nvar_s2mp, nvar_s3mp,isnow #ifdef CCPP integer :: nvar_s2r @@ -524,6 +530,7 @@ subroutine sfc_prop_restart_read (Sfcprop, Atm_block, Model, fv_domain) nvar_s2m = 32 endif nvar_o2 = 19 + nvar_oro_ls_ss = 10 nvar_s2o = 18 #ifdef CCPP if (Model%lsm == Model%lsm_ruc .and. warm_start) then @@ -639,7 +646,84 @@ subroutine sfc_prop_restart_read (Sfcprop, Atm_block, Model, fv_domain) !--- deallocate containers and free restart container deallocate(oro_name2, oro_var2) call free_restart_type(Oro_restart) - + +#ifdef CCPP + !--- Modify/read-in additional orographic static fields for GSL drag suite + if (Model%gwd_opt==3 .or. Model%gwd_opt==33) then + if (.not. allocated(oro_ls_ss_name)) then + !--- allocate the various containers needed for orography data + allocate(oro_ls_ss_name(nvar_oro_ls_ss)) + allocate(oro_ls_var(nx,ny,nvar_oro_ls_ss)) + allocate(oro_ss_var(nx,ny,nvar_oro_ls_ss)) + + oro_ls_ss_name(1) = 'stddev' + oro_ls_ss_name(2) = 'convexity' + oro_ls_ss_name(3) = 'oa1' + oro_ls_ss_name(4) = 'oa2' + oro_ls_ss_name(5) = 'oa3' + oro_ls_ss_name(6) = 'oa4' + oro_ls_ss_name(7) = 'ol1' + oro_ls_ss_name(8) = 'ol2' + oro_ls_ss_name(9) = 'ol3' + oro_ls_ss_name(10) = 'ol4' + !--- register the 2D fields + do num = 1,nvar_oro_ls_ss + var2_p => oro_ls_var(:,:,num) + id_restart = register_restart_field(Oro_ls_restart, fn_oro_ls, & + oro_ls_ss_name(num), var2_p, domain=fv_domain) + enddo + nullify(var2_p) + do num = 1,nvar_oro_ls_ss + var2_p => oro_ss_var(:,:,num) + id_restart = register_restart_field(Oro_ss_restart, fn_oro_ss, & + oro_ls_ss_name(num), var2_p, domain=fv_domain) + enddo + nullify(var2_p) + endif + + !--- read new GSL created orography restart/data + call mpp_error(NOTE,'reading topographic/orographic information from & + &INPUT/oro_data_ls.tile*.nc') + call restore_state(Oro_ls_restart) + call mpp_error(NOTE,'reading topographic/orographic information from & + &INPUT/oro_data_ss.tile*.nc') + call restore_state(Oro_ss_restart) + + do nb = 1, Atm_block%nblks + !--- 2D variables + do ix = 1, Atm_block%blksz(nb) + i = Atm_block%index(nb)%ii(ix) - isc + 1 + j = Atm_block%index(nb)%jj(ix) - jsc + 1 + !--- assign hprime(1:10) and hprime(15:24) with new oro stat data + Sfcprop(nb)%hprime(ix,1) = oro_ls_var(i,j,1) + Sfcprop(nb)%hprime(ix,2) = oro_ls_var(i,j,2) + Sfcprop(nb)%hprime(ix,3) = oro_ls_var(i,j,3) + Sfcprop(nb)%hprime(ix,4) = oro_ls_var(i,j,4) + Sfcprop(nb)%hprime(ix,5) = oro_ls_var(i,j,5) + Sfcprop(nb)%hprime(ix,6) = oro_ls_var(i,j,6) + Sfcprop(nb)%hprime(ix,7) = oro_ls_var(i,j,7) + Sfcprop(nb)%hprime(ix,8) = oro_ls_var(i,j,8) + Sfcprop(nb)%hprime(ix,9) = oro_ls_var(i,j,9) + Sfcprop(nb)%hprime(ix,10) = oro_ls_var(i,j,10) + Sfcprop(nb)%hprime(ix,15) = oro_ss_var(i,j,1) + Sfcprop(nb)%hprime(ix,16) = oro_ss_var(i,j,2) + Sfcprop(nb)%hprime(ix,17) = oro_ss_var(i,j,3) + Sfcprop(nb)%hprime(ix,18) = oro_ss_var(i,j,4) + Sfcprop(nb)%hprime(ix,19) = oro_ss_var(i,j,5) + Sfcprop(nb)%hprime(ix,20) = oro_ss_var(i,j,6) + Sfcprop(nb)%hprime(ix,21) = oro_ss_var(i,j,7) + Sfcprop(nb)%hprime(ix,22) = oro_ss_var(i,j,8) + Sfcprop(nb)%hprime(ix,23) = oro_ss_var(i,j,9) + Sfcprop(nb)%hprime(ix,24) = oro_ss_var(i,j,10) + + enddo + enddo + + call free_restart_type(Oro_ls_restart) + call free_restart_type(Oro_ss_restart) + end if +#endif + !--- SURFACE FILE if (.not. allocated(sfc_name2)) then !--- allocate the various containers needed for restarts @@ -1176,6 +1260,7 @@ subroutine sfc_prop_restart_read (Sfcprop, Atm_block, Model, fv_domain) endif endif +#ifdef CCPP if (nint(sfc_var3ice(1,1,1)) == -9999) then if (Model%me == Model%master ) call mpp_error(NOTE, 'gfs_driver::surface_props_input - computing tiice') do nb = 1, Atm_block%nblks @@ -1186,6 +1271,7 @@ subroutine sfc_prop_restart_read (Sfcprop, Atm_block, Model, fv_domain) enddo endif +#endif !#endif if(Model%frac_grid) then ! 3-way composite