#include <maximally_localized_gauge_choice.hpp>
Inheritance diagram for q3::MaximallyLocalizedGaugeChoice:Public Member Functions | |
| MaximallyLocalizedGaugeChoice (SpreadMinimizationSettings settings) | |
| WannierGauge | choose (const WannierConstructionInputs &inputs, const WannierSubspace &subspace) const override |
Public Member Functions inherited from q3::GaugeChoice | |
| virtual | ~GaugeChoice ()=default |
Static Public Member Functions | |
| static void | require_supported (const WannierConstructionInputs &inputs) |
| Throws WannierDiagnosticError, with the way out named, when the record cannot be localised. | |
Definition at line 43 of file maximally_localized_gauge_choice.hpp.
|
inlineexplicit |
Definition at line 45 of file maximally_localized_gauge_choice.hpp.
|
inlineoverridevirtual |
The guiding centres are taken once and then held for the whole run.
The trial-orbital positions when the record carries them, which is Wannier90's choice and the right one; the projection gauge's own centres only as a fallback. The difference is not academic. On a rattled four-atom Si3C cell the fallback started at Omega = 186 A^2 and stalled at 170, with centres 5 A from any atom, while Wannier90 on the same matrices started at 36.7 and finished at 25.9: with the phase branches inconsistent across k, the Berry-phase centres of the starting gauge are already garbage, and guiding to garbage keeps it.
Implements q3::GaugeChoice.
Definition at line 76 of file maximally_localized_gauge_choice.hpp.
References q3::SpreadTerms::centers_bohr, q3::WannierSubspace::classification, q3::SpreadFunctional::evaluate(), q3::SpreadReport::evaluated_as(), q3::WannierGauge::frames, q3::WannierSubspace::frames, q3::SpreadMinimizationResult::gauges, q3::SpreadMinimizationResult::gradient_norm, q3::WannierInputs::has_trial_orbital_centers(), q3::log::info(), q3::SpreadMinimizationResult::initial_minimizable_bohr_squared, q3::SpreadMinimizationResult::iterations, q3::SpreadReport::localization_converged, q3::SpreadReport::localization_gradient_norm, q3::SpreadReport::localization_iterations, q3::SpreadReport::localized, q3::multiply(), q3::None, q3::WannierConstructionInputs::number_of_wannier_functions(), q3::WannierConstructionInputs::overlaps_in_gauge(), q3::WannierConstructionInputs::record(), require_supported(), q3::SpreadMinimizer::run(), q3::WannierGauge::spread, q3::SpreadMinimizationResult::stationary, q3::WannierConstructionInputs::stencil(), q3::SpreadMinimizationResult::terms, and q3::WannierInputs::trial_orbital_centers_bohr.
|
inlinestatic |
Throws WannierDiagnosticError, with the way out named, when the record cannot be localised.
Definition at line 49 of file maximally_localized_gauge_choice.hpp.
References q3::KPointStencil::grid_step(), q3::WannierConstructionInputs::has_overlaps(), q3::WannierInputs::kpoint_grid_dimensions, q3::localization_unsupported, q3::WannierConstructionInputs::record(), q3::WannierConstructionInputs::stencil(), q3::two_point_axis, q3::WannierConstructionInputs::two_point_axis_direction(), q3::IntegerVector3D::x, q3::IntegerVector3D::y, and q3::IntegerVector3D::z.
Referenced by choose(), and q3::create_gauge_choice().