ABACUS develop
Atomic-orbital Based Ab-initio Computation at UStc
Loading...
Searching...
No Matches
LRI_CV.h
Go to the documentation of this file.
1//=======================
2// AUTHOR : Peize Lin
3// DATE : 2022-08-17
4//=======================
5
6#ifndef LRI_CV_H
7#define LRI_CV_H
8
9#include "Matrix_Orbs11.h"
10#include "Matrix_Orbs21.h"
14
15#include <RI/global/Tensor.h>
16#include <RI/global/Global_Func-2.h>
17
18#include <vector>
19#include <map>
20#include <functional>
21#include <pthread.h>
22
23template<typename Tdata>
24class LRI_CV
25{
26private:
27 using TA = int;
28 using TC = std::array<int,3>;
29 using TAC = std::pair<TA,TC>;
30 using Tdata_real = RI::Global_Func::To_Real_t<Tdata>;
31
32public:
33 LRI_CV();
34 ~LRI_CV();
35
36 void set_orbitals(
37 const UnitCell &ucell,
38 const LCAO_Orbitals& orb,
39 const std::vector<std::vector<std::vector<Numerical_Orbital_Lm>>> &lcaos_in,
40 const std::vector<std::vector<std::vector<Numerical_Orbital_Lm>>> &abfs_in,
41 const std::vector<std::vector<std::vector<Numerical_Orbital_Lm>>> &abfs_ccp_in,
42 const double &kmesh_times,
43 std::shared_ptr<ORB_gaunt_table> MGT,
44 const bool& init_C);
45 inline std::map<TA,std::map<TAC,RI::Tensor<Tdata>>>
46 cal_Vs(
47 const UnitCell &ucell,
48 const std::vector<TA> &list_A0,
49 const std::vector<TAC> &list_A1,
50 const std::map<std::string,bool> &flags); // "writable_Vws"
51 inline std::map<TA, std::map<TAC, std::array<RI::Tensor<Tdata>, 3>>>
52 cal_dVs(
53 const UnitCell &ucell,
54 const std::vector<TA> &list_A0,
55 const std::vector<TAC> &list_A1,
56 const std::map<std::string,bool> &flags); // "writable_dVws"
57 std::pair<std::map<TA, std::map<TAC, RI::Tensor<Tdata>>>,
58 std::map<TA, std::map<TAC, std::array<RI::Tensor<Tdata>, 3>>>>
60 const UnitCell &ucell,
61 const std::vector<TA> &list_A0,
62 const std::vector<TAC> &list_A1,
63 const std::map<std::string,bool> &flags); // "cal_dC", "writable_Cws", "writable_dCws", "writable_Vws", "writable_dVws"
64
65 size_t get_index_abfs_size(const size_t &iat){return this->index_abfs[iat].count_size; }
66
67private:
68 std::vector<std::vector<std::vector<Numerical_Orbital_Lm>>> lcaos;
69 std::vector<std::vector<std::vector<Numerical_Orbital_Lm>>> abfs;
70 std::vector<std::vector<std::vector<Numerical_Orbital_Lm>>> abfs_ccp;
73 std::vector<double> lcaos_rcut;
74 std::vector<double> abfs_ccp_rcut;
75
76public:
77 std::map<int,std::map<int,std::map<Abfs::Vector3_Order<double>,RI::Tensor<Tdata>>>> Vws;
78 std::map<int,std::map<int,std::map<Abfs::Vector3_Order<double>,RI::Tensor<Tdata>>>> Cws;
79 std::map<int,std::map<int,std::map<Abfs::Vector3_Order<double>,std::array<RI::Tensor<Tdata>,3>>>> dVws;
80 std::map<int,std::map<int,std::map<Abfs::Vector3_Order<double>,std::array<RI::Tensor<Tdata>,3>>>> dCws;
81private:
82 pthread_rwlock_t rwlock_Vw;
83 pthread_rwlock_t rwlock_Cw;
84 pthread_rwlock_t rwlock_dVw;
85 pthread_rwlock_t rwlock_dCw;
86
89
90 template<typename Tresult>
91 using T_func_DPcal_data = std::function<Tresult(
92 const int it0,
93 const int it1,
95 const std::map<std::string,bool> &flags)>;
96 using T_func_cal_Rcut = std::function<double(const int it0, const int it1)>;
97 template<typename Tresult>
98 std::map<TA,std::map<TAC,Tresult>>
100 const UnitCell &ucell,
101 const std::vector<TA>& list_A0,
102 const std::vector<TAC>& list_A1,
103 const std::map<std::string, bool>& flags,
104 const T_func_cal_Rcut& func_cal_Rcut,
105 const T_func_DPcal_data<Tresult>& func_DPcal_data);
106
107 inline double cal_V_Rcut(const int it0, const int it1);
108 inline double cal_C_Rcut(const int it0, const int it1);
109
110 inline RI::Tensor<Tdata>
111 DPcal_V(
112 const int it0,
113 const int it1,
115 const std::map<std::string,bool> &flags); // "writable_Vws"
116 inline std::array<RI::Tensor<Tdata>,3>
117 DPcal_dV(
118 const int it0,
119 const int it1,
121 const std::map<std::string,bool> &flags); // "writable_dVws"
122 std::pair<RI::Tensor<Tdata>, std::array<RI::Tensor<Tdata>,3>>
124 const int it0,
125 const int it1,
127 const std::map<std::string,bool> &flags); // "cal_dC", "writable_Cws", "writable_dCws", "writable_Vws", "writable_dVws"
128
129 template<typename To11, typename Tfunc>
130 To11 DPcal_o11(
131 const int it0,
132 const int it1,
134 const bool &flag_writable_o11ws,
135 pthread_rwlock_t &rwlock_o11,
136 std::map<int,std::map<int,std::map<Abfs::Vector3_Order<double>,To11>>> &o11ws,
137 const Tfunc &func_cal_o11);
138};
139
140#include "LRI_CV.hpp"
141
142#endif
Definition abfs-vector3_order.h:16
Definition ORB_read.h:19
Definition LRI_CV.h:25
RI::Global_Func::To_Real_t< Tdata > Tdata_real
Definition LRI_CV.h:30
std::array< RI::Tensor< Tdata >, 3 > DPcal_dV(const int it0, const int it1, const Abfs::Vector3_Order< double > &R, const std::map< std::string, bool > &flags)
Definition LRI_CV.hpp:294
std::pair< RI::Tensor< Tdata >, std::array< RI::Tensor< Tdata >, 3 > > DPcal_C_dC(const int it0, const int it1, const Abfs::Vector3_Order< double > &R, const std::map< std::string, bool > &flags)
Definition LRI_CV.hpp:324
RI::Tensor< Tdata > DPcal_V(const int it0, const int it1, const Abfs::Vector3_Order< double > &R, const std::map< std::string, bool > &flags)
Definition LRI_CV.hpp:279
std::vector< double > abfs_ccp_rcut
Definition LRI_CV.h:74
std::map< int, std::map< int, std::map< Abfs::Vector3_Order< double >, RI::Tensor< Tdata > > > > Vws
Definition LRI_CV.h:77
std::map< TA, std::map< TAC, RI::Tensor< Tdata > > > cal_Vs(const UnitCell &ucell, const std::vector< TA > &list_A0, const std::vector< TAC > &list_A1, const std::map< std::string, bool > &flags)
Definition LRI_CV.hpp:145
std::map< int, std::map< int, std::map< Abfs::Vector3_Order< double >, std::array< RI::Tensor< Tdata >, 3 > > > > dVws
Definition LRI_CV.h:79
std::function< double(const int it0, const int it1)> T_func_cal_Rcut
Definition LRI_CV.h:96
~LRI_CV()
Definition LRI_CV.hpp:30
std::vector< std::vector< std::vector< Numerical_Orbital_Lm > > > lcaos
Definition LRI_CV.h:68
std::map< TA, std::map< TAC, Tresult > > cal_datas(const UnitCell &ucell, const std::vector< TA > &list_A0, const std::vector< TAC > &list_A1, const std::map< std::string, bool > &flags, const T_func_cal_Rcut &func_cal_Rcut, const T_func_DPcal_data< Tresult > &func_DPcal_data)
std::function< Tresult(const int it0, const int it1, const Abfs::Vector3_Order< double > &R, const std::map< std::string, bool > &flags)> T_func_DPcal_data
Definition LRI_CV.h:95
LRI_CV()
Definition LRI_CV.hpp:21
int TA
Definition LRI_CV.h:27
pthread_rwlock_t rwlock_dVw
Definition LRI_CV.h:84
std::vector< double > lcaos_rcut
Definition LRI_CV.h:73
std::pair< std::map< TA, std::map< TAC, RI::Tensor< Tdata > > >, std::map< TA, std::map< TAC, std::array< RI::Tensor< Tdata >, 3 > > > > cal_Cs_dCs(const UnitCell &ucell, const std::vector< TA > &list_A0, const std::vector< TAC > &list_A1, const std::map< std::string, bool > &flags)
Definition LRI_CV.hpp:188
ModuleBase::Element_Basis_Index::IndexLNM index_lcaos
Definition LRI_CV.h:71
Matrix_Orbs21 m_abfslcaos_lcaos
Definition LRI_CV.h:88
void set_orbitals(const UnitCell &ucell, const LCAO_Orbitals &orb, const std::vector< std::vector< std::vector< Numerical_Orbital_Lm > > > &lcaos_in, const std::vector< std::vector< std::vector< Numerical_Orbital_Lm > > > &abfs_in, const std::vector< std::vector< std::vector< Numerical_Orbital_Lm > > > &abfs_ccp_in, const double &kmesh_times, std::shared_ptr< ORB_gaunt_table > MGT, const bool &init_C)
Definition LRI_CV.hpp:40
Matrix_Orbs11 m_abfs_abfs
Definition LRI_CV.h:87
std::map< TA, std::map< TAC, std::array< RI::Tensor< Tdata >, 3 > > > cal_dVs(const UnitCell &ucell, const std::vector< TA > &list_A0, const std::vector< TAC > &list_A1, const std::map< std::string, bool > &flags)
Definition LRI_CV.hpp:166
pthread_rwlock_t rwlock_Cw
Definition LRI_CV.h:83
std::vector< std::vector< std::vector< Numerical_Orbital_Lm > > > abfs
Definition LRI_CV.h:69
std::pair< TA, TC > TAC
Definition LRI_CV.h:29
ModuleBase::Element_Basis_Index::IndexLNM index_abfs
Definition LRI_CV.h:72
size_t get_index_abfs_size(const size_t &iat)
Definition LRI_CV.h:65
std::array< int, 3 > TC
Definition LRI_CV.h:28
pthread_rwlock_t rwlock_dCw
Definition LRI_CV.h:85
double cal_C_Rcut(const int it0, const int it1)
Definition LRI_CV.hpp:91
std::map< int, std::map< int, std::map< Abfs::Vector3_Order< double >, std::array< RI::Tensor< Tdata >, 3 > > > > dCws
Definition LRI_CV.h:80
std::map< int, std::map< int, std::map< Abfs::Vector3_Order< double >, RI::Tensor< Tdata > > > > Cws
Definition LRI_CV.h:78
double cal_V_Rcut(const int it0, const int it1)
Definition LRI_CV.hpp:86
pthread_rwlock_t rwlock_Vw
Definition LRI_CV.h:82
To11 DPcal_o11(const int it0, const int it1, const Abfs::Vector3_Order< double > &R, const bool &flag_writable_o11ws, pthread_rwlock_t &rwlock_o11, std::map< int, std::map< int, std::map< Abfs::Vector3_Order< double >, To11 > > > &o11ws, const Tfunc &func_cal_o11)
Definition LRI_CV.hpp:225
std::vector< std::vector< std::vector< Numerical_Orbital_Lm > > > abfs_ccp
Definition LRI_CV.h:70
Definition Matrix_Orbs11.h:22
Definition Matrix_Orbs21.h:21
Definition unitcell.h:17
std::vector< Index_T > IndexLNM
Definition element_basis_index.h:42