MercuryDPM  Beta
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Pages
BaseInteractable Class Referenceabstract

Defines the basic properties that a interactable object can have. More...

#include <BaseInteractable.h>

+ Inheritance diagram for BaseInteractable:

Public Member Functions

 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...
 
virtual void read (std::istream &is)=0
 Reads a BaseInteractable from an input stream. More...
 
virtual void write (std::ostream &os) const =0
 Write a BaseInteractable to an output stream. More...
 
unsigned int getIndSpecies () const
 Returns the index of the Species of this BaseInteractable. More...
 
virtual void setIndSpecies (unsigned int indSpecies)
 Sets 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 BaseInteractiongetInteractionWith (BaseParticle *P, Mdouble timeStamp, InteractionHandler *interactionHandler)=0
 Returns the interaction between this object and a given BaseParticle. 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 std::string getName () const =0
 A purely virtual function. 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

std::function< Vec3D(double)> prescribedPosition_
 
std::function< Vec3D(double)> prescribedVelocity_
 
std::function< Vec3D(double)> prescribedOrientation_
 
std::function< Vec3D(double)> prescribedAngularVelocity_
 
Vec3D position_
 
Vec3D orientation_
 
Vec3D angularVelocity_
 
Vec3D force_
 
Vec3D torque_
 
const ParticleSpeciesspecies_
 
unsigned int indSpecies_
 
Vec3D velocity_
 
std::list< BaseInteraction * > interactions_
 

Detailed Description

Defines the basic properties that a interactable object can have.

Inherits from class BaseObject (public) Also it includes a lot of code to deal with interactable objects that have a prescibed motion. Most of the code in here is MercuryDPM internal. The only place an user will interface with this code is for setting the lambda functions that prescribe the motion of infinite mass particles.

Todo:
Check prescribed objects have infinite mass.

Definition at line 50 of file BaseInteractable.h.

Constructor & Destructor Documentation

BaseInteractable::BaseInteractable ( )

Default BaseInteractable constructor, it simply creates an empty BaseInteractable.

Todo:
TW: why do some constructors (e.g. BaseInteractable, BaseParticle)not explicitly call the constructor from the inherited class?

Sets all vectors to zero and all point to nullptr.

Definition at line 38 of file BaseInteractable.cc.

References angularVelocity_, force_, indSpecies_, orientation_, position_, prescribedPosition_, prescribedVelocity_, Vec3D::setZero(), species_, torque_, and velocity_.

39 {
44  force_.setZero();
45  torque_.setZero();
46  indSpecies_ = 0;
47  species_ = nullptr;
48  prescribedPosition_ = nullptr;
49  prescribedVelocity_ = nullptr;
50 #ifdef DEBUG_CONSTRUCTOR
51  std::cout<<"BaseInteractable::BaseInteractable() finished"<<std::endl;
52 #endif
53 }
std::function< Vec3D(double)> prescribedPosition_
unsigned int indSpecies_
std::function< Vec3D(double)> prescribedVelocity_
void setZero()
Sets all elements to zero.
Definition: Vector.cc:52
const ParticleSpecies * species_
BaseInteractable::BaseInteractable ( const BaseInteractable p)

Copy constructor. It copies the BaseInteractable and all objects it contains.

Note, this does not copy interactions of a interactable. As these often require extra work. All the other properties are copied normally. Please use this copy with care.

Definition at line 61 of file BaseInteractable.cc.

References angularVelocity_, force_, indSpecies_, interactions_, orientation_, position_, prescribedPosition_, prescribedVelocity_, species_, torque_, and velocity_.

62  : BaseObject(p)
63 {
64  interactions_.clear();
65  position_ = p.position_;
67  velocity_ = p.velocity_;
69  force_ = p.force_;
70  torque_ = p.torque_;
71  species_ = p.species_;
75 #ifdef DEBUG_CONSTRUCTOR
76  std::cout<<"BaseInteractable::BaseInteractable(const BaseInteractable &p finished"<<std::endl;
77 #endif
78 }
std::function< Vec3D(double)> prescribedPosition_
unsigned int indSpecies_
std::function< Vec3D(double)> prescribedVelocity_
const ParticleSpecies * species_
std::list< BaseInteraction * > interactions_
BaseObject()
Default constructor.
Definition: BaseObject.cc:51
BaseInteractable::~BaseInteractable ( )
virtual

Destructor, it simply destructs the BaseInteractable and all the objects it contains.

Removes all the interactions from the interactable.

Definition at line 83 of file BaseInteractable.cc.

References interactions_.

84 {
85  //std::cout<<"Deleting BaseInteractable with index="<<getIndex()<<" and id="<<getId()<<" size="<<interactions_.size()<<std::endl;
86  while (interactions_.size() > 0)
87  {
88  interactions_.front()->removeFromHandler();
89  }
90 #ifdef DEBUG_DESTRUCTOR
91  std::cout<<"BaseInteractable::~BaseInteractable() finished"<<std::endl;
92 #endif
93 }
std::list< BaseInteraction * > interactions_

Member Function Documentation

void BaseInteractable::addAngularVelocity ( const Vec3D angularVelocity)

add an increment to the angular velocity.

See also BaseInteractable::setAngularVelocity

Parameters
[in]angularVelocityincrement which to increase the angularVelocity by.

Definition at line 433 of file BaseInteractable.cc.

References angularVelocity_.

Referenced by BaseParticle::angularAccelerate().

