6 #ifndef _EXAMPLES__BORIS__BORIS_SWEEPER__HPP_
7 #define _EXAMPLES__BORIS__BORIS_SWEEPER__HPP_
23 #include <boost/format.hpp>
56 template<
typename coeff>
59 template<
typename coeff>
60 using Matrix3d = Eigen::Matrix<coeff, 3, 3, Eigen::RowMajor>;
62 template<
typename coeff>
63 using Matrix = Eigen::Matrix<coeff, Eigen::Dynamic, Eigen::Dynamic, Eigen::RowMajor>;
67 template<
typename scalar>
79 virtual void log(el::base::type::ostream_t& os)
const override;
82 template<
typename scalar>
90 template<
typename scalar>
91 using error_map = map<error_index, ErrorTuple<scalar>>;
94 template<
typename precision = pfasst::time_precision>
97 template<
typename precision = pfasst::time_precision>
110 void increment(
const size_t vlevel);
111 void decrement(
const size_t vlevel);
112 const string indent(
const size_t vlevel)
const;
179 acceleration_type build_rhs(
const size_t m,
const bool previous =
false)
const;
180 scalar compute_residual_max();
182 const scalar energy,
const scalar drift,
const scalar residual);
183 void write_particle_cloud_to_file(
const size_t iter,
const size_t sweep,
const shared_ptr<encap_type>& cloud,
184 const scalar energy,
const scalar drift,
const scalar residual,
185 const bool with_center =
true);
186 void update_position(
const size_t m,
const time
dt,
const time ds);
187 void update_velocity(
const size_t m,
const time ds,
const vector<time>& nodes);
192 const string& data_file);
200 virtual void set_state(shared_ptr<const encap_type> u0,
size_t m);
201 virtual void set_start_state(shared_ptr<const encap_type> u0);
202 virtual shared_ptr<Encapsulation<time>> get_state(
size_t m)
const override;
203 virtual shared_ptr<Encapsulation<time>> get_start_state()
const;
204 virtual shared_ptr<acceleration_type> get_tau_q_as_force(
size_t m)
const;
205 virtual shared_ptr<acceleration_type> get_tau_qq_as_force(
size_t m)
const;
206 virtual shared_ptr<Encapsulation<time>> get_saved_state(
size_t m)
const override;
207 virtual void set_initial_energy();
212 virtual void exact(shared_ptr<encap_type> q,
const time
t);
213 virtual void exact(encap_type& q,
const time
t);
214 virtual void echo_error(
const time
t,
bool predict =
false);
219 virtual void setup(
bool coarse =
false)
override;
221 virtual void integrate(time
dt, vector<shared_ptr<acceleration_type>> dst_q,
222 vector<shared_ptr<acceleration_type>> dst_qq)
const;
224 virtual void advance()
override;
225 virtual void evaluate(
size_t m);
226 virtual void predict(
bool initial)
override;
227 virtual void sweep()
override;
228 virtual void save(
bool initial_only=
false)
override;
229 virtual void spread()
override;
233 virtual void post_sweep()
override;
234 virtual void post_predict()
override;
235 virtual void post_step()
override;
240 virtual void send(
ICommunicator* comm,
int tag,
bool blocking)
override;
241 virtual void recv(
ICommunicator* comm,
int tag,
bool blocking)
override;
246 virtual void boris_solve(
const time tm,
const time t_next,
const time ds,
const size_t m,
247 const velocity_type& c_k_term);
257 #endif // _EXAMPLES__BORIS__BORIS_SWEEPER__HPP_
Eigen::Array< coeff, 3, 1 > Vector3d
vector< velocity_type > s_integrals
vector< acceleration_type > saved_forces
shared_ptr< encap_type > end_particles
vector< shared_ptr< acceleration_type > > tau_qq_corrections
Host based encapsulated base sweeper.
map< error_index, ErrorTuple< scalar >> error_map
pair< size_t, size_t > error_index
void setup(shared_ptr< WrapperInterface< scalar, time >> wrapper)
ParticleCloudComponent< scalar > position_type
vector< shared_ptr< encap_type > > particles
vector< scalar > energy_evals
shared_ptr< encap_type > exact_cache
vector< precision > ParticleCloudComponent
vector< acceleration_type > saved_b_vecs
shared_ptr< LogIndent > log_indent
vector< precision > ParticleComponent
vector< position_type > ss_integrals
vector< acceleration_type > b_vecs
vector< shared_ptr< acceleration_type > > tau_q_corrections
vector< acceleration_type > forces
ParticleCloudComponent< scalar > velocity_type
ParticleCloud< scalar > encap_type
Data/solution encapsulation.
Eigen::Matrix< coeff, 3, 3, Eigen::RowMajor > Matrix3d
shared_ptr< encap_type > start_particles
string DATA_STREAM_FORMAT_STR
array< size_t, 9 > vlog_levels
shared_ptr< bindings::WrapperInterface< scalar, time > > impl_solver
ParticleCloudComponent< scalar > acceleration_type
Encapsulations (short encaps) are the central data type for all PFASST++ algorithms.
ParticleError< scalar > p_err
Abstract interface for communicators.
Eigen::Matrix< coeff, Eigen::Dynamic, Eigen::Dynamic, Eigen::RowMajor > Matrix
vector< shared_ptr< encap_type > > saved_particles
boost::format data_stream_fmt
vector< time > delta_nodes
delta_nodes[m] = nodes[m] - nodes[m-1]
error_map< scalar > errors