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