π± Emissions & Sustainability
NeqSim provides physics-based emission calculations for offshore oil & gas operations, enabling accurate regulatory reporting and decarbonization planning.
Quick Links
π Documentation
- Offshore Emission Reporting Guide β Reference
- API Reference (Chapter 43) β EmissionsCalculator class
π Tutorials
- Produced Water Emissions Tutorial β Interactive Jupyter notebook
- Norwegian Methods Comparison β Validation against handbook
- Java Example β Complete code sample
Emission Sources Covered
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
β OFFSHORE PLATFORM EMISSIONS β
ββββββββββββββββββββ¬βββββββββββββββββββ¬ββββββββββββββββββββββββ€
β COMBUSTION β VENTING β FUGITIVE β
β (typically β (typically β (typically β
β dominant) β 5-20%) β <5%) β
ββββββββββββββββββββΌβββββββββββββββββββΌββββββββββββββββββββββββ€
β β’ Gas turbines β β’ Cold vents β β’ Valve/flange leaks β
β β’ Diesel engines β β’ Tank breathing β β’ Compressor seals β
β β’ Flares β β’ PW degassing β β’ Pump seals β
β β’ Heaters β β’ TEG regen. β β’ Pipe connections β
ββββββββββββββββββββ΄βββββββββββββββββββ΄ββββββββββββββββββββββββ
Source distribution varies significantly by facility type, age, and operations.
NeqSim specializes in venting emissions from:
- Produced water degassing (Degasser, CFU, Caisson)
- TEG regeneration off-gas
- Tank breathing/loading losses
- Cold vent streams
Regulatory Compliance
| Regulation/Framework | Jurisdiction | NeqSim Capability |
|---|---|---|
| Aktivitetsforskriften Β§70 | Norway | Virtual measurement methodology |
| EU ETS Directive | European Union | COβ equivalent reporting |
| EU Methane Regulation 2024/1787 | European Union | Source-level CHβ quantification |
| OGMP 2.0 (voluntary) | International | Supports Level 4/5 site-specific methods |
| ISO 14064-1:2018 | International | Organization-level GHG inventory |
Online Emission Calculation & Automated Reporting
NeqSim can be deployed for online emission calculations, enabling real-time monitoring and automated regulatory reporting. This capability transforms emissions management from a periodic reporting exercise into a continuous operational tool.
Field Deployment Architecture
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
β ONLINE EMISSION CALCULATION SYSTEM β
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ€
β β
β PLANT DATA NEQSIM ENGINE REPORTING β
β ββββββββββ βββββββββββββ βββββββββ β
β β
β βββββββββββββ βββββββββββββββββββ βββββββββββββββ β
β β SCADA βββββββββββββββββ Thermodynamic β β Dashboard β β
β β Real-timeβ Flow rates β Model β β (Real-time)β β
β β tags β Pressures β β βββββββββββββββ β
β βββββββββββββ Temperatures β β’ CPA/SRK EoS β β β
β β β’ SΓΈreide- β βΌ β
β βββββββββββββ β Whitson β βββββββββββββββ β
β β Lab βββββββββββββββββ β’ Multi-stage ββββββββ Automated β β
β β Analysis β Compositions β separation β β Reports β β
β β β Water cuts β β β (Daily/ β β
β βββββββββββββ βββββββββββββββββββ β Monthly) β β
β β βββββββββββββββ β
β βββββββββββββ β β β
β β Historian βββββββββββββββββββββββββ βΌ β
β β Archive β Store calculated βββββββββββββββ β
β β β emissions for audit β Regulatory β β
β βββββββββββββ β Submission β β
β β β
β βββββββββββββββ β
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
Thermodynamic Model: SΓΈreide-Whitson
For produced water emission calculations, NeqSim provides the SΓΈreide-Whitson thermodynamic model to account for the effect of formation water salinity on gas solubility (the βsalting-outβ effect). This model is used in NeqSimLive for real-time emission calculations on offshore platforms.
Key features:
- Modified Peng-Robinson equation of state with salinity-dependent parameters for water
- Accounts for reduction in gas solubility due to ionic strength
- Supports multiple salt types (NaCl, CaClβ, MgClβ, etc.)
- Validated against experimental data for CHβ, COβ, HβS, and Nβ in brine
Reference: SΓΈreide, I. & Whitson, C.H. (1992). βPeng-Robinson predictions for hydrocarbons, COβ, Nβ, and HβS with pure water and NaCl brineβ. Fluid Phase Equilibria, 77, 217-240.
π Detailed SΓΈreide-Whitson Model Documentation β Mathematical formulation, salt type coefficients, validation data, and code examples.
Method Comparison
| Aspect | Conventional (Handbook) | Thermodynamic (NeqSim) |
|---|---|---|
| Approach | Empirical correlations | Rigorous phase equilibrium (CPA-EoS) |
| COβ accounting | Simplified factors | Explicit component tracking |
| Salinity effects | Typically not included | SΓΈreide-Whitson salting-out model |
| Temperature effects | Linear correlations | Full equation of state |
| Computational cost | Low (spreadsheet) | Moderate (requires simulator) |
| Regulatory acceptance | Widely established | Accepted under Aktivitetsforskriften Β§70 |
| Transparency | Published factors | Open-source algorithms |
Quick Start
Python (neqsim-python)
from neqsim import jneqsim
# Create CPA fluid for accurate water-hydrocarbon VLE
fluid = jneqsim.thermo.system.SystemSrkCPAstatoil(273.15 + 80, 30.0)
fluid.addComponent("water", 0.90)
fluid.addComponent("CO2", 0.03)
fluid.addComponent("methane", 0.05)
fluid.addComponent("ethane", 0.015)
fluid.addComponent("propane", 0.005)
fluid.setMixingRule(10) # CPA mixing rule
# Create stream and separator
Stream = jneqsim.process.equipment.stream.Stream
Separator = jneqsim.process.equipment.separator.Separator
EmissionsCalculator = jneqsim.process.equipment.util.EmissionsCalculator
feed = Stream("PW-Feed", fluid)
feed.setFlowRate(100000, "kg/hr") # ~100 mΒ³/hr
feed.run()
degasser = Separator("Degasser", feed)
degasser.run()
# Calculate emissions
calc = EmissionsCalculator(degasser.getGasOutStream())
calc.calculate()
print(f"CO2: {calc.getCO2EmissionRate('tonnes/year'):.0f} tonnes/year")
print(f"Methane: {calc.getMethaneEmissionRate('tonnes/year'):.0f} tonnes/year")
print(f"CO2eq: {calc.getCO2Equivalents('tonnes/year'):.0f} tonnes/year")
Java
import neqsim.process.equipment.util.EmissionsCalculator;
import neqsim.process.equipment.separator.Separator;
// After setting up your process...
EmissionsCalculator calc = new EmissionsCalculator(separator.getGasOutStream());
calc.calculate();
double co2eq = calc.getCO2Equivalents("tonnes/year");
System.out.println("CO2 Equivalent: " + co2eq + " tonnes/year");
Why NeqSim for Emissions?
π― Rigorous Thermodynamics
Physics-based CPA equation of state models water-hydrocarbon phase behavior including associating interactions.π Comprehensive Accounting
Explicitly models all gas components including COβ, which can be significant in produced water emissions depending on reservoir fluid composition.π Open Source
Transparent algorithms auditable by regulators. No vendor lock-in.π Future-Ready
Supports digital twins, live monitoring, online optimization, CO2 and hydrogen value chains.Online Emission Calculation: Transforming Operator Visibility
The Value of Online Emission Monitoring
Traditional emission reporting is typically retrospective β operators compile emission data periodically (monthly, quarterly). Online monitoring provides more frequent visibility:
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
β PERIODIC vs ONLINE EMISSION MONITORING β
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ€
β β
β PERIODIC (Retrospective) ONLINE (Continuous) β
β βββββββββββββββββββββββββββ ββββββββββββββββββββ β
β β
β βββββββ βββββββ βββββββ βββββββ ββββββββ β
β βMonthβββββΆβMonthβββββΆβReportβ β Now βββββΆβReviewβ β
β β 1 β β 2 β β β β β β β β
β βββββββ βββββββ βββββββ βββββββ ββββββββ β
β β β β β
β βΌ β βΌ β
β "Emissions for β "Current emission β
β Q3: X tonnes" β rate: Y kg/hr" β
β β β
β Established regulatory workflow More frequent feedback β
β Aggregated reporting Better operations linkage β
β Compliance-oriented Supports optimization β
β Clear audit trail Enables trend analysis β
β β
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
Advantages of Online Emission Calculation
ποΈ Real-Time Visibility
- See emissions as they happen, not months later
- Immediate feedback on operational changes
- Dashboard showing live COβeq/hour
π Cause-Effect Understanding
- Link operational decisions to emission impact
- Correlate process changes with emission response
- Data-driven decision making
π― Targeted Reduction
- Identify highest emission sources instantly
- Focus effort where impact is greatest
- Track reduction initiatives in real-time
π Continuous Improvement
- More frequent improvement cycles
- Operational targets with emission KPIs
- Team engagement through transparency
Operator Empowerment: From Compliance to Optimization
Online emission calculation transforms the operator mindset:
| Traditional Approach | Online-Enabled Approach |
|---|---|
| Emissions reported periodically (monthly/quarterly) | Emissions calculated continuously |
| Compliance-focused reporting | Combines compliance with operational insight |
| Targets set during planning | Better visibility into emission drivers |
| Feedback through periodic reports | More timely feedback on operational changes |
| Focus on meeting reporting requirements | Enables data-driven emission management |
Key Use Cases for Operators
1. Daily Emission Dashboards
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
β PLATFORM EMISSION DASHBOARD β
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ€
β β
β TODAY: 2026-02-01 14:35 Target: 500 t COβeq β
β βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ β
β β
β TOTAL EMISSIONS BREAKDOWN BY SOURCE β
β βββββββββββββββββββββββ ββββββββββββββββββββββββββββββββββ β
β β β β Turbines ββββββββββ 62% β β
β β 487 t COβeq β β Flaring ββββββββββ 18% β β
β β ββββββββββββββ β β PW Degassing ββββββββββ 12% β β
β β Target: 500 t β β Fugitive ββββββββββ 5% β β
β β Status: β
ON TRACKβ β Other ββββββββββ 3% β β
β β β ββββββββββββββββββββββββββββββββββ β
β βββββββββββββββββββββββ β
β β
β TREND (Last 24 Hours) REDUCTION OPPORTUNITIES β
β βββββββββββββββββββββββ ββββββββββββββββββββββββββββββββββ β
β β β±β² β β β‘ Reduce sep pressure by 2 barβ β
β β β± β² β±β² β β Est. saving: 8 t/day β β
β β β± β² β± β² β± β β β β
β β β± β²β± β²β± β β β‘ Optimize compressor load β β
β β β β Est. saving: 12 t/day β β
β βββββββββββββββββββββββ ββββββββββββββββββββββββββββββββββ β
β β
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
2. What-If Analysis
Operators can instantly evaluate emission impact of operational changes:
# Operator wants to know: "What if I increase separator temperature?"
scenarios = [
{"sep_temp": 70, "description": "Current operation"},
{"sep_temp": 75, "description": "+5Β°C"},
{"sep_temp": 80, "description": "+10Β°C"},
{"sep_temp": 85, "description": "+15Β°C"},
]
print("What-If Analysis: Separator Temperature Impact")
print("=" * 60)
for scenario in scenarios:
result = evaluate_operation([sep_pressure, scenario['sep_temp']])
print(f"{scenario['description']:20} | "
f"Emissions: {result['emissions_co2eq']:,.0f} t/yr | "
f"Production: {result['gas_rate']:.2f} MSmΒ³/d")
3. Emission Alerts & Anomaly Detection
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
β EMISSION ALERT SYSTEM β
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ€
β β
β π΄ ALERT: Methane emissions 35% above baseline β
β βββββββββββββββββββββββββββββββββββββββββββββββββ β
β Time: 14:32 UTC β
β Source: HP Separator liquid outlet β
β Current: 45 kg/hr CHβ Baseline: 33 kg/hr CHβ β
β β
β Possible causes: β
β β’ Separator level too high (check LIC-101) β
β β’ Gas carry-under to liquid phase β
β β’ Changed feed composition β
β β
β Recommended actions: β
β 1. Check separator level controller output β
β 2. Review feed analysis from last sample β
β 3. Consider reducing throughput temporarily β
β β
β [Acknowledge] [Investigate] [Dismiss] β
β β
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
4. Shift Handover with Emission Context
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
β SHIFT HANDOVER REPORT β
β Night Shift β Day Shift β
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ€
β β
β EMISSION SUMMARY (Last 12 hours) β
β βββββββββββββββββββββββββββββββββ β
β Total COβeq: 245 tonnes (vs target 250) β
β
β Methane vented: 12.3 tonnes β
β Flared gas: 0.8 MSmΒ³ β
β β
β KEY EVENTS β
β ββββββββββ β
β β’ 02:15 - Reduced flaring by 30% after compressor restart β
β β’ 04:45 - PW degassing spike due to slug arrival (normalized by 05:30) β
β β’ 06:00 - Implemented new separator setpoint (emissions -8%) β
β β
β HANDOVER NOTES β
β ββββββββββββββ β
β β’ New separator setpoint working well - recommend keeping β
β β’ Watch for another slug expected around 10:00 β
β β’ Turbine B showing higher than normal emissions - maintenance aware β
β β
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
Emission Reduction Strategies Enabled by Online Monitoring
| Strategy | How Online Monitoring Helps | Potential Benefit |
|---|---|---|
| Operating Envelope Optimization | Identify conditions where production is maintained with lower emissions | Site-specific; depends on operating flexibility |
| Flare Minimization | Real-time flare gas tracking enables faster response | Depends on current flaring levels |
| Leak Detection (LDAR) | Anomaly detection can flag fugitive emission increases | Depends on baseline fugitive levels |
| Produced Water Management | Optimize degassing stages based on modeled dissolved gas | Depends on water volume and gas content |
| Compressor Optimization | Balance power consumption vs venting from recycle | Depends on compressor operating range |
| Predictive Scheduling | Plan maintenance during low-emission windows | Depends on maintenance flexibility |
Building an Emission-Aware Culture
Online emission monitoring can support cultural transformation toward emission awareness:
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
β EMISSION-AWARE OPERATIONAL CULTURE β
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ€
β β
β LEVEL 1: AWARENESS β
β βββββββββββββββββββββ β
β Real-time emissions visible in control room β
β β Dashboards display current emission rates β
β β Daily reports included in morning meetings β
β β
β LEVEL 2: UNDERSTANDING β
β βββββββββββββββββββββββββ β
β Operations understand emission drivers β
β β Training on emission sources and mechanisms β
β β What-if analysis tools available β
β β
β LEVEL 3: OWNERSHIP β
β βββββββββββββββββββββ β
β Teams take responsibility for emission performance β
β β Emission KPIs included in operational targets β
β β Operators propose and test reduction ideas β
β β
β LEVEL 4: OPTIMIZATION β
β ββββββββββββββββββββββββ β
β Active optimization for reduced emissions β
β β Automated advisory systems with emission constraints β
β β Continuous improvement integrated in daily operations β
β β
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
Implementation Roadmap
| Phase | Duration | Activities | Outcome |
|---|---|---|---|
| 1. Pilot | 1-2 months | Deploy NeqSim model for one emission source | Proof of concept |
| 2. Expand | 2-3 months | Add all major emission sources | Complete visibility |
| 3. Integrate | 1-2 months | Connect to SCADA, build dashboards | Real-time monitoring |
| 4. Optimize | Ongoing | Implement reduction strategies | Continuous improvement |
Support
β Support Infrastructure
| Support Channel | Description | Response |
|---|---|---|
| GitHub Issues | equinor/neqsim/issues | Active maintainers, typically < 48h |
| GitHub Discussions | Q&A forum | Community + core team |
| Equinor Internal | Internal Teams channel, expert network | Same-day for critical issues |
| NTNU Collaboration | Academic partnership for advanced thermodynamics | Research support |
β Documentation
| Documentation Type | Status | Location |
|---|---|---|
| API Reference | β Complete | JavaDoc, Reference Manual |
| Getting Started | β Complete | Wiki |
| Emission Calculations | β Complete | This page + Guide |
| Interactive Tutorials | β Complete | Jupyter Notebooks with Colab links |
| Code Examples | β Complete | Java + Python examples for all features |
| Regulatory Context | β Complete | Norwegian/EU framework documented |
| Validation Data | β Complete | Gudrun case study, uncertainty analysis |
β Expertise & Learning Path
Time to Competency:
| Level | Timeframe | Deliverable |
|---|---|---|
| Basic User | 1-2 days | Run emission calculations using provided notebooks |
| Process Engineer | 1-2 weeks | Build custom process models, interpret results |
| Developer | 2-4 weeks | Integrate into applications, extend functionality |
| Expert | 2-3 months | Customize thermodynamic models, contribute code |
Learning Resources:
- Self-Paced
- Interactive Jupyter notebooks (run in browser via Colab)
- Step-by-step tutorials with explanations
- Example code library
- Guided
- Equinor internal training sessions (2-day workshop)
- NTNU course modules (thermodynamics background)
- Pair programming with experienced users
- Reference
- Complete API documentation
- Theory background in Kontogeorgis & Folas (2010)
- Application notes for specific use cases
β Integration & Deployment Options
| Deployment | Complexity | Use Case |
|---|---|---|
| Python Notebook | β Low | Ad-hoc analysis, prototyping |
| Python Script | β Low | Batch processing, automation |
| Java Application | ββ Medium | Enterprise integration |
| REST API/Microservice | ββ Medium | Real-time digital twins |
| Excel Add-in | β Low | End-user access (via Python) |
| Cloud Deployment | ββ Medium | Azure, AWS, Kubernetes |
Comparison: NeqSim vs Commercial Alternatives
| Aspect | NeqSim | Commercial Tools |
|---|---|---|
| License Cost | Free (Apache 2.0) | Varies by vendor |
| Source Code Access | Full access | Typically limited |
| Customization | Unlimited | Vendor-dependent |
| Audit Trail | Git history | Vendor-dependent |
| Regulatory Defense | Transparent algorithms, peer review | Established vendor support |
| Long-term Availability | Open source, community-maintained | Vendor support agreements |
| Integration Flexibility | Java/Python/REST | Varies by product |
| Support | Community + Equinor | Vendor SLA |
| Validation/Certification | User responsibility | Often pre-validated |
Production Optimization with Emission & Energy Minimization
The Multi-Objective Challenge
Modern offshore operations face competing objectives that must be optimized simultaneously:
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
β MULTI-OBJECTIVE PRODUCTION OPTIMIZATION β
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ€
β β
β MAXIMIZE MINIMIZE β
β ββββββββ ββββββββ β
β β’ Oil/gas production β’ COβ equivalent emissions β
β β’ Revenue β’ Energy consumption β
β β’ Export quality β’ Flaring/venting β
β β’ Uptime β’ Operating costs β
β β
β βββββββββββββββββββ β
β β NEQSIM β β
β β PROCESS MODEL β β
β ββββββββββ¬βββββββββ β
β β β
β βββββββββββββββββΌββββββββββββββββ β
β βΌ βΌ βΌ β
β βββββββββββ βββββββββββ βββββββββββ β
β βPRODUCTIONβ βEMISSIONSβ β ENERGY β β
β β MODEL β β CALC β β BALANCE β β
β βββββββββββ βββββββββββ βββββββββββ β
β β
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
NeqSim Integrated Optimization Capabilities
NeqSim enables simultaneous optimization of production, emissions, and energy because all three are calculated from the same thermodynamic model:
| Capability | How NeqSim Supports It |
|---|---|
| Consistent Material Balance | Single process model tracks mass flows for production and emissions |
| Energy Integration | Heat/power duties calculated from same thermodynamic properties |
| Computational Speed | Suitable for online optimization applications |
| Gradient Information | Supports efficient optimization algorithms |
| What-If Analysis | Rapid scenario evaluation for operational decisions |
Optimization Problem Formulation
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
β PARETO-OPTIMAL OPERATION β
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ€
β β
β Multi-Objective Function: β
β β
β minimize f(x) = [ -Production(x), β
β Emissions(x), β
β Energy(x) ] β
β β
β subject to: β
β β’ Process constraints (pressures, temperatures, capacities) β
β β’ Product specifications (export quality, water content) β
β β’ Equipment limits (compressor surge, pump curves) β
β β’ Regulatory limits (emission permits, flare consent) β
β β
β Decision variables x: β
β β’ Separator pressures and temperatures β
β β’ Compressor speeds / recycle rates β
β β’ Heat exchanger duties β
β β’ Choke/valve positions β
β β’ Gas lift / injection rates β
β β
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
Python Example: Integrated Optimization
from neqsim import jneqsim
from scipy.optimize import minimize, differential_evolution
import numpy as np
# === SETUP NEQSIM PROCESS MODEL ===
def create_process(sep_pressure, sep_temp, compressor_speed):
"""Create offshore process with given operating parameters."""
# Reservoir fluid
fluid = jneqsim.thermo.system.SystemSrkCPAstatoil(273.15 + 80, 50.0)
fluid.addComponent("water", 0.15)
fluid.addComponent("CO2", 0.02)
fluid.addComponent("methane", 0.60)
fluid.addComponent("ethane", 0.10)
fluid.addComponent("propane", 0.08)
fluid.addComponent("n-butane", 0.05)
fluid.setMixingRule(10)
# Build process
Stream = jneqsim.process.equipment.stream.Stream
Separator = jneqsim.process.equipment.separator.Separator
Compressor = jneqsim.process.equipment.compressor.Compressor
inlet = Stream("Well-Feed", fluid)
inlet.setFlowRate(50000, "kg/hr")
inlet.setTemperature(sep_temp, "C")
inlet.setPressure(sep_pressure, "bara")
sep = Separator("HP-Sep", inlet)
compressor = Compressor("Export-Comp", sep.getGasOutStream())
compressor.setOutletPressure(120.0, "bara")
compressor.setPolytropicEfficiency(0.75)
# Run simulation
process = jneqsim.process.processmodel.ProcessSystem()
process.add(inlet)
process.add(sep)
process.add(compressor)
process.run()
return process, sep, compressor
# === OBJECTIVE FUNCTIONS ===
def evaluate_operation(x):
"""Evaluate production, emissions, and energy for given operation."""
sep_pressure, sep_temp = x
try:
process, sep, compressor = create_process(sep_pressure, sep_temp, 1.0)
# 1. PRODUCTION: Gas export rate (maximize)
gas_rate = sep.getGasOutStream().getFlowRate("MSm3/day")
oil_rate = sep.getLiquidOutStream().getFlowRate("m3/hr")
# 2. EMISSIONS: From liquid degassing (minimize)
EmissionsCalculator = jneqsim.process.equipment.util.EmissionsCalculator
calc = EmissionsCalculator(sep.getGasOutStream())
calc.calculate()
co2eq = calc.getCO2Equivalents("tonnes/year")
# 3. ENERGY: Compressor power (minimize)
power_MW = compressor.getPower("MW")
return {
'gas_rate': gas_rate,
'oil_rate': oil_rate,
'emissions_co2eq': co2eq,
'power_MW': power_MW,
'feasible': True
}
except Exception as e:
return {'feasible': False, 'error': str(e)}
# === WEIGHTED OBJECTIVE (for single-objective solver) ===
def weighted_objective(x, weights={'production': 1.0, 'emissions': 0.5, 'energy': 0.3}):
"""Combined objective with configurable weights."""
result = evaluate_operation(x)
if not result['feasible']:
return 1e10 # Penalty for infeasible
# Normalize and combine (negative production because we maximize it)
obj = (
-weights['production'] * result['gas_rate'] / 10.0 + # Normalize ~10 MSm3/d
weights['emissions'] * result['emissions_co2eq'] / 10000.0 + # Normalize ~10k t/yr
weights['energy'] * result['power_MW'] / 5.0 # Normalize ~5 MW
)
return obj
# === OPTIMIZATION ===
# Bounds: [sep_pressure (bara), sep_temp (Β°C)]
bounds = [(20, 80), (40, 100)]
# Run optimization
result = differential_evolution(
weighted_objective,
bounds,
maxiter=50,
seed=42,
workers=-1 # Parallel
)
print(f"Optimal separator pressure: {result.x[0]:.1f} bara")
print(f"Optimal separator temperature: {result.x[1]:.1f} Β°C")
# Evaluate optimal point
optimal = evaluate_operation(result.x)
print(f"\nOptimal Operation:")
print(f" Gas production: {optimal['gas_rate']:.2f} MSm3/day")
print(f" CO2 equivalent: {optimal['emissions_co2eq']:.0f} tonnes/year")
print(f" Compressor power: {optimal['power_MW']:.2f} MW")
Pareto Front Analysis
For true multi-objective optimization, generate the Pareto front:
from scipy.optimize import minimize
import matplotlib.pyplot as plt
def generate_pareto_front(n_points=20):
"""Generate Pareto-optimal solutions trading off objectives."""
pareto_points = []
# Sweep emission weight from 0 (production only) to 1 (emissions only)
for emission_weight in np.linspace(0.0, 1.0, n_points):
weights = {
'production': 1.0 - emission_weight,
'emissions': emission_weight,
'energy': 0.2 # Fixed energy weight
}
result = differential_evolution(
lambda x: weighted_objective(x, weights),
bounds=[(20, 80), (40, 100)],
maxiter=30,
seed=42
)
if result.success:
eval_result = evaluate_operation(result.x)
if eval_result['feasible']:
pareto_points.append({
'pressure': result.x[0],
'temperature': result.x[1],
'gas_rate': eval_result['gas_rate'],
'emissions': eval_result['emissions_co2eq'],
'power': eval_result['power_MW'],
'emission_weight': emission_weight
})
return pareto_points
# Generate and plot Pareto front
pareto = generate_pareto_front()
plt.figure(figsize=(10, 6))
plt.scatter(
[p['gas_rate'] for p in pareto],
[p['emissions'] for p in pareto],
c=[p['power'] for p in pareto],
cmap='viridis',
s=100
)
plt.colorbar(label='Compressor Power (MW)')
plt.xlabel('Gas Production (MSmΒ³/day)')
plt.ylabel('COβ Equivalent Emissions (tonnes/year)')
plt.title('Pareto Front: Production vs Emissions Trade-off')
plt.grid(True, alpha=0.3)
plt.show()
Real-Time Optimization Architecture
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
β REAL-TIME OPTIMIZATION WITH NEQSIM β
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ€
β β
β ββββββββββββ ββββββββββββ ββββββββββββ ββββββββββββ β
β β SCADA ββββββΆβ STATE ββββββΆβ NEQSIM ββββββΆβOPTIMIZER β β
β β DCS β βESTIMATOR β β MODEL β β β β
β ββββββββββββ ββββββββββββ ββββββββββββ ββββββ¬ββββββ β
β β β β
β β ββββββββββββββββββββββββββββββββββββββββ β
β β β β
β β βΌ β
β β βββββββββββββββββββββββββββββββββββββββββββββββ β
β β β OPTIMAL SETPOINTS β β
β β β β’ Separator P/T β’ Compressor speed β β
β β β β’ Valve positions β’ Heat duties β β
β β βββββββββββββββββββββββββββββββββββββββββββββββ β
β β β β
β β β βββββββββββββββββββββββββββββββββββ β
β β β β OBJECTIVE DASHBOARD β β
β β β β β β
β β β β Production: ββββββββββ 85% β β
β β β β Emissions: ββββββββββ 15% β β
β β β β Energy: ββββββββββ 25% β β
β β β β β β
β β β β COβeq Reduced: 2,500 t/month β β
β β β βββββββββββββββββββββββββββββββββββ β
β β β β
β βββββββββββββ΄ββββββββββββββββΆ CLOSED LOOP β
β β
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
Potential Benefits of Online Emission Monitoring
Note: Actual benefits depend on facility-specific factors including current monitoring practices, operational flexibility, and emission source distribution.
| Metric | Potential Benefit | Environmental Relevance |
|---|---|---|
| Emission Visibility | Real-time monitoring vs periodic reporting | Enables faster response to deviations |
| Methane Tracking | Source-level attribution | High-GWP gas (28Γ COβ over 100 years) |
| Flare Monitoring | Improved flare efficiency tracking | Direct combustion emission quantification |
| Reporting Quality | More frequent, data-driven reports | Better baseline for improvement tracking |
Integration with NeqSim Production Optimizer
NeqSim includes a built-in ProductionOptimizer class that can be extended for multi-objective optimization:
import neqsim.process.processmodel.ProcessSystem;
import neqsim.process.util.optimization.ProductionOptimizer;
// Create process system
ProcessSystem process = new ProcessSystem();
// ... add equipment ...
// Create optimizer with emission constraints
ProductionOptimizer optimizer = new ProductionOptimizer(process);
optimizer.addObjective("gasProduction", "maximize");
optimizer.addObjective("emissions", "minimize");
optimizer.addConstraint("CO2eq", "<=", emissionPermit);
// Run multi-objective optimization
optimizer.runParetoOptimization();
List<Solution> paretoFront = optimizer.getParetoFront();
Related Documentation
- Production Optimizer Tutorial β Multi-variable optimization with constraints
- MPC Integration Tutorial β Model Predictive Control integration
- External Optimizer Integration β Python/SciPy integration patterns
Documentation Structure
| Document | Purpose | Audience |
|---|---|---|
| Offshore Emission Reporting Guide | Reference with regulatory framework, methods, API, validation, literature | Engineers, Regulators, Auditors |
| Produced Water Emissions Tutorial | Step-by-step Jupyter notebook with runnable code | Data Scientists, Developers |
| Norwegian Methods Comparison | Validation against handbook, uncertainty analysis | Engineers, Regulators |
| Java Example | Complete Java code sample | Java Developers |
| API Reference | EmissionsCalculator class documentation | All Developers |
Run in Browser (No Installation)
Click to open the tutorial in Google Colab:
Literature & Standards
Key references for emission calculations:
-
Kontogeorgis & Folas (2010) - CPA equation of state theory
DOI: 10.1002/9780470747537 -
IOGP Report 521 (2019) - E&P emission estimation methods
IOGP Bookstore -
IPCC AR5 (2014) - Global Warming Potentials (GWP)
IPCC Report
Note: NeqSim uses AR5 GWP100 values (CHβ=28, NβO=265) by default. AR6 (2021) values (CHβ=27.9) are also available. -
SΓΈreide & Whitson (1992) - Peng-Robinson predictions for hydrocarbons in brine
Fluid Phase Equilibria, 77, 217-240 -
EU Methane Regulation 2024/1787 - Methane emission requirements
EUR-Lex -
Aktivitetsforskriften Β§70 - Norwegian offshore emission quantification requirements
Lovdata
See full literature list in the guide.
Contact & Support
- GitHub Issues: equinor/neqsim
- Discussions: GitHub Discussions
- Documentation: equinor.github.io/neqsim
This documentation is part of NeqSim, an open-source thermodynamic and process simulation library by Equinor.