5 #ifndef _PFASST_CONTROLLER_HPP_
6 #define _PFASST_CONTROLLER_HPP_
30 template<
typename time = time_precision>
42 deque<shared_ptr<ISweeper<time>>>
levels;
97 virtual void set_options(
bool all_sweepers =
true);
106 virtual void setup();
117 virtual void set_duration(time t0, time tend, time dt,
size_t niters);
135 virtual size_t nlevels();
148 template<
typename R = ISweeper<time>>
151 shared_ptr<R> r = dynamic_pointer_cast<R>(levels[level]);
162 template<
typename R = ISweeper<time>>
165 return get_level<R>(nlevels() - 1);
174 template<
typename R = ISweeper<time>>
177 return get_level<R>(0);
192 template<
typename R = ITransfer<time>>
195 shared_ptr<R> r = dynamic_pointer_cast<R>(transfer[level]);
209 virtual size_t get_step();
216 virtual void set_step(
size_t n);
223 virtual time get_step_size();
230 time
get_dt() {
return this->get_step_size(); }
237 virtual time get_time();
244 time
get_t() {
return this->get_time(); }
251 virtual void advance_time(
size_t nsteps = 1);
258 virtual time get_end_time();
265 virtual size_t get_iteration();
272 virtual void set_iteration(
size_t iter);
279 virtual void advance_iteration();
286 virtual size_t get_max_iterations();
307 : std::iterator<random_access_iterator_tag, shared_ptr<ISweeper<time>>, int,
308 ISweeper<time>*, ISweeper<time>>
340 template<
typename R = ISweeper<time>>
343 return ts->template get_level<R>(level);
352 template<
typename R = ISweeper<time>>
355 return ts->template get_level<R>(level + 1);
364 template<
typename R = ISweeper<time>>
367 return ts->template get_level<R>(level - 1);
376 template<
typename R = ITransfer<time>>
379 return ts->template get_transfer<R>(level);
388 template<
typename R = reference>
395 template<
typename R = reference>
422 virtual LevelIter finest();
429 virtual LevelIter coarsest();
deque< shared_ptr< ITransfer< time > > > transfer
Ordered list of transfer operators for levels.
time dt
Width of current time step (\( \Delta t \)).
deque< shared_ptr< ISweeper< time > > > levels
Ordered list of all levels.
ISweeper< time > * pointer
time get_t()
Get start time point of current time step (alias for get_time).
shared_ptr< R > fine()
Get the next finer level based on LevelIter::current()
void setup(shared_ptr< WrapperInterface< scalar, time >> wrapper)
Base SDC/MLSDC/PFASST controller.
shared_ptr< R > get_transfer(size_t level)
Retreive transfer operator for level level.
time get_dt()
Get width of current time step (alias for get_step_size).
shared_ptr< R > coarse()
Get the next coarser level based on LevelIter::current()
shared_ptr< R > get_level(size_t level)
Get sweeper for level with index level.
Level (MLSDC/PFASST) iterator.
shared_ptr< R > operator->()
vector< precision > operator+(const vector< precision > &first, const vector< precision > &second)
time t
\( t_0 \) of current time step.
time tend
\( T_{end} \) of last time step.
size_t iteration
Current iteration index on current time step.
Controller * ts
Controller this iterator is bound to.
shared_ptr< R > operator*()
random_access_iterator_tag iterator_category
vector< precision > operator-(const vector< precision > &first, const vector< precision > &second)
interfaces for SDC/MLSDC/PFASST algorithms.
shared_ptr< R > transfer()
Get transfer operator for current level.
shared_ptr< R > get_finest()
Get coarsest level.
Abstract time/space transfer (restrict/interpolate) class.
size_t step
Current time step index.
shared_ptr< R > current()
Get level this iterator is currently pointing at.
shared_ptr< ISweeper< time > > value_type
ISweeper< time > reference
size_t max_iterations
Maximum iterations per time step.
shared_ptr< R > get_coarsest()
Get coarsest level.