agentleFS
equinorequinor/neqsim/.github/skills/neqsim-hydrogen-production/SKILL.md

neqsim-hydrogen-production

Skill167 starsChanged 7 months agoApache-2.0View on GitHub

Hydrogen production routes with NeqSim - SMR, ATR, POX, WGS, PSA, CO2 capture, electrolysis (PEM/Alkaline/SOEC/AEM), ammonia cracking, blue/green H2 flowsheets and plant cost. USE WHEN: modeling reformers, syngas generators, shift reactors, PSA, H2 drying/compression/export, electrolyzer I-V curves, para/ortho conversion or catalyst deactivation. Covers ReformerFurnace, WaterGasShiftReactor, BlueHydrogenPlantBuilder, PSACascade, Electrolyzer.

The file

We split this skill into the rules it gives an agent

5 rules. About 0 are common, 2 are distinctive, and 3 are very specific to this project.

  • ≈0

    Common · estimate

    Many files like this have a rule of this kind.

  • ≈2

    Distinctive · estimate

    This author's own choices. Worth a look.

  • 3

    Very specific

    Tied to their project's names, files or tools. Probably skip.

  • Common
  • Distinctive
  • Very specific
  1. Distinctive:

    Use the route builders when a task needs a runnable screening flowsheet quickly.

    line 95
  2. Very specific:

    Every new route unit exposes getResults() and toJson() for agent reports.

    line 138
  3. Distinctive:

    Use the standalone PSA block when a shifted syngas stream is already available from a custom flowsheet.

    line 186
  4. Very specific:

    Use vendor/lab/historian coefficients before detailed run-length guarantees.

    line 319
  5. Very specific:

    Electrolyzer voltage: when no ElectrolyzerTechnology is set, the legacy fixed-voltage path (V = 1.23 V, η_F = 1.0) stays active for …

    line 365

≈ “Common” is an estimate: at least 1 in 5 of the 350,495 skill files we read have a rule of the same kind, not the same words. “Very specific” is our guess from the words: it names a file, a command, a setting or the project itself.

Keep what fits and drop the rest. Your version, ready for your agents.
Files
SKILL.md

Hydrogen Production with NeqSim

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).

When to Use This Skill

  • 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
  • POX/ATR quench, refractory, soot-risk, and H2/CO screening
  • PSA bed sizing and purity/recovery analysis
  • Electrolyzer technology selection (PEM vs Alkaline vs SOEC vs AEM)
  • Stack voltage modeling from current density (I-V curves)
  • Specific energy consumption (kWh/kg H₂)
  • Hydrogen plant CAPEX estimation
  • Cryogenic para/ortho H₂ conversion screening
  • Catalyst activity decay for SMR/WGS/ammonia cracking studies
  • Blue vs green H₂ techno-economic comparison

Applicable Standards

StandardScope
ISO 14687Hydrogen fuel quality (PEM-FC grade ≥ 99.97% H₂)
ISO 22734Industrial water electrolyzers — safety
IEC 62282Fuel cell technologies (electrochemistry conventions)
API 941Steels for H₂ service (Nelson curves)
ASME B31.12Hydrogen piping and pipelines
EIGA Doc 121H₂ generator design (SMR/electrolysis)
IRENA 2022Green H₂ cost benchmarks
IEA Global H₂ Review 2023Capacity factors, USD/kW benchmarks

Core Classes (Thermochemical route templates)

ClassPackagePurpose
CatalyticTubeReformerneqsim.process.equipment.reactorTube-side SMR equilibrium model with duty, pressure-drop, tube-wall, heat-flux, and catalyst-activity screening
ReformerFurnaceneqsim.process.equipment.reactorFired SMR furnace coupling FurnaceBurner combustion heat to reformer-tube duty
SyngasBurnerZoneneqsim.process.equipment.reactorOxygen-blown ATR/POX burner-zone model with O2/C envelope and flame-temperature screening
AutothermalReformerneqsim.process.equipment.reactorATR template with O2/C and S/C controls, burner zone, catalytic equilibrium zone, and soot-risk metric
PartialOxidationReactorneqsim.process.equipment.reactorPOX template with O2/C control, refractory warning, fast quench, and H2/CO output
QuenchSectionneqsim.process.equipment.reactorRapid syngas cooling model with heat-removed and quench-severity outputs
WaterGasShiftReactorneqsim.process.equipment.reactorHT/LT WGS equilibrium wrapper with CO conversion, H2 gain, CO2 formation, duty, and WGS ratio reporting
ComponentCaptureUnitneqsim.process.equipment.splitterSelective component-capture placeholder for CO2 capture, H2 drying, and other screening separations
SMRHydrogenPlantBuilderneqsim.process.hydrogenScreening plant builder for methane/steam feed, fired reformer, and optional PSA
ATRHydrogenPlantBuilderneqsim.process.hydrogenScreening plant builder for methane/steam/oxygen feed, ATR, and optional PSA
POXHydrogenPlantBuilderneqsim.process.hydrogenScreening plant builder for POX syngas or hydrogen studies with optional PSA
BlueHydrogenPlantBuilderneqsim.process.hydrogenFull screening chain for SMR + HT/LT WGS + CO2 capture/compression + PSA + H2 drying/compression + carbon intensity

Thermochemical maturity map

TechnologyImplemented NeqSim patternMaturityRemaining high-fidelity scope
Steam methane reforming (SMR)ReformerFurnace + CatalyticTubeReformer + FurnaceBurner4/5Detailed radiant-box view factors, burner CFD, tube metallurgy/vendor rating
Autothermal reforming (ATR)AutothermalReformer with SyngasBurnerZone + catalytic GibbsReactor4/5Burner aerodynamics, oxygen-mixing CFD, rate-based catalyst bed calibration
Partial oxidation (POX)PartialOxidationReactor + SyngasBurnerZone + QuenchSection3/5Fast-quench kinetics, refractory thermal model, soot/coke kinetics

Core Classes (Horizon 1)

ClassPackagePurpose
PressureSwingAdsorptionBedneqsim.process.equipment.adsorberH₂-tuned single PSA bed (AC or Zeolite 13X)
AdsorptionCycleControllerneqsim.process.equipment.adsorberMulti-bed Skarstrom-style cycling (pre-existing)
Electrolyzerneqsim.process.equipment.electrolyzerStack model with technology defaults and Faradaic efficiency
ElectrolyzerTechnologysameEnum PEM / ALKALINE / SOEC / AEM with default voltage, current density, T, P, η_F
ElectrolyzerIVCharacteristicsameTafel + ohmic voltage model; tech-specific defaults
ElectrolyzerCostEstimateneqsim.process.costestimation.electrolyzerSpecific-CAPEX × scale-factor × CEPCI

Core Classes (Horizon 1.5)

ClassPackagePurpose
PSACascadeneqsim.process.equipment.adsorberMulti-bed Skarstrom cascade (2/4/6/8/10/12 beds) with recovery uplift from pressure equalisation
PSACostEstimateneqsim.process.costestimation.adsorberPer-bed vessel + valve skid + sorbent inventory × CEPCI

Core Classes (Horizon 3 foundations)

ClassPackagePurpose
ParaOrthoH2Correctionneqsim.thermo.util.hydrogenEquilibrium para fraction, normal-to-equilibrium heat release, Cp correction, thermal-conductivity factor, conversion time
CatalystDeactivationKineticsneqsim.process.equipment.reactorFirst-order activity decay for sulfur/chloride poisoning, coking, and thermal sintering

Recipe 0 — SMR / ATR / POX route builders

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().
  • Every new route unit exposes getResults() and toJson() for agent reports.

Recipe 1 — Blue H₂ full chain (SMR + WGS + capture + PSA + export)

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

  • The default sequence is SMR furnace → HT WGS → LT WGS → cooler/KO → CO2 capture → CO2 compressor → PSA → H2 dryer → H2 compressor.
  • 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.
  • Carbon-intensity reporting counts residual direct carbon as CO2 equivalent and reports both residual and gross intensity per kg H2 product.

Recipe 1b — PSA-only purification block

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.

Recipe 2 — Green H₂ Electrolyzer

// 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/η_F; retains inlet T/P
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

TechFixed V_cellj (A/cm²)Reference T (°C)Reference P (bara)Nominal η_FFixed-voltage stack SEC (kWh/kg)
PEM1.802.080300.65 (unqualified legacy)73.63
ALKALINE1.850.48070.95850234 (screening extrapolation)51.32
SOEC1.301.080010.85 (unqualified legacy)40.67 (electricity only)
AEM1.850.860100.60 (unqualified legacy)81.98

Distinguish current efficiency from LHV/HHV energy efficiency. Treat the table as implemented screening inputs and arithmetic, not measured technology performance. For alkaline, use Ulleberg (2003), Eq. (9), Table 3 PHOEBUS parameters (f1=250 (mA/cm²)², f2=0.96, 80 °C, reported 7 bar), DOI 10.1016/S0360-3199(02)00033-2. Evaluating at 400 mA/cm² extrapolates beyond Fig. 6; it has no established uncertainty interval or off-design qualification. Supply measured efficiency after setTechnology; that call overwrites prior voltage/efficiency settings and retains the inlet T/P. Set feed T/P separately. Consult the equipment guide and open #4682 before using legacy defaults in a benchmark. At alkaline nominal j/T, the existing I–V model gives 1.7064354 V and 47.33637 kWh/kg instead of the fixed-voltage result. Do not infer a validated SEC from either model or use SOEC heat substitution as evidence of current efficiency.

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)
  • Tafel slope A, exchange current j0, ASR R are technology defaults
  • Below j0 the model returns E_rev (no spurious negative overpotential)

Recipe 4 — Multi-bed PSA cascade

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):

ConfigurationBedsEqualisationsUplift
BEDS_220+0.00
BEDS_441+0.05
BEDS_662+0.08
BEDS_883+0.10
BEDS_10104+0.11
BEDS_12125+0.12

Total cascade recovery is capped at 0.93 (industrial benchmark for H₂ PSA on shifted syngas).

Recipe 5 — PSA cascade CAPEX

PSACostEstimate cost = new PSACostEstimate(cascade);   // derives N_beds, sorbent, mass
cost.calculateCostEstimate();
double usd = cost.getPurchasedEquipmentCost();
  • Reference per-bed vessel cost: USD 250 000 at 2 m × 4 m TL-TL, scale exponent 0.6.
  • Valve skid: USD 60 000 per bed (manifold + actuators + cycle controller).
  • Sorbent inventory: USD 4/kg AC or USD 10/kg Zeolite 13X.
  • Balance-of-plant strip (setIncludeBalanceOfPlant(false)) removes ~25 % for vessel-only quotes.
  • CEPCI 2024 = 800 reference; multiply by CostEstimationCalculator.getCurrentCepci()/800.

Recipe 6 — Para/ortho H₂ correction for cryogenic screening

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);
  • Normal hydrogen is 25% para; equilibrium hydrogen approaches >99% para near 20 K.
  • getNormalToEquilibriumHeatJPerKg(T) returns positive exothermic heat release.
  • getCpCorrectionJPerKgK(T) is equilibrium minus frozen-normal rotational heat capacity.
  • Thermal-conductivity correction factors are bounded screening multipliers for normal-H₂ correlations.

Recipe 7 — Catalyst deactivation activity factor

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();
  • Families: NICKEL_REFORMING, IRON_CHROMIUM_HT_SHIFT, COPPER_ZINC_LT_SHIFT, RUTHENIUM_AMMONIA_CRACKING.
  • Mechanisms: sulfur poisoning, chloride poisoning, coking, and thermal sintering.
  • Use vendor/lab/historian coefficients before detailed run-length guarantees.

Recipe 3 — Electrolyzer CAPEX

el.initMechanicalDesign();
ElectrolyzerMechanicalDesign mech =
    (ElectrolyzerMechanicalDesign) el.getMechanicalDesign();
mech.calcDesign();   // populates totalPowerKW

ElectrolyzerCostEstimate cost = new ElectrolyzerCostEstimate(mech);
cost.setTechnology("PEM");
double usd = cost.getPurchasedEquipmentCost();
  • Specific CAPEX (2024 USD/kW, CEPCI 800): PEM 1250, Alkaline 800, SOEC 2500, AEM 1500.
  • Scale exponent 0.85 vs reference 1 MW.
  • setIncludeBalanceOfPlant(false) strips ~35% for stack-only quotes.
  • Numbers are AACE Class 4–5 — do not use for FID without vendor budget quotes.

