ABACUS develop
Atomic-orbital Based Ab-initio Computation at UStc
Loading...
Searching...
No Matches
Matrix_Orbs22.h
Go to the documentation of this file.
1//=======================
2// AUTHOR : Peize Lin
3// DATE : 2023-02-23
4//=======================
5
6#ifndef MATRIX_ORB22_H
7#define MATRIX_ORB22_H
8
10#include "source_base/vector3.h"
15
16#include <RI/global/Tensor.h>
17#include <map>
18#include <set>
19#include <vector>
20
22{
23 public:
24 // mode:
25 // 1: <lcaos lcaos|lcaos lcaos>
26 void init(const int mode,
27 const UnitCell& ucell,
28 const LCAO_Orbitals& orb,
29 const double kmesh_times, // extend Kcut, keep dK
30 const double rmax,
31 int& Lmax); // extend Rcut, keep dR
32
33 void init_radial(const std::vector<std::vector<std::vector<Numerical_Orbital_Lm>>>& orb_A1,
34 const std::vector<std::vector<std::vector<Numerical_Orbital_Lm>>>& orb_A2,
35 const std::vector<std::vector<std::vector<Numerical_Orbital_Lm>>>& orb_B1,
36 const std::vector<std::vector<std::vector<Numerical_Orbital_Lm>>>& ,
37 const ORB_gaunt_table& MGT);
38 void init_radial(const LCAO_Orbitals& orb_A1,
39 const LCAO_Orbitals& orb_A2,
40 const LCAO_Orbitals& orb_B1,
41 const LCAO_Orbitals& orb_B2,
42 const ORB_gaunt_table& MGT);
43
44 void init_radial_table();
45 void init_radial_table(const std::map<size_t, std::map<size_t, std::set<double>>>& Rs); // unit: ucell.lat0
46
47 enum class Matrix_Order
48 {
73 };
74
75 template <typename Tdata>
76 RI::Tensor<Tdata> cal_overlap_matrix(const size_t TA,
77 const size_t TB,
78 const ModuleBase::Vector3<double>& tauA, // unit: ucell.lat0
79 const ModuleBase::Vector3<double>& tauB, // unit: ucell.lat0
84 const Matrix_Order& matrix_order) const;
85 template <typename Tdata>
86 std::array<RI::Tensor<Tdata>, 3> cal_grad_overlap_matrix(
87 const size_t TA,
88 const size_t TB,
89 const ModuleBase::Vector3<double>& tauA, // unit: ucell.lat0
90 const ModuleBase::Vector3<double>& tauB, // unit: ucell.lat0
95 const Matrix_Order& matrix_order) const;
96
97 template <typename Tdata>
98 std::map<size_t, std::map<size_t, std::map<size_t, std::map<size_t, RI::Tensor<Tdata>>>>> cal_overlap_matrix_all(
99 const UnitCell &ucell,
103 const ModuleBase::Element_Basis_Index::IndexLNM& index_B2) const;
104
105 private:
107 const double lcao_dr_ = 0.01;
108 double* lat0 = nullptr; // restore ucell.lat0
109 std::map<
110 size_t, // TA
111 std::map<size_t, // TB
112 std::map<int, // LA1
113 std::map<size_t, // NA1
114 std::map<int, // LA2
115 std::map<size_t, // NA2
116 std::map<int, // LB1
117 std::map<size_t, // NB1
118 std::map<int, // LB2
119 std::map<size_t, // NB2
120 Center2_Orb::Orb22>>>>>>>>>>
122 // this->center2_orb22_s[TA][TB][LA1][NA1][LA2][NA2][LB1][NB1][LB2][NB2]
123};
124
125#include "Matrix_Orbs22.hpp"
126
127#endif
Definition center2_orb-orb22.h:20
Definition ORB_read.h:19
Definition Matrix_Orbs22.h:22
void init(const int mode, const UnitCell &ucell, const LCAO_Orbitals &orb, const double kmesh_times, const double rmax, int &Lmax)
Definition Matrix_Orbs22.cpp:12
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_B1, const ModuleBase::Element_Basis_Index::IndexLNM &index_B2, const Matrix_Order &matrix_order) const
Definition Matrix_Orbs22.hpp:141
void init_radial_table()
Definition Matrix_Orbs22.cpp:122
ModuleBase::Sph_Bessel_Recursive::D2 * psb_
Definition Matrix_Orbs22.h:106
const double lcao_dr_
Definition Matrix_Orbs22.h:107
std::map< size_t, std::map< size_t, std::map< size_t, std::map< size_t, 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_B1, const ModuleBase::Element_Basis_Index::IndexLNM &index_B2) const
Definition Matrix_Orbs22.hpp:278
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, std::map< int, std::map< size_t, Center2_Orb::Orb22 > > > > > > > > > > center2_orb22_s
Definition Matrix_Orbs22.h:121
Matrix_Order
Definition Matrix_Orbs22.h:48
void init_radial(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_B1, const std::vector< std::vector< std::vector< Numerical_Orbital_Lm > > > &, const ORB_gaunt_table &MGT)
Definition Matrix_Orbs22.cpp:60
double * lat0
Definition Matrix_Orbs22.h:108
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_B1, const ModuleBase::Element_Basis_Index::IndexLNM &index_B2, const Matrix_Order &matrix_order) const
Definition Matrix_Orbs22.hpp:14
std::vector< Index_T > IndexLNM
Definition element_basis_index.h:41
Definition sph_bessel_recursive.h:49
3 elements vector
Definition vector3.h:22
Definition ORB_gaunt_table.h:9
Definition unitcell.h:16