agentleFS
equinorequinor/neqsim-community-skills/skills/process/neqsim-teg-dehydration-modeling/SKILL.md

neqsim-teg-dehydration-modeling

Skill4 starsChanged 5 months agoApache-2.0View on GitHub

Build a validated, closed-loop TEG (triethylene glycol) gas dehydration plant in NeqSim, including absorber, flash drum, regeneration column, stripper, lean-TEG recycle, and still-vent emission classification. USE WHEN: a task needs a runnable NeqSim TEG dehydration flowsheet (water dew point, lean-TEG purity, NMVOC/methane/benzene still-vent emissions) rather than a screening-level water-content estimate.

The file

We split this skill into the rules it gives an agent

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

  • ≈0

    Common · estimate

    Many files like this have a rule of this kind.

  • ≈5

    Distinctive · estimate

    This author's own choices. Worth a look.

  • 0

    Very specific

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

  • Common
  • Distinctive
  • Very specific
  1. Distinctive:

    Use this skill to build a complete, converging triethylene-glycol (TEG) gas dehydration plant in NeqSim.

    line 16
  2. Distinctive:

    When a user asks to model a TEG dehydration unit and read water dew point, lean TEG purity, or regeneration still-vent emissions.

    line 30
  3. Distinctive:

    When an agent needs a runnable TEG flowsheet to study stripping gas, reboiler temperature, TEG circulation rate, or once-through vs …

    line 32
  4. Distinctive:

    When emissions (NMVOC, methane, benzene, CO2, water) from the regeneration still vent must be quantified and classified for an …

    line 34
  5. Distinctive:

    Use this when the question is "does a few tens of mbar more reboiler pressure matter?" rather than a full flowsheet.

    line 144

≈ “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

TEG Dehydration Modeling

Use this skill to build a complete, converging triethylene-glycol (TEG) gas dehydration plant in NeqSim. It captures a validated flowsheet topology and the non-obvious settings (CPA fluid setup, regeneration-column tolerances, recycle priorities, condenser/preheat energy coupling, makeup calculator) needed for the process to solve as a closed loop. It returns a ProcessSystem plus the key streams an agent needs for water dew point, lean-TEG purity, and still-vent emission classification.

This is a real NeqSim build, not a public correlation placeholder. For a quick "is dehydration required?" triage without building a plant, use neqsim-water-dewpoint-dehydration-screening instead.

When to Use

  • When a user asks to model a TEG dehydration unit and read water dew point, lean TEG purity, or regeneration still-vent emissions.
  • When an agent needs a runnable TEG flowsheet to study stripping gas, reboiler temperature, TEG circulation rate, or once-through vs recirculated stripping gas.
  • When emissions (NMVOC, methane, benzene, CO2, water) from the regeneration still vent must be quantified and classified for an environmental screening.

Inputs

The build_teg_plant(...) function is fully parameterized. Key inputs:

  • feed_fractions: list of mole fractions (or percentages) aligned with GAS_COMPONENTS (nitrogen, CO2, methane, ... , benzene).
  • feed_flow_MSm3_day: wet/dry feed gas flow rate in MSm3/day.
  • feed_temp_C, feed_pressure_bara: feed gas conditions.
  • absorber_pressure_bara, absorber_temp_C: contactor conditions.
  • teg_flow_kg_hr, teg_feed_temp_C, lean_teg_purity: lean TEG circulation.
  • flash_drum_pressure_bara, reboiler_temp_C, stripping_gas_Sm3_hr: regeneration conditions.
  • n_absorber_stages, stage_efficiency: absorber model resolution.
  • water_mode: 'saturated' (water-saturate the feed) or 'specified' (set an inlet water content in mol-ppm via water_content_ppm_mol).
  • saturation_temp_C, saturation_pressure_bara: optional saturation TP setter.
  • recirculate_stripping_gas: True builds a true closed-loop stripping-gas recycle (split dried overhead, blower, heater) to cut still-vent emissions.

Outputs

build_teg_plant(...) returns (process, streams):

  • process: a NeqSim ProcessSystem ready to run.
  • streams: a dict of handles — dehydratedGas, flashGas, stillVent, leanTEGtoAbs, waterDewAnalyser, strippingGas, recircBlower.

