Changeset 1261


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

backport of rev1260 in trunk.

YM

Location:
XIOS/trunk/src
Files:
24 edited

Legend:

Unmodified
Added
Removed
  • XIOS/trunk/src/filter/spatial_transform_filter.cpp

    r1076 r1261  
    196196      std::vector<bool> localInitFlag(dataCurrentDest.numElements(), true); 
    197197      currentBuff = 0; 
     198      bool firstPass=true;  
    198199      for (itRecv = itbRecv; itRecv != iteRecv; ++itRecv) 
    199200      { 
     
    204205                         dataCurrentDest, 
    205206                         localInitFlag, 
    206                          ignoreMissingValue); 
     207                         ignoreMissingValue,firstPass); 
    207208 
    208209        currentBuff += countSize; 
     210        firstPass=false ; 
    209211      } 
    210212 
  • 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() {} 
  • XIOS/trunk/src/transformation/axis_algorithm_extract_domain.cpp

    r1076 r1261  
    6969                                        CArray<double,1>& dataOut, 
    7070                                        std::vector<bool>& flagInitial,                      
    71                                         bool ignoreMissingValue) 
     71                                        bool ignoreMissingValue, bool firstPass) 
    7272{ 
    73   reduction_->apply(localIndex, dataInput, dataOut, flagInitial, ignoreMissingValue); 
     73  reduction_->apply(localIndex, dataInput, dataOut, flagInitial, ignoreMissingValue, firstPass); 
    7474} 
    7575 
  • XIOS/trunk/src/transformation/axis_algorithm_extract_domain.hpp

    r1076 r1261  
    3434                     CArray<double,1>& dataOut, 
    3535                     std::vector<bool>& flagInitial,                      
    36                      bool ignoreMissingValue); 
     36                     bool ignoreMissingValue, bool firstPass); 
    3737 
    3838  virtual ~CAxisAlgorithmExtractDomain(); 
  • XIOS/trunk/src/transformation/axis_algorithm_reduce_domain.cpp

    r1076 r1261  
    7777                                       CArray<double,1>& dataOut, 
    7878                                       std::vector<bool>& flagInitial,                      
    79                                        bool ignoreMissingValue) 
     79                                       bool ignoreMissingValue, bool firstPass) 
    8080{ 
    81   reduction_->apply(localIndex, dataInput, dataOut, flagInitial, ignoreMissingValue); 
     81  reduction_->apply(localIndex, dataInput, dataOut, flagInitial, ignoreMissingValue, firstPass); 
    8282} 
    8383 
     
    102102  CArray<int,1>& axisDstIndex = axisDest_->index; 
    103103  int ni_glo = domainSrc_->ni_glo, nj_glo = domainSrc_->nj_glo; 
    104   if (jDir == dir_) 
     104  if (iDir == dir_) 
    105105  { 
    106106    int nbAxisIdx = axisDstIndex.numElements(); 
     
    117117    } 
    118118  } 
    119   else if (iDir == dir_) 
     119  else if (jDir == dir_) 
    120120  { 
    121121    int nbAxisIdx = axisDstIndex.numElements(); 
  • XIOS/trunk/src/transformation/axis_algorithm_reduce_domain.hpp

    r1076 r1261  
    3333                     CArray<double,1>& dataOut, 
    3434                     std::vector<bool>& flagInitial,                      
    35                      bool ignoreMissingValue); 
     35                     bool ignoreMissingValue, bool firstPass); 
    3636 
    3737  virtual void updateData(CArray<double,1>& dataOut); 
  • XIOS/trunk/src/transformation/generic_algorithm_transformation.cpp

    r1154 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/generic_algorithm_transformation.hpp

    r1076 r1261  
    6464    \param [in/out] flagInitial vector of boolean to mark the local index already initialized. True means there is a need for initalization 
    6565    \param [in] ignoreMissingValue don't count missing value in operation if this flag is true 
     66    \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  
    6667  */ 
    6768  virtual void apply(const std::vector<std::pair<int,double> >& localIndex, 
     
    6970                     CArray<double,1>& dataOut, 
    7071                     std::vector<bool>& flagInitial,                      
    71                      bool ignoreMissingValue); 
     72                     bool ignoreMissingValue, bool firstPass); 
    7273 
    7374  /*! 
  • XIOS/trunk/src/transformation/scalar_algorithm_extract_axis.cpp

    r1076 r1261  
    5656                                         CArray<double,1>& dataOut, 
    5757                                         std::vector<bool>& flagInitial,                      
    58                                          bool ignoreMissingValue) 
     58                                         bool ignoreMissingValue, bool firstPass) 
    5959{ 
    60   reduction_->apply(localIndex, dataInput, dataOut, flagInitial, ignoreMissingValue); 
     60  reduction_->apply(localIndex, dataInput, dataOut, flagInitial, ignoreMissingValue, firstPass); 
    6161} 
    6262 
  • XIOS/trunk/src/transformation/scalar_algorithm_extract_axis.hpp

    r1076 r1261  
    3333                     CArray<double,1>& dataOut, 
    3434                     std::vector<bool>& flagInitial,                      
    35                      bool ignoreMissingValue); 
     35                     bool ignoreMissingValue, bool firstPass); 
    3636 
    3737  virtual ~CScalarAlgorithmExtractAxis(); 
  • XIOS/trunk/src/transformation/scalar_algorithm_reduce_axis.cpp

    r1082 r1261  
    8484} 
    8585 
    86 void CScalarAlgorithmReduceAxis::apply(const std::vector<std::pair<int,double> >& localIndex, 
    87                                          const double* dataInput, 
    88                                          CArray<double,1>& dataOut, 
    89                                          std::vector<bool>& flagInitial, 
    90                                        bool ignoreMissingValue) 
     86void CScalarAlgorithmReduceAxis::apply(const std::vector<std::pair<int,double> >& localIndex, const double* dataInput, CArray<double,1>& dataOut, 
     87                                         std::vector<bool>& flagInitial, bool ignoreMissingValue, bool firstPass) 
    9188{ 
    92   reduction_->apply(localIndex, dataInput, dataOut, flagInitial, ignoreMissingValue); 
     89  reduction_->apply(localIndex, dataInput, dataOut, flagInitial, ignoreMissingValue, firstPass); 
    9390} 
    9491 
  • XIOS/trunk/src/transformation/scalar_algorithm_reduce_axis.hpp

    r1082 r1261  
    3333                     CArray<double,1>& dataOut, 
    3434                     std::vector<bool>& flagInitial, 
    35                      bool ignoreMissingValue); 
     35                     bool ignoreMissingValue, bool firstPass); 
    3636 
    3737  virtual void updateData(CArray<double,1>& dataOut); 
  • XIOS/trunk/src/transformation/scalar_algorithm_reduce_domain.cpp

    r1076 r1261  
    8282                                         CArray<double,1>& dataOut, 
    8383                                         std::vector<bool>& flagInitial,                      
    84                                          bool ignoreMissingValue) 
     84                                         bool ignoreMissingValue, bool firstPass) 
    8585{ 
    86   reduction_->apply(localIndex, dataInput, dataOut, flagInitial, ignoreMissingValue); 
     86  reduction_->apply(localIndex, dataInput, dataOut, flagInitial, ignoreMissingValue, firstPass); 
    8787} 
    8888 
  • XIOS/trunk/src/transformation/scalar_algorithm_reduce_domain.hpp

    r1076 r1261  
    3333                     CArray<double,1>& dataOut, 
    3434                     std::vector<bool>& flagInitial,                      
    35                      bool ignoreMissingValue); 
     35                     bool ignoreMissingValue, bool firstPass); 
    3636 
    3737  virtual void updateData(CArray<double,1>& dataOut); 
Note: See TracChangeset for help on using the changeset viewer.