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