Class InjectionConformanceMonitor

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

public class InjectionConformanceMonitor extends ProcessEquipmentBaseClass
Injection conformance monitor for diagnosing out-of-zone injection.

This class provides time-series analysis tools for injection well surveillance data. It uses Hall plot analysis, slope change detection, and injection profile interpretation to identify conformance issues such as:

  • Fracture initiation or extension (Hall slope decrease)
  • Near-wellbore plugging or scaling (Hall slope increase)
  • Out-of-zone injection (injection profile mismatch vs target)
  • Channel development through cement (progressive conformance loss)

Hall Plot Analysis

The Hall plot is cumulative wellhead pressure times time (sum of WHP * dt) vs cumulative injection volume. A constant Hall slope indicates stable injectivity. A decreasing slope indicates fracture growth or improved injectivity. An increasing slope indicates plugging or skin increase.

Usage Example

InjectionConformanceMonitor monitor = new InjectionConformanceMonitor("Injector-1 Monitor");

// Record daily injection data
monitor.recordInjectionData(0.0, 250.0, 5000.0); // day 0: 250 bar WHP, 5000 bbl/d
monitor.recordInjectionData(1.0, 252.0, 5000.0); // day 1
monitor.recordInjectionData(2.0, 248.0, 5200.0); // day 2
// ... more data points ...

// Calculate Hall plot
monitor.calculateHallPlot();
double slope = monitor.getCurrentHallSlope();

// Detect slope changes
boolean slopeChanged = monitor.detectSlopeChange(0.2); // 20% threshold
String diagnosis = monitor.getDiagnosis();

System.out.println("Hall slope: " + slope + " bar/m3");
System.out.println("Diagnosis: " + diagnosis);
Version:
1.0
Author:
ESOL
See Also:
  • Field Details

  • Constructor Details

    • InjectionConformanceMonitor

      public InjectionConformanceMonitor(String name)
      Create an injection conformance monitor.
      Parameters:
      name - monitor name
  • Method Details

    • recordInjectionData

      public void recordInjectionData(double timeDays, double wellheadPressureBar, double injectionRateM3perDay)
      Record an injection data point.
      Parameters:
      timeDays - time since start of monitoring (days)
      wellheadPressureBar - wellhead pressure (bar)
      injectionRateM3perDay - injection rate (m3/day)
    • addZoneProfile

      public void addZoneProfile(String zoneName, double depthM, double allocationFraction, boolean isTargetZone)
      Add a zone to the injection profile.
      Parameters:
      zoneName - zone identifier
      depthM - zone depth (m)
      allocationFraction - fraction of total injection going to this zone (0.0-1.0)
      isTargetZone - whether this is the intended injection zone
    • calculateHallPlot

      public void calculateHallPlot()
      Calculate the Hall plot from recorded injection data.

      Hall integral is the cumulative sum of (WHP * dt) plotted against cumulative injection volume. The slope of this plot indicates injectivity behavior.

    • getCurrentHallSlope

      public double getCurrentHallSlope()
      Get the current Hall slope from the most recent data.
      Returns:
      current Hall slope (bar day/m3)
    • getInitialHallSlope

      public double getInitialHallSlope()
      Get the initial Hall slope from the early data.
      Returns:
      initial Hall slope (bar day/m3)
    • detectSlopeChange

      public boolean detectSlopeChange(double thresholdFraction)
      Detect a significant change in the Hall slope.
      Parameters:
      thresholdFraction - fractional change threshold (e.g., 0.2 for 20%)
      Returns:
      true if slope change exceeds threshold
    • getDiagnosis

      public String getDiagnosis()
      Get the current conformance diagnosis.
      Returns:
      diagnosis string
    • getConformanceDiagnosis

      public InjectionConformanceMonitor.ConformanceDiagnosis getConformanceDiagnosis()
      Get the conformance diagnosis enum.
      Returns:
      diagnosis enum value
    • getInjectionEfficiency

      public double getInjectionEfficiency()
      Get the injection efficiency from the zone profile.

      Injection efficiency = fraction of total injection going to target zone(s).

      Returns:
      injection efficiency (0.0 to 1.0), or -1 if no profile available
    • getOutOfZoneFraction

      public double getOutOfZoneFraction()
      Get the out-of-zone injection fraction from the profile.
      Returns:
      out-of-zone fraction (0.0 to 1.0), or -1 if no profile available
    • getHallCumulativePressureTime

      public List<Double> getHallCumulativePressureTime()
      Get the list of Hall plot cumulative pressure times.
      Returns:
      list of cumulative (WHP * dt) values
    • getHallCumulativeVolume

      public List<Double> getHallCumulativeVolume()
      Get the list of Hall plot cumulative injection volumes.
      Returns:
      list of cumulative injection volumes (m3)
    • getDataPointCount

      public int getDataPointCount()
      Get the number of recorded data points.
      Returns:
      data point count
    • getDataPoints

      Get recorded data points.
      Returns:
      list of injection data points
    • getInjectionProfile

      public List<InjectionConformanceMonitor.ZoneProfilePoint> getInjectionProfile()
      Get the injection zone profile.
      Returns:
      list of zone profile points
    • reset

      public void reset()
      Clear all recorded data and reset the monitor.
    • calculateCurrentSlope

      private void calculateCurrentSlope()
      Calculate the Hall slope from the last 20% of data using least-squares linear regression.
    • calculateInitialSlope

      private void calculateInitialSlope()
      Calculate the Hall slope from the first 20% of data (initial injectivity baseline).
    • calculateSlopeLinearRegression

      private double calculateSlopeLinearRegression(int startIdx, int endIdx)
      Calculate slope using least-squares linear regression on the Hall plot.
      Parameters:
      startIdx - start index (inclusive)
      endIdx - end index (inclusive)
      Returns:
      slope (bar day / m3)
    • updateDiagnosis

      private void updateDiagnosis()
      Update the conformance diagnosis based on Hall slope analysis and injection profile.
    • getDiagnosisDescription

      private String getDiagnosisDescription()
      Get human-readable diagnosis description.
      Returns:
      description string
    • 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