Class SubseaWell

All Implemented Interfaces:
Serializable, Runnable, ProcessEquipmentInterface, TwoPortInterface, ProcessElementInterface, SimulationInterface, NamedInterface

public class SubseaWell extends TwoPortEquipment
Subsea well equipment class.

Represents a subsea well including wellbore, casing, tubing and completion. The well uses an internal AdiabaticTwoPhasePipe to model tubing flow performance (VLP), and provides well design properties for mechanical design and cost estimation.

Well Types

  • OIL_PRODUCER - Oil production well
  • GAS_PRODUCER - Gas production well
  • WATER_INJECTOR - Water injection well
  • GAS_INJECTOR - Gas injection well
  • OBSERVATION - Observation/monitoring well

Completion Types

  • CASED_PERFORATED - Standard cased and perforated completion
  • OPEN_HOLE - Open hole completion with screens or gravel pack
  • GRAVEL_PACK - Gravel pack completion for sand control
  • ICD - Inflow control device completion
  • AICD - Autonomous inflow control device (water/gas shut-off)
  • MULTI_ZONE - Multi-zone intelligent completion

Design Standards

  • NORSOK D-010 - Well Integrity in Drilling and Well Operations
  • API 5CT - Casing and Tubing
  • ISO 11960 - Steel Pipes for Use as Casing or Tubing
  • API RP 90 - Annular Casing Pressure Management

Usage Example

SubseaWell well = new SubseaWell("Producer-1", reservoirStream);
well.setWellType(SubseaWell.WellType.OIL_PRODUCER);
well.setMeasuredDepth(3800.0);
well.setTrueVerticalDepth(3200.0);
well.setWaterDepth(350.0);
well.setCompletionType(SubseaWell.CompletionType.CASED_PERFORATED);
well.setTubingDiameter(0.1397); // 5.5 inch
well.getPipeline().setDiameter(0.1397);
well.getPipeline().setLength(3800.0);
well.run();

