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
00038 #ifndef MULTIPOLE_HEADER
00039 #define MULTIPOLE_HEADER
00040
00041 #include "realtype.h"
00042 #include "integral_info.h"
00043 #include "basisinfo.h"
00044 #include "multipole_prep.h"
00045
00046 int
00047 compute_multipole_moments(const IntegralInfo& integralInfo,
00048 const DistributionSpecStruct* distr,
00049 multipole_struct_small* result);
00050
00051 class MMTranslator {
00052 static const int MMDP1 = MAX_MULTIPOLE_DEGREE+1;
00053 ergo_real *buffer_W_cc;
00054 ergo_real *buffer_W_cs;
00055 ergo_real *buffer_W_sc;
00056 ergo_real *buffer_W_ss;
00057 const MultipolePrepManager & multipolePrep;
00058 public:
00059 MMTranslator(const MultipolePrepManager & multipolePrepManager);
00060 ~MMTranslator();
00061 int getTranslationMatrix(ergo_real dx,
00062 ergo_real dy,
00063 ergo_real dz,
00064 int l_1,
00065 int l_2,
00066 ergo_real* result_W) const;
00067 };
00068
00069 class MMInteractor {
00070 static const int MMDP1 = MAX_MULTIPOLE_DEGREE+1;
00071 ergo_real *buffer_T_cc;
00072 ergo_real *buffer_T_cs;
00073 ergo_real *buffer_T_sc;
00074 ergo_real *buffer_T_ss;
00075 const MultipolePrepManager & multipolePrep;
00076 public:
00077 MMInteractor(const MultipolePrepManager & multipolePrepManager);
00078 ~MMInteractor();
00079 int getInteractionMatrix(ergo_real dx,
00080 ergo_real dy,
00081 ergo_real dz,
00082 int l_1,
00083 int l_2,
00084 ergo_real* result_T);
00085 };
00086
00087 int
00088 setup_multipole_maxAbsMomentList(multipole_struct_large* multipole);
00089
00090 #endif