Class AmineSystem
- All Implemented Interfaces:
Serializable
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 | 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:
-
Nested Class Summary
Nested Classes -
Field Summary
FieldsModifier and TypeFieldDescriptionprivate static final Map<AmineSystem.AmineType, List<String>> Map of amine type to their required species (neutral amine, ions, carbamate).private doubleprivate AmineSystem.AmineTypeprivate doubleCommon ionic species required for all amine systems.private doubleprivate booleanprivate AmineHeatOfAbsorptionprivate boolean(package private) static org.apache.logging.log4j.LoggerLogger object for class.private doubleprivate doubleprivate static final longSerialization version UID.private SystemInterfaceprivate doubleprivate double -
Constructor Summary
ConstructorsConstructorDescriptionAmineSystem(AmineSystem.AmineType amineType) Creates an amine system with default conditions (40 C, 1.01325 bara).AmineSystem(AmineSystem.AmineType amineType, double temperatureK, double pressureBara) Creates an amine system at specified conditions. -
Method Summary
Modifier and TypeMethodDescriptiondoubleRuns a bubble point pressure calculation.private voidConfigures the AmineHeatOfAbsorption calculator for the current amine type.Creates and returns the configured thermodynamic system.private doubleGets the molar mass of the primary amine.Gets the amine type.doubleGets the CO2 equilibrium partial pressure over the loaded solution.Gets the heat of absorption calculator.doubleGets the heat of absorption of CO2 at current conditions.doubleGets the heat of absorption of H2S at current conditions.private doublegetInitialMolFraction(String componentName) Gets the initial mole fraction for a given component based on the system configuration.doublegetpH()Gets the pH of the loaded amine solution.Gets the underlying thermodynamic system.doubleGets the total heat released for the current CO2 loading.Runs a TP flash calculation on the system.voidsetAmineConcentration(double massFraction) Sets the amine concentration as mass fraction of the aqueous solution.voidsetCO2Loading(double loading) Sets the CO2 loading in moles CO2 per mole amine.voidsetH2SLoading(double loading) Sets the H2S loading in moles H2S per mole amine.voidsetPiperazineConcentration(double massFraction) Sets the piperazine concentration for aMDEA systems.toString()Returns a formatted summary of the amine system properties.
-
Field Details
-
serialVersionUID
private static final long serialVersionUIDSerialization version UID.- See Also:
-
logger
static org.apache.logging.log4j.Logger loggerLogger object for class. -
COMMON_IONS
-
AMINE_SPECIES
Map of amine type to their required species (neutral amine, ions, carbamate). -
system
-
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
-
-
Constructor Details
-
AmineSystem
Creates an amine system with default conditions (40 C, 1.01325 bara).- Parameters:
amineType- the type of amine to use
-
AmineSystem
Creates an amine system at specified conditions.- Parameters:
amineType- the type of amine to usetemperatureK- temperature in KelvinpressureBara- 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
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
SystemInterfaceready for flash calculations
-
getInitialMolFraction
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
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
Gets the underlying thermodynamic system.- Returns:
- the SystemInterface, or null if not yet created
-
getAmineType
-
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
-