def test_mesh_function_assign_2D_facets(): mesh = UnitSquareMesh(MPI.comm_world, 3, 3) mesh.create_entities(1) tdim = mesh.topology.dim num_cell_facets = cpp.mesh.cell_num_entities(mesh.cell_type, tdim - 1) f = MeshFunction("int", mesh, tdim - 1, 25) connectivity = mesh.topology.connectivity(tdim, tdim - 1) for c in range(mesh.num_cells()): facets = connectivity.connections(c) for i in range(num_cell_facets): assert 25 == f.values[facets[i]] g = MeshValueCollection("int", mesh, 1) g.assign(f) assert mesh.num_entities(tdim - 1) == len(f.values) assert mesh.num_cells() * 3 == g.size() for c in range(mesh.num_cells()): for i in range(num_cell_facets): assert 25 == g.get_value(c, i) f2 = MeshFunction("int", mesh, g, 0) connectivity = mesh.topology.connectivity(tdim, tdim - 1) for c in range(mesh.num_cells()): facets = connectivity.connections(c) for i in range(num_cell_facets): assert f2.values[facets[i]] == g.get_value(c, i)
def test_mesh_function_assign_2D_cells(): mesh = UnitSquareMesh(MPI.comm_world, 3, 3) ncells = mesh.num_cells() f = MeshFunction("int", mesh, mesh.topology.dim, 0) for c in range(ncells): f.values[c] = ncells - c g = MeshValueCollection("int", mesh, 2) g.assign(f) assert ncells == len(f.values) assert ncells == g.size() f2 = MeshFunction("int", mesh, g, 0) for c in range(mesh.num_cells()): value = ncells - c assert value == g.get_value(c, 0) assert f2.values[c] == g.get_value(c, 0) h = MeshValueCollection("int", mesh, 2) global_indices = mesh.topology.global_indices(2) ncells_global = mesh.num_entities_global(2) for c in range(mesh.num_cells()): if global_indices[c] in [5, 8, 10]: continue value = ncells_global - global_indices[c] h.set_value(c, int(value)) f3 = MeshFunction("int", mesh, h, 0) values = f3.values values[values > ncells_global] = 0. assert MPI.sum(mesh.mpi_comm(), values.sum() * 1.0) == 140.
def test_failsafe_sweep(): interpolate_expression = Expression('x[0]', degree=1) mesh = UnitSquareMesh(5, 5) V = FunctionSpace(mesh, "DG", 1) v = Function(V) v.assign(interpolate_expression) np_min, np_max = 1, 2 np_failsafe = 4 # Initialize particles x = RandomRectangle(Point(0.0, 0.0), Point(1., 1.)).generate([100, 100]) s = assign_particle_values(x, interpolate_expression) # Broadcast to other procs x = comm.bcast(x, root=0) s = comm.bcast(s, root=0) property_idx = 1 p = particles(x, [s], mesh) AD = AddDelete(p, np_min, np_max, [v]) AD.do_sweep_failsafe(np_failsafe) # Must recover linear lstsq_rho = l2projection(p, V, property_idx) lstsq_rho.project(v.cpp_object()) error = sqrt( assemble( (v - interpolate_expression) * (v - interpolate_expression) * dx)) assert len(p.positions() == mesh.num_cells() * np_failsafe) assert error < 1e-12
def test_ghost_connectivities(mode): # Ghosted mesh meshG = UnitSquareMesh(MPI.comm_world, 4, 4, ghost_mode=mode) meshG.create_connectivity(1, 2) # Reference mesh, not ghosted, not parallel meshR = UnitSquareMesh(MPI.comm_self, 4, 4, ghost_mode=cpp.mesh.GhostMode.none) meshR.create_connectivity(1, 2) tdim = meshR.topology.dim # Create reference mapping from facet midpoint to cell midpoint reference = {} facet_mp = cpp.mesh.midpoints(meshR, tdim - 1, range(meshR.num_entities(tdim - 1))) cell_mp = cpp.mesh.midpoints(meshR, tdim, range(meshR.num_entities(tdim))) reference = dict.fromkeys([tuple(row) for row in facet_mp], []) for i in range(meshR.num_entities(tdim - 1)): for cidx in meshR.topology.connectivity(1, 2).connections(i): reference[tuple(facet_mp[i])].append(cell_mp[cidx].tolist()) # Loop through ghosted mesh and check connectivities tdim = meshG.topology.dim num_facets = meshG.num_entities(tdim - 1) - meshG.topology.ghost_offset(tdim - 1) allowable_cell_indices = range(meshG.num_cells()) facet_mp = cpp.mesh.midpoints(meshG, tdim - 1, range(meshG.num_entities(tdim - 1))) cell_mp = cpp.mesh.midpoints(meshG, tdim, range(meshG.num_entities(tdim))) for i in range(num_facets): assert tuple(facet_mp[i]) in reference for cidx in meshG.topology.connectivity(1, 2).connections(i): assert cidx in allowable_cell_indices assert cell_mp[cidx].tolist() in reference[tuple(facet_mp[i])]
def test_save_and_read_mesh_2D(tempdir): filename = os.path.join(tempdir, "mesh2d.h5") # Write to file mesh0 = UnitSquareMesh(MPI.comm_world, 20, 20) mesh_file = HDF5File(mesh0.mpi_comm(), filename, "w") mesh_file.write(mesh0, "/my_mesh") mesh_file.close() # Read from file mesh_file = HDF5File(mesh0.mpi_comm(), filename, "r") mesh1 = mesh_file.read_mesh("/my_mesh", False, cpp.mesh.GhostMode.none) mesh_file.close() assert mesh0.num_entities_global(0) == mesh1.num_entities_global(0) dim = mesh0.topology.dim assert mesh0.num_entities_global(dim) == mesh1.num_entities_global(dim) # Read from file, and use partition from file mesh_file = HDF5File(mesh0.mpi_comm(), filename, "r") mesh2 = mesh_file.read_mesh("/my_mesh", True, cpp.mesh.GhostMode.none) mesh_file.close() assert mesh0.num_cells() == mesh2.num_cells() dim = mesh0.topology.dim assert mesh0.num_entities_global(dim) == mesh1.num_entities_global(dim)
def test_mesh_function_assign_2D_cells(): mesh = UnitSquareMesh(MPI.comm_world, 3, 3) ncells = mesh.num_cells() f = MeshFunction("int", mesh, mesh.topology.dim, 0) for cell in Cells(mesh): f[cell] = ncells - cell.index() g = MeshValueCollection("int", mesh, 2) g.assign(f) assert ncells == f.size() assert ncells == g.size() f2 = MeshFunction("int", mesh, g, 0) for cell in Cells(mesh): value = ncells - cell.index() assert value == g.get_value(cell.index(), 0) assert f2[cell] == g.get_value(cell.index(), 0) h = MeshValueCollection("int", mesh, 2) global_indices = mesh.topology.global_indices(2) ncells_global = mesh.num_entities_global(2) for cell in Cells(mesh): if global_indices[cell.index()] in [5, 8, 10]: continue value = ncells_global - global_indices[cell.index()] h.set_value(cell.index(), int(value)) f3 = MeshFunction("int", mesh, h, 0) values = f3.array() values[values > ncells_global] = 0. assert MPI.sum(mesh.mpi_comm(), values.sum() * 1.0) == 140.
def test_ghost_2d(mode): N = 8 num_cells = N * N * 2 mesh = UnitSquareMesh(MPI.comm_world, N, N, ghost_mode=mode) if MPI.size(mesh.mpi_comm()) > 1: assert MPI.sum(mesh.mpi_comm(), mesh.num_cells()) > num_cells assert mesh.num_entities_global(0) == 81 assert mesh.num_entities_global(2) == num_cells
def test_mesh_function_assign_2D_vertices(): mesh = UnitSquareMesh(MPI.comm_world, 3, 3) mesh.create_entities(0) f = MeshFunction("int", mesh, 0, 25) g = MeshValueCollection("int", mesh, 0) g.assign(f) assert mesh.num_entities(0) == len(f.values) assert mesh.num_cells() * 3 == g.size() f2 = MeshFunction("int", mesh, g, 0) num_cell_vertices = cpp.mesh.cell_num_vertices(mesh.cell_type) tdim = mesh.topology.dim connectivity = mesh.topology.connectivity(tdim, 0) for c in range(mesh.num_cells()): vertices = connectivity.connections(c) for i in range(num_cell_vertices): assert 25 == g.get_value(c, i) assert f2.values[vertices[i]] == g.get_value(c, i)
def test_mesh_function_assign_2D_vertices(): mesh = UnitSquareMesh(MPI.comm_world, 3, 3) mesh.create_entities(0) f = MeshFunction("int", mesh, 0, 25) g = MeshValueCollection("int", mesh, 0) g.assign(f) assert mesh.num_entities(0) == f.size() assert mesh.num_cells() * 3 == g.size() f2 = MeshFunction("int", mesh, g, 0) for cell in Cells(mesh): for i, vert in enumerate(VertexRange(cell)): assert 25 == g.get_value(cell.index(), i) assert f2[vert] == g.get_value(cell.index(), i)
def test_assign_2D_vertices(): mesh = UnitSquareMesh(MPI.comm_world, 3, 3) mesh.create_connectivity(2, 0) ncells = mesh.num_cells() f = MeshValueCollection("int", mesh, 0) all_new = True for cell in Cells(mesh): value = ncells - cell.index() for i, vert in enumerate(VertexRange(cell)): all_new = all_new and f.set_value(cell.index(), i, value + i) g = MeshValueCollection("int", mesh, 0) g.assign(f) assert ncells * 3 == f.size() assert ncells * 3 == g.size() assert all_new for cell in Cells(mesh): value = ncells - cell.index() for i, vert in enumerate(VertexRange(cell)): assert value + i == g.get_value(cell.index(), i)
def test_assign_2D_facets(): mesh = UnitSquareMesh(MPI.comm_world, 3, 3) mesh.init(2, 1) ncells = mesh.num_cells() f = MeshValueCollection("int", mesh, 1) all_new = True for cell in Cells(mesh): value = ncells - cell.index() for i, facet in enumerate(FacetRange(cell)): all_new = all_new and f.set_value(cell.index(), i, value + i) g = MeshValueCollection("int", mesh, 1) g.assign(f) assert ncells * 3 == f.size() assert ncells * 3 == g.size() assert all_new for cell in Cells(mesh): value = ncells - cell.index() for i, facet in enumerate(FacetRange(cell)): assert value + i == g.get_value(cell.index(), i)
def test_mesh_function_assign_2D_facets(): mesh = UnitSquareMesh(MPI.comm_world, 3, 3) mesh.init(1) f = MeshFunction("int", mesh, mesh.topology.dim - 1, 25) for cell in Cells(mesh): for i, facet in enumerate(FacetRange(cell)): assert 25 == f[facet] g = MeshValueCollection("int", mesh, 1) g.assign(f) assert mesh.num_facets() == f.size() assert mesh.num_cells() * 3 == g.size() for cell in Cells(mesh): for i, facet in enumerate(FacetRange(cell)): assert 25 == g.get_value(cell.index(), i) f2 = MeshFunction("int", mesh, g, 0) for cell in Cells(mesh): for i, facet in enumerate(FacetRange(cell)): assert f2[facet] == g.get_value(cell.index(), i)
def test_assign_2D_cells(): mesh = UnitSquareMesh(MPI.comm_world, 3, 3) ncells = mesh.num_cells() f = MeshValueCollection("int", mesh, 2) all_new = True for c in range(ncells): value = ncells - c all_new = all_new and f.set_value(c, value) g = MeshValueCollection("int", mesh, 2) g.assign(f) assert ncells == f.size() assert ncells == g.size() assert all_new for c in range(ncells): value = ncells - c assert value, g.get_value(c == 0) old_value = g.get_value(0, 0) g.set_value(0, 0, old_value + 1) assert old_value + 1 == g.get_value(0, 0)
def test_assign_2D_vertices(): mesh = UnitSquareMesh(MPI.comm_world, 3, 3) mesh.create_connectivity(2, 0) ncells = mesh.num_cells() num_cell_vertices = cpp.mesh.cell_num_vertices(mesh.cell_type) f = MeshValueCollection("int", mesh, 0) all_new = True for c in range(ncells): value = ncells - c for i in range(num_cell_vertices): all_new = all_new and f.set_value(c, i, value + i) g = MeshValueCollection("int", mesh, 0) g.assign(f) assert ncells * 3 == f.size() assert ncells * 3 == g.size() assert all_new for c in range(ncells): value = ncells - c for i in range(num_cell_vertices): assert value + i == g.get_value(c, i)
def test_assign_2D_facets(): mesh = UnitSquareMesh(MPI.comm_world, 3, 3) mesh.create_connectivity(2, 1) tdim = mesh.topology.dim num_cell_facets = cpp.mesh.cell_num_entities(mesh.cell_type, tdim - 1) ncells = mesh.num_cells() f = MeshValueCollection("int", mesh, 1) all_new = True for c in range(ncells): value = ncells - c for i in range(num_cell_facets): all_new = all_new and f.set_value(c, i, value + i) g = MeshValueCollection("int", mesh, 1) g.assign(f) assert ncells * 3 == f.size() assert ncells * 3 == g.size() assert all_new for c in range(ncells): value = ncells - c for i in range(num_cell_facets): assert value + i == g.get_value(c, i)
B0 = get_Bhat(dim=dim, pol_order=p, problem=problem) A = AG.sparray() if calculate == 1: print('saving the matrices...') savemat(filen_data, dict(A=A, B0=B0, A_T=A_T), do_compression=True) else: data = loadmat(filen_data) A = data['A'] A_T = data['A_T'] B0 = data['B0'] mem_eff = mesh.num_cells() * A_T[0].size / mem_sparse(A) com_eff = (2 * (nnz(B0) - ones(B0)) * mesh.num_cells() + mesh.num_cells() * A_T[0].size) / nnz(A) mem_Aloc = V.element().space_dimension()**2 print( '[Ne, p, mem_sparse(A), mem_Aloc, nnz(A_T[0]), nnz(B0), mem_eff, com_eff]' ) for val in [ Ne, p, mem_sparse(A), mem_Aloc, mesh.num_cells() * A_T[0].size, A_T[0].size, nnz(B0), mem_eff, com_eff ]: if isinstance(val, int): ss += ' {:,} &'.format(val)
def test_UnitSquareMeshLocal(): """Create mesh of unit square.""" mesh = UnitSquareMesh(MPI.comm_self, 5, 7) assert mesh.num_vertices() == 48 assert mesh.num_cells() == 70 assert mesh.geometry.dim == 2