- 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/scatterer_connector.hpp
r1943 r1984 38 38 void transfer(const CArray<T,n>& dataIn, map<int, CArray<T,1>>& dataOut) 39 39 { 40 transfer(1, dataIn, dataOut) ;40 transfer(1,1, dataIn, dataOut) ; 41 41 } 42 42 … … 44 44 void transfer(const CArray<T,n>& dataIn, map<int, CArray<T,1>>& dataOut, T missingValue) 45 45 { 46 transfer(1, dataIn, dataOut, missingValue) ;46 transfer(1, 1, dataIn, dataOut, missingValue) ; 47 47 } 48 48 … … 50 50 void transfer(int sizeT, const CArray<T,n>& dataIn, map<int, CArray<T,1>>& dataOut) 51 51 { 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 { 52 58 // for future, make a specific transfer function for sizeT=1 to avoid multiplication (increasing performance) 59 size_t srcSlice = sizeT*srcSize_ ; 53 60 for(auto& rankConnector : connector_) 54 61 { … … 58 65 int dstSize = mask.size() ; 59 66 auto& data = dataOut[rank] ; 60 data.resize(dstSize * sizeT) ; 67 size_t dstSlice = dstSize*sizeT ; 68 data.resize(repeat*dstSlice) ; 61 69 T* dstData = data.dataFirst() ; 62 70 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) 74 87 { 75 88 // for future, make a specific transfer function for sizeT=1 to avoid multiplication (increasing performance) 89 size_t srcSlice = sizeT*srcSize_ ; 76 90 for(auto& rankConnector : connector_) 77 91 { … … 81 95 int dstSize = mask.size() ; 82 96 auto& data = dataOut[rank] ; 83 data.resize(dstSize * sizeT) ; 97 size_t dstSlice = dstSize*sizeT ; 98 data.resize(repeat * dstSlice) ; 84 99 T* dstData = data.dataFirst() ; 85 100 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 } 97 117 } 98 118 } … … 101 121 void transfer(const CArray<T,n>& dataIn, CContextClient* client, CEventClient& event, const CMessage& messageHeader) 102 122 { 103 transfer( 1, dataIn, client, event, messageHeader) ;123 transfer( 1, dataIn, client, event, messageHeader) ; 104 124 } 105 125 … … 107 127 void transfer(const CArray<T,n>& dataIn, T missingValue, CContextClient* client, CEventClient& event, const CMessage& messageHeader) 108 128 { 109 transfer( 1, dataIn, missingValue, client, event, messageHeader) ;129 transfer( 1, dataIn, missingValue, client, event, messageHeader) ; 110 130 } 111 131 … … 114 134 { 115 135 map<int, CArray<T,1>> dataOut ; 116 transfer( sizeT, dataIn, dataOut) ;136 transfer(1, sizeT, dataIn, dataOut) ; 117 137 sendToServer(dataOut, client, event, messageHeader) ; 118 138 } … … 122 142 { 123 143 map<int, CArray<T,1>> dataOut ; 124 transfer( sizeT, dataIn, dataOut, missingValue) ;144 transfer(1, sizeT, dataIn, dataOut, missingValue) ; 125 145 sendToServer(dataOut, client, event, messageHeader) ; 126 146 }
Note: See TracChangeset
for help on using the changeset viewer.