oILAB
Loading...
Searching...
No Matches
BiCrystal.h
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
7#ifndef gbLAB_BiCrystal_h_
8#define gbLAB_BiCrystal_h_
9
10#include "../Math/LLL.h"
11#include "../Math/RLLL.h"
12#include "../Math/RationalMatrix.h"
13#include "../Math/SmithDecomposition.h"
14#include "../Utilities/Rotation.h"
15#include "LatticeModule.h"
16#include <unordered_set>
17
18namespace oILAB {
24 template <int dim>
25 class BiCrystal : public RationalMatrix<dim>
26 /* */,public SmithDecomposition<dim>
27 {
33
34
37 static MatrixDimI getLambdaA(const MatrixDimI& M, const MatrixDimI& N);
38 static MatrixDimI getLambdaB(const MatrixDimI& M, const MatrixDimI& N);
40 const Lattice<dim>& B,
42 const MatrixDimI& M,
43 const MatrixDimI& N);
45 const Lattice<dim>& B,
47 const MatrixDimI& M,
48 const MatrixDimI& N);
49
50 public:
51
54
59
64
69
74
78 const int sigma;
79
80 private:
84
88
93
98
99 public:
103
107
111
115
120
125
126
129
130 /**********************************************************************/
139 BiCrystal(const Lattice<dim>& A,
140 const Lattice<dim>& B,
141 const bool& useRLLL=false);
142
178
211
220 template<int dm=dim>
221 typename std::enable_if<dm==2 || dm==3,std::map<IntScalarType,Gb<dm>>>::type
222 generateGrainBoundaries(const LatticeDirection<dim>& d, int div=30) const;
223
224
241 template<int dm=dim>
242 typename std::enable_if<dm==2 || dm==3,std::vector<LatticeVector<dim>>>::type
243 box(std::vector<LatticeVector<dim>>& boxVectors,
244 const double& orthogonality,
245 const int& dsclFactor,
246 std::string filename= "",
247 bool orient=false) const;
248 };
249
250
251} // end namespace
252#endif
253
const MatrixDimI N
Integer matrix that connects the bases and of lattices and the CSL , respectively: .
Definition BiCrystal.h:63
ReciprocalLatticeDirection< dim > getReciprocalLatticeDirectionInD(const ReciprocalLatticeVector< dim > &v) const
const MatrixDimI LambdaB
Shift tensor describes the shift in the CSL when lattice is shifted by a DSCL vector.
Definition BiCrystal.h:124
static MatrixDimI getN(const RationalMatrix< dim > &rm, const SmithDecomposition< dim > &sd)
Definition BiCrystal.cpp:29
const MatrixDimI csl2cslp
Maps integer coordinates w.r.t basis to integer coordinates w.r.t parallel basis .
Definition BiCrystal.h:97
LatticeCore< dim >::VectorDimD VectorDimD
Definition BiCrystal.h:29
LatticeCore< dim >::MatrixDimD MatrixDimD
Definition BiCrystal.h:30
static MatrixDimI getM(const RationalMatrix< dim > &rm, const SmithDecomposition< dim > &sd)
Definition BiCrystal.cpp:17
static MatrixDimD getCSLBasis(const Lattice< dim > &A, const Lattice< dim > &B, const SmithDecomposition< dim > &sd, const MatrixDimI &M, const MatrixDimI &N)
Definition BiCrystal.cpp:82
std::enable_if< dm==2||dm==3, std::map< IntScalarType, Gb< dm > > >::type generateGrainBoundaries(const LatticeDirection< dim > &d, int div=30) const
Given a tilt axis , that belongs to lattices or , this function generate a set of tilt GBs....
LatticeCore< dim >::MatrixDimI MatrixDimI
Definition BiCrystal.h:32
const MatrixDimI LambdaA
Shift tensor describes the shift in the CSL when lattice is shifted by a DSCL vector.
Definition BiCrystal.h:119
LatticeVector< dim > getLatticeVectorInA(const LatticeVector< dim > &v) const
const Lattice< dim > dsclp
Lattice with basis .
Definition BiCrystal.h:87
LatticeVector< dim > getLatticeVectorInD(const LatticeVector< dim > &v) const
LatticeVector< dim > shiftTensorB(const LatticeVector< dim > &d) const
static MatrixDimI getLambdaA(const MatrixDimI &M, const MatrixDimI &N)
Definition BiCrystal.cpp:42
LatticeDirection< dim > getLatticeDirectionInD(const LatticeVector< dim > &v) const
const Lattice< dim > Bp
Lattice with basis .
Definition BiCrystal.h:114
LatticeVector< dim > getLatticeVectorInB(const LatticeVector< dim > &v) const
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
LatticeDirection< dim > getLatticeDirectionInC(const LatticeVector< dim > &v) const
LatticeCore< dim >::IntScalarType IntScalarType
Definition BiCrystal.h:28
const Lattice< dim > & B
Definition BiCrystal.h:53
const Lattice< dim > & A
Definition BiCrystal.h:52
static MatrixDimI getLambdaB(const MatrixDimI &M, const MatrixDimI &N)
Definition BiCrystal.cpp:62
const MatrixDimI dscl2dsclp
Maps integer coordinates w.r.t basis to integer coordinates w.r.t parallel basis .
Definition BiCrystal.h:92
const IntScalarType sigmaA
Signed ratio of the unit cell volume of to that of . .
Definition BiCrystal.h:68
ReciprocalLatticeDirection< dim > getReciprocalLatticeDirectionInB(const ReciprocalLatticeVector< dim > &v) const
const Lattice< dim > csl
CSL lattice .
Definition BiCrystal.h:102
ReciprocalLatticeDirection< dim > getReciprocalLatticeDirectionInC(const ReciprocalLatticeVector< dim > &v) const
LatticeVector< dim > shiftTensorA(const LatticeVector< dim > &d) const
const MatrixDimI M
Integer matrix that connects the bases and of lattices and the CSL , respectively: .
Definition BiCrystal.h:58
const Lattice< dim > dscl
DCSL lattice .
Definition BiCrystal.h:106
LatticeCore< dim >::VectorDimI VectorDimI
Definition BiCrystal.h:31
ReciprocalLatticeDirection< dim > getReciprocalLatticeDirectionInA(const ReciprocalLatticeVector< dim > &v) const
static MatrixDimD getDSCLBasis(const Lattice< dim > &A, const Lattice< dim > &B, const SmithDecomposition< dim > &sd, const MatrixDimI &M, const MatrixDimI &N)
const Lattice< dim > cslp
Lattice with basis .
Definition BiCrystal.h:83
const IntScalarType sigmaB
Signed ratio of the unit cell volume of to that of : .
Definition BiCrystal.h:73
const int sigma
if , else
Definition BiCrystal.h:78
const Lattice< dim > Ap
Lattice with basis .
Definition BiCrystal.h:110
Lattice class.
Definition Lattice.h:31
LatticeVector class.
Eigen::Matrix< IntScalarType, dim, 1 > VectorDimI
Definition LatticeCore.h:23
long long int IntScalarType
Definition LatticeCore.h:22
Eigen::Matrix< IntScalarType, dim, dim > MatrixDimI
Definition LatticeCore.h:24
Eigen::Matrix< double, dim, 1 > VectorDimD
Definition LatticeCore.h:20
Eigen::Matrix< double, dim, dim > MatrixDimD
Definition LatticeCore.h:21
LatticeDirection class.