SinterNormalSpecies Class Reference

SinterNormalSpecies contains the parameters used to describe a plastic-cohesive normal force (Stefan Ludings plastic-cohesive force model). More...

#include <SinterNormalSpecies.h>

+ Inheritance diagram for SinterNormalSpecies:

Public Types

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

Public Member Functions

 SinterNormalSpecies ()
 The default constructor. More...
 
 SinterNormalSpecies (const SinterNormalSpecies &p)
 The default copy constructor. More...
 
 ~SinterNormalSpecies ()
 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...
 
void mix (SinterNormalSpecies *S, SinterNormalSpecies *T)
 creates default values for mixed species More...
 
void setCollisionTimeAndRestitutionCoefficient (Mdouble tc, Mdouble eps, Mdouble mass)
 
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...
 
Mdouble getCollisionTime (Mdouble mass)
 Calculates collision time for two copies of a particle of given disp, k, mass. More...
 
void setPlasticParameters (Mdouble loadingStiffness, Mdouble unloadingStiffnessMax, Mdouble cohesionStiffness, Mdouble penetrationDepthMax)
 Sets all parameters of the linear plastic-viscoelastic normal force at once. More...
 
Mdouble getLoadingStiffness () const
 Returns the loading stiffness of the linear plastic-viscoelastic normal force. More...
 
Mdouble getUnloadingStiffnessMax () const
 Returns the maximum unloading stiffness of the linear plastic-viscoelastic normal force. More...
 
Mdouble getCohesionStiffness () const
 Returns the cohesive stiffness of the linear plastic-viscoelastic normal force. More...
 
Mdouble getPenetrationDepthMax () const
 Returns the maximum penetration depth of the linear plastic-viscoelastic normal force. More...
 
void setLoadingStiffness (Mdouble loadingStiffness)
 Sets the loading stiffness of the linear plastic-viscoelastic normal force. More...
 
void setUnloadingStiffnessMax (Mdouble unloadingStiffnessMax)
 Sets the maximum unloading stiffness of the linear plastic-viscoelastic normal force. More...
 
void setCohesionStiffness (Mdouble cohesionStiffness)
 Sets the cohesive stiffness of the linear plastic-viscoelastic normal force. More...
 
void setPenetrationDepthMax (Mdouble penetrationDepthMax)
 Sets the maximum penetration depth of the linear plastic-viscoelastic normal force. More...
 
void setDissipation (Mdouble dissipation)
 Sets the linear dissipation coefficient of the linear plastic-viscoelastic normal force. More...
 
Mdouble getDissipation () const
 Allows the normal dissipation to be accessed. More...
 
void setSinterAdhesion (Mdouble sinterAdhesion)
 Sets sinterAdhesion_. More...
 
Mdouble getSinterAdhesion () const
 Accesses sinterAdhesion_. More...
 
void setInverseSinterViscosity (Mdouble inverseSinterViscosity)
 Sets inverseSinterViscosity_. More...
 
Mdouble getInverseSinterViscosity () const
 Accesses inverseSinterViscosity_. More...
 
MERCURYDPM_DEPRECATED void setLoadingStiffnessAndDissipation (helpers::KAndDisp new_)
 Allows the spring and dissipation constants to be changed simultaneously. More...
 
Mdouble computeTimeStep (Mdouble mass)
 Returns the optimal time step to resolve a collision of two particles of a given mass. More...
 
void setSinterForceAndTime (Mdouble adhesionForce, Mdouble sinterTime, Mdouble radius)
 
void setParhamiMcKeeping (Mdouble alpha, Mdouble beta, Mdouble atomicVolume, Mdouble surfaceEnergy, Mdouble thicknessDiffusion, Mdouble activationEnergy, Mdouble temperature)
 Sets the sinterAdhesion_ and inverseSinterViscosity_ based on the Parhami-McKeeping parameters. More...
 
void setSinterRate (Mdouble sinterRate)
 Sets sinterRate_. More...
 
void setSinterType (SINTERTYPE sinterType)
 Sets sinterRate_. More...
 
Mdouble getSinterRate () const
 Accesses sinterRate_. More...
 
SINTERTYPE getSinterType () const
 
std::function< double(double temperature)> getTemperatureDependentSinterRate () const
 
double getTemperatureDependentSinterRate (double temperature) const
 
void setTemperatureDependentSinterRate (std::function< double(double temperature)> temperatureDependentSinterRate)
 
void setComplianceZero (Mdouble complianceZero)
 
Mdouble getComplianceZero () const
 
void setSurfTension (Mdouble complianceZero)
 
Mdouble getSurfTension () const
 
void setConstantC1 (Mdouble constantC1_)
 
Mdouble getConstantC1 () const
 
void setSeparationDis (Mdouble separationDis)
 
Mdouble getSeparationDis () const
 
- 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 loadingStiffness_
 (normal) spring constant (k_1) More...
 
Mdouble unloadingStiffnessMax_
 the maximum elastic constant (k_2^max) for plastic deformations More...
 
Mdouble cohesionStiffness_
 the adhesive spring constant (k^c) for plastic deformations More...
 
Mdouble penetrationDepthMax_
 the depth (relative to the normalized radius) at which k_2^max is used (phi_f) More...
 
Mdouble dissipation_
 linear dissipation coefficient More...
 
