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*/