Go to the documentation of this file.
37 #ifndef INTEGRALS_2EL_J_HEADER
38 #define INTEGRALS_2EL_J_HEADER
65 int basisFuncIndexPairCount,
68 int noOfBasisFuncIndexPairs);
Treal template_blas_sqrt(Treal x)
const MMLimitTable & GetMMLimitTable() const
Definition: integral_info.h:110
ergo_real multipole_threshold_factor
Definition: integrals_2el.h:49
Definition: multipole.h:51
Definition: integrals_2el_repeating.h:59
Definition: integrals_2el_utils.h:71
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
ergo_real fmm_branch_splitter_extent_2
Definition: integrals_2el.h:55
int firstChildBoxIndex
Definition: box_system.h:59
int noOfLevels
Definition: box_system.h:74
int noOfBasisFuncs
Definition: basisinfo.h:120
Utility functions related to multipole method, used in construction of the Coulomb matrix J.
Constants for the number pi and some related numbers like sqrt(pi).
static int execute_joblist_J_fmm_shared(int jobIndexLo, int jobIndexHi, const IntegralInfo &integralInfo, 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.
Definition: integrals_2el_J.cc:1016
int branchIndex_2
Definition: integrals_2el_J.cc:66
Definition: basisinfo.h:50
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
static int get_joblists_J_for_two_boxes_recursive(const IntegralInfo &integralInfo, 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)
Definition: integrals_2el_J.cc:139
int noOfJobs_J_standard
Definition: integrals_2el_J.cc:662
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.
Definition: integrals_2el_J.cc:1260
distr_org_mm_struct org_mm
Definition: organize_distrs_mm.h:65
int basisFuncIndex_1
Definition: basisinfo.h:59
std::vector< minimal_distr_struct > minimalDistrList
Definition: organize_distrs.h:122
ergo_real fmm_box_size
Definition: integrals_2el.h:52
int create_list_of_multipoles_for_box(const IntegralInfo &integralInfo, const distr_org_struct &org, multipole_struct_small *result_multipoleList)
Definition: integrals_2el_J_mm_utils.cc:120
int pairIndex
Definition: basisinfo.h:61
int totNoOfBoxes
Definition: box_system.h:73
#define LOG_CAT_ERROR
Definition: output.h:47
box_struct_basic basicBox
Definition: integrals_2el_utils.h:73
int use_fmm
Definition: integrals_2el.h:51
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)
Definition: integrals_2el_J.cc:1800
ergo_real centerCoords[3]
x0, y0, z0
Definition: basisinfo.h:54
static int get_branch_splitter_info(ergo_real *branchSplitterList, int maxNoOfBranches, const JK::Params &J_K_params, ergo_real toplevelBoxSize, ergo_real extent_max)
Definition: integrals_2el_J.cc:464
double ergo_real
Definition: realtype.h:69
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.
Definition: integrals_2el_J.cc:1260
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)
Definition: integrals_2el_J.cc:346
box_struct_basic * boxList
Definition: box_system.h:76
ergo_real chargeSum
Definition: organize_distrs_mm.h:53
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)
Definition: integrals_2el_J.cc:442
static int execute_joblist_J_fmm_thread(int noOfThreads, int noOfBasisFuncIndexPairs, const IntegralInfo &integralInfo, 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.
Definition: integrals_2el_J.cc:1173
int noOfBoxes
Definition: box_system.h:64
static int sort_list_of_multipole_jobs_fixed_boxIndex(job_list_multipole_entry_J_struct *jobList, int n)
Definition: integrals_2el_J.cc:828
const IntegralInfo * integralInfo
Definition: integrals_2el_J.cc:1137
Definition: multipole.h:69
General functionality related to computation of integrals involving Gaussian basis functions.
ergo_real fmm_branch_splitter_extent_5
Definition: integrals_2el.h:58
Definition: basisinfo.h:112
int check_if_multipoles_can_be_used(const IntegralInfo &integralInfo, ergo_real threshold, const ergo_real *boxCenterCoords_1, const ergo_real *boxCenterCoords_2, ergo_real boxWidth, const distr_org_struct &org_1, const distr_org_mm_struct &org_mm_1, const distr_org_struct &org_2, const distr_org_mm_struct &org_mm_2)
Definition: integrals_2el_J_mm_utils.cc:44
int get_product_simple_primitives(const BasisInfoStruct &basisInfoA, int iA, const BasisInfoStruct &basisInfoB, int iB, DistributionSpecStruct resultList[], int maxCount, ergo_real threshold)
Definition: integrals_general.cc:268
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)
Definition: integrals_2el_J.cc:302
int result
Definition: integrals_2el_J.cc:1145
box_level_struct levelList[MAX_NO_OF_BOX_LEVELS]
Definition: box_system.h:75
short int branchIndex
Definition: integrals_2el_J.cc:73
int noOfItems
Definition: box_system.h:56
Definition: basis_func_pair_list.h:48
Definition: integrals_2el.h:45
Treal template_blas_fabs(Treal x)
int basisFuncIndex_2
Definition: basisinfo.h:60
#define MAX_MULTIPOLE_DEGREE
Definition: multipole_prep.h:45
std::vector< distr_group_struct > groupList
Definition: organize_distrs.h:123
ergo_real centerCoords[3]
Definition: box_system.h:54
void compute_extent_for_list_of_distributions(int n, DistributionSpecStructLabeled *distrList, ergo_real threshold, ergo_real maxLimitingFactor, ergo_real maxabsDmatelement)
Definition: integrals_2el_utils.cc:252
static int add_multipole_jobs_for_2_boxes_branches_recursive(int multipoleBoxIndex, int multipoleBranchIndex, const box_struct *boxList, int boxIndex, int branchIndex, int numberOfLevels, int currLevel, job_list_multipole_entry_J_struct *jobList_multipole, int maxNoOfJobs_multipole)
Definition: integrals_2el_J.cc:79
int get_basis_func_pair_list_2el(const BasisInfoStruct &basisInfo, const IntegralInfo &integralInfo, ergo_real threshold, ergo_real maxDensityMatrixElement, std::vector< basis_func_index_pair_struct > &resultList)
Definition: basis_func_pair_list.cc:119
static void * execute_joblist_J_std_thread_func(void *arg)
Definition: integrals_2el_J.cc:671
void allocate_buffers_needed_by_integral_code(const IntegralInfo &integralInfo, int maxNoOfMonomials, int basisFuncListCount_max, JK_contribs_buffer_struct *bufferStruct)
Definition: integrals_2el_utils.cc:126
int noOfThreads_J
Definition: integrals_2el.h:60
ergo_real fmm_branch_splitter_extent_4
Definition: integrals_2el.h:57
int maxnoOfMinimalDistrsPerBoxBranch
Definition: integrals_2el_J.cc:1144
const box_struct * boxList
Definition: integrals_2el_J.cc:660
const box_struct * boxList
Definition: integrals_2el_J.cc:1140
const IntegralInfo * integralInfo
Definition: integrals_2el_J.cc:656
static int sort_list_of_multipole_jobs(std::vector< job_list_multipole_entry_J_struct > &jobList, int n)
Definition: integrals_2el_J.cc:898
ergo_real momentList[MAX_NO_OF_MOMENTS_PER_MULTIPOLE]
Definition: multipole_prep.h:56
int branchCountListForJ[MAX_NO_OF_BRANCHES]
Definition: integrals_2el_utils.h:77
int create_box_system_and_reorder_distrs(int distrCount, DistributionSpecStructLabeled *distrList, ergo_real toplevelBoxSize, BoxSystem &boxSystem)
Definition: integrals_2el_utils.cc:508
Code for utility functions used by 2-electron integral computation (i.e. computation of J and K matri...
static int create_branches(int noOfBranches, const ergo_real *branchSplitterList, int distrCount, DistributionSpecStructLabeled *distrListOrdered, int noOfBoxesTopLevel, box_struct *boxListTopLevel)
Definition: integrals_2el_J.cc:531
Definition: multipole_prep.h:52
int startIndexInBoxList
Definition: box_system.h:65
pthread_t thread
Definition: integrals_2el_J.cc:655
Contains coefficients needed for quick integral evaluation.
Definition: integral_info.h:94
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
Definition: basisinfo.h:58
multipole_struct_large multipole
Definition: organize_distrs_mm.h:51
Code for various utilities used by 2-electron integral computation (i.e. computation of J and K matri...
static const int HUGE_INTEGER_NUMBER
Definition: integrals_2el_J.cc:58
ergo_real * result_J_list
Definition: integrals_2el_J.cc:1141
int index_2
Definition: basis_func_pair_list.h:50
ergo_real get_max_abs_vector_element(int n, const ergo_real *vector)
Definition: integrals_2el_utils.cc:103
#define MAX_NO_OF_BRANCHES
Definition: integrals_2el_utils.h:47
const int POLY_PRODUCT_MAX_DISTRS
Definition: integrals_general.h:48
pthread_t threadID
Definition: integrals_2el_J.cc:1142
void print(int area, const char *routine)
Definition: utilities.h:111
int thread_ID
Definition: integrals_2el_J.cc:663
ergo_real do_2e_integral(const DistributionSpecStruct *psi)
Definition: integrals_2el_repeating.cc:90
const JK::Params * J_K_params
Definition: integrals_2el_J.cc:1138
#define MAX_NO_OF_MOMENTS_PER_MULTIPOLE
Definition: multipole_prep.h:46
ergo_real fmm_branch_splitter_extent_3
Definition: integrals_2el.h:56
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 firstItemIndex
Definition: box_system.h:57
const MultipolePrepManager & GetMultipolePrep() const
Definition: integral_info.h:109
distr_org_struct org
Definition: organize_distrs_mm.h:64
Basic OS access utilities.
void free_buffers_needed_by_integral_code(JK_contribs_buffer_struct *bufferStruct)
Definition: integrals_2el_utils.cc:152
#define LOG_CAT_INFO
Definition: output.h:49
const job_list_standard_entry_J_struct * jobList_J_standard
Definition: integrals_2el_J.cc:661
Definition: integrals_2el_J.cc:1136
int largest_L_used
Definition: integrals_2el_J.cc:1146
Code for computing the Coulomb matrix J.
Definition: integrals_2el_J.cc:62
short int multipoleBranchIndex
Definition: integrals_2el_J.cc:74
Code for setting up basis functions starting from shells.
Code for multipole method computational kernel for computing the Coulomb matrix J.
Parameters related to integral evaluation.
static int execute_joblist_J_fmm_serial(const IntegralInfo &integralInfo, 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)
Definition: integrals_2el_J.cc:1111
int maxNoOfMonomials
Definition: organize_distrs.h:137
Code for computation of Coulomb integrals of Hermite Gaussians, using the the McMurchie-Davidson sche...
#define LOG_AREA_INTEGRALS
Definition: output.h:60
int noOfChildBoxes
Definition: box_system.h:58
int noOfThreads
Definition: integrals_2el_J.cc:664
Definition: organize_distrs_mm.h:63
Definition: integrals_2el_J.cc:654
Code for computational kernel for computing the Coulomb matrix J.
J_std_joblist_thread_struct()
Definition: integrals_2el_J.cc:666
int multipoleBoxIndex
Definition: integrals_2el_J.cc:72
void output_current_memory_usage(int logArea, const char *contextString)
Definition: output.cc:186
Functionality for keeping track of certain kinds of integrals that are computed repeatedly,...
Definition: integrals_2el_utils.h:85
ergo_real * result_J_list
Definition: integrals_2el_J.cc:657
ergo_real threshold
Definition: integrals_2el_J.cc:659
int compute_J_by_boxes(const BasisInfoStruct &basisInfo, const IntegralInfo &integralInfo, const JK::Params &J_K_params, ergo_real *J, const ergo_real *dens)
Definition: integrals_2el_J.cc:1728
Functions for setting up lists of non-negligible basis function pairs, for 2-electron integrals.
Definition: box_system.h:71
int organize_distributions(const IntegralInfo &integralInfo, DistributionSpecStructLabeled *distrList_in, int distrCount, distr_org_struct *result, const ergo_real *boxCenterCoords, ergo_real boxWidth)
Definition: organize_distrs.cc:180
ergo_real threshold_J
Definition: integrals_2el.h:47
Data data
Definition: organize_distrs_mm.h:56
Definition: integrals_2el_J.cc:70
ergo_real width
Definition: box_system.h:55
static int execute_joblist_J_std_threaded(int noOfThreads, int noOfJobs_J_standard, const job_list_standard_entry_J_struct *jobList_J_standard, const IntegralInfo &integralInfo, int maxNoOfMonomials, ergo_real *result_J_list, int noOfBasisFuncIndexPairs, const box_struct *boxList, ergo_real threshold)
Definition: integrals_2el_J.cc:715
static void * execute_J_fmm_worker(void *arg)
Definition: integrals_2el_J.cc:1150
int setup_multipole_maxAbsMomentList(multipole_struct_large *multipole)
Definition: multipole.cc:418
DistributionSpecStruct distr
Definition: basisinfo.h:65
int index_1
Definition: basis_func_pair_list.h:49
int boxIndex_2
Definition: integrals_2el_J.cc:64
static int execute_joblist_J_std_serial(int noOfJobs_J_standard, const job_list_standard_entry_J_struct *jobList_J_standard, const IntegralInfo &integralInfo, int maxNoOfMonomials, ergo_real *result_J_list, const box_struct *boxList, ergo_real threshold)
Definition: integrals_2el_J.cc:609
const job_list_multipole_entry_J_struct * jobList_J_multipole
Definition: integrals_2el_J.cc:1139
void do_output(int logCategory, int logArea, const char *format,...)
Definition: output.cc:53
int fmm_no_of_branches
Definition: integrals_2el.h:53
int jobIndexHi
Definition: integrals_2el_J.cc:1143
MMLimitTable class used to predict the magnitude of contributions when using truncated multipole expa...
int boxIndex_1
Definition: integrals_2el_J.cc:63
int jobIndexLo
Definition: integrals_2el_J.cc:1143
int compute_J_by_boxes(const BasisInfoStruct &basisInfo, const IntegralInfo &integralInfo, const JK::Params &J_K_params, ergo_real *J, const ergo_real *dens)
Definition: integrals_2el_J.cc:1728
ergo_real fmm_branch_splitter_extent_1
Definition: integrals_2el.h:54
int boxIndex
Definition: integrals_2el_J.cc:71
int branchIndex_1
Definition: integrals_2el_J.cc:65
ergo_real extent
Definition: basisinfo.h:53
distr_list_description_struct branchListForJ[MAX_NO_OF_BRANCHES]
Definition: integrals_2el_utils.h:75
int maxNoOfMonomials
Definition: integrals_2el_J.cc:658
ergo_real limitingFactor
Definition: basisinfo.h:63
ergo_real dmatElement
Definition: basisinfo.h:64
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)
Definition: integrals_2el_J.cc:1800
Data data
Definition: organize_distrs.h:140
Time-measuring class.
Definition: utilities.h:80
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, ResultMatContrib *resultMatContrib, ergo_real threshold, int *largest_L_used_so_far, MMInteractor &interactor, const MMLimitTable &mmLimitTable)
Definition: integrals_2el_J_mm_kernel.cc:41
int resultCode
Definition: integrals_2el_J.cc:665
static int compare_multipole_jobs(const void *p1, const void *p2)
Definition: integrals_2el_J.cc:414
int get_J_contribs_from_2_interacting_boxes(const IntegralInfo &integralInfo, ergo_real *result_J_list, ResultMatContrib *resultMatContrib, const distr_org_struct &distr_org_struct_1, const distr_org_struct &distr_org_struct_2, int interactionWithSelf, ergo_real threshold, JK_contribs_buffer_struct *bufferStructPtr)
Definition: integrals_2el_J_kernel.cc:75
int branchIndexListForJ[MAX_NO_OF_BRANCHES]
Definition: integrals_2el_utils.h:76