Actual source code: ex13.c
2: static char help[] = "Tests PetscObjectPublish().\n\n";
4: /*T
5: Concepts: vectors^assembling vectors;
6: Processors: n
7: T*/
9: /*
10: Include "petscvec.h" so that we can use vectors. Note that this file
11: automatically includes:
12: petsc.h - base PETSc routines petscis.h - index sets
13: petscsys.h - system routines petscviewer.h - viewers
14: */
15: #include petscvec.h
19: int main(int argc,char **argv)
20: {
21: int i,n,ierr,rank;
22: PetscScalar one = 1.0,*array;
23: Vec x,xlocal;
25: PetscInitialize(&argc,&argv,(char *)0,help);
26: MPI_Comm_rank(PETSC_COMM_WORLD,&rank);
28: /*
29: Create a parallel vector.
30: - In this case, we specify the size of each processor's local
31: portion, and PETSc computes the global size. Alternatively,
32: if we pass the global size and use PETSC_DECIDE for the
33: local size PETSc will choose a reasonable partition trying
34: to put nearly an equal number of elements on each processor.
35: */
36: VecCreateMPI(PETSC_COMM_WORLD,rank+4,PETSC_DECIDE,&x);
37: PetscObjectPublish((PetscObject)x);
38: VecGetLocalSize(x,&n);
39: VecSet(x,one);
41: VecCreateSeq(PETSC_COMM_SELF,rank+4,&xlocal);
42: PetscObjectPublish((PetscObject)xlocal);
43: VecSet(xlocal,one);
45: while (1) {
47: /*
48: Access the vector entries and add to them
49: */
50: PetscBarrier((PetscObject)x);
51: VecGetArray(x,&array);
52: for (i=0; i<n; i++) {
53: array[i]++;
54: }
55: VecRestoreArray(x,&array);
57: VecGetArray(xlocal,&array);
58: for (i=0; i<n; i++) {
59: array[i]++;
60: }
61: VecRestoreArray(xlocal,&array);
62: }
64: /*
65: Destroy the vectors
66: */
67: VecDestroy(x);
68: VecDestroy(xlocal);
70: PetscFinalize();
71: return 0;
72: }
73: