Skip to the content.

Flare Flame, Hazardous Area Classification and PFP Demand

Class Purpose Standard
Api537FlareFlameModel Flare flame length, tilt, radiation contours and noise API 537
HazardousAreaCalculator Hazardous-area distance and zone from a release source IEC 60079-10-1
PfpDemandCalculator Passive-fire-protection demand and rating from a fire flux API 521

Classes live under neqsim.process.safety.fire and neqsim.process.safety.dispersion.

API 537 flare flame model

The flare flame model takes the relief mass flow, heat of combustion, radiant fraction and tip exit velocity. It returns flame geometry, sterile-zone radii for the standard radiation thresholds, ground-level heat flux, and noise:

import neqsim.process.safety.fire.Api537FlareFlameModel;

// mDot[kg/s], heat of combustion[J/kg], radiant fraction, exit velocity[m/s]
Api537FlareFlameModel model =
    new Api537FlareFlameModel(50.0, 50.0e6, 0.20, 200.0)
        .setStackHeightM(40.0)
        .setWindSpeedMPerS(10.0);

double length = model.flameLengthM();
double tilt   = model.flameTiltRad();

// Sterile-zone radii (nested: lower flux reaches further)
double r158 = model.sterileZoneRadiusM(Api537FlareFlameModel.FLUX_1_58_KW);
double r473 = model.sterileZoneRadiusM(Api537FlareFlameModel.FLUX_4_73_KW);
double r946 = model.sterileZoneRadiusM(Api537FlareFlameModel.FLUX_9_46_KW);

double flux = model.heatFluxAtGroundDistance(60.0);   // W/m² at 60 m
double pwl  = model.soundPowerLevelDb();
double spl  = model.soundPressureLevelDb(100.0);       // dB at 100 m

With zero wind the flame is vertical (flameTiltRad() == 0); increasing wind tilts it downwind. The flux thresholds FLUX_1_58_KW, FLUX_4_73_KW, and FLUX_9_46_KW correspond to the API 521 / API 537 personnel-exposure limits.

IEC 60079-10-1 hazardous-area classification

HazardousAreaCalculator estimates the hazardous distance from a gas release and assigns an area zone from the release grade:

import neqsim.process.safety.dispersion.HazardousAreaCalculator;
import neqsim.process.safety.dispersion.HazardousAreaCalculator.ReleaseGrade;

// mDot[kg/s], P[bara], T[K], LFL[vol frac], molar mass[kg/mol]
HazardousAreaCalculator calc =
    new HazardousAreaCalculator(0.1, 6.0, 340.0, 0.044, 0.01604)
        .setReleaseGrade(ReleaseGrade.SECONDARY)
        .setSafetyFactor(0.5);

double distance = calc.hazardousDistanceM();
String zone = calc.zoneClassification();   // "Zone 2"

The release grade maps to the zone: CONTINUOUS → Zone 0, PRIMARY → Zone 1, SECONDARY → Zone 2. A larger release rate increases the hazardous distance, and a stricter (smaller) safety factor also increases it.

API 521 passive-fire-protection demand

PfpDemandCalculator compares the bare-steel time-to-critical-temperature under a fire heat flux against the required survival time and selects a PFP rating:

import neqsim.process.safety.fire.PfpDemandCalculator;
import neqsim.process.safety.fire.PfpDemandCalculator.FireType;
import neqsim.process.safety.fire.PfpDemandCalculator.PfpDemandResult;
import neqsim.process.safety.fire.PfpDemandCalculator.PfpRating;

// heat flux[W/m²], wall thickness[m]; required survival time[s]
PfpDemandResult res = new PfpDemandCalculator(100.0e3, 0.012)
    .setFireType(FireType.POOL)
    .evaluate(3600.0);

boolean required = res.isPfpRequired();              // true
double thickness = res.getRequiredPfpThicknessMm();
PfpRating rating = res.getRating();                  // H60

FireType selects POOL or JET fire heat-up kinetics. A thick wall with a short required survival time may not need PFP at all (isPfpRequired() == false, rating NONE). Longer jet-fire durations escalate the rating (e.g. a 120 min jet-fire case yields J120).

Verification

./mvnw test -Dtest=Api537FlareFlameModelTest,HazardousAreaCalculatorTest,PfpDemandCalculatorTest