| name | neqsim-field-economics |
| description | Oil & gas field economics, NPV, IRR, cash flow, and fiscal regime modeling with NeqSim. USE WHEN: calculating project economics (NPV, IRR, payback), evaluating tax regimes (Norwegian NCS, UK, generic), building cost estimates (CAPEX/OPEX), or running Monte Carlo sensitivity analysis on economic outcomes. |
| last_verified | 2026-07-19 |
NeqSim Field Economics Skill
Reference for petroleum project economics — cost estimation, cash flow modeling,
tax regimes, NPV/IRR calculations, breakeven analysis, and uncertainty.
Economics Workflow Overview
Reservoir Volumetrics → Production Profile → Revenue Forecast
↓
CAPEX Estimate → Cash Flow Engine ← OPEX Estimate
↓
Tax Model (NCS/UK/Generic)
↓
NPV / IRR / Payback / Breakeven
↓
Monte Carlo Uncertainty (P10/P50/P90)
Cost Estimation
CAPEX Components (Typical Offshore NCS)
| Category | Typical Range | NeqSim Class |
|---|
| Wells (drilling + completion) | 200-800 MNOK/well | WellCostEstimator, WellMechanicalDesign |
| SURF (subsea, umbilicals, risers, flowlines) | 500-5000 MNOK | SURFCostEstimator |
| Topsides / Processing | 2000-15000 MNOK | FacilityBuilder + MechanicalDesign |
| Subsea equipment (trees, manifolds) | 100-500 MNOK/well | SubseaProductionSystem |
| Pipeline / Export | 50-300 MNOK/km | PipelineMechanicalDesign |
| FPSO hull + mooring | 5000-20000 MNOK | Parametric estimate |
| Decommissioning (ABEX) | 10-30% of CAPEX | DecommissioningEstimator |
NeqSim Cost Estimation Classes
WellCostEstimator wellCost = new WellCostEstimator();
wellCost.setRegion(SubseaCostEstimator.Region.NORWAY);
wellCost.setWaterDepth(350.0);
wellCost.setTotalDepth(3800.0);
wellCost.setDrillingDays(45);
wellCost.setCompletionDays(25);
wellCost.setRigDayRate(540000.0);
double wellCapex = wellCost.estimate();
SURFCostEstimator surfCost = new SURFCostEstimator();
surfCost.setRegion(SubseaCostEstimator.Region.NORWAY);
surfCost.setNumberOfWells(4);
surfCost.setFlowlineLength(25.0);
surfCost.setUmbilicalLength(27.0);
surfCost.setWaterDepth(350.0);
surfCost.setTreeType("vertical");
surfCost.setHasManifold(true);
double surfCapex = surfCost.estimate();
RegionalCostFactors factors = new RegionalCostFactors("Norway");
double adjustedCost = baseCost * factors.getCostMultiplier();
OPEX Components
| Category | Typical Range | Estimation Basis |
|---|
| Fixed OPEX | 3-6% of CAPEX/year | Insurance, manning, maintenance |
| Variable OPEX | 2-8 USD/boe | Chemicals, power, logistics |
| Well intervention | 50-200 MNOK/event | Frequency-based estimate |
| Pipeline inspection | 10-50 MNOK/year | IMR schedule |
Cash Flow Engine
Direct Lifecycle Integration
FieldLifecycleSimulator aggregates live NeqSim reservoir/process results by calendar year and feeds oil and export
gas volumes directly to CashFlowEngine("NO"). FieldLifecycleResult exposes after-tax NPV, IRR, payback and
break-even oil/gas prices together with the technical production, injection, energy and emissions profiles. Use this
route when economics must reflect process capacity and reservoir response rather than an independent decline curve.
For a host tieback, only the new field's attributed oil and gas enter project revenue; existing-host production is a
capacity load, not project revenue. Configure tieback tariff/OPEX and modification CAPEX explicitly. The result's
holdback, capacity-deferred oil, peak operating/requested utilization and annual bottleneck fields explain the economic
difference between standalone greenfield, direct tieback through existing SURF, managed allocation and debottleneck
cases. A user-supplied ProcessModel keeps the economic result coupled to all SURF and host process areas.
For area studies, use AreaDevelopmentEvaluator to compare multiple producing hosts and greenfield routes on the same
economic basis. A REJECT_OPTION product-quality policy makes an off-spec route ineligible before NPV ranking;
REPORT_ONLY preserves the route for sensitivity and debottleneck diagnosis.
Basic Usage
CashFlowEngine engine = new CashFlowEngine("NO");
engine.setCapex(5000.0, 2025);
engine.setOpexPercentOfCapex(0.04);
engine.setOilPrice(70.0);
engine.setGasPrice(0.30);
for (int year = 2027; year <= 2045; year++) {
engine.addAnnualProduction(year, oilSm3[year], gasSm3[year], waterSm3[year]);
}
CashFlowResult result = engine.calculate(0.08);
double npv = result.getNpv();
double irr = result.getIrr();
double payback = result.getPaybackYears();
double pi = result.getProfitabilityIndex();
DCF Calculator (Low-Level)
DCFCalculator dcf = new DCFCalculator();
dcf.setDiscountRate(0.08);
double[] cashFlows = {-500, -300, 100, 200, 300, 250, 200, 150, 100};
double npv = dcf.calculateNPV(cashFlows);
double irr = dcf.calculateIRR(cashFlows);
Tax Models
Norwegian Continental Shelf (NCS)
The Norwegian petroleum tax regime has three key components:
| Component | Rate | Base |
|---|
| Corporate tax | 22% | Revenue - OPEX - Depreciation |
| Special petroleum tax | 56% | Revenue - OPEX - Depreciation - Uplift |
| Total marginal rate | 78% | — |
Additional features:
- Uplift: 5.5% of investment per year for 4 years (deductible only against special tax)
- Depreciation: 6-year straight-line for offshore investments
- Loss carry-forward: Losses can be carried forward indefinitely (with interest)
- Exploration refund: 78% of exploration costs refunded
NorwegianTaxModel taxModel = new NorwegianTaxModel();
TaxResult tax = taxModel.calculateTax(
grossRevenue,
opex,
depreciation,
uplift
);
double corporateTax = tax.getCorporateTax();
double specialTax = tax.getSpecialTax();
double totalTax = tax.getTotalTax();
double effectiveRate = tax.getEffectiveRate();
UK Continental Shelf (UKCS)
| Component | Rate | Notes |
|---|
| Ring Fence Corporation Tax (RFCT) | 30% | Ring-fenced profits |
| Supplementary Charge (SC) | 10% | On ring-fenced profits |
| Total marginal rate | 40% | Investment allowance applies |
Generic Tax Model
GenericTaxModel generic = new GenericTaxModel();
generic.setCorporateTaxRate(0.25);
generic.setRoyaltyRate(0.10);
generic.setDepreciationYears(10);
Tax Model Registry
TaxModelRegistry.getAvailableModels();
TaxModel model = TaxModelRegistry.getModel("NO");
Production Profile Generator
ProductionProfileGenerator gen = new ProductionProfileGenerator();
gen.setResourceVolume(100.0);
gen.setRecoveryFactor(0.55);
gen.setPeakRate(25000.0);
gen.setBuildUpYears(2);
gen.setPlateauYears(5);
gen.setDeclineType("exponential");
gen.setDeclineRate(0.12);
gen.setProjectLife(25);
double[] profile = gen.generate();
Sensitivity & Uncertainty Analysis
Tornado Diagram (One-at-a-Time)
SensitivityAnalyzer sensitivity = new SensitivityAnalyzer(engine);
sensitivity.addParameter("oilPrice", 50.0, 70.0, 90.0);
sensitivity.addParameter("capex", 4000.0, 5000.0, 7000.0);
sensitivity.addParameter("recoveryFactor", 0.45, 0.55, 0.65);
sensitivity.addParameter("opexRate", 0.03, 0.04, 0.06);
Map<String, double[]> tornado = sensitivity.runTornado();
Monte Carlo
MonteCarloRunner mc = new MonteCarloRunner(engine);
mc.addTriangularInput("oilPrice", 50.0, 70.0, 90.0);
mc.addTriangularInput("capex", 4000.0, 5000.0, 7000.0);
mc.addTriangularInput("recoveryFactor", 0.45, 0.55, 0.65);
MonteCarloResult result = mc.run(1000);
double p10 = result.getPercentile(10);
double p50 = result.getPercentile(50);
double p90 = result.getPercentile(90);
double probNegative = result.getProbabilityBelow(0.0);
Breakeven Analysis
double breakevenPrice = engine.calculateBreakevenPrice(0.0);
for (double rate : new double[]{0.05, 0.08, 0.10, 0.12}) {
double be = engine.calculateBreakevenPrice(rate);
System.out.println("Breakeven at " + (rate*100) + "%: " + be + " USD/bbl");
}
Decommissioning Cost Estimation
DecommissioningEstimator decom = new DecommissioningEstimator();
decom.setNumberOfWells(6);
decom.setWellAbandonment(true);
decom.setSubseaRemoval(true);
decom.setPlatformRemoval(false);
decom.setPipelineDecommissioning(true);
decom.setWaterDepth(350.0);
decom.setRegion("Norway");
double decomCost = decom.estimate();
Common Economic Pitfalls
| Pitfall | Impact | Prevention |
|---|
| Double-counting depreciation in tax bases | Overstates tax, understates NPV | Norwegian model: depreciation deducted from BOTH bases independently |
| Wrong CAPEX timing | Wrong NPV (time value) | CAPEX in year 0, first production year 2-3, match reality |
| Ignoring loss carry-forward | Understates early-year cash flow | Norwegian model carries losses with interest adjustment |
| Using nominal discount rate with real cash flows | Wrong NPV | Be consistent: real-real or nominal-nominal |
| Ignoring decommissioning | Missing 10-30% lifecycle cost | Always include ABEX in project economics |
| Oil price in wrong currency | Wrong revenue | NOK on NCS, USD internationally; use consistent FX |
Key Conversion Factors
| From | To | Factor |
|---|
| 1 Sm3 oil | boe | 1.0 (by definition) |
| 1 Sm3 gas | boe | ~0.001 (varies, typically 1000 Sm3 gas = 1 boe) |
| 1 bbl oil | Sm3 oil | 0.159 |
| 1 Sm3 oil | bbl | 6.29 |
| 1 tonne oil | bbl | ~7.33 (depends on API gravity) |
| 1 BCF gas | Sm3 | 28.3 × 10⁶ |