Actual source code: ex32.c
1: /*$Id: ex32.c,v 1.30 2001/09/11 16:32:50 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: PetscScalar *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: VecCreate(PETSC_COMM_WORLD,&b);
34: VecSetSizes(b,PETSC_DECIDE,n);
35: VecSetFromOptions(b);
37: PetscMalloc((n+1)*sizeof(int),&col);
38: for (i=0; i<n+1; i++)
39: fscanf(file," I=%d%dn",&j,&col[i]);
40: fscanf(file," EOD JAn");
42: PetscMalloc(nnz*sizeof(PetscScalar),&val);
43: PetscMalloc(nnz*sizeof(int),&row);
44: fscanf(file," COEFFICIENT MATRIX IN SLAPSV: I, IA, An");
45: for (i=0; i<nnz; i++) {
46: fscanf(file," %d%d%len",&j,&row[i],&val[i]);
47: row[i]--;
48: }
49: fscanf(file," EOD IAn");
51: PetscMalloc(n*sizeof(PetscScalar),&bval);
52: PetscMalloc(n*sizeof(int),&brow);
53: fscanf(file," RESIDUAL IN SLAPSV ;IRHS=%dn",&j);
54: for (i=0; i<n; i++) {
55: fscanf(file," %d%le%dn",&j,bval+i,&j);
56: brow[i] = i;
57: }
58: fscanf(file," EOD RESIDUAL");
59: fclose(file);
61: m = n/size+1;
62: start = rank*m;
63: end = (rank+1)*m; if (end > n) end = n;
64: for (j=start; j<end; j++) {
65: length = col[j+1]-col[j];
66: MatSetValues(A,length,&row[col[j]-1],1,&j,&val[col[j]-1],INSERT_VALUES);
67: }
68: MatAssemblyBegin(A,MAT_FINAL_ASSEMBLY);
69: MatAssemblyEnd(A,MAT_FINAL_ASSEMBLY);
71: VecGetOwnershipRange(b,&start,&end);
72: VecSetValues(b,end-start,brow+start,bval+start,INSERT_VALUES);
73: VecAssemblyBegin(b);
74: VecAssemblyEnd(b);
76: PetscFree(col);
77: PetscFree(val);
78: PetscFree(row);
79: PetscFree(bval);
80: PetscFree(brow);
82: PetscPrintf(PETSC_COMM_SELF,"Reading matrix completes.n");
83: PetscOptionsGetString(PETSC_NULL,"-fout",fileout,127,PETSC_NULL);
84: PetscViewerBinaryOpen(PETSC_COMM_WORLD,fileout,PETSC_BINARY_CREATE,&view);
85: MatView(A,view);
86: VecView(b,view);
87: PetscViewerDestroy(view);
89: VecDestroy(b);
90: MatDestroy(A);
92: PetscFinalize();
93: return 0;
94: }