|
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 // Redistribution and use in source and binary forms, with or without 00011 // modification, are permitted provided that the following conditions are 00012 // met: 00013 // 00014 // 1. Redistributions of source code must retain the above copyright 00015 // notice, this list of conditions and the following disclaimer. 00016 // 00017 // 2. Redistributions in binary form must reproduce the above copyright 00018 // notice, this list of conditions and the following disclaimer in the 00019 // documentation and/or other materials provided with the distribution. 00020 // 00021 // 3. Neither the name of the Corporation nor the names of the 00022 // contributors may be used to endorse or promote products derived from 00023 // this software without specific prior written permission. 00024 // 00025 // THIS SOFTWARE IS PROVIDED BY SANDIA CORPORATION "AS IS" AND ANY 00026 // EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 00027 // IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR 00028 // PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL SANDIA CORPORATION OR THE 00029 // CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, 00030 // EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, 00031 // PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR 00032 // PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF 00033 // LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING 00034 // NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS 00035 // SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 00036 // 00037 // Questions? Contact Roscoe A. Bartlett (rabartl@sandia.gov) 00038 // 00039 // *********************************************************************** 00040 // @HEADER 00041 00042 #ifndef ALAP_MATRIX_ZERO_H 00043 #define ALAP_MATRIX_ZERO_H 00044 00045 #include "AbstractLinAlgPack_MatrixOp.hpp" 00046 #include "AbstractLinAlgPack_VectorSpace.hpp" 00047 00048 namespace AbstractLinAlgPack { 00049 00056 class MatrixZero : public MatrixOp { 00057 public: 00058 00061 00063 MatrixZero( 00064 const VectorSpace::space_ptr_t& space_cols = Teuchos::null 00065 ,const VectorSpace::space_ptr_t& space_rows = Teuchos::null 00066 ); 00067 00082 void initialize( 00083 const VectorSpace::space_ptr_t& space_cols 00084 ,const VectorSpace::space_ptr_t& space_rows 00085 ); 00086 00088 00092 size_type rows() const; 00094 size_type cols() const; 00096 size_type nz() const; 00098 00101 00103 const VectorSpace& space_cols() const; 00105 const VectorSpace& space_rows() const; 00107 void zero_out(); 00109 void Mt_S(value_type alpha); 00111 MatrixOp& operator=(const MatrixOp& M); 00113 std::ostream& output(std::ostream& out) const; 00115 bool Mp_StM( 00116 MatrixOp* mwo_lhs, value_type alpha 00117 ,BLAS_Cpp::Transp trans_rhs 00118 ) const; 00120 bool Mp_StMtP( 00121 MatrixOp* mwo_lhs, value_type alpha 00122 ,BLAS_Cpp::Transp M_trans 00123 ,const GenPermMatrixSlice& P_rhs, BLAS_Cpp::Transp P_rhs_trans 00124 ) const; 00126 bool Mp_StPtM( 00127 MatrixOp* mwo_lhs, value_type alpha 00128 ,const GenPermMatrixSlice& P_rhs, BLAS_Cpp::Transp P_rhs_trans 00129 ,BLAS_Cpp::Transp M_trans 00130 ) const; 00132 bool Mp_StPtMtP( 00133 MatrixOp* mwo_lhs, value_type alpha 00134 ,const GenPermMatrixSlice& P_rhs1, BLAS_Cpp::Transp P_rhs1_trans 00135 ,BLAS_Cpp::Transp M_trans 00136 ,const GenPermMatrixSlice& P_rhs2, BLAS_Cpp::Transp P_rhs2_trans 00137 ) const; 00139 void Vp_StMtV( 00140 VectorMutable* vs_lhs, value_type alpha, BLAS_Cpp::Transp trans_rhs1 00141 ,const Vector& v_rhs2, value_type beta) const; 00143 void Vp_StMtV( 00144 VectorMutable* vs_lhs, value_type alpha, BLAS_Cpp::Transp trans_rhs1 00145 ,const SpVectorSlice& sv_rhs2, value_type beta) const; 00147 void Vp_StPtMtV( 00148 VectorMutable* vs_lhs, value_type alpha 00149 ,const GenPermMatrixSlice& P_rhs1, BLAS_Cpp::Transp P_rhs1_trans 00150 ,BLAS_Cpp::Transp M_rhs2_trans 00151 ,const Vector& v_rhs3, value_type beta) const; 00153 void Vp_StPtMtV( 00154 VectorMutable* vs_lhs, value_type alpha 00155 ,const GenPermMatrixSlice& P_rhs1, BLAS_Cpp::Transp P_rhs1_trans 00156 ,BLAS_Cpp::Transp M_rhs2_trans 00157 ,const SpVectorSlice& sv_rhs3, value_type beta) const; 00159 value_type transVtMtV( 00160 const Vector& v_rhs1, BLAS_Cpp::Transp trans_rhs2 00161 ,const Vector& v_rhs3) const; 00163 value_type transVtMtV( 00164 const SpVectorSlice& sv_rhs1, BLAS_Cpp::Transp trans_rhs2 00165 , const SpVectorSlice& sv_rhs3) const; 00167 void syr2k( 00168 BLAS_Cpp::Transp M_trans, value_type alpha 00169 ,const GenPermMatrixSlice& P1, BLAS_Cpp::Transp P1_trans 00170 ,const GenPermMatrixSlice& P2, BLAS_Cpp::Transp P2_trans 00171 ,value_type beta, MatrixSymOp* symwo_lhs ) const; 00173 bool Mp_StMtM( 00174 MatrixOp* mwo_lhs, value_type alpha 00175 ,BLAS_Cpp::Transp trans_rhs1 00176 ,const MatrixOp& mwo_rhs2, BLAS_Cpp::Transp trans_rhs2 00177 ,value_type beta ) const; 00179 bool Mp_StMtM( 00180 MatrixOp* mwo_lhs, value_type alpha 00181 ,const MatrixOp& mwo_rhs1, BLAS_Cpp::Transp trans_rhs1 00182 ,BLAS_Cpp::Transp trans_rhs2 00183 ,value_type beta ) const; 00185 bool syrk( 00186 BLAS_Cpp::Transp M_trans, value_type alpha 00187 ,value_type beta, MatrixSymOp* sym_lhs ) const; 00188 00190 00191 private: 00192 00193 VectorSpace::space_ptr_t space_cols_; 00194 VectorSpace::space_ptr_t space_rows_; 00195 00196 // 00197 void assert_initialized() const; 00198 00199 }; // end class MatrixZero 00200 00201 } // end namespace AbstractLinAlgPack 00202 00203 #endif // ALAP_MATRIX_ZERO_H
1.7.6.1