oILAB
Loading...
Searching...
No Matches
Lattice.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_Lattice_h_
8#define gbLAB_Lattice_h_
9
10#include "../Math/BestRationalApproximation.h"
11#include "../Math/Farey.h"
12#include "../Math/RLLL.h"
13#include "../Math/Rational.h"
14#include "../Math/RationalApproximations.h"
15#include "../Utilities/StaticID.h"
16#include "../Utilities/range.h"
17#include "IntegerLattice.h"
18#include "LatticeCore.h"
19#include "LatticeModule.h"
20#include <algorithm>
21#include <fstream>
22#include <map>
23#include <unordered_map>
24#include <vector>
25
26namespace oILAB {
31template <int dim> class Lattice : public StaticID<Lattice<dim>> {
32 static constexpr double roundTol = FLT_EPSILON;
33
39
40public:
44
45 Lattice(const MatrixDimD &A, const MatrixDimD &Q = MatrixDimD::Identity());
46
54
61 const double &tol = FLT_EPSILON) const;
62
70 reciprocalLatticeVector(const VectorDimD &p) const;
71
79 const double &tol = FLT_EPSILON) const;
80
92 std::vector<ReciprocalLatticeDirection<dim>>
94 const bool &useRLLL = false) const;
95
97 const VectorDimD &d,
98 const typename BestRationalApproximation::LongIntType &maxDen,
99 const double &magnitudeTol,
100 const double &directionTol = FLT_EPSILON) const;
102 const VectorDimD &d,
103 const typename BestRationalApproximation::LongIntType &maxDen,
104 const double &magnitudeTol,
105 const double &directionTol = FLT_EPSILON) const;
106
118 std::vector<LatticeDirection<dim>>
120 const bool &useRLLL = false) const;
121
128
139 template <int dm = dim>
140 typename std::enable_if<dm == 3, std::vector<MatrixDimD>>::type
142 const double &maxDen = 100,
143 const int &N = 100) const;
144
149 template <int dm = dim>
150 typename std::enable_if<dm == 2, std::vector<MatrixDimD>>::type
151 generateCoincidentLattices(const double &maxStrain, const int &maxDen = 50,
152 const int &N = 30) const;
153
177 template <int dm = dim>
178 typename std::enable_if<dm == 2, std::vector<MatrixDimD>>::type
179 generateCoincidentLattices(const Lattice<dim> &undeformedLattice,
180 const double &maxStrain, const int &maxDen = 50,
181 const int &N = 30) const;
182
192 template <int dm = dim>
193 typename std::enable_if<dm == 3, std::vector<LatticeVector<dim>>>::type
194 box(const std::vector<LatticeVector<dim>> &boxVectors,
195 const std::string &filename = "") const;
196
206 template <int dm = dim>
207 typename std::enable_if<dm == 2, std::vector<LatticeVector<dim>>>::type
208 box(const std::vector<LatticeVector<dim>> &boxVectors,
209 const std::string &filename = "") const;
210};
350} // namespace oILAB
351#endif
Lattice class.
Definition Lattice.h:31
LatticeDirection< dim > latticeDirection(const VectorDimD &d, const double &tol=FLT_EPSILON) const
Returns the lattice direction along a vector.
Definition Lattice.cpp:54
typename LatticeCore< dim >::VectorDimD VectorDimD
Definition Lattice.h:34
typename LatticeCore< dim >::MatrixDimI MatrixDimI
Definition Lattice.h:37
std::enable_if< dm==3, std::vector< MatrixDimD > >::type generateCoincidentLattices(const ReciprocalLatticeDirection< dim > &rd, const double &maxDen=100, const int &N=100) const
Definition Lattice.cpp:310
ReciprocalLatticeDirection< dim > reciprocalLatticeDirection(const VectorDimD &d, const double &tol=FLT_EPSILON) const
Returns the reciprocal lattice direction along a vector.
Definition Lattice.cpp:81
std::vector< LatticeDirection< dim > > planeParallelLatticeBasis(const ReciprocalLatticeDirection< dim > &l, const bool &useRLLL=false) const
Given a reciprocal lattice direction , this function returns a plane-parallel lattice basis ,...
Definition Lattice.cpp:167
double interPlanarSpacing(const ReciprocalLatticeDirection< dim > &r) const
Computes the interplanar spacing.
Definition Lattice.cpp:301
LatticeVector< dim > latticeVector(const VectorDimD &p) const
Returns a lattice vector (in the current lattice) with Cartesian coordinates p.
Definition Lattice.cpp:153
typename LatticeCore< dim >::MatrixDimD MatrixDimD
Definition Lattice.h:35
RationalLatticeDirection< dim > rationalLatticeDirection(const VectorDimD &d, const typename BestRationalApproximation::LongIntType &maxDen, const double &magnitudeTol, const double &directionTol=FLT_EPSILON) const
Definition Lattice.cpp:108
ReciprocalLatticeVector< dim > reciprocalLatticeVector(const VectorDimD &p) const
Returns a reciprocal lattice vector (in the dual of the current lattice) with Cartesian coordinates p...
Definition Lattice.cpp:160
const MatrixDimD reciprocalBasis
Definition Lattice.h:42
std::vector< ReciprocalLatticeDirection< dim > > directionOrthogonalReciprocalLatticeBasis(const LatticeDirection< dim > &l, const bool &useRLLL=false) const
Given a lattice direction , this function returns a direction-orthogonal reciprocal lattice basis ,...
Definition Lattice.cpp:233
const MatrixDimD F
Definition Lattice.h:43
std::enable_if< dm==3, std::vector< LatticeVector< dim > > >::type box(const std::vector< LatticeVector< dim > > &boxVectors, const std::string &filename="") const
Definition Lattice.cpp:465
typename LatticeCore< dim >::IntScalarType IntScalarType
Definition Lattice.h:38
typename LatticeCore< dim >::VectorDimI VectorDimI
Definition Lattice.h:36
RationalReciprocalLatticeDirection< dim > rationalReciprocalLatticeDirection(const VectorDimD &d, const typename BestRationalApproximation::LongIntType &maxDen, const double &magnitudeTol, const double &directionTol=FLT_EPSILON) const
Definition Lattice.cpp:131
const MatrixDimD latticeBasis
Definition Lattice.h:41
static constexpr double roundTol
Definition Lattice.h:32
LatticeVector class.
A class template that implements a counter of the number of instances of Derived type that are create...
Definition StaticID.h:23
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.