Detailed Description

Explicit Euler integration.

Kernel which explicitly integrates all particles in time.

Uses the 0.5at^2 extension for position integration. Boils down to using v_{t+0.5dt} for position integration. This version exhibits increased stability compared to standard explicit euler.

Wachs, A. Particle-scale computational approaches to model dry and saturated granular flows of non-Brownian, non-cohesive, and non-spherical rigid bodies. Acta Mech 230, 1919–1980 (2019). https://doi.org/10.1007/s00707-019-02389-9

This kernel requires the following particle accessor interface

const walberla::mesa_pd::Vec3& getPosition(const size_t p_idx) const;
void setPosition(const size_t p_idx, const walberla::mesa_pd::Vec3& v);
const walberla::mesa_pd::Vec3& getLinearVelocity(const size_t p_idx) const;
void setLinearVelocity(const size_t p_idx, const walberla::mesa_pd::Vec3& v);
const walberla::real_t& getInvMass(const size_t p_idx) const;
const walberla::mesa_pd::Vec3& getForce(const size_t p_idx) const;
void setForce(const size_t p_idx, const walberla::mesa_pd::Vec3& v);
const walberla::mesa_pd::data::particle_flags::FlagT& getFlags(const size_t p_idx) const;
const walberla::mesa_pd::Rot3& getRotation(const size_t p_idx) const;
void setRotation(const size_t p_idx, const walberla::mesa_pd::Rot3& v);
const walberla::mesa_pd::Vec3& getAngularVelocity(const size_t p_idx) const;
void setAngularVelocity(const size_t p_idx, const walberla::mesa_pd::Vec3& v);
const walberla::mesa_pd::Mat3& getInvInertiaBF(const size_t p_idx) const;
const walberla::mesa_pd::Mat3& getInertiaBF(const size_t p_idx) const;
const walberla::mesa_pd::Vec3& getTorque(const size_t p_idx) const;
void setTorque(const size_t p_idx, const walberla::mesa_pd::Vec3& v);
Precondition
All forces and torques acting on the particles have to be set.
Postcondition
All forces and torques are reset to 0.

This kernel requires the following particle accessor interface

const walberla::mesa_pd::Vec3& getPosition(const size_t p_idx) const;
void setPosition(const size_t p_idx, const walberla::mesa_pd::Vec3& v);
const walberla::mesa_pd::Vec3& getLinearVelocity(const size_t p_idx) const;
void setLinearVelocity(const size_t p_idx, const walberla::mesa_pd::Vec3& v);
const walberla::real_t& getInvMass(const size_t p_idx) const;
const walberla::mesa_pd::Vec3& getForce(const size_t p_idx) const;
void setForce(const size_t p_idx, const walberla::mesa_pd::Vec3& v);
const walberla::mesa_pd::data::particle_flags::FlagT& getFlags(const size_t p_idx) const;
const walberla::mesa_pd::Rot3& getRotation(const size_t p_idx) const;
void setRotation(const size_t p_idx, const walberla::mesa_pd::Rot3& v);
const walberla::mesa_pd::Vec3& getAngularVelocity(const size_t p_idx) const;
void setAngularVelocity(const size_t p_idx, const walberla::mesa_pd::Vec3& v);
const walberla::mesa_pd::Mat3& getInvInertiaBF(const size_t p_idx) const;
const walberla::mesa_pd::Vec3& getTorque(const size_t p_idx) const;
void setTorque(const size_t p_idx, const walberla::mesa_pd::Vec3& v);
Precondition
All forces and torques acting on the particles have to be set.
Postcondition
All forces and torques are reset to 0.

#include <ExplicitEulerWithShape.h>

Public Member Functions

 ExplicitEuler (const real_t dt)
 
template<typename Accessor >
void operator() (const size_t i, Accessor &ac) const
 
 ExplicitEuler (const real_t dt)
 
template<typename Accessor >
void operator() (const size_t i, Accessor &ac) const
 

Private Attributes

real_t dt_ = real_t(0.0)
 

Constructor & Destructor Documentation

◆ ExplicitEuler() [1/2]

walberla::mesa_pd::kernel::ExplicitEuler::ExplicitEuler ( const real_t  dt)
inlineexplicit

◆ ExplicitEuler() [2/2]

walberla::mesa_pd::kernel::ExplicitEuler::ExplicitEuler ( const real_t  dt)
inlineexplicit

Member Function Documentation

◆ operator()() [1/2]

template<typename Accessor >
void walberla::mesa_pd::kernel::ExplicitEuler::operator() ( const size_t  i,
Accessor &  ac 
) const

◆ operator()() [2/2]

template<typename Accessor >
void walberla::mesa_pd::kernel::ExplicitEuler::operator() ( const size_t  i,
Accessor &  ac 
) const
inline

Member Data Documentation

◆ dt_

real_t walberla::mesa_pd::kernel::ExplicitEuler::dt_ = real_t(0.0)
private

The documentation for this class was generated from the following files:
float real_t
Definition: DataTypes.h:167
Definition: Flags.h:33