Loading...
Searching...
No Matches
init.hpp
Go to the documentation of this file.
1#pragma once
2
3/**
4 * UltrasoftPseudopotential — ultrasoft pseudopotential subclass.
5 *
6 * Extends the base Pseudopotential with ultrasoft-specific fields:
7 * augmentation functions Q_ij(r), Q_ij^L(r), augmentation overlap
8 * integrals, inner cutoff radii, and augmentation coefficients.
9 *
10 * These fields are populated by the UPF readers when reading an
11 * ultrasoft pseudopotential file.
12 *
13 * Q_ij(r) is Eq. (20) of D. Vanderbilt, Phys. Rev. B 41, 7892 (1990), and the
14 * overlap integrals enter his overlap operator, Eq. (11). The L-resolved,
15 * pseudized Q_ij^L(r) is Eqs. (27)–(28) of K. Laasonen, A. Pasquarello,
16 * R. Car, C. Lee & D. Vanderbilt, Phys. Rev. B 47, 10142 (1993).
17 */
18
19#include <vector>
20
23
24namespace q3 {
25
26/// Ultrasoft pseudopotential — extends base with augmentation data.
28 public:
29 ~UltrasoftPseudopotential() override = default;
30
31 [[nodiscard]] std::unique_ptr<Pseudopotential> clone() const override {
32 return std::make_unique<UltrasoftPseudopotential>(*this);
33 }
34
35 [[nodiscard]] PseudopotentialType pseudopotential_type_enum() const override {
37 }
38
39 [[nodiscard]] bool has_augmentation_charges() const override {
40 return true;
41 }
42
43 // ---- Ultrasoft-specific fields ----
44
45 std::vector<std::vector<Real>> augmentation_function; // Q_ij(r) total
46 std::vector<std::vector<std::vector<Real>>>
49 std::vector<std::vector<Real>> augmentation_overlap_integrals; // ∫ Q_ij dr
51 std::vector<Real> inner_cutoff_radii;
52 std::vector<std::vector<std::vector<Real>>> augmentation_coefficients;
53};
54
55} // namespace q3
Base class for all pseudopotential types.
Definition init.hpp:35
Ultrasoft pseudopotential — extends base with augmentation data.
Definition init.hpp:27
bool has_augmentation_charges() const override
Definition init.hpp:39
~UltrasoftPseudopotential() override=default
PseudopotentialType pseudopotential_type_enum() const override
Definition init.hpp:35
std::vector< std::vector< std::vector< Real > > > augmentation_coefficients
Definition init.hpp:52
std::unique_ptr< Pseudopotential > clone() const override
Clone this pseudopotential (deep copy preserving derived type).
Definition init.hpp:31
std::vector< Real > inner_cutoff_radii
Definition init.hpp:51
std::vector< std::vector< Real > > augmentation_overlap_integrals
Definition init.hpp:49
std::vector< std::vector< std::vector< Real > > > augmentation_function_by_angular_momentum
Definition init.hpp:47
std::vector< std::vector< Real > > augmentation_function
Definition init.hpp:45
PseudopotentialType
Pseudopotential type classification.
Definition init.hpp:27