Index: /XIOS/trunk/src/config/node_type.conf
===================================================================
--- /XIOS/trunk/src/config/node_type.conf	(revision 975)
+++ /XIOS/trunk/src/config/node_type.conf	(revision 976)
@@ -83,4 +83,8 @@
 #endif //__XIOS_CExtractAxisToScalar__
 
+#ifdef __XIOS_CReduceDomainToScalar__
+   DECLARE_NODE(ReduceDomainToScalar, reduce_domain_to_scalar)
+#endif //__XIOS_CReduceDomainToScalar__
+
 #ifdef __XIOS_CContext__
    DECLARE_NODE_PAR(Context, context)
Index: /XIOS/trunk/src/config/reduce_domain_to_scalar_attribute.conf
===================================================================
--- /XIOS/trunk/src/config/reduce_domain_to_scalar_attribute.conf	(revision 976)
+++ /XIOS/trunk/src/config/reduce_domain_to_scalar_attribute.conf	(revision 976)
@@ -0,0 +1,1 @@
+DECLARE_ENUM4(operation, min, max, sum, average)
Index: /XIOS/trunk/src/group_factory_decl.cpp
===================================================================
--- /XIOS/trunk/src/group_factory_decl.cpp	(revision 975)
+++ /XIOS/trunk/src/group_factory_decl.cpp	(revision 976)
@@ -38,3 +38,4 @@
   macro(CExpandDomainGroup)
   macro(CExtractAxisToScalarGroup)
+  macro(CReduceDomainToScalarGroup)
 }
Index: /XIOS/trunk/src/group_template_decl.cpp
===================================================================
--- /XIOS/trunk/src/group_template_decl.cpp	(revision 975)
+++ /XIOS/trunk/src/group_template_decl.cpp	(revision 976)
@@ -27,4 +27,5 @@
   macro(ExpandDomain)
   macro(ExtractAxisToScalar)
+  macro(ReduceDomainToScalar)
 
 }
Index: /XIOS/trunk/src/node/grid.hpp
===================================================================
--- /XIOS/trunk/src/node/grid.hpp	(revision 975)
+++ /XIOS/trunk/src/node/grid.hpp	(revision 976)
@@ -346,5 +346,5 @@
         ++idx; ++idxAxis;
       }
-      else ++idx;
+      else {};
     }
 
Index: /XIOS/trunk/src/node/node_enum.hpp
===================================================================
--- /XIOS/trunk/src/node/node_enum.hpp	(revision 975)
+++ /XIOS/trunk/src/node/node_enum.hpp	(revision 976)
@@ -32,5 +32,6 @@
          eComputeConnectivityDomain,
          eExpandDomain,
-         eExtractAxisToScalar
+         eExtractAxisToScalar,
+         eReduceDomainToScalar
 
       } ENodeType;
Index: /XIOS/trunk/src/node/node_type.hpp
===================================================================
--- /XIOS/trunk/src/node/node_type.hpp	(revision 975)
+++ /XIOS/trunk/src/node/node_type.hpp	(revision 976)
@@ -23,4 +23,6 @@
 #include "expand_domain.hpp"
 #include "extract_axis_to_scalar.hpp"
