walberla::pe::Capsule Class Reference

Detailed Description

Capsule geometry.

The Capsule class represents the geometric primitive capsule, which is one of the basic geometric primitives of the pe physics module. The class is derived from the GeomPrimitive base class, which makes the capsule both a geometric primitive and a rigid body.
A capsule is the combination of a cylinder and two hemisphere caps at both ends of the cylinder. This combination allows to calculate a unique normal on each point of the capsule's surface. In order to setup a capsule, the two values radius and length are required: radius specifies the radius of both the cylinder part and the two hemispheres, length is the length of the cylinder part. A capsule is created axis-aligned with the x-axis (the length of the cylinder part is parallel to the x-axis).

#include <Capsule.h>

+ Inheritance diagram for walberla::pe::Capsule:

Public Member Functions

Constructors
 Capsule (id_t sid, id_t uid, const Vec3 &gpos, const Quat &q, real_t radius, real_t length, MaterialID material, const bool global, const bool communicating, const bool infiniteMass)
 Constructor for the CapsuleBase class. More...
 
Destructor
 ~Capsule () override
 Destructor for the CapsuleBase class. More...
 
Get functions
real_t getRadius () const
 Returns the radius of the capsule. More...
 
real_t getLength () const
 Returns the length of the cylinder part. More...
 
real_t getVolume () const override
 Returns the volume of the capsule. More...
 
- Public Member Functions inherited from walberla::pe::GeomPrimitive
MaterialID getMaterial () const
 Returns the material of the geometric primitive. More...
 
- Public Member Functions inherited from walberla::pe::RigidBody
virtual ~RigidBody ()=0
 Destructor for the RigidBody class. More...
 
void wake ()
 Waking the rigid body and ending the sleep mode. More...
 
void calcMotion ()
 Calculating the current motion of a rigid body. More...
 
bool hasManager () const
 Returns whether the rigid body currently has a supervising rigid body manager. More...
 
ManagerID getManager ()
 Returns the supervising rigid body manager of the rigid body. More...
 
ConstManagerID getManager () const
 
bool hasSuperBody () const
 Returns whether the rigid body is contained in a superordinate body. More...
 
BodyID getSuperBody ()
 Returns the superordinate body in which the rigid body is contained. More...
 
ConstBodyID getSuperBody () const
 
BodyID getTopSuperBody ()
 Returns the top level superordinate body in which the rigid body is contained. More...
 
ConstBodyID getTopSuperBody () const
 
virtual bool hasSubBodies () const
 
bool isFinite () const
 Returns whether the rigid body is finite or not. More...
 
bool isAwake () const
 Returns whether the rigid body is awake or not. More...
 
bool isFixed () const
 Returns whether the rigid body's position is fixed or not. More...
 
bool hasInfiniteMass () const
 Checks if a body is "mobile" e.g. More...
 
bool isVisible () const
 Returns whether the rigid body is visible or not. More...
 
bool isMarkedForDeletion () const
 
id_t getSystemID () const
 Returns the unique system-specific ID of the rigid body. More...
 
id_t getID () const
 Returns the user-specific ID of the rigid body. More...
 
const Vec3 getRelPosition () const
 Returns the relative position of the rigid body within the superordinate body. More...
 
const Vec3 getPosition () const
 Returns the global position of the center of mass of the rigid body. More...
 
const Vec3 getBodyLinearVel () const
 Returns the relative linear velocity of the rigid body. More...
 
const Vec3 getLinearVel () const
 Returns the global linear velocity of the rigid body. More...
 
const Vec3 getBodyAngularVel () const
 Returns the relative angular velocity. More...
 
const Vec3getAngularVel () const
 Returns the global angular velocity. More...
 
const Quat getRelQuaternion () const
 Returns the relative orientation of the rigid body to its superbody. More...
 
const Quat getQuaternion () const
 Returns the orientation of the rigid body. More...
 
const Mat3 getRotation () const
 Returns the rotation of the rigid body. More...
 
real_t getMass () const
 Returns the total mass of the rigid body. More...
 
real_t getInvMass () const
 Returns the inverse total mass of the rigid body. More...
 
