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_RESTRICTED_HEADER
00029 #define SCF_RESTRICTED_HEADER
00030
00031 #include "SCF_general.h"
00032
00033
00034 class SCF_restricted : public SCF_general
00035 {
00036 public:
00037
00038
00039 SCF_restricted(const Molecule& molecule_,
00040 const Molecule& extraCharges_,
00041 const BasisInfoStruct & basisInfo_,
00042 const BasisInfoStruct & basisInfoDensFit_,
00043 const IntegralInfo& integralInfo_,
00044 const char* guessDmatFileNamePtr,
00045 const JK::Params& J_K_paramsPtr,
00046 const Dft::GridParams& gridParams_,
00047 const SCF::Options& scfopts,
00048 const SCF::MatOptions& matOpts,
00049 ergo_real threshold_integrals_1el_input);
00050
00051
00052 ~SCF_restricted();
00053
00054 private:
00055 void initialize_matrices();
00056 void check_params();
00057 void get_starting_guess_density();
00058 void initialize_homo_lumo_limits();
00059 void write_matrices_to_file();
00060 void get_2e_part_and_energy();
00061 void output_sparsity_S_F_D(SCF_statistics & stats);
00062 void calculate_energy();
00063 void get_FDSminusSDF();
00064 void get_error_measure();
00065 void add_to_DIIS_list();
00066 void update_best_fock_so_far();
00067 void combine_old_fock_matrices(ergo_real stepLength);
00068 void use_diis_to_get_new_fock_matrix();
00069 void clear_diis_list();
00070 void clear_error_matrices();
00071 void save_current_fock_as_fprev();
00072 void get_new_density_matrix();
00073 void write_density_to_file();
00074 void save_final_potential();
00075 void add_random_disturbance_to_starting_guess();
00076 void output_density_images();
00077 void output_csr_matrices_for_gao();
00078 void do_electron_dynamics();
00079 void write_diag_dens_to_file();
00080 void report_final_results();
00081 void save_density_as_prevdens();
00082 void update_subspace_diff();
00083 void disturb_fock_matrix(ergo_real subspaceError);
00084 void disturb_dens_matrix(ergo_real subspaceError);
00085 void do_spin_flip(int atomCount);
00086 void disturb_dens_matrix_exact(ergo_real subspaceError);
00087 void save_full_matrices_for_matlab();
00088 void report_density_difference();
00089 void create_mtx_files_F(int const scfIter);
00090 void create_mtx_files_D(int const scfIter);
00091 void create_homo_eigvec_file() const;
00092 void create_lumo_eigvec_file() const;
00093 void create_gabedit_file() const;
00094 void compute_dipole_moment();
00095 void do_mulliken_pop_stuff();
00096
00097 void get_non_ort_err_mat_normalized_in_ort_basis(symmMatrix & randomMatrix, int transform_with_S_also);
00098 void transform_with_S(symmMatrix & A);
00099 void transform_with_invChol(symmMatrix & A);
00100
00101 void disturb_dens_matrix_exact_try(const symmMatrix & randomMatrix,
00102 const symmMatrix & orgDensMatrix,
00103 ergo_real disturbanceFactor,
00104 ergo_real & resultSinTheta,
00105 symmMatrix & resultDensMatrix);
00106
00107 symmMatrix densityMatrix;
00108 symmMatrix FockMatrix;
00109 symmMatrix Fprev;
00110 symmMatrix Dprev;
00111 symmMatrix F_ort_prev;
00112 symmMatrix bestFockMatrixSoFar;
00113 symmMatrix bestFockMatrixSoFar2;
00114 normalMatrix ErrorMatrix;
00115
00116 symmMatrix J_matrix;
00117 symmMatrix K_matrix;
00118 symmMatrix Fxc_matrix;
00119
00120 generalVector eigVecLUMO;
00121 generalVector eigVecHOMO;
00122
00123
00124 intervalType homoInterval_F_ort_prev;
00125 intervalType lumoInterval_F_ort_prev;
00126 intervalType homoInterval_Fprev;
00127 intervalType lumoInterval_Fprev;
00128
00129 };
00130
00131
00132
00133
00134
00135 #endif