Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion .bumpversion.cfg
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
[bumpversion]
current_version = 3.16.2
current_version = 3.17.0
commit = True
tag = True

Expand Down
2 changes: 1 addition & 1 deletion .cookiecutterrc
Original file line number Diff line number Diff line change
Expand Up @@ -54,7 +54,7 @@ default_context:
sphinx_doctest: "no"
sphinx_theme: "sphinx-py3doc-enhanced-theme"
test_matrix_separate_coverage: "no"
version: 3.16.2
version: 3.17.0
version_manager: "bump2version"
website: "https://github.com/NREL"
year_from: "2023"
Expand Down
5 changes: 5 additions & 0 deletions CHANGELOG.rst
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,11 @@ Changelog
GEOPHIRES v3 (2023-2026)
------------------------

3.17
^^^^

3.17: `Warn user if ORC is used with production temperature greater than 200 degrees C <https://github.com/NatLabRockies/GEOPHIRES-X/pull/517>`__; `Include indirect costs in vertical and lateral (non-vertical) section drilling costs <https://github.com/softwareengineerprogrammer/GEOPHIRES/pull/181>`__ | `release <https://github.com/NREL/GEOPHIRES-X/releases/tag/v3.17.0>`__

3.16
^^^^

Expand Down
4 changes: 2 additions & 2 deletions README.rst
Original file line number Diff line number Diff line change
Expand Up @@ -58,9 +58,9 @@ Free software: `MIT license <LICENSE>`__
:alt: Supported implementations
:target: https://pypi.org/project/geophires-x

.. |commits-since| image:: https://img.shields.io/github/commits-since/softwareengineerprogrammer/GEOPHIRES-X/v3.16.2.svg
.. |commits-since| image:: https://img.shields.io/github/commits-since/softwareengineerprogrammer/GEOPHIRES-X/v3.17.0.svg
:alt: Commits since latest release
:target: https://github.com/softwareengineerprogrammer/GEOPHIRES-X/compare/v3.16.2...main
:target: https://github.com/softwareengineerprogrammer/GEOPHIRES-X/compare/v3.17.0...main

.. |docs| image:: https://readthedocs.org/projects/GEOPHIRES-X/badge/?style=flat
:target: https://softwareengineerprogrammer.github.io/GEOPHIRES
Expand Down
2 changes: 1 addition & 1 deletion docs/conf.py
Original file line number Diff line number Diff line change
Expand Up @@ -18,7 +18,7 @@
year = '2025'
author = 'NREL'
copyright = f'{year}, {author}'
version = release = '3.16.2'
version = release = '3.17.0'

pygments_style = 'trac'
templates_path = ['./templates']
Expand Down
2 changes: 1 addition & 1 deletion setup.py
Original file line number Diff line number Diff line change
Expand Up @@ -13,7 +13,7 @@ def read(*names, **kwargs):

