ABACUS develop
Atomic-orbital Based Ab-initio Computation at UStc
Loading...
Searching...
No Matches
operator_ri_hartree.h
Go to the documentation of this file.
1#pragma once
5namespace RI_Benchmark
6{
7 template<typename T>
9 {
10 using TR = T;
11 public:
13 const int& naos,
14 const int& nocc,
15 const int& nvirt,
16 const psi::Psi<T>& psi_ks_in,
17 const TLRI<TR>& Cs_ao,
18 const TLRI<TR>& Vs,
19 const bool& read_from_aims=false,
20 const std::vector<int>& aims_nbasis={})
21 : naos(naos), nocc(nocc), nvirt(nvirt), npairs(nocc* nvirt), psi_ks(psi_ks_in),
22 Cs_ao(Cs_ao), Vs(Vs),
23 Cs_vo_mo(cal_Cs_mo(ucell, Cs_ao, psi_ks_in, nocc, nvirt, /*occ_first=*/false, read_from_aims, aims_nbasis)),
24 Cs_ov_mo(cal_Cs_mo(ucell, Cs_ao, psi_ks_in, nocc, nvirt, /*occ_first=*/true, read_from_aims, aims_nbasis)),
27 {
28 ModuleBase::TITLE("OperatorRIHartree", "OperatorRIHartree");
30 this->act_type = 2;
31 this->is_first_node = true;
32 // check: compare with CVC
33 std::vector<T> Amat1 = cal_Amat_full(Cs_vo_mo, Cs_vo_mo, Vs);
34 std::vector<T> Amat2 = cal_Amat_full(Cs_vo_mo, Cs_ov_mo, Vs);
35 std::vector<T> Amat3 = cal_Amat_full(Cs_ov_mo, Cs_vo_mo, Vs);
36 std::vector<T> Amat4 = cal_Amat_full(Cs_ov_mo, Cs_ov_mo, Vs);
37 std::vector<T> Amat(Amat1.size());
38 for (int i = 0;i < Amat1.size();++i)
39 {
40 Amat[i] = Amat1[i] + Amat2[i] + Amat3[i] + Amat4[i];
41 }
42 std::cout << "Amat_full (Hartree term) from RI (Unit Hartree):" << std::endl;
43 for (int i = 0;i < npairs;++i)
44 {
45 for (int j = 0;j < npairs;++j)
46 {
47 std::cout << Amat[i * npairs + j] << " ";
48 }
49 std::cout << std::endl;
50 }
51 };
53 void act(const int nbands,
54 const int nbasis,
55 const int npol,
56 const T* psi_in,
57 T* hpsi,
58 const int ngk_ik = 0,
59 const bool is_first_node = false) const override
60 {
61 assert(GlobalV::MY_RANK == 0); // only serial now
62 assert(nbasis == npairs);
63 TLRIX<T> CsX_vo = cal_CsX(Cs_vo_mo, psi_in);
64 TLRIX<T> CsX_ov = cal_CsX(Cs_ov_mo, psi_in);
65 // LR_Util::print_CsX(Cs_bX, nvirt, "Cs_bX of state " + std::to_string(ib));
66 // 4 for 4 terms in the expansion of local RI
67 cal_AX(CV_vo, CsX_vo, hpsi, 4.);
68 cal_AX(CV_vo, CsX_ov, hpsi, 4.);
69 cal_AX(CV_ov, CsX_vo, hpsi, 4.);
70 cal_AX(CV_ov, CsX_ov, hpsi, 4.);
71 }
72 protected:
73 const int& naos;
74 const int& nocc;
75 const int& nvirt;
76 const int npairs;
78 const TLRI<TR> Vs;
84 };
85}
Definition operator_ri_hartree.h:9
const TLRI< T > Cs_ov_mo
Definition operator_ri_hartree.h:80
OperatorRIHartree(const UnitCell &ucell, const int &naos, const int &nocc, const int &nvirt, const psi::Psi< T > &psi_ks_in, const TLRI< TR > &Cs_ao, const TLRI< TR > &Vs, const bool &read_from_aims=false, const std::vector< int > &aims_nbasis={})
Definition operator_ri_hartree.h:12
const int npairs
Definition operator_ri_hartree.h:76
void act(const int nbands, const int nbasis, const int npol, const T *psi_in, T *hpsi, const int ngk_ik=0, const bool is_first_node=false) const override
Definition operator_ri_hartree.h:53
const TLRI< T > Cs_vo_mo
Definition operator_ri_hartree.h:81
const TLRI< TR > Cs_ao
Definition operator_ri_hartree.h:77
const TLRI< T > CV_ov
Definition operator_ri_hartree.h:82
const int & nvirt
Definition operator_ri_hartree.h:75
const int & naos
Definition operator_ri_hartree.h:73
const int & nocc
Definition operator_ri_hartree.h:74
~OperatorRIHartree()
Definition operator_ri_hartree.h:52
T TR
Definition operator_ri_hartree.h:10
const TLRI< TR > Vs
Definition operator_ri_hartree.h:78
const TLRI< T > CV_vo
Definition operator_ri_hartree.h:83
const psi::Psi< T > & psi_ks
Definition operator_ri_hartree.h:79
Definition unitcell.h:16
Definition operator.h:38
int act_type
determine which act() interface would be called in hPsi()
Definition operator.h:102
psi::Psi< T, Device > * hpsi
Definition operator.h:112
enum calculation_type cal_type
Definition operator.h:107
bool is_first_node
Definition operator.h:109
Definition psi.h:37
#define T
Definition exp.cpp:237
int MY_RANK
global index of process
Definition global_variable.cpp:21
void TITLE(const std::string &class_name, const std::string &function_name, const bool disable)
Definition tool_title.cpp:18
Definition operator_ri_hartree.h:6
void cal_AX(const TLRI< TK > &Cs_a, const TLRIX< TK > &Cs_bX, const TLRI< TR > &Vs, TK *AX, const double &scale)
Definition ri_benchmark.hpp:218
TLRIX< TK > cal_CsX(const TLRI< TK > &Cs_mo, const TK *X)
Definition ri_benchmark.hpp:156
TLRI< TK > cal_Cs_mo(const UnitCell &ucell, const TLRI< TR > &Cs_ao, const psi::Psi< TK > &wfc_ks, const int &nocc, const int &nvirt, const int &occ_first, const bool &read_from_aims, const std::vector< int > &aims_nbasis)
Definition ri_benchmark.hpp:49
std::vector< TK > cal_Amat_full(const TLRI< TK > &Cs_a, const TLRI< TK > &Cs_b, const TLRI< TR > &Vs)
Definition ri_benchmark.hpp:111
TLRI< TK > cal_CV(const TLRI< TK > &Cs_a_mo, const TLRI< TR > &Vs)
Definition ri_benchmark.hpp:178
std::map< int, std::map< TAC, RI::Tensor< T > > > TLRI
Definition ri_cv_io_test.cpp:12