const Mat3getBodyInertia () const
 Returns the moment of inertia in reference to the body frame of the rigid body. More...
 
const Mat3 getInertia () const
 Returns the moment of inertia in reference to the global world frame. More...
 
const Mat3getInvBodyInertia () const
 Returns the inverse moment of inertia in reference to the body frame of the rigid body. More...
 
const Mat3 getInvInertia () const
 Returns the inverse moment of inertia in reference to the global world frame. More...
 
const AABB & getAABB () const
 Returns the axis-aligned bounding box of the rigid body. More...
 
real_t getAABBSize () const
 Returns the length of the longest side of the AABB of the rigid body. More...
 
real_t getKineticEnergy () const
 Returns the kinetic energy of the rigid body. More...
 
real_t getRotationalEnergy () const
 Returns the rotational energy of the rigid body. More...
 
real_t getEnergy () const
 Returns the energy of the rigid body. More...
 
const Vec3 vectorFromBFtoWF (real_t vx, real_t vy, real_t vz) const
 Transformation from a relative to a global vector. More...
 
const Vec3 vectorFromBFtoWF (const Vec3 &v) const
 Transformation from a relative to a global vector. More...
 
const Vec3 pointFromBFtoWF (real_t px, real_t py, real_t pz) const
 Transformation from a relative to a global coordinate. More...
 
const Vec3 pointFromBFtoWF (const Vec3 &rpos) const
 Transformation from a relative to a global coordinate. More...
 
virtual Vec3 velFromBF (real_t px, real_t py, real_t pz) const
 Calculation of the global velocity of a relative point. More...
 
virtual Vec3 velFromBF (const Vec3 &rpos) const
 Calculation of the global velocity of a relative point. More...
 
const Vec3 vectorFromWFtoBF (real_t vx, real_t vy, real_t vz) const
 Transformation from a global to a relative vector. More...
 
const Vec3 vectorFromWFtoBF (const Vec3 &v) const
 Transformation from a global to a relative vector. More...
 
const Vec3 pointFromWFtoBF (real_t px, real_t py, real_t pz) const
 Transformation from a global to a relative coordinate. More...
 
const Vec3 pointFromWFtoBF (const Vec3 &gpos) const
 Transformation from a global to a relative coordinate. More...
 
virtual Vec3 velFromWF (real_t px, real_t py, real_t pz) const
 Calculation of the global velocity of a point in global coordinates. More...
 
virtual Vec3 velFromWF (const Vec3 &gpos) const
 Calculation of the global velocity of a point in global coordinates. More...
 
const Vec3 accFromWF (real_t px, real_t py, real_t pz) const
 Calculation of the global acceleration of a point in global coordinates. More...
 
const Vec3 accFromWF (const Vec3 &gpos) const
 Calculation of the global acceleration of a point in global coordinates. More...
 
id_t getTypeID () const
 
void translate (real_t dx, real_t dy, real_t dz)
 Translation of the center of mass of the rigid body by the displacement vector. More...
 
void translate (const Vec3 &dp)
 Translation of the center of mass of the rigid body by the displacement vector dp. More...
 
void rotate (real_t x, real_t y, real_t z, real_t angle)
 Rotation of the rigid body around the global rotation axis (x,y,z) by the rotation angle angle. More...
 
void rotate (const Vec3 &axis, real_t angle)
 Rotation of the rigid body around the specified global rotation axis by the rotation. More...
 
void rotate (real_t xangle, real_t yangle, real_t zangle)
 Rotation of the rigid body by the Euler angles xangle, yangle and zangle. More...
 
void rotate (const Vec3 &euler)
 Rotation of the rigid body by the Euler angles euler. More...
 
void rotate (const Quat &dq)
 Rotation of the rigid body by the quaternion dq. More...
 
void rotateAroundOrigin (real_t x, real_t y, real_t z, real_t angle)
 Rotation of the rigid body around the origin of the global world frame. More...
 
void rotateAroundOrigin (const Vec3 &axis, real_t angle)
 Rotation of the rigid body around the origin of the global world frame. More...
 
void rotateAroundOrigin (real_t xangle, real_t yangle, real_t zangle)
 Rotation of the rigid body around the origin of the global world frame. More...
 
