MercuryDPM  Beta
 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
 Wall copy method. It calls the copy contrustor of this Wall, usefull for polymorfism. More...
 
void clear ()
 A function that removes all data from this BaseWall, so sets handler_ to nullptr. 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
 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...
 
BaseInteractiongetInteractionWith (BaseParticle *P, Mdouble timeStamp, InteractionHandler *interactionHandler)
 Returns the interaction between this object and a given BaseParticle. More...
 
void read (std::istream &is)
 reads wall More...
 
void oldRead (std::istream &is)
 reads wall More...
 
void write (std::ostream &os) const
 outputs wall More...
 
virtual std::string getName () const
 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. It makes an empty BaseWall. More...
 
 BaseWall (const BaseWall &w)
 Copy constructor. More...
 
virtual ~BaseWall ()
 Default destructor. More...
 
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)
 Define the species of this wall using the index of the species in the SpeciesHandler in this DPMBase. More...
 
void setSpecies (const ParticleSpecies *species)
 Define the species of this wall. More...
 
- Public Member Functions inherited from BaseInteractable
 BaseInteractable ()
 Default BaseInteractable constructor, it simply creates an empty BaseInteractable. More...
 
 BaseInteractable (const BaseInteractable &p)
 Copy constructor. It copies the BaseInteractable and all objects it contains. More...
 
virtual ~BaseInteractable ()
 Destructor, it simply destructs the BaseInteractable and all the objects it contains. More...
 
unsigned int getIndSpecies () const
 Returns the index of the Species of this BaseInteractable. 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 (Vec3D force)
 Sets the force on this BaseInteractable. More...
 
void setTorque (Vec3D torque)
 Sets the torque on this BaseInteractable. More...
 
void addForce (Vec3D addForce)
 Adds an amount to the force on this BaseInteractable. More...
 
void addTorque (Vec3D addTorque)
 Adds an amount to the torque on this BaseInteractable. More...
 
const Vec3DgetPosition () const
 Returns the position of this BaseInteractable. More...
 
const Vec3DgetOrientation () const
 Returns the orientation of this BaseInteractable. More...
 
void setPosition (const Vec3D &position)
 Sets the position of this BaseInteractable. More...
 
void setOrientation (const Vec3D &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...
 
void rotate (const Vec3D &rotate)
 Rotates this BaseInteractable. More...
 
const std::list
< BaseInteraction * > & 
getInteractions () const
 Returns a reference to the list of interactions in this BaseInteractable. 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 (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 (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 (std::function< Vec3D(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 (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...
 
- Public Member Functions inherited from BaseObject
 BaseObject ()
 Default constructor. More...
 
 BaseObject (const BaseObject &p)
 Copy constructor, copies all the objects BaseObject contains. More...
 
virtual ~BaseObject ()
 virtual destructor More...
 
virtual void moveInHandler (const unsigned int index)
 Except that it is virtual, it does the same thing as setIndex() does. More...
 
void setIndex (const unsigned int index)
 Allows one to assign an index to an object in the handler/container. More...
 
void setId (const unsigned int 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...
 

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_
 

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. It makes an empty BaseWall.
Definition: BaseWall.cc:31
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. It makes an empty BaseWall.
Definition: BaseWall.cc:31
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. It makes an empty BaseWall.
Definition: BaseWall.cc:31

Member Function Documentation

void InfiniteWallWithHole::clear ( )
virtual

A function that removes all data from this BaseWall, so sets handler_ to nullptr.

Deprecated:
Please don't use any clear() anymore, it will be gone soon.

Reimplemented from BaseWall.

Definition at line 70 of file InfiniteWallWithHole.cc.

71 {
72 }
InfiniteWallWithHole * InfiniteWallWithHole::copy ( ) const
virtual

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
virtual

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 118 of file InfiniteWallWithHole.cc.

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

Referenced by getInteractionWith().

119 {
120  double wallDistance = getWallDistance(P.getPosition());
121  if (wallDistance >= P.getRadius())
122  return false;
123 
124  double holeDistance = getHoleDistance(P.getPosition());
125  if (holeDistance >= P.getRadius())
126  return false;
127 
128  if (wallDistance > 0 && holeDistance > 0)
129  {
130  distance = sqrt(pow(wallDistance, 2) + pow(holeDistance, 2));
131  Vec3D ContactPoint;
132  double alpha = atan2(P.getPosition().Y, P.getPosition().X);
133  ContactPoint.X = holeRadius_ * cos(alpha);
134  ContactPoint.Y = holeRadius_ * sin(alpha);
135  ContactPoint.Z = position_;
136  //std::cout<<"ContactPoint="<<ContactPoint<<" Particle position="<<P.getPosition()<<std::endl;
137  normal_return = ContactPoint - P.getPosition();
138  normal_return /= normal_return.getLength();
139  //std::cout<<"Corner collision normal="<<normal_return<<std::endl;
140  return true;
141  }
142  else if (wallDistance > holeDistance)
143  {
144  distance = wallDistance;
145  normal_return = normal_;
146  //std::cout<<"Wall collision normal="<<normal_return<<std::endl;
147  return true;
148  }
149  else
150  {
151  distance = holeDistance;
152  normal_return.X = P.getPosition().X / (holeRadius_ - holeDistance);
153  normal_return.Y = P.getPosition().Y / (holeRadius_ - holeDistance);
154  normal_return.Z = 0;
155  //std::cout<<"Hole collision normal="<<normal_return<<std::endl;
156  return true;
157  }
158 }
Mdouble X
the vector components
Definition: Vector.h:52
Vec3D normal_
Outward normal vector, does not have to be a unit vector.
const Vec3D & getPosition() const
Returns the position of this BaseInteractable.
static Mdouble getLength(const Vec3D &a)
Calculates the length of a Vec3D: .
Definition: Vector.cc:427
Mdouble getHoleDistance(const Vec3D &position) const
Mdouble position_
position n*x=p
Mdouble getRadius() const
Returns the particle's radius_.
Mdouble Y
Definition: Vector.h:52
Implementation of a 3D vector (by Vitaliy).
Definition: Vector.h:45
Mdouble Z
Definition: Vector.h:52
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 112 of file InfiniteWallWithHole.cc.

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

Referenced by getDistanceAndNormal().

113 {
114  return holeRadius_ - sqrt(pow(position.X, 2) + pow(position.Y, 2));
115 }
Mdouble X
the vector components
Definition: Vector.h:52
Mdouble Y
Definition: Vector.h:52
BaseInteraction * InfiniteWallWithHole::getInteractionWith ( BaseParticle P,
Mdouble  timeStamp,
InteractionHandler interactionHandler 
)
virtual

Returns the interaction between this object and a given BaseParticle.

Todo:

TW make sure this function sets normal, distance, overlap, contact point

AT why is this a BaseParticle and not a BaseInteratable.

todo{DK: What is the contact point for interactions with walls}

Implements BaseInteractable.

Definition at line 160 of file InfiniteWallWithHole.cc.

References getDistanceAndNormal(), InteractionHandler::getInteraction(), BaseInteraction::getNormal(), BaseInteraction::getOverlap(), BaseInteractable::getPosition(), BaseParticle::getRadius(), BaseInteraction::setContactPoint(), BaseInteraction::setDistance(), BaseInteraction::setNormal(), and BaseInteraction::setOverlap().

161 {
162  Mdouble distance;
163  Vec3D normal;
164  if (getDistanceAndNormal(*P,distance,normal))
165  {
166  BaseInteraction* C = interactionHandler->getInteraction(P, this, timeStamp);
167  C->setNormal(-normal);
168  C->setDistance(distance);
169  C->setOverlap(P->getRadius() - distance);
171  C->setContactPoint(P->getPosition()-(P->getRadius()- 0.5 * C->getOverlap())*C->getNormal());
172  return C;
173  }
174  else
175  {
176  return 0;
177  }
178 }
void setNormal(Vec3D normal)
Sets the normal vector between the two interacting objects.
bool getDistanceAndNormal(const BaseParticle &P, Mdouble &distance, Vec3D &normal_return) const
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.
void setOverlap(Mdouble overlap)
Set the overlap between the two interacting object.
BaseInteraction * getInteraction(BaseInteractable *P, BaseInteractable *I, Mdouble timeStamp)
Returns the Interaction between the BaseInteractable's P and I.
double Mdouble
void setContactPoint(Vec3D contactPoint)
Set the location of the contact point between the two interacting objects.
void setDistance(Mdouble distance)
Sets the interaction distance between the two interacting objects.
const Vec3D & getPosition() const
Returns the position of this BaseInteractable.
Stores information about interactions between two interactable objects; often particles but could be ...
const Vec3D & getNormal() const
Gets the normal vector between the two interacting objects.
Mdouble getRadius() const
Returns the particle's radius_.
Mdouble getOverlap() const
Returns a Mdouble with the current overlap between the two interacting objects.
Implementation of a 3D vector (by Vitaliy).
Definition: Vector.h:45
std::string InfiniteWallWithHole::getName ( ) const
virtual

Returns the name of the object.

Implements BaseObject.

Definition at line 209 of file InfiniteWallWithHole.cc.

210 {
211  return "InfiniteWallWithHole";
212 }
Vec3D InfiniteWallWithHole::getNormal ( )

access function for normal

Definition at line 215 of file InfiniteWallWithHole.cc.

References normal_.

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

access function for position

Definition at line 221 of file InfiniteWallWithHole.cc.

References position_.

222 {
223  return position_;
224 }
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 107 of file InfiniteWallWithHole.cc.

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

Referenced by getDistanceAndNormal().

108 {
109  return position_ - Vec3D::dot(position, normal_);
110 }
static Mdouble dot(const Vec3D &a, const Vec3D &b)
Calculates the dot product of two Vec3D: .
Definition: Vector.cc:187
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 101 of file InfiniteWallWithHole.cc.

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

102 {
104 }
static Mdouble dot(const Vec3D &a, const Vec3D &b)
Calculates the dot product of two Vec3D: .
Definition: Vector.cc:187
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 86 of file InfiniteWallWithHole.cc.

References factor_, and position_.

87 {
88  position_ = position * factor_;
89 }
Mdouble position_
position n*x=p
void InfiniteWallWithHole::oldRead ( std::istream &  is)

reads wall

Definition at line 191 of file InfiniteWallWithHole.cc.

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

192 {
193  std::string dummy;
194  Vec3D velocity;
195  is >> dummy >> normal_ >> dummy >> position_ >> dummy >> velocity;
196  setVelocity(velocity);
197 }
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
Implementation of a 3D vector (by Vitaliy).
Definition: Vector.h:45
void InfiniteWallWithHole::read ( std::istream &  is)
virtual

reads wall

Reimplemented from BaseWall.

Definition at line 180 of file InfiniteWallWithHole.cc.

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

181 {
182  BaseWall::read(is);
183  std::string dummy;
184  is >> dummy >> normal_
185  >> dummy >> factor_
186  >> dummy >> position_
187  >> dummy >> holeRadius_;
188 }
Vec3D normal_
Outward normal vector, does not have to be a unit vector.
Mdouble position_
position n*x=p
void read(std::istream &is)
Function that reads a BaseWall from an input stream, usually a restart file.
Definition: BaseWall.cc:60
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 76 of file InfiniteWallWithHole.cc.

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

Referenced by InfiniteWallWithHole().

77 {
78  //factor is used to set n to unit length
79  factor_ = 1. / sqrt(Vec3D::dot(normal, normal));
80  normal_ = normal * factor_;
81  position_ = position * factor_;
82  holeRadius_ = holeRadius;
83 }
static Mdouble dot(const Vec3D &a, const Vec3D &b)
Calculates the dot product of two Vec3D: .
Definition: Vector.cc:187
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
virtual

outputs wall

Reimplemented from BaseWall.

Definition at line 200 of file InfiniteWallWithHole.cc.

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

201  {
202  BaseWall::write(os);
203  os << " normal " << normal_
204  << " factor " << factor_
205  << " position " << position_
206  << " holeRadius " << holeRadius_;
207 }
Vec3D normal_
Outward normal vector, does not have to be a unit vector.
Mdouble position_
position n*x=p
void write(std::ostream &os) const
Function that writes a BaseWall to an output stream, usually a restart file.
Definition: BaseWall.cc:68

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 146 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 142 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: