diff --git a/src/geophires_x/Economics.py b/src/geophires_x/Economics.py index 7cc4df223..cf0caa49f 100644 --- a/src/geophires_x/Economics.py +++ b/src/geophires_x/Economics.py @@ -2516,6 +2516,20 @@ def __init__(self, model: Model): PreferredUnits=CurrencyUnit.MDOLLARS, CurrentUnits=CurrencyUnit.MDOLLARS ) + 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, + # TODO tooltip - includes indirect costs + ) + 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, + # TODO tooltip - includes indirect costs + ) 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", UnitType=Units.CURRENCY, @@ -4090,7 +4104,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/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}