void rotateAroundOrigin (const Vec3 &euler)
 Rotation of the rigid body around the origin of the global world frame. More...
 
void rotateAroundOrigin (const Quat &dq)
 Rotation of the rigid body around the origin of the global world frame. More...
 
void rotateAroundPoint (const Vec3 &point, const Vec3 &axis, real_t angle)
 Rotation of the rigid body around a specific global coordinate. More...
 
void rotateAroundPoint (const Vec3 &point, const Vec3 &euler)
 Rotation of the rigid body around a specific global coordinate. More...
 
bool containsRelPoint (real_t px, real_t py, real_t pz) const
 Checks, whether a point in body relative coordinates lies inside the rigid body. More...
 
bool containsRelPoint (const Vec3 &rpos) const
 Checks, whether a point in body relative coordinates lies inside the rigid body. More...
 
bool containsPoint (real_t px, real_t py, real_t pz) const
 Checks, whether a point in global coordinates lies inside the rigid body. More...
 
bool containsPoint (const Vec3 &gpos) const
 Checks, whether a point in global coordinates lies inside the rigid body. More...
 
bool isSurfaceRelPoint (real_t px, real_t py, real_t pz) const
 Checks, whether a point in relative coordinates lies on the surface of the rigid body. More...
 
bool isSurfaceRelPoint (const Vec3 &rpos) const
 Checks, whether a point in body relative coordinates lies on the surface of the rigid body. More...
 
bool isSurfacePoint (real_t px, real_t py, real_t pz) const
 Checks, whether a point in global coordinates lies on the surface of the rigid body. More...
 
bool isSurfacePoint (const Vec3 &gpos) const
 Checks, whether a point in global coordinates lies on the surface of the rigid body. More...
 
virtual Vec3 supportContactThreshold (const Vec3 &d) const
 Estimates the point which is farthest in direction d. More...
 
bool hasForce () const
 Returns whether the rigid body has non-zero acting forces or torques. More...
 
const Vec3getForce () const
 Returns the current force acting on the body's center of mass. More...
 
const Vec3getTorque () const
 Returns the current torque acting on the body's center of mass. More...
 
void setForce (const Vec3 &f)
 Set the force acting at the body's center of mass. More...
 
void setTorque (const Vec3 &tau)
 Set the torque acting at the body's center of mass. More...
 
void addRelForce (real_t fx, real_t fy, real_t fz)
 Increases the total force acting in the body's center of mass. More...
 
void addRelForce (const Vec3 &f)
 Increases the force acting in the body's center of mass. More...
 
void addForce (real_t fx, real_t fy, real_t fz)
 Increases the force acting in the body's center of mass. More...
 
void addForce (const Vec3 &f)
 Increases the force acting in the body's center of mass. More...
 
void addRelForceAtRelPos (real_t fx, real_t fy, real_t fz, real_t px, real_t py, real_t pz)
 Increases the force acting in the body's center of mass. More...
 
void addRelForceAtRelPos (const Vec3 &f, const Vec3 &rpos)
 Increases the force acting in the body's center of mass. More...
 
void addRelForceAtPos (real_t fx, real_t fy, real_t fz, real_t px, real_t py, real_t pz)
 Increases the force acting in the body's center of mass. More...
 
void addRelForceAtPos (const Vec3 &f, const Vec3 &gpos)
 Increases the force acting in the body's center of mass. More...
 
void addForceAtRelPos (real_t fx, real_t fy, real_t fz, real_t px, real_t py, real_t pz)
 Increases the force acting in the body's center of mass. More...
 
void addForceAtRelPos (const Vec3 &f, const Vec3 &rpos)
 Increases the force acting in the body's center of mass. More...
 
void addForceAtPos (real_t fx, real_t fy, real_t fz, real_t px, real_t py, real_t pz)
 Increases the force acting in the body's center of mass. More...
 
void addForceAtPos (const Vec3 &f, const Vec3 &gpos)
 Increases the force acting in the body's center of mass. More...
 
void addTorque (real_t tx, real_t ty, real_t tz)
 Increasing the torque acting in the body's center of mass. More...
 
void addTorque (const Vec3 &t)
 Increasing the torque acting in the body's center of mass. More...
 
virtual void resetForceAndTorque ()
 Resetting all acting forces and torques from the rigid body. More...
 
void addImpulse (real_t jx, real_t jy, real_t jz)
 Applying an impulse in the body's center of mass. More...
 
void addImpulse (const Vec3 &j)
 Applying an impulse in the body's center of mass. More...
 
void addImpulseAtPos (real_t jx, real_t jy, real_t jz, real_t px, real_t py, real_t pz)
 Applying an impulse at the given global coordinate. More...
 
void addImpulseAtPos (const Vec3 &j, const Vec3 &p)
 Applying an impulse at the given global coordinate. More...
 
bool isRemote () const
 Returns whether the rigid body is remote or not. More...
 
virtual void setRemote (bool remote)
 Setting the remote flag of the rigid body. More...
 
bool isGlobal () const
 Returns whether the rigid body is global or not. More...
 
void setGlobal (const bool global)
 Setting the global flag of the rigid body. More...
 
bool isCommunicating () const
 Returns whether the rigid body is local or not. More...
 
void setCommunicating (const bool communicating)
 Setting the local flag of the rigid body. More...
 
virtual bool checkInvariants ()
 Checks the validity of the state of the rigid body. More...
 
void setSB (BodyID body)
 Sets the super body for the current body. More...
 
void resetSB ()
 Resets the super body for the current body. More...
 
void setFinite (const bool finite)
 
void setVisible (bool visible)
 Setting the rigid body visible/invisible. More...
 
void setPosition (real_t px, real_t py, real_t pz)
 Setting the global position of the rigid body. More...
 
void setPosition (const Vec3 &gpos)
 Setting the global position of the rigid body. More...
 
void setRelPosition (const Vec3 &gpos)
 Setting the global position of the rigid body. More...
 
void setOrientation (real_t r, real_t i, real_t j, real_t k)
 Setting the global orientation of the rigid body. More...
 
void setOrientation (const Quat &q)
 Setting the global orientation of the rigid body. More...
 
void setRelOrientation (const Quat &q)
 Setting the relative position of the rigid body. More...
 
void setMassAndInertiaToInfinity ()
 Setting the mass to infinity. This will also make the inertia tensor infinite. More...
 
void setRelLinearVel (real_t vx, real_t vy, real_t vz)
 Setting the relative linear velocity of the rigid body. More...
 
void setRelLinearVel (const Vec3 &lvel)
 
void setLinearVel (real_t vx, real_t vy, real_t vz)
 Setting the global linear velocity of the rigid body. More...
 
void setLinearVel (const Vec3 &lvel)
 /see setLinearVel( real_t vx, real_t vy, real_t vz ) More...
 
void setRelAngularVel (real_t ax, real_t ay, real_t az)
 Setting the relative angular velocity of the rigid body. More...
 
void setRelAngularVel (const Vec3 &avel)
 /see setRelAngularVel( real_t ax, real_t ay, real_t az ) More...
 
void setAngularVel (real_t ax, real_t ay, real_t az)
 Setting the global angular velocity of the rigid body. More...
 
void setAngularVel (const Vec3 &avel)
 /see setAngularVel( real_t ax, real_t ay, real_t az ) More...
 
void markForDeletion ()
 Marks the rigid body for deletion during the next synchronization. More...
 
- Public Member Functions inherited from walberla::pe::ccd::HashGridsBodyTrait
void * getGrid () const
 Returns the grid the rigid body is currently assigned to. More...
 
size_t getHash () const
 Returns the current hash value of the rigid body. More...
 
size_t getCellId () const
 Returns the current body container index within the cell the body is currently assigned to. More...
 
void setGrid (void *grid)
 Setting the grid the rigid body is associated with. More...
 
void setHash (size_t hash)
 Setting the hash value of the rigid body. More...
 
void setCellId (size_t cell)
 Setting the body container index within the cell the body is currently assigned to. More...
 

Static Public Member Functions

Volume, mass and density functions
static real_t calcVolume (real_t radius, real_t length)
 Calculates the volume of a capsule for a given radius and length. More...
 
static real_t calcMass (real_t radius, real_t length, real_t density)
 Calculates the mass of a capsule for a given radius, length and density. More...
 
