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