+#include "reduce_domain_to_scalar.hpp"
+
 
 
Index: /XIOS/trunk/src/node/reduce_domain_to_scalar.cpp
===================================================================
--- /XIOS/trunk/src/node/reduce_domain_to_scalar.cpp	(revision 976)
+++ /XIOS/trunk/src/node/reduce_domain_to_scalar.cpp	(revision 976)
@@ -0,0 +1,43 @@
+#include "reduce_domain_to_scalar.hpp"
+#include "type.hpp"
+
+namespace xios {
+
+  /// ////////////////////// DÃ©finitions ////////////////////// ///
+
+  CReduceDomainToScalar::CReduceDomainToScalar(void)
+    : CObjectTemplate<CReduceDomainToScalar>(), CReduceDomainToScalarAttributes(), CTransformation<CScalar>()
+  { /* Ne rien faire de plus */ }
+
+  CReduceDomainToScalar::CReduceDomainToScalar(const StdString & id)
+    : CObjectTemplate<CReduceDomainToScalar>(id), CReduceDomainToScalarAttributes(), CTransformation<CScalar>()
+  { /* Ne rien faire de plus */ }
+
+  CReduceDomainToScalar::~CReduceDomainToScalar(void)
+  {}
+
+  CTransformation<CScalar>* CReduceDomainToScalar::create(const StdString& id, xml::CXMLNode* node)
+  {
+    CReduceDomainToScalar* reduceDomain = CReduceDomainToScalarGroup::get("reduce_domain_to_scalar_definition")->createChild(id);
+    if (node) reduceDomain->parse(*node);
+    return static_cast<CTransformation<CScalar>*>(reduceDomain);
+  }
+
+  bool CReduceDomainToScalar::registerTrans()
+  {
+    return registerTransformation(TRANS_REDUCE_DOMAIN_TO_SCALAR, CReduceDomainToScalar::create);
+  }
+
+  bool CReduceDomainToScalar::_dummyRegistered = CReduceDomainToScalar::registerTrans();
+
+  //----------------------------------------------------------------
+
+  StdString CReduceDomainToScalar::GetName(void)    { return StdString("reduce_domain_to_scalar"); }
+  StdString CReduceDomainToScalar::GetDefName(void) { return StdString("reduce_domain_to_scalar"); }
+  ENodeType CReduceDomainToScalar::GetType(void)    { return eReduceDomainToScalar; }
+
+  void CReduceDomainToScalar::checkValid(CScalar* scalarDst, CDomain* domainSrc)
+  {
+  }
+
+}
Index: /XIOS/trunk/src/node/reduce_domain_to_scalar.hpp
===================================================================
--- /XIOS/trunk/src/node/reduce_domain_to_scalar.hpp	(revision 976)
+++ /XIOS/trunk/src/node/reduce_domain_to_scalar.hpp	(revision 976)
@@ -0,0 +1,67 @@
+#ifndef __XIOS_CReduceDomainToScalar__
+#define __XIOS_CReduceDomainToScalar__
+
+/// 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 CReduceDomainToScalarGroup;
+  class CReduceDomainToScalarAttributes;
+  class CReduceDomainToScalar;
+  class CDomain;
+  class CScalar;
+
+  ///--------------------------------------------------------------
+
+  // Declare/Define CFileAttribute
+  BEGIN_DECLARE_ATTRIBUTE_MAP(CReduceDomainToScalar)
+#include "reduce_domain_to_scalar_attribute.conf"
+  END_DECLARE_ATTRIBUTE_MAP(CReduceDomainToScalar)
+
+  ///--------------------------------------------------------------
+  /*!
+    \class CReduceDomainToScalar
+    This class describes reduce_domain in xml file.
+  */
+  class CReduceDomainToScalar
+    : public CObjectTemplate<CReduceDomainToScalar>
+    , public CReduceDomainToScalarAttributes
+    , public CTransformation<CScalar>
+  {
+    public :
+      typedef CObjectTemplate<CReduceDomainToScalar> SuperClass;
+      typedef CReduceDomainToScalarAttributes SuperClassAttribute;
+
+    public :
+      /// Constructeurs ///
+      CReduceDomainToScalar(void);
+      explicit CReduceDomainToScalar(const StdString& id);
+
+      /// Destructeur ///
+      virtual ~CReduceDomainToScalar(void);
+
+      virtual void checkValid(CScalar* scalarDst, CDomain* domainSrc);
+
+      /// 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 CReduceDomainToScalar
+
+  DECLARE_GROUP(CReduceDomainToScalar);
+} // namespace xios
+
+#endif // __XIOS_CReduceDomainToScalar__
Index: /XIOS/trunk/src/node/scalar.cpp
===================================================================
--- /XIOS/trunk/src/node/scalar.cpp	(revision 975)
+++ /XIOS/trunk/src/node/scalar.cpp	(revision 976)
@@ -31,6 +31,7 @@
    bool CScalar::initializeTransformationMap(std::map<StdString, ETranformationType>& m)
    {
-     m["reduce_axis"] = TRANS_REDUCE_AXIS_TO_SCALAR;
-     m["extract_axis"] = TRANS_EXTRACT_AXIS_TO_SCALAR;
+     m["reduce_axis"]   = TRANS_REDUCE_AXIS_TO_SCALAR;
+     m["extract_axis"]  = TRANS_EXTRACT_AXIS_TO_SCALAR;
+     m["reduce_domain"] = TRANS_REDUCE_DOMAIN_TO_SCALAR;
    }
 
