PFASST++
encap_sweeper.hpp
Go to the documentation of this file.
1 
5 #ifndef _PFASST_ENCAP_ENCAP_SWEEPER_HPP_
6 #define _PFASST_ENCAP_ENCAP_SWEEPER_HPP_
7 
8 #include <memory>
9 #include <vector>
10 using namespace std;
11 
12 #include "pfasst/interfaces.hpp"
13 #include "pfasst/quadrature.hpp"
15 
16 
17 namespace pfasst
18 {
19  namespace encap
20  {
21  using namespace pfasst::quadrature;
22 
23 
29  template<typename time = time_precision>
31  : public ISweeper<time>
32  {
33  protected:
36  shared_ptr<IQuadrature<time>> quadrature;
37 
39  shared_ptr<EncapFactory<time>> factory;
40 
42  shared_ptr<Encapsulation<time>> start_state;
43 
45  shared_ptr<Encapsulation<time>> end_state;
46 
53  vector<shared_ptr<Encapsulation<time>>> residuals;
55 
57 
63  vector<shared_ptr<Encapsulation<time>>> state;
64 
71  vector<shared_ptr<Encapsulation<time>>> saved_state;
72 
79  vector<shared_ptr<Encapsulation<time>>> fas_corrections;
81 
85 
93 
101 
102  string FORMAT_STR;
103 
104  public:
105  EncapSweeper();
106 
108 
113  virtual shared_ptr<Encapsulation<time>> get_state(size_t m) const;
114 
120  virtual shared_ptr<Encapsulation<time>> get_tau(size_t m) const;
121 
127  virtual shared_ptr<Encapsulation<time>> get_saved_state(size_t m) const;
129 
131 
134  virtual void set_options() override;
135 
139  virtual void setup(bool coarse) override;
141 
143 
146  virtual void spread() override;
147 
151  virtual void save(bool initial_only) override;
153 
155  virtual void set_quadrature(shared_ptr<IQuadrature<time>> quadrature);
156  virtual shared_ptr<const IQuadrature<time>> get_quadrature() const;
157 
158  virtual const vector<time> get_nodes() const;
159 
160  virtual void set_factory(shared_ptr<EncapFactory<time>> factory);
161  virtual shared_ptr<EncapFactory<time>> get_factory() const;
162 
163  virtual shared_ptr<Encapsulation<time>> get_start_state() const;
164  virtual shared_ptr<Encapsulation<time>> get_end_state();
166 
168 
171  virtual void advance() override;
172 
179  virtual void reevaluate(bool initial_only = false);
180 
188  virtual void integrate(time dt, vector<shared_ptr<Encapsulation<time>>> dst) const;
190 
192 
199  void set_residual_tolerances(time abs_residual_tol, time rel_residual_tol, int order = 0);
200 
207  virtual void residual(time dt, vector<shared_ptr<Encapsulation<time>>> dst) const;
208 
212  virtual bool converged() override;
214 
216 
219  virtual void post(ICommunicator* comm, int tag) override;
220 
224  virtual void send(ICommunicator* comm, int tag, bool blocking) override;
225 
229  virtual void recv(ICommunicator* comm, int tag, bool blocking) override;
230 
234  virtual void broadcast(ICommunicator* comm) override;
236  };
237 
238 
239  template<typename time>
241 
242  template<typename time>
243  const EncapSweeper<time>& as_encap_sweeper(shared_ptr<const ISweeper<time>> x);
244  } // ::pfasst::encap
245 } // ::pfasst
246 
248 
249 #endif
const EncapSweeper< time > & as_encap_sweeper(shared_ptr< const ISweeper< time >> x)
Host based encapsulated base sweeper.
Interface for quadrature handlers.
Definition: interface.hpp:232
void setup(shared_ptr< WrapperInterface< scalar, time >> wrapper)
shared_ptr< EncapFactory< time > > factory
Encapsulation data structure factory.
STL namespace.
shared_ptr< IQuadrature< time > > quadrature
shared_ptr< Encapsulation< time > > start_state
Separate start state, i.e. initial condition for the sweeper's current time step. ...
shared_ptr< Encapsulation< time > > end_state
Current solution at \( T_{end} \).
time abs_residual_tol
Tolerance for absolute residual.
Functionality related to computing quadrature nodes and weights.
time rel_residual_tol
Tolerance for relative residual.
vector< shared_ptr< Encapsulation< time > > > state
Solution values \( U \) at all time nodes of the current iteration.
Abstract interface of factory for creating Encapsulation objects.
vector< shared_ptr< Encapsulation< time > > > saved_state
Solution values \( U \) at all time nodes of the previous iteration.
vector< shared_ptr< Encapsulation< time > > > residuals
Place for the residuals at the different time nodes.
interfaces for SDC/MLSDC/PFASST algorithms.
Data/solution encapsulation.
Abstract interface for communicators.
Definition: interfaces.hpp:70
Abstract SDC sweeper.
Definition: interfaces.hpp:164
vector< shared_ptr< Encapsulation< time > > > fas_corrections
FAS corrections \( \tau \) at all time nodes of the current iteration.
float dt
Definition: plot.py:10