Index: /XIOS/dev/XIOS_DEV_CMIP6/src/config/node_type.conf
===================================================================
--- /XIOS/dev/XIOS_DEV_CMIP6/src/config/node_type.conf	(revision 1313)
+++ /XIOS/dev/XIOS_DEV_CMIP6/src/config/node_type.conf	(revision 1314)
@@ -68,5 +68,5 @@
 
 #ifdef __XIOS_CReduceAxisToAxis__
-   DECLARE_NODE(ReduceAxisToAxis, reduce_domain)
+   DECLARE_NODE(ReduceAxisToAxis, reduce_axis_to_axis)
 #endif //__XIOS_CReduceAxisToAxis__
 
@@ -95,4 +95,12 @@
 #endif //__XIOS_CTemporalSplitting__
 
+#ifdef __XIOS_CDuplicateScalarToAxis__
+   DECLARE_NODE(DuplicateScalarToAxis, duplicate_scalar_to_axis)
+#endif //__XIOS_CDuplicateScalarToAxis__
+
+#ifdef __XIOS_CReduceScalarToScalar__
+   DECLARE_NODE(ReduceScalarToScalar, reduce_scalar_to_scalar)
+#endif //__XIOS_CReduceScalarToScalar_
+
 #ifdef __XIOS_CContext__
    DECLARE_NODE_PAR(Context, context)
Index: /XIOS/dev/XIOS_DEV_CMIP6/src/config/reduce_axis_to_axis_attribute.conf
===================================================================
--- /XIOS/dev/XIOS_DEV_CMIP6/src/config/reduce_axis_to_axis_attribute.conf	(revision 1313)
+++ /XIOS/dev/XIOS_DEV_CMIP6/src/config/reduce_axis_to_axis_attribute.conf	(revision 1314)
@@ -1,4 +1,1 @@
 DECLARE_ENUM4(operation, min, max, sum, average)
-
-/* Direction to apply operation (i, j) */
-DECLARE_ATTRIBUTE(bool, local)
Index: /XIOS/dev/XIOS_DEV_CMIP6/src/config/reduce_scalar_to_scalar_attribute.conf
===================================================================
--- /XIOS/dev/XIOS_DEV_CMIP6/src/config/reduce_scalar_to_scalar_attribute.conf	(revision 1314)
+++ /XIOS/dev/XIOS_DEV_CMIP6/src/config/reduce_scalar_to_scalar_attribute.conf	(revision 1314)
@@ -0,0 +1,2 @@
+DECLARE_ENUM4(operation, min, max, sum, average)
+
Index: /XIOS/dev/XIOS_DEV_CMIP6/src/generate_fortran_interface.cpp
===================================================================
--- /XIOS/dev/XIOS_DEV_CMIP6/src/generate_fortran_interface.cpp	(revision 1313)
+++ /XIOS/dev/XIOS_DEV_CMIP6/src/generate_fortran_interface.cpp	(revision 1314)
@@ -47,4 +47,6 @@
   CExtractAxisToScalar extractAxisToScalar;
   CReduceDomainToScalar reduceDomainToScalar;
+  CDuplicateScalarToAxis duplicateScalarToAxis;
+  CReduceScalarToScalar reduceScalarToScalar;
   
   ostringstream oss;
@@ -344,8 +346,4 @@
   file.close();
  
-  file.open((path+"reduce_domain_to_axis_interface_attr.F90").c_str());
-  reduceDomainToAxis.generateFortran2003Interface(file);
-  file.close();
-
   file.open((path+"icreduce_domain_to_axis_attr.cpp").c_str());
   reduceDomainToAxis.generateCInterface(file);
@@ -360,8 +358,4 @@
   file.close();
  
-  file.open((path+"reduce_axis_to_axis_interface_attr.F90").c_str());
-  reduceAxisToAxis.generateFortran2003Interface(file);
-  file.close();
-
   file.open((path+"icreduce_axis_to_axis_attr.cpp").c_str());
   reduceAxisToAxis.generateCInterface(file);
@@ -376,20 +370,21 @@
   file.close();
 
+  file.open((path+"icextract_domain_to_axis_attr.cpp").c_str());
+  extractDomainToAxis.generateCInterface(file);
+  file.close();
+
+  file.open((path+"iextract_domain_to_axis_attr.F90").c_str());
+  extractDomainToAxis.generateFortranInterface(file);
+  file.close();
+
+
   file.open((path+"temporal_splitting_interface_attr.F90").c_str());
   temporalSplitting.generateFortran2003Interface(file);
   file.close();
 
-  file.open((path+"icextract_domain_to_axis_attr.cpp").c_str());
-  extractDomainToAxis.generateCInterface(file);
-  file.close();
-
   file.open((path+"ictemporal_splitting_attr.cpp").c_str());
   temporalSplitting.generateCInterface(file);
   file.close();
 
-  file.open((path+"iextract_domain_to_axis_attr.F90").c_str());
-  extractDomainToAxis.generateFortranInterface(file);
-  file.close();
-
   file.open((path+"itemporal_splitting_attr.F90").c_str());
   temporalSplitting.generateFortranInterface(file);