434 {
435  angularVelocity_ += angularVelocity;
436 }
void BaseInteractable::addForce ( Vec3D  addForce)

Adds an amount to the force on this BaseInteractable.

Incremental version of BaseInteractable::setForce. Also see BaseInteraction::setForce for were this is used.

Parameters
[in]addForceVec3D incremental force which is added to the total force of the interactable.

Definition at line 199 of file BaseInteractable.cc.

References force_.

Referenced by DPMBase::computeExternalForces(), DPMBase::computeForcesDueToWalls(), and DPMBase::computeInternalForces().

200 {
201  force_ += addForce;
202 }
void addForce(Vec3D addForce)
Adds an amount to the force on this BaseInteractable.
void BaseInteractable::addInteraction ( BaseInteraction I)

Adds an interaction to this BaseInteractable.

Added a new interactions to the current interactable.

Parameters
[in]IPointer to the new interaction which is to be added to the list of interactions of this interactable.

Definition at line 345 of file BaseInteractable.cc.

References interactions_.

Referenced by BaseInteraction::BaseInteraction(), BaseInteraction::copySwitchPointer(), BaseInteraction::setI(), and BaseInteraction::setP().

346 {
347  interactions_.push_back(I);
348 }
std::list< BaseInteraction * > interactions_
void BaseInteractable::addTorque ( Vec3D  addTorque)

Adds an amount to the torque on this BaseInteractable.

Incremental version of BaseInteractable::setTorque. Also see BaseInteraction::setTorque for were this is used.

Parameters
[in]addTorqueVec3D incremental force which is added to the total torque of the interactable.

Definition at line 210 of file BaseInteractable.cc.

References torque_.

Referenced by DPMBase::computeForcesDueToWalls(), and DPMBase::computeInternalForces().

211 {
212  torque_ += addTorque;
213 }
void addTorque(Vec3D addTorque)
Adds an amount to the torque on this BaseInteractable.
void BaseInteractable::addVelocity ( const Vec3D velocity)

adds an increment to the velocity.

See also BaseInteractable::setVelocity

Parameters
[in]velocityVec3D containing the velocity increment which to increase the velocity by.

Definition at line 423 of file BaseInteractable.cc.

References velocity_.

Referenced by BaseParticle::accelerate(), and LeesEdwardsBoundary::shiftVerticalPosition().

424 {
425  velocity_ += velocity;
426 }
void BaseInteractable::applyPrescribedAngularVelocity ( double  time)

Computes the angular velocity from the user defined prescribed angular velocity.

This calls the prescribedAngularVelocity function if one has been defined. See also BaseInteractable::setPrescribedAngularVelocity

Parameters
[in]timedouble which is the current time of the simulation.

Definition at line 574 of file BaseInteractable.cc.

References prescribedAngularVelocity_, and setAngularVelocity().

Referenced by integrateAfterForceComputation(), and integrateBeforeForceComputation().

575 {
577  {
579  }
580 }
std::function< Vec3D(double)> prescribedAngularVelocity_
void setAngularVelocity(const Vec3D &angularVelocity)
set the angular velocity of the BaseInteractble.
void BaseInteractable::applyPrescribedOrientation ( double  time)

Computes the orientation from the user defined prescribed orientation function.

This calls the prescribedOrientation function if one has been defined. See also BaseInteractable::setPrescribedOrientation

Parameters
[in]timedouble which is the current time of the simulation.

Definition at line 547 of file BaseInteractable.cc.

References prescribedOrientation_, and setOrientation().

Referenced by integrateBeforeForceComputation().

548 {
550  {
552  }
553 }
void setOrientation(const Vec3D &orientation)
Sets the orientation of this BaseInteractable.
std::function< Vec3D(double)> prescribedOrientation_
void BaseInteractable::applyPrescribedPosition ( double  time)

Computes the position from the user defined prescribed position function.

This calls the prescribedPosition function if one has been defined. See also BaseInteractable::setPrescribedPosition

Parameters
[in]timedouble which is the current time of the simulation.

Definition at line 485 of file BaseInteractable.cc.

References prescribedPosition_, and setPosition().

Referenced by integrateBeforeForceComputation().

486 {
488  {
490  }
491 }
std::function< Vec3D(double)> prescribedPosition_
void setPosition(const Vec3D &position)
Sets the position of this BaseInteractable.
void BaseInteractable::applyPrescribedVelocity ( double  time)

Computes the velocity from the user defined prescribed velocity function.

This calls the prescribedVeclocity function if one has been defined. See also BaseInteractable::setPrescribedVelocity

Parameters
[in]timedouble which is the current time of the simulation.

Definition at line 516 of file BaseInteractable.cc.

References prescribedVelocity_, and setVelocity().

Referenced by integrateAfterForceComputation(), and integrateBeforeForceComputation().

517 {
519  {
521  }
522 }
void setVelocity(const Vec3D &velocity)
set the velocity of the BaseInteractable.
std::function< Vec3D(double)> prescribedVelocity_
void BaseInteractable::copyInteractionsForPeriodicParticles ( const BaseInteractable pOriginal)

Copies interactions to this BaseInteractable whenever a periodic copy made.

This loops over all interactions of periodic (particle) and calls copySwitchPointer, which copies the interactions.

Parameters
[in]pOriginalReference to the BaseInteractable which is to be copied to create the ghost particles.

Definition at line 448 of file BaseInteractable.cc.

References interactions_.

