Class LNGVaporSpaceModel

java.lang.Object
neqsim.process.equipment.lng.LNGVaporSpaceModel
All Implemented Interfaces:
Serializable

public class LNGVaporSpaceModel extends Object implements Serializable
Models the vapor space above the LNG liquid in a cargo tank.

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 Details

    • serialVersionUID

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

      private static final org.apache.logging.log4j.Logger logger
      Logger object.
    • R_GAS

      private static final double R_GAS
      Gas constant R = 8.314 J/(mol*K).
      See Also:
    • totalTankVolume

      private double totalTankVolume
      Tank total volume (m3).
    • currentLiquidVolume

      private double currentLiquidVolume
      Current liquid volume (m3).
    • tankPressure

      private double tankPressure
      Current tank pressure (bara).
    • minPressure

      private double minPressure
      Minimum allowed tank pressure (bara).
    • maxPressure

      private double maxPressure
      Maximum allowed tank pressure (bara) — relief valve set point.
    • vaporTemperature

      private double vaporTemperature
      Current vapor temperature (K).
    • vaporMoles

      private double vaporMoles
      Moles of vapor in the ullage space.
    • vaporComposition

      private Map<String,Double> vaporComposition
      Current vapor composition (mole fractions).
    • equilibriumMode

      private boolean equilibriumMode
      Whether to use equilibrium mode (true) or accumulation mode (false).
    • unhandledBOGMoles

      private double unhandledBOGMoles
      BOG moles generated but not yet handled in this time step.
    • referenceSystem

      private transient SystemInterface referenceSystem
      Reference thermo system for flash-based vapor space calculations.
    • useFlashModel

      private boolean useFlashModel
      Whether 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 step
      bogMolesRemoved - moles of BOG removed by handling (compressor, reliquefaction, GCU)
      liquidVolume - current liquid volume (m3)
      equilibriumVaporComp - vapor composition from VLE flash
      liquidTemperature - 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

      public Map<String,Double> getVaporComposition()
      Get vapor composition.
      Returns:
      map of component name to mole fraction
    • 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

      public void setReferenceSystem(SystemInterface system)
      Set the reference thermo system for flash-based vapor space calculations.
      Parameters:
      system - reference thermo system
    • getReferenceSystem

      public SystemInterface 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 generated
      bogMolesRemoved - moles removed by BOG handling
      liquidVolume - current liquid volume (m3)
      equilibriumVaporComp - vapor composition from liquid VLE flash
      liquidTemperature - liquid surface temperature (K)