ergo
scf_utils.cc File Reference

Various utilities used by self-consistent field (SCF) code. More...

#include <pthread.h>
#include <sstream>
#include "scf_utils.h"
#include "output.h"
#include "integrals_1el.h"
#include "memorymanag.h"
#include "operator_matrix.h"
#include "integrals_1el_kinetic.h"
#include "integrals_1el_potential.h"
#include "utilities.h"
#include "integrals_2el_explicit.h"
#include "basis_func_pair_list.h"
#include "integrals_2el_boxed.h"
#include "integrals_2el_layer.h"
#include "density_description_file.h"
#include "mat_acc_extrapolate.h"
#include "basis_func_pair_list_1el.h"
#include "integral_matrix_wrappers.h"
#include "units.h"
#include "densitymanager.h"
#include "dft_common.h"
#include "xc_matrix.h"
#include "xc_matrix_sparse.h"

Classes

class  Jworker
 
class  Kworker
 
class  Vxc_worker
 

Functions

template<class Tinvestigator , class Tworker >
static void do_scan_and_report (Tinvestigator investigator, Tworker worker, const char *scanName, int nSteps, ergo_real startThresh, ergo_real stepFactor)
 
void do_acc_scan_J (const symmMatrix &D, const IntegralInfo &integralInfo, const BasisInfoStruct &basisInfo, triangMatrix &invCholFactor, bool doInvCholFactorTransformation, const JK::Params &J_K_params, mat::SizesAndBlocks const &matrix_size_block_info, std::vector< int > const &permutationHML, int nSteps, ergo_real startThresh, ergo_real stepFactor)
 
void do_acc_scan_K (symmMatrix &D, const IntegralInfo &integralInfo, const BasisInfoStruct &basisInfo, triangMatrix &invCholFactor, bool doInvCholFactorTransformation, const JK::ExchWeights &CAM_params, const JK::Params &J_K_params, mat::SizesAndBlocks const &matrix_size_block_info, std::vector< int > const &permutationHML, std::vector< int > const &inversePermutationHML, int nSteps, ergo_real startThresh, ergo_real stepFactor)
 
void do_acc_scan_Vxc (symmMatrix &D, const IntegralInfo &integralInfo, const BasisInfoStruct &basisInfo, const Molecule &molecule, const Dft::GridParams &gridParams, int noOfElectrons, triangMatrix &invCholFactor, bool doInvCholFactorTransformation, mat::SizesAndBlocks const &matrix_size_block_info, std::vector< int > const &permutationHML, std::vector< int > const &inversePermutationHML, int nSteps, ergo_real startThresh, ergo_real stepFactor)
 
template<typename Tmatrix >
void output_sparsity_template (int n, const Tmatrix &M, const char *matrixName, const char *matrixTypeName)
 
void output_sparsity (int n, const normalMatrix &M, const char *matrixName)
 
void output_sparsity_symm (int n, const symmMatrix &M, const char *matrixName)
 
void output_sparsity_triang (int n, const triangMatrix &M, const char *matrixName)
 
static ergo_real get_trace (int n, const ergo_real *P, const ergo_real *H_core)
 
static int add_square_matrices (int n, const ergo_real *A, const ergo_real *B, ergo_real *C)
 
int compute_h_core_matrix_simple_dense (const IntegralInfo &integralInfo, const Molecule &molecule, const BasisInfoStruct &basisInfo, symmMatrix &H_core_Matrix_sparse, ergo_real threshold_integrals_1el, int noOfThreadsForV, mat::SizesAndBlocks const &matrix_size_block_info, std::vector< int > const &permutationHML, ergo_real &result_nuclearRepulsionEnergy)
 
int compute_h_core_matrix_sparse (const IntegralInfo &integralInfo, const Molecule &molecule, const Molecule &extraCharges, ergo_real electric_field_x, ergo_real electric_field_y, ergo_real electric_field_z, const BasisInfoStruct &basisInfo, symmMatrix &H_core_Matrix_sparse, ergo_real threshold_integrals_1el, int noOfThreadsForV, ergo_real boxSizeForVT, ergo_real &result_nuclearRepulsionEnergy, mat::SizesAndBlocks const &matrix_size_block_info, std::vector< int > const &permutationHML, int const create_dipole_mtx, std::vector< int > const *const inversePermutationHML, std::string const *const calculation_identifier, std::string const *const method_and_basis_set)
 
