Actual source code: ex20f.F90

  1: !
  2: program main
  3: #include <petsc/finclude/petscvec.h>
  4:   use petscvec
  5:   implicit none

  7: !
  8: !      This example demonstrates writing an array to a file in binary
  9: !      format that may be read in by PETSc's VecLoad() routine.
 10: !
 11:   PetscInt n, i, ione
 12:   PetscErrorCode ierr
 13:   integer4 fd
 14:   PetscInt vecclassid(1)
 15:   PetscScalar array(5)
 16:   Vec x
 17:   PetscViewer v

 19:   ione = 1
 20:   n = 5
 21:   vecclassid(1) = 1211211 + 3

 23:   PetscCallA(PetscInitialize(ierr))

 25:   do 10, i = 1, 5
 26:     array(i) = i
 27: 10  continue

 29: !      Open binary file for writing
 30:     PetscCallA(PetscBinaryOpen('testfile', FILE_MODE_WRITE, fd, ierr))
 31: !      Write the Vec header
 32:     PetscCallA(PetscBinaryWrite(fd, vecclassid, ione, PETSC_INT, ierr))
 33: !      Write the array length
 34:     PetscCallA(PetscBinaryWrite(fd, n, ione, PETSC_INT, ierr))
 35: !      Write the array
 36:     PetscCallA(PetscBinaryWrite(fd, array, n, PETSC_SCALAR, ierr))
 37: !      Close the file
 38:     PetscCallA(PetscBinaryClose(fd, ierr))

 40: !
 41: !      Open the file for reading by PETSc
 42: !
 43:     PetscCallA(PetscViewerBinaryOpen(PETSC_COMM_SELF, 'testfile', FILE_MODE_READ, v, ierr))
 44: !
 45: !      Load the vector
 46: !
 47:     PetscCallA(VecCreate(PETSC_COMM_WORLD, x, ierr))
 48:     PetscCallA(VecLoad(x, v, ierr))
 49:     PetscCallA(PetscViewerDestroy(v, ierr))
 50: !
 51: !      Print the vector
 52: !
 53:     PetscCallA(VecView(x, PETSC_VIEWER_STDOUT_SELF, ierr))
 54: !

 56:     PetscCallA(VecDestroy(x, ierr))
 57:     PetscCallA(PetscFinalize(ierr))
 58:   end

 60: !/*TEST
 61: !
 62: !     test:
 63: !
 64: !TEST*/