Skip to content

Commit 7ddf23b

Browse files
Merge pull request #143 from softwareengineerprogrammer/sam-em-all-end-uses
SAM-EM: Support all End-Use Options and Absorption Chiller Surface Application [v3.13]
2 parents 851cb7e + d88cc07 commit 7ddf23b

62 files changed

Lines changed: 6144 additions & 910 deletions

File tree

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

.bumpversion.cfg

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
[bumpversion]
2-
current_version = 3.12.1
2+
current_version = 3.13.0
33
commit = True
44
tag = True
55

.cookiecutterrc

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -54,7 +54,7 @@ default_context:
5454
sphinx_doctest: "no"
5555
sphinx_theme: "sphinx-py3doc-enhanced-theme"
5656
test_matrix_separate_coverage: "no"
57-
version: 3.12.1
57+
version: 3.13.0
5858
version_manager: "bump2version"
5959
website: "https://github.com/NREL"
6060
year_from: "2023"

.gitignore

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -27,6 +27,10 @@ Geothermal_district_heating_system_with_peaking_boilers.png
2727
regenerate-schemas.sh
2828
requirements_2025-08-11.txt
2929

30+
tests/examples/example_SAM-single-owner-PPA-7_chp_cash-flow.csv
31+
tests/examples/example_SAM-single-owner-PPA-8_heat_cash-flow.csv
32+
tests/examples/example_SAM-single-owner-PPA-9_cooling_cash-flow.csv
33+
3034
# C extensions
3135
*.so
3236

@@ -116,9 +120,6 @@ _site/
116120
/.github/workflows/workflows.7z
117121
tmp.patch
118122

119-
# TODO unignore once favicon is correctly configured
120-
docs/_images/geophires-favicon.png
121-
122123
# Mypy Cache
123124
.mypy_cache/
124125

.pre-commit-config.yaml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@
22
# pre-commit install --install-hooks
33
# To update the versions:
44
# pre-commit autoupdate
5-
exclude: '^(\.tox|ci/templates|\.bumpversion\.cfg|src/geophires_x(?!/(GEOPHIRESv3|EconomicsSam|EconomicsSamCashFlow|EconomicsUtils|EconomicsSamPreRevenue|SurfacePlantUtils|NumpyUtils|UPPReservoir)\.py))(/|$)'
5+
exclude: '^(\.tox|ci/templates|\.bumpversion\.cfg|src/geophires_x(?!/(GEOPHIRESv3|EconomicsSam|EconomicsSamCashFlow|EconomicsUtils|EconomicsSamPreRevenue|EconomicsSamCalculations|SurfacePlantUtils|NumpyUtils|UPPReservoir)\.py))(/|$)'
66
# Note the order is intentional to avoid multiple passes of the hooks
77
repos:
88
- repo: https://github.com/astral-sh/ruff-pre-commit

CHANGELOG.rst

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,11 @@ Changelog
55
GEOPHIRES v3 (2023-2026)
66
------------------------
77

8+
3.13
9+
^^^^
10+
11+
3.13: `SAM-EM: Support all End-Use Options (Direct-Use Heat and CHP/Cogeneration) and Absorption Chiller Surface Application <https://github.com/softwareengineerprogrammer/GEOPHIRES/pull/143>`__ | `release <https://github.com/NREL/GEOPHIRES-X/releases/tag/v3.13.0>`__ | `documentation <https://softwareengineerprogrammer.github.io/GEOPHIRES/SAM-EM_End-Uses-and-Surface-Applications.html>`__
12+
813
3.12
914
^^^^
1015

README.rst

Lines changed: 30 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -58,9 +58,9 @@ Free software: `MIT license <LICENSE>`__
5858
:alt: Supported implementations
5959
:target: https://pypi.org/project/geophires-x
6060

