ergo
ci.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 
37 #ifndef CI_HEADER
38 #define CI_HEADER
39 
40 #include "basisinfo.h"
41 #include "integrals_2el.h"
42 
43 
44 namespace CI {
45 
46 struct Options {
57 
64  initial_step_length(0.01),
66  shift(0.0),
68  energy_diff_limit(10.0)
69  {
70  }
71 };
72 
73 } /* End of CI namespace */
74 
75 
76 int do_CI(
77  const BasisInfoStruct & basisInfo,
78  const IntegralInfo & integralInfo,
79  const CI::Options& options,
80  const Molecule & molecule,
81  const ergo_real* S,
82  const ergo_real* h_AO,
83  const ergo_real* F_a,
84  const ergo_real* F_b,
85  int n_el_a,
86  int n_el_b,
87  ergo_real nuclearEnergy,
88  ergo_real HF_energy
89  );
90 
91 
92 #endif
mult_by_CI_matrix_direct
void mult_by_CI_matrix_direct(int nSOs, int nEl, const four_idx_SO_struct *g_SO, const two_idx_SO_struct *h_SO, int nSlaterDets, const SlaterDet_struct *SlaterDetList, SlaterDet_struct **groupList, const ergo_real *sourceVector, ergo_real *resultVector, ergo_real shift)
Definition: ci.cc:2003
pqrs_struct::assign
void assign(int pp, int qq, int rr, int ss)
Definition: ci.cc:2579
MatVecMul::nSOs
int nSOs
Definition: ci.cc:2524
template_blas_sqrt
Treal template_blas_sqrt(Treal x)
get_vector_norm
static ergo_real get_vector_norm(int n, const ergo_real *v)
Definition: ci.cc:102
get_2el_contribs
void get_2el_contribs(int nSOs, int nEl, int nSlaterDets, const SlaterDet_struct *SlaterDetList, int nSlaterDetPairs, const SlaterDet_pair_struct *SlaterDet_pair_list, const int *pairCountList, const four_idx_SO_struct *g_SO, ergo_real *resultMatrix)
Definition: ci.cc:1080
contrib_debug_struct::p
int p
Definition: ci.cc:635
SlaterDet_pair_struct::SOs_a
char SOs_a[2]
Definition: ci.cc:95
CI::Options::Options
Options()
Initializes all the fields to sane values.
Definition: ci.h:59
BasisInfoStruct::noOfBasisFuncs
int noOfBasisFuncs
Definition: basisinfo.h:120
do_2e_integral
ergo_real do_2e_integral(int mu, int nu, int la, int si, const BasisInfoStruct &basisInfo, const IntegralInfo &integralInfo)
Definition: integrals_2el_explicit.cc:75
rand_m1_to_1
static ergo_real rand_m1_to_1()
Definition: ci.cc:1796
get_2el_energy_and_gradient
void get_2el_energy_and_gradient(int nSOs, int nEl, int nSlaterDets, const SlaterDet_struct *SlaterDetList, int nSlaterDetPairs, const SlaterDet_pair_struct *SlaterDet_pair_list, const int *pairCountList, int noOfTrialVectors, ergo_real *energy_list, ergo_real **coeffListList, const four_idx_SO_struct *g_SO, ergo_real **resultGradient_list)
Definition: ci.cc:644
dipole_moment.h
Functionality for computing the dipole moment of a molecule for a given density matrix.
CI::Options::energy_diff_limit
ergo_real energy_diff_limit
Definition: ci.h:56
get_1el_contribs
void get_1el_contribs(int nSOs, int nEl, int nSlaterDets, const SlaterDet_struct *SlaterDetList, int nSlaterDetPairs, const SlaterDet_pair_struct *SlaterDet_pair_list, const int *pairCountList, const two_idx_SO_struct *h_SO, ergo_real *resultMatrix)
Definition: ci.cc:468
memorymanag.h
Memory allocation/deallocation routines.
ddf_load_density
int ddf_load_density(const char *densityFileName, int noOfDensityMatrices, const IntegralInfo &integralInfo, BasisInfoStruct **basisInfo, ergo_real **densityMatrix)
Function opens fileName, fills in basisInfo (which has to be allocated and nullified),...
Definition: density_description_file.cc:1125
LOG_CAT_ERROR
#define LOG_CAT_ERROR
Definition: output.h:47
get_2e_density_matrix
int get_2e_density_matrix(int nSOs, int nEl, four_idx_SO_struct *d, int nSlaterDets, const SlaterDet_struct *SlaterDetList, const ergo_real *coeffList)
Definition: ci.cc:1357
CI::Options::initial_step_length
ergo_real initial_step_length
Definition: ci.h:52
pqrs_struct::r
int r
Definition: ci.cc:2577
SO_struct
Definition: ci.cc:78
ergo_real
double ergo_real
Definition: realtype.h:69
four_idx_SO_struct::x
ergo_real x[MAX_SOS][MAX_SOS][MAX_SOS][MAX_SOS]
Definition: ci.cc:69
four_idx_AO_struct::x
ergo_real x[MAX_AOS][MAX_AOS][MAX_AOS][MAX_AOS]
Definition: ci.cc:64
get_1el_energy_and_gradient
void get_1el_energy_and_gradient(int nSOs, int nEl, int nSlaterDets, const SlaterDet_struct *SlaterDetList, int nSlaterDetPairs, const SlaterDet_pair_struct *SlaterDet_pair_list, const int *pairCountList, int noOfTrialVectors, ergo_real *energy_list, ergo_real **coeffListList, const two_idx_SO_struct *h_SO, ergo_real **resultGradient_list)
Definition: ci.cc:118
get_FCI_Slater_dets_all
int get_FCI_Slater_dets_all(SlaterDet_struct *SlaterDetList, int nElTot, int nSOs)
Definition: ci.cc:1787
MatVecMul::do_mat_vec_mul
void do_mat_vec_mul(int n, const ergo_real *sourceVector, ergo_real *resultVector) const
Definition: ci.cc:2531
simple_lanczos.h
Simple implementation of the Lanczos method.
get_SlaterDet_energy
static ergo_real get_SlaterDet_energy(int nSOs, int nEl, const four_idx_SO_struct *g_SO, const two_idx_SO_struct *h_SO, const SlaterDet_struct *SlaterDet)
Definition: ci.cc:2043
contrib_debug_struct
Definition: ci.cc:634
MatVecMul::groupList
SlaterDet_struct ** groupList
Definition: ci.cc:2529
MatVecMul
Definition: ci.cc:2522
get_relevant_SlaterDet_pairs
int get_relevant_SlaterDet_pairs(int nSlaterDets, SlaterDet_struct *SlaterDetList, SlaterDet_struct **groupList, int nEl, SlaterDet_pair_struct *resultList)
Definition: ci.cc:2417
SlaterDet_pair_struct::SOs_a_pos
char SOs_a_pos[2]
Definition: ci.cc:97
get_Lowdin_orbitals
int get_Lowdin_orbitals(int n, const ergo_real *S, ergo_real *MOs)
Definition: ci.cc:2481
BasisInfoStruct
Definition: basisinfo.h:112
SlaterDet_pair_struct::SOs_b_pos
char SOs_b_pos[2]
Definition: ci.cc:98
get_F_orbs
int get_F_orbs(int n, const ergo_real *F, const ergo_real *ovl, ergo_real *cmo, ergo_real *eigv)
get_f_orbs: use diagonalization to find the molecular orbitals corresponding to given Fock matrix f.
Definition: densfromf_full.cc:63
get_relevant_SlaterDet_pairs_recursive
int get_relevant_SlaterDet_pairs_recursive(int nSlaterDets, SlaterDet_struct *SlaterDetList, SlaterDet_struct **groupList, int nEl, SlaterDet_pair_struct *resultList, int level, int groupIdx1, int groupIdx2)
Definition: ci.cc:2234
get_relevant_SlaterDet_pairs_recursive_do_mult_or_dmat
void get_relevant_SlaterDet_pairs_recursive_do_mult_or_dmat(SlaterDet_struct **groupList, int nEl, int level, int groupIdx1, int groupIdx2, int ia, int ib, int aDiffCount, int bDiffCount, pair_status_struct *status, int nSOs, int nSlaterDets, const SlaterDet_struct *SlaterDetList, const four_idx_SO_struct *g_SO, const two_idx_SO_struct *h_SO, const ergo_real *sourceVector, ergo_real *resultVector, two_idx_SO_struct *result_dmat_1el, four_idx_SO_struct *result_dmat_2el)
Definition: ci.cc:1821
do_power_method
int do_power_method(int n, ergo_real *A, ergo_real *v)
Definition: ci.cc:2547
template_blas_fabs
Treal template_blas_fabs(Treal x)
get_eigs
ergo_real get_eigs(int n, ergo_real *M, ergo_real *bestVector, ergo_real *eigValListResult)
Definition: ci.cc:2438
MatVecMul::nEl
int nEl
Definition: ci.cc:2523
mat::sign
int sign(Treal value)
Sign function returns the sign of the input.
Definition: bisection.h:48
CI::Options::convergence_threshold
ergo_real convergence_threshold
Definition: ci.h:51
pair_status_struct::aDiffList
int aDiffList[2]
Definition: ci.cc:1811
SlaterDet_pair_struct
Definition: ci.cc:91
pqrs_struct::q
int q
Definition: ci.cc:2576
get_CI_matrix
void get_CI_matrix(int nSOs, int nEl, const four_idx_SO_struct *g_SO, const two_idx_SO_struct *h_SO, int nSlaterDets, const SlaterDet_struct *SlaterDetList, int nSlaterDetPairs, const SlaterDet_pair_struct *SlaterDet_pair_list, const int *pairCountList, ergo_real *resultMatrix)
Definition: ci.cc:1654
MatVecMul::shift
ergo_real shift
Definition: ci.cc:2530
SO_struct::spin
int spin
Definition: ci.cc:80
SlaterDet_struct::SO_list
char SO_list[MAX_ELECTRONS]
Definition: ci.cc:85
SlaterDet_pair_struct::b
int b
Definition: ci.cc:93
mult_by_CI_matrix
void mult_by_CI_matrix(int nSOs, int nEl, const four_idx_SO_struct *g_SO, const two_idx_SO_struct *h_SO, int nSlaterDets, const SlaterDet_struct *SlaterDetList, int nSlaterDetPairs, const SlaterDet_pair_struct *SlaterDet_pair_list, const int *pairCountList, const ergo_real *sourceVector, ergo_real *resultVector, ergo_real shift)
Definition: ci.cc:1612
get_dipole_moment_fullmat
void get_dipole_moment_fullmat(int n, const ergo_real *densityMatrix, const BasisInfoStruct &basisInfo, const Molecule &molecule, int logArea, const char *label)
Definition: dipole_moment.cc:91
IntegralInfo
Contains coefficients needed for quick integral evaluation.
Definition: integral_info.h:94
pair_status_struct::aDiffPosList
int aDiffPosList[2]
Definition: ci.cc:1813
get_1e_density_matrix
int get_1e_density_matrix(int nSOs, int nEl, two_idx_SO_struct *D, int nSlaterDets, const SlaterDet_struct *SlaterDetList, const ergo_real *coeffList)
Definition: ci.cc:1272
CI::Options::shift
ergo_real shift
Definition: ci.h:54
SPIN_A
const int SPIN_A
Definition: ci.cc:59
simple_lanczos::do_lanczos_method
void do_lanczos_method(int n, const ergo_real *guessVector, ergo_real &resultEig_lo, ergo_real *resultVec_lo, ergo_real &resultEig_hi, ergo_real *resultVec_hi, const Tmatvecmul &matvecmul, int maxIterations_in, ergo_real shift, ergo_real extraEnergy)
Definition: simple_lanczos.h:54
get_relevant_SlaterDet_pairs_recursive_2
int get_relevant_SlaterDet_pairs_recursive_2(SlaterDet_struct **groupList, int nEl, SlaterDet_pair_struct *resultList, int level, int groupIdx1, int groupIdx2, int ia, int ib, int aDiffCount, int bDiffCount, pair_status_struct *status)
Definition: ci.cc:2082
MatVecMul::g_SO
const four_idx_SO_struct * g_SO
Definition: ci.cc:2526
main
int main(int argc, char *argv[])
Definition: bin2m.cc:45
SPIN_B
const int SPIN_B
Definition: ci.cc:60
pqrs_struct::s
int s
Definition: ci.cc:2578
MatVecMul::SlaterDetList
const SlaterDet_struct * SlaterDetList
Definition: ci.cc:2528
integrals_2el_explicit.h
Code for explicit computation of 4-index 2-electron integrals.
SlaterDet_struct::count
int count
Definition: ci.cc:87
CI::Options::use_energy_diff_limit
int use_energy_diff_limit
Definition: ci.h:55
utilities.h
Basic OS access utilities.
SO_struct::coeffs
ergo_real coeffs[MAX_AOS]
Definition: ci.cc:79
do_CI
int do_CI(const BasisInfoStruct &basisInfo, const IntegralInfo &integralInfo, const CI::Options &options, const Molecule &molecule, const ergo_real *S, const ergo_real *h_AO, const ergo_real *F_a, const ergo_real *F_b, int n_el_a, int n_el_b, ergo_real nuclearEnergy, ergo_real HF_energy)
Definition: ci.cc:2596
A
#define A
two_idx_SO_struct::x
ergo_real x[MAX_SOS][MAX_SOS]
Definition: ci.cc:74
LOG_CAT_INFO
#define LOG_CAT_INFO
Definition: output.h:49
SlaterDet_pair_struct::nDiff
int nDiff
Definition: ci.cc:94
two_idx_SO_struct
Definition: ci.cc:73
CI
Definition: ci.h:44
basisinfo.h
Code for setting up basis functions starting from shells.
integrals_2el.h
Parameters related to integral evaluation.
normalize_vector
static void normalize_vector(int n, ergo_real *v)
Definition: ci.cc:110
pqrs_struct::p
int p
Definition: ci.cc:2575
get_1el_contribs_to_mult_or_dmat
void get_1el_contribs_to_mult_or_dmat(int nSOs, int nEl, int nSlaterDets, const SlaterDet_struct *SlaterDetList, const SlaterDet_pair_struct *SlaterDetPair, const two_idx_SO_struct *h_SO, const ergo_real *sourceVector, ergo_real *resultVector, two_idx_SO_struct *resultdmat)
Definition: ci.cc:294
get_CI_energy_and_gradient
void get_CI_energy_and_gradient(int nSOs, int nEl, const four_idx_SO_struct *g_SO, const two_idx_SO_struct *h_SO, int nSlaterDets, const SlaterDet_struct *SlaterDetList, int nSlaterDetPairs, const SlaterDet_pair_struct *SlaterDet_pair_list, const int *pairCountList, int noOfTrialVectors, ergo_real *energyList, ergo_real **coeffListList, ergo_real **gradientList, ergo_real nuclearEnergy)
Definition: ci.cc:1542
pair_status_struct
Definition: ci.cc:1810
contrib_debug_struct::s
int s
Definition: ci.cc:638
MAX_SOS
const int MAX_SOS
Definition: ci.cc:56
MatVecMul::nSlaterDets
int nSlaterDets
Definition: ci.cc:2525
density_description_file.h
An interface file for writing and reading density matrices to/from a file, including basis set inform...
CI::Options::no_of_core_electrons
int no_of_core_electrons
Definition: ci.h:49
output_current_memory_usage
void output_current_memory_usage(int logArea, const char *contextString)
Definition: output.cc:186
contrib_debug_struct::r
int r
Definition: ci.cc:637
get_CI_energy
ergo_real get_CI_energy(int nSOs, int nEl, const four_idx_SO_struct *g_SO, const two_idx_SO_struct *h_SO, int nSlaterDets, const SlaterDet_struct *SlaterDetList, const ergo_real *coeffList, ergo_real nuclearEnergy)
Definition: ci.cc:1494
MatVecMul::h_SO
const two_idx_SO_struct * h_SO
Definition: ci.cc:2527
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.
ergo_free
void ergo_free(void *p)
Definition: memorymanag.cc:68
CI::Options::use_random_orbitals
int use_random_orbitals
Definition: ci.h:47
SlaterDet_struct
Definition: ci.cc:84
ci.h
Configuration Interaction (CI) code.
CI::Options::max_no_of_iterations
int max_no_of_iterations
Definition: ci.h:53
get_combinations
int get_combinations(SlaterDet_struct *SlaterDetList, int nEl, int nSOs)
Definition: ci.cc:1688
get_FCI_Slater_dets_alpha_beta
int get_FCI_Slater_dets_alpha_beta(SlaterDet_struct *SlaterDetList, int nEl_a, int nEl_b, int nSOs)
Definition: ci.cc:1746
mat::syev
static void syev(const char *jobz, const char *uplo, const int *n, T *a, const int *lda, T *w, T *work, const int *lwork, int *info)
Definition: mat_gblas.h:382
CI::Options::use_random_starting_guess
int use_random_starting_guess
Definition: ci.h:50
contrib_debug_struct::q
int q
Definition: ci.cc:636
pqrs_struct::compare
int compare(int pp, int qq, int rr, int ss)
Definition: ci.cc:2586
MAX_AOS
const int MAX_AOS
Definition: ci.cc:55
do_output
void do_output(int logCategory, int logArea, const char *format,...)
Definition: output.cc:53
SlaterDet_struct::startIndex
int startIndex
Definition: ci.cc:86
pair_status_struct::bDiffPosList
int bDiffPosList[2]
Definition: ci.cc:1814
SlaterDet_pair_struct::SOs_b
char SOs_b[2]
Definition: ci.cc:96
pqrs_struct
Definition: ci.cc:2574
pair_status_struct::bDiffList
int bDiffList[2]
Definition: ci.cc:1812
four_idx_AO_struct
Definition: ci.cc:63
densfromf_full.h
Routine get_dens_from_fock_full() for getting density matrix from a given Fock matrix using diagonali...
get_2el_contribs_to_mult_or_dmat
void get_2el_contribs_to_mult_or_dmat(int nSOs, int nEl, int nSlaterDets, const SlaterDet_struct *SlaterDetList, const SlaterDet_pair_struct *SlaterDetPair, const four_idx_SO_struct *g_SO, const ergo_real *sourceVector, ergo_real *resultVector, four_idx_SO_struct *result_dmat_2el)
Definition: ci.cc:863
four_idx_SO_struct
Definition: ci.cc:68
contrib_debug_struct::sign
int sign
Definition: ci.cc:639
do_CI
int do_CI(const BasisInfoStruct &basisInfo, const IntegralInfo &integralInfo, const CI::Options &options, const Molecule &molecule, const ergo_real *S, const ergo_real *h_AO, const ergo_real *F_a, const ergo_real *F_b, int n_el_a, int n_el_b, ergo_real nuclearEnergy, ergo_real HF_energy)
Definition: ci.cc:2596
CI::Options
Definition: ci.h:46
output.h
Functionality for writing output messages to a text file.
MAX_ELECTRONS
const int MAX_ELECTRONS
Definition: ci.cc:57
SlaterDet_pair_struct::a
int a
Definition: ci.cc:92
LOG_AREA_CI
#define LOG_AREA_CI
Definition: output.h:64
CI::Options::use_lowdin_orbitals
int use_lowdin_orbitals
Definition: ci.h:48