Index: XIOS/trunk/src/node/node_enum.hpp
===================================================================
--- XIOS/trunk/src/node/node_enum.hpp	(revision 887)
+++ XIOS/trunk/src/node/node_enum.hpp	(revision 888)
@@ -26,5 +26,6 @@
          eInterpolateDomain,
          eGenerateRectilinearDomain,
-         eScalar
+         eScalar,
+         eReduceAxisToScalar
 
       } ENodeType;
Index: XIOS/trunk/src/node/node_type.hpp
===================================================================
--- XIOS/trunk/src/node/node_type.hpp	(revision 887)
+++ XIOS/trunk/src/node/node_type.hpp	(revision 888)
@@ -17,4 +17,5 @@
 #include "generate_rectilinear_domain.hpp"
 #include "scalar.hpp"
+#include "reduce_axis_to_scalar.hpp"
 
 
Index: XIOS/trunk/src/node/reduce_axis_to_scalar.cpp
===================================================================
--- XIOS/trunk/src/node/reduce_axis_to_scalar.cpp	(revision 888)
+++ XIOS/trunk/src/node/reduce_axis_to_scalar.cpp	(revision 888)
@@ -0,0 +1,63 @@
+#include "reduce_axis_to_scalar.hpp"
+#include "type.hpp"
+
+namespace xios {
+
+  /// ////////////////////// DÃ©finitions ////////////////////// ///
+
+  CReduceAxisToScalar::CReduceAxisToScalar(void)
+    : CObjectTemplate<CReduceAxisToScalar>(), CReduceAxisToScalarAttributes(), CTransformation<CScalar>()
+  { /* Ne rien faire de plus */ }
+
+  CReduceAxisToScalar::CReduceAxisToScalar(const StdString & id)
+    : CObjectTemplate<CReduceAxisToScalar>(id), CReduceAxisToScalarAttributes(), CTransformation<CScalar>()
+  { /* Ne rien faire de plus */ }
+
+  CReduceAxisToScalar::~CReduceAxisToScalar(void)
+  {}
+
+  CTransformation<CScalar>* CReduceAxisToScalar::create(const StdString& id, xml::CXMLNode* node)
+  {
+    CReduceAxisToScalar* reduceAxis = CReduceAxisToScalarGroup::get("reduce_axis_definition")->createChild(id);
+    if (node) reduceAxis->parse(*node);
+    return static_cast<CTransformation<CScalar>*>(reduceAxis);
+  }
+
+  bool CReduceAxisToScalar::registerTrans()
+  {
+    return registerTransformation(TRANS_REDUCE_AXIS_TO_SCALAR, CReduceAxisToScalar::create);
+  }
+
+  bool CReduceAxisToScalar::_dummyRegistered = CReduceAxisToScalar::registerTrans();
+
+  //----------------------------------------------------------------
+
+  StdString CReduceAxisToScalar::GetName(void)    { return StdString("reduce_axis"); }
+  StdString CReduceAxisToScalar::GetDefName(void) { return StdString("reduce_axis"); }
+  ENodeType CReduceAxisToScalar::GetType(void)    { return eReduceAxisToScalar; }
+
+  void CReduceAxisToScalar::checkValid(CScalar* scalarDst)
+  {
+//    int axisIBegin, axisNi, axisGlobalSize;
+//    int begin, end, n;
+//
+//    axisIBegin = axisDest->begin.getValue();
+//    axisNi     = axisDest->n.getValue();
+//    axisGlobalSize   = axisDest->n_glo.getValue();
+//
+//    begin = (this->begin.isEmpty()) ?  0 : this->begin.getValue();
+//    n     = (this->n.isEmpty()) ?  axisGlobalSize : this->n.getValue();
+//    end   = begin+n-1;
+//
+//    if (begin < 0 || begin > axisGlobalSize - 1 || end < 0 || end > axisGlobalSize - 1
+//        || n < 1 || n > axisGlobalSize || begin > end)
+//      ERROR("CReduceAxisToScalar::checkValid(CAxis* axisDest)",
+//            << "One or more attributes among 'begin' (" << begin << "), 'end' (" << end << "), 'n' (" << n << ") "
+//            << "of axis transformation [ id = '" << axisDest->getId() << "' , context = '" << CObjectFactory::GetCurrentContextId() << "' ] are not well specified");
+//
+//    this->begin.setValue(begin);
+//    this->n.setValue(n);
+
+  }
+
+}
Index: XIOS/trunk/src/node/reduce_axis_to_scalar.hpp
===================================================================
--- XIOS/trunk/src/node/reduce_axis_to_scalar.hpp	(revision 888)
+++ XIOS/trunk/src/node/reduce_axis_to_scalar.hpp	(revision 888)
@@ -0,0 +1,66 @@
+#ifndef __XIOS_CReduceAxisToScalar__
+#define __XIOS_CReduceAxisToScalar__
+
+/// xios headers ///
+#include "xios_spl.hpp"
+#include "attribute_enum.hpp"
+#include "attribute_enum_impl.hpp"
+#include "attribute_array.hpp"
+#include "declare_attribute.hpp"
+#include "object_template.hpp"
+#include "group_factory.hpp"
+#include "declare_group.hpp"
+#include "transformation.hpp"
+
+namespace xios {
+  /// ////////////////////// DÃ©clarations ////////////////////// ///
+  class CReduceAxisToScalarGroup;
+  class CReduceAxisToScalarAttributes;
+  class CReduceAxisToScalar;
+  class CScalar;
+
+  ///--------------------------------------------------------------
+
+  // Declare/Define CFileAttribute
+  BEGIN_DECLARE_ATTRIBUTE_MAP(CReduceAxisToScalar)
+#include "reduce_axis_to_scalar_attribute.conf"
+  END_DECLARE_ATTRIBUTE_MAP(CReduceAxisToScalar)
+
+  ///--------------------------------------------------------------
+  /*!
+    \class CReduceAxisToScalar
+    This class describes reduce_axis in xml file.
+  */
+  class CReduceAxisToScalar
+    : public CObjectTemplate<CReduceAxisToScalar>
+    , public CReduceAxisToScalarAttributes
+    , public CTransformation<CScalar>
+  {
+    public :
+      typedef CObjectTemplate<CReduceAxisToScalar> SuperClass;
+      typedef CReduceAxisToScalarAttributes SuperClassAttribute;
+
+    public :
+      /// Constructeurs ///
+      CReduceAxisToScalar(void);
+      explicit CReduceAxisToScalar(const StdString& id);
+
+      /// Destructeur ///
+      virtual ~CReduceAxisToScalar(void);
+
+      virtual void checkValid(CScalar* scalarDst);
+
+      /// Accesseurs statiques ///
+      static StdString GetName(void);
+      static StdString GetDefName(void);
+      static ENodeType GetType(void);
+    private:
+      static bool registerTrans();
+      static CTransformation<CScalar>* create(const StdString& id, xml::CXMLNode* node);
+      static bool _dummyRegistered;
+  }; // class CReduceAxisToScalar
+
+  DECLARE_GROUP(CReduceAxisToScalar);
+} // namespace xios
+
+#endif // __XIOS_CReduceAxisToScalar__
Index: XIOS/trunk/src/node/scalar.cpp
===================================================================
--- XIOS/trunk/src/node/scalar.cpp	(revision 887)
+++ XIOS/trunk/src/node/scalar.cpp	(revision 888)
@@ -27,4 +27,11 @@
    { /* Ne rien faire de plus */ }
 
