MercuryDPM
Alpha
|
Basic class for walls. More...
#include <BaseWall.h>
Public Member Functions | |
BaseWall () | |
Default constructor. It makes an empty BaseWall. More... | |
BaseWall (const BaseWall &w) | |
Copy constructor. More... | |
virtual | ~BaseWall () |
Default destructor. More... | |
virtual BaseWall * | copy () const =0 |
Pure virtual function that copies a BaseWall. More... | |
void | read (std::istream &is) |
Function that reads a BaseWall from an input stream, usually a restart file. More... | |
void | write (std::ostream &os) const |
Function that writes a BaseWall to an output stream, usually a restart file. More... | |
virtual MERCURY_DEPRECATED void | clear () |
A function that removes all data from this BaseWall, so sets handler_ to nullptr. More... | |
virtual bool | getDistanceAndNormal (const BaseParticle &P, Mdouble &distance, Vec3D &normal_return) const =0 |
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... | |
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 |
virtual void | writeVTK (VTKContainer &vtk) const |
virtual std::vector < BaseInteraction * > | getInteractionWith (BaseParticle *p, Mdouble timeStamp, InteractionHandler *interactionHandler) |
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... | |
virtual void | move (const Vec3D &move) |
Moves this BaseInteractable by adding an amount to the position. 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 std::string | getName () const =0 |
A purely virtual function. 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... | |
Static Public Member Functions | |
static void | addToVTK (const std::vector< Vec3D > &points, VTKContainer &vtk) |
Public Attributes | |
WallHandler * | handler_ |
Basic class for walls.
Class from which all walls inherit. Please note the getVelocity can for some walls be dependent on which point on the wall is meant.
Definition at line 44 of file BaseWall.h.
BaseWall::BaseWall | ( | ) |
BaseWall::BaseWall | ( | const BaseWall & | w | ) |
Copy constructor.
[in] | w | Wall that must be copied. |
Definition at line 40 of file BaseWall.cc.
References DEBUG, handler_, and logger.
|
virtual |
Default destructor.
Definition at line 47 of file BaseWall.cc.
|
static |
Takes the points provided and adds a triangle strip connecting these points to the vtk container
Definition at line 289 of file BaseWall.cc.
References VTKContainer::points, and VTKContainer::triangleStrips.
Referenced by InfiniteWall::writeVTK().
|
virtual |
A function that removes all data from this BaseWall, so sets handler_ to nullptr.
Reimplemented in IntersectionOfWalls, InfiniteWallWithHole, and CylindricalWall.
Definition at line 52 of file BaseWall.cc.
|
pure virtual |
Pure virtual function that copies a BaseWall.
Implemented in TriangulatedWall, AxisymmetricIntersectionOfWalls, IntersectionOfWalls, InfiniteWall, SphericalWall, Coil, RestrictedWall, Screw, InfiniteWallWithHole, and CylindricalWall.
Referenced by RestrictedWall::set().
|
pure virtual |
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. |
Implemented in IntersectionOfWalls, InfiniteWall, TriangulatedWall, InfiniteWallWithHole, AxisymmetricIntersectionOfWalls, SphericalWall, RestrictedWall, Coil, CylindricalWall, and Screw.
Referenced by RestrictedWall::getDistanceAndNormal(), and getInteractionWith().
WallHandler * BaseWall::getHandler | ( | ) | const |
A function which returns the WallHandler that handles this BaseWall.
Definition at line 85 of file BaseWall.cc.
References handler_.
Referenced by InfiniteWall::createVTK(), IntersectionOfWalls::IntersectionOfWalls(), setHandler(), setIndSpecies(), setSpecies(), and AxisymmetricIntersectionOfWalls::writeVTK().
|
virtual |
[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. |
Implements BaseInteractable.
Reimplemented in TriangulatedWall, and RestrictedWall.
Definition at line 266 of file BaseWall.cc.
References getDistanceAndNormal(), InteractionHandler::getInteraction(), BaseInteraction::getNormal(), BaseInteraction::getOverlap(), BaseInteractable::getPosition(), BaseParticle::getRadius(), BaseInteraction::setContactPoint(), BaseInteraction::setDistance(), BaseInteraction::setNormal(), and BaseInteraction::setOverlap().
bool BaseWall::getLinePlaneIntersect | ( | Vec3D & | intersect, |
const Vec3D & | p0, | ||
const Vec3D & | p1, | ||
const Vec3D & | n, | ||
const Vec3D & | p | ||
) |
Definition at line 128 of file BaseWall.cc.
References Vec3D::dot().
void BaseWall::intersectVTK | ( | std::vector< Vec3D > & | points, |
const Vec3D | normal, | ||
const Vec3D | position | ||
) | const |
Intersects a of set VTK points representing a wall with a half-space defined by position and normal; This is used in createVTK to restrict the VTK points representing a wall to the inside of the domain.
Checks if a set of VTK points is inside a half-space defined by position and normal; all points outside the half-space are projected onto the half-space boundary. Thus, if the old set of points represented a wall object, the new set of points is represents the intersection of the wall with the half-space.
Definition at line 163 of file BaseWall.cc.
References DEBUG, isInsideWallVTK(), logger, and projectOntoWallVTK().
Referenced by InfiniteWall::createVTK(), AxisymmetricIntersectionOfWalls::writeVTK(), and IntersectionOfWalls::writeVTK().
bool BaseWall::isInsideWallVTK | ( | const Vec3D & | point, |
const Vec3D & | normal, | ||
const Vec3D & | position | ||
) | const |
Checks if point is in wall (if close to the wall, the point is assumed out of the wall)
Definition at line 144 of file BaseWall.cc.
References Vec3D::dot().
Referenced by intersectVTK().
void BaseWall::projectOntoWallVTK | ( | Vec3D & | point0, |
const Vec3D & | point1, | ||
const Vec3D & | normal, | ||
const Vec3D & | position | ||
) | const |
Moves point0 onto the surface of the wall such that the direction of the edge from point0 to point1 is preserved.
intersectVTK = point[i] + t*(point[i-1]-point[i]) and (intersectVTK - position) normal_=0. => (position-point[i]-t(point[i-1]-point[i]))*normal_=0 t=(position-point[i]))*normal_ / (point[i-1]-point[i]))*normal_
Definition at line 154 of file BaseWall.cc.
References Vec3D::dot().
Referenced by intersectVTK().
|
virtual |
Function that reads a BaseWall from an input stream, usually a restart file.
[in] | is | Input stream from which the BaseWall is read. |
Implements BaseInteractable.
Reimplemented in IntersectionOfWalls, TriangulatedWall, InfiniteWall, InfiniteWallWithHole, SphericalWall, Coil, RestrictedWall, Screw, and CylindricalWall.
Definition at line 60 of file BaseWall.cc.
References BaseInteractable::read().
Referenced by CylindricalWall::read(), Screw::read(), RestrictedWall::read(), Coil::read(), SphericalWall::read(), InfiniteWallWithHole::read(), InfiniteWall::read(), and IntersectionOfWalls::read().
|
virtual |
A function which sets the WallHandler for this BaseWall.
[in] | handler | A pointer to the BaseHandler that handles this wall. |
Reimplemented in IntersectionOfWalls.
Definition at line 76 of file BaseWall.cc.
References getHandler(), BaseInteractable::getIndSpecies(), BaseHandler< T >::getObject(), handler_, and setSpecies().
Referenced by WallHandler::addObject(), IntersectionOfWalls::setHandler(), and setSpecies().
|
virtual |
Define the species of this wall using the index of the species in the SpeciesHandler in this DPMBase.
[in] | indSpecies | The index of the species of this BaseWall in the SpeciesHandler. |
Reimplemented from BaseInteractable.
Definition at line 93 of file BaseWall.cc.
References ERROR, getHandler(), BaseObject::getId(), BaseInteractable::getIndSpecies(), BaseHandler< T >::getObject(), handler_, logger, BaseInteractable::setIndSpecies(), and setSpecies().
void BaseWall::setSpecies | ( | const ParticleSpecies * | species | ) |
Define the species of this wall.
[in] | species | The species this BaseWall is made of. |
In addition to the functionality of BaseInteractable::setSpecies, this function sets the pointer to the wallHandler, which is needed to retrieve species information.
Definition at line 113 of file BaseWall.cc.
References BaseHandler< T >::getDPMBase(), BaseSpecies::getHandler(), getHandler(), setHandler(), BaseInteractable::setSpecies(), and DPMBase::wallHandler.
Referenced by IntersectionOfWalls::addObject(), Chute::createBottom(), InfiniteWall::InfiniteWall(), helpers::loadingTest(), helpers::normalAndTangentialLoadingTest(), FileReader::read(), WallHandler::readObject(), WallHandler::readOldObject(), DPMBase::readParAndIniFiles(), RestrictedWall::set(), setHandler(), setIndSpecies(), IntersectionOfWalls::setSpecies(), ChuteBottom::setupInitialConditions(), Chute::setupSideWalls(), and TriangulatedWall::TriangulatedWall().
|
virtual |
Function that writes a BaseWall to an output stream, usually a restart file.
[in] | os | Output stream the BaseWall has to be written to. |
Implements BaseInteractable.
Reimplemented in IntersectionOfWalls, InfiniteWall, TriangulatedWall, InfiniteWallWithHole, SphericalWall, Coil, RestrictedWall, Screw, and CylindricalWall.
Definition at line 68 of file BaseWall.cc.
References BaseInteractable::write().
Referenced by CylindricalWall::write(), Screw::write(), RestrictedWall::write(), Coil::write(), SphericalWall::write(), InfiniteWallWithHole::write(), InfiniteWall::write(), and IntersectionOfWalls::write().
|
virtual |
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 in IntersectionOfWalls, InfiniteWall, AxisymmetricIntersectionOfWalls, RestrictedWall, and TriangulatedWall.
Definition at line 284 of file BaseWall.cc.
References BaseObject::getIndex(), BaseObject::getName(), logger, and WARN.
Referenced by RestrictedWall::writeVTK().
WallHandler* BaseWall::handler_ |
A pointer to the WallHandler that handles this BaseWall.
Definition at line 154 of file BaseWall.h.
Referenced by BaseWall(), getHandler(), setHandler(), and setIndSpecies().