@@ -397,4 +392,15 @@
 
 
+  file.open((path+"duplicate_scalar_to_axis_interface_attr.F90").c_str());
+  duplicateScalarToAxis.generateFortran2003Interface(file);
+  file.close();
+  
+  file.open((path+"icduplicate_scalar_to_axis_attr.cpp").c_str());
+  duplicateScalarToAxis.generateCInterface(file);
+  file.close();
+  
+  file.open((path+"iduplicate_scalar_to_axis_attr.F90").c_str());
+  duplicateScalarToAxis.generateFortranInterface(file);
+  file.close();
   /*!
     Scalar transformations
@@ -424,12 +430,9 @@
   file.close();
 
+
   file.open((path+"reduce_domain_to_scalar_interface_attr.F90").c_str());
   reduceDomainToScalar.generateFortran2003Interface(file);
   file.close();
 
-  file.open((path+"temporal_splitting_interface_attr.F90").c_str());
-  temporalSplitting.generateFortran2003Interface(file);
-  file.close();
-
   file.open((path+"icreduce_domain_to_scalar_attr.cpp").c_str());
   reduceDomainToScalar.generateCInterface(file);
@@ -440,4 +443,21 @@
   file.close();
 
+
+  file.open((path+"reduce_scalar_to_scalar_interface_attr.F90").c_str());
+  reduceScalarToScalar.generateFortran2003Interface(file);
+  file.close();
+
+  file.open((path+"icreduce_scalar_to_scalar_attr.cpp").c_str());
+  reduceScalarToScalar.generateCInterface(file);
+  file.close();
+
+  file.open((path+"ireduce_scalar_to_scalar_attr.F90").c_str());
+  reduceScalarToScalar.generateFortranInterface(file);
+  file.close();
+
+
+
+
+
   file.open((path+"context_interface_attr.F90").c_str());
   context->generateFortran2003Interface(file);
Index: /XIOS/dev/XIOS_DEV_CMIP6/src/group_factory_decl.cpp
===================================================================
--- /XIOS/dev/XIOS_DEV_CMIP6/src/group_factory_decl.cpp	(revision 1313)
+++ /XIOS/dev/XIOS_DEV_CMIP6/src/group_factory_decl.cpp	(revision 1314)
@@ -41,4 +41,6 @@
   macro(CReduceDomainToScalarGroup)
   macro(CTemporalSplittingGroup)
+  macro(CDuplicateScalarToAxisGroup)
+  macro(CReduceScalarToScalarGroup)
 
 }
Index: /XIOS/dev/XIOS_DEV_CMIP6/src/group_template_decl.cpp
===================================================================
--- /XIOS/dev/XIOS_DEV_CMIP6/src/group_template_decl.cpp	(revision 1313)
+++ /XIOS/dev/XIOS_DEV_CMIP6/src/group_template_decl.cpp	(revision 1314)
@@ -30,3 +30,5 @@
   macro(ReduceDomainToScalar)
   macro(TemporalSplitting)
+  macro(DuplicateScalarToAxis)
+  macro(ReduceScalarToScalar)
 }
Index: /XIOS/dev/XIOS_DEV_CMIP6/src/node/axis.cpp
===================================================================
--- /XIOS/dev/XIOS_DEV_CMIP6/src/node/axis.cpp	(revision 1313)
+++ /XIOS/dev/XIOS_DEV_CMIP6/src/node/axis.cpp	(revision 1314)
@@ -54,4 +54,6 @@
      m["extract_domain"] = TRANS_EXTRACT_DOMAIN_TO_AXIS;
      m["temporal_splitting"] = TRANS_TEMPORAL_SPLITTING;
+     m["duplicate_scalar"] = TRANS_DUPLICATE_SCALAR_TO_AXIS;
+
    }
 
Index: /XIOS/dev/XIOS_DEV_CMIP6/src/node/duplicate_scalar_to_axis.cpp
===================================================================
--- /XIOS/dev/XIOS_DEV_CMIP6/src/node/duplicate_scalar_to_axis.cpp	(revision 1314)
+++ /XIOS/dev/XIOS_DEV_CMIP6/src/node/duplicate_scalar_to_axis.cpp	(revision 1314)
@@ -0,0 +1,46 @@
+#include "duplicate_scalar_to_axis.hpp"
+#include "type.hpp"
+#include "axis.hpp"
+#include "scalar.hpp"
+
+namespace xios {
+
+  /// ////////////////////// DÃ©finitions ////////////////////// ///
+
+  CDuplicateScalarToAxis::CDuplicateScalarToAxis(void)
+    : CObjectTemplate<CDuplicateScalarToAxis>(), CDuplicateScalarToAxisAttributes(), CTransformation<CAxis>()
+  { /* Ne rien faire de plus */ }
+
+  CDuplicateScalarToAxis::CDuplicateScalarToAxis(const StdString & id)
+    : CObjectTemplate<CDuplicateScalarToAxis>(id), CDuplicateScalarToAxisAttributes(), CTransformation<CAxis>()
+  { /* Ne rien faire de plus */ }
+
+  CDuplicateScalarToAxis::~CDuplicateScalarToAxis(void)
+  {}
+
+  CTransformation<CAxis>* CDuplicateScalarToAxis::create(const StdString& id, xml::CXMLNode* node)
+  {
+    CDuplicateScalarToAxis* duplicateScalar = CDuplicateScalarToAxisGroup::get("duplicate_scalar_to_axis_definition")->createChild(id);
+    if (node) duplicateScalar->parse(*node);
+    return static_cast<CTransformation<CAxis>*>(duplicateScalar);
+  }
+
+  bool CDuplicateScalarToAxis::registerTrans()
+  {
+    return registerTransformation(TRANS_DUPLICATE_SCALAR_TO_AXIS, CDuplicateScalarToAxis::create);
+  }
+
+  bool CDuplicateScalarToAxis::_dummyRegistered = CDuplicateScalarToAxis::registerTrans();
+
+  //----------------------------------------------------------------
+
+  StdString CDuplicateScalarToAxis::GetName(void)    { return StdString("duplicate_scalar_to_axis"); }
+  StdString CDuplicateScalarToAxis::GetDefName(void) { return StdString("duplicate_scalar_to_axis"); }
+  ENodeType CDuplicateScalarToAxis::GetType(void)    { return eDuplicateScalarToAxis; }
+
+  void CDuplicateScalarToAxis::checkValid(CAxis* axisDst, CScalar* scalarSrc)
+  {
+   
+  }
+
+}
Index: /XIOS/dev/XIOS_DEV_CMIP6/src/node/duplicate_scalar_to_axis.hpp
===================================================================
--- /XIOS/dev/XIOS_DEV_CMIP6/src/node/duplicate_scalar_to_axis.hpp	(revision 1314)
+++ /XIOS/dev/XIOS_DEV_CMIP6/src/node/duplicate_scalar_to_axis.hpp	(revision 1314)
@@ -0,0 +1,67 @@
+#ifndef __XIOS_CDuplicateScalarToAxis__
+#define __XIOS_CDuplicateScalarToAxis__
+
+/// 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 CDuplicateScalarToAxisGroup;
+  class CDuplicateScalarToAxisAttributes;
+  class CDuplicateScalarToAxis;
+  class CAxis;
+  class CScalar;
+
+  ///--------------------------------------------------------------
+
+  // Declare/Define CFileAttribute
+  BEGIN_DECLARE_ATTRIBUTE_MAP(CDuplicateScalarToAxis)
+#include "duplicate_scalar_to_axis_attribute.conf"
+  END_DECLARE_ATTRIBUTE_MAP(CDuplicateScalarToAxis)
+
+  ///--------------------------------------------------------------
+  /*!
+    \class CDuplicateScalarToAxis
+    This class describes duplicate_scalar in xml file.
+  */
+  class CDuplicateScalarToAxis
+    : public CObjectTemplate<CDuplicateScalarToAxis>
+    , public CDuplicateScalarToAxisAttributes
+    , public CTransformation<CAxis>
+  {
+    public :
+      typedef CObjectTemplate<CDuplicateScalarToAxis> SuperClass;
+      typedef CDuplicateScalarToAxisAttributes SuperClassAttribute;
+
+    public :
+      /// Constructeurs ///
+      CDuplicateScalarToAxis(void);
+      explicit CDuplicateScalarToAxis(const StdString& id);
+
+      /// Destructeur ///
+      virtual ~CDuplicateScalarToAxis(void);
+
+      virtual void checkValid(CAxis* axisDst, CScalar* scalarSrc);
+
+      /// Accesseurs statiques ///
+      static StdString GetName(void);
+      static StdString GetDefName(void);
+      static ENodeType GetType(void);
+    private:
+      static bool registerTrans();
+      static CTransformation<CAxis>* create(const StdString& id, xml::CXMLNode* node);
+      static bool _dummyRegistered;
+  }; // class CReduceAxisToAxis
+
+  DECLARE_GROUP(CDuplicateScalarToAxis);
+} // namespace xios
+
+#endif // ___XIOS_CDuplicateScalarToAxis__
Index: /XIOS/dev/XIOS_DEV_CMIP6/src/node/node_enum.hpp
===================================================================
--- /XIOS/dev/XIOS_DEV_CMIP6/src/node/node_enum.hpp	(revision 1313)
+++ /XIOS/dev/XIOS_DEV_CMIP6/src/node/node_enum.hpp	(revision 1314)
@@ -35,6 +35,8 @@
          eExtractAxisToScalar,
          eReduceDomainToScalar,
