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/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.