Index: /XIOS/trunk/src/node/transformation_enum.hpp
===================================================================
--- /XIOS/trunk/src/node/transformation_enum.hpp	(revision 975)
+++ /XIOS/trunk/src/node/transformation_enum.hpp	(revision 976)
@@ -19,4 +19,5 @@
         TRANS_EXPAND_DOMAIN = 10,
         TRANS_EXTRACT_AXIS_TO_SCALAR = 11,
+        TRANS_REDUCE_DOMAIN_TO_SCALAR = 12,
       } ETranformationType;
 
Index: /XIOS/trunk/src/object_factory_decl.cpp
===================================================================
--- /XIOS/trunk/src/object_factory_decl.cpp	(revision 975)
+++ /XIOS/trunk/src/object_factory_decl.cpp	(revision 976)
@@ -39,4 +39,5 @@
   macro(CExpandDomain)
   macro(CExtractAxisToScalar)
+  macro(CReduceDomainToScalar)
 
   macro(CFieldGroup)
@@ -60,3 +61,4 @@
   macro(CExpandDomainGroup)
   macro(CExtractAxisToScalarGroup)
+  macro(CReduceDomainToScalarGroup)
 }
Index: /XIOS/trunk/src/object_template_decl.cpp
===================================================================
--- /XIOS/trunk/src/object_template_decl.cpp	(revision 975)
+++ /XIOS/trunk/src/object_template_decl.cpp	(revision 976)
@@ -26,4 +26,5 @@
   template class CObjectTemplate<CExpandDomain>;
   template class CObjectTemplate<CExtractAxisToScalar>;
+  template class CObjectTemplate<CReduceDomainToScalar>;
 
   template class CObjectTemplate<CContextGroup>;
@@ -47,3 +48,4 @@
   template class CObjectTemplate<CExpandDomainGroup>;
   template class CObjectTemplate<CExtractAxisToScalarGroup>;
+  template class CObjectTemplate<CReduceDomainToScalarGroup>;
 }
Index: /XIOS/trunk/src/transformation/algo_types.hpp
===================================================================
--- /XIOS/trunk/src/transformation/algo_types.hpp	(revision 975)
+++ /XIOS/trunk/src/transformation/algo_types.hpp	(revision 976)
@@ -10,23 +10,23 @@
 #define __XIOS_ALGORITHM_TRANSFORMATION_TYPES_HPP__
 
+#include "scalar_algorithm_reduce_axis.hpp"
+#include "scalar_algorithm_extract_axis.hpp"
+#include "scalar_algorithm_reduce_domain.hpp"
 
-#include "reduce_axis_to_scalar.hpp"
-#include "scalar_algorithm_reduce_axis.hpp"
 #include "axis_algorithm_inverse.hpp"
 #include "axis_algorithm_zoom.hpp"
 #include "axis_algorithm_interpolate.hpp"
-#include "domain_algorithm_zoom.hpp"
-#include "domain_algorithm_interpolate.hpp"
-#include "reduce_domain_to_axis.hpp"
 #include "axis_algorithm_reduce_domain.hpp"
 #include "axis_algorithm_transformation.hpp"
 #include "axis_algorithm_extract_domain.hpp"
-#include "extract_domain_to_axis.hpp"
+
+#include "domain_algorithm_zoom.hpp"
+#include "domain_algorithm_interpolate.hpp"
 #include "domain_algorithm_compute_connectivity.hpp"
-#include "compute_connectivity_domain.hpp"
-#include "expand_domain.hpp"
 #include "domain_algorithm_expand.hpp"
-#include "extract_axis_to_scalar.hpp"
-#include "scalar_algorithm_extract_axis.hpp"
+
+
+
+
 
 #endif // __XIOS_ALGORITHM_TRANSFORMATION_TYPES_HPP__
Index: /XIOS/trunk/src/transformation/grid_transformation_selector.cpp
===================================================================
--- /XIOS/trunk/src/transformation/grid_transformation_selector.cpp	(revision 975)
+++ /XIOS/trunk/src/transformation/grid_transformation_selector.cpp	(revision 976)
@@ -21,4 +21,5 @@
   CScalarAlgorithmReduceScalar::registerTrans();
   CScalarAlgorithmExtractScalar::registerTrans();
