Actual source code: dspai.c


  2: #include <petscmat.h>
  3: #include <petsc/private/petscimpl.h>

  5: /*
  6:      MatDumpSPAI - Dumps a PETSc matrix to a file in an ASCII format
  7:   suitable for the SPAI code of Stephen Barnard to solve. This routine
  8:   is simply here to allow testing of matrices directly with the SPAI
  9:   code, rather then through the PETSc interface.

 11: */
 12: PetscErrorCode MatDumpSPAI(Mat A, FILE *file)
 13: {
 14:   const PetscScalar *vals;
 15:   int                i, j, n, size, nz;
 16:   const int         *cols;
 17:   MPI_Comm           comm;

 19:   PetscObjectGetComm((PetscObject)A, &comm);
 20:   MPI_Comm_size(comm, &size);
 22:   MatGetSize(A, &n, &n);
 23:   /* print the matrix */
 24:   fprintf(file, "%d\n", n);
 25:   for (i = 0; i < n; i++) {
 26:     MatGetRow(A, i, &nz, &cols, &vals);
 27:     for (j = 0; j < nz; j++) fprintf(file, "%d %d %16.14e\n", i + 1, cols[j] + 1, vals[j]);
 28:     MatRestoreRow(A, i, &nz, &cols, &vals);
 29:   }
 30:   return 0;
 31: }

 33: PetscErrorCode VecDumpSPAI(Vec b, FILE *file)
 34: {
 35:   int          n, i;
 36:   PetscScalar *array;

 38:   VecGetSize(b, &n);
 39:   VecGetArray(b, &array);
 40:   fprintf(file, "%d\n", n);
 41:   for (i = 0; i < n; i++) fprintf(file, "%d %16.14e\n", i + 1, array[i]);
 42:   return 0;
 43: }