- Timestamp:
- 09/10/20 13:51:02 (4 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
XIOS/dev/dev_ym/XIOS_COUPLING/src/distribution/gatherer_connector.hpp
r1918 r1930 29 29 30 30 template<typename T> 31 void transfer( map<int, CArray<T,1>>& dataIn, CArray<T,1>& dataOut)31 void transfer(int sizeT, map<int, CArray<T,1>>& dataIn, CArray<T,1>& dataOut) 32 32 { 33 dataOut.resize(dstSize_) ; 33 // for future, make a specific transfer function for sizeT=1 to avoid multiplication (increasing performance) 34 dataOut.resize(dstSize_*sizeT) ; 34 35 T* output = dataOut.dataFirst() ; 35 36 for(auto& data : dataIn) … … 39 40 auto& connector=connector_[rank] ; 40 41 auto& mask=mask_[rank] ; 41 int size= data.second.numElements() ;42 int size=mask.size() ; 42 43 43 44 for(int i=0, j=0 ;i<size;i++) … … 45 46 if (mask[i]) 46 47 { 47 output[connector[j]] = input[i] ; 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] ; 48 51 j++ ; 49 52 } … … 52 55 } 53 56 57 template<typename T> 58 void transfer(map<int, CArray<T,1>>& dataIn, CArray<T,1>& dataOut) 59 { 60 transfer(1,dataIn,dataOut) ; 61 } 54 62 55 63 template<typename T> … … 93 101 void transfer(map<int, CArray<T,1>>& dataIn, CArray<T,1>& dataOut, T missingValue) 94 102 { 95 dataOut.resize(dstSize_) ; 96 dataOut=missingValue ; 97 transfer(map<int, CArray<T,1>>& dataIn, CArray<T,1>& dataOut) ; 103 transfer(1, dataIn, dataout, missingValue) 98 104 } 99 105 100 106 template<typename T> 101 void transfer(CEventServer& event, CArray<T,1>& dataOut) 107 void transfer(int sizeT, map<int, CArray<T,1>>& dataIn, CArray<T,1>& dataOut, T missingValue) 108 { 109 dataOut.resize(dstSize_*sizeT) ; 110 dataOut=missingValue ; 111 transfer(sizeT, dataIn, dataOut) ; 112 } 113 114 template<typename T> 115 void transfer(CEventServer& event, int sizeT, CArray<T,1>& dataOut) 102 116 { 103 117 map<int, CArray<T,1>> dataIn ; … … 107 121 (*subEvent.buffer) >> data ; 108 122 } 109 transfer(dataIn, dataOut) ; 123 transfer(sizeT, dataIn, dataOut) ; 124 } 125 126 template<typename T> 127 void transfer(CEventServer& event, CArray<T,1>& dataOut) 128 { 129 transfer(event, 1, dataOut) ; 130 } 131 132 template<typename T> 133 void transfer(CEventServer& event, int sizeT, CArray<T,1>& dataOut, T missingValue) 134 { 135 map<int, CArray<T,1>> dataIn ; 136 for (auto& subEvent : event.subEvents) 137 { 138 auto& data = dataIn[subEvent.rank]; 139 (*subEvent.buffer) >> data ; 140 } 141 transfer(sizeT, dataIn, dataOut, missingValue) ; 110 142 } 111 143 … … 119 151 (*subEvent.buffer) >> data ; 120 152 } 121 transfer( dataIn, dataOut, missingValue) ;153 transfer(1, dataIn, dataOut, missingValue) ; 122 154 } 123 155
Note: See TracChangeset
for help on using the changeset viewer.