ergo
organize_distrs.h
Go to the documentation of this file.
1 /* Ergo, version 3.2, a program for linear scaling electronic structure
2  * calculations.
3  * Copyright (C) 2012 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