71 const std::shared_ptr<DislocationMobility> mobility(mobilitySelector.
getMobility(material,dislocationMobilityType));
72 std::shared_ptr<GlidePlaneNoise> planeNoise(
new GlidePlaneNoise(material));
75 for(
const auto& planeBase : plN)
77 if(std::fabs(planeBase.second->planeSpacing()-d110)<FLT_EPSILON)
79 const auto& a1(planeBase.second->primitiveVectors.first);
80 const auto& a3(planeBase.second->primitiveVectors.second);
82 std::vector<RationalLatticeDirection<3>> slipDirs;
83 slipDirs.emplace_back(
Rational( 1,1),a1);
84 slipDirs.emplace_back(
Rational(-1,1),a1);
85 slipDirs.emplace_back(
Rational( 1,1),a3);
86 slipDirs.emplace_back(
Rational(-1,1),a3);
88 for(
const auto& slipDir : slipDirs)
90 temp.emplace(
temp.size(),
new SlipSystem(*planeBase.second, slipDir,mobility,planeNoise));
99 const std::shared_ptr<DislocationMobility> mobility110(mobilitySelector.
getMobility(material,dislocationMobilityType));
100 std::shared_ptr<GlidePlaneNoise> planeNoise(
new GlidePlaneNoise(material));
103 for(
const auto& planeBase : plN)
105 if(std::fabs(planeBase.second->planeSpacing()-d110)<FLT_EPSILON)
107 const auto& a1(planeBase.second->primitiveVectors.first);
108 const auto& a3(planeBase.second->primitiveVectors.second);
110 std::vector<RationalLatticeDirection<3>> slipDirs;
111 slipDirs.emplace_back(
Rational( 1,1),a1+a3);
112 slipDirs.emplace_back(
Rational(-1,1),a1+a3);
114 for(
const auto& slipDir : slipDirs)
116 temp.emplace(
temp.size(),
new SlipSystem(*planeBase.second, slipDir,mobility110,planeNoise));
141 const int rotSymm110(1);
142 const Eigen::Matrix<double,2,2> A110(
GlidePlaneBase(a3,a1,
nullptr).localBasis()*(Eigen::Matrix<double,2,2>()<<2, 1, 0, 1).finished());
143 std::vector<Eigen::Matrix<double,2,1>> mirSymm110 = {
144 (A110.col(1)).normalized(),
145 (A110.col(0)-A110.col(1)).normalized()
148 Eigen::Matrix<double,Eigen::Dynamic,3> f110(fr110);
149 f110.block(0,0,fr110.rows(),2) = (A110 * fr110.block(0,0,fr110.rows(),2).transpose()).transpose();
150 f110.col(2) = fr110.col(2) / (material.
mu_SI * material.
b_SI);
152 std::shared_ptr<GammaSurface> gammaSurface110(
new GammaSurface(A110,waveVectors110,f110,rotSymm110,mirSymm110));
154 std::map<const GlidePlaneBase*,std::shared_ptr<GammaSurface>> gsMap;
155 for(
const auto& pn : plN)
157 if(std::abs(pn.second->planeSpacing()-d110)<FLT_EPSILON)
159 gsMap.emplace(pn.second.get(),gammaSurface110);
162 std::shared_ptr<SecondPhase<dim>> sp(
new SecondPhase<dim>(
"chi",gsMap,plN));
163 temp.emplace(sp->sID,sp);
169 const int rotSymm110(1);
170 const Eigen::Matrix<double,2,2> A110(
GlidePlaneBase(a3,a1,
nullptr).localBasis()*(Eigen::Matrix<double,2,2>()<<2, 1, 0, 1).finished());
171 std::vector<Eigen::Matrix<double,2,1>> mirSymm110 = {
172 (A110.col(1)).normalized(),
173 (A110.col(0)-A110.col(1)).normalized()
176 Eigen::Matrix<double,Eigen::Dynamic,3> f110(fr110);
177 f110.block(0,0,fr110.rows(),2) = (A110 * fr110.block(0,0,fr110.rows(),2).transpose()).transpose();
178 f110.col(2) = fr110.col(2) / (material.
mu_SI * material.
b_SI);
180 std::shared_ptr<GammaSurface> gammaSurface110(
new GammaSurface(A110,waveVectors110,f110,rotSymm110,mirSymm110));
182 std::map<const GlidePlaneBase*,std::shared_ptr<GammaSurface>> gsMap;
183 for(
const auto& pn : plN)
185 if(std::abs(pn.second->planeSpacing()-d110)<FLT_EPSILON)
187 gsMap.emplace(pn.second.get(),gammaSurface110);
191 gsMap.emplace(pn.second.get(),
nullptr);
194 std::shared_ptr<SecondPhase<dim>> sp(
new SecondPhase<dim>(
"sigma",gsMap,plN));
195 temp.emplace(sp->sID,sp);
200 throw std::runtime_error(
"Unknown SecondPhase "+sp+
" in BCC crystals.");
Eigen::Matrix< Scalar, Eigen::Dynamic, Eigen::Dynamic > readMatrixCols(const std::string &key, const size_t &cols, const bool &verbose=false)
std::string readString(const std::string &key, const bool &verbose=false)