SPHNormalSpecies Class Reference

SPHNormalSpecies contains the parameters used to describe a SPH model. More...

#include <SPHNormalSpecies.h>

+ Inheritance diagram for SPHNormalSpecies:

Public Types

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

Public Member Functions

 SPHNormalSpecies ()
 The default constructor. More...
 
 SPHNormalSpecies (const SPHNormalSpecies &p)
 The default copy constructor. More...
 
 ~SPHNormalSpecies ()
 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...
 
std::string getBaseName () const
 Used in Species::getName to obtain a unique name for each Species. More...
 
Mdouble getMaximumVelocity (Mdouble radius, Mdouble mass) const
 Calculates the maximum velocity allowed for a collision of two copies of P (for higher velocities particles could pass through each other) More...
 
void setStiffnessAndRestitutionCoefficient (Mdouble k_, Mdouble eps, Mdouble mass)
 Sets k, disp such that it matches a given tc and eps for a collision of two copies of P. More...
 
void setRestitutionCoefficient (double eps, Mdouble mass)
 Sets disp to obtain a restitution coefficient eps for a collision of two particles of mass m. More...
 
void setCollisionTimeAndRestitutionCoefficient (Mdouble tc, Mdouble eps, BaseParticle *p)
 Sets k, disp such that it matches a given tc and eps for a collision of two copies of particle p. More...
 
void setCollisionTimeAndRestitutionCoefficient (Mdouble tc, Mdouble eps, Mdouble mass)
 Sets k, disp such that it matches a given tc and eps for a collision of two copies of equal mass m. More...
 
void setCollisionTimeAndRestitutionCoefficient (Mdouble collisionTime, Mdouble restitutionCoefficient, Mdouble mass1, Mdouble mass2)
 
Mdouble getCollisionTime (Mdouble mass) const
 Calculates collision time for two copies of a particle of given disp, k, mass. More...
 
Mdouble getRestitutionCoefficient (Mdouble mass) const
 Calculates restitution coefficient for two copies of given disp, k, mass. More...
 
void mix (SPHNormalSpecies *SBase, SPHNormalSpecies *TBase)
 creates default values for mixed species More...
 
void setStiffness (Mdouble new_k)
 Allows the spring constant to be changed. More...
 
Mdouble getStiffness () const
 Allows the spring constant to be accessed. More...
 
void setDissipation (Mdouble dissipation)
 Allows the normal dissipation to be changed. More...
 
Mdouble getDissipation () const
 Allows the normal dissipation to be accessed. More...
 
MERCURYDPM_DEPRECATED void setStiffnessAndDissipation (helpers::KAndDisp new_)
 Allows the spring and dissipation constants to be changed simultaneously. More...
 
- Public Member Functions inherited from BaseNormalForce
 BaseNormalForce ()
 
 BaseNormalForce (const BaseNormalForce &p)
 
bool getConstantRestitution () const
 
void setConstantRestitution (bool constantRestitution)
 
virtual void actionsAfterTimeStep (BaseParticle *particle) const
 
- Public Member Functions inherited from BaseForce
BaseSpeciesgetBaseSpecies () const
 
void setBaseSpecies (BaseSpecies *baseSpecies)
 

Private Attributes

Mdouble stiffness_
 (normal) spring constant More...
 
Mdouble dissipation_
 (normal) viscosity More...
 

Detailed Description

SPHNormalSpecies contains the parameters used to describe a SPH model.

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

Member Typedef Documentation

◆ InteractionType

The correct Interaction type for this FrictionForceSpecies.

Constructor & Destructor Documentation

◆ SPHNormalSpecies() [1/2]

SPHNormalSpecies::SPHNormalSpecies ( )

The default constructor.

15  : BaseNormalForce()
16 {
17  stiffness_ = 0.0;
18  dissipation_ = 0.0;
19 #ifdef DEBUG_CONSTRUCTOR
20  std::cout<<"LinearViscoelasticNormalSpecies::LinearViscoelasticNormalSpecies() finished"<<std::endl;
21 #endif
22 }
BaseNormalForce()
Definition: BaseNormalForce.h:14
Mdouble dissipation_
(normal) viscosity
Definition: SPHNormalSpecies.h:96
Mdouble stiffness_
(normal) spring constant
Definition: SPHNormalSpecies.h:95

References dissipation_, and stiffness_.

◆ SPHNormalSpecies() [2/2]

SPHNormalSpecies::SPHNormalSpecies ( const SPHNormalSpecies p)

The default copy constructor.

