diff --git a/.bumpversion.cfg b/.bumpversion.cfg index 3d1555938..d881f6103 100644 --- a/.bumpversion.cfg +++ b/.bumpversion.cfg @@ -1,5 +1,5 @@ [bumpversion] -current_version = 3.16.0 +current_version = 3.16.2 commit = True tag = True diff --git a/.cookiecutterrc b/.cookiecutterrc index 20fa66cff..07658dd8a 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.2 version_manager: "bump2version" website: "https://github.com/NREL" year_from: "2023" diff --git a/.github/pull_request_template.md b/.github/pull_request_template.md index 0ff0c5f14..48f3c7cb8 100644 --- a/.github/pull_request_template.md +++ b/.github/pull_request_template.md @@ -28,7 +28,7 @@ M.m.P: `TITLE `__ | `release 1. [ ] Push tag(s) to GitHub: `git push origin refs/tags/vM.m.P` 1. [ ] Post a change announcement to the [GEOPHIRES Change Announcements Discussion](https://github.com/NREL/GEOPHIRES-X/discussions/428) ([example](https://github.com/NREL/GEOPHIRES-X/discussions/428#discussioncomment-14593405)). Markdown template: ```markdown -M.m.p: [TITLE](https://github.com/NREL/GEOPHIRES-X/pull/PR-NUMBER) | [release](https://github.com/NREL/GEOPHIRES-X/releases/tag/vM.m.P) + M.m.p: [TITLE](https://github.com/NREL/GEOPHIRES-X/pull/PR-NUMBER) | [release](https://github.com/NREL/GEOPHIRES-X/releases/tag/vM.m.P) ``` --- diff --git a/CHANGELOG.rst b/CHANGELOG.rst index 43838b7bd..7f024c134 100644 --- a/CHANGELOG.rst +++ b/CHANGELOG.rst @@ -8,6 +8,8 @@ GEOPHIRES v3 (2023-2026) 3.16 ^^^^ +3.16.2: `Add Number of Multilateral Sections per Vertical Section parameter; Output Annual License Fees Etc in OPEX `__ | `release `__ + 3.16: `Fix Beckers_et_al_2023_Tabulated_Database_Coaxial_sCO2_heat and CLGS Pump Power unit display `__ | `release `__ 3.15 diff --git a/MANIFEST.in b/MANIFEST.in index e0f609ad1..72e325dc8 100644 --- a/MANIFEST.in +++ b/MANIFEST.in @@ -22,6 +22,7 @@ include CONTRIBUTING.rst include LICENSE include INSTALL.rst include README.rst +include SECURITY.md include How-to-extend-GEOPHIRES-X.md include geophires-logo.png diff --git a/README.rst b/README.rst index c81d15c00..6beb43588 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.2.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.2...main .. |docs| image:: https://readthedocs.org/projects/GEOPHIRES-X/badge/?style=flat :target: https://softwareengineerprogrammer.github.io/GEOPHIRES diff --git a/SECURITY.md b/SECURITY.md new file mode 100644 index 000000000..17dd4ea4d --- /dev/null +++ b/SECURITY.md @@ -0,0 +1,9 @@ +# Security Policy + +## Reporting a Vulnerability + +1. Go to https://github.com/softwareengineerprogrammer/GEOPHIRES/security/advisories +2. Click "Report a vulnerability" +3. Fill out the advisory form + +This creates a private discussion visible only to maintainers. diff --git a/docs/conf.py b/docs/conf.py index a3efec9f7..7ab53dd7f 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.2' pygments_style = 'trac' templates_path = ['./templates'] diff --git a/setup.py b/setup.py index f95a5b473..4472ae987 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.2', license='MIT', description='GEOPHIRES is a free and open-source geothermal techno-economic simulator.', long_description='{}\n{}'.format( 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/Outputs.py b/src/geophires_x/Outputs.py index c95e46dc3..fba067888 100644 --- a/src/geophires_x/Outputs.py +++ b/src/geophires_x/Outputs.py @@ -616,6 +616,10 @@ def _render_additional_capital_cost_modifiers(additional_modifiers: list[tuple[P redrill_label = Outputs._field_label(econ.redrilling_annual_cost.display_name, 47) f.write(f' {redrill_label}{econ.redrilling_annual_cost.value:10.2f} {econ.redrilling_annual_cost.CurrentUnits.value}\n') + if econ.AnnualLicenseEtc.value != 0: + etc_label = Outputs._field_label(econ.AnnualLicenseEtc.Name, 47) + f.write(f' {etc_label}{econ.AnnualLicenseEtc.value:10.2f} {econ.AnnualLicenseEtc.CurrentUnits.value}\n') + if econ.DoAddOnCalculations.value and is_sam_econ_model: # Non-SAM econ models print this in Extended Economics profile aoc_label = Outputs._field_label(model.addeconomics.AddOnOPEXTotalPerYear.display_name, 47) 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/__init__.py b/src/geophires_x/__init__.py index 0c9d57a9e..a35ecdde6 100644 --- a/src/geophires_x/__init__.py +++ b/src/geophires_x/__init__.py @@ -1 +1 @@ -__version__ = '3.16.0' +__version__ = '3.16.2' diff --git a/src/geophires_x_client/geophires_x_result.py b/src/geophires_x_client/geophires_x_result.py index 8453e34dc..7207b0946 100644 --- a/src/geophires_x_client/geophires_x_result.py +++ b/src/geophires_x_client/geophires_x_result.py @@ -315,6 +315,7 @@ class GeophiresXResult: 'Average annual auxiliary fuel cost', 'Average annual pumping cost', 'Redrilling costs', + 'Annual License Fees Etc', 'Total Add-on OPEX', 'Total average annual O&M costs', 'Total operating and maintenance costs', 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/src/geophires_x_schema_generator/geophires-result.json b/src/geophires_x_schema_generator/geophires-result.json index 399397cf0..5d01c1a57 100644 --- a/src/geophires_x_schema_generator/geophires-result.json +++ b/src/geophires_x_schema_generator/geophires-result.json @@ -603,6 +603,7 @@ "description": "Total redrilling costs over the Plant Lifetime are calculated as (Drilling and completion costs + Stimulation costs) \u00d7 Number of times redrilling. The total is then divided over Plant Lifetime years to calculate Redrilling costs per year.", "units": "MUSD/yr" }, + "Annual License Fees Etc": {}, "Total Add-on OPEX": { "type": "number", "description": "AddOn OPEX Total Per Year", diff --git a/tests/examples/example_SAM-single-owner-PPA.out b/tests/examples/example_SAM-single-owner-PPA.out index c38381974..bc773e897 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.1 + Simulation Date: 2026-09-07 + Simulation Time: 07:06 + Calculation Time: 1.235 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.79 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: 109.74 MUSD + After-tax IRR: 21.61 % + Project VIR=PI=PIR: 1.74 + Project MOIC: 3.36 + Project Payback Period: 5.51 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,18 @@ 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 + Annual License Fees Etc: 1.00 MUSD + Total operating and maintenance costs: 7.83 MUSD/yr ***SURFACE EQUIPMENT SIMULATION RESULTS*** @@ -199,21 +200,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 +226,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 7,827,968 7,827,968 7,827,968 7,827,968 7,827,968 7,827,968 7,827,968 7,827,968 7,827,968 7,827,968 7,827,968 7,827,968 7,827,968 7,827,968 7,827,968 7,827,968 7,827,968 7,827,968 7,827,968 7,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 7,827,968 7,827,968 7,827,968 7,827,968 7,827,968 7,827,968 7,827,968 7,827,968 7,827,968 7,827,968 7,827,968 7,827,968 7,827,968 7,827,968 7,827,968 7,827,968 7,827,968 7,827,968 7,827,968 7,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 26,456,429 26,671,239 28,127,385 29,559,994 30,982,768 32,400,278 33,814,581 35,226,766 36,637,472 38,047,104 39,455,932 40,864,142 42,271,870 43,679,216 45,086,254 46,493,043 47,899,630 49,306,058 50,712,350 175,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 26,456,429 26,671,239 28,127,385 29,559,994 30,982,768 32,400,278 33,814,581 35,226,766 36,637,472 38,047,104 39,455,932 40,864,142 42,271,870 43,679,216 45,086,254 46,493,043 47,899,630 49,306,058 50,712,350 175,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 21,516,427 21,880,636 23,493,650 25,090,971 26,686,692 28,285,797 29,890,774 31,503,167 33,124,092 34,754,454 36,395,048 38,046,612 39,709,862 41,385,506 43,074,257 44,776,845 46,494,021 48,226,567 49,975,282 175,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 +274,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 21,516,427 21,880,636 23,493,650 25,090,971 26,686,692 28,285,797 29,890,774 31,503,167 33,124,092 34,754,454 36,395,048 38,046,612 39,709,862 41,385,506 43,074,257 44,776,845 46,494,021 48,226,567 49,975,282 175,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 18,528,459 18,743,269 20,199,415 21,632,024 23,054,798 24,472,308 25,886,611 27,298,795 28,709,502 30,119,134 31,527,961 32,936,172 34,343,900 35,751,246 37,158,284 38,565,072 39,971,660 41,378,088 42,784,379 167,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 18,528,459 18,743,269 20,199,415 21,632,024 23,054,798 24,472,308 25,886,611 27,298,795 28,709,502 30,119,134 31,527,961 32,936,172 34,343,900 35,751,246 37,158,284 38,565,072 39,971,660 41,378,088 42,784,379 167,690,292 +Total pre-tax returns ($) -148,200,050 18,528,459 18,743,269 20,199,415 21,632,024 23,054,798 24,472,308 25,886,611 27,298,795 28,709,502 30,119,134 31,527,961 32,936,172 34,343,900 35,751,246 37,158,284 38,565,072 39,971,660 41,378,088 42,784,379 167,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 18,528,459 18,743,269 20,199,415 21,632,024 23,054,798 24,472,308 25,886,611 27,298,795 28,709,502 30,119,134 31,527,961 32,936,172 34,343,900 35,751,246 37,158,284 38,565,072 39,971,660 41,378,088 42,784,379 167,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,177,077 -2,223,126 -2,538,147 -2,850,104 -3,161,749 -3,474,054 -3,787,506 -4,102,406 -4,418,973 -4,737,382 -5,057,790 -5,380,341 -5,705,174 -6,032,427 -6,362,240 -6,694,755 -7,030,120 -7,368,486 -7,710,010 -32,174,354 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,138,737 -796,819 -909,730 -1,021,543 -1,133,243 -1,245,181 -1,357,529 -1,470,396 -1,583,861 -1,697,987 -1,812,828 -1,928,438 -2,044,865 -2,162,160 -2,280,373 -2,399,554 -2,519,756 -2,641,034 -2,763,445 -11,532,027 +Total after-tax returns ($) -148,200,050 88,312,669 15,723,324 16,751,537 17,760,377 18,759,806 19,753,073 20,741,576 21,725,993 22,706,668 23,683,765 24,657,343 25,627,393 26,593,861 27,556,659 28,515,671 29,470,763 30,421,784 31,368,568 32,310,925 123,983,911 -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 88,312,669 15,723,324 16,751,537 17,760,377 18,759,806 19,753,073 20,741,576 21,725,993 22,706,668 23,683,765 24,657,343 25,627,393 26,593,861 27,556,659 28,515,671 29,470,763 30,421,784 31,368,568 32,310,925 123,983,911 +After-tax cumulative IRR (%) NaN -40.41 -26.06 -13.19 -3.75 2.88 7.56 10.93 13.39 15.23 16.62 17.69 18.52 19.17 19.69 20.10 20.43 20.70 20.92 21.09 21.61 +After-tax cumulative NPV ($) -148,200,050 -68,032,413 -55,075,650 -42,544,732 -30,484,478 -18,920,461 -7,867,183 2,668,781 12,686,946 22,191,639 31,190,996 39,696,167 47,720,655 55,279,759 62,390,119 69,069,322 75,335,584 81,207,474 86,703,693 91,842,884 109,744,276 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,028,273 -18,775,883 -19,203,816 -19,627,585 -20,050,930 -20,475,172 -20,900,973 -21,328,741 -21,758,772 -22,191,307 -22,626,556 -23,064,716 -23,505,977 -23,950,525 -24,398,551 -24,850,247 -25,305,814 -25,765,459 -26,229,393 64,037,723 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 ($) 247,341,262 -Present value of annual energy costs ($) 230,967,711 +Present value of annual energy costs ($) 247,341,262 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.79 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 26,456,429 26,671,239 28,127,385 29,559,994 30,982,768 32,400,278 33,814,581 35,226,766 36,637,472 38,047,104 39,455,932 40,864,142 42,271,870 43,679,216 45,086,254 46,493,043 47,899,630 49,306,058 50,712,350 175,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 16,267,675 11,383,133 12,996,147 14,593,467 16,189,189 17,788,293 19,393,271 21,005,664 22,626,589 24,256,951 25,897,544 27,549,108 29,212,359 30,888,003 32,576,754 34,279,341 35,996,517 37,729,063 39,477,779 164,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,138,737 -796,819 -909,730 -1,021,543 -1,133,243 -1,245,181 -1,357,529 -1,470,396 -1,583,861 -1,697,987 -1,812,828 -1,928,438 -2,044,865 -2,162,160 -2,280,373 -2,399,554 -2,519,756 -2,641,034 -2,763,445 -11,532,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 26,456,429 26,671,239 28,127,385 29,559,994 30,982,768 32,400,278 33,814,581 35,226,766 36,637,472 38,047,104 39,455,932 40,864,142 42,271,870 43,679,216 45,086,254 46,493,043 47,899,630 49,306,058 50,712,350 175,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,138,737 -796,819 -909,730 -1,021,543 -1,133,243 -1,245,181 -1,357,529 -1,470,396 -1,583,861 -1,697,987 -1,812,828 -1,928,438 -2,044,865 -2,162,160 -2,280,373 -2,399,554 -2,519,756 -2,641,034 -2,763,445 -11,532,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 15,128,938 10,586,313 12,086,416 13,571,925 15,055,946 16,543,113 18,035,742 19,535,267 21,042,728 22,558,964 24,084,716 25,620,671 27,167,493 28,725,842 30,296,381 31,879,787 33,476,761 35,088,029 36,714,334 153,211,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,177,077 -2,223,126 -2,538,147 -2,850,104 -3,161,749 -3,474,054 -3,787,506 -4,102,406 -4,418,973 -4,737,382 -5,057,790 -5,380,341 -5,705,174 -6,032,427 -6,362,240 -6,694,755 -7,030,120 -7,368,486 -7,710,010 -32,174,354 CASH INCENTIVES Federal IBI income ($) 0 @@ -381,30 +382,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 26,456,429 26,671,239 28,127,385 29,559,994 30,982,768 32,400,278 33,814,581 35,226,766 36,637,472 38,047,104 39,455,932 40,864,142 42,271,870 43,679,216 45,086,254 46,493,043 47,899,630 49,306,058 50,712,350 175,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 26,456,429 26,671,239 28,127,385 29,559,994 30,982,768 32,400,278 33,814,581 35,226,766 36,637,472 38,047,104 39,455,932 40,864,142 42,271,870 43,679,216 45,086,254 46,493,043 47,899,630 49,306,058 50,712,350 175,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.34 3.36 3.55 3.73 3.91 4.09 4.27 4.44 4.62 4.80 4.98 5.15 5.33 5.51 5.69 5.86 6.04 6.22 6.40 22.15 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..e8a375eb1 100644 --- a/tests/examples/example_SAM-single-owner-PPA.txt +++ b/tests/examples/example_SAM-single-owner-PPA.txt @@ -24,6 +24,7 @@ Combined Income Tax Rate, .28 Investment Tax Credit Rate, 0.3 Property Tax Rate, 0 +Annual License Fees Etc, 1 # *** SURFACE & SUBSURFACE TECHNICAL PARAMETERS *** # ************************************************* @@ -74,9 +75,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 diff --git a/tests/geophires_x_tests/test_well_bores.py b/tests/geophires_x_tests/test_well_bores.py index 5de1f3c94..87ffa288e 100644 --- a/tests/geophires_x_tests/test_well_bores.py +++ b/tests/geophires_x_tests/test_well_bores.py @@ -126,6 +126,72 @@ 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} + ) + + # 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. + 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(_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): + 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,