Index: /XIOS/trunk/inputs/Unstruct/iodef.xml
===================================================================
--- /XIOS/trunk/inputs/Unstruct/iodef.xml	(revision 933)
+++ /XIOS/trunk/inputs/Unstruct/iodef.xml	(revision 934)
@@ -20,5 +20,7 @@
 
    <domain_definition>
-     <domain id="domain_srf" />
+     <domain id="domain_srf" >
+       <compute_connectivity_domain id="compute" type="edge" />
+     </domain>
    </domain_definition>
 
Index: /XIOS/trunk/src/config/compute_connectivity_domain_attribute.conf
===================================================================
--- /XIOS/trunk/src/config/compute_connectivity_domain_attribute.conf	(revision 934)
+++ /XIOS/trunk/src/config/compute_connectivity_domain_attribute.conf	(revision 934)
@@ -0,0 +1,7 @@
+/* INPUT */
+DECLARE_ENUM2(type,node,edge)
+
+/* OUTPUT */
+DECLARE_ARRAY(int, 1 , n_neighbor)
+DECLARE_ARRAY(int, 2 , local_neighbor)
+DECLARE_ATTRIBUTE(int, n_neighbor_max)
Index: /XIOS/trunk/src/config/node_type.conf
===================================================================
--- /XIOS/trunk/src/config/node_type.conf	(revision 933)
+++ /XIOS/trunk/src/config/node_type.conf	(revision 934)
@@ -71,4 +71,9 @@
 #endif //__XIOS_CExtractDomainToAxis__
 
+#ifdef __XIOS_CComputeConnectivityDomain__
+   DECLARE_NODE(ComputeConnectivityDomain, compute_connectivity_domain)
+#endif //__XIOS_CComputeConnectivityDomain__
+
+
 #ifdef __XIOS_CContext__
    DECLARE_NODE_PAR(Context, context)
Index: /XIOS/trunk/src/generate_fortran_interface.cpp
===================================================================
--- /XIOS/trunk/src/generate_fortran_interface.cpp	(revision 933)
+++ /XIOS/trunk/src/generate_fortran_interface.cpp	(revision 934)
@@ -33,4 +33,5 @@
   CZoomDomain zoomDomain;
   CGenerateRectilinearDomain genDomain;
+  CComputeConnectivityDomain compConDomain;
 
   CInterpolateAxis interpolateAxis;
@@ -290,4 +291,19 @@
   file.close();
 
+  file.open((path+"compute_connectivity_domain_interface_attr.F90").c_str());
+  compConDomain.generateFortran2003Interface(file);
+  file.close();
+
+  file.open((path+"iccompute_connectivity_domain_attr.cpp").c_str());
+  compConDomain.generateCInterface(file);
+  file.close();
+
+  file.open((path+"icompute_connectivity_domain_attr.F90").c_str());
+  compConDomain.generateFortranInterface(file);
+  file.close();
+
+
+
+
   file.open((path+"inverse_axis_interface_attr.F90").c_str());
   inverseAxis.generateFortran2003Interface(file);
Index: /XIOS/trunk/src/group_factory_decl.cpp
===================================================================
--- /XIOS/trunk/src/group_factory_decl.cpp	(revision 933)
+++ /XIOS/trunk/src/group_factory_decl.cpp	(revision 934)
@@ -35,3 +35,4 @@
   macro(CReduceDomainToAxisGroup)
   macro(CExtractDomainToAxisGroup)
+  macro(CComputeConnectivityDomainGroup)
 }
Index: /XIOS/trunk/src/group_template_decl.cpp
===================================================================
--- /XIOS/trunk/src/group_template_decl.cpp	(revision 933)
+++ /XIOS/trunk/src/group_template_decl.cpp	(revision 934)
@@ -24,4 +24,5 @@
   macro(ReduceDomainToAxis)
   macro(ExtractDomainToAxis)
+  macro(ComputeConnectivityDomain)
 
 }
Index: /XIOS/trunk/src/interface/c/iccompute_connectivity_domain.cpp
===================================================================
--- /XIOS/trunk/src/interface/c/iccompute_connectivity_domain.cpp	(revision 934)
+++ /XIOS/trunk/src/interface/c/iccompute_connectivity_domain.cpp	(revision 934)
@@ -0,0 +1,46 @@
+/* ************************************************************************** *
+ *      Copyright Â© IPSL/LSCE, xios, Avril 2010 - Octobre 2011         *
+ * ************************************************************************** */
+
+#include <boost/multi_array.hpp>
+#include <boost/shared_ptr.hpp>
+
+#include "xios.hpp"
+
+#include "object_template.hpp"
+#include "group_template.hpp"
+#include "attribute_template.hpp"
+
+#include "icutil.hpp"
+#include "timer.hpp"
+#include "compute_connectivity_domain.hpp"
+
+extern "C"
+{
+// /////////////////////////////// DÃ©finitions ////////////////////////////// //
+
+   // ----------------------- RedÃ©finition de types ----------------------------
+
+   typedef xios::CComputeConnectivityDomain   * XComConDomainPtr;
+
+   // ------------------------ CrÃ©ation des handle -----------------------------
+   void cxios_compute_connectivity_domain_handle_create(XComConDomainPtr * _ret, const char * _id, int _id_len)
+   {
+      std::string id;
+      if (!cstr2string(_id, _id_len, id)) return;
+      CTimer::get("XIOS").resume() ;
+      *_ret = xios::CComputeConnectivityDomain::get(id);
+      CTimer::get("XIOS").suspend() ;
+   }
+
+   // -------------------- VÃ©rification des identifiants -----------------------
+   void cxios_compute_connectivity_domain_valid_id(bool * _ret, const char * _id, int _id_len)
+   {
+      std::string id;
+      if (!cstr2string(_id, _id_len, id)) return;
+
+      CTimer::get("XIOS").resume() ;
+      *_ret = xios::CComputeConnectivityDomain::has(id);
+      CTimer::get("XIOS").suspend() ;
+   }
+} // extern "C"
Index: /XIOS/trunk/src/interface/c/icxml_tree.cpp
===================================================================
--- /XIOS/trunk/src/interface/c/icxml_tree.cpp	(revision 933)
+++ /XIOS/trunk/src/interface/c/icxml_tree.cpp	(revision 934)
@@ -50,4 +50,5 @@
    typedef xios::CInterpolateDomain         *  XInterpolateDomainPtr;
    typedef xios::CGenerateRectilinearDomain *  XGenerateRectilinearDomainPtr;
+   typedef xios::CComputeConnectivityDomain *  XComputeConnectivityDomainPtr;
 
    typedef xios::CTransformation<CAxis>   *  XTransformationAxisPtr;
@@ -452,4 +453,22 @@
       }
       *child_ = static_cast<XGenerateRectilinearDomainPtr>(tmpChild_);
+      CTimer::get("XIOS").suspend() ;
+   }
+
+   void cxios_xml_tree_add_computeconnectivitydomaintodomain
+      (XDomainPtr parent_, XComputeConnectivityDomainPtr * child_, const char * child_id, int child_id_size)
+   {
+      std::string child_id_str;
+      XTransformationDomainPtr tmpChild_;
+      CTimer::get("XIOS").resume() ;
+      if (cstr2string(child_id, child_id_size, child_id_str))
+      {
+         tmpChild_ = parent_->addTransformation(TRANS_COMPUTE_CONNECTIVITY_DOMAIN, child_id_str);
+      }
+      else
+      {
+         tmpChild_ = parent_->addTransformation(TRANS_COMPUTE_CONNECTIVITY_DOMAIN);
+      }
+      *child_ = static_cast<XComputeConnectivityDomainPtr>(tmpChild_);
       CTimer::get("XIOS").suspend() ;
    }
