Skip to the content.

HIPPS (High Integrity Pressure Protection System) Implementation in NeqSim

Overview

HIPPS is a Safety Instrumented System (SIS) designed to prevent overpressure by shutting down the source of pressure rather than relieving it through pressure safety valves (PSVs) or rupture disks. This document describes the HIPPS implementation in NeqSim and provides guidance for safety simulations.

What is HIPPS?

High Integrity Pressure Protection System (HIPPS) is an automated safety system that:

HIPPS vs. PSV Comparison

Aspect HIPPS PSV (Pressure Safety Valve)
Action Stops flow (isolation) Relieves pressure (venting)
Trip Point Below MAWP (e.g., 90%) At or above MAWP
Environmental Impact Prevents flaring Releases to flare
Safety Rating SIL 2 or SIL 3 Mechanical (non-SIL)
Testing Partial stroke, proof tests Periodic inspection
Response Time 2-5 seconds typical Instantaneous (spring-loaded)
Redundancy Multiple transmitters, voting logic Single device
Failure Mode Fail-safe (close) or diagnosed Fail-safe (open)
Cost Higher initial cost Lower initial cost
Application Subsea, closed systems General overpressure protection

Implementation Components

1. HIPPSValve Class

Location: src/main/java/neqsim/process/equipment/valve/HIPPSValve.java

Key Features:

2. Voting Logic

HIPPS uses redundant pressure transmitters with voting logic to prevent spurious trips while maintaining safety:

1oo1 (1 out of 1)

1oo2 (1 out of 2)

2oo2 (2 out of 2)

2oo4 (2 out of 4)

Usage Examples

Example 1: Basic HIPPS Configuration (2oo3 Voting)

// Create high-pressure feed stream
SystemInterface fluid = new SystemSrkEos(298.15, 100.0);
fluid.addComponent("methane", 85.0);
fluid.addComponent("ethane", 10.0);
fluid.addComponent("propane", 5.0);
fluid.setMixingRule("classic");
fluid.createDatabase(true);

Stream feedStream = new Stream("HP Feed", fluid);
feedStream.setFlowRate(20000.0, "kg/hr");
feedStream.setPressure(100.0, "bara");
feedStream.setTemperature(40.0, "C");
feedStream.run();

// Create three redundant pressure transmitters
PressureTransmitter PT1 = new PressureTransmitter("PT-101A", feedStream);
PressureTransmitter PT2 = new PressureTransmitter("PT-101B", feedStream);
PressureTransmitter PT3 = new PressureTransmitter("PT-101C", feedStream);

// Configure HIHI alarm at 90 bara (below 100 bara MAWP)
AlarmConfig hippsAlarm = AlarmConfig.builder()
    .highHighLimit(90.0)  // HIPPS trips at 90% of MAWP
    .deadband(2.0)
    .delay(0.5)          // 500ms confirmation delay
    .unit("bara")
    .build();

PT1.setAlarmConfig(hippsAlarm);
PT2.setAlarmConfig(hippsAlarm);
PT3.setAlarmConfig(hippsAlarm);

// Create HIPPS valve with 2oo3 voting (SIL 3)
HIPPSValve hippsValve = new HIPPSValve("HIPPS-XV-001", feedStream);
hippsValve.addPressureTransmitter(PT1);
hippsValve.addPressureTransmitter(PT2);
hippsValve.addPressureTransmitter(PT3);
hippsValve.setVotingLogic(HIPPSValve.VotingLogic.TWO_OUT_OF_THREE);
hippsValve.setClosureTime(3.0); // 3 second SIL-rated actuator
hippsValve.setSILRating(3);
hippsValve.setProofTestInterval(8760.0); // Annual proof test

// Add to process system
ProcessSystem process = new ProcessSystem();
process.add(hippsValve);

Example 2: Dynamic Simulation with HIPPS

// Transient simulation with pressure ramp
double timeStep = 0.5; // seconds
double totalTime = 30.0;

