Class FacilityCapacity
java.lang.Object
neqsim.process.util.fielddevelopment.FacilityCapacity
- All Implemented Interfaces:
Serializable
Extended facility capacity analysis for field development planning.
This class builds on ProductionOptimizer to provide comprehensive facility
capacity assessment capabilities including:
- Current bottleneck identification and utilization analysis
- Near-bottleneck equipment detection (approaching capacity)
- Debottleneck option generation and evaluation
- Multi-scenario comparison for capital planning
- Capacity evolution over field life as production declines
- NPV calculation for debottleneck investments
Bottleneck Analysis Concepts
The facility capacity is limited by the equipment with the highest utilization ratio:
Utilization = Current Duty / Maximum CapacityThe equipment with the highest utilization is the "bottleneck". Equipment with utilization above a threshold (typically 80%) are "near-bottlenecks" that may become constraints if the current bottleneck is relieved.
Debottleneck Option Generation
For each near-bottleneck, the system generates a FacilityCapacity.DebottleneckOption containing:
- Current and proposed capacity
- Incremental production enabled by the upgrade
- Estimated CAPEX (if cost factors are configured)
- Simple payback period
Integration with ProductionOptimizer
This class uses ProductionOptimizer for:
- Finding maximum sustainable production rate
- Evaluating utilization across all equipment
- Running scenario comparisons for debottleneck cases
Example Usage
FacilityCapacity capacity = new FacilityCapacity(facilityProcess);
// Perform comprehensive capacity assessment
CapacityAssessment assessment = capacity.assess(
feedStream,
1000.0, // lower bound
100000.0, // upper bound
"kg/hr");
System.out.println("Current max rate: " + assessment.getCurrentMaxRate());
System.out.println("Bottleneck: " + assessment.getCurrentBottleneck());
// Review debottleneck options
for (DebottleneckOption option : assessment.getDebottleneckOptions()) {
System.out.printf("%s: +%.0f kg/hr for $%.0f M (payback: %.1f years)%n",
option.getEquipmentName(),
option.getIncrementalProduction(),
option.getCapex() / 1e6,
option.getPaybackYears());
}
// Compare debottleneck scenarios
ScenarioComparisonResult comparison = capacity.compareDebottleneckScenarios(
feedStream, assessment.getDebottleneckOptions().subList(0, 3),
1000.0, 100000.0, "kg/hr");
System.out.println(comparison.toMarkdownTable());
- Version:
- 1.0
- Author:
- ESOL
- See Also:
-
Nested Class Summary
Nested ClassesModifier and TypeClassDescriptionstatic final classComplete facility capacity assessment result.static final classCapacity assessment period for time-varying analysis.static final classDebottleneck option with cost-benefit analysis. -
Field Summary
FieldsModifier and TypeFieldDescriptionprivate doubleDefault capacity increase factor for debottleneck options.Cost factors by equipment name for CAPEX estimation.Cost factors by equipment type for CAPEX estimation.static final doubleDefault capacity increase factor for debottleneck options.static final doubleDefault threshold for near-bottleneck detection (80% utilization).private final ProcessSystemProcess system representing the surface facility.private doubleThreshold for near-bottleneck detection.private ProductionOptimizerProduction optimizer for bottleneck analysis.private static final longSerialization version UID. -
Constructor Summary
ConstructorsConstructorDescriptionFacilityCapacity(ProcessSystem facility) Creates a facility capacity analyzer. -
Method Summary
Modifier and TypeMethodDescriptionanalyzeOverFieldLife(ProductionProfile.ProductionForecast forecast, StreamInterface feedStream) Analyzes capacity evolution over field life.assess(StreamInterface feedStream, double lowerBound, double upperBound, String rateUnit) Performs comprehensive capacity assessment.doublecalculateDebottleneckNPV(FacilityCapacity.DebottleneckOption option, double productPrice, double opexPerUnit, double discountRate, int yearsOfBenefit) Calculates NPV for a debottleneck investment.private doublecalculateSimpleNPV(double dailyIncrementalProduction, double revenuePerUnit, double capex, double discountRate, int years) Calculates simplified NPV for a debottleneck investment.compareDebottleneckScenarios(StreamInterface feedStream, List<FacilityCapacity.DebottleneckOption> options, double lowerBound, double upperBound, String rateUnit) Compares multiple debottleneck scenarios.createDebottleneckOption(ProcessEquipmentInterface equipment, ProductionOptimizer.OptimizationResult baseResult, StreamInterface feedStream, double lowerBound, double upperBound, String rateUnit) Creates a debottleneck option for a piece of equipment.private doubleestimateCapex(ProcessEquipmentInterface equipment, double currentCapacity, double upgradedCapacity) Estimates CAPEX for a capacity upgrade.private ProcessEquipmentInterfacefindEquipment(String name) Finds equipment by name in the facility.private List<FacilityCapacity.DebottleneckOption> generateDebottleneckOptions(ProductionOptimizer.OptimizationResult baseResult, StreamInterface feedStream, double lowerBound, double upperBound, String rateUnit) Generates debottleneck options for near-bottleneck equipment.Gets the facility process system.doubleGets the near-bottleneck threshold.private ProductionOptimizerGets the production optimizer instance.voidsetCapacityIncreaseFactor(double factor) Sets the capacity increase factor for debottleneck options.voidsetCostFactorForName(String equipmentName, double costPerUnit) Sets a cost factor for a specific equipment name.voidsetCostFactorForType(Class<?> equipmentType, double costPerUnit) Sets a cost factor for a specific equipment type.voidsetNearBottleneckThreshold(double threshold) Sets the near-bottleneck threshold.
-
Field Details
-
serialVersionUID
private static final long serialVersionUIDSerialization version UID.- See Also:
-
DEFAULT_NEAR_BOTTLENECK_THRESHOLD
public static final double DEFAULT_NEAR_BOTTLENECK_THRESHOLDDefault threshold for near-bottleneck detection (80% utilization).- See Also:
-
DEFAULT_CAPACITY_INCREASE_FACTOR
public static final double DEFAULT_CAPACITY_INCREASE_FACTORDefault capacity increase factor for debottleneck options.- See Also:
-
facility
Process system representing the surface facility. -
optimizer
Production optimizer for bottleneck analysis. -
nearBottleneckThreshold
private double nearBottleneckThresholdThreshold for near-bottleneck detection. -
capacityIncreaseFactor
private double capacityIncreaseFactorDefault capacity increase factor for debottleneck options. -
costFactorsByType
-
costFactorsByName
-
-
Constructor Details
-
FacilityCapacity
Creates a facility capacity analyzer.- Parameters:
facility- process system representing the surface facility
-
-
Method Details
-
assess
public FacilityCapacity.CapacityAssessment assess(StreamInterface feedStream, double lowerBound, double upperBound, String rateUnit) Performs comprehensive capacity assessment.This method:
- Runs production optimization to find maximum sustainable rate
- Identifies the current bottleneck and its utilization
- Finds all near-bottleneck equipment (>80% utilization)
- Generates debottleneck options for each near-bottleneck
- Estimates CAPEX and payback for each option
- Parameters:
feedStream- feed stream for rate adjustmentlowerBound- lower bound for rate optimizationupperBound- upper bound for rate optimizationrateUnit- rate unit- Returns:
- comprehensive capacity assessment
-
generateDebottleneckOptions
private List<FacilityCapacity.DebottleneckOption> generateDebottleneckOptions(ProductionOptimizer.OptimizationResult baseResult, StreamInterface feedStream, double lowerBound, double upperBound, String rateUnit) Generates debottleneck options for near-bottleneck equipment. -
createDebottleneckOption
private FacilityCapacity.DebottleneckOption createDebottleneckOption(ProcessEquipmentInterface equipment, ProductionOptimizer.OptimizationResult baseResult, StreamInterface feedStream, double lowerBound, double upperBound, String rateUnit) Creates a debottleneck option for a piece of equipment. -
estimateCapex
private double estimateCapex(ProcessEquipmentInterface equipment, double currentCapacity, double upgradedCapacity) Estimates CAPEX for a capacity upgrade. -
calculateSimpleNPV
private double calculateSimpleNPV(double dailyIncrementalProduction, double revenuePerUnit, double capex, double discountRate, int years) Calculates simplified NPV for a debottleneck investment. -
findEquipment
Finds equipment by name in the facility. -
compareDebottleneckScenarios
public ProductionOptimizer.ScenarioComparisonResult compareDebottleneckScenarios(StreamInterface feedStream, List<FacilityCapacity.DebottleneckOption> options, double lowerBound, double upperBound, String rateUnit) Compares multiple debottleneck scenarios.Creates and runs optimization scenarios for each debottleneck option, allowing direct comparison of production gains and costs.
- Parameters:
feedStream- feed stream for optimizationoptions- debottleneck options to comparelowerBound- lower bound for rate optimizationupperBound- upper bound for rate optimizationrateUnit- rate unit- Returns:
- scenario comparison result
-
analyzeOverFieldLife
public List<FacilityCapacity.CapacityPeriod> analyzeOverFieldLife(ProductionProfile.ProductionForecast forecast, StreamInterface feedStream) Analyzes capacity evolution over field life.Tracks how the bottleneck shifts as production declines, identifying when the facility becomes unconstrained.
- Parameters:
forecast- production forecast fromProductionProfilefeedStream- feed stream for facility analysis- Returns:
- list of capacity periods showing evolution
-
calculateDebottleneckNPV
public double calculateDebottleneckNPV(FacilityCapacity.DebottleneckOption option, double productPrice, double opexPerUnit, double discountRate, int yearsOfBenefit) Calculates NPV for a debottleneck investment.Uses discounted cash flow analysis considering:
- Incremental production over the benefit period
- Product price and operating costs
- Capital expenditure
- Discount rate for time value of money
- Parameters:
option- debottleneck option to evaluateproductPrice- price per unit of production (e.g., $/bbl)opexPerUnit- operating cost per unitdiscountRate- annual discount rate (e.g., 0.10 for 10%)yearsOfBenefit- number of years to realize benefit- Returns:
- net present value
-
getOptimizer
Gets the production optimizer instance.- Returns:
- optimizer (creates if needed)
-
getFacility
-
setNearBottleneckThreshold
public void setNearBottleneckThreshold(double threshold) Sets the near-bottleneck threshold.- Parameters:
threshold- utilization threshold (0-1)
-
getNearBottleneckThreshold
public double getNearBottleneckThreshold()Gets the near-bottleneck threshold.- Returns:
- threshold
-
setCapacityIncreaseFactor
public void setCapacityIncreaseFactor(double factor) Sets the capacity increase factor for debottleneck options.- Parameters:
factor- multiplication factor (e.g., 1.5 for 50% increase)
-
setCostFactorForType
Sets a cost factor for a specific equipment type.- Parameters:
equipmentType- equipment classcostPerUnit- cost per unit of capacity increase
-
setCostFactorForName
Sets a cost factor for a specific equipment name.- Parameters:
equipmentName- equipment namecostPerUnit- cost per unit of capacity increase
-