static real_t calcDensity (real_t radius, real_t length, real_t mass)
 Calculates the density of a capsule for a given radius, length and mass. More...
 
static Mat3 calcInertia (const real_t radius, const real_t length, const real_t density)
 Calculation of the moment of inertia in reference to the body frame of the capsule. More...
 

Utility functions

Vec3 support (const Vec3 &d) const override
 Estimates the point which is farthest in direction d. More...
 
real_t getRelDepth (real_t px, real_t py, real_t pz) const
 Calculates the depth of a point relative to the capsule's frame of reference. More...
 
real_t getRelDepth (const Vec3 &rpos) const
 Calculates the depth of a point relative to the capsule's frame of reference. More...
 
real_t getDepth (real_t px, real_t py, real_t pz) const
 Calculates the depth of a point in global coordinates. More...
 
real_t getDepth (const Vec3 &gpos) const
 Calculates the depth of a point in global coordinates. More...
 
real_t getRelDistance (real_t px, real_t py, real_t pz) const
 Calculates the distance of a point relative to the capsule's frame of reference. More...
 
real_t getRelDistance (const Vec3 &rpos) const
 Calculates the distance of a point relative to the capsule's frame of reference. More...
 
real_t getDistance (real_t px, real_t py, real_t pz) const
 Calculates the distance of a point in global coordinates. More...
 
real_t getDistance (const Vec3 &gpos) const
 Calculates the distance of a point in global coordinates. More...
 
static id_t getStaticTypeID ()
 Returns unique type id of this type. More...
 
void calcBoundingBox () override
 Calculation of the bounding box of the capsule. More...
 

Output functions

void print (std::ostream &os, const char *tab) const override
 Output of the current state of a capsule. More...
 
bool containsRelPointImpl (real_t px, real_t py, real_t pz) const override
 Checks, whether a point in body relative coordinates lies inside the capsule. More...
 
bool isSurfaceRelPointImpl (real_t px, real_t py, real_t pz) const override
 Checks, whether a point in body relative coordinates lies on the surface of the capsule. More...
 

Member variables

real_t radius_
 The radius of the cylinder part and the caps on both ends of the cylinder. More...
 
real_t length_
 The length of the cylinder part. More...
 
static id_t staticTypeID_ = std::numeric_limits<id_t>::max()
 
template<class T , int N>
struct SetBodyTypeIDs
 needed to be able to set static type ids with setStaticTypeID More...
 
static void setStaticTypeID (id_t typeID)
 

Additional Inherited Members

- Public Attributes inherited from walberla::pe::RigidBody
MPIRigidBodyTrait MPITrait
 
- Public Attributes inherited from walberla::pe::cr::HCSITSBodyTrait
size_t index_
 
- Protected Member Functions inherited from walberla::pe::GeomPrimitive
 GeomPrimitive (id_t const typeID, id_t sid, id_t uid, MaterialID material)
 Constructor for the GeomPrimitive class. More...
 
 ~GeomPrimitive () override=0
 Destructor for the Primitive class. More...
 
- Protected Member Functions inherited from walberla::pe::RigidBody
virtual void fix ()
 Setting the global position (the center of mass) of the rigid body fixed. More...
 
void signalModification ()
 Signals an internal modification of a contained subordinate body. More...
 
void signalTranslation ()
 Signals a position change of a contained subordinate body. More...
 
void signalRotation ()
 Signals an orientation change of a contained subordinate body. More...
 
void signalFixation ()
 Signals a fixation change of a contained subordinate body. More...
 
virtual void handleModification ()
 Handling an internal modification of a contained subordinate body. More...
 
virtual void handleTranslation ()
 Handling a position change of a contained subordinate body. More...
 
virtual void handleRotation ()
 Handling an orientation change of a contained subordinate body. More...
 
virtual void handleFixation ()
 Handling a fixation change of a contained subordinate body. More...
 
 RigidBody (id_t const typeID, id_t sid, id_t uid)
 Constructor for the RigidBody class. More...
 
virtual void setPositionImpl (real_t px, real_t py, real_t pz)
 
