diff --git a/Registry/Registry.EM_COMMON b/Registry/Registry.EM_COMMON index 383157360c..76f485293d 100644 --- a/Registry/Registry.EM_COMMON +++ b/Registry/Registry.EM_COMMON @@ -2551,6 +2551,7 @@ rconfig logical slucm_distributed_drag namelist,physics 1 .fals rconfig integer distributed_ahe_opt namelist,physics 1 0 rh "distributed_ahe_opt" "AHE handling: 0= no AHE, 1=add to first level temperature tendency, 2=add to surface sensible heat flux" "" rconfig integer num_soil_cat namelist,physics 1 16 - "num_soil_cat" "" "" rconfig integer mp_zero_out namelist,physics 1 0 - "mp_zero_out" "microphysics fields set to zero 0=no action taken, 1=all fields but Qv, 2=all fields including Qv" "flag" +rconfig integer mp_zero_out_all namelist,physics 1 0 - "mp_zero_out_all" "1= if mp_zero_out>0, then reproduce old behavior of also applying to scalar/chem/tracer" "flag" rconfig real mp_zero_out_thresh namelist,physics 1 1.e-8 - "mp_zero_out_thresh" "minimum threshold for non-Qv moist fields, below are set to zero" "kg/kg" rconfig real seaice_threshold namelist,physics 1 100 h "seaice_threshold" "tsk below which which water points are set to sea ice for slab scheme" "K" rconfig logical bmj_rad_feedback namelist,physics max_domains .false. - "if true include radiative effects of bmj clouds" "" diff --git a/dyn_em/solve_em.F b/dyn_em/solve_em.F index 39cdf85723..c5f47a50a6 100644 --- a/dyn_em/solve_em.F +++ b/dyn_em/solve_em.F @@ -4006,6 +4006,7 @@ END SUBROUTINE CMAQ_DRIVER jts = max(grid%j_start(ij),jds) jte = min(grid%j_end(ij),jde-1) + IF ( config_flags%mp_zero_out > 0 ) THEN CALL microphysics_zero_outb ( & moist , num_moist , config_flags , & ids, ide, jds, jde, kds, kde, & @@ -4013,6 +4014,7 @@ END SUBROUTINE CMAQ_DRIVER its, ite, jts, jte, & k_start , k_end ) + IF ( config_flags%mp_zero_out_all > 0 ) THEN CALL microphysics_zero_outb ( & scalar , num_scalar , config_flags , & ids, ide, jds, jde, kds, kde, & @@ -4021,7 +4023,7 @@ END SUBROUTINE CMAQ_DRIVER k_start , k_end ) CALL microphysics_zero_outb ( & - chem , num_chem , config_flags , & + chem , num_chem , config_flags , & ids, ide, jds, jde, kds, kde, & ims, ime, jms, jme, kms, kme, & its, ite, jts, jte, & @@ -4032,6 +4034,8 @@ END SUBROUTINE CMAQ_DRIVER ims, ime, jms, jme, kms, kme, & its, ite, jts, jte, & k_start , k_end ) + ENDIF + ENDIF IF ( config_flags%periodic_x ) THEN its = max(grid%i_start(ij),ids) @@ -4043,6 +4047,7 @@ END SUBROUTINE CMAQ_DRIVER jts = max(grid%j_start(ij),jds+sz) jte = min(grid%j_end(ij),jde-1-sz) + IF ( config_flags%mp_zero_out > 0 ) THEN CALL microphysics_zero_outa ( & moist , num_moist , config_flags , & ids, ide, jds, jde, kds, kde, & @@ -4050,6 +4055,7 @@ END SUBROUTINE CMAQ_DRIVER its, ite, jts, jte, & k_start , k_end ) + IF ( config_flags%mp_zero_out_all > 0 ) THEN CALL microphysics_zero_outa ( & scalar , num_scalar , config_flags , & ids, ide, jds, jde, kds, kde, & @@ -4070,6 +4076,8 @@ END SUBROUTINE CMAQ_DRIVER ims, ime, jms, jme, kms, kme, & its, ite, jts, jte, & k_start , k_end ) + ENDIF + ENDIF CALL moist_physics_finish_em( grid%t_2, grid%t_1, t0, grid%muts, th_phy, & grid%h_diabatic, dtm, & diff --git a/run/README.namelist b/run/README.namelist index 8985492b72..be2a30b145 100644 --- a/run/README.namelist +++ b/run/README.namelist @@ -539,11 +539,13 @@ Namelist variables for controlling the adaptive time step option: mp_zero_out = 0, ! no action taken, no adjustment to any moist field = 1, ! except for Qv, all other moist arrays are set to zero - if they fall below a critical value + if they fall below a critical value ('moist' array only) = 2, ! Qv is .GE. 0, all other moist arrays are set to zero - if they fall below a critical value + if they fall below a critical value ('moist' array only) mp_zero_out_thresh = 1.e-8 ! critical value for moist array threshold, below which moist arrays (except for Qv) are set to zero (kg/kg) + mp_zero_out_all = 0, ! if =1 and mp_zero_out>0, then reproduce old behavior and + apply threshold to scalar, chem, and tracer arrays gsfcgce_hail = 0 ! for running gsfcgce microphysics with graupel = 1 ! for running gsfcgce microphysics with hail diff --git a/wrftladj/solve_em_ad.F b/wrftladj/solve_em_ad.F index c2ec4f5eed..5acb79d4d8 100644 --- a/wrftladj/solve_em_ad.F +++ b/wrftladj/solve_em_ad.F @@ -4015,6 +4015,7 @@ SUBROUTINE solve_em_ad ( grid , config_flags & jts = max(grid%j_start(ij),jds) jte = min(grid%j_end(ij),jde-1) + IF ( config_flags%mp_zero_out > 0 ) THEN CALL microphysics_zero_outb ( & moist , num_moist , config_flags , & ids, ide, jds, jde, kds, kde, & @@ -4022,6 +4023,7 @@ SUBROUTINE solve_em_ad ( grid , config_flags & its, ite, jts, jte, & k_start , k_end ) + IF ( config_flags%mp_zero_out_all > 0 ) THEN CALL microphysics_zero_outb ( & scalar , num_scalar , config_flags , & ids, ide, jds, jde, kds, kde, & @@ -4042,6 +4044,8 @@ SUBROUTINE solve_em_ad ( grid , config_flags & ims, ime, jms, jme, kms, kme, & its, ite, jts, jte, & k_start , k_end ) + ENDIF + ENDIF IF ( config_flags%periodic_x ) THEN its = max(grid%i_start(ij),ids) @@ -4054,6 +4058,7 @@ SUBROUTINE solve_em_ad ( grid , config_flags & jte = min(grid%j_end(ij),jde-1-sz) CALL PUSHREAL8ARRAY ( moist, (ime-ims+1)*(kme-kms+1)*(jme-jms+1)*num_moist ) + IF ( config_flags%mp_zero_out > 0 ) THEN CALL microphysics_zero_outa ( & moist , num_moist , config_flags , & ids, ide, jds, jde, kds, kde, & @@ -4061,6 +4066,7 @@ SUBROUTINE solve_em_ad ( grid , config_flags & its, ite, jts, jte, & k_start , k_end ) + IF ( config_flags%mp_zero_out_all > 0 ) THEN CALL microphysics_zero_outa ( & scalar , num_scalar , config_flags , & ids, ide, jds, jde, kds, kde, & @@ -4081,6 +4087,8 @@ SUBROUTINE solve_em_ad ( grid , config_flags & ims, ime, jms, jme, kms, kme, & its, ite, jts, jte, & k_start , k_end ) + ENDIF + ENDIF CALL PUSHREAL8ARRAY ( grid%t_2, (ime-ims+1)*(kme-kms+1)*(jme-jms+1) ) CALL PUSHREAL8ARRAY ( grid%h_diabatic, (ime-ims+1)*(kme-kms+1)*(jme-jms+1) ) diff --git a/wrftladj/solve_em_tl.F b/wrftladj/solve_em_tl.F index a8c323a607..e669c47a8b 100644 --- a/wrftladj/solve_em_tl.F +++ b/wrftladj/solve_em_tl.F @@ -3654,6 +3654,7 @@ SUBROUTINE solve_em_tl ( grid , config_flags & jts = max(grid%j_start(ij),jds) jte = min(grid%j_end(ij),jde-1) + IF ( config_flags%mp_zero_out > 0 ) THEN CALL g_microphysics_zero_outb ( & moist , g_moist, num_moist , config_flags , & ids, ide, jds, jde, kds, kde, & @@ -3661,6 +3662,7 @@ SUBROUTINE solve_em_tl ( grid , config_flags & its, ite, jts, jte, & k_start , k_end ) + IF ( config_flags%mp_zero_out_all > 0 ) THEN CALL g_microphysics_zero_outb ( & scalar , g_scalar, num_scalar , config_flags , & ids, ide, jds, jde, kds, kde, & @@ -3682,6 +3684,8 @@ SUBROUTINE solve_em_tl ( grid , config_flags & ims, ime, jms, jme, kms, kme, & its, ite, jts, jte, & k_start , k_end ) + ENDIF + ENDIF IF ( config_flags%periodic_x ) THEN its = max(grid%i_start(ij),ids) @@ -3693,6 +3697,7 @@ SUBROUTINE solve_em_tl ( grid , config_flags & jts = max(grid%j_start(ij),jds+sz) jte = min(grid%j_end(ij),jde-1-sz) + IF ( config_flags%mp_zero_out > 0 ) THEN CALL g_microphysics_zero_outa ( & moist , g_moist, num_moist , config_flags , & ids, ide, jds, jde, kds, kde, & @@ -3700,6 +3705,7 @@ SUBROUTINE solve_em_tl ( grid , config_flags & its, ite, jts, jte, & k_start , k_end ) + IF ( config_flags%mp_zero_out_all > 0 ) THEN CALL g_microphysics_zero_outa ( & scalar ,g_scalar, num_scalar , config_flags , & ids, ide, jds, jde, kds, kde, & @@ -3721,6 +3727,8 @@ SUBROUTINE solve_em_tl ( grid , config_flags & ims, ime, jms, jme, kms, kme, & its, ite, jts, jte, & k_start , k_end ) + ENDIF + ENDIF CALL g_moist_physics_finish_em( grid%t_2, grid%g_t_2, grid%t_1, & t0, grid%muts, &