Actual source code: ex3.cxx


  2: static char help[] = "AO test contributed by Sebastian Steiger <steiger@purdue.edu>, March 2011\n\n";

  4: /*
  5:   Example of usage:
  6:     mpiexec -n 12 ./ex3
  7:     mpiexec -n 30 ./ex3 -ao_type basic
  8: */

 10: #include <iostream>
 11: #include <fstream>
 12: #include <vector>
 13: #include <petscvec.h>
 14: #include <petscao.h>

 16: using namespace std;

 18: int main(int argc, char** argv)
 19: {
 20:   AO             ao;
 21:   IS             isapp;
 22:   char           infile[PETSC_MAX_PATH_LEN],datafiles[PETSC_MAX_PATH_LEN];
 23:   PetscBool      flg;
 24:   PetscMPIInt    size,rank;

 26:   PetscInitialize(&argc, &argv, (char*)0, help);
 27:   MPI_Comm_size(PETSC_COMM_WORLD, &size);
 28:   MPI_Comm_rank(PETSC_COMM_WORLD, &rank);

 30:   PetscOptionsGetString(NULL,NULL,"-datafiles",datafiles,sizeof(datafiles),&flg);

 33:   // read in application indices
 34:   PetscSNPrintf(infile,sizeof(infile),"%s/AO%dCPUs/ao_p%d_appindices.txt",datafiles,size,rank);
 35:   ifstream fin(infile);
 37:   vector<PetscInt>  myapp;
 38:   int tmp=-1;
 39:   while (!fin.eof()) {
 40:     tmp=-1;
 41:     fin >> tmp;
 42:     if (tmp==-1) break;
 43:     myapp.push_back(tmp);
 44:   }
 45: #if __cplusplus >= 201103L // c++11
 46:   static_assert(is_same<decltype(myapp.size()),size_t>::value,"");
 47: #endif
 48:   PetscSynchronizedPrintf(PETSC_COMM_WORLD,"[%d] has %zu indices.\n",rank,myapp.size());
 49:   PetscSynchronizedFlush(PETSC_COMM_WORLD,PETSC_STDOUT);

 51:   ISCreateGeneral(PETSC_COMM_WORLD, myapp.size(), &(myapp[0]), PETSC_USE_POINTER, &isapp);

 53:   AOCreate(PETSC_COMM_WORLD, &ao);
 54:   AOSetIS(ao, isapp, NULL);
 55:   AOSetType(ao, AOMEMORYSCALABLE);
 56:   AOSetFromOptions(ao);

 58:   if (rank==0) cout << "AO has been set up." << endl;

 60:   AODestroy(&ao);
 61:   ISDestroy(&isapp);

 63:   if (rank==0) cout << "AO is done." << endl;

 65:   PetscFinalize();
 66:   return 0;
 67: }

 69: /*TEST

 71:    build:
 72:      requires: !defined(PETSC_USE_64BIT_INDICES)

 74:    test:
 75:       nsize: 12
 76:       requires: double !complex datafilespath
 77:       args: -datafiles ${DATAFILESPATH}/ao
 78:       output_file: output/ex3_1.out

 80:    test:
 81:       suffix: 2
 82:       nsize: 12
 83:       requires: double !complex datafilespath
 84:       args: -ao_type basic -datafiles ${DATAFILESPATH}/ao
 85:       output_file: output/ex3_1.out

 87:    test:
 88:       suffix: 3
 89:       nsize: 30
 90:       requires: double !complex datafilespath
 91:       args: -datafiles ${DATAFILESPATH}/ao

 93:    test:
 94:       suffix: 4
 95:       nsize: 30
 96:       requires: double !complex datafilespath
 97:       args: -ao_type basic -datafiles ${DATAFILESPATH}/ao
 98:       output_file: output/ex3_3.out

100: TEST*/