#include "algorithm_transformation_transfer.hpp" #include "array_new.hpp" #include "local_view.hpp" #include "transform_connector.hpp" #include "context.hpp" namespace xios { void CAlgorithmTransformationTransfer::computeAlgorithm(shared_ptr srcView, shared_ptr dstView) { this->computeRecvElement(srcView, dstView) ; transferTransformConnector_ = make_shared( recvElement_->getView(CElementView::FULL), dstView, transformationMapping_) ; } void CAlgorithmTransformationTransfer::apply(int dimBefore, int dimAfter, const CArray& dataIn, CArray& dataOut) { transferTransformConnector_ -> transfer(dimBefore, dimAfter, dataIn, dataOut) ; } void CAlgorithmTransformationTransfer::computeRecvElement(shared_ptr srcView, shared_ptr dstView) { set srcIndex ; for(auto& it : transformationMapping_) srcIndex.insert(it.second) ; 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() ; } }