Skip to content

Commit 4158a6b

Browse files
generate Fervo_Project_Red.md via jinja template (WIP - no values interpolated yet, TODO to wire up template values)
1 parent 63491a3 commit 4158a6b

3 files changed

Lines changed: 71 additions & 7 deletions

File tree

.gitignore

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -105,6 +105,7 @@ docs/tmp
105105
docs/reference/geophires-request.json
106106
docs/reference/parameters.rst
107107
docs/Fervo_Project_Cape-5.md
108+
docs/Fervo_Project_Red.md
108109
docs/_images/*.bak.png
109110
docs/_images/singh-et-al-2025_fig-7_well-and-bench-spacing.xcf
110111
docs/geophires-request.json

src/geophires_docs/generate_fervo_project_red_2026_docs.py

Lines changed: 70 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,8 @@
55
import matplotlib.pyplot as plt
66
import numpy as np
77
import pandas as pd
8+
from jinja2 import Environment
9+
from jinja2 import FileSystemLoader
810
from scipy.interpolate import interp1d
911
from scipy.ndimage import maximum_filter
1012

@@ -346,12 +348,7 @@ def _get_file_path(file_name: str) -> Path:
346348
return Path(__file__).parent / file_name
347349

348350

349-
def get_project_red_production_temperature_profile_series(
350-
fervo_graph_df_model: pd.Series,
351-
) -> tuple[
352-
pd.Series,
353-
Any, # interpolator
354-
]:
351+
def get_project_red_input_params_and_result() -> tuple[GeophiresInputParameters, GeophiresXResult]:
355352
input_params: GeophiresInputParameters = ImmutableGeophiresInputParameters(
356353
from_file_path=_get_file_path('../../tests/examples/Fervo_Project_Red-2026.txt'),
357354
params={'Print Output to Console': 0},
@@ -361,9 +358,21 @@ def get_project_red_production_temperature_profile_series(
361358
GeophiresXResult(_get_file_path('../../tests/examples/Fervo_Project_Red-2026.out')),
362359
)
363360

361+
return input_and_result
362+
363+
364+
def get_project_red_production_temperature_profile_series(
365+
fervo_graph_df_model: pd.Series,
366+
) -> tuple[
367+
pd.Series,
368+
Any, # interpolator
369+
]:
370+
371+
input_and_result = get_project_red_input_params_and_result()
372+
input_params: GeophiresInputParameters = input_and_result[0]
373+
364374
project_red_geophires_result_data: list = _get_full_production_temperature_profile(input_and_result)
365375

366-
# Fetch the 'Time' profile data to align exactly with the GEOPHIRES temperature curve
367376
time_steps_per_year: int = int(_get_input_parameters_dict(input_params)['Time steps per year'])
368377
geophires_time_data = [
369378
float(step) / float(time_steps_per_year) for step, _ in enumerate(project_red_geophires_result_data)
@@ -381,6 +390,58 @@ def get_project_red_production_temperature_profile_series(
381390
return geophires_series, geophires_interpolator
382391

383392

393+
def generate_fervo_project_red_2026_md(
394+
input_params: GeophiresInputParameters,
395+
result: GeophiresXResult,
396+
res_eng_reference_sim_params: dict[str, Any] | None = None,
397+
project_root: Path = _PROJECT_ROOT,
398+
) -> None:
399+
if res_eng_reference_sim_params is None:
400+
res_eng_reference_sim_params = {}
401+
402+
result_values: dict[str, Any] = {} # get_result_values(result)
403+
404+
# noinspection PyDictCreation
405+
template_values = {
406+
# **get_fpc5_input_parameter_values(input_params, result),
407+
**result_values
408+
}
409+
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+
424+
docs_dir = project_root / 'docs'
425+
426+
# Set up Jinja environment
427+
env = Environment(loader=FileSystemLoader(docs_dir), autoescape=True)
428+
template = env.get_template('Fervo_Project_Red.md.jinja')
429+
430+
# Render template
431+
_log.info('Rendering template...')
432+
output = template.render(**template_values)
433+
434+
# Write output
435+
output_file = docs_dir / 'Fervo_Project_Red.md'
436+
output_file.write_text(output, encoding='utf-8')
437+
438+
_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")
443+
444+
384445
def generate_fervo_project_red_2026_docs():
385446
IMAGE_PATH = _get_file_path('fervo-project-red-2026_figure-5_measured-flowing-temperature.png')
386447
PRODUCTION_IMAGE_PATH = _get_file_path('fervo_project_red-2026_graph-data-extraction_production-series-edited.png')
@@ -445,6 +506,8 @@ def generate_fervo_project_red_2026_docs():
445506
geophires_modeled_stats_caption=f'\n{_tab}{geophires_modeled_stats_caption}',
446507
)
447508

509+
generate_fervo_project_red_2026_md(*get_project_red_input_params_and_result())
510+
448511

449512
if __name__ == '__main__':
450513
generate_fervo_project_red_2026_docs()

0 commit comments

Comments
 (0)