Class LNGVaporSpaceModel
- All Implemented Interfaces:
Serializable
The vapor space determines the tank pressure and vapor composition. In real LNG tanks, the vapor space is not in thermodynamic equilibrium with the liquid surface during rapid transients (e.g., pressure build-up after valve closure, rapid loading/unloading). This model provides both equilibrium and non-equilibrium modes.
Key features:
- Pressure tracking: Tank pressure evolves based on BOG generation rate vs relief/ handling rate
- Vapor composition: Determined by VLE flash in equilibrium mode, or by mass balance accumulation in non-equilibrium mode
- Ullage volume: Total tank volume minus liquid volume, varies with boil-off
Pressure dynamics follow the ideal gas relationship for the ullage space:
P_new = P_old + (n_bog_generated - n_bog_removed) * R * T_vapor / V_ullage
- Version:
- 1.0
- Author:
- NeqSim
- See Also:
-
Field Summary
FieldsModifier and TypeFieldDescriptionprivate doubleCurrent liquid volume (m3).private booleanWhether to use equilibrium mode (true) or accumulation mode (false).private static final org.apache.logging.log4j.LoggerLogger object.private doubleMaximum allowed tank pressure (bara) — relief valve set point.private doubleMinimum allowed tank pressure (bara).private static final doubleGas constant R = 8.314 J/(mol*K).private SystemInterfaceReference thermo system for flash-based vapor space calculations.private static final longSerialization version UID.private doubleCurrent tank pressure (bara).private doubleTank total volume (m3).private doubleBOG moles generated but not yet handled in this time step.private booleanWhether to use flash-based vapor space model (true) or simple PV=nRT (false).Current vapor composition (mole fractions).private doubleMoles of vapor in the ullage space.private doubleCurrent vapor temperature (K). -
Constructor Summary
ConstructorsConstructorDescriptionLNGVaporSpaceModel(double totalTankVolume) Constructor for LNGVaporSpaceModel. -
Method Summary
Modifier and TypeMethodDescriptiondoubleGet current liquid volume.doubleGet moles of BOG that need to be handled to prevent over-pressure.doubleGet the fill level as a fraction (0-1).doubleGet maximum pressure (relief set point).doubleGet minimum pressure.Get the reference thermo system.doubleGet tank pressure.doubleGet tank total volume.doubleGet the ullage (vapor space) volume.doubleGet unhandled BOG moles.Get vapor composition.doubleGet vapor moles.doubleGet vapor temperature.booleanCheck if equilibrium mode is active.booleanCheck if the tank pressure exceeds the relief valve set point.booleanCheck if the tank is under-pressured (needs BOG return or nitrogen blanket).booleanCheck if flash-based vapor space model is enabled.voidsetCurrentLiquidVolume(double volume) Set current liquid volume.voidsetEquilibriumMode(boolean equilibriumMode) Set the vapor space calculation mode.voidsetMaxPressure(double maxPressure) Set maximum pressure (relief set point).voidsetMinPressure(double minPressure) Set minimum pressure.voidsetReferenceSystem(SystemInterface system) Set the reference thermo system for flash-based vapor space calculations.voidsetTankPressure(double pressure) Set tank pressure.voidsetTotalTankVolume(double totalTankVolume) Set tank total volume.voidsetUseFlashModel(boolean useFlash) Enable or disable flash-based vapor space model.voidsetVaporMoles(double moles) Set vapor moles.voidsetVaporTemperature(double temperature) Set vapor temperature.voidupdate(double bogMolesGenerated, double bogMolesRemoved, double liquidVolume, Map<String, Double> equilibriumVaporComp, double liquidTemperature) Update the vapor space state after a time step.voidupdateWithFlash(double bogMolesGenerated, double bogMolesRemoved, double liquidVolume, Map<String, Double> equilibriumVaporComp, double liquidTemperature) Perform a flash-based update of the vapor space.
-
Field Details
-
serialVersionUID
private static final long serialVersionUIDSerialization version UID.- See Also:
-
logger
private static final org.apache.logging.log4j.Logger loggerLogger object. -
R_GAS
private static final double R_GASGas constant R = 8.314 J/(mol*K).- See Also:
-
totalTankVolume
private double totalTankVolumeTank total volume (m3). -
currentLiquidVolume
private double currentLiquidVolumeCurrent liquid volume (m3). -
tankPressure
private double tankPressureCurrent tank pressure (bara). -
minPressure
private double minPressureMinimum allowed tank pressure (bara). -
maxPressure
private double maxPressureMaximum allowed tank pressure (bara) — relief valve set point. -
vaporTemperature
private double vaporTemperatureCurrent vapor temperature (K). -
vaporMoles
private double vaporMolesMoles of vapor in the ullage space. -
vaporComposition
-
equilibriumMode
private boolean equilibriumModeWhether to use equilibrium mode (true) or accumulation mode (false). -
unhandledBOGMoles
private double unhandledBOGMolesBOG moles generated but not yet handled in this time step. -
referenceSystem
Reference thermo system for flash-based vapor space calculations. -
useFlashModel
private boolean useFlashModelWhether to use flash-based vapor space model (true) or simple PV=nRT (false).
-
-
Constructor Details
-
LNGVaporSpaceModel
public LNGVaporSpaceModel(double totalTankVolume) Constructor for LNGVaporSpaceModel.- Parameters:
totalTankVolume- total tank volume (m3)
-
-
Method Details
-
getUllageVolume
public double getUllageVolume()Get the ullage (vapor space) volume.- Returns:
- ullage volume (m3)
-
getFillLevel
public double getFillLevel()Get the fill level as a fraction (0-1).- Returns:
- fill level fraction
-
update
public void update(double bogMolesGenerated, double bogMolesRemoved, double liquidVolume, Map<String, Double> equilibriumVaporComp, double liquidTemperature) Update the vapor space state after a time step.In equilibrium mode, the pressure and vapor composition are determined by the VLE flash of the top liquid layer. In accumulation mode, the pressure is updated based on the net BOG accumulation in the ullage space: P += (nBOG_gen - nBOG_removed) * R * T / V_ullage.
- Parameters:
bogMolesGenerated- moles of BOG generated from liquid evaporation this stepbogMolesRemoved- moles of BOG removed by handling (compressor, reliquefaction, GCU)liquidVolume- current liquid volume (m3)equilibriumVaporComp- vapor composition from VLE flashliquidTemperature- liquid temperature (K)
-
isPressureAboveRelief
public boolean isPressureAboveRelief()Check if the tank pressure exceeds the relief valve set point.- Returns:
- true if pressure exceeds maximum
-
isUnderPressured
public boolean isUnderPressured()Check if the tank is under-pressured (needs BOG return or nitrogen blanket).- Returns:
- true if pressure is below minimum
-
getExcessBOGMoles
public double getExcessBOGMoles()Get moles of BOG that need to be handled to prevent over-pressure.- Returns:
- excess BOG moles (0 if pressure is OK)
-
getTotalTankVolume
public double getTotalTankVolume()Get tank total volume.- Returns:
- total volume (m3)
-
setTotalTankVolume
public void setTotalTankVolume(double totalTankVolume) Set tank total volume.- Parameters:
totalTankVolume- total volume (m3)
-
getCurrentLiquidVolume
public double getCurrentLiquidVolume()Get current liquid volume.- Returns:
- liquid volume (m3)
-
setCurrentLiquidVolume
public void setCurrentLiquidVolume(double volume) Set current liquid volume.- Parameters:
volume- liquid volume (m3)
-
getTankPressure
public double getTankPressure()Get tank pressure.- Returns:
- pressure (bara)
-
setTankPressure
public void setTankPressure(double pressure) Set tank pressure.- Parameters:
pressure- pressure (bara)
-
getMinPressure
public double getMinPressure()Get minimum pressure.- Returns:
- min pressure (bara)
-
setMinPressure
public void setMinPressure(double minPressure) Set minimum pressure.- Parameters:
minPressure- min pressure (bara)
-
getMaxPressure
public double getMaxPressure()Get maximum pressure (relief set point).- Returns:
- max pressure (bara)
-
setMaxPressure
public void setMaxPressure(double maxPressure) Set maximum pressure (relief set point).- Parameters:
maxPressure- max pressure (bara)
-
getVaporTemperature
public double getVaporTemperature()Get vapor temperature.- Returns:
- vapor temperature (K)
-
setVaporTemperature
public void setVaporTemperature(double temperature) Set vapor temperature.- Parameters:
temperature- vapor temperature (K)
-
getVaporMoles
public double getVaporMoles()Get vapor moles.- Returns:
- vapor moles (mol)
-
setVaporMoles
public void setVaporMoles(double moles) Set vapor moles.- Parameters:
moles- vapor moles (mol)
-
getVaporComposition
-
isEquilibriumMode
public boolean isEquilibriumMode()Check if equilibrium mode is active.- Returns:
- true if in equilibrium mode
-
setEquilibriumMode
public void setEquilibriumMode(boolean equilibriumMode) Set the vapor space calculation mode.- Parameters:
equilibriumMode- true for equilibrium, false for accumulation
-
getUnhandledBOGMoles
public double getUnhandledBOGMoles()Get unhandled BOG moles.- Returns:
- unhandled BOG moles
-
setReferenceSystem
Set the reference thermo system for flash-based vapor space calculations.- Parameters:
system- reference thermo system
-
getReferenceSystem
Get the reference thermo system.- Returns:
- reference thermo system or null
-
setUseFlashModel
public void setUseFlashModel(boolean useFlash) Enable or disable flash-based vapor space model.When enabled, the vapor space composition and pressure are determined by a TP flash on the combined liquid surface + accumulated vapor inventory, rather than the simple PV=nRT model. This captures condensation of heavier components from the vapor and re-evaporation phenomena.
- Parameters:
useFlash- true to use flash model
-
isUseFlashModel
public boolean isUseFlashModel()Check if flash-based vapor space model is enabled.- Returns:
- true if using flash model
-
updateWithFlash
public void updateWithFlash(double bogMolesGenerated, double bogMolesRemoved, double liquidVolume, Map<String, Double> equilibriumVaporComp, double liquidTemperature) Perform a flash-based update of the vapor space.Creates a thermo system with the current ullage gas composition, runs a TP flash to determine how much condenses back into liquid versus stays in the vapor. This provides more accurate vapor composition and pressure than the simple ideal gas model, especially when heavier components accumulate in the vapor space.
- Parameters:
bogMolesGenerated- moles of BOG generatedbogMolesRemoved- moles removed by BOG handlingliquidVolume- current liquid volume (m3)equilibriumVaporComp- vapor composition from liquid VLE flashliquidTemperature- liquid surface temperature (K)
-