int get_gradient_for_given_mol_and_dens (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, ergo_real *result_gradient_list)
 
int save_symmetric_matrix (symmMatrix &A, const BasisInfoStruct &basisInfo, const char *fileName, std::vector< int > const &inversePermutationHML)
 Saves specified symmetic matrix to a file of specified name. More...
 
int add_disturbance_to_matrix (int n, symmMatrix &A, ergo_real disturbance, int specificElementCount, const int *elementIndexVector, std::vector< int > const &permutationHML)
 
int get_simple_starting_guess_sparse (int n, int noOfElectrons, symmMatrix &densityMatrix)
 
int get_diag_matrix_from_file (int n, symmMatrix &M, const char *fileName, std::vector< int > const &permutationHML)
 
int write_diag_elements_to_file (int n, const symmMatrix &M, const char *fileName, std::vector< int > const &permutationHML)
 
int write_full_matrix (int n, const symmMatrix &M, const char *fileName, std::vector< int > const &inversePermutationHML)
 
int write_basis_func_coord_file (const BasisInfoStruct &basisInfo)
 
int write_2el_integral_m_file (const BasisInfoStruct &basisInfo, const IntegralInfo &integralInfo)
 
static int get_2e_matrix_and_energy_simple_HF_sparse (const BasisInfoStruct &basisInfo, const Molecule &molecule, const IntegralInfo &integralInfo, const JK::ExchWeights &CAM_params, symmMatrix &twoelMatrix_sparse, symmMatrix &densityMatrix_sparse, const JK::Params &J_K_params, mat::SizesAndBlocks const &matrix_size_block_info, std::vector< int > const &permutationHML, std::vector< int > const &inversePermutationHML, ergo_real *energy_2el, int get_J_K_matrices, symmMatrix &J_matrix, symmMatrix &K_matrix)
 
static int get_2e_matrices_and_energy_simple_HF_sparse_unrestricted (const BasisInfoStruct &basisInfo, const Molecule &molecule, const IntegralInfo &integralInfo, symmMatrix &twoelMatrix_sparse_alpha, symmMatrix &twoelMatrix_sparse_beta, symmMatrix &densityMatrix_sparse_alpha, symmMatrix &densityMatrix_sparse_beta, const JK::Params &J_K_params, const JK::ExchWeights &CAM_params, mat::SizesAndBlocks const &matrix_size_block_info, std::vector< int > const &permutationHML, std::vector< int > const &inversePermutationHML, ergo_real *energy_2el)
 
static int get_2e_matrix_and_energy_simple_sparse (const BasisInfoStruct &basisInfo, const Molecule &molecule, const IntegralInfo &integralInfo, symmMatrix &twoelMatrix_sparse, symmMatrix &densityMatrix_sparse, const JK::Params &J_K_params, const JK::ExchWeights &CAM_params, const Dft::GridParams &gridParams, mat::SizesAndBlocks const &matrix_size_block_info, std::vector< int > const &permutationHML, std::vector< int > const &inversePermutationHML, ergo_real *energy_2el, int do_xc, int noOfElectrons, int get_J_K_Fxc_matrices, symmMatrix &J_matrix, symmMatrix &K_matrix, symmMatrix &Fxc_matrix, SCF_statistics &stats)
 
Routine for computing the two-electron part of the Fock/KS matrix, in sparse form. More...
 
static int get_2e_matrices_and_energy_simple_sparse_unrestricted (const BasisInfoStruct &basisInfo, const Molecule &molecule, const IntegralInfo &integralInfo, const JK::ExchWeights &CAM_params, symmMatrix &twoelMatrix_sparse_alpha, symmMatrix &twoelMatrix_sparse_beta, symmMatrix &densityMatrix_sparse_alpha, symmMatrix &densityMatrix_sparse_beta, const JK::Params &J_K_params, const Dft::GridParams &gridParams, mat::SizesAndBlocks const &matrix_size_block_info, std::vector< int > const &permutationHML, std::vector< int > const &inversePermutationHML, ergo_real *energy_2el, int do_xc, int noOfElectrons)
 
