| name | neqsim-consequence-analysis |
| version | 1.0.0 |
| description | Quantitative consequence analysis for oil & gas hazards — jet fire, pool fire, vapour cloud explosion (VCE), BLEVE, Gaussian plume and heavy-gas dispersion, probit-based fatality probabilities, individual and societal risk roll-up. USE WHEN: a task requires fire-radiation contours, dispersion to LFL/IDLH/ERPG, BLEVE thermal/missile assessment, or QRA-style risk integration of multiple release outcomes. Anchors on neqsim.process.safety.fire, neqsim.process.safety.dispersion, neqsim.process.safety.qra. |
| last_verified | 2026-04-26 |
| requires | {"java_packages":["neqsim.process.safety.fire","neqsim.process.safety.dispersion","neqsim.process.safety.qra"]} |
NeqSim Consequence Analysis Skill
Quantitative consequence modelling that converts a release scenario (mass flow,
inventory, ignition probability) into thermal radiation contours, overpressure
contours, dispersion footprints, and finally individual / societal fatality risk
per ISO 17776, NORSOK Z-013, API 752 and the CCPS Guidelines for Chemical
Process Quantitative Risk Analysis.
When to Use
- Jet-fire, pool-fire, VCE or BLEVE source-term modelling
- Toxic / flammable dispersion to LFL, IDLH, ERPG-2/3 or 1 % fatality contours
- Probit-based fatality probability for thermal radiation, overpressure or toxic dose
- QRA roll-up: combine release frequency × ignition probability × fatality probability
- Source-term generation as input to PHAST / FLACS / KFX
Distinct from neqsim-process-safety (HAZOP / LOPA / SIL — frequency side) and
neqsim-relief-flare-network (PSV sizing / flare radiation — design side). This
skill is the consequence side of QRA.
Standards
- API 521 §6 — flare and vent radiation, fire heat input
- API 752 / 753 / 756 — facility siting, occupied buildings
- NORSOK Z-013 / S-001 — risk acceptance, fire & explosion loads
- CCPS QRA Guidelines — probit constants, ignition probabilities
- TNO Yellow Book — multi-energy / Baker-Strehlow VCE
- EI 15 — hazardous area classification
Method 1 — Jet Fire (API 521 + CCPS solid-flame)
import neqsim.process.safety.fire.JetFireModel;
import neqsim.process.safety.dispersion.ProbitModel;
JetFireModel jet = new JetFireModel(30.0, 50.0e6, 0.25);
double flux50m = jet.radiationFluxAt(50.0);
double dist125 = jet.distanceForFlux(12500.0);
Typical thermal radiation criteria (API 521 / NORSOK S-001):
| Flux (kW/m²) | Effect | Use |
|---|
| 1.6 | No discomfort for long exposure | Public area limit |
| 4.7 | Sufficient for evacuation in 30 s | Escape route |
| 12.5 | Wood ignites, equipment failure (5 min) | Process equipment limit |
| 37.5 | Structural failure of process equipment | Damage to steel structure |
Method 2 — Pool Fire
import neqsim.process.safety.fire.PoolFireModel;
PoolFireModel pool = new PoolFireModel(0.05, 8.0, 50.0e6, 0.30);
double flux = pool.radiationFluxAt(25.0);
Method 3 — Vapour Cloud Explosion (TNO Multi-Energy)
import neqsim.process.safety.fire.VCEModel;
VCEModel vce = new VCEModel(200.0, 50.0e6, 7);
double overpressure = vce.overpressureAt(60.0);
double safeDist = vce.distanceForOverpressure(20684.0);
Method 4 — BLEVE
import neqsim.process.safety.fire.BLEVECalculator;
BLEVECalculator bleve = new BLEVECalculator(50000.0, 50.0e6, 0.40);
double fireballDiameter = bleve.fireballDiameter();
double fireballDuration = bleve.fireballDuration();
double thermalDose = bleve.thermalDoseAt(150.0);
Method 5 — Gaussian Plume Dispersion (Briggs σ)
import neqsim.process.safety.dispersion.GaussianPlume;
GaussianPlume plume = new GaussianPlume(10.0, 0.0, 4.0,
GaussianPlume.Stability.D, GaussianPlume.Terrain.RURAL);
double conc = plume.centerlineGroundConcentration(200.0);
double distLFL = plume.distanceToConcentration(0.044);
Stability classes: A (very unstable) … F (stable). RURAL vs URBAN selects Briggs σ
coefficients per Pasquill-Gifford. Use Stability.F for worst-case dispersion
analysis (calm night, low wind).
Method 6 — Heavy-Gas Dispersion
For dense releases (CO₂, propane, butane) the Gaussian model under-predicts
near-field concentrations. Use HeavyGasDispersion (Britter-McQuaid screening):
import neqsim.process.safety.dispersion.HeavyGasDispersion;
HeavyGasDispersion hgs = new HeavyGasDispersion(
50.0,
1.98,
1.20,
4.0);
double distLFL = hgs.distanceToConcentration(0.05);
Method 7 — Probit Fatality Probability
import neqsim.process.safety.dispersion.ProbitModel;
double pFatality = ProbitModel.thermalFatality()
.fatalityProbability(60.0, 12500.0);
ProbitModel h2s = ProbitModel.h2sFatality();
double pH2S = h2s.fatalityProbability(600.0, 5.0e-4);
ProbitModel ovp = ProbitModel.overpressureFatality();
Built-in factories: thermalFatality(), overpressureFatality(),
h2sFatality(), cl2Fatality(), nh3Fatality(), coFatality(). The
ToxicLibrary class centralises probit constants for common toxic gases.
Method 8 — QRA Roll-up
import neqsim.process.safety.qra.ConsequenceAnalysisEngine;
ConsequenceAnalysisEngine e = new ConsequenceAnalysisEngine(
"10 mm gas leak", 1.0e-4);
e.addJetFire(0.05, jet, ProbitModel.thermalFatality(), 60.0);
e.addJetFire(0.02, pool, ProbitModel.thermalFatality(), 60.0);
e.addToxicCloud(0.01, plume, ProbitModel.h2sFatality(), 600.0);
double IRPA = e.individualFatalityRiskPerYear(50.0);
String text = e.report(50.0);
The engine sums:
IRPA(d) = Σ_outcome f_release · f_branch · P_fatality(d, outcome)
Compare against acceptance criteria:
| Criterion | Limit | Source |
|---|
| Worker IRPA | 1·10⁻³ /yr (intolerable) | UK HSE R2P2 |
| Worker IRPA | 1·10⁻⁶ /yr (broadly acceptable) | UK HSE R2P2 |
| NORSOK FAR | 10 fatalities / 10⁸ h | NORSOK S-001 |
| Public 1 % fatal | 35 m typical for 12.5 kW/m² | API 752 |
Method 9 — Flare Flame Radiation & Noise (API 537)
import neqsim.process.safety.fire.Api537FlareFlameModel;
Api537FlareFlameModel flame = new Api537FlareFlameModel(
50.0, 50.0e6, 0.20, 200.0)
.setStackHeightM(40.0)
.setWindSpeedMPerS(10.0);
double r473 = flame.sterileZoneRadiusM(Api537FlareFlameModel.FLUX_4_73_KW);
double q75 = flame.heatFluxAtGroundDistance(75.0);
double spl = flame.soundPressureLevelDb(100.0);
Use this instead of the point-source jet-fire form when the source is an elevated
flare tip (it accounts for stack height, wind tilt, and flame geometry).
Method 10 — Hazardous-Area Zone Classification (IEC 60079-10-1)
import neqsim.process.safety.dispersion.HazardousAreaCalculator;
import neqsim.process.safety.dispersion.HazardousAreaCalculator.ReleaseGrade;
HazardousAreaCalculator calc = new HazardousAreaCalculator(
0.1,
6.0,
340.0,
0.044,
0.01604)
.setReleaseGrade(ReleaseGrade.SECONDARY)
.setSafetyFactor(0.5);
double dHaz = calc.hazardousDistanceM();
String zone = calc.zoneClassification();
Maps the dispersion result to an Ex zone for electrical-equipment selection.
CONTINUOUS → Zone 0, PRIMARY → Zone 1, SECONDARY → Zone 2.
Method 11 — Passive Fire Protection (PFP) Demand (API 521 / NORSOK S-001)
import neqsim.process.safety.fire.PfpDemandCalculator;
import neqsim.process.safety.fire.PfpDemandCalculator.FireType;
import neqsim.process.safety.fire.PfpDemandCalculator.PfpDemandResult;
PfpDemandResult pfp = new PfpDemandCalculator(
100.0e3,
0.012)
.setFireType(FireType.POOL)
.evaluate(3600.0);
boolean need = pfp.isPfpRequired();
double thkMm = pfp.getRequiredPfpThicknessMm();
PfpDemandResult.PfpRating rating = pfp.getRating();
Determines whether unprotected steel reaches its critical temperature before the
required survival time, and if so the intumescent thickness and H/J rating.
Source Term for External CFD
ConsequenceAnalysisEngine.exportSourceTerm() writes a JSON block usable by
PHAST, FLACS, KFX or DNV Safeti containing release rate, momentum, density,
duration and chemistry — the standard handoff format described in
neqsim-agent-handoff.
Common Pitfalls
- Stability class — using class D ("typical") instead of F for hazard contours
under-predicts safe distance by 2–3×. Always run F at low wind for siting.
- Heavy gas — applying Gaussian to CO₂ / LPG releases under-predicts near-field
concentration. Switch to
HeavyGasDispersion when density ratio > 1.2.
- Probit constants — different sources give different (a, b, n). Always cite
the source; the factories in
ProbitModel use CCPS values.
- Ignition probability — small leaks (< 1 kg/s) often use 1–5 %, large
leaks (> 50 kg/s) up to 30 % delayed. Use scenario-specific values, not 100 %.
- Flame view-factor — the simple 1/(4πr²) point-source form is conservative
near the flame; use API 521 solid-flame for distances < 2 × flame length.
Verification Tests
src/test/java/neqsim/process/safety/{fire,dispersion,qra}/ contain JUnit 5
tests for every model. Run:
./mvnw test -Dtest=FireModelsTest,GaussianPlumeTest,ProbitModelTest,ConsequenceAnalysisEngineTest,Api537FlareFlameModelTest,HazardousAreaCalculatorTest,PfpDemandCalculatorTest
See Also
neqsim-process-safety — frequency side (HAZOP / LOPA / SIL)
neqsim-relief-flare-network — PSV sizing and flare radiation
neqsim-depressurization-mdmt — emergency depressurization source terms
neqsim-agent-handoff — source-term JSON schema