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: 2 additions & 1 deletion Registry/Registry.EM_COMMON
Original file line number Diff line number Diff line change
Expand Up @@ -1551,7 +1551,7 @@ state integer STEPCU - misc 1 - r "S
state real RTHRATEN ikj misc 1 - rd "RTHRATEN" "THETA TENDENCY DUE TO RADIATION" "K s-1"
state real RTHRATENLW ikj misc 1 - r "RTHRATLW" "UNCOUPLED THETA TENDENCY DUE TO LONG WAVE RADIATION" "K s-1"
state real RTHRATENSW ikj misc 1 - r "RTHRATSW" "UNCOUPLED THETA TENDENCY DUE TO SHORT WAVE RADIATION" "K s-1"
state real CLDFRA ikj misc 1 - rh "CLDFRA" "CLOUD FRACTION" ""
state real CLDFRA ikj misc 1 - i0rh "CLDFRA" "CLOUD FRACTION" ""
state real CONVCLD ij misc 1 - r "CONVCLD" "BMJ CONVECTIVE CLOUD" "kg m-2"
state real CCLDFRA ikj misc 1 - r "CCLDFRA" "CONVECTIVE CLOUD FRACTION" ""
state real CLDFRA_OLD ikj misc 1 - r "CLDFRA_OLD" "previous time level cldfra" ""
Expand Down Expand Up @@ -2458,6 +2458,7 @@ rconfig integer tracer_pblmix namelist,physics max_domains 1
rconfig logical use_aero_icbc namelist,physics 1 .false. rh "use_aero_icbc" "Use GOCART climo 3D aerosols IC/BC data in Thompson-MP-Aero" "logical flag"
rconfig logical use_rap_aero_icbc namelist,physics 1 .false. r "use_rap_aero_icbc" "Use GOCART climo 3D aerosols IC/BC data in Thompson-MP-Aero from RAP" "logical flag"
rconfig integer use_mp_re namelist,physics 1 1 h "use_mp_re" "use effective radii computed in some mp schemes in RRTMG" "flag"
rconfig logical insert_init_cloud namelist,physics 1 .false. irh "insert_init_cloud" "Insert diagnostic initial cloud using icloud=3 method (Thompson)" "logical flag"

# The following two options are hooked into various microphysics schemes to allow for ensemble perturbations of CCN and hail/graupel PSDs - GAC (AFWA)
rconfig real ccn_conc namelist,physics 1 1.0E8 h "ccn_conc" "CCN concentration" "# m-3"
Expand Down
2 changes: 2 additions & 0 deletions dyn_em/depend.dyn_em
Original file line number Diff line number Diff line change
Expand Up @@ -194,11 +194,13 @@ module_initialize_real.o : \
nest_init_utils.o \
module_polarfft.o \
../share/module_llxy.o \
../frame/module_dm.o \
../frame/module_domain.o \
../frame/module_configure.o \
../frame/module_state_description.o \
../frame/module_timing.o \
../frame/module_dm.o \
../phys/module_radiation_driver.o \
../share/module_io_domain.o \
../share/module_model_constants.o \
../share/module_bc.o \
Expand Down
127 changes: 127 additions & 0 deletions dyn_em/module_initialize_real.F
Original file line number Diff line number Diff line change
Expand Up @@ -69,6 +69,8 @@ SUBROUTINE init_domain_rk ( grid &
)

USE module_optional_input
USE module_radiation_driver, ONLY: cal_cldfra3
USE module_dm, ONLY : wrf_dm_max_real
IMPLICIT NONE

