Actual source code: ex58f.F

petsc-3.7.3 2016-07-24
Report Typos and Errors
  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