ergo
box_system.h
Go to the documentation of this file.
1/* Ergo, version 3.8.2, a program for linear scaling electronic structure
2 * calculations.
3 * Copyright (C) 2023 Elias Rudberg, Emanuel H. Rubensson, Pawel Salek,
4 * and Anastasia Kruchinina.
5 *
6 * This program is free software: you can redistribute it and/or modify
7 * it under the terms of the GNU General Public License as published by
8 * the Free Software Foundation, either version 3 of the License, or
9 * (at your option) any later version.
10 *
11 * This program is distributed in the hope that it will be useful,
12 * but WITHOUT ANY WARRANTY; without even the implied warranty of
13 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
14 * GNU General Public License for more details.
15 *
16 * You should have received a copy of the GNU General Public License
17 * along with this program. If not, see <http://www.gnu.org/licenses/>.
18 *
19 * Primary academic reference:
20 * Ergo: An open-source program for linear-scaling electronic structure
21 * calculations,
22 * Elias Rudberg, Emanuel H. Rubensson, Pawel Salek, and Anastasia
23 * Kruchinina,
24 * SoftwareX 7, 107 (2018),
25 * <http://dx.doi.org/10.1016/j.softx.2018.03.005>
26 *
27 * For further information about Ergo, see <http://www.ergoscf.org>.
28 */
29
38#ifndef BOX_SYSTEM_HEADER
39#define BOX_SYSTEM_HEADER
40
41
42#include "realtype.h"
43
44
45typedef struct
46{
47 ergo_real centerCoords[3];
50
51
52typedef struct
53{
54 ergo_real centerCoords[3];
61
62typedef struct
63{
67
68#define MAX_NO_OF_BOX_LEVELS 30
69
71{
72 public:
77 BoxSystem();
78 ~BoxSystem();
80 int noOfItems,
81 ergo_real toplevelBoxSize);
82 int get_items_near_point(const box_item_struct* itemList,
83 const ergo_real* coords,
85 int* resultOrgIndexList) const;
86 private:
88 const ergo_real* coords,
90 int* resultOrgIndexList,
91 int level,
92 int boxIndex) const;
93};
94
97 ergo_real halfwidth,
98 const ergo_real* point);
99
100
101
102#endif
ergo_real get_min_distance_from_point_to_box(const ergo_real *boxCenterCoords, ergo_real halfwidth, const ergo_real *point)
Definition: box_system.cc:333
#define MAX_NO_OF_BOX_LEVELS
Definition: box_system.h:68
Definition: box_system.h:71
int totNoOfBoxes
Definition: box_system.h:73
box_level_struct levelList[MAX_NO_OF_BOX_LEVELS]
Definition: box_system.h:75
int noOfLevels
Definition: box_system.h:74
BoxSystem()
Definition: box_system.cc:54
box_struct_basic * boxList
Definition: box_system.h:76
int get_items_near_point_recursive(const box_item_struct *itemList, const ergo_real *coords, ergo_real distance, int *resultOrgIndexList, int level, int boxIndex) const
Definition: box_system.cc:352
int create_box_system(box_item_struct *itemList, int noOfItems, ergo_real toplevelBoxSize)
Creates the box system.
Definition: box_system.cc:74
~BoxSystem()
Definition: box_system.cc:59
int get_items_near_point(const box_item_struct *itemList, const ergo_real *coords, ergo_real distance, int *resultOrgIndexList) const
Goes through existning box system to find all items within specified distance from given reference po...
Definition: box_system.cc:430
static ergo_real distance(const ergo_real *a, const ergo_real *b)
Coomputes distance between two points, they do not need to be of the Vector3D type.
Definition: dft_common.cc:526
Definition of the main floating-point datatype used; the ergo_real type.
double ergo_real
Definition: realtype.h:69
Definition: box_system.h:46
int originalIndex
Definition: box_system.h:48
Definition: box_system.h:63
int noOfBoxes
Definition: box_system.h:64
int startIndexInBoxList
Definition: box_system.h:65
Definition: box_system.h:53
ergo_real width
Definition: box_system.h:55
int firstItemIndex
Definition: box_system.h:57
int noOfItems
Definition: box_system.h:56
int firstChildBoxIndex
Definition: box_system.h:59
int noOfChildBoxes
Definition: box_system.h:58