Color taxonomy and route map

ColorRouteNeqSim primitives
GreySMR no CCSGibbsReactor + WGS + PressureSwingAdsorptionBed
BlueSMR/ATR + CCSAdd CO₂ capture (amine/MEA) → see neqsim-ccs-hydrogen
GreenRenewable electrolysisElectrolyzer with PEM/Alkaline + renewable power feed
PinkNuclear electrolysisSame Electrolyzer, accounting differs
TurquoiseMethane pyrolysisNot yet — Horizon 2

Common pitfalls

  • Thermochemical scope: 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.
  • Trace products: Gibbs syngas models need product components present in the feed. The route builders and HydrogenProductionUtils.ensureSyngasComponents() add hydrogen, CO, and CO2 at trace levels.
  • ATR/POX controls: ratio controls rebuild the controlled inlet clone from methane moles before running. Disable ratio control only when a measured or externally generated feed composition must be preserved exactly.
  • 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.
  • Electrolyzer voltage: when no ElectrolyzerTechnology is set, the legacy fixed-voltage path (V = 1.23 V, η_F = 1.0) stays active for backward compatibility.
  • Specific energy: 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.
  • Cost estimate: requires mech.calcDesign() before construction so totalPowerKW > 0.
  • Para/ortho scope: ParaOrthoH2Correction is a screening correction, not a complete liquefaction process model.
  • Catalyst life scope: CatalystDeactivationKinetics default coefficients are order-of-magnitude values. Tune them to vendor or historian data for plant-specific forecasts.

Tests for verification

TestCoverage
PressureSwingAdsorptionBedTestDefaults, recovery cap, mass balance, composition, sorbent switch
PSACascadeTestCascade uplift, bed-count monotonicity, 0.93 cap, tail-gas mass balance
PSACostEstimateTestBed-count linearity, sorbent ordering, BoP toggle, order of magnitude
ParaOrthoH2CorrectionTestPara equilibrium limits, conversion heat, Cp correction, conductivity factor, catalyst time ranking
CatalystDeactivationKineticsTestCatalyst-family sensitivity, coking, sintering, dominant mechanism, CatalystBed activity update
ElectrolyzerTechnologyTestPer-tech default consistency
ElectrolyzerIVCharacteristicTestE_rev vs T, Tafel monotonicity, technology ordering
ElectrolyzerTestBackward compat + η_F + I-V + specific-energy band
ElectrolyzerCostEstimateTestPer-tech ordering, BoP toggle, scale economy
HydrogenProductionReactorTestSMR tube/furnace metrics, ATR ratio controls, POX quench/refractory metrics, equipment factory aliases
HydrogenPlantBuilderTestRunnable SMR, ATR, POX, and blue-H2 plant builder templates

Deferred (Horizon 2/3)

  • Rate-based amine absorber for CO₂ capture upstream of blue H₂
  • Full cryogenic H₂ liquefaction train with expanders and heat integration
  • High-fidelity reformer radiant-box view factors, burner CFD, and vendor tube-rating integration
  • Ammonia cracking kinetics for H₂ delivery from NH₃
  • Hydrogen LCA per production step
  • LOHC and photo-electrolysis

Download now (ZIP)

Does it work?

Reviews from people and from AI agents that ran it: what they used it for, and whether it worked.

No reviews yet

People and AI agents can review whether this works in practice. Say what you used it for, and whether it worked.

  • It worked
  • Partly
  • It didn't
What did you use it for? e.g. Reviewing pull requests in a Rails app

Using an agent? It can post a review for you after it has run the file: the MCP tool registry_write, action report. How to connect one.

Your trail

Files you open will collect here, so you can find them again.

Open two or more, and you can remix the rules you like from each into one list. Kept in this browser only.

Now do this for your own.

Bring your CLAUDE.md, AGENTS.md or skills. agentleFS shows which of your rules are common, which are yours and which only fit one project, and keeps one version your agents read everywhere.