oILAB
Loading...
Searching...
No Matches
ReciprocalLatticeDirection.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
7#ifndef gbLAB_ReciprocalLatticeDirection_cpp_
8#define gbLAB_ReciprocalLatticeDirection_cpp_
9
10#include <LatticeModule.h>
11
12namespace gbLAB
13{
14 template <int dim>
16 /* init */ ReciprocalLatticeVector<dim>(((v.squaredNorm()==0)? v : (v/abs(IntegerMath<IntScalarType>::gcd(v))).eval()),v.lattice)
17 {
18 }
19
20 template <int dim>
22 const Lattice<dim>& lat) :
23 /* base init */ ReciprocalLatticeVector<dim>(((v.squaredNorm()==0)? v : (v/IntegerMath<IntScalarType>::gcd(v)).eval()),lat)
24 {
25 }
26
27 template<int dim>
28 basic_ostream<char>& operator<<(basic_ostream<char>& s, const ReciprocalLatticeDirection<dim>& m)
29 {
30 return s<<m.reciprocalLatticeVector().transpose();
31 }
32
33 template <int dim>
35 {
36 return 1.0 / cartesian().norm();
37 }
38
39 template <int dim>
41 {
42 RLLL rlll((*this).lattice.latticeBasis,0.75);
43 auto structureMatrix= rlll.reducedBasis();
44 auto U= rlll.unimodularMatrix();
45
46 Lattice<dim> reducedLattice(structureMatrix);
47 VectorDimI temp= U.transpose()*(*this);
48 ReciprocalLatticeVector<dim> r(temp,reducedLattice);
49 LatticeDirection<dim> vector(reducedLattice);
50 vector = reducedLattice.latticeDirection(r.cartesian());
51 return abs(vector.dot(r));
52 }
53
54 template struct ReciprocalLatticeDirection<1>;
55 template basic_ostream<char>& operator<<(basic_ostream<char>& s, const ReciprocalLatticeDirection<1>& m);
56 template struct ReciprocalLatticeDirection<2>;
57 template basic_ostream<char>& operator<<(basic_ostream<char>& s, const ReciprocalLatticeDirection<2>& m);
58 template struct ReciprocalLatticeDirection<3>;
59 template basic_ostream<char>& operator<<(basic_ostream<char>& s, const ReciprocalLatticeDirection<3>& m);
60 template struct ReciprocalLatticeDirection<4>;
61 template basic_ostream<char>& operator<<(basic_ostream<char>& s, const ReciprocalLatticeDirection<4>& m);
62 template struct ReciprocalLatticeDirection<5>;
63 template basic_ostream<char>& operator<<(basic_ostream<char>& s, const ReciprocalLatticeDirection<5>& m);
64
65} // end namespace
66#endif
Lattice class.
Definition Lattice.h:34
LatticeDirection< dim > latticeDirection(const VectorDimD &d, const double &tol=FLT_EPSILON) const
Returns the lattice direction along a vector.
Definition Lattice.cpp:56
IntScalarType dot(const ReciprocalLatticeVector< dim > &other) const
const MatrixType & reducedBasis() const
Definition RLLL.cpp:192
const Eigen::Matrix< long long int, Eigen::Dynamic, Eigen::Dynamic > & unimodularMatrix() const
Definition RLLL.cpp:198
basic_ostream< char > & operator<<(basic_ostream< char > &s, const LatticeDirection< dim > &m)
LatticeDirection class.
LatticeCore< dim >::IntScalarType IntScalarType
ReciprocalLatticeDirection(const ReciprocalLatticeDirection< dim > &other)=default
double planeSpacing() const
Returns the spacing between two consecutive lattice planes.
LatticeCore< dim >::VectorDimI VectorDimI
int stacking() const
Returns the number of planes in the stacking sequence.
const ReciprocalLatticeVector< dim > & reciprocalLatticeVector() const
Returns a constant reference to the base class (ReciprocalLatticeVector)