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: