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