Actual source code: ex3.cxx

petsc-3.12.1 2019-10-22
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: */
  9: #define PETSC_SKIP_CXX_COMPLEX_FIX

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

 17: using namespace std;

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

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

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

 35:   // read in application indices
 36:   PetscSNPrintf(infile,sizeof(infile),"%s/AO%dCPUs/ao_p%d_appindices.txt",datafiles,size,rank);
 37:   ifstream fin(infile);
 38:   if (!fin) SETERRQ1(PETSC_COMM_SELF,PETSC_ERR_FILE_OPEN,"File not found: %s",infile);
 39:   vector<PetscInt>  myapp;
 40:   int tmp=-1;
 41:   while (!fin.eof()) {
 42:     tmp=-1;
 43:     fin >> tmp;
 44:     if (tmp==-1) break;
 45:     myapp.push_back(tmp);
 46:   }
 47:   PetscSynchronizedPrintf(PETSC_COMM_WORLD,"[%d] has %D indices.\n",rank,myapp.size());
 48:   PetscSynchronizedFlush(PETSC_COMM_WORLD,PETSC_STDOUT);

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

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

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

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

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

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


 69: /*TEST

 71:    build:
 72:      requires: !define(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*/