xref: /petsc/src/mat/impls/adj/mpi/mpiadj.h (revision 9dd11ecf0918283bb567d8b33a92f53ac4ea7840)
1 #pragma once
2 
3 #include <petsc/private/matimpl.h>
4 #include <petsc/private/hashsetij.h>
5 
6 /*
7   MATMPIAdj format - Compressed row storage for storing adjacency lists, and possibly weights
8                      This is for grid reorderings (to reduce bandwidth)
9                      grid partitionings, etc.
10 */
11 
12 typedef struct {
13   PetscHSetIJ ht;
14 
15   /*
16      once the matrix is assembled (either by calling MatAssemblyBegin/End() or MatMPIAdjSetPreallocation() or MatCreateMPIAdj()
17      then the data structures below are valid and cannot be changed
18   */
19   PetscInt     nz;
20   PetscInt    *diag;            /* pointers to diagonal elements, if they exist */
21   PetscInt    *i;               /* pointer to beginning of each row */
22   PetscInt    *j;               /* column values: j + i[k] is start of row k */
23   PetscInt    *values;          /* numerical values */
24   PetscBool    useedgeweights;  /* if edge weights are used  */
25   PetscBool    symmetric;       /* user indicates the nonzero structure is symmetric */
26   PetscBool    freeaij;         /* free a, i,j at destroy */
27   PetscBool    freeaijwithfree; /* use free() to free i,j instead of PetscFree() */
28   PetscScalar *rowvalues;       /* scalar work space for MatGetRow() */
29   PetscInt     rowvalues_alloc;
30 } Mat_MPIAdj;
31