Actual source code: ex3.cxx

petsc-3.7.4 2016-10-02
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;

 26:   PetscInitialize(&argc, &argv, (char*)0, help);
 27:   int size=-1;   MPI_Comm_size(PETSC_COMM_WORLD, &size);
 28:   int myrank=-1; MPI_Comm_rank(PETSC_COMM_WORLD, &myrank);

 30:   PetscOptionsGetString(NULL,NULL,"-datafiles",datafiles,sizeof(datafiles),&flg);
 31:   if (!flg) SETERRQ(PETSC_COMM_WORLD,PETSC_ERR_USER,"Must specify -datafiles ${DATAFILESPATH}/ao");

 33:   // read in application indices
 34:   PetscSNPrintf(infile,sizeof(infile),"%s/AO%dCPUs/ao_p%d_appindices.txt",datafiles,size,myrank);
 35:   //cout << infile << endl;
 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",
 47:           myrank,myapp.size());
 48:   PetscSynchronizedFlush(PETSC_COMM_WORLD,PETSC_STDOUT);

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

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

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

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

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

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