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: #undef __FUNCT__
12: int main(int argc,char **args)
13: {
14: Mat A;
15: Vec b;
16: char filein[128],fileout[128];
17: int i,j,m,n,nnz,ierr,rank,size,start,end,*col,*row,*brow,length;
18: PetscScalar *val,*bval;
19: FILE* file;
20: PetscViewer view;
22: PetscInitialize(&argc,&args,(char *)0,help);
24: /* Read in matrix and RHS */
25: PetscOptionsGetString(PETSC_NULL,"-fin",filein,127,PETSC_NULL);
26: MPI_Comm_rank(PETSC_COMM_WORLD,&rank);
27: MPI_Comm_size(PETSC_COMM_WORLD,&size);
29: PetscFOpen(PETSC_COMM_SELF,filein,"r",&file);
31: fscanf(file," NUNKNS =%d NCOEFF =%dn",&n,&nnz);
32: fscanf(file," JA POINTER IN SLAPSVn");
34: MatCreateSeqAIJ(PETSC_COMM_WORLD,n,n,20,0,&A);
35: VecCreate(PETSC_COMM_WORLD,&b);
36: VecSetSizes(b,PETSC_DECIDE,n);
37: VecSetFromOptions(b);
39: PetscMalloc((n+1)*sizeof(int),&col);
40: for (i=0; i<n+1; i++)
41: fscanf(file," I=%d%dn",&j,&col[i]);
42: fscanf(file," EOD JAn");
44: PetscMalloc(nnz*sizeof(PetscScalar),&val);
45: PetscMalloc(nnz*sizeof(int),&row);
46: fscanf(file," COEFFICIENT MATRIX IN SLAPSV: I, IA, An");
47: for (i=0; i<nnz; i++) {
48: fscanf(file," %d%d%len",&j,&row[i],&val[i]);
49: row[i]--;
50: }
51: fscanf(file," EOD IAn");
53: PetscMalloc(n*sizeof(PetscScalar),&bval);
54: PetscMalloc(n*sizeof(int),&brow);
55: fscanf(file," RESIDUAL IN SLAPSV ;IRHS=%dn",&j);
56: for (i=0; i<n; i++) {
57: fscanf(file," %d%le%dn",&j,bval+i,&j);
58: brow[i] = i;
59: }
60: fscanf(file," EOD RESIDUAL");
61: fclose(file);
63: m = n/size+1;
64: start = rank*m;
65: end = (rank+1)*m; if (end > n) end = n;
66: for (j=start; j<end; j++) {
67: length = col[j+1]-col[j];
68: MatSetValues(A,length,&row[col[j]-1],1,&j,&val[col[j]-1],INSERT_VALUES);
69: }
70: MatAssemblyBegin(A,MAT_FINAL_ASSEMBLY);
71: MatAssemblyEnd(A,MAT_FINAL_ASSEMBLY);
73: VecGetOwnershipRange(b,&start,&end);
74: VecSetValues(b,end-start,brow+start,bval+start,INSERT_VALUES);
75: VecAssemblyBegin(b);
76: VecAssemblyEnd(b);
78: PetscFree(col);
79: PetscFree(val);
80: PetscFree(row);
81: PetscFree(bval);
82: PetscFree(brow);
84: PetscPrintf(PETSC_COMM_SELF,"Reading matrix completes.n");
85: PetscOptionsGetString(PETSC_NULL,"-fout",fileout,127,PETSC_NULL);
86: PetscViewerBinaryOpen(PETSC_COMM_WORLD,fileout,PETSC_BINARY_CREATE,&view);
87: MatView(A,view);
88: VecView(b,view);
89: PetscViewerDestroy(view);
91: VecDestroy(b);
92: MatDestroy(A);
94: PetscFinalize();
95: return 0;
96: }