Referenced by LeesEdwardsBoundary::createHorizontalPeriodicParticles(), MaserBoundary::createPeriodicParticles(), AngledPeriodicBoundary::createPeriodicParticles(), PeriodicBoundary::createPeriodicParticles(), and LeesEdwardsBoundary::createVerticalPeriodicParticles().

449 {
450  for (std::list<BaseInteraction*>::const_iterator it = pOriginal.interactions_.begin(); it != pOriginal.interactions_.end(); ++it)
451  {
452  //So here this is the ghost and it is the interaction of the ghost/
453  (*it)->copySwitchPointer(&pOriginal, this);
454  }
455 }
std::list< BaseInteraction * > interactions_
const Vec3D & BaseInteractable::getAngularVelocity ( ) const
virtual

Returns the angular velocity of this interactable.

Returns the angular velocity of the BaseInteractbale. Note, this is the same for all BaseInteractables; it is the direction the object is moving in.

Returns
Vec3D reference which contains the current angular velocity of the current BaseInteractable.

Definition at line 394 of file BaseInteractable.cc.

References angularVelocity_.

Referenced by getVelocityAtContact(), integrateBeforeForceComputation(), BaseParticle::integrateBeforeForceComputation(), and AngledPeriodicBoundary::shiftPosition().

395 {
396  return angularVelocity_;
397 }
const Vec3D & BaseInteractable::getForce ( ) const

Returns the force on this BaseInteractable.

Return the current force being to the BaseInteractable. Note, the code works by first computing the forces of each interaction and then it loops over all BaseInteracables applying forces to them from the interactions they are involved in.

Returns
const Vec3D reference that is the total force applied to this interactable.

Definition at line 150 of file BaseInteractable.cc.

References force_.

Referenced by BaseParticle::integrateAfterForceComputation(), and BaseParticle::integrateBeforeForceComputation().

151 {
152  return force_;
153 }
unsigned int BaseInteractable::getIndSpecies ( ) const

Returns the index of the Species of this BaseInteractable.

Returns the unsigned int to the index of the species associated with the interactable object.

Returns
Unsigned int which is the unique index of the species

Definition at line 100 of file BaseInteractable.cc.

References indSpecies_.

Referenced by InteractionHandler::getInteraction(), BaseWall::setHandler(), BaseParticle::setHandler(), and BaseWall::setIndSpecies().

101 {
102  return indSpecies_;
103 }
unsigned int indSpecies_
const std::list< BaseInteraction * > & BaseInteractable::getInteractions ( ) const

Returns a reference to the list of interactions in this BaseInteractable.

Returns a list of interactions which belong to this interactable.

Returns
Returns an std::list of pointers to all the interactions which this interacable is involved in.

Definition at line 335 of file BaseInteractable.cc.

References interactions_.

Referenced by InteractionHandler::getExistingInteraction(), DPMBase::removeDuplicatePeriodicParticles(), and AngledPeriodicBoundary::shiftPosition().

336 {
337  return interactions_;
338 }
std::list< BaseInteraction * > interactions_
virtual BaseInteraction* BaseInteractable::getInteractionWith ( BaseParticle P,
Mdouble  timeStamp,
InteractionHandler interactionHandler 
)
pure 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.

Implemented in BaseParticle, IntersectionOfWalls, InfiniteWall, InfiniteWallWithHole, CylindricalWall, Screw, AxisymmetricIntersectionOfWalls, and Coil.

const Vec3D & BaseInteractable::getOrientation ( ) const

Returns the orientation of this BaseInteractable.

Returns the reference to a Vec3D which contains the orientation of the interactionable. Please note the interpretation of this depends on which interactable. Please see derived objects for details.

Todo:
This is not full implemented and is related to quaterians.
Returns
Returns a reference to a Vec3D returns the position of the interactable.

Definition at line 239 of file BaseInteractable.cc.

References orientation_.

Referenced by AxisymmetricIntersectionOfWalls::getDistanceAndNormal(), and AngledPeriodicBoundary::shiftPosition().

240 {
241  return orientation_;
242 }
const Vec3D & BaseInteractable::getPosition ( ) const

Returns the position of this BaseInteractable.

Returns the reference to a Vec3D which contains the position of the interactionable. Please note the interpretation of this depends on which interactable. For particles this is the centre of the particle; where for walls it is one point of the wall given \(r.n=p\)

Returns
Returns a reference to a Vec3D returns the position of the interactable.

Definition at line 224 of file BaseInteractable.cc.

References position_.

Referenced by IntersectionOfWalls::addObject(), DPMBase::areInContact(), DeletionBoundary::checkBoundaryAfterParticleMoved(), CircularPeriodicBoundary::checkBoundaryAfterParticleMoved(), DPMBase::checkParticleForInteraction(), Chute::cleanChute(), DPMBase::computeForcesDueToWalls(), DPMBase::computeInternalForces(), CircularPeriodicBoundary::createPeriodicParticles(), AngledPeriodicBoundary::distance(), BaseInteraction::gatherContactStatistics(), BaseParticle::getDisplacement2(), MaserBoundary::getDistance(), PeriodicBoundary::getDistance(), InfiniteWall::getDistance(), Screw::getDistanceAndNormal(), CylindricalWall::getDistanceAndNormal(), AxisymmetricIntersectionOfWalls::getDistanceAndNormal(), Coil::getDistanceAndNormal(), InfiniteWallWithHole::getDistanceAndNormal(), InfiniteWall::getDistanceAndNormal(), IntersectionOfWalls::getDistanceAndNormal(), LeesEdwardsBoundary::getHorizontalDistance(), Coil::getInteractionWith(), AxisymmetricIntersectionOfWalls::getInteractionWith(), Screw::getInteractionWith(), CylindricalWall::getInteractionWith(), InfiniteWallWithHole::getInteractionWith(), InfiniteWall::getInteractionWith(), IntersectionOfWalls::getInteractionWith(), BaseParticle::getInteractionWith(), getVelocityAtContact(), LeesEdwardsBoundary::getVerticalDistance(), Mercury2D::hGridFindOneSidedContacts(), Mercury3D::hGridFindOneSidedContacts(), Mercury2D::hGridHasParticleContacts(), Mercury3D::hGridUpdateParticle(), Mercury2D::hGridUpdateParticle(), CircularPeriodicBoundary::rotateParticle(), AngledPeriodicBoundary::shiftPosition(), and BaseInteraction::writeToFStat().