+   std::map<StdString, ETranformationType> CScalar::transformationMapList_ = std::map<StdString, ETranformationType>();
+   bool CScalar::dummyTransformationMapList_ = CScalar::initializeTransformationMap(CScalar::transformationMapList_);
+   bool CScalar::initializeTransformationMap(std::map<StdString, ETranformationType>& m)
+   {
+     m["reduce_axis"] = TRANS_REDUCE_AXIS_TO_SCALAR;
+   }
+
    StdString CScalar::GetName(void)   { return (StdString("scalar")); }
    StdString CScalar::GetDefName(void){ return (CScalar::GetName()); }
@@ -49,8 +56,4 @@
    void CScalar::checkAttributes(void)
    {
-//      if (this->value.isEmpty())
-//      {
-//        this->value.setValue(0);
-//      }
    }
 
@@ -124,4 +127,34 @@
   }
 
+  /*!
+    Parse children nodes of a scalar in xml file.
+    \param node child node to process
+  */
+  void CScalar::parse(xml::CXMLNode & node)
+  {
+    SuperClass::parse(node);
+
+    if (node.goToChildElement())
+    {
+      StdString nodeElementName;
+      do
+      {
+        StdString nodeId("");
+        if (node.getAttributes().end() != node.getAttributes().find("id"))
+        { nodeId = node.getAttributes()["id"]; }
+
+        nodeElementName = node.getElementName();
+        std::map<StdString, ETranformationType>::const_iterator ite = transformationMapList_.end(), it;
+        it = transformationMapList_.find(nodeElementName);
+        if (ite != it)
+        {
+          transformationMap_.push_back(std::make_pair(it->second, CTransformation<CScalar>::createTransformation(it->second,
+                                                                                                                 nodeId,
+                                                                                                                 &node)));
+        }
+      } while (node.goToNextElement()) ;
+      node.goToParentElement();
+    }
+  }
 
   // Definition of some macros
Index: XIOS/trunk/src/node/scalar.hpp
===================================================================
--- XIOS/trunk/src/node/scalar.hpp	(revision 887)
+++ XIOS/trunk/src/node/scalar.hpp	(revision 888)
@@ -68,4 +68,5 @@
             bool IsWritten(const StdString& filename) const;
             void checkAttributesOnClient();
+            virtual void parse(xml::CXMLNode & node);
 
          public:
@@ -75,4 +76,5 @@
            void duplicateTransformation(CScalar*);
            CTransformation<CScalar>* addTransformation(ETranformationType transType, const StdString& id="");
+
          private:
            std::set<StdString> relFiles;
@@ -82,5 +84,11 @@
             void checkTransformations();
             void setTransformations(const TransMapTypes&);
-         private:
+
+       private:
+           static bool initializeTransformationMap(std::map<StdString, ETranformationType>& m);
+           static std::map<StdString, ETranformationType> transformationMapList_;
+           static bool dummyTransformationMapList_;
+
+
             DECLARE_REF_FUNC(Scalar,scalar)
 
Index: XIOS/trunk/src/node/transformation_enum.hpp
===================================================================
--- XIOS/trunk/src/node/transformation_enum.hpp	(revision 887)
+++ XIOS/trunk/src/node/transformation_enum.hpp	(revision 888)
@@ -12,5 +12,6 @@
         TRANS_ZOOM_DOMAIN = 3,
         TRANS_INTERPOLATE_DOMAIN = 4,
-        TRANS_GENERATE_RECTILINEAR_DOMAIN = 5
+        TRANS_GENERATE_RECTILINEAR_DOMAIN = 5,
+        TRANS_REDUCE_AXIS_TO_SCALAR = 6
       } ETranformationType;
 