Index: /XIOS/trunk/src/interface/c_attr/iccompute_connectivity_domain_attr.cpp
===================================================================
--- /XIOS/trunk/src/interface/c_attr/iccompute_connectivity_domain_attr.cpp	(revision 934)
+++ /XIOS/trunk/src/interface/c_attr/iccompute_connectivity_domain_attr.cpp	(revision 934)
@@ -0,0 +1,117 @@
+/* ************************************************************************** *
+ *               Interface auto generated - do not modify                     *
+ * ************************************************************************** */
+
+#include <boost/multi_array.hpp>
+#include <boost/shared_ptr.hpp>
+#include "xios.hpp"
+#include "attribute_template.hpp"
+#include "object_template.hpp"
+#include "group_template.hpp"
+#include "icutil.hpp"
+#include "icdate.hpp"
+#include "timer.hpp"
+#include "node_type.hpp"
+
+extern "C"
+{
+  typedef xios::CComputeConnectivityDomain* compute_connectivity_domain_Ptr;
+
+  void cxios_set_compute_connectivity_domain_local_neighbor(compute_connectivity_domain_Ptr compute_connectivity_domain_hdl, int* local_neighbor, int* extent)
+  {
+    CTimer::get("XIOS").resume();
+    CArray<int,2> tmp(local_neighbor, shape(extent[0], extent[1]), neverDeleteData);
+    compute_connectivity_domain_hdl->local_neighbor.reference(tmp.copy());
+     CTimer::get("XIOS").suspend();
+  }
+
+  void cxios_get_compute_connectivity_domain_local_neighbor(compute_connectivity_domain_Ptr compute_connectivity_domain_hdl, int* local_neighbor, int* extent)
+  {
+    CTimer::get("XIOS").resume();
+    CArray<int,2> tmp(local_neighbor, shape(extent[0], extent[1]), neverDeleteData);
+    tmp=compute_connectivity_domain_hdl->local_neighbor.getInheritedValue();
+     CTimer::get("XIOS").suspend();
+  }
+
+  bool cxios_is_defined_compute_connectivity_domain_local_neighbor(compute_connectivity_domain_Ptr compute_connectivity_domain_hdl)
+  {
+     CTimer::get("XIOS").resume();
+     bool isDefined = compute_connectivity_domain_hdl->local_neighbor.hasInheritedValue();
+     CTimer::get("XIOS").suspend();
+     return isDefined;
+  }
+
+
+  void cxios_set_compute_connectivity_domain_n_neighbor(compute_connectivity_domain_Ptr compute_connectivity_domain_hdl, int* n_neighbor, int* extent)
+  {
+    CTimer::get("XIOS").resume();
+    CArray<int,1> tmp(n_neighbor, shape(extent[0]), neverDeleteData);
+    compute_connectivity_domain_hdl->n_neighbor.reference(tmp.copy());
+     CTimer::get("XIOS").suspend();
+  }
+
+  void cxios_get_compute_connectivity_domain_n_neighbor(compute_connectivity_domain_Ptr compute_connectivity_domain_hdl, int* n_neighbor, int* extent)
+  {
+    CTimer::get("XIOS").resume();
+    CArray<int,1> tmp(n_neighbor, shape(extent[0]), neverDeleteData);
+    tmp=compute_connectivity_domain_hdl->n_neighbor.getInheritedValue();
+     CTimer::get("XIOS").suspend();
+  }
+
+  bool cxios_is_defined_compute_connectivity_domain_n_neighbor(compute_connectivity_domain_Ptr compute_connectivity_domain_hdl)
+  {
+     CTimer::get("XIOS").resume();
+     bool isDefined = compute_connectivity_domain_hdl->n_neighbor.hasInheritedValue();
+     CTimer::get("XIOS").suspend();
+     return isDefined;
+  }
+
+
+  void cxios_set_compute_connectivity_domain_n_neighbor_max(compute_connectivity_domain_Ptr compute_connectivity_domain_hdl, int n_neighbor_max)
+  {
+    CTimer::get("XIOS").resume();
+    compute_connectivity_domain_hdl->n_neighbor_max.setValue(n_neighbor_max);
+    CTimer::get("XIOS").suspend();
+  }
+
+  void cxios_get_compute_connectivity_domain_n_neighbor_max(compute_connectivity_domain_Ptr compute_connectivity_domain_hdl, int* n_neighbor_max)
+  {
+    CTimer::get("XIOS").resume();
+    *n_neighbor_max = compute_connectivity_domain_hdl->n_neighbor_max.getInheritedValue();
+    CTimer::get("XIOS").suspend();
+  }
+
+  bool cxios_is_defined_compute_connectivity_domain_n_neighbor_max(compute_connectivity_domain_Ptr compute_connectivity_domain_hdl)
+  {
+     CTimer::get("XIOS").resume();
+     bool isDefined = compute_connectivity_domain_hdl->n_neighbor_max.hasInheritedValue();
+     CTimer::get("XIOS").suspend();
+     return isDefined;
+  }
+
+
+  void cxios_set_compute_connectivity_domain_type(compute_connectivity_domain_Ptr compute_connectivity_domain_hdl, const char * type, int type_size)
+  {
+    std::string type_str;
+    if (!cstr2string(type, type_size, type_str)) return;
+    CTimer::get("XIOS").resume();
+    compute_connectivity_domain_hdl->type.fromString(type_str);
+    CTimer::get("XIOS").suspend();
+  }
+
+  void cxios_get_compute_connectivity_domain_type(compute_connectivity_domain_Ptr compute_connectivity_domain_hdl, char * type, int type_size)
+  {
+    CTimer::get("XIOS").resume();
+    if (!string_copy(compute_connectivity_domain_hdl->type.getInheritedStringValue(), type, type_size))
+      ERROR("void cxios_get_compute_connectivity_domain_type(compute_connectivity_domain_Ptr compute_connectivity_domain_hdl, char * type, int type_size)", << "Input string is too short");
+    CTimer::get("XIOS").suspend();
+  }
+
+  bool cxios_is_defined_compute_connectivity_domain_type(compute_connectivity_domain_Ptr compute_connectivity_domain_hdl)
+  {
+     CTimer::get("XIOS").resume();
+     bool isDefined = compute_connectivity_domain_hdl->type.hasInheritedValue();
+     CTimer::get("XIOS").suspend();
+     return isDefined;
+  }
+}
Index: /XIOS/trunk/src/interface/fortran/compute_connectivity_domain_interface.f90
===================================================================
--- /XIOS/trunk/src/interface/fortran/compute_connectivity_domain_interface.f90	(revision 934)
+++ /XIOS/trunk/src/interface/fortran/compute_connectivity_domain_interface.f90	(revision 934)
@@ -0,0 +1,22 @@
+MODULE COMPUTE_CONNECTIVITY_DOMAIN_INTERFACE
+   USE, INTRINSIC :: ISO_C_BINDING
+
+   INTERFACE ! Ne pas appeler directement/Interface FORTRAN 2003 <-> C99
+
+      SUBROUTINE cxios_compute_connectivity_domain_handle_create(ret, idt, idt_size) BIND(C)
+         USE ISO_C_BINDING
+         INTEGER  (kind = C_INTPTR_T)               :: ret
+         CHARACTER(kind = C_CHAR)    , DIMENSION(*) :: idt
+         INTEGER  (kind = C_INT)     , VALUE        :: idt_size
+      END SUBROUTINE cxios_compute_connectivity_domain_handle_create
+
+      SUBROUTINE cxios_compute_connectivity_domain_valid_id(ret, idt, idt_size) BIND(C)
+         USE ISO_C_BINDING
+         LOGICAL  (kind = C_BOOL)                   :: ret
+         CHARACTER(kind = C_CHAR)    , DIMENSION(*) :: idt
+         INTEGER  (kind = C_INT)     , VALUE        :: idt_size
+      END SUBROUTINE cxios_compute_connectivity_domain_valid_id
+
+   END INTERFACE
+
+END MODULE COMPUTE_CONNECTIVITY_DOMAIN_INTERFACE
Index: /XIOS/trunk/src/interface/fortran/icompute_connectivity_domain.F90
===================================================================
--- /XIOS/trunk/src/interface/fortran/icompute_connectivity_domain.F90	(revision 934)
+++ /XIOS/trunk/src/interface/fortran/icompute_connectivity_domain.F90	(revision 934)
@@ -0,0 +1,30 @@
+#include "xios_fortran_prefix.hpp"
+
+MODULE ICOMPUTE_CONNECTIVITY_DOMAIN
+   USE, INTRINSIC :: ISO_C_BINDING
+   USE COMPUTE_CONNECTIVITY_DOMAIN_INTERFACE
+
+   TYPE txios(compute_connectivity_domain)
+      INTEGER(kind = C_INTPTR_T) :: daddr
+   END TYPE txios(compute_connectivity_domain)
+
+   CONTAINS ! Fonctions disponibles pour les utilisateurs.
+
+   SUBROUTINE xios(get_compute_connectivity_domain_handle)(idt,ret)
+      IMPLICIT NONE
+      CHARACTER(len = *), INTENT(IN) :: idt
+      TYPE(txios(compute_connectivity_domain)) , INTENT(OUT):: ret
+      CALL cxios_compute_connectivity_domain_handle_create(ret%daddr, idt, len(idt))
+   END SUBROUTINE xios(get_compute_connectivity_domain_handle)
+
+   LOGICAL FUNCTION xios(is_valid_compute_connectivity_domain)(idt)
+      IMPLICIT NONE
+      CHARACTER(len  = *)    , INTENT(IN) :: idt
+      LOGICAL  (kind = 1)                 :: val
+
+      CALL cxios_compute_connectivity_domain_valid_id(val, idt, len(idt))
+      xios(is_valid_compute_connectivity_domain) = val
+
+   END FUNCTION  xios(is_valid_compute_connectivity_domain)
+
+END MODULE ICOMPUTE_CONNECTIVITY_DOMAIN
Index: /XIOS/trunk/src/interface/fortran/ixios.F90
===================================================================
--- /XIOS/trunk/src/interface/fortran/ixios.F90	(revision 933)
+++ /XIOS/trunk/src/interface/fortran/ixios.F90	(revision 934)
@@ -106,4 +106,10 @@
                                         xios(is_defined_reduce_axis_to_scalar_attr)
 
+USE icompute_connectivity_domain, ONLY : txios(compute_connectivity_domain), xios(is_valid_compute_connectivity_domain)
+
+USE icompute_connectivity_domain_attr, ONLY : xios(set_compute_connectivity_domain_attr), &
+                                              xios(get_compute_connectivity_domain_attr), &
+                                              xios(is_defined_compute_connectivity_domain_attr)
+
 USE XIOS_INTERFACES, ONLY : xios(set_attr), xios(get_attr), xios(is_defined_attr), xios(get_handle), xios(add_child), &
                             xios(send_field), xios(recv_field), xios(field_is_active), xios(getVar), xios(setVar)
