Actual source code: ex15.c
2: static char help[] = "Tests DA interpolation.\n\n";
4: #include petscda.h
8: int main(int argc,char **argv)
9: {
10: PetscInt M1 = 3,M2,dof = 1,s = 1,ratio = 2,dim = 1;
12: DA da_c,da_f;
13: Vec v_c,v_f;
14: Mat I;
15: PetscScalar one = 1.0;
16: DAPeriodicType pt = DA_NONPERIODIC;
17:
18: PetscInitialize(&argc,&argv,(char*)0,help);
20: PetscOptionsGetInt(PETSC_NULL,"-dim",&dim,PETSC_NULL);
21: PetscOptionsGetInt(PETSC_NULL,"-M",&M1,PETSC_NULL);
22: PetscOptionsGetInt(PETSC_NULL,"-stencil_width",&s,PETSC_NULL);
23: PetscOptionsGetInt(PETSC_NULL,"-ratio",&ratio,PETSC_NULL);
24: PetscOptionsGetInt(PETSC_NULL,"-dof",&dof,PETSC_NULL);
25: PetscOptionsGetTruth(PETSC_NULL,"-periodic",(PetscTruth*)&pt,PETSC_NULL);
27: if (pt != DA_NONPERIODIC) {
28: if (dim == 1) pt = DA_XPERIODIC;
29: if (dim == 2) pt = DA_XYPERIODIC;
30: if (dim == 3) pt = DA_XYZPERIODIC;
31: }
32: if (pt == DA_NONPERIODIC) {
33: M2 = ratio*(M1-1) + 1;
34: } else {
35: M2 = ratio*M1;
36: }
38: /* Set up the array */
39: if (dim == 1) {
40: DACreate1d(PETSC_COMM_WORLD,pt,M1,dof,s,PETSC_NULL,&da_c);
41: DACreate1d(PETSC_COMM_WORLD,pt,M2,dof,s,PETSC_NULL,&da_f);
42: } else if (dim == 2) {
43: DACreate2d(PETSC_COMM_WORLD,pt,DA_STENCIL_BOX,M1,M1,PETSC_DECIDE,PETSC_DECIDE,dof,s,PETSC_NULL,PETSC_NULL,&da_c);
44: DACreate2d(PETSC_COMM_WORLD,pt,DA_STENCIL_BOX,M2,M2,PETSC_DECIDE,PETSC_DECIDE,dof,s,PETSC_NULL,PETSC_NULL,&da_f);
45: } else if (dim == 3) {
46: DACreate3d(PETSC_COMM_WORLD,pt,DA_STENCIL_BOX,M1,M1,M1,PETSC_DECIDE,PETSC_DECIDE,PETSC_DECIDE,dof,s,PETSC_NULL,PETSC_NULL,PETSC_NULL,&da_c);
47: DACreate3d(PETSC_COMM_WORLD,pt,DA_STENCIL_BOX,M2,M2,M2,PETSC_DECIDE,PETSC_DECIDE,PETSC_DECIDE,dof,s,PETSC_NULL,PETSC_NULL,PETSC_NULL,&da_f);
48: }
50: DACreateGlobalVector(da_c,&v_c);
51: DACreateGlobalVector(da_f,&v_f);
53: VecSet(v_c,one);
54: DAGetInterpolation(da_c,da_f,&I,PETSC_NULL);
55: MatMult(I,v_c,v_f);
56: VecView(v_f,PETSC_VIEWER_STDOUT_WORLD);
57: MatMultTranspose(I,v_f,v_c);
58: VecView(v_c,PETSC_VIEWER_STDOUT_WORLD);
60: MatDestroy(I);
61: VecDestroy(v_c);
62: DADestroy(da_c);
63: VecDestroy(v_f);
64: DADestroy(da_f);
65: PetscFinalize();
66: return 0;
67: }
68: