Skip to content

Commit 3a52874

Browse files
Merge pull request NREL#285 from softwareengineerprogrammer/main
HIP-RA-X schema; SBT docs generation
2 parents 270e162 + 1f47d62 commit 3a52874

File tree

13 files changed

+501
-70
lines changed

13 files changed

+501
-70
lines changed

.gitignore

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,7 @@ requirements.txt
1313
.DS_Store
1414
*.lock
1515
*.json
16+
all_messages_conf.log
1617

1718
# C extensions
1819
*.so
@@ -81,6 +82,8 @@ docs/reference/geophires-request.json
8182
docs/reference/parameters.rst
8283
docs/geophires-request.json
8384
docs/parameters.rst
85+
docs/hip-ra-x-request.json
86+
docs/hip_ra_x_parameters.rst
8487
_site/
8588
/docs/geophires_x.rstx
8689
/docs/temperature.txt

README.rst

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -349,6 +349,15 @@ Extending GEOPHIRES-X
349349

350350
- `Extension example: SUTRA <https://github.com/NREL/GEOPHIRES-X/commit/984cb4da1505667adb2c45cb1297cab6550774bd#diff-5b1ea85ce061b9a1137a46c48d2d293126224d677d3ab38d9b2f4dcfc4e1674e>`__
351351

352+
353+
HIP-RA: Heat in Place - Resource Assessment
354+
-------------------------------------------
355+
356+
* `HIP-RA-X README <src/hip_ra_x/README.md>`__
357+
* `HIP-RA-X Parameters Reference <https://softwareengineerprogrammer.github.io/GEOPHIRES-X/hip_ra_x_parameters.html>`__
358+
359+
.. TODO switch over to https://nrel.github.io/GEOPHIRES-X/hip_ra_x_parameters.html once merged
360+
352361
Monte Carlo
353362
-----------
354363

docs/index.rst

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@ Contents
88
overview
99
parameters
1010
How-to-extend-GEOPHIRES-X
11+
hip_ra_x_parameters
1112
Monte-Carlo-User-Guide
1213
.. reference/index
1314

src/geophires_x/OptionList.py

Lines changed: 0 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -179,9 +179,6 @@ class WellDrillingCostCorrelation(GeophiresInputEnum):
179179
VERTICAL_LARGE_IDEAL = 16, "vertical open-hole, large diameter, ideal", -0.00240, 752.93946, 524337.65380
180180
DEVIATED_LARGE_IDEAL = 17, "deviated liner, large diameter, ideal", 0.00376, 762.52696, 765103.07690
181181

182-
def calculate_cost_MUSD(self, meters) -> float:
183-
return (self._c2 * meters ** 2 + self._c1 * meters + self._c0) * 1E-6
184-
185182
def __init__(self, int_value: int, _: str, c2: float, c1: float, c0: float):
186183
self._c2 = c2
187184
self._c1 = c1

src/geophires_x/SBTReservoir.py

