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

Last change on this file since 2230 was 1960, checked in by ymipsl, 4 years ago

Bug fix when using grid masking. Grid local connector apply systematicalling grid masking need for data coming from model.
Add a flag to chose using masking or not.

YM

  • Property svn:eol-style set to native
  • Property svn:executable set to *
File size: 2.1 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<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(CGridLocalElements* parent, CElementView::type srcType, CElementView::type dstType, bool withMask)
19  {
20    CGridLocalView* srcView=parent->getView(srcType) ;
21    CGridLocalView* dstView=parent->getView(dstType) ;
22
23    vector<CLocalView*> srcViews = srcView->getViews() ; 
24    vector<CLocalView*> dstViews = dstView->getViews() ;
25   
26    vector<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<CLocalConnector*> elementsConnector ;
36      for(auto element : elements) elementsConnector.push_back(element->getConnector(CElementView::FULL, dstType)) ;
37      CGridLocalConnector localToDst(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.