Actual source code: ex32.c
1: /*$Id: ex32.c,v 1.27 2001/04/10 19:35:44 bsmith Exp $*/
3: static char help[] = "Reads in a matrix and vector in ASCII slap format. Writesn
4: them using the PETSc sparse format. Input parameters are:n
5: -fin <filename> : input filen
6: -fout <filename> : output filenn";
8: #include "petscmat.h"
10: int main(int argc,char **args)
11: {
12: Mat A;
13: Vec b;
14: char filein[128],fileout[128];
15: int i,j,m,n,nnz,ierr,rank,size,start,end,*col,*row,*brow,length;
16: Scalar *val,*bval;
17: FILE* file;
18: PetscViewer view;
20: PetscInitialize(&argc,&args,(char *)0,help);
22: /* Read in matrix and RHS */
23: PetscOptionsGetString(PETSC_NULL,"-fin",filein,127,PETSC_NULL);
24: MPI_Comm_rank(PETSC_COMM_WORLD,&rank);
25: MPI_Comm_size(PETSC_COMM_WORLD,&size);
27: PetscFOpen(PETSC_COMM_SELF,filein,"r",&file);
29: fscanf(file," NUNKNS =%d NCOEFF =%dn",&n,&nnz);
30: fscanf(file," JA POINTER IN SLAPSVn");
32: MatCreateSeqAIJ(PETSC_COMM_WORLD,n,n,20,0,&A);
33: VecCreateMPI(PETSC_COMM_WORLD,PETSC_DECIDE,n,&b);
35: PetscMalloc((n+1)*sizeof(int),&col);
36: for (i=0; i<n+1; i++)
37: fscanf(file," I=%d%dn",&j,&col[i]);
38: fscanf(file," EOD JAn");
40: PetscMalloc(nnz*sizeof(Scalar),&val);
41: PetscMalloc(nnz*sizeof(int),&row);
42: fscanf(file," COEFFICIENT MATRIX IN SLAPSV: I, IA, An");
43: for (i=0; i<nnz; i++) {
44: fscanf(file," %d%d%len",&j,&row[i],&val[i]);
45: row[i]--;
46: }
47: fscanf(file," EOD IAn");
49: PetscMalloc(n*sizeof(Scalar),&bval);
50: PetscMalloc(n*sizeof(int),&brow);
51: fscanf(file," RESIDUAL IN SLAPSV ;IRHS=%dn",&j);
52: for (i=0; i<n; i++) {
53: fscanf(file," %d%le%dn",&j,bval+i,&j);
54: brow[i] = i;
55: }
56: fscanf(file," EOD RESIDUAL");
57: fclose(file);
59: m = n/size+1;
60: start = rank*m;
61: end = (rank+1)*m; if (end > n) end = n;
62: for (j=start; j<end; j++) {
63: length = col[j+1]-col[j];
64: MatSetValues(A,length,&row[col[j]-1],1,&j,&val[col[j]-1],INSERT_VALUES);
65: }
66: MatAssemblyBegin(A,MAT_FINAL_ASSEMBLY);
67: MatAssemblyEnd(A,MAT_FINAL_ASSEMBLY);
69: VecGetOwnershipRange(b,&start,&end);
70: VecSetValues(b,end-start,brow+start,bval+start,INSERT_VALUES);
71: VecAssemblyBegin(b);
72: VecAssemblyEnd(b);
74: PetscFree(col);
75: PetscFree(val);
76: PetscFree(row);
77: PetscFree(bval);
78: PetscFree(brow);
80: PetscPrintf(PETSC_COMM_SELF,"Reading matrix completes.n");
81: PetscOptionsGetString(PETSC_NULL,"-fout",fileout,127,PETSC_NULL);
82: PetscViewerBinaryOpen(PETSC_COMM_WORLD,fileout,PETSC_BINARY_CREATE,&view);
83: MatView(A,view);
84: VecView(b,view);
85: PetscViewerDestroy(view);
87: VecDestroy(b);
88: MatDestroy(A);
90: PetscFinalize();
91: return 0;
92: }