-         eTemporalSplitting
-      } ENodeType;
+         eTemporalSplitting,
+         eDuplicateScalarToAxis,
+         eReduceScalarToScalar
+       } ENodeType;
 
 } // namespace xios
Index: /XIOS/dev/XIOS_DEV_CMIP6/src/node/node_type.hpp
===================================================================
--- /XIOS/dev/XIOS_DEV_CMIP6/src/node/node_type.hpp	(revision 1313)
+++ /XIOS/dev/XIOS_DEV_CMIP6/src/node/node_type.hpp	(revision 1314)
@@ -26,4 +26,6 @@
 #include "reduce_domain_to_scalar.hpp"
 #include "temporal_splitting.hpp"
+#include "duplicate_scalar_to_axis.hpp"
+#include "reduce_scalar_to_scalar.hpp"
 
 
Index: /XIOS/dev/XIOS_DEV_CMIP6/src/node/reduce_axis_to_axis.cpp
===================================================================
--- /XIOS/dev/XIOS_DEV_CMIP6/src/node/reduce_axis_to_axis.cpp	(revision 1313)
+++ /XIOS/dev/XIOS_DEV_CMIP6/src/node/reduce_axis_to_axis.cpp	(revision 1314)
@@ -47,5 +47,4 @@
              << "Axis destination " << axisDst->getId());
 
-    if (this->local.isEmpty()) local=false ;
 
     if (axisDst->n_glo != axisSrc->n_glo)
