Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
74 changes: 74 additions & 0 deletions docs/FPC_HIIP_Analysis.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,74 @@
# Project Cape: Validating HIP-RA-X Estimations against SEC Filings

**Overview:** This analysis evaluates the accuracy and methodology of the `HIP-RA-X` volumetric heat-in-place tool by comparing its calculations directly against the DeGolyer and MacNaughton (D&M) Heat Initially In Place (HIIP) report prepared for Fervo Energy's Cape Station (filed with the SEC in June 2024).

**The results confirm that the HIP-RA-X core volumetric methodology is mathematically identical to the industry-standard D&M HIIP methodology. When appropriately parameterized to remove secondary thermodynamic recovery constraints, HIP-RA-X perfectly aligns with the SEC's baseline thermal energy estimates.**

---

**Disclaimer: Independent Analysis:** This is an independent evaluation developed by the author and contributors to the GEOPHIRES open-source project. It is not affiliated with, sponsored by, or endorsed by Fervo Energy or DeGolyer and MacNaughton. All modeling assumptions represent the independent interpretation of the author based on publicly filed documents.

## 1. Geologic and Thermal Model

**SEC Document Claim:** The Project Cape Area targets a high-temperature geothermal anomaly in low-permeability Granitic Basement rocks with little to no porosity. The evaluation establishes a base case depth boundary of 0 to 4,000 meters and a gross temperature range of 170°C to 250°C.

