Class LNGRolloverDetector
- All Implemented Interfaces:
Serializable
LNG rollover is a sudden mixing event in a stratified tank where a denser upper layer (formed by preferential evaporation of light components) rapidly exchanges position with a warmer, lighter lower layer (heated by wall ingress). The resulting flash of the superheated lower layer produces a surge of BOG that can exceed the tank's pressure relief capacity.
Detection criteria (based on published LNG rollover incidents and research):
- Density inversion: Upper layer denser than lower layer by more than a threshold (typically 1-5 kg/m3)
- Temperature differential: Temperature difference between layers above a threshold (typically 0.5-2.0 K) with lower layer warmer
- Rayleigh number criterion: Natural convection onset when Ra exceeds critical value (~1700 for horizontal liquid layers)
- Stability index: Combined density and temperature stratification metric
- Version:
- 1.0
- Author:
- NeqSim
- See Also:
-
Nested Class Summary
Nested ClassesModifier and TypeClassDescriptionstatic classResult of a rollover assessment.static enumRisk level enumeration for rollover assessment. -
Field Summary
FieldsModifier and TypeFieldDescriptionprivate doubleCritical Rayleigh number for convection onset in LNG.private doubleDensity difference threshold for rollover alarm (kg/m3).History of density differences for trend extrapolation (most recent last).private doubleDensity difference threshold for rollover warning (kg/m3).private doubleLNG kinematic viscosity (m2/s).private static final org.apache.logging.log4j.LoggerLogger object.private intMaximum history length for trend analysis.private static final longSerialization version UID.private doubleTemperature difference threshold for rollover concern (K).private doubleLNG thermal diffusivity (m2/s).private doubleLNG thermal expansion coefficient (1/K). -
Constructor Summary
Constructors -
Method Summary
Modifier and TypeMethodDescriptionassess(List<LNGTankLayer> layers) Assess rollover risk based on current layer state.doublecalculateRayleighNumber(double deltaT, double layerHeight) Calculate the Rayleigh number for natural convection onset.voidClear the density difference history.private doubleestimateLayerHeight(LNGTankLayer layer) Estimate the height of a layer based on its volume and tank geometry.private doubleestimateTimeToRollover(double currentDensityDiff) Estimate the time to rollover based on density difference trend.doubleGet the critical Rayleigh number.doubleGet density alarm threshold.Get the density difference history for analysis.doubleGet density warning threshold.doubleGet temperature threshold.voidsetCriticalRayleighNumber(double criticalRa) Set the critical Rayleigh number.voidsetDensityAlarmThreshold(double threshold) Set density alarm threshold.voidsetDensityWarningThreshold(double threshold) Set density warning threshold.voidsetLNGProperties(double thermalExpansionCoeff, double kinematicViscosity, double thermalDiffusivity) Set LNG physical properties for Rayleigh calculation.voidsetTemperatureThreshold(double threshold) Set temperature threshold.
-
Field Details
-
serialVersionUID
private static final long serialVersionUIDSerialization version UID.- See Also:
-
logger
private static final org.apache.logging.log4j.Logger loggerLogger object. -
densityWarningThreshold
private double densityWarningThresholdDensity difference threshold for rollover warning (kg/m3). -
densityAlarmThreshold
private double densityAlarmThresholdDensity difference threshold for rollover alarm (kg/m3). -
temperatureThreshold
private double temperatureThresholdTemperature difference threshold for rollover concern (K). -
criticalRayleighNumber
private double criticalRayleighNumberCritical Rayleigh number for convection onset in LNG. -
thermalExpansionCoeff
private double thermalExpansionCoeffLNG thermal expansion coefficient (1/K). Approximate value for LNG. -
kinematicViscosity
private double kinematicViscosityLNG kinematic viscosity (m2/s). Approximate for LNG at -160C. -
thermalDiffusivity
private double thermalDiffusivityLNG thermal diffusivity (m2/s). Approximate for LNG. -
densityDiffHistory
-
maxHistoryLength
private int maxHistoryLengthMaximum history length for trend analysis.
-
-
Constructor Details
-
LNGRolloverDetector
public LNGRolloverDetector()Default constructor.
-
-
Method Details
-
assess
Assess rollover risk based on current layer state.- Parameters:
layers- list of tank layers from bottom to top- Returns:
- rollover risk assessment
-
calculateRayleighNumber
public double calculateRayleighNumber(double deltaT, double layerHeight) Calculate the Rayleigh number for natural convection onset.Ra = g * beta * dT * H^3 / (nu * alpha)
where g = 9.81 m/s2, beta = thermal expansion coefficient, dT = temperature difference, H = layer height, nu = kinematic viscosity, alpha = thermal diffusivity.
- Parameters:
deltaT- temperature difference between layers (K)layerHeight- height of the layer (m)- Returns:
- Rayleigh number
-
estimateLayerHeight
Estimate the height of a layer based on its volume and tank geometry.Assumes a cylindrical tank for simplicity: h = V / (pi * r^2). Default tank diameter 40m gives an approximation.
- Parameters:
layer- the tank layer- Returns:
- estimated layer height (m)
-
getDensityWarningThreshold
public double getDensityWarningThreshold()Get density warning threshold.- Returns:
- threshold (kg/m3)
-
setDensityWarningThreshold
public void setDensityWarningThreshold(double threshold) Set density warning threshold.- Parameters:
threshold- threshold (kg/m3)
-
getDensityAlarmThreshold
public double getDensityAlarmThreshold()Get density alarm threshold.- Returns:
- threshold (kg/m3)
-
setDensityAlarmThreshold
public void setDensityAlarmThreshold(double threshold) Set density alarm threshold.- Parameters:
threshold- threshold (kg/m3)
-
getTemperatureThreshold
public double getTemperatureThreshold()Get temperature threshold.- Returns:
- threshold (K)
-
setTemperatureThreshold
public void setTemperatureThreshold(double threshold) Set temperature threshold.- Parameters:
threshold- threshold (K)
-
getCriticalRayleighNumber
public double getCriticalRayleighNumber()Get the critical Rayleigh number.- Returns:
- critical Rayleigh number
-
setCriticalRayleighNumber
public void setCriticalRayleighNumber(double criticalRa) Set the critical Rayleigh number.- Parameters:
criticalRa- critical Rayleigh number
-
setLNGProperties
public void setLNGProperties(double thermalExpansionCoeff, double kinematicViscosity, double thermalDiffusivity) Set LNG physical properties for Rayleigh calculation.- Parameters:
thermalExpansionCoeff- thermal expansion coefficient (1/K)kinematicViscosity- kinematic viscosity (m2/s)thermalDiffusivity- thermal diffusivity (m2/s)
-
estimateTimeToRollover
private double estimateTimeToRollover(double currentDensityDiff) Estimate the time to rollover based on density difference trend.Uses linear extrapolation of the density difference history to predict when a density inversion (heavier layer on top) will reach the alarm threshold. Requires at least 3 history points for extrapolation.
- Parameters:
currentDensityDiff- current density difference (kg/m3)- Returns:
- estimated hours to rollover, or -1 if no rollover trend detected
-
clearHistory
public void clearHistory()Clear the density difference history. -
getDensityDiffHistory
-