Lines changed: 12 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -190,8 +190,8 @@ def __init__(self, model: Model):
190190
AllowableRange=[1, 2],
191191
UnitType=Units.NONE,
192192
ErrMessage="assume constant user-provided flowrate (1)",
193-
ToolTipText="Must be 1 or 2. '1' means the user provides a constant mass flow rate. \
194-
'1' means the user provides an excel file with a mass flow rate profile."
193+
ToolTipText="Must be 1 or 2. '1' means the user provides a constant mass flow rate. "
194+
"'1' means the user provides an excel file with a mass flow rate profile."
195195
)
196196
self.flow_rate_file = self.ParameterDict[self.flow_rate_file.Name] = strParameter(
197197
"Flowrate File",
@@ -206,8 +206,8 @@ def __init__(self, model: Model):
206206
AllowableRange=[1, 2],
207207
UnitType=Units.NONE,
208208
ErrMessage="assume constant user-provided injection temperature (1)",
209-
ToolTipText="Must be 1 or 2. '1' means the user provides a constant injection temperature. \
210-
'1' means the user provides an excel file with an injection temperature profile."
209+
ToolTipText="Must be 1 or 2. '1' means the user provides a constant injection temperature. "
210+
"'1' means the user provides an excel file with an injection temperature profile."
211211
)
212212
self.injection_temperature_file = self.ParameterDict[self.injection_temperature_file.Name] = strParameter(
213213
"Injection Temperature File",
@@ -222,9 +222,9 @@ def __init__(self, model: Model):
222222
AllowableRange=[1, 5],
223223
UnitType=Units.NONE,
224224
ErrMessage="assume default SBT accuracy desired (1)",
225-
ToolTipText="Must be 1, 2, 3, 4 or 5 with 1 lowest accuracy and 5 highest accuracy. \
226-
Lowest accuracy runs fastest. Accuracy level impacts number of discretizations for \
227-
numerical integration and decision tree thresholds in SBT algorithm."
225+
ToolTipText="Must be 1, 2, 3, 4 or 5 with 1 lowest accuracy and 5 highest accuracy. "
226+
"Lowest accuracy runs fastest. Accuracy level impacts number of discretizations for "
227+
"numerical integration and decision tree thresholds in SBT algorithm."
228228
)
229229
self.percent_implicit = self.ParameterDict[self.percent_implicit.Name] = floatParameter(
230230
"SBT Percent Implicit Euler Scheme",
@@ -235,11 +235,11 @@ def __init__(self, model: Model):
235235
PreferredUnits=PercentUnit.TENTH,
236236
CurrentUnits=PercentUnit.TENTH,
237237
ErrMessage="assume default percent implicit (1.0)",
238-
ToolTipText="Should be between 0 and 1. Most stable is setting it to 1 which results in \
239-
a fully implicit Euler scheme when calculating the fluid temperature at each time step. \
240-
With a value of 0, the convective term is modelled using explicit Euler. \
241-
A value of 0.5 would model the convective term 50% explicit and 50% implicit, \
242-
which may be slightly more accurate than fully implicit."
238+
ToolTipText="Should be between 0 and 1. Most stable is setting it to 1 which results in "
239+
"a fully implicit Euler scheme when calculating the fluid temperature at each time step. "
240+
"With a value of 0, the convective term is modelled using explicit Euler. "
241+
"A value of 0.5 would model the convective term 50% explicit and 50% implicit, "
242+
"which may be slightly more accurate than fully implicit."
243243
)
244244
self.initial_timestep_count = self.ParameterDict[self.initial_timestep_count.Name] = intParameter(
245245
'SBT Initial Timestep Count',
Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1 +1,4 @@
1-
parameters.rst
1+
*parameters.rst
2+
all_messages_conf.log
3+
!geophires-request.json
4+
!hip-ra-x-request.json

src/geophires_x_schema_generator/__init__.py

Lines changed: 43 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,9 @@
77
# Ruff disabled because imports are order-dependent
88
# ruff: noqa: I001
99
from geophires_x.Model import Model
10+
from geophires_x.SBTEconomics import SBTEconomics
11+
from geophires_x.SBTReservoir import SBTReservoir
12+
from geophires_x.SBTWellbores import SBTWellbores
1013

1114
from geophires_x.SFReservoir import SFReservoir
1215
from geophires_x.LHSReservoir import LHSReservoir
@@ -24,6 +27,7 @@
2427
from geophires_x.SUTRAReservoir import SUTRAReservoir
2528
from geophires_x.SUTRAWellBores import SUTRAWellBores
2629
from geophires_x.TDPReservoir import TDPReservoir
30+
from hip_ra_x.hip_ra_x import HIP_RA_X
2731

2832

2933
class GeophiresXSchemaGenerator:
@@ -41,37 +45,48 @@ def _get_dummy_model(self):
4145
sys.argv = stash_sys_argv
4246
os.chdir(stash_cwd)
4347

44-
def get_parameters_json(self) -> Tuple[str, str]:
48+
def get_parameter_sources(self) -> list:
49+
"""
50+
:rtype: list[Tuple[Any, str]]
51+
"""
4552
dummy_model = self._get_dummy_model()
46-
47-
def with_category(param_dict: dict, category: str):
48-
def _with_cat(p: Parameter, cat: str):
49-
p.parameter_category = cat
50-
return p
51-
52-
return {k: _with_cat(v, category) for k, v in param_dict.items()}
53-
54-
parameter_sources = [
53+
return [
5554
(dummy_model.reserv, 'Reservoir'),
5655
(TDPReservoir(dummy_model), 'Reservoir'),
5756
(LHSReservoir(dummy_model), 'Reservoir'),
5857
(MPFReservoir(dummy_model), 'Reservoir'),
5958
(SFReservoir(dummy_model), 'Reservoir'),
6059
(CylindricalReservoir(dummy_model), 'Reservoir'),
60+
(SBTReservoir(dummy_model), 'Reservoir'),
6161
(SUTRAReservoir(dummy_model), 'Reservoir'),
6262
(dummy_model.wellbores, 'Well Bores'),
6363
(AGSWellBores(dummy_model), 'Well Bores'),
64+
(SBTWellbores(dummy_model), 'Well Bores'),
6465
(SUTRAWellBores(dummy_model), 'Well Bores'),
6566
(dummy_model.surfaceplant, 'Surface Plant'),
6667
(SurfacePlantAGS(dummy_model), 'Surface Plant'),
6768
(SurfacePlantSUTRA(dummy_model), 'Surface Plant'),
6869
(dummy_model.economics, 'Economics'),
6970
(AGSEconomics(dummy_model), 'Economics'),
71+
(SBTEconomics(dummy_model), 'Economics'),
7072
(SUTRAEconomics(dummy_model), 'Economics'),
7173
(EconomicsCCUS(dummy_model), 'Economics'),
7274
(EconomicsAddOns(dummy_model), 'Economics'),
7375
]
7476

77+
def get_schema_title(self) -> str:
78+
return 'GEOPHIRES-X'
79+
80+
def get_parameters_json(self) -> Tuple[str, str]:
81+
82+
def with_category(param_dict: dict, category: str):
83+
def _with_cat(p: Parameter, cat: str):
84+
p.parameter_category = cat
85+
return p
86+
87+
return {k: _with_cat(v, category) for k, v in param_dict.items()}
88+
89+
parameter_sources = self.get_parameter_sources()
7590
output_params = {}
7691
input_params = {}
7792
for param_source in parameter_sources:
@@ -112,7 +127,7 @@ def generate_json_schema(self) -> dict:
112127
'definitions': {},
113128
'$schema': 'http://json-schema.org/draft-04/schema#',
114129
'type': 'object',
115-
'title': 'GEOPHIRES Schema',
130+
'title': f'{self.get_schema_title()} Schema',
116131
'required': required,
117132
'properties': properties,
118133
}
@@ -132,10 +147,11 @@ def generate_parameters_reference_rst(self) -> str:
132147
input_params_by_category[category][input_param_name] = input_param
133148

134149
def get_input_params_table(category_params, category_name) -> str:
150+
category_display = category_name if category_name is not None else ''
135151
input_rst = f"""
136-
{category_name}
137-
{'-' * len(category_name)}
138-
.. list-table:: {category_name} Parameters
152+
{category_display}
153+
{'-' * len(category_display)}
154+
.. list-table:: {category_display}{' ' if len(category_display) > 0 else ''}Parameters
139155
:header-rows: 1
140156
141157
* - Name
@@ -170,7 +186,7 @@ def get_input_params_table(category_params, category_name) -> str:
170186

171187
output_rst = self.get_output_params_table_rst(output_params_json)
172188

173-
rst = f"""Parameters
189+
rst = f"""{self.get_schema_title()} Parameters
174190
==========
175191
176192
.. contents::
@@ -230,3 +246,15 @@ def _get_min_and_max(param: dict, default_val='') -> Tuple:
230246
max_val = max(param['AllowableRange'])
231247

232248
return (min_val, max_val)
249+
250+
251+
class HipRaXSchemaGenerator(GeophiresXSchemaGenerator):
252+
def get_parameter_sources(self) -> list:
253+
"""
254+
:rtype: list[Tuple[Any, str]]
255+
"""
256+
dummy_model = HIP_RA_X()
257+
return [(dummy_model, None)]
258+
259+
def get_schema_title(self) -> str:
260+
return 'HIP-RA-X'

0 commit comments

Comments
 (0)