Index: /XIOS/dev/XIOS_DEV_CMIP6/src/node/reduce_scalar_to_scalar.cpp
===================================================================
--- /XIOS/dev/XIOS_DEV_CMIP6/src/node/reduce_scalar_to_scalar.cpp	(revision 1314)
+++ /XIOS/dev/XIOS_DEV_CMIP6/src/node/reduce_scalar_to_scalar.cpp	(revision 1314)
@@ -0,0 +1,43 @@
+#include "reduce_scalar_to_scalar.hpp"
+#include "type.hpp"
+
+namespace xios {
+
+  /// ////////////////////// DÃ©finitions ////////////////////// ///
+
+  CReduceScalarToScalar::CReduceScalarToScalar(void)
+    : CObjectTemplate<CReduceScalarToScalar>(), CReduceScalarToScalarAttributes(), CTransformation<CScalar>()
+  { /* Ne rien faire de plus */ }
+
+  CReduceScalarToScalar::CReduceScalarToScalar(const StdString & id)
+    : CObjectTemplate<CReduceScalarToScalar>(id), CReduceScalarToScalarAttributes(), CTransformation<CScalar>()
+  { /* Ne rien faire de plus */ }
+
+  CReduceScalarToScalar::~CReduceScalarToScalar(void)
+  {}
+
+  CTransformation<CScalar>* CReduceScalarToScalar::create(const StdString& id, xml::CXMLNode* node)
+  {
+    CReduceScalarToScalar* reduceScalar = CReduceScalarToScalarGroup::get("reduce_scalar_to_scalar_definition")->createChild(id);
+    if (node) reduceScalar->parse(*node);
+    return static_cast<CTransformation<CScalar>*>(reduceScalar);
+  }
+
+  bool CReduceScalarToScalar::registerTrans()
+  {
+    return registerTransformation(TRANS_REDUCE_SCALAR_TO_SCALAR, CReduceScalarToScalar::create);
+  }
+
+  bool CReduceScalarToScalar::_dummyRegistered = CReduceScalarToScalar::registerTrans();
+
+  //----------------------------------------------------------------
+
+  StdString CReduceScalarToScalar::GetName(void)    { return StdString("reduce_scalar_to_scalar"); }
+  StdString CReduceScalarToScalar::GetDefName(void) { return StdString("reduce_scalar_to_scalar"); }
+  ENodeType CReduceScalarToScalar::GetType(void)    { return eReduceScalarToScalar; }
+
+  void CReduceScalarToScalar::checkValid(CScalar* scalarDst)
+  {
+  }
+
+}
Index: /XIOS/dev/XIOS_DEV_CMIP6/src/node/reduce_scalar_to_scalar.hpp
===================================================================
--- /XIOS/dev/XIOS_DEV_CMIP6/src/node/reduce_scalar_to_scalar.hpp	(revision 1314)
+++ /XIOS/dev/XIOS_DEV_CMIP6/src/node/reduce_scalar_to_scalar.hpp	(revision 1314)
@@ -0,0 +1,66 @@
+#ifndef __XIOS_CReduceScalarToScalar__
+#define __XIOS_CReduceScalarToScalar__
+
+/// 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 CReduceScalarToScalarGroup;
+  class CReduceScalarToScalarAttributes;
+  class CReduceScalarToScalar;
+  class CScalar;
+
+  ///--------------------------------------------------------------
+
+  // Declare/Define CFileAttribute
+  BEGIN_DECLARE_ATTRIBUTE_MAP(CReduceScalarToScalar)
+#include "reduce_scalar_to_scalar_attribute.conf"
+  END_DECLARE_ATTRIBUTE_MAP(CReduceScalarToScalar)
+
+  ///--------------------------------------------------------------
+  /*!
+    \class CReduceScalarToScalar
+    This class describes reduce_scalar in xml file.
+  */
+  class CReduceScalarToScalar
+    : public CObjectTemplate<CReduceScalarToScalar>
+    , public CReduceScalarToScalarAttributes
+    , public CTransformation<CScalar>
+  {
+    public :
+      typedef CObjectTemplate<CReduceScalarToScalar> SuperClass;
+      typedef CReduceScalarToScalarAttributes SuperClassAttribute;
+
+    public :
+      /// Constructeurs ///
+      CReduceScalarToScalar(void);
+      explicit CReduceScalarToScalar(const StdString& id);
+
+      /// Destructeur ///
+      virtual ~CReduceScalarToScalar(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 CReduceScalarToScalar
+
+  DECLARE_GROUP(CReduceScalarToScalar);
+} // namespace xios
+
+#endif // __XIOS_CReduceScalarToScalar__
Index: /XIOS/dev/XIOS_DEV_CMIP6/src/node/scalar.cpp
===================================================================
--- /XIOS/dev/XIOS_DEV_CMIP6/src/node/scalar.cpp	(revision 1313)
+++ /XIOS/dev/XIOS_DEV_CMIP6/src/node/scalar.cpp	(revision 1314)
@@ -34,4 +34,5 @@
      m["extract_axis"]  = TRANS_EXTRACT_AXIS_TO_SCALAR;
      m["reduce_domain"] = TRANS_REDUCE_DOMAIN_TO_SCALAR;
+     m["reduce_scalar"] = TRANS_REDUCE_SCALAR_TO_SCALAR;
    }
 
Index: /XIOS/dev/XIOS_DEV_CMIP6/src/node/transformation_enum.hpp
===================================================================
--- /XIOS/dev/XIOS_DEV_CMIP6/src/node/transformation_enum.hpp	(revision 1313)
+++ /XIOS/dev/XIOS_DEV_CMIP6/src/node/transformation_enum.hpp	(revision 1314)
@@ -22,4 +22,6 @@
         TRANS_TEMPORAL_SPLITTING = 13,
         TRANS_REDUCE_AXIS_TO_AXIS = 14,
+        TRANS_DUPLICATE_SCALAR_TO_AXIS = 15,
+        TRANS_REDUCE_SCALAR_TO_SCALAR = 16,
       } ETranformationType;
 