Index: /XIOS/trunk/src/interface/fortran/ixios_interfaces.F90
===================================================================
--- /XIOS/trunk/src/interface/fortran/ixios_interfaces.F90	(revision 933)
+++ /XIOS/trunk/src/interface/fortran/ixios_interfaces.F90	(revision 934)
@@ -88,4 +88,9 @@
                                               xios(get_generate_rectilinear_domain_attr_hdl), &
                                               xios(is_defined_generate_rectilinear_domain_attr_hdl)
+USE icompute_connectivity_domain, ONLY : xios(get_compute_connectivity_domain_handle)
+
+USE icompute_connectivity_domain_attr, ONLY : xios(set_compute_connectivity_domain_attr_hdl), &
+                                              xios(get_compute_connectivity_domain_attr_hdl), &
+                                              xios(is_defined_compute_connectivity_domain_attr_hdl)
 
 USE ireduce_axis_to_scalar, ONLY : xios(get_reduce_axis_to_scalar_handle)
@@ -103,5 +108,6 @@
                       xios(add_generatedomaintodomain), xios(add_zoomaxistoaxis),                          &
                       xios(add_interpolateaxistoaxis), xios(add_inverseaxistoaxis), xios(add_scalar),      &
-                      xios(add_scalargroup), xios(add_scalartogrid), xios(add_reduceaxistoscalartoscalar)
+                      xios(add_scalargroup), xios(add_scalartogrid), xios(add_reduceaxistoscalartoscalar), &
+                      xios(add_computeconnectivitydomaintodomain)
 
 PRIVATE
@@ -116,5 +122,6 @@
                    xios(set_interpolate_domain_attr_hdl), xios(set_inverse_axis_attr_hdl),                   &
                    xios(set_generate_rectilinear_domain_attr_hdl), xios(set_scalar_attr_hdl),                &
-                   xios(set_scalargroup_attr_hdl), xios(set_reduce_axis_to_scalar_attr_hdl)
+                   xios(set_scalargroup_attr_hdl), xios(set_reduce_axis_to_scalar_attr_hdl),                 &
+                   xios(set_compute_connectivity_domain_attr_hdl)
 END INTERFACE xios(set_attr)
 
@@ -128,5 +135,6 @@
                    xios(get_interpolate_domain_attr_hdl), xios(get_inverse_axis_attr_hdl),                   &
                    xios(get_generate_rectilinear_domain_attr_hdl), xios(get_scalar_attr_hdl),                &
-                   xios(get_scalargroup_attr_hdl), xios(get_reduce_axis_to_scalar_attr_hdl)
+                   xios(get_scalargroup_attr_hdl), xios(get_reduce_axis_to_scalar_attr_hdl),                 &
+                   xios(get_compute_connectivity_domain_attr_hdl)
 END INTERFACE xios(get_attr)
 
@@ -141,5 +149,5 @@
                    xios(is_defined_inverse_axis_attr_hdl), xios(is_defined_generate_rectilinear_domain_attr_hdl),                 &
                    xios(is_defined_scalar_attr_hdl), xios(is_defined_scalargroup_attr_hdl),                                       &
-                   xios(is_defined_reduce_axis_to_scalar_attr_hdl)
+                   xios(is_defined_reduce_axis_to_scalar_attr_hdl), xios(is_defined_compute_connectivity_domain_attr_hdl)
 END INTERFACE xios(is_defined_attr)
 
@@ -153,5 +161,6 @@
                    xios(get_interpolate_domain_handle), xios(get_inverse_axis_handle),              &
                    xios(get_generate_rectilinear_domain_handle), xios(get_scalar_handle),           &
-                   xios(get_scalargroup_handle), xios(get_reduce_axis_to_scalar_handle)
+                   xios(get_scalargroup_handle), xios(get_reduce_axis_to_scalar_handle),            &
+                   xios(get_compute_connectivity_domain_handle)
 END INTERFACE xios(get_handle)
 
@@ -164,5 +173,6 @@
                    xios(add_interpolatedomaintodomain), xios(add_generatedomaintodomain),                            &
                    xios(add_zoomaxistoaxis), xios(add_interpolateaxistoaxis), xios(add_inverseaxistoaxis),           &
-                   xios(add_scalar), xios(add_scalartogrid), xios(add_reduceaxistoscalartoscalar)
+                   xios(add_scalar), xios(add_scalartogrid), xios(add_reduceaxistoscalartoscalar),                   &
+                   xios(add_computeconnectivitydomaintodomain)
 END INTERFACE xios(add_child)
 
Index: /XIOS/trunk/src/interface/fortran/ixml_tree.F90
===================================================================
--- /XIOS/trunk/src/interface/fortran/ixml_tree.F90	(revision 933)
+++ /XIOS/trunk/src/interface/fortran/ixml_tree.F90	(revision 934)
@@ -13,4 +13,5 @@
    USE IINTERPOLATE_DOMAIN
    USE IGENERATE_RECTILINEAR_DOMAIN
+   USE ICOMPUTE_CONNECTIVITY_DOMAIN
    USE IZOOM_AXIS
    USE IINTERPOLATE_AXIS
@@ -214,4 +215,12 @@
       END SUBROUTINE cxios_xml_tree_add_generatedomaintodomain
 
+      SUBROUTINE cxios_xml_tree_add_computeconnectivitydomaintodomain(parent_, child_, child_id, child_id_size) BIND(C)
+         USE ISO_C_BINDING
+         INTEGER  (kind = C_INTPTR_T), VALUE        :: parent_
+         INTEGER  (kind = C_INTPTR_T)               :: child_
+         CHARACTER(kind = C_CHAR)    , DIMENSION(*) :: child_id
+         INTEGER  (kind = C_INT)     , VALUE        :: child_id_size
+      END SUBROUTINE cxios_xml_tree_add_computeconnectivitydomaintodomain
+
       SUBROUTINE cxios_xml_tree_add_zoomaxistoaxis(parent_, child_, child_id, child_id_size) BIND(C)
          USE ISO_C_BINDING
@@ -582,4 +591,17 @@
    END SUBROUTINE xios(add_generatedomaintodomain)
 
+   SUBROUTINE xios(add_computeconnectivitydomaintodomain)(parent_hdl, child_hdl, child_id)
+      TYPE(txios(domain))                      , INTENT(IN) :: parent_hdl
+      TYPE(txios(compute_connectivity_domain)) , INTENT(OUT):: child_hdl
+      CHARACTER(len = *), OPTIONAL             , INTENT(IN) :: child_id
+
+      IF (PRESENT(child_id)) THEN
+         CALL cxios_xml_tree_add_computeconnectivitydomaintodomain(parent_hdl%daddr, child_hdl%daddr, child_id, len(child_id))
+      ELSE
+         CALL cxios_xml_tree_add_computeconnectivitydomaintodomain(parent_hdl%daddr, child_hdl%daddr, "NONE", -1)
+      END IF
+
+   END SUBROUTINE xios(add_computeconnectivitydomaintodomain)
+
    SUBROUTINE xios(add_zoomaxistoaxis)(parent_hdl, child_hdl, child_id)
       TYPE(txios(axis))                      , INTENT(IN) :: parent_hdl
