Class SafetyEnvelopeCalculator
java.lang.Object
neqsim.process.safety.envelope.SafetyEnvelopeCalculator
Calculator for generating safety envelopes from fluid properties.
Computes P-T curves for various safety limits including:
- Hydrate formation temperature vs pressure
- Wax appearance temperature (WAT) vs pressure
- CO2 solid formation boundary
- Minimum design metal temperature (MDMT) curves
- Phase envelope (bubble/dew points)
Example Usage:
SafetyEnvelopeCalculator calc = new SafetyEnvelopeCalculator(gasSystem);
SafetyEnvelope hydrateEnv = calc.calculateHydrateEnvelope(1.0, 150.0, 20);
hydrateEnv.exportToCSV("hydrate_curve.csv");
// Check operating point
boolean safe = hydrateEnv.isOperatingPointSafe(50.0, 280.0);
- Author:
- NeqSim team
-
Field Summary
FieldsModifier and TypeFieldDescriptionprivate final SystemInterfaceprivate doubleprivate doubleprivate doubleprivate double -
Constructor Summary
ConstructorsConstructorDescriptionCreates a new calculator for the specified fluid. -
Method Summary
Modifier and TypeMethodDescriptioncalculateAllEnvelopes(double minPressure, double maxPressure, int numPoints) Calculates a combined safety envelope with all applicable limits.calculateCO2FreezingEnvelope(double minPressure, double maxPressure, int numPoints) Calculates the CO2 freezing envelope.calculateHydrateEnvelope(double minPressure, double maxPressure, int numPoints) Calculates the hydrate formation envelope.calculateMDMTEnvelope(double minPressure, double maxPressure, double designTemp, int numPoints) Calculates MDMT envelope based on fluid composition and metallurgy.calculatePhaseEnvelope(int numPoints) Calculates the phase envelope (bubble and dew point curves).calculateWaxEnvelope(double minPressure, double maxPressure, int numPoints) Calculates the wax appearance temperature envelope.private Stringstatic SafetyEnvelopegetMostLimitingEnvelope(SafetyEnvelope[] envelopes, double pressureBara, double temperatureK) Finds the most limiting envelope at given conditions.static booleanisOperatingPointSafe(SafetyEnvelope[] envelopes, double pressureBara, double temperatureK) Checks if an operating point is safe with respect to all calculated envelopes.voidsetHydrateSafetyMargin(double marginK) Sets the safety margin for hydrate calculations.voidsetMDMTSafetyMargin(double marginK) Sets the safety margin for MDMT calculations.voidsetWaxSafetyMargin(double marginK) Sets the safety margin for wax calculations.
-
Field Details
-
fluid
-
safetyMarginHydrate
private double safetyMarginHydrate -
safetyMarginWax
private double safetyMarginWax -
safetyMarginMDMT
private double safetyMarginMDMT -
safetyMarginCO2
private double safetyMarginCO2
-
-
Constructor Details
-
SafetyEnvelopeCalculator
Creates a new calculator for the specified fluid.- Parameters:
fluid- the thermodynamic system to analyze
-
-
Method Details
-
setHydrateSafetyMargin
public void setHydrateSafetyMargin(double marginK) Sets the safety margin for hydrate calculations.- Parameters:
marginK- margin in Kelvin
-
setWaxSafetyMargin
public void setWaxSafetyMargin(double marginK) Sets the safety margin for wax calculations.- Parameters:
marginK- margin in Kelvin
-
setMDMTSafetyMargin
public void setMDMTSafetyMargin(double marginK) Sets the safety margin for MDMT calculations.- Parameters:
marginK- margin in Kelvin
-
calculateHydrateEnvelope
public SafetyEnvelope calculateHydrateEnvelope(double minPressure, double maxPressure, int numPoints) Calculates the hydrate formation envelope.- Parameters:
minPressure- minimum pressure in baramaxPressure- maximum pressure in baranumPoints- number of points to calculate- Returns:
- hydrate formation envelope
-
calculateWaxEnvelope
Calculates the wax appearance temperature envelope.- Parameters:
minPressure- minimum pressure in baramaxPressure- maximum pressure in baranumPoints- number of points to calculate- Returns:
- WAT envelope
-
calculateCO2FreezingEnvelope
public SafetyEnvelope calculateCO2FreezingEnvelope(double minPressure, double maxPressure, int numPoints) Calculates the CO2 freezing envelope.Uses the CO2 triple point and sublimation curve to determine solid formation risk.
- Parameters:
minPressure- minimum pressure in baramaxPressure- maximum pressure in baranumPoints- number of points to calculate- Returns:
- CO2 freezing envelope
-
calculatePhaseEnvelope
Calculates the phase envelope (bubble and dew point curves).- Parameters:
numPoints- number of points per curve- Returns:
- phase envelope
-
calculateMDMTEnvelope
public SafetyEnvelope calculateMDMTEnvelope(double minPressure, double maxPressure, double designTemp, int numPoints) Calculates MDMT envelope based on fluid composition and metallurgy.MDMT calculation considers:
- Joule-Thomson cooling during depressurization
- Auto-refrigeration from liquid flashing
- Material impact testing requirements (e.g., ASME UCS-66)
- Parameters:
minPressure- minimum pressure in baramaxPressure- maximum pressure in baradesignTemp- design temperature in KnumPoints- number of points to calculate- Returns:
- MDMT envelope
-
calculateAllEnvelopes
public SafetyEnvelope[] calculateAllEnvelopes(double minPressure, double maxPressure, int numPoints) Calculates a combined safety envelope with all applicable limits.- Parameters:
minPressure- minimum pressure in baramaxPressure- maximum pressure in baranumPoints- number of points per envelope- Returns:
- array of all calculated envelopes
-
isOperatingPointSafe
public static boolean isOperatingPointSafe(SafetyEnvelope[] envelopes, double pressureBara, double temperatureK) Checks if an operating point is safe with respect to all calculated envelopes.- Parameters:
envelopes- array of envelopes to checkpressureBara- operating pressuretemperatureK- operating temperature- Returns:
- true if safe for all envelopes
-
getMostLimitingEnvelope
public static SafetyEnvelope getMostLimitingEnvelope(SafetyEnvelope[] envelopes, double pressureBara, double temperatureK) Finds the most limiting envelope at given conditions.- Parameters:
envelopes- array of envelopes to checkpressureBara- operating pressuretemperatureK- operating temperature- Returns:
- the envelope with smallest margin, or null if all have infinite margin
-
getFluidDescription
-