ergo
organize_distrs.h
Go to the documentation of this file.
1 /* Ergo, version 3.4, a program for linear scaling electronic structure
2  * calculations.
3  * Copyright (C) 2014 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 #include "simple_sparse_mat.h"
34 
35 #include <vector>
36 
37 
38 typedef struct
39 {
42  int nmax;
43  ergo_real centerCoords[3];
50  ergo_real multipoleEuclideanNormList[MAX_MULTIPOLE_DEGREE_BASIC+1];
52 
53 typedef struct
54 {
59 
60 typedef struct
61 {
62  int nmax;
67  ergo_real multipoleEuclideanNormList[MAX_MULTIPOLE_DEGREE_BASIC+1];
69 
70 typedef struct
71 {
72  int index_1;
73  int index_2;
78  int pairIndex;
81 
82 #ifndef BASIS_FUNC_POLY_MAX_DEGREE
83 #error The constant BASIS_FUNC_POLY_MAX_DEGREE must be defined.
84 #endif
85 #if BASIS_FUNC_POLY_MAX_DEGREE<6
86 #define MAX_NO_OF_BASIS_FUNC_PAIRS_PER_CHUNK 1000
87 #else
88 #define MAX_NO_OF_BASIS_FUNC_PAIRS_PER_CHUNK 10000
89 #endif
90 
91 typedef struct
92 {
100 } chunk_struct;
101 
102 
104  std::vector<minimal_distr_struct> minimalDistrList;
105  std::vector<distr_group_struct> groupList;
106  std::vector<cluster_struct> clusterList;
107  std::vector<chunk_struct> chunkList;
108  std::vector<basis_func_pair_struct> basisFuncPairList;
109  std::vector<int> basisFuncListForChunks;
110  std::vector<int> basisFuncListForChunks_map;
111  std::vector<int> basisFuncList;
112  std::vector<i_j_val_struct> spMatElementList;
113  std::vector<int> spMatCountList;
114  std::vector<int> spMatIdxList;
125  minimalDistrCount(0),
126  groupCount(0),
127  clusterCount(0),
128  chunkCount(0),
129  basisFuncPairCount(0),
130  basisFuncForChunksCount(0),
131  basisFuncListCount(0),
132  maxExtent(0),
133  maxDistanceOutsideBox(0)
134  {}
135 };
136 
137 
138 
139 
140 int
141 organize_distributions(const IntegralInfo & integralInfo,
142  DistributionSpecStructLabeled* distrList_in,
143  int distrCount,
144  distr_org_struct* result,
145  const ergo_real* boxCenterCoords,
146  ergo_real boxWidth);
147 
148 #endif
ergo_real maxLimitingFactorForCluster
Definition: organize_distrs.h:66
double ergo_real
Definition: realtype.h:53
int index_2
Definition: organize_distrs.h:73
int index_1_mod
Definition: organize_distrs.h:74
int groupStartIndex
Definition: organize_distrs.h:64
std::vector< chunk_struct > chunkList
Definition: organize_distrs.h:107
Definition: organize_distrs.h:38
int nmax
Definition: organize_distrs.h:62
int basisFuncListCount
Definition: organize_distrs.h:121
ergo_real dmatElement
Definition: organize_distrs.h:79
int nmax
Definition: organize_distrs.h:42
int index_2_mod
Definition: organize_distrs.h:75
int pairIndex
Definition: organize_distrs.h:78
int groupCount
Definition: organize_distrs.h:116
Definition: organize_distrs.h:91
std::vector< minimal_distr_struct > minimalDistrList
Definition: organize_distrs.h:104
ergo_real maxSizeGroup
Definition: organize_distrs.h:45
int noOfGroups
Definition: organize_distrs.h:65
Definition: multipole.h:53
int index_inbox_2
Definition: organize_distrs.h:77
int clusterCount
Definition: organize_distrs.h:117
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:94
ergo_real maxDistanceOutsideBox
Definition: organize_distrs.h:123
std::vector< int > basisFuncListForChunks_map
Definition: organize_distrs.h:110
std::vector< i_j_val_struct > spMatElementList
Definition: organize_distrs.h:112
ergo_real maxExtentGroup
Definition: organize_distrs.h:46
Contains coefficients needed for quick integral evaluation.
Definition: integral_info.h:81
ergo_real maxLimitingFactorGroup
Definition: organize_distrs.h:47
ergo_real coeff
Definition: organize_distrs.h:57
std::vector< distr_group_struct > groupList
Definition: organize_distrs.h:105
int basisFuncPairCount
Definition: organize_distrs.h:119
int index_1
Definition: organize_distrs.h:72
int basisFuncPairListIndex
Definition: organize_distrs.h:96
int startIndex
Definition: organize_distrs.h:40
ergo_real exponent
Definition: organize_distrs.h:44
ergo_real maxExtent
Definition: organize_distrs.h:122
int global_debug_id
Definition: organize_distrs.h:99
int distrCount
Definition: organize_distrs.h:41
std::vector< basis_func_pair_struct > basisFuncPairList
Definition: organize_distrs.h:108
multipole_struct_small * multipolePtr
Definition: organize_distrs.h:49
std::vector< int > basisFuncListForChunks
Definition: organize_distrs.h:109
int chunkCount
Definition: organize_distrs.h:118
std::vector< int > spMatCountList
Definition: organize_distrs.h:113
Definition: organize_distrs.h:103
int index_inbox_1
Definition: organize_distrs.h:76
int basisFuncForChunkCount
Definition: organize_distrs.h:98
Definition: organize_distrs.h:53
distr_org_struct()
Definition: organize_distrs.h:124
int clusterStartIndex
Definition: organize_distrs.h:93
std::vector< int > spMatIdxList
Definition: organize_distrs.h:114
int basisFuncForChunksIndex
Definition: organize_distrs.h:97
int noOfClusters
Definition: organize_distrs.h:94
int minimalDistrCount
Definition: organize_distrs.h:115
int noOfBasisFuncPairs
Definition: organize_distrs.h:95
#define MAX_MULTIPOLE_DEGREE_BASIC
Definition: multipole.h:39
int basisFuncPairIndex
Definition: organize_distrs.h:55
Definition: organize_distrs.h:60
int basisFuncForChunksCount
Definition: organize_distrs.h:120
Definition: organize_distrs.h:70
int monomialIndex
Definition: organize_distrs.h:56
std::vector< cluster_struct > clusterList
Definition: organize_distrs.h:106
ergo_real exponent
Definition: organize_distrs.h:63
Definition: basisinfo.h:52
ergo_real maxAbsDmatElementGroup
Definition: organize_distrs.h:48
std::vector< int > basisFuncList
Definition: organize_distrs.h:111