ergo
organize_distrs.h
Go to the documentation of this file.
1 /* Ergo, version 3.8, a program for linear scaling electronic structure
2  * calculations.
3  * Copyright (C) 2019 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 
40 #ifndef ORGANIZE_DISTRS_HEADER
41 #define ORGANIZE_DISTRS_HEADER
42 
43 #include "output.h"
44 #include "multipole.h"
45 #include "simple_sparse_mat.h"
46 
47 #include <vector>
48 
49 
50 typedef struct
51 {
54  int nmax;
55  ergo_real centerCoords[3];
61  ergo_real multipoleEuclNormListForK[MAX_MULTIPOLE_DEGREE_BASIC+1];
63 
64 typedef struct
65 {
70 
71 typedef struct
72 {
73  int nmax;
78  ergo_real multipoleEuclNormListForK[MAX_MULTIPOLE_DEGREE_BASIC+1];
80 
81 typedef struct
82 {
83  int index_1;
84  int index_2;
89  int pairIndex;
92 
93 #ifndef BASIS_FUNC_POLY_MAX_DEGREE
94 #error The constant BASIS_FUNC_POLY_MAX_DEGREE must be defined.
95 #endif
96 #if BASIS_FUNC_POLY_MAX_DEGREE<6
97 #define MAX_NO_OF_BASIS_FUNC_PAIRS_PER_BATCH 1000
98 #else
99 #define MAX_NO_OF_BASIS_FUNC_PAIRS_PER_BATCH 10000
100 #endif
101 
102 typedef struct
103 {
111 } batch_struct;
112 
118 };
119 
120 
122  std::vector<minimal_distr_struct> minimalDistrList;
123  std::vector<distr_group_struct> groupList;
124  std::vector<cluster_struct> clusterList;
125  std::vector<batch_struct> batchList;
126  std::vector<basis_func_pair_struct> basisFuncPairList;
127  std::vector<int> basisFuncListForBatchs;
128  std::vector<int> basisFuncListForBatchs_map;
129  std::vector<int> basisFuncList;
130  std::vector<i_j_val_struct> spMatElementList;
131  std::vector<int> spMatCountList;
132  std::vector<int> spMatIdxList;
133  std::vector<basis_func_group_info_for_box> basisFuncGroupInfoListForK;
134  struct Data {
138  Data();
139  };
141  // Functions needed for CHT usage
142  void writeToBuffer(char* dataBuffer, size_t const bufferSize) const;
143  size_t getSize() const;
144  void assignFromBuffer(char const * dataBuffer, size_t const bufferSize);
145 };
146 
147 
148 int
149 organize_distributions(const IntegralInfo & integralInfo,
150  DistributionSpecStructLabeled* distrList_in,
151  int distrCount,
152  distr_org_struct* result,
153  const ergo_real* boxCenterCoords,
154  ergo_real boxWidth);
155 
156 #endif
template_blas_pow
Treal template_blas_pow(Treal x, Treal y)
basis_func_pair_struct::index_2
int index_2
Definition: organize_distrs.h:84
template_blas_sqrt
Treal template_blas_sqrt(Treal x)
multipole.h
Code for computing multipole moments, and multipole interaction and translation matrices.
i_j_val_struct::j
int j
Definition: simple_sparse_mat.h:44
distr_org_struct::basisFuncListForBatchs
std::vector< int > basisFuncListForBatchs
Definition: organize_distrs.h:127
pi.h
Constants for the number pi and some related numbers like sqrt(pi).
DistributionSpecStruct
Definition: basisinfo.h:50
basis_func_pair_struct::pairIndex
int pairIndex
Definition: organize_distrs.h:89
minimal_distr_struct::monomialIndex
int monomialIndex
Definition: organize_distrs.h:67
distr_org_struct
Definition: organize_distrs.h:121
MAX_MULTIPOLE_DEGREE_BASIC
#define MAX_MULTIPOLE_DEGREE_BASIC
Definition: multipole_prep.h:48
distr_org_struct::minimalDistrList
std::vector< minimal_distr_struct > minimalDistrList
Definition: organize_distrs.h:122
basis_func_pair_struct::dmatElement
ergo_real dmatElement
Definition: organize_distrs.h:90
distr_org_struct::basisFuncList
std::vector< int > basisFuncList
Definition: organize_distrs.h:129
LOG_CAT_ERROR
#define LOG_CAT_ERROR
Definition: output.h:47
DistributionSpecStruct::centerCoords
ergo_real centerCoords[3]
x0, y0, z0
Definition: basisinfo.h:54
ergo_real
double ergo_real
Definition: realtype.h:69
IntegralInfo::get_hermite_conversion_matrix_right_sparse
int get_hermite_conversion_matrix_right_sparse(int nmax, ergo_real a, i_j_val_struct *result) const
Definition: integral_info.cc:281
distr_org_struct::batchList
std::vector< batch_struct > batchList
Definition: organize_distrs.h:125
distr_org_struct::writeToBuffer
void writeToBuffer(char *dataBuffer, size_t const bufferSize) const
Definition: organize_distrs.cc:58
distr_group_struct
Definition: organize_distrs.h:51
spmat_multiply_matrices
int spmat_multiply_matrices(const i_j_val_struct *A, int nnzA, const i_j_val_struct *B, int nnzB, i_j_val_struct *C, int M, int N)
Definition: simple_sparse_mat.cc:81
distr_org_struct::assignFromBuffer
void assignFromBuffer(char const *dataBuffer, size_t const bufferSize)
Definition: organize_distrs.cc:94
distr_group_struct::maxAbsDmatElementGroup
ergo_real maxAbsDmatElementGroup
Definition: organize_distrs.h:60
distr_group_struct::maxExtentGroup
ergo_real maxExtentGroup
Definition: organize_distrs.h:58
basis_func_group_info_for_box::max_CS_factor
ergo_real max_CS_factor
Definition: organize_distrs.h:115
batch_struct::basisFuncPairListIndex
int basisFuncPairListIndex
Definition: organize_distrs.h:107
basis_func_group_info_for_box::maxMomentVectorNormList
ergo_real maxMomentVectorNormList[MAX_MULTIPOLE_DEGREE_BASIC+1]
Definition: organize_distrs.h:116
distr_group_struct::centerCoords
ergo_real centerCoords[3]
Definition: organize_distrs.h:55
template_blas_fabs
Treal template_blas_fabs(Treal x)
minimal_distr_struct
Definition: organize_distrs.h:65
distr_group_struct::nmax
int nmax
Definition: organize_distrs.h:54
distr_org_struct::groupList
std::vector< distr_group_struct > groupList
Definition: organize_distrs.h:123
basis_func_pair_struct::index_2_mod
int index_2_mod
Definition: organize_distrs.h:86
distr_org_struct::clusterList
std::vector< cluster_struct > clusterList
Definition: organize_distrs.h:124
cluster_struct
Definition: organize_distrs.h:72
basis_func_pair_struct::index_inbox_2
int index_inbox_2
Definition: organize_distrs.h:88
MAX_NO_OF_GROUPS_PER_CLUSTER
#define MAX_NO_OF_GROUPS_PER_CLUSTER
IntegralInfo::monomial_info
monomial_info_struct monomial_info
Definition: integral_info.h:105
distr_group_struct::multipoleEuclNormListForK
ergo_real multipoleEuclNormListForK[MAX_MULTIPOLE_DEGREE_BASIC+1]
Definition: organize_distrs.h:61
pi
#define pi
Definition: pi.h:57
basis_func_group_info_for_box::basisFuncGroupIndex
int basisFuncGroupIndex
Definition: organize_distrs.h:114
monomial_info_struct::no_of_monomials_list
int no_of_monomials_list[MONOMIAL_N_MAX+1]
Definition: monomial_info.h:61
std_vector_getSize
size_t std_vector_getSize(const VectorType &v)
Definition: serialization_tools.h:47
distr_org_struct::spMatCountList
std::vector< int > spMatCountList
Definition: organize_distrs.h:131
distr_group_struct::distrCount
int distrCount
Definition: organize_distrs.h:53
distr_org_struct::spMatIdxList
std::vector< int > spMatIdxList
Definition: organize_distrs.h:132
std_vector_assignFromBuffer_and_move_ptr
void std_vector_assignFromBuffer_and_move_ptr(VectorType &v, ConstCharPtrType &p, const char *bufEndPtr)
Definition: serialization_tools.h:69
monomial_info_struct::monomial_index_list
int monomial_index_list[MONOMIAL_N_MAX+1][MONOMIAL_N_MAX+1][MONOMIAL_N_MAX+1]
Definition: monomial_info.h:62
monomial_struct::iz
int iz
Definition: monomial_info.h:54
distr_group_struct::maxLimitingFactorGroup
ergo_real maxLimitingFactorGroup
Definition: organize_distrs.h:59
organize_distributions
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:180
IntegralInfo
Contains coefficients needed for quick integral evaluation.
Definition: integral_info.h:94
simple_sparse_mat.h
Simple sparse matrix implementation.
cluster_struct::noOfGroups
int noOfGroups
Definition: organize_distrs.h:76
NO_OF_SORT_BUCKETS
#define NO_OF_SORT_BUCKETS
DistributionSpecStructLabeled
Definition: basisinfo.h:58
MAX_NO_OF_BASIS_FUNC_PAIRS_PER_BATCH
#define MAX_NO_OF_BASIS_FUNC_PAIRS_PER_BATCH
Definition: organize_distrs.h:97
do_sort_int_list
static void do_sort_int_list(int *list, int n)
Definition: organize_distrs.cc:118
A
#define A
distr_org_struct::Data::Data
Data()
Definition: organize_distrs.cc:52
serialization_tools.h
Tools to simplify serialization of e.g. std::vector objects, useful when writing serialization functi...
batch_struct
Definition: organize_distrs.h:103
minimal_distr_struct::coeff
ergo_real coeff
Definition: organize_distrs.h:68
monomial_struct::iy
int iy
Definition: monomial_info.h:53
distr_org_struct::basisFuncGroupInfoListForK
std::vector< basis_func_group_info_for_box > basisFuncGroupInfoListForK
Definition: organize_distrs.h:133
basis_func_pair_struct::index_inbox_1
int index_inbox_1
Definition: organize_distrs.h:87
distr_org_struct::getSize
size_t getSize() const
Definition: organize_distrs.cc:77
basis_func_pair_struct
Definition: organize_distrs.h:82
basis_func_pair_struct::index_1
int index_1
Definition: organize_distrs.h:83
i_j_val_struct::value
ergo_real value
Definition: simple_sparse_mat.h:46
distr_org_struct::Data::maxNoOfMonomials
int maxNoOfMonomials
Definition: organize_distrs.h:137
batch_struct::basisFuncForBatchsIndex
int basisFuncForBatchsIndex
Definition: organize_distrs.h:108
LOG_AREA_INTEGRALS
#define LOG_AREA_INTEGRALS
Definition: output.h:60
std_vector_writeToBuffer_and_move_ptr
void std_vector_writeToBuffer_and_move_ptr(const VectorType &v, CharPtrType &p)
Definition: serialization_tools.h:56
compute_multipole_moments
int compute_multipole_moments(const IntegralInfo &integralInfo, const DistributionSpecStruct *distr, multipole_struct_small *result)
Definition: multipole.cc:49
minimal_distr_struct::basisFuncPairIndex
int basisFuncPairIndex
Definition: organize_distrs.h:66
multipole_struct_small::degree
int degree
Definition: multipole_prep.h:64
multipole_struct_small
Definition: multipole_prep.h:62
get_conversion_matrix_for_group
static void get_conversion_matrix_for_group(const IntegralInfo &integralInfo, const distr_group_struct &group, int n1max, const minimal_distr_struct *minimalDistrList_1, int noOfBasisFuncPairs_1, const i_j_val_struct *convMat1_sp, int convMat1_nnz, i_j_val_struct *BB1_x_Ai1_x_convMat1_sp_result, int &BB1_x_Ai1_x_convMat1_nnz_result)
Definition: organize_distrs.cc:134
DistributionSpecStruct::monomialInts
char monomialInts[4]
nx, ny, nz
Definition: basisinfo.h:55
basis_func_group_info_for_box
Definition: organize_distrs.h:113
distr_group_struct::maxSizeGroup
ergo_real maxSizeGroup
Definition: organize_distrs.h:57
distr_org_struct::basisFuncPairList
std::vector< basis_func_pair_struct > basisFuncPairList
Definition: organize_distrs.h:126
DistributionSpecStruct::coeff
ergo_real coeff
Coefficient A.
Definition: basisinfo.h:51
distr_org_struct::basisFuncListForBatchs_map
std::vector< int > basisFuncListForBatchs_map
Definition: organize_distrs.h:128
multipole_struct_small::momentList
ergo_real momentList[MAX_NO_OF_MOMENTS_PER_MULTIPOLE_BASIC]
Definition: multipole_prep.h:66
organize_distrs.h
Code for organizing a given set of primitive Gaussian distributions (typically coming from basis func...
organize_distributions
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:180
cluster_struct::nmax
int nmax
Definition: organize_distrs.h:73
distr_group_struct::startIndex
int startIndex
Definition: organize_distrs.h:52
copy_vector
void copy_vector(std::vector< T > &dest, std::vector< T > &src, int count)
Definition: organize_distrs.cc:172
cluster_struct::exponent
ergo_real exponent
Definition: organize_distrs.h:74
DistributionSpecStructLabeled::distr
DistributionSpecStruct distr
Definition: basisinfo.h:65
batch_struct::global_debug_id
int global_debug_id
Definition: organize_distrs.h:110
distr_org_struct::Data::maxExtent
ergo_real maxExtent
Definition: organize_distrs.h:135
distr_org_struct::spMatElementList
std::vector< i_j_val_struct > spMatElementList
Definition: organize_distrs.h:130
distr_org_struct::Data
Definition: organize_distrs.h:134
batch_struct::clusterStartIndex
int clusterStartIndex
Definition: organize_distrs.h:104
cluster_struct::maxLimitingFactorForCluster
ergo_real maxLimitingFactorForCluster
Definition: organize_distrs.h:77
monomial_info_struct::monomial_list
monomial_struct * monomial_list
Definition: monomial_info.h:60
do_output
void do_output(int logCategory, int logArea, const char *format,...)
Definition: output.cc:53
monomial_struct::ix
int ix
Definition: monomial_info.h:52
basis_func_pair_struct::index_1_mod
int index_1_mod
Definition: organize_distrs.h:85
batch_struct::noOfClusters
int noOfClusters
Definition: organize_distrs.h:105
spmat_sort_elements
int spmat_sort_elements(i_j_val_struct *A, int nnzA)
Definition: simple_sparse_mat.cc:60
basis_func_group_info_for_box::maxMultipoleDegree
int maxMultipoleDegree
Definition: organize_distrs.h:117
distr_org_struct::Data::maxDistanceOutsideBox
ergo_real maxDistanceOutsideBox
Definition: organize_distrs.h:136
distr_group_struct::exponent
ergo_real exponent
Definition: organize_distrs.h:56
DistributionSpecStruct::exponent
ergo_real exponent
exponent alfa
Definition: basisinfo.h:52
batch_struct::noOfBasisFuncPairs
int noOfBasisFuncPairs
Definition: organize_distrs.h:106
distr_org_struct::data
Data data
Definition: organize_distrs.h:140
i_j_val_struct::i
int i
Definition: simple_sparse_mat.h:43
i_j_val_struct
Definition: simple_sparse_mat.h:42
batch_struct::basisFuncForBatchCount
int basisFuncForBatchCount
Definition: organize_distrs.h:109
output.h
Functionality for writing output messages to a text file.
cluster_struct::groupStartIndex
int groupStartIndex
Definition: organize_distrs.h:75