Class SURFCostEstimator

java.lang.Object
neqsim.process.mechanicaldesign.subsea.SURFCostEstimator

public class SURFCostEstimator extends Object
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 Details

    • numberOfWells

      private int numberOfWells
      Number of production wells.
    • waterDepthM

      private double waterDepthM
      Water depth in meters.
    • region

      Region for cost adjustment.
    • treePressureRatingPsi

      private double treePressureRatingPsi
      Tree pressure rating in psi.
    • treeBoreSizeInches

      private double treeBoreSizeInches
      Tree bore size in inches.
    • horizontalTrees

      private boolean horizontalTrees
      Whether trees are horizontal.
    • dualBoreTrees

      private boolean dualBoreTrees
      Whether trees are dual bore.
    • manifoldSlots

      private int manifoldSlots
      Number of manifold slots.
    • manifoldWeightTonnes

      private double manifoldWeightTonnes
      Manifold dry weight in tonnes.
    • manifoldHasTestHeader

      private boolean manifoldHasTestHeader
      Whether manifold has test header.
    • numberOfPLETs

      private int numberOfPLETs
      Number of PLETs.
    • pletWeightTonnes

      private double pletWeightTonnes
      PLET dry weight in tonnes.
    • pletHubSizeInches

      private double pletHubSizeInches
      PLET hub size in inches.
    • numberOfJumpers

      private int numberOfJumpers
      Number of jumpers (well to manifold).
    • jumperLengthM

      private double jumperLengthM
      Jumper length in meters.
    • jumperDiameterInches

      private double jumperDiameterInches
      Jumper diameter in inches.
    • rigidJumpers

      private boolean rigidJumpers
      Whether jumpers are rigid.
    • umbilicalLengthKm

      private double umbilicalLengthKm
      Umbilical length in km.
    • umbilicalHydraulicLines

      private int umbilicalHydraulicLines
      Number of hydraulic lines.
    • umbilicalChemicalLines

      private int umbilicalChemicalLines
      Number of chemical injection lines.
    • umbilicalElectricalCables

      private int umbilicalElectricalCables
      Number of electrical cables.
    • umbilicalDynamic

      private boolean umbilicalDynamic
      Whether umbilical has dynamic section.
    • includeRisers

      private boolean includeRisers
      Whether risers are included.
    • riserDiameterInches

      private double riserDiameterInches
      Riser inner diameter in inches.
    • numberOfProductionRisers

      private int numberOfProductionRisers
      Number of production risers.
    • riserLengthM

      private double riserLengthM
      Riser length in meters.
    • flexibleRiser

      private boolean flexibleRiser
      Whether riser is flexible.
    • riserHasBuoyancy

      private boolean riserHasBuoyancy
      Whether dynamic riser has buoyancy modules.
    • infieldFlowlineLengthKm

      private double infieldFlowlineLengthKm
      Infield flowline length in km.
    • infieldFlowlineDiameterInches

      private double infieldFlowlineDiameterInches
      Infield flowline diameter in inches.
    • infieldFlowlineFlexible

      private boolean infieldFlowlineFlexible
      Whether infield flowline is flexible.
    • exportPipelineLengthKm

      private double exportPipelineLengthKm
      Export pipeline length in km.
    • exportPipelineDiameterInches

      private double exportPipelineDiameterInches
      Export pipeline diameter in inches.
    • pipelineInstallMethod

      private String pipelineInstallMethod
      Pipeline installation method.
    • pipelineMaterialGrade

      private String pipelineMaterialGrade
      Pipeline steel grade.
    • pipelineDesignPressureBar

      private double pipelineDesignPressureBar
      Pipeline design pressure in bar.
    • pipelineWallThicknessMm

      private double pipelineWallThicknessMm
      Pipeline wall thickness in mm (0 = auto-calculate).
    • steelPricePerKg

      private double steelPricePerKg
      Pipeline steel price per kg USD.
    • coatingPricePerM2

      private double coatingPricePerM2
      Pipeline coating price per m2 USD.
    • contingencyPct

      private double contingencyPct
      Contingency percentage (0-1).
    • subseaCostUSD

      private double subseaCostUSD
      Total subsea infrastructure cost (trees + manifold + PLETs + jumpers) in USD.
    • umbilicalCostUSD

      private double umbilicalCostUSD
      Total umbilical cost in USD.
    • riserCostUSD

      private double riserCostUSD
      Total riser cost in USD.
    • flowlineCostUSD

      private double flowlineCostUSD
      Total flowline cost in USD.
    • totalSURFCostUSD

      private double totalSURFCostUSD
      Grand total SURF CAPEX in USD.
    • lineItems

      private List<Map<String,Object>> lineItems
      Line-item cost breakdown.
  • Constructor Details

    • SURFCostEstimator

      public SURFCostEstimator()
      Default constructor.
    • SURFCostEstimator

      public SURFCostEstimator(int numberOfWells, double waterDepthM, SubseaCostEstimator.Region region)
      Constructor with basic field parameters.
      Parameters:
      numberOfWells - number of production wells
      waterDepthM - water depth in meters
      region - 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

      private double calculateRigidPipelineCost(double lengthKm, double diameterInches, String label)
      Calculate cost for a rigid steel pipeline.
      Parameters:
      lengthKm - pipeline length in km
      diameterInches - outer diameter in inches
      label - description label
      Returns:
      total cost in USD
    • getSMYSForGrade

      private double getSMYSForGrade(String grade)
      Get SMYS for common pipe steel grades.
      Parameters:
      grade - material grade (e.g. "X52", "X65", "X70")
      Returns:
      SMYS in MPa
    • getInstallationCostPerMeter

      private double getInstallationCostPerMeter(String method, double outerDiameterM, double waterDepth)
      Get installation cost per meter for pipeline.
      Parameters:
      method - installation method (S-lay, J-lay, Reel-lay)
      outerDiameterM - outer diameter in meters
      waterDepth - 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 description
      quantity - quantity
      unit - unit of measure
      unitCostUSD - unit cost in USD
      totalCostUSD - total cost in USD
      vesselDays - vessel days required
    • getCostBreakdown

      public Map<String,Object> getCostBreakdown()
      Get complete cost breakdown as a map.
      Returns:
      map with SURF cost breakdown
    • getCategoryLineItems

      public List<Map<String,Object>> getCategoryLineItems(String category)
      Get cost breakdown for a specific SURF category.
      Parameters:
      category - category code: "S", "U", "R", or "F"
      Returns:
      list of line items for that category
    • 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

      public String 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

      public List<Map<String,Object>> getLineItems()
      Get all line items.
      Returns:
      list of cost line items
    • 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

      public void setRegion(SubseaCostEstimator.Region region)
      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

      public void setPipelineInstallMethod(String pipelineInstallMethod)
      Set pipeline installation method.
      Parameters:
      pipelineInstallMethod - installation method: "S-lay", "J-lay", "Reel-lay"
    • setPipelineMaterialGrade

      public void setPipelineMaterialGrade(String pipelineMaterialGrade)
      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