Class FluidMagicInput

java.lang.Object
neqsim.process.util.optimizer.FluidMagicInput
All Implemented Interfaces:
Serializable

public class FluidMagicInput extends Object implements Serializable
Reference fluid input from FluidMagic/Eclipse E300 for multi-scenario optimization.

Provides the base case gas and oil compositions with molar flow rates. This is the starting point for recombination flash to generate GOR variations.

Data Sources

  • E300 File: Gas and oil composition (from FluidMagic export)
  • Eclipse 100: GOR range (from FGOR vector), Water cut range (from FWCT vector)

NOTE: The E300 file provides gas and oil composition ONLY. Water cut and GOR ranges come from Eclipse 100 simulation results and must be specified separately.

Usage Example

// From E300 file
FluidMagicInput input = FluidMagicInput.fromE300File(Paths.get("FLUID.E300"));
input.setGORRange(250, 10000); // from Eclipse 100 FGOR
input.setWaterCutRange(0.05, 0.60); // from Eclipse 100 FWCT
input.separateToStandardConditions();

// Or using builder
FluidMagicInput input = FluidMagicInput.builder().referenceFluid(myFluid).gorRange(250, 10000)
    .waterCutRange(0.05, 0.60).numberOfGORPoints(6).numberOfWaterCutPoints(5).build();
