Class FieldDevelopmentWorkflow

java.lang.Object
neqsim.process.fielddevelopment.workflow.FieldDevelopmentWorkflow
All Implemented Interfaces:
Serializable

public class FieldDevelopmentWorkflow extends Object implements Serializable
Unified field development workflow orchestrator.

This class provides a single entry point for running field development studies at different fidelity levels, from early screening through detailed design. The workflow is designed to support education and industry applications aligned with academic programs such as NTNU's TPG4230 - Underground reservoirs fluid production and injection course.

TPG4230 Course Topic Coverage

This framework addresses key topics from the course:

  • Field Lifecycle Management - Discovery through operations with progressive refinement
  • PVT Characterization - EOS selection and tuning to laboratory data
  • Reservoir Material Balance - Tank models with production/injection tracking
  • Well Performance (IPR/VLP) - Inflow performance and vertical lift modeling
  • Production Network Optimization - Multi-well gathering system equilibrium
  • Economic Evaluation - NPV, IRR with country-specific fiscal terms
  • Flow Assurance Screening - Hydrates, wax, corrosion risk assessment

Integration Architecture

The workflow integrates multiple NeqSim subsystems:

  • PVT characterization and EOS tuning (thermo.system, pvtsimulation)
  • Reservoir modeling with material balance (process.equipment.reservoir)
  • Well modeling with IPR/VLP nodal analysis (WellSystem, WellFlow)
  • Process simulation (ProcessSystem)
  • Economics with tax models (CashFlowEngine, TaxModel)
  • Flow assurance screening (FlowAssuranceScreener)

Fidelity Levels

  • SCREENING - Analog-based correlations, ±50% accuracy, suitable for portfolio screening
  • CONCEPTUAL - EOS fluid, IPR/VLP models, ±30% accuracy, suitable for concept selection
  • DETAILED - Tuned EOS, full process simulation, Monte Carlo economics, ±20% accuracy

Example Usage

// Quick screening study for gas tieback
FieldDevelopmentWorkflow workflow =
    FieldDevelopmentWorkflow.quickGasTieback("Satellite Discovery", 50.0, 25.0, 4, 2.0, "NO");
WorkflowResult result = workflow.run();
System.out.println(result.getSummary());

// Progress to conceptual with EOS-tuned fluid
workflow.setFidelityLevel(FidelityLevel.CONCEPTUAL);
workflow.setFluid(tunedFluid); // From PVT regression
result = workflow.run();

