scf_utils.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_UTILS_HEADER
00029 #define SCF_UTILS_HEADER
00030 
00031 #include "molecule.h"
00032 #include "basisinfo.h"
00033 #include "integrals_2el.h"
00034 #include "matrix_typedefs.h"
00035 #include "densityfitting.h"
00036 #include "grid_stream.h"
00037 #include "SCF_statistics.h"
00038 
00039 
00040 void output_sparsity(int n, const normalMatrix & M, const char* matrixName);
00041 void output_sparsity_symm(int n, const symmMatrix & M, const char* matrixName);
00042 void output_sparsity_triang(int n, const triangMatrix & M, const char* matrixName);
00043 
00044 int
00045 compute_h_core_matrix_sparse(const IntegralInfo& integralInfo,
00046                              const Molecule& molecule,
00047                              const Molecule& extraCharges,
00048                              ergo_real electric_field_x,
00049                              ergo_real electric_field_y,
00050                              ergo_real electric_field_z,
00051                              const BasisInfoStruct& basisInfo,
00052                              symmMatrix & H_core_Matrix_sparse,
00053                              ergo_real threshold_integrals_1el,
00054                              int noOfThreadsForV,
00055                              mat::SizesAndBlocks const & matrix_size_block_info,
00056                              std::vector<int> const & permutationHML,
00057                              int const create_dipole_mtx = 0,
00058                              std::vector<int> const * const inversePermutationHML = 0,
00059                              std::string const * const calculation_identifier = 0,
00060                              std::string const * const method_and_basis_set = 0);
00061 
00062 int
00063 compute_h_core_matrix_simple_dense(const IntegralInfo& integralInfo,
00064                                    const Molecule& molecule,
00065                                    const BasisInfoStruct& basisInfo,
00066                                    symmMatrix & H_core_Matrix_sparse,
00067                                    ergo_real threshold_integrals_1el,
00068                                    int noOfThreadsForV,
00069                                    mat::SizesAndBlocks const & matrix_size_block_info,
00070                                    std::vector<int> const & permutationHML);
00071 
00072 int save_symmetric_matrix(symmMatrix& A, 
00073                           const BasisInfoStruct & basisInfo,
00074                           const char *name,
00075                           std::vector<int> const & inversePermutationHML);
00076 
00077 int 
00078 add_disturbance_to_matrix(int n, 
00079                           symmMatrix & A,
00080                           ergo_real disturbance,
00081                           int specificElementCount,
00082                           const int* elementIndexVector,
00083                           std::vector<int> const & permutationHML);
00084 
00085 int
00086 get_simple_starting_guess_sparse(int n, 
00087                                  int noOfElectrons, 
00088                                  symmMatrix & densityMatrix);
00089 
00090 int
00091 write_diag_elements_to_file(int n, 
00092                             const symmMatrix & M, 
00093                             const char* fileName,
00094                             std::vector<int> const & permutationHML);
00095 
00096 int
00097 get_diag_matrix_from_file(int n, 
00098                           symmMatrix & M, 
00099                           const char* fileName,
00100                           std::vector<int> const & permutationHML);
00101 
00102 int 
00103 write_full_matrix(int n, 
00104                   const symmMatrix & M, 
00105                   const char* fileName,
00106                   std::vector<int> const & inversePermutationHML);
00107 
00108 int
00109 write_basis_func_coord_file(const BasisInfoStruct & basisInfo);
00110 
00111 int
00112 get_2e_matrix_and_energy_sparse(const BasisInfoStruct & basisInfo,
00113                                 const BasisInfoStruct & basisInfoDensFit,
00114                                 const Molecule& molecule,
00115                                 const IntegralInfo& integralInfo, 
00116                                 symmMatrix & twoelMatrix_sparse, 
00117                                 symmMatrix & densityMatrix_sparse,
00118                                 const JK::Params& J_K_params,
00119                                 const JK::ExchWeights & CAM_params,
00120                                 const Dft::GridParams& gridParams,
00121                                 int do_xc,
00122                                 ergo_real* energy_2el,
00123                                 int noOfElectrons,
00124                                 DensfitData* df_data,
00125                                 mat::SizesAndBlocks const & matrix_size_block_info,
00126 
00127                                 std::vector<int> const & permutationHML,
00128                                 std::vector<int> const & inversePermutationHML,
00129                                 int get_J_K_Fxc_matrices,
00130                                 symmMatrix & J_matrix,
00131                                 symmMatrix & K_matrix,
00132                                 symmMatrix & Fxc_matrix,
00133                                 SCF_statistics & stats);
00134 
00135 int
00136 get_2e_matrices_and_energy_sparse_unrestricted(const BasisInfoStruct & basisInfo, 
00137                                                const BasisInfoStruct & basisInfoDensFit,
00138                                                const Molecule& molecule,
00139                                                const IntegralInfo& integralInfo, 
00140                                                const JK::ExchWeights & CAM_params,
00141                                                symmMatrix & twoelMatrix_sparse_alpha, 
00142                                                symmMatrix & twoelMatrix_sparse_beta, 
00143                                                symmMatrix & densityMatrix_sparse_alpha,
00144                                                symmMatrix & densityMatrix_sparse_beta,
00145                                                const JK::Params& J_K_params,
00146                                                const Dft::GridParams& gridParams,
00147                                                int do_xc,
00148                                                ergo_real* energy_2el,
00149                                                int noOfElectrons,
00150                                                DensfitData* df_data,
00151                                                mat::SizesAndBlocks const & matrix_size_block_info,
00152                                                std::vector<int> const & permutationHML,
00153                                                std::vector<int> const & inversePermutationHML);
00154 
00155 int
00156 get_2e_matrices_and_energy_restricted_open(const BasisInfoStruct & basisInfo, 
00157                                            const BasisInfoStruct & basisInfoDensFit,
00158                                            const Molecule& molecule,
00159                                            const IntegralInfo& integralInfo, 
00160                                            const JK::ExchWeights & CAM_params,
00161                                            symmMatrix & twoelMatrix_Fc, 
00162                                            symmMatrix & twoelMatrix_Fo, 
00163                                            symmMatrix & densityMatrix_sparse_alpha,
00164                                            symmMatrix & densityMatrix_sparse_beta,
00165                                            const JK::Params& J_K_params,
00166                                            const Dft::GridParams& gridParams,
00167                                            int do_xc,
00168                                            ergo_real* energy_2el,
00169                                            int noOfElectrons,
00170                                            DensfitData* df_data,
00171                                            mat::SizesAndBlocks const & matrix_size_block_info,
00172                                            std::vector<int> const & permutationHML,
00173                                            std::vector<int> const & inversePermutationHML);
00174 
00175 int
00176 compute_FDSminusSDF_sparse(int n, 
00177                            symmMatrix & F_symm, 
00178                            symmMatrix & D_symm, 
00179                            symmMatrix & S_symm, 
00180                            normalMatrix & result, 
00181                            ergo_real sparse_threshold);
00182 
00183 int 
00184 determine_number_of_electrons_unrestricted(int noOfElectrons, 
00185                                            int alpha_beta_diff, 
00186                                            int* noOfElectrons_alpha, 
00187                                            int* noOfElectrons_beta);
00188 
00189 void 
00190 get_hf_weight_and_cam_params(int use_dft, 
00191                              ergo_real* exch_param_alpha, 
00192                              ergo_real* exch_param_beta, 
00193                              ergo_real* exch_param_mu);
00194 
00195 int 
00196 determine_number_of_electrons_unrestricted(int noOfElectrons, 
00197                                            int alpha_beta_diff, 
00198                                            int* noOfElectrons_alpha, 
00199                                            int* noOfElectrons_beta);
00200 
00201 void
00202 get_dipole_moment(const symmMatrix & densityMatrix,
00203                   const BasisInfoStruct & basisInfo,
00204                   mat::SizesAndBlocks const & matrix_size_block_info,
00205                   std::vector<int> const & permutationHML,
00206                   const Molecule& molecule);
00207 
00208 void
00209 do_mulliken_atomic_charges(const symmMatrix & densityMatrix,
00210                            const symmMatrix & S_symm,
00211                            const BasisInfoStruct & basisInfo,
00212                            mat::SizesAndBlocks const & matrix_size_block_info,
00213                            std::vector<int> const & permutationHML,
00214                            std::vector<int> const & inversePermutationHML,
00215                            const Molecule& molecule);
00216 
00217 void
00218 do_mulliken_spin_densities(const symmMatrix & spinDensityMatrix,
00219                            const symmMatrix & S_symm,
00220                            const BasisInfoStruct & basisInfo,
00221                            mat::SizesAndBlocks const & matrix_size_block_info,
00222                            std::vector<int> const & permutationHML,
00223                            std::vector<int> const & inversePermutationHML,
00224                            const Molecule& molecule);
00225 
00226 void
00227 do_acc_scan_J(const symmMatrix & D,
00228               const IntegralInfo & integralInfo,
00229               const BasisInfoStruct & basisInfo,
00230               triangMatrix & invCholFactor,
00231               bool doInvCholFactorTransformation,
00232               const JK::Params & J_K_params,
00233               mat::SizesAndBlocks const & matrix_size_block_info,
00234               std::vector<int> const & permutationHML,
00235               int nSteps,
00236               ergo_real startThresh,
00237               ergo_real stepFactor);
00238 
00239 void
00240 do_acc_scan_K(symmMatrix & D,
00241               const IntegralInfo & integralInfo,
00242               const BasisInfoStruct & basisInfo,
00243               triangMatrix & invCholFactor,
00244               bool doInvCholFactorTransformation,
00245               const JK::ExchWeights & CAM_params,
00246               const JK::Params & J_K_params,
00247               mat::SizesAndBlocks const & matrix_size_block_info,
00248               std::vector<int> const & permutationHML,
00249               std::vector<int> const & inversePermutationHML,
00250               int nSteps,
00251               ergo_real startThresh,
00252               ergo_real stepFactor);
00253 
00254 void
00255 do_acc_scan_Vxc(symmMatrix & D,
00256                 const IntegralInfo & integralInfo,
00257                 const BasisInfoStruct & basisInfo,
00258                 const Molecule & molecule,
00259                 const Dft::GridParams & gridParams,
00260                 int noOfElectrons,
00261                 triangMatrix & invCholFactor,
00262                 bool doInvCholFactorTransformation,
00263                 mat::SizesAndBlocks const & matrix_size_block_info,
00264                 std::vector<int> const & permutationHML,
00265                 std::vector<int> const & inversePermutationHML,
00266                 int nSteps,
00267                 ergo_real startThresh,
00268                 ergo_real stepFactor);
00269 
00270 
00271 #endif

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