ABACUS develop
Atomic-orbital Based Ab-initio Computation at UStc
Loading...
Searching...
No Matches
nonlocal_new.h
Go to the documentation of this file.
1#ifndef NONLOCALNEW_H
2#define NONLOCALNEW_H
9
10#include <unordered_map>
11#include <vector>
12
13namespace hamilt
14{
15
16#ifndef __NONLOCALNEWTEMPLATE
17#define __NONLOCALNEWTEMPLATE
18
24template <class T>
25class NonlocalNew : public T
26{
27};
28
29#endif
30
38template <typename TK, typename TR>
39class NonlocalNew<OperatorLCAO<TK, TR>> : public OperatorLCAO<TK, TR>
40{
41 public:
43 const std::vector<ModuleBase::Vector3<double>>& kvec_d_in,
45 const UnitCell* ucell_in,
46 const std::vector<double>& orb_cutoff,
47 const Grid_Driver* GridD_in,
48 const TwoCenterIntegrator* intor);
50
55 virtual void contributeHR() override;
56
57 void cal_force_stress(const bool cal_force,
58 const bool cal_stress,
59 const HContainer<TR>* dmR,
60 ModuleBase::matrix& force,
61 ModuleBase::matrix& stress);
62
63 virtual void set_HR_fixed(void*) override;
64
65 private:
66 const UnitCell* ucell = nullptr;
67
68 std::vector<double> orb_cutoff_;
69
70 hamilt::HContainer<TR>* HR_fixed = nullptr;
71
72 // the following variable is introduced temporarily during LCAO refactoring
73 const TwoCenterIntegrator* intor_ = nullptr;
74
75 bool allocated = false;
76
77 bool HR_fixed_done = false;
78
84 void initialize_HR(const Grid_Driver* GridD_in);
85
92
96 void cal_HR_IJR(const int& iat1,
97 const int& iat2,
98 const int& T0,
99 const Parallel_Orbitals* paraV,
100 const std::unordered_map<int, std::vector<double>>& nlm1_all,
101 const std::unordered_map<int, std::vector<double>>& nlm2_all,
102 TR* data_pointer);
103
104 const Grid_Driver* gridD = nullptr;
105
109 void cal_force_IJR(const int& iat1,
110 const int& iat2,
111 const int& T0,
112 const Parallel_Orbitals* paraV,
113 const std::unordered_map<int, std::vector<double>>& nlm1_all,
114 const std::unordered_map<int, std::vector<double>>& nlm2_all,
115 const hamilt::BaseMatrix<TR>* dmR_pointer,
116 double* force1,
117 double* force2);
121 void cal_stress_IJR(const int& iat1,
122 const int& iat2,
123 const int& T0,
124 const Parallel_Orbitals* paraV,
125 const std::unordered_map<int, std::vector<double>>& nlm1_all,
126 const std::unordered_map<int, std::vector<double>>& nlm2_all,
127 const hamilt::BaseMatrix<TR>* dmR_pointer,
128 const ModuleBase::Vector3<double>& dis1,
129 const ModuleBase::Vector3<double>& dis2,
130 double* stress);
131
132 std::vector<AdjacentAtomInfo> adjs_all;
133};
134
135} // namespace hamilt
136#endif
Definition sltk_grid_driver.h:43
3 elements vector
Definition vector3.h:22
Definition matrix.h:19
Definition parallel_orbitals.h:9
A class to compute two-center integrals.
Definition two_center_integrator.h:35
Definition unitcell.h:16
Definition base_matrix.h:20
Definition hcontainer.h:144
Definition hs_matrix_k.hpp:11
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 cal_HR_IJR(const int &iat1, const int &iat2, const int &T0, const Parallel_Orbitals *paraV, const std::unordered_map< int, std::vector< double > > &nlm1_all, const std::unordered_map< int, std::vector< double > > &nlm2_all, TR *data_pointer)
calculate the HR local matrix of <I,J,R> atom pair
void calculate_HR()
calculate the non-local pseudopotential matrix with specific <I,J,R> atom-pairs nearest neighbor atom...
std::vector< double > orb_cutoff_
Definition nonlocal_new.h:68
std::vector< AdjacentAtomInfo > adjs_all
Definition nonlocal_new.h:132
virtual void contributeHR() override
contributeHR() is used to calculate the HR matrix <phi_{\mu, 0}|beta_p1>D_{p1, p2}<beta_p2|phi_{\nu,...
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 ...
Definition nonlocal_new.h:26
void cal_force_IJR(const int &iat1, const int &iat2, const int &T0, const Parallel_Orbitals *paraV, const std::unordered_map< int, std::vector< double > > &nlm1_all, const std::unordered_map< int, std::vector< double > > &nlm2_all, const hamilt::BaseMatrix< std::complex< double > > *dmR_pointer, double *force1, double *force2)
Definition nonlocal_force_stress.hpp:226
void cal_stress_IJR(const int &iat1, const int &iat2, const int &T0, const Parallel_Orbitals *paraV, const std::unordered_map< int, std::vector< double > > &nlm1_all, const std::unordered_map< int, std::vector< double > > &nlm2_all, const hamilt::BaseMatrix< std::complex< double > > *dmR_pointer, const ModuleBase::Vector3< double > &dis1, const ModuleBase::Vector3< double > &dis2, double *stress)
Definition nonlocal_force_stress.hpp:295
Definition operator_lcao.h:12
#define T
Definition exp.cpp:237
Definition hamilt.h:12