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