MOOCHO (Single Doxygen Collection) Version of the Day
AbstractLinAlgPack_MatrixSymDiagStd.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 // 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 MATRIX_SYM_DIAGONAL_STD_H
00043 #define MATRIX_SYM_DIAGONAL_STD_H
00044 
00045 #include "AbstractLinAlgPack_MatrixSymInitDiag.hpp"
00046 #include "AbstractLinAlgPack_MatrixSymDiag.hpp"
00047 #include "AbstractLinAlgPack_VectorSpace.hpp"
00048 
00049 namespace AbstractLinAlgPack {
00050 
00057 class MatrixSymDiagStd
00058   : public virtual MatrixSymInitDiag
00059   , public virtual MatrixSymDiag
00060 {
00061 public:
00062 
00065   class PostMod {
00066   public:
00067     PostMod(VectorSpace::space_ptr_t vectorSpace)
00068       : vectorSpace_(vectorSpace) {}
00069 
00070     void initialize(MatrixSymDiagStd* matrix) const
00071         { matrix->initialize(vectorSpace_->create_member()); }
00072          
00073   private:
00074     VectorSpace::space_ptr_t vectorSpace_;
00075 
00076   }; // end PostMod
00077 
00078 
00081 
00083   MatrixSymDiagStd(
00084     const VectorSpace::vec_mut_ptr_t& diag   = Teuchos::null
00085     ,bool                             unique = true
00086     );
00087 
00095   void initialize(
00096     const VectorSpace::vec_mut_ptr_t& diag
00097     ,bool                             unique = true
00098     );
00099 
00101 
00104 
00113   VectorMutable& diag();
00115   const VectorSpace::vec_mut_ptr_t& diag_ptr() const;
00117   bool unique() const;
00118 
00120 
00123 
00125   size_type rows() const;
00127   size_type nz() const;
00128 
00130 
00133 
00135   const VectorSpace& space_rows() const;
00137   const VectorSpace& space_cols() const;
00139   MatrixOp& operator=(const MatrixOp& mwo_rhs);
00146   bool Mp_StM(MatrixOp* g_lhs, value_type alpha, BLAS_Cpp::Transp trans_rhs) const;
00148   void Vp_StMtV(VectorMutable* v_lhs, value_type alpha, BLAS_Cpp::Transp trans_rhs1
00149     , const Vector& v_rhs2, value_type beta) const;
00151   void Vp_StMtV(VectorMutable* v_lhs, value_type alpha, BLAS_Cpp::Transp trans_rhs1
00152     , const SpVectorSlice& sv_rhs2, value_type beta) const;
00158   bool syrk(
00159     BLAS_Cpp::Transp   M_trans
00160     ,value_type        alpha
00161     ,value_type        beta
00162     ,MatrixSymOp   *sym_lhs
00163     ) const;
00164 
00166 
00169 
00171   void V_InvMtV(VectorMutable* v_lhs, BLAS_Cpp::Transp trans_rhs1
00172     , const Vector& v_rhs2) const;
00174   void V_InvMtV(VectorMutable* v_lhs, BLAS_Cpp::Transp trans_rhs1
00175     , const SpVectorSlice& sv_rhs2) const;
00176 
00178 
00181 
00183   void init_identity( const VectorSpace& space_diag, value_type alpha );
00185   void init_diagonal( const Vector& diag );
00186 
00188 
00191 
00193   const Vector& diag() const;
00194 
00196 
00197 private:
00198 
00199   VectorSpace::vec_mut_ptr_t     diag_;
00200   bool                           unique_;
00201 
00202   void copy_unique();
00203 
00204 }; // end class MatrixSymDiagStd
00205 
00206 // ////////////////////////////////////////
00207 // Inline members
00208 
00209 inline
00210 bool MatrixSymDiagStd::unique() const
00211 {
00212   return unique_;
00213 }
00214 
00215 } // end namespace AbstractLinAlgPack
00216 
00217 #endif // MATRIX_SYM_DIAGONAL_STD_H
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Defines