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_MatrixSymDiagSparse.hpp
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 #ifndef SPARSE_LINALG_PACK_MATRIX_DIAGONAL_SPARSE_H
42 #define SPARSE_LINALG_PACK_MATRIX_DIAGONAL_SPARSE_H
43 
44 #include "AbstractLinAlgPack_MatrixSymOpSerial.hpp"
45 #include "AbstractLinAlgPack_MatrixConvertToSparse.hpp"
47 
48 namespace AbstractLinAlgPack {
49 
54  : virtual public MatrixSymOpSerial
55  , virtual public MatrixConvertToSparse
56 {
57 public:
58 
62  STANDARD_MEMBER_COMPOSITION_MEMBERS( size_type, num_updates_at_once );
63 
68 
71 
73  virtual const SpVectorSlice diag() const = 0;
74 
76 
79 
81  size_type rows() const;
82 
84 
87 
89  std::ostream& output(std::ostream& out) const;
90 
92 
95 
97  void Vp_StMtV(DVectorSlice* vs_lhs, value_type alpha, BLAS_Cpp::Transp trans_rhs1
98  , const DVectorSlice& vs_rhs2, value_type beta) const;
99 
101 
104 
125  void Mp_StMtMtM( DMatrixSliceSym* sym_lhs, value_type alpha
126  , EMatRhsPlaceHolder dummy_place_holder
127  , const MatrixOpSerial& mwo_rhs, BLAS_Cpp::Transp mwo_rhs_trans
128  , value_type beta ) const;
129 
131 
134 
136  index_type num_nonzeros(
137  EExtractRegion extract_region
138  ,EElementUniqueness element_uniqueness
139  ) const;
142  EExtractRegion extract_region
143  ,EElementUniqueness element_uniqueness
144  ,const index_type len_Aval
145  ,value_type Aval[]
146  ,const index_type len_Aij
147  ,index_type Arow[]
148  ,index_type Acol[]
149  ,const index_type row_offset
150  ,const index_type col_offset
151  ) const;
152 
154 
155 }; // end class MatrixSymDiagSparse
156 
157 } // end namespace AbstractLinAlgPack
158 
159 #endif // SPARSE_LINALG_PACK_MATRIX_DIAGONAL_SPARSE_H
virtual const SpVectorSlice diag() const =0
Give access to the sparse diagonal.
Abstract base class for all serial symmetric diagonal matrices with significant zeros along the diago...
Base class for all matrices implemented in a shared memory address space.
Abstract base class for all AbstractLinAlgPack::MatrixSymOp objects implemented in shared memory spac...
Mix-in interface for extracing explicit elements from a sparse matrix in one of several Fortran compa...
void Vp_StMtV(DVectorSlice *vs_lhs, value_type alpha, BLAS_Cpp::Transp trans_rhs1, const DVectorSlice &vs_rhs2, value_type beta) const
void coor_extract_nonzeros(EExtractRegion extract_region, EElementUniqueness element_uniqueness, const index_type len_Aval, value_type Aval[], const index_type len_Aij, index_type Arow[], index_type Acol[], const index_type row_offset, const index_type col_offset) const
MatrixSymDiagSparse()
The default value of num_updates_at_once == 0 is set to allow this class to determine the appropriate...
STANDARD_MEMBER_COMPOSITION_MEMBERS(size_type, num_updates_at_once)
<<std member="" comp>="">> members for how many updates to compute at once in the operation M_MtMtM(...
Transp
void Mp_StMtMtM(DMatrixSliceSym *sym_lhs, value_type alpha, EMatRhsPlaceHolder dummy_place_holder, const MatrixOpSerial &mwo_rhs, BLAS_Cpp::Transp mwo_rhs_trans, value_type beta) const
Computes the dense symmetric matrix B += a*op(A')*M*op(A).
index_type num_nonzeros(EExtractRegion extract_region, EElementUniqueness element_uniqueness) const