Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
3 changes: 1 addition & 2 deletions namelist_monan/GF_ConvPar_nml
Original file line number Diff line number Diff line change
Expand Up @@ -35,6 +35,7 @@
tau_land_cp = 3600., != cold pool lifetime over land
mx_buoy1 = 250.5, ! J/kg
mx_buoy2 = 20004.0, ! J/kg
tu_buoyx = 1.0,


sgs_w_timescale = 1, != 0/1: uses vertical velocity for determination of tau_ecmwf
Expand All @@ -44,8 +45,6 @@
moist_trigger = 0, != 0/1: relative humidity effects on the cap_max trigger function
adv_trigger = 0, != 0/1: adv trigger based on Xie et al 2019.
dcape_threshold = 70., != CAPE time rate threshold for ADV_TRIGGER (J kg^-1 hr^-1)
lcl_trigger = 0, != only for shallow: lcl_trigger > 0 activates the LCL trigger which
!= requires the lcl height be lower than the pbl height. 0 turn it off.

cap_maxs = 50., != max- distance (hPa) the air parcel is allowed to go up looking for the LFC
!---
Expand Down
27 changes: 16 additions & 11 deletions src/core_atmosphere/physics/mpas_atmphys_driver_convection.F
Original file line number Diff line number Diff line change
Expand Up @@ -1683,6 +1683,7 @@ subroutine update_convection_step2(configs,mesh,sfc_input,diag_physics,tend_phys
real(kind=RKIND),dimension(:),pointer:: wlpool,vcpool,u_gustfront,v_gustfront
real(kind=RKIND),dimension(:),pointer:: dp_dens,sh_dens,cg_dens
real(kind=RKIND),dimension(:),pointer:: acc_dp_dens,acc_sh_dens,acc_cg_dens
real(kind=RKIND),dimension(:),pointer:: hpbl

!local variables and arrays:
real(kind=RKIND),dimension(:,:),pointer:: umcl,vmcl
Expand All @@ -1698,16 +1699,15 @@ subroutine update_convection_step2(configs,mesh,sfc_input,diag_physics,tend_phys
!local variables and arrays for the 'cu_gf_monan':
integer:: i,k,j,k_amb_wind
real(kind=RKIND),parameter:: alp = 0.5 ! semi-implicit, 1=explicit
real(kind=RKIND),parameter:: tau_cloud_diss0 = 7.*60. ! seconds
real(kind=RKIND),parameter:: width = 1000. ! meters
real(kind=RKIND),parameter:: turncf = 2000. ! meters above local terrain
real(kind=RKIND),parameter:: tau_cloud_diss0 = 20.*60. ! seconds
real(kind=RKIND),parameter:: width = 400. ! meters
real(kind=RKIND),parameter:: Kfr = 0.9 ! internal Froude number
real(kind=RKIND),parameter:: epsx = 100. ! threshold
real(kind=RKIND),parameter:: slope_pool = 45.*(3.1416/180.) ! using mean value of Reif et al 2020
real(kind=RKIND),parameter:: startlev = 1000. ! meters above local surface
real(kind=RKIND),parameter:: endlev = 4000. ! meters above local surface

real(kind=RKIND):: vert_scale_diss,tau_cloud_diss,htopx,snk,src,tau_cp,denom
real(kind=RKIND):: vert_scale_diss,tau_cloud_diss,htopx,snk,src,tau_cp,denom,OneMinusRH,turncf
real(kind=RKIND):: total_dz,H_env,gama,temp, rvap, press, qes, zlevel, dzrho, aux, MCL_speed

!-----------------------------------------------------------------------------------------------------------------
Expand Down Expand Up @@ -1769,24 +1769,29 @@ subroutine update_convection_step2(configs,mesh,sfc_input,diag_physics,tend_phys
call mpas_pool_get_array(sfc_input,'xland' ,xland )
call mpas_pool_get_array(mesh, 'zgrid' ,zgrid )
call mpas_pool_get_array(diag, 'relhum',rh )! pct
call mpas_pool_get_array(diag_physics,'hpbl' ,hpbl )

do i = its,ite
htopx = zgrid(1,i) !- local terrain
turncf = hpbl(i) + htopx
do k = kts,kte
!-- this goes from 1 to 0.1 as the height goes from the local surface height to the upper levels
vert_scale_diss = 1._RKIND/(1.5_RKIND+atan(2._RKIND*(zgrid(k,i) - htopx - turncf)/width))/3.
vert_scale_diss = max(min (vert_scale_diss,1.) , 0.15_RKIND) ! = 1. to turn off vertical variation
OneMinusRH = (1.0_RKIND - min(1.0_RKIND , 0.01_RKIND*rh(k,i))) ! must be in [0,1]

!---- this goes from 1 to 0.1 as the height goes from the local surface height to the upper levels
vert_scale_diss = 1._RKIND/(1.5_RKIND+atan(2._RKIND*(zgrid(k,i) - turncf)/width))
vert_scale_diss = max(min (vert_scale_diss,1._RKIND), 0.40_RKIND) ! = 1. to turn off vertical variation
tau_cloud_diss = tau_cloud_diss0/vert_scale_diss

!---- sink term for cloud fraction
snk = dt_dyn * (1._RKIND/tau_cloud_diss) * (1.0_RKIND - 0.01_RKIND*rh(k,i)) * abs(cnvcf(k,i))
snk = dt_dyn * (1._RKIND/tau_cloud_diss) * OneMinusRH * abs(cnvcf(k,i))

!---- source term for cloud fraction
src = dt_dyn * rcnvcfcuten(k,i)

!- using semi-impl formulation;
!- f(t+dt) = ( f(t) - (dt/tau)* (alp* f(t)) ] / (1+(dt/tau)* (1-alp))
denom = 1._RKIND + (1._RKIND-alp)*src + (1.-alp)*(1._RKIND-0.01_RKIND*rh(k,i))*dt_dyn/tau_cloud_diss
!---- using semi-impl formulation;
!---- f(t+dt) = [ f(t) - (dt/tau)* (alp* f(t)) ] / (1+(dt/tau)* (1-alp))
denom = 1._RKIND + (1._RKIND-alp)*src + (1._RKIND-alp)*OneMinusRH*dt_dyn/tau_cloud_diss
!---- source term for cloud fraction

!---- update cnvcf
cnvcf(k,i) = ( cnvcf(k,i) - alp*snk + (1._RKIND-alp*cnvcf(k,i))*src )/denom
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -10,7 +10,7 @@ module module_pbl_scalars
!
!=================================================================================================================
! A routine to calculate the dry mixing in PBL for scalars not included in the MYNN routine.
! This is strongly based on "mynn_mix_chem" routine in the file 'bl_mynn_subroutines.F'
! This is mostly based on "mynn_mix_chem" routine in the file 'bl_mynn_subroutines.F'
! Saulo R. Freitas - 19 Sep 2024 (send comments to saulo.freitas@inpe.br)
!=================================================================================================================
subroutine driver_pbl_scalars (itimestep,diag_physics,configs,state,mesh,time_lev,its,ite,kts,kte,dt_pbl)
Expand Down Expand Up @@ -70,11 +70,13 @@ subroutine driver_pbl_scalars (itimestep,diag_physics,configs,state,mesh,time_le
nscalars = nscalars + 1
index_scalar(nscalars) = index_buoyx
endif
call mpas_pool_get_dimension(state,'index_cnvcf',index_cnvcf)
if(index_cnvcf > 0) then
nscalars = nscalars + 1
index_scalar(nscalars) = index_cnvcf
endif
!
!--- srf 15/02/2026 not mixing convective cloud fraction
!call mpas_pool_get_dimension(state,'index_cnvcf',index_cnvcf)
!if(index_cnvcf > 0) then
! nscalars = nscalars + 1
! index_scalar(nscalars) = index_cnvcf
!endif

!--- if no scalar to be mixed, make a "U-turn"
if(nscalars == 0) return
Expand Down
Loading