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)
31 std::vector<CScalar*> scalarListDestP = gridDst->getScalars();
32 std::vector<CAxis*> axisListSrcP = gridSrc->getAxis();
35 int scalarDstIndex = elementPositionInGridDst2ScalarPosition[elementPositionInGrid];
36 int axisSrcIndex = elementPositionInGridSrc2AxisPosition[elementPositionInGrid];
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());
60 switch (algo->operation)
62 case CReduceAxisToScalar::operation_attr::sum:
65 case CReduceAxisToScalar::operation_attr::min:
68 case CReduceAxisToScalar::operation_attr::max:
71 case CReduceAxisToScalar::operation_attr::average:
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());
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());
93 std::vector<bool>& flagInitial,
bool ignoreMissingValue,
bool firstPass)
96 reduction_->apply(localIndex, dataInput, dataOut, flagInitial, ignoreMissingValue, firstPass);
123 int globalIndexSize =
axisSrc_-> n_glo;
125 for (
int idx = 0; idx < globalIndexSize; ++idx)
127 transMap[0].push_back(idx);
128 transWeight[0].push_back(1.0);
Parent class for all reduction.
const StdString & getId(void) const
Accesseurs ///.
static std::map< StdString, EReductionType > ReductionOperations
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.
Reducing an axis to a scalar.
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 ~CScalarAlgorithmReduceAxis()
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)
CReductionAlgorithm * reduction_
TransformationWeightMap & transWeight
CScalarAlgorithmReduceAxis(CScalar *scalarDestination, CAxis *axisSource, CReduceAxisToScalar *algo)
static bool registerTrans()