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