diff --git a/.bumpversion.cfg b/.bumpversion.cfg index d881f6103..6f84a8224 100644 --- a/.bumpversion.cfg +++ b/.bumpversion.cfg @@ -1,5 +1,5 @@ [bumpversion] -current_version = 3.16.2 +current_version = 3.17.0 commit = True tag = True diff --git a/.cookiecutterrc b/.cookiecutterrc index 07658dd8a..ecba1e12a 100644 --- a/.cookiecutterrc +++ b/.cookiecutterrc @@ -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" diff --git a/CHANGELOG.rst b/CHANGELOG.rst index 7f024c134..f73f8f08c 100644 --- a/CHANGELOG.rst +++ b/CHANGELOG.rst @@ -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 `__; `Include indirect costs in vertical and lateral (non-vertical) section drilling costs `__ | `release `__ + 3.16 ^^^^ diff --git a/README.rst b/README.rst index 6beb43588..afc773849 100644 --- a/README.rst +++ b/README.rst @@ -58,9 +58,9 @@ Free software: `MIT 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 diff --git a/docs/conf.py b/docs/conf.py index 7ab53dd7f..0cc88d612 100644 --- a/docs/conf.py +++ b/docs/conf.py @@ -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'] diff --git a/setup.py b/setup.py index 4472ae987..9bf3e3d6b 100755 --- a/setup.py +++ b/setup.py @@ -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( diff --git a/src/geophires_x/Economics.py b/src/geophires_x/Economics.py index 75995a32f..cdfbf9967 100644 --- a/src/geophires_x/Economics.py +++ b/src/geophires_x/Economics.py @@ -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", @@ -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( @@ -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 @@ -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", @@ -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( diff --git a/src/geophires_x/Outputs.py b/src/geophires_x/Outputs.py index fba067888..cb04f9776 100644 --- a/src/geophires_x/Outputs.py +++ b/src/geophires_x/Outputs.py @@ -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') diff --git a/src/geophires_x/__init__.py b/src/geophires_x/__init__.py index a35ecdde6..5d5b52e85 100644 --- a/src/geophires_x/__init__.py +++ b/src/geophires_x/__init__.py @@ -1 +1 @@ -__version__ = '3.16.2' +__version__ = '3.17.0' diff --git a/src/geophires_x_schema_generator/geophires-result.json b/src/geophires_x_schema_generator/geophires-result.json index 5d01c1a57..06195a58f 100644 --- a/src/geophires_x_schema_generator/geophires-result.json +++ b/src/geophires_x_schema_generator/geophires-result.json @@ -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)": {}, diff --git a/tests/examples/Fervo_Norbeck_Latimer_2023.out b/tests/examples/Fervo_Norbeck_Latimer_2023.out index f8d443af0..6d438a207 100644 --- a/tests/examples/Fervo_Norbeck_Latimer_2023.out +++ b/tests/examples/Fervo_Norbeck_Latimer_2023.out @@ -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*** @@ -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 @@ -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 diff --git a/tests/examples/Fervo_Project_Red-2026.out b/tests/examples/Fervo_Project_Red-2026.out index 5586c832d..dbdd40b6c 100644 --- a/tests/examples/Fervo_Project_Red-2026.out +++ b/tests/examples/Fervo_Project_Red-2026.out @@ -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*** @@ -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 diff --git a/tests/examples/Wanju_Yuan_Closed-Loop_Geothermal_Energy_Recovery.out b/tests/examples/Wanju_Yuan_Closed-Loop_Geothermal_Energy_Recovery.out index 09da4f1ab..a7c3d4e16 100644 --- a/tests/examples/Wanju_Yuan_Closed-Loop_Geothermal_Energy_Recovery.out +++ b/tests/examples/Wanju_Yuan_Closed-Loop_Geothermal_Energy_Recovery.out @@ -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*** @@ -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 @@ -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 @@ -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 diff --git a/tests/examples/example_SAM-single-owner-PPA-3.out b/tests/examples/example_SAM-single-owner-PPA-3.out index 7f86a1143..2a778b053 100644 --- a/tests/examples/example_SAM-single-owner-PPA-3.out +++ b/tests/examples/example_SAM-single-owner-PPA-3.out @@ -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*** @@ -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 diff --git a/tests/examples/example_SAM-single-owner-PPA-4.out b/tests/examples/example_SAM-single-owner-PPA-4.out index f12a5bc63..336b70a92 100644 --- a/tests/examples/example_SAM-single-owner-PPA-4.out +++ b/tests/examples/example_SAM-single-owner-PPA-4.out @@ -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*** @@ -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 diff --git a/tests/examples/example_SAM-single-owner-PPA-4b.out b/tests/examples/example_SAM-single-owner-PPA-4b.out index 08cad77e8..2e9fdf962 100644 --- a/tests/examples/example_SAM-single-owner-PPA-4b.out +++ b/tests/examples/example_SAM-single-owner-PPA-4b.out @@ -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*** @@ -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 diff --git a/tests/examples/example_SAM-single-owner-PPA.out b/tests/examples/example_SAM-single-owner-PPA.out index bc773e897..aa5b525d7 100644 --- a/tests/examples/example_SAM-single-owner-PPA.out +++ b/tests/examples/example_SAM-single-owner-PPA.out @@ -4,10 +4,10 @@ Simulation Metadata ---------------------- - GEOPHIRES Version: 3.16.1 - Simulation Date: 2026-09-07 - Simulation Time: 07:06 - Calculation Time: 1.235 sec + GEOPHIRES Version: 3.16.2 + Simulation Date: 2026-09-10 + Simulation Time: 08:32 + Calculation Time: 1.208 sec ***SUMMARY OF RESULTS*** @@ -101,9 +101,9 @@ Simulation Metadata Exploration costs: 3.89 MUSD Drilling and completion costs: 69.36 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 diff --git a/tests/examples/example_SBT_Hi_T.out b/tests/examples/example_SBT_Hi_T.out index 6ede81c09..066b100b5 100644 --- a/tests/examples/example_SBT_Hi_T.out +++ b/tests/examples/example_SBT_Hi_T.out @@ -4,10 +4,10 @@ Simulation Metadata ---------------------- - GEOPHIRES Version: 3.11.13 - Simulation Date: 2026-02-22 - Simulation Time: 08:35 - Calculation Time: 5.304 sec + GEOPHIRES Version: 3.16.2 + Simulation Date: 2026-09-10 + Simulation Time: 08:32 + Calculation Time: 7.044 sec ***SUMMARY OF RESULTS*** @@ -74,15 +74,15 @@ The AGS models contain an intrinsic reservoir model that doesn't expose values t ***CAPITAL COSTS (M$)*** + Exploration costs: 0.00 MUSD Drilling and completion costs: 104.87 MUSD - Drilling and completion costs per vertical production well: 6.19 MUSD - Drilling and completion costs per vertical injection well: 6.19 MUSD - Drilling and completion costs per non-vertical section: 7.71 MUSD + Drilling and completion costs per vertical production well: 6.50 MUSD + Drilling and completion costs per vertical injection well: 6.50 MUSD + Drilling and completion costs per non-vertical section: 8.09 MUSD Stimulation costs: 0.00 MUSD Surface power plant costs: 52.73 MUSD Field gathering system costs: 0.97 MUSD Total surface equipment costs: 53.69 MUSD - Exploration costs: 0.00 MUSD Total capital costs: 158.56 MUSD @@ -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.46 MW/(kg/s) Maximum Total Electricity Generation: 17.58 MW Average Total Electricity Generation: 9.73 MW diff --git a/tests/examples/example_SBT_Lo_T.out b/tests/examples/example_SBT_Lo_T.out index dee1016fb..58b9830d3 100644 --- a/tests/examples/example_SBT_Lo_T.out +++ b/tests/examples/example_SBT_Lo_T.out @@ -4,10 +4,10 @@ Simulation Metadata ---------------------- - GEOPHIRES Version: 3.11.13 - Simulation Date: 2026-02-22 - Simulation Time: 08:35 - Calculation Time: 1.298 sec + GEOPHIRES Version: 3.16.2 + Simulation Date: 2026-09-10 + Simulation Time: 08:32 + Calculation Time: 1.334 sec ***SUMMARY OF RESULTS*** @@ -74,15 +74,15 @@ The AGS models contain an intrinsic reservoir model that doesn't expose values t ***CAPITAL COSTS (M$)*** + Exploration costs: 0.00 MUSD Drilling and completion costs: 37.58 MUSD - Drilling and completion costs per vertical production well: 3.28 MUSD - Drilling and completion costs per vertical injection well: 3.28 MUSD - Drilling and completion costs per non-vertical section: 15.51 MUSD + Drilling and completion costs per vertical production well: 3.44 MUSD + Drilling and completion costs per vertical injection well: 3.44 MUSD + Drilling and completion costs per non-vertical section: 16.29 MUSD Stimulation costs: 0.00 MUSD Surface power plant costs: 0.03 MUSD Field gathering system costs: 0.97 MUSD Total surface equipment costs: 1.00 MUSD - Exploration costs: 0.00 MUSD Total capital costs: 38.57 MUSD @@ -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.02 MW/(kg/s) Maximum Total Electricity Generation: 0.00 MW Average Total Electricity Generation: 0.00 MW diff --git a/tests/examples/example_SBT_ULoop.out b/tests/examples/example_SBT_ULoop.out index 958fea0fe..4ff1e0ba1 100644 --- a/tests/examples/example_SBT_ULoop.out +++ b/tests/examples/example_SBT_ULoop.out @@ -4,10 +4,10 @@ Simulation Metadata ---------------------- - GEOPHIRES Version: 3.11.13 - Simulation Date: 2026-02-22 - Simulation Time: 08:27 - Calculation Time: 9.252 sec + GEOPHIRES Version: 3.16.2 + Simulation Date: 2026-09-10 + Simulation Time: 08:32 + Calculation Time: 2.356 sec ***SUMMARY OF RESULTS*** @@ -73,15 +73,15 @@ The AGS models contain an intrinsic reservoir model that doesn't expose values t ***CAPITAL COSTS (M$)*** + Exploration costs: 0.00 MUSD Drilling and completion costs: 6.45 MUSD - Drilling and completion costs per vertical production well: 2.80 MUSD - Drilling and completion costs per vertical injection well: 2.80 MUSD - Drilling and completion costs per non-vertical section: 0.42 MUSD + Drilling and completion costs per vertical production well: 2.94 MUSD + Drilling and completion costs per vertical injection well: 2.94 MUSD + Drilling and completion costs per non-vertical section: 0.44 MUSD Stimulation costs: 0.00 MUSD Surface power plant costs: 1.62 MUSD Field gathering system costs: 0.97 MUSD Total surface equipment costs: 2.59 MUSD - Exploration costs: 0.00 MUSD Total capital costs: 9.04 MUSD @@ -95,7 +95,6 @@ The AGS models contain an intrinsic reservoir model that doesn't expose values t ***SURFACE EQUIPMENT SIMULATION RESULTS*** - Maximum Net Heat Production: 4.13 MW Average Net Heat Production: 0.90 MW Minimum Net Heat Production: 0.74 MW diff --git a/tests/test_geophires_x_client.py b/tests/test_geophires_x_client.py index f85f0f231..b37704334 100644 --- a/tests/test_geophires_x_client.py +++ b/tests/test_geophires_x_client.py @@ -421,10 +421,26 @@ def test_ccus_profile_legacy(self): def test_non_vertical_section_cost(self): result_path = self._get_test_file_path('examples/Fervo_Norbeck_Latimer_2023.out') result = GeophiresXResult(result_path) - entry = result.result['CAPITAL COSTS (M$)']['Drilling and completion costs per non-vertical section'] + cap_costs = result.result['CAPITAL COSTS (M$)'] + entry = cap_costs['Drilling and completion costs per non-vertical section'] self.assertIsNotNone(entry['value']) self.assertEqual(entry['unit'], 'MUSD') + total_wells = ( + result.result['SUMMARY OF RESULTS']['Number of production wells']['value'] + + result.result['SUMMARY OF RESULTS']['Number of injection wells']['value'] + ) + + self.assertAlmostEqual( + cap_costs['Drilling and completion costs']['value'], + ( + cap_costs['Drilling and completion costs per vertical production well']['value'] + + cap_costs['Drilling and completion costs per non-vertical section']['value'] + ) + * total_wells, + places=1, + ) # (test assumes Number of Multilateral Sections = total_wells) + def test_input_hashing(self): input1 = ImmutableGeophiresInputParameters( {'End-Use Option': EndUseOption.DIRECT_USE_HEAT.value, 'Gradient 1': 50, 'Maximum Temperature': 250}