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.11.15
current_version = 3.11.17
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.11.15
version: 3.11.17
version_manager: "bump2version"
website: "https://github.com/NREL"
year_from: "2023"
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.11.15.svg
.. |commits-since| image:: https://img.shields.io/github/commits-since/softwareengineerprogrammer/GEOPHIRES-X/v3.11.17.svg
:alt: Commits since latest release
:target: https://github.com/softwareengineerprogrammer/GEOPHIRES-X/compare/v3.11.15...main
:target: https://github.com/softwareengineerprogrammer/GEOPHIRES-X/compare/v3.11.17...main

.. |docs| image:: https://readthedocs.org/projects/GEOPHIRES-X/badge/?style=flat
:target: https://softwareengineerprogrammer.github.io/GEOPHIRES
Expand Down
206 changes: 103 additions & 103 deletions docs/_images/fervo_project_cape-5-sensitivity-analysis-irr.svg
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
200 changes: 100 additions & 100 deletions docs/_images/fervo_project_cape-5-sensitivity-analysis-lcoe.svg
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
210 changes: 105 additions & 105 deletions docs/_images/fervo_project_cape-5-sensitivity-analysis-project_npv.svg
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
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.11.15'
version = release = '3.11.17'

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.11.15',
version='3.11.17',
license='MIT',
description='GEOPHIRES is a free and open-source geothermal techno-economic simulator.',
long_description='{}\n{}'.format(
Expand Down
21 changes: 21 additions & 0 deletions src/geophires_x/Economics.py
Original file line number Diff line number Diff line change
Expand Up @@ -2088,6 +2088,17 @@ def __init__(self, model: Model):
CurrentUnits=CurrencyUnit.MDOLLARS,
)
self.capex_total = self.OutputParameterDict[self.capex_total.Name] = total_capex_parameter_output_parameter()
self.capex_total_per_kw = self.OutputParameterDict[self.capex_total_per_kw.Name] = OutputParameter(
Name="Total CAPEX ($/kW)",
UnitType=Units.ENERGYCOST,
PreferredUnits=EnergyCostUnit.DOLLARSPERKW,
CurrentUnits=EnergyCostUnit.DOLLARSPERKW,
ToolTipText='The total capital expenditure (CAPEX) required to construct the plant, '
'normalized per kilowatt of capacity. '
'This metric is calculated based on the maximum net electricity generation of the facility. '
'It reflects all direct and indirect costs, contingency, and applicable cost escalations '
'included in the base Total CAPEX.',
)

