00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026
00027
00028
00029 #ifndef RTOPPACK_TOP_RANDOMIZE_HPP
00030 #define RTOPPACK_TOP_RANDOMIZE_HPP
00031
00032 #include "RTOpPack_RTOpTHelpers.hpp"
00033
00034 namespace RTOpPack {
00035
00044 template<class Scalar>
00045 class TOpRandomize : public ROpScalarScalarTransformationBase<Scalar> {
00046 public:
00048 void set_bounds( const Scalar& l, const Scalar& u ) { this->scalarData1(l); this->scalarData2(u); }
00050 TOpRandomize(
00051 const Scalar& l = -Teuchos::ScalarTraits<Scalar>::one()
00052 ,const Scalar& u = +Teuchos::ScalarTraits<Scalar>::one()
00053 )
00054 : RTOpT<Scalar>("TOpRandomize"), ROpScalarScalarTransformationBase<Scalar>(l,u)
00055 {}
00059 void apply_op(
00060 const int num_vecs, const SubVectorT<Scalar> sub_vecs[]
00061 ,const int num_targ_vecs, const MutableSubVectorT<Scalar> targ_sub_vecs[]
00062 ,ReductTarget *reduct_obj
00063 ) const
00064 {
00065 const Scalar l = this->scalarData1(), u = this->scalarData2();
00066 const Scalar a = Scalar(0.5)*(u-l), b = Scalar(0.5)*(u+l) ;
00067 RTOP_APPLY_OP_0_1(num_vecs,sub_vecs,num_targ_vecs,targ_sub_vecs);
00068 for( RTOp_index_type i = 0; i < subDim; ++i, z0_val += z0_s ) {
00069 *z0_val = a * Teuchos::ScalarTraits<Scalar>::random() + b;
00070 }
00071 }
00073 };
00074
00075 }
00076
00077 #endif // RTOPPACK_TOP_RANDOMIZE_HPP