Ignore:
Timestamp:
09/12/17 09:45:29 (4 years ago)
Author:
ymipsl
Message:

backport of rev1260 in trunk.

YM

Location:
XIOS/trunk/src/transformation/Functions
Files:
11 edited

Legend:

Unmodified
Added
Removed
  • XIOS/trunk/src/transformation/Functions/average_reduction.cpp

    r1154 r1261  
    3131                                       CArray<double,1>& dataOut, 
    3232                                       std::vector<bool>& flagInitial,                      
    33                                        bool ignoreMissingValue) 
     33                                       bool ignoreMissingValue, bool firstPass) 
    3434{ 
    3535  if (resetWeight_) { weights_.resize(flagInitial.size()); weights_ = 1.0; resetWeight_ = false; }   
     
    3939    int nbLocalIndex = localIndex.size(); 
    4040    int currentlocalIndex = 0; 
    41     double currentWeight  = 0.0;     
     41    double currentWeight  = 0.0; 
     42 
     43    if (firstPass) dataOut=std::numeric_limits<double>::quiet_NaN(); 
    4244 
    4345    for (int idx = 0; idx < nbLocalIndex; ++idx) 
     
    5759          weights_(currentlocalIndex) += 1.0; 
    5860        } 
    59       } 
    60       else 
    61       { 
    62         if (flagInitial[currentlocalIndex])  
    63           dataOut(currentlocalIndex) = std::numeric_limits<double>::quiet_NaN(); 
    6461      } 
    6562    } 
  • XIOS/trunk/src/transformation/Functions/average_reduction.hpp

    r1076 r1261  
    2727                     CArray<double,1>& dataOut, 
    2828                     std::vector<bool>& flagInitial,                      
    29                      bool ignoreMissingValue); 
     29                     bool ignoreMissingValue, bool firstPass); 
    3030 
    3131  virtual void updateData(CArray<double,1>& dataOut); 
  • XIOS/trunk/src/transformation/Functions/extract.cpp

    r1076 r1261  
    3030                                       CArray<double,1>& dataOut, 
    3131                                       std::vector<bool>& flagInitial, 
    32                                        bool ignoreMissingValue) 
     32                                       bool ignoreMissingValue, bool firstPass) 
    3333{ 
    3434  int nbLocalIndex = localIndex.size(); 
  • XIOS/trunk/src/transformation/Functions/extract.hpp

    r1076 r1261  
    2727                     CArray<double,1>& dataOut, 
    2828                     std::vector<bool>& flagInitial, 
    29                      bool ignoreMissingValue); 
     29                     bool ignoreMissingValue, bool firstPass); 
    3030 
    3131  virtual ~CExtractReductionAlgorithm() {} 
  • XIOS/trunk/src/transformation/Functions/max_reduction.cpp

    r1154 r1261  
    3131                                   CArray<double,1>& dataOut, 
    3232                                   std::vector<bool>& flagInitial, 
    33                                    bool ignoreMissingValue) 
     33                                   bool ignoreMissingValue, bool firstPass) 
    3434{  
    3535  if (ignoreMissingValue) 
    3636  { 
    3737    int nbLocalIndex = localIndex.size(); 
    38     int currentlocalIndex = 0;     
     38    int currentlocalIndex = 0; 
     39    if (firstPass) dataOut=std::numeric_limits<double>::quiet_NaN();     
    3940    for (int idx = 0; idx < nbLocalIndex; ++idx) 
    4041    { 
     
    5152          dataOut(currentlocalIndex) = std::max(*(dataInput + idx), dataOut(currentlocalIndex)); 
    5253        } 
    53       } 
    54       else 
    55       { 
    56         if (flagInitial[currentlocalIndex])  
    57           dataOut(currentlocalIndex) = std::numeric_limits<double>::quiet_NaN(); 
    5854      } 
    5955    } 
  • XIOS/trunk/src/transformation/Functions/max_reduction.hpp

    r1076 r1261  
    2727                     CArray<double,1>& dataOut, 
    2828                     std::vector<bool>& flagInitial, 
    29                      bool ignoreMissingValue); 
     29                     bool ignoreMissingValue, bool firstPass); 
    3030 
    3131  virtual ~CMaxReductionAlgorithm() {} 
  • XIOS/trunk/src/transformation/Functions/min_reduction.cpp

    r1154 r1261  
    3131                                   CArray<double,1>& dataOut, 
    3232                                   std::vector<bool>& flagInitial, 
    33                                    bool ignoreMissingValue) 
     33                                   bool ignoreMissingValue, bool firstPass) 
    3434{ 
    3535  if (ignoreMissingValue) 
    3636  { 
    3737    int nbLocalIndex = localIndex.size(); 
    38     int currentlocalIndex = 0;     
     38    int currentlocalIndex = 0; 
     39    if (firstPass) dataOut=std::numeric_limits<double>::quiet_NaN(); 
    3940    for (int idx = 0; idx < nbLocalIndex; ++idx) 
    4041    { 
     
    5152          dataOut(currentlocalIndex) = std::min(*(dataInput + idx), dataOut(currentlocalIndex)); 
    5253        } 
    53       } 
    54       else 
    55       { 
    56         if (flagInitial[currentlocalIndex])  
    57           dataOut(currentlocalIndex) = std::numeric_limits<double>::quiet_NaN(); 
    5854      } 
    5955    } 
  • XIOS/trunk/src/transformation/Functions/min_reduction.hpp

    r1076 r1261  
    2727                     CArray<double,1>& dataOut, 
    2828                     std::vector<bool>& flagInitial,                      
    29                      bool ignoreMissingValue); 
     29                     bool ignoreMissingValue, bool firstPass); 
    3030 
    3131  virtual ~CMinReductionAlgorithm() {} 
  • XIOS/trunk/src/transformation/Functions/reduction.hpp

    r1076 r1261  
    4141    \param [in/out] dataOut Array contains local data 
    4242    \param [in/out] flagInitial vector of boolean to mark the local index already initialized. True means there is a need for initialization 
     43    \param [in] firstPass indicate if it is the first time the apply funtion is called for a same transformation, in order to make a clean initialization  
    4344  */ 
    4445  virtual void apply(const std::vector<std::pair<int,double> >& localIndex, 
     
    4647                     CArray<double,1>& dataOut, 
    4748                     std::vector<bool>& flagInitial,                      
    48                      bool ignoreMissingValue) = 0; 
     49                     bool ignoreMissingValue, bool firstPass) = 0; 
    4950  /*! 
    5051    Update local data  
  • XIOS/trunk/src/transformation/Functions/sum_reduction.cpp

    r1154 r1261  
    3131                                   CArray<double,1>& dataOut, 
    3232                                   std::vector<bool>& flagInitial, 
    33                                    bool ignoreMissingValue) 
     33                                   bool ignoreMissingValue, bool firstPass) 
    3434{ 
    3535  if (ignoreMissingValue) 
    3636  { 
    3737    int nbLocalIndex = localIndex.size(); 
    38     int currentlocalIndex = 0;     
     38    int currentlocalIndex = 0; 
     39 
     40    if (firstPass) dataOut=std::numeric_limits<double>::quiet_NaN(); 
    3941   
    4042    for (int idx = 0; idx < nbLocalIndex; ++idx) 
     
    5254          dataOut(currentlocalIndex) += *(dataInput + idx); 
    5355        } 
    54       } 
    55       else 
    56       { 
    57         if (flagInitial[currentlocalIndex])  
    58           dataOut(currentlocalIndex) = std::numeric_limits<double>::quiet_NaN(); 
    5956      } 
    6057    }     
  • XIOS/trunk/src/transformation/Functions/sum_reduction.hpp

    r1076 r1261  
    2727                     CArray<double,1>& dataOut, 
    2828                     std::vector<bool>& flagInitial, 
    29                      bool ignoreMissingValue); 
     29                     bool ignoreMissingValue, bool firstPass); 
    3030 
    3131  virtual ~CSumReductionAlgorithm() {} 
Note: See TracChangeset for help on using the changeset viewer.