SCF_unrestricted.h

Go to the documentation of this file.
00001 /* Ergo, version 3.2, a program for linear scaling electronic structure
00002  * calculations.
00003  * Copyright (C) 2012 Elias Rudberg, Emanuel H. Rubensson, and Pawel Salek.
00004  * 
00005  * This program is free software: you can redistribute it and/or modify
00006  * it under the terms of the GNU General Public License as published by
00007  * the Free Software Foundation, either version 3 of the License, or
00008  * (at your option) any later version.
00009  * 
00010  * This program is distributed in the hope that it will be useful,
00011  * but WITHOUT ANY WARRANTY; without even the implied warranty of
00012  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
00013  * GNU General Public License for more details.
00014  * 
00015  * You should have received a copy of the GNU General Public License
00016  * along with this program.  If not, see <http://www.gnu.org/licenses/>.
00017  * 
00018  * Primary academic reference:
00019  * Kohn−Sham Density Functional Theory Electronic Structure Calculations 
00020  * with Linearly Scaling Computational Time and Memory Usage,
00021  * Elias Rudberg, Emanuel H. Rubensson, and Pawel Salek,
00022  * J. Chem. Theory Comput. 7, 340 (2011),
00023  * <http://dx.doi.org/10.1021/ct100611z>
00024  * 
00025  * For further information about Ergo, see <http://www.ergoscf.org>.
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   // Constructor
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   // Destructor
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; // Used by purification
00112   symmMatrix F_ort_prev_beta; // Used by purification
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   // HOMO/LUMO info
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

Generated on Mon Sep 17 14:30:41 2012 for ergo by  doxygen 1.4.7