Class NelsonCurveAssessment

java.lang.Object
neqsim.process.corrosion.NelsonCurveAssessment
All Implemented Interfaces:
Serializable

public class NelsonCurveAssessment extends Object implements Serializable
Nelson curve assessment for high-temperature hydrogen attack (HTHA) per API 941.

The Nelson curves define the operating limits (temperature vs hydrogen partial pressure) below which various steels can safely operate without suffering high-temperature hydrogen attack. HTHA occurs when dissolved hydrogen reacts with carbon in the steel to form methane (CH4) at grain boundaries, causing irreversible internal decarburisation, fissuring, and loss of mechanical properties.

Mechanism

At elevated temperatures (>200°C), molecular hydrogen dissociates on the steel surface and diffuses into the metal as atomic hydrogen. It then reacts with iron carbide (Fe3C):

Fe3C + 4H → 3Fe + CH4

The methane molecules are too large to diffuse out and accumulate at grain boundaries, creating internal pressure that leads to fissuring and blistering. This process is irreversible — once HTHA occurs, the steel must be replaced.

Material Categories

Higher alloy content (Cr, Mo, V) stabilises carbides against hydrogen attack, shifting the Nelson curve to higher temperatures and pressures:

Material categories for Nelson curve assessment
MaterialTypical Max Temp at 100 psia H2Resistance
Carbon steel~220°CLowest
C-0.5Mo~300°CLow-moderate
1Cr-0.5Mo~400°CModerate
1.25Cr-0.5Mo~450°CGood
2.25Cr-1Mo~500°CVery good
Austenitic SS>550°CExcellent

Standards

  • API 941, 8th Edition (2016) — Steels for Hydrogen Service at Elevated Temperatures and Pressures in Petroleum Refineries and Petrochemical Plants
  • API RP 941 Annex A — Operating limit curves

Usage

NelsonCurveAssessment nelson = new NelsonCurveAssessment();
nelson.setTemperatureC(350.0);
nelson.setH2PartialPressureBar(20.0);
nelson.setMaterialType("carbon_steel");
nelson.evaluate();

