Version: dev

WSM6HydrometeorSlopes

Size-distribution and fall-speed diagnostics of the WRF single-moment 6-class microphysics scheme (WSM6; Hong and Lim 2006), transcribed from slope_wsm6 and the cold-rain preamble of mp_wsm6_run in phys/physics_mmm/mp_wsm6.F90 (WRF 4.8, NCAR/MMM-physics): the temperature-dependent snow intercept factor n0s(T)/n0s (HDC 2004 eq. 6), the inverse slopes lambda^-1 of the exponential rain, snow and graupel distributions and their powers lambda^-b, lambda^-2, lambda^-3 (held at 1/lambda_max below the threshold qcrmin), the diagnosed ice crystal number concentration N_i (HDC eq. 5c), mean ice crystal diameter D_i (HDC eq. 5b) and fall speed V_i (HDC eq. 5a), the mass-weighted fall speeds of rain, snow and graupel V = a Gamma(4+b)/6 lambda^-b (rho0/rho)^(1/2), the ventilation coefficients precs1/2 and precg1/2 of the snow and graupel distributions (mp_wsm6_init products shared by deposition, evaporation and melting), and the combined snow/graupel fall speed WSM6 uses since V3.0. Everything is a pointwise function of the layer state on the layer index `lev` (WRF k, layer 1 at the surface). It also holds the transport properties of air at T and p (kinematic viscosity, vapor diffusivity, thermal conductivity; lib/wrf_air_properties.esm), the ventilation factor (WSM6 work2) and the ventilation moments coeres of rain, snow and graupel. The process-rate components (warm_rain.esm, cold_accretion.esm, ice_deposition.esm) mount this component as subsystem `sd` and take all of these from it, mirroring how the kernel computes them once per sub-step (slope_wsm6) and reuses them in every process; melting_freezing.esm evaluates the same templates at its own, earlier state. Scheme constants come from wsm6_parameters.esm (subsystem `par`) and physical constants from lib/wrf_constants.esm (subsystem `wrf`). Consumer-supplied inputs are the rewrite-target ops `input_<name>` lowered in the inline tests through a per-test template library extracted from kernel dumps of the instrumented WRF fork ctessum-claude/WRF, commit e42a269 (v4.8.0-2-ge42a269e). EqWeFiC, cited here for FORTRAN_BUGS.md and couplings/, is https://github.com/EarthSciML/EqWeFiC, where these components were developed and are coupled into a WRF column.

Domain
atmospheric_dynamics
Subdomain
wsm6
Type
model
.esm schema
1.2.0
Source
components/atmospheric_dynamics/wsm6/hydrometeor_slopes.esm
Tags
#atmospheric_dynamics #wsm6 #model #wrf #microphysics #size-distribution #fall-speed #column

Description

Size-distribution and fall-speed diagnostics of the WRF single-moment 6-class microphysics scheme (WSM6; Hong and Lim 2006), transcribed from slope_wsm6 and the cold-rain preamble of mp_wsm6_run in phys/physics_mmm/mp_wsm6.F90 (WRF 4.8, NCAR/MMM-physics): the temperature-dependent snow intercept factor n0s(T)/n0s (HDC 2004 eq. 6), the inverse slopes lambda^-1 of the exponential rain, snow and graupel distributions and their powers lambda^-b, lambda^-2, lambda^-3 (held at 1/lambda_max below the threshold qcrmin), the diagnosed ice crystal number concentration N_i (HDC eq. 5c), mean ice crystal diameter D_i (HDC eq. 5b) and fall speed V_i (HDC eq. 5a), the mass-weighted fall speeds of rain, snow and graupel V = a Gamma(4+b)/6 lambda^-b (rho0/rho)^(1/2), the ventilation coefficients precs1/2 and precg1/2 of the snow and graupel distributions (mp_wsm6_init products shared by deposition, evaporation and melting), and the combined snow/graupel fall speed WSM6 uses since V3.0. Everything is a pointwise function of the layer state on the layer index lev (WRF k, layer 1 at the surface). It also holds the transport properties of air at T and p (kinematic viscosity, vapor diffusivity, thermal conductivity; lib/wrf_air_properties.esm), the ventilation factor (WSM6 work2) and the ventilation moments coeres of rain, snow and graupel. The process-rate components (warm_rain.esm, cold_accretion.esm, ice_deposition.esm) mount this component as subsystem sd and take all of these from it, mirroring how the kernel computes them once per sub-step (slope_wsm6) and reuses them in every process; melting_freezing.esm evaluates the same templates at its own, earlier state. Scheme constants come from wsm6_parameters.esm (subsystem par) and physical constants from lib/wrf_constants.esm (subsystem wrf). Consumer-supplied inputs are the rewrite-target ops input_<name> lowered in the inline tests through a per-test template library extracted from kernel dumps of the instrumented WRF fork ctessum-claude/WRF, commit e42a269 (v4.8.0-2-ge42a269e). EqWeFiC, cited here for FORTRAN_BUGS.md and couplings/, is https://github.com/EarthSciML/EqWeFiC , where these components were developed and are coupled into a WRF column.

Reference

  • Hong, S.-Y., and J.-O. J. Lim (2006). The WRF single-moment 6-class microphysics scheme (WSM6). J. Korean Meteor. Soc. 42, 129-151.
  • Hong, S.-Y., J. Dudhia, and S.-H. Chen (2004). A revised approach to ice microphysical processes for the bulk parameterization of clouds and precipitation. Mon. Wea. Rev. 132, 103-120.
  • Lin, Y.-L., R. D. Farley, and H. D. Orville (1983). Bulk parameterization of the snow field in a cloud model. J. Climate Appl. Meteor. 22, 1065-1092.
  • NCAR/MMM-physics mp_wsm6.F90 at commit 550b5b4 (WRF 4.8 phys/physics_mmm submodule): slope_wsm6 (lines 1653-1730), cold-rain preamble (lines 968-995).

Parameters

NameUnitsDefaultDescription
T_inK0.0Coupling-target parameter (additive): receives the temperature from the upstream stage through a document coupling (EqWeFiC couplings/microphysics_column*.esm), where the mount-edge template library lowers input_T to this name. Unused by the standalone inline tests, which lower input_T to a dumped column profile instead.
qi_inkg/kg0.0Coupling-target parameter (additive): receives the cloud-ice mixing ratio from the upstream stage through a document coupling (EqWeFiC couplings/microphysics_column*.esm), where the mount-edge template library lowers input_qi to this name. Unused by the standalone inline tests, which lower input_qi to a dumped column profile instead.
qr_inkg/kg0.0Coupling-target parameter (additive): receives the rain mixing ratio from the upstream stage through a document coupling (EqWeFiC couplings/microphysics_column*.esm), where the mount-edge template library lowers input_qr to this name. Unused by the standalone inline tests, which lower input_qr to a dumped column profile instead.
qs_inkg/kg0.0Coupling-target parameter (additive): receives the snow mixing ratio from the upstream stage through a document coupling (EqWeFiC couplings/microphysics_column*.esm), where the mount-edge template library lowers input_qs to this name. Unused by the standalone inline tests, which lower input_qs to a dumped column profile instead.
qg_inkg/kg0.0Coupling-target parameter (additive): receives the graupel mixing ratio from the upstream stage through a document coupling (EqWeFiC couplings/microphysics_column*.esm), where the mount-edge template library lowers input_qg to this name. Unused by the standalone inline tests, which lower input_qg to a dumped column profile instead.
rho_inkg/m^30.0Coupling-target parameter (additive): receives the air density from the upstream stage through a document coupling (EqWeFiC couplings/microphysics_column*.esm), where the mount-edge template library lowers input_rho to this name. Unused by the standalone inline tests, which lower input_rho to a dumped column profile instead.
p_inPa0.0Coupling-target parameter (additive): receives the pressure from the upstream stage through a document coupling (EqWeFiC couplings/microphysics_column*.esm), where the mount-edge template library lowers input_p to this name. Unused by the standalone inline tests, which lower input_p to a dumped column profile instead.

Observed

NameUnitsDefaultDescription
TKAbsolute temperature.
qikg/kgCloud-ice mixing ratio.
qrkg/kgRain mixing ratio.
qskg/kgSnow mixing ratio.
qgkg/kgGraupel mixing ratio.
rhokg/m^3Dry-air density (WSM6 den).
pPaPressure; enters only the vapor diffusivity Dv.
pidn0rkg/m^7pi rho_w n0r (WSM6 pidn0r).
pidn0skg/m^7pi rho_s n0s (WSM6 pidn0s).
pidn0gkg/m^7pi rho_g n0g (WSM6 pidn0g).
rslope_r_maxm1/lamdarmax (WSM6 rslopermax).
rslope_s_maxm1/lamdasmax (WSM6 rslopesmax).
rslope_g_maxm1/lamdagmax (WSM6 rslopegmax).
pvtrm^(1/5)/sRain fall-speed constant avtr Gamma(4 + bvtr)/6 (WSM6 pvtr).
precs11/m^4Snow deposition/melting coefficient of the non-ventilated term, 4 n0s a_v (WSM6 precs1).
precs21/(m^(741/200)*s^(1/2))Snow deposition/melting coefficient of the ventilated term, 4 n0s b_v sqrt(avts) Gamma(2.5 + bvts/2) (WSM6 precs2); units for bvts = 0.41.
precg11/m^4Graupel deposition/melting coefficient of the non-ventilated term, 2 pi n0g a_v (WSM6 precg1).
precg21/(m^(39/10)*s^(1/2))Graupel deposition/melting coefficient of the ventilated term, 2 pi n0g b_v sqrt(avtg) Gamma(2.5 + bvtg/2) (WSM6 precg2); units for bvtg = 0.8.
pvtsm^(59/100)/sSnow fall-speed constant avts Gamma(4 + bvts)/6 (WSM6 pvts).
pvtgm^(1/5)/sGraupel fall-speed constant avtg Gamma(4 + bvtg)/6 (WSM6 pvtg).
denfac1Density correction of the fall speed, (rho0/rho)^(1/2) (WSM6 denfac).
n0sfac1Snow intercept temperature factor n0s(T)/n0s (WSM6 n0sfac).
rslope_rmInverse slope of the raindrop distribution (WSM6 rslope(:,:,1)).
rslopeb_rm^(4/5)lambda_r^-bvtr (WSM6 rslopeb(:,:,1)).
rslope2_rm^2lambda_r^-2.
rslope3_rm^3lambda_r^-3.
rslope_smInverse slope of the snow distribution with the temperature-dependent intercept (WSM6 rslope(:,:,2)).
rslopeb_sm^(41/100)lambda_s^-bvts (WSM6 rslopeb(:,:,2)).
rslope2_sm^2lambda_s^-2.
rslope3_sm^3lambda_s^-3.
rslope_gmInverse slope of the graupel distribution (WSM6 rslope(:,:,3)).
rslopeb_gm^(4/5)lambda_g^-bvtg (WSM6 rslopeb(:,:,3)).
rslope2_gm^2lambda_g^-2.
rslope3_gm^3lambda_g^-3.
num^2/sKinematic viscosity of air at T (WSM6 viscos(t, den)).
Dvm^2/sDiffusivity of water vapor in air at T and p (WSM6 diffus(t, p)).
kaW/(m*K)Thermal conductivity of air at T (WSM6 xka(t, den)).
f_vents^(1/2)/mVentilation factor (nu/Dv)^(1/3) nu^(-1/2) (rho0/rho)^(1/4) at T (WSM6 work2 = venfac(p, t, den)), shared by rain evaporation, the deposition and evaporation of snow and graupel, and the melting.
coeres_rm^(29/10)Ventilation moment of the raindrop distribution lambda_r^-2 (lambda_r^-1 lambda_r^-bvtr)^(1/2) (WSM6 coeres for rain); units for bvtr = 0.8.
coeres_sm^(541/200)Ventilation moment of the snow distribution lambda_s^-2 (lambda_s^-1 lambda_s^-bvts)^(1/2) (WSM6 coeres for snow); units for bvts = 0.41.
coeres_gm^(29/10)Ventilation moment of the graupel distribution (WSM6 coeres for graupel); units for bvtg = 0.8.
xni1/m^3Ice crystal number concentration N_i (WSM6 xni as recomputed in the cold-rain block from the current ice content).
D_imMean ice crystal diameter (WSM6 diameter).
vt_im/sIce crystal fall speed for the fallout (WSM6 work1c of the Vice block, mp_wsm6.F90 lines 711-718): zero where qi <= 0, otherwise V_i(max(D_i, dimin_fallout)). The guard keeps the speed finite where advection has left qi slightly negative, where D_i (the square root of a negative mean mass) is NaN and a NaN speed would reach the flux even though the falling mass rho max(qi, 0) is zero. The cold-rain rates use D_i directly, as the kernel’s vt2i and diameter there have neither guard.
vt_rm/sMass-weighted rain fall speed (WSM6 vt2r).
vt_sm/sMass-weighted snow fall speed (WSM6 vt2s).
vt_gm/sMass-weighted graupel fall speed (WSM6 vt2g).
vt_sgm/sMixing-ratio-weighted snow/graupel fall speed (WSM6 vt2ave).

