Index: XIOS/trunk/src/config/extract_axis_to_scalar_attribute.conf
===================================================================
--- XIOS/trunk/src/config/extract_axis_to_scalar_attribute.conf	(revision 960)
+++ XIOS/trunk/src/config/extract_axis_to_scalar_attribute.conf	(revision 960)
@@ -0,0 +1,2 @@
+/* Position of extracted slice */
+DECLARE_ATTRIBUTE(int,           position)
Index: XIOS/trunk/src/config/node_type.conf
===================================================================
--- XIOS/trunk/src/config/node_type.conf	(revision 959)
+++ XIOS/trunk/src/config/node_type.conf	(revision 960)
@@ -79,4 +79,8 @@
 #endif //__XIOS_CExpandDomain__
 
+#ifdef __XIOS_CExtractAxisToScalar__
+   DECLARE_NODE(ExtractAxisToScalar, extract_axis)
+#endif //__XIOS_CExtractAxisToScalar__
+
 #ifdef __XIOS_CContext__
    DECLARE_NODE_PAR(Context, context)
Index: XIOS/trunk/src/group_factory_decl.cpp
===================================================================
--- XIOS/trunk/src/group_factory_decl.cpp	(revision 959)
+++ XIOS/trunk/src/group_factory_decl.cpp	(revision 960)
@@ -37,3 +37,4 @@
   macro(CComputeConnectivityDomainGroup)
   macro(CExpandDomainGroup)
+  macro(CExtractAxisToScalarGroup)
 }
Index: XIOS/trunk/src/group_template_decl.cpp
===================================================================
--- XIOS/trunk/src/group_template_decl.cpp	(revision 959)
+++ XIOS/trunk/src/group_template_decl.cpp	(revision 960)
@@ -26,4 +26,5 @@
   macro(ComputeConnectivityDomain)
   macro(ExpandDomain)
+  macro(ExtractAxisToScalar)
 
 }
