ergo
integral_matrix_wrappers.h
Go to the documentation of this file.
1 /* Ergo, version 3.8, a program for linear scaling electronic structure
2  * calculations.
3  * Copyright (C) 2019 Elias Rudberg, Emanuel H. Rubensson, Pawel Salek,
4  * and Anastasia Kruchinina.
5  *
6  * This program is free software: you can redistribute it and/or modify
7  * it under the terms of the GNU General Public License as published by
8  * the Free Software Foundation, either version 3 of the License, or
9  * (at your option) any later version.
10  *
11  * This program is distributed in the hope that it will be useful,
12  * but WITHOUT ANY WARRANTY; without even the implied warranty of
13  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
14  * GNU General Public License for more details.
15  *
16  * You should have received a copy of the GNU General Public License
17  * along with this program. If not, see <http://www.gnu.org/licenses/>.
18  *
19  * Primary academic reference:
20  * Ergo: An open-source program for linear-scaling electronic structure
21  * calculations,
22  * Elias Rudberg, Emanuel H. Rubensson, Pawel Salek, and Anastasia
23  * Kruchinina,
24  * SoftwareX 7, 107 (2018),
25  * <http://dx.doi.org/10.1016/j.softx.2018.03.005>
26  *
27  * For further information about Ergo, see <http://www.ergoscf.org>.
28  */
29 
39 #ifndef INTEGRAL_MATRIX_WRAPPERS_HEADER
40 #define INTEGRAL_MATRIX_WRAPPERS_HEADER
41 
42 #include "basisinfo.h"
43 #include "matrix_typedefs.h"
44 #include "integrals_2el.h"
45 
46 
47 int
48 compute_V_sparse(const BasisInfoStruct& basisInfo,
49  const IntegralInfo& integralInfo,
50  const Molecule& molecule,
51  ergo_real threshold,
52  ergo_real boxSize,
53  symmMatrix & V,
54  std::vector<int> const & permutationHML,
55  ergo_real & result_nuclearRepulsionEnergy);
56 
57 int
59  const IntegralInfo& integralInfo,
60  const Molecule& molecule,
61  ergo_real threshold,
62  ergo_real boxSize,
63  symmMatrix & V,
64  std::vector<int> const & permutationHML,
65  ergo_real & result_nuclearRepulsionEnergy);
66 
67 
68 int
70  const IntegralInfo& integralInfo,
71  const Molecule& molecule,
72  ergo_real threshold,
73  ergo_real boxSize,
74  const symmMatrix & densityMatrix_sparse,
75  std::vector<int> const & permutationHML,
76  ergo_real* result_gradient_list);
77 
78 
81  const Molecule& molecule,
82  const BasisInfoStruct& basisInfo,
83  const symmMatrix & D,
84  ergo_real threshold_integrals_1el,
85  mat::SizesAndBlocks const & matrix_size_block_info,
86  std::vector<int> const & permutationHML);
87 
88 
89 int
91  const IntegralInfo& integralInfo,
92  ergo_real threshold,
93  ergo_real boxSize,
94  symmMatrix & T,
95  std::vector<int> const & permutationHML);
96 
97 
98 int
100  symmMatrix & S_symm,
101  std::vector<int> const & permutationHML);
102 
103 
107 int
108 compute_R_matrix_sparse(const BasisInfoStruct & basisInfo_A,
109  const BasisInfoStruct & basisInfo_B,
110  normalMatrix & result_R,
111  ergo_real sparse_threshold,
112  std::vector<int> const & matrixPermutationVec_A,
113  std::vector<int> const & matrixPermutationVec_B);
114 
115 
116 int
118  int pow_x,
119  int pow_y,
120  int pow_z,
121  symmMatrix & A_symm,
122  std::vector<int> const & permutationHML);
123 
124 
125 int
127  const IntegralInfo& integralInfo,
128  const JK::Params& J_K_params,
129  symmMatrix & J,
130  const symmMatrix & densityMatrix_sparse,
131  std::vector<int> const & permutationHML);
132 
133 
134 int
136  const IntegralInfo& integralInfo,
137  const JK::ExchWeights & CAM_params,
138  const JK::Params& J_K_params,
139  symmMatrix & K,
140  symmMatrix & densityMatrix_sparse,
141  std::vector<int> const & permutationHML,
142  std::vector<int> const & inversePermutationHML);
143 
144 int
146  const IntegralInfo& integralInfo,
147  const JK::ExchWeights & CAM_params,
148  const JK::Params& J_K_params,
149  normalMatrix & K,
150  normalMatrix & densityMatrix_sparse,
151  std::vector<int> const & permutationHML,
152  std::vector<int> const & inversePermutationHML);
153 
154 
155 #endif
compute_T_sparse_linear
int compute_T_sparse_linear(const BasisInfoStruct &basisInfo, const IntegralInfo &integralInfo, ergo_real threshold, ergo_real boxSize, symmMatrix &T, std::vector< int > const &permutationHML)
Definition: integral_matrix_wrappers.cc:331
integral_matrix_wrappers.h
Wrapper routines for different parts of the integral code, including conversion of matrices from/to t...
integrals_1el_potential.h
Code for 1-electron integrals, computation of electron-nuclear potential energy matrix V.
integrals_1el_kinetic.h
Code for 1-electron integrals, computation of kinetic-energy matrix T.
BasisInfoStruct::noOfBasisFuncs
int noOfBasisFuncs
Definition: basisinfo.h:120
compute_operator_matrix_sparse_symm
int compute_operator_matrix_sparse_symm(const BasisInfoStruct &basisInfo, int pow_x, int pow_y, int pow_z, symmMatrix &A_symm, std::vector< int > const &permutationHML)
Definition: integral_matrix_wrappers.cc:522
memorymanag.h
Memory allocation/deallocation routines.
compute_operator_matrix_sparse_symm
int compute_operator_matrix_sparse_symm(const BasisInfoStruct &basisInfo, int pow_x, int pow_y, int pow_z, symmMatrix &A_symm, std::vector< int > const &permutationHML)
Definition: integral_matrix_wrappers.cc:522
check_diagonal_elements_of_overlap_matrix
static int check_diagonal_elements_of_overlap_matrix(int n, const symmMatrix &S_symm)
Definition: integral_matrix_wrappers.cc:387
compute_T_sparse_linear
int compute_T_sparse_linear(const BasisInfoStruct &basisInfo, const IntegralInfo &integralInfo, ergo_real threshold, ergo_real boxSize, symmMatrix &T, std::vector< int > const &permutationHML)
Definition: integral_matrix_wrappers.cc:331
LOG_CAT_ERROR
#define LOG_CAT_ERROR
Definition: output.h:47
LOG_CAT_WARNING
#define LOG_CAT_WARNING
Definition: output.h:48
create_CSR_for_K
int create_CSR_for_K(const BasisInfoStruct &basisInfo, const IntegralInfo &integralInfo, const JK::Params &J_K_params, csr_matrix_struct *dens_CSR, csr_matrix_struct *K_CSR, int symmetryFlag)
Definition: integrals_2el_K_prep.cc:532
ergo_real
double ergo_real
Definition: realtype.h:69
compute_J_by_boxes_linear
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
compute_K_by_boxes_sparse
int compute_K_by_boxes_sparse(const BasisInfoStruct &basisInfo, const IntegralInfo &integralInfo, const JK::ExchWeights &CAM_params, const JK::Params &J_K_params, symmMatrix &K, symmMatrix &densityMatrix_sparse, std::vector< int > const &permutationHML, std::vector< int > const &inversePermutationHML)
Returns the exchange matrix multiplied by 0.5.
Definition: integral_matrix_wrappers.cc:794
compute_overlap_matrix_sparse
int compute_overlap_matrix_sparse(const BasisInfoStruct &basisInfo, symmMatrix &S_symm, std::vector< int > const &permutationHML)
Definition: integral_matrix_wrappers.cc:423
symmMatrix
MatrixSymmetric< real, matri > symmMatrix
Definition: test_LanczosSeveralLargestEig.cc:69
compute_R_matrix_sparse
int compute_R_matrix_sparse(const BasisInfoStruct &basisInfo_A, const BasisInfoStruct &basisInfo_B, normalMatrix &result_R, ergo_real sparse_threshold, std::vector< int > const &matrixPermutationVec_A, std::vector< int > const &matrixPermutationVec_B)
compute_R_matrix_sparse computes the overlap matrix between two different basis sets.
Definition: integral_matrix_wrappers.cc:446
ergo_CSR_get_values
int ergo_CSR_get_values(const csr_matrix_struct *csr, std::vector< int > &rowind, std::vector< int > &colind, std::vector< ergo_real > &values, long nvalues)
Definition: csr_matrix.cc:321
compute_J_by_boxes_sparse
int compute_J_by_boxes_sparse(const BasisInfoStruct &basisInfo, const IntegralInfo &integralInfo, const JK::Params &J_K_params, symmMatrix &J, const symmMatrix &densityMatrix_sparse, std::vector< int > const &permutationHML)
Definition: integral_matrix_wrappers.cc:596
ergo_CSR_create
int ergo_CSR_create(csr_matrix_struct *csr, int symmetryFlag, int n, long nnz, const std::vector< int > &rowind, const std::vector< int > &colind)
Definition: csr_matrix.cc:75
BasisInfoStruct
Definition: basisinfo.h:112
Molecule::getNoOfAtoms
int getNoOfAtoms() const
Definition: molecule.h:114
JK::Params
Definition: integrals_2el.h:45
template_blas_fabs
Treal template_blas_fabs(Treal x)
get_basis_func_pair_list_2el
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
get_basis_func_pair_list_1el_for_V
int get_basis_func_pair_list_1el_for_V(const BasisInfoStruct &basisInfo, ergo_real threshold, ergo_real boxSize, ergo_real maxCharge, basis_func_index_pair_struct_1el *result_basisFuncPairList, int resultMaxCount)
Definition: basis_func_pair_list_1el.cc:52
normalMatrix
MatrixGeneral< real, matri > normalMatrix
Definition: test_LanczosSeveralLargestEig.cc:71
get_max_charge
static ergo_real get_max_charge(const Molecule &molecule)
Definition: integral_matrix_wrappers.cc:56
compute_V_sparse
int compute_V_sparse(const BasisInfoStruct &basisInfo, const IntegralInfo &integralInfo, const Molecule &molecule, ergo_real threshold, ergo_real boxSize, symmMatrix &V, std::vector< int > const &permutationHML, ergo_real &result_nuclearRepulsionEnergy)
Definition: integral_matrix_wrappers.cc:86
LOG_AREA_DENSFROMF
#define LOG_AREA_DENSFROMF
Definition: output.h:61
int_ptr
int * int_ptr
Definition: integral_matrix_wrappers.cc:518
IntegralInfo
Contains coefficients needed for quick integral evaluation.
Definition: integral_info.h:94
compute_K_by_boxes_sparse_nosymm
int compute_K_by_boxes_sparse_nosymm(const BasisInfoStruct &basisInfo, const IntegralInfo &integralInfo, const JK::ExchWeights &CAM_params, const JK::Params &J_K_params, normalMatrix &K, normalMatrix &densityMatrix_sparse, std::vector< int > const &permutationHML, std::vector< int > const &inversePermutationHML)
Definition: integral_matrix_wrappers.cc:892
basis_func_pair_list_1el.h
Functions for setting up lists of non-negligible basis function pairs, for 1-electron integrals.
compute_V_and_gradient_linear
int compute_V_and_gradient_linear(const BasisInfoStruct &basisInfo, const IntegralInfo &integralInfo, const Molecule &molecule, ergo_real threshold, ergo_real boxSize, const basis_func_index_pair_struct_1el *basisFuncIndexPairList, ergo_real *V_list, int noOfBasisFuncIndexPairs, bool compute_gradient_also, const ergo_real *D_list, ergo_real *gradient_list, ergo_real &result_nuclearRepulsionEnergy)
Definition: integrals_1el_potential.cc:1108
compute_T_matrix_sparse_linear
int compute_T_matrix_sparse_linear(const BasisInfoStruct &basisInfo, ergo_real threshold, ergo_real boxSize, int *nvaluesList, int **colindList, ergo_real **valuesList)
Definition: integrals_1el_kinetic.cc:157
integrals_2el_boxed.h
Code for 2-electron integrals, computation of Coulomb (J) and HF exchange (K) matrices using a single...
LOG_AREA_UNDEFINED
#define LOG_AREA_UNDEFINED
Definition: output.h:56
compute_gradient_of_nucl_and_trDV
int compute_gradient_of_nucl_and_trDV(const BasisInfoStruct &basisInfo, const IntegralInfo &integralInfo, const Molecule &molecule, ergo_real threshold, ergo_real boxSize, const symmMatrix &densityMatrix_sparse, std::vector< int > const &permutationHML, ergo_real *result_gradient_list)
Definition: integral_matrix_wrappers.cc:237
integrals_2el_K_prep.h
Code for preparing for computation of the Hartree-Fock exchange matrix K.
csr_matrix_struct
Definition: csr_matrix.h:51
Util::TimeMeter::print
void print(int area, const char *routine)
Definition: utilities.h:111
compute_operator_matrix_sparse
int compute_operator_matrix_sparse(const BasisInfoStruct &basisInfoA, const BasisInfoStruct &basisInfoB, int pow_x, int pow_y, int pow_z, int n_A, int n_B, std::vector< int > &nvaluesList, std::vector< std::vector< int > > &colindList, std::vector< std::vector< ergo_real > > &valuesList)
computes the matrix of a dipole/quadrupole/etc operator.
Definition: operator_matrix.cc:116
get_CSR_from_normalMatrix
static int get_CSR_from_normalMatrix(int n, const normalMatrix &A, std::vector< int > const &inversePermutationHML, csr_matrix_struct &CSR)
Definition: integral_matrix_wrappers.cc:747
Molecule::getAtom
const Atom & getAtom(int i) const
Definition: molecule.h:113
ergo_real_ptr
ergo_real * ergo_real_ptr
Definition: integral_matrix_wrappers.cc:519
utilities.h
Basic OS access utilities.
ergo_CSR_add_to_element
int ergo_CSR_add_to_element(csr_matrix_struct *csr, int row, int col, ergo_real value)
Definition: csr_matrix.cc:252
compute_J_by_boxes_sparse
int compute_J_by_boxes_sparse(const BasisInfoStruct &basisInfo, const IntegralInfo &integralInfo, const JK::Params &J_K_params, symmMatrix &J, const symmMatrix &densityMatrix_sparse, std::vector< int > const &permutationHML)
Definition: integral_matrix_wrappers.cc:596
A
#define A
LOG_CAT_INFO
#define LOG_CAT_INFO
Definition: output.h:49
mat::FileWritable::writeAndReadAll
static std::string writeAndReadAll()
Definition: FileWritable.cc:509
compute_V_hierarchical
int compute_V_hierarchical(const BasisInfoStruct &basisInfo, const IntegralInfo &integralInfo, const Molecule &molecule, ergo_real threshold, ergo_real boxSize, const basis_func_index_pair_struct_1el *basisFuncIndexPairList, int noOfBasisFuncIndexPairs, csr_matrix_struct *V_CSR, ergo_real &result_nuclearRepulsionEnergy)
Definition: integrals_1el_potential.cc:1415
integrals_2el_J.h
Code for computing the Coulomb matrix J.
matrix_typedefs.h
Header file with typedefs for matrix and vector types. The levels of hierarchic matrices are defined ...
basisinfo.h
Code for setting up basis functions starting from shells.
get_electron_nuclear_attraction_energy
ergo_real get_electron_nuclear_attraction_energy(const IntegralInfo &integralInfo, const Molecule &molecule, const BasisInfoStruct &basisInfo, const symmMatrix &D, ergo_real threshold_integrals_1el, mat::SizesAndBlocks const &matrix_size_block_info, std::vector< int > const &permutationHML)
Definition: integral_matrix_wrappers.cc:304
integrals_2el.h
Parameters related to integral evaluation.
get_electron_nuclear_attraction_energy
ergo_real get_electron_nuclear_attraction_energy(const IntegralInfo &integralInfo, const Molecule &molecule, const BasisInfoStruct &basisInfo, const symmMatrix &D, ergo_real threshold_integrals_1el, mat::SizesAndBlocks const &matrix_size_block_info, std::vector< int > const &permutationHML)
Definition: integral_matrix_wrappers.cc:304
compute_V_sparse_hierarchical
int compute_V_sparse_hierarchical(const BasisInfoStruct &basisInfo, const IntegralInfo &integralInfo, const Molecule &molecule, ergo_real threshold, ergo_real boxSize, symmMatrix &V, std::vector< int > const &permutationHML, ergo_real &result_nuclearRepulsionEnergy)
Definition: integral_matrix_wrappers.cc:168
JK::ExchWeights
Definition: integral_info.h:148
output_current_memory_usage
void output_current_memory_usage(int logArea, const char *contextString)
Definition: output.cc:186
Atom::charge
ergo_real charge
Definition: molecule.h:52
compute_R_matrix_sparse
int compute_R_matrix_sparse(const BasisInfoStruct &basisInfo_A, const BasisInfoStruct &basisInfo_B, normalMatrix &result_R, ergo_real sparse_threshold, std::vector< int > const &matrixPermutationVec_A, std::vector< int > const &matrixPermutationVec_B)
compute_R_matrix_sparse computes the overlap matrix between two different basis sets.
Definition: integral_matrix_wrappers.cc:446
Molecule
Representation of a molecule as a set of nuclei and total charge.
Definition: molecule.h:87
operator_matrix.h
Functions for computing the matrix of a dipole/quadrupole/etc operator. Full and sparse versions.
basis_func_pair_list.h
Functions for setting up lists of non-negligible basis function pairs, for 2-electron integrals.
ergo_free
void ergo_free(void *p)
Definition: memorymanag.cc:68
compute_V_sparse_hierarchical
int compute_V_sparse_hierarchical(const BasisInfoStruct &basisInfo, const IntegralInfo &integralInfo, const Molecule &molecule, ergo_real threshold, ergo_real boxSize, symmMatrix &V, std::vector< int > const &permutationHML, ergo_real &result_nuclearRepulsionEnergy)
Definition: integral_matrix_wrappers.cc:168
mat::SizesAndBlocks
Describes dimensions of matrix and its blocks on all levels.
Definition: SizesAndBlocks.h:45
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, csr_matrix_struct *K_CSR, csr_matrix_struct *densCSR, int symmetryFlag)
Definition: integrals_2el_K.cc:679
compute_gradient_of_nucl_and_trDV
int compute_gradient_of_nucl_and_trDV(const BasisInfoStruct &basisInfo, const IntegralInfo &integralInfo, const Molecule &molecule, ergo_real threshold, ergo_real boxSize, const symmMatrix &densityMatrix_sparse, std::vector< int > const &permutationHML, ergo_real *result_gradient_list)
Definition: integral_matrix_wrappers.cc:237
compute_K_by_boxes_sparse_nosymm
int compute_K_by_boxes_sparse_nosymm(const BasisInfoStruct &basisInfo, const IntegralInfo &integralInfo, const JK::ExchWeights &CAM_params, const JK::Params &J_K_params, normalMatrix &K, normalMatrix &densityMatrix_sparse, std::vector< int > const &permutationHML, std::vector< int > const &inversePermutationHML)
Definition: integral_matrix_wrappers.cc:892
JK::Params::threshold_J
ergo_real threshold_J
Definition: integrals_2el.h:47
convert_symm_CSR_to_HML_and_destroy_CSR
static void convert_symm_CSR_to_HML_and_destroy_CSR(csr_matrix_struct &M_CSR, symmMatrix &M_HML, std::vector< int > const &permutationHML)
Definition: integral_matrix_wrappers.cc:67
compute_K_by_boxes_sparse
int compute_K_by_boxes_sparse(const BasisInfoStruct &basisInfo, const IntegralInfo &integralInfo, const JK::ExchWeights &CAM_params, const JK::Params &J_K_params, symmMatrix &K, symmMatrix &densityMatrix_sparse, std::vector< int > const &permutationHML, std::vector< int > const &inversePermutationHML)
Returns the exchange matrix multiplied by 0.5.
Definition: integral_matrix_wrappers.cc:794
get_CSR_from_symmMatrix
static int get_CSR_from_symmMatrix(int n, const symmMatrix &A, std::vector< int > const &inversePermutationHML, csr_matrix_struct &CSR)
Definition: integral_matrix_wrappers.cc:691
ergo_CSR_get_element
ergo_real ergo_CSR_get_element(const csr_matrix_struct *csr, int row, int col)
Definition: csr_matrix.cc:278
compute_overlap_matrix_sparse
int compute_overlap_matrix_sparse(const BasisInfoStruct &basisInfo, symmMatrix &S_symm, std::vector< int > const &permutationHML)
Definition: integral_matrix_wrappers.cc:423
ergo_CSR_destroy
int ergo_CSR_destroy(csr_matrix_struct *csr)
Definition: csr_matrix.cc:171
do_output
void do_output(int logCategory, int logArea, const char *format,...)
Definition: output.cc:53
compute_V_sparse
int compute_V_sparse(const BasisInfoStruct &basisInfo, const IntegralInfo &integralInfo, const Molecule &molecule, ergo_real threshold, ergo_real boxSize, symmMatrix &V, std::vector< int > const &permutationHML, ergo_real &result_nuclearRepulsionEnergy)
Definition: integral_matrix_wrappers.cc:86
integrals_2el_K.h
Code for computing the Hartree-Fock exchange matrix K.
ergo_CSR_get_nvalues
long ergo_CSR_get_nvalues(const csr_matrix_struct *csr)
Definition: csr_matrix.cc:314
Util::TimeMeter
Time-measuring class.
Definition: utilities.h:80
output.h
Functionality for writing output messages to a text file.