Skip to content

Commit f6ccfad

Browse files
methodology section including fracture params, break out discussion section (WIP)
1 parent 761f7f7 commit f6ccfad

3 files changed

Lines changed: 72 additions & 34 deletions

File tree

docs/Fervo_Project_Red.md.jinja

Lines changed: 68 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,7 @@
1919

2020
# Fervo Project Red: Evaluating GEOPHIRES and Gringarten against Empirical EGS Data
2121

22-
ℹ️ The GEOPHIRES (Gringarten) model parameters used in this evaluation can be explored and executed via the [Fervo_Project_Red-2026 example in the web interface](https://gtp.scientificwebservices.com/geophires/?geophires-example-id=Fervo_Project_Red-2026).
22+
ℹ️ The GEOPHIRES (Gringarten) model parameters used in this evaluation can be interactively explored via the [Fervo_Project_Red-2026 example in the web interface](https://gtp.scientificwebservices.com/geophires/?geophires-example-id=Fervo_Project_Red-2026).
2323

2424
---
2525

@@ -39,7 +39,44 @@ appears to assume an idealized steady-state flow from inception, omitting the ea
3939
Conversely, while the GEOPHIRES (Gringarten) model does account for early transient heat transfer, its precision
4040
during this rapid ramp-up is inherently constrained by its temporal resolution (100 time steps per year).
4141

42-
## Production Temperature: Measured vs. Modeled
42+
## Disclaimer: Independent Analysis
43+
44+
This case study is an independent techno-economic evaluation developed by the author and contributors to the GEOPHIRES
45+
open-source project. It is not affiliated with, sponsored by, or endorsed by Fervo Energy.
46+
The author and contributors are not employees or agents of Fervo Energy, and this work has not been reviewed or
47+
approved by the company. All modeling assumptions, including those derived from public data sources, represent the
48+
independent interpretation of the author and the GEOPHIRES open-source community and do not constitute proprietary
49+
information or official company projections.
50+
51+
## Methodology: Model Calibration and Parameterization
52+
53+
The foundation of this validation lies in aligning the GEOPHIRES inputs with the physical realities of the Fervo Project Red site. To achieve this, the Gringarten analytical reservoir model was parameterized using published data and physical constraints derived from the site's initial reporting and recent updates.
54+
55+
### Empirical Data Extraction
56+
57+
The baseline data for this evaluation was extracted from Figure 5 of Fervo Energy's 2026 update report, which plots the measured flowing temperature over approximately two years.
58+
59+
*Original Published Figure 5: Measured Flowing Temperature*
60+
![](_images/fervo-project-red-2026_figure-5_measured-flowing-temperature.png)
61+
62+
### GEOPHIRES Reservoir Parameters
63+
64+
The GEOPHIRES Gringarten model utilizes a multiple parallel fracture geometry. The critical inputs defining this geometry for the Project Red simulation are detailed below:
65+
66+
| Parameter | Input Value | Derivation Notes |
67+
| :--- | :--- | :--- |
68+
| **Number of Fractures** | `{{ input_params['Number of Fractures'] }}` | Fervo estimates between 75 and 100 fractures were created. This value is de-rated in the model to account for the physical reality of imperfect flow distribution and uneven utilization across the entire stimulated rock volume. |
69+
| **Fracture Shape** | `{{ input_params['Fracture Shape'] }}` | Rectangular geometry (Shape 4), representing standard transverse hydraulic fractures along a horizontal wellbore. |
70+
| **Fracture Height** | `{{ input_params['Fracture Height'] }}` | Estimated vertical propagation of the stimulated fracture network. |
71+
| **Fracture Width** | `{{ input_params['Fracture Width'] }}` | Set to match the distance between the injection and production wellbores, assuming a dipole flow field directly connecting the laterals. |
72+
| **Fracture Separation** | `{{ input_params['Fracture Separation'] }}` | The modeled physical spacing between individual transverse fractures along the lateral section. |
73+
74+
*Note: These parameters represent a simplified, homogenized analytical equivalent of a highly complex, heterogeneous subsurface fracture network.*
75+
76+
77+
## Results
78+
79+
### Production Temperature: Measured vs. Modeled
4380

4481
The charts below plot the measured flowing temperature over a roughly two-year period. Data points captured during early thermal conditioning and transient operations (e.g., shut-ins, flow-rate testing) are rendered in gray and excluded from the steady-state statistical alignment.
4582

@@ -48,7 +85,7 @@ The charts below plot the measured flowing temperature over a roughly two-year p
4885
*Detail view of the steady-state temperature plateau (175°C–185°C):*
4986
![](_images/fervo_project_red-2026_production-temperature-data-vs-modeling-2.png)
5087

51-
## Statistical Alignment Analysis
88+
### Statistical Alignment Analysis
5289

5390
The variance analysis (results displayed in legend captions) evaluates the predictive accuracy of both models against the measured steady-state data (excluding the initial thermal conditioning/ramp-up period).
5491

@@ -58,7 +95,34 @@ Both models demonstrate high predictive fidelity, tracking steady-state flowing
5895
* **Systematic Bias:** The Fervo model exhibits slightly less systemic underestimation, with a cold bias of -0.50°C compared to the GEOPHIRES cold bias of -0.70°C.
5996
* **R² Context:** The relatively low R² values for both models are expected statistical artifacts. Because the steady-state temperature profile is essentially a flat plateau, natural sensor variance and minor reservoir oscillations account for a disproportionately large portion of the total sum of squares, suppressing the R² score despite the low absolute error.
6097

61-
## Modeling Assumptions and Power Production Discrepancies
98+
## Discussion
99+
100+
## Evaluating the Predictive Power of Gringarten
101+
102+
The close statistical alignment over the first two years demonstrates that the analytical Gringarten model,
103+
when appropriately parameterized with empirical reservoir geometry (e.g., de-rating the active fracture count to account for heterogeneous flow),
104+
serves as a highly capable proxy for forecasting early-stage EGS thermal performance.
105+
However, evaluating its predictive power over a multi-decade commercial lifecycle requires acknowledging the structural limitations of analytical solutions.
106+
107+
The Gringarten model assumes uniform thermal sweep across idealized, homogeneous rectangular fractures.
108+
This assumption tends to produce a flat thermal plateau that is maintained for an extended duration,
109+
followed eventually by a sharp decline when the cold thermal front from the injector cleanly breaks through to the producer.
110+
111+
In highly heterogeneous real-world reservoirs, early thermal dispersion typically occurs.
112+
Cold fluid travels faster through dominant, wider fractures (short-circuiting), while smaller fractures contribute
113+
less flow but maintain higher temperatures.
114+
Fully coupled numerical simulations (such as the ResFrac models used by Fervo) account for this heterogeneity.
115+
As demonstrated in the GEOPHIRES case study for Fervo's commercial-scale Cape Station, numerical models
116+
often predict a more gradual, earlier onset of thermal decline compared to the prolonged, flat plateau of the Gringarten analytical solution.
117+
118+
Therefore, while Gringarten is an excellent tool for rapid scoping and establishing baseline
119+
techno-economic viability (as validated by the two-year Project Red data), it likely represents an optimistic upper
120+
bound for long-term (15-30 year) aggregate heat extraction compared to the more conservative, gradual decline models
121+
required for managing commercial-scale heterogeneous reservoirs like Cape Station.
122+
123+
### Modeling Assumptions and Power Production Discrepancies
124+
125+
{# TODO move to methodology or results, probably... #}
62126

63127
While the Gringarten model accurately predicts the reservoir's thermal drawdown, translating that thermal energy into net electrical power introduces additional variables.
64128
Users comparing GEOPHIRES power production estimates to Fervo's published net generation may notice discrepancies.
@@ -74,16 +138,6 @@ These arise from fundamental differences between an idealized techno-economic mo
74138

75139
1. [Fervo_Norbeck_Latimer_2023](https://gtp.scientificwebservices.com/geophires/?geophires-example-id=Fervo_Norbeck_Latimer_2023)
76140

77-
---
78-
79-
## Disclaimer: Independent Analysis
80-
81-
This case study is an independent techno-economic evaluation developed by the author and contributors to the GEOPHIRES
82-
open-source project. It is not affiliated with, sponsored by, or endorsed by Fervo Energy.
83-
The author and contributors are not employees or agents of Fervo Energy, and this work has not been reviewed or
84-
approved by the company. All modeling assumptions, including those derived from public data sources, represent the
85-
independent interpretation of the author and the GEOPHIRES open-source community and do not constitute proprietary
86-
information or official company projections.
87141

88142
---
89143

src/geophires_docs/fervo-project-red-2026_figure-5_measured-flowing-temperature.png renamed to docs/_images/fervo-project-red-2026_figure-5_measured-flowing-temperature.png

File renamed without changes.

src/geophires_docs/generate_fervo_project_red_2026_docs.py

Lines changed: 4 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -404,23 +404,11 @@ def generate_fervo_project_red_2026_md(
404404
# noinspection PyDictCreation
405405
template_values = {
406406
# **get_fpc5_input_parameter_values(input_params, result),
407-
**result_values
407+
# **_get_input_parameters_dict(input_params),
408+
'input_params': _get_input_parameters_dict(input_params),
409+
**result_values,
408410
}
409411

410-
# for template_key, md_method in {
411-
# 'opex_result_outputs_table_md': generate_fpc_opex_output_table_md,
412-
# 'reservoir_parameters_table_md': generate_fpc_reservoir_parameters_table_md,
413-
# 'surface_plant_parameters_table_md': generate_fpc_surface_plant_parameters_table_md,
414-
# 'well_bores_parameters_table_md': generate_fpc_well_bores_parameters_table_md,
415-
# 'economics_parameters_table_md': generate_fpc_economics_parameters_table_md,
416-
# 'construction_parameters_table_md': generate_fpc_construction_parameters_table_md,
417-
# }.items():
418-
# template_values[template_key] = md_method(input_params, result)
419-
#
420-
# template_values['reservoir_engineering_reference_simulation_params_table_md'] = (
421-
# generate_res_eng_reference_sim_params_table_md(input_params, res_eng_reference_sim_params)
422-
# )
423-
424412
docs_dir = project_root / 'docs'
425413

426414
# Set up Jinja environment
@@ -436,14 +424,10 @@ def generate_fervo_project_red_2026_md(
436424
output_file.write_text(output, encoding='utf-8')
437425

438426
_log.info(f'✓ Generated {output_file}')
439-
# _log.info('\nKey results:')
440-
# _log.info(f"\tLCOE: ${template_values['lcoe_usd_per_mwh']}/MWh")
441-
# _log.info(f"\tIRR: {template_values['irr_pct']}%")
442-
# _log.info(f"\tTotal CAPEX: ${template_values['total_capex_gusd']}B")
443427

444428

445429
def generate_fervo_project_red_2026_docs():
446-
IMAGE_PATH = _get_file_path('fervo-project-red-2026_figure-5_measured-flowing-temperature.png')
430+
IMAGE_PATH = _get_file_path('../../docs/_images/fervo-project-red-2026_figure-5_measured-flowing-temperature.png')
447431
PRODUCTION_IMAGE_PATH = _get_file_path('fervo_project_red-2026_graph-data-extraction_production-series-edited.png')
448432

449433
_BUILD_DIR.mkdir(parents=True, exist_ok=True)

0 commit comments

Comments
 (0)