# noinspection SpellCheckingInspection
self.Coam = self.OutputParameterDict[self.Coam.Name] = OutputParameter(
Expand Down Expand Up @@ -3521,6 +3532,16 @@ def _calculate_sam_economics(self, model: Model) -> None:
# since SAM Economic Model doesn't subtract ITC from this value.
self.capex_total.value = (self.sam_economics_calculations.capex.quantity()
.to(self.capex_total.CurrentUnits.value).magnitude)
# self.capex_total_per_kw.value = PlainQuantity(self.capex_total.value, f'{self.capex_total.CurrentUnits}'

# TODO define this as an output of SurfacePlant rather than calculating it on-demand here and elsewhere
max_net_electricity_generation_kw = quantity(
np.max(model.surfaceplant.NetElectricityProduced.value),
model.surfaceplant.NetElectricityProduced.CurrentUnits
).to('kW')
capex_total_per_kw_q = self.capex_total.quantity().to('USD') / max_net_electricity_generation_kw
self.capex_total_per_kw.value = capex_total_per_kw_q.magnitude

self.CCap.value = (self.sam_economics_calculations.capex.quantity()
.to(self.CCap.CurrentUnits.value).magnitude)

Expand Down
1 change: 1 addition & 0 deletions src/geophires_x/Outputs.py
Original file line number Diff line number Diff line change
Expand Up @@ -221,6 +221,7 @@ def PrintOutputs(self, model: Model):

if is_sam_econ_model:
f.write(f' {Outputs._field_label(econ.capex_total.display_name, 50)}{econ.capex_total.value:10.2f} {econ.capex_total.CurrentUnits.value}\n')
f.write(f' {Outputs._field_label(econ.capex_total_per_kw.display_name, 50)}{econ.capex_total_per_kw.value:10.0f} {econ.capex_total_per_kw.CurrentUnits.value}\n')

f.write(f' Number of production wells: {model.wellbores.nprod.value:10.0f}'+NL)
f.write(f' Number of injection wells: {model.wellbores.ninj.value:10.0f}'+NL)
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.11.15'
__version__ = '3.11.17'
1 change: 1 addition & 0 deletions src/geophires_x_client/geophires_x_result.py
Original file line number Diff line number Diff line change
Expand Up @@ -44,6 +44,7 @@ class GeophiresXResult:
'Average Net Electricity Production',
'Electricity breakeven price',
'Total CAPEX',
'Total CAPEX ($/kW)',
'Average Direct-Use Heat Production',
'Direct-Use heat breakeven price',
'Direct-Use heat breakeven price (LCOH)',
Expand Down
5 changes: 5 additions & 0 deletions src/geophires_x_schema_generator/geophires-result.json
Original file line number Diff line number Diff line change
Expand Up @@ -27,6 +27,11 @@
"description": "The total capital expenditure (CAPEX) required to construct the plant. This value includes all direct and indirect costs, and contingency. For SAM Economic models, it also includes any cost escalation from inflation during construction. It is used as the total installed cost input for SAM Economic Models.",
"units": "MUSD"
},
"Total CAPEX ($/kW)": {
"type": "number",
"description": "The total capital expenditure (CAPEX) required to construct the plant, normalized per kilowatt of capacity. This metric is calculated based on the maximum net electricity generation of the facility. It reflects all direct and indirect costs, contingency, and applicable cost escalations included in the base Total CAPEX.",
"units": "USD/kW"
},
"Average Direct-Use Heat Production": {},
"Direct-Use heat breakeven price": {},
"Direct-Use heat breakeven price (LCOH)": {
Expand Down
11 changes: 6 additions & 5 deletions tests/examples/Fervo_Project_Cape-4.out
Original file line number Diff line number Diff line change
Expand Up @@ -4,17 +4,18 @@

Simulation Metadata
----------------------
GEOPHIRES Version: 3.11.3
Simulation Date: 2026-01-17
Simulation Time: 09:41
Calculation Time: 2.234 sec
GEOPHIRES Version: 3.11.16
Simulation Date: 2026-02-27
Simulation Time: 09:47
Calculation Time: 1.795 sec

***SUMMARY OF RESULTS***

End-Use Option: Electricity
Average Net Electricity Production: 532.53 MW
Electricity breakeven price: 8.11 cents/kWh
Total CAPEX: 2660.87 MUSD
Total CAPEX ($/kW): 4954 USD/kW
Number of production wells: 59
Number of injection wells: 59
Flowrate per production well: 107.0 kg/sec
Expand Down Expand Up @@ -328,7 +329,7 @@ After-tax cumulative NPV ($) -1,064,346,550 -276,360,558 -
AFTER-TAX LCOE AND PPA PRICE
Annual costs ($) -1,064,346,550 504,481,845 -279,761,764 -280,941,051 -282,053,576 -283,104,409 -283,946,673 -284,197,129 -283,198,821 -283,951,600 -287,996,326 -289,476,868 -290,828,818 -292,141,214 -293,348,448 -294,183,709 -294,099,170 -292,511,863 -297,725,623 -299,899,742 -301,618,330 -318,291,569 -334,925,356 -336,358,826 -337,173,733 -336,651,121 -338,088,802 -343,176,493 -345,487,456 -347,698,476 627,560,501
PPA revenue ($) 0 398,360,985 400,859,527 404,023,741 406,864,580 409,397,136 411,063,538 410,414,761 404,969,797 406,031,044 419,401,219 423,001,126 426,005,415 428,743,476 430,961,457 431,646,734 428,727,061 419,997,324 436,749,150 441,881,181 445,124,646 448,012,403 450,560,179 452,154,561 451,204,088 444,986,839 445,920,708 460,361,453 464,070,591 467,122,922 469,876,708
Electricity to grid (kWh) 0.0 4,193,273,525 4,219,573,970 4,227,516,388 4,232,001,035 4,233,245,126 4,225,570,913 4,194,325,606 4,114,710,394 4,101,737,992 4,212,547,398 4,224,519,385 4,230,441,060 4,233,667,186 4,231,750,368 4,214,888,525 4,163,207,043 4,055,985,743 4,194,671,056 4,220,853,770 4,228,811,003 4,233,321,393 4,234,588,146 4,226,928,684 4,195,686,141 4,116,056,232 4,103,061,353 4,213,834,812 4,225,738,401 4,231,569,184 4,234,649,495
Electricity to grid (kWh) 0 4,193,273,525 4,219,573,970 4,227,516,388 4,232,001,035 4,233,245,126 4,225,570,913 4,194,325,606 4,114,710,394 4,101,737,992 4,212,547,398 4,224,519,385 4,230,441,060 4,233,667,186 4,231,750,368 4,214,888,525 4,163,207,043 4,055,985,743 4,194,671,056 4,220,853,770 4,228,811,003 4,233,321,393 4,234,588,146 4,226,928,684 4,195,686,141 4,116,056,232 4,103,061,353 4,213,834,812 4,225,738,401 4,231,569,184 4,234,649,495

Present value of annual costs ($) 2,298,728,919
Present value of annual energy nominal (kWh) 28,355,365,264
Expand Down
9 changes: 5 additions & 4 deletions tests/examples/Fervo_Project_Cape-5.out
Original file line number Diff line number Diff line change
Expand Up @@ -4,17 +4,18 @@

Simulation Metadata
----------------------
GEOPHIRES Version: 3.11.12
Simulation Date: 2026-02-16
Simulation Time: 10:58
Calculation Time: 1.862 sec
GEOPHIRES Version: 3.11.16
Simulation Date: 2026-02-27
Simulation Time: 09:49
Calculation Time: 1.881 sec

***SUMMARY OF RESULTS***

End-Use Option: Electricity
Average Net Electricity Production: 510.13 MW
Electricity breakeven price: 8.59 cents/kWh
Total CAPEX: 2865.69 MUSD
Total CAPEX ($/kW): 5595 USD/kW
Number of production wells: 56
Number of injection wells: 38
Flowrate per production well: 107.0 kg/sec
Expand Down
9 changes: 5 additions & 4 deletions tests/examples/Fervo_Project_Cape-6.out
Original file line number Diff line number Diff line change
Expand Up @@ -4,17 +4,18 @@

Simulation Metadata
----------------------
GEOPHIRES Version: 3.11.12
Simulation Date: 2026-02-16
Simulation Time: 10:58
Calculation Time: 1.884 sec
GEOPHIRES Version: 3.11.16
Simulation Date: 2026-02-27
Simulation Time: 09:53
Calculation Time: 1.834 sec

***SUMMARY OF RESULTS***

End-Use Option: Electricity
Average Net Electricity Production: 103.22 MW
Electricity breakeven price: 8.93 cents/kWh
Total CAPEX: 577.72 MUSD
Total CAPEX ($/kW): 5573 USD/kW
Number of production wells: 12
Number of injection wells: 8
Flowrate per production well: 100.0 kg/sec
Expand Down
3 changes: 1 addition & 2 deletions tests/examples/Fervo_Project_Cape-6.txt
Original file line number Diff line number Diff line change
Expand Up @@ -52,8 +52,6 @@ End-Use Option, 1, -- Electricity
Power Plant Type, 2, -- Gen 2 ORC units (Turboden, 2025).
Plant Lifetime, 30, -- Sets the project economic horizon, aligned with Fervo's anticipated 30-year well life (Fervo Energy, 2025). Modeling Distinction: While Fervo projects physical wellbore integrity for 30 years, GEOPHIRES simulates "redrilling events" to model thermal management of the reservoir volume. This treats the 30-year lifespan as an aggregate of shorter-lived thermal cycles delineated by discrete redrilling events occurring at intervals dictated by the Maximum Drawdown parameter. The modeled cost of each redrilling event is equivalent to the drilling and stimulation cost of the entire wellfield, serving as a conservative cost proxy for the major interventions (e.g., sidetracking and stimulating laterals into fresh rock, or drilling new wells if necessary) required to sustain the PPA target against thermal depletion.

Reservoir Model, 1

Surface Temperature, 13, -- Surface temperature near Milford, UT (38.4987670, -112.9163432) ([Project InnerSpace, 2025](https://geomap.projectinnerspace.org/test/)).

Number of Segments, 3
Expand All @@ -70,6 +68,7 @@ Reservoir Heat Capacity, 790
Reservoir Thermal Conductivity, 3.05
Reservoir Porosity, 0.0118

Reservoir Model, 1, -- See the [reservoir engineering calibration section](#res-eng-params-calibration-section) for additional details.
Reservoir Volume Option, 1, -- FRAC_NUM_SEP: Reservoir volume calculated with fracture separation and number of fractures as input

Number of Fractures per Stimulated Well, 150, -- The model assumes an Extreme Limited Entry stimulation design (Fervo Energy, 2023) utilizing 12 stages with 15 clusters per stage (derived from Singh et al., 2025) and 81–85% stimulation success rate per 2024b ATB Moderate Scenario (NREL, 2025).
Expand Down
9 changes: 5 additions & 4 deletions tests/examples/example_SAM-single-owner-PPA-2.out
Original file line number Diff line number Diff line change
Expand Up @@ -4,17 +4,18 @@

Simulation Metadata
----------------------
GEOPHIRES Version: 3.11.9
Simulation Date: 2026-01-28
Simulation Time: 12:11
Calculation Time: 1.059 sec
GEOPHIRES Version: 3.11.16
Simulation Date: 2026-02-27
Simulation Time: 09:53
Calculation Time: 1.050 sec

***SUMMARY OF RESULTS***

End-Use Option: Electricity
Average Net Electricity Production: 404.31 MW
Electricity breakeven price: 7.37 cents/kWh
Total CAPEX: 1609.42 MUSD
Total CAPEX ($/kW): 3972 USD/kW
Number of production wells: 39
Number of injection wells: 39
Flowrate per production well: 120.0 kg/sec
Expand Down
9 changes: 5 additions & 4 deletions tests/examples/example_SAM-single-owner-PPA-3.out
Original file line number Diff line number Diff line change
Expand Up @@ -4,17 +4,18 @@

Simulation Metadata
----------------------
GEOPHIRES Version: 3.11.9
Simulation Date: 2026-01-28
Simulation Time: 12:11
Calculation Time: 1.237 sec
GEOPHIRES Version: 3.11.16
Simulation Date: 2026-02-27
Simulation Time: 09:53
Calculation Time: 1.239 sec

***SUMMARY OF RESULTS***

End-Use Option: Electricity
Average Net Electricity Production: 58.87 MW
Electricity breakeven price: 7.64 cents/kWh
Total CAPEX: 275.47 MUSD
Total CAPEX ($/kW): 4667 USD/kW
Number of production wells: 6
Number of injection wells: 6
Flowrate per production well: 100.0 kg/sec
Expand Down
9 changes: 5 additions & 4 deletions tests/examples/example_SAM-single-owner-PPA-4.out
Original file line number Diff line number Diff line change
Expand Up @@ -4,17 +4,18 @@

Simulation Metadata
----------------------
GEOPHIRES Version: 3.11.9
Simulation Date: 2026-01-28
Simulation Time: 12:11
Calculation Time: 1.448 sec
GEOPHIRES Version: 3.11.16
Simulation Date: 2026-02-27
Simulation Time: 09:53
Calculation Time: 1.326 sec

***SUMMARY OF RESULTS***

End-Use Option: Electricity
Average Net Electricity Production: 54.96 MW
Electricity breakeven price: 6.97 cents/kWh
Total CAPEX: 225.81 MUSD
Total CAPEX ($/kW): 4097 USD/kW
Number of production wells: 6
Number of injection wells: 6
Flowrate per production well: 100.0 kg/sec
Expand Down
9 changes: 5 additions & 4 deletions tests/examples/example_SAM-single-owner-PPA-5.out
Original file line number Diff line number Diff line change
Expand Up @@ -4,17 +4,18 @@

Simulation Metadata
----------------------
GEOPHIRES Version: 3.11.12
Simulation Date: 2026-02-01
Simulation Time: 09:42
Calculation Time: 2.228 sec
GEOPHIRES Version: 3.11.16
Simulation Date: 2026-02-27
Simulation Time: 09:53
Calculation Time: 1.854 sec

***SUMMARY OF RESULTS***

End-Use Option: Electricity
Average Net Electricity Production: 110.58 MW
Electricity breakeven price: 7.78 cents/kWh
Total CAPEX: 710.63 MUSD
Total CAPEX ($/kW): 6407 USD/kW
Number of production wells: 15
Number of injection wells: 15
Flowrate per production well: 80.0 kg/sec
Expand Down
9 changes: 5 additions & 4 deletions tests/examples/example_SAM-single-owner-PPA.out
Original file line number Diff line number Diff line change
Expand Up @@ -4,17 +4,18 @@

Simulation Metadata
----------------------
GEOPHIRES Version: 3.11.9
Simulation Date: 2026-01-28
Simulation Time: 12:07
Calculation Time: 1.275 sec
GEOPHIRES Version: 3.11.16
Simulation Date: 2026-02-27
Simulation Time: 09:49
Calculation Time: 1.227 sec

***SUMMARY OF RESULTS***

End-Use Option: Electricity
Average Net Electricity Production: 54.96 MW
Electricity breakeven price: 6.34 cents/kWh
Total CAPEX: 225.81 MUSD
Total CAPEX ($/kW): 4097 USD/kW
Number of production wells: 6
Number of injection wells: 6
Flowrate per production well: 100.0 kg/sec
Expand Down