Class SURFCostEstimator
java.lang.Object
neqsim.process.mechanicaldesign.subsea.SURFCostEstimator
SURF (Subsea, Umbilicals, Risers, Flowlines) CAPEX estimator for field development.
Aggregates cost estimates for all major SURF equipment categories:
- S — Subsea infrastructure: Christmas trees, manifolds, PLETs, jumpers
- U — Umbilicals: control umbilicals from host platform to subsea field
- R — Risers: dynamic or rigid risers from seabed to host platform
- F — Flowlines: infield flowlines and export pipelines
Cost estimates are based on industry benchmarks for the Norwegian Continental Shelf (NCS) and can
be adjusted for other regions using the SubseaCostEstimator.Region parameter. All costs
are in USD unless converted.
- Version:
- 1.0
- Author:
- ESOL
- See Also:
-
Field Summary
FieldsModifier and TypeFieldDescriptionprivate doublePipeline coating price per m2 USD.private doubleContingency percentage (0-1).private booleanWhether trees are dual bore.private doubleExport pipeline diameter in inches.private doubleExport pipeline length in km.private booleanWhether riser is flexible.private doubleTotal flowline cost in USD.private booleanWhether trees are horizontal.private booleanWhether risers are included.private doubleInfield flowline diameter in inches.private booleanWhether infield flowline is flexible.private doubleInfield flowline length in km.private doubleJumper diameter in inches.private doubleJumper length in meters.Line-item cost breakdown.private booleanWhether manifold has test header.private intNumber of manifold slots.private doubleManifold dry weight in tonnes.private intNumber of jumpers (well to manifold).private intNumber of PLETs.private intNumber of production risers.private intNumber of production wells.private doublePipeline design pressure in bar.private StringPipeline installation method.private StringPipeline steel grade.private doublePipeline wall thickness in mm (0 = auto-calculate).private doublePLET hub size in inches.private doublePLET dry weight in tonnes.private SubseaCostEstimator.RegionRegion for cost adjustment.private booleanWhether jumpers are rigid.private doubleTotal riser cost in USD.private doubleRiser inner diameter in inches.private booleanWhether dynamic riser has buoyancy modules.private doubleRiser length in meters.private doublePipeline steel price per kg USD.private doubleTotal subsea infrastructure cost (trees + manifold + PLETs + jumpers) in USD.private doubleGrand total SURF CAPEX in USD.private doubleTree bore size in inches.private doubleTree pressure rating in psi.private intNumber of chemical injection lines.private doubleTotal umbilical cost in USD.private booleanWhether umbilical has dynamic section.private intNumber of electrical cables.private intNumber of hydraulic lines.private doubleUmbilical length in km.private doubleWater depth in meters. -
Constructor Summary
ConstructorsConstructorDescriptionDefault constructor.SURFCostEstimator(int numberOfWells, double waterDepthM, SubseaCostEstimator.Region region) Constructor with basic field parameters. -
Method Summary
Modifier and TypeMethodDescriptionprivate voidaddLineItem(String category, String description, int quantity, String unit, double unitCostUSD, double totalCostUSD, double vesselDays) Add a line item to the cost breakdown.doubleCalculate complete SURF CAPEX breakdown.private voidCalculate flowline and pipeline costs.private doublecalculateRigidPipelineCost(double lengthKm, double diameterInches, String label) Calculate cost for a rigid steel pipeline.private voidCalculate riser costs.private voidCalculate Subsea infrastructure costs (trees, manifold, PLETs, jumpers).private voidCalculate umbilical costs.voidexcludeExportPipeline(double lengthKm) Set whether to exclude the export pipeline from the estimate.getCategoryLineItems(String category) Get cost breakdown for a specific SURF category.Get complete cost breakdown as a map.doubleGet flowline cost in USD.private doublegetInstallationCostPerMeter(String method, double outerDiameterM, double waterDepth) Get installation cost per meter for pipeline.Get all line items.private doubleGet cost adjustment factor for region.doubleGet riser cost in USD.private doublegetSMYSForGrade(String grade) Get SMYS for common pipe steel grades.doubleGet subsea infrastructure cost in USD.doublegetTotalCostInCurrency(double exchangeRate) Convert total SURF cost from USD to another currency.doubleGet total SURF cost in USD.doubleGet umbilical cost in USD.voidsetCoatingPricePerM2(double coatingPricePerM2) Set pipeline coating price.voidsetContingencyPct(double contingencyPct) Set contingency percentage.voidsetDualBoreTrees(boolean dualBoreTrees) Set whether trees are dual bore.voidsetExportPipelineDiameterInches(double exportPipelineDiameterInches) Set export pipeline diameter.voidsetExportPipelineLengthKm(double exportPipelineLengthKm) Set export pipeline length.voidsetFlexibleRiser(boolean flexibleRiser) Set whether riser is flexible.voidsetHorizontalTrees(boolean horizontalTrees) Set whether trees are horizontal.voidsetIncludeRisers(boolean includeRisers) Set whether risers are included in the estimate.voidsetInfieldFlowlineDiameterInches(double infieldFlowlineDiameterInches) Set infield flowline diameter.voidsetInfieldFlowlineFlexible(boolean infieldFlowlineFlexible) Set whether infield flowline is flexible.voidsetInfieldFlowlineLengthKm(double infieldFlowlineLengthKm) Set infield flowline length.voidsetJumperDiameterInches(double jumperDiameterInches) Set jumper diameter.voidsetJumperLengthM(double jumperLengthM) Set jumper length.voidsetManifoldHasTestHeader(boolean manifoldHasTestHeader) Set whether manifold has test header.voidsetManifoldSlots(int manifoldSlots) Set number of manifold slots.voidsetManifoldWeightTonnes(double manifoldWeightTonnes) Set manifold weight.voidsetNumberOfJumpers(int numberOfJumpers) Set number of jumpers.voidsetNumberOfPLETs(int numberOfPLETs) Set number of PLETs.voidsetNumberOfProductionRisers(int numberOfProductionRisers) Set number of production risers.voidsetNumberOfWells(int numberOfWells) Set number of production wells.voidsetPipelineDesignPressureBar(double pipelineDesignPressureBar) Set pipeline design pressure.voidsetPipelineInstallMethod(String pipelineInstallMethod) Set pipeline installation method.voidsetPipelineMaterialGrade(String pipelineMaterialGrade) Set pipeline material grade.voidsetPipelineWallThicknessMm(double pipelineWallThicknessMm) Set pipeline wall thickness.voidsetPletHubSizeInches(double pletHubSizeInches) Set PLET hub size.voidsetPletWeightTonnes(double pletWeightTonnes) Set PLET weight.voidsetRegion(SubseaCostEstimator.Region region) Set region for cost estimation.voidsetRigidJumpers(boolean rigidJumpers) Set whether jumpers are rigid.voidsetRiserDiameterInches(double riserDiameterInches) Set riser inner diameter.voidsetRiserHasBuoyancy(boolean riserHasBuoyancy) Set whether riser has buoyancy modules.voidsetRiserLengthM(double riserLengthM) Set riser length.voidsetSteelPricePerKg(double steelPricePerKg) Set pipeline steel price.voidsetTreeBoreSizeInches(double treeBoreSizeInches) Set tree bore size.voidsetTreePressureRatingPsi(double treePressureRatingPsi) Set Christmas tree pressure rating.voidsetUmbilicalChemicalLines(int umbilicalChemicalLines) Set umbilical chemical lines.voidsetUmbilicalDynamic(boolean umbilicalDynamic) Set whether umbilical has dynamic section.voidsetUmbilicalElectricalCables(int umbilicalElectricalCables) Set umbilical electrical cables.voidsetUmbilicalHydraulicLines(int umbilicalHydraulicLines) Set umbilical hydraulic lines.voidsetUmbilicalLengthKm(double umbilicalLengthKm) Set umbilical length.voidsetWaterDepthM(double waterDepthM) Set water depth.toJson()Get cost as JSON string.
-
Field Details
-
numberOfWells
private int numberOfWellsNumber of production wells. -
waterDepthM
private double waterDepthMWater depth in meters. -
region
Region for cost adjustment. -
treePressureRatingPsi
private double treePressureRatingPsiTree pressure rating in psi. -
treeBoreSizeInches
private double treeBoreSizeInchesTree bore size in inches. -
horizontalTrees
private boolean horizontalTreesWhether trees are horizontal. -
dualBoreTrees
private boolean dualBoreTreesWhether trees are dual bore. -
manifoldSlots
private int manifoldSlotsNumber of manifold slots. -
manifoldWeightTonnes
private double manifoldWeightTonnesManifold dry weight in tonnes. -
manifoldHasTestHeader
private boolean manifoldHasTestHeaderWhether manifold has test header. -
numberOfPLETs
private int numberOfPLETsNumber of PLETs. -
pletWeightTonnes
private double pletWeightTonnesPLET dry weight in tonnes. -
pletHubSizeInches
private double pletHubSizeInchesPLET hub size in inches. -
numberOfJumpers
private int numberOfJumpersNumber of jumpers (well to manifold). -
jumperLengthM
private double jumperLengthMJumper length in meters. -
jumperDiameterInches
private double jumperDiameterInchesJumper diameter in inches. -
rigidJumpers
private boolean rigidJumpersWhether jumpers are rigid. -
umbilicalLengthKm
private double umbilicalLengthKmUmbilical length in km. -
umbilicalHydraulicLines
private int umbilicalHydraulicLinesNumber of hydraulic lines. -
umbilicalChemicalLines
private int umbilicalChemicalLinesNumber of chemical injection lines. -
umbilicalElectricalCables
private int umbilicalElectricalCablesNumber of electrical cables. -
umbilicalDynamic
private boolean umbilicalDynamicWhether umbilical has dynamic section. -
includeRisers
private boolean includeRisersWhether risers are included. -
riserDiameterInches
private double riserDiameterInchesRiser inner diameter in inches. -
numberOfProductionRisers
private int numberOfProductionRisersNumber of production risers. -
riserLengthM
private double riserLengthMRiser length in meters. -
flexibleRiser
private boolean flexibleRiserWhether riser is flexible. -
riserHasBuoyancy
private boolean riserHasBuoyancyWhether dynamic riser has buoyancy modules. -
infieldFlowlineLengthKm
private double infieldFlowlineLengthKmInfield flowline length in km. -
infieldFlowlineDiameterInches
private double infieldFlowlineDiameterInchesInfield flowline diameter in inches. -
infieldFlowlineFlexible
private boolean infieldFlowlineFlexibleWhether infield flowline is flexible. -
exportPipelineLengthKm
private double exportPipelineLengthKmExport pipeline length in km. -
exportPipelineDiameterInches
private double exportPipelineDiameterInchesExport pipeline diameter in inches. -
pipelineInstallMethod
Pipeline installation method. -
pipelineMaterialGrade
Pipeline steel grade. -
pipelineDesignPressureBar
private double pipelineDesignPressureBarPipeline design pressure in bar. -
pipelineWallThicknessMm
private double pipelineWallThicknessMmPipeline wall thickness in mm (0 = auto-calculate). -
steelPricePerKg
private double steelPricePerKgPipeline steel price per kg USD. -
coatingPricePerM2
private double coatingPricePerM2Pipeline coating price per m2 USD. -
contingencyPct
private double contingencyPctContingency percentage (0-1). -
subseaCostUSD
private double subseaCostUSDTotal subsea infrastructure cost (trees + manifold + PLETs + jumpers) in USD. -
umbilicalCostUSD
private double umbilicalCostUSDTotal umbilical cost in USD. -
riserCostUSD
private double riserCostUSDTotal riser cost in USD. -
flowlineCostUSD
private double flowlineCostUSDTotal flowline cost in USD. -
totalSURFCostUSD
private double totalSURFCostUSDGrand total SURF CAPEX in USD. -
lineItems
-
-
Constructor Details
-
SURFCostEstimator
public SURFCostEstimator()Default constructor. -
SURFCostEstimator
Constructor with basic field parameters.- Parameters:
numberOfWells- number of production wellswaterDepthM- water depth in metersregion- cost estimation region
-
-
Method Details
-
calculate
public double calculate()Calculate complete SURF CAPEX breakdown.Estimates costs for all SURF components using industry benchmark rates and scales for water depth, number of wells, and region.
- Returns:
- total SURF cost in USD
-
calculateSubseaInfrastructure
private void calculateSubseaInfrastructure()Calculate Subsea infrastructure costs (trees, manifold, PLETs, jumpers). -
calculateUmbilicals
private void calculateUmbilicals()Calculate umbilical costs. -
calculateRisers
private void calculateRisers()Calculate riser costs. -
calculateFlowlines
private void calculateFlowlines()Calculate flowline and pipeline costs. -
calculateRigidPipelineCost
Calculate cost for a rigid steel pipeline.- Parameters:
lengthKm- pipeline length in kmdiameterInches- outer diameter in incheslabel- description label- Returns:
- total cost in USD
-
getSMYSForGrade
Get SMYS for common pipe steel grades.- Parameters:
grade- material grade (e.g. "X52", "X65", "X70")- Returns:
- SMYS in MPa
-
getInstallationCostPerMeter
Get installation cost per meter for pipeline.- Parameters:
method- installation method (S-lay, J-lay, Reel-lay)outerDiameterM- outer diameter in meterswaterDepth- water depth in meters- Returns:
- cost per meter in USD
-
getRegionFactor
private double getRegionFactor()Get cost adjustment factor for region.- Returns:
- region factor
-
addLineItem
private void addLineItem(String category, String description, int quantity, String unit, double unitCostUSD, double totalCostUSD, double vesselDays) Add a line item to the cost breakdown.- Parameters:
category- SURF category (S, U, R, F)description- item descriptionquantity- quantityunit- unit of measureunitCostUSD- unit cost in USDtotalCostUSD- total cost in USDvesselDays- vessel days required
-
getCostBreakdown
-
getCategoryLineItems
-
getTotalCostInCurrency
public double getTotalCostInCurrency(double exchangeRate) Convert total SURF cost from USD to another currency.- Parameters:
exchangeRate- exchange rate (units of target currency per 1 USD)- Returns:
- total cost in target currency
-
toJson
Get cost as JSON string.- Returns:
- JSON string with complete SURF cost breakdown
-
getTotalSURFCostUSD
public double getTotalSURFCostUSD()Get total SURF cost in USD.- Returns:
- total SURF CAPEX in USD
-
getSubseaCostUSD
public double getSubseaCostUSD()Get subsea infrastructure cost in USD.- Returns:
- subsea cost (trees + manifold + PLETs + jumpers) in USD
-
getUmbilicalCostUSD
public double getUmbilicalCostUSD()Get umbilical cost in USD.- Returns:
- umbilical cost in USD
-
getRiserCostUSD
public double getRiserCostUSD()Get riser cost in USD.- Returns:
- riser cost in USD
-
getFlowlineCostUSD
public double getFlowlineCostUSD()Get flowline cost in USD.- Returns:
- flowline + pipeline cost in USD
-
getLineItems
-
setNumberOfWells
public void setNumberOfWells(int numberOfWells) Set number of production wells.- Parameters:
numberOfWells- number of wells
-
setWaterDepthM
public void setWaterDepthM(double waterDepthM) Set water depth.- Parameters:
waterDepthM- water depth in meters
-
setRegion
Set region for cost estimation.- Parameters:
region- cost region
-
setTreePressureRatingPsi
public void setTreePressureRatingPsi(double treePressureRatingPsi) Set Christmas tree pressure rating.- Parameters:
treePressureRatingPsi- pressure rating in psi
-
setTreeBoreSizeInches
public void setTreeBoreSizeInches(double treeBoreSizeInches) Set tree bore size.- Parameters:
treeBoreSizeInches- bore size in inches
-
setHorizontalTrees
public void setHorizontalTrees(boolean horizontalTrees) Set whether trees are horizontal.- Parameters:
horizontalTrees- true for horizontal trees
-
setDualBoreTrees
public void setDualBoreTrees(boolean dualBoreTrees) Set whether trees are dual bore.- Parameters:
dualBoreTrees- true for dual bore trees
-
setManifoldSlots
public void setManifoldSlots(int manifoldSlots) Set number of manifold slots.- Parameters:
manifoldSlots- number of slots
-
setManifoldWeightTonnes
public void setManifoldWeightTonnes(double manifoldWeightTonnes) Set manifold weight.- Parameters:
manifoldWeightTonnes- dry weight in tonnes
-
setManifoldHasTestHeader
public void setManifoldHasTestHeader(boolean manifoldHasTestHeader) Set whether manifold has test header.- Parameters:
manifoldHasTestHeader- true if has test header
-
setNumberOfPLETs
public void setNumberOfPLETs(int numberOfPLETs) Set number of PLETs.- Parameters:
numberOfPLETs- number of PLETs
-
setPletWeightTonnes
public void setPletWeightTonnes(double pletWeightTonnes) Set PLET weight.- Parameters:
pletWeightTonnes- dry weight in tonnes
-
setPletHubSizeInches
public void setPletHubSizeInches(double pletHubSizeInches) Set PLET hub size.- Parameters:
pletHubSizeInches- hub size in inches
-
setNumberOfJumpers
public void setNumberOfJumpers(int numberOfJumpers) Set number of jumpers.- Parameters:
numberOfJumpers- number of jumpers
-
setJumperLengthM
public void setJumperLengthM(double jumperLengthM) Set jumper length.- Parameters:
jumperLengthM- jumper length in meters
-
setJumperDiameterInches
public void setJumperDiameterInches(double jumperDiameterInches) Set jumper diameter.- Parameters:
jumperDiameterInches- jumper diameter in inches
-
setRigidJumpers
public void setRigidJumpers(boolean rigidJumpers) Set whether jumpers are rigid.- Parameters:
rigidJumpers- true for rigid jumpers
-
setUmbilicalLengthKm
public void setUmbilicalLengthKm(double umbilicalLengthKm) Set umbilical length.- Parameters:
umbilicalLengthKm- length in km
-
setUmbilicalHydraulicLines
public void setUmbilicalHydraulicLines(int umbilicalHydraulicLines) Set umbilical hydraulic lines.- Parameters:
umbilicalHydraulicLines- number of hydraulic lines
-
setUmbilicalChemicalLines
public void setUmbilicalChemicalLines(int umbilicalChemicalLines) Set umbilical chemical lines.- Parameters:
umbilicalChemicalLines- number of chemical injection lines
-
setUmbilicalElectricalCables
public void setUmbilicalElectricalCables(int umbilicalElectricalCables) Set umbilical electrical cables.- Parameters:
umbilicalElectricalCables- number of electrical cables
-
setUmbilicalDynamic
public void setUmbilicalDynamic(boolean umbilicalDynamic) Set whether umbilical has dynamic section.- Parameters:
umbilicalDynamic- true for dynamic umbilical
-
setIncludeRisers
public void setIncludeRisers(boolean includeRisers) Set whether risers are included in the estimate.- Parameters:
includeRisers- true to include risers
-
setRiserDiameterInches
public void setRiserDiameterInches(double riserDiameterInches) Set riser inner diameter.- Parameters:
riserDiameterInches- riser inner diameter in inches
-
setNumberOfProductionRisers
public void setNumberOfProductionRisers(int numberOfProductionRisers) Set number of production risers.- Parameters:
numberOfProductionRisers- number of production risers
-
setRiserLengthM
public void setRiserLengthM(double riserLengthM) Set riser length.- Parameters:
riserLengthM- riser length in meters (0 = auto from water depth)
-
setFlexibleRiser
public void setFlexibleRiser(boolean flexibleRiser) Set whether riser is flexible.- Parameters:
flexibleRiser- true for flexible riser
-
setRiserHasBuoyancy
public void setRiserHasBuoyancy(boolean riserHasBuoyancy) Set whether riser has buoyancy modules.- Parameters:
riserHasBuoyancy- true for buoyancy modules
-
setInfieldFlowlineLengthKm
public void setInfieldFlowlineLengthKm(double infieldFlowlineLengthKm) Set infield flowline length.- Parameters:
infieldFlowlineLengthKm- length in km
-
setInfieldFlowlineDiameterInches
public void setInfieldFlowlineDiameterInches(double infieldFlowlineDiameterInches) Set infield flowline diameter.- Parameters:
infieldFlowlineDiameterInches- OD in inches
-
setInfieldFlowlineFlexible
public void setInfieldFlowlineFlexible(boolean infieldFlowlineFlexible) Set whether infield flowline is flexible.- Parameters:
infieldFlowlineFlexible- true for flexible flowline
-
setExportPipelineLengthKm
public void setExportPipelineLengthKm(double exportPipelineLengthKm) Set export pipeline length.- Parameters:
exportPipelineLengthKm- length in km
-
setExportPipelineDiameterInches
public void setExportPipelineDiameterInches(double exportPipelineDiameterInches) Set export pipeline diameter.- Parameters:
exportPipelineDiameterInches- OD in inches
-
setPipelineInstallMethod
Set pipeline installation method.- Parameters:
pipelineInstallMethod- installation method: "S-lay", "J-lay", "Reel-lay"
-
setPipelineMaterialGrade
Set pipeline material grade.- Parameters:
pipelineMaterialGrade- grade (e.g. "X65")
-
setPipelineDesignPressureBar
public void setPipelineDesignPressureBar(double pipelineDesignPressureBar) Set pipeline design pressure.- Parameters:
pipelineDesignPressureBar- design pressure in bar
-
setPipelineWallThicknessMm
public void setPipelineWallThicknessMm(double pipelineWallThicknessMm) Set pipeline wall thickness.- Parameters:
pipelineWallThicknessMm- wall thickness in mm (0 = auto-calculate)
-
setSteelPricePerKg
public void setSteelPricePerKg(double steelPricePerKg) Set pipeline steel price.- Parameters:
steelPricePerKg- price per kg in USD
-
setCoatingPricePerM2
public void setCoatingPricePerM2(double coatingPricePerM2) Set pipeline coating price.- Parameters:
coatingPricePerM2- price per m2 in USD
-
setContingencyPct
public void setContingencyPct(double contingencyPct) Set contingency percentage.- Parameters:
contingencyPct- contingency percentage (0.0 to 1.0)
-
excludeExportPipeline
public void excludeExportPipeline(double lengthKm) Set whether to exclude the export pipeline from the estimate.- Parameters:
lengthKm- set to 0.0 to exclude export pipeline
-