ABACUS develop
Atomic-orbital Based Ab-initio Computation at UStc
Loading...
Searching...
No Matches
gint.h
Go to the documentation of this file.
1#ifndef GINT_INTERFACE
2#define GINT_INTERFACE
3
4#include "gint_tools.h"
8#include <functional>
9
10//----------------------------------------------------------
11//!This class provides a unified interface to the
12//!grid intergration operation used to calculate
13//!electron density, and the contribution of local
14//!potential to Hamiltonian and force/stress.
15//!There are two derived classes of this class
18//----------------------------------------------------------
19
20class Gint {
21 public:
22 ~Gint();
23
25 Gint& operator=(Gint&& rhs);
26
28
29 std::vector<hamilt::HContainer<double>*> get_DMRGint() const { return DMRGint; }
30
31 int get_ncxyz() const { return ncxyz; }
32
34 void cal_gint(Gint_inout* inout);
35
37 void prep_grid(const Grid_Technique& gt,
38 const int& nbx_in,
39 const int& nby_in,
40 const int& nbz_in,
41 const int& nbz_start_in,
42 const int& ncxyz_in,
43 const int& bx_in,
44 const int& by_in,
45 const int& bz_in,
46 const int& bxyz_in,
47 const int& nbxx_in,
48 const int& ny_in,
49 const int& nplane_in,
50 const int& startz_current_in,
51 const UnitCell* ucell_in,
52 const LCAO_Orbitals* orb_in);
53
58 void initialize_pvpR(const UnitCell& unitcell, const Grid_Driver* gd, const int& nspin);
59
63 void reset_DMRGint(const int& nspin);
64
68 void transfer_DM2DtoGrid(std::vector<hamilt::HContainer<double>*> DM2D);
69
70 const Grid_Technique* gridt = nullptr;
72
73 // psir_ylm_new = psir_func(psir_ylm)
74 // psir_func==nullptr means psir_ylm_new=psir_ylm
75 using T_psir_func = std::function<
77 const ModuleBase::Array_Pool<double> &psir_ylm,
78 const Grid_Technique &gt,
79 const int grid_index,
80 const int is,
81 const std::vector<int> &block_iw,
82 const std::vector<int> &block_size,
83 const std::vector<int> &block_index,
84 const ModuleBase::Array_Pool<bool> &cal_flag)>;
85
88
89 protected:
90
92 int nbx;
93 int nby;
94 int nbz;
95 int ncxyz;
97 int bx;
98 int by;
99 int bz;
100 int bxyz;
101 int nbxx;
102 int ny;
104 int startz_current; // from rhopw
105
107 void gpu_vlocal_interface(Gint_inout* inout);
108
109 void gpu_rho_interface(Gint_inout* inout);
110
111 void gpu_force_interface(Gint_inout* inout);
112
114 void gint_kernel_vlocal(Gint_inout* inout);
115
117 void gint_kernel_dvlocal(Gint_inout* inout);
118
121
123 void gint_kernel_rho(Gint_inout* inout);
124
126 void gint_kernel_tau(Gint_inout* inout);
127
129 void gint_kernel_force(Gint_inout* inout);
130
133
145 const int na_grid,
146 const int LD_pool,
147 const int* const block_size,
148 const int* const block_index,
149 const int grid_index,
150 const bool* const* const cal_flag,
151 const double* const* const psir_ylm,
152 const double* const* const psir_vlbr3,
154
157 void gint_kernel_force(const int na_grid,
158 const int grid_index,
159 const double delta_r,
160 double* vldr3,
161 const int is,
162 const bool isforce,
163 const bool isstress,
164 ModuleBase::matrix* fvl_dphi,
165 ModuleBase::matrix* svl_dphi,
166 const UnitCell& ucell);
167
171 void gint_kernel_force_meta(const int na_grid,
172 const int grid_index,
173 const double delta_r,
174 double* vldr3,
175 double* vkdr3,
176 const int is,
177 const bool isforce,
178 const bool isstress,
179 ModuleBase::matrix* fvl_dphi,
180 ModuleBase::matrix* svl_dphi,
181 const UnitCell& ucell);
182
192 const int grid_index,
193 const int na_grid,
194 const int* const block_size,
195 const int* const block_index,
196 const double* const* const psir_vlbr3_DMR,
197 const double* const* const dpsir_x, // psir_vlbr3[bxyz][LD_pool]
198 const double* const* const dpsir_y, // psir_vlbr3[bxyz][LD_pool]
199 const double* const* const dpsir_z, // psir_vlbr3[bxyz][LD_pool]
200 ModuleBase::matrix* force);
201
206 const int na_grid,
207 const int*const block_index,
208 const double*const psir_vlbr3_DMR,
209 const double*const dpsirr,
210 ModuleBase::matrix *stress);
211
215 void gint_kernel_rho(const int na_grid,
216 const int grid_index,
217 const double delta_r,
218 int* vindex,
219 const int LD_pool,
220 const UnitCell& ucell,
221 Gint_inout* inout);
222
224 void cal_meshball_rho(const int na_grid,
225 const int*const block_index,
226 const int*const vindex,
227 const double*const*const psir_ylm,
228 const double*const*const psir_DMR,
229 double*const rho);
230
232 //!in meta-GGA functional
233 void gint_kernel_tau(const int na_grid,
234 const int grid_index,
235 const double delta_r,
236 int* vindex,
237 const int LD_pool,
238 Gint_inout* inout,
239 const UnitCell& ucell);
240
242 //!in a meshball, used in meta-GGA functional calculations
243 void cal_meshball_tau(const int na_grid,
244 int* block_index,
245 int* vindex,
246 double** dpsix,
247 double** dpsiy,
248 double** dpsiz,
249 double** dpsix_dm,
250 double** dpsiy_dm,
251 double** dpsiz_dm,
252 double* rho);
253
257
259 std::vector<hamilt::HContainer<double>*> hRGint_tmp;
260
263
265 std::vector<hamilt::HContainer<double>*> DMRGint;
266
269
270 std::vector<hamilt::HContainer<double>> pvdpRx_reduced;
271 std::vector<hamilt::HContainer<double>> pvdpRy_reduced;
272 std::vector<hamilt::HContainer<double>> pvdpRz_reduced;
273};
274
275#endif
Definition gint_tools.h:33
Definition gint.h:20
std::vector< hamilt::HContainer< double > > pvdpRy_reduced
Definition gint.h:271
void transfer_DM2DtoGrid(std::vector< hamilt::HContainer< double > * > DM2D)
transfer DMR (2D para) to DMR (Grid para) in elecstate_lcao.cpp
Definition gint_old.cpp:242
void gpu_force_interface(Gint_inout *inout)
Definition gint_gpu_interface.cpp:60
void gint_kernel_vlocal(Gint_inout *inout)
in cal_gint_cpu.cpp
Definition gint_vl_cpu_interface.cpp:6
int nplane
Definition gint.h:103
std::vector< hamilt::HContainer< double > * > DMRGint
stores DMR in sparse format
Definition gint.h:265
void gint_kernel_force(Gint_inout *inout)
compute forces
Definition gint_force_cpu_interface.cpp:5
void initialize_pvpR(const UnitCell &unitcell, const Grid_Driver *gd, const int &nspin)
calculate the neighbor atoms of each atom in this processor size of BaseMatrix with be the non-parall...
Definition gint_old.cpp:141
int by
Definition gint.h:98
int nbz_start
Definition gint.h:96
void cal_meshball_force(const int grid_index, const int na_grid, const int *const block_size, const int *const block_index, const double *const *const psir_vlbr3_DMR, const double *const *const dpsir_x, const double *const *const dpsir_y, const double *const *const dpsir_z, ModuleBase::matrix *force)
Definition gint_fvl_old.cpp:8
hamilt::HContainer< double > * hRGint
Definition gint.h:256
std::function< const ModuleBase::Array_Pool< double > &(const ModuleBase::Array_Pool< double > &psir_ylm, const Grid_Technique &gt, const int grid_index, const int is, const std::vector< int > &block_iw, const std::vector< int > &block_size, const std::vector< int > &block_index, const ModuleBase::Array_Pool< bool > &cal_flag)> T_psir_func
Definition gint.h:84
void gint_kernel_force(const int na_grid, const int grid_index, const double delta_r, double *vldr3, const int is, const bool isforce, const bool isstress, ModuleBase::matrix *fvl_dphi, ModuleBase::matrix *svl_dphi, const UnitCell &ucell)
std::vector< hamilt::HContainer< double > * > hRGint_tmp
size of vec is 4, only used when nspin = 4
Definition gint.h:259
void cal_meshball_vlocal(const int na_grid, const int LD_pool, const int *const block_size, const int *const block_index, const int grid_index, const bool *const *const cal_flag, const double *const *const psir_ylm, const double *const *const psir_vlbr3, hamilt::HContainer< double > *hR)
Definition gint_vl_old.cpp:22
void gpu_vlocal_interface(Gint_inout *inout)
in cal_gint_gpu.cpp
Definition gint_gpu_interface.cpp:9
int nby
Definition gint.h:93
int bx
Definition gint.h:97
int nbx
variables related to FFT grid
Definition gint.h:92
void gint_kernel_tau(Gint_inout *inout)
used in meta-GGA functional
Definition gint_rho_cpu_interface.cpp:91
int bz
Definition gint.h:99
void gpu_rho_interface(Gint_inout *inout)
Definition gint_gpu_interface.cpp:34
T_psir_func psir_func_2
Definition gint.h:87
void prep_grid(const Grid_Technique &gt, const int &nbx_in, const int &nby_in, const int &nbz_in, const int &nbz_start_in, const int &ncxyz_in, const int &bx_in, const int &by_in, const int &bz_in, const int &bxyz_in, const int &nbxx_in, const int &ny_in, const int &nplane_in, const int &startz_current_in, const UnitCell *ucell_in, const LCAO_Orbitals *orb_in)
preparing FFT grid
Definition gint_old.cpp:91
std::vector< hamilt::HContainer< double > > pvdpRz_reduced
Definition gint.h:272
void cal_meshball_tau(const int na_grid, int *block_index, int *vindex, double **dpsix, double **dpsiy, double **dpsiz, double **dpsix_dm, double **dpsiy_dm, double **dpsiz_dm, double *rho)
Use grid integrals to compute kinetic energy density tau.
Definition gint_tau_old.cpp:16
void gint_kernel_rho(Gint_inout *inout)
calculate charge density rho(r)=\int D_munu \phi_mu \phi_nu
Definition gint_rho_cpu_interface.cpp:6
~Gint()
Definition gint_old.cpp:23
std::vector< hamilt::HContainer< double > * > get_DMRGint() const
Definition gint.h:29
void reset_DMRGint(const int &nspin)
resize DMRGint to nspin and reallocate the memory
Definition gint_old.cpp:222
int bxyz
Definition gint.h:100
void gint_kernel_dvlocal(Gint_inout *inout)
calculate H_mu_nu(local)=<phi_0|vlocal|dphi_R>
Definition gint_vl_cpu_interface.cpp:83
int ny
Definition gint.h:102
void gint_kernel_tau(const int na_grid, const int grid_index, const double delta_r, int *vindex, const int LD_pool, Gint_inout *inout, const UnitCell &ucell)
Use grid integrals to compute kinetic energy density tau.
int startz_current
Definition gint.h:104
std::vector< hamilt::HContainer< double > > pvdpRx_reduced
Definition gint.h:270
int ncxyz
Definition gint.h:95
hamilt::HContainer< double > * get_hRGint() const
Definition gint.h:27
T_psir_func psir_func_1
Definition gint.h:86
int nbz
Definition gint.h:94
void cal_gint(Gint_inout *inout)
the unified interface to grid integration
Definition gint_old.cpp:40
Gint & operator=(Gint &&rhs)
move operator for the next ESolver to directly use its infomation
Definition gint_move.hpp:23
void gint_kernel_force_meta(Gint_inout *inout)
compute forces related to meta-GGA functionals
Definition gint_force_cpu_interface.cpp:129
void cal_meshball_rho(const int na_grid, const int *const block_index, const int *const vindex, const double *const *const psir_ylm, const double *const *const psir_DMR, double *const rho)
Use grid integrals to compute charge density in a meshball.
Definition gint_rho_old.cpp:12
const Grid_Technique * gridt
Definition gint.h:70
hamilt::HContainer< std::complex< double > > * hRGintCd
stores Hamiltonian in sparse format
Definition gint.h:262
void gint_kernel_rho(const int na_grid, const int grid_index, const double delta_r, int *vindex, const int LD_pool, const UnitCell &ucell, Gint_inout *inout)
int nbxx
Definition gint.h:101
void gint_kernel_vlocal_meta(Gint_inout *inout)
calculate vlocal in meta-GGA functionals
Definition gint_vl_cpu_interface.cpp:160
int get_ncxyz() const
Definition gint.h:31
void cal_meshball_stress(const int na_grid, const int *const block_index, const double *const psir_vlbr3_DMR, const double *const dpsirr, ModuleBase::matrix *stress)
Definition gint_fvl_old.cpp:44
const UnitCell * ucell
Definition gint.h:71
void gint_kernel_force_meta(const int na_grid, const int grid_index, const double delta_r, double *vldr3, double *vkdr3, const int is, const bool isforce, const bool isstress, ModuleBase::matrix *fvl_dphi, ModuleBase::matrix *svl_dphi, const UnitCell &ucell)
hamilt::HContainer< double > * DMRGint_full
tmp tools used in transfer_DM2DtoGrid
Definition gint.h:268
Definition sltk_grid_driver.h:43
Definition grid_technique.h:18
Definition ORB_read.h:19
Array_Pool is a class designed for dynamically allocating a two-dimensional array with all its elemen...
Definition array_pool.h:16
Definition matrix.h:19
Definition unitcell.h:16
Definition hcontainer.h:144
Definition bcast_cell.cpp:9