Skip to content

Number of Doublets parameter #82

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Merged
merged 17 commits into from
Jun 27, 2025
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
17 commits
Select commit Hold shift + click to select a range
00760a4
read Number of Doublets as Well Bores parameter (WIP)
softwareengineerprogrammer Jun 7, 2025
999866f
Address WIPs for Number of Doublets
softwareengineerprogrammer Jun 23, 2025
ef43265
test_number_of_doublets_non_integer to ensure MC compatibility
softwareengineerprogrammer Jun 23, 2025
ad8d602
bumpversion prerelease support
softwareengineerprogrammer Jun 23, 2025
c28f064
Bump version: 3.9.27 → 3.9.28-rc.0
softwareengineerprogrammer Jun 23, 2025
d43bcae
Switch Fervo_Project_Cape-4 to use Number of Doublets instead of Numb…
softwareengineerprogrammer Jun 23, 2025
c1e8b03
use py38-compatible dict unpacking syntax (** instead of |)
softwareengineerprogrammer Jun 23, 2025
15935ec
document .5/1,000 gallon water cost
softwareengineerprogrammer Jun 25, 2025
485db73
Don't list capex/kW as a 'key case study result', it needs to be reca…
softwareengineerprogrammer Jun 26, 2025
f49d4a5
Adjust Fervo_Project_Cape-4 $/kW to be based on maximum net generatio…
softwareengineerprogrammer Jun 26, 2025
2ba6534
Add McClure Capex/kW reference = 5k
softwareengineerprogrammer Jun 26, 2025
f858afe
Fix case study documentation unit test, re-add CAPEX/kW as key result…
softwareengineerprogrammer Jun 26, 2025
a0e7fb3
Fix README doc link to GEOPHIRES v2.0 paper instead of user manual
softwareengineerprogrammer Jun 27, 2025
c099ece
move References/references.md to References/README.md so GitHub autom…
softwareengineerprogrammer Jun 27, 2025
66e5bfa
change links to references.md to just References/
softwareengineerprogrammer Jun 27, 2025
377ed6d
Link to References/README.md, not just References/
softwareengineerprogrammer Jun 27, 2025
85ea512
Merge branch 'references-readme' into number-of-doublets-2
softwareengineerprogrammer Jun 27, 2025
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
16 changes: 15 additions & 1 deletion .bumpversion.cfg
Original file line number Diff line number Diff line change
@@ -1,7 +1,21 @@
[bumpversion]
current_version = 3.9.27
current_version = 3.9.28-rc.0
commit = True
tag = True
parse = (?P<major>\d+)\.(?P<minor>\d+)\.(?P<patch>\d+)(\-(?P<prerelease_label>[a-z]+)\.(?P<prerelease>\d+))?
serialize =
{major}.{minor}.{patch}-{prerelease_label}.{prerelease}
{major}.{minor}.{patch}

[bumpversion:part:prerelease]
first_value = 0

[bumpversion:part:prerelease_label]
optional_value = rc
values =
alpha
beta
rc

[bumpversion:file:setup.py]
search = version='{current_version}'
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.9.27
version: 3.9.28
version_manager: "bump2version"
website: "https://github.com/NREL"
year_from: "2023"
Expand Down
10 changes: 5 additions & 5 deletions README.rst
Original file line number Diff line number Diff line change
Expand Up @@ -56,9 +56,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.9.27.svg
.. |commits-since| image:: https://img.shields.io/github/commits-since/softwareengineerprogrammer/GEOPHIRES-X/v3.9.28.svg
:alt: Commits since latest release
:target: https://github.com/softwareengineerprogrammer/GEOPHIRES-X/compare/v3.9.27...main
:target: https://github.com/softwareengineerprogrammer/GEOPHIRES-X/compare/v3.9.28...main

.. |docs| image:: https://readthedocs.org/projects/GEOPHIRES-X/badge/?style=flat
:target: https://nrel.github.io/GEOPHIRES-X
Expand Down Expand Up @@ -300,8 +300,8 @@ well drilling, surface plant, etc.) are either provided by the user or calculate
correlations.

