ABACUS develop
Atomic-orbital Based Ab-initio Computation at UStc
Loading...
Searching...
No Matches
velocity_op.h
Go to the documentation of this file.
1#ifndef TD_VELOCITY_OP_H
2#define TD_VELOCITY_OP_H
3#include <unordered_map>
11
12//design to calculate velocity operator
13template <typename TR>
15{
16 public:
17 Velocity_op(const UnitCell* ucell_in,
18 const Grid_Driver* GridD_in,
20 const LCAO_Orbitals& orb,
21 const TwoCenterIntegrator* intor);
23
25 {
26 return this->current_term[i];
27 }
28 void calculate_vcomm_r();
30
31 private:
32 const UnitCell* ucell = nullptr;
33
34 const Parallel_Orbitals* paraV = nullptr;
35
37
39 std::vector<hamilt::HContainer<std::complex<double>>*> current_term = {nullptr, nullptr, nullptr};
40
41 const TwoCenterIntegrator* intor_ = nullptr;
43
49 void initialize_vcomm_r(const Grid_Driver* GridD_in, const Parallel_Orbitals* paraV);
50 void initialize_grad_term(const Grid_Driver* GridD_in, const Parallel_Orbitals* paraV);
51
55 void cal_vcomm_r_IJR(const int& iat1,
56 const int& iat2,
57 const int& T0,
59 const std::vector<std::unordered_map<int, std::vector<double>>>& nlm1_all,
60 const std::vector<std::unordered_map<int, std::vector<double>>>& nlm2_all,
61 std::complex<double>** current_mat_p);
62 void cal_grad_IJR(const int& iat1,
63 const int& iat2,
66 std::complex<double>** current_mat_p);
67
69 std::vector<AdjacentAtomInfo> adjs_vcommr;
70 std::vector<AdjacentAtomInfo> adjs_grad;
71
75 static bool init_done;
76};
77
78
79#endif // TD_CURRENT_H
Definition sltk_grid_driver.h:43
Definition ORB_read.h:19
3 elements vector
Definition vector3.h:22
Definition parallel_orbitals.h:9
A class to compute two-center integrals.
Definition two_center_integrator.h:35
Definition unitcell.h:16
Definition velocity_op.h:15
std::vector< hamilt::HContainer< std::complex< double > > * > current_term
Store real space hamiltonian. TD term should include imaginary part, thus it has to be complex type....
Definition velocity_op.h:39
const LCAO_Orbitals & orb_
Definition velocity_op.h:36
ModuleBase::Vector3< double > cart_At
Store the vector potential for td_ekinetic term.
Definition velocity_op.h:73
void initialize_vcomm_r(const Grid_Driver *GridD_in, const Parallel_Orbitals *paraV)
initialize HR, search the nearest neighbor atoms HContainer is used to store the non-local pseudopote...
Definition velocity_op.cpp:37
const TwoCenterIntegrator * intor_
Definition velocity_op.h:41
void cal_grad_IJR(const int &iat1, const int &iat2, const Parallel_Orbitals *paraV, const ModuleBase::Vector3< double > &dtau, std::complex< double > **current_mat_p)
Definition velocity_op.cpp:458
const TwoCenterIntegrator * intorbeta_
Definition velocity_op.h:42
void cal_vcomm_r_IJR(const int &iat1, const int &iat2, const int &T0, const Parallel_Orbitals *paraV, const std::vector< std::unordered_map< int, std::vector< double > > > &nlm1_all, const std::vector< std::unordered_map< int, std::vector< double > > > &nlm2_all, std::complex< double > **current_mat_p)
calculate the HR local matrix of <I,J,R> atom pair
Definition velocity_op.cpp:324
const UnitCell * ucell
Definition velocity_op.h:32
static cal_r_overlap_R r_calculator
Definition velocity_op.h:74
static bool init_done
Definition velocity_op.h:75
std::vector< AdjacentAtomInfo > adjs_vcommr
exact the nearest neighbor atoms from all adjacent atoms
Definition velocity_op.h:69
std::vector< AdjacentAtomInfo > adjs_grad
Definition velocity_op.h:70
hamilt::HContainer< std::complex< double > > * get_current_term_pointer(const int &i) const
Definition velocity_op.h:24
void initialize_grad_term(const Grid_Driver *GridD_in, const Parallel_Orbitals *paraV)
Definition velocity_op.cpp:118
~Velocity_op()
Definition velocity_op.cpp:28
const Parallel_Orbitals * paraV
Definition velocity_op.h:34
void calculate_vcomm_r()
Definition velocity_op.cpp:181
void calculate_grad_term()
Definition velocity_op.cpp:409
Definition cal_r_overlap_R.h:25
Definition hcontainer.h:144