示例#1
0
    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)
示例#2
0
    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())
示例#3
0
    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)