Skip to the content.

Process Logic and Scenario Simulation Enhancements

This document describes the enhancements made to the NeqSim process logic framework to support advanced safety system simulation with logic sequences and scenario testing.

New Core Components Added

1. Logic Actions (src/main/java/neqsim/process/logic/action/)

SetValveOpeningAction.java

OpenValveAction.java

CloseValveAction.java

SetSeparatorModeAction.java

2. Logic Conditions (src/main/java/neqsim/process/logic/condition/)

ValvePositionCondition.java

3. Scenario Execution Framework (src/main/java/neqsim/process/util/scenario/)

ProcessScenarioRunner.java

ScenarioExecutionSummary.java

Enhanced PushButton Integration

The existing PushButton class already supported linking to multiple ProcessLogic sequences via the linkToLogic() method, enabling:

Example Implementation

ProcessLogicIntegratedExample.java

This comprehensive example demonstrates:

  1. Process System Construction
    • High-pressure gas separation process
    • Safety valves, blowdown systems, and flare
    • Complete instrumentation setup
  2. ESD Logic Implementation
    ESDLogic esdLogic = new ESDLogic("ESD Level 1");
    esdLogic.addAction(new CloseValveAction(inletValve), 0.0);
    esdLogic.addAction(new SetSplitterAction(gasSplitter, new double[]{0.0, 1.0}), 0.5);
    esdLogic.addAction(new ActivateBlowdownAction(bdValve), 0.5);
    esdLogic.addAction(new SetSeparatorModeAction(separator, false), 1.0);
    
  3. Startup Logic with Permissives
    StartupLogic startupLogic = new StartupLogic("System Startup");
    startupLogic.addPermissive(new PressureCondition(separator, 5.0, "<"));
    startupLogic.addPermissive(new ValvePositionCondition(bdValve, "<", 5.0));
    startupLogic.addPermissive(new TimerCondition(10.0));
    
  4. Scenario Testing
    ProcessScenarioRunner runner = new ProcessScenarioRunner(processSystem);
    runner.addLogic(esdLogic);
    runner.addLogic(startupLogic);
       
    ProcessSafetyScenario scenario = ProcessSafetyScenario.builder("High Pressure")
        .customManipulator("HP Feed", stream -> stream.setPressure(70.0, "bara"))
        .build();
       
    runner.runScenario("High Pressure Test", scenario, 60.0, 1.0);
    

Key Benefits

1. Reusable Components

2. Comprehensive Testing

3. Safety System Integration

4. Industry Best Practices

Usage Patterns

Basic ESD Implementation

ESDLogic esd = new ESDLogic("Emergency Shutdown");
esd.addAction(new CloseValveAction(inletValve), 0.0);
esd.addAction(new ActivateBlowdownAction(blowdownValve), 1.0);
pushButton.linkToLogic(esd);

Startup with Permissives

StartupLogic startup = new StartupLogic("Safe Startup");
startup.addPermissive(new PressureCondition(vessel, 2.0, "<"));
startup.addPermissive(new TemperatureCondition(vessel, 40.0, "<"));
startup.addPermissive(new TimerCondition(30.0));
startup.addAction(new OpenValveAction(feedValve), 0.0);

Scenario Testing

ProcessScenarioRunner runner = new ProcessScenarioRunner(system);
runner.addLogic(esdLogic);

ProcessSafetyScenario overpressure = ProcessSafetyScenario.builder("Overpressure")
    .customManipulator("Feed", s -> s.setPressure(80.0, "bara"))
    .build();

ScenarioExecutionSummary result = runner.runScenario("Test", overpressure, 120.0, 1.0);

Future Enhancements

The framework is designed for easy extension:

This implementation provides a solid foundation for complex process safety simulation while maintaining the clean architecture and patterns established in the NeqSim framework.