MercuryDPM  Alpha
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Pages
RestrictedWall Class Reference

This is a class defining walls. More...

#include <RestrictedWall.h>

+ Inheritance diagram for RestrictedWall:

Public Member Functions

 RestrictedWall ()
 Default constructor, the normal is infinitely long. More...
 
 RestrictedWall (const RestrictedWall &w)
 Copy constructor, copy the given wall. More...
 
 RestrictedWall (BaseWall *wall, InfiniteWall *restriction)
 Constructor setting values. More...
 
virtual ~RestrictedWall ()
 Default destructor. More...
 
RestrictedWallcopy () const override
 Wall copy method. It calls the copy constructor of this Wall, useful for polymorphism. More...
 
void set (BaseWall *wall, InfiniteWall *restriction)
 Defines a standard wall, given an outward normal vector s.t. normal*x=normal*point for all x of the 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...
 
void read (std::istream &is) override
 Reads RestrictedWall from a restart file. More...
 
void oldRead (std::istream &is)
 Reads RestrictedWall from an old-style restart file. More...
 
void write (std::ostream &os) const override
 Writes the RestrictedWall 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 "RestrictedWall". More...
 
std::vector< BaseInteraction * > getInteractionWith (BaseParticle *p, Mdouble timeStamp, InteractionHandler *interactionHandler) override
 Look up the interaction between this wall and a BaseParticle at a certain timeStamp. More...
 
void writeVTK (VTKContainer &vtk) const override
 
- 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...
 
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)
 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...
 
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, const Vec3D normal, const Vec3D position) const
 
- 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 (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...
 
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 (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< 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 (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...
 
- 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

BaseWallwall_
 
InfiniteWallrestriction_
 

Additional Inherited Members

- Static Public Member Functions inherited from BaseWall
static void addToVTK (const std::vector< Vec3D > &points, VTKContainer &vtk)
 
- Public Attributes inherited from BaseWall
WallHandlerhandler_
 

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:

Restriction of a wall to the intersection with another wall

Definition at line 42 of file RestrictedWall.h.

Constructor & Destructor Documentation

RestrictedWall::RestrictedWall ( )

Default constructor, the normal is infinitely long.

Definition at line 34 of file RestrictedWall.cc.

References DEBUG, logger, restriction_, and wall_.

Referenced by copy().

35 {
36  wall_ = nullptr;
37  restriction_ = nullptr;
38  logger(DEBUG, "RestrictedWall::RestrictedWall ) finished");
39 }
Logger< MERCURY_LOGLEVEL > logger("MercuryKernel")
BaseWall * wall_
InfiniteWall * restriction_
RestrictedWall::RestrictedWall ( const RestrictedWall w)

Copy constructor, copy the given wall.

Parameters
[in]wRestrictedWall that has to be copied.

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

Definition at line 46 of file RestrictedWall.cc.

References DEBUG, logger, restriction_, set(), and wall_.

47  : BaseWall(w)
48 {
49  wall_ = nullptr;
50  restriction_ = nullptr;
51  set(w.wall_, w.restriction_);
52  logger(DEBUG, "RestrictedWall::RestrictedWall(const RestrictedWall &p) finished");
53 }
Logger< MERCURY_LOGLEVEL > logger("MercuryKernel")
void set(BaseWall *wall, InfiniteWall *restriction)
Defines a standard wall, given an outward normal vector s.t. normal*x=normal*point for all x of the w...
BaseWall()
Default constructor. It makes an empty BaseWall.
Definition: BaseWall.cc:31
BaseWall * wall_
InfiniteWall * restriction_
RestrictedWall::RestrictedWall ( BaseWall wall,
InfiniteWall restriction 
)

Constructor setting values.

Definition at line 55 of file RestrictedWall.cc.

References restriction_, set(), and wall_.

56 {
57  wall_ = nullptr;
58  restriction_ = nullptr;
59  set(wall, restriction);
60 }
void set(BaseWall *wall, InfiniteWall *restriction)
Defines a standard wall, given an outward normal vector s.t. normal*x=normal*point for all x of the w...
BaseWall * wall_
InfiniteWall * restriction_
RestrictedWall::~RestrictedWall ( )
virtual

Default destructor.

Definition at line 62 of file RestrictedWall.cc.

References DEBUG, logger, restriction_, and wall_.

63 {
64  if (wall_!=nullptr) {
65  delete wall_;
66  wall_ = nullptr;
67  }
68  if (restriction_!=nullptr) {
69  delete restriction_;
70  restriction_ = nullptr;
71  }
72  logger(DEBUG, "RestrictedWall::~RestrictedWall finished");
73 }
Logger< MERCURY_LOGLEVEL > logger("MercuryKernel")
BaseWall * wall_
InfiniteWall * restriction_

Member Function Documentation

RestrictedWall * RestrictedWall::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 78 of file RestrictedWall.cc.

References RestrictedWall().

79 {
80  return new RestrictedWall(*this);
81 }
RestrictedWall()
Default constructor, the normal is infinitely long.
bool RestrictedWall::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 120 of file RestrictedWall.cc.

References InfiniteWall::getDistance(), BaseWall::getDistanceAndNormal(), BaseInteractable::getPosition(), BaseParticle::getWallInteractionRadius(), restriction_, and wall_.

121 {
123  return wall_->getDistanceAndNormal(p, distance, normal_return);
124  else
125  return false;
126 }
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...
virtual bool getDistanceAndNormal(const BaseParticle &P, Mdouble &distance, Vec3D &normal_return) const =0
Pure virtual function that computes the distance of a BaseParticle to this wall and returns the norma...
BaseWall * wall_
InfiniteWall * restriction_
std::vector< BaseInteraction * > RestrictedWall::getInteractionWith ( BaseParticle p,
Mdouble  timeStamp,
InteractionHandler interactionHandler 
)
overridevirtual

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 RestrictedWall and the BaseParticle at the timeStamp.
Todo:
Shouldn't this function be defined in BaseWall?
Todo:
{setting the index of the wall is necessary to get the right index reported in fstat; however, the better way would be to make setIndex virtual.}

Reimplemented from BaseWall.

Definition at line 165 of file RestrictedWall.cc.

165  {
168  wall_->setIndex(getIndex());
169  return wall_->getInteractionWith(p, timeStamp, interactionHandler);
170  } else {
171  return std::vector<BaseInteraction*>();
172  }
173 }
void setIndex(const unsigned int index)
Allows one to assign an index to an object in the handler/container.
Definition: BaseObject.cc:91
unsigned int getIndex() const
Returns the index of the object in the handler.
Definition: BaseObject.cc:108
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.
virtual std::vector< BaseInteraction * > getInteractionWith(BaseParticle *p, Mdouble timeStamp, InteractionHandler *interactionHandler)
Definition: BaseWall.cc:266
Mdouble getWallInteractionRadius() const
Returns the interaction radius for interaction with walls. See also BaseParticle::getInteractionRadiu...
BaseWall * wall_
InfiniteWall * restriction_
std::string RestrictedWall::getName ( ) const
overridevirtual

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

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

Implements BaseObject.

Definition at line 152 of file RestrictedWall.cc.

Referenced by write().

153 {
154  return "RestrictedWall";
155 }
void RestrictedWall::oldRead ( std::istream &  is)

Reads RestrictedWall from an old-style restart file.

void RestrictedWall::read ( std::istream &  is)
overridevirtual

Reads RestrictedWall from a restart file.

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

Reimplemented from BaseWall.

Definition at line 131 of file RestrictedWall.cc.

References BaseWall::read(), InfiniteWall::read(), restriction_, and wall_.

132 {
133  wall_->read(is);
134  restriction_->read(is);
135 }
BaseWall * wall_
void read(std::istream &is) override
Reads InfiniteWall from a restart file.
InfiniteWall * restriction_
void read(std::istream &is)
Function that reads a BaseWall from an input stream, usually a restart file.
Definition: BaseWall.cc:60
void RestrictedWall::set ( BaseWall wall,
InfiniteWall restriction 
)

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

Todo:
TW maybe the Restricted wall should be templated with the wall type such that we don't need to use new and delete.

Definition at line 90 of file RestrictedWall.cc.

References BaseWall::copy(), InfiniteWall::copy(), BaseInteractable::getSpecies(), restriction_, BaseWall::setSpecies(), and wall_.

Referenced by RestrictedWall().

91 {
92  if (wall_!=nullptr) {
93  delete wall_;
94  wall_ = nullptr;
95  }
96  wall_ = wall->copy();
98 
99  if (restriction_!=nullptr) {
100  delete restriction_;
101  restriction_ = nullptr;
102  }
103  restriction_ = restriction->copy();
104 
105  // std::cout << *this << std::endl;
106 }
const ParticleSpecies * getSpecies() const
Returns a pointer to the species of this BaseInteractable.
InfiniteWall * copy() const override
Wall copy method. It calls the copy constructor of this Wall, useful for polymorphism.
Definition: InfiniteWall.cc:68
BaseWall * wall_
InfiniteWall * restriction_
virtual BaseWall * copy() const =0
Pure virtual function that copies a BaseWall.
void setSpecies(const ParticleSpecies *species)
Define the species of this wall.
Definition: BaseWall.cc:113
void RestrictedWall::write ( std::ostream &  os) const
overridevirtual

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

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

Reimplemented from BaseWall.

Definition at line 140 of file RestrictedWall.cc.

References getName(), restriction_, wall_, BaseWall::write(), and InfiniteWall::write().

141 {
142  //todo check
143  os << getName() << ' ';
144  wall_->write(os);
145  os << ' ';
146  restriction_->write(os);
147 }
BaseWall * wall_
InfiniteWall * restriction_
std::string getName() const override
Returns the name of the object, in this case the string "RestrictedWall".
void write(std::ostream &os) const override
Writes the InfiniteWall to an output stream, usually a restart file.
void write(std::ostream &os) const
Function that writes a BaseWall to an output stream, usually a restart file.
Definition: BaseWall.cc:68
void RestrictedWall::writeVTK ( VTKContainer vtk) const
overridevirtual

adds extra information to the points and triangleStrips vectors needed to plot the wall in vtk format

Parameters
pointsCoordinates of the vertices of the triangulated surfaces (in the VTK file this is called POINTS)
triangleStripsIndices of three vertices forming one triangulated surface (in the VTK file this is called CELL)

Reimplemented from BaseWall.

Definition at line 175 of file RestrictedWall.cc.

References InfiniteWall::getDistance(), InfiniteWall::getNormal(), VTKContainer::points, restriction_, VTKContainer::triangleStrips, wall_, and BaseWall::writeVTK().

176 {
177  std::vector<std::vector<double>> myTriangleStrips;
178  wall_->writeVTK(vtk);
179 
180  // for (auto myTriangleStrip: myTriangleStrips) {
181  // triangleStrips.push_back(myTriangleStrip);
182  // }
183 
184  std::vector<double> cell;
185 
186  for (auto myTriangleStrip: myTriangleStrips) {
187  unsigned counter = 0;
188  for (const auto c: myTriangleStrip) {
189  Mdouble distance = restriction_->getDistance(vtk.points[c]);
190  if (distance < 0) {
191  //if the current point is in restriction, write it
192  cell.push_back(c);
193  counter=0;
194  } else {
195  if (counter>=2) {
196  //if the current point is not in restriction, don't write it and flush the cell into the cells array
197  if (cell.size()>2)
198  vtk.triangleStrips.push_back(cell);
199  cell.clear();
200  counter=0;
201  }
202  vtk.points[c] += distance*restriction_->getNormal();
203  cell.push_back(c);
204  counter++;
205  }
206  }
207  if (cell.size()>2) {
208  //if the current point is not in restriction, don't write it and flush the cell into the cells array
209  vtk.triangleStrips.push_back(cell);
210  cell.clear();
211  }
212  }
213 }
virtual void writeVTK(VTKContainer &vtk) const
Definition: BaseWall.cc:284
Mdouble getDistance(const Vec3D &otherPosition) const
Returns the distance of the wall to the particle.
double Mdouble
Vec3D getNormal() const
Access function for normal.
std::vector< std::vector< double > > triangleStrips
Definition: BaseWall.h:36
BaseWall * wall_
std::vector< Vec3D > points
Definition: BaseWall.h:35
InfiniteWall * restriction_

Member Data Documentation

InfiniteWall* RestrictedWall::restriction_
private
BaseWall* RestrictedWall::wall_
private

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

Definition at line 113 of file RestrictedWall.h.

Referenced by getDistanceAndNormal(), read(), RestrictedWall(), set(), write(), writeVTK(), and ~RestrictedWall().


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