8#ifndef model_StraightDislocationSegment_cpp_
9#define model_StraightDislocationSegment_cpp_
11#ifndef _MODEL_NON_SINGULAR_DD_
12#define _MODEL_NON_SINGULAR_DD_ 1
23 typename StraightDislocationSegment<dim>::MatrixDim StraightDislocationSegment<dim>::nonSymmStress_kernel(
const VectorDim& r)
const
25#if _MODEL_NON_SINGULAR_DD_ == 0
31 static_assert(0,
"THERE IS NO CONSISTENT REGULARIZATION OF THIS EXPRESSION. USE _MODEL_NON_SINGULAR_DD_=1");
66 const Scalar Yt(
Y.dot(
t));
70 const Scalar bYt(
b.cross(
Y).dot(
t));
73 const Scalar
f1(2.0/Y2);
79 return f1*material.C1*
t*(
b.cross(
Y)).transpose()
81 -
f1*bYt/Yta*
t*
r.transpose()
82 -0.5*
f1*bYt*MatrixDim::Identity()
83 -
f1*bYt*(R+Yt)/Ra/Y2*r*
r.transpose()
84 -0.5*
f1*bYt*R/Yta*
t*
t.transpose();
87#elif _MODEL_NON_SINGULAR_DD_ == 1
90 const Scalar Ra(sqrt(Ra2));
92 const Scalar Yat(Ya.dot(
t));
95 const Scalar bYat(bYa.dot(
t));
99 const Scalar
f1(2.0/Ya2a2);
108 -
f1*Ya*bCt.transpose()
109 -
f1*bYat/Yat*
t*
r.transpose()
111 -
f1*bYat*(Ra+Yat)/Ra/Ya2a2*r*
r.transpose()
112 -0.5*
f1*bYat*Ra/Yat*
t*
t.transpose();
114#elif _MODEL_NON_SINGULAR_DD_ == 2
115 static_assert(0,
"NOT IMPLEMENTED. USE _MODEL_NON_SINGULAR_DD_=1");
117#error Unsupported choice of field regularization
122 typename StraightDislocationSegment<dim>::VectorDim StraightDislocationSegment<dim>::displacement_kernel(
const VectorDim& r)
const
126 const Scalar Yat(Ya.dot(
t));
128 +bCt.dot(r)/Yat/Ra/material.C1/8.0/M_PI*Ya;
132 double StraightDislocationSegment<dim>::elasticInteractionEnergy_kernel(
const VectorDim&
z,
const VectorDim& tA,
const VectorDim& bA)
const
136 const Scalar Yat(Ya.dot(
t));
137 const Scalar logYat(
log(Yat));
138 const Scalar zaYat(za*Yat);
140 const Scalar bAtA(bA.dot(tA));
141 const Scalar bt(
b.dot(
t));
142 const Scalar bAt(bA.dot(
t));
143 const Scalar btA(
b.dot(tA));
144 const Scalar bAb(bA.dot(
b));
145 const Scalar tAt(tA.dot(
t));
146 const Scalar zt(
z.dot(
t));
147 const Scalar zb(
z.dot(
b));
148 const Scalar zbA(
z.dot(bA));
151 -bAt*bt*tAt*(0.5+logYat+zt/Yat)
152 +tAt/Yat*(zbA*zb/za+bAt*zb+bt*zbA));
159 const VectorDim& _P0,
160 const VectorDim& _P1,
162 const double& _length,
164 const double& EwaldLength_in) :
188 return length>FLT_EPSILON? nonSymmStress_kernel(
P1-
x)-nonSymmStress_kernel(
P0-
x) : MatrixDim::Zero().eval();
207 return length>FLT_EPSILON? (displacement_kernel(
P1-
x)-displacement_kernel(
P0-
x)).
eval() : VectorDim::Zero();
214 return -0.5*
material.C2*EwaldFactor*(elasticInteractionEnergy_kernel(
P1-xA,tA,bA)-elasticInteractionEnergy_kernel(
P0-xA,tA,bA));
VectorDim displacement(const VectorDim &x) const
const PolycrystallineMaterialBase & material
StraightDislocationSegment(const PolycrystallineMaterialBase &mat, const VectorDim &_P0, const VectorDim &_P1, const VectorDim &_b, const double &_length, const VectorDim &_t, const double &EwaldLength_in)
MatrixDim nonSymmStress(const VectorDim &x) const
MatrixDim stress(const VectorDim &x) const
const double & EwaldLength
double elasticInteractionEnergy(const VectorDim &xA, const VectorDim &tA, const VectorDim &bA) const
final point of the source segment t
auto eval(const std::shared_ptr< T > &t)
static double a2
Dislocation core size squared.