virtual void setOrientationImpl (real_t r, real_t i, real_t j, real_t k)
 Setting the global orientation of the rigid body. More...
 
virtual void translateImpl (real_t dx, real_t dy, real_t dz)
 Translation of the center of mass of the rigid body by the displacement vector. More...
 
virtual void rotateImpl (const Quat &dq)
 Implements the rotation of a rigid body. More...
 
virtual void rotateAroundOriginImpl (const Quat &dq)
 Implements the rotation of a rigid body. More...
 
virtual void rotateAroundPointImpl (const Vec3 &point, const Quat &dq)
 Rotation of the rigid body around a specific global coordinate. More...
 
void setMassAndInertia (const real_t mass, const Mat3 &inertia)
 Sets mass and inertia of a rigid body. More...
 
- Protected Member Functions inherited from walberla::pe::ccd::HashGridsBodyTrait
 HashGridsBodyTrait ()
 Constructor for the BodyTrait<HashGrids> specialization. More...
 
- Protected Attributes inherited from walberla::pe::GeomPrimitive
MaterialID material_
 The material of the geometric primitive. More...
 
- Protected Attributes inherited from walberla::pe::RigidBody
bool awake_
 Sleep mode flag. More...
 
real_t mass_
 The total mass of the rigid body. More...
 
real_t invMass_
 The inverse total mass of the rigid body. More...
 
real_t motion_
 The current motion of the rigid body. More...
 
Vec3 v_
 The linear velocity of this rigid body. More...
 
Vec3 w_
 Angular velocity of this rigid body. More...
 
Vec3 force_
 Total force (external+contact) acting in the body's center of mass. More...
 
Vec3 torque_
 Total torque (external+contact) acting in the body's center of mass. More...
 
Mat3 I_
 The moment of inertia in reference to the body's own body frame. More...
 
Mat3 Iinv_
 The inverse moment of inertia within the body frame. More...
 
ManagerID manager_
 The rigid body manager responsible for the rigid body. More...
 
BodyID sb_
 The superordinate rigid body. More...
 
bool finite_
 Finiteness flag. More...
 
bool visible_
 Visibility flag. More...
 
bool remote_
 Remote flag. More...
 
bool communicating_
 Communicating flag. More...
 
bool global_
 Global flag. More...
 
bool toBeDeleted_
 This flag marks the body for deletion during the next synchronization (only works on local bodies) More...
 
id_t sid_
 The unique system-specific body ID. More...
 
id_t uid_
 The user-specific body ID. More...
 
AABB aabb_
 Axis-aligned bounding box for the rigid body. More...
 
- Protected Attributes inherited from walberla::pe::ccd::HashGridsBodyTrait
void * grid_
 Pointer to the hash grid this rigid body is currently assigned to. More...
 
size_t hash_
 Current hash value of this rigid body. More...
 
size_t cellId_
 The body's index in the body container of the grid cell this rigid body is currently assigned to. More...
 

Constructor & Destructor Documentation

◆ Capsule()

walberla::pe::Capsule::Capsule ( id_t  sid,
id_t  uid,
const Vec3 gpos,
const Quat q,
real_t  radius,
real_t  length,
MaterialID  material,
const bool  global,
const bool  communicating,
const bool  infiniteMass 
)
explicit

Constructor for the CapsuleBase class.

Parameters
sidUnique system-specific ID for the capsule.
uidUser-specific ID for the capsule.
gposGlobal geometric center of the capsule.
qThe orientation of the capsule's body frame in the global world frame.
radiusThe radius of the cylinder part and the end caps \( (0..\infty) \).
lengthThe length of the cylinder part \( (0..\infty) \).
materialThe material of the capsule.
globalspecifies if the capsule should be created in the global storage
communicatingspecifies if the capsule should take part in synchronization (syncNextNeighbour, syncShadowOwner)
infiniteMassspecifies if the capsule has infinite mass and will be treated as an obstacle

The capsule is created lying along the x-axis.

◆ ~Capsule()

walberla::pe::Capsule::~Capsule ( )
override

Destructor for the CapsuleBase class.

Member Function Documentation

◆ calcBoundingBox()

void walberla::pe::Capsule::calcBoundingBox ( )
overrideprotectedvirtual

