def test_multi_ps_matrix(mesh): """Tests point source PointSource(V, source) for mulitple point sources applied to a matrix for 1D, 2D and 3D. Global points given to constructor from rank 0 processor. """ c_ids = [0, 1, 2] rank = MPI.rank(mesh.mpi_comm()) V = VectorFunctionSpace(mesh, "CG", 1, dim=2) u, v = TrialFunction(V), TestFunction(V) A = assemble(Constant(0.0) * dot(u, v) * dx) source = [] if rank == 0: for c_id in c_ids: cell = Cell(mesh, c_id) point = cell.midpoint() source.append((point, 10.0)) ps = PointSource(V, source) ps.apply(A) # Checks b sums to correct value a_sum = MPI.sum(mesh.mpi_comm(), np.sum(A.array())) assert round(a_sum - 2 * len(c_ids) * 10) == 0
def test_multi_ps_vector(mesh): """Tests point source PointSource(V, source) for mulitple point sources applied to a vector for 1D, 2D and 3D. Global points given to constructor from rank 0 processor. """ c_ids = [0, 1, 2] rank = MPI.rank(mesh.mpi_comm()) V = FunctionSpace(mesh, "CG", 1) v = TestFunction(V) b = assemble(Constant(0.0) * v * dx) source = [] if rank == 0: for c_id in c_ids: cell = Cell(mesh, c_id) point = cell.midpoint() source.append((point, 10.0)) ps = PointSource(V, source) ps.apply(b) # Checks b sums to correct value b_sum = b.sum() assert round(b_sum - len(c_ids) * 10.0) == 0
def test_multi_ps_matrix(mesh): """Tests point source PointSource(V, source) for mulitple point sources applied to a matrix for 1D, 2D and 3D. Global points given to constructor from rank 0 processor. """ c_ids = [0, 1, 2] rank = MPI.rank(mesh.mpi_comm()) V = VectorFunctionSpace(mesh, "CG", 1, dim=2) u, v = TrialFunction(V), TestFunction(V) A = assemble(Constant(0.0)*dot(u, v)*dx) source = [] if rank == 0: for c_id in c_ids: cell = Cell(mesh, c_id) point = cell.midpoint() source.append((point, 10.0)) ps = PointSource(V, source) ps.apply(A) # Checks b sums to correct value a_sum = MPI.sum(mesh.mpi_comm(), np.sum(A.array())) assert round(a_sum - 2*len(c_ids)*10) == 0
def test_multi_ps_vector(mesh): """Tests point source PointSource(V, source) for mulitple point sources applied to a vector for 1D, 2D and 3D. Global points given to constructor from rank 0 processor. """ c_ids = [0, 1, 2] rank = MPI.rank(mesh.mpi_comm()) V = FunctionSpace(mesh, "CG", 1) v = TestFunction(V) b = assemble(Constant(0.0)*v*dx) source = [] if rank == 0: for c_id in c_ids: cell = Cell(mesh, c_id) point = cell.midpoint() source.append((point, 10.0)) ps = PointSource(V, source) ps.apply(b) # Checks b sums to correct value b_sum = b.sum() assert round(b_sum - len(c_ids)*10.0) == 0
def test_ghost_connectivities(mode): # Ghosted mesh meshG = UnitSquareMesh(MPI.comm_world, 4, 4, ghost_mode=mode) meshG.init(1, 2) # Reference mesh, not ghosted, not parallel meshR = UnitSquareMesh(MPI.comm_self, 4, 4, ghost_mode=cpp.mesh.GhostMode.none) meshR.init(1, 2) # Create reference mapping from facet midpoint to cell midpoint reference = {} for facet in Facets(meshR): fidx = facet.index() facet_mp = tuple(facet.midpoint()[:]) reference[facet_mp] = [] for cidx in meshR.topology.connectivity(1, 2)(fidx): cell = Cell(meshR, cidx) cell_mp = tuple(cell.midpoint()[:]) reference[facet_mp].append(cell_mp) # Loop through ghosted mesh and check connectivities allowable_cell_indices = [ c.index() for c in Cells(meshG, cpp.mesh.MeshRangeType.ALL) ] for facet in Facets(meshG, cpp.mesh.MeshRangeType.REGULAR): fidx = facet.index() facet_mp = tuple(facet.midpoint()[:]) assert facet_mp in reference for cidx in meshG.topology.connectivity(1, 2)(fidx): assert cidx in allowable_cell_indices cell = Cell(meshG, cidx) cell_mp = tuple(cell.midpoint()[:]) assert cell_mp in reference[facet_mp]
def test_pointsource_vector(mesh): """Tests point source when given constructor PointSource(V, point, mag) with a vector that isn't placed at a node for 1D, 2D and 3D. Global points given to constructor from rank 0 processor """ cell = Cell(mesh, 0) point = cell.midpoint() rank = MPI.rank(mesh.mpi_comm()) V = FunctionSpace(mesh, "CG", 1) v = TestFunction(V) b = assemble(Constant(0.0) * v * dx) if rank == 0: ps = PointSource(V, point, 10.0) else: ps = PointSource(V, []) ps.apply(b) # Checks array sums to correct value b_sum = b.sum() assert round(b_sum - 10.0) == 0
def test_pointsource_vector(mesh): """Tests point source when given constructor PointSource(V, point, mag) with a vector that isn't placed at a node for 1D, 2D and 3D. Global points given to constructor from rank 0 processor """ cell = Cell(mesh, 0) point = cell.midpoint() rank = MPI.rank(mesh.mpi_comm()) V = FunctionSpace(mesh, "CG", 1) v = TestFunction(V) b = assemble(Constant(0.0)*v*dx) if rank == 0: ps = PointSource(V, point, 10.0) else: ps = PointSource(V, []) ps.apply(b) # Checks array sums to correct value b_sum = b.sum() assert round(b_sum - 10.0) == 0
def foo(cell_index): # get the midpoint as array cell = Cell(self.mesh, cell_index) midpoint = cell.midpoint() return [midpoint.x(), midpoint.y()]
def eval_cell(self, values, x, cell): c = Cell(mesh, cell.index) if c.midpoint()[1] > db + 0.02*np.cos(np.pi*x[0]/float(lmbdax))*np.cos(np.pi*x[2]/float(lmbdaz)): values[0] = 1.0 else: values[0] = 0.0