waves
Basic FE playground
LinearSolver.h
Go to the documentation of this file.
1 #ifndef KATOPTRON_LINEARSOLVER_H
2 #define KATOPTRON_LINEARSOLVER_H
3 
4 #include "katoptron.h"
5 #include "wObject.h"
6 #include "wTimer.h"
7 #include "wTimers.h"
8 #include "wTag.h"
9 #include "wMedium.h"
10 #include "wNode.h"
11 
12 #include "Teuchos_ParameterList.hpp"
13 
14 #include "wProblem.h"
15 #include "wContact.h"
16 #include "wMshData.h"
17 #include "wDisplayHook.h"
18 #include "wElement.h"
19 
20 // Tpetra
21 #include "Stokhos_Tpetra_MP_Vector.hpp"
22 #include "Stokhos_Tpetra_Utilities_MP_Vector.hpp"
23 #include "Tpetra_ConfigDefs.hpp"
24 #include "Tpetra_Map.hpp"
25 #include "Tpetra_MultiVector.hpp"
26 #include "Tpetra_Vector.hpp"
27 #include "Tpetra_CrsGraph.hpp"
28 #include "Tpetra_CrsMatrix.hpp"
29 #include "Stokhos_Tpetra_CG.hpp"
30 
31 #include <Teuchos_Array.hpp>
32 #include <Teuchos_GlobalMPISession.hpp>
33 #include <Teuchos_oblackholestream.hpp>
34 #include <Teuchos_ScalarTraits.hpp>
35 #include <Teuchos_RCP.hpp>
36 #include "Teuchos_ParameterList.hpp"
37 
38 #include "Stokhos_Amesos2_MP_Vector.hpp"
39 #include "Amesos2_Factory.hpp"
40 
41 #include "Stokhos_Ifpack2_MP_Vector.hpp"
42 #include "Ifpack2_Factory.hpp"
43 
44 #include "Belos_Tpetra_MP_Vector.hpp"
45 #include "BelosLinearProblem.hpp"
46 #include "BelosPseudoBlockGmresSolMgr.hpp"
47 #include "BelosPseudoBlockCGSolMgr.hpp"
48 #include "BelosBlockGmresSolMgr.hpp"
49 
50 #include "Kokkos_ViewFactory.hpp"
51 #include "Kokkos_Vector.hpp"
52 
53 #include <Epetra_Map.h>
54 #include "Epetra_MpiComm.h"
55 
56 #include "BelosConfigDefs.hpp"
57 
58 #include "wRandomField.h"
59 
60 #include "wResults.h"
61 #include "wLazy.h"
62 #include "Map.h"
63 
64 #include <map>
65 
66 #include <limits>
67 
68 #include "EnsembleTraits.h"
69 
70 #include "ResultsDecl.hpp"
71 
72 namespace katoptron
73 {
74 
79 {
80 public:
81 #ifndef SWIG
83 #endif
84  Teuchos::RCP<Teuchos::ParameterList> solverList;
85  const int numPrimalDPN;
86  const size_t minimum_ensemble_size;
88 #ifndef SWIG
90 
91 #endif
92 public:
104  LinearSolver(Problem &_pbl, Teuchos::RCP<Teuchos::ParameterList> _solverList,
105  int _numPrimalDPN,
106  size_t _minimum_ensemble_size) : pbl(_pbl),
107  solverList(_solverList),
108  numPrimalDPN(_numPrimalDPN),
109  minimum_ensemble_size(_minimum_ensemble_size)
110  {
111  dhook = NULL;
112  }
113 
114  virtual ~LinearSolver() {}
115 
119  static fwk::Timers &getTimers()
120  {
121  static fwk::Timers tms;
122  return tms;
123  }
124 
128  void setGUI(DisplayHook &hook)
129  {
130  dhook = &hook;
131  }
132 
133 protected:
137  template <typename scalar>
139  Teuchos::RCP<Tpetra::Vector<scalar, Map::local_ordinal_type, Map::global_ordinal_type>> xPost,
140  size_t numNodes,
141  std::string name,
142  size_t ast,
143  bool final_result,
144  bool write_txt,
145  Teuchos::RCP<Map> map,
146  Teuchos::RCP<RandomField<scalar, Kokkos::DefaultExecutionSpace>> random_field)
147  {
148  LinearSolver::getTimers()["write results"].start();
149 
150  typedef Map::local_ordinal_type LocalOrdinal;
151  typedef Map::global_ordinal_type GlobalOrdinal;
152 
153  writeResultsVTK<scalar, LocalOrdinal, GlobalOrdinal>(pbl, xPost, map,
154  random_field,
155  name, ast, final_result, write_txt);
156 
157  LinearSolver::getTimers()["write results"].stop();
158  }
159 };
160 } // namespace katoptron
161 
162 #endif //KATOPTRON_LINEARSOLVER_H
wProblem.h
katoptron::Map::local_ordinal_type
int local_ordinal_type
Definition: Map.h:27
wMedium.h
katoptron::LinearSolver::writeResults
void writeResults(Teuchos::RCP< Tpetra::Vector< scalar, Map::local_ordinal_type, Map::global_ordinal_type >> xPost, size_t numNodes, std::string name, size_t ast, bool final_result, bool write_txt, Teuchos::RCP< Map > map, Teuchos::RCP< RandomField< scalar, Kokkos::DefaultExecutionSpace >> random_field)
Write results on disk in VTK format.
Definition: LinearSolver.h:138
katoptron::LinearSolver::solverList
Teuchos::RCP< Teuchos::ParameterList > solverList
Definition: LinearSolver.h:84
katoptron::Map::global_ordinal_type
int global_ordinal_type
Definition: Map.h:28
katoptron::LinearSolver::pbl
Problem & pbl
Definition: LinearSolver.h:82
ResultsDecl.hpp
wContact.h
KATOPTRON_API
#define KATOPTRON_API
Definition: katoptron.h:13
RandomField
Definition: wRandomField.h:10
katoptron::LinearSolver::LinearSolver
LinearSolver(Problem &_pbl, Teuchos::RCP< Teuchos::ParameterList > _solverList, int _numPrimalDPN, size_t _minimum_ensemble_size)
LinearSolver constructor.
Definition: LinearSolver.h:104
katoptron::LinearSolver
Solver class which includes utilities such as timers and VTK writers.
Definition: LinearSolver.h:78
katoptron::LinearSolver::minimum_ensemble_size
const size_t minimum_ensemble_size
Definition: LinearSolver.h:86
katoptron::LinearSolver::setGUI
void setGUI(DisplayHook &hook)
Set the GUI.
Definition: LinearSolver.h:128
katoptron::LinearSolver::dhook
DisplayHook * dhook
Definition: LinearSolver.h:89
katoptron::LinearSolver::~LinearSolver
virtual ~LinearSolver()
Definition: LinearSolver.h:114
katoptron
katoptron namespace
Definition: Algebraic.h:18
EnsembleTraits.h
DisplayHook
Definition: wDisplayHook.h:8
katoptron::LinearSolver::numPrimalDPN
const int numPrimalDPN
Definition: LinearSolver.h:85
katoptron::LinearSolver::getTimers
static fwk::Timers & getTimers()
Manage timers.
Definition: LinearSolver.h:119
wDisplayHook.h
katoptron::Problem
Class which is used to specify in Python the thermomechanical to solve.
Definition: wProblem.h:19
wRandomField.h
katoptron.h
katoptron::LinearSolver::active_set_iteration
size_t active_set_iteration
Definition: LinearSolver.h:87
Map.h