Loading...
Searching...
No Matches
operation.hpp
Go to the documentation of this file.
1#pragma once
2
3/**
4 * SymmetryOperation: a crystallographic point-group symmetry operation.
5 *
6 * Stores the real-space rotation matrix (integer, in crystal coordinates),
7 * the corresponding reciprocal-space rotation for G-vectors, a fractional
8 * translation vector, and the atom permutation map under this operation.
9 */
10
11#include <array>
12#include <vector>
13
15
16namespace q3 {
17
18/**
19 * A single symmetry operation: rotation matrix (integer, crystal coords) and
20 * fractional translation (crystal coords).
21 * Real-space fractional coords transform as: x' = rotation * x + fractional_translation
22 * G-vector Miller indices transform as: G' = reciprocal_rotation * G
23 * where reciprocal_rotation = (rotation^{-1})^T.
24 * For non-symmorphic operations, the phase factor is exp(-i 2π G · τ).
25 */
26struct [[nodiscard]] SymmetryOperation {
27 std::array<std::array<int, 3>, 3> rotation; // real-space rotation (crystal coords)
28 std::array<std::array<int, 3>, 3> reciprocal_rotation; // (rotation^{-1})^T for G-vectors
29 Vector3D fractional_translation; // fractional translation (crystal coords)
30 std::vector<int> atom_map; // atom_map[na] = nb: atom na maps to atom nb under this operation
31};
32
33} // namespace q3
std::array< std::array< int, 3 >, 3 > rotation
Definition operation.hpp:27
Vector3D fractional_translation
Definition operation.hpp:29
std::vector< int > atom_map
Definition operation.hpp:30
std::array< std::array< int, 3 >, 3 > reciprocal_rotation
Definition operation.hpp:28