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 #ifdef __GNUG__
00029 #pragma interface
00030 #endif
00031
00032 #include <string>
00033 #include <util/misc/formio.h>
00034 #include <util/ref/ref.h>
00035 #include <math/scmat/matrix.h>
00036
00037 #ifndef _chemistry_qc_mbptr12_printscmatnorms_h
00038 #define _chemistry_qc_mbptr12_printscmatnorms_h
00039
00040 namespace sc {
00041
00043 template <class RefSCMat>
00044 void print_scmat_norms(const RefSCMat& A, const std::string& label, std::ostream& os = ExEnv::out0())
00045 {
00046 Ref<SCElementMaxAbs> maxabs_op(new SCElementMaxAbs);
00047 A.element_op(maxabs_op);
00048 const double maxabs = maxabs_op->result();
00049
00050 Ref<SCElementKNorm> onenorm_op(new SCElementKNorm(1.0));
00051 A.element_op(onenorm_op);
00052 const double onenorm = onenorm_op->result();
00053
00054 Ref<SCElementKNorm> twonorm_op(new SCElementKNorm(2.0));
00055 A.element_op(twonorm_op);
00056 const double twonorm = twonorm_op->result();
00057
00058 os << indent << "Norms of " << label << endl;
00059 os << indent << "------------------------" << endl;
00060 os << indent << "||A||_{\\infty} = " << scprintf("%10.5lf",maxabs) << endl;
00061 os << indent << "||A||_1 = " << scprintf("%10.5lf",onenorm) << endl;
00062 os << indent << "||A||_2 = " << scprintf("%10.5lf",twonorm) << endl << endl;
00063 }
00064
00065
00066 };
00067
00068 #endif
00069