Skip to content

Commit 999866f

Browse files
Address WIPs for Number of Doublets
1 parent 00760a4 commit 999866f

File tree

3 files changed

+70
-8
lines changed

3 files changed

+70
-8
lines changed

src/geophires_x/WellBores.py

Lines changed: 18 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -708,19 +708,22 @@ def __init__(self, model: Model):
708708
self.ParameterDict = {}
709709
self.OutputParameterDict = {}
710710

711+
max_doublets = 200
712+
# noinspection SpellCheckingInspection
711713
self.nprod = self.ParameterDict[self.nprod.Name] = intParameter(
712714
"Number of Production Wells",
713715
DefaultValue=2,
714-
AllowableRange=list(range(1, 201, 1)),
716+
AllowableRange=list(range(1, max_doublets+1, 1)),
715717
UnitType=Units.NONE,
716718
Required=False,
717719
ErrMessage="assume default number of production wells (2)",
718720
ToolTipText="Number of (identical) production wells"
719721
)
722+
# noinspection SpellCheckingInspection
720723
self.ninj = self.ParameterDict[self.ninj.Name] = intParameter(
721724
"Number of Injection Wells",
722725
DefaultValue=2,
723-
AllowableRange=list(range(0, 201, 1)),
726+
AllowableRange=list(range(0, max_doublets+1, 1)),
724727
UnitType=Units.NONE,
725728
Required=False,
726729
ErrMessage="assume default number of injection wells (2)",
@@ -729,10 +732,12 @@ def __init__(self, model: Model):
729732
self.doublets_count = self.ParameterDict[self.doublets_count.Name] = intParameter(
730733
"Number of Doublets",
731734
DefaultValue=2,
732-
AllowableRange=list(range(0, 201, 1)),
735+
AllowableRange=list(range(0, max_doublets+1, 1)),
733736
UnitType=Units.NONE,
734-
ToolTipText="Number of doublets" # FIXME WIP
737+
ToolTipText="Pass this parameter to set the Number of Production Wells and Number of Injection Wells to "
738+
"same value."
735739
)
740+
736741
self.prodwelldiam = self.ParameterDict[self.prodwelldiam.Name] = floatParameter(
737742
"Production Well Diameter",
738743
DefaultValue=8.0,
@@ -1325,7 +1330,15 @@ def read_parameters(self, model: Model) -> None:
13251330
coerce_int_params_to_enum_values(self.ParameterDict)
13261331

13271332
if self.doublets_count.Provided:
1328-
# FIXME WIP validate that ninj/nprod haven't been provided and vice versa
1333+
def _error(num_wells_param_:intParameter):
1334+
msg = f'{num_wells_param_.Name} may not be provided when {self.doublets_count.Name} is provided.'
1335+
model.logger.error(msg)
1336+
raise ValueError(msg)
1337+
1338+
for num_wells_param in [self.ninj, self.nprod]:
1339+
if num_wells_param.Provided:
1340+
_error(num_wells_param)
1341+
13291342
self.ninj.value = self.doublets_count.value
13301343
self.nprod.value = self.doublets_count.value
13311344

src/geophires_x_schema_generator/geophires-request.json

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -637,6 +637,15 @@
637637
"minimum": 0,
638638
"maximum": 200
639639
},
640+
"Number of Doublets": {
641+
"description": "Pass this parameter to set the Number of Production Wells and Number of Injection Wells to same value.",
642+
"type": "integer",
643+
"units": null,
644+
"category": "Well Bores",
645+
"default": 2,
646+
"minimum": 0,
647+
"maximum": 200
648+
},
640649
"Production Well Diameter": {
641650
"description": "Inner diameter of production wellbore (assumed constant along the wellbore) to calculate frictional pressure drop and wellbore heat transmission with Rameys model",
642651
"type": "number",

tests/geophires_x_tests/test_well_bores.py

Lines changed: 43 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -28,10 +28,13 @@ def _get_result(_params) -> GeophiresXResult:
2828
)
2929
return GeophiresXClient().get_geophires_result(params)
3030

31-
def _prod_inj(_r: GeophiresXResult) -> tuple[int, int]:
31+
def _prod_inj_lcoe(_r: GeophiresXResult) -> tuple[int, int]:
3232
return (
3333
_r.result['ENGINEERING PARAMETERS']['Number of Production Wells']['value'],
3434
_r.result['ENGINEERING PARAMETERS']['Number of Injection Wells']['value'],
35+
_r.result['SUMMARY OF RESULTS']['Electricity breakeven price']['value'],
36+
_r.result['SUMMARY OF RESULTS']['Electricity breakeven price']['value'],
37+
_r.result['SURFACE EQUIPMENT SIMULATION RESULTS']['Average Net Electricity Generation']['value'],
3538
)
3639

3740
r_prod_inj: GeophiresXResult = _get_result(
@@ -47,5 +50,42 @@ def _prod_inj(_r: GeophiresXResult) -> tuple[int, int]:
4750
}
4851
)
4952

50-
self.assertEqual(_prod_inj(r_doublets), _prod_inj(r_prod_inj))
51-
# FIXME WIP assert results look superficially equal
53+
self.assertEqual(_prod_inj_lcoe(r_doublets), _prod_inj_lcoe(r_prod_inj))
54+
55+
def test_number_of_doublets_validation(self):
56+
def _get_result(_params) -> GeophiresXResult:
57+
params = GeophiresInputParameters(
58+
{
59+
'Reservoir Depth': 5,
60+
'Gradient 1': 74,
61+
'Power Plant Type': 2,
62+
'Maximum Temperature': 600,
63+
}
64+
| _params
65+
)
66+
return GeophiresXClient().get_geophires_result(params)
67+
68+
with self.assertRaises(RuntimeError):
69+
_get_result(
70+
{
71+
'Number of Production Wells': 10,
72+
'Number of Injection Wells': 10,
73+
'Number of Doublets': 10,
74+
}
75+
)
76+
77+
with self.assertRaises(RuntimeError):
78+
_get_result(
79+
{
80+
'Number of Production Wells': 10,
81+
'Number of Doublets': 10,
82+
}
83+
)
84+
85+
with self.assertRaises(RuntimeError):
86+
_get_result(
87+
{
88+
'Number of Injection Wells': 10,
89+
'Number of Doublets': 10,
90+
}
91+
)

0 commit comments

Comments
 (0)