Index: /XIOS/dev/dev_olga/src/filter/ternary_arithmetic_filter.cpp
===================================================================
--- /XIOS/dev/dev_olga/src/filter/ternary_arithmetic_filter.cpp	(revision 1162)
+++ /XIOS/dev/dev_olga/src/filter/ternary_arithmetic_filter.cpp	(revision 1162)
@@ -0,0 +1,171 @@
+#include "ternary_arithmetic_filter.hpp"
+
+namespace xios
+{
+  CScalarScalarFieldArithmeticFilter::CScalarScalarFieldArithmeticFilter(CGarbageCollector& gc, const std::string& op, double value1, double value2)
+    : CFilter(gc, 1, this)
+    , op(operatorExpr.getOpScalarScalarField(op))
+    , value1(value1)
+    , value2(value2)
+  { /* Nothing to do */ };
+
+  CDataPacketPtr CScalarScalarFieldArithmeticFilter::apply(std::vector<CDataPacketPtr> data)
+  {
+    CDataPacketPtr packet(new CDataPacket);
+    packet->date = data[0]->date;
+    packet->timestamp = data[0]->timestamp;
+    packet->status = data[0]->status;
+
+    if (packet->status == CDataPacket::NO_ERROR)
+      packet->data.reference(op(value1,value2, data[0]->data));
+
+    return packet;
+  }
+
+  CScalarFieldScalarArithmeticFilter::CScalarFieldScalarArithmeticFilter(CGarbageCollector& gc, const std::string& op, double value1, double value2)
+    : CFilter(gc, 1, this)
+    , op(operatorExpr.getOpScalarFieldScalar(op))
+    , value1(value1)
+    , value2(value2)
+  { /* Nothing to do */ };
+
+  CDataPacketPtr CScalarFieldScalarArithmeticFilter::apply(std::vector<CDataPacketPtr> data)
+  {
+    CDataPacketPtr packet(new CDataPacket);
+    packet->date = data[0]->date;
+    packet->timestamp = data[0]->timestamp;
+    packet->status = data[0]->status;
+
+    if (packet->status == CDataPacket::NO_ERROR)
+      packet->data.reference(op(value1, data[0]->data,value2));
+
+    return packet;
+  }
+
+  CScalarFieldFieldArithmeticFilter::CScalarFieldFieldArithmeticFilter(CGarbageCollector& gc, const std::string& op, double value)
+    : CFilter(gc, 2, this)
+    , op(operatorExpr.getOpScalarFieldField(op))
+    , value(value)
+  { /* Nothing to do */ };
+
+  CDataPacketPtr CScalarFieldFieldArithmeticFilter::apply(std::vector<CDataPacketPtr> data)
+  {
+    CDataPacketPtr packet(new CDataPacket);
+    packet->date = data[0]->date;
+    packet->timestamp = data[0]->timestamp;
+    packet->status = data[0]->status;
+
+    if (data[0]->status != CDataPacket::NO_ERROR)
+      packet->status = data[0]->status;
+    else if (data[1]->status != CDataPacket::NO_ERROR)
+      packet->status = data[1]->status;
+    else
+    { 
+      packet->status = CDataPacket::NO_ERROR;
+      packet->data.reference(op(value, data[0]->data, data[1]->data));
+    }
+    return packet;
+
+  }
+
+
+  CFieldScalarScalarArithmeticFilter::CFieldScalarScalarArithmeticFilter(CGarbageCollector& gc, const std::string& op, double value1, double value2)
+    : CFilter(gc, 1, this)
+    , op(operatorExpr.getOpFieldScalarScalar(op))
+    , value1(value1)
+    , value2(value2)
+  { /* Nothing to do */ };
+
+  CDataPacketPtr CFieldScalarScalarArithmeticFilter::apply(std::vector<CDataPacketPtr> data)
+  {
+    CDataPacketPtr packet(new CDataPacket);
+    packet->date = data[0]->date;
+    packet->timestamp = data[0]->timestamp;
+    packet->status = data[0]->status;
+
+    if (packet->status == CDataPacket::NO_ERROR)
+      packet->data.reference(op(data[0]->data, value1, value2));
+
+    return packet;
+  }
+
+
+  CFieldScalarFieldArithmeticFilter::CFieldScalarFieldArithmeticFilter(CGarbageCollector& gc, const std::string& op, double value)
+    : CFilter(gc, 2, this)
+    , op(operatorExpr.getOpFieldScalarField(op))
+    , value(value)
+  { /* Nothing to do */ };
+
+  CDataPacketPtr CFieldScalarFieldArithmeticFilter::apply(std::vector<CDataPacketPtr> data)
+  {
+    CDataPacketPtr packet(new CDataPacket);
+    packet->date = data[0]->date;
+    packet->timestamp = data[0]->timestamp;
+    packet->status = data[0]->status;
+
+    if (data[0]->status != CDataPacket::NO_ERROR)
+      packet->status = data[0]->status;
+    else if (data[1]->status != CDataPacket::NO_ERROR)
+      packet->status = data[1]->status;
+    else
+    { 
+      packet->status = CDataPacket::NO_ERROR;
+      packet->data.reference(op(data[0]->data, value, data[1]->data));
+    }
+    return packet;
+  }
+  
+   CFieldFieldScalarArithmeticFilter::CFieldFieldScalarArithmeticFilter(CGarbageCollector& gc, const std::string& op, double value)
+    : CFilter(gc, 2, this)
+    , op(operatorExpr.getOpFieldFieldScalar(op))
+    , value(value)
+  { /* Nothing to do */ };
+
+  CDataPacketPtr CFieldFieldScalarArithmeticFilter::apply(std::vector<CDataPacketPtr> data)
+  {
+    CDataPacketPtr packet(new CDataPacket);
+    packet->date = data[0]->date;
+    packet->timestamp = data[0]->timestamp;
+    packet->status = data[0]->status;
+
+    if (data[0]->status != CDataPacket::NO_ERROR)
+      packet->status = data[0]->status;
+    else if (data[1]->status != CDataPacket::NO_ERROR)
+      packet->status = data[1]->status;
+    else
+    { 
+      packet->status = CDataPacket::NO_ERROR;
+      packet->data.reference(op(data[0]->data, data[1]->data, value));
+    }
+    return packet;
+  } 
+  
+ 
+  CFieldFieldFieldArithmeticFilter::CFieldFieldFieldArithmeticFilter(CGarbageCollector& gc, const std::string& op)
+    : CFilter(gc, 3, this)
+    , op(operatorExpr.getOpFieldFieldField(op))
+  { /* Nothing to do */ };
+
+  CDataPacketPtr CFieldFieldFieldArithmeticFilter::apply(std::vector<CDataPacketPtr> data)
+  {
+    CDataPacketPtr packet(new CDataPacket);
+    packet->date = data[0]->date;
+    packet->timestamp = data[0]->timestamp;
+    packet->status = data[0]->status;
+
+    if (data[0]->status != CDataPacket::NO_ERROR)
+      packet->status = data[0]->status;
+    else if (data[1]->status != CDataPacket::NO_ERROR)
+      packet->status = data[1]->status;
+    else if (data[2]->status != CDataPacket::NO_ERROR)
+      packet->status = data[2]->status;
+    else
+    { 
+      packet->status = CDataPacket::NO_ERROR;
+      packet->data.reference(op(data[0]->data, data[1]->data, data[2]->data));
+    }
+    return packet;
+  } 
+  
+} // namespace xios
+
Index: /XIOS/dev/dev_olga/src/filter/ternary_arithmetic_filter.hpp
===================================================================
--- /XIOS/dev/dev_olga/src/filter/ternary_arithmetic_filter.hpp	(revision 1162)
+++ /XIOS/dev/dev_olga/src/filter/ternary_arithmetic_filter.hpp	(revision 1162)
@@ -0,0 +1,220 @@
+#ifndef __XIOS_CTernaryArithmeticFilter__
+#define __XIOS_CTernaryArithmeticFilter__
+
+#include "filter.hpp"
+#include <string>
+#include "operator_expr.hpp"
+
+namespace xios
+{
+  /*!
+   * A generic ternary arithmetic filter wrapping any type of ternary scalar-scalar-field operator.
+   */
+  class CScalarScalarFieldArithmeticFilter : public CFilter, public IFilterEngine
+  {
+    public:
+      /*!
+       * Constructs an ternary scalar-field arithmetic filter wrapping the specified operator.
+       *
+       * \param gc the associated garbage collector
+       * \param op the string identifing the ternary scalar-scalar-field operator
+       * \param value1 the scalar value
+       * \param value2 the scalar value
+       */
+      CScalarScalarFieldArithmeticFilter(CGarbageCollector& gc, const std::string& op, double value1, double value2);
+
+    protected:
+      COperatorExpr::functionScalarScalarField op; //!< The ternary scalar-scalar-field operator attached to the ternary arithmeric filter
+      double value1; //!< The scalar value 1 associated with the ternary arithmeric filter
+      double value2; //!< The scalar value 2 associated with the ternary arithmeric filter
+
+      /*!
+       * Applies the ternary scalar-scalar-field operator to the input data and returns the result.
+       *
+       * \param data a vector of packets corresponding to each slot (one in this case)
+       * \return the result of the ternary operation
+       */
+      CDataPacketPtr virtual apply(std::vector<CDataPacketPtr> data);
+  }; // class CScalarScalarFieldArithmeticFilter
+
+ 
+   /*!
+   * A generic ternary arithmetic filter wrapping any type of ternary scalar-field-scalar operator.
+   */
+  class CScalarFieldScalarArithmeticFilter : public CFilter, public IFilterEngine
+  {
+    public:
+      /*!
+       * Constructs an ternary scalar-field arithmetic filter wrapping the specified operator.
+       *
+       * \param gc the associated garbage collector
+       * \param op the string identifing the ternary scalar-field-scalar operator
+       * \param value1 the scalar value
+       * \param value2 the scalar value
+       */
+      CScalarFieldScalarArithmeticFilter(CGarbageCollector& gc, const std::string& op, double value1, double value2);
+
+    protected:
+      COperatorExpr::functionScalarFieldScalar op; //!< The ternary scalar-field-scalar operator attached to the ternary arithmeric filter
+      double value1; //!< The scalar value 1 associated with the ternary arithmeric filter
+      double value2; //!< The scalar value 2 associated with the ternary arithmeric filter
+
+      /*!
+       * Applies the ternary scalar-field-scalar operator to the input data and returns the result.
+       *
+       * \param data a vector of packets corresponding to each slot (one in this case)
+       * \return the result of the ternary operation
+       */
+      CDataPacketPtr virtual apply(std::vector<CDataPacketPtr> data);
+  }; // class CScalarScalarFieldArithmeticFilter
+
+  /*!
+   * A generic ternary arithmetic filter wrapping any type of ternary scalar-field-field operator.
+   */
+  class CScalarFieldFieldArithmeticFilter : public CFilter, public IFilterEngine
+  {
+    public:
+      /*!
+       * Constructs an ternary scalar-field arithmetic filter wrapping the specified operator.
+       *
+       * \param gc the associated garbage collector
+       * \param op the string identifing the ternary scalar-field-field operator
+       * \param value the scalar value
+       */
+      CScalarFieldFieldArithmeticFilter(CGarbageCollector& gc, const std::string& op, double value);
+
+    protected:
+      COperatorExpr::functionScalarFieldField op; //!< The ternary scalar-field-scalar operator attached to the ternary arithmeric filter
+      double value; //!< The scalar value 1 associated with the ternary arithmeric filter
+
+      /*!
+       * Applies the ternary scalar-field-field operator to the input data and returns the result.
+       *
+       * \param data a vector of packets corresponding to each slot (one in this case)
+       * \return the result of the ternary operation
+       */
+      CDataPacketPtr virtual apply(std::vector<CDataPacketPtr> data);
+  }; // class CScalarScalarFieldArithmeticFilter
+
+
+
+ /*!
+   * A generic ternary arithmetic filter wrapping any type of ternary field-scalar-scalar operator.
+   */
+  class CFieldScalarScalarArithmeticFilter : public CFilter, public IFilterEngine
+  {
+    public:
+      /*!
+       * Constructs an ternary field-scalar-scalar arithmetic filter wrapping the specified operator.
+       *
+       * \param gc the associated garbage collector
+       * \param op the string identifing the ternary field-scalar-scalar operator
+       * \param value1 the scalar value
+       * \param value2 the scalar value
+       */
+      CFieldScalarScalarArithmeticFilter(CGarbageCollector& gc, const std::string& op, double value1, double value2);
+
+    protected:
+      COperatorExpr::functionFieldScalarScalar op; //!< The ternary field-scalar-scalar operator attached to the ternary arithmeric filter
+      double value1; //!< The scalar value 1 associated with the ternary arithmeric filter
+      double value2; //!< The scalar value 2 associated with the ternary arithmeric filter
+
+      /*!
+       * Applies the ternary field-scalar-scalar operator to the input data and returns the result.
+       *
+       * \param data a vector of packets corresponding to each slot (one in this case)
+       * \return the result of the ternary operation
+       */
+      CDataPacketPtr virtual apply(std::vector<CDataPacketPtr> data);
+  }; // class CFieldScalarScalarArithmeticFilter
+
+
+/*!
+   * A generic ternary arithmetic filter wrapping any type of ternary field-scalar-field operator.
+   */
+  class CFieldScalarFieldArithmeticFilter : public CFilter, public IFilterEngine
+  {
+    public:
+      /*!
+       * Constructs an ternary field-scalar-field arithmetic filter wrapping the specified operator.
+       *
+       * \param gc the associated garbage collector
+       * \param op the string identifing the ternary field-scalar-field operator
+       * \param value the scalar value
+       */
+      CFieldScalarFieldArithmeticFilter(CGarbageCollector& gc, const std::string& op, double value);
+
+    protected:
+      COperatorExpr::functionFieldScalarField op; //!< The ternary field-scalar-field operator attached to the ternary arithmeric filter
+      double value; //!< The scalar value associated with the ternary arithmeric filter
+
+      /*!
+       * Applies the ternary field-scalar-field operator to the input data and returns the result.
+       *
+       * \param data a vector of packets corresponding to each slot (one in this case)
+       * \return the result of the ternary operation
+       */
+      CDataPacketPtr virtual apply(std::vector<CDataPacketPtr> data);
+  }; // class CFieldScalarFieldArithmeticFilter
+
+
+/*!
+   * A generic ternary arithmetic filter wrapping any type of ternary field-field-scalar operator.
+   */
+  class CFieldFieldScalarArithmeticFilter : public CFilter, public IFilterEngine
+  {
+    public:
+      /*!
+       * Constructs an ternary field-field-scalar arithmetic filter wrapping the specified operator.
+       *
+       * \param gc the associated garbage collector
+       * \param op the string identifing the ternary field-scalar-field operator
+       * \param value the scalar value
+       */
+      CFieldFieldScalarArithmeticFilter(CGarbageCollector& gc, const std::string& op, double value);
+
+    protected:
+      COperatorExpr::functionFieldFieldScalar op; //!< The ternary field-field-scalar operator attached to the ternary arithmeric filter
+      double value; //!< The scalar value associated with the ternary arithmeric filter
+
+      /*!
+       * Applies the ternary field-field-scalar operator to the input data and returns the result.
+       *
+       * \param data a vector of packets corresponding to each slot (one in this case)
+       * \return the result of the ternary operation
+       */
+      CDataPacketPtr virtual apply(std::vector<CDataPacketPtr> data);
+  }; // class CFieldFielScalardArithmeticFilter
+
+
+/*!
+   * A generic ternary arithmetic filter wrapping any type of ternary field-field-field operator.
+   */
+  class CFieldFieldFieldArithmeticFilter : public CFilter, public IFilterEngine
+  {
+    public:
+      /*!
+       * Constructs an ternary field-field-scalar arithmetic filter wrapping the specified operator.
+       *
+       * \param gc the associated garbage collector
+       * \param op the string identifing the ternary field-scalar-field operator
+       */
+      CFieldFieldFieldArithmeticFilter(CGarbageCollector& gc, const std::string& op);
+
+    protected:
+      COperatorExpr::functionFieldFieldField op; //!< The ternary field-field-field operator attached to the ternary arithmeric filter
+
+      /*!
+       * Applies the ternary field-field-field operator to the input data and returns the result.
+       *
+       * \param data a vector of packets corresponding to each slot (one in this case)
+       * \return the result of the ternary operation
+       */
+      CDataPacketPtr virtual apply(std::vector<CDataPacketPtr> data);
+  }; // class CFieldFielFieldArithmeticFilter
+
+
+} // namespace xios
+
+#endif //__XIOS_CTernaryArithmeticFilter__
+
Index: /XIOS/dev/dev_olga/src/node/grid.cpp
===================================================================
--- /XIOS/dev/dev_olga/src/node/grid.cpp	(revision 1161)
+++ /XIOS/dev/dev_olga/src/node/grid.cpp	(revision 1162)
@@ -631,5 +631,5 @@
             int rank = it->first;
             CArray<size_t,1>& globalIndex = outGlobalIndexFromClient[rank];
