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