Calculation of the bounding box of the capsule.

Returns
void

This function updates the axis-aligned bounding box of the capsule primitive according to the current position and orientation of the capsule. Note that the bounding box is increased in all dimensions by pe::contactThreshold to guarantee that rigid bodies in close proximity of the capsule are also considered during the collision detection process.

Implements walberla::pe::RigidBody.

◆ calcDensity()

real_t walberla::pe::Capsule::calcDensity ( real_t  radius,
real_t  length,
real_t  mass 
)
inlinestatic

Calculates the density of a capsule for a given radius, length and mass.

Parameters
radiusThe radius of the cylinder part and the caps on both ends of the cylinder.
lengthThe length of the cylinder part.
massThe total mass of the capsule.
Returns
The density of the capsule.

◆ calcInertia()

Mat3 walberla::pe::Capsule::calcInertia ( const real_t  radius,
const real_t  length,
const real_t  density 
)
static

Calculation of the moment of inertia in reference to the body frame of the capsule.

Returns
void

◆ calcMass()

real_t walberla::pe::Capsule::calcMass ( real_t  radius,
real_t  length,
real_t  density 
)
inlinestatic

Calculates the mass of a capsule for a given radius, length and density.

Parameters
radiusThe radius of the cylinder part and the caps on both ends of the cylinder.
lengthThe length of the cylinder part.
densityThe density of the capsule.
Returns
The total mass of the capsule.

◆ calcVolume()

real_t walberla::pe::Capsule::calcVolume ( real_t  radius,
real_t  length 
)
inlinestatic

Calculates the volume of a capsule for a given radius and length.

Parameters
radiusThe radius of the cylinder part and the caps on both ends of the cylinder.
lengthThe length of the cylinder part.
Returns
The volume of the capsule.

◆ containsRelPointImpl()

bool walberla::pe::Capsule::containsRelPointImpl ( real_t  px,
real_t  py,
real_t  pz 
) const
overrideprotectedvirtual

Checks, whether a point in body relative coordinates lies inside the capsule.

Parameters
pxThe x-component of the relative coordinate.
pyThe y-component of the relative coordinate.
pzThe z-component of the relative coordinate.
Returns
true if the point lies inside the capsule, false if not.

Reimplemented from walberla::pe::RigidBody.

◆ getDepth() [1/2]

real_t walberla::pe::Capsule::getDepth ( const Vec3 gpos) const
inline

Calculates the depth of a point in global coordinates.

Parameters
gposThe global coordinate.
Returns
Depth of the global point.

Returns a positive value, if the point lies inside the capsule and a negative value, if the point lies outside the capsule.

◆ getDepth() [2/2]

real_t walberla::pe::Capsule::getDepth ( real_t  px,
real_t  py,
real_t  pz 
) const
inline

Calculates the depth of a point in global coordinates.

Parameters
pxThe x-component of the global coordinate.
pyThe y-component of the global coordinate.
pzThe z-component of the global coordinate.
Returns
Depth of the global point.

Returns a positive value, if the point lies inside the capsule and a negative value, if the point lies outside the capsule.

◆ getDistance() [1/2]

real_t walberla::pe::Capsule::getDistance ( const Vec3 gpos) const
inline

Calculates the distance of a point in global coordinates.

Parameters
gposThe global coordinate.
Returns
Distance of the global point.

Returns a positive value, if the point lies outside the capsule and a negative value, if the point lies inside the capsule.

◆ getDistance() [2/2]

real_t walberla::pe::Capsule::getDistance ( real_t  px,
real_t  py,
real_t  pz 
) const
inline

Calculates the distance of a point in global coordinates.

Parameters
pxThe x-component of the global coordinate.
pyThe y-component of the global coordinate.
pzThe z-component of the global coordinate.
Returns
Distance of the global point.

Returns a positive value, if the point lies outside the capsule and a negative value, if the point lies inside the capsule.

◆ getLength()

real_t walberla::pe::Capsule::getLength ( ) const
inline

Returns the length of the cylinder part.

Returns
The length of the cylinder part.

◆ getRadius()

real_t walberla::pe::Capsule::getRadius ( ) const
inline

Returns the radius of the capsule.

