LCOV - code coverage report
Current view: top level - physics/clubb/src/CLUBB_core - model_flags.F90 (source / functions) Hit Total Coverage
Test: coverage.info Lines: 186 187 99.5 %
Date: 2024-12-17 17:57:11 Functions: 3 4 75.0 %

          Line data    Source code
       1             : !-----------------------------------------------------------------------
       2             : ! $Id$
       3             : !===============================================================================
       4             : module model_flags
       5             : 
       6             : ! Description:
       7             : !   Various model options that can be toggled off and on as desired.
       8             : 
       9             : ! References:
      10             : !   None
      11             : !-------------------------------------------------------------------------------
      12             : 
      13             :   implicit none
      14             : 
      15             :   public :: clubb_config_flags_type, set_default_clubb_config_flags, &
      16             :             initialize_clubb_config_flags_type, print_clubb_config_flags
      17             : 
      18             :   private ! Default Scope
      19             : 
      20             :   ! Options for the two component normal (double Gaussian) PDF type to use for
      21             :   ! the w, rt, and theta-l (or w, chi, and eta) portion of CLUBB's multivariate,
      22             :   ! two-component PDF.
      23             :   integer, parameter, public :: &
      24             :     iiPDF_ADG1 = 1,       & ! ADG1 PDF
      25             :     iiPDF_ADG2 = 2,       & ! ADG2 PDF
      26             :     iiPDF_3D_Luhar = 3,   & ! 3D Luhar PDF
      27             :     iiPDF_new = 4,        & ! new PDF
      28             :     iiPDF_TSDADG = 5,     & ! new TSDADG PDF
      29             :     iiPDF_LY93 = 6,       & ! Lewellen and Yoh (1993)
      30             :     iiPDF_new_hybrid = 7    ! new hybrid PDF
      31             : 
      32             :   ! Options for the placement of the call to CLUBB's PDF.
      33             :   integer, parameter, public :: &
      34             :     ipdf_pre_advance_fields   = 1,   & ! Call before advancing predictive fields
      35             :     ipdf_post_advance_fields  = 2,   & ! Call after advancing predictive fields
      36             :     ipdf_pre_post_advance_fields = 3   ! Call both before and after advancing
      37             :                                        ! predictive fields
      38             : 
      39             :   integer, parameter, public :: &
      40             :     lapack          = 1,  & ! Use lapack library for matrix solves
      41             :     penta_lu        = 2,  & ! Use penta_lu solver for 5 banded matrices
      42             :     tridiag_lu      = 2,  & ! Use tridiag_lu solver for 3 banded matrices
      43             :     penta_bicgstab  = 3     ! Use bicgstab to solve 5 banded matrices
      44             : 
      45             :   logical, parameter, public ::  & 
      46             :     l_pos_def            = .false., & ! Flux limiting positive definite scheme on rtm
      47             :     l_hole_fill          = .true.,  & ! Hole filling pos def scheme on wp2,up2,rtp2,etc
      48             :     l_clip_turb_adv      = .false.    ! Corrects thlm/rtm when w'th_l'/w'r_t' is clipped
      49             : 
      50             :   logical, parameter, public :: &
      51             : #ifdef BYTESWAP_IO
      52             :     l_byteswap_io = .true.,   & ! Don't use the native byte ordering in GrADS output
      53             : #else
      54             :     l_byteswap_io = .false.,  & ! Use the native byte ordering in GrADS output
      55             : #endif
      56             :     l_gamma_Skw   = .true.      ! Use a Skw dependent gamma parameter
      57             : 
      58             :   logical, parameter, public :: &
      59             :     l_use_boussinesq = .false.  ! Flag to use the Boussinesq form of the
      60             :                                 ! predictive equations.  The predictive
      61             :                                 ! equations are anelastic by default.
      62             : 
      63             :   logical, parameter, public :: &
      64             :     ! Flag to use explicit turbulent advection in the wp3 predictive equation.
      65             :     l_explicit_turbulent_adv_wp3 = .false.,  &
      66             :     ! Flag to use explicit turbulent advection in the wpxp predictive equation.
      67             :     l_explicit_turbulent_adv_wpxp = .false., &
      68             :     ! Flag to use explicit turbulent advection in the xp2 and xpyp predictive
      69             :     ! equations.
      70             :     l_explicit_turbulent_adv_xpyp = .false.
      71             : 
      72             :   ! Flag to advance xp3 using a simplified version of the d(xp3)/dt predictive
      73             :   ! equation or calculate it using a steady-state approximation.  When the flag
      74             :   ! is turned off, the Larson and Golaz (2005) ansatz to calculate xp3 after
      75             :   ! calculating Skx using the ansatz.
      76             :   logical, parameter, public :: &
      77             :     l_advance_xp3 = .false.
      78             : 
      79             :   logical, parameter, public :: &
      80             :     l_morr_xp2_mc = .false. ! Flag to include the effects of rain evaporation
      81             :                             ! on rtp2 and thlp2.  The moister (rt_1 or rt_2)
      82             :                             ! and colder (thl_1 or thl_2) will be fed into
      83             :                             ! the morrison microphys, and rain evaporation will
      84             :                             ! be allowed to increase variances
      85             : 
      86             :   logical, parameter, public :: &
      87             :     l_evaporate_cold_rcm = .false. ! Flag to evaporate cloud water at temperatures
      88             :                                    ! colder than -37C.  This is to be used for 
      89             :                                    ! Morrison microphysics, to prevent excess ice
      90             : 
      91             :   logical, parameter, public :: &
      92             :     l_cubic_interp = .false.      ! Flag to convert grid points with cubic monotonic
      93             :                                   ! spline interpolation as opposed to linear interpolation.
      94             : 
      95             :   logical, parameter, public :: &
      96             :     l_upwind_Kh_dp_term = .false.
      97             : 
      98             :   ! These are the integer constants that represent the various saturation
      99             :   ! formulas. To add a new formula, add an additional constant here,
     100             :   ! add the logic to check the strings for the new formula in clubb_core and
     101             :   ! this module, and add logic in saturation to call the proper function--
     102             :   ! the control logic will be based on these named constants.
     103             : 
     104             :   integer, parameter, public :: &
     105             :     saturation_bolton = 1, & ! Constant for Bolton approximations of saturation
     106             :     saturation_gfdl   = 2, & ! Constant for the GFDL approximation of saturation
     107             :     saturation_flatau = 3, & ! Constant for Flatau approximations of saturation
     108             :     saturation_lookup = 4    ! Use a lookup table for mixing length
     109             :                              ! saturation vapor pressure calculations
     110             : 
     111             :   !-----------------------------------------------------------------------------
     112             :   ! Options that can be changed at runtime 
     113             :   ! The default values are chosen below and overwritten if desired by the user
     114             :   !----------------------------------------------------------------------------- 
     115             : 
     116             :   ! Use a quintic polynomial in mono_cubic_interp
     117             :   logical, parameter, public :: &
     118             :     l_quintic_poly_interp = .false. 
     119             : 
     120             :   logical, parameter, public :: &
     121             :     l_silhs_rad = .false.    ! Resolve radiation over subcolumns using SILHS
     122             : 
     123             :   ! Previously used within 'ifdef GFDL'
     124             :   logical, parameter, public :: &
     125             :      I_sat_sphum = .false.       ! h1g, 2010-06-15
     126             : 
     127             :   ! Derived type to hold all configurable CLUBB flags
     128             :   type clubb_config_flags_type
     129             :     ! Note that all flags in this data type might also be modified in 
     130             :     ! corresponding .in files which would supercede the default values!
     131             :     
     132             :     integer :: &
     133             :       iiPDF_type,           & ! Selected option for the two-component normal
     134             :                               ! (double Gaussian) PDF type to use for the w, rt,
     135             :                               ! and theta-l (or w, chi, and eta) portion of
     136             :                               ! CLUBB's multivariate, two-component PDF.
     137             :       ipdf_call_placement,  & ! Selected option for the placement of the call to
     138             :                               ! CLUBB's PDF.
     139             :       penta_solve_method,   & ! Option to set the penta-diagonal matrix solving method
     140             :       tridiag_solve_method, & ! Option to set the tri-diagonal matrix solving method
     141             :       saturation_formula      ! Integer that stores the saturation formula to be used
     142             : 
     143             :     logical :: &
     144             :       l_use_precip_frac,            & ! Flag to use precipitation fraction in KK microphysics. The
     145             :                                       ! precipitation fraction is automatically set to 1 when this
     146             :                                       ! flag is turned off.
     147             :       l_predict_upwp_vpwp,          & ! Flag to predict <u'w'> and <v'w'> along with <u> and <v>
     148             :                                       ! alongside the advancement of <rt>, <w'rt'>, <thl>,
     149             :                                       ! <wpthlp>, <sclr>, and <w'sclr'> in subroutine
     150             :                                       ! advance_xm_wpxp.  Otherwise, <u'w'> and <v'w'> are still
     151             :                                       ! approximated by eddy diffusivity when <u> and <v> are
     152             :                                       ! advanced in subroutine advance_windm_edsclrm.
     153             :       l_min_wp2_from_corr_wx,       & ! Flag to base the threshold minimum value of wp2 on keeping
     154             :                                       ! the overall correlation of w and x (w and rt, as well as w
     155             :                                       ! and theta-l) within the limits of -max_mag_correlation_flux
     156             :                                       ! to max_mag_correlation_flux.
     157             :       l_min_xp2_from_corr_wx,       & ! Flag to base the threshold minimum value of xp2 (rtp2 and
     158             :                                       ! thlp2) on keeping the overall correlation of w and x within
     159             :                                       ! the limits of -max_mag_correlation_flux to
     160             :                                       ! max_mag_correlation_flux.
     161             :       l_C2_cloud_frac,              & ! Flag to use cloud fraction to adjust the value of the
     162             :                                       ! turbulent dissipation coefficient, C2.
     163             :       l_diffuse_rtm_and_thlm,       & ! Diffuses rtm and thlm
     164             :       l_stability_correct_Kh_N2_zm, & ! Divides Kh_N2_zm by a stability factor
     165             :       l_calc_thlp2_rad,             & ! Include the contribution of radiation to thlp2
     166             :       l_upwind_xpyp_ta,             & ! This flag determines whether we want to use an upwind
     167             :                                       ! differencing approximation rather than a centered
     168             :                                       ! differencing for turbulent or mean advection terms. It
     169             :                                       ! affects rtp2, thlp2, up2, vp2, sclrp2, rtpthlp, sclrprtp, &
     170             :                                       ! sclrpthlp.
     171             :       l_upwind_xm_ma,               & ! This flag determines whether we want to use an upwind
     172             :                                       ! differencing approximation rather than a centered
     173             :                                       ! differencing for turbulent or mean advection terms. It
     174             :                                       ! affects rtm, thlm, sclrm, um and vm.
     175             :       l_uv_nudge,                   & ! For wind speed nudging.
     176             :       l_rtm_nudge,                  & ! For rtm nudging
     177             :       l_tke_aniso,                  & ! For anisotropic turbulent kinetic energy, i.e.
     178             :                                       ! TKE = 1/2 (u'^2 + v'^2 + w'^2)
     179             :       l_vert_avg_closure,           & ! Use 2 calls to pdf_closure and the trapezoidal rule to
     180             :                                       ! compute the varibles that are output from high order
     181             :                                       ! closure
     182             :       l_trapezoidal_rule_zt,        & ! If true, the trapezoidal rule is called for the
     183             :                                       ! thermodynamic-level variables output from pdf_closure.
     184             :       l_trapezoidal_rule_zm,        & ! If true, the trapezoidal rule is called for three
     185             :                                       ! momentum-level variables - wpthvp, thlpthvp, and rtpthvp -
     186             :                                       ! output from pdf_closure.
     187             :       l_call_pdf_closure_twice,     & ! This logical flag determines whether or not to call
     188             :                                       ! subroutine pdf_closure twice.  If true, pdf_closure is
     189             :                                       ! called first on thermodynamic levels and then on momentum
     190             :                                       ! levels so that each variable is computed on its native
     191             :                                       ! level.  If false, pdf_closure is only called on
     192             :                                       ! thermodynamic levels, and variables which belong on
     193             :                                       ! momentum levels are interpolated.
     194             :       l_standard_term_ta,           & ! Use the standard discretization for the turbulent advection
     195             :                                       ! terms.  Setting to .false. means that a_1 and a_3 are
     196             :                                       ! pulled outside of the derivative in
     197             :                                       ! advance_wp2_wp3_module.F90 and in
     198             :                                       ! advance_xp2_xpyp_module.F90.
     199             :       l_partial_upwind_wp3,         & ! Flag to use an "upwind" discretization rather
     200             :                                       ! than a centered discretization for the portion
     201             :                                       ! of the wp3 turbulent advection term for ADG1
     202             :                                       ! that is linearized in terms of wp3<t+1>.
     203             :                                       ! (Requires ADG1 PDF and l_standard_term_ta).
     204             :       l_godunov_upwind_wpxp_ta,     & ! This flag determines whether we want to use an upwind
     205             :                                       ! differencing approximation rather than a centered 
     206             :                                       ! differencing for turbulent advection terms. 
     207             :                                       ! It affects  wpxp only.
     208             :       l_godunov_upwind_xpyp_ta,     & ! This flag determines whether we want to use an upwind
     209             :                                       ! differencing approximation rather than a centered 
     210             :                                       ! differencing for turbulent advection terms. It affects
     211             :                                       ! xpyp only.
     212             :       l_use_cloud_cover,            & ! Use cloud_cover and rcm_in_layer to help boost cloud_frac
     213             :                                       ! and rcm to help increase cloudiness at coarser grid
     214             :                                       ! resolutions.
     215             :       l_diagnose_correlations,      & ! Diagnose correlations instead of using fixed ones
     216             :       l_calc_w_corr,                & ! Calculate the correlations between w and the hydrometeors
     217             :       l_const_Nc_in_cloud,          & ! Use a constant cloud droplet conc. within cloud (K&K)
     218             :       l_fix_w_chi_eta_correlations, & ! Use a fixed correlation for s and t Mellor(chi/eta)
     219             :       l_stability_correct_tau_zm,   & ! Use tau_N2_zm instead of tau_zm in wpxp_pr1 stability
     220             :                                       ! correction
     221             :       l_damp_wp2_using_em,          & ! In wp2 equation, use a dissipation formula of
     222             :                                       ! -(2/3)*em/tau_zm, as in Bougeault (1981)
     223             :       l_do_expldiff_rtm_thlm,       & ! Diffuse rtm and thlm explicitly
     224             :       l_Lscale_plume_centered,      & ! Alternate that uses the PDF to compute the perturbed values
     225             :       l_diag_Lscale_from_tau,       & ! First diagnose dissipation time tau, and then diagnose the
     226             :                                       ! mixing length scale as Lscale = tau * tke
     227             :       l_use_C7_Richardson,          & ! Parameterize C7 based on Richardson number
     228             :       l_use_C11_Richardson,         & ! Parameterize C11 and C16 based on Richardson number
     229             :       l_use_shear_Richardson,       & ! Use shear in the calculation of Richardson number
     230             :       l_brunt_vaisala_freq_moist,   & ! Use a different formula for the Brunt-Vaisala frequency in
     231             :                                       ! saturated atmospheres (from Durran and Klemp, 1982)
     232             :       l_use_thvm_in_bv_freq,        & ! Use thvm in the calculation of Brunt-Vaisala frequency
     233             :       l_rcm_supersat_adj,           & ! Add excess supersaturated vapor to cloud water
     234             :       l_damp_wp3_Skw_squared,       & ! Set damping on wp3 to use Skw^2 rather than Skw^4
     235             :       l_prescribed_avg_deltaz,      & ! used in adj_low_res_nu. If .true., avg_deltaz = deltaz
     236             :       l_lmm_stepping,               & ! Apply Linear Multistep Method (LMM) Stepping
     237             :       l_e3sm_config,                & ! Run model with E3SM settings
     238             :       l_vary_convect_depth,         & ! Flag used to calculate convective velocity using
     239             :                                       ! a variable estimate of layer depth based on the depth
     240             :                                       ! over which wpthlp is positive near the ground when true
     241             :                                       ! More information can be found by
     242             :                                       ! Looking at issue #905 on the clubb repo
     243             :       l_use_tke_in_wp3_pr_turb_term, &! Use TKE formulation for wp3 pr_turb term
     244             :       l_use_tke_in_wp2_wp3_K_dfsn,  & ! Use TKE in eddy diffusion for wp2 and wp3
     245             :       l_use_wp3_lim_with_smth_Heaviside, & ! Flag to activate mods on wp3 limiters for conv test
     246             :       l_smooth_Heaviside_tau_wpxp,  & ! Use smoothed Heaviside 'Peskin' function
     247             :                                       ! in the calculation of H_invrs_tau_wpxp_N2
     248             :                                       ! in src/CLUBB_core/mixing_length.F90
     249             :       l_modify_limiters_for_cnvg_test, & ! Flag to activate mods on limiters for conv test
     250             :       l_enable_relaxed_clipping,    & ! Flag to relax clipping on wpxp in
     251             :                                       ! xm_wpxp_clipping_and_stats
     252             :       l_linearize_pbl_winds,        & ! Code to linearize PBL winds
     253             :       l_mono_flux_lim_thlm,         & ! Flag to turn on monotonic flux limiter for thlm
     254             :       l_mono_flux_lim_rtm,          & ! Flag to turn on monotonic flux limiter for rtm
     255             :       l_mono_flux_lim_um,           & ! Flag to turn on monotonic flux limiter for um
     256             :       l_mono_flux_lim_vm,           & ! Flag to turn on monotonic flux limiter for vm
     257             :       l_mono_flux_lim_spikefix,     & ! Flag to implement monotonic flux limiter code that 
     258             :                                       ! eliminates spurious drying tendencies at model top
     259             :       l_host_applies_sfc_fluxes       ! Use to determine whether a host model has already applied the surface flux,
     260             :                                       ! to avoid double counting.
     261             : 
     262             :   end type clubb_config_flags_type
     263             : 
     264             :   contains
     265             : 
     266             : !===============================================================================
     267        1536 :   subroutine set_default_clubb_config_flags( iiPDF_type, &
     268             :                                              ipdf_call_placement, &
     269             :                                              penta_solve_method, &
     270             :                                              tridiag_solve_method, &
     271             :                                              saturation_formula, &
     272             :                                              l_use_precip_frac, &
     273             :                                              l_predict_upwp_vpwp, &
     274             :                                              l_min_wp2_from_corr_wx, &
     275             :                                              l_min_xp2_from_corr_wx, &
     276             :                                              l_C2_cloud_frac, &
     277             :                                              l_diffuse_rtm_and_thlm, &
     278             :                                              l_stability_correct_Kh_N2_zm, &
     279             :                                              l_calc_thlp2_rad, &
     280             :                                              l_upwind_xpyp_ta, &
     281             :                                              l_upwind_xm_ma, &
     282             :                                              l_uv_nudge, &
     283             :                                              l_rtm_nudge, &
     284             :                                              l_tke_aniso, &
     285             :                                              l_vert_avg_closure, &
     286             :                                              l_trapezoidal_rule_zt, &
     287             :                                              l_trapezoidal_rule_zm, &
     288             :                                              l_call_pdf_closure_twice, &
     289             :                                              l_standard_term_ta, &
     290             :                                              l_partial_upwind_wp3, &
     291             :                                              l_godunov_upwind_wpxp_ta, &
     292             :                                              l_godunov_upwind_xpyp_ta, &
     293             :                                              l_use_cloud_cover, &
     294             :                                              l_diagnose_correlations, &
     295             :                                              l_calc_w_corr, &
     296             :                                              l_const_Nc_in_cloud, &
     297             :                                              l_fix_w_chi_eta_correlations, &
     298             :                                              l_stability_correct_tau_zm, &
     299             :                                              l_damp_wp2_using_em, &
     300             :                                              l_do_expldiff_rtm_thlm, &
     301             :                                              l_Lscale_plume_centered, &
     302             :                                              l_diag_Lscale_from_tau, &
     303             :                                              l_use_C7_Richardson, &
     304             :                                              l_use_C11_Richardson, &
     305             :                                              l_use_shear_Richardson, &
     306             :                                              l_brunt_vaisala_freq_moist, &
     307             :                                              l_use_thvm_in_bv_freq, &
     308             :                                              l_rcm_supersat_adj, &
     309             :                                              l_damp_wp3_Skw_squared, &
     310             :                                              l_prescribed_avg_deltaz, &
     311             :                                              l_lmm_stepping, &
     312             :                                              l_e3sm_config, &
     313             :                                              l_vary_convect_depth, &
     314             :                                              l_use_tke_in_wp3_pr_turb_term, &
     315             :                                              l_use_tke_in_wp2_wp3_K_dfsn, &
     316             :                                              l_use_wp3_lim_with_smth_Heaviside, &
     317             :                                              l_smooth_Heaviside_tau_wpxp, &
     318             :                                              l_modify_limiters_for_cnvg_test, &
     319             :                                              l_enable_relaxed_clipping, &
     320             :                                              l_linearize_pbl_winds, &
     321             :                                              l_mono_flux_lim_thlm, &
     322             :                                              l_mono_flux_lim_rtm, &
     323             :                                              l_mono_flux_lim_um, &
     324             :                                              l_mono_flux_lim_vm, &
     325             :                                              l_mono_flux_lim_spikefix, &
     326             :                                              l_host_applies_sfc_fluxes )
     327             : 
     328             : ! Description:
     329             : !   Sets all CLUBB flags to a default setting.
     330             : 
     331             : ! References:
     332             : !   None
     333             : !-------------------------------------------------------------------------------
     334             : 
     335             :     implicit none
     336             : 
     337             :     ! Output variables
     338             :     integer, intent(out) :: &
     339             :       iiPDF_type,           & ! Selected option for the two-component normal
     340             :                               ! (double Gaussian) PDF type to use for the w, rt,
     341             :                               ! and theta-l (or w, chi, and eta) portion of
     342             :                               ! CLUBB's multivariate, two-component PDF.
     343             :       ipdf_call_placement,  & ! Selected option for the placement of the call to
     344             :                               ! CLUBB's PDF.
     345             :       penta_solve_method,   & ! Option to set the penta-diagonal matrix solving method
     346             :       tridiag_solve_method, & ! Option to set the tri-diagonal matrix solving method
     347             :       saturation_formula      ! Integer that stores the saturation formula to be used
     348             : 
     349             :     logical, intent(out) :: &
     350             :       l_use_precip_frac,            & ! Flag to use precipitation fraction in KK microphysics. The
     351             :                                       ! precipitation fraction is automatically set to 1 when this
     352             :                                       ! flag is turned off.
     353             :       l_predict_upwp_vpwp,          & ! Flag to predict <u'w'> and <v'w'> along with <u> and <v>
     354             :                                       ! alongside the advancement of <rt>, <w'rt'>, <thl>,
     355             :                                       ! <wpthlp>, <sclr>, and <w'sclr'> in subroutine
     356             :                                       ! advance_xm_wpxp.  Otherwise, <u'w'> and <v'w'> are still
     357             :                                       ! approximated by eddy diffusivity when <u> and <v> are
     358             :                                       ! advanced in subroutine advance_windm_edsclrm.
     359             :       l_min_wp2_from_corr_wx,       & ! Flag to base the threshold minimum value of wp2 on keeping
     360             :                                       ! the overall correlation of w and x (w and rt, as well as w
     361             :                                       ! and theta-l) within the limits of -max_mag_correlation_flux
     362             :                                       ! to max_mag_correlation_flux.
     363             :       l_min_xp2_from_corr_wx,       & ! Flag to base the threshold minimum value of xp2 (rtp2 and
     364             :                                       ! thlp2) on keeping the overall correlation of w and x within
     365             :                                       ! the limits of -max_mag_correlation_flux to
     366             :                                       ! max_mag_correlation_flux.
     367             :       l_C2_cloud_frac,              & ! Flag to use cloud fraction to adjust the value of the
     368             :                                       ! turbulent dissipation coefficient, C2.
     369             :       l_diffuse_rtm_and_thlm,       & ! Diffuses rtm and thlm
     370             :       l_stability_correct_Kh_N2_zm, & ! Divides Kh_N2_zm by a stability factor
     371             :       l_calc_thlp2_rad,             & ! Include the contribution of radiation to thlp2
     372             :       l_upwind_xpyp_ta,             & ! This flag determines whether we want to use an upwind
     373             :                                       ! differencing approximation rather than a centered
     374             :                                       ! differencing for turbulent or mean advection terms. It
     375             :                                       ! affects rtp2, thlp2, up2, vp2, sclrp2, rtpthlp, sclrprtp, &
     376             :                                       ! sclrpthlp.
     377             :       l_upwind_xm_ma,               & ! This flag determines whether we want to use an upwind
     378             :                                       ! differencing approximation rather than a centered
     379             :                                       ! differencing for turbulent or mean advection terms. It
     380             :                                       ! affects rtm, thlm, sclrm, um and vm.
     381             :       l_uv_nudge,                   & ! For wind speed nudging.
     382             :       l_rtm_nudge,                  & ! For rtm nudging
     383             :       l_tke_aniso,                  & ! For anisotropic turbulent kinetic energy, i.e.
     384             :                                       ! TKE = 1/2 (u'^2 + v'^2 + w'^2)
     385             :       l_vert_avg_closure,           & ! Use 2 calls to pdf_closure and the trapezoidal rule to
     386             :                                       ! compute the varibles that are output from high order
     387             :                                       ! closure
     388             :       l_trapezoidal_rule_zt,        & ! If true, the trapezoidal rule is called for the
     389             :                                       ! thermodynamic-level variables output from pdf_closure.
     390             :       l_trapezoidal_rule_zm,        & ! If true, the trapezoidal rule is called for three
     391             :                                       ! momentum-level variables - wpthvp, thlpthvp, and rtpthvp -
     392             :                                       ! output from pdf_closure.
     393             :       l_call_pdf_closure_twice,     & ! This logical flag determines whether or not to call
     394             :                                       ! subroutine pdf_closure twice.  If true, pdf_closure is
     395             :                                       ! called first on thermodynamic levels and then on momentum
     396             :                                       ! levels so that each variable is computed on its native
     397             :                                       ! level.  If false, pdf_closure is only called on
     398             :                                       ! thermodynamic levels, and variables which belong on
     399             :                                       ! momentum levels are interpolated.
     400             :       l_standard_term_ta,           & ! Use the standard discretization for the turbulent advection
     401             :                                       ! terms.  Setting to .false. means that a_1 and a_3 are
     402             :                                       ! pulled outside of the derivative in
     403             :                                       ! advance_wp2_wp3_module.F90 and in
     404             :                                       ! advance_xp2_xpyp_module.F90.
     405             :       l_partial_upwind_wp3,         & ! Flag to use an "upwind" discretization rather
     406             :                                       ! than a centered discretization for the portion
     407             :                                       ! of the wp3 turbulent advection term for ADG1
     408             :                                       ! that is linearized in terms of wp3<t+1>.
     409             :                                       ! (Requires ADG1 PDF and l_standard_term_ta).
     410             :       l_godunov_upwind_wpxp_ta,     & ! This flag determines whether we want to use an upwind
     411             :                                       ! differencing approximation rather than a centered 
     412             :                                       ! differencing for turbulent advection terms. 
     413             :                                       ! It affects  wpxp only.
     414             :       l_godunov_upwind_xpyp_ta,     & ! This flag determines whether we want to use an upwind
     415             :                                       ! differencing approximation rather than a centered 
     416             :                                       ! differencing for turbulent advection terms. It affects
     417             :                                       ! xpyp only.
     418             :       l_use_cloud_cover,            & ! Use cloud_cover and rcm_in_layer to help boost cloud_frac
     419             :                                       ! and rcm to help increase cloudiness at coarser grid
     420             :                                       ! resolutions.
     421             :       l_diagnose_correlations,      & ! Diagnose correlations instead of using fixed ones
     422             :       l_calc_w_corr,                & ! Calculate the correlations between w and the hydrometeors
     423             :       l_const_Nc_in_cloud,          & ! Use a constant cloud droplet conc. within cloud (K&K)
     424             :       l_fix_w_chi_eta_correlations, & ! Use a fixed correlation for s and t Mellor(chi/eta)
     425             :       l_stability_correct_tau_zm,   & ! Use tau_N2_zm instead of tau_zm in wpxp_pr1 stability
     426             :                                       ! correction
     427             :       l_damp_wp2_using_em,          & ! In wp2 equation, use a dissipation formula of
     428             :                                       ! -(2/3)*em/tau_zm, as in Bougeault (1981)
     429             :       l_do_expldiff_rtm_thlm,       & ! Diffuse rtm and thlm explicitly
     430             :       l_Lscale_plume_centered,      & ! Alternate that uses the PDF to compute the perturbed values
     431             :       l_diag_Lscale_from_tau,       & ! First diagnose dissipation time tau, and then diagnose the
     432             :                                       ! mixing length scale as Lscale = tau * tke
     433             :       l_use_C7_Richardson,          & ! Parameterize C7 based on Richardson number
     434             :       l_use_C11_Richardson,         & ! Parameterize C11 and C16 based on Richardson number
     435             :       l_use_shear_Richardson,       & ! Use shear in the calculation of Richardson number
     436             :       l_brunt_vaisala_freq_moist,   & ! Use a different formula for the Brunt-Vaisala frequency in
     437             :                                       ! saturated atmospheres (from Durran and Klemp, 1982)
     438             :       l_use_thvm_in_bv_freq,        & ! Use thvm in the calculation of Brunt-Vaisala frequency
     439             :       l_rcm_supersat_adj,           & ! Add excess supersaturated vapor to cloud water
     440             :       l_damp_wp3_Skw_squared,       & ! Set damping on wp3 to use Skw^2 rather than Skw^4
     441             :       l_prescribed_avg_deltaz,      & ! used in adj_low_res_nu. If .true., avg_deltaz = deltaz
     442             :       l_lmm_stepping,               & ! Apply Linear Multistep Method (LMM) Stepping
     443             :       l_e3sm_config,                & ! Run model with E3SM settings
     444             :       l_vary_convect_depth,         & ! Flag used to calculate convective velocity using
     445             :                                       ! a variable estimate of layer depth based on the depth
     446             :                                       ! over which wpthlp is positive near the ground when true
     447             :                                       ! More information can be found by
     448             :                                       ! Looking at issue #905 on the clubb repo
     449             :       l_use_tke_in_wp3_pr_turb_term,& ! Use TKE formulation for wp3 pr_turb term
     450             :       l_use_tke_in_wp2_wp3_K_dfsn,  & ! Use TKE in eddy diffusion for wp2 and wp3
     451             :       l_use_wp3_lim_with_smth_Heaviside, & ! Flag to activate mods on wp3 limiters for conv test
     452             :       l_smooth_Heaviside_tau_wpxp,  & ! Use smoothed Heaviside 'Peskin' function
     453             :                                       ! in the calculation of H_invrs_tau_wpxp_N2
     454             :                                       ! in src/CLUBB_core/mixing_length.F90
     455             :       l_modify_limiters_for_cnvg_test, & ! Flag to activate mods on limiters for conv test
     456             :       l_enable_relaxed_clipping,    & ! Flag to relax clipping on wpxp in
     457             :                                       ! xm_wpxp_clipping_and_stats
     458             :       l_linearize_pbl_winds,        & ! Code to linearize PBL winds
     459             :       l_mono_flux_lim_thlm,         & ! Flag to turn on monotonic flux limiter for thlm
     460             :       l_mono_flux_lim_rtm,          & ! Flag to turn on monotonic flux limiter for rtm
     461             :       l_mono_flux_lim_um,           & ! Flag to turn on monotonic flux limiter for um
     462             :       l_mono_flux_lim_vm,           & ! Flag to turn on monotonic flux limiter for vm
     463             :       l_mono_flux_lim_spikefix,     & ! Flag to implement monotonic flux limiter code that
     464             :                                       ! eliminates spurious drying tendencies at model top
     465             :       l_host_applies_sfc_fluxes       ! Use to determine whether a host model has already applied the surface flux,
     466             :                                       ! to avoid double counting.
     467             : 
     468             : !-----------------------------------------------------------------------
     469             :     ! Begin code
     470             :     ! WARNING: THE DEFAULT VALUES OF THE FLAGS BELOW MAY BE OVERWRITTEN
     471             :     !    BY NAMELIST VALUES FROM, E.G., configurable_clubb_flags_nl!!!
     472             : 
     473        1536 :     iiPDF_type = iiPDF_ADG1
     474        1536 :     ipdf_call_placement = ipdf_post_advance_fields
     475        1536 :     penta_solve_method = lapack
     476        1536 :     tridiag_solve_method = lapack
     477        1536 :     saturation_formula = saturation_flatau
     478        1536 :     l_use_precip_frac = .true.
     479        1536 :     l_predict_upwp_vpwp = .true.
     480        1536 :     l_min_wp2_from_corr_wx = .true.
     481        1536 :     l_min_xp2_from_corr_wx = .true.
     482        1536 :     l_C2_cloud_frac = .false.
     483        1536 :     l_diffuse_rtm_and_thlm = .false.
     484        1536 :     l_stability_correct_Kh_N2_zm = .false.
     485        1536 :     l_calc_thlp2_rad = .true.
     486        1536 :     l_upwind_xpyp_ta = .true.
     487        1536 :     l_upwind_xm_ma = .true.
     488        1536 :     l_uv_nudge = .false.
     489        1536 :     l_rtm_nudge = .false.
     490        1536 :     l_tke_aniso = .true.
     491        1536 :     l_vert_avg_closure  = .false.
     492        1536 :     l_trapezoidal_rule_zt = .false.
     493        1536 :     l_trapezoidal_rule_zm = .false.
     494        1536 :     l_call_pdf_closure_twice = .false.
     495        1536 :     l_standard_term_ta = .false.
     496        1536 :     l_partial_upwind_wp3 = .false.
     497        1536 :     l_godunov_upwind_wpxp_ta = .false.
     498        1536 :     l_godunov_upwind_xpyp_ta = .false.
     499        1536 :     l_use_cloud_cover = .false.
     500        1536 :     l_diagnose_correlations = .false.
     501        1536 :     l_calc_w_corr = .false.
     502        1536 :     l_const_Nc_in_cloud = .false.
     503        1536 :     l_fix_w_chi_eta_correlations = .true.
     504        1536 :     l_stability_correct_tau_zm = .false.
     505        1536 :     l_damp_wp2_using_em = .true.
     506        1536 :     l_do_expldiff_rtm_thlm = .false.
     507        1536 :     l_Lscale_plume_centered = .false.
     508        1536 :     l_diag_Lscale_from_tau = .true.
     509        1536 :     l_use_C7_Richardson = .true.
     510        1536 :     l_use_C11_Richardson = .false.
     511        1536 :     l_use_shear_Richardson = .false.
     512        1536 :     l_brunt_vaisala_freq_moist = .false.
     513        1536 :     l_use_thvm_in_bv_freq = .false.
     514        1536 :     l_rcm_supersat_adj = .true.
     515        1536 :     l_damp_wp3_Skw_squared = .true.
     516             : #ifdef GFDL
     517             :     l_prescribed_avg_deltaz = .true.
     518             : #else
     519        1536 :     l_prescribed_avg_deltaz = .false.
     520             : #endif
     521        1536 :     l_lmm_stepping = .false.
     522        1536 :     l_e3sm_config = .false.
     523        1536 :     l_vary_convect_depth = .false.
     524        1536 :     l_use_tke_in_wp3_pr_turb_term = .true.
     525        1536 :     l_use_tke_in_wp2_wp3_K_dfsn = .false.
     526        1536 :     l_use_wp3_lim_with_smth_Heaviside = .false.
     527        1536 :     l_smooth_Heaviside_tau_wpxp = .false.
     528        1536 :     l_modify_limiters_for_cnvg_test = .false.
     529        1536 :     l_enable_relaxed_clipping = .false.
     530        1536 :     l_linearize_pbl_winds = .false.
     531        1536 :     l_mono_flux_lim_thlm = .true.
     532        1536 :     l_mono_flux_lim_rtm = .true.
     533        1536 :     l_mono_flux_lim_um = .true.
     534        1536 :     l_mono_flux_lim_vm = .true.
     535        1536 :     l_mono_flux_lim_spikefix = .true.
     536        1536 :     l_host_applies_sfc_fluxes = .false.
     537             : 
     538        1536 :     return
     539             :   end subroutine set_default_clubb_config_flags
     540             : 
     541             : !===============================================================================
     542        1536 :   subroutine initialize_clubb_config_flags_type( iiPDF_type,          &
     543             :                                                  ipdf_call_placement, &
     544             :                                                  penta_solve_method, &
     545             :                                                  tridiag_solve_method, &
     546             :                                                  saturation_formula, &
     547             :                                                  l_use_precip_frac, &
     548             :                                                  l_predict_upwp_vpwp, &
     549             :                                                  l_min_wp2_from_corr_wx, &
     550             :                                                  l_min_xp2_from_corr_wx, &
     551             :                                                  l_C2_cloud_frac, &
     552             :                                                  l_diffuse_rtm_and_thlm, &
     553             :                                                  l_stability_correct_Kh_N2_zm, &
     554             :                                                  l_calc_thlp2_rad, &
     555             :                                                  l_upwind_xpyp_ta, &
     556             :                                                  l_upwind_xm_ma, &
     557             :                                                  l_uv_nudge, &
     558             :                                                  l_rtm_nudge, &
     559             :                                                  l_tke_aniso, &
     560             :                                                  l_vert_avg_closure, &
     561             :                                                  l_trapezoidal_rule_zt, &
     562             :                                                  l_trapezoidal_rule_zm, &
     563             :                                                  l_call_pdf_closure_twice, &
     564             :                                                  l_standard_term_ta, &
     565             :                                                  l_partial_upwind_wp3, &
     566             :                                                  l_godunov_upwind_wpxp_ta, &
     567             :                                                  l_godunov_upwind_xpyp_ta, &
     568             :                                                  l_use_cloud_cover, &
     569             :                                                  l_diagnose_correlations, &
     570             :                                                  l_calc_w_corr, &
     571             :                                                  l_const_Nc_in_cloud, &
     572             :                                                  l_fix_w_chi_eta_correlations, &
     573             :                                                  l_stability_correct_tau_zm, &
     574             :                                                  l_damp_wp2_using_em, &
     575             :                                                  l_do_expldiff_rtm_thlm, &
     576             :                                                  l_Lscale_plume_centered, &
     577             :                                                  l_diag_Lscale_from_tau, &
     578             :                                                  l_use_C7_Richardson, &
     579             :                                                  l_use_C11_Richardson, &
     580             :                                                  l_use_shear_Richardson, &
     581             :                                                  l_brunt_vaisala_freq_moist, &
     582             :                                                  l_use_thvm_in_bv_freq, &
     583             :                                                  l_rcm_supersat_adj, &
     584             :                                                  l_damp_wp3_Skw_squared, &
     585             :                                                  l_prescribed_avg_deltaz, &
     586             :                                                  l_lmm_stepping, &
     587             :                                                  l_e3sm_config, &
     588             :                                                  l_vary_convect_depth, &
     589             :                                                  l_use_tke_in_wp3_pr_turb_term, &
     590             :                                                  l_use_tke_in_wp2_wp3_K_dfsn, &
     591             :                                                  l_use_wp3_lim_with_smth_Heaviside, &
     592             :                                                  l_smooth_Heaviside_tau_wpxp, &
     593             :                                                  l_modify_limiters_for_cnvg_test, &
     594             :                                                  l_enable_relaxed_clipping, &
     595             :                                                  l_linearize_pbl_winds, &
     596             :                                                  l_mono_flux_lim_thlm, &
     597             :                                                  l_mono_flux_lim_rtm, &
     598             :                                                  l_mono_flux_lim_um, &
     599             :                                                  l_mono_flux_lim_vm, &
     600             :                                                  l_mono_flux_lim_spikefix, &
     601             :                                                  l_host_applies_sfc_fluxes, &
     602             :                                                  clubb_config_flags )
     603             : 
     604             : ! Description:
     605             : !   Initialize the clubb_config_flags_type.
     606             : 
     607             : ! References:
     608             : !   None
     609             : !-------------------------------------------------------------------------------
     610             : 
     611             :     implicit none
     612             : 
     613             :     ! Input variables
     614             :     integer, intent(in) :: &
     615             :       iiPDF_type,           & ! Selected option for the two-component normal
     616             :                               ! (double Gaussian) PDF type to use for the w, rt,
     617             :                               ! and theta-l (or w, chi, and eta) portion of
     618             :                               ! CLUBB's multivariate, two-component PDF.
     619             :       ipdf_call_placement,  & ! Selected option for the placement of the call to
     620             :                               ! CLUBB's PDF.
     621             :       penta_solve_method,   & ! Option to set the penta-diagonal matrix solving method
     622             :       tridiag_solve_method, & ! Option to set the tri-diagonal matrix solving method
     623             :       saturation_formula      ! Integer that stores the saturation formula to be used
     624             : 
     625             :     logical, intent(in) :: &
     626             :       l_use_precip_frac,            & ! Flag to use precipitation fraction in KK microphysics. The
     627             :                                       ! precipitation fraction is automatically set to 1 when this
     628             :                                       ! flag is turned off.
     629             :       l_predict_upwp_vpwp,          & ! Flag to predict <u'w'> and <v'w'> along with <u> and <v>
     630             :                                       ! alongside the advancement of <rt>, <w'rt'>, <thl>,
     631             :                                       ! <wpthlp>, <sclr>, and <w'sclr'> in subroutine
     632             :                                       ! advance_xm_wpxp.  Otherwise, <u'w'> and <v'w'> are still
     633             :                                       ! approximated by eddy diffusivity when <u> and <v> are
     634             :                                       ! advanced in subroutine advance_windm_edsclrm.
     635             :       l_min_wp2_from_corr_wx,       & ! Flag to base the threshold minimum value of wp2 on keeping
     636             :                                       ! the overall correlation of w and x (w and rt, as well as w
     637             :                                       ! and theta-l) within the limits of -max_mag_correlation_flux
     638             :                                       ! to max_mag_correlation_flux.
     639             :       l_min_xp2_from_corr_wx,       & ! Flag to base the threshold minimum value of xp2 (rtp2 and
     640             :                                       ! thlp2) on keeping the overall correlation of w and x within
     641             :                                       ! the limits of -max_mag_correlation_flux to
     642             :                                       ! max_mag_correlation_flux.
     643             :       l_C2_cloud_frac,              & ! Flag to use cloud fraction to adjust the value of the
     644             :                                       ! turbulent dissipation coefficient, C2.
     645             :       l_diffuse_rtm_and_thlm,       & ! Diffuses rtm and thlm
     646             :       l_stability_correct_Kh_N2_zm, & ! Divides Kh_N2_zm by a stability factor
     647             :       l_calc_thlp2_rad,             & ! Include the contribution of radiation to thlp2
     648             :       l_upwind_xpyp_ta,             & ! This flag determines whether we want to use an upwind
     649             :                                       ! differencing approximation rather than a centered
     650             :                                       ! differencing for turbulent or mean advection terms. It
     651             :                                       ! affects rtp2, thlp2, up2, vp2, sclrp2, rtpthlp, sclrprtp, &
     652             :                                       ! sclrpthlp.
     653             :       l_upwind_xm_ma,               & ! This flag determines whether we want to use an upwind
     654             :                                       ! differencing approximation rather than a centered
     655             :                                       ! differencing for turbulent or mean advection terms. It
     656             :                                       ! affects rtm, thlm, sclrm, um and vm.
     657             :       l_uv_nudge,                   & ! For wind speed nudging.
     658             :       l_rtm_nudge,                  & ! For rtm nudging
     659             :       l_tke_aniso,                  & ! For anisotropic turbulent kinetic energy, i.e.
     660             :                                       ! TKE = 1/2 (u'^2 + v'^2 + w'^2)
     661             :       l_vert_avg_closure,           & ! Use 2 calls to pdf_closure and the trapezoidal rule to
     662             :                                       ! compute the varibles that are output from high order
     663             :                                       ! closure
     664             :       l_trapezoidal_rule_zt,        & ! If true, the trapezoidal rule is called for the
     665             :                                       ! thermodynamic-level variables output from pdf_closure.
     666             :       l_trapezoidal_rule_zm,        & ! If true, the trapezoidal rule is called for three
     667             :                                       ! momentum-level variables - wpthvp, thlpthvp, and rtpthvp -
     668             :                                       ! output from pdf_closure.
     669             :       l_call_pdf_closure_twice,     & ! This logical flag determines whether or not to call
     670             :                                       ! subroutine pdf_closure twice.  If true, pdf_closure is
     671             :                                       ! called first on thermodynamic levels and then on momentum
     672             :                                       ! levels so that each variable is computed on its native
     673             :                                       ! level.  If false, pdf_closure is only called on
     674             :                                       ! thermodynamic levels, and variables which belong on
     675             :                                       ! momentum levels are interpolated.
     676             :       l_standard_term_ta,           & ! Use the standard discretization for the turbulent advection
     677             :                                       ! terms.  Setting to .false. means that a_1 and a_3 are
     678             :                                       ! pulled outside of the derivative in
     679             :                                       ! advance_wp2_wp3_module.F90 and in
     680             :                                       ! advance_xp2_xpyp_module.F90.
     681             :       l_partial_upwind_wp3,         & ! Flag to use an "upwind" discretization rather
     682             :                                       ! than a centered discretization for the portion
     683             :                                       ! of the wp3 turbulent advection term for ADG1
     684             :                                       ! that is linearized in terms of wp3<t+1>.
     685             :                                       ! (Requires ADG1 PDF and l_standard_term_ta).
     686             :       l_godunov_upwind_wpxp_ta,     & ! This flag determines whether we want to use an upwind
     687             :                                       ! differencing approximation rather than a centered 
     688             :                                       ! differencing for turbulent advection terms. 
     689             :                                       ! It affects  wpxp only.
     690             :       l_godunov_upwind_xpyp_ta,     & ! This flag determines whether we want to use an upwind
     691             :                                       ! differencing approximation rather than a centered 
     692             :                                       ! differencing for turbulent advection terms. It affects
     693             :                                       ! xpyp only.
     694             :       l_use_cloud_cover,            & ! Use cloud_cover and rcm_in_layer to help boost cloud_frac
     695             :                                       ! and rcm to help increase cloudiness at coarser grid
     696             :                                       ! resolutions.
     697             :       l_diagnose_correlations,      & ! Diagnose correlations instead of using fixed ones
     698             :       l_calc_w_corr,                & ! Calculate the correlations between w and the hydrometeors
     699             :       l_const_Nc_in_cloud,          & ! Use a constant cloud droplet conc. within cloud (K&K)
     700             :       l_fix_w_chi_eta_correlations, & ! Use a fixed correlation for s and t Mellor(chi/eta)
     701             :       l_stability_correct_tau_zm,   & ! Use tau_N2_zm instead of tau_zm in wpxp_pr1 stability
     702             :                                       ! correction
     703             :       l_damp_wp2_using_em,          & ! In wp2 equation, use a dissipation formula of
     704             :                                       ! -(2/3)*em/tau_zm, as in Bougeault (1981)
     705             :       l_do_expldiff_rtm_thlm,       & ! Diffuse rtm and thlm explicitly
     706             :       l_Lscale_plume_centered,      & ! Alternate that uses the PDF to compute the perturbed values
     707             :       l_diag_Lscale_from_tau,       & ! First diagnose dissipation time tau, and then diagnose the
     708             :                                       ! mixing length scale as Lscale = tau * tke
     709             :       l_use_C7_Richardson,          & ! Parameterize C7 based on Richardson number
     710             :       l_use_C11_Richardson,         & ! Parameterize C11 and C16 based on Richardson number
     711             :       l_use_shear_Richardson,       & ! Use shear in the calculation of Richardson number
     712             :       l_brunt_vaisala_freq_moist,   & ! Use a different formula for the Brunt-Vaisala frequency in
     713             :                                       ! saturated atmospheres (from Durran and Klemp, 1982)
     714             :       l_use_thvm_in_bv_freq,        & ! Use thvm in the calculation of Brunt-Vaisala frequency
     715             :       l_rcm_supersat_adj,           & ! Add excess supersaturated vapor to cloud water
     716             :       l_damp_wp3_Skw_squared,       & ! Set damping on wp3 to use Skw^2 rather than Skw^4
     717             :       l_prescribed_avg_deltaz,      & ! used in adj_low_res_nu. If .true., avg_deltaz = deltaz
     718             :       l_lmm_stepping,               & ! Apply Linear Multistep Method (LMM) Stepping
     719             :       l_e3sm_config,                & ! Run model with E3SM settings
     720             :       l_vary_convect_depth,         & ! Flag used to calculate convective velocity using
     721             :                                       ! a variable estimate of layer depth based on the depth
     722             :                                       ! over which wpthlp is positive near the ground when true
     723             :                                       ! More information can be found by
     724             :                                       ! Looking at issue #905 on the clubb repo
     725             :       l_use_tke_in_wp3_pr_turb_term,& ! Use TKE formulation for wp3 pr_turb term
     726             :       l_use_tke_in_wp2_wp3_K_dfsn,  & ! Use TKE in eddy diffusion for wp2 and wp3
     727             :       l_use_wp3_lim_with_smth_Heaviside, & ! Flag to activate mods on wp3 limiters for conv test
     728             :       l_smooth_Heaviside_tau_wpxp,  & ! Use smoothed Heaviside 'Peskin' function
     729             :                                       ! in the calculation of H_invrs_tau_wpxp_N2
     730             :                                       ! in src/CLUBB_core/mixing_length.F90
     731             :       l_modify_limiters_for_cnvg_test, & ! Flag to activate mods on limiters for conv test
     732             :       l_enable_relaxed_clipping,    & ! Flag to relax clipping on wpxp in
     733             :                                       ! xm_wpxp_clipping_and_stats
     734             :       l_linearize_pbl_winds,        & ! Code to linearize PBL winds
     735             :       l_mono_flux_lim_thlm,         & ! Flag to turn on monotonic flux limiter for thlm
     736             :       l_mono_flux_lim_rtm,          & ! Flag to turn on monotonic flux limiter for rtm
     737             :       l_mono_flux_lim_um,           & ! Flag to turn on monotonic flux limiter for um
     738             :       l_mono_flux_lim_vm,           & ! Flag to turn on monotonic flux limiter for vm
     739             :       l_mono_flux_lim_spikefix,     & ! Flag to implement monotonic flux limiter code that
     740             :                                       ! eliminates spurious drying tendencies at model top
     741             :       l_host_applies_sfc_fluxes       ! Use to determine whether a host model has already applied the surface flux,
     742             :                                       ! to avoid double counting.
     743             : 
     744             :     ! Output variables
     745             :     type(clubb_config_flags_type), intent(out) :: &
     746             :       clubb_config_flags            ! Derived type holding all configurable CLUBB flags
     747             : 
     748             : !-----------------------------------------------------------------------
     749             :     ! Begin code
     750             : 
     751        1536 :     clubb_config_flags%iiPDF_type = iiPDF_type
     752        1536 :     clubb_config_flags%ipdf_call_placement = ipdf_call_placement
     753        1536 :     clubb_config_flags%penta_solve_method = penta_solve_method
     754        1536 :     clubb_config_flags%tridiag_solve_method = tridiag_solve_method
     755        1536 :     clubb_config_flags%saturation_formula = saturation_formula
     756        1536 :     clubb_config_flags%l_use_precip_frac = l_use_precip_frac
     757        1536 :     clubb_config_flags%l_predict_upwp_vpwp = l_predict_upwp_vpwp
     758        1536 :     clubb_config_flags%l_min_wp2_from_corr_wx = l_min_wp2_from_corr_wx
     759        1536 :     clubb_config_flags%l_min_xp2_from_corr_wx = l_min_xp2_from_corr_wx
     760        1536 :     clubb_config_flags%l_C2_cloud_frac = l_C2_cloud_frac
     761        1536 :     clubb_config_flags%l_diffuse_rtm_and_thlm = l_diffuse_rtm_and_thlm
     762        1536 :     clubb_config_flags%l_stability_correct_Kh_N2_zm = l_stability_correct_Kh_N2_zm
     763        1536 :     clubb_config_flags%l_calc_thlp2_rad = l_calc_thlp2_rad
     764        1536 :     clubb_config_flags%l_upwind_xpyp_ta = l_upwind_xpyp_ta
     765        1536 :     clubb_config_flags%l_upwind_xm_ma = l_upwind_xm_ma
     766        1536 :     clubb_config_flags%l_uv_nudge = l_uv_nudge
     767        1536 :     clubb_config_flags%l_rtm_nudge = l_rtm_nudge
     768        1536 :     clubb_config_flags%l_tke_aniso = l_tke_aniso
     769        1536 :     clubb_config_flags%l_vert_avg_closure  = l_vert_avg_closure
     770        1536 :     clubb_config_flags%l_trapezoidal_rule_zt = l_trapezoidal_rule_zt
     771        1536 :     clubb_config_flags%l_trapezoidal_rule_zm = l_trapezoidal_rule_zm
     772        1536 :     clubb_config_flags%l_call_pdf_closure_twice = l_call_pdf_closure_twice
     773        1536 :     clubb_config_flags%l_standard_term_ta = l_standard_term_ta
     774        1536 :     clubb_config_flags%l_partial_upwind_wp3 = l_partial_upwind_wp3
     775        1536 :     clubb_config_flags%l_godunov_upwind_wpxp_ta = l_godunov_upwind_wpxp_ta
     776        1536 :     clubb_config_flags%l_godunov_upwind_xpyp_ta = l_godunov_upwind_xpyp_ta
     777        1536 :     clubb_config_flags%l_use_cloud_cover = l_use_cloud_cover
     778        1536 :     clubb_config_flags%l_diagnose_correlations = l_diagnose_correlations
     779        1536 :     clubb_config_flags%l_calc_w_corr = l_calc_w_corr
     780        1536 :     clubb_config_flags%l_const_Nc_in_cloud = l_const_Nc_in_cloud
     781        1536 :     clubb_config_flags%l_fix_w_chi_eta_correlations = l_fix_w_chi_eta_correlations
     782        1536 :     clubb_config_flags%l_stability_correct_tau_zm = l_stability_correct_tau_zm
     783        1536 :     clubb_config_flags%l_damp_wp2_using_em = l_damp_wp2_using_em
     784        1536 :     clubb_config_flags%l_do_expldiff_rtm_thlm = l_do_expldiff_rtm_thlm
     785        1536 :     clubb_config_flags%l_Lscale_plume_centered = l_Lscale_plume_centered
     786        1536 :     clubb_config_flags%l_diag_Lscale_from_tau = l_diag_Lscale_from_tau
     787        1536 :     clubb_config_flags%l_use_C7_Richardson = l_use_C7_Richardson
     788        1536 :     clubb_config_flags%l_use_C11_Richardson = l_use_C11_Richardson
     789        1536 :     clubb_config_flags%l_use_shear_Richardson = l_use_shear_Richardson
     790        1536 :     clubb_config_flags%l_brunt_vaisala_freq_moist = l_brunt_vaisala_freq_moist
     791        1536 :     clubb_config_flags%l_use_thvm_in_bv_freq = l_use_thvm_in_bv_freq
     792        1536 :     clubb_config_flags%l_rcm_supersat_adj = l_rcm_supersat_adj
     793        1536 :     clubb_config_flags%l_damp_wp3_Skw_squared = l_damp_wp3_Skw_squared
     794        1536 :     clubb_config_flags%l_prescribed_avg_deltaz = l_prescribed_avg_deltaz
     795        1536 :     clubb_config_flags%l_lmm_stepping = l_lmm_stepping
     796        1536 :     clubb_config_flags%l_e3sm_config = l_e3sm_config
     797        1536 :     clubb_config_flags%l_vary_convect_depth = l_vary_convect_depth
     798        1536 :     clubb_config_flags%l_use_tke_in_wp3_pr_turb_term = l_use_tke_in_wp3_pr_turb_term
     799        1536 :     clubb_config_flags%l_use_tke_in_wp2_wp3_K_dfsn = l_use_tke_in_wp2_wp3_K_dfsn
     800        1536 :     clubb_config_flags%l_use_wp3_lim_with_smth_Heaviside = l_use_wp3_lim_with_smth_Heaviside
     801        1536 :     clubb_config_flags%l_smooth_Heaviside_tau_wpxp = l_smooth_Heaviside_tau_wpxp
     802        1536 :     clubb_config_flags%l_modify_limiters_for_cnvg_test = l_modify_limiters_for_cnvg_test
     803        1536 :     clubb_config_flags%l_enable_relaxed_clipping = l_enable_relaxed_clipping
     804        1536 :     clubb_config_flags%l_linearize_pbl_winds = l_linearize_pbl_winds
     805        1536 :     clubb_config_flags%l_mono_flux_lim_thlm = l_mono_flux_lim_thlm
     806        1536 :     clubb_config_flags%l_mono_flux_lim_rtm = l_mono_flux_lim_rtm
     807        1536 :     clubb_config_flags%l_mono_flux_lim_um = l_mono_flux_lim_um
     808        1536 :     clubb_config_flags%l_mono_flux_lim_vm = l_mono_flux_lim_vm
     809        1536 :     clubb_config_flags%l_mono_flux_lim_spikefix = l_mono_flux_lim_spikefix
     810        1536 :     clubb_config_flags%l_host_applies_sfc_fluxes = l_host_applies_sfc_fluxes
     811             :     
     812             : 
     813        1536 :     return
     814             :   end subroutine initialize_clubb_config_flags_type
     815             : 
     816             : !===============================================================================
     817           2 :   subroutine print_clubb_config_flags( iunit, clubb_config_flags )
     818             : 
     819             : ! Description:
     820             : !   Prints the clubb_config_flags.
     821             : 
     822             : ! References:
     823             : !   None
     824             : !-------------------------------------------------------------------------------
     825             : 
     826             :     implicit none
     827             : 
     828             :     ! Input variables
     829             :     integer, intent(in) :: &
     830             :       iunit ! The file to write to
     831             : 
     832             :     type(clubb_config_flags_type), intent(in) :: &
     833             :       clubb_config_flags ! Derived type holding all configurable CLUBB flags
     834             : 
     835             : !-----------------------------------------------------------------------
     836             :     ! Begin code
     837             : 
     838           2 :     write(iunit,*) "iiPDF_type = ", clubb_config_flags%iiPDF_type
     839           2 :     write(iunit,*) "ipdf_call_placement = ", clubb_config_flags%ipdf_call_placement
     840           2 :     write(iunit,*) "penta_solve_method = ", clubb_config_flags%penta_solve_method
     841           2 :     write(iunit,*) "tridiag_solve_method = ", clubb_config_flags%tridiag_solve_method
     842           2 :     write(iunit,*) "l_use_precip_frac = ", clubb_config_flags%l_use_precip_frac
     843           2 :     write(iunit,*) "l_predict_upwp_vpwp = ", clubb_config_flags%l_predict_upwp_vpwp
     844           2 :     write(iunit,*) "l_min_wp2_from_corr_wx = ", clubb_config_flags%l_min_wp2_from_corr_wx
     845           2 :     write(iunit,*) "l_min_xp2_from_corr_wx = ", clubb_config_flags%l_min_xp2_from_corr_wx
     846           2 :     write(iunit,*) "l_C2_cloud_frac = ", clubb_config_flags%l_C2_cloud_frac
     847           2 :     write(iunit,*) "l_diffuse_rtm_and_thlm = ", clubb_config_flags%l_diffuse_rtm_and_thlm
     848           2 :     write(iunit,*) "l_stability_correct_Kh_N2_zm = ", &
     849           4 :                    clubb_config_flags%l_stability_correct_Kh_N2_zm
     850           2 :     write(iunit,*) "l_calc_thlp2_rad = ", clubb_config_flags%l_calc_thlp2_rad
     851           2 :     write(iunit,*) "l_upwind_xpyp_ta = ", clubb_config_flags%l_upwind_xpyp_ta
     852           2 :     write(iunit,*) "l_upwind_xm_ma = ", clubb_config_flags%l_upwind_xm_ma
     853           2 :     write(iunit,*) "l_uv_nudge = ", clubb_config_flags%l_uv_nudge
     854           2 :     write(iunit,*) "l_rtm_nudge = ", clubb_config_flags%l_rtm_nudge
     855           2 :     write(iunit,*) "l_tke_aniso = ", clubb_config_flags%l_tke_aniso
     856           2 :     write(iunit,*) "l_vert_avg_closure = ", clubb_config_flags%l_vert_avg_closure
     857           2 :     write(iunit,*) "l_trapezoidal_rule_zt = ", clubb_config_flags%l_trapezoidal_rule_zt
     858           2 :     write(iunit,*) "l_trapezoidal_rule_zm = ", clubb_config_flags%l_trapezoidal_rule_zm
     859           2 :     write(iunit,*) "l_call_pdf_closure_twice = ", clubb_config_flags%l_call_pdf_closure_twice
     860           2 :     write(iunit,*) "l_standard_term_ta = ", clubb_config_flags%l_standard_term_ta
     861           2 :     write(iunit,*) "l_partial_upwind_wp3 = ", clubb_config_flags%l_partial_upwind_wp3
     862           2 :     write(iunit,*) "l_godunov_upwind_wpxp_ta = ", clubb_config_flags%l_godunov_upwind_wpxp_ta
     863           2 :     write(iunit,*) "l_godunov_upwind_xpyp_ta = ", clubb_config_flags%l_godunov_upwind_xpyp_ta
     864           2 :     write(iunit,*) "l_use_cloud_cover = ", clubb_config_flags%l_use_cloud_cover
     865           2 :     write(iunit,*) "l_diagnose_correlations = ", clubb_config_flags%l_diagnose_correlations
     866           2 :     write(iunit,*) "l_calc_w_corr = ", clubb_config_flags%l_calc_w_corr
     867           2 :     write(iunit,*) "l_const_Nc_in_cloud = ", clubb_config_flags%l_const_Nc_in_cloud
     868           2 :     write(iunit,*) "l_fix_w_chi_eta_correlations = ", clubb_config_flags%l_fix_w_chi_eta_correlations
     869           2 :     write(iunit,*) "l_stability_correct_tau_zm = ", clubb_config_flags%l_stability_correct_tau_zm
     870           2 :     write(iunit,*) "l_damp_wp2_using_em = ", clubb_config_flags%l_damp_wp2_using_em
     871           2 :     write(iunit,*) "l_do_expldiff_rtm_thlm = ", clubb_config_flags%l_do_expldiff_rtm_thlm
     872           2 :     write(iunit,*) "l_Lscale_plume_centered = ", clubb_config_flags%l_Lscale_plume_centered
     873           2 :     write(iunit,*) "l_diag_Lscale_from_tau = ", clubb_config_flags%l_diag_Lscale_from_tau
     874           2 :     write(iunit,*) "l_use_C7_Richardson = ", clubb_config_flags%l_use_C7_Richardson
     875           2 :     write(iunit,*) "l_use_C11_Richardson = ", clubb_config_flags%l_use_C11_Richardson
     876           2 :     write(iunit,*) "l_use_shear_Richardson = ", clubb_config_flags%l_use_shear_Richardson
     877           2 :     write(iunit,*) "l_brunt_vaisala_freq_moist = ", clubb_config_flags%l_brunt_vaisala_freq_moist
     878           2 :     write(iunit,*) "l_use_thvm_in_bv_freq = ", clubb_config_flags%l_use_thvm_in_bv_freq
     879           2 :     write(iunit,*) "l_rcm_supersat_adj = ", clubb_config_flags%l_rcm_supersat_adj
     880           2 :     write(iunit,*) "l_damp_wp3_Skw_squared = ", clubb_config_flags%l_damp_wp3_Skw_squared
     881           2 :     write(iunit,*) "l_prescribed_avg_deltaz = ", clubb_config_flags%l_prescribed_avg_deltaz
     882           2 :     write(iunit,*) "l_lmm_stepping = ", clubb_config_flags%l_lmm_stepping
     883           2 :     write(iunit,*) "l_e3sm_config = ", clubb_config_flags%l_e3sm_config
     884           2 :     write(iunit,*) "l_vary_convect_depth = ", clubb_config_flags%l_vary_convect_depth
     885           2 :     write(iunit,*) "l_use_tke_in_wp3_pr_turb_term = ", clubb_config_flags%l_use_tke_in_wp3_pr_turb_term
     886           2 :     write(iunit,*) "l_use_tke_in_wp2_wp3_K_dfsn = ", clubb_config_flags%l_use_tke_in_wp2_wp3_K_dfsn
     887           2 :     write(iunit,*) "l_use_wp3_lim_with_smth_Heaviside = ", clubb_config_flags%l_use_wp3_lim_with_smth_Heaviside
     888           2 :     write(iunit,*) "l_smooth_Heaviside_tau_wpxp = ", clubb_config_flags%l_smooth_Heaviside_tau_wpxp
     889           2 :     write(iunit,*) "l_modify_limiters_for_cnvg_test = ", clubb_config_flags%l_modify_limiters_for_cnvg_test
     890           2 :     write(iunit,*) "l_enable_relaxed_clipping = ", clubb_config_flags%l_enable_relaxed_clipping
     891           2 :     write(iunit,*) "l_linearize_pbl_winds = ", clubb_config_flags%l_linearize_pbl_winds
     892           2 :     write(iunit,*) "l_mono_flux_lim_thlm = ",clubb_config_flags%l_mono_flux_lim_thlm
     893           2 :     write(iunit,*) "l_mono_flux_lim_rtm = ",clubb_config_flags%l_mono_flux_lim_rtm
     894           2 :     write(iunit,*) "l_mono_flux_lim_um = ",clubb_config_flags%l_mono_flux_lim_vm
     895           2 :     write(iunit,*) "l_mono_flux_lim_vm = ",clubb_config_flags%l_mono_flux_lim_um
     896           2 :     write(iunit,*) "l_mono_flux_lim_spikefix = ",clubb_config_flags%l_mono_flux_lim_spikefix
     897           2 :     write(iunit,*) "l_host_applies_sfc_fluxes = ",clubb_config_flags%l_host_applies_sfc_fluxes
     898             : 
     899           2 :     return
     900             :   end subroutine print_clubb_config_flags
     901             : 
     902           0 : end module model_flags

Generated by: LCOV version 1.14