Actual source code: ex3.cxx
petsc-3.12.2 2019-11-22
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*/