Skip to content

Conversation

@softwareengineerprogrammer
Copy link
Owner

@softwareengineerprogrammer softwareengineerprogrammer commented Nov 24, 2025

Description

  1. Addresses Support multiple construction years for SAM Economic Models NREL/GEOPHIRES-X#406
  2. Also addresses:
    1. Add Fractures per Well parameter NREL/GEOPHIRES-X#426 via sub-PR Add 'Number of Fractures per Stimulated Well' parameter [v3.10.15] #113 (2ff0b03)
    2. Add Royalty Rate Escalation Start Year parameter #115

Multiple Construction Years

Multiple construction years are supported by providing the Construction Years parameter. GEOPHIRES simulates the pre-revenue phase to calculate the project’s Year 0 equivalent capitalized cost, which serves as the basis for depreciation and permanent debt sizing. This calculation accounts for the timing of capital deployment defined in by Construction CAPEX Schedule, capturing both inflation costs and interest during construction (IDC) accrued prior to the start of operations.

SAM-EM-MCY-Design_2025-12-13

Testing & Verification

  1. Unit tests added: https://github.com/softwareengineerprogrammer/GEOPHIRES/pull/112/changes#diff-8bf8035525dcb8cb1f516ab6174d25f4fb43e04364a23937d443e5e55e2afb4a
  2. Unit tests updated: https://github.com/softwareengineerprogrammer/GEOPHIRES/pull/112/changes#diff-afd6405a1fe39334a3befccfb8e1c2a6de10076dcef2731c48a7f0cf11aca3ac
  3. Manual testing:
    1. Deployed & Tested in web interface: https://gtp.scientificwebservices.com/geophires/?geophires-example-id=example_SAM-single-owner-PPA-5
    2. Validated in consumer applications
image image

TODO

  1. 🚧 Update SAM Economic Models documentation (21e4857, 1b7c256)
    1. Year 0 Purchase of property ($) relation to Purchase of property [construction] ($) Years -X–0: image
    2. Year 0 Debt balance ($) = Year 0 Debt balance [construction] ($): image
    3. image
    4. IRR/NPV backfilled calculations
    5. image

Lower priority

  1. Update Fervo_Project_Cape-4 (or make new Fervo_Project_Cape-5) example with construction years based on publicly stated timelines - https://fervoenergy.com/fervo-energy-raises-462-million-series-e-to-accelerate-geothermal-development-and-meet-surging-energy-demand-with-clean-firm-power/
  2. Show Royalty Rate at Year 0 for consistency with revenue line items convention Screenshot 2025-12-11 at 10 19 02
  3. Clean up internal calculations/references to SAM-EM accrued financing output

Pending final confirmation

  1. 🚧 LCOE/PV/LPPA: Don't need to be backfilled/adjusted - see https://github.com/softwareengineerprogrammer/GEOPHIRES/tree/lcoe-nominal-derived for demonstration of parity
    1. Present value of annual costs ($)
    2. Present value of annual energy nominal (kWh)
    3. LCOE Levelized cost of energy nominal (cents/kWh)
    4. Present value of PPA revenue ($)
    5. LPPA Levelized PPA price nominal (cents/kWh)
  2. Backfill candidates:
    1. Total after-tax returns: Overlap with SAM-native cash flow row names avoided: 3924dbe
    2. Debt interest payment: <deferred...>

