RTOp Package Browser (Single Doxygen Collection)
Version of the Day
Toggle main menu visibility
Loading...
Searching...
No Matches
src
ops_lib
RTOpPack_TOpRandomize.hpp
Go to the documentation of this file.
1
// @HEADER
2
// ***********************************************************************
3
//
4
// RTOp: Interfaces and Support Software for Vector Reduction Transformation
5
// Operations
6
// Copyright (2006) Sandia Corporation
7
//
8
// Under terms of Contract DE-AC04-94AL85000, there is a non-exclusive
9
// license for use of this work by or on behalf of the U.S. Government.
10
//
11
// Redistribution and use in source and binary forms, with or without
12
// modification, are permitted provided that the following conditions are
13
// met:
14
//
15
// 1. Redistributions of source code must retain the above copyright
16
// notice, this list of conditions and the following disclaimer.
17
//
18
// 2. Redistributions in binary form must reproduce the above copyright
19
// notice, this list of conditions and the following disclaimer in the
20
// documentation and/or other materials provided with the distribution.
21
//
22
// 3. Neither the name of the Corporation nor the names of the
23
// contributors may be used to endorse or promote products derived from
24
// this software without specific prior written permission.
25
//
26
// THIS SOFTWARE IS PROVIDED BY SANDIA CORPORATION "AS IS" AND ANY
27
// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
28
// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
29
// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL SANDIA CORPORATION OR THE
30
// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
31
// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
32
// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
33
// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
34
// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
35
// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
36
// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
37
//
38
// Questions? Contact Roscoe A. Bartlett (rabartl@sandia.gov)
39
//
40
// ***********************************************************************
41
// @HEADER
42
43
#ifndef RTOPPACK_TOP_RANDOMIZE_HPP
44
#define RTOPPACK_TOP_RANDOMIZE_HPP
45
46
#include "RTOpPack_RTOpTHelpers.hpp"
47
48
49
namespace
RTOpPack
{
50
51
64
template
<
class
Scalar>
65
class
TOpRandomize
:
public
RTOpT
<Scalar> {
66
public
:
67
using
RTOpT
<Scalar>
::apply_op
;
69
static
void
set_static_seed
(
const
unsigned
int
static_seed )
70
{
static_seed_
= static_seed; }
71
72
static
unsigned
int
get_static_seed
() {
return
static_seed_
; }
74
TOpRandomize
(
75
const
Scalar& l = -ScalarTraits<Scalar>::one(),
76
const
Scalar& u = +ScalarTraits<Scalar>::one()
77
)
78
{
79
this->
setOpNameBase
(
"TOpRandomize"
);
80
set_bounds
(l, u);
81
set_seed
(
static_seed_
);
82
++
static_seed_
;
// By default we will just increment the seed!
83
}
84
85
void
set_bounds
(
const
Scalar& l,
const
Scalar& u )
86
{
l_
= l;
u_
= u; }
87
88
void
set_seed
(
const
unsigned
int
seed ) {
seed_
= seed; }
90
unsigned
int
get_seed
()
const
{
return
seed_
; }
93
94
void
apply_op_impl
(
95
const
ArrayView<
const
ConstSubVectorView<Scalar>
> &sub_vecs,
96
const
ArrayView<
const
SubVectorView<Scalar>
> &targ_sub_vecs,
97
const
Ptr<ReductTarget> &reduct_obj_inout
98
)
const
99
{
100
typedef
typename
Teuchos::ArrayRCP<Scalar>::iterator iter_t;
101
102
#ifdef TEUCHOS_DEBUG
103
validate_apply_op<Scalar>
(*
this
, 0, 1,
false
,
104
sub_vecs, targ_sub_vecs, reduct_obj_inout.getConst());
105
#else
106
(void)sub_vecs;
107
(void)reduct_obj_inout;
108
#endif
109
110
const
index_type
subDim = targ_sub_vecs[0].subDim();
111
const
index_type
globalOffset = targ_sub_vecs[0].globalOffset();
112
113
iter_t z0_val = targ_sub_vecs[0].values().begin();
114
const
ptrdiff_t z0_s = targ_sub_vecs[0].stride();
115
116
// Linear coefficients for translating from [-1,+1] to [l,b]
117
const
Scalar a = Scalar(0.5)*(
u_
-
l_
);
118
const
Scalar b = Scalar(0.5)*(
u_
+
l_
);
119
for
(
index_type
i = 0; i < subDim; ++i, z0_val += z0_s )
120
{
121
Teuchos::ScalarTraits<Scalar>::seedrandom(
seed_
+globalOffset+i);
122
*z0_val = a * Teuchos::ScalarTraits<Scalar>::random() + b;
123
// Above should be in the range [l,b]
124
}
125
}
126
127
private
:
128
static
unsigned
int
static_seed_
;
129
unsigned
int
seed_
;
130
Scalar
l_
;
131
Scalar
u_
;
132
};
133
134
135
template
<
class
Scalar>
136
unsigned
int
TOpRandomize<Scalar>::static_seed_
= 0;
137
138
139
}
// namespace RTOpPack
140
141
142
#endif
// RTOPPACK_TOP_RANDOMIZE_HPP
RTOpPack::ConstSubVectorView
Class for a non-changeable sub-vector.
Definition
RTOpPack_Types.hpp:144
RTOpPack::RTOpT::apply_op
void apply_op(const ArrayView< const ConstSubVectorView< Scalar > > &sub_vecs, const ArrayView< const SubVectorView< Scalar > > &targ_sub_vecs, const Ptr< ReductTarget > &reduct_obj) const
Apply the reduction/transformation operator to a set of sub-vectors.
Definition
RTOpPack_RTOpT_decl.hpp:394
RTOpPack::RTOpT::setOpNameBase
void setOpNameBase(const std::string &op_name_base)
Just set the operator name.
Definition
RTOpPack_RTOpT_def.hpp:152
RTOpPack::RTOpT::RTOpT
RTOpT(const std::string &op_name_base="")
Constructor that creates an operator name appended with the type.
Definition
RTOpPack_RTOpT_def.hpp:145
RTOpPack::SubVectorView
Class for a changeable sub-vector.
Definition
RTOpPack_Types.hpp:247
RTOpPack::TOpRandomize::get_seed
unsigned int get_seed() const
Definition
RTOpPack_TOpRandomize.hpp:90
RTOpPack::TOpRandomize::u_
Scalar u_
Definition
RTOpPack_TOpRandomize.hpp:131
RTOpPack::TOpRandomize::set_bounds
void set_bounds(const Scalar &l, const Scalar &u)
Definition
RTOpPack_TOpRandomize.hpp:85
RTOpPack::TOpRandomize::TOpRandomize
TOpRandomize(const Scalar &l=-ScalarTraits< Scalar >::one(), const Scalar &u=+ScalarTraits< Scalar >::one())
Definition
RTOpPack_TOpRandomize.hpp:74
RTOpPack::TOpRandomize::set_seed
void set_seed(const unsigned int seed)
Definition
RTOpPack_TOpRandomize.hpp:88
RTOpPack::TOpRandomize::static_seed_
static unsigned int static_seed_
Definition
RTOpPack_TOpRandomize.hpp:128
RTOpPack::TOpRandomize::l_
Scalar l_
Definition
RTOpPack_TOpRandomize.hpp:130
RTOpPack::TOpRandomize::seed_
unsigned int seed_
Definition
RTOpPack_TOpRandomize.hpp:129
RTOpPack::TOpRandomize::apply_op_impl
void apply_op_impl(const ArrayView< const ConstSubVectorView< Scalar > > &sub_vecs, const ArrayView< const SubVectorView< Scalar > > &targ_sub_vecs, const Ptr< ReductTarget > &reduct_obj_inout) const
Definition
RTOpPack_TOpRandomize.hpp:94
RTOpPack::TOpRandomize::set_static_seed
static void set_static_seed(const unsigned int static_seed)
Definition
RTOpPack_TOpRandomize.hpp:69
RTOpPack::TOpRandomize::get_static_seed
static unsigned int get_static_seed()
Definition
RTOpPack_TOpRandomize.hpp:72
RTOpPack
Definition
RTOpPack_RTOpT_decl.hpp:52
RTOpPack::index_type
Teuchos_Ordinal index_type
Definition
RTOpPack_Types.hpp:89
RTOpPack::validate_apply_op
void validate_apply_op(const RTOpT< Scalar > &op, const int allowed_num_sub_vecs, const int allowed_num_targ_sub_vecs, const bool expect_reduct_obj, const ArrayView< const ConstSubVectorView< Scalar > > &sub_vecs, const ArrayView< const SubVectorView< Scalar > > &targ_sub_vecs, const Ptr< const ReductTarget > &reduct_obj)
Validate the input to an apply_op(...) function.
Definition
RTOpPack_RTOpTHelpers_def.hpp:74
Generated by
1.17.0