Actual source code: ex58f.F
petsc-3.13.4 2020-08-01
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
13: PetscViewer v
14: Vec rowmax
15: PetscBool flg
16: character*(256) f
18: call PetscInitialize(PETSC_NULL_CHARACTER,ierr)
19: if (ierr .ne. 0) then
20: print*,'Unable to initialize PETSc'
21: stop
22: endif
24: call PetscOptionsGetString(PETSC_NULL_OPTIONS, &
25: & PETSC_NULL_CHARACTER,'-f',f,flg,ierr)
26: call PetscViewerBinaryOpen(PETSC_COMM_WORLD,f,FILE_MODE_READ,v, &
27: & ierr)
29: call MatCreate(PETSC_COMM_WORLD,A,ierr)
30: call MatSetType(A, MATSEQAIJ,ierr)
31: call MatLoad(A,v,ierr)
33: call MatView(A,PETSC_VIEWER_STDOUT_WORLD,ierr)
35: !
36: ! Test MatGetRowMaxAbs()
37: call MatGetSize(A,M,N,ierr)
38: call VecCreate(PETSC_COMM_WORLD,rowmax,ierr)
39: call VecSetSizes(rowmax,M,M,ierr)
40: call VecSetFromOptions(rowmax,ierr)
42: call MatGetRowMaxAbs(A,rowmax,PETSC_NULL_INTEGER,ierr)
43: call VecView(rowmax,PETSC_VIEWER_STDOUT_WORLD,ierr)
45: call MatGetRowMax(A,rowmax,PETSC_NULL_INTEGER,ierr)
46: call VecView(rowmax,PETSC_VIEWER_STDOUT_WORLD,ierr)
48: call MatGetRowMinAbs(A,rowmax,PETSC_NULL_INTEGER,ierr)
49: call VecView(rowmax,PETSC_VIEWER_STDOUT_WORLD,ierr)
51: call MatGetRowMin(A,rowmax,PETSC_NULL_INTEGER,ierr)
52: call VecView(rowmax,PETSC_VIEWER_STDOUT_WORLD,ierr)
54: call MatDestroy(A,ierr)
55: call PetscViewerDestroy(v,ierr)
56: call VecDestroy(rowmax,ierr)
58: call PetscFinalize(ierr)
59: end
61: !/*TEST
62: !
63: ! test:
64: ! args: -f ${DATAFILESPATH}/matrices/tiny
65: ! requires: datafilespath double !complex !define(PETSC_USE_64BIT_INDICES)
66: !
67: !TEST*/