integrals_2el_coulomb.cc File Reference

#include <cstring>
#include <cstdio>
#include <pthread.h>
#include "integrals_2el_coulomb.h"
#include "integrals_2el_utils.h"
#include "mm_limit_table.h"
#include "basis_func_pair_list.h"
#include "integrals_2el_repeating.h"
#include "integrals_general.h"
#include "utilities.h"
#include "pi.h"

Classes

struct  job_list_standard_entry_J_struct
struct  job_list_multipole_entry_J_struct
struct  abcd_struct
struct  J_std_joblist_thread_struct
struct  JFMMWorkerData

Defines

#define set_abcd_list_item_macro(i, A, B, C, D, v, i1, i2)   list[i].a = A; list[i].b = B; list[i].c = C; list[i].d = D; list[i].densValue = v; list[i].idx1 = i1; list[i].idx2 = i2;

Functions

static int get_J_contribs_from_2_interacting_boxes_2 (const BasisInfoStruct &basisInfo, const IntegralInfo *integralInfo, int maxNoOfMonomials, ergo_real *result_J_list, const minimal_distr_struct *minimalDistrList_1, int noOfGroups_1, const distr_group_struct *groupList_1, const minimal_distr_struct *minimalDistrList_2, int noOfGroups_2, const distr_group_struct *groupList_2, const cluster_struct *clusterList_1, int nClusters_1, const cluster_struct *clusterList_2, int nClusters_2, const chunk_struct *chunkList_1, int nChunks_1, const chunk_struct *chunkList_2, int nChunks_2, const basis_func_pair_struct *basisFuncPairList_1, const basis_func_pair_struct *basisFuncPairList_2, int interactionWithSelf, ergo_real threshold, JK_contribs_buffer_struct *bufferStructPtr)
static int do_multipole_interaction_between_2_boxes_branches (const distr_list_description_struct *distrDescription_1, const multipole_struct_large *branchMultipole, const multipole_struct_small *multipoleList_1, ergo_real *result_J_list, ergo_real threshold, int *largest_L_used_so_far, MMInteractor &interactor)
static int add_multipole_jobs_for_2_boxes_branches_recursive (int multipoleBoxIndex, int multipoleBranchIndex, int n, const box_struct *boxList, int boxIndex, int branchIndex, int numberOfLevels, int currLevel, job_list_multipole_entry_J_struct *jobList_multipole, int maxNoOfJobs_multipole)
static ergo_real get_min_distance_from_point_to_box (const ergo_real *boxCenterCoords, ergo_real halfwidth, const ergo_real *point)
static int get_joblists_J_for_two_boxes_recursive (const BasisInfoStruct &basisInfo, const IntegralInfo *integralInfo, int maxNoOfMonomials, ergo_real threshold, const box_struct *boxList, int numberOfLevels, int currLevel, int boxIndex_1, int boxIndex_2, int branchIndex_1, int branchIndex_2, job_list_standard_entry_J_struct *jobList_standard, int maxNoOfJobs_standard, int *noOfNewJobs_standard, job_list_multipole_entry_J_struct *jobList_multipole, int maxNoOfJobs_multipole, int *noOfNewJobs_multipole)
static int get_list_of_labeled_distrs_maxLimitingFactor_linear (const BasisInfoStruct &basisInfo, const IntegralInfo *integralInfo, ergo_real threshold, const basis_func_index_pair_struct *basisFuncIndexPairList, int basisFuncIndexPairCount, ergo_real *resultMaxLimitingFactor)
static int get_list_of_labeled_distrs_linear (const BasisInfoStruct &basisInfo, const IntegralInfo *integralInfo, ergo_real threshold, DistributionSpecStructLabeled *resultList, int maxCountDistrs, ergo_real maxLimitingFactor, const basis_func_index_pair_struct *basisFuncIndexPairList, int basisFuncIndexPairCount, const ergo_real *D_list)
static int compare_multipole_jobs (const void *p1, const void *p2)
static void get_largest_and_smallest_extent_for_list_of_distributions (int n, const DistributionSpecStructLabeled *distrList, ergo_real *result_extent_min, ergo_real *result_extent_max)
static int get_max_no_of_monomials_for_list_of_distributions (int n, const DistributionSpecStructLabeled *distrList, const IntegralInfo *integralInfo)
static int get_branch_splitter_info (ergo_real *branchSplitterList, int maxNoOfBranches, const JK::Params &J_K_params, ergo_real toplevelBoxSize, ergo_real extent_max)
static int create_branches (int noOfBranches, const ergo_real *branchSplitterList, int distrCount, DistributionSpecStructLabeled *distrListOrdered, int noOfBoxesTopLevel, box_struct *boxListTopLevel)
static int execute_joblist_J_std_serial (int noOfJobs_J_standard, const job_list_standard_entry_J_struct *jobList_J_standard, const BasisInfoStruct &basisInfo, const IntegralInfo *integralInfo, int maxNoOfMonomials, ergo_real *result_J_list, const box_struct *boxList, ergo_real threshold)
static void * execute_joblist_J_std_thread_func (void *arg)
static int execute_joblist_J_std_threaded (int noOfThreads, int noOfJobs_J_standard, const job_list_standard_entry_J_struct *jobList_J_standard, const BasisInfoStruct &basisInfo, const IntegralInfo *integralInfo, int maxNoOfMonomials, ergo_real *result_J_list, int noOfBasisFuncIndexPairs, const box_struct *boxList, ergo_real threshold)
static int sort_list_of_multipole_jobs_fixed_boxIndex (job_list_multipole_entry_J_struct *jobList, int n)
static int sort_list_of_multipole_jobs (job_list_multipole_entry_J_struct *jobList, int n)
static int execute_joblist_J_fmm_shared (int jobIndexLo, int jobIndexHi, const IntegralInfo &integralInfo, const BasisInfoStruct &basisInfo, const JK::Params &J_K_params, const job_list_multipole_entry_J_struct *jobList_J_multipole, const box_struct *boxList, int maxnoOfMinimalDistrsPerBoxBranch, ergo_real *result_J_list, int *largest_L_used)
 executes given jobList using FMM.