61-
.. |commits-since| image:: https://img.shields.io/github/commits-since/softwareengineerprogrammer/GEOPHIRES-X/v3.12.1.svg
61+
.. |commits-since| image:: https://img.shields.io/github/commits-since/softwareengineerprogrammer/GEOPHIRES-X/v3.13.0.svg
6262
:alt: Commits since latest release
63-
:target: https://github.com/softwareengineerprogrammer/GEOPHIRES-X/compare/v3.12.1...main
63+
:target: https://github.com/softwareengineerprogrammer/GEOPHIRES-X/compare/v3.13.0...main
6464

6565
.. |docs| image:: https://readthedocs.org/projects/GEOPHIRES-X/badge/?style=flat
6666
:target: https://softwareengineerprogrammer.github.io/GEOPHIRES
@@ -348,6 +348,34 @@ Example-specific web interface deeplinks are listed in the Link column.
348348
- `example_SAM-single-owner-PPA-6_carbon-revenue.txt <tests/examples/example_SAM-single-owner-PPA-6_carbon-revenue.txt>`__
349349
- `.out <tests/examples/example_SAM-single-owner-PPA-6_carbon-revenue.out>`__
350350
- `link <https://gtp.scientificwebservices.com/geophires?geophires-example-id=example_SAM-single-owner-PPA-6_carbon-revenue>`__
351+
* - SAM Single Owner PPA: CHP
352+
- `example_SAM-single-owner-PPA-7_chp.txt <tests/examples/example_SAM-single-owner-PPA-7_chp.txt>`__
353+
- `.out <tests/examples/example_SAM-single-owner-PPA-7_chp.out>`__
354+
- `link <https://gtp.scientificwebservices.com/geophires?geophires-example-id=example_SAM-single-owner-PPA-7_chp>`__
355+
* - SAM Single Owner PPA: CHP with Carbon Credits
356+
- `example_SAM-single-owner-PPA-7b_chp-cc.txt <tests/examples/example_SAM-single-owner-PPA-7b_chp-cc.txt>`__
357+
- `.out <tests/examples/example_SAM-single-owner-PPA-7b_chp-cc.out>`__
358+
- `link <https://gtp.scientificwebservices.com/geophires?geophires-example-id=example_SAM-single-owner-PPA-7b_chp-cc>`__
359+
* - SAM Single Owner PPA: CHP with Surface Plant Capital Cost
360+
- `example_SAM-single-owner-PPA-7c.txt <tests/examples/example_SAM-single-owner-PPA-7c.txt>`__
361+
- `.out <tests/examples/example_SAM-single-owner-PPA-7c.out>`__
362+
- `link <https://gtp.scientificwebservices.com/geophires?geophires-example-id=example_SAM-single-owner-PPA-7c>`__
363+
* - SAM Single Owner PPA: CHP: Bottoming Cycle
364+
- `example_SAM-single-owner-PPA-7d_chp-bottoming.txt <tests/examples/example_SAM-single-owner-PPA-7d_chp-bottoming.txt>`__
365+
- `.out <tests/examples/example_SAM-single-owner-PPA-7d_chp-bottoming.out>`__
366+
- `link <https://gtp.scientificwebservices.com/geophires?geophires-example-id=example_SAM-single-owner-PPA-7d_chp-bottoming>`__
367+
* - SAM Single Owner PPA: CHP: Parallel Cycle
368+
- `example_SAM-single-owner-PPA-7e_chp-parallel.txt <tests/examples/example_SAM-single-owner-PPA-7e_chp-parallel.txt>`__
369+
- `.out <tests/examples/example_SAM-single-owner-PPA-7e_chp-parallel.out>`__
370+
- `link <https://gtp.scientificwebservices.com/geophires?geophires-example-id=example_SAM-single-owner-PPA-7e_chp-parallel>`__
371+
* - SAM Single Owner PPA: Direct-Use Heat
372+
- `example_SAM-single-owner-PPA-8_heat.txt <tests/examples/example_SAM-single-owner-PPA-8_heat.txt>`__
373+
- `.out <tests/examples/example_SAM-single-owner-PPA-8_heat.out>`__
374+
- `link <https://gtp.scientificwebservices.com/geophires?geophires-example-id=example_SAM-single-owner-PPA-8_heat>`__
375+
* - SAM Single Owner PPA: Cooling
376+
- `example_SAM-single-owner-PPA-9_cooling.txt <tests/examples/example_SAM-single-owner-PPA-9_cooling.txt>`__
377+
- `.out <tests/examples/example_SAM-single-owner-PPA-9_cooling.out>`__
378+
- `link <https://gtp.scientificwebservices.com/geophires?geophires-example-id=example_SAM-single-owner-PPA-9_cooling>`__
351379
.. raw:: html
352380

