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.nn";
5: #include petscda.h
6: #include petscsys.h
8: int main(int argc,char **argv)
9: {
10: int M1 = 3,M2,ierr,dof = 1,s = 1,ratio = 2,dim = 1;
11: DA da_c,da_f;
12: Vec v_c,v_f;
13: Mat I;
14: PetscScalar one = 1.0;
15: DAPeriodicType pt = DA_NONPERIODIC;
16:
17: PetscInitialize(&argc,&argv,(char*)0,help);
19: PetscOptionsGetInt(PETSC_NULL,"-dim",&dim,PETSC_NULL);
20: PetscOptionsGetInt(PETSC_NULL,"-M",&M1,PETSC_NULL);
21: PetscOptionsGetInt(PETSC_NULL,"-stencil_width",&s,PETSC_NULL);
22: PetscOptionsGetInt(PETSC_NULL,"-ratio",&ratio,PETSC_NULL);
23: PetscOptionsGetInt(PETSC_NULL,"-dof",&dof,PETSC_NULL);
24: PetscOptionsHasName(PETSC_NULL,"-periodic",(PetscTruth*)&pt);
26: if (pt != DA_NONPERIODIC) {
27: if (dim == 1) pt = DA_XPERIODIC;
28: if (dim == 2) pt = DA_XYPERIODIC;
29: if (dim == 3) pt = DA_XYZPERIODIC;
30: }
31: if (pt == DA_NONPERIODIC) {
32: M2 = ratio*(M1-1) + 1;
33: } else {
34: M2 = ratio*M1;
35: }
37: /* Set up the array */
38: if (dim == 1) {
39: DACreate1d(PETSC_COMM_WORLD,pt,M1,dof,s,PETSC_NULL,&da_c);
40: DACreate1d(PETSC_COMM_WORLD,pt,M2,dof,s,PETSC_NULL,&da_f);
41: } else if (dim == 2) {
42: DACreate2d(PETSC_COMM_WORLD,pt,DA_STENCIL_BOX,M1,M1,PETSC_DECIDE,PETSC_DECIDE,dof,s,PETSC_NULL,PETSC_NULL,&da_c);
43: DACreate2d(PETSC_COMM_WORLD,pt,DA_STENCIL_BOX,M2,M2,PETSC_DECIDE,PETSC_DECIDE,dof,s,PETSC_NULL,PETSC_NULL,&da_f);
44: } else if (dim == 3) {
45: 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);
46: 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);
47: }
49: DACreateGlobalVector(da_c,&v_c);
50: DACreateGlobalVector(da_f,&v_f);
52: VecSet(&one,v_c);
53: DAGetInterpolation(da_c,da_f,&I,PETSC_NULL);
54: MatMult(I,v_c,v_f);
55: VecView(v_f,PETSC_VIEWER_STDOUT_WORLD);
56: MatMultTranspose(I,v_f,v_c);
57: VecView(v_c,PETSC_VIEWER_STDOUT_WORLD);
59: MatDestroy(I);
60: VecDestroy(v_c);
61: DADestroy(da_c);
62: VecDestroy(v_f);
63: DADestroy(da_f);
64: PetscFinalize();
65: return 0;
66: }
67: