Actual source code: ex58f.F90
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
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(:)
21: PetscCallA(PetscInitialize(ierr))
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))
26: PetscCallA(MatCreate(PETSC_COMM_WORLD,A,ierr))
27: PetscCallA(MatSetType(A, MATSEQAIJ,ierr))
28: PetscCallA(MatLoad(A,v,ierr))
30: PetscCallA(MatView(A,PETSC_VIEWER_STDOUT_WORLD,ierr))
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))
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))
52: PetscCallA(MatGetRowMaxAbs(A,rowmax,PETSC_NULL_INTEGER_ARRAY,ierr))
53: PetscCallA(VecView(rowmax,PETSC_VIEWER_STDOUT_WORLD,ierr))
55: PetscCallA(MatGetRowMax(A,rowmax,PETSC_NULL_INTEGER_ARRAY,ierr))
56: PetscCallA(VecView(rowmax,PETSC_VIEWER_STDOUT_WORLD,ierr))
58: PetscCallA(MatGetRowMinAbs(A,rowmax,PETSC_NULL_INTEGER_ARRAY,ierr))
59: PetscCallA(VecView(rowmax,PETSC_VIEWER_STDOUT_WORLD,ierr))
61: PetscCallA(MatGetRowMin(A,rowmax,PETSC_NULL_INTEGER_ARRAY,ierr))
62: PetscCallA(VecView(rowmax,PETSC_VIEWER_STDOUT_WORLD,ierr))
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))
69: PetscCallA(MatDestroy(A,ierr))
70: PetscCallA(PetscViewerDestroy(v,ierr))
71: PetscCallA(VecDestroy(rowmax,ierr))
73: PetscCallA(PetscFinalize(ierr))
74: end
76: !/*TEST
77: !
78: ! test:
79: ! args: -f ${DATAFILESPATH}/matrices/tiny
80: ! requires: datafilespath double !complex !defined(PETSC_USE_64BIT_INDICES)
81: !
82: !TEST*/