Source code for pyleecan.Functions.Simulation.VarSimu.run_multisim_step

from numpy import ndarray, min as np_min, max as np_max
import numpy as np
from SciDataTool import VectorField, Data
from ....Functions.Load.import_class import import_class
from ....Functions.Simulation.VarSimu.log_datakeeper_step_result import (
    log_datakeeper_step_result,
)
from logging import WARNING
from ....loggers import CONSOLE_LEVEL


[docs]def run_multisim_step( simulation, datakeeper_list, stop_if_error, post_keeper_postproc_list=None, simu_type=None, ): """Execute a simulation step of a multi-simulation and run datakeepers Parameters ---------- simulation: Simulation Simulation to run datakeeper_list List of datakeeper to run and update results stop_if_error: bool True: Raises an error if the simulation fails post_keeper_postproc_list : list list of postprocessing to run after the datakeeper simu_type : str To adapt the text ex: "Variable Load Results" """ # Change console logger level from a specific layer (if requested) if ( simulation.layer_log_warn is not None and simulation.layer >= simulation.layer_log_warn ): simulation.get_logger().handlers[0].level = WARNING # Run the simulation with/without error handling if stop_if_error: is_error = False result = simulation.run() else: try: result = simulation.run() is_error = False except Exception as err: print(err) is_error = True result = None # Revert logger level simulation.get_logger().handlers[0].level = CONSOLE_LEVEL # Datakeepers index = simulation.index if is_error: # Execute error_keeper for datakeeper in datakeeper_list: if datakeeper.error_keeper is None: value = None else: value = datakeeper.error_keeper(simulation) if simulation.index is None: # index == None => ref simu datakeeper.result_ref = value else: datakeeper.result[index] = value else: # Execute Normal DataKeeper for datakeeper in datakeeper_list: # Run and store Datakeeper try: value = datakeeper.keeper(result) except Exception as e: simulation.get_logger().error( "ERROR while calling DataKeeper " + datakeeper.name + " for simulation " + str(index) + ":\n" + str(e) ) if stop_if_error: raise e value = datakeeper.error_keeper(simulation) if simulation.index is None: # index == None => ref simu datakeeper.result_ref = value else: datakeeper.result[index] = value log_datakeeper_step_result(simulation, datakeeper_list, index, simu_type) # Run Post datakeeper post-processings if post_keeper_postproc_list is not None: for postproc in post_keeper_postproc_list: postproc.run(result) return result