Mdouble sinterAdhesion_
 
Mdouble inverseSinterViscosity_
 
Mdouble sinterRate_
 
Mdouble complianceZero_
 
Mdouble surfTension_
 
Mdouble constantC1_
 
Mdouble separationDis_
 
SINTERTYPE sinterType_
 sinterType options determin how the rate of sintering, d(equilibriumOverlap)/dt is computed PARHAMI_MCKEEPING: sinter rate given by (sinterAdhesion+normalForce)/sinterViscosity CONSTANT_RATE: sinter rate given by sinterRate More...
 
std::function< double(double temperature)> temperatureDependentSinterRate_
 

Detailed Description

SinterNormalSpecies contains the parameters used to describe a plastic-cohesive normal force (Stefan Ludings plastic-cohesive force model).

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

Member Typedef Documentation

◆ InteractionType

The correct Interaction type for this FrictionForceSpecies.

Constructor & Destructor Documentation

◆ SinterNormalSpecies() [1/2]

SinterNormalSpecies::SinterNormalSpecies ( )

The default constructor.

15  : BaseNormalForce()
16 {
18  loadingStiffness_ = 0.0;
20  cohesionStiffness_ = 0.0;
22  dissipation_ = 0.0;
23  sinterAdhesion_ = 0.0;
24  sinterRate_ = 0.0;
26  complianceZero_ = 0.0;
27  surfTension_ = 0.0;
28  constantC1_ = 0.0;
29  separationDis_ = 0.0;
30 #ifdef DEBUG_CONSTRUCTOR
31  std::cout<<"SinterNormalSpecies::SinterNormalSpecies() finished"<<std::endl;
32 #endif
33 }
BaseNormalForce()
Definition: BaseNormalForce.h:14
Mdouble sinterAdhesion_
Definition: SinterNormalSpecies.h:223
Mdouble cohesionStiffness_
the adhesive spring constant (k^c) for plastic deformations
Definition: SinterNormalSpecies.h:212
Mdouble unloadingStiffnessMax_
the maximum elastic constant (k_2^max) for plastic deformations
Definition: SinterNormalSpecies.h:209
Mdouble penetrationDepthMax_
the depth (relative to the normalized radius) at which k_2^max is used (phi_f)
Definition: SinterNormalSpecies.h:215
Mdouble complianceZero_
Definition: SinterNormalSpecies.h:238
Mdouble surfTension_
Definition: SinterNormalSpecies.h:244
Mdouble separationDis_
Definition: SinterNormalSpecies.h:255
Mdouble inverseSinterViscosity_
Definition: SinterNormalSpecies.h:228
SINTERTYPE sinterType_
sinterType options determin how the rate of sintering, d(equilibriumOverlap)/dt is computed PARHAMI_M...
Definition: SinterNormalSpecies.h:262
Mdouble sinterRate_
Definition: SinterNormalSpecies.h:233
Mdouble loadingStiffness_
(normal) spring constant (k_1)
Definition: SinterNormalSpecies.h:206
Mdouble constantC1_
Definition: SinterNormalSpecies.h:250
Mdouble dissipation_
linear dissipation coefficient
Definition: SinterNormalSpecies.h:218

References cohesionStiffness_, complianceZero_, constantC1_, dissipation_, inverseSinterViscosity_, loadingStiffness_, PARHAMI_MCKEEPING, penetrationDepthMax_, separationDis_, sinterAdhesion_, sinterRate_, sinterType_, surfTension_, and unloadingStiffnessMax_.

◆ SinterNormalSpecies() [2/2]

SinterNormalSpecies::SinterNormalSpecies ( const SinterNormalSpecies p)

The default copy constructor.

Parameters
[in]thespecies that is copied
40 {
41  sinterType_ = p.sinterType_;
42  loadingStiffness_ = p.loadingStiffness_;
43  unloadingStiffnessMax_ = p.unloadingStiffnessMax_;
44  cohesionStiffness_ = p.cohesionStiffness_;
45  penetrationDepthMax_ = p.penetrationDepthMax_;
46  dissipation_ = p.dissipation_;
47  sinterAdhesion_ = p.sinterAdhesion_;
48  inverseSinterViscosity_ = p.inverseSinterViscosity_;
49  sinterRate_ = p.sinterRate_;
50  complianceZero_ = p.complianceZero_;
51  surfTension_ = p.surfTension_;
52  constantC1_ = p.constantC1_;
53  separationDis_ = p.separationDis_;
54 #ifdef DEBUG_CONSTRUCTOR
55  std::cout<<"SinterNormalSpecies::SinterNormalSpecies(const SinterNormalSpecies &p) finished"<<std::endl;
56 #endif
57 }
float * p
Definition: Tutorial_Map_using.cpp:9

References cohesionStiffness_, complianceZero_, constantC1_, dissipation_, inverseSinterViscosity_, loadingStiffness_, p, penetrationDepthMax_, separationDis_, sinterAdhesion_, sinterRate_, sinterType_, surfTension_, and unloadingStiffnessMax_.

◆ ~SinterNormalSpecies()

SinterNormalSpecies::~SinterNormalSpecies ( )

The default destructor.

60 {
61 #ifdef DEBUG_DESTRUCTOR
62  std::cout<<"SinterNormalSpecies::~SinterNormalSpecies() finished"<<std::endl;
63 #endif
64 }