-            outLocalIndexStoreOnClient.insert(make_pair(rank, CArray<size_t,1>(globalIndex.numElements())));            
+            outLocalIndexStoreOnClient.insert(make_pair(rank, CArray<size_t,1>(globalIndex.numElements())));
             CArray<size_t,1>& localIndex = outLocalIndexStoreOnClient[rank];
             size_t nbIndex = 0;
Index: /XIOS/dev/dev_olga/src/uuid.cpp
===================================================================
--- /XIOS/dev/dev_olga/src/uuid.cpp	(revision 1162)
+++ /XIOS/dev/dev_olga/src/uuid.cpp	(revision 1162)
@@ -0,0 +1,30 @@
+#include <boost/uuid/uuid.hpp>
+#include <boost/uuid/uuid_generators.hpp>
+#include <boost/uuid/uuid_io.hpp>
+
+namespace xios
+{
+  
+  std::string getUuidStr(void)
+  {
+    boost::uuids::random_generator gen;
+    boost::uuids::uuid u = gen();
+    return boost::uuids::to_string(u) ;
+  }
+  
+  std::string getUuidStr(const std::string& format)
+  {
+    size_t pos ;
+    std::string retStr(format) ;
+    std::string uuid(getUuidStr()) ;
+    std::string id("%uuid%");
+    pos=retStr.find(id) ;
+    while(pos!=std::string::npos)
+    {
+      retStr.replace(pos,id.size(),uuid) ;
+      pos=retStr.find(id) ;
+    }
+    return retStr;
+  }
+}
+
Index: /XIOS/dev/dev_olga/src/uuid.hpp
===================================================================
--- /XIOS/dev/dev_olga/src/uuid.hpp	(revision 1162)
+++ /XIOS/dev/dev_olga/src/uuid.hpp	(revision 1162)
@@ -0,0 +1,12 @@
+#ifndef __UUID_HPP__
+#define __UUID_HPP__
+
+#include <string>
+
+namespace xios
+{
+  std::string getUuidStr(void) ;
+  std::string getUuidStr(const std::string& format) ;
+}
+
+#endif
