MercuryDPM  Trunk
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Pages
InfiniteWallWithHole Class Reference

#include <InfiniteWallWithHole.h>

+ Inheritance diagram for InfiniteWallWithHole:

Public Member Functions

 InfiniteWallWithHole ()
 default constructor More...
 
 InfiniteWallWithHole (Vec3D normal, Mdouble position, Mdouble holeRadius)
 
 InfiniteWallWithHole (const InfiniteWallWithHole &p)
 
InfiniteWallWithHolecopy () const override
 Wall copy method. It calls the copy contrustor of this Wall, usefull for polymorfism. More...
 
void set (Vec3D normal, Mdouble position, Mdouble holeRadius)
 Defines a standard wall, given an outward normal vector s. t. normal*x=position. More...
 
void moveTo (Mdouble position)
 Allows the wall to be moved to a new position. More...
 
void move_time (Mdouble dt)
 Allows the wall to be moved to a new position (also orthogonal to the normal), and setting the velocity note: I commented this function out as it does not add new functionality (instead, BaseInteractable::move(velocity*dt) can be used), and it hides the virtual function BaseInteractable::move. If this is really needed, please add it again. More...
 
Mdouble getWallDistance (const Vec3D &position) const
 Returns the distance of the wall to the particle. More...
 
Mdouble getHoleDistance (const Vec3D &position) const
 
bool getDistanceAndNormal (const BaseParticle &P, Mdouble &distance, Vec3D &normal_return) const override
 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. More...
 
void read (std::istream &is) override
 reads wall More...
 
void oldRead (std::istream &is)
 reads wall More...
 
void write (std::ostream &os) const override
 outputs wall More...
 
std::string getName () const override
 Returns the name of the object. More...
 
Vec3D getNormal ()
 access function for normal More...
 
Mdouble getPosition ()
 access function for position More...
 
- 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...
 
WallHandlergetHandler () 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 BaseInteractiongetInteractionWithSuperQuad (SuperQuadricParticle *p, unsigned timeStamp, InteractionHandler *interactionHandler)
 
virtual void writeVTK (VTKContainer &vtk) const
 
void getVTK (std::vector< Vec3D > &points, std::vector< std::vector< double >> &triangleStrips)
 
const Vec3D getAxis () const
 
BaseInteractiongetInteractionWith (BaseParticle *p, unsigned timeStamp, InteractionHandler *interactionHandler) override
 Returns the interaction between this wall and a given particle, nullptr if there is no interaction. More...
 
bool getVTKVisibility () const
 
void setVTKVisibility (bool vtkVisibility)
 
void addRenderedWall (BaseWall *w)
 
BaseWallgetRenderedWall (size_t i) const
 
void removeRenderedWalls ()
 
void renderWall (VTKContainer &vtk)
 
void addParticlesAtWall (unsigned numElements=50)
 
void setVelocityControl (Vec3D forceGoal, Vec3D gainFactor, Vec3D baseVelocity)
 
- 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 ParticleSpeciesgetSpecies () const
 Returns a pointer to the species of this BaseInteractable. More...
 
void setSpecies (const ParticleSpecies *species)
 Sets the species of this BaseInteractable. More...
 
const Vec3DgetForce () const
 Returns the force on this BaseInteractable. More...
 
const Vec3DgetTorque () 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 Vec3DgetPosition () const
 Returns the position of this BaseInteractable. More...
 
const QuaterniongetOrientation () 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 Vec3DgetVelocity () const
 Returns the velocity of this interactable. More...
 
virtual const Vec3DgetAngularVelocity () 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
 
- 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 normal_
 Outward normal vector, does not have to be a unit vector. More...
 
Mdouble factor_
 
Mdouble position_
 position n*x=p More...
 
Mdouble holeRadius_
 

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...
 

Detailed Description

Deprecated:
Use AxisymmetricIntersectionOfWalls instead.

Definition at line 37 of file InfiniteWallWithHole.h.

Constructor & Destructor Documentation

InfiniteWallWithHole::InfiniteWallWithHole ( )

default constructor

Definition at line 32 of file InfiniteWallWithHole.cc.

References factor_, holeRadius_, and position_.

Referenced by copy().

33  : BaseWall()
34 {
35  factor_ = std::numeric_limits<double>::quiet_NaN();
36  position_ = std::numeric_limits<double>::quiet_NaN();
37  holeRadius_ = std::numeric_limits<double>::quiet_NaN();
38 #ifdef DEBUG_CONSTRUCTOR
39  std::cout<<"InfiniteWall () finished"<<std::endl;
40 #endif
41 }
Mdouble position_
position n*x=p
BaseWall()
Default constructor.
Definition: BaseWall.cc:36
InfiniteWallWithHole::InfiniteWallWithHole ( Vec3D  normal,
Mdouble  position,
Mdouble  holeRadius 
)

Definition at line 43 of file InfiniteWallWithHole.cc.

References set().

44  : BaseWall()
45 {
46  set(normal, position, holeRadius);
47 #ifdef DEBUG_CONSTRUCTOR
48  std::cout<<"InfiniteWallWithHole(Vec3D normal, Mdouble position, Mdouble holeRadius) finished"<<std::endl;
49 #endif
50 }
void set(Vec3D normal, Mdouble position, Mdouble holeRadius)
Defines a standard wall, given an outward normal vector s. t. normal*x=position.
BaseWall()
Default constructor.
Definition: BaseWall.cc:36
InfiniteWallWithHole::InfiniteWallWithHole ( const InfiniteWallWithHole p)

Definition at line 52 of file InfiniteWallWithHole.cc.

References factor_, holeRadius_, normal_, and position_.

53  : BaseWall(p)
54 {
55  normal_ = p.normal_;
56  position_ = p.position_;
57  factor_ = p.factor_;
59 #ifdef DEBUG_CONSTRUCTOR
60  std::cout<<"InfiniteWall (const InfiniteWall &p) finished"<<std::endl;
61 #endif
62 }
Vec3D normal_
Outward normal vector, does not have to be a unit vector.
Mdouble position_
position n*x=p
BaseWall()
Default constructor.
Definition: BaseWall.cc:36

Member Function Documentation

InfiniteWallWithHole * InfiniteWallWithHole::copy ( ) const
overridevirtual

Wall copy method. It calls the copy contrustor of this Wall, usefull for polymorfism.

Implements BaseWall.

Definition at line 65 of file InfiniteWallWithHole.cc.

References InfiniteWallWithHole().

66 {
67  return new InfiniteWallWithHole(*this);
68 }
InfiniteWallWithHole()
default constructor
bool InfiniteWallWithHole::getDistanceAndNormal ( const BaseParticle P,
Mdouble distance,
Vec3D normal_return 
) const
overridevirtual

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.

Definition at line 114 of file InfiniteWallWithHole.cc.

References mathsFunc::cos(), getHoleDistance(), Vec3D::getLength(), BaseInteractable::getPosition(), BaseParticle::getRadius(), getWallDistance(), holeRadius_, normal_, position_, mathsFunc::sin(), Vec3D::X, Vec3D::Y, and Vec3D::Z.

115 {
116  double wallDistance = getWallDistance(P.getPosition());
117  if (wallDistance >= P.getRadius())
118  return false;
119 
120  double holeDistance = getHoleDistance(P.getPosition());
121  if (holeDistance >= P.getRadius())
122  return false;
123 
124  if (wallDistance > 0 && holeDistance > 0)
125  {
126  distance = sqrt(pow(wallDistance, 2) + pow(holeDistance, 2));
127  Vec3D ContactPoint;
128  double alpha = atan2(P.getPosition().Y, P.getPosition().X);
129  ContactPoint.X = holeRadius_ * cos(alpha);
130  ContactPoint.Y = holeRadius_ * sin(alpha);
131  ContactPoint.Z = position_;
132  //std::cout<<"ContactPoint="<<ContactPoint<<" Particle position="<<P.getPosition()<<std::endl;
133  normal_return = ContactPoint - P.getPosition();
134  normal_return /= normal_return.getLength();
135  //std::cout<<"Corner collision normal="<<normal_return<<std::endl;
136  return true;
137  }
138  else if (wallDistance > holeDistance)
139  {
140  distance = wallDistance;
141  normal_return = normal_;
142  //std::cout<<"Wall collision normal="<<normal_return<<std::endl;
143  return true;
144  }
145  else
146  {
147  distance = holeDistance;
148  normal_return.X = P.getPosition().X / (holeRadius_ - holeDistance);
149  normal_return.Y = P.getPosition().Y / (holeRadius_ - holeDistance);
150  normal_return.Z = 0;
151  //std::cout<<"Hole collision normal="<<normal_return<<std::endl;
152  return true;
153  }
154 }
const Vec3D & getPosition() const
Returns the position of this BaseInteractable.
Mdouble X
the vector components
Definition: Vector.h:65
Vec3D normal_
Outward normal vector, does not have to be a unit vector.
static Mdouble getLength(const Vec3D &a)
Calculates the length of a Vec3D: .
Definition: Vector.cc:331
Mdouble cos(Mdouble x)
Definition: ExtendedMath.cc:64
Mdouble getHoleDistance(const Vec3D &position) const
Mdouble sin(Mdouble x)
Definition: ExtendedMath.cc:44
Mdouble position_
position n*x=p
Mdouble getRadius() const
Returns the particle's radius.
Definition: BaseParticle.h:345
Mdouble Y
Definition: Vector.h:65
Definition: Vector.h:49
Mdouble Z
Definition: Vector.h:65
Mdouble getWallDistance(const Vec3D &position) const
Returns the distance of the wall to the particle.
Mdouble InfiniteWallWithHole::getHoleDistance ( const Vec3D position) const

Definition at line 108 of file InfiniteWallWithHole.cc.

References holeRadius_, Vec3D::X, and Vec3D::Y.

Referenced by getDistanceAndNormal().

109 {
110  return holeRadius_ - sqrt(pow(position.X, 2) + pow(position.Y, 2));
111 }
Mdouble X
the vector components
Definition: Vector.h:65
Mdouble Y
Definition: Vector.h:65
std::string InfiniteWallWithHole::getName ( ) const
overridevirtual

Returns the name of the object.

Implements BaseObject.

Definition at line 185 of file InfiniteWallWithHole.cc.

186 {
187  return "InfiniteWallWithHole";
188 }
Vec3D InfiniteWallWithHole::getNormal ( )

access function for normal

Definition at line 191 of file InfiniteWallWithHole.cc.

References normal_.

192 {
193  return normal_;
194 }
Vec3D normal_
Outward normal vector, does not have to be a unit vector.
Mdouble InfiniteWallWithHole::getPosition ( )

access function for position

Definition at line 197 of file InfiniteWallWithHole.cc.

References position_.

198 {
199  return position_;
200 }
Mdouble position_
position n*x=p
Mdouble InfiniteWallWithHole::getWallDistance ( const Vec3D position) const

Returns the distance of the wall to the particle.

Definition at line 103 of file InfiniteWallWithHole.cc.

References Vec3D::dot(), normal_, and position_.

Referenced by getDistanceAndNormal().

104 {
105  return position_ - Vec3D::dot(position, normal_);
106 }
static Mdouble dot(const Vec3D &a, const Vec3D &b)
Calculates the dot product of two Vec3D: .
Definition: Vector.cc:76
Vec3D normal_
Outward normal vector, does not have to be a unit vector.
Mdouble position_
position n*x=p
void InfiniteWallWithHole::move_time ( Mdouble  dt)

Allows the wall to be moved to a new position (also orthogonal to the normal), and setting the velocity note: I commented this function out as it does not add new functionality (instead, BaseInteractable::move(velocity*dt) can be used), and it hides the virtual function BaseInteractable::move. If this is really needed, please add it again.

Author
weinhartt

Allows the wall to be moved with time

Todo:
TW: generalize the move function for all walls Allows the wall to be moved with time

Definition at line 97 of file InfiniteWallWithHole.cc.

References Vec3D::dot(), BaseInteractable::getVelocity(), normal_, and position_.

98 {
100 }
static Mdouble dot(const Vec3D &a, const Vec3D &b)
Calculates the dot product of two Vec3D: .
Definition: Vector.cc:76
Vec3D normal_
Outward normal vector, does not have to be a unit vector.
Mdouble position_
position n*x=p
virtual const Vec3D & getVelocity() const
Returns the velocity of this interactable.
void InfiniteWallWithHole::moveTo ( Mdouble  position)

Allows the wall to be moved to a new position.

Definition at line 82 of file InfiniteWallWithHole.cc.

References factor_, and position_.

83 {
84  position_ = position * factor_;
85 }
Mdouble position_
position n*x=p
void InfiniteWallWithHole::oldRead ( std::istream &  is)

reads wall

Definition at line 167 of file InfiniteWallWithHole.cc.

References normal_, position_, and BaseInteractable::setVelocity().

168 {
169  std::string dummy;
170  Vec3D velocity;
171  is >> dummy >> normal_ >> dummy >> position_ >> dummy >> velocity;
172  setVelocity(velocity);
173 }
void setVelocity(const Vec3D &velocity)
set the velocity of the BaseInteractable.
Vec3D normal_
Outward normal vector, does not have to be a unit vector.
Mdouble position_
position n*x=p
Definition: Vector.h:49
void InfiniteWallWithHole::read ( std::istream &  is)
overridevirtual

reads wall

Reimplemented from BaseWall.

Definition at line 156 of file InfiniteWallWithHole.cc.

References factor_, holeRadius_, normal_, position_, and BaseWall::read().

157 {
158  BaseWall::read(is);
159  std::string dummy;
160  is >> dummy >> normal_
161  >> dummy >> factor_
162  >> dummy >> position_
163  >> dummy >> holeRadius_;
164 }
Vec3D normal_
Outward normal vector, does not have to be a unit vector.
Mdouble position_
position n*x=p
void read(std::istream &is) override
Function that reads a BaseWall from an input stream, usually a restart file.
Definition: BaseWall.cc:80
void InfiniteWallWithHole::set ( Vec3D  normal,
Mdouble  position,
Mdouble  holeRadius 
)

Defines a standard wall, given an outward normal vector s. t. normal*x=position.

Defines a standard wall, given an outward normal vector s.

t. normal*x=position

Todo:
Since InfiniteWall:set is deprecated, should we deprecate this format as well (and similar formats in other walls)?
Author
weinhartt

Definition at line 72 of file InfiniteWallWithHole.cc.

References Vec3D::dot(), factor_, holeRadius_, normal_, and position_.

Referenced by InfiniteWallWithHole().

73 {
74  //factor is used to set n to unit length
75  factor_ = 1. / sqrt(Vec3D::dot(normal, normal));
76  normal_ = normal * factor_;
77  position_ = position * factor_;
78  holeRadius_ = holeRadius;
79 }
static Mdouble dot(const Vec3D &a, const Vec3D &b)
Calculates the dot product of two Vec3D: .
Definition: Vector.cc:76
Vec3D normal_
Outward normal vector, does not have to be a unit vector.
Mdouble position_
position n*x=p
void InfiniteWallWithHole::write ( std::ostream &  os) const
overridevirtual

outputs wall

Reimplemented from BaseWall.

Definition at line 176 of file InfiniteWallWithHole.cc.

References factor_, holeRadius_, normal_, position_, and BaseWall::write().

177 {
178  BaseWall::write(os);
179  os << " normal " << normal_
180  << " factor " << factor_
181  << " position " << position_
182  << " holeRadius " << holeRadius_;
183 }
void write(std::ostream &os) const override
Function that writes a BaseWall to an output stream, usually a restart file.
Definition: BaseWall.cc:102
Vec3D normal_
Outward normal vector, does not have to be a unit vector.
Mdouble position_
position n*x=p

Member Data Documentation

Mdouble InfiniteWallWithHole::factor_
private

The factor that needs to be multiplied with normal_ to make it a unit vector.

Definition at line 136 of file InfiniteWallWithHole.h.

Referenced by InfiniteWallWithHole(), moveTo(), read(), set(), and write().

Mdouble InfiniteWallWithHole::holeRadius_
private
Vec3D InfiniteWallWithHole::normal_
private

Outward normal vector, does not have to be a unit vector.

Definition at line 132 of file InfiniteWallWithHole.h.

Referenced by getDistanceAndNormal(), getNormal(), getWallDistance(), InfiniteWallWithHole(), move_time(), oldRead(), read(), set(), and write().

Mdouble InfiniteWallWithHole::position_
private

The documentation for this class was generated from the following files: