Skip to the content.

CO2CorrosionMaterialSelection

Package: neqsim.process.corrosion

Standards: NORSOK M-001, EFC 17, ISO 15156-3, DNV-RP-F112

Determines when carbon steel with inhibition or corrosion allowance is insufficient, and recommends the appropriate CRA grade based on CO2 corrosion rate, H2S content, chloride concentration, and temperature.

Material Hierarchy

The class evaluates materials in order of increasing cost:

Priority Material Relative Cost Typical Application
1 Carbon steel + corrosion inhibition 1.0× Sweet service, low rate, inhibition feasible
2 13Cr martensitic stainless steel 2.5× Sweet service, moderate CO2, low chloride
3 22Cr duplex stainless steel 4.0× Moderate sour, moderate chloride
4 25Cr super duplex stainless steel 5.5× High chloride, moderate sour, high temperature
5 Nickel alloy (Alloy 625 or C-276) 8.0× Severe sour + high chloride + high temperature

Selection Logic

Carbon Steel Viability

Carbon steel is viable when all of these are true:

CRA Selection Criteria

Material Conditions
13Cr Non-sour, temperature ≤ 150°C, chloride ≤ 50,000 mg/L
22Cr duplex Mild sour acceptable, temperature ≤ 200°C, chloride ≤ 120,000 mg/L
25Cr super duplex Temperature ≤ 230°C, chloride ≤ 200,000 mg/L
Nickel alloy Fallback when no other CRA qualifies

Quick Start

Java

import neqsim.process.corrosion.CO2CorrosionMaterialSelection;

CO2CorrosionMaterialSelection sel = new CO2CorrosionMaterialSelection();
sel.setCO2PartialPressureBar(5.0);
sel.setH2SPartialPressureBar(0.001);
sel.setCO2CorrosionRateMmyr(2.5);
sel.setTemperatureC(80.0);
sel.setChlorideConcentrationMgL(30000);
sel.setInhibitionFeasible(false);
sel.setDesignLifeYears(25);
sel.evaluate();

System.out.println("Material: " + sel.getSelectedMaterial());
System.out.println("CS Viable: " + sel.isCarbonSteelViable());
System.out.println("Cost Factor: " + sel.getRelativeCostFactor());
System.out.println("Rationale: " + sel.getSelectionRationale());

Python

from neqsim import jneqsim

CRASelection = jneqsim.process.corrosion.CO2CorrosionMaterialSelection

sel = CRASelection()
sel.setCO2PartialPressureBar(5.0)
sel.setH2SPartialPressureBar(0.001)
sel.setCO2CorrosionRateMmyr(2.5)
sel.setTemperatureC(80.0)
sel.setChlorideConcentrationMgL(30000)
sel.setInhibitionFeasible(False)
sel.setDesignLifeYears(25)
sel.evaluate()

print(f"Selected: {sel.getSelectedMaterial()}")
print(f"Cost factor: {sel.getRelativeCostFactor()}")

Input Parameters

Method Type Default Description
setCO2PartialPressureBar(double) double 0.0 CO2 partial pressure (bar)
setH2SPartialPressureBar(double) double 0.0 H2S partial pressure (bar)
setCO2CorrosionRateMmyr(double) double 0.0 Uninhibited CO2 corrosion rate (mm/yr)
setTemperatureC(double) double 60.0 Operating temperature (°C)
setChlorideConcentrationMgL(double) double 0.0 Chloride concentration (mg/L)
setInhibitionFeasible(boolean) boolean false Whether corrosion inhibition is practical
setInhibitorAvailability(double) double 0.9 Inhibitor availability factor (0–1)
setDesignLifeYears(double) double 25.0 Design life (years)
setInSituPH(double) double 5.0 In-situ pH

Output Methods

Method Return Type Description
getSelectedMaterial() String Recommended material grade
isCarbonSteelViable() boolean Whether CS + CA is acceptable
getCsCorrosionAllowanceMm() double Required corrosion allowance for CS (mm)
getRelativeCostFactor() double Relative cost vs carbon steel
getSelectionRationale() String Explanation of selection decision
toMap() Map All results as a LinkedHashMap
toJson() String Complete JSON report

Integration with NorsokM506CorrosionRate

Typical workflow: compute the corrosion rate first, then feed it to material selection:

NorsokM506CorrosionRate m506 = new NorsokM506CorrosionRate();
m506.setTemperatureCelsius(80.0);
m506.setTotalPressureBara(100.0);
m506.setCO2MoleFraction(0.03);
m506.calculate();

CO2CorrosionMaterialSelection sel = new CO2CorrosionMaterialSelection();
sel.setCO2CorrosionRateMmyr(m506.getCorrectedCorrosionRate());
sel.setH2SPartialPressureBar(0.001);
sel.setChlorideConcentrationMgL(30000);
sel.evaluate();