Ignore:
Timestamp:
12/06/20 22:14:56 (4 years ago)
Author:
ymipsl
Message:

intermediate commit for new tranformation engine?
YM

File:
1 edited

Legend:

Unmodified
Added
Removed
  • XIOS/dev/dev_ym/XIOS_COUPLING/src/distribution/gatherer_connector.hpp

    r1930 r1984  
    2929       
    3030      template<typename T> 
    31       void transfer(int sizeT, map<int, CArray<T,1>>& dataIn, CArray<T,1>& dataOut) 
     31      void transfer(int repeat, int sizeT, map<int, CArray<T,1>>& dataIn, CArray<T,1>& dataOut) 
    3232      { 
    3333        // for future, make a specific transfer function for sizeT=1 to avoid multiplication (increasing performance) 
    34         dataOut.resize(dstSize_*sizeT) ;   
    35         T* output = dataOut.dataFirst() ; 
     34        size_t dstSlice = dstSize_*sizeT ; 
     35        dataOut.resize(repeat* dstSlice) ;   
     36         
    3637        for(auto& data : dataIn) 
    3738        { 
     39          T* output = dataOut.dataFirst() ; 
    3840          int rank=data.first ; 
    3941          auto input  = data.second.dataFirst() ; 
     
    4143          auto& mask=mask_[rank] ; 
    4244          int size=mask.size() ; 
    43  
    44           for(int i=0, j=0 ;i<size;i++) 
    45           { 
    46             if (mask[i])  
     45          size_t srcSlice = size * sizeT ; 
     46          for(int l=0; l<repeat; l++) 
     47          {    
     48            for(int i=0, j=0 ;i<size;i++) 
    4749            { 
    48               int cj = connector[j]*sizeT ; 
    49               int ci = i*sizeT ; 
    50               for (int k=0;k<sizeT;k++) output[cj+k] = input[ci+k] ; 
    51               j++ ; 
     50              if (mask[i])  
     51              { 
     52                int cj = connector[j]*sizeT ; 
     53                int ci = i*sizeT ; 
     54                for (int k=0;k<sizeT;k++) output[cj+k] = input[ci+k] ; 
     55                j++ ; 
     56              } 
    5257            } 
     58            input+=srcSlice ; 
     59            output+=dstSlice ; 
    5360          } 
    5461        } 
     62      } 
     63 
     64      template<typename T> 
     65      void transfer(int sizeT, map<int, CArray<T,1>>& dataIn, CArray<T,1>& dataOut) 
     66      { 
     67        transfer(1, 1, dataIn, dataOut) ; 
    5568      } 
    5669     
     
    101114      void transfer(map<int, CArray<T,1>>& dataIn, CArray<T,1>& dataOut, T missingValue) 
    102115      { 
    103         transfer(1, dataIn, dataout, missingValue) 
     116        transfer(1, 1, dataIn, dataout, missingValue) 
    104117      } 
    105118       
     
    107120      void transfer(int sizeT, map<int, CArray<T,1>>& dataIn, CArray<T,1>& dataOut, T missingValue) 
    108121      { 
    109         dataOut.resize(dstSize_*sizeT) ; 
     122         transfer(1, sizeT, dataIn, dataOut, missingValue) ; 
     123      } 
     124 
     125      template<typename T> 
     126      void transfer(int repeat , int sizeT, map<int, CArray<T,1>>& dataIn, CArray<T,1>& dataOut, T missingValue) 
     127      { 
     128        dataOut.resize(repeat*dstSize_*sizeT) ; 
    110129        dataOut=missingValue ; 
    111         transfer(sizeT, dataIn, dataOut) ; 
     130        transfer(1, sizeT, dataIn, dataOut) ; 
    112131      } 
    113132 
     
    121140          (*subEvent.buffer) >> data ; 
    122141        } 
    123         transfer(sizeT, dataIn, dataOut) ; 
     142        transfer(1, sizeT, dataIn, dataOut) ; 
    124143      } 
    125144       
     
    139158          (*subEvent.buffer) >> data ; 
    140159        } 
    141         transfer(sizeT, dataIn, dataOut, missingValue) ; 
     160        transfer(1, sizeT, dataIn, dataOut, missingValue) ; 
    142161      } 
    143162 
     
    151170          (*subEvent.buffer) >> data ; 
    152171        } 
    153         transfer(1, dataIn, dataOut, missingValue) ; 
     172        transfer(1, 1, dataIn, dataOut, missingValue) ; 
    154173      } 
    155174 
Note: See TracChangeset for help on using the changeset viewer.