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

intermediate commit for new tranformation engine?
YM

Location:
XIOS/dev/dev_ym/XIOS_COUPLING/src/distribution
Files:
4 added
3 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 
  • XIOS/dev/dev_ym/XIOS_COUPLING/src/distribution/grid_remote_connector.cpp

    r1938 r1984  
    8787    srcView_[nSrc-1]->getGlobalIndex(srcGlobalIndex, sliceIndex, srcSliceSize.data(), srcView_.data(), nSrc-1) ; 
    8888     
    89     CArray<size_t,1> srcGlobalIndexArray(srcGlobalIndex.data(), shape(srcGlobalIndex.size()),neverDeleteData) ; 
    90     dataRanks.computeIndexInfoMapping(srcGlobalIndexArray) ; 
     89    if (srcGlobalIndex.size()>0) 
     90    { 
     91      CArray<size_t,1> srcGlobalIndexArray(srcGlobalIndex.data(), shape(srcGlobalIndex.size()),neverDeleteData) ; 
     92      dataRanks.computeIndexInfoMapping(srcGlobalIndexArray) ; 
     93    } 
     94    else 
     95    { 
     96      CArray<size_t,1> srcGlobalIndexArray ; 
     97      dataRanks.computeIndexInfoMapping(srcGlobalIndexArray) ; 
     98    } 
    9199    const auto& returnInfo = dataRanks.getInfoIndexMap() ; 
    92100 
  • XIOS/dev/dev_ym/XIOS_COUPLING/src/distribution/scatterer_connector.hpp

    r1943 r1984  
    3838    void transfer(const CArray<T,n>& dataIn, map<int, CArray<T,1>>& dataOut) 
    3939    { 
    40       transfer(1, dataIn, dataOut) ; 
     40      transfer(1,1, dataIn, dataOut) ; 
    4141    } 
    4242 
     
    4444    void transfer(const CArray<T,n>& dataIn, map<int, CArray<T,1>>& dataOut, T missingValue) 
    4545    { 
    46       transfer(1, dataIn, dataOut, missingValue) ; 
     46      transfer(1, 1, dataIn, dataOut, missingValue) ; 
    4747    } 
    4848 
     
    5050    void transfer(int sizeT, const CArray<T,n>& dataIn, map<int, CArray<T,1>>& dataOut) 
    5151    { 
     52      transfer(1, sizeT, dataIn, dataOut) 
     53    } 
     54     
     55    template<typename T, int n> 
     56    void transfer(int repeat, int sizeT, const CArray<T,n>& dataIn, map<int, CArray<T,1>>& dataOut) 
     57    { 
    5258      // for future, make a specific transfer function for sizeT=1 to avoid multiplication (increasing performance) 
     59      size_t srcSlice = sizeT*srcSize_ ; 
    5360      for(auto& rankConnector : connector_) 
    5461      { 
     
    5865        int dstSize = mask.size() ; 
    5966        auto& data = dataOut[rank] ; 
    60         data.resize(dstSize * sizeT) ; 
     67        size_t dstSlice = dstSize*sizeT ; 
     68        data.resize(repeat*dstSlice) ; 
    6169        T* dstData = data.dataFirst() ; 
    6270        const T* srcData = dataIn.dataFirst() ; 
    63         for(int i=0, j=0; i<dstSize; i++) 
    64           if (mask[i])  
    65           { 
    66             for(int k=0;k<sizeT;k++) dstData[i*sizeT+k] = srcData[connector[j]*sizeT+k] ; 
    67             j++ ; 
    68           } 
    69       } 
    70     } 
    71  
    72     template<typename T, int n> 
    73     void transfer(int sizeT, const CArray<T,n>& dataIn, map<int, CArray<T,1>>& dataOut, T missingValue) 
     71        for(int l=0; l<repeat; l++) 
     72        { 
     73          for(int i=0, j=0; i<dstSize; i++) 
     74            if (mask[i])  
     75            { 
     76              for(int k=0;k<sizeT;k++) dstData[i*sizeT+k] = srcData[connector[j]*sizeT+k] ; 
     77              j++ ; 
     78            } 
     79          dstData+=dstSlice ; 
     80          srcData+=srcSlice ; 
     81        } 
     82      } 
     83    } 
     84 
     85    template<typename T, int n> 
     86    void transfer(int repeat, int sizeT, const CArray<T,n>& dataIn, map<int, CArray<T,1>>& dataOut, T missingValue) 
    7487    { 
    7588      // for future, make a specific transfer function for sizeT=1 to avoid multiplication (increasing performance) 
     89      size_t srcSlice = sizeT*srcSize_ ; 
    7690      for(auto& rankConnector : connector_) 
    7791      { 
     
    8195        int dstSize = mask.size() ; 
    8296        auto& data = dataOut[rank] ; 
    83         data.resize(dstSize * sizeT) ; 
     97        size_t dstSlice = dstSize*sizeT ; 
     98        data.resize(repeat * dstSlice) ; 
    8499        T* dstData = data.dataFirst() ; 
    85100        const T* srcData = dataIn.dataFirst() ; 
    86         for(int i=0, j=0; i<dstSize; i++) 
    87           if (mask[i])  
    88           { 
    89             for(int k=0;k<sizeT;k++) dstData[i*sizeT+k] = srcData[connector[j]*sizeT+k] ; 
    90             j++ ; 
    91           } 
    92           else  
    93           { 
    94             for(int k=0;k<sizeT;k++) dstData[i*sizeT+k] = missingValue ; 
    95             j++ ; 
    96           } 
     101        for(int l=0; l<repeat; l++) 
     102        { 
     103          for(int i=0, j=0; i<dstSize; i++) 
     104            if (mask[i])  
     105            { 
     106              for(int k=0;k<sizeT;k++) dstData[i*sizeT+k] = srcData[connector[j]*sizeT+k] ; 
     107              j++ ; 
     108            } 
     109            else  
     110            { 
     111              for(int k=0;k<sizeT;k++) dstData[i*sizeT+k] = missingValue ; 
     112              j++ ; 
     113            } 
     114          dstData+=dstSlice ; 
     115          srcData+=srcSlice ; 
     116        } 
    97117      } 
    98118    } 
     
    101121    void transfer(const CArray<T,n>& dataIn, CContextClient* client, CEventClient& event, const CMessage& messageHeader) 
    102122    { 
    103       transfer(1, dataIn, client, event, messageHeader) ; 
     123      transfer( 1, dataIn, client, event, messageHeader) ; 
    104124    } 
    105125 
     
    107127    void transfer(const CArray<T,n>& dataIn, T missingValue, CContextClient* client, CEventClient& event, const CMessage& messageHeader) 
    108128    { 
    109       transfer(1, dataIn, missingValue, client, event, messageHeader) ; 
     129      transfer( 1, dataIn, missingValue, client, event, messageHeader) ; 
    110130    } 
    111131 
     
    114134    { 
    115135      map<int, CArray<T,1>> dataOut ; 
    116       transfer(sizeT, dataIn, dataOut) ; 
     136      transfer(1, sizeT, dataIn, dataOut) ; 
    117137      sendToServer(dataOut, client, event, messageHeader) ; 
    118138    } 
     
    122142    { 
    123143      map<int, CArray<T,1>> dataOut ; 
    124       transfer(sizeT, dataIn, dataOut, missingValue) ; 
     144      transfer(1, sizeT, dataIn, dataOut, missingValue) ; 
    125145      sendToServer(dataOut, client, event, messageHeader) ; 
    126146    } 
Note: See TracChangeset for help on using the changeset viewer.