Loading...
Searching...
No Matches
init.hpp
Go to the documentation of this file.
1#pragma once
2
3/**
4 * GaugeChoice — how the gauge inside the chosen subspace is fixed.
5 *
6 * The subspace selection hands over frames in the projection gauge, exact at
7 * the mesh points whatever else it does. A gauge choice is a unitary
8 * rotation of each frame: it changes nothing at the mesh points and
9 * everything between them, which is where an interpolator is actually used.
10 * ProjectionGaugeChoice keeps the frames as they are and evaluates their
11 * spread where it is defined; MaximallyLocalizedGaugeChoice minimises the
12 * Marzari-Vanderbilt spread over the rotations. Both fill the same report
13 * section, because the projection gauge has a spread too and a driver
14 * comparing two models wants it either way.
15 *
16 * Mirrors OverlapOperator: an interface, one class per physical context, and
17 * a factory (factory.hpp) that dispatches on the policy and the record.
18 */
19
20#include <vector>
21
29
30namespace q3 {
31
33 public:
34 virtual ~GaugeChoice() = default;
35
36 [[nodiscard]] virtual WannierGauge choose(const WannierConstructionInputs& inputs,
37 const WannierSubspace& subspace) const = 0;
38};
39
40} // namespace q3
virtual WannierGauge choose(const WannierConstructionInputs &inputs, const WannierSubspace &subspace) const =0
virtual ~GaugeChoice()=default