MercuryDPM
Alpha
|
Contains material and contact force properties. More...
#include <Interaction.h>
Public Types | |
typedef MixedSpecies < NormalForceSpecies, FrictionForceSpecies, AdhesiveForceSpecies > | MixedSpeciesType |
The correct MixedSpecies type for this Species. More... | |
typedef Interaction< typename NormalForceSpecies::InteractionType, typename FrictionForceSpecies::InteractionType, typename AdhesiveForceSpecies::InteractionType > | InteractionType |
Public Types inherited from ParticleSpecies | |
typedef BaseInteraction | InteractionType |
Public Member Functions | |
Species () | |
The default constructor. More... | |
Species (const Species &s) | |
The default copy constructor. More... | |
virtual | ~Species () |
The default destructor. More... | |
Species< NormalForceSpecies, FrictionForceSpecies, AdhesiveForceSpecies > * | copy () const final |
Creates a deep copy of the Species from which it is called. More... | |
BaseSpecies * | copyMixed () const final |
Creates a new MixedSpecies with the same force properties as the Species from which it is called. More... | |
void | read (std::istream &is) final |
Called by SpeciesHandler::readObject. More... | |
void | write (std::ostream &os) const final |
Writes the Species properties to an output stream. More... | |
std::string | getName () const final |
Returns the name of the Species as it is used in the restart file. More... | |
BaseInteraction * | getNewInteraction (BaseInteractable *P, BaseInteractable *I, Mdouble timeStamp) const final |
When a contact between two particles is determined, an Interaction object is created, as the type of Interaction depends on the Species type. More... | |
bool | getUseAngularDOFs () const final |
Returns true if torques have to be calculated. More... | |
void | mixAll (BaseSpecies *const S, BaseSpecies *const T) |
This function should not be called. More... | |
Mdouble | getInteractionDistance () const final |
Returns the particle distance below which adhesive forces can occur (needed for contact detection) More... | |
Public Member Functions inherited from ParticleSpecies | |
ParticleSpecies () | |
The default constructor. More... | |
ParticleSpecies (const ParticleSpecies &p) | |
The default copy constructor. More... | |
virtual | ~ParticleSpecies () |
The default destructor. More... | |
std::string | getBaseName () const |
Used in Species::getName to obtain a unique name for each Species. More... | |
void | setDensity (Mdouble density) |
Allows density_ to be changed. More... | |
Mdouble | getMassFromRadius (const Mdouble radius) const |
Mdouble | getVolumeFromRadius (const Mdouble radius) const |
Mdouble | getDensity () const |
Allows density_ to be accessed. More... | |
void | computeMass (BaseParticle *p) const |
Compute Particle mass function, which required a reference to the Species vector. It computes the Particles mass, Inertia and the inverses. More... | |
Public Member Functions inherited from BaseSpecies | |
BaseSpecies () | |
The default constructor. More... | |
BaseSpecies (const BaseSpecies &p) | |
The copy constructor. More... | |
virtual | ~BaseSpecies () |
The default destructor. More... | |
void | setHandler (SpeciesHandler *handler) |
Sets the pointer to the handler to which this species belongs. More... | |
SpeciesHandler * | getHandler () const |
Returns the pointer to the handler to which this species belongs. More... | |
Mdouble | average (Mdouble a, Mdouble b) |
defines the average of two variables by the harmonic mean. 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... | |
Contains material and contact force properties.
The species class contains both material and contact force properties. As there are many types of contact forces, the class is templated to allow for different force models.
This is done in a diamond inheritance structure: First, four kinds of Species are created:
There is only one ParticleSpecies; the three force species can be added using templates. E.g. to create a species with linear elastic-dissipative normal forces, sliding friction forces, and linear reversible short-range adhesion forces, use
Species<LinearViscoelasticNormalSpecies, SlidingFrictionSpecies, LinearReversibleAdhesiveSpecies> species;
EmptyFrictionSpecies and EmptyAdhesiveSpecies are the default template parameters, therefore they don't have to be explicitly named. A species with only linear elastic-dissipative normal forces and sliding friction tangential forces is created using
Species<LinearViscoelasticNormalSpecies, SlidingFrictionSpecies> species;
Also, to avoid that the user has to use templates, many combination of forces are predefined as a typedef, with the names of the force laws concatenated, e.g.
typedef Species<LinearViscoelasticNormalSpecies, SlidingFrictionSpecies> LinearViscoelasticSlidingFrictionSpecies;
Therefore to create such a Species, one has to type
LinearViscoelasticSlidingFrictionSpecies species;
If your code contains multiple Species, then MixedSpecies have to be defined, which contain the description of the forces acting between two species (it does not need a ParticleSpecies, since it is never used to assign mass to an object). Note, we assume that all Species have to be of the same type when multiple Species are used.
Since these MixedSpecies don't require a set of particle properties (such as density), they are created without a ParticleSpecies. The MixedSpecies is predefined as a typedef inside the Species definition, and can be accessed using
LinearViscoelasticSlidingFrictionSpecies::MixedSpeciesType mixedSpecies;
When a contact between two particles is determined, an Interaction object is created by Species::getNewInteraction, as the type of Interaction depends on the Species type. See Interaction for details.
Definition at line 35 of file Interaction.h.
typedef Interaction<typename NormalForceSpecies::InteractionType, typename FrictionForceSpecies::InteractionType, typename AdhesiveForceSpecies::InteractionType > Species< NormalForceSpecies, FrictionForceSpecies, AdhesiveForceSpecies >::InteractionType |
typedef MixedSpecies<NormalForceSpecies, FrictionForceSpecies, AdhesiveForceSpecies> Species< NormalForceSpecies, FrictionForceSpecies, AdhesiveForceSpecies >::MixedSpeciesType |
The correct MixedSpecies type for this Species.
The mixed species between two objects of type
Species<NormalForceSpecies,FrictionForceSpecies,AdhesiveForceSpecies>
is
MixedSpecies<NormalForceSpecies,FrictionForceSpecies,AdhesiveForceSpecies>
To access this MixedSpecies type, you can use this typedef.
Species< NormalForceSpecies, FrictionForceSpecies, AdhesiveForceSpecies >::Species | ( | ) |
The default constructor.
Definition at line 191 of file Species.h.
Species< NormalForceSpecies, FrictionForceSpecies, AdhesiveForceSpecies >::Species | ( | const Species< NormalForceSpecies, FrictionForceSpecies, AdhesiveForceSpecies > & | s | ) |
The default copy constructor.
[in] | s | the species that is copied |
Definition at line 203 of file Species.h.
|
virtual |
|
finalvirtual |
Creates a deep copy of the Species from which it is called.
Creates a deep copy of the Species. As this depends on the template parameters of Species, the definition of this function is in the Species class.
To create a copy of a Species, use
species->copy();
Implements ParticleSpecies.
Definition at line 228 of file Species.h.
|
finalvirtual |
Creates a new MixedSpecies with the same force properties as the Species from which it is called.
Species copy method. It calls to copy constructor of this Species, useful for polymorphism.
Implements ParticleSpecies.
Definition at line 236 of file Species.h.
|
finalvirtual |
Returns the particle distance below which adhesive forces can occur (needed for contact detection)
Implements BaseSpecies.
|
finalvirtual |
Returns the name of the Species as it is used in the restart file.
Returns the name of the Species as it is used in the restart file. The name of the species is a concatenation of the names of the three force components, e.g.
Species<LinearViscoelasticNormalSpecies,SlidingFrictionSpecies,ReversibleAdhesiveSpecies> species; std::cout << species.getName();
will output "LinearViscoelasticSlidingFrictionReversibleAdhesiveSpecies". The EmptyFrictionSpecies and the EmptyAdhesiveSpecies return empty strings, such that
Species<LinearViscoelasticNormalSpecies> species; std::cout << species.getName();
will output "LinearViscoelasticSpecies".
Implements BaseObject.
|
finalvirtual |
When a contact between two particles is determined, an Interaction object is created, as the type of Interaction depends on the Species type.
The input parameters of this function are directly passed into the constructor for the new interaction. See Interaction for details.
[in] | P | first of the two objects that interact |
[in] | I | second of the two objects that interact |
[in] | timeStamp | current value of DPMBase::time_ |
Implements BaseSpecies.
Definition at line 300 of file Species.h.
|
finalvirtual |
Returns true if torques have to be calculated.
Returns true for any FrictionForceSpecies except EmptyFrictionSpecies, because for spherical particles, torques are only caused by tangential forces. See SpeciesHandler::useAngularDOFs for more details
Implements BaseSpecies.
|
virtual |
This function should not be called.
This function should not be called as the mix of two Species results in a MixedSpecies, not a Species. However, I don't know how to avoid creating this function, as BaseSpecies pointers are used for the MixedSpecies, so BaseSpecies must have this function defined.
[in] | S | the first of the two species whose properties are mixed to create the new species |
[in] | T | the second of the two species whose properties are mixed to create the new species |
Implements BaseSpecies.
Definition at line 326 of file Species.h.
|
finalvirtual |
Called by SpeciesHandler::readObject.
[in] | is | input stream (typically the restart file) |
Reimplemented from ParticleSpecies.
Definition at line 261 of file Species.h.
References ParticleSpecies::read().
|
finalvirtual |
Writes the Species properties to an output stream.
It prints human readable Species information to the output stream, typically to Files::restartFile::fstream_ The basic species information is written in ParticleSpecies::write; then the three force types write additional information to the stream.
[out] | os | output stream (typically the restart file) |
Reimplemented from ParticleSpecies.
Definition at line 249 of file Species.h.
References ParticleSpecies::write().