1d8606c27SBarry Smith! 2d8606c27SBarry Smith! 3d8606c27SBarry Smith! This program demonstrates use of MatGetRow() and MatGetRowMaxAbs() from Fortran 4d8606c27SBarry Smith! 5d8606c27SBarry Smith#include <petsc/finclude/petscmat.h> 6*c5e229c2SMartin Diehlprogram main 7d8606c27SBarry Smith use petscmat 8d8606c27SBarry Smith implicit none 9d8606c27SBarry Smith 10d8606c27SBarry Smith Mat A 11d8606c27SBarry Smith PetscErrorCode ierr 12f14a4c02SBarry Smith PetscInt M, N, row, ncol 13d8606c27SBarry Smith PetscViewer v 14d8606c27SBarry Smith Vec rowmax 15d8606c27SBarry Smith PetscBool flg 165d83a8b1SBarry Smith IS isrow, iscol 17d8606c27SBarry Smith character*(256) f 18f14a4c02SBarry Smith PetscInt, pointer :: cols(:) 19f14a4c02SBarry Smith PetscScalar, pointer :: vals(:) 20d8606c27SBarry Smith 21d8606c27SBarry Smith PetscCallA(PetscInitialize(ierr)) 22d8606c27SBarry Smith 23d8606c27SBarry Smith PetscCallA(PetscOptionsGetString(PETSC_NULL_OPTIONS, PETSC_NULL_CHARACTER, '-f', f, flg, ierr)) 24d8606c27SBarry Smith PetscCallA(PetscViewerBinaryOpen(PETSC_COMM_WORLD, f, FILE_MODE_READ, v, ierr)) 25d8606c27SBarry Smith 26d8606c27SBarry Smith PetscCallA(MatCreate(PETSC_COMM_WORLD, A, ierr)) 27d8606c27SBarry Smith PetscCallA(MatSetType(A, MATSEQAIJ, ierr)) 28d8606c27SBarry Smith PetscCallA(MatLoad(A, v, ierr)) 29d8606c27SBarry Smith 30d8606c27SBarry Smith PetscCallA(MatView(A, PETSC_VIEWER_STDOUT_WORLD, ierr)) 31d8606c27SBarry Smith 32f14a4c02SBarry Smith row = 1 33f14a4c02SBarry Smith PetscCallA(MatGetRow(A, row, ncol, cols, vals, ierr)) 34f14a4c02SBarry Smith !print*,cols,vals 35f14a4c02SBarry Smith PetscCallA(MatRestoreRow(A, row, ncol, cols, vals, ierr)) 36f14a4c02SBarry Smith PetscCallA(MatGetRow(A, row, PETSC_NULL_INTEGER, cols, PETSC_NULL_SCALAR_POINTER, ierr)) 37f14a4c02SBarry Smith !print*,cols 38f14a4c02SBarry Smith PetscCallA(MatRestoreRow(A, row, PETSC_NULL_INTEGER, cols, PETSC_NULL_SCALAR_POINTER, ierr)) 39f14a4c02SBarry Smith PetscCallA(MatGetRow(A, row, PETSC_NULL_INTEGER, PETSC_NULL_INTEGER_POINTER, vals, ierr)) 40f14a4c02SBarry Smith !print*,vals 41f14a4c02SBarry Smith PetscCallA(MatRestoreRow(A, row, PETSC_NULL_INTEGER, PETSC_NULL_INTEGER_POINTER, vals, ierr)) 42f14a4c02SBarry Smith PetscCallA(MatGetRow(A, row, ncol, PETSC_NULL_INTEGER_POINTER, PETSC_NULL_SCALAR_POINTER, ierr)) 43f14a4c02SBarry Smith PetscCallA(MatRestoreRow(A, row, ncol, PETSC_NULL_INTEGER_POINTER, PETSC_NULL_SCALAR_POINTER, ierr)) 44f14a4c02SBarry Smith 45d8606c27SBarry Smith! 46d8606c27SBarry Smith! Test MatGetRowMaxAbs() 47d8606c27SBarry Smith PetscCallA(MatGetSize(A, M, N, ierr)) 48d8606c27SBarry Smith PetscCallA(VecCreate(PETSC_COMM_WORLD, rowmax, ierr)) 49d8606c27SBarry Smith PetscCallA(VecSetSizes(rowmax, M, M, ierr)) 50d8606c27SBarry Smith PetscCallA(VecSetFromOptions(rowmax, ierr)) 51d8606c27SBarry Smith 525d83a8b1SBarry Smith PetscCallA(MatGetRowMaxAbs(A, rowmax, PETSC_NULL_INTEGER_ARRAY, ierr)) 53d8606c27SBarry Smith PetscCallA(VecView(rowmax, PETSC_VIEWER_STDOUT_WORLD, ierr)) 54d8606c27SBarry Smith 555d83a8b1SBarry Smith PetscCallA(MatGetRowMax(A, rowmax, PETSC_NULL_INTEGER_ARRAY, ierr)) 56d8606c27SBarry Smith PetscCallA(VecView(rowmax, PETSC_VIEWER_STDOUT_WORLD, ierr)) 57d8606c27SBarry Smith 585d83a8b1SBarry Smith PetscCallA(MatGetRowMinAbs(A, rowmax, PETSC_NULL_INTEGER_ARRAY, ierr)) 59d8606c27SBarry Smith PetscCallA(VecView(rowmax, PETSC_VIEWER_STDOUT_WORLD, ierr)) 60d8606c27SBarry Smith 615d83a8b1SBarry Smith PetscCallA(MatGetRowMin(A, rowmax, PETSC_NULL_INTEGER_ARRAY, ierr)) 62d8606c27SBarry Smith PetscCallA(VecView(rowmax, PETSC_VIEWER_STDOUT_WORLD, ierr)) 63d8606c27SBarry Smith 645d83a8b1SBarry Smith PetscCallA(MatGetOwnershipIS(A, isrow, iscol, ierr)) 655d83a8b1SBarry Smith PetscCallA(ISDestroy(isrow, ierr)) 665d83a8b1SBarry Smith PetscCallA(ISDestroy(iscol, ierr)) 675d83a8b1SBarry Smith PetscCallA(MatGetOwnershipIS(A, PETSC_NULL_IS, PETSC_NULL_IS, ierr)) 685d83a8b1SBarry Smith 69d8606c27SBarry Smith PetscCallA(MatDestroy(A, ierr)) 70d8606c27SBarry Smith PetscCallA(PetscViewerDestroy(v, ierr)) 71d8606c27SBarry Smith PetscCallA(VecDestroy(rowmax, ierr)) 72d8606c27SBarry Smith 73d8606c27SBarry Smith PetscCallA(PetscFinalize(ierr)) 74d8606c27SBarry Smithend 75d8606c27SBarry Smith 76d8606c27SBarry Smith!/*TEST 77d8606c27SBarry Smith! 78d8606c27SBarry Smith! test: 79d8606c27SBarry Smith! args: -f ${DATAFILESPATH}/matrices/tiny 80d8606c27SBarry Smith! requires: datafilespath double !complex !defined(PETSC_USE_64BIT_INDICES) 81d8606c27SBarry Smith! 82d8606c27SBarry Smith!TEST*/ 83