Skip to the content.

Risk Simulation Framework Documentation

This documentation covers NeqSim’s comprehensive Operational Risk Simulation Framework for equipment failure analysis, production impact assessment, and process topology analysis.


πŸ“š Documentation Structure

Core Framework

Section Description
Overview Framework architecture and key concepts
Equipment Failure Modeling Failure modes, types, and reliability data
Risk Matrix 5Γ—5 risk matrix with probability, consequence, and cost
Monte Carlo Simulation Stochastic simulation for availability analysis
Production Impact Analysis Analyzing failure effects on production
Degraded Operation Optimizing plant operation during outages
Process Topology Graph structure extraction and analysis
STID & Functional Location Equipment tagging following ISO 14224
Dependency Analysis Cascade failure and cross-installation effects
Mathematical Reference Formulas and statistical methods
API Reference Complete Java API documentation

Advanced Risk Framework (P1-P7)

Section Description
Advanced Framework Overview Overview of all 7 priority packages
P1: Dynamic Simulation Monte Carlo with transient modeling
P2: SIS/SIF Integration IEC 61508/61511, LOPA, SIL verification
P4: Bow-Tie Analysis Barrier analysis, threat/consequence visualization
P6: Condition-Based Reliability Health monitoring, RUL estimation

πŸš€ Quick Start

Java

import neqsim.process.safety.risk.*;
import neqsim.process.util.topology.*;
import neqsim.process.equipment.failure.*;

// Create process system
ProcessSystem process = new ProcessSystem();
// ... add equipment ...

// Risk analysis
RiskMatrix matrix = new RiskMatrix(process);
matrix.buildRiskMatrix();
System.out.println(matrix.toVisualization());

// Monte Carlo simulation
OperationalRiskSimulator simulator = new OperationalRiskSimulator(process);
simulator.addEquipmentReliability("Compressor A", 0.5, 24.0);
OperationalRiskResult result = simulator.runSimulation(10000, 365);
System.out.println("Availability: " + result.getAvailability() + "%");

// Topology analysis
ProcessTopologyAnalyzer topology = new ProcessTopologyAnalyzer(process);
topology.buildTopology();
topology.setFunctionalLocation("Compressor A", "1775-KA-23011A");

Advanced Risk Framework (Python)

# Dynamic simulation with transients
from neqsim.process.safety.risk.dynamic import DynamicRiskSimulator

sim = DynamicRiskSimulator("Platform Risk")
sim.setBaseProductionRate(100.0)
sim.addEquipment("Compressor", 8760, 72, 1.0)
sim.setShutdownProfile(DynamicRiskSimulator.RampProfile.S_CURVE)
result = sim.runSimulation()
print(f"Transient losses: {result.getTransientLoss().getTotalTransientLoss()}")

# SIS/LOPA Analysis
from neqsim.process.safety.risk.sis import SISIntegratedRiskModel, SafetyInstrumentedFunction

model = SISIntegratedRiskModel("Overpressure Protection")
model.setInitiatingEventFrequency(0.1)
model.addIPL("BPCS Alarm", 10)
model.addIPL("Operator", 10)
sif = SafetyInstrumentedFunction("SIF-001", "PAHH")
sif.setSILTarget(2)
model.addSIF(sif)
lopa = model.performLOPA()
print(f"LOPA: {'PASS' if lopa.isAcceptable() else 'FAIL'}")

Python (neqsim-python)

import jpype
import neqsim

from neqsim.process.safety.risk import RiskMatrix, OperationalRiskSimulator
from neqsim.process.util.topology import ProcessTopologyAnalyzer, FunctionalLocation

# Build topology
topology = ProcessTopologyAnalyzer(process)
topology.buildTopology()

# STID tagging
topology.setFunctionalLocation("Compressor A", "1775-KA-23011A")

# Risk matrix
matrix = RiskMatrix()
matrix.addRiskItem("Compressor Trip", 
    RiskMatrix.ProbabilityCategory.POSSIBLE,
    RiskMatrix.ConsequenceCategory.MAJOR, 
    500000.0)
print(matrix.toVisualization())

πŸ“Š Framework Architecture

β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
β”‚                    NeqSim Process Simulation                        β”‚
β”‚                         ProcessSystem                               β”‚
β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜
                               β”‚
           β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”Όβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
           β–Ό                   β–Ό                   β–Ό
β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”  β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”  β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
β”‚  Equipment      β”‚  β”‚  Production     β”‚  β”‚  Process        β”‚
β”‚  Failure        β”‚  β”‚  Impact         β”‚  β”‚  Topology       β”‚
β”‚  Modeling       β”‚  β”‚  Analysis       β”‚  β”‚  Analysis       β”‚
β””β”€β”€β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”€β”€β”˜  β””β”€β”€β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”€β”€β”˜  β””β”€β”€β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”€β”€β”˜
         β”‚                    β”‚                    β”‚
         β–Ό                    β–Ό                    β–Ό
β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”  β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”  β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
β”‚  Reliability    β”‚  β”‚  Degraded       β”‚  β”‚  Dependency     β”‚
β”‚  Data           β”‚  β”‚  Operation      β”‚  β”‚  Analysis       β”‚
β”‚  (OREDA)        β”‚  β”‚  Optimizer      β”‚  β”‚                 β”‚
β””β”€β”€β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”€β”€β”˜  β””β”€β”€β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”€β”€β”˜  β””β”€β”€β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”€β”€β”˜
         β”‚                    β”‚                    β”‚
         β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”Όβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜
                              β–Ό
              β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
              β”‚      Risk Assessment          β”‚
              β”‚  β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”  β”‚
              β”‚  β”‚    Monte Carlo          β”‚  β”‚
              β”‚  β”‚    Simulation           β”‚  β”‚
              β”‚  β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜  β”‚
              β”‚  β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”  β”‚
              β”‚  β”‚    Risk Matrix          β”‚  β”‚
              β”‚  β”‚    (5Γ—5 Visualization)  β”‚  β”‚
              β”‚  β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜  β”‚
              β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜

πŸ“¦ Package Structure

neqsim.process
β”œβ”€β”€ equipment.failure
β”‚   β”œβ”€β”€ EquipmentFailureMode      - Failure type definitions
β”‚   β”œβ”€β”€ ReliabilityDataSource     - OREDA reliability data
β”‚   └── package-info.java
β”œβ”€β”€ safety.risk
β”‚   β”œβ”€β”€ OperationalRiskSimulator  - Monte Carlo engine
β”‚   β”œβ”€β”€ OperationalRiskResult     - Simulation results
β”‚   └── RiskMatrix                - 5Γ—5 risk matrix
└── util
    β”œβ”€β”€ optimizer
    β”‚   β”œβ”€β”€ ProductionImpactAnalyzer   - Impact analysis
    β”‚   β”œβ”€β”€ ProductionImpactResult     - Impact results
    β”‚   β”œβ”€β”€ DegradedOperationOptimizer - Degraded optimization
    β”‚   └── DegradedOperationResult    - Optimization results
    └── topology
        β”œβ”€β”€ ProcessTopologyAnalyzer    - Graph extraction
        β”œβ”€β”€ FunctionalLocation         - STID parsing
        β”œβ”€β”€ DependencyAnalyzer         - Cascade analysis
        └── package-info.java