|
| 1 | +--- |
| 2 | +title: H2S Scavenger Unit Operation |
| 3 | +description: Guide to using the H2S scavenger unit operation for modeling chemical scavenging of hydrogen sulfide from gas streams. Covers scavenger types, injection rate sizing, efficiency correlations, and cost estimation. |
| 4 | +--- |
| 5 | + |
| 6 | +# H2S Scavenger Unit Operation |
| 7 | + |
| 8 | +The `H2SScavenger` class models chemical scavenging of hydrogen sulfide (H2S) from gas streams. Unlike absorption or amine treatment, this unit operation uses empirical correlations based on scavenger type, injection rate, and operating conditions rather than rigorous chemical reaction calculations. |
| 9 | + |
| 10 | +## Overview |
| 11 | + |
| 12 | +H2S scavengers are commonly used for: |
| 13 | +- Treating low-to-moderate H2S concentrations (typically < 1000 ppm) |
| 14 | +- Wellhead or field gas conditioning |
| 15 | +- Emergency or temporary H2S control |
| 16 | +- Situations where amine systems are impractical |
| 17 | + |
| 18 | +The implementation is based on literature correlations from: |
| 19 | +- GPSA Engineering Data Book |
| 20 | +- Kohl & Nielsen "Gas Purification" |
| 21 | +- Arnold & Stewart "Surface Production Operations" |
| 22 | + |
| 23 | +## Scavenger Types |
| 24 | + |
| 25 | +Five scavenger types are supported, each with different characteristics: |
| 26 | + |
| 27 | +| Type | Chemical | Stoichiometry | Base Efficiency | Typical Application | |
| 28 | +|------|----------|---------------|-----------------|---------------------| |
| 29 | +| `TRIAZINE` | MEA-Triazine | 4.5 lb/lb H2S | 95% | Most common liquid scavenger | |
| 30 | +| `GLYOXAL` | Glyoxal-based | 5.5 lb/lb H2S | 90% | Lower temperature applications | |
| 31 | +| `IRON_SPONGE` | Iron oxide on wood chips | 2.5 lb/lb H2S | 98% | Dry bed, batch operation | |
| 32 | +| `CAUSTIC` | Sodium hydroxide (NaOH) | 2.4 lb/lb H2S | 95% | High pH applications | |
| 33 | +| `LIQUID_REDOX` | LO-CAT, SulFerox | Catalytic | 99.5% | Continuous regeneration | |
| 34 | + |
| 35 | +## Basic Usage |
| 36 | + |
| 37 | +### Java Example |
| 38 | + |
| 39 | +```java |
| 40 | +import neqsim.process.equipment.absorber.H2SScavenger; |
| 41 | +import neqsim.process.equipment.absorber.H2SScavenger.ScavengerType; |
| 42 | +import neqsim.process.equipment.stream.Stream; |
| 43 | +import neqsim.process.processmodel.ProcessSystem; |
| 44 | +import neqsim.thermo.system.SystemSrkEos; |
| 45 | + |
| 46 | +// Create sour gas |
| 47 | +SystemSrkEos sourGas = new SystemSrkEos(273.15 + 40.0, 50.0); |
| 48 | +sourGas.addComponent("methane", 0.90); |
| 49 | +sourGas.addComponent("ethane", 0.04); |
| 50 | +sourGas.addComponent("H2S", 0.005); // 5000 ppm |
| 51 | +sourGas.addComponent("CO2", 0.015); |
| 52 | +sourGas.setMixingRule("classic"); |
| 53 | + |
| 54 | +// Create stream |
| 55 | +Stream feed = new Stream("Sour Gas", sourGas); |
| 56 | +feed.setFlowRate(100000.0, "Sm3/day"); |
| 57 | + |
| 58 | +// Add H2S scavenger |
| 59 | +H2SScavenger scavenger = new H2SScavenger("MEA-Triazine Injection", feed); |
| 60 | +scavenger.setScavengerType(ScavengerType.TRIAZINE); |
| 61 | +scavenger.setScavengerInjectionRate(50.0, "l/hr"); |
| 62 | +scavenger.setScavengerConcentration(0.5); // 50% active ingredient |
| 63 | + |
| 64 | +// Build and run process |
| 65 | +ProcessSystem process = new ProcessSystem(); |
| 66 | +process.add(feed); |
| 67 | +process.add(scavenger); |
| 68 | +process.run(); |
| 69 | + |
| 70 | +// Get results |
| 71 | +System.out.println("Inlet H2S: " + scavenger.getInletH2SConcentration() + " ppm"); |
| 72 | +System.out.println("Outlet H2S: " + scavenger.getOutletH2SConcentration() + " ppm"); |
| 73 | +System.out.println("Removal Efficiency: " + scavenger.getH2SRemovalEfficiencyPercent() + "%"); |
| 74 | +``` |
| 75 | + |
| 76 | +### Python Example (via neqsim-python) |
| 77 | + |
| 78 | +```python |
| 79 | +from neqsim import jneqsim |
| 80 | + |
| 81 | +# Import classes |
| 82 | +SystemSrkEos = jneqsim.thermo.system.SystemSrkEos |
| 83 | +Stream = jneqsim.process.equipment.stream.Stream |
| 84 | +H2SScavenger = jneqsim.process.equipment.absorber.H2SScavenger |
| 85 | +ScavengerType = jneqsim.process.equipment.absorber.H2SScavenger.ScavengerType |
| 86 | +ProcessSystem = jneqsim.process.processmodel.ProcessSystem |
| 87 | + |
| 88 | +# Create sour gas (temperature in Kelvin, pressure in bara) |
| 89 | +sour_gas = SystemSrkEos(273.15 + 40.0, 50.0) |
| 90 | +sour_gas.addComponent("methane", 0.90) |
| 91 | +sour_gas.addComponent("ethane", 0.04) |
| 92 | +sour_gas.addComponent("H2S", 0.005) # 5000 ppm |
| 93 | +sour_gas.addComponent("CO2", 0.015) |
| 94 | +sour_gas.setMixingRule("classic") |
| 95 | + |
| 96 | +# Create feed stream |
| 97 | +feed = Stream("Sour Gas", sour_gas) |
| 98 | +feed.setFlowRate(100000.0, "Sm3/day") |
| 99 | + |
| 100 | +# Create scavenger unit |
| 101 | +scavenger = H2SScavenger("Triazine Injection", feed) |
| 102 | +scavenger.setScavengerType(ScavengerType.TRIAZINE) |
| 103 | +scavenger.setScavengerInjectionRate(50.0, "l/hr") |
| 104 | +scavenger.setScavengerConcentration(0.5) |
| 105 | + |
| 106 | +# Run simulation |
| 107 | +process = ProcessSystem() |
| 108 | +process.add(feed) |
| 109 | +process.add(scavenger) |
| 110 | +process.run() |
| 111 | + |
| 112 | +# Results |
| 113 | +print(f"Inlet H2S: {scavenger.getInletH2SConcentration():.1f} ppm") |
| 114 | +print(f"Outlet H2S: {scavenger.getOutletH2SConcentration():.1f} ppm") |
| 115 | +print(f"Efficiency: {scavenger.getH2SRemovalEfficiencyPercent():.1f}%") |
| 116 | +``` |
| 117 | + |
| 118 | +## Configuration Parameters |
| 119 | + |
| 120 | +### Scavenger Properties |
| 121 | + |
| 122 | +| Method | Description | Units | |
| 123 | +|--------|-------------|-------| |
| 124 | +| `setScavengerType(type)` | Set scavenger chemical type | `ScavengerType` enum | |
| 125 | +| `setScavengerInjectionRate(rate, unit)` | Injection rate | l/hr, gal/hr, kg/hr, lb/hr | |
| 126 | +| `setScavengerConcentration(conc)` | Active ingredient fraction | 0-1 (e.g., 0.5 = 50%) | |
| 127 | + |
| 128 | +### Operating Conditions |
| 129 | + |
| 130 | +| Method | Description | Default | |
| 131 | +|--------|-------------|---------| |
| 132 | +| `setContactTime(seconds)` | Gas-liquid contact time | 30 seconds | |
| 133 | +| `setMixingEfficiency(eff)` | Contactor mixing quality | 0.85 (0-1 scale) | |
| 134 | +| `setTargetH2SConcentration(ppm)` | Target outlet spec | 4.0 ppm | |
| 135 | + |
| 136 | +### Design Sizing |
| 137 | + |
| 138 | +```java |
| 139 | +// Calculate required injection rate for a target spec |
| 140 | +scavenger.setTargetH2SConcentration(4.0); // 4 ppm sales gas spec |
| 141 | +double requiredRate = scavenger.calculateRequiredInjectionRate(); // l/hr |
| 142 | +``` |
| 143 | + |
| 144 | +## Efficiency Correlation |
| 145 | + |
| 146 | +The removal efficiency is calculated using an empirical correlation: |
| 147 | + |
| 148 | +$$ |
| 149 | +\eta = \eta_{base} \times f_{excess} \times f_{contact} \times f_{temp} \times f_{mix} |
| 150 | +$$ |
| 151 | + |
| 152 | +Where: |
| 153 | + |
| 154 | +| Factor | Description | Formula | |
| 155 | +|--------|-------------|---------| |
| 156 | +| $\eta_{base}$ | Base efficiency per scavenger type | From literature | |
| 157 | +| $f_{excess}$ | Excess ratio correction | $1 - e^{-k \cdot R_{excess}}$ | |
| 158 | +| $f_{contact}$ | Contact time factor | $(t/30)^{0.3}$, capped at 1.2 | |
| 159 | +| $f_{temp}$ | Temperature factor | Optimum at 40°C | |
| 160 | +| $f_{mix}$ | Mixing efficiency | User input (0-1) | |
| 161 | + |
| 162 | +The excess ratio $R_{excess}$ is: |
| 163 | + |
| 164 | +$$ |
| 165 | +R_{excess} = \frac{\text{Scavenger injected}}{\text{Stoichiometric requirement}} - 1 |
| 166 | +$$ |
| 167 | + |
| 168 | +## Output Methods |
| 169 | + |
| 170 | +### Concentration and Removal |
| 171 | + |
| 172 | +| Method | Description | Units | |
| 173 | +|--------|-------------|-------| |
| 174 | +| `getInletH2SConcentration()` | Feed H2S content | ppm (molar) | |
| 175 | +| `getOutletH2SConcentration()` | Treated gas H2S | ppm (molar) | |
| 176 | +| `getH2SRemovalEfficiency()` | Removal fraction | 0-1 | |
| 177 | +| `getH2SRemovalEfficiencyPercent()` | Removal percentage | % | |
| 178 | +| `getH2SRemoved(unit)` | Mass of H2S removed | kg/hr, lb/hr, kg/day | |
| 179 | + |
| 180 | +### Scavenger Consumption |
| 181 | + |
| 182 | +| Method | Description | Units | |
| 183 | +|--------|-------------|-------| |
| 184 | +| `getActualScavengerConsumption()` | Scavenger consumed reacting with H2S | kg/hr | |
| 185 | +| `getScavengerExcess()` | Excess over stoichiometric | fraction | |
| 186 | + |
| 187 | +### Cost Estimation |
| 188 | + |
| 189 | +```java |
| 190 | +// Calculate operating cost |
| 191 | +double costPerGal = 7.0; // $/gal for triazine |
| 192 | +double hourlyCost = scavenger.calculateHourlyCost(costPerGal, "$/gal"); |
| 193 | +double dailyCost = hourlyCost * 24; |
| 194 | +double annualCost = dailyCost * 365; |
| 195 | +``` |
| 196 | + |
| 197 | +## JSON Output |
| 198 | + |
| 199 | +The `toJson()` method provides comprehensive results: |
| 200 | + |
| 201 | +```json |
| 202 | +{ |
| 203 | + "equipmentName": "H2S Scavenger", |
| 204 | + "scavengerType": "MEA-Triazine", |
| 205 | + "injectionRate_l_hr": 50.0, |
| 206 | + "scavengerConcentration": 0.5, |
| 207 | + "inletH2S_ppm": 5000.0, |
| 208 | + "outletH2S_ppm": 125.3, |
| 209 | + "removalEfficiencyPercent": 97.5, |
| 210 | + "h2sRemoved_kg_hr": 12.4, |
| 211 | + "scavengerConsumption_kg_hr": 55.8, |
| 212 | + "excessRatio": 1.25, |
| 213 | + "contactTime_s": 30.0, |
| 214 | + "mixingEfficiency": 0.85 |
| 215 | +} |
| 216 | +``` |
| 217 | + |
| 218 | +## Design Guidelines |
| 219 | + |
| 220 | +### Scavenger Selection |
| 221 | + |
| 222 | +| Condition | Recommended Type | |
| 223 | +|-----------|------------------| |
| 224 | +| General purpose, moderate H2S | TRIAZINE | |
| 225 | +| Low temperature (< 20°C) | GLYOXAL | |
| 226 | +| Batch operation, high efficiency | IRON_SPONGE | |
| 227 | +| Very high H2S, continuous operation | LIQUID_REDOX | |
| 228 | +| High pH tolerance required | CAUSTIC | |
| 229 | + |
| 230 | +### Typical Operating Ranges |
| 231 | + |
| 232 | +| Parameter | Typical Range | |
| 233 | +|-----------|---------------| |
| 234 | +| H2S inlet | 10 - 10,000 ppm | |
| 235 | +| Gas flow | 1,000 - 500,000 Sm³/day | |
| 236 | +| Injection rate | 5 - 500 l/hr | |
| 237 | +| Contact time | 15 - 120 seconds | |
| 238 | +| Temperature | 10 - 60°C | |
| 239 | +| Pressure | 1 - 150 bara | |
| 240 | + |
| 241 | +### Excess Ratio Guidelines |
| 242 | + |
| 243 | +| Target | Recommended Excess | |
| 244 | +|--------|-------------------| |
| 245 | +| Normal operation | 20-50% excess | |
| 246 | +| High reliability required | 50-100% excess | |
| 247 | +| Upset conditions | 100-200% excess | |
| 248 | + |
| 249 | +## Limitations |
| 250 | + |
| 251 | +1. **Correlation-based**: Results are estimates based on empirical correlations, not rigorous reaction kinetics |
| 252 | +2. **Single-phase assumption**: Assumes gas-phase H2S removal; does not model aqueous phase reactions in detail |
| 253 | +3. **No regeneration**: Does not model scavenger regeneration (relevant for liquid redox systems) |
| 254 | +4. **Temperature range**: Correlations are most accurate for 20-60°C range |
| 255 | + |
| 256 | +## References |
| 257 | + |
| 258 | +1. GPSA Engineering Data Book, 14th Edition, Section 21 |
| 259 | +2. Kohl, A.L. & Nielsen, R.B., "Gas Purification", 5th Edition, Gulf Publishing |
| 260 | +3. Arnold, K. & Stewart, M., "Surface Production Operations", Vol. 2, Gulf Publishing |
| 261 | +4. Nagl, G.J., "Controlling H2S Emissions", Chemical Engineering, 1997 |
| 262 | + |
| 263 | +## See Also |
| 264 | + |
| 265 | +- [H2S Distribution Modeling Guide](../thermo/H2S_distribution_guide.md) |
| 266 | +- [Simple Absorber](SimpleAbsorber.md) |
| 267 | +- [Gas Sweetening Overview](gas_sweetening_overview.md) |
0 commit comments