Index: XIOS/dev/branch_openmp/src/node/extract_axis.cpp
===================================================================
--- XIOS/dev/branch_openmp/src/node/extract_axis.cpp	(revision 1643)
+++ XIOS/dev/branch_openmp/src/node/extract_axis.cpp	(revision 1643)
@@ -0,0 +1,79 @@
+#include "extract_axis.hpp"
+#include "type.hpp"
+
+namespace xios {
+
+  /// ////////////////////// DÃ©finitions ////////////////////// ///
+
+  CExtractAxis::CExtractAxis(void)
+    : CObjectTemplate<CExtractAxis>(), CExtractAxisAttributes(), CTransformation<CAxis>()
+  { /* Ne rien faire de plus */ }
+
+  CExtractAxis::CExtractAxis(const StdString & id)
+    : CObjectTemplate<CExtractAxis>(id), CExtractAxisAttributes(), CTransformation<CAxis>()
+  { /* Ne rien faire de plus */ }
+
+  CExtractAxis::~CExtractAxis(void)
+  {}
+
+  CTransformation<CAxis>* CExtractAxis::create(const StdString& id, xml::CXMLNode* node)
+  {
+    CExtractAxis* extractAxis = CExtractAxisGroup::get("extract_axis_definition")->createChild(id);
+    if (node) extractAxis->parse(*node);
+    return static_cast<CTransformation<CAxis>*>(extractAxis);
+  }
+
+  bool CExtractAxis::registerTrans()
+  {
+    return registerTransformation(TRANS_EXTRACT_AXIS, CExtractAxis::create);
+  }
+
+  bool CExtractAxis::_dummyRegistered = CExtractAxis::registerTrans();
+
+  //----------------------------------------------------------------
+
+  StdString CExtractAxis::GetName(void)    { return StdString("extract_axis"); }
+  StdString CExtractAxis::GetDefName(void) { return StdString("extract_axis"); }
+  ENodeType CExtractAxis::GetType(void)    { return eExtractAxis; }
+
+  void CExtractAxis::checkValid(CAxis* axisDest)
+  {
+    int axisIBegin, axisNi, axisGlobalSize;
+    int begin, end, n;
+
+    axisIBegin = axisDest->begin.getValue();
+    axisNi     = axisDest->n.getValue();
+    axisGlobalSize   = axisDest->n_glo.getValue();
+
+    bool extractByIndex = !this->index.isEmpty() && (0 != this->index.numElements());
+
+    if (extractByIndex)
+    {
+      begin = min(this->index);
+      end   = max(this->index);
+      n     = end - begin + 1;
+    }
+    else
+    {
+      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("CExtractAxis::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");
+    
+    if (extractByIndex && (!this->begin.isEmpty() || !this->n.isEmpty()))
+      ERROR("CExtractAxis::checkValid(CAxis* axisDest)",
+            << "Only one type of extract is accepted. Define extract by index with global_extract_index or define extract with begin and n. "
+            << "Axis transformation [ id = '" << axisDest->getId() << "' , context = '" << CObjectFactory::GetCurrentContextId() << "' ] are not well specified");
+
+    this->begin.setValue(begin);
+    this->n.setValue(n);
+
+  }
+
+}
Index: XIOS/dev/branch_openmp/src/node/extract_axis.hpp
===================================================================
--- XIOS/dev/branch_openmp/src/node/extract_axis.hpp	(revision 1643)
+++ XIOS/dev/branch_openmp/src/node/extract_axis.hpp	(revision 1643)
@@ -0,0 +1,67 @@
+#ifndef __XIOS_CExtractAxis__
+#define __XIOS_CExtractAxis__
+
+/// 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"
+#include "axis.hpp"
+
+namespace xios {
+  /// ////////////////////// DÃ©clarations ////////////////////// ///
+  class CExtractAxisGroup;
+  class CExtractAxisAttributes;
+  class CExtractAxis;
+  class CAxis;
+
+  ///--------------------------------------------------------------
+
+  // Declare/Define CFileAttribute
+  BEGIN_DECLARE_ATTRIBUTE_MAP(CExtractAxis)
+#include "extract_axis_attribute.conf"
+  END_DECLARE_ATTRIBUTE_MAP(CExtractAxis)
+
+  ///--------------------------------------------------------------
+  /*!
+    \class CExtractAxis
+    This class describes extract_axis in xml file.
+  */
+  class CExtractAxis
+    : public CObjectTemplate<CExtractAxis>
+    , public CExtractAxisAttributes
+    , public CTransformation<CAxis>
+  {
+    public :
+      typedef CObjectTemplate<CExtractAxis> SuperClass;
+      typedef CExtractAxisAttributes SuperClassAttribute;
+
+    public :
+      /// Constructeurs ///
+      CExtractAxis(void);
+      explicit CExtractAxis(const StdString& id);
+
+      /// Destructeur ///
+      virtual ~CExtractAxis(void);
+
+      virtual void checkValid(CAxis* axisDest);
+
+      /// 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 CExtractAxis
+
+  DECLARE_GROUP(CExtractAxis);
+} // namespace xios
+
+#endif // __XIOS_CExtractAxis__
Index: XIOS/dev/branch_openmp/src/node/extract_domain.cpp
===================================================================
--- XIOS/dev/branch_openmp/src/node/extract_domain.cpp	(revision 1643)
+++ XIOS/dev/branch_openmp/src/node/extract_domain.cpp	(revision 1643)
@@ -0,0 +1,74 @@
+#include "extract_domain.hpp"
+#include "type.hpp"
+
+namespace xios {
+
+  /// ////////////////////// DÃ©finitions ////////////////////// ///
+
+  CExtractDomain::CExtractDomain(void)
+    : CObjectTemplate<CExtractDomain>(), CExtractDomainAttributes(), CTransformation<CDomain>()
+  { /* Ne rien faire de plus */ }
+
+  CExtractDomain::CExtractDomain(const StdString & id)
+    : CObjectTemplate<CExtractDomain>(id), CExtractDomainAttributes(), CTransformation<CDomain>()
+  { /* Ne rien faire de plus */ }
+
+  CExtractDomain::~CExtractDomain(void)
+  {}
+
+  CTransformation<CDomain>* CExtractDomain::create(const StdString& id, xml::CXMLNode* node)
+  {
+    CExtractDomain* extractDomain = CExtractDomainGroup::get("extract_domain_definition")->createChild(id);
+    if (node) extractDomain->parse(*node);
+    return static_cast<CTransformation<CDomain>*>(extractDomain);
+  }
+
+  bool CExtractDomain::_dummyRegistered = CExtractDomain::registerTrans();
+  bool CExtractDomain::registerTrans()
+  {
+    registerTransformation(TRANS_EXTRACT_DOMAIN, CExtractDomain::create);
+  }
+
+  //----------------------------------------------------------------
+
+  StdString CExtractDomain::GetName(void)    { return StdString("extract_domain"); }
+  StdString CExtractDomain::GetDefName(void) { return StdString("extract_domain"); }
+  ENodeType CExtractDomain::GetType(void)    { return eExtractDomain; }
+
+  void CExtractDomain::checkValid(CDomain* domainSrc)
+  {
+    int ni_glo = domainSrc->ni_glo.getValue();
+    int nj_glo = domainSrc->nj_glo.getValue();
+
+    // RÃ©solution et vÃ©rification des donnÃ©es globales de extract.
+    if (!this->ni.isEmpty() || !this->nj.isEmpty() ||
+        !this->ibegin.isEmpty() || !this->jbegin.isEmpty())
+    {
+       if (this->ni.isEmpty()     || this->nj.isEmpty() ||
+           this->ibegin.isEmpty() || this->jbegin.isEmpty())
+       {
+         ERROR("CExtractDomain::checkValid(CDomain* domainSrc)",
+               << "If one of extract attributes is defined then all extract attributes must be defined.") ;
+       }
+       else
+       {
+          int iend = ibegin + ni - 1;
+          int jend = jbegin + nj - 1;
+
+          if (ibegin < 0  || jbegin < 0 || iend > ni_glo - 1 || jend > nj_glo - 1)
+            ERROR("CExtractDomain::checkValid(CDomain* domainSrc)",
+                  << "Extract is wrongly defined, "
+                  << "please check the values : 'ni' (" << ni.getValue() << "), 'nj' (" << nj.getValue() << "), "
+                  << "'ibegin' (" << ibegin.getValue() << "), 'jbegin' (" << jbegin.getValue() << ")");
+       }
+    }
+    else
+    {
+       ni = ni_glo;
+       nj = nj_glo;
+       ibegin = 0;
+       jbegin = 0;
+    }
+  }
+
+}
Index: XIOS/dev/branch_openmp/src/node/extract_domain.hpp
===================================================================
--- XIOS/dev/branch_openmp/src/node/extract_domain.hpp	(revision 1643)
+++ XIOS/dev/branch_openmp/src/node/extract_domain.hpp	(revision 1643)
@@ -0,0 +1,67 @@
+#ifndef __XIOS_CExtractDomain__
+#define __XIOS_CExtractDomain__
+
+/// 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"
+#include "domain.hpp"
+
+namespace xios {
+  /// ////////////////////// DÃ©clarations ////////////////////// ///
+  class CExtractDomainGroup;
+  class CExtractDomainAttributes;
+  class CExtractDomain;
+  class CDomain;
+
+  ///--------------------------------------------------------------
+
+  // Declare/Define CFileAttribute
+  BEGIN_DECLARE_ATTRIBUTE_MAP(CExtractDomain)
+#include "extract_domain_attribute.conf"
+  END_DECLARE_ATTRIBUTE_MAP(CExtractDomain)
+
+  ///--------------------------------------------------------------
+  /*!
+    \class CExtractDomain
+    This class describes extract_domain in xml file.
+  */
+  class CExtractDomain
+    : public CObjectTemplate<CExtractDomain>
+    , public CExtractDomainAttributes
+    , public CTransformation<CDomain>
+  {
+    public :
+      typedef CObjectTemplate<CExtractDomain> SuperClass;
+      typedef CExtractDomainAttributes SuperClassAttribute;
+
+    public :
+      /// Constructeurs ///
+      CExtractDomain(void);
+      explicit CExtractDomain(const StdString& id);
+
+      /// Destructeur ///
+      virtual ~CExtractDomain(void);
+
+      virtual void checkValid(CDomain* axisDest);
+
+      /// Accesseurs statiques ///
+      static StdString GetName(void);
+      static StdString GetDefName(void);
+      static ENodeType GetType(void);
+    private:
+      static bool registerTrans();
+      static CTransformation<CDomain>* create(const StdString& id, xml::CXMLNode* node);
+      static bool _dummyRegistered;
+  }; // class CExtractDomain
+
+  DECLARE_GROUP(CExtractDomain);
+} // namespace xios
+
+#endif // __XIOS_CExtractDomain__