Index: /XIOS/dev/XIOS_DEV_CMIP6/src/object_factory_decl.cpp
===================================================================
--- /XIOS/dev/XIOS_DEV_CMIP6/src/object_factory_decl.cpp	(revision 1313)
+++ /XIOS/dev/XIOS_DEV_CMIP6/src/object_factory_decl.cpp	(revision 1314)
@@ -42,4 +42,6 @@
   macro(CReduceDomainToScalar)
   macro(CTemporalSplitting)
+  macro(CDuplicateScalarToAxis)
+  macro(CReduceScalarToScalar)
 
   macro(CFieldGroup)
@@ -66,3 +68,6 @@
   macro(CReduceDomainToScalarGroup)
   macro(CTemporalSplittingGroup)
+  macro(CDuplicateScalarToAxisGroup)
+  macro(CReduceScalarToScalarGroup)
+
 }
Index: /XIOS/dev/XIOS_DEV_CMIP6/src/object_template_decl.cpp
===================================================================
--- /XIOS/dev/XIOS_DEV_CMIP6/src/object_template_decl.cpp	(revision 1313)
+++ /XIOS/dev/XIOS_DEV_CMIP6/src/object_template_decl.cpp	(revision 1314)
@@ -29,4 +29,6 @@
   template class CObjectTemplate<CReduceDomainToScalar>;
   template class CObjectTemplate<CTemporalSplitting>;
+  template class CObjectTemplate<CDuplicateScalarToAxis>;
+  template class CObjectTemplate<CReduceScalarToScalar>;
 
   template class CObjectTemplate<CContextGroup>;
@@ -53,3 +55,6 @@
   template class CObjectTemplate<CReduceDomainToScalarGroup>;
   template class CObjectTemplate<CTemporalSplittingGroup>;
+  template class CObjectTemplate<CDuplicateScalarToAxisGroup>;
+  template class CObjectTemplate<CReduceScalarToScalarGroup>;
+
 }
Index: /XIOS/dev/XIOS_DEV_CMIP6/src/transformation/algo_types.hpp
===================================================================
--- /XIOS/dev/XIOS_DEV_CMIP6/src/transformation/algo_types.hpp	(revision 1313)
+++ /XIOS/dev/XIOS_DEV_CMIP6/src/transformation/algo_types.hpp	(revision 1314)
@@ -27,4 +27,6 @@
 #include "domain_algorithm_compute_connectivity.hpp"
 #include "domain_algorithm_expand.hpp"
