Changeset 913 for XIOS


Ignore:
Timestamp:
08/03/16 15:49:11 (8 years ago)
Author:
mhnguyen
Message:

Adding the mask checking for dynamic vertical interpolation

+) Only use the non-masked of domain on which interpolating field is.

Test
+) On local
+) Ok, missing value on masked points

File:
1 edited

Legend:

Unmodified
Added
Removed
  • XIOS/trunk/src/transformation/axis_algorithm_interpolate.cpp

    r912 r913  
    272272    CDomain* dom = domListP[0]; 
    273273    size_t vecAxisValueSize = dom->i_index.numElements(); 
     274    size_t vecAxisValueSizeWithMask = 0; 
     275    for (size_t idx = 0; idx < vecAxisValueSize; ++idx) 
     276    { 
     277      if (dom->mask_1d(idx)) ++vecAxisValueSizeWithMask; 
     278    } 
     279 
    274280    int niGlobDom = dom->ni_glo.getValue(); 
    275     vecAxisValue.resize(vecAxisValueSize); 
     281    vecAxisValue.resize(vecAxisValueSizeWithMask); 
    276282    if (transPosition_.empty()) 
    277283    { 
    278       transPosition_.resize(vecAxisValueSize); 
     284      size_t indexMask = 0; 
     285      transPosition_.resize(vecAxisValueSizeWithMask); 
    279286      for (size_t idx = 0; idx < vecAxisValueSize; ++idx) 
    280287      { 
    281         transPosition_[idx].resize(1); 
    282         transPosition_[idx][0] = (dom->i_index)(idx) + niGlobDom * (dom->j_index)(idx); 
    283       } 
    284     } 
    285     this->transformationMapping_.resize(vecAxisValueSize); 
    286     this->transformationWeight_.resize(vecAxisValueSize); 
    287     this->transformationPosition_.resize(vecAxisValueSize); 
     288        if (dom->mask_1d(idx)) 
     289        { 
     290          transPosition_[indexMask].resize(1); 
     291          transPosition_[indexMask][0] = (dom->i_index)(idx) + niGlobDom * (dom->j_index)(idx); 
     292          ++indexMask; 
     293        } 
     294 
     295      } 
     296    } 
     297    this->transformationMapping_.resize(vecAxisValueSizeWithMask); 
     298    this->transformationWeight_.resize(vecAxisValueSizeWithMask); 
     299    this->transformationPosition_.resize(vecAxisValueSizeWithMask); 
    288300 
    289301    const CDistributionClient::GlobalLocalDataMap& globalLocalIndexSendToServer = grid->getDistributionClient()->getGlobalLocalDataSendToServer(); 
     
    292304    std::vector<int> globalDimension = grid->getGlobalDimension(); 
    293305 
     306    size_t indexMask = 0; 
    294307    for (size_t idx = 0; idx < vecAxisValueSize; ++idx) 
    295308    { 
    296       size_t axisValueSize = 0; 
    297       for (size_t jdx = 0; jdx < axisSrcSize; ++jdx) 
    298       { 
    299         size_t globalIndex = ((dom->i_index)(idx) + (dom->j_index)(idx)*globalDimension[0]) + (axisSrc_->index)(jdx)*globalDimension[0]*globalDimension[1]; 
    300         if (iteIndex != globalLocalIndexSendToServer.find(globalIndex)) 
    301         { 
    302           ++axisValueSize; 
    303         } 
    304       } 
    305  
    306       vecAxisValue[idx].resize(axisValueSize); 
    307       axisValueSize = 0; 
    308       for (size_t jdx = 0; jdx < axisSrcSize; ++jdx) 
    309       { 
    310         size_t globalIndex = ((dom->i_index)(idx) + (dom->j_index)(idx)*globalDimension[0]) + (axisSrc_->index)(jdx)*globalDimension[0]*globalDimension[1]; 
    311         itIndex = globalLocalIndexSendToServer.find(globalIndex); 
    312         if (iteIndex != itIndex) 
    313         { 
    314           vecAxisValue[idx](axisValueSize) = (*dataAuxInputs[0])(itIndex->second); 
    315           ++axisValueSize; 
    316         } 
    317       } 
    318     } 
    319   } 
    320 } 
    321  
    322 } 
     309      if (dom->mask_1d(idx)) 
     310      { 
     311        size_t axisValueSize = 0; 
     312        for (size_t jdx = 0; jdx < axisSrcSize; ++jdx) 
     313        { 
     314          size_t globalIndex = ((dom->i_index)(idx) + (dom->j_index)(idx)*globalDimension[0]) + (axisSrc_->index)(jdx)*globalDimension[0]*globalDimension[1]; 
     315          if (iteIndex != globalLocalIndexSendToServer.find(globalIndex)) 
     316          { 
     317            ++axisValueSize; 
     318          } 
     319        } 
     320 
     321        vecAxisValue[indexMask].resize(axisValueSize); 
     322        axisValueSize = 0; 
     323        for (size_t jdx = 0; jdx < axisSrcSize; ++jdx) 
     324        { 
     325          size_t globalIndex = ((dom->i_index)(idx) + (dom->j_index)(idx)*globalDimension[0]) + (axisSrc_->index)(jdx)*globalDimension[0]*globalDimension[1]; 
     326          itIndex = globalLocalIndexSendToServer.find(globalIndex); 
     327          if (iteIndex != itIndex) 
     328          { 
     329            vecAxisValue[indexMask](axisValueSize) = (*dataAuxInputs[0])(itIndex->second); 
     330            ++axisValueSize; 
     331          } 
     332        } 
     333        ++indexMask; 
     334      } 
     335    } 
     336  } 
     337} 
     338 
     339} 
Note: See TracChangeset for help on using the changeset viewer.