225 {
226  return position_;
227 }
const ParticleSpecies * BaseInteractable::getSpecies ( ) const

Returns a pointer to the species of this BaseInteractable.

This function return a ParticleSpecies* for the current interacable. Please note, this is a ParticleSpecies; not, a BaseSpecies as interactables must have physically properties as well.

Returns
constant ParticleSpecies* pointer to the species storing the physical properties of this interactable.

Definition at line 123 of file BaseInteractable.cc.

References species_.

Referenced by ParticleHandler::addObject(), MaserBoundary::addParticleToMaser(), MaserBoundary::checkBoundaryAfterParticleMoved(), MaserBoundary::createPeriodicParticles(), DPMBase::getInfo(), BaseParticle::getInteractionRadius(), BaseParticle::getWallInteractionRadius(), BaseParticle::setRadius(), and BaseParticle::unfix().

124 {
125  return species_;
126 }
const ParticleSpecies * species_
const Vec3D & BaseInteractable::getTorque ( ) const

Returns the torque on this BaseInteractable.

Return the current torque being to the BaseInteractable. Note, the code works by first computing the forces of each interaction and then it loops over all BaseInteracables applying forces to them from the interactions they are involved in.

Returns
const Vec3D reference that is the total force applied to this interactable.

Definition at line 163 of file BaseInteractable.cc.

References torque_.

Referenced by BaseParticle::integrateAfterForceComputation(), and BaseParticle::integrateBeforeForceComputation().

164 {
165  return torque_;
166 }
const Vec3D & BaseInteractable::getVelocity ( ) const
virtual

Returns the velocity of this interactable.

Returns the velocity of the BaseInteractbale. Note, this is the same for all BaseInteractables; it is the direction the object is moving in.

Returns
Vec3D reference which contains the current velocity of the current BaseInteractable.

Definition at line 382 of file BaseInteractable.cc.

References velocity_.

Referenced by BaseParticle::getKineticEnergy(), getVelocityAtContact(), integrateBeforeForceComputation(), BaseParticle::integrateBeforeForceComputation(), InfiniteWallWithHole::move_time(), CircularPeriodicBoundary::rotateParticle(), and AngledPeriodicBoundary::shiftPosition().

383 {
384  return velocity_;
385 }
const Vec3D BaseInteractable::getVelocityAtContact ( const Vec3D contact) const
virtual

Returns the velocity at the contact point, use by many force laws.

Definition at line 437 of file BaseInteractable.cc.

References Vec3D::cross(), getAngularVelocity(), getPosition(), and getVelocity().

438  {
439  return getVelocity() - Vec3D::cross(contact - getPosition(), getAngularVelocity());
440 }
virtual const Vec3D & getAngularVelocity() const
Returns the angular velocity of this interactable.
const Vec3D & getPosition() const
Returns the position of this BaseInteractable.
static Vec3D cross(const Vec3D &a, const Vec3D &b)
Calculates the cross product of two Vec3D: .
Definition: Vector.cc:268
virtual const Vec3D & getVelocity() const
Returns the velocity of this interactable.
void BaseInteractable::integrateAfterForceComputation ( double  time,
double  timeStep 
)

This is part of the integration routine for objects with infinite mass.

This is the last part of time integration for interactable objects which have an infinite mass.

Parameters
[in]timedouble which is the current simulation time
[in]timeStepdouble which is the current delta time of the simulation i.e. the size of each time step.

Definition at line 669 of file BaseInteractable.cc.

References applyPrescribedAngularVelocity(), applyPrescribedVelocity(), prescribedAngularVelocity_, prescribedOrientation_, prescribedPosition_, prescribedVelocity_, setAngularVelocity(), and setVelocity().

Referenced by BaseParticle::integrateAfterForceComputation().

670 {
672  {
674  {
675  applyPrescribedVelocity(time + timeStep);
676  }
677  else
678  {
679  setVelocity((prescribedPosition_(time + 1.1 * timeStep) - prescribedPosition_(time + 0.9 * timeStep)) / (0.2 * timeStep));
680  }
681  }
682  else
683  {
685  {
686  applyPrescribedVelocity(time + 0.5 * timeStep);
687  }
688  }
690  {
692  {
693  applyPrescribedAngularVelocity(time + timeStep);
694  }
695  else
696  {
697  setAngularVelocity((prescribedOrientation_(time + 1.1 * timeStep) - prescribedOrientation_(time + 0.9 * timeStep)) / (0.2 * timeStep));
698  }
699  }
700  else
701  {
703  {
704  applyPrescribedAngularVelocity(time + 0.5 * timeStep);
705  }
706  }
707 }
std::function< Vec3D(double)> prescribedPosition_
void setVelocity(const Vec3D &velocity)
set the velocity of the BaseInteractable.
std::function< Vec3D(double)> prescribedVelocity_
void applyPrescribedAngularVelocity(double time)
Computes the angular velocity from the user defined prescribed angular velocity.
std::function< Vec3D(double)> prescribedOrientation_
void applyPrescribedVelocity(double time)
Computes the velocity from the user defined prescribed velocity function.
std::function< Vec3D(double)> prescribedAngularVelocity_
void setAngularVelocity(const Vec3D &angularVelocity)
set the angular velocity of the BaseInteractble.
void BaseInteractable::integrateBeforeForceComputation ( double  time,
double  timeStep 
)

