MOOCHO (Single Doxygen Collection)  Version of the Day
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Groups Pages
AbstractLinAlgPack_GenPermMatrixSliceOp.hpp
Go to the documentation of this file.
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 #ifndef GEN_PERM_MATRIX_SLICE_OP_H
43 #define GEN_PERM_MATRIX_SLICE_OP_H
44 
47 
48 namespace AbstractLinAlgPack {
49 
55 
67 void V_StMtV(
68  SpVector* sv_lhs, value_type alpha, const GenPermMatrixSlice& P_rhs1
69  ,BLAS_Cpp::Transp P_rhs1_trans, const DVectorSlice& vs_rhs2
70  );
71 
72 inline
74 void V_MtV(
75  SpVector* sv_lhs, const GenPermMatrixSlice& P_rhs1
76  ,BLAS_Cpp::Transp P_rhs1_trans, const DVectorSlice& vs_rhs2
77  )
78 {
79  V_StMtV(sv_lhs,1.0,P_rhs1,P_rhs1_trans,vs_rhs2);
80 }
81 
114 void V_StMtV(
115  SpVector* sv_lhs, value_type alpha, const GenPermMatrixSlice& P_rhs1
116  ,BLAS_Cpp::Transp P_rhs1_trans, const SpVectorSlice& sv_rhs2
117  );
118 
119 inline
121 void V_MtV(
122  SpVector* sv_lhs, const GenPermMatrixSlice& P_rhs1
123  ,BLAS_Cpp::Transp P_rhs1_trans, const SpVectorSlice& sv_rhs2
124  )
125 {
126  V_StMtV(sv_lhs,1.0,P_rhs1,P_rhs1_trans,sv_rhs2);
127 }
128 
129 
142 void Vp_StMtV(
143  SpVector* sv_lhs, value_type alpha, const GenPermMatrixSlice& P_rhs1
144  ,BLAS_Cpp::Transp P_rhs1_trans, const DVectorSlice& vs_rhs2
145  );
146 
147 inline
150 void Vp_MtV(
151  SpVector* sv_lhs, const GenPermMatrixSlice& P_rhs1
152  ,BLAS_Cpp::Transp P_rhs1_trans, const DVectorSlice& vs_rhs2
153  )
154 {
155  Vp_StMtV(sv_lhs,1.0,P_rhs1,P_rhs1_trans,vs_rhs2);
156 }
157 
159 void Vp_StMtV(
160  DVectorSlice* vs_lhs, value_type alpha, const GenPermMatrixSlice& P_rhs1
161  ,BLAS_Cpp::Transp P_rhs1_trans, const DVectorSlice& vs_rhs2, value_type beta = 1.0
162  );
163 
165 void Vp_StMtV(
166  DVectorSlice* vs_lhs, value_type alpha, const GenPermMatrixSlice& P_rhs1
167  ,BLAS_Cpp::Transp P_rhs1_trans, const SpVectorSlice& sv_rhs2, value_type beta = 1.0)
168  ;
169 
210 void intersection(
211  const GenPermMatrixSlice &P1
212  ,BLAS_Cpp::Transp P1_trans
213  ,const GenPermMatrixSlice &P2
214  ,BLAS_Cpp::Transp P2_trans
215  ,size_type *Q_nz
216  ,const size_type Q_max_nz = 0
217  ,size_type Q_row_i[] = NULL
218  ,size_type Q_col_j[] = NULL
219  ,GenPermMatrixSlice *Q = NULL
220  );
221 
223 
224 } // end namespace AbstractLinAlgPack
225 
226 #endif // GEN_PERM_MATRIX_SLICE_OP_H
void V_StMtV(SpVector *sv_lhs, value_type alpha, const GenPermMatrixSlice &P_rhs1, BLAS_Cpp::Transp P_rhs1_trans, const DVectorSlice &vs_rhs2)
sv_lhs = alpha * op(P_rhs1) * vs_rhs2.
SparseVector< SparseElement< index_type, value_type >, std::allocator< SparseElement< index_type, value_type > > > SpVector
void Vp_StMtV(VectorMutable *v_lhs, value_type alpha, const MatrixOp &M_rhs1, BLAS_Cpp::Transp trans_rhs1, const Vector &v_rhs2, value_type beta=1.0)
v_lhs = alpha * op(M_rhs1) * v_rhs2 + beta * v_lhs (BLAS xGEMV)
SparseVectorSlice< SparseElement< index_type, value_type > > SpVectorSlice
DenseLinAlgPack::VectorSliceTmpl< value_type > DVectorSlice
void Vp_MtV(SpVector *sv_lhs, const GenPermMatrixSlice &P_rhs1, BLAS_Cpp::Transp P_rhs1_trans, const DVectorSlice &vs_rhs2)
sv_lhs += op(P_rhs1) * vs_rhs2.
void intersection(const GenPermMatrixSlice &P1, BLAS_Cpp::Transp P1_trans, const GenPermMatrixSlice &P2, BLAS_Cpp::Transp P2_trans, size_type *Q_nz, const size_type Q_max_nz=0, size_type Q_row_i[]=NULL, size_type Q_col_j[]=NULL, GenPermMatrixSlice *Q=NULL)
Find the intersection between two GenPermMatrixSlice objects.
Transp
TRANS.
void V_MtV(DVector &v_lhs, const T_Matrix &gm_rhs1, BLAS_Cpp::Transp trans_rhs1, const DVectorSlice &vs_rhs2)
v_lhs = T_M * vs_lhs (templated matrix type T_M)
Concrete matrix type to represent general permutation (mapping) matrices.