def start_simulation(self):
"""Starts the simulation with visualization."""
self.show_setup(halt=False)
main_plot = self.axes.imshow(self.field_as_matrix(),
extent=(0, max(self.field.x.vector) / self._x_axis_factor,
max(self.field.y.vector) / self._y_axis_factor, 0),
cmap='viridis')
main_plot.set_clim(-self.scale, self.scale)
color_bar = pp.colorbar(main_plot)
color_bar.set_label(self.observed_component, rotation=270)
sim_process = mp.Process(target=self._sim_function, args=(self._plot_queue,))
sim_process.start()
# wait for simulation initialization
while self._plot_queue.empty():
pl.pause(0.1)
finished = False
while not finished:
# wait for new simulation result
while self._plot_queue.empty():
pl.pause(0.01)
message = self._plot_queue.get()
# simulation function returns field object when simulation is complete to get output
if isinstance(message, fld.Field):
# update main process field components with simulation result
self._update_components(message)
finished = True
else:
time, data = message
self.axes.title.set_text('{title} $t$ = {time:.{prec}f} {prefix}s'
.format(title=self.plot_title, time=time/self._t_factor,
prec=self.time_precision, prefix=self._t_prefix))
main_plot.set_data(self.field_as_matrix(data))
pl.pause(self.frame_delay)
sim_process.join()
pp.show()
评论列表
文章目录