revision: v0.14
MindlinSpecies Class Reference

MindlinSpecies contains the parameters used to describe sliding friction. More...

#include <MindlinSpecies.h>

+ Inheritance diagram for MindlinSpecies:

Public Types

typedef MindlinInteraction InteractionType
 The correct Interaction type for this FrictionForceSpecies. More...
 

Public Member Functions

 MindlinSpecies ()
 The default constructor. More...
 
 MindlinSpecies (const MindlinSpecies &s)
 The default copy constructor. More...
 
 ~MindlinSpecies ()
 The default destructor. More...
 
void read (std::istream &is)
 Reads the species properties from an input stream. More...
 
void write (std::ostream &os) const
 Writes the species properties to an output stream. More...
 
virtual std::string getBaseName () const
 Used in Species::getName to obtain a unique name for each Species. More...
 
void setSlidingDissipation (Mdouble new_dispt)
 Allows the tangential viscosity to be changed. More...
 
Mdouble getSlidingDissipation () const
 Allows the tangential viscosity to be accessed. More...
 
void setSlidingFrictionCoefficient (Mdouble new_mu)
 Allows the (dynamic) Coulomb friction coefficient to be changed; also sets mu_s by default. More...
 
Mdouble getSlidingFrictionCoefficient () const
 Allows the (dynamic) Coulomb friction coefficient to be accessed. More...
 
void setSlidingFrictionCoefficientStatic (Mdouble new_mu)
 Allows the static Coulomb friction coefficient to be changed. More...
 
Mdouble getSlidingFrictionCoefficientStatic () const
 Allows the static Coulomb friction coefficient to be accessed. More...
 
MERCURY_DEPRECATED void setPoissonRatio (Mdouble poissonRatio)
 Allows the poisson ratio to be changed. More...
 
void setEffectiveShearModulus (Mdouble shearModulus)
 allows the shear modulus to be changed More...
 
Mdouble getEffectiveShearModulus () const
 Allows the shear modulus to be accessed. More...
 
bool getUseAngularDOFs () const override
 Returns true if torques have to be calculated. More...
 
void mix (MindlinSpecies *S, MindlinSpecies *T)
 creates default values for mixed species More...
 
- Public Member Functions inherited from BaseForce
BaseSpeciesgetBaseSpecies () const
 
void setBaseSpecies (BaseSpecies *baseSpecies)
 

Private Attributes

Mdouble slidingDissipation_
 tangential dissipation coefficient. More...
 
Mdouble slidingFrictionCoefficient_
 (dynamic) Coulomb friction coefficient More...
 
Mdouble slidingFrictionCoefficientStatic_
 static Coulomb friction coefficient (by default set equal to mu) More...
 
Mdouble shearModulus_
 tangential spring constant More...
 

Detailed Description

MindlinSpecies contains the parameters used to describe sliding friction.

See MindlinInteraction::computeForce for a description of the force law.

Member Typedef Documentation

◆ InteractionType

The correct Interaction type for this FrictionForceSpecies.

Constructor & Destructor Documentation

◆ MindlinSpecies() [1/2]

MindlinSpecies::MindlinSpecies ( )

The default constructor.

38 {
42  shearModulus_ = 0;
43 #ifdef DEBUG_CONSTRUCTOR
44  std::cout<<"MindlinSpecies::MindlinSpecies() finished"<<std::endl;
45 #endif
46 }

References shearModulus_, slidingDissipation_, slidingFrictionCoefficient_, and slidingFrictionCoefficientStatic_.

◆ MindlinSpecies() [2/2]

MindlinSpecies::MindlinSpecies ( const MindlinSpecies s)

The default copy constructor.

Parameters
[in]sthe species that is copied
52 {
57 #ifdef DEBUG_CONSTRUCTOR
58  std::cout<<"MindlinSpecies::MindlinSpecies(const MindlinSpecies &p) finished"<<std::endl;
59 #endif
60 }

References shearModulus_, slidingDissipation_, slidingFrictionCoefficient_, and slidingFrictionCoefficientStatic_.

◆ ~MindlinSpecies()

MindlinSpecies::~MindlinSpecies ( )

The default destructor.

63 {
64 #ifdef DEBUG_DESTRUCTOR
65  std::cout<<"MindlinSpecies::~MindlinSpecies() finished"<<std::endl;
66 #endif
67 }

Member Function Documentation

◆ getBaseName()

std::string MindlinSpecies::getBaseName ( ) const
virtual

Used in Species::getName to obtain a unique name for each Species.

Returns
a string containing the name of the species (minus the word "Species")

Reimplemented in MindlinRollingTorsionSpecies.

99 {
100  return "Mindlin";
101 }

◆ getEffectiveShearModulus()

Mdouble MindlinSpecies::getEffectiveShearModulus ( ) const

Allows the shear modulus to be accessed.

184 {
185  return shearModulus_;
186 }