Parameters
[in]thespecies that is copied
29 {
30  stiffness_ = p.stiffness_;
31  dissipation_ = p.dissipation_;
32 #ifdef DEBUG_CONSTRUCTOR
33  std::cout<<"LinearViscoelasticNormalSpecies::LinearViscoelasticNormalSpecies(const LinearViscoelasticNormalSpecies &p) finished"<<std::endl;
34 #endif
35 }
float * p
Definition: Tutorial_Map_using.cpp:9

References dissipation_, p, and stiffness_.

◆ ~SPHNormalSpecies()

SPHNormalSpecies::~SPHNormalSpecies ( )

The default destructor.

38 {
39 #ifdef DEBUG_DESTRUCTOR
40  std::cout<<"LinearViscoelasticNormalSpecies::~LinearViscoelasticNormalSpecies() finished"<<std::endl;
41 #endif
42 }

Member Function Documentation

◆ getBaseName()

std::string SPHNormalSpecies::getBaseName ( ) const

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")
67 {
68  return "LinearViscoelastic";
69 }

◆ getCollisionTime()

Mdouble SPHNormalSpecies::getCollisionTime ( Mdouble  mass) const

Calculates collision time for two copies of a particle of given disp, k, mass.

Calculates collision time for two copies of a particle of given disp, k, mass

Parameters
[in]massmass of a typical particle
119 {
120  if (mass <= 0)
121  {
122  std::cerr << "Warning in getCollisionTime(" << mass
123  << ") mass is not set or has an unexpected value, (getCollisionTime(" << mass << "))" << std::endl;
124  }
125  if (stiffness_ <= 0)
126  {
127  std::cerr << "Warning in getCollisionTime(" << mass << ") stiffness=" << stiffness_
128  << " is not set or has an unexpected value, (getCollisionTime(" << mass << "), with stiffness="
129  << stiffness_ << ")" << std::endl;
130  }
131  if (dissipation_ < 0)
132  {
133  std::cerr << "Warning in getCollisionTime(" << mass << ") dissipation=" << dissipation_
134  << " is not set or has an unexpected value, (getCollisionTime(" << mass << "), with dissipation="
135  << dissipation_ << ")" << std::endl;
136  }
137  Mdouble tosqrt = stiffness_ / (.5 * mass) - mathsFunc::square(dissipation_ / mass);
138  if (tosqrt <= 0)
139  {
140  std::cerr << "Warning in getCollisionTime(" << mass
141  << ") values for mass, stiffness and dissipation would lead to an overdamped system, (getCollisionTime("
142  << mass << "), with stiffness=" << stiffness_ << " and dissipation=" << dissipation_ << ")"
143  << std::endl;
144  }
145  return constants::pi / std::sqrt(tosqrt);
146 }
AnnoyingScalar sqrt(const AnnoyingScalar &x)
Definition: AnnoyingScalar.h:134
double Mdouble
Definition: GeneralDefine.h:13
const Mdouble pi
Definition: ExtendedMath.h:23
T square(const T val)
squares a number
Definition: ExtendedMath.h:86

References dissipation_, constants::pi, sqrt(), mathsFunc::square(), and stiffness_.

Referenced by getRestitutionCoefficient().

◆ getDissipation()

Mdouble SPHNormalSpecies::getDissipation ( ) const

Allows the normal dissipation to be accessed.

112 {
113  return dissipation_;
114 }

References dissipation_.

Referenced by SPHInteraction::computeNormalForce(), and setCollisionTimeAndRestitutionCoefficient().

◆ getMaximumVelocity()

Mdouble SPHNormalSpecies::getMaximumVelocity ( Mdouble  radius,
Mdouble  mass 
) const

Calculates the maximum velocity allowed for a collision of two copies of P (for higher velocities particles could pass through each other)

156 {
157  return radius * std::sqrt(stiffness_ / (.5 * mass));
158 }
radius
Definition: UniformPSDSelfTest.py:15

References UniformPSDSelfTest::radius, sqrt(), and stiffness_.

◆ getRestitutionCoefficient()

Mdouble SPHNormalSpecies::getRestitutionCoefficient ( Mdouble  mass) const

Calculates restitution coefficient for two copies of given disp, k, mass.

150 {
151  return std::exp(-dissipation_ / mass * getCollisionTime(mass));
152 }
Mdouble getCollisionTime(Mdouble mass) const
Calculates collision time for two copies of a particle of given disp, k, mass.
Definition: SPHNormalSpecies.cc:118
EIGEN_STRONG_INLINE EIGEN_DEVICE_FUNC bfloat16 exp(const bfloat16 &a)
Definition: BFloat16.h:615

References dissipation_, Eigen::bfloat16_impl::exp(), and getCollisionTime().

◆ getStiffness()

Mdouble SPHNormalSpecies::getStiffness ( ) const

◆ mix()

void SPHNormalSpecies::mix ( SPHNormalSpecies SBase,
SPHNormalSpecies TBase 
)

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]S,Tthe two species whose properties are mixed to create the new species
242 {
243  stiffness_ = BaseSpecies::average(S->getStiffness(), T->getStiffness());
244  dissipation_ = BaseSpecies::average(S->getDissipation(), T->getDissipation());
245 }
static Mdouble average(Mdouble a, Mdouble b)
Returns the harmonic mean of two variables.
Definition: BaseSpecies.cc:89
@ S
Definition: quadtree.h:62

References BaseSpecies::average(), dissipation_, oomph::QuadTreeNames::S, and stiffness_.

◆ read()

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

Reads the species properties from an input stream.

Parameters
[in]inputstream (typically the restart file)
57 {
58  std::string dummy;
59  is >> dummy >> stiffness_
60  >> dummy >> dissipation_;
61 }
std::string string(const unsigned &i)
Definition: oomph_definitions.cc:286

References dissipation_, stiffness_, and oomph::Global_string_for_annotation::string().

◆ setCollisionTimeAndRestitutionCoefficient() [1/3]

void SPHNormalSpecies::setCollisionTimeAndRestitutionCoefficient ( Mdouble  collisionTime,
Mdouble  restitutionCoefficient,
Mdouble  mass1,
Mdouble  mass2 
)

Set k, disp such that is matches a given tc and eps for a collision of two different masses. Recall the resitution constant is a function of k, disp and the mass of each particle in the collision See also setCollisionTimeAndRestitutionCoefficient(Mdouble tc, Mdouble eps, Mdouble mass)

Set k, disp such that is matches a given tc and eps for a collision of two different masses. Recall the resitution constant is a function of k, disp and the mass of each particle in the collision See also setCollisionTimeAndRestitutionCoefficient(Mdouble tc, Mdouble eps, Mdouble mass)

Parameters
[in]collisiontime
230 {
231  Mdouble reduced_mass = mass1 * mass2 / (mass1 + mass2);
232  setCollisionTimeAndRestitutionCoefficient(collisionTime, restitutionCoefficient, 2.0 * reduced_mass);
233 }
void setCollisionTimeAndRestitutionCoefficient(Mdouble tc, Mdouble eps, BaseParticle *p)
Sets k, disp such that it matches a given tc and eps for a collision of two copies of particle p.
Definition: SPHNormalSpecies.cc:190

References setCollisionTimeAndRestitutionCoefficient().

◆ setCollisionTimeAndRestitutionCoefficient() [2/3]

void SPHNormalSpecies::setCollisionTimeAndRestitutionCoefficient ( Mdouble  tc,
Mdouble  eps,
BaseParticle p 
)

Sets k, disp such that it matches a given tc and eps for a collision of two copies of particle p.

191 {
192  Mdouble mass = p->getSpecies()->getDensity() * p->getVolume();
194 }
double eps
Definition: crbond_bessel.cc:24

References CRBond_Bessel::eps, and p.

Referenced by setCollisionTimeAndRestitutionCoefficient().

◆ setCollisionTimeAndRestitutionCoefficient() [3/3]

void SPHNormalSpecies::setCollisionTimeAndRestitutionCoefficient ( Mdouble  tc,
Mdouble  eps,
Mdouble  mass 
)

Sets k, disp such that it matches a given tc and eps for a collision of two copies of equal mass m.

Sets k, disp such that it matches a given tc and eps for a collision of two copies of equal mass m

Parameters
[in]tccollision time
[in]epsrestitution coefficient
[in]massharmonic average particle mass, \(\frac{2}{1/m1+1/m2}\)
204 {
205  if (eps == 0.0)
206  {
207  stiffness_ = .5 * mass * mathsFunc::square(constants::pi / tc);
208  dissipation_ = std::sqrt(2.0 * mass * stiffness_);
209  }
210  else
211  {
212  dissipation_ = -mass / tc * mathsFunc::log(eps);
213  stiffness_ = .5 * mass * (mathsFunc::square(constants::pi / tc)
214  + mathsFunc::square(dissipation_ / mass));
215  }
216  logger(INFO,
217  "setCollisionTimeAndRestitutionCoefficient: set stiffness to % and dissipation to % to obtain a collision time of % and a restitution coefficient of % for two particles of mass %",
218  getStiffness(), getDissipation(), tc, eps, mass);
219 }
Logger< MERCURYDPM_LOGLEVEL > logger("MercuryKernel")
Definition of different loggers with certain modules. A user can define its own custom logger here.
@ INFO
Mdouble getStiffness() const
Allows the spring constant to be accessed.
Definition: SPHNormalSpecies.cc:84
Mdouble getDissipation() const
Allows the normal dissipation to be accessed.
Definition: SPHNormalSpecies.cc:111
Mdouble log(Mdouble Power)
Definition: ExtendedMath.cc:83

