2#include "IO/InputBlock.hpp"
3#include "LinAlg/include.hpp"
4#include "qip/String.hpp"
12class CorrelationPotential;
68 case SplineType::Johnson:
70 case SplineType::Fischer:
72 case SplineType::Derevianko:
75 return "UnknownSplineType";
87 if (ci_compare(type,
"Johnson") || ci_compare(type,
"nd") ||
88 ci_compare(type,
"NotreDame") || ci_compare(type,
"Notre-Dame"))
89 return SplineType::Johnson;
90 if (ci_compare(type,
"Fischer") || ci_compare(type,
"Vanderbilt"))
91 return SplineType::Fischer;
92 if (ci_compare(type,
"Derevianko") || ci_compare(type,
"Reno") ||
94 return SplineType::Derevianko;
95 std::cout <<
"Warning: unknown SplineType '" << type
96 <<
"'. Defaulting to Derevianko.\n";
97 return SplineType::Derevianko;
103 Parameters(
const std::string &states, std::size_t n, std::size_t k,
double r0,
104 double reps,
double rmax,
const std::string &positron =
"",
106 bool in_orthogonalise =
false,
bool in_verbose =
true);
109 std::string states{};
110 std::size_t n{}, k{};
111 double r0{}, reps{}, rmax{};
112 std::string positron{};
114 bool orthogonalise{
false};
141 const bool correlationsQ =
false);
144double check(
const std::vector<DiracSpinor> &basis,
145 const std::vector<DiracSpinor> &orbs,
bool print_warning =
true);
163 const int kappa,
const std::size_t n_states,
const std::size_t k_spl,
164 const double r0_spl,
const double rmax_spl, std::shared_ptr<const Grid> rgrid,
165 const double alpha,
SplineType itype = SplineType::Derevianko);
170 const std::vector<DiracSpinor> &d_basis,
172 const bool correlationsQ =
false,
193 std::vector<DiracSpinor> *basis_positron,
194 const std::vector<DiracSpinor> &spl_basis,
195 const int kappa,
const int max_n,
int max_n_positron,
201std::vector<double>
sumrule_TKR(
const std::vector<DiracSpinor> &basis,
202 const std::vector<double> &r,
206std::vector<double>
sumrule_DG(
int nDG,
const std::vector<DiracSpinor> &basis,
207 const Grid &gr,
double alpha,
bool print);
211 const std::vector<DiracSpinor> &basis,
212 const Grid &gr,
bool print =
false);
216 std::printf(
"Completeness (radial sum rules):\n");
217 std::printf(
" <a|a> = sum_n <a|r|n><n|1/r|a> [= 1]\n");
218 std::printf(
" <a|r2|a> = sum_n <a|r|n><n|r|a> [= <a|r^2|a>_HF]\n");
219 std::printf(
"%-4s %7s [%7s] %6s | %10s [%10s] %6s\n",
"St",
"sum1",
"1",
220 "eps",
"sum_r2",
"<r2>_HF",
"eps");
Stores radial Dirac spinor: F_nk = (f, g)
Definition DiracSpinor.hpp:42
Non-uniform radial grid with Jacobian, suitable for atomic structure calculations.
Definition Grid.hpp:85
Row-major dense matrix with arithmetic and linear algebra support.
Definition Matrix.hpp:209
Owning 1D array; inherits from Matrix<T> with a single column.
Definition Vector.hpp:25
Stores Wavefunction (set of valence orbitals, grid, HF etc.)
Definition Wavefunction.hpp:37
In-out (timers, profilers, and read/write data)
Definition ChronoTimer.hpp:9
Many-body perturbation theory.
Definition CI_Integrals.hpp:10
Constructs spinor/orbital basis using B-splines.
Definition BSplineBasis.cpp:20
std::pair< double, double > r_completeness(const DiracSpinor &Fa, const std::vector< DiracSpinor > &basis, const Grid &gr, bool print)
Measures radial completeness of the basis for orbital Fv.
Definition BSplineBasis.cpp:503
std::vector< double > sumrule_DG(int nDG, const std::vector< DiracSpinor > &basis, const Grid &gr, double alpha, bool print)
Drake-Gordon sum rule (basis test); should =0 (must incl -ve energy states)
Definition BSplineBasis.cpp:454
std::pair< std::vector< DiracSpinor >, std::vector< DiracSpinor > > form_spline_basis(const int kappa, const std::size_t N_states, const std::size_t k_spl, const double r0_spl, const double rmax_spl, std::shared_ptr< const Grid > rgrid, const double alpha, SplineType type)
Forms the underlying spline basis (which is not kept)
Definition BSplineBasis.cpp:206
std::size_t n_spl
total number of splines (n_spl >= N, number of basis functions)
Definition BSplineBasis.hpp:152
std::pair< LinAlg::Matrix< double >, LinAlg::Matrix< double > > fill_Hamiltonian_matrix(const std::vector< DiracSpinor > &spl_basis, const std::vector< DiracSpinor > &d_basis, const Wavefunction &wf, const bool correlationsQ, SplineType type)
Calculates and returns the Hamiltonian matrix H_ij and overlap matrix S_ij.
Definition BSplineBasis.cpp:269
std::vector< double > sumrule_TKR(const std::vector< DiracSpinor > &basis, const std::vector< double > &r, bool print)
TKR sum rule (basis test); should =0 (must include -ve energy states)
Definition BSplineBasis.cpp:418
double check(const std::vector< DiracSpinor > &basis, const std::vector< DiracSpinor > &orbs, bool print_warning)
Compares basis to reference orbitals; checks normality, orthogonality, and energies.
Definition BSplineBasis.cpp:132
std::vector< DiracSpinor > form_basis(const Parameters ¶ms, const Wavefunction &wf, const bool correlationsQ)
Forms and returns the basis orbitals (expanded in terms of splines).
Definition BSplineBasis.cpp:51
double lambda_DKB
kinetic balance prefactor (1 for DKB, 0 for Johnson)
Definition BSplineBasis.hpp:156
std::size_t imax
one-past-last included spline index (exclusive upper bound)
Definition BSplineBasis.hpp:154
void add_FischerBoundary(LinAlg::Matrix< double > *pAij, const double alpha)
Applies Fischer/Vanderbilt rmax boundary: forces f(rmax)=g(rmax).
Definition BSplineBasis.cpp:345
SplineType
B-spline construction method: Derevianko/Reno (DKB), Johnson/NotreDame, or Fischer.
Definition BSplineBasis.hpp:63
void add_JohnsonBoundary(LinAlg::Matrix< double > *pAij, const int kappa, const double alpha)
Applies Johnson/Notre-Dame boundary conditions to the Hamiltonian matrix.
Definition BSplineBasis.cpp:326
SplineParams spline_params(SplineType type, int kappa, std::size_t N_states)
Returns SplineParams for the given type, kappa, and number of states.
Definition BSplineBasis.cpp:189
void expand_basis_orbitals(std::vector< DiracSpinor > *basis, std::vector< DiracSpinor > *basis_positron, const std::vector< DiracSpinor > &spl_basis, const int kappa, const int max_n, int max_n_positron, const LinAlg::Vector< double > &e_values, const LinAlg::Matrix< double > &e_vectors, const Wavefunction &wf)
Expands basis orbitals in terms of spline orbitals by diagonalising Hamiltonian.
Definition BSplineBasis.cpp:357
std::size_t imin
first included spline index
Definition BSplineBasis.hpp:150
std::string_view parseSplineType(SplineType type)
Returns the canonical name string for a SplineType.
Definition BSplineBasis.hpp:66
void r_completeness_header()
Prints the title and column headers for r_completeness output.
Definition BSplineBasis.hpp:215
Type-dependent spline grid parameters for a given kappa.
Definition BSplineBasis.hpp:148
bool ci_compare(std::string_view s1, std::string_view s2)
Case-insensitive string comparison; equivalent to tolower(s1) == tolower(s2).
Definition String.hpp:143
Input parameters for B-spline basis construction.
Definition BSplineBasis.hpp:101