50 const Eigen::Matrix<double,3,2> waveVectors((Eigen::Matrix<double,3,2>()<<0.0, 0.0,
52 1.0,-1.0).finished());
54 const Eigen::Matrix<double,4,3>
f((Eigen::Matrix<double,4,3>()<<0.00,0.0, 0.0,
55 0.50,sqrt(3.0)/6.0, ISF,
56 0.25,sqrt(3.0)/12.0,USF,
57 1.00,sqrt(3.0)/3.0, MSF).finished());
61 const Eigen::Matrix<double,2,2> A111(
GlidePlaneBase(a1,a3,
nullptr).localBasis());
62 std::shared_ptr<GammaSurface> gammaSurface111(
new GammaSurface(A111,waveVectors,
f,3,std::vector<Eigen::Matrix<double,2,1>>()));
74 const auto c1(a2+a3-a1);
75 const auto c2(a3+a1-a2);
76 const auto c3(a1+a2-a3);
79 const Eigen::Matrix<double,1,2> waveVectors((Eigen::Matrix<double,1,2>()<<0.0, 0.0).finished());
80 const double GSFEval_SI(100.0);
81 const Eigen::Matrix<double,1,3>
f((Eigen::Matrix<double,1,3>()<<0.5,0.5, GSFEval_SI/(material.
mu_SI*material.
b_SI)).finished());
82 const Eigen::Matrix<double,2,2> A100(
GlidePlaneBase(c1,c2,
nullptr).localBasis());
83 std::shared_ptr<GammaSurface> gammaSurface100(
new GammaSurface(A100,waveVectors,
f,1,std::vector<Eigen::Matrix<double,2,1>>()));
105 const std::shared_ptr<DislocationMobility> mobility(mobilitySelector.
getMobility(material,dislocationMobilityType));
106 std::shared_ptr<GlidePlaneNoise> planeNoise(
new GlidePlaneNoise(material));
108 for(
const auto& planeBase : plN)
110 if(std::fabs(planeBase.second->planeSpacing()-d111)<FLT_EPSILON)
112 const auto& a1(planeBase.second->primitiveVectors.first);
113 const auto& a3(planeBase.second->primitiveVectors.second);
116 const auto b2(a3-a1);
117 const auto b3(a3*(-1));
119 std::vector<RationalLatticeDirection<3>> slipDirs;
120 slipDirs.emplace_back(
Rational( 1,1),b1);
121 slipDirs.emplace_back(
Rational(-1,1),b1);
122 slipDirs.emplace_back(
Rational( 1,1),b2);
123 slipDirs.emplace_back(
Rational(-1,1),b2);
124 slipDirs.emplace_back(
Rational( 1,1),b3);
125 slipDirs.emplace_back(
Rational(-1,1),b3);
127 for(
const auto& slipDir : slipDirs)
129 temp.emplace(
temp.size(),
new SlipSystem(*planeBase.second, slipDir,mobility,planeNoise));
138 const std::shared_ptr<DislocationMobility> mobility(mobilitySelector.
getMobility(material,dislocationMobilityType));
139 std::shared_ptr<GlidePlaneNoise> planeNoise(
new GlidePlaneNoise(material));
141 for(
const auto& planeBase : plN)
143 if(std::fabs(planeBase.second->planeSpacing()-d111)<FLT_EPSILON)
145 const auto& a1(planeBase.second->primitiveVectors.first);
146 const auto& a3(planeBase.second->primitiveVectors.second);
149 const auto b2(a3-a1);
150 const auto b3(a3*(-1));
152 std::vector<RationalLatticeDirection<3>> slipDirs;
153 slipDirs.emplace_back(
Rational(1,3),b1-b3);
154 slipDirs.emplace_back(
Rational(1,3),b1-b2);
155 slipDirs.emplace_back(
Rational(1,3),b2-b1);
156 slipDirs.emplace_back(
Rational(1,3),b2-b3);
157 slipDirs.emplace_back(
Rational(1,3),b3-b2);
158 slipDirs.emplace_back(
Rational(1,3),b3-b1);
160 for(
const auto& slipDir : slipDirs)
162 temp.emplace(
temp.size(),
new SlipSystem(*planeBase.second, slipDir,mobility,planeNoise));
171 const std::shared_ptr<DislocationMobility> mobility(mobilitySelector.
getMobility(material,dislocationMobilityType));
172 std::shared_ptr<GlidePlaneNoise> planeNoise(
new GlidePlaneNoise(material));
174 for(
const auto& planeBase : plN)
176 if(std::fabs(planeBase.second->planeSpacing()-d111)<FLT_EPSILON)
178 const auto& a1(planeBase.second->primitiveVectors.first);
179 const auto& a3(planeBase.second->primitiveVectors.second);
182 const auto b2(a3-a1);
183 const auto b3(a3*(-1));
185 std::vector<RationalLatticeDirection<3>> slipDirs;
186 slipDirs.emplace_back(
Rational(2,3),b1-b3);
187 slipDirs.emplace_back(
Rational(2,3),b1-b2);
188 slipDirs.emplace_back(
Rational(2,3),b2-b1);
189 slipDirs.emplace_back(
Rational(2,3),b2-b3);
190 slipDirs.emplace_back(
Rational(2,3),b3-b2);
191 slipDirs.emplace_back(
Rational(2,3),b3-b1);
193 for(
const auto& slipDir : slipDirs)
195 temp.emplace(
temp.size(),
new SlipSystem(*planeBase.second, slipDir,mobility,planeNoise));
275 const auto c1(a2+a3-a1);
276 const auto c2(a3+a1-a2);
277 const auto c3(a1+a2-a3);
292 const Eigen::Matrix<double,4,2> waveVectors111((Eigen::Matrix<double,4,2>()<<0.0, 0.0,
296 2.0, 0.0).finished());
297 const Eigen::Matrix<double,6,3> f111((Eigen::Matrix<double,6,3>()<<0.00,0.0, 0.0,
298 0.50,sqrt(3.0)/6.0, CISF,
299 1.00,sqrt(3.0)/3.0,SESF,
300 1.50,sqrt(3.0)/2.0, APB,
301 2.00,2.0*sqrt(3.0)/3.0, SISF,
302 2.50,5.0*sqrt(3.0)/6.0, CESF).finished());
305 const Eigen::Matrix<double,2,2> A111(2.0*
GlidePlaneBase(a1,a3,
nullptr).localBasis());
306 std::shared_ptr<GammaSurface> gammaSurface111(
new GammaSurface(A111,waveVectors111,f111,3,std::vector<Eigen::Matrix<double,2,1>>()));
310 const Eigen::Matrix<double,1,2> waveVectors100((Eigen::Matrix<double,1,2>()<<0.0, 0.0).finished());
311 const double GSFEval100_SI(50.0);
312 const Eigen::Matrix<double,1,3> f100((Eigen::Matrix<double,1,3>()<<0.5,0.5, GSFEval100_SI/(material.
mu_SI*material.
b_SI)).finished());
313 const Eigen::Matrix<double,2,2> A100(2.0*
GlidePlaneBase(c1,c2,
nullptr).localBasis());
314 std::shared_ptr<GammaSurface> gammaSurface100(
new GammaSurface(A100,waveVectors100,f100,1,std::vector<Eigen::Matrix<double,2,1>>()));
320 std::map<const GlidePlaneBase*,std::shared_ptr<GammaSurface>> gsMap;
321 for(
const auto& pn : plN)
323 if(std::abs(pn.second->planeSpacing()-d111)<FLT_EPSILON)
325 gsMap.emplace(pn.second.get(),gammaSurface111);
327 else if(std::abs(pn.second->planeSpacing()-d100)<FLT_EPSILON)
329 gsMap.emplace(pn.second.get(),gammaSurface100);
333 gsMap.emplace(pn.second.get(),
nullptr);
337 std::shared_ptr<SecondPhase<dim>> sp(
new SecondPhase<dim>(
"L12",gsMap,plN));
338 temp.emplace(sp->sID,sp);
342 throw std::runtime_error(
"Unnown SecondPhase "+sp+
" in FCC crystals.");
std::string readString(const std::string &key, const bool &verbose=false)
Scalar readScalar(const std::string &key, const bool &verbose=false)