![]() |
|
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 <HorizontalScrew.h>
Inheritance diagram for HorizontalScrew:Public Member Functions | |
| HorizontalScrew () | |
| Default constructor: make a screw with default parameters. More... | |
| HorizontalScrew (const HorizontalScrew &other) | |
| Copy constructor, copies another HorizontalScrew. More... | |
| HorizontalScrew (Vec3D start, Mdouble l, Mdouble minR, Mdouble lowerR, Mdouble diffR, Mdouble n, Mdouble omega, Mdouble thickness, const ParticleSpecies *s) | |
| Constructor in which all parameters of the screw are set. More... | |
| ~HorizontalScrew () | |
| Default destructor. More... | |
| HorizontalScrew * | 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 HorizontalScrew 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... | |
| Mdouble | getLength () const |
| Returns the length of the HorizontalScrew. More... | |
| Vec3D | getStart () const |
| Returns the starting position of the HorizontalScrew. More... | |
| void | move_time (Mdouble dt) |
| Rotate the HorizontalScrew for a period dt, so that the offset_ changes with omega_*dt. More... | |
| void | read (std::istream &is) override |
| Reads a HorizontalScrew from an input stream, for example a restart file. More... | |
| void | write (std::ostream &os) const override |
| Writes this HorizontalScrew to an output stream, for example a restart file. More... | |
| std::string | getName () const final |
| Returns the name of the object, here the string "HorizontalScrew". More... | |
| void | writeVTK (VTKContainer &vtk) const override |
| void | setBlades (const Mdouble bladeWidth, const Mdouble bladeLength, const std::vector< Mdouble > bladeMounts) |
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... | |
| 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 |
Private Attributes | |
| Vec3D | start_ |
| The centre of the lower end of the screw. More... | |
| Mdouble | l_ |
| The length of the HorizontalScrew. More... | |
| Mdouble | minR_ |
| The outer radius of the HorizontalScrew. More... | |
| Mdouble | lowerR_ |
| Mdouble | diffR_ |
| Mdouble | n_ |
| The number of revelations. More... | |
| Mdouble | omega_ |
| Rotation speed in rev/s. More... | |
| Mdouble | offset_ |
| The angle that describes how much the HorizontalScrew has turned, going from 0 to 1 for a rotation. More... | |
| Mdouble | thickness_ |
| The thickness of the HorizontalScrew. More... | |
| Mdouble | bladeWidth_ |
| The maximum radial width of a blade (in r). More... | |
| Mdouble | bladeLength_ |
| The length of a blade (in the q-coordinate, which is a linear mapping from start.Z<z<start.Z+l to 0<q<1). More... | |
| std::vector< Mdouble > | bladeMounts_ |
| The starting point of a blade (in the q-coordinate, which is a linear mapping from start.Z<z<start.Z+l to 0<q<1) 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
| HorizontalScrew::HorizontalScrew | ( | ) |
Default constructor: make a screw with default parameters.
Make a HorizontalScrew 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 bladeLength_, bladeMounts_, bladeWidth_, DEBUG, diffR_, l_, logger, lowerR_, minR_, n_, offset_, omega_, Vec3D::setZero(), start_, and thickness_.
Referenced by copy().
| HorizontalScrew::HorizontalScrew | ( | const HorizontalScrew & | other | ) |
Copy constructor, copies another HorizontalScrew.
| [in] | other | The HorizontalScrew that has to be copied. |
References bladeLength_, bladeMounts_, bladeWidth_, DEBUG, diffR_, l_, logger, lowerR_, minR_, n_, offset_, omega_, start_, and thickness_.
| HorizontalScrew::HorizontalScrew | ( | Vec3D | start, |
| Mdouble | l, | ||
| Mdouble | minR, | ||
| Mdouble | lowerR, | ||
| Mdouble | diffR, | ||
| Mdouble | n, | ||
| Mdouble | omega, | ||
| Mdouble | thickness, | ||
| const ParticleSpecies * | s | ||
| ) |
Constructor in which all parameters of the screw are set.
| [in] | start | A Vec3D which denotes the centre of the lower end of the HorizontalScrew. |
| [in] | l | The length of the HorizontalScrew, must be positive. |
| [in] | r | The radius of the HorizontalScrew, must be positive. |
| [in] | n | The number of revelations of the HorizontalScrew, must be positive. |
| [in] | omega | The rotation speed of the HorizontalScrew in rev/s. |
| [in] | thickness | The thickness of the HorizontalScrew, must be non-negative. |
Make a HorizontalScrew by assigning all input parameters to the data-members of this class, and setting the offset_ to 0.
References bladeLength_, bladeMounts_, bladeWidth_, DEBUG, diffR_, l_, logger, lowerR_, minR_, n, n_, offset_, Eigen::internal::omega(), omega_, s, BaseWall::setSpecies(), oomph::CumulativeTimings::start(), start_, and thickness_.
| HorizontalScrew::~HorizontalScrew | ( | ) |
|
finalvirtual |
Copy this screw and return a pointer to the copy.
Implements BaseWall.
References HorizontalScrew().
|
finalvirtual |
Compute the distance from the HorizontalScrew 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.
| [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 HorizontalScrew. If there is a collision, this function also computes the distance between the BaseParticle and HorizontalScrew and the normal of the IntersectionOfWalls at the intersection point.
Implements BaseWall.
References atan2(), b, bladeLength_, bladeMounts_, bladeWidth_, cos(), diffR_, e(), boost::multiprecision::fabs(), k, l_, lowerR_, max, minR_, n_, Vec3D::normalise(), offset_, p, constants::pi, Eigen::numext::q, UniformPSDSelfTest::r, R, Eigen::bfloat16_impl::round(), mathsFunc::sign(), sin(), constants::sqr_pi, sqrt(), Eigen::square(), start_, thickness_, Vec3D::X, Vec3D::Y, Z, and Vec3D::Z.
| Mdouble HorizontalScrew::getLength | ( | ) | const |
|
finalvirtual |
Returns the name of the object, here the string "HorizontalScrew".
Implements BaseObject.
| Vec3D HorizontalScrew::getStart | ( | ) | const |
| void HorizontalScrew::move_time | ( | Mdouble | dt | ) |
Rotate the HorizontalScrew for a period dt, so that the offset_ changes with omega_*dt.
| [in] | dt | The time for which the HorizontalScrew has to be turned. |
References offset_, and omega_.
Referenced by HorizontalMixer::actionsAfterTimeStep(), and HorizontalMixer::setScrewWalls().
|
overridevirtual |
Reads a HorizontalScrew from an input stream, for example a restart file.
| [in,out] | is | Input stream from which the HorizontalScrew must be read. |
Reimplemented from BaseWall.
References bladeLength_, bladeMounts_, bladeWidth_, diffR_, i, l_, lowerR_, minR_, n, n_, offset_, omega_, BaseWall::read(), start_, oomph::Global_string_for_annotation::string(), thickness_, and calibrate::val.
| void HorizontalScrew::setBlades | ( | const Mdouble | bladeWidth, |
| const Mdouble | bladeLength, | ||
| const std::vector< Mdouble > | bladeMounts | ||
| ) |
References bladeLength_, bladeMounts_, and bladeWidth_.
|
overridevirtual |
Writes this HorizontalScrew to an output stream, for example a restart file.
| [in,out] | os | Output stream to which the HorizontalScrew must be written. |
Reimplemented from BaseWall.
References bladeLength_, bladeMounts_, bladeWidth_, diffR_, l_, lowerR_, minR_, n, n_, offset_, omega_, start_, thickness_, and BaseWall::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.
References b, bladeLength_, bladeMounts_, bladeWidth_, cos(), diffR_, l_, lowerR_, max, minR_, n_, Mesh_Parameters::nz, offset_, constants::pi, VTKContainer::points, Eigen::numext::q, UniformPSDSelfTest::r, sin(), start_, VTKContainer::triangleStrips, Vec3D::X, Vec3D::Y, and Vec3D::Z.
|
private |
The length of a blade (in the q-coordinate, which is a linear mapping from start.Z<z<start.Z+l to 0<q<1).
Referenced by getDistanceAndNormal(), HorizontalScrew(), read(), setBlades(), write(), and writeVTK().
|
private |
The starting point of a blade (in the q-coordinate, which is a linear mapping from start.Z<z<start.Z+l to 0<q<1)
Referenced by getDistanceAndNormal(), HorizontalScrew(), read(), setBlades(), write(), and writeVTK().
|
private |
The maximum radial width of a blade (in r).
Referenced by getDistanceAndNormal(), HorizontalScrew(), read(), setBlades(), write(), and writeVTK().
|
private |
Referenced by getDistanceAndNormal(), HorizontalScrew(), read(), write(), and writeVTK().
|
private |
The length of the HorizontalScrew.
Referenced by getDistanceAndNormal(), getLength(), HorizontalScrew(), read(), write(), and writeVTK().
|
private |
Referenced by getDistanceAndNormal(), HorizontalScrew(), read(), write(), and writeVTK().
|
private |
The outer radius of the HorizontalScrew.
Referenced by getDistanceAndNormal(), HorizontalScrew(), read(), write(), and writeVTK().
|
private |
The number of revelations.
Referenced by getDistanceAndNormal(), HorizontalScrew(), read(), write(), and writeVTK().
|
private |
The angle that describes how much the HorizontalScrew has turned, going from 0 to 1 for a rotation.
Referenced by getDistanceAndNormal(), HorizontalScrew(), move_time(), read(), write(), and writeVTK().
|
private |
Rotation speed in rev/s.
Referenced by HorizontalScrew(), move_time(), read(), and write().
|
private |
The centre of the lower end of the screw.
Referenced by getDistanceAndNormal(), getStart(), HorizontalScrew(), read(), write(), and writeVTK().
|
private |
The thickness of the HorizontalScrew.
Referenced by getDistanceAndNormal(), HorizontalScrew(), read(), and write().