36 #ifndef PARTICLE_DYNAMICS_ALGORITHMS_H 37 #define PARTICLE_DYNAMICS_ALGORITHMS_H 53 functor_update_(std::bind(&ParticleDynamicsSimple::Update,
this, _1, _2)){};
56 virtual void exec(Real dt = 0.0)
override;
57 virtual void parallel_exec(Real dt = 0.0)
override;
60 virtual void Update(
size_t index_i, Real dt = 0.0) = 0;
68 template <
class ReturnType,
typename ReduceOperation>
74 functor_reduce_function_(std::bind(&ParticleDynamicsReduce::ReduceFunction,
this, _1, _2)){};
78 std::string QuantityName() {
return quantity_name_; };
80 virtual ReturnType
exec(Real dt = 0.0)
override 82 size_t total_real_particles = this->base_particles_->total_real_particles_;
83 this->setBodyUpdated();
87 return OutputResult(temp);
89 virtual ReturnType parallel_exec(Real dt = 0.0)
override 91 size_t total_real_particles = this->base_particles_->total_real_particles_;
92 this->setBodyUpdated();
96 return this->OutputResult(temp);
100 ReduceOperation reduce_operation_;
101 std::string quantity_name_;
105 virtual void SetupReduce(){};
106 virtual ReturnType ReduceFunction(
size_t index_i, Real dt = 0.0) = 0;
107 virtual ReturnType OutputResult(ReturnType reduced_value) {
return reduced_value; };
108 ReduceFunctor<ReturnType> functor_reduce_function_;
120 functor_interaction_(std::bind(&InteractionDynamics::Interaction,
129 virtual void exec(Real dt = 0.0)
override;
130 virtual void parallel_exec(Real dt = 0.0)
override;
134 virtual void Interaction(
size_t index_i, Real dt = 0.0) = 0;
153 virtual void Interaction(
size_t index_i, Real dt = 0.0)
override;
165 functor_update_(std::bind(&InteractionDynamicsWithUpdate::Update,
169 virtual void exec(Real dt = 0.0)
override;
170 virtual void parallel_exec(Real dt = 0.0)
override;
173 virtual void Update(
size_t index_i, Real dt = 0.0) = 0;
186 functor_initialization_(std::bind(&ParticleDynamics1Level::Initialization,
190 virtual void exec(Real dt = 0.0)
override;
191 virtual void parallel_exec(Real dt = 0.0)
override;
194 virtual void Initialization(
size_t index_i, Real dt = 0.0) = 0;
208 virtual void exec(Real dt = 0.0)
override;
209 virtual void parallel_exec(Real dt = 0.0)
override;
230 virtual void exec(Real dt = 0.0)
override 232 size_t total_real_particles = base_particles_->total_real_particles_;
236 virtual void parallel_exec(Real dt = 0.0)
override 238 size_t total_real_particles = base_particles_->total_real_particles_;
246 template <
class BodyDynamicsType,
class LocalDynamicsSimple>
249 LocalDynamicsSimple local_dynamics_;
252 template <
typename... ConstructorArgs>
255 local_dynamics_(sph_body, std::forward<ConstructorArgs>(args)...)
257 this->particle_functor_ = std::bind(&LocalDynamicsSimple::update, &local_dynamics_, _1, _2);
261 LocalDynamicsSimple &LocalDynamics() {
return local_dynamics_; };
263 virtual void exec(Real dt = 0.0)
override 265 this->setBodyUpdated();
266 this->setupDynamics(dt);
267 BodyDynamicsType::exec(dt);
270 virtual void parallel_exec(Real dt = 0.0)
override 272 this->setBodyUpdated();
273 this->setupDynamics(dt);
274 BodyDynamicsType::parallel_exec(dt);
279 template <
class LocalDynamicsType>
282 #endif // PARTICLE_DYNAMICS_ALGORITHMS_H StdVec< ConcurrentCellLists > SplitCellLists
Definition: sph_data_containers.h:54
Definition: particle_dynamics_algorithms.h:222
This is the implementation of the template class for 3D build.
Simple particle dynamics without considering particle interaction.
Definition: particle_dynamics_algorithms.h:48
virtual void exec(Real dt=0.0) override
Definition: particle_dynamics_algorithms.cpp:15
virtual void exec(Real dt=0.0) override
Definition: particle_dynamics_algorithms.cpp:152
void ParticleIterator(size_t total_real_particles, const ParticleFunctor &particle_functor, Real dt)
Definition: base_particle_dynamics.cpp:12
This is the class for combining several interactions dynamics, which share the particle loop but are ...
Definition: particle_dynamics_algorithms.h:144
Definition: particle_dynamics_algorithms.h:247
virtual void exec(Real dt=0.0) override
Definition: particle_dynamics_algorithms.h:230
ReturnType ReduceIterator(size_t total_real_particles, ReturnType temp, ReduceFunctor< ReturnType > &reduce_functor, ReduceOperation &reduce_operation, Real dt=0.0)
Definition: base_particle_dynamics.hpp:43
Base abstract class for reduce.
Definition: particle_dynamics_algorithms.h:69
StdVec< ParticleDynamics< void > * > pre_processes_
Definition: particle_dynamics_algorithms.h:122
virtual void exec(Real dt=0.0) override
Definition: particle_dynamics_algorithms.cpp:90
void ParticleIterator_parallel(size_t total_real_particles, const ParticleFunctor &particle_functor, Real dt)
Definition: base_particle_dynamics.cpp:18
virtual void exec(Real dt=0.0) override
Definition: particle_dynamics_algorithms.cpp:116
This is for the splitting algorithm.
Definition: particle_dynamics_algorithms.h:202
ReturnType initial_reference_
Definition: particle_dynamics_algorithms.h:104
This is for the base classes of particle dynamics, which describe the interaction between particles...
virtual ReturnType exec(Real dt=0.0) override
Definition: particle_dynamics_algorithms.h:80
This class includes an initialization, an interaction and a update steps.
Definition: particle_dynamics_algorithms.h:181
This is the class for particle interaction with other particles.
Definition: particle_dynamics_algorithms.h:115
SPHBody is a base body with basic data and functions. Its derived class can be a real fluid body...
Definition: base_body.h:61
This class includes an interaction and a update steps.
Definition: particle_dynamics_algorithms.h:160
std::function< void(size_t, Real)> ParticleFunctor
Definition: base_particle_dynamics.h:49
ReturnType ReduceIterator_parallel(size_t total_real_particles, ReturnType temp, ReduceFunctor< ReturnType > &reduce_functor, ReduceOperation &reduce_operation, Real dt=0.0)
Definition: base_particle_dynamics.hpp:54
Derived body with inner particle configuration or inner interactions. After construction, the particle and material must be specified.
Definition: base_body.h:182
StdVec< ParticleDynamics< void > * > post_processes_
Definition: particle_dynamics_algorithms.h:127
Definition: solid_body_supplementary.cpp:9
virtual void exec(Real dt=0.0) override
Definition: particle_dynamics_algorithms.cpp:31
virtual void setupDynamics(Real dt=0.0) override
Definition: particle_dynamics_algorithms.cpp:78
The base class for all particle dynamics This class contains the only two interface functions availab...
Definition: base_particle_dynamics.h:145