|
A wall that is the inside (concave side) of an arc of a cylinder, like a pipe or half-pipe. More...
#include <ArcWall.h>
Public Member Functions | |
ArcWall () | |
Default constructor. More... | |
ArcWall (const ArcWall &aw) | |
Copy constructor. More... | |
~ArcWall () override=default | |
Default destructor. More... | |
void | set (Vec3D axis, Vec3D pos, Mdouble radius, Vec3D centreline, Mdouble semiangle) |
Set parameters of the ArcWall. More... | |
ArcWall * | copy () const override |
Pure virtual function that can be overwritten in inherited classes in order to copy a BaseWall. More... | |
bool | getDistanceAndNormal (const BaseParticle &p, Mdouble &distance, Vec3D &normal) const override |
Pure virtual function that computes the distance of a BaseParticle to this wall and returns the normal of this wall if there is a collision. More... | |
BaseInteraction * | getInteractionWith (BaseParticle *p, unsigned timeStamp, InteractionHandler *interactionHandler) override |
Returns the interaction between this object and a given BaseParticle. More... | |
void | read (std::istream &is) override |
Reads a BaseInteractable from an input stream. More... | |
void | write (std::ostream &os) const override |
Write a BaseInteractable to an output stream. More... | |
std::string | getName () const override |
A purely virtual function. More... | |
Public Member Functions inherited from BaseWall | |
BaseWall () | |
Default constructor. More... | |
BaseWall (const BaseWall &w) | |
Copy constructor. More... | |
~BaseWall () override | |
Default destructor. More... | |
void | read (std::istream &is) override |
Function that reads a BaseWall from an input stream, usually a restart file. More... | |
void | write (std::ostream &os) const override |
Function that writes a BaseWall to an output stream, usually a restart file. More... | |
virtual bool | getDistanceNormalOverlap (const BaseParticle &P, Mdouble &distance, Vec3D &normal_return, Mdouble &overlap) const |
virtual bool | getDistanceNormalOverlapSuperquadric (const SuperQuadricParticle &p, Mdouble &distance, Vec3D &normal_return, Mdouble &overlap) const |
virtual Vec3D | getFurthestPointSuperQuadric (const Vec3D &normalBodyFixed, const Vec3D &axes, Mdouble eps1, Mdouble eps2) const |
virtual void | setHandler (WallHandler *handler) |
A function which sets the WallHandler for this BaseWall. More... | |
WallHandler * | getHandler () const |
A function which returns the WallHandler that handles this BaseWall. More... | |
void | setIndSpecies (unsigned int indSpecies) override |
Define the species of this wall using the index of the species in the SpeciesHandler in this DPMBase. More... | |
void | setSpecies (const ParticleSpecies *species) |
Defines the species of the current wall. More... | |
bool | isFixed () const override |
void | setForceControl (Vec3D forceGoal, Vec3D gainFactor, Vec3D baseVelocity={0, 0, 0}) |
Slowly adjusts the force on a wall towards a specified goal, by adjusting (prescribing) the velocity of the wall. More... | |
virtual bool | isLocal (Vec3D &min, Vec3D &max) const |
bool | getLinePlaneIntersect (Vec3D &intersect, const Vec3D &p0, const Vec3D &p1, const Vec3D &n, const Vec3D &p) |
bool | isInsideWallVTK (const Vec3D &point, const Vec3D &normal, const Vec3D &position) const |
void | projectOntoWallVTK (Vec3D &point0, const Vec3D &point1, const Vec3D &normal, const Vec3D &position) const |
void | intersectVTK (std::vector< Vec3D > &points, Vec3D normal, Vec3D position) const |
virtual BaseInteraction * | getInteractionWithSuperQuad (SuperQuadricParticle *p, unsigned timeStamp, InteractionHandler *interactionHandler) |
virtual void | writeVTK (VTKContainer &vtk) const |
void | getVTK (std::vector< Vec3D > &points, std::vector< std::vector< double >> &triangleStrips) |
const Vec3D | getAxis () const |
BaseInteraction * | getInteractionWith (BaseParticle *p, unsigned timeStamp, InteractionHandler *interactionHandler) override |
Returns the interaction between this wall and a given particle, nullptr if there is no interaction. More... | |
virtual void | actionsOnRestart () |
No implementation but can be overidden in its derived classes. More... | |
virtual void | actionsAfterParticleGhostUpdate () |
No implementation but can be overidden in its derived classes. More... | |
virtual void | handleParticleAddition (unsigned int id, BaseParticle *p) |
Handles the addition of particles to the particleHandler. More... | |
virtual void | handleParticleRemoval (unsigned int id) |
Handles the addition of particles to the particleHandler. More... | |
virtual void | checkInteractions (InteractionHandler *interactionHandler, unsigned int timeStamp) |
Check if all interactions are valid. More... | |
bool | getVTKVisibility () const |
void | setVTKVisibility (bool vtkVisibility) |
void | addRenderedWall (BaseWall *w) |
BaseWall * | getRenderedWall (size_t i) const |
std::vector< BaseWall * > | getRenderedWalls () const |
void | removeRenderedWalls () |
void | renderWall (VTKContainer &vtk) |
void | addParticlesAtWall (unsigned numElements=50) |
void | setVelocityControl (Vec3D forceGoal, Vec3D gainFactor, Vec3D baseVelocity) |
virtual void | writeWallDetailsVTK (VTKData &data) const |
virtual void | computeWear () |
Public Member Functions inherited from BaseInteractable | |
BaseInteractable () | |
Default BaseInteractable constructor. More... | |
BaseInteractable (const BaseInteractable &p) | |
Copy constructor. More... | |
~BaseInteractable () override | |
Destructor, it simply destructs the BaseInteractable and all the objects it contains. More... | |
unsigned int | getIndSpecies () const |
Returns the index of the species associated with the interactable object. More... | |
const ParticleSpecies * | getSpecies () const |
Returns a pointer to the species of this BaseInteractable. More... | |
void | setSpecies (const ParticleSpecies *species) |
Sets the species of this BaseInteractable. More... | |
const Vec3D & | getForce () const |
Returns the force on this BaseInteractable. More... | |
const Vec3D & | getTorque () const |
Returns the torque on this BaseInteractable. More... | |
void | setForce (const Vec3D &force) |
Sets the force on this BaseInteractable. More... | |
void | setTorque (const Vec3D &torque) |
Sets the torque on this BaseInteractable. More... | |
void | addForce (const Vec3D &addForce) |
Adds an amount to the force on this BaseInteractable. More... | |
void | addTorque (const Vec3D &addTorque) |
Adds an amount to the torque on this BaseInteractable. More... | |
virtual void | resetForceTorque (int numberOfOMPthreads) |
void | sumForceTorqueOMP () |
const Vec3D & | getPosition () const |
Returns the position of this BaseInteractable. More... | |
const Quaternion & | getOrientation () const |
Returns the orientation of this BaseInteractable. More... | |
virtual void | setPosition (const Vec3D &position) |
Sets the position of this BaseInteractable. More... | |
void | setOrientationViaNormal (Vec3D normal) |
Sets the orientation of this BaseInteractable by defining the vector that results from the rotation of the (1,0,0) vector. More... | |
void | setOrientationViaEuler (Vec3D eulerAngle) |
Sets the orientation of this BaseInteractable by defining the euler angles. More... | |
virtual void | setOrientation (const Quaternion &orientation) |
Sets the orientation of this BaseInteractable. More... | |
virtual void | move (const Vec3D &move) |
Moves this BaseInteractable by adding an amount to the position. More... | |
virtual void | rotate (const Vec3D &angularVelocityDt) |
Rotates this BaseInteractable. More... | |
const std::vector< BaseInteraction * > & | getInteractions () const |
Returns a list of interactions which belong to this interactable. More... | |
void | addInteraction (BaseInteraction *I) |
Adds an interaction to this BaseInteractable. More... | |
bool | removeInteraction (BaseInteraction *I) |
Removes an interaction from this BaseInteractable. More... | |
void | copyInteractionsForPeriodicParticles (const BaseInteractable &p) |
Copies interactions to this BaseInteractable whenever a periodic copy made. More... | |
void | setVelocity (const Vec3D &velocity) |
set the velocity of the BaseInteractable. More... | |
void | setAngularVelocity (const Vec3D &angularVelocity) |
set the angular velocity of the BaseInteractble. More... | |
void | addVelocity (const Vec3D &velocity) |
adds an increment to the velocity. More... | |
void | addAngularVelocity (const Vec3D &angularVelocity) |
add an increment to the angular velocity. More... | |
virtual const Vec3D & | getVelocity () const |
Returns the velocity of this interactable. More... | |
virtual const Vec3D & | getAngularVelocity () const |
Returns the angular velocity of this interactable. More... | |
void | setPrescribedPosition (const std::function< Vec3D(double)> &prescribedPosition) |
Allows the position of an infinite mass interactable to be prescribed. More... | |
void | applyPrescribedPosition (double time) |
Computes the position from the user defined prescribed position function. More... | |
void | setPrescribedVelocity (const std::function< Vec3D(double)> &prescribedVelocity) |
Allows the velocity of an infinite mass interactable to be prescribed. More... | |
void | applyPrescribedVelocity (double time) |
Computes the velocity from the user defined prescribed velocity function. More... | |
void | setPrescribedOrientation (const std::function< Quaternion(double)> &prescribedOrientation) |
Allows the orientation of the infinite mass interactbale to be prescribed. More... | |
void | applyPrescribedOrientation (double time) |
Computes the orientation from the user defined prescribed orientation function. More... | |
void | setPrescribedAngularVelocity (const std::function< Vec3D(double)> &prescribedAngularVelocity) |
Allows the angular velocity of the infinite mass interactable to be prescribed. More... | |
void | applyPrescribedAngularVelocity (double time) |
Computes the angular velocity from the user defined prescribed angular velocity. More... | |
virtual const Vec3D | getVelocityAtContact (const Vec3D &contact) const |
Returns the velocity at the contact point, use by many force laws. More... | |
void | integrateBeforeForceComputation (double time, double timeStep) |
This is part of integrate routine for objects with infinite mass. More... | |
void | integrateAfterForceComputation (double time, double timeStep) |
This is part of the integration routine for objects with infinite mass. More... | |
virtual Mdouble | getInvMass () const |
virtual Mdouble | getCurvature (const Vec3D &labFixedCoordinates) const |
virtual bool | isFaceContact (const Vec3D &normal) const |
Public Member Functions inherited from BaseObject | |
BaseObject ()=default | |
Default constructor. More... | |
BaseObject (const BaseObject &p)=default | |
Copy constructor, copies all the objects BaseObject contains. More... | |
virtual | ~BaseObject ()=default |
virtual destructor More... | |
virtual void | moveInHandler (unsigned int index) |
Except that it is virtual, it does the same thing as setIndex() does. More... | |
void | setIndex (unsigned int index) |
Allows one to assign an index to an object in the handler/container. More... | |
void | setId (unsigned long id) |
Assigns a unique identifier to each object in the handler (container) which remains constant even after the object is deleted from the container/handler. More... | |
unsigned int | getIndex () const |
Returns the index of the object in the handler. More... | |
unsigned int | getId () const |
Returns the unique identifier of any particular object. More... | |
void | setGroupId (unsigned groupId) |
unsigned | getGroupId () const |
Private Attributes | |
Vec3D | axis_ |
Vec3D | pos_ |
Mdouble | radius_ |
Vec3D | centreline_ |
Mdouble | semiangle_ |
Additional Inherited Members | |
Static Public Member Functions inherited from BaseWall | |
static void | addToVTK (const std::vector< Vec3D > &points, VTKContainer &vtk) |
Takes the points provided and adds a triangle strip connecting these points to the vtk container. More... | |
A wall that is the inside (concave side) of an arc of a cylinder, like a pipe or half-pipe.
The ArcWall is specified by the cylinder's axis (in turn by a position vector and a direction vector), its radius, a 'centreline direction' (pointing from a point on the axis to a point on the middle of the arc), and the semiangle of the arc.
The semiangle is stored and specified in radians.
For a wall that is the outside of an arc, use AxisymmetricIntersectionOfWalls or Combtooth instead.
ArcWall::ArcWall | ( | ) |
Default constructor.
References axis_, centreline_, constants::degree, pos_, radius_, and semiangle_.
Referenced by copy().
ArcWall::ArcWall | ( | const ArcWall & | aw | ) |
|
overridedefault |
Default destructor.
|
overridevirtual |
|
overridevirtual |
Pure virtual function that computes the distance of a BaseParticle to this wall and returns the normal of this wall if there is a collision.
Beware, the distance and normal are output parameters, not return values!
[in] | P | Reference to the BaseParticle we want to compute the distance to the BaseWall of. |
[out] | distance | Distance of the BaseParticle to the BaseWall. |
[out] | normal_return | The normal of the wall. Is only given if there is a collision. |
Implements BaseWall.
References axis_, centreline_, constants::degree, Vec3D::dot(), BaseInteractable::getPosition(), BaseParticle::getWallInteractionRadius(), Vec3D::normalise(), pos_, radius_, and semiangle_.
Referenced by getInteractionWith().
|
overridevirtual |
Returns the interaction between this object and a given BaseParticle.
TW make sure this function sets normal, distance, overlap, contact point
AT why is this a BaseParticle and not a BaseInteratable.
Implements BaseInteractable.
References getDistanceAndNormal(), InteractionHandler::getInteraction(), BaseInteraction::getNormal(), BaseInteraction::getOverlap(), BaseInteractable::getPosition(), BaseParticle::getRadius(), BaseInteraction::setContactPoint(), BaseInteraction::setDistance(), BaseInteraction::setNormal(), and BaseInteraction::setOverlap().
|
overridevirtual |
|
overridevirtual |
Reads a BaseInteractable from an input stream.
BaseInteacatable read functions. Reads in all the information about an interacatable. Note, this can be from any istream but would normally be a file See also BaseInteractable::write
[in] | is | std::istream to which the information is read from. |
Reimplemented from BaseInteractable.
References axis_, centreline_, pos_, radius_, BaseWall::read(), and semiangle_.
Set parameters of the ArcWall.
\detail The axis vector is normalized. The centreline vector is also treated to remove any component parallel to the axis, and the remaining component is normalized.
axis | The lengthwise direction of the cylinder. For a 2D simulation this should be Vec3D(0, 0, 1). |
pos | A position along the axis. |
radius | The radius of the arc. |
centreline | A vector pointing from the axis to the middle of the arc. |
semiangle | The extent of the arc from either side of the centre, in radians. For a half-pipe this is pi/2 (90 degrees). |
References axis_, centreline_, Vec3D::dot(), Vec3D::normalise(), pos_, radius_, and semiangle_.
|
overridevirtual |
Write a BaseInteractable to an output stream.
[in] | os | The output stream to which the BaseInteractable is written. |
BaseInteractable write function. Writes out all the information required to recreate this interactable. To write this interactable to the screen call write(std::cout). See also BaseInteractable::read
[in] | os | std::ostream to which the information is written. Note, is any ostream is can be file or screen. |
Reimplemented from BaseInteractable.
References axis_, centreline_, pos_, radius_, semiangle_, and BaseWall::write().
|
private |
Referenced by ArcWall(), getDistanceAndNormal(), read(), set(), and write().
|
private |
Referenced by ArcWall(), getDistanceAndNormal(), read(), set(), and write().
|
private |
Referenced by ArcWall(), getDistanceAndNormal(), read(), set(), and write().
|
private |
Referenced by ArcWall(), getDistanceAndNormal(), read(), set(), and write().
|
private |
Referenced by ArcWall(), getDistanceAndNormal(), read(), set(), and write().