Skip to content

Commit 7a1dfd5

Browse files
adjust example14_data-center cost representation, regenerate examples affected by previous commit
1 parent de4298c commit 7a1dfd5

7 files changed

Lines changed: 139 additions & 121 deletions

File tree

src/geophires_x/AGSEconomics.py

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -62,6 +62,8 @@ def __init__(self, model: Model):
6262
Required=True,
6363
ErrMessage="assume default Operation & Maintenance cost of surface plant expressed as fraction of total surface plant capital cost (0.015)"
6464
)
65+
66+
# TODO migrate to parent class and integrate for CHP
6567
self.Direct_use_heat_cost_per_kWth = self.ParameterDict[
6668
self.Direct_use_heat_cost_per_kWth.Name] = floatParameter(
6769
"Capital Cost for Surface Plant for Direct-use System",

src/geophires_x/Economics.py

Lines changed: 14 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -3093,6 +3093,8 @@ def calculate_field_gathering_costs(self, model: Model) -> None:
30933093
(model.wellbores.nprod.value + model.wellbores.ninj.value) * 750 * 500. + self.Cpumps) / 1E6
30943094

30953095
def calculate_plant_costs(self, model: Model) -> None:
3096+
direct_use_heat_default_cost_musd_per_kwth = 250E-6 # TODO parameterize
3097+
30963098
# plant costs
30973099
if (model.surfaceplant.enduse_option.value == EndUseOptions.HEAT
30983100
and model.surfaceplant.plant_type.value not in [PlantType.ABSORPTION_CHILLER, PlantType.HEAT_PUMP, PlantType.DISTRICT_HEATING]): # direct-use
@@ -3102,7 +3104,7 @@ def calculate_plant_costs(self, model: Model) -> None:
31023104
self.Cplant.value = (self._indirect_cost_factor
31033105
* self._contingency_factor
31043106
* self.ccplantadjfactor.value
3105-
* 250E-6
3107+
* direct_use_heat_default_cost_musd_per_kwth
31063108
* np.max(model.surfaceplant.HeatExtracted.value)
31073109
* 1000.)
31083110

