Anasazi
Version of the Day
Toggle main menu visibility
Loading...
Searching...
No Matches
src
TSQR
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
57
namespace
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
AnasaziConfigDefs.hpp
Anasazi header file which uses auto-configuration information to include necessary C++ headers.
TSQR::Trilinos::Randomizer
Generates random test problems for TSQR.
Definition
TsqrRandomizer.hpp:71
TSQR::Trilinos::Randomizer::init
void init(const multivector_type &mv, const normalgen_ptr &pGen)
Definition
TsqrRandomizer.hpp:127
TSQR::Trilinos::Randomizer::randomMultiVector
virtual void randomMultiVector(multivector_type &A, const magnitude_type singularValues[])
Fill A with a (pseudo)random (distributed) matrix.
Definition
TsqrRandomizer.hpp:101
Generated by
1.17.0