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 // mode:
24 // 1: <jYs lcaos|lcaos> <abfs lcaos|lcaos>
25 void init(const int mode,
26 const UnitCell& ucell,
27 const LCAO_Orbitals& orb,
28 const double kmesh_times, // extend Kcut, keep dK
29 const double rmax,
30 int& Lmax); // extend Rcut, keep dR
31
32 void init_radial(const std::vector<std::vector<std::vector<Numerical_Orbital_Lm>>>& orb_A1,
33 const std::vector<std::vector<std::vector<Numerical_Orbital_Lm>>>& orb_A2,
34 const std::vector<std::vector<std::vector<Numerical_Orbital_Lm>>>& orb_B,
35 const ORB_gaunt_table& MGT);
36 void init_radial(const std::vector<std::vector<std::vector<Numerical_Orbital_Lm>>>& orb_A1,
37 const LCAO_Orbitals& orb_A2,
38 const LCAO_Orbitals& orb_B,
39 const ORB_gaunt_table& MGT);
40
41 void init_radial_table();
42 void init_radial_table(const std::map<size_t, std::map<size_t, std::set<double>>>& Rs); // unit: ucell.lat0
43
44 enum class Matrix_Order
45 {
46 A1A2B,
47 A1BA2,
48 A2A1B,
49 A2BA1,
50 BA1A2,
51 BA2A1
52 };
53
54 template <typename Tdata>
55 RI::Tensor<Tdata> cal_overlap_matrix(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 template <typename Tdata>
64 std::array<RI::Tensor<Tdata>, 3> cal_grad_overlap_matrix(
65 const size_t TA,
66 const size_t TB,
67 const ModuleBase::Vector3<double>& tauA, // unit: ucell.lat0
68 const ModuleBase::Vector3<double>& tauB, // unit: ucell.lat0
72 const Matrix_Order& matrix_order) const;
73
74 template <typename Tdata>
75 std::map<size_t, std::map<size_t, std::map<size_t, std::map<size_t, std::vector<RI::Tensor<Tdata>>>>>>
80
81 private:
83 const double lcao_dr_ = 0.01;
84 double* lat0 = nullptr; // restore ucell.lat0
85 std::map<size_t, // TA
86 std::map<size_t, // TB
87 std::map<int, // LA1
88 std::map<size_t, // NA1
89 std::map<int, // LA2
90 std::map<size_t, // NA2
91 std::map<int, // LB
92 std::map<size_t, // NB
93 Center2_Orb::Orb21>>>>>>>>
95 // this->center2_orb21_s[TA][TB][LA1][NA1][LA2][NA2][LB][NB]
96};
97
98#include "Matrix_Orbs21.hpp"
99
100#endif
Definition center2_orb-orb21.h:20
Definition ORB_read.h:19
Definition Matrix_Orbs21.h:21
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_B, const ORB_gaunt_table &MGT)
Definition Matrix_Orbs21.cpp:60
const double lcao_dr_
Definition Matrix_Orbs21.h:83
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:94
double * lat0
Definition Matrix_Orbs21.h:84
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:144
void init(const int mode, const UnitCell &ucell, const LCAO_Orbitals &orb, const double kmesh_times, const double rmax, int &Lmax)
Definition Matrix_Orbs21.cpp:12
ModuleBase::Sph_Bessel_Recursive::D2 * psb_
Definition Matrix_Orbs21.h:82
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:45
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