@@ -3115,7 +3117,7 @@ def calculate_plant_costs(self, model: Model) -> None:
31153117
self.Cplant.value = (self._indirect_cost_factor
31163118
* self._contingency_factor
31173119
* self.ccplantadjfactor.value
3118-
* 250E-6
3120+
* direct_use_heat_default_cost_musd_per_kwth
31193121
* np.max(model.surfaceplant.HeatExtracted.value)
31203122
* 1000.)
31213123
if self.chillercapex.value == -1: # no value provided by user, use built-in correlation ($2500/ton)
@@ -3135,7 +3137,7 @@ def calculate_plant_costs(self, model: Model) -> None:
31353137
self.Cplant.value = self.ccplantfixed.value
31363138
else:
31373139
# this is for the direct-use part all the way up to the heat pump
3138-
self.Cplant.value = self._indirect_cost_factor * self._contingency_factor * self.ccplantadjfactor.value * 250E-6 * np.max(
3140+
self.Cplant.value = self._indirect_cost_factor * self._contingency_factor * self.ccplantadjfactor.value * direct_use_heat_default_cost_musd_per_kwth * np.max(
31393141
model.surfaceplant.HeatExtracted.value) * 1000.
31403142
if self.heatpumpcapex.value == -1: # no value provided by user, use built-in correlation ($150/kWth)
31413143
self.heatpumpcapex.value = self._indirect_cost_factor * self._contingency_factor * np.max(
@@ -3149,7 +3151,7 @@ def calculate_plant_costs(self, model: Model) -> None:
31493151
if self.ccplantfixed.Valid:
31503152
self.Cplant.value = self.ccplantfixed.value
31513153
else:
3152-
self.Cplant.value = self._indirect_cost_factor * self._contingency_factor * self.ccplantadjfactor.value * 250E-6 * np.max(
3154+
self.Cplant.value = self._indirect_cost_factor * self._contingency_factor * self.ccplantadjfactor.value * direct_use_heat_default_cost_musd_per_kwth * np.max(
31533155
model.surfaceplant.HeatExtracted.value) * 1000.
31543156

31553157
# add 65$/KW for peaking boiler
@@ -3344,7 +3346,7 @@ def calculate_plant_costs(self, model: Model) -> None:
33443346
self._indirect_cost_factor
33453347
* self._contingency_factor
33463348
* self.ccplantadjfactor.value
3347-
* 250E-6
3349+
* direct_use_heat_default_cost_musd_per_kwth
33483350
* np.max(model.surfaceplant.HeatProduced.value / model.surfaceplant.enduse_efficiency_factor.value)
33493351
* 1000.,
33503352
'MUSD'
@@ -3354,11 +3356,14 @@ def calculate_plant_costs(self, model: Model) -> None:
33543356
EndUseOptions.COGENERATION_BOTTOMING_EXTRA_HEAT,
33553357
EndUseOptions.COGENERATION_BOTTOMING_EXTRA_ELECTRICITY
33563358
]:
3357-
self.CAPEX_cost_heat_plant.value = quantity(self._indirect_cost_factor * self._contingency_factor * self.ccplantadjfactor.value * 250E-6 * np.max(
3359+
self.CAPEX_cost_heat_plant.value = quantity(self._indirect_cost_factor * self._contingency_factor * self.ccplantadjfactor.value * direct_use_heat_default_cost_musd_per_kwth * np.max(
33583360
model.surfaceplant.HeatProduced.value / model.surfaceplant.enduse_efficiency_factor.value) * 1000., 'MUSD').to(self.CAPEX_cost_heat_plant.CurrentUnits).magnitude
3359-
elif model.surfaceplant.enduse_option.value in [EndUseOptions.COGENERATION_PARALLEL_EXTRA_ELECTRICITY,
3360-
EndUseOptions.COGENERATION_PARALLEL_EXTRA_HEAT]: # cogen parallel cycle
3361-
self.CAPEX_cost_heat_plant.value = quantity(self._indirect_cost_factor * self._contingency_factor * self.ccplantadjfactor.value * 250E-6 * np.max(
3361+
elif model.surfaceplant.enduse_option.value in [
3362+
# cogen parallel cycle
3363+
EndUseOptions.COGENERATION_PARALLEL_EXTRA_ELECTRICITY,
3364+
EndUseOptions.COGENERATION_PARALLEL_EXTRA_HEAT
3365+
]:
3366+
self.CAPEX_cost_heat_plant.value = quantity(self._indirect_cost_factor * self._contingency_factor * self.ccplantadjfactor.value * direct_use_heat_default_cost_musd_per_kwth * np.max(
33623367
model.surfaceplant.HeatProduced.value / model.surfaceplant.enduse_efficiency_factor.value) * 1000., 'MUSD').to(self.CAPEX_cost_heat_plant.CurrentUnits).magnitude
33633368

33643369
self.Cplant.value = self.Cplant.value + quantity(self.CAPEX_cost_heat_plant_musd, 'MUSD').to(self.Cplant.CurrentUnits.value).magnitude

tests/examples/S-DAC-GT.out

Lines changed: 9 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -4,10 +4,10 @@
44

55
Simulation Metadata
66
----------------------
7-
GEOPHIRES Version: 3.9.7
8-
Simulation Date: 2025-05-15
9-
Simulation Time: 10:13
10-
Calculation Time: 0.099 sec
7+
GEOPHIRES Version: 3.12.1
8+
Simulation Date: 2026-04-07
9+
Simulation Time: 10:46
10+
Calculation Time: 0.135 sec
1111

1212
***SUMMARY OF RESULTS***
1313

@@ -26,7 +26,7 @@ Simulation Metadata
2626
***ECONOMIC PARAMETERS***
2727

2828
Economic Model = BICYCLE
29-
Accrued financing during construction: 0.00 %
29+
Accrued financing during construction: 0.00 %
3030
Project lifetime: 30 yr
3131
Capacity factor: 90.0 %
3232
Project NPV: -82.17 MUSD
@@ -66,7 +66,7 @@ Simulation Metadata
6666
m/A Drawdown Parameter: 0.00002 1/year
6767
Bottom-hole temperature: 232.00 degC
6868
Reservoir volume calculated with fracture separation and number of fractures as input
69-
Number of fractures: 12.00
69+
Number of fractures: 12
7070
Fracture separation: 80.00 meter
7171
Reservoir volume: 176000000 m**3
7272
Reservoir hydrostatic pressure: 29019.48 kPa
@@ -90,13 +90,15 @@ Simulation Metadata
9090

9191
***CAPITAL COSTS (M$)***
9292

93+
Exploration costs: 4.42 MUSD
9394
Drilling and completion costs: 25.55 MUSD
9495
Drilling and completion costs per well: 4.26 MUSD
9596
Stimulation costs: 4.53 MUSD
9697
Surface power plant costs: 64.90 MUSD
98+
of which Electrical Plant Cost: 59.87 MUSD
99+
of which Heat Plant Cost: 5.03 MUSD
97100
Field gathering system costs: 3.16 MUSD
98101
Total surface equipment costs: 68.06 MUSD
99-
Exploration costs: 4.42 MUSD
100102
Total capital costs: 102.56 MUSD
101103

102104

@@ -109,7 +111,6 @@ Simulation Metadata
109111

110112

111113
***SURFACE EQUIPMENT SIMULATION RESULTS***
112-
113114
Initial geofluid availability: 0.23 MW/(kg/s)
114115
Maximum Total Electricity Generation: 21.16 MW
115116
Average Total Electricity Generation: 19.80 MW

tests/examples/example13.out

Lines changed: 7 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -4,10 +4,10 @@
44

55
Simulation Metadata
66
----------------------
7-
GEOPHIRES Version: 3.9.47
8-
Simulation Date: 2025-07-31
9-
Simulation Time: 08:44
10-
Calculation Time: 0.036 sec
7+
GEOPHIRES Version: 3.12.1
8+
Simulation Date: 2026-04-07
9+
Simulation Time: 10:46
10+
Calculation Time: 0.049 sec
1111

1212
***SUMMARY OF RESULTS***
1313

@@ -94,13 +94,15 @@ Simulation Metadata
9494

9595
***CAPITAL COSTS (M$)***
9696

97+
Exploration costs: 0.00 MUSD
9798
Drilling and completion costs: 26.49 MUSD
9899
Drilling and completion costs per well: 6.62 MUSD
99100
Stimulation costs: 1.00 MUSD
100101
Surface power plant costs: 19.89 MUSD
102+
of which Electrical Plant Cost: 11.99 MUSD
103+
of which Heat Plant Cost: 7.90 MUSD
101104
Field gathering system costs: 2.32 MUSD
102105
Total surface equipment costs: 22.21 MUSD
103-
Exploration costs: 0.00 MUSD
104106
Total capital costs: 49.70 MUSD
105107

106108

@@ -114,7 +116,6 @@ Simulation Metadata
114116

115117

116118
***SURFACE EQUIPMENT SIMULATION RESULTS***
117-
118119
Initial geofluid availability: 0.11 MW/(kg/s)
119120
Maximum Total Electricity Generation: 3.40 MW
120121
Average Total Electricity Generation: 3.40 MW

0 commit comments

Comments
 (0)