#include "grid_local_connector.hpp" #include "grid_elements.hpp" #include "element.hpp" #include "grid_local_view.hpp" #include "local_view.hpp" namespace xios { CGridLocalConnector::CGridLocalConnector(const std::vector>& elementsConnector) : elementsConnector_(elementsConnector) { srcSize_=1 ; for(auto connector : elementsConnector_) srcSize_*=connector->getSrcSize() ; dstSize_=1 ; for(auto connector : elementsConnector_) dstSize_*=connector->getDstSize() ; } CGridLocalConnector::CGridLocalConnector(shared_ptr parent, CElementView::type srcType, CElementView::type dstType, bool withMask) { shared_ptr srcView=parent->getView(srcType) ; shared_ptr dstView=parent->getView(dstType) ; vector> srcViews = srcView->getViews() ; vector> dstViews = dstView->getViews() ; vector>& elements = parent->getElements(); for(auto element : elements) elementsConnector_.push_back(element->getConnector(srcType, dstType)) ; srcSize_=1 ; for(auto connector : elementsConnector_) srcSize_*=connector->getSrcSize() ; dstSize_=1 ; for(auto connector : elementsConnector_) dstSize_*=connector->getDstSize() ; if (parent->hasLocalMask() && withMask) { vector> elementsConnector ; for(auto element : elements) elementsConnector.push_back(element->getConnector(CElementView::FULL, dstType)) ; auto localToDst=make_shared(elementsConnector) ; CArray maskIn(localToDst->getSrcSize()) ; CArray maskOut1(localToDst->getDstSize()) ; CArray maskOut2(localToDst->getDstSize()) ; maskIn=true ; localToDst->transfer(maskIn,maskOut1,false) ; auto& localMask = parent->getLocalMask() ; for(int i=0 ; i < maskIn.numElements() ; i++) maskIn(i)=localMask[i] ; localToDst->transfer(maskIn,maskOut2,false) ; mask_.assign(dstSize_,true) ; for(int i=0;i