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)
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()
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())
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)
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()