+  CScalarAlgorithmReduceDomain::registerTrans();
 
   //! Axis
Index: /XIOS/trunk/src/transformation/scalar_algorithm_reduce_domain.cpp
===================================================================
--- /XIOS/trunk/src/transformation/scalar_algorithm_reduce_domain.cpp	(revision 976)
+++ /XIOS/trunk/src/transformation/scalar_algorithm_reduce_domain.cpp	(revision 976)
@@ -0,0 +1,112 @@
+/*!
+   \file scalar_algorithm_reduce_domain.cpp
+   \author Ha NGUYEN
+   \since 23 June 2016
+   \date 23 June 2016
+
+   \brief Algorithm for reduce a domain to a scalar
+ */
+#include "scalar_algorithm_reduce_domain.hpp"
+#include "domain.hpp"
+#include "scalar.hpp"
+#include "reduce_domain_to_scalar.hpp"
+#include "grid.hpp"
+#include "grid_transformation_factory_impl.hpp"
+
+#include "reduction.hpp"
+
+namespace xios {
+CGenericAlgorithmTransformation* CScalarAlgorithmReduceDomain::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<CDomain*> domainListSrcP  = gridSrc->getDomains();
+
+  CReduceDomainToScalar* reduceDomain = dynamic_cast<CReduceDomainToScalar*> (transformation);
+  int scalarDstIndex = elementPositionInGridDst2ScalarPosition[elementPositionInGrid];
+  int domainSrcIndex = elementPositionInGridSrc2DomainPosition[elementPositionInGrid];
+
+  return (new CScalarAlgorithmReduceDomain(scalarListDestP[scalarDstIndex], domainListSrcP[domainSrcIndex], reduceDomain));
+}
+
+bool CScalarAlgorithmReduceDomain::registerTrans()
+{
+  CGridTransformationFactory<CScalar>::registerTransformation(TRANS_REDUCE_DOMAIN_TO_SCALAR, create);
+}
+
+CScalarAlgorithmReduceDomain::CScalarAlgorithmReduceDomain(CScalar* scalarDestination, CDomain* domainSource, CReduceDomainToScalar* algo)
+ : CScalarAlgorithmTransformation(scalarDestination, domainSource),
+   reduction_(0)
+{
+  StdString op;
+  switch (algo->operation)
+  {
+    case CReduceDomainToScalar::operation_attr::sum:
+      op = "sum";
+      break;
+    case CReduceDomainToScalar::operation_attr::min:
+      op = "min";
+      break;
+    case CReduceDomainToScalar::operation_attr::max:
+      op = "max";
+      break;
+    case CReduceDomainToScalar::operation_attr::average:
+      op = "average";
+      break;
+    default:
+        ERROR("CScalarAlgorithmReduceDomain::CScalarAlgorithmReduceDomain(CDomain* domainDestination, CDomain* domainSource, CReduceDomainToScalar* algo)",
+         << "Operation must be defined."
+         << "Domain source " <<domainSource->getId() << std::endl
+         << "Scalar destination " << scalarDestination->getId());
+
+  }
+  
+  if (CReductionAlgorithm::ReductionOperations.end() == CReductionAlgorithm::ReductionOperations.find(op))
+    ERROR("CScalarAlgorithmReduceDomain::CScalarAlgorithmReduceDomain(CDomain* domainDestination, CDomain* domainSource, CReduceDomainToScalar* algo)",
+       << "Operation '" << op << "' not found. Please make sure to use a supported one"
+       << "Domain source " <<domainSource->getId() << std::endl
+       << "Scalar destination " << scalarDestination->getId());
+
+  reduction_ = CReductionAlgorithm::createOperation(CReductionAlgorithm::ReductionOperations[op]);
+}
+
+void CScalarAlgorithmReduceDomain::apply(const std::vector<std::pair<int,double> >& localIndex,
+                                         const double* dataInput,
+                                         CArray<double,1>& dataOut,
+                                         std::vector<bool>& flagInitial,
+                                         const double& defaultValue)
+{
+  reduction_->apply(localIndex, dataInput, dataOut, flagInitial);
+}
+
+CScalarAlgorithmReduceDomain::~CScalarAlgorithmReduceDomain()
+{
+  if (0 != reduction_) delete reduction_;
+}
+
+void CScalarAlgorithmReduceDomain::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];
+
+  int globalIndexSize = domainSrc_->ni_glo * domainSrc_->nj_glo;  
+
+  transMap[0].resize(globalIndexSize);
+  transWeight[0].resize(globalIndexSize, 1.0);
+  for (int idx = 0; idx < globalIndexSize; ++idx)
+  {     
+    transMap[0][idx] = idx;    
+  }
+}
+
+}
Index: /XIOS/trunk/src/transformation/scalar_algorithm_reduce_domain.hpp
===================================================================
--- /XIOS/trunk/src/transformation/scalar_algorithm_reduce_domain.hpp	(revision 976)
+++ /XIOS/trunk/src/transformation/scalar_algorithm_reduce_domain.hpp	(revision 976)
@@ -0,0 +1,60 @@
+/*!
+   \file scalar_algorithm_reduce_scalar.hpp
+   \author Ha NGUYEN
+   \since 13 Oct 2016
+   \date 13 Oct 2016
+
+   \brief Algorithm for reduce an DOMAIN to a scalar
+ */
+#ifndef __XIOS_SCALAR_ALGORITHM_REDUCE_DOMAIN_HPP__
+#define __XIOS_SCALAR_ALGORITHM_REDUCE_DOMAIN_HPP__
+
+#include "scalar_algorithm_transformation.hpp"
+#include "transformation.hpp"
+
+namespace xios {
+
+class CScalar;
+class CDomain;
+class CReduceDomainToScalar;
+class CReductionAlgorithm;
+
+/*!
+  \class CScalarAlgorithmReduceDomain
+  Reducing an DOMAIN to a scalar
+*/
+class CScalarAlgorithmReduceDomain : public CScalarAlgorithmTransformation
+{
+public:
+  CScalarAlgorithmReduceDomain(CScalar* scalarDestination, CDomain* domainSource, CReduceDomainToScalar* algo);
+
+  virtual void apply(const std::vector<std::pair<int,double> >& localIndex,
+                     const double* dataInput,
+                     CArray<double,1>& dataOut,
+                     std::vector<bool>& flagInitial,
+                     const double& defaultValue);
+
+  virtual ~CScalarAlgorithmReduceDomain();
+
+  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>& elementPositionInGridSrc2DOMAINPosition,
+                                                std::map<int, int>& elementPositionInGridSrc2DomainPosition,
+                                                std::map<int, int>& elementPositionInGridDst2ScalarPosition,
+                                                std::map<int, int>& elementPositionInGridDst2DOMAINPosition,
+                                                std::map<int, int>& elementPositionInGridDst2DomainPosition);
+};
+
+}
+#endif // __XIOS_SCALAR_ALGORITHM_REDUCE_DOMAIN_HPP__
Index: /XIOS/trunk/src/transformation/scalar_algorithm_transformation.cpp
===================================================================
--- /XIOS/trunk/src/transformation/scalar_algorithm_transformation.cpp	(revision 975)
+++ /XIOS/trunk/src/transformation/scalar_algorithm_transformation.cpp	(revision 976)
@@ -3,5 +3,5 @@
    \author Ha NGUYEN
    \since 23 June 2016
