def _init_visualization_and_io(self, sim): if self.config.output: output_cls = io.format_name_to_cls[self.config.output_format] else: output_cls = io.LBOutput if self.config.mode != 'visualization': return lambda subdomain: output_cls(self.config, subdomain.id) # basic_fields = sim.fields() # XXX compute total storage requirements for subdomain in self.subdomains: size = reduce(operator.mul, subdomain.size) vis_lock = mp.Lock() vis_buffer = Array(ctypes.c_float, size, lock=vis_lock) vis_geo_buffer = Array(ctypes.c_uint8, size, lock=vis_lock) subdomain.set_vis_buffers(vis_buffer, vis_geo_buffer) vis_lock = mp.Lock() vis_config = Value(io.VisConfig, lock=vis_lock) vis_config.iteration = -1 vis_config.field_name = '' vis_config.all_blocks = False # Start the visualizatione engine. vis_class = None for engine in util.get_visualization_engines(): if engine.name == self.config.vis_engine: vis_class = engine break if vis_class is None: self.config.logger.warning('Requested visualization engine not ' 'available.') try: vis_class = util.get_visualization_engines().next() except StopIteration: self.config.logger.warning( 'No visualization backends available. Falling back to ' 'batch mode.') self.config.mode = 'batch' return lambda subdomain: output_cls(self.config, subdomain.id) # Event to signal that the visualization process should be terminated. self._vis_quit_event = Event() self._vis_process = Process( target=lambda: vis_class( self.config, self.subdomains, self._vis_quit_event, self._quit_event, vis_config).run(), name='VisEngine') self._vis_process.start() return lambda subdomain: io.VisualizationWrapper( self.config, subdomain, vis_config, output_cls)
def _init_visualization_and_io(self, sim): if self.config.output: output_cls = io.format_name_to_cls[self.config.output_format] else: output_cls = io.LBOutput if self.config.mode != 'visualization': return lambda subdomain: output_cls(self.config, subdomain.id) # basic_fields = sim.fields() # XXX compute total storage requirements for subdomain in self.subdomains: size = reduce(operator.mul, subdomain.size) vis_lock = mp.Lock() vis_buffer = Array(ctypes.c_float, size, lock=vis_lock) vis_geo_buffer = Array(ctypes.c_uint8, size, lock=vis_lock) subdomain.set_vis_buffers(vis_buffer, vis_geo_buffer) vis_lock = mp.Lock() vis_config = Value(io.VisConfig, lock=vis_lock) vis_config.iteration = -1 vis_config.field_name = '' vis_config.all_blocks = False # Start the visualizatione engine. vis_class = util.get_visualization_engines().next() # Event to signal that the visualization process should be terminated. self._vis_quit_event = Event() self._vis_process = Process( target=lambda: vis_class( self.config, self.subdomains, self._vis_quit_event, self._quit_event, vis_config).run(), name='VisEngine') self._vis_process.start() return lambda subdomain: io.VisualizationWrapper( self.config, subdomain, vis_config, output_cls)