Actual source code: ex33.c
1: /*$Id: ex33.c,v 1.23 2001/09/11 16:32:50 bsmith Exp $*/
3: static char help[] = "Writes a matrix using the PETSc sparse format. Input arguments are:n
4: -fout <file> : output file namenn";
6: #include petscmat.h
8: int main(int argc,char **args)
9: {
10: Mat A;
11: Vec b;
12: char fileout[128];
13: int i,j,m = 6,n = 6,N = 36,ierr,I,J;
14: PetscTruth flg;
15: PetscScalar val,v;
16: PetscViewer view;
18: PetscInitialize(&argc,&args,(char *)0,help);
20: PetscOptionsHasName(PETSC_NULL,"-use_mataij",&flg);
21: if (flg) {
22: MatCreateMPIAIJ(PETSC_COMM_WORLD,PETSC_DECIDE,PETSC_DECIDE,N,N,
23: PETSC_DEFAULT,PETSC_NULL,PETSC_DEFAULT,PETSC_NULL,&A);
24: #if defined(PETSC_HAVE_BLOCKSOLVE) && !defined(PETSC_USE_COMPLEX) && !defined(PETSC_USE_SINGLE)
25: } else {
26: MatCreateMPIRowbs(PETSC_COMM_WORLD,PETSC_DECIDE,N,6,PETSC_NULL,&A);
27: #endif
28: }
30: for (i=0; i<m; i++) {
31: for (j=0; j<n; j++) {
32: v = -1.0; I = j + n*i;
33: if (i>0) {J = I - n; MatSetValues(A,1,&I,1,&J,&v,INSERT_VALUES);}
34: if (i<m-1) {J = I + n; MatSetValues(A,1,&I,1,&J,&v,INSERT_VALUES);}
35: if (j>0) {J = I - 1; MatSetValues(A,1,&I,1,&J,&v,INSERT_VALUES);}
36: if (j<n-1) {J = I + 1; MatSetValues(A,1,&I,1,&J,&v,INSERT_VALUES);}
37: v = 4.0; MatSetValues(A,1,&I,1,&I,&v,INSERT_VALUES);
38: }
39: }
40: MatAssemblyBegin(A,MAT_FINAL_ASSEMBLY);
41: MatAssemblyEnd(A,MAT_FINAL_ASSEMBLY);
43: VecCreate(PETSC_COMM_WORLD,&b);
44: VecSetSizes(b,PETSC_DECIDE,N);
45: VecSetFromOptions(b);
46: for (i=0; i<N; i++) {
47: val = i + 1;
48: VecSetValues(b,1,&i,&val,INSERT_VALUES);
49: }
50: VecAssemblyBegin(b);
51: VecAssemblyEnd(b);
53: PetscOptionsGetString(PETSC_NULL,"-fout",fileout,127,PETSC_NULL);
54: PetscViewerBinaryOpen(PETSC_COMM_WORLD,fileout,PETSC_BINARY_CREATE,&view);
55: MatView(A,view);
56: VecView(b,view);
57: PetscViewerDestroy(view);
59: VecDestroy(b);
60: MatDestroy(A);
62: PetscFinalize();
63: return 0;
64: }