Index: /XIOS/trunk/src/interface/fortran_attr/compute_connectivity_domain_interface_attr.F90
===================================================================
--- /XIOS/trunk/src/interface/fortran_attr/compute_connectivity_domain_interface_attr.F90	(revision 934)
+++ /XIOS/trunk/src/interface/fortran_attr/compute_connectivity_domain_interface_attr.F90	(revision 934)
@@ -0,0 +1,95 @@
+! * ************************************************************************** *
+! *               Interface auto generated - do not modify                     *
+! * ************************************************************************** *
+#include "../fortran/xios_fortran_prefix.hpp"
+
+MODULE compute_connectivity_domain_interface_attr
+  USE, INTRINSIC :: ISO_C_BINDING
+
+  INTERFACE
+    ! Do not call directly / interface FORTRAN 2003 <-> C99
+
+    SUBROUTINE cxios_set_compute_connectivity_domain_local_neighbor(compute_connectivity_domain_hdl, local_neighbor, extent) BIND(C)
+      USE ISO_C_BINDING
+      INTEGER (kind = C_INTPTR_T), VALUE       :: compute_connectivity_domain_hdl
+      INTEGER (KIND=C_INT)     , DIMENSION(*) :: local_neighbor
+      INTEGER (kind = C_INT), DIMENSION(*)     :: extent
+    END SUBROUTINE cxios_set_compute_connectivity_domain_local_neighbor
+
+    SUBROUTINE cxios_get_compute_connectivity_domain_local_neighbor(compute_connectivity_domain_hdl, local_neighbor, extent) BIND(C)
+      USE ISO_C_BINDING
+      INTEGER (kind = C_INTPTR_T), VALUE       :: compute_connectivity_domain_hdl
+      INTEGER (KIND=C_INT)     , DIMENSION(*) :: local_neighbor
+      INTEGER (kind = C_INT), DIMENSION(*)     :: extent
+    END SUBROUTINE cxios_get_compute_connectivity_domain_local_neighbor
+
+    FUNCTION cxios_is_defined_compute_connectivity_domain_local_neighbor(compute_connectivity_domain_hdl) BIND(C)
+      USE ISO_C_BINDING
+      LOGICAL(kind=C_BOOL) :: cxios_is_defined_compute_connectivity_domain_local_neighbor
+      INTEGER (kind = C_INTPTR_T), VALUE :: compute_connectivity_domain_hdl
+    END FUNCTION cxios_is_defined_compute_connectivity_domain_local_neighbor
+
+
+    SUBROUTINE cxios_set_compute_connectivity_domain_n_neighbor(compute_connectivity_domain_hdl, n_neighbor, extent) BIND(C)
+      USE ISO_C_BINDING
+      INTEGER (kind = C_INTPTR_T), VALUE       :: compute_connectivity_domain_hdl
+      INTEGER (KIND=C_INT)     , DIMENSION(*) :: n_neighbor
+      INTEGER (kind = C_INT), DIMENSION(*)     :: extent
+    END SUBROUTINE cxios_set_compute_connectivity_domain_n_neighbor
+
+    SUBROUTINE cxios_get_compute_connectivity_domain_n_neighbor(compute_connectivity_domain_hdl, n_neighbor, extent) BIND(C)
+      USE ISO_C_BINDING
+      INTEGER (kind = C_INTPTR_T), VALUE       :: compute_connectivity_domain_hdl
+      INTEGER (KIND=C_INT)     , DIMENSION(*) :: n_neighbor
+      INTEGER (kind = C_INT), DIMENSION(*)     :: extent
+    END SUBROUTINE cxios_get_compute_connectivity_domain_n_neighbor
+
+    FUNCTION cxios_is_defined_compute_connectivity_domain_n_neighbor(compute_connectivity_domain_hdl) BIND(C)
+      USE ISO_C_BINDING
+      LOGICAL(kind=C_BOOL) :: cxios_is_defined_compute_connectivity_domain_n_neighbor
+      INTEGER (kind = C_INTPTR_T), VALUE :: compute_connectivity_domain_hdl
+    END FUNCTION cxios_is_defined_compute_connectivity_domain_n_neighbor
+
+
+    SUBROUTINE cxios_set_compute_connectivity_domain_n_neighbor_max(compute_connectivity_domain_hdl, n_neighbor_max) BIND(C)
+      USE ISO_C_BINDING
+      INTEGER (kind = C_INTPTR_T), VALUE :: compute_connectivity_domain_hdl
+      INTEGER (KIND=C_INT)      , VALUE :: n_neighbor_max
+    END SUBROUTINE cxios_set_compute_connectivity_domain_n_neighbor_max
+
+    SUBROUTINE cxios_get_compute_connectivity_domain_n_neighbor_max(compute_connectivity_domain_hdl, n_neighbor_max) BIND(C)
+      USE ISO_C_BINDING
+      INTEGER (kind = C_INTPTR_T), VALUE :: compute_connectivity_domain_hdl
+      INTEGER (KIND=C_INT)             :: n_neighbor_max
+    END SUBROUTINE cxios_get_compute_connectivity_domain_n_neighbor_max
+
+    FUNCTION cxios_is_defined_compute_connectivity_domain_n_neighbor_max(compute_connectivity_domain_hdl) BIND(C)
+      USE ISO_C_BINDING
+      LOGICAL(kind=C_BOOL) :: cxios_is_defined_compute_connectivity_domain_n_neighbor_max
+      INTEGER (kind = C_INTPTR_T), VALUE :: compute_connectivity_domain_hdl
+    END FUNCTION cxios_is_defined_compute_connectivity_domain_n_neighbor_max
+
+
+    SUBROUTINE cxios_set_compute_connectivity_domain_type(compute_connectivity_domain_hdl, type, type_size) BIND(C)
+      USE ISO_C_BINDING
+      INTEGER (kind = C_INTPTR_T), VALUE :: compute_connectivity_domain_hdl
+      CHARACTER(kind = C_CHAR)    , DIMENSION(*) :: type
+      INTEGER  (kind = C_INT)     , VALUE        :: type_size
+    END SUBROUTINE cxios_set_compute_connectivity_domain_type
+
+    SUBROUTINE cxios_get_compute_connectivity_domain_type(compute_connectivity_domain_hdl, type, type_size) BIND(C)
+      USE ISO_C_BINDING
+      INTEGER (kind = C_INTPTR_T), VALUE :: compute_connectivity_domain_hdl
+      CHARACTER(kind = C_CHAR)    , DIMENSION(*) :: type
+      INTEGER  (kind = C_INT)     , VALUE        :: type_size
+    END SUBROUTINE cxios_get_compute_connectivity_domain_type
+
+    FUNCTION cxios_is_defined_compute_connectivity_domain_type(compute_connectivity_domain_hdl) BIND(C)
+      USE ISO_C_BINDING
+      LOGICAL(kind=C_BOOL) :: cxios_is_defined_compute_connectivity_domain_type
+      INTEGER (kind = C_INTPTR_T), VALUE :: compute_connectivity_domain_hdl
+    END FUNCTION cxios_is_defined_compute_connectivity_domain_type
+
+  END INTERFACE
+
+END MODULE compute_connectivity_domain_interface_attr
Index: /XIOS/trunk/src/interface/fortran_attr/icompute_connectivity_domain_attr.F90
===================================================================
--- /XIOS/trunk/src/interface/fortran_attr/icompute_connectivity_domain_attr.F90	(revision 934)
+++ /XIOS/trunk/src/interface/fortran_attr/icompute_connectivity_domain_attr.F90	(revision 934)
@@ -0,0 +1,209 @@
+! * ************************************************************************** *
+! *               Interface auto generated - do not modify                     *
+! * ************************************************************************** *
+#include "xios_fortran_prefix.hpp"
+
+MODULE icompute_connectivity_domain_attr
+  USE, INTRINSIC :: ISO_C_BINDING
+  USE icompute_connectivity_domain
+  USE compute_connectivity_domain_interface_attr
+
+CONTAINS
+
+  SUBROUTINE xios(set_compute_connectivity_domain_attr)  &
+    ( compute_connectivity_domain_id, local_neighbor, n_neighbor, n_neighbor_max, type )
+
+    IMPLICIT NONE
+      TYPE(txios(compute_connectivity_domain))  :: compute_connectivity_domain_hdl
+      CHARACTER(LEN=*), INTENT(IN) ::compute_connectivity_domain_id
+      INTEGER  , OPTIONAL, INTENT(IN) :: local_neighbor(:,:)
+      INTEGER  , OPTIONAL, INTENT(IN) :: n_neighbor(:)
+      INTEGER  , OPTIONAL, INTENT(IN) :: n_neighbor_max
+      CHARACTER(len = *) , OPTIONAL, INTENT(IN) :: type
+
+      CALL xios(get_compute_connectivity_domain_handle)(compute_connectivity_domain_id,compute_connectivity_domain_hdl)
+      CALL xios(set_compute_connectivity_domain_attr_hdl_)   &
+      ( compute_connectivity_domain_hdl, local_neighbor, n_neighbor, n_neighbor_max, type )
+
+  END SUBROUTINE xios(set_compute_connectivity_domain_attr)
+
+  SUBROUTINE xios(set_compute_connectivity_domain_attr_hdl)  &
+    ( compute_connectivity_domain_hdl, local_neighbor, n_neighbor, n_neighbor_max, type )
+
+    IMPLICIT NONE
+      TYPE(txios(compute_connectivity_domain)) , INTENT(IN) :: compute_connectivity_domain_hdl
+      INTEGER  , OPTIONAL, INTENT(IN) :: local_neighbor(:,:)
+      INTEGER  , OPTIONAL, INTENT(IN) :: n_neighbor(:)
+      INTEGER  , OPTIONAL, INTENT(IN) :: n_neighbor_max
+      CHARACTER(len = *) , OPTIONAL, INTENT(IN) :: type
+
+      CALL xios(set_compute_connectivity_domain_attr_hdl_)  &
+      ( compute_connectivity_domain_hdl, local_neighbor, n_neighbor, n_neighbor_max, type )
+
+  END SUBROUTINE xios(set_compute_connectivity_domain_attr_hdl)
+
+  SUBROUTINE xios(set_compute_connectivity_domain_attr_hdl_)   &
+    ( compute_connectivity_domain_hdl, local_neighbor_, n_neighbor_, n_neighbor_max_, type_ )
+
+    IMPLICIT NONE
+      TYPE(txios(compute_connectivity_domain)) , INTENT(IN) :: compute_connectivity_domain_hdl
+      INTEGER  , OPTIONAL, INTENT(IN) :: local_neighbor_(:,:)
+      INTEGER  , OPTIONAL, INTENT(IN) :: n_neighbor_(:)
+      INTEGER  , OPTIONAL, INTENT(IN) :: n_neighbor_max_
+      CHARACTER(len = *) , OPTIONAL, INTENT(IN) :: type_
+
+      IF (PRESENT(local_neighbor_)) THEN
+        CALL cxios_set_compute_connectivity_domain_local_neighbor(compute_connectivity_domain_hdl%daddr, local_neighbor_, SHAPE(local_neighbor_))
+      ENDIF
+
+      IF (PRESENT(n_neighbor_)) THEN
+        CALL cxios_set_compute_connectivity_domain_n_neighbor(compute_connectivity_domain_hdl%daddr, n_neighbor_, SHAPE(n_neighbor_))
+      ENDIF
+
+      IF (PRESENT(n_neighbor_max_)) THEN
+        CALL cxios_set_compute_connectivity_domain_n_neighbor_max(compute_connectivity_domain_hdl%daddr, n_neighbor_max_)
+      ENDIF
+
+      IF (PRESENT(type_)) THEN
+        CALL cxios_set_compute_connectivity_domain_type(compute_connectivity_domain_hdl%daddr, type_, len(type_))
+      ENDIF
+
+  END SUBROUTINE xios(set_compute_connectivity_domain_attr_hdl_)
+
+  SUBROUTINE xios(get_compute_connectivity_domain_attr)  &
+    ( compute_connectivity_domain_id, local_neighbor, n_neighbor, n_neighbor_max, type )
+
+    IMPLICIT NONE
+      TYPE(txios(compute_connectivity_domain))  :: compute_connectivity_domain_hdl
+      CHARACTER(LEN=*), INTENT(IN) ::compute_connectivity_domain_id
+      INTEGER  , OPTIONAL, INTENT(OUT) :: local_neighbor(:,:)
+      INTEGER  , OPTIONAL, INTENT(OUT) :: n_neighbor(:)
+      INTEGER  , OPTIONAL, INTENT(OUT) :: n_neighbor_max
+      CHARACTER(len = *) , OPTIONAL, INTENT(OUT) :: type
+
+      CALL xios(get_compute_connectivity_domain_handle)(compute_connectivity_domain_id,compute_connectivity_domain_hdl)
+      CALL xios(get_compute_connectivity_domain_attr_hdl_)   &
+      ( compute_connectivity_domain_hdl, local_neighbor, n_neighbor, n_neighbor_max, type )
+
+  END SUBROUTINE xios(get_compute_connectivity_domain_attr)
+
+  SUBROUTINE xios(get_compute_connectivity_domain_attr_hdl)  &
+    ( compute_connectivity_domain_hdl, local_neighbor, n_neighbor, n_neighbor_max, type )
+
+    IMPLICIT NONE
+      TYPE(txios(compute_connectivity_domain)) , INTENT(IN) :: compute_connectivity_domain_hdl
+      INTEGER  , OPTIONAL, INTENT(OUT) :: local_neighbor(:,:)
+      INTEGER  , OPTIONAL, INTENT(OUT) :: n_neighbor(:)
+      INTEGER  , OPTIONAL, INTENT(OUT) :: n_neighbor_max
+      CHARACTER(len = *) , OPTIONAL, INTENT(OUT) :: type
+
+      CALL xios(get_compute_connectivity_domain_attr_hdl_)  &
+      ( compute_connectivity_domain_hdl, local_neighbor, n_neighbor, n_neighbor_max, type )
+
+  END SUBROUTINE xios(get_compute_connectivity_domain_attr_hdl)
+
+  SUBROUTINE xios(get_compute_connectivity_domain_attr_hdl_)   &
+    ( compute_connectivity_domain_hdl, local_neighbor_, n_neighbor_, n_neighbor_max_, type_ )
+
+    IMPLICIT NONE
+      TYPE(txios(compute_connectivity_domain)) , INTENT(IN) :: compute_connectivity_domain_hdl
+      INTEGER  , OPTIONAL, INTENT(OUT) :: local_neighbor_(:,:)
+      INTEGER  , OPTIONAL, INTENT(OUT) :: n_neighbor_(:)
+      INTEGER  , OPTIONAL, INTENT(OUT) :: n_neighbor_max_
+      CHARACTER(len = *) , OPTIONAL, INTENT(OUT) :: type_
+
+      IF (PRESENT(local_neighbor_)) THEN
+        CALL cxios_get_compute_connectivity_domain_local_neighbor(compute_connectivity_domain_hdl%daddr, local_neighbor_, SHAPE(local_neighbor_))
+      ENDIF
+
+      IF (PRESENT(n_neighbor_)) THEN
+        CALL cxios_get_compute_connectivity_domain_n_neighbor(compute_connectivity_domain_hdl%daddr, n_neighbor_, SHAPE(n_neighbor_))
+      ENDIF
+
+      IF (PRESENT(n_neighbor_max_)) THEN
+        CALL cxios_get_compute_connectivity_domain_n_neighbor_max(compute_connectivity_domain_hdl%daddr, n_neighbor_max_)
+      ENDIF
+
+      IF (PRESENT(type_)) THEN
+        CALL cxios_get_compute_connectivity_domain_type(compute_connectivity_domain_hdl%daddr, type_, len(type_))
+      ENDIF
+
+  END SUBROUTINE xios(get_compute_connectivity_domain_attr_hdl_)
+
+  SUBROUTINE xios(is_defined_compute_connectivity_domain_attr)  &
+    ( compute_connectivity_domain_id, local_neighbor, n_neighbor, n_neighbor_max, type )
+
+    IMPLICIT NONE
+      TYPE(txios(compute_connectivity_domain))  :: compute_connectivity_domain_hdl
+      CHARACTER(LEN=*), INTENT(IN) ::compute_connectivity_domain_id
+      LOGICAL, OPTIONAL, INTENT(OUT) :: local_neighbor
+      LOGICAL(KIND=C_BOOL) :: local_neighbor_tmp
+      LOGICAL, OPTIONAL, INTENT(OUT) :: n_neighbor
+      LOGICAL(KIND=C_BOOL) :: n_neighbor_tmp
+      LOGICAL, OPTIONAL, INTENT(OUT) :: n_neighbor_max
+      LOGICAL(KIND=C_BOOL) :: n_neighbor_max_tmp
+      LOGICAL, OPTIONAL, INTENT(OUT) :: type
+      LOGICAL(KIND=C_BOOL) :: type_tmp
+
+      CALL xios(get_compute_connectivity_domain_handle)(compute_connectivity_domain_id,compute_connectivity_domain_hdl)
+      CALL xios(is_defined_compute_connectivity_domain_attr_hdl_)   &
+      ( compute_connectivity_domain_hdl, local_neighbor, n_neighbor, n_neighbor_max, type )
+
+  END SUBROUTINE xios(is_defined_compute_connectivity_domain_attr)
+
+  SUBROUTINE xios(is_defined_compute_connectivity_domain_attr_hdl)  &
+    ( compute_connectivity_domain_hdl, local_neighbor, n_neighbor, n_neighbor_max, type )
+
+    IMPLICIT NONE
+      TYPE(txios(compute_connectivity_domain)) , INTENT(IN) :: compute_connectivity_domain_hdl
+      LOGICAL, OPTIONAL, INTENT(OUT) :: local_neighbor
+      LOGICAL(KIND=C_BOOL) :: local_neighbor_tmp
+      LOGICAL, OPTIONAL, INTENT(OUT) :: n_neighbor
+      LOGICAL(KIND=C_BOOL) :: n_neighbor_tmp
+      LOGICAL, OPTIONAL, INTENT(OUT) :: n_neighbor_max
+      LOGICAL(KIND=C_BOOL) :: n_neighbor_max_tmp
+      LOGICAL, OPTIONAL, INTENT(OUT) :: type
+      LOGICAL(KIND=C_BOOL) :: type_tmp
+
+      CALL xios(is_defined_compute_connectivity_domain_attr_hdl_)  &
+      ( compute_connectivity_domain_hdl, local_neighbor, n_neighbor, n_neighbor_max, type )
+
+  END SUBROUTINE xios(is_defined_compute_connectivity_domain_attr_hdl)
+
+  SUBROUTINE xios(is_defined_compute_connectivity_domain_attr_hdl_)   &
+    ( compute_connectivity_domain_hdl, local_neighbor_, n_neighbor_, n_neighbor_max_, type_ )
+
+    IMPLICIT NONE
+      TYPE(txios(compute_connectivity_domain)) , INTENT(IN) :: compute_connectivity_domain_hdl
+      LOGICAL, OPTIONAL, INTENT(OUT) :: local_neighbor_
+      LOGICAL(KIND=C_BOOL) :: local_neighbor__tmp
+      LOGICAL, OPTIONAL, INTENT(OUT) :: n_neighbor_
+      LOGICAL(KIND=C_BOOL) :: n_neighbor__tmp
+      LOGICAL, OPTIONAL, INTENT(OUT) :: n_neighbor_max_
+      LOGICAL(KIND=C_BOOL) :: n_neighbor_max__tmp
+      LOGICAL, OPTIONAL, INTENT(OUT) :: type_
+      LOGICAL(KIND=C_BOOL) :: type__tmp
+
+      IF (PRESENT(local_neighbor_)) THEN
+        local_neighbor__tmp = cxios_is_defined_compute_connectivity_domain_local_neighbor(compute_connectivity_domain_hdl%daddr)
+        local_neighbor_ = local_neighbor__tmp
+      ENDIF
+
+      IF (PRESENT(n_neighbor_)) THEN
+        n_neighbor__tmp = cxios_is_defined_compute_connectivity_domain_n_neighbor(compute_connectivity_domain_hdl%daddr)
+        n_neighbor_ = n_neighbor__tmp
+      ENDIF
+
+      IF (PRESENT(n_neighbor_max_)) THEN
+        n_neighbor_max__tmp = cxios_is_defined_compute_connectivity_domain_n_neighbor_max(compute_connectivity_domain_hdl%daddr)
+        n_neighbor_max_ = n_neighbor_max__tmp
+      ENDIF
+
+      IF (PRESENT(type_)) THEN
+        type__tmp = cxios_is_defined_compute_connectivity_domain_type(compute_connectivity_domain_hdl%daddr)
+        type_ = type__tmp
+      ENDIF
+
+  END SUBROUTINE xios(is_defined_compute_connectivity_domain_attr_hdl_)
+
+END MODULE icompute_connectivity_domain_attr
Index: /XIOS/trunk/src/node/compute_connectivity_domain.cpp
===================================================================
--- /XIOS/trunk/src/node/compute_connectivity_domain.cpp	(revision 934)
+++ /XIOS/trunk/src/node/compute_connectivity_domain.cpp	(revision 934)
@@ -0,0 +1,51 @@
+#include "compute_connectivity_domain.hpp"
+#include "type.hpp"
+
+namespace xios {
+
+  /// ////////////////////// DÃ©finitions ////////////////////// ///
+
+  CComputeConnectivityDomain::CComputeConnectivityDomain(void)
+    : CObjectTemplate<CComputeConnectivityDomain>(), CComputeConnectivityDomainAttributes(), CTransformation<CDomain>()
+  { /* Ne rien faire de plus */ }
+
+  CComputeConnectivityDomain::CComputeConnectivityDomain(const StdString & id)
+    : CObjectTemplate<CComputeConnectivityDomain>(id), CComputeConnectivityDomainAttributes(), CTransformation<CDomain>()
+  { /* Ne rien faire de plus */ }
+
+  CComputeConnectivityDomain::~CComputeConnectivityDomain(void)
+  {}
+
+  CTransformation<CDomain>* CComputeConnectivityDomain::create(const StdString& id, xml::CXMLNode* node)
+  {
+    CComputeConnectivityDomain* compute_connectivityDomain = CComputeConnectivityDomainGroup::get("compute_connectivity_domain_definition")->createChild(id);
+    if (node) compute_connectivityDomain->parse(*node);
+    return static_cast<CTransformation<CDomain>*>(compute_connectivityDomain);
+  }
+
+  bool CComputeConnectivityDomain::_dummyRegistered = CComputeConnectivityDomain::registerTrans();
+  bool CComputeConnectivityDomain::registerTrans()
+  {
+    registerTransformation(TRANS_COMPUTE_CONNECTIVITY_DOMAIN, CComputeConnectivityDomain::create);
+  }
+
+  //----------------------------------------------------------------
+
+  StdString CComputeConnectivityDomain::GetName(void)    { return StdString("compute_connectivity_domain"); }
+  StdString CComputeConnectivityDomain::GetDefName(void) { return StdString("compute_connectivity_domain"); }
+  ENodeType CComputeConnectivityDomain::GetType(void)    { return eComputeConnectivityDomain; }
+
+  void CComputeConnectivityDomain::checkValid(CDomain* domainDst)
+  {
+    if (type.isEmpty())
+      ERROR("CComputeConnectivityDomain::checkValid(CDomain* domainDst)",
+       << "Connectivity type is not defined. Chose 'node' or 'edge' for the type."
+       << "Domain " <<domainDst->getId() << std::endl
+       << "Connectivity object " << this->getId());
+
+    if (n_neighbor_max.isEmpty()) n_neighbor_max.setValue(0);
+    if (n_neighbor.isEmpty()) n_neighbor.resize(domainDst->i_index.numElements());
+    if (local_neighbor.isEmpty()) local_neighbor.resize(1,1);
+  }
+
+}
Index: /XIOS/trunk/src/node/compute_connectivity_domain.hpp
===================================================================
--- /XIOS/trunk/src/node/compute_connectivity_domain.hpp	(revision 934)
+++ /XIOS/trunk/src/node/compute_connectivity_domain.hpp	(revision 934)
@@ -0,0 +1,67 @@
+#ifndef __XIOS_CComputeConnectivityDomain__
+#define __XIOS_CComputeConnectivityDomain__
+
+/// 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 CComputeConnectivityDomainGroup;
+  class CComputeConnectivityDomainAttributes;
+  class CComputeConnectivityDomain;
+  class CDomain;
+
+  ///--------------------------------------------------------------
+
+  // Declare/Define CFileAttribute
+  BEGIN_DECLARE_ATTRIBUTE_MAP(CComputeConnectivityDomain)
+#include "compute_connectivity_domain_attribute.conf"
+  END_DECLARE_ATTRIBUTE_MAP(CComputeConnectivityDomain)
+
+  ///--------------------------------------------------------------
+  /*!
+    \class CComputeConnectivityDomain
+    This class describes zoom_domain in xml file.
+  */
+  class CComputeConnectivityDomain
+    : public CObjectTemplate<CComputeConnectivityDomain>
+    , public CComputeConnectivityDomainAttributes
+    , public CTransformation<CDomain>
+  {
+    public :
+      typedef CObjectTemplate<CComputeConnectivityDomain> SuperClass;
+      typedef CComputeConnectivityDomainAttributes SuperClassAttribute;
+
+    public :
+      /// Constructeurs ///
+      CComputeConnectivityDomain(void);
+      explicit CComputeConnectivityDomain(const StdString& id);
+
+      /// Destructeur ///
+      virtual ~CComputeConnectivityDomain(void);
+
+      virtual void checkValid(CDomain* domain);
+
+      /// 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 CComputeConnectivityDomain
+
+  DECLARE_GROUP(CComputeConnectivityDomain);
+} // namespace xios
+
+#endif // __XIOS_CComputeConnectivityDomain__
Index: /XIOS/trunk/src/node/domain.cpp
===================================================================
--- /XIOS/trunk/src/node/domain.cpp	(revision 933)
+++ /XIOS/trunk/src/node/domain.cpp	(revision 934)
@@ -73,4 +73,5 @@
      m["interpolate_domain"] = TRANS_INTERPOLATE_DOMAIN;
      m["generate_rectilinear_domain"] = TRANS_GENERATE_RECTILINEAR_DOMAIN;