Member Function Documentation

◆ computeTimeStep()

Mdouble SinterNormalSpecies::computeTimeStep ( Mdouble  mass)

Returns the optimal time step to resolve a collision of two particles of a given mass.

Calculates collision time for stiffest spring constant, divides by 50

Parameters
[in]massthe optimal time step is computed to resolve a collision of two particles of this mass.
227 {
228  if (unloadingStiffnessMax_ / (.5 * mass) < mathsFunc::square(dissipation_ / mass))
229  {
230  logger(ERROR, "Dissipation too high; max. allowed %", sqrt(2.0 * unloadingStiffnessMax_ * mass));
231  }
232  return 0.02 * constants::pi /
234 }
AnnoyingScalar sqrt(const AnnoyingScalar &x)
Definition: AnnoyingScalar.h:134
Logger< MERCURYDPM_LOGLEVEL > logger("MercuryKernel")
Definition of different loggers with certain modules. A user can define its own custom logger here.
@ ERROR
const Mdouble pi
Definition: ExtendedMath.h:23
T square(const T val)
squares a number
Definition: ExtendedMath.h:86

References dissipation_, ERROR, logger, constants::pi, sqrt(), mathsFunc::square(), and unloadingStiffnessMax_.

◆ getBaseName()

std::string SinterNormalSpecies::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")
113 {
114  return "Sinter";
115 }

◆ getCohesionStiffness()

Mdouble SinterNormalSpecies::getCohesionStiffness ( ) const

Returns the cohesive stiffness of the linear plastic-viscoelastic normal force.

Returns
the cohesive stiffness of the linear plastic-viscoelastic normal force.
178 {
179  return cohesionStiffness_;
180 }

References cohesionStiffness_.

Referenced by SinterInteraction::computeNormalForce().

◆ getCollisionTime()

Mdouble SinterNormalSpecies::getCollisionTime ( Mdouble  mass)

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

510 {
511  if (mass <= 0)
512  {
513  logger(ERROR, "Error in getCollisionTime(%) mass is not set or has an unexpected value, (getCollisionTime(%))",
514  mass, mass);
515  }
516  if (loadingStiffness_ <= 0)
517  {
518  logger(ERROR, "Error in getCollisionTime(%) stiffness=% is not set or has an unexpected value "
519  "(getCollisionTime(%), with stiffness=%)",
520  mass, loadingStiffness_, mass, loadingStiffness_);
521  }
522  if (dissipation_ < 0)
523  {
524  logger(ERROR, "Error in getCollisionTime(%) dissipation=%"
525  " is not set or has an unexpected value, (getCollisionTime(%), with dissipation=%)",
526  mass, dissipation_, mass, dissipation_);
527  }
528  Mdouble tosqrt = loadingStiffness_ / (.5 * mass) - mathsFunc::square(dissipation_ / mass);
529  if (tosqrt <= -1e-8 * loadingStiffness_ / (.5 * mass))
530  {
531  logger(ERROR, "Error in getCollisionTime(%) values for mass, stiffness and dissipation would lead to an "
532  "overdamped system, (getCollisionTime(%), with stiffness=% and dissipation=%)",
533  mass, mass, loadingStiffness_, dissipation_);
534  }
535  return constants::pi / std::sqrt(tosqrt);
536 }
Array< double, 1, 3 > e(1./3., 0.5, 2.)
double Mdouble
Definition: GeneralDefine.h:13

References dissipation_, e(), ERROR, loadingStiffness_, logger, constants::pi, sqrt(), and mathsFunc::square().

◆ getComplianceZero()

Mdouble SinterNormalSpecies::getComplianceZero ( ) const
423 {
424  return complianceZero_;
425 }

References complianceZero_.

Referenced by SinterInteraction::computeNormalForce().

◆ getConstantC1()

Mdouble SinterNormalSpecies::getConstantC1 ( ) const
433 {
434  return constantC1_;
435 }

References constantC1_.

Referenced by SinterInteraction::computeNormalForce().

◆ getDissipation()

Mdouble SinterNormalSpecies::getDissipation ( ) const

Allows the normal dissipation to be accessed.

Returns
the linear dissipation coefficient
394 {
395  return dissipation_;
396 }

References dissipation_.

Referenced by SinterInteraction::computeNormalForce().

◆ getInverseSinterViscosity()

Mdouble SinterNormalSpecies::getInverseSinterViscosity ( ) const

Accesses inverseSinterViscosity_.

Returns
value of inverseSinterViscosity_
410 {
412 }

References inverseSinterViscosity_.

Referenced by setParhamiMcKeeping(), and setSinterForceAndTime().

◆ getLoadingStiffness()

Mdouble SinterNormalSpecies::getLoadingStiffness ( ) const

Returns the loading stiffness of the linear plastic-viscoelastic normal force.

Returns
the loading stiffness of the linear plastic-viscoelastic normal force.
162 {
163  return loadingStiffness_;
164 }

References loadingStiffness_.

Referenced by SinterInteraction::computeNormalForce(), SinterInteraction::getElasticEnergy(), and SinterInteraction::getUnloadingStiffness().

◆ getPenetrationDepthMax()

Mdouble SinterNormalSpecies::getPenetrationDepthMax ( ) const

Returns the maximum penetration depth of the linear plastic-viscoelastic normal force.

