1! 2! 3! This program demonstrates use of MatGetRow() and MatGetRowMaxAbs() from Fortran 4! 5#include <petsc/finclude/petscmat.h> 6program main 7 use petscmat 8 implicit none 9 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(:) 20 21 PetscCallA(PetscInitialize(ierr)) 22 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)) 25 26 PetscCallA(MatCreate(PETSC_COMM_WORLD, A, ierr)) 27 PetscCallA(MatSetType(A, MATSEQAIJ, ierr)) 28 PetscCallA(MatLoad(A, v, ierr)) 29 30 PetscCallA(MatView(A, PETSC_VIEWER_STDOUT_WORLD, ierr)) 31 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)) 44 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)) 51 52 PetscCallA(MatGetRowMaxAbs(A, rowmax, PETSC_NULL_INTEGER_ARRAY, ierr)) 53 PetscCallA(VecView(rowmax, PETSC_VIEWER_STDOUT_WORLD, ierr)) 54 55 PetscCallA(MatGetRowMax(A, rowmax, PETSC_NULL_INTEGER_ARRAY, ierr)) 56 PetscCallA(VecView(rowmax, PETSC_VIEWER_STDOUT_WORLD, ierr)) 57 58 PetscCallA(MatGetRowMinAbs(A, rowmax, PETSC_NULL_INTEGER_ARRAY, ierr)) 59 PetscCallA(VecView(rowmax, PETSC_VIEWER_STDOUT_WORLD, ierr)) 60 61 PetscCallA(MatGetRowMin(A, rowmax, PETSC_NULL_INTEGER_ARRAY, ierr)) 62 PetscCallA(VecView(rowmax, PETSC_VIEWER_STDOUT_WORLD, ierr)) 63 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)) 68 69 PetscCallA(MatDestroy(A, ierr)) 70 PetscCallA(PetscViewerDestroy(v, ierr)) 71 PetscCallA(VecDestroy(rowmax, ierr)) 72 73 PetscCallA(PetscFinalize(ierr)) 74end 75 76!/*TEST 77! 78! test: 79! args: -f ${DATAFILESPATH}/matrices/tiny 80! requires: datafilespath double !complex !defined(PETSC_USE_64BIT_INDICES) 81! 82!TEST*/ 83