boolean safe = nelson.isBelowNelsonCurve();
double maxTemp = nelson.getMaxAllowableTemperatureC();
double maxPressure = nelson.getMaxAllowableH2PressureBar();
Version:
1.0
Author:
ESOL
See Also:
  • Field Details

    • serialVersionUID

      private static final long serialVersionUID
      Serialization version UID.
      See Also:
    • CARBON_STEEL_CURVE

      private static final double[][] CARBON_STEEL_CURVE
      Carbon steel Nelson curve data points.

      Reference: API 941 Figure 1. Applicable to carbon steel (SA-106, SA-516-70, API 5L grades). Note: C-0.5Mo steel was historically shown as a separate curve above carbon steel but has been reclassified due to field failures. Use the carbon steel curve for C-0.5Mo unless extensive qualification testing is performed.

    • C_0_5MO_CURVE

      private static final double[][] C_0_5MO_CURVE
      C-0.5Mo steel Nelson curve data points.

      WARNING: API 941 8th edition notes significant field failures with C-0.5Mo. Use with caution — many operators now use the carbon steel curve for C-0.5Mo equipment.

    • CR1_0_5MO_CURVE

      private static final double[][] CR1_0_5MO_CURVE
      1Cr-0.5Mo steel Nelson curve data points.

      Reference: API 941 Figure 1. Applicable to F12, P12, and equivalent grades.

    • CR1_25_0_5MO_CURVE

      private static final double[][] CR1_25_0_5MO_CURVE
      1.25Cr-0.5Mo steel Nelson curve data points.

      Reference: API 941 Figure 1. Applicable to F11, P11, and equivalent grades.

    • CR2_25_1MO_CURVE

      private static final double[][] CR2_25_1MO_CURVE
      2.25Cr-1Mo steel Nelson curve data points.

      Reference: API 941 Figure 1. Applicable to F22, P22, and equivalent grades. Most common upgrade material for hydrogen service.

    • AUSTENITIC_SS_CURVE

      private static final double[][] AUSTENITIC_SS_CURVE
      Austenitic stainless steel Nelson curve data points.

      Austenitic stainless steels (304, 316, 321, 347) have significantly higher HTHA resistance due to low carbon activity and stable austenitic structure. The curve boundary is approximate — typically not the controlling limit in practice.

    • SUPPORTED_MATERIALS

      private static final List<String> SUPPORTED_MATERIALS
      Supported material type identifiers.
    • temperatureC

      private double temperatureC
      Operating temperature [°C].
    • h2PartialPressurePsia

      private double h2PartialPressurePsia
      Hydrogen partial pressure [psia].
    • materialType

      private String materialType
      Material type identifier.
    • belowNelsonCurve

      private boolean belowNelsonCurve
      Whether the operating point is below (safe side of) the Nelson curve.
    • maxAllowableTempC

      private double maxAllowableTempC
      Maximum allowable temperature at the given H2 partial pressure [°C].
    • maxAllowableH2PressureBar

      private double maxAllowableH2PressureBar
      Maximum allowable H2 partial pressure at the given temperature [bar].
    • temperatureMarginC

      private double temperatureMarginC
      Temperature margin above the Nelson curve [°C]. Negative = safe.
    • riskLevel

      private String riskLevel
      Risk level.
    • recommendedUpgrade

      private String recommendedUpgrade
      Recommended material upgrade if current material is insufficient.
    • evaluated

      private boolean evaluated
      Whether evaluation has been performed.
  • Constructor Details

    • NelsonCurveAssessment

      public NelsonCurveAssessment()
      Creates a new NelsonCurveAssessment with default parameters.
  • Method Details

    • setTemperatureC

      public void setTemperatureC(double tempC)
      Sets the operating temperature.
      Parameters:
      tempC - temperature in degrees Celsius
    • setH2PartialPressurePsia

      public void setH2PartialPressurePsia(double psia)
      Sets the hydrogen partial pressure in psia.
      Parameters:
      psia - H2 partial pressure in psia
    • setH2PartialPressureBar

      public void setH2PartialPressureBar(double bar)
      Sets the hydrogen partial pressure in bar and converts internally to psia.
      Parameters:
      bar - H2 partial pressure in bar
    • setMaterialType

      public void setMaterialType(String type)
      Sets the material type for Nelson curve lookup.

      Valid types: "carbon_steel", "c_0_5mo", "1cr_0_5mo", "1_25cr_0_5mo", "2_25cr_1mo", "austenitic_ss".

      Parameters:
      type - material type identifier
    • evaluate

      public void evaluate()
      Runs the Nelson curve assessment.

      Interpolates the applicable Nelson curve to determine whether the operating point is safe and calculates the temperature margin and maximum allowable conditions.

    • getCurveData

      private double[][] getCurveData()
      Returns the Nelson curve data for the configured material.
      Returns:
      2D array of {pressure_psia, max_temp_F} points
    • interpolateMaxTemp

      private double interpolateMaxTemp(double[][] curve, double pressurePsia)
      Interpolates the maximum allowable temperature at a given H2 partial pressure.
      Parameters:
      curve - Nelson curve data
      pressurePsia - H2 partial pressure [psia]
      Returns:
      maximum allowable temperature [°F]
    • interpolateMaxPressure

      private double interpolateMaxPressure(double[][] curve, double tempF)
      Interpolates the maximum allowable H2 partial pressure at a given temperature.
      Parameters:
      curve - Nelson curve data
      tempF - temperature [°F]
      Returns:
      maximum allowable H2 partial pressure [psia]
    • findMinimumUpgrade

      private String findMinimumUpgrade(double tempF, double pressurePsia)
      Finds the minimum material upgrade that would be acceptable at these conditions.
      Parameters:
      tempF - temperature [°F]
      pressurePsia - H2 partial pressure [psia]
      Returns:
      recommended material name, or empty if none found
    • isBelowNelsonCurve

      public boolean isBelowNelsonCurve()
      Checks whether the operating point is below the Nelson curve (safe).
      Returns:
      true if below the Nelson curve
    • getMaxAllowableTemperatureC

      public double getMaxAllowableTemperatureC()
      Gets the maximum allowable temperature at the given H2 partial pressure.
      Returns:
      maximum allowable temperature [°C]
    • getMaxAllowableH2PressureBar

      public double getMaxAllowableH2PressureBar()
      Gets the maximum allowable H2 partial pressure at the given temperature.
      Returns:
      maximum allowable H2 partial pressure [bar]
    • getTemperatureMarginC

      public double getTemperatureMarginC()
      Gets the temperature margin relative to the Nelson curve.

      Negative values mean the operating point is below (safe side of) the curve. Positive values mean the operating point exceeds the curve — material is at risk of HTHA.

      Returns:
      temperature margin [°C]
    • getRiskLevel

      public String getRiskLevel()
      Gets the risk level.
      Returns:
      risk level: "Low", "Medium", "High", or "Very High"
    • getRecommendedUpgrade

      public String getRecommendedUpgrade()
      Gets the recommended material upgrade.
      Returns:
      recommended upgrade material, or empty if current material is acceptable
    • getSupportedMaterialTypes

      public static List<String> getSupportedMaterialTypes()
      Gets the list of supported material types.
      Returns:
      list of material type identifiers
    • toMap

      public Map<String,Object> toMap()
      Returns the assessment results as a Map.
      Returns:
      results as linked hash map
    • toJson

      public String toJson()
      Returns the assessment results as a JSON string.
      Returns:
      JSON representation of the assessment