Class CementDegradationModel

All Implemented Interfaces:
Serializable, Runnable, ProcessEquipmentInterface, ProcessElementInterface, SimulationInterface, NamedInterface

public class CementDegradationModel extends ProcessEquipmentBaseClass
Cement degradation model for CO2 injection wells.

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:
  • 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

      public CementDegradationModel(String name)
      Creates a cement degradation model.
      Parameters:
      name - model name
  • Method Details

    • setCementType

      public void setCementType(CementDegradationModel.CementType type)
      Set the cement type. This adjusts default degradation parameters.
      Parameters:
      type - cement type
    • setInitialPermeability

      public void setInitialPermeability(double permeability, String unit)
      Set initial cement permeability.
      Parameters:
      permeability - permeability value
      unit - unit ("mD", "D", "m2")
    • setDegradedPermeability

      public void setDegradedPermeability(double permeability, String unit)
      Set the fully-degraded permeability (end-state when cement is fully carbonated).
      Parameters:
      permeability - degraded permeability value
      unit - unit ("mD", "D")
    • setCementThickness

      public void setCementThickness(double thickness, String unit)
      Set cement sheath thickness.
      Parameters:
      thickness - cement thickness
      unit - 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

      public double getDegradationDepth(double years, String unit)
      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

      public double getPermeabilityAtTime(double years, String unit)
      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

      public double getTimeToFullCarbonation(String unit)
      Get the estimated time until the cement is fully carbonated.
      Parameters:
      unit - time unit ("years", "days")
      Returns:
      time to full carbonation
    • getCementType

      public CementDegradationModel.CementType getCementType()
      Get the cement type.
      Returns:
      cement type
    • 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

      public void run(UUID id)

      In this method all thermodynamic and unit operations will be calculated in a steady state calculation.

      Parameters:
      id - UUID