Source code for sharpy.presharpy.presharpy


import configparser

import sharpy.utils.cout_utils as cout
from sharpy.utils.solver_interface import solver, dict_of_solvers
import sharpy.utils.settings as settings
import sharpy.utils.exceptions as exceptions


[docs]@solver class PreSharpy(object): """ The PreSharpy solver is the main loader solver of SHARPy. It takes the admin-like settings for the simulation, including the case name, case route and the list of solvers to run and in which order to run them. This order of solvers is referred to, throughout SHARPy, as the ``flow`` setting. This is a mandatory solver for all simulations at the start so it is never included in the ``flow`` setting. The settings for this solver are parsed through in the configuration file under the header ``SHARPy``. I.e, when you are defining the config file for a simulation, the settings for PreSharpy are included as: .. code-block:: python import configobj filename = '<case_route>/<case_name>.sharpy' config = configobj.ConfigObj() config.filename = filename config['SHARPy'] = {'case': '<your SHARPy case name>', # an example setting # Rest of your settings for the PreSHARPy class } """ solver_id = 'PreSharpy' solver_classification = 'loader' settings_types = dict() settings_default = dict() settings_description = dict() settings_types['flow'] = 'list(str)' settings_default['flow'] = None settings_description['flow'] = "List of the desired solvers' ``solver_id`` to run in sequential order." settings_types['case'] = 'str' settings_default['case'] = 'default_case_name' settings_description['case'] = 'Case name' settings_types['route'] = 'str' settings_default['route'] = None settings_description['route'] = 'Route to case files' settings_types['write_screen'] = 'bool' settings_default['write_screen'] = True settings_description['write_screen'] = 'Display output on terminal screen.' settings_types['write_log'] = 'bool' settings_default['write_log'] = False settings_description['write_log'] = 'Write log file' settings_types['log_folder'] = 'str' settings_default['log_folder'] = '' settings_description['log_folder'] = 'Log folder destination directory' settings_table = settings.SettingsTable() __doc__ += settings_table.generate(settings_types, settings_default, settings_description, header_line='The following are the settings that the PreSharpy class takes:') def __init__(self, in_settings=None): self._settings = True if in_settings is None: # call for documentation only self._settings = False self.ts = 0 self.settings_types['log_file'] = 'str' self.settings_default['log_file'] = 'log' if self._settings: self.settings = in_settings self.settings['SHARPy']['flow'] = self.settings['SHARPy']['flow'] settings.to_custom_types(self.settings['SHARPy'], self.settings_types, self.settings_default) cout.cout_wrap.initialise(self.settings['SHARPy']['write_screen'], self.settings['SHARPy']['write_log'], self.settings['SHARPy']['log_folder'], self.settings['SHARPy']['log_file']) self.case_route = in_settings['SHARPy']['route'] + '/' self.case_name = in_settings['SHARPy']['case'] for solver_name in in_settings['SHARPy']['flow']: try: dict_of_solvers[solver_name] except KeyError: exceptions.NotImplementedSolver(solver_name) def initialise(self): pass def update_settings(self, new_settings): self.settings = new_settings self.settings['SHARPy']['flow'] = self.settings['SHARPy']['flow'] settings.to_custom_types(self.settings['SHARPy'], self.settings_types, self.settings_default) cout.cout_wrap.initialise(self.settings['SHARPy']['write_screen'], self.settings['SHARPy']['write_log'], self.settings['SHARPy']['log_folder'], self.settings['SHARPy']['log_file']) @staticmethod def load_config_file(file_name): config = configparser.ConfigParser() config.read(file_name) return config