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;

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

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

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

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

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

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

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

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

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

 70: /*TEST

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

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

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

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

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

101: TEST*/