diff --git a/src/core_atmosphere/Registry.xml b/src/core_atmosphere/Registry.xml
index 88f07d60e9..de0f539ea9 100644
--- a/src/core_atmosphere/Registry.xml
+++ b/src/core_atmosphere/Registry.xml
@@ -424,6 +424,7 @@
+
@@ -2113,6 +2114,14 @@
+
+
+
+
#endif
@@ -2504,6 +2513,14 @@
+
+
+
+
#endif
@@ -2603,6 +2620,14 @@
+
+
+
+
@@ -2775,7 +2800,10 @@
units="-"
description="Logical flag to turn on/off prognostic cloud fraction"
possible_values=".true. or .false."/>
-
+
+ possible_values="`suite',`cld_fraction',`cld_incidence',`cld_fraction_thompson',`cld_fraction_mynn',`cld_tempo'"/>
+
diff --git a/src/core_atmosphere/physics/mpas_atmphys_control.F b/src/core_atmosphere/physics/mpas_atmphys_control.F
index 7922727ed5..7d15148256 100644
--- a/src/core_atmosphere/physics/mpas_atmphys_control.F
+++ b/src/core_atmosphere/physics/mpas_atmphys_control.F
@@ -106,8 +106,9 @@ subroutine physics_namelist_check(configs)
config_radt_lw_scheme, &
config_radt_sw_scheme, &
config_sfclayer_scheme
- integer,pointer:: config_mynn_cloudpdf
+
logical,pointer:: config_tempo_cldfra
+ integer,pointer:: config_mynn_cloudpdf
!-----------------------------------------------------------------------------------------------------------------
!call mpas_log_write('')
!call mpas_log_write('--- enter subroutine physics_namelist_check:')
@@ -122,8 +123,8 @@ subroutine physics_namelist_check(configs)
call mpas_pool_get_config(configs,'config_radt_lw_scheme' ,config_radt_lw_scheme )
call mpas_pool_get_config(configs,'config_radt_sw_scheme' ,config_radt_sw_scheme )
call mpas_pool_get_config(configs,'config_sfclayer_scheme' ,config_sfclayer_scheme )
- call mpas_pool_get_config(configs,'config_tempo_cldfra' ,config_tempo_cldfra )
- call mpas_pool_get_config(configs,'config_mynn_cloudpdf' ,config_mynn_cloudpdf )
+ call mpas_pool_get_config(configs,'config_tempo_cldfra' ,config_tempo_cldfra )
+ call mpas_pool_get_config(configs,'config_mynn_cloudpdf' ,config_mynn_cloudpdf )
call mpas_log_write('')
call mpas_log_write('----- Setting up physics suite '''//trim(config_physics_suite)//''' -----')
@@ -267,6 +268,7 @@ subroutine physics_namelist_check(configs)
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_tempo' .or. &
config_radt_cld_scheme .eq. 'cld_fraction_mynn')) then
write(mpas_err_message,'(A,A20)') 'illegal value for calculation of cloud fraction: ', &
@@ -304,12 +306,12 @@ subroutine physics_namelist_check(configs)
config_radt_cld_scheme = "cld_tempo"
if ((config_pbl_scheme == 'bl_mynn') .and. (config_mynn_cloudpdf .ge. 0)) then
write(mpas_err_message,'(A,A20)') &
- ' setting config_mynn_cloudpdf to -2 when using tempo prognostic clouds'
+ ' setting config_mynn_cloudpdf to -2 when using tempo prognostic clouds'
call physics_message(mpas_err_message)
config_mynn_cloudpdf = -2
endif
endif
-
+
!surface-layer scheme:
if(.not. (config_sfclayer_scheme .eq. 'off' .or. &
config_sfclayer_scheme .eq. 'sf_mynn' .or. &
diff --git a/src/core_atmosphere/physics/mpas_atmphys_driver.F b/src/core_atmosphere/physics/mpas_atmphys_driver.F
index 3db7324dc6..3771a1aa7b 100644
--- a/src/core_atmosphere/physics/mpas_atmphys_driver.F
+++ b/src/core_atmosphere/physics/mpas_atmphys_driver.F
@@ -232,7 +232,7 @@ subroutine physics_driver(domain,itimestep,xtime_s,exchange_halo_group)
call allocate_cloudiness(block%configs)
!$OMP PARALLEL DO
do thread=1,nThreads
- call driver_cloudiness(itimestep,block%configs,mesh,diag_physics,sfc_input, &
+ call driver_cloudiness(itimestep,block%configs,mesh,state,diag_physics,sfc_input, &
cellSolveThreadStart(thread),cellSolveThreadEnd(thread))
end do
!$OMP END PARALLEL DO
@@ -337,7 +337,7 @@ subroutine physics_driver(domain,itimestep,xtime_s,exchange_halo_group)
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,mesh,state,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 b33c3bdbef..7ac26fcfe7 100644
--- a/src/core_atmosphere/physics/mpas_atmphys_driver_cloudiness.F
+++ b/src/core_atmosphere/physics/mpas_atmphys_driver_cloudiness.F
@@ -86,6 +86,10 @@ subroutine allocate_cloudiness(configs)
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("cld_tempo")
+ if(.not.allocated(qal_p)) allocate(qal_p(ims:ime,kms:kme,jms:jme))
+ if(.not.allocated(qai_p)) allocate(qai_p(ims:ime,kms:kme,jms:jme))
case default
end select cld_fraction_select
@@ -124,6 +128,10 @@ subroutine deallocate_cloudiness(configs)
if(allocated(qibl_p)) deallocate(qibl_p)
if(allocated(qcbl_p)) deallocate(qcbl_p)
+
+ case("cld_tempo")
+ if(allocated(qal_p)) deallocate(qal_p)
+ if(allocated(qai_p)) deallocate(qai_p)
case default
end select cld_fraction_select
@@ -137,7 +145,7 @@ subroutine deallocate_cloudiness(configs)
end subroutine deallocate_cloudiness
!=================================================================================================================
- subroutine cloudiness_from_MPAS(itimestep,configs,mesh,diag_physics,sfc_input,its,ite)
+ subroutine cloudiness_from_MPAS(itimestep,configs,mesh,state,diag_physics,sfc_input,its,ite)
!=================================================================================================================
!input arguments:
@@ -147,6 +155,7 @@ subroutine cloudiness_from_MPAS(itimestep,configs,mesh,diag_physics,sfc_input,it
!input and inout arguments:
type(mpas_pool_type),intent(in) :: configs
type(mpas_pool_type),intent(in) :: mesh
+ type(mpas_pool_type),intent(in) :: state
type(mpas_pool_type),intent(in) :: sfc_input
!inout arguments:
@@ -164,6 +173,10 @@ subroutine cloudiness_from_MPAS(itimestep,configs,mesh,diag_physics,sfc_input,it
character(len=StrKIND),pointer:: radt_cld_scheme
character(len=StrKIND),pointer:: convection_scheme
+ integer,pointer:: index_qal, index_qai
+ real(kind=RKIND),dimension(:,:,:),pointer:: scalars
+ real(kind=RKIND),dimension(:,:),pointer:: qal, qai
+
!-----------------------------------------------------------------------------------------------------------------
call mpas_pool_get_config(configs,'config_len_disp',len_disp)
@@ -235,6 +248,32 @@ subroutine cloudiness_from_MPAS(itimestep,configs,mesh,diag_physics,sfc_input,it
enddo
enddo
+ case("cld_tempo")
+ call mpas_pool_get_array(state,'scalars',scalars)
+ call mpas_pool_get_dimension(state,'index_qal',index_qal)
+ call mpas_pool_get_dimension(state,'index_qai',index_qai)
+
+ qal => scalars(index_qal,:,:)
+ qai => scalars(index_qai,:,:)
+ do j = jts,jte
+ do k = kts,kte
+ do i = its,ite
+ qal_p(i,k,j) = qal(k,i)
+ qai_p(i,k,j) = qai(k,i)
+ cldfrac_p(i,k,j) = max(0., max(qal(k,i), qai(k,i))) ! Avoid cldfrac < 0
+ if (cldfrac_p(i,k,j) > 0.) then
+ if (qirad_p(i,k,j) > 1.e-7) then
+ qirad_p(i,k,j) = max(0. , qirad_p(i,k,j) + qsrad_p(i,k,j))
+ qsrad_p(i,k,j) = 0.
+ endif
+ else
+ qcrad_p(i,k,j) = 0. ! No cloud
+ qirad_p(i,k,j) = 0. ! No cloud
+ qsrad_p(i,k,j) = 0. ! No cloud
+ endif
+ enddo
+ enddo
+ enddo
case default
end select cld_fraction_select
@@ -288,12 +327,13 @@ subroutine cloudiness_to_MPAS(diag_physics,its,ite)
end subroutine cloudiness_to_MPAS
!=================================================================================================================
- subroutine driver_cloudiness(itimestep,configs,mesh,diag_physics,sfc_input,its,ite)
+ subroutine driver_cloudiness(itimestep,configs,mesh,state,diag_physics,sfc_input,its,ite)
!=================================================================================================================
!input arguments:
type(mpas_pool_type),intent(in) :: configs
type(mpas_pool_type),intent(in) :: mesh
+ type(mpas_pool_type),intent(in) :: state
type(mpas_pool_type),intent(in) :: sfc_input
integer,intent(in):: its,ite
@@ -316,7 +356,7 @@ subroutine driver_cloudiness(itimestep,configs,mesh,diag_physics,sfc_input,its,i
call mpas_pool_get_config(configs,'config_convection_scheme',convection_scheme)
!copy MPAS arrays to local arrays:
- call cloudiness_from_MPAS(itimestep,configs,mesh,diag_physics,sfc_input,its,ite)
+ call cloudiness_from_MPAS(itimestep,configs,mesh,state,diag_physics,sfc_input,its,ite)
cld_fraction_select: select case (trim(radt_cld_scheme))
case("cld_incidence")
diff --git a/src/core_atmosphere/physics/mpas_atmphys_driver_microphysics.F b/src/core_atmosphere/physics/mpas_atmphys_driver_microphysics.F
index d78d56bec3..39ececd2cb 100644
--- a/src/core_atmosphere/physics/mpas_atmphys_driver_microphysics.F
+++ b/src/core_atmosphere/physics/mpas_atmphys_driver_microphysics.F
@@ -111,6 +111,7 @@ subroutine allocate_microphysics(configs)
character(len=StrKIND),pointer:: nssl_moments
logical,pointer:: config_tempo_hailaware, config_tempo_aerosolaware
logical,pointer:: config_tempo_ml_nc_pbl
+ logical,pointer:: config_tempo_cldfra
!-----------------------------------------------------------------------------------------------------------------
call mpas_pool_get_config(configs,'config_microp_scheme',microp_scheme)
@@ -118,6 +119,7 @@ subroutine allocate_microphysics(configs)
call mpas_pool_get_config(configs,'config_tempo_hailaware',config_tempo_hailaware)
call mpas_pool_get_config(configs,'config_tempo_aerosolaware',config_tempo_aerosolaware)
call mpas_pool_get_config(configs,'config_tempo_ml_nc_pbl',config_tempo_ml_nc_pbl)
+ call mpas_pool_get_config(configs,'config_tempo_cldfra',config_tempo_cldfra)
!sounding variables:
if(.not.allocated(rho_p) ) allocate(rho_p(ims:ime,kms:kme,jms:jme) )
@@ -223,6 +225,21 @@ subroutine allocate_microphysics(configs)
if(.not.allocated(volg_p)) allocate(volg_p(ims:ime,kms:kme,jms:jme))
endif
+ if (config_tempo_cldfra) then
+ if(.not.allocated(qal_p)) allocate(qal_p(ims:ime,kms:kme,jms:jme))
+ if(.not.allocated(qai_p)) allocate(qai_p(ims:ime,kms:kme,jms:jme))
+ if(.not.allocated(precipfrac_p)) allocate(precipfrac_p(ims:ime,kms:kme,jms:jme))
+
+ if(.not.allocated(rthblten_p)) allocate(rthblten_p(ims:ime,kms:kme,jms:jme))
+ if(.not.allocated(rqvblten_p)) allocate(rqvblten_p(ims:ime,kms:kme,jms:jme))
+ if(.not.allocated(rqcblten_p)) allocate(rqcblten_p(ims:ime,kms:kme,jms:jme))
+ if(.not.allocated(rqiblten_p)) allocate(rqiblten_p(ims:ime,kms:kme,jms:jme))
+ if(.not.allocated(rthratenlw_p)) allocate(rthratenlw_p(ims:ime,kms:kme,jms:jme))
+ if(.not.allocated(rthratensw_p)) allocate(rthratensw_p(ims:ime,kms:kme,jms:jme))
+! if(.not.allocated(cldfrac_p) ) allocate(cldfrac_p(ims:ime,kms:kme,jms:jme))
+! if(.not.allocated(qcbl_p) ) allocate(qcbl_p(ims:ime,kms:kme,jms:jme))
+ endif
+
if (config_tempo_ml_nc_pbl) then
if(.not.allocated(cldfrac_p) ) allocate(cldfrac_p(ims:ime,kms:kme,jms:jme))
if(.not.allocated(qcbl_p) ) allocate(qcbl_p(ims:ime,kms:kme,jms:jme))
@@ -276,6 +293,7 @@ subroutine deallocate_microphysics(configs)
character(len=StrKIND),pointer:: nssl_moments
logical,pointer:: config_tempo_hailaware, config_tempo_aerosolaware
logical,pointer:: config_tempo_ml_nc_pbl
+ logical,pointer:: config_tempo_cldfra
!-----------------------------------------------------------------------------------------------------------------
@@ -284,6 +302,7 @@ subroutine deallocate_microphysics(configs)
call mpas_pool_get_config(configs,'config_tempo_hailaware',config_tempo_hailaware)
call mpas_pool_get_config(configs,'config_tempo_aerosolaware',config_tempo_aerosolaware)
call mpas_pool_get_config(configs,'config_tempo_ml_nc_pbl',config_tempo_ml_nc_pbl)
+ call mpas_pool_get_config(configs,'config_tempo_cldfra',config_tempo_cldfra)
!sounding variables:
if(allocated(rho_p) ) deallocate(rho_p )
@@ -387,6 +406,21 @@ subroutine deallocate_microphysics(configs)
if(allocated(volg_p) ) deallocate(volg_p )
endif
+ if (config_tempo_cldfra) then
+ if(allocated(qal_p)) deallocate(qal_p)
+ if(allocated(qai_p)) deallocate(qai_p)
+ if(allocated(precipfrac_p)) deallocate(precipfrac_p)
+
+ if(allocated(rthblten_p)) deallocate(rthblten_p)
+ if(allocated(rqvblten_p)) deallocate(rqvblten_p)
+ if(allocated(rqcblten_p)) deallocate(rqcblten_p)
+ if(allocated(rqiblten_p)) deallocate(rqiblten_p)
+ if(allocated(rthratenlw_p)) deallocate(rthratenlw_p)
+ if(allocated(rthratensw_p)) deallocate(rthratensw_p)
+! if(allocated(cldfrac_p) ) deallocate(cldfrac_p)
+! if(allocated(qcbl_p) ) deallocate(qcbl_p)
+ endif
+
if (config_tempo_ml_nc_pbl) then
if(allocated(cldfrac_p) ) deallocate(cldfrac_p)
if(allocated(qcbl_p) ) deallocate(qcbl_p)
@@ -450,6 +484,7 @@ subroutine init_microphysics(dminfo,configs,mesh,state,time_lev,sfc_input,diag_p
logical,pointer:: do_restart
character(len=StrKIND),pointer:: microp_scheme
logical,pointer:: config_tempo_hailaware, config_tempo_aerosolaware
+ logical,pointer:: config_tempo_cldfra, config_tempo_incld
character(len=StrKIND),pointer:: nssl_moments
logical :: outputon = .false.
@@ -469,6 +504,8 @@ subroutine init_microphysics(dminfo,configs,mesh,state,time_lev,sfc_input,diag_p
call mpas_pool_get_config(configs,'config_microp_scheme',microp_scheme)
call mpas_pool_get_config(configs,'config_tempo_hailaware',config_tempo_hailaware)
call mpas_pool_get_config(configs,'config_tempo_aerosolaware',config_tempo_aerosolaware)
+ call mpas_pool_get_config(configs,'config_tempo_cldfra',config_tempo_cldfra)
+ call mpas_pool_get_config(configs,'config_tempo_incld',config_tempo_incld)
call mpas_pool_get_config(configs,'config_nssl_moments',nssl_moments)
call mpas_pool_get_config(configs,'config_do_restart' ,do_restart )
@@ -486,7 +523,8 @@ subroutine init_microphysics(dminfo,configs,mesh,state,time_lev,sfc_input,diag_p
case("mp_tempo")
call tempo_init(l_mp_tables=l_mp_tables, &
- hail_aware_flag=config_tempo_hailaware, aerosol_aware_flag=config_tempo_aerosolaware)
+ hail_aware_flag=config_tempo_hailaware, aerosol_aware_flag=config_tempo_aerosolaware, &
+ cldfra_flag=config_tempo_cldfra, incld_flag=config_tempo_incld)
if (config_tempo_aerosolaware) then
call init_tempo_aerosols_forMPAS(do_restart,dminfo,mesh,state,time_lev,diag_physics)
@@ -608,6 +646,7 @@ subroutine driver_microphysics(configs,mesh,state,time_lev,diag,diag_physics,ten
th = th_p , qv = qv_p , qc = qc_p , &
qr = qr_p , qi = qi_p , qs = qs_p , &
qg = qg_p , ni = ni_p , nr = nr_p , &
+ qal = qal_p , qai = qai_p , precipfrac = precipfrac_p , &
!! ng = ng_p , qb = volg_p , &
!! nc = nc_p , nwfa = nwfa_p , nifa = nifa_p , &
!! nwfa2d = nwfa2d_p , nifa2d = nifa2d_p , &
@@ -630,6 +669,7 @@ subroutine driver_microphysics(configs,mesh,state,time_lev,diag,diag_physics,ten
th = th_p , qv = qv_p , qc = qc_p , &
qr = qr_p , qi = qi_p , qs = qs_p , &
qg = qg_p , ni = ni_p , nr = nr_p , &
+ qal = qal_p , qai = qai_p , precipfrac = precipfrac_p , &
!! ng = ng_p , qb = volg_p , &
nc = nc_p , nwfa = nwfa_p , nifa = nifa_p , &
nwfa2d = nwfa2d_p , nifa2d = nifa2d_p , &
@@ -653,6 +693,7 @@ subroutine driver_microphysics(configs,mesh,state,time_lev,diag,diag_physics,ten
qr = qr_p , qi = qi_p , qs = qs_p , &
qg = qg_p , ni = ni_p , nr = nr_p , &
ng = ng_p , qb = volg_p , &
+ qal = qal_p , qai = qai_p , precipfrac = precipfrac_p , &
!! nc = nc_p , nwfa = nwfa_p , nifa = nifa_p , &
!! nwfa2d = nwfa2d_p , nifa2d = nifa2d_p , &
pii = pi_p , p = pres_p , dz = dz_p , &
@@ -680,6 +721,9 @@ subroutine driver_microphysics(configs,mesh,state,time_lev,diag,diag_physics,ten
ng = ng_p , qb = volg_p , &
nc = nc_p , nwfa = nwfa_p , nifa = nifa_p , &
nwfa2d = nwfa2d_p , nifa2d = nifa2d_p , &
+ qal = qal_p , qai = qai_p , precipfrac = precipfrac_p , &
+ rthbl = rthblten_p, rqvbl = rqvblten_p, rqcbl = rqcblten_p, rqibl = rqiblten_p , &
+ rthlw = rthratenlw_p, rthsw = rthratensw_p , &
pii = pi_p , p = pres_p , dz = dz_p , &
w = w_p , dt_in = dt_microp , itimestep = itimestep , &
rainnc = rainnc_p , rainncv = rainncv_p , snownc = snownc_p , &
diff --git a/src/core_atmosphere/physics/mpas_atmphys_driver_pbl.F b/src/core_atmosphere/physics/mpas_atmphys_driver_pbl.F
index 68bf8fd97f..d25a5ba5a0 100644
--- a/src/core_atmosphere/physics/mpas_atmphys_driver_pbl.F
+++ b/src/core_atmosphere/physics/mpas_atmphys_driver_pbl.F
@@ -440,12 +440,13 @@ 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,mesh,state,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(in):: state
type(mpas_pool_type),intent(in):: diag_physics
type(mpas_pool_type),intent(in):: sfc_input
type(mpas_pool_type),intent(in):: tend_physics
@@ -474,7 +475,10 @@ subroutine pbl_from_MPAS(configs,mesh,sfc_input,diag_physics,tend_physics,its,it
real(kind=RKIND),dimension(:,:),pointer:: cldfrac_bl,qc_bl,qi_bl
real(kind=RKIND),dimension(:,:),pointer:: edmf_a,edmf_ent,edmf_qc,edmf_qt,edmf_thl,edmf_w
real(kind=RKIND),dimension(:,:),pointer:: sub_thl,sub_qv,det_thl,det_qv
-
+ real(kind=RKIND),dimension(:,:),pointer :: qal, qai
+ real(kind=RKIND),dimension(:,:,:),pointer :: scalars
+ integer,pointer:: index_qal, index_qai
+
!local pointers for MYJ scheme:
real(kind=RKIND),dimension(:),pointer :: chlowq,thz0,qz0,uz0,vz0,ct,akhs,akms,lh,mixht
real(kind=RKIND),dimension(:,:),pointer :: zgrid
@@ -675,6 +679,13 @@ subroutine pbl_from_MPAS(configs,mesh,sfc_input,diag_physics,tend_physics,its,it
call mpas_pool_get_array(diag_physics,'det_thl' ,det_thl )
call mpas_pool_get_array(diag_physics,'det_qv' ,det_qv )
+ call mpas_pool_get_array(state,'scalars',scalars)
+ call mpas_pool_get_dimension(state,'index_qal' ,index_qal )
+ call mpas_pool_get_dimension(state,'index_qai' ,index_qai )
+
+ qal => scalars(index_qal,:,:)
+ qai => scalars(index_qai,:,:)
+
do j = jts,jte
do i = its,ite
dx_p(i,j) = len_disp / meshDensity(i)**0.25
@@ -695,7 +706,8 @@ subroutine pbl_from_MPAS(configs,mesh,sfc_input,diag_physics,tend_physics,its,it
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)
+! cldfrabl_p(i,k,j) = cldfrac_bl(k,i)
+ cldfrabl_p(i,k,j) = max(qal(k,i), qai(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)
@@ -1176,12 +1188,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,mesh,state,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(in):: state
integer,intent(in):: its,ite
integer,intent(in):: itimestep
@@ -1242,7 +1255,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,mesh,state,sfc_input,diag_physics,tend_physics,its,ite)
initflag = 1
if(config_do_restart .or. itimestep > 1) initflag = 0
diff --git a/src/core_atmosphere/physics/mpas_atmphys_interface.F b/src/core_atmosphere/physics/mpas_atmphys_interface.F
index 35d577efab..a716252db7 100644
--- a/src/core_atmosphere/physics/mpas_atmphys_interface.F
+++ b/src/core_atmosphere/physics/mpas_atmphys_interface.F
@@ -665,17 +665,20 @@ subroutine microphysics_from_MPAS(configs,mesh,state,time_lev,diag,diag_physics,
character(len=StrKIND),pointer:: nssl_moments
logical,pointer:: config_tempo_hailaware, config_tempo_aerosolaware
logical,pointer:: config_tempo_ml_nc_pbl
+ logical,pointer:: config_tempo_cldfra
integer,pointer:: index_qh
integer,pointer:: index_zrw,index_zgw,index_zhw
integer,pointer:: index_ns,index_ng,index_nh,index_nccn
integer,pointer:: index_volg,index_volh
-
+ integer,pointer:: index_qal, index_qai
+
real(kind=RKIND),dimension(:,:),pointer :: zgrid,w
real(kind=RKIND),dimension(:,:),pointer :: zz,exner,pressure_b
real(kind=RKIND),dimension(:,:),pointer :: rho_zz,theta_m,pressure_p
real(kind=RKIND),dimension(:,:),pointer :: qv,qc,qr,qi,qs,qg
real(kind=RKIND),dimension(:,:),pointer :: qh
real(kind=RKIND),dimension(:,:),pointer :: nc,ni,nr,nifa,nwfa
+ real(kind=RKIND),dimension(:,:),pointer :: qal, qai, precipfrac
real(kind=RKIND),dimension(:,:),pointer :: ns,ng,nh,nccn
real(kind=RKIND),dimension(:,:),pointer :: volg,volh,zrw,zgw,zhw
real(kind=RKIND),dimension(:,:),pointer :: rainprod,evapprod
@@ -685,6 +688,7 @@ subroutine microphysics_from_MPAS(configs,mesh,state,time_lev,diag,diag_physics,
real(kind=RKIND),dimension(:,:),pointer :: qc_bl, cldfrac_bl
real(kind=RKIND),dimension(:,:),pointer :: rthmpten,rqvmpten,rqcmpten,rqrmpten,rqimpten,rqsmpten,rqgmpten
real(kind=RKIND),dimension(:,:),pointer :: rncmpten,rnimpten,rnrmpten,rnifampten,rnwfampten
+ real(kind=RKIND),dimension(:,:),pointer :: rthblten, rqvblten, rqcblten, rqiblten, rthratenlw, rthratensw
real(kind=RKIND),dimension(:,:,:),pointer:: scalars
!local variables:
@@ -697,6 +701,7 @@ subroutine microphysics_from_MPAS(configs,mesh,state,time_lev,diag,diag_physics,
call mpas_pool_get_config(configs,'config_tempo_hailaware',config_tempo_hailaware)
call mpas_pool_get_config(configs,'config_tempo_aerosolaware',config_tempo_aerosolaware)
call mpas_pool_get_config(configs,'config_tempo_ml_nc_pbl',config_tempo_ml_nc_pbl)
+ call mpas_pool_get_config(configs,'config_tempo_cldfra',config_tempo_cldfra)
call mpas_pool_get_array(mesh,'zgrid',zgrid)
call mpas_pool_get_array(mesh,'zz' ,zz )
@@ -943,6 +948,43 @@ subroutine microphysics_from_MPAS(configs,mesh,state,time_lev,diag,diag_physics,
enddo
endif
+ if (config_tempo_cldfra) then
+ call mpas_pool_get_dimension(state,'index_qal' ,index_qal )
+ call mpas_pool_get_dimension(state,'index_qai' ,index_qai )
+ call mpas_pool_get_array(diag_physics,'precipfrac', precipfrac)
+ call mpas_pool_get_array(tend_physics,'rthblten',rthblten)
+ call mpas_pool_get_array(tend_physics,'rqvblten',rqvblten)
+ call mpas_pool_get_array(tend_physics,'rqcblten',rqcblten)
+ call mpas_pool_get_array(tend_physics,'rqiblten',rqiblten)
+ call mpas_pool_get_array(tend_physics,'rthratenlw',rthratenlw)
+ call mpas_pool_get_array(tend_physics,'rthratensw',rthratensw)
+
+! call mpas_pool_get_array(diag_physics,'qc_bl',qc_bl)
+! call mpas_pool_get_array(diag_physics,'cldfrac_bl',cldfrac_bl)
+
+ qal => scalars(index_qal,:,:)
+ qai => scalars(index_qai,:,:)
+
+ do j = jts, jte
+ do k = kts, kte
+ do i = its, ite
+ qal_p(i,k,j) = qal(k,i)
+ qai_p(i,k,j) = qai(k,i)
+
+ precipfrac_p(i,k,j) = precipfrac(k,i)
+ rthblten_p(i,k,j) = rthblten(k,i)
+ rqvblten_p(i,k,j) = rqvblten(k,i)
+ rqcblten_p(i,k,j) = rqcblten(k,i)
+ rqiblten_p(i,k,j) = rqiblten(k,i)
+ rthratenlw_p(i,k,j) = rthratenlw(k,i)
+ rthratensw_p(i,k,j) = rthratensw(k,i)
+! qcbl_p(i,k,j) = qc_bl(k,i)
+! cldfrac_p(i,k,j) = cldfrac_bl(k,i)
+ enddo
+ enddo
+ enddo
+ endif
+
case("mp_nssl2m")
call mpas_pool_get_dimension(state,'index_ni',index_ni)
call mpas_pool_get_dimension(state,'index_nr',index_nr)
@@ -1151,8 +1193,10 @@ subroutine microphysics_to_MPAS(configs,mesh,state,time_lev,diag,diag_physics,te
character(len=StrKIND),pointer:: mp_scheme
character(len=StrKIND),pointer:: nssl_moments
logical,pointer:: config_tempo_hailaware, config_tempo_aerosolaware
+ logical,pointer:: config_tempo_cldfra
integer,pointer:: index_qv,index_qc,index_qr,index_qi,index_qs,index_qg
integer,pointer:: index_nc,index_ni,index_nr,index_nifa,index_nwfa
+ integer,pointer:: index_qal, index_qai
!TEMPO/NSSL
integer,pointer:: index_qh
integer,pointer:: index_zrw,index_zgw,index_zhw
@@ -1169,6 +1213,7 @@ subroutine microphysics_to_MPAS(configs,mesh,state,time_lev,diag,diag_physics,te
real(kind=RKIND),dimension(:,:),pointer :: qv,qc,qr,qi,qs,qg
real(kind=RKIND),dimension(:,:),pointer :: qh
real(kind=RKIND),dimension(:,:),pointer :: nc,ni,nr,nifa,nwfa
+ real(kind=RKIND),dimension(:,:),pointer :: qal, qai, precipfrac
real(kind=RKIND),dimension(:,:),pointer :: ns,ng,nh,nccn
real(kind=RKIND),dimension(:,:),pointer :: volg,volh,zrw,zgw,zhw
real(kind=RKIND),dimension(:) ,pointer :: max_hail_diameter_sfc, max_hail_diameter_column
@@ -1189,6 +1234,7 @@ subroutine microphysics_to_MPAS(configs,mesh,state,time_lev,diag,diag_physics,te
call mpas_pool_get_config(configs,'config_nssl_moments',nssl_moments)
call mpas_pool_get_config(configs,'config_tempo_hailaware',config_tempo_hailaware)
call mpas_pool_get_config(configs,'config_tempo_aerosolaware',config_tempo_aerosolaware)
+ call mpas_pool_get_config(configs,'config_tempo_cldfra',config_tempo_cldfra)
call mpas_pool_get_array(mesh,'zz' ,zz )
call mpas_pool_get_array(mesh,'zgrid',zgrid)
@@ -1449,6 +1495,25 @@ subroutine microphysics_to_MPAS(configs,mesh,state,time_lev,diag,diag_physics,te
enddo
endif
+ if (config_tempo_cldfra) then
+ call mpas_pool_get_dimension(state,'index_qal' ,index_qal )
+ call mpas_pool_get_dimension(state,'index_qai' ,index_qai )
+ call mpas_pool_get_array(diag_physics,'precipfrac' ,precipfrac )
+
+ qal => scalars(index_qal,:,:)
+ qai => scalars(index_qai,:,:)
+
+ do j = jts, jte
+ do k = kts, kte
+ do i = its, ite
+ qal(k,i) = qal_p(i,k,j)
+ qai(k,i) = qai_p(i,k,j)
+ precipfrac(k,i) = precipfrac_p(i,k,j)
+ enddo
+ enddo
+ enddo
+ endif
+
case("mp_nssl2m")
call mpas_pool_get_dimension(state,'index_ni' ,index_ni )
call mpas_pool_get_dimension(state,'index_nc' ,index_nc )
diff --git a/src/core_atmosphere/physics/mpas_atmphys_packages.F b/src/core_atmosphere/physics/mpas_atmphys_packages.F
index 9684c8d10d..24541e1388 100644
--- a/src/core_atmosphere/physics/mpas_atmphys_packages.F
+++ b/src/core_atmosphere/physics/mpas_atmphys_packages.F
@@ -39,9 +39,9 @@ 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
- logical,pointer:: config_tempo_hailaware, config_tempo_aerosolaware
+ logical,pointer:: config_tempo_hailaware, config_tempo_aerosolaware, config_tempo_cldfra
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:: mp_tempo_in, tempo_hailaware_in, tempo_aerosolaware_in, tempo_cldfra_in
logical,pointer:: cu_grell_freitas_in,cu_grell_freitas_li_in,cu_kain_fritsch_in,cu_ntiedtke_in
logical,pointer:: bl_mynn_in,bl_mynnedmf_in,bl_ysu_in,bl_myj_in
logical,pointer:: lsm_noah_in,lsm_ruc_in
@@ -65,6 +65,7 @@ function atmphys_setup_packages(configs,streamInfo,packages,iocontext) result(ie
call mpas_pool_get_config(configs,'config_nssl_moments',config_nssl_moments)
call mpas_pool_get_config(configs,'config_tempo_hailaware',config_tempo_hailaware)
call mpas_pool_get_config(configs,'config_tempo_aerosolaware',config_tempo_aerosolaware)
+ call mpas_pool_get_config(configs,'config_tempo_cldfra',config_tempo_cldfra)
nullify(mp_kessler_in)
call mpas_pool_get_package(packages,'mp_kessler_inActive',mp_kessler_in)
@@ -83,6 +84,9 @@ function atmphys_setup_packages(configs,streamInfo,packages,iocontext) result(ie
nullify(tempo_hailaware_in)
call mpas_pool_get_package(packages,'tempo_hailaware_inActive',tempo_hailaware_in)
+
+ nullify(tempo_cldfra_in)
+ call mpas_pool_get_package(packages,'tempo_cldfra_inActive',tempo_cldfra_in)
nullify(mp_wsm6_in)
call mpas_pool_get_package(packages,'mp_wsm6_inActive',mp_wsm6_in)
@@ -112,6 +116,7 @@ function atmphys_setup_packages(configs,streamInfo,packages,iocontext) result(ie
mp_tempo_in = .false.
tempo_aerosolaware_in = .false.
tempo_hailaware_in = .false.
+ tempo_cldfra_in = .false.
mp_wsm6_in = .false.
mp_nssl2m_in = .false.
nssl3m_in = .false.
@@ -132,6 +137,9 @@ function atmphys_setup_packages(configs,streamInfo,packages,iocontext) result(ie
if (config_tempo_hailaware) then
tempo_hailaware_in = .true.
endif
+ if (config_tempo_cldfra) then
+ tempo_cldfra_in = .true.
+ endif
elseif(config_microp_scheme == 'mp_nssl2m') then
mp_nssl2m_in = .true.
IF ( config_nssl_moments == 'nssl3m' ) THEN
@@ -145,6 +153,7 @@ function atmphys_setup_packages(configs,streamInfo,packages,iocontext) result(ie
call mpas_log_write(' mp_tempo_in = $l', logicArgs=(/mp_tempo_in/))
call mpas_log_write(' tempo_aerosolaware_in = $l', logicArgs=(/tempo_aerosolaware_in/))
call mpas_log_write(' tempo_hailaware_in = $l', logicArgs=(/tempo_hailaware_in/))
+ call mpas_log_write(' tempo_cldfra_in = $l', logicArgs=(/tempo_cldfra_in/))
call mpas_log_write(' mp_wsm6_in = $l', logicArgs=(/mp_wsm6_in/))
call mpas_log_write(' mp_nssl2m_in = $l', logicArgs=(/mp_nssl2m_in/))
call mpas_log_write(' nssl3m_in = $l', logicArgs=(/nssl3m_in/))
diff --git a/src/core_atmosphere/physics/mpas_atmphys_vars.F b/src/core_atmosphere/physics/mpas_atmphys_vars.F
index 3fd9a7afb2..c2a5de6e7f 100644
--- a/src/core_atmosphere/physics/mpas_atmphys_vars.F
+++ b/src/core_atmosphere/physics/mpas_atmphys_vars.F
@@ -219,7 +219,10 @@ module mpas_atmphys_vars
muc_p, &!
ntc_p, &!
nifa2d_p
-
+
+ real(kind=RKIND),dimension(:,:,:),allocatable:: &
+ qal_p, qai_p, precipfrac_p
+
!... arrays located at w (vertical velocity) points, or at interface between layers:
real(kind=RKIND),dimension(:,:,:),allocatable:: &
w_p, &!vertical velocity [m/s]
diff --git a/src/core_atmosphere/physics/physics_noaa/TEMPO b/src/core_atmosphere/physics/physics_noaa/TEMPO
index 1ddf4e2030..ab1d16f793 160000
--- a/src/core_atmosphere/physics/physics_noaa/TEMPO
+++ b/src/core_atmosphere/physics/physics_noaa/TEMPO
@@ -1 +1 @@
-Subproject commit 1ddf4e20303412bff68e380a516cf33d0f023140
+Subproject commit ab1d16f793afb3547de606d4c768b0b4b59a545f