Belos  Version of the Day
BelosMultiVecTraits.hpp
Go to the documentation of this file.
1 //@HEADER
2 // ************************************************************************
3 //
4 // Belos: Block Linear Solvers Package
5 // Copyright 2004 Sandia Corporation
6 //
7 // Under the terms of Contract DE-AC04-94AL85000 with Sandia Corporation,
8 // the U.S. Government retains certain rights in this software.
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 Michael A. Heroux (maherou@sandia.gov)
38 //
39 // ************************************************************************
40 //@HEADER
41 //
42 #ifndef BELOS_MULTI_VEC_TRAITS_HPP
43 #define BELOS_MULTI_VEC_TRAITS_HPP
44 
55 
56 #include "BelosTypes.hpp"
57 #include "BelosStubTsqrAdapter.hpp"
58 #include "Teuchos_Range1D.hpp"
59 #include "Teuchos_RCP.hpp"
60 #include "Teuchos_SerialDenseMatrix.hpp"
61 
62 namespace Belos {
63 
70  template<class ScalarType, class MV>
72  {
79  static inline ScalarType notDefined() {
80  return MV::this_type_is_missing_a_specialization();
81  }
82  };
83 
128  template<class ScalarType, class MV>
130  public:
132 
133 
138  static Teuchos::RCP<MV> Clone( const MV& mv, const int numvecs )
139  { UndefinedMultiVecTraits<ScalarType, MV>::notDefined(); return Teuchos::null; }
140 
145  static Teuchos::RCP<MV> CloneCopy( const MV& mv )
146  { UndefinedMultiVecTraits<ScalarType, MV>::notDefined(); return Teuchos::null; }
147 
153  static Teuchos::RCP<MV> CloneCopy( const MV& mv, const std::vector<int>& index )
154  { UndefinedMultiVecTraits<ScalarType, MV>::notDefined(); return Teuchos::null; }
155 
165  static Teuchos::RCP<MV> CloneCopy( const MV& mv, const Teuchos::Range1D& index )
166  { UndefinedMultiVecTraits<ScalarType, MV>::notDefined(); return Teuchos::null; }
167 
173  static Teuchos::RCP<MV> CloneViewNonConst( MV& mv, const std::vector<int>& index )
174  { UndefinedMultiVecTraits<ScalarType, MV>::notDefined(); return Teuchos::null; }
175 
184  static Teuchos::RCP<MV> CloneViewNonConst( MV& mv, const Teuchos::Range1D& index )
185  { UndefinedMultiVecTraits<ScalarType, MV>::notDefined(); return Teuchos::null; }
186 
192  static Teuchos::RCP<const MV> CloneView( const MV& mv, const std::vector<int>& index )
193  { UndefinedMultiVecTraits<ScalarType, MV>::notDefined(); return Teuchos::null; }
194 
203  static Teuchos::RCP<MV> CloneView( MV& mv, const Teuchos::Range1D& index )
204  { UndefinedMultiVecTraits<ScalarType, MV>::notDefined(); return Teuchos::null; }
205 
207 
209 
210 
214  static ptrdiff_t GetGlobalLength( const MV& mv )
216 
218  static int GetNumberVecs( const MV& mv )
220 
243  static bool HasConstantStride( const MV& mv )
245 
247 
249 
250 
253  static void MvTimesMatAddMv( const ScalarType alpha, const MV& A,
254  const Teuchos::SerialDenseMatrix<int,ScalarType>& B,
255  const ScalarType beta, MV& mv )
257 
260  static void MvAddMv( const ScalarType alpha, const MV& A, const ScalarType beta, const MV& B, MV& mv )
262 
265  static void MvScale ( MV& mv, const ScalarType alpha )
267 
270  static void MvScale ( MV& mv, const std::vector<ScalarType>& alpha )
272 
275  static void MvTransMv( const ScalarType alpha, const MV& A, const MV& mv, Teuchos::SerialDenseMatrix<int,ScalarType>& B)
277 
280  static void MvDot ( const MV& mv, const MV& A, std::vector<ScalarType> &b)
282 
284 
286 
294  static void MvNorm( const MV& mv, std::vector<typename Teuchos::ScalarTraits<ScalarType>::magnitudeType>& normvec, NormType type = TwoNorm )
296 
298 
300 
301 
306  static void SetBlock( const MV& A, const std::vector<int>& index, MV& mv )
308 
321  static void SetBlock( const MV& A, const Teuchos::Range1D& index, MV& mv )
323 
327  static void Assign( const MV& A, MV& mv )
329 
332  static void MvRandom( MV& mv )
334 
337  static void MvInit( MV& mv, const ScalarType alpha = Teuchos::ScalarTraits<ScalarType>::zero() )
339 
341 
343 
344 
347  static void MvPrint( const MV& mv, std::ostream& os )
349 
351 
352 #ifdef HAVE_BELOS_TSQR
365  typedef Belos::details::StubTsqrAdapter<MV> tsqr_adaptor_type;
366 #endif // HAVE_BELOS_TSQR
367  };
368 
369 } // namespace Belos
370 
371 #endif // BELOS_MULTI_VEC_TRAITS_HPP
"Stub" TSQR adapter for unsupported multivector types.
Collection of types and exceptions used within the Belos solvers.
Traits class which defines basic operations on multivectors.
static void MvTransMv(const ScalarType alpha, const MV &A, const MV &mv, Teuchos::SerialDenseMatrix< int, ScalarType > &B)
Compute a dense matrix B through the matrix-matrix multiply .
static void MvRandom(MV &mv)
Replace the vectors in mv with random vectors.
static void MvScale(MV &mv, const ScalarType alpha)
Scale each element of the vectors in mv with alpha.
static Teuchos::RCP< MV > Clone(const MV &mv, const int numvecs)
Creates a new empty MV containing numvecs columns.
static void MvTimesMatAddMv(const ScalarType alpha, const MV &A, const Teuchos::SerialDenseMatrix< int, ScalarType > &B, const ScalarType beta, MV &mv)
Update mv with .
static ptrdiff_t GetGlobalLength(const MV &mv)
Return the number of rows in the given multivector mv.
static void MvPrint(const MV &mv, std::ostream &os)
Print the mv multi-vector to the os output stream.
static void MvNorm(const MV &mv, std::vector< typename Teuchos::ScalarTraits< ScalarType >::magnitudeType > &normvec, NormType type=TwoNorm)
Compute the norm of each individual vector of mv. Upon return, normvec[i] holds the value of ,...
static void MvDot(const MV &mv, const MV &A, std::vector< ScalarType > &b)
Compute a vector b where the components are the individual dot-products of the i-th columns of A and ...
static Teuchos::RCP< MV > CloneCopy(const MV &mv, const Teuchos::Range1D &index)
Deep copy of specified columns of mv.
static bool HasConstantStride(const MV &mv)
Whether the given multivector mv has constant stride.
static Teuchos::RCP< const MV > CloneView(const MV &mv, const std::vector< int > &index)
Creates a new const MV that shares the selected contents of mv (shallow copy).
static void MvScale(MV &mv, const std::vector< ScalarType > &alpha)
Scale each element of the i-th vector in mv with alpha[i].
static Teuchos::RCP< MV > CloneViewNonConst(MV &mv, const std::vector< int > &index)
Creates a new MV that shares the selected contents of mv (shallow copy).
static void MvAddMv(const ScalarType alpha, const MV &A, const ScalarType beta, const MV &B, MV &mv)
Replace mv with .
static void MvInit(MV &mv, const ScalarType alpha=Teuchos::ScalarTraits< ScalarType >::zero())
Replace each element of the vectors in mv with alpha.
static Teuchos::RCP< MV > CloneViewNonConst(MV &mv, const Teuchos::Range1D &index)
Non-const view of specified columns of mv.
static void SetBlock(const MV &A, const std::vector< int > &index, MV &mv)
Copy the vectors in A to a set of vectors in mv indicated by the indices given in index.
static Teuchos::RCP< MV > CloneCopy(const MV &mv)
Creates a new MV and copies contents of mv into the new vector (deep copy).
static int GetNumberVecs(const MV &mv)
Obtain the number of vectors in mv.
static Teuchos::RCP< MV > CloneCopy(const MV &mv, const std::vector< int > &index)
Creates a new MV and copies the selected contents of mv into the new vector (deep copy).
static Teuchos::RCP< MV > CloneView(MV &mv, const Teuchos::Range1D &index)
Const view of specified columns of mv.
static void Assign(const MV &A, MV &mv)
mv := A
static void SetBlock(const MV &A, const Teuchos::Range1D &index, MV &mv)
Deep copy of A into specified columns of mv.
"Stub" TSQR adaptor for unsupported multivector types.
NormType
The type of vector norm to compute.
Definition: BelosTypes.hpp:97
@ TwoNorm
Definition: BelosTypes.hpp:98
Used by MultiVecTraits to report lack of a specialization.
static ScalarType notDefined()
Any attempt to compile this method will result in a compile-time error.

Generated on Wed Mar 9 2022 04:36:09 for Belos by doxygen 1.9.1