MercuryDPM  Beta
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Pages
InfiniteWall Class Reference

This is a class defining walls. More...

#include <InfiniteWall.h>

+ Inheritance diagram for InfiniteWall:

Public Member Functions

 InfiniteWall ()
 Default constructor, the normal is infinitely long. More...
 
 InfiniteWall (const InfiniteWall &w)
 Copy constructor, copy the given wall. More...
 
virtual ~InfiniteWall ()
 Default destructor. More...
 
InfiniteWallcopy () const override
 Wall copy method. It calls the copy constructor of this Wall, useful for polymorphism. More...
 
void set (Vec3D normal, Vec3D point)
 Defines a standard wall, given an outward normal vector s.t. normal*x=normal*point for all x of the wall. More...
 
void setNormal (const Vec3D normal)
 Changes the normal of the InfiniteWall. More...
 
MERCURY_DEPRECATED void set (Vec3D normal, Mdouble position)
 Defines a standard wall by computing normal*position = point and using the overloaded function set(Vec3D, vec3D). More...
 
MERCURY_DEPRECATED void move (Mdouble position)
 Move the wall to a new position by giving the new position in the direction of the unit normal vector. More...
 
Mdouble getDistance (const Vec3D &otherPosition) const
 Returns the distance of the wall to the particle. More...
 
bool getDistanceAndNormal (const BaseParticle &p, Mdouble &distance, Vec3D &normal_return) const override
 Compute the distance from the wall for a given BaseParticle and return if there is a collision. If there is a collision, also return the normal vector. More...
 
void read (std::istream &is)
 Reads InfiniteWall from a restart file. More...
 
void oldRead (std::istream &is)
 Reads InfiniteWall from an old-style restart file. More...
 
void write (std::ostream &os) const
 Writes the InfiniteWall to an output stream, usually a restart file. More...
 
std::string getName () const override
 Returns the name of the object, in this case the string "InfiniteWall". More...
 
Vec3D getNormal () const
 Access function for normal. More...
 
BaseInteractiongetInteractionWith (BaseParticle *p, Mdouble timeStamp, InteractionHandler *interactionHandler)
 Look up the interaction between this wall and a BaseParticle at a certain timeStamp. 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...
 
virtual MERCURY_DEPRECATED void clear ()
 A function that removes all data from this BaseWall, so sets handler_ to nullptr. 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_
 
Mdouble factor_
 

Detailed Description

This is a class defining walls.

It defines the interaction of regular walls and periodic walls with particles as defined in Particle Modifications:

A standard wall is a plane defined as {x: normal*x=position}, with normal being the outward unit normal vector of the wall.

Please note that this wall is infinite and straight. A particle touches an infinite wall if position-normal*x<=radius.

Definition at line 43 of file InfiniteWall.h.

Constructor & Destructor Documentation

InfiniteWall::InfiniteWall ( )

Default constructor, the normal is infinitely long.

Definition at line 32 of file InfiniteWall.cc.

References DEBUG, factor_, and logger.

Referenced by copy().

33 {
34  factor_ = std::numeric_limits<double>::quiet_NaN();
35  logger(DEBUG, "InfiniteWall::InfiniteWall ) finished");
36 }
Mdouble factor_
Definition: InfiniteWall.h:145
Logger< MERCURY_LOGLEVEL > logger("MercuryKernel")
InfiniteWall::InfiniteWall ( const InfiniteWall w)

Copy constructor, copy the given wall.

Parameters
[in]wInfiniteWall that has to be copied.

First copy the attributes of the BaseWall, then copy the ones that are specific for the InfiniteWall.

Definition at line 43 of file InfiniteWall.cc.

References DEBUG, factor_, logger, and normal_.

44  : BaseWall(w)
45 {
46  normal_ = w.normal_;
47  factor_ = w.factor_;
48  logger(DEBUG, "InfiniteWall::InfiniteWall(const InfiniteWall &p) finished");
49 }
Mdouble factor_
Definition: InfiniteWall.h:145
Logger< MERCURY_LOGLEVEL > logger("MercuryKernel")
BaseWall()
Default constructor. It makes an empty BaseWall.
Definition: BaseWall.cc:31
InfiniteWall::~InfiniteWall ( )
virtual

Default destructor.

Definition at line 51 of file InfiniteWall.cc.

References DEBUG, and logger.

52 {
53  logger(DEBUG, "InfiniteWall::~InfiniteWall finished");
54 }
Logger< MERCURY_LOGLEVEL > logger("MercuryKernel")

Member Function Documentation

InfiniteWall * InfiniteWall::copy ( ) const
overridevirtual

Wall copy method. It calls the copy constructor of this Wall, useful for polymorphism.

Wall copy method. It calls the copy constructor of this Wall, useful for polymorphism

Implements BaseWall.

Definition at line 59 of file InfiniteWall.cc.

References InfiniteWall().

60 {
61  return new InfiniteWall(*this);
62 }
InfiniteWall()
Default constructor, the normal is infinitely long.
Definition: InfiniteWall.cc:32
Mdouble InfiniteWall::getDistance ( const Vec3D otherPosition) const

Returns the distance of the wall to the particle.

Parameters
[in]otherPositionThe position to which the distance must be computed to.
Returns
The distance of the wall to the particle.

Definition at line 111 of file InfiniteWall.cc.

References Vec3D::dot(), BaseInteractable::getPosition(), and normal_.

Referenced by getDistanceAndNormal(), and getInteractionWith().

112 {
113  return Vec3D::dot(getPosition()-otherPosition, normal_);
114 }
static Mdouble dot(const Vec3D &a, const Vec3D &b)
Calculates the dot product of two Vec3D: .
Definition: Vector.cc:187
const Vec3D & getPosition() const
Returns the position of this BaseInteractable.
bool InfiniteWall::getDistanceAndNormal ( const BaseParticle p,
Mdouble distance,
Vec3D normal_return 
) const
overridevirtual

Compute the distance from the wall for a given BaseParticle and return if there is a collision. If there is a collision, also return the normal vector.

Parameters
[in]pBaseParticle for which the distance to the wall must be computed.
[out]distanceDistance between the particle and the wall.
[out]normal_returnThe normal of this wall, will only be set if there is a collision.
Returns
A boolean value for whether or not there is a collision.

First the distance is checked. If there is no collision, this function will return false and give the distance. If there is a collision, the function will return true and give the distance and the normal vector of this wall. 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 128 of file InfiniteWall.cc.

References getDistance(), BaseInteractable::getPosition(), BaseParticle::getWallInteractionRadius(), and normal_.

129 {
130  distance = getDistance(p.getPosition());
131  if (distance >= p.getWallInteractionRadius())
132  return false;
133  normal_return = normal_;
134  return true;
135 }
Mdouble getDistance(const Vec3D &otherPosition) const
Returns the distance of the wall to the particle.
const Vec3D & getPosition() const
Returns the position of this BaseInteractable.
Mdouble getWallInteractionRadius() const
Returns the interaction radius for interaction with walls. See also BaseParticle::getInteractionRadiu...
BaseInteraction * InfiniteWall::getInteractionWith ( BaseParticle p,
Mdouble  timeStamp,
InteractionHandler interactionHandler 
)
virtual

Look up the interaction between this wall and a BaseParticle at a certain timeStamp.

Parameters
[in]pPointer to the BaseParticle which we want to check the interaction for.
[in]timeStampThe time at which we want to look at the interaction.
[in]interactionHandlerA pointer to the InteractionHandler in which the interaction can be found.
Returns
A pointer to the BaseInteraction that happened between this InfiniteWall and the BaseParticle at the timeStamp.
Todo:
{DK: What is the contact point for interactions with walls}

Implements BaseInteractable.

Definition at line 194 of file InfiniteWall.cc.

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

195 {
196  Mdouble distance = getDistance(p->getPosition());
197  if (distance < p->getWallInteractionRadius())
198  {
199  BaseInteraction* interaction = interactionHandler->getInteraction(p, this, timeStamp);
200  interaction->setNormal(-normal_);
201  interaction->setDistance(distance);
202  interaction->setOverlap(p->getRadius() - distance);
204 // interaction->setContactPoint(p->getPosition()-(p->getRadius()- 1.0 * interaction->getOverlap())*interaction->getNormal());
205  interaction->setContactPoint(p->getPosition()-(p->getRadius() - 0.5 * interaction->getOverlap())*interaction->getNormal());
206  return interaction;
207  }
208  else
209  {
210  return nullptr;
211  }
212 }
void setNormal(Vec3D normal)
Sets the normal vector between the two interacting objects.
void setOverlap(Mdouble overlap)
Set the overlap between the two interacting object.
Mdouble getDistance(const Vec3D &otherPosition) const
Returns the distance of the wall to the particle.
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.
std::string InfiniteWall::getName ( ) const
overridevirtual

Returns the name of the object, in this case the string "InfiniteWall".

Returns
The string "InfiniteWall", which is the name of this class.

Implements BaseObject.

Definition at line 174 of file InfiniteWall.cc.

175 {
176  return "InfiniteWall";
177 }
Vec3D InfiniteWall::getNormal ( ) const

Access function for normal.

Returns
The 3D vector that represents the normal to the wall.

Definition at line 182 of file InfiniteWall.cc.

References normal_.

183 {
184  return normal_;
185 }
void InfiniteWall::move ( Mdouble  positionInNormalDirection)

Move the wall to a new position by giving the new position in the direction of the unit normal vector.

Deprecated:
In Mercury 2, the user will have the new interface, namely move(Vec3D) that is implemented in BaseInteractable.
Parameters
[in]positionInNormalDirectionThe position of the wall in the direction of the normal vector.

Definition at line 101 of file InfiniteWall.cc.

References factor_, logger, normal_, BaseInteractable::setPosition(), and WARN.

