def nonzero_values(function): serialized_vector = Vector(MPI.COMM_SELF) function.vector().gather( serialized_vector, array(range(function.function_space().dim()), "intc")) indices = nonzero(serialized_vector.get_local()) return sort(serialized_vector.get_local()[indices])
def to_dense(A, mpi_comm=mpi_comm_world()): """ Convert a sparse matrix A to dense. For debugging only. """ v = Vector(mpi_comm) A.init_vector(v) nprocs = MPI.size(mpi_comm) if nprocs > 1: raise Exception("to_dense is only serial") if hasattr(A, "getrow"): n = A.size(0) m = A.size(1) B = np.zeros((n, m), dtype=np.float64) for i in range(0, n): [j, val] = A.getrow(i) B[i, j] = val return B else: x = Vector(mpi_comm) Ax = Vector(mpi_comm) A.init_vector(x, 1) A.init_vector(Ax, 0) n = Ax.get_local().shape[0] m = x.get_local().shape[0] B = np.zeros((n, m), dtype=np.float64) for i in range(0, m): i_ind = np.array([i], dtype=np.intc) x.set_local(np.ones(i_ind.shape), i_ind) x.apply("sum_values") A.mult(x, Ax) B[:, i] = Ax.get_local() x.set_local(np.zeros(i_ind.shape), i_ind) x.apply("sum_values") return B
def to_dense(A, mpi_comm = mpi_comm_world() ): """ Convert a sparse matrix A to dense. For debugging only. """ v = Vector(mpi_comm) A.init_vector(v) nprocs = MPI.size(mpi_comm) if nprocs > 1: raise Exception("to_dense is only serial") if hasattr(A, "getrow"): n = A.size(0) m = A.size(1) B = np.zeros( (n,m), dtype=np.float64) for i in range(0,n): [j, val] = A.getrow(i) B[i,j] = val return B else: x = Vector(mpi_comm) Ax = Vector(mpi_comm) A.init_vector(x,1) A.init_vector(Ax,0) n = Ax.get_local().shape[0] m = x.get_local().shape[0] B = np.zeros( (n,m), dtype=np.float64) for i in range(0,m): i_ind = np.array([i], dtype=np.intc) x.set_local(np.ones(i_ind.shape), i_ind) x.apply("sum_values") A.mult(x,Ax) B[:,i] = Ax.get_local() x.set_local(np.zeros(i_ind.shape), i_ind) x.apply("sum_values") return B