for (double time = 0; time <= totalTime; time += timeStep) {
    // Update process conditions (e.g., blocked outlet scenario)
    if (time > 5.0) {
        // Simulate pressure buildup
        double pressure = 80.0 + (time - 5.0) * 2.0; // 2 bara/sec ramp
        feedStream.setPressure(pressure, "bara");
        feedStream.run();
    }
    
    // Evaluate alarms on all transmitters
    double currentPressure = feedStream.getPressure("bara");
    PT1.evaluateAlarm(currentPressure, timeStep, time);
    PT2.evaluateAlarm(currentPressure, timeStep, time);
    PT3.evaluateAlarm(currentPressure, timeStep, time);
    
    // Run HIPPS transient calculation
    hippsValve.runTransient(timeStep, UUID.randomUUID());
    
    // Check HIPPS status
    if (hippsValve.hasTripped()) {
        System.out.println("HIPPS activated at t=" + time + "s, P=" + currentPressure + " bara");
        System.out.println("Active transmitters: " + hippsValve.getActiveTransmitterCount());
        break;
    }
    
    // Continue processing downstream equipment...
}

Example 3: HIPPS with PSV Backup

// HIPPS provides primary protection, PSV is backup

// Create HIPPS (trips at 90 bara)
HIPPSValve hippsValve = new HIPPSValve("HIPPS-XV-001", feedStream);
// ... configure as in Example 1 ...

// Create PSV as backup (set at 100 bara MAWP)
SafetyValve psv = new SafetyValve("PSV-001", feedStream);
psv.setPressureSpec(100.0); // PSV set pressure at MAWP
psv.setFullOpenPressure(110.0); // Full open at 10% overpressure
psv.setBlowdown(7.0); // 7% blowdown

// In normal operation:
// 1. Pressure rises due to upset condition
// 2. HIPPS trips at 90 bara (prevents further pressure rise)
// 3. PSV never lifts because HIPPS stopped the overpressure
// 4. No flaring or emissions

// In HIPPS failure scenario:
// 1. Pressure continues to rise
// 2. PSV lifts at 100 bara (backup protection)
// 3. System is protected, but gas is flared

Example 4: Transmitter Failure Scenario

// Simulate a transmitter failure during operation

HIPPSValve hippsValve = new HIPPSValve("HIPPS-XV-001", feedStream);
hippsValve.setVotingLogic(HIPPSValve.VotingLogic.TWO_OUT_OF_THREE);

PressureTransmitter PT1 = new PressureTransmitter("PT-101A", feedStream);
PressureTransmitter PT2 = new PressureTransmitter("PT-101B", feedStream);
PressureTransmitter PT3 = new PressureTransmitter("PT-101C", feedStream);

hippsValve.addPressureTransmitter(PT1);
hippsValve.addPressureTransmitter(PT2);
hippsValve.addPressureTransmitter(PT3);

// During operation, PT2 fails (diagnosed and bypassed)
hippsValve.removePressureTransmitter(PT2);

// Change voting to 1oo2 for continued operation
hippsValve.setVotingLogic(HIPPSValve.VotingLogic.ONE_OUT_OF_TWO);

// System continues operating with degraded redundancy
// Schedule maintenance to repair PT2 and restore 2oo3 voting

Example 5: Partial Stroke Testing

// Perform partial stroke test (required for SIL validation)

HIPPSValve hippsValve = new HIPPSValve("HIPPS-XV-001", feedStream);

// During normal operation, perform 15% stroke test
hippsValve.performPartialStrokeTest(0.15); // 15% stroke

// Simulation of partial stroke test
double testDuration = 5.0; // seconds
double timeStep = 0.1;

for (double time = 0; time < testDuration; time += timeStep) {
    hippsValve.runTransient(timeStep, UUID.randomUUID());
    
    if (hippsValve.isPartialStrokeTestActive()) {
        System.out.println("Test in progress: Opening = " + 
            hippsValve.getPercentValveOpening() + "%");
    }
}

// Valve returns to 100% open after test
// Test validates valve can move (demonstrates functional operation)

Safety Simulation Best Practices

1. Response Time Modeling

HIPPS response time includes:

// Model realistic closure time
hippsValve.setClosureTime(3.0); // 3 seconds typical for SIL-rated ball valve

// Account for alarm confirmation delay
AlarmConfig alarm = AlarmConfig.builder()
    .highHighLimit(90.0)
    .delay(0.5) // 500 ms confirmation delay
    .build();

