orthog.h

00001 
00002 //
00003 // orthog.h -- orthogonalize the basis set
00004 //
00005 // Copyright (C) 1996 Limit Point Systems, Inc.
00006 //
00007 // Author: Curtis Janssen <cljanss@ca.sandia.gov>
00008 // Maintainer: LPS
00009 //
00010 // This file is part of the SC Toolkit.
00011 //
00012 // The SC Toolkit is free software; you can redistribute it and/or modify
00013 // it under the terms of the GNU Library General Public License as published by
00014 // the Free Software Foundation; either version 2, or (at your option)
00015 // any later version.
00016 //
00017 // The SC Toolkit is distributed in the hope that it will be useful,
00018 // but WITHOUT ANY WARRANTY; without even the implied warranty of
00019 // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
00020 // GNU Library General Public License for more details.
00021 //
00022 // You should have received a copy of the GNU Library General Public License
00023 // along with the SC Toolkit; see the file COPYING.LIB.  If not, write to
00024 // the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA.
00025 //
00026 // The U.S. Government is granted a limited license as per AL 91-7.
00027 //
00028 
00029 #ifndef _chemistry_qc_basis_orthog_h
00030 #define _chemistry_qc_basis_orthog_h
00031 
00032 #include <util/state/state.h>
00033 #include <math/scmat/matrix.h>
00034 
00035 namespace sc {
00036 
00038 class OverlapOrthog: virtual public SavableState {
00039   public:
00040     
00042     enum OrthogMethod { Symmetric=1, Canonical=2, GramSchmidt=3 };
00043 
00044   private:
00045     int debug_;
00046 
00047     RefSCDimension dim_;
00048     RefSCDimension orthog_dim_;
00049 
00050     // The tolerance for linearly independent basis functions.
00051     // The intepretation depends on the orthogonalization method.
00052     double lindep_tol_;
00053     // The number of linearly dependent functions
00054     int nlindep_;
00055     // The orthogonalization method
00056     OrthogMethod orthog_method_;
00057     // The orthogonalization matrices
00058     RefSCMatrix orthog_trans_;
00059     RefSCMatrix orthog_trans_inverse_;
00060     // The maximum and minimum residuals from the orthogonalization
00061     // procedure.  The interpretation depends on the method used.
00062     // For symmetry and canonical, these are the min and max overlap
00063     // eigenvalues.  These are the residuals for the basis functions
00064     // that actually end up being used.
00065     double min_orthog_res_;
00066     double max_orthog_res_;
00067 
00068     void compute_overlap_eig(RefSCMatrix& overlap_eigvec,
00069                              RefDiagSCMatrix& overlap_isqrt_eigval,
00070                              RefDiagSCMatrix& overlap_sqrt_eigval);
00071     void compute_symmetric_orthog();
00072     void compute_canonical_orthog();
00073     void compute_gs_orthog();
00074     void compute_orthog_trans();
00075 
00076     // WARNING: after a SavableState save/restore, these two members will
00077     // be null.  There is really no need to store these anyway--should be
00078     // removed.
00079     RefSymmSCMatrix overlap_;
00080     Ref<SCMatrixKit> result_kit_; // this kit is used for the result matrices
00081 
00082   public:
00083     OverlapOrthog(OrthogMethod method,
00084                   const RefSymmSCMatrix &overlap,
00085                   const Ref<SCMatrixKit> &result_kit,
00086                   double lindep_tolerance,
00087                   int debug = 0);
00088 
00089     OverlapOrthog(StateIn&);
00090 
00091     virtual ~OverlapOrthog();
00092 
00093     void save_data_state(StateOut&);
00094 
00095     void reinit(OrthogMethod method,
00096                 const RefSymmSCMatrix &overlap,
00097                 const Ref<SCMatrixKit> &result_kit,
00098                 double lindep_tolerance,
00099                 int debug = 0);
00100 
00101     double min_orthog_res() const { return min_orthog_res_; }
00102     double max_orthog_res() const { return max_orthog_res_; }
00103 
00104     Ref<OverlapOrthog> copy() const;
00105 
00107     OrthogMethod orthog_method() const { return orthog_method_; }
00108 
00110     double lindep_tol() const { return lindep_tol_; }
00111 
00118     RefSCMatrix basis_to_orthog_basis();
00119 
00123     RefSCMatrix basis_to_orthog_basis_inverse();
00124 
00125     RefSCDimension dim();
00126     RefSCDimension orthog_dim();
00127 
00131     int nlindep();
00132 };
00133 
00134 }
00135 
00136 #endif

Generated at Mon Dec 3 23:23:40 2007 for MPQC 2.3.1 using the documentation package Doxygen 1.5.2.