References shearModulus_.

Referenced by MindlinInteraction::computeFrictionForce(), mix(), and setPoissonRatio().

◆ getSlidingDissipation()

Mdouble MindlinSpecies::getSlidingDissipation ( ) const

Allows the tangential viscosity to be accessed.

117 {
118  return slidingDissipation_;
119 }

References slidingDissipation_.

Referenced by MindlinInteraction::computeFrictionForce(), and mix().

◆ getSlidingFrictionCoefficient()

Mdouble MindlinSpecies::getSlidingFrictionCoefficient ( ) const

Allows the (dynamic) Coulomb friction coefficient to be accessed.

138 {
140 }

References slidingFrictionCoefficient_.

Referenced by MindlinInteraction::computeFrictionForce(), and mix().

◆ getSlidingFrictionCoefficientStatic()

Mdouble MindlinSpecies::getSlidingFrictionCoefficientStatic ( ) const

Allows the static Coulomb friction coefficient to be accessed.

190 {
192 }

References slidingFrictionCoefficientStatic_.

Referenced by mix().

◆ getUseAngularDOFs()

bool MindlinSpecies::getUseAngularDOFs ( ) const
overridevirtual

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

Returns
true

Implements BaseFrictionForce.

201 {
202  return true;
203 }

◆ mix()

void MindlinSpecies::mix ( MindlinSpecies S,
MindlinSpecies T 
)

creates default values for mixed species

For all parameters we assume that the harmonic mean of the parameters of the original two species is a sensible default.

Parameters
[in]SFrictionalthe first species whose properties are mixed to create the new species
[in]TFrictionalthe second species whose properties are mixed to create the new species
212 {
213  slidingDissipation_ = BaseSpecies::average(SFrictional->getSlidingDissipation(),TFrictional->getSlidingDissipation());
214  slidingFrictionCoefficient_ = BaseSpecies::average(SFrictional->getSlidingFrictionCoefficient(),TFrictional->getSlidingFrictionCoefficient());
215  slidingFrictionCoefficientStatic_ = BaseSpecies::average(SFrictional->getSlidingFrictionCoefficientStatic(),TFrictional->getSlidingFrictionCoefficientStatic());
216  shearModulus_ = BaseSpecies::average(SFrictional->getEffectiveShearModulus(), TFrictional->getEffectiveShearModulus());
217 }

References BaseSpecies::average(), getEffectiveShearModulus(), getSlidingDissipation(), getSlidingFrictionCoefficient(), getSlidingFrictionCoefficientStatic(), shearModulus_, slidingDissipation_, slidingFrictionCoefficient_, and slidingFrictionCoefficientStatic_.

◆ read()

void MindlinSpecies::read ( std::istream &  is)

Reads the species properties from an input stream.

Parameters
[in]isinput stream (typically the restart file)
86 {
87  //BaseSpecies::read(is);
88  std::string dummy;
89  is >> dummy >> slidingDissipation_;
90  is >> dummy >> slidingFrictionCoefficient_;
91  is >> dummy >> slidingFrictionCoefficientStatic_;
92  is >> dummy >> shearModulus_;
93 }

References shearModulus_, slidingDissipation_, slidingFrictionCoefficient_, and slidingFrictionCoefficientStatic_.

Referenced by MindlinRollingTorsionSpecies::read().

◆ setEffectiveShearModulus()

void MindlinSpecies::setEffectiveShearModulus ( Mdouble  shearModulus)

allows the shear modulus to be changed

Allows the shear modulus to be changed.

176 {
177  logger.assert_debug(shearModulus > 0,
178  "setEffectiveShearModulus(%): value needs to be positive",shearModulus);
179  shearModulus_ = shearModulus;
180 }

References logger, and shearModulus_.

◆ setPoissonRatio()

void MindlinSpecies::setPoissonRatio ( Mdouble  poissonRatio)

Allows the poisson ratio to be changed.

157 {
158  auto hertz = dynamic_cast<HertzianViscoelasticNormalSpecies*>(getBaseSpecies());
159  logger.assert_debug(hertz, "setPoissonRatio only works with HertzianViscoelastic*Species.");
160  shearModulus_ = hertz->getEffectiveElasticModulus() / 2 * (1 + poissonRatio);
161  logger(INFO, "Effective shear modulus set to %, based on effective elastic modulus % and Poisson's ratio %",
163  hertz->getEffectiveElasticModulus(), poissonRatio);
164 }

References BaseForce::getBaseSpecies(), getEffectiveShearModulus(), INFO, logger, and shearModulus_.

◆ setSlidingDissipation()

void MindlinSpecies::setSlidingDissipation ( Mdouble  new_dispt)

Allows the tangential viscosity to be changed.

106 {
107  if (new_dispt >= 0)
108  slidingDissipation_ = new_dispt;
109  else
110  {
111  logger(ERROR, "Error in setSlidingDissipation");
112  }
113 }