// Mechanical design and cost
well.initMechanicalDesign();
WellMechanicalDesign design = (WellMechanicalDesign) well.getMechanicalDesign();
design.calcDesign();
design.calculateCostEstimate();
String report = design.toJson();
Version:
2.0
Author:
asmund
See Also:
  • Field Details

    • serialVersionUID

      private static final long serialVersionUID
      Serialization version UID.
      See Also:
    • height

      public double height
      Height (elevation change) in meters.
    • length

      public double length
      Well length (measured depth of tubing) in meters.
    • measuredDepth

      private double measuredDepth
      Measured depth (MD) of the well in meters.
    • trueVerticalDepth

      private double trueVerticalDepth
      True vertical depth (TVD) in meters.
    • waterDepth

      private double waterDepth
      Water depth at wellhead in meters.
    • kickOffPoint

      private double kickOffPoint
      Kick-off point depth in meters MD.
    • maxInclination

      private double maxInclination
      Maximum inclination angle in degrees.
    • wellType

      private SubseaWell.WellType wellType
      Well type.
    • completionType

      private SubseaWell.CompletionType completionType
      Completion type.
    • rigType

      private SubseaWell.RigType rigType
      Rig type.
    • conductorOD

      private double conductorOD
      Conductor casing OD in inches.
    • conductorDepth

      private double conductorDepth
      Conductor casing depth in meters MD.
    • surfaceCasingOD

      private double surfaceCasingOD
      Surface casing OD in inches.
    • surfaceCasingDepth

      private double surfaceCasingDepth
      Surface casing depth in meters MD.
    • intermediateCasingOD

      private double intermediateCasingOD
      Intermediate casing OD in inches.
    • intermediateCasingDepth

      private double intermediateCasingDepth
      Intermediate casing depth in meters MD.
    • productionCasingOD

      private double productionCasingOD
      Production casing OD in inches.
    • productionCasingDepth

      private double productionCasingDepth
      Production casing depth in meters MD.
    • productionLinerOD

      private double productionLinerOD
      Production liner OD in inches (0 = no liner).
    • productionLinerDepth

      private double productionLinerDepth
      Production liner depth in meters MD (0 = no liner).
    • tubingOD

      private double tubingOD
      Tubing OD in inches.
    • tubingWeight

      private double tubingWeight
      Tubing weight in lb/ft.
    • tubingGrade

      private String tubingGrade
      Tubing grade per API 5CT.
    • drillingDays

      private double drillingDays
      Estimated drilling duration in days.
    • completionDays

      private double completionDays
      Estimated completion duration in days.
    • rigDayRate

      private double rigDayRate
      Rig day rate in USD.
    • hasDHSV

      private boolean hasDHSV
      Whether well has DHSV (downhole safety valve / SSSV).
    • primaryBarrierElements

      private int primaryBarrierElements
      Number of well barrier elements in primary barrier.
    • secondaryBarrierElements

      private int secondaryBarrierElements
      Number of well barrier elements in secondary barrier.
    • maxWellheadPressure

      private double maxWellheadPressure
      Maximum expected wellhead pressure in bara.
    • maxBottomholeTemperature

      private double maxBottomholeTemperature
      Maximum expected bottomhole temperature in Celsius.
    • reservoirPressure

      private double reservoirPressure
      Reservoir pressure in bara.
    • reservoirTemperature

      private double reservoirTemperature
      Reservoir temperature in Celsius.
    • pipeline

      Internal pipeline for tubing flow model.
    • mechanicalDesign

      private WellMechanicalDesign mechanicalDesign
      Mechanical design instance.
  • Constructor Details

  • Method Details

    • getPipeline

      public AdiabaticTwoPhasePipe getPipeline()
      Getter for the field pipeline.
      Returns:
      a AdiabaticTwoPhasePipe object
    • initMechanicalDesign

      public void initMechanicalDesign()
      Initialize mechanical design for this well.
      Specified by:
      initMechanicalDesign in interface ProcessEquipmentInterface
      Overrides:
      initMechanicalDesign in class ProcessEquipmentBaseClass
    • getMechanicalDesign

      public MechanicalDesign getMechanicalDesign()
      Get mechanical design.
      Specified by:
      getMechanicalDesign in interface ProcessEquipmentInterface
      Overrides:
      getMechanicalDesign in class ProcessEquipmentBaseClass
      Returns:
      the mechanical design instance, or null if not initialized
    • run

      public void run(UUID id)

      In this method all thermodynamic and unit operations will be calculated in a steady state calculation.

      Parameters:
      id - UUID
    • getWellType

      public SubseaWell.WellType getWellType()
      Get well type.
      Returns:
      well type
    • setWellType

      public void setWellType(SubseaWell.WellType wellType)
      Set well type.
      Parameters:
      wellType - well type
    • getCompletionType

      public SubseaWell.CompletionType getCompletionType()
      Get completion type.
      Returns:
      completion type
    • setCompletionType

      public void setCompletionType(SubseaWell.CompletionType completionType)
      Set completion type.
      Parameters:
      completionType - completion type
    • getRigType

      public SubseaWell.RigType getRigType()
      Get rig type.
      Returns:
      rig type
    • setRigType

      public void setRigType(SubseaWell.RigType rigType)
      Set rig type.
      Parameters:
      rigType - rig type
    • getMeasuredDepth

      public double getMeasuredDepth()
      Get measured depth in meters.
      Returns:
      measured depth
    • setMeasuredDepth

      public void setMeasuredDepth(double measuredDepth)
      Set measured depth in meters.
      Parameters:
      measuredDepth - measured depth
    • getTrueVerticalDepth

      public double getTrueVerticalDepth()
      Get true vertical depth in meters.
      Returns:
      true vertical depth
    • setTrueVerticalDepth

      public void setTrueVerticalDepth(double trueVerticalDepth)
      Set true vertical depth in meters.
      Parameters:
      trueVerticalDepth - true vertical depth
    • getWaterDepth

      public double getWaterDepth()
      Get water depth in meters.
      Returns:
      water depth
    • setWaterDepth

      public void setWaterDepth(double waterDepth)
      Set water depth in meters.
      Parameters:
      waterDepth - water depth
    • getKickOffPoint

      public double getKickOffPoint()
      Get kick-off point in meters MD.
      Returns:
      kick-off point depth
    • setKickOffPoint

      public void setKickOffPoint(double kickOffPoint)
      Set kick-off point in meters MD.
      Parameters:
      kickOffPoint - kick-off point depth
    • getMaxInclination

      public double getMaxInclination()
      Get maximum inclination angle in degrees.
      Returns:
      max inclination
    • setMaxInclination

      public void setMaxInclination(double maxInclination)
      Set maximum inclination angle in degrees.
      Parameters:
      maxInclination - max inclination
    • getConductorOD

      public double getConductorOD()
      Get conductor casing OD in inches.
      Returns:
      conductor OD
    • setConductorOD

      public void setConductorOD(double conductorOD)
      Set conductor casing OD in inches.
      Parameters:
      conductorOD - conductor OD
    • getConductorDepth

      public double getConductorDepth()
      Get conductor casing depth in meters MD.
      Returns:
      conductor depth
    • setConductorDepth

      public void setConductorDepth(double conductorDepth)
      Set conductor casing depth in meters MD.
      Parameters:
      conductorDepth - conductor depth
    • getSurfaceCasingOD

      public double getSurfaceCasingOD()
      Get surface casing OD in inches.
      Returns:
      surface casing OD
    • setSurfaceCasingOD

      public void setSurfaceCasingOD(double surfaceCasingOD)
      Set surface casing OD in inches.
      Parameters:
      surfaceCasingOD - surface casing OD
    • getSurfaceCasingDepth

      public double getSurfaceCasingDepth()
      Get surface casing depth in meters MD.
      Returns:
      surface casing depth
    • setSurfaceCasingDepth

      public void setSurfaceCasingDepth(double surfaceCasingDepth)
      Set surface casing depth in meters MD.
      Parameters:
      surfaceCasingDepth - surface casing depth
    • getIntermediateCasingOD

      public double getIntermediateCasingOD()
      Get intermediate casing OD in inches.
      Returns:
      intermediate casing OD
    • setIntermediateCasingOD

      public void setIntermediateCasingOD(double intermediateCasingOD)
      Set intermediate casing OD in inches.
      Parameters:
      intermediateCasingOD - intermediate casing OD
    • getIntermediateCasingDepth

      public double getIntermediateCasingDepth()
      Get intermediate casing depth in meters MD.
      Returns:
      intermediate casing depth
    • setIntermediateCasingDepth

      public void setIntermediateCasingDepth(double intermediateCasingDepth)
      Set intermediate casing depth in meters MD.
      Parameters:
      intermediateCasingDepth - intermediate casing depth
    • getProductionCasingOD

      public double getProductionCasingOD()
      Get production casing OD in inches.
      Returns:
      production casing OD
    • setProductionCasingOD

      public void setProductionCasingOD(double productionCasingOD)
      Set production casing OD in inches.
      Parameters:
      productionCasingOD - production casing OD
    • getProductionCasingDepth

      public double getProductionCasingDepth()
      Get production casing depth in meters MD.
      Returns:
      production casing depth
    • setProductionCasingDepth

      public void setProductionCasingDepth(double productionCasingDepth)
      Set production casing depth in meters MD.
      Parameters:
      productionCasingDepth - production casing depth
    • getProductionLinerOD

      public double getProductionLinerOD()
      Get production liner OD in inches (0 = no liner).
      Returns:
      production liner OD
    • setProductionLinerOD

      public void setProductionLinerOD(double productionLinerOD)
      Set production liner OD in inches (0 = no liner).
      Parameters:
      productionLinerOD - production liner OD
    • getProductionLinerDepth

      public double getProductionLinerDepth()
      Get production liner depth in meters MD.
      Returns:
      production liner depth
    • setProductionLinerDepth

      public void setProductionLinerDepth(double productionLinerDepth)
      Set production liner depth in meters MD.
      Parameters:
      productionLinerDepth - production liner depth
    • getTubingOD

      public double getTubingOD()
      Get tubing OD in inches.
      Returns:
      tubing OD
    • setTubingOD

      public void setTubingOD(double tubingOD)
      Set tubing OD in inches.
      Parameters:
      tubingOD - tubing OD
    • setTubingDiameter

      public void setTubingDiameter(double diameterM)
      Set tubing diameter in meters (convenience method for pipeline configuration).
      Parameters:
      diameterM - tubing diameter in meters
    • getTubingWeight

      public double getTubingWeight()
      Get tubing weight in lb/ft.
      Returns:
      tubing weight
    • setTubingWeight

      public void setTubingWeight(double tubingWeight)
      Set tubing weight in lb/ft.
      Parameters:
      tubingWeight - tubing weight
    • getTubingGrade

      public String getTubingGrade()
      Get tubing grade per API 5CT.
      Returns:
      tubing grade
    • setTubingGrade

      public void setTubingGrade(String tubingGrade)
      Set tubing grade per API 5CT.
      Parameters:
      tubingGrade - tubing grade (e.g., "L80", "P110", "13Cr")
    • getDrillingDays

      public double getDrillingDays()
      Get estimated drilling duration in days.
      Returns:
      drilling days
    • setDrillingDays

      public void setDrillingDays(double drillingDays)
      Set estimated drilling duration in days.
      Parameters:
      drillingDays - drilling days
    • getCompletionDays

      public double getCompletionDays()
      Get estimated completion duration in days.
      Returns:
      completion days
    • setCompletionDays

      public void setCompletionDays(double completionDays)
      Set estimated completion duration in days.
      Parameters:
      completionDays - completion days
    • getRigDayRate

      public double getRigDayRate()
      Get rig day rate in USD.
      Returns:
      rig day rate
    • setRigDayRate

      public void setRigDayRate(double rigDayRate)
      Set rig day rate in USD.
      Parameters:
      rigDayRate - rig day rate
    • hasDHSV

      public boolean hasDHSV()
      Check if well has downhole safety valve.
      Returns:
      true if DHSV installed
    • setHasDHSV

      public void setHasDHSV(boolean hasDHSV)
      Set whether well has DHSV.
      Parameters:
      hasDHSV - true if DHSV installed
    • getPrimaryBarrierElements

      public int getPrimaryBarrierElements()
      Get number of primary barrier elements.
      Returns:
      primary barrier element count
    • setPrimaryBarrierElements

      public void setPrimaryBarrierElements(int count)
      Set number of primary barrier elements.
      Parameters:
      count - primary barrier element count
    • getSecondaryBarrierElements

      public int getSecondaryBarrierElements()
      Get number of secondary barrier elements.
      Returns:
      secondary barrier element count
    • setSecondaryBarrierElements

      public void setSecondaryBarrierElements(int count)
      Set number of secondary barrier elements.
      Parameters:
      count - secondary barrier element count
    • getMaxWellheadPressure

      public double getMaxWellheadPressure()
      Get maximum wellhead pressure in bara.
      Returns:
      max wellhead pressure
    • setMaxWellheadPressure

      public void setMaxWellheadPressure(double maxWellheadPressure)
      Set maximum wellhead pressure in bara.
      Parameters:
      maxWellheadPressure - max wellhead pressure
    • getMaxBottomholeTemperature

      public double getMaxBottomholeTemperature()
      Get maximum bottomhole temperature in Celsius.
      Returns:
      max bottomhole temperature
    • setMaxBottomholeTemperature

      public void setMaxBottomholeTemperature(double maxBottomholeTemperature)
      Set maximum bottomhole temperature in Celsius.
      Parameters:
      maxBottomholeTemperature - max bottomhole temperature
    • getReservoirPressure

      public double getReservoirPressure()
      Get reservoir pressure in bara.
      Returns:
      reservoir pressure
    • setReservoirPressure

      public void setReservoirPressure(double reservoirPressure)
      Set reservoir pressure in bara.
      Parameters:
      reservoirPressure - reservoir pressure
    • getReservoirTemperature

      public double getReservoirTemperature()
      Get reservoir temperature in Celsius.
      Returns:
      reservoir temperature
    • setReservoirTemperature

      public void setReservoirTemperature(double reservoirTemperature)
      Set reservoir temperature in Celsius.
      Parameters:
      reservoirTemperature - reservoir temperature
    • isProducer

      public boolean isProducer()
      Check if this is a production well.
      Returns:
      true if producer
    • isInjector

      public boolean isInjector()
      Check if this is an injection well.
      Returns:
      true if injector
    • getNumberOfCasingStrings

      public int getNumberOfCasingStrings()
      Get total number of casing strings (not counting liner).
      Returns:
      number of casing strings
    • main

      public static void main(String[] args)
      main.
      Parameters:
      args - an array of String objects