Class ConceptEvaluator

java.lang.Object
neqsim.process.fielddevelopment.evaluation.ConceptEvaluator

public class ConceptEvaluator extends Object
Main orchestrator for field development concept evaluation.

This class is the primary entry point for the Field Development Engine. It coordinates all screening analyses (flow assurance, safety, emissions, economics) and aggregates results into a comprehensive ConceptKPIs object for decision support.

Evaluation Workflow

The evaluator runs the following analyses:

  1. Production KPIs: Calculate plateau rate, field life, and recovery estimates
  2. Flow Assurance: Screen hydrate, wax, corrosion, and other risks
  3. Safety: Assess blowdown requirements, ESD complexity, and H2S considerations
  4. Emissions: Calculate CO2 emissions and intensity
  5. Economics: Estimate CAPEX, OPEX, and unit costs
  6. Scoring: Generate technical, economic, and environmental scores

Scoring System

The evaluator calculates normalized scores (0-1) for concept comparison:

  • Technical Score (35%): Based on flow assurance and safety outcomes
  • Economic Score (40%): Based on CAPEX relative to baseline
  • Environmental Score (25%): Based on CO2 intensity

Usage Examples

Full Evaluation

ConceptEvaluator evaluator = new ConceptEvaluator();
ConceptKPIs kpis = evaluator.evaluate(concept);

// Access individual reports
FlowAssuranceReport fa = kpis.getFlowAssuranceReport();
EconomicsEstimator.EconomicsReport econ = kpis.getEconomicsReport();

// Check warnings
kpis.getWarnings().forEach((category, message) -> {
  System.out.println("WARNING: " + message);
});

// Get overall score
System.out.println("Overall Score: " + kpis.getOverallScore());

Evaluation with Custom Facility

FacilityConfig facility =
    FacilityBuilder.builder().addBlock(BlockConfig.of(BlockType.INLET_SEPARATION))
        .addBlock(BlockConfig.of(BlockType.TEG_DEHYDRATION)).build();

ConceptKPIs kpis = evaluator.evaluate(concept, facility);

Quick Screening (Reduced Fidelity)

ConceptKPIs quickKpis = evaluator.quickScreen(concept);
// Note: Safety assessment not included in quick screen

Thread Safety

This class is stateless and thread-safe. Multiple concepts can be evaluated concurrently using the same evaluator instance, though thermodynamic database operations may require synchronization.

