Best for
- HAZOP / HAZID node walkdown with deviation guidewords
- Barrier management for PSFs/SCEs with document evidence and performance standards
- LOPA for a specific scenario — calculate residual frequency and required RRF
equinor/neqsim/.github/skills/neqsim-process-safety/SKILL.md
Process safety methodology — barrier management, PSFs/SCEs, HAZOP guidewords, LOPA worksheets, SIL determination per IEC 61511, integrated facility safety response, safety change revalidation, independent benchmarks, bow-tie analysis, risk-matrix scoring, TR3001 overpressure-protection studies, and trapped-liquid fire rupture screening. USE WHEN: a task requires barrier registers, hazard identification, layer-of-protection analysis, safety-integrity-level assignment for an SIF, integrated ESD/co
Decision brief
Systematic hazard identification, layer-of-protection analysis (LOPA), and safety-integrity-level (SIL) determination — the quantitative half of process safety that complements depressurization (neqsim-dynamic-simulation) and relief sizing (neqsim-relief-flare-network).
Compatibility matrix
| Platform | Status | Evidence | What to check |
|---|---|---|---|
| Codex | Not declared | No explicit evidence | Portability before use |
| Claude Code | Not declared | No explicit evidence | Portability before use |
| Cursor | Not declared | No explicit evidence | Portability before use |
| Gemini CLI | Not declared | No explicit evidence | Portability before use |
Installation
The source command is displayed only when detected. A safe inspection prompt is always available so your agent can explain every action before execution.
npx skills add https://github.com/equinor/neqsim --skill ".github/skills/neqsim-process-safety"Inspect the Agent Skill "neqsim-process-safety" from https://github.com/equinor/neqsim/blob/9e8d44a141bba600026d2229969b49af50f34237/.github/skills/neqsim-process-safety/SKILL.md at commit 9e8d44a141bba600026d2229969b49af50f34237. List every install step, command, network request, credential, file read/write, external action, and rollback step. Explain whether it fits my task. Do not install or execute anything until I approve.
Workflow
Use ClosedLoopSafetyFunction inside a DynamicSafetyScenario when a response-time budget must be demonstrated against the process model rather than summed from prepared durations. Bind every SafetyFunctionChannel to the isolated process copy, select the SRS voting pattern, then p…
Use SafetyVerificationBenchmarkSuite to qualify the versioned SIF PFDavg, LOPA residual-frequency, and dynamic-response methods against externally supplied values. Declare the source class, controlled reference, dataset revision, tolerances, and independent-review record. A REGR…
Screen flare/blowdown/vent hydraulics and drainage against NORSOK P-002 limits with NorsokP002ComplianceChecker (fluent, aggregates all findings):
Review the “Verification Tests” section in the pinned source before continuing.
Standards: IEC 61508, IEC 61511, CCPS LOPA Guidelines, API 521 / ISO 23251, API 520, API 2000, TR3001, ASME VIII Div 1 (UG-125), ASME B31.3/B31.4, ASME B16.5, API 754, NORSOK Z-013.
Permission review
No configured static risk pattern was detected
This is not proof of safety. Runtime behavior, indirect dependencies, and hidden external systems are outside the static scan.
Evidence record
| Signal | Value | Evidence type | Meaning |
|---|---|---|---|
| Quality score | 98/100 | Computed | Documentation, specificity, maintenance, and trust rules |
| Repository stars | 136 | Source | Repository attention, not individual Skill quality |
| Compatibility | 0 platforms | Source | Declared in the catalog source record |
| Usage guide | automated source guide | Editorial | Generated or reviewed according to the visible evidence level |
Pinned source
Systematic hazard identification, layer-of-protection analysis (LOPA), and
safety-integrity-level (SIL) determination — the quantitative half of process
safety that complements depressurization (neqsim-dynamic-simulation) and relief
sizing (neqsim-relief-flare-network).
Standards: IEC 61508, IEC 61511, CCPS LOPA Guidelines, API 521 / ISO 23251, API 520, API 2000, TR3001, ASME VIII Div 1 (UG-125), ASME B31.3/B31.4, ASME B16.5, API 754, NORSOK Z-013.
For API 2000, route to Api2000TankVentingScreeningKernel. Require caller-controlled licensed
demand factors/cases, externally rated capacities, consistent gas reference conditions, tank
pressure/vacuum limits, and evidence attestations. Do not relabel FireProtectionDesign, generic
PSV sizing, or an adequate screen as API tank-vent sizing or conformity.
Load neqsim-trapped-liquid-fire-rupture when a safety study concerns a
blocked-in liquid-filled pipe segment exposed to fire, no pressure relief, PFP
endurance, flange/pipe rupture, or a Word/HTML study report based on P&IDs/STID,
line lists, material certificates, and fire documents.
Recommended sequence:
neqsim-stid-retriever: P&ID/STID,
line list, piping spec, material certificate, flange/bolt/gasket data,
fire-zone/PFP documents, relief basis, and design basis.neqsim-technical-document-reading:
isolation boundary, line numbers, fluid, P/T, ID, wall thickness, length,
material grade, flange class, fire basis, PFP endurance, relief availability,
acceptance criteria, and evidence gaps.TrappedInventoryCalculator to calculate trapped mass and volume.FireExposureScenario, MaterialStrengthCurve, and
TrappedLiquidFireRuptureStudy to calculate event times and limiting mode.SafetySystemDemand for PFP checks and to
SourceTermResult for consequence handoff if rupture is predicted.Use BarrierRegister, SafetyCriticalElement, SafetyBarrier, PerformanceStandard,
and DocumentEvidence when agents read technical documentation and need a traceable
handoff into LOPA, SIL, bow-tie, or QRA.
Recommended sequence:
DocumentEvidence from P&IDs, C&E charts, SRS, SIL verification reports,
inspection reports, vendor datasheets, and operating procedures.PerformanceStandard objects for each PSF/SIF/SCE function with target PFD,
availability, proof-test interval, response time, and acceptance criteria.SafetyBarrier objects with type, status, PFD/effectiveness, equipment tags,
hazard ids, owner, evidence, and performance-standard links.SafetyCriticalElement records using process equipment tags.runBarrierRegister to get validation findings plus lopaHandoff,
silHandoff, bowTieHandoff, and qraHandoff blocks.Credit rule: do not claim LOPA credit unless the barrier is AVAILABLE, has a valid
PFD, has a linked performance standard, and has traceable evidence. Missing evidence
must remain visible as a validation finding.
Apply the 7 standard guidewords to each design intent at every node:
| Guideword | Deviation example | Typical cause |
|---|---|---|
| NO | No flow to separator | Pump trip, blocked inlet |
| MORE | More pressure in V-100 | PCV stuck open, inlet surge |
| LESS | Less level in V-100 | LCV stuck open, drain leak |
| AS WELL AS | Water carryover in gas | Demister flooding, wave action |
| PART OF | Wrong composition fed | Crossover from neighbouring train |
| REVERSE | Reverse flow from compressor | Check valve failure |
| OTHER THAN | Maintenance with line live | Procedural / isolation failure |
Output as a HAZOP worksheet table; each row → candidate LOPA scenario.
For automated studies from STID/P&ID documents and NeqSim process simulations,
use MCP runHAZOP. It accepts a standard runProcess JSON model plus optional
document-extracted nodes, safeguards, evidence references, selected failure
modes, and a barrierRegister. The runner executes generated safety scenarios
on copied ProcessSystem models and returns IEC 61882 rows, simulation evidence,
quality gates, barrier-register handoff, and report markdown. See
docs/safety/automated_hazop_from_stid.md.
For a P&ID Safety Analyser / AI-HAZOP front-end that quantifies one deviation at
a time, use MCP runHazopScenario (backed by
neqsim.mcp.runners.HazopScenarioRunner). It accepts a runProcess JSON model
plus an optional guideWord / parameter / nodeTag filter and a limits
policy, and returns a stable schemaVersion "1.0" response where every finding
carries a computedValue, designLimit, verdict (PASS / EXCEEDS /
NOT_EVALUATED), standardReference, and a limitBasis provenance string
(HazopConsequenceFinding#getLimitBasis()) so a reviewer can see whether the
limit is a data-sheet value or a screening default. Equipment design limits
(neqsim.process.mechanicaldesign.DesignConditions) round-trip into DEXPI as a
GenericAttributes Set="DesignConditions" group, and blocked-outlet MORE
PRESSURE deviations can be screened with
neqsim.process.safety.depressurization.BlockedOutletOverpressureAnalyzer. See
docs/safety/ai_hazop_input_format.md for the full input-data format.
Use LOPAResult to compute residual frequency:
import neqsim.process.safety.risk.sis.LOPAResult;
LOPAResult lopa = new LOPAResult();
lopa.setScenarioName("V-100 overpressure during compressor surge");
lopa.setInitiatingEventFrequency(0.1); // /yr — surge event
lopa.setTargetFrequency(1.0e-5); // /yr — tolerable for safety SIF
// Independent Protection Layers (each must be IEC 61511 IPL-eligible)
lopa.addLayer("BPCS pressure control", 0.10, 0.1, 0.01);
lopa.addLayer("Operator response (alarm)", 0.10, 0.01, 0.001);
lopa.addLayer("PSV @ design", 0.01, 0.001, 1.0e-5);
System.out.println(lopa.toVisualization());
System.out.println("Target met? " + lopa.isTargetMet());
System.out.println("Required additional SIL: " + lopa.getRequiredAdditionalSIL());
IPL eligibility rules (IEC 61511):
Use LopaScenarioDefinition, ProtectionLayerDefinition, and HazopLopaSrsWorkflow when an
approved HAZOP row and user-supplied risk basis need a machine-readable handoff into SRS drafting.
The workflow credits a layer only when independence from the initiating event and other layers,
specificity, auditability, proof-test/inspection interval, and a controlled evidence reference are
all declared. Ineligible safeguards remain visible but receive no frequency reduction.
If a risk gap remains, the result creates a SafetyRequirementSpecificationDraft carrying the
HAZOP node/deviation, LOPA reference, SIF tag, trip, safe state, response time, voting, proof-test,
reset, and bypass requirements. The draft is always REVIEW_REQUIRED and never fit for construction.
No draft is created when credited existing layers meet the supplied target.
After accountable HAZOP, LOPA, and SRS approval, hand the approved inputs to
SafetyFunctionDesign, reliability/degraded-mode assessment, and closed-loop transient
verification. See docs/process/safety/hazop-lopa-srs-handoff.md.
After LOPA tells you a SIL is needed, verify with SafetyInstrumentedFunction:
import neqsim.process.safety.risk.sis.SafetyInstrumentedFunction;
import neqsim.process.safety.risk.sis.SafetyInstrumentedFunction.SIFCategory;
SafetyInstrumentedFunction sif = SafetyInstrumentedFunction.builder()
.id("SIF-001")
.name("HIPPS on V-100")
.description("Close XV-1001A/B on PT-1001 high-high (2oo3)")
.sil(2) // claimed
.pfd(5.0e-3) // PFD_avg from supplier verification
.testIntervalHours(8760.0) // 1-year proof test
.mttr(8.0)
.architecture("2oo3")
.category(SIFCategory.HIPPS)
.initiatingEvent("Compressor surge → backflow")
.safeState("XV closed, V-100 isolated")
.build();
double rrf = sif.getRiskReductionFactor(); // 1/PFD
int silAchieved = sif.getSil();
SIL bands (IEC 61508):
| SIL | PFDavg | RRF |
|---|---|---|
| 1 | 1e-2 to 1e-1 | 10–100 |
| 2 | 1e-3 to 1e-2 | 100–1000 |
| 3 | 1e-4 to 1e-3 | 1000–10000 |
| 4 | 1e-5 to 1e-4 | 10000–100000 |
For Norwegian-shelf projects, the NOG 070 (070 Norsk olje og gass) guideline
gives pre-determined minimum SIL for typical SIFs — use
Nog070SilCatalogue / Nog070SilDetermination to look up the minimum and
verify the achieved SIL from PFD:
import neqsim.process.safety.risk.sis.nog070.Nog070SifType;
import neqsim.process.safety.risk.sis.nog070.Nog070SilDetermination;
// HIPPS minimum is SIL 3; PFD 1e-4 achieves SIL 3 → compliant
Nog070SilDetermination r =
Nog070SilDetermination.evaluate(Nog070SifType.HIPPS_PIPELINE, 1.0e-4);
int achieved = r.getAchievedSil(); // 3
int minimum = r.getMinimumSil(); // 3
boolean ok = r.isCompliant(); // true
String json = r.toJson();
Nog070SifType includes HIPPS_PIPELINE, ESD_SUBSEA_ISOLATION (SIL 3),
BLOWDOWN_HYDROCARBON_SEGMENT, PSD_PROCESS_SEGMENT (SIL 2), and CUSTOM
(supply an explicit minimum via the 3-arg evaluate). Verified by
Nog070SilCatalogueTest.
Verify the full detection → logic → final-element chain fits the allowable ESD
response time with EsdResponseTimeSimulator:
import neqsim.process.safety.esd.EsdResponseTimeSimulator;
import neqsim.process.safety.esd.EsdResponseTimeSimulator.EsdResponseTimeResult;
EsdResponseTimeResult res = new EsdResponseTimeSimulator()
.setSifTag("ESD-1234")
.addDetection("PT-1001 high-pressure", 1.0) // [s]
.addLogic("Logic solver scan + 2oo3 vote", 0.5) // [s]
.addValve("ESDV-2001", 0.5, 8.0) // command delay + stroke [s]
.setAllowableResponseTimeS(15.0)
.evaluate();
double total = res.getTotalResponseTimeS(); // 10.0
double margin = res.getMarginS(); // 5.0
boolean within = res.isWithinBudget(); // true
Verified by EsdResponseTimeSimulatorTest.
Use ClosedLoopSafetyFunction inside a DynamicSafetyScenario when a response-time budget must
be demonstrated against the process model rather than summed from prepared durations. Bind every
SafetyFunctionChannel to the isolated process copy, select the SRS voting pattern, then pass an
existing ESDLogic, HIPPSLogic, or other ProcessLogic as the final-element sequence.
Recommended sequence:
FaultMode for degraded cases.VotingPattern and logic-solver delay.DynamicSafetyScenarioResult.getLogicEvidence() for readings, bypass/fault state, vote
time, final-element actuation, and trace; do not approve from the boolean verdict alone.See docs/process/safety/closed-loop-sif-verification.md. This simulation evidence does not infer
SIL or approve the SRS; hand the result to the SIL/LOPA and engineering-approval workflow.
After the deterministic SafetyFunctionDesign screen, use SafetyFunctionReliabilityStudy to
propagate evidence-based failure-rate, diagnostic-coverage, proof-test, repair-time, beta, and bypass
uncertainty. Always provide a fixed seed and retain P10/P50/P90 PFDavg/PFH, target-met probability,
iteration count, distributions, and their data sources in the verification package.
Use SafetyFunctionOperatingMode plus SafetyFunctionDegradedModeAssessment before evaluating a
bypass or maintenance state. Record every unavailable, forced-trip, or under-repair channel, actual
proof-test age, authorization reference, compensating measure, elapsed duration, and maximum duration.
The effective architecture (for example 2oo3 to 2oo2) is a demand-capability screen, not permission to
preserve the SIL claim or continue operation.
Handoff the assessed mode back to the closed-loop scenario workflow to verify the physical safe state.
See docs/process/safety/sif-reliability-and-degraded-modes.md.
Use FacilitySafetyResponseStudy after the individual engines have executed when one review package
must join closed-loop ESD/HIPPS evidence, compressor anti-surge trip demand and observed response,
PSV/concurrency results, transient blowdown/flare results, and controlled process limits such as MDMT
or hydrate margin. Supply the actual DynamicSafetyScenarioResult and
CoupledReliefBlowdownFlareResult; the facility study embeds their maps and must not duplicate their
physics.
Capture compressor response with CompressorTripResponse.capture(...). AntiSurge.shouldTrip() is
the demand signal; separately record whether the trip was observed, its response time, allowable
deadline, and evidence reference. Add each minimum or maximum with ProcessSafetyConstraint and a
controlled source reference.
Treat isTechnicallyAcceptable(), isEvidenceComplete(), and isReadyForEngineeringReview() as
review gates, never approval. Inspect getFindings() and embedded engine results, then obtain the
accountable process-safety, rotating-equipment, flare, piping, and mechanical approvals. See
docs/process/safety/integrated-facility-safety-response.md.
Use SafetyStudyRevalidationPlanner with the canonical EngineeringGraph and a controlled
ModelChangeEvent. Tag safety lifecycle nodes with the safetyStudyType property and an accepted
type: HAZOP, LOPA, SRS, SIF_RELIABILITY, SIF_DYNAMIC_VERIFICATION,
RELIEF_BLOWDOWN_FLARE, or FACILITY_RESPONSE. Express dependencies with normal graph edges; do not
create a separate safety dependency register.
The planner delegates propagation to GeneralizedImpactAnalyzer, then adds type-specific work,
propagation paths, reason edges, stale approvals, unresolved subjects, and cycle findings. Every task
starts incomplete. Close it and restore approval through project MOC/document control.
Use SafetyVerificationBenchmarkSuite to qualify the versioned SIF PFDavg, LOPA residual-frequency,
and dynamic-response methods against externally supplied values. Declare the source class, controlled
reference, dataset revision, tolerances, and independent-review record. A
REGRESSION_BASELINE is useful but deliberately cannot qualify as independent evidence.
Do not call an expected value independent merely because it was entered by a different user. Verify
the calculation or published/vendor/CAE source, assumptions, units, method version, and review record
outside the code. A passing suite qualifies the controlled implementation/case set, not the project
design or SIL target. See docs/process/safety/safety-change-revalidation-and-benchmarks.md.
Use BowTieModel
import neqsim.process.safety.risk.bowtie.BowTieModel;
import neqsim.process.safety.risk.bowtie.BowTieModel.Threat;
import neqsim.process.safety.risk.bowtie.BowTieAnalyzer;
BowTieModel bt = new BowTieModel("Loss of containment — V-100 gas phase");
bt.addThreat(new Threat("Overpressure", 0.1));
bt.addThreat(new Threat("Corrosion-induced rupture", 0.01));
// preventive barriers reduce threat → top-event frequency
// mitigative barriers reduce consequence severity
BowTieAnalyzer analyzer = new BowTieAnalyzer(bt);
double topEventFreq = analyzer.calculateTopEventFrequency();
Export to SVG with BowTieSvgExporter for the report.
Use RiskMatrix to score and rank scenarios per ISO 31000 / NORSOK Z-013.
Frequencies × Consequence categories → ALARP / intolerable / broadly acceptable bands.
Auto-enumerate process equipment and check that each has its API RP 14C–required
protective devices (PSH/PSL/LSH/LSL/PSV …) with Api14cSafeChartBuilder:
import java.util.EnumSet;
import neqsim.process.safety.api14c.Api14cSafeChartBuilder;
import neqsim.process.safety.api14c.Api14cDeviceType;
// declarePresent(...) lists the devices actually installed, then build(process)
Api14cSafeChartBuilder chart = new Api14cSafeChartBuilder()
.declarePresent("HP separator",
EnumSet.of(Api14cDeviceType.PSH, Api14cDeviceType.PSV))
.build(process);
boolean complete = chart.isComplete(); // false → missing devices
chart.getGaps(); // equipment with missing required devices
String md = chart.toMarkdown(); // SAFE chart table
String json = chart.toJson();
buildAssumingComplete(process) enumerates equipment and assumes full coverage
(useful for generating the SAFE chart skeleton). Equipment categories come from
Api14cEquipmentCategory (e.g. PRESSURE_VESSEL). Verified by
Api14cSafeChartBuilderTest.
Screen flare/blowdown/vent hydraulics and drainage against NORSOK P-002 limits
with NorsokP002ComplianceChecker (fluent, aggregates all findings):
import neqsim.process.safety.compliance.NorsokP002ComplianceChecker;
NorsokP002ComplianceChecker c = new NorsokP002ComplianceChecker()
.checkFlareLineMach("Header", 0.5) // ≤ 0.7 Mach
.checkBlowdownRhoV2("BDV-1", 150000.0) // ρv² limit [Pa]
.checkVentGasVelocity("Vent", 45.0)
.checkLiquidCarryOver("V-100", 1.0e-4)
.checkErosionalVelocity("Line-200", 80000.0)
.recordDepressurisationValve("BDV-2", true, "Sized for fire case")
.recordDrainSlope("CD-1", true, "1:100 slope OK");
boolean compliant = c.isCompliant();
int failures = c.countNonCompliant();
String json = c.toJson(); // findings tagged e.g. "FLARE_LINE_MACH_07"
Verified by NorsokP002ComplianceCheckerTest.
Aggregate the project safety acceptance checks (PSV margin, MDMT, SIL, custom)
into a single pass/fail gate with Sts0131Gate:
import neqsim.process.safety.compliance.Sts0131Gate;
import neqsim.process.safety.risk.sis.nog070.Nog070SifType;
import neqsim.process.safety.risk.sis.nog070.Nog070SilDetermination;
Sts0131Gate gate = new Sts0131Gate();
gate.addPsvSizingMargin(1.0, 1.15, 0.10); // required, available, minMargin
gate.addMdmt(-20.0, -29.0); // operating MDMT vs design min
gate.addSil(Nog070SilDetermination.evaluate(Nog070SifType.PSD_PROCESS_SEGMENT, 5.0e-3));
gate.addCustom("Fire case", true, "Heat input within API 521 envelope");
boolean acceptable = gate.isAcceptable();
int failures = gate.countFailures();
String json = gate.toJson();
Verified by Sts0131GateTest.
Use neqsim.process.safety.overpressure for a structured overpressure study on a
protected item: each cause calculator is fluent and returns an immutable
ReliefScenario; the engine picks the maximum-rate credible scenario, sizes
the PSV (vapour / liquid / two-phase), and checks acceptance against the ASME
VIII Div 1 accumulation limits (1.10 single non-fire, 1.16 multiple, 1.21 fire).
import neqsim.process.safety.overpressure.*;
// 1. Cause scenarios (fluent → ReliefScenario)
ReliefScenario blocked = new BlockedOutletRelief().setName("Blocked gas outlet")
.setInflowRateKgPerHr(36000.0).setReliefPressureBara(50.0)
.setReliefTemperatureC(20.0).setFluid(gas).calculate();
ReliefScenario fire = new FireCaseRelief().setName("Pool fire")
.setVesselDiameterM(2.0).setWettedHeightM(3.0) // or setWettedAreaM2(..)
.setHasDrainage(true).setHasFireFighting(true)
.setLatentHeatJPerKg(350000.0).setReliefPressureBara(60.0)
.setReliefTemperatureC(120.0).setFluid(gas).calculate();
// 2. Engine: governing case + sizing + acceptance
ProtectedItem item = new ProtectedItem("V-100", 100.0) // tag, MAWP [bara]
.setReliefSetPressureBara(100.0).setBackPressureBara(1.5);
OverpressureStudyResult result = new OverpressureProtectionStudy(item)
.addScenario(blocked).addScenario(fire).evaluate();
result.getGoverningScenario().getName(); // worst credible case
result.getRequiredAreaIn2(); // API 526 required orifice area
result.getRecommendedOrifice(); // orifice letter
result.isCapacityAdequate(); // area-based adequacy
result.getAcceptance().getAccumulationFraction();
// 3. TR3001 compliance findings (PASS / FAIL / NEEDS_REVIEW)
List<ComplianceFinding> findings = new TR3001ComplianceChecker().check(result);
boolean compliant = new TR3001ComplianceChecker().isCompliant(findings);
// 4. Disposal-header roll-up (API 521 §5.3)
ReliefDisposalResult disposal = new ReliefDisposalNetwork("Fire zone 1")
.addRelief(resultA, true).addRelief(resultB, true).calculate();
disposal.getTotalSimultaneousKgPerS();
disposal.getPeakSingleKgPerS();
disposal.getGoverningContributor();
BlockedOutletRelief, CheckValveLeakRelief,
ControlValveFailureRelief, TubeRuptureRelief, FireCaseRelief..credible(false) to exclude
them from governing-case selection.TR3001ComplianceChecker emits six findings: credible scenarios (SR-26500),
governing case (SR-26503), capacity (SR-26506), acceptance (SR-26510), fire
basis (SR-26504), and dynamic determination (SR-26565); isCompliant is false
if any finding is FAIL.ReliefScenario phase to LIQUID (densityKgPerM3/viscosityPaS) or
TWO_PHASE (gasMassFraction, gasDensityKgPerM3, liquidDensityKgPerM3,
latentHeatJPerKg, liquidHeatCapacityJPerKgK) to trigger the matching sizing
path; missing two-phase inputs are reported as warnings, not failures.selectedAreaIn2 ≥ requiredAreaIn2),
not by re-plugging the selected area into the nozzle equation — API 520
empirical sizing and the nozzle capacity formula are not inverses.neqsim-relief-flare-network for flare-tip and
header hydraulics. Verified by OverpressureProtectionStudyTest +
OverpressureExtensionsTest.| Mistake | Fix |
|---|---|
| Counting BPCS twice as two IPLs | One BPCS = one IPL; control + alarm on same DCS = single layer |
| Claiming credit for procedural IPL with PFD 0.01 | Operator-action IPL minimum PFD = 0.1 (CCPS) unless trained+timed |
| Ignoring common-cause between IPLs | Same sensor / same final element ⇒ shared failure, halve credit |
| Setting target frequency = "fatality" | Use tolerable individual risk × exposed persons × outcome conditional |
| Picking SIL by "feel" | Always derive from LOPA gap (RRF needed) or risk-matrix calibration |
| Forgetting proof-test interval in PFD | PFDavg ≈ λ_DU × T_proof / 2; double T → double PFD |
results.json with safety_analysis section + JSON from LOPAResult.toJson() / SILVerificationResult.toJson()./mvnw test -Dtest=Nog070SilCatalogueTest,Sts0131GateTest,Api14cSafeChartBuilderTest,NorsokP002ComplianceCheckerTest,EsdResponseTimeSimulatorTest,OverpressureProtectionStudyTest,OverpressureExtensionsTest
neqsim-relief-flare-network — when LOPA shows PSV is the IPL of last resortneqsim-trapped-liquid-fire-rupture — blocked-in liquid fire rupture, PFP demand, and source-term handoffneqsim-dynamic-simulation — depressurization & blowdownneqsim-standards-lookup — IEC 61508/61511, NORSOK Z-013, API 754Alternatives
equinor/neqsim
Relief and flare system design — PSV sizing per API 520 (gas/liquid/two-phase, fire case), API 521 fire heat input, flare load summation, flare-tip sizing, radiation contour (API 521 §6), header back-pressure & Mach, and the integrated TR3001 overpressure-protection study engine (multi-cause governing-case selection, fire-case relief, compliance check, disposal-load roll-up). USE WHEN: a task involves PSV sizing, relief contingency analysis, thermal relief for trapped liquid, flare network hydra
equinor/neqsim
Reads and extracts structured engineering data from technical documents (PDFs, Word, Excel, CSV) and engineering images/drawings (P&IDs, vendor datasheets, mechanical arrangements, performance maps). USE WHEN: a user provides engineering documents or images — equipment data sheets, technical requirements, design basis, well test reports, P&ID descriptions, inspection reports, standards, vendor drawings, compressor maps, phase envelopes, material certificates, trapped-liquid fire rupture evidence
coreyhaines31/marketingskills
When the user wants to plan, design, or implement an A/B test or experiment, or build a growth experimentation program. Also use when the user mentions "A/B test," "split test," "experiment," "test this change," "variant copy," "multivariate test," "hypothesis," "should I test this," "which version is better," "test two versions," "statistical significance," "how long should I run this test," "growth experiments," "experiment velocity," "experiment backlog," "ICE score," "experimentation program
JasonColapietro/suede-creator-skills
Suede-owned experimentation discipline for hypotheses, sample sizing, test duration, significance, and repeatable experiment programs. Use when comparing variants, deciding whether a result is reliable, or building an experiment backlog and cadence. NOT FOR: analytics instrumentation (use suede-analytics), post-click conversion diagnosis (use suede-site-alchemy), or writing the variant copy itself (use suede-copy).