Actual source code: ex3.cxx
petsc-3.11.1 2019-04-12
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<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: 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: }
68: /*TEST
70: build:
71: requires: !define(PETSC_USE_64BIT_INDICES)
73: test:
74: nsize: 12
75: requires: double !complex datafilespath
76: args: -datafiles ${DATAFILESPATH}/ao
77: output_file: output/ex3_1.out
79: test:
80: suffix: 2
81: nsize: 12
82: requires: double !complex datafilespath
83: args: -ao_type basic -datafiles ${DATAFILESPATH}/ao
84: output_file: output/ex3_1.out
86: test:
87: suffix: 3
88: nsize: 30
89: requires: double !complex datafilespath
90: args: -datafiles ${DATAFILESPATH}/ao
92: test:
93: suffix: 4
94: nsize: 30
95: requires: double !complex datafilespath
96: args: -ao_type basic -datafiles ${DATAFILESPATH}/ao
97: output_file: output/ex3_3.out
99: TEST*/