+     m["compute_connectivity_domain"] = TRANS_COMPUTE_CONNECTIVITY_DOMAIN;
    }
 
Index: /XIOS/trunk/src/node/field.cpp
===================================================================
--- /XIOS/trunk/src/node/field.cpp	(revision 933)
+++ /XIOS/trunk/src/node/field.cpp	(revision 934)
@@ -1021,4 +1021,8 @@
        }
      }
+     else if (grid && grid->hasTransform() && !grid->isTransformed())
+     {
+       grid->transformGrid(grid);
+     }
    }
 
Index: /XIOS/trunk/src/node/node_enum.hpp
===================================================================
--- /XIOS/trunk/src/node/node_enum.hpp	(revision 933)
+++ /XIOS/trunk/src/node/node_enum.hpp	(revision 934)
@@ -29,5 +29,6 @@
          eReduceAxisToScalar,
          eReduceDomainToAxis,
-         eExtractDomainToAxis
+         eExtractDomainToAxis,
+         eComputeConnectivityDomain
 
       } ENodeType;
Index: /XIOS/trunk/src/node/node_type.hpp
===================================================================
--- /XIOS/trunk/src/node/node_type.hpp	(revision 933)
+++ /XIOS/trunk/src/node/node_type.hpp	(revision 934)
@@ -20,4 +20,5 @@
 #include "reduce_domain_to_axis.hpp"
 #include "extract_domain_to_axis.hpp"
