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_UNRESTRICTED_HEADER
00029 #define SCF_UNRESTRICTED_HEADER
00030
00031 #include "SCF_general.h"
00032
00033
00034 class SCF_unrestricted : public SCF_general
00035 {
00036 public:
00037
00038
00039 SCF_unrestricted(const Molecule& molecule_,
00040 const Molecule& extraCharges_,
00041 const BasisInfoStruct & basisInfo_,
00042 const BasisInfoStruct & basisInfoDensFit_,
00043 const IntegralInfo & integralInfo_,
00044 const char* guessDmatFileName_,
00045 const JK::Params& J_K_params_,
00046 const Dft::GridParams& gridParams_,
00047 const SCF::Options& scfopts,
00048 const SCF::MatOptions& matOpts,
00049 ergo_real threshold_integrals_1el_input,
00050 int alpha_beta_diff_input);
00051
00052
00053 ~SCF_unrestricted();
00054
00055 void get_Fock_matrices(symmMatrix & FockMatrix_a, symmMatrix & FockMatrix_b);
00056 void get_no_of_electrons(int & noOfElectrons_a, int & noOfElectrons_b);
00057
00058 private:
00059 void initialize_matrices();
00060 void check_params();
00061 void get_starting_guess_density();
00062 void initialize_homo_lumo_limits();
00063 void write_matrices_to_file();
00064 void get_2e_part_and_energy();
00065 void output_sparsity_S_F_D(SCF_statistics & stats);
00066 void calculate_energy();
00067 void get_FDSminusSDF();
00068 void get_error_measure();
00069 void add_to_DIIS_list();
00070 void update_best_fock_so_far();
00071 void combine_old_fock_matrices(ergo_real stepLength);
00072 void use_diis_to_get_new_fock_matrix();
00073 void clear_diis_list();
00074 void clear_error_matrices();
00075 void save_current_fock_as_fprev();
00076 void get_new_density_matrix();
00077 void write_density_to_file();
00078 void save_final_potential();
00079 void add_random_disturbance_to_starting_guess();
00080 void output_density_images();
00081 void output_csr_matrices_for_gao();
00082 void do_electron_dynamics();
00083 void write_diag_dens_to_file();
00084 void report_final_results();
00085 void save_density_as_prevdens();
00086 void update_subspace_diff();
00087 void disturb_fock_matrix(ergo_real subspaceError);
00088 void disturb_dens_matrix(ergo_real subspaceError);
00089 void do_spin_flip(int atomCount);
00090 void disturb_dens_matrix_exact(ergo_real subspaceError);
00091 void save_full_matrices_for_matlab();
00092 void report_density_difference();
00093 void create_mtx_files_F(int const scfIter);
00094 void create_mtx_files_D(int const scfIter);
00095 void create_homo_eigvec_file() const;
00096 void create_lumo_eigvec_file() const;
00097 void create_gabedit_file() const;
00098 void compute_dipole_moment();
00099 void do_mulliken_pop_stuff();
00100
00101 void get_S2(ergo_real & S2_exact, ergo_real & S2);
00102
00103 symmMatrix densityMatrix_alpha;
00104 symmMatrix densityMatrix_beta;
00105 symmMatrix FockMatrix_alpha;
00106 symmMatrix FockMatrix_beta;
00107 symmMatrix Fprev_alpha;
00108 symmMatrix Fprev_beta;
00109 symmMatrix Dprev_alpha;
00110 symmMatrix Dprev_beta;
00111 symmMatrix F_ort_prev_alpha;
00112 symmMatrix F_ort_prev_beta;
00113 symmMatrix bestFockMatrixSoFar_alpha;
00114 symmMatrix bestFockMatrixSoFar_beta;
00115 symmMatrix bestFockMatrixSoFar2_alpha;
00116 symmMatrix bestFockMatrixSoFar2_beta;
00117 normalMatrix ErrorMatrix_alpha;
00118 normalMatrix ErrorMatrix_beta;
00119 symmMatrix G_alpha;
00120 symmMatrix G_beta;
00121
00122
00123 intervalType homoInterval_F_ort_prev_alpha;
00124 intervalType lumoInterval_F_ort_prev_alpha;
00125 intervalType homoInterval_F_ort_prev_beta;
00126 intervalType lumoInterval_F_ort_prev_beta;
00127 intervalType homoInterval_Fprev_alpha;
00128 intervalType lumoInterval_Fprev_alpha;
00129 intervalType homoInterval_Fprev_beta;
00130 intervalType lumoInterval_Fprev_beta;
00131
00132 int alpha_beta_diff;
00133 int noOfElectrons_alpha;
00134 int noOfElectrons_beta;
00135 };
00136
00137
00138
00139
00140
00141 #endif