|
A infinite wall fills the half-space {point: (position_-point)*normal_<=0}. More...
#include <InfiniteWall.h>
Public Member Functions | |
InfiniteWall () | |
Default constructor, the normal is infinitely long. More... | |
InfiniteWall (const InfiniteWall &w) | |
Copy constructor, copy the given wall. More... | |
InfiniteWall (const ParticleSpecies *species) | |
Constructor setting species. More... | |
InfiniteWall (Vec3D normal, Vec3D point, const ParticleSpecies *species) | |
Constructor setting values. More... | |
InfiniteWall (Vec3D PointA, Vec3D PointB, Vec3D PointC, const ParticleSpecies *species) | |
Constructor setting values if 3 coordinates are given. More... | |
~InfiniteWall () override | |
Default destructor. More... | |
InfiniteWall * | copy () const override |
Wall copy method. It calls the copy constructor of this Wall, useful for polymorphism. More... | |
void | set (Vec3D normal, Vec3D point) |
Defines a standard wall, given an outward normal vector s.t. normal*x=normal*point for all x of the wall. More... | |
void | setNormal (Vec3D normal) |
Changes the normal of the InfiniteWall. More... | |
MERCURYDPM_DEPRECATED void | set (Vec3D normal, Mdouble position) |
Defines a standard wall by computing normal*position = point and using the overloaded function set(Vec3D, vec3D). More... | |
Mdouble | getDistance (Vec3D position) const |
Returns the distance of the wall to the particle. 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 | getDistanceNormalOverlapSuperquadric (const SuperQuadricParticle &p, Mdouble &distance, Vec3D &normal_return, Mdouble &overlap) const override |
Compute the distance from the wall for a given BaseParticle and return if there is a collision. If there is a collision, also return the normal vector. More... | |
void | read (std::istream &is) override |
Reads InfiniteWall from a restart file. More... | |
void | oldRead (std::istream &is) |
Reads InfiniteWall from an old-style restart file. More... | |
std::string | getName () const override |
Writes the InfiniteWall to an output stream, usually a restart file. More... | |
Vec3D | getNormal () const |
Access function for normal. More... | |
void | createVTK (std::vector< Vec3D > &myPoints) const |
void | createVTK (std::vector< Vec3D > &myPoints, Vec3D max, Vec3D min) const |
void | writeVTK (VTKContainer &vtk) const override |
Vec3D | getFurthestPointSuperQuadric (const Vec3D &normalBodyFixed, const Vec3D &axes, Mdouble eps1, Mdouble eps2) const override |
Largely untested, use at your own risk for anything other than ellipsoids. More... | |
Public Member Functions inherited from BaseWall | |
BaseWall () | |
Default constructor. More... | |
BaseWall (const BaseWall &w) | |
Copy constructor. More... | |
~BaseWall () override | |
Default destructor. More... | |
void | write (std::ostream &os) const override |
Function that writes a BaseWall to an output stream, usually a restart file. More... | |
virtual bool | getDistanceNormalOverlap (const BaseParticle &P, Mdouble &distance, Vec3D &normal_return, Mdouble &overlap) const |
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) 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 |
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 infinite wall fills the half-space {point: (position_-point)*normal_<=0}.
This is a class defining walls. It defines the interaction of regular walls and periodic walls with particles as defined in Particle Modifications:
Thus, the surface of the wall is a plane through position position_ with normal_ the outward unit normal vector of the wall (pointing away from the particles, into the wall). Please note that this wall is infinite and straight.
A particle touches an infinite wall if (position_-point)*normal_<=radius.
InfiniteWall::InfiniteWall | ( | ) |
Default constructor, the normal is infinitely long.
Referenced by copy().
InfiniteWall::InfiniteWall | ( | const InfiniteWall & | w | ) |
Copy constructor, copy the given wall.
[in] | w | InfiniteWall that has to be copied. |
First copy the attributes of the BaseWall, then copy the ones that are specific for the InfiniteWall.
|
explicit |
Constructor setting species.
References DEBUG, logger, and BaseWall::setSpecies().
InfiniteWall::InfiniteWall | ( | Vec3D | normal, |
Vec3D | point, | ||
const ParticleSpecies * | species | ||
) |
Constructor setting values.
References setNormal(), BaseInteractable::setPosition(), and BaseWall::setSpecies().
InfiniteWall::InfiniteWall | ( | Vec3D | PointA, |
Vec3D | PointB, | ||
Vec3D | PointC, | ||
const ParticleSpecies * | species | ||
) |
Constructor setting values if 3 coordinates are given.
PointA | first coordinate |
PointB | second coordinate |
PointC | third coordinate |
species |
Builds an infinite wall through 3 points, normal is defined with Right hand rule following the three input points.
References Vec3D::cross(), ERROR, Vec3D::getLengthSquared(), logger, setNormal(), BaseInteractable::setPosition(), and BaseWall::setSpecies().
|
override |
|
overridevirtual |
Wall copy method. It calls the copy constructor of this Wall, useful for polymorphism.
Wall copy method. It calls the copy constructor of this Wall, useful for polymorphism
Implements BaseWall.
References InfiniteWall().
Referenced by RestrictedWall::set().
void InfiniteWall::createVTK | ( | std::vector< Vec3D > & | myPoints | ) | const |
Returns all intersection points of the infinite wall with the domain boundary.
Used to create an array of points for representing the wall in the VTK viewer. E.g., for a InfiniteWall through p=(0,0,0) with normal n=(0,0,-1) in a domain (-1,1)^3, createVTK returns {(0,-1,-1), (0,-1,1), (0,1,1), (0,1,-1)} Calling addToVTK will then create a triangle strip connecting these points with triangle faces.
References BaseHandler< T >::getDPMBase(), BaseWall::getHandler(), DPMBase::getMax(), and DPMBase::getMin().
Referenced by LevelSetWall::createVTK(), and writeVTK().
Same as createVTK(), but with a self-defined domain size (useful for plotting AxisymmetricWall's).
References Quaternion::getAxis(), BaseInteractable::getOrientation(), BaseInteractable::getPosition(), BaseWall::intersectVTK(), n, Vec3D::X, Vec3D::Y, and Vec3D::Z.
Returns the distance of the wall to the particle.
[in] | otherPosition | The position to which the distance must be computed to. |
References Quaternion::getDistance(), BaseInteractable::getOrientation(), and BaseInteractable::getPosition().
Referenced by getDistanceAndNormal(), RestrictedWall::getDistanceAndNormal(), getDistanceNormalOverlapSuperquadric(), RestrictedWall::getInteractionWith(), and RestrictedWall::writeVTK().
|
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 for which the distance to the wall must be computed. |
[out] | distance | Distance between the particle and the wall. |
[out] | normal_return | The normal of this wall, will only be set if there is a collision. |
First the distance is checked. If there is no collision, this function will return false and give the distance. If there is a collision, the function will return true and give the distance and the normal vector of this wall. 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.
References Quaternion::getAxis(), getDistance(), BaseInteractable::getOrientation(), BaseInteractable::getPosition(), and BaseParticle::getWallInteractionRadius().
Referenced by SimpleDrumSuperquadrics::getDistanceAndNormal().
|
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.
Reimplemented from BaseWall.
References Vec3D::dot(), SuperQuadricParticle::getAxes(), Quaternion::getAxis(), getDistance(), SuperQuadricParticle::getExponentEps1(), SuperQuadricParticle::getExponentEps2(), getFurthestPointSuperQuadric(), BaseInteractable::getOrientation(), BaseInteractable::getPosition(), BaseParticle::getWallInteractionRadius(), Quaternion::rotate(), and Quaternion::rotateBack().
Referenced by SimpleDrumSuperquadrics::getDistanceNormalOverlapSuperquadric().
|
overridevirtual |
Largely untested, use at your own risk for anything other than ellipsoids.
Reimplemented from BaseWall.
References mathsFunc::beta(), mathsFunc::gamma(), mathsFunc::sign(), Vec3D::X, Vec3D::Y, and Vec3D::Z.
Referenced by getDistanceNormalOverlapSuperquadric(), and SimpleDrumSuperquadrics::getFurthestPointSuperQuadric().
|
overridevirtual |
Writes the InfiniteWall to an output stream, usually a restart file.
Returns the name of the object, in this case the string "InfiniteWall".
Implements BaseObject.
Vec3D InfiniteWall::getNormal | ( | ) | const |
Access function for normal.
References Quaternion::getAxis(), and BaseInteractable::getOrientation().
Referenced by LawinenBox::actionsBeforeTimeStep(), CGHandler::computeContactPoints(), save(), FlowFrontChute::stretch(), LawinenBox::writeEneTimeStep(), and RestrictedWall::writeVTK().
void InfiniteWall::oldRead | ( | std::istream & | is | ) |
Reads InfiniteWall from an old-style restart file.
[in] | is | The input stream from which the InfiniteWall old style is read. |
References BaseInteractable::setOrientation(), BaseInteractable::setPosition(), and BaseInteractable::setVelocity().
|
overridevirtual |
Reads InfiniteWall from a restart file.
[in] | is | The input stream from which the InfiniteWall is read. Only needed for backward compatibility. |
Reimplemented from BaseWall.
References BaseWall::read(), helpers::readOptionalVariable(), and setNormal().
Referenced by SimpleDrumSuperquadrics::read(), and RestrictedWall::read().
Defines a standard wall by computing normal*position = point and using the overloaded function set(Vec3D, vec3D).
Defines a standard wall, 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 | A Vec3D that represents the normal vector to the wall. |
[in] | positionInNormalDirection | The position of the wall in the direction of the normal vector. |
Defines a standard wall, given an outward normal vector s.t. normal*x=normal*point for all x of the wall.
References setNormal(), and BaseInteractable::setPosition().
Referenced by IntersectionOfWalls::addObject(), NautaMixer::addTopWall(), ClosedCSCWalls::ClosedCSCWalls(), Chute::createBottom(), LevelSetWall::createVTK(), CSCWalls::CSCWalls(), SimpleDrumSuperquadrics::getDistanceAndNormal(), SimpleDrumSuperquadrics::getDistanceNormalOverlapSuperquadric(), GranuDrum::GranuDrum(), InitialConditions< SpeciesType >::InitialConditions(), loadingTest(), main(), MercuryCGSelfTest::MercuryCGSelfTest(), normalAndTangentialLoadingTest(), ParticleCreation::ParticleCreation(), WallHandler::readAndCreateOldObject(), DPMBase::readParAndIniFiles(), set(), Slide::set_Walls(), T_protectiveWall::setupInitialConditions(), LawinenBox::setupInitialConditions(), ClosedCSCWalls::setupInitialConditions(), MercuryLogo::setupInitialConditions(), SmoothChute::setupInitialConditions(), multiParticleT1::setupInitialConditions(), VerticalMixer::setupInitialConditions(), Binary::setupInitialConditions(), my_problem::setupInitialConditions(), FreeCooling2DinWallsDemo::setupInitialConditions(), FreeCooling3DinWallsDemo::setupInitialConditions(), HeaterBoundaryTest::setupInitialConditions(), HourGlass2D::setupInitialConditions(), HourGlass::setupInitialConditions(), Cstatic2d::setupInitialConditions(), AngleOfRepose::setupInitialConditions(), SilbertPeriodic::setupInitialConditions(), Drum::setupInitialConditions(), HertzSelfTest::setupInitialConditions(), MindlinSelfTest::setupInitialConditions(), Penetration::setupInitialConditions(), SegregationPeriodic::setupInitialConditions(), Chutebelt::setupInitialConditions(), ConstantMassFlowMaserBoundaryMixedSpeciesSelfTest::setupInitialConditions(), ConstantMassFlowMaserSelfTest::setupInitialConditions(), InsertionBoundarySelfTest::setupInitialConditions(), PolydisperseInsertionBoundarySelfTest::setupInitialConditions(), CGHandlerSelfTest::setupInitialConditions(), NewtonsCradleSelftest::setupInitialConditions(), NewtonsCradleSelfTest::setupInitialConditions(), SquarePacking::setupInitialConditions(), ChargedBondedParticleUnitTest::setupInitialConditions(), WallParticleCollision::setupInitialConditions(), my_problem_HGRID::setupInitialConditions(), FreeFallInteractionSelfTest::setupInitialConditions(), FreeFallSelfTest::setupInitialConditions(), LiquidMigrationSelfTest::setupInitialConditions(), DPM::setupInitialConditions(), ObliqueImpactSelfTest::setupInitialConditions(), TwoBondedParticleElasticCollision::setupInitialConditions(), TwoParticleElasticCollisionInteraction::setupInitialConditions(), TwoParticleElasticCollision::setupInitialConditions(), CoilSelfTest::setupInitialConditions(), UnionOfWalls::setupInitialConditions(), DrumRot::setupInitialConditions(), RotatingDrum::setupInitialConditions(), Wall::setupInitialConditions(), BouncingSuperQuadric::setupInitialConditions(), EllipsoidsBouncingOnWallDemo::setupInitialConditions(), GranularCollapse::setupInitialConditions(), EllipticalSuperQuadricCollision::setupInitialConditions(), protectiveWall::setupInitialConditions(), Tutorial11::setupInitialConditions(), Tutorial12::setupInitialConditions(), Tutorial3::setupInitialConditions(), Tutorial4::setupInitialConditions(), Tutorial7::setupInitialConditions(), Tutorial8::setupInitialConditions(), Tutorial9::setupInitialConditions(), ParticleWallInteraction::setupInitialConditions(), EvaporationAndHeatTest::setupInitialConditions(), ExtremeOverlapWithWallsUnitTest::setupInitialConditions(), FreeFallHertzMindlinUnitTest::setupInitialConditions(), FreeFall::setupInitialConditions(), FullRestartTest::setupInitialConditions(), InclinedPlane::setupInitialConditions(), MpiMaserChuteTest::setupInitialConditions(), MovingWalls::setupInitialConditions(), MultiParticlesInsertion::setupInitialConditions(), MpiPeriodicBoundaryUnitTest::setupInitialConditions(), WallSpecies::setupInitialConditions(), AreaVTK::setupInitialConditions(), ChuteBottom::setupInitialConditions(), CoupledProblem::setupMercury(), ContactDetectionWithWallTester::setupParticleAndWall(), Chute::setupSideWalls(), SimpleDrumSuperquadrics::SimpleDrumSuperquadrics(), and Slide::Slide().
void InfiniteWall::setNormal | ( | Vec3D | normal | ) |
Changes the normal of the InfiniteWall.
[in] | normal | The vector normal to the wall. |
References BaseInteractable::setOrientationViaNormal().
Referenced by InfiniteWall(), load(), main(), read(), set(), MaserRepeatedOutInMPI2Test::setupInitialConditions(), and MovingWall::setupInitialConditions().
|
overridevirtual |
Adds the vtk wall representation to the VTK container
Reimplemented from BaseWall.
References BaseWall::addToVTK(), and createVTK().