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