Class InjectionWellModel

java.lang.Object
neqsim.process.fielddevelopment.reservoir.InjectionWellModel
All Implemented Interfaces:
Serializable

public class InjectionWellModel extends Object implements Serializable
Injection well performance model for water and gas injection.

This class provides comprehensive injection well modeling including:

  • Injectivity Index: Relationship between injection rate and pressure
  • Hall Plot Analysis: Injection performance monitoring
  • Wellbore Hydraulics: Pressure losses in injection tubing
  • Fracture Pressure: Maximum safe injection pressure
  • Skin Factor Effects: Near-wellbore damage or stimulation

Injectivity Index

The injectivity index (II) relates injection rate to bottomhole pressure:

q = II × (P_wf - P_res)

where q is injection rate, P_wf is flowing bottomhole pressure, and P_res is average reservoir pressure. Injectivity depends on:

  • Permeability and thickness (kh)
  • Fluid viscosity at reservoir conditions
  • Near-wellbore skin factor
  • Wellbore radius and drainage radius

Hall Plot

The Hall plot is used to monitor injection well performance:

∫(P_wf - P_res)dt vs. Cumulative Injection

Slope changes indicate:

  • Increasing slope: Formation damage (skin increase)
  • Decreasing slope: Fracturing or channeling
  • Constant slope: Stable injection

Usage Example

InjectionWellModel well = new InjectionWellModel();
well.setWellType(InjectionType.WATER_INJECTOR);
well.setReservoirPressure(250.0, "bara");
well.setFormationPermeability(100.0, "mD");
well.setFormationThickness(30.0, "m");
well.setSkinFactor(2.0);
well.setWellDepth(3000.0, "m");
well.setTubingID(0.1, "m");
well.setMaxBHP(350.0, "bara"); // Below fracture pressure

InjectionWellResult result = well.calculate(10000.0); // Target 10000 Sm3/day