Index: XIOS/trunk/src/node/extract_axis_to_scalar.cpp
===================================================================
--- XIOS/trunk/src/node/extract_axis_to_scalar.cpp	(revision 960)
+++ XIOS/trunk/src/node/extract_axis_to_scalar.cpp	(revision 960)
@@ -0,0 +1,59 @@
+#include "extract_axis_to_scalar.hpp"
+#include "type.hpp"
+#include "axis.hpp"
+#include "scalar.hpp"
+
+namespace xios {
+
+  /// ////////////////////// DÃ©finitions ////////////////////// ///
+
+  CExtractAxisToScalar::CExtractAxisToScalar(void)
+    : CObjectTemplate<CExtractAxisToScalar>(), CExtractAxisToScalarAttributes(), CTransformation<CScalar>()
+  { /* Ne rien faire de plus */ }
+
+  CExtractAxisToScalar::CExtractAxisToScalar(const StdString & id)
+    : CObjectTemplate<CExtractAxisToScalar>(id), CExtractAxisToScalarAttributes(), CTransformation<CScalar>()
+  { /* Ne rien faire de plus */ }
+
+  CExtractAxisToScalar::~CExtractAxisToScalar(void)
+  {}
+
+  CTransformation<CScalar>* CExtractAxisToScalar::create(const StdString& id, xml::CXMLNode* node)
+  {
+    CExtractAxisToScalar* extractAxis = CExtractAxisToScalarGroup::get("extract_axis_to_scalar_definition")->createChild(id);
+    if (node) extractAxis->parse(*node);
+    return static_cast<CTransformation<CScalar>*>(extractAxis);
+  }
+
+  bool CExtractAxisToScalar::registerTrans()
+  {
+    return registerTransformation(TRANS_EXTRACT_AXIS_TO_SCALAR, CExtractAxisToScalar::create);
+  }
+
+  bool CExtractAxisToScalar::_dummyRegistered = CExtractAxisToScalar::registerTrans();
+
+  //----------------------------------------------------------------
+
+  StdString CExtractAxisToScalar::GetName(void)    { return StdString("extract_axis_to_scalar"); }
+  StdString CExtractAxisToScalar::GetDefName(void) { return StdString("extract_axis_to_scalar"); }
+  ENodeType CExtractAxisToScalar::GetType(void)    { return eExtractAxisToScalar; }
+
+  void CExtractAxisToScalar::checkValid(CScalar* scalarDst, CAxis* axisSrc)
+  {
+    int axis_n_glo = axisSrc->n_glo;
+    if (position.isEmpty())
+      ERROR("CExtractAxisToScalar::checkValid(CScalar* scalarDst, CAxis* axisSrc)",
+        << "Position should be specified"
+        << "Axis source " << axisSrc->getId() << std::endl
+        << "CScalar destination " << scalarDst->getId() << std::endl);
+
+    int position = this->position;
+
+    if ((position < 0) || (position > (axis_n_glo-1)))
+        ERROR("CExtractAxisToScalar::checkValid(CScalar* scalarDst, CAxis* axisSrc)",
+          << "Extract axis, position should be inside 0 and ni_glo of axis source"
+          << "Axis source " << axisSrc->getId() << std::endl
+          << "CScalar destination " << scalarDst->getId() << std::endl);
+  }
+
+}
Index: XIOS/trunk/src/node/extract_axis_to_scalar.hpp
===================================================================
--- XIOS/trunk/src/node/extract_axis_to_scalar.hpp	(revision 960)
+++ XIOS/trunk/src/node/extract_axis_to_scalar.hpp	(revision 960)
@@ -0,0 +1,67 @@
+#ifndef __XIOS_CExtractAxisToScalar__
+#define __XIOS_CExtractAxisToScalar__
+
+/// 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 CExtractAxisToScalarGroup;
+  class CExtractAxisToScalarAttributes;
+  class CExtractAxisToScalar;
+  class CAxis;
+  class CScalar;
+
+  ///--------------------------------------------------------------
+
+  // Declare/Define CFileAttribute
+  BEGIN_DECLARE_ATTRIBUTE_MAP(CExtractAxisToScalar)
+#include "extract_axis_to_scalar_attribute.conf"
+  END_DECLARE_ATTRIBUTE_MAP(CExtractAxisToScalar)
+
+  ///--------------------------------------------------------------
+  /*!
+    \class CExtractAxisToScalar
+    This class describes reduce_domain in xml file.
+  */
+  class CExtractAxisToScalar
+    : public CObjectTemplate<CExtractAxisToScalar>
+    , public CExtractAxisToScalarAttributes
+    , public CTransformation<CScalar>
+  {
+    public :
+      typedef CObjectTemplate<CExtractAxisToScalar> SuperClass;
+      typedef CExtractAxisToScalarAttributes SuperClassAttribute;
+
+    public :
+      /// Constructeurs ///
+      CExtractAxisToScalar(void);
+      explicit CExtractAxisToScalar(const StdString& id);
+
+      /// Destructeur ///
+      virtual ~CExtractAxisToScalar(void);
+
+      virtual void checkValid(CScalar* scalarDst, CAxis* axisSrc);
+
+      /// 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 CExtractAxisToScalar
+
+  DECLARE_GROUP(CExtractAxisToScalar);
+} // namespace xios
+
+#endif // __XIOS_CExtractAxisToScalar__
Index: XIOS/trunk/src/node/node_enum.hpp
===================================================================
--- XIOS/trunk/src/node/node_enum.hpp	(revision 959)
+++ XIOS/trunk/src/node/node_enum.hpp	(revision 960)
@@ -31,5 +31,6 @@
          eExtractDomainToAxis,
          eComputeConnectivityDomain,
-         eExpandDomain
+         eExpandDomain,
+         eExtractAxisToScalar
 
       } ENodeType;
Index: XIOS/trunk/src/node/node_type.hpp
===================================================================
--- XIOS/trunk/src/node/node_type.hpp	(revision 959)
+++ XIOS/trunk/src/node/node_type.hpp	(revision 960)
@@ -22,4 +22,5 @@
 #include "compute_connectivity_domain.hpp"
 #include "expand_domain.hpp"
+#include "extract_axis_to_scalar.hpp"
 
 
Index: XIOS/trunk/src/node/scalar.cpp
===================================================================
--- XIOS/trunk/src/node/scalar.cpp	(revision 959)
+++ XIOS/trunk/src/node/scalar.cpp	(revision 960)
@@ -32,4 +32,5 @@
    {
      m["reduce_axis"] = TRANS_REDUCE_AXIS_TO_SCALAR;
+     m["extract_axis"] = TRANS_EXTRACT_AXIS_TO_SCALAR;
    }
 
Index: XIOS/trunk/src/node/transformation_enum.hpp
===================================================================
--- XIOS/trunk/src/node/transformation_enum.hpp	(revision 959)
+++ XIOS/trunk/src/node/transformation_enum.hpp	(revision 960)
@@ -18,4 +18,5 @@
         TRANS_COMPUTE_CONNECTIVITY_DOMAIN = 9,
         TRANS_EXPAND_DOMAIN = 10,
+        TRANS_EXTRACT_AXIS_TO_SCALAR = 11,
       } ETranformationType;
 
