|
This function defines an Archimedes' screw in the z-direction from a (constant) starting point, a (constant) length L, a (constant) radius r, a (constant) number or revelations N and a (constant) rotation speed (rev/s) More...
#include <Screw.h>
Public Member Functions | |
Screw () | |
Default constructor: make a screw with default parameters. More... | |
Screw (const Screw &other) | |
Copy constructor, copies another Screw. More... | |
Screw (Vec3D start, Mdouble l, Mdouble r, Mdouble n, Mdouble omega, Mdouble thickness, ScrewType screwType=ScrewType::doubleHelix) | |
Constructor in which all parameters of the screw are set. More... | |
~Screw () override | |
Default destructor. More... | |
Screw * | copy () const final |
Copy this screw and return a pointer to the copy. More... | |
bool | getDistanceAndNormal (const BaseParticle &P, Mdouble &distance, Vec3D &normal_return) const final |
Compute the distance from the Screw for a given BaseParticle and return if there is a collision. If there is a collision, also return the normal vector of the interaction point. More... | |
bool | getDistanceAndNormalLabCoordinates (Vec3D position, Mdouble wallInteractionRadius, Mdouble &distance, Vec3D &normal_return) const |
void | move_time (Mdouble dt) |
Rotate the Screw for a period dt, so that the offset_ changes with omega_*dt. More... | |
void | rotate (const Vec3D &angularVelocityDt) override |
void | read (std::istream &is) override |
Reads a Screw from an input stream, for example a restart file. More... | |
void | oldRead (std::istream &is) |
Reads a Screw in the old style from an input stream, for example a restart file old style. More... | |
void | write (std::ostream &os) const override |
Writes this Screw to an output stream, for example a restart file. More... | |
std::string | getName () const final |
Returns the name of the object, here the string "Screw". More... | |
void | writeVTK (VTKContainer &vtk) const override |
void | writeVTK (std::string filename) const |
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 |
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... | |
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 |
Private Attributes | |
Vec3D | start_ |
The centre of the lower end of the screw. More... | |
Mdouble | l_ |
The length of the Screw. More... | |
Mdouble | maxR_ |
The outer radius of the Screw. More... | |
Mdouble | n_ |
The number of revelations. More... | |
Mdouble | omega_ |
Rotation speed in rev/s. More... | |
Mdouble | offset_ |
The angle that describes how much the Screw has turned, going from 0 to 1 for a rotation. More... | |
Mdouble | thickness_ |
The thickness of the Screw. More... | |
ScrewType | screwType_ |
Single or double helix screw. 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... | |
This function defines an Archimedes' screw in the z-direction from a (constant) starting point, a (constant) length L, a (constant) radius r, a (constant) number or revelations N and a (constant) rotation speed (rev/s)
q is a new coordinate going from 0 to 1 and t is the time, x=xs+r*cos(2*pi*(offset+N*q)), y=ys+r*sin(2*pi*(offset+N*q)), z=zs+q*L
Screw::Screw | ( | ) |
Default constructor: make a screw with default parameters.
Make a Screw which is centered in the origin, has a length of 1, one revelation, a radius of 1, turns with 1 revelation per second, is infinitely thin and starts at its normal initial point.
References DEBUG, doubleHelix, l_, logger, maxR_, n_, offset_, omega_, screwType_, BaseInteractable::setOrientationViaNormal(), Vec3D::setZero(), start_, and thickness_.
Referenced by copy().
Screw::Screw | ( | const Screw & | other | ) |
Copy constructor, copies another Screw.
[in] | other | The Screw that has to be copied. |
References DEBUG, l_, logger, maxR_, n_, offset_, omega_, screwType_, start_, and thickness_.
Screw::Screw | ( | Vec3D | start, |
Mdouble | l, | ||
Mdouble | r, | ||
Mdouble | n, | ||
Mdouble | omega, | ||
Mdouble | thickness, | ||
ScrewType | screwType = ScrewType::doubleHelix |
||
) |
Constructor in which all parameters of the screw are set.
[in] | start | A Vec3D which denotes the centre of the lower end of the Screw. |
[in] | l | The length of the Screw, must be positive. |
[in] | r | The radius of the Screw, must be positive. |
[in] | n | The number of revelations of the Screw, must be positive. |
[in] | omega | The rotation speed of the Screw in rev/s. |
[in] | thickness | The thickness of the Screw, must be non-negative. |
Make a Screw by assigning all input parameters to the data-members of this class, and setting the offset_ to 0.
References DEBUG, l_, logger, maxR_, n, n_, offset_, omega_, screwType_, start_, and thickness_.
|
override |
|
finalvirtual |
|
finalvirtual |
Compute the distance from the Screw for a given BaseParticle and return if there is a collision. If there is a collision, also return the normal vector of the interaction point.
Implements BaseWall.
References getDistanceAndNormalLabCoordinates(), BaseHandler< T >::getDPMBase(), BaseWall::getHandler(), BaseSpecies::getInteractionDistance(), SpeciesHandler::getMixedObject(), BaseInteractable::getOrientation(), BaseInteractable::getPosition(), BaseInteractable::getSpecies(), Global_Physical_Variables::P, Quaternion::rotate(), Quaternion::rotateBack(), and DPMBase::speciesHandler.
bool Screw::getDistanceAndNormalLabCoordinates | ( | Vec3D | position, |
Mdouble | wallInteractionRadius, | ||
Mdouble & | distance, | ||
Vec3D & | normal_return | ||
) | const |
[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 Screw. If there is a collision, this function also computes the distance between the BaseParticle and Screw and the normal of the IntersectionOfWalls at the intersection point.
References A, mathsFunc::cos(), BaseObject::getId(), l_, logger, maxR_, n_, Vec3D::normalise(), offset_, constants::pi, R, helpers::round(), screwType_, mathsFunc::sign(), mathsFunc::sin(), singleHelix, constants::sqr_pi, mathsFunc::square(), start_, thickness_, WARN, Vec3D::X, X, Vec3D::Y, and Vec3D::Z.
Referenced by getDistanceAndNormal().
|
finalvirtual |
Returns the name of the object, here the string "Screw".
Implements BaseObject.
Referenced by writeVTK().
void Screw::move_time | ( | Mdouble | dt | ) |
void Screw::oldRead | ( | std::istream & | is | ) |
Reads a Screw in the old style from an input stream, for example a restart file old style.
[in,out] | is | Input stream from which the Screw must be read. |
Read the Screw in old style, please note that the thickness is not read in this function, so it has either to be set manually or it is 0.0 from the default constructor.
|
overridevirtual |
Reads a Screw from an input stream, for example a restart file.
[in,out] | is | Input stream from which the Screw must be read. |
Reimplemented from BaseWall.
References l_, maxR_, n_, offset_, omega_, BaseWall::read(), screwType_, start_, and thickness_.
|
overridevirtual |
angularVelocityDt |
Reimplemented from BaseInteractable.
References BaseHandler< T >::getDPMBase(), BaseWall::getHandler(), DPMBase::getTimeStep(), offset_, omega_, and BaseInteractable::rotate().
|
overridevirtual |
Writes this Screw to an output stream, for example a restart file.
[in,out] | os | Output stream to which the Screw must be written. |
Reimplemented from BaseWall.
References l_, maxR_, n_, offset_, omega_, screwType_, start_, thickness_, and BaseWall::write().
void Screw::writeVTK | ( | std::string | filename | ) | const |
References getName(), VTKContainer::points, VTKContainer::triangleStrips, UNUSED, helpers::writeToFile(), and writeVTK().
|
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.
References mathsFunc::cos(), doubleHelix, BaseInteractable::getOrientation(), BaseInteractable::getPosition(), l_, maxR_, n_, offset_, constants::pi, VTKContainer::points, Quaternion::rotate(), screwType_, mathsFunc::sin(), start_, thickness_, VTKContainer::triangleStrips, Vec3D::X, Vec3D::Y, and Vec3D::Z.
Referenced by TriangulatedScrewSelfTest::setupInitialConditions(), and writeVTK().
|
private |
The length of the Screw.
Referenced by getDistanceAndNormalLabCoordinates(), oldRead(), read(), Screw(), write(), and writeVTK().
|
private |
The outer radius of the Screw.
Referenced by getDistanceAndNormalLabCoordinates(), oldRead(), read(), Screw(), write(), and writeVTK().
|
private |
The number of revelations.
Referenced by getDistanceAndNormalLabCoordinates(), oldRead(), read(), Screw(), write(), and writeVTK().
|
private |
The angle that describes how much the Screw has turned, going from 0 to 1 for a rotation.
Referenced by getDistanceAndNormalLabCoordinates(), oldRead(), read(), rotate(), Screw(), write(), and writeVTK().
|
private |
|
private |
Single or double helix screw.
Referenced by getDistanceAndNormalLabCoordinates(), read(), Screw(), write(), and writeVTK().
|
private |
The centre of the lower end of the screw.
Referenced by getDistanceAndNormalLabCoordinates(), oldRead(), read(), Screw(), write(), and writeVTK().
|
private |
The thickness of the Screw.
Referenced by getDistanceAndNormalLabCoordinates(), read(), Screw(), write(), and writeVTK().