[petsc-users] Loading a PETsc matrix with matrix data in CSR format?
Klaus Burkart
k_burkart at yahoo.com
Sun Sep 17 09:25:51 CDT 2017
The matrix import function looks like this:
void csr2pet
(
const Foam::lduMatrix & matrix,
petsc_declaration<Type> & petsc_matrix // How to declare the PETsc matrix to be filled?
)
{
int n = matrix.diag().size(); // small case n = 40800
int nnz = matrix.lower().size() + matrix.upper().size() + matrix.diag().size(); // small case nnz = 203800
// allocate memory for CSR sparse matrix using calloc
ScalarType * vals = (ScalarType *)calloc(nnz, sizeof(ScalarType));
uint * cols = (uint *)calloc(nnz, sizeof(uint));
uint * rows = (uint *)calloc(n, sizeof(uint));
// call function to convert original LDU matrix to CSR format
exPet::ldu2csr(matrix,rows,cols,vals);
// fill PETsc matrix
MatSetValues(petsc_matrix, ?, ?, ?, ?, ?, INSERT_VALUES);
// free and release the matrix memory
free(rows); free(cols); free(vals); // calloc()
}
Questions:
1: How to declare the petsc_matrix to be filled by the function with the content of the original matrix?
2: MatSetValues(petsc_matrix, ?, ?, ?, ?, ?, INSERT_VALUES); is used to actually fill the petsc_matrix and I was of the opinion that PETsc uses the CSR format but I can't work out how CSR format is described by:
v - a logically two-dimensional array of values
m, idxm - the number of rows and their global indices
n, idxn - the number of columns and their global indices
My original matrix is converted to CSR format, i.e. three arrays cols (column_indices), rows (row_start_indices) and vals (values).
How can I load my matrix into a PETsc matrix for parallel processing? MatSetValues(petsc_matrix, ?, ?, ?, ?, ?, INSERT_VALUES);
Klaus
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.mcs.anl.gov/pipermail/petsc-users/attachments/20170917/94c94c02/attachment.html>
More information about the petsc-users
mailing list