xref: /petsc/src/ksp/pc/impls/spai/dspai.c (revision daa037dfd3c3bec8dc8659548d2b20b07c1dc6de)
1 
2 #include <petscmat.h>
3 #include <petsc/private/petscimpl.h>
4 
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.
10 
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;
18 
19   PetscFunctionBegin;
20   PetscObjectGetComm((PetscObject)A,&comm);
21   MPI_Comm_size(comm,&size);
22   PetscCheck(size == 1,PetscObjectComm((PetscObject)A),PETSC_ERR_SUP,"Only single processor dumps");
23   PetscCall(MatGetSize(A,&n,&n));
24   /* print the matrix */
25   fprintf(file,"%d\n",n);
26   for (i=0; i<n; i++) {
27     PetscCall(MatGetRow(A,i,&nz,&cols,&vals));
28     for (j=0; j<nz; j++) fprintf(file,"%d %d %16.14e\n",i+1,cols[j]+1,vals[j]);
29     PetscCall(MatRestoreRow(A,i,&nz,&cols,&vals));
30   }
31   PetscFunctionReturn(0);
32 }
33 
34 PetscErrorCode  VecDumpSPAI(Vec b,FILE *file)
35 {
36   int          n,i;
37   PetscScalar *array;
38 
39   PetscFunctionBegin;
40   PetscCall(VecGetSize(b,&n));
41   PetscCall(VecGetArray(b,&array));
42   fprintf(file,"%d\n",n);
43   for (i=0; i<n; i++) fprintf(file,"%d %16.14e\n",i+1,array[i]);
44   PetscFunctionReturn(0);
45 }
46