setup(
name='geophires-x',
version='3.16.2',
version='3.17.0',
license='MIT',
description='GEOPHIRES is a free and open-source geothermal techno-economic simulator.',
long_description='{}\n{}'.format(
Expand Down
33 changes: 29 additions & 4 deletions src/geophires_x/Economics.py
Original file line number Diff line number Diff line change
Expand Up @@ -2042,6 +2042,9 @@ def __init__(self, model: Model):
f'Provide {self.ccexplfixed.Name} to override the default correlation and set your own cost.'
)

wellfield_indirect_costs_default_note = (f'(default: '
f'{self.wellfield_indirect_capital_cost_percentage.DefaultValue}%)')

# noinspection SpellCheckingInspection
self.Cwell = self.OutputParameterDict[self.Cwell.Name] = OutputParameter(
Name="Wellfield cost",
Expand All @@ -2051,7 +2054,7 @@ def __init__(self, model: Model):
CurrentUnits=CurrencyUnit.MDOLLARS,
ToolTipText=f'Includes total drilling and completion cost of all injection and production wells and '
f'laterals, plus indirect costs '
f'(default: {self.wellfield_indirect_capital_cost_percentage.DefaultValue}%).'
f'{wellfield_indirect_costs_default_note}.'
)
self.drilling_and_completion_costs_per_well = self.OutputParameterDict[
self.drilling_and_completion_costs_per_well.Name] = OutputParameter(
Expand All @@ -2060,7 +2063,7 @@ def __init__(self, model: Model):
PreferredUnits=CurrencyUnit.MDOLLARS,
CurrentUnits=CurrencyUnit.MDOLLARS,
ToolTipText='Drilling and completion cost per well, including indirect costs '
f'(default: {self.wellfield_indirect_capital_cost_percentage.DefaultValue}%).'
f'{wellfield_indirect_costs_default_note}.'
)

# noinspection SpellCheckingInspection
Expand Down Expand Up @@ -2514,7 +2517,25 @@ def __init__(self, model: Model):
Name='Drilling and completion costs per non-vertical section',
UnitType=Units.CURRENCY,
PreferredUnits=CurrencyUnit.MDOLLARS,
CurrentUnits=CurrencyUnit.MDOLLARS
CurrentUnits=CurrencyUnit.MDOLLARS,
ToolTipText=f'Drilling and completion costs per non-vertical section (lateral), '
f'including indirect costs {wellfield_indirect_costs_default_note}.'
)
self.cost_per_vertical_production_well = self.OutputParameterDict[self.cost_per_vertical_production_well.Name] = OutputParameter(
Name="Drilling and completion costs per vertical production well",
UnitType=Units.CURRENCY,
PreferredUnits=CurrencyUnit.MDOLLARS,
CurrentUnits=CurrencyUnit.MDOLLARS,
ToolTipText=f'Drilling and completion costs per vertical production well section, '
f'including indirect costs {wellfield_indirect_costs_default_note}.'
)
self.cost_per_vertical_injection_well = self.OutputParameterDict[self.cost_per_vertical_injection_well.Name] = OutputParameter(
Name="Drilling and completion costs per vertical injection well",
UnitType=Units.CURRENCY,
PreferredUnits=CurrencyUnit.MDOLLARS,
CurrentUnits=CurrencyUnit.MDOLLARS,
ToolTipText=f'Drilling and completion costs per vertical production well section, '
f'including indirect costs {wellfield_indirect_costs_default_note}.'
)
self.cost_to_junction_section = self.OutputParameterDict[self.cost_to_junction_section.Name] = OutputParameter(
Name="Cost of the entire section of a well from bottom of vertical to junction with laterals",
Expand Down Expand Up @@ -4101,7 +4122,11 @@ def _calculate_derived_outputs(self, model: Model) -> None:
self.cost_per_lateral_section.value = (
self.cost_lateral_section.quantity().to(self.cost_per_lateral_section.CurrentUnits).magnitude
/ model.wellbores.numnonverticalsections.value
)
) * self._wellfield_indirect_cost_factor
self.cost_per_vertical_production_well.value = self.cost_one_production_well.quantity().to(
self.cost_per_vertical_production_well.CurrentUnits).magnitude * self._wellfield_indirect_cost_factor
self.cost_per_vertical_injection_well.value = self.cost_one_injection_well.quantity().to(
self.cost_per_vertical_injection_well.CurrentUnits).magnitude * self._wellfield_indirect_cost_factor

