neqsim-flow-accelerated-corrosion · v1.0.0 · 2026-08-07 · sha256 204bec3c1879f91c

neqsim-flow-accelerated-corrosion v1.0.0A

Immutable. This exact content is served forever at /api/v1/blob/204bec3c1879f91c.

---
name: neqsim-flow-accelerated-corrosion
version: "1.0.0"
description: "Flow-accelerated corrosion (FAC) and high-temperature pH in closed heating- and cooling-medium loops — magnetite film stability, mass-transfer-controlled wall thinning at bends and welds, wall shear stress, in-situ pH at operating temperature versus laboratory pH, alkaline margin above neutrality, and Cr-Mo material upgrade screening. USE WHEN: a task involves localised wall thinning or leaks at bends, elbows or circumferential welds in carbon-steel tubing; a closed glycol/water or water heating-medium, cooling-medium, boiler-feedwater or condensate loop; a WHRU, steam generator or economiser tube bundle; pH control of an amine-buffered loop; or any question of the form 'is the fluid alkaline enough at operating temperature?'. Anchors on neqsim.process.corrosion."
last_verified: "2026-08-07"
requires:
  java_packages: [neqsim.process.corrosion, neqsim.process.chemistry.rca]
---

# NeqSim Flow-Accelerated Corrosion and High-Temperature pH Skill

Screening for **flow-accelerated corrosion (FAC)** — dissolution of the protective
magnetite film under mass-transfer control — and for the **in-situ pH** that
governs it.

## When this skill applies

- Localised wall thinning or leaks at **bends, elbows or circumferential welds**
  in carbon-steel tube bundles, with intact surfaces nearby.
- Closed **heating- or cooling-medium loops** (glycol/water or water),
  boiler-feedwater, condensate, WHRU / economiser / steam-generator tubes.
- Operating temperature roughly **90–250 °C**, peaking near 150 °C.
- Questions about **pH control** of an amine-buffered loop, or whether measured
  chemistry is adequate.

## Two mistakes to avoid before anything else

**1. Do not judge a hot system by its laboratory pH.**

Laboratory pH is measured on a cooled sample, typically at 20–25 °C. Corrosion
happens at 150 °C. Two things move, by different amounts:

- The amine pK$_a$ falls, so the buffered fluid becomes less alkaline.
- **Neutrality itself falls**: neutral water is pH 7.00 at 25 °C but about
  **pH 5.85 at 150 °C**.

So the meaningful quantity is the **alkaline margin**, $\text{pH}(T) - \text{pH}_{neutral}(T)$,
not the raw pH. Use [`AmineBufferedPH`](../../../src/main/java/neqsim/process/corrosion/AmineBufferedPH.java).

**2. Do not confuse FAC with erosion-corrosion.** They occur at the same
locations and need *different* mitigation:

| | FAC | Erosion-corrosion |
|---|---|---|
| Mechanism | Electrochemical dissolution, mass-transfer limited | Mechanical removal by particles/cavitation |
| Surface | Smooth, wavy, scalloped | Directional grooves, impingement craters |
| Fix | Chemistry, temperature, Cr alloying | Remove particles / impingement |

`RootCauseAnalyser` now raises both as separate candidates.

## Workflow

### 1. Get fluid properties from the actual fluid

Do not use water tables — glycol changes density and viscosity substantially,
and viscosity roughly halves between 100 °C and 150 °C, which nearly doubles
the Reynolds number at constant velocity.

```java
SystemInterface f = new SystemSrkCPAstatoil(273.15 + 150.0, 19.6);
f.addComponent("TEG", 45.0, "kg/sec");
f.addComponent("water", 55.0, "kg/sec");
f.setMixingRule(10);
new ThermodynamicOperations(f).TPflash();
f.initProperties();
double rho = f.getDensity("kg/m3");
double mu = f.getViscosity("cP");
```

### 2. Convert laboratory pH to in-situ pH

```java
AmineBufferedPHResult ph = new AmineBufferedPH()
    .setAmine(BufferAmine.DEA)
    .setMeasuredPH(8.7, 20.0)        // lab value and lab temperature
    .setOperatingTemperature(150.0)
    .setGlycolMassFraction(0.45)     // records a warning; not corrected
    .calculate();

ph.getOperatingPH();          // in-situ pH at 150 C
ph.getMarginAtOperating();    // the number that matters
ph.getVerdict();              // ROBUST / ADEQUATE / MARGINAL / INSUFFICIENT
```

### 3. Rank the FAC contributors

```java
FlowAcceleratedCorrosionResult fac = new FlowAcceleratedCorrosion()
    .setFlow(2.66, 0.025)
    .setFluidProperties(rho, mu)
    .setTemperature(150.0)
    .setInSituPH(ph.getOperatingPH())     // in-situ, never the lab value
    .setGeometry(FacGeometry.WELD_AT_BEND)
    .setChromiumContent(0.02)             // carbon steel; P11 is 1.25
    .calculate();

fac.getDominantFactor();       // which lever actually controls the outcome
fac.getWallShearStressPa();
fac.ratioTo(otherCase);        // quantify a proposed change
```

The index is **for comparison only** — ratios between cases are meaningful, the
absolute value is not a wall-loss rate.

## Things worth checking that investigations routinely miss

| Check | Why |
|---|---|
| **Express a velocity exceedance as shear** | $\tau \propto v^{1.75}$, so a 3 % velocity overshoot is a ~13 % shear overshoot. A "3 %" framing makes a real exceedance look like noise |
| **Correlate damage with the hot end** | Re rises ~70 % from 100 → 150 °C at constant velocity, and 150 °C is the solubility peak. Damage should concentrate at the outlet end — a cheap, testable prediction |
| **Check the filter micron rating** | Magnetite fines are 1–10 µm. An 80 µm element removes essentially none of them. "Improve filtration" must carry a rating |
| **Check the boiling margin** | Compute the bubble point; if bulk boiling is impossible, that hypothesis is closed off |
| **Flow reduction is not free** | Cutting flow to reduce shear reduces recovered duty, and at fixed duty raises metal temperature *towards* the 150 °C peak. Quantify the trade-off rather than asserting it |

## Material upgrade

About 1 % Cr gives roughly an order-of-magnitude improvement. NORSOK M-001
specifies **ASTM A335 P11** for WHRU heat-exchanger tubes; API RP 571 and API RP
661 both point to low-alloy Cr-Mo steel for FAC-prone service. If plain carbon
steel is installed where a standard specifies P11, that is a compliance finding,
not just an observation — check it explicitly with `neqsim-standards-lookup`.

## Reporting

`results.json` should carry: `in_situ_pH`, `alkaline_margin`, `wall_shear_stress_Pa`,
`fac_index_ratio` for each case compared, `dominant_factor`, and every entry of
`getWarnings()` in the assumptions/gaps register. Declare the ideal-solution
basis of the pH shift and the comparison-only nature of the FAC index.

## Related skills

- `neqsim-flow-assurance` — CO2/H2S corrosion in production systems (a *different* mechanism; NORSOK M-506 does not apply to a CO2-free closed loop)
- `neqsim-root-cause-analysis` — ranking FAC against other candidates
- `neqsim-standards-lookup` — NORSOK M-001, API RP 571 §3.9, API RP 669, API RP 661
- `neqsim-self-heating-ignition` — the same Arrhenius framework applied to glycol oxidative degradation, which generates the organic acids that consume alkalinity