1d8606c27SBarry Smith! 2d8606c27SBarry Smith! 3d8606c27SBarry Smith! This program demonstrates use of MatGetRow() and MatGetRowMaxAbs() from Fortran 4d8606c27SBarry Smith! 5d8606c27SBarry Smith program main 6d8606c27SBarry Smith#include <petsc/finclude/petscmat.h> 7d8606c27SBarry Smith use petscmat 8d8606c27SBarry Smith implicit none 9d8606c27SBarry Smith 10d8606c27SBarry Smith Mat A 11d8606c27SBarry Smith PetscErrorCode ierr 12*f14a4c02SBarry 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 18*f14a4c02SBarry Smith PetscInt, pointer :: cols(:) 19*f14a4c02SBarry 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 32*f14a4c02SBarry Smith row = 1 33*f14a4c02SBarry Smith PetscCallA(MatGetRow(A,row,ncol,cols,vals,ierr)) 34*f14a4c02SBarry Smith !print*,cols,vals 35*f14a4c02SBarry Smith PetscCallA(MatRestoreRow(A,row,ncol,cols,vals,ierr)) 36*f14a4c02SBarry Smith PetscCallA(MatGetRow(A,row,PETSC_NULL_INTEGER,cols,PETSC_NULL_SCALAR_POINTER,ierr)) 37*f14a4c02SBarry Smith !print*,cols 38*f14a4c02SBarry Smith PetscCallA(MatRestoreRow(A,row,PETSC_NULL_INTEGER,cols,PETSC_NULL_SCALAR_POINTER,ierr)) 39*f14a4c02SBarry Smith PetscCallA(MatGetRow(A,row,PETSC_NULL_INTEGER,PETSC_NULL_INTEGER_POINTER,vals,ierr)) 40*f14a4c02SBarry Smith !print*,vals 41*f14a4c02SBarry Smith PetscCallA(MatRestoreRow(A,row,PETSC_NULL_INTEGER,PETSC_NULL_INTEGER_POINTER,vals,ierr)) 42*f14a4c02SBarry Smith PetscCallA(MatGetRow(A,row,ncol,PETSC_NULL_INTEGER_POINTER,PETSC_NULL_SCALAR_POINTER,ierr)) 43*f14a4c02SBarry Smith PetscCallA(MatRestoreRow(A,row,ncol,PETSC_NULL_INTEGER_POINTER,PETSC_NULL_SCALAR_POINTER,ierr)) 44*f14a4c02SBarry 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 Smith end 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