diff --git a/src/core_atmosphere/CMakeLists.txt b/src/core_atmosphere/CMakeLists.txt
index 7fdbe66992..e0ab12f544 100644
--- a/src/core_atmosphere/CMakeLists.txt
+++ b/src/core_atmosphere/CMakeLists.txt
@@ -138,6 +138,54 @@ set(ATMOSPHERE_CORE_PHYSICS_NOAA_SOURCES
list(TRANSFORM ATMOSPHERE_CORE_PHYSICS_NOAA_SOURCES PREPEND physics/physics_noaa/UGWP/)
+set(ATMOSPHERE_CORE_PHYSICS_MYNN-EDMF_DIR ${CMAKE_CURRENT_SOURCE_DIR}/physics/physics_noaa/MYNN-EDMF)
+
+if(NOT EXISTS ${ATMOSPHERE_CORE_PHYSICS_MYNN-EDMF_DIR})
+ set(PHYSICS_MYNN-EDMF_REPO_URL "https://github.com/NCAR/MYNN-EDMF.git")
+ execute_process(COMMAND git clone ${PHYSICS_MYNN-EDMF_REPO_URL} ${ATMOSPHERE_CORE_PHYSICS_MYNN-EDMF_DIR}
+ RESULT_VARIABLE GIT_CLONE_RESULT
+ OUTPUT_VARIABLE GIT_CLONE_OUTPUT
+ ERROR_VARIABLE GIT_CLONE_ERROR)
+ if(NOT GIT_CLONE_RESULT EQUAL 0)
+ message(FATAL_ERROR "Git clone failed with error: ${GIT_CLONE_ERROR}")
+ endif()
+
+else()
+ message(STATUS "Directory ${DIR_TO_CHECK} already exists, skipping clone")
+endif()
+
+set(ATMOSPHERE_CORE_PHYSICS_MYNN-EDMF_SOURCES
+ module_bl_mynnedmf.F90
+ MPAS/module_bl_mynnedmf_common.F90
+ MPAS/module_bl_mynnedmf_driver.F90
+)
+list(TRANSFORM ATMOSPHERE_CORE_PHYSICS_MYNN-EDMF_SOURCES PREPEND physics/physics_noaa/MYNN-EDMF/)
+
+set(ATMOSPHERE_CORE_PHYSICS_MYNN-SFC_DIR ${CMAKE_CURRENT_SOURCE_DIR}/physics/physics_noaa/MYNN-SFC)
+
+if(NOT EXISTS ${ATMOSPHERE_CORE_PHYSICS_MYNN-SFC_DIR})
+ set(PHYSICS_MYNN-SFC_REPO_URL "https://github.com/NCAR/MYNN-SFC.git")
+ execute_process(COMMAND git clone ${PHYSICS_MYNN-SFC_REPO_URL} ${ATMOSPHERE_CORE_PHYSICS_MYNN-SFC_DIR}
+ RESULT_VARIABLE GIT_CLONE_RESULT
+ OUTPUT_VARIABLE GIT_CLONE_OUTPUT
+ ERROR_VARIABLE GIT_CLONE_ERROR)
+ if(NOT GIT_CLONE_RESULT EQUAL 0)
+ message(FATAL_ERROR "Git clone failed with error: ${GIT_CLONE_ERROR}")
+ endif()
+
+else()
+ message(STATUS "Directory ${DIR_TO_CHECK} already exists, skipping clone")
+endif()
+
+set(ATMOSPHERE_CORE_PHYSICS_MYNN-SFC_SOURCES
+ module_sf_mynnsfc_land.F90
+ module_sf_mynnsfc_water.F90
+ module_sf_mynnsfc_ice.F90
+ MPAS/module_sf_mynnsfc_common.F90
+ MPAS/module_sf_mynnsfc_driver.F90
+)
+list(TRANSFORM ATMOSPHERE_CORE_PHYSICS_MYNN-SFC_SOURCES PREPEND physics/physics_noaa/MYNN-SFC/)
+
set(ATMOSPHERE_CORE_PHYSICS_NOAMP_UTILITY_SOURCES
CheckNanMod.F90
Machine.F90
diff --git a/src/core_atmosphere/Externals.cfg b/src/core_atmosphere/Externals.cfg
index 84dc47d1d8..234c7dc84d 100644
--- a/src/core_atmosphere/Externals.cfg
+++ b/src/core_atmosphere/Externals.cfg
@@ -12,5 +12,19 @@ repo_url = https://github.com/NOAA-GSL/UGWP.git
tag = MPAS_20241223
required = True
+[MYNN-EDMF]
+local_path = ./physics_noaa/MYNN-EDMF
+protocol = git
+repo_url = https://github.com/NCAR/MYNN-EDMF.git
+tag = v6.0.2
+required = True
+
+[MYNN-SFC]
+local_path = ./physics_noaa/MYNN-SFC
+protocol = git
+repo_url = https://github.com/NCAR/MYNN-SFC.git
+tag = v6.0.0
+required = True
+
[externals_description]
schema_version = 1.0.0
diff --git a/src/core_atmosphere/Registry.xml b/src/core_atmosphere/Registry.xml
index f1a55bc3a3..9c29df1d9b 100644
--- a/src/core_atmosphere/Registry.xml
+++ b/src/core_atmosphere/Registry.xml
@@ -473,6 +473,9 @@
+
+
+
@@ -1121,6 +1124,20 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
#endif
@@ -1271,6 +1288,20 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
@@ -1701,7 +1732,7 @@
+ packages="bl_mynn_in;bl_mynnedmf_in;bl_ysu_in;cu_ntiedtke_in;mp_kessler_in;mp_thompson_in;mp_thompson_aers_in;mp_wsm6_in"/>
+ packages="bl_mynn_in;bl_mynnedmf_in;bl_ysu_in;cu_ntiedtke_in;mp_thompson_in;mp_thompson_aers_in;mp_wsm6_in"/>
+ packages="bl_mynn_in;bl_mynnedmf_in;mp_thompson_in;mp_thompson_aers_in;mp_wsm6_in"/>
+ packages="bl_mynn_in;bl_mynnedmf_in;mp_thompson_in;mp_thompson_aers_in"/>
+ packages="bl_mynn_in;bl_mynnedmf_in;bl_ysu_in;cu_ntiedtke_in;mp_kessler_in;mp_thompson_in;mp_thompson_aers_in;mp_wsm6_in"/>
+ packages="bl_mynn_in;bl_mynnedmf_in;bl_ysu_in;cu_ntiedtke_in;mp_thompson_in;mp_thompson_aers_in;mp_wsm6_in"/>
+ packages="bl_mynn_in;bl_mynnedmf_in;mp_thompson_in;mp_thompson_aers_in;mp_wsm6_in"/>
+ packages="bl_mynn_in;bl_mynnedmf_in;mp_thompson_in;mp_thompson_aers_in"/>
-
@@ -2156,7 +2187,7 @@
units="kg kg^{-1} s^{-1}"
description="Lateral boundary tendency of rain water mixing ratio"/>
-
@@ -2172,7 +2203,7 @@
units="m^{-3} s^{-1}"
description="Lateral boundary tendency of rain number concentration"/>
-
@@ -2368,7 +2399,7 @@
+ possible_values="`suite',`bl_ysu',`bl_mynn',`bl_mynnedmf',`off'"/>
+ possible_values="`suite',`cld_fraction',`cld_incidence',`cld_fraction_mynn'"/>
+ possible_values="`suite',`sf_monin_obukhov',`sf_mynn',`sf_mynnsfclay',`off'"/>
+
+
+
+
-
+ description="closure level for the MYNN-EDMF scheme"
+ possible_values="2.5,2.6,2.7,3.0"/>
+ possible_values="`0: Someria-Deardorff',`1: Someria-Deardorf 1st order',`2: Modified Chab-Bechtold'"/>
-
+ description="mixing length option in the MYNN-EDMF scheme"
+ possible_values="`0: orig',`1: operational',`2: research'"/>
-
@@ -2494,14 +2535,24 @@
+ 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"/>
-
+
+
+
+
+
+
+
+
+
+
+ packages="bl_mynn_in;bl_mynnedmf_in;bl_ysu_in"/>
+ packages="bl_mynn_in;bl_mynnedmf_in;bl_ysu_in"/>
+ packages="bl_mynn_in;bl_mynnedmf_in;bl_ysu_in"/>
+ packages="bl_mynn_in;bl_mynnedmf_in;bl_ysu_in"/>
+ packages="bl_mynn_in;bl_mynnedmf_in;bl_ysu_in"/>
@@ -2782,39 +2848,39 @@
+ packages="bl_mynn_in;bl_mynnedmf_in"/>
+ packages="bl_mynn_in;bl_mynnedmf_in"/>
+ packages="bl_mynn_in;bl_mynnedmf_in"/>
+ packages="bl_mynn_in;bl_mynnedmf_in"/>
+ packages="bl_mynn_in;bl_mynnedmf_in"/>
+ packages="bl_mynn_in;bl_mynnedmf_in"/>
+ packages="bl_mynn_in;bl_mynnedmf_in"/>
+ packages="bl_mynn_in;bl_mynnedmf_in"/>
+ packages="bl_mynn_in;bl_mynnedmf_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_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_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_tkebudget_in"/>
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
@@ -2887,111 +2993,115 @@
+ packages="bl_mynn_in;bl_mynnedmf_in;bl_ysu_in"/>
+ packages="bl_mynn_in;bl_mynnedmf_in;bl_ysu_in"/>
+ packages="bl_mynn_in;bl_mynnedmf_in;bl_ysu_in"/>
+ packages="bl_mynn_in;bl_mynnedmf_in;bl_ysu_in"/>
+ packages="bl_mynn_in;bl_mynnedmf_in;bl_ysu_in"/>
+ packages="bl_mynn_in;bl_mynnedmf_in;bl_ysu_in"/>
+ packages="bl_mynn_in;bl_mynnedmf_in;bl_ysu_in"/>
+ packages="bl_mynn_in;bl_mynnedmf_in;bl_ysu_in"/>
+ packages="bl_mynn_in;bl_mynnedmf_in;bl_ysu_in"/>
+ packages="bl_mynn_in;bl_mynnedmf_in;bl_ysu_in"/>
+ packages="bl_mynn_in;bl_mynnedmf_in;bl_ysu_in"/>
+ packages="bl_mynn_in;bl_mynnedmf_in;bl_ysu_in"/>
+ packages="bl_mynn_in;bl_mynnedmf_in;bl_ysu_in"/>
+ packages="bl_mynn_in;bl_mynnedmf_in;bl_ysu_in"/>
+
+
+ packages="bl_mynn_in;bl_mynnedmf_in;bl_ysu_in"/>
+ packages="bl_mynn_in;bl_mynnedmf_in;bl_ysu_in"/>
+ packages="bl_mynn_in;bl_mynnedmf_in;bl_ysu_in"/>
+ packages="bl_mynn_in;bl_mynnedmf_in;bl_ysu_in"/>
+ packages="bl_mynn_in;bl_mynnedmf_in;bl_ysu_in"/>
+ packages="bl_mynn_in;bl_mynnedmf_in;bl_ysu_in"/>
+ packages="bl_mynn_in;bl_mynnedmf_in;bl_ysu_in"/>
+ packages="bl_mynn_in;bl_mynnedmf_in;bl_ysu_in"/>
+ packages="bl_mynn_in;bl_mynnedmf_in;bl_ysu_in"/>
+ packages="bl_mynn_in;bl_mynnedmf_in;bl_ysu_in"/>
+ packages="bl_mynn_in;bl_mynnedmf_in;bl_ysu_in"/>
+ packages="bl_mynn_in;bl_mynnedmf_in;bl_ysu_in"/>
+ packages="bl_mynn_in;bl_mynnedmf_in;bl_ysu_in"/>
@@ -3007,35 +3117,35 @@
+ packages="bl_mynn_in;bl_mynnedmf_in"/>
+ packages="bl_mynn_in;bl_mynnedmf_in"/>
+ packages="bl_mynn_in;bl_mynnedmf_in"/>
+ packages="bl_mynn_in;bl_mynnedmf_in"/>
-
-
-
-
-
@@ -3647,47 +3757,47 @@
+ packages="bl_mynn_in;bl_mynnedmf_in;bl_ysu_in"/>
+ packages="bl_mynn_in;bl_mynnedmf_in;bl_ysu_in"/>
+ packages="bl_mynn_in;bl_mynnedmf_in;bl_ysu_in"/>
+ packages="bl_mynn_in;bl_mynnedmf_in;bl_ysu_in"/>
+ packages="bl_mynn_in;bl_mynnedmf_in;bl_ysu_in"/>
+ packages="bl_mynn_in;bl_mynnedmf_in;bl_ysu_in"/>
+ packages="bl_mynn_in;bl_mynnedmf_in"/>
+ packages="bl_mynn_in;bl_mynnedmf_in"/>
+ packages="bl_mynn_in;bl_mynnedmf_in"/>
+ packages="bl_mynn_in;bl_mynnedmf_in"/>
+ packages="bl_mynn_in;bl_mynnedmf_in"/>
@@ -3983,7 +4093,7 @@
units="kg kg^{-1}"
description="Water vapor mixing ratio increment"/>
-
@@ -3991,7 +4101,7 @@
units="kg kg^{-1}"
description="Rain water mixing ratio increment"/>
-
diff --git a/src/core_atmosphere/physics/Makefile b/src/core_atmosphere/physics/Makefile
index ac5ff5d6f3..dd84084f6c 100644
--- a/src/core_atmosphere/physics/Makefile
+++ b/src/core_atmosphere/physics/Makefile
@@ -6,7 +6,7 @@ endif
all:
./../tools/manage_externals/checkout_externals --externals ./../Externals.cfg
- $(MAKE) lookup_tables core_physics_init core_physics_mmm core_UGWP core_physics_wrf core_physics_noahmp core_physics
+ $(MAKE) lookup_tables core_physics_init core_physics_mmm core_UGWP core_mynnedmf core_mynnsfc core_physics_wrf core_physics_noahmp core_physics
dummy:
echo "****** compiling physics ******"
@@ -63,7 +63,13 @@ core_physics_mmm: core_physics_init
core_UGWP: core_physics_init
(cd physics_noaa/UGWP; $(MAKE) all)
-core_physics_wrf: core_physics_init core_physics_mmm core_UGWP
+core_mynnedmf: core_physics_init
+ (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_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)
+
+core_physics_wrf: core_physics_init core_physics_mmm core_UGWP core_mynnedmf
(cd physics_wrf; $(MAKE) all COREDEF="$(COREDEF)")
core_physics_noahmp:
@@ -73,7 +79,7 @@ core_physics_noahmp:
core_physics_init: $(OBJS_init)
-core_physics: core_physics_wrf core_physics_noahmp
+core_physics: core_physics_wrf core_physics_noahmp core_mynnedmf core_mynnsfc
($(MAKE) phys_interface COREDEF="$(COREDEF)")
ar -ru libphys.a $(OBJS_init) $(OBJS)
($(MAKE) -C ./physics_mmm -f Makefile.mpas physics_mmm_lib)
@@ -254,6 +260,8 @@ clean:
( cd physics_noahmp/src; $(MAKE) clean )
( cd physics_noahmp/utility; $(MAKE) clean )
( if [ -d physics_noaa/UGWP ]; then cd physics_noaa/UGWP; $(MAKE) clean; fi )
+ ( if [ -d physics_noaa/MYNN-EDMF ]; then cd physics_noaa/MYNN-EDMF; $(MAKE) clean; fi )
+ ( if [ -d physics_noaa/MYNN-SFC ]; then cd physics_noaa/MYNN-SFC; $(MAKE) clean; fi )
@# Certain systems with intel compilers generate *.i files
@# This removes them during the clean process
$(RM) *.i
@@ -264,5 +272,5 @@ ifeq "$(GEN_F90)" "true"
$(CPP) $(CPPFLAGS) $(COREDEF) $(HYDROSTATIC) $(CPPINCLUDES) $< > $*.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.. -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/UGWP -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/UGWP -I./physics_noaa/MYNN-EDMF -I./physics_noaa/MYNN-SFC -I.. -I../../framework $(MPAS_ESMF_INC)
endif
diff --git a/src/core_atmosphere/physics/mpas_atmphys_control.F b/src/core_atmosphere/physics/mpas_atmphys_control.F
index b3162019e5..25f5a391b9 100644
--- a/src/core_atmosphere/physics/mpas_atmphys_control.F
+++ b/src/core_atmosphere/physics/mpas_atmphys_control.F
@@ -199,8 +199,9 @@ subroutine physics_namelist_check(configs)
endif
!pbl scheme:
- if(.not. (config_pbl_scheme .eq. 'off' .or. &
- config_pbl_scheme .eq. 'bl_mynn' .or. &
+ if(.not. (config_pbl_scheme .eq. 'off' .or. &
+ config_pbl_scheme .eq. 'bl_mynn' .or. &
+ config_pbl_scheme .eq. 'bl_mynnedmf' .or. &
config_pbl_scheme .eq. 'bl_ysu')) then
write(mpas_err_message,'(A,A20)') 'illegal value for pbl_scheme: ', &
@@ -243,10 +244,11 @@ subroutine physics_namelist_check(configs)
endif
!cloud fraction for radiation schemes:
- if(.not. (config_radt_cld_scheme .eq. 'off' .or. &
- config_radt_cld_scheme .eq. 'cld_incidence' .or. &
- config_radt_cld_scheme .eq. 'cld_fraction' .or. &
- config_radt_cld_scheme .eq. 'cld_fraction_thompson')) then
+ if(.not. (config_radt_cld_scheme .eq. 'off' .or. &
+ config_radt_cld_scheme .eq. 'cld_incidence' .or. &
+ config_radt_cld_scheme .eq. 'cld_fraction' .or. &
+ config_radt_cld_scheme .eq. 'cld_fraction_thompson' .or. &
+ config_radt_cld_scheme .eq. 'cld_fraction_mynn')) then
write(mpas_err_message,'(A,A20)') 'illegal value for calculation of cloud fraction: ', &
trim(config_radt_cld_scheme)
@@ -266,10 +268,19 @@ subroutine physics_namelist_check(configs)
config_radt_cld_scheme = "cld_incidence"
endif
+ if(.not. (config_pbl_scheme .eq. 'bl_mynn' .or. &
+ config_pbl_scheme .eq. 'bl_mynnedmf') .and. &
+ (config_radt_cld_scheme .eq. 'cld_fraction_mynn')) then
+ write(mpas_err_message,'(A,A20)') 'illegal cloud fraction option for pbl_scheme: ', &
+ trim(config_pbl_scheme)
+ call physics_error_fatal(mpas_err_message)
+ endif
+
!surface-layer scheme:
if(.not. (config_sfclayer_scheme .eq. 'off' .or. &
config_sfclayer_scheme .eq. 'sf_mynn' .or. &
+ config_sfclayer_scheme .eq. 'sf_mynnsfclay' .or. &
config_sfclayer_scheme .eq. 'sf_monin_obukhov' .or. &
config_sfclayer_scheme .eq. 'sf_monin_obukhov_rev')) then
@@ -279,6 +290,8 @@ subroutine physics_namelist_check(configs)
else
if(config_pbl_scheme == 'bl_mynn') then
config_sfclayer_scheme = 'sf_mynn'
+ elseif(config_pbl_scheme == 'bl_mynnedmf') then
+ config_sfclayer_scheme = 'sf_mynnsfclay'
elseif(config_pbl_scheme == 'bl_ysu') then
if(config_sfclayer_scheme /= 'sf_monin_obukhov' .and. &
config_sfclayer_scheme /= 'sf_monin_obukhov_rev') then
diff --git a/src/core_atmosphere/physics/mpas_atmphys_driver.F b/src/core_atmosphere/physics/mpas_atmphys_driver.F
index 8e31672657..65a965b9d1 100644
--- a/src/core_atmosphere/physics/mpas_atmphys_driver.F
+++ b/src/core_atmosphere/physics/mpas_atmphys_driver.F
@@ -213,10 +213,10 @@ subroutine physics_driver(domain,itimestep,xtime_s)
!call to cloud scheme:
if(l_radtlw .or. l_radtsw) then
- call allocate_cloudiness
+ call allocate_cloudiness(block%configs)
!$OMP PARALLEL DO
do thread=1,nThreads
- call driver_cloudiness(block%configs,mesh,diag_physics,sfc_input, &
+ call driver_cloudiness(itimestep,block%configs,mesh,diag_physics,sfc_input, &
cellSolveThreadStart(thread),cellSolveThreadEnd(thread))
end do
!$OMP END PARALLEL DO
@@ -260,7 +260,7 @@ subroutine physics_driver(domain,itimestep,xtime_s)
!deallocate all radiation arrays:
if(config_radt_sw_scheme.ne.'off' .or. config_radt_lw_scheme.ne.'off') &
- call deallocate_cloudiness
+ call deallocate_cloudiness(block%configs)
if(config_radt_sw_scheme.ne.'off') call deallocate_radiation_sw(block%configs)
if(config_radt_lw_scheme.ne.'off') call deallocate_radiation_lw(block%configs)
@@ -321,7 +321,7 @@ subroutine physics_driver(domain,itimestep,xtime_s)
call allocate_pbl(block%configs)
!$OMP PARALLEL DO
do thread=1,nThreads
- call driver_pbl(itimestep,block%configs,mesh,sfc_input,diag_physics,tend_physics, &
+ call driver_pbl(itimestep,block%configs,state,mesh,sfc_input,diag_physics,tend_physics, &
cellSolveThreadStart(thread),cellSolveThreadEnd(thread))
end do
!$OMP END PARALLEL DO
diff --git a/src/core_atmosphere/physics/mpas_atmphys_driver_cloudiness.F b/src/core_atmosphere/physics/mpas_atmphys_driver_cloudiness.F
index 93e833b328..4b0f463f09 100644
--- a/src/core_atmosphere/physics/mpas_atmphys_driver_cloudiness.F
+++ b/src/core_atmosphere/physics/mpas_atmphys_driver_cloudiness.F
@@ -61,9 +61,16 @@ module mpas_atmphys_driver_cloudiness
!=================================================================================================================
- subroutine allocate_cloudiness
+ subroutine allocate_cloudiness(configs)
!=================================================================================================================
+!input arguments:
+ type(mpas_pool_type),intent(in):: configs
+!local pointer:
+ character(len=StrKIND),pointer:: radt_cld_scheme
+
+ call mpas_pool_get_config(configs,'config_radt_cld_scheme',radt_cld_scheme)
+
if(.not.allocated(dx_p) ) allocate(dx_p(ims:ime,jms:jme) )
if(.not.allocated(xland_p) ) allocate(xland_p(ims:ime,jms:jme) )
if(.not.allocated(cldfrac_p)) allocate(cldfrac_p(ims:ime,kms:kme,jms:jme))
@@ -72,12 +79,28 @@ subroutine allocate_cloudiness
if(.not.allocated(qirad_p) ) allocate(qirad_p(ims:ime,kms:kme,jms:jme) )
if(.not.allocated(qsrad_p) ) allocate(qsrad_p(ims:ime,kms:kme,jms:jme) )
+ cld_fraction_select: select case (trim(radt_cld_scheme))
+
+ case("cld_fraction_mynn")
+ if(.not.allocated(qibl_p)) allocate(qibl_p(ims:ime,kms:kme,jms:jme))
+ if(.not.allocated(qcbl_p)) allocate(qcbl_p(ims:ime,kms:kme,jms:jme))
+ case default
+
+ end select cld_fraction_select
+
end subroutine allocate_cloudiness
!=================================================================================================================
- subroutine deallocate_cloudiness
+ subroutine deallocate_cloudiness(configs)
!=================================================================================================================
+!input arguments:
+ type(mpas_pool_type),intent(in):: configs
+!local pointer:
+ character(len=StrKIND),pointer:: radt_cld_scheme
+
+ call mpas_pool_get_config(configs,'config_radt_cld_scheme',radt_cld_scheme)
+
if(allocated(dx_p) ) deallocate(dx_p )
if(allocated(xland_p) ) deallocate(xland_p )
if(allocated(cldfrac_p)) deallocate(cldfrac_p)
@@ -86,15 +109,25 @@ subroutine deallocate_cloudiness
if(allocated(qirad_p) ) deallocate(qirad_p )
if(allocated(qsrad_p) ) deallocate(qsrad_p )
+ cld_fraction_select: select case (trim(radt_cld_scheme))
+
+ case("cld_fraction_mynn")
+ if(allocated(qibl_p)) deallocate(qibl_p)
+ if(allocated(qcbl_p)) deallocate(qcbl_p)
+ case default
+
+ end select cld_fraction_select
+
end subroutine deallocate_cloudiness
!=================================================================================================================
- subroutine cloudiness_from_MPAS(configs,mesh,diag_physics,sfc_input,its,ite)
+ subroutine cloudiness_from_MPAS(itimestep,configs,mesh,diag_physics,sfc_input,its,ite)
!=================================================================================================================
!input arguments:
integer,intent(in):: its,ite
-
+ integer,intent(in):: itimestep
+
!input and inout arguments:
type(mpas_pool_type),intent(in) :: configs
type(mpas_pool_type),intent(in) :: mesh
@@ -110,6 +143,10 @@ subroutine cloudiness_from_MPAS(configs,mesh,diag_physics,sfc_input,its,ite)
real(kind=RKIND),dimension(:),pointer:: areaCell,meshDensity
real(kind=RKIND),dimension(:),pointer:: xland
+ real(kind=RKIND),dimension(:,:),pointer:: cldfrac_bl,qi_bl,qc_bl
+
+ character(len=StrKIND),pointer:: radt_cld_scheme
+
!-----------------------------------------------------------------------------------------------------------------
call mpas_pool_get_config(configs,'config_len_disp',len_disp)
@@ -118,7 +155,8 @@ subroutine cloudiness_from_MPAS(configs,mesh,diag_physics,sfc_input,its,ite)
call mpas_pool_get_array(mesh,'meshDensity',meshDensity)
call mpas_pool_get_array(sfc_input,'xland',xland)
-
+ call mpas_pool_get_config(configs,'config_radt_cld_scheme',radt_cld_scheme)
+
do j = jts,jte
do i = its,ite
dx_p(i,j) = len_disp / meshDensity(i)**0.25
@@ -140,6 +178,49 @@ subroutine cloudiness_from_MPAS(configs,mesh,diag_physics,sfc_input,its,ite)
enddo
enddo
+ cld_fraction_select: select case (trim(radt_cld_scheme))
+
+ case("cld_fraction_mynn")
+ call mpas_pool_get_array(diag_physics,'cldfrac_bl',cldfrac_bl)
+ call mpas_pool_get_array(diag_physics,'qi_bl',qi_bl)
+ call mpas_pool_get_array(diag_physics,'qc_bl',qc_bl)
+ if(itimestep > 0) then
+ do j = jts,jte
+ do k = kts,kte
+ do i = its,ite
+ if (cldfrac_bl(k,i) .gt. 0.001) then
+ cldfrac_p(i,k,j) = cldfrac_bl(k,i)
+ endif
+ enddo
+ enddo
+ enddo
+ else
+ do j = jts,jte
+ do k = kts,kte
+ do i = its,ite
+ if (qcrad_p(i,k,j) .gt. 1e-6 .or. &
+ qirad_p(i,k,j) .gt. 1e-9 .or. &
+ qsrad_p(i,k,j) .gt. 1e-8 ) then
+ cldfrac_p(i,k,j) = 1._RKIND
+ endif
+ enddo
+ enddo
+ enddo
+ endif
+
+ do j = jts,jte
+ do k = kts,kte
+ do i = its,ite
+ qcbl_p(i,k,j) = qc_bl(k,i)
+ qibl_p(i,k,j) = qi_bl(k,i)
+ enddo
+ enddo
+ enddo
+
+ case default
+
+ end select cld_fraction_select
+
end subroutine cloudiness_from_MPAS
!=================================================================================================================
@@ -172,7 +253,7 @@ subroutine cloudiness_to_MPAS(diag_physics,its,ite)
end subroutine cloudiness_to_MPAS
!=================================================================================================================
- subroutine driver_cloudiness(configs,mesh,diag_physics,sfc_input,its,ite)
+ subroutine driver_cloudiness(itimestep,configs,mesh,diag_physics,sfc_input,its,ite)
!=================================================================================================================
!input arguments:
@@ -181,7 +262,8 @@ subroutine driver_cloudiness(configs,mesh,diag_physics,sfc_input,its,ite)
type(mpas_pool_type),intent(in) :: sfc_input
integer,intent(in):: its,ite
-
+ integer,intent(in):: itimestep
+
!inout arguments:
type(mpas_pool_type),intent(inout):: diag_physics
@@ -197,7 +279,7 @@ subroutine driver_cloudiness(configs,mesh,diag_physics,sfc_input,its,ite)
call mpas_pool_get_config(configs,'config_radt_cld_scheme',radt_cld_scheme)
!copy MPAS arrays to local arrays:
- call cloudiness_from_MPAS(configs,mesh,diag_physics,sfc_input,its,ite)
+ call cloudiness_from_MPAS(itimestep,configs,mesh,diag_physics,sfc_input,its,ite)
cld_fraction_select: select case (trim(radt_cld_scheme))
case("cld_incidence")
@@ -222,6 +304,13 @@ subroutine driver_cloudiness(configs,mesh,diag_physics,sfc_input,its,ite)
)
call mpas_timer_stop('cal_cldfra3')
+ case("cld_fraction_mynn")
+ call mpas_timer_start('cal_mynncld')
+ call cal_mynncld(cldfrac_p , qcrad_p , qirad_p , &
+ qcbl_p , qibl_p , &
+ its, ite , jts , jte , kts , kte )
+ call mpas_timer_stop('cal_mynncld')
+
case default
end select cld_fraction_select
@@ -369,6 +458,39 @@ subroutine calc_cldfraction(cldfrac,t_p,pres_p,qv,qc,qi,qs,its,ite)
end subroutine calc_cldfraction
+!=================================================================================================================
+ subroutine cal_mynncld(cldfrac,qc,qi,qc_bl,qi_bl,its,ite,jts,jte,kts,kte)
+!=================================================================================================================
+
+!input arguments:
+ integer,intent(in):: its,ite,jts,jte,kts,kte
+ real(kind=RKIND),intent(inout),dimension(ims:ime,kms:kme,jms:jme):: qc,qi
+ real(kind=RKIND),intent(in), dimension(ims:ime,kms:kme,jms:jme):: qc_bl,qi_bl
+ real(kind=RKIND),intent(in), dimension(ims:ime,kms:kme,jms:jme):: cldfrac
+
+!local variables:
+ integer:: i,j,k
+
+ real(kind=RKIND),parameter:: qc_thresh = 1.e-06
+ real(kind=RKIND),parameter:: qi_thresh = 1.e-09
+ real(kind=RKIND),parameter:: cld_thresh = 1.e-03
+
+ do j = jts,jte
+ do k = kts,kte
+ do i = its,ite
+
+ if (qc(i,k,j) < qc_thresh .AND. cldfrac(i,k,j) > cld_thresh) THEN
+ qc(i,k,j)=qc(i,k,j) + qc_bl(i,k,j)
+ endif
+ if (qi(i,k,j) < qi_thresh .AND. cldfrac(i,k,j) > cld_thresh) THEN
+ qi(i,k,j)=qi(i,k,j) + qi_bl(i,k,j)
+ endif
+ enddo
+ enddo
+ enddo
+
+ end subroutine cal_mynncld
+
!=================================================================================================================
end module mpas_atmphys_driver_cloudiness
!=================================================================================================================
diff --git a/src/core_atmosphere/physics/mpas_atmphys_driver_pbl.F b/src/core_atmosphere/physics/mpas_atmphys_driver_pbl.F
index 72a411aeba..f53aa0305e 100644
--- a/src/core_atmosphere/physics/mpas_atmphys_driver_pbl.F
+++ b/src/core_atmosphere/physics/mpas_atmphys_driver_pbl.F
@@ -16,6 +16,7 @@ module mpas_atmphys_driver_pbl
use bl_mynn,only: bl_mynn_init
use module_bl_mynn,only: mynn_bl_driver
+ use module_bl_mynnedmf_driver,only: mynnedmf_driver
use module_bl_ysu
implicit none
@@ -185,6 +186,59 @@ subroutine allocate_pbl(configs)
!allocation of additional arrays:
if(.not.allocated(pattern_spp_pbl)) allocate(pattern_spp_pbl(ims:ime,kms:kme,jms:jme))
+
+ case("bl_mynnedmf") !GSL version
+ if(.not.allocated(dx_p) ) allocate(dx_p(ims:ime,jms:jme) )
+ if(.not.allocated(ch_p) ) allocate(ch_p(ims:ime,jms:jme) )
+ if(.not.allocated(qsfc_p) ) allocate(qsfc_p(ims:ime,jms:jme) )
+ if(.not.allocated(tsk_p) ) allocate(tsk_p(ims:ime,jms:jme) )
+ if(.not.allocated(maxwidthbl_p) ) allocate(maxwidthbl_p(ims:ime,jms:jme) )
+ if(.not.allocated(maxmfbl_p) ) allocate(maxmfbl_p(ims:ime,jms:jme) )
+ if(.not.allocated(zbl_plume_p) ) allocate(zbl_plume_p(ims:ime,jms:jme) )
+ if(.not.allocated(excessh_p) ) allocate(excessh_p(ims:ime,jms:jme) )
+ if(.not.allocated(excessq_p) ) allocate(excessq_p(ims:ime,jms:jme) )
+ if(.not.allocated(maxwidth_dd_p) ) allocate(maxwidth_dd_p(ims:ime,jms:jme) )
+ if(.not.allocated(maxmf_dd_p) ) allocate(maxmf_dd_p(ims:ime,jms:jme) )
+ if(.not.allocated(maxtkeprod_dd_p))allocate(maxtkeprod_dd_p(ims:ime,jms:jme) )
+ if(.not.allocated(cldtop_cooling_p))allocate(cldtop_cooling_p(ims:ime,jms:jme) )
+ if(.not.allocated(ent_eff_p) ) allocate(ent_eff_p(ims:ime,jms:jme) )
+
+ if(.not.allocated(cov_p) ) allocate(cov_p(ims:ime,kms:kme,jms:jme) )
+ if(.not.allocated(qke_p) ) allocate(qke_p(ims:ime,kms:kme,jms:jme) )
+ if(.not.allocated(qsq_p) ) allocate(qsq_p(ims:ime,kms:kme,jms:jme) )
+ if(.not.allocated(tsq_p) ) allocate(tsq_p(ims:ime,kms:kme,jms:jme) )
+ if(.not.allocated(qkeadv_p) ) allocate(qkeadv_p(ims:ime,kms:kme,jms:jme) )
+ if(.not.allocated(elpbl_p) ) allocate(elpbl_p(ims:ime,kms:kme,jms:jme) )
+ if(.not.allocated(sh3d_p) ) allocate(sh3d_p(ims:ime,kms:kme,jms:jme) )
+ if(.not.allocated(sm3d_p) ) allocate(sm3d_p(ims:ime,kms:kme,jms:jme) )
+ if(.not.allocated(dqke_p) ) allocate(dqke_p(ims:ime,kms:kme,jms:jme) )
+ if(.not.allocated(qbuoy_p) ) allocate(qbuoy_p(ims:ime,kms:kme,jms:jme) )
+ if(.not.allocated(qdiss_p) ) allocate(qdiss_p(ims:ime,kms:kme,jms:jme) )
+ if(.not.allocated(qshear_p) ) allocate(qshear_p(ims:ime,kms:kme,jms:jme) )
+ if(.not.allocated(qwt_p) ) allocate(qwt_p(ims:ime,kms:kme,jms:jme) )
+ if(.not.allocated(qcbl_p) ) allocate(qcbl_p(ims:ime,kms:kme,jms:jme) )
+ if(.not.allocated(qibl_p) ) allocate(qibl_p(ims:ime,kms:kme,jms:jme) )
+ if(.not.allocated(cldfrabl_p) ) allocate(cldfrabl_p(ims:ime,kms:kme,jms:jme) )
+ if(.not.allocated(edmfa_p) ) allocate(edmfa_p(ims:ime,kms:kme,jms:jme) )
+ if(.not.allocated(edmfw_p) ) allocate(edmfw_p(ims:ime,kms:kme,jms:jme) )
+ if(.not.allocated(edmfqt_p) ) allocate(edmfqt_p(ims:ime,kms:kme,jms:jme) )
+ if(.not.allocated(edmfthl_p) ) allocate(edmfthl_p(ims:ime,kms:kme,jms:jme) )
+ if(.not.allocated(edmfent_p) ) allocate(edmfent_p(ims:ime,kms:kme,jms:jme) )
+ if(.not.allocated(edmfqc_p) ) allocate(edmfqc_p(ims:ime,kms:kme,jms:jme) )
+ if(.not.allocated(subthl_p) ) allocate(subthl_p(ims:ime,kms:kme,jms:jme) )
+ if(.not.allocated(subqv_p) ) allocate(subqv_p(ims:ime,kms:kme,jms:jme) )
+ if(.not.allocated(detthl_p) ) allocate(detthl_p(ims:ime,kms:kme,jms:jme) )
+ if(.not.allocated(detqv_p) ) allocate(detqv_p(ims:ime,kms:kme,jms:jme) )
+
+ !additional tendencies:
+ if(.not.allocated(rqsblten_p) ) allocate(rqsblten_p(ims:ime,kms:kme,jms:jme) )
+ if(.not.allocated(rncblten_p) ) allocate(rncblten_p(ims:ime,kms:kme,jms:jme) )
+ if(.not.allocated(rniblten_p) ) allocate(rniblten_p(ims:ime,kms:kme,jms:jme) )
+ if(.not.allocated(rnifablten_p) ) allocate(rnifablten_p(ims:ime,kms:kme,jms:jme))
+ if(.not.allocated(rnwfablten_p) ) allocate(rnwfablten_p(ims:ime,kms:kme,jms:jme))
+
+ !allocation of additional arrays:
+ if(.not.allocated(pattern_spp_pbl)) allocate(pattern_spp_pbl(ims:ime,kms:kme,jms:jme))
case default
@@ -295,6 +349,59 @@ subroutine deallocate_pbl(configs)
!deallocation of additional arrays:
if(allocated(pattern_spp_pbl)) deallocate(pattern_spp_pbl)
+
+ case("bl_mynnedmf")
+ if(allocated(dx_p) ) deallocate(dx_p )
+ if(allocated(ch_p) ) deallocate(ch_p )
+ if(allocated(qsfc_p) ) deallocate(qsfc_p )
+ if(allocated(tsk_p) ) deallocate(tsk_p )
+ if(allocated(maxwidthbl_p) ) deallocate(maxwidthbl_p )
+ if(allocated(maxmfbl_p) ) deallocate(maxmfbl_p )
+ if(allocated(zbl_plume_p) ) deallocate(zbl_plume_p )
+ if(allocated(excessh_p) ) deallocate(excessh_p )
+ if(allocated(excessq_p) ) deallocate(excessq_p )
+ if(allocated(maxwidth_dd_p) ) deallocate(maxwidth_dd_p )
+ if(allocated(maxmf_dd_p) ) deallocate(maxmf_dd_p )
+ if(allocated(maxtkeprod_dd_p) ) deallocate(maxtkeprod_dd_p )
+ if(allocated(cldtop_cooling_p)) deallocate(cldtop_cooling_p)
+ if(allocated(ent_eff_p) ) deallocate(ent_eff_p )
+
+ if(allocated(cov_p) ) deallocate(cov_p )
+ if(allocated(qke_p) ) deallocate(qke_p )
+ if(allocated(qsq_p) ) deallocate(qsq_p )
+ if(allocated(tsq_p) ) deallocate(tsq_p )
+ if(allocated(qkeadv_p) ) deallocate(qkeadv_p )
+ if(allocated(elpbl_p) ) deallocate(elpbl_p )
+ if(allocated(sh3d_p) ) deallocate(sh3d_p )
+ if(allocated(sm3d_p) ) deallocate(sm3d_p )
+ if(allocated(dqke_p) ) deallocate(dqke_p )
+ if(allocated(qbuoy_p) ) deallocate(qbuoy_p )
+ if(allocated(qdiss_p) ) deallocate(qdiss_p )
+ if(allocated(qshear_p) ) deallocate(qshear_p )
+ if(allocated(qwt_p) ) deallocate(qwt_p )
+ if(allocated(qcbl_p) ) deallocate(qcbl_p )
+ if(allocated(qibl_p) ) deallocate(qibl_p )
+ if(allocated(cldfrabl_p) ) deallocate(cldfrabl_p )
+ if(allocated(edmfa_p) ) deallocate(edmfa_p )
+ if(allocated(edmfw_p) ) deallocate(edmfw_p )
+ if(allocated(edmfqt_p) ) deallocate(edmfqt_p )
+ if(allocated(edmfthl_p) ) deallocate(edmfthl_p )
+ if(allocated(edmfent_p) ) deallocate(edmfent_p )
+ if(allocated(edmfqc_p) ) deallocate(edmfqc_p )
+ if(allocated(subthl_p) ) deallocate(subthl_p )
+ if(allocated(subqv_p) ) deallocate(subqv_p )
+ if(allocated(detthl_p) ) deallocate(detthl_p )
+ if(allocated(detqv_p) ) deallocate(detqv_p )
+
+ !additional tendencies:
+ if(allocated(rqsblten_p) ) deallocate(rqsblten_p )
+ if(allocated(rncblten_p) ) deallocate(rncblten_p )
+ if(allocated(rniblten_p) ) deallocate(rniblten_p )
+ if(allocated(rnifablten_p)) deallocate(rnifablten_p)
+ if(allocated(rnwfablten_p)) deallocate(rnwfablten_p)
+
+ !deallocation of additional arrays:
+ if(allocated(pattern_spp_pbl)) deallocate(pattern_spp_pbl)
case default
@@ -303,7 +410,7 @@ subroutine deallocate_pbl(configs)
end subroutine deallocate_pbl
!=================================================================================================================
- subroutine pbl_from_MPAS(configs,mesh,sfc_input,diag_physics,tend_physics,its,ite)
+ subroutine pbl_from_MPAS(configs,state,mesh,sfc_input,diag_physics,tend_physics,its,ite)
!=================================================================================================================
!input arguments:
@@ -312,6 +419,7 @@ subroutine pbl_from_MPAS(configs,mesh,sfc_input,diag_physics,tend_physics,its,it
type(mpas_pool_type),intent(in):: diag_physics
type(mpas_pool_type),intent(in):: sfc_input
type(mpas_pool_type),intent(in):: tend_physics
+ type(mpas_pool_type),intent(in):: state
integer,intent(in):: its,ite
@@ -331,6 +439,7 @@ subroutine pbl_from_MPAS(configs,mesh,sfc_input,diag_physics,tend_physics,its,it
!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
@@ -504,6 +613,123 @@ subroutine pbl_from_MPAS(configs,mesh,sfc_input,diag_physics,tend_physics,its,it
zbl_plume_p(i,j) = 0
enddo
enddo
+
+ 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)
+ call mpas_pool_get_array(diag_physics,'ch' ,ch )
+ call mpas_pool_get_array(diag_physics,'qsfc' ,qsfc )
+ call mpas_pool_get_array(diag_physics,'el_pbl' ,el_pbl )
+ call mpas_pool_get_array(diag_physics,'cov' ,cov )
+ call mpas_pool_get_array(diag_physics,'qke' ,qke )
+ call mpas_pool_get_array(diag_physics,'qke_adv' ,qke_adv )
+ call mpas_pool_get_array(diag_physics,'qsq' ,qsq )
+ 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,'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 )
+ if(config_mynn_edmf_output == 1) 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
+ ch_p(i,j) = ch(i)
+ qsfc_p(i,j) = qsfc(i)
+ tsk_p(i,j) = skintemp(i)
+ enddo
+ enddo
+
+ do j = jts,jte
+ do k = kts,kte
+ do i = its,ite
+ elpbl_p(i,k,j) = el_pbl(k,i)
+ cov_p(i,k,j) = cov(k,i)
+ qke_p(i,k,j) = qke(k,i)
+ qsq_p(i,k,j) = qsq(k,i)
+ tsq_p(i,k,j) = tsq(k,i)
+ qkeadv_p(i,k,j) = qke_adv(k,i)
+ sh3d_p(i,k,j) = sh3d(k,i)
+ sm3d_p(i,k,j) = sm3d(k,i)
+ 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)
+
+ rqsblten_p(i,k,j) = 0._RKIND
+ rncblten_p(i,k,j) = 0._RKIND
+ rniblten_p(i,k,j) = 0._RKIND
+ rnifablten_p(i,k,j) = 0._RKIND
+ rnwfablten_p(i,k,j) = 0._RKIND
+
+ pattern_spp_pbl(i,k,j) = 0._RKIND
+
+ enddo
+ enddo
+ enddo
+
+ if(config_mynn_edmf_output == 1)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
+ maxmfbl_p(i,j) = 0._RKIND
+ zbl_plume_p(i,j) = 0._RKIND
+ excessh_p(i,j) = 0._RKIND
+ excessq_p(i,j) = 0._RKIND
+ maxwidth_dd_p(i,j) = 0._RKIND
+ maxmf_dd_p(i,j) = 0._RKIND
+ maxtkeprod_dd_p(i,j) = 0._RKIND
+ cldtop_cooling_p(i,j)= 0._RKIND
+ ent_eff_p(i,j) = 0._RKIND
+ enddo
+ enddo
case default
@@ -529,7 +755,7 @@ subroutine pbl_from_MPAS(configs,mesh,sfc_input,diag_physics,tend_physics,its,it
end subroutine pbl_from_MPAS
!=================================================================================================================
- subroutine pbl_to_MPAS(configs,diag_physics,tend_physics,its,ite)
+ subroutine pbl_to_MPAS(configs,state,diag_physics,tend_physics,its,ite)
!=================================================================================================================
!input arguments:
@@ -538,6 +764,7 @@ subroutine pbl_to_MPAS(configs,diag_physics,tend_physics,its,ite)
!inout arguments:
type(mpas_pool_type),intent(inout):: diag_physics
type(mpas_pool_type),intent(inout):: tend_physics
+ type(mpas_pool_type),intent(inout):: state
integer,intent(in):: its,ite
@@ -556,9 +783,12 @@ subroutine pbl_to_MPAS(configs,diag_physics,tend_physics,its,ite)
!local pointers for YSU scheme:
real(kind=RKIND),dimension(:,:),pointer:: exch_h
-
-!local pointers for MYNN scheme:
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, &
qdiss,qshear,qwt
real(kind=RKIND),dimension(:,:),pointer:: cldfrac_bl,qc_bl,qi_bl
@@ -716,7 +946,143 @@ subroutine pbl_to_MPAS(configs,diag_physics,tend_physics,its,ite)
enddo
enddo
endif
+
+ 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 )
+ call mpas_pool_get_array(diag_physics,'excess_h' ,excess_h )
+ call mpas_pool_get_array(diag_physics,'excess_q' ,excess_q )
+ call mpas_pool_get_array(diag_physics,'maxmf_dd' ,maxmf_dd )
+ call mpas_pool_get_array(diag_physics,'maxwidth_dd' ,maxwidth_dd )
+ call mpas_pool_get_array(diag_physics,'maxtkeprod_dd' ,maxtkeprod_dd )
+ call mpas_pool_get_array(diag_physics,'cldtop_cooling',cldtop_cooling)
+ call mpas_pool_get_array(diag_physics,'ent_eff' ,ent_eff )
+ call mpas_pool_get_array(diag_physics,'el_pbl' ,el_pbl )
+ call mpas_pool_get_array(diag_physics,'cov' ,cov )
+ call mpas_pool_get_array(diag_physics,'qke' ,qke )
+ call mpas_pool_get_array(diag_physics,'qke_adv' ,qke_adv )
+ call mpas_pool_get_array(diag_physics,'qsq' ,qsq )
+ 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 )
+ 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 )
+ if(config_mynn_edmf_output == 1) 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
+ do i = its,ite
+ maxmf(i) = maxmfbl_p(i,j)
+ maxwidth(i) = maxwidthbl_p(i,j)
+ ztop_plume(i) = zbl_plume_p(i,j)
+ excess_h(i) = excessh_p(i,j)
+ excess_q(i) = excessq_p(i,j)
+ maxmf_dd(i) = maxmf_dd_p(i,j)
+ maxwidth_dd(i) = maxwidth_dd_p(i,j)
+ maxtkeprod_dd(i) = maxtkeprod_dd_p(i,j)
+ cldtop_cooling(i)= cldtop_cooling_p(i,j)
+ ent_eff(i) = ent_eff_p(i,j)
+ enddo
+ enddo
+
+ do j = jts,jte
+ do k = kts,kte
+ do i = its,ite
+ el_pbl(k,i) = elpbl_p(i,k,j)
+ cov(k,i) = cov_p(i,k,j)
+ qke(k,i) = qke_p(i,k,j)
+ qsq(k,i) = qsq_p(i,k,j)
+ tsq(k,i) = tsq_p(i,k,j)
+ sh3d(k,i) = sh3d_p(i,k,j)
+ sm3d(k,i) = sm3d_p(i,k,j)
+ qke_adv(k,i) = qkeadv_p(i,k,j)
+ 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)
+ rqsblten(k,i) = rqsblten_p(i,k,j)
+ enddo
+ enddo
+ enddo
+ if(config_mynn_edmf_output == 1)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
+ do k = kts,kte
+ do i = its,ite
+ rniblten(k,i) = rniblten_p(i,k,j)
+ enddo
+ enddo
+ enddo
+ endif
+ if(f_nc .and. f_nifa .and. f_nwfa) then
+ call mpas_pool_get_array(tend_physics,'rncblten' ,rncblten )
+ call mpas_pool_get_array(tend_physics,'rnifablten',rnifablten)
+ call mpas_pool_get_array(tend_physics,'rnwfablten',rnwfablten)
+ do j = jts,jte
+ do k = kts,kte
+ do i = its,ite
+ rncblten(k,i) = rncblten_p(i,k,j)
+ rnifablten(k,i) = rnifablten_p(i,k,j)
+ rnwfablten(k,i) = rnwfablten_p(i,k,j)
+ enddo
+ enddo
+ enddo
+ endif
+
case default
end select pbl_select
@@ -754,12 +1120,13 @@ subroutine init_pbl(configs)
end subroutine init_pbl
!=================================================================================================================
- subroutine driver_pbl(itimestep,configs,mesh,sfc_input,diag_physics,tend_physics,its,ite)
+ subroutine driver_pbl(itimestep,configs,state,mesh,sfc_input,diag_physics,tend_physics,its,ite)
!=================================================================================================================
!input arguments:
type(mpas_pool_type),intent(in):: configs
type(mpas_pool_type),intent(in):: mesh
+ type(mpas_pool_type),intent(inout):: state
integer,intent(in):: its,ite
integer,intent(in):: itimestep
@@ -788,12 +1155,27 @@ subroutine driver_pbl(itimestep,configs,mesh,sfc_input,diag_physics,tend_physics
bl_mynn_edmf_tke, &
bl_mynn_edmf_output, &
bl_mynn_mixscalars, &
+ bl_mynn_mixaerosols, &
+ bl_mynn_mixnumcon, &
bl_mynn_cloudmix, &
bl_mynn_mixqt, &
- bl_mynn_tkebudget
+ bl_mynn_ess, &
+ bl_mynn_tkebudget, &
+ icloud_bl, &
+ spp_pbl
real(kind=RKIND),pointer:: bl_mynn_closure
+!temporary smoke arrays needed for mynn-edmf (leave unallocated)
+ logical,parameter::mix_chem=.false.
+ logical,parameter::enh_mix=.false.
+ integer,parameter::num_chem=1
+ real, allocatable :: chem_p(:,:,:,:)
+ real, allocatable :: tend_chem_settle_p(:,:,:,:)
+ real, allocatable :: ddvel_p(:,:,:)
+ real, allocatable :: frp_out_p(:,:)
+ real, allocatable :: aero_emis_for_enhmix_p(:,:)
+
!local variables:
integer:: initflag
integer:: i,k,j
@@ -815,7 +1197,7 @@ subroutine driver_pbl(itimestep,configs,mesh,sfc_input,diag_physics,tend_physics
call mpas_pool_get_config(configs,'config_pbl_scheme' ,pbl_scheme )
!copy MPAS arrays to local arrays:
- call pbl_from_MPAS(configs,mesh,sfc_input,diag_physics,tend_physics,its,ite)
+ call pbl_from_MPAS(configs,state,mesh,sfc_input,diag_physics,tend_physics,its,ite)
initflag = 1
if(config_do_restart .or. itimestep > 1) initflag = 0
@@ -957,8 +1339,128 @@ subroutine driver_pbl(itimestep,configs,mesh,sfc_input,diag_physics,tend_physics
its = its , ite = ite , jts = jts , jte = jte , kts = kts , kte = kte , &
errmsg = errmsg , errflg = errflg &
)
- call mpas_timer_stop('bl_mynn')
-! call mpas_log_write('--- exit subroutine mynn_bl_driver:')
+ call mpas_timer_stop('bl_mynn')
+! call mpas_log_write('--- exit subroutine mynn_bl_driver:')
+! call mpas_log_write(' ')
+
+ 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_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 )
+ call mpas_pool_get_config(configs,'config_mynn_edmf_tke' ,bl_mynn_edmf_tke )
+ call mpas_pool_get_config(configs,'config_mynn_edmf_output',bl_mynn_edmf_output)
+ call mpas_pool_get_config(configs,'config_mynn_closure' ,bl_mynn_closure )
+ call mpas_pool_get_config(configs,'config_mynn_mixscalars' ,bl_mynn_mixscalars )
+ call mpas_pool_get_config(configs,'config_mynn_mixaerosols',bl_mynn_mixaerosols)
+ call mpas_pool_get_config(configs,'config_mynn_mixnumcon' ,bl_mynn_mixnumcon )
+ call mpas_pool_get_config(configs,'config_mynn_mixclouds' ,bl_mynn_cloudmix )
+ call mpas_pool_get_config(configs,'config_mynn_mixqt' ,bl_mynn_mixqt )
+ 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_log_write(' ')
+! 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_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/))
+! call mpas_log_write('--- config_mynn_edmf_tke = $i',intArgs=(/bl_mynn_edmf_tke/))
+! call mpas_log_write('--- config_mynn_edmf_output = $i',intArgs=(/bl_mynn_edmf_output/))
+! call mpas_log_write('--- config_mynn_mixscalars = $i',intArgs=(/bl_mynn_mixscalars/))
+! call mpas_log_write('--- config_mynn_mixclouds = $i',intArgs=(/bl_mynn_cloudmix/))
+! call mpas_log_write('--- config_mynn_mixqt = $i',intArgs=(/bl_mynn_mixqt/))
+! call mpas_log_write('--- config_mynn_tkeadvect = $l',logicArgs=(/bl_mynn_tkeadvect/))
+! call mpas_log_write('--- config_mynn_tkebudget = $i',intArgs=(/bl_mynn_tkebudget/))
+! call mpas_log_write('--- config_mynn_closure = $r',realArgs=(/bl_mynn_closure/))
+! call mpas_log_write(' ')
+! call mpas_log_write('--- f_qc = $l',logicArgs=(/f_qc/) )
+! call mpas_log_write('--- f_qi = $l',logicArgs=(/f_qi/) )
+! call mpas_log_write('--- f_qs = $l',logicArgs=(/f_qs/) )
+! call mpas_log_write('--- f_qoz = $l',logicArgs=(/f_qoz/) )
+! call mpas_log_write('--- f_nc = $l',logicArgs=(/f_nc/) )
+! call mpas_log_write('--- f_ni = $l',logicArgs=(/f_ni/) )
+! call mpas_log_write('--- f_nifa = $l',logicArgs=(/f_nifa/))
+! call mpas_log_write('--- f_nwfa = $l',logicArgs=(/f_nwfa/))
+! call mpas_log_write('--- f_nbca = $l',logicArgs=(/f_nbca/))
+
+! if (do_chemistry) mix_chem = .true.
+
+ 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 , &
+ 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 , &
+ 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 , &
+ excess_h = excessh_p , excess_q = excessq_p , maxwidth_dd = maxwidth_dd_p , &
+ maxmf_dd = maxmf_dd_p , maxtkeprod = maxtkeprod_dd_p, cldtop_cooling= cldtop_cooling_p , &
+ ent_eff = ent_eff_p , &
+ qke = qke_p , qke_adv = qkeadv_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 , &
+ 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 , &
+ det_sqv = detqv_p , exch_h = kzh_p , exch_m = kzm_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 , &
+ initflag = initflag , &
+ bl_mynn_tkeadvect = bl_mynn_tkeadvect , &
+ bl_mynn_tkebudget = bl_mynn_tkebudget , &
+ bl_mynn_cloudpdf = bl_mynn_cloudpdf , &
+ bl_mynn_mixlength = bl_mynn_mixlength , &
+ bl_mynn_closure = bl_mynn_closure , &
+ bl_mynn_edmf = bl_mynn_edmf , &
+ bl_mynn_edmf_dd = bl_mynn_edmf_dd , &
+ bl_mynn_edmf_mom = bl_mynn_edmf_mom , &
+ bl_mynn_edmf_tke = bl_mynn_edmf_tke , &
+ bl_mynn_output = bl_mynn_edmf_output , &
+ bl_mynn_mixscalars = bl_mynn_mixscalars , &
+ bl_mynn_mixaerosols= bl_mynn_mixaerosols , &
+ bl_mynn_mixnumcon = bl_mynn_mixnumcon , &
+ bl_mynn_cloudmix = bl_mynn_cloudmix , &
+ bl_mynn_mixqt = bl_mynn_mixqt , &
+ bl_mynn_ess = bl_mynn_ess , &
+ mix_chem = mix_chem , &
+ nchem = num_chem , &
+ ndvel = num_chem , &
+ chem3d = chem_p , &
+ vd3d = ddvel_p , &
+ settle3d = tend_chem_settle_p , &
+ enh_mix = enh_mix , &
+ frp_mean = frp_out_p , &
+ emis_ant_no = aero_emis_for_enhmix_p , &
+ ids = ids , ide = ide , jds = jds , jde = jde , kds = kds , kde = kde , &
+ ims = ims , ime = ime , jms = jms , jme = jme , kms = kms , kme = kme , &
+ its = its , ite = ite , jts = jts , jte = jte , kts = kts , kte = kte , &
+ errmsg = errmsg , errflg = errflg &
+ )
+ call mpas_timer_stop('bl_mynnedmf')
+! call mpas_log_write('--- exit subroutine mynnedmf_driver:')
! call mpas_log_write(' ')
case default
@@ -966,7 +1468,7 @@ subroutine driver_pbl(itimestep,configs,mesh,sfc_input,diag_physics,tend_physics
end select pbl_select
!copy local arrays to MPAS grid:
- call pbl_to_MPAS(configs,diag_physics,tend_physics,its,ite)
+ call pbl_to_MPAS(configs,state,diag_physics,tend_physics,its,ite)
!call mpas_log_write('--- end subroutine driver_pbl.')
diff --git a/src/core_atmosphere/physics/mpas_atmphys_driver_sfclayer.F b/src/core_atmosphere/physics/mpas_atmphys_driver_sfclayer.F
index afde4fa523..9794807f54 100644
--- a/src/core_atmosphere/physics/mpas_atmphys_driver_sfclayer.F
+++ b/src/core_atmosphere/physics/mpas_atmphys_driver_sfclayer.F
@@ -15,6 +15,7 @@ module mpas_atmphys_driver_sfclayer
use mpas_atmphys_vars
use module_sf_mynn,only: sfclay_mynn
+ use module_sf_mynnsfc_driver,only: mynnsfc_driver,mynnsfc_init
use module_sf_sfclay
use module_sf_sfclayrev,only: sfclayrev
use sf_mynn,only: sf_mynn_init
@@ -146,6 +147,7 @@ subroutine allocate_sfclayer(configs)
if(.not.allocated(xland_p) ) allocate(xland_p(ims:ime,jms:jme) )
if(.not.allocated(zol_p) ) allocate(zol_p(ims:ime,jms:jme) )
if(.not.allocated(znt_p) ) allocate(znt_p(ims:ime,jms:jme) )
+ if(.not.allocated(xice_p) ) allocate(xice_p(ims:ime,jms:jme) )
if(config_frac_seaice) then
if(.not.allocated(sst_p) ) allocate(sst_p(ims:ime,jms:jme) )
@@ -220,6 +222,16 @@ subroutine allocate_sfclayer(configs)
if(.not.allocated(ch_sea)) allocate(ch_sea(ims:ime,jms:jme))
endif
+ case("sf_mynnsfclay")
+ if(.not.allocated(snowh_p)) allocate(snowh_p(ims:ime,jms:jme))
+ if(.not.allocated(ch_p) ) allocate(ch_p(ims:ime,jms:jme) )
+ if(.not.allocated(cqs_p) ) allocate(cqs_p(ims:ime,jms:jme) )
+ if(.not.allocated(qcg_p) ) allocate(qcg_p(ims:ime,jms:jme) )
+ if(config_frac_seaice) then
+ if(.not.allocated(ch_sea) ) allocate(ch_sea(ims:ime,jms:jme) )
+ if(.not.allocated(cqs_sea)) allocate(cqs_sea(ims:ime,jms:jme))
+ endif
+
case default
end select sfclayer_select
@@ -279,10 +291,10 @@ subroutine deallocate_sfclayer(configs)
if(allocated(xland_p) ) deallocate(xland_p )
if(allocated(zol_p) ) deallocate(zol_p )
if(allocated(znt_p) ) deallocate(znt_p )
-
+ if(allocated(xice_p) ) deallocate(xice_p )
+
if(config_frac_seaice) then
if(allocated(sst_p) ) deallocate(sst_p )
- if(allocated(xice_p) ) deallocate(xice_p )
if(allocated(br_sea) ) deallocate(br_sea )
if(allocated(flhc_p) ) deallocate(flhc_sea )
@@ -342,6 +354,14 @@ subroutine deallocate_sfclayer(configs)
if(allocated(ch_sea)) deallocate(ch_sea)
endif
+ case("sf_mynnsfclay")
+ if(allocated(snowh_p)) deallocate(snowh_p)
+ if(allocated(ch_p) ) deallocate(ch_p )
+ if(allocated(qcg_p) ) deallocate(qcg_p )
+ if(config_frac_seaice) then
+ if(allocated(ch_sea)) deallocate(ch_sea)
+ endif
+
case default
end select sfclayer_select
@@ -374,6 +394,7 @@ subroutine sfclayer_from_MPAS(configs,mesh,diag_physics,sfc_input,its,ite)
real(kind=RKIND),dimension(:),pointer:: br,cpm,chs,chs2,cqs2,flhc,flqc,gz1oz0,hfx,qfx, &
qgh,qsfc,lh,mol,psim,psih,regime,rmol,ust,ustm, &
wspd,znt,zol
+ real(kind=RKIND),dimension(:),pointer:: cqs
!local pointers specific to monin_obukhov:
real(kind=RKIND),dimension(:),pointer:: fh,fm
@@ -393,7 +414,8 @@ subroutine sfclayer_from_MPAS(configs,mesh,diag_physics,sfc_input,its,ite)
call mpas_pool_get_array(diag_physics,'mavail' ,mavail )
call mpas_pool_get_array(sfc_input ,'skintemp',skintemp)
call mpas_pool_get_array(sfc_input ,'xland' ,xland )
-
+ call mpas_pool_get_array(sfc_input ,'xice' ,xice )
+
!inout variables:
call mpas_pool_get_array(diag_physics,'br' ,br )
call mpas_pool_get_array(diag_physics,'cpm' ,cpm )
@@ -427,7 +449,8 @@ subroutine sfclayer_from_MPAS(configs,mesh,diag_physics,sfc_input,its,ite)
mavail_p(i,j) = mavail(i)
tsk_p(i,j) = skintemp(i)
xland_p(i,j) = xland(i)
-
+ xice_p(i,j) = xice(i)
+
!inout variables:
br_p(i,j) = br(i)
cpm_p(i,j) = cpm(i)
@@ -470,11 +493,9 @@ subroutine sfclayer_from_MPAS(configs,mesh,diag_physics,sfc_input,its,ite)
if(config_frac_seaice) then
call mpas_pool_get_array(sfc_input,'sst' ,sst)
- call mpas_pool_get_array(sfc_input,'xice',xice)
do j = jts,jte
do i = its,ite
sst_p(i,j) = sst(i)
- xice_p(i,j) = xice(i)
!input variables:
mavail_sea(i,j) = mavail(i)
@@ -519,6 +540,7 @@ subroutine sfclayer_from_MPAS(configs,mesh,diag_physics,sfc_input,its,ite)
!overwrite some local variables for sea-ice cells:
if(xice_p(i,j).ge.xice_threshold .and. xice_p(i,j).le.1._RKIND) then
xland_sea(i,j) = 2._RKIND
+ xland_p(i,j) = 1._RKIND
mavail_sea(i,j) = 1._RKIND
znt_sea(i,j) = 0.0001_RKIND
tsk_sea(i,j) = max(sst_p(i,j),271.4_RKIND)
@@ -585,6 +607,27 @@ subroutine sfclayer_from_MPAS(configs,mesh,diag_physics,sfc_input,its,ite)
enddo
enddo
+ case("sf_mynnsfclay")
+ !input variables:
+ call mpas_pool_get_array(sfc_input ,'snowh',snowh)
+ !inout variables:
+ call mpas_pool_get_array(diag_physics,'ch' ,ch )
+ call mpas_pool_get_array(diag_physics,'cqs',cqs)
+
+ do j = jts,jte
+ do i = its,ite
+ !input variables:
+ snowh_p(i,j) = snowh(i)
+ !inout variables:
+ ch_p(i,j) = ch(i)
+ cqs_p(i,j) = cqs(i)
+ if(config_frac_seaice) then
+ ch_sea(i,j) = ch(i)
+ cqs_sea(i,j) = cqs(i)
+ endif
+ enddo
+ enddo
+
case default
end select sfclayer_select
@@ -613,6 +656,7 @@ subroutine sfclayer_to_MPAS(configs,sfc_input,diag_physics,its,ite)
real(kind=RKIND),dimension(:),pointer:: br,cpm,chs,chs2,cqs2,flhc,flqc,gz1oz0,hfx,qfx, &
qgh,qsfc,lh,mol,psim,psih,regime,rmol,ust,wspd, &
znt,zol
+ real(kind=RKIND),dimension(:),pointer:: cqs
real(kind=RKIND),dimension(:),pointer:: q2,t2m,th2m,u10,v10
real(kind=RKIND),dimension(:),pointer:: cd,cda,ck,cka,ustm
real(kind=RKIND),dimension(:),pointer:: xice
@@ -789,6 +833,27 @@ subroutine sfclayer_to_MPAS(configs,sfc_input,diag_physics,its,ite)
enddo
endif
+ case("sf_mynnsfclay")
+ call mpas_pool_get_array(diag_physics,'ch' ,ch )
+ call mpas_pool_get_array(diag_physics,'cqs',cqs)
+
+ do j = jts,jte
+ do i = its,ite
+ ch(i) = ch_p(i,j)
+ cqs(i)= cqs_p(i,j)
+ enddo
+ enddo
+ if(config_frac_seaice) then
+ call mpas_pool_get_array(sfc_input,'xice',xice)
+ do j = jts,jte
+ do i = its,ite
+ if(xice(i).ge.xice_threshold .and. xice(i).lt.1._RKIND) then
+ ch(i) = ch_p(i,j)*xice(i) + (1._RKIND-xice(i))*ch_sea(i,j)
+ endif
+ enddo
+ enddo
+ endif
+
case default
end select sfclayer_select
@@ -829,6 +894,9 @@ subroutine init_sfclayer(configs)
case("sf_mynn")
call sf_mynn_init(errmsg,errflg)
+ case("sf_mynnsfclay")
+ call mynnsfc_init(allowed_to_read,errmsg,errflg)
+
case default
end select sfclayer_select
@@ -852,7 +920,10 @@ subroutine driver_sfclayer(itimestep,configs,mesh,diag_physics,sfc_input,its,ite
!local pointers:
logical,pointer:: config_do_restart,config_frac_seaice
+ logical,pointer:: config_do_DAcycling
character(len=StrKIND),pointer:: sfclayer_scheme
+ character(len=StrKIND),pointer:: lsm_scheme
+ integer,pointer:: sf_mynn_sfcflux_land,sf_mynn_sfcflux_water
real(kind=RKIND),dimension(:),pointer:: areaCell
!local variables:
@@ -874,7 +945,8 @@ subroutine driver_sfclayer(itimestep,configs,mesh,diag_physics,sfc_input,its,ite
call mpas_pool_get_config(configs,'config_do_restart' ,config_do_restart )
call mpas_pool_get_config(configs,'config_frac_seaice' ,config_frac_seaice)
call mpas_pool_get_config(configs,'config_sfclayer_scheme',sfclayer_scheme )
-
+ call mpas_pool_get_config(configs,'config_do_DAcycling' ,config_do_DAcycling)
+
call mpas_pool_get_array(mesh,'areaCell',areaCell)
!copy all MPAS arrays to rectanguler grid:
@@ -883,7 +955,7 @@ subroutine driver_sfclayer(itimestep,configs,mesh,diag_physics,sfc_input,its,ite
dx = sqrt(maxval(areaCell))
initflag = 1
- if(config_do_restart .or. itimestep > 1) initflag = 0
+ if(config_do_restart .or. config_do_DAcycling .or. itimestep > 1) initflag = 0
sfclayer_select: select case (trim(sfclayer_scheme))
@@ -1076,6 +1148,81 @@ subroutine driver_sfclayer(itimestep,configs,mesh,diag_physics,sfc_input,its,ite
endif
call mpas_timer_stop('sf_mynn')
+ case("sf_mynnsfclay")
+ call mpas_timer_start('sf_mynnsfclay')
+ call mpas_log_write('--- enter subroutine mynnsfc_driver:')
+ call mpas_pool_get_config(configs,'config_mynn_sfcflux_land' ,sf_mynn_sfcflux_land )
+ call mpas_pool_get_config(configs,'config_mynn_sfcflux_water',sf_mynn_sfcflux_water)
+ call mpas_pool_get_config(configs,'config_lsm_scheme' ,lsm_scheme )
+ call mynnsfc_driver( &
+ p3d = pres_hyd_p , th3d = th_p , t3d = t_p , &
+ u3d = u_p , v3d = v_p , qv3d = qv_p , &
+ rho3d = rho_p , dz8w = dz_p , &
+ chs = chs_p , chs2 = chs2_p , psfcpa = psfc_p , &
+ cqs = cqs_p , cqs2 = cqs2_p , cpm = cpm_p , &
+ znt = znt_p , qgh = qgh_p , &
+ ust = ust_p , pblh = hpbl_p , mavail = mavail_p , &
+ zol = zol_p , mol = mol_p , &
+ psim = psim_p , psih = psih_p , xland = xland_p , &
+ hfx = hfx_p , qfx = qfx_p , lh = lh_p , &
+ tsk = tsk_p , flhc = flhc_p , flqc = flqc_p , &
+ qsfc = qsfc_p , rmol = rmol_p , &
+ u10 = u10_p , v10 = v10_p , th2 = th2m_p , &
+ t2 = t2m_p , q2 = q2_p , snowh = snowh_p , &
+ gz1oz0 = gz1oz0_p , wspd = wspd_p , br = br_p , &
+ isfflx = isfflx , dx = dx_p , &
+ ustm = ustm_p , ck = ck_p , cka = cka_p , &
+ cd = cd_p , cda = cda_p , ch = ch_p , &
+ xice =xice_P , xice_threshold = xice_threshold , &
+ spp_pbl = spp_pbl , &
+ sf_mynn_sfcflux_land = sf_mynn_sfcflux_land , &
+ sf_mynn_sfcflux_water = sf_mynn_sfcflux_water , &
+ flagc_lsm = lsm_scheme , &
+ itimestep= itimestep , initflag = initflag , &
+ restart = config_do_restart , &
+ cycling = config_do_DAcycling , &
+ errmsg = errmsg , errflg = errflg , &
+ ids = ids , ide = ide , jds = jds , jde = jde , kds = kds , kde = kde , &
+ ims = ims , ime = ime , jms = jms , jme = jme , kms = kms , kme = kme , &
+ its = its , ite = ite , jts = jts , jte = jte , kts = kts , kte = kte &
+ )
+
+ if(config_frac_seaice) then
+ call mynnsfc_driver( &
+ p3d = pres_hyd_p , th3d = th_p , t3d = t_p , &
+ u3d = u_p , v3d = v_p , qv3d = qv_p , &
+ rho3d = rho_p , dz8w = dz_p , &
+ chs = chs_sea , chs2 = chs2_sea , psfcpa = psfc_p , &
+ cqs = cqs_sea , cqs2 = cqs2_sea , cpm = cpm_sea , &
+ znt = znt_sea , qgh = qgh_sea , &
+ ust = ust_sea , pblh = hpbl_p , mavail = mavail_sea , &
+ zol = zol_sea , mol = mol_sea , &
+ psim = psim_sea , psih = psih_sea , xland = xland_sea , &
+ hfx = hfx_sea , qfx = qfx_sea , lh = lh_sea , &
+ tsk = tsk_sea , flhc = flhc_sea , flqc = flqc_sea , &
+ qsfc = qsfc_sea , rmol = rmol_sea , &
+ u10 = u10_sea , v10 = v10_sea , th2 = th2m_sea , &
+ t2 = t2m_sea , q2 = q2_sea , snowh = snowh_p , &
+ gz1oz0 = gz1oz0_sea , wspd = wspd_sea , br = br_sea , &
+ isfflx = isfflx , dx = dx_p , &
+ ustm = ustm_sea , ck = ck_sea , cka = cka_sea , &
+ cd = cd_sea , cda = cda_sea , ch = ch_sea , &
+ xice =xice_P , xice_threshold = xice_threshold , &
+ spp_pbl = spp_pbl , &
+ sf_mynn_sfcflux_land = sf_mynn_sfcflux_land , &
+ sf_mynn_sfcflux_water = sf_mynn_sfcflux_water , &
+ flagc_lsm = lsm_scheme , &
+ itimestep= itimestep , initflag = initflag , &
+ restart = config_do_restart , &
+ cycling = config_do_DAcycling , &
+ errmsg = errmsg , errflg = errflg , &
+ ids = ids , ide = ide , jds = jds , jde = jde , kds = kds , kde = kde , &
+ ims = ims , ime = ime , jms = jms , jme = jme , kms = kms , kme = kme , &
+ its = its , ite = ite , jts = jts , jte = jte , kts = kts , kte = kte &
+ )
+ endif
+ call mpas_timer_stop('sf_mynnsfclay')
+
case default
end select sfclayer_select
diff --git a/src/core_atmosphere/physics/mpas_atmphys_interface.F b/src/core_atmosphere/physics/mpas_atmphys_interface.F
index feeb8db80f..e08661a083 100644
--- a/src/core_atmosphere/physics/mpas_atmphys_interface.F
+++ b/src/core_atmosphere/physics/mpas_atmphys_interface.F
@@ -143,6 +143,11 @@ subroutine allocate_forall_physics(configs)
if(.not.allocated(nifa_p)) allocate(nifa_p(ims:ime,kms:kme,jms:jme))
if(.not.allocated(nwfa_p)) allocate(nwfa_p(ims:ime,kms:kme,jms:jme))
+ case("bl_mynnedmf")
+ if(.not.allocated(nc_p)) allocate(nc_p(ims:ime,kms:kme,jms:jme))
+ if(.not.allocated(ni_p)) allocate(ni_p(ims:ime,kms:kme,jms:jme))
+ if(.not.allocated(nifa_p)) allocate(nifa_p(ims:ime,kms:kme,jms:jme))
+ if(.not.allocated(nwfa_p)) allocate(nwfa_p(ims:ime,kms:kme,jms:jme))
case default
end select pbl_select
@@ -218,6 +223,12 @@ subroutine deallocate_forall_physics(configs)
if(allocated(nifa_p)) deallocate(nifa_p)
if(allocated(nwfa_p)) deallocate(nwfa_p)
+ case("bl_mynnedmf")
+ if(allocated(nc_p)) deallocate(nc_p)
+ if(allocated(ni_p)) deallocate(ni_p)
+ if(allocated(nifa_p)) deallocate(nifa_p)
+ if(allocated(nwfa_p)) deallocate(nwfa_p)
+
case default
end select pbl_select
@@ -421,6 +432,52 @@ subroutine MPAS_to_physics(configs,mesh,state,time_lev,diag,diag_physics,its,ite
enddo
endif
+ case("bl_mynnedmf")
+ do j = jts,jte
+ do k = kts,kte
+ do i = its,ite
+ nc_p(i,k,j) = 0._RKIND
+ ni_p(i,k,j) = 0._RKIND
+ nifa_p(i,k,j) = 0._RKIND
+ nwfa_p(i,k,j) = 0._RKIND
+ enddo
+ enddo
+ enddo
+ !initializes ni_p when running the options "mp_thompson" or "mp_thompson_aerosols":
+ if(f_ni) then
+ nullify(ni)
+ call mpas_pool_get_dimension(state,'index_ni',index_ni)
+ ni => scalars(index_ni,:,:)
+ do j = jts,jte
+ do k = kts,kte
+ do i = its,ite
+ ni_p(i,k,j) = max(0.,ni(k,i))
+ enddo
+ enddo
+ enddo
+ endif
+ !initializes nc_p, nifa_p, and nwfa_p when running the option "mp_thompson_aerosols":
+ if(f_nc .and. f_nifa .and. f_nwfa) then
+ nullify(nc)
+ nullify(nifa)
+ nullify(nwfa)
+ call mpas_pool_get_dimension(state,'index_nc',index_nc)
+ call mpas_pool_get_dimension(state,'index_nifa',index_nifa)
+ call mpas_pool_get_dimension(state,'index_nwfa',index_nwfa)
+ nc => scalars(index_nc,:,:)
+ nifa => scalars(index_nifa,:,:)
+ nwfa => scalars(index_nwfa,:,:)
+ do j = jts,jte
+ do k = kts,kte
+ do i = its,ite
+ nc_p(i,k,j) = max(0.,nc(k,i))
+ nifa_p(i,k,j) = max(0.,nifa(k,i))
+ nwfa_p(i,k,j) = max(0.,nwfa(k,i))
+ enddo
+ enddo
+ enddo
+ endif
+
case default
end select pbl_select
diff --git a/src/core_atmosphere/physics/mpas_atmphys_packages.F b/src/core_atmosphere/physics/mpas_atmphys_packages.F
index 5d32cb297e..15cb932a6b 100644
--- a/src/core_atmosphere/physics/mpas_atmphys_packages.F
+++ b/src/core_atmosphere/physics/mpas_atmphys_packages.F
@@ -37,9 +37,11 @@ function atmphys_setup_packages(configs,packages,iocontext) result(ierr)
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:: mp_kessler_in,mp_thompson_in,mp_thompson_aers_in,mp_wsm6_in
logical,pointer:: cu_grell_freitas_in,cu_kain_fritsch_in,cu_ntiedtke_in
- logical,pointer:: bl_mynn_in,bl_ysu_in
+ logical,pointer:: bl_mynn_in,bl_mynnedmf_in,bl_ysu_in
+ logical,pointer:: bl_mynnedmf_tkebudget_in,bl_mynnedmf_output_in
logical,pointer:: sf_noahmp_in
integer :: ierr
@@ -143,14 +145,28 @@ function atmphys_setup_packages(configs,packages,iocontext) result(ierr)
!--- 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)
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)) then
call mpas_log_write('====================================================================================',messageType=MPAS_LOG_ERR)
call mpas_log_write('* Error while setting up packages for planetary layer options in atmosphere core.', messageType=MPAS_LOG_ERR)
@@ -160,15 +176,25 @@ function atmphys_setup_packages(configs,packages,iocontext) result(ierr)
endif
bl_mynn_in = .false.
+ bl_mynnedmf_in = .false.
+ bl_mynnedmf_output_in = .false.
+ bl_mynnedmf_tkebudget_in = .false.
bl_ysu_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 ==1) bl_mynnedmf_output_in = .true.
+ if(config_mynn_tkebudget ==1) bl_mynnedmf_tkebudget_in = .true.
elseif(config_pbl_scheme == 'bl_ysu') then
bl_ysu_in = .true.
endif
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('')
diff --git a/src/core_atmosphere/physics/mpas_atmphys_todynamics.F b/src/core_atmosphere/physics/mpas_atmphys_todynamics.F
index 39f3aea841..769d958875 100644
--- a/src/core_atmosphere/physics/mpas_atmphys_todynamics.F
+++ b/src/core_atmosphere/physics/mpas_atmphys_todynamics.F
@@ -421,6 +421,34 @@ subroutine physics_get_tend_work( &
enddo
endif
+ case('bl_mynnedmf')
+ do i = 1, nCellsSolve
+ do k = 1, nVertLevels
+ tend_scalars(index_qs,k,i) = tend_scalars(index_qs,k,i) + rqsblten(k,i)*mass(k,i)
+ tend_scalars(index_ni,k,i) = tend_scalars(index_ni,k,i) + rniblten(k,i)*mass(k,i)
+ enddo
+ enddo
+
+ if(trim(microp_scheme) == 'mp_thompson_aerosols') then
+ do i = 1, nCellsSolve
+ do k = 1, nVertLevels
+ tend_scalars(index_nc,k,i) = tend_scalars(index_nc,k,i) + rncblten(k,i)*mass(k,i)
+ tend_scalars(index_nifa,k,i) = tend_scalars(index_nifa,k,i) + rnifablten(k,i)*mass(k,i)
+ tend_scalars(index_nwfa,k,i) = tend_scalars(index_nwfa,k,i) + rnwfablten(k,i)*mass(k,i)
+ enddo
+ enddo
+ endif
+
+ !if((trim(microp_scheme) == 'mp_tempo') .and. (config_tempo_aerosolaware)) then
+ ! do i = 1, nCellsSolve
+ ! do k = 1, nVertLevels
+ ! tend_scalars(index_nc,k,i) = tend_scalars(index_nc,k,i) + rncblten(k,i)*mass(k,i)
+ ! tend_scalars(index_nifa,k,i) = tend_scalars(index_nifa,k,i) + rnifablten(k,i)*mass(k,i)
+ ! tend_scalars(index_nwfa,k,i) = tend_scalars(index_nwfa,k,i) + rnwfablten(k,i)*mass(k,i)
+ ! enddo
+ ! enddo
+ !endif
+
case default
end select pbl_select
endif
diff --git a/src/core_atmosphere/physics/mpas_atmphys_vars.F b/src/core_atmosphere/physics/mpas_atmphys_vars.F
index 134009f537..b3d3c87c5f 100644
--- a/src/core_atmosphere/physics/mpas_atmphys_vars.F
+++ b/src/core_atmosphere/physics/mpas_atmphys_vars.F
@@ -10,7 +10,7 @@ module mpas_atmphys_vars
use mpas_kind_types
use NoahmpIOVarType
-
+
implicit none
public
save
@@ -162,7 +162,7 @@ module mpas_atmphys_vars
real(kind=RKIND),public:: dt_microp !time-step for cloud microphysics parameterization.
real(kind=RKIND),public:: dt_radtlw !time-step for longwave radiation parameterization [mns]
real(kind=RKIND),public:: dt_radtsw !time-step for shortwave radiation parameterization [mns]
-
+
real(kind=RKIND),public:: xice_threshold
real(kind=RKIND),dimension(:,:),allocatable:: &
@@ -182,7 +182,7 @@ module mpas_atmphys_vars
!... arrays related to u- and v-velocities interpolated to theta points:
u_p, &!u-velocity interpolated to theta points [m/s]
v_p !v-velocity interpolated to theta points [m/s]
-
+
!... arrays related to vertical sounding:
real(kind=RKIND),dimension(:,:,:),allocatable:: &
zz_p, &!
@@ -274,7 +274,7 @@ module mpas_atmphys_vars
graupelncv_p, &!
sr_p
- integer:: &
+ integer:: &
has_reqc, &!
has_reqi, &!
has_reqs
@@ -422,9 +422,16 @@ module mpas_atmphys_vars
real(kind=RKIND),dimension(:,:),allocatable:: &
maxwidthbl_p, &!max plume width [m]
- maxmfbl_p, &!maximum mass flux for PBL shallow convection.
- zbl_plume_p !height of highest penetrating plume [m]
-
+ maxmfbl_p, &!maximum mass flux for PBL shallow convection. [m/s]
+ zbl_plume_p, &!height of highest penetrating plume [m]
+ excessh_p, &!maximum heat excess applied to plumes [K]
+ excessq_p, &!maximum moisture excess applied to plumes [kg/kg]
+ maxwidth_dd_p, &!maximum downdraft plume width [m]
+ maxmf_dd_p, &!maximum mass flux for downdrafts [m/s]
+ maxtkeprod_dd_p, &!maximum tke prduction in column from downdrafts [m2/s2/hr]
+ cldtop_cooling_p, &!maximum net cooling at boundary layer cloud top [K/hr]
+ ent_eff_p !entrainment efficiency
+
real(kind=RKIND),dimension(:,:,:),allocatable:: &
dqke_p, &!
qbuoy_p, &!
@@ -564,6 +571,7 @@ module mpas_atmphys_vars
ck_p, &!enthalpy exchange coeff at 10 meters [?]
cka_p, &!enthalpy exchange coeff at the lowest model level [?]
cqs2_p, &!
+ cqs_p, &!
gz1oz0_p, &!log of z1 over z0 [-]
flhc_p, &!exchange coefficient for heat [-]
flqc_p, &!exchange coefficient for moisture [-]
@@ -839,7 +847,7 @@ module mpas_atmphys_vars
integer,public:: &
num_soils !number of soil layers [-]
-
+
integer,dimension(:,:),allocatable:: &
isltyp_p, &!dominant soil type category [-]
ivgtyp_p !dominant vegetation category [-]
@@ -931,9 +939,9 @@ module mpas_atmphys_vars
! is set to true. the arrays below have the same definition as the corresponding "_p" arrays:
!=================================================================================================================
- real(kind=RKIND),dimension(:,:),allocatable:: br_sea,ch_sea,chs_sea,chs2_sea,cpm_sea,cqs2_sea, &
- flhc_sea,flqc_sea,gz1oz0_sea,hfx_sea,lh_sea,mavail_sea,mol_sea, &
- psih_sea,psim_sea,fh_sea,fm_sea,qfx_sea,qgh_sea,qsfc_sea,regime_sea, &
+ real(kind=RKIND),dimension(:,:),allocatable:: br_sea,ch_sea,chs_sea,chs2_sea,cpm_sea,cqs_sea,cqs2_sea,&
+ flhc_sea,flqc_sea,gz1oz0_sea,hfx_sea,lh_sea,mavail_sea,mol_sea, &
+ psih_sea,psim_sea,fh_sea,fm_sea,qfx_sea,qgh_sea,qsfc_sea,regime_sea, &
rmol_sea,ust_sea,wspd_sea,znt_sea,zol_sea,tsk_sea,xland_sea
real(kind=RKIND),dimension(:,:),allocatable:: t2m_sea,th2m_sea,q2_sea,u10_sea,v10_sea
real(kind=RKIND),dimension(:,:),allocatable:: cd_sea,cda_sea,ck_sea,cka_sea,ustm_sea