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*/