def start_simulation(self):
"""Starts the simulation with visualization."""
self.show_setup(halt=False)
main_plot, = self.axes.plot([])
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.x.vector / self._x_axis_factor, data)
pl.pause(self.frame_delay)
sim_process.join()
pp.show()
评论列表
文章目录