Done

  1. Pre-revenue years debt/equity split schedule for e.g. 7-year construction with equity only for first 4 years, then debt/equity for next 3: Bond Financing Start Year: https://github.com/scientific-web-services/geophires-sws/pull/1/commits/0313a81b4cd9767dda0a20a1066a082d3c256bb9, https://github.com/scientific-web-services/geophires-sws/pull/2/commits/ef9d20c732adf03331da48a7e88d106019188bbf
  2. Spread CAPEX evenly over construction years if schedule not provided: https://github.com/scientific-web-services/geophires-sws/pull/2/commits/bca12aa6333c376763f691ff5124698239f41a58
  3. Backfill SAM cash flow table with phased capex and post-processed IRR/NPV/etc.: https://github.com/scientific-web-services/geophires-sws/pull/3
  4. Fix web interface handling of capex schedule
  5. Fix web interface max item size for longer construction periods
  6. Add Interest During Construction (IDC) output (9d22f32): 12b172d
  7. Revert temporary GHA config (https://github.com/softwareengineerprogrammer/GEOPHIRES/pull/112/files#diff-d8485ae5feb85d5310fbb669eca158cacafdba09b695a16d47720b69b9072e23R30): b292910, 2877e3b
  8. Confirm changes to Accrued financing during construction (backwards-incompatible behavioral change): Removed parameter since it's become ambiguous to the point of being misleading/inaccurate: 00e1b5e
  9. Phased CAPEX schedule parameter validation - normalize/warn if schedule doesn't add up to 100%: 5bbd23b
  10. Retain Total CAPEX output (for nominal total capex)/ Add Total Installation Cost output (for equivalent overnight installation cost (OCC)): 12e22db
  11. Enable pre-written multi-year construction tests (https://github.com/softwareengineerprogrammer/GEOPHIRES/pull/112/files#diff-894b10b737d88bd3c08bc3eaf69146781055586f575a582c09b5911feb891b38R610): 8ccba78
  12. py38 assertLogs incompatibility (https://github.com/softwareengineerprogrammer/GEOPHIRES/pull/112/files#diff-894b10b737d88bd3c08bc3eaf69146781055586f575a582c09b5911feb891b38R898-R907): Marked FIXME for now
  13. Tests for interactions with other features:
    1. Add-Ons: 000e1cb
    2. Royalties: af61f34
  14. Bond Financing Start Year index off-by-one fix/disambiguation: 4e489f2
  15. Correct 'nan' to 'NaN' (
    # FIXME TODO correct 'nan' to 'NaN' (either here or appropriate place in processing pipeline...)
    ): 08860c7
  16. fix wonky web interface rendering of cash flow table: image
  17. [tangential] missing plus:? Screenshot 2025-11-24 at 08 49 01: No: image
  18. Add example_SAM-single-owner-PPA-5 to README examples list: 226bd86
  19. Update Construction Years tooltip text to reference CAPEX schedule (https://github.com/softwareengineerprogrammer/GEOPHIRES/pull/112/files#diff-3d85ef79807fc6c25a758a698fd3a7095750bd27ea52341700e1dad94885b5f6R1273): 7eec16e
  20. example_SAM-single-owner-PPA-5 description (FIXME in code): d822bbe
  21. adjust_phased_schedule_to_new_length & _calculate_pre_revenue_costs_and_cashflow unit test(s): eb3769a
  22. _calculate_nominal_discount_rate_and_wacc - FIXME in code: f9ba093
  23. Metrics updates: MCY econ outputs updates #114
  24. Add Calendar Year row (TODO in code): Created tracking issue: Add Calendar Year parameter for SAM-EM cash flow NREL/GEOPHIRES-X#439
  25. [Lower priority] Make warnings suppressable. Supported indirectly via Print Output to Console being set to false (0b98bff, 22c60fb), could be supported more directly as a follow-up item
  26. FIXME WIP in code: fc7b3d3#diff-34a61b08c97924dc1b6c7b6fbfb9a1f3fb5815b71cd3138e227d9d3c33699432L30

Change Checklist:

Observe the following checklist items if your change includes a new version (see versioning notes and version management docs).

Before merging:

  1. Add a CHANGELOG entry (example). RST Template:
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>`__
  1. CHANGELOG entry for Add 'Number of Fractures per Stimulated Well' parameter [v3.10.15] #113

After merging:

  1. Push tag(s) to GitHub: git push origin refs/tags/vM.m.P
  2. Post a change announcement to the GEOPHIRES Change Announcements Discussion (example). Markdown template:
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)

Originally self-reviewed in https://github.com/scientific-web-services/geophires-sws/pull/2, #112, #113, #114, and #115

…WIP to adjust debt service and passed total installed cost to mimick phased capex outlay
…uction years (instead of explicitly specifying value)
…n as being incurred in Year 0 (WIP to likewise adjust accrued financing during construction)
…pre-existing convention - TBD how things shake out when Total CAPEX value is re-aligned to OCC as it was previously...
…ed with pre-existing convention - TBD how things shake out when Total CAPEX value is re-aligned to OCC as it was previously..."

This reverts commit cf7bc1b.
…truction convention - WIP: TODO to bump minor version and regenerated affected examples
…nterest Rate might be redundant with Inflated Bond Interest Rate
…escalation-start-year

 Add Royalty Rate Escalation Start Year parameter
… clarify these values are annual and not cumulative
…NPV are calculated from. TODO to pivot relevant internal and user-facing terminology accordingly
… net cash flow [construction]' (some internal naming convention still remaining to refactor accordingly)
…tion capex schedule interpolation warnings suppressable)
raise NotImplementedError('Royalties are only supported for SAM Economic Models')
sam_em_only_params: list[Parameter] = [
self.royalty_rate,
# TODO other royalty params
Copy link
Owner Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

TODO


def _insert_royalties_rate_schedule(self, cf_ret: list[list[Any]]) -> list[list[Any]]:
"""
TODO update user-facing documentation to mention this feature
Copy link
Owner Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

TODO

@softwareengineerprogrammer softwareengineerprogrammer merged commit d74ef75 into main Dec 13, 2025
18 checks passed
@softwareengineerprogrammer
Copy link
Owner Author

Main repo PR: NREL#440

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

enhancement New feature or request

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants