V-CPL-03 — shrink/swell exact endpoints (6 permutations + WithChi law)

Tags: ale, volume_change, swelling, chi, mass_conservation

References:

  • FDS Verification Guide shrink_swell (endpoint concept)
  • Technical reference Ch. 10/11 (volumetric strain model)

Problem statement

FDS verifies exact final thickness/density for ρproduct ≷ ρreactant permutations. Under OUR volumetric-strain model the endpoint follows from (technical reference Ch. 10/11; src/Physics/volume_change.jl):

V̇/V = θ = Σⱼ (γⱼ/ρⱼ) ω̇ⱼ

with ω̇ⱼ the reaction mass rates [kg/m³/s]. For a single reaction A → Σⱼ yⱼ Bⱼ (Σyⱼ = 1) at rate r: ω̇A = −r, ω̇Bⱼ = +yⱼ r, so per cell

dV = (γA/ρA − Σⱼ yⱼ γⱼ/ρⱼ) dmA (r V dt = −dmA)

— LINEAR in the converted mass, hence path-independent: the endpoint is exact regardless of rate history, temperature, or spatial distribution. Integrating from mA = ξA0·V₀ to 0, with the standard initialization ξA0 = ρA (bulk density) and γ_A = 1:

Vf/V₀ = 1 − γA + Σⱼ yⱼ γⱼ ρA/ρⱼ = Σⱼ yⱼ γⱼ ρA/ρⱼ

and a pure solid product ends exactly at bulk density ρB/γB. All ρ here are the components' BULK densities (the strain kernel uses bulk ρ, not ρ_intrinsic — see the SolidComponent docstring note).

NOTE the plan's "γ > 1 intumescent branch" is NOT representable: γ is validated to [0, 1] (universal volume-fraction semantics shared with mixture density and conductivity mixing). Swelling is exercised through ρB < ρA (P1) and the partial-contribution branch through γ_B ∈ (0, 1) (P6). Documented as a model limitation.

Permutations (ρA = 1000, γA = 1, isothermal via E = 0, h = 0, everything impermeable). Mass QoIs: EVERY permutation asserts total-mass conservation to integrator tolerance — the gas mesh-motion transport is the conservative flux form (tech-ref §11.2.3), so held gas in a collapsing impermeable matrix compresses (ξg ↑ as V ↓) instead of being deleted with the vanishing volume (a non-telescoping pointwise form would lose tens of percent of total mass in P4 — that configuration is the regression anchor). Gas-producing permutations additionally assert the SOLID ledger (char endpoint = ychar·m_A0 exactly).

P1 swell: A → B(ρ=500) Vf/V₀ = 2 P2 shrink: A → B(ρ=2000) Vf/V₀ = 1/2 P3 neutral: A → B(ρ=1000) Vf/V₀ = 1 P4 char + gas: A → 0.3 C(ρ=1000) + 0.7 G Vf/V₀ = 0.3 P5 mass loss, ΔV=0: A → 0.5 C(ρ=500) + 0.5 G Vf/V₀ = 1 P6 partial γ: A → B(ρ=1000, γ=0.5) Vf/V₀ = 1/2 P7 WithChi: P5 chemistry + lateral law A/A₀ = 1 − 0.5·χ̄ χ̄f = 0.5 (released dry-mass fraction) ⇒ Af/A₀ = 0.75 exactly, Lf/L₀ = (Vf/V₀)/(A_f/A₀) = 4/3.

P1 (the swelling branch, exercising mesh GROWTH) runs through the standard harness path; the remaining permutations are solved inside qois (each is a ~1 s, 8-cell isothermal solve) so the whole family stays one case.

First-order kinetics with Ar·tend = 16 ⇒ residual conversion e⁻¹⁶ ≈ 1e-7 bounds the endpoint error; the depletion limiter is disabled so the decay stays exactly first-order (with it, the tail below ~1 kg/m³ slows and the residual at fixed t_end grows ~1000×).

Quantities of interest (n = 8)

QoIvalueexacterrortolerancewithin tolprovenance
P1: final thickness ratio227.102e-073e-06yespath-independent endpoint of θ = Σγⱼω̇ⱼ/ρⱼ (case header)
P1: total mass conservation226.539e-072e-06yessolid-only permutation; impermeable everywhere
P2: final thickness ratio0.50.52.981e-083e-06yespath-independent endpoint of θ = Σγⱼω̇ⱼ/ρⱼ (case header)
P2: total mass conservation221.423e-072e-06yessolid-only permutation; impermeable everywhere
P3: final thickness ratio1103e-06yespath-independent endpoint of θ = Σγⱼω̇ⱼ/ρⱼ (case header)
P3: total mass conservation2202e-06yessolid-only permutation; impermeable everywhere
P4: final thickness ratio0.30.31.571e-073e-06yespath-independent endpoint of θ = Σγⱼω̇ⱼ/ρⱼ (case header)
P4: total mass conservation221.055e-072e-06yesheld gas compresses under collapse (flux form); the P4 corner is the Finding-2 regression anchor
P4: final char mass (solid ledger)0.60.62.18e-072e-06yeschar endpoint is path-independent; complements the total-mass anchor
P5: final thickness ratio1103e-06yespath-independent endpoint of θ = Σγⱼω̇ⱼ/ρⱼ (case header)
P5: total mass conservation226.661e-162e-06yesheld gas compresses under collapse (flux form); the P4 corner is the Finding-2 regression anchor
P5: final char mass (solid ledger)111.125e-072e-06yeschar endpoint is path-independent; complements the total-mass anchor
P6: final thickness ratio0.50.52.981e-083e-06yespath-independent endpoint of θ = Σγⱼω̇ⱼ/ρⱼ (case header)
P6: total mass conservation221.423e-072e-06yessolid-only permutation; impermeable everywhere
P7: final thickness ratio1.3331.3336.951e-083e-06yespath-independent endpoint of θ = Σγⱼω̇ⱼ/ρⱼ (case header)
P7: total mass conservation221.979e-082e-06yesheld gas compresses under collapse (flux form); the P4 corner is the Finding-2 regression anchor
P7: final char mass (solid ledger)111.323e-072e-06yeschar endpoint is path-independent; complements the total-mass anchor
P7: final lateral area ratio A_f/A₀ = law(χ̄ = 1/2)0.750.754.972e-083e-06yesχ̄f = released dry-mass fraction = ygas = 0.5

V-CPL-03 thickness_histories

V-CPL-03 thickness_histories_error

Comparison with other codes

The same case was solved with FDS 6.11.0 at 4 cells (2 mm slab; stretched); decks, outputs, and run provenance are committed under test/verification/reference/. Each code's error against the same exact solution is drawn below on a log scale, muted gray behind this solver's series — the signed linear-scale panel above shows where the error lives, this one compares magnitudes across codes.

V-CPL-03 thickness_histories_vs_codes_error

Wall times at every ladder rung against the reference runs. Resolutions and simulated spans differ where noted (details in reference/timings.csv), so cross-code timings are indicative rather than a controlled benchmark; rungs at a matched resolution are directly comparable.

V-CPL-03 solve_time

Solution overlays including the other codes' points: thicknesshistoriesvs_codes.

Solver configuration

settingvalue
integratorKenCarp4 (default)
use_aletrue
min_thickness1.0e-5
abstol1.0e-10
reltol1.0e-8