MercuryDPM
Beta
|
A IntersectionOfWalls is convex polygon defined as an intersection of InfiniteWall's. More...
#include <IntersectionOfWalls.h>
Public Member Functions | |
IntersectionOfWalls () | |
Default constructor. More... | |
IntersectionOfWalls (const IntersectionOfWalls &other) | |
Copy constructor. More... | |
virtual | ~IntersectionOfWalls () |
Destructor. More... | |
IntersectionOfWalls & | operator= (const IntersectionOfWalls &other) |
IntersectionOfWalls * | copy () const override |
Wall copy method. It calls the copy constructor of this Wall, useful for polymorphism. More... | |
MERCURY_DEPRECATED void | clear () |
Removes all parts of the walls. More... | |
void | addObject (Vec3D normal, Vec3D point) |
Adds a wall to the set of infinite walls, given an outward normal vector s.t. normal*x=normal*point. More... | |
MERCURY_DEPRECATED void | addObject (Vec3D normal, Mdouble position) |
Adds a wall to the set of finite walls, given an outward normal vector s. t. normal*x=position. More... | |
void | createOpenPrism (std::vector< Vec3D > points, Vec3D prismAxis) |
Creates an open prism which is a polygon between the points, except the first and last point, and extends infinitely in the PrismAxis direction. More... | |
void | createPrism (std::vector< Vec3D > points, Vec3D prismAxis) |
Creates an open prism which is a polygon between the points and extends infinitely in the PrismAxis direction. More... | |
void | createOpenPrism (std::vector< Vec3D > points) |
Creates an open prism which is a polygon between the points, except the first and last point, and extends infinitely in the direction perpendicular to the first and second wall. More... | |
void | createPrism (std::vector< Vec3D > points) |
Creates an open prism which is a polygon between the points and extends infinitely in the direction perpendicular to the first and second wall. 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... | |
bool | getDistanceAndNormal (const Vec3D &postition, Mdouble wallInteractionRadius, Mdouble &distance, Vec3D &normal_return) const |
Compute the distance from the wall for a given BaseParticle and return if there is an interaction. If there is an interaction, also return the normal vector. More... | |
void | move (const Vec3D &move) |
Move the IntersectionOfWalls to a new position, which is a Vec3D from the old position. More... | |
void | read (std::istream &is) |
Reads an IntersectionOfWalls from an input stream, for example a restart file. More... | |
void | write (std::ostream &os) const |
Writes an IntersectionOfWalls to an output stream, for example a restart file. More... | |
std::string | getName () const override |
Returns the name of the object, here the string "IntersectionOfWalls". More... | |
BaseInteraction * | getInteractionWith (BaseParticle *p, Mdouble timeStamp, InteractionHandler *interactionHandler) |
Get the interaction between this IntersectionOfWalls 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... | |
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... | |
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 (Vec3D force) |
Sets the force on this BaseInteractable. More... | |
void | setTorque (Vec3D torque) |
Sets the torque on this BaseInteractable. More... | |
void | addForce (Vec3D addForce) |
Adds an amount to the force on this BaseInteractable. More... | |
void | addTorque (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 (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 (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 (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 (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< InfiniteWall > | wallObjects_ |
The wall "segments"/directions that together make up the finite wall. More... | |
std::vector< Vec3D > | A_ |
A vector that stores a point for each intersecting line between two different InfiniteWall. More... | |
std::vector< Vec3D > | AB_ |
A vector that stores the direction of the intersecting lines between two different InfiniteWall. More... | |
std::vector< Vec3D > | C_ |
A vector that stores the intersection point of three different InfiniteWall. More... | |
A IntersectionOfWalls is convex polygon defined as an intersection of InfiniteWall's.
A IntersectionOfWalls can be defined as the intersection of a set of InfiniteWalls, defined by the normal vector into the wall and a point on the wall. For an example see Tutorial T8. A particle touches a finite wall if position_i-normal_i*x<=radius for all InfiniteWall's i.
Definition at line 44 of file IntersectionOfWalls.h.
IntersectionOfWalls::IntersectionOfWalls | ( | ) |
Default constructor.
Definition at line 30 of file IntersectionOfWalls.cc.
Referenced by copy().
IntersectionOfWalls::IntersectionOfWalls | ( | const IntersectionOfWalls & | other | ) |
Copy constructor.
[in] | other | The IntersectionOfWalls that must be copied. |
Definition at line 38 of file IntersectionOfWalls.cc.
References A_, AB_, C_, DEBUG, logger, and wallObjects_.
|
virtual |
Destructor.
Definition at line 48 of file IntersectionOfWalls.cc.
Adds a wall to the set of infinite walls, given an outward normal vector s.t. normal*x=normal*point.
[in] | normal | The normal to this wallObject. |
[in] | point | One of the points of the wallObject. |
Adds a wall to the set of finite walls, given an outward unit normal vector s.t. normal*x=normal*point for all x of the wallObject. First make the InfiniteWall, then compute all intersections, which are then stored in A_, AB_ and C_.
Definition at line 90 of file IntersectionOfWalls.cc.
References A_, AB_, C_, Vec3D::cross(), Vec3D::dot(), BaseInteractable::getPosition(), logger, Vec3D::normalize(), VERBOSE, wallObjects_, X, Y, and Z.
Referenced by ChuteWithHopper::addHopper(), addObject(), createOpenPrism(), createPrism(), read(), and WallHandler::readOldObject().
Adds a wall to the set of finite walls, given an outward normal vector s. t. normal*x=position.
[in] | normal | The normal to the wallObject. |
[in] | position | The position of the wallObject in the direction of the normal vector. |
Definition at line 163 of file IntersectionOfWalls.cc.
References addObject(), logger, and WARN.
|
virtual |
Removes all parts of the walls.
Reimplemented from BaseWall.
Definition at line 74 of file IntersectionOfWalls.cc.
References A_, AB_, C_, and wallObjects_.
Referenced by createOpenPrism().
|
overridevirtual |
Wall copy method. It calls the copy constructor of this Wall, useful for polymorphism.
Implements BaseWall.
Definition at line 69 of file IntersectionOfWalls.cc.
References IntersectionOfWalls().
Referenced by operator=().
Creates an open prism which is a polygon between the points, except the first and last point, and extends infinitely in the PrismAxis direction.
[in] | points | A vector of 3D-vectors which contains the points between which the polygon is drawn. |
[in] | prismAxis | A 3D-vector which represents the direction in which the prism is extended infinitely. |
Create an open prism which is a polygon with no connection between the first and last point, and extending infinitely in the other direction, which is defined as PrismAxis. Do this by adding the walls between the consecutive points one by one.
Definition at line 177 of file IntersectionOfWalls.cc.
References addObject(), clear(), and Vec3D::cross().
Referenced by createOpenPrism(), and createPrism().
void IntersectionOfWalls::createOpenPrism | ( | std::vector< Vec3D > | points | ) |
Creates an open prism which is a polygon between the points, except the first and last point, and extends infinitely in the direction perpendicular to the first and second wall.
[in] | points | A vector of 3D-vectors which contains the points between which the polygon is drawn. |
Create an open prism which is a polygon with no connection between the first and last point, and extending infinitely in the direction perpendicular to the first and second wall. Do this by first computing in which direction the wall must be extended infinitely, then call createOpenPrism(points, prismAxis).
Definition at line 205 of file IntersectionOfWalls.cc.
References createOpenPrism(), Vec3D::cross(), and Vec3D::getUnitVector().
Creates an open prism which is a polygon between the points and extends infinitely in the PrismAxis direction.
[in] | points | A vector of 3D-vectors which contains the points between which the polygon is drawn. |
[in] | prismAxis | A 3D-vector which represents the direction in which the prism is extended infinitely. |
Create an open prism which is a polygon and extending infinitely in the other direction, which is defined as PrismAxis. Do this by first creating an open prism and then connect the last and the first point.
Definition at line 192 of file IntersectionOfWalls.cc.
References addObject(), createOpenPrism(), and Vec3D::cross().
Referenced by createPrism().
void IntersectionOfWalls::createPrism | ( | std::vector< Vec3D > | points | ) |
Creates an open prism which is a polygon between the points and extends infinitely in the direction perpendicular to the first and second wall.
[in] | points | A vector of 3D-vectors which contains the points between which the polygon is drawn. |
Create an open prism which is a polygon, and extending infinitely in the direction perpendicular to the first and second wall. Do this by first computing in which direction the wall must be extended infinitely, then call createOpenPrism(points, prismAxis).
Definition at line 220 of file IntersectionOfWalls.cc.
References createPrism(), Vec3D::cross(), and Vec3D::getUnitVector().
|
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 IntersectionOfWalls. If there is a collision, this function also computes the distance between the BaseParticle and IntersectionOfWalls and the normal of the IntersectionOfWalls at the intersection point. It does this by calling IntersectionOfWalls::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.
Implements BaseWall.
Definition at line 242 of file IntersectionOfWalls.cc.
References BaseParticle::getInteractionRadius(), and BaseInteractable::getPosition().
Referenced by AxisymmetricIntersectionOfWalls::getDistanceAndNormal(), and getInteractionWith().
bool IntersectionOfWalls::getDistanceAndNormal | ( | const Vec3D & | position, |
Mdouble | wallInteractionRadius, | ||
Mdouble & | distance, | ||
Vec3D & | normal_return | ||
) | const |
Compute the distance from the wall for a given BaseParticle and return if there is an interaction. If there is an interaction, also return the normal vector.
[in] | position | The position of the object there is possible an interaction with. |
[in] | wallInteractionRadius | The maximum distance between the IntersectionOfWalls and the input argument position for which there is an interaction. |
[out] | distance | The distance of the object at position to this wall. |
[out] | normal_return | If there was an interaction, the normal vector to this wall will be placed here. |
This function computes whether or not there is an interaction between an object at the given distance and this IntersectionOfWalls. If there is an interaction, this function also computes the distance between the BaseParticle and IntersectionOfWalls and the normal of the IntersectionOfWalls at the intersection point. First check if the distance between the object at position and the IntersectionOfWalls is smaller or greater than the wallInteractionRadius. If there is no interaction, return false, the output parameters then have no meaning. If there is an interaction, find out which (one or more) of the InfiniteWall there is an interaction with. Then compute the distance between the particle and InfiniteWall and the normal to the interaction point. 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.
Definition at line 269 of file IntersectionOfWalls.cc.
References A_, AB_, C_, Vec3D::dot(), Vec3D::getLengthSquared(), and wallObjects_.
|
virtual |
Get the interaction between this IntersectionOfWalls 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. |
Implements BaseInteractable.
Definition at line 454 of file IntersectionOfWalls.cc.
References getDistanceAndNormal(), InteractionHandler::getInteraction(), BaseInteraction::getNormal(), BaseInteraction::getOverlap(), BaseInteractable::getPosition(), BaseParticle::getRadius(), BaseInteraction::setContactPoint(), BaseInteraction::setDistance(), BaseInteraction::setNormal(), and BaseInteraction::setOverlap().
|
overridevirtual |
Returns the name of the object, here the string "IntersectionOfWalls".
Implements BaseObject.
Definition at line 442 of file IntersectionOfWalls.cc.
|
virtual |
Move the IntersectionOfWalls 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 InterSectionOfWalls 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 IntersectionOfWalls as a whole.
Reimplemented from BaseInteractable.
Definition at line 389 of file IntersectionOfWalls.cc.
References A_, C_, BaseInteractable::move(), and wallObjects_.
IntersectionOfWalls & IntersectionOfWalls::operator= | ( | const IntersectionOfWalls & | other | ) |
Copy assignment operator.
[in] | other | The IntersectionOfWalls that must be copied. |
Definition at line 56 of file IntersectionOfWalls.cc.
References copy(), DEBUG, and logger.
|
virtual |
Reads an IntersectionOfWalls from an input stream, for example a restart file.
[in] | is | The input stream from which the IntersectionOfWalls is read, usually a restart file. |
Reimplemented from BaseWall.
Definition at line 409 of file IntersectionOfWalls.cc.
References addObject(), and BaseWall::read().
Referenced by AxisymmetricIntersectionOfWalls::read().
|
virtual |
Writes an IntersectionOfWalls to an output stream, for example a restart file.
[in] | os | The output stream where the IntersectionOfWalls must be written to, usually a restart file. |
Reimplemented from BaseWall.
Definition at line 429 of file IntersectionOfWalls.cc.
References wallObjects_, and BaseWall::write().
Referenced by AxisymmetricIntersectionOfWalls::write().
|
private |
A vector that stores a point for each intersecting line between two different InfiniteWall.
A[n*(n-1)/2+m] is a point on the intersecting line between walls m and n, m<n.
Definition at line 160 of file IntersectionOfWalls.h.
Referenced by addObject(), clear(), getDistanceAndNormal(), IntersectionOfWalls(), and move().
|
private |
A vector that stores the direction of the intersecting lines between two different InfiniteWall.
AB[n*(n-1)/2+m] is the direction of the intersecting line between walls m and n, m<n.
Definition at line 167 of file IntersectionOfWalls.h.
Referenced by addObject(), clear(), getDistanceAndNormal(), and IntersectionOfWalls().
|
private |
A vector that stores the intersection point of three different InfiniteWall.
C[(n-2)*(n-1)*n/6+(m-1)*m/2+l] is a point intersecting walls l, m and n, l<m<n
Definition at line 174 of file IntersectionOfWalls.h.
Referenced by addObject(), clear(), getDistanceAndNormal(), IntersectionOfWalls(), and move().
|
private |
The wall "segments"/directions that together make up the finite wall.
An intersection of walls exists of a number of infinite walls that are cut of at the intersection points. These InfiniteWall are saved in this vector called iWObjects_.
Definition at line 153 of file IntersectionOfWalls.h.
Referenced by addObject(), clear(), getDistanceAndNormal(), IntersectionOfWalls(), move(), and write().