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