Index: XIOS/trunk/src/object_factory_decl.cpp
===================================================================
--- XIOS/trunk/src/object_factory_decl.cpp	(revision 959)
+++ XIOS/trunk/src/object_factory_decl.cpp	(revision 960)
@@ -38,4 +38,5 @@
   macro(CComputeConnectivityDomain)
   macro(CExpandDomain)
+  macro(CExtractAxisToScalar)
 
   macro(CFieldGroup)
@@ -58,3 +59,4 @@
   macro(CComputeConnectivityDomainGroup)
   macro(CExpandDomainGroup)
+  macro(CExtractAxisToScalarGroup)
 }
Index: XIOS/trunk/src/object_template_decl.cpp
===================================================================
--- XIOS/trunk/src/object_template_decl.cpp	(revision 959)
+++ XIOS/trunk/src/object_template_decl.cpp	(revision 960)
@@ -25,4 +25,5 @@
   template class CObjectTemplate<CComputeConnectivityDomain>;
   template class CObjectTemplate<CExpandDomain>;
+  template class CObjectTemplate<CExtractAxisToScalar>;
 
   template class CObjectTemplate<CContextGroup>;
@@ -45,3 +46,4 @@
   template class CObjectTemplate<CComputeConnectivityDomainGroup>;
   template class CObjectTemplate<CExpandDomainGroup>;
+  template class CObjectTemplate<CExtractAxisToScalarGroup>;
 }
Index: XIOS/trunk/src/transformation/algo_types.hpp
===================================================================
--- XIOS/trunk/src/transformation/algo_types.hpp	(revision 959)
+++ XIOS/trunk/src/transformation/algo_types.hpp	(revision 960)
@@ -27,4 +27,6 @@
 #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 959)
+++ XIOS/trunk/src/transformation/grid_transformation_selector.cpp	(revision 960)
@@ -12,4 +12,27 @@
 
 namespace xios {
+
+/*!
+  Register transformation to the framework
+*/
+void CGridTransformationSelector::registerTransformations()
+{
+  //! Scalar
+  CScalarAlgorithmReduceScalar::registerTrans();
+  CScalarAlgorithmExtractScalar::registerTrans();
+
+  //! Axis
+  CAxisAlgorithmZoom::registerTrans();
+  CAxisAlgorithmExtractDomain::registerTrans();
+  CAxisAlgorithmInterpolate::registerTrans();
+  CAxisAlgorithmInverse::registerTrans();
+  CAxisAlgorithmReduceDomain::registerTrans();
+
+  //! Domain
+  CDomainAlgorithmComputeConnectivity::registerTrans();
+  CDomainAlgorithmInterpolate::registerTrans();
+  CDomainAlgorithmZoom::registerTrans();
+  CDomainAlgorithmExpand::registerTrans();
+}
 
 CGridTransformationSelector::CGridTransformationSelector(CGrid* destination, CGrid* source, TransformationType type)
@@ -308,24 +331,3 @@
 }
 