+#include "compute_connectivity_domain.hpp"
 
 
Index: /XIOS/trunk/src/node/transformation.hpp
===================================================================
--- /XIOS/trunk/src/node/transformation.hpp	(revision 933)
+++ /XIOS/trunk/src/node/transformation.hpp	(revision 934)
@@ -3,4 +3,5 @@
 
 #include "xios_spl.hpp"
+#include "xml_node.hpp"
 #include "transformation_enum.hpp"
 
Index: /XIOS/trunk/src/node/transformation_enum.hpp
===================================================================
--- /XIOS/trunk/src/node/transformation_enum.hpp	(revision 933)
+++ /XIOS/trunk/src/node/transformation_enum.hpp	(revision 934)
@@ -15,5 +15,6 @@
         TRANS_REDUCE_AXIS_TO_SCALAR = 6,
         TRANS_REDUCE_DOMAIN_TO_AXIS = 7,
-        TRANS_EXTRACT_DOMAIN_TO_AXIS = 8
+        TRANS_EXTRACT_DOMAIN_TO_AXIS = 8,
+        TRANS_COMPUTE_CONNECTIVITY_DOMAIN = 9
       } ETranformationType;
 
Index: /XIOS/trunk/src/object_factory_decl.cpp
===================================================================
--- /XIOS/trunk/src/object_factory_decl.cpp	(revision 933)
+++ /XIOS/trunk/src/object_factory_decl.cpp	(revision 934)
@@ -36,4 +36,5 @@
   macro(CReduceDomainToAxis)
   macro(CExtractDomainToAxis)
