Ignore:
Timestamp:
06/06/17 17:58:16 (7 years ago)
Author:
oabramkina
Message:

Two server levels: merging with trunk r1137.
There are bugs.

File:
1 edited

Legend:

Unmodified
Added
Removed
  • XIOS/dev/dev_olga/src/transformation/Functions/sum_reduction.cpp

    r979 r1158  
    33   \author Ha NGUYEN 
    44   \since 27 June 2016 
    5    \date 27 June 2016 
     5   \date 9 Jan 2017 
    66 
    77   \brief sum reduction 
    88 */ 
    99#include "sum_reduction.hpp" 
     10#include "utils.hpp" 
    1011 
    1112namespace xios { 
     
    2930                                   const double* dataInput, 
    3031                                   CArray<double,1>& dataOut, 
    31                                    std::vector<bool>& flagInitial) 
     32                                   std::vector<bool>& flagInitial, 
     33                                   bool ignoreMissingValue) 
    3234{ 
    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) 
    3736  { 
    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) 
    4143    { 
    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) 
    4664    { 
    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      } 
    4875    } 
    4976  } 
Note: See TracChangeset for help on using the changeset viewer.