Returns
the maximum penetration depth of the linear plastic-viscoelastic normal force.
186 {
187  return penetrationDepthMax_;
188 }

References penetrationDepthMax_.

Referenced by SinterInteraction::computeNormalForce(), and SinterInteraction::getUnloadingStiffness().

◆ getSeparationDis()

Mdouble SinterNormalSpecies::getSeparationDis ( ) const
438 {
439  return separationDis_;
440 }

References separationDis_.

Referenced by SinterInteraction::computeNormalForce().

◆ getSinterAdhesion()

Mdouble SinterNormalSpecies::getSinterAdhesion ( ) const

Accesses sinterAdhesion_.

Returns
value of sinterAdhesion_
402 {
403  return sinterAdhesion_;
404 }

References sinterAdhesion_.

Referenced by SinterInteraction::computeNormalForce(), setParhamiMcKeeping(), and setSinterForceAndTime().

◆ getSinterRate()

Mdouble SinterNormalSpecies::getSinterRate ( ) const

Accesses sinterRate_.

Returns
value of sinterAdhesion_
418 {
419  return sinterRate_;
420 }

References sinterRate_.

Referenced by SinterInteraction::computeNormalForce().

◆ getSinterType()

SINTERTYPE SinterNormalSpecies::getSinterType ( ) const
443 {
444  return sinterType_;
445 }

References sinterType_.

Referenced by SinterInteraction::computeNormalForce().

◆ getSurfTension()

Mdouble SinterNormalSpecies::getSurfTension ( ) const
428 {
429  return surfTension_;
430 }

References surfTension_.

Referenced by SinterInteraction::computeNormalForce().

◆ getTemperatureDependentSinterRate() [1/2]

std::function< double(double temperature)> SinterNormalSpecies::getTemperatureDependentSinterRate ( ) const
453 {
455 }
std::function< double(double temperature)> temperatureDependentSinterRate_
Definition: SinterNormalSpecies.h:267

References temperatureDependentSinterRate_.

Referenced by SinterInteraction::computeNormalForce().

◆ getTemperatureDependentSinterRate() [2/2]

double SinterNormalSpecies::getTemperatureDependentSinterRate ( double  temperature) const
448 {
449  return temperatureDependentSinterRate_(temperature);
450 }

References temperatureDependentSinterRate_.

◆ getUnloadingStiffnessMax()

Mdouble SinterNormalSpecies::getUnloadingStiffnessMax ( ) const

Returns the maximum unloading stiffness of the linear plastic-viscoelastic normal force.

Returns
the maximum unloading stiffness of the linear plastic-viscoelastic normal force.
170 {
171  return unloadingStiffnessMax_;
172 }

References unloadingStiffnessMax_.

Referenced by SinterInteraction::computeNormalForce(), and SinterInteraction::getUnloadingStiffness().

◆ mix()

void SinterNormalSpecies::mix ( SinterNormalSpecies S,
SinterNormalSpecies 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]S,Tthe two species whose properties are mixed to create the new species
123 {
124  loadingStiffness_ = BaseSpecies::average(S->getLoadingStiffness(), T->getLoadingStiffness());
125  unloadingStiffnessMax_ = BaseSpecies::average(S->getUnloadingStiffnessMax(), T->getUnloadingStiffnessMax());
126  cohesionStiffness_ = BaseSpecies::average(S->getCohesionStiffness(), T->getCohesionStiffness());
127  penetrationDepthMax_ = BaseSpecies::average(S->getPenetrationDepthMax(), T->getPenetrationDepthMax());
128  dissipation_ = BaseSpecies::average(S->getDissipation(), T->getDissipation());
129  inverseSinterViscosity_ = BaseSpecies::average(S->getInverseSinterViscosity(), T->getInverseSinterViscosity());
130  sinterAdhesion_ = BaseSpecies::average(S->getSinterAdhesion(), T->getSinterAdhesion());
131  complianceZero_ = BaseSpecies::average(S->getComplianceZero(), T->getComplianceZero());
132  surfTension_ = BaseSpecies::average(S->getSurfTension(), T->getSurfTension());
133  constantC1_= BaseSpecies::average(S->getConstantC1(), T->getConstantC1());
134  separationDis_ = BaseSpecies::average(S->getSeparationDis(), T->getSeparationDis());
135 
136 }
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(), cohesionStiffness_, complianceZero_, constantC1_, dissipation_, inverseSinterViscosity_, loadingStiffness_, penetrationDepthMax_, oomph::QuadTreeNames::S, separationDis_, sinterAdhesion_, surfTension_, and unloadingStiffnessMax_.

◆ read()

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

Reads the species properties from an input stream.

Parameters
[in]isinput stream (typically the restart file)
90 {
91  std::string dummy;
92  is >> dummy >> loadingStiffness_;
93  is >> dummy >> unloadingStiffnessMax_;
94  is >> dummy >> cohesionStiffness_;
95  is >> dummy >> penetrationDepthMax_;
96  is >> dummy >> dissipation_;
97  is >> dummy >> sinterAdhesion_;
98  is >> dummy >> inverseSinterViscosity_;
99  is >> dummy >> sinterRate_;
100  is >> dummy >> complianceZero_;
101  is >> dummy >> surfTension_;
102  is >> dummy >> constantC1_;
103  is >> dummy >> separationDis_;
104  unsigned type;
105  is >> dummy >> type;
107 }
SINTERTYPE
Definition: SinterNormalSpecies.h:14
type
Definition: compute_granudrum_aor.py:141
std::string string(const unsigned &i)
Definition: oomph_definitions.cc:286

