Class AmineSystem

java.lang.Object
neqsim.thermo.util.amines.AmineSystem
All Implemented Interfaces:
Serializable

public class AmineSystem extends Object implements Serializable
Convenience wrapper for creating and configuring amine thermodynamic systems.

Provides a simplified API for setting up MEA, DEA, MDEA, and aMDEA (activated MDEA with piperazine) systems with proper components, reactions, mixing rules, and physical property models. This replaces the simplistic Kent-Eisenberg approach with a rigorous electrolyte-CPA model that supports:

  • VLE with speciation (molecular and ionic species)
  • Heat of reaction from the thermodynamic model
  • Viscosity via Weiland et al. (1998) correlations for loaded solutions
  • CO2 and H2S acid gas absorption

Supported amine systems and their components:

Amine systems and their required components
Amine Neutral Protonated Carbamate Max Loading
MEA MEA MEA+ MEACOO- 0.5
DEA DEA DEA+ DEACOO- 0.5
MDEA MDEA MDEA+ (none) 1.0
aMDEA MDEA, Piperazine MDEA+, Piperazine+ PZCOO- 1.0
Version:
1.0
Author:
Even Solbraa
See Also:
  • Field Details

    • serialVersionUID

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

      static org.apache.logging.log4j.Logger logger
      Logger object for class.
    • COMMON_IONS

      private static final List<String> COMMON_IONS
      Common ionic species required for all amine systems.
    • AMINE_SPECIES

      private static final Map<AmineSystem.AmineType, List<String>> AMINE_SPECIES
      Map of amine type to their required species (neutral amine, ions, carbamate).
    • system

      private SystemInterface system
    • amineType

      private AmineSystem.AmineType amineType
    • temperature

      private double temperature
    • pressure

      private double pressure
    • amineMolFraction

      private double amineMolFraction
    • co2MolFraction

      private double co2MolFraction
    • h2sMolFraction

      private double h2sMolFraction
    • waterMolFraction

      private double waterMolFraction
    • piperazineMolFraction

      private double piperazineMolFraction
    • hasH2S

      private boolean hasH2S
    • initialized

      private boolean initialized
    • heatCalc

      private AmineHeatOfAbsorption heatCalc
  • Constructor Details

    • AmineSystem

      public AmineSystem(AmineSystem.AmineType amineType)
      Creates an amine system with default conditions (40 C, 1.01325 bara).
      Parameters:
      amineType - the type of amine to use
    • AmineSystem

      public AmineSystem(AmineSystem.AmineType amineType, double temperatureK, double pressureBara)
      Creates an amine system at specified conditions.
      Parameters:
      amineType - the type of amine to use
      temperatureK - temperature in Kelvin
      pressureBara - pressure in bara
  • Method Details

    • configureHeatCalcType

      private void configureHeatCalcType()
      Configures the AmineHeatOfAbsorption calculator for the current amine type.
    • setAmineConcentration

      public void setAmineConcentration(double massFraction)
      Sets the amine concentration as mass fraction of the aqueous solution.

      Calculates required mole fractions of amine and water from the mass fraction. Common values: MEA 30 wt%, DEA 30-50 wt%, MDEA 50 wt%, aMDEA 45/5 wt%.

      Parameters:
      massFraction - mass fraction (0 to 1, e.g. 0.30 for 30 wt%)
    • setCO2Loading

      public void setCO2Loading(double loading)
      Sets the CO2 loading in moles CO2 per mole amine.
      Parameters:
      loading - CO2 loading (dimensionless, typically 0 to 0.5 for MEA/DEA, 0 to 1.0 for MDEA)
    • setH2SLoading

      public void setH2SLoading(double loading)
      Sets the H2S loading in moles H2S per mole amine.
      Parameters:
      loading - H2S loading (dimensionless)
    • setPiperazineConcentration

      public void setPiperazineConcentration(double massFraction)
      Sets the piperazine concentration for aMDEA systems.

      Only applicable when amineType is AMDEA. Specifies the piperazine mass fraction of the total solution.

      Parameters:
      massFraction - piperazine mass fraction (e.g. 0.05 for 5 wt%)
    • createSystem

      public SystemInterface createSystem()
      Creates and returns the configured thermodynamic system.

      Uses the electrolyte-CPA EOS (SystemElectrolyteCPAstatoil) which provides rigorous VLE with speciation, including:

      • SRK cubic equation of state for non-ideal gas behavior
      • CPA association term for hydrogen bonding (water, amines)
      • Electrostatic terms (Born, MSA) for ionic interactions
      • Chemical equilibrium for acid gas reactions
      Returns:
      the configured SystemInterface ready for flash calculations
    • getInitialMolFraction

      private double getInitialMolFraction(String componentName)
      Gets the initial mole fraction for a given component based on the system configuration.
      Parameters:
      componentName - the name of the component
      Returns:
      the initial mole fraction
    • runTPflash

      public SystemInterface runTPflash()
      Runs a TP flash calculation on the system.
      Returns:
      the resulting thermodynamic system after flash
    • calcBubblePointPressure

      public double calcBubblePointPressure()
      Runs a bubble point pressure calculation.
      Returns:
      the bubble point pressure in bara
    • getCO2PartialPressure

      public double getCO2PartialPressure()
      Gets the CO2 equilibrium partial pressure over the loaded solution.

      Runs a bubble point pressure flash and extracts the CO2 partial pressure from the vapor phase. This is the key quantity for amine absorber/stripper design.

      Returns:
      CO2 partial pressure in bara
    • getpH

      public double getpH()
      Gets the pH of the loaded amine solution.
      Returns:
      the pH value
    • getHeatOfAbsorptionCO2

      public double getHeatOfAbsorptionCO2()
      Gets the heat of absorption of CO2 at current conditions.
      Returns:
      heat of absorption in kJ/mol CO2 (negative for exothermic)
    • getHeatOfAbsorptionH2S

      public double getHeatOfAbsorptionH2S()
      Gets the heat of absorption of H2S at current conditions.
      Returns:
      heat of absorption in kJ/mol H2S (negative for exothermic)
    • getTotalHeatReleased

      public double getTotalHeatReleased()
      Gets the total heat released for the current CO2 loading.
      Returns:
      total heat in kJ per mol amine (positive = heat released)
    • getSystem

      public SystemInterface getSystem()
      Gets the underlying thermodynamic system.
      Returns:
      the SystemInterface, or null if not yet created
    • getAmineType

      public AmineSystem.AmineType getAmineType()
      Gets the amine type.
      Returns:
      the amine type
    • getHeatCalculator

      public AmineHeatOfAbsorption getHeatCalculator()
      Gets the heat of absorption calculator.
      Returns:
      the AmineHeatOfAbsorption instance
    • getAmineMolarMass

      private double getAmineMolarMass()
      Gets the molar mass of the primary amine.
      Returns:
      molar mass in g/mol
    • toString

      public String toString()
      Returns a formatted summary of the amine system properties.
      Overrides:
      toString in class Object
      Returns:
      multi-line string with system configuration and key properties