xref: /petsc/src/vec/is/ao/tests/ex3d/ex3.cxx (revision ffc4695bcb29f4b022f59a5fd6bc99fc280ff6d8)
1c4762a1bSJed Brown 
2c4762a1bSJed Brown static char help[] = "AO test contributed by Sebastian Steiger <steiger@purdue.edu>, March 2011\n\n";
3c4762a1bSJed Brown 
4c4762a1bSJed Brown /*
5c4762a1bSJed Brown   Example of usage:
6c4762a1bSJed Brown     mpiexec -n 12 ./ex3
7c4762a1bSJed Brown     mpiexec -n 30 ./ex3 -ao_type basic
8c4762a1bSJed Brown */
9c4762a1bSJed Brown #define PETSC_SKIP_CXX_COMPLEX_FIX
10c4762a1bSJed Brown 
11c4762a1bSJed Brown #include <iostream>
12c4762a1bSJed Brown #include <fstream>
13c4762a1bSJed Brown #include <vector>
14c4762a1bSJed Brown #include <petscvec.h>
15c4762a1bSJed Brown #include <petscao.h>
16c4762a1bSJed Brown 
17c4762a1bSJed Brown using namespace std;
18c4762a1bSJed Brown 
19c4762a1bSJed Brown int main(int argc, char** argv)
20c4762a1bSJed Brown {
21c4762a1bSJed Brown   PetscErrorCode ierr;
22c4762a1bSJed Brown   AO             ao;
23c4762a1bSJed Brown   IS             isapp;
24c4762a1bSJed Brown   char           infile[PETSC_MAX_PATH_LEN],datafiles[PETSC_MAX_PATH_LEN];
25c4762a1bSJed Brown   PetscBool      flg;
26c4762a1bSJed Brown   PetscMPIInt    size,rank;
27c4762a1bSJed Brown 
28c4762a1bSJed Brown   ierr = PetscInitialize(&argc, &argv, (char*)0, help);if (ierr) return ierr;
29*ffc4695bSBarry Smith   ierr = MPI_Comm_size(PETSC_COMM_WORLD, &size);CHKERRMPI(ierr);
30*ffc4695bSBarry Smith   ierr = MPI_Comm_rank(PETSC_COMM_WORLD, &rank);CHKERRMPI(ierr);
31c4762a1bSJed Brown 
32c4762a1bSJed Brown   ierr = PetscOptionsGetString(NULL,NULL,"-datafiles",datafiles,sizeof(datafiles),&flg);CHKERRQ(ierr);
33c4762a1bSJed Brown   if (!flg) SETERRQ(PETSC_COMM_WORLD,PETSC_ERR_USER,"Must specify -datafiles ${DATAFILESPATH}/ao");
34c4762a1bSJed Brown 
35c4762a1bSJed Brown   // read in application indices
36c4762a1bSJed Brown   ierr = PetscSNPrintf(infile,sizeof(infile),"%s/AO%dCPUs/ao_p%d_appindices.txt",datafiles,size,rank);CHKERRQ(ierr);
37c4762a1bSJed Brown   ifstream fin(infile);
38c4762a1bSJed Brown   if (!fin) SETERRQ1(PETSC_COMM_SELF,PETSC_ERR_FILE_OPEN,"File not found: %s",infile);
39c4762a1bSJed Brown   vector<PetscInt>  myapp;
40c4762a1bSJed Brown   int tmp=-1;
41c4762a1bSJed Brown   while (!fin.eof()) {
42c4762a1bSJed Brown     tmp=-1;
43c4762a1bSJed Brown     fin >> tmp;
44c4762a1bSJed Brown     if (tmp==-1) break;
45c4762a1bSJed Brown     myapp.push_back(tmp);
46c4762a1bSJed Brown   }
47c4762a1bSJed Brown   ierr = PetscSynchronizedPrintf(PETSC_COMM_WORLD,"[%d] has %D indices.\n",rank,myapp.size());CHKERRQ(ierr);
48c4762a1bSJed Brown   ierr = PetscSynchronizedFlush(PETSC_COMM_WORLD,PETSC_STDOUT);CHKERRQ(ierr);
49c4762a1bSJed Brown 
50c4762a1bSJed Brown   ierr = ISCreateGeneral(PETSC_COMM_WORLD, myapp.size(), &(myapp[0]), PETSC_USE_POINTER, &isapp);CHKERRQ(ierr);
51c4762a1bSJed Brown 
52c4762a1bSJed Brown   ierr = AOCreate(PETSC_COMM_WORLD, &ao);CHKERRQ(ierr);
53c4762a1bSJed Brown   ierr = AOSetIS(ao, isapp, NULL);CHKERRQ(ierr);
54c4762a1bSJed Brown   ierr = AOSetType(ao, AOMEMORYSCALABLE);CHKERRQ(ierr);
55c4762a1bSJed Brown   ierr = AOSetFromOptions(ao);CHKERRQ(ierr);
56c4762a1bSJed Brown 
57c4762a1bSJed Brown   if (rank==0) cout << "AO has been set up." << endl;
58c4762a1bSJed Brown 
59c4762a1bSJed Brown   ierr = AODestroy(&ao);CHKERRQ(ierr);
60c4762a1bSJed Brown   ierr = ISDestroy(&isapp);CHKERRQ(ierr);
61c4762a1bSJed Brown 
62c4762a1bSJed Brown   if (rank==0) cout << "AO is done." << endl;
63c4762a1bSJed Brown 
64c4762a1bSJed Brown   ierr = PetscFinalize();
65c4762a1bSJed Brown   return ierr;
66c4762a1bSJed Brown }
67c4762a1bSJed Brown 
68c4762a1bSJed Brown 
69c4762a1bSJed Brown /*TEST
70c4762a1bSJed Brown 
71c4762a1bSJed Brown    build:
72c4762a1bSJed Brown      requires: !define(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