Observed expressions

$$ T = \mathrm{input_T}\left(\right) $$

Absolute temperature.

$$ qi = \mathrm{input_qi}\left(\right) $$

Cloud-ice mixing ratio.

$$ qr = \mathrm{input_qr}\left(\right) $$

Rain mixing ratio.

$$ qs = \mathrm{input_qs}\left(\right) $$

Snow mixing ratio.

$$ qg = \mathrm{input_qg}\left(\right) $$

Graupel mixing ratio.

$$ rho = \mathrm{input_rho}\left(\right) $$

Dry-air density (WSM6 den).

$$ p = \mathrm{input_p}\left(\right) $$

Pressure; enters only the vapor diffusivity Dv.

$$ pidn0r = wrf.piconst \cdot wrf.rhowater \cdot par.n0r $$

pi rho_w n0r (WSM6 pidn0r).

$$ pidn0s = wrf.piconst \cdot par.dens \cdot par.n0s $$

pi rho_s n0s (WSM6 pidn0s).

$$ pidn0g = wrf.piconst \cdot par.deng \cdot par.n0g $$

pi rho_g n0g (WSM6 pidn0g).

$$ rslope_{r\,max} = \frac{\mathrm{const}\left(\right)}{par.lamdarmax} $$

1/lamdarmax (WSM6 rslopermax).

$$ rslope_{s\,max} = \frac{\mathrm{const}\left(\right)}{par.lamdasmax} $$

1/lamdasmax (WSM6 rslopesmax).

$$ rslope_{g\,max} = \frac{\mathrm{const}\left(\right)}{par.lamdagmax} $$

1/lamdagmax (WSM6 rslopegmax).

$$ pvtr = \frac{par.avtr \cdot par.g4pbr}{\mathrm{const}\left(\right)} $$

Rain fall-speed constant avtr Gamma(4 + bvtr)/6 (WSM6 pvtr).

$$ precs1 = \mathrm{const}\left(\right) \cdot par.n0s \cdot par.vent_{a\,snow} $$

Snow deposition/melting coefficient of the non-ventilated term, 4 n0s a_v (WSM6 precs1).

$$ precs2 = \mathrm{const}\left(\right) \cdot par.n0s \cdot par.vent_{b\,snow} \cdot \sqrt{par.avts} \cdot par.g5pbso2 $$

Snow deposition/melting coefficient of the ventilated term, 4 n0s b_v sqrt(avts) Gamma(2.5 + bvts/2) (WSM6 precs2); units for bvts = 0.41.

$$ precg1 = \mathrm{const}\left(\right) \cdot wrf.piconst \cdot par.n0g \cdot par.vent_{a} $$

Graupel deposition/melting coefficient of the non-ventilated term, 2 pi n0g a_v (WSM6 precg1).

$$ precg2 = \mathrm{const}\left(\right) \cdot wrf.piconst \cdot par.n0g \cdot par.vent_{b} \cdot \sqrt{par.avtg} \cdot par.g5pbro2 $$

Graupel deposition/melting coefficient of the ventilated term, 2 pi n0g b_v sqrt(avtg) Gamma(2.5 + bvtg/2) (WSM6 precg2); units for bvtg = 0.8.

$$ pvts = \frac{par.avts \cdot par.g4pbs}{\mathrm{const}\left(\right)} $$

Snow fall-speed constant avts Gamma(4 + bvts)/6 (WSM6 pvts).

$$ pvtg = \frac{par.avtg \cdot par.g4pbr}{\mathrm{const}\left(\right)} $$

Graupel fall-speed constant avtg Gamma(4 + bvtg)/6 (WSM6 pvtg).

$$ denfac = \sqrt{\frac{wrf.rhoair0}{rho}} $$

Density correction of the fall speed, (rho0/rho)^(1/2) (WSM6 denfac).

$$ n0sfac = \mathrm{snow_intercept_factor}\left(T=T, t0=wrf.svpt0, alpha=par.alpha_{n0s}, n0=par.n0s, n0max=par.n0smax\right) $$

Snow intercept temperature factor n0s(T)/n0s (WSM6 n0sfac).

$$ rslope_{r} = \mathrm{marshall_palmer_inverse_slope}\left(q=qr, rho=rho, pidn0=pidn0r, q_{min}=par.qcrmin, rslope_{max}=rslope_{r\,max}\right) $$

Inverse slope of the raindrop distribution (WSM6 rslope(:,:,1)).

$$ rslopeb_{r} = rslope_{r}^{par.bvtr} $$

lambda_r^-bvtr (WSM6 rslopeb(:,:,1)).

$$ rslope2_{r} = rslope_{r}^{2} $$

lambda_r^-2.

$$ rslope3_{r} = rslope_{r}^{3} $$

lambda_r^-3.

$$ rslope_{s} = \mathrm{marshall_palmer_inverse_slope}\left(q=qs, rho=rho, pidn0=pidn0s \cdot n0sfac, q_{min}=par.qcrmin, rslope_{max}=rslope_{s\,max}\right) $$

Inverse slope of the snow distribution with the temperature-dependent intercept (WSM6 rslope(:,:,2)).

$$ rslopeb_{s} = rslope_{s}^{par.bvts} $$

lambda_s^-bvts (WSM6 rslopeb(:,:,2)).

$$ rslope2_{s} = rslope_{s}^{2} $$

lambda_s^-2.

$$ rslope3_{s} = rslope_{s}^{3} $$

lambda_s^-3.

$$ rslope_{g} = \mathrm{marshall_palmer_inverse_slope}\left(q=qg, rho=rho, pidn0=pidn0g, q_{min}=par.qcrmin, rslope_{max}=rslope_{g\,max}\right) $$

Inverse slope of the graupel distribution (WSM6 rslope(:,:,3)).

$$ rslopeb_{g} = rslope_{g}^{par.bvtg} $$

lambda_g^-bvtg (WSM6 rslopeb(:,:,3)).

$$ rslope2_{g} = rslope_{g}^{2} $$

lambda_g^-2.

$$ rslope3_{g} = rslope_{g}^{3} $$

lambda_g^-3.

$$ nu = \mathrm{kinematic_viscosity_of_air}\left(T=T, rho=rho, coef=par.viscos_{coef}, T_{sutherland}=par.sutherland_{T}\right) $$

Kinematic viscosity of air at T (WSM6 viscos(t, den)).

$$ Dv = \mathrm{diffusivity_of_water_vapor}\left(T=T, p=p, coef=par.diffus_{coef}, expn=par.diffus_{exp}\right) $$

Diffusivity of water vapor in air at T and p (WSM6 diffus(t, p)).

$$ ka = \mathrm{thermal_conductivity_of_air}\left(nu=nu, rho=rho, coef=par.xka_{coef}\right) $$

Thermal conductivity of air at T (WSM6 xka(t, den)).

$$ f_{vent} = \mathrm{ventilation_factor}\left(nu=nu, Dv=Dv, rho=rho, rho0=wrf.rhoair0\right) $$

Ventilation factor (nu/Dv)^(1/3) nu^(-1/2) (rho0/rho)^(1/4) at T (WSM6 work2 = venfac(p, t, den)), shared by rain evaporation, the deposition and evaporation of snow and graupel, and the melting.

$$ coeres_{r} = \mathrm{ventilation_slope_factor}\left(rslope=rslope_{r}, rslopeb=rslopeb_{r}, rslope2=rslope2_{r}\right) $$

Ventilation moment of the raindrop distribution lambda_r^-2 (lambda_r^-1 lambda_r^-bvtr)^(1/2) (WSM6 coeres for rain); units for bvtr = 0.8.

$$ coeres_{s} = \mathrm{ventilation_slope_factor}\left(rslope=rslope_{s}, rslopeb=rslopeb_{s}, rslope2=rslope2_{s}\right) $$

Ventilation moment of the snow distribution lambda_s^-2 (lambda_s^-1 lambda_s^-bvts)^(1/2) (WSM6 coeres for snow); units for bvts = 0.41.

$$ coeres_{g} = \mathrm{ventilation_slope_factor}\left(rslope=rslope_{g}, rslopeb=rslopeb_{g}, rslope2=rslope2_{g}\right) $$

Ventilation moment of the graupel distribution (WSM6 coeres for graupel); units for bvtg = 0.8.

$$ xni = \mathrm{ice_crystal_number}\left(qi=qi, rho=rho, q_{min}=par.qmin, coef=par.xni_{coef}, n_{min}=par.xni_{min}, n_{max}=par.xni_{max}\right) $$

Ice crystal number concentration N_i (WSM6 xni as recomputed in the cold-rain block from the current ice content).

$$ D_{i} = \mathrm{ice_crystal_diameter}\left(qi=qi, rho=rho, xni=xni, dicon=par.dicon, dimax=par.dimax\right) $$

Mean ice crystal diameter (WSM6 diameter).

$$ vt_{i} = \mathrm{ifelse}\left(\mathrm{>}\left(qi, 0\right), \mathrm{ice_crystal_fall_speed}\left(D=\mathrm{max}\left(D_{i}, par.dimin_{fallout}\right), coef=par.vt_{ice\,coef}, expn=par.vt_{ice\,exp}\right), 0\right) $$

Ice crystal fall speed for the fallout (WSM6 work1c of the Vice block, mp_wsm6.F90 lines 711-718): zero where qi <= 0, otherwise V_i(max(D_i, dimin_fallout)). The guard keeps the speed finite where advection has left qi slightly negative, where D_i (the square root of a negative mean mass) is NaN and a NaN speed would reach the flux even though the falling mass rho max(qi, 0) is zero. The cold-rain rates use D_i directly, as the kernel’s vt2i and diameter there have neither guard.

$$ vt_{r} = \mathrm{precipitation_fall_speed}\left(pvt=pvtr, rslopeb=rslopeb_{r}, denfac=denfac\right) $$

Mass-weighted rain fall speed (WSM6 vt2r).

$$ vt_{s} = \mathrm{precipitation_fall_speed}\left(pvt=pvts, rslopeb=rslopeb_{s}, denfac=denfac\right) $$

Mass-weighted snow fall speed (WSM6 vt2s).

$$ vt_{g} = \mathrm{precipitation_fall_speed}\left(pvt=pvtg, rslopeb=rslopeb_{g}, denfac=denfac\right) $$

Mass-weighted graupel fall speed (WSM6 vt2g).

$$ vt_{sg} = \mathrm{snow_graupel_weighted_mean}\left(x_{s}=vt_{s}, q_{s}=qs, x_{g}=vt_{g}, q_{g}=qg, q_{floor}=par.qmin\right) $$

Mixing-ratio-weighted snow/graupel fall speed (WSM6 vt2ave).

Raw .esm

