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 MatCreate(PETSC_COMM_WORLD,A,ierr)
24: call MatSetType(A, MATSEQAIJ,ierr)
25: call MatLoad(A,v,ierr)
27: call MatView(A,PETSC_VIEWER_STDOUT_WORLD,ierr)
29: row = 2
30: call MatGetRow(A,row,ncols,cols,values,ierr)
31: do 10, i=1,ncols
32: print*,i,cols(i),values(i)
33: 10 continue
34: call MatRestoreRow(A,row,ncols,cols,values,ierr)
36: row = 5
37: call MatGetRow(A,row,ncols,cols,values,ierr)
38: do 20, i=1,ncols
39: print*,i,cols(i),values(i)
40: 20 continue
41: call MatRestoreRow(A,row,ncols,cols,values,ierr)
43: !
44: ! Test MatGetRowMaxAbs()
45: call MatGetSize(A,M,N,ierr)
46: call VecCreate(PETSC_COMM_WORLD,rowmax,ierr)
47: call VecSetSizes(rowmax,M,M,ierr)
48: call VecSetFromOptions(rowmax,ierr)
50: call MatGetRowMaxAbs(A,rowmax,PETSC_NULL_INTEGER,ierr)
51: call VecView(rowmax,PETSC_VIEWER_STDOUT_WORLD,ierr)
53: call MatDestroy(A,ierr)
54: call PetscViewerDestroy(v,ierr)
55: call VecDestroy(rowmax,ierr)
57: call PetscFinalize(ierr)
58: end