Version:
1.0
Author:
ESOL
See Also:
  • Field Details

    • serialVersionUID

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

      private static final org.apache.logging.log4j.Logger logger
      Logger object for class.
    • STD_TEMPERATURE_K

      private static final double STD_TEMPERATURE_K
      Standard temperature in Kelvin (15°C).
      See Also:
    • STD_PRESSURE_BARA

      private static final double STD_PRESSURE_BARA
      Standard pressure in bara (1 atm).
      See Also:
    • referenceFluid

      private SystemInterface referenceFluid
    • gasPhase

      private SystemInterface gasPhase
    • oilPhase

      private SystemInterface oilPhase
    • waterPhase

      private SystemInterface waterPhase
    • minGOR

      private double minGOR
    • maxGOR

      private double maxGOR
    • minWaterCut

      private double minWaterCut
    • maxWaterCut

      private double maxWaterCut
    • temperature

      private double temperature
    • pressure

      private double pressure
    • numberOfGORPoints

      private int numberOfGORPoints
    • numberOfWaterCutPoints

      private int numberOfWaterCutPoints
    • gorSpacing

      private FluidMagicInput.GORSpacing gorSpacing
    • gasStdVolume

      private double gasStdVolume
    • oilStdVolume

      private double oilStdVolume
    • waterStdVolume

      private double waterStdVolume
    • baseCaseGOR

      private double baseCaseGOR
    • waterSalinityPPM

      private double waterSalinityPPM
  • Constructor Details

    • FluidMagicInput

      public FluidMagicInput()
      Default constructor.
    • FluidMagicInput

      public FluidMagicInput(SystemInterface referenceFluid)
      Constructor with reference fluid.
      Parameters:
      referenceFluid - the reference fluid from E300 or NeqSim
  • Method Details

    • fromE300File

      public static FluidMagicInput fromE300File(Path e300Path)
      Import reference fluid from E300/FluidMagic file.

      Uses EclipseFluidReadWrite to parse the E300 file format.

      Parameters:
      e300Path - path to the E300 file
      Returns:
      FluidMagicInput with imported fluid
    • fromE300File

      public static FluidMagicInput fromE300File(String e300FilePath)
      Import reference fluid from E300/FluidMagic file.
      Parameters:
      e300FilePath - path to the E300 file as string
      Returns:
      FluidMagicInput with imported fluid
    • fromFluid

      public static FluidMagicInput fromFluid(SystemInterface fluid)
      Create FluidMagicInput from existing NeqSim fluid.
      Parameters:
      fluid - the reference fluid (should contain gas and oil components)
      Returns:
      FluidMagicInput with the provided fluid
    • separateToStandardConditions

      public void separateToStandardConditions()
      Separate reference fluid into gas and oil phases at standard conditions.

      This prepares for recombination flash by:

      1. Cloning the reference fluid
      2. Flashing to standard conditions (15°C, 1.01325 bara)
      3. Extracting gas and oil phases separately
      4. Calculating standard volumes for rate scaling

      NOTE: Water phase is NOT extracted from E300 - it will be added based on water cut from Eclipse 100 simulation.

    • createWaterPhase

      private void createWaterPhase()
      Create water phase for water cut calculations.

      If salinity is specified, creates formation water with dissolved salts. Otherwise, creates pure water.

    • generateGORValues

      public double[] generateGORValues()
      Generate array of GOR values for scenario generation.
      Returns:
      array of GOR values in Sm3/Sm3
    • generateWaterCutValues

      public double[] generateWaterCutValues()
      Generate array of water cut values for scenario generation.
      Returns:
      array of water cut values as fractions (0-1)
    • setGORRange

      public void setGORRange(double min, double max)
      Set GOR range from Eclipse 100 FGOR vector.
      Parameters:
      min - minimum GOR in Sm3/Sm3
      max - maximum GOR in Sm3/Sm3
    • setGORRange

      public void setGORRange(double min, double max, int count)
      Set GOR range with number of points (convenience method).

      Combines setGORRange(double, double) and setNumberOfGORPoints(int).

      Parameters:
      min - minimum GOR in Sm3/Sm3
      max - maximum GOR in Sm3/Sm3
      count - number of GOR points to generate (minimum 2)
    • setWaterCutRange

      public void setWaterCutRange(double min, double max)
      Set water cut range from Eclipse 100 FWCT vector.
      Parameters:
      min - minimum water cut as fraction (0-1)
      max - maximum water cut as fraction (0-1)
    • setWaterCutRange

      public void setWaterCutRange(double min, double max, int count)
      Set water cut range with number of points (convenience method).

      Combines setWaterCutRange(double, double) and setNumberOfWaterCutPoints(int).

      Parameters:
      min - minimum water cut as fraction (0-1)
      max - maximum water cut as fraction (0-1)
      count - number of water cut points to generate (minimum 2)
    • getReferenceFluid

      public SystemInterface getReferenceFluid()
      Get the reference fluid.
      Returns:
      reference fluid
    • setReferenceFluid

      public void setReferenceFluid(SystemInterface referenceFluid)
      Set the reference fluid.
      Parameters:
      referenceFluid - reference fluid from E300 or NeqSim
    • getGasPhase

      public SystemInterface getGasPhase()
      Get the gas phase at standard conditions.
      Returns:
      gas phase
    • getOilPhase

      public SystemInterface getOilPhase()
      Get the oil phase at standard conditions.
      Returns:
      oil phase
    • getWaterPhase

      public SystemInterface getWaterPhase()
      Get the water phase.
      Returns:
      water phase
    • getMinGOR

      public double getMinGOR()
      Get minimum GOR.
      Returns:
      minimum GOR in Sm3/Sm3
    • getMaxGOR

      public double getMaxGOR()
      Get maximum GOR.
      Returns:
      maximum GOR in Sm3/Sm3
    • getMinWaterCut

      public double getMinWaterCut()
      Get minimum water cut.
      Returns:
      minimum water cut as fraction
    • getMaxWaterCut

      public double getMaxWaterCut()
      Get maximum water cut.
      Returns:
      maximum water cut as fraction
    • getTemperature

      public double getTemperature()
      Get the temperature for generating fluids.
      Returns:
      temperature in Kelvin
    • setTemperature

      public void setTemperature(double temperature)
      Set the temperature for generating fluids.
      Parameters:
      temperature - temperature in Kelvin
    • getPressure

      public double getPressure()
      Get the pressure for generating fluids.
      Returns:
      pressure in bara
    • setPressure

      public void setPressure(double pressure)
      Set the pressure for generating fluids.
      Parameters:
      pressure - pressure in bara
    • getNumberOfGORPoints

      public int getNumberOfGORPoints()
      Get number of GOR points for scenario generation.
      Returns:
      number of GOR points
    • setNumberOfGORPoints

      public void setNumberOfGORPoints(int numberOfGORPoints)
      Set number of GOR points for scenario generation.
      Parameters:
      numberOfGORPoints - number of GOR points (minimum 2)
    • getNumberOfWaterCutPoints

      public int getNumberOfWaterCutPoints()
      Get number of water cut points for scenario generation.
      Returns:
      number of water cut points
    • setNumberOfWaterCutPoints

      public void setNumberOfWaterCutPoints(int numberOfWaterCutPoints)
      Set number of water cut points for scenario generation.
      Parameters:
      numberOfWaterCutPoints - number of water cut points (minimum 2)
    • getGorSpacing

      public FluidMagicInput.GORSpacing getGorSpacing()
      Get GOR spacing mode.
      Returns:
      GOR spacing mode
    • setGorSpacing

      public void setGorSpacing(FluidMagicInput.GORSpacing gorSpacing)
      Set GOR spacing mode.
      Parameters:
      gorSpacing - GOR spacing mode (LINEAR or LOGARITHMIC)
    • getGasStdVolume

      public double getGasStdVolume()
      Get standard gas volume.
      Returns:
      gas volume at standard conditions in m3
    • getOilStdVolume

      public double getOilStdVolume()
      Get standard oil volume.
      Returns:
      oil volume at standard conditions in m3
    • getWaterStdVolume

      public double getWaterStdVolume()
      Get standard water volume.
      Returns:
      water volume at standard conditions in m3/kmol
    • getBaseCaseGOR

      public double getBaseCaseGOR()
      Get base case GOR from reference fluid.
      Returns:
      base case GOR in Sm3/Sm3
    • getWaterSalinityPPM

      public double getWaterSalinityPPM()
      Get water salinity.
      Returns:
      salinity in ppm NaCl equivalent
    • setWaterSalinityPPM

      public void setWaterSalinityPPM(double waterSalinityPPM)
      Set water salinity for formation water.
      Parameters:
      waterSalinityPPM - salinity in ppm NaCl equivalent
    • isReady

      public boolean isReady()
      Check if phase separation has been performed.
      Returns:
      true if phases are separated and ready for recombination
    • getTotalScenarios

      public int getTotalScenarios()
      Get total number of scenarios that will be generated.
      Returns:
      total scenarios (GOR points × WC points)
    • builder

      public static FluidMagicInput.Builder builder()
      Create a builder for FluidMagicInput.
      Returns:
      new Builder instance
    • toString

      public String toString()
      Overrides:
      toString in class Object