NorsokM001MaterialSelection
Package: neqsim.process.corrosion
Standards: NORSOK M-001, NACE MR0175 / ISO 15156
Material selection helper that recommends material grades for pipelines and process piping based on the corrosion environment. Integrates with NorsokM506CorrosionRate for CO2 corrosion rate input.
Evaluation Steps
The evaluate() method runs:
- Sour service classification — per NACE MR0175 / ISO 15156, based on H2S partial pressure
- Service category — sweet / sour / chloride / dry, considering free water
- Chloride SCC risk — pitting and stress corrosion cracking risk for stainless steels
- Material selection — recommended grade and alternatives based on all inputs
- Corrosion allowance — per NORSOK M-001 guidelines
Service Categories
| Category |
Conditions |
| Dry service (no free water) |
No free water present |
| Non-corrosive service |
No CO2 or H2S with free water |
| Sweet service (CO2 only) |
CO2 present, H2S < 0.003 bar |
| Sweet + chloride service |
CO2 + chlorides, H2S < 0.003 bar |
| Sour service |
H2S >= 0.003 bar |
| Sour + chloride service |
H2S >= 0.003 bar + chlorides |
Sour Classification (NACE MR0175)
| Classification |
H2S Partial Pressure |
| Non-sour |
< 0.003 bar (0.3 kPa) |
| Mild sour (SSC Region 0) |
0.003 – 0.01 bar |
| Moderate sour (SSC Region 1) |
0.01 – 0.1 bar |
| Severe sour (SSC Region 2/3) |
> 0.1 bar |
Material Selection Logic
Sweet Service (CO2 Only)
| CO2 Rate (mm/yr) |
Low Chloride |
High Chloride (> 1000 mg/L) |
| < 0.1 |
Carbon steel (CS) |
CS |
| 0.1 – 0.3 |
CS with increased CA |
CS with CA |
| 0.3 – 1.0 |
13Cr martensitic SS |
22Cr Duplex SS |
| > 1.0 |
22Cr Duplex SS |
25Cr Super Duplex SS |
Sour Service
| Severity |
Low Chloride |
High Chloride |
| Mild/moderate, low rate |
CS (HIC/SSC tested per ISO 15156-2) |
22Cr Duplex SS |
| Mild/moderate, high rate |
Super 13Cr (sour qualified) |
22Cr Duplex SS |
| Severe |
22Cr Duplex SS |
25Cr Super Duplex / Alloy C-276 |
Chloride SCC Risk
| Risk Level |
Conditions |
| Low |
Cl < 50 mg/L or T < 60 °C |
| Medium |
50–1000 mg/L Cl at 60–100 °C |
| High |
> 1000 mg/L Cl at T > 80 °C |
| Very High |
> 50,000 mg/L at elevated T |
Corrosion Allowance Rules
| Material |
CA Rule |
| Carbon steel |
max(1.0 mm, rate * design_life), capped at 6.0 mm |
| Carbon steel (sour) |
Additional 1.0 mm for localized attack |
| CRA (13Cr, duplex, etc.) |
0 mm — inherently resistant |
CA > 6.0 mm triggers a note recommending CRA for lifecycle cost benefit.
Constructor
NorsokM001MaterialSelection selector = new NorsokM001MaterialSelection();
| Method |
Default |
Description |
setCO2CorrosionRateMmyr(double) |
0.0 |
CO2 corrosion rate from M-506 or measured (mm/yr) |
setH2SPartialPressureBar(double) |
0.0 |
H2S partial pressure (bar) |
setDesignTemperatureC(double) |
60.0 |
Design temperature (°C) |
setMaxDesignTemperatureC(double) |
100.0 |
Max design temperature (°C) |
setChlorideConcentrationMgL(double) |
0.0 |
Chloride concentration (mg/L) |
setDesignLifeYears(double) |
25.0 |
Design life (years) |
setAqueousPH(double) |
4.5 |
pH of aqueous phase |
setCO2PartialPressureBar(double) |
0.0 |
CO2 partial pressure (bar) |
setFreeWaterPresent(boolean) |
true |
Free water presence |
Output Getters
Call evaluate() before accessing results.
| Method |
Type |
Description |
getServiceCategory() |
String |
Service classification |
getRecommendedMaterial() |
String |
Recommended material grade with UNS number |
getAlternativeMaterials() |
List<String> |
Alternative material options |
getRecommendedCorrosionAllowanceMm() |
double |
Corrosion allowance (mm) |
getMaterialMaxTemperatureC() |
double |
Max temperature for recommended material (°C) |
getSourClassification() |
String |
NACE MR0175 sour classification |
getChlorideSCCRisk() |
String |
SCC risk level |
getNotes() |
List<String> |
Warnings and notes |
JSON / Map Output
String json = selector.toJson();
Map<String, Object> map = selector.toMap();
Java Example
import neqsim.process.corrosion.NorsokM506CorrosionRate;
import neqsim.process.corrosion.NorsokM001MaterialSelection;
// Step 1: Calculate corrosion rate
NorsokM506CorrosionRate model = new NorsokM506CorrosionRate();
model.setTemperatureCelsius(80.0);
model.setTotalPressureBara(50.0);
model.setCO2MoleFraction(0.03);
model.setH2SMoleFraction(0.001);
model.setFlowVelocityMs(5.0);
model.setPipeDiameterM(0.254);
model.calculate();
// Step 2: Select material
NorsokM001MaterialSelection selector = new NorsokM001MaterialSelection();
selector.setCO2CorrosionRateMmyr(model.getCorrectedCorrosionRate());
selector.setH2SPartialPressureBar(model.getH2SPartialPressureBar());
selector.setCO2PartialPressureBar(model.getCO2PartialPressureBar());
selector.setDesignTemperatureC(80.0);
selector.setMaxDesignTemperatureC(80.0);
selector.setChlorideConcentrationMgL(5000);
selector.setDesignLifeYears(25);
selector.evaluate();
System.out.println("Material: " + selector.getRecommendedMaterial());
System.out.println("Service: " + selector.getServiceCategory());
System.out.println("Sour: " + selector.getSourClassification());
System.out.println("SCC risk: " + selector.getChlorideSCCRisk());
System.out.println("CA: " + selector.getRecommendedCorrosionAllowanceMm() + " mm");
for (String note : selector.getNotes()) {
System.out.println(" - " + note);
}
Python Example
from neqsim import jneqsim
NorsokM506 = jneqsim.process.corrosion.NorsokM506CorrosionRate
NorsokM001 = jneqsim.process.corrosion.NorsokM001MaterialSelection
# Calculate corrosion rate
model = NorsokM506()
model.setTemperatureCelsius(80.0)
model.setTotalPressureBara(50.0)
model.setCO2MoleFraction(0.03)
model.setH2SMoleFraction(0.001)
model.setFlowVelocityMs(5.0)
model.setPipeDiameterM(0.254)
model.calculate()
# Select material
selector = NorsokM001()
selector.setCO2CorrosionRateMmyr(model.getCorrectedCorrosionRate())
selector.setH2SPartialPressureBar(model.getH2SPartialPressureBar())
selector.setDesignTemperatureC(80.0)
selector.setChlorideConcentrationMgL(5000)
selector.setDesignLifeYears(25)
selector.evaluate()
print(f"Material: {selector.getRecommendedMaterial()}")
print(f"Service: {selector.getServiceCategory()}")
print(f"CA: {selector.getRecommendedCorrosionAllowanceMm():.1f} mm")