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