Class CementDegradationModel
- All Implemented Interfaces:
Serializable, Runnable, ProcessEquipmentInterface, ProcessElementInterface, SimulationInterface, NamedInterface
Models the time-dependent degradation of wellbore cement exposed to CO2, which is critical for assessing long-term out-of-zone leakage risk in CCS projects.
The model tracks two key processes:
- Carbonation front advance: CO2 reacts with Ca(OH)2 and C-S-H in Portland cement, creating CaCO3. The front advances as d(t) = A * sqrt(D_eff * t), where D_eff is the effective CO2 diffusivity.
- Permeability evolution: Behind the carbonation front, the microstructure changes (initially densification, then degradation at high CO2 exposure), modifying the cement's permeability over time.
Cement Types
- PORTLAND: Standard Class G/H cement. Initial permeability ~0.001 mD, but can degrade to 0.01-1 mD under CO2 exposure over decades.
- SILICA_PORTLAND: Portland with silica flour, more CO2-resistant.
- CO2_RESISTANT: Specialty cements (calcium aluminate, geopolymer) designed for CCS applications.
Usage Example
CementDegradationModel cement = new CementDegradationModel("Production Casing Cement");
cement.setCementType(CementDegradationModel.CementType.PORTLAND);
cement.setInitialPermeability(0.001, "mD");
cement.setCementThickness(0.05, "m"); // 50 mm annular cement
cement.setCO2Conditions(50.0, 353.15); // 50 bar CO2 partial pressure, 80°C
// Get degradation after 30 years
double kDegraded = cement.getPermeabilityAtTime(30.0, "mD");
double carbonationDepth = cement.getDegradationDepth(30.0, "mm");
boolean compromised = cement.isCementCompromised(30.0);
System.out.println("Permeability at 30 years: " + kDegraded + " mD");
System.out.println("Carbonation depth: " + carbonationDepth + " mm");
System.out.println("Cement compromised: " + compromised);
- Version:
- 1.0
- Author:
- ESOL
- See Also:
-
Nested Class Summary
Nested ClassesModifier and TypeClassDescriptionstatic enumCement type classification. -
Field Summary
FieldsModifier and TypeFieldDescriptionprivate doubleprivate doubleprivate doubleprivate doubleprivate doubleprivate doubleprivate static final org.apache.logging.log4j.Loggerprivate static final longprivate doubleFields inherited from class ProcessEquipmentBaseClass
conditionAnalysisMessage, energyStream, hasController, isSolved, properties, reportFields inherited from class SimulationBaseClass
calcIdentifier, calculateSteadyState, timeFields inherited from class NamedBaseClass
name -
Constructor Summary
Constructors -
Method Summary
Modifier and TypeMethodDescriptionprivate voidApply default parameters based on cement type.doubleGet the cement thickness.Get the cement type.doublegetDegradationDepth(double years, String unit) Get the depth of the carbonation front at a given time.doublegetPermeabilityAtTime(double years, String unit) Get the cement permeability at a given time, accounting for degradation.private doubleCO2 partial pressure effect on carbonation rate foliowing a square root relationship.private doubleTemperature effect on carbonation rate, following Arrhenius-type behavior.doubleGet the estimated time until the cement is fully carbonated.booleanisCementCompromised(double years) Check if the cement is considered compromised at the given time.voidIn this method all thermodynamic and unit operations will be calculated in a steady state calculation.voidsetCementThickness(double thickness, String unit) Set cement sheath thickness.voidSet the cement type.voidsetCO2Conditions(double co2PartialPressureBar, double temperatureK) Set CO2 exposure conditions.voidsetDegradedPermeability(double permeability, String unit) Set the fully-degraded permeability (end-state when cement is fully carbonated).voidsetEffectiveDiffusivity(double diffusivity) Set effective CO2 diffusivity in cement.voidsetInitialPermeability(double permeability, String unit) Set initial cement permeability.private voidUpdate diffusivity based on current temperature.Methods inherited from class ProcessEquipmentBaseClass
addCapacityConstraint, addController, copy, displayResult, equals, getAvailableMargin, getAvailableMarginPercent, getBottleneckConstraint, getCapacityConstraints, getConditionAnalysisMessage, getConstraintEvaluationReport, getController, getController, getControllers, getEffectiveCapacityFactor, getEnergyStream, getEntropyProduction, getExergyChange, getFailureMode, getMassBalance, getMassBalance, getMaxUtilization, getMaxUtilizationPercent, getMechanicalDesign, getMinimumFlow, getPressure, getPressure, getProperty, getReferenceDesignation, getReport_json, getResultTable, getSpecification, getTemperature, getTemperature, getThermoSystem, getUtilizationSummary, hashCode, initElectricalDesign, initializeDefaultConstraints, initInstrumentDesign, initMechanicalDesign, isActive, isActive, isCapacityAnalysisEnabled, isCapacityExceeded, isFailed, isHardLimitExceeded, isNearCapacityLimit, isSetEnergyStream, reportResults, restoreFromFailure, run_step, runConditionAnalysis, setCapacityAnalysisEnabled, setController, setEnergyStream, setEnergyStream, setFailureMode, setFlowValveController, setMinimumFlow, setPressure, setReferenceDesignation, setRegulatorOutSignal, setSpecification, setTemperature, simulateDegradedOperation, simulateTrip, solved, toJson, toJsonMethods inherited from class SimulationBaseClass
getCalculateSteadyState, getCalculationIdentifier, getTime, increaseTime, isRunInSteps, setCalculateSteadyState, setCalculationIdentifier, setRunInSteps, setTimeMethods inherited from class NamedBaseClass
getName, getTagNumber, setName, setTagNumberMethods inherited from class Object
clone, finalize, getClass, notify, notifyAll, toString, wait, wait, waitMethods inherited from interface NamedInterface
getName, getTagName, getTagNumber, setName, setTagName, setTagNumberMethods inherited from interface ProcessEquipmentInterface
getCapacityDuty, getCapacityMax, getElectricalDesign, getEquipmentState, getExergyChange, getExergyDestruction, getExergyDestruction, getFluid, getInletStreams, getInstrumentDesign, getOperatingEnvelopeViolation, getOutletFlowRate, getOutletPressure, getOutletStreams, getOutletTemperature, getReferenceDesignationString, getRestCapacity, getSimulationValidationErrors, isSimulationValid, isWithinOperatingEnvelope, needRecalculation, validateSetupMethods inherited from interface SimulationInterface
getCalculateSteadyState, getCalculationIdentifier, getTime, increaseTime, isRunInSteps, run, run_step, runTransient, runTransient, setCalculateSteadyState, setCalculationIdentifier, setRunInSteps, setTime
-
Field Details
-
serialVersionUID
private static final long serialVersionUID- See Also:
-
logger
private static final org.apache.logging.log4j.Logger logger -
cementType
-
initialPermeability
private double initialPermeability -
degradedPermeability
private double degradedPermeability -
cementThickness
private double cementThickness -
co2PartialPressure
private double co2PartialPressure -
temperature
private double temperature -
effectiveDiffusivity
private double effectiveDiffusivity -
carbonationRateFactor
private double carbonationRateFactor
-
-
Constructor Details
-
CementDegradationModel
Creates a cement degradation model.- Parameters:
name- model name
-
-
Method Details
-
setCementType
Set the cement type. This adjusts default degradation parameters.- Parameters:
type- cement type
-
setInitialPermeability
Set initial cement permeability.- Parameters:
permeability- permeability valueunit- unit ("mD", "D", "m2")
-
setDegradedPermeability
Set the fully-degraded permeability (end-state when cement is fully carbonated).- Parameters:
permeability- degraded permeability valueunit- unit ("mD", "D")
-
setCementThickness
Set cement sheath thickness.- Parameters:
thickness- cement thicknessunit- thickness unit ("m", "mm", "in")
-
setCO2Conditions
public void setCO2Conditions(double co2PartialPressureBar, double temperatureK) Set CO2 exposure conditions.- Parameters:
co2PartialPressureBar- CO2 partial pressure (bar)temperatureK- temperature (K)
-
setEffectiveDiffusivity
public void setEffectiveDiffusivity(double diffusivity) Set effective CO2 diffusivity in cement.- Parameters:
diffusivity- diffusivity (m²/s), typically 1e-13 to 1e-11
-
getDegradationDepth
Get the depth of the carbonation front at a given time.The carbonation front advances as: d(t) = A * sqrt(D_eff * t), where A depends on cement chemistry, CO2 partial pressure, and temperature. The front cannot exceed total cement thickness.
- Parameters:
years- exposure time (years)unit- output unit ("m", "mm", "in")- Returns:
- carbonation front depth
-
getPermeabilityAtTime
Get the cement permeability at a given time, accounting for degradation.The permeability evolves as a weighted average between initial and degraded values based on the fraction of cement thickness that has been carbonated.
- Parameters:
years- exposure time (years)unit- output unit ("mD", "D")- Returns:
- permeability at the specified time
-
isCementCompromised
public boolean isCementCompromised(double years) Check if the cement is considered compromised at the given time.Cement is compromised when the carbonation front has penetrated through more than 80% of the sheath thickness, or when the effective permeability exceeds 0.1 mD.
- Parameters:
years- exposure time (years)- Returns:
- true if cement is compromised
-
getTimeToFullCarbonation
Get the estimated time until the cement is fully carbonated.- Parameters:
unit- time unit ("years", "days")- Returns:
- time to full carbonation
-
getCementType
-
getCementThickness
public double getCementThickness()Get the cement thickness.- Returns:
- cement thickness (m)
-
applyDefaultsForCementType
private void applyDefaultsForCementType()Apply default parameters based on cement type. -
getPressureFactor
private double getPressureFactor()CO2 partial pressure effect on carbonation rate foliowing a square root relationship.- Returns:
- pressure factor (dimensionless)
-
getTemperatureFactor
private double getTemperatureFactor()Temperature effect on carbonation rate, following Arrhenius-type behavior.- Returns:
- temperature factor (dimensionless)
-
updateDiffusivity
private void updateDiffusivity()Update diffusivity based on current temperature. -
run
In this method all thermodynamic and unit operations will be calculated in a steady state calculation.
- Parameters:
id- UUID
-