ergo
integrals_2el_exchange.cc File Reference
#include <string.h>
#include <stdio.h>
#include "integrals_2el_exchange.h"
#include "integrals_2el_utils.h"
#include "integrals_hermite.h"
#include "mm_limit_table.h"
#include "pi.h"
#include "pthread.h"
#include "utilities.h"
#include "matrix_algebra.h"
#include "integrals_2el_util_funcs.h"

Classes

struct  job_list_entry_K_struct
 
struct  abcd_struct
 
struct  K_joblist_thread_struct
 
struct  basisFuncGroupPairStruct
 
struct  dmatElementStruct
 

Macros

#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 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, int use_multipole_screening_for_clusters, ergo_real boxDistance)
 
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
 

Macro Definition Documentation

◆ set_abcd_list_item_macro

#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

◆ compare_basisFuncGroupPairs()

static int compare_basisFuncGroupPairs ( const void *  p1,
const void *  p2 
)
static

◆ compare_dmatElements()

static int compare_dmatElements ( const void *  p1,
const void *  p2 
)
static

◆ compute_K_by_boxes()

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 A, box_struct::basicBox, basis_func_group_info_for_box::basisFuncGroupIndex, box_struct::basisFuncGroupInfoList, DistributionSpecStructLabeled::basisFuncIndex_1, DistributionSpecStructLabeled::basisFuncIndex_2, BasisInfoStruct::basisFuncList, K_joblist_thread_struct::basisFuncListCount_max, BoxSystem::boxList, K_joblist_thread_struct::boxList, K_joblist_thread_struct::CAM_params, distr_group_struct::centerCoords, DistributionSpecStruct_::centerCoords, BasisFuncStruct_::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(), BoxSystem::create_box_system(), create_box_system_and_reorder_distrs(), create_joblist_exchange_for_two_boxes_recursive(), multipole_struct_small::degree, DistributionSpecStructLabeled::distr, distr_group_struct::distrCount, box_struct::distrListForK, do_output(), ergo_CSR_add_to_element(), ergo_CSR_create(), ergo_CSR_destroy(), ergo_CSR_get_element(), ergo_CSR_get_max_abs_element(), JK::Params::exchange_box_size, execute_joblist_K_serial(), execute_joblist_K_threaded(), distr_group_struct::exponent, DistributionSpecStruct_::exponent, box_struct_basic::firstChildBoxIndex, box_struct_basic::firstItemIndex, get_basisFuncGroupInfoList_size(), get_list_of_labeled_distrs(), get_list_of_labeled_distrs_maxLimitingFactor(), get_max_abs_vector_element(), getDmatLimitMatrixCSRList(), getSafeMaxDistance(), distr_org_struct::groupList, cluster_struct::groupStartIndex, HUGE_INTEGER_NUMBER, monomial_struct::ix, monomial_struct::iy, monomial_struct::iz, K_joblist_thread_struct::jobList_K, box_struct::largestCSfactor, BoxSystem::levelList, DistributionSpecStructLabeled::limitingFactor, LOG_AREA_INTEGRALS, LOG_AREA_SCF, LOG_CAT_ERROR, LOG_CAT_INFO, basis_func_group_info_for_box::max_CS_factor, MAX_MULTIPOLE_DEGREE_BASIC, distr_org_struct::maxDistanceOutsideBox, distr_group_struct::maxLimitingFactorGroup, basis_func_group_info_for_box::maxMomentVectorNormList, basis_func_group_info_for_box::maxMultipoleDegree, K_joblist_thread_struct::maxNoOfMonomials, distr_org_struct::minimalDistrList, mm_limits_init(), multipole_struct_small::momentList, IntegralInfo::monomial_info, monomial_info_struct::monomial_list, minimal_distr_struct::monomialIndex, DistributionSpecStruct_::monomialInts, distr_group_struct::multipoleEuclideanNormList, cluster_struct::multipoleEuclideanNormList, box_struct::multipoleEuclideanNormList, monomial_info_struct::no_of_monomials_list, BasisInfoStruct::noOfBasisFuncs, box_level_struct::noOfBoxes, box_struct_basic::noOfChildBoxes, chunk_struct::noOfClusters, cluster_struct::noOfGroups, box_struct_basic::noOfItems, BoxSystem::noOfLevels, box_struct::noOfRelevantBasisFuncGroups, K_joblist_thread_struct::noOfThreads, JK::Params::noOfThreads_K, distr_list_description_struct::org, organize_distributions(), output_current_memory_usage(), Util::TimeMeter::print(), distr_group_struct::startIndex, box_level_struct::startIndexInBoxList, JK::Params::threshold_K, and BoxSystem::totNoOfBoxes.

