- 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/scatterer_connector.hpp
r1918 r1930 34 34 void computeConnector(void) ; 35 35 36 template<typename T >37 void transfer(const CArray<T, 1>& dataIn, map<int, CArray<T,1>>& dataOut)36 template<typename T, int n> 37 void transfer(const CArray<T,n>& dataIn, map<int, CArray<T,1>>& dataOut) 38 38 { 39 transfer(1, dataIn, dataOut) ; 40 } 41 42 template<typename T, int n> 43 void transfer(const CArray<T,n>& dataIn, map<int, CArray<T,1>>& dataOut, T missingValue) 44 { 45 transfer(1, dataIn, dataOut, missingValue) ; 46 } 47 48 template<typename T, int n> 49 void transfer(int sizeT, const CArray<T,n>& dataIn, map<int, CArray<T,1>>& dataOut) 50 { 51 // for future, make a specific transfer function for sizeT=1 to avoid multiplication (increasing performance) 39 52 for(auto& rankConnector : connector_) 40 53 { … … 44 57 int dstSize = mask.size() ; 45 58 auto& data = dataOut[rank] ; 46 data.resize(dstSize ) ;59 data.resize(dstSize * sizeT) ; 47 60 T* dstData = data.dataFirst() ; 48 61 const T* srcData = dataIn.dataFirst() ; … … 50 63 if (mask[i]) 51 64 { 52 dstData[i] = srcData[connector[j]] ; 65 for(int k=0;k<sizeT;k++) dstData[i*sizeT+k] = srcData[connector[j]*sizeT+k] ; 66 j++ ; 67 } 68 } 69 } 70 71 template<typename T, int n> 72 void transfer(int sizeT, const CArray<T,n>& dataIn, map<int, CArray<T,1>>& dataOut, T missingValue) 73 { 74 // for future, make a specific transfer function for sizeT=1 to avoid multiplication (increasing performance) 75 for(auto& rankConnector : connector_) 76 { 77 int rank = rankConnector.first ; 78 auto& connector = rankConnector.second ; 79 auto& mask = mask_[rank] ; 80 int dstSize = mask.size() ; 81 auto& data = dataOut[rank] ; 82 data.resize(dstSize * sizeT) ; 83 T* dstData = data.dataFirst() ; 84 const T* srcData = dataIn.dataFirst() ; 85 for(int i=0, j=0; i<dstSize; i++) 86 if (mask[i]) 87 { 88 for(int k=0;k<sizeT;k++) dstData[i*sizeT+k] = srcData[connector[j]*sizeT+k] ; 89 j++ ; 90 } 91 else 92 { 93 for(int k=0;k<sizeT;k++) dstData[i*sizeT+k] = missingValue ; 53 94 j++ ; 54 95 } … … 56 97 } 57 98 58 template<typename T> 59 void transfer(const CArray<T,1>& dataIn, CContextClient* client, CEventClient& event, const CMessage& messageHeader) 99 template<typename T,int n> 100 void transfer(const CArray<T,n>& dataIn, CContextClient* client, CEventClient& event, const CMessage& messageHeader) 101 { 102 transfer(1, dataIn, client, event, messageHeader) ; 103 } 104 105 template<typename T,int n> 106 void transfer(const CArray<T,n>& dataIn, T missingValue, CContextClient* client, CEventClient& event, const CMessage& messageHeader) 107 { 108 transfer(1, dataIn, missingValue, client, event, messageHeader) ; 109 } 110 111 template<typename T, int n> 112 void transfer(int sizeT, const CArray<T,n>& dataIn, CContextClient* client, CEventClient& event, const CMessage& messageHeader) 60 113 { 61 114 map<int, CArray<T,1>> dataOut ; 62 transfer(dataIn, dataOut) ; 115 transfer(sizeT, dataIn, dataOut) ; 116 sendToServer(dataOut, client, event, messageHeader) ; 117 } 118 119 template<typename T, int n> 120 void transfer(int sizeT, const CArray<T,n>& dataIn, T missingValue, CContextClient* client, CEventClient& event, const CMessage& messageHeader) 121 { 122 map<int, CArray<T,1>> dataOut ; 123 transfer(sizeT, dataIn, dataOut, missingValue) ; 63 124 sendToServer(dataOut, client, event, messageHeader) ; 64 125 }
Note: See TracChangeset
for help on using the changeset viewer.