def test_compute_first_collision_3d(): # FIXME: This test should not use facet indices as there are no guarantees # on how DOLFIN numbers facets reference = {1: [1364], 2: [1967, 1968, 1970, 1972, 1974, 1976], 3: [876, 877, 878, 879, 880, 881]} p = Point(0.3, 0.3, 0.3) mesh = UnitCubeMesh(8, 8, 8) for dim in range(1, 4): tree = BoundingBoxTree() tree.build(mesh, dim) first = tree.compute_first_collision(p) # FIXME: Face and test is excluded because it mistakingly # relies in the facet indices tdim = mesh.topology().dim() if dim != tdim - 1 and dim != tdim - 2: assert first in reference[dim] tree = mesh.bounding_box_tree() first = tree.compute_first_collision(p) assert first in reference[mesh.topology().dim()]
def test_compute_first_collision_3d(): # FIXME: This test should not use facet indices as there are no guarantees # on how DOLFIN numbers facets reference = { 1: [1364], 2: [1967, 1968, 1970, 1972, 1974, 1976], 3: [876, 877, 878, 879, 880, 881] } p = Point(0.3, 0.3, 0.3) mesh = UnitCubeMesh(8, 8, 8) for dim in range(1, 4): tree = BoundingBoxTree() tree.build(mesh, dim) first = tree.compute_first_collision(p) # FIXME: Face and test is excluded because it mistakingly # relies in the facet indices tdim = mesh.topology().dim() if dim != tdim - 1 and dim != tdim - 2: assert first in reference[dim] tree = mesh.bounding_box_tree() first = tree.compute_first_collision(p) assert first in reference[mesh.topology().dim()]
def test_advect_open(advection_scheme): pres = 3 mesh = UnitCubeMesh(10, 10, 10) # Particle x = RandomBox(Point(0.955, 0.45, 0.5), Point(0.99, 0.55, 0.6)).generate([pres, pres, pres]) x = comm.bcast(x, root=0) # Given velocity field: vexpr = Constant((1.0, 1.0, 1.0)) # Given time do_step: dt = 0.05 p = particles(x, [x, x], mesh) V = VectorFunctionSpace(mesh, "CG", 1) v = Function(V) v.assign(vexpr) # Different boundary parts bounds = Boundaries() bound_right = UnitCubeRight() # Mark all facets facet_marker = MeshFunction("size_t", mesh, mesh.topology().dim() - 1) facet_marker.set_all(0) bounds.mark(facet_marker, 1) bound_right.mark(facet_marker, 2) # Mark as open bound_right.mark(facet_marker, 2) if advection_scheme == "euler": ap = advect_particles(p, V, v, facet_marker) elif advection_scheme == "rk2": ap = advect_rk2(p, V, v, facet_marker) elif advection_scheme == "rk3": ap = advect_rk3(p, V, v, facet_marker) else: assert False # Do one timestep, particle must bounce from wall of ap.do_step(dt) num_particles = p.number_of_particles() # Check if all particles left domain if comm.rank == 0: assert num_particles == 0
def test_compute_first_collision_3d(): reference = {1: [1364], 2: [1967, 1968, 1970, 1972, 1974, 1976], 3: [876, 877, 878, 879, 880, 881]} p = Point(0.3, 0.3, 0.3) mesh = UnitCubeMesh(8, 8, 8) for dim in range(1, 4): tree = BoundingBoxTree() tree.build(mesh, dim) first = tree.compute_first_collision(p) assert first in reference[dim] tree = mesh.bounding_box_tree() first = tree.compute_first_collision(p) assert first in reference[mesh.topology().dim()]
def test_compute_collisions_point_3d(): reference = {1: set([1364]), 2: set([1967, 1968, 1970, 1972, 1974, 1976]), 3: set([876, 877, 878, 879, 880, 881])} p = Point(0.3, 0.3, 0.3) mesh = UnitCubeMesh(8, 8, 8) for dim in range(1, 4): tree = BoundingBoxTree() tree.build(mesh, dim) entities = tree.compute_collisions(p) # FIXME: Face and edges tests are excluded because test # mistakingly relies on the face and edge indices tdim = mesh.topology().dim() if dim != tdim - 1 and dim != tdim - 2: assert set(entities) == reference[dim]
def test_compute_collisions_3d(self): reference = {1: [1364], 2: [1967, 1968, 1970, 1972, 1974, 1976], 3: [876, 877, 878, 879, 880, 881]} p = Point(0.3, 0.3, 0.3) mesh = UnitCubeMesh(8, 8, 8) for dim in range(1, 4): tree = BoundingBoxTree() tree.build(mesh, dim) entities = tree.compute_collisions(p) if MPI.num_processes() == 1: self.assertEqual(sorted(entities), reference[dim]) tree = mesh.bounding_box_tree() entities = tree.compute_collisions(p) if MPI.num_processes() == 1: self.assertEqual(sorted(entities), reference[mesh.topology().dim()])
def test_compute_collisions_point_3d(): reference = { 1: set([1364]), 2: set([1967, 1968, 1970, 1972, 1974, 1976]), 3: set([876, 877, 878, 879, 880, 881]) } p = Point(0.3, 0.3, 0.3) mesh = UnitCubeMesh(8, 8, 8) for dim in range(1, 4): tree = BoundingBoxTree() tree.build(mesh, dim) entities = tree.compute_collisions(p) # FIXME: Face and edges tests are excluded because test # mistakingly relies on the face and edge indices tdim = mesh.topology().dim() if dim != tdim - 1 and dim != tdim - 2: assert set(entities) == reference[dim]
bc = DirichletBC(V, Constant((0, 0, 0)), clamped_boundary) # Define strain and stress def epsilon(u): return 0.5 * (grad(u) + grad(u).T) def sigma(u): return lambda_ * div(u) * Identity(d) + 2 * mu * epsilon(u) # Mark facets of the mesh and Neumann boundary condition boundaries = MeshFunction("size_t", mesh, mesh.topology().dim() - 1) boundaries.set_all(0) class NeumanBoundary(SubDomain): def inside(self, x, on_boundary): return on_boundary and near(x[0], 1, tol) NeumanBoundary().mark(boundaries, 1) # Define outer surface measure aware of Dirichlet and Neumann boundaries ds = Measure('ds', domain=mesh, subdomain_data=boundaries) # Define variational problem u = TrialFunction(V)