xref: /petsc/src/vec/is/ao/tests/ex3d/ex3.cxx (revision ccb4e88a40f0b86eaeca07ff64c64e4de2fae686)
1 
2 static char help[] = "AO test contributed by Sebastian Steiger <steiger@purdue.edu>, March 2011\n\n";
3 
4 /*
5   Example of usage:
6     mpiexec -n 12 ./ex3
7     mpiexec -n 30 ./ex3 -ao_type basic
8 */
9 
10 #include <iostream>
11 #include <fstream>
12 #include <vector>
13 #include <petscvec.h>
14 #include <petscao.h>
15 
16 using namespace std;
17 
18 int main(int argc, char** argv)
19 {
20   PetscErrorCode ierr;
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;
26 
27   ierr = PetscInitialize(&argc, &argv, (char*)0, help);if (ierr) return ierr;
28   ierr = MPI_Comm_size(PETSC_COMM_WORLD, &size);CHKERRMPI(ierr);
29   ierr = MPI_Comm_rank(PETSC_COMM_WORLD, &rank);CHKERRMPI(ierr);
30 
31   ierr = PetscOptionsGetString(NULL,NULL,"-datafiles",datafiles,sizeof(datafiles),&flg);CHKERRQ(ierr);
32   if (!flg) SETERRQ(PETSC_COMM_WORLD,PETSC_ERR_USER,"Must specify -datafiles ${DATAFILESPATH}/ao");
33 
34   // read in application indices
35   ierr = PetscSNPrintf(infile,sizeof(infile),"%s/AO%dCPUs/ao_p%d_appindices.txt",datafiles,size,rank);CHKERRQ(ierr);
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   ierr = PetscSynchronizedPrintf(PETSC_COMM_WORLD,"[%d] has %D indices.\n",rank,myapp.size());CHKERRQ(ierr);
47   ierr = PetscSynchronizedFlush(PETSC_COMM_WORLD,PETSC_STDOUT);CHKERRQ(ierr);
48 
49   ierr = ISCreateGeneral(PETSC_COMM_WORLD, myapp.size(), &(myapp[0]), PETSC_USE_POINTER, &isapp);CHKERRQ(ierr);
50 
51   ierr = AOCreate(PETSC_COMM_WORLD, &ao);CHKERRQ(ierr);
52   ierr = AOSetIS(ao, isapp, NULL);CHKERRQ(ierr);
53   ierr = AOSetType(ao, AOMEMORYSCALABLE);CHKERRQ(ierr);
54   ierr = AOSetFromOptions(ao);CHKERRQ(ierr);
55 
56   if (rank==0) cout << "AO has been set up." << endl;
57 
58   ierr = AODestroy(&ao);CHKERRQ(ierr);
59   ierr = ISDestroy(&isapp);CHKERRQ(ierr);
60 
61   if (rank==0) cout << "AO is done." << endl;
62 
63   ierr = PetscFinalize();
64   return ierr;
65 }
66 
67 /*TEST
68 
69    build:
70      requires: !defined(PETSC_USE_64BIT_INDICES)
71 
72    test:
73       nsize: 12
74       requires: double !complex datafilespath
75       args: -datafiles ${DATAFILESPATH}/ao
76       output_file: output/ex3_1.out
77 
78    test:
79       suffix: 2
80       nsize: 12
81       requires: double !complex datafilespath
82       args: -ao_type basic -datafiles ${DATAFILESPATH}/ao
83       output_file: output/ex3_1.out
84 
85    test:
86       suffix: 3
87       nsize: 30
88       requires: double !complex datafilespath
89       args: -datafiles ${DATAFILESPATH}/ao
90 
91    test:
92       suffix: 4
93       nsize: 30
94       requires: double !complex datafilespath
95       args: -ao_type basic -datafiles ${DATAFILESPATH}/ao
96       output_file: output/ex3_3.out
97 
98 TEST*/
99