+#include "axis_algorithm_duplicate_scalar.hpp"
+#include "scalar_algorithm_reduce_scalar.hpp"
 
 
Index: /XIOS/dev/XIOS_DEV_CMIP6/src/transformation/axis_algorithm_duplicate_scalar.cpp
===================================================================
--- /XIOS/dev/XIOS_DEV_CMIP6/src/transformation/axis_algorithm_duplicate_scalar.cpp	(revision 1314)
+++ /XIOS/dev/XIOS_DEV_CMIP6/src/transformation/axis_algorithm_duplicate_scalar.cpp	(revision 1314)
@@ -0,0 +1,72 @@
+/*!
+   \file axis_algorithm_duplicate_scalar.cpp
+
+   \brief Algorithm to duplicate scalar into  axis 
+ */
+#include "axis_algorithm_duplicate_scalar.hpp"
+#include "duplicate_scalar_to_axis.hpp"
+#include "axis.hpp"
+#include "scalar.hpp"
+#include "grid.hpp"
+#include "grid_transformation_factory_impl.hpp"
+
+namespace xios {
+CGenericAlgorithmTransformation* CAxisAlgorithmDuplicateScalar::create(CGrid* gridDst, CGrid* gridSrc,
+                                                                     CTransformation<CAxis>* transformation,
+                                                                     int elementPositionInGrid,
+                                                                     std::map<int, int>& elementPositionInGridSrc2ScalarPosition,
+                                                                     std::map<int, int>& elementPositionInGridSrc2AxisPosition,
+                                                                     std::map<int, int>& elementPositionInGridSrc2DomainPosition,
+                                                                     std::map<int, int>& elementPositionInGridDst2ScalarPosition,
+                                                                     std::map<int, int>& elementPositionInGridDst2AxisPosition,
+                                                                     std::map<int, int>& elementPositionInGridDst2DomainPosition)
+{
+  std::vector<CAxis*> axisListDestP = gridDst->getAxis();
+  std::vector<CScalar*> scalarListSrcP = gridSrc->getScalars();
+
+  CDuplicateScalarToAxis* duplicateScalar = dynamic_cast<CDuplicateScalarToAxis*> (transformation);
+  int axisDstIndex = elementPositionInGridDst2AxisPosition[elementPositionInGrid];
+  int scalarSrcIndex = elementPositionInGridSrc2ScalarPosition[elementPositionInGrid];
+
+  return (new CAxisAlgorithmDuplicateScalar(axisListDestP[axisDstIndex], scalarListSrcP[scalarSrcIndex], duplicateScalar));
+}
+
+bool CAxisAlgorithmDuplicateScalar::registerTrans()
+{
+  CGridTransformationFactory<CAxis>::registerTransformation(TRANS_DUPLICATE_SCALAR_TO_AXIS, create);
+}
+
+
+CAxisAlgorithmDuplicateScalar::CAxisAlgorithmDuplicateScalar(CAxis* axisDestination, CScalar* scalarSource, CDuplicateScalarToAxis* algo)
+ : CAxisAlgorithmTransformation(axisDestination, scalarSource)
+{
+
+}
+
+
+CAxisAlgorithmDuplicateScalar::~CAxisAlgorithmDuplicateScalar()
+{
+}
+
+void CAxisAlgorithmDuplicateScalar::computeIndexSourceMapping_(const std::vector<CArray<double,1>* >& dataAuxInputs)
+{
+  this->transformationMapping_.resize(1);
+  this->transformationWeight_.resize(1);
+
+  TransformationIndexMap& transMap = this->transformationMapping_[0];
+  TransformationWeightMap& transWeight = this->transformationWeight_[0];
+
+  CArray<int,1>& axisDstIndex = axisDest_->index;
+
+  int nbAxisIdx = axisDstIndex.numElements();
+  for (int idxAxis = 0; idxAxis < nbAxisIdx; ++idxAxis)
+  {
+    int globalAxisIdx = axisDstIndex(idxAxis);
+    transMap[globalAxisIdx].resize(1);
+    transWeight[globalAxisIdx].resize(1);
+    transMap[globalAxisIdx][0] = 0 ;
+    transWeight[globalAxisIdx][0] = 1.0 ;
+  }
+}
+
+}
Index: /XIOS/dev/XIOS_DEV_CMIP6/src/transformation/axis_algorithm_duplicate_scalar.hpp
===================================================================
--- /XIOS/dev/XIOS_DEV_CMIP6/src/transformation/axis_algorithm_duplicate_scalar.hpp	(revision 1314)
+++ /XIOS/dev/XIOS_DEV_CMIP6/src/transformation/axis_algorithm_duplicate_scalar.hpp	(revision 1314)
@@ -0,0 +1,51 @@
+/*!
+   \file axis_algorithm_reduce_domain.hpp
+   \author Ha NGUYEN
+   \since 23 June 2016
+   \date 23 June 2016
+
+   \brief Algorithm for reduce an axis to a axis
+ */
+#ifndef __XIOS_AXIS_ALGORITHM_DUPLICATE_SCALAR_HPP__
+#define __XIOS_AXIS_ALGORITHM_DUPLICATE_SCALAR_HPP__
+
+#include "axis_algorithm_transformation.hpp"
+#include "transformation.hpp"
+
+namespace xios {
+
+class CAxis;
+class CScalar;
+class CDuplicateScalarToAxis;
+
+
+/*!
+  \class CAxisAlgorithmDuplicateScalar
+  Duplicate scalar into axis destination
+*/
+class CAxisAlgorithmDuplicateScalar : public CAxisAlgorithmTransformation
+{
+public:
+  CAxisAlgorithmDuplicateScalar(CAxis* axisDestination, CScalar* scalarSource, CDuplicateScalarToAxis* algo);
+
+  virtual ~CAxisAlgorithmDuplicateScalar();
+
+  static bool registerTrans();
+
+protected:
+  void computeIndexSourceMapping_(const std::vector<CArray<double,1>* >& dataAuxInputs);
+
+private:
+  static CGenericAlgorithmTransformation* create(CGrid* gridDst, CGrid* gridSrc,
+                                                CTransformation<CAxis>* transformation,
+                                                int elementPositionInGrid,
+                                                std::map<int, int>& elementPositionInGridSrc2ScalarPosition,
+                                                std::map<int, int>& elementPositionInGridSrc2AxisPosition,
+                                                std::map<int, int>& elementPositionInGridSrc2DomainPosition,
+                                                std::map<int, int>& elementPositionInGridDst2ScalarPosition,
+                                                std::map<int, int>& elementPositionInGridDst2AxisPosition,
+                                                std::map<int, int>& elementPositionInGridDst2DomainPosition);
+};
+
+}
+#endif // __XIOS_AXIS_ALGORITHM_DUPLICATE_SCALAR_HPP__
Index: /XIOS/dev/XIOS_DEV_CMIP6/src/transformation/axis_algorithm_reduce_axis.cpp
===================================================================
--- /XIOS/dev/XIOS_DEV_CMIP6/src/transformation/axis_algorithm_reduce_axis.cpp	(revision 1313)
+++ /XIOS/dev/XIOS_DEV_CMIP6/src/transformation/axis_algorithm_reduce_axis.cpp	(revision 1314)
@@ -70,5 +70,4 @@
 
   reduction_ = CReductionAlgorithm::createOperation(CReductionAlgorithm::ReductionOperations[op]);
-  local = algo->local ;
 }
 
Index: /XIOS/dev/XIOS_DEV_CMIP6/src/transformation/axis_algorithm_reduce_axis.hpp
===================================================================
--- /XIOS/dev/XIOS_DEV_CMIP6/src/transformation/axis_algorithm_reduce_axis.hpp	(revision 1313)
+++ /XIOS/dev/XIOS_DEV_CMIP6/src/transformation/axis_algorithm_reduce_axis.hpp	(revision 1314)
@@ -40,5 +40,4 @@
   static bool registerTrans();
 protected:
-  bool local ;
   
 protected:
Index: /XIOS/dev/XIOS_DEV_CMIP6/src/transformation/grid_transformation_selector.cpp
===================================================================
--- /XIOS/dev/XIOS_DEV_CMIP6/src/transformation/grid_transformation_selector.cpp	(revision 1313)
+++ /XIOS/dev/XIOS_DEV_CMIP6/src/transformation/grid_transformation_selector.cpp	(revision 1314)
@@ -22,4 +22,5 @@
   CScalarAlgorithmExtractAxis::registerTrans();
   CScalarAlgorithmReduceDomain::registerTrans();
