Skip to the content.

Subsea Manifolds

Documentation for subsea production manifold equipment in NeqSim.

Table of Contents


Overview

Location: neqsim.process.equipment.subsea

A subsea manifold gathers production from multiple wells and routes it to flowlines for transport to the host facility. The SubseaManifold class models:

Class Description
SubseaManifold Multi-slot production manifold
SubseaManifoldMechanicalDesign Mechanical design calculations

SubseaManifold Class

Class Hierarchy

ProcessEquipmentBaseClass
└── SubseaManifold
    ├── enum: ManifoldType
    ├── static class: ValveSkid
    └── contains: Mixer (production/test headers)

Key Features

Constructor

import neqsim.process.equipment.subsea.SubseaManifold;

// Create 6-slot manifold
SubseaManifold manifold = new SubseaManifold("Manifold-A", 6);

// Configure design parameters
manifold.setWaterDepth(380.0);
manifold.setDesignPressure(350.0);
manifold.setDesignTemperature(120.0);
manifold.setHasTestHeader(true);

Manifold Types

ManifoldType Enumeration

Type Description Application
PRODUCTION_ONLY Single production header Simple gathering
PRODUCTION_TEST Production + test headers Standard design
FULL_SERVICE Production + test + injection Complex fields
INJECTION Water/gas injection only IOR projects

Selecting Manifold Type

// Standard production with testing capability
manifold.setManifoldType(SubseaManifold.ManifoldType.PRODUCTION_TEST);

// Full service for complex operations
manifold.setManifoldType(SubseaManifold.ManifoldType.FULL_SERVICE);

// Injection manifold for water injection wells
SubseaManifold injManifold = new SubseaManifold("Injection Manifold", 4);
injManifold.setManifoldType(SubseaManifold.ManifoldType.INJECTION);

Valve Skid Configuration

ValveSkid Inner Class

Each well slot has a valve skid with:

Component Function
Production Valve (PV) Route to production header
Test Valve (TV) Route to test header
Crossover Valve (XV) Header crossover capability
Isolation Valve (IV) Emergency isolation

Configuring Valve Skids

// Get valve skid for slot 1
SubseaManifold.ValveSkid skid = manifold.getValveSkid(1);

// Configure well connection
skid.setWellName("Well-A1");
skid.setActive(true);
skid.setRouting("production");  // or "test"

// Connect stream
skid.setConnectedStream(well1Stream);

Valve Positions

Routing PV TV Status
Production Open Closed Normal production
Test Closed Open Well testing
Shut-in Closed Closed Well isolated

Well Routing

Adding Wells to Manifold

// Add well streams to manifold
manifold.addWellStream(well1Stream);
manifold.addWellStream(well2Stream);
manifold.addWellStream(well3Stream);
manifold.addWellStream(well4Stream);

// Check well count
int connectedWells = manifold.getConnectedWellCount();
System.out.println("Connected wells: " + connectedWells + "/" + manifold.getNumberOfSlots());

Routing Wells to Test

// Route well 2 to test header
manifold.routeWellToTest(2);

// Route well back to production
manifold.routeWellToProduction(2);

// Route all wells to production
manifold.routeAllToProduction();

Getting Output Streams

// Run manifold
manifold.run();

// Get output streams
StreamInterface productionStream = manifold.getProductionStream();
StreamInterface testStream = manifold.getTestStream();

System.out.println("Production rate: " + productionStream.getFlowRate("kg/hr") + " kg/hr");
System.out.println("Test rate: " + testStream.getFlowRate("kg/hr") + " kg/hr");

Usage Examples

Example 1: Basic Manifold Setup

import neqsim.thermo.system.SystemSrkEos;
import neqsim.process.equipment.stream.Stream;
import neqsim.process.equipment.subsea.SubseaManifold;

// Create well fluids
SystemSrkEos fluid1 = new SystemSrkEos(353.15, 180.0);
fluid1.addComponent("methane", 75.0);
fluid1.addComponent("ethane", 10.0);
fluid1.addComponent("propane", 5.0);
fluid1.addComponent("n-heptane", 10.0);
fluid1.setMixingRule("classic");

// Create well streams
Stream well1 = new Stream("Well-A1", fluid1.clone());
well1.setFlowRate(20000.0, "kg/hr");
well1.run();

Stream well2 = new Stream("Well-A2", fluid1.clone());
well2.setFlowRate(25000.0, "kg/hr");
well2.run();

Stream well3 = new Stream("Well-A3", fluid1.clone());
well3.setFlowRate(18000.0, "kg/hr");
well3.run();

// Create 6-slot manifold
SubseaManifold manifold = new SubseaManifold("Manifold-A", 6);
manifold.setWaterDepth(380.0);
manifold.setDesignPressure(350.0);
manifold.setHasTestHeader(true);

// Add wells
manifold.addWellStream(well1);
manifold.addWellStream(well2);
manifold.addWellStream(well3);

// Run manifold
manifold.run();

// Get commingled production
StreamInterface production = manifold.getProductionStream();
System.out.println("Total production: " + production.getFlowRate("kg/hr") + " kg/hr");

Example 2: Well Test Operation

// Create manifold with wells
SubseaManifold manifold = new SubseaManifold("Manifold-B", 4);
manifold.addWellStream(wellA);
manifold.addWellStream(wellB);
manifold.addWellStream(wellC);
manifold.addWellStream(wellD);

