Actual source code: ex58f.F90

  1: !
  2: !
  3: !   This program demonstrates use of MatGetRow() and MatGetRowMaxAbs() from Fortran
  4: !
  5:       program main
  6: #include <petsc/finclude/petscmat.h>
  7:       use petscmat
  8:       implicit none

 10:       Mat      A
 11:       PetscErrorCode ierr
 12:       PetscInt M,N,row,ncol
 13:       PetscViewer   v
 14:       Vec           rowmax
 15:       PetscBool flg
 16:       IS isrow, iscol
 17:       character*(256)  f
 18:       PetscInt, pointer :: cols(:)
 19:       PetscScalar, pointer :: vals(:)

 21:       PetscCallA(PetscInitialize(ierr))

 23:       PetscCallA(PetscOptionsGetString(PETSC_NULL_OPTIONS,PETSC_NULL_CHARACTER,'-f',f,flg,ierr))
 24:       PetscCallA(PetscViewerBinaryOpen(PETSC_COMM_WORLD,f,FILE_MODE_READ,v,ierr))

 26:       PetscCallA(MatCreate(PETSC_COMM_WORLD,A,ierr))
 27:       PetscCallA(MatSetType(A, MATSEQAIJ,ierr))
 28:       PetscCallA(MatLoad(A,v,ierr))

 30:       PetscCallA(MatView(A,PETSC_VIEWER_STDOUT_WORLD,ierr))

 32:       row = 1
 33:       PetscCallA(MatGetRow(A,row,ncol,cols,vals,ierr))
 34:       !print*,cols,vals
 35:       PetscCallA(MatRestoreRow(A,row,ncol,cols,vals,ierr))
 36:       PetscCallA(MatGetRow(A,row,PETSC_NULL_INTEGER,cols,PETSC_NULL_SCALAR_POINTER,ierr))
 37:       !print*,cols
 38:       PetscCallA(MatRestoreRow(A,row,PETSC_NULL_INTEGER,cols,PETSC_NULL_SCALAR_POINTER,ierr))
 39:       PetscCallA(MatGetRow(A,row,PETSC_NULL_INTEGER,PETSC_NULL_INTEGER_POINTER,vals,ierr))
 40:       !print*,vals
 41:       PetscCallA(MatRestoreRow(A,row,PETSC_NULL_INTEGER,PETSC_NULL_INTEGER_POINTER,vals,ierr))
 42:       PetscCallA(MatGetRow(A,row,ncol,PETSC_NULL_INTEGER_POINTER,PETSC_NULL_SCALAR_POINTER,ierr))
 43:       PetscCallA(MatRestoreRow(A,row,ncol,PETSC_NULL_INTEGER_POINTER,PETSC_NULL_SCALAR_POINTER,ierr))

 45: !
 46: !     Test MatGetRowMaxAbs()
 47:       PetscCallA(MatGetSize(A,M,N,ierr))
 48:       PetscCallA(VecCreate(PETSC_COMM_WORLD,rowmax,ierr))
 49:       PetscCallA(VecSetSizes(rowmax,M,M,ierr))
 50:       PetscCallA(VecSetFromOptions(rowmax,ierr))

 52:       PetscCallA(MatGetRowMaxAbs(A,rowmax,PETSC_NULL_INTEGER_ARRAY,ierr))
 53:       PetscCallA(VecView(rowmax,PETSC_VIEWER_STDOUT_WORLD,ierr))

 55:       PetscCallA(MatGetRowMax(A,rowmax,PETSC_NULL_INTEGER_ARRAY,ierr))
 56:       PetscCallA(VecView(rowmax,PETSC_VIEWER_STDOUT_WORLD,ierr))

 58:       PetscCallA(MatGetRowMinAbs(A,rowmax,PETSC_NULL_INTEGER_ARRAY,ierr))
 59:       PetscCallA(VecView(rowmax,PETSC_VIEWER_STDOUT_WORLD,ierr))

 61:       PetscCallA(MatGetRowMin(A,rowmax,PETSC_NULL_INTEGER_ARRAY,ierr))
 62:       PetscCallA(VecView(rowmax,PETSC_VIEWER_STDOUT_WORLD,ierr))

 64:       PetscCallA(MatGetOwnershipIS(A,isrow,iscol,ierr))
 65:       PetscCallA(ISDestroy(isrow,ierr))
 66:       PetscCallA(ISDestroy(iscol,ierr))
 67:       PetscCallA(MatGetOwnershipIS(A,PETSC_NULL_IS,PETSC_NULL_IS,ierr))

 69:       PetscCallA(MatDestroy(A,ierr))
 70:       PetscCallA(PetscViewerDestroy(v,ierr))
 71:       PetscCallA(VecDestroy(rowmax,ierr))

 73:       PetscCallA(PetscFinalize(ierr))
 74:       end

 76: !/*TEST
 77: !
 78: !     test:
 79: !       args: -f ${DATAFILESPATH}/matrices/tiny
 80: !       requires: datafilespath double !complex !defined(PETSC_USE_64BIT_INDICES)
 81: !
 82: !TEST*/