Class EmissionsCalculator
- All Implemented Interfaces:
Serializable
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:
| 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 Summary
FieldsModifier and TypeFieldDescriptionprivate doubleprivate doubleprivate doubleprivate doubleprivate doubleprivate doubleprivate doubleprivate StreamInterfacestatic final doubleGlobal Warming Potential for CO2.static final doubleGlobal Warming Potential for methane (IPCC AR5 100-year).static final doubleGlobal Warming Potential for nmVOC (approximate average).static final doubleDefault methane solubility factor per Norwegian offshore emission handbook.static final doubleDefault nmVOC solubility factor per Norwegian offshore emission handbook.private doubleprivate static final doubleHours per year for annual calculations.private doubleprivate doubleprivate doubleprivate doubleprivate static final longprivate doubleprivate doubleprivate double -
Constructor Summary
ConstructorsConstructorDescriptionEmissionsCalculator(Separator separator) Creates an emissions calculator from a separator's gas outlet.EmissionsCalculator(StreamInterface gasStream) Creates an emissions calculator for a gas stream. -
Method Summary
Modifier and TypeMethodDescriptionvoidCalculate emissions from the current stream conditions.static doublecalculateConventionalCH4(double producedWaterVolume_m3, double pressureDrop_bar) Calculate methane emissions using conventional Norwegian handbook method.calculateConventionalEmissions(double producedWaterVolume_m3, double pressureDrop_bar) Calculate total emissions using conventional Norwegian handbook method.static doublecalculateConventionalNMVOC(double producedWaterVolume_m3, double pressureDrop_bar) Calculate nmVOC emissions using conventional Norwegian handbook method.doublecalculateGWMF(double waterFlowRate_m3hr, double pressureDrop_bar) Calculate gas-to-water mass factor (GWMF).doublecalculateGWR(double waterFlowRate_m3hr) Calculate Gas-Water Ratio (GWR) at standard conditions.static doublecalculateGWR(double gasMoles_kmol, double waterVolume_m3) Calculate Gas-Water Ratio from known gas composition.doublecalculateMethaneFactor(double waterFlowRate_m3hr, double pressureDrop_bar) Calculate methane solubility factor.doublecalculateNMVOCFactor(double waterFlowRate_m3hr, double pressureDrop_bar) Calculate nmVOC solubility factor.compareWithConventionalMethod(double producedWaterVolume_m3, double pressureDrop_bar) Compare thermodynamic vs conventional method results.private doubleconvertRate(double rateKgSec, String unit) Generate emissions report as formatted string.doublegetCO2EmissionRate(String unit) Get CO2 emission rate.doublegetCO2Equivalents(String unit) Calculate CO2 equivalent emissions using GWP-100 factors.private doublegetComponentRate(PhaseInterface phase, String componentName) doublegetCumulativeCO2(String unit) Get cumulative CO2 emissions.doubleGet cumulative CO2 equivalent emissions.doublegetCumulativeMethane(String unit) Get cumulative methane emissions.doublegetCumulativeNMVOC(String unit) Get cumulative nmVOC emissions.Get gas composition as mass fractions.Get gas composition as mole fractions from the gas phase.doublegetMethaneEmissionRate(String unit) Get methane emission rate.doubleGet nitrogen emission rate.doublegetNMVOCEmissionRate(String unit) Get non-methane VOC (nmVOC) emission rate.doublegetTotalGasRate(String unit) Get total gas emission rate.doubleGet total run time for cumulative tracking.private booleanisHeavierHydrocarbon(String name) voidReset cumulative tracking.private voidtoMap()Get emissions data as a map for JSON export or database storage.voidupdateCumulative(double timeStep_hours) Update cumulative emissions tracking.
-
Field Details
-
serialVersionUID
private static final long serialVersionUID- See Also:
-
GWP_METHANE
public static final double GWP_METHANEGlobal Warming Potential for methane (IPCC AR5 100-year).- See Also:
-
GWP_NMVOC
public static final double GWP_NMVOCGlobal Warming Potential for nmVOC (approximate average).- See Also:
-
GWP_CO2
public static final double GWP_CO2Global Warming Potential for CO2.- See Also:
-
HOURS_PER_YEAR
private static final double HOURS_PER_YEARHours per year for annual calculations.- See Also:
-
HANDBOOK_F_CH4
public static final double HANDBOOK_F_CH4Default 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_NMVOCDefault nmVOC solubility factor per Norwegian offshore emission handbook. Unit: g/(m³ water · bar). This is used in the conventional calculation method.- See Also:
-
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
Creates an emissions calculator for a gas stream.- Parameters:
gasStream- the gas stream to calculate emissions from
-
EmissionsCalculator
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
Get CO2 emission rate.- Parameters:
unit- "kg/sec", "kg/hr", "tonnes/day", "tonnes/year"- Returns:
- emission rate in specified unit
-
getMethaneEmissionRate
Get methane emission rate.- Parameters:
unit- "kg/sec", "kg/hr", "tonnes/day", "tonnes/year"- Returns:
- emission rate in specified unit
-
getNMVOCEmissionRate
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
Get total gas emission rate.- Parameters:
unit- "kg/sec", "kg/hr", "tonnes/day", "tonnes/year"- Returns:
- emission rate in specified unit
-
getNitrogenEmissionRate
Get nitrogen emission rate.- Parameters:
unit- "kg/sec", "kg/hr", "tonnes/day", "tonnes/year"- Returns:
- emission rate in specified unit
-
getCO2Equivalents
Calculate CO2 equivalent emissions using GWP-100 factors.- Parameters:
unit- "kg/sec", "kg/hr", "tonnes/day", "tonnes/year"- Returns:
- CO2 equivalent emission rate
-
getCumulativeCO2Equivalents
Get cumulative CO2 equivalent emissions.- Parameters:
unit- "kg", "tonnes"- Returns:
- cumulative CO2 equivalents
-
getCumulativeCO2
Get cumulative CO2 emissions.- Parameters:
unit- "kg" or "tonnes"- Returns:
- cumulative emissions
-
getCumulativeMethane
Get cumulative methane emissions.- Parameters:
unit- "kg" or "tonnes"- Returns:
- cumulative emissions
-
getCumulativeNMVOC
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
-
getGasCompositionMole
-
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³/hrpressureDrop_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³/hrpressureDrop_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³/hrpressureDrop_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
Generate emissions report as formatted string.- Returns:
- formatted emissions report
-
toMap
-
resetRates
private void resetRates() -
getComponentRate
-
isHeavierHydrocarbon
-
convertRate
-