MercuryDPM
Alpha
|
A TriangulatedWall is a triangulation created from a set of vertices and a n-by-3 connectivity matrix defining n faces. More...
#include <TriangulatedWall.h>
Classes | |
struct | Face |
Struct used to store the properties of a face needed for contact detection. More... | |
Public Member Functions | |
TriangulatedWall () | |
Default constructor. More... | |
TriangulatedWall (const TriangulatedWall &other) | |
Copy constructor. More... | |
TriangulatedWall (std::string filename, const ParticleSpecies *species) | |
Constructor setting values. More... | |
void | readVTK (std::string filename) |
void | writeVTK (VTKContainer &vtk) const override |
virtual | ~TriangulatedWall () |
Destructor. More... | |
TriangulatedWall & | operator= (const TriangulatedWall &other) |
TriangulatedWall * | copy () const override |
Wall copy method. It calls the copy constructor of this Wall, useful for polymorphism. More... | |
bool | getDistanceAndNormal (const BaseParticle &p, Mdouble &distance, Vec3D &normal_return) const override |
Compute the distance from the wall for a given BaseParticle and return if there is a collision. If there is a collision, also return the normal vector. More... | |
void | move (const Vec3D &move) override |
Move the TriangulatedWall to a new position, which is a Vec3D from the old position. More... | |
void | read (std::istream &is) override |
Reads an TriangulatedWall from an input stream, for example a restart file. More... | |
void | write (std::ostream &os) const override |
Writes an TriangulatedWall to an output stream, for example a restart file. More... | |
std::string | getName () const override |
Returns the name of the object, here the string "TriangulatedWall". More... | |
std::vector< BaseInteraction * > | getInteractionWith (BaseParticle *p, Mdouble timeStamp, InteractionHandler *interactionHandler) override |
Get the interaction between this TriangulatedWall and given BaseParticle at a given time. More... | |
Public Member Functions inherited from BaseWall | |
BaseWall () | |
Default constructor. It makes an empty BaseWall. More... | |
BaseWall (const BaseWall &w) | |
Copy constructor. More... | |
virtual | ~BaseWall () |
Default destructor. More... | |
virtual MERCURY_DEPRECATED void | clear () |
A function that removes all data from this BaseWall, so sets handler_ to nullptr. More... | |
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) |
Define the species of this wall using the index of the species in the SpeciesHandler in this DPMBase. More... | |
void | setSpecies (const ParticleSpecies *species) |
Define the species of this wall. More... | |
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, const Vec3D normal, const Vec3D position) const |
Public Member Functions inherited from BaseInteractable | |
BaseInteractable () | |
Default BaseInteractable constructor, it simply creates an empty BaseInteractable. More... | |
BaseInteractable (const BaseInteractable &p) | |
Copy constructor. It copies the BaseInteractable and all objects it contains. More... | |
virtual | ~BaseInteractable () |
Destructor, it simply destructs the BaseInteractable and all the objects it contains. More... | |
unsigned int | getIndSpecies () const |
Returns the index of the Species of this BaseInteractable. 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... | |
const Vec3D & | getPosition () const |
Returns the position of this BaseInteractable. More... | |
const Vec3D & | getOrientation () const |
Returns the orientation of this BaseInteractable. More... | |
void | setPosition (const Vec3D &position) |
Sets the position of this BaseInteractable. More... | |
void | setOrientation (const Vec3D &orientation) |
Sets the orientation of this BaseInteractable. More... | |
void | rotate (const Vec3D &rotate) |
Rotates this BaseInteractable. More... | |
const std::list < BaseInteraction * > & | getInteractions () const |
Returns a reference to the list of interactions in this BaseInteractable. 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< Vec3D(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... | |
Public Member Functions inherited from BaseObject | |
BaseObject () | |
Default constructor. More... | |
BaseObject (const BaseObject &p) | |
Copy constructor, copies all the objects BaseObject contains. More... | |
virtual | ~BaseObject () |
virtual destructor More... | |
virtual void | moveInHandler (const unsigned int index) |
Except that it is virtual, it does the same thing as setIndex() does. More... | |
void | setIndex (const unsigned int index) |
Allows one to assign an index to an object in the handler/container. More... | |
void | setId (const unsigned int 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... | |
Private Attributes | |
std::vector< Vec3D > | vertex_ |
std::vector< Face > | face_ |
Additional Inherited Members | |
Static Public Member Functions inherited from BaseWall | |
static void | addToVTK (const std::vector< Vec3D > &points, VTKContainer &vtk) |
Public Attributes inherited from BaseWall | |
WallHandler * | handler_ |
A TriangulatedWall is a triangulation created from a set of vertices and a n-by-3 connectivity matrix defining n faces.
It is initialised by a unstructured grid vtk file:
The file consists of a set of vertices and a n-by-3 connectivity matrix defining n faces. Three vertices form a face; the face normal is oriented such that the vertices are ordered in anticlockwise direction around the normal.
Particles interact with a TriangulatedWall when they contact a face (from either side), a edge, or a vertex.
For a demonstration on how to use this class, see TriangulatedWallSelfTest (shown in the image below).
Definition at line 51 of file TriangulatedWall.h.
TriangulatedWall::TriangulatedWall | ( | ) |
Default constructor.
Definition at line 33 of file TriangulatedWall.cc.
Referenced by copy().
TriangulatedWall::TriangulatedWall | ( | const TriangulatedWall & | other | ) |
Copy constructor.
[in] | other | The TriangulatedWall that must be copied. |
Definition at line 41 of file TriangulatedWall.cc.
References DEBUG, face_, logger, and vertex_.
TriangulatedWall::TriangulatedWall | ( | std::string | filename, |
const ParticleSpecies * | species | ||
) |
Constructor setting values.
Definition at line 60 of file TriangulatedWall.cc.
References readVTK(), and BaseWall::setSpecies().
|
virtual |
Destructor.
Definition at line 167 of file TriangulatedWall.cc.
|
overridevirtual |
Wall copy method. It calls the copy constructor of this Wall, useful for polymorphism.
Implements BaseWall.
Definition at line 188 of file TriangulatedWall.cc.
References TriangulatedWall().
Referenced by operator=().
|
overridevirtual |
Compute the distance from the wall for a given BaseParticle and return if there is a collision. If there is a collision, also return the normal vector.
[in] | p | BaseParticle we want to calculate the distance and whether it collided of. |
[out] | distance | The distance of the BaseParticle to this wall. |
[out] | normal_return | If there was a collision, the normal vector to this wall will be placed here. |
This function computes whether or not there is a collision between a given BaseParticle and this TriangulatedWall. If there is a collision, this function also computes the distance between the BaseParticle and TriangulatedWall and the normal of the TriangulatedWall at the intersection point. It does this by calling TriangulatedWall::getDistanceAndNormal(const Vec3D& , Mdouble , Mdouble&, Vec3D&) const. Since this function should be called before calculating any Particle-Wall interactions, it can also be used to set the normal vector in case of curved walls.
NOTE: THIS ONLY RETURNS ONE OF POSSIBLY MANY INTERACTIONS; it's only used for finding out if interactions exist, so should be fine
Implements BaseWall.
Definition at line 209 of file TriangulatedWall.cc.
References face_.
|
overridevirtual |
Get the interaction between this TriangulatedWall and given BaseParticle at a given time.
[in] | p | Pointer to the BaseParticle which we want to check the interaction for. |
[in] | timeStamp | The time at which we want to look at the interaction. |
[in] | interactionHandler | A pointer to the InteractionHandler in which the interaction can be found. |
Reimplemented from BaseWall.
Definition at line 292 of file TriangulatedWall.cc.
References face_, InteractionHandler::getInteraction(), BaseInteractable::getPosition(), BaseParticle::getRadius(), BaseInteraction::setContactPoint(), BaseInteraction::setDistance(), BaseInteraction::setNormal(), and BaseInteraction::setOverlap().
|
overridevirtual |
Returns the name of the object, here the string "TriangulatedWall".
Implements BaseObject.
Definition at line 280 of file TriangulatedWall.cc.
|
overridevirtual |
Move the TriangulatedWall to a new position, which is a Vec3D from the old position.
[in] | move | A reference to a Vec3D that denotes the direction and length it should be moved with. |
A function that moves the TriangulatedWall in a certain direction by both moving the walls and all intersections. Note that the directions of the intersections are not moved since they don't change when moving the TriangulatedWall as a whole.
Reimplemented from BaseInteractable.
Definition at line 231 of file TriangulatedWall.cc.
References BaseInteractable::move(), and vertex_.
TriangulatedWall & TriangulatedWall::operator= | ( | const TriangulatedWall & | other | ) |
Copy assignment operator.
[in] | other | The TriangulatedWall that must be copied. |
Definition at line 175 of file TriangulatedWall.cc.
References copy(), DEBUG, and logger.
|
overridevirtual |
Reads an TriangulatedWall from an input stream, for example a restart file.
[in] | is | The input stream from which the TriangulatedWall is read, usually a restart file. |
Reimplemented from BaseWall.
Definition at line 243 of file TriangulatedWall.cc.
void TriangulatedWall::readVTK | ( | std::string | filename | ) |
[in] | filename | name of vtk input file, e.g. TriangulatedWallSelfTest.vtk |
Definition at line 69 of file TriangulatedWall.cc.
References Vec3D::cross(), face_, Vec3D::getUnitVector(), logger, TriangulatedWall::Face::vertex, vertex_, Vec3D::X, Vec3D::Y, and Vec3D::Z.
Referenced by TriangulatedWall().
|
overridevirtual |
Writes an TriangulatedWall to an output stream, for example a restart file.
[in] | os | The output stream where the TriangulatedWall must be written to, usually a restart file. |
Reimplemented from BaseWall.
Definition at line 252 of file TriangulatedWall.cc.
References face_, and vertex_.
|
overridevirtual |
adds extra information to the points and triangleStrips vectors needed to plot the wall in vtk format
points | Coordinates of the vertices of the triangulated surfaces (in the VTK file this is called POINTS) |
triangleStrips | Indices of three vertices forming one triangulated surface (in the VTK file this is called CELL) |
Reimplemented from BaseWall.
Definition at line 405 of file TriangulatedWall.cc.
References face_, VTKContainer::points, VTKContainer::triangleStrips, and vertex_.
|
private |
stores the face properties
Definition at line 149 of file TriangulatedWall.h.
Referenced by getDistanceAndNormal(), getInteractionWith(), readVTK(), TriangulatedWall(), write(), and writeVTK().
|
private |
stores the vertex coordinates
Definition at line 144 of file TriangulatedWall.h.
Referenced by move(), readVTK(), TriangulatedWall(), write(), and writeVTK().