UrbanCanopyModel
Top-level composed diagnostic urban canopy model following the Community Land Model Urban (CLMU) parameterization of Oleson et al. (2010). Wires four CLMU subsystems — OfflineModeForcing (raw met → derived forcing), CLMUAtmosphere (atmospheric interface diagnostics), UrbanRadiation (solar/longwave radiation), and HeatMomentumFluxes (Monin-Obukhov surface fluxes) — via top-level coupling equations. All subsystems are inlined (ESS spec §4.7 composed-model pattern). Surface temperatures are prescribed as parameters (diagnostic mode). Migrated from UrbanCanopy.jl@9200edd4 src/urban_canopy_model.jl:41.
Description
Top-level composed diagnostic urban canopy model following the Community Land Model Urban (CLMU) parameterization of Oleson et al. (2010). Wires four CLMU subsystems — OfflineModeForcing (raw met → derived forcing), CLMUAtmosphere (atmospheric interface diagnostics), UrbanRadiation (solar/longwave radiation), and HeatMomentumFluxes (Monin-Obukhov surface fluxes) — via top-level coupling equations. All subsystems are inlined (ESS spec §4.7 composed-model pattern). Surface temperatures are prescribed as parameters (diagnostic mode). Migrated from UrbanCanopy.jl@9200edd4 src/urban_canopy_model.jl:41.
Reference
_source_ref: UrbanCanopy.jl@9200edd4f15609f20339d3a7d104de8064544310:src/urban_canopy_model.jl:41
Composed model (ESS spec §4.7) following the SulfateFormation / WaterVaporThermodynamics pattern: four subsystems inlined under ‘subsystems’, top-level coupling equations wire the data flow.
Subsystem inlining avoids SubsystemRef dependencies on .esm files that may not yet be on main (the original rejection on esm-vmik was SubsystemRefError for heat_momentum_fluxes.esm). All subsystem content is self-contained here.
HeatMomentumFluxes (flux subsystem): the ψ_m/ψ_h piecewise stability functions produce deeply nested ifelse expressions. Under cse=False the _flat_to_sympy_rhs substitution chain explodes (~419K ops). The inline-test gate builds it under the library default cse=True (tools/run_esm_inline_tests.py lists only geoschem_fullchem.esm in CSE_FALSE_FILENAMES), so it needs no entry there and must not be given one; ULP-equivalence of cse=True ↔ cse=False was verified by esm-wqy1.
Variable naming: offline/atmos subsystems use ASCII (theta_atm, rho_atm, z_prime_atm following their standalone ESM convention); rad uses Unicode (μ_zen, α_, ε_ following urban_radiation.esm); flux uses ASCII (theta_atm, rho_atm, zeta_in following the ASCII convention of sibling subsystems). Coupling equations bridge the name differences.
Tolerance: model-level rel=1e-6 (composed algebraic system, no ODE integration; the piecewise ψ stability functions involve logarithms and cube-roots, ULP roundoff ~1e-15 at non-degenerate stability; rel=1e-6 gives comfortable headroom above ULP and matches the composed precedents SulfateFormation and WaterVaporThermodynamics)._
Parameters
| Name | Units | Default | Description |
|---|---|---|---|
S_atm | W/m^2 | 500.0 | Total incident solar radiation (Eq. 6.1 output) |
T_atm | K | 293.15 | Atmospheric temperature |
P_atm | Pa | 101325.0 | Atmospheric pressure |
q_atm | kg/kg | 0.01 | Atmospheric specific humidity |
W_atm | m/s | 7.071 | Atmospheric wind speed |
P_precip | kg/(m^2*s) | 0.0 | Total precipitation rate |
μ_zen | rad | 0.5236 | Solar zenith angle (30°) |
H_W | 1 | 1.0 | Canyon H/W ratio |
W_roof | 1 | 0.5 | Roof fraction |
H_canyon | m | 10.0 | Canyon height |
f_prvrd | 1 | 0.5 | Pervious road fraction |
H_w_est | m | 5.0 | Height for canyon wind estimate |
z_0 | m | 1.0 | Roughness length |
z_d | m | 5.0 | Displacement height |
α_roof_dir_vis | 1 | 0.2 | Roof albedo, direct, vis |
α_roof_dir_nir | 1 | 0.25 | Roof albedo, direct, NIR |
α_roof_dif_vis | 1 | 0.2 | Roof albedo, diffuse, vis |
α_roof_dif_nir | 1 | 0.25 | Roof albedo, diffuse, NIR |
α_road_dir_vis | 1 | 0.1 | Road albedo, direct, vis |
α_road_dir_nir | 1 | 0.15 | Road albedo, direct, NIR |
α_road_dif_vis | 1 | 0.1 | Road albedo, diffuse, vis |
α_road_dif_nir | 1 | 0.15 | Road albedo, diffuse, NIR |
α_wall_dir_vis | 1 | 0.3 | Wall albedo, direct, vis |
α_wall_dir_nir | 1 | 0.35 | Wall albedo, direct, NIR |
α_wall_dif_vis | 1 | 0.3 | Wall albedo, diffuse, vis |
α_wall_dif_nir | 1 | 0.35 | Wall albedo, diffuse, NIR |
ε_roof | 1 | 0.93 | Roof emissivity |
ε_road | 1 | 0.95 | Road emissivity |
ε_wall | 1 | 0.9 | Wall emissivity |
T_g_roof | K | 298.0 | Roof surface temperature |
T_g_prvrd | K | 295.0 | Pervious road surface temperature |
T_g_imprvrd | K | 297.0 | Impervious road surface temperature |
T_g_sunwall | K | 299.0 | Sunlit wall surface temperature |
T_g_shdwall | K | 294.0 | Shaded wall surface temperature |
q_g_roof | kg/kg | 0.012 | Roof surface saturated specific humidity |
q_g_prvrd | kg/kg | 0.011 | Pervious road specific humidity |
q_g_imprvrd | kg/kg | 0.012 | Impervious road saturated specific humidity |
f_wet_roof | 1 | 0.2 | Wetted fraction of roof |
f_wet_imprvrd | 1 | 0.1 | Wetted fraction of impervious road |
zeta_in | 1 | -0.1 | Monin-Obukhov stability parameter ζ (external input; negative=unstable) |
Equations
$$ UrbanCanopyModel.offline.S_{atm} = S_{atm} $$ $$ UrbanCanopyModel.offline.T_{atm} = T_{atm} $$ $$ UrbanCanopyModel.offline.P_{atm} = P_{atm} $$ $$ UrbanCanopyModel.offline.q_{atm} = q_{atm} $$ $$ UrbanCanopyModel.offline.W_{atm} = W_{atm} $$ $$ UrbanCanopyModel.offline.P_{precip} = P_{precip} $$ $$ UrbanCanopyModel.atmos.z_{prime\,atm} = UrbanCanopyModel.offline.z_{prime\,atm} $$ $$ UrbanCanopyModel.atmos.T_{atm} = T_{atm} $$ $$ UrbanCanopyModel.atmos.P_{atm} = P_{atm} $$ $$ UrbanCanopyModel.atmos.q_{atm} = q_{atm} $$ $$ UrbanCanopyModel.atmos.z_{0} = z_{0} $$ $$ UrbanCanopyModel.atmos.z_{d} = z_{d} $$ $$ UrbanCanopyModel.rad.S_{atm\,dir\,vis} = UrbanCanopyModel.offline.S_{atm\,dir\,vis} $$ $$ UrbanCanopyModel.rad.S_{atm\,dir\,nir} = UrbanCanopyModel.offline.S_{atm\,dir\,nir} $$ $$ UrbanCanopyModel.rad.S_{atm\,dif\,vis} = UrbanCanopyModel.offline.S_{atm\,dif\,vis} $$ $$ UrbanCanopyModel.rad.S_{atm\,dif\,nir} = UrbanCanopyModel.offline.S_{atm\,dif\,nir} $$ $$ UrbanCanopyModel.rad.L_{atm\,down} = UrbanCanopyModel.offline.L_{atm\,down} $$ $$ UrbanCanopyModel.rad.μ_{zen} = μ_{zen} $$ $$ UrbanCanopyModel.rad.H_{W} = H_{W} $$ $$ UrbanCanopyModel.rad.W_{roof} = W_{roof} $$ $$ UrbanCanopyModel.rad.α_{roof\,dir\,vis} = α_{roof\,dir\,vis} $$ $$ UrbanCanopyModel.rad.α_{roof\,dir\,nir} = α_{roof\,dir\,nir} $$ $$ UrbanCanopyModel.rad.α_{roof\,dif\,vis} = α_{roof\,dif\,vis} $$ $$ UrbanCanopyModel.rad.α_{roof\,dif\,nir} = α_{roof\,dif\,nir} $$ $$ UrbanCanopyModel.rad.α_{road\,dir\,vis} = α_{road\,dir\,vis} $$ $$ UrbanCanopyModel.rad.α_{road\,dir\,nir} = α_{road\,dir\,nir} $$ $$ UrbanCanopyModel.rad.α_{road\,dif\,vis} = α_{road\,dif\,vis} $$ $$ UrbanCanopyModel.rad.α_{road\,dif\,nir} = α_{road\,dif\,nir} $$ $$ UrbanCanopyModel.rad.α_{wall\,dir\,vis} = α_{wall\,dir\,vis} $$ $$ UrbanCanopyModel.rad.α_{wall\,dir\,nir} = α_{wall\,dir\,nir} $$ $$ UrbanCanopyModel.rad.α_{wall\,dif\,vis} = α_{wall\,dif\,vis} $$ $$ UrbanCanopyModel.rad.α_{wall\,dif\,nir} = α_{wall\,dif\,nir} $$ $$ UrbanCanopyModel.rad.ε_{roof} = ε_{roof} $$ $$ UrbanCanopyModel.rad.ε_{road} = ε_{road} $$ $$ UrbanCanopyModel.rad.ε_{wall} = ε_{wall} $$ $$ UrbanCanopyModel.rad.T_{roof} = T_{g\,roof} $$ $$ UrbanCanopyModel.rad.T_{road} = T_{g\,imprvrd} $$ $$ UrbanCanopyModel.rad.T_{sunwall} = T_{g\,sunwall} $$ $$ UrbanCanopyModel.rad.T_{shdwall} = T_{g\,shdwall} $$ $$ UrbanCanopyModel.flux.u_{atm} = UrbanCanopyModel.offline.u_{atm} $$ $$ UrbanCanopyModel.flux.v_{atm} = UrbanCanopyModel.offline.v_{atm} $$ $$ UrbanCanopyModel.flux.theta_{atm} = UrbanCanopyModel.offline.theta_{atm} $$ $$ UrbanCanopyModel.flux.q_{atm} = q_{atm} $$ $$ UrbanCanopyModel.flux.rho_{atm} = UrbanCanopyModel.atmos.rho_{atm} $$ $$ UrbanCanopyModel.flux.z_{atm\,m} = UrbanCanopyModel.atmos.z_{atm} $$ $$ UrbanCanopyModel.flux.z_{atm\,h} = UrbanCanopyModel.atmos.z_{atm} $$ $$ UrbanCanopyModel.flux.z_{atm\,w} = UrbanCanopyModel.atmos.z_{atm} $$ $$ UrbanCanopyModel.flux.H_{W} = H_{W} $$ $$ UrbanCanopyModel.flux.H_{canyon} = H_{canyon} $$ $$ UrbanCanopyModel.flux.W_{roof} = W_{roof} $$ $$ UrbanCanopyModel.flux.f_{prvrd} = f_{prvrd} $$ $$ UrbanCanopyModel.flux.H_{w\,est} = H_{w\,est} $$ $$ UrbanCanopyModel.flux.T_{g\,roof} = T_{g\,roof} $$ $$ UrbanCanopyModel.flux.T_{g\,prvrd} = T_{g\,prvrd} $$ $$ UrbanCanopyModel.flux.T_{g\,imprvrd} = T_{g\,imprvrd} $$ $$ UrbanCanopyModel.flux.T_{g\,sunwall} = T_{g\,sunwall} $$ $$ UrbanCanopyModel.flux.T_{g\,shdwall} = T_{g\,shdwall} $$ $$ UrbanCanopyModel.flux.q_{g\,roof} = q_{g\,roof} $$ $$ UrbanCanopyModel.flux.q_{g\,prvrd} = q_{g\,prvrd} $$ $$ UrbanCanopyModel.flux.q_{g\,imprvrd} = q_{g\,imprvrd} $$ $$ UrbanCanopyModel.flux.f_{wet\,roof} = f_{wet\,roof} $$ $$ UrbanCanopyModel.flux.f_{wet\,imprvrd} = f_{wet\,imprvrd} $$ $$ UrbanCanopyModel.flux.zeta_{in} = zeta_{in} $$Expression Templates
band_det
Parameters: a_r, a_w
band_net_road
Parameters: a_r, a_w, S_r, S_sw, S_sh, det_var
band_net_sw
Parameters: a_r, a_w, S_r, S_sw, S_sh, det_var
band_net_sh
Parameters: a_r, a_w, S_r, S_sw, S_sh, det_var
band_refl_sky
Parameters: S_r, S_sw, S_sh, net_road, net_sw, net_sh
Raw .esm
Raw .esm JSON (this component)
{
"reference": {
"notes": "source_ref: UrbanCanopy.jl@9200edd4f15609f20339d3a7d104de8064544310:src/urban_canopy_model.jl:41\n\nComposed model (ESS spec §4.7) following the SulfateFormation / WaterVaporThermodynamics pattern: four subsystems inlined under 'subsystems', top-level coupling equations wire the data flow.\n\nSubsystem inlining avoids SubsystemRef dependencies on .esm files that may not yet be on main (the original rejection on esm-vmik was SubsystemRefError for heat_momentum_fluxes.esm). All subsystem content is self-contained here.\n\nHeatMomentumFluxes (flux subsystem): the ψ_m/ψ_h piecewise stability functions produce deeply nested ifelse expressions. Under cse=False the _flat_to_sympy_rhs substitution chain explodes (~419K ops). The inline-test gate builds it under the library default cse=True (tools/run_esm_inline_tests.py lists only geoschem_fullchem.esm in CSE_FALSE_FILENAMES), so it needs no entry there and must not be given one; ULP-equivalence of cse=True ↔ cse=False was verified by esm-wqy1.\n\nVariable naming: offline/atmos subsystems use ASCII (theta_atm, rho_atm, z_prime_atm following their standalone ESM convention); rad uses Unicode (μ_zen, α_*, ε_* following urban_radiation.esm); flux uses ASCII (theta_atm, rho_atm, zeta_in following the ASCII convention of sibling subsystems). Coupling equations bridge the name differences.\n\nTolerance: model-level rel=1e-6 (composed algebraic system, no ODE integration; the piecewise ψ stability functions involve logarithms and cube-roots, ULP roundoff ~1e-15 at non-degenerate stability; rel=1e-6 gives comfortable headroom above ULP and matches the composed precedents SulfateFormation and WaterVaporThermodynamics)."
},
"tolerance": {
"rel": 1e-06
},
"variables": {
"S_atm": {
"type": "parameter",
"units": "W/m^2",
"default": 500.0,
"description": "Total incident solar radiation (Eq. 6.1 output)"
},
"T_atm": {
"type": "parameter",
"units": "K",
"default": 293.15,
"description": "Atmospheric temperature"
},
"P_atm": {
"type": "parameter",
"units": "Pa",
"default": 101325.0,
"description": "Atmospheric pressure"
},
"q_atm": {
"type": "parameter",
"units": "kg/kg",
"default": 0.01,
"description": "Atmospheric specific humidity"
},
"W_atm": {
"type": "parameter",
"units": "m/s",
"default": 7.071,
"description": "Atmospheric wind speed"
},
"P_precip": {
"type": "parameter",
"units": "kg/(m^2*s)",
"default": 0.0,
"description": "Total precipitation rate"
},
"μ_zen": {
"type": "parameter",
"units": "rad",
"default": 0.5236,
"description": "Solar zenith angle (30°)"
},
"H_W": {
"type": "parameter",
"units": "1",
"default": 1.0,
"description": "Canyon H/W ratio"
},
"W_roof": {
"type": "parameter",
"units": "1",
"default": 0.5,
"description": "Roof fraction"
},
"H_canyon": {
"type": "parameter",
"units": "m",
"default": 10.0,
"description": "Canyon height"
},
"f_prvrd": {
"type": "parameter",
"units": "1",
"default": 0.5,
"description": "Pervious road fraction"
},
"H_w_est": {
"type": "parameter",
"units": "m",
"default": 5.0,
"description": "Height for canyon wind estimate"
},
"z_0": {
"type": "parameter",
"units": "m",
"default": 1.0,
"description": "Roughness length"
},
"z_d": {
"type": "parameter",
"units": "m",
"default": 5.0,
"description": "Displacement height"
},
"α_roof_dir_vis": {
"type": "parameter",
"units": "1",
"default": 0.2,
"description": "Roof albedo, direct, vis"
},
"α_roof_dir_nir": {
"type": "parameter",
"units": "1",
"default": 0.25,
"description": "Roof albedo, direct, NIR"
},
"α_roof_dif_vis": {
"type": "parameter",
"units": "1",
"default": 0.2,
"description": "Roof albedo, diffuse, vis"
},
"α_roof_dif_nir": {
"type": "parameter",
"units": "1",
"default": 0.25,
"description": "Roof albedo, diffuse, NIR"
},
"α_road_dir_vis": {
"type": "parameter",
"units": "1",
"default": 0.1,
"description": "Road albedo, direct, vis"
},
"α_road_dir_nir": {
"type": "parameter",
"units": "1",
"default": 0.15,
"description": "Road albedo, direct, NIR"
},
"α_road_dif_vis": {
"type": "parameter",
"units": "1",
"default": 0.1,
"description": "Road albedo, diffuse, vis"
},
"α_road_dif_nir": {
"type": "parameter",
"units": "1",
"default": 0.15,
"description": "Road albedo, diffuse, NIR"
},
"α_wall_dir_vis": {
"type": "parameter",
"units": "1",
"default": 0.3,
"description": "Wall albedo, direct, vis"
},
"α_wall_dir_nir": {
"type": "parameter",
"units": "1",
"default": 0.35,
"description": "Wall albedo, direct, NIR"
},
"α_wall_dif_vis": {
"type": "parameter",
"units": "1",
"default": 0.3,
"description": "Wall albedo, diffuse, vis"
},
"α_wall_dif_nir": {
"type": "parameter",
"units": "1",
"default": 0.35,
"description": "Wall albedo, diffuse, NIR"
},
"ε_roof": {
"type": "parameter",
"units": "1",
"default": 0.93,
"description": "Roof emissivity"
},
"ε_road": {
"type": "parameter",
"units": "1",
"default": 0.95,
"description": "Road emissivity"
},
"ε_wall": {
"type": "parameter",
"units": "1",
"default": 0.9,
"description": "Wall emissivity"
},
"T_g_roof": {
"type": "parameter",
"units": "K",
"default": 298.0,
"description": "Roof surface temperature"
},
"T_g_prvrd": {
"type": "parameter",
"units": "K",
"default": 295.0,
"description": "Pervious road surface temperature"
},
"T_g_imprvrd": {
"type": "parameter",
"units": "K",
"default": 297.0,
"description": "Impervious road surface temperature"
},
"T_g_sunwall": {
"type": "parameter",
"units": "K",
"default": 299.0,
"description": "Sunlit wall surface temperature"
},
"T_g_shdwall": {
"type": "parameter",
"units": "K",
"default": 294.0,
"description": "Shaded wall surface temperature"
},
"q_g_roof": {
"type": "parameter",
"units": "kg/kg",
"default": 0.012,
"description": "Roof surface saturated specific humidity"
},
"q_g_prvrd": {
"type": "parameter",
"units": "kg/kg",
"default": 0.011,
"description": "Pervious road specific humidity"
},
"q_g_imprvrd": {
"type": "parameter",
"units": "kg/kg",
"default": 0.012,
"description": "Impervious road saturated specific humidity"
},
"f_wet_roof": {
"type": "parameter",
"units": "1",
"default": 0.2,
"description": "Wetted fraction of roof"
},
"f_wet_imprvrd": {
"type": "parameter",
"units": "1",
"default": 0.1,
"description": "Wetted fraction of impervious road"
},
"zeta_in": {
"type": "parameter",
"units": "1",
"default": -0.1,
"description": "Monin-Obukhov stability parameter ζ (external input; negative=unstable)"
}
},
"subsystems": {
"offline": {
"variables": {
"sigma_SB": {
"type": "parameter",
"units": "W/(m^2*K^4)",
"default": 5.67e-08,
"description": "Stefan-Boltzmann constant (Oleson Table 1.4) — upstream `@constants` σ_SB; coefficient on the T_atm^4 upward emission term in Eq. 6.9"
},
"T_f": {
"type": "parameter",
"units": "K",
"default": 273.15,
"description": "Freezing temperature of water (Oleson Table 1.4) — reference temperature for the rain/snow partition (Eq. 6.13): below T_f the slope-0.5 ramp goes negative and clamps to 0 (all snow); above T_f + 2 K it goes above 1 and clamps (all rain)"
},
"MW_da": {
"type": "parameter",
"units": "kg/mol",
"default": 0.028966,
"description": "Molecular weight of dry air (Oleson Table 1.4) — upstream `@constants`; used to derive the ε_ratio and one_minus_ε constants below. The derivation is evaluated at the upstream defaults and the resulting ratios are frozen in as their own parameters; this MW_da default is exposed for cross-reference"
},
"MW_wv": {
"type": "parameter",
"units": "kg/mol",
"default": 0.018016,
"description": "Molecular weight of water vapor (Oleson Table 1.4) — upstream `@constants`; used to derive the ε_ratio and one_minus_ε constants below"
},
"epsilon_ratio": {
"type": "parameter",
"units": "1",
"default": 0.6219705862045157,
"description": "Ratio of molecular weights MW_wv/MW_da ≈ 0.622 (Oleson Table 1.4, p. 12) — upstream `@constants` ε_ratio = MW_wv/MW_da, frozen at the upstream-default IEEE-754 value `0.018016 / 0.028966`. Appears in Eq. 6.10 as the constant term in the denominator: e_atm = P_atm * q_atm / (epsilon_ratio + one_minus_epsilon * q_atm)"
},
"one_minus_epsilon": {
"type": "parameter",
"units": "1",
"default": 0.37802941379548427,
"description": "One minus MW_wv/MW_da ≈ 0.378 — upstream `@constants` one_minus_ε = 1.0 - MW_wv/MW_da, frozen at the upstream-default IEEE-754 value. Appears in Eq. 6.10 as the coefficient of q_atm in the denominator. Note: epsilon_ratio + one_minus_epsilon is exactly 1.0 by construction at the upstream defaults"
},
"alpha_vis": {
"type": "parameter",
"units": "1",
"default": 0.5,
"description": "Ratio of visible to total incident solar radiation (Oleson Eq. 6.6) — upstream `@constants` α_vis = 0.5. Within the canonical S_atm = 500 W/m^2 fixture, alpha_vis * S_atm = 250 W/m^2 in visible and (1 - alpha_vis) * S_atm = 250 W/m^2 in NIR. The 50/50 split is a standard solar-band partition for clear-sky surface conditions in CLM"
},
"a_0": {
"type": "parameter",
"units": "1",
"default": 0.17639,
"description": "Visible direct-fraction polynomial coefficient a_0 (Oleson Eq. 6.7, dimensionless) — at zero visible flux R_vis_raw = a_0 = 0.17639 (the y-intercept of the cubic)"
},
"a_1": {
"type": "parameter",
"units": "m^2/W",
"default": 0.0038,
"description": "Visible direct-fraction polynomial coefficient a_1 (Oleson Eq. 6.7) — linear term in (alpha_vis * S_atm)"
},
"a_2": {
"type": "parameter",
"units": "m^4/W^2",
"default": -9.0039e-06,
"description": "Visible direct-fraction polynomial coefficient a_2 (Oleson Eq. 6.7) — quadratic term in (alpha_vis * S_atm); negative, bending the cubic downward at mid-range fluxes"
},
"a_3": {
"type": "parameter",
"units": "m^6/W^3",
"default": 8.1351e-09,
"description": "Visible direct-fraction polynomial coefficient a_3 (Oleson Eq. 6.7) — cubic term in (alpha_vis * S_atm); positive, bending the cubic back upward at high fluxes"
},
"b_0": {
"type": "parameter",
"units": "1",
"default": 0.29548,
"description": "NIR direct-fraction polynomial coefficient b_0 (Oleson Eq. 6.8, dimensionless) — at zero NIR flux R_nir_raw = b_0 = 0.29548"
},
"b_1": {
"type": "parameter",
"units": "m^2/W",
"default": 0.00504,
"description": "NIR direct-fraction polynomial coefficient b_1 (Oleson Eq. 6.8) — linear term in ((1 - alpha_vis) * S_atm)"
},
"b_2": {
"type": "parameter",
"units": "m^4/W^2",
"default": -1.4957e-05,
"description": "NIR direct-fraction polynomial coefficient b_2 (Oleson Eq. 6.8) — quadratic term in ((1 - alpha_vis) * S_atm); negative"
},
"b_3": {
"type": "parameter",
"units": "m^6/W^3",
"default": 1.4881e-08,
"description": "NIR direct-fraction polynomial coefficient b_3 (Oleson Eq. 6.8) — cubic term in ((1 - alpha_vis) * S_atm); positive"
},
"idso_base": {
"type": "parameter",
"units": "1",
"default": 0.7,
"description": "Idso (1981) base emissivity factor (Oleson Eq. 6.9, dimensionless) — the additive constant in the bracketed emissivity factor `[0.70 + idso_coeff * e_atm * exp(idso_T_ref / T_atm)]`. Represents the dry-air contribution to clear-sky atmospheric emissivity"
},
"idso_coeff": {
"type": "parameter",
"units": "Pa^-1",
"default": 5.95e-07,
"description": "Idso (1981) vapor-pressure coefficient (Oleson Eq. 6.9) — encodes the upstream pre-multiplied form `5.95e-5 * 0.01 = 5.95e-7` Pa^-1 from the upstream comment, so the equation reads `idso_base + idso_coeff * e_atm * exp(idso_T_ref / T_atm)` without an inline literal 0.01 factor. The 0.01 factor converts e_atm from Pa to a 100-Pa unit equivalent (a hectopascal) so that the dimensionless product idso_coeff * e_atm is at unit order ~0.1 for moist atmospheres"
},
"idso_T_ref": {
"type": "parameter",
"units": "K",
"default": 1500.0,
"description": "Idso (1981) temperature reference (Oleson Eq. 6.9) — argument of the exp() factor: exp(1500/T_atm). At T_atm = 273.15 K the factor is exp(5.49) ≈ 242; at T_atm = 293.15 K it is exp(5.12) ≈ 167. Captures the strong moisture-temperature coupling of clear-sky downwelling longwave"
},
"f_P_slope": {
"type": "parameter",
"units": "K^-1",
"default": 0.5,
"description": "Rain-fraction slope (Oleson Eq. 6.13) — coefficient of (T_atm - T_f) in the linear rain-fraction ramp. With slope 0.5 K^-1, f_P_raw crosses 0 at T_atm = T_f and crosses 1 at T_atm = T_f + 2 K, giving a 2-K-wide transition zone for the rain/snow partition"
},
"R_min": {
"type": "parameter",
"units": "1",
"default": 0.01,
"description": "Minimum direct fraction (Oleson Eqs. 6.7-6.8, dimensionless) — lower bound of the [R_min, R_max] clamp on R_vis_raw and R_nir_raw; prevents the polynomial fit from producing implausibly small direct fractions at the polynomial's roots / sign changes"
},
"R_max": {
"type": "parameter",
"units": "1",
"default": 0.99,
"description": "Maximum direct fraction (Oleson Eqs. 6.7-6.8, dimensionless) — upper bound of the [R_min, R_max] clamp; prevents the polynomial fit from producing a direct fraction > 1 at high S_atm (where the polynomial extrapolates outside its calibration range)"
},
"zero_dimless": {
"type": "parameter",
"units": "1",
"default": 0.0,
"description": "Zero (dimensionless) — upstream `@constants` zero_dimless used as the lower clamp on f_P (Eq. 6.13). Identically 0.0; the parameter form preserves the upstream contract that all clamp bounds are declared `@constants` rather than inline literals"
},
"one_dimless": {
"type": "parameter",
"units": "1",
"default": 1.0,
"description": "One (dimensionless) — upstream `@constants` one_dimless used (a) as the upper clamp on f_P (Eq. 6.13), (b) as the multiplicand in `(1 - alpha_vis)` for NIR weighting, (c) as the multiplicand in `(1 - R_vis)` and `(1 - R_nir)` for diffuse-fraction extraction, and (d) as the multiplicand in `(1 - f_P)` for the snow-fraction extraction. Identically 1.0"
},
"sqrt2_inv": {
"type": "parameter",
"units": "1",
"default": 0.7071067811865475,
"description": "1/√2 (dimensionless) — upstream `@constants` sqrt2_inv = 1.0 / sqrt(2.0), frozen at the IEEE-754 double value. Used in the wind decomposition u_atm = v_atm = sqrt2_inv * W_atm so that u_atm^2 + v_atm^2 = W_atm^2 exactly (anchored by the wind_decomposition_pythagorean test). The decomposition assumes the wind is equally split between zonal and meridional components in offline mode — a default that downstream CLMU surface-layer routines can override if a wind-direction observation is available"
},
"z_prime_atm_val": {
"type": "parameter",
"units": "m",
"default": 30.0,
"description": "Atmospheric reference height (Oleson CLMU Tech Note p. 149) — upstream `@constants`. The reference height at which the atmospheric forcing inputs (T_atm, q_atm, W_atm) are measured; CLMU's surface-layer turbulence parameterizations use this to compute the Monin-Obukhov stability profile. 30 m is the standard CLMU default; downstream consumers can rebind this parameter for site-specific tower heights"
},
"S_atm": {
"type": "unknown",
"units": "W/m^2",
"default": 500.0,
"description": "Total incident solar radiation at the model time step (Oleson Eq. 6.1 output) — upstream `@parameters`. The single solar-radiation input to the four-way partition (Eqs. 6.2-6.5); already at the model time step (Eq. 6.1 temporal-downscaling is an upstream preprocessing step). Default 500 W/m^2 mirrors the upstream-test canonical fixture"
},
"T_atm": {
"type": "unknown",
"units": "K",
"default": 293.15,
"description": "Atmospheric temperature at z_prime_atm_val (Oleson CLMU Ch. 6) — upstream `@parameters`. Used in the Idso longwave formula (Eq. 6.9), the rain/snow partition (Eq. 6.13), and assigned to theta_atm directly (p. 149). Default 293.15 K (20°C) mirrors the upstream canonical fixture"
},
"P_atm": {
"type": "unknown",
"units": "Pa",
"default": 101325.0,
"description": "Atmospheric pressure at z_prime_atm_val — upstream `@parameters`. Multiplies q_atm in the vapor-pressure formula (Eq. 6.10) — at standard pressure 101325 Pa and q_atm = 0.01 the vapor pressure e_atm ≈ 1619 Pa (about 16 hPa)"
},
"q_atm": {
"type": "unknown",
"units": "kg/kg",
"default": 0.01,
"description": "Atmospheric specific humidity at z_prime_atm_val — upstream `@parameters`. The single moisture input to the Idso longwave formula (via e_atm in Eq. 6.10). Default 0.01 kg/kg (10 g of water per kg of moist air) is representative of mid-latitude summer surface conditions"
},
"W_atm": {
"type": "unknown",
"units": "m/s",
"default": 5.0,
"description": "Atmospheric wind speed at z_prime_atm_val — upstream `@parameters`. Split equally between zonal and meridional via the sqrt2_inv decomposition (p. 149). Default 5 m/s is a moderate breeze"
},
"P_precip": {
"type": "unknown",
"units": "kg/(m^2*s)",
"default": 0.0,
"description": "Total precipitation rate (rain + snow) — upstream `@parameters`. Partitioned into q_rain and q_snow via the temperature-dependent f_P ramp (Eqs. 6.11-6.13). Default 0 (dry conditions) so non-precipitation tests do not need to override this parameter"
},
"R_vis_raw": {
"type": "unknown",
"units": "1",
"description": "Unclamped visible direct fraction (Oleson Eq. 6.7) — the raw polynomial output `a_0 + a_1*(alpha_vis*S_atm) + a_2*(alpha_vis*S_atm)^2 + a_3*(alpha_vis*S_atm)^3` before the [R_min, R_max] clamp. Exposed so downstream consumers can detect when the clamp activates (the polynomial may exceed 0.99 or fall below 0.01 at extreme S_atm)"
},
"R_nir_raw": {
"type": "unknown",
"units": "1",
"description": "Unclamped NIR direct fraction (Oleson Eq. 6.8) — the raw polynomial output `b_0 + b_1*((1-alpha_vis)*S_atm) + b_2*((1-alpha_vis)*S_atm)^2 + b_3*((1-alpha_vis)*S_atm)^3` before the [R_min, R_max] clamp"
},
"R_vis": {
"type": "unknown",
"units": "1",
"description": "Visible direct fraction clamped to [R_min, R_max] (Oleson Eq. 6.7): max(R_min, min(R_max, R_vis_raw)). The fraction of the visible incident flux that is direct beam (rest is diffuse)"
},
"R_nir": {
"type": "unknown",
"units": "1",
"description": "NIR direct fraction clamped to [R_min, R_max] (Oleson Eq. 6.8): max(R_min, min(R_max, R_nir_raw))"
},
"S_atm_dir_vis": {
"type": "unknown",
"units": "W/m^2",
"description": "Direct-beam visible solar radiation at the surface (Oleson Eq. 6.2): R_vis * (alpha_vis * S_atm). The shortwave-vis component that hits a horizontal surface from the direct solar beam"
},
"S_atm_dir_nir": {
"type": "unknown",
"units": "W/m^2",
"description": "Direct-beam NIR solar radiation at the surface (Oleson Eq. 6.3): R_nir * ((1 - alpha_vis) * S_atm)"
},
"S_atm_dif_vis": {
"type": "unknown",
"units": "W/m^2",
"description": "Diffuse visible solar radiation at the surface (Oleson Eq. 6.4): (1 - R_vis) * (alpha_vis * S_atm)"
},
"S_atm_dif_nir": {
"type": "unknown",
"units": "W/m^2",
"description": "Diffuse NIR solar radiation at the surface (Oleson Eq. 6.5): (1 - R_nir) * ((1 - alpha_vis) * S_atm)"
},
"e_atm": {
"type": "unknown",
"units": "Pa",
"description": "Atmospheric vapor pressure (Oleson Eq. 6.10): P_atm * q_atm / (epsilon_ratio + one_minus_epsilon * q_atm). The partial pressure of water vapor in the atmosphere derived from specific humidity using the molecular-weight-ratio formula. Zero at q_atm = 0; bounded above by P_atm * q_atm / epsilon_ratio at small q_atm"
},
"L_atm_down": {
"type": "unknown",
"units": "W/m^2",
"description": "Atmospheric downwelling longwave radiation at the surface (Oleson Eq. 6.9, after Idso 1981): (idso_base + idso_coeff * e_atm * exp(idso_T_ref / T_atm)) * sigma_SB * T_atm^4. Sum of a clear-sky dry-air contribution and a moisture-amplification term — increases monotonically with both T_atm (Stefan-Boltzmann ^4) and q_atm (through e_atm)"
},
"f_P_raw": {
"type": "unknown",
"units": "1",
"description": "Unclamped rain fraction (Oleson Eq. 6.13): f_P_slope * (T_atm - T_f). The linear T_atm - T_f ramp before the [0, 1] clamp. Negative below freezing, > 1 above T_f + 2 K"
},
"f_P": {
"type": "unknown",
"units": "1",
"description": "Rain fraction clamped to [zero_dimless, one_dimless] (Oleson Eq. 6.13): max(zero_dimless, min(one_dimless, f_P_raw)). The fraction of total precipitation that falls as rain; complement (1 - f_P) falls as snow"
},
"q_rain": {
"type": "unknown",
"units": "kg/(m^2*s)",
"description": "Rain (liquid precipitation) rate (Oleson Eq. 6.11): P_precip * f_P. Zero below T_f; equals P_precip above T_f + 2 K"
},
"q_snow": {
"type": "unknown",
"units": "kg/(m^2*s)",
"description": "Snow (solid precipitation) rate (Oleson Eq. 6.12): P_precip * (one_dimless - f_P). Equals P_precip below T_f; zero above T_f + 2 K. By construction q_rain + q_snow = P_precip for all T_atm"
},
"u_atm": {
"type": "unknown",
"units": "m/s",
"description": "Zonal (east-west) wind component (Oleson CLMU p. 149): sqrt2_inv * W_atm. Equal-split assumption — offline mode lacks wind-direction information, so the wind is decomposed isotropically. By construction u_atm^2 + v_atm^2 = W_atm^2"
},
"v_atm": {
"type": "unknown",
"units": "m/s",
"description": "Meridional (north-south) wind component (Oleson CLMU p. 149): sqrt2_inv * W_atm. Equal-split assumption, see u_atm"
},
"theta_atm": {
"type": "unknown",
"units": "K",
"description": "Atmospheric potential temperature (Oleson CLMU p. 149) — upstream `θ_atm`; identified with T_atm in offline mode (no atmospheric layer above z_prime_atm_val, so the potential-temperature reference is the surface). Used by CLMU's Monin-Obukhov surface-layer routine"
},
"z_prime_atm": {
"type": "unknown",
"units": "m",
"description": "Atmospheric reference height (Oleson CLMU p. 149) — assigned to z_prime_atm_val (default 30 m). Exposed as a state output so a coupled CLMU build can wire it to the surface-layer routine via observed-equation forwarding"
}
},
"equations": [
{
"lhs": "R_vis_raw",
"rhs": {
"op": "+",
"args": [
"a_0",
{
"op": "*",
"args": [
"a_1",
{
"op": "*",
"args": [
"alpha_vis",
"S_atm"
]
}
]
},
{
"op": "*",
"args": [
"a_2",
{
"op": "^",
"args": [
{
"op": "*",
"args": [
"alpha_vis",
"S_atm"
]
},
2.0
]
}
]
},
{
"op": "*",
"args": [
"a_3",
{
"op": "^",
"args": [
{
"op": "*",
"args": [
"alpha_vis",
"S_atm"
]
},
3.0
]
}
]
}
]
}
},
{
"lhs": "R_nir_raw",
"rhs": {
"op": "+",
"args": [
"b_0",
{
"op": "*",
"args": [
"b_1",
{
"op": "*",
"args": [
{
"op": "-",
"args": [
"one_dimless",
"alpha_vis"
]
},
"S_atm"
]
}
]
},
{
"op": "*",
"args": [
"b_2",
{
"op": "^",
"args": [
{
"op": "*",
"args": [
{
"op": "-",
"args": [
"one_dimless",
"alpha_vis"
]
},
"S_atm"
]
},
2.0
]
}
]
},
{
"op": "*",
"args": [
"b_3",
{
"op": "^",
"args": [
{
"op": "*",
"args": [
{
"op": "-",
"args": [
"one_dimless",
"alpha_vis"
]
},
"S_atm"
]
},
3.0
]
}
]
}
]
}
},
{
"lhs": "R_vis",
"rhs": {
"op": "max",
"args": [
"R_min",
{
"op": "min",
"args": [
"R_max",
"R_vis_raw"
]
}
]
}
},
{
"lhs": "R_nir",
"rhs": {
"op": "max",
"args": [
"R_min",
{
"op": "min",
"args": [
"R_max",
"R_nir_raw"
]
}
]
}
},
{
"lhs": "S_atm_dir_vis",
"rhs": {
"op": "*",
"args": [
"R_vis",
{
"op": "*",
"args": [
"alpha_vis",
"S_atm"
]
}
]
}
},
{
"lhs": "S_atm_dir_nir",
"rhs": {
"op": "*",
"args": [
"R_nir",
{
"op": "*",
"args": [
{
"op": "-",
"args": [
"one_dimless",
"alpha_vis"
]
},
"S_atm"
]
}
]
}
},
{
"lhs": "S_atm_dif_vis",
"rhs": {
"op": "*",
"args": [
{
"op": "-",
"args": [
"one_dimless",
"R_vis"
]
},
{
"op": "*",
"args": [
"alpha_vis",
"S_atm"
]
}
]
}
},
{
"lhs": "S_atm_dif_nir",
"rhs": {
"op": "*",
"args": [
{
"op": "-",
"args": [
"one_dimless",
"R_nir"
]
},
{
"op": "*",
"args": [
{
"op": "-",
"args": [
"one_dimless",
"alpha_vis"
]
},
"S_atm"
]
}
]
}
},
{
"lhs": "e_atm",
"rhs": {
"op": "/",
"args": [
{
"op": "*",
"args": [
"P_atm",
"q_atm"
]
},
{
"op": "+",
"args": [
"epsilon_ratio",
{
"op": "*",
"args": [
"one_minus_epsilon",
"q_atm"
]
}
]
}
]
}
},
{
"lhs": "L_atm_down",
"rhs": {
"op": "*",
"args": [
{
"op": "+",
"args": [
"idso_base",
{
"op": "*",
"args": [
"idso_coeff",
"e_atm",
{
"op": "exp",
"args": [
{
"op": "/",
"args": [
"idso_T_ref",
"T_atm"
]
}
]
}
]
}
]
},
"sigma_SB",
{
"op": "^",
"args": [
"T_atm",
4.0
]
}
]
}
},
{
"lhs": "f_P_raw",
"rhs": {
"op": "*",
"args": [
"f_P_slope",
{
"op": "-",
"args": [
"T_atm",
"T_f"
]
}
]
}
},
{
"lhs": "f_P",
"rhs": {
"op": "max",
"args": [
"zero_dimless",
{
"op": "min",
"args": [
"one_dimless",
"f_P_raw"
]
}
]
}
},
{
"lhs": "q_rain",
"rhs": {
"op": "*",
"args": [
"P_precip",
"f_P"
]
}
},
{
"lhs": "q_snow",
"rhs": {
"op": "*",
"args": [
"P_precip",
{
"op": "-",
"args": [
"one_dimless",
"f_P"
]
}
]
}
},
{
"lhs": "u_atm",
"rhs": {
"op": "*",
"args": [
"sqrt2_inv",
"W_atm"
]
}
},
{
"lhs": "v_atm",
"rhs": {
"op": "*",
"args": [
"sqrt2_inv",
"W_atm"
]
}
},
{
"lhs": "theta_atm",
"rhs": "T_atm"
},
{
"lhs": "z_prime_atm",
"rhs": "z_prime_atm_val"
}
]
},
"atmos": {
"variables": {
"kappa_boltz": {
"type": "parameter",
"units": "J/K",
"default": 1.38065e-23,
"description": "Boltzmann constant (Oleson Table 1.4) — upstream `@constants` κ_boltz; the per-particle gas constant for Avogadro-scaling the universal gas constant"
},
"N_A": {
"type": "parameter",
"units": "mol^-1",
"default": 6.02214e+23,
"description": "Avogadro's number (Oleson Table 1.4) — upstream `@constants` N_A; the conversion factor from per-mole to per-particle (Oleson uses kmol in the table; this value is converted to SI mol)"
},
"MW_da": {
"type": "parameter",
"units": "kg/mol",
"default": 0.028966,
"description": "Molecular weight of dry air (Oleson Table 1.4) — upstream `@constants` MW_da; standard atmospheric mean (Oleson reports 28.966 kg/kmol; here in SI kg/mol)"
},
"MW_wv": {
"type": "parameter",
"units": "kg/mol",
"default": 0.018016,
"description": "Molecular weight of water vapor (Oleson Table 1.4) — upstream `@constants` MW_wv; standard H2O molecular weight (Oleson reports 18.016 kg/kmol; here in SI kg/mol)"
},
"R_gas": {
"type": "parameter",
"units": "J/(K*mol)",
"default": 8.314467591,
"description": "Universal gas constant R_gas = N_A * kappa_boltz (Oleson Table 1.4) — upstream `@constants` R_gas; the IEEE-754 double-precision product of the upstream Avogadro and Boltzmann defaults (matches Julia bit-for-bit). Not used in this component's equations but preserved as part of the upstream component's public constant interface"
},
"R_da": {
"type": "parameter",
"units": "J/(K*kg)",
"default": 287.0423113650487,
"description": "Specific gas constant for dry air R_da = R_gas / MW_da (Oleson Table 1.4) — upstream `@constants` R_da; appears as the denominator scale of the ideal-gas law in Eq. 2 of this component. The IEEE-754 double-precision quotient of the upstream R_gas / MW_da defaults (matches Julia bit-for-bit, slightly tighter than the rounded 287.042 used in the upstream test docstring)"
},
"epsilon_ratio": {
"type": "parameter",
"units": "1",
"default": 0.6219705862045157,
"description": "Ratio of molecular weights epsilon = MW_wv / MW_da (Oleson Table 1.4) — upstream `@constants` ε_ratio; appears in the denominator of the vapor-pressure inversion (Eq. 1). The IEEE-754 double-precision quotient of MW_wv / MW_da (matches Julia bit-for-bit; commonly rounded to 0.622 in textbook references)"
},
"one_minus_epsilon": {
"type": "parameter",
"units": "1",
"default": 0.37802941379548427,
"description": "Complement 1 - epsilon = 1 - MW_wv / MW_da (Oleson Table 1.4) — upstream `@constants` one_minus_ε; appears as the coefficient of q_atm in the vapor-pressure denominator (Eq. 1) and as the coefficient of e_atm in the air-density numerator (Eq. 2). The IEEE-754 double-precision 1.0 - epsilon_ratio (commonly rounded to 0.378)"
},
"z_prime_atm": {
"type": "unknown",
"units": "m",
"default": 30.0,
"description": "Atmospheric reference height from the driving atmospheric model (Oleson Table 1.1) — z'_atm, the height above the zero datum at which the atmospheric forcing variables are reported. Combined with z_0 and z_d in Eq. 3 to produce the effective z_atm used by the urban-canopy flux computations"
},
"u_atm": {
"type": "parameter",
"units": "m/s",
"default": 0.0,
"description": "Zonal wind at the atmospheric reference height (Oleson Table 1.1) — passthrough atmospheric forcing input consumed by downstream urban-canopy momentum-flux components; declared by the upstream interface component but not used in the three diagnostic equations of CLMUAtmosphere itself"
},
"v_atm": {
"type": "parameter",
"units": "m/s",
"default": 0.0,
"description": "Meridional wind at the atmospheric reference height (Oleson Table 1.1) — passthrough atmospheric forcing input consumed by downstream urban-canopy momentum-flux components; declared by the upstream interface component but not used in the three diagnostic equations of CLMUAtmosphere itself"
},
"theta_atm": {
"type": "parameter",
"units": "K",
"default": 293.15,
"description": "Atmospheric potential temperature at the reference height (Oleson Table 1.1) — upstream `@parameters` θ_atm; passthrough atmospheric forcing input consumed by downstream urban-canopy sensible-heat-flux components; declared by the upstream interface component but not used in the three diagnostic equations of CLMUAtmosphere itself"
},
"q_atm": {
"type": "unknown",
"units": "kg/kg",
"default": 0.01,
"description": "Specific humidity at the atmospheric reference height (Oleson Table 1.1) — input to the vapor-pressure inversion (Eq. 1) and indirectly the air-density correction (Eq. 2). Mass of water vapor per mass of moist air; typical mid-latitude values 0.001-0.02 kg/kg"
},
"P_atm": {
"type": "unknown",
"units": "Pa",
"default": 101325.0,
"description": "Atmospheric pressure at the reference height (Oleson Table 1.1) — total pressure, input to both Eq. 1 (numerator of vapor-pressure inversion) and Eq. 2 (numerator of ideal-gas law). Default is the standard sea-level atmosphere (101325 Pa)"
},
"T_atm": {
"type": "unknown",
"units": "K",
"default": 293.15,
"description": "Atmospheric temperature at the reference height (Oleson Table 1.1) — input to the ideal-gas air-density equation (Eq. 2). Default is the standard sea-level temperature (293.15 K = 20 degC)"
},
"L_atm_down": {
"type": "parameter",
"units": "W/m^2",
"default": 0.0,
"description": "Incident downward longwave radiation at the reference height (Oleson Table 1.1) — passthrough atmospheric forcing input consumed by downstream urban-canopy longwave-flux components; declared by the upstream interface component but not used in the three diagnostic equations of CLMUAtmosphere itself"
},
"q_rain": {
"type": "parameter",
"units": "kg/(m^2*s)",
"default": 0.0,
"description": "Liquid precipitation rate (Oleson Table 1.1) — passthrough atmospheric forcing input consumed by downstream urban-canopy hydrology components; declared by the upstream interface component but not used in the three diagnostic equations of CLMUAtmosphere itself"
},
"q_sno": {
"type": "parameter",
"units": "kg/(m^2*s)",
"default": 0.0,
"description": "Solid precipitation rate (Oleson Table 1.1) — passthrough atmospheric forcing input consumed by downstream urban-canopy snow components; declared by the upstream interface component but not used in the three diagnostic equations of CLMUAtmosphere itself"
},
"S_atm_dir_vis": {
"type": "parameter",
"units": "W/m^2",
"default": 0.0,
"description": "Incident direct-beam visible solar radiation (Oleson Table 1.1) — passthrough atmospheric forcing input consumed by downstream urban-canopy shortwave-radiation components; declared by the upstream interface component but not used in the three diagnostic equations of CLMUAtmosphere itself"
},
"S_atm_dir_nir": {
"type": "parameter",
"units": "W/m^2",
"default": 0.0,
"description": "Incident direct-beam near-infrared solar radiation (Oleson Table 1.1) — passthrough atmospheric forcing input consumed by downstream urban-canopy shortwave-radiation components; declared by the upstream interface component but not used in the three diagnostic equations of CLMUAtmosphere itself"
},
"S_atm_dif_vis": {
"type": "parameter",
"units": "W/m^2",
"default": 0.0,
"description": "Incident diffuse visible solar radiation (Oleson Table 1.1) — passthrough atmospheric forcing input consumed by downstream urban-canopy shortwave-radiation components; declared by the upstream interface component but not used in the three diagnostic equations of CLMUAtmosphere itself"
},
"S_atm_dif_nir": {
"type": "parameter",
"units": "W/m^2",
"default": 0.0,
"description": "Incident diffuse near-infrared solar radiation (Oleson Table 1.1) — passthrough atmospheric forcing input consumed by downstream urban-canopy shortwave-radiation components; declared by the upstream interface component but not used in the three diagnostic equations of CLMUAtmosphere itself"
},
"z_0": {
"type": "unknown",
"units": "m",
"default": 1.0,
"description": "Roughness length (Oleson Table 1.3, Footnote 1 p.16) — characteristic length scale of the surface drag for the log-law wind profile. Typical urban values 0.5-3 m. Input to Eq. 3 (effective reference height)"
},
"z_d": {
"type": "unknown",
"units": "m",
"default": 5.0,
"description": "Displacement height (Oleson Table 1.3, Footnote 1 p.16) — vertical offset of the log-law wind profile, representing the effective height of the canopy bulk drag center. Typical urban values 1-15 m (a fraction of building height H). Input to Eq. 3 (effective reference height)"
},
"e_atm": {
"type": "unknown",
"units": "Pa",
"description": "Atmospheric vapor pressure (Oleson Ch. 1 p.17, Eq. 1): e_atm = q_atm * P_atm / (epsilon + (1-epsilon) * q_atm). Bolton-style inversion of specific humidity to vapor pressure for the moist-air state used by downstream flux components. At q_atm = 0 gives e_atm = 0; bounded above by P_atm at q_atm = 1"
},
"rho_atm": {
"type": "unknown",
"units": "kg/m^3",
"description": "Atmospheric air density (Oleson Ch. 1 p.17, Eq. 2): rho_atm = (P_atm - (1-epsilon) * e_atm) / (R_da * T_atm). Ideal-gas density of moist air, with the (1-epsilon)*e_atm correction subtracted from P_atm to give the dry-air partial pressure (which then divides by R_da*T_atm). The humidity correction makes moist air slightly less dense than dry air at the same P and T"
},
"z_atm": {
"type": "unknown",
"units": "m",
"description": "Effective atmospheric reference height for flux computations (Oleson Ch. 1 Footnote 1 p.16, Eq. 3): z_atm = z_prime_atm + z_0 + z_d. Linear sum of the model-reported height and the surface drag-profile parameters; used by downstream urban-canopy momentum and turbulent-flux subcomponents as the height at which the atmospheric forcings are evaluated"
}
},
"equations": [
{
"lhs": "e_atm",
"rhs": {
"op": "/",
"args": [
{
"op": "*",
"args": [
"q_atm",
"P_atm"
]
},
{
"op": "+",
"args": [
"epsilon_ratio",
{
"op": "*",
"args": [
"one_minus_epsilon",
"q_atm"
]
}
]
}
]
}
},
{
"lhs": "rho_atm",
"rhs": {
"op": "/",
"args": [
{
"op": "-",
"args": [
"P_atm",
{
"op": "*",
"args": [
"one_minus_epsilon",
"e_atm"
]
}
]
},
{
"op": "*",
"args": [
"R_da",
"T_atm"
]
}
]
}
},
{
"lhs": "z_atm",
"rhs": {
"op": "+",
"args": [
{
"op": "+",
"args": [
"z_prime_atm",
"z_0"
]
},
"z_d"
]
}
}
]
},
"rad": {
"variables": {
"σ_SB": {
"type": "parameter",
"units": "W/(m^2*K^4)",
"default": 5.67e-08,
"description": "Stefan-Boltzmann constant (Oleson Table 1.4) — upstream `@constants` σ_SB; the coefficient of T^4 in the Stefan-Boltzmann law for upward longwave emission used in Eqs. 2.102, 2.111-2.113"
},
"π_val": {
"type": "parameter",
"units": "1",
"default": 3.141592653589793,
"description": "Pi (dimensionless) — upstream `@constants` π_val = Float64(π); appears in the direct-beam canyon-orientation factors of Eqs. 2.16-2.17"
},
"one_rad": {
"type": "parameter",
"units": "rad",
"default": 1.0,
"description": "Unit-angle reference (1 rad) — upstream `@constants` one_rad; used in `μ_zen / one_rad` to make the argument of `tan` dimensionless and in `asin(...) * one_rad` to restore rad dimension on θ_0 (Eq. 2.11). Value is exactly 1.0 by construction; numerically a no-op."
},
"one_wm2": {
"type": "parameter",
"units": "W/m^2",
"default": 1.0,
"description": "Unit radiative flux (1 W/m²) — upstream `@constants` one_wm2; declared by the upstream component but unused in the equation block (kept here for 1:1 parameter-count fidelity with upstream `length(parameters(sys)) == 31`). The unit-balancing role of one_wm2 is taken by `zero_wm2` in the canyon-albedo guard."
},
"zero_wm2": {
"type": "parameter",
"units": "W/m^2",
"default": 0.0,
"description": "Zero radiative flux (0 W/m²) — upstream `@constants` zero_wm2; used as the comparison RHS in the canyon-albedo guard `ifelse(incident > zero_wm2, refl/incident, 0.0)` to keep the `>` comparison unit-consistent with the W/m² LHS"
},
"H_W": {
"type": "unknown",
"units": "1",
"default": 1.0,
"description": "Canyon height-to-width ratio H/W (dimensionless) — controls all view factor geometry (Eqs. 2.22-2.28); typical urban values 0.5-3, but the implementation is valid for 0 (flat) to large (deep canyon)"
},
"W_roof": {
"type": "unknown",
"units": "1",
"default": 0.25,
"description": "Roof fraction of urban surface (dimensionless) — controls the area-weighted combination of roof and canyon contributions to total net radiation in Eqs. 2.95 and 2.175"
},
"S_atm_dir_vis": {
"type": "unknown",
"units": "W/m^2",
"default": 200.0,
"description": "Incident direct beam visible solar radiation from the atmosphere (upstream `@parameters` S_atm_dir_vis)"
},
"S_atm_dir_nir": {
"type": "unknown",
"units": "W/m^2",
"default": 150.0,
"description": "Incident direct beam NIR solar radiation from the atmosphere"
},
"S_atm_dif_vis": {
"type": "unknown",
"units": "W/m^2",
"default": 80.0,
"description": "Incident diffuse visible solar radiation from the atmosphere"
},
"S_atm_dif_nir": {
"type": "unknown",
"units": "W/m^2",
"default": 60.0,
"description": "Incident diffuse NIR solar radiation from the atmosphere"
},
"L_atm_down": {
"type": "unknown",
"units": "W/m^2",
"default": 350.0,
"description": "Incident longwave radiation from the atmosphere (downwelling)"
},
"μ_zen": {
"type": "unknown",
"units": "rad",
"default": 0.5236,
"description": "Solar zenith angle (rad) — appears in `tan(μ_zen)` in the direct-beam factor of Eq. 2.16-2.17. Default 0.5236 rad ≈ 30 degrees."
},
"α_roof_dir_vis": {
"type": "unknown",
"units": "1",
"default": 0.2,
"description": "Roof albedo, direct beam, visible (dimensionless) — surface optical property; appears in Eq. 2.34-2.35 for absorbed solar by the roof"
},
"α_roof_dir_nir": {
"type": "unknown",
"units": "1",
"default": 0.2,
"description": "Roof albedo, direct beam, NIR (dimensionless)"
},
"α_roof_dif_vis": {
"type": "unknown",
"units": "1",
"default": 0.2,
"description": "Roof albedo, diffuse, visible (dimensionless)"
},
"α_roof_dif_nir": {
"type": "unknown",
"units": "1",
"default": 0.2,
"description": "Roof albedo, diffuse, NIR (dimensionless)"
},
"α_road_dir_vis": {
"type": "unknown",
"units": "1",
"default": 0.08,
"description": "Effective road albedo, direct beam, visible (dimensionless) — weighted average over pervious/impervious road fraction, computed upstream"
},
"α_road_dir_nir": {
"type": "unknown",
"units": "1",
"default": 0.08,
"description": "Effective road albedo, direct beam, NIR (dimensionless)"
},
"α_road_dif_vis": {
"type": "unknown",
"units": "1",
"default": 0.08,
"description": "Effective road albedo, diffuse, visible (dimensionless)"
},
"α_road_dif_nir": {
"type": "unknown",
"units": "1",
"default": 0.08,
"description": "Effective road albedo, diffuse, NIR (dimensionless)"
},
"α_wall_dir_vis": {
"type": "unknown",
"units": "1",
"default": 0.25,
"description": "Wall albedo, direct beam, visible (dimensionless)"
},
"α_wall_dir_nir": {
"type": "unknown",
"units": "1",
"default": 0.25,
"description": "Wall albedo, direct beam, NIR (dimensionless)"
},
"α_wall_dif_vis": {
"type": "unknown",
"units": "1",
"default": 0.25,
"description": "Wall albedo, diffuse, visible (dimensionless)"
},
"α_wall_dif_nir": {
"type": "unknown",
"units": "1",
"default": 0.25,
"description": "Wall albedo, diffuse, NIR (dimensionless)"
},
"ε_roof": {
"type": "unknown",
"units": "1",
"default": 0.9,
"description": "Roof longwave emissivity (dimensionless) — Stefan-Boltzmann pre-factor in upward LW emission (Eq. 2.102); typical urban roof values 0.85-0.95"
},
"ε_road": {
"type": "unknown",
"units": "1",
"default": 0.95,
"description": "Effective road longwave emissivity (dimensionless) — weighted average over pervious/impervious road fraction"
},
"ε_wall": {
"type": "unknown",
"units": "1",
"default": 0.85,
"description": "Wall longwave emissivity (dimensionless)"
},
"T_roof": {
"type": "unknown",
"units": "K",
"default": 305.0,
"description": "Roof surface temperature — appears as T^4 in the Stefan-Boltzmann upward emission (Eq. 2.102)"
},
"T_road": {
"type": "unknown",
"units": "K",
"default": 310.0,
"description": "Road surface temperature — appears as T^4 in the road LW emission (Eq. 2.111)"
},
"T_sunwall": {
"type": "unknown",
"units": "K",
"default": 315.0,
"description": "Sunlit wall surface temperature — appears as T^4 in the sunlit-wall LW emission (Eq. 2.112)"
},
"T_shdwall": {
"type": "unknown",
"units": "K",
"default": 300.0,
"description": "Shaded wall surface temperature — appears as T^4 in the shaded-wall LW emission (Eq. 2.113)"
},
"Ψ_wall_sky": {
"type": "unknown",
"units": "1",
"description": "View factor: wall to sky (Oleson Eq. 2.24) — fraction of radiation leaving a wall that reaches the sky"
},
"Ψ_wall_road": {
"type": "unknown",
"units": "1",
"description": "View factor: wall to road (Oleson Eq. 2.26) — equal to Ψ_wall_sky by reciprocity"
},
"Ψ_wall_wall": {
"type": "unknown",
"units": "1",
"description": "View factor: wall to opposite wall (Oleson Eq. 2.28) — closure of the row-sum 1 = Ψ_wall_sky + Ψ_wall_road + Ψ_wall_wall"
},
"Ψ_road_sky": {
"type": "unknown",
"units": "1",
"description": "View factor: road to sky (Oleson Eq. 2.25) — fraction of radiation leaving the road that reaches the sky; decreases with H/W"
},
"Ψ_road_wall": {
"type": "unknown",
"units": "1",
"description": "View factor: road to wall (Oleson Eq. 2.27) — fraction of radiation leaving the road that reaches one wall; two walls so 2*Ψ_road_wall = 1 - Ψ_road_sky"
},
"Ψ_sky_road": {
"type": "unknown",
"units": "1",
"description": "View factor: sky to road (Oleson Eq. 2.25) — equal to Ψ_road_sky by reciprocity"
},
"Ψ_sky_wall": {
"type": "unknown",
"units": "1",
"description": "View factor: sky to wall, per unit wall area (Oleson Eq. 2.24) — equal to Ψ_wall_sky by reciprocity"
},
"θ_0": {
"type": "unknown",
"units": "rad",
"description": "Critical canyon orientation angle (Oleson Eq. 2.11) — the canyon-orientation azimuth threshold separating sunlit-wall from shadowed-wall geometries integrated to derive the canyon-averaged direct-beam radiation factors"
},
"S_sunwall_factor": {
"type": "unknown",
"units": "1",
"description": "Sunlit wall direct beam factor (Oleson Eq. 2.16) — dimensionless fraction of atmospheric direct-beam radiation that lands on the sunlit wall per unit wall area, integrated over canyon orientation"
},
"S_road_factor": {
"type": "unknown",
"units": "1",
"description": "Road direct beam factor (Oleson Eq. 2.17) — dimensionless fraction of atmospheric direct-beam radiation that lands on the road per unit ground area; conservation Eq. 2.18 requires S_road_factor + H/W * S_sunwall_factor = 1"
},
"S_road_dir_vis": {
"type": "unknown",
"units": "W/m^2",
"description": "Direct beam VIS incident on road (Oleson Eq. 2.17): S_road_factor * S_atm_dir_vis"
},
"S_road_dir_nir": {
"type": "unknown",
"units": "W/m^2",
"description": "Direct beam NIR incident on road: S_road_factor * S_atm_dir_nir"
},
"S_sunwall_dir_vis": {
"type": "unknown",
"units": "W/m^2",
"description": "Direct beam VIS incident on sunlit wall (Oleson Eq. 2.16): S_sunwall_factor * S_atm_dir_vis"
},
"S_sunwall_dir_nir": {
"type": "unknown",
"units": "W/m^2",
"description": "Direct beam NIR incident on sunlit wall: S_sunwall_factor * S_atm_dir_nir"
},
"S_road_dif_vis": {
"type": "unknown",
"units": "W/m^2",
"description": "Diffuse VIS incident on road (Oleson Eq. 2.30): S_atm_dif_vis * Ψ_sky_road"
},
"S_road_dif_nir": {
"type": "unknown",
"units": "W/m^2",
"description": "Diffuse NIR incident on road: S_atm_dif_nir * Ψ_sky_road"
},
"S_wall_dif_vis": {
"type": "unknown",
"units": "W/m^2",
"description": "Diffuse VIS incident on each wall (Oleson Eqs. 2.31-2.32): S_atm_dif_vis * Ψ_sky_wall — same on sunlit and shaded walls for diffuse radiation"
},
"S_wall_dif_nir": {
"type": "unknown",
"units": "W/m^2",
"description": "Diffuse NIR incident on each wall: S_atm_dif_nir * Ψ_sky_wall"
},
"T_rw": {
"type": "unknown",
"units": "1",
"description": "Transport matrix element: wall to road (Oleson Section 2.5, p. 42-43) = H/W * Ψ_wall_road — accounts for the wall-to-road area ratio in the multi-reflection transport matrix T"
},
"T_wr": {
"type": "unknown",
"units": "1",
"description": "Transport matrix element: road to wall = Ψ_road_wall / (H/W) — accounts for the road-to-wall area ratio (per unit wall area)"
},
"T_ww": {
"type": "unknown",
"units": "1",
"description": "Transport matrix element: wall to opposite wall = Ψ_wall_wall — the off-diagonal that couples the sunlit and shaded walls in the canyon-reflection geometric series"
},
"det_dir_vis": {
"type": "unknown",
"units": "1",
"description": "Determinant of (I - T*A) for direct VIS waveband: (1 - d²) - 2bc(1 + d), where b = a_w*T_rw, c = a_r*T_wr, d = a_w*T_ww — denominator of the closed-form multi-reflection solution"
},
"det_dir_nir": {
"type": "unknown",
"units": "1",
"description": "Determinant of (I - T*A) for direct NIR waveband"
},
"det_dif_vis": {
"type": "unknown",
"units": "1",
"description": "Determinant of (I - T*A) for diffuse VIS waveband"
},
"det_dif_nir": {
"type": "unknown",
"units": "1",
"description": "Determinant of (I - T*A) for diffuse NIR waveband"
},
"S_net_roof": {
"type": "unknown",
"units": "W/m^2",
"description": "Net absorbed solar by roof (Oleson Eqs. 2.34-2.35): Σ S_atm_*_*(1 - α_roof_*_*) summed over all four wavebands"
},
"S_net_road_dir_vis": {
"type": "unknown",
"units": "W/m^2",
"description": "Absorbed solar by road, direct VIS waveband: (1 - α_road_dir_vis) * Q_road_dir_vis where Q_road_dir_vis is the per-waveband closed-form M⁻¹*S_0 multi-reflection result"
},
"S_net_road_dir_nir": {
"type": "unknown",
"units": "W/m^2",
"description": "Absorbed solar by road, direct NIR waveband"
},
"S_net_road_dif_vis": {
"type": "unknown",
"units": "W/m^2",
"description": "Absorbed solar by road, diffuse VIS waveband"
},
"S_net_road_dif_nir": {
"type": "unknown",
"units": "W/m^2",
"description": "Absorbed solar by road, diffuse NIR waveband"
},
"S_net_sunwall_dir_vis": {
"type": "unknown",
"units": "W/m^2",
"description": "Absorbed solar by sunlit wall, direct VIS waveband (per unit wall area)"
},
"S_net_sunwall_dir_nir": {
"type": "unknown",
"units": "W/m^2",
"description": "Absorbed solar by sunlit wall, direct NIR waveband"
},
"S_net_sunwall_dif_vis": {
"type": "unknown",
"units": "W/m^2",
"description": "Absorbed solar by sunlit wall, diffuse VIS waveband"
},
"S_net_sunwall_dif_nir": {
"type": "unknown",
"units": "W/m^2",
"description": "Absorbed solar by sunlit wall, diffuse NIR waveband"
},
"S_net_shdwall_dir_vis": {
"type": "unknown",
"units": "W/m^2",
"description": "Absorbed solar by shaded wall, direct VIS waveband — non-zero only via multi-reflection from road and sunlit wall (no direct beam reaches the shaded wall)"
},
"S_net_shdwall_dir_nir": {
"type": "unknown",
"units": "W/m^2",
"description": "Absorbed solar by shaded wall, direct NIR waveband"
},
"S_net_shdwall_dif_vis": {
"type": "unknown",
"units": "W/m^2",
"description": "Absorbed solar by shaded wall, diffuse VIS waveband — equal to sunwall diffuse VIS by symmetry"
},
"S_net_shdwall_dif_nir": {
"type": "unknown",
"units": "W/m^2",
"description": "Absorbed solar by shaded wall, diffuse NIR waveband"
},
"S_net_road": {
"type": "unknown",
"units": "W/m^2",
"description": "Total net absorbed solar by road: sum of S_net_road_* over the four wavebands"
},
"S_net_sunwall": {
"type": "unknown",
"units": "W/m^2",
"description": "Total net absorbed solar by sunlit wall per unit wall area: sum of S_net_sunwall_* over the four wavebands"
},
"S_net_shdwall": {
"type": "unknown",
"units": "W/m^2",
"description": "Total net absorbed solar by shaded wall per unit wall area: sum of S_net_shdwall_* over the four wavebands"
},
"S_net_uc": {
"type": "unknown",
"units": "W/m^2",
"description": "Net absorbed solar by the urban canyon per unit ground area: S_net_road + (S_net_sunwall + S_net_shdwall) * H/W"
},
"S_net_total": {
"type": "unknown",
"units": "W/m^2",
"description": "Total net absorbed solar (Oleson Eq. 2.95): W_roof * S_net_roof + (1 - W_roof) * S_net_uc — area-weighted total over roof and canyon"
},
"S_refl_sky_dir_vis": {
"type": "unknown",
"units": "W/m^2",
"description": "Solar reflected back to sky from the canyon, direct VIS waveband — energy-balance closure: incident_canyon - absorbed_canyon (per unit ground area)"
},
"S_refl_sky_dir_nir": {
"type": "unknown",
"units": "W/m^2",
"description": "Solar reflected back to sky from the canyon, direct NIR waveband"
},
"S_refl_sky_dif_vis": {
"type": "unknown",
"units": "W/m^2",
"description": "Solar reflected back to sky from the canyon, diffuse VIS waveband"
},
"S_refl_sky_dif_nir": {
"type": "unknown",
"units": "W/m^2",
"description": "Solar reflected back to sky from the canyon, diffuse NIR waveband"
},
"α_uc_dir_vis": {
"type": "unknown",
"units": "1",
"description": "Canyon direct beam albedo, VIS (Oleson Eq. 2.93): S_refl_sky_dir_vis / incident_canyon — the ratio of reflected to incident summed over the canyon (excluding the roof). Guarded against divide-by-zero when there is no incident radiation in this waveband."
},
"α_uc_dir_nir": {
"type": "unknown",
"units": "1",
"description": "Canyon direct beam albedo, NIR"
},
"α_uc_dif_vis": {
"type": "unknown",
"units": "1",
"description": "Canyon diffuse albedo, VIS (Oleson Eq. 2.94)"
},
"α_uc_dif_nir": {
"type": "unknown",
"units": "1",
"description": "Canyon diffuse albedo, NIR"
},
"L_up_roof": {
"type": "unknown",
"units": "W/m^2",
"description": "Upward longwave radiation from roof (Oleson Eq. 2.102): ε_roof * σ_SB * T_roof^4 + (1 - ε_roof) * L_atm_down — Stefan-Boltzmann emission plus reflection of the downwelling atmospheric LW"
},
"L_net_roof": {
"type": "unknown",
"units": "W/m^2",
"description": "Net longwave for roof (Oleson Eq. 2.101): L_up_roof - L_atm_down — positive when the roof is losing more LW than it absorbs"
},
"L_emit_road": {
"type": "unknown",
"units": "W/m^2",
"description": "Emitted longwave from road (Oleson Eq. 2.111): ε_road * σ_SB * T_road^4 — Stefan-Boltzmann emission only, before multi-reflection"
},
"L_emit_sunwall": {
"type": "unknown",
"units": "W/m^2",
"description": "Emitted longwave from sunlit wall (Oleson Eq. 2.112): ε_wall * σ_SB * T_sunwall^4"
},
"L_emit_shdwall": {
"type": "unknown",
"units": "W/m^2",
"description": "Emitted longwave from shaded wall (Oleson Eq. 2.113): ε_wall * σ_SB * T_shdwall^4"
},
"det_lw": {
"type": "unknown",
"units": "1",
"description": "Determinant of (I - T*A) for longwave: (1 - d_lw²) - 2*b_lw*c_lw*(1 + d_lw), where b_lw = (1-ε_wall)*T_rw, c_lw = (1-ε_road)*T_wr, d_lw = (1-ε_wall)*T_ww — structurally identical to the solar determinant but with reflectivity (1 - ε) in place of albedo α"
},
"L_net_road": {
"type": "unknown",
"units": "W/m^2",
"description": "Net longwave for road: L_emit_road - ε_road * Q_road_lw, where Q_road_lw is the canyon-trapped incoming LW from atmosphere and wall emission via the multi-reflection M⁻¹*S_0_lw solution. Positive when the road loses more LW than it absorbs."
},
"L_net_sunwall": {
"type": "unknown",
"units": "W/m^2",
"description": "Net longwave for sunlit wall per unit wall area: L_emit_sunwall - ε_wall * Q_sw_lw"
},
"L_net_shdwall": {
"type": "unknown",
"units": "W/m^2",
"description": "Net longwave for shaded wall per unit wall area: L_emit_shdwall - ε_wall * Q_sh_lw"
},
"L_net_uc": {
"type": "unknown",
"units": "W/m^2",
"description": "Net longwave for urban canyon per unit ground area (Oleson Eq. 2.172): L_net_road + (L_net_sunwall + L_net_shdwall) * H/W"
},
"L_net_total": {
"type": "unknown",
"units": "W/m^2",
"description": "Total net longwave (Oleson Eq. 2.175): W_roof * L_net_roof + (1 - W_roof) * L_net_uc — area-weighted total over roof and canyon"
}
},
"equations": [
{
"lhs": "Ψ_sky_wall",
"rhs": {
"op": "/",
"args": [
{
"op": "-",
"args": [
{
"op": "+",
"args": [
"H_W",
1.0
]
},
{
"op": "sqrt",
"args": [
{
"op": "+",
"args": [
1.0,
{
"op": "^",
"args": [
"H_W",
2.0
]
}
]
}
]
}
]
},
{
"op": "*",
"args": [
2.0,
"H_W"
]
}
]
}
},
{
"lhs": "Ψ_wall_sky",
"rhs": "Ψ_sky_wall"
},
{
"lhs": "Ψ_road_sky",
"rhs": {
"op": "-",
"args": [
{
"op": "sqrt",
"args": [
{
"op": "+",
"args": [
1.0,
{
"op": "^",
"args": [
"H_W",
2.0
]
}
]
}
]
},
"H_W"
]
}
},
{
"lhs": "Ψ_sky_road",
"rhs": "Ψ_road_sky"
},
{
"lhs": "Ψ_wall_road",
"rhs": "Ψ_wall_sky"
},
{
"lhs": "Ψ_road_wall",
"rhs": {
"op": "/",
"args": [
{
"op": "-",
"args": [
1.0,
"Ψ_road_sky"
]
},
2.0
]
}
},
{
"lhs": "Ψ_wall_wall",
"rhs": {
"op": "-",
"args": [
{
"op": "-",
"args": [
1.0,
"Ψ_wall_sky"
]
},
"Ψ_wall_road"
]
}
},
{
"lhs": "T_rw",
"rhs": {
"op": "*",
"args": [
"H_W",
"Ψ_wall_road"
]
}
},
{
"lhs": "T_wr",
"rhs": {
"op": "/",
"args": [
"Ψ_road_wall",
"H_W"
]
}
},
{
"lhs": "T_ww",
"rhs": "Ψ_wall_wall"
},
{
"lhs": "θ_0",
"rhs": {
"op": "*",
"args": [
{
"op": "asin",
"args": [
{
"op": "min",
"args": [
{
"op": "/",
"args": [
1.0,
{
"op": "*",
"args": [
"H_W",
{
"op": "tan",
"args": [
{
"op": "/",
"args": [
"μ_zen",
"one_rad"
]
}
]
}
]
}
]
},
1.0
]
}
]
},
"one_rad"
]
}
},
{
"lhs": "S_sunwall_factor",
"rhs": {
"op": "*",
"args": [
2.0,
{
"op": "+",
"args": [
{
"op": "*",
"args": [
{
"op": "/",
"args": [
1.0,
"H_W"
]
},
{
"op": "-",
"args": [
0.5,
{
"op": "/",
"args": [
"θ_0",
{
"op": "*",
"args": [
"π_val",
"one_rad"
]
}
]
}
]
}
]
},
{
"op": "*",
"args": [
{
"op": "*",
"args": [
{
"op": "/",
"args": [
1.0,
"π_val"
]
},
{
"op": "tan",
"args": [
{
"op": "/",
"args": [
"μ_zen",
"one_rad"
]
}
]
}
]
},
{
"op": "-",
"args": [
1.0,
{
"op": "cos",
"args": [
{
"op": "/",
"args": [
"θ_0",
"one_rad"
]
}
]
}
]
}
]
}
]
}
]
}
},
{
"lhs": "S_sunwall_dir_vis",
"rhs": {
"op": "*",
"args": [
"S_sunwall_factor",
"S_atm_dir_vis"
]
}
},
{
"lhs": "S_sunwall_dir_nir",
"rhs": {
"op": "*",
"args": [
"S_sunwall_factor",
"S_atm_dir_nir"
]
}
},
{
"lhs": "S_road_factor",
"rhs": {
"op": "-",
"args": [
{
"op": "*",
"args": [
2.0,
{
"op": "/",
"args": [
"θ_0",
{
"op": "*",
"args": [
"π_val",
"one_rad"
]
}
]
}
]
},
{
"op": "*",
"args": [
{
"op": "*",
"args": [
{
"op": "*",
"args": [
{
"op": "/",
"args": [
2.0,
"π_val"
]
},
"H_W"
]
},
{
"op": "tan",
"args": [
{
"op": "/",
"args": [
"μ_zen",
"one_rad"
]
}
]
}
]
},
{
"op": "-",
"args": [
1.0,
{
"op": "cos",
"args": [
{
"op": "/",
"args": [
"θ_0",
"one_rad"
]
}
]
}
]
}
]
}
]
}
},
{
"lhs": "S_road_dir_vis",
"rhs": {
"op": "*",
"args": [
"S_road_factor",
"S_atm_dir_vis"
]
}
},
{
"lhs": "S_road_dir_nir",
"rhs": {
"op": "*",
"args": [
"S_road_factor",
"S_atm_dir_nir"
]
}
},
{
"lhs": "S_road_dif_vis",
"rhs": {
"op": "*",
"args": [
"S_atm_dif_vis",
"Ψ_sky_road"
]
}
},
{
"lhs": "S_road_dif_nir",
"rhs": {
"op": "*",
"args": [
"S_atm_dif_nir",
"Ψ_sky_road"
]
}
},
{
"lhs": "S_wall_dif_vis",
"rhs": {
"op": "*",
"args": [
"S_atm_dif_vis",
"Ψ_sky_wall"
]
}
},
{
"lhs": "S_wall_dif_nir",
"rhs": {
"op": "*",
"args": [
"S_atm_dif_nir",
"Ψ_sky_wall"
]
}
},
{
"lhs": "S_net_roof",
"rhs": {
"op": "+",
"args": [
{
"op": "+",
"args": [
{
"op": "+",
"args": [
{
"op": "*",
"args": [
"S_atm_dir_vis",
{
"op": "-",
"args": [
1.0,
"α_roof_dir_vis"
]
}
]
},
{
"op": "*",
"args": [
"S_atm_dir_nir",
{
"op": "-",
"args": [
1.0,
"α_roof_dir_nir"
]
}
]
}
]
},
{
"op": "*",
"args": [
"S_atm_dif_vis",
{
"op": "-",
"args": [
1.0,
"α_roof_dif_vis"
]
}
]
}
]
},
{
"op": "*",
"args": [
"S_atm_dif_nir",
{
"op": "-",
"args": [
1.0,
"α_roof_dif_nir"
]
}
]
}
]
}
},
{
"lhs": "det_dir_vis",
"rhs": {
"op": "apply_expression_template",
"args": [],
"name": "band_det",
"bindings": {
"a_r": "α_road_dir_vis",
"a_w": "α_wall_dir_vis"
}
}
},
{
"lhs": "S_net_road_dir_vis",
"rhs": {
"op": "apply_expression_template",
"args": [],
"name": "band_net_road",
"bindings": {
"a_r": "α_road_dir_vis",
"a_w": "α_wall_dir_vis",
"S_r": "S_road_dir_vis",
"S_sw": "S_sunwall_dir_vis",
"S_sh": "zero_wm2",
"det_var": "det_dir_vis"
}
}
},
{
"lhs": "S_net_sunwall_dir_vis",
"rhs": {
"op": "apply_expression_template",
"args": [],
"name": "band_net_sw",
"bindings": {
"a_r": "α_road_dir_vis",
"a_w": "α_wall_dir_vis",
"S_r": "S_road_dir_vis",
"S_sw": "S_sunwall_dir_vis",
"S_sh": "zero_wm2",
"det_var": "det_dir_vis"
}
}
},
{
"lhs": "S_net_shdwall_dir_vis",
"rhs": {
"op": "apply_expression_template",
"args": [],
"name": "band_net_sh",
"bindings": {
"a_r": "α_road_dir_vis",
"a_w": "α_wall_dir_vis",
"S_r": "S_road_dir_vis",
"S_sw": "S_sunwall_dir_vis",
"S_sh": "zero_wm2",
"det_var": "det_dir_vis"
}
}
},
{
"lhs": "S_refl_sky_dir_vis",
"rhs": {
"op": "apply_expression_template",
"args": [],
"name": "band_refl_sky",
"bindings": {
"S_r": "S_road_dir_vis",
"S_sw": "S_sunwall_dir_vis",
"S_sh": "zero_wm2",
"net_road": "S_net_road_dir_vis",
"net_sw": "S_net_sunwall_dir_vis",
"net_sh": "S_net_shdwall_dir_vis"
}
}
},
{
"lhs": "det_dir_nir",
"rhs": {
"op": "apply_expression_template",
"args": [],
"name": "band_det",
"bindings": {
"a_r": "α_road_dir_nir",
"a_w": "α_wall_dir_nir"
}
}
},
{
"lhs": "S_net_road_dir_nir",
"rhs": {
"op": "apply_expression_template",
"args": [],
"name": "band_net_road",
"bindings": {
"a_r": "α_road_dir_nir",
"a_w": "α_wall_dir_nir",
"S_r": "S_road_dir_nir",
"S_sw": "S_sunwall_dir_nir",
"S_sh": "zero_wm2",
"det_var": "det_dir_nir"
}
}
},
{
"lhs": "S_net_sunwall_dir_nir",
"rhs": {
"op": "apply_expression_template",
"args": [],
"name": "band_net_sw",
"bindings": {
"a_r": "α_road_dir_nir",
"a_w": "α_wall_dir_nir",
"S_r": "S_road_dir_nir",
"S_sw": "S_sunwall_dir_nir",
"S_sh": "zero_wm2",
"det_var": "det_dir_nir"
}
}
},
{
"lhs": "S_net_shdwall_dir_nir",
"rhs": {
"op": "apply_expression_template",
"args": [],
"name": "band_net_sh",
"bindings": {
"a_r": "α_road_dir_nir",
"a_w": "α_wall_dir_nir",
"S_r": "S_road_dir_nir",
"S_sw": "S_sunwall_dir_nir",
"S_sh": "zero_wm2",
"det_var": "det_dir_nir"
}
}
},
{
"lhs": "S_refl_sky_dir_nir",
"rhs": {
"op": "apply_expression_template",
"args": [],
"name": "band_refl_sky",
"bindings": {
"S_r": "S_road_dir_nir",
"S_sw": "S_sunwall_dir_nir",
"S_sh": "zero_wm2",
"net_road": "S_net_road_dir_nir",
"net_sw": "S_net_sunwall_dir_nir",
"net_sh": "S_net_shdwall_dir_nir"
}
}
},
{
"lhs": "det_dif_vis",
"rhs": {
"op": "apply_expression_template",
"args": [],
"name": "band_det",
"bindings": {
"a_r": "α_road_dif_vis",
"a_w": "α_wall_dif_vis"
}
}
},
{
"lhs": "S_net_road_dif_vis",
"rhs": {
"op": "apply_expression_template",
"args": [],
"name": "band_net_road",
"bindings": {
"a_r": "α_road_dif_vis",
"a_w": "α_wall_dif_vis",
"S_r": "S_road_dif_vis",
"S_sw": "S_wall_dif_vis",
"S_sh": "S_wall_dif_vis",
"det_var": "det_dif_vis"
}
}
},
{
"lhs": "S_net_sunwall_dif_vis",
"rhs": {
"op": "apply_expression_template",
"args": [],
"name": "band_net_sw",
"bindings": {
"a_r": "α_road_dif_vis",
"a_w": "α_wall_dif_vis",
"S_r": "S_road_dif_vis",
"S_sw": "S_wall_dif_vis",
"S_sh": "S_wall_dif_vis",
"det_var": "det_dif_vis"
}
}
},
{
"lhs": "S_net_shdwall_dif_vis",
"rhs": {
"op": "apply_expression_template",
"args": [],
"name": "band_net_sh",
"bindings": {
"a_r": "α_road_dif_vis",
"a_w": "α_wall_dif_vis",
"S_r": "S_road_dif_vis",
"S_sw": "S_wall_dif_vis",
"S_sh": "S_wall_dif_vis",
"det_var": "det_dif_vis"
}
}
},
{
"lhs": "S_refl_sky_dif_vis",
"rhs": {
"op": "apply_expression_template",
"args": [],
"name": "band_refl_sky",
"bindings": {
"S_r": "S_road_dif_vis",
"S_sw": "S_wall_dif_vis",
"S_sh": "S_wall_dif_vis",
"net_road": "S_net_road_dif_vis",
"net_sw": "S_net_sunwall_dif_vis",
"net_sh": "S_net_shdwall_dif_vis"
}
}
},
{
"lhs": "det_dif_nir",
"rhs": {
"op": "apply_expression_template",
"args": [],
"name": "band_det",
"bindings": {
"a_r": "α_road_dif_nir",
"a_w": "α_wall_dif_nir"
}
}
},
{
"lhs": "S_net_road_dif_nir",
"rhs": {
"op": "apply_expression_template",
"args": [],
"name": "band_net_road",
"bindings": {
"a_r": "α_road_dif_nir",
"a_w": "α_wall_dif_nir",
"S_r": "S_road_dif_nir",
"S_sw": "S_wall_dif_nir",
"S_sh": "S_wall_dif_nir",
"det_var": "det_dif_nir"
}
}
},
{
"lhs": "S_net_sunwall_dif_nir",
"rhs": {
"op": "apply_expression_template",
"args": [],
"name": "band_net_sw",
"bindings": {
"a_r": "α_road_dif_nir",
"a_w": "α_wall_dif_nir",
"S_r": "S_road_dif_nir",
"S_sw": "S_wall_dif_nir",
"S_sh": "S_wall_dif_nir",
"det_var": "det_dif_nir"
}
}
},
{
"lhs": "S_net_shdwall_dif_nir",
"rhs": {
"op": "apply_expression_template",
"args": [],
"name": "band_net_sh",
"bindings": {
"a_r": "α_road_dif_nir",
"a_w": "α_wall_dif_nir",
"S_r": "S_road_dif_nir",
"S_sw": "S_wall_dif_nir",
"S_sh": "S_wall_dif_nir",
"det_var": "det_dif_nir"
}
}
},
{
"lhs": "S_refl_sky_dif_nir",
"rhs": {
"op": "apply_expression_template",
"args": [],
"name": "band_refl_sky",
"bindings": {
"S_r": "S_road_dif_nir",
"S_sw": "S_wall_dif_nir",
"S_sh": "S_wall_dif_nir",
"net_road": "S_net_road_dif_nir",
"net_sw": "S_net_sunwall_dif_nir",
"net_sh": "S_net_shdwall_dif_nir"
}
}
},
{
"lhs": "S_net_road",
"rhs": {
"op": "+",
"args": [
{
"op": "+",
"args": [
{
"op": "+",
"args": [
"S_net_road_dir_vis",
"S_net_road_dir_nir"
]
},
"S_net_road_dif_vis"
]
},
"S_net_road_dif_nir"
]
}
},
{
"lhs": "S_net_sunwall",
"rhs": {
"op": "+",
"args": [
{
"op": "+",
"args": [
{
"op": "+",
"args": [
"S_net_sunwall_dir_vis",
"S_net_sunwall_dir_nir"
]
},
"S_net_sunwall_dif_vis"
]
},
"S_net_sunwall_dif_nir"
]
}
},
{
"lhs": "S_net_shdwall",
"rhs": {
"op": "+",
"args": [
{
"op": "+",
"args": [
{
"op": "+",
"args": [
"S_net_shdwall_dir_vis",
"S_net_shdwall_dir_nir"
]
},
"S_net_shdwall_dif_vis"
]
},
"S_net_shdwall_dif_nir"
]
}
},
{
"lhs": "S_net_uc",
"rhs": {
"op": "+",
"args": [
"S_net_road",
{
"op": "*",
"args": [
{
"op": "+",
"args": [
"S_net_sunwall",
"S_net_shdwall"
]
},
"H_W"
]
}
]
}
},
{
"lhs": "α_uc_dir_vis",
"rhs": {
"op": "ifelse",
"args": [
{
"op": ">",
"args": [
{
"op": "+",
"args": [
"S_road_dir_vis",
{
"op": "*",
"args": [
"S_sunwall_dir_vis",
"H_W"
]
}
]
},
"zero_wm2"
]
},
{
"op": "/",
"args": [
"S_refl_sky_dir_vis",
{
"op": "+",
"args": [
"S_road_dir_vis",
{
"op": "*",
"args": [
"S_sunwall_dir_vis",
"H_W"
]
}
]
}
]
},
0.0
]
}
},
{
"lhs": "α_uc_dir_nir",
"rhs": {
"op": "ifelse",
"args": [
{
"op": ">",
"args": [
{
"op": "+",
"args": [
"S_road_dir_nir",
{
"op": "*",
"args": [
"S_sunwall_dir_nir",
"H_W"
]
}
]
},
"zero_wm2"
]
},
{
"op": "/",
"args": [
"S_refl_sky_dir_nir",
{
"op": "+",
"args": [
"S_road_dir_nir",
{
"op": "*",
"args": [
"S_sunwall_dir_nir",
"H_W"
]
}
]
}
]
},
0.0
]
}
},
{
"lhs": "α_uc_dif_vis",
"rhs": {
"op": "ifelse",
"args": [
{
"op": ">",
"args": [
{
"op": "+",
"args": [
"S_road_dif_vis",
{
"op": "*",
"args": [
{
"op": "*",
"args": [
2.0,
"S_wall_dif_vis"
]
},
"H_W"
]
}
]
},
"zero_wm2"
]
},
{
"op": "/",
"args": [
"S_refl_sky_dif_vis",
{
"op": "+",
"args": [
"S_road_dif_vis",
{
"op": "*",
"args": [
{
"op": "*",
"args": [
2.0,
"S_wall_dif_vis"
]
},
"H_W"
]
}
]
}
]
},
0.0
]
}
},
{
"lhs": "α_uc_dif_nir",
"rhs": {
"op": "ifelse",
"args": [
{
"op": ">",
"args": [
{
"op": "+",
"args": [
"S_road_dif_nir",
{
"op": "*",
"args": [
{
"op": "*",
"args": [
2.0,
"S_wall_dif_nir"
]
},
"H_W"
]
}
]
},
"zero_wm2"
]
},
{
"op": "/",
"args": [
"S_refl_sky_dif_nir",
{
"op": "+",
"args": [
"S_road_dif_nir",
{
"op": "*",
"args": [
{
"op": "*",
"args": [
2.0,
"S_wall_dif_nir"
]
},
"H_W"
]
}
]
}
]
},
0.0
]
}
},
{
"lhs": "S_net_total",
"rhs": {
"op": "+",
"args": [
{
"op": "*",
"args": [
"W_roof",
"S_net_roof"
]
},
{
"op": "*",
"args": [
{
"op": "-",
"args": [
1.0,
"W_roof"
]
},
"S_net_uc"
]
}
]
}
},
{
"lhs": "L_up_roof",
"rhs": {
"op": "+",
"args": [
{
"op": "*",
"args": [
{
"op": "*",
"args": [
"ε_roof",
"σ_SB"
]
},
{
"op": "^",
"args": [
"T_roof",
4.0
]
}
]
},
{
"op": "*",
"args": [
{
"op": "-",
"args": [
1.0,
"ε_roof"
]
},
"L_atm_down"
]
}
]
}
},
{
"lhs": "L_net_roof",
"rhs": {
"op": "-",
"args": [
"L_up_roof",
"L_atm_down"
]
}
},
{
"lhs": "L_emit_road",
"rhs": {
"op": "*",
"args": [
{
"op": "*",
"args": [
"ε_road",
"σ_SB"
]
},
{
"op": "^",
"args": [
"T_road",
4.0
]
}
]
}
},
{
"lhs": "L_emit_sunwall",
"rhs": {
"op": "*",
"args": [
{
"op": "*",
"args": [
"ε_wall",
"σ_SB"
]
},
{
"op": "^",
"args": [
"T_sunwall",
4.0
]
}
]
}
},
{
"lhs": "L_emit_shdwall",
"rhs": {
"op": "*",
"args": [
{
"op": "*",
"args": [
"ε_wall",
"σ_SB"
]
},
{
"op": "^",
"args": [
"T_shdwall",
4.0
]
}
]
}
},
{
"lhs": "det_lw",
"rhs": {
"op": "-",
"args": [
{
"op": "-",
"args": [
1.0,
{
"op": "^",
"args": [
{
"op": "*",
"args": [
{
"op": "-",
"args": [
1.0,
"ε_wall"
]
},
"T_ww"
]
},
2.0
]
}
]
},
{
"op": "*",
"args": [
{
"op": "*",
"args": [
{
"op": "*",
"args": [
2.0,
{
"op": "*",
"args": [
{
"op": "-",
"args": [
1.0,
"ε_wall"
]
},
"T_rw"
]
}
]
},
{
"op": "*",
"args": [
{
"op": "-",
"args": [
1.0,
"ε_road"
]
},
"T_wr"
]
}
]
},
{
"op": "+",
"args": [
1.0,
{
"op": "*",
"args": [
{
"op": "-",
"args": [
1.0,
"ε_wall"
]
},
"T_ww"
]
}
]
}
]
}
]
}
},
{
"lhs": "L_net_road",
"rhs": {
"op": "-",
"args": [
"L_emit_road",
{
"op": "*",
"args": [
"ε_road",
{
"op": "/",
"args": [
{
"op": "+",
"args": [
{
"op": "+",
"args": [
{
"op": "*",
"args": [
{
"op": "-",
"args": [
1.0,
{
"op": "^",
"args": [
{
"op": "*",
"args": [
{
"op": "-",
"args": [
1.0,
"ε_wall"
]
},
"T_ww"
]
},
2.0
]
}
]
},
{
"op": "+",
"args": [
{
"op": "*",
"args": [
"L_atm_down",
"Ψ_sky_road"
]
},
{
"op": "*",
"args": [
"T_rw",
{
"op": "+",
"args": [
"L_emit_sunwall",
"L_emit_shdwall"
]
}
]
}
]
}
]
},
{
"op": "*",
"args": [
{
"op": "*",
"args": [
{
"op": "*",
"args": [
{
"op": "-",
"args": [
1.0,
"ε_wall"
]
},
"T_rw"
]
},
{
"op": "+",
"args": [
1.0,
{
"op": "*",
"args": [
{
"op": "-",
"args": [
1.0,
"ε_wall"
]
},
"T_ww"
]
}
]
}
]
},
{
"op": "+",
"args": [
{
"op": "+",
"args": [
{
"op": "*",
"args": [
"L_atm_down",
"Ψ_sky_wall"
]
},
{
"op": "*",
"args": [
"T_wr",
"L_emit_road"
]
}
]
},
{
"op": "*",
"args": [
"T_ww",
"L_emit_shdwall"
]
}
]
}
]
}
]
},
{
"op": "*",
"args": [
{
"op": "*",
"args": [
{
"op": "*",
"args": [
{
"op": "-",
"args": [
1.0,
"ε_wall"
]
},
"T_rw"
]
},
{
"op": "+",
"args": [
1.0,
{
"op": "*",
"args": [
{
"op": "-",
"args": [
1.0,
"ε_wall"
]
},
"T_ww"
]
}
]
}
]
},
{
"op": "+",
"args": [
{
"op": "+",
"args": [
{
"op": "*",
"args": [
"L_atm_down",
"Ψ_sky_wall"
]
},
{
"op": "*",
"args": [
"T_wr",
"L_emit_road"
]
}
]
},
{
"op": "*",
"args": [
"T_ww",
"L_emit_sunwall"
]
}
]
}
]
}
]
},
"det_lw"
]
}
]
}
]
}
},
{
"lhs": "L_net_sunwall",
"rhs": {
"op": "-",
"args": [
"L_emit_sunwall",
{
"op": "*",
"args": [
"ε_wall",
{
"op": "/",
"args": [
{
"op": "+",
"args": [
{
"op": "+",
"args": [
{
"op": "*",
"args": [
{
"op": "*",
"args": [
{
"op": "*",
"args": [
{
"op": "-",
"args": [
1.0,
"ε_road"
]
},
"T_wr"
]
},
{
"op": "+",
"args": [
1.0,
{
"op": "*",
"args": [
{
"op": "-",
"args": [
1.0,
"ε_wall"
]
},
"T_ww"
]
}
]
}
]
},
{
"op": "+",
"args": [
{
"op": "*",
"args": [
"L_atm_down",
"Ψ_sky_road"
]
},
{
"op": "*",
"args": [
"T_rw",
{
"op": "+",
"args": [
"L_emit_sunwall",
"L_emit_shdwall"
]
}
]
}
]
}
]
},
{
"op": "*",
"args": [
{
"op": "-",
"args": [
1.0,
{
"op": "*",
"args": [
{
"op": "*",
"args": [
{
"op": "-",
"args": [
1.0,
"ε_wall"
]
},
"T_rw"
]
},
{
"op": "*",
"args": [
{
"op": "-",
"args": [
1.0,
"ε_road"
]
},
"T_wr"
]
}
]
}
]
},
{
"op": "+",
"args": [
{
"op": "+",
"args": [
{
"op": "*",
"args": [
"L_atm_down",
"Ψ_sky_wall"
]
},
{
"op": "*",
"args": [
"T_wr",
"L_emit_road"
]
}
]
},
{
"op": "*",
"args": [
"T_ww",
"L_emit_shdwall"
]
}
]
}
]
}
]
},
{
"op": "*",
"args": [
{
"op": "+",
"args": [
{
"op": "*",
"args": [
{
"op": "-",
"args": [
1.0,
"ε_wall"
]
},
"T_ww"
]
},
{
"op": "*",
"args": [
{
"op": "*",
"args": [
{
"op": "-",
"args": [
1.0,
"ε_wall"
]
},
"T_rw"
]
},
{
"op": "*",
"args": [
{
"op": "-",
"args": [
1.0,
"ε_road"
]
},
"T_wr"
]
}
]
}
]
},
{
"op": "+",
"args": [
{
"op": "+",
"args": [
{
"op": "*",
"args": [
"L_atm_down",
"Ψ_sky_wall"
]
},
{
"op": "*",
"args": [
"T_wr",
"L_emit_road"
]
}
]
},
{
"op": "*",
"args": [
"T_ww",
"L_emit_sunwall"
]
}
]
}
]
}
]
},
"det_lw"
]
}
]
}
]
}
},
{
"lhs": "L_net_shdwall",
"rhs": {
"op": "-",
"args": [
"L_emit_shdwall",
{
"op": "*",
"args": [
"ε_wall",
{
"op": "/",
"args": [
{
"op": "+",
"args": [
{
"op": "+",
"args": [
{
"op": "*",
"args": [
{
"op": "*",
"args": [
{
"op": "*",
"args": [
{
"op": "-",
"args": [
1.0,
"ε_road"
]
},
"T_wr"
]
},
{
"op": "+",
"args": [
1.0,
{
"op": "*",
"args": [
{
"op": "-",
"args": [
1.0,
"ε_wall"
]
},
"T_ww"
]
}
]
}
]
},
{
"op": "+",
"args": [
{
"op": "*",
"args": [
"L_atm_down",
"Ψ_sky_road"
]
},
{
"op": "*",
"args": [
"T_rw",
{
"op": "+",
"args": [
"L_emit_sunwall",
"L_emit_shdwall"
]
}
]
}
]
}
]
},
{
"op": "*",
"args": [
{
"op": "+",
"args": [
{
"op": "*",
"args": [
{
"op": "-",
"args": [
1.0,
"ε_wall"
]
},
"T_ww"
]
},
{
"op": "*",
"args": [
{
"op": "*",
"args": [
{
"op": "-",
"args": [
1.0,
"ε_wall"
]
},
"T_rw"
]
},
{
"op": "*",
"args": [
{
"op": "-",
"args": [
1.0,
"ε_road"
]
},
"T_wr"
]
}
]
}
]
},
{
"op": "+",
"args": [
{
"op": "+",
"args": [
{
"op": "*",
"args": [
"L_atm_down",
"Ψ_sky_wall"
]
},
{
"op": "*",
"args": [
"T_wr",
"L_emit_road"
]
}
]
},
{
"op": "*",
"args": [
"T_ww",
"L_emit_shdwall"
]
}
]
}
]
}
]
},
{
"op": "*",
"args": [
{
"op": "-",
"args": [
1.0,
{
"op": "*",
"args": [
{
"op": "*",
"args": [
{
"op": "-",
"args": [
1.0,
"ε_wall"
]
},
"T_rw"
]
},
{
"op": "*",
"args": [
{
"op": "-",
"args": [
1.0,
"ε_road"
]
},
"T_wr"
]
}
]
}
]
},
{
"op": "+",
"args": [
{
"op": "+",
"args": [
{
"op": "*",
"args": [
"L_atm_down",
"Ψ_sky_wall"
]
},
{
"op": "*",
"args": [
"T_wr",
"L_emit_road"
]
}
]
},
{
"op": "*",
"args": [
"T_ww",
"L_emit_sunwall"
]
}
]
}
]
}
]
},
"det_lw"
]
}
]
}
]
}
},
{
"lhs": "L_net_uc",
"rhs": {
"op": "+",
"args": [
"L_net_road",
{
"op": "*",
"args": [
{
"op": "+",
"args": [
"L_net_sunwall",
"L_net_shdwall"
]
},
"H_W"
]
}
]
}
},
{
"lhs": "L_net_total",
"rhs": {
"op": "+",
"args": [
{
"op": "*",
"args": [
"W_roof",
"L_net_roof"
]
},
{
"op": "*",
"args": [
{
"op": "-",
"args": [
1.0,
"W_roof"
]
},
"L_net_uc"
]
}
]
}
}
]
},
"flux": {
"variables": {
"C_p": {
"type": "parameter",
"units": "J/(kg*K)",
"default": 1004.64,
"description": "Specific heat capacity of dry air (Table 1.4)"
},
"g_acc": {
"type": "parameter",
"units": "m/s^2",
"default": 9.80616,
"description": "Gravitational acceleration (Table 1.4)"
},
"k_vk": {
"type": "parameter",
"units": "1",
"default": 0.4,
"description": "von Karman constant (Table 1.4)"
},
"one_ms": {
"type": "parameter",
"units": "m/s",
"default": 1.0,
"description": "Unit velocity (1 m/s) for clamping"
},
"zero_ms": {
"type": "parameter",
"units": "m/s",
"default": 0.0,
"description": "Zero velocity reference"
},
"pi_val": {
"type": "parameter",
"units": "1",
"default": 3.141592653589793,
"description": "Pi constant"
},
"alpha_rough": {
"type": "parameter",
"units": "1",
"default": 4.43,
"description": "Empirical coefficient for displacement height (Eq. 3.55)"
},
"B_drag": {
"type": "parameter",
"units": "1",
"default": 1.0,
"description": "Drag correction coefficient (Eq. 3.57)"
},
"C_D": {
"type": "parameter",
"units": "1",
"default": 1.2,
"description": "Depth-integrated mean drag coefficient (Eq. 3.57)"
},
"beta_conv": {
"type": "parameter",
"units": "1",
"default": 1.0,
"description": "Convective velocity coefficient (Eq. 3.29)"
},
"z_i": {
"type": "parameter",
"units": "m",
"default": 1000.0,
"description": "Convective boundary layer height (Eq. 3.30)"
},
"c_virt": {
"type": "parameter",
"units": "1",
"default": 0.61,
"description": "Virtual potential temperature coefficient 0.61"
},
"one_m": {
"type": "parameter",
"units": "m",
"default": 1.0,
"description": "Unit length (1 m) for non-dimensionalization"
},
"gamma_BD": {
"type": "parameter",
"units": "1",
"default": 16.0,
"description": "Businger-Dyer unstable parameter (Eqs. 3.31-3.32)"
},
"a_BD": {
"type": "parameter",
"units": "1",
"default": 5.0,
"description": "Businger-Dyer stable parameter (Eqs. 3.31-3.32)"
},
"zeta_m_threshold": {
"type": "parameter",
"units": "1",
"default": -1.574,
"description": "Very unstable transition ζ for ψ_m"
},
"zeta_h_threshold": {
"type": "parameter",
"units": "1",
"default": -0.465,
"description": "Very unstable transition ζ for ψ_h"
},
"c_vu_m": {
"type": "parameter",
"units": "1",
"default": 1.14,
"description": "Very unstable momentum correction (Eq. 3.33)"
},
"c_vu_h": {
"type": "parameter",
"units": "1",
"default": 0.8,
"description": "Very unstable heat correction (Eq. 3.38)"
},
"h_c_free": {
"type": "parameter",
"units": "W/(m^2*K)",
"default": 11.8,
"description": "Free convection coefficient in surface resistance (Eq. 3.68)"
},
"h_c_forced": {
"type": "parameter",
"units": "W*s/(m^3*K)",
"default": 4.2,
"description": "Forced convection coefficient in surface resistance (Eq. 3.68)"
},
"psi_m_at_trans": {
"type": "parameter",
"units": "1",
"default": 1.3580517809990371,
"description": "ψ_m value at ζ_m_threshold (pre-computed constant for very-unstable branch)"
},
"neg_zm_cbrt": {
"type": "parameter",
"units": "1",
"default": 1.1632370937226377,
"description": "(-ζ_m_threshold)^(1/3) (pre-computed constant)"
},
"psi_h_at_trans": {
"type": "parameter",
"units": "1",
"default": 1.3383071494640564,
"description": "ψ_h value at ζ_h_threshold (pre-computed constant for very-unstable branch)"
},
"neg_zh_cbrt": {
"type": "parameter",
"units": "1",
"default": 0.7747310894995783,
"description": "(-ζ_h_threshold)^(1/3) (pre-computed constant)"
},
"H_W": {
"type": "unknown",
"units": "1",
"default": 1.0,
"description": "Canyon H/W ratio"
},
"H_canyon": {
"type": "unknown",
"units": "m",
"default": 10.0,
"description": "Canyon height"
},
"W_roof": {
"type": "unknown",
"units": "1",
"default": 0.5,
"description": "Roof fraction"
},
"f_prvrd": {
"type": "unknown",
"units": "1",
"default": 0.5,
"description": "Pervious road fraction"
},
"H_w_est": {
"type": "unknown",
"units": "m",
"default": 5.0,
"description": "Height for canyon wind estimate"
},
"u_atm": {
"type": "unknown",
"units": "m/s",
"default": 5.0,
"description": "Zonal wind at reference height"
},
"v_atm": {
"type": "unknown",
"units": "m/s",
"default": 5.0,
"description": "Meridional wind at reference height"
},
"theta_atm": {
"type": "unknown",
"units": "K",
"default": 293.15,
"description": "Atmospheric potential temperature"
},
"q_atm": {
"type": "unknown",
"units": "kg/kg",
"default": 0.01,
"description": "Atmospheric specific humidity"
},
"rho_atm": {
"type": "unknown",
"units": "kg/m^3",
"default": 1.2,
"description": "Atmospheric air density"
},
"z_atm_m": {
"type": "unknown",
"units": "m",
"default": 36.0,
"description": "Reference height for momentum"
},
"z_atm_h": {
"type": "unknown",
"units": "m",
"default": 36.0,
"description": "Reference height for heat"
},
"z_atm_w": {
"type": "unknown",
"units": "m",
"default": 36.0,
"description": "Reference height for moisture"
},
"T_g_roof": {
"type": "unknown",
"units": "K",
"default": 298.0,
"description": "Roof surface temperature"
},
"T_g_prvrd": {
"type": "unknown",
"units": "K",
"default": 295.0,
"description": "Pervious road surface temperature"
},
"T_g_imprvrd": {
"type": "unknown",
"units": "K",
"default": 297.0,
"description": "Impervious road surface temperature"
},
"T_g_sunwall": {
"type": "unknown",
"units": "K",
"default": 299.0,
"description": "Sunlit wall surface temperature"
},
"T_g_shdwall": {
"type": "unknown",
"units": "K",
"default": 294.0,
"description": "Shaded wall surface temperature"
},
"q_g_roof": {
"type": "unknown",
"units": "kg/kg",
"default": 0.012,
"description": "Roof saturated specific humidity"
},
"q_g_prvrd": {
"type": "unknown",
"units": "kg/kg",
"default": 0.011,
"description": "Pervious road specific humidity"
},
"q_g_imprvrd": {
"type": "unknown",
"units": "kg/kg",
"default": 0.012,
"description": "Impervious road saturated specific humidity"
},
"f_wet_roof": {
"type": "unknown",
"units": "1",
"default": 0.2,
"description": "Wetted fraction of roof"
},
"f_wet_imprvrd": {
"type": "unknown",
"units": "1",
"default": 0.1,
"description": "Wetted fraction of impervious road"
},
"zeta_in": {
"type": "unknown",
"units": "1",
"default": -0.1,
"description": "Monin-Obukhov stability parameter ζ (external input)"
},
"lambda_p": {
"type": "unknown",
"units": "1",
"description": "Plan area index (Eq. 3.56)"
},
"lambda_F": {
"type": "unknown",
"units": "1",
"description": "Frontal area index (Eq. 3.58)"
},
"d_canopy": {
"type": "unknown",
"units": "m",
"description": "Canopy displacement height (Eq. 3.55)"
},
"z_0m_canopy": {
"type": "unknown",
"units": "m",
"description": "Canopy roughness length (Eq. 3.57)"
},
"V_r": {
"type": "unknown",
"units": "m/s",
"description": "Reference wind speed (Eq. 3.63)"
},
"V_a": {
"type": "unknown",
"units": "m/s",
"description": "Effective wind speed (Eq. 3.25)"
},
"U_c": {
"type": "unknown",
"units": "m/s",
"description": "Convective velocity (Eq. 3.29)"
},
"U_can": {
"type": "unknown",
"units": "m/s",
"description": "Canyon horizontal wind speed (Eqs. 3.60-3.62)"
},
"U_ac": {
"type": "unknown",
"units": "m/s",
"description": "Canyon wind speed (Eq. 3.59)"
},
"u_star": {
"type": "unknown",
"units": "m/s",
"description": "Friction velocity (Eq. 3.26)"
},
"L_MO": {
"type": "unknown",
"units": "m",
"description": "Monin-Obukhov length (Eq. 3.50)"
},
"zeta_0m": {
"type": "unknown",
"units": "1",
"description": "Stability parameter at z_0m"
},
"zeta_h": {
"type": "unknown",
"units": "1",
"description": "Stability parameter for heat"
},
"zeta_0h": {
"type": "unknown",
"units": "1",
"description": "Stability parameter at z_0h"
},
"zeta_w": {
"type": "unknown",
"units": "1",
"description": "Stability parameter for moisture"
},
"zeta_0w": {
"type": "unknown",
"units": "1",
"description": "Stability parameter at z_0w"
},
"psi_m_atm": {
"type": "unknown",
"units": "1",
"description": "Momentum stability correction at ζ_in"
},
"psi_m_0": {
"type": "unknown",
"units": "1",
"description": "Momentum stability correction at z_0m"
},
"psi_h_atm": {
"type": "unknown",
"units": "1",
"description": "Heat stability correction at ζ_h"
},
"psi_h_0": {
"type": "unknown",
"units": "1",
"description": "Heat stability correction at z_0h"
},
"psi_w_atm": {
"type": "unknown",
"units": "1",
"description": "Moisture stability correction at ζ_w"
},
"psi_w_0": {
"type": "unknown",
"units": "1",
"description": "Moisture stability correction at z_0w"
},
"theta_v_atm": {
"type": "unknown",
"units": "K",
"description": "Virtual potential temperature at reference height"
},
"r_am": {
"type": "unknown",
"units": "s/m",
"description": "Aerodynamic resistance for momentum (Eq. 3.65)"
},
"r_ah": {
"type": "unknown",
"units": "s/m",
"description": "Aerodynamic resistance for sensible heat (Eq. 3.66)"
},
"r_aw": {
"type": "unknown",
"units": "s/m",
"description": "Aerodynamic resistance for water vapor (Eq. 3.67)"
},
"r_s_u": {
"type": "unknown",
"units": "s/m",
"description": "Urban surface resistance (Eq. 3.68)"
},
"c_a_h": {
"type": "unknown",
"units": "m/s",
"description": "Sensible heat conductance UCL-atm (1/r_ah)"
},
"c_a_w": {
"type": "unknown",
"units": "m/s",
"description": "Latent heat conductance UCL-atm (1/r_aw)"
},
"T_ac": {
"type": "unknown",
"units": "K",
"description": "UCL air temperature (Eq. 3.75)"
},
"q_ac": {
"type": "unknown",
"units": "kg/kg",
"description": "UCL air specific humidity (Eq. 3.93)"
},
"H_roof": {
"type": "unknown",
"units": "W/m^2",
"description": "Sensible heat flux from roof (Eq. 3.69)"
},
"H_prvrd": {
"type": "unknown",
"units": "W/m^2",
"description": "Sensible heat flux from pervious road (Eq. 3.70)"
},
"H_imprvrd": {
"type": "unknown",
"units": "W/m^2",
"description": "Sensible heat flux from impervious road (Eq. 3.71)"
},
"H_sunwall": {
"type": "unknown",
"units": "W/m^2",
"description": "Sensible heat flux from sunlit wall (Eq. 3.72)"
},
"H_shdwall": {
"type": "unknown",
"units": "W/m^2",
"description": "Sensible heat flux from shaded wall (Eq. 3.73)"
},
"H_total": {
"type": "unknown",
"units": "W/m^2",
"description": "Total sensible heat flux (Eq. 3.74)"
},
"E_roof": {
"type": "unknown",
"units": "kg/(m^2*s)",
"description": "Water vapor flux from roof (Eq. 3.76)"
},
"E_prvrd": {
"type": "unknown",
"units": "kg/(m^2*s)",
"description": "Water vapor flux from pervious road (Eq. 3.77)"
},
"E_imprvrd": {
"type": "unknown",
"units": "kg/(m^2*s)",
"description": "Water vapor flux from impervious road (Eq. 3.78)"
},
"E_total": {
"type": "unknown",
"units": "kg/(m^2*s)",
"description": "Total water vapor flux (Eq. 3.81)"
},
"tau_x": {
"type": "unknown",
"units": "kg/(m*s^2)",
"description": "Zonal momentum flux (Eq. 3.6)"
},
"tau_y": {
"type": "unknown",
"units": "kg/(m*s^2)",
"description": "Meridional momentum flux (Eq. 3.7)"
},
"dH_roof_dT": {
"type": "unknown",
"units": "W/(m^2*K)",
"description": "∂H_roof/∂T_g,roof (Eq. 3.95)"
},
"dH_prvrd_dT": {
"type": "unknown",
"units": "W/(m^2*K)",
"description": "∂H_prvrd/∂T_g,prvrd (Eq. 3.96)"
},
"dH_imprvrd_dT": {
"type": "unknown",
"units": "W/(m^2*K)",
"description": "∂H_imprvrd/∂T_g,imprvrd (Eq. 3.97)"
},
"dH_sunwall_dT": {
"type": "unknown",
"units": "W/(m^2*K)",
"description": "∂H_sunwall/∂T_g,sunwall (Eq. 3.98)"
},
"dH_shdwall_dT": {
"type": "unknown",
"units": "W/(m^2*K)",
"description": "∂H_shdwall/∂T_g,shdwall (Eq. 3.99)"
}
},
"equations": [
{
"lhs": "lambda_p",
"rhs": {
"op": "/",
"args": [
"H_W",
{
"op": "+",
"args": [
"H_W",
1.0
]
}
]
}
},
{
"lhs": "lambda_F",
"rhs": {
"op": "*",
"args": [
{
"op": "-",
"args": [
1.0,
"lambda_p"
]
},
"H_W"
]
}
},
{
"lhs": "d_canopy",
"rhs": {
"op": "*",
"args": [
"H_canyon",
{
"op": "+",
"args": [
1.0,
{
"op": "*",
"args": [
{
"op": "^",
"args": [
"alpha_rough",
{
"op": "-",
"args": [
0.0,
"lambda_p"
]
}
]
},
{
"op": "-",
"args": [
"lambda_p",
1.0
]
}
]
}
]
}
]
}
},
{
"lhs": "z_0m_canopy",
"rhs": {
"op": "*",
"args": [
{
"op": "*",
"args": [
"H_canyon",
{
"op": "-",
"args": [
1.0,
{
"op": "/",
"args": [
"d_canopy",
"H_canyon"
]
}
]
}
]
},
{
"op": "exp",
"args": [
{
"op": "-",
"args": [
0.0,
{
"op": "^",
"args": [
{
"op": "*",
"args": [
{
"op": "*",
"args": [
{
"op": "*",
"args": [
{
"op": "*",
"args": [
{
"op": "*",
"args": [
0.5,
"B_drag"
]
},
"C_D"
]
},
{
"op": "/",
"args": [
1.0,
{
"op": "^",
"args": [
"k_vk",
2.0
]
}
]
}
]
},
{
"op": "-",
"args": [
1.0,
{
"op": "/",
"args": [
"d_canopy",
"H_canyon"
]
}
]
}
]
},
"lambda_F"
]
},
-0.5
]
}
]
}
]
}
]
}
},
{
"lhs": "V_r",
"rhs": {
"op": "max",
"args": [
{
"op": "sqrt",
"args": [
{
"op": "+",
"args": [
{
"op": "^",
"args": [
"u_atm",
2.0
]
},
{
"op": "^",
"args": [
"v_atm",
2.0
]
}
]
}
]
},
"one_ms"
]
}
},
{
"lhs": "L_MO",
"rhs": {
"op": "/",
"args": [
{
"op": "-",
"args": [
"z_atm_m",
"d_canopy"
]
},
"zeta_in"
]
}
},
{
"lhs": "zeta_0m",
"rhs": {
"op": "/",
"args": [
"z_0m_canopy",
"L_MO"
]
}
},
{
"lhs": "zeta_h",
"rhs": {
"op": "/",
"args": [
{
"op": "-",
"args": [
"z_atm_h",
"d_canopy"
]
},
"L_MO"
]
}
},
{
"lhs": "zeta_0h",
"rhs": {
"op": "/",
"args": [
"z_0m_canopy",
"L_MO"
]
}
},
{
"lhs": "zeta_w",
"rhs": {
"op": "/",
"args": [
{
"op": "-",
"args": [
"z_atm_w",
"d_canopy"
]
},
"L_MO"
]
}
},
{
"lhs": "zeta_0w",
"rhs": {
"op": "/",
"args": [
"z_0m_canopy",
"L_MO"
]
}
},
{
"lhs": "psi_m_atm",
"rhs": {
"op": "ifelse",
"args": [
{
"op": "<",
"args": [
"zeta_in",
"zeta_m_threshold"
]
},
{
"op": "+",
"args": [
{
"op": "+",
"args": [
"psi_m_at_trans",
{
"op": "log",
"args": [
{
"op": "/",
"args": [
"zeta_in",
"zeta_m_threshold"
]
}
]
}
]
},
{
"op": "-",
"args": [
0.0,
{
"op": "*",
"args": [
"c_vu_m",
{
"op": "-",
"args": [
{
"op": "^",
"args": [
{
"op": "-",
"args": [
0.0,
"zeta_in"
]
},
{
"op": "/",
"args": [
1.0,
3.0
]
}
]
},
"neg_zm_cbrt"
]
}
]
}
]
}
]
},
{
"op": "ifelse",
"args": [
{
"op": "<",
"args": [
"zeta_in",
0.0
]
},
{
"op": "+",
"args": [
{
"op": "+",
"args": [
{
"op": "+",
"args": [
{
"op": "*",
"args": [
2.0,
{
"op": "log",
"args": [
{
"op": "/",
"args": [
{
"op": "+",
"args": [
1.0,
{
"op": "^",
"args": [
{
"op": "-",
"args": [
1.0,
{
"op": "*",
"args": [
"gamma_BD",
"zeta_in"
]
}
]
},
0.25
]
}
]
},
2.0
]
}
]
}
]
},
{
"op": "log",
"args": [
{
"op": "/",
"args": [
{
"op": "+",
"args": [
1.0,
{
"op": "^",
"args": [
{
"op": "^",
"args": [
{
"op": "-",
"args": [
1.0,
{
"op": "*",
"args": [
"gamma_BD",
"zeta_in"
]
}
]
},
0.25
]
},
2.0
]
}
]
},
2.0
]
}
]
}
]
},
{
"op": "-",
"args": [
0.0,
{
"op": "*",
"args": [
2.0,
{
"op": "atan",
"args": [
{
"op": "^",
"args": [
{
"op": "-",
"args": [
1.0,
{
"op": "*",
"args": [
"gamma_BD",
"zeta_in"
]
}
]
},
0.25
]
}
]
}
]
}
]
}
]
},
{
"op": "/",
"args": [
"pi_val",
2.0
]
}
]
},
{
"op": "ifelse",
"args": [
{
"op": "<=",
"args": [
"zeta_in",
1.0
]
},
{
"op": "*",
"args": [
{
"op": "-",
"args": [
0.0,
"a_BD"
]
},
"zeta_in"
]
},
{
"op": "-",
"args": [
{
"op": "-",
"args": [
{
"op": "*",
"args": [
{
"op": "-",
"args": [
0.0,
{
"op": "-",
"args": [
"a_BD",
1.0
]
}
]
},
{
"op": "log",
"args": [
"zeta_in"
]
}
]
},
"zeta_in"
]
},
{
"op": "-",
"args": [
"a_BD",
1.0
]
}
]
}
]
}
]
}
]
}
},
{
"lhs": "psi_m_0",
"rhs": {
"op": "ifelse",
"args": [
{
"op": "<",
"args": [
"zeta_0m",
"zeta_m_threshold"
]
},
{
"op": "+",
"args": [
{
"op": "+",
"args": [
"psi_m_at_trans",
{
"op": "log",
"args": [
{
"op": "/",
"args": [
"zeta_0m",
"zeta_m_threshold"
]
}
]
}
]
},
{
"op": "-",
"args": [
0.0,
{
"op": "*",
"args": [
"c_vu_m",
{
"op": "-",
"args": [
{
"op": "^",
"args": [
{
"op": "-",
"args": [
0.0,
"zeta_0m"
]
},
{
"op": "/",
"args": [
1.0,
3.0
]
}
]
},
"neg_zm_cbrt"
]
}
]
}
]
}
]
},
{
"op": "ifelse",
"args": [
{
"op": "<",
"args": [
"zeta_0m",
0.0
]
},
{
"op": "+",
"args": [
{
"op": "+",
"args": [
{
"op": "+",
"args": [
{
"op": "*",
"args": [
2.0,
{
"op": "log",
"args": [
{
"op": "/",
"args": [
{
"op": "+",
"args": [
1.0,
{
"op": "^",
"args": [
{
"op": "-",
"args": [
1.0,
{
"op": "*",
"args": [
"gamma_BD",
"zeta_0m"
]
}
]
},
0.25
]
}
]
},
2.0
]
}
]
}
]
},
{
"op": "log",
"args": [
{
"op": "/",
"args": [
{
"op": "+",
"args": [
1.0,
{
"op": "^",
"args": [
{
"op": "^",
"args": [
{
"op": "-",
"args": [
1.0,
{
"op": "*",
"args": [
"gamma_BD",
"zeta_0m"
]
}
]
},
0.25
]
},
2.0
]
}
]
},
2.0
]
}
]
}
]
},
{
"op": "-",
"args": [
0.0,
{
"op": "*",
"args": [
2.0,
{
"op": "atan",
"args": [
{
"op": "^",
"args": [
{
"op": "-",
"args": [
1.0,
{
"op": "*",
"args": [
"gamma_BD",
"zeta_0m"
]
}
]
},
0.25
]
}
]
}
]
}
]
}
]
},
{
"op": "/",
"args": [
"pi_val",
2.0
]
}
]
},
{
"op": "ifelse",
"args": [
{
"op": "<=",
"args": [
"zeta_0m",
1.0
]
},
{
"op": "*",
"args": [
{
"op": "-",
"args": [
0.0,
"a_BD"
]
},
"zeta_0m"
]
},
{
"op": "-",
"args": [
{
"op": "-",
"args": [
{
"op": "*",
"args": [
{
"op": "-",
"args": [
0.0,
{
"op": "-",
"args": [
"a_BD",
1.0
]
}
]
},
{
"op": "log",
"args": [
"zeta_0m"
]
}
]
},
"zeta_0m"
]
},
{
"op": "-",
"args": [
"a_BD",
1.0
]
}
]
}
]
}
]
}
]
}
},
{
"lhs": "psi_h_atm",
"rhs": {
"op": "ifelse",
"args": [
{
"op": "<",
"args": [
"zeta_h",
"zeta_h_threshold"
]
},
{
"op": "+",
"args": [
{
"op": "+",
"args": [
"psi_h_at_trans",
{
"op": "log",
"args": [
{
"op": "/",
"args": [
"zeta_h",
"zeta_h_threshold"
]
}
]
}
]
},
{
"op": "*",
"args": [
"c_vu_h",
{
"op": "-",
"args": [
{
"op": "^",
"args": [
{
"op": "-",
"args": [
0.0,
"zeta_h"
]
},
{
"op": "-",
"args": [
0.0,
{
"op": "/",
"args": [
1.0,
3.0
]
}
]
}
]
},
"neg_zh_cbrt"
]
}
]
}
]
},
{
"op": "ifelse",
"args": [
{
"op": "<",
"args": [
"zeta_h",
0.0
]
},
{
"op": "*",
"args": [
2.0,
{
"op": "log",
"args": [
{
"op": "/",
"args": [
{
"op": "+",
"args": [
1.0,
{
"op": "^",
"args": [
{
"op": "^",
"args": [
{
"op": "-",
"args": [
1.0,
{
"op": "*",
"args": [
"gamma_BD",
"zeta_h"
]
}
]
},
0.25
]
},
2.0
]
}
]
},
2.0
]
}
]
}
]
},
{
"op": "ifelse",
"args": [
{
"op": "<=",
"args": [
"zeta_h",
1.0
]
},
{
"op": "*",
"args": [
{
"op": "-",
"args": [
0.0,
"a_BD"
]
},
"zeta_h"
]
},
{
"op": "-",
"args": [
{
"op": "-",
"args": [
{
"op": "*",
"args": [
{
"op": "-",
"args": [
0.0,
{
"op": "-",
"args": [
"a_BD",
1.0
]
}
]
},
{
"op": "log",
"args": [
"zeta_h"
]
}
]
},
"zeta_h"
]
},
{
"op": "-",
"args": [
"a_BD",
1.0
]
}
]
}
]
}
]
}
]
}
},
{
"lhs": "psi_h_0",
"rhs": {
"op": "ifelse",
"args": [
{
"op": "<",
"args": [
"zeta_0h",
"zeta_h_threshold"
]
},
{
"op": "+",
"args": [
{
"op": "+",
"args": [
"psi_h_at_trans",
{
"op": "log",
"args": [
{
"op": "/",
"args": [
"zeta_0h",
"zeta_h_threshold"
]
}
]
}
]
},
{
"op": "*",
"args": [
"c_vu_h",
{
"op": "-",
"args": [
{
"op": "^",
"args": [
{
"op": "-",
"args": [
0.0,
"zeta_0h"
]
},
{
"op": "-",
"args": [
0.0,
{
"op": "/",
"args": [
1.0,
3.0
]
}
]
}
]
},
"neg_zh_cbrt"
]
}
]
}
]
},
{
"op": "ifelse",
"args": [
{
"op": "<",
"args": [
"zeta_0h",
0.0
]
},
{
"op": "*",
"args": [
2.0,
{
"op": "log",
"args": [
{
"op": "/",
"args": [
{
"op": "+",
"args": [
1.0,
{
"op": "^",
"args": [
{
"op": "^",
"args": [
{
"op": "-",
"args": [
1.0,
{
"op": "*",
"args": [
"gamma_BD",
"zeta_0h"
]
}
]
},
0.25
]
},
2.0
]
}
]
},
2.0
]
}
]
}
]
},
{
"op": "ifelse",
"args": [
{
"op": "<=",
"args": [
"zeta_0h",
1.0
]
},
{
"op": "*",
"args": [
{
"op": "-",
"args": [
0.0,
"a_BD"
]
},
"zeta_0h"
]
},
{
"op": "-",
"args": [
{
"op": "-",
"args": [
{
"op": "*",
"args": [
{
"op": "-",
"args": [
0.0,
{
"op": "-",
"args": [
"a_BD",
1.0
]
}
]
},
{
"op": "log",
"args": [
"zeta_0h"
]
}
]
},
"zeta_0h"
]
},
{
"op": "-",
"args": [
"a_BD",
1.0
]
}
]
}
]
}
]
}
]
}
},
{
"lhs": "psi_w_atm",
"rhs": {
"op": "ifelse",
"args": [
{
"op": "<",
"args": [
"zeta_w",
"zeta_h_threshold"
]
},
{
"op": "+",
"args": [
{
"op": "+",
"args": [
"psi_h_at_trans",
{
"op": "log",
"args": [
{
"op": "/",
"args": [
"zeta_w",
"zeta_h_threshold"
]
}
]
}
]
},
{
"op": "*",
"args": [
"c_vu_h",
{
"op": "-",
"args": [
{
"op": "^",
"args": [
{
"op": "-",
"args": [
0.0,
"zeta_w"
]
},
{
"op": "-",
"args": [
0.0,
{
"op": "/",
"args": [
1.0,
3.0
]
}
]
}
]
},
"neg_zh_cbrt"
]
}
]
}
]
},
{
"op": "ifelse",
"args": [
{
"op": "<",
"args": [
"zeta_w",
0.0
]
},
{
"op": "*",
"args": [
2.0,
{
"op": "log",
"args": [
{
"op": "/",
"args": [
{
"op": "+",
"args": [
1.0,
{
"op": "^",
"args": [
{
"op": "^",
"args": [
{
"op": "-",
"args": [
1.0,
{
"op": "*",
"args": [
"gamma_BD",
"zeta_w"
]
}
]
},
0.25
]
},
2.0
]
}
]
},
2.0
]
}
]
}
]
},
{
"op": "ifelse",
"args": [
{
"op": "<=",
"args": [
"zeta_w",
1.0
]
},
{
"op": "*",
"args": [
{
"op": "-",
"args": [
0.0,
"a_BD"
]
},
"zeta_w"
]
},
{
"op": "-",
"args": [
{
"op": "-",
"args": [
{
"op": "*",
"args": [
{
"op": "-",
"args": [
0.0,
{
"op": "-",
"args": [
"a_BD",
1.0
]
}
]
},
{
"op": "log",
"args": [
"zeta_w"
]
}
]
},
"zeta_w"
]
},
{
"op": "-",
"args": [
"a_BD",
1.0
]
}
]
}
]
}
]
}
]
}
},
{
"lhs": "psi_w_0",
"rhs": {
"op": "ifelse",
"args": [
{
"op": "<",
"args": [
"zeta_0w",
"zeta_h_threshold"
]
},
{
"op": "+",
"args": [
{
"op": "+",
"args": [
"psi_h_at_trans",
{
"op": "log",
"args": [
{
"op": "/",
"args": [
"zeta_0w",
"zeta_h_threshold"
]
}
]
}
]
},
{
"op": "*",
"args": [
"c_vu_h",
{
"op": "-",
"args": [
{
"op": "^",
"args": [
{
"op": "-",
"args": [
0.0,
"zeta_0w"
]
},
{
"op": "-",
"args": [
0.0,
{
"op": "/",
"args": [
1.0,
3.0
]
}
]
}
]
},
"neg_zh_cbrt"
]
}
]
}
]
},
{
"op": "ifelse",
"args": [
{
"op": "<",
"args": [
"zeta_0w",
0.0
]
},
{
"op": "*",
"args": [
2.0,
{
"op": "log",
"args": [
{
"op": "/",
"args": [
{
"op": "+",
"args": [
1.0,
{
"op": "^",
"args": [
{
"op": "^",
"args": [
{
"op": "-",
"args": [
1.0,
{
"op": "*",
"args": [
"gamma_BD",
"zeta_0w"
]
}
]
},
0.25
]
},
2.0
]
}
]
},
2.0
]
}
]
}
]
},
{
"op": "ifelse",
"args": [
{
"op": "<=",
"args": [
"zeta_0w",
1.0
]
},
{
"op": "*",
"args": [
{
"op": "-",
"args": [
0.0,
"a_BD"
]
},
"zeta_0w"
]
},
{
"op": "-",
"args": [
{
"op": "-",
"args": [
{
"op": "*",
"args": [
{
"op": "-",
"args": [
0.0,
{
"op": "-",
"args": [
"a_BD",
1.0
]
}
]
},
{
"op": "log",
"args": [
"zeta_0w"
]
}
]
},
"zeta_0w"
]
},
{
"op": "-",
"args": [
"a_BD",
1.0
]
}
]
}
]
}
]
}
]
}
},
{
"lhs": "theta_v_atm",
"rhs": {
"op": "*",
"args": [
"theta_atm",
{
"op": "+",
"args": [
1.0,
{
"op": "*",
"args": [
"c_virt",
"q_atm"
]
}
]
}
]
}
},
{
"lhs": "U_c",
"rhs": {
"op": "*",
"args": [
"beta_conv",
{
"op": "ifelse",
"args": [
{
"op": "<",
"args": [
"zeta_in",
0.0
]
},
{
"op": "*",
"args": [
{
"op": "max",
"args": [
{
"op": "/",
"args": [
{
"op": "*",
"args": [
"k_vk",
"V_r"
]
},
{
"op": "+",
"args": [
{
"op": "-",
"args": [
{
"op": "log",
"args": [
{
"op": "/",
"args": [
{
"op": "-",
"args": [
"z_atm_m",
"d_canopy"
]
},
"z_0m_canopy"
]
}
]
},
"psi_m_atm"
]
},
"psi_m_0"
]
}
]
},
{
"op": "*",
"args": [
0.01,
"one_ms"
]
}
]
},
{
"op": "^",
"args": [
{
"op": "max",
"args": [
{
"op": "/",
"args": [
{
"op": "*",
"args": [
{
"op": "/",
"args": [
{
"op": "/",
"args": [
"z_i",
"one_m"
]
},
{
"op": "/",
"args": [
{
"op": "-",
"args": [
"z_atm_m",
"d_canopy"
]
},
"one_m"
]
}
]
},
{
"op": "-",
"args": [
0.0,
"zeta_in"
]
}
]
},
"k_vk"
]
},
0.0
]
},
{
"op": "/",
"args": [
1.0,
3.0
]
}
]
}
]
},
"zero_ms"
]
}
]
}
},
{
"lhs": "V_a",
"rhs": {
"op": "max",
"args": [
{
"op": "sqrt",
"args": [
{
"op": "+",
"args": [
{
"op": "+",
"args": [
{
"op": "^",
"args": [
"u_atm",
2.0
]
},
{
"op": "^",
"args": [
"v_atm",
2.0
]
}
]
},
{
"op": "^",
"args": [
"U_c",
2.0
]
}
]
}
]
},
"one_ms"
]
}
},
{
"lhs": "u_star",
"rhs": {
"op": "max",
"args": [
{
"op": "/",
"args": [
{
"op": "*",
"args": [
"k_vk",
"V_a"
]
},
{
"op": "+",
"args": [
{
"op": "-",
"args": [
{
"op": "log",
"args": [
{
"op": "/",
"args": [
{
"op": "-",
"args": [
"z_atm_m",
"d_canopy"
]
},
"z_0m_canopy"
]
}
]
},
"psi_m_atm"
]
},
"psi_m_0"
]
}
]
},
{
"op": "*",
"args": [
0.01,
"one_ms"
]
}
]
}
},
{
"lhs": "r_am",
"rhs": {
"op": "/",
"args": [
"V_a",
{
"op": "^",
"args": [
"u_star",
2.0
]
}
]
}
},
{
"lhs": "r_ah",
"rhs": {
"op": "*",
"args": [
{
"op": "/",
"args": [
1.0,
{
"op": "*",
"args": [
{
"op": "^",
"args": [
"k_vk",
2.0
]
},
"V_a"
]
}
]
},
{
"op": "*",
"args": [
{
"op": "+",
"args": [
{
"op": "-",
"args": [
{
"op": "log",
"args": [
{
"op": "/",
"args": [
{
"op": "-",
"args": [
"z_atm_m",
"d_canopy"
]
},
"z_0m_canopy"
]
}
]
},
"psi_m_atm"
]
},
"psi_m_0"
]
},
{
"op": "+",
"args": [
{
"op": "-",
"args": [
{
"op": "log",
"args": [
{
"op": "/",
"args": [
{
"op": "-",
"args": [
"z_atm_h",
"d_canopy"
]
},
"z_0m_canopy"
]
}
]
},
"psi_h_atm"
]
},
"psi_h_0"
]
}
]
}
]
}
},
{
"lhs": "r_aw",
"rhs": {
"op": "*",
"args": [
{
"op": "/",
"args": [
1.0,
{
"op": "*",
"args": [
{
"op": "^",
"args": [
"k_vk",
2.0
]
},
"V_a"
]
}
]
},
{
"op": "*",
"args": [
{
"op": "+",
"args": [
{
"op": "-",
"args": [
{
"op": "log",
"args": [
{
"op": "/",
"args": [
{
"op": "-",
"args": [
"z_atm_m",
"d_canopy"
]
},
"z_0m_canopy"
]
}
]
},
"psi_m_atm"
]
},
"psi_m_0"
]
},
{
"op": "+",
"args": [
{
"op": "-",
"args": [
{
"op": "log",
"args": [
{
"op": "/",
"args": [
{
"op": "-",
"args": [
"z_atm_w",
"d_canopy"
]
},
"z_0m_canopy"
]
}
]
},
"psi_w_atm"
]
},
"psi_w_0"
]
}
]
}
]
}
},
{
"lhs": "U_can",
"rhs": {
"op": "ifelse",
"args": [
{
"op": ">=",
"args": [
"H_W",
1.0
]
},
{
"op": "*",
"args": [
{
"op": "*",
"args": [
{
"op": "*",
"args": [
"V_r",
{
"op": "/",
"args": [
2.0,
"pi_val"
]
}
]
},
{
"op": "/",
"args": [
{
"op": "log",
"args": [
{
"op": "max",
"args": [
{
"op": "/",
"args": [
{
"op": "-",
"args": [
"H_canyon",
"d_canopy"
]
},
"z_0m_canopy"
]
},
{
"op": "+",
"args": [
1.0,
1e-10
]
}
]
}
]
},
{
"op": "log",
"args": [
{
"op": "max",
"args": [
{
"op": "/",
"args": [
{
"op": "-",
"args": [
"z_atm_m",
"d_canopy"
]
},
"z_0m_canopy"
]
},
{
"op": "+",
"args": [
1.0,
1e-10
]
}
]
}
]
}
]
}
]
},
{
"op": "exp",
"args": [
{
"op": "*",
"args": [
{
"op": "-",
"args": [
0.0,
{
"op": "*",
"args": [
0.5,
"H_W"
]
}
]
},
{
"op": "-",
"args": [
1.0,
{
"op": "/",
"args": [
"H_w_est",
"H_canyon"
]
}
]
}
]
}
]
}
]
},
{
"op": "ifelse",
"args": [
{
"op": ">=",
"args": [
"H_W",
0.5
]
},
{
"op": "*",
"args": [
{
"op": "*",
"args": [
{
"op": "*",
"args": [
"V_r",
{
"op": "+",
"args": [
1.0,
{
"op": "*",
"args": [
{
"op": "*",
"args": [
2.0,
{
"op": "-",
"args": [
{
"op": "/",
"args": [
2.0,
"pi_val"
]
},
1.0
]
}
]
},
{
"op": "-",
"args": [
"H_W",
0.5
]
}
]
}
]
}
]
},
{
"op": "/",
"args": [
{
"op": "log",
"args": [
{
"op": "max",
"args": [
{
"op": "/",
"args": [
{
"op": "-",
"args": [
"H_canyon",
"d_canopy"
]
},
"z_0m_canopy"
]
},
{
"op": "+",
"args": [
1.0,
1e-10
]
}
]
}
]
},
{
"op": "log",
"args": [
{
"op": "max",
"args": [
{
"op": "/",
"args": [
{
"op": "-",
"args": [
"z_atm_m",
"d_canopy"
]
},
"z_0m_canopy"
]
},
{
"op": "+",
"args": [
1.0,
1e-10
]
}
]
}
]
}
]
}
]
},
{
"op": "exp",
"args": [
{
"op": "*",
"args": [
{
"op": "-",
"args": [
0.0,
{
"op": "*",
"args": [
0.5,
"H_W"
]
}
]
},
{
"op": "-",
"args": [
1.0,
{
"op": "/",
"args": [
"H_w_est",
"H_canyon"
]
}
]
}
]
}
]
}
]
},
{
"op": "*",
"args": [
{
"op": "*",
"args": [
"V_r",
{
"op": "/",
"args": [
{
"op": "log",
"args": [
{
"op": "max",
"args": [
{
"op": "/",
"args": [
{
"op": "-",
"args": [
"H_canyon",
"d_canopy"
]
},
"z_0m_canopy"
]
},
{
"op": "+",
"args": [
1.0,
1e-10
]
}
]
}
]
},
{
"op": "log",
"args": [
{
"op": "max",
"args": [
{
"op": "/",
"args": [
{
"op": "-",
"args": [
"z_atm_m",
"d_canopy"
]
},
"z_0m_canopy"
]
},
{
"op": "+",
"args": [
1.0,
1e-10
]
}
]
}
]
}
]
}
]
},
{
"op": "exp",
"args": [
{
"op": "*",
"args": [
{
"op": "-",
"args": [
0.0,
{
"op": "*",
"args": [
0.5,
"H_W"
]
}
]
},
{
"op": "-",
"args": [
1.0,
{
"op": "/",
"args": [
"H_w_est",
"H_canyon"
]
}
]
}
]
}
]
}
]
}
]
}
]
}
},
{
"lhs": "U_ac",
"rhs": {
"op": "sqrt",
"args": [
{
"op": "+",
"args": [
{
"op": "^",
"args": [
"U_can",
2.0
]
},
{
"op": "^",
"args": [
"u_star",
2.0
]
}
]
}
]
}
},
{
"lhs": "r_s_u",
"rhs": {
"op": "/",
"args": [
{
"op": "*",
"args": [
"rho_atm",
"C_p"
]
},
{
"op": "+",
"args": [
"h_c_free",
{
"op": "*",
"args": [
"h_c_forced",
"U_ac"
]
}
]
}
]
}
},
{
"lhs": "c_a_h",
"rhs": {
"op": "/",
"args": [
1.0,
"r_ah"
]
}
},
{
"lhs": "c_a_w",
"rhs": {
"op": "/",
"args": [
1.0,
"r_aw"
]
}
},
{
"lhs": "T_ac",
"rhs": {
"op": "/",
"args": [
{
"op": "+",
"args": [
{
"op": "+",
"args": [
{
"op": "+",
"args": [
{
"op": "+",
"args": [
{
"op": "+",
"args": [
{
"op": "*",
"args": [
"c_a_h",
"theta_atm"
]
},
{
"op": "*",
"args": [
{
"op": "/",
"args": [
"W_roof",
"r_s_u"
]
},
"T_g_roof"
]
}
]
},
{
"op": "*",
"args": [
{
"op": "/",
"args": [
{
"op": "*",
"args": [
{
"op": "-",
"args": [
1.0,
"W_roof"
]
},
"f_prvrd"
]
},
"r_s_u"
]
},
"T_g_prvrd"
]
}
]
},
{
"op": "*",
"args": [
{
"op": "/",
"args": [
{
"op": "*",
"args": [
{
"op": "-",
"args": [
1.0,
"W_roof"
]
},
{
"op": "-",
"args": [
1.0,
"f_prvrd"
]
}
]
},
"r_s_u"
]
},
"T_g_imprvrd"
]
}
]
},
{
"op": "*",
"args": [
{
"op": "/",
"args": [
{
"op": "*",
"args": [
{
"op": "-",
"args": [
1.0,
"W_roof"
]
},
"H_W"
]
},
"r_s_u"
]
},
"T_g_sunwall"
]
}
]
},
{
"op": "*",
"args": [
{
"op": "/",
"args": [
{
"op": "*",
"args": [
{
"op": "-",
"args": [
1.0,
"W_roof"
]
},
"H_W"
]
},
"r_s_u"
]
},
"T_g_shdwall"
]
}
]
},
{
"op": "+",
"args": [
{
"op": "+",
"args": [
{
"op": "+",
"args": [
{
"op": "+",
"args": [
{
"op": "+",
"args": [
"c_a_h",
{
"op": "/",
"args": [
"W_roof",
"r_s_u"
]
}
]
},
{
"op": "/",
"args": [
{
"op": "*",
"args": [
{
"op": "-",
"args": [
1.0,
"W_roof"
]
},
"f_prvrd"
]
},
"r_s_u"
]
}
]
},
{
"op": "/",
"args": [
{
"op": "*",
"args": [
{
"op": "-",
"args": [
1.0,
"W_roof"
]
},
{
"op": "-",
"args": [
1.0,
"f_prvrd"
]
}
]
},
"r_s_u"
]
}
]
},
{
"op": "/",
"args": [
{
"op": "*",
"args": [
{
"op": "-",
"args": [
1.0,
"W_roof"
]
},
"H_W"
]
},
"r_s_u"
]
}
]
},
{
"op": "/",
"args": [
{
"op": "*",
"args": [
{
"op": "-",
"args": [
1.0,
"W_roof"
]
},
"H_W"
]
},
"r_s_u"
]
}
]
}
]
}
},
{
"lhs": "q_ac",
"rhs": {
"op": "/",
"args": [
{
"op": "+",
"args": [
{
"op": "+",
"args": [
{
"op": "+",
"args": [
{
"op": "*",
"args": [
"c_a_w",
"q_atm"
]
},
{
"op": "*",
"args": [
{
"op": "*",
"args": [
{
"op": "/",
"args": [
"W_roof",
"r_s_u"
]
},
"f_wet_roof"
]
},
"q_g_roof"
]
}
]
},
{
"op": "*",
"args": [
{
"op": "/",
"args": [
{
"op": "*",
"args": [
{
"op": "-",
"args": [
1.0,
"W_roof"
]
},
"f_prvrd"
]
},
"r_s_u"
]
},
"q_g_prvrd"
]
}
]
},
{
"op": "*",
"args": [
{
"op": "*",
"args": [
{
"op": "/",
"args": [
{
"op": "*",
"args": [
{
"op": "-",
"args": [
1.0,
"W_roof"
]
},
{
"op": "-",
"args": [
1.0,
"f_prvrd"
]
}
]
},
"r_s_u"
]
},
"f_wet_imprvrd"
]
},
"q_g_imprvrd"
]
}
]
},
{
"op": "+",
"args": [
{
"op": "+",
"args": [
{
"op": "+",
"args": [
"c_a_w",
{
"op": "*",
"args": [
"f_wet_roof",
{
"op": "/",
"args": [
"W_roof",
"r_s_u"
]
}
]
}
]
},
{
"op": "/",
"args": [
{
"op": "*",
"args": [
{
"op": "-",
"args": [
1.0,
"W_roof"
]
},
"f_prvrd"
]
},
"r_s_u"
]
}
]
},
{
"op": "*",
"args": [
"f_wet_imprvrd",
{
"op": "/",
"args": [
{
"op": "*",
"args": [
{
"op": "-",
"args": [
1.0,
"W_roof"
]
},
{
"op": "-",
"args": [
1.0,
"f_prvrd"
]
}
]
},
"r_s_u"
]
}
]
}
]
}
]
}
},
{
"lhs": "H_roof",
"rhs": {
"op": "*",
"args": [
{
"op": "-",
"args": [
0.0,
{
"op": "/",
"args": [
{
"op": "*",
"args": [
"rho_atm",
"C_p"
]
},
"r_s_u"
]
}
]
},
{
"op": "-",
"args": [
"T_ac",
"T_g_roof"
]
}
]
}
},
{
"lhs": "H_prvrd",
"rhs": {
"op": "*",
"args": [
{
"op": "-",
"args": [
0.0,
{
"op": "/",
"args": [
{
"op": "*",
"args": [
"rho_atm",
"C_p"
]
},
"r_s_u"
]
}
]
},
{
"op": "-",
"args": [
"T_ac",
"T_g_prvrd"
]
}
]
}
},
{
"lhs": "H_imprvrd",
"rhs": {
"op": "*",
"args": [
{
"op": "-",
"args": [
0.0,
{
"op": "/",
"args": [
{
"op": "*",
"args": [
"rho_atm",
"C_p"
]
},
"r_s_u"
]
}
]
},
{
"op": "-",
"args": [
"T_ac",
"T_g_imprvrd"
]
}
]
}
},
{
"lhs": "H_sunwall",
"rhs": {
"op": "*",
"args": [
{
"op": "-",
"args": [
0.0,
{
"op": "/",
"args": [
{
"op": "*",
"args": [
"rho_atm",
"C_p"
]
},
"r_s_u"
]
}
]
},
{
"op": "-",
"args": [
"T_ac",
"T_g_sunwall"
]
}
]
}
},
{
"lhs": "H_shdwall",
"rhs": {
"op": "*",
"args": [
{
"op": "-",
"args": [
0.0,
{
"op": "/",
"args": [
{
"op": "*",
"args": [
"rho_atm",
"C_p"
]
},
"r_s_u"
]
}
]
},
{
"op": "-",
"args": [
"T_ac",
"T_g_shdwall"
]
}
]
}
},
{
"lhs": "H_total",
"rhs": {
"op": "+",
"args": [
{
"op": "*",
"args": [
"W_roof",
"H_roof"
]
},
{
"op": "*",
"args": [
{
"op": "-",
"args": [
1.0,
"W_roof"
]
},
{
"op": "+",
"args": [
{
"op": "+",
"args": [
{
"op": "*",
"args": [
"f_prvrd",
"H_prvrd"
]
},
{
"op": "*",
"args": [
{
"op": "-",
"args": [
1.0,
"f_prvrd"
]
},
"H_imprvrd"
]
}
]
},
{
"op": "+",
"args": [
{
"op": "*",
"args": [
"H_W",
"H_sunwall"
]
},
{
"op": "*",
"args": [
"H_W",
"H_shdwall"
]
}
]
}
]
}
]
}
]
}
},
{
"lhs": "E_roof",
"rhs": {
"op": "*",
"args": [
{
"op": "*",
"args": [
{
"op": "-",
"args": [
0.0,
{
"op": "/",
"args": [
"rho_atm",
"r_s_u"
]
}
]
},
"f_wet_roof"
]
},
{
"op": "-",
"args": [
"q_ac",
"q_g_roof"
]
}
]
}
},
{
"lhs": "E_prvrd",
"rhs": {
"op": "*",
"args": [
{
"op": "-",
"args": [
0.0,
{
"op": "/",
"args": [
"rho_atm",
"r_s_u"
]
}
]
},
{
"op": "-",
"args": [
"q_ac",
"q_g_prvrd"
]
}
]
}
},
{
"lhs": "E_imprvrd",
"rhs": {
"op": "*",
"args": [
{
"op": "*",
"args": [
{
"op": "-",
"args": [
0.0,
{
"op": "/",
"args": [
"rho_atm",
"r_s_u"
]
}
]
},
"f_wet_imprvrd"
]
},
{
"op": "-",
"args": [
"q_ac",
"q_g_imprvrd"
]
}
]
}
},
{
"lhs": "E_total",
"rhs": {
"op": "+",
"args": [
{
"op": "*",
"args": [
"W_roof",
"E_roof"
]
},
{
"op": "*",
"args": [
{
"op": "-",
"args": [
1.0,
"W_roof"
]
},
{
"op": "+",
"args": [
{
"op": "*",
"args": [
"f_prvrd",
"E_prvrd"
]
},
{
"op": "*",
"args": [
{
"op": "-",
"args": [
1.0,
"f_prvrd"
]
},
"E_imprvrd"
]
}
]
}
]
}
]
}
},
{
"lhs": "tau_x",
"rhs": {
"op": "*",
"args": [
{
"op": "-",
"args": [
0.0,
{
"op": "/",
"args": [
"rho_atm",
"r_am"
]
}
]
},
"u_atm"
]
}
},
{
"lhs": "tau_y",
"rhs": {
"op": "*",
"args": [
{
"op": "-",
"args": [
0.0,
{
"op": "/",
"args": [
"rho_atm",
"r_am"
]
}
]
},
"v_atm"
]
}
},
{
"lhs": "dH_roof_dT",
"rhs": {
"op": "*",
"args": [
{
"op": "*",
"args": [
"rho_atm",
"C_p"
]
},
{
"op": "/",
"args": [
{
"op": "*",
"args": [
{
"op": "+",
"args": [
{
"op": "+",
"args": [
{
"op": "+",
"args": [
{
"op": "+",
"args": [
"c_a_h",
{
"op": "/",
"args": [
{
"op": "*",
"args": [
{
"op": "-",
"args": [
1.0,
"W_roof"
]
},
"f_prvrd"
]
},
"r_s_u"
]
}
]
},
{
"op": "/",
"args": [
{
"op": "*",
"args": [
{
"op": "-",
"args": [
1.0,
"W_roof"
]
},
{
"op": "-",
"args": [
1.0,
"f_prvrd"
]
}
]
},
"r_s_u"
]
}
]
},
{
"op": "/",
"args": [
{
"op": "*",
"args": [
{
"op": "-",
"args": [
1.0,
"W_roof"
]
},
"H_W"
]
},
"r_s_u"
]
}
]
},
{
"op": "/",
"args": [
{
"op": "*",
"args": [
{
"op": "-",
"args": [
1.0,
"W_roof"
]
},
"H_W"
]
},
"r_s_u"
]
}
]
},
{
"op": "/",
"args": [
"W_roof",
"r_s_u"
]
}
]
},
{
"op": "*",
"args": [
"W_roof",
{
"op": "+",
"args": [
{
"op": "+",
"args": [
{
"op": "+",
"args": [
{
"op": "+",
"args": [
{
"op": "+",
"args": [
"c_a_h",
{
"op": "/",
"args": [
"W_roof",
"r_s_u"
]
}
]
},
{
"op": "/",
"args": [
{
"op": "*",
"args": [
{
"op": "-",
"args": [
1.0,
"W_roof"
]
},
"f_prvrd"
]
},
"r_s_u"
]
}
]
},
{
"op": "/",
"args": [
{
"op": "*",
"args": [
{
"op": "-",
"args": [
1.0,
"W_roof"
]
},
{
"op": "-",
"args": [
1.0,
"f_prvrd"
]
}
]
},
"r_s_u"
]
}
]
},
{
"op": "/",
"args": [
{
"op": "*",
"args": [
{
"op": "-",
"args": [
1.0,
"W_roof"
]
},
"H_W"
]
},
"r_s_u"
]
}
]
},
{
"op": "/",
"args": [
{
"op": "*",
"args": [
{
"op": "-",
"args": [
1.0,
"W_roof"
]
},
"H_W"
]
},
"r_s_u"
]
}
]
}
]
}
]
}
]
}
},
{
"lhs": "dH_prvrd_dT",
"rhs": {
"op": "*",
"args": [
{
"op": "*",
"args": [
"rho_atm",
"C_p"
]
},
{
"op": "/",
"args": [
{
"op": "*",
"args": [
{
"op": "+",
"args": [
{
"op": "+",
"args": [
{
"op": "+",
"args": [
{
"op": "+",
"args": [
"c_a_h",
{
"op": "/",
"args": [
"W_roof",
"r_s_u"
]
}
]
},
{
"op": "/",
"args": [
{
"op": "*",
"args": [
{
"op": "-",
"args": [
1.0,
"W_roof"
]
},
{
"op": "-",
"args": [
1.0,
"f_prvrd"
]
}
]
},
"r_s_u"
]
}
]
},
{
"op": "/",
"args": [
{
"op": "*",
"args": [
{
"op": "-",
"args": [
1.0,
"W_roof"
]
},
"H_W"
]
},
"r_s_u"
]
}
]
},
{
"op": "/",
"args": [
{
"op": "*",
"args": [
{
"op": "-",
"args": [
1.0,
"W_roof"
]
},
"H_W"
]
},
"r_s_u"
]
}
]
},
{
"op": "/",
"args": [
{
"op": "*",
"args": [
{
"op": "-",
"args": [
1.0,
"W_roof"
]
},
"f_prvrd"
]
},
"r_s_u"
]
}
]
},
{
"op": "*",
"args": [
{
"op": "*",
"args": [
{
"op": "*",
"args": [
{
"op": "-",
"args": [
1.0,
"W_roof"
]
},
"f_prvrd"
]
},
1.0
]
},
{
"op": "+",
"args": [
{
"op": "+",
"args": [
{
"op": "+",
"args": [
{
"op": "+",
"args": [
{
"op": "+",
"args": [
"c_a_h",
{
"op": "/",
"args": [
"W_roof",
"r_s_u"
]
}
]
},
{
"op": "/",
"args": [
{
"op": "*",
"args": [
{
"op": "-",
"args": [
1.0,
"W_roof"
]
},
"f_prvrd"
]
},
"r_s_u"
]
}
]
},
{
"op": "/",
"args": [
{
"op": "*",
"args": [
{
"op": "-",
"args": [
1.0,
"W_roof"
]
},
{
"op": "-",
"args": [
1.0,
"f_prvrd"
]
}
]
},
"r_s_u"
]
}
]
},
{
"op": "/",
"args": [
{
"op": "*",
"args": [
{
"op": "-",
"args": [
1.0,
"W_roof"
]
},
"H_W"
]
},
"r_s_u"
]
}
]
},
{
"op": "/",
"args": [
{
"op": "*",
"args": [
{
"op": "-",
"args": [
1.0,
"W_roof"
]
},
"H_W"
]
},
"r_s_u"
]
}
]
}
]
}
]
}
]
}
},
{
"lhs": "dH_imprvrd_dT",
"rhs": {
"op": "*",
"args": [
{
"op": "*",
"args": [
"rho_atm",
"C_p"
]
},
{
"op": "/",
"args": [
{
"op": "*",
"args": [
{
"op": "+",
"args": [
{
"op": "+",
"args": [
{
"op": "+",
"args": [
{
"op": "+",
"args": [
"c_a_h",
{
"op": "/",
"args": [
"W_roof",
"r_s_u"
]
}
]
},
{
"op": "/",
"args": [
{
"op": "*",
"args": [
{
"op": "-",
"args": [
1.0,
"W_roof"
]
},
"f_prvrd"
]
},
"r_s_u"
]
}
]
},
{
"op": "/",
"args": [
{
"op": "*",
"args": [
{
"op": "-",
"args": [
1.0,
"W_roof"
]
},
"H_W"
]
},
"r_s_u"
]
}
]
},
{
"op": "/",
"args": [
{
"op": "*",
"args": [
{
"op": "-",
"args": [
1.0,
"W_roof"
]
},
"H_W"
]
},
"r_s_u"
]
}
]
},
{
"op": "/",
"args": [
{
"op": "*",
"args": [
{
"op": "-",
"args": [
1.0,
"W_roof"
]
},
{
"op": "-",
"args": [
1.0,
"f_prvrd"
]
}
]
},
"r_s_u"
]
}
]
},
{
"op": "*",
"args": [
{
"op": "*",
"args": [
{
"op": "*",
"args": [
{
"op": "-",
"args": [
1.0,
"W_roof"
]
},
{
"op": "-",
"args": [
1.0,
"f_prvrd"
]
}
]
},
1.0
]
},
{
"op": "+",
"args": [
{
"op": "+",
"args": [
{
"op": "+",
"args": [
{
"op": "+",
"args": [
{
"op": "+",
"args": [
"c_a_h",
{
"op": "/",
"args": [
"W_roof",
"r_s_u"
]
}
]
},
{
"op": "/",
"args": [
{
"op": "*",
"args": [
{
"op": "-",
"args": [
1.0,
"W_roof"
]
},
"f_prvrd"
]
},
"r_s_u"
]
}
]
},
{
"op": "/",
"args": [
{
"op": "*",
"args": [
{
"op": "-",
"args": [
1.0,
"W_roof"
]
},
{
"op": "-",
"args": [
1.0,
"f_prvrd"
]
}
]
},
"r_s_u"
]
}
]
},
{
"op": "/",
"args": [
{
"op": "*",
"args": [
{
"op": "-",
"args": [
1.0,
"W_roof"
]
},
"H_W"
]
},
"r_s_u"
]
}
]
},
{
"op": "/",
"args": [
{
"op": "*",
"args": [
{
"op": "-",
"args": [
1.0,
"W_roof"
]
},
"H_W"
]
},
"r_s_u"
]
}
]
}
]
}
]
}
]
}
},
{
"lhs": "dH_sunwall_dT",
"rhs": {
"op": "*",
"args": [
{
"op": "*",
"args": [
"rho_atm",
"C_p"
]
},
{
"op": "/",
"args": [
{
"op": "*",
"args": [
{
"op": "+",
"args": [
{
"op": "+",
"args": [
{
"op": "+",
"args": [
{
"op": "+",
"args": [
"c_a_h",
{
"op": "/",
"args": [
"W_roof",
"r_s_u"
]
}
]
},
{
"op": "/",
"args": [
{
"op": "*",
"args": [
{
"op": "-",
"args": [
1.0,
"W_roof"
]
},
"f_prvrd"
]
},
"r_s_u"
]
}
]
},
{
"op": "/",
"args": [
{
"op": "*",
"args": [
{
"op": "-",
"args": [
1.0,
"W_roof"
]
},
{
"op": "-",
"args": [
1.0,
"f_prvrd"
]
}
]
},
"r_s_u"
]
}
]
},
{
"op": "/",
"args": [
{
"op": "*",
"args": [
{
"op": "-",
"args": [
1.0,
"W_roof"
]
},
"H_W"
]
},
"r_s_u"
]
}
]
},
{
"op": "/",
"args": [
{
"op": "*",
"args": [
{
"op": "-",
"args": [
1.0,
"W_roof"
]
},
"H_W"
]
},
"r_s_u"
]
}
]
},
{
"op": "*",
"args": [
{
"op": "*",
"args": [
{
"op": "*",
"args": [
{
"op": "-",
"args": [
1.0,
"W_roof"
]
},
"H_W"
]
},
1.0
]
},
{
"op": "+",
"args": [
{
"op": "+",
"args": [
{
"op": "+",
"args": [
{
"op": "+",
"args": [
{
"op": "+",
"args": [
"c_a_h",
{
"op": "/",
"args": [
"W_roof",
"r_s_u"
]
}
]
},
{
"op": "/",
"args": [
{
"op": "*",
"args": [
{
"op": "-",
"args": [
1.0,
"W_roof"
]
},
"f_prvrd"
]
},
"r_s_u"
]
}
]
},
{
"op": "/",
"args": [
{
"op": "*",
"args": [
{
"op": "-",
"args": [
1.0,
"W_roof"
]
},
{
"op": "-",
"args": [
1.0,
"f_prvrd"
]
}
]
},
"r_s_u"
]
}
]
},
{
"op": "/",
"args": [
{
"op": "*",
"args": [
{
"op": "-",
"args": [
1.0,
"W_roof"
]
},
"H_W"
]
},
"r_s_u"
]
}
]
},
{
"op": "/",
"args": [
{
"op": "*",
"args": [
{
"op": "-",
"args": [
1.0,
"W_roof"
]
},
"H_W"
]
},
"r_s_u"
]
}
]
}
]
}
]
}
]
}
},
{
"lhs": "dH_shdwall_dT",
"rhs": {
"op": "*",
"args": [
{
"op": "*",
"args": [
"rho_atm",
"C_p"
]
},
{
"op": "/",
"args": [
{
"op": "*",
"args": [
{
"op": "+",
"args": [
{
"op": "+",
"args": [
{
"op": "+",
"args": [
{
"op": "+",
"args": [
"c_a_h",
{
"op": "/",
"args": [
"W_roof",
"r_s_u"
]
}
]
},
{
"op": "/",
"args": [
{
"op": "*",
"args": [
{
"op": "-",
"args": [
1.0,
"W_roof"
]
},
"f_prvrd"
]
},
"r_s_u"
]
}
]
},
{
"op": "/",
"args": [
{
"op": "*",
"args": [
{
"op": "-",
"args": [
1.0,
"W_roof"
]
},
{
"op": "-",
"args": [
1.0,
"f_prvrd"
]
}
]
},
"r_s_u"
]
}
]
},
{
"op": "/",
"args": [
{
"op": "*",
"args": [
{
"op": "-",
"args": [
1.0,
"W_roof"
]
},
"H_W"
]
},
"r_s_u"
]
}
]
},
{
"op": "/",
"args": [
{
"op": "*",
"args": [
{
"op": "-",
"args": [
1.0,
"W_roof"
]
},
"H_W"
]
},
"r_s_u"
]
}
]
},
{
"op": "*",
"args": [
{
"op": "*",
"args": [
{
"op": "*",
"args": [
{
"op": "-",
"args": [
1.0,
"W_roof"
]
},
"H_W"
]
},
1.0
]
},
{
"op": "+",
"args": [
{
"op": "+",
"args": [
{
"op": "+",
"args": [
{
"op": "+",
"args": [
{
"op": "+",
"args": [
"c_a_h",
{
"op": "/",
"args": [
"W_roof",
"r_s_u"
]
}
]
},
{
"op": "/",
"args": [
{
"op": "*",
"args": [
{
"op": "-",
"args": [
1.0,
"W_roof"
]
},
"f_prvrd"
]
},
"r_s_u"
]
}
]
},
{
"op": "/",
"args": [
{
"op": "*",
"args": [
{
"op": "-",
"args": [
1.0,
"W_roof"
]
},
{
"op": "-",
"args": [
1.0,
"f_prvrd"
]
}
]
},
"r_s_u"
]
}
]
},
{
"op": "/",
"args": [
{
"op": "*",
"args": [
{
"op": "-",
"args": [
1.0,
"W_roof"
]
},
"H_W"
]
},
"r_s_u"
]
}
]
},
{
"op": "/",
"args": [
{
"op": "*",
"args": [
{
"op": "-",
"args": [
1.0,
"W_roof"
]
},
"H_W"
]
},
"r_s_u"
]
}
]
}
]
}
]
}
]
}
}
]
}
},
"equations": [
{
"_comment": "Parent → offline.S_atm",
"lhs": "UrbanCanopyModel.offline.S_atm",
"rhs": "S_atm"
},
{
"_comment": "Parent → offline.T_atm",
"lhs": "UrbanCanopyModel.offline.T_atm",
"rhs": "T_atm"
},
{
"_comment": "Parent → offline.P_atm",
"lhs": "UrbanCanopyModel.offline.P_atm",
"rhs": "P_atm"
},
{
"_comment": "Parent → offline.q_atm",
"lhs": "UrbanCanopyModel.offline.q_atm",
"rhs": "q_atm"
},
{
"_comment": "Parent → offline.W_atm",
"lhs": "UrbanCanopyModel.offline.W_atm",
"rhs": "W_atm"
},
{
"_comment": "Parent → offline.P_precip",
"lhs": "UrbanCanopyModel.offline.P_precip",
"rhs": "P_precip"
},
{
"lhs": "UrbanCanopyModel.atmos.z_prime_atm",
"rhs": "UrbanCanopyModel.offline.z_prime_atm"
},
{
"lhs": "UrbanCanopyModel.atmos.T_atm",
"rhs": "T_atm"
},
{
"lhs": "UrbanCanopyModel.atmos.P_atm",
"rhs": "P_atm"
},
{
"lhs": "UrbanCanopyModel.atmos.q_atm",
"rhs": "q_atm"
},
{
"lhs": "UrbanCanopyModel.atmos.z_0",
"rhs": "z_0"
},
{
"lhs": "UrbanCanopyModel.atmos.z_d",
"rhs": "z_d"
},
{
"lhs": "UrbanCanopyModel.rad.S_atm_dir_vis",
"rhs": "UrbanCanopyModel.offline.S_atm_dir_vis"
},
{
"lhs": "UrbanCanopyModel.rad.S_atm_dir_nir",
"rhs": "UrbanCanopyModel.offline.S_atm_dir_nir"
},
{
"lhs": "UrbanCanopyModel.rad.S_atm_dif_vis",
"rhs": "UrbanCanopyModel.offline.S_atm_dif_vis"
},
{
"lhs": "UrbanCanopyModel.rad.S_atm_dif_nir",
"rhs": "UrbanCanopyModel.offline.S_atm_dif_nir"
},
{
"lhs": "UrbanCanopyModel.rad.L_atm_down",
"rhs": "UrbanCanopyModel.offline.L_atm_down"
},
{
"lhs": "UrbanCanopyModel.rad.μ_zen",
"rhs": "μ_zen"
},
{
"lhs": "UrbanCanopyModel.rad.H_W",
"rhs": "H_W"
},
{
"lhs": "UrbanCanopyModel.rad.W_roof",
"rhs": "W_roof"
},
{
"lhs": "UrbanCanopyModel.rad.α_roof_dir_vis",
"rhs": "α_roof_dir_vis"
},
{
"lhs": "UrbanCanopyModel.rad.α_roof_dir_nir",
"rhs": "α_roof_dir_nir"
},
{
"lhs": "UrbanCanopyModel.rad.α_roof_dif_vis",
"rhs": "α_roof_dif_vis"
},
{
"lhs": "UrbanCanopyModel.rad.α_roof_dif_nir",
"rhs": "α_roof_dif_nir"
},
{
"lhs": "UrbanCanopyModel.rad.α_road_dir_vis",
"rhs": "α_road_dir_vis"
},
{
"lhs": "UrbanCanopyModel.rad.α_road_dir_nir",
"rhs": "α_road_dir_nir"
},
{
"lhs": "UrbanCanopyModel.rad.α_road_dif_vis",
"rhs": "α_road_dif_vis"
},
{
"lhs": "UrbanCanopyModel.rad.α_road_dif_nir",
"rhs": "α_road_dif_nir"
},
{
"lhs": "UrbanCanopyModel.rad.α_wall_dir_vis",
"rhs": "α_wall_dir_vis"
},
{
"lhs": "UrbanCanopyModel.rad.α_wall_dir_nir",
"rhs": "α_wall_dir_nir"
},
{
"lhs": "UrbanCanopyModel.rad.α_wall_dif_vis",
"rhs": "α_wall_dif_vis"
},
{
"lhs": "UrbanCanopyModel.rad.α_wall_dif_nir",
"rhs": "α_wall_dif_nir"
},
{
"lhs": "UrbanCanopyModel.rad.ε_roof",
"rhs": "ε_roof"
},
{
"lhs": "UrbanCanopyModel.rad.ε_road",
"rhs": "ε_road"
},
{
"lhs": "UrbanCanopyModel.rad.ε_wall",
"rhs": "ε_wall"
},
{
"lhs": "UrbanCanopyModel.rad.T_roof",
"rhs": "T_g_roof"
},
{
"lhs": "UrbanCanopyModel.rad.T_road",
"rhs": "T_g_imprvrd"
},
{
"lhs": "UrbanCanopyModel.rad.T_sunwall",
"rhs": "T_g_sunwall"
},
{
"lhs": "UrbanCanopyModel.rad.T_shdwall",
"rhs": "T_g_shdwall"
},
{
"lhs": "UrbanCanopyModel.flux.u_atm",
"rhs": "UrbanCanopyModel.offline.u_atm"
},
{
"lhs": "UrbanCanopyModel.flux.v_atm",
"rhs": "UrbanCanopyModel.offline.v_atm"
},
{
"lhs": "UrbanCanopyModel.flux.theta_atm",
"rhs": "UrbanCanopyModel.offline.theta_atm"
},
{
"lhs": "UrbanCanopyModel.flux.q_atm",
"rhs": "q_atm"
},
{
"lhs": "UrbanCanopyModel.flux.rho_atm",
"rhs": "UrbanCanopyModel.atmos.rho_atm"
},
{
"lhs": "UrbanCanopyModel.flux.z_atm_m",
"rhs": "UrbanCanopyModel.atmos.z_atm"
},
{
"lhs": "UrbanCanopyModel.flux.z_atm_h",
"rhs": "UrbanCanopyModel.atmos.z_atm"
},
{
"lhs": "UrbanCanopyModel.flux.z_atm_w",
"rhs": "UrbanCanopyModel.atmos.z_atm"
},
{
"lhs": "UrbanCanopyModel.flux.H_W",
"rhs": "H_W"
},
{
"lhs": "UrbanCanopyModel.flux.H_canyon",
"rhs": "H_canyon"
},
{
"lhs": "UrbanCanopyModel.flux.W_roof",
"rhs": "W_roof"
},
{
"lhs": "UrbanCanopyModel.flux.f_prvrd",
"rhs": "f_prvrd"
},
{
"lhs": "UrbanCanopyModel.flux.H_w_est",
"rhs": "H_w_est"
},
{
"lhs": "UrbanCanopyModel.flux.T_g_roof",
"rhs": "T_g_roof"
},
{
"lhs": "UrbanCanopyModel.flux.T_g_prvrd",
"rhs": "T_g_prvrd"
},
{
"lhs": "UrbanCanopyModel.flux.T_g_imprvrd",
"rhs": "T_g_imprvrd"
},
{
"lhs": "UrbanCanopyModel.flux.T_g_sunwall",
"rhs": "T_g_sunwall"
},
{
"lhs": "UrbanCanopyModel.flux.T_g_shdwall",
"rhs": "T_g_shdwall"
},
{
"lhs": "UrbanCanopyModel.flux.q_g_roof",
"rhs": "q_g_roof"
},
{
"lhs": "UrbanCanopyModel.flux.q_g_prvrd",
"rhs": "q_g_prvrd"
},
{
"lhs": "UrbanCanopyModel.flux.q_g_imprvrd",
"rhs": "q_g_imprvrd"
},
{
"lhs": "UrbanCanopyModel.flux.f_wet_roof",
"rhs": "f_wet_roof"
},
{
"lhs": "UrbanCanopyModel.flux.f_wet_imprvrd",
"rhs": "f_wet_imprvrd"
},
{
"lhs": "UrbanCanopyModel.flux.zeta_in",
"rhs": "zeta_in"
}
],
"tests": [
{
"description": "Model loads and all subsystems initialize without error",
"time_span": {
"start": 0.0,
"end": 1.0
},
"assertions": [
{
"time": 0.0,
"variable": "UrbanCanopyModel.flux.T_ac",
"expected": 296.0,
"tolerance": {
"rel": 0.05
}
},
{
"time": 0.0,
"variable": "UrbanCanopyModel.flux.H_total",
"expected": 98.38416414890685,
"tolerance": {
"rel": 1e-05
}
},
{
"time": 0.0,
"variable": "UrbanCanopyModel.rad.S_net_total",
"expected": 422.7339093856878,
"tolerance": {
"rel": 1e-05
}
}
],
"id": "structural_load"
},
{
"description": "CLMUAtmosphere reproduces canonical air density at default conditions (q=0.01, P=101325, T=293.15)",
"time_span": {
"start": 0.0,
"end": 1.0
},
"assertions": [
{
"time": 0.0,
"variable": "UrbanCanopyModel.atmos.rho_atm",
"expected": 1.1968760398898206,
"tolerance": {
"rel": 1e-08
}
}
],
"id": "atmos_rho_canonical"
},
{
"description": "UCL air temperature is bounded between atmospheric and surface temperatures",
"time_span": {
"start": 0.0,
"end": 1.0
},
"assertions": [
{
"time": 0.0,
"variable": "UrbanCanopyModel.flux.T_ac",
"expected": 296.0,
"tolerance": {
"rel": 0.05
}
}
],
"id": "flux_T_ac_bounds"
},
{
"description": "Total evaporation E_total is positive (drying: surface drier than air)",
"time_span": {
"start": 0.0,
"end": 1.0
},
"assertions": [
{
"time": 0.0,
"variable": "UrbanCanopyModel.flux.E_total",
"expected": 1e-05,
"tolerance": {
"rel": 100.0
}
}
],
"id": "flux_E_total_sign"
},
{
"description": "Net longwave is positive (net upward emission from warm surfaces)",
"time_span": {
"start": 0.0,
"end": 1.0
},
"assertions": [
{
"time": 0.0,
"variable": "UrbanCanopyModel.rad.L_net_total",
"expected": 78.83055675488629,
"tolerance": {
"rel": 1e-05
}
}
],
"id": "rad_L_net_total_sign"
}
],
"expression_templates": {
"band_det": {
"params": [
"a_r",
"a_w"
],
"body": {
"op": "-",
"args": [
{
"op": "-",
"args": [
1.0,
{
"op": "^",
"args": [
{
"op": "*",
"args": [
"a_w",
"T_ww"
]
},
2.0
]
}
]
},
{
"op": "*",
"args": [
{
"op": "*",
"args": [
{
"op": "*",
"args": [
2.0,
{
"op": "*",
"args": [
"a_w",
"T_rw"
]
}
]
},
{
"op": "*",
"args": [
"a_r",
"T_wr"
]
}
]
},
{
"op": "+",
"args": [
1.0,
{
"op": "*",
"args": [
"a_w",
"T_ww"
]
}
]
}
]
}
]
}
},
"band_net_road": {
"params": [
"a_r",
"a_w",
"S_r",
"S_sw",
"S_sh",
"det_var"
],
"body": {
"op": "*",
"args": [
{
"op": "-",
"args": [
1.0,
"a_r"
]
},
{
"op": "/",
"args": [
{
"op": "+",
"args": [
{
"op": "+",
"args": [
{
"op": "*",
"args": [
{
"op": "-",
"args": [
1.0,
{
"op": "^",
"args": [
{
"op": "*",
"args": [
"a_w",
"T_ww"
]
},
2.0
]
}
]
},
"S_r"
]
},
{
"op": "*",
"args": [
{
"op": "*",
"args": [
{
"op": "*",
"args": [
"a_w",
"T_rw"
]
},
{
"op": "+",
"args": [
1.0,
{
"op": "*",
"args": [
"a_w",
"T_ww"
]
}
]
}
]
},
"S_sw"
]
}
]
},
{
"op": "*",
"args": [
{
"op": "*",
"args": [
{
"op": "*",
"args": [
"a_w",
"T_rw"
]
},
{
"op": "+",
"args": [
1.0,
{
"op": "*",
"args": [
"a_w",
"T_ww"
]
}
]
}
]
},
"S_sh"
]
}
]
},
"det_var"
]
}
]
}
},
"band_net_sw": {
"params": [
"a_r",
"a_w",
"S_r",
"S_sw",
"S_sh",
"det_var"
],
"body": {
"op": "*",
"args": [
{
"op": "-",
"args": [
1.0,
"a_w"
]
},
{
"op": "/",
"args": [
{
"op": "+",
"args": [
{
"op": "+",
"args": [
{
"op": "*",
"args": [
{
"op": "*",
"args": [
{
"op": "*",
"args": [
"a_r",
"T_wr"
]
},
{
"op": "+",
"args": [
1.0,
{
"op": "*",
"args": [
"a_w",
"T_ww"
]
}
]
}
]
},
"S_r"
]
},
{
"op": "*",
"args": [
{
"op": "-",
"args": [
1.0,
{
"op": "*",
"args": [
{
"op": "*",
"args": [
"a_w",
"T_rw"
]
},
{
"op": "*",
"args": [
"a_r",
"T_wr"
]
}
]
}
]
},
"S_sw"
]
}
]
},
{
"op": "*",
"args": [
{
"op": "+",
"args": [
{
"op": "*",
"args": [
"a_w",
"T_ww"
]
},
{
"op": "*",
"args": [
{
"op": "*",
"args": [
"a_w",
"T_rw"
]
},
{
"op": "*",
"args": [
"a_r",
"T_wr"
]
}
]
}
]
},
"S_sh"
]
}
]
},
"det_var"
]
}
]
}
},
"band_net_sh": {
"params": [
"a_r",
"a_w",
"S_r",
"S_sw",
"S_sh",
"det_var"
],
"body": {
"op": "*",
"args": [
{
"op": "-",
"args": [
1.0,
"a_w"
]
},
{
"op": "/",
"args": [
{
"op": "+",
"args": [
{
"op": "+",
"args": [
{
"op": "*",
"args": [
{
"op": "*",
"args": [
{
"op": "*",
"args": [
"a_r",
"T_wr"
]
},
{
"op": "+",
"args": [
1.0,
{
"op": "*",
"args": [
"a_w",
"T_ww"
]
}
]
}
]
},
"S_r"
]
},
{
"op": "*",
"args": [
{
"op": "+",
"args": [
{
"op": "*",
"args": [
"a_w",
"T_ww"
]
},
{
"op": "*",
"args": [
{
"op": "*",
"args": [
"a_w",
"T_rw"
]
},
{
"op": "*",
"args": [
"a_r",
"T_wr"
]
}
]
}
]
},
"S_sw"
]
}
]
},
{
"op": "*",
"args": [
{
"op": "-",
"args": [
1.0,
{
"op": "*",
"args": [
{
"op": "*",
"args": [
"a_w",
"T_rw"
]
},
{
"op": "*",
"args": [
"a_r",
"T_wr"
]
}
]
}
]
},
"S_sh"
]
}
]
},
"det_var"
]
}
]
}
},
"band_refl_sky": {
"params": [
"S_r",
"S_sw",
"S_sh",
"net_road",
"net_sw",
"net_sh"
],
"body": {
"op": "-",
"args": [
{
"op": "+",
"args": [
"S_r",
{
"op": "*",
"args": [
{
"op": "+",
"args": [
"S_sw",
"S_sh"
]
},
"H_W"
]
}
]
},
{
"op": "+",
"args": [
"net_road",
{
"op": "*",
"args": [
{
"op": "+",
"args": [
"net_sw",
"net_sh"
]
},
"H_W"
]
}
]
}
]
}
}
}
}