int get_2e_matrix_and_energy_sparse (const BasisInfoStruct &basisInfo, const Molecule &molecule, const IntegralInfo &integralInfo, symmMatrix &twoelMatrix_sparse, symmMatrix &densityMatrix_sparse, const JK::Params &J_K_params, const JK::ExchWeights &CAM_params, const Dft::GridParams &gridParams, int do_xc, ergo_real *energy_2el, int noOfElectrons, mat::SizesAndBlocks const &matrix_size_block_info, std::vector< int > const &permutationHML, std::vector< int > const &inversePermutationHML, int get_J_K_Fxc_matrices, symmMatrix &J_matrix, symmMatrix &K_matrix, symmMatrix &Fxc_matrix, SCF_statistics &stats)
 
General routine for computing the two-electron part of the Fock/KS matrix. More...
 
int get_2e_matrices_and_energy_sparse_unrestricted (const BasisInfoStruct &basisInfo, const Molecule &molecule, const IntegralInfo &integralInfo, const JK::ExchWeights &CAM_params, symmMatrix &twoelMatrix_sparse_alpha, symmMatrix &twoelMatrix_sparse_beta, symmMatrix &densityMatrix_sparse_alpha, symmMatrix &densityMatrix_sparse_beta, const JK::Params &J_K_params, const Dft::GridParams &gridParams, int do_xc, ergo_real *energy_2el, int noOfElectrons, mat::SizesAndBlocks const &matrix_size_block_info, std::vector< int > const &permutationHML, std::vector< int > const &inversePermutationHML)
 
int get_2e_matrices_and_energy_restricted_open (const BasisInfoStruct &basisInfo, const Molecule &molecule, const IntegralInfo &integralInfo, const JK::ExchWeights &CAM_params, symmMatrix &twoelMatrix_Fc, symmMatrix &twoelMatrix_Fo, symmMatrix &densityMatrix_sparse_alpha, symmMatrix &densityMatrix_sparse_beta, const JK::Params &J_K_params, const Dft::GridParams &gridParams, int do_xc, ergo_real *energy_2el, int noOfElectrons, mat::SizesAndBlocks const &matrix_size_block_info, std::vector< int > const &permutationHML, std::vector< int > const &inversePermutationHML)
 Computes G_c and G_o. More...
 
int compute_FDSminusSDF_sparse (int n, symmMatrix &F_symm, symmMatrix &D_symm, symmMatrix &S_symm, normalMatrix &result, ergo_real sparse_threshold)
 
int determine_number_of_electrons_unrestricted (int noOfElectrons, int alpha_beta_diff, int *noOfElectrons_alpha, int *noOfElectrons_beta)
 
static void get_mulliken_charges (const symmMatrix &densityMatrix, const symmMatrix &S_symm, const BasisInfoStruct &basisInfo, mat::SizesAndBlocks const &matrix_size_block_info, std::vector< int > const &permutationHML, std::vector< int > const &inversePermutationHML, const Molecule &molecule, std::vector< ergo_real > &resultVector)
 
void do_mulliken_atomic_charges (const symmMatrix &densityMatrix, const symmMatrix &S_symm, const BasisInfoStruct &basisInfo, mat::SizesAndBlocks const &matrix_size_block_info, std::vector< int > const &permutationHML, std::vector< int > const &inversePermutationHML, const Molecule &molecule)
 
void do_mulliken_spin_densities (const symmMatrix &spinDensityMatrix, const symmMatrix &S_symm, const BasisInfoStruct &basisInfo, mat::SizesAndBlocks const &matrix_size_block_info, std::vector< int > const &permutationHML, std::vector< int > const &inversePermutationHML, const Molecule &molecule)
 
static int write_gcube_file_header (FILE *f, const char *firstLine, const Molecule &m, double originX, double originY, double originZ, int NX, double incrX, int NY, double incrY, int NZ, double incrZ)
 
void get_exp_value_pos_operator (const BasisInfoStruct &basisInfo, const Molecule &molecule, const symmMatrix &densityMatrix, mat::SizesAndBlocks const &matrix_size_block_info, std::vector< int > const &permutationHML, std::vector< ergo_real > &mean, std::vector< ergo_real > &std)
 
void do_density_images (const BasisInfoStruct &basisInfo, const Molecule &molecule, const ergo_real *densityMatrixFull_tot, const ergo_real *densityMatrixFull_spin, double output_density_images_boxwidth, const std::string &filename_id)
 
void get_hf_weight_and_cam_params (int use_dft, ergo_real *exch_param_alpha, ergo_real *exch_param_beta, ergo_real *exch_param_mu)
 
