Class EmissionsCalculator

java.lang.Object
neqsim.process.equipment.util.EmissionsCalculator
All Implemented Interfaces:
Serializable

public class EmissionsCalculator extends Object implements Serializable
Utility class for calculating greenhouse gas emissions from process streams.

Calculates CO2, methane, and non-methane VOC (nmVOC) emissions from gas streams, typically from produced water degassing, cold flares, or other venting points.

Based on methodology from "Virtual Measurement of Emissions from Produced Water Using an Online Process Simulator" (GFMW 2023).

Norwegian Regulatory Framework

Complies with Norwegian offshore emission quantification requirements:

  • Aktivitetsforskriften (Activity Regulations) Section 70: Measurement and calculation
  • Norsk olje og gass: "Handbook for quantification of direct emissions"
  • Norwegian Environment Agency reporting requirements

Calculation Methods

This class supports two calculation approaches:

Emission calculation methods comparison
Method Accuracy Use Case
Thermodynamic (CPA-EoS) +/-3.6% Virtual measurement (recommended)
Conventional handbook +/-50% Screening/fallback only

Usage Example


// Calculate emissions from a separator gas outlet
EmissionsCalculator calc = new EmissionsCalculator(separator.getGasOutStream());
calc.calculate();

System.out.println("CO2: " + calc.getCO2EmissionRate("kg/hr") + " kg/hr");
System.out.println("Methane: " + calc.getMethaneEmissionRate("kg/hr") + " kg/hr");
System.out.println("CO2 equivalents: " + calc.getCO2Equivalents("tonnes/year") + " t/yr");

// Compare with conventional method
double conventionalCH4 = EmissionsCalculator.calculateConventionalCH4(waterVol, dP);
System.out.println("Conventional method gives: " + conventionalCH4 + " kg");

Version:
1.1
Author:
ESOL
See Also:
  • Field Details

    • serialVersionUID

      private static final long serialVersionUID
      See Also:
    • GWP_METHANE

      public static final double GWP_METHANE
      Global Warming Potential for methane (IPCC AR5 100-year).
      See Also:
    • GWP_NMVOC

      public static final double GWP_NMVOC
      Global Warming Potential for nmVOC (approximate average).
      See Also:
    • GWP_CO2

      public static final double GWP_CO2
      Global Warming Potential for CO2.
      See Also:
    • HOURS_PER_YEAR

      private static final double HOURS_PER_YEAR
      Hours per year for annual calculations.
      See Also:
    • HANDBOOK_F_CH4

      public static final double HANDBOOK_F_CH4
      Default methane solubility factor per Norwegian offshore emission handbook. Unit: g/(m³ water · bar). This is used in the conventional calculation method.
      See Also:
    • HANDBOOK_F_NMVOC

      public static final double HANDBOOK_F_NMVOC
      Default nmVOC solubility factor per Norwegian offshore emission handbook. Unit: g/(m³ water · bar). This is used in the conventional calculation method.
      See Also:
    • gasStream

      private StreamInterface gasStream
    • co2EmissionRate

      private double co2EmissionRate
    • methaneEmissionRate

      private double methaneEmissionRate
    • ethaneEmissionRate

      private double ethaneEmissionRate
    • propaneEmissionRate

      private double propaneEmissionRate
    • butanesEmissionRate

      private double butanesEmissionRate
    • pentanesEmissionRate

      private double pentanesEmissionRate
    • heavierEmissionRate

      private double heavierEmissionRate
    • nitrogenEmissionRate

      private double nitrogenEmissionRate
    • waterVaporRate

      private double waterVaporRate
    • totalGasRate

      private double totalGasRate
    • cumulativeCO2_kg

      private double cumulativeCO2_kg
    • cumulativeMethane_kg

      private double cumulativeMethane_kg
    • cumulativeNMVOC_kg

      private double cumulativeNMVOC_kg
    • cumulativeTotalGas_kg

      private double cumulativeTotalGas_kg
    • totalRunTime_hours

      private double totalRunTime_hours
  • Constructor Details

    • EmissionsCalculator

      public EmissionsCalculator(StreamInterface gasStream)
      Creates an emissions calculator for a gas stream.
      Parameters:
      gasStream - the gas stream to calculate emissions from
    • EmissionsCalculator

      public EmissionsCalculator(Separator separator)
      Creates an emissions calculator from a separator's gas outlet.
      Parameters:
      separator - the separator equipment
  • Method Details

    • calculate

      public void calculate()
      Calculate emissions from the current stream conditions.
    • updateCumulative

      public void updateCumulative(double timeStep_hours)
      Update cumulative emissions tracking.
      Parameters:
      timeStep_hours - time step in hours
    • resetCumulative

      public void resetCumulative()
      Reset cumulative tracking.
    • getCO2EmissionRate

      public double getCO2EmissionRate(String unit)
      Get CO2 emission rate.
      Parameters:
      unit - "kg/sec", "kg/hr", "tonnes/day", "tonnes/year"
      Returns:
      emission rate in specified unit
    • getMethaneEmissionRate

      public double getMethaneEmissionRate(String unit)
      Get methane emission rate.
      Parameters:
      unit - "kg/sec", "kg/hr", "tonnes/day", "tonnes/year"
      Returns:
      emission rate in specified unit
    • getNMVOCEmissionRate

      public double getNMVOCEmissionRate(String unit)
      Get non-methane VOC (nmVOC) emission rate. Includes C2+ hydrocarbons.
      Parameters:
      unit - "kg/sec", "kg/hr", "tonnes/day", "tonnes/year"
      Returns:
      emission rate in specified unit
    • getTotalGasRate

      public double getTotalGasRate(String unit)
      Get total gas emission rate.
      Parameters:
      unit - "kg/sec", "kg/hr", "tonnes/day", "tonnes/year"
      Returns:
      emission rate in specified unit
    • getNitrogenEmissionRate

      public double getNitrogenEmissionRate(String unit)
      Get nitrogen emission rate.
      Parameters:
      unit - "kg/sec", "kg/hr", "tonnes/day", "tonnes/year"
      Returns:
      emission rate in specified unit
    • getCO2Equivalents

      public double getCO2Equivalents(String unit)
      Calculate CO2 equivalent emissions using GWP-100 factors.
      Parameters:
      unit - "kg/sec", "kg/hr", "tonnes/day", "tonnes/year"
      Returns:
      CO2 equivalent emission rate
    • getCumulativeCO2Equivalents

      public double getCumulativeCO2Equivalents(String unit)
      Get cumulative CO2 equivalent emissions.
      Parameters:
      unit - "kg", "tonnes"
      Returns:
      cumulative CO2 equivalents
    • getCumulativeCO2

      public double getCumulativeCO2(String unit)
      Get cumulative CO2 emissions.
      Parameters:
      unit - "kg" or "tonnes"
      Returns:
      cumulative emissions
    • getCumulativeMethane

      public double getCumulativeMethane(String unit)
      Get cumulative methane emissions.
      Parameters:
      unit - "kg" or "tonnes"
      Returns:
      cumulative emissions
    • getCumulativeNMVOC

      public double getCumulativeNMVOC(String unit)
      Get cumulative nmVOC emissions.
      Parameters:
      unit - "kg" or "tonnes"
      Returns:
      cumulative emissions
    • getTotalRunTime

      public double getTotalRunTime()
      Get total run time for cumulative tracking.
      Returns:
      run time in hours
    • getGasCompositionMass

      public Map<String,Double> getGasCompositionMass()
      Get gas composition as mass fractions.
      Returns:
      map of component name to mass fraction
    • getGasCompositionMole

      public Map<String,Double> getGasCompositionMole()
      Get gas composition as mole fractions from the gas phase.
      Returns:
      map of component name to mole fraction
    • calculateGWMF

      public double calculateGWMF(double waterFlowRate_m3hr, double pressureDrop_bar)
      Calculate gas-to-water mass factor (GWMF).
      Parameters:
      waterFlowRate_m3hr - water flow rate in m³/hr
      pressureDrop_bar - pressure drop in bar
      Returns:
      GWMF in g/m³/bar
    • calculateMethaneFactor

      public double calculateMethaneFactor(double waterFlowRate_m3hr, double pressureDrop_bar)
      Calculate methane solubility factor.
      Parameters:
      waterFlowRate_m3hr - water flow rate in m³/hr
      pressureDrop_bar - pressure drop in bar
      Returns:
      methane factor in g/m³/bar
    • calculateNMVOCFactor

      public double calculateNMVOCFactor(double waterFlowRate_m3hr, double pressureDrop_bar)
      Calculate nmVOC solubility factor.
      Parameters:
      waterFlowRate_m3hr - water flow rate in m³/hr
      pressureDrop_bar - pressure drop in bar
      Returns:
      nmVOC factor in g/m³/bar
    • calculateConventionalCH4

      public static double calculateConventionalCH4(double producedWaterVolume_m3, double pressureDrop_bar)
      Calculate methane emissions using conventional Norwegian handbook method.

      Formula: U_CH4 = f_CH4 × V_pw × ΔP × 10⁻⁶

      Where:

      • f_CH4 = 14 g/(m³·bar) - standard solubility factor
      • V_pw = produced water volume (m³)
      • ΔP = pressure drop (bar)

      Note: This conventional method typically overestimates CH4 by ~60% and misses CO2 entirely. Use thermodynamic method (CPA-EoS) for accurate reporting.

      Parameters:
      producedWaterVolume_m3 - produced water volume in m³
      pressureDrop_bar - pressure drop in bar
      Returns:
      methane emission in tonnes
    • calculateConventionalNMVOC

      public static double calculateConventionalNMVOC(double producedWaterVolume_m3, double pressureDrop_bar)
      Calculate nmVOC emissions using conventional Norwegian handbook method.

      Formula: U_nmVOC = f_nmVOC × V_pw × ΔP × 10⁻⁶

      Note: This conventional method does not distinguish individual VOC components. Use thermodynamic method for detailed component breakdown.

      Parameters:
      producedWaterVolume_m3 - produced water volume in m³
      pressureDrop_bar - pressure drop in bar
      Returns:
      nmVOC emission in tonnes
    • calculateConventionalEmissions

      public static Map<String,Double> calculateConventionalEmissions(double producedWaterVolume_m3, double pressureDrop_bar)
      Calculate total emissions using conventional Norwegian handbook method.

      This is the traditional method used before thermodynamic modeling. It assumes all dissolved gas is hydrocarbon (methane + nmVOC) and ignores CO2 completely.

      Parameters:
      producedWaterVolume_m3 - produced water volume in m³
      pressureDrop_bar - pressure drop in bar
      Returns:
      map with CH4, nmVOC, and CO2eq values in tonnes
    • compareWithConventionalMethod

      public Map<String,Object> compareWithConventionalMethod(double producedWaterVolume_m3, double pressureDrop_bar)
      Compare thermodynamic vs conventional method results.

      Generates a comparison showing how much the conventional method differs from the thermodynamic calculation. Useful for demonstrating the improvement from virtual measurement.

      Parameters:
      producedWaterVolume_m3 - produced water volume in m³
      pressureDrop_bar - pressure drop in bar
      Returns:
      map with comparison metrics
    • calculateGWR

      public double calculateGWR(double waterFlowRate_m3hr)
      Calculate Gas-Water Ratio (GWR) at standard conditions.

      GWR is defined as Sm³ gas evolved per Sm³ water at standard conditions. This is a key metric for validating the thermodynamic model against lab analysis.

      Parameters:
      waterFlowRate_m3hr - water flow rate in m³/hr at process conditions
      Returns:
      GWR in Sm³ gas / Sm³ water
    • calculateGWR

      public static double calculateGWR(double gasMoles_kmol, double waterVolume_m3)
      Calculate Gas-Water Ratio from known gas composition.

      Alternative GWR calculation when you know the total gas moles released.

      Parameters:
      gasMoles_kmol - total gas moles released (kmol)
      waterVolume_m3 - water volume at standard conditions (m³)
      Returns:
      GWR in Sm³ gas / Sm³ water
    • generateReport

      public String generateReport()
      Generate emissions report as formatted string.
      Returns:
      formatted emissions report
    • toMap

      public Map<String,Object> toMap()
      Get emissions data as a map for JSON export or database storage.
      Returns:
      map of emission data
    • resetRates

      private void resetRates()
    • getComponentRate

      private double getComponentRate(PhaseInterface phase, String componentName)
    • isHeavierHydrocarbon

      private boolean isHeavierHydrocarbon(String name)
    • convertRate

      private double convertRate(double rateKgSec, String unit)