Skip to the content.

FieldDevelopmentWorkflow

Note: This is an auto-generated Markdown version of the Jupyter notebook FieldDevelopmentWorkflow.ipynb. You can also view it on nbviewer or open in Google Colab.


Field Development Workflow Tutorial

This notebook demonstrates NeqSim’s integrated field development framework, showing how to use it at different fidelity levels - from quick screening studies to detailed FEED-level analysis.

Overview

The FieldDevelopmentWorkflow class provides a unified interface for:

Prerequisites

Make sure you have jpype installed with neqsim:

# Import NeqSim - Direct Java Access via jneqsim
from neqsim import jneqsim

# Import Java classes through the jneqsim gateway
SystemSrkEos = jneqsim.thermo.system.SystemSrkEos
SystemSrkCPAstatoil = jneqsim.thermo.system.SystemSrkCPAstatoil
Stream = jneqsim.process.equipment.stream.Stream
WellSystem = jneqsim.process.equipment.reservoir.WellSystem
SimpleReservoir = jneqsim.process.equipment.reservoir.SimpleReservoir
FieldDevelopmentWorkflow = jneqsim.process.fielddevelopment.workflow.FieldDevelopmentWorkflow
CashFlowEngine = jneqsim.process.fielddevelopment.economics.CashFlowEngine
NorwegianTaxModel = jneqsim.process.fielddevelopment.economics.NorwegianTaxModel
FlowAssuranceResult = jneqsim.process.fielddevelopment.screening.FlowAssuranceResult

print("NeqSim Field Development Framework loaded successfully!")

1. Screening Level Study

The screening level uses correlations and empirical models for quick assessment. This is suitable for:

Quick Gas Tieback Example

# Create a quick gas tieback screening study
workflow = FieldDevelopmentWorkflow.quickGasTieback(
    "Snorre_Satellite",
    50.0,    # reserves in GSm3
    120.0,   # distance to host in km
    350.0,   # water depth in m
    180.0,   # reservoir pressure in bara
    90.0     # reservoir temperature in °C
)

# Run the screening
result = workflow.run()

# Display results
print(result.getSummary())
# Check flow assurance screening results
fa_result = result.getFlowAssuranceResult()
print("Flow Assurance Screening:")
print(f"  Hydrate Risk: {fa_result.hydrateRisk}")
print(f"  Wax Risk: {fa_result.waxRisk}")
print(f"  Slugging Risk: {fa_result.sluggingRisk}")
print(f"  Recommended MEG Rate: {fa_result.recommendedMegRate:.1f} kg/hr")
# View production profile
print(result.getProductionTable())
# View cash flow
print(result.getCashFlowTable())

Quick Oil Development Example

# Create an oil field screening study
oil_workflow = FieldDevelopmentWorkflow.quickOilDevelopment(
    "Johan_Sverdrup_Satellite",
    150.0,   # reserves in MSm3 oil
    5,       # number of wells
    120.0,   # water depth in m
    200.0,   # reservoir pressure in bara
    85.0     # reservoir temperature in °C
)

oil_result = oil_workflow.run()
print(oil_result.getSummary())

2. Conceptual Level Study

The conceptual level adds:

Setting Up an EOS Fluid

# Create a detailed PVT fluid model
fluid = SystemSrkEos(85.0 + 273.15, 200.0)  # T in K, P in bara

# Add components (typical North Sea oil composition)
fluid.addComponent("nitrogen", 0.5)
fluid.addComponent("CO2", 1.2)
fluid.addComponent("methane", 35.0)
fluid.addComponent("ethane", 8.5)
fluid.addComponent("propane", 6.2)
fluid.addComponent("i-butane", 1.5)
fluid.addComponent("n-butane", 3.2)
fluid.addComponent("i-pentane", 1.8)
fluid.addComponent("n-pentane", 2.1)
fluid.addComponent("n-hexane", 3.5)
fluid.addComponent("C7", 15.0)  # C7+ fraction
fluid.addComponent("C10", 12.0)
fluid.addComponent("C15", 6.5)
fluid.addComponent("C20", 3.0)

fluid.setMixingRule("classic")
fluid.setMultiPhaseCheck(True)

print(f"Fluid created with {fluid.getNumberOfComponents()} components")
# Create conceptual workflow with EOS fluid
workflow_conceptual = FieldDevelopmentWorkflow("Barents_Development")
workflow_conceptual.setFidelityLevel(FieldDevelopmentWorkflow.FidelityLevel.CONCEPTUAL)
workflow_conceptual.setFluid(fluid)

# Set field parameters
workflow_conceptual.setReserves(200.0, "MSm3")  # Oil reserves
workflow_conceptual.setGasReserves(50.0, "GSm3")  # Associated gas
workflow_conceptual.setWaterDepth(380.0)
workflow_conceptual.setNumberOfWells(8)
workflow_conceptual.setTiebackDistance(0.0)  # Standalone facility

# Run conceptual study
conceptual_result = workflow_conceptual.run()
print(conceptual_result.getSummary())

3. Concept Comparison

Compare multiple development concepts side by side:

# Define multiple concepts to compare
concepts = {
    "Subsea_Tieback": FieldDevelopmentWorkflow.quickGasTieback(
        "Concept_A", 50.0, 80.0, 350.0, 180.0, 90.0
    ),
    "FPSO_Standalone": FieldDevelopmentWorkflow.quickOilDevelopment(
        "Concept_B", 150.0, 6, 350.0, 200.0, 85.0
    ),
}

# Run all concepts
results = {}
for name, wf in concepts.items():
    results[name] = wf.run()

# Generate comparison report
comparison = FieldDevelopmentWorkflow.generateComparisonReport(results)
print(comparison)

4. Detailed Level with Monte Carlo

The detailed level adds:

# Create detailed workflow
workflow_detailed = FieldDevelopmentWorkflow("North_Sea_Oil")
workflow_detailed.setFidelityLevel(FieldDevelopmentWorkflow.FidelityLevel.DETAILED)
workflow_detailed.setFluid(fluid)

# Set parameters
workflow_detailed.setReserves(250.0, "MSm3")
workflow_detailed.setWaterDepth(120.0)
workflow_detailed.setNumberOfWells(12)

# Configure Monte Carlo settings
workflow_detailed.setMonteCarloIterations(1000)

# Run detailed study (may take longer due to Monte Carlo)
detailed_result = workflow_detailed.run()

print("Economic Results with Uncertainty:")
print(f"  NPV P10: ${detailed_result.getNpvP10() / 1e9:.2f} billion")
print(f"  NPV P50: ${detailed_result.getNpvP50() / 1e9:.2f} billion")
print(f"  NPV P90: ${detailed_result.getNpvP90() / 1e9:.2f} billion")

5. Viability Assessment

# Check project viability
print(f"Project Viable: {detailed_result.isViable()}")
print(f"Viable with 80% confidence: {detailed_result.isViableWithConfidence(0.8)}")
print(f"IRR: {detailed_result.getIrr() * 100:.1f}%")
print(f"Payback: {detailed_result.getPaybackYears():.1f} years")

Summary

The FieldDevelopmentWorkflow provides:

Level Accuracy Use Case Time
Screening ±50% Portfolio screening Seconds
Conceptual ±30% Concept selection Minutes
Detailed ±20% FEED basis Hours

Key integration points: