Anasazi Version of the Day
Loading...
Searching...
No Matches
TsqrRandomizer.hpp
1// @HEADER
2// ***********************************************************************
3//
4// Anasazi: Block Eigensolvers Package
5// Copyright 2004 Sandia Corporation
6//
7// Under 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 __TSQR_Trilinos_Randomizer_hpp
43#define __TSQR_Trilinos_Randomizer_hpp
44
45#include "AnasaziConfigDefs.hpp"
46#include "TsqrTypeAdaptor.hpp"
47#include "TsqrCommFactory.hpp"
48
49#include "Tsqr_ScalarTraits.hpp"
50#include "Tsqr_Random_GlobalMatrix.hpp"
51
52#include <string>
53
56
57namespace TSQR {
58 namespace Trilinos {
70 template< class S, class LO, class GO, class MV, class Gen >
71 class Randomizer {
72 public:
73 typedef S scalar_type;
74 typedef LO local_ordinal_type;
75 typedef GO global_ordinal_type;
76 typedef MV multivector_type;
77 typedef Gen normalgen_type;
78 typedef Teuchos::RCP< Gen > normalgen_ptr;
79 typedef TSQR::Random::MatrixGenerator< S, LO, Gen > matgen_type;
80
81 typedef typename TSQR::ScalarTraits< S >::magnitude_type magnitude_type;
82
83 typedef TsqrTypeAdaptor< S, LO, GO, MV > type_adaptor;
84 typedef typename type_adaptor::comm_type comm_type;
85 typedef typename type_adaptor::comm_ptr comm_ptr;
86 typedef Teuchos::RCP< MessengerBase< LO > > ordinal_messenger_ptr;
87 typedef Teuchos::RCP< MessengerBase< S > > scalar_messenger_ptr;
88
89 virtual ~Randomizer() {}
90
100 virtual void
101 randomMultiVector (multivector_type& A,
102 const magnitude_type singularValues[])
103 {
104 using TSQR::Random::randomGlobalMatrix;
105 using Teuchos::ArrayRCP;
106 typedef MatView< local_ordinal_type, scalar_type > matview_type;
107
108 local_ordinal_type nrowsLocal, ncols, LDA;
109 fetchDims (A, nrowsLocal, ncols, LDA);
110 ArrayRCP< scalar_type > A_ptr = fetchNonConstView (A);
111 matview_type A_view (nrowsLocal, ncols, A_ptr.get(), LDA);
112
113 randomGlobalMatrix (pGen_.get(), A_view, singularValues,
114 pOrdinalMessenger_.get(), pScalarMessenger_.get());
115 }
116
117 protected:
126 void
127 init (const multivector_type& mv,
128 const normalgen_ptr& pGen)
129 {
130 pGen_ = pGen;
131 // This is done in a multivector type - dependent way.
132 fetchMessengers (mv, pScalarMessenger_, pOrdinalMessenger_);
133 }
134
135 private:
151 virtual void
152 fetchDims (const multivector_type& A,
153 local_ordinal_type& nrowsLocal,
154 local_ordinal_type& ncols,
155 local_ordinal_type& LDA) const = 0;
156
164 virtual Teuchos::ArrayRCP< scalar_type >
165 fetchNonConstView (multivector_type& A) const = 0;
166
169 virtual void
170 fetchMessengers (const multivector_type& mv,
171 scalar_messenger_ptr& pScalarMessenger,
172 ordinal_messenger_ptr& pOrdinalMessenger) const = 0;
173
174 normalgen_ptr pGen_;
175 ordinal_messenger_ptr pOrdinalMessenger_;
176 scalar_messenger_ptr pScalarMessenger_;
177 };
178
179 } // namespace Trilinos
180} // namespace TSQR
181
182#endif // __TSQR_Trilinos_Randomizer_hpp
Anasazi header file which uses auto-configuration information to include necessary C++ headers.
Generates random test problems for TSQR.
void init(const multivector_type &mv, const normalgen_ptr &pGen)
virtual void randomMultiVector(multivector_type &A, const magnitude_type singularValues[])
Fill A with a (pseudo)random (distributed) matrix.