Source code for src.spyice.main_process
from __future__ import annotations
import os
from pathlib import Path
from omegaconf import DictConfig
from spyice.models import SeaIceModel
from spyice.postprocess import Analysis
from spyice.postprocess import VisualiseModel
from spyice.preprocess import PreProcess
[docs]
class MainProcess:
"""Main class to run the model."""
[docs]
def __init__(
self,
config : DictConfig,
hyd_output_dir: Path | str = Path(os.path.join(os.getcwd(), "outputs")),
project_path=os.getcwd(),
) -> None:
"""
Args:
config: The configuration object.
hyd_output_dir (Path | str): The directory path for the hydraulic output. Defaults to the 'outputs' directory in the current working directory.
project_path (Path | str): The project path. Defaults to the current working directory.
"""
self.config: DictConfig = config
# self.config = ConfigSort.getconfig_dataclass(
# self.config_raw, config_type="default"
# )
self.project_path: Path | str = project_path
self.out_dir_final : Path | str = hyd_output_dir
[docs]
def run_model(self) -> None:
"""Runs the model using the provided configuration and output directory.
Args:
None
Returns:
None
"""
# apply boundary and initial conditions during the pre-processing stage and get the pre-processed dataclass
preprocess_data, userinput_data = PreProcess.get_variables(
self.config, self.out_dir_final
)
# run the sea ice model and get the results dataclass
results_data = SeaIceModel.get_results(preprocess_data, userinput_data)
# error analysis of results and get the analysis dataclass
analysis_data = Analysis.get_error_results(
t_k_diff=results_data.t_k_diff,
t_stefan_diff=results_data.t_stefan_diff,
residual=results_data.residual_voller_all,
temperature_mushy=results_data.t_k_iter_all,
phi_mushy=results_data.all_phi_iter_all,
salinity_mushy=results_data.s_k_iter_all,
output_dir=self.out_dir_final,
)
# plot the sea ice model using the user input, results, and analysis dataclasses
self.plot_model(userinput_data, results_data, analysis_data)
[docs]
def plot_model(self, userinput_data, results_data, analysis_data):
"""Plots various visualizations of the model.
Args:
userinput_data (UserInputData): The user input data.
results_data (ResultsData): The results data.
analysis_data (AnalysisData): The error analysis data.
Returns:
None
Raises:
None
"""
print("Postprocessing...")
model_visualization_object = VisualiseModel(
user_input_dataclass=userinput_data,
results_dataclass=results_data,
error_analysis_dataclass=analysis_data,
)
# model_visualization_object.plot_error_temp(100, norm="inf", savefig=False)
# model_visualization_object.plot_depth_over_time(savefig=True)
# uncomment from here for physical model
# model_visualization_object.plot_depth_over_time_heatmap(savefig=True)
# # model_visualization_object.plot_temperature(
# # z_depth=0.1, savefig=True, Buffo_matlab=False
# # )
# model_visualization_object.plot_H_iter_all(savefig=True)
model_visualization_object.plot_temperature_heatmap(savefig=True, export_csv=True)
model_visualization_object.plot_liquidfraction_heatmap(savefig=True)
model_visualization_object.plot_liquid_fraction_profile(savefig=True)
model_visualization_object.plot_temperature_profile(savefig=True)
if userinput_data.is_salinity_equation:
model_visualization_object.plot_salinity_heatmap(savefig=True)
model_visualization_object.plot_temperature_liquid_solid_evolution(
z_depth=0.1, savefig=True
)
# # plot vertical profiles of algae model
model_visualization_object.plot_salinity_sourceterm_profile(savefig=True)
model_visualization_object.plot_liquid_salinity_profile(savefig=True)
model_visualization_object.plot_brinevelocity_profile(savefig=True)
model_visualization_object.plot_salinity_profile(savefig=True)
if userinput_data.is_algae_equation:
# # algae model
model_visualization_object.plot_carbon_concentration(savefig=True)
model_visualization_object.plot_nutrient_concentration(savefig=True)
model_visualization_object.plot_photosynthetic_rate(savefig=True)
model_visualization_object.plot_chla_bulk_concentration(savefig=True)
model_visualization_object.plot_nutrient_cn_profile(savefig=True)
model_visualization_object.plot_carbon_concentration_profile(savefig=True)
model_visualization_object.plot_radiation_algae(savefig=True)
model_visualization_object.plot_radiation_algae_dt_by_rho_c(savefig=True)
model_visualization_object.plot_radiation_all(savefig=True)
model_visualization_object.plot_radiation_profile(savefig=True)
if userinput_data.algae_model_BAL_type == "all":
# # plot algae model multiple layers
model_visualization_object.plot_nutrient_concentration_multiplelayers(savefig=True)
model_visualization_object.plot_carbon_concentration_multiplelayers(savefig=True)
model_visualization_object.plot_photosynthetic_rate_multiplelayers(savefig=True)
model_visualization_object.plot_radiation_algae_multiplelayers(savefig=True)
model_visualization_object.plot_chla_bulk_concentration_multiplelayers(savefig=True)
# model_visualization_object.plot_temperature_heatmap_as_gif()
# model_visualization_object.plot_salinity_heatmap_as_gif()
#model_visualization_object.plot_carbon_heatmap_as_gif()
#model_visualization_object.plot_nutrient_concentration_heatmap_as_gif()
# 3d plots
# model_visualization_object.plot_temperature_3D(savefig=True)
# model_visualization_object.plot_temperature_3d_contours(savefig=True)
print("Postprocessing done.")