1
/*$Id: ex12.c,v 1.18 2001/09/11 16:32:18 bsmith Exp $*/
3
/* Program usage: mpirun ex1 [-help] [all PETSc options] */
5
static char help[] = "Demonstrates VecStrideScatter() and VecStrideGather() with subvectors that are also strided.\n\n";
8
Concepts: vectors^sub-vectors;
13
Include "petscvec.h" so that we can use vectors. Note that this file
14
automatically includes:
15
petsc.h - base PETSc routines petscis.h - index sets
16
petscsys.h - system routines petscviewer.h - viewers
22
#define __FUNCT__ "main"
23
int main(int argc,char **argv)
25
Vec v,s,r,vecs[2]; /* vectors */
26
int i,start,end,n = 20,ierr;
27
PetscScalar one = 1.0,value;
29
ierr = PetscInitialize(&argc,&argv,(char*)0,help);CHKERRQ(ierr);
30
ierr = PetscOptionsGetInt(PETSC_NULL,"-n",&n,PETSC_NULL);CHKERRQ(ierr);
33
Create multi-component vector with 2 components
35
ierr = VecCreate(PETSC_COMM_WORLD,&v);CHKERRQ(ierr);
36
ierr = VecSetSizes(v,PETSC_DECIDE,n);CHKERRQ(ierr);
37
ierr = VecSetBlockSize(v,4);CHKERRQ(ierr);
38
ierr = VecSetFromOptions(v);CHKERRQ(ierr);
41
Create double-component vectors
43
ierr = VecCreate(PETSC_COMM_WORLD,&s);CHKERRQ(ierr);
44
ierr = VecSetSizes(s,PETSC_DECIDE,n/2);CHKERRQ(ierr);
45
ierr = VecSetBlockSize(s,2);CHKERRQ(ierr);
46
ierr = VecSetFromOptions(s);CHKERRQ(ierr);
47
ierr = VecDuplicate(s,&r);CHKERRQ(ierr);
54
ierr = VecGetOwnershipRange(v,&start,&end);CHKERRQ(ierr);
55
for (i=start; i<end; i++) {
57
ierr = VecSetValues(v,1,&i,&value,INSERT_VALUES);CHKERRQ(ierr);
61
Get the components from the multi-component vector to the other vectors
63
ierr = VecStrideGatherAll(v,vecs,INSERT_VALUES);CHKERRQ(ierr);
65
ierr = VecView(s,PETSC_VIEWER_STDOUT_WORLD);CHKERRQ(ierr);
66
ierr = VecView(r,PETSC_VIEWER_STDOUT_WORLD);CHKERRQ(ierr);
68
ierr = VecStrideScatterAll(vecs,v,ADD_VALUES);CHKERRQ(ierr);
70
ierr = VecView(v,PETSC_VIEWER_STDOUT_WORLD);CHKERRQ(ierr);
73
Free work space. All PETSc objects should be destroyed when they
76
ierr = VecDestroy(v);CHKERRQ(ierr);
77
ierr = VecDestroy(s);CHKERRQ(ierr);
78
ierr = VecDestroy(r);CHKERRQ(ierr);
79
ierr = PetscFinalize();CHKERRQ(ierr);