| 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
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
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⁶ |