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