References ERROR, logger, and slidingDissipation_.

◆ setSlidingFrictionCoefficient()

void MindlinSpecies::setSlidingFrictionCoefficient ( Mdouble  new_mu)

Allows the (dynamic) Coulomb friction coefficient to be changed; also sets mu_s by default.

124 {
125  if (new_mu >= 0)
126  {
129  }
130  else
131  {
132  logger(ERROR, "Error in setSlidingFrictionCoefficient");
133  }
134 }

References ERROR, logger, slidingFrictionCoefficient_, and slidingFrictionCoefficientStatic_.

◆ setSlidingFrictionCoefficientStatic()

void MindlinSpecies::setSlidingFrictionCoefficientStatic ( Mdouble  new_mu)

Allows the static Coulomb friction coefficient to be changed.

144 {
145  if (new_mu >= 0)
146  {
148  }
149  else
150  {
151  logger(ERROR, "Error in setSlidingFrictionCoefficientStatic");
152  }
153 }

References ERROR, logger, and slidingFrictionCoefficientStatic_.

◆ write()

void MindlinSpecies::write ( std::ostream &  os) const

Writes the species properties to an output stream.

Parameters
[out]osoutput stream (typically the restart file)
74 {
75  //BaseSpecies::write(os);
76  os << " slidingDissipation " << slidingDissipation_;
77  os << " slidingFrictionCoefficient " << slidingFrictionCoefficient_;
78  os << " slidingFrictionCoefficientStatic " << slidingFrictionCoefficientStatic_;
79  os << " shearModulus " << shearModulus_;
80 }

References shearModulus_, slidingDissipation_, slidingFrictionCoefficient_, and slidingFrictionCoefficientStatic_.

Referenced by MindlinRollingTorsionSpecies::write().

Member Data Documentation

◆ shearModulus_

Mdouble MindlinSpecies::shearModulus_
private

◆ slidingDissipation_

Mdouble MindlinSpecies::slidingDissipation_
private

tangential dissipation coefficient.

Typically set to 2/7 of the normal force dissipation, as both the tangential and the normal spring have the same restitution coefficients (if the tangential and normal stiffnesses also have a ratio of 2/7). should always satisfy \(4*dispt*dt<mass, dispt \approx disp\), otherwise the restitution is zero and the particles stick.

Referenced by getSlidingDissipation(), MindlinSpecies(), mix(), read(), setSlidingDissipation(), and write().

◆ slidingFrictionCoefficient_

Mdouble MindlinSpecies::slidingFrictionCoefficient_
private

(dynamic) Coulomb friction coefficient

Referenced by getSlidingFrictionCoefficient(), MindlinSpecies(), mix(), read(), setSlidingFrictionCoefficient(), and write().

◆ slidingFrictionCoefficientStatic_

Mdouble MindlinSpecies::slidingFrictionCoefficientStatic_
private

static Coulomb friction coefficient (by default set equal to mu)

Referenced by getSlidingFrictionCoefficientStatic(), MindlinSpecies(), mix(), read(), setSlidingFrictionCoefficient(), setSlidingFrictionCoefficientStatic(), and write().


The documentation for this class was generated from the following files:
MindlinSpecies::shearModulus_
Mdouble shearModulus_
tangential spring constant
Definition: MindlinSpecies.h:118
logger
Logger< MERCURY_LOGLEVEL > logger("MercuryKernel")
Definition of different loggers with certain modules. A user can define its own custom logger here.
INFO
LL< Log::INFO > INFO
Info log level.
Definition: Logger.cc:55
ERROR
LL< Log::ERROR > ERROR
Error log level.
Definition: Logger.cc:53
BaseSpecies::average
static Mdouble average(Mdouble a, Mdouble b)
Returns the harmonic mean of two variables.
Definition: BaseSpecies.cc:110
MindlinSpecies::getEffectiveShearModulus
Mdouble getEffectiveShearModulus() const
Allows the shear modulus to be accessed.
Definition: MindlinSpecies.cc:183
MindlinSpecies::slidingDissipation_
Mdouble slidingDissipation_
tangential dissipation coefficient.
Definition: MindlinSpecies.h:109
HertzianViscoelasticNormalSpecies
HertzianViscoelasticNormalSpecies contains the parameters used to describe a Hertzian normal force (T...
Definition: HertzianViscoelasticNormalSpecies.h:38
MindlinSpecies::slidingFrictionCoefficient_
Mdouble slidingFrictionCoefficient_
(dynamic) Coulomb friction coefficient
Definition: MindlinSpecies.h:112
MindlinSpecies::slidingFrictionCoefficientStatic_
Mdouble slidingFrictionCoefficientStatic_
static Coulomb friction coefficient (by default set equal to mu)
Definition: MindlinSpecies.h:115
BaseForce::getBaseSpecies
BaseSpecies * getBaseSpecies() const
Definition: BaseForce.h:35