Class TiebackAnalyzer
java.lang.Object
neqsim.process.fielddevelopment.tieback.TiebackAnalyzer
- All Implemented Interfaces:
Serializable
Analyzes tie-back options for connecting satellite fields to host facilities.
The TiebackAnalyzer is the main entry point for evaluating subsea tie-back development options. For each potential host facility, it:
- Calculates distance and checks routing feasibility
- Evaluates host capacity constraints
- Performs flow assurance screening
- Estimates CAPEX breakdown
- Calculates NPV and other economics
- Ranks options by value
Cost Estimation Basis
The analyzer uses parametric cost models calibrated to Norwegian Continental Shelf benchmarks:
- Subsea tree: 25 MUSD per well
- Manifold/template: 30-50 MUSD
- Pipeline: 2-4 MUSD/km depending on diameter
- Umbilical: 1 MUSD/km
- Host modifications: 20-100 MUSD depending on scope
Example Usage
// Define discovery
FieldConcept discovery = FieldConcept.gasTieback("Marginal Gas", 25.0, 2, 1.5);
// Define potential hosts
List<HostFacility> hosts = new ArrayList<>();
hosts.add(HostFacility.builder("Platform A").location(61.5, 2.3).waterDepth(110)
.spareGasCapacity(3.0).minTieInPressure(80).build());
hosts.add(HostFacility.builder("FPSO B").location(61.8, 2.1).waterDepth(350)
.spareGasCapacity(5.0).build());
// Analyze
TiebackAnalyzer analyzer = new TiebackAnalyzer();
TiebackReport report = analyzer.analyze(discovery, hosts, 61.6, 2.5);
// Review results
System.out.println(report.getSummary());
TiebackOption best = report.getBestOption();
- Version:
- 1.0
- Author:
- ESOL
- See Also:
-
Nested Class Summary
Nested ClassesModifier and TypeClassDescriptionstatic classScreening result for quick tieback evaluation. -
Field Summary
FieldsModifier and TypeFieldDescriptionprivate doubleDiscount rate for NPV calculations.private doubleDrilling cost per well in MUSD.private final FlowAssuranceScreenerFlow assurance screener using NeqSim thermodynamics.private doubleDefault gas price in USD/Sm3.private doubleBase cost for host modifications in MUSD.private doubleBase cost for manifold/template in MUSD.private doubleMaximum tieback distance in km.private doubleMinimum hydrate margin for PASS in Celsius.private doubleDefault oil price in USD/bbl.private doubleOPEX as fraction of CAPEX per year.private doublePipeline cost per km in MUSD (base, adjusted for diameter).private doubleSeabed temperature for flow assurance in Celsius.private static final longprivate doubleCost per subsea tree in MUSD.private NorwegianTaxModelprivate doubleUmbilical cost per km in MUSD. -
Constructor Summary
Constructors -
Method Summary
Modifier and TypeMethodDescriptionanalyze(FieldConcept discovery, List<HostFacility> hosts) Analyzes tieback options using concept infrastructure input for location.analyze(FieldConcept discovery, List<HostFacility> hosts, double discoveryLatitude, double discoveryLongitude) Analyzes all tieback options for a discovery.analyze(FieldConcept discovery, List<HostFacility> hosts, Map<String, TiebackRouteNetwork> routeNetworksByHost, double discoveryLatitude, double discoveryLongitude) Analyzes tieback options with optional route networks per host.private voidapplyFlowAssuranceReport(TiebackOption option, FlowAssuranceReport report) Applies thermodynamic flow-assurance results to the tieback option.private voidapplyHydraulicResult(TiebackOption option, MultiphaseFlowIntegrator.PipelineResult result, HostFacility host) Applies hydraulic result values to the tieback option.private voidapplyRouteNetworkSummary(TiebackOption option, TiebackRouteNetwork routeNetwork) Applies route-network metadata to a tieback option.private StringbuildFlowAssuranceNotes(TiebackOption option, FlowAssuranceReport report, MultiphaseFlowIntegrator.PipelineResult hydraulicResult, double seabedTemperatureC) Builds human-readable flow-assurance notes.private voidcalculateEconomics(TiebackOption option, boolean isGasField, int wellCount, double gasRateMSm3d, double oilRateBopd) private SystemInterfacecreateRepresentativeFluid(ReservoirInput reservoir, double temperatureC, double pressureBara) Creates a representative fluid for hydraulic screening.private StreamcreateRepresentativeWellheadStream(ReservoirInput reservoir, double pressureBara, double temperatureC, boolean isGasField, double totalRate, String rateUnit) Creates a representative wellhead stream for hydraulic screening.private doubleestimateArrivalTemperatureC(double inletTemperatureC, double seabedTemperatureC, double distanceKm, InfrastructureInput infrastructure) Estimates arrival temperature if the hydraulic model cannot run.private voidestimateCapex(TiebackOption option, int wellCount, double distanceKm, HostFacility host) private doubleestimateFlowlineHeatTransferCoefficient(InfrastructureInput infrastructure) Estimates a representative flowline heat transfer coefficient.private doubleestimateMassFlowKgHr(boolean isGasField, double totalRate, String rateUnit) Estimates total mass flow for hydraulic screening.private doubleestimatePipelineDiameterInches(int wellCount, double totalRate, String rateUnit, boolean isGasField) Estimates a screening pipeline diameter.private doubleestimateProducedWaterRate(ReservoirInput reservoir, double oilRateBopd) Estimates produced-water rate from water cut and oil rate.private doubleestimateQuickCapex(double distanceKm, double waterDepthM) Quick CAPEX estimate for screening.private doubleestimateQuickNpv(double reservesMMboe, double capexMusd) Quick NPV estimate for screening.private doubleestimateShutdownCooldownHours(TiebackOption option, double inletTemperatureC, double seabedTemperatureC, InfrastructureInput infrastructure) Estimates shutdown cooldown time to hydrate risk.private doubleestimateShutdownCooldownRisk(TiebackOption option, InfrastructureInput infrastructure) Estimates shutdown cooldown risk score.private doubleestimateTotalLiquidRateM3d(double oilRateBopd, double waterRateM3d) Estimates total liquid rate.evaluateSingleTieback(FieldConcept discovery, HostFacility host, double discoveryLatitude, double discoveryLongitude) Evaluates a single tieback option.evaluateSingleTieback(FieldConcept discovery, HostFacility host, TiebackRouteNetwork routeNetwork, double discoveryLatitude, double discoveryLongitude) Evaluates a single tieback option using an optional multi-segment route network.doubleGets the discount rate.doubleGets the gas price.doubleGets the maximum tieback distance.doubleGets the oil price.doubleGets the pipeline cost per km.doubleGets the subsea tree cost.Gets the tax model.quickScreen(double discoveryLat, double discoveryLon, double reservesMMboe, double waterDepthM, HostFacility host) Quick screening for tieback feasibility without full analysis.private doubleresolveRouteLengthKm(FieldConcept discovery, HostFacility host, double discoveryLatitude, double discoveryLongitude, TiebackRouteNetwork routeNetwork) Resolves the route length used for screening.private doubleresolveWaterDepthM(FieldConcept discovery, HostFacility host, TiebackRouteNetwork routeNetwork) Resolves water depth from concept infrastructure and host data.screenAllHosts(double discoveryLat, double discoveryLon, double reservesMMboe, double waterDepthM, List<HostFacility> hosts) Screen multiple hosts quickly and return ranked results.private voidscreenFlowAssurance(TiebackOption option, FieldConcept discovery, HostFacility host, ReservoirInput reservoir, WellsInput wells, boolean isGasField, double totalRate, String rateUnit, TiebackRouteNetwork routeNetwork) Screens the tieback route using pipeline hydraulics and thermodynamic flow-assurance checks.voidsetDiscountRate(double discountRate) Sets the discount rate.voidsetGasPriceUsdPerSm3(double gasPriceUsdPerSm3) Sets the gas price.voidsetMaxTiebackDistanceKm(double maxTiebackDistanceKm) Sets the maximum tieback distance.voidsetOilPriceUsdPerBbl(double oilPriceUsdPerBbl) Sets the oil price.voidsetPipelineCostPerKmMusd(double pipelineCostPerKmMusd) Sets the pipeline cost per km.voidsetSubseaTreeCostMusd(double subseaTreeCostMusd) Sets the subsea tree cost.voidsetTaxModel(NorwegianTaxModel taxModel) Sets the tax model.
-
Field Details
-
serialVersionUID
private static final long serialVersionUID- See Also:
-
subseaTreeCostMusd
private double subseaTreeCostMusdCost per subsea tree in MUSD. -
manifoldBaseCostMusd
private double manifoldBaseCostMusdBase cost for manifold/template in MUSD. -
pipelineCostPerKmMusd
private double pipelineCostPerKmMusdPipeline cost per km in MUSD (base, adjusted for diameter). -
umbilicalCostPerKmMusd
private double umbilicalCostPerKmMusdUmbilical cost per km in MUSD. -
hostModificationBaseCostMusd
private double hostModificationBaseCostMusdBase cost for host modifications in MUSD. -
drillingCostPerWellMusd
private double drillingCostPerWellMusdDrilling cost per well in MUSD. -
discountRate
private double discountRateDiscount rate for NPV calculations. -
gasPriceUsdPerSm3
private double gasPriceUsdPerSm3Default gas price in USD/Sm3. -
oilPriceUsdPerBbl
private double oilPriceUsdPerBblDefault oil price in USD/bbl. -
opexFraction
private double opexFractionOPEX as fraction of CAPEX per year. -
maxTiebackDistanceKm
private double maxTiebackDistanceKmMaximum tieback distance in km. -
minHydrateMarginC
private double minHydrateMarginCMinimum hydrate margin for PASS in Celsius. -
seabedTemperatureC
private double seabedTemperatureCSeabed temperature for flow assurance in Celsius. -
flowAssuranceScreener
Flow assurance screener using NeqSim thermodynamics. -
taxModel
-
-
Constructor Details
-
TiebackAnalyzer
public TiebackAnalyzer()Creates a new tieback analyzer with default parameters.
-
-
Method Details
-
analyze
public TiebackReport analyze(FieldConcept discovery, List<HostFacility> hosts, double discoveryLatitude, double discoveryLongitude) Analyzes all tieback options for a discovery.For each host facility, evaluates the technical feasibility and economic attractiveness of a tieback connection. Options are ranked by NPV, with infeasible options marked accordingly.
- Parameters:
discovery- the satellite field concepthosts- list of potential host facilitiesdiscoveryLatitude- discovery latitude in degreesdiscoveryLongitude- discovery longitude in degrees- Returns:
- comprehensive tieback report with ranked options
-
analyze
public TiebackReport analyze(FieldConcept discovery, List<HostFacility> hosts, Map<String, TiebackRouteNetwork> routeNetworksByHost, double discoveryLatitude, double discoveryLongitude) Analyzes tieback options with optional route networks per host.- Parameters:
discovery- the satellite field concepthosts- list of potential host facilitiesrouteNetworksByHost- optional map from host name to route networkdiscoveryLatitude- discovery latitude in degreesdiscoveryLongitude- discovery longitude in degrees- Returns:
- comprehensive tieback report with ranked options
-
analyze
Analyzes tieback options using concept infrastructure input for location.- Parameters:
discovery- the satellite field concepthosts- list of potential host facilities- Returns:
- comprehensive tieback report
-
evaluateSingleTieback
public TiebackOption evaluateSingleTieback(FieldConcept discovery, HostFacility host, double discoveryLatitude, double discoveryLongitude) Evaluates a single tieback option.- Parameters:
discovery- the satellite field concepthost- the host facilitydiscoveryLatitude- discovery latitudediscoveryLongitude- discovery longitude- Returns:
- evaluated tieback option
-
evaluateSingleTieback
public TiebackOption evaluateSingleTieback(FieldConcept discovery, HostFacility host, TiebackRouteNetwork routeNetwork, double discoveryLatitude, double discoveryLongitude) Evaluates a single tieback option using an optional multi-segment route network.- Parameters:
discovery- the satellite field concepthost- the host facilityrouteNetwork- route network to use, or null for scalar route-length screeningdiscoveryLatitude- discovery latitudediscoveryLongitude- discovery longitude- Returns:
- evaluated tieback option
-
screenFlowAssurance
private void screenFlowAssurance(TiebackOption option, FieldConcept discovery, HostFacility host, ReservoirInput reservoir, WellsInput wells, boolean isGasField, double totalRate, String rateUnit, TiebackRouteNetwork routeNetwork) Screens the tieback route using pipeline hydraulics and thermodynamic flow-assurance checks.- Parameters:
option- tieback option to updatediscovery- discovery concepthost- receiving host facilityreservoir- reservoir input, or null for defaultswells- well input, or null for defaultsisGasField- true when gas-rate economics and capacity should be usedtotalRate- total wellhead rate in the supplied rate unitrateUnit- total rate unit
-
applyHydraulicResult
private void applyHydraulicResult(TiebackOption option, MultiphaseFlowIntegrator.PipelineResult result, HostFacility host) Applies hydraulic result values to the tieback option.- Parameters:
option- tieback option to updateresult- pipeline hydraulic resulthost- receiving host facility
-
applyFlowAssuranceReport
Applies thermodynamic flow-assurance results to the tieback option.- Parameters:
option- tieback option to updatereport- flow assurance report
-
estimateCapex
private void estimateCapex(TiebackOption option, int wellCount, double distanceKm, HostFacility host) -
calculateEconomics
private void calculateEconomics(TiebackOption option, boolean isGasField, int wellCount, double gasRateMSm3d, double oilRateBopd) -
resolveRouteLengthKm
private double resolveRouteLengthKm(FieldConcept discovery, HostFacility host, double discoveryLatitude, double discoveryLongitude, TiebackRouteNetwork routeNetwork) Resolves the route length used for screening.- Parameters:
discovery- discovery concepthost- host facilitydiscoveryLatitude- discovery latitude in degreesdiscoveryLongitude- discovery longitude in degreesrouteNetwork- optional route network- Returns:
- route length in km
-
resolveWaterDepthM
private double resolveWaterDepthM(FieldConcept discovery, HostFacility host, TiebackRouteNetwork routeNetwork) Resolves water depth from concept infrastructure and host data.- Parameters:
discovery- discovery concepthost- host facilityrouteNetwork- optional route network- Returns:
- maximum route water depth in meters
-
applyRouteNetworkSummary
Applies route-network metadata to a tieback option.- Parameters:
option- tieback option to updaterouteNetwork- optional route network
-
estimateProducedWaterRate
Estimates produced-water rate from water cut and oil rate.- Parameters:
reservoir- reservoir input, or nulloilRateBopd- oil rate in bbl/d- Returns:
- produced-water rate in m3/d
-
estimateTotalLiquidRateM3d
private double estimateTotalLiquidRateM3d(double oilRateBopd, double waterRateM3d) Estimates total liquid rate.- Parameters:
oilRateBopd- oil rate in bbl/dwaterRateM3d- water rate in m3/d- Returns:
- total liquid rate in m3/d
-
estimatePipelineDiameterInches
private double estimatePipelineDiameterInches(int wellCount, double totalRate, String rateUnit, boolean isGasField) Estimates a screening pipeline diameter.- Parameters:
wellCount- number of producing wellstotalRate- total production raterateUnit- total production rate unitisGasField- true for gas field concepts- Returns:
- pipeline diameter in inches
-
estimateFlowlineHeatTransferCoefficient
Estimates a representative flowline heat transfer coefficient.- Parameters:
infrastructure- infrastructure input, or null- Returns:
- overall heat transfer coefficient in W/m2K
-
createRepresentativeWellheadStream
private Stream createRepresentativeWellheadStream(ReservoirInput reservoir, double pressureBara, double temperatureC, boolean isGasField, double totalRate, String rateUnit) Creates a representative wellhead stream for hydraulic screening.- Parameters:
reservoir- reservoir input, or null for defaultspressureBara- wellhead pressure in baratemperatureC- wellhead temperature in CelsiusisGasField- true for gas field conceptstotalRate- total production raterateUnit- total production rate unit- Returns:
- representative stream with total mass flow set
-
createRepresentativeFluid
private SystemInterface createRepresentativeFluid(ReservoirInput reservoir, double temperatureC, double pressureBara) Creates a representative fluid for hydraulic screening.- Parameters:
reservoir- reservoir input, or null for defaultstemperatureC- temperature in CelsiuspressureBara- pressure in bara- Returns:
- initialized thermodynamic system
-
estimateMassFlowKgHr
Estimates total mass flow for hydraulic screening.- Parameters:
isGasField- true for gas field conceptstotalRate- total raterateUnit- rate unit- Returns:
- mass flow in kg/hr
-
estimateArrivalTemperatureC
private double estimateArrivalTemperatureC(double inletTemperatureC, double seabedTemperatureC, double distanceKm, InfrastructureInput infrastructure) Estimates arrival temperature if the hydraulic model cannot run.- Parameters:
inletTemperatureC- inlet temperature in CelsiusseabedTemperatureC- seabed temperature in CelsiusdistanceKm- route length in kminfrastructure- infrastructure input, or null- Returns:
- estimated arrival temperature in Celsius
-
estimateShutdownCooldownHours
private double estimateShutdownCooldownHours(TiebackOption option, double inletTemperatureC, double seabedTemperatureC, InfrastructureInput infrastructure) Estimates shutdown cooldown time to hydrate risk.- Parameters:
option- tieback option with hydrate resultsinletTemperatureC- inlet temperature in CelsiusseabedTemperatureC- seabed temperature in Celsiusinfrastructure- infrastructure input, or null- Returns:
- cooldown time in hours
-
estimateShutdownCooldownRisk
private double estimateShutdownCooldownRisk(TiebackOption option, InfrastructureInput infrastructure) Estimates shutdown cooldown risk score.- Parameters:
option- tieback option with cooldown resultsinfrastructure- infrastructure input, or null- Returns:
- risk score from 0 to 1
-
buildFlowAssuranceNotes
private String buildFlowAssuranceNotes(TiebackOption option, FlowAssuranceReport report, MultiphaseFlowIntegrator.PipelineResult hydraulicResult, double seabedTemperatureC) Builds human-readable flow-assurance notes.- Parameters:
option- tieback optionreport- flow assurance reporthydraulicResult- hydraulic result, or null if hydraulic screening failedseabedTemperatureC- seabed temperature in Celsius- Returns:
- notes string
-
getDiscountRate
public double getDiscountRate()Gets the discount rate.- Returns:
- discount rate (0-1)
-
setDiscountRate
public void setDiscountRate(double discountRate) Sets the discount rate.- Parameters:
discountRate- discount rate (0-1)
-
getGasPriceUsdPerSm3
public double getGasPriceUsdPerSm3()Gets the gas price.- Returns:
- gas price in USD/Sm3
-
setGasPriceUsdPerSm3
public void setGasPriceUsdPerSm3(double gasPriceUsdPerSm3) Sets the gas price.- Parameters:
gasPriceUsdPerSm3- gas price in USD/Sm3
-
getOilPriceUsdPerBbl
public double getOilPriceUsdPerBbl()Gets the oil price.- Returns:
- oil price in USD/bbl
-
setOilPriceUsdPerBbl
public void setOilPriceUsdPerBbl(double oilPriceUsdPerBbl) Sets the oil price.- Parameters:
oilPriceUsdPerBbl- oil price in USD/bbl
-
getSubseaTreeCostMusd
public double getSubseaTreeCostMusd()Gets the subsea tree cost.- Returns:
- cost in MUSD per tree
-
setSubseaTreeCostMusd
public void setSubseaTreeCostMusd(double subseaTreeCostMusd) Sets the subsea tree cost.- Parameters:
subseaTreeCostMusd- cost in MUSD per tree
-
getPipelineCostPerKmMusd
public double getPipelineCostPerKmMusd()Gets the pipeline cost per km.- Returns:
- cost in MUSD/km
-
setPipelineCostPerKmMusd
public void setPipelineCostPerKmMusd(double pipelineCostPerKmMusd) Sets the pipeline cost per km.- Parameters:
pipelineCostPerKmMusd- cost in MUSD/km
-
getMaxTiebackDistanceKm
public double getMaxTiebackDistanceKm()Gets the maximum tieback distance.- Returns:
- maximum distance in km
-
setMaxTiebackDistanceKm
public void setMaxTiebackDistanceKm(double maxTiebackDistanceKm) Sets the maximum tieback distance.- Parameters:
maxTiebackDistanceKm- maximum distance in km
-
getTaxModel
-
setTaxModel
Sets the tax model.- Parameters:
taxModel- tax model
-
quickScreen
public TiebackAnalyzer.TiebackScreeningResult quickScreen(double discoveryLat, double discoveryLon, double reservesMMboe, double waterDepthM, HostFacility host) Quick screening for tieback feasibility without full analysis.Performs rapid go/no-go screening based on key constraints:
- Distance to host
- Water depth compatibility
- Host capacity
- Pressure compatibility
- Parameters:
discoveryLat- discovery latitudediscoveryLon- discovery longitudereservesMMboe- reserves in MMboewaterDepthM- water depth in metershost- potential host facility- Returns:
- screening result with pass/fail and reason
-
screenAllHosts
public List<TiebackAnalyzer.TiebackScreeningResult> screenAllHosts(double discoveryLat, double discoveryLon, double reservesMMboe, double waterDepthM, List<HostFacility> hosts) Screen multiple hosts quickly and return ranked results.- Parameters:
discoveryLat- discovery latitudediscoveryLon- discovery longitudereservesMMboe- reserves in MMboewaterDepthM- water depth in metershosts- list of potential hosts- Returns:
- list of screening results, ranked by estimated NPV
-
estimateQuickCapex
private double estimateQuickCapex(double distanceKm, double waterDepthM) Quick CAPEX estimate for screening.- Parameters:
distanceKm- the tieback distance in kilometerswaterDepthM- the water depth in meters- Returns:
- the estimated CAPEX in million USD
-
estimateQuickNpv
private double estimateQuickNpv(double reservesMMboe, double capexMusd) Quick NPV estimate for screening.- Parameters:
reservesMMboe- recoverable reserves in million barrels of oil equivalentcapexMusd- capital expenditure in million USD- Returns:
- estimated net present value in million USD
-