References cohesionStiffness_, complianceZero_, constantC1_, dissipation_, inverseSinterViscosity_, loadingStiffness_, penetrationDepthMax_, separationDis_, sinterAdhesion_, sinterRate_, sinterType_, oomph::Global_string_for_annotation::string(), surfTension_, compute_granudrum_aor::type, and unloadingStiffnessMax_.

◆ setCohesionStiffness()

void SinterNormalSpecies::setCohesionStiffness ( Mdouble  cohesionStiffness)

Sets the cohesive stiffness of the linear plastic-viscoelastic normal force.

Parameters
[in]cohesionStiffnessthe cohesive stiffness of the linear plastic-viscoelastic normal force.
210 {
211  cohesionStiffness_ = cohesionStiffness;
212 }

References cohesionStiffness_.

Referenced by setPlasticParameters().

◆ setCollisionTimeAndRestitutionCoefficient()

void SinterNormalSpecies::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)

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]masseffective particle mass, \(\frac{2}{1/m1+1/m2}\)
Todo:
TW: check that the masses are described correctly here (m_eff or m_p?))
472 {
473  if (eps == 0.0)
474  {
476  dissipation_ = std::sqrt(2.0 * mass * loadingStiffness_);
477  }
478  else
479  {
480  dissipation_ = -mass / tc * std::log(eps);
482  .5 * mass * (mathsFunc::square(constants::pi / tc) + mathsFunc::square(dissipation_ / mass));
483  }
485 }
double eps
Definition: crbond_bessel.cc:24
EIGEN_STRONG_INLINE EIGEN_DEVICE_FUNC bfloat16 log(const bfloat16 &a)
Definition: BFloat16.h:618

References dissipation_, CRBond_Bessel::eps, loadingStiffness_, Eigen::bfloat16_impl::log(), constants::pi, sqrt(), mathsFunc::square(), and unloadingStiffnessMax_.

◆ setComplianceZero()

void SinterNormalSpecies::setComplianceZero ( Mdouble  complianceZero)
276 {
277  if (complianceZero < 0)
278  {
279  logger(ERROR, "complianceZero(%) argument should be non-negative!", complianceZero);
280  }
281  complianceZero_ = complianceZero;
282 }

References complianceZero_, ERROR, and logger.

◆ setConstantC1()

void SinterNormalSpecies::setConstantC1 ( Mdouble  constantC1_)
294 {
295  if (complianceOne < 0)
296  {
297  logger(ERROR, "ComplianceOne(%) argument should be non-negative!", complianceOne);
298  }
299  constantC1_ = complianceOne;
300 }

References constantC1_, ERROR, and logger.

◆ setDissipation()

void SinterNormalSpecies::setDissipation ( Mdouble  dissipation)

Sets the linear dissipation coefficient of the linear plastic-viscoelastic normal force.

should be non-negative

Parameters
[in]dissipationthe linear dissipation coefficient of the linear plastic-viscoelastic normal force.
241 {
242  if (dissipation < 0)
243  {
244  logger(ERROR, "setDissipation(%) argument should be non-negative!", dissipation);
245  }
246  dissipation_ = dissipation;
247 }

References dissipation_, ERROR, and logger.

Referenced by setLoadingStiffnessAndDissipation().

◆ setInverseSinterViscosity()

void SinterNormalSpecies::setInverseSinterViscosity ( Mdouble  inverseSinterViscosity)

Sets inverseSinterViscosity_.

should be non-negative

Parameters
[in]thelinear dissipation coefficient of the linear plastic-viscoelastic normal force.
338 {
339  //assertOrDie(inverseSinterViscosity < 0, "inverseSinterViscosity should be non-negative!");
340  if (inverseSinterViscosity < 0)
341  {
342  logger(ERROR, "setInverseSinterViscosity(%) argument should be non-negative!", inverseSinterViscosity);
343  }
345  inverseSinterViscosity_ = inverseSinterViscosity;
346 }
void setSinterType(SINTERTYPE sinterType)
Sets sinterRate_.
Definition: SinterNormalSpecies.cc:318

References ERROR, inverseSinterViscosity_, logger, PARHAMI_MCKEEPING, and setSinterType().

Referenced by setParhamiMcKeeping(), and setSinterForceAndTime().

◆ setLoadingStiffness()

void SinterNormalSpecies::setLoadingStiffness ( Mdouble  loadingStiffness)

Sets the loading stiffness of the linear plastic-viscoelastic normal force.

Parameters
[in]loadingStiffnessthe loading stiffness of the linear plastic-viscoelastic normal force.
194 {
195  loadingStiffness_ = loadingStiffness;
196 }

References loadingStiffness_.

Referenced by setLoadingStiffnessAndDissipation(), and setPlasticParameters().

◆ setLoadingStiffnessAndDissipation()

void SinterNormalSpecies::setLoadingStiffnessAndDissipation ( helpers::KAndDisp  new_)

Allows the spring and dissipation constants to be changed simultaneously.

