oILAB
Loading...
Searching...
No Matches
main.cpp
Go to the documentation of this file.
1/* This file is part of gbLAB.
2 *
3 * gbLAB is distributed without any warranty under the MIT License.
4 */
5
6#include <LatticeModule.h>
7#include <TextFileParser.h>
8
9using namespace gbLAB;
10
11int main(int argc, char** argv)
12{
13 using IntScalarType= long long int;
14
15 //const int case = argc > 1 ? std::atoi(argv[1]) : 2;
16 const int caseId= 2;
17
18 switch (caseId) {
19 case 2:
20 {
21 const auto A(TextFileParser("bicrystal_2d.txt").readMatrix<double,2,2>("A",true));
22 Lattice<2> L1(A);
23// Eigen::Matrix2d R= Eigen::Rotation2D<double>(38.04313507482*M_PI/180).matrix();
24// Eigen::Matrix2d R= Eigen::Rotation2D<double>(81.95686492519*M_PI/180).matrix();
25// Eigen::Matrix2d R= Eigen::Rotation2D<double>(38.05455500587*M_PI/180).matrix();
26// Eigen::Matrix2d R= Eigen::Rotation2D<double>(90.02872079759*M_PI/180).matrix();
27// Eigen::Matrix2d R= Eigen::Rotation2D<double>(43.89139748113*M_PI/180).matrix();
28 Eigen::Matrix2d R= Eigen::Rotation2D<double>( 143.0029103206*M_PI/180).matrix();
29
30 Lattice<2> L2(A,R);
31 BiCrystal<2> bc(L1,L2);
32 std::cout<<"sigma="<<bc.sigma<<std::endl;
33
34 std::vector<LatticeVector<2>> boxVectors;
35 Eigen::Matrix<IntScalarType,2,2> U;
36 U = RLLL(bc.csl.latticeBasis, 0.75).unimodularMatrix();
37 Eigen::Vector<IntScalarType,2> temp(U.col(0));
38 boxVectors.push_back(LatticeVector<2>(temp,bc.csl));
39 temp= U.col(1);
40 boxVectors.push_back(LatticeVector<2>(temp,bc.csl));
41
42 bc.box(boxVectors,0.6,2,"bc.txt",true);
43
44 break;
45 }
46
47 case 3:
48 {
49 const auto A(TextFileParser("bicrystal_3d.txt").readMatrix<double,3,3>("A",true));
50 const auto R1(TextFileParser("bicrystal_3d.txt").readMatrix<double,3,3>("R1",true));
51 const auto R2(TextFileParser("bicrystal_3d.txt").readMatrix<double,3,3>("R2",true));
52 const auto misAxis(TextFileParser("bicrystal_3d.txt").readMatrix<double,3,1>("misAxis",true));
53
54
55 Lattice<3> L1(A,R1);
56 Lattice<3> L2(A,R2);
57 BiCrystal<3> bc(L1,L2);
58 std::cout<<"sigma="<<bc.sigma<<std::endl;
59
60 const auto a1(L1.latticeDirection(misAxis));
61
62 std::cout<<"Integer coordinates of misorientation axis = "<<a1.latticeVector().transpose()<<std::endl;
63
64
65 break;
66 }
67
68 case 4:
69 {
70 const auto A(TextFileParser("Grimmer1985.txt").readMatrix<double,3,3>("A",true));
71 const auto Tn(TextFileParser("Grimmer1985.txt").readMatrix<long long int,3,3>("Tn",true));
72 const auto Td(TextFileParser("Grimmer1985.txt").readScalar<long long int>("Td",true));
73 RationalMatrix<3> T(Tn,Td);
74
75 const Eigen::Matrix<double,3,3> R(A*T.asMatrix()*A.inverse());
76 const double angle(acos(R.trace()/3.0));
77 std::cout<<"rot angle="<<angle*180.0/M_PI<<std::endl;
78
79 Eigen::Matrix<double,3,1> axis(Eigen::Matrix<double,3,1>::Zero());
80 Eigen::EigenSolver< Eigen::Matrix<double,3,3> > es(R);
81
82 for(int k=0;k<3;++k)
83 {
84 const auto& eVal(es.eigenvalues()(k));
85 if(std::fabs(eVal.imag())<FLT_EPSILON && std::fabs(eVal.real()-1.0)<FLT_EPSILON)
86 {
87 const auto eVec(es.eigenvectors().col(k));
88 for(int d=0;d<3;++d)
89 {
90 axis(d)=eVec(d).real();
91 }
92 break;
93 }
94 }
95 std::cout<<"rot axis="<<axis.transpose()<<std::endl;
96
97
98 Lattice<3> L1(A);
99 const auto axisDir(L1.latticeDirection(axis));
100 std::cout<<"axisDir="<<axisDir.latticeVector().transpose()<<std::endl;
101 const auto axisRec(L1.reciprocalLatticeDirection(axis));
102 std::cout<<"axisRec="<<axisRec.reciprocalLatticeVector().transpose()<<std::endl;
103
104
105 Lattice<3> L2(A,R);
106 BiCrystal<3> bc(L1,L2);
107 std::cout<<"mu_R="<<bc.mu<<std::endl;
108 std::cout<<"sigma_R="<<bc.sigma<<std::endl;
109
110 std::cout<<"D=\n"<<bc.matrixD()<<std::endl;
111 std::cout<<"M=\n"<<bc.M<<std::endl;
112 std::cout<<"N=\n"<<bc.N<<std::endl;
113
114 const Eigen::Matrix< long long,3,3> X(bc.matrixX());
115 const Eigen::Matrix< long long,3,3> Y(bc.matrixY());
116 const Eigen::Matrix< long long,3,3> adjX(X.adjoint());
117 const Eigen::Matrix< long long,3,3> adjY(Y.adjoint());
118
119 Lattice<3> L3(A,R.transpose());
120 BiCrystal<3> bcT(L1,L3);
121 std::cout<<"mu_RT="<<bcT.mu<<std::endl;
122 std::cout<<"sigma_RT="<<bcT.sigma<<std::endl;
123
124 std::cout<<"D=\n"<<bcT.matrixD()<<std::endl;
125 std::cout<<"M=\n"<<bcT.M<<std::endl;
126 std::cout<<"N=\n"<<bcT.N<<std::endl;
127
128 break;
129 }
130
131 default:
132 {
133 std::cout<<"No input file for case="<< caseId <<std::endl;
134 break;
135 }
136 }
137
138
139 return 0;
140}
const MatrixDimI M
Integer matrix that connects the bases and of lattices and the CSL , respectively: .
Definition BiCrystal.h:62
const MatrixDimI N
Integer matrix that connects the bases and of lattices and the CSL , respectively: .
Definition BiCrystal.h:67
const int sigma
if , else
Definition BiCrystal.h:82
const Lattice< dim > csl
CSL lattice .
Definition BiCrystal.h:86
std::enable_if< dm==2||dm==3, std::vector< LatticeVector< dim > > >::type box(std::vector< LatticeVector< dim > > &boxVectors, const double &orthogonality, const int &dsclFactor, std::string filename="", bool orient=false) const
Lattice class.
Definition Lattice.h:34
ReciprocalLatticeDirection< dim > reciprocalLatticeDirection(const VectorDimD &d, const double &tol=FLT_EPSILON) const
Returns the reciprocal lattice direction along a vector.
Definition Lattice.cpp:83
LatticeDirection< dim > latticeDirection(const VectorDimD &d, const double &tol=FLT_EPSILON) const
Returns the lattice direction along a vector.
Definition Lattice.cpp:56
LatticeVector class.
const Eigen::Matrix< long long int, Eigen::Dynamic, Eigen::Dynamic > & unimodularMatrix() const
Definition RLLL.cpp:198
MatrixDimD asMatrix() const
const IntScalarType & mu
const MatrixNi & matrixD() const
const MatrixNi & matrixY() const
const MatrixNi & matrixX() const
int main(int argc, char **argv)
Definition main.cpp:11