- Timestamp:
- 12/06/20 22:14:56 (4 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
XIOS/dev/dev_ym/XIOS_COUPLING/src/distribution/gatherer_connector.hpp
r1930 r1984 29 29 30 30 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) 32 32 { 33 33 // 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 36 37 for(auto& data : dataIn) 37 38 { 39 T* output = dataOut.dataFirst() ; 38 40 int rank=data.first ; 39 41 auto input = data.second.dataFirst() ; … … 41 43 auto& mask=mask_[rank] ; 42 44 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++) 47 49 { 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 } 52 57 } 58 input+=srcSlice ; 59 output+=dstSlice ; 53 60 } 54 61 } 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) ; 55 68 } 56 69 … … 101 114 void transfer(map<int, CArray<T,1>>& dataIn, CArray<T,1>& dataOut, T missingValue) 102 115 { 103 transfer(1, dataIn, dataout, missingValue)116 transfer(1, 1, dataIn, dataout, missingValue) 104 117 } 105 118 … … 107 120 void transfer(int sizeT, map<int, CArray<T,1>>& dataIn, CArray<T,1>& dataOut, T missingValue) 108 121 { 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) ; 110 129 dataOut=missingValue ; 111 transfer( sizeT, dataIn, dataOut) ;130 transfer(1, sizeT, dataIn, dataOut) ; 112 131 } 113 132 … … 121 140 (*subEvent.buffer) >> data ; 122 141 } 123 transfer( sizeT, dataIn, dataOut) ;142 transfer(1, sizeT, dataIn, dataOut) ; 124 143 } 125 144 … … 139 158 (*subEvent.buffer) >> data ; 140 159 } 141 transfer( sizeT, dataIn, dataOut, missingValue) ;160 transfer(1, sizeT, dataIn, dataOut, missingValue) ; 142 161 } 143 162 … … 151 170 (*subEvent.buffer) >> data ; 152 171 } 153 transfer(1, dataIn, dataOut, missingValue) ;172 transfer(1, 1, dataIn, dataOut, missingValue) ; 154 173 } 155 174
Note: See TracChangeset
for help on using the changeset viewer.