source: XIOS/trunk/src/transformation/Functions/reduction.hpp @ 888

Last change on this file since 888 was 888, checked in by mhnguyen, 6 years ago

Adding new transformation for scalar: Reducing an axis to a scalar

+) Add new xml node for new transformation
+) Add new algorithms for axis reduction
+) Make change in some place to make sure everything work fine

Test
+) On Curie
+) Tests pass and are correct

File size: 1.9 KB
Line 
1/*!
2   \file reduction.hpp
3   \author Ha NGUYEN
4   \since 27 June 2016
5   \date 27 June 2016
6
7   \brief Parent class for all reduction
8 */
9#ifndef __XIOS_REDUCTION_ALGORITHM_HPP__
10#define __XIOS_REDUCTION_ALGORITHM_HPP__
11
12#include <vector>
13#include "array_new.hpp"
14#include "reduction_types.hpp"
15
16namespace xios {
17
18/*!
19  \class CReductionAlgorithm
20  Interface for all reduction alogrithms.
21*/
22class CReductionAlgorithm
23{
24public:
25  static std::map<StdString,EReductionType> ReductionOperations;
26
27public:
28  CReductionAlgorithm() {}
29
30  /*!
31    Create an operation (sum, max, min) based on type
32    \param [in] reduceType type to create
33    return pointer to base class
34  */
35  static CReductionAlgorithm* createOperation(EReductionType reduceType);
36
37  /*!
38    Apply a reduction operation on local data.
39    \param [in] localIndex vector contains local index of local data output and the corresponding weight
40    \param [in] dataInput Pointer to the first element of data input array (in form of buffer)
41    \param [in/out] dataOut Array contains local data
42    \param [in/out] flagInitial vector of boolean to mark the local index already initialized. True means there is a need for initalization
43  */
44  virtual void apply(const std::vector<std::pair<int,double> >& localIndex,
45                     const double* dataInput,
46                     CArray<double,1>& dataOut,
47                     std::vector<bool>& flagInitial) = 0;
48
49  virtual ~CReductionAlgorithm() {}
50
51protected:
52  typedef CReductionAlgorithm* (*CreateOperationCallBack)();
53  typedef std::map<EReductionType, CreateOperationCallBack> CallBackMap;
54  static CallBackMap* reductionCreationCallBacks_;
55
56  static bool registerOperation(EReductionType reduceType, CreateOperationCallBack createFn);
57  static bool unregisterOperation(EReductionType reduceType);
58
59protected:
60  static bool initReductionOperation(std::map<StdString,EReductionType>& m);
61  static bool _dummyInit;
62};
63
64}
65#endif // __XIOS_REDUCTION_ALGORITHM_HPP__
Note: See TracBrowser for help on using the repository browser.