xref: /petsc/src/vec/is/ao/tests/ex3d/ex3.cxx (revision 732aec7a18f2199fb53bb9a2f3aef439a834ce31)
1c4762a1bSJed Brown static char help[] = "AO test contributed by Sebastian Steiger <steiger@purdue.edu>, March 2011\n\n";
2c4762a1bSJed Brown 
3c4762a1bSJed Brown /*
4c4762a1bSJed Brown   Example of usage:
5c4762a1bSJed Brown     mpiexec -n 12 ./ex3
6c4762a1bSJed Brown     mpiexec -n 30 ./ex3 -ao_type basic
7c4762a1bSJed Brown */
8c4762a1bSJed Brown 
9c4762a1bSJed Brown #include <iostream>
10c4762a1bSJed Brown #include <fstream>
11c4762a1bSJed Brown #include <vector>
12c4762a1bSJed Brown #include <petscvec.h>
13c4762a1bSJed Brown #include <petscao.h>
14c4762a1bSJed Brown 
15c4762a1bSJed Brown using namespace std;
16c4762a1bSJed Brown 
main(int argc,char ** argv)17d71ae5a4SJacob Faibussowitsch int main(int argc, char **argv)
18d71ae5a4SJacob Faibussowitsch {
19c4762a1bSJed Brown   AO          ao;
20c4762a1bSJed Brown   IS          isapp;
21c4762a1bSJed Brown   char        infile[PETSC_MAX_PATH_LEN], datafiles[PETSC_MAX_PATH_LEN];
22c4762a1bSJed Brown   PetscBool   flg;
23c4762a1bSJed Brown   PetscMPIInt size, rank;
24c4762a1bSJed Brown 
25327415f7SBarry Smith   PetscFunctionBeginUser;
26*c8025a54SPierre Jolivet   PetscCall(PetscInitialize(&argc, &argv, nullptr, help));
27b8abcfdeSJacob Faibussowitsch   PetscCallMPI(MPI_Comm_size(PETSC_COMM_WORLD, &size));
28b8abcfdeSJacob Faibussowitsch   PetscCallMPI(MPI_Comm_rank(PETSC_COMM_WORLD, &rank));
29c4762a1bSJed Brown 
30b8abcfdeSJacob Faibussowitsch   PetscCall(PetscOptionsGetString(NULL, NULL, "-datafiles", datafiles, sizeof(datafiles), &flg));
3154c59aa7SJacob Faibussowitsch   PetscCheck(flg, PETSC_COMM_WORLD, PETSC_ERR_USER, "Must specify -datafiles ${DATAFILESPATH}/ao");
32c4762a1bSJed Brown 
33c4762a1bSJed Brown   // read in application indices
34b8abcfdeSJacob Faibussowitsch   PetscCall(PetscSNPrintf(infile, sizeof(infile), "%s/AO%dCPUs/ao_p%d_appindices.txt", datafiles, size, rank));
35c4762a1bSJed Brown   ifstream fin(infile);
3654c59aa7SJacob Faibussowitsch   PetscCheck(fin, PETSC_COMM_SELF, PETSC_ERR_FILE_OPEN, "File not found: %s", infile);
37c4762a1bSJed Brown   vector<PetscInt> myapp;
38c4762a1bSJed Brown   int              tmp = -1;
39c4762a1bSJed Brown   while (!fin.eof()) {
40c4762a1bSJed Brown     tmp = -1;
41c4762a1bSJed Brown     fin >> tmp;
42c4762a1bSJed Brown     if (tmp == -1) break;
43c4762a1bSJed Brown     myapp.push_back(tmp);
44c4762a1bSJed Brown   }
4505d37114SJacob Faibussowitsch #if __cplusplus >= 201103L // c++11
4605d37114SJacob Faibussowitsch   static_assert(is_same<decltype(myapp.size()), size_t>::value, "");
4705d37114SJacob Faibussowitsch #endif
48b8abcfdeSJacob Faibussowitsch   PetscCall(PetscSynchronizedPrintf(PETSC_COMM_WORLD, "[%d] has %zu indices.\n", rank, myapp.size()));
49b8abcfdeSJacob Faibussowitsch   PetscCall(PetscSynchronizedFlush(PETSC_COMM_WORLD, PETSC_STDOUT));
50c4762a1bSJed Brown 
51f4f49eeaSPierre Jolivet   PetscCall(ISCreateGeneral(PETSC_COMM_WORLD, myapp.size(), &myapp[0], PETSC_USE_POINTER, &isapp));
52c4762a1bSJed Brown 
53b8abcfdeSJacob Faibussowitsch   PetscCall(AOCreate(PETSC_COMM_WORLD, &ao));
54b8abcfdeSJacob Faibussowitsch   PetscCall(AOSetIS(ao, isapp, NULL));
55b8abcfdeSJacob Faibussowitsch   PetscCall(AOSetType(ao, AOMEMORYSCALABLE));
56b8abcfdeSJacob Faibussowitsch   PetscCall(AOSetFromOptions(ao));
57c4762a1bSJed Brown 
58c4762a1bSJed Brown   if (rank == 0) cout << "AO has been set up." << endl;
59c4762a1bSJed Brown 
60b8abcfdeSJacob Faibussowitsch   PetscCall(AODestroy(&ao));
61b8abcfdeSJacob Faibussowitsch   PetscCall(ISDestroy(&isapp));
62c4762a1bSJed Brown 
63c4762a1bSJed Brown   if (rank == 0) cout << "AO is done." << endl;
64c4762a1bSJed Brown 
65b8abcfdeSJacob Faibussowitsch   PetscCall(PetscFinalize());
66b8abcfdeSJacob Faibussowitsch   return 0;
67c4762a1bSJed Brown }
68c4762a1bSJed Brown 
69c4762a1bSJed Brown /*TEST
70c4762a1bSJed Brown 
71c4762a1bSJed Brown    build:
72dfd57a17SPierre Jolivet      requires: !defined(PETSC_USE_64BIT_INDICES)
73c4762a1bSJed Brown 
74c4762a1bSJed Brown    test:
75c4762a1bSJed Brown       nsize: 12
76c4762a1bSJed Brown       requires: double !complex datafilespath
77c4762a1bSJed Brown       args: -datafiles ${DATAFILESPATH}/ao
78c4762a1bSJed Brown       output_file: output/ex3_1.out
79c4762a1bSJed Brown 
80c4762a1bSJed Brown    test:
81c4762a1bSJed Brown       suffix: 2
82c4762a1bSJed Brown       nsize: 12
83c4762a1bSJed Brown       requires: double !complex datafilespath
84c4762a1bSJed Brown       args: -ao_type basic -datafiles ${DATAFILESPATH}/ao
85c4762a1bSJed Brown       output_file: output/ex3_1.out
86c4762a1bSJed Brown 
87c4762a1bSJed Brown    test:
88c4762a1bSJed Brown       suffix: 3
89c4762a1bSJed Brown       nsize: 30
90c4762a1bSJed Brown       requires: double !complex datafilespath
91c4762a1bSJed Brown       args: -datafiles ${DATAFILESPATH}/ao
92c4762a1bSJed Brown 
93c4762a1bSJed Brown    test:
94c4762a1bSJed Brown       suffix: 4
95c4762a1bSJed Brown       nsize: 30
96c4762a1bSJed Brown       requires: double !complex datafilespath
97c4762a1bSJed Brown       args: -ao_type basic -datafiles ${DATAFILESPATH}/ao
98c4762a1bSJed Brown       output_file: output/ex3_3.out
99c4762a1bSJed Brown 
100c4762a1bSJed Brown TEST*/
101