From 2db64b87c6cfb3b5b85d81d6e9010a52292aeb46 Mon Sep 17 00:00:00 2001 From: softwareengineerprogrammer <4056124+softwareengineerprogrammer@users.noreply.github.com> Date: Tue, 9 Jun 2026 07:07:03 -0700 Subject: [PATCH 1/8] fix SAM-EM Other Incentives handling. WIP to adjust Other Incentives to be output after OCC --- src/geophires_x/Economics.py | 9 +- src/geophires_x/EconomicsSam.py | 11 ++- src/geophires_x/Outputs.py | 2 +- ...ther-incentives-and-one-time-flat-fees.txt | 98 +++++++++++++++++++ tests/geophires_x_tests/test_economics_sam.py | 12 +++ 5 files changed, 129 insertions(+), 3 deletions(-) create mode 100644 tests/geophires_x_tests/other-incentives-and-one-time-flat-fees.txt diff --git a/src/geophires_x/Economics.py b/src/geophires_x/Economics.py index e9b196401..6b3a666e4 100644 --- a/src/geophires_x/Economics.py +++ b/src/geophires_x/Economics.py @@ -3455,7 +3455,14 @@ def calculate_total_capital_costs(self, model: Model) -> None: self.CCap.value = self.CCap.value - self.RITCValue.value # Add in the FlatLicenseEtc, OtherIncentives, & TotalGrant - self.CCap.value = self.CCap.value + self.FlatLicenseEtc.value - self.OtherIncentives.value - self.TotalGrant.value + # Add in the FlatLicenseEtc, OtherIncentives, & TotalGrant + if self.econmodel.value != EconomicModel.SAM_SINGLE_OWNER_PPA: + self.CCap.value = ( + self.CCap.value + + self.FlatLicenseEtc.value + - self.OtherIncentives.value + - self.TotalGrant.value + ) def calculate_operating_and_maintenance_costs(self, model: Model) -> None: # O&M costs diff --git a/src/geophires_x/EconomicsSam.py b/src/geophires_x/EconomicsSam.py index 1c2d03021..5dd96f9b4 100644 --- a/src/geophires_x/EconomicsSam.py +++ b/src/geophires_x/EconomicsSam.py @@ -238,7 +238,16 @@ def sf(_v: float, num_sig_figs: int = 5) -> float: sam_economics.after_tax_irr.value = sf(_get_after_tax_irr_pct(single_owner, cash_flow_operational_years, model)) sam_economics.project_npv.value = sf(_get_project_npv_musd(single_owner, cash_flow_operational_years, model)) - sam_economics.capex.value = single_owner.Outputs.adjusted_installed_cost * 1e-6 + # Add back ibi_oth_amount (OtherIncentives + TotalGrant) which SAM subtracts from + # total_installed_cost to compute adjusted_installed_cost. Incentives are still applied + # by SAM natively in the cash flow / tax basis calculations; we just don't want them to + # also reduce the reported Total CAPEX (which would be inconsistent with Overnight Capital + # Cost, since CCap is no longer reduced by incentives for SAM Economic Models -- see + # Economics.calculate_capital_costs). + _ibi_oth_usd = ( + (model.economics.OtherIncentives.quantity() + model.economics.TotalGrant.quantity()).to('USD').magnitude + ) + sam_economics.capex.value = (single_owner.Outputs.adjusted_installed_cost + _ibi_oth_usd) * 1e-6 if model.economics.has_royalties: combined_royalties_usd = [ diff --git a/src/geophires_x/Outputs.py b/src/geophires_x/Outputs.py index 9be9b660a..d794738d6 100644 --- a/src/geophires_x/Outputs.py +++ b/src/geophires_x/Outputs.py @@ -531,7 +531,7 @@ def PrintOutputs(self, model: Model): additional_capex_modifiers: list[tuple[Parameter, int]] = [ (econ.FlatLicenseEtc, 1), - (econ.OtherIncentives, -1), + (econ.OtherIncentives, -1), # FIXME WIP display after OCC instead of before (econ.TotalGrant, -1) ] for additional_capex_modifier_entry in additional_capex_modifiers: diff --git a/tests/geophires_x_tests/other-incentives-and-one-time-flat-fees.txt b/tests/geophires_x_tests/other-incentives-and-one-time-flat-fees.txt new file mode 100644 index 000000000..1a128cd40 --- /dev/null +++ b/tests/geophires_x_tests/other-incentives-and-one-time-flat-fees.txt @@ -0,0 +1,98 @@ +# *** ECONOMIC/FINANCIAL PARAMETERS *** +# ************************************* + +Economic Model, 5, -- SAM Single Owner PPA + +Starting Electricity Sale Price, 0.12 +Electricity Escalation Rate Per Year, 0.00057 +Ending Electricity Sale Price, 0.16 +Electricity Escalation Start Year, 1 + +Discount Rate, 0.12 +Royalty Holder Discount Rate, 0.10 + +Fraction of Investment in Bonds, 0.85 +Inflated Bond Interest Rate, 0.07 + +Inflation Rate, 0.027 + +Construction Years, 2 +Construction CAPEX Schedule, 0.01,0.01,0.03,0.05,0.2,0.3,0.4 +Inflated Bond Interest Rate During Construction, 0.105 + +Investment Tax Credit Rate, 0.3 +Property Tax Rate, 0.0055 +Other Incentives, 5, -- Triggers the double-counting bug in combination with SAM-EM +One-time Flat License Fees Etc, 1.5 + +Capital Cost for Power Plant for Electricity Generation, 2000 +Field Gathering System Capital Cost Adjustment Factor, 0.54 + +Reservoir Stimulation Capital Cost per Injection Well, 0 +# Production wells are not stimulated (parameter intentionally omitted) + +# *** SURFACE & SUBSURFACE TECHNICAL PARAMETERS *** +# ************************************************* + +End-Use Option, 1, -- Electricity +Power Plant Type, 2, -- Supercritical ORC +Plant Lifetime, 20 + +Injectivity Index, 12.8 +Productivity Index, 4.6 + +Reservoir Model, 4, -- ANNUAL_PERCENTAGE +Drawdown Parameter Schedule, 0.003,0.001,0.0 * 10,0.001 * 3,0.002 * 3,0.003 * 3,0.004 * 3,0.005 * 4,0.006 + +Maximum Drawdown, 1 + +Reservoir Volume Option, 1, -- FRAC_NUM_SEP (geometry used to size HSA volume; no real fractures) +Number of Fractures per Stimulated Well, 1 +Fracture Shape, 4, -- RECTANGULAR +Fracture Width, 3300 +Fracture Height, 40 +Fracture Separation, 960 + +Production Flow Rate per Well, 107 + +Number of Injection Wells per Production Well, 0.75 + +Production Well Diameter, 8.535 +Injection Well Diameter, 8.535 + +Ramey Production Wellbore Model, True +Injection Temperature, 50 + +Water Loss Fraction, 0.05 + +Utilization Factor, 0.913 +Plant Outlet Pressure, 9.65 bar +Production Wellhead Pressure, 10.34 bar +Circulation Pump Efficiency, 0.80 + +Well Geometry Configuration, 4, -- L: Vertical section plus lateral(s) + +Number of Production Wells, 8 +Number of Multilateral Sections, 8 +Nonvertical Length per Multilateral Section, 1600 +All-in Nonvertical Drilling Costs, 2053.9081603055893 +Combined Income Tax Rate, 0.2448 +Well Drilling Cost Correlation, 16 +Royalty Rate Schedule, 0.08 +Bond Financing Start Year, -1 + +# *** SCENARIO-SPECIFIC RESERVOIR PARAMETERS *** +# ********************************************** +Gradient 1, 43.4 +Reservoir Depth, 2.8 +Surface Temperature, 10.5 +Ambient Temperature, 3.0 +Reservoir Heat Capacity, 1200.0 +Reservoir Density, 2500.0 +Reservoir Thermal Conductivity, 3.0 +Reservoir Porosity, 0.17 + +# *** SIMULATION PARAMETERS *** +# ***************************** +Time steps per year, 12 +Print Output to Console, 0 diff --git a/tests/geophires_x_tests/test_economics_sam.py b/tests/geophires_x_tests/test_economics_sam.py index 3e218bb1a..b0199401f 100644 --- a/tests/geophires_x_tests/test_economics_sam.py +++ b/tests/geophires_x_tests/test_economics_sam.py @@ -1423,6 +1423,18 @@ def _itc_output_q(r: GeophiresXResult) -> dict[str, float]: _itc_output_q(r_fed_itc_rate_and_state_itc_amount), ) + def test_other_incentives_and_one_time_flat_fees(self): + r: GeophiresXResult = GeophiresXClient().get_geophires_result( + ImmutableGeophiresInputParameters( + from_file_path=self._get_test_file_path('other-incentives-and-one-time-flat-fees.txt'), + ) + ) + + self.assertGreater( + r.result['CAPITAL COSTS (M$)']['Total CAPEX']['value'], + r.result['CAPITAL COSTS (M$)']['Overnight Capital Cost']['value'], + ) + @staticmethod def _new_model( input_file: Path, From 94edf5dbc52cc22d5751b543dcd232e03a62db1e Mon Sep 17 00:00:00 2001 From: softwareengineerprogrammer <4056124+softwareengineerprogrammer@users.noreply.github.com> Date: Wed, 10 Jun 2026 08:53:23 -0700 Subject: [PATCH 2/8] retain flat license addition to OCC for SAM-EM --- src/geophires_x/Economics.py | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/src/geophires_x/Economics.py b/src/geophires_x/Economics.py index 6b3a666e4..372245b23 100644 --- a/src/geophires_x/Economics.py +++ b/src/geophires_x/Economics.py @@ -3454,14 +3454,14 @@ def calculate_total_capital_costs(self, model: Model) -> None: self.RITCValue.value = self.RITC.value * self.CCap.value self.CCap.value = self.CCap.value - self.RITCValue.value - # Add in the FlatLicenseEtc, OtherIncentives, & TotalGrant - # Add in the FlatLicenseEtc, OtherIncentives, & TotalGrant + self.CCap.value += self.FlatLicenseEtc.value + if self.econmodel.value != EconomicModel.SAM_SINGLE_OWNER_PPA: + # SAM-EM parameterizes these as ibi_oth_amount self.CCap.value = ( - self.CCap.value - + self.FlatLicenseEtc.value - - self.OtherIncentives.value - - self.TotalGrant.value + self.CCap.value + - self.OtherIncentives.value + - self.TotalGrant.value ) def calculate_operating_and_maintenance_costs(self, model: Model) -> None: From be58e7ea8bf5bc31ae11f9ed29ccc2f947a6ff30 Mon Sep 17 00:00:00 2001 From: softwareengineerprogrammer <4056124+softwareengineerprogrammer@users.noreply.github.com> Date: Wed, 10 Jun 2026 09:23:08 -0700 Subject: [PATCH 3/8] mark TODO to test One-time Grants Etc --- tests/geophires_x_tests/test_economics_sam.py | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/tests/geophires_x_tests/test_economics_sam.py b/tests/geophires_x_tests/test_economics_sam.py index b0199401f..094dcc509 100644 --- a/tests/geophires_x_tests/test_economics_sam.py +++ b/tests/geophires_x_tests/test_economics_sam.py @@ -1424,9 +1424,14 @@ def _itc_output_q(r: GeophiresXResult) -> dict[str, float]: ) def test_other_incentives_and_one_time_flat_fees(self): + # TODO test 'One-time Grants Etc' + r: GeophiresXResult = GeophiresXClient().get_geophires_result( ImmutableGeophiresInputParameters( from_file_path=self._get_test_file_path('other-incentives-and-one-time-flat-fees.txt'), + params={ + 'Print Output to Console': True, + }, ) ) From ce728efe35d4685f27c473738d2634d980ac4f45 Mon Sep 17 00:00:00 2001 From: softwareengineerprogrammer <4056124+softwareengineerprogrammer@users.noreply.github.com> Date: Wed, 10 Jun 2026 09:37:02 -0700 Subject: [PATCH 4/8] mark FIXME WIP verify OCC -> Total CAPEX sum, accounting for incentives and grants --- tests/geophires_x_tests/test_economics_sam.py | 2 ++ 1 file changed, 2 insertions(+) diff --git a/tests/geophires_x_tests/test_economics_sam.py b/tests/geophires_x_tests/test_economics_sam.py index 094dcc509..8c62865dd 100644 --- a/tests/geophires_x_tests/test_economics_sam.py +++ b/tests/geophires_x_tests/test_economics_sam.py @@ -1440,6 +1440,8 @@ def test_other_incentives_and_one_time_flat_fees(self): r.result['CAPITAL COSTS (M$)']['Overnight Capital Cost']['value'], ) + # FIXME WIP verify OCC -> Total CAPEX sum, accounting for incentives and grants + @staticmethod def _new_model( input_file: Path, From 8110eebfdb3633cf64e3b873dae6bea3a7908c12 Mon Sep 17 00:00:00 2001 From: softwareengineerprogrammer <4056124+softwareengineerprogrammer@users.noreply.github.com> Date: Wed, 10 Jun 2026 09:57:36 -0700 Subject: [PATCH 5/8] display Other Incentives and Total Grants as Total CAPEX modifiers (not OCC modifiers). update SAM-EM docs. --- docs/SAM-Economic-Models.md | 2 +- ...duction-temperature-data-vs-modeling-1.png | Bin 368346 -> 368346 bytes ...duction-temperature-data-vs-modeling-2.png | Bin 339429 -> 339429 bytes ...temperature-data-vs-modeling-long-term.png | Bin 305486 -> 305486 bytes ...base_simulation-production-temperature.png | Bin 42993 -> 39192 bytes src/geophires_x/EconomicsSam.py | 7 +-- src/geophires_x/Outputs.py | 40 ++++++++++++------ src/geophires_x_client/geophires_x_result.py | 4 +- tests/geophires_x_tests/test_economics_sam.py | 38 ++++++++++++++--- 9 files changed, 67 insertions(+), 24 deletions(-) diff --git a/docs/SAM-Economic-Models.md b/docs/SAM-Economic-Models.md index 4b90f28a4..3c08b2f92 100644 --- a/docs/SAM-Economic-Models.md +++ b/docs/SAM-Economic-Models.md @@ -20,7 +20,7 @@ The following table describes how GEOPHIRES parameters are transformed into SAM | `Maximum Total Electricity Generation` | Generation Profile | `Nameplate capacity` | `Singleowner` | `system_capacity` | .. N/A | | `Utilization Factor` | Generation Profile | `Nominal capacity factor` | `Singleowner` | `user_capacity_factor` | .. N/A | | `Net Electricity Generation` | AC Degradation | `Annual AC degradation rate` schedule | `Utilityrate5` | `degradation` | Percentage difference of each year's `Net Electricity Generation` from `Maximum Total Electricity Generation` is input as SAM as the degradation rate schedule in order to match SAM's generation profile to GEOPHIRES | -| `Total CAPEX` | Installation Costs | `Total Installed Cost` | `Singleowner` | `total_installed_cost` | `Total CAPEX` = `Overnight Capital Cost` + `Inflation costs during construction` + `Interest during construction` | +| `Total CAPEX` | Installation Costs | `Total Installed Cost` | `Singleowner` | `total_installed_cost` | `Total CAPEX` = `Overnight Capital Cost` + `Inflation costs during construction` + `Interest during construction` - `Other Incentives` - `One-time Grants Etc` | | `Total O&M Cost`, `Inflation Rate` | Operating Costs | `Fixed operating cost`, `Escalation rate` set to `Inflation Rate` × -1 | `Singleowner` | `om_fixed`, `om_fixed_escal` | .. N/A | | `Royalty Supplemental Payments` | Operating Costs | `Fixed operating cost` schedule | `Singleowner` | `om_fixed` | Royalty supplemental payments during the operational phase are added to the fixed operating cost according to the schedule. | | `Royalty Rate`, `Royalty Rate Escalation`, `Royalty Rate Escalation Start Year`, `Royalty Rate Maximum`; `Royalty Rate Schedule` | Operating Costs | `Variable operating cost` | `Singleowner` | `om_production` | The royalty is modeled as a tax-deductible variable operating expense. GEOPHIRES uses the provided schedule, or calculates a schedule of $/MWh values based on the PPA price and Royalty Rate for each year, with optional escalation, escalation start year, and cap (maximum). This ensures the total annual expense in SAM accurately matches the royalty payment due on gross revenue. | diff --git a/docs/_images/fervo_project_red-2026_production-temperature-data-vs-modeling-1.png b/docs/_images/fervo_project_red-2026_production-temperature-data-vs-modeling-1.png index efdf85f5ce3d0eb88a7cf279e99d4d971d692312..a8bab71b30e5d75aedb0548cfa138cef5cad7d2c 100644 GIT binary patch delta 58 zcmcb$SM1hau?e1XmO2UH2DJmm?d~Thkd^)0tY+ OnOoCYwx+Wd&jSFRUKQ&A delta 58 zcmcb$SM1hau?e1X7CH(UB_##LR{Hw6i6sR&`6W4-NqYH3>G}twOV2f?x27|;rZcss OGqH2DJmm?d~Thkd^)0tY+ OnOoCYwx+Yz=>h<*1{Ko) delta 58 zcmaEQTjc3&kqMr17CH(UB_##LR{Hw6i6sR&`6W4-NqYH3>G}twOV2f?x27|;rZcss OGqH2DJmm?d~Thkd^)0tY+ LnYX61JYN9-VBQsi delta 55 zcmX?iN$A`qp$VRH7CH(UB_##LR{Hw6i6sR&`6W4-NqYH3>G}twOV2f?x27|;rZcss LGjC02dA| diff --git a/docs/_images/singh_et_al_base_simulation-production-temperature.png b/docs/_images/singh_et_al_base_simulation-production-temperature.png index 92368c742bfc4724c760cf262d71468e44f21691..4cd7c51fb5365b5e13b5bd03e0612d1ca9e7de88 100644 GIT binary patch literal 39192 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 gKcXq%=1HUDvbSmn38h}Rf&NxSNkb8T#LVx%0AvCgO#lD@ literal 42993 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 diff --git a/src/geophires_x/EconomicsSam.py b/src/geophires_x/EconomicsSam.py index 5dd96f9b4..366e01ece 100644 --- a/src/geophires_x/EconomicsSam.py +++ b/src/geophires_x/EconomicsSam.py @@ -238,12 +238,13 @@ def sf(_v: float, num_sig_figs: int = 5) -> float: sam_economics.after_tax_irr.value = sf(_get_after_tax_irr_pct(single_owner, cash_flow_operational_years, model)) sam_economics.project_npv.value = sf(_get_project_npv_musd(single_owner, cash_flow_operational_years, model)) + # Add back ibi_oth_amount (OtherIncentives + TotalGrant) which SAM subtracts from # total_installed_cost to compute adjusted_installed_cost. Incentives are still applied - # by SAM natively in the cash flow / tax basis calculations; we just don't want them to + # by SAM natively in the cash flow/tax basis calculations; we just don't want them to # also reduce the reported Total CAPEX (which would be inconsistent with Overnight Capital - # Cost, since CCap is no longer reduced by incentives for SAM Economic Models -- see - # Economics.calculate_capital_costs). + # Cost, since CCap is not reduced by incentives for SAM Economic Models - see + # Economics.calculate_total_capital_costs). _ibi_oth_usd = ( (model.economics.OtherIncentives.quantity() + model.economics.TotalGrant.quantity()).to('USD').magnitude ) diff --git a/src/geophires_x/Outputs.py b/src/geophires_x/Outputs.py index d794738d6..da8934884 100644 --- a/src/geophires_x/Outputs.py +++ b/src/geophires_x/Outputs.py @@ -529,21 +529,28 @@ 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), # FIXME WIP display after OCC instead of before - (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] + def _render_additional_capital_cost_modifiers(additional_modifiers: list[tuple[Parameter, int]]) -> None: + for additional_modifier_entry in additional_modifiers: + additional_modifier_param: Parameter = additional_modifier_entry[0] + additional_modifier_multiplier: int = additional_modifier_entry[1] - acm_render_value = additional_capex_modifier_param.value * additional_capex_modifier_multiplier + am_render_value = additional_modifier_param.value * additional_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 additional_modifier_param.Provided: + am_label = Outputs._field_label(additional_modifier_param.Name, 47) + f.write( + f' {am_label}{am_render_value:10.2f} {additional_modifier_param.CurrentUnits.value}\n') + + additional_occ_modifiers: list[tuple[Parameter, int]] = [ + (econ.FlatLicenseEtc, 1), + ] + if not is_sam_econ_model: + # For SAM-EM these modify Total CAPEX, not OCC + additional_occ_modifiers.extend([ + (econ.OtherIncentives, -1), + (econ.TotalGrant, -1) + ]) + _render_additional_capital_cost_modifiers(additional_occ_modifiers) if is_sam_econ_model and econ.DoAddOnCalculations.value: # Non-SAM econ models print this in Extended Economics profile @@ -571,6 +578,13 @@ def PrintOutputs(self, model: Model): f.write( f' {idc_label}{econ.interest_during_construction.value:10.2f} {econ.interest_during_construction.CurrentUnits.value}\n') + additional_total_capex_modifiers: list[tuple[Parameter, int]] = [ + (econ.OtherIncentives, -1), + (econ.TotalGrant, -1) + ] if is_sam_econ_model else [] + + _render_additional_capital_cost_modifiers(additional_total_capex_modifiers) + 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') diff --git a/src/geophires_x_client/geophires_x_result.py b/src/geophires_x_client/geophires_x_result.py index 7ed141cc5..c2f6eb03d 100644 --- a/src/geophires_x_client/geophires_x_result.py +++ b/src/geophires_x_client/geophires_x_result.py @@ -275,14 +275,14 @@ class GeophiresXResult: 'Total surface equipment 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', + 'Other Incentives', + 'One-time Grants Etc', 'Total capital costs', 'Annualized capital costs', # AGS/CLGS diff --git a/tests/geophires_x_tests/test_economics_sam.py b/tests/geophires_x_tests/test_economics_sam.py index 8c62865dd..5757f0931 100644 --- a/tests/geophires_x_tests/test_economics_sam.py +++ b/tests/geophires_x_tests/test_economics_sam.py @@ -1435,12 +1435,40 @@ def test_other_incentives_and_one_time_flat_fees(self): ) ) - self.assertGreater( - r.result['CAPITAL COSTS (M$)']['Total CAPEX']['value'], - r.result['CAPITAL COSTS (M$)']['Overnight Capital Cost']['value'], - ) + with open(r.output_file_path, encoding='utf-8') as f: + lines = f.readlines() + + is_parsing = False + occ_val = 0.0 + total_capex_val = 0.0 + intermediate_sum = 0.0 + + for line in lines: + clean_line = line.strip() + + if clean_line.startswith('Overnight Capital Cost:'): + is_parsing = True + occ_val = float(clean_line.split(':')[1].replace('MUSD', '').strip()) + continue + + if is_parsing: + if clean_line.startswith('Total CAPEX:'): + total_capex_val = float(clean_line.split(':')[1].replace('MUSD', '').strip()) + break - # FIXME WIP verify OCC -> Total CAPEX sum, accounting for incentives and grants + if ':' in clean_line: + val_str = clean_line.split(':')[1].replace('MUSD', '').strip() + try: + intermediate_sum += float(val_str) + except ValueError: + pass + + self.assertAlmostEqual( + occ_val + intermediate_sum, + total_capex_val, + places=2, + msg='Total CAPEX should be the sum of OCC and all intermediate items (e.g., inflation, interest, incentives)', + ) @staticmethod def _new_model( From 3a181930a753a0b440897969c4f1e2497fa18cb5 Mon Sep 17 00:00:00 2001 From: softwareengineerprogrammer <4056124+softwareengineerprogrammer@users.noreply.github.com> Date: Wed, 10 Jun 2026 10:23:12 -0700 Subject: [PATCH 6/8] Add One-time Grants Etc coverage --- ...ther-incentives-and-one-time-flat-fees.txt | 49 +++++----- tests/geophires_x_tests/test_economics_sam.py | 94 ++++++++++--------- 2 files changed, 76 insertions(+), 67 deletions(-) diff --git a/tests/geophires_x_tests/other-incentives-and-one-time-flat-fees.txt b/tests/geophires_x_tests/other-incentives-and-one-time-flat-fees.txt index 1a128cd40..e2d65c0b7 100644 --- a/tests/geophires_x_tests/other-incentives-and-one-time-flat-fees.txt +++ b/tests/geophires_x_tests/other-incentives-and-one-time-flat-fees.txt @@ -38,59 +38,58 @@ End-Use Option, 1, -- Electricity Power Plant Type, 2, -- Supercritical ORC Plant Lifetime, 20 -Injectivity Index, 12.8 -Productivity Index, 4.6 +Injectivity Index, 10 +Productivity Index, 5 Reservoir Model, 4, -- ANNUAL_PERCENTAGE -Drawdown Parameter Schedule, 0.003,0.001,0.0 * 10,0.001 * 3,0.002 * 3,0.003 * 3,0.004 * 3,0.005 * 4,0.006 +Drawdown Parameter Schedule, 0.001 * 10, 0.01 Maximum Drawdown, 1 -Reservoir Volume Option, 1, -- FRAC_NUM_SEP (geometry used to size HSA volume; no real fractures) -Number of Fractures per Stimulated Well, 1 +Reservoir Volume Option, 1, -- FRAC_NUM_SEP +Number of Fractures per Stimulated Well, 5 Fracture Shape, 4, -- RECTANGULAR -Fracture Width, 3300 -Fracture Height, 40 -Fracture Separation, 960 +Fracture Width, 500 +Fracture Height, 100 +Fracture Separation, 250 -Production Flow Rate per Well, 107 +Production Flow Rate per Well, 75 -Number of Injection Wells per Production Well, 0.75 +Number of Injection Wells per Production Well, 0.5 Production Well Diameter, 8.535 Injection Well Diameter, 8.535 Ramey Production Wellbore Model, True -Injection Temperature, 50 +Injection Temperature, 54 Water Loss Fraction, 0.05 Utilization Factor, 0.913 -Plant Outlet Pressure, 9.65 bar -Production Wellhead Pressure, 10.34 bar +Plant Outlet Pressure, 9 bar +Production Wellhead Pressure, 11 bar Circulation Pump Efficiency, 0.80 Well Geometry Configuration, 4, -- L: Vertical section plus lateral(s) -Number of Production Wells, 8 +Number of Production Wells, 10 Number of Multilateral Sections, 8 -Nonvertical Length per Multilateral Section, 1600 -All-in Nonvertical Drilling Costs, 2053.9081603055893 -Combined Income Tax Rate, 0.2448 +Nonvertical Length per Multilateral Section, 1500 +All-in Nonvertical Drilling Costs, 1900 +Combined Income Tax Rate, 0.25 Well Drilling Cost Correlation, 16 -Royalty Rate Schedule, 0.08 +Royalty Rate Schedule, 0.03 Bond Financing Start Year, -1 # *** SCENARIO-SPECIFIC RESERVOIR PARAMETERS *** # ********************************************** -Gradient 1, 43.4 -Reservoir Depth, 2.8 -Surface Temperature, 10.5 -Ambient Temperature, 3.0 -Reservoir Heat Capacity, 1200.0 +Gradient 1, 45 +Reservoir Depth, 3 +Surface Temperature, 10 +Ambient Temperature, 5 +Reservoir Heat Capacity, 1300.0 Reservoir Density, 2500.0 -Reservoir Thermal Conductivity, 3.0 -Reservoir Porosity, 0.17 +Reservoir Thermal Conductivity, 2.9 # *** SIMULATION PARAMETERS *** # ***************************** diff --git a/tests/geophires_x_tests/test_economics_sam.py b/tests/geophires_x_tests/test_economics_sam.py index 5757f0931..11bdb5b15 100644 --- a/tests/geophires_x_tests/test_economics_sam.py +++ b/tests/geophires_x_tests/test_economics_sam.py @@ -1423,51 +1423,61 @@ def _itc_output_q(r: GeophiresXResult) -> dict[str, float]: _itc_output_q(r_fed_itc_rate_and_state_itc_amount), ) - def test_other_incentives_and_one_time_flat_fees(self): - # TODO test 'One-time Grants Etc' - - r: GeophiresXResult = GeophiresXClient().get_geophires_result( - ImmutableGeophiresInputParameters( - from_file_path=self._get_test_file_path('other-incentives-and-one-time-flat-fees.txt'), - params={ - 'Print Output to Console': True, - }, + def test_other_incentives_one_time_flat_fees_and_total_grants(self): + def _assert_occ_plus_modifiers_equals_total_capex(_r: GeophiresXResult) -> None: + with open(_r.output_file_path, encoding='utf-8') as f: + lines = f.readlines() + + is_parsing = False + occ_val = 0.0 + total_capex_val = 0.0 + intermediate_sum = 0.0 + + for line in lines: + clean_line = line.strip() + + if clean_line.startswith('Overnight Capital Cost:'): + is_parsing = True + occ_val = float(clean_line.split(':')[1].replace('MUSD', '').strip()) + continue + + if is_parsing: + if clean_line.startswith('Total CAPEX:'): + total_capex_val = float(clean_line.split(':')[1].replace('MUSD', '').strip()) + break + + if ':' in clean_line: + val_str = clean_line.split(':')[1].replace('MUSD', '').strip() + try: + intermediate_sum += float(val_str) + except ValueError: + pass + + self.assertAlmostEqual( + occ_val + intermediate_sum, + total_capex_val, + places=2, + msg='Total CAPEX should be the sum of OCC and all intermediate items (e.g., inflation, interest, incentives)', ) - ) - - with open(r.output_file_path, encoding='utf-8') as f: - lines = f.readlines() - - is_parsing = False - occ_val = 0.0 - total_capex_val = 0.0 - intermediate_sum = 0.0 - - for line in lines: - clean_line = line.strip() - if clean_line.startswith('Overnight Capital Cost:'): - is_parsing = True - occ_val = float(clean_line.split(':')[1].replace('MUSD', '').strip()) - continue - - if is_parsing: - if clean_line.startswith('Total CAPEX:'): - total_capex_val = float(clean_line.split(':')[1].replace('MUSD', '').strip()) - break - - if ':' in clean_line: - val_str = clean_line.split(':')[1].replace('MUSD', '').strip() - try: - intermediate_sum += float(val_str) - except ValueError: - pass + _assert_occ_plus_modifiers_equals_total_capex( + GeophiresXClient().get_geophires_result( + ImmutableGeophiresInputParameters( + from_file_path=self._get_test_file_path('other-incentives-and-one-time-flat-fees.txt'), + params={ + # 'Print Output to Console': True, + }, + ) + ) + ) - self.assertAlmostEqual( - occ_val + intermediate_sum, - total_capex_val, - places=2, - msg='Total CAPEX should be the sum of OCC and all intermediate items (e.g., inflation, interest, incentives)', + _assert_occ_plus_modifiers_equals_total_capex( + GeophiresXClient().get_geophires_result( + ImmutableGeophiresInputParameters( + from_file_path=self._get_test_file_path('other-incentives-and-one-time-flat-fees.txt'), + params={'Print Output to Console': True, 'One-time Grants Etc': 50}, + ) + ) ) @staticmethod From b165607adfc42202ad72d7c2980a3f74fb1da13d Mon Sep 17 00:00:00 2001 From: softwareengineerprogrammer <4056124+softwareengineerprogrammer@users.noreply.github.com> Date: Wed, 10 Jun 2026 10:30:14 -0700 Subject: [PATCH 7/8] =?UTF-8?q?Bump=20version:=203.13.15=20=E2=86=92=203.1?= =?UTF-8?q?4.0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .bumpversion.cfg | 2 +- .cookiecutterrc | 2 +- README.rst | 4 ++-- docs/conf.py | 2 +- setup.py | 2 +- src/geophires_x/__init__.py | 2 +- 6 files changed, 7 insertions(+), 7 deletions(-) diff --git a/.bumpversion.cfg b/.bumpversion.cfg index 673162efc..4cacd668c 100644 --- a/.bumpversion.cfg +++ b/.bumpversion.cfg @@ -1,5 +1,5 @@ [bumpversion] -current_version = 3.13.15 +current_version = 3.14.0 commit = True tag = True diff --git a/.cookiecutterrc b/.cookiecutterrc index 26e648a6a..a0a81af09 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.13.15 + version: 3.14.0 version_manager: "bump2version" website: "https://github.com/NREL" year_from: "2023" diff --git a/README.rst b/README.rst index b11200981..23ef84f00 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.13.15.svg +.. |commits-since| image:: https://img.shields.io/github/commits-since/softwareengineerprogrammer/GEOPHIRES-X/v3.14.0.svg :alt: Commits since latest release - :target: https://github.com/softwareengineerprogrammer/GEOPHIRES-X/compare/v3.13.15...main + :target: https://github.com/softwareengineerprogrammer/GEOPHIRES-X/compare/v3.14.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 2bba65b0a..3f145048c 100644 --- a/docs/conf.py +++ b/docs/conf.py @@ -18,7 +18,7 @@ year = '2025' author = 'NREL' copyright = f'{year}, {author}' -version = release = '3.13.15' +version = release = '3.14.0' pygments_style = 'trac' templates_path = ['./templates'] diff --git a/setup.py b/setup.py index 9ae7eb96f..809e2a79d 100755 --- a/setup.py +++ b/setup.py @@ -13,7 +13,7 @@ def read(*names, **kwargs): setup( name='geophires-x', - version='3.13.15', + version='3.14.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/__init__.py b/src/geophires_x/__init__.py index 29acebe52..6e9b3ce48 100644 --- a/src/geophires_x/__init__.py +++ b/src/geophires_x/__init__.py @@ -1 +1 @@ -__version__ = '3.13.15' +__version__ = '3.14.0' From c1a54478e4b67e8a03216744813896495bd1e7f7 Mon Sep 17 00:00:00 2001 From: softwareengineerprogrammer <4056124+softwareengineerprogrammer@users.noreply.github.com> Date: Wed, 10 Jun 2026 10:34:01 -0700 Subject: [PATCH 8/8] v3.14 CHANGELOG entry --- CHANGELOG.rst | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/CHANGELOG.rst b/CHANGELOG.rst index 18585e4b6..2355e955f 100644 --- a/CHANGELOG.rst +++ b/CHANGELOG.rst @@ -5,10 +5,14 @@ Changelog GEOPHIRES v3 (2023-2026) ------------------------ -3.13 +3.14 ^^^^ -3.13.15: `Well integrity parameterization to trigger redrilling; Drawdown Parameter Schedule; Input params CSV unit and comment parsing; State ITC Amount `__ | `release `__ +3.14: `Well integrity parameterization to trigger redrilling; Drawdown Parameter Schedule; Input params CSV unit and comment parsing; State ITC Amount; SAM-EM Other Incentives and One-time Grants fix `__ | `release `__ | **Changed:** SAM Economic Models inputs with Other Incentives and One-time Grants Etc parameters now calculate Overnight Capital Cost and Total CAPEX correctly. See `the tracking issue `__ for details. + + +3.13 +^^^^ 3.13.9: `Add hip-ra-x-result.json schema and HipRaXResult `__ | `release `__