Loading...
Searching...
No Matches
projector_source.hpp
Go to the documentation of this file.
1#pragma once
2
3/**
4 * MeanFieldProjectorSource — Kleinman-Bylander projectors, fetched on demand.
5 *
6 * The projector counterpart of MeanFieldBandSource (see init.hpp): every
7 * projector of every atom at one k-point is as large as a band set of the same
8 * count, so the record carries a source that builds one k-point at a time
9 * instead of holding them all. Only the BerkeleyGW `VKB` writer reads it.
10 */
11
14
15namespace q3 {
16
17/// Hands out one k-point's projectors at a time; see the file comment.
19 public:
20 virtual ~MeanFieldProjectorSource() = default;
21
22 /**
23 * <k+G|β> for physical k-point `kpoint_index`: one row per projector, atoms
24 * in the crystal's own order and each atom's channels in the order of
25 * `MeanFieldRecord::nonlocal_coefficients`; one column per plane wave, in
26 * the order of `MeanFieldRecord::kpoint_g_vector_indices[kpoint_index]`.
27 * Valid until the next call for a different k-point.
28 */
29 [[nodiscard]] virtual const Matrix<Complex>& projectors(int kpoint_index) const = 0;
30};
31
32} // namespace q3
Hands out one k-point's projectors at a time; see the file comment.
virtual ~MeanFieldProjectorSource()=default
virtual const Matrix< Complex > & projectors(int kpoint_index) const =0