ABACUS develop
Atomic-orbital Based Ab-initio Computation at UStc
Loading...
Searching...
No Matches
Matrix_Orbs21.h
Go to the documentation of this file.
1//=======================
2// AUTHOR : Peize Lin
3// DATE : 2022-08-17
4//=======================
5
6#ifndef MATRIX_ORB21_H
7#define MATRIX_ORB21_H
8
10#include "source_base/vector3.h"
15#include <RI/global/Tensor.h>
16#include <map>
17#include <set>
18#include <vector>
19
21{
22 public:
23 void init(
24 const std::vector<std::vector<std::vector<Numerical_Orbital_Lm>>>& orb_A1,
25 const std::vector<std::vector<std::vector<Numerical_Orbital_Lm>>>& orb_A2,
26 const std::vector<std::vector<std::vector<Numerical_Orbital_Lm>>>& orb_B,
27 const UnitCell& ucell,
28 const LCAO_Orbitals& orb,
29 const double kmesh_times); // extend Kcut, keep dK
30
31 void init_radial_table();
32 void init_radial_table(const std::map<size_t, std::map<size_t, std::set<double>>>& Rs); // unit: ucell.lat0
33
34 enum class Matrix_Order
35 {
36 A1A2B,
37 A1BA2,
38 A2A1B,
39 A2BA1,
40 BA1A2,
41 BA2A1
42 };
43
44 template <typename Tdata>
45 RI::Tensor<Tdata> cal_overlap_matrix(const size_t TA,
46 const size_t TB,
47 const ModuleBase::Vector3<double>& tauA, // unit: ucell.lat0
48 const ModuleBase::Vector3<double>& tauB, // unit: ucell.lat0
52 const Matrix_Order& matrix_order) const;
53 template <typename Tdata>
54 std::array<RI::Tensor<Tdata>, 3> cal_grad_overlap_matrix(
55 const size_t TA,
56 const size_t TB,
57 const ModuleBase::Vector3<double>& tauA, // unit: ucell.lat0
58 const ModuleBase::Vector3<double>& tauB, // unit: ucell.lat0
62 const Matrix_Order& matrix_order) const;
63
64 template <typename Tdata>
65 std::map<size_t, std::map<size_t, std::map<size_t, std::map<size_t, std::vector<RI::Tensor<Tdata>>>>>>
70
71 std::shared_ptr<ORB_gaunt_table> MGT;
72
73 private:
75 const double lcao_dr_ = 0.01;
76 double* lat0 = nullptr; // restore ucell.lat0
77 std::map<size_t, // TA
78 std::map<size_t, // TB
79 std::map<int, // LA1
80 std::map<size_t, // NA1
81 std::map<int, // LA2
82 std::map<size_t, // NA2
83 std::map<int, // LB
84 std::map<size_t, // NB
85 Center2_Orb::Orb21>>>>>>>>
87 // this->center2_orb21_s[TA][TB][LA1][NA1][LA2][NA2][LB][NB]
88};
89
90#include "Matrix_Orbs21.hpp"
91
92#endif
Definition center2_orb-orb21.h:20
Definition ORB_read.h:19
Definition Matrix_Orbs21.h:21
const double lcao_dr_
Definition Matrix_Orbs21.h:75
void init(const std::vector< std::vector< std::vector< Numerical_Orbital_Lm > > > &orb_A1, const std::vector< std::vector< std::vector< Numerical_Orbital_Lm > > > &orb_A2, const std::vector< std::vector< std::vector< Numerical_Orbital_Lm > > > &orb_B, const UnitCell &ucell, const LCAO_Orbitals &orb, const double kmesh_times)
Definition Matrix_Orbs21.cpp:13
std::map< size_t, std::map< size_t, std::map< int, std::map< size_t, std::map< int, std::map< size_t, std::map< int, std::map< size_t, Center2_Orb::Orb21 > > > > > > > > center2_orb21_s
Definition Matrix_Orbs21.h:86
double * lat0
Definition Matrix_Orbs21.h:76
std::shared_ptr< ORB_gaunt_table > MGT
Definition Matrix_Orbs21.h:71
std::array< RI::Tensor< Tdata >, 3 > cal_grad_overlap_matrix(const size_t TA, const size_t TB, const ModuleBase::Vector3< double > &tauA, const ModuleBase::Vector3< double > &tauB, const ModuleBase::Element_Basis_Index::IndexLNM &index_A1, const ModuleBase::Element_Basis_Index::IndexLNM &index_A2, const ModuleBase::Element_Basis_Index::IndexLNM &index_B, const Matrix_Order &matrix_order) const
Definition Matrix_Orbs21.hpp:91
void init_radial_table()
Definition Matrix_Orbs21.cpp:120
ModuleBase::Sph_Bessel_Recursive::D2 * psb_
Definition Matrix_Orbs21.h:74
std::map< size_t, std::map< size_t, std::map< size_t, std::map< size_t, std::vector< RI::Tensor< Tdata > > > > > > cal_overlap_matrix_all(const UnitCell &ucell, const ModuleBase::Element_Basis_Index::IndexLNM &index_A1, const ModuleBase::Element_Basis_Index::IndexLNM &index_A2, const ModuleBase::Element_Basis_Index::IndexLNM &index_B) const
Definition Matrix_Orbs21.hpp:174
RI::Tensor< Tdata > cal_overlap_matrix(const size_t TA, const size_t TB, const ModuleBase::Vector3< double > &tauA, const ModuleBase::Vector3< double > &tauB, const ModuleBase::Element_Basis_Index::IndexLNM &index_A1, const ModuleBase::Element_Basis_Index::IndexLNM &index_A2, const ModuleBase::Element_Basis_Index::IndexLNM &index_B, const Matrix_Order &matrix_order) const
Definition Matrix_Orbs21.hpp:14
Matrix_Order
Definition Matrix_Orbs21.h:35
Definition sph_bessel_recursive.h:49
3 elements vector
Definition vector3.h:22
Definition unitcell.h:17
std::vector< Index_T > IndexLNM
Definition element_basis_index.h:42