Actual source code: ex58f.F
petsc-3.6.4 2016-04-12
1: !
2: !
3: ! This program demonstrates use of MatGetRow() and MatGetRowMaxAbs() from Fortran
4: !
5: program main
6: #include <petsc/finclude/petscsys.h>
7: #include <petsc/finclude/petscvec.h>
8: #include <petsc/finclude/petscmat.h>
9: #include <petsc/finclude/petscviewer.h>
11: Mat A
12: PetscErrorCode ierr
13: PetscInt i,cols(500),ncols,row,M,N
14: PetscScalar values(500)
15: PetscViewer v
16: Vec rowmax
17: character*(256) f
19: call PetscInitialize(PETSC_NULL_CHARACTER,ierr)
21: call PetscOptionsGetString(PETSC_NULL_CHARACTER,'-f',f,flg,ierr)
22: call PetscViewerBinaryOpen(PETSC_COMM_WORLD,f,FILE_MODE_READ,v, &
23: & ierr)
25: call MatCreate(PETSC_COMM_WORLD,A,ierr)
26: call MatSetType(A, MATSEQAIJ,ierr)
27: call MatLoad(A,v,ierr)
29: call MatView(A,PETSC_VIEWER_STDOUT_WORLD,ierr)
31: row = 2
32: call MatGetRow(A,row,ncols,cols,values,ierr)
33: do 10, i=1,ncols
34: print*,i,cols(i),values(i)
35: 10 continue
36: call MatRestoreRow(A,row,ncols,cols,values,ierr)
38: row = 5
39: call MatGetRow(A,row,ncols,cols,values,ierr)
40: do 20, i=1,ncols
41: print*,i,cols(i),values(i)
42: 20 continue
43: call MatRestoreRow(A,row,ncols,cols,values,ierr)
45: !
46: ! Test MatGetRowMaxAbs()
47: call MatGetSize(A,M,N,ierr)
48: call VecCreate(PETSC_COMM_WORLD,rowmax,ierr)
49: call VecSetSizes(rowmax,M,M,ierr)
50: call VecSetFromOptions(rowmax,ierr)
52: call MatGetRowMaxAbs(A,rowmax,PETSC_NULL_INTEGER,ierr)
53: call VecView(rowmax,PETSC_VIEWER_STDOUT_WORLD,ierr)
55: call MatGetRowMax(A,rowmax,PETSC_NULL_INTEGER,ierr)
56: call VecView(rowmax,PETSC_VIEWER_STDOUT_WORLD,ierr)
58: call MatGetRowMinAbs(A,rowmax,PETSC_NULL_INTEGER,ierr)
59: call VecView(rowmax,PETSC_VIEWER_STDOUT_WORLD,ierr)
61: call MatGetRowMin(A,rowmax,PETSC_NULL_INTEGER,ierr)
62: call VecView(rowmax,PETSC_VIEWER_STDOUT_WORLD,ierr)
64: call MatDestroy(A,ierr)
65: call PetscViewerDestroy(v,ierr)
66: call VecDestroy(rowmax,ierr)
68: call PetscFinalize(ierr)
69: end