static int execute_joblist_J_fmm_serial (const IntegralInfo &integralInfo, const BasisInfoStruct &basisInfo, const JK::Params &J_K_params, int noOfJobs_J_multipole, const job_list_multipole_entry_J_struct *jobList_J_multipole, const box_struct *boxList, int maxnoOfMinimalDistrsPerBoxBranch, ergo_real *result_J_list)
static void * execute_J_fmm_worker (void *arg)
static int execute_joblist_J_fmm_thread (int noOfThreads, int noOfBasisFuncIndexPairs, const IntegralInfo &integralInfo, const BasisInfoStruct &basisInfo, const JK::Params &J_K_params, int noOfJobs_J_multipole, const job_list_multipole_entry_J_struct *jobList_J_multipole, const box_struct *boxList, int maxnoOfMinimalDistrsPerBoxBranch, ergo_real *result_J_list)
 Compute the FMM part of the Coulomb matrix using threads.
int compute_J_by_boxes_linear (const BasisInfoStruct &basisInfo, const IntegralInfo *integralInfo, const JK::Params &J_K_params, const basis_func_index_pair_struct *basisFuncIndexPairList, int basisFuncIndexPairCount, const ergo_real *D_list, ergo_real *result_J_list, int noOfBasisFuncIndexPairs)
 Computes the Coulomb interaction.
int compute_J_by_boxes (const BasisInfoStruct &basisInfo, const IntegralInfo *integralInfo, const JK::Params &J_K_params, ergo_real *J, const ergo_real *dens)
int compute_J_by_boxes_nosymm (const BasisInfoStruct &basisInfo, const IntegralInfo *integralInfo, const JK::Params &J_K_params, ergo_real *J, const ergo_real *dens)

Variables

static const int HUGE_INTEGER_NUMBER = 2000000000

Define Documentation

#define set_abcd_list_item_macro ( i,
A,
B,
C,
D,
v,
i1,
i2   )     list[i].a = A; list[i].b = B; list[i].c = C; list[i].d = D; list[i].densValue = v; list[i].idx1 = i1; list[i].idx2 = i2;

Function Documentation

static int add_multipole_jobs_for_2_boxes_branches_recursive ( int  multipoleBoxIndex,
int  multipoleBranchIndex,
int  n,
const box_struct boxList,
int  boxIndex,
int  branchIndex,
int  numberOfLevels,
int  currLevel,
job_list_multipole_entry_J_struct jobList_multipole,
int  maxNoOfJobs_multipole 
) [static]
static int compare_multipole_jobs ( const void *  p1,
const void *  p2 
) [static]
int compute_J_by_boxes ( const BasisInfoStruct basisInfo,
const IntegralInfo integralInfo,
const JK::Params J_K_params,
ergo_real J,
const ergo_real dens 
)
int compute_J_by_boxes_linear ( const BasisInfoStruct basisInfo,
const IntegralInfo integralInfo,
const JK::Params J_K_params,
const basis_func_index_pair_struct basisFuncIndexPairList,
int  basisFuncIndexPairCount,
const ergo_real D_list,
ergo_real result_J_list,
int  noOfBasisFuncIndexPairs 
)

Computes the Coulomb interaction.

Parameters:
basisInfo 
integralInfo 
J_K_params the evaluation parameters, thresholds and all.
basisFuncIndexPairList 
basisFuncIndexPairCount the length of basisFuncIndexPairList.
D_list basisFuncIndexPairCount elements, with indices matching basisFuncIndexPairList.
result_J_list preallocated list that will contain the results.
noOfBasisFuncIndexPairs the length of result_J_list. happens to be always equal to basisFuncIndexPairCount

References A, B, box_struct::basicBox, minimal_distr_struct::basisFuncPairIndex, distr_org_struct::basisFuncPairList, chunk_struct::basisFuncPairListIndex, BoxSystem::boxList, box_struct::branchCountList, box_struct::branchIndexList, box_struct::branchList, multipole_struct_large::centerCoords, box_struct_basic::centerCoords, DistributionSpecStruct_::centerCoords, distr_group_struct::centerCoords, multipole_struct_small::centerCoords, distr_org_struct::chunkCount, distr_org_struct::chunkList, distr_org_struct::clusterList, chunk_struct::clusterStartIndex, DistributionSpecStruct_::coeff, minimal_distr_struct::coeff, compute_extent_for_list_of_distributions(), compute_multipole_moments(), create_box_system_and_reorder_distrs(), create_branches(), multipole_struct_large::degree, multipole_struct_small::degree, distr_group_struct::distrCount, basis_func_pair_struct::dmatElement, do_output(), execute_joblist_J_fmm_serial(), execute_joblist_J_fmm_thread(), execute_joblist_J_std_serial(), execute_joblist_J_std_threaded(), distr_group_struct::exponent, DistributionSpecStruct_::exponent, box_struct_basic::firstChildBoxIndex, JK::Params::fmm_box_size, get_branch_splitter_info(), get_joblists_J_for_two_boxes_recursive(), get_largest_and_smallest_extent_for_list_of_distributions(), get_list_of_labeled_distrs_linear(), get_list_of_labeled_distrs_maxLimitingFactor_linear(), get_max_abs_vector_element(), get_max_no_of_monomials_for_list_of_distributions(), getSafeMaxDistance(), MMTranslator::getTranslationMatrix(), distr_org_struct::groupCount, distr_org_struct::groupList, cluster_struct::groupStartIndex, HUGE_INTEGER_NUMBER, basis_func_pair_struct::index_1, basis_func_pair_struct::index_2, init_multipole_code(), monomial_struct::ix, monomial_struct::iy, monomial_struct::iz, BoxSystem::levelList, LOG_AREA_INTEGRALS, LOG_CAT_ERROR, LOG_CAT_INFO, MAX_MULTIPOLE_DEGREE, MAX_MULTIPOLE_DEGREE_BASIC, MAX_NO_OF_BRANCHES, MAX_NO_OF_MOMENTS_PER_MULTIPOLE, MAX_NO_OF_MOMENTS_PER_MULTIPOLE_BASIC, distr_org_struct::maxDistanceOutsideBox, distr_org_struct::maxExtent, distr_list_description_struct::maxMomentVectorNormForDistrsList, distr_org_struct::minimalDistrCount, distr_org_struct::minimalDistrList, mm_limits_init(), multipole_struct_large::momentList, multipole_struct_small::momentList, IntegralInfo::monomial_info, monomial_info_struct::monomial_list, minimal_distr_struct::monomialIndex, DistributionSpecStruct_::monomialInts, distr_list_description_struct::multipole, distr_list_description_struct::multipolePoint, box_struct::multipolePoint, distr_group_struct::multipolePtr, BasisInfoStruct::noOfBasisFuncs, box_level_struct::noOfBoxes, box_struct_basic::noOfChildBoxes, chunk_struct::noOfClusters, cluster_struct::noOfGroups, BoxSystem::noOfLevels, multipole_struct_large::noOfMoments, multipole_struct_small::noOfMoments, JK::Params::noOfThreads_J, distr_list_description_struct::org, organize_distributions(), output_current_memory_usage(), setup_multipole_maxAbsMomentList(), sort_list_of_multipole_jobs(), distr_group_struct::startIndex, box_level_struct::startIndexInBoxList, JK::Params::threshold_J, distr_list_description_struct::totCharge, BoxSystem::totNoOfBoxes, JK::Params::use_fmm, and box_struct_basic::width.

Referenced by compute_J_by_boxes(), and compute_J_by_boxes_sparse().

int compute_J_by_boxes_nosymm ( const BasisInfoStruct basisInfo,
const IntegralInfo integralInfo,
const JK::Params J_K_params,
ergo_real J,
const ergo_real dens 
)
static int create_branches ( int  noOfBranches,
const ergo_real branchSplitterList,
int  distrCount,
DistributionSpecStructLabeled distrListOrdered,
int  noOfBoxesTopLevel,
box_struct boxListTopLevel 
) [static]
static int do_multipole_interaction_between_2_boxes_branches ( const distr_list_description_struct distrDescription_1,
const multipole_struct_large branchMultipole,
const multipole_struct_small multipoleList_1,
ergo_real result_J_list,
ergo_real  threshold,
int *  largest_L_used_so_far,
MMInteractor interactor 
) [static]
static void* execute_J_fmm_worker ( void *  arg  )  [static]
static int execute_joblist_J_fmm_serial ( const IntegralInfo integralInfo,
const BasisInfoStruct basisInfo,
const JK::Params J_K_params,
int  noOfJobs_J_multipole,
const job_list_multipole_entry_J_struct jobList_J_multipole,
const box_struct boxList,
int  maxnoOfMinimalDistrsPerBoxBranch,
ergo_real result_J_list 
) [static]
static int execute_joblist_J_fmm_shared ( int  jobIndexLo,
int  jobIndexHi,
const IntegralInfo integralInfo,
const BasisInfoStruct basisInfo,
const JK::Params J_K_params,
const job_list_multipole_entry_J_struct jobList_J_multipole,
const box_struct boxList,
int  maxnoOfMinimalDistrsPerBoxBranch,
ergo_real result_J_list,
int *  largest_L_used 
) [static]

executes given jobList using FMM.

Parameters:
jobIndexLo the first jobindex for which this thread is responsible.
jobIndexHi the last jobindex for which this thread is responsible is jobIndexHi-1.
integralInfo info needed for evaluation of integrals of Gaussian functions.
basisInfo info about the used basis set.
J_K_params includes various parameters for J and K matrix construction.
jobList_J_multipole list of multipole-jobs.
boxList list of boxes.
maxnoOfMinimalDistrsPerBoxBranch needed to determine size of work buffer.
result_J_list the list of matrix elements to be updated.
largest_L_used largest L-value used (output).

References job_list_multipole_entry_J_struct::boxIndex, job_list_multipole_entry_J_struct::branchIndex, box_struct::branchList, distr_group_struct::centerCoords, DistributionSpecStruct_::centerCoords, distr_org_struct::chunkCount, distr_org_struct::chunkList, distr_org_struct::clusterList, chunk_struct::clusterStartIndex, DistributionSpecStruct_::coeff, minimal_distr_struct::coeff, compute_multipole_moments(), distr_group_struct::distrCount, do_multipole_interaction_between_2_boxes_branches(), do_output(), distr_group_struct::exponent, DistributionSpecStruct_::exponent, distr_org_struct::groupList, cluster_struct::groupStartIndex, monomial_struct::ix, monomial_struct::iy, monomial_struct::iz, LOG_AREA_INTEGRALS, LOG_CAT_ERROR, LOG_CAT_INFO, MAX_NO_OF_MOMENTS_PER_MULTIPOLE, distr_org_struct::minimalDistrList, multipole_struct_large::momentList, IntegralInfo::monomial_info, monomial_info_struct::monomial_list, minimal_distr_struct::monomialIndex, DistributionSpecStruct_::monomialInts, distr_list_description_struct::multipole, JK::Params::multipole_threshold_factor, job_list_multipole_entry_J_struct::multipoleBoxIndex, job_list_multipole_entry_J_struct::multipoleBranchIndex, chunk_struct::noOfClusters, cluster_struct::noOfGroups, distr_list_description_struct::org, output_current_memory_usage(), setup_multipole_maxAbsMomentList(), distr_group_struct::startIndex, and JK::Params::threshold_J.

Referenced by execute_J_fmm_worker(), and execute_joblist_J_fmm_serial().

static int execute_joblist_J_fmm_thread ( int  noOfThreads,
int  noOfBasisFuncIndexPairs,
const IntegralInfo integralInfo,
const BasisInfoStruct basisInfo,
const JK::Params J_K_params,
int  noOfJobs_J_multipole,
const job_list_multipole_entry_J_struct jobList_J_multipole,
const box_struct boxList,
int  maxnoOfMinimalDistrsPerBoxBranch,
ergo_real result_J_list 
) [static]

Compute the FMM part of the Coulomb matrix using threads.

0th thread reuses result_J_list, all the other threads need to have temporary memory allocated.

References do_output(), execute_J_fmm_worker(), LOG_AREA_INTEGRALS, LOG_CAT_ERROR, and LOG_CAT_INFO.

Referenced by compute_J_by_boxes_linear().

static int execute_joblist_J_std_serial ( int  noOfJobs_J_standard,
const job_list_standard_entry_J_struct jobList_J_standard,
const BasisInfoStruct basisInfo,
const IntegralInfo integralInfo,
int  maxNoOfMonomials,
ergo_real result_J_list,
const box_struct boxList,
ergo_real  threshold 
) [static]
static void* execute_joblist_J_std_thread_func ( void *  arg  )  [static]
static int execute_joblist_J_std_threaded ( int  noOfThreads,
int  noOfJobs_J_standard,
const job_list_standard_entry_J_struct jobList_J_standard,
const BasisInfoStruct basisInfo,
const IntegralInfo integralInfo,
int  maxNoOfMonomials,
ergo_real result_J_list,
int  noOfBasisFuncIndexPairs,
const box_struct boxList,
ergo_real  threshold 
) [static]
static int get_branch_splitter_info ( ergo_real branchSplitterList,
int  maxNoOfBranches,
const JK::Params J_K_params,
ergo_real  toplevelBoxSize,
ergo_real  extent_max 
) [static]
static int get_J_contribs_from_2_interacting_boxes_2 ( const BasisInfoStruct basisInfo,
const IntegralInfo integralInfo,
int  maxNoOfMonomials,
ergo_real result_J_list,
const minimal_distr_struct minimalDistrList_1,
int  noOfGroups_1,
const distr_group_struct groupList_1,
const minimal_distr_struct minimalDistrList_2,
int  noOfGroups_2,
const distr_group_struct groupList_2,
const cluster_struct clusterList_1,
int  nClusters_1,
const cluster_struct clusterList_2,
int  nClusters_2,
const chunk_struct chunkList_1,
int  nChunks_1,
const chunk_struct chunkList_2,
int  nChunks_2,
const basis_func_pair_struct basisFuncPairList_1,
const basis_func_pair_struct basisFuncPairList_2,
int  interactionWithSelf,
ergo_real  threshold,
JK_contribs_buffer_struct bufferStructPtr 
) [static]
static int get_joblists_J_for_two_boxes_recursive ( const BasisInfoStruct basisInfo,
const IntegralInfo integralInfo,
int  maxNoOfMonomials,
ergo_real  threshold,
const box_struct boxList,
int  numberOfLevels,
int  currLevel,
int  boxIndex_1,
int  boxIndex_2,
int  branchIndex_1,
int  branchIndex_2,
job_list_standard_entry_J_struct jobList_standard,
int  maxNoOfJobs_standard,
int *  noOfNewJobs_standard,
job_list_multipole_entry_J_struct jobList_multipole,
int  maxNoOfJobs_multipole,
int *  noOfNewJobs_multipole 
) [static]
static void get_largest_and_smallest_extent_for_list_of_distributions ( int  n,
const DistributionSpecStructLabeled distrList,
ergo_real result_extent_min,
ergo_real result_extent_max 
) [static]
static int get_list_of_labeled_distrs_linear ( const BasisInfoStruct basisInfo,
const IntegralInfo integralInfo,
ergo_real  threshold,
DistributionSpecStructLabeled resultList,
int  maxCountDistrs,
ergo_real  maxLimitingFactor,
const basis_func_index_pair_struct basisFuncIndexPairList,
int  basisFuncIndexPairCount,
const ergo_real D_list 
) [static]
static int get_list_of_labeled_distrs_maxLimitingFactor_linear ( const BasisInfoStruct basisInfo,
const IntegralInfo integralInfo,
ergo_real  threshold,
const basis_func_index_pair_struct basisFuncIndexPairList,
int  basisFuncIndexPairCount,
ergo_real resultMaxLimitingFactor 
) [static]
static int get_max_no_of_monomials_for_list_of_distributions ( int  n,
const DistributionSpecStructLabeled distrList,
const IntegralInfo integralInfo 
) [static]
static ergo_real get_min_distance_from_point_to_box ( const ergo_real boxCenterCoords,
ergo_real  halfwidth,
const ergo_real point 
) [static]
static int sort_list_of_multipole_jobs ( job_list_multipole_entry_J_struct jobList,
int  n 
) [static]
static int sort_list_of_multipole_jobs_fixed_boxIndex ( job_list_multipole_entry_J_struct jobList,
int  n 
) [static]

Variable Documentation

const int HUGE_INTEGER_NUMBER = 2000000000 [static]

Generated on 21 Nov 2012 for ergo by  doxygen 1.6.1