ergo
|
#include <string.h>
#include <stdio.h>
#include "integrals_2el_exchange.h"
#include "integrals_2el_utils.h"
#include "mm_limit_table.h"
#include "pi.h"
#include "pthread.h"
#include "utilities.h"
Classes | |
struct | job_list_entry_K_struct |
struct | abcd_struct |
struct | K_joblist_thread_struct |
struct | basisFuncGroupPairStruct |
struct | dmatElementStruct |
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 | ergo_csr_find_index_inline (const csr_matrix_struct *csr, int row, int col) |
static ergo_real | ergo_CSR_get_element_inline (const csr_matrix_struct *csr, int row, int col) |
static int | get_K_contribs_from_2_interacting_boxes (const BasisInfoStruct &basisInfo, const IntegralInfo *integralInfo, const JK::ExchWeights &CAM_params, int maxNoOfMonomials, ergo_real *K, csr_matrix_struct *K_CSR_shared, const ergo_real *dens, const csr_matrix_struct *dens_CSR, int symmetryFlag, 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, int use_multipole_screening_for_clusters, ergo_real boxDistance, const int *basisFuncListForChunks_1, const int *basisFuncListForChunks_map_1, const int *basisFuncListForChunks_2, const int *basisFuncListForChunks_map_2, const int *basisFuncList_1, int basisFuncList_1_count, const int *basisFuncList_2, int basisFuncList_2_count) |
static int | create_joblist_exchange_for_two_boxes_recursive (const BasisInfoStruct &basisInfo, const IntegralInfo *integralInfo, int maxNoOfMonomials, ergo_real threshold, const box_struct *boxList, int numberOfLevels, const csr_matrix_struct *dmatLimitMatrixCSRList, const int *basisFuncGroupCounterList, int currLevel, int boxIndex_1, int boxIndex_2, job_list_entry_K_struct *jobList_K, int maxNoOfJobs) |
static void * | execute_joblist_K_thread_func (void *arg) |
static int | execute_joblist_K_threaded (int noOfThreads, const ergo_real *dens, csr_matrix_struct *densCSR, const BasisInfoStruct &basisInfo, const IntegralInfo *integralInfo, const JK::ExchWeights &CAM_params, int maxNoOfMonomials, int basisFuncListCount_max, const box_struct *boxList, const job_list_entry_K_struct *jobList_K, int noOfJobs_K, ergo_real threshold, ergo_real *K, csr_matrix_struct *K_CSR, int symmetryFlag) |
static int | execute_joblist_K_serial (const ergo_real *dens, csr_matrix_struct *densCSR, const BasisInfoStruct &basisInfo, const IntegralInfo *integralInfo, const JK::ExchWeights &CAM_params, int maxNoOfMonomials, int basisFuncListCount_max, const box_struct *boxList, const job_list_entry_K_struct *jobList_K, int noOfJobs_K, ergo_real threshold, ergo_real *K, csr_matrix_struct *K_CSR, int symmetryFlag) |
static int | compare_basisFuncGroupPairs (const void *p1, const void *p2) |
static int | get_basisFuncGroupInfoList_size (int distrCountTot, const DistributionSpecStructLabeled *distrList, int numberOfLevels, const int *levelStartIndexList, const int *levelCounterList, const box_struct *boxList, int **basisFuncGroupList) |
static int | compare_dmatElements (const void *p1, const void *p2) |
static int | create_reduced_vector (int nvalues, const std::vector< dmatElementStruct > &dmatElementList, std::vector< dmatElementStruct > &resultVector) |
static int | getDmatLimitMatrixCSRList (csr_matrix_struct *dmatLimitMatrixCSRList, int numberOfLevels, const csr_matrix_struct *densCSR, const int *const *basisFuncGroupList, const int *basisFuncGroupCounterList) |
int | compute_K_by_boxes (const BasisInfoStruct &basisInfo, const IntegralInfo *integralInfo, const JK::ExchWeights &CAM_params_in, const JK::Params &J_K_params, ergo_real *K, csr_matrix_struct *K_CSR, const ergo_real *dens, csr_matrix_struct *densCSR, int symmetryFlag) |
Variables | |
static const int | HUGE_INTEGER_NUMBER = 2000000000 |
pthread_mutex_t | K_CSR_shared_access_mutex = PTHREAD_MUTEX_INITIALIZER |
#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; |
Referenced by get_K_contribs_from_2_interacting_boxes().
static int compare_basisFuncGroupPairs | ( | const void * | p1, |
const void * | p2 | ||
) | [static] |
References basisFuncGroupPairStruct::i1, and basisFuncGroupPairStruct::i2.
Referenced by get_basisFuncGroupInfoList_size().
static int compare_dmatElements | ( | const void * | p1, |
const void * | p2 | ||
) | [static] |
References dmatElementStruct::i1, and dmatElementStruct::i2.
Referenced by getDmatLimitMatrixCSRList().
int compute_K_by_boxes | ( | const BasisInfoStruct & | basisInfo, |
const IntegralInfo * | integralInfo, | ||
const JK::ExchWeights & | CAM_params_in, | ||
const JK::Params & | J_K_params, | ||
ergo_real * | K, | ||
csr_matrix_struct * | K_CSR, | ||
const ergo_real * | dens, | ||
csr_matrix_struct * | densCSR, | ||
int | symmetryFlag | ||
) |
References getSafeMaxDistance(), mm_limits_init(), LOG_AREA_INTEGRALS, BasisInfoStruct::noOfBasisFuncs, do_output(), LOG_CAT_INFO, JK::Params::threshold_K, JK::Params::exchange_box_size, output_current_memory_usage(), get_max_abs_vector_element(), ergo_CSR_get_max_abs_element(), get_list_of_labeled_distrs_maxLimitingFactor(), LOG_CAT_ERROR, get_list_of_labeled_distrs(), compute_extent_for_list_of_distributions(), IntegralInfo::monomial_info, monomial_info_struct::no_of_monomials_list, create_box_system_and_reorder_distrs(), BoxSystem::totNoOfBoxes, BoxSystem::boxList, BoxSystem::noOfLevels, BoxSystem::levelList, box_level_struct::noOfBoxes, box_level_struct::startIndexInBoxList, BasisInfoStruct::basisFuncList, BasisFuncStruct_::centerCoords, BoxSystem::create_box_system(), box_struct_basic::firstItemIndex, box_struct_basic::noOfItems, MAX_MULTIPOLE_DEGREE_BASIC, compute_multipole_moments(), DistributionSpecStructLabeled::distr, A, get_basisFuncGroupInfoList_size(), box_struct::basisFuncGroupInfoList, box_struct::basicBox, DistributionSpecStructLabeled::basisFuncIndex_1, DistributionSpecStructLabeled::basisFuncIndex_2, DistributionSpecStructLabeled::limitingFactor, basis_func_group_info_for_box::basisFuncGroupIndex, basis_func_group_info_for_box::max_CS_factor, basis_func_group_info_for_box::maxMultipoleDegree, basis_func_group_info_for_box::maxMomentVectorNormList, box_struct::noOfRelevantBasisFuncGroups, organize_distributions(), box_struct_basic::noOfChildBoxes, box_struct_basic::firstChildBoxIndex, box_struct::distrListForK, distr_list_description_struct::org, distr_org_struct::maxDistanceOutsideBox, distr_org_struct::chunkList, distr_org_struct::clusterList, distr_org_struct::groupList, distr_org_struct::minimalDistrList, distr_org_struct::chunkCount, box_struct::largestCSfactor, chunk_struct::noOfClusters, chunk_struct::clusterStartIndex, cluster_struct::groupStartIndex, cluster_struct::noOfGroups, distr_group_struct::startIndex, distr_group_struct::distrCount, minimal_distr_struct::monomialIndex, minimal_distr_struct::coeff, DistributionSpecStruct_::monomialInts, monomial_info_struct::monomial_list, monomial_struct::ix, monomial_struct::iy, monomial_struct::iz, DistributionSpecStruct_::coeff, DistributionSpecStruct_::exponent, distr_group_struct::exponent, DistributionSpecStruct_::centerCoords, distr_group_struct::centerCoords, multipole_struct_small::degree, multipole_struct_small::momentList, distr_group_struct::multipoleEuclideanNormList, cluster_struct::multipoleEuclideanNormList, box_struct::multipoleEuclideanNormList, distr_group_struct::maxLimitingFactorGroup, ergo_CSR_get_element(), ergo_CSR_create(), LOG_AREA_SCF, ergo_CSR_add_to_element(), getDmatLimitMatrixCSRList(), create_joblist_exchange_for_two_boxes_recursive(), HUGE_INTEGER_NUMBER, JK::Params::noOfThreads_K, execute_joblist_K_serial(), execute_joblist_K_threaded(), and ergo_CSR_destroy().
Referenced by ErgoE2Evaluator::transform(), compute_2e_matrix_list(), compute_K_by_boxes_sparse(), and compute_K_by_boxes_sparse_nosymm().
static int create_joblist_exchange_for_two_boxes_recursive | ( | const BasisInfoStruct & | basisInfo, |
const IntegralInfo * | integralInfo, | ||
int | maxNoOfMonomials, | ||
ergo_real | threshold, | ||
const box_struct * | boxList, | ||
int | numberOfLevels, | ||
const csr_matrix_struct * | dmatLimitMatrixCSRList, | ||
const int * | basisFuncGroupCounterList, | ||
int | currLevel, | ||
int | boxIndex_1, | ||
int | boxIndex_2, | ||
job_list_entry_K_struct * | jobList_K, | ||
int | maxNoOfJobs | ||
) | [static] |
References box_struct::noOfRelevantBasisFuncGroups, box_struct::basicBox, box_struct_basic::centerCoords, box_struct_basic::width, distance(), box_struct::distrListForK, distr_list_description_struct::org, distr_org_struct::maxDistanceOutsideBox, box_struct::basisFuncGroupInfoList, basis_func_group_info_for_box::max_CS_factor, basis_func_group_info_for_box::basisFuncGroupIndex, do_output(), LOG_CAT_ERROR, LOG_AREA_INTEGRALS, ergo_CSR_get_element(), basis_func_group_info_for_box::maxMultipoleDegree, mm_limits_get_max_abs_mm_contrib(), job_list_entry_K_struct::boxIndex_1, job_list_entry_K_struct::boxIndex_2, job_list_entry_K_struct::useMultipole, job_list_entry_K_struct::distance, box_struct_basic::noOfChildBoxes, and box_struct_basic::firstChildBoxIndex.
Referenced by compute_K_by_boxes().
static int create_reduced_vector | ( | int | nvalues, |
const std::vector< dmatElementStruct > & | dmatElementList, | ||
std::vector< dmatElementStruct > & | resultVector | ||
) | [static] |
Referenced by getDmatLimitMatrixCSRList().
static int ergo_csr_find_index_inline | ( | const csr_matrix_struct * | csr, |
int | row, | ||
int | col | ||
) | [inline, static] |
static ergo_real ergo_CSR_get_element_inline | ( | const csr_matrix_struct * | csr, |
int | row, | ||
int | col | ||
) | [inline, static] |
References csr_matrix_struct::symmetryFlag, ergo_csr_find_index_inline(), and csr_matrix_struct::elementList.
Referenced by get_K_contribs_from_2_interacting_boxes().
static int execute_joblist_K_serial | ( | const ergo_real * | dens, |
csr_matrix_struct * | densCSR, | ||
const BasisInfoStruct & | basisInfo, | ||
const IntegralInfo * | integralInfo, | ||
const JK::ExchWeights & | CAM_params, | ||
int | maxNoOfMonomials, | ||
int | basisFuncListCount_max, | ||
const box_struct * | boxList, | ||
const job_list_entry_K_struct * | jobList_K, | ||
int | noOfJobs_K, | ||
ergo_real | threshold, | ||
ergo_real * | K, | ||
csr_matrix_struct * | K_CSR, | ||
int | symmetryFlag | ||
) | [static] |
References allocate_buffers_needed_by_integral_code(), job_list_entry_K_struct::boxIndex_1, job_list_entry_K_struct::boxIndex_2, get_K_contribs_from_2_interacting_boxes(), box_struct::distrListForK, distr_list_description_struct::org, distr_org_struct::groupCount, distr_org_struct::groupList, distr_org_struct::minimalDistrList, distr_org_struct::clusterList, distr_org_struct::clusterCount, distr_org_struct::chunkList, distr_org_struct::chunkCount, distr_org_struct::basisFuncPairList, job_list_entry_K_struct::useMultipole, job_list_entry_K_struct::distance, distr_org_struct::basisFuncListForChunks, distr_org_struct::basisFuncListForChunks_map, distr_org_struct::basisFuncList, distr_org_struct::basisFuncListCount, do_output(), LOG_CAT_ERROR, LOG_AREA_INTEGRALS, BasisInfoStruct::noOfBasisFuncs, and free_buffers_needed_by_integral_code().
Referenced by compute_K_by_boxes().
static void* execute_joblist_K_thread_func | ( | void * | arg | ) | [static] |
References K_joblist_thread_struct::boxList, K_joblist_thread_struct::K, K_joblist_thread_struct::thread_ID, K_joblist_thread_struct::noOfThreads, allocate_buffers_needed_by_integral_code(), K_joblist_thread_struct::integralInfo, K_joblist_thread_struct::maxNoOfMonomials, K_joblist_thread_struct::basisFuncListCount_max, K_joblist_thread_struct::noOfJobs_K_total, K_joblist_thread_struct::jobList_K, job_list_entry_K_struct::boxIndex_1, job_list_entry_K_struct::boxIndex_2, get_K_contribs_from_2_interacting_boxes(), K_joblist_thread_struct::basisInfo, K_joblist_thread_struct::CAM_params, K_joblist_thread_struct::K_CSR_shared, K_joblist_thread_struct::dens, K_joblist_thread_struct::densCSR, K_joblist_thread_struct::symmetryFlag, box_struct::distrListForK, distr_list_description_struct::org, distr_org_struct::minimalDistrList, distr_org_struct::groupCount, distr_org_struct::groupList, distr_org_struct::clusterList, distr_org_struct::clusterCount, distr_org_struct::chunkList, distr_org_struct::chunkCount, distr_org_struct::basisFuncPairList, K_joblist_thread_struct::threshold, job_list_entry_K_struct::useMultipole, job_list_entry_K_struct::distance, distr_org_struct::basisFuncListForChunks, distr_org_struct::basisFuncListForChunks_map, distr_org_struct::basisFuncList, distr_org_struct::basisFuncListCount, do_output(), LOG_CAT_ERROR, LOG_AREA_INTEGRALS, K_joblist_thread_struct::resultCode, BasisInfoStruct::noOfBasisFuncs, free_buffers_needed_by_integral_code(), and do_output_time().
Referenced by execute_joblist_K_threaded().
static int execute_joblist_K_threaded | ( | int | noOfThreads, |
const ergo_real * | dens, | ||
csr_matrix_struct * | densCSR, | ||
const BasisInfoStruct & | basisInfo, | ||
const IntegralInfo * | integralInfo, | ||
const JK::ExchWeights & | CAM_params, | ||
int | maxNoOfMonomials, | ||
int | basisFuncListCount_max, | ||
const box_struct * | boxList, | ||
const job_list_entry_K_struct * | jobList_K, | ||
int | noOfJobs_K, | ||
ergo_real | threshold, | ||
ergo_real * | K, | ||
csr_matrix_struct * | K_CSR, | ||
int | symmetryFlag | ||
) | [static] |
References do_output(), LOG_CAT_INFO, LOG_AREA_INTEGRALS, LOG_CAT_ERROR, K_joblist_thread_struct::dens, K_joblist_thread_struct::densCSR, K_joblist_thread_struct::integralInfo, K_joblist_thread_struct::maxNoOfMonomials, K_joblist_thread_struct::basisFuncListCount_max, K_joblist_thread_struct::boxList, K_joblist_thread_struct::jobList_K, K_joblist_thread_struct::noOfJobs_K_total, K_joblist_thread_struct::noOfThreads, K_joblist_thread_struct::resultCode, K_joblist_thread_struct::threshold, K_joblist_thread_struct::symmetryFlag, K_joblist_thread_struct::K, K_joblist_thread_struct::K_CSR_shared, BasisInfoStruct::noOfBasisFuncs, output_current_memory_usage(), and execute_joblist_K_thread_func().
Referenced by compute_K_by_boxes().
static int get_basisFuncGroupInfoList_size | ( | int | distrCountTot, |
const DistributionSpecStructLabeled * | distrList, | ||
int | numberOfLevels, | ||
const int * | levelStartIndexList, | ||
const int * | levelCounterList, | ||
const box_struct * | boxList, | ||
int ** | basisFuncGroupList | ||
) | [static] |
static int get_K_contribs_from_2_interacting_boxes | ( | const BasisInfoStruct & | basisInfo, |
const IntegralInfo * | integralInfo, | ||
const JK::ExchWeights & | CAM_params, | ||
int | maxNoOfMonomials, | ||
ergo_real * | K, | ||
csr_matrix_struct * | K_CSR_shared, | ||
const ergo_real * | dens, | ||
const csr_matrix_struct * | dens_CSR, | ||
int | symmetryFlag, | ||
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, | ||
int | use_multipole_screening_for_clusters, | ||
ergo_real | boxDistance, | ||
const int * | basisFuncListForChunks_1, | ||
const int * | basisFuncListForChunks_map_1, | ||
const int * | basisFuncListForChunks_2, | ||
const int * | basisFuncListForChunks_map_2, | ||
const int * | basisFuncList_1, | ||
int | basisFuncList_1_count, | ||
const int * | basisFuncList_2, | ||
int | basisFuncList_2_count | ||
) | [static] |
References BasisInfoStruct::noOfBasisFuncs, pitopow52, JK_contribs_buffer_struct::summedIntegralList, JK_contribs_buffer_struct::primitiveIntegralList, JK_contribs_buffer_struct::primitiveIntegralList_work, JK_contribs_buffer_struct::partial_dmat_1, JK_contribs_buffer_struct::partial_dmat_2, ergo_CSR_get_element_inline(), JK_contribs_buffer_struct::partial_K_1, JK_contribs_buffer_struct::partial_K_2, chunk_struct::noOfBasisFuncPairs, chunk_struct::basisFuncForChunkCount, chunk_struct::basisFuncForChunksIndex, chunk_struct::clusterStartIndex, chunk_struct::noOfClusters, mm_limits_get_max_abs_mm_contrib(), cluster_struct::groupStartIndex, cluster_struct::noOfGroups, cluster_struct::nmax, distr_group_struct::exponent, distr_group_struct::centerCoords, distance(), IntegralInfo::monomial_info, monomial_info_struct::no_of_monomials_list, get_related_integrals_h(), do_output(), LOG_CAT_ERROR, LOG_AREA_INTEGRALS, distr_group_struct::startIndex, distr_group_struct::distrCount, minimal_distr_struct::basisFuncPairIndex, minimal_distr_struct::monomialIndex, minimal_distr_struct::coeff, chunk_struct::basisFuncPairListIndex, basis_func_pair_struct::index_1, basis_func_pair_struct::index_2, basis_func_pair_struct::index_1_mod, basis_func_pair_struct::index_2_mod, basis_func_pair_struct::index_inbox_1, basis_func_pair_struct::index_inbox_2, set_abcd_list_item_macro, abcd_struct::a, abcd_struct::b, abcd_struct::c, abcd_struct::d, abcd_struct::idx1, abcd_struct::idx2, abcd_struct::densValue, csr_matrix_struct::n, K_CSR_shared_access_mutex, and ergo_CSR_add_to_element().
Referenced by execute_joblist_K_thread_func(), and execute_joblist_K_serial().
static int getDmatLimitMatrixCSRList | ( | csr_matrix_struct * | dmatLimitMatrixCSRList, |
int | numberOfLevels, | ||
const csr_matrix_struct * | densCSR, | ||
const int *const * | basisFuncGroupList, | ||
const int * | basisFuncGroupCounterList | ||
) | [static] |
const int HUGE_INTEGER_NUMBER = 2000000000 [static] |
Referenced by compute_K_by_boxes().
pthread_mutex_t K_CSR_shared_access_mutex = PTHREAD_MUTEX_INITIALIZER |
Referenced by get_K_contribs_from_2_interacting_boxes().