MPQC  2.3.1
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 
sc::ExEnv::out0
static std::ostream & out0()
Return an ostream that writes from node 0.

Generated at Sun Jan 26 2020 23:33:04 for MPQC 2.3.1 using the documentation package Doxygen 1.8.16.