Version: dev

Clark1996HeatFluxProfile

Vertical profile of fire-induced sensible (F_s) and latent (F_l) heat fluxes via the simple e-folding extinction-depth formulation of Clark et al. (1996), Eq. 10. F_s(z) = F_s_sfc * exp(-z/alpha_ext); F_l(z) = F_l_sfc * exp(-z/alpha_ext) with alpha_ext = 50 m. Migrated from WildlandFire.jl@126976f2 src/clark1996.jl:206 (`Clark1996HeatFluxProfile` @component). Observed-only: z, F_s_sfc, F_l_sfc are inputs (parameters); F_s, F_l are algebraic outputs.

Domain
wildland_fire
Subdomain
clark1996
Type
model
.esm schema
1.0.0
Source
components/wildland_fire/clark1996/heat_flux_profile.esm
Tags
#wildland_fire #clark1996 #model #heat_flux_profile #observed-only

Description

Vertical profile of fire-induced sensible (F_s) and latent (F_l) heat fluxes via the simple e-folding extinction-depth formulation of Clark et al. (1996), Eq. 10. F_s(z) = F_s_sfc * exp(-z/alpha_ext); F_l(z) = F_l_sfc * exp(-z/alpha_ext) with alpha_ext = 50 m. Migrated from WildlandFire.jl@126976f2 src/clark1996.jl:206 (Clark1996HeatFluxProfile @component). Observed-only: z, F_s_sfc, F_l_sfc are inputs (parameters); F_s, F_l are algebraic outputs.

Reference

_source_ref: WildlandFire.jl@126976f2508ceacca6c486b21ae6da5b168c6f46:src/clark1996.jl:206 Upstream Clark1996HeatFluxProfile is an MTK @component whose three inputs (z, F_s_sfc, F_l_sfc) are @parameters and whose two outputs (F_s, F_l) are time-indexed @variables with one algebraic equation each. Two upstream @constants are declared: alpha_ext (the e-folding extinction depth, 50 m) and one_m (a unit-balancing literal, 1 m). Following the wind_profile.esm pattern (components/wildland_fire/clark1996/wind_profile.esm), upstream @constants are preserved as parameters with their upstream default values to maintain 1:1 fidelity with the upstream component — even when, as with one_m here, they are declared but unused in the equation (upstream keeps it for symmetry with sibling Clark1996 components).

F_s_sfc and F_l_sfc have no defaults upstream (they are driven by a parent surface-flux component); ESM requires concrete defaults for standalone simulation, so we declare them as 0.0 W/m^2 (the trivial null-fire case, matching the convention used for similarly-driven inputs in other observed-only migrations).

Tolerance rationale (model-level rel=1e-12): observed-only single-equation algebraic system per output (no ODE integration); each equation is exp + a single multiply on hardware-supported intrinsics — float64 roundoff is at the ULP level (~1e-15). 1e-12 is comfortably above ULP and far below any plausible physical-discrimination scale on W/m^2 heat-flux magnitudes._

Parameters

NameUnitsDefaultDescription
zm0.0Height above ground level
F_s_sfcW/m^20.0Sensible heat flux at the surface (z = 0). Upstream has no default; 0 W/m^2 is the trivial null-fire case for standalone simulation.
F_l_sfcW/m^20.0Latent heat flux at the surface (z = 0). Upstream has no default; 0 W/m^2 is the trivial null-fire case for standalone simulation.
alpha_extm50.0Heat flux e-folding extinction depth (upstream @constant; Clark et al. 1996 Eq. 10 default = 50 m)
one_mm1.0Reference length (upstream @constant; declared but unused — preserved for 1:1 structural fidelity with the upstream component)

Observed

NameUnitsDefaultDescription
F_sW/m^2Sensible heat flux at height z
F_lW/m^2Latent heat flux at height z

Observed expressions

$$ F_{s} = F_{s\,sfc} \cdot e^{\frac{-z}{alpha_{ext}}} $$

Sensible heat flux at height z

$$ F_{l} = F_{l\,sfc} \cdot e^{\frac{-z}{alpha_{ext}}} $$

Latent heat flux at height z

Analyses

heat_flux_profile_curve

Sensible and latent heat flux profiles vs. height — reproduces the canonical Clark et al. (1996) Eq. 10 e-folding decay from the surface (F_s = 100 kW/m^2, F_l = 50 kW/m^2) through 250 m (~5 extinction depths) where the profile is effectively extinguished. Surface fluxes representative of a moderately intense forest fire (Walker, 1981; p. 180 of Clark et al., 1996).

Time span: 0.0 → 1.0

Swept over: z

