Ignore:
Timestamp:
01/16/18 23:53:00 (6 years ago)
Author:
ymipsl
Message:

Fix bug in transformation when using mask and overlapped grid element (axis or domain).

YM

File:
1 edited

Legend:

Unmodified
Added
Removed
  • XIOS/dev/XIOS_DEV_CMIP6/src/transformation/axis_algorithm_transformation.cpp

    r1275 r1403  
    7474  size_t globalIndex; 
    7575  int nIndexSize = 0; 
    76   if (2 == elementType) nIndexSize = domainSrc_->i_index.numElements(); 
    77   else if (1 == elementType) nIndexSize = axisSrc_->index.numElements(); 
    78   else nIndexSize=1  ; //  scalar 
     76  CArray<bool,1>* ptLocalMask ; 
     77  CArray<bool,1> scalarMask(1) ; 
     78  scalarMask=true ; 
     79   
     80  if (2 == elementType)  
     81  { 
     82    nIndexSize = domainSrc_->i_index.numElements(); 
     83    ptLocalMask=&(domainSrc_->localMask) ; 
     84  } 
     85  else if (1 == elementType) 
     86  { 
     87     nIndexSize = axisSrc_->index.numElements(); 
     88     ptLocalMask=&(axisSrc_->mask) ; 
     89  } 
     90  else 
     91  { 
     92     nIndexSize=1  ; //  scalar 
     93     ptLocalMask=&scalarMask ; 
     94  } 
     95  CArray<bool,1>& localMask=*ptLocalMask ; 
    7996   
    8097  CClientClientDHTInt::Index2VectorInfoTypeMap globalIndex2ProcRank; 
     
    8299  for (int idx = 0; idx < nIndexSize; ++idx) 
    83100  { 
    84     if (2 == elementType) // domain 
     101    if (localMask(idx)) 
    85102    { 
    86       globalIndex = domainSrc_->i_index(idx) + domainSrc_->j_index(idx) * domainSrc_->ni_glo; 
     103      if (2 == elementType) // domain 
     104      { 
     105       globalIndex = domainSrc_->i_index(idx) + domainSrc_->j_index(idx) * domainSrc_->ni_glo; 
     106      } 
     107      else if (1 == elementType) // axis 
     108      { 
     109        globalIndex = axisSrc_->index(idx); 
     110      } 
     111      else // scalar 
     112      { 
     113        globalIndex = 0; 
     114      } 
     115      
     116      globalIndex2ProcRank[globalIndex].resize(1); 
     117      globalIndex2ProcRank[globalIndex][0] = clientRank; 
    87118    } 
    88     else if (1 == elementType) // axis 
    89     { 
    90       globalIndex = axisSrc_->index(idx); 
    91     } 
    92     else // scalar 
    93     { 
    94       globalIndex = 0; 
    95     } 
    96  
    97     globalIndex2ProcRank[globalIndex].resize(1); 
    98     globalIndex2ProcRank[globalIndex][0] = clientRank; 
    99119  } 
    100120 
Note: See TracChangeset for help on using the changeset viewer.