1 2 static char help[] = "VecView() with a DMDA1d vector and draw viewer.\n\n"; 3 4 #include <petscdm.h> 5 #include <petscdmda.h> 6 #include <petscao.h> 7 8 PetscErrorCode apply(void *ctx,PetscInt n,const PetscScalar *x,PetscScalar *y) 9 { 10 PetscInt i; 11 12 for (i=0; i<n; i++) {y[3*i] = x[i]; y[3*i+1] = x[i]*x[i]; y[3*i+2] = x[i]*x[i]*x[i];} 13 return 0; 14 } 15 16 int main(int argc,char **argv) 17 { 18 PetscErrorCode ierr; 19 DM da; 20 Vec global; 21 PF pf; 22 23 ierr = PetscInitialize(&argc,&argv,(char*)0,help);if (ierr) return ierr; 24 CHKERRQ(DMDACreate1d(PETSC_COMM_WORLD,DM_BOUNDARY_NONE,10,3,1,NULL,&da)); 25 CHKERRQ(DMSetFromOptions(da)); 26 CHKERRQ(DMSetUp(da)); 27 CHKERRQ(DMCreateGlobalVector(da,&global)); 28 CHKERRQ(PFCreate(PETSC_COMM_WORLD,1,3,&pf)); 29 CHKERRQ(PFSet(pf,apply,NULL,NULL,NULL,NULL)); 30 CHKERRQ(PFApplyVec(pf,NULL,global)); 31 CHKERRQ(PFDestroy(&pf)); 32 CHKERRQ(VecView(global,PETSC_VIEWER_DRAW_WORLD)); 33 CHKERRQ(VecDestroy(&global)); 34 CHKERRQ(DMDestroy(&da)); 35 ierr = PetscFinalize(); 36 return ierr; 37 } 38 39 /*TEST 40 41 test: 42 nsize: 2 43 requires: x 44 45 TEST*/ 46