Actual source code: ex15.c
1: /*$Id: ex15.c,v 1.10 2001/08/07 03:04:42 balay Exp $*/
3: static char help[] = "Tests DA interpolation.\n\n";
5: #include petscda.h
6: #include petscsys.h
10: int main(int argc,char **argv)
11: {
12: int M1 = 3,M2,ierr,dof = 1,s = 1,ratio = 2,dim = 1;
13: DA da_c,da_f;
14: Vec v_c,v_f;
15: Mat I;
16: PetscScalar one = 1.0;
17: DAPeriodicType pt = DA_NONPERIODIC;
18:
19: PetscInitialize(&argc,&argv,(char*)0,help);
21: PetscOptionsGetInt(PETSC_NULL,"-dim",&dim,PETSC_NULL);
22: PetscOptionsGetInt(PETSC_NULL,"-M",&M1,PETSC_NULL);
23: PetscOptionsGetInt(PETSC_NULL,"-stencil_width",&s,PETSC_NULL);
24: PetscOptionsGetInt(PETSC_NULL,"-ratio",&ratio,PETSC_NULL);
25: PetscOptionsGetInt(PETSC_NULL,"-dof",&dof,PETSC_NULL);
26: PetscOptionsHasName(PETSC_NULL,"-periodic",(PetscTruth*)&pt);
28: if (pt != DA_NONPERIODIC) {
29: if (dim == 1) pt = DA_XPERIODIC;
30: if (dim == 2) pt = DA_XYPERIODIC;
31: if (dim == 3) pt = DA_XYZPERIODIC;
32: }
33: if (pt == DA_NONPERIODIC) {
34: M2 = ratio*(M1-1) + 1;
35: } else {
36: M2 = ratio*M1;
37: }
39: /* Set up the array */
40: if (dim == 1) {
41: DACreate1d(PETSC_COMM_WORLD,pt,M1,dof,s,PETSC_NULL,&da_c);
42: DACreate1d(PETSC_COMM_WORLD,pt,M2,dof,s,PETSC_NULL,&da_f);
43: } else if (dim == 2) {
44: DACreate2d(PETSC_COMM_WORLD,pt,DA_STENCIL_BOX,M1,M1,PETSC_DECIDE,PETSC_DECIDE,dof,s,PETSC_NULL,PETSC_NULL,&da_c);
45: DACreate2d(PETSC_COMM_WORLD,pt,DA_STENCIL_BOX,M2,M2,PETSC_DECIDE,PETSC_DECIDE,dof,s,PETSC_NULL,PETSC_NULL,&da_f);
46: } else if (dim == 3) {
47: 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);
48: 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);
49: }
51: DACreateGlobalVector(da_c,&v_c);
52: DACreateGlobalVector(da_f,&v_f);
54: VecSet(&one,v_c);
55: DAGetInterpolation(da_c,da_f,&I,PETSC_NULL);
56: MatMult(I,v_c,v_f);
57: VecView(v_f,PETSC_VIEWER_STDOUT_WORLD);
58: MatMultTranspose(I,v_f,v_c);
59: VecView(v_c,PETSC_VIEWER_STDOUT_WORLD);
61: MatDestroy(I);
62: VecDestroy(v_c);
63: DADestroy(da_c);
64: VecDestroy(v_f);
65: DADestroy(da_f);
66: PetscFinalize();
67: return 0;
68: }
69: