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