Helper functions produce the engineering results:

  • comp_mass_flows_kg_hr(stream): per-component mass flow (kg/hr).
  • teg_mass_fraction(stream): TEG weight percent of a stream.
  • classify_emissions(stream): dict with NMVOC, methane, CO2, water, TEG, benzene, and total mass flows (kg/hr).

Engineering Method

The flowsheet follows the standard TEG dehydration topology:

  1. Fluid — SystemSrkCPAstatoil (CPA EOS) with setMixingRule(10) and setMultiPhaseCheck(False). TEG is added last so the lean-TEG composition maps to leanComp[-1] = lean_teg_purity and leanComp[-2] = 1 - lean_teg_purity.
  2. Feed conditioning — optional saturation TP setter + StreamSaturatorUtil (saturated mode) or an inlet water component (specified mode), then a heater to absorber TP.
  3. Absorber — SimpleTEGAbsorber with gas-in and lean-TEG solvent-in streams.
  4. Rich TEG let-down and pre-heat — HP flash valve, rich preheater, lean/rich exchangers (HeatExchanger with UA values), degassing separator, fine filter, LP flash valve.
  5. Regeneration — DistillationColumn (reboiler + condenser) with loosened tolerances (temperature 5e-2, mass 2e-1, enthalpy 2e-1) so the glycol/water split converges; stripping gas fed to the reboiler tray; WaterStripperColumn for deep lean-TEG purity.
  6. Recycles — lean-TEG recycle (priority 200, setDownstreamProperty('flow rate')) closes the solvent loop; the internal stripping-gas recycle returns stripper overhead to the reboiler. With recirculate_stripping_gas=True, a second makeup recycle recirculates dried overhead as stripping gas. Keep both coupled stripping-gas recycles at the same controller priority (currently 100); an intermediate priority may be skipped by the current RecycleController sequence.
  7. Makeup and energy coupling — a Calculator sizes TEG makeup from TEG lost in the dry gas, flash gas, still vent, and water draws; the rich preheater is driven by the condenser energy stream: richPreheat.setEnergyStream(column.getCondenser().getEnergyStream()).
  8. Run — process.runAsThread() then thr.join(...) (worker thread avoids blocking and tolerates the recycle iterations). A completed worker thread or successful unit statuses do not prove closed-loop convergence: require process.solved() and inspect process.getConvergenceDiagnostics() before accepting water or TEG closure.

Python Usage Pattern

from teg_dehydration_modeling import (
    DEFAULT_FEED,
    build_teg_plant,
    classify_emissions,
    teg_mass_fraction,
)

process, streams = build_teg_plant(
    feed_fractions=DEFAULT_FEED,
    feed_flow_MSm3_day=4.65,
    feed_temp_C=25.0,
    feed_pressure_bara=70.0,
    absorber_pressure_bara=85.0,
    absorber_temp_C=35.0,
    teg_flow_kg_hr=5500.0,
    teg_feed_temp_C=48.5,
    lean_teg_purity=0.97,
    flash_drum_pressure_bara=4.8,
    reboiler_temp_C=197.5,
    stripping_gas_Sm3_hr=180.0,
    n_absorber_stages=4,
    stage_efficiency=0.7,
)

thr = process.runAsThread()
thr.join(300000)  # ~15 s once-through, ~40 s with stripping-gas recirculation

water_dew_C = float(streams["waterDewAnalyser"].getMeasuredValue("C"))
lean_teg_wt = teg_mass_fraction(streams["leanTEGtoAbs"])
still_vent = classify_emissions(streams["stillVent"])

print(water_dew_C, lean_teg_wt, still_vent["NMVOC"])

Regeneration-Pressure Sensitivity (reboiler floating on the LP flare)