Parameters
[in]new_a helper struct containing both the loading stiffness and the disssipation coefficient.
385 {
386  setLoadingStiffness(new_.k);
387  setDissipation(new_.disp);
388 }
void setLoadingStiffness(Mdouble loadingStiffness)
Sets the loading stiffness of the linear plastic-viscoelastic normal force.
Definition: SinterNormalSpecies.cc:193
void setDissipation(Mdouble dissipation)
Sets the linear dissipation coefficient of the linear plastic-viscoelastic normal force.
Definition: SinterNormalSpecies.cc:240
Mdouble k
Definition: FormulaHelpers.h:18
Mdouble disp
Definition: FormulaHelpers.h:19

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

◆ setParhamiMcKeeping()

void SinterNormalSpecies::setParhamiMcKeeping ( Mdouble  alpha,
Mdouble  beta,
Mdouble  atomicVolume,
Mdouble  surfaceEnergy,
Mdouble  thicknessDiffusion,
Mdouble  activationEnergy,
Mdouble  temperature 
)

Sets the sinterAdhesion_ and inverseSinterViscosity_ based on the Parhami-McKeeping parameters.

should be non-negative

Parameters
[in]thelinear dissipation coefficient of the linear plastic-viscoelastic normal force.
365 {
367  const Mdouble boltzmannConstant /*k_B*/ = 1.38064852e-23;
368  const Mdouble gasConstant /*R_g*/ = 8.314459848;
369  const Mdouble thicknessDiffusionVacancy /*DB*/ =
370  thicknessDiffusion * exp(-activationEnergy / gasConstant / temperature);
371  const Mdouble diffusionParameter /*DeltaB*/ =
372  atomicVolume / boltzmannConstant / temperature * thicknessDiffusionVacancy;
373  setInverseSinterViscosity(constants::pi / (2.0 * beta * diffusionParameter));
374  setSinterAdhesion(alpha / beta * constants::pi * surfaceEnergy);
375  logger(INFO,
376  "Set sintering parameters: the adhesion force f_a=%*r, the rate of change of the plastic overlap is d(delta0)/dt=f_ep/(%*a^4)",
379 }
@ INFO
void setInverseSinterViscosity(Mdouble inverseSinterViscosity)
Sets inverseSinterViscosity_.
Definition: SinterNormalSpecies.cc:337
void setSinterAdhesion(Mdouble sinterAdhesion)
Sets sinterAdhesion_.
Definition: SinterNormalSpecies.cc:253
Mdouble getInverseSinterViscosity() const
Accesses inverseSinterViscosity_.
Definition: SinterNormalSpecies.cc:409
Mdouble getSinterAdhesion() const
Accesses sinterAdhesion_.
Definition: SinterNormalSpecies.cc:401
RealScalar alpha
Definition: level1_cplx_impl.h:151
Scalar beta
Definition: level2_cplx_impl.h:36
EIGEN_STRONG_INLINE EIGEN_DEVICE_FUNC bfloat16 exp(const bfloat16 &a)
Definition: BFloat16.h:615

References alpha, beta, Eigen::bfloat16_impl::exp(), getInverseSinterViscosity(), getSinterAdhesion(), INFO, logger, PARHAMI_MCKEEPING, constants::pi, setInverseSinterViscosity(), setSinterAdhesion(), and setSinterType().

◆ setPenetrationDepthMax()

void SinterNormalSpecies::setPenetrationDepthMax ( Mdouble  penetrationDepthMax)

Sets the maximum penetration depth of the linear plastic-viscoelastic normal force.

Parameters
[in]penetrationDepthMaxthe maximum penetration depth of the linear plastic-viscoelastic normal force.
218 {
219  penetrationDepthMax_ = penetrationDepthMax;
220 }

References penetrationDepthMax_.

Referenced by setPlasticParameters().

◆ setPlasticParameters()

void SinterNormalSpecies::setPlasticParameters ( Mdouble  loadingStiffness,
Mdouble  unloadingStiffnessMax,
Mdouble  cohesionStiffness,
Mdouble  penetrationDepthMax 
)

Sets all parameters of the linear plastic-viscoelastic normal force at once.

Parameters
[in]loadingStiffnessthe loading stiffness of the linear plastic-viscoelastic normal force.
[in]unloadingStiffnessMaxthe maximum unloading stiffness of the linear plastic-viscoelastic normal force.
[in]cohesionStiffnessthe cohesive stiffness of the linear plastic-viscoelastic normal force.
[in]penetrationDepthMaxthe maximum penetration depth of the linear plastic-viscoelastic normal force.
146 {
147  if (loadingStiffness <= 0 || unloadingStiffnessMax < loadingStiffness || cohesionStiffness < 0 ||
148  penetrationDepthMax < 0)
149  {
150  logger(ERROR, "arguments of setPlasticParameters do not make sense");
151  }
152  setLoadingStiffness(loadingStiffness);
153  setUnloadingStiffnessMax(unloadingStiffnessMax);
154  setCohesionStiffness(cohesionStiffness);
155  setPenetrationDepthMax(penetrationDepthMax);
156 }
void setCohesionStiffness(Mdouble cohesionStiffness)
Sets the cohesive stiffness of the linear plastic-viscoelastic normal force.
Definition: SinterNormalSpecies.cc:209
void setPenetrationDepthMax(Mdouble penetrationDepthMax)
Sets the maximum penetration depth of the linear plastic-viscoelastic normal force.
Definition: SinterNormalSpecies.cc:217
void setUnloadingStiffnessMax(Mdouble unloadingStiffnessMax)
Sets the maximum unloading stiffness of the linear plastic-viscoelastic normal force.
Definition: SinterNormalSpecies.cc:201

References ERROR, logger, setCohesionStiffness(), setLoadingStiffness(), setPenetrationDepthMax(), and setUnloadingStiffnessMax().

◆ setSeparationDis()

void SinterNormalSpecies::setSeparationDis ( Mdouble  separationDis)
303 {
304  if (separationDis < 0)
305  {
306  logger(ERROR, "SeparationDis(%) argument should be non-negative!", separationDis);
307  }
308  separationDis_ = separationDis;
309 }

References ERROR, logger, and separationDis_.

◆ setSinterAdhesion()

void SinterNormalSpecies::setSinterAdhesion ( Mdouble  sinterAdhesion)

Sets sinterAdhesion_.

should be non-negative

Parameters
[in]sinterAdhesion_
254 {
255  if (sinterAdhesion < 0)
256  {
257  logger(ERROR, "setSinterAdhesion(%) argument should be non-negative!", sinterAdhesion);
258  }
259  sinterAdhesion_ = sinterAdhesion;
260 }

References ERROR, logger, and sinterAdhesion_.

Referenced by setParhamiMcKeeping(), and setSinterForceAndTime().

◆ setSinterForceAndTime()

void SinterNormalSpecies::setSinterForceAndTime ( Mdouble  adhesionForce,
Mdouble  sinterTime,
Mdouble  radius 
)
Todo:
fix
349 {
352  setSinterAdhesion(adhesionForce / radius);
353  setInverseSinterViscosity(1.0 / (93.75 * adhesionForce * sinterTime / std::pow(radius, 5)));
354  logger(INFO, "Set sintering parameters: adhesion force f_a=%*r, sinter viscosity is nu = contactRadius^4/%",
356 }
EIGEN_STRONG_INLINE EIGEN_DEVICE_FUNC bfloat16 pow(const bfloat16 &a, const bfloat16 &b)
Definition: BFloat16.h:625
radius
Definition: UniformPSDSelfTest.py:15

References getInverseSinterViscosity(), getSinterAdhesion(), INFO, logger, PARHAMI_MCKEEPING, Eigen::bfloat16_impl::pow(), UniformPSDSelfTest::radius, setInverseSinterViscosity(), setSinterAdhesion(), and sinterType_.

◆ setSinterRate()

void SinterNormalSpecies::setSinterRate ( Mdouble  sinterRate)

Sets sinterRate_.

should be non-negative

Parameters
[in]sinterAdhesion_
267 {
268  if (sinterRate < 0)
269  {
270  logger(ERROR, "setSinterRate(%) argument should be non-negative!", sinterRate);
271  }
272  sinterRate_ = sinterRate;
273 }

References ERROR, logger, and sinterRate_.

◆ setSinterType()

void SinterNormalSpecies::setSinterType ( SINTERTYPE  sinterType)

Sets sinterRate_.

should be non-negative

Parameters
[in]sinterAdhesion_
319 {
320  sinterType_ = sinterType;
322  logger(INFO, "Sintertype set to CONSTANT_RATE");
324  logger(INFO, "Sintertype set to PARHAMI_MCKEEPING");
326  logger(INFO, "Sintertype set to TEMPERATURE_DEPENDENT_FRENKEL");
328  logger(INFO, "Sintertype set to REGIME_SINTERING");
329  else
330  logger(ERROR, "Sintertype not understood");
331 }
@ TEMPERATURE_DEPENDENT_FRENKEL

References CONSTANT_RATE, ERROR, INFO, logger, PARHAMI_MCKEEPING, REGIME_SINTERING, sinterType_, and TEMPERATURE_DEPENDENT_FRENKEL.

Referenced by setInverseSinterViscosity(), and setParhamiMcKeeping().

◆ setStiffnessAndRestitutionCoefficient()

void SinterNormalSpecies::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]masseffective particle mass, \(\frac{2}{1/m1+1/m2}\)
494 {
495  loadingStiffness_ = stiffness;
496  if (eps == 0.0)
497  {
498  dissipation_ = std::sqrt(2.0 * mass * stiffness);
499  }
500  else
501  {
502  dissipation_ =
503  -std::sqrt(2.0 * mass * stiffness / (constants::sqr_pi + mathsFunc::square(log(eps)))) * log(eps);
504  }
506 }
const Mdouble sqr_pi
Definition: ExtendedMath.h:25

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

◆ setSurfTension()

void SinterNormalSpecies::setSurfTension ( Mdouble  complianceZero)
285 {
286  if (surfTension < 0)
287  {
288  logger(ERROR, "SurfTension(%) argument should be non-negative!", surfTension);
289  }
290  surfTension_ = surfTension;
291 }

References ERROR, logger, and surfTension_.

◆ setTemperatureDependentSinterRate()

void SinterNormalSpecies::setTemperatureDependentSinterRate ( std::function< double(double temperature)>  temperatureDependentSinterRate)
459 {
460  temperatureDependentSinterRate_ = temperatureDependentSinterRate;
461 }

References temperatureDependentSinterRate_.

◆ setUnloadingStiffnessMax()

void SinterNormalSpecies::setUnloadingStiffnessMax ( Mdouble  unloadingStiffnessMax)

Sets the maximum unloading stiffness of the linear plastic-viscoelastic normal force.

Parameters
[in]unloadingStiffnessMaxthe maximum unloading stiffness of the linear plastic-viscoelastic normal force.
202 {
203  unloadingStiffnessMax_ = unloadingStiffnessMax;
204 }

References unloadingStiffnessMax_.

Referenced by setPlasticParameters().

◆ write()

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

Writes the species properties to an output stream.

Parameters
[out]outputstream (typically the restart file)
70 {
71  os << " loadingStiffness " << loadingStiffness_;
72  os << " maxUnloadingStiffness " << unloadingStiffnessMax_;
73  os << " cohesionStiffness " << cohesionStiffness_;
74  os << " maxPenetration " << penetrationDepthMax_;
75  os << " dissipation " << dissipation_;
76  os << " sinterAdhesion " << sinterAdhesion_;
77  os << " inverseSinterViscosity " << inverseSinterViscosity_;
78  os << " sinterRate " << sinterRate_;
79  os << " complianceZero " << complianceZero_;
80  os << " surfTension " << surfTension_;
81  os << " constantC1 " << constantC1_;
82  os << " separationDis " << separationDis_;
83  os << " sinterType " << (unsigned) sinterType_;
84 }

References cohesionStiffness_, complianceZero_, constantC1_, dissipation_, inverseSinterViscosity_, loadingStiffness_, penetrationDepthMax_, separationDis_, sinterAdhesion_, sinterRate_, sinterType_, surfTension_, and unloadingStiffnessMax_.

Member Data Documentation

◆ cohesionStiffness_

Mdouble SinterNormalSpecies::cohesionStiffness_
private

the adhesive spring constant (k^c) for plastic deformations

Referenced by getCohesionStiffness(), mix(), read(), setCohesionStiffness(), SinterNormalSpecies(), and write().

◆ complianceZero_

Mdouble SinterNormalSpecies::complianceZero_
private

Compliance 0, C_0, corresponds to the inverse of stiffness at the instantaneous time.

Referenced by getComplianceZero(), mix(), read(), setComplianceZero(), SinterNormalSpecies(), and write().

◆ constantC1_

Mdouble SinterNormalSpecies::constantC1_
private

Material constant

Referenced by getConstantC1(), mix(), read(), setConstantC1(), SinterNormalSpecies(), and write().

◆ dissipation_

◆ inverseSinterViscosity_

Mdouble SinterNormalSpecies::inverseSinterViscosity_
private

Determines sinter viscosity nu = contactRadius^4/inverseSinterViscosity_ in sinter rate: d(delta0)/dt = (fa+fep)/nu

Referenced by getInverseSinterViscosity(), mix(), read(), setInverseSinterViscosity(), SinterNormalSpecies(), and write().

◆ loadingStiffness_

◆ penetrationDepthMax_

Mdouble SinterNormalSpecies::penetrationDepthMax_
private

the depth (relative to the normalized radius) at which k_2^max is used (phi_f)

Referenced by getPenetrationDepthMax(), mix(), read(), setPenetrationDepthMax(), SinterNormalSpecies(), and write().

◆ separationDis_

Mdouble SinterNormalSpecies::separationDis_
private

Separation distance comes from the fracture theory.

Referenced by getSeparationDis(), mix(), read(), setSeparationDis(), SinterNormalSpecies(), and write().

◆ sinterAdhesion_

Mdouble SinterNormalSpecies::sinterAdhesion_
private

Determines sinter adhesion force fa=sinterAdhesion_*radius in sinter rate: d(delta0)/dt = (fa+fep)/nu

Referenced by getSinterAdhesion(), mix(), read(), setSinterAdhesion(), SinterNormalSpecies(), and write().

◆ sinterRate_

Mdouble SinterNormalSpecies::sinterRate_
private

Determines sinter rate: d(delta0)/dt = (fa+fep)/nu

Referenced by getSinterRate(), read(), setSinterRate(), SinterNormalSpecies(), and write().

◆ sinterType_

SINTERTYPE SinterNormalSpecies::sinterType_
private

sinterType options determin how the rate of sintering, d(equilibriumOverlap)/dt is computed PARHAMI_MCKEEPING: sinter rate given by (sinterAdhesion+normalForce)/sinterViscosity CONSTANT_RATE: sinter rate given by sinterRate

Referenced by getSinterType(), read(), setSinterForceAndTime(), setSinterType(), SinterNormalSpecies(), and write().

◆ surfTension_

Mdouble SinterNormalSpecies::surfTension_
private

Material constant

Referenced by getSurfTension(), mix(), read(), setSurfTension(), SinterNormalSpecies(), and write().

◆ temperatureDependentSinterRate_

std::function<double(double temperature)> SinterNormalSpecies::temperatureDependentSinterRate_
private
Initial value:
= [this](
double temperature) { return sinterRate_; }

Referenced by getTemperatureDependentSinterRate(), and setTemperatureDependentSinterRate().

◆ unloadingStiffnessMax_

Mdouble SinterNormalSpecies::unloadingStiffnessMax_
private

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