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_HEADER
00039 #define SCF_HEADER
00040
00041 #include <string.h>
00042
00043 #include "molecule.h"
00044 #include "basisinfo.h"
00045 #include "integrals_2el.h"
00046 #include "matrix_typedefs.h"
00047
00048
00049 namespace SCF {
00050
00051 static const int DISTURB_ELEMENT_MAX_COUNT = 60;
00052
00053 struct Options {
00054 std::string calculation_identifier;
00055 std::string method_and_basis_set;
00056 Vector3D electric_field;
00057 ergo_real electronic_temperature;
00058 ergo_real sparse_threshold_for_S;
00059 ergo_real sparse_threshold_for_Z;
00060 ergo_real convergence_threshold;
00061 ergo_real step_length_giveup;
00062 ergo_real step_length_start;
00063 ergo_real puri_eig_acc_factor_for_guess;
00064 ergo_real purification_conv_limit;
00065 int create_checkpoints;
00066 std::string checkpoint_IDstr;
00067 ergo_real purification_eigvalue_err_limit;
00068 ergo_real purification_subspace_err_limit;
00069 int purification_with_acceleration;
00070 int use_new_stopping_criterion;
00071 ergo_real gap_expected_lower_bound;
00072 mat::normType purification_truncation_norm;
00073 mat::normType purification_stop_crit_norm;
00074 int cht_leavesSizeMax;
00075 int cht_blocksize;
00076 ergo_real subspace_factor_fock;
00077 ergo_real subspace_factor_dens;
00078 int use_artificial_subspace_disturbances;
00079 int no_of_threads_for_V;
00080 ergo_real box_size_for_V_and_T;
00081 int purification_maxmul;
00082 int purification_create_m_files;
00083 int purification_ignore_failure;
00084 int purification_use_rand_perturbation_for_alleigsint;
00085 int use_dft;
00086 int use_simple_starting_guess;
00087 int use_diag_guess_from_file;
00088 int write_diag_dens_to_file;
00089 ergo_real starting_guess_disturbance;
00090 int sg_disturb_specific_elements;
00091 int disturbedElementIndexVector[DISTURB_ELEMENT_MAX_COUNT];
00092 ergo_real shift_using_prev_density_matrix;
00093 int skip_H_core;
00094 int use_simple_dense_H_core;
00095 int break_on_energy_increase;
00096 int force_restricted;
00097 int force_unrestricted;
00098 int spin_flip_atom_count;
00099 int starting_guess_spin_diff;
00100 int max_no_of_diis_matrices;
00101 int max_restart_count;
00102 int no_of_impr_req_for_diis;
00103 int use_diis_always;
00104 int do_f_thresh_verification;
00105 int output_statistics_mfiles;
00106 int no_of_careful_first_scf_steps;
00107 int do_report_density_diff;
00108 ergo_real error_maxabs_for_diis;
00109 int min_number_of_iterations;
00110 int max_number_of_iterations;
00111 int output_density_at_every_step;
00112 int output_expected_values_pos_operator;
00113 int output_density_images;
00114 int output_density_images_only;
00115 int write_guess_density_only;
00116 int compute_core_density;
00117 int no_of_core_electrons;
00118 ergo_real output_density_images_boxwidth;
00119 int image_view_axis;
00120 int save_final_potential;
00121 int use_diagonalization;
00122 int use_diag_on_error;
00123 int use_diag_on_error_guess;
00124 int store_all_eigenvalues_to_file;
00125 int try_eigv_on_next_iteration_if_fail;
00126 int puri_compute_eigv_in_each_iteration;
00127 int run_shift_and_square_method_on_F;
00128 int save_permuted_F_matrix_in_bin;
00129 int write_overlap_matrix;
00130 int save_full_matrices_for_matlab;
00131 int analyze_result_after_scf;
00132 int do_acc_scan_J;
00133 int do_acc_scan_K;
00134 int do_acc_scan_Vxc;
00135 int scan_do_invcholfactor_transf;
00136 int scan_no_of_steps;
00137 ergo_real scan_start_thresh;
00138 ergo_real scan_step_factor;
00139 int create_mtx_file_S;
00140 int create_mtx_file_H_core;
00141 int create_mtx_files_F;
00142 int create_mtx_files_D;
00143 int create_mtx_files_dipole;
00144 int create_mtx_files_S_and_quit;
00145 int create_2el_integral_m_file;
00146 int create_basis_func_coord_file;
00147 int use_prev_vector_as_initial_guess;
00148 int output_homo_and_lumo_eigenvectors;
00149 std::string eigenvectors_method;
00150 std::string eigenvectors_iterative_method;
00151 ergo_real eigensolver_accuracy;
00152 int eigensolver_maxiter;
00153 int output_mulliken_pop;
00154 int compute_gradient_fixeddens;
00155 int verify_gradient_fixeddens;
00156
00158 Options() : calculation_identifier("N/A"),
00159 method_and_basis_set("N/A"),
00160 electric_field(0,0,0),
00161 electronic_temperature(0),
00162 sparse_threshold_for_S(1e-9),
00163 sparse_threshold_for_Z(1e-8),
00164 convergence_threshold(2e-7),
00165 step_length_giveup(0.00005),
00166 step_length_start(0.4),
00167 puri_eig_acc_factor_for_guess(1e-2),
00168 purification_conv_limit(0.1),
00169 create_checkpoints(0),
00170 checkpoint_IDstr(""),
00171 purification_eigvalue_err_limit(1e-8),
00172 purification_subspace_err_limit(1e-6),
00173 purification_with_acceleration(0),
00174 use_new_stopping_criterion(1),
00175 gap_expected_lower_bound(0.05),
00176 purification_truncation_norm(mat::mixedNorm),
00177 purification_stop_crit_norm(mat::mixedNorm),
00178 cht_leavesSizeMax(1024),
00179 cht_blocksize(64),
00180 subspace_factor_fock(0.1),
00181 subspace_factor_dens(0.1),
00182 use_artificial_subspace_disturbances(0),
00183 no_of_threads_for_V(1),
00184 box_size_for_V_and_T(6.5),
00185 purification_maxmul(100),
00186 purification_create_m_files(0),
00187 purification_ignore_failure(0),
00188 purification_use_rand_perturbation_for_alleigsint(0),
00189 use_dft(0),
00190 use_simple_starting_guess(0),
00191 use_diag_guess_from_file(0),
00192 write_diag_dens_to_file(0),
00193 starting_guess_disturbance(0.0),
00194 sg_disturb_specific_elements(0),
00195 shift_using_prev_density_matrix(0.0),
00196 skip_H_core(0),
00197 use_simple_dense_H_core(0),
00198 break_on_energy_increase(0),
00199 force_restricted(0),
00200 force_unrestricted(0),
00201 spin_flip_atom_count(0),
00202 starting_guess_spin_diff(0),
00203 max_no_of_diis_matrices(10),
00204 max_restart_count(2),
00205 no_of_impr_req_for_diis(4),
00206 use_diis_always(0),
00207 do_f_thresh_verification(0),
00208 output_statistics_mfiles(0),
00209 no_of_careful_first_scf_steps(0),
00210 do_report_density_diff(1),
00211 error_maxabs_for_diis(0.5),
00212 min_number_of_iterations(),
00213 max_number_of_iterations(),
00214 output_density_at_every_step(1),
00215 output_expected_values_pos_operator(0),
00216 output_density_images(0),
00217 output_density_images_only(0),
00218 write_guess_density_only(0),
00219 compute_core_density(0),
00220 no_of_core_electrons(0),
00221 output_density_images_boxwidth(0.5),
00222 image_view_axis(),
00223 save_final_potential(0),
00224 use_diagonalization(0),
00225 use_diag_on_error(1),
00226 use_diag_on_error_guess(1),
00227 store_all_eigenvalues_to_file(0),
00228 try_eigv_on_next_iteration_if_fail(0),
00229 puri_compute_eigv_in_each_iteration(0),
00230 run_shift_and_square_method_on_F(0),
00231 save_permuted_F_matrix_in_bin(0),
00232 write_overlap_matrix(0),
00233 save_full_matrices_for_matlab(0),
00234 analyze_result_after_scf(0),
00235 do_acc_scan_J(0),
00236 do_acc_scan_K(0),
00237 do_acc_scan_Vxc(0),
00238 scan_do_invcholfactor_transf(1),
00239 scan_no_of_steps(16),
00240 scan_start_thresh(1e-9),
00241 scan_step_factor(template_blas_sqrt((ergo_real)10)),
00242 create_mtx_file_S(0),
00243 create_mtx_file_H_core(0),
00244 create_mtx_files_F(0),
00245 create_mtx_files_D(0),
00246 create_mtx_files_dipole(0),
00247 create_mtx_files_S_and_quit(0),
00248 create_2el_integral_m_file(0),
00249 create_basis_func_coord_file(0),
00250 use_prev_vector_as_initial_guess(0),
00251 output_homo_and_lumo_eigenvectors(0),
00252 eigenvectors_method("square"),
00253 eigenvectors_iterative_method("lanczos"),
00254 eigensolver_accuracy(1e-4*template_blas_sqrt(mat::getMachineEpsilon<ergo_real>())),
00255 eigensolver_maxiter(200),
00256 output_mulliken_pop(0),
00257 compute_gradient_fixeddens(0),
00258 verify_gradient_fixeddens(0)
00259 {
00260 memset(disturbedElementIndexVector, 0,
00261 sizeof(disturbedElementIndexVector));
00262 }
00263 };
00264
00268 struct MatOptions {
00269 mat::SizesAndBlocks size_block_info;
00270 std::vector<int> permutationHML;
00271 std::vector<int> inversePermutationHML;
00272 ergo_real sparse_threshold;
00274 ergo_real threshold_inch;
00275 int sparse_matrix_block_size;
00276 int sparse_matrix_block_factor_3;
00277 int sparse_matrix_block_factor_2;
00278 int sparse_matrix_block_factor_1;
00279 int threads;
00280 int parallelLevel;
00281 int no_of_buffers_per_allocator;
00282 int use_allocator_manager;
00283
00284 MatOptions() :
00285 sparse_threshold(1e-8),
00286 threshold_inch(1e-10),
00287 sparse_matrix_block_size(32),
00288 sparse_matrix_block_factor_3(8),
00289 sparse_matrix_block_factor_2(8),
00290 sparse_matrix_block_factor_1(32),
00291 threads(1),
00292 parallelLevel(1),
00293
00294
00295 no_of_buffers_per_allocator(20000),
00296 use_allocator_manager(1)
00297 {};
00298 ~MatOptions() {
00299 }
00302 void prepare(const BasisInfoStruct& basisInfo);
00303 };
00304
00305 struct OutputOptions {
00306 OutputOptions()
00307 {}
00308
00309 };
00310
00311 }
00312
00313
00314
00315 #endif