Actual source code: ex1.c
petsc-3.3-p6 2013-02-11
2: static char help[] = "Demonstrates constructing an application ordering.\n\n";
4: #include <petscsys.h>
5: #include <petscao.h>
9: int main(int argc,char **argv)
10: {
12: PetscInt i,n = 5;
13: PetscInt getpetsc[] = {0,3,4},getapp[] = {2,1,9,7};
14: PetscInt getpetsc1[] = {0,3,4},getapp1[] = {2,1,9,7};
15: PetscInt getpetsc2[] = {0,3,4},getapp2[] = {2,1,9,7};
16: PetscInt getpetsc3[] = {0,3,4},getapp3[] = {2,1,9,7};
17: PetscInt getpetsc4[] = {0,3,4},getapp4[] = {2,1,9,7};
18: PetscMPIInt rank,size;
19: IS ispetsc,isapp;
20: AO ao;
21: const PetscInt *app;
23: PetscInitialize(&argc,&argv,(char*)0,help);
24: PetscOptionsGetInt(PETSC_NULL,"-n",&n,PETSC_NULL);
25: MPI_Comm_rank(PETSC_COMM_WORLD,&rank);
26: MPI_Comm_size(PETSC_COMM_WORLD,&size);
28: /* create the index sets */
29: ISCreateStride(PETSC_COMM_WORLD,n,rank,size,&isapp);
30: ISCreateStride(PETSC_COMM_WORLD,n,n*rank,1,&ispetsc); /* natural numbering */
32: /* create the application ordering */
33: AOCreateBasicIS(isapp,ispetsc,&ao);
34: AOView(ao,PETSC_VIEWER_STDOUT_WORLD);
36: AOPetscToApplication(ao,4,getapp);
37: AOApplicationToPetsc(ao,3,getpetsc);
38:
39: PetscSynchronizedPrintf(PETSC_COMM_WORLD,"[%d] 2,1,9,7 PetscToApplication %D %D %D %D\n",
40: rank,getapp[0],getapp[1],getapp[2],getapp[3]);
41: PetscSynchronizedPrintf(PETSC_COMM_WORLD,"[%d] 0,3,4 ApplicationToPetsc %D %D %D\n",
42: rank,getpetsc[0],getpetsc[1],getpetsc[2]);
43: PetscSynchronizedFlush(PETSC_COMM_WORLD);
44: AODestroy(&ao);
46: /* test MemoryScalable ao */
47: /*-------------------------*/
48: if (!rank){
49: PetscPrintf(PETSC_COMM_SELF,"\nTest AOCreateMemoryScalable: \n");
50: }
51: AOCreateMemoryScalableIS(isapp,ispetsc,&ao);
52: AOView(ao,PETSC_VIEWER_STDOUT_WORLD);
53:
54: AOPetscToApplication(ao,4,getapp1);
55: AOApplicationToPetsc(ao,3,getpetsc1);
56:
57: /* Check accuracy */;
58: for (i=0; i<4;i++)
59: if (getapp1[i] != getapp[i]) SETERRQ2(PETSC_COMM_SELF,PETSC_ERR_USER,"getapp1 %d != getapp %d",getapp1[i],getapp[i]);
60: for (i=0; i<3;i++)
61: if (getpetsc1[i] != getpetsc[i]) SETERRQ2(PETSC_COMM_SELF,PETSC_ERR_USER,"getpetsc1 %d != getpetsc %d",getpetsc1[i],getpetsc[i]);
62:
63: AODestroy(&ao);
65: /* test MemoryScalable ao: ispetsc = PETSC_NULL */
66: /*-----------------------------------------------*/
67: if (!rank){
68: PetscPrintf(PETSC_COMM_SELF,"\nTest AOCreateMemoryScalable with ispetsc=PETSC_NULL:\n");
69: }
70: AOCreateMemoryScalableIS(isapp,PETSC_NULL,&ao);
71:
72: AOView(ao,PETSC_VIEWER_STDOUT_WORLD);
73:
74: AOPetscToApplication(ao,4,getapp2);
75: AOApplicationToPetsc(ao,3,getpetsc2);
76:
77: /* Check accuracy */;
78: for (i=0; i<4;i++)
79: if (getapp2[i] != getapp[i]) SETERRQ2(PETSC_COMM_SELF,PETSC_ERR_USER,"getapp2 %d != getapp %d",getapp2[i],getapp[i]);
80: for (i=0; i<3;i++)
81: if (getpetsc2[i] != getpetsc[i]) SETERRQ2(PETSC_COMM_SELF,PETSC_ERR_USER,"getpetsc2 %d != getpetsc %d",getpetsc2[i],getpetsc[i]);
82: AODestroy(&ao);
84: /* test AOCreateMemoryScalable() ao: */
85: ISGetIndices(isapp,&app);
86: AOCreateMemoryScalable(PETSC_COMM_WORLD,n,app,PETSC_NULL,&ao);
87: ISRestoreIndices(isapp,&app);
88:
89: AOPetscToApplication(ao,4,getapp4);
90: AOApplicationToPetsc(ao,3,getpetsc4);
91:
92: /* Check accuracy */;
93: for (i=0; i<4;i++)
94: if (getapp4[i] != getapp[i]) SETERRQ2(PETSC_COMM_SELF,PETSC_ERR_USER,"getapp4 %d != getapp %d",getapp4[i],getapp[i]);
95: for (i=0; i<3;i++)
96: if (getpetsc4[i] != getpetsc[i]) SETERRQ2(PETSC_COMM_SELF,PETSC_ERR_USER,"getpetsc4 %d != getpetsc %d",getpetsc4[i],getpetsc[i]);
97: AODestroy(&ao);
99: /* test general API */
100: /*------------------*/
101: if (!rank){
102: PetscPrintf(PETSC_COMM_SELF,"\nTest general API: \n");
103: }
104: AOCreate(PETSC_COMM_WORLD,&ao);
105: AOSetIS(ao,isapp,ispetsc);
106: AOSetType(ao,AOMEMORYSCALABLE);
107: AOSetFromOptions(ao);
109: /* ispetsc and isapp are nolonger used. */
110: ISDestroy(&ispetsc);
111: ISDestroy(&isapp);
112:
113: AOPetscToApplication(ao,4,getapp3);
114: AOApplicationToPetsc(ao,3,getpetsc3);
116: PetscSynchronizedPrintf(PETSC_COMM_WORLD,"[%d] 2,1,9,7 PetscToApplication %D %D %D %D\n",
117: rank,getapp3[0],getapp3[1],getapp3[2],getapp3[3]);
118: PetscSynchronizedPrintf(PETSC_COMM_WORLD,"[%d] 0,3,4 ApplicationToPetsc %D %D %D\n",
119: rank,getpetsc3[0],getpetsc3[1],getpetsc3[2]);
120: PetscSynchronizedFlush(PETSC_COMM_WORLD);
122: /* Check accuracy */;
123: for (i=0; i<4;i++)
124:
125: if (getapp3[i] != getapp[i]) SETERRQ2(PETSC_COMM_SELF,PETSC_ERR_USER,"getapp3 %d != getapp %d",getapp3[i],getapp[i]);
126: for (i=0; i<3;i++)
127: if (getpetsc3[i] != getpetsc[i]) SETERRQ2(PETSC_COMM_SELF,PETSC_ERR_USER,"getpetsc3 %d != getpetsc %d",getpetsc3[i],getpetsc[i]);
129: AODestroy(&ao);
130: PetscFinalize();
131: return 0;
132: }
133: