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

A AxisymmetricIntersectionOfWalls is a axisymmetric wall, defined by rotating a twodimensional IntersectionOfWalls around a symmetry axis. More...

#include <AxisymmetricIntersectionOfWalls.h>

+ Inheritance diagram for AxisymmetricIntersectionOfWalls:

Public Member Functions

 AxisymmetricIntersectionOfWalls ()
 Default constructor. More...
 
 AxisymmetricIntersectionOfWalls (const AxisymmetricIntersectionOfWalls &p)
 Copy constructor. More...
 
 ~AxisymmetricIntersectionOfWalls ()
 Destructor. More...
 
AxisymmetricIntersectionOfWallsoperator= (const AxisymmetricIntersectionOfWalls &other)
 Copy assignment operator. More...
 
AxisymmetricIntersectionOfWallscopy () const final
 Wall copy method. It calls the copy constructor of this Wall, useful for polymorphism. More...
 
bool getDistanceAndNormal (const BaseParticle &P, Mdouble &distance, Vec3D &normal_return) const final
 Computes the distance from the wall for a given BaseParticle and returns true if there is a collision. If there is a collision, also return the normal vector. More...
 
void read (std::istream &is) final
 reads wall More...
 
void write (std::ostream &os) const final
 outputs wall More...
 
std::string getName () const final
 Returns the name of the object. More...
 
BaseInteractiongetInteractionWith (BaseParticle *P, Mdouble timeStamp, InteractionHandler *interactionHandler) final
 Get the interaction between this AxisymmetricIntersectionOfWalls and a given BaseParticle at a given time. More...
 
- Public Member Functions inherited from IntersectionOfWalls
 IntersectionOfWalls ()
 Default constructor. More...
 
 IntersectionOfWalls (const IntersectionOfWalls &other)
 Copy constructor. More...
 
virtual ~IntersectionOfWalls ()
 Destructor. More...
 
IntersectionOfWallsoperator= (const IntersectionOfWalls &other)
 
IntersectionOfWallscopy () const override
 Wall copy method. It calls the copy constructor of this Wall, useful for polymorphism. More...
 
MERCURY_DEPRECATED void clear ()
 Removes all parts of the walls. More...
 
void addObject (Vec3D normal, Vec3D point)
 Adds a wall to the set of infinite walls, given an outward normal vector s.t. normal*x=normal*point. More...
 
MERCURY_DEPRECATED void addObject (Vec3D normal, Mdouble position)
 Adds a wall to the set of finite walls, given an outward normal vector s. t. normal*x=position. More...
 
void createOpenPrism (std::vector< Vec3D > points, Vec3D prismAxis)
 Creates an open prism which is a polygon between the points, except the first and last point, and extends infinitely in the PrismAxis direction. More...
 
void createPrism (std::vector< Vec3D > points, Vec3D prismAxis)
 Creates an open prism which is a polygon between the points and extends infinitely in the PrismAxis direction. More...
 
void createOpenPrism (std::vector< Vec3D > points)
 Creates an open prism which is a polygon between the points, except the first and last point, and extends infinitely in the direction perpendicular to the first and second wall. More...
 
void createPrism (std::vector< Vec3D > points)
 Creates an open prism which is a polygon between the points and extends infinitely in the direction perpendicular to the first and second wall. 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...
 
bool getDistanceAndNormal (const Vec3D &postition, Mdouble wallInteractionRadius, Mdouble &distance, Vec3D &normal_return) const
 Compute the distance from the wall for a given BaseParticle and return if there is an interaction. If there is an interaction, also return the normal vector. More...
 
void move (const Vec3D &move)
 Move the IntersectionOfWalls to a new position, which is a Vec3D from the old position. More...
 
void read (std::istream &is)
 Reads an IntersectionOfWalls from an input stream, for example a restart file. More...
 
void write (std::ostream &os) const
 Writes an IntersectionOfWalls to an output stream, for example a restart file. More...
 
std::string getName () const override
 Returns the name of the object, here the string "IntersectionOfWalls". More...
 
BaseInteractiongetInteractionWith (BaseParticle *p, Mdouble timeStamp, InteractionHandler *interactionHandler)
 Get the interaction between this IntersectionOfWalls and given BaseParticle at a given time. 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...
 
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...
 

Detailed Description

A AxisymmetricIntersectionOfWalls is a axisymmetric wall, defined by rotating a twodimensional IntersectionOfWalls around a symmetry axis.

A AxisymmetricIntersectionOfWalls can be defined by first defining a twodimensional IntersectionOfWalls in the XZ plane. Then, the object is rotated around the x-axis, creating an three-dimensional axisymmetric wall. Finally, the object is translated by the vector position_ and rotated such that the axis of rotation is the orientation_.

Definition at line 42 of file AxisymmetricIntersectionOfWalls.h.

Constructor & Destructor Documentation

AxisymmetricIntersectionOfWalls::AxisymmetricIntersectionOfWalls ( )

Default constructor.

Definition at line 29 of file AxisymmetricIntersectionOfWalls.cc.

References DEBUG, and logger.

Referenced by copy().

30 {
31  logger(DEBUG, "AxisymmetricIntersectionOfWalls() finished");
32 }
Logger< MERCURY_LOGLEVEL > logger("MercuryKernel")
AxisymmetricIntersectionOfWalls::AxisymmetricIntersectionOfWalls ( const AxisymmetricIntersectionOfWalls other)

Copy constructor.

Parameters
[in]otherThe AxisymmetricIntersectionOfWalls that must be copied.

Definition at line 37 of file AxisymmetricIntersectionOfWalls.cc.

References DEBUG, and logger.

38  : IntersectionOfWalls(other)
39 {
40  logger(DEBUG, "AxisymmetricIntersectionOfWalls(const AxisymmetricIntersectionOfWalls &p) finished");
41 }
Logger< MERCURY_LOGLEVEL > logger("MercuryKernel")
IntersectionOfWalls()
Default constructor.
AxisymmetricIntersectionOfWalls::~AxisymmetricIntersectionOfWalls ( )

Destructor.

Definition at line 43 of file AxisymmetricIntersectionOfWalls.cc.

References DEBUG, and logger.

44 {
45  logger(DEBUG, "~AxisymmetricIntersectionOfWalls() finished.");
46 }
Logger< MERCURY_LOGLEVEL > logger("MercuryKernel")

Member Function Documentation

AxisymmetricIntersectionOfWalls * AxisymmetricIntersectionOfWalls::copy ( ) const
finalvirtual

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

Returns
pointer to a IntersectionOfWalls object allocated using new.

Implements BaseWall.

Definition at line 66 of file AxisymmetricIntersectionOfWalls.cc.

References AxisymmetricIntersectionOfWalls().

Referenced by operator=().

67 {
68  return new AxisymmetricIntersectionOfWalls(*this);
69 }
bool AxisymmetricIntersectionOfWalls::getDistanceAndNormal ( const BaseParticle p,
Mdouble distance,
Vec3D normalReturn 
) const
finalvirtual

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

First, the particle is translated by the vector position_, then the distance normal and tangential to the orientation is computed. This normal and tangential direction is interpreted as the x and z coordinate. With the particle shifted into the XZ plane, the distance and normal is computed, as if the AxisymmetricIntersectionOfWalls would be a simple IntersectionOfWalls. Finally, the object and the normal is rotated back to the original position.

See also AxisymmetricIntersectionOfWalls for details.

Implements BaseWall.

Definition at line 81 of file AxisymmetricIntersectionOfWalls.cc.

References Vec3D::dot(), IntersectionOfWalls::getDistanceAndNormal(), BaseObject::getIndex(), Vec3D::getLength(), BaseInteractable::getOrientation(), BaseInteractable::getPosition(), BaseParticle::getWallInteractionRadius(), logger, WARN, Vec3D::X, and Vec3D::Z.

Referenced by getInteractionWith().

82 {
83  //transform to axisymmetric coordinates
84  //move the coordinate system to the axis origin, so pOrigin=(xhat,yhat,zhat)
85  Vec3D pOrigin = p.getPosition() -getPosition();
86  Mdouble normal = Vec3D::dot(pOrigin, getOrientation());
87  //tangential is the projection into the (xhat,yhat) plane
88  Vec3D tangentialUnitVector = pOrigin - normal * getOrientation();
89  Mdouble tangential = tangentialUnitVector.getLength();
90  if (tangential!=0.0)
91  tangentialUnitVector /= tangential;
92  else //in this case the tangential vector is irrelevant
93  logger(WARN, "Warning: Particle % is exactly on the symmetry axis of wall %", p.getIndex(), getIndex());
94  Vec3D transformedPosition = Vec3D(tangential, 0.0, normal); //now P=(r,phi,zhat) is cylindrical
95  Vec3D transformedNormal;
96  //determine wall distance, normal and contact in axissymmetric coordinates
97  //and transform from axisymmetric coordinates
98  if (!IntersectionOfWalls::getDistanceAndNormal(transformedPosition, p.getWallInteractionRadius(), distance, transformedNormal))
99  {
100  //if not in contact
101  return false;
102  }
103  else
104  {
105  //if in contact
106  normalReturn = transformedNormal.Z * getOrientation() + transformedNormal.X * tangentialUnitVector;
107  return true;
108  }
109 }
unsigned int getIndex() const
Returns the index of the object in the handler.
Definition: BaseObject.cc:106
Mdouble X
the vector components
Definition: Vector.h:52
Logger< MERCURY_LOGLEVEL > logger("MercuryKernel")
double Mdouble
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...
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.
const Vec3D & getOrientation() const
Returns the orientation of this BaseInteractable.
static Mdouble getLength(const Vec3D &a)
Calculates the length of a Vec3D: .
Definition: Vector.cc:427
Mdouble getWallInteractionRadius() const
Returns the interaction radius for interaction with walls. See also BaseParticle::getInteractionRadiu...
Implementation of a 3D vector (by Vitaliy).
Definition: Vector.h:45
Mdouble Z
Definition: Vector.h:52
BaseInteraction * AxisymmetricIntersectionOfWalls::getInteractionWith ( BaseParticle p,
Mdouble  timeStamp,
InteractionHandler interactionHandler 
)
finalvirtual

Get the interaction between this AxisymmetricIntersectionOfWalls and a given BaseParticle at a given time.

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 Interaction between this AxisymmetricIntersectionOfWalls and the BaseParticle at the timeStamp.
Todo:
{DK: What is the contact point for interactions with walls}

Implements BaseInteractable.

Definition at line 146 of file AxisymmetricIntersectionOfWalls.cc.

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

147 {
148  Mdouble distance;
149  Vec3D normal;
150 
151  if (getDistanceAndNormal(*p,distance,normal))
152  {
153  BaseInteraction* c = interactionHandler->getInteraction(p, this, timeStamp);
154  c->setNormal(-normal);
155  c->setDistance(distance);
156  c->setOverlap(p->getRadius() - distance);
158  c->setContactPoint(p->getPosition()-(p->getRadius()- 0.5 * c->getOverlap())*c->getNormal());
159  return c;
160  }
161  else
162  {
163  return 0;
164  }
165 }
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.
BaseInteraction * getInteraction(BaseInteractable *P, BaseInteractable *I, Mdouble timeStamp)
Returns the Interaction between the BaseInteractable's P and I.
double Mdouble
bool getDistanceAndNormal(const BaseParticle &P, Mdouble &distance, Vec3D &normal_return) const final
Computes the distance from the wall for a given BaseParticle and returns true if there is a collision...
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 AxisymmetricIntersectionOfWalls::getName ( ) const
finalvirtual

Returns the name of the object.

Returns
The string "AxisymmetricIntersectionOfWalls".

Implements BaseObject.

Definition at line 132 of file AxisymmetricIntersectionOfWalls.cc.

133 {
134  return "AxisymmetricIntersectionOfWalls";
135 }
AxisymmetricIntersectionOfWalls & AxisymmetricIntersectionOfWalls::operator= ( const AxisymmetricIntersectionOfWalls other)

Copy assignment operator.

Parameters
[in]otherThe AxisymmetricIntersectionOfWalls that must be copied.

Definition at line 51 of file AxisymmetricIntersectionOfWalls.cc.

References copy().

52 {
53  if (this == &other)
54  {
55  return *this;
56  }
57  else
58  {
59  return *(other.copy());
60  }
61 }
AxisymmetricIntersectionOfWalls * copy() const final
Wall copy method. It calls the copy constructor of this Wall, useful for polymorphism.
void AxisymmetricIntersectionOfWalls::read ( std::istream &  is)
finalvirtual

reads wall

Parameters
[in]isThe input stream from which the AxisymmetricIntersectionOfWalls is read, usually a restart file.

Implements BaseInteractable.

Definition at line 115 of file AxisymmetricIntersectionOfWalls.cc.

References IntersectionOfWalls::read().

116 {
118 }
void read(std::istream &is)
Reads an IntersectionOfWalls from an input stream, for example a restart file.
void AxisymmetricIntersectionOfWalls::write ( std::ostream &  os) const
finalvirtual

outputs wall

Parameters
[in]osThe output stream where the AxisymmetricIntersectionOfWalls must be written to, usually a restart file.

Implements BaseInteractable.

Definition at line 124 of file AxisymmetricIntersectionOfWalls.cc.

References IntersectionOfWalls::write().

125 {
127 }
void write(std::ostream &os) const
Writes an IntersectionOfWalls to an output stream, for example a restart file.

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