Best for
- SMR fired reformer, ATR, and POX plant flowsheets with WGS + PSA
- Oxygen-to-carbon and steam-to-carbon envelope screening
- Reformer furnace heat-balance and tube-wall checks
equinor/neqsim/.github/skills/neqsim-hydrogen-production/SKILL.md
Hydrogen production routes (SMR/ATR/POX, blue-H2 WGS/capture/compression chains, electrolysis, ammonia cracking) with NeqSim. USE WHEN: modeling fired SMR reformers, ATR and POX syngas generators, water-gas shift, pressure-swing adsorption (PSA), CO2 capture/compression/export placeholders, H2 drying/compression/export, water electrolyzers (PEM/Alkaline/SOEC/AEM), stack I-V curves, hydrogen plant cost estimation, para/ortho hydrogen conversion, catalyst deactivation, or blue/green H2 flowsheets.
Decision brief
Guide for modeling hydrogen production routes — steam methane reforming (SMR), autothermal reforming (ATR), partial oxidation (POX), PSA purification (blue H2), and water electrolysis (green/pink H2). Companion to neqsim-ccs-hydrogen (transport/storage/blending) and neqsim-react…
Compatibility matrix
| Platform | Status | Evidence | What to check |
|---|---|---|---|
| Codex | Not declared | No explicit evidence | Portability before use |
| Claude Code | Not declared | No explicit evidence | Portability before use |
| Cursor | Not declared | No explicit evidence | Portability before use |
| Gemini CLI | Not declared | No explicit evidence | Portability before use |
Installation
The source command is displayed only when detected. A safe inspection prompt is always available so your agent can explain every action before execution.
npx skills add https://github.com/equinor/neqsim --skill ".github/skills/neqsim-hydrogen-production"Inspect the Agent Skill "neqsim-hydrogen-production" from https://github.com/equinor/neqsim/blob/9e4e36d4b6a59404ac9aa629740fbc312610d3c8/.github/skills/neqsim-hydrogen-production/SKILL.md at commit 9e4e36d4b6a59404ac9aa629740fbc312610d3c8. List every install step, command, network request, credential, file read/write, external action, and rollback step. Explain whether it fits my task. Do not install or execute anything until I approve.
Workflow
Review the “Tests for verification” section in the pinned source before continuing.
SMR fired reformer, ATR, and POX plant flowsheets with WGS + PSA
Review the “Applicable Standards” section in the pinned source before continuing.
Review the “Core Classes (Thermochemical route templates)” section in the pinned source before continuing.
Review the “Thermochemical maturity map” section in the pinned source before continuing.
Permission review
No configured static risk pattern was detected
This is not proof of safety. Runtime behavior, indirect dependencies, and hidden external systems are outside the static scan.
Evidence record
| Signal | Value | Evidence type | Meaning |
|---|---|---|---|
| Quality score | 91/100 | Computed | Documentation, specificity, maintenance, and trust rules |
| Repository stars | 147 | Source | Repository attention, not individual Skill quality |
| Compatibility | 0 platforms | Source | Declared in the catalog source record |
| Usage guide | automated source guide | Editorial | Generated or reviewed according to the visible evidence level |
Pinned source
Guide for modeling hydrogen production routes — steam methane reforming (SMR),
autothermal reforming (ATR), partial oxidation (POX), PSA purification (blue
H2), and water electrolysis (green/pink H2). Companion to
neqsim-ccs-hydrogen (transport/storage/blending) and neqsim-reaction-engineering
(reformer kinetics).
| Standard | Scope |
|---|---|
| ISO 14687 | Hydrogen fuel quality (PEM-FC grade ≥ 99.97% H₂) |
| ISO 22734 | Industrial water electrolyzers — safety |
| IEC 62282 | Fuel cell technologies (electrochemistry conventions) |
| API 941 | Steels for H₂ service (Nelson curves) |
| ASME B31.12 | Hydrogen piping and pipelines |
| EIGA Doc 121 | H₂ generator design (SMR/electrolysis) |
| IRENA 2022 | Green H₂ cost benchmarks |
| IEA Global H₂ Review 2023 | Capacity factors, USD/kW benchmarks |
| Class | Package | Purpose |
|---|---|---|
CatalyticTubeReformer | neqsim.process.equipment.reactor | Tube-side SMR equilibrium model with duty, pressure-drop, tube-wall, heat-flux, and catalyst-activity screening |
ReformerFurnace | neqsim.process.equipment.reactor | Fired SMR furnace coupling FurnaceBurner combustion heat to reformer-tube duty |
SyngasBurnerZone | neqsim.process.equipment.reactor | Oxygen-blown ATR/POX burner-zone model with O2/C envelope and flame-temperature screening |
AutothermalReformer | neqsim.process.equipment.reactor | ATR template with O2/C and S/C controls, burner zone, catalytic equilibrium zone, and soot-risk metric |
PartialOxidationReactor | neqsim.process.equipment.reactor | POX template with O2/C control, refractory warning, fast quench, and H2/CO output |
QuenchSection | neqsim.process.equipment.reactor | Rapid syngas cooling model with heat-removed and quench-severity outputs |
WaterGasShiftReactor | neqsim.process.equipment.reactor | HT/LT WGS equilibrium wrapper with CO conversion, H2 gain, CO2 formation, duty, and WGS ratio reporting |
ComponentCaptureUnit | neqsim.process.equipment.splitter | Selective component-capture placeholder for CO2 capture, H2 drying, and other screening separations |
SMRHydrogenPlantBuilder | neqsim.process.hydrogen | Screening plant builder for methane/steam feed, fired reformer, and optional PSA |
ATRHydrogenPlantBuilder | neqsim.process.hydrogen | Screening plant builder for methane/steam/oxygen feed, ATR, and optional PSA |
POXHydrogenPlantBuilder | neqsim.process.hydrogen | Screening plant builder for POX syngas or hydrogen studies with optional PSA |
BlueHydrogenPlantBuilder | neqsim.process.hydrogen | Full screening chain for SMR + HT/LT WGS + CO2 capture/compression + PSA + H2 drying/compression + carbon intensity |
| Technology | Implemented NeqSim pattern | Maturity | Remaining high-fidelity scope |
|---|---|---|---|
| Steam methane reforming (SMR) | ReformerFurnace + CatalyticTubeReformer + FurnaceBurner | 4/5 | Detailed radiant-box view factors, burner CFD, tube metallurgy/vendor rating |
| Autothermal reforming (ATR) | AutothermalReformer with SyngasBurnerZone + catalytic GibbsReactor | 4/5 | Burner aerodynamics, oxygen-mixing CFD, rate-based catalyst bed calibration |
| Partial oxidation (POX) | PartialOxidationReactor + SyngasBurnerZone + QuenchSection | 3/5 | Fast-quench kinetics, refractory thermal model, soot/coke kinetics |
| Class | Package | Purpose |
|---|---|---|
PressureSwingAdsorptionBed | neqsim.process.equipment.adsorber | H₂-tuned single PSA bed (AC or Zeolite 13X) |
AdsorptionCycleController | neqsim.process.equipment.adsorber | Multi-bed Skarstrom-style cycling (pre-existing) |
Electrolyzer | neqsim.process.equipment.electrolyzer | Stack model with technology defaults and Faradaic efficiency |
ElectrolyzerTechnology | same | Enum PEM / ALKALINE / SOEC / AEM with default voltage, current density, T, P, η_F |
ElectrolyzerIVCharacteristic | same | Tafel + ohmic voltage model; tech-specific defaults |
ElectrolyzerCostEstimate | neqsim.process.costestimation.electrolyzer | Specific-CAPEX × scale-factor × CEPCI |
| Class | Package | Purpose |
|---|---|---|
PSACascade | neqsim.process.equipment.adsorber | Multi-bed Skarstrom cascade (2/4/6/8/10/12 beds) with recovery uplift from pressure equalisation |
PSACostEstimate | neqsim.process.costestimation.adsorber | Per-bed vessel + valve skid + sorbent inventory × CEPCI |
| Class | Package | Purpose |
|---|---|---|
ParaOrthoH2Correction | neqsim.thermo.util.hydrogen | Equilibrium para fraction, normal-to-equilibrium heat release, Cp correction, thermal-conductivity factor, conversion time |
CatalystDeactivationKinetics | neqsim.process.equipment.reactor | First-order activity decay for sulfur/chloride poisoning, coking, and thermal sintering |
Use the route builders when a task needs a runnable screening flowsheet quickly. They create feeds with correct trace syngas products, set SRK + classic mixing, wire the reactor model, and optionally add a PSA cascade.
ProcessSystem smr = new SMRHydrogenPlantBuilder().setName("SMR screening")
.setMethaneFeedMolePerSec(100.0)
.setSteamToCarbonRatio(3.0)
.setIncludePsa(true)
.build();
smr.run();
ReformerFurnace furnace =
(ReformerFurnace) smr.getUnit("SMR screening reformer furnace");
double dutyKW = furnace.getTubeHeatDemandKW();
double heatBalance = furnace.getHeatBalanceRatio();
ProcessSystem atr = new ATRHydrogenPlantBuilder().setName("ATR screening")
.setMethaneFeedMolePerSec(100.0)
.setSteamToCarbonRatio(1.5)
.setOxygenToCarbonRatio(0.60)
.setIncludePsa(true)
.build();
atr.run();
ProcessSystem pox = new POXHydrogenPlantBuilder().setName("POX screening")
.setMethaneFeedMolePerSec(100.0)
.setOxygenToCarbonRatio(0.55)
.setSteamToCarbonRatio(0.20)
.build();
pox.run();
Key route outputs:
ReformerFurnace: getSyngasOutStream(), getFlueGasOutStream(),
getTubeHeatDemandKW(), getAvailableRadiantHeatKW(), getHeatBalanceRatio().CatalyticTubeReformer: getMethaneConversion(), getHeatDuty("kW"),
getTubeWallTemperature(), isTubeWallTemperatureAcceptable().AutothermalReformer: getOxygenToCarbonRatio(), getSteamToCarbonRatio(),
getMethaneConversion(), getSootRiskIndex(), getBurnerZone().PartialOxidationReactor: getHydrogenToCarbonMonoxideRatio(),
getRefractoryWarning(), getQuenchSection(), getSootRiskIndex().getResults() and toJson() for agent reports.BlueHydrogenPlantBuilder builder = new BlueHydrogenPlantBuilder()
.setName("Blue H2 screening")
.setMethaneFeedMolePerSec(100.0)
.setSteamToCarbonRatio(3.0)
.setCo2CaptureFraction(0.90)
.setCo2ExportPressure(110.0)
.setH2ExportPressure(100.0)
.setIncludePsa(true);
ProcessSystem process = builder.build();
process.run();
double h2KgPerHr = builder.getHydrogenProductMassFlowKgPerHour();
double capturedCo2KgPerHr = builder.getCapturedCo2MassFlowKgPerHour();
double residualIntensity = builder.getCarbonIntensityKgCO2PerKgH2();
double grossIntensity = builder.getGrossCarbonIntensityKgCO2PerKgH2();
String resultsJson = builder.toJson();
Notes
WaterGasShiftReactor treats methane, nitrogen, and oxygen as inert and
reports CO conversion, H2 gain, CO2 formation, heat duty, and WGS ratio.ComponentCaptureUnit is a screening placeholder. Use it for CO2 capture and
H2 drying when detailed amine, membrane, or molecular-sieve packages are not
yet available.PressureSwingAdsorptionBed psa = new PressureSwingAdsorptionBed("PSA", koVap);
psa.setSorbent(PressureSwingAdsorptionBed.SorbentType.ACTIVATED_CARBON);
psa.setRecoveryTarget(0.88);
psa.run();
double purityH2 = psa.getH2Purity();
double recoveryH2 = psa.getH2Recovery();
double[] tailComp = psa.getTailGasComposition();
Use the standalone PSA block when a shifted syngas stream is already available from a custom flowsheet.
// Water feed to the stack — molar flow sets the H₂ production target.
SystemInterface water = new Fluid().create("water");
Stream feed = new Stream("water", water);
feed.setFlowRate(100.0, "mole/sec"); // ~10 kg H₂/hr at η_F = 1
feed.setTemperature(298.15, "K");
feed.setPressure(1.0, "bara");
feed.run();
Electrolyzer el = new Electrolyzer("PEM stack", feed);
el.setTechnology(ElectrolyzerTechnology.PEM); // applies V/j/T/P/η_F defaults
el.setIVCharacteristic(new ElectrolyzerIVCharacteristic(ElectrolyzerTechnology.PEM));
el.run();
double power_kW = el.getStackPower();
double sec = el.getSpecificEnergyConsumption_kWh_per_kg_H2();
double V_cell = el.getCellVoltage(); // recomputed from I-V at run time
Technology selector
| Tech | V_cell | j (A/cm²) | T (°C) | P (bara) | η_F | Specific energy (kWh/kg) |
|---|---|---|---|---|---|---|
| PEM | 1.80 | 2.0 | 80 | 30 | 0.65 | ~45–55 |
| ALKALINE | 1.85 | 0.4 | 80 | 7 | 0.62 | ~50–60 |
| SOEC | 1.30 | 1.0 | 800 | 1 | 0.85 | ~35–40 (HHV) |
| AEM | 1.85 | 0.8 | 60 | 10 | 0.60 | ~55–65 |
Sources: IRENA 2022 Hydrogen Decarbonisation Pathways; Buttler & Spliethoff RSER 82 (2018); IEA Global H₂ Review 2023.
I-V curve internals
getCellVoltage(j, T_K) = E_rev(T) + A · log10(j / j0) + R · j
E_rev(T) = 1.229 V + (-0.85 mV/K) · (T - 298.15) (Larminie & Dicks)A, exchange current j0, ASR R are technology defaultsj0 the model returns E_rev (no spurious negative overpotential)PSACascade cascade = new PSACascade("H2-PSA", koVap);
cascade.setConfiguration(PSACascade.CascadeConfiguration.BEDS_6); // 6 beds, 2 PEQ
cascade.setSorbent(PressureSwingAdsorptionBed.SorbentType.ACTIVATED_CARBON);
cascade.setPerBedRecoveryTarget(0.82); // single-bed equilibrium recovery
cascade.setCycleTime(300.0); // seconds per bed cycle
cascade.run();
double purity = cascade.getH2Purity(); // > 99.9 %
double recovery = cascade.getH2Recovery(); // single-bed + cascade uplift
Stream tail = cascade.getTailGasStream(); // for SMR fuel-gas balance
Cascade uplift table (pressure equalisation steps → recovery gain over a single bed):
| Configuration | Beds | Equalisations | Uplift |
|---|---|---|---|
BEDS_2 | 2 | 0 | +0.00 |
BEDS_4 | 4 | 1 | +0.05 |
BEDS_6 | 6 | 2 | +0.08 |
BEDS_8 | 8 | 3 | +0.10 |
BEDS_10 | 10 | 4 | +0.11 |
BEDS_12 | 12 | 5 | +0.12 |
Total cascade recovery is capped at 0.93 (industrial benchmark for H₂ PSA on shifted syngas).
PSACostEstimate cost = new PSACostEstimate(cascade); // derives N_beds, sorbent, mass
cost.calculateCostEstimate();
double usd = cost.getPurchasedEquipmentCost();
setIncludeBalanceOfPlant(false)) removes ~25 % for vessel-only quotes.CostEstimationCalculator.getCurrentCepci()/800.double para20K = ParaOrthoH2Correction.getEquilibriumParaFraction(20.0);
double heatJPerKg = ParaOrthoH2Correction.getNormalToEquilibriumHeatJPerKg(20.0);
double cpCorrection = ParaOrthoH2Correction.getCpCorrectionJPerKgK(40.0);
double conductivityFactor = ParaOrthoH2Correction.getThermalConductivityCorrectionFactor(20.0);
double tauSeconds = ParaOrthoH2Correction.estimateEquilibrationTimeSeconds(
77.0, ParaOrthoH2Correction.ConversionCatalyst.HYDROUS_FERRIC_OXIDE);
getNormalToEquilibriumHeatJPerKg(T) returns positive exothermic heat release.getCpCorrectionJPerKgK(T) is equilibrium minus frozen-normal rotational heat capacity.CatalystBed bed = new CatalystBed();
CatalystDeactivationKinetics kinetics = new CatalystDeactivationKinetics(
CatalystDeactivationKinetics.CatalystFamily.NICKEL_REFORMING)
.setTemperature(973.15)
.setSulfurPpmv(0.05)
.setCarbonPotential(0.5)
.setSteamToCarbonRatio(2.5)
.setOperationHours(8000.0);
double activity = kinetics.applyTo(bed);
double timeTo80 = kinetics.estimateTimeToActivity(0.80);
String mechanism = kinetics.getDominantMechanism();
NICKEL_REFORMING, IRON_CHROMIUM_HT_SHIFT, COPPER_ZINC_LT_SHIFT,
RUTHENIUM_AMMONIA_CRACKING.el.initMechanicalDesign();
ElectrolyzerMechanicalDesign mech =
(ElectrolyzerMechanicalDesign) el.getMechanicalDesign();
mech.calcDesign(); // populates totalPowerKW
ElectrolyzerCostEstimate cost = new ElectrolyzerCostEstimate(mech);
cost.setTechnology("PEM");
double usd = cost.getPurchasedEquipmentCost();
setIncludeBalanceOfPlant(false) strips ~35% for stack-only quotes.| Color | Route | NeqSim primitives |
|---|---|---|
| Grey | SMR no CCS | GibbsReactor + WGS + PressureSwingAdsorptionBed |
| Blue | SMR/ATR + CCS | Add CO₂ capture (amine/MEA) → see neqsim-ccs-hydrogen |
| Green | Renewable electrolysis | Electrolyzer with PEM/Alkaline + renewable power feed |
| Pink | Nuclear electrolysis | Same Electrolyzer, accounting differs |
| Turquoise | Methane pyrolysis | Not yet — Horizon 2 |
ReformerFurnace, AutothermalReformer, and
PartialOxidationReactor are route-screening models, not vendor reactor
designs. Use them for heat balance, O2/C and S/C envelopes, soot/refractory
warnings, and handoff to WGS/PSA/CO2 capture. Use vendor data or detailed CFD
for radiant-box, burner, and tube-rating guarantees.HydrogenProductionUtils.ensureSyngasComponents()
add hydrogen, CO, and CO2 at trace levels.PressureSwingAdsorptionBed.run() mass balance: product purity is computed
from feedH2 × recovery ÷ remaining light gases. Always set the recovery target
before run(); default is 0.85.ElectrolyzerTechnology is set, the legacy
fixed-voltage path (V = 1.23 V, η_F = 1.0) stays active for backward compatibility.getSpecificEnergyConsumption_kWh_per_kg_H2() is
stackPower_kW / (n_H2 · MW_H2 · 3600). Below ~33 kWh/kg means the model is
predicting >100% LHV efficiency — recheck inputs.mech.calcDesign() before construction so
totalPowerKW > 0.ParaOrthoH2Correction is a screening correction, not a
complete liquefaction process model.CatalystDeactivationKinetics default coefficients are
order-of-magnitude values. Tune them to vendor or historian data for plant-specific forecasts.| Test | Coverage |
|---|---|
PressureSwingAdsorptionBedTest | Defaults, recovery cap, mass balance, composition, sorbent switch |
PSACascadeTest | Cascade uplift, bed-count monotonicity, 0.93 cap, tail-gas mass balance |
PSACostEstimateTest | Bed-count linearity, sorbent ordering, BoP toggle, order of magnitude |
ParaOrthoH2CorrectionTest | Para equilibrium limits, conversion heat, Cp correction, conductivity factor, catalyst time ranking |
CatalystDeactivationKineticsTest | Catalyst-family sensitivity, coking, sintering, dominant mechanism, CatalystBed activity update |
ElectrolyzerTechnologyTest | Per-tech default consistency |
ElectrolyzerIVCharacteristicTest | E_rev vs T, Tafel monotonicity, technology ordering |
ElectrolyzerTest | Backward compat + η_F + I-V + specific-energy band |
ElectrolyzerCostEstimateTest | Per-tech ordering, BoP toggle, scale economy |
HydrogenProductionReactorTest | SMR tube/furnace metrics, ATR ratio controls, POX quench/refractory metrics, equipment factory aliases |
HydrogenPlantBuilderTest | Runnable SMR, ATR, POX, and blue-H2 plant builder templates |
Frequently asked questions
Guide for modeling hydrogen production routes — steam methane reforming (SMR), autothermal reforming (ATR), partial oxidation (POX), PSA purification (blue H2), and water electrolysis (green/pink H2). Companion to neqsim-ccs-hydrogen (transport/storage/blending) and neqsim-react…
The source record exposes this install command: npx skills add https://github.com/equinor/neqsim --skill ".github/skills/neqsim-hydrogen-production". Inspect the command and pinned source before running it.