Mechanics of Defect Evolution Library
Loading...
Searching...
No Matches
CubicFluoriteCrystal.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
9#ifndef model_CubicFluoriteCrystal_cpp_
10#define model_CubicFluoriteCrystal_cpp_
11
14#include <GlidePlaneNoise.h>
15
16
17namespace model
18{
19
21{
24 Eigen::Matrix<double,dim,dim> temp;
25 temp << 0.0, 1.0, 1.0,
26 /* */ 1.0, 0.0, 1.0,
27 /* */ 1.0, 1.0, 0.0;
28 return temp/sqrt(2.0);
29}
30
32 const Lattice<dim>& lat)
33{
36 LatticeVectorType a1((VectorDimI()<<1,0,0).finished(),lat);
37 LatticeVectorType a2((VectorDimI()<<0,1,0).finished(),lat);
38 LatticeVectorType a3((VectorDimI()<<0,0,1).finished(),lat);
39 LatticeVectorType x1((VectorDimI()<<-1,1,1).finished(),lat);
40 LatticeVectorType x2((VectorDimI()<<1,-1,1).finished(),lat);
41 LatticeVectorType x3((VectorDimI()<<1,1,-1).finished(),lat);
42
44
45 if( material.isEnabledPlane("{111}"))
46 {// 111 planes
47 temp.emplace(temp.size(),new GlidePlaneBase(a1,a3,nullptr));
48 temp.emplace(temp.size(),new GlidePlaneBase(a3,a2,nullptr));
49 temp.emplace(temp.size(),new GlidePlaneBase(a2,a1,nullptr));
50 temp.emplace(temp.size(),new GlidePlaneBase(a1-a3,a2-a3,nullptr));
51 }
52
53 if( material.isEnabledPlane("{011}")
54 || material.isEnabledPlane("{101}")
55 || material.isEnabledPlane("{110}"))
56 {// 110 planes
57 temp.emplace(temp.size(),new GlidePlaneBase(a3,x3,nullptr));
58 temp.emplace(temp.size(),new GlidePlaneBase(a2-a1,x3,nullptr));
59 temp.emplace(temp.size(),new GlidePlaneBase(a2,x2,nullptr));
60 temp.emplace(temp.size(),new GlidePlaneBase(a1-a3,x2,nullptr));
61 temp.emplace(temp.size(),new GlidePlaneBase(a1,x1,nullptr));
62 temp.emplace(temp.size(),new GlidePlaneBase(a3-a2,x1,nullptr));
63 }
64
65 if( material.isEnabledPlane("{100}")
66 || material.isEnabledPlane("{010}")
67 || material.isEnabledPlane("{001}"))
68 {// 100 planes
69 temp.emplace(temp.size(),new GlidePlaneBase(a1,a2-a3,nullptr));
70 temp.emplace(temp.size(),new GlidePlaneBase(a2,a3-a1,nullptr));
71 temp.emplace(temp.size(),new GlidePlaneBase(a3,a1-a2,nullptr));
72 }
73
74 return temp;
75}
76
78 const Lattice<dim>& lat,
79 const PlaneNormalContainerType& plN)
80{
83
84// const std::string dislocationMobilityType(TextFileParser(material.materialFile).readString("dislocationMobilityType",true));
85// DislocationMobilitySelector mobilitySelector("BCC");
86// const std::shared_ptr<DislocationMobilityBase> mobility(mobilitySelector.getMobility(material,dislocationMobilityType));
87
88
89 DislocationMobilitySelector mobilitySelector;
90 std::shared_ptr<GlidePlaneNoise> planeNoise(new GlidePlaneNoise(material));
92
93 if(material.isEnabledSlipSystem("a/2<110>{111}"))
94 {
95
96 const std::string dislocationMobilityType(TextFileParser(material.materialFile).readString("mobility_a/2<110>{111}",true));
97 const std::shared_ptr<DislocationMobility> mobility(mobilitySelector.getMobility(material,dislocationMobilityType));
98 const double d111(lat.reciprocalLatticeDirection(lat.C2G*(VectorDimD()<<1.0,1.0,1.0).finished()).planeSpacing());
99 for(const auto& planeBase : plN)
100 {
101 if(std::fabs(planeBase.second->planeSpacing()-d111)<FLT_EPSILON)
102 {// a {111} plane
103 const auto& a1(planeBase.second->primitiveVectors.first);
104 const auto& a3(planeBase.second->primitiveVectors.second);
105
106 const auto b1(a1);
107 const auto b2(a3-a1);
108 const auto b3(a3*(-1));
109
110 std::vector<RationalLatticeDirection<3>> slipDirs;
111 slipDirs.emplace_back(Rational( 1,1),b1);
112 slipDirs.emplace_back(Rational(-1,1),b1);
113 slipDirs.emplace_back(Rational( 1,1),b2);
114 slipDirs.emplace_back(Rational(-1,1),b2);
115 slipDirs.emplace_back(Rational( 1,1),b3);
116 slipDirs.emplace_back(Rational(-1,1),b3);
117
118 for(const auto& slipDir : slipDirs)
119 {
120 temp.emplace(temp.size(),new SlipSystem(*planeBase.second, slipDir,mobility,planeNoise));
121 }
122 }
123 }
124 }
125
126
127 if(material.isEnabledSlipSystem("a/2<110>{110}"))
128 {
129 const std::string dislocationMobilityType(TextFileParser(material.materialFile).readString("mobility_a/2<110>{110}",true));
130 const std::shared_ptr<DislocationMobility> mobility(mobilitySelector.getMobility(material,dislocationMobilityType));
131 const double d110(lat.reciprocalLatticeDirection(lat.C2G*(VectorDimD()<<1.0,1.0,0.0).finished()).planeSpacing());
132 for(const auto& planeBase : plN)
133 {
134 if(std::fabs(planeBase.second->planeSpacing()-d110)<FLT_EPSILON)
135 {// a {111} plane
136 const auto b1(planeBase.second->primitiveVectors.first);
137
138 std::vector<RationalLatticeDirection<3>> slipDirs;
139 slipDirs.emplace_back(Rational( 1,1),b1);
140 slipDirs.emplace_back(Rational(-1,1),b1);
141
142 for(const auto& slipDir : slipDirs)
143 {
144 temp.emplace(temp.size(),new SlipSystem(*planeBase.second, slipDir,mobility,planeNoise));
145 }
146 }
147 }
148 }
149
150 if(material.isEnabledSlipSystem("a/2<110>{100}"))
151 {
152 const std::string dislocationMobilityType(TextFileParser(material.materialFile).readString("mobility_a/2<110>{100}",true));
153 const std::shared_ptr<DislocationMobility> mobility(mobilitySelector.getMobility(material,dislocationMobilityType));
154 const double d100(lat.reciprocalLatticeDirection(lat.C2G*(VectorDimD()<<1.0,0.0,0.0).finished()).planeSpacing());
155 for(const auto& planeBase : plN)
156 {
157 if(std::fabs(planeBase.second->planeSpacing()-d100)<FLT_EPSILON)
158 {// a {111} plane
159 const auto& b1(planeBase.second->primitiveVectors.first);
160 const auto& b2(planeBase.second->primitiveVectors.second);
161
162 std::vector<RationalLatticeDirection<3>> slipDirs;
163 slipDirs.emplace_back(Rational( 1,1),b1);
164 slipDirs.emplace_back(Rational(-1,1),b1);
165 slipDirs.emplace_back(Rational( 1,1),b2);
166 slipDirs.emplace_back(Rational(-1,1),b2);
167
168 for(const auto& slipDir : slipDirs)
169 {
170 temp.emplace(temp.size(),new SlipSystem(*planeBase.second, slipDir,mobility,planeNoise));
171 }
172 }
173 }
174 }
175
176// for(const auto& planeBase : plN)
177// {
178// if(std::fabs(planeBase.second->planeSpacing()-d111)<FLT_EPSILON)
179// {// a {111} plane
180// const auto& a1(planeBase.second->primitiveVectors.first);
181// const auto& a3(planeBase.second->primitiveVectors.second);
182//
183// const auto b1(a1);
184// const auto b2(a3-a1);
185// const auto b3(a3*(-1));
186//
187// std::vector<RationalLatticeDirection<3>> slipDirs;
188//
189// if( material.enabledSlipSystems.find("full<110>{111}")!=material.enabledSlipSystems.end())
190// {
191// // Full slip systems
192// slipDirs.emplace_back(Rational( 1,1),b1);
193// slipDirs.emplace_back(Rational(-1,1),b1);
194// slipDirs.emplace_back(Rational( 1,1),b2);
195// slipDirs.emplace_back(Rational(-1,1),b2);
196// slipDirs.emplace_back(Rational( 1,1),b3);
197// slipDirs.emplace_back(Rational(-1,1),b3);
198// }
199//
200// for(const auto& slipDir : slipDirs)
201// {
202// temp.emplace(temp.size(),new SlipSystem(*planeBase.second, slipDir,mobility,planeNoise));
203// }
204// }
205//
206// if(std::fabs(planeBase.second->planeSpacing()-d110)<FLT_EPSILON)
207// {// a {110} plane
208// const auto& a1(planeBase.second->primitiveVectors.first);
209// const auto b1(a1);
210//
211// std::vector<RationalLatticeDirection<3>> slipDirs;
212//
213// if( material.enabledSlipSystems.find("full<110>{110}")!=material.enabledSlipSystems.end())
214// {
215// // Full slip systems
216// slipDirs.emplace_back(Rational( 1,1),b1);
217// slipDirs.emplace_back(Rational(-1,1),b1);
218// }
219//
220// for(const auto& slipDir : slipDirs)
221// {
222// temp.emplace(temp.size(),new SlipSystem(*planeBase.second, slipDir,mobility,planeNoise));
223// }
224// }
225//
226// if(std::fabs(planeBase.second->planeSpacing()-d100)<FLT_EPSILON)
227// {// a {100} plane
228// const auto& a1(planeBase.second->primitiveVectors.first);
229// const auto& a2(planeBase.second->primitiveVectors.second);
230//
231// const auto b1(a1);
232// const auto b2(a2);
233//
234//
235// std::vector<RationalLatticeDirection<3>> slipDirs;
236//
237// if( material.enabledSlipSystems.find("full<110>{100}")!=material.enabledSlipSystems.end())
238// {
239// // Full slip systems
240// slipDirs.emplace_back(Rational( 1,1),b1);
241// slipDirs.emplace_back(Rational(-1,1),b1);
242// slipDirs.emplace_back(Rational( 1,1),b2);
243// slipDirs.emplace_back(Rational(-1,1),b2);
244// }
245//
246// for(const auto& slipDir : slipDirs)
247// {
248// temp.emplace(temp.size(),new SlipSystem(*planeBase.second, slipDir,mobility,planeNoise));
249// }
250// }
251//
252// }
253 return temp;
254}
255
256
257
269
270} // namespace model
271#endif
272
ReciprocalLatticeDirectionType reciprocalLatticeDirection(const VectorDimD &d) const
const MatrixDimD C2G
std::string readString(const std::string &key, const bool &verbose=false)
TypeTraits< SingleCrystalBase< dim > >::SecondPhaseContainerType SecondPhaseContainerType
Eigen::Matrix< double, dim, 1 > VectorDimD
TypeTraits< SingleCrystalBase< dim > >::SlipSystemContainerType SlipSystemContainerType
Eigen::Matrix< long int, dim, 1 > VectorDimI
TypeTraits< SingleCrystalBase< dim > >::PlaneNormalContainerType PlaneNormalContainerType
std::shared_ptr< DislocationMobility > getMobility(const PolycrystallineMaterialBase &material, const std::string &tag) const
bool isEnabledPlane(const std::string &planeStr) const
bool isEnabledSlipSystem(const std::string &ssStr) const
vertex temp