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 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)) 74 end 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