Actual source code: ex58f.F90
1: !
2: !
3: ! This program demonstrates use of MatGetRow() and MatGetRowMaxAbs() from Fortran
4: !
5: #include <petsc/finclude/petscmat.h>
6: program main
7: use petscmat
8: implicit none
10: Mat A
11: PetscErrorCode ierr
12: PetscInt M, N, ncol
13: PetscInt, parameter :: row = 1
14: PetscViewer v
15: Vec rowmax
16: PetscBool flg
17: IS isrow, iscol
18: character(len=256) f
19: PetscInt, pointer :: cols(:)
20: PetscScalar, pointer :: vals(:)
22: PetscCallA(PetscInitialize(ierr))
24: PetscCallA(PetscOptionsGetString(PETSC_NULL_OPTIONS, PETSC_NULL_CHARACTER, '-f', f, flg, ierr))
25: PetscCallA(PetscViewerBinaryOpen(PETSC_COMM_WORLD, f, FILE_MODE_READ, v, ierr))
27: PetscCallA(MatCreate(PETSC_COMM_WORLD, A, ierr))
28: PetscCallA(MatSetType(A, MATSEQAIJ, ierr))
29: PetscCallA(MatLoad(A, v, ierr))
31: PetscCallA(MatView(A, PETSC_VIEWER_STDOUT_WORLD, ierr))
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))
45: ! Test MatGetRowMaxAbs()
46: PetscCallA(MatGetSize(A, M, N, ierr))
47: PetscCallA(VecCreate(PETSC_COMM_WORLD, rowmax, ierr))
48: PetscCallA(VecSetSizes(rowmax, M, M, ierr))
49: PetscCallA(VecSetFromOptions(rowmax, ierr))
51: PetscCallA(MatGetRowMaxAbs(A, rowmax, PETSC_NULL_INTEGER_ARRAY, ierr))
52: PetscCallA(VecView(rowmax, PETSC_VIEWER_STDOUT_WORLD, ierr))
54: PetscCallA(MatGetRowMax(A, rowmax, PETSC_NULL_INTEGER_ARRAY, ierr))
55: PetscCallA(VecView(rowmax, PETSC_VIEWER_STDOUT_WORLD, ierr))
57: PetscCallA(MatGetRowMinAbs(A, rowmax, PETSC_NULL_INTEGER_ARRAY, ierr))
58: PetscCallA(VecView(rowmax, PETSC_VIEWER_STDOUT_WORLD, ierr))
60: PetscCallA(MatGetRowMin(A, rowmax, PETSC_NULL_INTEGER_ARRAY, ierr))
61: PetscCallA(VecView(rowmax, PETSC_VIEWER_STDOUT_WORLD, ierr))
63: PetscCallA(MatGetOwnershipIS(A, isrow, iscol, ierr))
64: PetscCallA(ISDestroy(isrow, ierr))
65: PetscCallA(ISDestroy(iscol, ierr))
66: PetscCallA(MatGetOwnershipIS(A, PETSC_NULL_IS, PETSC_NULL_IS, ierr))
68: PetscCallA(MatDestroy(A, ierr))
69: PetscCallA(PetscViewerDestroy(v, ierr))
70: PetscCallA(VecDestroy(rowmax, ierr))
72: PetscCallA(PetscFinalize(ierr))
73: end
75: !/*TEST
76: !
77: ! test:
78: ! args: -f ${DATAFILESPATH}/matrices/tiny
79: ! requires: datafilespath double !complex !defined(PETSC_USE_64BIT_INDICES)
80: !
81: !TEST*/