This is part of integrate routine for objects with infinite mass.

This does not first part of verlet integration but for objects with an infinite mass i.e. there motion is prescribed and not calculated from the applied forces. First it deals with the translation degrees of freedom and then secondly if deals with the angular degrees of freedom. Note, in both cases if the user has prescribed both positions and velocity these are used. If only only position is prescribed the velocity is computed from a finite difference. If only the velocity is prescribed the position is computed from integrating the velocity.

In the weird case they neither is set. The objects computed velocity is used to update its position.

Parameters
[in]timedouble which is the current simulation time
[in]timeStepdouble which is the current delta time of the simulation i.e. the size of each time step.

Definition at line 600 of file BaseInteractable.cc.

References applyPrescribedAngularVelocity(), applyPrescribedOrientation(), applyPrescribedPosition(), applyPrescribedVelocity(), getAngularVelocity(), getVelocity(), move(), prescribedAngularVelocity_, prescribedOrientation_, prescribedPosition_, prescribedVelocity_, rotate(), setAngularVelocity(), and setVelocity().

Referenced by BaseParticle::integrateBeforeForceComputation().

601 {
602  if (prescribedPosition_ )
603  {
604  if (prescribedVelocity_ )
605  {
606  //Both the velocity and position are defined; as we are using leap
607  //frog method so the velocity is evaluated half a time later.
608  applyPrescribedPosition(time + timeStep);
609  applyPrescribedVelocity(time + 0.5 * timeStep);
610  }
611  else
612  {
613  //Only the position is defined.
614  //Velocity is evaluated from a finite different of the Position
615  //Note, we use 0.5 +- 0.1 timeStep for the velocity eval.
616  applyPrescribedPosition(time + timeStep);
617  setVelocity((prescribedPosition_(time + 0.6 * timeStep) - prescribedPosition_(time + 0.4 * timeStep)) / (0.2 * timeStep));
618  }
619  }
620  else
621  {
622  if (prescribedVelocity_ )
623  {
624  //Only the velocity is set. The position is calculated from the
625  //the integral of velocity.
626  applyPrescribedVelocity(time + 0.5 * timeStep);
627  move(getVelocity() * timeStep);
628  }
629  else
630  {
631  //Neither is set move based on the computed velocity of the object.
632  move(getVelocity() * timeStep);
633  }
634  }
635  if (prescribedOrientation_ != nullptr)
636  {
637  if (prescribedAngularVelocity_ != nullptr)
638  {
639  applyPrescribedOrientation(time + timeStep);
640  applyPrescribedAngularVelocity(time + 0.5 * timeStep);
641  }
642  else
643  {
644  applyPrescribedOrientation(time + timeStep);
645  setAngularVelocity((prescribedOrientation_(time + 0.6 * timeStep) - prescribedOrientation_(time + 0.4 * timeStep)) / (0.2 * timeStep));
646  }
647  }
648  else
649  {
651  {
652  applyPrescribedAngularVelocity(time + 0.5 * timeStep);
653  rotate(getAngularVelocity() * timeStep);
654  }
655  else
656  {
657  rotate(getAngularVelocity() * timeStep);
658  }
659  }
660 }
void rotate(const Vec3D &rotate)
Rotates this BaseInteractable.
std::function< Vec3D(double)> prescribedPosition_
void setVelocity(const Vec3D &velocity)
set the velocity of the BaseInteractable.
void applyPrescribedPosition(double time)
Computes the position from the user defined prescribed position function.
std::function< Vec3D(double)> prescribedVelocity_
void applyPrescribedAngularVelocity(double time)
Computes the angular velocity from the user defined prescribed angular velocity.
void applyPrescribedOrientation(double time)
Computes the orientation from the user defined prescribed orientation function.
virtual const Vec3D & getAngularVelocity() const
Returns the angular velocity of this interactable.
std::function< Vec3D(double)> prescribedOrientation_
void applyPrescribedVelocity(double time)
Computes the velocity from the user defined prescribed velocity function.
std::function< Vec3D(double)> prescribedAngularVelocity_
virtual const Vec3D & getVelocity() const
Returns the velocity of this interactable.
virtual void move(const Vec3D &move)
Moves this BaseInteractable by adding an amount to the position.
void setAngularVelocity(const Vec3D &angularVelocity)
set the angular velocity of the BaseInteractble.
void BaseInteractable::move ( const Vec3D move)
virtual

Moves this BaseInteractable by adding an amount to the position.

Moves (displaces) the interacable a given distance. Note, this just updates the position by the move.

Parameters
[in]moveReference to Vec3D which is the distance to move the interactable.

Reimplemented in IntersectionOfWalls.

Definition at line 274 of file BaseInteractable.cc.