// Normal production mode
manifold.routeAllToProduction();
manifold.run();
System.out.println("Production mode:");
System.out.println("  Production: " + manifold.getProductionStream().getFlowRate("kg/hr") + " kg/hr");

// Test Well C individually
System.out.println("\nTesting Well C:");
manifold.routeWellToTest(3);  // Well C is slot 3
manifold.run();

StreamInterface testStream = manifold.getTestStream();
System.out.println("  Well C rate: " + testStream.getFlowRate("kg/hr") + " kg/hr");
System.out.println("  Well C GOR: " + calculateGOR(testStream) + " Sm3/Sm3");

// Return to normal production
manifold.routeAllToProduction();

Example 3: Manifold with Header Sizing

// Create manifold
SubseaManifold manifold = new SubseaManifold("Main Manifold", 8);
manifold.setWaterDepth(500.0);
manifold.setDesignPressure(400.0);
manifold.setDesignTemperature(130.0);

// Set header sizes (inches)
manifold.setProductionHeaderSize(12.0);  // 12" production header
manifold.setTestHeaderSize(8.0);         // 8" test header
manifold.setServiceHeaderSize(4.0);      // 4" service header

// Configure slot piping
manifold.setSlotPipeSize(6.0);  // 6" from each well slot

// Get mechanical design
SubseaManifoldMechanicalDesign design = manifold.getMechanicalDesign();
design.setMaterialGrade("6Mo");
design.calcDesign();

System.out.println("Manifold weight: " + design.getWeight() + " tonnes");

Example 4: Complex Field Development

import neqsim.process.processmodel.ProcessSystem;

// Create process system
ProcessSystem subsea = new ProcessSystem("Subsea System");

// Create two manifolds
SubseaManifold manifoldNorth = new SubseaManifold("North Manifold", 6);
SubseaManifold manifoldSouth = new SubseaManifold("South Manifold", 6);

// Configure both
for (SubseaManifold m : Arrays.asList(manifoldNorth, manifoldSouth)) {
    m.setWaterDepth(450.0);
    m.setDesignPressure(380.0);
    m.setHasTestHeader(true);
}

// Add wells to north manifold
manifoldNorth.addWellStream(wellN1);
manifoldNorth.addWellStream(wellN2);
manifoldNorth.addWellStream(wellN3);

// Add wells to south manifold
manifoldSouth.addWellStream(wellS1);
manifoldSouth.addWellStream(wellS2);
manifoldSouth.addWellStream(wellS3);
manifoldSouth.addWellStream(wellS4);

// Run manifolds
subsea.add(manifoldNorth);
subsea.add(manifoldSouth);
subsea.run();

// Get total field production
double northRate = manifoldNorth.getProductionStream().getFlowRate("kg/hr");
double southRate = manifoldSouth.getProductionStream().getFlowRate("kg/hr");
System.out.println("Field production: " + (northRate + southRate) + " kg/hr");

Design Standards

Applicable Standards

Standard Title
API RP 17G Completion/Workover Risers
API RP 17N Subsea Production System Reliability
DNV-ST-F101 Submarine Pipeline Systems
NORSOK U-001 Subsea Production Systems

Design Parameters

Parameter Typical Range Unit
Number of Slots 2-12 -
Water Depth 50-3000 m
Design Pressure 345-1034 bar
Design Temperature -29 to 175 °C
Design Life 20-30 years

Material Selection

Component Material Application
Headers 25Cr SDSS Sour, high pressure
Valves Inconel 625 Corrosion resistant
Structure Carbon steel Non-wetted
Piping 6Mo, 25Cr Sour service

Header Sizing Guidelines

Production Header

\[D_{header} = \sqrt{\frac{4 \cdot Q_{total}}{\pi \cdot v_{max}}}\]

Where:

Typical Sizes

Wells Connected Header Size
2-4 8-10”
4-6 10-12”
6-8 12-14”
8-12 14-16”


API Reference

SubseaManifold

// Constructors
SubseaManifold(String name)
SubseaManifold(String name, int numberOfSlots)

// Configuration
void setManifoldType(ManifoldType type)
ManifoldType getManifoldType()
void setWaterDepth(double depth)
void setDesignPressure(double pressure)
void setDesignTemperature(double temperature)
void setHasTestHeader(boolean hasTest)

// Header sizing
void setProductionHeaderSize(double inches)
void setTestHeaderSize(double inches)
void setServiceHeaderSize(double inches)
void setSlotPipeSize(double inches)

// Well connections
void addWellStream(StreamInterface wellStream)
int getConnectedWellCount()
int getNumberOfSlots()

// Valve skids
ValveSkid getValveSkid(int slotNumber)

// Well routing
void routeWellToProduction(int slotNumber)
void routeWellToTest(int slotNumber)
void routeAllToProduction()

// Output streams
StreamInterface getProductionStream()
StreamInterface getTestStream()

// Mechanical design
SubseaManifoldMechanicalDesign getMechanicalDesign()

// Run simulation
void run()
void run(UUID id)

ManifoldType Enum

enum ManifoldType {
    PRODUCTION_ONLY,
    PRODUCTION_TEST,
    FULL_SERVICE,
    INJECTION
}

ValveSkid Class

class ValveSkid {
    int getSlotNumber()
    String getWellName()
    void setWellName(String name)
    boolean isActive()
    void setActive(boolean active)
    String getRouting()
    void setRouting(String routing)
    StreamInterface getConnectedStream()
    void setConnectedStream(StreamInterface stream)
}