ergo
organize_distrs.h
Go to the documentation of this file.
1 /* Ergo, version 3.3, a program for linear scaling electronic structure
2  * calculations.
3  * Copyright (C) 2013 Elias Rudberg, Emanuel H. Rubensson, and Pawel Salek.
4  *
5  * This program is free software: you can redistribute it and/or modify
6  * it under the terms of the GNU General Public License as published by
7  * the Free Software Foundation, either version 3 of the License, or
8  * (at your option) any later version.
9  *
10  * This program is distributed in the hope that it will be useful,
11  * but WITHOUT ANY WARRANTY; without even the implied warranty of
12  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
13  * GNU General Public License for more details.
14  *
15  * You should have received a copy of the GNU General Public License
16  * along with this program. If not, see <http://www.gnu.org/licenses/>.
17  *
18  * Primary academic reference:
19  * Kohn−Sham Density Functional Theory Electronic Structure Calculations
20  * with Linearly Scaling Computational Time and Memory Usage,
21  * Elias Rudberg, Emanuel H. Rubensson, and Pawel Salek,
22  * J. Chem. Theory Comput. 7, 340 (2011),
23  * <http://dx.doi.org/10.1021/ct100611z>
24  *
25  * For further information about Ergo, see <http://www.ergoscf.org>.
26  */
27 
28 #ifndef ORGANIZE_DISTRS_HEADER
29 #define ORGANIZE_DISTRS_HEADER
30 
31 #include "output.h"
32 #include "multipole.h"
33 
34 #include <vector>
35 
36 
37 typedef struct
38 {
41  int nmax;
42  ergo_real centerCoords[3];
49  ergo_real multipoleEuclideanNormList[MAX_MULTIPOLE_DEGREE_BASIC+1];
51 
52 typedef struct
53 {
58 
59 typedef struct
60 {
61  int nmax;
66  ergo_real multipoleEuclideanNormList[MAX_MULTIPOLE_DEGREE_BASIC+1];
68 
69 typedef struct
70 {
71  int index_1;
72  int index_2;
77  int pairIndex;
80 
81 #ifndef BASIS_FUNC_POLY_MAX_DEGREE
82 #error The constant BASIS_FUNC_POLY_MAX_DEGREE must be defined.
83 #endif
84 #if BASIS_FUNC_POLY_MAX_DEGREE<6
85 #define MAX_NO_OF_BASIS_FUNC_PAIRS_PER_CHUNK 1000
86 #else
87 #define MAX_NO_OF_BASIS_FUNC_PAIRS_PER_CHUNK 10000
88 #endif
89 
90 typedef struct
91 {
99 } chunk_struct;
100 
101 
103  std::vector<minimal_distr_struct> minimalDistrList;
104  std::vector<distr_group_struct> groupList;
105  std::vector<cluster_struct> clusterList;
106  std::vector<chunk_struct> chunkList;
107  std::vector<basis_func_pair_struct> basisFuncPairList;
108  std::vector<int> basisFuncListForChunks;
109  std::vector<int> basisFuncListForChunks_map;
110  std::vector<int> basisFuncList;
121  minimalDistrCount(0),
122  groupCount(0),
123  clusterCount(0),
124  chunkCount(0),
125  basisFuncPairCount(0),
127  basisFuncListCount(0),
128  maxExtent(0),
130  {}
131 };
132 
133 
134 
135 
136 int
137 organize_distributions(const IntegralInfo & integralInfo,
138  DistributionSpecStructLabeled* distrList_in,
139  int distrCount,
140  distr_org_struct* result,
141  const ergo_real* boxCenterCoords,
142  ergo_real boxWidth);
143 
144 #endif
ergo_real maxLimitingFactorForCluster
Definition: organize_distrs.h:65
double ergo_real
Definition: realtype.h:53
int index_2
Definition: organize_distrs.h:72
int index_1_mod
Definition: organize_distrs.h:73
int groupStartIndex
Definition: organize_distrs.h:63
std::vector< chunk_struct > chunkList
Definition: organize_distrs.h:106
Definition: organize_distrs.h:37
int nmax
Definition: organize_distrs.h:61
int basisFuncListCount
Definition: organize_distrs.h:117
ergo_real dmatElement
Definition: organize_distrs.h:78
int nmax
Definition: organize_distrs.h:41
int index_2_mod
Definition: organize_distrs.h:74
int pairIndex
Definition: organize_distrs.h:77
int groupCount
Definition: organize_distrs.h:112
Definition: organize_distrs.h:90
std::vector< minimal_distr_struct > minimalDistrList
Definition: organize_distrs.h:103
ergo_real maxSizeGroup
Definition: organize_distrs.h:44
int noOfGroups
Definition: organize_distrs.h:64
Definition: multipole.h:53
int index_inbox_2
Definition: organize_distrs.h:76
int clusterCount
Definition: organize_distrs.h:113
int organize_distributions(const IntegralInfo &integralInfo, DistributionSpecStructLabeled *distrList_in, int distrCount, distr_org_struct *result, const ergo_real *boxCenterCoords, ergo_real boxWidth)
Definition: organize_distrs.cc:55
ergo_real maxDistanceOutsideBox
Definition: organize_distrs.h:119
std::vector< int > basisFuncListForChunks_map
Definition: organize_distrs.h:109
ergo_real maxExtentGroup
Definition: organize_distrs.h:45
Contains coefficients needed for quick integral evaluation.
Definition: integral_info.h:81
ergo_real maxLimitingFactorGroup
Definition: organize_distrs.h:46
ergo_real coeff
Definition: organize_distrs.h:56
std::vector< distr_group_struct > groupList
Definition: organize_distrs.h:104
int basisFuncPairCount
Definition: organize_distrs.h:115
int index_1
Definition: organize_distrs.h:71
int basisFuncPairListIndex
Definition: organize_distrs.h:95
int startIndex
Definition: organize_distrs.h:39
ergo_real exponent
Definition: organize_distrs.h:43
ergo_real maxExtent
Definition: organize_distrs.h:118
int global_debug_id
Definition: organize_distrs.h:98
int distrCount
Definition: organize_distrs.h:40
std::vector< basis_func_pair_struct > basisFuncPairList
Definition: organize_distrs.h:107
multipole_struct_small * multipolePtr
Definition: organize_distrs.h:48
std::vector< int > basisFuncListForChunks
Definition: organize_distrs.h:108
int chunkCount
Definition: organize_distrs.h:114
Definition: organize_distrs.h:102
int index_inbox_1
Definition: organize_distrs.h:75
int basisFuncForChunkCount
Definition: organize_distrs.h:97
Definition: organize_distrs.h:52
distr_org_struct()
Definition: organize_distrs.h:120
int clusterStartIndex
Definition: organize_distrs.h:92
int basisFuncForChunksIndex
Definition: organize_distrs.h:96
int noOfClusters
Definition: organize_distrs.h:93
int minimalDistrCount
Definition: organize_distrs.h:111
int noOfBasisFuncPairs
Definition: organize_distrs.h:94
#define MAX_MULTIPOLE_DEGREE_BASIC
Definition: multipole.h:39
int basisFuncPairIndex
Definition: organize_distrs.h:54
Definition: organize_distrs.h:59
int basisFuncForChunksCount
Definition: organize_distrs.h:116
Definition: organize_distrs.h:69
int monomialIndex
Definition: organize_distrs.h:55
std::vector< cluster_struct > clusterList
Definition: organize_distrs.h:105
ergo_real exponent
Definition: organize_distrs.h:62
Definition: basisinfo.h:52
ergo_real maxAbsDmatElementGroup
Definition: organize_distrs.h:47
std::vector< int > basisFuncList
Definition: organize_distrs.h:110