ABACUS develop
Atomic-orbital Based Ab-initio Computation at UStc
Loading...
Searching...
No Matches
sltk_grid.h
Go to the documentation of this file.
1#ifndef GRID_H
2#define GRID_H
3
5#include "sltk_atom.h"
6#include "sltk_util.h"
7
8#include <functional>
9#include <stdexcept>
10#include <tuple>
11#include <unordered_map>
12
13typedef std::vector<FAtom> AtomMap;
14
15class Grid
16{
17 public:
18 // Constructors and destructor
19 // Grid is Global class,so init it with constant number
20 Grid() : test_grid(0){};
21 Grid(const int& test_grid_in);
22 virtual ~Grid();
23
24 Grid& operator=(Grid&&) = default;
25
26 void init(std::ofstream& ofs, const UnitCell& ucell, const double radius_in, const bool boundary = true);
27
28 // Data
29 bool pbc=false; // When pbc is set to false, periodic boundary conditions are explicitly ignored.
30 double sradius2=0.0; // searching radius squared (unit:lat0)
31 double sradius=0.0; // searching radius (unit:lat0)
32
33 // coordinate range of the input atom (unit:lat0)
34 double x_min=0.0;
35 double y_min=0.0;
36 double z_min=0.0;
37 double x_max=0.0;
38 double y_max=0.0;
39 double z_max=0.0;
40
41 // The algorithm for searching neighboring atoms uses a "box" partitioning method.
42 // Each box has an edge length of sradius, and the number of boxes in each direction is recorded here.
43 double box_edge_length=0.0;
44 int box_nx=0;
45 int box_ny=0;
46 int box_nz=0;
47
48 void getBox(int& bx, int& by, int& bz, const double& x, const double& y, const double& z)
49 {
50 bx = std::floor((x - x_min) / box_edge_length);
51 by = std::floor((y - y_min) / box_edge_length);
52 bz = std::floor((z - z_min) / box_edge_length);
53 }
54 // Stores the atoms after box partitioning.
55 std::vector<std::vector<std::vector<AtomMap>>> atoms_in_box;
56
57 // Stores the adjacent information of atoms. [ntype][natom][adj list]
58 std::vector<std::vector< std::vector<FAtom *> >> all_adj_info;
60 {
61 // we have to clear the all_adj_info
62 // because the pointers point to the memory in vector atoms_in_box
63 all_adj_info.clear();
64
65 atoms_in_box.clear();
66 }
68 {
69 // here dont need to free the memory,
70 // because the pointers point to the memory in vector atoms_in_box
71 all_adj_info.clear();
72 }
73 int getGlayerX() const
74 {
75 return glayerX;
76 }
77 int getGlayerY() const
78 {
79 return glayerY;
80 }
81 int getGlayerZ() const
82 {
83 return glayerZ;
84 }
85 int getGlayerX_minus() const
86 {
87 return glayerX_minus;
88 }
89 int getGlayerY_minus() const
90 {
91 return glayerY_minus;
92 }
93 int getGlayerZ_minus() const
94 {
95 return glayerZ_minus;
96 }
97 private:
99
100 void setMemberVariables(std::ofstream& ofs_in, const UnitCell& ucell);
101
102 void Construct_Adjacent(const UnitCell& ucell);
103 void Construct_Adjacent_near_box(const FAtom& fatom);
104 void Construct_Adjacent_final(const FAtom& fatom1, FAtom* fatom2);
105
106 void Check_Expand_Condition(const UnitCell& ucell);
107 int glayerX=0;
109 int glayerY=0;
111 int glayerZ=0;
113};
114
115#endif
Definition sltk_atom.h:12
void clear_atoms()
Definition sltk_grid.h:59
double x_max
Definition sltk_grid.h:37
double x_min
Definition sltk_grid.h:34
void Construct_Adjacent(const UnitCell &ucell)
Definition sltk_grid.cpp:268
std::vector< std::vector< std::vector< AtomMap > > > atoms_in_box
Definition sltk_grid.h:55
int getGlayerY() const
Definition sltk_grid.h:77
double y_max
Definition sltk_grid.h:38
int box_nx
Definition sltk_grid.h:44
void setMemberVariables(std::ofstream &ofs_in, const UnitCell &ucell)
Definition sltk_grid.cpp:147
int getGlayerX_minus() const
Definition sltk_grid.h:85
Grid()
Definition sltk_grid.h:20
double sradius2
Definition sltk_grid.h:30
int test_grid
Definition sltk_grid.h:98
double z_min
Definition sltk_grid.h:36
int glayerZ
Definition sltk_grid.h:111
bool pbc
Definition sltk_grid.h:29
void clear_adj_info()
Definition sltk_grid.h:67
std::vector< std::vector< std::vector< FAtom * > > > all_adj_info
Definition sltk_grid.h:58
void Check_Expand_Condition(const UnitCell &ucell)
Definition sltk_grid.cpp:37
int glayerX
Definition sltk_grid.h:107
double y_min
Definition sltk_grid.h:35
void Construct_Adjacent_final(const FAtom &fatom1, FAtom *fatom2)
Definition sltk_grid.cpp:314
int glayerX_minus
Definition sltk_grid.h:108
int box_ny
Definition sltk_grid.h:45
int getGlayerX() const
Definition sltk_grid.h:73
double box_edge_length
Definition sltk_grid.h:43
double z_max
Definition sltk_grid.h:39
int getGlayerY_minus() const
Definition sltk_grid.h:89
void init(std::ofstream &ofs, const UnitCell &ucell, const double radius_in, const bool boundary=true)
Definition sltk_grid.cpp:17
int getGlayerZ() const
Definition sltk_grid.h:81
double sradius
Definition sltk_grid.h:31
int glayerY_minus
Definition sltk_grid.h:110
Grid & operator=(Grid &&)=default
int glayerY
Definition sltk_grid.h:109
int box_nz
Definition sltk_grid.h:46
int getGlayerZ_minus() const
Definition sltk_grid.h:93
void Construct_Adjacent_near_box(const FAtom &fatom)
Definition sltk_grid.cpp:290
void getBox(int &bx, int &by, int &bz, const double &x, const double &y, const double &z)
Definition sltk_grid.h:48
int glayerZ_minus
Definition sltk_grid.h:112
Definition unitcell.h:16
Definition batch.h:6
std::vector< FAtom > AtomMap
Definition sltk_grid.h:13