- Main Page
- Related Pages
- Classes
- Files

- File List

# print_scmat_norms.h

    00001 //
    00002 // print_scmat_norms.h
    00003 //
    00004 // Copyright (C) 2005 Edward Valeev
    00005 //
    00006 // Author: Edward Valeev <edward.valeev@chemistry.gatech.edu>
    00007 // Maintainer: EV
    00008 //
    00009 // This file is part of the SC Toolkit.
    00010 //
    00011 // The SC Toolkit is free software; you can redistribute it and/or modify
    00012 // it under the terms of the GNU Library General Public License as published by
    00013 // the Free Software Foundation; either version 2, or (at your option)
    00014 // any later version.
    00015 //
    00016 // The SC Toolkit is distributed in the hope that it will be useful,
    00017 // but WITHOUT ANY WARRANTY; without even the implied warranty of
    00018 // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
    00019 // GNU Library General Public License for more details.
    00020 //
    00021 // You should have received a copy of the GNU Library General Public License
    00022 // along with the SC Toolkit; see the file COPYING.LIB.  If not, write to
    00023 // the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA.
    00024 //
    00025 // The U.S. Government is granted a limited license as per AL 91-7.
    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