Actual source code: ex58f.F
1: !
2: !
3: ! This program demonstrates use of MatGetRow() and MatGetRowMaxAbs() from Fortran
4: !
5: program main
6: #include finclude/petscsys.h
7: #include finclude/petscvec.h
8: #include finclude/petscmat.h
9: #include 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
18: call PetscInitialize(PETSC_NULL_CHARACTER,ierr)
20: call PetscViewerBinaryOpen(PETSC_COMM_WORLD,'small', &
21: & FILE_MODE_READ,v,ierr)
23: call MatLoad(v,MATSEQAIJ,A,ierr)
25: call MatView(A,PETSC_VIEWER_STDOUT_WORLD,ierr)
27: row = 2
28: call MatGetRow(A,row,ncols,cols,values,ierr)
29: do 10, i=1,ncols
30: print*,i,cols(i),values(i)
31: 10 continue
32: call MatRestoreRow(A,row,ncols,cols,values,ierr)
34: row = 5
35: call MatGetRow(A,row,ncols,cols,values,ierr)
36: do 20, i=1,ncols
37: print*,i,cols(i),values(i)
38: 20 continue
39: call MatRestoreRow(A,row,ncols,cols,values,ierr)
41: !
42: ! Test MatGetRowMaxAbs()
43: call MatGetSize(A,M,N,ierr)
44: call VecCreate(PETSC_COMM_WORLD,rowmax,ierr)
45: call VecSetSizes(rowmax,M,M,ierr)
46: call VecSetFromOptions(rowmax,ierr)
48: call MatGetRowMaxAbs(A,rowmax,PETSC_NULL_INTEGER,ierr)
49: call VecView(rowmax,PETSC_VIEWER_STDOUT_WORLD,ierr)
51: call MatDestroy(A,ierr)
52: call PetscViewerDestroy(v,ierr)
53: call VecDestroy(rowmax,ierr)
55: call PetscFinalize(ierr)
56: end