diff --git a/src/core_atmosphere/CMakeLists.txt b/src/core_atmosphere/CMakeLists.txt index 0308ae4c2a..746b8741bc 100644 --- a/src/core_atmosphere/CMakeLists.txt +++ b/src/core_atmosphere/CMakeLists.txt @@ -246,9 +246,9 @@ else() endif() set(ATMOSPHERE_CORE_PHYSICS_MYNN-EDMF_SOURCES - module_bl_mynnedmf.F90 - MPAS/module_bl_mynnedmf_common.F90 - MPAS/module_bl_mynnedmf_driver.F90 + src/module_bl_mynnedmf.F90 + src/MPAS/module_bl_mynnedmf_common.F90 + src/module_bl_mynnedmf_driver.F90 ) list(TRANSFORM ATMOSPHERE_CORE_PHYSICS_MYNN-EDMF_SOURCES PREPEND physics/physics_noaa/MYNN-EDMF/) diff --git a/src/core_atmosphere/Registry.xml b/src/core_atmosphere/Registry.xml index 1b321e6217..cfdb5b9a85 100644 --- a/src/core_atmosphere/Registry.xml +++ b/src/core_atmosphere/Registry.xml @@ -504,6 +504,8 @@ + + @@ -2975,7 +2977,7 @@ units="-" description="=configuration option for the calculation of z0, zt and zq over water" possible_values="0:COARE3.0, 1:COARE3.5, 2:Davis/COARE3.5 ,3:Davis/Garratt, 4:Taylor-Yelland"/> - + @@ -3006,8 +3008,8 @@ + description="closure level for the MYNN-EDMF scheme" + possible_values="2.5,2.6,2.7,3.0"/> + description="=control the allocation/output of variables used in the MF component of the MYNN-EDMF scheme" + possible_values="0:do not allocate/output,1:updrafts,2:downdrafts"/> - - + + possible_values="0(keep=0),1"/> - - - + packages="bl_mynn_in;bl_mynnedmf_tkebudget_in"/> + packages="bl_mynn_in;bl_mynnedmf_tkebudget_in"/> + packages="bl_mynn_in;bl_mynnedmf_tkebudget_in"/> + packages="bl_mynn_in;bl_mynnedmf_tkebudget_in"/> + packages="bl_mynn_in;bl_mynnedmf_tkebudget_in"/> + packages="bl_mynn_in;bl_mynnedmf_output_in"/> + packages="bl_mynn_in;bl_mynnedmf_output_in"/> + packages="bl_mynn_in;bl_mynnedmf_output_in"/> + packages="bl_mynn_in;bl_mynnedmf_output_in"/> + packages="bl_mynn_in;bl_mynnedmf_output_in"/> + packages="bl_mynn_in;bl_mynnedmf_output_in"/> + packages="bl_mynn_in;bl_mynnedmf_output_in"/> + packages="bl_mynn_in;bl_mynnedmf_output_in"/> + packages="bl_mynn_in;bl_mynnedmf_output_in"/> + packages="bl_mynn_in;bl_mynnedmf_output_in"/> + + @@ -3648,10 +3649,6 @@ description="surface exchange coefficient for moisture at 2-meter" packages="sfclayer"/> - - @@ -3722,12 +3719,12 @@ + packages="sfclayer"/> - + diff --git a/src/core_atmosphere/physics/Makefile b/src/core_atmosphere/physics/Makefile index eac62da830..090591a6fe 100644 --- a/src/core_atmosphere/physics/Makefile +++ b/src/core_atmosphere/physics/Makefile @@ -70,11 +70,11 @@ core_microphysics: core_physics_init core_physics_mmm core_SMOKE: core_physics_init (cd physics_noaa/SMOKE; cp ./MPAS/Makefile .; cp ./MPAS/mpas_smoke_wrapper.F90 .; $(MAKE) all) -core_mynnedmf: core_physics_init core_physics_mmm - (cd physics_noaa/MYNN-EDMF; cp ./MPAS/Makefile .; cp ./MPAS/module_bl_mynnedmf_driver.F90 .; cp ./MPAS/module_bl_mynnedmf_common.F90 .; $(MAKE) all) +core_mynnedmf: core_physics_init + (cd physics_noaa/MYNN-EDMF/src; ln -sf ./MPAS/Makefile Makefile; ln -sf ./MPAS/module_bl_mynnedmf_common.F90 module_bl_mynnedmf_common.F90; $(MAKE) all COREDEF="$(COREDEF)") core_mynnsfc: core_physics_init - (cd physics_noaa/MYNN-SFC; cp ./MPAS/Makefile .; cp ./MPAS/module_sf_mynnsfc_driver.F90 .; cp ./MPAS/module_sf_mynnsfc_common.F90 .; $(MAKE) all) + (cd physics_noaa/MYNN-SFC; cp ./MPAS/Makefile .; cp ./MPAS/module_sf_mynnsfc_driver.F90 .; cp ./MPAS/module_sf_mynnsfc_common.F90 .; $(MAKE) all COREDEF="$(COREDEF)") core_RUCLSM: core_physics_init core_physics_mmm (cd physics_noaa/RUCLSM; cp ./MPAS/Makefile .; cp ./MPAS/module_ruc_land.F90 .; cp ./MPAS/module_ruc_ice.F90 .; cp ./MPAS/module_sf_sfcdiags_ruclsm.F .; $(MAKE) all COREDEF="$(COREDEF)") @@ -292,8 +292,8 @@ clean: ( if [ -d physics_noaa/TEMPO ]; then cd physics_noaa/TEMPO; $(MAKE) -f Makefile.mpas clean; fi ) ( if [ -d physics_noaa/UGWP ]; then cd physics_noaa/UGWP; $(MAKE) clean; fi ) ( if [ -d physics_noaa/RUCLSM ]; then cd physics_noaa/RUCLSM; $(MAKE) -f MPAS/Makefile clean; fi ) - ( if [ -d physics_noaa/MYNN-EDMF ]; then cd physics_noaa/MYNN-EDMF; cp ./MPAS/Makefile .; $(MAKE) clean; fi ) - ( if [ -d physics_noaa/MYNN-SFC ]; then cd physics_noaa/MYNN-SFC; cp ./MPAS/Makefile .; $(MAKE) clean; fi ) + ( if [ -d physics_noaa/MYNN-EDMF ]; then cd physics_noaa/MYNN-EDMF/src; $(MAKE) -f ./MPAS/Makefile clean; fi ) + ( if [ -d physics_noaa/MYNN-SFC ]; then cd physics_noaa/MYNN-SFC; $(MAKE) -f ./MPAS/Makefile clean; fi ) ( if [ -d physics_noaa/GFL ]; then cd physics_noaa/GFL; cp ./MPAS/Makefile .; $(MAKE) clean; fi ) ( if [ -d physics_noaa/SMOKE ]; then cd physics_noaa/SMOKE; cp ./MPAS/Makefile .; $(MAKE) clean; fi ) @# Certain systems with intel compilers generate *.i files @@ -304,16 +304,16 @@ clean: $(RM) $@ $*.mod ifeq "$(GEN_F90)" "true" $(CPP) $(CPPFLAGS) $(COREDEF) $(HYDROSTATIC) $(CPPINCLUDES) -I../../framework $< > $*.f90 - $(FC) $(FFLAGS) -c $*.f90 $(FCINCLUDES) -I./physics_mmm -I./physics_wrf -I./physics_noahmp -I./physics_noahmp/utility -I./physics_noahmp/drivers/mpas -I./physics_noahmp/src -I./physics_noaa/TEMPO -I./physics_noaa/UGWP -I./physics_noaa/MYNN-EDMF -I./physics_noaa/MYNN-SFC -I./physics_noaa/RUCLSM -I./physics_noaa/GFL -I./physics_noaa/SMOKE -I.. -I../../framework $(MPAS_ESMF_INC) + $(FC) $(FFLAGS) -c $*.f90 $(FCINCLUDES) -I./physics_mmm -I./physics_wrf -I./physics_noahmp -I./physics_noahmp/utility -I./physics_noahmp/drivers/mpas -I./physics_noahmp/src -I./physics_noaa/TEMPO -I./physics_noaa/UGWP -I./physics_noaa/MYNN-EDMF/src -I./physics_noaa/MYNN-SFC -I./physics_noaa/RUCLSM -I./physics_noaa/GFL -I./physics_noaa/SMOKE -I.. -I../../framework $(MPAS_ESMF_INC) else - $(FC) $(CPPFLAGS) $(COREDEF) $(HYDROSATIC) $(FFLAGS) -c $*.F $(CPPINCLUDES) $(FCINCLUDES) -I./physics_mmm -I./physics_wrf -I./physics_noahmp -I./physics_noahmp/utility -I./physics_noahmp/drivers/mpas -I./physics_noahmp/src -I./physics_noaa/TEMPO -I./physics_noaa/UGWP -I./physics_noaa/MYNN-EDMF -I./physics_noaa/MYNN-SFC -I./physics_noaa/RUCLSM -I./physics_noaa/GFL -I./physics_noaa/SMOKE -I.. -I../../framework $(MPAS_ESMF_INC) + $(FC) $(CPPFLAGS) $(COREDEF) $(HYDROSATIC) $(FFLAGS) -c $*.F $(CPPINCLUDES) $(FCINCLUDES) -I./physics_mmm -I./physics_wrf -I./physics_noahmp -I./physics_noahmp/utility -I./physics_noahmp/drivers/mpas -I./physics_noahmp/src -I./physics_noaa/TEMPO -I./physics_noaa/UGWP -I./physics_noaa/MYNN-EDMF/src -I./physics_noaa/MYNN-SFC -I./physics_noaa/RUCLSM -I./physics_noaa/GFL -I./physics_noaa/SMOKE -I.. -I../../framework $(MPAS_ESMF_INC) endif .F90.o: $(RM) $@ $*.mod ifeq "$(GEN_F90)" "true" $(CPP) $(CPPFLAGS) $(COREDEF) $(HYDROSTATIC) $(CPPINCLUDES) $< > $*.f90 - $(FC) $(FFLAGS) -c $*.f90 $(FCINCLUDES) -I./physics_mmm -I./physics_wrf -I./physics_noaa/TEMPO -I./physics_noaa/UGWP -I./physics_noaa/MYNN-EDMF -I./physics_noaa/MYNN-SFC -I./physics_noaa/RUCLSM -I./physics_noaa/GFL -I./physics_noaa/SMOKE -I.. -I../../framework $(MPAS_ESMF_INC) + $(FC) $(FFLAGS) -c $*.f90 $(FCINCLUDES) -I./physics_mmm -I./physics_wrf -I./physics_noaa/TEMPO -I./physics_noaa/UGWP -I./physics_noaa/MYNN-EDMF/src -I./physics_noaa/MYNN-SFC -I./physics_noaa/RUCLSM -I./physics_noaa/GFL -I./physics_noaa/SMOKE -I.. -I../../framework $(MPAS_ESMF_INC) else - $(FC) $(CPPFLAGS) $(COREDEF) $(HYDROSATIC) $(FFLAGS) -c $*.F90 $(CPPINCLUDES) $(FCINCLUDES) -I./physics_mmm -I./physics_wrf -I./physics_noaa/TEMPO -I./physics_noaa/UGWP -I./physics_noaa/MYNN-EDMF -I./physics_noaa/MYNN-SFC -I./physics_noaa/RUCLSM -I./physics_noaa/GFL -I./physics_noaa/SMOKE -I.. -I../../framework $(MPAS_ESMF_INC) + $(FC) $(CPPFLAGS) $(COREDEF) $(HYDROSATIC) $(FFLAGS) -c $*.F90 $(CPPINCLUDES) $(FCINCLUDES) -I./physics_mmm -I./physics_wrf -I./physics_noaa/TEMPO -I./physics_noaa/UGWP -I./physics_noaa/MYNN-EDMF/src -I./physics_noaa/MYNN-SFC -I./physics_noaa/RUCLSM -I./physics_noaa/GFL -I./physics_noaa/SMOKE -I.. -I../../framework $(MPAS_ESMF_INC) endif diff --git a/src/core_atmosphere/physics/mpas_atmphys_driver_pbl.F b/src/core_atmosphere/physics/mpas_atmphys_driver_pbl.F index 1c7a17f3d9..e40def18d4 100644 --- a/src/core_atmosphere/physics/mpas_atmphys_driver_pbl.F +++ b/src/core_atmosphere/physics/mpas_atmphys_driver_pbl.F @@ -497,6 +497,7 @@ subroutine pbl_from_MPAS(configs,state,mesh,sfc_input,diag_physics,tend_physics, !local pointers for MYNN scheme: real(kind=RKIND),pointer:: len_disp + integer,pointer:: config_mynn_tkebudget,config_mynn_edmf_output real(kind=RKIND),dimension(:),pointer :: meshDensity real(kind=RKIND),dimension(:),pointer :: ch,qsfc,rmol,skintemp real(kind=RKIND),dimension(:,:),pointer:: cov,qke,qsq,tsq,sh3d,sm3d,tke_pbl,qke_adv,el_pbl @@ -767,6 +768,8 @@ subroutine pbl_from_MPAS(configs,state,mesh,sfc_input,diag_physics,tend_physics, case("bl_mynnedmf") call mpas_pool_get_config(configs,'config_len_disp',len_disp) + call mpas_pool_get_config(configs,'config_mynn_edmf_output',config_mynn_edmf_output) + call mpas_pool_get_config(configs,'config_mynn_tkebudget',config_mynn_tkebudget) call mpas_pool_get_array(mesh,'meshDensity',meshDensity) call mpas_pool_get_array(sfc_input,'skintemp',skintemp) @@ -783,17 +786,19 @@ subroutine pbl_from_MPAS(configs,state,mesh,sfc_input,diag_physics,tend_physics, call mpas_pool_get_array(diag_physics,'cldfrac_bl',cldfrac_bl) call mpas_pool_get_array(diag_physics,'qc_bl' ,qc_bl ) call mpas_pool_get_array(diag_physics,'qi_bl' ,qi_bl ) - call mpas_pool_get_array(diag_physics,'edmf_a' ,edmf_a ) - call mpas_pool_get_array(diag_physics,'edmf_ent' ,edmf_ent ) - call mpas_pool_get_array(diag_physics,'edmf_qc' ,edmf_qc ) - call mpas_pool_get_array(diag_physics,'edmf_qt' ,edmf_qt ) - call mpas_pool_get_array(diag_physics,'edmf_thl' ,edmf_thl ) - call mpas_pool_get_array(diag_physics,'edmf_w' ,edmf_w ) - call mpas_pool_get_array(diag_physics,'sub_thl' ,sub_thl ) - call mpas_pool_get_array(diag_physics,'sub_qv' ,sub_qv ) - call mpas_pool_get_array(diag_physics,'det_thl' ,det_thl ) - call mpas_pool_get_array(diag_physics,'det_qv' ,det_qv ) - + if(config_mynn_edmf_output > 0) then + call mpas_pool_get_array(diag_physics,'edmf_a' ,edmf_a ) + call mpas_pool_get_array(diag_physics,'edmf_ent' ,edmf_ent ) + call mpas_pool_get_array(diag_physics,'edmf_qc' ,edmf_qc ) + call mpas_pool_get_array(diag_physics,'edmf_qt' ,edmf_qt ) + call mpas_pool_get_array(diag_physics,'edmf_thl' ,edmf_thl ) + call mpas_pool_get_array(diag_physics,'edmf_w' ,edmf_w ) + call mpas_pool_get_array(diag_physics,'sub_thl' ,sub_thl ) + call mpas_pool_get_array(diag_physics,'sub_qv' ,sub_qv ) + call mpas_pool_get_array(diag_physics,'det_thl' ,det_thl ) + call mpas_pool_get_array(diag_physics,'det_qv' ,det_qv ) + endif + do j = jts,jte do i = its,ite dx_p(i,j) = len_disp / meshDensity(i)**0.25 @@ -817,21 +822,6 @@ subroutine pbl_from_MPAS(configs,state,mesh,sfc_input,diag_physics,tend_physics, cldfrabl_p(i,k,j) = cldfrac_bl(k,i) qcbl_p(i,k,j) = qc_bl(k,i) qibl_p(i,k,j) = qi_bl(k,i) - edmfa_p(i,k,j) = edmf_a(k,i) - edmfent_p(i,k,j) = edmf_ent(k,i) - edmfqc_p(i,k,j) = edmf_qc(k,i) - edmfqt_p(i,k,j) = edmf_qt(k,i) - edmfthl_p(i,k,j) = edmf_thl(k,i) - edmfw_p(i,k,j) = edmf_w(k,i) - subthl_p(i,k,j) = sub_thl(k,i) - subqv_p(i,k,j) = sub_qv(k,i) - detthl_p(i,k,j) = det_thl(k,i) - detqv_p(i,k,j) = det_qv(k,i) - dqke_p(i,k,j) = 0._RKIND - qbuoy_p(i,k,j) = 0._RKIND - qdiss_p(i,k,j) = 0._RKIND - qshear_p(i,k,j) = 0._RKIND - qwt_p(i,k,j) = 0._RKIND rqsblten_p(i,k,j) = 0._RKIND rncblten_p(i,k,j) = 0._RKIND @@ -845,6 +835,39 @@ subroutine pbl_from_MPAS(configs,state,mesh,sfc_input,diag_physics,tend_physics, enddo enddo + if(config_mynn_edmf_output > 0)then + do j = jts,jte + do k = kts,kte + do i = its,ite + edmfa_p(i,k,j) = edmf_a(k,i) + edmfent_p(i,k,j) = edmf_ent(k,i) + edmfqc_p(i,k,j) = edmf_qc(k,i) + edmfqt_p(i,k,j) = edmf_qt(k,i) + edmfthl_p(i,k,j) = edmf_thl(k,i) + edmfw_p(i,k,j) = edmf_w(k,i) + subthl_p(i,k,j) = sub_thl(k,i) + subqv_p(i,k,j) = sub_qv(k,i) + detthl_p(i,k,j) = det_thl(k,i) + detqv_p(i,k,j) = det_qv(k,i) + enddo + enddo + enddo + endif + + if(config_mynn_tkebudget == 1)then + do j = jts,jte + do k = kts,kte + do i = its,ite + dqke_p(i,k,j) = 0._RKIND + qbuoy_p(i,k,j) = 0._RKIND + qdiss_p(i,k,j) = 0._RKIND + qshear_p(i,k,j) = 0._RKIND + qwt_p(i,k,j) = 0._RKIND + enddo + enddo + enddo + endif + do j = jts,jte do i = its,ite maxwidthbl_p(i,j) = 0._RKIND @@ -961,6 +984,7 @@ subroutine pbl_to_MPAS(configs,state,diag_physics,tend_physics,its,ite) real(kind=RKIND),dimension(:),pointer :: delta,wstar !local pointers for MYNN scheme: + integer,pointer:: config_mynn_tkebudget,config_mynn_edmf_output real(kind=RKIND),dimension(:),pointer :: maxmf,maxwidth,ztop_plume,excess_h,excess_q real(kind=RKIND),dimension(:),pointer :: maxmf_dd,maxwidth_dd,maxtkeprod_dd,cldtop_cooling,ent_eff real(kind=RKIND),dimension(:,:),pointer:: cov,qke,qsq,tsq,sh3d,sm3d,tke_pbl,qke_adv,el_pbl,dqke,qbuoy, & @@ -1147,7 +1171,9 @@ subroutine pbl_to_MPAS(configs,state,diag_physics,tend_physics,its,ite) enddo endif - case("bl_mynnedmf") + case("bl_mynnedmf") + call mpas_pool_get_config(configs,'config_mynn_edmf_output',config_mynn_edmf_output) + call mpas_pool_get_config(configs,'config_mynn_tkebudget',config_mynn_tkebudget) call mpas_pool_get_array(diag_physics,'maxmf' ,maxmf ) call mpas_pool_get_array(diag_physics,'maxwidth' ,maxwidth ) call mpas_pool_get_array(diag_physics,'ztop_plume' ,ztop_plume ) @@ -1166,25 +1192,28 @@ subroutine pbl_to_MPAS(configs,state,diag_physics,tend_physics,its,ite) call mpas_pool_get_array(diag_physics,'tsq' ,tsq ) call mpas_pool_get_array(diag_physics,'sh3d' ,sh3d ) call mpas_pool_get_array(diag_physics,'sm3d' ,sm3d ) - call mpas_pool_get_array(diag_physics,'dqke' ,dqke ) - call mpas_pool_get_array(diag_physics,'qbuoy' ,qbuoy ) - call mpas_pool_get_array(diag_physics,'qdiss' ,qdiss ) - call mpas_pool_get_array(diag_physics,'qshear' ,qshear ) - call mpas_pool_get_array(diag_physics,'qwt' ,qwt ) + if(config_mynn_tkebudget == 1) then + call mpas_pool_get_array(diag_physics,'dqke' ,dqke ) + call mpas_pool_get_array(diag_physics,'qbuoy' ,qbuoy ) + call mpas_pool_get_array(diag_physics,'qdiss' ,qdiss ) + call mpas_pool_get_array(diag_physics,'qshear' ,qshear ) + call mpas_pool_get_array(diag_physics,'qwt' ,qwt ) + endif call mpas_pool_get_array(diag_physics,'cldfrac_bl' ,cldfrac_bl ) call mpas_pool_get_array(diag_physics,'qc_bl' ,qc_bl ) call mpas_pool_get_array(diag_physics,'qi_bl' ,qi_bl ) - call mpas_pool_get_array(diag_physics,'edmf_a' ,edmf_a ) - call mpas_pool_get_array(diag_physics,'edmf_ent' ,edmf_ent ) - call mpas_pool_get_array(diag_physics,'edmf_qc' ,edmf_qc ) - call mpas_pool_get_array(diag_physics,'edmf_qt' ,edmf_qt ) - call mpas_pool_get_array(diag_physics,'edmf_thl' ,edmf_thl ) - call mpas_pool_get_array(diag_physics,'edmf_w' ,edmf_w ) - call mpas_pool_get_array(diag_physics,'sub_thl' ,sub_thl ) - call mpas_pool_get_array(diag_physics,'sub_qv' ,sub_qv ) - call mpas_pool_get_array(diag_physics,'det_thl' ,det_thl ) - call mpas_pool_get_array(diag_physics,'det_qv' ,det_qv ) - + if(config_mynn_edmf_output > 0) then + call mpas_pool_get_array(diag_physics,'edmf_a' ,edmf_a ) + call mpas_pool_get_array(diag_physics,'edmf_ent' ,edmf_ent ) + call mpas_pool_get_array(diag_physics,'edmf_qc' ,edmf_qc ) + call mpas_pool_get_array(diag_physics,'edmf_qt' ,edmf_qt ) + call mpas_pool_get_array(diag_physics,'edmf_thl' ,edmf_thl ) + call mpas_pool_get_array(diag_physics,'edmf_w' ,edmf_w ) + call mpas_pool_get_array(diag_physics,'sub_thl' ,sub_thl ) + call mpas_pool_get_array(diag_physics,'sub_qv' ,sub_qv ) + call mpas_pool_get_array(diag_physics,'det_thl' ,det_thl ) + call mpas_pool_get_array(diag_physics,'det_qv' ,det_qv ) + endif call mpas_pool_get_array(tend_physics,'rqsblten' ,rqsblten ) do j = jts,jte @@ -1216,27 +1245,43 @@ subroutine pbl_to_MPAS(configs,state,diag_physics,tend_physics,its,ite) cldfrac_bl(k,i) = cldfrabl_p(i,k,j) qc_bl(k,i) = qcbl_p(i,k,j) qi_bl(k,i) = qibl_p(i,k,j) - edmf_a(k,i) = edmfa_p(i,k,j) - edmf_ent(k,i) = edmfent_p(i,k,j) - edmf_qc(k,i) = edmfqc_p(i,k,j) - edmf_qt(k,i) = edmfqt_p(i,k,j) - edmf_thl(k,i) = edmfthl_p(i,k,j) - edmf_w(k,i) = edmfw_p(i,k,j) - sub_thl(k,i) = subthl_p(i,k,j) - sub_qv(k,i) = subqv_p(i,k,j) - det_thl(k,i) = detthl_p(i,k,j) - det_qv(k,i) = detqv_p(i,k,j) - dqke(k,i) = dqke_p(i,k,j) - qbuoy(k,i) = qbuoy_p(i,k,j) - qdiss(k,i) = qdiss_p(i,k,j) - qshear(k,i) = qshear_p(i,k,j) - qwt(k,i) = qwt_p(i,k,j) - rqsblten(k,i) = rqsblten_p(i,k,j) enddo enddo enddo + if(config_mynn_edmf_output > 0)then + do j = jts,jte + do k = kts,kte + do i = its,ite + edmf_a(k,i) = edmfa_p(i,k,j) + edmf_ent(k,i) = edmfent_p(i,k,j) + edmf_qc(k,i) = edmfqc_p(i,k,j) + edmf_qt(k,i) = edmfqt_p(i,k,j) + edmf_thl(k,i) = edmfthl_p(i,k,j) + edmf_w(k,i) = edmfw_p(i,k,j) + sub_thl(k,i) = subthl_p(i,k,j) + sub_qv(k,i) = subqv_p(i,k,j) + det_thl(k,i) = detthl_p(i,k,j) + det_qv(k,i) = detqv_p(i,k,j) + enddo + enddo + enddo + endif + if(config_mynn_tkebudget == 1)then + do j = jts,jte + do k = kts,kte + do i = its,ite + dqke(k,i) = dqke_p(i,k,j) + qbuoy(k,i) = qbuoy_p(i,k,j) + qdiss(k,i) = qdiss_p(i,k,j) + qshear(k,i) = qshear_p(i,k,j) + qwt(k,i) = qwt_p(i,k,j) + enddo + enddo + enddo + endif + if(f_ni) then call mpas_pool_get_array(tend_physics,'rniblten',rniblten) do j = jts,jte @@ -1382,7 +1427,6 @@ subroutine driver_pbl(itimestep,configs,state,mesh,sfc_input,diag_physics,tend_p bl_mynn_mixqt, & bl_mynn_ess, & bl_mynn_tkebudget, & - icloud_bl, & spp_pbl real(kind=RKIND),pointer:: bl_mynn_closure @@ -1465,7 +1509,6 @@ subroutine driver_pbl(itimestep,configs,state,mesh,sfc_input,diag_physics,tend_p call mpas_pool_get_config(configs,'config_mynn_mixqt' ,bl_mynn_mixqt ) call mpas_pool_get_config(configs,'config_mynn_tkeadvect' ,bl_mynn_tkeadvect ) call mpas_pool_get_config(configs,'config_mynn_tkebudget' ,bl_mynn_tkebudget ) - call mpas_pool_get_config(configs,'config_icloud_bl' ,icloud_bl ) call mpas_pool_get_config(configs,'config_spp_pbl' ,spp_pbl ) ! call mpas_log_write(' ') ! call mpas_log_write('--- enter subroutine mynn_bl_driver:') @@ -1561,10 +1604,6 @@ subroutine driver_pbl(itimestep,configs,state,mesh,sfc_input,diag_physics,tend_p case("bl_mynnedmf") call mpas_pool_get_config(configs,'config_mynn_cloudpdf' ,bl_mynn_cloudpdf ) call mpas_pool_get_config(configs,'config_mynn_mixlength' ,bl_mynn_mixlength ) - call mpas_pool_get_config(configs,'config_mynn_stfunc' ,bl_mynn_stfunc ) - call mpas_pool_get_config(configs,'config_mynn_topdown' ,bl_mynn_topdown ) - call mpas_pool_get_config(configs,'config_mynn_scaleaware' ,bl_mynn_scaleaware ) - call mpas_pool_get_config(configs,'config_mynn_dheat_opt' ,bl_mynn_dheat_opt ) call mpas_pool_get_config(configs,'config_mynn_edmf' ,bl_mynn_edmf ) call mpas_pool_get_config(configs,'config_mynn_edmf_dd' ,bl_mynn_edmf_dd ) call mpas_pool_get_config(configs,'config_mynn_edmf_mom' ,bl_mynn_edmf_mom ) @@ -1579,7 +1618,6 @@ subroutine driver_pbl(itimestep,configs,state,mesh,sfc_input,diag_physics,tend_p call mpas_pool_get_config(configs,'config_mynn_ess' ,bl_mynn_ess ) call mpas_pool_get_config(configs,'config_mynn_tkeadvect' ,bl_mynn_tkeadvect ) call mpas_pool_get_config(configs,'config_mynn_tkebudget' ,bl_mynn_tkebudget ) - call mpas_pool_get_config(configs,'config_icloud_bl' ,icloud_bl ) call mpas_pool_get_config(configs,'config_spp_pbl' ,spp_pbl ) call mpas_pool_get_config(configs,'config_mynn_enh_mix' ,enh_mix ) @@ -1587,10 +1625,6 @@ subroutine driver_pbl(itimestep,configs,state,mesh,sfc_input,diag_physics,tend_p ! call mpas_log_write('--- enter subroutine mynn_bl_driver:') ! call mpas_log_write('--- config_mynn_cloudpdf = $i',intArgs=(/bl_mynn_cloudpdf/)) ! call mpas_log_write('--- config_mynn_mixlength = $i',intArgs=(/bl_mynn_mixlength/)) -! call mpas_log_write('--- config_mynn_stfunc = $i',intArgs=(/bl_mynn_stfunc/)) -! call mpas_log_write('--- config_mynn_topdown = $i',intArgs=(/bl_mynn_topdown/)) -! call mpas_log_write('--- config_mynn_scaleaware = $i',intArgs=(/bl_mynn_scaleaware/)) -! call mpas_log_write('--- config_mynn_dheat_opt = $i',intArgs=(/bl_mynn_dheat_opt/)) ! call mpas_log_write('--- config_mynn_edmf = $i',intArgs=(/bl_mynn_edmf/)) ! call mpas_log_write('--- config_mynn_edmf_dd = $i',intArgs=(/bl_mynn_edmf_dd/)) ! call mpas_log_write('--- config_mynn_edmf_mom = $i',intArgs=(/bl_mynn_edmf_mom/)) @@ -1618,19 +1652,20 @@ subroutine driver_pbl(itimestep,configs,state,mesh,sfc_input,diag_physics,tend_p call mpas_timer_start('bl_mynnedmf') call mynnedmf_driver( & f_qc = f_qc , f_qi = f_qi , f_qs = f_qs , & - f_qoz = f_qoz , f_nc = f_nc , f_ni = f_ni , & - f_nifa = f_nifa , f_nwfa = f_nwfa , f_nbca = f_nbca , & - icloud_bl = icloud_bl , delt = dt_pbl , dx = dx_p , & + f_qoz = f_qoz , f_qnc = f_nc , f_qni = f_ni , & + f_qnifa = f_nifa , f_qnwfa = f_nwfa , f_qnbca = f_nbca , & + delt = dt_pbl , dx = dx_p , & xland = xland_p , ps = psfc_p , ts = tsk_p , & qsfc = qsfc_p , ust = ust_p , ch = ch_p , & hfx = hfx_p , qfx = qfx_p , & wspd = wspd_p , znt = znt_p , uoce = uoce_p , & voce = voce_p , dz = dz_p , u = u_p , & v = v_p , w = w_p , th = th_p , & - tt = t_p , p = pres_p , exner = pi_p , & - rho = rho_p , qv = qv_p , qc = qc_p , & - qi = qi_p , qs = qs_p , ni = ni_p , & - nc = nc_p , nifa = nifa_p , nwfa = nwfa_p , & + tk = t_p , p = pres_p , pint = pres2_hyd_p , & + exner = pi_p , rho = rho_p , & + qv = qv_p , qc = qc_p , & + qi = qi_p , qs = qs_p , qni = ni_p , & + qnc = nc_p , qnifa = nifa_p , qnwfa = nwfa_p , & rthraten = rthraten_p , pblh = hpbl_p , kpbl = kpbl_p , & cldfra_bl = cldfrabl_p , qc_bl = qcbl_p , qi_bl = qibl_p , & maxwidth = maxwidthbl_p , maxmf = maxmfbl_p , ztop_plume = zbl_plume_p , & @@ -1641,8 +1676,8 @@ subroutine driver_pbl(itimestep,configs,state,mesh,sfc_input,diag_physics,tend_p tsq = tsq_p , qsq = qsq_p , cov = cov_p , & el_pbl = elpbl_p , rublten = rublten_p , rvblten = rvblten_p , & rthblten = rthblten_p , rqvblten = rqvblten_p , rqcblten = rqcblten_p , & - rqiblten = rqiblten_p , rqsblten = rqsblten_p , rniblten = rniblten_p , & - rncblten = rncblten_p , rnwfablten = rnwfablten_p , rnifablten = rnifablten_p , & + rqiblten = rqiblten_p , rqsblten = rqsblten_p , rqniblten = rniblten_p , & + rqncblten = rncblten_p , rqnwfablten = rnwfablten_p , rqnifablten = rnifablten_p , & edmf_a = edmfa_p , edmf_w = edmfw_p , edmf_qt = edmfqt_p , & edmf_thl = edmfthl_p , edmf_ent = edmfent_p , edmf_qc = edmfqc_p , & sub_thl = subthl_p , sub_sqv = subqv_p , det_thl = detthl_p , & @@ -1650,18 +1685,14 @@ subroutine driver_pbl(itimestep,configs,state,mesh,sfc_input,diag_physics,tend_p dqke = dqke_p , qwt = qwt_p , qshear = qshear_p , & qbuoy = qbuoy_p , qdiss = qdiss_p , sh3d = sh3d_p , & sm3d = sm3d_p , spp_pbl = spp_pbl , pattern_spp = pattern_spp_pbl , & - do_restart = config_do_restart , & - do_DAcycling = config_do_DAcycling , & + restart = config_do_restart , & + cycling = config_do_DAcycling , & initflag = initflag , & bl_mynn_tkeadvect = bl_mynn_tkeadvect , & - bl_mynn_tkebudget = bl_mynn_tkebudget , & + tke_budget = bl_mynn_tkebudget , & bl_mynn_cloudpdf = bl_mynn_cloudpdf , & bl_mynn_mixlength = bl_mynn_mixlength , & bl_mynn_closure = bl_mynn_closure , & - bl_mynn_stfunc = bl_mynn_stfunc , & - bl_mynn_topdown = bl_mynn_topdown , & - bl_mynn_scaleaware = bl_mynn_scaleaware , & - bl_mynn_dheat_opt = bl_mynn_dheat_opt , & bl_mynn_edmf = bl_mynn_edmf , & bl_mynn_edmf_dd = bl_mynn_edmf_dd , & bl_mynn_edmf_mom = bl_mynn_edmf_mom , & diff --git a/src/core_atmosphere/physics/mpas_atmphys_packages.F b/src/core_atmosphere/physics/mpas_atmphys_packages.F index 18b8074f68..2239490f94 100644 --- a/src/core_atmosphere/physics/mpas_atmphys_packages.F +++ b/src/core_atmosphere/physics/mpas_atmphys_packages.F @@ -39,10 +39,12 @@ function atmphys_setup_packages(configs,streamInfo,packages,iocontext) result(ie character(len=StrKIND),pointer:: config_convection_scheme character(len=StrKIND),pointer:: config_pbl_scheme character(len=StrKIND),pointer:: config_lsm_scheme + integer,pointer:: config_mynn_tkebudget,config_mynn_edmf_output logical,pointer:: config_tempo_aerosolaware,config_tempo_hailaware logical,pointer:: mp_kessler_in,mp_thompson_in,mp_thompson_aers_in,mp_wsm6_in,mp_nssl2m_in,nssl3m_in logical,pointer:: mp_tempo_in,tempo_hailaware_in,tempo_aerosolaware_in logical,pointer:: cu_grell_freitas_in,cu_grell_freitas_li_in,cu_kain_fritsch_in,cu_ntiedtke_in + logical,pointer:: bl_mynnedmf_tkebudget_in,bl_mynnedmf_output_in logical,pointer:: bl_mynn_in,bl_mynnedmf_in,bl_ysu_in,bl_myj_in logical,pointer:: lsm_noah_in,lsm_ruc_in logical,pointer:: sf_noahmp_in @@ -196,13 +198,21 @@ function atmphys_setup_packages(configs,streamInfo,packages,iocontext) result(ie !--- initialization of all packages for parameterizations of surface layer and planetary boundary layer: call mpas_pool_get_config(configs,'config_pbl_scheme',config_pbl_scheme) - + call mpas_pool_get_config(configs,'config_mynn_tkebudget',config_mynn_tkebudget) + call mpas_pool_get_config(configs,'config_mynn_edmf_output',config_mynn_edmf_output) + nullify(bl_mynn_in) call mpas_pool_get_package(packages,'bl_mynn_inActive',bl_mynn_in) nullify(bl_mynnedmf_in) call mpas_pool_get_package(packages,'bl_mynnedmf_inActive',bl_mynnedmf_in) - + + nullify(bl_mynnedmf_tkebudget_in) + call mpas_pool_get_package(packages,'bl_mynnedmf_tkebudget_inActive',bl_mynnedmf_tkebudget_in) + + nullify(bl_mynnedmf_output_in) + call mpas_pool_get_package(packages,'bl_mynnedmf_output_inActive',bl_mynnedmf_output_in) + nullify(bl_ysu_in) call mpas_pool_get_package(packages,'bl_ysu_inActive',bl_ysu_in) @@ -211,6 +221,8 @@ function atmphys_setup_packages(configs,streamInfo,packages,iocontext) result(ie if(.not.associated(bl_mynn_in) .or. & .not.associated(bl_mynnedmf_in) .or. & + .not.associated(bl_mynnedmf_output_in) .or. & + .not.associated(bl_mynnedmf_tkebudget_in) .or. & .not.associated(bl_ysu_in) .or. & .not.associated(bl_myj_in)) then call mpas_log_write('====================================================================================',messageType=MPAS_LOG_ERR) @@ -221,13 +233,17 @@ function atmphys_setup_packages(configs,streamInfo,packages,iocontext) result(ie endif bl_mynn_in = .false. - bl_mynnedmf_in = .false. + bl_mynnedmf_in = .false. + bl_mynnedmf_output_in = .false. + bl_mynnedmf_tkebudget_in = .false. bl_ysu_in = .false. bl_myj_in = .false. if(config_pbl_scheme=='bl_mynn') then bl_mynn_in = .true. elseif(config_pbl_scheme == 'bl_mynnedmf') then bl_mynnedmf_in = .true. + if(config_mynn_edmf_output >0) bl_mynnedmf_output_in = .true. + if(config_mynn_tkebudget >0) bl_mynnedmf_tkebudget_in = .true. elseif(config_pbl_scheme == 'bl_ysu') then bl_ysu_in = .true. elseif(config_pbl_scheme == 'bl_myj') then @@ -236,6 +252,8 @@ function atmphys_setup_packages(configs,streamInfo,packages,iocontext) result(ie call mpas_log_write(' bl_mynn_in = $l', logicArgs=(/bl_mynn_in/)) call mpas_log_write(' bl_mynnedmf_in = $l', logicArgs=(/bl_mynnedmf_in/)) + call mpas_log_write(' bl_mynnedmf_output_in = $l', logicArgs=(/bl_mynnedmf_output_in/)) + call mpas_log_write(' bl_mynnedmf_tkebudget_in= $l', logicArgs=(/bl_mynnedmf_tkebudget_in/)) call mpas_log_write(' bl_ysu_in = $l', logicArgs=(/bl_ysu_in/)) call mpas_log_write(' bl_myj_in = $l', logicArgs=(/bl_myj_in/)) call mpas_log_write('') diff --git a/src/core_atmosphere/physics/physics_noaa/MYNN-EDMF b/src/core_atmosphere/physics/physics_noaa/MYNN-EDMF index c6d08709e8..0cd8b70d9d 160000 --- a/src/core_atmosphere/physics/physics_noaa/MYNN-EDMF +++ b/src/core_atmosphere/physics/physics_noaa/MYNN-EDMF @@ -1 +1 @@ -Subproject commit c6d08709e83fbc6245e91a65600fd78c7219f1ee +Subproject commit 0cd8b70d9d78b912cd0feec2160e2df9b0c52b6a