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.25
current_version = 3.11.26
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.25
version: 3.11.26
version_manager: "bump2version"
website: "https://github.com/NREL"
year_from: "2023"
Expand Down
2 changes: 2 additions & 0 deletions CHANGELOG.rst
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,8 @@ GEOPHIRES v3 (2023-2026)
3.11
^^^^

3.11.26: `Data center example; output additional CAPEX modifiers <https://github.com/softwareengineerprogrammer/GEOPHIRES/pull/141>`__ | `release <https://github.com/NREL/GEOPHIRES-X/releases/tag/v3.11.26>`__

3.11.25: `Royalty Rate Schedule & Royalty Supplemental Payments <https://github.com/NatLabRockies/GEOPHIRES-X/pull/472>`__ | `release <https://github.com/NREL/GEOPHIRES-X/releases/tag/v3.11.25>`__ | `documentation <https://softwareengineerprogrammer.github.io/GEOPHIRES/SAM-Economic-Models.html#royalties>`__ | **Changed:** The calculation for Royalty Holder Average Annual Revenue now averages over the entire project timeline (construction + operations) rather than just the operational phase. For projects with multi-year construction periods, this will result in a lower average value than in previous versions. See documentation for further details.

3.11.17: `Add Total CAPEX ($/kW) output for SAM-EM in Summary of Results category <https://github.com/NREL/GEOPHIRES-X/pull/470>`__ | `release <https://github.com/NREL/GEOPHIRES-X/releases/tag/v3.11.17>`__
Expand Down
8 changes: 6 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.25.svg
.. |commits-since| image:: https://img.shields.io/github/commits-since/softwareengineerprogrammer/GEOPHIRES-X/v3.11.26.svg
:alt: Commits since latest release
:target: https://github.com/softwareengineerprogrammer/GEOPHIRES-X/compare/v3.11.25...main
:target: https://github.com/softwareengineerprogrammer/GEOPHIRES-X/compare/v3.11.26...main

.. |docs| image:: https://readthedocs.org/projects/GEOPHIRES-X/badge/?style=flat
:target: https://softwareengineerprogrammer.github.io/GEOPHIRES
Expand Down Expand Up @@ -236,6 +236,10 @@ Example-specific web interface deeplinks are listed in the Link column.
- `example13.txt <tests/examples/example13.txt>`__
- `.out <tests/examples/example13.out>`__
- `link <https://gtp.scientificwebservices.com/geophires?geophires-example-id=example13>`__
* - Example 14: Data Center
- `example14_data-center.txt <tests/examples/example14_data-center.txt>`__
- `.out <tests/examples/example14_data-center.out>`__
- `link <https://gtp.scientificwebservices.com/geophires?geophires-example-id=example14_data-center>`__
* - CLGS: Coaxial sCO2: Heat
- `[...]Coaxial_sCO2_heat.txt <tests/examples/Beckers_et_al_2023_Tabulated_Database_Coaxial_sCO2_heat.txt>`__
- `.out <tests/examples/Beckers_et_al_2023_Tabulated_Database_Coaxial_sCO2_heat.out>`__
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.11.25'
version = release = '3.11.26'

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.25',
version='3.11.26',
license='MIT',
description='GEOPHIRES is a free and open-source geothermal techno-economic simulator.',
long_description='{}\n{}'.format(
Expand Down
39 changes: 30 additions & 9 deletions src/geophires_x/Outputs.py
Original file line number Diff line number Diff line change
Expand Up @@ -465,12 +465,11 @@ def PrintOutputs(self, model: Model):
if model.wellbores.productionwellpumping.value:
f.write(f' Average Production Well Pump Pressure Drop: {np.average(model.wellbores.DPProdWell.value):10.1f} ' + model.wellbores.DPProdWell.PreferredUnits.value + NL)

f.write(NL)
f.write(NL)
f.write(' ***CAPITAL COSTS (M$)***\n')
f.write(NL)

f.write('\n\n ***CAPITAL COSTS (M$)***\n\n')
if not model.economics.totalcapcost.Valid:
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 + NL)
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 + NL)
Expand All @@ -482,7 +481,9 @@ def PrintOutputs(self, model: Model):
else:
cpw_label = Outputs._field_label(econ.drilling_and_completion_costs_per_well.display_name, 47)
f.write(f' {cpw_label}{econ.drilling_and_completion_costs_per_well.value:10.2f} {econ.Cwell.CurrentUnits.value}\n')

f.write(f' {econ.Cstim.display_name}: {econ.Cstim.value:10.2f} {econ.Cstim.CurrentUnits.value}\n')

f.write(f' {econ.Cplant.display_name}: {econ.Cplant.value:10.2f} {econ.Cplant.CurrentUnits.value}\n')
if model.surfaceplant.plant_type.value == PlantType.ABSORPTION_CHILLER:
f.write(f' of which Absorption Chiller Cost: {model.economics.chillercapex.value:10.2f} ' + model.economics.Cplant.CurrentUnits.value + NL)
Expand All @@ -491,11 +492,15 @@ def PrintOutputs(self, model: Model):
if model.surfaceplant.plant_type.value == PlantType.DISTRICT_HEATING:
f.write(f' of which Peaking Boiler Cost: {model.economics.peakingboilercost.value:10.2f} ' + model.economics.peakingboilercost.CurrentUnits.value + NL)
f.write(f' {model.economics.Cgath.display_name}: {model.economics.Cgath.value:10.2f} {model.economics.Cgath.CurrentUnits.value}\n')

if model.surfaceplant.piping_length.value > 0:
f.write(f' {model.economics.Cpiping.display_name}: {model.economics.Cpiping.value:10.2f} {model.economics.Cpiping.CurrentUnits.value}\n')

if model.surfaceplant.plant_type.value == PlantType.DISTRICT_HEATING:
f.write(f' District Heating System Cost: {model.economics.dhdistrictcost.value:10.2f} {model.economics.dhdistrictcost.CurrentUnits.value}\n')

f.write(f' Total surface equipment costs: {(model.economics.Cplant.value+model.economics.Cgath.value):10.2f} ' + model.economics.Cplant.CurrentUnits.value + NL)

f.write(f' {model.economics.Cexpl.display_name}: {model.economics.Cexpl.value:10.2f} {model.economics.Cexpl.CurrentUnits.value}\n')

if model.economics.totalcapcost.Valid and model.wellbores.redrill.value > 0:
Expand All @@ -507,6 +512,27 @@ def PrintOutputs(self, model: Model):
# Note ITC is in ECONOMIC PARAMETERS category for SAM-EM (not capital costs)
f.write(f' {econ.RITCValue.display_name}: {-1 * econ.RITCValue.value:10.2f} {econ.RITCValue.CurrentUnits.value}\n')

additional_capex_modifiers: list[tuple[Parameter, int]] = [
(econ.FlatLicenseEtc, 1),
(econ.OtherIncentives, -1),
(econ.TotalGrant, -1)
]
for additional_capex_modifier_entry in additional_capex_modifiers:
additional_capex_modifier_param: Parameter = additional_capex_modifier_entry[0]
additional_capex_modifier_multiplier: int = additional_capex_modifier_entry[1]

acm_render_value = additional_capex_modifier_param.value * additional_capex_modifier_multiplier

if additional_capex_modifier_param.Provided:
acm_label = Outputs._field_label(additional_capex_modifier_param.Name, 47)
f.write(
f' {acm_label}{acm_render_value:10.2f} {additional_capex_modifier_param.CurrentUnits.value}\n')

if is_sam_econ_model and econ.DoAddOnCalculations.value:
# Non-SAM econ models print this in Extended Economics profile
aoc_label = Outputs._field_label(model.addeconomics.AddOnCAPEXTotal.display_name, 47)
f.write(f' {aoc_label}{model.addeconomics.AddOnCAPEXTotal.value:10.2f} {model.addeconomics.AddOnCAPEXTotal.CurrentUnits.value}\n')

display_occ_and_inflation_during_construction_in_capital_costs = is_sam_econ_model
if display_occ_and_inflation_during_construction_in_capital_costs:
occ_label = Outputs._field_label(econ.overnight_capital_cost.display_name, 47)
Expand All @@ -528,11 +554,6 @@ def PrintOutputs(self, model: Model):
f.write(
f' {idc_label}{econ.interest_during_construction.value:10.2f} {econ.interest_during_construction.CurrentUnits.value}\n')

if is_sam_econ_model and econ.DoAddOnCalculations.value:
# Non-SAM econ models print this in Extended Economics profile
aoc_label = Outputs._field_label(model.addeconomics.AddOnCAPEXTotal.display_name, 47)
f.write(f' {aoc_label}{model.addeconomics.AddOnCAPEXTotal.value:10.2f} {model.addeconomics.AddOnCAPEXTotal.CurrentUnits.value}\n')

