#include "algorithm_transformation_reduce.hpp" #include "context.hpp" namespace xios { void CAlgorithmTransformationReduce::computeAlgorithm(shared_ptr srcView, shared_ptr dstView) { this->computeRecvElement(srcView, dstView) ; reduceTransformConnector_ = make_shared(recvElement_->getView(CElementView::FULL), dstView, operator_, transformationMapping_, detectMissingValue_) ; } void CAlgorithmTransformationReduce::apply(int dimBefore, int dimAfter, const CArray& dataIn, CArray& dataOut) { reduceTransformConnector_ -> transfer(dimBefore, dimAfter, dataIn, dataOut) ; } void CAlgorithmTransformationReduce::computeRecvElement(shared_ptr srcView, shared_ptr dstView) { auto& srcMap = transformationMapping_ ; set srcIndex ; for(auto& it : srcMap) for(size_t index : it.second) srcIndex.insert(index) ; CArray srcArrayIndex(srcIndex.size()) ; int i=0 ; for(size_t index : srcIndex) { srcArrayIndex(i) = index ; i++ ;} recvElement_ = make_shared(CContext::getCurrent()->getIntraCommRank(), srcView->getGlobalSize(), srcArrayIndex) ; recvElement_->addFullView() ; } }