2#include "IO/InputBlock.hpp"
3#include "LinAlg/include.hpp"
4#include "qip/String.hpp"
13class CorrelationPotential;
98enum class SplineType { Derevianko, Shabaev, Johnson, Fischer, Hybrid };
103 case SplineType::Johnson:
105 case SplineType::Fischer:
107 case SplineType::Hybrid:
109 case SplineType::Shabaev:
111 case SplineType::Derevianko:
114 return "UnknownSplineType";
135 if (ci_compare(type,
"Johnson") || ci_compare(type,
"nd") ||
136 ci_compare(type,
"NotreDame") || ci_compare(type,
"Notre-Dame"))
137 return SplineType::Johnson;
138 if (ci_compare(type,
"Fischer"))
139 return SplineType::Fischer;
140 if (ci_compare(type,
"Hybrid"))
141 return SplineType::Hybrid;
142 if (ci_compare(type,
"Shabaev"))
143 return SplineType::Shabaev;
144 if (ci_compare(type,
"Derevianko") || ci_compare(type,
"Reno") ||
145 ci_compare(type,
"DKB") || type.empty())
146 return SplineType::Derevianko;
147 std::cout <<
"Warning: unknown SplineType '" << type
148 <<
"'. Defaulting to Derevianko.\n";
149 return SplineType::Derevianko;
175 std::vector<double>
r0,
double rmax,
178 bool in_orthogonalise =
false,
bool in_verbose =
true);
192 std::size_t
n{}, k{};
194 std::vector<double>
r0{};
248std::vector<DiracSpinor>
form_basis(
const Parameters ¶ms,
250 const bool correlationsQ =
false);
270double check(
const std::vector<DiracSpinor> &basis,
271 const std::vector<DiracSpinor> &orbs,
bool print_warning =
true);
309 double f_f, g_f, df_f, dg_f;
311 double f_g, g_g, df_g, dg_g;
331 int kappa,
double r,
double kb);
379 const std::size_t k_spl,
const double r0_spl,
380 const double rmax_spl,
381 std::shared_ptr<const Grid> rgrid,
406 const bool correlationsQ =
false,
439 const double alpha,
const std::vector<double> &f_rmax,
440 const std::vector<double> &g_rmax);
467 const std::vector<double> &f_rmax,
468 const std::vector<double> &g_rmax);
498 std::vector<DiracSpinor> *basis_positron,
499 const std::vector<DiracSpinor> &spl_basis,
500 const int kappa,
const int max_n,
int max_n_positron,
525std::vector<double>
sumrule_TKR(
const std::vector<DiracSpinor> &basis,
526 const std::vector<double> &r,
553std::vector<double>
sumrule_DG(
int nDG,
const std::vector<DiracSpinor> &basis,
554 const Grid &gr,
double alpha,
bool print);
575 const std::vector<DiracSpinor> &basis,
576 const Grid &gr,
bool print =
false);
580 std::printf(
"Completeness (radial sum rules):\n");
581 std::printf(
" <a|a> = sum_n <a|r|n><n|1/r|a> [= 1]\n");
582 std::printf(
" <a|r2|a> = sum_n <a|r|n><n|r|a> [= <a|r^2|a>_HF]\n");
583 std::printf(
"%-4s %7s [%7s] %6s | %10s [%10s] %6s\n",
"St",
"sum1",
"1",
584 "eps",
"sum_r2",
"<r2>_HF",
"eps");
Stores radial Dirac spinor: F_nk = (f, g)
Definition DiracSpinor.hpp:55
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:208
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:48
In-out (timers, profilers, and read/write data)
Definition ChronoTimer.hpp:9
Many-body perturbation theory.
Definition MatrixElements.hpp:12
Constructs spinor/orbital basis using B-splines.
Definition BSplineBasis.cpp:21
std::vector< DiracSpinor > d_basis
Radial derivatives (d/dr of both f and g) of the spline spinors.
Definition BSplineBasis.hpp:338
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:639
std::vector< double > sumrule_DG(int nDG, const std::vector< DiracSpinor > &basis, const Grid &gr, double alpha, bool print)
Drake-Goldman sum rules (basis test); should be zero.
Definition BSplineBasis.cpp:586
SplineSpinorValues spline_spinor_values(double B, double dB, double d2B, int kappa, double r, double kb)
Values at r of the f-like and g-like spline spinors built from B_i.
Definition BSplineBasis.cpp:274
double f_g
g-like spinor (g = B_i): f, g, and their radial derivatives
Definition BSplineBasis.hpp:311
void add_JohnsonBoundary(LinAlg::Matrix< double > *pAij, const int kappa, const double alpha, const std::vector< double > &f_rmax, const std::vector< double > &g_rmax)
Applies Johnson/Notre-Dame boundary conditions to Hamiltonian matrix.
Definition BSplineBasis.cpp:426
std::vector< double > f_rmax
f and g of each spline spinor exactly at rmax (for boundary terms)
Definition BSplineBasis.hpp:340
std::vector< DiracSpinor > basis
Spline spinors on the radial grid: f-like, then g-like.
Definition BSplineBasis.hpp:336
void add_rmaxBoundary(LinAlg::Matrix< double > *pAij, const double alpha, const std::vector< double > &f_rmax, const std::vector< double > &g_rmax)
Applies the rmax (MIT bag) boundary term only: f(R) = -g(R).
Definition BSplineBasis.cpp:441
std::vector< double > sumrule_TKR(const std::vector< DiracSpinor > &basis, const std::vector< double > &r, bool print)
TKR sum rule (basis test); should be zero (needs -ve energy states).
Definition BSplineBasis.cpp:550
double check(const std::vector< DiracSpinor > &basis, const std::vector< DiracSpinor > &orbs, bool print_warning)
Checks basis against orbitals: normality, orthogonality, and energies.
Definition BSplineBasis.cpp:190
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:87
std::pair< LinAlg::Matrix< double >, LinAlg::Matrix< double > > fill_Hamiltonian_matrix(const SplineSpinors &splines, const Wavefunction &wf, const bool correlationsQ, SplineType type)
Calculates and returns the Hamiltonian matrix H_ij and overlap S_ij.
Definition BSplineBasis.cpp:368
SplineType
B-spline construction method (see details).
Definition BSplineBasis.hpp:98
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:247
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.
Definition BSplineBasis.cpp:467
SplineSpinors 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:292
std::vector< double > default_r0(SplineType type)
Default first internal knot, r0, for each l, for the given type.
Definition BSplineBasis.cpp:72
double f_f
f-like spinor (f = B_i): f, g, and their radial derivatives
Definition BSplineBasis.hpp:309
std::string_view parseSplineType(SplineType type)
Returns the canonical name string for a SplineType.
Definition BSplineBasis.hpp:101
void r_completeness_header()
Prints the title and column headers for r_completeness output.
Definition BSplineBasis.hpp:579
Values at r of the two spline spinors built from one B-spline B_i.
Definition BSplineBasis.hpp:307
The spline spinors for one kappa (see form_spline_basis)
Definition BSplineBasis.hpp:334
bool ci_compare(std::string_view s1, std::string_view s2)
Case-insensitive string comparison; equivalent to tolower(s1) == tolower(s2).
Definition String.hpp:144
Input parameters for B-spline basis construction (see form_basis).
Definition BSplineBasis.hpp:170
std::string states
Electron states to keep, e.g., "25spd10f".
Definition BSplineBasis.hpp:190
Parameters()
Default: all parameters empty/zero.
Definition BSplineBasis.hpp:172
bool verbose
Print construction details to screen.
Definition BSplineBasis.hpp:204
std::size_t n
Number of splines (n), and order of the B-splines (k)
Definition BSplineBasis.hpp:192
double rmax
Last knot (rmax)
Definition BSplineBasis.hpp:196
std::vector< double > r0
First internal knot for each l (last entry for higher l); empty: default.
Definition BSplineBasis.hpp:194
bool orthogonalise
Force orthogonal to core (spectrum: to valence); done by Wavefunction.
Definition BSplineBasis.hpp:202
SplineType type
B-spline construction method.
Definition BSplineBasis.hpp:200
std::string positron
Negative-energy states to keep, e.g., "9spdf" (empty: none)
Definition BSplineBasis.hpp:198
Type-dependent spline selection for a given kappa (see spline_params).
Definition BSplineBasis.hpp:274
std::size_t imin_f
f-like splines kept: indices [imin_f, imax_f)
Definition BSplineBasis.hpp:278
std::size_t num_f() const
number of f-like splines kept
Definition BSplineBasis.hpp:284
std::size_t n_spl
total number of underlying B-splines
Definition BSplineBasis.hpp:276
double lambda_DKB
kinetic balance prefactor (1 for DKB types, 0 for Johnson, Fischer)
Definition BSplineBasis.hpp:282
std::size_t num_g() const
number of g-like splines kept
Definition BSplineBasis.hpp:286
std::size_t imin_g
g-like splines kept: indices [imin_g, imax_g)
Definition BSplineBasis.hpp:280