source: XIOS/dev/dev_ym/XIOS_COUPLING/src/distribution/grid_local_connector.cpp @ 2338

Last change on this file since 2338 was 2267, checked in by ymipsl, 3 years ago

tracking memory leak
Elements, views, and connectors are now managed with shared pointer.
YM

  • Property svn:eol-style set to native
  • Property svn:executable set to *
File size: 2.2 KB
Line 
1#include "grid_local_connector.hpp"
2#include "grid_elements.hpp"
3#include "element.hpp"
4#include "grid_local_view.hpp"
5#include "local_view.hpp"
6
7namespace xios
8{
9 
10  CGridLocalConnector::CGridLocalConnector(const std::vector<shared_ptr<CLocalConnector>>& elementsConnector) : elementsConnector_(elementsConnector)
11  {
12    srcSize_=1 ;
13    for(auto connector : elementsConnector_) srcSize_*=connector->getSrcSize() ;
14    dstSize_=1 ;
15    for(auto connector : elementsConnector_) dstSize_*=connector->getDstSize() ;
16  } 
17
18  CGridLocalConnector::CGridLocalConnector(shared_ptr<CGridLocalElements> parent, CElementView::type srcType, CElementView::type dstType, bool withMask)
19  {
20    shared_ptr<CGridLocalView> srcView=parent->getView(srcType) ;
21    shared_ptr<CGridLocalView> dstView=parent->getView(dstType) ;
22
23    vector<shared_ptr<CLocalView>> srcViews = srcView->getViews() ; 
24    vector<shared_ptr<CLocalView>> dstViews = dstView->getViews() ;
25   
26    vector<shared_ptr<CLocalElement>>& elements = parent->getElements();
27    for(auto element : elements) elementsConnector_.push_back(element->getConnector(srcType, dstType)) ;
28    srcSize_=1 ;
29    for(auto connector : elementsConnector_) srcSize_*=connector->getSrcSize() ;
30    dstSize_=1 ;
31    for(auto connector : elementsConnector_) dstSize_*=connector->getDstSize() ;
32
33    if (parent->hasLocalMask() && withMask)
34    {
35      vector<shared_ptr<CLocalConnector>> elementsConnector ;
36      for(auto element : elements) elementsConnector.push_back(element->getConnector(CElementView::FULL, dstType)) ;
37      auto localToDst=make_shared<CGridLocalConnector>(elementsConnector) ;
38      CArray<bool,1> maskIn(localToDst->getSrcSize()) ;
39      CArray<bool,1> maskOut1(localToDst->getDstSize()) ;
40      CArray<bool,1> maskOut2(localToDst->getDstSize()) ;
41      maskIn=true ;
42      localToDst->transfer(maskIn,maskOut1,false) ;
43      auto& localMask = parent->getLocalMask() ;
44      for(int i=0 ; i < maskIn.numElements() ; i++) maskIn(i)=localMask[i] ;
45      localToDst->transfer(maskIn,maskOut2,false) ;
46      mask_.assign(dstSize_,true) ;
47      for(int i=0;i<dstSize_;i++) if (maskOut1(i)==true && maskOut2(i)==false) mask_[i]=false ;
48    } 
49  }
50
51  void CGridLocalConnector::computeMask(void)
52  {
53
54
55  }
56
57}
Note: See TracBrowser for help on using the repository browser.