Thyra
Version of the Day
Toggle main menu visibility
Loading...
Searching...
No Matches
core
src
support
operator_vector
client_support
Thyra_ListedMultiVectorRandomizer.hpp
1
// @HEADER
2
// *****************************************************************************
3
// Thyra: Interfaces and Support for Abstract Numerical Algorithms
4
//
5
// Copyright 2004 NTESS and the Thyra contributors.
6
// SPDX-License-Identifier: BSD-3-Clause
7
// *****************************************************************************
8
// @HEADER
9
10
#ifndef THYRA_LISTED_MULTI_VECTOR_RANDOMIZER_HPP
11
#define THYRA_LISTED_MULTI_VECTOR_RANDOMIZER_HPP
12
13
#include "Thyra_MultiVectorRandomizerBase.hpp"
14
#include "Thyra_MultiVectorStdOps.hpp"
15
16
17
namespace
Thyra {
18
19
29
template
<
class
Scalar>
30
class
ListedMultiVectorRandomizer
:
public
MultiVectorRandomizerBase
<Scalar> {
31
public
:
32
34
ListedMultiVectorRandomizer
(
35
const
Teuchos::RCP
<
const
MultiVectorBase<Scalar>
> multiVecs[]
36
,
const
int
numMultiVecs
37
);
38
40
void
initialize
(
41
const
Teuchos::RCP
<
const
MultiVectorBase<Scalar>
> multiVecs[]
42
,
const
int
numMultiVecs
43
);
44
47
49
bool
isCompatible
(
const
VectorSpaceBase<Scalar>
&space )
const
;
50
52
53
private
:
54
57
59
void
randomizeImpl(
const
Ptr
<
MultiVectorBase<Scalar>
> &mv);
60
62
63
private
:
64
65
typedef
std::vector<Teuchos::RCP<const MultiVectorBase<Scalar> > > multiVecs_t;
66
multiVecs_t multiVecs_;
67
int
curr_mv_i_;
68
69
};
70
71
72
// //////////////////////////////
73
// Definitions
74
75
76
template
<
class
Scalar>
77
ListedMultiVectorRandomizer<Scalar>::ListedMultiVectorRandomizer
(
78
const
Teuchos::RCP
<
const
MultiVectorBase<Scalar>
> multiVecs[]
79
,
const
int
numMultiVecs
80
)
81
{
82
initialize
(multiVecs,numMultiVecs);
83
}
84
85
86
template
<
class
Scalar>
87
void
ListedMultiVectorRandomizer<Scalar>::initialize
(
88
const
Teuchos::RCP
<
const
MultiVectorBase<Scalar>
> multiVecs[]
89
,
const
int
numMultiVecs
90
)
91
{
92
multiVecs_.resize(numMultiVecs);
93
std::copy( multiVecs, multiVecs + numMultiVecs, multiVecs_.begin() );
94
curr_mv_i_ = 0;
95
}
96
97
98
// Overridden from MultiVectorRandomizerBase
99
100
101
template
<
class
Scalar>
102
bool
ListedMultiVectorRandomizer<Scalar>::isCompatible
(
const
VectorSpaceBase<Scalar>
&space )
const
103
{
104
return
multiVecs_[curr_mv_i_]->range()->isCompatible(space);
105
}
106
107
108
// Overridded private functions
109
110
111
template
<
class
Scalar>
112
void
ListedMultiVectorRandomizer<Scalar>::randomizeImpl(
113
const
Ptr
<
MultiVectorBase<Scalar>
> &mv)
114
{
115
#ifdef TEUCHOS_DEBUG
116
TEUCHOS_TEST_FOR_EXCEPT
( multiVecs_.size()==0 );
117
#endif
118
const
Teuchos::RCP<const MultiVectorBase<Scalar>
> currMV = multiVecs_[curr_mv_i_];
119
#ifdef TEUCHOS_DEBUG
120
THYRA_ASSERT_VEC_SPACES
(
"ListedMultiVectorRandomizer<Scalar>::randomize(mv)"
, *currMV->range(), *mv->range() );
121
THYRA_ASSERT_VEC_SPACES
(
"ListedMultiVectorRandomizer<Scalar>::randomize(mv)"
, *currMV->domain(), *mv->domain() );
122
#endif
123
Thyra::assign
( mv, *currMV );
124
if
( curr_mv_i_ ==
static_cast<
int
>
(multiVecs_.size()) - 1 )
125
curr_mv_i_ = 0;
126
else
127
++curr_mv_i_;
128
}
129
130
131
}
// namespace Thyra
132
133
134
#endif
// THYRA_LISTED_MULTI_VECTOR_RANDOMIZER_HPP
Teuchos::Ptr
Teuchos::RCP
Thyra::ListedMultiVectorRandomizer::isCompatible
bool isCompatible(const VectorSpaceBase< Scalar > &space) const
Definition
Thyra_ListedMultiVectorRandomizer.hpp:102
Thyra::ListedMultiVectorRandomizer::ListedMultiVectorRandomizer
ListedMultiVectorRandomizer(const Teuchos::RCP< const MultiVectorBase< Scalar > > multiVecs[], const int numMultiVecs)
Calls this->initialize().
Definition
Thyra_ListedMultiVectorRandomizer.hpp:77
Thyra::ListedMultiVectorRandomizer::initialize
void initialize(const Teuchos::RCP< const MultiVectorBase< Scalar > > multiVecs[], const int numMultiVecs)
Definition
Thyra_ListedMultiVectorRandomizer.hpp:87
Thyra::MultiVectorBase
Interface for a collection of column vectors called a multi-vector.
Definition
Thyra_MultiVectorBase_decl.hpp:464
Thyra::MultiVectorBase::assign
void assign(const Ptr< MultiVectorBase< Scalar > > &V, Scalar alpha)
V = alpha.
Definition
Thyra_MultiVectorStdOps_def.hpp:122
Thyra::MultiVectorRandomizerBase
Base interface for a strategy object for randomizing a multi-vector.
Definition
Thyra_MultiVectorRandomizerBase.hpp:32
Thyra::VectorSpaceBase
Abstract interface for objects that represent a space for vectors.
Definition
Thyra_VectorSpaceBase_decl.hpp:267
TEUCHOS_TEST_FOR_EXCEPT
#define TEUCHOS_TEST_FOR_EXCEPT(throw_exception_test)
THYRA_ASSERT_VEC_SPACES
#define THYRA_ASSERT_VEC_SPACES(FUNC_NAME, VS1, VS2)
This is a very useful macro that should be used to validate that two vector spaces are compatible.
Definition
Thyra_AssertOp.hpp:156
Generated by
1.17.0