From af79e24011eb57f20db5dbead0fbd1f9c72422cb Mon Sep 17 00:00:00 2001 From: softwareengineerprogrammer <4056124+softwareengineerprogrammer@users.noreply.github.com> Date: Sun, 6 Sep 2026 09:19:56 -0700 Subject: [PATCH 1/5] Add Number of Multilateral Sections per Vertical Section parameter --- src/geophires_x/AGSWellBores.py | 9 +++ src/geophires_x/WellBores.py | 54 +++++++++++++++ .../geophires-request.json | 9 +++ tests/geophires_x_tests/test_well_bores.py | 66 +++++++++++++++++++ 4 files changed, 138 insertions(+) diff --git a/src/geophires_x/AGSWellBores.py b/src/geophires_x/AGSWellBores.py index 8998e2b3c..1e8decf6e 100644 --- a/src/geophires_x/AGSWellBores.py +++ b/src/geophires_x/AGSWellBores.py @@ -564,6 +564,15 @@ def read_parameters(self, model: Model) -> None: :return: None """ model.logger.info(f'Init {str(__class__)}: {sys._getframe().f_code.co_name}') + + # AGS/CLGS models do not model laterals on a per-vertical-section basis, so the total number of multilateral + # sections may not be derived from a per-vertical-section value. + if self.numnonverticalsections_per_vertical_section.Name in model.InputParameters: + msg = (f'{self.numnonverticalsections_per_vertical_section.Name} is not supported by AGS/CLGS models. ' + f'Provide {self.numnonverticalsections.Name} instead.') + model.logger.error(msg) + raise NotImplementedError(msg) + super().read_parameters(model) # read the default parameters # if we call super, we don't need to deal with setting the parameters here, just deal with the special cases # for the variables in this class because the call to the super.read_parameters will set all the variables, diff --git a/src/geophires_x/WellBores.py b/src/geophires_x/WellBores.py index 91155e9bd..6f557483a 100644 --- a/src/geophires_x/WellBores.py +++ b/src/geophires_x/WellBores.py @@ -1146,6 +1146,26 @@ def __init__(self, model: Model): 'per well should set Number of Multilateral Sections = 2 * 2 * 3 = 12.' ) + # noinspection SpellCheckingInspection + self.numnonverticalsections_per_vertical_section = self.ParameterDict[ + self.numnonverticalsections_per_vertical_section.Name] = intParameter( + "Number of Multilateral Sections per Vertical Section", + DefaultValue=0, + AllowableRange=list(range(0, max_allowed_total_wells * max_allowed_laterals_per_well_when_max_wells, 1)), + UnitType=Units.NONE, + ErrMessage="assume default for Number of Multilateral Sections per Vertical Section (0)", + ToolTipText=f'Number of nonvertical wellbore sections (aka laterals or horizontals) per vertical ' + f'section, where the number of vertical sections is the total number of wells ' + f'({self.nprod.Name} + {self.ninj.Name}). Pass this parameter instead of ' + f'{self.numnonverticalsections.Name} to define laterals on a per-well basis - the total ' + f'number of multilateral sections for the project is calculated as this value multiplied by ' + f'the number of vertical sections. For example, a project with 2 injectors and 2 producers ' + f'with 3 laterals per well may set Number of Multilateral Sections per Vertical Section = 3, ' + f'which is equivalent to {self.numnonverticalsections.Name} = 2 * 2 * 3 = 12. ' + f'May not be provided in combination with {self.numnonverticalsections.Name}. ' + f'Not supported by AGS/CLGS models.' + ) + self.NonverticalsCased = self.ParameterDict[self.NonverticalsCased.Name] = boolParameter( "Multilaterals Cased", DefaultValue=False, @@ -1439,6 +1459,7 @@ def read_parameters(self, model: Model) -> None: coerce_int_params_to_enum_values(self.ParameterDict) self._set_well_counts_from_parameters(model) + self._set_multilateral_section_count_from_parameters(model) model.logger.info(f"read parameters complete {self.__class__.__name__}: {__name__}") @@ -1468,6 +1489,39 @@ def _raise_incompatible_param_error(incompatible_param: intParameter, with_param self.ninj.value = int(math.ceil(self.nprod.value * self.ninj_per_production_well.value)) + def _set_multilateral_section_count_from_parameters(self, model: Model): + """ + Calculates the total number of multilateral sections from the number of multilateral sections per vertical + section, if the latter is provided. Must be called after well counts have been set. + """ + sections_per_vertical_section = self.numnonverticalsections_per_vertical_section + if not sections_per_vertical_section.Provided: + return + + if self.numnonverticalsections.Provided: + msg = (f'{self.numnonverticalsections.Name} may not be provided when ' + f'{sections_per_vertical_section.Name} is provided.') + model.logger.error(msg) + raise ValueError(msg) + + vertical_sections = self.nprod.value + self.ninj.value + total_sections = sections_per_vertical_section.value * vertical_sections + max_total_sections = max(self.numnonverticalsections.AllowableRange) + if total_sections > max_total_sections: + msg = (f'Calculated {self.numnonverticalsections.Name} ({total_sections}) exceeds the maximum allowable ' + f'value ({max_total_sections}) ' + f'({sections_per_vertical_section.Name}: {sections_per_vertical_section.value}, ' + f'number of vertical sections: {vertical_sections}).') + model.logger.error(msg) + raise ValueError(msg) + + self.numnonverticalsections.value = total_sections + self.numnonverticalsections.Provided = True + + model.logger.info(f'Calculated {self.numnonverticalsections.Name} ({total_sections}) from ' + f'{sections_per_vertical_section.Name} ({sections_per_vertical_section.value}) and ' + f'number of vertical sections ({vertical_sections}).') + def Calculate(self, model: Model) -> None: """ The Calculate function is where all the calculations are done. diff --git a/src/geophires_x_schema_generator/geophires-request.json b/src/geophires_x_schema_generator/geophires-request.json index 251b72e3e..1a47c90e5 100644 --- a/src/geophires_x_schema_generator/geophires-request.json +++ b/src/geophires_x_schema_generator/geophires-request.json @@ -1038,6 +1038,15 @@ "minimum": 0, "maximum": 1199 }, + "Number of Multilateral Sections per Vertical Section": { + "description": "Number of nonvertical wellbore sections (aka laterals or horizontals) per vertical section, where the number of vertical sections is the total number of wells (Number of Production Wells + Number of Injection Wells). Pass this parameter instead of Number of Multilateral Sections to define laterals on a per-well basis - the total number of multilateral sections for the project is calculated as this value multiplied by the number of vertical sections. For example, a project with 2 injectors and 2 producers with 3 laterals per well may set Number of Multilateral Sections per Vertical Section = 3, which is equivalent to Number of Multilateral Sections = 2 * 2 * 3 = 12. May not be provided in combination with Number of Multilateral Sections. Not supported by AGS/CLGS models.", + "type": "integer", + "units": null, + "category": "Well Bores", + "default": 0, + "minimum": 0, + "maximum": 1199 + }, "Multilaterals Cased": { "description": "If set to True, casing & cementing are assumed to comprise 50% of drilling costs (doubling cost compared to uncased).", "type": "boolean", diff --git a/tests/geophires_x_tests/test_well_bores.py b/tests/geophires_x_tests/test_well_bores.py index 5de1f3c94..3a04e3797 100644 --- a/tests/geophires_x_tests/test_well_bores.py +++ b/tests/geophires_x_tests/test_well_bores.py @@ -126,6 +126,64 @@ def test_number_of_injection_wells_per_production_well(self): } ) + def test_multilateral_sections_per_vertical_section(self): + laterals_params = { + 'Well Geometry Configuration': 4, + 'Number of Production Wells': 2, + 'Number of Injection Wells': 2, + } + + r_per_vertical_section: GeophiresXResult = self._get_result( + {**laterals_params, 'Number of Multilateral Sections per Vertical Section': 3} + ) + + # 2 producers + 2 injectors with 3 laterals per well is equivalent to 2 * 2 * 3 = 12 total sections. + r_total_sections: GeophiresXResult = self._get_result( + {**laterals_params, 'Number of Multilateral Sections': 12} + ) + + self.assertEqual(self._lateral_costs(r_total_sections), self._lateral_costs(r_per_vertical_section)) + + # Total sections (and therefore total lateral cost) scale with the number of vertical sections, whereas the + # cost per section does not. + r_double_wells: GeophiresXResult = self._get_result( + { + 'Well Geometry Configuration': 4, + 'Number of Production Wells': 4, + 'Number of Injection Wells': 4, + 'Number of Multilateral Sections per Vertical Section': 3, + } + ) + + self.assertEqual(self._lateral_costs(r_double_wells)[1], self._lateral_costs(r_per_vertical_section)[1]) + self.assertGreater(self._lateral_costs(r_double_wells)[0], self._lateral_costs(r_per_vertical_section)[0]) + + def test_multilateral_sections_per_vertical_section_validation(self): + with self.assertRaises(RuntimeError): + self._get_result( + { + 'Well Geometry Configuration': 4, + 'Number of Multilateral Sections': 12, + 'Number of Multilateral Sections per Vertical Section': 3, + } + ) + + def test_multilateral_sections_per_vertical_section_unsupported_by_ags(self): + """ + AGS/CLGS models do not support deriving the total number of multilateral sections from a + per-vertical-section value. + """ + + with self.assertRaises(RuntimeError): + GeophiresXClient().get_geophires_result( + GeophiresInputParameters( + from_file_path=self._get_test_file_path( + '../examples/Wanju_Yuan_Closed-Loop_Geothermal_Energy_Recovery.txt' + ), + params={'Number of Multilateral Sections per Vertical Section': 1}, + ) + ) + def test_redrilling_thermal_drawdown_dominates(self): """ Verify that if thermal drawdown triggers before well integrity failure, @@ -238,6 +296,14 @@ def _get_result(self, _params) -> GeophiresXResult: ) return GeophiresXClient().get_geophires_result(params) + # noinspection PyMethodMayBeStatic + def _lateral_costs(self, _r: GeophiresXResult) -> tuple[float, float]: + capital_costs = _r.result['CAPITAL COSTS (M$)'] + return ( + capital_costs['Drilling and completion costs']['value'], + capital_costs['Drilling and completion costs per non-vertical section']['value'], + ) + # noinspection PyMethodMayBeStatic def _prod_inj_lcoe_production(self, _r: GeophiresXResult) -> tuple[int, int, float, float]: return ( From a50cef0c32c561ae93e4d580bb9f0a87a08e73c3 Mon Sep 17 00:00:00 2001 From: softwareengineerprogrammer <4056124+softwareengineerprogrammer@users.noreply.github.com> Date: Sun, 6 Sep 2026 09:25:42 -0700 Subject: [PATCH 2/5] integ test minor refactor --- tests/geophires_x_tests/test_well_bores.py | 22 +++++++++++----------- 1 file changed, 11 insertions(+), 11 deletions(-) diff --git a/tests/geophires_x_tests/test_well_bores.py b/tests/geophires_x_tests/test_well_bores.py index 3a04e3797..87ffa288e 100644 --- a/tests/geophires_x_tests/test_well_bores.py +++ b/tests/geophires_x_tests/test_well_bores.py @@ -142,7 +142,15 @@ def test_multilateral_sections_per_vertical_section(self): {**laterals_params, 'Number of Multilateral Sections': 12} ) - self.assertEqual(self._lateral_costs(r_total_sections), self._lateral_costs(r_per_vertical_section)) + # noinspection PyMethodMayBeStatic + def _lateral_costs(_r: GeophiresXResult) -> tuple[float, float]: + capital_costs = _r.result['CAPITAL COSTS (M$)'] + return ( + capital_costs['Drilling and completion costs']['value'], + capital_costs['Drilling and completion costs per non-vertical section']['value'], + ) + + self.assertEqual(_lateral_costs(r_total_sections), _lateral_costs(r_per_vertical_section)) # Total sections (and therefore total lateral cost) scale with the number of vertical sections, whereas the # cost per section does not. @@ -155,8 +163,8 @@ def test_multilateral_sections_per_vertical_section(self): } ) - self.assertEqual(self._lateral_costs(r_double_wells)[1], self._lateral_costs(r_per_vertical_section)[1]) - self.assertGreater(self._lateral_costs(r_double_wells)[0], self._lateral_costs(r_per_vertical_section)[0]) + self.assertEqual(_lateral_costs(r_double_wells)[1], _lateral_costs(r_per_vertical_section)[1]) + self.assertGreater(_lateral_costs(r_double_wells)[0], _lateral_costs(r_per_vertical_section)[0]) def test_multilateral_sections_per_vertical_section_validation(self): with self.assertRaises(RuntimeError): @@ -296,14 +304,6 @@ def _get_result(self, _params) -> GeophiresXResult: ) return GeophiresXClient().get_geophires_result(params) - # noinspection PyMethodMayBeStatic - def _lateral_costs(self, _r: GeophiresXResult) -> tuple[float, float]: - capital_costs = _r.result['CAPITAL COSTS (M$)'] - return ( - capital_costs['Drilling and completion costs']['value'], - capital_costs['Drilling and completion costs per non-vertical section']['value'], - ) - # noinspection PyMethodMayBeStatic def _prod_inj_lcoe_production(self, _r: GeophiresXResult) -> tuple[int, int, float, float]: return ( From a25b055b64c730766dab6a66258e531fb1c511b2 Mon Sep 17 00:00:00 2001 From: softwareengineerprogrammer <4056124+softwareengineerprogrammer@users.noreply.github.com> Date: Sun, 6 Sep 2026 09:30:04 -0700 Subject: [PATCH 3/5] use Number of Multilateral Sections per Vertical Section in example_SAM-single-owner-PPA --- .../examples/example_SAM-single-owner-PPA.out | 166 +++++++++--------- .../examples/example_SAM-single-owner-PPA.txt | 3 +- 2 files changed, 84 insertions(+), 85 deletions(-) diff --git a/tests/examples/example_SAM-single-owner-PPA.out b/tests/examples/example_SAM-single-owner-PPA.out index c38381974..be2d74200 100644 --- a/tests/examples/example_SAM-single-owner-PPA.out +++ b/tests/examples/example_SAM-single-owner-PPA.out @@ -4,18 +4,18 @@ Simulation Metadata ---------------------- - GEOPHIRES Version: 3.12.1 - Simulation Date: 2026-04-01 - Simulation Time: 09:30 - Calculation Time: 1.322 sec + GEOPHIRES Version: 3.16.0 + Simulation Date: 2026-09-06 + Simulation Time: 09:29 + Calculation Time: 1.202 sec ***SUMMARY OF RESULTS*** End-Use Option: Electricity Average Net Electricity Production: 54.96 MW - Electricity breakeven price: 6.34 cents/kWh - Total CAPEX: 225.81 MUSD - Total CAPEX ($/kW): 4097 USD/kW + Electricity breakeven price: 6.62 cents/kWh + Total CAPEX: 247.00 MUSD + Total CAPEX ($/kW): 4482 USD/kW Number of production wells: 6 Number of injection wells: 6 Flowrate per production well: 100.0 kg/sec @@ -29,14 +29,14 @@ Simulation Metadata Real Discount Rate: 8.00 % Nominal Discount Rate: 10.16 % WACC: 7.57 % - Investment Tax Credit: 67.74 MUSD + Investment Tax Credit: 74.10 MUSD Project lifetime: 20 yr Capacity factor: 90.0 % - Project NPV: 126.12 MUSD - After-tax IRR: 24.35 % - Project VIR=PI=PIR: 1.93 - Project MOIC: 3.85 - Project Payback Period: 4.91 yr + Project NPV: 115.93 MUSD + After-tax IRR: 22.26 % + Project VIR=PI=PIR: 1.78 + Project MOIC: 3.46 + Project Payback Period: 5.34 yr Estimated Jobs Created: 125 ***ENGINEERING PARAMETERS*** @@ -100,7 +100,7 @@ Simulation Metadata ***CAPITAL COSTS (M$)*** Exploration costs: 3.89 MUSD - Drilling and completion costs: 49.18 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 @@ -108,17 +108,17 @@ Simulation Metadata Surface power plant costs: 144.44 MUSD Field gathering system costs: 8.50 MUSD Total surface equipment costs: 152.93 MUSD - Overnight Capital Cost: 215.06 MUSD - Inflation costs during construction: 10.75 MUSD - Total CAPEX: 225.81 MUSD + Overnight Capital Cost: 235.24 MUSD + Inflation costs during construction: 11.76 MUSD + Total CAPEX: 247.00 MUSD ***OPERATING AND MAINTENANCE COSTS (M$/yr)*** - Wellfield maintenance costs: 1.15 MUSD/yr + Wellfield maintenance costs: 1.36 MUSD/yr Power plant maintenance costs: 3.90 MUSD/yr Water costs: 1.58 MUSD/yr - Total operating and maintenance costs: 6.63 MUSD/yr + Total operating and maintenance costs: 6.83 MUSD/yr ***SURFACE EQUIPMENT SIMULATION RESULTS*** @@ -199,21 +199,21 @@ Simulation Metadata Year 0 Year 1 Year 2 Year 3 Year 4 Year 5 Year 6 Year 7 Year 8 Year 9 Year 10 Year 11 Year 12 Year 13 Year 14 Year 15 Year 16 Year 17 Year 18 Year 19 Year 20 CONSTRUCTION Capital expenditure schedule [construction] (%) 100.0 -Overnight capital expenditure [construction] ($) -215,055,748 +Overnight capital expenditure [construction] ($) -235,238,175 plus: -Inflation cost [construction] ($) -10,752,787 +Inflation cost [construction] ($) -11,761,909 plus: Royalty supplemental payments [construction] ($) 0 equals: -Nominal capital expenditure [construction] ($) -225,808,536 +Nominal capital expenditure [construction] ($) -247,000,084 -Issuance of equity [construction] ($) 135,485,121 -Issuance of debt [construction] ($) 90,323,414 -Debt balance [construction] ($) 90,323,414 +Issuance of equity [construction] ($) 148,200,050 +Issuance of debt [construction] ($) 98,800,033 +Debt balance [construction] ($) 98,800,033 Debt interest payment [construction] ($) 0 -Installed cost [construction] ($) -225,808,536 -After-tax net cash flow [construction] ($) -135,485,121 +Installed cost [construction] ($) -247,000,084 +After-tax net cash flow [construction] ($) -148,200,050 ENERGY Electricity to grid (kWh) 0.0 428,554,957 431,240,089 432,051,822 432,530,792 432,865,667 433,120,646 433,325,167 433,495,101 433,639,945 433,765,810 433,876,853 433,976,022 434,065,480 434,146,861 434,221,417 434,290,137 434,353,843 434,413,216 434,468,735 434,518,614 @@ -225,43 +225,43 @@ PPA price (cents/kWh) 0.0 8.0 8.0 PPA revenue ($) 0 34,284,397 34,499,207 35,955,353 37,387,962 38,810,736 40,228,246 41,642,549 43,054,733 44,465,440 45,875,072 47,283,899 48,692,110 50,099,838 51,507,184 52,914,222 54,321,010 55,727,598 57,134,026 58,540,317 59,946,188 Curtailment payment revenue ($) 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 Capacity payment revenue ($) 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -Salvage value ($) 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 112,904,268 -Total revenue ($) 0 34,284,397 34,499,207 35,955,353 37,387,962 38,810,736 40,228,246 41,642,549 43,054,733 44,465,440 45,875,072 47,283,899 48,692,110 50,099,838 51,507,184 52,914,222 54,321,010 55,727,598 57,134,026 58,540,317 172,850,456 +Salvage value ($) 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 123,500,042 +Total revenue ($) 0 34,284,397 34,499,207 35,955,353 37,387,962 38,810,736 40,228,246 41,642,549 43,054,733 44,465,440 45,875,072 47,283,899 48,692,110 50,099,838 51,507,184 52,914,222 54,321,010 55,727,598 57,134,026 58,540,317 183,446,230 -Property tax net assessed value ($) 0 225,808,536 225,808,536 225,808,536 225,808,536 225,808,536 225,808,536 225,808,536 225,808,536 225,808,536 225,808,536 225,808,536 225,808,536 225,808,536 225,808,536 225,808,536 225,808,536 225,808,536 225,808,536 225,808,536 225,808,536 +Property tax net assessed value ($) 0 247,000,084 247,000,084 247,000,084 247,000,084 247,000,084 247,000,084 247,000,084 247,000,084 247,000,084 247,000,084 247,000,084 247,000,084 247,000,084 247,000,084 247,000,084 247,000,084 247,000,084 247,000,084 247,000,084 247,000,084 OPERATING EXPENSES -O&M fixed expense ($) 0 6,626,143 6,626,143 6,626,143 6,626,143 6,626,143 6,626,143 6,626,143 6,626,143 6,626,143 6,626,143 6,626,143 6,626,143 6,626,143 6,626,143 6,626,143 6,626,143 6,626,143 6,626,143 6,626,143 6,626,143 +O&M fixed expense ($) 0 6,827,968 6,827,968 6,827,968 6,827,968 6,827,968 6,827,968 6,827,968 6,827,968 6,827,968 6,827,968 6,827,968 6,827,968 6,827,968 6,827,968 6,827,968 6,827,968 6,827,968 6,827,968 6,827,968 6,827,968 O&M production-based expense ($) 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 O&M capacity-based expense ($) 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 Fuel expense ($) 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 Electricity purchase ($) 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 Property tax expense ($) 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 Insurance expense ($) 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -Total operating expenses ($) 0 6,626,143 6,626,143 6,626,143 6,626,143 6,626,143 6,626,143 6,626,143 6,626,143 6,626,143 6,626,143 6,626,143 6,626,143 6,626,143 6,626,143 6,626,143 6,626,143 6,626,143 6,626,143 6,626,143 6,626,143 +Total operating expenses ($) 0 6,827,968 6,827,968 6,827,968 6,827,968 6,827,968 6,827,968 6,827,968 6,827,968 6,827,968 6,827,968 6,827,968 6,827,968 6,827,968 6,827,968 6,827,968 6,827,968 6,827,968 6,827,968 6,827,968 6,827,968 -EBITDA ($) 0 27,658,253 27,873,064 29,329,209 30,761,818 32,184,592 33,602,102 35,016,405 36,428,590 37,839,297 39,248,929 40,657,756 42,065,966 43,473,694 44,881,040 46,288,078 47,694,867 49,101,455 50,507,883 51,914,174 166,224,312 +EBITDA ($) 0 27,456,429 27,671,239 29,127,385 30,559,994 31,982,768 33,400,278 34,814,581 36,226,766 37,637,472 39,047,104 40,455,932 41,864,142 43,271,870 44,679,216 46,086,254 47,493,043 48,899,630 50,306,058 51,712,350 176,618,262 OPERATING ACTIVITIES -EBITDA ($) 0 27,658,253 27,873,064 29,329,209 30,761,818 32,184,592 33,602,102 35,016,405 36,428,590 37,839,297 39,248,929 40,657,756 42,065,966 43,473,694 44,881,040 46,288,078 47,694,867 49,101,455 50,507,883 51,914,174 166,224,312 +EBITDA ($) 0 27,456,429 27,671,239 29,127,385 30,559,994 31,982,768 33,400,278 34,814,581 36,226,766 37,637,472 39,047,104 40,455,932 41,864,142 43,271,870 44,679,216 46,086,254 47,493,043 48,899,630 50,306,058 51,712,350 176,618,262 Interest earned on reserves ($) 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 plus PBI if not available for debt service: Federal PBI income ($) 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 State PBI income ($) 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 Utility PBI income ($) 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 Other PBI income ($) 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -Debt interest payment ($) 0 4,516,171 4,379,590 4,236,180 4,085,600 3,927,491 3,761,476 3,587,161 3,404,130 3,211,947 3,010,155 2,798,274 2,575,798 2,342,199 2,096,919 1,839,376 1,568,956 1,285,014 986,876 673,830 345,133 -Cash flow from operating activities ($) 0 23,142,082 23,493,474 25,093,029 26,676,218 28,257,101 29,840,626 31,429,244 33,024,460 34,627,350 36,238,774 37,859,483 39,490,168 41,131,496 42,784,121 44,448,702 46,125,911 47,816,440 49,521,007 51,240,344 165,879,180 +Debt interest payment ($) 0 4,940,002 4,790,603 4,633,735 4,469,023 4,296,076 4,114,481 3,923,807 3,723,598 3,513,380 3,292,650 3,060,884 2,817,530 2,562,008 2,293,710 2,011,997 1,716,198 1,405,610 1,079,491 737,068 377,522 +Cash flow from operating activities ($) 0 22,516,427 22,880,636 24,493,650 26,090,971 27,686,692 29,285,797 30,890,774 32,503,167 34,124,092 35,754,454 37,395,048 39,046,612 40,709,862 42,385,506 44,074,257 45,776,845 47,494,021 49,226,567 50,975,282 176,240,740 INVESTING ACTIVITIES -Total installed cost ($) -225,808,536 +Total installed cost ($) -247,000,084 Debt closing costs ($) 0 Debt up-front fee ($) 0 minus: Total IBI income ($) 0 Total CBI income ($) 0 equals: -Purchase of property ($) -225,808,536 +Purchase of property ($) -247,000,084 plus: Reserve (increase)/decrease debt service ($) 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 Reserve (increase)/decrease working capital ($) 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 @@ -273,89 +273,89 @@ Reserve capital spending major equipment 1 ($) 0 0 0 Reserve capital spending major equipment 2 ($) 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 Reserve capital spending major equipment 3 ($) 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 equals: -Cash flow from investing activities ($) -225,808,536 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +Cash flow from investing activities ($) -247,000,084 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 FINANCING ACTIVITIES -Issuance of equity ($) 135,485,121 -Size of debt ($) 90,323,414 +Issuance of equity ($) 148,200,050 +Size of debt ($) 98,800,033 minus: -Debt principal payment ($) 0 2,731,614 2,868,194 3,011,604 3,162,184 3,320,294 3,486,308 3,660,624 3,843,655 4,035,838 4,237,629 4,449,511 4,671,986 4,905,586 5,150,865 5,408,408 5,678,829 5,962,770 6,260,909 6,573,954 6,902,652 +Debt principal payment ($) 0 2,987,969 3,137,367 3,294,235 3,458,947 3,631,895 3,813,489 4,004,164 4,204,372 4,414,591 4,635,320 4,867,086 5,110,440 5,365,962 5,634,260 5,915,974 6,211,772 6,522,361 6,848,479 7,190,903 7,550,448 equals: -Cash flow from financing activities ($) 225,808,536 -2,731,614 -2,868,194 -3,011,604 -3,162,184 -3,320,294 -3,486,308 -3,660,624 -3,843,655 -4,035,838 -4,237,629 -4,449,511 -4,671,986 -4,905,586 -5,150,865 -5,408,408 -5,678,829 -5,962,770 -6,260,909 -6,573,954 -6,902,652 +Cash flow from financing activities ($) 247,000,084 -2,987,969 -3,137,367 -3,294,235 -3,458,947 -3,631,895 -3,813,489 -4,004,164 -4,204,372 -4,414,591 -4,635,320 -4,867,086 -5,110,440 -5,365,962 -5,634,260 -5,915,974 -6,211,772 -6,522,361 -6,848,479 -7,190,903 -7,550,448 PROJECT RETURNS Pre-tax Cash Flow: -Cash flow from operating activities ($) 0 23,142,082 23,493,474 25,093,029 26,676,218 28,257,101 29,840,626 31,429,244 33,024,460 34,627,350 36,238,774 37,859,483 39,490,168 41,131,496 42,784,121 44,448,702 46,125,911 47,816,440 49,521,007 51,240,344 165,879,180 -Cash flow from investing activities ($) -225,808,536 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -Cash flow from financing activities ($) 225,808,536 -2,731,614 -2,868,194 -3,011,604 -3,162,184 -3,320,294 -3,486,308 -3,660,624 -3,843,655 -4,035,838 -4,237,629 -4,449,511 -4,671,986 -4,905,586 -5,150,865 -5,408,408 -5,678,829 -5,962,770 -6,260,909 -6,573,954 -6,902,652 -Total pre-tax cash flow ($) 0 20,410,469 20,625,279 22,081,425 23,514,034 24,936,808 26,354,318 27,768,621 29,180,806 30,591,512 32,001,144 33,409,972 34,818,182 36,225,910 37,633,256 39,040,294 40,447,082 41,853,670 43,260,098 44,666,390 158,976,528 +Cash flow from operating activities ($) 0 22,516,427 22,880,636 24,493,650 26,090,971 27,686,692 29,285,797 30,890,774 32,503,167 34,124,092 35,754,454 37,395,048 39,046,612 40,709,862 42,385,506 44,074,257 45,776,845 47,494,021 49,226,567 50,975,282 176,240,740 +Cash flow from investing activities ($) -247,000,084 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +Cash flow from financing activities ($) 247,000,084 -2,987,969 -3,137,367 -3,294,235 -3,458,947 -3,631,895 -3,813,489 -4,004,164 -4,204,372 -4,414,591 -4,635,320 -4,867,086 -5,110,440 -5,365,962 -5,634,260 -5,915,974 -6,211,772 -6,522,361 -6,848,479 -7,190,903 -7,550,448 +Total pre-tax cash flow ($) 0 19,528,459 19,743,269 21,199,415 22,632,024 24,054,798 25,472,308 26,886,611 28,298,795 29,709,502 31,119,134 32,527,961 33,936,172 35,343,900 36,751,246 38,158,284 39,565,072 40,971,660 42,378,088 43,784,379 168,690,292 Pre-tax Returns: -Issuance of equity ($) 135,485,121 -Total pre-tax cash flow ($) 0 20,410,469 20,625,279 22,081,425 23,514,034 24,936,808 26,354,318 27,768,621 29,180,806 30,591,512 32,001,144 33,409,972 34,818,182 36,225,910 37,633,256 39,040,294 40,447,082 41,853,670 43,260,098 44,666,390 158,976,528 -Total pre-tax returns ($) -135,485,121 20,410,469 20,625,279 22,081,425 23,514,034 24,936,808 26,354,318 27,768,621 29,180,806 30,591,512 32,001,144 33,409,972 34,818,182 36,225,910 37,633,256 39,040,294 40,447,082 41,853,670 43,260,098 44,666,390 158,976,528 +Issuance of equity ($) 148,200,050 +Total pre-tax cash flow ($) 0 19,528,459 19,743,269 21,199,415 22,632,024 24,054,798 25,472,308 26,886,611 28,298,795 29,709,502 31,119,134 32,527,961 33,936,172 35,343,900 36,751,246 38,158,284 39,565,072 40,971,660 42,378,088 43,784,379 168,690,292 +Total pre-tax returns ($) -148,200,050 19,528,459 19,743,269 21,199,415 22,632,024 24,054,798 25,472,308 26,886,611 28,298,795 29,709,502 31,119,134 32,527,961 33,936,172 35,343,900 36,751,246 38,158,284 39,565,072 40,971,660 42,378,088 43,784,379 168,690,292 After-tax Returns: -Total pre-tax returns ($) -135,485,121 20,410,469 20,625,279 22,081,425 23,514,034 24,936,808 26,354,318 27,768,621 29,180,806 30,591,512 32,001,144 33,409,972 34,818,182 36,225,910 37,633,256 39,040,294 40,447,082 41,853,670 43,260,098 44,666,390 158,976,528 -Federal ITC total income ($) 0 67,742,561 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +Total pre-tax returns ($) -148,200,050 19,528,459 19,743,269 21,199,415 22,632,024 24,054,798 25,472,308 26,886,611 28,298,795 29,709,502 31,119,134 32,527,961 33,936,172 35,343,900 36,751,246 38,158,284 39,565,072 40,971,660 42,378,088 43,784,379 168,690,292 +Federal ITC total income ($) 0 74,100,025 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 Federal PTC income ($) 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -Federal tax benefit (liability) ($) 0 -3,582,515 -2,714,008 -3,026,401 -3,335,598 -3,644,345 -3,953,607 -4,263,864 -4,575,410 -4,888,454 -5,203,165 -5,519,690 -5,838,163 -6,158,714 -6,481,471 -6,806,564 -7,134,123 -7,464,284 -7,797,185 -8,132,972 -30,521,937 +Federal tax benefit (liability) ($) 0 -3,372,377 -2,418,426 -2,733,447 -3,045,404 -3,357,049 -3,669,354 -3,982,806 -4,297,706 -4,614,273 -4,932,682 -5,253,090 -5,575,641 -5,900,474 -6,227,727 -6,557,540 -6,890,055 -7,225,420 -7,563,786 -7,905,310 -32,369,654 State ITC total income ($) 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 State PTC income ($) 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -State tax benefit (liability) ($) 0 -1,284,056 -972,763 -1,084,732 -1,195,555 -1,306,217 -1,417,063 -1,528,267 -1,639,932 -1,752,134 -1,864,934 -1,978,383 -2,092,531 -2,207,424 -2,323,108 -2,439,629 -2,557,033 -2,675,370 -2,794,690 -2,915,044 -10,939,762 -Total after-tax returns ($) -135,485,121 83,286,459 16,938,508 17,970,292 18,982,881 19,986,247 20,983,647 21,976,490 22,965,464 23,950,924 24,933,045 25,911,899 26,887,488 27,859,772 28,828,676 29,794,101 30,755,926 31,714,016 32,668,223 33,618,374 117,514,829 +State tax benefit (liability) ($) 0 -1,208,737 -866,819 -979,730 -1,091,543 -1,203,243 -1,315,181 -1,427,529 -1,540,396 -1,653,861 -1,767,987 -1,882,828 -1,998,438 -2,114,865 -2,232,160 -2,350,373 -2,469,554 -2,589,756 -2,711,034 -2,833,445 -11,602,027 +Total after-tax returns ($) -148,200,050 89,047,369 16,458,024 17,486,237 18,495,077 19,494,506 20,487,773 21,476,276 22,460,693 23,441,368 24,418,465 25,392,043 26,362,093 27,328,561 28,291,359 29,250,371 30,205,463 31,156,484 32,103,268 33,045,625 124,718,611 -After-tax net cash flow ($) -135,485,121 83,286,459 16,938,508 17,970,292 18,982,881 19,986,247 20,983,647 21,976,490 22,965,464 23,950,924 24,933,045 25,911,899 26,887,488 27,859,772 28,828,676 29,794,101 30,755,926 31,714,016 32,668,223 33,618,374 117,514,829 -After-tax cumulative IRR (%) NaN -38.53 -22.41 -8.85 0.69 7.21 11.71 14.89 17.19 18.87 20.13 21.08 21.81 22.38 22.82 23.17 23.44 23.66 23.84 23.98 24.35 -After-tax cumulative NPV ($) -135,485,121 -59,880,129 -45,921,997 -32,479,395 -19,588,994 -7,268,969 4,472,905 15,636,160 26,225,864 36,251,384 45,725,442 54,663,354 63,082,404 71,001,334 78,439,909 85,418,558 91,958,079 98,079,391 103,803,327 109,150,474 126,117,828 +After-tax net cash flow ($) -148,200,050 89,047,369 16,458,024 17,486,237 18,495,077 19,494,506 20,487,773 21,476,276 22,460,693 23,441,368 24,418,465 25,392,043 26,362,093 27,328,561 28,291,359 29,250,371 30,205,463 31,156,484 32,103,268 33,045,625 124,718,611 +After-tax cumulative IRR (%) NaN -39.91 -25.09 -12.04 -2.58 4.01 8.63 11.94 14.35 16.14 17.49 18.53 19.33 19.95 20.45 20.84 21.16 21.41 21.61 21.78 22.26 +After-tax cumulative NPV ($) -148,200,050 -67,365,474 -53,803,284 -40,722,777 -28,163,621 -16,146,717 -4,682,321 6,226,844 16,583,790 26,396,018 35,674,546 44,433,141 52,687,679 60,455,616 67,755,548 74,606,840 81,029,319 87,043,017 92,667,966 97,924,014 115,931,485 AFTER-TAX LCOE AND PPA PRICE -Annual costs ($) -135,485,121 49,002,062 -17,560,699 -17,985,061 -18,405,081 -18,824,489 -19,244,598 -19,666,059 -20,089,270 -20,514,516 -20,942,027 -21,372,001 -21,804,622 -22,240,066 -22,678,507 -23,120,121 -23,565,084 -24,013,582 -24,465,803 -24,921,943 57,568,641 +Annual costs ($) -148,200,050 54,762,973 -18,041,183 -18,469,116 -18,892,885 -19,316,230 -19,740,472 -20,166,273 -20,594,041 -21,024,072 -21,456,607 -21,891,856 -22,330,016 -22,771,277 -23,215,825 -23,663,851 -24,115,547 -24,571,114 -25,030,759 -25,494,693 64,772,423 PPA revenue ($) 0 34,284,397 34,499,207 35,955,353 37,387,962 38,810,736 40,228,246 41,642,549 43,054,733 44,465,440 45,875,072 47,283,899 48,692,110 50,099,838 51,507,184 52,914,222 54,321,010 55,727,598 57,134,026 58,540,317 59,946,188 Electricity to grid (kWh) 0 428,554,957 431,240,089 432,051,822 432,530,792 432,865,667 433,120,646 433,325,167 433,495,101 433,639,945 433,765,810 433,876,853 433,976,022 434,065,480 434,146,861 434,221,417 434,290,137 434,353,843 434,413,216 434,468,735 434,518,614 -Present value of annual costs ($) 230,967,711 +Present value of annual costs ($) 241,154,053 -Present value of annual energy costs ($) 230,967,711 +Present value of annual energy costs ($) 241,154,053 Present value of annual energy nominal (kWh) 3,643,623,190 -LCOE Levelized cost of energy nominal (cents/kWh) 6.34 +LCOE Levelized cost of energy nominal (cents/kWh) 6.62 Present value of PPA revenue ($) 357,085,539 Present value of annual energy nominal (kWh) 3,643,623,190 LPPA Levelized PPA price nominal (cents/kWh) 9.80 PROJECT STATE INCOME TAXES -EBITDA ($) 0 27,658,253 27,873,064 29,329,209 30,761,818 32,184,592 33,602,102 35,016,405 36,428,590 37,839,297 39,248,929 40,657,756 42,065,966 43,473,694 44,881,040 46,288,078 47,694,867 49,101,455 50,507,883 51,914,174 166,224,312 +EBITDA ($) 0 27,456,429 27,671,239 29,127,385 30,559,994 31,982,768 33,400,278 34,814,581 36,226,766 37,637,472 39,047,104 40,455,932 41,864,142 43,271,870 44,679,216 46,086,254 47,493,043 48,899,630 50,306,058 51,712,350 176,618,262 State taxable PBI income ($) 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 Interest earned on reserves ($) 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 State taxable IBI income ($) 0 State taxable CBI income ($) 0 minus: -Debt interest payment ($) 0 4,516,171 4,379,590 4,236,180 4,085,600 3,927,491 3,761,476 3,587,161 3,404,130 3,211,947 3,010,155 2,798,274 2,575,798 2,342,199 2,096,919 1,839,376 1,568,956 1,285,014 986,876 673,830 345,133 -Total state tax depreciation ($) 0 4,798,431 9,596,863 9,596,863 9,596,863 9,596,863 9,596,863 9,596,863 9,596,863 9,596,863 9,596,863 9,596,863 9,596,863 9,596,863 9,596,863 9,596,863 9,596,863 9,596,863 9,596,863 9,596,863 9,596,863 +Debt interest payment ($) 0 4,940,002 4,790,603 4,633,735 4,469,023 4,296,076 4,114,481 3,923,807 3,723,598 3,513,380 3,292,650 3,060,884 2,817,530 2,562,008 2,293,710 2,011,997 1,716,198 1,405,610 1,079,491 737,068 377,522 +Total state tax depreciation ($) 0 5,248,752 10,497,504 10,497,504 10,497,504 10,497,504 10,497,504 10,497,504 10,497,504 10,497,504 10,497,504 10,497,504 10,497,504 10,497,504 10,497,504 10,497,504 10,497,504 10,497,504 10,497,504 10,497,504 10,497,504 equals: -State taxable income ($) 0 18,343,651 13,896,611 15,496,166 17,079,355 18,660,239 20,243,763 21,832,382 23,427,598 25,030,487 26,641,911 28,262,620 29,893,305 31,534,633 33,187,258 34,851,840 36,529,048 38,219,578 39,924,144 41,643,481 156,282,317 +State taxable income ($) 0 17,267,675 12,383,133 13,996,147 15,593,467 17,189,189 18,788,293 20,393,271 22,005,664 23,626,589 25,256,951 26,897,544 28,549,108 30,212,359 31,888,003 33,576,754 35,279,341 36,996,517 38,729,063 40,477,779 165,743,236 State income tax rate (frac) 0.0 0.07 0.07 0.07 0.07 0.07 0.07 0.07 0.07 0.07 0.07 0.07 0.07 0.07 0.07 0.07 0.07 0.07 0.07 0.07 0.07 -State tax benefit (liability) ($) 0 -1,284,056 -972,763 -1,084,732 -1,195,555 -1,306,217 -1,417,063 -1,528,267 -1,639,932 -1,752,134 -1,864,934 -1,978,383 -2,092,531 -2,207,424 -2,323,108 -2,439,629 -2,557,033 -2,675,370 -2,794,690 -2,915,044 -10,939,762 +State tax benefit (liability) ($) 0 -1,208,737 -866,819 -979,730 -1,091,543 -1,203,243 -1,315,181 -1,427,529 -1,540,396 -1,653,861 -1,767,987 -1,882,828 -1,998,438 -2,114,865 -2,232,160 -2,350,373 -2,469,554 -2,589,756 -2,711,034 -2,833,445 -11,602,027 PROJECT FEDERAL INCOME TAXES -EBITDA ($) 0 27,658,253 27,873,064 29,329,209 30,761,818 32,184,592 33,602,102 35,016,405 36,428,590 37,839,297 39,248,929 40,657,756 42,065,966 43,473,694 44,881,040 46,288,078 47,694,867 49,101,455 50,507,883 51,914,174 166,224,312 +EBITDA ($) 0 27,456,429 27,671,239 29,127,385 30,559,994 31,982,768 33,400,278 34,814,581 36,226,766 37,637,472 39,047,104 40,455,932 41,864,142 43,271,870 44,679,216 46,086,254 47,493,043 48,899,630 50,306,058 51,712,350 176,618,262 Interest earned on reserves ($) 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -State tax benefit (liability) ($) 0 -1,284,056 -972,763 -1,084,732 -1,195,555 -1,306,217 -1,417,063 -1,528,267 -1,639,932 -1,752,134 -1,864,934 -1,978,383 -2,092,531 -2,207,424 -2,323,108 -2,439,629 -2,557,033 -2,675,370 -2,794,690 -2,915,044 -10,939,762 +State tax benefit (liability) ($) 0 -1,208,737 -866,819 -979,730 -1,091,543 -1,203,243 -1,315,181 -1,427,529 -1,540,396 -1,653,861 -1,767,987 -1,882,828 -1,998,438 -2,114,865 -2,232,160 -2,350,373 -2,469,554 -2,589,756 -2,711,034 -2,833,445 -11,602,027 State ITC total income ($) 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 State PTC income ($) 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 Federal taxable IBI income ($) 0 Federal taxable CBI income ($) 0 Federal taxable PBI income ($) 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 minus: -Debt interest payment ($) 0 4,516,171 4,379,590 4,236,180 4,085,600 3,927,491 3,761,476 3,587,161 3,404,130 3,211,947 3,010,155 2,798,274 2,575,798 2,342,199 2,096,919 1,839,376 1,568,956 1,285,014 986,876 673,830 345,133 -Total federal tax depreciation ($) 0 4,798,431 9,596,863 9,596,863 9,596,863 9,596,863 9,596,863 9,596,863 9,596,863 9,596,863 9,596,863 9,596,863 9,596,863 9,596,863 9,596,863 9,596,863 9,596,863 9,596,863 9,596,863 9,596,863 9,596,863 +Debt interest payment ($) 0 4,940,002 4,790,603 4,633,735 4,469,023 4,296,076 4,114,481 3,923,807 3,723,598 3,513,380 3,292,650 3,060,884 2,817,530 2,562,008 2,293,710 2,011,997 1,716,198 1,405,610 1,079,491 737,068 377,522 +Total federal tax depreciation ($) 0 5,248,752 10,497,504 10,497,504 10,497,504 10,497,504 10,497,504 10,497,504 10,497,504 10,497,504 10,497,504 10,497,504 10,497,504 10,497,504 10,497,504 10,497,504 10,497,504 10,497,504 10,497,504 10,497,504 10,497,504 equals: -Federal taxable income ($) 0 17,059,595 12,923,848 14,411,435 15,883,800 17,354,022 18,826,700 20,304,115 21,787,666 23,278,353 24,776,977 26,284,236 27,800,774 29,327,209 30,864,150 32,412,211 33,972,015 35,544,207 37,129,454 38,728,437 145,342,555 +Federal taxable income ($) 0 16,058,938 11,516,313 13,016,416 14,501,925 15,985,946 17,473,113 18,965,742 20,465,267 21,972,728 23,488,964 25,014,716 26,550,671 28,097,493 29,655,842 31,226,381 32,809,787 34,406,761 36,018,029 37,644,334 154,141,210 Federal income tax rate (frac) 0.0 0.21 0.21 0.21 0.21 0.21 0.21 0.21 0.21 0.21 0.21 0.21 0.21 0.21 0.21 0.21 0.21 0.21 0.21 0.21 0.21 -Federal tax benefit (liability) ($) 0 -3,582,515 -2,714,008 -3,026,401 -3,335,598 -3,644,345 -3,953,607 -4,263,864 -4,575,410 -4,888,454 -5,203,165 -5,519,690 -5,838,163 -6,158,714 -6,481,471 -6,806,564 -7,134,123 -7,464,284 -7,797,185 -8,132,972 -30,521,937 +Federal tax benefit (liability) ($) 0 -3,372,377 -2,418,426 -2,733,447 -3,045,404 -3,357,049 -3,669,354 -3,982,806 -4,297,706 -4,614,273 -4,932,682 -5,253,090 -5,575,641 -5,900,474 -6,227,727 -6,557,540 -6,890,055 -7,225,420 -7,563,786 -7,905,310 -32,369,654 CASH INCENTIVES Federal IBI income ($) 0 @@ -381,30 +381,30 @@ Federal PTC income ($) 0 0 0 State PTC income ($) 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 Federal ITC amount income ($) 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -Federal ITC percent income ($) 0 67,742,561 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -Federal ITC total income ($) 0 67,742,561 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +Federal ITC percent income ($) 0 74,100,025 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +Federal ITC total income ($) 0 74,100,025 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 State ITC amount income ($) 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 State ITC percent income ($) 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 State ITC total income ($) 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 DEBT REPAYMENT -Debt balance ($) 90,323,414 87,591,801 84,723,606 81,712,002 78,549,818 75,229,524 71,743,216 68,082,592 64,238,937 60,203,100 55,965,470 51,515,959 46,843,973 41,938,387 36,787,522 31,379,114 25,700,285 19,737,515 13,476,606 6,902,652 0 -Debt interest payment ($) 0 4,516,171 4,379,590 4,236,180 4,085,600 3,927,491 3,761,476 3,587,161 3,404,130 3,211,947 3,010,155 2,798,274 2,575,798 2,342,199 2,096,919 1,839,376 1,568,956 1,285,014 986,876 673,830 345,133 -Debt principal payment ($) 0 2,731,614 2,868,194 3,011,604 3,162,184 3,320,294 3,486,308 3,660,624 3,843,655 4,035,838 4,237,629 4,449,511 4,671,986 4,905,586 5,150,865 5,408,408 5,678,829 5,962,770 6,260,909 6,573,954 6,902,652 -Debt total payment ($) 0 7,247,784 7,247,784 7,247,784 7,247,784 7,247,784 7,247,784 7,247,784 7,247,784 7,247,784 7,247,784 7,247,784 7,247,784 7,247,784 7,247,784 7,247,784 7,247,784 7,247,784 7,247,784 7,247,784 7,247,784 +Debt balance ($) 98,800,033 95,812,065 92,674,698 89,380,462 85,921,515 82,289,621 78,476,131 74,471,968 70,267,596 65,853,005 61,217,685 56,350,599 51,240,159 45,874,196 40,239,936 34,323,962 28,112,190 21,589,829 14,741,351 7,550,448 0 +Debt interest payment ($) 0 4,940,002 4,790,603 4,633,735 4,469,023 4,296,076 4,114,481 3,923,807 3,723,598 3,513,380 3,292,650 3,060,884 2,817,530 2,562,008 2,293,710 2,011,997 1,716,198 1,405,610 1,079,491 737,068 377,522 +Debt principal payment ($) 0 2,987,969 3,137,367 3,294,235 3,458,947 3,631,895 3,813,489 4,004,164 4,204,372 4,414,591 4,635,320 4,867,086 5,110,440 5,365,962 5,634,260 5,915,974 6,211,772 6,522,361 6,848,479 7,190,903 7,550,448 +Debt total payment ($) 0 7,927,970 7,927,970 7,927,970 7,927,970 7,927,970 7,927,970 7,927,970 7,927,970 7,927,970 7,927,970 7,927,970 7,927,970 7,927,970 7,927,970 7,927,970 7,927,970 7,927,970 7,927,970 7,927,970 7,927,970 DSCR (DEBT FRACTION) -EBITDA ($) 0 27,658,253 27,873,064 29,329,209 30,761,818 32,184,592 33,602,102 35,016,405 36,428,590 37,839,297 39,248,929 40,657,756 42,065,966 43,473,694 44,881,040 46,288,078 47,694,867 49,101,455 50,507,883 51,914,174 166,224,312 +EBITDA ($) 0 27,456,429 27,671,239 29,127,385 30,559,994 31,982,768 33,400,278 34,814,581 36,226,766 37,637,472 39,047,104 40,455,932 41,864,142 43,271,870 44,679,216 46,086,254 47,493,043 48,899,630 50,306,058 51,712,350 176,618,262 minus: Reserves major equipment 1 funding ($) 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 Reserves major equipment 2 funding ($) 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 Reserves major equipment 3 funding ($) 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 Reserves receivables funding ($) 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 equals: -Cash available for debt service (CAFDS) ($) 0 27,658,253 27,873,064 29,329,209 30,761,818 32,184,592 33,602,102 35,016,405 36,428,590 37,839,297 39,248,929 40,657,756 42,065,966 43,473,694 44,881,040 46,288,078 47,694,867 49,101,455 50,507,883 51,914,174 166,224,312 -Debt total payment ($) 0 7,247,784 7,247,784 7,247,784 7,247,784 7,247,784 7,247,784 7,247,784 7,247,784 7,247,784 7,247,784 7,247,784 7,247,784 7,247,784 7,247,784 7,247,784 7,247,784 7,247,784 7,247,784 7,247,784 7,247,784 -DSCR (pre-tax) 0.0 3.82 3.85 4.05 4.24 4.44 4.64 4.83 5.03 5.22 5.42 5.61 5.80 6.0 6.19 6.39 6.58 6.77 6.97 7.16 22.93 +Cash available for debt service (CAFDS) ($) 0 27,456,429 27,671,239 29,127,385 30,559,994 31,982,768 33,400,278 34,814,581 36,226,766 37,637,472 39,047,104 40,455,932 41,864,142 43,271,870 44,679,216 46,086,254 47,493,043 48,899,630 50,306,058 51,712,350 176,618,262 +Debt total payment ($) 0 7,927,970 7,927,970 7,927,970 7,927,970 7,927,970 7,927,970 7,927,970 7,927,970 7,927,970 7,927,970 7,927,970 7,927,970 7,927,970 7,927,970 7,927,970 7,927,970 7,927,970 7,927,970 7,927,970 7,927,970 +DSCR (pre-tax) 0.0 3.46 3.49 3.67 3.85 4.03 4.21 4.39 4.57 4.75 4.93 5.10 5.28 5.46 5.64 5.81 5.99 6.17 6.35 6.52 22.28 RESERVES Reserves working capital funding ($) 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 diff --git a/tests/examples/example_SAM-single-owner-PPA.txt b/tests/examples/example_SAM-single-owner-PPA.txt index 7d4142147..98d86d3fe 100644 --- a/tests/examples/example_SAM-single-owner-PPA.txt +++ b/tests/examples/example_SAM-single-owner-PPA.txt @@ -74,9 +74,8 @@ Surface Temperature, 10, -- degC Circulation Pump Efficiency, 0.80 Well Geometry Configuration, 4 -Has Nonvertical Section, True Multilaterals Cased, True -Number of Multilateral Sections, 3 +Number of Multilateral Sections per Vertical Section, 1 Nonvertical Length per Multilateral Section, 1433, -- meters From d1af9cc5470c4b809f3cb4c69dd1e123dd88a525 Mon Sep 17 00:00:00 2001 From: softwareengineerprogrammer <4056124+softwareengineerprogrammer@users.noreply.github.com> Date: Sun, 6 Sep 2026 09:51:22 -0700 Subject: [PATCH 4/5] =?UTF-8?q?Bump=20version:=203.16.0=20=E2=86=92=203.16?= =?UTF-8?q?.1?= 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 3d1555938..7be00a59b 100644 --- a/.bumpversion.cfg +++ b/.bumpversion.cfg @@ -1,5 +1,5 @@ [bumpversion] -current_version = 3.16.0 +current_version = 3.16.1 commit = True tag = True diff --git a/.cookiecutterrc b/.cookiecutterrc index 20fa66cff..8ad1149e1 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.0 + version: 3.16.1 version_manager: "bump2version" website: "https://github.com/NREL" year_from: "2023" diff --git a/README.rst b/README.rst index c81d15c00..634f2578e 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.0.svg +.. |commits-since| image:: https://img.shields.io/github/commits-since/softwareengineerprogrammer/GEOPHIRES-X/v3.16.1.svg :alt: Commits since latest release - :target: https://github.com/softwareengineerprogrammer/GEOPHIRES-X/compare/v3.16.0...main + :target: https://github.com/softwareengineerprogrammer/GEOPHIRES-X/compare/v3.16.1...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 a3efec9f7..d8c146324 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.0' +version = release = '3.16.1' pygments_style = 'trac' templates_path = ['./templates'] diff --git a/setup.py b/setup.py index f95a5b473..c76e65b19 100755 --- a/setup.py +++ b/setup.py @@ -13,7 +13,7 @@ def read(*names, **kwargs): setup( name='geophires-x', - version='3.16.0', + version='3.16.1', 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 0c9d57a9e..405c30dff 100644 --- a/src/geophires_x/__init__.py +++ b/src/geophires_x/__init__.py @@ -1 +1 @@ -__version__ = '3.16.0' +__version__ = '3.16.1' From 6a355be7a6e24a69e511aeb077d648cd7f0edf9f Mon Sep 17 00:00:00 2001 From: softwareengineerprogrammer <4056124+softwareengineerprogrammer@users.noreply.github.com> Date: Sun, 6 Sep 2026 09:52:47 -0700 Subject: [PATCH 5/5] 3.16.1 CHANGELOG entry --- CHANGELOG.rst | 2 ++ 1 file changed, 2 insertions(+) diff --git a/CHANGELOG.rst b/CHANGELOG.rst index 43838b7bd..16be41162 100644 --- a/CHANGELOG.rst +++ b/CHANGELOG.rst @@ -8,6 +8,8 @@ GEOPHIRES v3 (2023-2026) 3.16 ^^^^ +3.16.1: `Add Number of Multilateral Sections per Vertical Section parameter `__ | `release `__ + 3.16: `Fix Beckers_et_al_2023_Tabulated_Database_Coaxial_sCO2_heat and CLGS Pump Power unit display `__ | `release `__ 3.15