MercuryDPM
Alpha
|
A AxisymmetricIntersectionOfWalls is an axisymmetric wall, defined by rotating a twodimensional IntersectionOfWalls around a symmetry axis. More...
#include <AxisymmetricIntersectionOfWalls.h>
Public Member Functions | |
AxisymmetricIntersectionOfWalls () | |
Default constructor. More... | |
AxisymmetricIntersectionOfWalls (const AxisymmetricIntersectionOfWalls &p) | |
Copy constructor. More... | |
AxisymmetricIntersectionOfWalls (Vec3D position, Vec3D orientation, std::vector< normalAndPosition > walls, const ParticleSpecies *species) | |
Constructor setting values. More... | |
~AxisymmetricIntersectionOfWalls () | |
Destructor. More... | |
AxisymmetricIntersectionOfWalls & | operator= (const AxisymmetricIntersectionOfWalls &other) |
Copy assignment operator. More... | |
AxisymmetricIntersectionOfWalls * | copy () const final |
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 final |
Computes the distance from the wall for a given BaseParticle and returns true if there is a collision. If there is a collision, also return the normal vector. More... | |
void | read (std::istream &is) final |
reads wall More... | |
void | write (std::ostream &os) const final |
outputs wall More... | |
std::string | getName () const final |
Returns the name of the object. More... | |
void | convertLimits (Vec3D &min, Vec3D &max) const |
void | writeVTK (VTKContainer &vtk) const override |
Public Member Functions inherited from IntersectionOfWalls | |
IntersectionOfWalls () | |
Default constructor. More... | |
IntersectionOfWalls (const IntersectionOfWalls &other) | |
Copy constructor. More... | |
IntersectionOfWalls (std::vector< normalAndPosition > walls, const ParticleSpecies *species) | |
Constructor setting values. 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 () override |
Removes all parts of the walls. More... | |
void | setSpecies (const ParticleSpecies *species) |
sets species of subwalls as well More... | |
void | setHandler (WallHandler *wallHandler) override |
A function which sets the WallHandler for this BaseWall. 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) override |
Move the IntersectionOfWalls to a new position, which is a Vec3D from the old position. More... | |
void | read (std::istream &is) override |
Reads an IntersectionOfWalls from an input stream, for example a restart file. More... | |
void | write (std::ostream &os) const override |
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... | |
void | writeVTK (VTKContainer &vtk) const override |
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... | |
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 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... | |
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... | |
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_ |
Protected Attributes inherited from IntersectionOfWalls | |
std::vector< InfiniteWall > | wallObjects_ |
The wall "segments"/directions that together make up the finite wall. More... | |
A AxisymmetricIntersectionOfWalls is an axisymmetric wall, defined by rotating a twodimensional IntersectionOfWalls around a symmetry axis.
It is defined by defining an axis position p and orientation o, around which the wall is axisymmetric, and an IntersectionOfWalls object w. To determine if a particle of touches an AxisymmetricIntersectionOfWalls, the particle's location is determined is a cylindrical coordinate system , where r is the radial distance from the axis, z is the axial distance along the axis, and the angular position around the axis (which is ignored as the object is axisymmetric). A particle touches an AxisymmetricIntersectionOfWalls if it touches the IntersectionOfWalls w in the coordinate system.
The code below defines a cylindrical outer wall of radius r with an axis position p and orientation o and contact properties s:
For a demonstration on how to use this class, see Flow through a 3D hourglass/silo (shown in the image below).
Definition at line 60 of file AxisymmetricIntersectionOfWalls.h.
AxisymmetricIntersectionOfWalls::AxisymmetricIntersectionOfWalls | ( | ) |
Default constructor.
Definition at line 31 of file AxisymmetricIntersectionOfWalls.cc.
Referenced by copy().
AxisymmetricIntersectionOfWalls::AxisymmetricIntersectionOfWalls | ( | const AxisymmetricIntersectionOfWalls & | other | ) |
Copy constructor.
[in] | other | The AxisymmetricIntersectionOfWalls that must be copied. |
Definition at line 39 of file AxisymmetricIntersectionOfWalls.cc.
AxisymmetricIntersectionOfWalls::AxisymmetricIntersectionOfWalls | ( | Vec3D | position, |
Vec3D | orientation, | ||
std::vector< normalAndPosition > | walls, | ||
const ParticleSpecies * | species | ||
) |
Constructor setting values.
Definition at line 45 of file AxisymmetricIntersectionOfWalls.cc.
References BaseInteractable::setOrientation(), and BaseInteractable::setPosition().
AxisymmetricIntersectionOfWalls::~AxisymmetricIntersectionOfWalls | ( | ) |
Destructor.
Definition at line 52 of file AxisymmetricIntersectionOfWalls.cc.
converts XYZ limits into RZ limits, to properly limit the VTK plotting area.
Definition at line 146 of file AxisymmetricIntersectionOfWalls.cc.
References Vec3D::dot(), Vec3D::getLengthSquared(), BaseInteractable::getOrientation(), BaseInteractable::getPosition(), Vec3D::X, Vec3D::Y, Z, and Vec3D::Z.
Referenced by writeVTK().
|
finalvirtual |
Wall copy method. It calls the copy constructor of this Wall, useful for polymorphism.
Implements BaseWall.
Definition at line 75 of file AxisymmetricIntersectionOfWalls.cc.
References AxisymmetricIntersectionOfWalls().
Referenced by operator=().
|
finalvirtual |
Computes the distance from the wall for a given BaseParticle and returns true if there is a collision. If there is a collision, also return the normal vector.
First, the particle is translated by the vector position_, then the distance normal and tangential to the orientation is computed. This normal and tangential direction is interpreted as the x and z coordinate. With the particle shifted into the XZ plane, the distance and normal is computed, as if the AxisymmetricIntersectionOfWalls would be a simple IntersectionOfWalls. Finally, the object and the normal is rotated back to the original position.
See also AxisymmetricIntersectionOfWalls for details.
Implements BaseWall.
Definition at line 90 of file AxisymmetricIntersectionOfWalls.cc.
References Vec3D::dot(), IntersectionOfWalls::getDistanceAndNormal(), BaseObject::getIndex(), Vec3D::getLength(), BaseInteractable::getOrientation(), BaseInteractable::getPosition(), BaseParticle::getWallInteractionRadius(), logger, WARN, Vec3D::X, and Vec3D::Z.
|
finalvirtual |
Returns the name of the object.
Implements BaseObject.
Definition at line 141 of file AxisymmetricIntersectionOfWalls.cc.
AxisymmetricIntersectionOfWalls & AxisymmetricIntersectionOfWalls::operator= | ( | const AxisymmetricIntersectionOfWalls & | other | ) |
Copy assignment operator.
[in] | other | The AxisymmetricIntersectionOfWalls that must be copied. |
Definition at line 60 of file AxisymmetricIntersectionOfWalls.cc.
References copy().
|
finalvirtual |
reads wall
[in] | is | The input stream from which the AxisymmetricIntersectionOfWalls is read, usually a restart file. |
Implements BaseInteractable.
Definition at line 124 of file AxisymmetricIntersectionOfWalls.cc.
References IntersectionOfWalls::read().
|
finalvirtual |
outputs wall
[in] | os | The output stream where the AxisymmetricIntersectionOfWalls must be written to, usually a restart file. |
Implements BaseInteractable.
Definition at line 133 of file AxisymmetricIntersectionOfWalls.cc.
References IntersectionOfWalls::write().
|
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 171 of file AxisymmetricIntersectionOfWalls.cc.
References convertLimits(), mathsFunc::cos(), BaseHandler< T >::getDPMBase(), BaseWall::getHandler(), DPMBase::getMax(), DPMBase::getMin(), BaseInteractable::getPosition(), BaseWall::intersectVTK(), constants::pi, VTKContainer::points, mathsFunc::sin(), VTKContainer::triangleStrips, IntersectionOfWalls::wallObjects_, X, Vec3D::X, XY, Y, Vec3D::Y, and Vec3D::Z.