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
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"); // 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⁶ |