Exemplo n.º 1
0
    def test_second_pass_reflection_serial(self):

        # create particle in center of lower left quadrant
        particles = HydroParticleCreator(num=1, dim=2)
        particles['position-x'][0] = 0.25
        particles['position-y'][0] = 0.25

        # create unit square domain
        self.domain_manager.set_domain(DomainLimits())
        self.domain_manager.register_fields(particles)
        self.domain_manager.set_boundary_condition(Reflective())

        mesh = Mesh()
        mesh.register_fields(particles)
        mesh.initialize()

        # set infinte radius flag FIX add variable instead of magic number
        particles['radius'][0] = -1

        self.domain_manager.setup_for_ghost_creation(particles)
        self.domain_manager.create_ghost_particles(particles)

        # two ghost particles created
        self.assertTrue(particles.get_carray_size() == 3)

        particles['radius'][0] = 0.6
        self.domain_manager.update_search_radius(particles)
        self.domain_manager.create_ghost_particles(particles)

        # no new ghost should be created
        self.assertTrue(particles.get_carray_size() == 3)
Exemplo n.º 2
0
    def setUp(self):
        nx = ny = nz = 10
        n = nx * nx * nz

        self.particles = HydroParticleCreator(num=n, dim=3)

        # create lattice particles in a unit box
        L = 1.
        dx = L / nx
        dy = L / ny
        dz = L / nz
        self.volume = dx * dy * dz

        part = 0
        for i in range(nx):
            for j in range(ny):
                for k in range(nz):
                    self.particles['position-x'][part] = (i + 0.5) * dx
                    self.particles['position-y'][part] = (j + 0.5) * dy
                    self.particles['position-z'][part] = (k + 0.5) * dz
                    part += 1

        # create unit square domain, reflective boundary condition
        minx = np.array([0., 0., 0.])
        maxx = np.array([1., 1., 1.])
        self.domain_manager = DomainManager(initial_radius=0.1,
                                            search_radius_factor=1.25)
        self.domain_manager.set_domain_limits(DomainLimits(minx, maxx, dim=3))
        self.domain_manager.register_fields(self.particles)
        self.domain_manager.set_boundary_condition(Reflective())
        self.domain_manager.initialize()

        self.mesh = Mesh()
        self.mesh.register_fields(self.particles)
        self.mesh.initialize()
Exemplo n.º 3
0
    def test_setup_for_ghost_creation_reflection(self):

        # create particle in center of lower left quadrant
        particles = HydroParticleCreator(num=1, dim=2)
        particles['position-x'][0] = 0.25
        particles['position-y'][0] = 0.25

        # create unit square domain
        self.domain_manager.set_domain(DomainLimits())
        self.domain_manager.register_fields(particles)
        self.domain_manager.set_boundary_condition(Reflective())

        mesh = Mesh()
        mesh.register_fields(particles)
        mesh.initialize()

        # set infinte radius flag FIX add variable instead of magic number
        particles['radius'][0] = -1

        self.domain_manager.setup_for_ghost_creation(particles)
        self.domain_manager.create_ghost_particles(particles)

        # two ghost particles created
        self.assertTrue(particles.get_carray_size() == 3)

        # two ghost particles should of been created
        # first particle reflected across x-min
        self.assertEqual(particles['position-x'][1], -0.25)
        self.assertEqual(particles['position-y'][1],  0.25)

        # second particle reflected across y-min
        self.assertEqual(particles['position-x'][2],  0.25)
        self.assertEqual(particles['position-y'][2], -0.25)

        # should have particle in flagged buffer
        self.assertFalse(self.domain_manager.ghost_complete())

        # update search radius to remove particle from being flagged
        particles['radius'][1:] = 0.3
        self.domain_manager.update_search_radius(particles)
        self.assertTrue(self.domain_manager.ghost_complete())
Exemplo n.º 4
0
    def test_check_initial_radius(self):

        # create particle in center of lower left quadrant
        particles = HydroParticleCreator(num=1, dim=2)
        particles['position-x'][0] = 0.125
        particles['position-y'][0] = 0.125

        # create unit square domain
        self.domain_manager.set_domain(DomainLimits())
        self.domain_manager.register_fields(particles)
        self.domain_manager.set_boundary_condition(Reflective())

        mesh = Mesh()
        mesh.register_fields(particles)
        mesh.initialize()

        # set infinte radius flag FIX add variable instead of magic number
        particles['radius'][0] = -1

        self.domain_manager.setup_for_ghost_creation(particles)
        self.assertTrue(particles['radius'][0] == 0.25)
        self.assertTrue(particles['old_radius'][0] == 0.25)
Exemplo n.º 5
0
    def setUp(self):
        n = 100
        self.particles = HydroParticleCreator(num=n, dim=2)

        # create uniform random particles in a unit box
        np.random.seed(0)
        self.particles["position-x"][:] = np.random.uniform(size=n)
        self.particles["position-y"][:] = np.random.uniform(size=n)

        # create unit square domain, reflective boundary condition
        minx = np.array([0., 0.])
        maxx = np.array([1., 1.])
        self.domain_manager = DomainManager(initial_radius=0.1,
                                            search_radius_factor=1.25)
        self.domain_manager.set_domain_limits(DomainLimits(minx, maxx))
        self.domain_manager.register_fields(self.particles)
        self.domain_manager.set_boundary_condition(Reflective())
        self.domain_manager.initialize()

        self.mesh = Mesh()
        self.mesh.register_fields(self.particles)
        self.mesh.initialize()