/*! \file axis_algorithm_temporal_splitting.cpp \brief Algorithm to split scalar into axis by temporal accumulation */ #include "axis_algorithm_temporal_splitting.hpp" #include "temporal_splitting.hpp" #include "axis.hpp" #include "scalar.hpp" #include "grid.hpp" #include "grid_transformation_factory_impl.hpp" namespace xios { CGenericAlgorithmTransformation* CAxisAlgorithmTemporalSplitting::create(CGrid* gridDst, CGrid* gridSrc, CTransformation* transformation, int elementPositionInGrid, std::map& elementPositionInGridSrc2ScalarPosition, std::map& elementPositionInGridSrc2AxisPosition, std::map& elementPositionInGridSrc2DomainPosition, std::map& elementPositionInGridDst2ScalarPosition, std::map& elementPositionInGridDst2AxisPosition, std::map& elementPositionInGridDst2DomainPosition) TRY { std::vector axisListDestP = gridDst->getAxis(); std::vector scalarListSrcP = gridSrc->getScalars(); CTemporalSplitting* temporalSplitting = dynamic_cast (transformation); int axisDstIndex = elementPositionInGridDst2AxisPosition[elementPositionInGrid]; int scalarSrcIndex = elementPositionInGridSrc2ScalarPosition[elementPositionInGrid]; return (new CAxisAlgorithmTemporalSplitting(axisListDestP[axisDstIndex], scalarListSrcP[scalarSrcIndex], temporalSplitting)); } CATCH bool CAxisAlgorithmTemporalSplitting::registerTrans() TRY { CGridTransformationFactory::registerTransformation(TRANS_TEMPORAL_SPLITTING, create); } CATCH CAxisAlgorithmTemporalSplitting::CAxisAlgorithmTemporalSplitting(CAxis* axisDestination, CScalar* scalarSource, CTemporalSplitting* algo) : CAxisAlgorithmTransformation(axisDestination, scalarSource) { } CAxisAlgorithmTemporalSplitting::~CAxisAlgorithmTemporalSplitting() { } void CAxisAlgorithmTemporalSplitting::computeIndexSourceMapping_(const std::vector* >& dataAuxInputs) TRY { this->transformationMapping_.resize(1); this->transformationWeight_.resize(1); TransformationIndexMap& transMap = this->transformationMapping_[0]; TransformationWeightMap& transWeight = this->transformationWeight_[0]; CArray& axisDstIndex = axisDest_->index; int nbAxisIdx = axisDstIndex.numElements(); for (int idxAxis = 0; idxAxis < nbAxisIdx; ++idxAxis) { int globalAxisIdx = axisDstIndex(idxAxis); if (idxAxis==0) { transMap[globalAxisIdx].resize(1); transWeight[globalAxisIdx].resize(1); transMap[globalAxisIdx][0] = 0 ; transWeight[globalAxisIdx][0] = 1.0 ; } } } CATCH }