32 #ifndef HEX_ECS_RADIAL_H 33 #define HEX_ECS_RADIAL_H 43 #include "hex-arrays.h" 44 #include "hex-symbandmatrix.h" 45 #include "hex-special.h" 56 #define EXPANSION_QUADRATURE_POINTS 20 181 int i,
int j,
int iknot
216 Real rmin, Real rmax,
234 Real rmin, Real rmax,
252 int begin_knot,
int end_knot,
253 Real rmin, Real rmax,
283 Complex
computeR (
int lambda,
int i,
int j,
int k,
int l)
const;
325 int k,
int l,
int iknotx, Real tx1, Real tx2,
327 int m,
int n,
int iknoty, Real ty1, Real ty2
355 Complex a,
const cArrayView src,
356 Complex b, cArrayView dst,
357 int x_row_limit = -1,
425 bool fast_bessel =
false 438 #define OneElectronMatrixAccessors(M) \ 439 SymBandMatrix<Complex> const & M () const { return M##_x_; } \ 440 SymBandMatrix<Complex> const & M##_x () const { return M##_x_; } \ 441 SymBandMatrix<Complex> const & M##_y () const { return M##_y_; } \ 442 Complex M##_x (std::size_t i, std::size_t j) const { return M##_x_(i,j); } \ 443 Complex M##_y (std::size_t i, std::size_t j) const { return M##_y_(i,j); } \ 451 #define OneElectronMatrixArrayAccessors(M) \ 452 SymBandMatrix<Complex> const & M (int L) const { return M##_x_[L]; } \ 453 SymBandMatrix<Complex> const & M##_x (int L) const { return M##_x_[L]; } \ 454 SymBandMatrix<Complex> const & M##_y (int L) const { return M##_y_[L]; } \ 455 Complex M##_x (int L, std::size_t i, std::size_t j) const { return M##_x_[L](i,j); } \ 456 Complex M##_y (int L, std::size_t i, std::size_t j) const { return M##_y_[L](i,j); } \ 462 #define OneElectronPartialMatrixAccessors(M) \ 463 cArrayView M##_x (int L = -1) const \ 465 if (L < 0) return M##_x_; \ 466 std::size_t mi_size = bspline_x_.Nspline() * (2 * bspline_x_.order() + 1) * (bspline_x_.order() + 1); \ 467 return cArrayView (M##_x_, L * mi_size, mi_size); \ 469 cArrayView M##_y (int L = -1) const \ 471 if (L < 0) return M##_y_; \ 472 std::size_t mi_size = bspline_y_.Nspline() * (2 * bspline_y_.order() + 1) * (bspline_y_.order() + 1); \ 473 return cArrayView (M##_y_, L * mi_size, mi_size); \ 481 BlockSymBandMatrix<Complex>
const & R_tr_dia (
unsigned i)
const {
return R_tr_dia_[i]; }
498 Real rxmin_, rymin_, rxmax_, rymax_;
505 SymBandMatrix<Complex> D_x_, S_x_, Mm1_x_, Mm2_x_;
506 SymBandMatrix<Complex> D_y_, S_y_, Mm1_y_, Mm2_y_;
509 std::vector<SymBandMatrix<Complex>> Mtr_L_x_, Mtr_mLm1_x_;
510 std::vector<SymBandMatrix<Complex>> Mtr_L_y_, Mtr_mLm1_y_;
513 cArray Mitr_L_x_, Mitr_mLm1_x_;
514 cArray Mitr_L_y_, Mitr_mLm1_y_;
517 std::vector<BlockSymBandMatrix<Complex>> R_tr_dia_;
518 std::vector<CsrMatrix<LU_int_t,Complex>> R_coupled_;
527 #endif // HEX_ECS_RADIAL_H Complex computeM_iknot(Bspline const &bspline, GaussLegendre const &g, int a, int i, int j, int iknot, Real rmin, Real rmax, Real scale) const
Partial integral moment.
Definition: radial.cpp:409
Class that calculates and manages the radial integrals for given B-spline bases.
Definition: radial.h:89
GaussLegendre const & gaussleg() const
Definition: radial.h:434
Complex computeOverlapMatrixElement(Bspline const &bspline, GaussLegendre const &g, int i, int j, CCFunction func) const
Definition: radial.cpp:284
cArray computeMi(Bspline const &bspline, GaussLegendre const &g, int a, Real rmin, Real rmax) const
Partial integral moments.
Definition: radial.cpp:86
CsrMatrix< LU_int_t, Complex > const & R_coupled(unsigned i) const
Definition: radial.h:482
static cArray overlapP(Bspline const &bspline, GaussLegendre const &g, Real Z, int n, int l)
Compute P-overlaps.
Definition: radial.cpp:962
void setupTwoElectronIntegrals(Parallel const &par, CommandLine const &cmd)
Calculate the two-electron integral matrix.
Definition: radial.cpp:628
Complex computeD(Bspline const &bspline, GaussLegendre const &g, int i, int j) const
Derivative overlap.
Definition: radial.cpp:226
B-spline environment.
Definition: bspline.h:57
cArray overlap(Bspline const &bspline, GaussLegendre const &g, CCFunction funct) const
Compute B-spline overlaps of arbitrary one-dimensional function.
Definition: radial.cpp:840
#define OneElectronPartialMatrixAccessors(M)
Gauss-Legendre quadrature.
Definition: gauss.h:79
std::function< Complex(Complex)> CCFunction
Definition: radial.h:61
Bspline const & bspline_y() const
Definition: radial.h:431
Complex computeOverlapMatrixElement_iknot(Bspline const &bspline, GaussLegendre const &g, int i, int j, CCFunction func, int iknot) const
Definition: radial.cpp:247
Complex computeD_iknot(Bspline const &bspline, GaussLegendre const &g, int i, int j, int iknot) const
Partial derivative overlap.
Definition: radial.cpp:187
SymBandMatrix< Complex > computeOverlapMatrix(Bspline const &bspline, CCFunction func) const
Definition: radial.cpp:305
Complex computeM(Bspline const &bspline, GaussLegendre const &g, int a, int i, int j, Real rmin, Real rmax, bool scale=false) const
Integral moments.
Definition: radial.cpp:449
Command line parameters.
Definition: io.h:57
void setupOneElectronIntegrals(bool sharedscratch=false, bool iammaster=true)
Calculate one-electron integral matrices.
Definition: radial.cpp:551
GaussLegendre const & gaussleg_x() const
Definition: radial.h:435
int maxlambda() const
Maximal multipole moment.
Definition: radial.h:145
Complex computeRtri(int lambda, Bspline const &xspline, GaussLegendre const &xg, int k, int l, int iknotx, Real tx1, Real tx2, Bspline const &yspline, GaussLegendre const &yg, int m, int n, int iknoty, Real ty1, Real ty2) const
Triangular R-integral.
Definition: slater.cpp:44
cArray overlapj(Bspline const &bspline, GaussLegendre const &g, int maxell, const rArrayView vk, bool fast_bessel=false) const
Compute j-overlaps.
Definition: radial.cpp:1021
std::function< Complex(Complex, Complex)> C2CFunction
Definition: radial.h:64
void coupledR(int lambda)
Definition: slater.cpp:111
#define OneElectronMatrixArrayAccessors(M)
Bspline const & bspline_x() const
Definition: radial.h:430
MPI info.
Definition: parallel.h:50
Bspline const & bspline() const
Definition: radial.h:429
RadialIntegrals(Bspline const &bspline_x, Bspline const &bspline_y, int Nlambdas)
Constructor.
Definition: radial.cpp:56
void diagonalR(int lambda)
void apply_R_matrix(unsigned int lambda, Complex a, const cArrayView src, Complex b, cArrayView dst, int x_row_limit=-1, int y_row_limit=-1) const
Multiply vector by matrix of two-electron integrals.
Definition: radial.cpp:768
void verbose(bool v)
Verbosity control.
Definition: radial.h:137
OneElectronMatrixAccessors(D) OneElectronMatrixAccessors(S) OneElectronMatrixAccessors(Mm1) OneElectronMatrixAccessors(Mm2) OneElectronMatrixArrayAccessors(Mtr_L) OneElectronMatrixArrayAccessors(Mtr_mLm1) OneElectronPartialMatrixAccessors(Mitr_L) OneElectronPartialMatrixAccessors(Mitr_mLm1) BlockSymBandMatrix< Complex > const &R_tr_dia(unsigned i) const
Definition: radial.h:446
SymBandMatrix< Complex > calc_R_tr_dia_block(unsigned lambda, int i, int k) const
Calculate particular sub-matrix of the radial integrals matrix.
Definition: radial.cpp:750
Complex computeR(int lambda, int i, int j, int k, int l) const
Two-electron integral for multipole .
Definition: slater.cpp:213
GaussLegendre const & gaussleg_y() const
Definition: radial.h:436