AbstractLinAlgPack_MatrixNonsingSerial.hpp

Go to the documentation of this file.
00001 // @HEADER
00002 // ***********************************************************************
00003 // 
00004 // Moocho: Multi-functional Object-Oriented arCHitecture for Optimization
00005 //                  Copyright (2003) Sandia Corporation
00006 // 
00007 // Under terms of Contract DE-AC04-94AL85000, there is a non-exclusive
00008 // license for use of this work by or on behalf of the U.S. Government.
00009 // 
00010 // This library is free software; you can redistribute it and/or modify
00011 // it under the terms of the GNU Lesser General Public License as
00012 // published by the Free Software Foundation; either version 2.1 of the
00013 // License, or (at your option) any later version.
00014 //  
00015 // This library is distributed in the hope that it will be useful, but
00016 // WITHOUT ANY WARRANTY; without even the implied warranty of
00017 // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
00018 // Lesser General Public License for more details.
00019 //  
00020 // You should have received a copy of the GNU Lesser General Public
00021 // License along with this library; if not, write to the Free Software
00022 // Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
00023 // USA
00024 // Questions? Contact Roscoe A. Bartlett (rabartl@sandia.gov) 
00025 // 
00026 // ***********************************************************************
00027 // @HEADER
00028 
00029 #ifndef SLAP_MATRIX_NONSINGULAR_SERIAL_H
00030 #define SLAP_MATRIX_NONSINGULAR_SERIAL_H
00031 
00032 #include "AbstractLinAlgPack_Types.hpp"
00033 #include "AbstractLinAlgPack_MatrixNonsing.hpp"
00034 
00035 namespace AbstractLinAlgPack {
00036 
00046 class MatrixNonsingSerial
00047   : virtual public AbstractLinAlgPack::MatrixNonsing // doxygen needs full name
00048 {
00049 public:
00050 
00053 
00055   virtual void V_InvMtV(
00056     DVector* v_lhs, BLAS_Cpp::Transp trans_rhs1
00057     ,const DVectorSlice& vs_rhs2) const;
00059   virtual void V_InvMtV(
00060     DVectorSlice* vs_lhs, BLAS_Cpp::Transp trans_rhs1
00061     ,const DVectorSlice& vs_rhs2) const = 0;
00063   virtual void V_InvMtV(
00064     DVector* v_lhs, BLAS_Cpp::Transp trans_rhs1
00065     ,const SpVectorSlice& sv_rhs2) const;
00067   virtual void V_InvMtV(
00068     DVectorSlice* vs_lhs, BLAS_Cpp::Transp trans_rhs1
00069     ,const SpVectorSlice& sv_rhs2) const;
00071   virtual value_type transVtInvMtV(
00072     const DVectorSlice& vs_rhs1, BLAS_Cpp::Transp trans_rhs2, const DVectorSlice& vs_rhs3) const;
00074   virtual value_type transVtInvMtV(
00075     const SpVectorSlice& sv_rhs1, BLAS_Cpp::Transp trans_rhs2, const SpVectorSlice& sv_rhs3) const;
00076 
00077   //    end Level-2 BLAS
00079 
00082 
00084   virtual void M_StInvMtM(
00085     DMatrix* gm_lhs, value_type alpha
00086     ,BLAS_Cpp::Transp trans_rhs1
00087     ,const DMatrixSlice& gms_rhs2, BLAS_Cpp::Transp trans_rhs2 ) const;
00089   virtual void M_StInvMtM(
00090     DMatrixSlice* gms_lhs, value_type alpha
00091     ,BLAS_Cpp::Transp trans_rhs1
00092     ,const DMatrixSlice& gms_rhs2, BLAS_Cpp::Transp trans_rhs2 ) const;
00094   virtual void M_StMtInvM(
00095     DMatrix* gm_lhs, value_type alpha
00096     ,const DMatrixSlice& gms_rhs1, BLAS_Cpp::Transp trans_rhs1
00097     ,BLAS_Cpp::Transp trans_rhs2 ) const;
00099   virtual void M_StMtInvM(
00100     DMatrixSlice* gms_lhs, value_type alpha
00101     ,const DMatrixSlice& gms_rhs1, BLAS_Cpp::Transp trans_rhs1
00102     ,BLAS_Cpp::Transp trans_rhs2 ) const;
00104   virtual void M_StInvMtM(
00105     DMatrix* gm_lhs, value_type alpha
00106     ,BLAS_Cpp::Transp trans_rhs1
00107     ,const MatrixOpSerial& mwo_rhs2, BLAS_Cpp::Transp trans_rhs2 ) const;
00109   virtual void M_StInvMtM(
00110     DMatrixSlice* gms_lhs, value_type alpha
00111     ,BLAS_Cpp::Transp trans_rhs1
00112     ,const MatrixOpSerial& mwo_rhs2, BLAS_Cpp::Transp trans_rhs2 ) const;
00114   virtual void M_StMtInvM(
00115     DMatrix* gm_lhs, value_type alpha
00116     ,const MatrixOpSerial& mwo_rhs1, BLAS_Cpp::Transp trans_rhs1
00117     ,BLAS_Cpp::Transp trans_rhs2 ) const;
00119   virtual void M_StMtInvM(
00120     DMatrixSlice* gms_lhs, value_type alpha
00121     ,const MatrixOpSerial& mwo_rhs1, BLAS_Cpp::Transp trans_rhs1
00122     ,BLAS_Cpp::Transp trans_rhs2 ) const;
00123 
00124   //    end Level-3 BLAS
00126 
00129 
00131   void V_InvMtV(
00132     VectorMutable* v_lhs, BLAS_Cpp::Transp trans_rhs1
00133     ,const Vector& v_rhs2) const;
00135   void V_InvMtV(
00136     VectorMutable* v_lhs, BLAS_Cpp::Transp trans_rhs1
00137     ,const SpVectorSlice& sv_rhs2) const;
00139   value_type transVtInvMtV(
00140     const Vector& v_rhs1
00141     ,BLAS_Cpp::Transp trans_rhs2
00142     ,const Vector& v_rhs3) const;
00144   void M_StInvMtM(
00145     MatrixOp* m_lhs, value_type alpha
00146     ,BLAS_Cpp::Transp trans_rhs1
00147     ,const MatrixOp& mwo_rhs2, BLAS_Cpp::Transp trans_rhs2
00148     ) const;
00150   void M_StMtInvM(
00151     MatrixOp* m_lhs, value_type alpha
00152     ,const MatrixOp& mwo_rhs1, BLAS_Cpp::Transp trans_rhs1
00153     ,BLAS_Cpp::Transp trans_rhs2
00154     ) const;
00155 
00157 
00158 };  // end class MatrixNonsingSerial
00159 
00166 
00169 
00171 inline void V_InvMtV(DVector* v_lhs, const MatrixNonsingSerial& M_rhs1
00172   , BLAS_Cpp::Transp trans_rhs1, const DVectorSlice& vs_rhs2)
00173 {
00174   M_rhs1.V_InvMtV(v_lhs,trans_rhs1,vs_rhs2);
00175 }
00176 
00178 inline void V_InvMtV(DVectorSlice* vs_lhs, const MatrixNonsingSerial& M_rhs1
00179   , BLAS_Cpp::Transp trans_rhs1, const DVectorSlice& vs_rhs2)
00180 {
00181   M_rhs1.V_InvMtV(vs_lhs,trans_rhs1,vs_rhs2);
00182 }
00183 
00185 inline void V_InvMtV(DVector* v_lhs, const MatrixNonsingSerial& M_rhs1
00186   , BLAS_Cpp::Transp trans_rhs1, const SpVectorSlice& sv_rhs2)
00187 {
00188   M_rhs1.V_InvMtV(v_lhs,trans_rhs1,sv_rhs2);
00189 }
00190 
00192 inline void V_InvMtV(DVectorSlice* vs_lhs, const MatrixNonsingSerial& M_rhs1
00193   , BLAS_Cpp::Transp trans_rhs1, const SpVectorSlice& sv_rhs2)
00194 {
00195   M_rhs1.V_InvMtV(vs_lhs,trans_rhs1,sv_rhs2);
00196 }
00197 
00199 inline value_type transVtInvMtV(const DVectorSlice& vs_rhs1, const MatrixNonsingSerial& M_rhs2
00200   , BLAS_Cpp::Transp trans_rhs2, const DVectorSlice& sv_rhs3)
00201 {
00202   return M_rhs2.transVtInvMtV(vs_rhs1,trans_rhs2,sv_rhs3);
00203 }
00204 
00206 inline value_type transVtInvMtV(const SpVectorSlice& sv_rhs1, const MatrixNonsingSerial& M_rhs2
00207   , BLAS_Cpp::Transp trans_rhs2, const SpVectorSlice& sv_rhs3)
00208 {
00209   return M_rhs2.transVtInvMtV(sv_rhs1,trans_rhs2,sv_rhs3);
00210 }
00211 
00212 //    end Level-2 BLAS
00214 
00217 
00219 inline void M_StInvMtM(
00220   DMatrix* gm_lhs, value_type alpha
00221   ,const MatrixNonsingSerial& M_rhs1,   BLAS_Cpp::Transp trans_rhs1
00222   ,const DMatrixSlice&          gms_rhs2, BLAS_Cpp::Transp trans_rhs2
00223   )
00224 {
00225   M_rhs1.M_StInvMtM(gm_lhs,alpha,trans_rhs1,gms_rhs2,trans_rhs2);
00226 }
00227 
00229 inline void M_StInvMtM(
00230   DMatrixSlice* gms_lhs, value_type alpha
00231   ,const MatrixNonsingSerial& M_rhs1,   BLAS_Cpp::Transp trans_rhs1
00232   ,const DMatrixSlice&          gms_rhs2, BLAS_Cpp::Transp trans_rhs2
00233   )
00234 {
00235   M_rhs1.M_StInvMtM(gms_lhs,alpha,trans_rhs1,gms_rhs2,trans_rhs2);
00236 }
00237 
00239 inline void M_StMtInvM(
00240   DMatrix* gm_lhs, value_type alpha
00241   ,const DMatrixSlice&          gms_rhs1, BLAS_Cpp::Transp trans_rhs1
00242   ,const MatrixNonsingSerial& M_rhs2,   BLAS_Cpp::Transp trans_rhs2
00243   )
00244 {
00245   M_rhs2.M_StMtInvM(gm_lhs,alpha,gms_rhs1,trans_rhs1,trans_rhs2);
00246 }
00247 
00249 inline void M_StMtInvM(
00250   DMatrixSlice* gms_lhs, value_type alpha
00251   ,const DMatrixSlice&          gms_rhs1, BLAS_Cpp::Transp trans_rhs1
00252   ,const MatrixNonsingSerial& M_rhs2,   BLAS_Cpp::Transp trans_rhs2
00253   )
00254 {
00255   M_rhs2.M_StMtInvM(gms_lhs,alpha,gms_rhs1,trans_rhs1,trans_rhs2);
00256 }
00257 
00259 inline void M_StInvMtM(
00260   DMatrix* gm_lhs, value_type alpha
00261   ,const MatrixNonsingSerial& M_rhs1,   BLAS_Cpp::Transp trans_rhs1
00262   ,const MatrixOpSerial&      mwo_rhs2, BLAS_Cpp::Transp trans_rhs2
00263   )
00264 {
00265   M_rhs1.M_StInvMtM(gm_lhs,alpha,trans_rhs1,mwo_rhs2,trans_rhs2);
00266 }
00267 
00269 inline void M_StInvMtM(
00270   DMatrixSlice* gms_lhs, value_type alpha
00271   ,const MatrixNonsingSerial& M_rhs1,   BLAS_Cpp::Transp trans_rhs1
00272   ,const MatrixOpSerial&      mwo_rhs2, BLAS_Cpp::Transp trans_rhs2
00273   )
00274 {
00275   M_rhs1.M_StInvMtM(gms_lhs,alpha,trans_rhs1,mwo_rhs2,trans_rhs2);
00276 }
00277 
00279 inline void M_StMtInvM(
00280   DMatrix* gm_lhs, value_type alpha
00281   ,const MatrixOpSerial&      mwo_rhs1, BLAS_Cpp::Transp trans_rhs1
00282   ,const MatrixNonsingSerial& M_rhs2,   BLAS_Cpp::Transp trans_rhs2
00283   )
00284 {
00285   M_rhs2.M_StMtInvM(gm_lhs,alpha,mwo_rhs1,trans_rhs1,trans_rhs2);
00286 }
00287 
00289 inline void M_StMtInvM(
00290   DMatrixSlice* gms_lhs, value_type alpha
00291   ,const MatrixOpSerial&      mwo_rhs1, BLAS_Cpp::Transp trans_rhs1
00292   ,const MatrixNonsingSerial& M_rhs2,   BLAS_Cpp::Transp trans_rhs2
00293   )
00294 {
00295   M_rhs2.M_StMtInvM(gms_lhs,alpha,mwo_rhs1,trans_rhs1,trans_rhs2);
00296 }
00297 
00298 //    end Level-3 BLAS
00300 
00301 //    end Inline non-member operation functions
00303 
00304 } // end namespace AbstractLinAlgPack
00305 
00306 #endif  // SLAP_MATRIX_NONSINGULAR_SERIAL_H

Generated on Tue Jul 13 09:30:49 2010 for MOOCHO (Single Doxygen Collection) by  doxygen 1.4.7