353381
<embed>
Lines changed: 86 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,86 @@
1+
# SAM Economic Models: End Uses and Surface Applications
2+
3+
[SAM Economic Models](SAM-Economic-Models.html) support a variety of geothermal end-use options and surface applications.
4+
5+
See the [Theoretical Basis for GEOPHIRES End-use options documentation](Theoretical-Basis-for-GEOPHIRES.html#enduse-options)
6+
for details on the underlying physical simulation mechanics.
7+
8+
## Electricity
9+
10+
For pure electricity generation configurations, SAM Economic Models calculate standard project finance metrics,
11+
including a nominal Levelized Cost of Electricity (LCOE).
12+
13+
### Examples:
14+
15+
1. [example_SAM-single-owner-PPA](https://gtp.scientificwebservices.com/geophires?geophires-example-id=example_SAM-single-owner-PPA): 50 MWe
16+
1. [example_SAM-single-owner-PPA-6_carbon-revenue](https://gtp.scientificwebservices.com/geophires?geophires-example-id=example_SAM-single-owner-PPA-6_carbon-revenue): Electricity with Carbon Credits
17+
18+
See [SAM Economic Models documentation](SAM-Economic-Models.html#examples) for additional electricity examples.
19+
20+
## Direct-Use Heat
21+
22+
Direct-use heat configurations evaluate pure thermal energy extraction, reporting financial viability via the nominal
23+
Levelized Cost of Heat (LCOH) in $/MMBTU.
24+
Heat revenue is modeled as capacity payment revenue and included as the `Heat revenue ($)` cash flow line item.
25+
26+
### Grid Electricity Consumption and Cash Flow Reporting
27+
28+
In GEOPHIRES, pure direct-use heat and cooling configurations
29+
typically require parasitic pumping power purchased from the grid. The cost of this grid electricity is calculated
30+
and fully accounted for within GEOPHIRES' baseline OPEX calculations prior to executing the SAM financial engine.
31+
32+
Because these costs are injected directly into the fixed O&M parameters passed to SAM, SAM's native grid-purchase
33+
mechanisms are bypassed. Consequently, the specific cash flow line items for `Electricity from grid (kWh)`
34+
and `Electricity purchase ($)` are intentionally removed from the final SAM cash flow profile report.
35+
This prevents the display of default zero values, which could otherwise mislead analysts into assuming parasitic power
36+
costs were omitted.
37+
38+
### Examples:
39+
40+
1. [example_SAM-single-owner-PPA-8_heat](https://gtp.scientificwebservices.com/geophires?geophires-example-id=example_SAM-single-owner-PPA-8_heat): Direct-Use Heat
41+
42+
## Cogeneration
43+
44+
Combined Heat and Power (CHP) end-uses simulate both electricity and direct-use heat generation.
45+
The model outputs allocated metrics for both product streams, including `Electricity CAPEX ($/kWe)`, `Heat CAPEX ($/kWth)`, LCOE, and LCOH.
46+
47+
### CHP Cost Allocation Ratio
48+
49+
To separate the levelized costs of electricity and heat, GEOPHIRES utilizes the `CHP Electrical Plant Cost Allocation Ratio`.
50+
When calculating the levelized metrics, the total present value of annual costs includes not only CAPEX, but also OPEX,
51+
taxes, and debt service. By applying a CAPEX-derived allocation ratio to this total present value, the model
52+
mathematically forces the assumption that thermal OPEX and financing burdens scale exactly proportionally to thermal CAPEX.
53+
If the electrical power plant has a high O&M burden and the direct-use heat component has a relatively low O&M burden,
54+
applying the CAPEX ratio to the total PV will artificially inflate the LCOH and artificially lower the LCOE.
55+
Analysts should be aware of this proportional scaling approximation when evaluating granular CHP OPEX profiles.
56+
57+
### Injection Temperature and CHP Topping Cycles
58+
59+
In GEOPHIRES, adjusting the `Injection Temperature` for a Cogeneration Topping Cycle will affect the amount of direct-use heat produced, but it will **not** affect electricity production.
60+
61+
This is the physically correct behavior. In a topping cycle, the geofluid flows sequentially: it first passes through the power plant (which extracts heat to generate electricity and rejects the fluid at a calculated thermodynamic exhaust temperature), and then passes through the direct-use application (which extracts the residual heat down to the user-defined `Injection Temperature`).
62+
63+
Because the power plant sits upstream, its electricity production is governed entirely by the production temperature and its own exhaust temperature. Lowering the `Injection Temperature` simply increases the temperature delta across the downstream direct-use application, yielding more heat without altering the upstream power cycle.
64+
65+
### Examples:
66+
67+
1. [example_SAM-single-owner-PPA-7_chp](https://gtp.scientificwebservices.com/geophires?geophires-example-id=example_SAM-single-owner-PPA-7_chp): Combined Heat and Power (CHP): Cogeneration Topping Cycle
68+
1. [example_SAM-single-owner-PPA-7b_chp-cc](https://gtp.scientificwebservices.com/geophires?geophires-example-id=example_SAM-single-owner-PPA-7b_chp-cc): Combined Heat and Power (CHP): Carbon Credits
69+
1. [example_SAM-single-owner-PPA-7c](https://gtp.scientificwebservices.com/geophires?geophires-example-id=example_SAM-single-owner-PPA-7c): Combined Heat and Power (CHP): Carbon Credits with fixed Surface Plant Capital Cost
70+
1. [example_SAM-single-owner-PPA-7d_chp-bottoming](https://gtp.scientificwebservices.com/geophires?geophires-example-id=example_SAM-single-owner-PPA-7d_chp-bottoming): Combined Heat and Power (CHP): Cogeneration Bottoming Cycle
71+
1. [example_SAM-single-owner-PPA-7e_chp-parallel](https://gtp.scientificwebservices.com/geophires?geophires-example-id=example_SAM-single-owner-PPA-7d_chp-parallel): Combined Heat and Power (CHP): Cogeneration Parallel Cycle
72+
73+
## Absorption Chiller (Cooling)
74+
75+
Cooling applications via absorption chillers are supported, providing a nominal Levelized Cost of Cooling (LCOC) in
76+
$/MMBTU. Cooling revenue is modeled as capacity payment revenue and included as the `Cooling revenue ($)` cash flow line item.
77+
Like Direct-Use Heat, parasitic electricity requirements are factored into the baseline OPEX prior to
78+
SAM execution.
79+
80+
### Examples:
81+
82+
1. [example_SAM-single-owner-PPA-9_cooling](https://gtp.scientificwebservices.com/geophires?geophires-example-id=example_SAM-single-owner-PPA-9_cooling): Cooling (Direct-Use Heat with Absorption Chiller Surface Application)
83+
84+
## Limitations
85+
86+
Heat Pump, District Heating, and Reservoir Thermal Energy Storage (SUTRA) surface applications are not currently supported for SAM Economic Models.

0 commit comments

Comments
 (0)