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
00029
00038 #ifndef SCF_GENERAL_HEADER
00039 #define SCF_GENERAL_HEADER
00040
00041 #include "molecule.h"
00042 #include "basisinfo.h"
00043 #include "integrals_2el.h"
00044 #include "grid_stream.h"
00045 #include "scf.h"
00046 #include "diis_general.h"
00047 #include "SCF_statistics.h"
00048 #include "GetDensFromFock.h"
00049
00050
00051 class SCF_general
00052 {
00053 public:
00054
00055
00056 void do_SCF_iterations();
00057
00058 void get_overlap_matrix(symmMatrix & S);
00059 void get_invCholFactor_matrix(triangMatrix & invCholFactor_);
00060 void get_H_core_matrix(symmMatrix & H_core);
00061 void get_energy(ergo_real & E, ergo_real & E_nuclear);
00062
00063 protected:
00064
00065 SCF_general(const Molecule& molecule_,
00066 const Molecule& extraCharges_,
00067 const BasisInfoStruct & basisInfo_,
00068 const IntegralInfo & integralInfo_,
00069 const char* guessDmatFileName_,
00070 const JK::Params& J_K_params_,
00071 const Dft::GridParams& gridParams_,
00072 const SCF::Options& scfopts,
00073 const SCF::MatOptions& matOpts,
00074 ergo_real threshold_integrals_1el_input);
00075
00076
00077 virtual ~SCF_general();
00078
00079 const Molecule& molecule;
00080 const Molecule& extraCharges;
00081 const BasisInfoStruct & basisInfo;
00082 const IntegralInfo& integralInfo;
00083 const char* guessDmatFileName;
00084 const JK::Params& J_K_params;
00085 const Dft::GridParams& gridParams;
00086 const SCF::Options& scfopts;
00087 const SCF::MatOptions& matOpts;
00088 ergo_real threshold_integrals_1el;
00089
00090
00091
00092 JK::ExchWeights CAM_params;
00093
00094
00095 int SCF_step;
00096
00097
00098 ergo_real nuclearEnergy;
00099
00100 ergo_real energy_2el;
00101 ergo_real energy;
00102
00103 ergo_real energy_2el_core;
00104 ergo_real energy_2el_valence;
00105 ergo_real energy_of_valence;
00106 ergo_real energy_reference;
00107
00108 ergo_real electronicEntropyTerm;
00109
00110 ergo_real errorMeasure;
00111
00112 ergo_real curr_subspace_diff;
00113
00114 symmMatrix S_symm;
00115 triangMatrix invCholFactor;
00116 ergo_real invCholFactor_euclnorm;
00117 symmMatrix H_core_Matrix;
00118
00119 DIISManager* DIIS;
00120
00121 int noOfElectrons;
00122
00123 SCF_statistics* curr_cycle_stats;
00124
00125 GetDensFromFock DensFromFock;
00126
00127 ergo_real GetEuclideanNormOfMatrix(const symmMatrix & A);
00128
00129 virtual void initialize_matrices() = 0;
00130 virtual void check_params() = 0;
00131 virtual void get_starting_guess_density() = 0;
00132 virtual void initialize_homo_lumo_limits() = 0;
00133 virtual void write_matrices_to_file() = 0;
00134 virtual void get_2e_part_and_energy() = 0;
00135 virtual void output_sparsity_S_F_D(SCF_statistics & stats) = 0;
00136 virtual void calculate_energy() = 0;
00137 virtual void get_FDSminusSDF() = 0;
00138 virtual void get_error_measure() = 0;
00139 virtual void add_to_DIIS_list() = 0;
00140 virtual void update_best_fock_so_far() = 0;
00141 virtual void combine_old_fock_matrices(ergo_real stepLength) = 0;
00142 virtual void use_diis_to_get_new_fock_matrix() = 0;
00143 virtual void clear_diis_list() = 0;
00144 virtual void clear_error_matrices() = 0;
00145 virtual void save_current_fock_as_fprev() = 0;
00146 virtual void get_new_density_matrix() = 0;
00147 virtual void write_density_to_file() = 0;
00148 virtual void save_final_potential() = 0;
00149 virtual void add_random_disturbance_to_starting_guess() = 0;
00150 virtual void output_expected_values_pos_operator() = 0;
00151 virtual void output_density_images() = 0;
00152 virtual void write_diag_dens_to_file() = 0;
00153 virtual void report_final_results() = 0;
00154 virtual void save_density_as_prevdens() = 0;
00155 virtual void update_subspace_diff() = 0;
00156 virtual void disturb_fock_matrix(ergo_real subspaceError) = 0;
00157 virtual void disturb_dens_matrix(ergo_real subspaceError) = 0;
00158 virtual void do_spin_flip(int atomCount) = 0;
00159 virtual void disturb_dens_matrix_exact(ergo_real subspaceError) = 0;
00160 virtual void save_full_matrices_for_matlab() = 0;
00161 virtual void report_density_difference() = 0;
00162 virtual void create_mtx_files_F(int const scfIter) = 0;
00163 virtual void create_mtx_files_D(int const scfIter) = 0;
00164 virtual void create_eigenvectors_files() const = 0;
00165 virtual void create_gabedit_file() const = 0;
00166 virtual void compute_dipole_moment() = 0;
00167 virtual void do_mulliken_pop_stuff() = 0;
00168 virtual void compute_gradient_fixeddens() = 0;
00169 };
00170
00171
00172
00173
00174
00175 #endif