Code for computing multipole moments, and multipole interaction and translation matrices. More...
#include <memory.h>
#include <stdio.h>
#include <stdlib.h>
#include <math.h>
#include "multipole.h"
#include "output.h"
#include "integrals_general.h"
Classes | |
struct | l_m_struct |
Functions | |
static ergo_real | slow_factorial (int n) |
static ergo_real | get_lm_factor_slow (int l, int m) |
static ergo_real | get_lm_factor (int l, int m) |
static void | get_l_m_from_index (int index, int *result_l, int *result_m) |
int | init_multipole_code () |
int | compute_multipole_moments (const IntegralInfo &integralInfo, const DistributionSpecStruct *distr, multipole_struct_small *result) |
int | setup_multipole_maxAbsMomentList (multipole_struct_large *multipole) |
Variables | |
static int | global_initialized_flag = 0 |
static ergo_real | global_lm_factor_list [MAX_MULTIPOLE_DEGREE+1][MAX_MULTIPOLE_DEGREE+1] |
static l_m_struct | global_l_m_list [MAX_NO_OF_MOMENTS_PER_MULTIPOLE] |
Code for computing multipole moments, and multipole interaction and translation matrices.
int compute_multipole_moments | ( | const IntegralInfo & | integralInfo, | |
const DistributionSpecStruct * | distr, | |||
multipole_struct_small * | result | |||
) |
References IntegralInfo::basis_func_poly_list, DistributionSpecStruct_::centerCoords, multipole_struct_small::centerCoords, basis_func_term_struct::coeff, DistributionSpecStruct_::coeff, compute_integral_of_simple_prim(), multipole_struct_small::degree, do_output(), LOG_AREA_INTEGRALS, LOG_CAT_ERROR, MAX_MULTIPOLE_DEGREE_BASIC, MAX_NO_OF_MOMENTS_PER_MULTIPOLE_BASIC, multipole_struct_small::momentList, basis_func_term_struct::monomialInts, DistributionSpecStruct_::monomialInts, IntegralInfo::no_of_basis_func_polys, multipole_struct_small::noOfMoments, basis_func_poly_struct::noOfTerms, basis_func_poly_struct::scaledSolidHarmonicPrefactor, and basis_func_poly_struct::termList.
Referenced by compute_J_by_boxes_linear(), compute_K_by_boxes(), compute_V_linear(), and execute_joblist_J_fmm_shared().
static void get_l_m_from_index | ( | int | index, | |
int * | result_l, | |||
int * | result_m | |||
) | [static] |
Referenced by init_multipole_code().
static ergo_real get_lm_factor | ( | int | l, | |
int | m | |||
) | [static] |
References global_lm_factor_list.
Referenced by MMInteractor::getInteractionMatrix(), and MMTranslator::getTranslationMatrix().
static ergo_real get_lm_factor_slow | ( | int | l, | |
int | m | |||
) | [static] |
References slow_factorial().
Referenced by init_multipole_code().
int init_multipole_code | ( | ) |
References A, get_l_m_from_index(), get_lm_factor_slow(), global_initialized_flag, global_lm_factor_list, MAX_MULTIPOLE_DEGREE, and MAX_NO_OF_MOMENTS_PER_MULTIPOLE.
Referenced by compute_J_by_boxes_linear(), compute_V_linear(), and MMLimitTable::init().
int setup_multipole_maxAbsMomentList | ( | multipole_struct_large * | multipole | ) |
static ergo_real slow_factorial | ( | int | n | ) | [static] |
Referenced by get_lm_factor_slow().
int global_initialized_flag = 0 [static] |
Referenced by init_multipole_code(), MMInteractor::MMInteractor(), and MMTranslator::MMTranslator().
l_m_struct global_l_m_list[MAX_NO_OF_MOMENTS_PER_MULTIPOLE] [static] |
ergo_real global_lm_factor_list[MAX_MULTIPOLE_DEGREE+1][MAX_MULTIPOLE_DEGREE+1] [static] |
Referenced by get_lm_factor(), and init_multipole_code().