2D companion to the 3D voxel scene: the identical Fick-diffusion + acid-catalyzed reaction model, run on a cross-section grid where the curing brine soaks in from the top face and one side face (like a corner cut of meat), so you can watch two curing fronts meet.
Fick diffusion + first-order decay (per cell):
dC/dt = D grad^2 C - k_r C
Acid-catalyzed nitrous-acid disproportionation:
3 HNO2 -> HNO3 + 2 NO + H2O (k_r rises as pH falls)
Pigment formation (NO binds deoxymyoglobin):
Mb + NO -> MbNO (nitrosylmyoglobin, the pink cured colour)
pink(x) = 1 - exp( -dose(x) / D_pink ), dose = integral of k_r C dt
Antimicrobial inhibition (NO attacks Fe-S clusters /
thiol enzymes bacteria need for spore germination):
viability(x) = exp( -dose(x) / D_kill ), D_kill > D_pink
- Surface nitrite dose — the fixed NO2- concentration held at the brine-facing edges of the cross-section (Dirichlet boundary condition).
- pH — lower pH means more nitrite sits as protonated HNO2, which disproportionates faster into NO; curing brines are typically pH 5-6.
- Temperature — raises both the diffusion coefficient D and the reaction rate k_r (Q10 ≈ 2 for each), so warmer curing is faster but less controlled.
- D_kill > D_pink in the model on purpose: real cured meat reliably turns pink well before it has accumulated enough NO exposure to reliably suppress Clostridium botulinum spores — colour is not proof of safety, which is exactly why regulated minimum nitrite doses and cure times exist.
The grid uses an explicit finite-difference stencil with a stability-limited timestep (dt ≤ dx²/4D in 2D) sub-stepped every frame, so raising temperature or simulation speed automatically increases the number of physics substeps per rendered frame. The bottom strip charts the dose-driven cure and residual-nitrite profile along the depth axis at the mid-width column.