Class ConceptEvaluator
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:
- Production KPIs: Calculate plateau rate, field life, and recovery estimates
- Flow Assurance: Screen hydrate, wax, corrosion, and other risks
- Safety: Assess blowdown requirements, ESD complexity, and H2S considerations
- Emissions: Calculate CO2 emissions and intensity
- Economics: Estimate CAPEX, OPEX, and unit costs
- 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 Summary
FieldsModifier and TypeFieldDescriptionprivate final EconomicsEstimatorEconomics estimator for CAPEX/OPEX calculations.private final EmissionsTrackerEmissions tracker for CO2 calculations.private final FlowAssuranceScreenerFlow assurance screener for hydrate, wax, and corrosion assessment.private final SafetyScreenerSafety screener for blowdown, ESD, and H2S assessment. -
Constructor Summary
ConstructorsConstructorDescriptionCreates a new concept evaluator with default screeners.ConceptEvaluator(FlowAssuranceScreener flowAssuranceScreener, SafetyScreener safetyScreener, EmissionsTracker emissionsTracker, EconomicsEstimator economicsEstimator) Creates a concept evaluator with custom screeners. -
Method Summary
Modifier and TypeMethodDescriptionprivate voidaddWarnings(ConceptKPIs.Builder builder, FlowAssuranceReport faReport, SafetyReport safetyReport, EmissionsTracker.EmissionsReport emissionsReport) private doublecalculateCumulativeInResourceUnit(Map<Integer, Double> profile, boolean gasConcept, String resourceUnit, double targetRecoverable) Calculates cumulative production in the resource unit.private voidcalculateProductionKPIs(ConceptKPIs.Builder builder, FieldConcept concept) Calculates production KPIs from a ramp-up, plateau, and Arps decline forecast.private voidcalculateScores(ConceptKPIs.Builder builder, FlowAssuranceReport faReport, SafetyReport safetyReport, EmissionsTracker.EmissionsReport emissionsReport, EconomicsEstimator.EconomicsReport economicsReport) private doubleconvertAnnualVolumeToResourceUnit(double annualVolume, boolean gasConcept, String resourceUnit) Converts an annual profile volume to the reservoir resource unit.private doubledefaultRecoveryFactor(ReservoirInput reservoir) Gets a default recovery factor when no explicit resource estimate exists.private doubleestimateFieldLifeYears(Map<Integer, Double> profile, boolean gasConcept, String resourceUnit, double targetRecoverable) Estimates field life from the profile and recoverable-resource target.evaluate(FieldConcept concept) Evaluates a concept with auto-generated facility configuration.evaluate(FieldConcept concept, FacilityConfig facilityConfig) Evaluates a concept with a provided facility configuration.private doublegetPeakRatePerDay(FieldConcept concept, boolean gasConcept) Gets the peak production rate in profile units.private booleanisGasConcept(ReservoirInput reservoir) Checks whether a concept should be treated as gas-dominated.quickScreen(FieldConcept concept) Performs quick screening without full facility evaluation.
-
Field Details
-
flowAssuranceScreener
Flow assurance screener for hydrate, wax, and corrosion assessment. -
safetyScreener
Safety screener for blowdown, ESD, and H2S assessment. -
emissionsTracker
Emissions tracker for CO2 calculations. -
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 screenersafetyScreener- custom safety screeneremissionsTracker- custom emissions trackereconomicsEstimator- custom economics estimator
-
-
Method Details
-
evaluate
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
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
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
Calculates production KPIs from a ramp-up, plateau, and Arps decline forecast.- Parameters:
builder- KPI builder to updateconcept- concept to evaluate
-
isGasConcept
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
Gets the peak production rate in profile units.- Parameters:
concept- field conceptgasConcept- 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 profilegasConcept- true for gas conceptsresourceUnit- resource unittargetRecoverable- 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 profilegasConcept- true for gas conceptsresourceUnit- resource unittargetRecoverable- 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 oilgasConcept- true for gas conceptsresourceUnit- resource unit- Returns:
- annual volume in the resource unit
-
defaultRecoveryFactor
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)
-