void create_mtx_files_with_different_orderings (const symmMatrix &A, const std::string &calculation_identifier, const std::string &method_and_basis_set, const std::vector< int > &inversePermutationHML, const BasisInfoStruct &basisInfo)
 

Detailed Description

Various utilities used by self-consistent field (SCF) code.

For example, interface routines converting between HML matrix format used in main SCF code and elementwise format used by integral code.

Author
: Elias Rudberg responsible

Function Documentation

◆ add_disturbance_to_matrix()

int add_disturbance_to_matrix ( int  n,
symmMatrix A,
ergo_real  disturbance,
int  specificElementCount,
const int *  elementIndexVector,
std::vector< int > const &  permutationHML 
)

◆ add_square_matrices()

static int add_square_matrices ( int  n,
const ergo_real A,
const ergo_real B,
ergo_real C 
)
static

References A, and B.

Referenced by get_2e_matrix_and_energy_sparse().

◆ compute_FDSminusSDF_sparse()

◆ compute_h_core_matrix_simple_dense()

int compute_h_core_matrix_simple_dense ( const IntegralInfo integralInfo,
const Molecule molecule,
const BasisInfoStruct basisInfo,
symmMatrix H_core_Matrix_sparse,
ergo_real  threshold_integrals_1el,
int  noOfThreadsForV,
mat::SizesAndBlocks const &  matrix_size_block_info,
std::vector< int > const &  permutationHML,
ergo_real result_nuclearRepulsionEnergy 
)

◆ compute_h_core_matrix_sparse()

int compute_h_core_matrix_sparse ( const IntegralInfo integralInfo,
const Molecule molecule,
const Molecule extraCharges,
ergo_real  electric_field_x,
ergo_real  electric_field_y,
ergo_real  electric_field_z,
const BasisInfoStruct basisInfo,
symmMatrix H_core_Matrix_sparse,
ergo_real  threshold_integrals_1el,
int  noOfThreadsForV,
ergo_real  boxSizeForVT,
ergo_real result_nuclearRepulsionEnergy,
mat::SizesAndBlocks const &  matrix_size_block_info,
std::vector< int > const &  permutationHML,
int const  create_dipole_mtx,
std::vector< int > const *const  inversePermutationHML,
std::string const *const  calculation_identifier,
std::string const *const  method_and_basis_set 
)

◆ create_mtx_files_with_different_orderings()

void create_mtx_files_with_different_orderings ( const symmMatrix A,
const std::string &  calculation_identifier,
const std::string &  method_and_basis_set,
const std::vector< int > &  inversePermutationHML,
const BasisInfoStruct basisInfo 
)

◆ determine_number_of_electrons_unrestricted()

int determine_number_of_electrons_unrestricted ( int  noOfElectrons,
int  alpha_beta_diff,
int *  noOfElectrons_alpha,
int *  noOfElectrons_beta 
)

◆ do_acc_scan_J()

void do_acc_scan_J ( const symmMatrix D,
const IntegralInfo integralInfo,
const BasisInfoStruct basisInfo,
triangMatrix invCholFactor,
bool  doInvCholFactorTransformation,
const JK::Params J_K_params,
mat::SizesAndBlocks const &  matrix_size_block_info,
std::vector< int > const &  permutationHML,
int  nSteps,
ergo_real  startThresh,
ergo_real  stepFactor 
)

◆ do_acc_scan_K()

void do_acc_scan_K ( symmMatrix D,
const IntegralInfo integralInfo,
const BasisInfoStruct basisInfo,
triangMatrix invCholFactor,
bool  doInvCholFactorTransformation,
const JK::ExchWeights CAM_params,
const JK::Params J_K_params,
mat::SizesAndBlocks const &  matrix_size_block_info,
std::vector< int > const &  permutationHML,
std::vector< int > const &  inversePermutationHML,
int  nSteps,
ergo_real  startThresh,
ergo_real  stepFactor 
)

◆ do_acc_scan_Vxc()

void do_acc_scan_Vxc ( symmMatrix D,
const IntegralInfo integralInfo,
const BasisInfoStruct basisInfo,
const Molecule molecule,
const Dft::GridParams gridParams,
int  noOfElectrons,
triangMatrix invCholFactor,
bool  doInvCholFactorTransformation,
mat::SizesAndBlocks const &  matrix_size_block_info,
std::vector< int > const &  permutationHML,
std::vector< int > const &  inversePermutationHML,
int  nSteps,
ergo_real  startThresh,
ergo_real  stepFactor 
)

