ergo
organize_distrs_mm.h
Go to the documentation of this file.
1 /* Ergo, version 3.7, a program for linear scaling electronic structure
2  * calculations.
3  * Copyright (C) 2018 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
distr_org_mm_struct org_mm
Definition: organize_distrs_mm.h:65
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
double ergo_real
Definition: realtype.h:69
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
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
Definition: multipole.h:51
Code for organizing a given set of primitive Gaussian distributions (typically coming from basis func...
Data()
Definition: organize_distrs_mm.cc:45
void writeToBuffer(char *dataBuffer, size_t const bufferSize) const
Definition: organize_distrs_mm.cc:82
void assignFromBuffer(char const *dataBuffer, size_t const bufferSize)
Definition: organize_distrs_mm.cc:96
Definition: organize_distrs_mm.h:49
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
ergo_real multipolePoint[3]
Definition: organize_distrs_mm.h:50
std::vector< multipole_struct_small > multipoleListForDistrs
Definition: organize_distrs_mm.h:48
Definition: organize_distrs_mm.h:46
size_t getSize() const
Definition: organize_distrs_mm.cc:62
Contains coefficients needed for quick integral evaluation.
Definition: integral_info.h:93
Code for computing multipole moments, and multipole interaction and translation matrices.
#define MAX_MULTIPOLE_DEGREE_BASIC
Definition: multipole_prep.h:48
void assignFromBuffer(char const *dataBuffer, size_t const bufferSize)
Definition: organize_distrs_mm.cc:69
multipole_struct_large multipole
Definition: organize_distrs_mm.h:51
ergo_real maxMomentVectorNormForDistrsList[MAX_MULTIPOLE_DEGREE_BASIC+1]
Definition: organize_distrs_mm.h:52
size_t getSize() const
Definition: organize_distrs_mm.cc:92
Definition: organize_distrs.h:121
void writeToBuffer(char *dataBuffer, size_t const bufferSize) const
Definition: organize_distrs_mm.cc:53
Data data
Definition: organize_distrs_mm.h:56
Definition: organize_distrs_mm.h:63
Definition: multipole_prep.h:51
distr_org_struct org
Definition: organize_distrs_mm.h:64
std::vector< multipole_struct_small > multipoleListForGroups
Definition: organize_distrs_mm.h:47
ergo_real chargeSum
Definition: organize_distrs_mm.h:53