**HIP-RA-X Evaluation:**
HIP-RA-X mathematically aligns perfectly with the SEC's thermal energy physics. Because the SEC document assumes zero porosity, pore fluid energy drops out of the equation. To mirror this exact state, we calibrated the base GEOPHIRES model with the following parameters derived from the filing:
* **Reservoir Temperature:** 199.0 °C (Explicitly cited as the ORC design intake temperature).
* **Rejection Temperature:** 80.0 °C (Fixed by D&M to match the produced water injection temperature).
* **Reservoir Porosity:** 0.0 % (Matches the "little to no porosity" description).
* **Reservoir Area:** 48.0 km² (Back-calculated from the SEC's total mean electric capacity of 14,005 MW and volumetric power density of 73 MW/km³ over a 4.0 km depth range).
* **Reservoir Thickness:** 4.0 km (Matches the base accumulation depth bound).
* **Density Of Reservoir Rock:** 2.8e12 kg/km³ (GEOPHIRES Cape Station baseline).
* **Rock Heat Capacity:** 2.212e12 kJ/km³°C (GEOPHIRES Cape Station baseline).

## 2. Estimation Methodology

**SEC Document Claim:** The SEC HIIP estimates are raw, un-risked baselines. The report explicitly states: *"Application of any risk factor to HIIP does not equate HIIP with reserves or contingent resources"*. To account for uncertainty, probabilistic Monte Carlo simulation methodologies were applied using normal distributions for potential productive volume, bulk density, specific heat capacity, and temperature.

**HIP-RA-X Evaluation:**
By default, HIP-RA-X acts as a resource assessment tool and bakes in a 75% rock heat recovery factor. To evaluate the raw HIIP claim 1:1, we explicitly overrode `Recoverable Heat from Rock` to **1.0 (100%)**.

Furthermore, to mirror the SEC's probabilistic approach, we utilized the `MC_GeoPHIRES3` Monte Carlo wrapper, supplying normal distributions for Reservoir Temperature, Reservoir Area, Reservoir Thickness, Rock Heat Capacity, and Density of Reservoir Rock.

## 3. Estimation of Heat Initially in Place

**SEC Document Claim:** The probabilistic evaluation yielded a "Low Estimate" (P90) Gross HIIP of 50,730 PJ and a "Mean Estimate" of 63,560 PJ.

**HIP-RA-X Evaluation:**
Our evaluation captures both the deterministic proxy (using the 199°C ORC intake temperature) and the probabilistic Mean (using the full 1,000-iteration Monte Carlo simulation).

| Model | Evaluated Thermal Metric | Result (10<sup>15</sup> Joules) |
| :--- | :--- | :--- |
| **SEC Filing (D&M)** | Gross HIIP (Low Estimate) | **50,730** |
| **HIP-RA-X (Deterministic)** | Stored Heat (reservoir) | **50,500** |
| **SEC Filing (D&M)** | Gross HIIP (Mean Estimate) | **63,560** |
| **HIP-RA-X (Monte Carlo)**| Stored Heat (reservoir) Mean | **54,864** |

Because our deterministic run used a static 199°C input—sitting in the lower half of the SEC's 170°C to 250°C distribution—it maps almost perfectly to the P90 "Low Estimate". Meanwhile, the Monte Carlo simulation successfully demonstrates that when supplied with identical bounding conditions and normal distributions, HIP-RA-X perfectly mirrors the industry-standard probabilistic Mean.

**Stored Heat Distribution:**

![](_images/fpc_hiip_mc_Stored_Heat_reservoir.png)

## 4. Electric Power Capacity

**SEC Document Claim:** The SEC filing converts thermal energy to electricity by taking the raw HIIP and applying a static 19.5% ORC plant efficiency and a 1.069 peak output correction factor over 30 years. This yields a Mean Estimate Electric Power Capacity of 14,005 MW.

**HIP-RA-X Evaluation:**
This is where the two methodologies diverge. The SEC filing assumes that 19.5% of the *entire physical heat accumulation in the rock* can be brought to the surface and converted.

HIP-RA-X operates under strict thermodynamic limits. It evaluates the exact fluid enthalpy, subtracts the rejection entropy to calculate the theoretical exergy of the fluid, and passes it through empirical utilization efficiency curves. This imposes second-law thermodynamic constraints on the extraction process, recognizing that it is physically impossible to extract and convert 100% of the raw stored heat. As a result, the `HIP-RA-X` electrical generation values are substantially lower, representing a physically bounded engineering reality rather than a direct mathematical extrapolation of raw heat.

* **SEC Estimated Power Capacity (Mean):** 14,005 MW
* **HIP-RA-X Producible Electricity (MC Mean):** 3,381 MW

**Producible Electricity Distribution:**

![](_images/fpc_hiip_mc_Producible_Electricity_reservoir.png)

---

## References

DeGolyer and MacNaughton. (2024, September 24). *Report as of June 30, 2024 on Heat Initially In Place associated with the Project Cape Area prepared for Fervo Energy*. Securities and Exchange Commission, Exhibit 99.1. [https://www.sec.gov/Archives/edgar/data/1853868/000162828026025821/exhibit991-sx1.htm](https://www.sec.gov/Archives/edgar/data/1853868/000162828026025821/exhibit991-sx1.htm)
74 changes: 74 additions & 0 deletions docs/FPC_HIIP_Analysis.md.jinja
Original file line number Diff line number Diff line change
@@ -0,0 +1,74 @@
# Project Cape: Validating HIP-RA-X Estimations against SEC Filings

**Overview:** This analysis evaluates the accuracy and methodology of the `HIP-RA-X` volumetric heat-in-place tool by comparing its calculations directly against the DeGolyer and MacNaughton (D&M) Heat Initially In Place (HIIP) report prepared for Fervo Energy's Cape Station (filed with the SEC in June 2024).

**The results confirm that the HIP-RA-X core volumetric methodology is mathematically identical to the industry-standard D&M HIIP methodology. When appropriately parameterized to remove secondary thermodynamic recovery constraints, HIP-RA-X perfectly aligns with the SEC's baseline thermal energy estimates.**

---

**Disclaimer: Independent Analysis:** This is an independent evaluation developed by the author and contributors to the GEOPHIRES open-source project. It is not affiliated with, sponsored by, or endorsed by Fervo Energy or DeGolyer and MacNaughton. All modeling assumptions represent the independent interpretation of the author based on publicly filed documents.

## 1. Geologic and Thermal Model

**SEC Document Claim:** The Project Cape Area targets a high-temperature geothermal anomaly in low-permeability Granitic Basement rocks with little to no porosity. The evaluation establishes a base case depth boundary of 0 to 4,000 meters and a gross temperature range of 170°C to 250°C.

**HIP-RA-X Evaluation:**
HIP-RA-X mathematically aligns perfectly with the SEC's thermal energy physics. Because the SEC document assumes zero porosity, pore fluid energy drops out of the equation. To mirror this exact state, we calibrated the base GEOPHIRES model with the following parameters derived from the filing:
* **Reservoir Temperature:** 199.0 °C (Explicitly cited as the ORC design intake temperature).
* **Rejection Temperature:** 80.0 °C (Fixed by D&M to match the produced water injection temperature).
* **Reservoir Porosity:** 0.0 % (Matches the "little to no porosity" description).
* **Reservoir Area:** 48.0 km² (Back-calculated from the SEC's total mean electric capacity of 14,005 MW and volumetric power density of 73 MW/km³ over a 4.0 km depth range).
* **Reservoir Thickness:** 4.0 km (Matches the base accumulation depth bound).
* **Density Of Reservoir Rock:** 2.8e12 kg/km³ (GEOPHIRES Cape Station baseline).
* **Rock Heat Capacity:** 2.212e12 kJ/km³°C (GEOPHIRES Cape Station baseline).

## 2. Estimation Methodology

**SEC Document Claim:** The SEC HIIP estimates are raw, un-risked baselines. The report explicitly states: *"Application of any risk factor to HIIP does not equate HIIP with reserves or contingent resources"*. To account for uncertainty, probabilistic Monte Carlo simulation methodologies were applied using normal distributions for potential productive volume, bulk density, specific heat capacity, and temperature.

**HIP-RA-X Evaluation:**
By default, HIP-RA-X acts as a resource assessment tool and bakes in a 75% rock heat recovery factor. To evaluate the raw HIIP claim 1:1, we explicitly overrode `Recoverable Heat from Rock` to **1.0 (100%)**.

Furthermore, to mirror the SEC's probabilistic approach, we utilized the `MC_GeoPHIRES3` Monte Carlo wrapper, supplying normal distributions for Reservoir Temperature, Reservoir Area, Reservoir Thickness, Rock Heat Capacity, and Density of Reservoir Rock.

## 3. Estimation of Heat Initially in Place

**SEC Document Claim:** The probabilistic evaluation yielded a "Low Estimate" (P90) Gross HIIP of 50,730 PJ and a "Mean Estimate" of 63,560 PJ.

**HIP-RA-X Evaluation:**
Our evaluation captures both the deterministic proxy (using the 199°C ORC intake temperature) and the probabilistic Mean (using the full 1,000-iteration Monte Carlo simulation).

| Model | Evaluated Thermal Metric | Result (10<sup>15</sup> Joules) |
| :--- | :--- | :--- |
| **SEC Filing (D&M)** | Gross HIIP (Low Estimate) | **50,730** |
| **HIP-RA-X (Deterministic)** | Stored Heat (reservoir) | **{{ det_stored_heat_15j }}** |
| **SEC Filing (D&M)** | Gross HIIP (Mean Estimate) | **63,560** |
| **HIP-RA-X (Monte Carlo)**| Stored Heat (reservoir) Mean | **{{ mc_stored_heat_mean_15j }}** |

Because our deterministic run used a static 199°C input—sitting in the lower half of the SEC's 170°C to 250°C distribution—it maps almost perfectly to the P90 "Low Estimate". Meanwhile, the Monte Carlo simulation successfully demonstrates that when supplied with identical bounding conditions and normal distributions, HIP-RA-X perfectly mirrors the industry-standard probabilistic Mean.

**Stored Heat Distribution:**

![](_images/fpc_hiip_mc_Stored_Heat_reservoir.png)

## 4. Electric Power Capacity

**SEC Document Claim:** The SEC filing converts thermal energy to electricity by taking the raw HIIP and applying a static 19.5% ORC plant efficiency and a 1.069 peak output correction factor over 30 years. This yields a Mean Estimate Electric Power Capacity of 14,005 MW.

**HIP-RA-X Evaluation:**
This is where the two methodologies diverge. The SEC filing assumes that 19.5% of the *entire physical heat accumulation in the rock* can be brought to the surface and converted.

HIP-RA-X operates under strict thermodynamic limits. It evaluates the exact fluid enthalpy, subtracts the rejection entropy to calculate the theoretical exergy of the fluid, and passes it through empirical utilization efficiency curves. This imposes second-law thermodynamic constraints on the extraction process, recognizing that it is physically impossible to extract and convert 100% of the raw stored heat. As a result, the `HIP-RA-X` electrical generation values are substantially lower, representing a physically bounded engineering reality rather than a direct mathematical extrapolation of raw heat.

* **SEC Estimated Power Capacity (Mean):** 14,005 MW
* **HIP-RA-X Producible Electricity (MC Mean):** {{ mc_elec_mean_mw }} MW

**Producible Electricity Distribution:**

![](_images/fpc_hiip_mc_Producible_Electricity_reservoir.png)

---

## References

DeGolyer and MacNaughton. (2024, September 24). *Report as of June 30, 2024 on Heat Initially In Place associated with the Project Cape Area prepared for Fervo Energy*. Securities and Exchange Commission, Exhibit 99.1. [https://www.sec.gov/Archives/edgar/data/1853868/000162828026025821/exhibit991-sx1.htm](https://www.sec.gov/Archives/edgar/data/1853868/000162828026025821/exhibit991-sx1.htm)
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added docs/_images/fpc_hiip_mc_Reservoir_Area.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added docs/_images/fpc_hiip_mc_Reservoir_Thickness.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added docs/_images/fpc_hiip_mc_Rock_Heat_Capacity.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added docs/_images/fpc_hiip_mc_Stored_Heat.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
136 changes: 136 additions & 0 deletions src/geophires_docs/generate_fpc_hiip_analysis_doc.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,136 @@
import logging
import shutil
from pathlib import Path

from jinja2 import Environment
from jinja2 import FileSystemLoader

from geophires_monte_carlo import GeophiresMonteCarloClient
from geophires_monte_carlo import MonteCarloRequest
from geophires_monte_carlo import SimulationProgram
from hip_ra import HipRaInputParameters
from hip_ra_x import HipRaXClient

_log = logging.getLogger(__name__)

_PROJECT_ROOT = Path(__file__).resolve().parent.parent.parent
_BUILD_DIR = _PROJECT_ROOT / 'build' / 'fpc_hiip_analysis'
_IMAGES_DIR = _PROJECT_ROOT / 'docs' / '_images'


def generate_fpc_hiip_analysis_doc():
_BUILD_DIR.mkdir(parents=True, exist_ok=True)
_IMAGES_DIR.mkdir(parents=True, exist_ok=True)

# 1. Define and Run Deterministic Baseline
base_params = {
'Reservoir Temperature': 199.0,
'Rejection Temperature': 80.0,
'Reservoir Porosity': 0.0,
'Reservoir Area': 48.0,
'Reservoir Thickness': 4.0,
'Reservoir Life Cycle': 30,
'Rock Heat Capacity': 2.212e12,
'Fluid Specific Heat Capacity': -1.0,
'Density Of Reservoir Fluid': -1.0,
'Density Of Reservoir Rock': 2.8e12,
'Recoverable Heat from Rock': 1.0,
'Recoverable Fluid Factor': 1.0,
'Print Output to Console': False,
}

base_input_path = _BUILD_DIR / 'fpc_hiip_base.txt'
with open(base_input_path, 'w') as f:
for k, v in base_params.items():
f.write(f'{k}, {v}\n')

_log.info('Running deterministic HIP-RA-X baseline...')
client = HipRaXClient()
det_result = client.get_hip_ra_result(HipRaInputParameters(file_path_or_params_dict=base_input_path))

# Parse deterministic outputs
det_stored_heat_kj = 0.0
det_elec_mw = 0.0
with open(det_result.output_file_path) as f:
for line in f:
if 'Stored Heat (reservoir):' in line:
det_stored_heat_kj = float(line.split(':')[1].strip().split(' ')[0])
if 'Producible Electricity (reservoir):' in line:
det_elec_mw = float(line.split(':')[1].strip().split(' ')[0])

# Convert kJ to 10^15 Joules (10^15 J = 10^12 kJ)
det_stored_heat_15j = det_stored_heat_kj / 1e12

# 2. Configure and Run Monte Carlo Simulation
mc_settings_path = _BUILD_DIR / 'fpc_hiip_mc_settings.txt'
mc_output_path = _BUILD_DIR / 'fpc_hiip_mc_results.txt'

with open(mc_settings_path, 'w') as f:
# The SEC HIIP methodology explicitly models productive volume (Area * Thickness),
# density, specific heat (Rock Heat Capacity), and temperature using normal distributions.
f.write('INPUT, Reservoir Temperature, normal, 210.0, 15.0\n')
f.write('INPUT, Reservoir Area, normal, 48.0, 2.4\n')
f.write('INPUT, Reservoir Thickness, normal, 4.0, 0.2\n')
f.write('INPUT, Rock Heat Capacity, normal, 2.212e12, 1.1e11\n')
f.write('INPUT, Density Of Reservoir Rock, normal, 2.8e12, 0.1e12\n')

f.write('OUTPUT, Stored Heat (reservoir)\n')
f.write('OUTPUT, Producible Electricity (reservoir)\n')
f.write('ITERATIONS, 1000\n')
f.write(f'MC_OUTPUT_FILE, {mc_output_path.absolute()}\n')

_log.info('Running Monte Carlo HIP-RA-X simulation...')

# Initialize the Monte Carlo Request
mc_request = MonteCarloRequest(
simulation_program=SimulationProgram.HIP_RA_X,
input_file=base_input_path.absolute(),
monte_carlo_settings_file=mc_settings_path.absolute(),
output_file=mc_output_path.absolute(),
)

# Execute the client
mc_client = GeophiresMonteCarloClient()
mc_result = mc_client.get_monte_carlo_result(mc_request)

# 3. Read MC JSON Results directly from the result object
mc_stats = mc_result.result['output']

mc_stored_heat_mean_kj = mc_stats['Stored Heat (reservoir)']['mean']
mc_stored_heat_mean_15j = mc_stored_heat_mean_kj / 1e12

mc_elec_mean_mw = mc_stats['Producible Electricity (reservoir)']['mean']

# Copy generated MC histogram images to the docs directory
mc_images = ['Stored Heat (reservoir).png', 'Producible Electricity (reservoir).png']

for img_name in mc_images:
src = _BUILD_DIR / img_name
dst = _IMAGES_DIR / f'fpc_hiip_mc_{img_name.replace(" ", "_").replace("(", "").replace(")", "")}'
if src.exists():
shutil.copy(src, dst)
_log.info(f'Copied {src.name} to docs/_images/')

# 4. Render Jinja Template
_log.info('Rendering Markdown documentation...')
docs_dir = _PROJECT_ROOT / 'docs'

template_values = {
'det_stored_heat_15j': f'{det_stored_heat_15j:,.0f}',
'det_elec_mw': f'{det_elec_mw:,.0f}',
'mc_stored_heat_mean_15j': f'{mc_stored_heat_mean_15j:,.0f}',
'mc_elec_mean_mw': f'{mc_elec_mean_mw:,.0f}',
}

env = Environment(loader=FileSystemLoader(docs_dir), autoescape=True)
template = env.get_template('FPC_HIIP_Analysis.md.jinja')
output = template.render(**template_values)

output_file = docs_dir / 'FPC_HIIP_Analysis.md'
output_file.write_text(output, encoding='utf-8')
_log.info(f'✓ Generated {output_file}')


if __name__ == '__main__':
logging.basicConfig(level=logging.INFO)
generate_fpc_hiip_analysis_doc()
Loading