|
AbstractLinAlgPack: C++ Interfaces For Vectors, Matrices And Related Linear Algebra Objects Version of the Day
|
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
1.7.4