MercuryDPM
Trunk
|
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>
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) |
![]() | |
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 |
void | removeRenderedWalls () |
void | renderWall (VTKContainer &vtk) |
void | addParticlesAtWall (unsigned numElements=50) |
void | setVelocityControl (Vec3D forceGoal, Vec3D gainFactor, Vec3D baseVelocity) |
![]() | |
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... | |
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... | |
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... | |
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 |
![]() | |
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 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
Definition at line 38 of file HorizontalScrew.h.
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.
Definition at line 37 of file HorizontalScrew.cc.
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. |
Definition at line 57 of file HorizontalScrew.cc.
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.
Definition at line 85 of file HorizontalScrew.cc.
References bladeLength_, bladeMounts_, bladeWidth_, DEBUG, diffR_, l_, logger, lowerR_, minR_, n_, offset_, omega_, BaseWall::setSpecies(), start_, and thickness_.
HorizontalScrew::~HorizontalScrew | ( | ) |
Default destructor.
Definition at line 103 of file HorizontalScrew.cc.
|
finalvirtual |
Copy this screw and return a pointer to the copy.
Implements BaseWall.
Definition at line 111 of file HorizontalScrew.cc.
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.
Definition at line 127 of file HorizontalScrew.cc.
References A, bladeLength_, bladeMounts_, bladeWidth_, mathsFunc::cos(), diffR_, BaseInteractable::getPosition(), BaseParticle::getWallInteractionRadius(), l_, lowerR_, minR_, n_, Vec3D::normalise(), offset_, constants::pi, R, helpers::round(), mathsFunc::sign(), mathsFunc::sin(), constants::sqr_pi, mathsFunc::square(), start_, thickness_, Vec3D::X, Vec3D::Y, Z, and Vec3D::Z.
Mdouble HorizontalScrew::getLength | ( | ) | const |
Returns the length of the HorizontalScrew.
Definition at line 263 of file HorizontalScrew.cc.
References l_.
|
finalvirtual |
Returns the name of the object, here the string "HorizontalScrew".
Implements BaseObject.
Definition at line 333 of file HorizontalScrew.cc.
Vec3D HorizontalScrew::getStart | ( | ) | const |
Returns the starting position of the HorizontalScrew.
Definition at line 268 of file HorizontalScrew.cc.
References start_.
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. |
Definition at line 276 of file HorizontalScrew.cc.
References offset_, and omega_.
|
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.
Definition at line 284 of file HorizontalScrew.cc.
References bladeLength_, bladeMounts_, bladeWidth_, diffR_, constants::i, l_, lowerR_, minR_, n_, offset_, omega_, BaseWall::read(), start_, and thickness_.
void HorizontalScrew::setBlades | ( | const Mdouble | bladeWidth, |
const Mdouble | bladeLength, | ||
const std::vector< Mdouble > | bladeMounts | ||
) |
Definition at line 338 of file HorizontalScrew.cc.
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.
Definition at line 311 of file HorizontalScrew.cc.
References bladeLength_, bladeMounts_, bladeWidth_, diffR_, l_, lowerR_, minR_, 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.
Definition at line 345 of file HorizontalScrew.cc.
References bladeLength_, bladeMounts_, bladeWidth_, mathsFunc::cos(), diffR_, l_, lowerR_, minR_, n_, offset_, constants::pi, VTKContainer::points, mathsFunc::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).
Definition at line 144 of file HorizontalScrew.h.
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)
Definition at line 148 of file HorizontalScrew.h.
Referenced by getDistanceAndNormal(), HorizontalScrew(), read(), setBlades(), write(), and writeVTK().
|
private |
The maximum radial width of a blade (in r).
Definition at line 140 of file HorizontalScrew.h.
Referenced by getDistanceAndNormal(), HorizontalScrew(), read(), setBlades(), write(), and writeVTK().
|
private |
Definition at line 120 of file HorizontalScrew.h.
Referenced by getDistanceAndNormal(), HorizontalScrew(), read(), write(), and writeVTK().
|
private |
The length of the HorizontalScrew.
Definition at line 114 of file HorizontalScrew.h.
Referenced by getDistanceAndNormal(), getLength(), HorizontalScrew(), read(), write(), and writeVTK().
|
private |
Definition at line 119 of file HorizontalScrew.h.
Referenced by getDistanceAndNormal(), HorizontalScrew(), read(), write(), and writeVTK().
|
private |
The outer radius of the HorizontalScrew.
Definition at line 118 of file HorizontalScrew.h.
Referenced by getDistanceAndNormal(), HorizontalScrew(), read(), write(), and writeVTK().
|
private |
The number of revelations.
Definition at line 124 of file HorizontalScrew.h.
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.
Definition at line 132 of file HorizontalScrew.h.
Referenced by getDistanceAndNormal(), HorizontalScrew(), move_time(), read(), write(), and writeVTK().
|
private |
Rotation speed in rev/s.
Definition at line 128 of file HorizontalScrew.h.
Referenced by HorizontalScrew(), move_time(), read(), and write().
|
private |
The centre of the lower end of the screw.
Definition at line 110 of file HorizontalScrew.h.
Referenced by getDistanceAndNormal(), getStart(), HorizontalScrew(), read(), write(), and writeVTK().
|
private |
The thickness of the HorizontalScrew.
Definition at line 136 of file HorizontalScrew.h.
Referenced by getDistanceAndNormal(), HorizontalScrew(), read(), and write().