Class H2SScavenger

All Implemented Interfaces:
Serializable, Runnable, ProcessEquipmentInterface, TwoPortInterface, SimulationInterface, NamedInterface

public class H2SScavenger extends TwoPortEquipment
H2S Scavenger unit operation for removing hydrogen sulfide from gas streams.

This unit operation models H2S removal using chemical scavengers without rigorous chemical reaction calculations. Instead, it uses empirical correlations based on scavenger type, injection rate, and operating conditions.

Supported scavenger types and their characteristics:

H2S Scavenger Types and Properties
Type Active Component Stoichiometry (lb scavenger/lb H2S) Typical Efficiency
TRIAZINE MEA-triazine (1,3,5-tri(2-hydroxyethyl)-hexahydro-s-triazine) 3.5-6.0 85-99%
GLYOXAL Glyoxal-based 4.0-7.0 80-95%
IRON_SPONGE Iron oxide (Fe2O3) on wood chips N/A (solid bed) 95-99%
CAUSTIC Sodium hydroxide (NaOH) 2.4 (stoichiometric) 90-99%
LIQUID_REDOX Iron chelate solution (LO-CAT, SulFerox) N/A (catalytic) 99+%

References:

  • GPSA Engineering Data Book, 14th Edition, Section 21 - Hydrocarbon Treating
  • Kohl, A.L. and Nielsen, R.B., "Gas Purification", 5th Edition, Gulf Publishing
  • SPE-141434-MS: "H2S Scavenger Performance in Bakken Crude"
  • Arnold, K. and Stewart, M., "Surface Production Operations", Vol. 2
Version:
1.0
Author:
ESOL
See Also:
  • Field Details

    • serialVersionUID

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

      private H2SScavenger.ScavengerType scavengerType
    • scavengerInjectionRate

      private double scavengerInjectionRate
    • injectionRateUnit

      private String injectionRateUnit
    • scavengerConcentration

      private double scavengerConcentration
    • targetH2SConcentration

      private double targetH2SConcentration
    • contactTime

      private double contactTime
    • mixingEfficiency

      private double mixingEfficiency
    • h2sRemovalEfficiency

      private double h2sRemovalEfficiency
    • h2sRemoved

      private double h2sRemoved
    • inletH2SConcentration

      private double inletH2SConcentration
    • outletH2SConcentration

      private double outletH2SConcentration
    • actualScavengerConsumption

      private double actualScavengerConsumption
    • scavengerExcess

      private double scavengerExcess
    • MW_H2S

      private static final double MW_H2S
      See Also:
  • Constructor Details

    • H2SScavenger

      public H2SScavenger(String name)
      Constructor for H2SScavenger.
      Parameters:
      name - equipment name
    • H2SScavenger

      public H2SScavenger(String name, StreamInterface inStream)
      Constructor for H2SScavenger with inlet stream.
      Parameters:
      name - equipment name
      inStream - inlet gas stream
  • Method Details

    • setScavengerType

      public void setScavengerType(H2SScavenger.ScavengerType type)
      Set the scavenger type.
      Parameters:
      type - ScavengerType enum value
    • getScavengerType

      public H2SScavenger.ScavengerType getScavengerType()
      Get the scavenger type.
      Returns:
      current ScavengerType
    • setScavengerInjectionRate

      public void setScavengerInjectionRate(double rate, String unit)
      Set scavenger injection rate.
      Parameters:
      rate - injection rate value
      unit - unit string ("l/hr", "gal/hr", "kg/hr", "lb/hr")
    • getScavengerInjectionRate

      public double getScavengerInjectionRate(String unit)
      Get scavenger injection rate in specified unit.
      Parameters:
      unit - desired unit ("l/hr", "gal/hr", "kg/hr", "lb/hr")
      Returns:
      injection rate in specified unit
    • getScavengerInjectionRateKgPerHour

      private double getScavengerInjectionRateKgPerHour()
      Convert injection rate to kg/hr.
      Returns:
      injection rate in kg/hr
    • setScavengerConcentration

      public void setScavengerConcentration(double concentration)
      Set the active ingredient concentration in the scavenger product.
      Parameters:
      concentration - concentration as mass fraction (0-1), e.g., 0.5 for 50% active
    • getScavengerConcentration

      public double getScavengerConcentration()
      Get scavenger concentration.
      Returns:
      concentration as mass fraction
    • setTargetH2SConcentration

      public void setTargetH2SConcentration(double ppm)
      Set target H2S outlet concentration.
      Parameters:
      ppm - target H2S in ppm (molar)
    • getTargetH2SConcentration

      public double getTargetH2SConcentration()
      Get target H2S outlet concentration.
      Returns:
      target in ppm
    • setContactTime

      public void setContactTime(double seconds)
      Set contact time (residence time).
      Parameters:
      seconds - contact time in seconds
    • getContactTime

      public double getContactTime()
      Get contact time.
      Returns:
      contact time in seconds
    • setMixingEfficiency

      public void setMixingEfficiency(double efficiency)
      Set mixing efficiency of the contactor.
      Parameters:
      efficiency - efficiency as fraction (0-1)
    • getMixingEfficiency

      public double getMixingEfficiency()
      Get mixing efficiency.
      Returns:
      mixing efficiency as fraction
    • calculateRemovalEfficiency

      private double calculateRemovalEfficiency(double inletH2SMassFlow, double temperature, double pressure)
      Calculate H2S removal efficiency based on scavenger type, injection rate, and conditions.

      The efficiency correlation is based on empirical data from literature:

      • Base efficiency depends on scavenger type
      • Efficiency increases with excess scavenger (diminishing returns)
      • Contact time affects mass transfer
      • Temperature affects reaction kinetics
      Parameters:
      inletH2SMassFlow - H2S mass flow in inlet stream (kg/hr)
      temperature - operating temperature (K)
      pressure - operating pressure (bara)
      Returns:
      removal efficiency as fraction (0-1)
    • getKineticConstant

      private double getKineticConstant()
      Get kinetic constant for efficiency correlation based on scavenger type.
      Returns:
      kinetic constant k
    • calculateRequiredInjectionRate

      public double calculateRequiredInjectionRate()
      Calculate required scavenger injection rate to achieve target H2S outlet.
      Returns:
      required injection rate in current unit
    • run

      public void run(UUID id)

      In this method all thermodynamic and unit operations will be calculated in a steady state calculation.

      Parameters:
      id - UUID
    • getH2SRemovalEfficiency

      public double getH2SRemovalEfficiency()
      Get the calculated H2S removal efficiency.
      Returns:
      removal efficiency as fraction (0-1)
    • getH2SRemovalEfficiencyPercent

      public double getH2SRemovalEfficiencyPercent()
      Get the H2S removal efficiency as percentage.
      Returns:
      removal efficiency as percentage
    • getH2SRemoved

      public double getH2SRemoved(String unit)
      Get the mass of H2S removed.
      Parameters:
      unit - mass flow unit ("kg/hr", "lb/hr", "kg/day")
      Returns:
      H2S removed in specified unit
    • getInletH2SConcentration

      public double getInletH2SConcentration()
      Get inlet H2S concentration.
      Returns:
      inlet H2S in ppm (molar)
    • getOutletH2SConcentration

      public double getOutletH2SConcentration()
      Get outlet H2S concentration.
      Returns:
      outlet H2S in ppm (molar)
    • getActualScavengerConsumption

      public double getActualScavengerConsumption(String unit)
      Get actual scavenger consumption rate.
      Parameters:
      unit - mass flow unit ("kg/hr", "lb/hr")
      Returns:
      consumption rate in specified unit
    • getScavengerExcess

      public double getScavengerExcess()
      Get scavenger excess over stoichiometric requirement.
      Returns:
      excess as fraction (0 = stoichiometric, 1 = 100% excess)
    • calculateHourlyCost

      public double calculateHourlyCost(double costPerUnit, String unit)
      Calculate scavenger cost.
      Parameters:
      costPerUnit - cost per unit of scavenger
      unit - cost unit basis ("$/L", "$/gal", "$/kg", "$/lb")
      Returns:
      hourly cost in same currency
    • getPerformanceSummary

      public String getPerformanceSummary()
      Get summary report of scavenger performance.
      Returns:
      formatted string with performance summary
    • toJson

      public String toJson()

      Serializes the Process Equipment along with its state to a JSON string.

      Specified by:
      toJson in interface ProcessEquipmentInterface
      Overrides:
      toJson in class TwoPortEquipment
      Returns:
      json string.