00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026
00027
00028
00029
00039 #ifndef ORGANIZE_DISTRS_MM_HEADER
00040 #define ORGANIZE_DISTRS_MM_HEADER
00041
00042 #include "organize_distrs.h"
00043 #include "multipole.h"
00044 #include <vector>
00045
00046 struct distr_org_mm_struct {
00047 std::vector<multipole_struct_small> multipoleListForGroups;
00048 std::vector<multipole_struct_small> multipoleListForDistrs;
00049 struct Data {
00050 ergo_real multipolePoint[3];
00051 multipole_struct_large multipole;
00052 ergo_real maxMomentVectorNormForDistrsList[MAX_MULTIPOLE_DEGREE_BASIC+1];
00053 ergo_real chargeSum;
00054 Data();
00055 };
00056 Data data;
00057
00058 void writeToBuffer(char* dataBuffer, size_t const bufferSize) const;
00059 size_t getSize() const;
00060 void assignFromBuffer(char const * dataBuffer, size_t const bufferSize);
00061 };
00062
00063 struct distr_list_description_struct {
00064 distr_org_struct org;
00065 distr_org_mm_struct org_mm;
00066
00067 void writeToBuffer(char* dataBuffer, size_t const bufferSize) const;
00068 size_t getSize() const;
00069 void assignFromBuffer(char const * dataBuffer, size_t const bufferSize);
00070 };
00071
00072 int
00073 generate_multipoles_for_groups(const IntegralInfo & integralInfo,
00074 const distr_org_struct & org,
00075 distr_org_mm_struct & result_org_mm,
00076 ergo_real* averagePosList,
00077 int & avgPosCounter
00078 );
00079
00080 int
00081 get_multipole_pt_for_box(const ergo_real* boxCenterCoords,
00082 ergo_real boxWidth,
00083 const ergo_real* averagePosList,
00084 int avgPosCounter,
00085 ergo_real* resultMultipolePoint);
00086
00087 int
00088 translate_multipoles_for_box(distr_org_mm_struct & result_org_mm,
00089 const distr_org_struct & org,
00090 const MMTranslator & translator
00091 );
00092
00093 int
00094 combine_mm_info_for_child_boxes(distr_list_description_struct & result_box_branch,
00095 const distr_list_description_struct** child_box_branches,
00096 int noOfChildren,
00097 const MMTranslator & translator);
00098
00099
00100 #endif