11 #ifndef RTOPPACK_RTOP_T_HELPERS_DEF_HPP
12 #define RTOPPACK_RTOP_T_HELPERS_DEF_HPP
26 template<
class ConcreteReductObj>
29 std::ostringstream oss;
31 <<
"RTOpPack::DefaultReductTarget<"
33 <<
"{concreteReductObj="<<concreteReductObj_<<
"}";
41 template<
class Scalar>
44 const int allowed_num_sub_vecs,
45 const int allowed_num_targ_sub_vecs,
46 const bool expect_reduct_obj,
55 const int num_sub_vecs = sub_vecs.size();
56 const int num_targ_sub_vecs = targ_sub_vecs.size();
58 const std::string op_name_str =
"op.name() = " + op.
op_name();
60 if (allowed_num_sub_vecs >= 0) {
63 op_name_str<<
": Error, sub_vecs.size()="<<sub_vecs.size()
64 <<
" != allowed_num_sub_vecs="<<allowed_num_sub_vecs<<
"!" );
67 if (allowed_num_targ_sub_vecs >= 0) {
70 op_name_str<<
": Error, targ_sub_vecs.size()="<<targ_sub_vecs.size()
71 <<
" != allowed_num_targ_sub_vecs="<<allowed_num_targ_sub_vecs<<
"!" );
76 op_name_str<<
": Error, apply_op(...) must be passed some vectors!"
80 (sub_vecs.size() ? sub_vecs[0].subDim() : targ_sub_vecs[0].subDim());
83 (sub_vecs.size() ? sub_vecs[0].globalOffset() : targ_sub_vecs[0].globalOffset());
85 for (
int k = 0; k < num_sub_vecs; ++k ) {
87 sub_vecs[k].subDim() != subDim || sub_vecs[k].globalOffset() != globalOffset,
89 op_name_str<<
": Error, sub_vec["<<k<<
"] "
90 "(subDim="<<sub_vecs[k].subDim()<<
",globalOffset="<<sub_vecs[k].globalOffset()<<
")"
91 " is not compatible with (subDim="<<subDim<<
",globalOffset="<<globalOffset<<
")!"
95 for (
int k = 0; k < num_targ_sub_vecs; ++k ) {
97 targ_sub_vecs[k].subDim() != subDim || targ_sub_vecs[k].globalOffset() != globalOffset,
99 op_name_str<<
": Error, sub_vec["<<k<<
"] "
100 "(subDim="<<targ_sub_vecs[k].subDim()<<
",globalOffset="<<targ_sub_vecs[k].globalOffset()<<
")"
101 " is not compatible with (subDim="<<subDim<<
",globalOffset="<<globalOffset<<
")!"
105 if (expect_reduct_obj) {
109 op_name_str<<
": Error, expected a reduction target object!"
123 const std::type_info& reduct_obj_type =
typeid (reduct_obj_thing);
124 ReductTarget& dummy_reduct_obj_thing = *dummy_reduct_obj;
125 const std::type_info& dummy_reduct_obj_type =
typeid (dummy_reduct_obj_thing);
129 op_name_str<<
": Error, the type of the input reduct_obj = "
146 #define RTOPPACK_RTOPT_HELPERS_DEFAULTREDUCTTARGET_INSTANT(SCALAR) \
148 template std::string DefaultReductTarget<SCALAR >::description() const;
151 #define RTOPPACK_RTOPT_HELPERS_INSTANT_SCALAR(SCALAR) \
153 RTOPPACK_RTOPT_HELPERS_DEFAULTREDUCTTARGET_INSTANT(SCALAR) \
155 RTOPPACK_RTOPT_HELPERS_DEFAULTREDUCTTARGET_INSTANT(ScalarIndex<SCALAR >) \
157 RTOPPACK_RTOPT_HELPERS_DEFAULTREDUCTTARGET_INSTANT(SubVectorView<SCALAR >) \
159 template void validate_apply_op<SCALAR >( \
160 const RTOpT<SCALAR > &op, \
161 const int allowed_num_sub_vecs, \
162 const int allowed_num_targ_sub_vecs, \
163 const bool expect_reduct_obj, \
164 const ArrayView<const ConstSubVectorView<SCALAR > > &sub_vecs, \
165 const ArrayView<const SubVectorView<SCALAR > > &targ_sub_vecs, \
166 const Ptr<const ReductTarget> &reduct_obj \
172 #endif // RTOPPACK_RTOP_T_HELPERS_DEF_HPP
std::string op_name() const
Return the name (as a null-terminated C-style string) of the operator.
bool is_null(const boost::shared_ptr< T > &p)
std::string description() const
TEUCHOSCORE_LIB_DLL_EXPORT std::string demangleName(const std::string &mangledName)
Class for a changeable sub-vector.
#define TEUCHOS_TEST_FOR_EXCEPTION(throw_exception_test, Exception, msg)
Teuchos_Ordinal index_type
Class for a non-changeable sub-vector.
Templated interface to vector reduction/transformation operators {abstract}.
Abstract base class for all reduction objects.
TypeTo as(const TypeFrom &t)
Teuchos::RCP< ReductTarget > reduct_obj_create() const
Creates a new reduction target object initialized and ready to be used in a reduction.
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.
static std::string name()