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.")