- Timestamp:
- 06/06/17 17:58:16 (7 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
XIOS/dev/dev_olga/src/transformation/Functions/sum_reduction.cpp
r979 r1158 3 3 \author Ha NGUYEN 4 4 \since 27 June 2016 5 \date 27 June 20165 \date 9 Jan 2017 6 6 7 7 \brief sum reduction 8 8 */ 9 9 #include "sum_reduction.hpp" 10 #include "utils.hpp" 10 11 11 12 namespace xios { … … 29 30 const double* dataInput, 30 31 CArray<double,1>& dataOut, 31 std::vector<bool>& flagInitial) 32 std::vector<bool>& flagInitial, 33 bool ignoreMissingValue) 32 34 { 33 int nbLocalIndex = localIndex.size(); 34 int currentlocalIndex = 0; 35 double currentWeight = 0.0; 36 for (int idx = 0; idx < nbLocalIndex; ++idx) 35 if (ignoreMissingValue) 37 36 { 38 currentlocalIndex = localIndex[idx].first; 39 currentWeight = localIndex[idx].second; 40 if (flagInitial[currentlocalIndex]) 37 int nbLocalIndex = localIndex.size(); 38 int currentlocalIndex = 0; 39 40 dataOut=std::numeric_limits<double>::quiet_NaN(); 41 42 for (int idx = 0; idx < nbLocalIndex; ++idx) 41 43 { 42 dataOut(currentlocalIndex) = *(dataInput + idx); 43 flagInitial[currentlocalIndex] = false; 44 } 45 else 44 currentlocalIndex = localIndex[idx].first; 45 if (!NumTraits<double>::isnan(*(dataInput + idx))) 46 { 47 if (flagInitial[currentlocalIndex]) 48 { 49 dataOut(currentlocalIndex) = *(dataInput + idx); 50 flagInitial[currentlocalIndex] = false; 51 } 52 else 53 { 54 dataOut(currentlocalIndex) += *(dataInput + idx); 55 } 56 } 57 } 58 } 59 else 60 { 61 int nbLocalIndex = localIndex.size(); 62 int currentlocalIndex = 0; 63 for (int idx = 0; idx < nbLocalIndex; ++idx) 46 64 { 47 dataOut(currentlocalIndex) += *(dataInput + idx); 65 currentlocalIndex = localIndex[idx].first; 66 if (flagInitial[currentlocalIndex]) 67 { 68 dataOut(currentlocalIndex) = *(dataInput + idx); 69 flagInitial[currentlocalIndex] = false; 70 } 71 else 72 { 73 dataOut(currentlocalIndex) += *(dataInput + idx); 74 } 48 75 } 49 76 }
Note: See TracChangeset
for help on using the changeset viewer.