Version:
1.0
Author:
ESOL
See Also:
  • Field Details

    • flowAssuranceScreener

      private final FlowAssuranceScreener flowAssuranceScreener
      Flow assurance screener for hydrate, wax, and corrosion assessment.
    • safetyScreener

      private final SafetyScreener safetyScreener
      Safety screener for blowdown, ESD, and H2S assessment.
    • emissionsTracker

      private final EmissionsTracker emissionsTracker
      Emissions tracker for CO2 calculations.
    • economicsEstimator

      private final EconomicsEstimator economicsEstimator
      Economics estimator for CAPEX/OPEX calculations.
  • Constructor Details

    • ConceptEvaluator

      public ConceptEvaluator()
      Creates a new concept evaluator with default screeners.

      This is the recommended constructor for typical usage. Each screener is instantiated with default parameters suitable for screening-level analysis.

    • ConceptEvaluator

      public ConceptEvaluator(FlowAssuranceScreener flowAssuranceScreener, SafetyScreener safetyScreener, EmissionsTracker emissionsTracker, EconomicsEstimator economicsEstimator)
      Creates a concept evaluator with custom screeners.

      Use this constructor when you need to customize screener behavior, such as using different cost factors or risk thresholds.

      Parameters:
      flowAssuranceScreener - custom flow assurance screener
      safetyScreener - custom safety screener
      emissionsTracker - custom emissions tracker
      economicsEstimator - custom economics estimator
  • Method Details

    • evaluate

      public ConceptKPIs evaluate(FieldConcept concept)
      Evaluates a concept with auto-generated facility configuration.

      The facility configuration is automatically generated based on the concept's reservoir properties and processing requirements. This is suitable for initial screening when detailed facility design is not yet available.

      Parameters:
      concept - field concept to evaluate (must not be null)
      Returns:
      comprehensive concept KPIs including all screening results
      See Also:
    • evaluate

      public ConceptKPIs evaluate(FieldConcept concept, FacilityConfig facilityConfig)
      Evaluates a concept with a provided facility configuration.

      Use this method when you have a specific facility design to evaluate, such as when comparing different processing configurations for the same reservoir.

      Parameters:
      concept - field concept to evaluate (must not be null)
      facilityConfig - facility configuration defining process blocks
      Returns:
      comprehensive concept KPIs including all screening results
    • quickScreen

      public ConceptKPIs quickScreen(FieldConcept concept)
      Performs quick screening without full facility evaluation.

      This method provides a faster, lower-fidelity evaluation that skips safety screening and uses simplified facility assumptions. It's useful for:

      • Initial concept filtering before detailed analysis
      • Rapid sensitivity studies with many variations
      • Early-phase feasibility checks

      Note: The results are marked with a "fidelity" note indicating reduced accuracy. Safety reports are not included in quick screening.

      Parameters:
      concept - field concept to screen
      Returns:
      concept KPIs with reduced fidelity (no safety assessment)
    • calculateProductionKPIs

      private void calculateProductionKPIs(ConceptKPIs.Builder builder, FieldConcept concept)
      Calculates production KPIs from a ramp-up, plateau, and Arps decline forecast.
      Parameters:
      builder - KPI builder to update
      concept - concept to evaluate
    • isGasConcept

      private boolean isGasConcept(ReservoirInput reservoir)
      Checks whether a concept should be treated as gas-dominated.
      Parameters:
      reservoir - reservoir input, or null
      Returns:
      true if the concept is gas-dominated
    • getPeakRatePerDay

      private double getPeakRatePerDay(FieldConcept concept, boolean gasConcept)
      Gets the peak production rate in profile units.
      Parameters:
      concept - field concept
      gasConcept - true for gas concepts
      Returns:
      gas rate in Sm3/d or oil rate in bbl/d
    • calculateCumulativeInResourceUnit

      private double calculateCumulativeInResourceUnit(Map<Integer,Double> profile, boolean gasConcept, String resourceUnit, double targetRecoverable)
      Calculates cumulative production in the resource unit.
      Parameters:
      profile - annual production profile
      gasConcept - true for gas concepts
      resourceUnit - resource unit
      targetRecoverable - target recoverable resource in the resource unit
      Returns:
      cumulative production in the resource unit
    • estimateFieldLifeYears

      private double estimateFieldLifeYears(Map<Integer,Double> profile, boolean gasConcept, String resourceUnit, double targetRecoverable)
      Estimates field life from the profile and recoverable-resource target.
      Parameters:
      profile - annual production profile
      gasConcept - true for gas concepts
      resourceUnit - resource unit
      targetRecoverable - target recoverable resource in the resource unit
      Returns:
      field life in years
    • convertAnnualVolumeToResourceUnit

      private double convertAnnualVolumeToResourceUnit(double annualVolume, boolean gasConcept, String resourceUnit)
      Converts an annual profile volume to the reservoir resource unit.
      Parameters:
      annualVolume - annual volume in Sm3 for gas or bbl for oil
      gasConcept - true for gas concepts
      resourceUnit - resource unit
      Returns:
      annual volume in the resource unit
    • defaultRecoveryFactor

      private double defaultRecoveryFactor(ReservoirInput reservoir)
      Gets a default recovery factor when no explicit resource estimate exists.
      Parameters:
      reservoir - reservoir input, or null
      Returns:
      default recovery factor as a fraction from 0 to 1
    • calculateScores

      private void calculateScores(ConceptKPIs.Builder builder, FlowAssuranceReport faReport, SafetyReport safetyReport, EmissionsTracker.EmissionsReport emissionsReport, EconomicsEstimator.EconomicsReport economicsReport)
    • addWarnings

      private void addWarnings(ConceptKPIs.Builder builder, FlowAssuranceReport faReport, SafetyReport safetyReport, EmissionsTracker.EmissionsReport emissionsReport)