Sensible heat flux F_s (W/m^2) vs. height z (m) — Clark et al. (1996) Eq. 10.

Latent heat flux F_l (W/m^2) vs. height z (m) — Clark et al. (1996) Eq. 10.

extinction_depth_sensitivity

Sensitivity of the heat flux profile to alpha_ext — shorter e-folding depths concentrate the heat flux near the surface, while longer depths transport heat further aloft. Reveals how the extinction depth controls vertical coupling between fire and atmosphere.

Time span: 0.0 → 1.0

Swept over: z, alpha_ext

Sensible heat flux F_s over the (z, alpha_ext) plane — surfaces how the extinction depth controls the vertical reach of fire-induced heating.

Raw .esm

Raw .esm JSON (this component)
{
  "reference": {
    "notes": "source_ref: WildlandFire.jl@126976f2508ceacca6c486b21ae6da5b168c6f46:src/clark1996.jl:206\nUpstream `Clark1996HeatFluxProfile` is an MTK `@component` whose three inputs (z, F_s_sfc, F_l_sfc) are `@parameters` and whose two outputs (F_s, F_l) are time-indexed `@variables` with one algebraic equation each. Two upstream `@constants` are declared: `alpha_ext` (the e-folding extinction depth, 50 m) and `one_m` (a unit-balancing literal, 1 m). Following the wind_profile.esm pattern (components/wildland_fire/clark1996/wind_profile.esm), upstream `@constants` are preserved as parameters with their upstream default values to maintain 1:1 fidelity with the upstream component — even when, as with `one_m` here, they are declared but unused in the equation (upstream keeps it for symmetry with sibling Clark1996 components).\n\nF_s_sfc and F_l_sfc have no defaults upstream (they are driven by a parent surface-flux component); ESM requires concrete defaults for standalone simulation, so we declare them as 0.0 W/m^2 (the trivial null-fire case, matching the convention used for similarly-driven inputs in other observed-only migrations).\n\nTolerance rationale (model-level rel=1e-12): observed-only single-equation algebraic system per output (no ODE integration); each equation is exp + a single multiply on hardware-supported intrinsics — float64 roundoff is at the ULP level (~1e-15). 1e-12 is comfortably above ULP and far below any plausible physical-discrimination scale on W/m^2 heat-flux magnitudes."
  },
  "tolerance": {
    "rel": 1e-12
  },
  "variables": {
    "z": {
      "type": "parameter",
      "units": "m",
      "default": 0.0,
      "description": "Height above ground level"
    },
    "F_s_sfc": {
      "type": "parameter",
      "units": "W/m^2",
      "default": 0.0,
      "description": "Sensible heat flux at the surface (z = 0). Upstream has no default; 0 W/m^2 is the trivial null-fire case for standalone simulation."
    },
    "F_l_sfc": {
      "type": "parameter",
      "units": "W/m^2",
      "default": 0.0,
      "description": "Latent heat flux at the surface (z = 0). Upstream has no default; 0 W/m^2 is the trivial null-fire case for standalone simulation."
    },
    "alpha_ext": {
      "type": "parameter",
      "units": "m",
      "default": 50.0,
      "description": "Heat flux e-folding extinction depth (upstream @constant; Clark et al. 1996 Eq. 10 default = 50 m)"
    },
    "one_m": {
      "type": "parameter",
      "units": "m",
      "default": 1.0,
      "description": "Reference length (upstream @constant; declared but unused — preserved for 1:1 structural fidelity with the upstream component)"
    },
    "F_s": {
      "type": "unknown",
      "units": "W/m^2",
      "description": "Sensible heat flux at height z"
    },
    "F_l": {
      "type": "unknown",
      "units": "W/m^2",
      "description": "Latent heat flux at height z"
    }
  },
  "equations": [
    {
      "lhs": "F_s",
      "rhs": {
        "op": "*",
        "args": [
          "F_s_sfc",
          {
            "op": "exp",
            "args": [
              {
                "op": "/",
                "args": [
                  {
                    "op": "-",
                    "args": [
                      "z"
                    ]
                  },
                  "alpha_ext"
                ]
              }
            ]
          }
        ]
      }
    },
    {
      "lhs": "F_l",
      "rhs": {
        "op": "*",
        "args": [
          "F_l_sfc",
          {
            "op": "exp",
            "args": [
              {
                "op": "/",
                "args": [
                  {
                    "op": "-",
                    "args": [
                      "z"
                    ]
                  },
                  "alpha_ext"
                ]
              }
            ]
          }
        ]
      }
    }
  ],
  "tests": [
    {
      "id": "surface",
      "description": "At ground level (z = 0), F_s = F_s_sfc and F_l = F_l_sfc — the boundary condition where the profile equals the supplied surface flux. exp(-0/50) = 1.",
      "parameter_overrides": {
        "z": 0.0,
        "F_s_sfc": 100000.0,
        "F_l_sfc": 50000.0
      },
      "time_span": {
        "start": 0.0,
        "end": 1.0
      },
      "assertions": [
        {
          "variable": "F_s",
          "time": 0.0,
          "expected": 100000.0
        },
        {
          "variable": "F_l",
          "time": 0.0,
          "expected": 50000.0
        }
      ]
    },
    {
      "id": "shallow_z25",
      "description": "Below one extinction depth (z = 25 m, half of alpha_ext). exp(-0.5) ≈ 0.6065 → fluxes retain ~60% of their surface value.",
      "parameter_overrides": {
        "z": 25.0,
        "F_s_sfc": 100000.0,
        "F_l_sfc": 50000.0
      },
      "time_span": {
        "start": 0.0,
        "end": 1.0
      },
      "assertions": [
        {
          "variable": "F_s",
          "time": 0.0,
          "expected": 60653.06597126334
        },
        {
          "variable": "F_l",
          "time": 0.0,
          "expected": 30326.53298563167
        }
      ]
    },
    {
      "id": "one_efold",
      "description": "At one extinction depth (z = alpha_ext = 50 m), exp(-1) ≈ 0.3679 — the defining e-folding height.",
      "parameter_overrides": {
        "z": 50.0,
        "F_s_sfc": 100000.0,
        "F_l_sfc": 50000.0
      },
      "time_span": {
        "start": 0.0,
        "end": 1.0
      },
      "assertions": [
        {
          "variable": "F_s",
          "time": 0.0,
          "expected": 36787.94411714423
        },
        {
          "variable": "F_l",
          "time": 0.0,
          "expected": 18393.972058572115
        }
      ]
    },
    {
      "id": "two_efold",
      "description": "At two extinction depths (z = 100 m), exp(-2) ≈ 0.1353 — verifies exponential decay of the profile.",
      "parameter_overrides": {
        "z": 100.0,
        "F_s_sfc": 100000.0,
        "F_l_sfc": 50000.0
      },
      "time_span": {
        "start": 0.0,
        "end": 1.0
      },
      "assertions": [
        {
          "variable": "F_s",
          "time": 0.0,
          "expected": 13533.52832366127
        },
        {
          "variable": "F_l",
          "time": 0.0,
          "expected": 6766.764161830635
        }
      ]
    },
    {
      "id": "three_efold",
      "description": "At three extinction depths (z = 150 m), exp(-3) ≈ 0.0498 — fluxes have decayed to ~5% of surface values.",
      "parameter_overrides": {
        "z": 150.0,
        "F_s_sfc": 100000.0,
        "F_l_sfc": 50000.0
      },
      "time_span": {
        "start": 0.0,
        "end": 1.0
      },
      "assertions": [
        {
          "variable": "F_s",
          "time": 0.0,
          "expected": 4978.706836786395
        },
        {
          "variable": "F_l",
          "time": 0.0,
          "expected": 2489.3534183931974
        }
      ]
    },
    {
      "id": "five_efold_aloft",
      "description": "Far aloft (z = 250 m = 5 * alpha_ext), exp(-5) ≈ 0.0067 — confirms the profile is effectively extinguished at this altitude.",
      "parameter_overrides": {
        "z": 250.0,
        "F_s_sfc": 100000.0,
        "F_l_sfc": 50000.0
      },
      "time_span": {
        "start": 0.0,
        "end": 1.0
      },
      "assertions": [
        {
          "variable": "F_s",
          "time": 0.0,
          "expected": 673.7946999085467
        },
        {
          "variable": "F_l",
          "time": 0.0,
          "expected": 336.89734995427335
        }
      ]
    },
    {
      "id": "alpha_override",
      "description": "Override the @constant alpha_ext to verify it is wired correctly. With alpha_ext = 100 m and z = 30 m, exp(-0.3) ≈ 0.7408 — a deeper extinction depth than the upstream default.",
      "parameter_overrides": {
        "z": 30.0,
        "F_s_sfc": 100000.0,
        "F_l_sfc": 50000.0,
        "alpha_ext": 100.0
      },
      "time_span": {
        "start": 0.0,
        "end": 1.0
      },
      "assertions": [
        {
          "variable": "F_s",
          "time": 0.0,
          "expected": 74081.8220681718
        },
        {
          "variable": "F_l",
          "time": 0.0,
          "expected": 37040.9110340859
        }
      ]
    },
    {
      "id": "asymmetric_surface_fluxes",
      "description": "Independent F_s_sfc (200 kW/m^2) and F_l_sfc (80 kW/m^2) at z = 75 m (1.5 e-folds): verifies F_s and F_l are independently scaled by their respective surface inputs.",
      "parameter_overrides": {
        "z": 75.0,
        "F_s_sfc": 200000.0,
        "F_l_sfc": 80000.0
      },
      "time_span": {
        "start": 0.0,
        "end": 1.0
      },
      "assertions": [
        {
          "variable": "F_s",
          "time": 0.0,
          "expected": 44626.032029685965
        },
        {
          "variable": "F_l",
          "time": 0.0,
          "expected": 17850.412811874387
        }
      ]
    },
    {
      "id": "zero_surface_flux",
      "description": "Zero surface flux (no fire). F_s and F_l vanish identically at any z, regardless of altitude — sanity check the multiplicative coupling.",
      "parameter_overrides": {
        "z": 50.0,
        "F_s_sfc": 0.0,
        "F_l_sfc": 0.0
      },
      "time_span": {
        "start": 0.0,
        "end": 1.0
      },
      "assertions": [
        {
          "variable": "F_s",
          "time": 0.0,
          "expected": 0.0,
          "tolerance": {
            "abs": 1e-15
          }
        },
        {
          "variable": "F_l",
          "time": 0.0,
          "expected": 0.0,
          "tolerance": {
            "abs": 1e-15
          }
        }
      ]
    }
  ],
  "analyses": [
    {
      "id": "heat_flux_profile_curve",
      "description": "Sensible and latent heat flux profiles vs. height — reproduces the canonical Clark et al. (1996) Eq. 10 e-folding decay from the surface (F_s = 100 kW/m^2, F_l = 50 kW/m^2) through 250 m (~5 extinction depths) where the profile is effectively extinguished. Surface fluxes representative of a moderately intense forest fire (Walker, 1981; p. 180 of Clark et al., 1996).",
      "initial_state": {},
      "parameters": {
        "F_s_sfc": 100000.0,
        "F_l_sfc": 50000.0
      },
      "time_span": {
        "start": 0.0,
        "end": 1.0
      },
      "parameter_sweep": {
        "type": "cartesian",
        "dimensions": [
          {
            "parameter": "z",
            "range": {
              "start": 0.0,
              "stop": 250.0,
              "count": 26,
              "scale": "linear"
            }
          }
        ]
      },
      "plots": [
        {
          "id": "F_s_vs_z",
          "type": "line",
          "description": "Sensible heat flux F_s (W/m^2) vs. height z (m) — Clark et al. (1996) Eq. 10.",
          "x": {
            "variable": "z",
            "label": "Height z (m)"
          },
          "y": {
            "variable": "F_s",
            "label": "Sensible heat flux F_s (W/m^2)"
          }
        },
        {
          "id": "F_l_vs_z",
          "type": "line",
          "description": "Latent heat flux F_l (W/m^2) vs. height z (m) — Clark et al. (1996) Eq. 10.",
          "x": {
            "variable": "z",
            "label": "Height z (m)"
          },
          "y": {
            "variable": "F_l",
            "label": "Latent heat flux F_l (W/m^2)"
          }
        }
      ]
    },
    {
      "id": "extinction_depth_sensitivity",
      "description": "Sensitivity of the heat flux profile to alpha_ext — shorter e-folding depths concentrate the heat flux near the surface, while longer depths transport heat further aloft. Reveals how the extinction depth controls vertical coupling between fire and atmosphere.",
      "initial_state": {},
      "parameters": {
        "F_s_sfc": 100000.0,
        "F_l_sfc": 50000.0
      },
      "time_span": {
        "start": 0.0,
        "end": 1.0
      },
      "parameter_sweep": {
        "type": "cartesian",
        "dimensions": [
          {
            "parameter": "z",
            "range": {
              "start": 0.0,
              "stop": 250.0,
              "count": 21,
              "scale": "linear"
            }
          },
          {
            "parameter": "alpha_ext",
            "range": {
              "start": 25.0,
              "stop": 100.0,
              "count": 4,
              "scale": "linear"
            }
          }
        ]
      },
      "plots": [
        {
          "id": "F_s_heatmap",
          "type": "heatmap",
          "description": "Sensible heat flux F_s over the (z, alpha_ext) plane — surfaces how the extinction depth controls the vertical reach of fire-induced heating.",
          "x": {
            "variable": "z",
            "label": "Height z (m)"
          },
          "y": {
            "variable": "alpha_ext",
            "label": "Extinction depth alpha_ext (m)"
          },
          "value": {
            "variable": "F_s",
            "reduce": "final"
          }
        }
      ]
    }
  ]
}