Raw .esm JSON (this component)
{
  "expression_template_imports": [
    {
      "ref": "../../../lib/wrf_air_properties.esm"
    },
    {
      "ref": "./microphysics_templates.esm"
    }
  ],
  "subsystems": {
    "wrf": {
      "ref": "../../../lib/wrf_constants.esm"
    },
    "par": {
      "ref": "./wsm6_parameters.esm"
    }
  },
  "variables": {
    "T_in": {
      "type": "parameter",
      "units": "K",
      "shape": [
        "lev"
      ],
      "default": 0.0,
      "description": "Coupling-target parameter (additive): receives the temperature from the upstream stage through a document coupling (EqWeFiC couplings/microphysics_column*.esm), where the mount-edge template library lowers `input_T` to this name. Unused by the standalone inline tests, which lower `input_T` to a dumped column profile instead."
    },
    "qi_in": {
      "type": "parameter",
      "units": "kg/kg",
      "shape": [
        "lev"
      ],
      "default": 0.0,
      "description": "Coupling-target parameter (additive): receives the cloud-ice mixing ratio from the upstream stage through a document coupling (EqWeFiC couplings/microphysics_column*.esm), where the mount-edge template library lowers `input_qi` to this name. Unused by the standalone inline tests, which lower `input_qi` to a dumped column profile instead."
    },
    "qr_in": {
      "type": "parameter",
      "units": "kg/kg",
      "shape": [
        "lev"
      ],
      "default": 0.0,
      "description": "Coupling-target parameter (additive): receives the rain mixing ratio from the upstream stage through a document coupling (EqWeFiC couplings/microphysics_column*.esm), where the mount-edge template library lowers `input_qr` to this name. Unused by the standalone inline tests, which lower `input_qr` to a dumped column profile instead."
    },
    "qs_in": {
      "type": "parameter",
      "units": "kg/kg",
      "shape": [
        "lev"
      ],
      "default": 0.0,
      "description": "Coupling-target parameter (additive): receives the snow mixing ratio from the upstream stage through a document coupling (EqWeFiC couplings/microphysics_column*.esm), where the mount-edge template library lowers `input_qs` to this name. Unused by the standalone inline tests, which lower `input_qs` to a dumped column profile instead."
    },
    "qg_in": {
      "type": "parameter",
      "units": "kg/kg",
      "shape": [
        "lev"
      ],
      "default": 0.0,
      "description": "Coupling-target parameter (additive): receives the graupel mixing ratio from the upstream stage through a document coupling (EqWeFiC couplings/microphysics_column*.esm), where the mount-edge template library lowers `input_qg` to this name. Unused by the standalone inline tests, which lower `input_qg` to a dumped column profile instead."
    },
    "rho_in": {
      "type": "parameter",
      "units": "kg/m^3",
      "shape": [
        "lev"
      ],
      "default": 0.0,
      "description": "Coupling-target parameter (additive): receives the air density from the upstream stage through a document coupling (EqWeFiC couplings/microphysics_column*.esm), where the mount-edge template library lowers `input_rho` to this name. Unused by the standalone inline tests, which lower `input_rho` to a dumped column profile instead."
    },
    "p_in": {
      "type": "parameter",
      "units": "Pa",
      "shape": [
        "lev"
      ],
      "default": 0.0,
      "description": "Coupling-target parameter (additive): receives the pressure from the upstream stage through a document coupling (EqWeFiC couplings/microphysics_column*.esm), where the mount-edge template library lowers `input_p` to this name. Unused by the standalone inline tests, which lower `input_p` to a dumped column profile instead."
    },
    "T": {
      "type": "unknown",
      "units": "K",
      "shape": [
        "lev"
      ],
      "description": "Absolute temperature."
    },
    "qi": {
      "type": "unknown",
      "units": "kg/kg",
      "shape": [
        "lev"
      ],
      "description": "Cloud-ice mixing ratio."
    },
    "qr": {
      "type": "unknown",
      "units": "kg/kg",
      "shape": [
        "lev"
      ],
      "description": "Rain mixing ratio."
    },
    "qs": {
      "type": "unknown",
      "units": "kg/kg",
      "shape": [
        "lev"
      ],
      "description": "Snow mixing ratio."
    },
    "qg": {
      "type": "unknown",
      "units": "kg/kg",
      "shape": [
        "lev"
      ],
      "description": "Graupel mixing ratio."
    },
    "rho": {
      "type": "unknown",
      "units": "kg/m^3",
      "shape": [
        "lev"
      ],
      "description": "Dry-air density (WSM6 den)."
    },
    "p": {
      "type": "unknown",
      "units": "Pa",
      "shape": [
        "lev"
      ],
      "description": "Pressure; enters only the vapor diffusivity Dv."
    },
    "pidn0r": {
      "type": "unknown",
      "units": "kg/m^7",
      "description": "pi rho_w n0r (WSM6 pidn0r)."
    },
    "pidn0s": {
      "type": "unknown",
      "units": "kg/m^7",
      "description": "pi rho_s n0s (WSM6 pidn0s)."
    },
    "pidn0g": {
      "type": "unknown",
      "units": "kg/m^7",
      "description": "pi rho_g n0g (WSM6 pidn0g)."
    },
    "rslope_r_max": {
      "type": "unknown",
      "units": "m",
      "description": "1/lamdarmax (WSM6 rslopermax)."
    },
    "rslope_s_max": {
      "type": "unknown",
      "units": "m",
      "description": "1/lamdasmax (WSM6 rslopesmax)."
    },
    "rslope_g_max": {
      "type": "unknown",
      "units": "m",
      "description": "1/lamdagmax (WSM6 rslopegmax)."
    },
    "pvtr": {
      "type": "unknown",
      "units": "m^(1/5)/s",
      "description": "Rain fall-speed constant avtr Gamma(4 + bvtr)/6 (WSM6 pvtr)."
    },
    "precs1": {
      "type": "unknown",
      "units": "1/m^4",
      "description": "Snow deposition/melting coefficient of the non-ventilated term, 4 n0s a_v (WSM6 precs1)."
    },
    "precs2": {
      "type": "unknown",
      "units": "1/(m^(741/200)*s^(1/2))",
      "description": "Snow deposition/melting coefficient of the ventilated term, 4 n0s b_v sqrt(avts) Gamma(2.5 + bvts/2) (WSM6 precs2); units for bvts = 0.41."
    },
    "precg1": {
      "type": "unknown",
      "units": "1/m^4",
      "description": "Graupel deposition/melting coefficient of the non-ventilated term, 2 pi n0g a_v (WSM6 precg1)."
    },
    "precg2": {
      "type": "unknown",
      "units": "1/(m^(39/10)*s^(1/2))",
      "description": "Graupel deposition/melting coefficient of the ventilated term, 2 pi n0g b_v sqrt(avtg) Gamma(2.5 + bvtg/2) (WSM6 precg2); units for bvtg = 0.8."
    },
    "pvts": {
      "type": "unknown",
      "units": "m^(59/100)/s",
      "description": "Snow fall-speed constant avts Gamma(4 + bvts)/6 (WSM6 pvts)."
    },
    "pvtg": {
      "type": "unknown",
      "units": "m^(1/5)/s",
      "description": "Graupel fall-speed constant avtg Gamma(4 + bvtg)/6 (WSM6 pvtg)."
    },
    "denfac": {
      "type": "unknown",
      "units": "1",
      "shape": [
        "lev"
      ],
      "description": "Density correction of the fall speed, (rho0/rho)^(1/2) (WSM6 denfac)."
    },
    "n0sfac": {
      "type": "unknown",
      "units": "1",
      "shape": [
        "lev"
      ],
      "description": "Snow intercept temperature factor n0s(T)/n0s (WSM6 n0sfac)."
    },
    "rslope_r": {
      "type": "unknown",
      "units": "m",
      "shape": [
        "lev"
      ],
      "description": "Inverse slope of the raindrop distribution (WSM6 rslope(:,:,1))."
    },
    "rslopeb_r": {
      "type": "unknown",
      "units": "m^(4/5)",
      "shape": [
        "lev"
      ],
      "description": "lambda_r^-bvtr (WSM6 rslopeb(:,:,1))."
    },
    "rslope2_r": {
      "type": "unknown",
      "units": "m^2",
      "shape": [
        "lev"
      ],
      "description": "lambda_r^-2."
    },
    "rslope3_r": {
      "type": "unknown",
      "units": "m^3",
      "shape": [
        "lev"
      ],
      "description": "lambda_r^-3."
    },
    "rslope_s": {
      "type": "unknown",
      "units": "m",
      "shape": [
        "lev"
      ],
      "description": "Inverse slope of the snow distribution with the temperature-dependent intercept (WSM6 rslope(:,:,2))."
    },
    "rslopeb_s": {
      "type": "unknown",
      "units": "m^(41/100)",
      "shape": [
        "lev"
      ],
      "description": "lambda_s^-bvts (WSM6 rslopeb(:,:,2))."
    },
    "rslope2_s": {
      "type": "unknown",
      "units": "m^2",
      "shape": [
        "lev"
      ],
      "description": "lambda_s^-2."
    },
    "rslope3_s": {
      "type": "unknown",
      "units": "m^3",
      "shape": [
        "lev"
      ],
      "description": "lambda_s^-3."
    },
    "rslope_g": {
      "type": "unknown",
      "units": "m",
      "shape": [
        "lev"
      ],
      "description": "Inverse slope of the graupel distribution (WSM6 rslope(:,:,3))."
    },
    "rslopeb_g": {
      "type": "unknown",
      "units": "m^(4/5)",
      "shape": [
        "lev"
      ],
      "description": "lambda_g^-bvtg (WSM6 rslopeb(:,:,3))."
    },
    "rslope2_g": {
      "type": "unknown",
      "units": "m^2",
      "shape": [
        "lev"
      ],
      "description": "lambda_g^-2."
    },
    "rslope3_g": {
      "type": "unknown",
      "units": "m^3",
      "shape": [
        "lev"
      ],
      "description": "lambda_g^-3."
    },
    "nu": {
      "type": "unknown",
      "units": "m^2/s",
      "shape": [
        "lev"
      ],
      "description": "Kinematic viscosity of air at T (WSM6 viscos(t, den))."
    },
    "Dv": {
      "type": "unknown",
      "units": "m^2/s",
      "shape": [
        "lev"
      ],
      "description": "Diffusivity of water vapor in air at T and p (WSM6 diffus(t, p))."
    },
    "ka": {
      "type": "unknown",
      "units": "W/(m*K)",
      "shape": [
        "lev"
      ],
      "description": "Thermal conductivity of air at T (WSM6 xka(t, den))."
    },
    "f_vent": {
      "type": "unknown",
      "units": "s^(1/2)/m",
      "shape": [
        "lev"
      ],
      "description": "Ventilation factor (nu/Dv)^(1/3) nu^(-1/2) (rho0/rho)^(1/4) at T (WSM6 work2 = venfac(p, t, den)), shared by rain evaporation, the deposition and evaporation of snow and graupel, and the melting."
    },
    "coeres_r": {
      "type": "unknown",
      "units": "m^(29/10)",
      "shape": [
        "lev"
      ],
      "description": "Ventilation moment of the raindrop distribution lambda_r^-2 (lambda_r^-1 lambda_r^-bvtr)^(1/2) (WSM6 coeres for rain); units for bvtr = 0.8."
    },
    "coeres_s": {
      "type": "unknown",
      "units": "m^(541/200)",
      "shape": [
        "lev"
      ],
      "description": "Ventilation moment of the snow distribution lambda_s^-2 (lambda_s^-1 lambda_s^-bvts)^(1/2) (WSM6 coeres for snow); units for bvts = 0.41."
    },
    "coeres_g": {
      "type": "unknown",
      "units": "m^(29/10)",
      "shape": [
        "lev"
      ],
      "description": "Ventilation moment of the graupel distribution (WSM6 coeres for graupel); units for bvtg = 0.8."
    },
    "xni": {
      "type": "unknown",
      "units": "1/m^3",
      "shape": [
        "lev"
      ],
      "description": "Ice crystal number concentration N_i (WSM6 xni as recomputed in the cold-rain block from the current ice content)."
    },
    "D_i": {
      "type": "unknown",
      "units": "m",
      "shape": [
        "lev"
      ],
      "description": "Mean ice crystal diameter (WSM6 diameter)."
    },
    "vt_i": {
      "type": "unknown",
      "units": "m/s",
      "shape": [
        "lev"
      ],
      "description": "Ice crystal fall speed for the fallout (WSM6 work1c of the Vice block, mp_wsm6.F90 lines 711-718): zero where qi <= 0, otherwise V_i(max(D_i, dimin_fallout)). The guard keeps the speed finite where advection has left qi slightly negative, where D_i (the square root of a negative mean mass) is NaN and a NaN speed would reach the flux even though the falling mass rho max(qi, 0) is zero. The cold-rain rates use D_i directly, as the kernel's vt2i and diameter there have neither guard."
    },
    "vt_r": {
      "type": "unknown",
      "units": "m/s",
      "shape": [
        "lev"
      ],
      "description": "Mass-weighted rain fall speed (WSM6 vt2r)."
    },
    "vt_s": {
      "type": "unknown",
      "units": "m/s",
      "shape": [
        "lev"
      ],
      "description": "Mass-weighted snow fall speed (WSM6 vt2s)."
    },
    "vt_g": {
      "type": "unknown",
      "units": "m/s",
      "shape": [
        "lev"
      ],
      "description": "Mass-weighted graupel fall speed (WSM6 vt2g)."
    },
    "vt_sg": {
      "type": "unknown",
      "units": "m/s",
      "shape": [
        "lev"
      ],
      "description": "Mixing-ratio-weighted snow/graupel fall speed (WSM6 vt2ave)."
    }
  },
  "equations": [
    {
      "lhs": "T",
      "rhs": {
        "op": "input_T",
        "args": []
      }
    },
    {
      "lhs": "qi",
      "rhs": {
        "op": "input_qi",
        "args": []
      }
    },
    {
      "lhs": "qr",
      "rhs": {
        "op": "input_qr",
        "args": []
      }
    },
    {
      "lhs": "qs",
      "rhs": {
        "op": "input_qs",
        "args": []
      }
    },
    {
      "lhs": "qg",
      "rhs": {
        "op": "input_qg",
        "args": []
      }
    },
    {
      "lhs": "rho",
      "rhs": {
        "op": "input_rho",
        "args": []
      }
    },
    {
      "lhs": "p",
      "rhs": {
        "op": "input_p",
        "args": []
      }
    },
    {
      "lhs": "pidn0r",
      "rhs": {
        "op": "*",
        "args": [
          "wrf.piconst",
          "wrf.rhowater",
          "par.n0r"
        ]
      }
    },
    {
      "lhs": "pidn0s",
      "rhs": {
        "op": "*",
        "args": [
          "wrf.piconst",
          "par.dens",
          "par.n0s"
        ]
      }
    },
    {
      "lhs": "pidn0g",
      "rhs": {
        "op": "*",
        "args": [
          "wrf.piconst",
          "par.deng",
          "par.n0g"
        ]
      }
    },
    {
      "lhs": "rslope_r_max",
      "rhs": {
        "op": "/",
        "args": [
          {
            "op": "const",
            "args": [],
            "value": 1,
            "units": "1"
          },
          "par.lamdarmax"
        ]
      }
    },
    {
      "lhs": "rslope_s_max",
      "rhs": {
        "op": "/",
        "args": [
          {
            "op": "const",
            "args": [],
            "value": 1,
            "units": "1"
          },
          "par.lamdasmax"
        ]
      }
    },
    {
      "lhs": "rslope_g_max",
      "rhs": {
        "op": "/",
        "args": [
          {
            "op": "const",
            "args": [],
            "value": 1,
            "units": "1"
          },
          "par.lamdagmax"
        ]
      }
    },
    {
      "lhs": "pvtr",
      "rhs": {
        "op": "/",
        "args": [
          {
            "op": "*",
            "args": [
              "par.avtr",
              "par.g4pbr"
            ]
          },
          {
            "op": "const",
            "args": [],
            "value": 6,
            "units": "1"
          }
        ]
      }
    },
    {
      "lhs": "precs1",
      "rhs": {
        "op": "*",
        "args": [
          {
            "op": "const",
            "args": [],
            "value": 4,
            "units": "1"
          },
          "par.n0s",
          "par.vent_a_snow"
        ]
      }
    },
    {
      "lhs": "precs2",
      "rhs": {
        "op": "*",
        "args": [
          {
            "op": "const",
            "args": [],
            "value": 4,
            "units": "1"
          },
          "par.n0s",
          "par.vent_b_snow",
          {
            "op": "sqrt",
            "args": [
              "par.avts"
            ]
          },
          "par.g5pbso2"
        ]
      }
    },
    {
      "lhs": "precg1",
      "rhs": {
        "op": "*",
        "args": [
          {
            "op": "const",
            "args": [],
            "value": 2,
            "units": "1"
          },
          "wrf.piconst",
          "par.n0g",
          "par.vent_a"
        ]
      }
    },
    {
      "lhs": "precg2",
      "rhs": {
        "op": "*",
        "args": [
          {
            "op": "const",
            "args": [],
            "value": 2,
            "units": "1"
          },
          "wrf.piconst",
          "par.n0g",
          "par.vent_b",
          {
            "op": "sqrt",
            "args": [
              "par.avtg"
            ]
          },
          "par.g5pbro2"
        ]
      }
    },
    {
      "lhs": "pvts",
      "rhs": {
        "op": "/",
        "args": [
          {
            "op": "*",
            "args": [
              "par.avts",
              "par.g4pbs"
            ]
          },
          {
            "op": "const",
            "args": [],
            "value": 6,
            "units": "1"
          }
        ]
      }
    },
    {
      "lhs": "pvtg",
      "rhs": {
        "op": "/",
        "args": [
          {
            "op": "*",
            "args": [
              "par.avtg",
              "par.g4pbr"
            ]
          },
          {
            "op": "const",
            "args": [],
            "value": 6,
            "units": "1"
          }
        ]
      }
    },
    {
      "lhs": "denfac",
      "rhs": {
        "op": "sqrt",
        "args": [
          {
            "op": "/",
            "args": [
              "wrf.rhoair0",
              "rho"
            ]
          }
        ]
      }
    },
    {
      "lhs": "n0sfac",
      "rhs": {
        "op": "apply_expression_template",
        "args": [],
        "name": "snow_intercept_factor",
        "bindings": {
          "T": "T",
          "t0": "wrf.svpt0",
          "alpha": "par.alpha_n0s",
          "n0": "par.n0s",
          "n0max": "par.n0smax"
        }
      }
    },
    {
      "lhs": "rslope_r",
      "rhs": {
        "op": "apply_expression_template",
        "args": [],
        "name": "marshall_palmer_inverse_slope",
        "bindings": {
          "q": "qr",
          "rho": "rho",
          "pidn0": "pidn0r",
          "q_min": "par.qcrmin",
          "rslope_max": "rslope_r_max"
        }
      }
    },
    {
      "lhs": "rslopeb_r",
      "rhs": {
        "op": "^",
        "args": [
          "rslope_r",
          "par.bvtr"
        ]
      }
    },
    {
      "lhs": "rslope2_r",
      "rhs": {
        "op": "^",
        "args": [
          "rslope_r",
          2
        ]
      }
    },
    {
      "lhs": "rslope3_r",
      "rhs": {
        "op": "^",
        "args": [
          "rslope_r",
          3
        ]
      }
    },
    {
      "lhs": "rslope_s",
      "rhs": {
        "op": "apply_expression_template",
        "args": [],
        "name": "marshall_palmer_inverse_slope",
        "bindings": {
          "q": "qs",
          "rho": "rho",
          "pidn0": {
            "op": "*",
            "args": [
              "pidn0s",
              "n0sfac"
            ]
          },
          "q_min": "par.qcrmin",
          "rslope_max": "rslope_s_max"
        }
      }
    },
    {
      "lhs": "rslopeb_s",
      "rhs": {
        "op": "^",
        "args": [
          "rslope_s",
          "par.bvts"
        ]
      }
    },
    {
      "lhs": "rslope2_s",
      "rhs": {
        "op": "^",
        "args": [
          "rslope_s",
          2
        ]
      }
    },
    {
      "lhs": "rslope3_s",
      "rhs": {
        "op": "^",
        "args": [
          "rslope_s",
          3
        ]
      }
    },
    {
      "lhs": "rslope_g",
      "rhs": {
        "op": "apply_expression_template",
        "args": [],
        "name": "marshall_palmer_inverse_slope",
        "bindings": {
          "q": "qg",
          "rho": "rho",
          "pidn0": "pidn0g",
          "q_min": "par.qcrmin",
          "rslope_max": "rslope_g_max"
        }
      }
    },
    {
      "lhs": "rslopeb_g",
      "rhs": {
        "op": "^",
        "args": [
          "rslope_g",
          "par.bvtg"
        ]
      }
    },
    {
      "lhs": "rslope2_g",
      "rhs": {
        "op": "^",
        "args": [
          "rslope_g",
          2
        ]
      }
    },
    {
      "lhs": "rslope3_g",
      "rhs": {
        "op": "^",
        "args": [
          "rslope_g",
          3
        ]
      }
    },
    {
      "lhs": "nu",
      "rhs": {
        "op": "apply_expression_template",
        "args": [],
        "name": "kinematic_viscosity_of_air",
        "bindings": {
          "T": "T",
          "rho": "rho",
          "coef": "par.viscos_coef",
          "T_sutherland": "par.sutherland_T"
        }
      }
    },
    {
      "lhs": "Dv",
      "rhs": {
        "op": "apply_expression_template",
        "args": [],
        "name": "diffusivity_of_water_vapor",
        "bindings": {
          "T": "T",
          "p": "p",
          "coef": "par.diffus_coef",
          "expn": "par.diffus_exp"
        }
      }
    },
    {
      "lhs": "ka",
      "rhs": {
        "op": "apply_expression_template",
        "args": [],
        "name": "thermal_conductivity_of_air",
        "bindings": {
          "nu": "nu",
          "rho": "rho",
          "coef": "par.xka_coef"
        }
      }
    },
    {
      "lhs": "f_vent",
      "rhs": {
        "op": "apply_expression_template",
        "args": [],
        "name": "ventilation_factor",
        "bindings": {
          "nu": "nu",
          "Dv": "Dv",
          "rho": "rho",
          "rho0": "wrf.rhoair0"
        }
      }
    },
    {
      "lhs": "coeres_r",
      "rhs": {
        "op": "apply_expression_template",
        "args": [],
        "name": "ventilation_slope_factor",
        "bindings": {
          "rslope": "rslope_r",
          "rslopeb": "rslopeb_r",
          "rslope2": "rslope2_r"
        }
      }
    },
    {
      "lhs": "coeres_s",
      "rhs": {
        "op": "apply_expression_template",
        "args": [],
        "name": "ventilation_slope_factor",
        "bindings": {
          "rslope": "rslope_s",
          "rslopeb": "rslopeb_s",
          "rslope2": "rslope2_s"
        }
      }
    },
    {
      "lhs": "coeres_g",
      "rhs": {
        "op": "apply_expression_template",
        "args": [],
        "name": "ventilation_slope_factor",
        "bindings": {
          "rslope": "rslope_g",
          "rslopeb": "rslopeb_g",
          "rslope2": "rslope2_g"
        }
      }
    },
    {
      "lhs": "xni",
      "rhs": {
        "op": "apply_expression_template",
        "args": [],
        "name": "ice_crystal_number",
        "bindings": {
          "qi": "qi",
          "rho": "rho",
          "q_min": "par.qmin",
          "coef": "par.xni_coef",
          "n_min": "par.xni_min",
          "n_max": "par.xni_max"
        }
      }
    },
    {
      "lhs": "D_i",
      "rhs": {
        "op": "apply_expression_template",
        "args": [],
        "name": "ice_crystal_diameter",
        "bindings": {
          "qi": "qi",
          "rho": "rho",
          "xni": "xni",
          "dicon": "par.dicon",
          "dimax": "par.dimax"
        }
      }
    },
    {
      "lhs": "vt_i",
      "rhs": {
        "op": "ifelse",
        "args": [
          {
            "op": ">",
            "args": [
              "qi",
              0
            ]
          },
          {
            "op": "apply_expression_template",
            "args": [],
            "name": "ice_crystal_fall_speed",
            "bindings": {
              "D": {
                "op": "max",
                "args": [
                  "D_i",
                  "par.dimin_fallout"
                ]
              },
              "coef": "par.vt_ice_coef",
              "expn": "par.vt_ice_exp"
            }
          },
          0
        ]
      }
    },
    {
      "lhs": "vt_r",
      "rhs": {
        "op": "apply_expression_template",
        "args": [],
        "name": "precipitation_fall_speed",
        "bindings": {
          "pvt": "pvtr",
          "rslopeb": "rslopeb_r",
          "denfac": "denfac"
        }
      }
    },
    {
      "lhs": "vt_s",
      "rhs": {
        "op": "apply_expression_template",
        "args": [],
        "name": "precipitation_fall_speed",
        "bindings": {
          "pvt": "pvts",
          "rslopeb": "rslopeb_s",
          "denfac": "denfac"
        }
      }
    },
    {
      "lhs": "vt_g",
      "rhs": {
        "op": "apply_expression_template",
        "args": [],
        "name": "precipitation_fall_speed",
        "bindings": {
          "pvt": "pvtg",
          "rslopeb": "rslopeb_g",
          "denfac": "denfac"
        }
      }
    },
    {
      "lhs": "vt_sg",
      "rhs": {
        "op": "apply_expression_template",
        "args": [],
        "name": "snow_graupel_weighted_mean",
        "bindings": {
          "x_s": "vt_s",
          "q_s": "qs",
          "x_g": "vt_g",
          "q_g": "qg",
          "q_floor": "par.qmin"
        }
      }
    }
  ],
  "tests": [
    {
      "id": "qss_step250_row23_col24_mixed_phase",
      "description": "Reference: WRF 4.8 em_quarter_ss idealized supercell (GNU real32 build, dx = 2 km, dt = 12 s, 40 layers, WSM6 only) dumped by the instrumented ctessum-claude/WRF fork (module_esm_dump with esm_dump_inner hooks inside mp_wsm6_run of the ctessum-claude/MMM-physics fork, commit 52cfbd7) and replayed through the real64 (kind_phys = real64) standalone kernels/wsm6_driver at the WRF step. POINTWISE and step-free: the inputs are the state at which the kernel evaluates its process rates (t_rates, qi/qr/qs/qg_rates: after the sub-step's sedimentation, melting, freezing and the slope update; den: kernel argument), the expected values are the inverse slopes, their powers and n0sfac the kernel dumps for that state and the mp_wsm6_init constants, all from the real64 replay. The rates state is the correct one because slope_wsm6 is called again after melting/freezing ('update the slope parameters for microphysics computation'). Real64 replay vs real32 in-model dump: 3-4e-7 relative in rslope*. Residual esm-vs-real64 mismatch comes from the kernel's default-real literals and real32 WRF constants (pi, bvtr, bvts, avts, dens, n0s, ...; EqWeFiC FORTRAN_BUGS.md N2): measured with zero tolerances it is <= 3e-8 relative in the inverse slopes and their powers, 1.5e-8 in the fall-speed constants; tolerances are 1e-6 relative (5-10x the measured residual) on scalars and spot checks and absolute Linf bounds at 1e-6 of each column's maximum. xni, D_i and the fall speeds are not dumped by the kernel at this state (the dumped xni is the stale value from before the ice fallout) and are checked through the accretion and deposition rates they enter (cold_accretion.esm, ice_deposition.esm). Regime: supercell step 250 (t = 50 min), tile row j = 23, column i = 24: rain in layers 1-16 (up to 1.3e-2 kg/kg), snow in layers 6-33 and graupel in layers 1-33 (up to 1e-2), ice in layers 9-39, freezing level at layer 9, temperatures 199-298 K so n0sfac spans 1 to 7.5e3.",
      "parameter_overrides": {},
      "expression_template_imports": [
        {
          "ref": "./tests/qss_step250_row23_col24_mixed_phase_inputs.esm"
        }
      ],
      "time_span": {
        "start": 0.0,
        "end": 1.0
      },
      "assertions": [
        {
          "variable": "pidn0r",
          "time": 0.0,
          "expected": 25132741928.100586,
          "tolerance": {
            "rel": 1e-06
          }
        },
        {
          "variable": "pidn0s",
          "time": 0.0,
          "expected": 628318548.2025146,
          "tolerance": {
            "rel": 1e-06
          }
        },
        {
          "variable": "pidn0g",
          "time": 0.0,
          "expected": 6283185482.0251465,
          "tolerance": {
            "rel": 1e-06
          }
        },
        {
          "variable": "rslope_r_max",
          "time": 0.0,
          "expected": 1.25e-05,
          "tolerance": {
            "rel": 1e-06
          }
        },
        {
          "variable": "rslope_s_max",
          "time": 0.0,
          "expected": 1e-05,
          "tolerance": {
            "rel": 1e-06
          }
        },
        {
          "variable": "rslope_g_max",
          "time": 0.0,
          "expected": 1.6666666666666667e-05,
          "tolerance": {
            "rel": 1e-06
          }
        },
        {
          "variable": "pvtr",
          "time": 0.0,
          "expected": 2500.068237337106,
          "tolerance": {
            "rel": 1e-06
          }
        },
        {
          "variable": "pvts",
          "time": 0.0,
          "expected": 20.051785002845385,
          "tolerance": {
            "rel": 1e-06
          }
        },
        {
          "variable": "pvtg",
          "time": 0.0,
          "expected": 979.9530756581653,
          "tolerance": {
            "rel": 1e-06
          }
        },
        {
          "variable": "precs1",
          "time": 0.0,
          "expected": 5199999.809265137,
          "tolerance": {
            "rel": 1e-06
          }
        },
        {
          "variable": "precs2",
          "time": 0.0,
          "expected": 18681871.662510514,
          "tolerance": {
            "rel": 1e-06
          }
        },
        {
          "variable": "precg1",
          "time": 0.0,
          "expected": 19603537.984864943,
          "tolerance": {
            "rel": 1e-06
          }
        },
        {
          "variable": "precg2",
          "time": 0.0,
          "expected": 258522819.51234746,
          "tolerance": {
            "rel": 1e-06
          }
        },
        {
          "variable": "denfac",
          "time": 0.0,
          "reduce": "Linf_error",
          "expected": 0.0,
          "reference": {
            "op": "faq",
            "output_idx": [
              "k"
            ],
            "args": [],
            "ranges": {
              "k": {
                "from": "lev"
              }
            },
            "expr": {
              "op": "index",
              "args": [
                {
                  "op": "const",
                  "args": [],
                  "value": [
                    1.074297648601964,
                    1.0988758165188706,
                    1.1288867811848777,
                    1.1602700614599697,
                    1.192123954468512,
                    1.2246820558855798,
                    1.2582500928449838,
                    1.292808506687401,
                    1.3283037231725008,
                    1.3645763776496205,
                    1.4020583602973977,
                    1.4396854385640094,
                    1.4835556358342181,
                    1.5248115440101326,
                    1.5664510609796232,
                    1.6091176379658874,
                    1.6525457933489218,
                    1.6967181474622186,
                    1.74166539824332,
                    1.787388938078431,
                    1.833815931787568,
                    1.8819464686130778,
                    1.930171827665902,
                    1.9789910276164668,
                    2.0287444851154315,
                    2.08004478930757,
                    2.1338844217674344,
                    2.192584031512916,
                    2.272919650733487,
                    2.4071314861423874,
                    2.517537815782692,
                    2.628772485136029,
                    2.7445896462038344,
                    2.862603538137479,
                    2.982749200059628,
                    3.1061754351938746,
                    3.2347614364631796,
                    3.3704631345827436,
                    3.515037802394403,
                    3.669399516419166
                  ]
                },
                "k"
              ]
            }
          },
          "tolerance": {
            "abs": 4e-06,
            "rel": 0.0
          }
        },
        {
          "variable": "n0sfac",
          "time": 0.0,
          "reduce": "Linf_error",
          "expected": 0.0,
          "reference": {
            "op": "faq",
            "output_idx": [
              "k"
            ],
            "args": [],
            "ranges": {
              "k": {
                "from": "lev"
              }
            },
            "expr": {
              "op": "index",
              "args": [
                {
                  "op": "const",
                  "args": [],
                  "value": [
                    1.0,
                    1.0,
                    1.0,
                    1.0,
                    1.0,
                    1.0,
                    1.0,
                    1.0,
                    1.1825112873911094,
                    1.7049530315644392,
                    2.4541906799303796,
                    3.741850119673207,
                    5.27635198746822,
                    6.596432305320483,
                    10.033039831562242,
                    15.258826145357974,
                    23.311820394297655,
                    36.35590465455331,
                    57.58561792702656,
                    92.14055694357549,
                    149.87590757361073,
                    245.47355252058227,
                    390.07517398741066,
                    646.9619297118361,
                    1088.5718796644603,
                    1830.9096364868121,
                    2988.435586654293,
                    4562.104742949778,
                    4607.395008849928,
                    1657.2166078233513,
                    1126.8229866186819,
                    849.7362410646456,
                    662.3915116163065,
                    562.4186844016135,
                    521.7133976302346,
                    518.8601476109255,
                    538.1583973098938,
                    568.6910181632314,
                    603.1585109106451,
                    642.9997044852912
                  ]
                },
                "k"
              ]
            }
          },
          "tolerance": {
            "abs": 0.008,
            "rel": 0.0
          }
        },
        {
          "variable": "rslope_r",
          "time": 0.0,
          "reduce": "Linf_error",
          "expected": 0.0,
          "reference": {
            "op": "faq",
            "output_idx": [
              "k"
            ],
            "args": [],
            "ranges": {
              "k": {
                "from": "lev"
              }
            },
            "expr": {
              "op": "index",
              "args": [
                {
                  "op": "const",
                  "args": [],
                  "value": [
                    7.9906646804699e-05,
                    0.00010344421944512668,
                    0.00021317834431825756,
                    0.0003944255263410482,
                    0.0004749145060720375,
                    0.0005322665799138319,
                    0.0005865828066762028,
                    0.0006378598144903875,
                    0.000680213262012178,
                    0.0007167133495901135,
                    0.000748229217723808,
                    0.000731039049265215,
                    0.0005477001284392731,
                    0.0003818205211059693,
                    0.00010327801509185513,
                    5.158844364893619e-05,
                    1.25e-05,
                    1.25e-05,
                    1.25e-05,
                    1.25e-05,
                    1.25e-05,
                    1.25e-05,
                    1.25e-05,
                    1.25e-05,
                    1.25e-05,
                    1.25e-05,
                    1.25e-05,
                    1.25e-05,
                    1.25e-05,
                    1.25e-05,
                    1.25e-05,
                    1.25e-05,
                    1.25e-05,
                    1.25e-05,
                    1.25e-05,
                    1.25e-05,
                    1.25e-05,
                    1.25e-05,
                    1.25e-05,
                    1.25e-05
                  ]
                },
                "k"
              ]
            }
          },
          "tolerance": {
            "abs": 1e-09,
            "rel": 0.0
          }
        },
        {
          "variable": "rslopeb_r",
          "time": 0.0,
          "reduce": "Linf_error",
          "expected": 0.0,
          "reference": {
            "op": "faq",
            "output_idx": [
              "k"
            ],
            "args": [],
            "ranges": {
              "k": {
                "from": "lev"
              }
            },
            "expr": {
              "op": "index",
              "args": [
                {
                  "op": "const",
                  "args": [],
                  "value": [
                    0.0005273103263606614,
                    0.0006482834490548203,
                    0.0011560973990689856,
                    0.0018913502902156607,
                    0.0021942813327791373,
                    0.0024038276134050246,
                    0.0025981452386019876,
                    0.0027783065045619247,
                    0.0029249337807164357,
                    0.003049835094343676,
                    0.0031566591719503065,
                    0.003098506584138366,
                    0.0024594286924326633,
                    0.0018428389041946107,
                    0.0006474500348220588,
                    0.0003715710671083134,
                    0.00011954404638495534,
                    0.00011954404638495534,
                    0.00011954404638495534,
                    0.00011954404638495534,
                    0.00011954404638495534,
                    0.00011954404638495534,
                    0.00011954404638495534,
                    0.00011954404638495534,
                    0.00011954404638495534,
                    0.00011954404638495534,
                    0.00011954404638495534,
                    0.00011954404638495534,
                    0.00011954404638495534,
                    0.00011954404638495534,
                    0.00011954404638495534,
                    0.00011954404638495534,
                    0.00011954404638495534,
                    0.00011954404638495534,
                    0.00011954404638495534,
                    0.00011954404638495534,
                    0.00011954404638495534,
                    0.00011954404638495534,
                    0.00011954404638495534,
                    0.00011954404638495534
                  ]
                },
                "k"
              ]
            }
          },
          "tolerance": {
            "abs": 4e-09,
            "rel": 0.0
          }
        },
        {
          "variable": "rslope2_r",
          "time": 0.0,
          "reduce": "Linf_error",
          "expected": 0.0,
          "reference": {
            "op": "faq",
            "output_idx": [
              "k"
            ],
            "args": [],
            "ranges": {
              "k": {
                "from": "lev"
              }
            },
            "expr": {
              "op": "index",
              "args": [
                {
                  "op": "const",
                  "args": [],
                  "value": [
                    6.385072203570913e-09,
                    1.0700706536611525e-08,
                    4.544500648627358e-08,
                    1.5557149582941292e-07,
                    2.2554378807764737e-07,
                    2.833077120931676e-07,
                    3.4407938908813156e-07,
                    4.068651429417116e-07,
                    4.626900818172478e-07,
                    5.136780254806803e-07,
                    5.598469622555817e-07,
                    5.344180915505894e-07,
                    2.999754306923963e-07,
                    1.4578691033763395e-07,
                    1.0666348401313457e-08,
                    2.661367518119465e-09,
                    1.5625e-10,
                    1.5625e-10,
                    1.5625e-10,
                    1.5625e-10,
                    1.5625e-10,
                    1.5625e-10,
                    1.5625e-10,
                    1.5625e-10,
                    1.5625e-10,
                    1.5625e-10,
                    1.5625e-10,
                    1.5625e-10,
                    1.5625e-10,
                    1.5625e-10,
                    1.5625e-10,
                    1.5625e-10,
                    1.5625e-10,
                    1.5625e-10,
                    1.5625e-10,
                    1.5625e-10,
                    1.5625e-10,
                    1.5625e-10,
                    1.5625e-10,
                    1.5625e-10
                  ]
                },
                "k"
              ]
            }
          },
          "tolerance": {
            "abs": 6e-13,
            "rel": 0.0
          }
        },
        {
          "variable": "rslope3_r",
          "time": 0.0,
          "reduce": "Linf_error",
          "expected": 0.0,
          "reference": {
            "op": "faq",
            "output_idx": [
              "k"
            ],
            "args": [],
            "ranges": {
              "k": {
                "from": "lev"
              }
            },
            "expr": {
              "op": "index",
              "args": [
                {
                  "op": "const",
                  "args": [],
                  "value": [
                    5.10209709393242e-13,
                    1.106926235191144e-12,
                    9.687891240276277e-12,
                    6.136136912618038e-11,
                    1.071140167125122e-10,
                    1.507952269790429e-10,
                    2.0183105377074944e-10,
                    2.5952292459940517e-10,
                    3.1472792985359166e-10,
                    3.6815989825309403e-10,
                    4.188938546135442e-10,
                    3.9068049355727353e-10,
                    1.6429658191885172e-10,
                    5.5664434075544614e-11,
                    1.101599291165836e-12,
                    1.3729580823761518e-13,
                    1.953125e-15,
                    1.953125e-15,
                    1.953125e-15,
                    1.953125e-15,
                    1.953125e-15,
                    1.953125e-15,
                    1.953125e-15,
                    1.953125e-15,
                    1.953125e-15,
                    1.953125e-15,
                    1.953125e-15,
                    1.953125e-15,
                    1.953125e-15,
                    1.953125e-15,
                    1.953125e-15,
                    1.953125e-15,
                    1.953125e-15,
                    1.953125e-15,
                    1.953125e-15,
                    1.953125e-15,
                    1.953125e-15,
                    1.953125e-15,
                    1.953125e-15,
                    1.953125e-15
                  ]
                },
                "k"
              ]
            }
          },
          "tolerance": {
            "abs": 5e-16,
            "rel": 0.0
          }
        },
        {
          "variable": "rslope_s",
          "time": 0.0,
          "reduce": "Linf_error",
          "expected": 0.0,
          "reference": {
            "op": "faq",
            "output_idx": [
              "k"
            ],
            "args": [],
            "ranges": {
              "k": {
                "from": "lev"
              }
            },
            "expr": {
              "op": "index",
              "args": [
                {
                  "op": "const",
                  "args": [],
                  "value": [
                    1e-05,
                    1e-05,
                    1e-05,
                    1e-05,
                    1e-05,
                    1e-05,
                    1e-05,
                    1e-05,
                    9.460460197376163e-05,
                    0.00010027379246572894,
                    0.00010442343767052188,
                    0.00013084689901011744,
                    0.0003310072533869943,
                    0.00041340611608586933,
                    0.00043535099106495746,
                    0.00043339021747194824,
                    0.000415096999389509,
                    0.0003874691700738929,
                    0.00035425010009408945,
                    0.00031849236060218654,
                    0.0002882608022791473,
                    0.000259042868468227,
                    0.0002312483490308467,
                    0.00020237919002182177,
                    0.00017477916832777917,
                    0.0001503563263394415,
                    0.00012834866165478486,
                    0.00010486759342930937,
                    7.814829408383699e-05,
                    5.4578082265512204e-05,
                    6.91243452612679e-06,
                    4.730988569543649e-06,
                    1e-05,
                    1e-05,
                    1e-05,
                    1e-05,
                    1e-05,
                    1e-05,
                    1e-05,
                    1e-05
                  ]
                },
                "k"
              ]
            }
          },
          "tolerance": {
            "abs": 1e-09,
            "rel": 0.0
          }
        },
        {
          "variable": "rslopeb_s",
          "time": 0.0,
          "reduce": "Linf_error",
          "expected": 0.0,
          "reference": {
            "op": "faq",
            "output_idx": [
              "k"
            ],
            "args": [],
            "ranges": {
              "k": {
                "from": "lev"
              }
            },
            "expr": {
              "op": "index",
              "args": [
                {
                  "op": "const",
                  "args": [],
                  "value": [
                    0.008912509748296044,
                    0.008912509748296044,
                    0.008912509748296044,
                    0.008912509748296044,
                    0.008912509748296044,
                    0.008912509748296044,
                    0.008912509748296044,
                    0.008912509748296044,
                    0.02239360648139654,
                    0.022934372656814254,
                    0.023318853211544248,
                    0.02557837923334058,
                    0.037422551247590634,
                    0.04099345661414587,
                    0.04187204985387358,
                    0.0417946261384841,
                    0.04106211790041245,
                    0.039918778607405274,
                    0.038478408842378096,
                    0.036835842773786966,
                    0.03535998767598792,
                    0.033844054477120585,
                    0.03230518673423372,
                    0.03058637530110421,
                    0.02880187608020327,
                    0.02707820757721528,
                    0.025377010837343783,
                    0.023359468010091956,
                    0.020706038184534575,
                    0.017872179045431792,
                    0.007660352260143019,
                    0.006557379181415966,
                    0.008912509748296044,
                    0.008912509748296044,
                    0.008912509748296044,
                    0.008912509748296044,
                    0.008912509748296044,
                    0.008912509748296044,
                    0.008912509748296044,
                    0.008912509748296044
                  ]
                },
                "k"
              ]
            }
          },
          "tolerance": {
            "abs": 5e-08,
            "rel": 0.0
          }
        },
        {
          "variable": "rslope2_s",
          "time": 0.0,
          "reduce": "Linf_error",
          "expected": 0.0,
          "reference": {
            "op": "faq",
            "output_idx": [
              "k"
            ],
            "args": [],
            "ranges": {
              "k": {
                "from": "lev"
              }
            },
            "expr": {
              "op": "index",
              "args": [
                {
                  "op": "const",
                  "args": [],
                  "value": [
                    1.0000000000000002e-10,
                    1.0000000000000002e-10,
                    1.0000000000000002e-10,
                    1.0000000000000002e-10,
                    1.0000000000000002e-10,
                    1.0000000000000002e-10,
                    1.0000000000000002e-10,
                    1.0000000000000002e-10,
                    8.950030714613862e-09,
                    1.0054833455460077e-08,
                    1.0904254334929369e-08,
                    1.7120910980563872e-08,
                    1.0956580179480185e-07,
                    1.7090461681720327e-07,
                    1.8953048542124067e-07,
                    1.878270806003826e-07,
                    1.7230551890217406e-07,
                    1.5013235775775134e-07,
                    1.254931334166724e-07,
                    1.0143738376195322e-07,
                    8.309429013061765e-08,
                    6.710320770424715e-08,
                    5.34757989294923e-08,
                    4.0957336553888644e-08,
                    3.054775768135016e-08,
                    2.2607024870292634e-08,
                    1.6473378948574442e-08,
                    1.0997212151654928e-08,
                    6.107155868213872e-09,
                    2.9787670637810175e-09,
                    4.77817510779897e-11,
                    2.238225284515266e-11,
                    1.0000000000000002e-10,
                    1.0000000000000002e-10,
                    1.0000000000000002e-10,
                    1.0000000000000002e-10,
                    1.0000000000000002e-10,
                    1.0000000000000002e-10,
                    1.0000000000000002e-10,
                    1.0000000000000002e-10
                  ]
                },
                "k"
              ]
            }
          },
          "tolerance": {
            "abs": 5e-13,
            "rel": 0.0
          }
        },
        {
          "variable": "rslope3_s",
          "time": 0.0,
          "reduce": "Linf_error",
          "expected": 0.0,
          "reference": {
            "op": "faq",
            "output_idx": [
              "k"
            ],
            "args": [],
            "ranges": {
              "k": {
                "from": "lev"
              }
            },
            "expr": {
              "op": "index",
              "args": [
                {
                  "op": "const",
                  "args": [],
                  "value": [
                    1.0000000000000003e-15,
                    1.0000000000000003e-15,
                    1.0000000000000003e-15,
                    1.0000000000000003e-15,
                    1.0000000000000003e-15,
                    1.0000000000000003e-15,
                    1.0000000000000003e-15,
                    1.0000000000000003e-15,
                    8.467140934089857e-13,
                    1.008236283190272e-12,
                    1.138659722887015e-12,
                    2.240218110035052e-12,
                    3.626707511724117e-11,
                    7.065301385954375e-11,
                    8.25122846651596e-11,
                    8.140241930852096e-11,
                    7.152350387454478e-11,
                    5.8171660061632684e-11,
                    4.445595507397712e-11,
                    3.230703180765439e-11,
                    2.3952826737868075e-11,
                    1.738260740712741e-11,
                    1.2366190215550615e-11,
                    8.288912597227137e-12,
                    5.3391116818249085e-12,
                    3.3991092089615895e-12,
                    2.1143361409816366e-12,
                    1.1532511727756096e-12,
                    4.772638128050085e-13,
                    1.6257539385683862e-13,
                    3.3028822587029197e-16,
                    1.0589018237105305e-16,
                    1.0000000000000003e-15,
                    1.0000000000000003e-15,
                    1.0000000000000003e-15,
                    1.0000000000000003e-15,
                    1.0000000000000003e-15,
                    1.0000000000000003e-15,
                    1.0000000000000003e-15,
                    1.0000000000000003e-15
                  ]
                },
                "k"
              ]
            }
          },
          "tolerance": {
            "abs": 3e-16,
            "rel": 0.0
          }
        },
        {
          "variable": "rslope_g",
          "time": 0.0,
          "reduce": "Linf_error",
          "expected": 0.0,
          "reference": {
            "op": "faq",
            "output_idx": [
              "k"
            ],
            "args": [],
            "ranges": {
              "k": {
                "from": "lev"
              }
            },
            "expr": {
              "op": "index",
              "args": [
                {
                  "op": "const",
                  "args": [],
                  "value": [
                    1.6666666666666667e-05,
                    1.6666666666666667e-05,
                    1.6666666666666667e-05,
                    1.6666666666666667e-05,
                    1.6666666666666667e-05,
                    1.6666666666666667e-05,
                    1.6666666666666667e-05,
                    3.1398527368089065e-05,
                    0.0001364510666719362,
                    0.00018967314817269342,
                    0.0002870839981859665,
                    0.0005281491660538626,
                    0.0008535125214094485,
                    0.0009553915185848954,
                    0.0009607139353847703,
                    0.000956427267529938,
                    0.0009388369250674836,
                    0.0009261903661001757,
                    0.0009107531190083242,
                    0.0008933413680236468,
                    0.0008742515969396591,
                    0.000852666072516423,
                    0.0008302128771185466,
                    0.0008065196698757311,
                    0.0007815712090027271,
                    0.0007545462940320004,
                    0.000719174655594718,
                    0.000646807877989271,
                    0.000479388253301879,
                    0.0002586362699388454,
                    3.69475228271646e-05,
                    1.9689455005940403e-05,
                    1.6666666666666667e-05,
                    1.6666666666666667e-05,
                    1.6666666666666667e-05,
                    1.6666666666666667e-05,
                    1.6666666666666667e-05,
                    1.6666666666666667e-05,
                    1.6666666666666667e-05,
                    1.6666666666666667e-05
                  ]
                },
                "k"
              ]
            }
          },
          "tolerance": {
            "abs": 1e-09,
            "rel": 0.0
          }
        },
        {
          "variable": "rslopeb_g",
          "time": 0.0,
          "reduce": "Linf_error",
          "expected": 0.0,
          "reference": {
            "op": "faq",
            "output_idx": [
              "k"
            ],
            "args": [],
            "ranges": {
              "k": {
                "from": "lev"
              }
            },
            "expr": {
              "op": "index",
              "args": [
                {
                  "op": "const",
                  "args": [],
                  "value": [
                    0.00015048005550498836,
                    0.00015048005550498836,
                    0.00015048005550498836,
                    0.00015048005550498836,
                    0.00015048005550498836,
                    0.00015048005550498836,
                    0.00015048005550498836,
                    0.00024976257888216567,
                    0.0008090614377850625,
                    0.001052942456920326,
                    0.0014669224210200314,
                    0.0023889399855586365,
                    0.0035072593432895127,
                    0.003838354382706429,
                    0.003855451429113012,
                    0.0038416829789318352,
                    0.0037850541218868695,
                    0.003744209762360725,
                    0.003694200795804415,
                    0.0036375914460947444,
                    0.003575272191488505,
                    0.0035044764804351603,
                    0.0034304534895492384,
                    0.003351906796391724,
                    0.003268698059176804,
                    0.0031779618185885914,
                    0.003058211110451215,
                    0.0028094428541144147,
                    0.0022108021125288226,
                    0.0013494335385678153,
                    0.0002844907878991953,
                    0.00017194395028331884,
                    0.00015048005550498836,
                    0.00015048005550498836,
                    0.00015048005550498836,
                    0.00015048005550498836,
                    0.00015048005550498836,
                    0.00015048005550498836,
                    0.00015048005550498836,
                    0.00015048005550498836
                  ]
                },
                "k"
              ]
            }
          },
          "tolerance": {
            "abs": 4e-09,
            "rel": 0.0
          }
        },
        {
          "variable": "rslope2_g",
          "time": 0.0,
          "reduce": "Linf_error",
          "expected": 0.0,
          "reference": {
            "op": "faq",
            "output_idx": [
              "k"
            ],
            "args": [],
            "ranges": {
              "k": {
                "from": "lev"
              }
            },
            "expr": {
              "op": "index",
              "args": [
                {
                  "op": "const",
                  "args": [],
                  "value": [
                    2.777777777777778e-10,
                    2.777777777777778e-10,
                    2.777777777777778e-10,
                    2.777777777777778e-10,
                    2.777777777777778e-10,
                    2.777777777777778e-10,
                    2.777777777777778e-10,
                    9.85867520884638e-10,
                    1.8618893595909177e-08,
                    3.597590313774051e-08,
                    8.241722201444001e-08,
                    2.7894154160339055e-07,
                    7.284836242027142e-07,
                    9.127729537839525e-07,
                    9.229712656424925e-07,
                    9.147531180747837e-07,
                    8.814147718701679e-07,
                    8.578285942567774e-07,
                    8.294712437833907e-07,
                    7.980587998223608e-07,
                    7.643158547515441e-07,
                    7.270394312205819e-07,
                    6.89253421333455e-07,
                    6.504739778964582e-07,
                    6.108535547419846e-07,
                    5.69340109837426e-07,
                    5.172121852497813e-07,
                    4.183604310289837e-07,
                    2.298130974038265e-07,
                    6.68927201278793e-08,
                    1.3651194430638494e-09,
                    3.876746384309516e-10,
                    2.777777777777778e-10,
                    2.777777777777778e-10,
                    2.777777777777778e-10,
                    2.777777777777778e-10,
                    2.777777777777778e-10,
                    2.777777777777778e-10,
                    2.777777777777778e-10,
                    2.777777777777778e-10
                  ]
                },
                "k"
              ]
            }
          },
          "tolerance": {
            "abs": 1e-12,
            "rel": 0.0
          }
        },
        {
          "variable": "rslope3_g",
          "time": 0.0,
          "reduce": "Linf_error",
          "expected": 0.0,
          "reference": {
            "op": "faq",
            "output_idx": [
              "k"
            ],
            "args": [],
            "ranges": {
              "k": {
                "from": "lev"
              }
            },
            "expr": {
              "op": "index",
              "args": [
                {
                  "op": "const",
                  "args": [],
                  "value": [
                    4.629629629629631e-15,
                    4.629629629629631e-15,
                    4.629629629629631e-15,
                    4.629629629629631e-15,
                    4.629629629629631e-15,
                    4.629629629629631e-15,
                    4.629629629629631e-15,
                    3.0954788335806424e-14,
                    2.540567891413089e-12,
                    6.823662806491122e-12,
                    2.3660665615285892e-11,
                    1.4732274257560953e-10,
                    6.217698948987517e-10,
                    8.720555384388709e-10,
                    8.867113568624612e-10,
                    8.748948251847561e-10,
                    8.27504734131646e-10,
                    7.945125797658838e-10,
                    7.554435224034372e-10,
                    7.129389399966174e-10,
                    6.68204356582838e-10,
                    6.199218563834276e-10,
                    5.722270659890495e-10,
                    5.246200579158051e-10,
                    4.774255513033064e-10,
                    4.2959346992160185e-10,
                    3.7196589519640295e-10,
                    2.7059882262853374e-10,
                    1.1016969935031498e-10,
                    1.7300883619937826e-11,
                    5.0437781784407804e-14,
                    7.633102350330436e-15,
                    4.629629629629631e-15,
                    4.629629629629631e-15,
                    4.629629629629631e-15,
                    4.629629629629631e-15,
                    4.629629629629631e-15,
                    4.629629629629631e-15,
                    4.629629629629631e-15,
                    4.629629629629631e-15
                  ]
                },
                "k"
              ]
            }
          },
          "tolerance": {
            "abs": 1e-15,
            "rel": 0.0
          }
        },
        {
          "variable": "n0sfac",
          "time": 0.0,
          "coords": {
            "lev": 1
          },
          "expected": 1.0,
          "tolerance": {
            "rel": 1e-06
          }
        },
        {
          "variable": "n0sfac",
          "time": 0.0,
          "coords": {
            "lev": 9
          },
          "expected": 1.1825112873911094,
          "tolerance": {
            "rel": 1e-06
          }
        },
        {
          "variable": "n0sfac",
          "time": 0.0,
          "coords": {
            "lev": 20
          },
          "expected": 92.14055694357549,
          "tolerance": {
            "rel": 1e-06
          }
        },
        {
          "variable": "n0sfac",
          "time": 0.0,
          "coords": {
            "lev": 30
          },
          "expected": 1657.2166078233513,
          "tolerance": {
            "rel": 1e-06
          }
        },
        {
          "variable": "n0sfac",
          "time": 0.0,
          "coords": {
            "lev": 40
          },
          "expected": 642.9997044852912,
          "tolerance": {
            "rel": 1e-06
          }
        },
        {
          "variable": "rslope_r",
          "time": 0.0,
          "coords": {
            "lev": 1
          },
          "expected": 7.9906646804699e-05,
          "tolerance": {
            "rel": 1e-06
          }
        },
        {
          "variable": "rslope_r",
          "time": 0.0,
          "coords": {
            "lev": 5
          },
          "expected": 0.0004749145060720375,
          "tolerance": {
            "rel": 1e-06
          }
        },
        {
          "variable": "rslope_r",
          "time": 0.0,
          "coords": {
            "lev": 9
          },
          "expected": 0.000680213262012178,
          "tolerance": {
            "rel": 1e-06
          }
        },
        {
          "variable": "rslope_r",
          "time": 0.0,
          "coords": {
            "lev": 16
          },
          "expected": 5.158844364893619e-05,
          "tolerance": {
            "rel": 1e-06
          }
        },
        {
          "variable": "rslope_r",
          "time": 0.0,
          "coords": {
            "lev": 30
          },
          "expected": 1.25e-05,
          "tolerance": {
            "rel": 1e-06
          }
        },
        {
          "variable": "rslope_s",
          "time": 0.0,
          "coords": {
            "lev": 1
          },
          "expected": 1e-05,
          "tolerance": {
            "rel": 1e-06
          }
        },
        {
          "variable": "rslope_s",
          "time": 0.0,
          "coords": {
            "lev": 9
          },
          "expected": 9.460460197376163e-05,
          "tolerance": {
            "rel": 1e-06
          }
        },
        {
          "variable": "rslope_s",
          "time": 0.0,
          "coords": {
            "lev": 20
          },
          "expected": 0.00031849236060218654,
          "tolerance": {
            "rel": 1e-06
          }
        },
        {
          "variable": "rslope_s",
          "time": 0.0,
          "coords": {
            "lev": 30
          },
          "expected": 5.4578082265512204e-05,
          "tolerance": {
            "rel": 1e-06
          }
        },
        {
          "variable": "rslope_s",
          "time": 0.0,
          "coords": {
            "lev": 40
          },
          "expected": 1e-05,
          "tolerance": {
            "rel": 1e-06
          }
        },
        {
          "variable": "rslope_g",
          "time": 0.0,
          "coords": {
            "lev": 1
          },
          "expected": 1.6666666666666667e-05,
          "tolerance": {
            "rel": 1e-06
          }
        },
        {
          "variable": "rslope_g",
          "time": 0.0,
          "coords": {
            "lev": 9
          },
          "expected": 0.0001364510666719362,
          "tolerance": {
            "rel": 1e-06
          }
        },
        {
          "variable": "rslope_g",
          "time": 0.0,
          "coords": {
            "lev": 20
          },
          "expected": 0.0008933413680236468,
          "tolerance": {
            "rel": 1e-06
          }
        },
        {
          "variable": "rslope_g",
          "time": 0.0,
          "coords": {
            "lev": 30
          },
          "expected": 0.0002586362699388454,
          "tolerance": {
            "rel": 1e-06
          }
        },
        {
          "variable": "rslope_g",
          "time": 0.0,
          "coords": {
            "lev": 40
          },
          "expected": 1.6666666666666667e-05,
          "tolerance": {
            "rel": 1e-06
          }
        },
        {
          "variable": "rslopeb_s",
          "time": 0.0,
          "coords": {
            "lev": 9
          },
          "expected": 0.02239360648139654,
          "tolerance": {
            "rel": 1e-06
          }
        },
        {
          "variable": "rslopeb_s",
          "time": 0.0,
          "coords": {
            "lev": 20
          },
          "expected": 0.036835842773786966,
          "tolerance": {
            "rel": 1e-06
          }
        },
        {
          "variable": "rslopeb_s",
          "time": 0.0,
          "coords": {
            "lev": 30
          },
          "expected": 0.017872179045431792,
          "tolerance": {
            "rel": 1e-06
          }
        },
        {
          "variable": "rslope3_g",
          "time": 0.0,
          "coords": {
            "lev": 1
          },
          "expected": 4.629629629629631e-15,
          "tolerance": {
            "rel": 1e-06
          }
        },
        {
          "variable": "rslope3_g",
          "time": 0.0,
          "coords": {
            "lev": 9
          },
          "expected": 2.540567891413089e-12,
          "tolerance": {
            "rel": 1e-06
          }
        },
        {
          "variable": "rslope3_g",
          "time": 0.0,
          "coords": {
            "lev": 20
          },
          "expected": 7.129389399966174e-10,
          "tolerance": {
            "rel": 1e-06
          }
        }
      ]
    },
    {
      "id": "scm_call120_ice_only_lowest_40_layers",
      "description": "Reference: WRF 4.8 em_scm_xy single-column run (GNU real32 build, dt = 60 s, 59 layers, mp = 6, sfclay = 1, slab, YSU) at call 120 (step 60, 20:00 UTC) dumped by the instrumented fork and replayed through the real64 kernels/wsm6_driver; lowest 40 of the 59 layers (esm-spec 6.6 tests cannot rebind NLEV). Zero-condensate check for the precipitation distributions: qr = qs = qg = 0 throughout, so every inverse slope must equal exactly its 1/lambda_max value and n0sfac follows the temperature alone (1 in the warm lower layers, up to 42 aloft); only cloud ice is present (qi <= 5e-5 in layers 30-40), so the ice number concentration lies between its bounds there and at its floor 1e3 m^-3 below. Same reference chain and tolerance reasoning as the supercell test; the inverse-slope bounds are exact rational constants so their tolerance is 0, while lambda_s^-bvts at the bound carries the kernel's real32 rounding of bvts (0.4099999964 instead of 0.41: 4e-8 relative, 4e-10 absolute), hence abs 1e-9.",
      "parameter_overrides": {},
      "expression_template_imports": [
        {
          "ref": "./tests/scm_call120_ice_only_lowest_40_layers_inputs.esm"
        }
      ],
      "time_span": {
        "start": 0.0,
        "end": 1.0
      },
      "assertions": [
        {
          "variable": "n0sfac",
          "time": 0.0,
          "reduce": "Linf_error",
          "expected": 0.0,
          "reference": {
            "op": "faq",
            "output_idx": [
              "k"
            ],
            "args": [],
            "ranges": {
              "k": {
                "from": "lev"
              }
            },
            "expr": {
              "op": "index",
              "args": [
                {
                  "op": "const",
                  "args": [],
                  "value": [
                    1.0,
                    1.0,
                    1.0,
                    1.0,
                    1.0,
                    1.0,
                    1.0,
                    1.0,
                    1.0,
                    1.0,
                    1.0,
                    1.0,
                    1.0,
                    1.0,
                    1.0,
                    1.0,
                    1.0,
                    1.0,
                    1.0,
                    1.0,
                    1.0,
                    1.0,
                    1.0,
                    1.0,
                    1.0,
                    1.0,
                    1.0,
                    1.0,
                    1.0,
                    1.0,
                    1.0,
                    1.0,
                    1.0,
                    1.0,
                    1.052544889851711,
                    1.152967281459306,
                    1.3099068772970104,
                    1.5137792911151828,
                    1.7915694581949146,
                    2.2871178908826133
                  ]
                },
                "k"
              ]
            }
          },
          "tolerance": {
            "abs": 5e-05,
            "rel": 0.0
          }
        },
        {
          "variable": "rslope_r",
          "time": 0.0,
          "reduce": "Linf_error",
          "expected": 0.0,
          "reference": {
            "op": "faq",
            "output_idx": [
              "k"
            ],
            "args": [],
            "ranges": {
              "k": {
                "from": "lev"
              }
            },
            "expr": {
              "op": "index",
              "args": [
                {
                  "op": "const",
                  "args": [],
                  "value": [
                    1.25e-05,
                    1.25e-05,
                    1.25e-05,
                    1.25e-05,
                    1.25e-05,
                    1.25e-05,
                    1.25e-05,
                    1.25e-05,
                    1.25e-05,
                    1.25e-05,
                    1.25e-05,
                    1.25e-05,
                    1.25e-05,
                    1.25e-05,
                    1.25e-05,
                    1.25e-05,
                    1.25e-05,
                    1.25e-05,
                    1.25e-05,
                    1.25e-05,
                    1.25e-05,
                    1.25e-05,
                    1.25e-05,
                    1.25e-05,
                    1.25e-05,
                    1.25e-05,
                    1.25e-05,
                    1.25e-05,
                    1.25e-05,
                    1.25e-05,
                    1.25e-05,
                    1.25e-05,
                    1.25e-05,
                    1.25e-05,
                    1.25e-05,
                    1.25e-05,
                    1.25e-05,
                    1.25e-05,
                    1.25e-05,
                    1.25e-05
                  ]
                },
                "k"
              ]
            }
          },
          "tolerance": {
            "abs": 0,
            "rel": 0.0
          }
        },
        {
          "variable": "rslope_s",
          "time": 0.0,
          "reduce": "Linf_error",
          "expected": 0.0,
          "reference": {
            "op": "faq",
            "output_idx": [
              "k"
            ],
            "args": [],
            "ranges": {
              "k": {
                "from": "lev"
              }
            },
            "expr": {
              "op": "index",
              "args": [
                {
                  "op": "const",
                  "args": [],
                  "value": [
                    1e-05,
                    1e-05,
                    1e-05,
                    1e-05,
                    1e-05,
                    1e-05,
                    1e-05,
                    1e-05,
                    1e-05,
                    1e-05,
                    1e-05,
                    1e-05,
                    1e-05,
                    1e-05,
                    1e-05,
                    1e-05,
                    1e-05,
                    1e-05,
                    1e-05,
                    1e-05,
                    1e-05,
                    1e-05,
                    1e-05,
                    1e-05,
                    1e-05,
                    1e-05,
                    1e-05,
                    1e-05,
                    1e-05,
                    1e-05,
                    1e-05,
                    1e-05,
                    1e-05,
                    1e-05,
                    1e-05,
                    1e-05,
                    1e-05,
                    1e-05,
                    1e-05,
                    1e-05
                  ]
                },
                "k"
              ]
            }
          },
          "tolerance": {
            "abs": 0,
            "rel": 0.0
          }
        },
        {
          "variable": "rslope_g",
          "time": 0.0,
          "reduce": "Linf_error",
          "expected": 0.0,
          "reference": {
            "op": "faq",
            "output_idx": [
              "k"
            ],
            "args": [],
            "ranges": {
              "k": {
                "from": "lev"
              }
            },
            "expr": {
              "op": "index",
              "args": [
                {
                  "op": "const",
                  "args": [],
                  "value": [
                    1.6666666666666667e-05,
                    1.6666666666666667e-05,
                    1.6666666666666667e-05,
                    1.6666666666666667e-05,
                    1.6666666666666667e-05,
                    1.6666666666666667e-05,
                    1.6666666666666667e-05,
                    1.6666666666666667e-05,
                    1.6666666666666667e-05,
                    1.6666666666666667e-05,
                    1.6666666666666667e-05,
                    1.6666666666666667e-05,
                    1.6666666666666667e-05,
                    1.6666666666666667e-05,
                    1.6666666666666667e-05,
                    1.6666666666666667e-05,
                    1.6666666666666667e-05,
                    1.6666666666666667e-05,
                    1.6666666666666667e-05,
                    1.6666666666666667e-05,
                    1.6666666666666667e-05,
                    1.6666666666666667e-05,
                    1.6666666666666667e-05,
                    1.6666666666666667e-05,
                    1.6666666666666667e-05,
                    1.6666666666666667e-05,
                    1.6666666666666667e-05,
                    1.6666666666666667e-05,
                    1.6666666666666667e-05,
                    1.6666666666666667e-05,
                    1.6666666666666667e-05,
                    1.6666666666666667e-05,
                    1.6666666666666667e-05,
                    1.6666666666666667e-05,
                    1.6666666666666667e-05,
                    1.6666666666666667e-05,
                    1.6666666666666667e-05,
                    1.6666666666666667e-05,
                    1.6666666666666667e-05,
                    1.6666666666666667e-05
                  ]
                },
                "k"
              ]
            }
          },
          "tolerance": {
            "abs": 0,
            "rel": 0.0
          }
        },
        {
          "variable": "rslopeb_s",
          "time": 0.0,
          "reduce": "Linf_error",
          "expected": 0.0,
          "reference": {
            "op": "faq",
            "output_idx": [
              "k"
            ],
            "args": [],
            "ranges": {
              "k": {
                "from": "lev"
              }
            },
            "expr": {
              "op": "index",
              "args": [
                {
                  "op": "const",
                  "args": [],
                  "value": [
                    0.008912509748296044,
                    0.008912509748296044,
                    0.008912509748296044,
                    0.008912509748296044,
                    0.008912509748296044,
                    0.008912509748296044,
                    0.008912509748296044,
                    0.008912509748296044,
                    0.008912509748296044,
                    0.008912509748296044,
                    0.008912509748296044,
                    0.008912509748296044,
                    0.008912509748296044,
                    0.008912509748296044,
                    0.008912509748296044,
                    0.008912509748296044,
                    0.008912509748296044,
                    0.008912509748296044,
                    0.008912509748296044,
                    0.008912509748296044,
                    0.008912509748296044,
                    0.008912509748296044,
                    0.008912509748296044,
                    0.008912509748296044,
                    0.008912509748296044,
                    0.008912509748296044,
                    0.008912509748296044,
                    0.008912509748296044,
                    0.008912509748296044,
                    0.008912509748296044,
                    0.008912509748296044,
                    0.008912509748296044,
                    0.008912509748296044,
                    0.008912509748296044,
                    0.008912509748296044,
                    0.008912509748296044,
                    0.008912509748296044,
                    0.008912509748296044,
                    0.008912509748296044,
                    0.008912509748296044
                  ]
                },
                "k"
              ]
            }
          },
          "tolerance": {
            "abs": 1e-09,
            "rel": 0.0
          }
        },
        {
          "variable": "rslope3_g",
          "time": 0.0,
          "reduce": "Linf_error",
          "expected": 0.0,
          "reference": {
            "op": "faq",
            "output_idx": [
              "k"
            ],
            "args": [],
            "ranges": {
              "k": {
                "from": "lev"
              }
            },
            "expr": {
              "op": "index",
              "args": [
                {
                  "op": "const",
                  "args": [],
                  "value": [
                    4.629629629629631e-15,
                    4.629629629629631e-15,
                    4.629629629629631e-15,
                    4.629629629629631e-15,
                    4.629629629629631e-15,
                    4.629629629629631e-15,
                    4.629629629629631e-15,
                    4.629629629629631e-15,
                    4.629629629629631e-15,
                    4.629629629629631e-15,
                    4.629629629629631e-15,
                    4.629629629629631e-15,
                    4.629629629629631e-15,
                    4.629629629629631e-15,
                    4.629629629629631e-15,
                    4.629629629629631e-15,
                    4.629629629629631e-15,
                    4.629629629629631e-15,
                    4.629629629629631e-15,
                    4.629629629629631e-15,
                    4.629629629629631e-15,
                    4.629629629629631e-15,
                    4.629629629629631e-15,
                    4.629629629629631e-15,
                    4.629629629629631e-15,
                    4.629629629629631e-15,
                    4.629629629629631e-15,
                    4.629629629629631e-15,
                    4.629629629629631e-15,
                    4.629629629629631e-15,
                    4.629629629629631e-15,
                    4.629629629629631e-15,
                    4.629629629629631e-15,
                    4.629629629629631e-15,
                    4.629629629629631e-15,
                    4.629629629629631e-15,
                    4.629629629629631e-15,
                    4.629629629629631e-15,
                    4.629629629629631e-15,
                    4.629629629629631e-15
                  ]
                },
                "k"
              ]
            }
          },
          "tolerance": {
            "abs": 1e-28,
            "rel": 0.0
          }
        },
        {
          "variable": "n0sfac",
          "time": 0.0,
          "coords": {
            "lev": 1
          },
          "expected": 1.0,
          "tolerance": {
            "rel": 1e-06
          }
        },
        {
          "variable": "n0sfac",
          "time": 0.0,
          "coords": {
            "lev": 20
          },
          "expected": 1.0,
          "tolerance": {
            "rel": 1e-06
          }
        },
        {
          "variable": "n0sfac",
          "time": 0.0,
          "coords": {
            "lev": 40
          },
          "expected": 2.2871178908826133,
          "tolerance": {
            "rel": 1e-06
          }
        }
      ]
    },
    {
      "id": "scm_call120_negative_cloud_ice_fallout",
      "description": "Fallout guard, not a WRF dump: the scm_call120_ice_only_lowest_40_layers column with qi = -1e-12 kg/kg in layers 5, 10 and 20. The kernel's Vice block (mp_wsm6.F90 lines 711-718) sets the ice fall speed to 0 where qi <= 0 and floors the diameter at 1e-25 m elsewhere, so vt_i must be finite and 0 in those layers (D_i itself, the square root of a negative mean mass, is NaN there and is used only where the cold-rain rates gate on qi > 0). Elsewhere qi is 0 except 8e-44 and 1.4e-41 kg/kg in layers 39 and 40, whose fall speeds are below 1e-24 m/s, so the whole column of vt_i is 0 to within abs 1e-20 (rel 0, so the bound is absolute and a NaN fails it).",
      "parameter_overrides": {},
      "expression_template_imports": [
        {
          "ref": "./tests/scm_call120_negative_cloud_ice_fallout_inputs.esm"
        }
      ],
      "time_span": {
        "start": 0.0,
        "end": 1.0
      },
      "assertions": [
        {
          "variable": "vt_i",
          "time": 0.0,
          "reduce": "Linf_error",
          "expected": 0.0,
          "reference": {
            "op": "faq",
            "output_idx": [
              "k"
            ],
            "args": [],
            "ranges": {
              "k": {
                "from": "lev"
              }
            },
            "expr": {
              "op": "index",
              "args": [
                {
                  "op": "const",
                  "args": [],
                  "value": [
                    0.0,
                    0.0,
                    0.0,
                    0.0,
                    0.0,
                    0.0,
                    0.0,
                    0.0,
                    0.0,
                    0.0,
                    0.0,
                    0.0,
                    0.0,
                    0.0,
                    0.0,
                    0.0,
                    0.0,
                    0.0,
                    0.0,
                    0.0,
                    0.0,
                    0.0,
                    0.0,
                    0.0,
                    0.0,
                    0.0,
                    0.0,
                    0.0,
                    0.0,
                    0.0,
                    0.0,
                    0.0,
                    0.0,
                    0.0,
                    0.0,
                    0.0,
                    0.0,
                    0.0,
                    0.0,
                    0.0
                  ]
                },
                "k"
              ]
            }
          },
          "tolerance": {
            "abs": 1e-20,
            "rel": 0.0
          }
        },
        {
          "variable": "vt_i",
          "time": 0.0,
          "coords": {
            "lev": 5
          },
          "expected": 0.0,
          "tolerance": {
            "abs": 0,
            "rel": 0.0
          }
        },
        {
          "variable": "vt_i",
          "time": 0.0,
          "coords": {
            "lev": 10
          },
          "expected": 0.0,
          "tolerance": {
            "abs": 0,
            "rel": 0.0
          }
        },
        {
          "variable": "vt_i",
          "time": 0.0,
          "coords": {
            "lev": 20
          },
          "expected": 0.0,
          "tolerance": {
            "abs": 0,
            "rel": 0.0
          }
        }
      ]
    }
  ]
}