+  macro(CComputeConnectivityDomain)
 
   macro(CFieldGroup)
@@ -54,3 +55,4 @@
   macro(CReduceDomainToAxisGroup)
   macro(CExtractDomainToAxisGroup)
+  macro(CComputeConnectivityDomainGroup)
 }
Index: /XIOS/trunk/src/object_template_decl.cpp
===================================================================
--- /XIOS/trunk/src/object_template_decl.cpp	(revision 933)
+++ /XIOS/trunk/src/object_template_decl.cpp	(revision 934)
@@ -23,4 +23,5 @@
   template class CObjectTemplate<CReduceDomainToAxis>;
   template class CObjectTemplate<CExtractDomainToAxis>;
+  template class CObjectTemplate<CComputeConnectivityDomain>;
 
   template class CObjectTemplate<CContextGroup>;
@@ -41,3 +42,4 @@
   template class CObjectTemplate<CReduceDomainToAxisGroup>;
   template class CObjectTemplate<CExtractDomainToAxisGroup>;
+  template class CObjectTemplate<CComputeConnectivityDomainGroup>;
 }
Index: /XIOS/trunk/src/test/test_unstruct_complete.f90
===================================================================
--- /XIOS/trunk/src/test/test_unstruct_complete.f90	(revision 933)
+++ /XIOS/trunk/src/test/test_unstruct_complete.f90	(revision 934)
@@ -30,8 +30,9 @@
   INTEGER,ALLOCATABLE :: i_index(:)
   LOGICAL,ALLOCATABLE :: mask_glo(:),mask(:)
+  INTEGER,ALLOCATABLE :: n_local(:),local_neighbor(:,:)
   DOUBLE PRECISION,ALLOCATABLE :: lon(:),lat(:),field_A_srf(:,:), lonvalue(:) ;
   DOUBLE PRECISION,ALLOCATABLE :: bounds_lon(:,:),bounds_lat(:,:) ;
   INTEGER :: ni,ibegin,iend,nj,jbegin,jend
-  INTEGER :: i,j,l,ts,n
+  INTEGER :: i,j,l,ts,n, nbMax
   INTEGER :: ncell_glo,ncell,ind
   REAL :: ilon,ilat
@@ -164,4 +165,5 @@
   ALLOCATE(field_A_srf(ncell,llm))
   ALLOCATE(mask(ncell))
+  ALLOCATE(n_local(ncell))
   ncell=0
   data_n_index=0
@@ -205,4 +207,5 @@
   CALL xios_set_domain_attr("domain_srf", lonvalue_1D=lon, latvalue_1D=lat)
   CALL xios_set_domain_attr("domain_srf", nvertex=4, bounds_lon_1D=bounds_lon, bounds_lat_1D=bounds_lat)
+!  CALL xios_set_compute_connectivity_domain_attr("compute", n_neighbor=n_local, local_neighbor=local_neighbor)
 
 
@@ -211,4 +214,8 @@
   CALL xios_set_timestep(dtime)
   CALL xios_close_context_definition()
+
+  CALL xios_get_compute_connectivity_domain_attr("compute", n_neighbor_max=nbMax)
+  ALLOCATE(local_neighbor(nbMax,ncell))
+  CALL xios_get_compute_connectivity_domain_attr("compute", n_neighbor=n_local, local_neighbor=local_neighbor)
 
    DO ts=1,24*10
Index: /XIOS/trunk/src/transformation/algo_types.hpp
===================================================================
--- /XIOS/trunk/src/transformation/algo_types.hpp	(revision 933)
+++ /XIOS/trunk/src/transformation/algo_types.hpp	(revision 934)
@@ -23,3 +23,6 @@
 #include "axis_algorithm_extract_domain.hpp"
 #include "extract_domain_to_axis.hpp"
+#include "domain_algorithm_compute_connectivity.hpp"
+#include "compute_connectivity_domain.hpp"
+
 #endif // __XIOS_ALGORITHM_TRANSFORMATION_TYPES_HPP__
Index: /XIOS/trunk/src/transformation/axis_algorithm_transformation.hpp
===================================================================
--- /XIOS/trunk/src/transformation/axis_algorithm_transformation.hpp	(revision 933)
+++ /XIOS/trunk/src/transformation/axis_algorithm_transformation.hpp	(revision 934)
@@ -11,4 +11,5 @@
 
 #include "generic_algorithm_transformation.hpp"
