ergo
organize_distrs_mm.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 
39 #ifndef ORGANIZE_DISTRS_MM_HEADER
40 #define ORGANIZE_DISTRS_MM_HEADER
41 
42 #include "organize_distrs.h"
43 #include "multipole.h"
44 #include <vector>
45 
47  std::vector<multipole_struct_small> multipoleListForGroups;
48  std::vector<multipole_struct_small> multipoleListForDistrs; // For CHT usage
49  struct Data {
54  Data();
55  };
57  // Functions needed for CHT usage
58  void writeToBuffer(char* dataBuffer, size_t const bufferSize) const;
59  size_t getSize() const;
60  void assignFromBuffer(char const * dataBuffer, size_t const bufferSize);
61 };
62 
66  // Functions needed for CHT usage
67  void writeToBuffer(char* dataBuffer, size_t const bufferSize) const;
68  size_t getSize() const;
69  void assignFromBuffer(char const * dataBuffer, size_t const bufferSize);
70 };
71 
72 int
73 generate_multipoles_for_groups(const IntegralInfo & integralInfo,
74  const distr_org_struct & org,
75  distr_org_mm_struct & result_org_mm,
76  ergo_real* averagePosList,
77  int & avgPosCounter
78  );
79 
80 int
81 get_multipole_pt_for_box(const ergo_real* boxCenterCoords,
82  ergo_real boxWidth,
83  const ergo_real* averagePosList,
84  int avgPosCounter,
85  ergo_real* resultMultipolePoint);
86 
87 int
89  const distr_org_struct & org,
90  const MMTranslator & translator
91  );
92 
93 int
95  const distr_list_description_struct** child_box_branches,
96  int noOfChildren,
97  const MMTranslator & translator);
98 
99 
100 #endif
multipole_struct_large::degree
int degree
Definition: multipole_prep.h:54
template_blas_sqrt
Treal template_blas_sqrt(Treal x)
MMTranslator
Definition: multipole.h:51
combine_mm_info_for_child_boxes
int combine_mm_info_for_child_boxes(distr_list_description_struct &result_box_branch, const distr_list_description_struct **child_box_branches, int noOfChildren, const MMTranslator &translator)
Definition: organize_distrs_mm.cc:308
get_multipole_pt_for_box
int get_multipole_pt_for_box(const ergo_real *boxCenterCoords, ergo_real boxWidth, const ergo_real *averagePosList, int avgPosCounter, ergo_real *resultMultipolePoint)
Definition: organize_distrs_mm.cc:212
generate_multipoles_for_groups
int generate_multipoles_for_groups(const IntegralInfo &integralInfo, const distr_org_struct &org, distr_org_mm_struct &result_org_mm, ergo_real *averagePosList, int &avgPosCounter)
Definition: organize_distrs_mm.cc:108
multipole.h
Code for computing multipole moments, and multipole interaction and translation matrices.
DistributionSpecStruct
Definition: basisinfo.h:50
combine_mm_info_for_child_boxes
int combine_mm_info_for_child_boxes(distr_list_description_struct &result_box_branch, const distr_list_description_struct **child_box_branches, int noOfChildren, const MMTranslator &translator)
Definition: organize_distrs_mm.cc:308
distr_list_description_struct::org_mm
distr_org_mm_struct org_mm
Definition: organize_distrs_mm.h:65
distr_org_struct
Definition: organize_distrs.h:121
distr_org_struct::minimalDistrList
std::vector< minimal_distr_struct > minimalDistrList
Definition: organize_distrs.h:122
MAX_MULTIPOLE_DEGREE_BASIC
#define MAX_MULTIPOLE_DEGREE_BASIC
Definition: multipole_prep.h:48
LOG_CAT_ERROR
#define LOG_CAT_ERROR
Definition: output.h:47
multipole_struct_large::centerCoords
ergo_real centerCoords[3]
Definition: multipole_prep.h:53
DistributionSpecStruct::centerCoords
ergo_real centerCoords[3]
x0, y0, z0
Definition: basisinfo.h:54
ergo_real
double ergo_real
Definition: realtype.h:69
distr_org_mm_struct::Data::chargeSum
ergo_real chargeSum
Definition: organize_distrs_mm.h:53
distr_org_struct::batchList
std::vector< batch_struct > batchList
Definition: organize_distrs.h:125
distr_group_struct
Definition: organize_distrs.h:51
distr_group_struct::centerCoords
ergo_real centerCoords[3]
Definition: organize_distrs.h:55
distr_org_mm_struct
Definition: organize_distrs_mm.h:46
distr_org_mm_struct::getSize
size_t getSize() const
Definition: organize_distrs_mm.cc:62
MAX_MULTIPOLE_DEGREE
#define MAX_MULTIPOLE_DEGREE
Definition: multipole_prep.h:45
distr_org_struct::groupList
std::vector< distr_group_struct > groupList
Definition: organize_distrs.h:123
MAX_NO_OF_MOMENTS_PER_MULTIPOLE_BASIC
#define MAX_NO_OF_MOMENTS_PER_MULTIPOLE_BASIC
Definition: multipole_prep.h:49
distr_org_struct::clusterList
std::vector< cluster_struct > clusterList
Definition: organize_distrs.h:124
B
#define B
IntegralInfo::monomial_info
monomial_info_struct monomial_info
Definition: integral_info.h:105
distr_list_description_struct::getSize
size_t getSize() const
Definition: organize_distrs_mm.cc:92
distr_list_description_struct::writeToBuffer
void writeToBuffer(char *dataBuffer, size_t const bufferSize) const
Definition: organize_distrs_mm.cc:82
std_vector_getSize
size_t std_vector_getSize(const VectorType &v)
Definition: serialization_tools.h:47
multipole_struct_large::momentList
ergo_real momentList[MAX_NO_OF_MOMENTS_PER_MULTIPOLE]
Definition: multipole_prep.h:56
distr_org_mm_struct::Data::multipolePoint
ergo_real multipolePoint[3]
Definition: organize_distrs_mm.h:50
multipole_struct_large::noOfMoments
int noOfMoments
Definition: multipole_prep.h:55
distr_group_struct::distrCount
int distrCount
Definition: organize_distrs.h:53
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
distr_org_mm_struct::Data
Definition: organize_distrs_mm.h:49
distr_org_mm_struct::assignFromBuffer
void assignFromBuffer(char const *dataBuffer, size_t const bufferSize)
Definition: organize_distrs_mm.cc:69
distr_org_mm_struct::Data::maxMomentVectorNormForDistrsList
ergo_real maxMomentVectorNormForDistrsList[MAX_MULTIPOLE_DEGREE_BASIC+1]
Definition: organize_distrs_mm.h:52
multipole_struct_large
Definition: multipole_prep.h:52
monomial_struct::iz
int iz
Definition: monomial_info.h:54
IntegralInfo
Contains coefficients needed for quick integral evaluation.
Definition: integral_info.h:94
get_multipole_pt_for_box
int get_multipole_pt_for_box(const ergo_real *boxCenterCoords, ergo_real boxWidth, const ergo_real *averagePosList, int avgPosCounter, ergo_real *resultMultipolePoint)
Definition: organize_distrs_mm.cc:212
generate_multipoles_for_groups
int generate_multipoles_for_groups(const IntegralInfo &integralInfo, const distr_org_struct &org, distr_org_mm_struct &result_org_mm, ergo_real *averagePosList, int &avgPosCounter)
Definition: organize_distrs_mm.cc:108
distr_org_mm_struct::Data::multipole
multipole_struct_large multipole
Definition: organize_distrs_mm.h:51
distr_org_mm_struct::multipoleListForDistrs
std::vector< multipole_struct_small > multipoleListForDistrs
Definition: organize_distrs_mm.h:48
MAX_NO_OF_MOMENTS_PER_MULTIPOLE
#define MAX_NO_OF_MOMENTS_PER_MULTIPOLE
Definition: multipole_prep.h:46
translate_multipoles_for_box
int translate_multipoles_for_box(distr_org_mm_struct &result_org_mm, const distr_org_struct &org, const MMTranslator &translator)
Definition: organize_distrs_mm.cc:243
distr_org_mm_struct::writeToBuffer
void writeToBuffer(char *dataBuffer, size_t const bufferSize) const
Definition: organize_distrs_mm.cc:53
distr_list_description_struct::org
distr_org_struct org
Definition: organize_distrs_mm.h:64
A
#define A
serialization_tools.h
Tools to simplify serialization of e.g. std::vector objects, useful when writing serialization functi...
multipole_struct_small::noOfMoments
int noOfMoments
Definition: multipole_prep.h:65
monomial_struct::iy
int iy
Definition: monomial_info.h:53
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
multipole_struct_small::degree
int degree
Definition: multipole_prep.h:64
multipole_struct_small
Definition: multipole_prep.h:62
distr_list_description_struct
Definition: organize_distrs_mm.h:63
DistributionSpecStruct::monomialInts
char monomialInts[4]
nx, ny, nz
Definition: basisinfo.h:55
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
multipole_struct_small::centerCoords
ergo_real centerCoords[3]
Definition: multipole_prep.h:63
distr_org_mm_struct::Data::Data
Data()
Definition: organize_distrs_mm.cc:45
distr_list_description_struct::assignFromBuffer
void assignFromBuffer(char const *dataBuffer, size_t const bufferSize)
Definition: organize_distrs_mm.cc:96
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...
translate_multipoles_for_box
int translate_multipoles_for_box(distr_org_mm_struct &result_org_mm, const distr_org_struct &org, const MMTranslator &translator)
Definition: organize_distrs_mm.cc:243
distr_org_mm_struct::multipoleListForGroups
std::vector< multipole_struct_small > multipoleListForGroups
Definition: organize_distrs_mm.h:47
distr_group_struct::startIndex
int startIndex
Definition: organize_distrs.h:52
MMTranslator::getTranslationMatrix
int getTranslationMatrix(ergo_real dx, ergo_real dy, ergo_real dz, int l_1, int l_2, ergo_real *result_W) const
Definition: multipole.cc:146
distr_org_mm_struct::data
Data data
Definition: organize_distrs_mm.h:56
setup_multipole_maxAbsMomentList
int setup_multipole_maxAbsMomentList(multipole_struct_large *multipole)
Definition: multipole.cc:418
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
distr_group_struct::exponent
ergo_real exponent
Definition: organize_distrs.h:56
DistributionSpecStruct::exponent
ergo_real exponent
exponent alfa
Definition: basisinfo.h:52
distr_org_struct::data
Data data
Definition: organize_distrs.h:140
organize_distrs_mm.h
Code for organizing a given set of primitive Gaussian distributions (typically coming from basis func...