Quantum 3xplorer (Q3)
Loading...
Searching...
No Matches
principal_phase_branch.hpp
Go to the documentation of this file.
1
#pragma once
2
3
/**
4
* PrincipalPhaseBranch — Im ln M_nn as std::arg returns it, on (-pi, pi].
5
*
6
* The branch of a gauge nobody has a centre for yet: it is what gives the
7
* projection gauge its centres in the first place. It jumps by 2 pi as a
8
* diagonal element crosses the negative real axis, so a minimisation is
9
* never run on it (SpreadFunctional says what that costs); a test that wants
10
* to exhibit the jump is.
11
*/
12
13
#include <complex>
14
15
#include "
layer_0_core/types/init.hpp
"
16
#include "
layer_4_computation/interpolator/method/wannier/internal/phase_branch/init.hpp
"
17
18
namespace
q3
{
19
20
class
PrincipalPhaseBranch
:
public
PhaseBranch
{
21
public
:
22
[[nodiscard]]
Real
phase_of
(
const
Complex
& diagonal_overlap,
23
int
/*wannier_function*/
,
24
const
Vector3D
&
/*b_vector*/
)
const override
{
25
return
std::arg(diagonal_overlap);
26
}
27
28
/// The principal value needs nothing per function, so it serves any number of them.
29
void
require_serves
(
int
/*number_of_wannier_functions*/
)
const override
{}
30
};
31
32
}
// namespace q3
q3::PhaseBranch
Definition
init.hpp:19
q3::PrincipalPhaseBranch
Definition
principal_phase_branch.hpp:20
q3::PrincipalPhaseBranch::phase_of
Real phase_of(const Complex &diagonal_overlap, int, const Vector3D &) const override
Definition
principal_phase_branch.hpp:22
q3::PrincipalPhaseBranch::require_serves
void require_serves(int) const override
The principal value needs nothing per function, so it serves any number of them.
Definition
principal_phase_branch.hpp:29
init.hpp
init.hpp
q3
Definition
q3_core_api.hpp:33
q3::Real
double Real
Definition
type_aliases.hpp:20
q3::Complex
std::complex< double > Complex
Definition
type_aliases.hpp:21
q3::Vector3D
Definition
vector_3d.hpp:23
src
layer_4_computation
interpolator
method
wannier
internal
phase_branch
principal_phase_branch.hpp
Generated by
1.9.8