// Full detailed study with Monte Carlo
workflow.setFidelityLevel(FidelityLevel.DETAILED);
workflow.setMonteCarloIterations(1000);
result = workflow.run();
System.out.println("NPV P50: " + result.getNpvP50() + " MUSD");
Version:
1.0
Author:
ESOL
See Also:
  • Field Details

    • serialVersionUID

      private static final long serialVersionUID
      See Also:
    • projectName

      private String projectName
    • fidelityLevel

    • studyPhase

    • countryCode

      private String countryCode
    • discountRate

      private double discountRate
    • concept

      private FieldConcept concept
    • fluid

      private SystemInterface fluid
    • reservoir

      private SimpleReservoir reservoir
    • wells

      private List<WellSystem> wells
    • processSystem

      private ProcessSystem processSystem
    • facilityConfig

      private FacilityConfig facilityConfig
    • subseaSystem

      private SubseaProductionSystem subseaSystem
    • potentialHosts

      private List<HostFacility> potentialHosts
    • tiebackAnalyzer

      private TiebackAnalyzer tiebackAnalyzer
    • runSubseaAnalysis

      private boolean runSubseaAnalysis
    • waterDepthM

      private double waterDepthM
    • tiebackDistanceKm

      private double tiebackDistanceKm
    • subseaArchitecture

      private SubseaProductionSystem.SubseaArchitecture subseaArchitecture
    • firstProductionYear

      private int firstProductionYear
    • fieldLifeYears

      private int fieldLifeYears
    • plateauYears

      private double plateauYears
    • declineRate

      private double declineRate
    • oilPrice

      private double oilPrice
    • gasPrice

      private double gasPrice
    • gasTariff

      private double gasTariff
    • runMechanicalDesign

      private boolean runMechanicalDesign
    • calculateEmissions

      private boolean calculateEmissions
    • powerSupplyType

      private String powerSupplyType
    • gridEmissionFactor

      private double gridEmissionFactor
    • designStandard

      private String designStandard
    • monteCarloIterations

      private int monteCarloIterations
    • lastResult

      private WorkflowResult lastResult
  • Constructor Details

    • FieldDevelopmentWorkflow

      public FieldDevelopmentWorkflow(String projectName)
      Creates a new field development workflow.
      Parameters:
      projectName - name of the project/field
    • FieldDevelopmentWorkflow

      public FieldDevelopmentWorkflow(String projectName, FieldConcept concept)
      Creates a workflow with concept.
      Parameters:
      projectName - name of the project/field
      concept - field concept definition
  • Method Details

    • setFidelityLevel

      Sets the fidelity level.
      Parameters:
      level - fidelity level
      Returns:
      this for chaining
    • setStudyPhase

      Sets the study phase.
      Parameters:
      phase - study phase
      Returns:
      this for chaining
    • setCountryCode

      public FieldDevelopmentWorkflow setCountryCode(String countryCode)
      Sets the country code for tax calculations.
      Parameters:
      countryCode - ISO country code (e.g., "NO", "UK", "BR")
      Returns:
      this for chaining
    • setDiscountRate

      public FieldDevelopmentWorkflow setDiscountRate(double rate)
      Sets the discount rate for NPV calculations.
      Parameters:
      rate - discount rate (0-1)
      Returns:
      this for chaining
    • setConcept

      public FieldDevelopmentWorkflow setConcept(FieldConcept concept)
      Sets the field concept.
      Parameters:
      concept - field concept definition
      Returns:
      this for chaining
    • setFluid

      public FieldDevelopmentWorkflow setFluid(SystemInterface fluid)
      Sets the reservoir fluid.
      Parameters:
      fluid - thermodynamic system representing the fluid
      Returns:
      this for chaining
    • setReservoir

      public FieldDevelopmentWorkflow setReservoir(SimpleReservoir reservoir)
      Sets the reservoir model.
      Parameters:
      reservoir - simple reservoir for material balance
      Returns:
      this for chaining
    • addWell

      public FieldDevelopmentWorkflow addWell(WellSystem well)
      Adds a well model.
      Parameters:
      well - integrated well system (IPR+VLP)
      Returns:
      this for chaining
    • setProcessSystem

      public FieldDevelopmentWorkflow setProcessSystem(ProcessSystem process)
      Sets the process system.
      Parameters:
      process - process simulation model
      Returns:
      this for chaining
    • setFacilityConfig

      public FieldDevelopmentWorkflow setFacilityConfig(FacilityConfig config)
      Sets the facility configuration.
      Parameters:
      config - facility configuration
      Returns:
      this for chaining
    • setRunMechanicalDesign

      public FieldDevelopmentWorkflow setRunMechanicalDesign(boolean enabled)
      Enables or disables mechanical design calculations.
      Parameters:
      enabled - true to run mechanical design
      Returns:
      this for chaining
    • setCalculateEmissions

      public FieldDevelopmentWorkflow setCalculateEmissions(boolean enabled)
      Enables or disables CO2 emissions calculations.
      Parameters:
      enabled - true to calculate emissions
      Returns:
      this for chaining
    • setPowerSupplyType

      public FieldDevelopmentWorkflow setPowerSupplyType(String type)
      Sets the power supply type for emissions calculations.
      Parameters:
      type - power supply type: GAS_TURBINE, POWER_FROM_SHORE, COMBINED_CYCLE, DIESEL
      Returns:
      this for chaining
    • setGridEmissionFactor

      public FieldDevelopmentWorkflow setGridEmissionFactor(double factor)
      Sets the grid emission factor for power-from-shore.
      Parameters:
      factor - emission factor in kg CO2/kWh (e.g., 0.05 for Nordic, 0.4 for UK)
      Returns:
      this for chaining
    • setDesignStandard

      public FieldDevelopmentWorkflow setDesignStandard(String standard)
      Sets the design standard for mechanical design.
      Parameters:
      standard - company design standard (e.g., "Equinor", "Shell", "BP")
      Returns:
      this for chaining
    • setMonteCarloIterations

      public FieldDevelopmentWorkflow setMonteCarloIterations(int iterations)
      Sets the number of Monte Carlo iterations for uncertainty analysis.
      Parameters:
      iterations - number of iterations (typically 1000-10000)
      Returns:
      this for chaining
    • setSubseaSystem

      public FieldDevelopmentWorkflow setSubseaSystem(SubseaProductionSystem subsea)
      Sets the subsea production system.
      Parameters:
      subsea - configured subsea system
      Returns:
      this for chaining
    • addHostFacility

      public FieldDevelopmentWorkflow addHostFacility(HostFacility host)
      Adds a potential host facility for tieback analysis.
      Parameters:
      host - host facility
      Returns:
      this for chaining
    • setTiebackAnalyzer

      public FieldDevelopmentWorkflow setTiebackAnalyzer(TiebackAnalyzer analyzer)
      Sets the tieback analyzer for subsea economics.
      Parameters:
      analyzer - tieback analyzer
      Returns:
      this for chaining
    • setRunSubseaAnalysis

      public FieldDevelopmentWorkflow setRunSubseaAnalysis(boolean enabled)
      Enables or disables subsea analysis.
      Parameters:
      enabled - true to run subsea analysis
      Returns:
      this for chaining
    • setWaterDepthM

      public FieldDevelopmentWorkflow setWaterDepthM(double depthM)
      Sets water depth for subsea development.
      Parameters:
      depthM - water depth in meters
      Returns:
      this for chaining
    • setTiebackDistanceKm

      public FieldDevelopmentWorkflow setTiebackDistanceKm(double distanceKm)
      Sets tieback distance for subsea development.
      Parameters:
      distanceKm - tieback distance in kilometers
      Returns:
      this for chaining
    • setSubseaArchitecture

      Sets subsea architecture type.
      Parameters:
      arch - subsea architecture (DIRECT_TIEBACK, MANIFOLD_CLUSTER, etc.)
      Returns:
      this for chaining
    • configureSubseaFromConcept

      public FieldDevelopmentWorkflow configureSubseaFromConcept()
      Configures subsea parameters from concept.

      Extracts subsea-relevant parameters from the field concept and sets up subsea system automatically.

      Returns:
      this for chaining
    • setProductionTiming

      public FieldDevelopmentWorkflow setProductionTiming(int firstYear, int fieldLife, double plateau, double decline)
      Sets production timing parameters.
      Parameters:
      firstYear - first production year
      fieldLife - total field life in years
      plateau - plateau duration in years
      decline - annual decline rate after plateau
      Returns:
      this for chaining
    • setPrices

      public FieldDevelopmentWorkflow setPrices(double oil, double gas, double tariff)
      Sets commodity prices.
      Parameters:
      oil - oil price in USD/bbl
      gas - gas price in USD/Sm3
      tariff - gas transport tariff in USD/Sm3
      Returns:
      this for chaining
    • run

      public WorkflowResult run()
      Runs the workflow at the configured fidelity level.
      Returns:
      workflow result with all outputs
    • validateInputs

      private void validateInputs()
      Validates that required inputs are present.
    • runScreening

      private WorkflowResult runScreening()
      Runs screening-level analysis (±50% accuracy).
    • runConceptual

      private WorkflowResult runConceptual()
      Runs conceptual-level analysis (±30% accuracy).
    • runDetailed

      private WorkflowResult runDetailed()
      Runs detailed-level analysis (±20% accuracy).
    • runSubseaAnalysis

      private void runSubseaAnalysis(WorkflowResult result)
      Runs subsea analysis and tieback evaluation.
      Parameters:
      result - workflow result to populate
    • estimateSubseaCapex

      private double estimateSubseaCapex(SubseaProductionSystem subsea)
      Estimates subsea CAPEX from system configuration.
      Parameters:
      subsea - subsea production system
      Returns:
      estimated CAPEX in MUSD
    • runReservoirDepletion

      private Map<Integer,Double> runReservoirDepletion(SimpleReservoir res, List<WellSystem> wellList)
      Runs reservoir depletion with wells to generate production profile.
    • quickGasTieback

      public static FieldDevelopmentWorkflow quickGasTieback(String name, double giipGSm3, double tiebackKm, int wellCount, double ratePerWellMSm3d, String countryCode)
      Creates a quick screening workflow for a gas tieback.
      Parameters:
      name - project name
      giipGSm3 - gas initially in place (GSm3)
      tiebackKm - tieback distance (km)
      wellCount - number of wells
      ratePerWellMSm3d - rate per well (MSm3/d)
      countryCode - tax jurisdiction
      Returns:
      configured workflow
    • quickOilDevelopment

      public static FieldDevelopmentWorkflow quickOilDevelopment(String name, double stoiipMMbbl, int wellCount, double ratePerWellBopd, String countryCode)
      Creates a quick screening workflow for oil development.
      Parameters:
      name - project name
      stoiipMMbbl - stock tank oil initially in place (MMbbl)
      wellCount - number of wells
      ratePerWellBopd - rate per well (bopd)
      countryCode - tax jurisdiction
      Returns:
      configured workflow
    • generateComparisonReport

      public static String generateComparisonReport(List<FieldDevelopmentWorkflow> workflows)
      Generates a comparison report for multiple concepts.
      Parameters:
      workflows - list of workflows to compare
      Returns:
      markdown comparison table
    • getProjectName

      public String getProjectName()
      Gets the project name.
      Returns:
      project name
    • getLastResult

      public WorkflowResult getLastResult()
      Gets the last result.
      Returns:
      last workflow result, or null if not run
    • getFidelityLevel

      public FieldDevelopmentWorkflow.FidelityLevel getFidelityLevel()
      Gets the fidelity level.
      Returns:
      fidelity level
    • getStudyPhase

      public FieldDevelopmentWorkflow.StudyPhase getStudyPhase()
      Gets the study phase.
      Returns:
      study phase
    • calculateTotalPowerMW

      private double calculateTotalPowerMW(ProcessSystem process)
      Calculates total power consumption from process system.
      Parameters:
      process - the process system
      Returns:
      total power in MW
    • calculatePowerBreakdown

      private Map<String,Double> calculatePowerBreakdown(ProcessSystem process)
      Calculates power breakdown by equipment type.
      Parameters:
      process - the process system
      Returns:
      map of equipment type to power (MW)
    • calculateProcessEmissions

      private void calculateProcessEmissions(WorkflowResult result, ProcessSystem process)
      Calculates CO2 emissions from process system.
      Parameters:
      result - the workflow result to populate
      process - the process system
    • calculateConceptEmissions

      private void calculateConceptEmissions(WorkflowResult result)
      Calculates CO2 emissions from concept-level estimation.
      Parameters:
      result - the workflow result to populate
    • getEmissionFactorKgPerMWh

      private double getEmissionFactorKgPerMWh(String supplyType)
      Gets emission factor based on power supply type.
      Parameters:
      supplyType - power supply type
      Returns:
      kg CO2 per MWh