References position_.

Referenced by HopperInsertionBoundary::generateParticle(), integrateBeforeForceComputation(), BaseParticle::integrateBeforeForceComputation(), IntersectionOfWalls::move(), LeesEdwardsBoundary::shiftHorizontalPosition(), AngledPeriodicBoundary::shiftPosition(), MaserBoundary::shiftPosition(), PeriodicBoundary::shiftPosition(), and LeesEdwardsBoundary::shiftVerticalPosition().

275 {
276  position_ += move;
277 }
virtual void move(const Vec3D &move)
Moves this BaseInteractable by adding an amount to the position.
void BaseInteractable::read ( std::istream &  is)
pure virtual

Reads a BaseInteractable from an input stream.

BaseInteacatable read functions. Reads in all the information about an interacatable. Note, this can be from any istream but would normally be a file See also BaseInteractable::write

Parameters
[in]isstd::istream to which the information is read from.

Implements BaseObject.

Implemented in IntersectionOfWalls, InfiniteWallWithHole, InfiniteWall, BaseParticle, Coil, AxisymmetricIntersectionOfWalls, Screw, CylindricalWall, and BaseWall.

Definition at line 297 of file BaseInteractable.cc.

References angularVelocity_, force_, indSpecies_, orientation_, position_, BaseObject::read(), torque_, and velocity_.

Referenced by BaseWall::read(), and BaseParticle::read().

298 {
299  BaseObject::read(is);
300  std::string dummy;
301  is >> dummy >> indSpecies_;
302  is >> dummy >> position_;
303  is >> dummy >> orientation_ >> dummy;
304  is >> dummy >> velocity_;
305  is >> dummy >> angularVelocity_ >> dummy;
306  is >> dummy >> force_;
307  is >> dummy >> torque_;
308 }
unsigned int indSpecies_
virtual void read(std::istream &is)=0
A purely virtual method with an implementation which reads the index from the stream and assigns it t...
Definition: BaseObject.cc:120
bool BaseInteractable::removeInteraction ( BaseInteraction I)

Removes an interaction from this BaseInteractable.

Removes a given interaction form the list of interactions belonging to the current interacable. This functions returns true to the interaction was found and returns false if the given interaction did not exist and the interaction was not removed.

Parameters
[in]IBaseInteraction pointer which is the interaction to be removed.
Returns
bool True if the interaction was found and removed; false if the interaction did not exist for that interactable.

Definition at line 360 of file BaseInteractable.cc.

References interactions_.

Referenced by BaseInteraction::setI(), BaseInteraction::setP(), and BaseInteraction::~BaseInteraction().

361 {
362  for (std::list<BaseInteraction*>::iterator it = interactions_.begin(); it != interactions_.end(); ++it)
363  {
364  if (I == (*it))
365  {
366  //std::cout<<"Removing interaction from "<<getId()<<" between "<<I->getI()->getId()<<" and "<<I->getP()->getId()<<std::endl;
367  interactions_.erase(it);
368  return true;
369  }
370  }
371  std::cerr << "Error in BaseInteractable::removeInteraction: Interaction could not be removed" << std::endl;
372  return false;
373 }
std::list< BaseInteraction * > interactions_
void BaseInteractable::rotate ( const Vec3D rotate)

Rotates this BaseInteractable.

Rotates the interacable a given solid angle. Note, this just updates the orientation by the angle.

Parameters
[in]rotateReference to Vec3D which is the solid angle through which the interactable is rotated.

Definition at line 285 of file BaseInteractable.cc.

References orientation_.

Referenced by integrateBeforeForceComputation(), BaseParticle::integrateBeforeForceComputation(), and AngledPeriodicBoundary::shiftPosition().

286 {
287  orientation_ += rotate;
288 }
void rotate(const Vec3D &rotate)
Rotates this BaseInteractable.
void BaseInteractable::setAngularVelocity ( const Vec3D angularVelocity)

set the angular velocity of the BaseInteractble.

See also BaseInteractable::getAngularVelocity

Parameters
[in]angularVelocityVec3D which is the angularVelocity of the interactable.

Definition at line 413 of file BaseInteractable.cc.

References angularVelocity_.

Referenced by applyPrescribedAngularVelocity(), BaseParticle::fixParticle(), integrateAfterForceComputation(), integrateBeforeForceComputation(), and ChuteBottom::setupInitialConditions().

414 {
415  angularVelocity_ = angularVelocity;
416 }
void BaseInteractable::setForce ( Vec3D  force)

Sets the force on this BaseInteractable.

This sets the force being applied to this interactable. Note, first the code computes all forces in the interactions and then loops over all interactable objects applying the forces from the interactions to the interactables involved in the interaction.

Parameters
[in]forceVec3D which is the force to be applied.

Definition at line 175 of file BaseInteractable.cc.

References force_.

176 {
177  force_ = force;
178 }
MERCURY_DEPRECATED void BaseInteractable::setIndSpecies ( unsigned int  indSpecies)
virtual

Sets the index of the Species of this BaseInteractable.

This set the species associated with this interactable. This function should not be used and BaseInteractable::setSpecies should be used instead. See also BaseInteractable::setSpecies

Reimplemented in BaseParticle, and BaseWall.

Definition at line 111 of file BaseInteractable.cc.

References indSpecies_.

Referenced by BaseWall::setIndSpecies(), and BaseParticle::setIndSpecies().

