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_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