Module conduction.tools.meshtools
Copyright 2017 Ben Mather
This file is part of Conduction https://git.dias.ie/itherc/conduction/
Conduction is free software: you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation, either version 3 of the License, or any later version.
Conduction is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details.
You should have received a copy of the GNU Lesser General Public License along with Conduction. If not, see http://www.gnu.org/licenses/.
Expand source code
"""
Copyright 2017 Ben Mather
This file is part of Conduction <https://git.dias.ie/itherc/conduction/>
Conduction is free software: you can redistribute it and/or modify
it under the terms of the GNU Lesser General Public License as published by
the Free Software Foundation, either version 3 of the License, or any later version.
Conduction is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU Lesser General Public License for more details.
You should have received a copy of the GNU Lesser General Public License
along with Conduction. If not, see <http://www.gnu.org/licenses/>.
"""
import numpy as np
def csr_tocoo(indptr, indices, data):
""" Convert from CSR to COO sparse matrix format """
d = np.diff(indptr)
I = np.repeat(np.arange(0,d.size,dtype='int32'), d)
return I, indices, data
def coo_tocsr(I, J, V):
""" Convert from COO to CSR sparse matrix format """
nnz = np.bincount(I)
indptr = np.insert(np.cumsum(nnz),0,0)
return indptr, J, V
def sum_duplicates(I, J, V):
"""
Sum all duplicate entries in the matrix
"""
order = np.lexsort((J, I))
I, J, V = I[order], J[order], V[order]
unique_mask = ((I[1:] != I[:-1]) |
(J[1:] != J[:-1]))
unique_mask = np.append(True, unique_mask)
unique_inds, = np.nonzero(unique_mask)
return I[unique_mask], J[unique_mask], np.add.reduceat(V, unique_inds)
def convert_petscmat_to_scipy(mat):
from scipy.sparse import csr_matrix
indptr, indices, values = mat.getValuesCSR()
return csr_matrix((values, indices, indptr))
Functions
def convert_petscmat_to_scipy(mat)
-
Expand source code
def convert_petscmat_to_scipy(mat): from scipy.sparse import csr_matrix indptr, indices, values = mat.getValuesCSR() return csr_matrix((values, indices, indptr))
def coo_tocsr(I, J, V)
-
Convert from COO to CSR sparse matrix format
Expand source code
def coo_tocsr(I, J, V): """ Convert from COO to CSR sparse matrix format """ nnz = np.bincount(I) indptr = np.insert(np.cumsum(nnz),0,0) return indptr, J, V
def csr_tocoo(indptr, indices, data)
-
Convert from CSR to COO sparse matrix format
Expand source code
def csr_tocoo(indptr, indices, data): """ Convert from CSR to COO sparse matrix format """ d = np.diff(indptr) I = np.repeat(np.arange(0,d.size,dtype='int32'), d) return I, indices, data
def sum_duplicates(I, J, V)
-
Sum all duplicate entries in the matrix
Expand source code
def sum_duplicates(I, J, V): """ Sum all duplicate entries in the matrix """ order = np.lexsort((J, I)) I, J, V = I[order], J[order], V[order] unique_mask = ((I[1:] != I[:-1]) | (J[1:] != J[:-1])) unique_mask = np.append(True, unique_mask) unique_inds, = np.nonzero(unique_mask) return I[unique_mask], J[unique_mask], np.add.reduceat(V, unique_inds)