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