xref: /petsc/src/sys/tests/ex45.cxx (revision b8abcfde4cf799610cd89775278ac4145d1798ce)
1c4762a1bSJed Brown 
2c4762a1bSJed Brown static char help[] = "Demonstrates call PETSc first and then Trilinos in the same program.\n\n";
3c4762a1bSJed Brown 
4c4762a1bSJed Brown /*T
5c4762a1bSJed Brown    Concepts: introduction to PETSc^Trilinos
6c4762a1bSJed Brown    Processors: n
7c4762a1bSJed Brown 
8c4762a1bSJed Brown    Example obtained from: http://trilinos.org/docs/dev/packages/tpetra/doc/html/Tpetra_Lesson01.html
9c4762a1bSJed Brown T*/
10c4762a1bSJed Brown 
11c4762a1bSJed Brown #include <petscsys.h>
12c4762a1bSJed Brown #include <Teuchos_DefaultMpiComm.hpp> // wrapper for MPI_Comm
13c4762a1bSJed Brown #include <Tpetra_Version.hpp> // Tpetra version string
14c4762a1bSJed Brown 
15c4762a1bSJed Brown // Do something with the given communicator.  In this case, we just
16c4762a1bSJed Brown // print Tpetra's version to stdout on Process 0 in the given
17c4762a1bSJed Brown // communicator.
18c4762a1bSJed Brown void
19c4762a1bSJed Brown exampleRoutine (const Teuchos::RCP<const Teuchos::Comm<int> >& comm)
20c4762a1bSJed Brown {
21c4762a1bSJed Brown   if (comm->getRank () == 0) {
22c4762a1bSJed Brown     // On (MPI) Process 0, print out the Tpetra software version.
23c4762a1bSJed Brown     std::cout << Tpetra::version () << std::endl << std::endl;
24c4762a1bSJed Brown   }
25c4762a1bSJed Brown }
26c4762a1bSJed Brown 
27c4762a1bSJed Brown int main(int argc,char **argv)
28c4762a1bSJed Brown {
29c4762a1bSJed Brown   // These "using" declarations make the code more concise, in that
30c4762a1bSJed Brown   // you don't have to write the namespace along with the class or
31c4762a1bSJed Brown   // object name.  This is especially helpful with commonly used
32c4762a1bSJed Brown   // things like std::endl or Teuchos::RCP.
33c4762a1bSJed Brown   using std::cout;
34c4762a1bSJed Brown   using std::endl;
35c4762a1bSJed Brown   using Teuchos::Comm;
36c4762a1bSJed Brown   using Teuchos::MpiComm;
37c4762a1bSJed Brown   using Teuchos::RCP;
38c4762a1bSJed Brown   using Teuchos::rcp;
39c4762a1bSJed Brown 
40c4762a1bSJed Brown   /*
41c4762a1bSJed Brown     Every PETSc routine should begin with the PetscInitialize() routine.
42c4762a1bSJed Brown     argc, argv - These command line arguments are taken to extract the options
43c4762a1bSJed Brown                  supplied to PETSc and options supplied to MPI.
44c4762a1bSJed Brown     help       - When PETSc executable is invoked with the option -help,
45c4762a1bSJed Brown                  it prints the various options that can be applied at
46c4762a1bSJed Brown                  runtime.  The user can use the "help" variable place
47c4762a1bSJed Brown                  additional help messages in this printout.
48c4762a1bSJed Brown   */
49*b8abcfdeSJacob Faibussowitsch   PetscCall(PetscInitialize(&argc,&argv,(char*)0,help));
50c4762a1bSJed Brown   RCP<const Comm<int> > comm (new MpiComm<int> (PETSC_COMM_WORLD));
51c4762a1bSJed Brown   // Get my process' rank, and the total number of processes.
52c4762a1bSJed Brown   // Equivalent to MPI_Comm_rank resp. MPI_Comm_size.
53c4762a1bSJed Brown   const int myRank = comm->getRank ();
54c4762a1bSJed Brown   const int size = comm->getSize ();
55c4762a1bSJed Brown   if (myRank == 0) {
56c4762a1bSJed Brown     cout << "Total number of processes: " << size << endl;
57c4762a1bSJed Brown   }
58c4762a1bSJed Brown   // Do something with the new communicator.
59c4762a1bSJed Brown   exampleRoutine (comm);
60c4762a1bSJed Brown   // This tells the Trilinos test framework that the test passed.
61c4762a1bSJed Brown   if (myRank == 0) {
62c4762a1bSJed Brown     cout << "End Result: TEST PASSED" << endl;
63c4762a1bSJed Brown   }
64c4762a1bSJed Brown 
65*b8abcfdeSJacob Faibussowitsch   PetscCall(PetscFinalize());
66*b8abcfdeSJacob Faibussowitsch   return 0;
67c4762a1bSJed Brown }
68c4762a1bSJed Brown 
69c4762a1bSJed Brown /*TEST
70c4762a1bSJed Brown 
71c4762a1bSJed Brown    build:
72c4762a1bSJed Brown      requires: trilinos
73c4762a1bSJed Brown 
74c4762a1bSJed Brown    test:
75c4762a1bSJed Brown       nsize: 3
76c4762a1bSJed Brown       filter: grep -v "Tpetra in Trilinos"
77c4762a1bSJed Brown 
78c4762a1bSJed Brown TEST*/
79