Referenced by compute_2e_matrix_list(), compute_K_by_boxes_sparse(), compute_K_by_boxes_sparse_nosymm(), and ErgoE2Evaluator::transform().

◆ create_joblist_exchange_for_two_boxes_recursive()

◆ create_reduced_vector()

static int create_reduced_vector ( int  nvalues,
const std::vector< dmatElementStruct > &  dmatElementList,
std::vector< dmatElementStruct > &  resultVector 
)
static

◆ ergo_csr_find_index_inline()

static int ergo_csr_find_index_inline ( const csr_matrix_struct csr,
int  row,
int  col 
)
inlinestatic

◆ ergo_CSR_get_element_inline()

static ergo_real ergo_CSR_get_element_inline ( const csr_matrix_struct csr,
int  row,
int  col 
)
inlinestatic

◆ execute_joblist_K_serial()

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

◆ execute_joblist_K_thread_func()

◆ execute_joblist_K_threaded()

◆ get_basisFuncGroupInfoList_size()

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

◆ get_K_contribs_from_2_interacting_boxes()

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 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,
int  use_multipole_screening_for_clusters,
ergo_real  boxDistance 
)
static

References abcd_struct::a, abcd_struct::b, chunk_struct::basisFuncForChunkCount, chunk_struct::basisFuncForChunksIndex, distr_org_struct::basisFuncList, distr_org_struct::basisFuncListCount, distr_org_struct::basisFuncListForChunks, distr_org_struct::basisFuncListForChunks_map, distr_org_struct::basisFuncPairList, chunk_struct::basisFuncPairListIndex, abcd_struct::c, distr_group_struct::centerCoords, distr_org_struct::chunkCount, distr_org_struct::chunkList, distr_org_struct::clusterList, chunk_struct::clusterStartIndex, abcd_struct::d, abcd_struct::densValue, distance(), do_summedIntegralList_contribs_self(), do_summedIntegralList_contribs_std(), ergo_CSR_add_to_element(), ergo_CSR_get_element_inline(), distr_group_struct::exponent, get_related_integrals_hermite(), distr_org_struct::groupList, cluster_struct::groupStartIndex, abcd_struct::idx1, abcd_struct::idx2, basis_func_pair_struct::index_1, basis_func_pair_struct::index_1_mod, basis_func_pair_struct::index_2, basis_func_pair_struct::index_2_mod, basis_func_pair_struct::index_inbox_1, basis_func_pair_struct::index_inbox_2, K_CSR_shared_access_mutex, mm_limits_get_max_abs_mm_contrib(), IntegralInfo::monomial_info, csr_matrix_struct::n, cluster_struct::nmax, monomial_info_struct::no_of_monomials_list, chunk_struct::noOfBasisFuncPairs, BasisInfoStruct::noOfBasisFuncs, chunk_struct::noOfClusters, cluster_struct::noOfGroups, JK_contribs_buffer_struct::partial_dmat_1, JK_contribs_buffer_struct::partial_dmat_2, JK_contribs_buffer_struct::partial_K_1, JK_contribs_buffer_struct::partial_K_2, pitopow52, JK_contribs_buffer_struct::primitiveIntegralList, set_abcd_list_item_macro, distr_org_struct::spMatCountList, distr_org_struct::spMatElementList, distr_org_struct::spMatIdxList, and JK_contribs_buffer_struct::summedIntegralList.

Referenced by execute_joblist_K_serial(), and execute_joblist_K_thread_func().

◆ getDmatLimitMatrixCSRList()

static int getDmatLimitMatrixCSRList ( csr_matrix_struct dmatLimitMatrixCSRList,
int  numberOfLevels,
const csr_matrix_struct densCSR,
const int *const *  basisFuncGroupList,
const int *  basisFuncGroupCounterList 
)
static

Variable Documentation

◆ HUGE_INTEGER_NUMBER

const int HUGE_INTEGER_NUMBER = 2000000000
static

Referenced by compute_K_by_boxes().

◆ K_CSR_shared_access_mutex

pthread_mutex_t K_CSR_shared_access_mutex = PTHREAD_MUTEX_INITIALIZER