MPQC 2.3.1

- Main Page
- Related Pages
- Classes
- Files

- File List

print_scmat_norms.h
1 //
2 // print_scmat_norms.h
3 //
4 // Copyright (C) 2005 Edward Valeev
5 //
6 // Author: Edward Valeev <edward.valeev@chemistry.gatech.edu>
7 // Maintainer: EV
8 //
9 // This file is part of the SC Toolkit.
10 //
11 // The SC Toolkit is free software; you can redistribute it and/or modify
12 // it under the terms of the GNU Library General Public License as published by
13 // the Free Software Foundation; either version 2, or (at your option)
14 // any later version.
15 //
16 // The SC Toolkit is distributed in the hope that it will be useful,
17 // but WITHOUT ANY WARRANTY; without even the implied warranty of
18 // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
19 // GNU Library General Public License for more details.
20 //
21 // You should have received a copy of the GNU Library General Public License
22 // along with the SC Toolkit; see the file COPYING.LIB. If not, write to
23 // the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA.
24 //
25 // The U.S. Government is granted a limited license as per AL 91-7.
26 //
27
28 #ifdef __GNUG__
29 #pragma interface
30 #endif
31
32 #include <string>
33 #include <util/misc/formio.h>
34 #include <util/ref/ref.h>
35 #include <math/scmat/matrix.h>
36
37 #ifndef _chemistry_qc_mbptr12_printscmatnorms_h
38 #define _chemistry_qc_mbptr12_printscmatnorms_h
39
40 namespace sc {
41
43 template <class RefSCMat>
44 void print_scmat_norms(const RefSCMat& A, const std::string& label, std::ostream& os = ExEnv::out0())
45 {
46 Ref<SCElementMaxAbs> maxabs_op(new SCElementMaxAbs);
47 A.element_op(maxabs_op);
48 const double maxabs = maxabs_op->result();
49
50 Ref<SCElementKNorm> onenorm_op(new SCElementKNorm(1.0));
51 A.element_op(onenorm_op);
52 const double onenorm = onenorm_op->result();
53
54 Ref<SCElementKNorm> twonorm_op(new SCElementKNorm(2.0));
55 A.element_op(twonorm_op);
56 const double twonorm = twonorm_op->result();
57
58 os << indent << "Norms of " << label << endl;
59 os << indent << "------------------------" << endl;
60 os << indent << "||A||_{\\infty} = " << scprintf("%10.5lf",maxabs) << endl;
61 os << indent << "||A||_1 = " << scprintf("%10.5lf",onenorm) << endl;
62 os << indent << "||A||_2 = " << scprintf("%10.5lf",twonorm) << endl << endl;
63 }
64
65
66 };
67
68 #endif
69