capex_param = econ.CCap if not is_sam_econ_model else econ.capex_total
capex_label = Outputs._field_label(capex_param.display_name, 50)
f.write(f' {capex_label}{capex_param.value:10.2f} {capex_param.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.11.25'
__version__ = '3.11.26'
5 changes: 4 additions & 1 deletion src/geophires_x_client/geophires_x_result.py
Original file line number Diff line number Diff line change
Expand Up @@ -269,12 +269,15 @@ class GeophiresXResult:
'Total surface equipment costs',
'Exploration costs',
'Investment Tax Credit',
'One-time Flat License Fees Etc',
'Other Incentives',
'One-time Grants Etc',
'Total Add-on CAPEX',
'Overnight Capital Cost',
# Displayed for economic models that treat inflation costs as capital costs (SAM-EM)
'Inflation costs during construction',
'Royalty supplemental payments during construction',
'Interest during construction',
'Total Add-on CAPEX',
'Total capital costs',
'Annualized capital costs',
# AGS/CLGS
Expand Down
13 changes: 8 additions & 5 deletions src/geophires_x_schema_generator/geophires-result.json
Original file line number Diff line number Diff line change
Expand Up @@ -452,6 +452,14 @@
"description": "Investment Tax Credit Value. Represents the total undiscounted ITC sum. For SAM Economic Models, this accounts for the standard Year 1 Federal ITC as well as any applicable State ITCs or multi-year credit schedules.",
"units": "MUSD"
},
"One-time Flat License Fees Etc": {},
"Other Incentives": {},
"One-time Grants Etc": {},
"Total Add-on CAPEX": {
"type": "number",
"description": "AddOn CAPEX Total",
"units": "MUSD"
},
"Overnight Capital Cost": {
"type": "number",
"description": "Overnight Capital Cost (OCC) represents the total capital cost required to construct the plant if it were built instantly (\"overnight\"). This value excludes time-dependent costs such as inflation, royalty supplemental payments, and interest incurred during the construction period.",
Expand All @@ -472,11 +480,6 @@
"description": "Interest During Construction (IDC) is the total accumulated interest incurred on debt during the construction phase. This cost is capitalized (added to the loan principal and total installed cost) rather than paid in cash.",
"units": "MUSD"
},
"Total Add-on CAPEX": {
"type": "number",
"description": "AddOn CAPEX Total",
"units": "MUSD"
},
"Total capital costs": {
"type": "number",
"description": "Total Capital Cost",
Expand Down
7 changes: 5 additions & 2 deletions tests/example1_addons.csv
Original file line number Diff line number Diff line change
Expand Up @@ -78,6 +78,9 @@ CAPITAL COSTS (M$),Surface power plant costs,,20.8,MUSD
CAPITAL COSTS (M$),Field gathering system costs,,2.3,MUSD
CAPITAL COSTS (M$),Total surface equipment costs,,23.1,MUSD
CAPITAL COSTS (M$),Exploration costs,,4.49,MUSD
CAPITAL COSTS (M$),One-time Flat License Fees Etc,,0.0,MUSD
CAPITAL COSTS (M$),Other Incentives,,-2.11,MUSD
CAPITAL COSTS (M$),One-time Grants Etc,,-20.21,MUSD
CAPITAL COSTS (M$),Total capital costs,,25.67,MUSD
CAPITAL COSTS (M$),Annualized capital costs,,1.28,MUSD
OPERATING AND MAINTENANCE COSTS (M$/yr),Wellfield maintenance costs,,0.39,MUSD/yr
Expand All @@ -98,8 +101,8 @@ SURFACE EQUIPMENT SIMULATION RESULTS,Average Annual Net Electricity Generation,,
SURFACE EQUIPMENT SIMULATION RESULTS,Average Pumping Power,,0.2,MW
SURFACE EQUIPMENT SIMULATION RESULTS,Initial pumping power/net installed power,,3.82,%
SURFACE EQUIPMENT SIMULATION RESULTS,Heat to Power Conversion Efficiency,,10.07,%
Simulation Metadata,GEOPHIRES Version,,3.9.49,
Simulation Metadata,Calculation Time,,0.852,sec
Simulation Metadata,GEOPHIRES Version,,3.11.25,
Simulation Metadata,Calculation Time,,0.883,sec
POWER GENERATION PROFILE,THERMAL DRAWDOWN,1,1.0,
POWER GENERATION PROFILE,THERMAL DRAWDOWN,2,1.0056,
POWER GENERATION PROFILE,THERMAL DRAWDOWN,3,1.0073,
Expand Down
Loading