System.out.println("Achievable rate: " + result.getAchievableRate() + " Sm3/day");
System.out.println("Required WHI pressure: " + result.getWellheadPressure() + " bara");
System.out.println("BHP: " + result.getBottomholePressure() + " bara");
System.out.println("Pump power: " + result.getPumpPower() + " kW");
Version:
1.0
Author:
ESOL
See Also:
  • Field Details

    • serialVersionUID

      private static final long serialVersionUID
      See Also:
    • GRAVITY

      private static final double GRAVITY
      See Also:
    • injectionType

      private InjectionWellModel.InjectionType injectionType
    • reservoirPressure

      private double reservoirPressure
    • reservoirTemperature

      private double reservoirTemperature
    • formationPermeability

      private double formationPermeability
    • formationThickness

      private double formationThickness
    • drainageRadius

      private double drainageRadius
    • wellboreRadius

      private double wellboreRadius
    • skinFactor

      private double skinFactor
    • wellDepth

      private double wellDepth
    • tubingID

      private double tubingID
    • tubingRoughness

      private double tubingRoughness
    • fracturePressure

      private double fracturePressure
    • maxBHP

      private double maxBHP
    • minWHP

      private double minWHP
    • surfaceInjectionPressure

      private double surfaceInjectionPressure
    • waterDensity

      private double waterDensity
    • waterViscosity

      private double waterViscosity
    • gasMolecularWeight

      private double gasMolecularWeight
    • gasViscosity

      private double gasViscosity
    • formationWaterViscosity

      private double formationWaterViscosity
    • pumpEfficiency

      private double pumpEfficiency
  • Constructor Details

    • InjectionWellModel

      public InjectionWellModel()
      Creates a new injection well model with default parameters.
    • InjectionWellModel

      public InjectionWellModel(InjectionWellModel.InjectionType injectionType)
      Creates a new injection well model.
      Parameters:
      injectionType - type of injection well
  • Method Details

    • calculate

      public InjectionWellModel.InjectionWellResult calculate(double targetRateSm3d)
      Calculates injection well performance for target rate.
      Parameters:
      targetRateSm3d - target injection rate (Sm3/day)
      Returns:
      injection well result
    • calculateMaximumRate

      public InjectionWellModel.InjectionWellResult calculateMaximumRate()
      Calculates maximum injection rate at given constraints.
      Returns:
      maximum injection result
    • calculateInjectivityIndex

      private double calculateInjectivityIndex()
      Calculates injectivity index using Darcy's law.

      For radial flow: II = 2π × k × h / (μ × B × (ln(re/rw) + S))

      Returns:
      injectivity index (Sm3/day/bar)
    • calculateWellheadPressure

      private double calculateWellheadPressure(double rateSm3d, double bhp)
      Calculates wellhead injection pressure from BHP.
      Parameters:
      rateSm3d - injection rate (Sm3/day)
      bhp - bottomhole pressure (bara)
      Returns:
      wellhead pressure (bara)
    • calculateFrictionPressureDrop

      private double calculateFrictionPressureDrop(double rateSm3d, double density)
      Calculates friction pressure drop in tubing.
      Parameters:
      rateSm3d - rate (Sm3/day)
      density - fluid density (kg/m³)
      Returns:
      friction pressure drop (bar)
    • calculateFrictionFactor

      private double calculateFrictionFactor(double reynolds)
      Calculates Darcy friction factor.
      Parameters:
      reynolds - Reynolds number
      Returns:
      friction factor
    • calculatePumpPower

      private double calculatePumpPower(double rateSm3d, double deltaPbar)
      Calculates pump power requirement.
      Parameters:
      rateSm3d - injection rate (Sm3/day)
      deltaPbar - pressure boost (bar)
      Returns:
      pump power (kW)
    • calculateHallPlotParameters

      private void calculateHallPlotParameters(InjectionWellModel.InjectionWellResult result)
      Calculates Hall plot parameters for performance monitoring.
      Parameters:
      result - injection result to populate
    • calculateWithInterference

      public InjectionWellModel.InjectionWellResult calculateWithInterference(double targetRate, double[] producerDistances, double[] producerRates)
      Calculates injection with pressure interference from nearby producers.
      Parameters:
      targetRate - target rate (Sm3/day)
      producerDistances - distances to nearby producers (m)
      producerRates - production rates of nearby wells (Sm3/day)
      Returns:
      adjusted injection result
    • setWellType

      Sets injection well type.
      Parameters:
      type - injection type
      Returns:
      this for chaining
    • setReservoirPressure

      public InjectionWellModel setReservoirPressure(double pressure, String unit)
      Sets reservoir pressure.
      Parameters:
      pressure - pressure value
      unit - unit ("bara", "psia")
      Returns:
      this for chaining
    • setReservoirTemperature

      public InjectionWellModel setReservoirTemperature(double temperature, String unit)
      Sets reservoir temperature.
      Parameters:
      temperature - temperature value
      unit - unit ("K", "C", "F")
      Returns:
      this for chaining
    • setFormationPermeability

      public InjectionWellModel setFormationPermeability(double permeability, String unit)
      Sets formation permeability.
      Parameters:
      permeability - permeability value
      unit - unit ("mD", "D")
      Returns:
      this for chaining
    • setFormationThickness

      public InjectionWellModel setFormationThickness(double thickness, String unit)
      Sets formation thickness.
      Parameters:
      thickness - thickness value
      unit - unit ("m", "ft")
      Returns:
      this for chaining
    • setSkinFactor

      public InjectionWellModel setSkinFactor(double skin)
      Sets skin factor.
      Parameters:
      skin - skin factor (dimensionless)
      Returns:
      this for chaining
    • setWellDepth

      public InjectionWellModel setWellDepth(double depth, String unit)
      Sets well depth.
      Parameters:
      depth - depth value
      unit - unit ("m", "ft")
      Returns:
      this for chaining
    • setTubingID

      public InjectionWellModel setTubingID(double diameter, String unit)
      Sets tubing ID.
      Parameters:
      diameter - diameter value
      unit - unit ("m", "in", "mm")
      Returns:
      this for chaining
    • setMaxBHP

      public InjectionWellModel setMaxBHP(double pressure, String unit)
      Sets maximum BHP (operating limit below fracture pressure).
      Parameters:
      pressure - pressure value
      unit - unit ("bara", "psia")
      Returns:
      this for chaining
    • setFracturePressure

      public InjectionWellModel setFracturePressure(double pressure, String unit)
      Sets fracture pressure.
      Parameters:
      pressure - pressure value
      unit - unit ("bara", "psia")
      Returns:
      this for chaining
    • setSurfaceInjectionPressure

      public InjectionWellModel setSurfaceInjectionPressure(double pressure, String unit)
      Sets surface injection pressure available.
      Parameters:
      pressure - pressure value
      unit - unit ("bara", "psia")
      Returns:
      this for chaining
    • setWaterViscosity

      public InjectionWellModel setWaterViscosity(double viscosity)
      Sets water viscosity at reservoir conditions.
      Parameters:
      viscosity - viscosity (cP)
      Returns:
      this for chaining
    • setDrainageRadius

      public InjectionWellModel setDrainageRadius(double radius)
      Sets drainage radius.
      Parameters:
      radius - radius (m)
      Returns:
      this for chaining
    • setWellboreRadius

      public InjectionWellModel setWellboreRadius(double radius)
      Sets wellbore radius.
      Parameters:
      radius - radius (m)
      Returns:
      this for chaining
    • setPumpEfficiency

      public InjectionWellModel setPumpEfficiency(double efficiency)
      Sets pump efficiency.
      Parameters:
      efficiency - efficiency (0-1)
      Returns:
      this for chaining