◆ do_density_images()

void do_density_images ( const BasisInfoStruct basisInfo,
const Molecule molecule,
const ergo_real densityMatrixFull_tot,
const ergo_real densityMatrixFull_spin,
double  output_density_images_boxwidth,
const std::string &  filename_id 
)

◆ do_mulliken_atomic_charges()

void do_mulliken_atomic_charges ( const symmMatrix densityMatrix,
const symmMatrix S_symm,
const BasisInfoStruct basisInfo,
mat::SizesAndBlocks const &  matrix_size_block_info,
std::vector< int > const &  permutationHML,
std::vector< int > const &  inversePermutationHML,
const Molecule molecule 
)

◆ do_mulliken_spin_densities()

void do_mulliken_spin_densities ( const symmMatrix spinDensityMatrix,
const symmMatrix S_symm,
const BasisInfoStruct basisInfo,
mat::SizesAndBlocks const &  matrix_size_block_info,
std::vector< int > const &  permutationHML,
std::vector< int > const &  inversePermutationHML,
const Molecule molecule 
)

◆ do_scan_and_report()

template<class Tinvestigator , class Tworker >
static void do_scan_and_report ( Tinvestigator  investigator,
Tworker  worker,
const char *  scanName,
int  nSteps,
ergo_real  startThresh,
ergo_real  stepFactor 
)
static

◆ get_2e_matrices_and_energy_restricted_open()

int get_2e_matrices_and_energy_restricted_open ( const BasisInfoStruct basisInfo,
const Molecule molecule,
const IntegralInfo integralInfo,
const JK::ExchWeights CAM_params,
symmMatrix twoelMatrix_Fc,
symmMatrix twoelMatrix_Fo,
symmMatrix densityMatrix_sparse_alpha,
symmMatrix densityMatrix_sparse_beta,
const JK::Params J_K_params,
const Dft::GridParams gridParams,
int  do_xc,
ergo_real energy_2el,
int  noOfElectrons,
mat::SizesAndBlocks const &  matrix_size_block_info,
std::vector< int > const &  permutationHML,
std::vector< int > const &  inversePermutationHML 
)

◆ get_2e_matrices_and_energy_simple_HF_sparse_unrestricted()

static int get_2e_matrices_and_energy_simple_HF_sparse_unrestricted ( const BasisInfoStruct basisInfo,
const Molecule molecule,
const IntegralInfo integralInfo,
symmMatrix twoelMatrix_sparse_alpha,
symmMatrix twoelMatrix_sparse_beta,
symmMatrix densityMatrix_sparse_alpha,
symmMatrix densityMatrix_sparse_beta,
const JK::Params J_K_params,
const JK::ExchWeights CAM_params,
mat::SizesAndBlocks const &  matrix_size_block_info,
std::vector< int > const &  permutationHML,
std::vector< int > const &  inversePermutationHML,
ergo_real energy_2el 
)
static

◆ get_2e_matrices_and_energy_simple_sparse_unrestricted()

static int get_2e_matrices_and_energy_simple_sparse_unrestricted ( const BasisInfoStruct basisInfo,
const Molecule molecule,
const IntegralInfo integralInfo,
const JK::ExchWeights CAM_params,
symmMatrix twoelMatrix_sparse_alpha,
symmMatrix twoelMatrix_sparse_beta,
symmMatrix densityMatrix_sparse_alpha,
symmMatrix densityMatrix_sparse_beta,
const JK::Params J_K_params,
const Dft::GridParams gridParams,
mat::SizesAndBlocks const &  matrix_size_block_info,
std::vector< int > const &  permutationHML,
std::vector< int > const &  inversePermutationHML,
ergo_real energy_2el,
int  do_xc,
int  noOfElectrons 
)
static

◆ get_2e_matrices_and_energy_sparse_unrestricted()

int get_2e_matrices_and_energy_sparse_unrestricted ( const BasisInfoStruct basisInfo,
const Molecule molecule,
const IntegralInfo integralInfo,
const JK::ExchWeights CAM_params,
symmMatrix twoelMatrix_sparse_alpha,
symmMatrix twoelMatrix_sparse_beta,
symmMatrix densityMatrix_sparse_alpha,
symmMatrix densityMatrix_sparse_beta,
const JK::Params J_K_params,
const Dft::GridParams gridParams,
int  do_xc,
ergo_real energy_2el,
int  noOfElectrons,
mat::SizesAndBlocks const &  matrix_size_block_info,
std::vector< int > const &  permutationHML,
std::vector< int > const &  inversePermutationHML 
)

