Class OperationalRiskSimulator

java.lang.Object
neqsim.process.safety.risk.OperationalRiskSimulator
All Implemented Interfaces:
Serializable
Direct Known Subclasses:
DynamicRiskSimulator

public class OperationalRiskSimulator extends Object implements Serializable
Monte Carlo simulator for operational risk and production availability analysis.

Simulates equipment failures over time to estimate:

  • Expected production over a time horizon
  • Production availability (uptime percentage)
  • Expected downtime events and durations
  • Production loss distribution (P10/P50/P90)

Example Usage


OperationalRiskSimulator simulator = new OperationalRiskSimulator(processSystem);
simulator.setFeedStreamName("Well Feed");
simulator.setProductStreamName("Export Gas");

// Add equipment with failure rates
simulator.addEquipmentReliability("HP Compressor", 0.02, 24.0); // 2% failures/year, 24hr MTTR
simulator.addEquipmentReliability("LP Compressor", 0.02, 24.0);

// Run simulation
OperationalRiskResult result = simulator.runSimulation(1000, 365.0); // 1000 iterations, 1 year

System.out.println("Expected Availability: " + result.getAvailability() + "%");
System.out.println("P50 Production: " + result.getP50Production() + " kg");

Version:
1.0
Author:
NeqSim Development Team
See Also:
  • Field Details

    • serialVersionUID

      private static final long serialVersionUID
      See Also:
    • logger

      private static final org.apache.logging.log4j.Logger logger
      Logger.
    • processSystem

      private ProcessSystem processSystem
      The process system to simulate.
    • equipmentReliability

      Equipment reliability data.
    • impactAnalyzer

      private transient ProductionImpactAnalyzer impactAnalyzer
      Production impact analyzer.
    • feedStreamName

      private String feedStreamName
      Feed stream name.
    • productStreamName

      private String productStreamName
      Product stream name.
    • randomSeed

      private long randomSeed
      Random seed for reproducibility.
    • HOURS_PER_YEAR

      private static final double HOURS_PER_YEAR
      Hours per year for calculations.
      See Also:
  • Constructor Details

    • OperationalRiskSimulator

      public OperationalRiskSimulator(ProcessSystem processSystem)
      Creates an operational risk simulator.
      Parameters:
      processSystem - the process system to simulate
  • Method Details

    • autoDetectStreams

      private void autoDetectStreams()
    • setFeedStreamName

      public OperationalRiskSimulator setFeedStreamName(String name)
      Sets the feed stream name.
      Parameters:
      name - the feed stream name
      Returns:
      this simulator for chaining
    • setProductStreamName

      public OperationalRiskSimulator setProductStreamName(String name)
      Sets the product stream name.
      Parameters:
      name - the product stream name
      Returns:
      this simulator for chaining
    • setRandomSeed

      public OperationalRiskSimulator setRandomSeed(long seed)
      Sets the random seed for reproducibility.
      Parameters:
      seed - the random seed
      Returns:
      this simulator for chaining
    • addEquipmentReliability

      public OperationalRiskSimulator addEquipmentReliability(String equipmentName, double failureRate, double mttr)
      Adds equipment reliability data.
      Parameters:
      equipmentName - name of the equipment
      failureRate - failures per year
      mttr - mean time to repair in hours
      Returns:
      this simulator for chaining
    • addEquipmentMtbf

      public OperationalRiskSimulator addEquipmentMtbf(String equipmentName, double mtbf, double mttr)
      Adds equipment reliability using OREDA-style data.
      Parameters:
      equipmentName - equipment name
      mtbf - mean time between failures in hours
      mttr - mean time to repair in hours
      Returns:
      this simulator for chaining
    • getEquipmentReliability

      public Map<String, OperationalRiskSimulator.EquipmentReliability> getEquipmentReliability()
      Gets the equipment reliability data.
      Returns:
      map of equipment name to reliability data
    • runSimulation

      public OperationalRiskResult runSimulation(int iterations, double timeHorizonDays)
      Runs the Monte Carlo simulation.
      Parameters:
      iterations - number of Monte Carlo iterations
      timeHorizonDays - simulation time horizon in days
      Returns:
      simulation result
    • simulateIteration

      private OperationalRiskSimulator.SimulationState simulateIteration(Random random, double timeHorizonHours, double baselineProduction, Map<String,Double> productionWithFailure)
    • getBaselineProductionRate

      private double getBaselineProductionRate()
    • generateForecast

      public OperationalRiskSimulator.ProductionForecast generateForecast(int days, int iterations)
      Generates a production forecast with confidence intervals.
      Parameters:
      days - number of days to forecast
      iterations - Monte Carlo iterations
      Returns:
      production forecast