int main(int argc,char **argv) { Vec u,xy; DA da; PetscErrorCode ierr; PetscInt m = 10, n = 10, dof = 2; PF pf; ierr = PetscInitialize(&argc,&argv,(char*)0,help);CHKERRQ(ierr); ierr = DACreate2d(PETSC_COMM_WORLD,DA_NONPERIODIC,DA_STENCIL_BOX,m,n,PETSC_DECIDE,PETSC_DECIDE,dof,1,0,0,&da);CHKERRQ(ierr); ierr = DASetUniformCoordinates(da,0.0,1.0,0.0,1.0,0.0,1.0);CHKERRQ(ierr); ierr = DACreateGlobalVector(da,&u);CHKERRQ(ierr); ierr = DAGetCoordinates(da,&xy);CHKERRQ(ierr); ierr = DACreatePF(da,&pf);CHKERRQ(ierr); ierr = PFSet(pf,myfunction,0,0,0,0);CHKERRQ(ierr); ierr = PFSetFromOptions(pf);CHKERRQ(ierr); ierr = PFApplyVec(pf,xy,u);CHKERRQ(ierr); ierr = VecView(u,PETSC_VIEWER_DRAW_WORLD);CHKERRQ(ierr); /* Free work space. All PETSc objects should be destroyed when they are no longer needed. */ ierr = VecDestroy(xy);CHKERRQ(ierr); ierr = PFDestroy(pf);CHKERRQ(ierr); ierr = DADestroy(da);CHKERRQ(ierr); ierr = PetscFinalize();CHKERRQ(ierr); return 0; }
static PetscErrorCode TestQ2Q1DA( void ) { DA Q2_da,Q1_da,cda; PetscInt mx,my,mz; Vec coords,gcoords,gcoords2; PetscErrorCode ierr; mx=7; my=11; mz=13; ierr=DACreate3d(PETSC_COMM_WORLD,DA_NONPERIODIC,DA_STENCIL_BOX,mx,my,mz,PETSC_DECIDE,PETSC_DECIDE,PETSC_DECIDE,3,2,0,0,0,&Q2_da);CHKERRQ(ierr); ierr = DASetUniformCoordinates(Q2_da,-1.0,1.0,-2.0,2.0,-3.0,3.0);CHKERRQ(ierr); ierr = DAGetCoordinates(Q2_da,&coords);CHKERRQ(ierr); ierr = DACreate3d(PETSC_COMM_WORLD,DA_NONPERIODIC,DA_STENCIL_BOX,mx,my,mz,PETSC_DECIDE,PETSC_DECIDE,PETSC_DECIDE,3,1,0,0,0,&Q1_da);CHKERRQ(ierr); ierr = DASetCoordinates(Q1_da,coords);CHKERRQ(ierr); ierr = VecDestroy(coords);CHKERRQ(ierr); /* Get ghost coordinates one way */ ierr = DAGetGhostedCoordinates(Q1_da,&gcoords);CHKERRQ(ierr); /* And another */ ierr = DAGetCoordinates(Q1_da,&coords);CHKERRQ(ierr); ierr = DAGetCoordinateDA(Q1_da,&cda);CHKERRQ(ierr); ierr = DAGetLocalVector(cda,&gcoords2);CHKERRQ(ierr); ierr = DAGlobalToLocalBegin(cda,coords,INSERT_VALUES,gcoords2);CHKERRQ(ierr); ierr = DAGlobalToLocalEnd(cda,coords,INSERT_VALUES,gcoords2);CHKERRQ(ierr); ierr = CompareGhostedCoords(gcoords,gcoords2);CHKERRQ(ierr); ierr = DARestoreLocalVector(cda,&gcoords2);CHKERRQ(ierr); ierr = DADestroy(cda);CHKERRQ(ierr); ierr = VecScale(coords,10.0);CHKERRQ(ierr); ierr = VecScale(gcoords,10.0);CHKERRQ(ierr); ierr = DAGetGhostedCoordinates(Q1_da,&gcoords2);CHKERRQ(ierr); ierr = CompareGhostedCoords(gcoords,gcoords2);CHKERRQ(ierr); ierr = VecDestroy(coords);CHKERRQ(ierr); ierr = VecDestroy(gcoords2);CHKERRQ(ierr); ierr = VecDestroy(gcoords);CHKERRQ(ierr); ierr = DADestroy(Q2_da);CHKERRQ(ierr); ierr = DADestroy(Q1_da);CHKERRQ(ierr); PetscFunctionReturn(0); }
PetscErrorCode DefiantGetDACoords(BlackOilReservoirSimulation* MySim) { PetscErrorCode ierr; Vec Coords, vecs[3]; PetscFunctionBegin; vecs[0] = MySim->x1; vecs[1] = MySim->x2; vecs[2] = MySim->x3; ierr = DAGetCoordinates(MySim->SimDA, &Coords);CHKERRQ(ierr); if (!Coords) { ierr = DASetUniformCoordinates(MySim->SimDA, 0.0, 1.0, 0.0, 1.0, 0.0, 1.0); CHKERRQ(ierr); ierr = DAGetCoordinates(MySim->SimDA, &Coords); CHKERRQ(ierr); } ierr = VecStrideGatherAll(Coords, vecs, INSERT_VALUES);CHKERRQ(ierr); PetscFunctionReturn(0); }
PetscErrorCode DefiantSetDACoords(BlackOilReservoirSimulation* MySim) { PetscErrorCode ierr; Vec Coords, vecs[3]; PetscFunctionBegin; /* Set the blocksize to one for the coordinate vectors */ ierr = VecSetBlockSize(MySim->x1, 1);CHKERRQ(ierr); ierr = VecSetBlockSize(MySim->x2, 1);CHKERRQ(ierr); ierr = VecSetBlockSize(MySim->x3, 1);CHKERRQ(ierr); /* Set vecs from options */ ierr = VecSetFromOptions(MySim->x1);CHKERRQ(ierr); ierr = VecSetFromOptions(MySim->x2);CHKERRQ(ierr); ierr = VecSetFromOptions(MySim->x3);CHKERRQ(ierr); vecs[0] = MySim->x1; vecs[1] = MySim->x2; vecs[2] = MySim->x3; ierr = DAGetCoordinates(MySim->SimDA, &Coords);CHKERRQ(ierr); ierr = VecStrideGatherAll(Coords, vecs, INSERT_VALUES);CHKERRQ(ierr); PetscFunctionReturn(0); }
int main(int argc,char **argv) { PetscInt M = 13,dof=1,s=1,wrap=0,i,n,j; PetscErrorCode ierr; DA da; PetscViewer viewer; Vec local,locala,global,coors; PetscScalar *x,*alocal; PetscDraw draw; char fname[16]; ierr = PetscInitialize(&argc,&argv,(char*)0,help);CHKERRQ(ierr); /* Create viewers */ ierr = PetscViewerDrawOpen(PETSC_COMM_WORLD,0,"",PETSC_DECIDE,PETSC_DECIDE,600,200,&viewer);CHKERRQ(ierr); ierr = PetscViewerDrawGetDraw(viewer,0,&draw);CHKERRQ(ierr); ierr = PetscDrawSetDoubleBuffer(draw);CHKERRQ(ierr); /* Read options */ ierr = PetscOptionsGetInt(PETSC_NULL,"-M",&M,PETSC_NULL);CHKERRQ(ierr); ierr = PetscOptionsGetInt(PETSC_NULL,"-dof",&dof,PETSC_NULL);CHKERRQ(ierr); ierr = PetscOptionsGetInt(PETSC_NULL,"-s",&s,PETSC_NULL);CHKERRQ(ierr); ierr = PetscOptionsGetInt(PETSC_NULL,"-periodic",&wrap,PETSC_NULL);CHKERRQ(ierr); /* Create distributed array and get vectors */ ierr = DACreate1d(PETSC_COMM_WORLD,(DAPeriodicType)wrap,M,dof,s,PETSC_NULL,&da);CHKERRQ(ierr); ierr = DASetUniformCoordinates(da,0.0,1.0,0.0,0.0,0.0,0.0);CHKERRQ(ierr); for (i=0; i<dof; i++) { sprintf(fname,"Field %d",(int)i); ierr = DASetFieldName(da,i,fname); } ierr = DAView(da,viewer);CHKERRQ(ierr); ierr = DACreateGlobalVector(da,&global);CHKERRQ(ierr); ierr = DACreateLocalVector(da,&local);CHKERRQ(ierr); ierr = DACreateLocalVector(da,&locala);CHKERRQ(ierr); ierr = DAGetCoordinates(da,&coors);CHKERRQ(ierr); ierr = VecGetArray(coors,&x);CHKERRQ(ierr); /* Set values into global vectors */ ierr = VecGetArray(global,&alocal);CHKERRQ(ierr); ierr = VecGetLocalSize(global,&n);CHKERRQ(ierr); n = n/dof; for (j=0; j<dof; j++) { for (i=0; i<n; i++) { alocal[j+dof*i] = PetscSinScalar(2*PETSC_PI*(j+1)*x[i]); } } ierr = VecRestoreArray(global,&alocal);CHKERRQ(ierr); ierr = VecRestoreArray(coors,&x);CHKERRQ(ierr); ierr = VecDestroy(coords);CHKERRQ(ierr); ierr = VecView(global,viewer);CHKERRQ(ierr); /* Send ghost points to local vectors */ ierr = DAGlobalToLocalBegin(da,global,INSERT_VALUES,locala);CHKERRQ(ierr); ierr = DAGlobalToLocalEnd(da,global,INSERT_VALUES,locala);CHKERRQ(ierr); /* Free memory */ ierr = PetscViewerDestroy(viewer);CHKERRQ(ierr); ierr = VecDestroy(global);CHKERRQ(ierr); ierr = VecDestroy(local);CHKERRQ(ierr); ierr = VecDestroy(locala);CHKERRQ(ierr); ierr = DADestroy(da);CHKERRQ(ierr); ierr = PetscFinalize();CHKERRQ(ierr); return 0; }