Actual source code: ex196f90.F90
1: !
2: !
3: ! This program demonstrates use of MatSeqAIJGetArray() and the
4: ! MatSeqAIJGetArrayRead()/MatSeqAIJGetArrayWrite() variants
5: !
6: #include <petsc/finclude/petscmat.h>
7: program main
9: use petscmat
10: implicit none
12: Mat A
13: PetscErrorCode ierr
14: PetscViewer v
15: PetscScalar, pointer :: aa(:)
16: character(len=PETSC_MAX_PATH_LEN) f
17: PetscBool flg
19: PetscCallA(PetscInitialize(ierr))
21: PetscCallA(PetscOptionsGetString(PETSC_NULL_OPTIONS, PETSC_NULL_CHARACTER, '-f', f, flg, ierr))
22: PetscCallA(PetscViewerBinaryOpen(PETSC_COMM_WORLD, f, FILE_MODE_READ, v, ierr))
24: PetscCallA(MatCreate(PETSC_COMM_WORLD, A, ierr))
25: PetscCallA(MatSetType(A, MATSEQAIJ, ierr))
26: PetscCallA(MatLoad(A, v, ierr))
28: PetscCallA(MatView(A, PETSC_VIEWER_STDOUT_WORLD, ierr))
30: PetscCallA(MatSeqAIJGetArray(A, aa, ierr))
31: print *, aa(3)
32: PetscCallA(MatSeqAIJRestoreArray(A, aa, ierr))
34: PetscCallA(MatSeqAIJGetArrayRead(A, aa, ierr))
35: print *, aa(3)
36: PetscCallA(MatSeqAIJRestoreArrayRead(A, aa, ierr))
38: PetscCallA(MatSeqAIJGetArrayWrite(A, aa, ierr))
39: aa(3) = 2.0
40: PetscCallA(MatSeqAIJRestoreArrayWrite(A, aa, ierr))
42: PetscCallA(MatSeqAIJGetArrayRead(A, aa, ierr))
43: print *, aa(3)
44: PetscCallA(MatSeqAIJRestoreArrayRead(A, aa, ierr))
46: PetscCallA(MatDestroy(A, ierr))
47: PetscCallA(PetscViewerDestroy(v, ierr))
49: PetscCallA(PetscFinalize(ierr))
50: end
52: !/*TEST
53: !
54: ! test:
55: ! args: -f ${wPETSC_DIR}/share/petsc/datafiles/matrices/ns-real-int32-float64 -malloc_dump
56: ! requires: !complex double !defined(PETSC_USE_64BIT_INDICES)
57: !
58: !TEST*/