112 {
113  indSpecies_ = indSpecies;
114 }
unsigned int indSpecies_
void BaseInteractable::setOrientation ( const Vec3D orientation)

Sets the orientation of this BaseInteractable.

Sets the orientation of the interactable. interpretation depends on which interactable is being considered See also BaseInteractable::getOrientation.

Parameters
[in]orientationReference to Vec3D storing the orientation of the particle.

Definition at line 263 of file BaseInteractable.cc.

References orientation_.

Referenced by applyPrescribedOrientation(), BaseParticle::oldRead(), and ChuteBottom::setupInitialConditions().

264 {
265  orientation_ = orientation;
266 }
void BaseInteractable::setPosition ( const Vec3D position)

Sets the position of this BaseInteractable.

Sets the positions of the interactable. interpretation depends on which interactable is being considered See also BaseInteractable::getPosistion.

Parameters
[in]positionReference to Vec3D storing the position of the particle.

Definition at line 250 of file BaseInteractable.cc.

References position_.

Referenced by applyPrescribedPosition(), Chute::createBottom(), ChuteInsertionBoundary::generateParticle(), CubeInsertionBoundary::generateParticle(), HopperInsertionBoundary::generateParticle(), InfiniteWall::move(), BaseParticle::oldRead(), InfiniteWall::oldRead(), CircularPeriodicBoundary::rotateParticle(), InfiniteWall::set(), and ChuteBottom::setupInitialConditions().

251 {
252  position_ = position;
253 }
void BaseInteractable::setPrescribedAngularVelocity ( std::function< Vec3D(double)>  prescribedAngularVelocity)

Allows the angular velocity of the infinite mass interactable to be prescribed.

Definition at line 563 of file BaseInteractable.cc.

References prescribedAngularVelocity_.

564 {
565  prescribedAngularVelocity_ = prescribedAngularVelocity;
566 }
std::function< Vec3D(double)> prescribedAngularVelocity_
void BaseInteractable::setPrescribedOrientation ( std::function< Vec3D(double)>  prescribedOrientation)

Allows the orientation of the infinite mass interactbale to be prescribed.

This is similar to the BaseInteractable::setPrescribedPosition and works the same way. See BaseInteractable::setPrescibedPosition and BaseInteractable::setPrescribedVelocity for more details how it works. Note, the rate of change of the orientation can also be set using the function BaseInteractable::setPrescribedAngularVelocity.

Parameters
[in]prescribedOrientationstd::function which is the lambda function and takes a double the time and returns a Vec 3D which is the orientation of the interactable for that time.

Definition at line 536 of file BaseInteractable.cc.

References prescribedOrientation_.

537 {
538  prescribedOrientation_ = prescribedOrientation;
539 }
std::function< Vec3D(double)> prescribedOrientation_
void BaseInteractable::setPrescribedPosition ( std::function< Vec3D(double)>  prescribedPosition)

Allows the position of an infinite mass interactable to be prescribed.

This functions is used to give an interactable a prescribed motion, which is defined by a std::function. This is the new moving walls interface. A demo of the use would be: setPrescribedPosition([this] (double time) { return Vec3D(getXMin(),0.0,shaker_amp * std::sin(t * 2.0 * shaker_freq * constants::pi)); } ); This example moves the wall sinusoidally with time.

Parameters
[in]prescribedPositionstd::function which is the lambda function and takes a double the time and returns a Vec 3D which is the position of the interactable for that time. See also BaseInteractable::setPrescribedVelocity for more information.

Definition at line 475 of file BaseInteractable.cc.

References prescribedPosition_.

476 {
477  prescribedPosition_ = prescribedPosition;
478 }
std::function< Vec3D(double)> prescribedPosition_
void BaseInteractable::setPrescribedVelocity ( std::function< Vec3D(double)>  prescribedVelocity)

Allows the velocity of an infinite mass interactable to be prescribed.

In a similar manner to BaseInteractable::setPrescribedPosition this sets the velocity of the BaseInteactable. See also BaseInteractable::setPrescribedPosition Note, it is valid to set both the velocity and the position. No checking if these are consist is done at all. If you only set one of these function the other is automatically calculated using a by numerically differentiating or integrating the functions will is prescribed.

Parameters
[in]prescribedVelocitystd::function which is the lambda function and takes a double the time and returns a Vec 3D which is the velocity of the intertable for that time.

Definition at line 506 of file BaseInteractable.cc.

References prescribedVelocity_.

507 {
508  prescribedVelocity_ = prescribedVelocity;
509 }
std::function< Vec3D(double)> prescribedVelocity_
void BaseInteractable::setSpecies ( const ParticleSpecies species)

Sets the species of this BaseInteractable.

This function sets the species associated with this interactable object. Again this must be a ParticleSpecies. Note, it also automatically sets the index on the indSpecies_ by working up the correct index. However, index should be carefully used

Parameters
[in]speciesParticleSpcies pointer which is species holding the physical properties.

Definition at line 136 of file BaseInteractable.cc.

References BaseObject::getIndex(), indSpecies_, and species_.

Referenced by BaseWall::setSpecies(), and BaseParticle::setSpecies().

137 {
138  species_ = species;
139  indSpecies_ = species->getIndex();
140 }
unsigned int getIndex() const
Returns the index of the object in the handler.
Definition: BaseObject.cc:106
unsigned int indSpecies_
const ParticleSpecies * species_
void BaseInteractable::setTorque ( Vec3D  torque)

Sets the torque on this BaseInteractable.

