waLBerla 7.3
Loading...
Searching...
No Matches

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);
math::Vector3< real_t > Vec3
Definition DataTypes.h:40
math::Matrix3< real_t > Mat3
Definition DataTypes.h:36
math::Rot3< real_t > Rot3
Definition DataTypes.h:38
float real_t
Definition DataTypes.h:197
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_ = 0.0_r

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
inline

◆ operator()() [2/2]

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

Member Data Documentation

◆ dt_

real_t walberla::mesa_pd::kernel::ExplicitEuler::dt_ = 0.0_r
private

The documentation for this class was generated from the following files: