ABACUS develop
Atomic-orbital Based Ab-initio Computation at UStc
Loading...
Searching...
No Matches
grid_technique.h
Go to the documentation of this file.
1#ifndef GRID_TECHNIQUE_H
2#define GRID_TECHNIQUE_H
3
4#include "grid_meshball.h"
10#if ((defined __CUDA) /* || (defined __ROCM) */)
11#include "kernels/cuda/gemm_selector.cuh"
12
13#include <cuda_runtime.h>
14#endif
15
16// Author: mohan
17// Date: 2009-10-17
19 // public variables.
20 public:
23
26 //------------------------------------
27 // 1: Info about atom number on grid.
28 //------------------------------------
29 // record how many atoms on each grid.
30 std::vector<int> how_many_atoms;
31 // max atom on grid
32 int max_atom=0;
33 // sum of how_many_atoms
35 std::vector<int> start_ind;
36
37 //------------------------------------
38 // 2: Info about which atom on grid.
39 //------------------------------------
40 // save the start position of each big cell's adjacent
41 // atoms in 1D grid.
42 std::vector<int> bcell_start;
43 // save the 'iat' atom.
44 // dim: total_atoms_on_grid.
45 std::vector<int> which_atom;
46
47 //--------------------------------------
48 // save the bigcell index in meshball.
49 // dim: total_atoms_on_grid.
50 //--------------------------------------
51 std::vector<int> which_bigcell;
52 std::vector<int> which_unitcell;
53
54 //------------------------------------
55 // 3: which atom on local grid.
56 //------------------------------------
57 int lnat=0; // local nat.
58 int lgd=0; // local grid dimension. lgd * lgd symmetry matrix.
59 std::vector<bool> in_this_processor;
60 std::vector<int> trace_iat;
61 std::vector<int> trace_lo; // trace local orbital.
62
63 //---------------------------------------
64 // nnrg: number of matrix elements on
65 // each processor's real space grid.
66 // use: GridT.in_this_processor
67 //---------------------------------------
68 int nnrg = 0;
69
70 // UnitCell and LCAO_Obrbitals
71 const UnitCell* ucell=nullptr;
72 const LCAO_Orbitals* orb=nullptr;
73
74 // UnitCell parameters
75 int nwmax=0;
76 int nr_max=0;
77 int ntype=0;
78
79 // LCAO Orbitals
80 double dr_uniform={0.0};
81 std::vector<double> rcuts;
82 std::vector<std::vector<double>> psi_u;
83 std::vector<std::vector<double>> dpsi_u;
84 std::vector<std::vector<double>> d2psi_u;
85
86 // Determine whether the grid point integration is initialized.
87 bool init_malloced=false;
88
89 bool get_init_malloced() const { return init_malloced; }
90
91 void set_pbc_grid(const int& ncx_in,
92 const int& ncy_in,
93 const int& ncz_in,
94 const int& bx_in,
95 const int& by_in,
96 const int& bz_in,
97 const int& nbx_in,
98 const int& nby_in,
99 const int& nbz_in,
100 const int& nbxx_in,
101 const int& nbzp_start_in,
102 const int& nbzp_in,
103 const int& ny,
104 const int& nplane,
105 const int& startz_current,
106 const UnitCell& ucell,
107 const Grid_Driver& gd,
108 const double& dr_uniform,
109 const std::vector<double>& rcuts,
110 const std::vector<std::vector<double>>& psi_u,
111 const std::vector<std::vector<double>>& dpsi_u,
112 const std::vector<std::vector<double>>& d2psi_u,
113 const int& num_stream);
114
115 const std::vector<int>* get_ijr_info() const { return &ijr_info; }
116
119 int cal_RindexAtom(const int& u1,
120 const int& u2,
121 const int& u3,
122 const int& iat2) const;
123
124 int find_offset(const int id1, const int id2, const int iat1, const int iat2) const;
125
126 private:
127
128 // store the information of atom pairs on this processor, used to initialize hcontainer.
129 // The meaning of ijr can be referred to in the get_ijr_info function in hcontainer.cpp.
130 std::vector<int> ijr_info;
131
133 // atoms on meshball
134 void init_atoms_on_grid(const int& ny,
135 const int& nplane,
136 const UnitCell& ucell);
137 void init_atoms_on_grid2(const int* index2normal, const UnitCell& ucell);
138 // initialize the ijr_info and nnrg
139 void init_ijr_and_nnrg(const UnitCell& ucell, const Grid_Driver& gd);
141 void cal_trace_lo(const UnitCell& ucell);
142 void check_bigcell(int* ind_bigcell, char* bigcell_on_processor);
143 void get_startind(const int& ny,
144 const int& nplane);
145
146#if ((defined __CUDA) /* || (defined __ROCM) */)
147 public:
148 double* ylmcoef_g;
149 bool is_malloced;
150
151 int* atom_nw_g;
152 int* atom_nwl_g;
153 double* psi_u_g;
154 bool* atom_new_g;
155 int* atom_ylm_g;
156 int* atom_l_g;
157 double* rcut_g;
158 double*mcell_pos_g;
159
160 int dev_id = 0;
161 int nstreams = 4;
162 // streams[nstreams]
163 // TODO it needs to be implemented through configuration files
164 matrix_multiple_func_type fastest_matrix_mul;
165
166 private:
167 void init_gpu_gint_variables(const UnitCell& ucell, const int num_stream);
168 void free_gpu_gint_variables(int nat);
169
170#endif
171};
172#endif
int nat
Definition grid_bigcell.h:15
Definition sltk_grid_driver.h:43
Definition grid_meshball.h:7
Definition grid_technique.h:18
int lgd
Definition grid_technique.h:58
void cal_grid_integration_index()
Definition grid_technique.cpp:458
std::vector< std::vector< double > > psi_u
Definition grid_technique.h:82
void init_ijr_and_nnrg(const UnitCell &ucell, const Grid_Driver &gd)
Definition grid_technique.cpp:555
const LCAO_Orbitals * orb
Definition grid_technique.h:72
void cal_max_box_index()
void init_atoms_on_grid(const int &ny, const int &nplane, const UnitCell &ucell)
Definition grid_technique.cpp:172
std::vector< std::vector< double > > d2psi_u
Definition grid_technique.h:84
int max_atom
Definition grid_technique.h:32
Grid_Technique & operator=(Grid_Technique &&rhs)=default
move operator for the next ESolver to directly use its infomation
void set_pbc_grid(const int &ncx_in, const int &ncy_in, const int &ncz_in, const int &bx_in, const int &by_in, const int &bz_in, const int &nbx_in, const int &nby_in, const int &nbz_in, const int &nbxx_in, const int &nbzp_start_in, const int &nbzp_in, const int &ny, const int &nplane, const int &startz_current, const UnitCell &ucell, const Grid_Driver &gd, const double &dr_uniform, const std::vector< double > &rcuts, const std::vector< std::vector< double > > &psi_u, const std::vector< std::vector< double > > &dpsi_u, const std::vector< std::vector< double > > &d2psi_u, const int &num_stream)
Definition grid_technique.cpp:36
int total_atoms_on_grid
Definition grid_technique.h:34
int nr_max
Definition grid_technique.h:76
std::vector< int > trace_iat
Definition grid_technique.h:60
Grid_Technique()
Definition grid_technique.cpp:15
const UnitCell * ucell
Definition grid_technique.h:71
std::vector< int > which_atom
Definition grid_technique.h:45
std::vector< int > which_bigcell
Definition grid_technique.h:51
bool get_init_malloced() const
Definition grid_technique.h:89
int nwmax
Definition grid_technique.h:75
int cal_RindexAtom(const int &u1, const int &u2, const int &u3, const int &iat2) const
std::vector< int > trace_lo
Definition grid_technique.h:61
std::vector< int > start_ind
Definition grid_technique.h:35
void get_startind(const int &ny, const int &nplane)
Definition grid_technique.cpp:133
int nnrg
Definition grid_technique.h:68
void init_atoms_on_grid2(const int *index2normal, const UnitCell &ucell)
Definition grid_technique.cpp:340
const std::vector< int > * get_ijr_info() const
Definition grid_technique.h:115
int find_offset(const int id1, const int id2, const int iat1, const int iat2) const
void check_bigcell(int *ind_bigcell, char *bigcell_on_processor)
Definition grid_technique.cpp:305
int lnat
Definition grid_technique.h:57
std::vector< int > ijr_info
Definition grid_technique.h:130
std::vector< int > how_many_atoms
Definition grid_technique.h:30
std::vector< double > rcuts
Definition grid_technique.h:81
void cal_trace_lo(const UnitCell &ucell)
Definition grid_technique.cpp:498
int ntype
Definition grid_technique.h:77
std::vector< bool > in_this_processor
Definition grid_technique.h:59
bool init_malloced
Definition grid_technique.h:87
~Grid_Technique()
Definition grid_technique.cpp:23
std::vector< int > bcell_start
Definition grid_technique.h:42
std::vector< int > which_unitcell
Definition grid_technique.h:52
std::vector< std::vector< double > > dpsi_u
Definition grid_technique.h:83
double dr_uniform
Definition grid_technique.h:80
Definition ORB_read.h:19
Definition unitcell.h:16