Use this when the question is "does a few tens of mbar more reboiler pressure matter?" rather than a full flowsheet. A reboiler/still connected to an LP flare header has no pressure control; its pressure is the header pressure plus the pressure drop of the overhead path. Lean-TEG water content at fixed temperature and vapour composition scales with total pressure, so the effect is proportional (verified 2026-10-08, Aasta Hansteen, SRK-CPA, mixingRule 10):

  • p_w(x_water, T) = y_water * P_bubble from bubblePointPressureFlash(False) on a TEG/water binary (fl.getPhase(0) is the gas); solve x_water so that p_w = y_steam * P_reboiler by bisection (y_steam = steam / (steam + stripping gas), about 0.85 to 0.92 for 76 Sm3/h stripping gas and 690 kg/h water).
  • Benchmark: 98.90 wt% TEG at 204 C and 1 atm without stripping gas (textbook value about 98.7).
  • 0.200 to 0.215 barg at 198 C: lean-TEG water +1.29 % relative (about -0.005 wt%-points at the design 99.6 wt%), equal to about 0.6 C of reboiler temperature, and +0.16 C on the equilibrium dry-gas dew point at 69 barg. Reaching the 0.4 barg H alarm costs about +17 % water.
  • Dry-gas equilibrium: flash gas + water + TEG with 5 mol TEG solution per mol gas so the liquid composition stays fixed; dewPointTemperatureFlash() for the dew point.
  • Water load: saturate the gas at the WET-GAS-SCRUBBER temperature (e.g. 22 C), not the contactor lean-TEG inlet temperature (35 C); the two differ by a factor of two in kg/h.
  • In neqsim_dev_setup task scripts use ns.JClass("neqsim.thermo.system.SystemSrkCPAstatoil") and the component name TEG.

Validation Checklist

  • Water dew point of the dry gas is well below 0 C at the reference pressure.
  • Lean TEG purity is above 90 wt% (typically 97-99 wt% with stripping gas).
  • Still-vent NMVOC and methane mass flows are finite and non-negative.
  • With recirculate_stripping_gas=True, still-vent NMVOC and methane do not increase versus the once-through case.
  • The process is run on a worker thread and the join timeout is large enough for the recycles to converge.
  • process.solved() is true and every active recycle reports solved() == True; record priority, iterations, and residuals for any unsolved recycle.
  • Water and TEG closure are interpreted only after the closed loop converges.
  • Example inputs are public and synthetic.

Common Mistakes

SymptomCauseFix
Regeneration column will not convergeDefault tolerances too tight for glycol/water splitLoosen setTemperatureTolerance(5e-2), setMassBalanceTolerance(2e-1), setEnthalpyBalanceTolerance(2e-1)
Lean TEG purity wrong / NaNTEG not added last, or composition indices offAdd water then TEG last; set leanComp[-1]=purity, leanComp[-2]=1-purity
Lean-TEG loop never closesRecycle priority/property not setLean TEG recycle priority 200 with setDownstreamProperty('flow rate')
Stripping-gas makeup recycle never executesCoupled stripping-gas recycles use different priorities and an intermediate level is skippedAssign the makeup recycle the same priority as the internal stripping-gas recycle; verify both with convergence diagnostics
Class not foundWrong CPA class nameUse SystemSrkCPAstatoil (lowercase statoil)
Run blocks or stallsRunning inline instead of on a threadUse process.runAsThread() + thr.join(timeout_ms)
TEG inventory driftsNo makeupAdd the Calculator makeup sized from TEG in dry gas, flash gas, still vent, water draws
Water balance looks openClosed-loop convergence was not established, or a water outlet was omittedFirst require process.solved() and all recycle diagnostics solved; then include still vent + regen water/HC draw + degassing flash gas in the water accounting

Limitations

  • Inputs and examples are public and synthetic; no proprietary plant data, vendor glycol packages, or company emission factors are included.
  • Emission classification is a component-bucketing of stream mass flows (NMVOC/methane/benzene/CO2/water); it is not a regulatory emission inventory.
  • The absorber uses SimpleTEGAbsorber with stage efficiency, not a rate-based contactor model; deep dew-point design needs validated review.
  • Convergence depends on reasonable inputs; extreme TEG rates, stripping gas, or reboiler temperatures may require tolerance or guess-temperature tuning.

Related NeqSim Functionality

  • neqsim.thermo.system.SystemSrkCPAstatoil — CPA equation of state for glycol/water/hydrocarbon systems (reached via from neqsim import jneqsim).
  • neqsim.process.equipment.absorber.SimpleTEGAbsorber, neqsim.process.equipment.absorber.WaterStripperColumn — TEG contactor and stripper.
  • neqsim.process.equipment.distillation.DistillationColumn — TEG regeneration column.
  • neqsim.process.equipment.util.Recycle, Calculator — solvent/stripping-gas recycles and TEG makeup sizing.
  • neqsim.process.measurementdevice.WaterDewPointAnalyser — dry-gas water dew point.
  • For a screening-only water-content triage before building a plant, use the neqsim-water-dewpoint-dehydration-screening community skill.

References

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.