! Input space and data. No gridded meteorological data has been stored, though.
Expand Down Expand Up @@ -121,6 +123,13 @@ SUBROUTINE init_domain_rk ( grid &
INTEGER :: auto_levels_opt
REAL :: max_dz, dzbot, dzstretch_s, dzstretch_u, z1, airmass

INTEGER:: i_end, j_end
REAL, ALLOCATABLE, DIMENSION(:):: temp_P, temp_T, temp_R, temp_Dz
REAL, ALLOCATABLE, DIMENSION(:):: temp_Qv, temp_Qc, temp_Qi, temp_Qs
REAL, ALLOCATABLE, DIMENSION(:):: temp_CF, temp_Nc, temp_Ni
REAL:: max_relh, temp_xland, gridkm
LOGICAL :: debug_flag = .FALSE.

REAL :: dclat

! INTEGER , PARAMETER :: nl_max = 1000
Expand Down Expand Up @@ -4370,6 +4379,124 @@ SUBROUTINE init_domain_rk ( grid &
enddo
ENDIF

!+---+-----------------------------------------------------------------+
!..We can consider that in circumstance of a 'cold start' we can make
!.. an attempt to insert some initial clouds to get a better starting
!.. radiation representation due to clouds using the icloud3 cloud fraction
!.. scheme.
!+---+-----------------------------------------------------------------+

if (config_flags%insert_init_cloud .AND. &
(P_QC .gt. PARAM_FIRST_SCALAR .AND. &
P_QI .gt. PARAM_FIRST_SCALAR)) then

ALLOCATE(temp_P(kts:kte-1))
ALLOCATE(temp_Dz(kts:kte-1))
ALLOCATE(temp_T(kts:kte-1))
ALLOCATE(temp_R(kts:kte-1))
ALLOCATE(temp_Qv(kts:kte-1))
ALLOCATE(temp_Qc(kts:kte-1))
ALLOCATE(temp_Nc(kts:kte-1))
ALLOCATE(temp_Qi(kts:kte-1))
ALLOCATE(temp_Ni(kts:kte-1))
ALLOCATE(temp_Qs(kts:kte-1))
ALLOCATE(temp_CF(kts:kte-1))

i_end = MIN(ite,ide-1)
j_end = MIN(jte,jde-1)
max_relh = 1.5
#if ( defined( DM_PARALLEL ) && ( ! defined( STUBMPI ) ) )
max_relh = wrf_dm_max_real ( MAXVAL(grid%u_1(its:i_end,:,jts:j_end)) )
#else
max_relh = MAXVAL ( grid%u_1(its:i_end,:,jts:j_end) )
#endif
max_relh = max_relh*0.01

gridkm = SQRT(config_flags%dx*config_flags%dy)*0.001

!..As it occurs up above, temporarily utilizing the v_1 variable,
!.. to hold temperature, which it does when time_loop=0.

IF ( internal_time_loop .GT. 1 ) THEN
grid%v_1 = grid%t_2+t0
CALL theta_to_t ( grid%v_1 , grid%p_hyd , p00 , &
ids , ide , jds , jde , kds , kde , &
ims , ime , jms , jme , kms , kme , &
its , ite , jts , jte , kts , kte )
ENDIF

do j = jts, j_end
do i = its, i_end
IF ( skip_middle_points_t ( ids , ide , jds , jde , i , j , em_width , hold_ups ) ) CYCLE
debug_flag = .false.
! if (i.eq.9 .and. j.eq.9) debug_flag = .true.

temp_xland = grid%xland(i,j)
if (grid%lakemask(i,j) .eq. 1) temp_xland = 1
do k = kts, kte-1
temp_Dz(k) = (grid%ph_2(i,k+1,j)+grid%phb(i,k+1,j) - (grid%ph_2(i,k,j)+grid%phb(i,k,j)))/g
temp_P(k) = grid%p_hyd(i,k,j)
temp_T(k) = grid%v_1(i,k,j) ! Around line num 1800 v_1 used to hold temperature.
temp_R(k) = 1./grid%alt(i,k,j)
temp_Qv(k) = moist(i,k,j,P_QV)
temp_Qc(k) = MAX(0., moist(i,k,j,P_QC))
temp_Qi(k) = MAX(0., moist(i,k,j,P_QI))
if (P_QS .gt. 1) then
temp_Qs(k) = MAX(0., moist(i,k,j,P_QS))
else
temp_Qs(k) = 0.
endif
if (P_QNI .gt. 1) then
temp_Ni(k) = MAX(0., scalar(i,k,j,P_QNI))
else
temp_Ni(k) = 0.
endif
if (P_QNC .gt. 1) then
temp_Nc(k) = MAX(0., scalar(i,k,j,P_QNC))
else
temp_Nc(k) = 0.
endif
temp_CF(k) = 0.
enddo

call cal_cldfra3(temp_CF,temp_Qv,temp_Qc,temp_Qi,temp_Qs, &
& temp_Dz, temp_P, temp_T, temp_xland, gridkm, &
& config_flags%insert_init_cloud, max_relh, &
& kts, kte-1, debug_flag)

do k = kts, kte-1
grid%cldfra(i,k,j) = temp_CF(k)
enddo

if (debug_flag) then
do k = kts, kte-1
write(*,*) ' DEBUG_column: ', temp_P(k), temp_T(k), temp_Qv(k), temp_Qc(k), temp_Qi(k), moist(i,k,j,P_QC), moist(i,k,j,P_QI)
enddo
endif

do k = kts, kte-1
moist(i,k,j,P_QV) = MAX(temp_Qv(k), moist(i,k,j,P_QV))
moist(i,k,j,P_QC) = temp_Qc(k)
moist(i,k,j,P_QI) = temp_Qi(k)
enddo

enddo
enddo

DEALLOCATE(temp_P)
DEALLOCATE(temp_Dz)
DEALLOCATE(temp_T)
DEALLOCATE(temp_R)
DEALLOCATE(temp_Qv)
DEALLOCATE(temp_Qc)
DEALLOCATE(temp_Nc)
DEALLOCATE(temp_Qi)
DEALLOCATE(temp_Ni)
DEALLOCATE(temp_Qs)
DEALLOCATE(temp_CF)

endif

!+---+-----------------------------------------------------------------+
!..Let us ensure that double-moment microphysics variables have numbers
!.. where there is mass. Currently doing this for Thompson-MP only, but
Expand Down
5 changes: 5 additions & 0 deletions run/README.namelist
Original file line number Diff line number Diff line change
Expand Up @@ -907,6 +907,11 @@ Namelist variables for controlling the adaptive time step option:
on threshold
3 = with cloud effect, and use cloud fraction option 3, based on
Sundqvist et al. (1989) (since 3.7)
insert_init_cloud = .false., ! Default
= .true., ! For use with cold start (zero cloud fields), this option will
use the icloud=3 scheme to produce initial cloud water and cloud
ice fields as well as ensure initial water vapor field matches
saturation, which retains clouds beyond the first few timesteps.
swrad_scat = 1. ! scattering tuning parameter (default 1. is 1.e-5 m2/kg)
(works for ra_sw_physics = 1 option only)
surface_input_source = 3, ! where landuse and soil category data come from:
Expand Down