-
-void CGridTransformationSelector::registerTransformations()
-{
-  //! Scalar
-  CScalarAlgorithmReduceScalar::registerTrans();
-
-  //! Axis
-  CAxisAlgorithmZoom::registerTrans();
-  CAxisAlgorithmExtractDomain::registerTrans();
-  CAxisAlgorithmInterpolate::registerTrans();
-  CAxisAlgorithmInverse::registerTrans();
-  CAxisAlgorithmReduceDomain::registerTrans();
-
-  //! Domain
-  CDomainAlgorithmComputeConnectivity::registerTrans();
-  CDomainAlgorithmInterpolate::registerTrans();
-  CDomainAlgorithmZoom::registerTrans();
-  CDomainAlgorithmExpand::registerTrans();
-
-}
-
-}
+}
Index: XIOS/trunk/src/transformation/scalar_algorithm_extract_axis.cpp
===================================================================
--- XIOS/trunk/src/transformation/scalar_algorithm_extract_axis.cpp	(revision 960)
+++ XIOS/trunk/src/transformation/scalar_algorithm_extract_axis.cpp	(revision 960)
@@ -0,0 +1,79 @@
+/*!
+   \file scalar_algorithm_extract_scalar.cpp
+   \author Ha NGUYEN
+   \since 23 June 2016
+   \date 23 June 2016
+
+   \brief Algorithm for extract an axis to a scalar
+ */
+#include "scalar_algorithm_extract_axis.hpp"
+#include "axis.hpp"
+#include "scalar.hpp"
+#include "extract_axis_to_scalar.hpp"
+#include "sum.hpp"
+#include "grid.hpp"
+#include "grid_transformation_factory_impl.hpp"
+
+namespace xios {
+CGenericAlgorithmTransformation* CScalarAlgorithmExtractScalar::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<CAxis*> axisListSrcP  = gridSrc->getAxis();
+
+  CExtractAxisToScalar* extractAxis = dynamic_cast<CExtractAxisToScalar*> (transformation);
+  int scalarDstIndex = elementPositionInGridDst2ScalarPosition[elementPositionInGrid];
+  int axisSrcIndex = elementPositionInGridSrc2AxisPosition[elementPositionInGrid];
+
+  return (new CScalarAlgorithmExtractScalar(scalarListDestP[scalarDstIndex], axisListSrcP[axisSrcIndex], extractAxis));
+}
+
+bool CScalarAlgorithmExtractScalar::registerTrans()
+{
+  CGridTransformationFactory<CScalar>::registerTransformation(TRANS_EXTRACT_AXIS_TO_SCALAR, create);
+}
+
+CScalarAlgorithmExtractScalar::CScalarAlgorithmExtractScalar(CScalar* scalarDestination, CAxis* axisSource, CExtractAxisToScalar* algo)
+ : CScalarAlgorithmTransformation(scalarDestination, axisSource),
+   reduction_(0)
+{
+  algo->checkValid(scalarDestination, axisSource);
+  StdString op = "extract";
+  pos_ = algo->position;
+  reduction_ = CReductionAlgorithm::createOperation(CReductionAlgorithm::ReductionOperations[op]);
+}
+
+void CScalarAlgorithmExtractScalar::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);
+}
+
+CScalarAlgorithmExtractScalar::~CScalarAlgorithmExtractScalar()
+{
+  if (0 != reduction_) delete reduction_;
+}
+
+void CScalarAlgorithmExtractScalar::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(pos_);
+  transWeight[0].push_back(1.0);
+}
+
+}
Index: XIOS/trunk/src/transformation/scalar_algorithm_extract_axis.hpp
===================================================================
--- XIOS/trunk/src/transformation/scalar_algorithm_extract_axis.hpp	(revision 960)
+++ XIOS/trunk/src/transformation/scalar_algorithm_extract_axis.hpp	(revision 960)
@@ -0,0 +1,63 @@
+/*!
+   \file scalar_algorithm_extract_scalar.hpp
+   \author Ha NGUYEN
+   \since 23 June 2016
+   \date 23 June 2016
+
+   \brief Algorithm for extract an axis to a scalar
+ */
+#ifndef __XIOS_SCALAR_ALGORITHM_EXTRACT_AXIS_HPP__
+#define __XIOS_SCALAR_ALGORITHM_EXTRACT_AXIS_HPP__
+
+#include "scalar_algorithm_transformation.hpp"
+#include "transformation.hpp"
+
+namespace xios {
+
+class CScalar;
+class CAxis;
+class CExtractAxisToScalar;
+class CReductionAlgorithm;
+
+/*!
+  \class CScalarAlgorithmExtractScalar
+  Extract a scalar from an axis
+*/
+class CScalarAlgorithmExtractScalar : public CScalarAlgorithmTransformation
+{
+public:
+  CScalarAlgorithmExtractScalar(CScalar* scalarDestination, CAxis* axisSource, CExtractAxisToScalar* 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 ~CScalarAlgorithmExtractScalar();
+
+  static bool registerTrans();
+
+protected:
+  int pos_;
+
+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_EXTRACT_AXIS_HPP__
Index: XIOS/trunk/src/type/type_util.hpp
===================================================================
--- XIOS/trunk/src/type/type_util.hpp	(revision 959)
+++ XIOS/trunk/src/type/type_util.hpp	(revision 960)
@@ -44,4 +44,6 @@
     class CExpandDomain;
     class CExpandDomainGroup;
+    class CExtractAxisToScalar;
+    class CExtractAxisToScalarGroup;
 
   template <typename T> inline string getStrType(void);
@@ -104,4 +106,7 @@
   macro(CExpandDomain)
   macro(CExpandDomainGroup)
+  macro(CExtractAxisToScalar)
+  macro(CExtractAxisToScalarGroup)
+
 #undef macro
 }
Index: XIOS/trunk/src/xml_parser_decl.cpp
===================================================================
--- XIOS/trunk/src/xml_parser_decl.cpp	(revision 959)
+++ XIOS/trunk/src/xml_parser_decl.cpp	(revision 960)
@@ -31,4 +31,5 @@
     macro( ComputeConnectivityDomain )
     macro( ExpandDomain )
+    macro( ExtractAxisToScalar )
   }
 }
