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
00042 #ifndef PURI_INFO_HEADER
00043 #define PURI_INFO_HEADER
00044
00045 #include "output.h"
00046 #include "matrix_typedefs.h"
00047 #include "realtype.h"
00048
00049
00050
00051
00052 class IterationInfo{
00053 public:
00054 typedef ergo_real real;
00055
00056 int it;
00057 real threshold_X;
00058 real Xsquare_time;
00059 real trunc_time;
00060 real purify_time;
00061 real total_time;
00062 real stopping_criterion_time;
00063 real eucl_diff_time;
00064 real trace_diff_time ;
00065 real mixed_diff_time;
00066 real frob_diff_time;
00067 real orbital_homo_time;
00068 real orbital_lumo_time;
00069 real DX_mult_homo_time;
00070 real DX_mult_lumo_time;
00071 real homo_eig_solver_time;
00072 real lumo_eig_solver_time;
00073 real XmX2_trace;
00074 real XmX2_fro_norm;
00075 real XmX2_mixed_norm;
00076 real XmX2_eucl;
00077 real order;
00078 int poly;
00079 real gap;
00080 real NNZ_X;
00081 real NNZ_X2;
00082
00083
00084 real homo_bound_low;
00085 real homo_bound_upp;
00086 real lumo_bound_low;
00087 real lumo_bound_upp;
00088
00089 real commutation_error;
00090
00091 real alpha;
00092
00093 real constantC;
00094
00095
00096 IterationInfo():
00097 it(-1),
00098 threshold_X(0),
00099 Xsquare_time(0),
00100 trunc_time(0),
00101 purify_time(0),
00102 total_time(0),
00103 stopping_criterion_time(0),
00104 eucl_diff_time(0),
00105 trace_diff_time(0),
00106 mixed_diff_time(0),
00107 frob_diff_time(0),
00108 orbital_homo_time(0),
00109 orbital_lumo_time(0),
00110 DX_mult_homo_time(0),
00111 DX_mult_lumo_time(0),
00112 homo_eig_solver_time(0),
00113 lumo_eig_solver_time(0),
00114 XmX2_trace(-1),
00115 XmX2_fro_norm(-1),
00116 XmX2_mixed_norm(-1),
00117 XmX2_eucl(-1),
00118 order(0),
00119 poly(-1),
00120 gap(-1),
00121 NNZ_X(0),
00122 NNZ_X2(0),
00123 homo_bound_low(0),
00124 homo_bound_upp(0),
00125 lumo_bound_low(0),
00126 lumo_bound_upp(0),
00127 commutation_error(0),
00128 alpha(0),
00129 constantC(0)
00130 {};
00131
00132
00133 };
00134
00135
00136 class PuriInfo{
00137 public:
00138 typedef ergo_real real;
00139
00140 PuriInfo() :
00141 method(0),
00142 stopping_criterion(0),
00143 total_it(0),
00144 converged(0),
00145 error_subspace(0),
00146 accumulated_error_subspace(0),
00147 compute_eigenvectors_in_this_SCF_cycle(false),
00148 homo_eigenvector_is_computed(false),
00149 lumo_eigenvector_is_computed(false),
00150 homo_eigenvector_is_computed_in_iter(-1),
00151 lumo_eigenvector_is_computed_in_iter(-1),
00152 homo_eigensolver_iter(-1),
00153 lumo_eigensolver_iter(-1),
00154 homo_eigensolver_time(-1),
00155 lumo_eigensolver_time(-1),
00156 debug_output(0)
00157 {};
00158
00159
00160 void print_collected_info();
00161 void print_collected_info_printf();
00162
00163 void get_poly_seq(std::vector<int> &norms);
00164 void get_vec_frob_norms(std::vector<real> &norms);
00165 void get_vec_mixed_norms(std::vector<real> &norms);
00166 void get_vec_traces(std::vector<real> & traces);
00167
00168 void get_spectrum_bounds(real &lower_spectrum_bound_, real &upper_spectrum_bound_) const;
00169 void set_spectrum_bounds(const real lower_spectrum_bound_, const real upper_spectrum_bound_);
00170
00171 int method;
00172
00173 int stopping_criterion;
00174 real norm_F_Fprev;
00175 real total_time;
00176 int total_it;
00177 real time_spectrum_bounds;
00178 int estim_total_it;
00179 int additional_iterations;
00180
00181 int converged;
00182
00183 real error_subspace;
00184 real accumulated_error_subspace;
00185
00186 real homo_estim_upp_F;
00187 real homo_estim_low_F;
00188 real lumo_estim_upp_F;
00189 real lumo_estim_low_F;
00190
00191 bool compute_eigenvectors_in_this_SCF_cycle;
00192 bool homo_eigenvector_is_computed;
00193 bool lumo_eigenvector_is_computed;
00194 int homo_eigenvector_is_computed_in_iter;
00195 int lumo_eigenvector_is_computed_in_iter;
00196 int homo_eigensolver_iter;
00197 int lumo_eigensolver_iter;
00198 double homo_eigensolver_time;
00199 double lumo_eigensolver_time;
00200 real eigValHOMO;
00201 real eigValLUMO;
00202
00203 std::vector<IterationInfo> Iterations;
00204 int debug_output;
00205
00206 real upper_spectrum_bound;
00207 real lower_spectrum_bound;
00208
00209 };
00210
00211 #endif