55import matplotlib .pyplot as plt
66import numpy as np
77import pandas as pd
8+ from jinja2 import Environment
9+ from jinja2 import FileSystemLoader
810from scipy .interpolate import interp1d
911from 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+
384445def 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
449512if __name__ == '__main__' :
450513 generate_fervo_project_red_2026_docs ()
0 commit comments