AbstractLinAlgPack: C++ Interfaces For Vectors, Matrices And Related Linear Algebra Objects  Version of the Day
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Groups Pages
AbstractLinAlgPack_MatrixSymIdent.cpp
1 // @HEADER
2 // ***********************************************************************
3 //
4 // Moocho: Multi-functional Object-Oriented arCHitecture for Optimization
5 // Copyright (2003) Sandia Corporation
6 //
7 // Under terms of Contract DE-AC04-94AL85000, there is a non-exclusive
8 // license for use of this work by or on behalf of the U.S. Government.
9 //
10 // Redistribution and use in source and binary forms, with or without
11 // modification, are permitted provided that the following conditions are
12 // met:
13 //
14 // 1. Redistributions of source code must retain the above copyright
15 // notice, this list of conditions and the following disclaimer.
16 //
17 // 2. Redistributions in binary form must reproduce the above copyright
18 // notice, this list of conditions and the following disclaimer in the
19 // documentation and/or other materials provided with the distribution.
20 //
21 // 3. Neither the name of the Corporation nor the names of the
22 // contributors may be used to endorse or promote products derived from
23 // this software without specific prior written permission.
24 //
25 // THIS SOFTWARE IS PROVIDED BY SANDIA CORPORATION "AS IS" AND ANY
26 // EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
27 // IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
28 // PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL SANDIA CORPORATION OR THE
29 // CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
30 // EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
31 // PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
32 // PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
33 // LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
34 // NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
35 // SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
36 //
37 // Questions? Contact Roscoe A. Bartlett (rabartl@sandia.gov)
38 //
39 // ***********************************************************************
40 // @HEADER
41 
42 #include <assert.h>
43 
44 #include <ostream>
45 
46 #include "AbstractLinAlgPack_MatrixSymIdent.hpp"
47 #include "AbstractLinAlgPack_VectorStdOps.hpp"
48 #include "AbstractLinAlgPack_LinAlgOpPack.hpp"
49 
50 namespace AbstractLinAlgPack {
51 
52 // Constructors/initalizers
53 
55  const VectorSpace::space_ptr_t& vec_space
56  ,const value_type scale
57  )
58 {
59  this->initialize(vec_space,scale);
60 }
61 
63  const VectorSpace::space_ptr_t& vec_space
64  ,const value_type scale
65  )
66 {
67  vec_space_ = vec_space;
68  scale_ = scale;
69 }
70 
71 // Overridden from MatrixBase
72 
73 size_type MatrixSymIdent::rows() const
74 {
75  return vec_space_.get() ? vec_space_->dim() : 0;
76 }
77 
78 size_type MatrixSymIdent::nz() const
79 {
80  return vec_space_.get() ? vec_space_->dim() : 0;
81 }
82 
83 // Overridden from MatrixOp
84 
86  return *vec_space_;
87 }
88 
89 std::ostream& MatrixSymIdent::output(std::ostream& out) const
90 {
91  out << "Identity matrix of dimension " << rows() << " x " << rows() << std::endl;
92  return out;
93 }
94 
96  VectorMutable* y, value_type a, BLAS_Cpp::Transp M_trans
97  ,const Vector& x, value_type b
98  ) const
99 {
101  Vt_S(y,b);
102  Vp_StV(y,a*scale_,x);
103 }
104 
105 // Overridden from MatrixNonsing
106 
108  VectorMutable* y, BLAS_Cpp::Transp M_trans, const Vector& x
109  ) const
110 {
112  LinAlgOpPack::V_StV(y,1.0/scale_,x);
113 }
114 
115 } // end namespace AbstractLinAlgPack
MatrixSymIdent(const VectorSpace::space_ptr_t &vec_space=Teuchos::null, const value_type scale=1.0)
Calls this->initialize().
Abstract interface for immutable, finite dimensional, coordinate vectors {abstract}.
void Vt_S(VectorMutable *v_lhs, const value_type &alpha)
v_lhs *= alpha
size_type rows() const
Returns 0 if not initalized.
void initialize(const VectorSpace::space_ptr_t &vec_space, const value_type scale=1.0)
void Vp_StV(VectorMutable *v_lhs, const value_type &alpha, const Vector &v_rhs)
v_lhs = alpha * v_rhs + v_lhs
T * get() const
void V_StV(VectorMutable *v_lhs, value_type alpha, const V &V_rhs)
v_lhs = alpha * V_rhs.
void Vp_StMtV(VectorMutable *v_lhs, value_type alpha, BLAS_Cpp::Transp trans_rhs1, const Vector &v_rhs2, value_type beta) const
Abstract interface for objects that represent a space for mutable coordinate vectors.
size_type nz() const
Returns this->rows()
std::ostream & output(std::ostream &out) const
void V_InvMtV(VectorMutable *v_lhs, BLAS_Cpp::Transp trans_rhs1, const Vector &v_rhs2) const
Abstract interface for mutable coordinate vectors {abstract}.
void Vp_MtV_assert_compatibility(VectorMutable *v_lhs, const MatrixOp &m_rhs1, BLAS_Cpp::Transp trans_rhs1, const Vector &v_rhs2)
v_lhs += op(m_rhs1) * v_rhs2
Transp