1 2 static char help[] = "Tests 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 PetscMPIInt rank,size; 11 PetscInt n,*ispetsc,*isapp,start,N,i; 12 AO ao; 13 14 PetscFunctionBeginUser; 15 PetscCall(PetscInitialize(&argc,&argv,(char*)0,help)); 16 PetscCall(PetscOptionsGetInt(NULL,NULL,"-n",&n,NULL)); 17 PetscCallMPI(MPI_Comm_rank(PETSC_COMM_WORLD,&rank));n = rank + 2; 18 PetscCallMPI(MPI_Comm_size(PETSC_COMM_WORLD,&size)); 19 20 /* create the orderings */ 21 PetscCall(PetscMalloc2(n,&ispetsc,n,&isapp)); 22 23 PetscCallMPI(MPI_Scan(&n,&start,1,MPIU_INT,MPI_SUM,PETSC_COMM_WORLD)); 24 PetscCallMPI(MPI_Allreduce(&n,&N,1,MPIU_INT,MPI_SUM,PETSC_COMM_WORLD)); 25 start -= n; 26 27 for (i=0; i<n; i++) { 28 ispetsc[i] = start + i; 29 isapp[i] = N - start - i - 1; 30 } 31 32 /* create the application ordering */ 33 PetscCall(AOCreateBasic(PETSC_COMM_WORLD,n,isapp,ispetsc,&ao)); 34 PetscCall(AOView(ao,PETSC_VIEWER_STDOUT_WORLD)); 35 36 /* check the mapping */ 37 PetscCall(AOPetscToApplication(ao,n,ispetsc)); 38 for (i=0; i<n; i++) { 39 if (ispetsc[i] != isapp[i]) { 40 PetscCall(PetscPrintf(PETSC_COMM_WORLD,"[%d] Problem with mapping %" PetscInt_FMT " to %" PetscInt_FMT "\n",rank,i,ispetsc[i])); 41 } 42 } 43 PetscCall(PetscFree2(ispetsc,isapp)); 44 45 PetscCall(AODestroy(&ao)); 46 PetscCall(PetscFinalize()); 47 return 0; 48 } 49 50 /*TEST 51 52 test: 53 54 test: 55 suffix: 2 56 nsize: 2 57 58 test: 59 suffix: 3 60 nsize: 3 61 62 TEST*/ 63