◆ get_2e_matrix_and_energy_simple_HF_sparse()

static int get_2e_matrix_and_energy_simple_HF_sparse ( const BasisInfoStruct basisInfo,
const Molecule molecule,
const IntegralInfo integralInfo,
const JK::ExchWeights CAM_params,
symmMatrix twoelMatrix_sparse,
symmMatrix densityMatrix_sparse,
const JK::Params J_K_params,
mat::SizesAndBlocks const &  matrix_size_block_info,
std::vector< int > const &  permutationHML,
std::vector< int > const &  inversePermutationHML,
ergo_real energy_2el,
int  get_J_K_matrices,
symmMatrix J_matrix,
symmMatrix K_matrix 
)
static

◆ get_2e_matrix_and_energy_simple_sparse()

static int get_2e_matrix_and_energy_simple_sparse ( const BasisInfoStruct basisInfo,
const Molecule molecule,
const IntegralInfo integralInfo,
symmMatrix twoelMatrix_sparse,
symmMatrix densityMatrix_sparse,
const JK::Params J_K_params,
const JK::ExchWeights CAM_params,
const Dft::GridParams gridParams,
mat::SizesAndBlocks const &  matrix_size_block_info,
std::vector< int > const &  permutationHML,
std::vector< int > const &  inversePermutationHML,
ergo_real energy_2el,
int  do_xc,
int  noOfElectrons,
int  get_J_K_Fxc_matrices,
symmMatrix J_matrix,
symmMatrix K_matrix,
symmMatrix Fxc_matrix,
SCF_statistics stats 
)
static

◆ get_2e_matrix_and_energy_sparse()

int get_2e_matrix_and_energy_sparse ( const BasisInfoStruct basisInfo,
const Molecule molecule,
const IntegralInfo integralInfo,
symmMatrix twoelMatrix_sparse,
symmMatrix densityMatrix_sparse,
const JK::Params J_K_params,
const JK::ExchWeights CAM_params,
const Dft::GridParams gridParams,
int  do_xc,
ergo_real energy_2el,
int  noOfElectrons,
mat::SizesAndBlocks const &  matrix_size_block_info,
std::vector< int > const &  permutationHML,
std::vector< int > const &  inversePermutationHML,
int  get_J_K_Fxc_matrices,
symmMatrix J_matrix,
symmMatrix K_matrix,
symmMatrix Fxc_matrix,
SCF_statistics stats 
)


General routine for computing the two-electron part of the Fock/KS matrix.

Both input and output matrices are in sparse form, but full matrix form may be used in intermediate steps. If FMM is not used, full matrix format is applied.

Parameters
basisInfothe used basis set.
moleculeposition of atoms (used for eg. XC grid).
integralInfo- the integral evaluation object.
twoelMatrix_sparse- the evaluation result.
densityMatrix_sparse- the density for which 2e matrix is to be evaluated.
J_K_paramsthe settings of the integral evaluation.
do_xcwhether xc contribution to 2e matrix and energy are to be added. 1 means that the traditional full matrix code should be called, 2 means that the sparse variant is to be used.
energy_2el2el energy contribution
noOfElectronsnumber of electrons...
CAM_paramsa structure containing parameters needed when functionals like CAMB3LYP are used.
gridParamsa structure containing parameters for the grid.
matrix_size_block_infoblock sizes etc for hierarchic matrix library.
get_J_K_Fxc_matricesflag saying if matrices should be saved for statistics/testing purposes. If that feature is active, matrices are saved in parameters J_matrix K_matrix Fxc_matrix .
J_matrixresulting J matrix, if requested.
K_matrixresulting K matrix, if requested.
Fxc_matrixresulting Fxc matrix, if requested.
statsa structure holding SCF statistics.
permutationHML- the permutation of basis functions, needed for transformation between the dense and sparse formats.
inversePermutationHML- the inverse permutation of basis functions, needed for transformation between the dense and sparse formats.

