WSM6ColdAccretion
Collection (accretion) process rates between the six water species of the WRF single-moment 6-class microphysics scheme below and above freezing (WSM6; Hong and Lim 2006 appendix A; Lin et al. 1983; Rutledge and Hobbs 1983, 1984), transcribed from the cold-rain block of mp_wsm6_run in phys/physics_mmm/mp_wsm6.F90 (WRF 4.8, NCAR/MMM-physics): accretion of cloud ice by rain (praci), of rain by cloud ice (piacr), of cloud ice by snow (psaci) and by graupel (pgaci) -- all only below 0 C --, of cloud water by snow (psacw) and by graupel (pgacw) and their snow/graupel-weighted combination (paacw), of snow by rain (pracs, below 0 C), of rain by snow (psacr) and by graupel (pgacr), the eliminated snow-by-graupel term (pgacs = 0 since WRF V3.0, when snow and graupel received a common fall speed), and the enhanced melting of snow and graupel above 0 C by the sensible heat of the liquid water they collect (pseml, pgeml). Each collection rate is the geometric sweep-out of one species by another: pi/4 n0 |V_a - V_b| times a size-distribution kernel (collection_kernel_* templates) times the collected mixing ratio, with the collection efficiencies (eacrs = exp(-0.07 (T0 - T)) for ice, 1 for water) and WSM6's empirical reduction min(max(0, q_collector/q_collected), 1)^2 folded into the UNLIMITED rate because they are functions of the state alone. The kernel additionally applies per-process time-step limiters (a sink may not remove more than q/dtcld per sub-step; pseml/pgeml are also floored at zero), exposed separately as <rate>_lim with the sub-step length dtcld as a parameter -- time-step artefacts, not physics (EqWeFiC FORTRAN_BUGS.md note N3); the mass-conservation rescaling applied afterwards is not part of this component. The size distributions, number concentrations and fall speeds are supplied by hydrometeor_slopes.esm mounted as subsystem `sd` (referenced as sd.<name>), exactly as the kernel evaluates them once per sub-step and reuses them here; cloud water qc and the sub-step dtcld are this component's own inputs. Scheme constants come from wsm6_parameters.esm (subsystem `par`), physical constants from lib/wrf_constants.esm (`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) (esm-spec 6.6 parameter_overrides admit scalars only). 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.
Description
Collection (accretion) process rates between the six water species of the WRF single-moment 6-class microphysics scheme below and above freezing (WSM6; Hong and Lim 2006 appendix A; Lin et al. 1983; Rutledge and Hobbs 1983, 1984), transcribed from the cold-rain block of mp_wsm6_run in phys/physics_mmm/mp_wsm6.F90 (WRF 4.8, NCAR/MMM-physics): accretion of cloud ice by rain (praci), of rain by cloud ice (piacr), of cloud ice by snow (psaci) and by graupel (pgaci) – all only below 0 C –, of cloud water by snow (psacw) and by graupel (pgacw) and their snow/graupel-weighted combination (paacw), of snow by rain (pracs, below 0 C), of rain by snow (psacr) and by graupel (pgacr), the eliminated snow-by-graupel term (pgacs = 0 since WRF V3.0, when snow and graupel received a common fall speed), and the enhanced melting of snow and graupel above 0 C by the sensible heat of the liquid water they collect (pseml, pgeml). Each collection rate is the geometric sweep-out of one species by another: pi/4 n0 |V_a - V_b| times a size-distribution kernel (collection_kernel_* templates) times the collected mixing ratio, with the collection efficiencies (eacrs = exp(-0.07 (T0 - T)) for ice, 1 for water) and WSM6’s empirical reduction min(max(0, q_collector/q_collected), 1)^2 folded into the UNLIMITED rate because they are functions of the state alone. The kernel additionally applies per-process time-step limiters (a sink may not remove more than q/dtcld per sub-step; pseml/pgeml are also floored at zero), exposed separately as sd (referenced as sd.par), physical constants from lib/wrf_constants.esm (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) (esm-spec 6.6 parameter_overrides admit scalars only). 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. Appendix A eqs. A6, A7, A10-A13, A15, A17, A19, A24, A34.
- 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 (eq. 10, psaci).
- 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 (eqs. 24-29, 40-42).
- Rutledge, S. A., and P. V. Hobbs (1984). The mesoscale and microscale structure and organization of clouds and precipitation in midlatitude cyclones. XII. J. Atmos. Sci. 41, 2949-2972 (eqs. A21-A22, enhanced melting).
- NCAR/MMM-physics mp_wsm6.F90 at commit 550b5b4 (WRF 4.8 phys/physics_mmm submodule), cold-rain block lines 968-1140.
Parameters
| Name | Units | Default | Description |
|---|---|---|---|
qc_in | kg/kg | 0.0 | Coupling-target parameter (additive): receives the cloud-water mixing ratio from the upstream stage through a document coupling (EqWeFiC couplings/microphysics_column*.esm), where the mount-edge template library lowers input_qc to this name. Unused by the standalone inline tests, which lower input_qc to a dumped column profile instead. |
dtcld | s | 60.0 | Length of the WSM6 sub-time step; enters only the rate limiters. |
Observed
| Name | Units | Default | Description |
|---|---|---|---|
qc | kg/kg | Cloud-water mixing ratio. | |
pacrc | 1/(m^(341/100)*s) | Snow-cloud accretion coefficient pi n0s avts Gamma(3 + bvts) E_sc/4 (WSM6 pacrc); units for bvts = 0.41. | |
pacrg | 1/(m^(19/5)*s) | Graupel-cloud accretion coefficient pi n0g avtg Gamma(3 + bvtg)/4 (WSM6 pacrg); units for bvtg = 0.8. | |
supcol | K | Supercooling T0 - T (positive below freezing; WSM6 supcol). | |
eacrs | 1 | Collection efficiency of cloud ice by snow and graupel, exp(-0.07 (T0 - T)) (WSM6 eacrs = egi). | |
K_ri | m^3 | Collection kernel of ice crystals by rain, 2 lambda_r^-3 + 2 D_i lambda_r^-2 + D_i^2 lambda_r^-1. | |
K_si | m^3 | Collection kernel of ice crystals by snow. | |
K_gi | m^3 | Collection kernel of ice crystals by graupel. | |
K_sr | m^7 | Collection kernel of snow (collected) by rain (collector). | |
K_rs | m^7 | Collection kernel of rain (collected) by snow (collector). | |
K_rg | m^7 | Collection kernel of rain (collected) by graupel (collector). | |
E_ri | 1 | Efficiency reduction min(max(0, qr/qi), 1)^2 of praci. | |
E_ir | 1 | Efficiency reduction min(max(0, qi/qr), 1)^2 of piacr. | |
E_sc | 1 | Efficiency reduction min(max(0, qs/qc), 1)^2 of psacw. | |
E_gc | 1 | Efficiency reduction min(max(0, qg/qc), 1)^2 of pgacw. | |
E_rs | 1 | Efficiency reduction min(max(0, qr/qs), 1)^2 of pracs. | |
E_sr | 1 | Efficiency reduction min(max(0, qs/qr), 1)^2 of psacr. | |
E_gr | 1 | Efficiency reduction min(max(0, qg/qr), 1)^2 of pgacr. | |
praci | kg/kg/s | Accretion of cloud ice by rain below 0 C (I->R; HL A15, LFO 25), unlimited. | |
praci_lim | kg/kg/s | praci after the limiter min(praci, qi/dtcld) (WSM6 praci as applied). | |
piacr | kg/kg/s | Accretion of rain by cloud ice below 0 C (R->S or R->G; HL A19, LFO 26), pi^2 a_r n0r rho_w N_i (rho0/rho)^(1/2) Gamma(6 + b_r) lambda_r^-(6+b_r)/(24 rho) times the efficiency reduction, unlimited. | |
piacr_lim | kg/kg/s | piacr after the limiter min(piacr, qr/dtcld). | |
psaci | kg/kg/s | Accretion of cloud ice by snow below 0 C (I->S; HDC 10), pi/4 qi E_si n0s(T) |V_sg - V_i| K_si, unlimited. | |
psaci_lim | kg/kg/s | psaci after the limiter min(psaci, qi/dtcld). | |
pgaci | kg/kg/s | Accretion of cloud ice by graupel below 0 C (I->G; HL A17, LFO 41), unlimited. | |
pgaci_lim | kg/kg/s | pgaci after the limiter min(pgaci, qi/dtcld). | |
psacw | kg/kg/s | Accretion of cloud water by snow (C->S below 0 C, C->R above; HL A7, LFO 24), pacrc n0s(T)/n0s lambda_s^-(3+b_s) qc (rho0/rho)^(1/2) times the efficiency reduction, unlimited. | |
psacw_lim | kg/kg/s | psacw after the limiter min(psacw, qc/dtcld). | |
pgacw | kg/kg/s | Accretion of cloud water by graupel (C->G below 0 C, C->R above; HL A6, LFO 40), unlimited. | |
pgacw_lim | kg/kg/s | pgacw after the limiter min(pgacw, qc/dtcld). | |
paacw | kg/kg/s | Accretion of cloud water by the combined snow/graupel category, the mixing-ratio-weighted mean of the limited psacw and pgacw (WSM6 paacw; this is the term the kernel actually applies to cloud water). | |
pracs | kg/kg/s | Accretion of snow by rain below 0 C (S->G; HL A11, LFO 27), pi^2 n0r n0s(T) |V_r - V_sg| (rho_s/rho) K_sr times the efficiency reduction, unlimited. | |
pracs_lim | kg/kg/s | pracs after the limiter min(pracs, qs/dtcld). | |
psacr | kg/kg/s | Accretion of rain by snow (R->S or R->G below 0 C; enhances snow melting above; HL A10, LFO 28), pi^2 n0r n0s(T) |V_sg - V_r| (rho_w/rho) K_rs times the efficiency reduction, unlimited. | |
psacr_lim | kg/kg/s | psacr after the limiter min(psacr, qr/dtcld). | |
pgacr | kg/kg/s | Accretion of rain by graupel (R->G below 0 C; enhances graupel melting above; HL A12, LFO 42), unlimited. | |
pgacr_lim | kg/kg/s | pgacr after the limiter min(pgacr, qr/dtcld). | |
pgacs | kg/kg/s | Accretion of snow by graupel (HL A13, LFO 29): identically zero since WRF V3.0, when snow and graupel were given the common fall speed V_sg (WSM6 sets pgacs = 0). | |
pseml | kg/kg/s | Enhanced melting of snow above 0 C by the sensible heat of the accreted liquid water, c_l (T0 - T)(paacw + psacr_lim)/L_f (negative; HL A34, RH84 A21), unlimited. | |
pseml_lim | kg/kg/s | pseml after the limiter min(max(pseml, -qs/dtcld), 0). | |
pgeml | kg/kg/s | Enhanced melting of graupel above 0 C by the accreted liquid water, c_l (T0 - T)(paacw + pgacr_lim)/L_f (negative; HL A24, RH84 A22), unlimited. | |
pgeml_lim | kg/kg/s | pgeml after the limiter min(max(pgeml, -qg/dtcld), 0). |
Observed expressions
$$ qc = \mathrm{input_qc}\left(\right) $$Cloud-water mixing ratio.
$$ pacrc = \frac{wrf.piconst \cdot par.n0s \cdot par.avts \cdot par.g3pbs \cdot par.eacrc}{\mathrm{const}\left(\right)} $$Snow-cloud accretion coefficient pi n0s avts Gamma(3 + bvts) E_sc/4 (WSM6 pacrc); units for bvts = 0.41.
$$ pacrg = \frac{wrf.piconst \cdot par.n0g \cdot par.avtg \cdot par.g3pbr}{\mathrm{const}\left(\right)} $$Graupel-cloud accretion coefficient pi n0g avtg Gamma(3 + bvtg)/4 (WSM6 pacrg); units for bvtg = 0.8.
$$ supcol = wrf.svpt0 - sd.T $$Supercooling T0 - T (positive below freezing; WSM6 supcol).
$$ eacrs = e^{-par.eacrs_{coef} \cdot supcol} $$Collection efficiency of cloud ice by snow and graupel, exp(-0.07 (T0 - T)) (WSM6 eacrs = egi).
$$ K_{ri} = \mathrm{collection_kernel_ice_by_precipitation}\left(D=sd.D_{i}, rslope=sd.rslope_{r}, rslope2=sd.rslope2_{r}, rslope3=sd.rslope3_{r}\right) $$Collection kernel of ice crystals by rain, 2 lambda_r^-3 + 2 D_i lambda_r^-2 + D_i^2 lambda_r^-1.
$$ K_{si} = \mathrm{collection_kernel_ice_by_precipitation}\left(D=sd.D_{i}, rslope=sd.rslope_{s}, rslope2=sd.rslope2_{s}, rslope3=sd.rslope3_{s}\right) $$Collection kernel of ice crystals by snow.
$$ K_{gi} = \mathrm{collection_kernel_ice_by_precipitation}\left(D=sd.D_{i}, rslope=sd.rslope_{g}, rslope2=sd.rslope2_{g}, rslope3=sd.rslope3_{g}\right) $$Collection kernel of ice crystals by graupel.
$$ K_{sr} = \mathrm{collection_kernel_precipitation_by_precipitation}\left(rslope_{a}=sd.rslope_{s}, rslope2_{a}=sd.rslope2_{s}, rslope3_{a}=sd.rslope3_{s}, rslope_{b}=sd.rslope_{r}, rslope2_{b}=sd.rslope2_{r}, rslope3_{b}=sd.rslope3_{r}\right) $$Collection kernel of snow (collected) by rain (collector).
$$ K_{rs} = \mathrm{collection_kernel_precipitation_by_precipitation}\left(rslope_{a}=sd.rslope_{r}, rslope2_{a}=sd.rslope2_{r}, rslope3_{a}=sd.rslope3_{r}, rslope_{b}=sd.rslope_{s}, rslope2_{b}=sd.rslope2_{s}, rslope3_{b}=sd.rslope3_{s}\right) $$Collection kernel of rain (collected) by snow (collector).
$$ K_{rg} = \mathrm{collection_kernel_precipitation_by_precipitation}\left(rslope_{a}=sd.rslope_{r}, rslope2_{a}=sd.rslope2_{r}, rslope3_{a}=sd.rslope3_{r}, rslope_{b}=sd.rslope_{g}, rslope2_{b}=sd.rslope2_{g}, rslope3_{b}=sd.rslope3_{g}\right) $$Collection kernel of rain (collected) by graupel (collector).
$$ E_{ri} = \mathrm{collection_efficiency_reduction}\left(q_{collector}=sd.qr, q_{collected}=sd.qi, q_{min}=par.qmin, expn=par.wilt_{exp}\right) $$Efficiency reduction min(max(0, qr/qi), 1)^2 of praci.
$$ E_{ir} = \mathrm{collection_efficiency_reduction}\left(q_{collector}=sd.qi, q_{collected}=sd.qr, q_{min}=par.qmin, expn=par.wilt_{exp}\right) $$Efficiency reduction min(max(0, qi/qr), 1)^2 of piacr.
$$ E_{sc} = \mathrm{collection_efficiency_reduction}\left(q_{collector}=sd.qs, q_{collected}=qc, q_{min}=par.qmin, expn=par.wilt_{exp}\right) $$Efficiency reduction min(max(0, qs/qc), 1)^2 of psacw.
$$ E_{gc} = \mathrm{collection_efficiency_reduction}\left(q_{collector}=sd.qg, q_{collected}=qc, q_{min}=par.qmin, expn=par.wilt_{exp}\right) $$Efficiency reduction min(max(0, qg/qc), 1)^2 of pgacw.
$$ E_{rs} = \mathrm{collection_efficiency_reduction}\left(q_{collector}=sd.qr, q_{collected}=sd.qs, q_{min}=par.qmin, expn=par.wilt_{exp}\right) $$Efficiency reduction min(max(0, qr/qs), 1)^2 of pracs.
$$ E_{sr} = \mathrm{collection_efficiency_reduction}\left(q_{collector}=sd.qs, q_{collected}=sd.qr, q_{min}=par.qmin, expn=par.wilt_{exp}\right) $$Efficiency reduction min(max(0, qs/qr), 1)^2 of psacr.
$$ E_{gr} = \mathrm{collection_efficiency_reduction}\left(q_{collector}=sd.qg, q_{collected}=sd.qr, q_{min}=par.qmin, expn=par.wilt_{exp}\right) $$Efficiency reduction min(max(0, qg/qr), 1)^2 of pgacr.
$$ praci = \mathrm{ifelse}\left(\mathrm{and}\left(\mathrm{>}\left(supcol, 0\right), \mathrm{>}\left(sd.qi, par.qmin\right), \mathrm{>}\left(sd.qr, par.qcrmin\right)\right), \frac{wrf.piconst}{\mathrm{const}\left(\right)} \cdot sd.qi \cdot par.n0r \cdot \left|sd.vt_{r} - sd.vt_{i}\right| \cdot K_{ri} \cdot E_{ri}, 0\right) $$Accretion of cloud ice by rain below 0 C (I->R; HL A15, LFO 25), unlimited.
$$ praci_{lim} = \mathrm{sink_rate_limiter}\left(rate=praci, q=sd.qi, dt=dtcld\right) $$praci after the limiter min(praci, qi/dtcld) (WSM6 praci as applied).
$$ piacr = \mathrm{ifelse}\left(\mathrm{and}\left(\mathrm{>}\left(supcol, 0\right), \mathrm{>}\left(sd.qi, par.qmin\right), \mathrm{>}\left(sd.qr, par.qcrmin\right)\right), \frac{wrf.piconst^{2} \cdot par.avtr \cdot par.n0r \cdot wrf.rhowater \cdot sd.xni \cdot sd.denfac \cdot par.g6pbr \cdot sd.rslope3_{r} \cdot sd.rslope3_{r} \cdot sd.rslopeb_{r}}{\mathrm{const}\left(\right) \cdot sd.rho} \cdot E_{ir}, 0\right) $$Accretion of rain by cloud ice below 0 C (R->S or R->G; HL A19, LFO 26), pi^2 a_r n0r rho_w N_i (rho0/rho)^(1/2) Gamma(6 + b_r) lambda_r^-(6+b_r)/(24 rho) times the efficiency reduction, unlimited.
$$ piacr_{lim} = \mathrm{sink_rate_limiter}\left(rate=piacr, q=sd.qr, dt=dtcld\right) $$piacr after the limiter min(piacr, qr/dtcld).
$$ psaci = \mathrm{ifelse}\left(\mathrm{and}\left(\mathrm{>}\left(supcol, 0\right), \mathrm{>}\left(sd.qi, par.qmin\right), \mathrm{>}\left(sd.qs, par.qcrmin\right)\right), \frac{wrf.piconst}{\mathrm{const}\left(\right)} \cdot sd.qi \cdot eacrs \cdot par.n0s \cdot sd.n0sfac \cdot \left|sd.vt_{sg} - sd.vt_{i}\right| \cdot K_{si}, 0\right) $$Accretion of cloud ice by snow below 0 C (I->S; HDC 10), pi/4 qi E_si n0s(T) |V_sg - V_i| K_si, unlimited.
$$ psaci_{lim} = \mathrm{sink_rate_limiter}\left(rate=psaci, q=sd.qi, dt=dtcld\right) $$psaci after the limiter min(psaci, qi/dtcld).
$$ pgaci = \mathrm{ifelse}\left(\mathrm{and}\left(\mathrm{>}\left(supcol, 0\right), \mathrm{>}\left(sd.qi, par.qmin\right), \mathrm{>}\left(sd.qg, par.qcrmin\right)\right), \frac{wrf.piconst}{\mathrm{const}\left(\right)} \cdot eacrs \cdot sd.qi \cdot par.n0g \cdot \left|sd.vt_{sg} - sd.vt_{i}\right| \cdot K_{gi}, 0\right) $$Accretion of cloud ice by graupel below 0 C (I->G; HL A17, LFO 41), unlimited.
$$ pgaci_{lim} = \mathrm{sink_rate_limiter}\left(rate=pgaci, q=sd.qi, dt=dtcld\right) $$pgaci after the limiter min(pgaci, qi/dtcld).
$$ psacw = \mathrm{ifelse}\left(\mathrm{and}\left(\mathrm{>}\left(sd.qs, par.qcrmin\right), \mathrm{>}\left(qc, par.qmin\right)\right), pacrc \cdot sd.n0sfac \cdot sd.rslope3_{s} \cdot sd.rslopeb_{s} \cdot E_{sc} \cdot qc \cdot sd.denfac, 0\right) $$Accretion of cloud water by snow (C->S below 0 C, C->R above; HL A7, LFO 24), pacrc n0s(T)/n0s lambda_s^-(3+b_s) qc (rho0/rho)^(1/2) times the efficiency reduction, unlimited.
$$ psacw_{lim} = \mathrm{sink_rate_limiter}\left(rate=psacw, q=qc, dt=dtcld\right) $$psacw after the limiter min(psacw, qc/dtcld).
$$ pgacw = \mathrm{ifelse}\left(\mathrm{and}\left(\mathrm{>}\left(sd.qg, par.qcrmin\right), \mathrm{>}\left(qc, par.qmin\right)\right), pacrg \cdot sd.rslope3_{g} \cdot sd.rslopeb_{g} \cdot E_{gc} \cdot qc \cdot sd.denfac, 0\right) $$Accretion of cloud water by graupel (C->G below 0 C, C->R above; HL A6, LFO 40), unlimited.
$$ pgacw_{lim} = \mathrm{sink_rate_limiter}\left(rate=pgacw, q=qc, dt=dtcld\right) $$pgacw after the limiter min(pgacw, qc/dtcld).
$$ paacw = \mathrm{snow_graupel_weighted_mean}\left(x_{s}=psacw_{lim}, q_{s}=sd.qs, x_{g}=pgacw_{lim}, q_{g}=sd.qg, q_{floor}=par.qmin\right) $$Accretion of cloud water by the combined snow/graupel category, the mixing-ratio-weighted mean of the limited psacw and pgacw (WSM6 paacw; this is the term the kernel actually applies to cloud water).
$$ pracs = \mathrm{ifelse}\left(\mathrm{and}\left(\mathrm{>}\left(sd.qs, par.qcrmin\right), \mathrm{>}\left(sd.qr, par.qcrmin\right), \mathrm{>}\left(supcol, 0\right)\right), wrf.piconst^{2} \cdot par.n0r \cdot par.n0s \cdot sd.n0sfac \cdot \left|sd.vt_{r} - sd.vt_{sg}\right| \cdot \frac{par.dens}{sd.rho} \cdot K_{sr} \cdot E_{rs}, 0\right) $$Accretion of snow by rain below 0 C (S->G; HL A11, LFO 27), pi^2 n0r n0s(T) |V_r - V_sg| (rho_s/rho) K_sr times the efficiency reduction, unlimited.
$$ pracs_{lim} = \mathrm{sink_rate_limiter}\left(rate=pracs, q=sd.qs, dt=dtcld\right) $$pracs after the limiter min(pracs, qs/dtcld).
$$ psacr = \mathrm{ifelse}\left(\mathrm{and}\left(\mathrm{>}\left(sd.qs, par.qcrmin\right), \mathrm{>}\left(sd.qr, par.qcrmin\right)\right), wrf.piconst^{2} \cdot par.n0r \cdot par.n0s \cdot sd.n0sfac \cdot \left|sd.vt_{sg} - sd.vt_{r}\right| \cdot \frac{wrf.rhowater}{sd.rho} \cdot K_{rs} \cdot E_{sr}, 0\right) $$Accretion of rain by snow (R->S or R->G below 0 C; enhances snow melting above; HL A10, LFO 28), pi^2 n0r n0s(T) |V_sg - V_r| (rho_w/rho) K_rs times the efficiency reduction, unlimited.
$$ psacr_{lim} = \mathrm{sink_rate_limiter}\left(rate=psacr, q=sd.qr, dt=dtcld\right) $$psacr after the limiter min(psacr, qr/dtcld).
$$ pgacr = \mathrm{ifelse}\left(\mathrm{and}\left(\mathrm{>}\left(sd.qg, par.qcrmin\right), \mathrm{>}\left(sd.qr, par.qcrmin\right)\right), wrf.piconst^{2} \cdot par.n0r \cdot par.n0g \cdot \left|sd.vt_{sg} - sd.vt_{r}\right| \cdot \frac{wrf.rhowater}{sd.rho} \cdot K_{rg} \cdot E_{gr}, 0\right) $$Accretion of rain by graupel (R->G below 0 C; enhances graupel melting above; HL A12, LFO 42), unlimited.
$$ pgacr_{lim} = \mathrm{sink_rate_limiter}\left(rate=pgacr, q=sd.qr, dt=dtcld\right) $$pgacr after the limiter min(pgacr, qr/dtcld).
$$ pgacs = \mathrm{const}\left(\right) \cdot sd.qs $$Accretion of snow by graupel (HL A13, LFO 29): identically zero since WRF V3.0, when snow and graupel were given the common fall speed V_sg (WSM6 sets pgacs = 0).
$$ pseml = \mathrm{ifelse}\left(\mathrm{and}\left(\mathrm{<=}\left(supcol, 0\right), \mathrm{>}\left(sd.qs, 0\right)\right), \mathrm{enhanced_melting_by_accretion}\left(T=sd.T, t0=wrf.svpt0, accreted=paacw + psacr_{lim}, cliq=wrf.cliq, xlf=wrf.xlf\right), 0\right) $$Enhanced melting of snow above 0 C by the sensible heat of the accreted liquid water, c_l (T0 - T)(paacw + psacr_lim)/L_f (negative; HL A34, RH84 A21), unlimited.
$$ pseml_{lim} = \mathrm{negative_sink_limiter}\left(rate=pseml, q=sd.qs, dt=dtcld\right) $$pseml after the limiter min(max(pseml, -qs/dtcld), 0).
$$ pgeml = \mathrm{ifelse}\left(\mathrm{and}\left(\mathrm{<=}\left(supcol, 0\right), \mathrm{>}\left(sd.qg, 0\right)\right), \mathrm{enhanced_melting_by_accretion}\left(T=sd.T, t0=wrf.svpt0, accreted=paacw + pgacr_{lim}, cliq=wrf.cliq, xlf=wrf.xlf\right), 0\right) $$Enhanced melting of graupel above 0 C by the accreted liquid water, c_l (T0 - T)(paacw + pgacr_lim)/L_f (negative; HL A24, RH84 A22), unlimited.
$$ pgeml_{lim} = \mathrm{negative_sink_limiter}\left(rate=pgeml, q=sd.qg, dt=dtcld\right) $$pgeml after the limiter min(max(pgeml, -qg/dtcld), 0).
Raw .esm
Raw .esm JSON (this component)
{
"expression_template_imports": [
{
"ref": "./microphysics_templates.esm"
}
],
"subsystems": {
"wrf": {
"ref": "../../../lib/wrf_constants.esm"
},
"par": {
"ref": "./wsm6_parameters.esm"
},
"sd": {
"ref": "./hydrometeor_slopes.esm",
"bindings": {
"NLEV": "NLEV"
}
}
},
"variables": {
"qc_in": {
"type": "parameter",
"units": "kg/kg",
"shape": [
"lev"
],
"default": 0.0,
"description": "Coupling-target parameter (additive): receives the cloud-water mixing ratio from the upstream stage through a document coupling (EqWeFiC couplings/microphysics_column*.esm), where the mount-edge template library lowers `input_qc` to this name. Unused by the standalone inline tests, which lower `input_qc` to a dumped column profile instead."
},
"qc": {
"type": "unknown",
"units": "kg/kg",
"shape": [
"lev"
],
"description": "Cloud-water mixing ratio."
},
"dtcld": {
"type": "parameter",
"units": "s",
"default": 60.0,
"description": "Length of the WSM6 sub-time step; enters only the rate limiters."
},
"pacrc": {
"type": "unknown",
"units": "1/(m^(341/100)*s)",
"description": "Snow-cloud accretion coefficient pi n0s avts Gamma(3 + bvts) E_sc/4 (WSM6 pacrc); units for bvts = 0.41."
},
"pacrg": {
"type": "unknown",
"units": "1/(m^(19/5)*s)",
"description": "Graupel-cloud accretion coefficient pi n0g avtg Gamma(3 + bvtg)/4 (WSM6 pacrg); units for bvtg = 0.8."
},
"supcol": {
"type": "unknown",
"units": "K",
"shape": [
"lev"
],
"description": "Supercooling T0 - T (positive below freezing; WSM6 supcol)."
},
"eacrs": {
"type": "unknown",
"units": "1",
"shape": [
"lev"
],
"description": "Collection efficiency of cloud ice by snow and graupel, exp(-0.07 (T0 - T)) (WSM6 eacrs = egi)."
},
"K_ri": {
"type": "unknown",
"units": "m^3",
"shape": [
"lev"
],
"description": "Collection kernel of ice crystals by rain, 2 lambda_r^-3 + 2 D_i lambda_r^-2 + D_i^2 lambda_r^-1."
},
"K_si": {
"type": "unknown",
"units": "m^3",
"shape": [
"lev"
],
"description": "Collection kernel of ice crystals by snow."
},
"K_gi": {
"type": "unknown",
"units": "m^3",
"shape": [
"lev"
],
"description": "Collection kernel of ice crystals by graupel."
},
"K_sr": {
"type": "unknown",
"units": "m^7",
"shape": [
"lev"
],
"description": "Collection kernel of snow (collected) by rain (collector)."
},
"K_rs": {
"type": "unknown",
"units": "m^7",
"shape": [
"lev"
],
"description": "Collection kernel of rain (collected) by snow (collector)."
},
"K_rg": {
"type": "unknown",
"units": "m^7",
"shape": [
"lev"
],
"description": "Collection kernel of rain (collected) by graupel (collector)."
},
"E_ri": {
"type": "unknown",
"units": "1",
"shape": [
"lev"
],
"description": "Efficiency reduction min(max(0, qr/qi), 1)^2 of praci."
},
"E_ir": {
"type": "unknown",
"units": "1",
"shape": [
"lev"
],
"description": "Efficiency reduction min(max(0, qi/qr), 1)^2 of piacr."
},
"E_sc": {
"type": "unknown",
"units": "1",
"shape": [
"lev"
],
"description": "Efficiency reduction min(max(0, qs/qc), 1)^2 of psacw."
},
"E_gc": {
"type": "unknown",
"units": "1",
"shape": [
"lev"
],
"description": "Efficiency reduction min(max(0, qg/qc), 1)^2 of pgacw."
},
"E_rs": {
"type": "unknown",
"units": "1",
"shape": [
"lev"
],
"description": "Efficiency reduction min(max(0, qr/qs), 1)^2 of pracs."
},
"E_sr": {
"type": "unknown",
"units": "1",
"shape": [
"lev"
],
"description": "Efficiency reduction min(max(0, qs/qr), 1)^2 of psacr."
},
"E_gr": {
"type": "unknown",
"units": "1",
"shape": [
"lev"
],
"description": "Efficiency reduction min(max(0, qg/qr), 1)^2 of pgacr."
},
"praci": {
"type": "unknown",
"units": "kg/kg/s",
"shape": [
"lev"
],
"description": "Accretion of cloud ice by rain below 0 C (I->R; HL A15, LFO 25), unlimited."
},
"praci_lim": {
"type": "unknown",
"units": "kg/kg/s",
"shape": [
"lev"
],
"description": "praci after the limiter min(praci, qi/dtcld) (WSM6 praci as applied)."
},
"piacr": {
"type": "unknown",
"units": "kg/kg/s",
"shape": [
"lev"
],
"description": "Accretion of rain by cloud ice below 0 C (R->S or R->G; HL A19, LFO 26), pi^2 a_r n0r rho_w N_i (rho0/rho)^(1/2) Gamma(6 + b_r) lambda_r^-(6+b_r)/(24 rho) times the efficiency reduction, unlimited."
},
"piacr_lim": {
"type": "unknown",
"units": "kg/kg/s",
"shape": [
"lev"
],
"description": "piacr after the limiter min(piacr, qr/dtcld)."
},
"psaci": {
"type": "unknown",
"units": "kg/kg/s",
"shape": [
"lev"
],
"description": "Accretion of cloud ice by snow below 0 C (I->S; HDC 10), pi/4 qi E_si n0s(T) |V_sg - V_i| K_si, unlimited."
},
"psaci_lim": {
"type": "unknown",
"units": "kg/kg/s",
"shape": [
"lev"
],
"description": "psaci after the limiter min(psaci, qi/dtcld)."
},
"pgaci": {
"type": "unknown",
"units": "kg/kg/s",
"shape": [
"lev"
],
"description": "Accretion of cloud ice by graupel below 0 C (I->G; HL A17, LFO 41), unlimited."
},
"pgaci_lim": {
"type": "unknown",
"units": "kg/kg/s",
"shape": [
"lev"
],
"description": "pgaci after the limiter min(pgaci, qi/dtcld)."
},
"psacw": {
"type": "unknown",
"units": "kg/kg/s",
"shape": [
"lev"
],
"description": "Accretion of cloud water by snow (C->S below 0 C, C->R above; HL A7, LFO 24), pacrc n0s(T)/n0s lambda_s^-(3+b_s) qc (rho0/rho)^(1/2) times the efficiency reduction, unlimited."
},
"psacw_lim": {
"type": "unknown",
"units": "kg/kg/s",
"shape": [
"lev"
],
"description": "psacw after the limiter min(psacw, qc/dtcld)."
},
"pgacw": {
"type": "unknown",
"units": "kg/kg/s",
"shape": [
"lev"
],
"description": "Accretion of cloud water by graupel (C->G below 0 C, C->R above; HL A6, LFO 40), unlimited."
},
"pgacw_lim": {
"type": "unknown",
"units": "kg/kg/s",
"shape": [
"lev"
],
"description": "pgacw after the limiter min(pgacw, qc/dtcld)."
},
"paacw": {
"type": "unknown",
"units": "kg/kg/s",
"shape": [
"lev"
],
"description": "Accretion of cloud water by the combined snow/graupel category, the mixing-ratio-weighted mean of the limited psacw and pgacw (WSM6 paacw; this is the term the kernel actually applies to cloud water)."
},
"pracs": {
"type": "unknown",
"units": "kg/kg/s",
"shape": [
"lev"
],
"description": "Accretion of snow by rain below 0 C (S->G; HL A11, LFO 27), pi^2 n0r n0s(T) |V_r - V_sg| (rho_s/rho) K_sr times the efficiency reduction, unlimited."
},
"pracs_lim": {
"type": "unknown",
"units": "kg/kg/s",
"shape": [
"lev"
],
"description": "pracs after the limiter min(pracs, qs/dtcld)."
},
"psacr": {
"type": "unknown",
"units": "kg/kg/s",
"shape": [
"lev"
],
"description": "Accretion of rain by snow (R->S or R->G below 0 C; enhances snow melting above; HL A10, LFO 28), pi^2 n0r n0s(T) |V_sg - V_r| (rho_w/rho) K_rs times the efficiency reduction, unlimited."
},
"psacr_lim": {
"type": "unknown",
"units": "kg/kg/s",
"shape": [
"lev"
],
"description": "psacr after the limiter min(psacr, qr/dtcld)."
},
"pgacr": {
"type": "unknown",
"units": "kg/kg/s",
"shape": [
"lev"
],
"description": "Accretion of rain by graupel (R->G below 0 C; enhances graupel melting above; HL A12, LFO 42), unlimited."
},
"pgacr_lim": {
"type": "unknown",
"units": "kg/kg/s",
"shape": [
"lev"
],
"description": "pgacr after the limiter min(pgacr, qr/dtcld)."
},
"pgacs": {
"type": "unknown",
"units": "kg/kg/s",
"shape": [
"lev"
],
"description": "Accretion of snow by graupel (HL A13, LFO 29): identically zero since WRF V3.0, when snow and graupel were given the common fall speed V_sg (WSM6 sets pgacs = 0)."
},
"pseml": {
"type": "unknown",
"units": "kg/kg/s",
"shape": [
"lev"
],
"description": "Enhanced melting of snow above 0 C by the sensible heat of the accreted liquid water, c_l (T0 - T)(paacw + psacr_lim)/L_f (negative; HL A34, RH84 A21), unlimited."
},
"pseml_lim": {
"type": "unknown",
"units": "kg/kg/s",
"shape": [
"lev"
],
"description": "pseml after the limiter min(max(pseml, -qs/dtcld), 0)."
},
"pgeml": {
"type": "unknown",
"units": "kg/kg/s",
"shape": [
"lev"
],
"description": "Enhanced melting of graupel above 0 C by the accreted liquid water, c_l (T0 - T)(paacw + pgacr_lim)/L_f (negative; HL A24, RH84 A22), unlimited."
},
"pgeml_lim": {
"type": "unknown",
"units": "kg/kg/s",
"shape": [
"lev"
],
"description": "pgeml after the limiter min(max(pgeml, -qg/dtcld), 0)."
}
},
"equations": [
{
"lhs": "qc",
"rhs": {
"op": "input_qc",
"args": []
}
},
{
"lhs": "pacrc",
"rhs": {
"op": "/",
"args": [
{
"op": "*",
"args": [
"wrf.piconst",
"par.n0s",
"par.avts",
"par.g3pbs",
"par.eacrc"
]
},
{
"op": "const",
"args": [],
"value": 4,
"units": "1"
}
]
}
},
{
"lhs": "pacrg",
"rhs": {
"op": "/",
"args": [
{
"op": "*",
"args": [
"wrf.piconst",
"par.n0g",
"par.avtg",
"par.g3pbr"
]
},
{
"op": "const",
"args": [],
"value": 4,
"units": "1"
}
]
}
},
{
"lhs": "supcol",
"rhs": {
"op": "-",
"args": [
"wrf.svpt0",
"sd.T"
]
}
},
{
"lhs": "eacrs",
"rhs": {
"op": "exp",
"args": [
{
"op": "-",
"args": [
{
"op": "*",
"args": [
"par.eacrs_coef",
"supcol"
]
}
]
}
]
}
},
{
"lhs": "K_ri",
"rhs": {
"op": "apply_expression_template",
"args": [],
"name": "collection_kernel_ice_by_precipitation",
"bindings": {
"D": "sd.D_i",
"rslope": "sd.rslope_r",
"rslope2": "sd.rslope2_r",
"rslope3": "sd.rslope3_r"
}
}
},
{
"lhs": "K_si",
"rhs": {
"op": "apply_expression_template",
"args": [],
"name": "collection_kernel_ice_by_precipitation",
"bindings": {
"D": "sd.D_i",
"rslope": "sd.rslope_s",
"rslope2": "sd.rslope2_s",
"rslope3": "sd.rslope3_s"
}
}
},
{
"lhs": "K_gi",
"rhs": {
"op": "apply_expression_template",
"args": [],
"name": "collection_kernel_ice_by_precipitation",
"bindings": {
"D": "sd.D_i",
"rslope": "sd.rslope_g",
"rslope2": "sd.rslope2_g",
"rslope3": "sd.rslope3_g"
}
}
},
{
"lhs": "K_sr",
"rhs": {
"op": "apply_expression_template",
"args": [],
"name": "collection_kernel_precipitation_by_precipitation",
"bindings": {
"rslope_a": "sd.rslope_s",
"rslope2_a": "sd.rslope2_s",
"rslope3_a": "sd.rslope3_s",
"rslope_b": "sd.rslope_r",
"rslope2_b": "sd.rslope2_r",
"rslope3_b": "sd.rslope3_r"
}
}
},
{
"lhs": "K_rs",
"rhs": {
"op": "apply_expression_template",
"args": [],
"name": "collection_kernel_precipitation_by_precipitation",
"bindings": {
"rslope_a": "sd.rslope_r",
"rslope2_a": "sd.rslope2_r",
"rslope3_a": "sd.rslope3_r",
"rslope_b": "sd.rslope_s",
"rslope2_b": "sd.rslope2_s",
"rslope3_b": "sd.rslope3_s"
}
}
},
{
"lhs": "K_rg",
"rhs": {
"op": "apply_expression_template",
"args": [],
"name": "collection_kernel_precipitation_by_precipitation",
"bindings": {
"rslope_a": "sd.rslope_r",
"rslope2_a": "sd.rslope2_r",
"rslope3_a": "sd.rslope3_r",
"rslope_b": "sd.rslope_g",
"rslope2_b": "sd.rslope2_g",
"rslope3_b": "sd.rslope3_g"
}
}
},
{
"lhs": "E_ri",
"rhs": {
"op": "apply_expression_template",
"args": [],
"name": "collection_efficiency_reduction",
"bindings": {
"q_collector": "sd.qr",
"q_collected": "sd.qi",
"q_min": "par.qmin",
"expn": "par.wilt_exp"
}
}
},
{
"lhs": "E_ir",
"rhs": {
"op": "apply_expression_template",
"args": [],
"name": "collection_efficiency_reduction",
"bindings": {
"q_collector": "sd.qi",
"q_collected": "sd.qr",
"q_min": "par.qmin",
"expn": "par.wilt_exp"
}
}
},
{
"lhs": "E_sc",
"rhs": {
"op": "apply_expression_template",
"args": [],
"name": "collection_efficiency_reduction",
"bindings": {
"q_collector": "sd.qs",
"q_collected": "qc",
"q_min": "par.qmin",
"expn": "par.wilt_exp"
}
}
},
{
"lhs": "E_gc",
"rhs": {
"op": "apply_expression_template",
"args": [],
"name": "collection_efficiency_reduction",
"bindings": {
"q_collector": "sd.qg",
"q_collected": "qc",
"q_min": "par.qmin",
"expn": "par.wilt_exp"
}
}
},
{
"lhs": "E_rs",
"rhs": {
"op": "apply_expression_template",
"args": [],
"name": "collection_efficiency_reduction",
"bindings": {
"q_collector": "sd.qr",
"q_collected": "sd.qs",
"q_min": "par.qmin",
"expn": "par.wilt_exp"
}
}
},
{
"lhs": "E_sr",
"rhs": {
"op": "apply_expression_template",
"args": [],
"name": "collection_efficiency_reduction",
"bindings": {
"q_collector": "sd.qs",
"q_collected": "sd.qr",
"q_min": "par.qmin",
"expn": "par.wilt_exp"
}
}
},
{
"lhs": "E_gr",
"rhs": {
"op": "apply_expression_template",
"args": [],
"name": "collection_efficiency_reduction",
"bindings": {
"q_collector": "sd.qg",
"q_collected": "sd.qr",
"q_min": "par.qmin",
"expn": "par.wilt_exp"
}
}
},
{
"lhs": "praci",
"rhs": {
"op": "ifelse",
"args": [
{
"op": "and",
"args": [
{
"op": ">",
"args": [
"supcol",
0
]
},
{
"op": ">",
"args": [
"sd.qi",
"par.qmin"
]
},
{
"op": ">",
"args": [
"sd.qr",
"par.qcrmin"
]
}
]
},
{
"op": "*",
"args": [
{
"op": "/",
"args": [
"wrf.piconst",
{
"op": "const",
"args": [],
"value": 4,
"units": "1"
}
]
},
"sd.qi",
"par.n0r",
{
"op": "abs",
"args": [
{
"op": "-",
"args": [
"sd.vt_r",
"sd.vt_i"
]
}
]
},
"K_ri",
"E_ri"
]
},
0
]
}
},
{
"lhs": "praci_lim",
"rhs": {
"op": "apply_expression_template",
"args": [],
"name": "sink_rate_limiter",
"bindings": {
"rate": "praci",
"q": "sd.qi",
"dt": "dtcld"
}
}
},
{
"lhs": "piacr",
"rhs": {
"op": "ifelse",
"args": [
{
"op": "and",
"args": [
{
"op": ">",
"args": [
"supcol",
0
]
},
{
"op": ">",
"args": [
"sd.qi",
"par.qmin"
]
},
{
"op": ">",
"args": [
"sd.qr",
"par.qcrmin"
]
}
]
},
{
"op": "*",
"args": [
{
"op": "/",
"args": [
{
"op": "*",
"args": [
{
"op": "^",
"args": [
"wrf.piconst",
2
]
},
"par.avtr",
"par.n0r",
"wrf.rhowater",
"sd.xni",
"sd.denfac",
"par.g6pbr",
"sd.rslope3_r",
"sd.rslope3_r",
"sd.rslopeb_r"
]
},
{
"op": "*",
"args": [
{
"op": "const",
"args": [],
"value": 24,
"units": "1"
},
"sd.rho"
]
}
]
},
"E_ir"
]
},
0
]
}
},
{
"lhs": "piacr_lim",
"rhs": {
"op": "apply_expression_template",
"args": [],
"name": "sink_rate_limiter",
"bindings": {
"rate": "piacr",
"q": "sd.qr",
"dt": "dtcld"
}
}
},
{
"lhs": "psaci",
"rhs": {
"op": "ifelse",
"args": [
{
"op": "and",
"args": [
{
"op": ">",
"args": [
"supcol",
0
]
},
{
"op": ">",
"args": [
"sd.qi",
"par.qmin"
]
},
{
"op": ">",
"args": [
"sd.qs",
"par.qcrmin"
]
}
]
},
{
"op": "*",
"args": [
{
"op": "/",
"args": [
"wrf.piconst",
{
"op": "const",
"args": [],
"value": 4,
"units": "1"
}
]
},
"sd.qi",
"eacrs",
"par.n0s",
"sd.n0sfac",
{
"op": "abs",
"args": [
{
"op": "-",
"args": [
"sd.vt_sg",
"sd.vt_i"
]
}
]
},
"K_si"
]
},
0
]
}
},
{
"lhs": "psaci_lim",
"rhs": {
"op": "apply_expression_template",
"args": [],
"name": "sink_rate_limiter",
"bindings": {
"rate": "psaci",
"q": "sd.qi",
"dt": "dtcld"
}
}
},
{
"lhs": "pgaci",
"rhs": {
"op": "ifelse",
"args": [
{
"op": "and",
"args": [
{
"op": ">",
"args": [
"supcol",
0
]
},
{
"op": ">",
"args": [
"sd.qi",
"par.qmin"
]
},
{
"op": ">",
"args": [
"sd.qg",
"par.qcrmin"
]
}
]
},
{
"op": "*",
"args": [
{
"op": "/",
"args": [
"wrf.piconst",
{
"op": "const",
"args": [],
"value": 4,
"units": "1"
}
]
},
"eacrs",
"sd.qi",
"par.n0g",
{
"op": "abs",
"args": [
{
"op": "-",
"args": [
"sd.vt_sg",
"sd.vt_i"
]
}
]
},
"K_gi"
]
},
0
]
}
},
{
"lhs": "pgaci_lim",
"rhs": {
"op": "apply_expression_template",
"args": [],
"name": "sink_rate_limiter",
"bindings": {
"rate": "pgaci",
"q": "sd.qi",
"dt": "dtcld"
}
}
},
{
"lhs": "psacw",
"rhs": {
"op": "ifelse",
"args": [
{
"op": "and",
"args": [
{
"op": ">",
"args": [
"sd.qs",
"par.qcrmin"
]
},
{
"op": ">",
"args": [
"qc",
"par.qmin"
]
}
]
},
{
"op": "*",
"args": [
"pacrc",
"sd.n0sfac",
"sd.rslope3_s",
"sd.rslopeb_s",
"E_sc",
"qc",
"sd.denfac"
]
},
0
]
}
},
{
"lhs": "psacw_lim",
"rhs": {
"op": "apply_expression_template",
"args": [],
"name": "sink_rate_limiter",
"bindings": {
"rate": "psacw",
"q": "qc",
"dt": "dtcld"
}
}
},
{
"lhs": "pgacw",
"rhs": {
"op": "ifelse",
"args": [
{
"op": "and",
"args": [
{
"op": ">",
"args": [
"sd.qg",
"par.qcrmin"
]
},
{
"op": ">",
"args": [
"qc",
"par.qmin"
]
}
]
},
{
"op": "*",
"args": [
"pacrg",
"sd.rslope3_g",
"sd.rslopeb_g",
"E_gc",
"qc",
"sd.denfac"
]
},
0
]
}
},
{
"lhs": "pgacw_lim",
"rhs": {
"op": "apply_expression_template",
"args": [],
"name": "sink_rate_limiter",
"bindings": {
"rate": "pgacw",
"q": "qc",
"dt": "dtcld"
}
}
},
{
"lhs": "paacw",
"rhs": {
"op": "apply_expression_template",
"args": [],
"name": "snow_graupel_weighted_mean",
"bindings": {
"x_s": "psacw_lim",
"q_s": "sd.qs",
"x_g": "pgacw_lim",
"q_g": "sd.qg",
"q_floor": "par.qmin"
}
}
},
{
"lhs": "pracs",
"rhs": {
"op": "ifelse",
"args": [
{
"op": "and",
"args": [
{
"op": ">",
"args": [
"sd.qs",
"par.qcrmin"
]
},
{
"op": ">",
"args": [
"sd.qr",
"par.qcrmin"
]
},
{
"op": ">",
"args": [
"supcol",
0
]
}
]
},
{
"op": "*",
"args": [
{
"op": "^",
"args": [
"wrf.piconst",
2
]
},
"par.n0r",
"par.n0s",
"sd.n0sfac",
{
"op": "abs",
"args": [
{
"op": "-",
"args": [
"sd.vt_r",
"sd.vt_sg"
]
}
]
},
{
"op": "/",
"args": [
"par.dens",
"sd.rho"
]
},
"K_sr",
"E_rs"
]
},
0
]
}
},
{
"lhs": "pracs_lim",
"rhs": {
"op": "apply_expression_template",
"args": [],
"name": "sink_rate_limiter",
"bindings": {
"rate": "pracs",
"q": "sd.qs",
"dt": "dtcld"
}
}
},
{
"lhs": "psacr",
"rhs": {
"op": "ifelse",
"args": [
{
"op": "and",
"args": [
{
"op": ">",
"args": [
"sd.qs",
"par.qcrmin"
]
},
{
"op": ">",
"args": [
"sd.qr",
"par.qcrmin"
]
}
]
},
{
"op": "*",
"args": [
{
"op": "^",
"args": [
"wrf.piconst",
2
]
},
"par.n0r",
"par.n0s",
"sd.n0sfac",
{
"op": "abs",
"args": [
{
"op": "-",
"args": [
"sd.vt_sg",
"sd.vt_r"
]
}
]
},
{
"op": "/",
"args": [
"wrf.rhowater",
"sd.rho"
]
},
"K_rs",
"E_sr"
]
},
0
]
}
},
{
"lhs": "psacr_lim",
"rhs": {
"op": "apply_expression_template",
"args": [],
"name": "sink_rate_limiter",
"bindings": {
"rate": "psacr",
"q": "sd.qr",
"dt": "dtcld"
}
}
},
{
"lhs": "pgacr",
"rhs": {
"op": "ifelse",
"args": [
{
"op": "and",
"args": [
{
"op": ">",
"args": [
"sd.qg",
"par.qcrmin"
]
},
{
"op": ">",
"args": [
"sd.qr",
"par.qcrmin"
]
}
]
},
{
"op": "*",
"args": [
{
"op": "^",
"args": [
"wrf.piconst",
2
]
},
"par.n0r",
"par.n0g",
{
"op": "abs",
"args": [
{
"op": "-",
"args": [
"sd.vt_sg",
"sd.vt_r"
]
}
]
},
{
"op": "/",
"args": [
"wrf.rhowater",
"sd.rho"
]
},
"K_rg",
"E_gr"
]
},
0
]
}
},
{
"lhs": "pgacr_lim",
"rhs": {
"op": "apply_expression_template",
"args": [],
"name": "sink_rate_limiter",
"bindings": {
"rate": "pgacr",
"q": "sd.qr",
"dt": "dtcld"
}
}
},
{
"lhs": "pgacs",
"rhs": {
"op": "*",
"args": [
{
"op": "const",
"args": [],
"value": 0,
"units": "1/s"
},
"sd.qs"
]
}
},
{
"lhs": "pseml",
"rhs": {
"op": "ifelse",
"args": [
{
"op": "and",
"args": [
{
"op": "<=",
"args": [
"supcol",
0
]
},
{
"op": ">",
"args": [
"sd.qs",
0
]
}
]
},
{
"op": "apply_expression_template",
"args": [],
"name": "enhanced_melting_by_accretion",
"bindings": {
"T": "sd.T",
"t0": "wrf.svpt0",
"accreted": {
"op": "+",
"args": [
"paacw",
"psacr_lim"
]
},
"cliq": "wrf.cliq",
"xlf": "wrf.xlf"
}
},
0
]
}
},
{
"lhs": "pseml_lim",
"rhs": {
"op": "apply_expression_template",
"args": [],
"name": "negative_sink_limiter",
"bindings": {
"rate": "pseml",
"q": "sd.qs",
"dt": "dtcld"
}
}
},
{
"lhs": "pgeml",
"rhs": {
"op": "ifelse",
"args": [
{
"op": "and",
"args": [
{
"op": "<=",
"args": [
"supcol",
0
]
},
{
"op": ">",
"args": [
"sd.qg",
0
]
}
]
},
{
"op": "apply_expression_template",
"args": [],
"name": "enhanced_melting_by_accretion",
"bindings": {
"T": "sd.T",
"t0": "wrf.svpt0",
"accreted": {
"op": "+",
"args": [
"paacw",
"pgacr_lim"
]
},
"cliq": "wrf.cliq",
"xlf": "wrf.xlf"
}
},
0
]
}
},
{
"lhs": "pgeml_lim",
"rhs": {
"op": "apply_expression_template",
"args": [],
"name": "negative_sink_limiter",
"bindings": {
"rate": "pgeml",
"q": "sd.qg",
"dt": "dtcld"
}
}
}
],
"tests": [
{
"id": "qss_step250_row23_col24_mixed_phase_accretion",
"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, qc/qi/qr/qs/qg_rates after the sub-step's sedimentation, melting, freezing and slope update; den), the expected values the rates the kernel dumps right after evaluating them (`<rate>_raw`: after each process's own time-step limiter, before the mass-conservation rescaling) and the mp_wsm6_init coefficients, from the real64 replay. No small-dt replay because WSM6's increments are not rate x dt (EqWeFiC FORTRAN_BUGS.md N3). The size distributions, N_i, D_i and fall speeds come from hydrometeor_slopes.esm mounted as subsystem sd on the same inputs (its own tests pin them to the dump). Real64 replay vs real32 dump: <= 1e-5 relative in these rates. Residual esm-vs-real64 mismatch, from the kernel's default-real literals and real32 WRF constants (pi, avtr, bvtr, bvts, n0s, dens, 0.07, 1.49e4, 1.31, 5.38e7, 11.9, ...; EqWeFiC FORTRAN_BUGS.md N2), measured with zero tolerances: <= 1.7e-7 of each column's maximum (psaci; praci 8e-9, piacr 6e-8, pgaci 3e-8, psacw 9e-8, pracs 2e-8, psacr 1.4e-8, pgacr 5e-9, pgeml 6e-8). Tolerances are set 5-10x above: relative 1e-6 on the coefficients, absolute Linf_error bounds on the limited whole columns at 1e-6 of each column's maximum, and relative 2e-6 spot checks of the UNLIMITED rates at layers where the kernel's limiter is provably inactive (the dumped rate is below half of q/dtcld there; in this column only pracs at layer 11 and pgacr at layer 13 are limited). Regime: supercell step 250 (t = 50 min), row j = 23, column i = 24: freezing level at layer 9; rain 1-16, cloud water 1-20, snow 6-33, graupel 1-33, ice 9-39; every accretion process is active (praci/piacr/pracs/psacr in 9-16, psaci/pgaci in 9-32, psacw 9-20, pgacw/pgacr from layer 8, where T is just above 0 C so pgeml is active at 1.5e-18 kg/kg/s and pseml is zero because there is no snow). Exception: pseml and pgeml are proportional to the supercooling T0 - T, which is -0.15 K in the only active layer, so the kernel's real32 T0 = 273.1499939 K (6e-6 K off) shows up as a 4e-6 relative difference; their tolerances are therefore rel 5e-5 and Linf 1e-4 of the column maximum.",
"parameter_overrides": {
"dtcld": 12.0
},
"expression_template_imports": [
{
"ref": "./tests/qss_step250_row23_col24_mixed_phase_accretion_inputs.esm"
}
],
"time_span": {
"start": 0.0,
"end": 1.0
},
"assertions": [
{
"variable": "pacrc",
"time": 0.0,
"expected": 55442087.06914436,
"tolerance": {
"rel": 1e-06
}
},
{
"variable": "pacrg",
"time": 0.0,
"expected": 4863058762.307106,
"tolerance": {
"rel": 1e-06
}
},
{
"variable": "praci_lim",
"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,
1.7742779547889016e-08,
5.2382123851688705e-08,
8.633719130029905e-08,
1.287084015752049e-07,
1.0384242305687417e-07,
5.1200057112345464e-08,
1.0501429310278737e-09,
5.447637515036745e-13,
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": 2e-13,
"rel": 0.0
}
},
{
"variable": "piacr_lim",
"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,
1.6864174216429474e-12,
7.79423122522383e-12,
1.6326338838155124e-11,
5.2258939915413226e-11,
4.706499221933182e-10,
2.062412355542352e-09,
1.6532004761700903e-08,
2.2812468574407131e-10,
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": 5e-14,
"rel": 0.0
}
},
{
"variable": "psaci_lim",
"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,
4.339835454639444e-12,
2.4106617193676473e-11,
6.638244337634433e-11,
3.428058574008553e-10,
8.446006305846094e-09,
2.665202947460932e-08,
6.289731382809265e-08,
1.31229141504122e-07,
2.395131840509679e-07,
4.2908049060317376e-07,
7.372017308606025e-07,
1.6739087658603757e-06,
5.032118617131792e-06,
4.118301737381418e-06,
3.4488400414139816e-06,
3.0444491211844277e-06,
2.646873879998877e-06,
1.972396437567465e-06,
1.4131207930606903e-06,
7.634808242932739e-07,
1.756231001760978e-07,
3.4129810707218883e-09,
1.1076622760351909e-16,
3.289826611548454e-19,
0.0,
0.0,
0.0,
0.0,
0.0,
0.0,
0.0,
0.0
]
},
"k"
]
}
},
"tolerance": {
"abs": 1e-11,
"rel": 0.0
}
},
{
"variable": "pgaci_lim",
"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,
1.470982207727957e-11,
9.026321917318153e-11,
3.821256516850523e-10,
3.6193921737600494e-09,
3.288552589997903e-08,
6.639779741698793e-08,
9.0927856804158e-08,
1.2208262057958115e-07,
1.501529200206558e-07,
1.894299127078329e-07,
2.3217751494915538e-07,
3.718096361221166e-07,
7.669520708033682e-07,
4.3899429126914413e-07,
2.653686348620898e-07,
1.6549109775712073e-07,
1.0195838504869484e-07,
5.416063036039372e-08,
2.781136798327825e-08,
1.0763953452650221e-08,
2.0061039405410337e-09,
5.741101514373344e-11,
1.2226108773459104e-17,
4.3214150260816666e-20,
0.0,
0.0,
0.0,
0.0,
0.0,
0.0,
0.0,
0.0
]
},
"k"
]
}
},
"tolerance": {
"abs": 2e-12,
"rel": 0.0
}
},
{
"variable": "psacw_lim",
"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,
6.175678017918024e-18,
5.104294382887524e-17,
3.592863248795173e-16,
2.2009365397742987e-14,
3.7530059878347275e-09,
1.397175338732231e-07,
1.0145144386469564e-06,
2.723200224984411e-06,
3.715033121995188e-06,
4.3783405094861465e-06,
4.489786431631322e-06,
4.060686659324286e-06,
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-11,
"rel": 0.0
}
},
{
"variable": "pgacw_lim",
"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,
1.4556137326140967e-21,
6.651315680803464e-14,
4.600327024872958e-12,
9.095083302299403e-10,
1.5946865205348746e-06,
1.1563187211762363e-05,
1.3874329387647139e-05,
1.4562835193228891e-05,
1.5464931840936465e-05,
1.4907640176152569e-05,
1.3532460625819758e-05,
1.1157247010067202e-05,
8.423977120380946e-06,
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": 3e-11,
"rel": 0.0
}
},
{
"variable": "paacw",
"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,
1.4556137326140967e-21,
6.474424433135573e-14,
4.53986580509129e-12,
9.056177974370575e-10,
1.5924417224955671e-06,
1.1426845758687226e-05,
1.3563888687542648e-05,
1.4012909443501124e-05,
1.4694771918424788e-05,
1.3992088984433094e-05,
1.2615216277536616e-05,
1.0380753415058703e-05,
7.85861818441924e-06,
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": 3e-11,
"rel": 0.0
}
},
{
"variable": "pracs_lim",
"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,
4.923515715746202e-09,
1.1524362441532116e-08,
2.3465029520851334e-08,
8.686132885783782e-08,
4.06555603256008e-06,
3.6488848323555907e-06,
5.988025005841963e-10,
1.0356973424941688e-12,
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-11,
"rel": 0.0
}
},
{
"variable": "psacr_lim",
"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,
1.3534168348208638e-14,
6.764179035644899e-14,
2.8295612412106983e-13,
7.37013701667065e-12,
1.03121197873361e-07,
1.342289884098848e-06,
1.1443426277640317e-07,
9.725981247282894e-09,
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": 3e-12,
"rel": 0.0
}
},
{
"variable": "pgacr_lim",
"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,
8.30136207033696e-17,
4.5337243169982624e-11,
8.90146163302038e-10,
3.793556240769671e-08,
9.984931457767396e-06,
0.0003240617047759342,
3.102904369910376e-05,
1.5084787511794335e-07,
1.0542515388160218e-08,
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-09,
"rel": 0.0
}
},
{
"variable": "pgacs",
"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": 0,
"rel": 0.0
}
},
{
"variable": "pseml_lim",
"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": 0,
"rel": 0.0
}
},
{
"variable": "pgeml_lim",
"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,
-1.5309678351649967e-18,
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": 2e-22,
"rel": 0.0
}
},
{
"variable": "praci",
"time": 0.0,
"coords": {
"lev": 13
},
"expected": 1.0384242305687417e-07,
"tolerance": {
"rel": 2e-06
}
},
{
"variable": "praci",
"time": 0.0,
"coords": {
"lev": 14
},
"expected": 5.1200057112345464e-08,
"tolerance": {
"rel": 2e-06
}
},
{
"variable": "praci",
"time": 0.0,
"coords": {
"lev": 15
},
"expected": 1.0501429310278737e-09,
"tolerance": {
"rel": 2e-06
}
},
{
"variable": "praci",
"time": 0.0,
"coords": {
"lev": 16
},
"expected": 5.447637515036745e-13,
"tolerance": {
"rel": 2e-06
}
},
{
"variable": "piacr",
"time": 0.0,
"coords": {
"lev": 9
},
"expected": 1.6864174216429474e-12,
"tolerance": {
"rel": 2e-06
}
},
{
"variable": "piacr",
"time": 0.0,
"coords": {
"lev": 12
},
"expected": 5.2258939915413226e-11,
"tolerance": {
"rel": 2e-06
}
},
{
"variable": "piacr",
"time": 0.0,
"coords": {
"lev": 16
},
"expected": 2.2812468574407131e-10,
"tolerance": {
"rel": 2e-06
}
},
{
"variable": "psaci",
"time": 0.0,
"coords": {
"lev": 9
},
"expected": 4.339835454639444e-12,
"tolerance": {
"rel": 2e-06
}
},
{
"variable": "psaci",
"time": 0.0,
"coords": {
"lev": 16
},
"expected": 1.31229141504122e-07,
"tolerance": {
"rel": 2e-06
}
},
{
"variable": "psaci",
"time": 0.0,
"coords": {
"lev": 24
},
"expected": 3.0444491211844277e-06,
"tolerance": {
"rel": 2e-06
}
},
{
"variable": "psaci",
"time": 0.0,
"coords": {
"lev": 32
},
"expected": 3.289826611548454e-19,
"tolerance": {
"rel": 2e-06
}
},
{
"variable": "pgaci",
"time": 0.0,
"coords": {
"lev": 9
},
"expected": 1.470982207727957e-11,
"tolerance": {
"rel": 2e-06
}
},
{
"variable": "pgaci",
"time": 0.0,
"coords": {
"lev": 16
},
"expected": 1.2208262057958115e-07,
"tolerance": {
"rel": 2e-06
}
},
{
"variable": "pgaci",
"time": 0.0,
"coords": {
"lev": 24
},
"expected": 1.6549109775712073e-07,
"tolerance": {
"rel": 2e-06
}
},
{
"variable": "pgaci",
"time": 0.0,
"coords": {
"lev": 32
},
"expected": 4.3214150260816666e-20,
"tolerance": {
"rel": 2e-06
}
},
{
"variable": "psacw",
"time": 0.0,
"coords": {
"lev": 9
},
"expected": 6.175678017918024e-18,
"tolerance": {
"rel": 2e-06
}
},
{
"variable": "psacw",
"time": 0.0,
"coords": {
"lev": 14
},
"expected": 1.397175338732231e-07,
"tolerance": {
"rel": 2e-06
}
},
{
"variable": "psacw",
"time": 0.0,
"coords": {
"lev": 20
},
"expected": 4.060686659324286e-06,
"tolerance": {
"rel": 2e-06
}
},
{
"variable": "pgacw",
"time": 0.0,
"coords": {
"lev": 8
},
"expected": 1.4556137326140967e-21,
"tolerance": {
"rel": 2e-06
}
},
{
"variable": "pgacw",
"time": 0.0,
"coords": {
"lev": 14
},
"expected": 1.3874329387647139e-05,
"tolerance": {
"rel": 2e-06
}
},
{
"variable": "pgacw",
"time": 0.0,
"coords": {
"lev": 20
},
"expected": 8.423977120380946e-06,
"tolerance": {
"rel": 2e-06
}
},
{
"variable": "pracs",
"time": 0.0,
"coords": {
"lev": 14
},
"expected": 3.6488848323555907e-06,
"tolerance": {
"rel": 2e-06
}
},
{
"variable": "pracs",
"time": 0.0,
"coords": {
"lev": 15
},
"expected": 5.988025005841963e-10,
"tolerance": {
"rel": 2e-06
}
},
{
"variable": "pracs",
"time": 0.0,
"coords": {
"lev": 16
},
"expected": 1.0356973424941688e-12,
"tolerance": {
"rel": 2e-06
}
},
{
"variable": "psacr",
"time": 0.0,
"coords": {
"lev": 9
},
"expected": 1.3534168348208638e-14,
"tolerance": {
"rel": 2e-06
}
},
{
"variable": "psacr",
"time": 0.0,
"coords": {
"lev": 12
},
"expected": 7.37013701667065e-12,
"tolerance": {
"rel": 2e-06
}
},
{
"variable": "psacr",
"time": 0.0,
"coords": {
"lev": 16
},
"expected": 9.725981247282894e-09,
"tolerance": {
"rel": 2e-06
}
},
{
"variable": "pgacr",
"time": 0.0,
"coords": {
"lev": 8
},
"expected": 8.30136207033696e-17,
"tolerance": {
"rel": 2e-06
}
},
{
"variable": "pgacr",
"time": 0.0,
"coords": {
"lev": 10
},
"expected": 8.90146163302038e-10,
"tolerance": {
"rel": 2e-06
}
},
{
"variable": "pgacr",
"time": 0.0,
"coords": {
"lev": 12
},
"expected": 9.984931457767396e-06,
"tolerance": {
"rel": 2e-06
}
},
{
"variable": "pgacr",
"time": 0.0,
"coords": {
"lev": 16
},
"expected": 1.0542515388160218e-08,
"tolerance": {
"rel": 2e-06
}
},
{
"variable": "pgeml",
"time": 0.0,
"coords": {
"lev": 8
},
"expected": -1.5309678351649967e-18,
"tolerance": {
"rel": 5e-05
}
},
{
"variable": "praci",
"time": 0.0,
"coords": {
"lev": 1
},
"expected": 0.0,
"tolerance": {
"abs": 0,
"rel": 0.0
}
},
{
"variable": "praci",
"time": 0.0,
"coords": {
"lev": 8
},
"expected": 0.0,
"tolerance": {
"abs": 0,
"rel": 0.0
}
},
{
"variable": "praci",
"time": 0.0,
"coords": {
"lev": 20
},
"expected": 0.0,
"tolerance": {
"abs": 0,
"rel": 0.0
}
},
{
"variable": "praci",
"time": 0.0,
"coords": {
"lev": 40
},
"expected": 0.0,
"tolerance": {
"abs": 0,
"rel": 0.0
}
},
{
"variable": "psaci",
"time": 0.0,
"coords": {
"lev": 1
},
"expected": 0.0,
"tolerance": {
"abs": 0,
"rel": 0.0
}
},
{
"variable": "psaci",
"time": 0.0,
"coords": {
"lev": 8
},
"expected": 0.0,
"tolerance": {
"abs": 0,
"rel": 0.0
}
},
{
"variable": "psaci",
"time": 0.0,
"coords": {
"lev": 33
},
"expected": 0.0,
"tolerance": {
"abs": 0,
"rel": 0.0
}
},
{
"variable": "psaci",
"time": 0.0,
"coords": {
"lev": 40
},
"expected": 0.0,
"tolerance": {
"abs": 0,
"rel": 0.0
}
}
]
},
{
"id": "qss_step250_row23_col25_enhanced_melting",
"description": "Same reference chain, regime and tolerance reasoning as qss_step250_row23_col24_mixed_phase_accretion, one tile column to the east (i = 25): the layer just above freezing (layer 8, T = 273.3 K) holds snow, graupel, rain and cloud water at once, so both enhanced-melting terms pseml (1.3e-15) and pgeml (1.7e-14 kg/kg/s) are active and unlimited there, together with the above-freezing accretions psacw, pgacw, psacr and pgacr that feed them. Measured residual <= 6e-8 of column maximum in every accretion rate; pseml and pgeml differ by 1.6e-5 relative because they multiply the supercooling T0 - T = -0.15 K, where the kernel's real32 T0 (273.1499939 K) is 6e-6 K off, hence rel 5e-5 / Linf 1e-4 of column maximum for those two.",
"parameter_overrides": {
"dtcld": 12.0
},
"expression_template_imports": [
{
"ref": "./tests/qss_step250_row23_col25_enhanced_melting_inputs.esm"
}
],
"time_span": {
"start": 0.0,
"end": 1.0
},
"assertions": [
{
"variable": "pseml_lim",
"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,
-1.3012579280437537e-15,
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": 2e-19,
"rel": 0.0
}
},
{
"variable": "pgeml_lim",
"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,
-1.6989378654573032e-14,
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": 2e-18,
"rel": 0.0
}
},
{
"variable": "pseml",
"time": 0.0,
"coords": {
"lev": 8
},
"expected": -1.3012579280437537e-15,
"tolerance": {
"rel": 5e-05
}
},
{
"variable": "pgeml",
"time": 0.0,
"coords": {
"lev": 8
},
"expected": -1.6989378654573032e-14,
"tolerance": {
"rel": 5e-05
}
},
{
"variable": "psacw_lim",
"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,
1.6716229206748802e-16,
1.8152021301129775e-15,
1.88159063466701e-15,
2.933900640654038e-13,
1.8474456582235372e-09,
2.0782011674490543e-07,
1.8693773743761933e-06,
4.4054108480680165e-06,
5.13290059706574e-06,
5.352553148041909e-06,
4.962948870554045e-06,
4.1186174913882e-06,
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-11,
"rel": 0.0
}
},
{
"variable": "pgacw_lim",
"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,
1.3254133134614642e-15,
2.2508679958741385e-15,
2.677660650159687e-11,
3.091976182377436e-08,
1.0703187996059274e-05,
1.4599371048016719e-05,
1.3827793124973968e-05,
1.2916477756480019e-05,
1.1547148448158391e-05,
9.933583651003268e-06,
7.960884298814176e-06,
5.935199512176686e-06,
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": 3e-11,
"rel": 0.0
}
},
{
"variable": "paacw",
"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,
1.036758130878215e-15,
2.0830757654614165e-15,
2.610565495000023e-11,
3.050908459125365e-08,
1.0505209767470479e-05,
1.3910167462832437e-05,
1.2814520850143226e-05,
1.1911345406612813e-05,
1.0617094269097914e-05,
9.179207723313115e-06,
7.426831305949175e-06,
5.598394651673489e-06,
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": 3e-11,
"rel": 0.0
}
},
{
"variable": "psacr_lim",
"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,
2.860442799527414e-13,
1.863351276546666e-12,
1.6230934015895278e-12,
8.972452492217285e-11,
9.705867785163537e-08,
3.4139803508603156e-06,
1.7512181624513474e-07,
5.8631962872440914e-09,
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": 5e-12,
"rel": 0.0
}
},
{
"variable": "pgacr_lim",
"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,
3.747127503110432e-12,
4.438054471281413e-12,
4.129542811697731e-09,
7.573582963204622e-07,
0.00018094048439794638,
8.403968699226293e-06,
1.3888400546244826e-07,
3.982983960212419e-09,
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": 5e-10,
"rel": 0.0
}
},
{
"variable": "praci_lim",
"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,
2.02088492251809e-08,
5.612364905043e-08,
9.128392408088933e-08,
6.898735547079778e-08,
3.2808816259537e-08,
3.3665720022978115e-09,
1.3226225813555507e-13,
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": 2e-13,
"rel": 0.0
}
},
{
"variable": "piacr_lim",
"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,
4.606156425086959e-12,
2.0838943822234292e-11,
6.856047800611653e-11,
5.63585681609114e-10,
3.1687023405895772e-09,
3.994213994252949e-08,
1.0002030143487266e-10,
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-13,
"rel": 0.0
}
},
{
"variable": "psaci_lim",
"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,
1.3944197715457764e-11,
7.001496827294389e-11,
4.330876568029058e-10,
7.150953002067829e-09,
3.0435806206486105e-08,
7.221419551073954e-08,
1.414504100601203e-07,
2.504347885773683e-07,
4.3386400405801775e-07,
7.437687168040538e-07,
1.4742871651817728e-06,
4.11791602380035e-06,
3.689025313807853e-06,
3.3982906422695922e-06,
3.1665694425078287e-06,
2.938638292978695e-06,
2.479407899658481e-06,
2.123797821880992e-06,
1.646008956831249e-06,
1.074194152177945e-06,
4.432416998483729e-07,
2.698554514276048e-08,
1.3867117197500972e-15,
1.4639877895012712e-17,
0.0,
0.0,
0.0,
0.0,
0.0,
0.0,
0.0,
0.0
]
},
"k"
]
}
},
"tolerance": {
"abs": 1e-11,
"rel": 0.0
}
},
{
"variable": "pgaci_lim",
"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,
9.913875808794863e-12,
1.810611321777944e-10,
1.4462021801022898e-09,
2.1236223022035096e-08,
4.617760567864698e-08,
6.370325434034989e-08,
8.337979868451076e-08,
1.0601173179059031e-07,
1.3719992805523323e-07,
1.7909586954944106e-07,
2.7124312088469757e-07,
5.619902934443104e-07,
3.862989616853083e-07,
2.8061402877472706e-07,
2.0321994943577332e-07,
1.4702616038873278e-07,
9.684225984777695e-08,
6.243688165963448e-08,
3.478416336697072e-08,
1.638115439562581e-08,
4.254044899504508e-09,
3.302720841849848e-10,
3.3045322449074703e-16,
3.26899963809532e-18,
0.0,
0.0,
0.0,
0.0,
0.0,
0.0,
0.0,
0.0
]
},
"k"
]
}
},
"tolerance": {
"abs": 2e-12,
"rel": 0.0
}
},
{
"variable": "pracs_lim",
"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,
3.805590067870658e-08,
3.792527062231796e-08,
2.3535824561207458e-07,
2.813723404729006e-06,
3.6011471929533434e-06,
1.0455990745403695e-09,
2.3822966262964096e-13,
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-11,
"rel": 0.0
}
},
{
"variable": "psacw",
"time": 0.0,
"coords": {
"lev": 8
},
"expected": 1.6716229206748802e-16,
"tolerance": {
"rel": 2e-06
}
},
{
"variable": "psacw",
"time": 0.0,
"coords": {
"lev": 12
},
"expected": 1.8474456582235372e-09,
"tolerance": {
"rel": 2e-06
}
},
{
"variable": "psacw",
"time": 0.0,
"coords": {
"lev": 19
},
"expected": 4.1186174913882e-06,
"tolerance": {
"rel": 2e-06
}
},
{
"variable": "psacr",
"time": 0.0,
"coords": {
"lev": 8
},
"expected": 2.860442799527414e-13,
"tolerance": {
"rel": 2e-06
}
},
{
"variable": "psacr",
"time": 0.0,
"coords": {
"lev": 12
},
"expected": 9.705867785163537e-08,
"tolerance": {
"rel": 2e-06
}
},
{
"variable": "psacr",
"time": 0.0,
"coords": {
"lev": 15
},
"expected": 5.8631962872440914e-09,
"tolerance": {
"rel": 2e-06
}
},
{
"variable": "pgacr",
"time": 0.0,
"coords": {
"lev": 8
},
"expected": 3.747127503110432e-12,
"tolerance": {
"rel": 2e-06
}
},
{
"variable": "pgacr",
"time": 0.0,
"coords": {
"lev": 11
},
"expected": 7.573582963204622e-07,
"tolerance": {
"rel": 2e-06
}
},
{
"variable": "pgacr",
"time": 0.0,
"coords": {
"lev": 15
},
"expected": 3.982983960212419e-09,
"tolerance": {
"rel": 2e-06
}
}
]
},
{
"id": "scm_call120_ice_only_no_accretion",
"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), lowest 40 of the 59 layers (esm-spec 6.6 tests cannot rebind NLEV), replayed through the real64 kernels/wsm6_driver. Zero check: the column holds only cloud ice (qi <= 5e-5 in layers 30-40), no cloud water, rain, snow or graupel, so every collection rate and both enhanced-melting terms must be exactly zero although the ice-phase gates (T < 0 C, qi > qmin) are open in layers 25-40; the coefficients are still checked.",
"parameter_overrides": {
"dtcld": 60.0
},
"expression_template_imports": [
{
"ref": "./tests/scm_call120_ice_only_no_accretion_inputs.esm"
}
],
"time_span": {
"start": 0.0,
"end": 1.0
},
"assertions": [
{
"variable": "pacrc",
"time": 0.0,
"expected": 55442087.06914436,
"tolerance": {
"rel": 1e-06
}
},
{
"variable": "praci_lim",
"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": 0,
"rel": 0.0
}
},
{
"variable": "piacr_lim",
"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": 0,
"rel": 0.0
}
},
{
"variable": "psaci_lim",
"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": 0,
"rel": 0.0
}
},
{
"variable": "pgaci_lim",
"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": 0,
"rel": 0.0
}
},
{
"variable": "psacw_lim",
"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": 0,
"rel": 0.0
}
},
{
"variable": "pgacw_lim",
"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": 0,
"rel": 0.0
}
},
{
"variable": "paacw",
"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": 0,
"rel": 0.0
}
},
{
"variable": "pracs_lim",
"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": 0,
"rel": 0.0
}
},
{
"variable": "psacr_lim",
"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": 0,
"rel": 0.0
}
},
{
"variable": "pgacr_lim",
"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": 0,
"rel": 0.0
}
},
{
"variable": "pseml_lim",
"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": 0,
"rel": 0.0
}
},
{
"variable": "pgeml_lim",
"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": 0,
"rel": 0.0
}
}
]
}
]
}