xref: /petsc/src/mat/tests/ex58f.F90 (revision bfe80ac4a46d58cb7760074b25f5e81b2f541d8a)
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