References add_square_matrices(), JK::ExchWeights::alpha, compute_2e_matrix_coulomb(), compute_2e_matrix_exchange(), compute_2e_matrix_list_explicit(), JK::ExchWeights::computeRangeSeparatedExchange, dft_get_xc_mt(), do_output(), get_2e_matrix_and_energy_simple_HF_sparse(), get_2e_matrix_and_energy_simple_sparse(), get_trace(), LOG_AREA_SCF, LOG_CAT_ERROR, LOG_CAT_INFO, BasisInfoStruct::noOfBasisFuncs, output_current_memory_usage(), JK::Params::threshold_J, JK::Params::threshold_K, JK::Params::use_fmm, and JK::Params::use_naive_fockmat_constr.

Referenced by SCF_restricted::get_2e_part_and_energy().

◆ get_diag_matrix_from_file()

int get_diag_matrix_from_file ( int  n,
symmMatrix M,
const char *  fileName,
std::vector< int > const &  permutationHML 
)

◆ get_exp_value_pos_operator()

void get_exp_value_pos_operator ( const BasisInfoStruct basisInfo,
const Molecule molecule,
const symmMatrix densityMatrix,
mat::SizesAndBlocks const &  matrix_size_block_info,
std::vector< int > const &  permutationHML,
std::vector< ergo_real > &  mean,
std::vector< ergo_real > &  std 
)

◆ get_gradient_for_given_mol_and_dens()

int get_gradient_for_given_mol_and_dens ( 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,
ergo_real result_gradient_list 
)

◆ get_hf_weight_and_cam_params()

void get_hf_weight_and_cam_params ( int  use_dft,
ergo_real exch_param_alpha,
ergo_real exch_param_beta,
ergo_real exch_param_mu 
)

◆ get_mulliken_charges()

static void get_mulliken_charges ( const symmMatrix densityMatrix,
const symmMatrix S_symm,
const BasisInfoStruct basisInfo,
mat::SizesAndBlocks const &  matrix_size_block_info,
std::vector< int > const &  permutationHML,
std::vector< int > const &  inversePermutationHML,
const Molecule molecule,
std::vector< ergo_real > &  resultVector 
)
static

◆ get_simple_starting_guess_sparse()

int get_simple_starting_guess_sparse ( int  n,
int  noOfElectrons,
symmMatrix densityMatrix 
)

◆ get_trace()

static ergo_real get_trace ( int  n,
const ergo_real P,
const ergo_real H_core 
)
static

◆ output_sparsity()

void output_sparsity ( int  n,
const normalMatrix M,
const char *  matrixName 
)

◆ output_sparsity_symm()

◆ output_sparsity_template()

template<typename Tmatrix >
void output_sparsity_template ( int  n,
const Tmatrix &  M,
const char *  matrixName,
const char *  matrixTypeName 
)

◆ output_sparsity_triang()

void output_sparsity_triang ( int  n,
const triangMatrix M,
const char *  matrixName 
)

◆ save_symmetric_matrix()

int save_symmetric_matrix ( symmMatrix A,
const BasisInfoStruct basisInfo,
const char *  fileName,
std::vector< int > const &  inversePermutationHML 
)

Saves specified symmetic matrix to a file of specified name.

Parameters
Athe matrix to save. The matrix must be saved to a backing store already.
basisInfothe basis set description.
fileNameThe file that will contain the matrix. It will be overwritten without further questions.
inversePermutationHMLpermutation information needed when using hierarchic matrices.

References A, ddf_writeShellListAndDensityMatricesToFile(), do_output(), LOG_AREA_SCF, LOG_CAT_INFO, and BasisInfoStruct::noOfBasisFuncs.

Referenced by SCF_restricted::save_final_potential(), and SCF_general::SCF_general().

◆ write_2el_integral_m_file()

int write_2el_integral_m_file ( const BasisInfoStruct basisInfo,
const IntegralInfo integralInfo 
)

◆ write_basis_func_coord_file()

int write_basis_func_coord_file ( const BasisInfoStruct basisInfo)

◆ write_diag_elements_to_file()

int write_diag_elements_to_file ( int  n,
const symmMatrix M,
const char *  fileName,
std::vector< int > const &  permutationHML 
)

◆ write_full_matrix()

int write_full_matrix ( int  n,
const symmMatrix M,
const char *  fileName,
std::vector< int > const &  inversePermutationHML 
)

◆ write_gcube_file_header()

static int write_gcube_file_header ( FILE *  f,
const char *  firstLine,
const Molecule m,
double  originX,
double  originY,
double  originZ,
int  NX,
double  incrX,
int  NY,
double  incrY,
int  NZ,
double  incrZ 
)
static