Class FluidMagicInput
- All Implemented Interfaces:
Serializable
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:
-
Nested Class Summary
Nested ClassesModifier and TypeClassDescriptionstatic classBuilder class for FluidMagicInput.static enumGOR spacing options for scenario generation. -
Field Summary
FieldsModifier and TypeFieldDescriptionprivate doubleprivate SystemInterfaceprivate doubleprivate FluidMagicInput.GORSpacingprivate static final org.apache.logging.log4j.LoggerLogger object for class.private doubleprivate doubleprivate doubleprivate doubleprivate intprivate intprivate SystemInterfaceprivate doubleprivate doubleprivate SystemInterfaceprivate static final longSerialization version UID.private static final doubleStandard pressure in bara (1 atm).private static final doubleStandard temperature in Kelvin (15°C).private doubleprivate SystemInterfaceprivate doubleprivate double -
Constructor Summary
ConstructorsConstructorDescriptionDefault constructor.FluidMagicInput(SystemInterface referenceFluid) Constructor with reference fluid. -
Method Summary
Modifier and TypeMethodDescriptionstatic FluidMagicInput.Builderbuilder()Create a builder for FluidMagicInput.private voidCreate water phase for water cut calculations.static FluidMagicInputfromE300File(String e300FilePath) Import reference fluid from E300/FluidMagic file.static FluidMagicInputfromE300File(Path e300Path) Import reference fluid from E300/FluidMagic file.static FluidMagicInputfromFluid(SystemInterface fluid) Create FluidMagicInput from existing NeqSim fluid.double[]Generate array of GOR values for scenario generation.double[]Generate array of water cut values for scenario generation.doubleGet base case GOR from reference fluid.Get the gas phase at standard conditions.doubleGet standard gas volume.Get GOR spacing mode.doubleGet maximum GOR.doubleGet maximum water cut.doubleGet minimum GOR.doubleGet minimum water cut.intGet number of GOR points for scenario generation.intGet number of water cut points for scenario generation.Get the oil phase at standard conditions.doubleGet standard oil volume.doubleGet the pressure for generating fluids.Get the reference fluid.doubleGet the temperature for generating fluids.intGet total number of scenarios that will be generated.Get the water phase.doubleGet water salinity.doubleGet standard water volume.booleanisReady()Check if phase separation has been performed.voidSeparate reference fluid into gas and oil phases at standard conditions.voidsetGORRange(double min, double max) Set GOR range from Eclipse 100 FGOR vector.voidsetGORRange(double min, double max, int count) Set GOR range with number of points (convenience method).voidsetGorSpacing(FluidMagicInput.GORSpacing gorSpacing) Set GOR spacing mode.voidsetNumberOfGORPoints(int numberOfGORPoints) Set number of GOR points for scenario generation.voidsetNumberOfWaterCutPoints(int numberOfWaterCutPoints) Set number of water cut points for scenario generation.voidsetPressure(double pressure) Set the pressure for generating fluids.voidsetReferenceFluid(SystemInterface referenceFluid) Set the reference fluid.voidsetTemperature(double temperature) Set the temperature for generating fluids.voidsetWaterCutRange(double min, double max) Set water cut range from Eclipse 100 FWCT vector.voidsetWaterCutRange(double min, double max, int count) Set water cut range with number of points (convenience method).voidsetWaterSalinityPPM(double waterSalinityPPM) Set water salinity for formation water.toString()
-
Field Details
-
serialVersionUID
private static final long serialVersionUIDSerialization version UID.- See Also:
-
logger
private static final org.apache.logging.log4j.Logger loggerLogger object for class. -
STD_TEMPERATURE_K
private static final double STD_TEMPERATURE_KStandard temperature in Kelvin (15°C).- See Also:
-
STD_PRESSURE_BARA
private static final double STD_PRESSURE_BARAStandard pressure in bara (1 atm).- See Also:
-
referenceFluid
-
gasPhase
-
oilPhase
-
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
-
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
Constructor with reference fluid.- Parameters:
referenceFluid- the reference fluid from E300 or NeqSim
-
-
Method Details
-
fromE300File
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
Import reference fluid from E300/FluidMagic file.- Parameters:
e300FilePath- path to the E300 file as string- Returns:
- FluidMagicInput with imported fluid
-
fromFluid
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:
- Cloning the reference fluid
- Flashing to standard conditions (15°C, 1.01325 bara)
- Extracting gas and oil phases separately
- 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/Sm3max- 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)andsetNumberOfGORPoints(int).- Parameters:
min- minimum GOR in Sm3/Sm3max- maximum GOR in Sm3/Sm3count- 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)andsetNumberOfWaterCutPoints(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
-
setReferenceFluid
Set the reference fluid.- Parameters:
referenceFluid- reference fluid from E300 or NeqSim
-
getGasPhase
-
getOilPhase
-
getWaterPhase
-
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
-
setGorSpacing
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
Create a builder for FluidMagicInput.- Returns:
- new Builder instance
-
toString
-