+  CScalarAlgorithmReduceScalar::registerTrans();
 
   //! Axis
@@ -31,4 +32,5 @@
   CAxisAlgorithmReduceAxis::registerTrans();
   CAxisAlgorithmTemporalSplitting::registerTrans();
+  CAxisAlgorithmDuplicateScalar::registerTrans();
 
   //! Domain
Index: /XIOS/dev/XIOS_DEV_CMIP6/src/transformation/scalar_algorithm_reduce_scalar.cpp
===================================================================
--- /XIOS/dev/XIOS_DEV_CMIP6/src/transformation/scalar_algorithm_reduce_scalar.cpp	(revision 1314)
+++ /XIOS/dev/XIOS_DEV_CMIP6/src/transformation/scalar_algorithm_reduce_scalar.cpp	(revision 1314)
@@ -0,0 +1,111 @@
+/*!
+   \file scalar_algorithm_reduce_scalar.cpp
+ 
+   \brief Algorithm for reduce an scalar to a scalar
+ */
+#include "scalar_algorithm_reduce_scalar.hpp"
+#include "scalar.hpp"
+#include "reduce_scalar_to_scalar.hpp"
+#include "grid.hpp"
+#include "grid_transformation_factory_impl.hpp"
+#include "reduction.hpp"
+
+
+namespace xios {
+CGenericAlgorithmTransformation* CScalarAlgorithmReduceScalar::create(CGrid* gridDst, CGrid* gridSrc,
+                                                                     CTransformation<CScalar>* transformation,
+                                                                     int elementPositionInGrid,
+                                                                     std::map<int, int>& elementPositionInGridSrc2ScalarPosition,
+                                                                     std::map<int, int>& elementPositionInGridSrc2AxisPosition,
+                                                                     std::map<int, int>& elementPositionInGridSrc2DomainPosition,
+                                                                     std::map<int, int>& elementPositionInGridDst2ScalarPosition,
+                                                                     std::map<int, int>& elementPositionInGridDst2AxisPosition,
+                                                                     std::map<int, int>& elementPositionInGridDst2DomainPosition)
+{
+  std::vector<CScalar*> scalarListDestP = gridDst->getScalars();
+  std::vector<CScalar*> scalarListSrcP  = gridSrc->getScalars();
+
+  CReduceScalarToScalar* reduceScalar = dynamic_cast<CReduceScalarToScalar*> (transformation);
+  int scalarDstIndex = elementPositionInGridDst2ScalarPosition[elementPositionInGrid];
+  int scalarSrcIndex = elementPositionInGridSrc2AxisPosition[elementPositionInGrid];
+
+  return (new CScalarAlgorithmReduceScalar(scalarListDestP[scalarDstIndex], scalarListSrcP[scalarSrcIndex], reduceScalar));
+}
+
+bool CScalarAlgorithmReduceScalar::registerTrans()
+{
+  CGridTransformationFactory<CScalar>::registerTransformation(TRANS_REDUCE_SCALAR_TO_SCALAR, create);
+}
+
+CScalarAlgorithmReduceScalar::CScalarAlgorithmReduceScalar(CScalar* scalarDestination, CScalar* scalarSource, CReduceScalarToScalar* algo)
+ : CScalarAlgorithmTransformation(scalarDestination, scalarSource),
+   reduction_(0)
+{
+  eliminateRedondantSrc_= false ;
+  if (algo->operation.isEmpty())
+    ERROR("CScalarAlgorithmReduceScalar::CScalarAlgorithmReduceScalar(CScalar* scalarDestination, CScalar* scalarSource, CReduceScalarToScalar* algo)",
+           << "Operation must be defined."
+           << "Scalar source " <<scalarSource->getId() << std::endl
+           << "Scalar destination " << scalarDestination->getId());
+  StdString op;
+  switch (algo->operation)
+  {
+    case CReduceScalarToScalar::operation_attr::sum:
+      op = "sum";
+      break;
+    case CReduceScalarToScalar::operation_attr::min:
+      op = "min";
+      break;
+    case CReduceScalarToScalar::operation_attr::max:
+      op = "max";
+      break;
+    case CReduceScalarToScalar::operation_attr::average:
+      op = "average";
+      break;
+    default:
+        ERROR("CScalarAlgorithmReduceScalar::CScalarAlgorithmReduceScalar(CScalar* scalarDestination, CScalar* scalarSource, CReduceScalarToScalar* algo)",
+         << "Operation is wrongly defined. Supported operations: sum, min, max, average." << std::endl
+         << "Scalar source " <<scalarSource->getId() << std::endl
+         << "Scalar destination " << scalarDestination->getId());
+
+  }
+  
+  if (CReductionAlgorithm::ReductionOperations.end() == CReductionAlgorithm::ReductionOperations.find(op))
+    ERROR("CScalarAlgorithmReduceScalar::CScalarAlgorithmReduceScalar(CScalar* scalarDestination, CScalar* scalarSource, CReduceScalarToScalar* algo)",
+       << "Operation '" << op << "' not found. Please make sure to use a supported one"
+       << "Scalar source " <<scalarSource->getId() << std::endl
+       << "Scalar destination " << scalarDestination->getId());
+
+  reduction_ = CReductionAlgorithm::createOperation(CReductionAlgorithm::ReductionOperations[op]);
+}
+
+void CScalarAlgorithmReduceScalar::apply(const std::vector<std::pair<int,double> >& localIndex, const double* dataInput, CArray<double,1>& dataOut,
+                                         std::vector<bool>& flagInitial, bool ignoreMissingValue, bool firstPass)
+{
+  reduction_->apply(localIndex, dataInput, dataOut, flagInitial, ignoreMissingValue, firstPass);
+}
+
+void CScalarAlgorithmReduceScalar::updateData(CArray<double,1>& dataOut)
+{
+  reduction_->updateData(dataOut);
+}
+
+CScalarAlgorithmReduceScalar::~CScalarAlgorithmReduceScalar()
+{
+  if (0 != reduction_) delete reduction_;
+}
+
+void CScalarAlgorithmReduceScalar::computeIndexSourceMapping_(const std::vector<CArray<double,1>* >& dataAuxInputs)
+{
+  this->transformationMapping_.resize(1);
+  this->transformationWeight_.resize(1);
+
+  TransformationIndexMap& transMap = this->transformationMapping_[0];
+  TransformationWeightMap& transWeight = this->transformationWeight_[0];
+
+  transMap[0].push_back(0);
+  transWeight[0].push_back(1.0);
+
+}
+
+}
Index: /XIOS/dev/XIOS_DEV_CMIP6/src/transformation/scalar_algorithm_reduce_scalar.hpp
===================================================================
--- /XIOS/dev/XIOS_DEV_CMIP6/src/transformation/scalar_algorithm_reduce_scalar.hpp	(revision 1314)
+++ /XIOS/dev/XIOS_DEV_CMIP6/src/transformation/scalar_algorithm_reduce_scalar.hpp	(revision 1314)
@@ -0,0 +1,57 @@
+/*!
+   \file scalar_algorithm_reduce_scalar.hpp
+   \brief Algorithm for reduce an scalar to a scalar
+ */
+#ifndef __XIOS_SCALAR_ALGORITHM_REDUCE_SCALAR_HPP__
+#define __XIOS_SCALAR_ALGORITHM_REDUCE_SCALAR_HPP__
+
+#include "scalar_algorithm_transformation.hpp"
+#include "transformation.hpp"
+
+namespace xios {
+
+class CScalar;
+class CReduceScalarToScalar;
+class CReductionAlgorithm;
+
+/*!
+  \class CScalarAlgorithmReduceScalar
+  Reducing an scalar to a scalar
+*/
+class CScalarAlgorithmReduceScalar : public CScalarAlgorithmTransformation
+{
+public:
+  CScalarAlgorithmReduceScalar(CScalar* scalarDestination, CScalar* scalarSource, CReduceScalarToScalar* algo);
+
+  virtual void apply(const std::vector<std::pair<int,double> >& localIndex,
+                     const double* dataInput,
+                     CArray<double,1>& dataOut,
+                     std::vector<bool>& flagInitial,
+                     bool ignoreMissingValue, bool firstPass);
+
+  virtual void updateData(CArray<double,1>& dataOut);
+  
+  virtual ~CScalarAlgorithmReduceScalar();
+
+  static bool registerTrans();
+protected:
+  void computeIndexSourceMapping_(const std::vector<CArray<double,1>* >& dataAuxInputs);
+
+protected:
+  CReductionAlgorithm* reduction_;
+
+private:
+
+  static CGenericAlgorithmTransformation* create(CGrid* gridDst, CGrid* gridSrc,
+                                                CTransformation<CScalar>* transformation,
+                                                int elementPositionInGrid,
+                                                std::map<int, int>& elementPositionInGridSrc2ScalarPosition,
+                                                std::map<int, int>& elementPositionInGridSrc2AxisPosition,
+                                                std::map<int, int>& elementPositionInGridSrc2DomainPosition,
+                                                std::map<int, int>& elementPositionInGridDst2ScalarPosition,
+                                                std::map<int, int>& elementPositionInGridDst2AxisPosition,
+                                                std::map<int, int>& elementPositionInGridDst2DomainPosition);
+};
+
+}
+#endif // __XIOS_SCALAR_ALGORITHM_REDUCE_SCALAR_HPP__
Index: /XIOS/dev/XIOS_DEV_CMIP6/src/type/type_util.hpp
===================================================================
--- /XIOS/dev/XIOS_DEV_CMIP6/src/type/type_util.hpp	(revision 1313)
+++ /XIOS/dev/XIOS_DEV_CMIP6/src/type/type_util.hpp	(revision 1314)
@@ -52,5 +52,9 @@
     class CTemporalSplitting;
     class CTemporalSplittingGroup;
-    
+    class CDuplicateScalarToAxis;
+    class CDuplicateScalarToAxisGroup;
+    class CReduceScalarToScalar;
+    class CReduceScalarToScalarGroup;
+  
   template <typename T> inline string getStrType(void);
 
@@ -120,4 +124,8 @@
   macro(CTemporalSplitting)
   macro(CTemporalSplittingGroup)
+  macro(CDuplicateScalarToAxis)
+  macro(CDuplicateScalarToAxisGroup)
+  macro(CReduceScalarToScalar)
+  macro(CReduceScalarToScalarGroup)
   
 #undef macro
Index: /XIOS/dev/XIOS_DEV_CMIP6/src/xml_parser_decl.cpp
===================================================================
--- /XIOS/dev/XIOS_DEV_CMIP6/src/xml_parser_decl.cpp	(revision 1313)
+++ /XIOS/dev/XIOS_DEV_CMIP6/src/xml_parser_decl.cpp	(revision 1314)
@@ -35,4 +35,6 @@
     macro( ReduceDomainToScalar )
     macro( TemporalSplitting )
+    macro( DuplicateScalarToAxis )
+    macro( ReduceScalarToScalar )
   }
 }
