Class FieldProductionScheduler
java.lang.Object
neqsim.process.util.fielddevelopment.FieldProductionScheduler
- All Implemented Interfaces:
Serializable
Orchestrates field-level production scheduling and forecasting.
The FieldProductionScheduler integrates multiple reservoirs, wells, and surface
facilities to create production schedules that respect:
- Reservoir deliverability (pressure depletion, GOR evolution)
- Well capacity (IPR, VLP constraints)
- Facility bottlenecks (separation, compression, export)
- Contractual obligations (plateau targets, minimum delivery)
- Intervention schedules (workovers, shutdowns)
Architecture Overview
┌─────────────────────────────────────────────────────────────────────────────┐ │ FieldProductionScheduler │ ├─────────────────────────────────────────────────────────────────────────────┤ │ │ │ ┌──────────────┐ ┌──────────────┐ ┌──────────────┐ │ │ │ Reservoir 1 │ │ Reservoir 2 │ │ Reservoir N │ (SimpleReservoir) │ │ └──────┬───────┘ └──────┬───────┘ └──────┬───────┘ │ │ │ │ │ │ │ ▼ ▼ ▼ │ │ ┌──────────────────────────────────────────────────────┐ │ │ │ Well Manager │ │ │ │ ┌────┐ ┌────┐ ┌────┐ ┌────┐ ┌────┐ ┌────┐ │ (WellScheduler) │ │ │ │ W1 │ │ W2 │ │ W3 │ │ W4 │ │ I1 │ │ I2 │ │ │ │ │ └────┘ └────┘ └────┘ └────┘ └────┘ └────┘ │ │ │ └──────────────────────────┬───────────────────────────┘ │ │ │ │ │ ▼ │ │ ┌──────────────────────────────────────────────────────┐ │ │ │ Surface Facility (ProcessSystem) │ │ │ │ Separator → Compressor → Dehydration → Export │ (FacilityCapacity) │ └──────────────────────────┬───────────────────────────┘ │ │ │ │ │ ▼ │ │ ┌──────────────────────────────────────────────────────┐ │ │ │ Production Schedule │ │ │ │ Time → Rates → Volumes → Pressures → Economics │ │ │ └──────────────────────────────────────────────────────┘ │ │ │ └─────────────────────────────────────────────────────────────────────────────┘
Example Usage - Basic Field Scheduling
// Create reservoirs and facility
SimpleReservoir gasField = new SimpleReservoir("Gas Field");
gasField.setReservoirFluid(gasFluid, 5.0e9, 1.0, 1.0e7);
gasField.addGasProducer("GP-1");
gasField.addGasProducer("GP-2");
ProcessSystem facility = createFacilityModel();
// Create scheduler
FieldProductionScheduler scheduler = new FieldProductionScheduler("Offshore Field");
scheduler.addReservoir(gasField);
scheduler.setFacility(facility);
// Set production targets
scheduler.setPlateauRate(10.0, "MSm3/day");
scheduler.setPlateauDuration(5.0, "years");
scheduler.setMinimumRate(1.0, "MSm3/day");
// Run forecast
ProductionSchedule schedule = scheduler.generateSchedule(LocalDate.of(2025, 1, 1), 20.0, // years
30.0 // days per step
);
// Review results
System.out.println(schedule.toMarkdownTable());
System.out.println("Cumulative gas: " + schedule.getCumulativeGas("GSm3") + " GSm3");
System.out.println("Field life: " + schedule.getFieldLife("years") + " years");
Example Usage - With Economics
// Add economic parameters
scheduler.setGasPrice(8.0, "USD/MMBtu");
scheduler.setOilPrice(70.0, "USD/bbl");
scheduler.setDiscountRate(0.10); // 10% per year
scheduler.setOperatingCost(5.0e6, "USD/year");
ProductionSchedule schedule = scheduler.generateSchedule(...);
System.out.println("Gross revenue: $" + schedule.getGrossRevenue() / 1e9 + "B");
System.out.println("NPV: $" + schedule.getNPV() / 1e6 + "M");
- Version:
- 1.0
- Author:
- ESOL
- See Also:
-
Nested Class Summary
Nested ClassesModifier and TypeClassDescriptionstatic final classComplete production schedule result.static final classReservoir record containing reservoir reference and metadata.static final classSingle time step in a production schedule. -
Field Summary
FieldsModifier and TypeFieldDescriptionprivate static final doubleDays per year for calculations.private doubleprivate ProcessSystemSurface facility process system.private FacilityCapacityFacility capacity analyzer.private doubleprivate Stringprivate doubleprivate doubleprivate Stringprivate final StringScheduler name.private doubleprivate Stringprivate doubleprivate doubleprivate doubleprivate Stringprivate final List<FieldProductionScheduler.ReservoirRecord> List of reservoirs in the field.private booleanprivate static final longSerialization version UID.private booleanprivate WellSchedulerWell scheduler for intervention tracking. -
Constructor Summary
Constructors -
Method Summary
Modifier and TypeMethodDescriptionaddReservoir(SimpleReservoir reservoir) Adds a reservoir to the field.addReservoir(SimpleReservoir reservoir, String fluidType) Adds a reservoir to the field with specified fluid type.private doublecalculateRevenue(double gasRate, double oilRate, double days) Calculates revenue for a period.private doubleconvertRate(double value, String fromUnit, String toUnit) Converts rate between units.generateSchedule(LocalDate startDate, double durationYears, double timeStepDays) Generates a production schedule for the field.Gets the facility process system.getName()Gets the field name.Gets the list of reservoirs.Gets the well scheduler.setDiscountRate(double rate) Sets the discount rate for NPV calculations.setFacility(ProcessSystem facility) Sets the surface facility process system.setGasPrice(double price, String unit) Sets the gas price for economic calculations.setLowPressureLimit(double pressure) Sets the low pressure limit for reservoir abandonment.setMinimumRate(double rate, String unit) Sets the minimum economic rate (production stops below this).setOilPrice(double price, String unit) Sets the oil price for economic calculations.setOperatingCost(double cost, String unit) Sets the annual operating cost.setPlateauDuration(double duration, String unit) Sets the plateau duration.setPlateauRate(double rate, String unit) Sets the plateau production rate target.setRespectFacilityConstraints(boolean respect) Sets whether to respect facility constraints during scheduling.setTrackReservoirDepletion(boolean track) Sets whether to track reservoir depletion dynamically.setWellScheduler(WellScheduler scheduler) Sets the well scheduler for intervention tracking.
-
Field Details
-
serialVersionUID
private static final long serialVersionUIDSerialization version UID.- See Also:
-
DAYS_PER_YEAR
private static final double DAYS_PER_YEARDays per year for calculations.- See Also:
-
name
Scheduler name. -
reservoirs
List of reservoirs in the field. -
facility
Surface facility process system. -
wellScheduler
Well scheduler for intervention tracking. -
facilityCapacity
Facility capacity analyzer. -
plateauRate
private double plateauRate -
plateauRateUnit
-
plateauDuration
private double plateauDuration -
minimumRate
private double minimumRate -
minimumRateUnit
-
gasPrice
private double gasPrice -
gasPriceUnit
-
oilPrice
private double oilPrice -
oilPriceUnit
-
discountRate
private double discountRate -
operatingCostPerYear
private double operatingCostPerYear -
respectFacilityConstraints
private boolean respectFacilityConstraints -
trackReservoirDepletion
private boolean trackReservoirDepletion -
lowPressureLimit
private double lowPressureLimit
-
-
Constructor Details
-
FieldProductionScheduler
Creates a field production scheduler.- Parameters:
name- field name
-
-
Method Details
-
addReservoir
Adds a reservoir to the field.- Parameters:
reservoir- SimpleReservoir instance- Returns:
- this scheduler for chaining
-
addReservoir
Adds a reservoir to the field with specified fluid type.- Parameters:
reservoir- SimpleReservoir instancefluidType- "gas", "oil", or "condensate"- Returns:
- this scheduler for chaining
-
setFacility
Sets the surface facility process system.- Parameters:
facility- ProcessSystem representing the facility- Returns:
- this scheduler for chaining
-
setWellScheduler
Sets the well scheduler for intervention tracking.- Parameters:
scheduler- WellScheduler instance- Returns:
- this scheduler for chaining
-
setPlateauRate
Sets the plateau production rate target.- Parameters:
rate- plateau rateunit- rate unit (e.g., "MSm3/day", "kg/hr")- Returns:
- this scheduler for chaining
-
setPlateauDuration
Sets the plateau duration.- Parameters:
duration- duration valueunit- "years", "months", or "days"- Returns:
- this scheduler for chaining
-
setMinimumRate
Sets the minimum economic rate (production stops below this).- Parameters:
rate- minimum rateunit- rate unit- Returns:
- this scheduler for chaining
-
setGasPrice
Sets the gas price for economic calculations.- Parameters:
price- gas priceunit- price unit (e.g., "USD/MMBtu", "USD/Sm3")- Returns:
- this scheduler for chaining
-
setOilPrice
Sets the oil price for economic calculations.- Parameters:
price- oil priceunit- price unit (e.g., "USD/bbl", "USD/Sm3")- Returns:
- this scheduler for chaining
-
setDiscountRate
Sets the discount rate for NPV calculations.- Parameters:
rate- annual discount rate (e.g., 0.10 for 10%)- Returns:
- this scheduler for chaining
-
setOperatingCost
Sets the annual operating cost.- Parameters:
cost- annual operating costunit- currency unit (for documentation)- Returns:
- this scheduler for chaining
-
setRespectFacilityConstraints
Sets whether to respect facility constraints during scheduling.- Parameters:
respect- true to respect constraints- Returns:
- this scheduler for chaining
-
setTrackReservoirDepletion
Sets whether to track reservoir depletion dynamically.- Parameters:
track- true to run reservoir transient simulation- Returns:
- this scheduler for chaining
-
setLowPressureLimit
Sets the low pressure limit for reservoir abandonment.- Parameters:
pressure- minimum reservoir pressure (bara)- Returns:
- this scheduler for chaining
-
generateSchedule
public FieldProductionScheduler.ProductionSchedule generateSchedule(LocalDate startDate, double durationYears, double timeStepDays) Generates a production schedule for the field.- Parameters:
startDate- schedule start datedurationYears- forecast duration in yearstimeStepDays- time step in days- Returns:
- production schedule
-
convertRate
-
calculateRevenue
private double calculateRevenue(double gasRate, double oilRate, double days) Calculates revenue for a period.- Parameters:
gasRate- gas rate (Sm3/day)oilRate- oil rate (Sm3/day)days- period duration in days- Returns:
- revenue in currency units
-
getName
-
getReservoirs
Gets the list of reservoirs.- Returns:
- unmodifiable list of reservoir records
-
getFacility
Gets the facility process system.- Returns:
- facility or null if not set
-
getWellScheduler
Gets the well scheduler.- Returns:
- well scheduler or null if not set
-