Actual source code: ex9.c

petsc-3.4.5 2014-06-29
  1: static char help[] = "Demonstrates HD5 vector input/ouput\n\n";

  3: /*T
  4:    Concepts: viewers
  5:    Concepts: HDF5
  6:    Processors: n
  7: T*/
  8: #include <petscsys.h>
  9: #include <petscdmda.h>
 10: #include <petscviewerhdf5.h>

 14: int main(int argc,char **argv)
 15: {
 17:   PetscViewer    viewer;
 18:   DM             da;
 19:   Vec            global,local,global2;
 20:   PetscMPIInt    rank;
 21:   PetscBool      flg;

 23:   /*
 24:     Every PETSc routine should begin with the PetscInitialize() routine.
 25:     argc, argv - These command line arguments are taken to extract the options
 26:                  supplied to PETSc and options supplied to MPI.
 27:     help       - When PETSc executable is invoked with the option -help,
 28:                  it prints the various options that can be applied at
 29:                  runtime.  The user can use the "help" variable place
 30:                  additional help messages in this printout.
 31:   */
 32:   PetscInitialize(&argc,&argv,(char*)0,help);

 34:   /* Create a DMDA and an associated vector */
 35:   DMDACreate2d(PETSC_COMM_WORLD, DMDA_BOUNDARY_NONE, DMDA_BOUNDARY_NONE,DMDA_STENCIL_BOX,100,90,PETSC_DECIDE,PETSC_DECIDE,2,1,NULL,NULL,&da);
 36:   DMCreateGlobalVector(da,&global);
 37:   DMCreateLocalVector(da,&local);
 38:   VecSet(global,-1.0);
 39:   DMGlobalToLocalBegin(da,global,INSERT_VALUES,local);
 40:   DMGlobalToLocalEnd(da,global,INSERT_VALUES,local);
 41:   MPI_Comm_rank(PETSC_COMM_WORLD,&rank);
 42:   VecScale(local,rank+1);
 43:   DMLocalToGlobalBegin(da,local,ADD_VALUES,global);
 44:   DMLocalToGlobalEnd(da,local,ADD_VALUES,global);

 46:   /*
 47:      Write output file with PetscViewerHDF5 viewer.

 49:   */
 50:   PetscViewerHDF5Open(PETSC_COMM_WORLD,"hdf5output",FILE_MODE_WRITE,&viewer);
 51:   VecView(global,viewer);
 52:   PetscViewerDestroy(&viewer);
 53:   MPI_Barrier(PETSC_COMM_WORLD);

 55:   VecDuplicate(global,&global2);
 56:   VecCopy(global,global2);
 57:   PetscViewerHDF5Open(PETSC_COMM_WORLD,"hdf5output",FILE_MODE_READ,&viewer);
 58:   VecLoad(global,viewer);
 59:   PetscViewerDestroy(&viewer);
 60:   VecEqual(global,global2,&flg);
 61:   if (flg) {
 62:     PetscPrintf(PETSC_COMM_WORLD,"Vectors are equal\n");
 63:   } else {
 64:     PetscPrintf(PETSC_COMM_WORLD,"Vectors are not equal\n");
 65:   }

 67:   /* clean up and exit */
 68:   DMDestroy(&da);
 69:   VecDestroy(&local);
 70:   VecDestroy(&global);
 71:   VecDestroy(&global2);
 72:   PetscFinalize();
 73:   return 0;
 74: }