Mechanics of Defect Evolution Library
Loading...
Searching...
No Matches
DislocationMobilityKinkPair.cpp
Go to the documentation of this file.
1/* This file is part of MoDELib, the Mechanics Of Defects Evolution Library.
2 *
3 *
4 * MoDELib is distributed without any warranty under the
5 * GNU General Public License (GPL) v2 <http://www.gnu.org/licenses/>.
6 */
7
8#ifndef _model_DislocationMobilityKinkPair_cpp_
9#define _model_DislocationMobilityKinkPair_cpp_
10
11#include <string>
13
14namespace model
15{
16
18 const double& h_in,
19 const double& w_in,
20 const double& B0_SI,
21 const double& B1_SI,
22 const double& Bk_SI,
23 const double& dH0_eV,
24 const double& p_in,
25 const double& q_in,
26 const double& T0_hom,
27 const double& tauC_SI,
28 const double& a0_in,
29 const double& a1_in,
30 const double& a2_in,
31 const double& a3_in,
32 const double& conjugateAngle_deg):
33 /* init */ DislocationMobilityBase("DislocationMobilityKinkPair for "+material.materialName)
34 /* init */,kB(this->kB_SI/material.mu_SI/std::pow(material.b_SI,3))
35 /* init */,h(h_in)
36 /* init */,w(w_in)
37 /* init */,B0(B0_SI*material.cs_SI/(material.mu_SI*material.b_SI))
38 /* init */,B1(B1_SI*material.cs_SI/(material.mu_SI*material.b_SI))
39 /* init */,Bk(Bk_SI*material.cs_SI/(material.mu_SI*material.b_SI))
40 /* init */,dH0(dH0_eV)
41 /* init */,p(p_in)
42 /* init */,q(q_in)
43 /* init */,T0(T0_hom*material.Tm)
44 /* init */,tauC(tauC_SI/material.mu_SI)
45 /* init */,a0(a0_in)
46 /* init */,a1(a1_in)
47 /* init */,a2(a2_in)
48 /* init */,a3(a3_in)
49 /* init */,conjugateAngle(conjugateAngle_deg*std::numbers::pi/180)
50 {
51 }
52
54 const VectorDim& b,
55 const VectorDim& n,
56 const double& T,
57 const double& dL,
58 const double& dt,
59 const std::shared_ptr<StochasticForceGenerator>& sfg) const
60 {
61
62 const double bNorm=b.norm();
63 const VectorDim s = b/bNorm;
64 const VectorDim n1 = Eigen::AngleAxisd(conjugateAngle,s)*n;
65
66 // Compute components of non-Schmid model
67 const double tau=s.transpose()*S*n; // magnitude of resolved shear stress
68 const double tauOrt=n.cross(s).transpose()*S*n;
69 const double tau1=s.transpose()*S*n1; // resolved schear stress on
70 const double tauOrt1=n1.cross(s).transpose()*S*n1;
71 const double num(std::fabs(tau+a1*tau1));
72 const double den(a0*tauC*sigmoid((a2*tauOrt+a3*tauOrt1)/a0/tauC));
73 const double stressRatio(num/den);
74
75 // Thermally-activated velocity
76 const double dg((stressRatio<1.0)? (std::pow(1.0-std::pow(stressRatio,p),q)-T/T0) : 0.0);
77 const double dg1((dg>0.0)? dg : 0.0);
78 const double expCoeff(exp(-dH0*dg1/(2.0*kB_eV*T)));
79 const double sgm(0.5*sigmoid(-0.5*(0.05-dg1)/0.05));
80 const double B(Bk*w/(2.0*h)*(1.0-sgm)+(B0+B1*T)*sgm); //kink-dominated to drag-dominated interpolation
81 double vel(std::fabs(tau*bNorm/B*expCoeff));
82
83 // Apply stochastic velocity
84 if(sfg)
85 {
86 vel+=sfg->stochasticVelocity(kB,T,B,dL,dt);
87 }
88 return vel;
89 }
90
92 {
93 return 2.0/(1.0+exp(2.0*x));
94 }
95}
96#endif
initial point of the source segment B
the tangent vector S
b
Definition int_R.m:16
x
Definition int_R.m:12
DislocationMobilityBase(const std::string &name_in)
Eigen::Matrix< double, 3, 1 > VectorDim
Eigen::Matrix< double, 3, 3 > MatrixDim
DislocationMobilityKinkPair(const PolycrystallineMaterialBase &material, const double &h, const double &w, const double &B0_SI, const double &B1_SI, const double &Bk_SI, const double &dH0_SI, const double &p_in, const double &q_in, const double &T0_SI, const double &tauC_SI, const double &a0_in, const double &a1_in, const double &a2_in, const double &a3_in, const double &conjugateAngle_deg)
double velocity(const MatrixDim &S, const VectorDim &b, const VectorDim &n, const double &T, const double &dL, const double &dt, const std::shared_ptr< StochasticForceGenerator > &sfg) const override