-   \date 23 June 2016
+   \date 23 Oct 2016
 
    \brief Interface for all scalar transformation algorithms.
@@ -48,11 +48,13 @@
 
 /*!
-  Compute global index of scalar on different processes
-  \param [in] globalScalarIndex global index of scalar source
-  \param [out] globalScalarIndexOnProc processes which contain the corresponding global index of scalar source
+  Compute global index of element source on different processes on knowing the global index source of transformation
+
+  \param [in] globalIndexElementSource global index source of transformation (represented in the transformation mapping)
+  \param [in] elementSourceType type of element source
+  \param [out] globalIndexElementSourceOnProc processes which contain the corresponding global index of scalar source
 */
-void CScalarAlgorithmTransformation::computeExchangeGlobalIndex(const CArray<size_t,1>& globalScalarIndex,
-                                                                int elementType,
-                                                                CClientClientDHTInt::Index2VectorInfoTypeMap& globalScalarIndexOnProc)
+void CScalarAlgorithmTransformation::computeExchangeGlobalIndex(const CArray<size_t,1>& globalIndexElementSource,
+                                                                int elementSourceType,
+                                                                CClientClientDHTInt::Index2VectorInfoTypeMap& globalIndexElementSourceOnProc)
 {
   CContext* context = CContext::getCurrent();
@@ -61,5 +63,26 @@
   int clientSize = client->clientSize;
 
-  if (1 == elementType)
+  if (2 == elementSourceType) // Source is a domain
+  {
+    size_t globalIndex;
+    int nIndexSize = domainSrc_->i_index.numElements();
+    CArray<int,1>& iIndex = domainSrc_->i_index;
+    CArray<int,1>& jIndex = domainSrc_->j_index;
+    int niGlo = domainSrc_->ni_glo;
+
+    CClientClientDHTInt::Index2VectorInfoTypeMap globalIndex2ProcRank;
+    globalIndex2ProcRank.rehash(std::ceil(nIndexSize/globalIndex2ProcRank.max_load_factor()));
+    for (int idx = 0; idx < nIndexSize; ++idx)
+    {
+      globalIndex = jIndex(idx) * niGlo + iIndex(idx);
+      globalIndex2ProcRank[globalIndex].resize(1);
+      globalIndex2ProcRank[globalIndex][0] = clientRank;
+    }
+
+    CClientClientDHTInt dhtIndexProcRank(globalIndex2ProcRank, client->intraComm);
+    dhtIndexProcRank.computeIndexInfoMapping(globalIndexElementSource);
+    globalIndexElementSourceOnProc = dhtIndexProcRank.getInfoIndexMap();
+  }
+  else if (1 == elementSourceType) // Source is an axis
   {
     size_t globalIndex;
@@ -75,6 +98,17 @@
 
     CClientClientDHTInt dhtIndexProcRank(globalIndex2ProcRank, client->intraComm);
-    dhtIndexProcRank.computeIndexInfoMapping(globalScalarIndex);
-    globalScalarIndexOnProc = dhtIndexProcRank.getInfoIndexMap();
+    dhtIndexProcRank.computeIndexInfoMapping(globalIndexElementSource);
+    globalIndexElementSourceOnProc = dhtIndexProcRank.getInfoIndexMap();
+  }
+  else // scalar
+  {
+    size_t globalIndex = 0;    
+    CClientClientDHTInt::Index2VectorInfoTypeMap globalIndex2ProcRank;
+    globalIndex2ProcRank[globalIndex].resize(1);
+    globalIndex2ProcRank[globalIndex][0] = clientRank;
+
+    CClientClientDHTInt dhtIndexProcRank(globalIndex2ProcRank, client->intraComm);
+    dhtIndexProcRank.computeIndexInfoMapping(globalIndexElementSource);
+    globalIndexElementSourceOnProc = dhtIndexProcRank.getInfoIndexMap();
   }
 }
Index: /XIOS/trunk/src/type/type_util.hpp
===================================================================
--- /XIOS/trunk/src/type/type_util.hpp	(revision 975)
+++ /XIOS/trunk/src/type/type_util.hpp	(revision 976)
@@ -46,4 +46,6 @@
     class CExtractAxisToScalar;
     class CExtractAxisToScalarGroup;
+    class CReduceDomainToScalar;
+    class CReduceDomainToScalarGroup;
 
   template <typename T> inline string getStrType(void);
@@ -108,5 +110,7 @@
   macro(CExtractAxisToScalar)
   macro(CExtractAxisToScalarGroup)
-
+  macro(CReduceDomainToScalar)
+  macro(CReduceDomainToScalarGroup)
+  
 #undef macro
 }
Index: /XIOS/trunk/src/xml_parser_decl.cpp
===================================================================
--- /XIOS/trunk/src/xml_parser_decl.cpp	(revision 975)
+++ /XIOS/trunk/src/xml_parser_decl.cpp	(revision 976)
@@ -32,4 +32,5 @@
     macro( ExpandDomain )
     macro( ExtractAxisToScalar )
+    macro( ReduceDomainToScalar )
   }
 }
