ergo
organize_distrs_mm.h
Go to the documentation of this file.
1/* Ergo, version 3.8.2, a program for linear scaling electronic structure
2 * calculations.
3 * Copyright (C) 2023 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
38
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
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
72int
74 const distr_org_struct & org,
75 distr_org_mm_struct & result_org_mm,
76 ergo_real* averagePosList,
77 int & avgPosCounter
78 );
79
80int
81get_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
87int
89 const distr_org_struct & org,
90 const MMTranslator & translator
91 );
92
93int
95 const distr_list_description_struct** child_box_branches,
96 int noOfChildren,
97 const MMTranslator & translator);
98
99
100#endif
Contains coefficients needed for quick integral evaluation.
Definition integral_info.h:94
Definition multipole.h:51
Code for computing multipole moments, and multipole interaction and translation matrices.
#define MAX_MULTIPOLE_DEGREE_BASIC
Definition multipole_prep.h:48
Code for organizing a given set of primitive Gaussian distributions (typically coming from basis func...
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
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 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
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
Definition organize_distrs_mm.h:63
size_t getSize() const
Definition organize_distrs_mm.cc:92
void assignFromBuffer(char const *dataBuffer, size_t const bufferSize)
Definition organize_distrs_mm.cc:96
distr_org_struct org
Definition organize_distrs_mm.h:64
void writeToBuffer(char *dataBuffer, size_t const bufferSize) const
Definition organize_distrs_mm.cc:82
distr_org_mm_struct org_mm
Definition organize_distrs_mm.h:65
Definition organize_distrs_mm.h:49
ergo_real chargeSum
Definition organize_distrs_mm.h:53
ergo_real maxMomentVectorNormForDistrsList[MAX_MULTIPOLE_DEGREE_BASIC+1]
Definition organize_distrs_mm.h:52
ergo_real multipolePoint[3]
Definition organize_distrs_mm.h:50
multipole_struct_large multipole
Definition organize_distrs_mm.h:51
Data()
Definition organize_distrs_mm.cc:45
Definition organize_distrs_mm.h:46
void writeToBuffer(char *dataBuffer, size_t const bufferSize) const
Definition organize_distrs_mm.cc:53
void assignFromBuffer(char const *dataBuffer, size_t const bufferSize)
Definition organize_distrs_mm.cc:69
std::vector< multipole_struct_small > multipoleListForGroups
Definition organize_distrs_mm.h:47
Data data
Definition organize_distrs_mm.h:56
size_t getSize() const
Definition organize_distrs_mm.cc:62
std::vector< multipole_struct_small > multipoleListForDistrs
Definition organize_distrs_mm.h:48
Definition organize_distrs.h:121
Definition multipole_prep.h:52