44 #ifdef DEBUG_CONSTRUCTOR
45 std::cout<<
"SinterNormalSpecies::SinterNormalSpecies() finished"<<std::endl;
63 #ifdef DEBUG_CONSTRUCTOR
64 std::cout<<
"SinterNormalSpecies::SinterNormalSpecies(const SinterNormalSpecies &p) finished"<<std::endl;
70 #ifdef DEBUG_DESTRUCTOR
71 std::cout<<
"SinterNormalSpecies::~SinterNormalSpecies() finished"<<std::endl;
142 if (loadingStiffness <= 0 || unloadingStiffnessMax < loadingStiffness || cohesionStiffness < 0 || penetrationDepthMax < 0)
144 std::cerr <<
"Error: arguments of setPlasticParameters do not make sense" << std::endl;
224 std::cerr <<
"Dissipation too high; max. allowed " << sqrt(2.0 *
unloadingStiffnessMax_ * mass) << std::endl;
250 if (sinterAdhesion < 0)
252 logger(
ERROR,
"setSinterAdhesion(%)",sinterAdhesion);
278 logger(
INFO,
"Sintertype set to CONSTANT_RATE");
280 logger(
INFO,
"Sintertype set to PARHAMI_MCKEEPING");
282 logger(
INFO,
"Sintertype set to TEMPERATURE_DEPENDENT_FRENKEL");
294 if (inverseSinterViscosity < 0)
296 logger(
ERROR,
"setInverseSinterViscosity(%)",inverseSinterViscosity);
308 logger(
INFO,
"Set sintering parameters: adhesion force f_a=%*r, sinter viscosity is nu = contactRadius^4/%",
321 const Mdouble boltzmannConstant = 1.38064852e-23;
322 const Mdouble gasConstant = 8.314459848;
323 const Mdouble thicknessDiffusionVacancy = thicknessDiffusion*
exp(-activationEnergy/gasConstant/temperature);
324 const Mdouble diffusionParameter = atomicVolume/boltzmannConstant/temperature*thicknessDiffusionVacancy;
325 setInverseSinterViscosity(
constants::pi / (2.0 * beta * diffusionParameter));
327 logger(
INFO,
"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)", getSinterAdhesion(),
328 getInverseSinterViscosity());
431 std::cerr <<
"Error in getCollisionTime(" << mass <<
") mass is not set or has an unexpected value, (getCollisionTime(" << mass <<
"))" << std::endl;
436 std::cerr <<
"Error in getCollisionTime(" << mass <<
") stiffness=" <<
loadingStiffness_ <<
" is not set or has an unexpected value, (getCollisionTime(" << mass <<
"), with stiffness=" <<
loadingStiffness_ <<
")" << std::endl;
441 std::cerr <<
"Error in getCollisionTime(" << mass <<
") dissipation=" <<
dissipation_ <<
" is not set or has an unexpected value, (getCollisionTime(" << mass <<
"), with dissipation=" <<
dissipation_ <<
")" << std::endl;
447 std::cerr <<
"Error in getCollisionTime(" << mass <<
") values for mass, stiffness and dissipation would lead to an overdamped system, (getCollisionTime(" << mass <<
"), with stiffness=" <<
loadingStiffness_ <<
" and dissipation=" <<
dissipation_ <<
")" << std::endl;
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...
Mdouble unloadingStiffnessMax_
the maximum elastic constant (k_2^max) for plastic deformations
SINTERTYPE sinterType_
sinterType options determin how the rate of sintering, d(equilibriumOverlap)/dt is computed PARHAMI_M...
SinterNormalSpecies()
The default constructor.
void setDissipation(Mdouble dissipation)
Sets the linear dissipation coefficient of the linear plastic-viscoelastic normal force...
Logger< MERCURY_LOGLEVEL > logger("MercuryKernel")
return type specifically for fuctions returning k and disp at once
LL< Log::INFO > INFO
Info log level.
void setCohesionStiffness(Mdouble cohesionStiffness)
Sets the cohesive stiffness of the linear plastic-viscoelastic normal force.
void setTemperatureDependentSinterRate(std::function< double(double temperature)> temperatureDependentSinterRate)
Mdouble exp(Mdouble Exponent)
Mdouble loadingStiffness_
(normal) spring constant (k_1)
Mdouble cohesionStiffness_
the adhesive spring constant (k^c) for plastic deformations
void read(std::istream &is)
Reads the species properties from an input stream.
void setPenetrationDepthMax(Mdouble penetrationDepthMax)
Sets the maximum penetration depth of the linear plastic-viscoelastic normal force.
Mdouble inverseSinterViscosity_
void setPlasticParameters(Mdouble loadingStiffness, Mdouble unloadingStiffnessMax, Mdouble cohesionStiffness, Mdouble penetrationDepthMax)
Sets all parameters of the linear plastic-viscoelastic normal force at once.
Mdouble getSinterAdhesion() const
Accesses sinterAdhesion_.
Mdouble computeTimeStep(Mdouble mass)
Returns the optimal time step to resolve a collision of two particles of a given 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...
void setSinterAdhesion(Mdouble sinterAdhesion)
Sets sinterAdhesion_.
Mdouble penetrationDepthMax_
the depth (relative to the normalized radius) at which k_2^max is used (phi_f)
Mdouble getCollisionTime(Mdouble mass)
Calculates collision time for two copies of a particle of given disp, k, mass.
Mdouble log(Mdouble Power)
T square(T val)
squares a number
void 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...
SINTERTYPE getSinterType() const
void setInverseSinterViscosity(Mdouble inverseSinterViscosity)
Sets inverseSinterViscosity_.
void write(std::ostream &os) const
Writes the species properties to an output stream.
void setSinterRate(Mdouble sinterRate)
Sets sinterRate_.
void setSinterForceAndTime(Mdouble adhesionForce, Mdouble sinterTime, Mdouble radius)
MERCURY_DEPRECATED void setLoadingStiffnessAndDissipation(helpers::KAndDisp new_)
Allows the spring and dissipation constants to be changed simultaneously.
Mdouble dissipation_
linear dissipation coefficient
std::function< double(double temperature)> temperatureDependentSinterRate_
Mdouble average(Mdouble a, Mdouble b)
defines the average of two variables by the harmonic mean.
Mdouble getLoadingStiffness() const
Returns the loading stiffness of the linear plastic-viscoelastic normal force.
Mdouble getCohesionStiffness() const
Returns the cohesive stiffness of the linear plastic-viscoelastic normal force.
virtual ~SinterNormalSpecies()
The default destructor.
void setLoadingStiffness(Mdouble loadingStiffness)
Sets the loading stiffness of the linear plastic-viscoelastic normal force.
std::string getBaseName() const
Used in Species::getName to obtain a unique name for each Species.
Mdouble getPenetrationDepthMax() const
Returns the maximum penetration depth of the linear plastic-viscoelastic normal force.
SinterNormalSpecies contains the parameters used to describe a plastic-cohesive normal force (Stefan ...
std::function< double(double temperature)> getTemperatureDependentSinterRate() const
void setUnloadingStiffnessMax(Mdouble unloadingStiffnessMax)
Sets the maximum unloading stiffness of the linear plastic-viscoelastic normal force.
void mix(SinterNormalSpecies *const S, SinterNormalSpecies *const T)
creates default values for mixed species
Defines the basic properties that a interactable object can have.
Mdouble getUnloadingStiffnessMax() const
Returns the maximum unloading stiffness of the linear plastic-viscoelastic normal force...
Mdouble getDissipation() const
Allows the normal dissipation to be accessed.
void setSinterType(SINTERTYPE sinterType)
Sets sinterRate_.
Mdouble getInverseSinterViscosity() const
Accesses inverseSinterViscosity_.
Mdouble getSinterRate() const
Accesses sinterRate_.