@@ -36,7 +36,7 @@ class EndUseOptions(GeophiresInputEnum):
36
36
COGENERATION_PARALLEL_EXTRA_ELECTRICITY = 52 , "Cogeneration Parallel Cycle, Electricity sales considered as extra income"
37
37
38
38
@staticmethod
39
- def from_input_string (input_string :str ):
39
+ def from_input_string (input_string : str ):
40
40
"""
41
41
:rtype: EndUseOptions
42
42
"""
@@ -66,7 +66,7 @@ class PlantType(GeophiresInputEnum):
66
66
INDUSTRIAL = 9 , "Industrial"
67
67
68
68
@staticmethod
69
- def from_input_string (input_string :str ):
69
+ def from_input_string (input_string : str ):
70
70
"""
71
71
:rtype: PlantType
72
72
"""
@@ -97,7 +97,7 @@ def from_int(int_val):
97
97
return member
98
98
99
99
@staticmethod
100
- def from_input_string (input_string :str ):
100
+ def from_input_string (input_string : str ):
101
101
for member in __class__ :
102
102
if input_string == str (member .int_value ):
103
103
return member
@@ -117,7 +117,7 @@ class ReservoirModel(GeophiresInputEnum):
117
117
SBT = 8 , "SBT"
118
118
119
119
@staticmethod
120
- def get_reservoir_model_from_input_string (input_string :str ):
120
+ def get_reservoir_model_from_input_string (input_string : str ):
121
121
"""
122
122
:rtype: ReservoirModel
123
123
"""
@@ -148,41 +148,89 @@ def from_int(int_val):
148
148
return member
149
149
150
150
@staticmethod
151
- def from_input_string (input_string :str ):
151
+ def from_input_string (input_string : str ):
152
152
for member in __class__ :
153
153
if input_string == str (member .int_value ):
154
154
return member
155
155
156
156
raise ValueError (f'Unknown Reservoir Volume input value: { input_string } ' )
157
157
158
158
159
+ class _WellDrillingCostCorrelationCitation (str , Enum ):
160
+ """
161
+ Values are abbreviated citations used in tooltip text.
162
+ Commented full citations are present in CHANGELOG and could also be used in future documentation.
163
+ """
164
+
165
+ NREL_COST_CURVE_2025 = 'NREL\' s 2025 cost curve update'
166
+ # ('Akindipe, D. and Witter. E. 2025. '
167
+ # '"2025 Geothermal Drilling Cost Curves Update". '
168
+ # 'https://pangea.stanford.edu/ERE/db/GeoConf/papers/SGW/2025/Akindipe.pdf?t=1740084555')
169
+
170
+ SIMPLE = 'Based on Fervo Project Cape cost per meter (~$1846/m)'
171
+
172
+ GEOVISION = 'GeoVision'
173
+ # ('DOE 2019. '
174
+ # '"GeoVision" p. 163. '
175
+ # 'https://www.energy.gov/sites/prod/files/2019/06/f63/GeoVision-full-report-opt.pdf')
176
+
177
+
159
178
class WellDrillingCostCorrelation (GeophiresInputEnum ):
160
- """Note: order must be retained since input is read as an int; first int arg is duplicative of order"""
161
-
162
- VERTICAL_SMALL = 1 , "vertical small diameter, baseline" , 0.30212 , 584.91124 , 751368.47270
163
- DEVIATED_SMALL = 2 , "deviated small diameter, baseline" , 0.28977 , 882.15067 , 680562.50150
164
- VERTICAL_LARGE = 3 , "vertical large diameter, baseline" , 0.28180 , 1275.52130 , 632315.12640
165
- DEVIATED_LARGE = 4 , "deviated large diameter, baseline" , 0.25528 , 1716.71568 , 500866.89110
166
-
167
- SIMPLE = 5 , "Simple" , 0 , 1846 * 1E6 , 0 # Based on Fervo Project Cape cost per meter (~$1846/m)
168
-
169
- VERTICAL_SMALL_INT1 = 6 , "vertical small diameter, intermediate1" , 0.13710 , 129.61033 , 1205587.57100
170
- VERTICAL_SMALL_INT2 = 7 , "vertical small diameter, intermediate2" , 0.00804 , 455.60507 , 921007.68680
171
- DEVIATED_SMALL_INT1 = 8 , "deviated small diameter, intermediate1" , 0.15340 , 120.31700 , 1431801.54400
172
- DEVIATED_SMALL_INT2 = 9 , "deviated small diameter, intermediate2" , 0.00854 , 506.08357 , 1057330.39000
173
- VERTICAL_LARGE_INT1 = 10 , "vertical large diameter, intermediate1" , 0.18927 , 293.45174 , 1326526.31300
174
- VERTICAL_LARGE_INT2 = 11 , "vertical large diameter, intermediate2" , 0.00315 , 782.69676 , 983620.25270
175
- DEVIATED_LARGE_INT1 = 12 , "deviated large diameter, intermediate1" , 0.19950 , 296.13011 , 1697867.70900
176
- DEVIATED_LARGE_INT2 = 13 , "deviated large diameter, intermediate2" , 0.00380 , 838.90249 , 1181947.04400
177
- VERTICAL_SMALL_IDEAL = 14 , "vertical open-hole, small diameter, ideal" , 0.00252 , 439.44503 , 590611.90110
178
- DEVIATED_SMALL_IDEAL = 15 , "deviated liner, small diameter, ideal" , 0.00719 , 455.85233 , 753377.73080
179
- VERTICAL_LARGE_IDEAL = 16 , "vertical open-hole, large diameter, ideal" , - 0.00240 , 752.93946 , 524337.65380
180
- DEVIATED_LARGE_IDEAL = 17 , "deviated liner, large diameter, ideal" , 0.00376 , 762.52696 , 765103.07690
181
-
182
- def __init__ (self , int_value : int , _ : str , c2 : float , c1 : float , c0 : float ):
179
+ """
180
+ Akindipe, D. and Witter. E. 2025.
181
+ "2025 Geothermal Drilling Cost Curves Update".
182
+ https://pangea.stanford.edu/ERE/db/GeoConf/papers/SGW/2025/Akindipe.pdf?t=1740084555
183
+
184
+ Robins, J.C., Kesseli, D., Witter, E. and Rhodes, G. 2022.
185
+ "2022 GETEM Geothermal Drilling Cost Curve Update."
186
+ https://www.nrel.gov/docs/fy23osti/82771.pdf
187
+
188
+ Note: order should be retained since input is read as an int; first int arg is duplicative of order
189
+ """
190
+
191
+ VERTICAL_SMALL = 1 , "vertical small diameter, baseline" , 0.258496 , 357.967 , 738531.58 , \
192
+ _WellDrillingCostCorrelationCitation .NREL_COST_CURVE_2025
193
+ DEVIATED_SMALL = 2 , "deviated small diameter, baseline" , 0.240624 , 646.1621 , 503625.06 , \
194
+ _WellDrillingCostCorrelationCitation .NREL_COST_CURVE_2025
195
+ VERTICAL_LARGE = 3 , "vertical large diameter, baseline" , 0.248458 , 935.8985 , 626586.68 , \
196
+ _WellDrillingCostCorrelationCitation .NREL_COST_CURVE_2025
197
+ DEVIATED_LARGE = 4 , "deviated large diameter, baseline" , 0.217333 , 1362.93 , 301066.16 , \
198
+ _WellDrillingCostCorrelationCitation .NREL_COST_CURVE_2025
199
+
200
+ SIMPLE = 5 , "Simple (per-meter cost)" , 0 , 1846 * 1E6 , 0 , \
201
+ _WellDrillingCostCorrelationCitation .SIMPLE
202
+
203
+ VERTICAL_SMALL_INT1 = 6 , "vertical small diameter, intermediate1" , 0.13710 , 129.61033 , 1205587.57100 , \
204
+ _WellDrillingCostCorrelationCitation .GEOVISION
205
+ VERTICAL_SMALL_INT2 = 7 , "vertical small diameter, intermediate2" , 0.00804 , 455.60507 , 921007.68680 , \
206
+ _WellDrillingCostCorrelationCitation .GEOVISION
207
+ DEVIATED_SMALL_INT1 = 8 , "deviated small diameter, intermediate1" , 0.15340 , 120.31700 , 1431801.54400 , \
208
+ _WellDrillingCostCorrelationCitation .GEOVISION
209
+ DEVIATED_SMALL_INT2 = 9 , "deviated small diameter, intermediate2" , 0.00854 , 506.08357 , 1057330.39000 , \
210
+ _WellDrillingCostCorrelationCitation .GEOVISION
211
+ VERTICAL_LARGE_INT1 = 10 , "vertical large diameter, intermediate1" , 0.18927 , 293.45174 , 1326526.31300 , \
212
+ _WellDrillingCostCorrelationCitation .GEOVISION
213
+ VERTICAL_LARGE_INT2 = 11 , "vertical large diameter, intermediate2" , 0.00315 , 782.69676 , 983620.25270 , \
214
+ _WellDrillingCostCorrelationCitation .GEOVISION
215
+ DEVIATED_LARGE_INT1 = 12 , "deviated large diameter, intermediate1" , 0.19950 , 296.13011 , 1697867.70900 , \
216
+ _WellDrillingCostCorrelationCitation .GEOVISION
217
+ DEVIATED_LARGE_INT2 = 13 , "deviated large diameter, intermediate2" , 0.00380 , 838.90249 , 1181947.04400 , \
218
+ _WellDrillingCostCorrelationCitation .GEOVISION
219
+ VERTICAL_SMALL_IDEAL = 14 , "vertical open-hole, small diameter, ideal" , 0.00252 , 439.44503 , 590611.90110 , \
220
+ _WellDrillingCostCorrelationCitation .GEOVISION
221
+ DEVIATED_SMALL_IDEAL = 15 , "deviated liner, small diameter, ideal" , 0.00719 , 455.85233 , 753377.73080 , \
222
+ _WellDrillingCostCorrelationCitation .GEOVISION
223
+ VERTICAL_LARGE_IDEAL = 16 , "vertical open-hole, large diameter, ideal" , - 0.00240 , 752.93946 , 524337.65380 , \
224
+ _WellDrillingCostCorrelationCitation .GEOVISION
225
+ DEVIATED_LARGE_IDEAL = 17 , "deviated liner, large diameter, ideal" , 0.00376 , 762.52696 , 765103.07690 , \
226
+ _WellDrillingCostCorrelationCitation .GEOVISION
227
+
228
+ def __init__ (self , int_value : int , _ : str , c2 : float , c1 : float , c0 : float ,
229
+ citation : _WellDrillingCostCorrelationCitation ):
183
230
self ._c2 = c2
184
231
self ._c1 = c1
185
232
self ._c0 = c0
233
+ self .citation : _WellDrillingCostCorrelationCitation = citation
186
234
super ().__init__ (int_value , _ )
187
235
188
236
def calculate_cost_MUSD (self , meters ) -> float :
@@ -216,7 +264,7 @@ def from_int(int_val):
216
264
return member
217
265
218
266
@staticmethod
219
- def from_input_string (input_string :str ):
267
+ def from_input_string (input_string : str ):
220
268
for member in __class__ :
221
269
if input_string == str (member .int_value ):
222
270
return member
@@ -243,8 +291,6 @@ def from_input_string(input_string: str):
243
291
raise ValueError (f'Unknown Working Fluid input value: { input_string } ' )
244
292
245
293
246
-
247
-
248
294
class Configuration (GeophiresInputEnum ):
249
295
ULOOP = 1 , "utube"
250
296
COAXIAL = 2 , "coaxial"
@@ -285,6 +331,7 @@ def from_input_string(input_string: str):
285
331
286
332
raise ValueError (f'Unknown Flow Rate Model input value: { input_string } ' )
287
333
334
+
288
335
class InjectionTemperatureModel (GeophiresInputEnum ):
289
336
USER_SUPPLIED = 1 , "user supplied"
290
337
FILE_SUPPLIED = 2 , "file supplied"
0 commit comments