Source code for sharpy.postproc.udpout

from sharpy.utils.solver_interface import solver, BaseSolver
import sharpy.utils.settings as settings_utils
import sharpy.io.network_interface as network_interface
import sharpy.utils.cout_utils as cout


[docs]@solver class UDPout(BaseSolver): """ Send output data via UDP This post-processor is in essence a wrapper of the :class:`~sharpy.io.network_interface.NetworkLoader` where only an output network adapter is created. """ solver_id = 'UDPout' solver_classification = 'post-processor' settings_types = network_interface.NetworkLoader.settings_types.copy() settings_default = network_interface.NetworkLoader.settings_default.copy() settings_description = network_interface.NetworkLoader.settings_description.copy() # Remove unnecessary settings from NetworkLoader (all related to the inputs) del settings_default['input_network_settings'] del settings_types['input_network_settings'] del settings_description['input_network_settings'] del settings_default['received_data_filename'] del settings_types['received_data_filename'] del settings_description['received_data_filename'] del settings_types['send_output_to_all_clients'] del settings_default['send_output_to_all_clients'] del settings_description['send_output_to_all_clients'] table = settings_utils.SettingsTable() __doc__ += table.generate(settings_types, settings_default, settings_description, header_line='This post-processor takes in the following settings, for a more ' 'detailed description see ' ':class:`~sharpy.io.network_interface.NetworkLoader`') def __init__(self): self.settings = None self.data = None self.network_loader = None self.out_network = None self.set_of_variables = None self.ts_max = 0 self.caller = None def initialise(self, data, custom_settings=None, caller=None, restart=False): self.data = data if custom_settings is None: self.settings = data.settings[self.solver_id] else: self.settings = custom_settings self.network_loader = network_interface.NetworkLoader() self.network_loader.initialise(in_settings=self.settings) self.set_of_variables = self.network_loader.get_inout_variables() self.out_network = self.network_loader.get_networks(networks='out') self.ts_max = self.data.ts + 1 self.caller = caller def run(self, **kwargs): online = settings_utils.set_value_or_default(kwargs, 'online', False) if online: self.set_of_variables.get_value(self.data) msg = self.set_of_variables.encode() self.out_network.send(msg, self.out_network.clients) else: for ts_index in range(self.ts_max): self.set_of_variables.get_value(self.data, timestep_index=ts_index) msg = self.set_of_variables.encode() self.out_network.send(msg, self.out_network.clients) cout.cout_wrap('...Finished', 1) self.shutdown() return self.data def shutdown(self): self.out_network.close()