Returns
The radius of the capsule.

◆ getRelDepth() [1/2]

real_t walberla::pe::Capsule::getRelDepth ( const Vec3 rpos) const
inline

Calculates the depth of a point relative to the capsule's frame of reference.

Parameters
rposThe relative coordinate.
Returns
Depth of the relative point.

Returns a positive value, if the point lies inside the capsule and a negative value, if the point lies outside the capsule.

◆ getRelDepth() [2/2]

real_t walberla::pe::Capsule::getRelDepth ( real_t  px,
real_t  py,
real_t  pz 
) const
inline

Calculates the depth of a point relative to the capsule's frame of reference.

Parameters
pxThe x-component of the relative coordinate.
pyThe y-component of the relative coordinate.
pzThe z-component of the relative coordinate.
Returns
Depth of the relative point.

Returns a positive value, if the point lies inside the capsule and a negative value, if the point lies outside the capsule.

◆ getRelDistance() [1/2]

real_t walberla::pe::Capsule::getRelDistance ( const Vec3 rpos) const
inline

Calculates the distance of a point relative to the capsule's frame of reference.

Parameters
rposThe relative coordinate.
Returns
Distance of the relative point.

Returns a positive value, if the point lies outside the capsule and a negative value, if the point lies inside the capsule.

◆ getRelDistance() [2/2]

real_t walberla::pe::Capsule::getRelDistance ( real_t  px,
real_t  py,
real_t  pz 
) const
inline

Calculates the distance of a point relative to the capsule's frame of reference.

Parameters
pxThe x-component of the relative coordinate.
pyThe y-component of the relative coordinate.
pzThe z-component of the relative coordinate.
Returns
Distance of the relative point.

Returns a positive value, if the point lies outside the capsule and a negative value, if the point lies inside the capsule.

◆ getStaticTypeID()

id_t walberla::pe::Capsule::getStaticTypeID ( )
inlinestatic

Returns unique type id of this type.

Returns
geometry specific type id

◆ getVolume()

real_t walberla::pe::Capsule::getVolume ( ) const
inlineoverridevirtual

Returns the volume of the capsule.

Returns
The volume of the capsule.

Reimplemented from walberla::pe::RigidBody.

◆ isSurfaceRelPointImpl()

bool walberla::pe::Capsule::isSurfaceRelPointImpl ( real_t  px,
real_t  py,
real_t  pz 
) const
overrideprotectedvirtual

Checks, whether a point in body relative coordinates lies on the surface of the capsule.

Parameters
pxThe x-component of the relative coordinate.
pyThe y-component of the relative coordinate.
pzThe z-component of the relative coordinate.
Returns
true if the point lies on the surface of the capsule, false if not.

The tolerance level of the check is pe::surfaceThreshold.

Reimplemented from walberla::pe::RigidBody.

◆ print()

void walberla::pe::Capsule::print ( std::ostream &  os,
const char *  tab 
) const
overridevirtual

Output of the current state of a capsule.

Parameters
osReference to the output stream.
tabIndentation in front of every line of the capsule output.
Returns
void

Implements walberla::pe::RigidBody.

◆ setStaticTypeID()

static void walberla::pe::Capsule::setStaticTypeID ( id_t  typeID)
inlinestaticprivate

◆ support()

Vec3 walberla::pe::Capsule::support ( const Vec3 d) const
inlineoverridevirtual

Estimates the point which is farthest in direction d.

Parameters
dThe normalized search direction in world-frame coordinates.
Returns
The support point in world-frame coordinates in direction d.

Reimplemented from walberla::pe::RigidBody.

Friends And Related Function Documentation

◆ SetBodyTypeIDs

template<class T , int N>
friend struct SetBodyTypeIDs
friend

needed to be able to set static type ids with setStaticTypeID

Member Data Documentation

◆ length_

real_t walberla::pe::Capsule::length_
protected

The length of the cylinder part.

◆ radius_

real_t walberla::pe::Capsule::radius_
protected

The radius of the cylinder part and the caps on both ends of the cylinder.

◆ staticTypeID_

id_t walberla::pe::Capsule::staticTypeID_ = std::numeric_limits<id_t>::max()
staticprivate

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