SCF_general.h
Go to the documentation of this file.00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026
00027
00028 #ifndef SCF_GENERAL_HEADER
00029 #define SCF_GENERAL_HEADER
00030
00031 #include "molecule.h"
00032 #include "basisinfo.h"
00033 #include "integrals_2el.h"
00034 #include "grid_stream.h"
00035 #include "scf.h"
00036 #include "densityfitting.h"
00037 #include "diis_general.h"
00038 #include "SCF_statistics.h"
00039
00040
00041 class SCF_general
00042 {
00043 public:
00044
00045
00046 void do_SCF_iterations();
00047
00048 void get_overlap_matrix(symmMatrix & S);
00049 void get_H_core_matrix(symmMatrix & H_core);
00050 void get_energy(ergo_real & E, ergo_real & E_nuclear);
00051
00052 protected:
00053
00054 SCF_general(const Molecule& molecule_,
00055 const Molecule& extraCharges_,
00056 const BasisInfoStruct & basisInfo_,
00057 const BasisInfoStruct & basisInfoDensFit_,
00058 const IntegralInfo & integralInfo_,
00059 const char* guessDmatFileName_,
00060 const JK::Params& J_K_params_,
00061 const Dft::GridParams& gridParams_,
00062 const SCF::Options& scfopts,
00063 const SCF::MatOptions& matOpts,
00064 ergo_real threshold_integrals_1el_input);
00065
00066
00067 virtual ~SCF_general();
00068
00069 const Molecule& molecule;
00070 const Molecule& extraCharges;
00071 const BasisInfoStruct & basisInfo;
00072 const BasisInfoStruct & basisInfoDensFit;
00073 const IntegralInfo& integralInfo;
00074 const char* guessDmatFileName;
00075 const JK::Params& J_K_params;
00076 const Dft::GridParams& gridParams;
00077 const SCF::Options& scfopts;
00078 const SCF::MatOptions& matOpts;
00079 ergo_real threshold_integrals_1el;
00080 DensfitData* densfit_data;
00081
00082
00083
00084 JK::ExchWeights CAM_params;
00085
00086
00087 ergo_real nuclearEnergy;
00088
00089 ergo_real energy_2el;
00090 ergo_real energy;
00091
00092 ergo_real errorMeasure;
00093
00094 ergo_real curr_subspace_diff;
00095
00096 symmMatrix S_symm;
00097 triangMatrix invCholFactor;
00098 ergo_real invCholFactor_euclnorm;
00099 symmMatrix H_core_Matrix;
00100
00101 DIISManager* DIIS;
00102
00103 int noOfElectrons;
00104
00105 SCF_statistics* curr_cycle_stats;
00106
00107 ergo_real GetEuclideanNormOfMatrix(const symmMatrix & A);
00108
00109 virtual void initialize_matrices() = 0;
00110 virtual void check_params() = 0;
00111 virtual void get_starting_guess_density() = 0;
00112 virtual void initialize_homo_lumo_limits() = 0;
00113 virtual void write_matrices_to_file() = 0;
00114 virtual void get_2e_part_and_energy() = 0;
00115 virtual void output_sparsity_S_F_D(SCF_statistics & stats) = 0;
00116 virtual void calculate_energy() = 0;
00117 virtual void get_FDSminusSDF() = 0;
00118 virtual void get_error_measure() = 0;
00119 virtual void add_to_DIIS_list() = 0;
00120 virtual void update_best_fock_so_far() = 0;
00121 virtual void combine_old_fock_matrices(ergo_real stepLength) = 0;
00122 virtual void use_diis_to_get_new_fock_matrix() = 0;
00123 virtual void clear_diis_list() = 0;
00124 virtual void clear_error_matrices() = 0;
00125 virtual void save_current_fock_as_fprev() = 0;
00126 virtual void get_new_density_matrix() = 0;
00127 virtual void write_density_to_file() = 0;
00128 virtual void save_final_potential() = 0;
00129 virtual void add_random_disturbance_to_starting_guess() = 0;
00130 virtual void output_density_images() = 0;
00131 virtual void output_csr_matrices_for_gao() = 0;
00132 virtual void do_electron_dynamics() = 0;
00133 virtual void write_diag_dens_to_file() = 0;
00134 virtual void report_final_results() = 0;
00135 virtual void save_density_as_prevdens() = 0;
00136 virtual void update_subspace_diff() = 0;
00137 virtual void disturb_fock_matrix(ergo_real subspaceError) = 0;
00138 virtual void disturb_dens_matrix(ergo_real subspaceError) = 0;
00139 virtual void do_spin_flip(int atomCount) = 0;
00140 virtual void disturb_dens_matrix_exact(ergo_real subspaceError) = 0;
00141 virtual void save_full_matrices_for_matlab() = 0;
00142 virtual void report_density_difference() = 0;
00143 virtual void create_mtx_files_F(int const scfIter) = 0;
00144 virtual void create_mtx_files_D(int const scfIter) = 0;
00145 virtual void create_homo_eigvec_file() const = 0;
00146 virtual void create_lumo_eigvec_file() const = 0;
00147 virtual void create_gabedit_file() const = 0;
00148 virtual void compute_dipole_moment() = 0;
00149 virtual void do_mulliken_pop_stuff() = 0;
00150 };
00151
00152
00153
00154
00155
00156 #endif