102 {
103  logger(WARN, "InfiniteWall::move(Mdouble) is deprecated. Use move(Vec3D) instead.");
104  setPosition(positionInNormalDirection * normal_ / factor_);
105 }
Mdouble factor_
Definition: InfiniteWall.h:145
Logger< MERCURY_LOGLEVEL > logger("MercuryKernel")
void setPosition(const Vec3D &position)
Sets the position of this BaseInteractable.
void InfiniteWall::oldRead ( std::istream &  is)

Reads InfiniteWall from an old-style restart file.

Parameters
[in]isThe input stream from which the InfiniteWall old style is read.

Definition at line 151 of file InfiniteWall.cc.

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

152 {
153  std::string dummy;
154  Vec3D velocity;
155  Vec3D position;
156  is >> dummy >> normal_ >> dummy >> position >> dummy >> velocity;
157  setPosition(position);
158  setVelocity(velocity);
159 }
void setVelocity(const Vec3D &velocity)
set the velocity of the BaseInteractable.
void setPosition(const Vec3D &position)
Sets the position of this BaseInteractable.
Implementation of a 3D vector (by Vitaliy).
Definition: Vector.h:45
void InfiniteWall::read ( std::istream &  is)
virtual

Reads InfiniteWall from a restart file.

Parameters
[in]isThe input stream from which the InfiniteWall is read.

Reimplemented from BaseWall.

Definition at line 140 of file InfiniteWall.cc.

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

141 {
142  BaseWall::read(is);
143  std::string dummy;
144  is >> dummy >> normal_;
145  is >> dummy >> factor_;
146 }
Mdouble factor_
Definition: InfiniteWall.h:145
void read(std::istream &is)
Function that reads a BaseWall from an input stream, usually a restart file.
Definition: BaseWall.cc:60
void InfiniteWall::set ( Vec3D  normal,
Vec3D  point 
)

Defines a standard wall, given an outward normal vector s.t. normal*x=normal*point for all x of the wall.

Definition at line 70 of file InfiniteWall.cc.

References setNormal(), and BaseInteractable::setPosition().

Referenced by Chute::createBottom(), WallHandler::readOldObject(), DPMBase::readParAndIniFiles(), set(), ChuteBottom::setupInitialConditions(), and Chute::setupSideWalls().

71 {
72  setNormal(normal);
73  setPosition(point);
74 }
void setNormal(const Vec3D normal)
Changes the normal of the InfiniteWall.
Definition: InfiniteWall.cc:79
void setPosition(const Vec3D &position)
Sets the position of this BaseInteractable.
void InfiniteWall::set ( Vec3D  normal,
Mdouble  positionInNormalDirection 
)

Defines a standard wall by computing normal*position = point and using the overloaded function set(Vec3D, vec3D).

Deprecated:
In Mercury 2, the user will have to use the new interface, namely set(Vec3D, Vec3D).

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

Parameters
[in]normalA Vec3D that represents the normal vector to the wall.
[in]positionInNormalDirectionThe position of the wall in the direction of the normal vector.

Definition at line 91 of file InfiniteWall.cc.

References logger, set(), and WARN.

92 {
93  logger(WARN, "InfiniteWall::set(Vec3D, Mdouble) is deprecated. Use set(Vec3D, Vec3D) instead.");
94  set(normal, positionInNormalDirection*normal);
95 }
Logger< MERCURY_LOGLEVEL > logger("MercuryKernel")
void set(Vec3D normal, Vec3D point)
Defines a standard wall, given an outward normal vector s.t. normal*x=normal*point for all x of the w...
Definition: InfiniteWall.cc:70
void InfiniteWall::setNormal ( const Vec3D  normal)

Changes the normal of the InfiniteWall.

Parameters
[in]normalThe vector normal to the wall.

Definition at line 79 of file InfiniteWall.cc.

References factor_, Vec3D::getLength(), and normal_.

Referenced by set().

80 {
81  factor_ = 1. / Vec3D::getLength(normal);
82  normal_ = normal * factor_;
83 }
Mdouble factor_
Definition: InfiniteWall.h:145
Mdouble getLength() const
Calculates the length of this Vec3D: .
Definition: Vector.cc:416
void InfiniteWall::write ( std::ostream &  os) const
virtual

Writes the InfiniteWall to an output stream, usually a restart file.

Parameters
[in]osThe output stream the InfiniteWall is written to.

Reimplemented from BaseWall.

Definition at line 164 of file InfiniteWall.cc.

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

165 {
166  BaseWall::write(os);
167  os << " normal " << normal_
168  << " factor "<< factor_;
169 }
Mdouble factor_
Definition: InfiniteWall.h:145
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 InfiniteWall::factor_
private

This is the factor used to rescale the normal given by the user to a unit vector. It is only used by the deprecated function move(Mdouble).

Definition at line 145 of file InfiniteWall.h.

Referenced by InfiniteWall(), move(), read(), setNormal(), and write().

Vec3D InfiniteWall::normal_
private

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

Definition at line 139 of file InfiniteWall.h.

Referenced by getDistance(), getDistanceAndNormal(), getInteractionWith(), getNormal(), InfiniteWall(), move(), oldRead(), read(), setNormal(), and write().


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