Fundamental Vector Reduction/Transformation Operator (RTOp) Interfaces Version of the Day
Loading...
Searching...
No Matches
RTOpPack_RTOpT_decl.hpp
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
44#ifndef RTOPPACK_RTOP_NEW_T_DECL_HPP
45#define RTOPPACK_RTOP_NEW_T_DECL_HPP
46
47
48#include "RTOpPack_Types.hpp"
49#include "Teuchos_Describable.hpp"
50
51
52namespace RTOpPack {
53
54
57class ReductTarget : public Teuchos::Describable
58{};
59
60
168template<class Scalar>
169class RTOpT : public Teuchos::Describable {
170public:
171
174
178
180
183
200 const Ptr<int> &num_values,
201 const Ptr<int> &num_indexes,
202 const Ptr<int> &num_chars
203 ) const
204 {
205 get_reduct_type_num_entries_impl(num_values, num_indexes, num_chars);
206 }
207
214 Teuchos::RCP<ReductTarget> reduct_obj_create() const
215 {
216 return reduct_obj_create_impl();
217 }
218
225 const ReductTarget& in_reduct_obj, const Ptr<ReductTarget>& inout_reduct_obj
226 ) const
227 {
228 reduce_reduct_objs_impl( in_reduct_obj, inout_reduct_obj );
229 }
230
238 void reduct_obj_reinit( const Ptr<ReductTarget> &reduct_obj ) const
239 {
240 reduct_obj_reinit_impl(reduct_obj);
241 }
242
253 const ReductTarget &reduct_obj,
254 const ArrayView<primitive_value_type> &value_data,
255 const ArrayView<index_type> &index_data,
256 const ArrayView<char_type> &char_data
257 ) const
258 {
260 value_data, index_data, char_data );
261 }
262
269 const ArrayView<const primitive_value_type> &value_data,
270 const ArrayView<const index_type> &index_data,
271 const ArrayView<const char_type> &char_data,
272 const Ptr<ReductTarget> &reduct_obj
273 ) const
274 {
275 load_reduct_obj_state_impl( value_data, index_data, char_data, reduct_obj );
276 }
277
279
282
292 std::string op_name() const
293 {
294 return op_name_impl();
295 }
296
297 // 2007/11/14: rabartl: ToDo: Above: change to return std::string. Don't
298 // bother deprecating the old function since you can't really do it very
299 // well.
300
306 bool coord_invariant() const
307 {
308 return coord_invariant_impl();
309 }
310
321 Range1D range() const
322 {
323 return range_impl();
324 }
325
395 const ArrayView<const ConstSubVectorView<Scalar> > &sub_vecs,
396 const ArrayView<const SubVectorView<Scalar> > &targ_sub_vecs,
397 const Ptr<ReductTarget> &reduct_obj
398 ) const
399 {
400 apply_op_impl(sub_vecs, targ_sub_vecs, reduct_obj);
401 }
402
404
405protected:
406
409
412 const Ptr<int> &num_values,
413 const Ptr<int> &num_indexes,
414 const Ptr<int> &num_chars
415 ) const;
416
418 virtual Teuchos::RCP<ReductTarget> reduct_obj_create_impl() const;
419
421 virtual void reduce_reduct_objs_impl(
422 const ReductTarget& in_reduct_obj, const Ptr<ReductTarget>& inout_reduct_obj
423 ) const;
424
426 virtual void reduct_obj_reinit_impl( const Ptr<ReductTarget> &reduct_obj ) const;
427
430 const ReductTarget &reduct_obj,
431 const ArrayView<primitive_value_type> &value_data,
432 const ArrayView<index_type> &index_data,
433 const ArrayView<char_type> &char_data
434 ) const;
435
437 virtual void load_reduct_obj_state_impl(
438 const ArrayView<const primitive_value_type> &value_data,
439 const ArrayView<const index_type> &index_data,
440 const ArrayView<const char_type> &char_data,
441 const Ptr<ReductTarget> &reduct_obj
442 ) const;
443
445 virtual std::string op_name_impl() const;
446
448 virtual bool coord_invariant_impl() const;
449
451 virtual Range1D range_impl() const;
452
454 virtual void apply_op_impl(
455 const ArrayView<const ConstSubVectorView<Scalar> > &sub_vecs,
456 const ArrayView<const SubVectorView<Scalar> > &targ_sub_vecs,
457 const Ptr<ReductTarget> &reduct_obj
458 ) const = 0;
459
461
464
467 RTOpT( const std::string &op_name_base = "" );
468
470 void setOpNameBase( const std::string &op_name_base );
471
473
474public:
475
476
477private:
478
479 std::string op_name_;
480
481 void throwNoReductError() const;
482
483}; // end class RTOpT
484
485
486// 2007/11/14: rabartl: ToDo: Break off an RTOpDefaultBase interface and put
487// all default implementation functions in there.
488
489
490} // end namespace RTOpPack
491
492
493#endif // RTOPPACK_RTOP_NEW_T_DECL_HPP
Class for a non-changeable sub-vector.
Templated interface to vector reduction/transformation operators {abstract}.
virtual void apply_op_impl(const ArrayView< const ConstSubVectorView< Scalar > > &sub_vecs, const ArrayView< const SubVectorView< Scalar > > &targ_sub_vecs, const Ptr< ReductTarget > &reduct_obj) const =0
virtual std::string op_name_impl() const
virtual void extract_reduct_obj_state_impl(const ReductTarget &reduct_obj, const ArrayView< primitive_value_type > &value_data, const ArrayView< index_type > &index_data, const ArrayView< char_type > &char_data) const
virtual void reduce_reduct_objs_impl(const ReductTarget &in_reduct_obj, const Ptr< ReductTarget > &inout_reduct_obj) const
Teuchos::RCP< ReductTarget > reduct_obj_create() const
Creates a new reduction target object initialized and ready to be used in a reduction.
bool coord_invariant() const
Returns true if this operator is coordinate invariant.
virtual Teuchos::RCP< ReductTarget > reduct_obj_create_impl() const
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.
virtual void reduct_obj_reinit_impl(const Ptr< ReductTarget > &reduct_obj) const
Range1D range() const
Returns the continuous range of elements that this operator is defined over.
void extract_reduct_obj_state(const ReductTarget &reduct_obj, const ArrayView< primitive_value_type > &value_data, const ArrayView< index_type > &index_data, const ArrayView< char_type > &char_data) const
Extract the state of an already created reduction object.
virtual Range1D range_impl() const
virtual void get_reduct_type_num_entries_impl(const Ptr< int > &num_values, const Ptr< int > &num_indexes, const Ptr< int > &num_chars) const
virtual void load_reduct_obj_state_impl(const ArrayView< const primitive_value_type > &value_data, const ArrayView< const index_type > &index_data, const ArrayView< const char_type > &char_data, const Ptr< ReductTarget > &reduct_obj) const
void setOpNameBase(const std::string &op_name_base)
Just set the operator name.
PrimitiveTypeTraits< Scalar, Scalar >::primitiveType primitive_value_type
void get_reduct_type_num_entries(const Ptr< int > &num_values, const Ptr< int > &num_indexes, const Ptr< int > &num_chars) const
Get the number of entries of each basic data type in the externalized state for a reduction object fo...
void load_reduct_obj_state(const ArrayView< const primitive_value_type > &value_data, const ArrayView< const index_type > &index_data, const ArrayView< const char_type > &char_data, const Ptr< ReductTarget > &reduct_obj) const
Load the state of an already created reduction object given arrays of primitive objects.
void reduce_reduct_objs(const ReductTarget &in_reduct_obj, const Ptr< ReductTarget > &inout_reduct_obj) const
Reduce intermediate reduction target objects.
virtual bool coord_invariant_impl() const
void reduct_obj_reinit(const Ptr< ReductTarget > &reduct_obj) const
Reinitialize an already created reduction object.
std::string op_name() const
Return the name (as a null-terminated C-style string) of the operator.
Abstract base class for all reduction objects.
Class for a changeable sub-vector.