Actual source code: ex12.c

  2: /* Program usage:  mpirun ex1 [-help] [all PETSc options] */

  4: static char help[] = "Demonstrates VecStrideScatter() and VecStrideGather().\n\n";

  6: /*T
  7:    Concepts: vectors^sub-vectors;
  8:    Processors: n
  9: T*/

 11: /* 
 12:   Include "petscvec.h" so that we can use vectors.  Note that this file
 13:   automatically includes:
 14:      petsc.h       - base PETSc routines   petscis.h     - index sets
 15:      petscsys.h    - system routines       petscviewer.h - viewers
 16: */

 18:  #include petscvec.h

 22: int main(int argc,char **argv)
 23: {
 25:   Vec            v,s;               /* vectors */
 26:   PetscInt       n = 20;
 27:   PetscScalar    one = 1.0;

 29:   PetscInitialize(&argc,&argv,(char*)0,help);
 30:   PetscOptionsGetInt(PETSC_NULL,"-n",&n,PETSC_NULL);

 32:   /* 
 33:       Create multi-component vector with 2 components
 34:   */
 35:   VecCreate(PETSC_COMM_WORLD,&v);
 36:   VecSetSizes(v,PETSC_DECIDE,n);
 37:   VecSetBlockSize(v,2);
 38:   VecSetFromOptions(v);

 40:   /* 
 41:       Create single-component vector
 42:   */
 43:   VecCreate(PETSC_COMM_WORLD,&s);
 44:   VecSetSizes(s,PETSC_DECIDE,n/2);
 45:   VecSetFromOptions(s);

 47:   /*
 48:      Set the vectors to entries to a constant value.
 49:   */
 50:   VecSet(v,one);

 52:   /*
 53:      Get the first component from the multi-component vector to the single vector
 54:   */
 55:   VecStrideGather(v,0,s,INSERT_VALUES);

 57:   VecView(s,PETSC_VIEWER_STDOUT_WORLD);

 59:   /*
 60:      Put the values back into the second component 
 61:   */
 62:   VecStrideScatter(s,1,v,ADD_VALUES);

 64:   VecView(v,PETSC_VIEWER_STDOUT_WORLD);

 66:   /* 
 67:      Free work space.  All PETSc objects should be destroyed when they
 68:      are no longer needed.
 69:   */
 70:   VecDestroy(v);
 71:   VecDestroy(s);
 72:   PetscFinalize();
 73:   return 0;
 74: }
 75: