def test_save_and_read_mesh_value_collection(tempdir): ndiv = 2 filename = os.path.join(tempdir, "mesh_value_collection.h5") mesh = UnitCubeMesh(MPI.comm_world, ndiv, ndiv, ndiv) def point2list(p): return [p[0], p[1], p[2]] # write to file with HDF5File(mesh.mpi_comm(), filename, 'w') as f: for dim in range(mesh.topology.dim): mvc = MeshValueCollection("size_t", mesh, dim) mesh.create_entities(dim) for e in MeshEntities(mesh, dim): # this can be easily computed to the check the value val = int(ndiv * sum(point2list(e.midpoint()))) + 1 mvc.set_value(e.index(), val) f.write(mvc, "/mesh_value_collection_{}".format(dim)) # read from file with HDF5File(mesh.mpi_comm(), filename, 'r') as f: for dim in range(mesh.topology.dim): mvc = f.read_mvc_size_t(mesh, "/mesh_value_collection_{}".format(dim)) # check the values for (cell, lidx), val in mvc.values().items(): eidx = Cell(mesh, cell).entities(dim)[lidx] mid = point2list(MeshEntity(mesh, dim, eidx).midpoint()) assert val == int(ndiv * sum(mid)) + 1
def test_save_and_read_mesh_value_collection(tempdir): ndiv = 2 filename = os.path.join(tempdir, "mesh_value_collection.h5") mesh = UnitCubeMesh(MPI.comm_world, ndiv, ndiv, ndiv) # write to file with HDF5File(mesh.mpi_comm(), filename, 'w') as f: for dim in range(mesh.topology.dim): mvc = MeshValueCollection("size_t", mesh, dim) mesh.create_entities(dim) mp = cpp.mesh.midpoints(mesh, dim, range(mesh.num_entities(dim))) for e in range(mesh.num_entities(dim)): # this can be easily computed to the check the value val = int(ndiv * mp[e].sum()) + 1 mvc.set_value(e, val) f.write(mvc, "/mesh_value_collection_{}".format(dim)) # read from file with HDF5File(mesh.mpi_comm(), filename, 'r') as f: for dim in range(mesh.topology.dim): mvc = f.read_mvc_size_t(mesh, "/mesh_value_collection_{}".format(dim)) mp = cpp.mesh.midpoints(mesh, dim, range(mesh.num_entities(dim))) # check the values for (cell, lidx), val in mvc.values().items(): eidx = MeshEntity(mesh, mesh.topology.dim, cell).entities(dim)[lidx] mid = mp[eidx] assert val == int(ndiv * mid.sum()) + 1
def test_save_and_read_mesh_value_collection_with_only_one_marked_entity( tempdir): ndiv = 2 filename = os.path.join(tempdir, "mesh_value_collection.h5") mesh = UnitCubeMesh(MPI.comm_world, ndiv, ndiv, ndiv) mvc = MeshValueCollection("size_t", mesh, 3) mesh.create_entities(3) if MPI.rank(mesh.mpi_comm()) == 0: mvc.set_value(0, 1) # write to file with HDF5File(mesh.mpi_comm(), filename, 'w') as f: f.write(mvc, "/mesh_value_collection") # read from file with HDF5File(mesh.mpi_comm(), filename, 'r') as f: mvc = f.read_mvc_size_t(mesh, "/mesh_value_collection") assert MPI.sum(mesh.mpi_comm(), mvc.size()) == 1 if MPI.rank(mesh.mpi_comm()) == 0: assert mvc.get_value(0, 0) == 1