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 <IntegerLattice.h>
11#include <LatticeModule.h>
12#include <StaticID.h>
14#include <vector>
15#include <range.h>
16#include <map>
17#include <unordered_map>
18#include "RLLL.h"
19#include <Rational.h>
20#include <Farey.h>
22#include <algorithm>
23#include <fstream>
24
25
26namespace gbLAB
27{
32 template <int dim>
33 class Lattice : public StaticID<Lattice<dim>>
34 {
35 static constexpr double roundTol=FLT_EPSILON;
36
42
43
44 public:
45
49
50 Lattice(const MatrixDimD& A,const MatrixDimD& Q=MatrixDimD::Identity()) ;
51
52
59
65 LatticeDirection<dim> latticeDirection(const VectorDimD& d, const double& tol=FLT_EPSILON) const;
66
73
79 ReciprocalLatticeDirection<dim> reciprocalLatticeDirection(const VectorDimD& d, const double& tol= FLT_EPSILON) const;
80
89 std::vector<ReciprocalLatticeDirection<dim>> directionOrthogonalReciprocalLatticeBasis(const LatticeDirection<dim>& l,
90 const bool& useRLLL=false) const;
91
93 const typename BestRationalApproximation::LongIntType& maxDen,
94 const double& magnitudeTol,
95 const double& directionTol= FLT_EPSILON) const;
97 const typename BestRationalApproximation::LongIntType& maxDen,
98 const double& magnitudeTol,
99 const double& directionTol= FLT_EPSILON) const;
100
109 std::vector<LatticeDirection<dim>> planeParallelLatticeBasis(const ReciprocalLatticeDirection<dim>& l,
110 const bool& useRLLL=false) const;
111
112
113
120
130 template<int dm=dim>
131 typename std::enable_if<dm==3,std::vector<MatrixDimD>>::type
132 generateCoincidentLattices(const ReciprocalLatticeDirection<dim>& rd, const double& maxDen= 100, const int& N= 100) const;
133
137 template<int dm=dim>
138 typename std::enable_if<dm==2,std::vector<MatrixDimD>>::type
139 generateCoincidentLattices(const double& maxStrain,
140 const int& maxDen=50,
141 const int& N=30) const;
142
163 template<int dm=dim>
164 typename std::enable_if<dm==2,std::vector<MatrixDimD>>::type
165 generateCoincidentLattices(const Lattice<dim>& undeformedLattice,
166 const double& maxStrain,
167 const int& maxDen=50,
168 const int& N=30) const;
169
179 template<int dm=dim>
180 typename std::enable_if<dm==3,std::vector<LatticeVector<dim>>>::type
181 box(const std::vector<LatticeVector<dim>>& boxVectors, const std::string& filename= "") const;
182
192 template<int dm=dim>
193 typename std::enable_if<dm==2,std::vector<LatticeVector<dim>>>::type
194 box(const std::vector<LatticeVector<dim>>& boxVectors, const std::string& filename= "") const;
195};
335}
336#endif
Lattice class.
Definition Lattice.h:34
typename LatticeCore< dim >::VectorDimD VectorDimD
Definition Lattice.h:37
RationalReciprocalLatticeDirection< dim > rationalReciprocalLatticeDirection(const VectorDimD &d, const typename BestRationalApproximation::LongIntType &maxDen, const double &magnitudeTol, const double &directionTol=FLT_EPSILON) const
Definition Lattice.cpp:133
const MatrixDimD F
Definition Lattice.h:48
double interPlanarSpacing(const ReciprocalLatticeDirection< dim > &r) const
Computes the interplanar spacing.
Definition Lattice.cpp:303
const MatrixDimD latticeBasis
Definition Lattice.h:46
const MatrixDimD reciprocalBasis
Definition Lattice.h:47
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:312
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:235
typename LatticeCore< dim >::IntScalarType IntScalarType
Definition Lattice.h:41
typename LatticeCore< dim >::MatrixDimD MatrixDimD
Definition Lattice.h:38
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:162
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:467
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:169
typename LatticeCore< dim >::MatrixDimI MatrixDimI
Definition Lattice.h:40
static constexpr double roundTol
Definition Lattice.h:35
LatticeVector< dim > latticeVector(const VectorDimD &p) const
Returns a lattice vector (in the current lattice) with Cartesian coordinates p.
Definition Lattice.cpp:155
RationalLatticeDirection< dim > rationalLatticeDirection(const VectorDimD &d, const typename BestRationalApproximation::LongIntType &maxDen, const double &magnitudeTol, const double &directionTol=FLT_EPSILON) const
Definition Lattice.cpp:110
typename LatticeCore< dim >::VectorDimI VectorDimI
Definition Lattice.h:39
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.
A class template that implements a counter of the number of instances of Derived type that are create...
Definition StaticID.h:27
Eigen::Matrix< double, dim, dim > MatrixDimD
Definition LatticeCore.h:25
Eigen::Matrix< IntScalarType, dim, dim > MatrixDimI
Definition LatticeCore.h:28
Eigen::Matrix< double, dim, 1 > VectorDimD
Definition LatticeCore.h:24
long long int IntScalarType
Definition LatticeCore.h:26
Eigen::Matrix< IntScalarType, dim, 1 > VectorDimI
Definition LatticeCore.h:27
LatticeDirection class.