Actual source code: ex3.cxx

petsc-3.8.3 2017-12-09
Report Typos and Errors

  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: {
 21:   AO             ao;
 22:   IS             isapp;
 23:   char           infile[PETSC_MAX_PATH_LEN],datafiles[PETSC_MAX_PATH_LEN];
 24:   PetscBool      flg;
 25:   PetscMPIInt    size,rank;

 27:   PetscInitialize(&argc, &argv, (char*)0, help);if (ierr) return ierr;
 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);
 32:   if (!flg) SETERRQ(PETSC_COMM_WORLD,PETSC_ERR_USER,"Must specify -datafiles ${DATAFILESPATH}/ao");

 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);
 37:   if (!fin) SETERRQ1(PETSC_COMM_SELF,PETSC_ERR_FILE_OPEN,"File not found: %s",infile);
 38:   vector<int>  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:   PetscSynchronizedPrintf(PETSC_COMM_WORLD,"[%d] has %D indices.\n",rank,myapp.size());
 47:   PetscSynchronizedFlush(PETSC_COMM_WORLD,PETSC_STDOUT);

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

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

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

 58:   AODestroy(&ao);
 59:   ISDestroy(&isapp);

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

 63:   PetscFinalize();
 64:   return ierr;
 65: }