XIOS  1.0
Xml I/O Server
 Tout Classes Espaces de nommage Fichiers Fonctions Variables Définitions de type Énumérations Valeurs énumérées Amis Macros
scalar_algorithm_reduce_axis.cpp
Aller à la documentation de ce fichier.
1 
10 #include "axis.hpp"
11 #include "scalar.hpp"
13 #include "grid.hpp"
15 #include "reduction.hpp"
16 
17 #include "reduction.hpp"
18 
19 namespace xios {
21  CTransformation<CScalar>* transformation,
22  int elementPositionInGrid,
23  std::map<int, int>& elementPositionInGridSrc2ScalarPosition,
24  std::map<int, int>& elementPositionInGridSrc2AxisPosition,
25  std::map<int, int>& elementPositionInGridSrc2DomainPosition,
26  std::map<int, int>& elementPositionInGridDst2ScalarPosition,
27  std::map<int, int>& elementPositionInGridDst2AxisPosition,
28  std::map<int, int>& elementPositionInGridDst2DomainPosition)
29 TRY
30 {
31  std::vector<CScalar*> scalarListDestP = gridDst->getScalars();
32  std::vector<CAxis*> axisListSrcP = gridSrc->getAxis();
33 
34  CReduceAxisToScalar* reduceAxis = dynamic_cast<CReduceAxisToScalar*> (transformation);
35  int scalarDstIndex = elementPositionInGridDst2ScalarPosition[elementPositionInGrid];
36  int axisSrcIndex = elementPositionInGridSrc2AxisPosition[elementPositionInGrid];
37 
38  return (new CScalarAlgorithmReduceAxis(scalarListDestP[scalarDstIndex], axisListSrcP[axisSrcIndex], reduceAxis));
39 }
40 CATCH
41 
43 TRY
44 {
46 }
47 CATCH
48 
50  : CScalarAlgorithmTransformation(scalarDestination, axisSource),
51  reduction_(0)
52 TRY
53 {
54  if (algo->operation.isEmpty())
55  ERROR("CScalarAlgorithmReduceAxis::CScalarAlgorithmReduceAxis(CAxis* axisDestination, CAxis* axisSource, CReduceAxisToScalar* algo)",
56  << "Operation must be defined."
57  << "Axis source " <<axisSource->getId() << std::endl
58  << "Scalar destination " << scalarDestination->getId());
59  StdString op;
60  switch (algo->operation)
61  {
62  case CReduceAxisToScalar::operation_attr::sum:
63  op = "sum";
64  break;
65  case CReduceAxisToScalar::operation_attr::min:
66  op = "min";
67  break;
68  case CReduceAxisToScalar::operation_attr::max:
69  op = "max";
70  break;
71  case CReduceAxisToScalar::operation_attr::average:
72  op = "average";
73  break;
74  default:
75  ERROR("CScalarAlgorithmReduceAxis::CScalarAlgorithmReduceAxis(CScalar* scalarDestination, CAxis* axisSource, CReduceAxisToScalar* algo)",
76  << "Operation is wrongly defined. Supported operations: sum, min, max, average." << std::endl
77  << "Domain source " <<axisSource->getId() << std::endl
78  << "Scalar destination " << scalarDestination->getId());
79 
80  }
81 
83  ERROR("CScalarAlgorithmReduceAxis::CScalarAlgorithmReduceAxis(CAxis* axisDestination, CAxis* axisSource, CReduceAxisToScalar* algo)",
84  << "Operation '" << op << "' not found. Please make sure to use a supported one"
85  << "Axis source " <<axisSource->getId() << std::endl
86  << "Scalar destination " << scalarDestination->getId());
87 
89 }
90 CATCH
91 
92 void CScalarAlgorithmReduceAxis::apply(const std::vector<std::pair<int,double> >& localIndex, const double* dataInput, CArray<double,1>& dataOut,
93  std::vector<bool>& flagInitial, bool ignoreMissingValue, bool firstPass)
94 TRY
95 {
96  reduction_->apply(localIndex, dataInput, dataOut, flagInitial, ignoreMissingValue, firstPass);
97 }
98 CATCH
99 
100 void CScalarAlgorithmReduceAxis::updateData(CArray<double,1>& dataOut)
101 TRY
102 {
103  reduction_->updateData(dataOut);
104 }
105 CATCH
106 
108 TRY
109 {
110  if (0 != reduction_) delete reduction_;
111 }
112 CATCH
113 
114 void CScalarAlgorithmReduceAxis::computeIndexSourceMapping_(const std::vector<CArray<double,1>* >& dataAuxInputs)
115 TRY
116 {
117  this->transformationMapping_.resize(1);
118  this->transformationWeight_.resize(1);
119 
122 
123  int globalIndexSize = axisSrc_-> n_glo;
124 
125  for (int idx = 0; idx < globalIndexSize; ++idx)
126  {
127  transMap[0].push_back(idx);
128  transWeight[0].push_back(1.0);
129  }
130 }
131 CATCH
132 
133 }
std::unordered_map< int, std::vector< double > > TransformationWeightMap
Helper class to create different transformations.
static bool registerTransformation(ETranformationType transType, CreateTransformationCallBack createFn)
#define TRY
Definition: exception.hpp:154
std::vector< TransformationWeightMap > transformationWeight_
Weight corresponding of source to destination.
Parent class for all reduction.
std::vector< TransformationIndexMap > transformationMapping_
Map between global index of destination element and source element.
std::string StdString
Definition: xios_spl.hpp:48
#define xios(arg)
const StdString & getId(void) const
Accesseurs ///.
Definition: object.cpp:26
static std::map< StdString, EReductionType > ReductionOperations
Definition: reduction.hpp:25
CATCH CScalarAlgorithmReduceScalar::CScalarAlgorithmReduceScalar(CScalar *scalarDestination, CScalar *scalarSource, CReduceScalarToScalar *algo ERROR)("CScalarAlgorithmReduceScalar::CScalarAlgorithmReduceScalar(CScalar* scalarDestination, CScalar* scalarSource, CReduceScalarToScalar* algo)",<< "Operation must be defined."<< "Scalar source "<< scalarSource->getId()<< std::endl<< "Scalar destination "<< scalarDestination->getId())
virtual void updateData(CArray< double, 1 > &dataOut)
Update whole dataOut (on necessary).
static CReductionAlgorithm * createOperation(EReductionType reduceType)
Create an operation (sum, max, min) based on type.
Definition: reduction.cpp:33
This class defines the interface for all other inherited algorithms class.
static CGenericAlgorithmTransformation * create(CGrid *gridDst, CGrid *gridSrc, CTransformation< CScalar > *transformation, int elementPositionInGrid, std::map< int, int > &elementPositionInGridSrc2ScalarPosition, std::map< int, int > &elementPositionInGridSrc2AxisPosition, std::map< int, int > &elementPositionInGridSrc2DomainPosition, std::map< int, int > &elementPositionInGridDst2ScalarPosition, std::map< int, int > &elementPositionInGridDst2AxisPosition, std::map< int, int > &elementPositionInGridDst2DomainPosition)
virtual void apply(const std::vector< std::pair< int, double > > &localIndex, const double *dataInput, CArray< double, 1 > &dataOut, std::vector< bool > &flagInitial, bool ignoreMissingValue, bool firstPass)
Apply a operation on local data.
CATCH CAxisAlgorithmExtractDomain::CAxisAlgorithmExtractDomain(CAxis *axisDestination, CDomain *domainSource, CExtractDomainToAxis *algo) StdStrin op)
TransformationIndexMap & transMap
void computeIndexSourceMapping_(const std::vector< CArray< double, 1 > * > &dataAuxInputs)
std::unordered_map< int, std::vector< int > > TransformationIndexMap
TransformationWeightMap & transWeight
#define CATCH
Definition: exception.hpp:155
CScalarAlgorithmReduceAxis(CScalar *scalarDestination, CAxis *axisSource, CReduceAxisToScalar *algo)