2. Set Point Selection

HIPPS trip point should be:

// Example: MAWP = 100 bara
// Normal operation = 70-80 bara
// HIPPS trip = 90 bara (10% margin below MAWP)
// PSV set = 100 bara (at MAWP)

double mawp = 100.0;
double hippsTrip = mawp * 0.90; // 90% of MAWP

3. Transmitter Placement

4. Failure Mode Analysis

Model both success and failure scenarios:

// Scenario 1: HIPPS successful operation
// - Transmitters detect overpressure
// - Voting logic triggers
// - Valve closes in 3 seconds
// - Pressure stabilizes below MAWP

// Scenario 2: HIPPS spurious trip
hippsValve.recordSpuriousTrip();
// - Production lost
// - Economic impact
// - Need to restart system

// Scenario 3: HIPPS failure to close
hippsValve.setTripEnabled(false); // Simulate failure
// - PSV must provide protection
// - Flaring occurs
// - Verify PSV capacity adequate

5. Integration with Process Control

// HIPPS should be independent of process control system
// But can provide signals for:
// - Alarm annunciation
// - Automatic process shutdown
// - Data logging

if (hippsValve.hasTripped()) {
    // Trigger alarms
    // Shut down feed pumps/compressors
    // Log event for investigation
    System.out.println(hippsValve.getDiagnostics());
}

6. Proof Test Interval

// Track proof test intervals for SIL validation
hippsValve.setProofTestInterval(8760.0); // Annual proof test

// During operation
if (hippsValve.isProofTestDue()) {
    // Schedule maintenance
    // Perform full functional test
    // Document results
    hippsValve.performProofTest(); // Reset timer
}

Typical Applications

1. Subsea Pipeline Protection

[Platform] --100 bara--> [Subsea Pipeline] ---> [HIPPS] --50 bara--> [Receiving Platform]

2. Blocked Outlet Scenario

[Compressor] --> [HIPPS] --> [Valve] --> [Process]

3. Thermal Expansion

[Storage] --liquid--> [HIPPS] ---> [Isolated Section] ---> [Valve]

Diagnostic and Monitoring

Getting HIPPS Status

// Basic status
System.out.println(hippsValve.toString());

// Comprehensive diagnostics
System.out.println(hippsValve.getDiagnostics());

// Key metrics
int activeTx = hippsValve.getActiveTransmitterCount();
boolean tripped = hippsValve.hasTripped();
int spurious = hippsValve.getSpuriousTripCount();
double lastTrip = hippsValve.getLastTripTime();
boolean testDue = hippsValve.isProofTestDue();

Output Example

=== HIPPS DIAGNOSTICS ===
System: HIPPS-XV-001
SIL Rating: SIL 3
Configuration: 2oo3 voting
Closure Time: 3.0 s

Transmitter Status:
  PT-1: ALARM (92.50 bara)
  PT-2: ALARM (92.45 bara)
  PT-3: OK (89.80 bara)

Operational History:
  Total Trips: 1
  Spurious Trips: 0
  Last Trip: 15.5 s
  Runtime: 120.0 s

Maintenance:
  Proof Test Interval: 8760 hrs
  Time Since Proof Test: 450.5 hrs
  Status: OK

Testing

Comprehensive test suite located at: src/test/java/neqsim/process/equipment/valve/HIPPSValveTest.java

Tests cover:

Run tests:

mvnw test -Dtest=HIPPSValveTest

Standards and References

Industry Standards

SIL Requirements

SIL Level PFD (Probability of Failure on Demand) Typical Application
SIL 1 10⁻¹ to 10⁻² Low risk, 1oo1 voting
SIL 2 10⁻² to 10⁻³ Medium risk, 1oo2 or 2oo3 voting
SIL 3 10⁻³ to 10⁻⁴ High risk, 2oo3 voting

Summary

HIPPS in NeqSim provides:

Key Advantage: HIPPS prevents overpressure before it occurs, eliminating flaring and protecting equipment, while PSVs relieve pressure after it exceeds safe limits.

For safety-critical applications, HIPPS + PSV provides defense-in-depth protection strategy.

Author

Implementation follows NeqSim architecture patterns and coding standards for process safety simulation.