+#include "grid_transformation_factory_impl.hpp"
 
 namespace xios {
Index: /XIOS/trunk/src/transformation/domain_algorithm_compute_connectivity.cpp
===================================================================
--- /XIOS/trunk/src/transformation/domain_algorithm_compute_connectivity.cpp	(revision 934)
+++ /XIOS/trunk/src/transformation/domain_algorithm_compute_connectivity.cpp	(revision 934)
@@ -0,0 +1,208 @@
+/*!
+   \file domain_algorithm_compute_connectivity.cpp
+   \author Ha NGUYEN
+   \since 15 Jul 2016
+   \date 15 Jul 2016
+
+   \brief Algorithm for compute_connectivity on an domain.
+ */
+#include "domain_algorithm_compute_connectivity.hpp"
+#include "compute_connectivity_domain.hpp"
+#include "mesh.hpp"
+#include "domain.hpp"
+#include "grid.hpp"
+#include "grid_transformation_factory_impl.hpp"
+
+namespace xios {
+CGenericAlgorithmTransformation* CDomainAlgorithmComputeConnectivity::create(CGrid* gridDst, CGrid* gridSrc,
+                                                                     CTransformation<CDomain>* 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<CDomain*> domainListDestP = gridDst->getDomains();
+  std::vector<CDomain*> domainListSrcP  = gridSrc->getDomains();
+
+  CComputeConnectivityDomain* compute_connectivityDomain = dynamic_cast<CComputeConnectivityDomain*> (transformation);
+  int domainDstIndex = elementPositionInGridDst2AxisPosition[elementPositionInGrid];
+  int domainSrcIndex = elementPositionInGridSrc2AxisPosition[elementPositionInGrid];
+
+  return (new CDomainAlgorithmComputeConnectivity(domainListDestP[domainDstIndex], domainListSrcP[domainSrcIndex], compute_connectivityDomain));
+}
+
+bool CDomainAlgorithmComputeConnectivity::registerTrans()
+{
+  CGridTransformationFactory<CDomain>::registerTransformation(TRANS_COMPUTE_CONNECTIVITY_DOMAIN, create);
+}
+
+CDomainAlgorithmComputeConnectivity::CDomainAlgorithmComputeConnectivity(CDomain* domainDestination, CDomain* domainSource,
+                                                                         CComputeConnectivityDomain* compute_connectivityDomain)
+: CDomainAlgorithmTransformation(domainDestination, domainSource)
+{
+  this->type_ = (ELEMENT_NO_MODIFICATION_WITHOUT_DATA);
+  compute_connectivityDomain->checkValid(domainDestination);
+  int& nbNeighborMax = compute_connectivityDomain->n_neighbor_max;
+  CArray<int,1>& nbNeighbor = compute_connectivityDomain->n_neighbor;
+  CArray<int,2>& localNeighbors = compute_connectivityDomain->local_neighbor;
+  switch (compute_connectivityDomain->type)
+  {
+    case CComputeConnectivityDomain::type_attr::node :
+      computeNodeConnectivity(domainDestination,
+                              nbNeighborMax,
+                              nbNeighbor,
+                              localNeighbors);
+      break;
+    case CComputeConnectivityDomain::type_attr::edge :
+      computeEdgeConnectivity(domainDestination,
+                              nbNeighborMax,
+                              nbNeighbor,
+                              localNeighbors);
+      break;
+    default:
+      break;
+  }
+}
+
+void CDomainAlgorithmComputeConnectivity::computeNodeConnectivity(CDomain* domain,
+                                                                  int& nbConnectivityMax,
+                                                                  CArray<int,1>& nbConnectivity,
+                                                                  CArray<int,2>& localConnectivity)
+{
+  CMesh mesh;
+  CArray<double,1>& lon = domain->lonvalue_1d;
+  CArray<double,1>& lat = domain->latvalue_1d;
+  CArray<double,2>& bounds_lon = domain->bounds_lon_1d;
+  CArray<double,2>& bounds_lat = domain->bounds_lat_1d;
+  mesh.createMesh(lon, lat, bounds_lon, bounds_lat);
+  CArray<int, 2>& face_nodes = mesh.face_nodes;
+  int nvertex = mesh.nvertex;
+  int nFaces  = mesh.nbFaces;
+  int nNodes  = mesh.nbNodes;
+  std::vector<std::vector<size_t> > nodeFaceConnectivity(nNodes, std::vector<size_t>());
+  for (int nf = 0; nf < nFaces; ++nf)
+  {
+    for (int nv = 0; nv < nvertex; ++nv)
+    {
+      nodeFaceConnectivity[face_nodes(nv,nf)].push_back(nf);
+    }
+  }
+
+  if (nFaces != nbConnectivity.numElements()) nbConnectivity.resize(nFaces);
+  nbConnectivityMax = 1;
+  for (int nf = 0; nf < nFaces; ++nf)
+  {
+    std::set<size_t> neighFaces;
+    for (int nv = 0; nv < nvertex; ++nv)
+    {
+      std::vector<size_t>& tmpFaces = nodeFaceConnectivity[face_nodes(nv,nf)];
+      for (int nFn = 0; nFn < tmpFaces.size(); ++nFn)
+      {
+        neighFaces.insert(tmpFaces[nFn]);
+      }
+    }
+    if (nbConnectivityMax < (neighFaces.size()-1)) nbConnectivityMax = neighFaces.size()-1;
+  }
+  if ((nbConnectivityMax != localConnectivity.shape()[0]) || (nFaces != localConnectivity.shape()[1]))
+    localConnectivity.resize(nbConnectivityMax, nFaces);
+
+  for (int nf = 0; nf < nFaces; ++nf)
+  {
+    std::set<size_t> neighFaces;
+    for (int nv = 0; nv < nvertex; ++nv)
+    {
+      std::vector<size_t>& tmpFaces = nodeFaceConnectivity[face_nodes(nv,nf)];
+      for (int nFn = 0; nFn < tmpFaces.size(); ++nFn)
+      {
+        neighFaces.insert(tmpFaces[nFn]);
+      }
+    }
+
+    neighFaces.erase(nf);
+    nbConnectivity(nf) = neighFaces.size();
+    std::set<size_t>::iterator it = neighFaces.begin(), ite = neighFaces.end();
+    for (int idx = 0; it != ite; ++it, ++idx)
+    {
+      localConnectivity(idx, nf) = *it;
+    }
+  }
+}
+
+void CDomainAlgorithmComputeConnectivity::computeEdgeConnectivity(CDomain* domain,
+                                                                  int& nbConnectivityMax,
+                                                                  CArray<int,1>& nbConnectivity,
+                                                                  CArray<int,2>& localConnectivity)
+{
+  CMesh mesh;
+  CArray<double,1>& lon = domain->lonvalue_1d;
+  CArray<double,1>& lat = domain->latvalue_1d;
+  CArray<double,2>& bounds_lon = domain->bounds_lon_1d;
+  CArray<double,2>& bounds_lat = domain->bounds_lat_1d;
+  mesh.createMesh(lon, lat, bounds_lon, bounds_lat);
+
+  CArray<int, 2>& face_edges = mesh.face_edges;
+  int nvertex = mesh.nvertex;
+  int nFaces  = mesh.nbFaces;
+  int nEdges  = mesh.nbEdges;
+  std::vector<std::vector<size_t> > edgeFaceConnectivity(nEdges, std::vector<size_t>());
+  for (int nf = 0; nf < nFaces; ++nf)
+  {
+    for (int nv = 0; nv < nvertex; ++nv)
+    {
+      edgeFaceConnectivity[face_edges(nv,nf)].push_back(nf);
+    }
+  }
+
+  if (nFaces != nbConnectivity.numElements()) nbConnectivity.resize(nFaces);
+  nbConnectivityMax = 1;
+  for (int nf = 0; nf < nFaces; ++nf)
+  {
+    std::set<size_t> neighFaces;
+    for (int nv = 0; nv < nvertex; ++nv)
+    {
+      std::vector<size_t>& tmpFaces = edgeFaceConnectivity[face_edges(nv,nf)];
+      for (int nFn = 0; nFn < tmpFaces.size(); ++nFn)
+      {
+        neighFaces.insert(tmpFaces[nFn]);
+      }
+    }
+    if (nbConnectivityMax < (neighFaces.size()-1)) nbConnectivityMax = neighFaces.size() - 1;
+  }
+  if ((nbConnectivityMax != localConnectivity.shape()[0]) || (nFaces != localConnectivity.shape()[1]))
+    localConnectivity.resize(nbConnectivityMax, nFaces);
+
+  for (int nf = 0; nf < nFaces; ++nf)
+  {
+    std::set<size_t> neighFaces;
+    for (int nv = 0; nv < nvertex; ++nv)
+    {
+      std::vector<size_t>& tmpFaces = edgeFaceConnectivity[face_edges(nv,nf)];
+      for (int nFn = 0; nFn < tmpFaces.size(); ++nFn)
+      {
+        neighFaces.insert(tmpFaces[nFn]);
+      }
+    }
+
+    neighFaces.erase(nf);
+    nbConnectivity(nf) = neighFaces.size();
+    std::set<size_t>::iterator it = neighFaces.begin(), ite = neighFaces.end();
+    for (int idx = 0; it != ite; ++it, ++idx)
+    {
+      localConnectivity(idx, nf) = *it;
+    }
+  }
+
+}
+
+/*!
+  Compute the index mapping between domain on grid source and one on grid destination
+*/
+void CDomainAlgorithmComputeConnectivity::computeIndexSourceMapping_(const std::vector<CArray<double,1>* >& dataAuxInputs)
+{
+
+}
+
+}
Index: /XIOS/trunk/src/transformation/domain_algorithm_compute_connectivity.hpp
===================================================================
--- /XIOS/trunk/src/transformation/domain_algorithm_compute_connectivity.hpp	(revision 934)
+++ /XIOS/trunk/src/transformation/domain_algorithm_compute_connectivity.hpp	(revision 934)
@@ -0,0 +1,53 @@
+/*!
+   \file domain_algorithm_compute_connectivity.hpp
+   \author Ha NGUYEN
+   \since 03 June 2015
+   \date 12 June 2015
+
+   \brief Algorithm for compute_connectivitying on an domain.
+ */
+#ifndef __XIOS_DOMAIN_ALGORITHM_COMPUTE_CONNECTIVITY_HPP__
+#define __XIOS_DOMAIN_ALGORITHM_COMPUTE_CONNECTIVITY_HPP__
+
+#include "domain_algorithm_transformation.hpp"
+#include "transformation.hpp"
+
+namespace xios {
+class CDomain;
+class CComputeConnectivityDomain;
+
+/*!
+  \class CDomainAlgorithmComputeConnectivity
+*/
+class CDomainAlgorithmComputeConnectivity : public CDomainAlgorithmTransformation
+{
+public:
+  CDomainAlgorithmComputeConnectivity(CDomain* domainDestination, CDomain* domainSource, CComputeConnectivityDomain* compute_connectivityDomain);
+
+  virtual ~CDomainAlgorithmComputeConnectivity() {}
+
+  static bool registerTrans();
+protected:
+  void computeIndexSourceMapping_(const std::vector<CArray<double,1>* >& dataAuxInputs);
+
+protected:
+  void computeNodeConnectivity(CDomain* domain, int& nbConnectivityMax,
+                               CArray<int,1>& nbConnectivity, CArray<int,2>& localConnectivity);
+
+  void computeEdgeConnectivity(CDomain* domain, int& nbConnectivityMax,
+                               CArray<int,1>& nbConnectivity, CArray<int,2>& localConnectivity);
+
+private:
+  static CGenericAlgorithmTransformation* create(CGrid* gridDst, CGrid* gridSrc,
+                                                CTransformation<CDomain>* 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_DOMAIN_ALGORITHM_COMPUTE_CONNECTIVITY_HPP__
Index: /XIOS/trunk/src/transformation/grid_transformation_selector.cpp
===================================================================
--- /XIOS/trunk/src/transformation/grid_transformation_selector.cpp	(revision 933)
+++ /XIOS/trunk/src/transformation/grid_transformation_selector.cpp	(revision 934)
@@ -18,5 +18,6 @@
 {
   if (0 == source)
-  {  gridSource_ = gridDestination_; isSameGrid_ = true; }
+  {  gridSource_ = gridDestination_; }
+  if (gridSource_ == gridDestination_) isSameGrid_ = true;
 
   //Verify the compatibity between two grids
@@ -321,5 +322,5 @@
 
   //! Domain
-//  CDomainAlgorithmComputeConnectivity::registerTrans();
+  CDomainAlgorithmComputeConnectivity::registerTrans();
   CDomainAlgorithmInterpolate::registerTrans();
   CDomainAlgorithmZoom::registerTrans();
Index: /XIOS/trunk/src/type/type_util.hpp
===================================================================
--- /XIOS/trunk/src/type/type_util.hpp	(revision 933)
+++ /XIOS/trunk/src/type/type_util.hpp	(revision 934)
@@ -40,4 +40,6 @@
     class CExtractDomainToAxis;
     class CExtractDomainToAxisGroup;
+    class CComputeConnectivityDomain;
+    class CComputeConnectivityDomainGroup;
 
   template <typename T> inline string getStrType(void);
@@ -96,4 +98,6 @@
   macro(CExtractDomainToAxis)
   macro(CExtractDomainToAxisGroup)
+  macro(CComputeConnectivityDomain)
+  macro(CComputeConnectivityDomainGroup)
 #undef macro
 }
Index: /XIOS/trunk/src/xml_parser_decl.cpp
===================================================================
--- /XIOS/trunk/src/xml_parser_decl.cpp	(revision 933)
+++ /XIOS/trunk/src/xml_parser_decl.cpp	(revision 934)
@@ -29,4 +29,5 @@
     macro( ReduceDomainToAxis )
     macro( ExtractDomainToAxis )
+    macro( ComputeConnectivityDomain )
   }
 }