For more information on the theoretical basis for GEOPHIRES see
`GEOPHIRES v2.0: updated geothermal techno‐economic simulation tool (Beckers & McCabe, 2019) <https://github.com/NREL/GEOPHIRES-X/blob/fb5caadfa419c3bd05de656a33700d085fbc0432/References/GEOPHIRES%20v2.0%20User%20Manual.pdf>`__
and `GEOPHIRES reference materials <References/references.md#geophires>`__.
`GEOPHIRES v2.0: updated geothermal techno‐economic simulation tool (Beckers & McCabe, 2019) <https://github.com/NREL/GEOPHIRES-X/blob/fb5caadfa419c3bd05de656a33700d085fbc0432/References/Beckers%202019%20GEOPHIRES%20v2.pdf>`__
and `GEOPHIRES reference materials <References/README.md#geophires>`__.

Parameters
----------
Expand Down Expand Up @@ -513,7 +513,7 @@ Extending GEOPHIRES-X
Additional Documentation
------------------------

Additional materials can be found in `/References </References/references.md>`__.
Additional materials can be found in `/References </References/README.md>`__.


Development
Expand Down
32 changes: 32 additions & 0 deletions References/README.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,32 @@

# GEOPHIRES
* [GEOPHIRES v2.0 User Manual.pdf](https://github.com/NREL/GEOPHIRES-X/blob/fb5caadfa419c3bd05de656a33700d085fbc0432/References/GEOPHIRES%20v2.0%20User%20Manual.pdf) [![](https://zenodo.org/badge/doi/10.1186/s40517-019-0119-6.svg)](https://doi.org/10.1186/s40517-019-0119-6)
* [Beckers 2019 GEOPHIRES v2.pdf](https://github.com/NREL/GEOPHIRES-X/blob/fb5caadfa419c3bd05de656a33700d085fbc0432/References/Beckers%202019%20GEOPHIRES%20v2.pdf)
* [Beckers 2018 Introducing GEOPHIRES v2.pdf](https://github.com/NREL/GEOPHIRES-X/blob/fb5caadfa419c3bd05de656a33700d085fbc0432/References/Beckers%202018%20Introducing%20GEOPHIRES%20v2.pdf)
* [Beckers 2016 Dissertation.pdf](https://github.com/NREL/GEOPHIRES-X/blob/fb5caadfa419c3bd05de656a33700d085fbc0432/References/Beckers%202016%20Dissertation.pdf) [![](https://zenodo.org/badge/doi/10.7298/X4736NTC.svg)](https://doi.org/10.7298/X4736NTC)
* [Beckers 2013 GEOPHIRES v1.pdf](https://github.com/NREL/GEOPHIRES-X/blob/fb5caadfa419c3bd05de656a33700d085fbc0432/References/Beckers%202013%20GEOPHIRES%20v1.pdf)

# Reference
* [GeoVision report.pdf](https://github.com/NREL/GEOPHIRES-X/blob/ea5c67d43fe77c83a64208d8e2ab92a9abea3742/References/GeoVision%20report.pdf)
* [US-EIA_2013_LCOE-and-LACE-supplement.pdf](https://github.com/NREL/GEOPHIRES-X/blob/7adc9598944a78487e5071ca23a06bfd17248c16/References/US-EIA_2013_LCOE-and-LACE-supplement.pdf)
* [LACETable.txt](https://github.com/NREL/GEOPHIRES-X/blob/fb5caadfa419c3bd05de656a33700d085fbc0432/References/LACETable.txt)
* [Drill cost correlation converting to per foot cost.xlsx](https://github.com/NREL/GEOPHIRES-X/blob/aae93f36ca5e01f4b700ddb5a59d0ec600aed3d4/References/Drill%20cost%20correlation%20converting%20to%20per%20foot%20cost.xlsx)

# Fervo
* [fervo_energy_white_paper.pdf](https://github.com/NREL/GEOPHIRES-X/blob/703c967b0b1fe9f6d619b1e786686ba07fb0fe59/References/fervo_energy_white_paper.pdf)
* [fervo_drilling costs.pdf](https://github.com/softwareengineerprogrammer/GEOPHIRES-X/blob/62ecc37385cc89dcac36a3684c258e454bcc0241/References/fervo_drilling%20costs.pdf)

# JEDI
* [JEDI.pdf](https://github.com/NREL/GEOPHIRES-X/blob/a7d1ff2e0d47e957c19c3b6dec28fece16905dcb/References/JEDI.pdf)
* [01d-jedi-geothermal-model-rel-gt12-23-16.xlsm](https://github.com/NREL/GEOPHIRES-X/raw/a7d1ff2e0d47e957c19c3b6dec28fece16905dcb/References/01d-jedi-geothermal-model-rel-gt12-23-16.xlsm)

# HIP-RA
* [Muffler-Cataldi_1978_ HIP-RA.pdf](https://github.com/NREL/GEOPHIRES-X/blob/7adc9598944a78487e5071ca23a06bfd17248c16/References/Muffler-Cataldi_1978_%20HIP-RA.pdf)
* [Garg-Combs_2011_HIP-RA-Reexamination.pdf](https://github.com/NREL/GEOPHIRES-X/blob/7adc9598944a78487e5071ca23a06bfd17248c16/References/Garg-Combs_2011_HIP-RA-Reexamination.pdf)

# CLGS
* [Beckers-et-al_2023_Tabulated-Database-CLGS.pdf](https://github.com/NREL/GEOPHIRES-X/blob/7adc9598944a78487e5071ca23a06bfd17248c16/References/Beckers-et-al_2023_Tabulated-Database-CLGS.pdf)
* [Wanju-et-al_2021_CLGS-Energy-Recovery.pdf](https://github.com/NREL/GEOPHIRES-X/blob/7adc9598944a78487e5071ca23a06bfd17248c16/References/Wanju-et-al_2021_CLGS-Energy-Recovery.pdf)

# S-DAC-GT
* [JPSE2023.pdf](https://github.com/NREL/GEOPHIRES-X/blob/ea5c67d43fe77c83a64208d8e2ab92a9abea3742/References/JPSE2023.pdf)
33 changes: 1 addition & 32 deletions References/references.md
Original file line number Diff line number Diff line change
@@ -1,32 +1 @@

# GEOPHIRES
* [GEOPHIRES v2.0 User Manual.pdf](https://github.com/NREL/GEOPHIRES-X/blob/fb5caadfa419c3bd05de656a33700d085fbc0432/References/GEOPHIRES%20v2.0%20User%20Manual.pdf) [![](https://zenodo.org/badge/doi/10.1186/s40517-019-0119-6.svg)](https://doi.org/10.1186/s40517-019-0119-6)
* [Beckers 2019 GEOPHIRES v2.pdf](https://github.com/NREL/GEOPHIRES-X/blob/fb5caadfa419c3bd05de656a33700d085fbc0432/References/Beckers%202019%20GEOPHIRES%20v2.pdf)
* [Beckers 2018 Introducing GEOPHIRES v2.pdf](https://github.com/NREL/GEOPHIRES-X/blob/fb5caadfa419c3bd05de656a33700d085fbc0432/References/Beckers%202018%20Introducing%20GEOPHIRES%20v2.pdf)
* [Beckers 2016 Dissertation.pdf](https://github.com/NREL/GEOPHIRES-X/blob/fb5caadfa419c3bd05de656a33700d085fbc0432/References/Beckers%202016%20Dissertation.pdf) [![](https://zenodo.org/badge/doi/10.7298/X4736NTC.svg)](https://doi.org/10.7298/X4736NTC)
* [Beckers 2013 GEOPHIRES v1.pdf](https://github.com/NREL/GEOPHIRES-X/blob/fb5caadfa419c3bd05de656a33700d085fbc0432/References/Beckers%202013%20GEOPHIRES%20v1.pdf)

# Reference
* [GeoVision report.pdf](https://github.com/NREL/GEOPHIRES-X/blob/ea5c67d43fe77c83a64208d8e2ab92a9abea3742/References/GeoVision%20report.pdf)
* [US-EIA_2013_LCOE-and-LACE-supplement.pdf](https://github.com/NREL/GEOPHIRES-X/blob/7adc9598944a78487e5071ca23a06bfd17248c16/References/US-EIA_2013_LCOE-and-LACE-supplement.pdf)
* [LACETable.txt](https://github.com/NREL/GEOPHIRES-X/blob/fb5caadfa419c3bd05de656a33700d085fbc0432/References/LACETable.txt)
* [Drill cost correlation converting to per foot cost.xlsx](https://github.com/NREL/GEOPHIRES-X/blob/aae93f36ca5e01f4b700ddb5a59d0ec600aed3d4/References/Drill%20cost%20correlation%20converting%20to%20per%20foot%20cost.xlsx)

# Fervo
* [fervo_energy_white_paper.pdf](https://github.com/NREL/GEOPHIRES-X/blob/703c967b0b1fe9f6d619b1e786686ba07fb0fe59/References/fervo_energy_white_paper.pdf)
* [fervo_drilling costs.pdf](https://github.com/softwareengineerprogrammer/GEOPHIRES-X/blob/62ecc37385cc89dcac36a3684c258e454bcc0241/References/fervo_drilling%20costs.pdf)

# JEDI
* [JEDI.pdf](https://github.com/NREL/GEOPHIRES-X/blob/a7d1ff2e0d47e957c19c3b6dec28fece16905dcb/References/JEDI.pdf)
* [01d-jedi-geothermal-model-rel-gt12-23-16.xlsm](https://github.com/NREL/GEOPHIRES-X/raw/a7d1ff2e0d47e957c19c3b6dec28fece16905dcb/References/01d-jedi-geothermal-model-rel-gt12-23-16.xlsm)

# HIP-RA
* [Muffler-Cataldi_1978_ HIP-RA.pdf](https://github.com/NREL/GEOPHIRES-X/blob/7adc9598944a78487e5071ca23a06bfd17248c16/References/Muffler-Cataldi_1978_%20HIP-RA.pdf)
* [Garg-Combs_2011_HIP-RA-Reexamination.pdf](https://github.com/NREL/GEOPHIRES-X/blob/7adc9598944a78487e5071ca23a06bfd17248c16/References/Garg-Combs_2011_HIP-RA-Reexamination.pdf)

# CLGS
* [Beckers-et-al_2023_Tabulated-Database-CLGS.pdf](https://github.com/NREL/GEOPHIRES-X/blob/7adc9598944a78487e5071ca23a06bfd17248c16/References/Beckers-et-al_2023_Tabulated-Database-CLGS.pdf)
* [Wanju-et-al_2021_CLGS-Energy-Recovery.pdf](https://github.com/NREL/GEOPHIRES-X/blob/7adc9598944a78487e5071ca23a06bfd17248c16/References/Wanju-et-al_2021_CLGS-Energy-Recovery.pdf)

# S-DAC-GT
* [JPSE2023.pdf](https://github.com/NREL/GEOPHIRES-X/blob/ea5c67d43fe77c83a64208d8e2ab92a9abea3742/References/JPSE2023.pdf)
See [References README](README.md).
23 changes: 14 additions & 9 deletions docs/Fervo_Project_Cape-4.md
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,7 @@ Financial results are calculated
using
the [SAM Single Owner PPA Economic Model](https://softwareengineerprogrammer.github.io/GEOPHIRES/SAM-Economic-Models.html#sam-single-owner-ppa).

Key case study results include LCOE = $75.5/MWh and CAPEX = $4290/kW.
Key case study results include LCOE = $75.5/MWh and CAPEX = $4900/kW.

[Click here](https://gtp.scientificwebservices.com/geophires/?geophires-example-id=Fervo_Project_Cape-4) to
interactively explore the case study in the GEOPHIRES web interface.
Expand Down Expand Up @@ -80,20 +80,21 @@ in source code for the complete results.

### Economic Results

| Metric | Result Value | Reference Value(s) | Reference Source |
|------------------------------------|----------------------------------------------------------|--------------------------|---------------------------------------------|
| LCOE | $75.5/MWh | $80/MWh | Horne et al, 2025 |
| Project capital costs: Total CAPEX | $2.64B | | |
| Project capital costs: $/kW | $4290/kW (based on maximum total electricity generation) | $4500/kW, $3000–$6000/kW | Horne et al, 2025; Latimer, 2025. |
| Well Drilling and Completion Cost | $3.96M/well (including 5% indirect costs) | $<4M/well | Latimer, 2025. |
| WACC | 8.3% | 8.3% | Matson, 2024. |
| After-tax IRR | 31.5% | 15–25% | Typical levered returns for energy projects |
| Metric | Result Value | Reference Value(s) | Reference Source |
|------------------------------------|--------------------------------------------------------|------------------------------------|--------------------------------------------------|
| LCOE | $75.5/MWh | $80/MWh | Horne et al, 2025 |
| Project capital costs: Total CAPEX | $2.64B | | |
| Project capital costs: $/kW | $4900/kW (based on maximum net electricity generation) | $5000/kW; $4500/kW; $3000–$6000/kW | McClure, 2024; Horne et al, 2025; Latimer, 2025. |
| Well Drilling and Completion Cost | $3.96M/well (including 5% indirect costs) | $<4M/well | Latimer, 2025. |
| WACC | 8.3% | 8.3% | Matson, 2024. |
| After-tax IRR | 31.5% | 15–25% | Typical levered returns for energy projects |

### Technical & Engineering Results

| Metric | Result Value | Reference Value(s) | Reference Source |
|-------------------------------------------------|--------------|----------------------------------------------------|-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
| Minimum Net Electricity Generation | 504 MW | 500 MW | Fervo Energy, 2025. The 500 MW PPA is interpreted to mean that Cape Station's net electricity generation must never fall below 500 MWe. |
| Maximum Net Electricity Generation | 537 MW | | |
| Maximum Total Electricity Generation | 615 MW | | Actual maximum total generation may be bounded or constrained by modular power plant design not modeled in this case study. For example, a modular design with 50MW units may constrain maximum total generation to 600 MW. |
| Number of times redrilling | 3 | 3–6 | Redrilling expected to be required within 5–10 years of project start |
| Average Production Temperature | 199℃ | 204℃, 190.6–198.6℃ (optimal plant operating range) | Trent, 2024; Norbeck et al, 2024. |
Expand Down Expand Up @@ -145,6 +146,10 @@ Matson, M. (2024, September 11). Fervo Energy Technology Day 2024: Entering "the
Geothermal
Energy. https://www.linkedin.com/pulse/fervo-energy-technology-day-2024-entering-geothermal-decade-matson-n4stc/

McClure, M. (2024, September 12). Digesting the Bonkers, Incredible, Off-the-Charts, Spectacular Results from the Fervo
and FORGE Enhanced Geothermal Projects. ResFrac Corporation Blog.
https://www.resfrac.com/blog/digesting-the-bonkers-incredible-off-the-charts-spectacular-results-from-the-fervo-and-forge-enhanced-geothermal-projects

NREL. (2024). Annual Technology Baseline: Recent Public Geothermal Power Purchase Agreement
Pricing. https://atb.nrel.gov/electricity/2024/geothermal

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.9.27'
version = release = '3.9.28'

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.9.27',
version='3.9.28',
license='MIT',
description='GEOPHIRES is a free and open-source geothermal techno-economic simulator.',
long_description='{}\n{}'.format(
Expand Down
4 changes: 3 additions & 1 deletion src/geophires_x/Economics.py
Original file line number Diff line number Diff line change
Expand Up @@ -1695,7 +1695,8 @@ def __init__(self, model: Model):
display_name='Water costs',
UnitType=Units.CURRENCYFREQUENCY,
PreferredUnits=CurrencyFrequencyUnit.MDOLLARSPERYEAR,
CurrentUnits=CurrencyFrequencyUnit.MDOLLARSPERYEAR
CurrentUnits=CurrencyFrequencyUnit.MDOLLARSPERYEAR,
ToolTipText='Assumes $3.5/1,000 gallons of water'
)
self.CCap = self.OutputParameterDict[self.CCap.Name] = OutputParameter(
Name="Total Capital Cost",
Expand Down Expand Up @@ -2490,6 +2491,7 @@ def Calculate(self, model: Model) -> None:
self.Coamwater.value = self.oamwaterfixed.value
else:
# here is assumed 1 l per kg maybe correct with real temp. (M$/year) 925$/ML = 3.5$/1,000 gallon
# TODO parameterize
self.Coamwater.value = self.oamwateradjfactor.value * (model.wellbores.nprod.value *
model.wellbores.prodwellflowrate.value *
model.reserv.waterloss.value * model.surfaceplant.utilization_factor.value *
Expand Down
1 change: 1 addition & 0 deletions src/geophires_x/SBTEconomics.py
Original file line number Diff line number Diff line change
Expand Up @@ -640,6 +640,7 @@ def Calculate(self, model: Model) -> None:
self.Coamwater.value = self.oamwaterfixed.value
else:
# here is assumed 1 l per kg maybe correct with real temp. (M$/year) 925$/ML = 3.5$/1,000 gallon
# TODO parameterize
self.Coamwater.value = self.oamwateradjfactor.value * (model.wellbores.nprod.value *
model.wellbores.prodwellflowrate.value *
model.reserv.waterloss.value * model.surfaceplant.utilization_factor.value *
Expand Down
Loading