if hasattr(self, 'discountrate'):
self.real_discount_rate.value = self.discountrate.quantity().to(convertible_unit(
Expand Down
12 changes: 9 additions & 3 deletions src/geophires_x/Outputs.py
Original file line number Diff line number Diff line change
Expand Up @@ -486,9 +486,15 @@ def PrintOutputs(self, model: Model):
f.write(f' {model.economics.Cwell.display_name}: {model.economics.Cwell.value:10.2f} {model.economics.Cwell.CurrentUnits.value}\n')

if econ.cost_lateral_section.value > 0.0:
f.write(f' Drilling and completion costs per vertical production well: {econ.cost_one_production_well.value:10.2f} {econ.cost_one_production_well.CurrentUnits.value}\n')
f.write(f' Drilling and completion costs per vertical injection well: {econ.cost_one_injection_well.value:10.2f} {econ.cost_one_injection_well.CurrentUnits.value}\n')
f.write(f' {econ.cost_per_lateral_section.Name}: {econ.cost_per_lateral_section.value:10.2f} {econ.cost_lateral_section.CurrentUnits.value}\n')
f.write(f' {econ.cost_per_vertical_production_well.display_name}: '
f'{econ.cost_per_vertical_production_well.value:10.2f} '
f'{econ.cost_per_vertical_production_well.CurrentUnits.value}\n')
f.write(f' {econ.cost_per_vertical_injection_well.display_name}: '
f'{econ.cost_per_vertical_injection_well.value:10.2f} '
f'{econ.cost_per_vertical_injection_well.CurrentUnits.value}\n')
f.write(f' {econ.cost_per_lateral_section.display_name}: '
f'{econ.cost_per_lateral_section.value:10.2f} '
f'{econ.cost_lateral_section.CurrentUnits.value}\n')
elif round(econ.cost_one_production_well.value, 4) != round(econ.cost_one_injection_well.value, 4) \
and model.economics.cost_one_injection_well.value != -1:
f.write(f' {econ.cost_one_production_well.display_name}: {econ.cost_one_production_well.value:10.2f} {econ.cost_one_production_well.CurrentUnits.value}\n')
Expand Down
2 changes: 1 addition & 1 deletion src/geophires_x/__init__.py
Original file line number Diff line number Diff line change
@@ -1 +1 @@
__version__ = '3.16.2'
__version__ = '3.17.0'
14 changes: 11 additions & 3 deletions src/geophires_x_schema_generator/geophires-result.json
Original file line number Diff line number Diff line change
Expand Up @@ -435,11 +435,19 @@
"description": "Cost of One Injection Well",
"units": "MUSD"
},
"Drilling and completion costs per vertical production well": {},
"Drilling and completion costs per vertical injection well": {},
"Drilling and completion costs per vertical production well": {
"type": "number",
"description": "Drilling and completion costs per vertical production well section, including indirect costs (default: 5%).",
"units": "MUSD"
},
"Drilling and completion costs per vertical injection well": {
"type": "number",
"description": "Drilling and completion costs per vertical production well section, including indirect costs (default: 5%).",
"units": "MUSD"
},
"Drilling and completion costs per non-vertical section": {
"type": "number",
"description": "",
"description": "Drilling and completion costs per non-vertical section (lateral), including indirect costs (default: 5%).",
"units": "MUSD"
},
"Drilling and completion costs (for redrilling)": {},
Expand Down
17 changes: 8 additions & 9 deletions tests/examples/Fervo_Norbeck_Latimer_2023.out
Original file line number Diff line number Diff line change
Expand Up @@ -4,10 +4,10 @@

Simulation Metadata
----------------------
GEOPHIRES Version: 3.9.47
Simulation Date: 2025-07-31
Simulation Time: 08:57
Calculation Time: 0.475 sec
GEOPHIRES Version: 3.16.2
Simulation Date: 2026-09-10
Simulation Time: 08:32
Calculation Time: 0.527 sec

***SUMMARY OF RESULTS***

Expand Down Expand Up @@ -95,15 +95,15 @@ Simulation Metadata

***CAPITAL COSTS (M$)***

Exploration costs: 3.62 MUSD
Drilling and completion costs: 10.13 MUSD
Drilling and completion costs per vertical production well: 3.02 MUSD
Drilling and completion costs per vertical injection well: 3.02 MUSD
Drilling and completion costs per non-vertical section: 1.80 MUSD
Drilling and completion costs per vertical production well: 3.17 MUSD
Drilling and completion costs per vertical injection well: 3.17 MUSD
Drilling and completion costs per non-vertical section: 1.89 MUSD
Stimulation costs: 1.51 MUSD
Surface power plant costs: 11.34 MUSD
Field gathering system costs: 1.52 MUSD
Total surface equipment costs: 12.85 MUSD
Exploration costs: 3.62 MUSD
Total capital costs: 28.12 MUSD


Expand All @@ -116,7 +116,6 @@ Simulation Metadata


***SURFACE EQUIPMENT SIMULATION RESULTS***

Initial geofluid availability: 0.15 MW/(kg/s)
Maximum Total Electricity Generation: 2.97 MW
Average Total Electricity Generation: 2.90 MW
Expand Down
14 changes: 7 additions & 7 deletions tests/examples/Fervo_Project_Red-2026.out
Original file line number Diff line number Diff line change
Expand Up @@ -4,10 +4,10 @@

Simulation Metadata
----------------------
GEOPHIRES Version: 3.13.3
Simulation Date: 2026-04-23
Simulation Time: 09:27
Calculation Time: 1.039 sec
GEOPHIRES Version: 3.16.2
Simulation Date: 2026-09-10
Simulation Time: 08:32
Calculation Time: 1.030 sec

***SUMMARY OF RESULTS***

Expand Down Expand Up @@ -102,9 +102,9 @@ Simulation Metadata

Exploration costs: 3.62 MUSD
Drilling and completion costs: 10.13 MUSD
Drilling and completion costs per vertical production well: 3.02 MUSD
Drilling and completion costs per vertical injection well: 3.02 MUSD
Drilling and completion costs per non-vertical section: 1.80 MUSD
Drilling and completion costs per vertical production well: 3.17 MUSD
Drilling and completion costs per vertical injection well: 3.17 MUSD
Drilling and completion costs per non-vertical section: 1.89 MUSD
Stimulation costs: 1.51 MUSD
Surface power plant costs: 10.49 MUSD
Field gathering system costs: 1.61 MUSD
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -4,10 +4,10 @@

Simulation Metadata
----------------------
GEOPHIRES Version: 3.9.7
Simulation Date: 2025-05-15
Simulation Time: 09:22
Calculation Time: 1.580 sec
GEOPHIRES Version: 3.16.2
Simulation Date: 2026-09-10
Simulation Time: 08:32
Calculation Time: 1.798 sec

***SUMMARY OF RESULTS***

Expand All @@ -24,7 +24,7 @@ Simulation Metadata
***ECONOMIC PARAMETERS***

Economic Model = BICYCLE
Accrued financing during construction: 0.00 %
Accrued financing during construction: 0.00 %
Project lifetime: 40 yr
Capacity factor: 90.0 %
Project NPV: -74.72 MUSD
Expand Down Expand Up @@ -74,15 +74,15 @@ The AGS models contain an intrinsic reservoir model that doesn't expose values t

***CAPITAL COSTS (M$)***

Exploration costs: 7.74 MUSD
Drilling and completion costs: 53.82 MUSD
Drilling and completion costs per vertical production well: 8.35 MUSD
Drilling and completion costs per vertical injection well: 8.35 MUSD
Drilling and completion costs per non-vertical section: 11.52 MUSD
Drilling and completion costs per vertical production well: 8.76 MUSD
Drilling and completion costs per vertical injection well: 8.76 MUSD
Drilling and completion costs per non-vertical section: 12.10 MUSD
Stimulation costs: 0.00 MUSD
Surface power plant costs: 6.74 MUSD
Field gathering system costs: 0.99 MUSD
Total surface equipment costs: 7.72 MUSD
Exploration costs: 7.74 MUSD
Total capital costs: 69.27 MUSD


Expand All @@ -95,7 +95,6 @@ The AGS models contain an intrinsic reservoir model that doesn't expose values t


***SURFACE EQUIPMENT SIMULATION RESULTS***

Initial geofluid availability: 0.06 MW/(kg/s)
Maximum Total Electricity Generation: 1.67 MW
Average Total Electricity Generation: 1.11 MW
Expand Down
14 changes: 7 additions & 7 deletions tests/examples/example_SAM-single-owner-PPA-3.out
Original file line number Diff line number Diff line change
Expand Up @@ -4,10 +4,10 @@

Simulation Metadata
----------------------
GEOPHIRES Version: 3.12.1
Simulation Date: 2026-04-05
Simulation Time: 07:35
Calculation Time: 1.219 sec
GEOPHIRES Version: 3.16.2
Simulation Date: 2026-09-10
Simulation Time: 08:32
Calculation Time: 1.225 sec

***SUMMARY OF RESULTS***

Expand Down Expand Up @@ -100,9 +100,9 @@ Simulation Metadata

Exploration costs: 3.89 MUSD
Drilling and completion costs: 49.18 MUSD
Drilling and completion costs per vertical production well: 3.37 MUSD
Drilling and completion costs per vertical injection well: 3.37 MUSD
Drilling and completion costs per non-vertical section: 2.14 MUSD
Drilling and completion costs per vertical production well: 3.54 MUSD
Drilling and completion costs per vertical injection well: 3.54 MUSD
Drilling and completion costs per non-vertical section: 2.24 MUSD
Stimulation costs: 9.06 MUSD
Surface power plant costs: 144.44 MUSD
Field gathering system costs: 5.80 MUSD
Expand Down
14 changes: 7 additions & 7 deletions tests/examples/example_SAM-single-owner-PPA-4.out
Original file line number Diff line number Diff line change
Expand Up @@ -4,10 +4,10 @@

Simulation Metadata
----------------------
GEOPHIRES Version: 3.12.1
Simulation Date: 2026-04-01
Simulation Time: 09:30
Calculation Time: 1.226 sec
GEOPHIRES Version: 3.16.2
Simulation Date: 2026-09-10
Simulation Time: 08:32
Calculation Time: 1.244 sec

***SUMMARY OF RESULTS***

Expand Down Expand Up @@ -101,9 +101,9 @@ Simulation Metadata

Exploration costs: 3.89 MUSD
Drilling and completion costs: 49.18 MUSD
Drilling and completion costs per vertical production well: 3.37 MUSD
Drilling and completion costs per vertical injection well: 3.37 MUSD
Drilling and completion costs per non-vertical section: 2.14 MUSD
Drilling and completion costs per vertical production well: 3.54 MUSD
Drilling and completion costs per vertical injection well: 3.54 MUSD
Drilling and completion costs per non-vertical section: 2.24 MUSD
Stimulation costs: 9.06 MUSD
Surface power plant costs: 144.44 MUSD
Field gathering system costs: 8.50 MUSD
Expand Down
14 changes: 7 additions & 7 deletions tests/examples/example_SAM-single-owner-PPA-4b.out
Original file line number Diff line number Diff line change
Expand Up @@ -4,10 +4,10 @@

Simulation Metadata
----------------------
GEOPHIRES Version: 3.12.1
Simulation Date: 2026-04-01
Simulation Time: 09:30
Calculation Time: 1.299 sec
GEOPHIRES Version: 3.16.2
Simulation Date: 2026-09-10
Simulation Time: 08:32
Calculation Time: 1.221 sec

***SUMMARY OF RESULTS***

Expand Down Expand Up @@ -101,9 +101,9 @@ Simulation Metadata

Exploration costs: 3.89 MUSD
Drilling and completion costs: 49.18 MUSD
Drilling and completion costs per vertical production well: 3.37 MUSD
Drilling and completion costs per vertical injection well: 3.37 MUSD
Drilling and completion costs per non-vertical section: 2.14 MUSD
Drilling and completion costs per vertical production well: 3.54 MUSD
Drilling and completion costs per vertical injection well: 3.54 MUSD
Drilling and completion costs per non-vertical section: 2.24 MUSD
Stimulation costs: 9.06 MUSD
Surface power plant costs: 144.44 MUSD
Field gathering system costs: 8.50 MUSD
Expand Down
Loading