Skip to the content.

title: Safety Systems Package description: Documentation for safety systems modeling in NeqSim. —

Safety Systems Package

Documentation for safety systems modeling in NeqSim.

Table of Contents


Overview

Location: neqsim.process.equipment.safety, neqsim.process.safety

NeqSim provides equipment and logic for modeling process safety systems:

The release, dispersion, and CFD handoff workflow is intended for screening, case generation, and auditable source-term transfer. Final facility layout, regulatory QRA, and CFD conclusions still require project-specific validation, site geometry, leak-frequency data, and approved consequence-analysis methods.


Safety Equipment

Pressure Safety Valve (PSV)

import neqsim.process.equipment.valve.SafetyValve;

SafetyValve psv = new SafetyValve("PSV-100", vessel);
psv.setOpeningPressure(95.0, "barg");  // Set pressure
psv.setFullOpenPressure(100.0, "barg"); // Overpressure
psv.setBlowdownPressure(85.0, "barg");  // Reseating pressure

Rupture Disk

import neqsim.process.equipment.valve.RuptureDisk;

RuptureDisk disk = new RuptureDisk("RD-100", vessel);
disk.setBurstPressure(110.0, "barg");
disk.setDiameter(150.0, "mm");

Emergency Shutdown (ESD)

ESD Logic and Dynamic Evidence

ESDValve inletValve = new ESDValve("ESD Inlet Isolation", feed);
inletValve.setStrokeTime(4.0);
inletValve.setCv(500.0);

ESDLogic esdLogic = new ESDLogic("ESD Level 1");
esdLogic.addAction(new TripValveAction(inletValve), 0.0);

Use neqsim.process.safety.esd.EmergencyShutdownTestRunner when the ESD sequence needs a structured dynamic evidence report with monitored time series, tagreader comparisons, standards references, and acceptance criteria.

ESD Levels

Level Description Actions
ESD-0 Total shutdown Full plant shutdown
ESD-1 Process shutdown Process area isolation
ESD-2 Unit shutdown Single unit isolation
ESD-3 Equipment shutdown Single equipment stop

Blowdown Systems

Depressuring Calculation

import neqsim.process.equipment.valve.BlowdownValve;

BlowdownValve blowdown = new BlowdownValve("BDV-100", vessel);
blowdown.setDownstreamPressure(1.0, "barg");  // Flare pressure
blowdown.setOrificeSize(100.0, "mm");

// Run depressuring transient
for (double t = 0; t < 900; t += 1.0) {
    blowdown.runTransient();

    double P = vessel.getPressure("barg");
    double T = vessel.getTemperature("C");

    if (P < 7.0) {  // 15 minute rule target
        System.out.println("Reached target at " + t + " seconds");
        break;
    }
}

Fire Case Calculation

// Calculate heat input from fire
double wettedArea = 50.0;  // m²
double Q = 43200 * Math.pow(wettedArea, 0.82);  // API 521 formula

vessel.setHeatInput(Q, "W");

Pressure Safety Valves

PSV Sizing

// Calculate required relief rate
double reliefRate = psv.getReliefRate("kg/hr");

// API 520 sizing
double area = psv.getRequiredOrificeArea("mm2");
String orifice = psv.getAPIOrificeLetter();

System.out.println("Required area: " + area + " mm²");
System.out.println("API orifice: " + orifice);

Multiple Relief Scenarios

Scenario Description
Blocked outlet Outlet valve closed
Fire case External fire exposure
Tube rupture Heat exchanger tube failure
Power failure Loss of cooling/control
Thermal relief Liquid expansion

HIPPS

High Integrity Pressure Protection System.

import neqsim.process.safety.HIPPS;

HIPPS hipps = new HIPPS("HIPPS-1");

// Add sensors (2oo3 voting)
hipps.addPressureSensor(pt1);
hipps.addPressureSensor(pt2);
hipps.addPressureSensor(pt3);

// Set trip point
hipps.setTripPressure(95.0, "barg");

// Add final elements
hipps.addIsolationValve(sdv1);
hipps.addIsolationValve(sdv2);

// Set voting logic
hipps.setVotingLogic("2oo3");  // 2 out of 3

Example: ESD Dynamic Test Evidence

OperationalTagMap tagMap = new OperationalTagMap()
    .addBinding(OperationalTagBinding.builder("xv_opening")
        .automationAddress("ESD Inlet Isolation.percentValveOpening")
        .unit("%")
        .role(InstrumentTagRole.BENCHMARK)
        .build());

EmergencyShutdownTestPlan plan = EmergencyShutdownTestPlan.builder("ESD1 isolation closure")
    .duration(8.0)
    .timeStep(1.0)
    .tagMap(tagMap)
    .enableLogic("ESD Level 1")
    .triggerLogic("ESD Level 1")
    .criterion(EmergencyShutdownTestCriterion.finalAtMost(
        "ESD-XV-CLOSED", "xv_opening", 5.0, "%"))
    .criterion(EmergencyShutdownTestCriterion.logicCompleted(
        "ESD-LOGIC-COMPLETE", "ESD Level 1"))
    .build();

EmergencyShutdownTestResult report = EmergencyShutdownTestRunner.run(process, plan, esdLogic);