ABACUS develop
Atomic-orbital Based Ab-initio Computation at UStc
Loading...
Searching...
No Matches
td_nonlocal_lcao.h
Go to the documentation of this file.
1#ifndef TDNONLOCAL_H
2#define TDNONLOCAL_H
10
11#include <unordered_map>
12
13namespace hamilt
14{
15
16#ifndef __TD_NONLOCALTEMPLATE
17#define __TD_NONLOCALTEMPLATE
18
21template <class T>
22class TDNonlocal : public T
23{
24};
25
26#endif
27
33template <typename TK, typename TR>
34class TDNonlocal<OperatorLCAO<TK, TR>> : public OperatorLCAO<TK, TR>
35{
36 public:
38 const std::vector<ModuleBase::Vector3<double>>& kvec_d_in,
40 const UnitCell* ucell_in,
41 const LCAO_Orbitals& orb,
42 const Grid_Driver* GridD_in);
44
49 virtual void contributeHR() override;
50 virtual void contributeHk(int ik) override;
51
52 virtual void set_HR_fixed(void*) override;
53
54 private:
55 const UnitCell* ucell = nullptr;
57
58 HContainer<TR>* HR = nullptr;
62 const Grid_Driver* Grid = nullptr;
63
64 bool allocated = false;
65
66 bool hR_tmp_done = false;
67
73 void initialize_HR(const Grid_Driver* GridD_in);
74
81 void update_td();
88
92 void cal_HR_IJR(const int& iat1,
93 const int& iat2,
94 const int& T0,
95 const Parallel_Orbitals* paraV,
96 const std::vector<std::unordered_map<int, std::vector<std::complex<double>>>>& nlm1_all,
97 const std::vector<std::unordered_map<int, std::vector<std::complex<double>>>>& nlm2_all,
98 std::complex<double>* data_pointer,
99 std::complex<double>** data_pointer_c);
100
102 std::vector<AdjacentAtomInfo> adjs_all;
105};
106
107} // namespace hamilt
108#endif
Definition sltk_grid_driver.h:43
Definition ORB_read.h:19
3 elements vector
Definition vector3.h:22
Definition parallel_orbitals.h:9
Definition unitcell.h:16
Definition hcontainer.h:144
Definition hs_matrix_k.hpp:11
Definition operator_lcao.h:12
virtual void contributeHR() override
contributeHR() is used to calculate the HR matrix <phi_{\mu, 0}|beta_p1>D_{p1, p2}<beta_p2|phi_{\nu,...
void initialize_HR_tmp(const Parallel_Orbitals *paraV)
initialize HR_tmp Allocate the memory for HR_tmp with the same size as HR
void initialize_HR(const Grid_Driver *GridD_in)
initialize HR, search the nearest neighbor atoms HContainer is used to store the non-local pseudopote...
void update_td()
init vector potential for td_nonlocal term
const LCAO_Orbitals & orb_
Definition td_nonlocal_lcao.h:56
ModuleBase::Vector3< double > cart_At
Store the vector potential for td_nonlocal term.
Definition td_nonlocal_lcao.h:104
virtual void set_HR_fixed(void *) override
set_HR_fixed() is used for pass HR_fixed matrix to the next node in sub-chain table not used in base ...
void calculate_HR()
calculate the non-local pseudopotential matrix with specific <I,J,R> atom-pairs nearest neighbor atom...
std::vector< AdjacentAtomInfo > adjs_all
exact the nearest neighbor atoms from all adjacent atoms
Definition td_nonlocal_lcao.h:102
void cal_HR_IJR(const int &iat1, const int &iat2, const int &T0, const Parallel_Orbitals *paraV, const std::vector< std::unordered_map< int, std::vector< std::complex< double > > > > &nlm1_all, const std::vector< std::unordered_map< int, std::vector< std::complex< double > > > > &nlm2_all, std::complex< double > *data_pointer, std::complex< double > **data_pointer_c)
calculate the HR local matrix of <I,J,R> atom pair
virtual void contributeHk(int ik) override
Definition td_nonlocal_lcao.h:23
#define T
Definition exp.cpp:237
Definition batch.h:6
Definition hamilt.h:12