References dissipation_, CRBond_Bessel::eps, getDissipation(), getStiffness(), INFO, mathsFunc::log(), logger, constants::pi, sqrt(), mathsFunc::square(), and stiffness_.

◆ setDissipation()

void SPHNormalSpecies::setDissipation ( Mdouble  dissipation)

Allows the normal dissipation to be changed.

98 {
99  if (dissipation >= 0)
100  {
101  dissipation_ = dissipation;
102  }
103  else
104  {
105  std::cerr << "Error in setDissipation(" << dissipation << ")" << std::endl;
106  exit(-1);
107  }
108 }

References dissipation_.

Referenced by setStiffnessAndDissipation().

◆ setRestitutionCoefficient()

void SPHNormalSpecies::setRestitutionCoefficient ( double  eps,
Mdouble  mass 
)

Sets disp to obtain a restitution coefficient eps for a collision of two particles of mass m.

Sets k, disp such that it matches a given tc and eps for a collision of two copies of P

Parameters
[in]stiffnessstiffness
[in]epsrestitution coefficient
[in]masseffective particle mass, \(\frac{2}{1/m1+1/m2}\)
179 {
180  if (eps == 0.0) {
181  dissipation_ = std::sqrt(2.0 * mass * getStiffness());
182  } else {
183  const Mdouble logEps = log(eps);
184  dissipation_ = -std::sqrt(2.0 * mass * getStiffness()
185  / (constants::sqr_pi + mathsFunc::square(logEps))) * logEps;
186  }
187 }
EIGEN_STRONG_INLINE EIGEN_DEVICE_FUNC bfloat16 log(const bfloat16 &a)
Definition: BFloat16.h:618
const Mdouble sqr_pi
Definition: ExtendedMath.h:25

References dissipation_, CRBond_Bessel::eps, getStiffness(), Eigen::bfloat16_impl::log(), constants::sqr_pi, sqrt(), and mathsFunc::square().

Referenced by setStiffnessAndRestitutionCoefficient().

◆ setStiffness()

void SPHNormalSpecies::setStiffness ( Mdouble  new_k)

Allows the spring constant to be changed.

73 {
74  if (new_k >= 0)
75  stiffness_ = new_k;
76  else
77  {
78  std::cerr << "Error in set_k" << std::endl;
79  exit(-1);
80  }
81 }

References stiffness_.

Referenced by setStiffnessAndDissipation().

◆ setStiffnessAndDissipation()

void SPHNormalSpecies::setStiffnessAndDissipation ( helpers::KAndDisp  new_)

Allows the spring and dissipation constants to be changed simultaneously.

91 {
92  setStiffness(new_.k);
93  setDissipation(new_.disp);
94 }
void setDissipation(Mdouble dissipation)
Allows the normal dissipation to be changed.
Definition: SPHNormalSpecies.cc:97
void setStiffness(Mdouble new_k)
Allows the spring constant to be changed.
Definition: SPHNormalSpecies.cc:72
Mdouble k
Definition: FormulaHelpers.h:18
Mdouble disp
Definition: FormulaHelpers.h:19

References helpers::KAndDisp::disp, helpers::KAndDisp::k, setDissipation(), and setStiffness().

◆ setStiffnessAndRestitutionCoefficient()

void SPHNormalSpecies::setStiffnessAndRestitutionCoefficient ( Mdouble  stiffness,
Mdouble  eps,
Mdouble  mass 
)

Sets k, disp such that it matches a given tc and eps for a collision of two copies of P.

Sets k, disp such that it matches a given tc and eps for a collision of two copies of P

Parameters
[in]stiffnessstiffness
[in]epsrestitution coefficient
[in]harmonicmean of particle masses, \(\frac{2}{1/m1+1/m2}\)
167 {
168  stiffness_ = stiffness;
170 }
void setRestitutionCoefficient(double eps, Mdouble mass)
Sets disp to obtain a restitution coefficient eps for a collision of two particles of mass m.
Definition: SPHNormalSpecies.cc:178

References CRBond_Bessel::eps, setRestitutionCoefficient(), and stiffness_.

◆ write()

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

Writes the species properties to an output stream.

Parameters
[out]outputstream (typically the restart file)
48 {
49  os << " stiffness " << stiffness_
50  << " dissipation " << dissipation_;
51 }

References dissipation_, and stiffness_.

Member Data Documentation

◆ dissipation_

◆ stiffness_


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