RRTMLWHeating
Longwave heating of a model column from the RRTM up- and downwelling fluxes (WRF ra_lw_physics = 1, SUBROUTINE RTRN heating-rate loop 7000 and the TTEN/GLW/OLR mapping of SUBROUTINE RRTM in phys/module_ra_rrtm.F, WRF 4.8), written as the pressure-coordinate flux-divergence PDE dT/dt = -(g/cp) dF_net/ds, s = p_sfc - p on the EarthSciDiscretizations grids/column_nonuniform_1d grid. The grid's interface coordinate `ze` is here the PRESSURE DISTANCE ABOVE THE SURFACE s = p_e[1] - p_e (Pa, monotone increasing with lev), so the grid's layer measure dz is the layer pressure thickness p_e[k] - p_e[k+1] and the imported face_flux_D_lev_supplied_faces rule lowers D(F_net, lev) to (F_net[k+1] - F_net[k]) / (p_e[k] - p_e[k+1]); with the RRTM value of g/cp (HEATFAC) this is exactly RTRN's HTR(L-1) = HEATFAC (FNET(L-1) - FNET(L)) / (PZ(L-1) - PZ(L)), L = 1..NLAYERS, PZ in hPa, HTR in K/day, verified against the instrumented WRF dumps to real32 roundoff (this is the convention the instrumentation pass could not reproduce: HTR(L-1), not HTR(L), is the heating of layer L, and HTR(NLAYERS) is simply set to 0). Column mapping: RRTM indexes its column BOTTOM-UP like this grid -- RRTM layer L is model layer L for L <= NLEV (MM5ATM: PAVEL(L) = p(kte+1-L) undoes the top-down ordering of the RRTMLWRAD 1-D arrays), RRTM level L is the model interface L+1 (PZ(0) the surface p8w(1), PZ(NLEV) the model top p_top) -- and MM5ATM extends the column above p_top with NLAYERS - NLEV buffer layers of thickness deltap = 4 hPa down to PZ(NLAYERS) = 0 (temperatures from a standard profile offset to match the model top, constant water vapour 5e-6, model-top CH4/N2O, climatological ozone) so that the fluxes at the model interfaces include the emission of the atmosphere above the model top. Only the fluxes at the NLEV+1 MODEL interfaces enter this component (inputs F_up, F_dn of shape [lev_nodes], the first NLEV+1 entries of TOTUFLUX/TOTDFLUX); the buffer layers are heated by RTRN but their heating is discarded (RRTM: TTEN(K) = HTR(kte-K)/86400 for K = 1..kte, in the wrapper's top-down order). Outputs: dTdt (K/s, WRF TTEN reversed to bottom-up), dthdt = dTdt/exner (the increment RRTMLWRAD adds to RTHRATEN), glw = F_dn at the surface (GLW = TOTDFLUX(0)) and olr = F_up at the MODEL TOP (WRF sets OLR = TOTUFLUX(kte), the upward flux at p_top, not TOTUFLUX(NLAYERS) at the top of the RRTM column; the two differ by 3-7 W/m^2 in the reference run). The fluxes themselves (the RTRN two-stream sweep over 140 g-points and the gas optics) are the later stages of the RRTM transcription; this component is the flux-to-tendency stage that every longwave scheme shares. Inputs are REWRITE-TARGET ops `input_<name>` that the consumer lowers (in the inline tests through a per-test expression_template_imports library extracted from the WRF dumps, because esm-spec 6.6 parameter_overrides admit scalars only). EqWeFiC, cited here for FORTRAN_BUGS.md, couplings/ and components/atmospheric_dynamics/wrf_arw/, is https://github.com/EarthSciML/EqWeFiC, where these components were developed and are coupled into a WRF column.
Description
Longwave heating of a model column from the RRTM up- and downwelling fluxes (WRF ra_lw_physics = 1, SUBROUTINE RTRN heating-rate loop 7000 and the TTEN/GLW/OLR mapping of SUBROUTINE RRTM in phys/module_ra_rrtm.F, WRF 4.8), written as the pressure-coordinate flux-divergence PDE dT/dt = -(g/cp) dF_net/ds, s = p_sfc - p on the EarthSciDiscretizations grids/column_nonuniform_1d grid. The grid’s interface coordinate ze is here the PRESSURE DISTANCE ABOVE THE SURFACE s = p_e[1] - p_e (Pa, monotone increasing with lev), so the grid’s layer measure dz is the layer pressure thickness p_e[k] - p_e[k+1] and the imported face_flux_D_lev_supplied_faces rule lowers D(F_net, lev) to (F_net[k+1] - F_net[k]) / (p_e[k] - p_e[k+1]); with the RRTM value of g/cp (HEATFAC) this is exactly RTRN’s HTR(L-1) = HEATFAC (FNET(L-1) - FNET(L)) / (PZ(L-1) - PZ(L)), L = 1..NLAYERS, PZ in hPa, HTR in K/day, verified against the instrumented WRF dumps to real32 roundoff (this is the convention the instrumentation pass could not reproduce: HTR(L-1), not HTR(L), is the heating of layer L, and HTR(NLAYERS) is simply set to 0). Column mapping: RRTM indexes its column BOTTOM-UP like this grid – RRTM layer L is model layer L for L <= NLEV (MM5ATM: PAVEL(L) = p(kte+1-L) undoes the top-down ordering of the RRTMLWRAD 1-D arrays), RRTM level L is the model interface L+1 (PZ(0) the surface p8w(1), PZ(NLEV) the model top p_top) – and MM5ATM extends the column above p_top with NLAYERS - NLEV buffer layers of thickness deltap = 4 hPa down to PZ(NLAYERS) = 0 (temperatures from a standard profile offset to match the model top, constant water vapour 5e-6, model-top CH4/N2O, climatological ozone) so that the fluxes at the model interfaces include the emission of the atmosphere above the model top. Only the fluxes at the NLEV+1 MODEL interfaces enter this component (inputs F_up, F_dn of shape [lev_nodes], the first NLEV+1 entries of TOTUFLUX/TOTDFLUX); the buffer layers are heated by RTRN but their heating is discarded (RRTM: TTEN(K) = HTR(kte-K)/86400 for K = 1..kte, in the wrapper’s top-down order). Outputs: dTdt (K/s, WRF TTEN reversed to bottom-up), dthdt = dTdt/exner (the increment RRTMLWRAD adds to RTHRATEN), glw = F_dn at the surface (GLW = TOTDFLUX(0)) and olr = F_up at the MODEL TOP (WRF sets OLR = TOTUFLUX(kte), the upward flux at p_top, not TOTUFLUX(NLAYERS) at the top of the RRTM column; the two differ by 3-7 W/m^2 in the reference run). The fluxes themselves (the RTRN two-stream sweep over 140 g-points and the gas optics) are the later stages of the RRTM transcription; this component is the flux-to-tendency stage that every longwave scheme shares. Inputs are REWRITE-TARGET ops input_<name> that the consumer lowers (in the inline tests through a per-test expression_template_imports library extracted from the WRF dumps, because esm-spec 6.6 parameter_overrides admit scalars only). EqWeFiC, cited here for FORTRAN_BUGS.md, couplings/ and components/atmospheric_dynamics/wrf_arw/, is https://github.com/EarthSciML/EqWeFiC
, where these components were developed and are coupled into a WRF column.
Reference
- Mlawer, E. J., S. J. Taubman, P. D. Brown, M. J. Iacono, and S. A. Clough (1997). Radiative transfer for inhomogeneous atmospheres: RRTM, a validated correlated-k model for the longwave. J. Geophys. Res., 102(D14), 16663-16682.
- WRF 4.8 phys/module_ra_rrtm.F: RTRN loop 7000 (lines 6655-6668, heating rate), RRTM lines 2341-2347 (TTEN/GLW/OLR), MM5ATM lines 4103-4150 (buffer layers above the model top), RRTMLWRAD lines 2029-2063 (column ordering).
Variables
| Name | Units | Default | Description |
|---|---|---|---|
T | K | Layer temperature (WRF t3d), the prognostic state, initialised from input_T and heated by dTdt. |
Parameters
| Name | Units | Default | Description |
|---|---|---|---|
p_e_in | Pa | 0.0 | Coupling target (assembly input path): a shaped parameter that receives the interface pressure (WRF p8w, bottom-up) from the column geometry (EqWeFiC components/atmospheric_dynamics/wrf_arw/column_geometry.esm, output p_hyd_w, the hydrostatic interface pressure (p_top at the model top, the surface pressure at the ground), which is what WRF passes here rather than the extrapolated p8w) through a document-level coupling.variable_map (param_to_var); a mount-edge template library lowers this component’s input_p_e rewrite target to it (esm-spec 9.7.10, 10.4). Unused by this component’s own inline tests, which lower input_p_e to dumped constants instead. |
exner_in | 1 | 0.0 | Coupling target (assembly input path): a shaped parameter that receives the layer Exner function (WRF pi3d) from the column geometry (EqWeFiC components/atmospheric_dynamics/wrf_arw/column_geometry.esm, output exner) through a document-level coupling.variable_map (param_to_var); a mount-edge template library lowers this component’s input_exner rewrite target to it (esm-spec 9.7.10, 10.4). Unused by this component’s own inline tests, which lower input_exner to dumped constants instead. |
F_up_in | W/m^2 | 0.0 | Coupling target (assembly input path): a shaped parameter that receives F_up from the upstream component through a document-level coupling.variable_map (param_to_var) when the assembly’s mount-edge template library lowers input_F_up to this parameter (see EqWeFiC couplings/rrtm_lw_column.esm). Standalone, input_F_up is lowered to a dumped column by the test’s library and this parameter is unused (default 0). |
F_dn_in | W/m^2 | 0.0 | Coupling target (assembly input path): a shaped parameter that receives F_dn from the upstream component through a document-level coupling.variable_map (param_to_var) when the assembly’s mount-edge template library lowers input_F_dn to this parameter (see EqWeFiC couplings/rrtm_lw_column.esm). Standalone, input_F_dn is lowered to a dumped column by the test’s library and this parameter is unused (default 0). |
Observed
| Name | Units | Default | Description |
|---|---|---|---|
p_e | Pa | Interface (full-level) pressure, p_e[1] the surface pressure and p_e[NLEV+1] the model-top pressure p_top (WRF p8w, bottom-up; RRTM PZ(0..kte) times 100), consumer-supplied through input_p_e. | |
ze | Pa | The grid’s interface coordinate: pressure distance above the surface s = p_e[1] - p_e, 0 at the surface and increasing upward, so that the column grid’s finite-volume operators are taken with respect to pressure (the grid contract: a pressure- or mass-based column supplies its own monotone interface coordinate as ze). | |
zc | Pa | Layer mid-point of the pressure coordinate, (ze[k] + ze[k+1])/2 (grid template column_cell_center). | |
dz | Pa | Layer pressure thickness p_e[k] - p_e[k+1] = ze[k+1] - ze[k] (grid template column_cell_thickness); the control measure read by the flux-divergence rule (RTRN: PZ(L-1) - PZ(L) in hPa). | |
F_up | W/m^2 | Upwelling longwave flux at the model interfaces (RRTM TOTUFLUX(0..kte), bottom-up), consumer-supplied through input_F_up. | |
F_dn | W/m^2 | Downwelling longwave flux at the model interfaces (RRTM TOTDFLUX(0..kte), bottom-up), consumer-supplied through input_F_dn. | |
F_net | W/m^2 | Net upward longwave flux F_up - F_dn at the model interfaces (RTRN FNET). | |
exner | 1 | Exner function of the layer (WRF pi3d), consumer-supplied through input_exner; converts the temperature tendency into the potential-temperature tendency RTHRATEN. | |
g_over_cp | K/m | RRTM’s g/cp in SI, HEATFAC converted from K/day per (W/m^2/hPa) to K/s per (W/m^2/Pa): heatfac pa_per_hpa / seconds_per_day = 9.76748e-3 K/m (the dry-adiabatic lapse rate with RRTM’s g and cp). | |
dTdt | K/s | Longwave heating rate -(g/cp) dF_net/ds of each model layer (RRTM TTEN, reversed to bottom-up; HTR(L-1)/86400 for layer L). | |
dthdt | K/s | Potential-temperature tendency dTdt/exner (the increment RRTMLWRAD adds to RTHRATEN). | |
glw | W/m^2 | Downwelling longwave flux at the surface, F_dn[1] (RRTM GLW = TOTDFLUX(0)). Template wrf_glw of rrtm_flux_diagnostics.esm, shared with rtrn_sweep.esm. | |
olr | W/m^2 | WRF’s OLR diagnostic: the upwelling longwave flux at the MODEL TOP, F_up[NLEV+1] (RRTM OLR = TOTUFLUX(kte)), which is not the flux at the top of the extended RRTM column (TOTUFLUX(NLAYERS), 3-7 W/m^2 lower in the reference run because the buffer layers above p_top absorb). Template wrf_olr of rrtm_flux_diagnostics.esm, shared with rtrn_sweep.esm. |
Observed expressions
$$ p_{e} = \mathrm{input_p_e}\left(\right) $$Interface (full-level) pressure, p_e[1] the surface pressure and p_e[NLEV+1] the model-top pressure p_top (WRF p8w, bottom-up; RRTM PZ(0..kte) times 100), consumer-supplied through input_p_e.
The grid’s interface coordinate: pressure distance above the surface s = p_e[1] - p_e, 0 at the surface and increasing upward, so that the column grid’s finite-volume operators are taken with respect to pressure (the grid contract: a pressure- or mass-based column supplies its own monotone interface coordinate as ze).
$$ zc = \mathrm{column_cell_center}\left(ze=ze\right) $$Layer mid-point of the pressure coordinate, (ze[k] + ze[k+1])/2 (grid template column_cell_center).
$$ dz = \mathrm{column_cell_thickness}\left(ze=ze\right) $$Layer pressure thickness p_e[k] - p_e[k+1] = ze[k+1] - ze[k] (grid template column_cell_thickness); the control measure read by the flux-divergence rule (RTRN: PZ(L-1) - PZ(L) in hPa).
$$ F_{up} = \mathrm{input_F_up}\left(\right) $$Upwelling longwave flux at the model interfaces (RRTM TOTUFLUX(0..kte), bottom-up), consumer-supplied through input_F_up.
Downwelling longwave flux at the model interfaces (RRTM TOTDFLUX(0..kte), bottom-up), consumer-supplied through input_F_dn.
Net upward longwave flux F_up - F_dn at the model interfaces (RTRN FNET).
$$ exner = \mathrm{input_exner}\left(\right) $$Exner function of the layer (WRF pi3d), consumer-supplied through input_exner; converts the temperature tendency into the potential-temperature tendency RTHRATEN.
RRTM’s g/cp in SI, HEATFAC converted from K/day per (W/m^2/hPa) to K/s per (W/m^2/Pa): heatfac pa_per_hpa / seconds_per_day = 9.76748e-3 K/m (the dry-adiabatic lapse rate with RRTM’s g and cp).
$$ dTdt = \left(-1.0\right) \cdot g_{over\,cp} \cdot \mathrm{D}\left(F_{net}\right) $$Longwave heating rate -(g/cp) dF_net/ds of each model layer (RRTM TTEN, reversed to bottom-up; HTR(L-1)/86400 for layer L).
$$ dthdt = \frac{dTdt}{exner} $$Potential-temperature tendency dTdt/exner (the increment RRTMLWRAD adds to RTHRATEN).
$$ glw = \mathrm{wrf_glw}\left(F_{dn}=F_{dn}\right) $$Downwelling longwave flux at the surface, F_dn[1] (RRTM GLW = TOTDFLUX(0)). Template wrf_glw of rrtm_flux_diagnostics.esm, shared with rtrn_sweep.esm.
$$ olr = \mathrm{wrf_olr}\left(F_{up}=F_{up}\right) $$WRF’s OLR diagnostic: the upwelling longwave flux at the MODEL TOP, F_up[NLEV+1] (RRTM OLR = TOTUFLUX(kte)), which is not the flux at the top of the extended RRTM column (TOTUFLUX(NLAYERS), 3-7 W/m^2 lower in the reference run because the buffer layers above p_top absorb). Template wrf_olr of rrtm_flux_diagnostics.esm, shared with rtrn_sweep.esm.
Equations
$$ \mathrm{ic}\left(T\right) = \mathrm{input_T}\left(\right) $$ $$ \mathrm{D}\left(T\right) = dTdt $$Raw .esm
Raw .esm JSON (this component)
{
"expression_template_imports": [
{
"ref": "${ESD_ROOT}/grids/column_nonuniform_1d/grid.esm",
"bindings": {
"NLEV": "NLEV"
}
},
{
"ref": "${ESD_ROOT}/grids/column_nonuniform_1d/rules/face_flux_D_lev_supplied_faces.esm",
"bindings": {
"NLEV": "NLEV"
}
},
{
"ref": "./rrtm_flux_diagnostics.esm",
"bindings": {
"NLEV": "NLEV"
}
}
],
"subsystems": {
"wrf": {
"ref": "../../../lib/wrf_constants.esm"
},
"par": {
"ref": "./rrtm_parameters.esm"
}
},
"variables": {
"p_e_in": {
"type": "parameter",
"shape": [
"lev_nodes"
],
"units": "Pa",
"default": 0.0,
"description": "Coupling target (assembly input path): a shaped parameter that receives the interface pressure (WRF p8w, bottom-up) from the column geometry (EqWeFiC components/atmospheric_dynamics/wrf_arw/column_geometry.esm, output `p_hyd_w`, the hydrostatic interface pressure (p_top at the model top, the surface pressure at the ground), which is what WRF passes here rather than the extrapolated p8w) through a document-level `coupling.variable_map` (param_to_var); a mount-edge template library lowers this component's `input_p_e` rewrite target to it (esm-spec 9.7.10, 10.4). Unused by this component's own inline tests, which lower `input_p_e` to dumped constants instead."
},
"exner_in": {
"type": "parameter",
"shape": [
"lev"
],
"units": "1",
"default": 0.0,
"description": "Coupling target (assembly input path): a shaped parameter that receives the layer Exner function (WRF pi3d) from the column geometry (EqWeFiC components/atmospheric_dynamics/wrf_arw/column_geometry.esm, output `exner`) through a document-level `coupling.variable_map` (param_to_var); a mount-edge template library lowers this component's `input_exner` rewrite target to it (esm-spec 9.7.10, 10.4). Unused by this component's own inline tests, which lower `input_exner` to dumped constants instead."
},
"F_up_in": {
"type": "parameter",
"units": "W/m^2",
"shape": [
"lev_nodes"
],
"default": 0.0,
"description": "Coupling target (assembly input path): a shaped parameter that receives `F_up` from the upstream component through a document-level `coupling.variable_map` (`param_to_var`) when the assembly's mount-edge template library lowers `input_F_up` to this parameter (see EqWeFiC couplings/rrtm_lw_column.esm). Standalone, `input_F_up` is lowered to a dumped column by the test's library and this parameter is unused (default 0)."
},
"F_dn_in": {
"type": "parameter",
"units": "W/m^2",
"shape": [
"lev_nodes"
],
"default": 0.0,
"description": "Coupling target (assembly input path): a shaped parameter that receives `F_dn` from the upstream component through a document-level `coupling.variable_map` (`param_to_var`) when the assembly's mount-edge template library lowers `input_F_dn` to this parameter (see EqWeFiC couplings/rrtm_lw_column.esm). Standalone, `input_F_dn` is lowered to a dumped column by the test's library and this parameter is unused (default 0)."
},
"p_e": {
"type": "unknown",
"units": "Pa",
"shape": [
"lev_nodes"
],
"description": "Interface (full-level) pressure, p_e[1] the surface pressure and p_e[NLEV+1] the model-top pressure p_top (WRF p8w, bottom-up; RRTM PZ(0..kte) times 100), consumer-supplied through `input_p_e`."
},
"ze": {
"type": "unknown",
"units": "Pa",
"shape": [
"lev_nodes"
],
"description": "The grid's interface coordinate: pressure distance above the surface s = p_e[1] - p_e, 0 at the surface and increasing upward, so that the column grid's finite-volume operators are taken with respect to pressure (the grid contract: a pressure- or mass-based column supplies its own monotone interface coordinate as ze)."
},
"zc": {
"type": "unknown",
"units": "Pa",
"shape": [
"lev"
],
"description": "Layer mid-point of the pressure coordinate, (ze[k] + ze[k+1])/2 (grid template column_cell_center)."
},
"dz": {
"type": "unknown",
"units": "Pa",
"shape": [
"lev"
],
"description": "Layer pressure thickness p_e[k] - p_e[k+1] = ze[k+1] - ze[k] (grid template column_cell_thickness); the control measure read by the flux-divergence rule (RTRN: PZ(L-1) - PZ(L) in hPa)."
},
"F_up": {
"type": "unknown",
"units": "W/m^2",
"shape": [
"lev_nodes"
],
"description": "Upwelling longwave flux at the model interfaces (RRTM TOTUFLUX(0..kte), bottom-up), consumer-supplied through `input_F_up`."
},
"F_dn": {
"type": "unknown",
"units": "W/m^2",
"shape": [
"lev_nodes"
],
"description": "Downwelling longwave flux at the model interfaces (RRTM TOTDFLUX(0..kte), bottom-up), consumer-supplied through `input_F_dn`."
},
"F_net": {
"type": "unknown",
"units": "W/m^2",
"shape": [
"lev_nodes"
],
"description": "Net upward longwave flux F_up - F_dn at the model interfaces (RTRN FNET)."
},
"exner": {
"type": "unknown",
"units": "1",
"shape": [
"lev"
],
"description": "Exner function of the layer (WRF pi3d), consumer-supplied through `input_exner`; converts the temperature tendency into the potential-temperature tendency RTHRATEN."
},
"T": {
"type": "unknown",
"units": "K",
"shape": [
"lev"
],
"description": "Layer temperature (WRF t3d), the prognostic state, initialised from `input_T` and heated by dTdt."
},
"g_over_cp": {
"type": "unknown",
"units": "K/m",
"description": "RRTM's g/cp in SI, HEATFAC converted from K/day per (W/m^2/hPa) to K/s per (W/m^2/Pa): heatfac pa_per_hpa / seconds_per_day = 9.76748e-3 K/m (the dry-adiabatic lapse rate with RRTM's g and cp)."
},
"dTdt": {
"type": "unknown",
"units": "K/s",
"shape": [
"lev"
],
"description": "Longwave heating rate -(g/cp) dF_net/ds of each model layer (RRTM TTEN, reversed to bottom-up; HTR(L-1)/86400 for layer L)."
},
"dthdt": {
"type": "unknown",
"units": "K/s",
"shape": [
"lev"
],
"description": "Potential-temperature tendency dTdt/exner (the increment RRTMLWRAD adds to RTHRATEN)."
},
"glw": {
"type": "unknown",
"units": "W/m^2",
"description": "Downwelling longwave flux at the surface, F_dn[1] (RRTM GLW = TOTDFLUX(0)). Template wrf_glw of rrtm_flux_diagnostics.esm, shared with rtrn_sweep.esm."
},
"olr": {
"type": "unknown",
"units": "W/m^2",
"description": "WRF's OLR diagnostic: the upwelling longwave flux at the MODEL TOP, F_up[NLEV+1] (RRTM OLR = TOTUFLUX(kte)), which is not the flux at the top of the extended RRTM column (TOTUFLUX(NLAYERS), 3-7 W/m^2 lower in the reference run because the buffer layers above p_top absorb). Template wrf_olr of rrtm_flux_diagnostics.esm, shared with rtrn_sweep.esm."
}
},
"equations": [
{
"lhs": "p_e",
"rhs": {
"op": "input_p_e",
"args": []
}
},
{
"lhs": "ze",
"rhs": {
"op": "aggregate",
"output_idx": [
"kn"
],
"args": [
"p_e"
],
"ranges": {
"kn": {
"from": "lev_nodes"
}
},
"expr": {
"op": "-",
"args": [
{
"op": "index",
"args": [
"p_e",
1
]
},
{
"op": "index",
"args": [
"p_e",
"kn"
]
}
]
}
}
},
{
"lhs": "zc",
"rhs": {
"op": "apply_expression_template",
"args": [],
"name": "column_cell_center",
"bindings": {
"ze": "ze"
}
}
},
{
"lhs": "dz",
"rhs": {
"op": "apply_expression_template",
"args": [],
"name": "column_cell_thickness",
"bindings": {
"ze": "ze"
}
}
},
{
"lhs": "F_up",
"rhs": {
"op": "input_F_up",
"args": []
}
},
{
"lhs": "F_dn",
"rhs": {
"op": "input_F_dn",
"args": []
}
},
{
"lhs": "F_net",
"rhs": {
"op": "-",
"args": [
"F_up",
"F_dn"
]
}
},
{
"lhs": "exner",
"rhs": {
"op": "input_exner",
"args": []
}
},
{
"lhs": {
"op": "ic",
"args": [
"T"
]
},
"rhs": {
"op": "input_T",
"args": []
}
},
{
"lhs": "g_over_cp",
"rhs": {
"op": "/",
"args": [
{
"op": "*",
"args": [
"par.heatfac",
"par.pa_per_hpa"
]
},
"par.seconds_per_day"
]
}
},
{
"lhs": "dTdt",
"rhs": {
"op": "*",
"args": [
-1.0,
"g_over_cp",
{
"op": "D",
"args": [
"F_net"
],
"wrt": "lev"
}
]
}
},
{
"lhs": {
"op": "D",
"args": [
"T"
],
"wrt": "t"
},
"rhs": "dTdt"
},
{
"lhs": "dthdt",
"rhs": {
"op": "/",
"args": [
"dTdt",
"exner"
]
}
},
{
"lhs": "glw",
"rhs": {
"op": "apply_expression_template",
"args": [],
"name": "wrf_glw",
"bindings": {
"F_dn": "F_dn"
}
}
},
{
"lhs": "olr",
"rhs": {
"op": "apply_expression_template",
"args": [],
"name": "wrf_olr",
"bindings": {
"F_up": "F_up"
}
}
}
],
"tests": [
{
"id": "scm_call1_evening_clear",
"description": "Reference: WRF 4.8 em_scm_xy single-column run (GNU real32 build, dt = 60 s, 59 layers, mp=6 ra_lw=1 ra_sw=1 sf_sfclay=1 sf_surface=1 bl_pbl=1, radt = 30 min) dumped by the instrumented fork ctessum-claude/WRF, commit e42a269 (v4.8.0-2-ge42a269e); module_esm_dump hooks in RRTMLWRAD and after RTRN inside SUBROUTINE RRTM of phys/module_ra_rrtm.F). RRTM has no standalone real64 driver (rrtminit needs WRF's I/O layer for the k-distribution data), so every expected value is the real32 in-model value and the tolerance contract is rel 1e-5. Inputs are the dumped RRTMLWRAD arguments of tile column 1 (p8w, pi3d, t3d, bottom-up) and the RRTM fluxes TOTUFLUX/TOTDFLUX at the model interfaces (RRTM levels 0..kte, already bottom-up). Expected values: dTdt against HTR(0..kte-1)/86400 (the RTRN heating of RRTM layers 1..kte, i.e. HTR(L-1) is layer L), dthdt against the wrapper's RTHRATEN increment, F_net and dz against the identities on the inputs, glw = TOTDFLUX(0), olr = TOTUFLUX(kte). Measured mismatch of this component against HTR over the four regimes is <= 2.4e-10 K/s in Linf (5e-6 of the column maximum of |dTdt|) and <= 5.3e-6 relative at the three largest-|dTdt| layers (real32 arithmetic of HEATFAC*(FNET(L-1)-FNET(L))/(PZ(L-1)-PZ(L)): differences of O(300 W/m^2) fluxes and O(1000 hPa) pressures carried in single precision), so the column assertions use Linf_error abs 1e-9 K/s (about 1e-5 of the column maximum) and the spot checks rel 1e-5, the real32 contract; the identities (F_net, dz, glw, olr, g_over_cp) use rel/abs 1e-9. The scheme is diagnostic (no time step), so no small-dt replay is involved. Regime: first radiation call (call 1, 19:00 UTC = 12:34 LST), clear sky (cldfra = 0, no condensate), tsk = 288.0 K, glw = 258.1 W/m^2, olr (model top) = 251.5 W/m^2; strongest cooling in the lowest layer and at layers 38-39 (the moist layer top).",
"parameter_overrides": {},
"expression_template_imports": [
{
"ref": "./tests/scm_call1_evening_clear_inputs.esm"
}
],
"time_span": {
"start": 0,
"end": 1
},
"tolerance": {
"rel": 1e-09
},
"assertions": [
{
"variable": "g_over_cp",
"time": 0.0,
"expected": 0.009767476851851852,
"tolerance": {
"rel": 1e-09
}
},
{
"variable": "dz",
"time": 0.0,
"reduce": "Linf_error",
"expected": 0.0,
"reference": {
"op": "aggregate",
"output_idx": [
"k"
],
"args": [],
"ranges": {
"k": {
"from": "lev"
}
},
"expr": {
"op": "index",
"args": [
{
"op": "const",
"args": [],
"value": [
596.734375,
611.84375,
627.328125,
643.21875,
659.5,
676.1875,
693.3125,
710.859375,
728.859375,
747.3125,
766.2265625,
785.625,
805.5078125,
825.90625,
846.40625,
866.53125,
888.6640625,
911.3671875,
934.6484375,
958.546875,
983.0390625,
1008.1875,
1033.9765625,
1060.4296875,
1087.5703125,
1115.40625,
1143.5546875,
1172.390625,
1201.9609375,
1232.28125,
1263.3515625,
1295.203125,
1327.859375,
1361.3359375,
1395.64453125,
1430.82421875,
1466.80078125,
1503.63671875,
1541.41796875,
1580.17578125,
1619.9140625,
1660.64453125,
1702.421875,
1745.203125,
1789.0390625,
1833.99609375,
1880.09765625,
1927.70703125,
1976.49609375,
2026.53515625,
2077.83984375,
2130.43359375,
2184.37890625,
2239.671875,
2296.361328125,
2354.484375,
2414.10546875,
2475.228515625,
2537.873046875
]
},
"k"
]
}
},
"tolerance": {
"abs": 1e-06
}
},
{
"variable": "ze",
"time": 0.0,
"reduce": "Linf_error",
"expected": 0.0,
"reference": {
"op": "aggregate",
"output_idx": [
"k"
],
"args": [],
"ranges": {
"k": {
"from": "lev_nodes"
}
},
"expr": {
"op": "index",
"args": [
{
"op": "const",
"args": [],
"value": [
0.0,
596.734375,
1208.578125,
1835.90625,
2479.125,
3138.625,
3814.8125,
4508.125,
5218.984375,
5947.84375,
6695.15625,
7461.3828125,
8247.0078125,
9052.515625,
9878.421875,
10724.828125,
11591.359375,
12480.0234375,
13391.390625,
14326.0390625,
15284.5859375,
16267.625,
17275.8125,
18309.7890625,
19370.21875,
20457.7890625,
21573.1953125,
22716.75,
23889.140625,
25091.1015625,
26323.3828125,
27586.734375,
28881.9375,
30209.796875,
31571.1328125,
32966.77734375,
34397.6015625,
35864.40234375,
37368.0390625,
38909.45703125,
40489.6328125,
42109.546875,
43770.19140625,
45472.61328125,
47217.81640625,
49006.85546875,
50840.8515625,
52720.94921875,
54648.65625,
56625.15234375,
58651.6875,
60729.52734375,
62859.9609375,
65044.33984375,
67284.01171875,
69580.373046875,
71934.857421875,
74348.962890625,
76824.19140625,
79362.064453125
]
},
"k"
]
}
},
"tolerance": {
"abs": 1e-06
}
},
{
"variable": "F_net",
"time": 0.0,
"reduce": "Linf_error",
"expected": 0.0,
"reference": {
"op": "aggregate",
"output_idx": [
"k"
],
"args": [],
"ranges": {
"k": {
"from": "lev_nodes"
}
},
"expr": {
"op": "index",
"args": [
{
"op": "const",
"args": [],
"value": [
121.39840698242188,
116.04458618164062,
115.74505615234375,
115.87049865722656,
116.12509155273438,
116.42520141601562,
116.73133850097656,
117.02584838867188,
117.28280639648438,
117.48208618164062,
117.59884643554688,
117.58186340332031,
117.33355712890625,
116.58712768554688,
113.89762878417969,
113.70494079589844,
115.689697265625,
116.84977722167969,
117.77621459960938,
118.63824462890625,
119.5059814453125,
120.44645690917969,
121.50479125976562,
122.71064758300781,
124.1083984375,
125.7783203125,
127.81422424316406,
129.9840087890625,
132.3035888671875,
134.78468322753906,
137.46669006347656,
140.3414306640625,
143.4545440673828,
146.84385681152344,
150.5635528564453,
154.70494079589844,
159.45375061035156,
164.44198608398438,
169.73606872558594,
175.47596740722656,
180.9467010498047,
186.4367218017578,
192.0836639404297,
197.90242767333984,
203.9805679321289,
210.1114044189453,
215.33899688720703,
217.84223175048828,
219.95657348632812,
221.87322998046875,
223.6592788696289,
225.2471466064453,
226.71625900268555,
228.07350540161133,
229.3031997680664,
230.44319534301758,
231.5967903137207,
232.83878135681152,
234.643404006958,
240.01601791381836
]
},
"k"
]
}
},
"tolerance": {
"abs": 1e-09
}
},
{
"variable": "glw",
"time": 0.0,
"expected": 258.14453125,
"tolerance": {
"rel": 1e-09
}
},
{
"variable": "olr",
"time": 0.0,
"expected": 251.52928161621094,
"tolerance": {
"rel": 1e-09
}
},
{
"variable": "dTdt",
"time": 0.0,
"reduce": "Linf_error",
"expected": 0.0,
"reference": {
"op": "aggregate",
"output_idx": [
"k"
],
"args": [],
"ranges": {
"k": {
"from": "lev"
}
},
"expr": {
"op": "index",
"args": [
{
"op": "const",
"args": [],
"value": [
8.76324596228423e-05,
4.7816739728053415e-06,
-1.9531438334120647e-06,
-3.866071088446511e-06,
-4.444733882943789e-06,
-4.422149310509364e-06,
-4.149105537820745e-06,
-3.5306763041902474e-06,
-2.670564550768446e-06,
-1.5260686201077921e-06,
2.1649227063688966e-07,
3.0871246148038794e-06,
9.05112811812648e-06,
3.180690109729767e-05,
2.2236111194447236e-06,
-2.237194942103492e-05,
-1.2750724951426187e-05,
-9.928950005107455e-06,
-9.008630834243916e-06,
-8.842095180794045e-06,
-9.344571994410621e-06,
-1.0253335176794617e-05,
-1.1391122997910888e-05,
-1.2874481854615388e-05,
-1.4997624136783459e-05,
-1.7828081768971903e-05,
-1.8532844605269256e-05,
-1.93250455238201e-05,
-2.016210859572446e-05,
-2.125848636583046e-05,
-2.222571935918596e-05,
-2.347683740986718e-05,
-2.493118522343812e-05,
-2.668843777091415e-05,
-2.8983729856985585e-05,
-3.24176362267247e-05,
-3.321678274207645e-05,
-3.4389821467576205e-05,
-3.637190494272444e-05,
-3.381602466106415e-05,
-3.3102866124223777e-05,
-3.321383562352922e-05,
-3.338460017133642e-05,
-3.4017736713091536e-05,
-3.347210862018444e-05,
-2.7841009475566724e-05,
-1.3004806306627061e-05,
-1.0713173973339575e-05,
-9.471764443097291e-06,
-8.608347011937036e-06,
-7.464254481924905e-06,
-6.7355152633455066e-06,
-6.068903538915846e-06,
-5.3628323668683015e-06,
-4.848937883421227e-06,
-4.785638992433195e-06,
-5.0250916845268675e-06,
-7.121219403213925e-06,
-2.067752182483673e-05
]
},
"k"
]
}
},
"tolerance": {
"abs": 1e-09
}
},
{
"variable": "dTdt",
"time": 0.0,
"coords": {
"lev": 1
},
"expected": 8.76324596228423e-05,
"tolerance": {
"rel": 1e-05
}
},
{
"variable": "dTdt",
"time": 0.0,
"coords": {
"lev": 39
},
"expected": -3.637190494272444e-05,
"tolerance": {
"rel": 1e-05
}
},
{
"variable": "dTdt",
"time": 0.0,
"coords": {
"lev": 38
},
"expected": -3.4389821467576205e-05,
"tolerance": {
"rel": 1e-05
}
},
{
"variable": "dthdt",
"time": 0.0,
"reduce": "Linf_error",
"expected": 0.0,
"reference": {
"op": "aggregate",
"output_idx": [
"k"
],
"args": [],
"ranges": {
"k": {
"from": "lev"
}
},
"expr": {
"op": "index",
"args": [
{
"op": "const",
"args": [],
"value": [
8.844403782859445e-05,
4.8345973482355475e-06,
-1.978409500225098e-06,
-3.923549229511991e-06,
-4.519693902693689e-06,
-4.505867764237337e-06,
-4.2365290937596e-06,
-3.6128863030171487e-06,
-2.7388700800656807e-06,
-1.5687255654484034e-06,
2.2307646929675684e-07,
3.1888891953713028e-06,
9.373435204906855e-06,
3.30268194375094e-05,
2.3152267658588244e-06,
-2.33597747865133e-05,
-1.3352819223655388e-05,
-1.0429436770209577e-05,
-9.49257992033381e-06,
-9.347584636998363e-06,
-9.91232900560135e-06,
-1.0914641279669013e-05,
-1.2170202353445347e-05,
-1.3807335562887602e-05,
-1.614792381587904e-05,
-1.9274442820460536e-05,
-2.0122159185120836e-05,
-2.1075811673654243e-05,
-2.209080230386462e-05,
-2.340479113627225e-05,
-2.4593226044089533e-05,
-2.611453783174511e-05,
-2.7885012968908995e-05,
-3.0022361897863448e-05,
-3.280090095358901e-05,
-3.6918718251399696e-05,
-3.807934626820497e-05,
-3.969819954363629e-05,
-4.229307160130702e-05,
-3.9623540942557156e-05,
-3.910235682269558e-05,
-3.956917498726398e-05,
-4.013247962575406e-05,
-4.1285515180788934e-05,
-4.103651735931635e-05,
-3.450211079325527e-05,
-1.630216502235271e-05,
-1.3595095879281871e-05,
-1.2178687029518187e-05,
-1.122599951486336e-05,
-9.883584425551817e-06,
-9.067289283848368e-06,
-8.318317668454256e-06,
-7.496920261473861e-06,
-6.927485173946479e-06,
-7.004174676694674e-06,
-7.556528998975409e-06,
-1.1042669029848184e-05,
-3.321784606669098e-05
]
},
"k"
]
}
},
"tolerance": {
"abs": 1e-09
}
},
{
"variable": "dthdt",
"time": 0.0,
"coords": {
"lev": 1
},
"expected": 8.844403782859445e-05,
"tolerance": {
"rel": 1e-05
}
},
{
"variable": "dthdt",
"time": 0.0,
"coords": {
"lev": 39
},
"expected": -4.229307160130702e-05,
"tolerance": {
"rel": 1e-05
}
},
{
"variable": "dthdt",
"time": 0.0,
"coords": {
"lev": 38
},
"expected": -3.969819954363629e-05,
"tolerance": {
"rel": 1e-05
}
}
]
},
{
"id": "scm_call600_night_cirrus",
"description": "Reference: WRF 4.8 em_scm_xy single-column run (GNU real32 build, dt = 60 s, 59 layers, mp=6 ra_lw=1 ra_sw=1 sf_sfclay=1 sf_surface=1 bl_pbl=1, radt = 30 min) dumped by the instrumented fork ctessum-claude/WRF, commit e42a269 (v4.8.0-2-ge42a269e); module_esm_dump hooks in RRTMLWRAD and after RTRN inside SUBROUTINE RRTM of phys/module_ra_rrtm.F). RRTM has no standalone real64 driver (rrtminit needs WRF's I/O layer for the k-distribution data), so every expected value is the real32 in-model value and the tolerance contract is rel 1e-5. Inputs are the dumped RRTMLWRAD arguments of tile column 1 (p8w, pi3d, t3d, bottom-up) and the RRTM fluxes TOTUFLUX/TOTDFLUX at the model interfaces (RRTM levels 0..kte, already bottom-up). Expected values: dTdt against HTR(0..kte-1)/86400 (the RTRN heating of RRTM layers 1..kte, i.e. HTR(L-1) is layer L), dthdt against the wrapper's RTHRATEN increment, F_net and dz against the identities on the inputs, glw = TOTDFLUX(0), olr = TOTUFLUX(kte). Measured mismatch of this component against HTR over the four regimes is <= 2.4e-10 K/s in Linf (5e-6 of the column maximum of |dTdt|) and <= 5.3e-6 relative at the three largest-|dTdt| layers (real32 arithmetic of HEATFAC*(FNET(L-1)-FNET(L))/(PZ(L-1)-PZ(L)): differences of O(300 W/m^2) fluxes and O(1000 hPa) pressures carried in single precision), so the column assertions use Linf_error abs 1e-9 K/s (about 1e-5 of the column maximum) and the spot checks rel 1e-5, the real32 contract; the identities (F_net, dz, glw, olr, g_over_cp) use rel/abs 1e-9. The scheme is diagnostic (no time step), so no small-dt replay is involved. Regime: call 600 (00:00 UTC = 17:34 LST, after sunset), a 7-layer ice cloud (cldfra = 1, qi <= 1.7e-6) at layers 52-57 near the model top, tsk = 281.5 K, glw = 264.4 W/m^2, olr = 239.2 W/m^2.",
"parameter_overrides": {},
"expression_template_imports": [
{
"ref": "./tests/scm_call600_night_cirrus_inputs.esm"
}
],
"time_span": {
"start": 0,
"end": 1
},
"tolerance": {
"rel": 1e-09
},
"assertions": [
{
"variable": "g_over_cp",
"time": 0.0,
"expected": 0.009767476851851852,
"tolerance": {
"rel": 1e-09
}
},
{
"variable": "dz",
"time": 0.0,
"reduce": "Linf_error",
"expected": 0.0,
"reference": {
"op": "aggregate",
"output_idx": [
"k"
],
"args": [],
"ranges": {
"k": {
"from": "lev"
}
},
"expr": {
"op": "index",
"args": [
{
"op": "const",
"args": [],
"value": [
597.9375,
612.828125,
628.1640625,
643.9609375,
660.1796875,
676.8359375,
693.9375,
711.46875,
729.453125,
747.8984375,
766.796875,
786.1640625,
806.0,
826.3046875,
846.890625,
866.59375,
888.6640625,
911.3671875,
934.6484375,
958.546875,
983.0390625,
1008.1875,
1033.9765625,
1060.4296875,
1087.5703125,
1115.3984375,
1143.5546875,
1172.390625,
1201.9609375,
1232.28125,
1263.3515625,
1295.203125,
1327.859375,
1361.3359375,
1395.64453125,
1430.82421875,
1466.80078125,
1503.63671875,
1541.3671875,
1580.08984375,
1619.90234375,
1660.6484375,
1702.4296875,
1745.20703125,
1789.0546875,
1834.05859375,
1880.15234375,
1927.70703125,
1976.50390625,
2026.6015625,
2078.109375,
2130.61328125,
2184.4296875,
2239.619140625,
2296.236328125,
2354.306640625,
2413.892578125,
2474.994140625,
2537.625
]
},
"k"
]
}
},
"tolerance": {
"abs": 1e-06
}
},
{
"variable": "ze",
"time": 0.0,
"reduce": "Linf_error",
"expected": 0.0,
"reference": {
"op": "aggregate",
"output_idx": [
"k"
],
"args": [],
"ranges": {
"k": {
"from": "lev_nodes"
}
},
"expr": {
"op": "index",
"args": [
{
"op": "const",
"args": [],
"value": [
0.0,
597.9375,
1210.765625,
1838.9296875,
2482.890625,
3143.0703125,
3819.90625,
4513.84375,
5225.3125,
5954.765625,
6702.6640625,
7469.4609375,
8255.625,
9061.625,
9887.9296875,
10734.8203125,
11601.4140625,
12490.078125,
13401.4453125,
14336.09375,
15294.640625,
16277.6796875,
17285.8671875,
18319.84375,
19380.2734375,
20467.84375,
21583.2421875,
22726.796875,
23899.1875,
25101.1484375,
26333.4296875,
27596.78125,
28891.984375,
30219.84375,
31581.1796875,
32976.82421875,
34407.6484375,
35874.44921875,
37378.0859375,
38919.453125,
40499.54296875,
42119.4453125,
43780.09375,
45482.5234375,
47227.73046875,
49016.78515625,
50850.84375,
52730.99609375,
54658.703125,
56635.20703125,
58661.80859375,
60739.91796875,
62870.53125,
65054.9609375,
67294.580078125,
69590.81640625,
71945.123046875,
74359.015625,
76834.009765625,
79371.634765625
]
},
"k"
]
}
},
"tolerance": {
"abs": 1e-06
}
},
{
"variable": "F_net",
"time": 0.0,
"reduce": "Linf_error",
"expected": 0.0,
"reference": {
"op": "aggregate",
"output_idx": [
"k"
],
"args": [],
"ranges": {
"k": {
"from": "lev_nodes"
}
},
"expr": {
"op": "index",
"args": [
{
"op": "const",
"args": [],
"value": [
84.45724487304688,
88.33633422851562,
90.42971801757812,
92.182861328125,
93.67764282226562,
94.98707580566406,
96.15339660644531,
97.20613098144531,
98.1607666015625,
99.02717590332031,
99.7872314453125,
100.41767883300781,
100.85821533203125,
100.96946716308594,
100.32048034667969,
97.94850158691406,
99.88453674316406,
101.21865844726562,
102.28211975097656,
103.25938415527344,
104.23281860351562,
105.27626037597656,
106.43536376953125,
107.74041748046875,
109.23635864257812,
110.99751281738281,
113.08462524414062,
115.31300354003906,
117.67408752441406,
120.18048095703125,
122.87760925292969,
125.74606323242188,
128.83743286132812,
132.18414306640625,
135.83665466308594,
139.88221740722656,
144.46597290039062,
149.28782653808594,
154.39234924316406,
159.77490234375,
164.79876708984375,
169.8912353515625,
175.1105194091797,
180.4242935180664,
185.84981536865234,
191.15496063232422,
195.97337341308594,
198.6364974975586,
200.52881622314453,
202.11911010742188,
203.75542449951172,
206.74412536621094,
210.82027435302734,
215.30644607543945,
219.75281524658203,
223.58625602722168,
226.35574340820312,
227.9605541229248,
228.37066650390625,
227.66699695587158
]
},
"k"
]
}
},
"tolerance": {
"abs": 1e-09
}
},
{
"variable": "glw",
"time": 0.0,
"expected": 264.3688659667969,
"tolerance": {
"rel": 1e-09
}
},
{
"variable": "olr",
"time": 0.0,
"expected": 239.18067932128906,
"tolerance": {
"rel": 1e-09
}
},
{
"variable": "dTdt",
"time": 0.0,
"reduce": "Linf_error",
"expected": 0.0,
"reference": {
"op": "aggregate",
"output_idx": [
"k"
],
"args": [],
"ranges": {
"k": {
"from": "lev"
}
},
"expr": {
"op": "index",
"args": [
{
"op": "const",
"args": [],
"value": [
-6.336606211132474e-05,
-3.3365029979635165e-05,
-2.7260162212230542e-05,
-2.2672467209674695e-05,
-1.937326733712797e-05,
-1.6831245135377954e-05,
-1.481779471591667e-05,
-1.3105825141624169e-05,
-1.160130042720724e-05,
-9.926222264766694e-06,
-8.030654517588791e-06,
-5.473328616332124e-06,
-1.3482010992312874e-06,
7.671446849902471e-06,
2.7356948013658877e-05,
-2.182123009805326e-05,
-1.466355941913746e-05,
-1.1397558781835768e-05,
-1.0212819195455975e-05,
-9.919199402685518e-06,
-1.0367646399471495e-05,
-1.1229535771740807e-05,
-1.2328264613946279e-05,
-1.3778899554853086e-05,
-1.5816895498169794e-05,
-1.827670744171849e-05,
-1.9033312521598958e-05,
-1.9670825589586187e-05,
-2.036769632939939e-05,
-2.13783441318406e-05,
-2.2177115358688213e-05,
-2.3312863928300362e-05,
-2.4617808284582916e-05,
-2.620639624419036e-05,
-2.831309205955929e-05,
-3.129089872042338e-05,
-3.210884277467374e-05,
-3.3158458493374015e-05,
-3.410873589692293e-05,
-3.105549348725213e-05,
-3.070588189142722e-05,
-3.069835404555003e-05,
-3.048707765561563e-05,
-3.036536552287914e-05,
-2.8963806452574554e-05,
-2.566095303606104e-05,
-1.3835097628611105e-05,
-9.588091461746782e-06,
-7.858942090361207e-06,
-7.886470605929692e-06,
-1.404737846718894e-05,
-1.8686537665349465e-05,
-2.0059453392470326e-05,
-1.9391598524870695e-05,
-1.6306303441524504e-05,
-1.1489954259660509e-05,
-6.49365148058644e-06,
-1.6184856563254638e-06,
2.708486453802497e-06
]
},
"k"
]
}
},
"tolerance": {
"abs": 1e-09
}
},
{
"variable": "dTdt",
"time": 0.0,
"coords": {
"lev": 1
},
"expected": -6.336606211132474e-05,
"tolerance": {
"rel": 1e-05
}
},
{
"variable": "dTdt",
"time": 0.0,
"coords": {
"lev": 39
},
"expected": -3.410873589692293e-05,
"tolerance": {
"rel": 1e-05
}
},
{
"variable": "dTdt",
"time": 0.0,
"coords": {
"lev": 2
},
"expected": -3.3365029979635165e-05,
"tolerance": {
"rel": 1e-05
}
},
{
"variable": "dthdt",
"time": 0.0,
"reduce": "Linf_error",
"expected": 0.0,
"reference": {
"op": "aggregate",
"output_idx": [
"k"
],
"args": [],
"ranges": {
"k": {
"from": "lev"
}
},
"expr": {
"op": "index",
"args": [
{
"op": "const",
"args": [],
"value": [
-6.395125819835812e-05,
-3.373355866642669e-05,
-2.7612246412900276e-05,
-2.3009139113128185e-05,
-1.9699684344232082e-05,
-1.7149648556369357e-05,
-1.512982817075681e-05,
-1.3410848623607308e-05,
-1.1897926924575586e-05,
-1.0203611054748762e-05,
-8.27484927867772e-06,
-5.653732387145283e-06,
-1.3962071534479037e-06,
7.965672921272926e-06,
2.8484113499871455e-05,
-2.278477950312663e-05,
-1.5356008589151315e-05,
-1.197209712699987e-05,
-1.0761478733911645e-05,
-1.0486286555533297e-05,
-1.09975853774813e-05,
-1.1953828106925357e-05,
-1.3171464161132462e-05,
-1.4777314390812535e-05,
-1.7030068192980252e-05,
-1.9759505448746495e-05,
-2.066558772639837e-05,
-2.1452966393553652e-05,
-2.231610233138781e-05,
-2.3536800654255785e-05,
-2.4539496735087596e-05,
-2.593220051494427e-05,
-2.7534568289411254e-05,
-2.948017390735913e-05,
-3.2042018574429676e-05,
-3.563562495401129e-05,
-3.680930603877641e-05,
-3.82768630515784e-05,
-3.966156509704888e-05,
-3.638900307123549e-05,
-3.6271016142563894e-05,
-3.657244087662548e-05,
-3.664936593850143e-05,
-3.68529035768006e-05,
-3.550946348696016e-05,
-3.1800544093130156e-05,
-1.7343028957839124e-05,
-1.2167399290774483e-05,
-1.0104973625857383e-05,
-1.0284652489644941e-05,
-1.8600543626234867e-05,
-2.5155837647616863e-05,
-2.7494654204929247e-05,
-2.710855915211141e-05,
-2.3296392100746743e-05,
-1.6816633433336392e-05,
-9.764959031599574e-06,
-2.509751311663422e-06,
4.351114057499217e-06
]
},
"k"
]
}
},
"tolerance": {
"abs": 1e-09
}
},
{
"variable": "dthdt",
"time": 0.0,
"coords": {
"lev": 1
},
"expected": -6.395125819835812e-05,
"tolerance": {
"rel": 1e-05
}
},
{
"variable": "dthdt",
"time": 0.0,
"coords": {
"lev": 39
},
"expected": -3.966156509704888e-05,
"tolerance": {
"rel": 1e-05
}
},
{
"variable": "dthdt",
"time": 0.0,
"coords": {
"lev": 2
},
"expected": -3.373355866642669e-05,
"tolerance": {
"rel": 1e-05
}
}
]
},
{
"id": "scm_call1440_predawn_thin_cirrus",
"description": "Reference: WRF 4.8 em_scm_xy single-column run (GNU real32 build, dt = 60 s, 59 layers, mp=6 ra_lw=1 ra_sw=1 sf_sfclay=1 sf_surface=1 bl_pbl=1, radt = 30 min) dumped by the instrumented fork ctessum-claude/WRF, commit e42a269 (v4.8.0-2-ge42a269e); module_esm_dump hooks in RRTMLWRAD and after RTRN inside SUBROUTINE RRTM of phys/module_ra_rrtm.F). RRTM has no standalone real64 driver (rrtminit needs WRF's I/O layer for the k-distribution data), so every expected value is the real32 in-model value and the tolerance contract is rel 1e-5. Inputs are the dumped RRTMLWRAD arguments of tile column 1 (p8w, pi3d, t3d, bottom-up) and the RRTM fluxes TOTUFLUX/TOTDFLUX at the model interfaces (RRTM levels 0..kte, already bottom-up). Expected values: dTdt against HTR(0..kte-1)/86400 (the RTRN heating of RRTM layers 1..kte, i.e. HTR(L-1) is layer L), dthdt against the wrapper's RTHRATEN increment, F_net and dz against the identities on the inputs, glw = TOTDFLUX(0), olr = TOTUFLUX(kte). Measured mismatch of this component against HTR over the four regimes is <= 2.4e-10 K/s in Linf (5e-6 of the column maximum of |dTdt|) and <= 5.3e-6 relative at the three largest-|dTdt| layers (real32 arithmetic of HEATFAC*(FNET(L-1)-FNET(L))/(PZ(L-1)-PZ(L)): differences of O(300 W/m^2) fluxes and O(1000 hPa) pressures carried in single precision), so the column assertions use Linf_error abs 1e-9 K/s (about 1e-5 of the column maximum) and the spot checks rel 1e-5, the real32 contract; the identities (F_net, dz, glw, olr, g_over_cp) use rel/abs 1e-9. The scheme is diagnostic (no time step), so no small-dt replay is involved. Regime: call 1440 (07:00 UTC = 00:34 LST, night), thin ice cloud (qi <= 6.7e-8) in 4 layers at 55-59, tsk = 278.4 K, glw = 254.2 W/m^2, olr = 241.5 W/m^2.",
"parameter_overrides": {},
"expression_template_imports": [
{
"ref": "./tests/scm_call1440_predawn_thin_cirrus_inputs.esm"
}
],
"time_span": {
"start": 0,
"end": 1
},
"tolerance": {
"rel": 1e-09
},
"assertions": [
{
"variable": "g_over_cp",
"time": 0.0,
"expected": 0.009767476851851852,
"tolerance": {
"rel": 1e-09
}
},
{
"variable": "dz",
"time": 0.0,
"reduce": "Linf_error",
"expected": 0.0,
"reference": {
"op": "aggregate",
"output_idx": [
"k"
],
"args": [],
"ranges": {
"k": {
"from": "lev"
}
},
"expr": {
"op": "index",
"args": [
{
"op": "const",
"args": [],
"value": [
598.171875,
613.21875,
628.609375,
644.3515625,
660.4296875,
676.8984375,
693.9375,
711.46875,
729.453125,
747.8984375,
766.796875,
786.1640625,
805.9921875,
826.28125,
846.828125,
866.6953125,
888.6640625,
911.3671875,
934.6484375,
958.546875,
983.0390625,
1008.1875,
1033.9765625,
1060.4296875,
1087.5703125,
1115.390625,
1143.5546875,
1172.390625,
1201.9609375,
1232.28125,
1263.3515625,
1295.203125,
1327.859375,
1361.3359375,
1395.6484375,
1430.82421875,
1466.80078125,
1503.63671875,
1541.3671875,
1579.96875,
1619.84375,
1660.63671875,
1702.4375,
1745.24609375,
1789.1953125,
1834.0703125,
1880.15234375,
1927.70703125,
1976.53515625,
2026.640625,
2078.05078125,
2130.609375,
2184.427734375,
2239.6171875,
2296.236328125,
2354.306640625,
2413.892578125,
2474.994140625,
2537.625
]
},
"k"
]
}
},
"tolerance": {
"abs": 1e-06
}
},
{
"variable": "ze",
"time": 0.0,
"reduce": "Linf_error",
"expected": 0.0,
"reference": {
"op": "aggregate",
"output_idx": [
"k"
],
"args": [],
"ranges": {
"k": {
"from": "lev_nodes"
}
},
"expr": {
"op": "index",
"args": [
{
"op": "const",
"args": [],
"value": [
0.0,
598.171875,
1211.390625,
1840.0,
2484.3515625,
3144.78125,
3821.6796875,
4515.6171875,
5227.0859375,
5956.5390625,
6704.4375,
7471.234375,
8257.3984375,
9063.390625,
9889.671875,
10736.5,
11603.1953125,
12491.859375,
13403.2265625,
14337.875,
15296.421875,
16279.4609375,
17287.6484375,
18321.625,
19382.0546875,
20469.625,
21585.015625,
22728.5703125,
23900.9609375,
25102.921875,
26335.203125,
27598.5546875,
28893.7578125,
30221.6171875,
31582.953125,
32978.6015625,
34409.42578125,
35876.2265625,
37379.86328125,
38921.23046875,
40501.19921875,
42121.04296875,
43781.6796875,
45484.1171875,
47229.36328125,
49018.55859375,
50852.62890625,
52732.78125,
54660.48828125,
56637.0234375,
58663.6640625,
60741.71484375,
62872.32421875,
65056.751953125,
67296.369140625,
69592.60546875,
71946.912109375,
74360.8046875,
76835.798828125,
79373.423828125
]
},
"k"
]
}
},
"tolerance": {
"abs": 1e-06
}
},
{
"variable": "F_net",
"time": 0.0,
"reduce": "Linf_error",
"expected": 0.0,
"reference": {
"op": "aggregate",
"output_idx": [
"k"
],
"args": [],
"ranges": {
"k": {
"from": "lev_nodes"
}
},
"expr": {
"op": "index",
"args": [
{
"op": "const",
"args": [],
"value": [
79.45018005371094,
82.16299438476562,
83.54476928710938,
84.86099243164062,
86.318359375,
88.095458984375,
90.02743530273438,
91.62791442871094,
92.95741271972656,
94.10519409179688,
95.10140991210938,
95.92817687988281,
96.5457763671875,
96.83477783203125,
96.57199096679688,
95.67074584960938,
96.93836975097656,
98.15974426269531,
99.23292541503906,
100.26068115234375,
101.31010437011719,
102.4425048828125,
103.69938659667969,
105.11051940917969,
106.724365234375,
108.59124755859375,
110.75169372558594,
113.08108520507812,
115.56156921386719,
118.20689392089844,
121.02700805664062,
124.03578186035156,
127.27024841308594,
130.7672576904297,
134.57455444335938,
138.7628631591797,
143.439697265625,
148.399658203125,
153.63565063476562,
159.121337890625,
164.10757446289062,
169.1546630859375,
174.36585235595703,
179.66007232666016,
185.0958023071289,
191.06092834472656,
196.0655288696289,
198.95166015625,
201.02811431884766,
203.00988006591797,
205.2512969970703,
208.51998138427734,
212.98980331420898,
217.66605377197266,
222.07667922973633,
225.88739395141602,
228.7305908203125,
230.34967231750488,
230.7418212890625,
230.02257251739502
]
},
"k"
]
}
},
"tolerance": {
"abs": 1e-09
}
},
{
"variable": "glw",
"time": 0.0,
"expected": 254.17991638183594,
"tolerance": {
"rel": 1e-09
}
},
{
"variable": "olr",
"time": 0.0,
"expected": 241.5362548828125,
"tolerance": {
"rel": 1e-09
}
},
{
"variable": "dTdt",
"time": 0.0,
"reduce": "Linf_error",
"expected": 0.0,
"reference": {
"op": "aggregate",
"output_idx": [
"k"
],
"args": [],
"ranges": {
"k": {
"from": "lev"
}
},
"expr": {
"op": "index",
"args": [
{
"op": "const",
"args": [],
"value": [
-4.429698818259769e-05,
-2.2009368296022767e-05,
-2.0451651955092395e-05,
-2.209177999584763e-05,
-2.6282508064199378e-05,
-2.7877950557955987e-05,
-2.25273961270297e-05,
-1.8252170196285953e-05,
-1.5369027301117226e-05,
-1.3010443912612067e-05,
-1.0531377737168912e-05,
-7.673200495817042e-06,
-3.502279933955934e-06,
3.1064036819669937e-06,
1.0395157668325637e-05,
-1.4285795666553356e-05,
-1.3424427145057254e-05,
-1.1501654430671974e-05,
-1.0740474832278711e-05,
-1.0693518237935173e-05,
-1.1251541199507536e-05,
-1.2176897790696886e-05,
-1.3330268363157908e-05,
-1.4864903081346441e-05,
-1.6766534083419375e-05,
-1.8918988881287753e-05,
-1.989609941288277e-05,
-2.0665472580326928e-05,
-2.149669246541129e-05,
-2.2353172578193524e-05,
-2.3262095120218067e-05,
-2.4391997743535924e-05,
-2.572326472511998e-05,
-2.731708464799104e-05,
-2.931198036229169e-05,
-3.192629803110052e-05,
-3.302850381091789e-05,
-3.4012471636136374e-05,
-3.4762151815273145e-05,
-3.0825270546807183e-05,
-3.0433405880574828e-05,
-3.0650921441890576e-05,
-3.0374822241288644e-05,
-3.0421719506934835e-05,
-3.256450648661013e-05,
-2.665233556871061e-05,
-1.4993631177478366e-05,
-1.0521124220556684e-05,
-9.79340186825505e-06,
-1.0802556795102579e-05,
-1.5363872603133873e-05,
-2.0491251790965045e-05,
-2.0909371475378672e-05,
-1.923577239116033e-05,
-1.620959214590214e-05,
-1.1795781276844167e-05,
-6.551381062578272e-06,
-1.5476087315215004e-06,
2.7684517273748364e-06
]
},
"k"
]
}
},
"tolerance": {
"abs": 1e-09
}
},
{
"variable": "dTdt",
"time": 0.0,
"coords": {
"lev": 1
},
"expected": -4.429698818259769e-05,
"tolerance": {
"rel": 1e-05
}
},
{
"variable": "dTdt",
"time": 0.0,
"coords": {
"lev": 39
},
"expected": -3.4762151815273145e-05,
"tolerance": {
"rel": 1e-05
}
},
{
"variable": "dTdt",
"time": 0.0,
"coords": {
"lev": 38
},
"expected": -3.4012471636136374e-05,
"tolerance": {
"rel": 1e-05
}
},
{
"variable": "dthdt",
"time": 0.0,
"reduce": "Linf_error",
"expected": 0.0,
"reference": {
"op": "aggregate",
"output_idx": [
"k"
],
"args": [],
"ranges": {
"k": {
"from": "lev"
}
},
"expr": {
"op": "index",
"args": [
{
"op": "const",
"args": [],
"value": [
-4.4705851905746385e-05,
-2.2252372218645178e-05,
-2.071573726425413e-05,
-2.2419784727389924e-05,
-2.6725312636699528e-05,
-2.8405318516888656e-05,
-2.3001774025033228e-05,
-1.867696482804604e-05,
-1.5761983377160504e-05,
-1.3374017726164311e-05,
-1.0851610568352044e-05,
-7.926111720735207e-06,
-3.6269873362471117e-06,
3.225544560336857e-06,
1.0823458978848066e-05,
-1.491660441388376e-05,
-1.4058360648050439e-05,
-1.2081440218025818e-05,
-1.1317482858430594e-05,
-1.1304874533379916e-05,
-1.1935185284528416e-05,
-1.2962294022145215e-05,
-1.424200127075892e-05,
-1.594201057741884e-05,
-1.8052547602565028e-05,
-2.045389737759251e-05,
-2.1602367269224487e-05,
-2.2537726181326434e-05,
-2.3553104256279767e-05,
-2.4610053515061736e-05,
-2.5740051569300704e-05,
-2.7132584364153445e-05,
-2.8771002689609304e-05,
-3.0729614081792533e-05,
-3.317246228107251e-05,
-3.63592516805511e-05,
-3.7863599573029205e-05,
-3.926270073861815e-05,
-4.042136060888879e-05,
-3.6119232390774414e-05,
-3.594913141569123e-05,
-3.651588849606924e-05,
-3.6514378734864295e-05,
-3.692126483656466e-05,
-3.992388155893423e-05,
-3.302912227809429e-05,
-1.879531191661954e-05,
-1.3351427696761675e-05,
-1.2592290659085847e-05,
-1.4087491763348226e-05,
-2.0343759388197213e-05,
-2.7585345378611237e-05,
-2.865960414055735e-05,
-2.689072243811097e-05,
-2.31582216656534e-05,
-1.7264243069803342e-05,
-9.851771210378502e-06,
-2.3998436518013477e-06,
4.447446826816304e-06
]
},
"k"
]
}
},
"tolerance": {
"abs": 1e-09
}
},
{
"variable": "dthdt",
"time": 0.0,
"coords": {
"lev": 1
},
"expected": -4.4705851905746385e-05,
"tolerance": {
"rel": 1e-05
}
},
{
"variable": "dthdt",
"time": 0.0,
"coords": {
"lev": 39
},
"expected": -4.042136060888879e-05,
"tolerance": {
"rel": 1e-05
}
},
{
"variable": "dthdt",
"time": 0.0,
"coords": {
"lev": 38
},
"expected": -3.926270073861815e-05,
"tolerance": {
"rel": 1e-05
}
}
]
},
{
"id": "scm_call2400_afternoon",
"description": "Reference: WRF 4.8 em_scm_xy single-column run (GNU real32 build, dt = 60 s, 59 layers, mp=6 ra_lw=1 ra_sw=1 sf_sfclay=1 sf_surface=1 bl_pbl=1, radt = 30 min) dumped by the instrumented fork ctessum-claude/WRF, commit e42a269 (v4.8.0-2-ge42a269e); module_esm_dump hooks in RRTMLWRAD and after RTRN inside SUBROUTINE RRTM of phys/module_ra_rrtm.F). RRTM has no standalone real64 driver (rrtminit needs WRF's I/O layer for the k-distribution data), so every expected value is the real32 in-model value and the tolerance contract is rel 1e-5. Inputs are the dumped RRTMLWRAD arguments of tile column 1 (p8w, pi3d, t3d, bottom-up) and the RRTM fluxes TOTUFLUX/TOTDFLUX at the model interfaces (RRTM levels 0..kte, already bottom-up). Expected values: dTdt against HTR(0..kte-1)/86400 (the RTRN heating of RRTM layers 1..kte, i.e. HTR(L-1) is layer L), dthdt against the wrapper's RTHRATEN increment, F_net and dz against the identities on the inputs, glw = TOTDFLUX(0), olr = TOTUFLUX(kte). Measured mismatch of this component against HTR over the four regimes is <= 2.4e-10 K/s in Linf (5e-6 of the column maximum of |dTdt|) and <= 5.3e-6 relative at the three largest-|dTdt| layers (real32 arithmetic of HEATFAC*(FNET(L-1)-FNET(L))/(PZ(L-1)-PZ(L)): differences of O(300 W/m^2) fluxes and O(1000 hPa) pressures carried in single precision), so the column assertions use Linf_error abs 1e-9 K/s (about 1e-5 of the column maximum) and the spot checks rel 1e-5, the real32 contract; the identities (F_net, dz, glw, olr, g_over_cp) use rel/abs 1e-9. The scheme is diagnostic (no time step), so no small-dt replay is involved. Regime: call 2400 (15:00 UTC = 08:34 LST, day), two thin ice-cloud layers at 56-57, tsk = 282.0 K, glw = 254.1 W/m^2, olr = 245.8 W/m^2; the strongest cooling is at layer 45 rather than the surface layer.",
"parameter_overrides": {},
"expression_template_imports": [
{
"ref": "./tests/scm_call2400_afternoon_inputs.esm"
}
],
"time_span": {
"start": 0,
"end": 1
},
"tolerance": {
"rel": 1e-09
},
"assertions": [
{
"variable": "g_over_cp",
"time": 0.0,
"expected": 0.009767476851851852,
"tolerance": {
"rel": 1e-09
}
},
{
"variable": "dz",
"time": 0.0,
"reduce": "Linf_error",
"expected": 0.0,
"reference": {
"op": "aggregate",
"output_idx": [
"k"
],
"args": [],
"ranges": {
"k": {
"from": "lev"
}
},
"expr": {
"op": "index",
"args": [
{
"op": "const",
"args": [],
"value": [
598.296875,
613.390625,
628.875,
644.7265625,
660.671875,
677.015625,
693.984375,
711.4765625,
729.453125,
747.8984375,
766.796875,
786.1640625,
805.9921875,
826.265625,
846.7734375,
866.78125,
888.671875,
911.3671875,
934.6484375,
958.5390625,
983.0390625,
1008.1875,
1033.9765625,
1060.4296875,
1087.5703125,
1115.3828125,
1143.5546875,
1172.390625,
1201.9609375,
1232.28125,
1263.3515625,
1295.203125,
1327.859375,
1361.3359375,
1395.64453125,
1430.82421875,
1466.80078125,
1503.63671875,
1541.3671875,
1579.875,
1619.76953125,
1660.609375,
1702.44921875,
1745.30859375,
1789.3125,
1834.0703125,
1880.15625,
1927.7109375,
1976.55859375,
2026.62109375,
2078.046875,
2130.609375,
2184.427734375,
2239.6171875,
2296.236328125,
2354.306640625,
2413.892578125,
2474.994140625,
2537.625
]
},
"k"
]
}
},
"tolerance": {
"abs": 1e-06
}
},
{
"variable": "ze",
"time": 0.0,
"reduce": "Linf_error",
"expected": 0.0,
"reference": {
"op": "aggregate",
"output_idx": [
"k"
],
"args": [],
"ranges": {
"k": {
"from": "lev_nodes"
}
},
"expr": {
"op": "index",
"args": [
{
"op": "const",
"args": [],
"value": [
0.0,
598.296875,
1211.6875,
1840.5625,
2485.2890625,
3145.9609375,
3822.9765625,
4516.9609375,
5228.4375,
5957.890625,
6705.7890625,
7472.5859375,
8258.75,
9064.7421875,
9891.0078125,
10737.78125,
11604.5625,
12493.234375,
13404.6015625,
14339.25,
15297.7890625,
16280.828125,
17289.015625,
18322.9921875,
19383.421875,
20470.9921875,
21586.375,
22729.9296875,
23902.3203125,
25104.28125,
26336.5625,
27599.9140625,
28895.1171875,
30222.9765625,
31584.3125,
32979.95703125,
34410.78125,
35877.58203125,
37381.21875,
38922.5859375,
40502.4609375,
42122.23046875,
43782.83984375,
45485.2890625,
47230.59765625,
49019.91015625,
50853.98046875,
52734.13671875,
54661.84765625,
56638.40625,
58665.02734375,
60743.07421875,
62873.68359375,
65058.111328125,
67297.728515625,
69593.96484375,
71948.271484375,
74362.1640625,
76837.158203125,
79374.783203125
]
},
"k"
]
}
},
"tolerance": {
"abs": 1e-06
}
},
{
"variable": "F_net",
"time": 0.0,
"reduce": "Linf_error",
"expected": 0.0,
"reference": {
"op": "aggregate",
"output_idx": [
"k"
],
"args": [],
"ranges": {
"k": {
"from": "lev_nodes"
}
},
"expr": {
"op": "index",
"args": [
{
"op": "const",
"args": [],
"value": [
96.21334838867188,
94.34280395507812,
94.78349304199219,
95.2191162109375,
95.00898742675781,
95.48100280761719,
97.12742614746094,
98.6669921875,
99.98103332519531,
101.08491516113281,
102.00949096679688,
102.75865173339844,
103.31535339355469,
103.59707641601562,
103.54075622558594,
103.33348083496094,
104.22377014160156,
105.27418518066406,
106.27162170410156,
107.25798034667969,
108.27658081054688,
109.37535095214844,
110.59219360351562,
111.96142578125,
113.51956176757812,
115.30752563476562,
117.35240173339844,
119.57586669921875,
121.96458435058594,
124.52468872070312,
127.26802062988281,
130.20779418945312,
133.37255859375,
136.79669189453125,
140.52467346191406,
144.62315368652344,
149.15345764160156,
153.97018432617188,
159.06228637695312,
164.37496948242188,
169.13595581054688,
173.86378479003906,
178.73639678955078,
183.74270629882812,
189.0035171508789,
195.17477416992188,
200.0353546142578,
202.96534729003906,
205.0871810913086,
207.23751831054688,
209.4060287475586,
212.7370147705078,
217.29020309448242,
222.00028228759766,
226.42237091064453,
230.2362937927246,
233.08147811889648,
234.69145965576172,
235.061918258667,
234.31664848327637
]
},
"k"
]
}
},
"tolerance": {
"abs": 1e-09
}
},
{
"variable": "glw",
"time": 0.0,
"expected": 254.10433959960938,
"tolerance": {
"rel": 1e-09
}
},
{
"variable": "olr",
"time": 0.0,
"expected": 245.83033752441406,
"tolerance": {
"rel": 1e-09
}
},
{
"variable": "dTdt",
"time": 0.0,
"reduce": "Linf_error",
"expected": 0.0,
"reference": {
"op": "aggregate",
"output_idx": [
"k"
],
"args": [],
"ranges": {
"k": {
"from": "lev"
}
},
"expr": {
"op": "index",
"args": [
{
"op": "const",
"args": [],
"value": [
3.053750428888533e-05,
-7.017416258653005e-06,
-6.7659460560039235e-06,
3.183408536844783e-06,
-6.978315887627778e-06,
-2.3753422277945058e-05,
-2.1668684979279836e-05,
-1.803965480239303e-05,
-1.478120270702574e-05,
-1.2074834494679062e-05,
-9.54282780488332e-06,
-6.916591276725133e-06,
-3.414075407716963e-06,
6.657757761853713e-07,
2.3909144241500782e-06,
-1.0032342677866971e-05,
-1.1545212042552454e-05,
-1.0689944718722944e-05,
-1.0307857559786903e-05,
-1.037950317064921e-05,
-1.091738955842124e-05,
-1.1788921223746405e-05,
-1.2934530774752299e-05,
-1.4351767798264822e-05,
-1.6057673427793715e-05,
-1.7907139327791003e-05,
-1.899134643651821e-05,
-1.9900946429482212e-05,
-2.0804166517875812e-05,
-2.1744570522396653e-05,
-2.2728623891318287e-05,
-2.3866353763474357e-05,
-2.5187203729594194e-05,
-2.6748003783049407e-05,
-2.8683311409420436e-05,
-3.092601067490048e-05,
-3.207483501346023e-05,
-3.3077774224457916e-05,
-3.366584579149882e-05,
-2.9434465147830822e-05,
-2.850959422411742e-05,
-2.8660015927420722e-05,
-2.87228188029042e-05,
-2.9441642540472524e-05,
-3.3687620803161906e-05,
-2.5885386599434747e-05,
-1.5221403704749213e-05,
-1.0751118814503704e-05,
-1.0626189134739064e-05,
-1.0451364710375114e-05,
-1.5656659724535764e-05,
-2.0873467955324384e-05,
-2.106063343860485e-05,
-1.9285749230119917e-05,
-1.6223287416829e-05,
-1.1804011408929471e-05,
-6.514582093115206e-06,
-1.4619784498656238e-06,
2.8685897726703572e-06
]
},
"k"
]
}
},
"tolerance": {
"abs": 1e-09
}
},
{
"variable": "dTdt",
"time": 0.0,
"coords": {
"lev": 45
},
"expected": -3.3687620803161906e-05,
"tolerance": {
"rel": 1e-05
}
},
{
"variable": "dTdt",
"time": 0.0,
"coords": {
"lev": 39
},
"expected": -3.366584579149882e-05,
"tolerance": {
"rel": 1e-05
}
},
{
"variable": "dTdt",
"time": 0.0,
"coords": {
"lev": 38
},
"expected": -3.3077774224457916e-05,
"tolerance": {
"rel": 1e-05
}
},
{
"variable": "dthdt",
"time": 0.0,
"reduce": "Linf_error",
"expected": 0.0,
"reference": {
"op": "aggregate",
"output_idx": [
"k"
],
"args": [],
"ranges": {
"k": {
"from": "lev"
}
},
"expr": {
"op": "index",
"args": [
{
"op": "const",
"args": [],
"value": [
3.0819228413747624e-05,
-7.0948667598713655e-06,
-6.853289050923195e-06,
3.230666152376216e-06,
-7.095874934748281e-06,
-2.4202743588830344e-05,
-2.2124964743852615e-05,
-1.845949373091571e-05,
-1.5159124814090319e-05,
-1.2412259820848703e-05,
-9.83300014922861e-06,
-7.144563824112993e-06,
-3.535641326379846e-06,
6.913103334227344e-07,
2.489424105078797e-06,
-1.0475331691850442e-05,
-1.2090405107301194e-05,
-1.1228814400965348e-05,
-1.0861624105018564e-05,
-1.0972906238748692e-05,
-1.158073155238526e-05,
-1.254929338756483e-05,
-1.3819197192788124e-05,
-1.539169534225948e-05,
-1.728931601974182e-05,
-1.935995533131063e-05,
-2.062002386082895e-05,
-2.1703932361560874e-05,
-2.2794323740527034e-05,
-2.394000330241397e-05,
-2.5149753128062002e-05,
-2.6547879315330647e-05,
-2.817142740241252e-05,
-3.0089440770098008e-05,
-3.246099367970601e-05,
-3.5220069548813626e-05,
-3.677032145787962e-05,
-3.8183719880180433e-05,
-3.914656917913817e-05,
-3.4489556128391996e-05,
-3.36766242980957e-05,
-3.414399907342158e-05,
-3.452842793194577e-05,
-3.57317621819675e-05,
-4.130079469177872e-05,
-3.2078671210911125e-05,
-1.9080835045315325e-05,
-1.3643293641507626e-05,
-1.3663084246218204e-05,
-1.362950661132345e-05,
-2.073144969472196e-05,
-2.8099882911192253e-05,
-2.88669289147947e-05,
-2.6960588002111763e-05,
-2.3177788534667343e-05,
-1.7276288417633623e-05,
-9.79643391474383e-06,
-2.267058789584553e-06,
4.608315521181794e-06
]
},
"k"
]
}
},
"tolerance": {
"abs": 1e-09
}
},
{
"variable": "dthdt",
"time": 0.0,
"coords": {
"lev": 45
},
"expected": -4.130079469177872e-05,
"tolerance": {
"rel": 1e-05
}
},
{
"variable": "dthdt",
"time": 0.0,
"coords": {
"lev": 39
},
"expected": -3.914656917913817e-05,
"tolerance": {
"rel": 1e-05
}
},
{
"variable": "dthdt",
"time": 0.0,
"coords": {
"lev": 38
},
"expected": -3.8183719880180433e-05,
"tolerance": {
"rel": 1e-05
}
}
]
}
]
}