From 8a29dd43fa81fb020afe8c21a28cce8a0be63189 Mon Sep 17 00:00:00 2001 From: softwareengineerprogrammer <4056124+softwareengineerprogrammer@users.noreply.github.com> Date: Fri, 27 Feb 2026 09:24:28 -0800 Subject: [PATCH 1/4] Add Total CAPEX ($/kW) output for SAM-EM in summary of results category --- ...roject_cape-5-sensitivity-analysis-irr.svg | 206 ++++++++--------- ...oject_cape-5-sensitivity-analysis-lcoe.svg | 200 ++++++++--------- ...ape-5-sensitivity-analysis-project_npv.svg | 210 +++++++++--------- src/geophires_x/Economics.py | 21 ++ src/geophires_x/Outputs.py | 1 + src/geophires_x_client/geophires_x_result.py | 1 + .../geophires-result.json | 5 + tests/examples/Fervo_Project_Cape-4.out | 11 +- tests/examples/Fervo_Project_Cape-5.out | 9 +- tests/examples/Fervo_Project_Cape-6.out | 9 +- tests/examples/Fervo_Project_Cape-6.txt | 3 +- .../example_SAM-single-owner-PPA-2.out | 9 +- .../example_SAM-single-owner-PPA-3.out | 9 +- .../example_SAM-single-owner-PPA-4.out | 9 +- .../example_SAM-single-owner-PPA-5.out | 9 +- .../examples/example_SAM-single-owner-PPA.out | 9 +- 16 files changed, 378 insertions(+), 343 deletions(-) diff --git a/docs/_images/fervo_project_cape-5-sensitivity-analysis-irr.svg b/docs/_images/fervo_project_cape-5-sensitivity-analysis-irr.svg index 0a4c9b651..54af552a3 100644 --- a/docs/_images/fervo_project_cape-5-sensitivity-analysis-irr.svg +++ b/docs/_images/fervo_project_cape-5-sensitivity-analysis-irr.svg @@ -6,7 +6,7 @@ - 2026-02-16T11:02:18.770776 + 2026-02-27T09:15:53.909085 image/svg+xml @@ -40,23 +40,23 @@ z +" clip-path="url(#p84d9ff7b05)" style="fill: none; stroke-dasharray: 7.4,3.2; stroke-dashoffset: 0; stroke: #003c4d; stroke-width: 2"/> +" clip-path="url(#p84d9ff7b05)" style="fill: none; stroke-dasharray: 0.8,1.32; stroke-dashoffset: 0; stroke: #aaaaaa; stroke-opacity: 0.7; stroke-width: 0.8"/> - - + @@ -116,11 +116,11 @@ z +" clip-path="url(#p84d9ff7b05)" style="fill: none; stroke-dasharray: 0.8,1.32; stroke-dashoffset: 0; stroke: #aaaaaa; stroke-opacity: 0.7; stroke-width: 0.8"/> - + @@ -134,11 +134,11 @@ L 421.635935 97.55355 +" clip-path="url(#p84d9ff7b05)" style="fill: none; stroke-dasharray: 0.8,1.32; stroke-dashoffset: 0; stroke: #aaaaaa; stroke-opacity: 0.7; stroke-width: 0.8"/> - + @@ -153,11 +153,11 @@ L 553.962493 97.55355 +" clip-path="url(#p84d9ff7b05)" style="fill: none; stroke-dasharray: 0.8,1.32; stroke-dashoffset: 0; stroke: #aaaaaa; stroke-opacity: 0.7; stroke-width: 0.8"/> - + @@ -1528,17 +1528,17 @@ L 777.594375 97.55355 " style="fill: none; stroke: #aaaaaa; stroke-width: 0.8; stroke-linejoin: miter; stroke-linecap: square"/> - + +" clip-path="url(#p84d9ff7b05)" style="fill: #808080; stroke: #ffffff; stroke-width: 0.5; stroke-linejoin: miter"/> - + @@ -1550,7 +1550,7 @@ z - + @@ -1657,7 +1657,7 @@ z - + @@ -1669,17 +1669,17 @@ z - + +" clip-path="url(#p84d9ff7b05)" style="fill: #4ab67d; stroke: #ffffff; stroke-width: 0.5; stroke-linejoin: miter"/> - + @@ -1747,7 +1747,7 @@ z - + @@ -1758,17 +1758,17 @@ z - + +" clip-path="url(#p84d9ff7b05)" style="fill: #84d1a8; stroke: #ffffff; stroke-width: 0.5; stroke-linejoin: miter"/> - + @@ -1779,7 +1779,7 @@ z - + @@ -1833,7 +1833,7 @@ z - + @@ -1845,17 +1845,17 @@ z - + +" clip-path="url(#p84d9ff7b05)" style="fill: #808080; stroke: #ffffff; stroke-width: 0.5; stroke-linejoin: miter"/> - + @@ -1867,7 +1867,7 @@ z - + @@ -1881,17 +1881,17 @@ z - + +" clip-path="url(#p84d9ff7b05)" style="fill: #b0b0b0; stroke: #ffffff; stroke-width: 0.5; stroke-linejoin: miter"/> - + @@ -1905,7 +1905,7 @@ z - + @@ -1973,7 +1973,7 @@ z - + @@ -1984,17 +1984,17 @@ z - + +" clip-path="url(#p84d9ff7b05)" style="fill: #4ab67d; stroke: #ffffff; stroke-width: 0.5; stroke-linejoin: miter"/> - + @@ -2057,7 +2057,7 @@ z - + @@ -2072,17 +2072,17 @@ z - + +" clip-path="url(#p84d9ff7b05)" style="fill: #84d1a8; stroke: #ffffff; stroke-width: 0.5; stroke-linejoin: miter"/> - + @@ -2097,7 +2097,7 @@ z - + @@ -2109,7 +2109,7 @@ z - + @@ -2121,27 +2121,27 @@ z - + +" clip-path="url(#p84d9ff7b05)" style="fill: #808080; stroke: #ffffff; stroke-width: 0.5; stroke-linejoin: miter"/> - + +" clip-path="url(#p84d9ff7b05)" style="fill: #b0b0b0; stroke: #ffffff; stroke-width: 0.5; stroke-linejoin: miter"/> - + @@ -2159,7 +2159,7 @@ z - + @@ -2171,7 +2171,7 @@ z - + @@ -2183,17 +2183,17 @@ z - + +" clip-path="url(#p84d9ff7b05)" style="fill: #4ab67d; stroke: #ffffff; stroke-width: 0.5; stroke-linejoin: miter"/> - + @@ -2209,7 +2209,7 @@ z - + @@ -2221,27 +2221,27 @@ z - + +" clip-path="url(#p84d9ff7b05)" style="fill: #808080; stroke: #ffffff; stroke-width: 0.5; stroke-linejoin: miter"/> - + +" clip-path="url(#p84d9ff7b05)" style="fill: #b0b0b0; stroke: #ffffff; stroke-width: 0.5; stroke-linejoin: miter"/> - + @@ -2259,7 +2259,7 @@ z - + @@ -2271,7 +2271,7 @@ z - + @@ -2283,17 +2283,17 @@ z - + +" clip-path="url(#p84d9ff7b05)" style="fill: #4ab67d; stroke: #ffffff; stroke-width: 0.5; stroke-linejoin: miter"/> - + @@ -2309,7 +2309,7 @@ z - + @@ -2321,27 +2321,27 @@ z - + +" clip-path="url(#p84d9ff7b05)" style="fill: #808080; stroke: #ffffff; stroke-width: 0.5; stroke-linejoin: miter"/> - + +" clip-path="url(#p84d9ff7b05)" style="fill: #b0b0b0; stroke: #ffffff; stroke-width: 0.5; stroke-linejoin: miter"/> - + @@ -2369,7 +2369,7 @@ z - + @@ -2382,7 +2382,7 @@ z - + @@ -2393,17 +2393,17 @@ z - + +" clip-path="url(#p84d9ff7b05)" style="fill: #4ab67d; stroke: #ffffff; stroke-width: 0.5; stroke-linejoin: miter"/> - + @@ -2447,7 +2447,7 @@ z - + @@ -2461,17 +2461,17 @@ z - + +" clip-path="url(#p84d9ff7b05)" style="fill: #84d1a8; stroke: #ffffff; stroke-width: 0.5; stroke-linejoin: miter"/> - + @@ -2485,7 +2485,7 @@ z - + @@ -2498,7 +2498,7 @@ z - + @@ -2510,17 +2510,17 @@ z - + +" clip-path="url(#p84d9ff7b05)" style="fill: #808080; stroke: #ffffff; stroke-width: 0.5; stroke-linejoin: miter"/> - + @@ -2532,7 +2532,7 @@ z - + @@ -2542,17 +2542,17 @@ z - + +" clip-path="url(#p84d9ff7b05)" style="fill: #b0b0b0; stroke: #ffffff; stroke-width: 0.5; stroke-linejoin: miter"/> - + @@ -2562,7 +2562,7 @@ z - + @@ -2574,7 +2574,7 @@ z - + @@ -2586,24 +2586,24 @@ z - + +" clip-path="url(#p84d9ff7b05)" style="fill: #4ab67d; stroke: #ffffff; stroke-width: 0.5; stroke-linejoin: miter"/> - + - + @@ -2615,27 +2615,27 @@ z - + +" clip-path="url(#p84d9ff7b05)" style="fill: #808080; stroke: #ffffff; stroke-width: 0.5; stroke-linejoin: miter"/> - + +" clip-path="url(#p84d9ff7b05)" style="fill: #b0b0b0; stroke: #ffffff; stroke-width: 0.5; stroke-linejoin: miter"/> - + @@ -2654,7 +2654,7 @@ z - + @@ -2666,13 +2666,13 @@ z - + +" clip-path="url(#p84d9ff7b05)" style="fill: #4ab67d; stroke: #ffffff; stroke-width: 0.5; stroke-linejoin: miter"/> @@ -3052,7 +3052,7 @@ z - + diff --git a/docs/_images/fervo_project_cape-5-sensitivity-analysis-lcoe.svg b/docs/_images/fervo_project_cape-5-sensitivity-analysis-lcoe.svg index e717f6488..efff4d918 100644 --- a/docs/_images/fervo_project_cape-5-sensitivity-analysis-lcoe.svg +++ b/docs/_images/fervo_project_cape-5-sensitivity-analysis-lcoe.svg @@ -6,7 +6,7 @@ - 2026-02-16T11:02:19.049934 + 2026-02-27T09:15:54.188209 image/svg+xml @@ -40,23 +40,23 @@ z +" clip-path="url(#pdfac14dc2d)" style="fill: none; stroke-dasharray: 7.4,3.2; stroke-dashoffset: 0; stroke: #003c4d; stroke-width: 2"/> +" clip-path="url(#pdfac14dc2d)" style="fill: none; stroke-dasharray: 0.8,1.32; stroke-dashoffset: 0; stroke: #aaaaaa; stroke-opacity: 0.7; stroke-width: 0.8"/> - - + @@ -104,11 +104,11 @@ z +" clip-path="url(#pdfac14dc2d)" style="fill: none; stroke-dasharray: 0.8,1.32; stroke-dashoffset: 0; stroke: #aaaaaa; stroke-opacity: 0.7; stroke-width: 0.8"/> - + @@ -139,11 +139,11 @@ z +" clip-path="url(#pdfac14dc2d)" style="fill: none; stroke-dasharray: 0.8,1.32; stroke-dashoffset: 0; stroke: #aaaaaa; stroke-opacity: 0.7; stroke-width: 0.8"/> - + @@ -180,11 +180,11 @@ z +" clip-path="url(#pdfac14dc2d)" style="fill: none; stroke-dasharray: 0.8,1.32; stroke-dashoffset: 0; stroke: #aaaaaa; stroke-opacity: 0.7; stroke-width: 0.8"/> - + @@ -198,11 +198,11 @@ L 534.621117 97.55355 +" clip-path="url(#pdfac14dc2d)" style="fill: none; stroke-dasharray: 0.8,1.32; stroke-dashoffset: 0; stroke: #aaaaaa; stroke-opacity: 0.7; stroke-width: 0.8"/> - + @@ -216,11 +216,11 @@ L 636.390021 97.55355 +" clip-path="url(#pdfac14dc2d)" style="fill: none; stroke-dasharray: 0.8,1.32; stroke-dashoffset: 0; stroke: #aaaaaa; stroke-opacity: 0.7; stroke-width: 0.8"/> - + @@ -1618,17 +1618,17 @@ L 777.594375 97.55355 " style="fill: none; stroke: #aaaaaa; stroke-width: 0.8; stroke-linejoin: miter; stroke-linecap: square"/> - + +" clip-path="url(#pdfac14dc2d)" style="fill: #4ab67d; stroke: #ffffff; stroke-width: 0.5; stroke-linejoin: miter"/> - + @@ -1803,7 +1803,7 @@ z - + @@ -1814,17 +1814,17 @@ z - + +" clip-path="url(#pdfac14dc2d)" style="fill: #84d1a8; stroke: #ffffff; stroke-width: 0.5; stroke-linejoin: miter"/> - + @@ -1833,7 +1833,7 @@ z - + @@ -1881,17 +1881,17 @@ z - + +" clip-path="url(#pdfac14dc2d)" style="fill: #808080; stroke: #ffffff; stroke-width: 0.5; stroke-linejoin: miter"/> - + @@ -1903,7 +1903,7 @@ z - + @@ -1982,7 +1982,7 @@ z - + @@ -1997,27 +1997,27 @@ z - + +" clip-path="url(#pdfac14dc2d)" style="fill: #4ab67d; stroke: #ffffff; stroke-width: 0.5; stroke-linejoin: miter"/> - + +" clip-path="url(#pdfac14dc2d)" style="fill: #84d1a8; stroke: #ffffff; stroke-width: 0.5; stroke-linejoin: miter"/> - + @@ -2029,7 +2029,7 @@ z - + @@ -2044,27 +2044,27 @@ z - + +" clip-path="url(#pdfac14dc2d)" style="fill: #808080; stroke: #ffffff; stroke-width: 0.5; stroke-linejoin: miter"/> - + +" clip-path="url(#pdfac14dc2d)" style="fill: #b0b0b0; stroke: #ffffff; stroke-width: 0.5; stroke-linejoin: miter"/> - + @@ -2077,7 +2077,7 @@ z - + @@ -2092,17 +2092,17 @@ z - + +" clip-path="url(#pdfac14dc2d)" style="fill: #4ab67d; stroke: #ffffff; stroke-width: 0.5; stroke-linejoin: miter"/> - + @@ -2118,7 +2118,7 @@ z - + @@ -2133,27 +2133,27 @@ z - + +" clip-path="url(#pdfac14dc2d)" style="fill: #808080; stroke: #ffffff; stroke-width: 0.5; stroke-linejoin: miter"/> - + +" clip-path="url(#pdfac14dc2d)" style="fill: #b0b0b0; stroke: #ffffff; stroke-width: 0.5; stroke-linejoin: miter"/> - + @@ -2171,7 +2171,7 @@ z - + @@ -2187,7 +2187,7 @@ z - + @@ -2203,17 +2203,17 @@ z - + +" clip-path="url(#pdfac14dc2d)" style="fill: #4ab67d; stroke: #ffffff; stroke-width: 0.5; stroke-linejoin: miter"/> - + @@ -2229,7 +2229,7 @@ z - + @@ -2244,27 +2244,27 @@ z - + +" clip-path="url(#pdfac14dc2d)" style="fill: #808080; stroke: #ffffff; stroke-width: 0.5; stroke-linejoin: miter"/> - + +" clip-path="url(#pdfac14dc2d)" style="fill: #b0b0b0; stroke: #ffffff; stroke-width: 0.5; stroke-linejoin: miter"/> - + @@ -2282,7 +2282,7 @@ z - + @@ -2325,7 +2325,7 @@ z - + @@ -2341,27 +2341,27 @@ z - + +" clip-path="url(#pdfac14dc2d)" style="fill: #4ab67d; stroke: #ffffff; stroke-width: 0.5; stroke-linejoin: miter"/> - + +" clip-path="url(#pdfac14dc2d)" style="fill: #84d1a8; stroke: #ffffff; stroke-width: 0.5; stroke-linejoin: miter"/> - + @@ -2409,7 +2409,7 @@ z - + @@ -2438,17 +2438,17 @@ z - + +" clip-path="url(#pdfac14dc2d)" style="fill: #4ab67d; stroke: #ffffff; stroke-width: 0.5; stroke-linejoin: miter"/> - + @@ -2462,7 +2462,7 @@ z - + @@ -2519,7 +2519,7 @@ z - + @@ -2534,17 +2534,17 @@ z - + +" clip-path="url(#pdfac14dc2d)" style="fill: #808080; stroke: #ffffff; stroke-width: 0.5; stroke-linejoin: miter"/> - + @@ -2557,7 +2557,7 @@ z - + @@ -2607,7 +2607,7 @@ z - + @@ -2623,24 +2623,24 @@ z - + +" clip-path="url(#pdfac14dc2d)" style="fill: #4ab67d; stroke: #ffffff; stroke-width: 0.5; stroke-linejoin: miter"/> - + - + @@ -2655,17 +2655,17 @@ z - + +" clip-path="url(#pdfac14dc2d)" style="fill: #808080; stroke: #ffffff; stroke-width: 0.5; stroke-linejoin: miter"/> - + @@ -2681,7 +2681,7 @@ z - + @@ -2691,17 +2691,17 @@ z - + +" clip-path="url(#pdfac14dc2d)" style="fill: #b0b0b0; stroke: #ffffff; stroke-width: 0.5; stroke-linejoin: miter"/> - + @@ -2711,7 +2711,7 @@ z - + @@ -2727,7 +2727,7 @@ z - + @@ -2743,37 +2743,37 @@ z - + +" clip-path="url(#pdfac14dc2d)" style="fill: #4ab67d; stroke: #ffffff; stroke-width: 0.5; stroke-linejoin: miter"/> - + +" clip-path="url(#pdfac14dc2d)" style="fill: #808080; stroke: #ffffff; stroke-width: 0.5; stroke-linejoin: miter"/> - + +" clip-path="url(#pdfac14dc2d)" style="fill: #b0b0b0; stroke: #ffffff; stroke-width: 0.5; stroke-linejoin: miter"/> - + @@ -2793,7 +2793,7 @@ z - + @@ -3248,7 +3248,7 @@ z - + diff --git a/docs/_images/fervo_project_cape-5-sensitivity-analysis-project_npv.svg b/docs/_images/fervo_project_cape-5-sensitivity-analysis-project_npv.svg index 765699728..d873f4881 100644 --- a/docs/_images/fervo_project_cape-5-sensitivity-analysis-project_npv.svg +++ b/docs/_images/fervo_project_cape-5-sensitivity-analysis-project_npv.svg @@ -6,7 +6,7 @@ - 2026-02-16T11:02:19.973871 + 2026-02-27T09:15:53.905376 image/svg+xml @@ -40,23 +40,23 @@ z +" clip-path="url(#p4a91fb1597)" style="fill: none; stroke-dasharray: 7.4,3.2; stroke-dashoffset: 0; stroke: #003c4d; stroke-width: 2"/> +" clip-path="url(#p4a91fb1597)" style="fill: none; stroke-dasharray: 0.8,1.32; stroke-dashoffset: 0; stroke: #aaaaaa; stroke-opacity: 0.7; stroke-width: 0.8"/> - - + @@ -122,11 +122,11 @@ z +" clip-path="url(#p4a91fb1597)" style="fill: none; stroke-dasharray: 0.8,1.32; stroke-dashoffset: 0; stroke: #aaaaaa; stroke-opacity: 0.7; stroke-width: 0.8"/> - + @@ -169,11 +169,11 @@ z +" clip-path="url(#p4a91fb1597)" style="fill: none; stroke-dasharray: 0.8,1.32; stroke-dashoffset: 0; stroke: #aaaaaa; stroke-opacity: 0.7; stroke-width: 0.8"/> - + @@ -187,11 +187,11 @@ L 478.476269 97.55355 +" clip-path="url(#p4a91fb1597)" style="fill: none; stroke-dasharray: 0.8,1.32; stroke-dashoffset: 0; stroke: #aaaaaa; stroke-opacity: 0.7; stroke-width: 0.8"/> - + @@ -207,11 +207,11 @@ L 595.65686 97.55355 +" clip-path="url(#p4a91fb1597)" style="fill: none; stroke-dasharray: 0.8,1.32; stroke-dashoffset: 0; stroke: #aaaaaa; stroke-opacity: 0.7; stroke-width: 0.8"/> - + @@ -1620,17 +1620,17 @@ L 777.594375 97.55355 " style="fill: none; stroke: #aaaaaa; stroke-width: 0.8; stroke-linejoin: miter; stroke-linecap: square"/> - + +" clip-path="url(#p4a91fb1597)" style="fill: #808080; stroke: #ffffff; stroke-width: 0.5; stroke-linejoin: miter"/> - + @@ -1642,7 +1642,7 @@ z - + @@ -1838,7 +1838,7 @@ z - + @@ -1860,17 +1860,17 @@ z - + +" clip-path="url(#p4a91fb1597)" style="fill: #4ab67d; stroke: #ffffff; stroke-width: 0.5; stroke-linejoin: miter"/> - + @@ -1934,7 +1934,7 @@ z - + @@ -1945,17 +1945,17 @@ z - + +" clip-path="url(#p4a91fb1597)" style="fill: #84d1a8; stroke: #ffffff; stroke-width: 0.5; stroke-linejoin: miter"/> - + @@ -1966,7 +1966,7 @@ z - + @@ -2002,7 +2002,7 @@ z - + @@ -2016,17 +2016,17 @@ z - + +" clip-path="url(#p4a91fb1597)" style="fill: #808080; stroke: #ffffff; stroke-width: 0.5; stroke-linejoin: miter"/> - + @@ -2041,7 +2041,7 @@ z - + @@ -2055,17 +2055,17 @@ z - + +" clip-path="url(#p4a91fb1597)" style="fill: #b0b0b0; stroke: #ffffff; stroke-width: 0.5; stroke-linejoin: miter"/> - + @@ -2077,7 +2077,7 @@ z - + @@ -2092,17 +2092,17 @@ z - + +" clip-path="url(#p4a91fb1597)" style="fill: #4ab67d; stroke: #ffffff; stroke-width: 0.5; stroke-linejoin: miter"/> - + @@ -2149,7 +2149,7 @@ z - + @@ -2164,17 +2164,17 @@ z - + +" clip-path="url(#p4a91fb1597)" style="fill: #84d1a8; stroke: #ffffff; stroke-width: 0.5; stroke-linejoin: miter"/> - + @@ -2189,7 +2189,7 @@ z - + @@ -2238,7 +2238,7 @@ z - + @@ -2252,27 +2252,27 @@ z - + +" clip-path="url(#p4a91fb1597)" style="fill: #808080; stroke: #ffffff; stroke-width: 0.5; stroke-linejoin: miter"/> - + +" clip-path="url(#p4a91fb1597)" style="fill: #b0b0b0; stroke: #ffffff; stroke-width: 0.5; stroke-linejoin: miter"/> - + @@ -2290,7 +2290,7 @@ z - + @@ -2332,7 +2332,7 @@ z - + @@ -2346,17 +2346,17 @@ z - + +" clip-path="url(#p4a91fb1597)" style="fill: #4ab67d; stroke: #ffffff; stroke-width: 0.5; stroke-linejoin: miter"/> - + @@ -2372,7 +2372,7 @@ z - + @@ -2386,27 +2386,27 @@ z - + +" clip-path="url(#p4a91fb1597)" style="fill: #808080; stroke: #ffffff; stroke-width: 0.5; stroke-linejoin: miter"/> - + +" clip-path="url(#p4a91fb1597)" style="fill: #b0b0b0; stroke: #ffffff; stroke-width: 0.5; stroke-linejoin: miter"/> - + @@ -2424,7 +2424,7 @@ z - + @@ -2439,7 +2439,7 @@ z - + @@ -2453,17 +2453,17 @@ z - + +" clip-path="url(#p4a91fb1597)" style="fill: #4ab67d; stroke: #ffffff; stroke-width: 0.5; stroke-linejoin: miter"/> - + @@ -2479,7 +2479,7 @@ z - + @@ -2493,27 +2493,27 @@ z - + +" clip-path="url(#p4a91fb1597)" style="fill: #808080; stroke: #ffffff; stroke-width: 0.5; stroke-linejoin: miter"/> - + +" clip-path="url(#p4a91fb1597)" style="fill: #b0b0b0; stroke: #ffffff; stroke-width: 0.5; stroke-linejoin: miter"/> - + @@ -2541,7 +2541,7 @@ z - + @@ -2556,7 +2556,7 @@ z - + @@ -2571,17 +2571,17 @@ z - + +" clip-path="url(#p4a91fb1597)" style="fill: #4ab67d; stroke: #ffffff; stroke-width: 0.5; stroke-linejoin: miter"/> - + @@ -2596,7 +2596,7 @@ z - + @@ -2610,17 +2610,17 @@ z - + +" clip-path="url(#p4a91fb1597)" style="fill: #84d1a8; stroke: #ffffff; stroke-width: 0.5; stroke-linejoin: miter"/> - + @@ -2634,7 +2634,7 @@ z - + @@ -2649,7 +2649,7 @@ z - + @@ -2663,17 +2663,17 @@ z - + +" clip-path="url(#p4a91fb1597)" style="fill: #808080; stroke: #ffffff; stroke-width: 0.5; stroke-linejoin: miter"/> - + @@ -2688,7 +2688,7 @@ z - + @@ -2698,17 +2698,17 @@ z - + +" clip-path="url(#p4a91fb1597)" style="fill: #b0b0b0; stroke: #ffffff; stroke-width: 0.5; stroke-linejoin: miter"/> - + @@ -2716,7 +2716,7 @@ z - + @@ -2730,24 +2730,24 @@ z - + +" clip-path="url(#p4a91fb1597)" style="fill: #4ab67d; stroke: #ffffff; stroke-width: 0.5; stroke-linejoin: miter"/> - + - + @@ -2761,27 +2761,27 @@ z - + +" clip-path="url(#p4a91fb1597)" style="fill: #808080; stroke: #ffffff; stroke-width: 0.5; stroke-linejoin: miter"/> - + +" clip-path="url(#p4a91fb1597)" style="fill: #b0b0b0; stroke: #ffffff; stroke-width: 0.5; stroke-linejoin: miter"/> - + @@ -2800,7 +2800,7 @@ z - + @@ -2814,17 +2814,17 @@ z - + +" clip-path="url(#p4a91fb1597)" style="fill: #4ab67d; stroke: #ffffff; stroke-width: 0.5; stroke-linejoin: miter"/> - + @@ -2844,7 +2844,7 @@ z - + @@ -3367,7 +3367,7 @@ z - + diff --git a/src/geophires_x/Economics.py b/src/geophires_x/Economics.py index 3780133a7..720632b84 100644 --- a/src/geophires_x/Economics.py +++ b/src/geophires_x/Economics.py @@ -2088,6 +2088,17 @@ def __init__(self, model: Model): CurrentUnits=CurrencyUnit.MDOLLARS, ) self.capex_total = self.OutputParameterDict[self.capex_total.Name] = total_capex_parameter_output_parameter() + self.capex_total_per_kw = self.OutputParameterDict[self.capex_total_per_kw.Name] = OutputParameter( + Name="Total CAPEX ($/kW)", + UnitType=Units.ENERGYCOST, + PreferredUnits=EnergyCostUnit.DOLLARSPERKW, + CurrentUnits=EnergyCostUnit.DOLLARSPERKW, + ToolTipText='The total capital expenditure (CAPEX) required to construct the plant, ' + 'normalized per kilowatt of capacity. ' + 'This metric is calculated based on the maximum net electricity generation of the facility. ' + 'It reflects all direct and indirect costs, contingency, and applicable cost escalations ' + 'included in the base Total CAPEX.', + ) # noinspection SpellCheckingInspection self.Coam = self.OutputParameterDict[self.Coam.Name] = OutputParameter( @@ -3521,6 +3532,16 @@ def _calculate_sam_economics(self, model: Model) -> None: # since SAM Economic Model doesn't subtract ITC from this value. self.capex_total.value = (self.sam_economics_calculations.capex.quantity() .to(self.capex_total.CurrentUnits.value).magnitude) + # self.capex_total_per_kw.value = PlainQuantity(self.capex_total.value, f'{self.capex_total.CurrentUnits}' + + # TODO define this as an output of SurfacePlant rather than calculating it on-demand here and elsewhere + max_net_electricity_generation_kw = quantity( + np.max(model.surfaceplant.NetElectricityProduced.value), + model.surfaceplant.NetElectricityProduced.CurrentUnits + ).to('kW') + capex_total_per_kw_q = self.capex_total.quantity().to('USD') / max_net_electricity_generation_kw + self.capex_total_per_kw.value = capex_total_per_kw_q.magnitude + self.CCap.value = (self.sam_economics_calculations.capex.quantity() .to(self.CCap.CurrentUnits.value).magnitude) diff --git a/src/geophires_x/Outputs.py b/src/geophires_x/Outputs.py index 050c41ff3..71cbe5963 100644 --- a/src/geophires_x/Outputs.py +++ b/src/geophires_x/Outputs.py @@ -221,6 +221,7 @@ def PrintOutputs(self, model: Model): if is_sam_econ_model: f.write(f' {Outputs._field_label(econ.capex_total.display_name, 50)}{econ.capex_total.value:10.2f} {econ.capex_total.CurrentUnits.value}\n') + f.write(f' {Outputs._field_label(econ.capex_total_per_kw.display_name, 50)}{econ.capex_total_per_kw.value:10.2f} {econ.capex_total_per_kw.CurrentUnits.value}\n') f.write(f' Number of production wells: {model.wellbores.nprod.value:10.0f}'+NL) f.write(f' Number of injection wells: {model.wellbores.ninj.value:10.0f}'+NL) diff --git a/src/geophires_x_client/geophires_x_result.py b/src/geophires_x_client/geophires_x_result.py index d96393cd9..d203582f2 100644 --- a/src/geophires_x_client/geophires_x_result.py +++ b/src/geophires_x_client/geophires_x_result.py @@ -44,6 +44,7 @@ class GeophiresXResult: 'Average Net Electricity Production', 'Electricity breakeven price', 'Total CAPEX', + 'Total CAPEX ($/kW)', 'Average Direct-Use Heat Production', 'Direct-Use heat breakeven price', 'Direct-Use heat breakeven price (LCOH)', diff --git a/src/geophires_x_schema_generator/geophires-result.json b/src/geophires_x_schema_generator/geophires-result.json index f3ea69504..9a01c92f2 100644 --- a/src/geophires_x_schema_generator/geophires-result.json +++ b/src/geophires_x_schema_generator/geophires-result.json @@ -27,6 +27,11 @@ "description": "The total capital expenditure (CAPEX) required to construct the plant. This value includes all direct and indirect costs, and contingency. For SAM Economic models, it also includes any cost escalation from inflation during construction. It is used as the total installed cost input for SAM Economic Models.", "units": "MUSD" }, + "Total CAPEX ($/kW)": { + "type": "number", + "description": "The total capital expenditure (CAPEX) required to construct the plant, normalized per kilowatt of capacity. This metric is calculated based on the maximum net electricity generation of the facility. It reflects all direct and indirect costs, contingency, and applicable cost escalations included in the base Total CAPEX.", + "units": "USD/kW" + }, "Average Direct-Use Heat Production": {}, "Direct-Use heat breakeven price": {}, "Direct-Use heat breakeven price (LCOH)": { diff --git a/tests/examples/Fervo_Project_Cape-4.out b/tests/examples/Fervo_Project_Cape-4.out index 58aa7850a..1b31a31bd 100644 --- a/tests/examples/Fervo_Project_Cape-4.out +++ b/tests/examples/Fervo_Project_Cape-4.out @@ -4,10 +4,10 @@ Simulation Metadata ---------------------- - GEOPHIRES Version: 3.11.3 - Simulation Date: 2026-01-17 - Simulation Time: 09:41 - Calculation Time: 2.234 sec + GEOPHIRES Version: 3.11.15 + Simulation Date: 2026-02-27 + Simulation Time: 09:06 + Calculation Time: 1.888 sec ***SUMMARY OF RESULTS*** @@ -15,6 +15,7 @@ Simulation Metadata Average Net Electricity Production: 532.53 MW Electricity breakeven price: 8.11 cents/kWh Total CAPEX: 2660.87 MUSD + Total CAPEX ($/kW): 4953.80 USD/kW Number of production wells: 59 Number of injection wells: 59 Flowrate per production well: 107.0 kg/sec @@ -328,7 +329,7 @@ After-tax cumulative NPV ($) -1,064,346,550 -276,360,558 - AFTER-TAX LCOE AND PPA PRICE Annual costs ($) -1,064,346,550 504,481,845 -279,761,764 -280,941,051 -282,053,576 -283,104,409 -283,946,673 -284,197,129 -283,198,821 -283,951,600 -287,996,326 -289,476,868 -290,828,818 -292,141,214 -293,348,448 -294,183,709 -294,099,170 -292,511,863 -297,725,623 -299,899,742 -301,618,330 -318,291,569 -334,925,356 -336,358,826 -337,173,733 -336,651,121 -338,088,802 -343,176,493 -345,487,456 -347,698,476 627,560,501 PPA revenue ($) 0 398,360,985 400,859,527 404,023,741 406,864,580 409,397,136 411,063,538 410,414,761 404,969,797 406,031,044 419,401,219 423,001,126 426,005,415 428,743,476 430,961,457 431,646,734 428,727,061 419,997,324 436,749,150 441,881,181 445,124,646 448,012,403 450,560,179 452,154,561 451,204,088 444,986,839 445,920,708 460,361,453 464,070,591 467,122,922 469,876,708 -Electricity to grid (kWh) 0.0 4,193,273,525 4,219,573,970 4,227,516,388 4,232,001,035 4,233,245,126 4,225,570,913 4,194,325,606 4,114,710,394 4,101,737,992 4,212,547,398 4,224,519,385 4,230,441,060 4,233,667,186 4,231,750,368 4,214,888,525 4,163,207,043 4,055,985,743 4,194,671,056 4,220,853,770 4,228,811,003 4,233,321,393 4,234,588,146 4,226,928,684 4,195,686,141 4,116,056,232 4,103,061,353 4,213,834,812 4,225,738,401 4,231,569,184 4,234,649,495 +Electricity to grid (kWh) 0 4,193,273,525 4,219,573,970 4,227,516,388 4,232,001,035 4,233,245,126 4,225,570,913 4,194,325,606 4,114,710,394 4,101,737,992 4,212,547,398 4,224,519,385 4,230,441,060 4,233,667,186 4,231,750,368 4,214,888,525 4,163,207,043 4,055,985,743 4,194,671,056 4,220,853,770 4,228,811,003 4,233,321,393 4,234,588,146 4,226,928,684 4,195,686,141 4,116,056,232 4,103,061,353 4,213,834,812 4,225,738,401 4,231,569,184 4,234,649,495 Present value of annual costs ($) 2,298,728,919 Present value of annual energy nominal (kWh) 28,355,365,264 diff --git a/tests/examples/Fervo_Project_Cape-5.out b/tests/examples/Fervo_Project_Cape-5.out index 6a303150a..c6cbacf72 100644 --- a/tests/examples/Fervo_Project_Cape-5.out +++ b/tests/examples/Fervo_Project_Cape-5.out @@ -4,10 +4,10 @@ Simulation Metadata ---------------------- - GEOPHIRES Version: 3.11.12 - Simulation Date: 2026-02-16 - Simulation Time: 10:58 - Calculation Time: 1.862 sec + GEOPHIRES Version: 3.11.15 + Simulation Date: 2026-02-27 + Simulation Time: 09:11 + Calculation Time: 1.882 sec ***SUMMARY OF RESULTS*** @@ -15,6 +15,7 @@ Simulation Metadata Average Net Electricity Production: 510.13 MW Electricity breakeven price: 8.59 cents/kWh Total CAPEX: 2865.69 MUSD + Total CAPEX ($/kW): 5595.03 USD/kW Number of production wells: 56 Number of injection wells: 38 Flowrate per production well: 107.0 kg/sec diff --git a/tests/examples/Fervo_Project_Cape-6.out b/tests/examples/Fervo_Project_Cape-6.out index 8a0003fbe..973e5f859 100644 --- a/tests/examples/Fervo_Project_Cape-6.out +++ b/tests/examples/Fervo_Project_Cape-6.out @@ -4,10 +4,10 @@ Simulation Metadata ---------------------- - GEOPHIRES Version: 3.11.12 - Simulation Date: 2026-02-16 - Simulation Time: 10:58 - Calculation Time: 1.884 sec + GEOPHIRES Version: 3.11.15 + Simulation Date: 2026-02-27 + Simulation Time: 09:15 + Calculation Time: 1.872 sec ***SUMMARY OF RESULTS*** @@ -15,6 +15,7 @@ Simulation Metadata Average Net Electricity Production: 103.22 MW Electricity breakeven price: 8.93 cents/kWh Total CAPEX: 577.72 MUSD + Total CAPEX ($/kW): 5573.04 USD/kW Number of production wells: 12 Number of injection wells: 8 Flowrate per production well: 100.0 kg/sec diff --git a/tests/examples/Fervo_Project_Cape-6.txt b/tests/examples/Fervo_Project_Cape-6.txt index 24ba6729a..31229fbb8 100644 --- a/tests/examples/Fervo_Project_Cape-6.txt +++ b/tests/examples/Fervo_Project_Cape-6.txt @@ -52,8 +52,6 @@ End-Use Option, 1, -- Electricity Power Plant Type, 2, -- Gen 2 ORC units (Turboden, 2025). Plant Lifetime, 30, -- Sets the project economic horizon, aligned with Fervo's anticipated 30-year well life (Fervo Energy, 2025). Modeling Distinction: While Fervo projects physical wellbore integrity for 30 years, GEOPHIRES simulates "redrilling events" to model thermal management of the reservoir volume. This treats the 30-year lifespan as an aggregate of shorter-lived thermal cycles delineated by discrete redrilling events occurring at intervals dictated by the Maximum Drawdown parameter. The modeled cost of each redrilling event is equivalent to the drilling and stimulation cost of the entire wellfield, serving as a conservative cost proxy for the major interventions (e.g., sidetracking and stimulating laterals into fresh rock, or drilling new wells if necessary) required to sustain the PPA target against thermal depletion. -Reservoir Model, 1 - Surface Temperature, 13, -- Surface temperature near Milford, UT (38.4987670, -112.9163432) ([Project InnerSpace, 2025](https://geomap.projectinnerspace.org/test/)). Number of Segments, 3 @@ -70,6 +68,7 @@ Reservoir Heat Capacity, 790 Reservoir Thermal Conductivity, 3.05 Reservoir Porosity, 0.0118 +Reservoir Model, 1, -- See the [reservoir engineering calibration section](#res-eng-params-calibration-section) for additional details. Reservoir Volume Option, 1, -- FRAC_NUM_SEP: Reservoir volume calculated with fracture separation and number of fractures as input Number of Fractures per Stimulated Well, 150, -- The model assumes an Extreme Limited Entry stimulation design (Fervo Energy, 2023) utilizing 12 stages with 15 clusters per stage (derived from Singh et al., 2025) and 81–85% stimulation success rate per 2024b ATB Moderate Scenario (NREL, 2025). diff --git a/tests/examples/example_SAM-single-owner-PPA-2.out b/tests/examples/example_SAM-single-owner-PPA-2.out index dc4a4a10d..fdffb613b 100644 --- a/tests/examples/example_SAM-single-owner-PPA-2.out +++ b/tests/examples/example_SAM-single-owner-PPA-2.out @@ -4,10 +4,10 @@ Simulation Metadata ---------------------- - GEOPHIRES Version: 3.11.9 - Simulation Date: 2026-01-28 - Simulation Time: 12:11 - Calculation Time: 1.059 sec + GEOPHIRES Version: 3.11.15 + Simulation Date: 2026-02-27 + Simulation Time: 09:16 + Calculation Time: 1.054 sec ***SUMMARY OF RESULTS*** @@ -15,6 +15,7 @@ Simulation Metadata Average Net Electricity Production: 404.31 MW Electricity breakeven price: 7.37 cents/kWh Total CAPEX: 1609.42 MUSD + Total CAPEX ($/kW): 3971.97 USD/kW Number of production wells: 39 Number of injection wells: 39 Flowrate per production well: 120.0 kg/sec diff --git a/tests/examples/example_SAM-single-owner-PPA-3.out b/tests/examples/example_SAM-single-owner-PPA-3.out index 213669cdc..5be0fd5f0 100644 --- a/tests/examples/example_SAM-single-owner-PPA-3.out +++ b/tests/examples/example_SAM-single-owner-PPA-3.out @@ -4,10 +4,10 @@ Simulation Metadata ---------------------- - GEOPHIRES Version: 3.11.9 - Simulation Date: 2026-01-28 - Simulation Time: 12:11 - Calculation Time: 1.237 sec + GEOPHIRES Version: 3.11.15 + Simulation Date: 2026-02-27 + Simulation Time: 09:16 + Calculation Time: 1.261 sec ***SUMMARY OF RESULTS*** @@ -15,6 +15,7 @@ Simulation Metadata Average Net Electricity Production: 58.87 MW Electricity breakeven price: 7.64 cents/kWh Total CAPEX: 275.47 MUSD + Total CAPEX ($/kW): 4667.41 USD/kW Number of production wells: 6 Number of injection wells: 6 Flowrate per production well: 100.0 kg/sec diff --git a/tests/examples/example_SAM-single-owner-PPA-4.out b/tests/examples/example_SAM-single-owner-PPA-4.out index 18e4b13ba..4d5d8dd2d 100644 --- a/tests/examples/example_SAM-single-owner-PPA-4.out +++ b/tests/examples/example_SAM-single-owner-PPA-4.out @@ -4,10 +4,10 @@ Simulation Metadata ---------------------- - GEOPHIRES Version: 3.11.9 - Simulation Date: 2026-01-28 - Simulation Time: 12:11 - Calculation Time: 1.448 sec + GEOPHIRES Version: 3.11.15 + Simulation Date: 2026-02-27 + Simulation Time: 09:16 + Calculation Time: 1.281 sec ***SUMMARY OF RESULTS*** @@ -15,6 +15,7 @@ Simulation Metadata Average Net Electricity Production: 54.96 MW Electricity breakeven price: 6.97 cents/kWh Total CAPEX: 225.81 MUSD + Total CAPEX ($/kW): 4097.10 USD/kW Number of production wells: 6 Number of injection wells: 6 Flowrate per production well: 100.0 kg/sec diff --git a/tests/examples/example_SAM-single-owner-PPA-5.out b/tests/examples/example_SAM-single-owner-PPA-5.out index 9efc6aae0..e5ddab387 100644 --- a/tests/examples/example_SAM-single-owner-PPA-5.out +++ b/tests/examples/example_SAM-single-owner-PPA-5.out @@ -4,10 +4,10 @@ Simulation Metadata ---------------------- - GEOPHIRES Version: 3.11.12 - Simulation Date: 2026-02-01 - Simulation Time: 09:42 - Calculation Time: 2.228 sec + GEOPHIRES Version: 3.11.15 + Simulation Date: 2026-02-27 + Simulation Time: 09:16 + Calculation Time: 1.919 sec ***SUMMARY OF RESULTS*** @@ -15,6 +15,7 @@ Simulation Metadata Average Net Electricity Production: 110.58 MW Electricity breakeven price: 7.78 cents/kWh Total CAPEX: 710.63 MUSD + Total CAPEX ($/kW): 6406.82 USD/kW Number of production wells: 15 Number of injection wells: 15 Flowrate per production well: 80.0 kg/sec diff --git a/tests/examples/example_SAM-single-owner-PPA.out b/tests/examples/example_SAM-single-owner-PPA.out index 27cb5cf4d..87c6cc2ac 100644 --- a/tests/examples/example_SAM-single-owner-PPA.out +++ b/tests/examples/example_SAM-single-owner-PPA.out @@ -4,10 +4,10 @@ Simulation Metadata ---------------------- - GEOPHIRES Version: 3.11.9 - Simulation Date: 2026-01-28 - Simulation Time: 12:07 - Calculation Time: 1.275 sec + GEOPHIRES Version: 3.11.15 + Simulation Date: 2026-02-27 + Simulation Time: 09:11 + Calculation Time: 1.257 sec ***SUMMARY OF RESULTS*** @@ -15,6 +15,7 @@ Simulation Metadata Average Net Electricity Production: 54.96 MW Electricity breakeven price: 6.34 cents/kWh Total CAPEX: 225.81 MUSD + Total CAPEX ($/kW): 4097.10 USD/kW Number of production wells: 6 Number of injection wells: 6 Flowrate per production well: 100.0 kg/sec From ac99744c6c08764e56a729a4180cdf2df2e4fd33 Mon Sep 17 00:00:00 2001 From: softwareengineerprogrammer <4056124+softwareengineerprogrammer@users.noreply.github.com> Date: Fri, 27 Feb 2026 09:27:45 -0800 Subject: [PATCH 2/4] =?UTF-8?q?Bump=20version:=203.11.15=20=E2=86=92=203.1?= =?UTF-8?q?1.16?= 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 5a6589af8..10ae0fba5 100644 --- a/.bumpversion.cfg +++ b/.bumpversion.cfg @@ -1,5 +1,5 @@ [bumpversion] -current_version = 3.11.15 +current_version = 3.11.16 commit = True tag = True diff --git a/.cookiecutterrc b/.cookiecutterrc index cdb8da3c3..9f30e2722 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.11.15 + version: 3.11.16 version_manager: "bump2version" website: "https://github.com/NREL" year_from: "2023" diff --git a/README.rst b/README.rst index 622302ab4..ad03690a2 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.11.15.svg +.. |commits-since| image:: https://img.shields.io/github/commits-since/softwareengineerprogrammer/GEOPHIRES-X/v3.11.16.svg :alt: Commits since latest release - :target: https://github.com/softwareengineerprogrammer/GEOPHIRES-X/compare/v3.11.15...main + :target: https://github.com/softwareengineerprogrammer/GEOPHIRES-X/compare/v3.11.16...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 ac372683f..9f3641463 100644 --- a/docs/conf.py +++ b/docs/conf.py @@ -18,7 +18,7 @@ year = '2025' author = 'NREL' copyright = f'{year}, {author}' -version = release = '3.11.15' +version = release = '3.11.16' pygments_style = 'trac' templates_path = ['./templates'] diff --git a/setup.py b/setup.py index f64a89172..a559658d5 100755 --- a/setup.py +++ b/setup.py @@ -13,7 +13,7 @@ def read(*names, **kwargs): setup( name='geophires-x', - version='3.11.15', + version='3.11.16', 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 84ede0673..99c945400 100644 --- a/src/geophires_x/__init__.py +++ b/src/geophires_x/__init__.py @@ -1 +1 @@ -__version__ = '3.11.15' +__version__ = '3.11.16' From fb9b354fd105785f9bc8bd816df5fdbbe01acdc6 Mon Sep 17 00:00:00 2001 From: softwareengineerprogrammer <4056124+softwareengineerprogrammer@users.noreply.github.com> Date: Fri, 27 Feb 2026 09:54:08 -0800 Subject: [PATCH 3/4] round total capex per kw to nearest dollar --- ...roject_cape-5-sensitivity-analysis-irr.svg | 206 ++++++++--------- ...oject_cape-5-sensitivity-analysis-lcoe.svg | 200 ++++++++--------- ...ape-5-sensitivity-analysis-project_npv.svg | 210 +++++++++--------- src/geophires_x/Outputs.py | 2 +- tests/examples/Fervo_Project_Cape-4.out | 8 +- tests/examples/Fervo_Project_Cape-5.out | 8 +- tests/examples/Fervo_Project_Cape-6.out | 8 +- .../example_SAM-single-owner-PPA-2.out | 8 +- .../example_SAM-single-owner-PPA-3.out | 8 +- .../example_SAM-single-owner-PPA-4.out | 8 +- .../example_SAM-single-owner-PPA-5.out | 8 +- .../examples/example_SAM-single-owner-PPA.out | 8 +- 12 files changed, 341 insertions(+), 341 deletions(-) diff --git a/docs/_images/fervo_project_cape-5-sensitivity-analysis-irr.svg b/docs/_images/fervo_project_cape-5-sensitivity-analysis-irr.svg index 54af552a3..1de52409f 100644 --- a/docs/_images/fervo_project_cape-5-sensitivity-analysis-irr.svg +++ b/docs/_images/fervo_project_cape-5-sensitivity-analysis-irr.svg @@ -6,7 +6,7 @@ - 2026-02-27T09:15:53.909085 + 2026-02-27T09:53:20.879903 image/svg+xml @@ -40,23 +40,23 @@ z +" clip-path="url(#p1380ac9988)" style="fill: none; stroke-dasharray: 7.4,3.2; stroke-dashoffset: 0; stroke: #003c4d; stroke-width: 2"/> +" clip-path="url(#p1380ac9988)" style="fill: none; stroke-dasharray: 0.8,1.32; stroke-dashoffset: 0; stroke: #aaaaaa; stroke-opacity: 0.7; stroke-width: 0.8"/> - - + @@ -116,11 +116,11 @@ z +" clip-path="url(#p1380ac9988)" style="fill: none; stroke-dasharray: 0.8,1.32; stroke-dashoffset: 0; stroke: #aaaaaa; stroke-opacity: 0.7; stroke-width: 0.8"/> - + @@ -134,11 +134,11 @@ L 421.635935 97.55355 +" clip-path="url(#p1380ac9988)" style="fill: none; stroke-dasharray: 0.8,1.32; stroke-dashoffset: 0; stroke: #aaaaaa; stroke-opacity: 0.7; stroke-width: 0.8"/> - + @@ -153,11 +153,11 @@ L 553.962493 97.55355 +" clip-path="url(#p1380ac9988)" style="fill: none; stroke-dasharray: 0.8,1.32; stroke-dashoffset: 0; stroke: #aaaaaa; stroke-opacity: 0.7; stroke-width: 0.8"/> - + @@ -1528,17 +1528,17 @@ L 777.594375 97.55355 " style="fill: none; stroke: #aaaaaa; stroke-width: 0.8; stroke-linejoin: miter; stroke-linecap: square"/> - + +" clip-path="url(#p1380ac9988)" style="fill: #808080; stroke: #ffffff; stroke-width: 0.5; stroke-linejoin: miter"/> - + @@ -1550,7 +1550,7 @@ z - + @@ -1657,7 +1657,7 @@ z - + @@ -1669,17 +1669,17 @@ z - + +" clip-path="url(#p1380ac9988)" style="fill: #4ab67d; stroke: #ffffff; stroke-width: 0.5; stroke-linejoin: miter"/> - + @@ -1747,7 +1747,7 @@ z - + @@ -1758,17 +1758,17 @@ z - + +" clip-path="url(#p1380ac9988)" style="fill: #84d1a8; stroke: #ffffff; stroke-width: 0.5; stroke-linejoin: miter"/> - + @@ -1779,7 +1779,7 @@ z - + @@ -1833,7 +1833,7 @@ z - + @@ -1845,17 +1845,17 @@ z - + +" clip-path="url(#p1380ac9988)" style="fill: #808080; stroke: #ffffff; stroke-width: 0.5; stroke-linejoin: miter"/> - + @@ -1867,7 +1867,7 @@ z - + @@ -1881,17 +1881,17 @@ z - + +" clip-path="url(#p1380ac9988)" style="fill: #b0b0b0; stroke: #ffffff; stroke-width: 0.5; stroke-linejoin: miter"/> - + @@ -1905,7 +1905,7 @@ z - + @@ -1973,7 +1973,7 @@ z - + @@ -1984,17 +1984,17 @@ z - + +" clip-path="url(#p1380ac9988)" style="fill: #4ab67d; stroke: #ffffff; stroke-width: 0.5; stroke-linejoin: miter"/> - + @@ -2057,7 +2057,7 @@ z - + @@ -2072,17 +2072,17 @@ z - + +" clip-path="url(#p1380ac9988)" style="fill: #84d1a8; stroke: #ffffff; stroke-width: 0.5; stroke-linejoin: miter"/> - + @@ -2097,7 +2097,7 @@ z - + @@ -2109,7 +2109,7 @@ z - + @@ -2121,27 +2121,27 @@ z - + +" clip-path="url(#p1380ac9988)" style="fill: #808080; stroke: #ffffff; stroke-width: 0.5; stroke-linejoin: miter"/> - + +" clip-path="url(#p1380ac9988)" style="fill: #b0b0b0; stroke: #ffffff; stroke-width: 0.5; stroke-linejoin: miter"/> - + @@ -2159,7 +2159,7 @@ z - + @@ -2171,7 +2171,7 @@ z - + @@ -2183,17 +2183,17 @@ z - + +" clip-path="url(#p1380ac9988)" style="fill: #4ab67d; stroke: #ffffff; stroke-width: 0.5; stroke-linejoin: miter"/> - + @@ -2209,7 +2209,7 @@ z - + @@ -2221,27 +2221,27 @@ z - + +" clip-path="url(#p1380ac9988)" style="fill: #808080; stroke: #ffffff; stroke-width: 0.5; stroke-linejoin: miter"/> - + +" clip-path="url(#p1380ac9988)" style="fill: #b0b0b0; stroke: #ffffff; stroke-width: 0.5; stroke-linejoin: miter"/> - + @@ -2259,7 +2259,7 @@ z - + @@ -2271,7 +2271,7 @@ z - + @@ -2283,17 +2283,17 @@ z - + +" clip-path="url(#p1380ac9988)" style="fill: #4ab67d; stroke: #ffffff; stroke-width: 0.5; stroke-linejoin: miter"/> - + @@ -2309,7 +2309,7 @@ z - + @@ -2321,27 +2321,27 @@ z - + +" clip-path="url(#p1380ac9988)" style="fill: #808080; stroke: #ffffff; stroke-width: 0.5; stroke-linejoin: miter"/> - + +" clip-path="url(#p1380ac9988)" style="fill: #b0b0b0; stroke: #ffffff; stroke-width: 0.5; stroke-linejoin: miter"/> - + @@ -2369,7 +2369,7 @@ z - + @@ -2382,7 +2382,7 @@ z - + @@ -2393,17 +2393,17 @@ z - + +" clip-path="url(#p1380ac9988)" style="fill: #4ab67d; stroke: #ffffff; stroke-width: 0.5; stroke-linejoin: miter"/> - + @@ -2447,7 +2447,7 @@ z - + @@ -2461,17 +2461,17 @@ z - + +" clip-path="url(#p1380ac9988)" style="fill: #84d1a8; stroke: #ffffff; stroke-width: 0.5; stroke-linejoin: miter"/> - + @@ -2485,7 +2485,7 @@ z - + @@ -2498,7 +2498,7 @@ z - + @@ -2510,17 +2510,17 @@ z - + +" clip-path="url(#p1380ac9988)" style="fill: #808080; stroke: #ffffff; stroke-width: 0.5; stroke-linejoin: miter"/> - + @@ -2532,7 +2532,7 @@ z - + @@ -2542,17 +2542,17 @@ z - + +" clip-path="url(#p1380ac9988)" style="fill: #b0b0b0; stroke: #ffffff; stroke-width: 0.5; stroke-linejoin: miter"/> - + @@ -2562,7 +2562,7 @@ z - + @@ -2574,7 +2574,7 @@ z - + @@ -2586,24 +2586,24 @@ z - + +" clip-path="url(#p1380ac9988)" style="fill: #4ab67d; stroke: #ffffff; stroke-width: 0.5; stroke-linejoin: miter"/> - + - + @@ -2615,27 +2615,27 @@ z - + +" clip-path="url(#p1380ac9988)" style="fill: #808080; stroke: #ffffff; stroke-width: 0.5; stroke-linejoin: miter"/> - + +" clip-path="url(#p1380ac9988)" style="fill: #b0b0b0; stroke: #ffffff; stroke-width: 0.5; stroke-linejoin: miter"/> - + @@ -2654,7 +2654,7 @@ z - + @@ -2666,13 +2666,13 @@ z - + +" clip-path="url(#p1380ac9988)" style="fill: #4ab67d; stroke: #ffffff; stroke-width: 0.5; stroke-linejoin: miter"/> @@ -3052,7 +3052,7 @@ z - + diff --git a/docs/_images/fervo_project_cape-5-sensitivity-analysis-lcoe.svg b/docs/_images/fervo_project_cape-5-sensitivity-analysis-lcoe.svg index efff4d918..bb301d97c 100644 --- a/docs/_images/fervo_project_cape-5-sensitivity-analysis-lcoe.svg +++ b/docs/_images/fervo_project_cape-5-sensitivity-analysis-lcoe.svg @@ -6,7 +6,7 @@ - 2026-02-27T09:15:54.188209 + 2026-02-27T09:53:20.934933 image/svg+xml @@ -40,23 +40,23 @@ z +" clip-path="url(#pc8cb8ab830)" style="fill: none; stroke-dasharray: 7.4,3.2; stroke-dashoffset: 0; stroke: #003c4d; stroke-width: 2"/> +" clip-path="url(#pc8cb8ab830)" style="fill: none; stroke-dasharray: 0.8,1.32; stroke-dashoffset: 0; stroke: #aaaaaa; stroke-opacity: 0.7; stroke-width: 0.8"/> - - + @@ -104,11 +104,11 @@ z +" clip-path="url(#pc8cb8ab830)" style="fill: none; stroke-dasharray: 0.8,1.32; stroke-dashoffset: 0; stroke: #aaaaaa; stroke-opacity: 0.7; stroke-width: 0.8"/> - + @@ -139,11 +139,11 @@ z +" clip-path="url(#pc8cb8ab830)" style="fill: none; stroke-dasharray: 0.8,1.32; stroke-dashoffset: 0; stroke: #aaaaaa; stroke-opacity: 0.7; stroke-width: 0.8"/> - + @@ -180,11 +180,11 @@ z +" clip-path="url(#pc8cb8ab830)" style="fill: none; stroke-dasharray: 0.8,1.32; stroke-dashoffset: 0; stroke: #aaaaaa; stroke-opacity: 0.7; stroke-width: 0.8"/> - + @@ -198,11 +198,11 @@ L 534.621117 97.55355 +" clip-path="url(#pc8cb8ab830)" style="fill: none; stroke-dasharray: 0.8,1.32; stroke-dashoffset: 0; stroke: #aaaaaa; stroke-opacity: 0.7; stroke-width: 0.8"/> - + @@ -216,11 +216,11 @@ L 636.390021 97.55355 +" clip-path="url(#pc8cb8ab830)" style="fill: none; stroke-dasharray: 0.8,1.32; stroke-dashoffset: 0; stroke: #aaaaaa; stroke-opacity: 0.7; stroke-width: 0.8"/> - + @@ -1618,17 +1618,17 @@ L 777.594375 97.55355 " style="fill: none; stroke: #aaaaaa; stroke-width: 0.8; stroke-linejoin: miter; stroke-linecap: square"/> - + +" clip-path="url(#pc8cb8ab830)" style="fill: #4ab67d; stroke: #ffffff; stroke-width: 0.5; stroke-linejoin: miter"/> - + @@ -1803,7 +1803,7 @@ z - + @@ -1814,17 +1814,17 @@ z - + +" clip-path="url(#pc8cb8ab830)" style="fill: #84d1a8; stroke: #ffffff; stroke-width: 0.5; stroke-linejoin: miter"/> - + @@ -1833,7 +1833,7 @@ z - + @@ -1881,17 +1881,17 @@ z - + +" clip-path="url(#pc8cb8ab830)" style="fill: #808080; stroke: #ffffff; stroke-width: 0.5; stroke-linejoin: miter"/> - + @@ -1903,7 +1903,7 @@ z - + @@ -1982,7 +1982,7 @@ z - + @@ -1997,27 +1997,27 @@ z - + +" clip-path="url(#pc8cb8ab830)" style="fill: #4ab67d; stroke: #ffffff; stroke-width: 0.5; stroke-linejoin: miter"/> - + +" clip-path="url(#pc8cb8ab830)" style="fill: #84d1a8; stroke: #ffffff; stroke-width: 0.5; stroke-linejoin: miter"/> - + @@ -2029,7 +2029,7 @@ z - + @@ -2044,27 +2044,27 @@ z - + +" clip-path="url(#pc8cb8ab830)" style="fill: #808080; stroke: #ffffff; stroke-width: 0.5; stroke-linejoin: miter"/> - + +" clip-path="url(#pc8cb8ab830)" style="fill: #b0b0b0; stroke: #ffffff; stroke-width: 0.5; stroke-linejoin: miter"/> - + @@ -2077,7 +2077,7 @@ z - + @@ -2092,17 +2092,17 @@ z - + +" clip-path="url(#pc8cb8ab830)" style="fill: #4ab67d; stroke: #ffffff; stroke-width: 0.5; stroke-linejoin: miter"/> - + @@ -2118,7 +2118,7 @@ z - + @@ -2133,27 +2133,27 @@ z - + +" clip-path="url(#pc8cb8ab830)" style="fill: #808080; stroke: #ffffff; stroke-width: 0.5; stroke-linejoin: miter"/> - + +" clip-path="url(#pc8cb8ab830)" style="fill: #b0b0b0; stroke: #ffffff; stroke-width: 0.5; stroke-linejoin: miter"/> - + @@ -2171,7 +2171,7 @@ z - + @@ -2187,7 +2187,7 @@ z - + @@ -2203,17 +2203,17 @@ z - + +" clip-path="url(#pc8cb8ab830)" style="fill: #4ab67d; stroke: #ffffff; stroke-width: 0.5; stroke-linejoin: miter"/> - + @@ -2229,7 +2229,7 @@ z - + @@ -2244,27 +2244,27 @@ z - + +" clip-path="url(#pc8cb8ab830)" style="fill: #808080; stroke: #ffffff; stroke-width: 0.5; stroke-linejoin: miter"/> - + +" clip-path="url(#pc8cb8ab830)" style="fill: #b0b0b0; stroke: #ffffff; stroke-width: 0.5; stroke-linejoin: miter"/> - + @@ -2282,7 +2282,7 @@ z - + @@ -2325,7 +2325,7 @@ z - + @@ -2341,27 +2341,27 @@ z - + +" clip-path="url(#pc8cb8ab830)" style="fill: #4ab67d; stroke: #ffffff; stroke-width: 0.5; stroke-linejoin: miter"/> - + +" clip-path="url(#pc8cb8ab830)" style="fill: #84d1a8; stroke: #ffffff; stroke-width: 0.5; stroke-linejoin: miter"/> - + @@ -2409,7 +2409,7 @@ z - + @@ -2438,17 +2438,17 @@ z - + +" clip-path="url(#pc8cb8ab830)" style="fill: #4ab67d; stroke: #ffffff; stroke-width: 0.5; stroke-linejoin: miter"/> - + @@ -2462,7 +2462,7 @@ z - + @@ -2519,7 +2519,7 @@ z - + @@ -2534,17 +2534,17 @@ z - + +" clip-path="url(#pc8cb8ab830)" style="fill: #808080; stroke: #ffffff; stroke-width: 0.5; stroke-linejoin: miter"/> - + @@ -2557,7 +2557,7 @@ z - + @@ -2607,7 +2607,7 @@ z - + @@ -2623,24 +2623,24 @@ z - + +" clip-path="url(#pc8cb8ab830)" style="fill: #4ab67d; stroke: #ffffff; stroke-width: 0.5; stroke-linejoin: miter"/> - + - + @@ -2655,17 +2655,17 @@ z - + +" clip-path="url(#pc8cb8ab830)" style="fill: #808080; stroke: #ffffff; stroke-width: 0.5; stroke-linejoin: miter"/> - + @@ -2681,7 +2681,7 @@ z - + @@ -2691,17 +2691,17 @@ z - + +" clip-path="url(#pc8cb8ab830)" style="fill: #b0b0b0; stroke: #ffffff; stroke-width: 0.5; stroke-linejoin: miter"/> - + @@ -2711,7 +2711,7 @@ z - + @@ -2727,7 +2727,7 @@ z - + @@ -2743,37 +2743,37 @@ z - + +" clip-path="url(#pc8cb8ab830)" style="fill: #4ab67d; stroke: #ffffff; stroke-width: 0.5; stroke-linejoin: miter"/> - + +" clip-path="url(#pc8cb8ab830)" style="fill: #808080; stroke: #ffffff; stroke-width: 0.5; stroke-linejoin: miter"/> - + +" clip-path="url(#pc8cb8ab830)" style="fill: #b0b0b0; stroke: #ffffff; stroke-width: 0.5; stroke-linejoin: miter"/> - + @@ -2793,7 +2793,7 @@ z - + @@ -3248,7 +3248,7 @@ z - + diff --git a/docs/_images/fervo_project_cape-5-sensitivity-analysis-project_npv.svg b/docs/_images/fervo_project_cape-5-sensitivity-analysis-project_npv.svg index d873f4881..671506ffb 100644 --- a/docs/_images/fervo_project_cape-5-sensitivity-analysis-project_npv.svg +++ b/docs/_images/fervo_project_cape-5-sensitivity-analysis-project_npv.svg @@ -6,7 +6,7 @@ - 2026-02-27T09:15:53.905376 + 2026-02-27T09:53:21.774454 image/svg+xml @@ -40,23 +40,23 @@ z +" clip-path="url(#p3132e0a728)" style="fill: none; stroke-dasharray: 7.4,3.2; stroke-dashoffset: 0; stroke: #003c4d; stroke-width: 2"/> +" clip-path="url(#p3132e0a728)" style="fill: none; stroke-dasharray: 0.8,1.32; stroke-dashoffset: 0; stroke: #aaaaaa; stroke-opacity: 0.7; stroke-width: 0.8"/> - - + @@ -122,11 +122,11 @@ z +" clip-path="url(#p3132e0a728)" style="fill: none; stroke-dasharray: 0.8,1.32; stroke-dashoffset: 0; stroke: #aaaaaa; stroke-opacity: 0.7; stroke-width: 0.8"/> - + @@ -169,11 +169,11 @@ z +" clip-path="url(#p3132e0a728)" style="fill: none; stroke-dasharray: 0.8,1.32; stroke-dashoffset: 0; stroke: #aaaaaa; stroke-opacity: 0.7; stroke-width: 0.8"/> - + @@ -187,11 +187,11 @@ L 478.476269 97.55355 +" clip-path="url(#p3132e0a728)" style="fill: none; stroke-dasharray: 0.8,1.32; stroke-dashoffset: 0; stroke: #aaaaaa; stroke-opacity: 0.7; stroke-width: 0.8"/> - + @@ -207,11 +207,11 @@ L 595.65686 97.55355 +" clip-path="url(#p3132e0a728)" style="fill: none; stroke-dasharray: 0.8,1.32; stroke-dashoffset: 0; stroke: #aaaaaa; stroke-opacity: 0.7; stroke-width: 0.8"/> - + @@ -1620,17 +1620,17 @@ L 777.594375 97.55355 " style="fill: none; stroke: #aaaaaa; stroke-width: 0.8; stroke-linejoin: miter; stroke-linecap: square"/> - + +" clip-path="url(#p3132e0a728)" style="fill: #808080; stroke: #ffffff; stroke-width: 0.5; stroke-linejoin: miter"/> - + @@ -1642,7 +1642,7 @@ z - + @@ -1838,7 +1838,7 @@ z - + @@ -1860,17 +1860,17 @@ z - + +" clip-path="url(#p3132e0a728)" style="fill: #4ab67d; stroke: #ffffff; stroke-width: 0.5; stroke-linejoin: miter"/> - + @@ -1934,7 +1934,7 @@ z - + @@ -1945,17 +1945,17 @@ z - + +" clip-path="url(#p3132e0a728)" style="fill: #84d1a8; stroke: #ffffff; stroke-width: 0.5; stroke-linejoin: miter"/> - + @@ -1966,7 +1966,7 @@ z - + @@ -2002,7 +2002,7 @@ z - + @@ -2016,17 +2016,17 @@ z - + +" clip-path="url(#p3132e0a728)" style="fill: #808080; stroke: #ffffff; stroke-width: 0.5; stroke-linejoin: miter"/> - + @@ -2041,7 +2041,7 @@ z - + @@ -2055,17 +2055,17 @@ z - + +" clip-path="url(#p3132e0a728)" style="fill: #b0b0b0; stroke: #ffffff; stroke-width: 0.5; stroke-linejoin: miter"/> - + @@ -2077,7 +2077,7 @@ z - + @@ -2092,17 +2092,17 @@ z - + +" clip-path="url(#p3132e0a728)" style="fill: #4ab67d; stroke: #ffffff; stroke-width: 0.5; stroke-linejoin: miter"/> - + @@ -2149,7 +2149,7 @@ z - + @@ -2164,17 +2164,17 @@ z - + +" clip-path="url(#p3132e0a728)" style="fill: #84d1a8; stroke: #ffffff; stroke-width: 0.5; stroke-linejoin: miter"/> - + @@ -2189,7 +2189,7 @@ z - + @@ -2238,7 +2238,7 @@ z - + @@ -2252,27 +2252,27 @@ z - + +" clip-path="url(#p3132e0a728)" style="fill: #808080; stroke: #ffffff; stroke-width: 0.5; stroke-linejoin: miter"/> - + +" clip-path="url(#p3132e0a728)" style="fill: #b0b0b0; stroke: #ffffff; stroke-width: 0.5; stroke-linejoin: miter"/> - + @@ -2290,7 +2290,7 @@ z - + @@ -2332,7 +2332,7 @@ z - + @@ -2346,17 +2346,17 @@ z - + +" clip-path="url(#p3132e0a728)" style="fill: #4ab67d; stroke: #ffffff; stroke-width: 0.5; stroke-linejoin: miter"/> - + @@ -2372,7 +2372,7 @@ z - + @@ -2386,27 +2386,27 @@ z - + +" clip-path="url(#p3132e0a728)" style="fill: #808080; stroke: #ffffff; stroke-width: 0.5; stroke-linejoin: miter"/> - + +" clip-path="url(#p3132e0a728)" style="fill: #b0b0b0; stroke: #ffffff; stroke-width: 0.5; stroke-linejoin: miter"/> - + @@ -2424,7 +2424,7 @@ z - + @@ -2439,7 +2439,7 @@ z - + @@ -2453,17 +2453,17 @@ z - + +" clip-path="url(#p3132e0a728)" style="fill: #4ab67d; stroke: #ffffff; stroke-width: 0.5; stroke-linejoin: miter"/> - + @@ -2479,7 +2479,7 @@ z - + @@ -2493,27 +2493,27 @@ z - + +" clip-path="url(#p3132e0a728)" style="fill: #808080; stroke: #ffffff; stroke-width: 0.5; stroke-linejoin: miter"/> - + +" clip-path="url(#p3132e0a728)" style="fill: #b0b0b0; stroke: #ffffff; stroke-width: 0.5; stroke-linejoin: miter"/> - + @@ -2541,7 +2541,7 @@ z - + @@ -2556,7 +2556,7 @@ z - + @@ -2571,17 +2571,17 @@ z - + +" clip-path="url(#p3132e0a728)" style="fill: #4ab67d; stroke: #ffffff; stroke-width: 0.5; stroke-linejoin: miter"/> - + @@ -2596,7 +2596,7 @@ z - + @@ -2610,17 +2610,17 @@ z - + +" clip-path="url(#p3132e0a728)" style="fill: #84d1a8; stroke: #ffffff; stroke-width: 0.5; stroke-linejoin: miter"/> - + @@ -2634,7 +2634,7 @@ z - + @@ -2649,7 +2649,7 @@ z - + @@ -2663,17 +2663,17 @@ z - + +" clip-path="url(#p3132e0a728)" style="fill: #808080; stroke: #ffffff; stroke-width: 0.5; stroke-linejoin: miter"/> - + @@ -2688,7 +2688,7 @@ z - + @@ -2698,17 +2698,17 @@ z - + +" clip-path="url(#p3132e0a728)" style="fill: #b0b0b0; stroke: #ffffff; stroke-width: 0.5; stroke-linejoin: miter"/> - + @@ -2716,7 +2716,7 @@ z - + @@ -2730,24 +2730,24 @@ z - + +" clip-path="url(#p3132e0a728)" style="fill: #4ab67d; stroke: #ffffff; stroke-width: 0.5; stroke-linejoin: miter"/> - + - + @@ -2761,27 +2761,27 @@ z - + +" clip-path="url(#p3132e0a728)" style="fill: #808080; stroke: #ffffff; stroke-width: 0.5; stroke-linejoin: miter"/> - + +" clip-path="url(#p3132e0a728)" style="fill: #b0b0b0; stroke: #ffffff; stroke-width: 0.5; stroke-linejoin: miter"/> - + @@ -2800,7 +2800,7 @@ z - + @@ -2814,17 +2814,17 @@ z - + +" clip-path="url(#p3132e0a728)" style="fill: #4ab67d; stroke: #ffffff; stroke-width: 0.5; stroke-linejoin: miter"/> - + @@ -2844,7 +2844,7 @@ z - + @@ -3367,7 +3367,7 @@ z - + diff --git a/src/geophires_x/Outputs.py b/src/geophires_x/Outputs.py index 71cbe5963..3b5e4dab9 100644 --- a/src/geophires_x/Outputs.py +++ b/src/geophires_x/Outputs.py @@ -221,7 +221,7 @@ def PrintOutputs(self, model: Model): if is_sam_econ_model: f.write(f' {Outputs._field_label(econ.capex_total.display_name, 50)}{econ.capex_total.value:10.2f} {econ.capex_total.CurrentUnits.value}\n') - f.write(f' {Outputs._field_label(econ.capex_total_per_kw.display_name, 50)}{econ.capex_total_per_kw.value:10.2f} {econ.capex_total_per_kw.CurrentUnits.value}\n') + f.write(f' {Outputs._field_label(econ.capex_total_per_kw.display_name, 50)}{econ.capex_total_per_kw.value:10.0f} {econ.capex_total_per_kw.CurrentUnits.value}\n') f.write(f' Number of production wells: {model.wellbores.nprod.value:10.0f}'+NL) f.write(f' Number of injection wells: {model.wellbores.ninj.value:10.0f}'+NL) diff --git a/tests/examples/Fervo_Project_Cape-4.out b/tests/examples/Fervo_Project_Cape-4.out index 1b31a31bd..25a7258b7 100644 --- a/tests/examples/Fervo_Project_Cape-4.out +++ b/tests/examples/Fervo_Project_Cape-4.out @@ -4,10 +4,10 @@ Simulation Metadata ---------------------- - GEOPHIRES Version: 3.11.15 + GEOPHIRES Version: 3.11.16 Simulation Date: 2026-02-27 - Simulation Time: 09:06 - Calculation Time: 1.888 sec + Simulation Time: 09:47 + Calculation Time: 1.795 sec ***SUMMARY OF RESULTS*** @@ -15,7 +15,7 @@ Simulation Metadata Average Net Electricity Production: 532.53 MW Electricity breakeven price: 8.11 cents/kWh Total CAPEX: 2660.87 MUSD - Total CAPEX ($/kW): 4953.80 USD/kW + Total CAPEX ($/kW): 4954 USD/kW Number of production wells: 59 Number of injection wells: 59 Flowrate per production well: 107.0 kg/sec diff --git a/tests/examples/Fervo_Project_Cape-5.out b/tests/examples/Fervo_Project_Cape-5.out index c6cbacf72..8d03fe8d1 100644 --- a/tests/examples/Fervo_Project_Cape-5.out +++ b/tests/examples/Fervo_Project_Cape-5.out @@ -4,10 +4,10 @@ Simulation Metadata ---------------------- - GEOPHIRES Version: 3.11.15 + GEOPHIRES Version: 3.11.16 Simulation Date: 2026-02-27 - Simulation Time: 09:11 - Calculation Time: 1.882 sec + Simulation Time: 09:49 + Calculation Time: 1.881 sec ***SUMMARY OF RESULTS*** @@ -15,7 +15,7 @@ Simulation Metadata Average Net Electricity Production: 510.13 MW Electricity breakeven price: 8.59 cents/kWh Total CAPEX: 2865.69 MUSD - Total CAPEX ($/kW): 5595.03 USD/kW + Total CAPEX ($/kW): 5595 USD/kW Number of production wells: 56 Number of injection wells: 38 Flowrate per production well: 107.0 kg/sec diff --git a/tests/examples/Fervo_Project_Cape-6.out b/tests/examples/Fervo_Project_Cape-6.out index 973e5f859..07843d34d 100644 --- a/tests/examples/Fervo_Project_Cape-6.out +++ b/tests/examples/Fervo_Project_Cape-6.out @@ -4,10 +4,10 @@ Simulation Metadata ---------------------- - GEOPHIRES Version: 3.11.15 + GEOPHIRES Version: 3.11.16 Simulation Date: 2026-02-27 - Simulation Time: 09:15 - Calculation Time: 1.872 sec + Simulation Time: 09:53 + Calculation Time: 1.834 sec ***SUMMARY OF RESULTS*** @@ -15,7 +15,7 @@ Simulation Metadata Average Net Electricity Production: 103.22 MW Electricity breakeven price: 8.93 cents/kWh Total CAPEX: 577.72 MUSD - Total CAPEX ($/kW): 5573.04 USD/kW + Total CAPEX ($/kW): 5573 USD/kW Number of production wells: 12 Number of injection wells: 8 Flowrate per production well: 100.0 kg/sec diff --git a/tests/examples/example_SAM-single-owner-PPA-2.out b/tests/examples/example_SAM-single-owner-PPA-2.out index fdffb613b..73a472397 100644 --- a/tests/examples/example_SAM-single-owner-PPA-2.out +++ b/tests/examples/example_SAM-single-owner-PPA-2.out @@ -4,10 +4,10 @@ Simulation Metadata ---------------------- - GEOPHIRES Version: 3.11.15 + GEOPHIRES Version: 3.11.16 Simulation Date: 2026-02-27 - Simulation Time: 09:16 - Calculation Time: 1.054 sec + Simulation Time: 09:53 + Calculation Time: 1.050 sec ***SUMMARY OF RESULTS*** @@ -15,7 +15,7 @@ Simulation Metadata Average Net Electricity Production: 404.31 MW Electricity breakeven price: 7.37 cents/kWh Total CAPEX: 1609.42 MUSD - Total CAPEX ($/kW): 3971.97 USD/kW + Total CAPEX ($/kW): 3972 USD/kW Number of production wells: 39 Number of injection wells: 39 Flowrate per production well: 120.0 kg/sec diff --git a/tests/examples/example_SAM-single-owner-PPA-3.out b/tests/examples/example_SAM-single-owner-PPA-3.out index 5be0fd5f0..6d530815e 100644 --- a/tests/examples/example_SAM-single-owner-PPA-3.out +++ b/tests/examples/example_SAM-single-owner-PPA-3.out @@ -4,10 +4,10 @@ Simulation Metadata ---------------------- - GEOPHIRES Version: 3.11.15 + GEOPHIRES Version: 3.11.16 Simulation Date: 2026-02-27 - Simulation Time: 09:16 - Calculation Time: 1.261 sec + Simulation Time: 09:53 + Calculation Time: 1.239 sec ***SUMMARY OF RESULTS*** @@ -15,7 +15,7 @@ Simulation Metadata Average Net Electricity Production: 58.87 MW Electricity breakeven price: 7.64 cents/kWh Total CAPEX: 275.47 MUSD - Total CAPEX ($/kW): 4667.41 USD/kW + Total CAPEX ($/kW): 4667 USD/kW Number of production wells: 6 Number of injection wells: 6 Flowrate per production well: 100.0 kg/sec diff --git a/tests/examples/example_SAM-single-owner-PPA-4.out b/tests/examples/example_SAM-single-owner-PPA-4.out index 4d5d8dd2d..d516b3624 100644 --- a/tests/examples/example_SAM-single-owner-PPA-4.out +++ b/tests/examples/example_SAM-single-owner-PPA-4.out @@ -4,10 +4,10 @@ Simulation Metadata ---------------------- - GEOPHIRES Version: 3.11.15 + GEOPHIRES Version: 3.11.16 Simulation Date: 2026-02-27 - Simulation Time: 09:16 - Calculation Time: 1.281 sec + Simulation Time: 09:53 + Calculation Time: 1.326 sec ***SUMMARY OF RESULTS*** @@ -15,7 +15,7 @@ Simulation Metadata Average Net Electricity Production: 54.96 MW Electricity breakeven price: 6.97 cents/kWh Total CAPEX: 225.81 MUSD - Total CAPEX ($/kW): 4097.10 USD/kW + Total CAPEX ($/kW): 4097 USD/kW Number of production wells: 6 Number of injection wells: 6 Flowrate per production well: 100.0 kg/sec diff --git a/tests/examples/example_SAM-single-owner-PPA-5.out b/tests/examples/example_SAM-single-owner-PPA-5.out index e5ddab387..7fec0283c 100644 --- a/tests/examples/example_SAM-single-owner-PPA-5.out +++ b/tests/examples/example_SAM-single-owner-PPA-5.out @@ -4,10 +4,10 @@ Simulation Metadata ---------------------- - GEOPHIRES Version: 3.11.15 + GEOPHIRES Version: 3.11.16 Simulation Date: 2026-02-27 - Simulation Time: 09:16 - Calculation Time: 1.919 sec + Simulation Time: 09:53 + Calculation Time: 1.854 sec ***SUMMARY OF RESULTS*** @@ -15,7 +15,7 @@ Simulation Metadata Average Net Electricity Production: 110.58 MW Electricity breakeven price: 7.78 cents/kWh Total CAPEX: 710.63 MUSD - Total CAPEX ($/kW): 6406.82 USD/kW + Total CAPEX ($/kW): 6407 USD/kW Number of production wells: 15 Number of injection wells: 15 Flowrate per production well: 80.0 kg/sec diff --git a/tests/examples/example_SAM-single-owner-PPA.out b/tests/examples/example_SAM-single-owner-PPA.out index 87c6cc2ac..a9cd2585b 100644 --- a/tests/examples/example_SAM-single-owner-PPA.out +++ b/tests/examples/example_SAM-single-owner-PPA.out @@ -4,10 +4,10 @@ Simulation Metadata ---------------------- - GEOPHIRES Version: 3.11.15 + GEOPHIRES Version: 3.11.16 Simulation Date: 2026-02-27 - Simulation Time: 09:11 - Calculation Time: 1.257 sec + Simulation Time: 09:49 + Calculation Time: 1.227 sec ***SUMMARY OF RESULTS*** @@ -15,7 +15,7 @@ Simulation Metadata Average Net Electricity Production: 54.96 MW Electricity breakeven price: 6.34 cents/kWh Total CAPEX: 225.81 MUSD - Total CAPEX ($/kW): 4097.10 USD/kW + Total CAPEX ($/kW): 4097 USD/kW Number of production wells: 6 Number of injection wells: 6 Flowrate per production well: 100.0 kg/sec From 60c8fd9997e57824b9f82ff9433568ee027558ef Mon Sep 17 00:00:00 2001 From: softwareengineerprogrammer <4056124+softwareengineerprogrammer@users.noreply.github.com> Date: Fri, 27 Feb 2026 09:54:13 -0800 Subject: [PATCH 4/4] =?UTF-8?q?Bump=20version:=203.11.16=20=E2=86=92=203.1?= =?UTF-8?q?1.17?= 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 10ae0fba5..68e698111 100644 --- a/.bumpversion.cfg +++ b/.bumpversion.cfg @@ -1,5 +1,5 @@ [bumpversion] -current_version = 3.11.16 +current_version = 3.11.17 commit = True tag = True diff --git a/.cookiecutterrc b/.cookiecutterrc index 9f30e2722..ee51f30fa 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.11.16 + version: 3.11.17 version_manager: "bump2version" website: "https://github.com/NREL" year_from: "2023" diff --git a/README.rst b/README.rst index ad03690a2..b40c65c03 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.11.16.svg +.. |commits-since| image:: https://img.shields.io/github/commits-since/softwareengineerprogrammer/GEOPHIRES-X/v3.11.17.svg :alt: Commits since latest release - :target: https://github.com/softwareengineerprogrammer/GEOPHIRES-X/compare/v3.11.16...main + :target: https://github.com/softwareengineerprogrammer/GEOPHIRES-X/compare/v3.11.17...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 9f3641463..282915ec7 100644 --- a/docs/conf.py +++ b/docs/conf.py @@ -18,7 +18,7 @@ year = '2025' author = 'NREL' copyright = f'{year}, {author}' -version = release = '3.11.16' +version = release = '3.11.17' pygments_style = 'trac' templates_path = ['./templates'] diff --git a/setup.py b/setup.py index a559658d5..37b67477b 100755 --- a/setup.py +++ b/setup.py @@ -13,7 +13,7 @@ def read(*names, **kwargs): setup( name='geophires-x', - version='3.11.16', + version='3.11.17', 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 99c945400..d5e925eab 100644 --- a/src/geophires_x/__init__.py +++ b/src/geophires_x/__init__.py @@ -1 +1 @@ -__version__ = '3.11.16' +__version__ = '3.11.17'