neqsim-field-economics

star 125

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.

equinor By equinor schedule Updated 4/18/2026

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-04"

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

// Well cost
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);  // USD/day
double wellCapex = wellCost.estimate();

// SURF cost
SURFCostEstimator surfCost = new SURFCostEstimator();
surfCost.setRegion(SubseaCostEstimator.Region.NORWAY);
surfCost.setNumberOfWells(4);
surfCost.setFlowlineLength(25.0);      // km
surfCost.setUmbilicalLength(27.0);     // km
surfCost.setWaterDepth(350.0);
surfCost.setTreeType("vertical");
surfCost.setHasManifold(true);
double surfCapex = surfCost.estimate();

// Regional cost factors
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

Basic Usage

CashFlowEngine engine = new CashFlowEngine("NO");  // Norwegian tax regime
engine.setCapex(5000.0, 2025);       // MUSD, year
engine.setOpexPercentOfCapex(0.04);  // 4% of CAPEX/year
engine.setOilPrice(70.0);           // USD/bbl
engine.setGasPrice(0.30);           // USD/Sm3

// Add production year by year
for (int year = 2027; year <= 2045; year++) {
    engine.addAnnualProduction(year, oilSm3[year], gasSm3[year], waterSm3[year]);
}

CashFlowResult result = engine.calculate(0.08);  // 8% discount rate

double npv = result.getNpv();           // MUSD
double irr = result.getIrr();           // fraction (e.g., 0.15 = 15%)
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();
// Automatically applied when CashFlowEngine("NO") is used

// Direct tax calculation
TaxResult tax = taxModel.calculateTax(
    grossRevenue,    // NOK
    opex,            // NOK
    depreciation,    // NOK
    uplift           // NOK
);
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

// List available models
TaxModelRegistry.getAvailableModels();  // ["NO", "UK", "BR", "GENERIC"]

// Get model by country code
TaxModel model = TaxModelRegistry.getModel("NO");

Production Profile Generator

ProductionProfileGenerator gen = new ProductionProfileGenerator();
gen.setResourceVolume(100.0);    // MMboe
gen.setRecoveryFactor(0.55);
gen.setPeakRate(25000.0);        // boe/d
gen.setBuildUpYears(2);
gen.setPlateauYears(5);
gen.setDeclineType("exponential");
gen.setDeclineRate(0.12);        // 12%/year
gen.setProjectLife(25);          // years

double[] profile = gen.generate();  // Annual production (boe)

Sensitivity & Uncertainty Analysis

Tornado Diagram (One-at-a-Time)

SensitivityAnalyzer sensitivity = new SensitivityAnalyzer(engine);
sensitivity.addParameter("oilPrice", 50.0, 70.0, 90.0);     // low, base, high
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();
// Returns: {"oilPrice": [npv_low, npv_base, npv_high], ...}

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

// Breakeven oil price (NPV = 0)
double breakevenPrice = engine.calculateBreakevenPrice(0.0);

// Breakeven at different discount rates
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);    // tieback — no platform
decom.setPipelineDecommissioning(true);
decom.setWaterDepth(350.0);
decom.setRegion("Norway");

double decomCost = decom.estimate();  // MUSD

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⁶
Install via CLI
npx skills add https://github.com/equinor/neqsim --skill neqsim-field-economics
Repository Details
star Stars 125
call_split Forks 52
navigation Branch main
article Path SKILL.md
More from Creator