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