|
A IntersectionOfWalls is convex polygon defined as an intersection of InfiniteWall's. More...
#include <IntersectionOfWalls.h>
Classes | |
struct | normalAndPosition |
Public Member Functions | |
IntersectionOfWalls () | |
Default constructor. More... | |
IntersectionOfWalls (const IntersectionOfWalls &other) | |
Copy constructor. More... | |
IntersectionOfWalls (const std::vector< normalAndPosition > &walls, const ParticleSpecies *species) | |
Constructor setting values. More... | |
~IntersectionOfWalls () override | |
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... | |
void | clear () |
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... | |
unsigned int | getNumberOfObjects () |
Returns the number of objects. More... | |
void | addObject (Vec3D normal, Vec3D point) |
Adds a wall to the set of infinite walls, given a normal vector pointing into the wall (i.e. out of the simulation domain), going through the point, so that normal*x=normal*point. More... | |
void | addObject (Quaternion orientation, Vec3D position) |
void | add3PointObject (Vec3D PointA, Vec3D PointB, Vec3D PointC) |
void | setPointsAndLines (unsigned int n) |
void | addTetraSTL (Vec3D PointA, Vec3D PointB, Vec3D PointC, Vec3D WallNormal, Mdouble Thickness, int wallidentifier) |
constructs a tetrahedron for an STL file input More... | |
void | addTetra (const Vec3D &PointA, const Vec3D &PointB, const Vec3D &PointC, Mdouble &Thickness) |
constructs a tetrahedron from 3 input coordinates More... | |
void | addPlate (const Vec3D &PointA, const Vec3D &PointB, const Vec3D &PointC, const Vec3D &WallNormal, const Mdouble &Thickness, int wallidentifier) |
MERCURYDPM_DEPRECATED void | addObject (Vec3D normal, Mdouble position) |
Adds a wall to the set of finite walls, given an normal vector pointing into the wall (i.e. out of the flow domain), to give a plane defined by 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. Note that if you view from inside of your geometry, the shape formed by points has to be convex, otherwise it will not create the wall correctly. 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. Note that if you view from inside of your geometry, the shape formed by points has to be convex, otherwise it will not create the wall correctly. 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. Note that if you view from inside of your geometry, the shape formed by points has to be convex, otherwise it will not create the wall correctly. 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. Note that if you view from inside of your geometry, the shape formed by points has to be convex, otherwise it will not create the wall correctly. 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 &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. More... | |
void | read (std::istream &is) override |
Move the IntersectionOfWalls to a new position, which is a Vec3D from the old position. 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. More... | |
BaseWall (const BaseWall &w) | |
Copy constructor. More... | |
~BaseWall () override | |
Default destructor. 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 |
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) |
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 |
Protected Attributes | |
std::vector< InfiniteWall > | wallObjects_ |
The wall "segments"/directions that together make up the finite wall. More... | |
std::vector< Vec3D > | C_ |
A vector that stores the intersection point of three different InfiniteWall. More... | |
Private Attributes | |
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... | |
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 IntersectionOfWalls is convex polygon defined as an intersection of InfiniteWall's.
It can be defined as the intersection of a set of InfiniteWall's, defined by the normal vector into the wall and a point on the wall. For example, the following gives a cube |x|<1 and |y|<1:
A particle of radius *r* and position *x* touches an InfiniteWall with normal *n* and position *p* if \(p-n\cdot x\leq r\) (note 'touching particles' also includes particles that are completely enclosed inside the wall). A particle touches an IntersectionOfWalls if it touches all InfiniteWall objects (shown in the image below).
For a demonstration on how to use this class, see T8: Motion of a particle in a box with an obstacle and Flow through a 3D hourglass/silo (shown in the image below).
IntersectionOfWalls::IntersectionOfWalls | ( | ) |
Default constructor.
Referenced by copy().
IntersectionOfWalls::IntersectionOfWalls | ( | const IntersectionOfWalls & | other | ) |
Copy constructor.
[in] | other | The IntersectionOfWalls that must be copied. |
References A_, AB_, C_, DEBUG, BaseWall::getHandler(), logger, and wallObjects_.
IntersectionOfWalls::IntersectionOfWalls | ( | const std::vector< normalAndPosition > & | walls, |
const ParticleSpecies * | species | ||
) |
Constructor setting values.
References addObject(), and setSpecies().
|
override |
PointA | first coordinate plane passes through; |
PointB | second coordinate plane passes through; |
PointC | third coordinate plane passes through; |
calls the IntersectionOfWalls::addObject(normal, point) by calculating the normal from these three coordinates
References addObject(), Vec3D::cross(), ERROR, Vec3D::getLengthSquared(), and logger.
Referenced by addPlate(), addTetra(), and addTetraSTL().
void IntersectionOfWalls::addObject | ( | Quaternion | orientation, |
Vec3D | position | ||
) |
[in] | normal | The normal to this wallObject. |
[in] | position | 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_.
References BaseInteractable::getSpecies(), n, BaseInteractable::setOrientation(), setPointsAndLines(), BaseInteractable::setPosition(), BaseWall::setSpecies(), and wallObjects_.
Adds a wall to the set of finite walls, given an normal vector pointing into the wall (i.e. out of the flow domain), to give a plane defined by normal*x=position.
[in] | normal | The normal to the wallObject. |
[in] | position | The position of the wallObject in the direction of the normal vector. |
References addObject().
Adds a wall to the set of infinite walls, given a normal vector pointing into the wall (i.e. out of the simulation domain), going through the point, so that 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_.
References BaseInteractable::getSpecies(), n, Vec3D::normalise(), InfiniteWall::set(), setPointsAndLines(), BaseWall::setSpecies(), and wallObjects_.
Referenced by add3PointObject(), NautaMixer::addBaseWall(), NautaMixer::addConeWall(), ChuteWithHopper::addHopper(), addObject(), VerticalMixerAngledBlades::addPrettyBlades(), NautaMixer::addScrew(), ChuteWithWedge::addWedge(), createOpenPrism(), createPrism(), GranuDrum::GranuDrum(), GranuHeap::GranuHeap(), IntersectionOfWalls(), main(), read(), WallHandler::readAndCreateOldObject(), ContractionWithPeriodicInflow::set_symmetric_contraction(), ChuteWithPeriodicInflowAndContraction::set_symmetric_contraction(), ChuteWithContraction::set_symmetric_contraction(), T_protectiveWall::setupInitialConditions(), AxisymmetricHopper::setupInitialConditions(), RotatingDrumWet::setupInitialConditions(), VerticalMixer::setupInitialConditions(), MaserRepeatedOutInMPI2Test::setupInitialConditions(), PeriodicBounaryEnteringMPIDomainTest::setupInitialConditions(), HourGlass::setupInitialConditions(), MinimalExampleDrum::setupInitialConditions(), GetDistanceAndNormalForIntersectionOfWalls::setupInitialConditions(), Polygon::setupInitialConditions(), Drum::setupInitialConditions(), Silo::setupInitialConditions(), ContactDetectionIntersectionOfWallsTest::setupInitialConditions(), TriangulatedScrewSelfTest::setupInitialConditions(), UnionOfWalls::setupInitialConditions(), RotatingDrum::setupInitialConditions(), protectiveWall::setupInitialConditions(), Tutorial11::setupInitialConditions(), Tutorial8::setupInitialConditions(), FullRestartTest::setupInitialConditions(), and MovingWalls::setupInitialConditions().
void IntersectionOfWalls::addPlate | ( | const Vec3D & | PointA, |
const Vec3D & | PointB, | ||
const Vec3D & | PointC, | ||
const Vec3D & | WallNormal, | ||
const Mdouble & | Thickness, | ||
int | wallidentifier | ||
) |
References add3PointObject(), Vec3D::getLengthSquared(), logger, and WARN.
void IntersectionOfWalls::addTetra | ( | const Vec3D & | PointA, |
const Vec3D & | PointB, | ||
const Vec3D & | PointC, | ||
Mdouble & | Thickness | ||
) |
constructs a tetrahedron from 3 input coordinates
PointA | first coordinate plane passes through; |
PointB | second coordinate plane passes through; |
PointC | third coordinate plane passes through; |
Thickness | the height of the apex |
constructs a tethrahedron with the apex in the direction according to the right hand rule
References add3PointObject(), Vec3D::cross(), ERROR, Vec3D::getLengthSquared(), and logger.
void IntersectionOfWalls::addTetraSTL | ( | Vec3D | PointA, |
Vec3D | PointB, | ||
Vec3D | PointC, | ||
Vec3D | WallNormal, | ||
Mdouble | Thickness, | ||
int | wallidentifier | ||
) |
constructs a tetrahedron for an STL file input
PointA | first coordinate plane passes through; |
PointB | second coordinate plane passes through; |
PointC | third coordinate plane passes through; |
WallNormal | the normal of the wal of the plane, Please note that the Wallnormal input is defined inverse to other Mercury functions Due to the usage of this function for reading in STL files |
Thickness | the height of the apex |
wallidentifier | to identify which wall does not get constructed for bug finding in STL files |
constructs a tethrahedron with the apex in minus normal direction.
References add3PointObject(), Vec3D::cross(), Vec3D::dot(), Vec3D::getLengthSquared(), logger, Vec3D::normalise(), and WARN.
void IntersectionOfWalls::clear | ( | ) |
Removes all parts of the walls.
References A_, AB_, C_, BaseWall::removeRenderedWalls(), and wallObjects_.
Referenced by createOpenPrism().
|
overridevirtual |
Wall copy method. It calls the copy constructor of this Wall, useful for polymorphism.
Implements BaseWall.
Reimplemented in ScrewsymmetricIntersectionOfWalls.
References IntersectionOfWalls().
Referenced by operator=().
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. Note that if you view from inside of your geometry, the shape formed by points has to be convex, otherwise it will not create the wall correctly.
[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).
References createOpenPrism(), Vec3D::cross(), and Vec3D::getUnitVector().
Creates an open prism which is a polygon between the points, except the first and last point, and extends infinitely in the PrismAxis direction. Note that if you view from inside of your geometry, the shape formed by points has to be convex, otherwise it will not create the wall correctly.
[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.
References addObject(), clear(), Vec3D::cross(), and constants::i.
Referenced by VerticalMixerStraightBlades::addBlades(), VerticalMixerAngledBlades::addBlades(), createOpenPrism(), createPrism(), HourGlass2D::setupInitialConditions(), HourGlass::setupInitialConditions(), Tutorial11::setupInitialConditions(), and MovingIntersectionOfWallsUnitTest_Basic::setupInitialConditions().
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. Note that if you view from inside of your geometry, the shape formed by points has to be convex, otherwise it will not create the wall correctly.
[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).
References createPrism(), Vec3D::cross(), and Vec3D::getUnitVector().
Creates an open prism which is a polygon between the points and extends infinitely in the PrismAxis direction. Note that if you view from inside of your geometry, the shape formed by points has to be convex, otherwise it will not create the wall correctly.
[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.
References addObject(), createOpenPrism(), and Vec3D::cross().
Referenced by VerticalMixerAngledBlades::addPrettyBlades(), createPrism(), AxisymmetricWallSelfTest::setGeometry(), and Tutorial12::setupInitialConditions().
|
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.
Reimplemented in ScrewsymmetricIntersectionOfWalls.
References BaseHandler< T >::getDPMBase(), BaseWall::getHandler(), BaseSpecies::getInteractionDistance(), SpeciesHandler::getMixedObject(), BaseInteractable::getOrientation(), BaseInteractable::getPosition(), BaseParticle::getRadius(), BaseInteractable::getSpecies(), Quaternion::rotate(), Quaternion::rotateBack(), and DPMBase::speciesHandler.
Referenced by AxisymmetricIntersectionOfWalls::getDistanceAndNormal(), HorizontalBaseScrew::getDistanceAndNormal(), and ScrewsymmetricIntersectionOfWalls::getDistanceAndNormal().
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 a particle at the given position (position) and radius (wallInteractionRadius) overlaps with the IntersectionOfWalls.
References A_, AB_, C_, D, DEBUG, Vec3D::dot(), Global_Physical_Variables::E, Vec3D::getLengthSquared(), constants::i, logger, and wallObjects_.
|
overridevirtual |
Returns the name of the object, here the string "IntersectionOfWalls".
Implements BaseObject.
Reimplemented in ScrewsymmetricIntersectionOfWalls.
unsigned int IntersectionOfWalls::getNumberOfObjects | ( | ) |
Returns the number of objects.
\detail Suppose your simulation adds to an IntersectionOfWalls after a certain time or condition is met. Checking the number of objects is useful for checking if this has happened yet, when restarting.
References wallObjects_.
IntersectionOfWalls & IntersectionOfWalls::operator= | ( | const IntersectionOfWalls & | other | ) |
Copy assignment operator.
[in] | other | The IntersectionOfWalls that must be copied. |
|
overridevirtual |
Move the IntersectionOfWalls to a new position, which is a Vec3D from the old position.
Reads an IntersectionOfWalls from an input stream, for example a restart file.
\param[in] move A reference to a Vec3D that denotes the direction and length it should be moved with. \details 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. \todo We should use the position_ and orientation_ of the IntersectionOfWalls; that way, IntersectionOfWalls can be moved with the standard BaseInteractable::move function, getting rid of an anomaly in the code and removing the virtual from the move function. \author weinhartt ‍/
void IntersectionOfWalls::move(const Vec3D& move) { BaseInteractable::move(move); for (Vec3D& a : A_) { a += move; } for (Vec3D& c : C_) { c += move; } for (InfiniteWall& o : wallObjects_) { o.move(move); } }
/*!
[in] | is | The input stream from which the IntersectionOfWalls is read, usually a restart file. |
Reimplemented from BaseWall.
Reimplemented in ScrewsymmetricIntersectionOfWalls.
References addObject(), constants::i, n, and BaseWall::read().
Referenced by AxisymmetricIntersectionOfWalls::read(), HorizontalBaseScrew::read(), and ScrewsymmetricIntersectionOfWalls::read().
|
overridevirtual |
A function which sets the WallHandler for this BaseWall.
Setting the WallHandler also sets the DPMBase and therefore the SpeciesHandler for the species. This wall's species pointer is updated to the new SpeciesHandler.
[in] | handler | - A pointer to the WallHandler that we want to handle this wall. |
Reimplemented from BaseWall.
References BaseWall::setHandler(), and wallObjects_.
void IntersectionOfWalls::setPointsAndLines | ( | unsigned int | n | ) |
References A_, AB_, C_, Vec3D::cross(), Vec3D::dot(), BaseInteractable::getPosition(), logger, n, VERBOSE, wallObjects_, X, Y, and Z.
Referenced by addObject().
void IntersectionOfWalls::setSpecies | ( | const ParticleSpecies * | species | ) |
sets species of subwalls as well
References BaseWall::setSpecies(), and wallObjects_.
Referenced by NautaMixer::addBaseWall(), VerticalMixerStraightBlades::addBlades(), VerticalMixerAngledBlades::addBlades(), NautaMixer::addConeWall(), ChuteWithHopper::addHopper(), VerticalMixerAngledBlades::addPrettyBlades(), NautaMixer::addScrew(), ChuteWithWedge::addWedge(), GranuDrum::GranuDrum(), GranuHeap::GranuHeap(), IntersectionOfWalls(), main(), WallHandler::readAndCreateOldObject(), AxisymmetricWallSelfTest::setGeometry(), T_protectiveWall::setupInitialConditions(), AxisymmetricHopper::setupInitialConditions(), RotatingDrumWet::setupInitialConditions(), VerticalMixer::setupInitialConditions(), HourGlass2D::setupInitialConditions(), HourGlass::setupInitialConditions(), MinimalExampleDrum::setupInitialConditions(), GetDistanceAndNormalForIntersectionOfWalls::setupInitialConditions(), Polygon::setupInitialConditions(), Drum::setupInitialConditions(), Silo::setupInitialConditions(), ContactDetectionIntersectionOfWallsTest::setupInitialConditions(), UnionOfWalls::setupInitialConditions(), RotatingDrum::setupInitialConditions(), protectiveWall::setupInitialConditions(), Tutorial11::setupInitialConditions(), Tutorial12::setupInitialConditions(), Tutorial8::setupInitialConditions(), FullRestartTest::setupInitialConditions(), MovingIntersectionOfWallsUnitTest_Basic::setupInitialConditions(), and MovingWalls::setupInitialConditions().
|
overridevirtual |
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.
Reimplemented in ScrewsymmetricIntersectionOfWalls.
References wallObjects_, and BaseWall::write().
Referenced by AxisymmetricIntersectionOfWalls::write(), HorizontalBaseScrew::write(), and ScrewsymmetricIntersectionOfWalls::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.
Reimplemented in ScrewsymmetricIntersectionOfWalls.
References BaseHandler< T >::getDPMBase(), BaseWall::getHandler(), DPMBase::getMax(), DPMBase::getMin(), BaseInteractable::getOrientation(), BaseInteractable::getPosition(), BaseWall::intersectVTK(), Quaternion::rotate(), and wallObjects_.
|
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.
Referenced by clear(), getDistanceAndNormal(), IntersectionOfWalls(), and setPointsAndLines().
|
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.
Referenced by clear(), getDistanceAndNormal(), IntersectionOfWalls(), and setPointsAndLines().
|
protected |
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
Referenced by clear(), getDistanceAndNormal(), IntersectionOfWalls(), and setPointsAndLines().
|
protected |
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_.
Referenced by addObject(), clear(), getDistanceAndNormal(), getNumberOfObjects(), IntersectionOfWalls(), setHandler(), setPointsAndLines(), setSpecies(), write(), AxisymmetricIntersectionOfWalls::writeVTK(), HorizontalBaseScrew::writeVTK(), writeVTK(), and ScrewsymmetricIntersectionOfWalls::writeVTK().