source: ThirdParty/mpqc_open/src/lib/chemistry/qc/mbptr12/print_scmat_norms.h

Candidate_v1.6.1
Last change on this file was 860145, checked in by Frederik Heber <heber@…>, 8 years ago

Merge commit '0b990dfaa8c6007a996d030163a25f7f5fc8a7e7' as 'ThirdParty/mpqc_open'

  • Property mode set to 100644
File size: 2.2 KB
Line 
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
40namespace sc {
41
42 /// Compute and print out neatly various matrix norms of A
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
Note: See TracBrowser for help on using the repository browser.