Nalu
Nalu: a generalized unstructured massively parallel low Mach flow code designed to support a variety of energy applications of interest (most notably Wind ECP) built on the Sierra Toolkit and Trilinos solver Tpetra/Epetra stack. The open source BSD, clause 3 license model has been chosen for the code base. See LICENSE for more information. http://NaluCFD.org
LinearSolver.h
Go to the documentation of this file.
1 /*------------------------------------------------------------------------*/
2 /* Copyright 2014 Sandia Corporation. */
3 /* This software is released under the license detailed */
4 /* in the file, LICENSE, which is located in the top-level Nalu */
5 /* directory structure */
6 /*------------------------------------------------------------------------*/
7 
8 
9 #ifndef LinearSolver_h
10 #define LinearSolver_h
11 
12 #include <LinearSolverTypes.h>
13 #include <LinearSolverConfig.h>
14 
15 #include <LinearSolverTypes.h>
16 
17 #include <Kokkos_DefaultNode.hpp>
18 #include <Tpetra_Vector.hpp>
19 #include <Tpetra_DefaultPlatform.hpp>
20 #include <Tpetra_CrsMatrix.hpp>
21 #include <Teuchos_GlobalMPISession.hpp>
22 #include <Teuchos_oblackholestream.hpp>
23 
24 #include <Ifpack2_Factory.hpp>
25 
26 // Header files defining default types for template parameters.
27 // These headers must be included after other MueLu/Xpetra headers.
28 typedef double Scalar;
29 typedef long GlobalOrdinal;
30 typedef int LocalOrdinal;
31 typedef Tpetra::DefaultPlatform::DefaultPlatformType Platform;
33 typedef Teuchos::ScalarTraits<Scalar> STS;
34 
35 // MueLu main header: include most common header files in one line
36 #include <MueLu.hpp>
37 
38 #include <MueLu_TrilinosSmoother.hpp> //TODO: remove
39 #include <MueLu_TpetraOperator.hpp>
40 
41 #include <MueLu_UseShortNames.hpp> // => typedef MueLu::FooClass<Scalar, LocalOrdinal, ...> Foo
42 
43 namespace sierra{
44 namespace nalu{
45 
46  enum PetraType {
49  };
50 
51 
52 class LinearSolvers;
53 class Simulation;
54 
56 {
57  public:
58  LinearSolver(std::string name, LinearSolvers *linearSolvers,
59  bool recompute_preconditioner, bool reuse_preconditioner) : name_(name), linearSolvers_(linearSolvers),
60  recomputePreconditioner_(recompute_preconditioner), reusePreconditioner_(reuse_preconditioner), timerPrecond_(0.0) {}
61  virtual ~LinearSolver() {}
62  std::string name_;
63  virtual PetraType getType() = 0;
64  Simulation *root();
67  protected:
70  double timerPrecond_;
71  public:
74  void zero_timer_precond() { timerPrecond_ = 0.0;}
75  double get_timer_precond() { return timerPrecond_;}
76 };
77 
79 {
80  public:
81 
83  std::string solverName,
85  const Teuchos::RCP<Teuchos::ParameterList> params, const Teuchos::RCP<Teuchos::ParameterList> paramsPrecond,
86  LinearSolvers *linearSolvers);
88 
89  void setSystemObjects(
90  Teuchos::RCP<LinSys::Matrix> matrix,
91  Teuchos::RCP<LinSys::Vector> rhs);
92 
93  void setupLinearSolver(
94  Teuchos::RCP<LinSys::Vector> sln,
95  Teuchos::RCP<LinSys::Matrix> matrix,
96  Teuchos::RCP<LinSys::Vector> rhs,
97  Teuchos::RCP<LinSys::MultiVector> coords);
98 
99  void destroyLinearSolver();
100 
101  void setMueLu();
102 
103  int residual_norm(int whichNorm, Teuchos::RCP<LinSys::Vector> sln, double& norm);
104 
105  int solve(
106  Teuchos::RCP<LinSys::Vector> sln,
107  int & iterationCount,
108  double & scaledResidual);
109 
110  virtual PetraType getType() { return PT_TPETRA; }
111  TpetraLinearSolverConfig *getConfig() { return config_; }
112 
113  bool & activeMueLu(){ return activateMueLu_; }
114 
115  private:
117  const Teuchos::RCP<Teuchos::ParameterList> params_;
118  const Teuchos::RCP<Teuchos::ParameterList> paramsPrecond_;
119  Teuchos::RCP<LinSys::Matrix> matrix_;
120  Teuchos::RCP<LinSys::Vector> rhs_;
121  Teuchos::RCP<LinSys::LinearProblem> problem_;
122  Teuchos::RCP<LinSys::SolverManager> solver_;
123  Teuchos::RCP<LinSys::Preconditioner> preconditioner_;
124  Teuchos::RCP<MueLu::TpetraOperator<SC,LO,GO,NO> > mueluPreconditioner_;
125  Teuchos::RCP<LinSys::MultiVector> coords_;
126 
128  std::string preconditionerType_;
129 };
130 
131 } // namespace nalu
132 } // namespace Sierra
133 
134 #endif
Teuchos::RCP< LinSys::Vector > rhs_
Definition: LinearSolver.h:120
Definition: LinearSolver.h:48
bool reusePreconditioner_
Definition: LinearSolver.h:69
PetraType
Definition: LinearSolver.h:46
bool & activeMueLu()
Definition: LinearSolver.h:113
Definition: Simulation.h:28
Definition: ABLForcingAlgorithm.C:26
Teuchos::RCP< LinSys::SolverManager > solver_
Definition: LinearSolver.h:122
virtual PetraType getType()
Definition: LinearSolver.h:110
double Scalar
Definition: LinearSolver.h:28
void zero_timer_precond()
Definition: LinearSolver.h:74
Definition: LinearSolver.h:47
double get_timer_precond()
Definition: LinearSolver.h:75
const Teuchos::RCP< Teuchos::ParameterList > params_
Definition: LinearSolver.h:117
int LocalOrdinal
Definition: LinearSolver.h:30
Teuchos::RCP< LinSys::LinearProblem > problem_
Definition: LinearSolver.h:121
TpetraLinearSolverConfig * config_
Definition: LinearSolver.h:116
double timerPrecond_
Definition: LinearSolver.h:70
const Teuchos::RCP< Teuchos::ParameterList > paramsPrecond_
Definition: LinearSolver.h:118
Teuchos::RCP< LinSys::MultiVector > coords_
Definition: LinearSolver.h:125
Tpetra::DefaultPlatform::DefaultPlatformType Platform
Definition: LinearSolver.h:31
LinearSolvers * parent()
Definition: LinearSolver.C:49
Definition: LinearSolverTypes.h:32
long GlobalOrdinal
Definition: LinearSolver.h:29
LinearSolver(std::string name, LinearSolvers *linearSolvers, bool recompute_preconditioner, bool reuse_preconditioner)
Definition: LinearSolver.h:58
static constexpr double rhs[8]
Definition: UnitTestContinuityAdvElem.C:18
bool & recomputePreconditioner()
Definition: LinearSolver.h:72
std::string preconditionerType_
Definition: LinearSolver.h:128
bool activateMueLu_
Definition: LinearSolver.h:127
virtual PetraType getType()=0
bool & reusePreconditioner()
Definition: LinearSolver.h:73
Tpetra::Map< LocalOrdinal, GlobalOrdinal >::node_type Node
Definition: LinearSolver.h:32
virtual ~LinearSolver()
Definition: LinearSolver.h:61
Teuchos::RCP< MueLu::TpetraOperator< SC, LO, GO, NO > > mueluPreconditioner_
Definition: LinearSolver.h:124
Teuchos::ScalarTraits< Scalar > STS
Definition: LinearSolver.h:33
Definition: LinearSolvers.h:28
Simulation * root()
Definition: LinearSolver.C:48
Definition: LinearSolver.h:55
LinearSolvers * linearSolvers_
Definition: LinearSolver.h:66
Definition: LinearSolverConfig.h:23
bool recomputePreconditioner_
Definition: LinearSolver.h:68
TpetraLinearSolverConfig * getConfig()
Definition: LinearSolver.h:111
Teuchos::RCP< LinSys::Preconditioner > preconditioner_
Definition: LinearSolver.h:123
Definition: LinearSolver.h:78
std::string name_
Definition: LinearSolver.h:62
Teuchos::RCP< LinSys::Matrix > matrix_
Definition: LinearSolver.h:119