This sets the torque being applied to this interactable. Note, first the code computes all force/torques in the interactions and then loops over all interactable objects applying the torques from the interactions to the interactables involved in the interaction.

Parameters
[in]torqueVec3D which is the force to be applied.

Definition at line 188 of file BaseInteractable.cc.

References torque_.

189 {
190  torque_ = torque;
191 }
void BaseInteractable::write ( std::ostream &  os) const
pure virtual

Write a BaseInteractable to an output stream.

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

BaseInteractable write function. Writes out all the information required to recreate this interactable. To write this interactable to the screen call write(std::cout). See also BaseInteractable::read

Parameters
[in]osstd::ostream to which the information is written. Note, is any ostream is can be file or screen.

Implements BaseObject.

Implemented in IntersectionOfWalls, InfiniteWallWithHole, InfiniteWall, BaseParticle, Coil, Screw, CylindricalWall, AxisymmetricIntersectionOfWalls, and BaseWall.

Definition at line 318 of file BaseInteractable.cc.

References angularVelocity_, force_, indSpecies_, orientation_, position_, torque_, velocity_, and BaseObject::write().

Referenced by BaseWall::write(), and BaseParticle::write().

319  {
320  BaseObject::write(os);
321  os << " indSpecies " << indSpecies_
322  << " position " << position_
323  << " orientation " << orientation_ << " " << 0.0
324  << " velocity " << velocity_
325  << " angularVelocity " << angularVelocity_ << " " << 0.0
326  << " force " << force_
327  << " torque " << torque_;
328 }
unsigned int indSpecies_
virtual void write(std::ostream &os) const =0
A purely virtual function which has an implementation which writes the name and the object id_ to the...
Definition: BaseObject.cc:128

Member Data Documentation

Vec3D BaseInteractable::angularVelocity_
private

Store the angular velocity of the interactable.

Definition at line 325 of file BaseInteractable.h.

Referenced by addAngularVelocity(), BaseInteractable(), getAngularVelocity(), read(), setAngularVelocity(), and write().

Vec3D BaseInteractable::force_
private

Stores the force applied to the interactable.

Definition at line 330 of file BaseInteractable.h.

Referenced by addForce(), BaseInteractable(), getForce(), read(), setForce(), and write().

unsigned int BaseInteractable::indSpecies_
private

Stores the index on the species associated with this interactable.

Definition at line 346 of file BaseInteractable.h.

Referenced by BaseInteractable(), getIndSpecies(), read(), setIndSpecies(), setSpecies(), and write().

std::list<BaseInteraction*> BaseInteractable::interactions_
private

List of interactions this interactable is involved with.

Definition at line 356 of file BaseInteractable.h.

Referenced by addInteraction(), BaseInteractable(), copyInteractionsForPeriodicParticles(), getInteractions(), removeInteraction(), and ~BaseInteractable().

Vec3D BaseInteractable::orientation_
private

Stores the orientation of the interactable. Exactly what is stored depends on the type of interatable

Definition at line 320 of file BaseInteractable.h.

Referenced by BaseInteractable(), getOrientation(), read(), rotate(), setOrientation(), and write().

Vec3D BaseInteractable::position_
private

Stores the position of the interactable. Exactly what is stored depends on the type of interactable.

Definition at line 314 of file BaseInteractable.h.

Referenced by BaseInteractable(), getPosition(), move(), read(), setPosition(), and write().

std::function<Vec3D (double)> BaseInteractable::prescribedAngularVelocity_
private

User defined functions which if set describes the angular velocity of the interactable.

Definition at line 308 of file BaseInteractable.h.

Referenced by applyPrescribedAngularVelocity(), integrateAfterForceComputation(), integrateBeforeForceComputation(), and setPrescribedAngularVelocity().

std::function<Vec3D (double)> BaseInteractable::prescribedOrientation_
private

User defined function which if set describes the orientation of the interactable

Definition at line 302 of file BaseInteractable.h.

Referenced by applyPrescribedOrientation(), integrateAfterForceComputation(), integrateBeforeForceComputation(), and setPrescribedOrientation().

std::function<Vec3D (double)> BaseInteractable::prescribedPosition_
private

User defined function which if set describes the position of the interactable

Definition at line 290 of file BaseInteractable.h.

Referenced by applyPrescribedPosition(), BaseInteractable(), integrateAfterForceComputation(), integrateBeforeForceComputation(), and setPrescribedPosition().

std::function<Vec3D (double)> BaseInteractable::prescribedVelocity_
private

User defined function which if set describes the velocity of the interactable.

Definition at line 296 of file BaseInteractable.h.

Referenced by applyPrescribedVelocity(), BaseInteractable(), integrateAfterForceComputation(), integrateBeforeForceComputation(), and setPrescribedVelocity().

const ParticleSpecies* BaseInteractable::species_
private

Point to the ParticlesSpecies which stores density and other material properties of the interactable.

Definition at line 341 of file BaseInteractable.h.

Referenced by BaseInteractable(), getSpecies(), and setSpecies().

Vec3D BaseInteractable::torque_
private

Stores the torque applied to the interactable.

Definition at line 335 of file BaseInteractable.h.

Referenced by addTorque(), BaseInteractable(), getTorque(), read(), setTorque(), and write().

Vec3D BaseInteractable::velocity_
private

Stores the velocity of this interactable.

Definition at line 351 of file BaseInteractable.h.

Referenced by addVelocity(), BaseInteractable(), getVelocity(), read(), setVelocity(), and write().


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