def create_data(self): space = Space(project_id=self.id) timer = Timer() timer.start() info = dict() info['number_of_particles'] = int(self.number_of_particles) info['dimension'] = int(self.dimension) info['project_id'] = self.id space.set_dimension(dimension=info['dimension']) space.add_particles(number=int(info['number_of_particles']), position=[0, 0, 0]) space.simulate( n=500, timer=timer, step_particles_insertion=self.particle_insertion.get('number')) space.simulate(n=200, timer=timer) info['simulation_number'] = space.simulation_number timer.stop() info['timer'] = timer.dictionary() json.dump(info, open(str(self.id) + '/' + 'info', 'w')) print(info)
def simulate(self): space = Space(project_id=self.id) timer = Timer() timer.start() space.set_dimension(dimension=self.dimension) for source in self.sources: space.add_particles(number=int(source.initial_particles_N), position=[ source.position.x_axis, source.position.y_axis, source.position.z_axis ]) for i in range(int(self.number_of_iterations / 25)): space.simulate(n=25, info=True, timer=timer, save_particles=False, sources=self.sources) self.save_lattice(particles=space.particles, simulation_number=space.simulation_number) timer.stop() print(timer.dictionary())
def simulate(self, project_id=str(), load=False, save=True, number_of_iterations=int(), number_of_particles=int(), dimension=int()): info = dict() load_and_continue = load space = Space(project_id=project_id) timer = Timer() timer.start() # Pokracuj od poslednej ulozenej polohy castic if load_and_continue: info = json.load(open(project_id, 'r')) space.particles = Particles.load( project_id=info['project_id'], simulation_number=info['simulation_number']) space.set_dimension(dimension=info['dimension']) space.simulation_number = info['simulation_number'] # Novy projekt if not load_and_continue: info = dict() info['number_of_particles'] = int(number_of_particles) info['dimension'] = dimension info['project_id'] = project_id # info['multisource'] = True # info['sources_distance'] = 10 # info['particle_insertion'] = {'start': 0, 'end': 499, 'number': 200, 'position':[5,0,0]} space.set_dimension(dimension=info['dimension']) space.add_particles(number=int(info['number_of_particles']), position=[-5, -2, 0]) space.walls = Walls() space.walls.add(x=-15, x_orientation=-1) space.walls.add(x=15, x_orientation=1) space.walls.add(y=15, y_orientation=1) space.walls.add(y=-15, y_orientation=-1) # space.wind = Wind() # space.wind.set(y_axis=1,x_axis=1, amplitude=0.05) # space.add_particles(number=int(info['number_of_particles']), position=[-3, -3, 0]) # space.add_particles(number=int(info['number_of_particles']), position=[3, 3, 0]) # space.add_particles(number=int(info['number_of_particles']), position=[-6, 6, 0]) # space.add_particles(number=int(info['number_of_particles'])*10, position=[6, -6, 0]) space.project_id = project_id # diffusion.space.wind.activate(wind_type='ConstantWind') # diffusion.space.wind.active_types['ConstantWind'].set(x_axis=5, amplitude=0.1) # # diffusion.space.walls.add() # diffusion.space.walls.pole[0].set(x_min=30, x_max=int(1e6)) # Core functionality - simulation with saving particles self.save_lattice(project_id=project_id, particles=space.particles, simulation_number=space.simulation_number) if save: space.simulate(n=number_of_iterations, timer=timer) if not save: for i in range(number_of_iterations): print(i) # if i < 500: # space.simulate(n=1, timer=timer, save_particles=False, step_particles_insertion=500) # else: # if i == 500: # space.wind = None space.simulate(n=10, timer=timer, save_particles=False, step_particles_insertion=0) self.save_lattice(project_id=project_id, particles=space.particles, simulation_number=space.simulation_number) info['simulation_number'] = space.simulation_number print(info) # Saving last state json.dump(info, open(project_id, 'w')) # Just final info timer.stop() print(timer)